From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: Re: [RFC] ARM: New (Xen) VGIC design document Date: Wed, 1 Nov 2017 14:54:54 -0700 (PDT) Message-ID: References: <20171011143303.27453-1-andre.przywara@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eA0yU-0000lq-08 for xen-devel@lists.xenproject.org; Wed, 01 Nov 2017 21:55:02 +0000 In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Andre Przywara Cc: Stefano Stabellini , Marc Zyngier , Eric Auger , Julien Grall , xen-devel@lists.xenproject.org, Christoffer Dall List-Id: xen-devel@lists.xenproject.org T24gV2VkLCAxIE5vdiAyMDE3LCBBbmRyZSBQcnp5d2FyYSB3cm90ZToKPiBIaSBTdGVmYW5vLAo+ IAo+IAo+IE9uIDAxLzExLzE3IDAxOjU4LCBTdGVmYW5vIFN0YWJlbGxpbmkgd3JvdGU6Cj4gPiBP biBXZWQsIDExIE9jdCAyMDE3LCBBbmRyZSBQcnp5d2FyYSB3cm90ZToKPiAKPiBtYW55IHRoYW5r cyBmb3IgZ29pbmcgdGhyb3VnaCBhbGwgb2YgdGhpcyEKCk5vIHByb2JsZW1zLCBhbmQgdGhhbmtz IGZvciB5b3VyIHdvcmsgYW5kIGZvciBjYXJpbmcgYWJvdXQgZG9pbmcgdGhlCmJlc3QgdGhpbmcg Zm9yIHRoZSBwcm9qZWN0LgoKCj4gPj4gKENDOmluZyBzb21lIEtWTS9BUk0gZm9sa3MgaW52b2x2 ZWQgaW4gdGhlIFZHSUMpCj4gPj4KPiA+PiBzdGFydGluZyB3aXRoIHRoZSBhZGRpdGlvbiBvZiB0 aGUgSVRTIHN1cHBvcnQgd2Ugd2VyZSBzZWVpbmcgbW9yZSBhbmQKPiA+PiBtb3JlIGlzc3VlcyB3 aXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIG91ciBBUk0gR2VuZXJpYyBJbnRlcnJ1 cHQKPiA+PiBDb250cm9sbGVyIChHSUMpIGVtdWxhdGlvbiwgdGhlIFZHSUMuCj4gPj4gQW1vbmcg b3RoZXIgYXBwcm9hY2hlcyB0byBmaXggdGhvc2UgaXNzdWVzIGl0IHdhcyBwcm9wb3NlZCB0byBj b3B5IHRoZQo+ID4+IFZHSUMgZW11bGF0aW9uIHVzZWQgaW4gS1ZNLiBUaGlzIG9uZSB3YXMgc3Vm ZmVyaW5nIGZyb20gdmVyeSBzaW1pbGFyCj4gPj4gaXNzdWVzLCBhbmQgYSBjbGVhbiBkZXNpZ24g ZnJvbSBzY3JhdGNoIGxlYWQgdG8gYSB2ZXJ5IHJvYnVzdCBhbmQKPiA+PiBjYXBhYmxlIHJlLWlt cGxlbWVudGF0aW9uLiBJbnRlcmVzdGluZ2x5IHRoaXMgaW1wbGVtZW50YXRpb24gaXMgZmFpcmx5 Cj4gPj4gc2VsZi1jb250YWluZWQsIHNvIGl0IHNlZW1zIGZlYXNpYmxlIHRvIGNvcHkgaXQuIEhv cGVmdWxseSB3ZSBvbmx5IG5lZWQKPiA+PiBtaW5vciBhZGp1c3RtZW50cywgcG9zc2libHkgd2Ug Y2FuIGV2ZW4gY29weSBpdCB2ZXJiYXRpbSB3aXRoIHNvbWUKPiA+PiBhZGRpdGlvbmFsIGdsdWUg bGF5ZXIgY29kZS4KPiA+Pgo+ID4+IFN0ZWZhbm8gYXNrZWQgZm9yIGdldHRpbmcgYSBkZXNpZ24g b3ZlcnZpZXcsIHRvIGFzc2VzcyB0aGUgZmVhc2liaWxpdHkKPiA+PiBvZiBjb3B5aW5nIHRoZSBL Vk0gY29kZSB3aXRob3V0IHJldmlld2luZyB0b25zIG9mIGNvZGUgaW4gdGhlIGZpcnN0Cj4gPj4g cGxhY2UuCj4gPj4gU28gdG8gZm9sbG93IFhlbiBydWxlcyBmb3IgbmV3IGZlYXR1cmVzLCB0aGlz IGRlc2lnbiBkb2N1bWVudCBiZWxvdyBpcwo+ID4+IGFuIGF0dGVtcHQgdG8gZGVzY3JpYmUgdGhl IGN1cnJlbnQgS1ZNIFZHSUMgZGVzaWduIC0gaW4gYSBoeXBlcnZpc29yCj4gPj4gYWdub3N0aWMg c2Vzc2lvbi4gSXQgaXMgYSBiaXQgb2YgYSByZXRyby1maXQgZGVzaWduIGRlc2NyaXB0aW9uLCBh cyBpdAo+ID4+IGlzIG5vdCBzdHJpY3RseSBmb3J3YXJkLWxvb2tpbmcgb25seSwgYnV0IGFjdHVh bGx5IGRlc2NyaWJpbmcgdGhlCj4gPj4gZXhpc3RpbmcgaW1wbGVtZW5hdGlvbiBbMV0uCj4gPj4K PiA+PiBQbGVhc2UgaGF2ZSBhIGxvb2sgYW5kIGxldCBtZSBrbm93Ogo+ID4+IDEpIGlmIHRoaXMg ZG9jdW1lbnQgaGFzIHRoZSByaWdodCBzY29wZQo+ID4+IDIpIGlmIHRoaXMgZG9jdW1lbnQgaGFz IHRoZSByaWdodCBsZXZlbCBvZiBkZXRhaWwKPiA+PiAzKSBpZiB0aGVyZSBhcmUgcG9pbnRzIG1p c3NpbmcgZnJvbSB0aGUgZG9jdW1lbnQKPiA+PiAzKSBpZiB0aGUgZGVzaWduIGluIGdlbmVyYWwg aXMgYSBmaXQKPiA+IAo+ID4gUGxlYXNlIHJlYWQgdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnRzIGFz IGdlbnVpbmUgcXVlc3Rpb25zIGFuZCBjb25jZXJucy4KPiA+IE1vc3QgaWRlYXMgb24gdGhpcyBk b2N1bWVudCBhcmUgZ29vZC4gU29tZSBvZiB0aGVtIEkgaGF2ZSBldmVuIHN1Z2dlc3RlZAo+ID4g dGhlbSBteXNlbGYgaW4gdGhlIGNvbnRleHQgb2YgR0lDIGltcHJvdmVtZW50cyBmb3IgWGVuLiBJ IGFza2VkIGZvciBhCj4gPiBjb3VwbGUgb2YgY2xhcmlmaWNhdGlvbnMuCj4gPiAKPiA+IEJ1dCBJ IGRvbid0IHNlZSB3aHkgd2UgY2Fubm90IGltcGxlbWVudCB0aGVzZSBpZGVhcyBvbiB0b3Agb2Yg dGhlCj4gPiBleGlzdGluZyBjb2RlLCByYXRoZXIgdGhhbiB3aXRoIGEgc2VwYXJhdGUgY29kZWJh c2UsIGVuZGluZyB1cCB3aXRoIHR3bwo+ID4gZHJpdmVycy4gSSB3b3VsZCBwcmVmZXIgYSBuYXR1 YWwgZXZvbHV0aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBmb2xsb3dpbmcKPiA+IGltcHJvdmVtZW50 cyB3b3VsZCBiZSBzaW1wbGUgYW5kIHdvdWxkIGdpdmUgdXMgbW9zdCBvZiB0aGUgYmVuZWZpdHMg b24KPiA+IHRvcCBvZiB0aGUgY3VycmVudCBjb2RlYmFzZToKPiA+IC0gYWRkaW5nIHRoZSBpcnEg bG9jaywgYW5kIHRoZSByZWZjb3VudAo+ID4gLSB0YWtpbmcgYm90aCB2Y3B1IGxvY2tzIHdoZW4g bmVjZXNzYXJ5IChvbiBtaWdyYXRpb24gY29kZSBmb3IgZXhhbXBsZQo+ID4gICBpdCB3b3VsZCBo ZWxwIGEgbG90KSwgdGhlIGxvd2VyIHZjcHVfaWQgZmlyc3QKPiA+IC0gbGV2ZWwgaXJxIGVtdWxh dGlvbgo+IAo+IEkgdGhpbmsgc29tZSBvZiB0aG9zZSBwb2ludHMgeW91IG1lbnRpb25lZCBhcmUg bm90IGVhc2lseSBpbXBsZW1lbnRlZCBpbgo+IHRoZSBjdXJyZW50IFhlbi4gRm9yIGluc3RhbmNl IEkgcmFuIGludG8gbG9ja2luZyBvcmRlciBpc3N1ZXMgd2l0aCB0aG9zZQo+ICp0d28qIGluZmxp Z2h0IGFuZCBscl9xdWV1ZSBsaXN0cywgd2hlbiB0cnlpbmcgdG8gaW1wbGVtZW50IHRoZSBsb2Nr IGFuZAo+IHRoZSByZWZjb3VudC4KPiBBbHNvIHRoaXMgInB1dCB2SVJRcyBpbnRvIExScyBlYXJs eSwgYnV0IHBvc3NpYmx5IHJpcCB0aGVtIG91dCBhZ2FpbiIgaXMKPiByZWFsbHkgY29tcGxpY2F0 aW5nIHRoaW5ncyBhIGxvdC4KPiAKPiBJIGJlbGlldmUgb25seSBsZXZlbCBJUlFzIGNvdWxkIGJl IGFkZGVkIGluIGEgcmVsYXRpdmVseSBzdHJhaWdodAo+IGZvcndhcmQgbWFubmVyLgo+IAo+IFNv IHRoZSBwcm9ibGVtIHdpdGggdGhlIGV2b2x1dGlvbmFyeSBhcHByb2FjaCBpcyB0aGF0IGl0IGdl bmVyYXRlcyBhIGxvdAo+IG9mIHBhdGNoZXMsIHNvbWUgb2YgdGhlbSBxdWl0ZSBpbnZhc2l2ZSwg b3RoZXJzIGNyZWF0aW5nIGhhcmQtdG8tcmVhZAo+IGRpZmZzLCB3aGljaCBhcmUgYm90aCBoYXJk IHRvIHJldmlldy4KPiBBbmQgY2hhbmNlcyBhcmUgdGhhdCB0aGUgYWN0dWFsIHJlc3VsdCB3b3Vs ZCBiZSBwcmV0dHkgY2xvc2UgdG8gdGhlIEtWTQo+IGNvZGUuIFRvIGJlIGNsZWFyOiBJIGhhY2tl ZCB0aGUgWGVuIFZHSUMgaW50byB0aGUgS1ZNIGRpcmVjdGlvbiBpbiBhIGZldwo+IGRheXMgc29t ZSBtb250aHMgYWdvLCBidXQgaXQgdG9vayBtZSAqd2Vla3MqIHRvIG1ha2Ugc2FuZSBwYXRjaGVz IG9mCj4gb25seSB0aGUgZmlyc3QgcGFydCBvZiBpdC4KPiBBbmQgdGhpcyB3b3VsZCBub3QgY292 ZXIgYWxsIHRob3NlIGdlbmVyYWwsIHRlZGlvdXMgY29ybmVyIGNhc2VzIHRoYXQKPiB0aGUgVkdJ QyBjb21lcyB3aXRoLiBUaG9zZSB3b3VsZCBuZWVkIHRvIGJlIGZpeGVkIGluIGEgcGFpbmZ1bCBw cm9jZXNzLAo+IHdoaWNoIHdlIGNvdWxkIGF2b2lkIGJ5ICJsaWZ0aW5nIiB0aGUgS1ZNIGNvZGUu CgpJIGhlYXIgeW91LCBidXQgdGhlIHByaW5jaXBhbCBjb3N0IGhlcmUgaXMgdGhlIHJldmlldyB0 aW1lLCBub3QgdGhlCmRldmVsb3BtZW50IHRpbWUuIEp1bGllbiB0b2xkIG1lIHRoYXQgaXQgd291 bGQgYmUgcHJldHR5IG11Y2ggdGhlIHNhbWUKZm9yIGhpbSBpbiB0ZXJtcyBvZiB0aW1lIGl0IHRh a2VzIHRvIHJldmlldyB0aGUgY2hhbmdlcywgaXQgZG9lc24ndAptYXR0ZXIgaWYgaXQncyBhIG5l dyBkcml2ZXIgb3IgY2hhbmdlcyB0byB0aGUgZXhpc3RpbmcgZHJpdmVyLiBGb3IgbWUsCml0IHdv dWxkbid0IGJlIHRoZSBzYW1lOiBJIHRoaW5rIGl0IHdvdWxkIHRha2UgbWUgZmFyIGxlc3MgdGlt ZSB0bwpyZXZpZXcgdGhlbSBpZiB0aGV5IHdlcmUgYWdhaW5zdCB0aGUgZXhpc3RpbmcgY29kZWJh c2UuCgpIb3dldmVyLCBhcyBJIHdyb3RlLCB0aGlzIGlzIG5vdCBteSBmb3JlbW9zdCBjb25jZXJu LiBJIHdvdWxkIGJlIHVwIHRvCmNvbW1pdHRpbmcgbXlzZWxmIHRvIHJldmlldyB0aGlzIGV2ZW4g aWYgd2UgZGVjaWRlIHRvIGdvIGZvciBhIG5ldwpkcml2ZXIuCgoKPiA+IElmIHdlIGRvIGVuZCB1 cCB3aXRoIGEgc2Vjb25kIHNlcGFyYXRlIGRyaXZlciBmb3IgdGVjaG5pY2FsIG9yIHByb2Nlc3MK PiA+IHJlYXNvbnMsIEkgd291bGQgZXhwZWN0IHRoZSByZWd1bGFyIFhlbiBzdWJtaXNzaW9uL3Jl dmlldyBwcm9jZXNzIHRvIGJlCj4gPiBmb2xsb3dlZC4gVGhlIGNvZGUgc3R5bGUgd2lsbCBiZSBk aWZmZXJlbnQsIHRoZSBob29rcyBpbnRvIHRoZSByZXN0IG9mCj4gPiB0aGUgaHlwZXJ2aXNvcnMg d2lsbCBiZSBkaWZmZXJlbnQgYW5kIHRoaW5ncyB3aWxsIGJlIGdlbmVyYWxseSBjaGFuZ2VkLgo+ ID4gVGhlIG5ldyBWL0dJQyBtaWdodCBiZSBkZXJpdmVkIGZyb20gS1ZNLCBidXQgaXQgc2hvdWxk IGVuZCB1cCBsb29raW5nCj4gPiBhbmQgZmVlbGluZyBsaWtlIGEgMTAwJSBnZW51aW5lIFhlbiBj b21wb25lbnQuIEFmdGVyIGFsbCwgd2UnbGwKPiA+IG1haW50YWluIGl0IGdvaW5nIGZvcndhcmQu IEkgZG9uJ3Qgd2FudCBhIGNvcHkgb2YgYSBMaW51eCBkcml2ZXIgd2l0aAo+ID4gZ2x1ZSBjb2Rl LiBUaGUgWGVuIGNvbW11bml0eSBjYW5ub3QgYmUgZXhwZWN0ZWQgbm90IHRvIHJldmlldyB0aGUK PiA+IHN1Ym1pc3Npb24sIGJ1dCBpZiB3ZSByZXZpZXcgaXQsIHRoZW4gd2UnbGwgYXNrIGZvciBj aGFuZ2VzLiBPbmNlIHdlCj4gPiBjaGFuZ2UgdGhlIGNvZGUsIHRoZXJlIHdpbGwgYmUgbm8gcG9p bnQgaW4ga2VlcGluZyB0aGUgTGludXggY29kZQo+ID4gc2VwYXJhdGUgd2l0aCBnbHVlIGNvZGUu IFdlIHNob3VsZCBmdWxseSBhZGFwdCBpdCB0byBYZW4uCj4gCj4gSSBzZWUgeW91ciBwb2ludCwg YW5kIHRoaXMgYWN0dWFsbHkgc2ltcGxpZmllcyAqbXkqIHdvcmssIGJ1dCBJIGFtIGEgYml0Cj4g d29ycmllZCBhYm91dCB0aGUgZWZmZWN0cyBvZiBoYXZpbmcgdHdvIHNlcGFyYXRlIGltcGxlbWVu dGF0aW9ucyB3aGljaAo+IHRoZW4gZGl2ZXJnZSBvdmVyIHRpbWUuCj4gSW4gdGhlIG1vbWVudCB3 ZSBoYXZlIHR3byBzZXBhcmF0ZSBpbXBsZW1lbnRhdGlvbnMgYXMgd2VsbCwgYnV0IHRoZXkgYXJl Cj4gcXVpdGUgZGlmZmVyZW50LCB3aGljaCBoYXMgdGhlIGFkdmFudGFnZSBvZiBkb2luZyB0aGlu Z3MgZGlmZmVyZW50bHkKPiBlbm91Z2ggdG8gaGVscCBpbiBmaW5kaW5nIGJ1Z3MgaW4gdGhlIG90 aGVyIG9uZSAoc29tZXRoaW5nIHdlIHNob3VsZAo+IGFjdHVhbGx5IGV4cGxvaXQgaW4gdGVzdGlu ZywgSSBiZWxpZXZlKS4KCkl0IGlzIGEgbWF0dGVyIG9mIG93bmVyc2hpcCBhbmQgcmVzcG9uc2li aWxpdGllcy4gVGhlIGdpYyBhbmQgdmdpYwpjb21wb25lbnRzIGFyZSBjcml0aWNhbCB0byB0aGUg aHlwZXJ2aXNvciBmdW5jdGlvbmFsaXRpZXMsIGFuZCBhcyBYZW4KUHJvamVjdCB3ZSBuZWVkIHRv IHRha2Ugb3duZXJzaGlwIG9mIHRoZW0uIEl0IG1lYW5zIGZpeGluZyBidWdzIGFuZAptYWludGFp bmluZyB0aGVtIGdvaW5nIGZvcndhcmQuIEl0IG1ha2VzIHNlbnNlIHRvIGhhdmUgdGhlbSBmdWxs eQppbnRlZ3JhdGVkIGludG8gWGVuLgoKCj4gU28gaG93IGlzIHlvdXIgZmVlbGluZyB0b3dhcmRz IHNvbWUgc2hhcmVkICJsaWJ2Z2ljIj8gSSB1bmRlcnN0YW5kIHRoYXQKPiBwZW9wbGUgYXJlIG5v dCB0b28gaGFwcHkgYWJvdXQgdGhhdCBleHRyYSBtYWludGVuYW5jZSBjb3N0IG9mIGhhdmluZyBh Cj4gc2VwYXJhdGUgcmVwb3NpdG9yeSwgYnV0IEkgYW0gY3VyaW91cyB3aGF0IHlvdXIsIE1hcmMn cyBhbmQKPiBDaHJpc3RvZmZlcidzIHRha2UgaXMgb24gdGhpcyBpZGVhLgoKSSBhbSBvcGVuIHRv IHRoaXMgZGlzY3Vzc2lvbi4gSXQgaXMgbmljZSBpbiB0aGVvcnksIGJ1dCBpdCBpcyBoYXJkIHRv CnB1dCBpbnRvIHByYWN0aWNlLiBJIHRoaW5rIG5laXRoZXIgSnVsaWVuIGFuZCBJIG5vciBDaHJp c3RvZmZlciBhbmQgTWFyYwpsaWtlIHRoZSBpZGVhIG9mIGEgc2VwYXJhdGUgcmVwb3NpdG9yeS4g SXQgaXMgYSBwYWluIGFuZCBpdCBpcyB1Z2x5LiBCdXQKaWYgd2UgZG9uJ3QgaGF2ZSBhIHNpbmds ZSByZXBvc2l0b3J5LCBob3cgY2FuIHdlIHNoYXJlIHRoZSBjb2RlYmFzZT8KCkFsc28ga2VlcCBp biBtaW5kIHRoYXQgWGVuIGFuZCBMaW51eCBoYXZlIGRpZmZlcmVudCByZWxlYXNlIGN5Y2xlcyBh bmQKdGhleSBnbyBpbnRvIGZyZWV6ZSBhdCBkaWZmZXJlbnQgdGltZXMuIEl0IGFmZmVjdHMgd2hl bi9ob3cgZml4ZXMgY2FuCmdldCBpbnRvIHRoZSBjb2RlYmFzZS4KClVubGVzcyB5b3UgY29tZSB1 cCB3aXRoIGEgY2xldmVyIGlkZWEgb24gaG93IHRvIG1ha2UgdGhpcyB3b3JrLCBJIHRoaW5rCndl IGFyZSBiZXR0ZXIgb2ZmIHdpdGggb3VyIG93biB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIuCgoKPiA+ IFRoYXQgaXMgd2hhdCB3YXMgZG9uZSBpbiB0aGUgcGFzdCB3aGVuIEtWTSB0b29rIGNvZGUgZnJv bSBYZW4gKGZvcgo+ID4gZXhhbXBsZSBhc3luYyBzaGFkb3cgcGFnZXRhYmxlcykuIEkgYW0gZWFn ZXIgdG8gYXZvaWQgYSBzaXR1YXRpb24gbGlrZQo+ID4gdGhlIGN1cnJlbnQgU01NVSBkcml2ZXIg aW4gWGVuLCB3aGljaCBjb21lcyBmcm9tIExpbnV4LCBhbmQgd2UgYXJlIG5vdAo+ID4gZW50aXJl bHkgc3VyZSBob3cgdG8gbWFpbnRhaW4gaXQuCj4gPiAKPiA+IAo+ID4+IEFwcHJlY2lhdGUgYW55 IGZlZWRiYWNrIQo+ID4+Cj4gPj4gQ2hlZXJzLAo+ID4+IEFuZHJlLgo+ID4+Cj4gPj4gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPj4KPiA+PiBWR0lDIGRlc2lnbgo+ ID4+ID09PT09PT09PT09Cj4gPj4KPiA+PiBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgZGVz aWduIG9mIGFuIEFSTSBHZW5lcmljIEludGVycnVwdCBDb250cm9sbGVyIChHSUMpCj4gPj4gZW11 bGF0aW9uLiBJdCBpcyBtZWFudCB0byBlbXVsYXRlIGEgR0lDIGZvciBhIGd1ZXN0IGluIGFuIHZp cnR1YWwgbWFjaGluZSwKPiA+PiB0aGUgY29tbW9uIG5hbWUgZm9yIHRoYXQgaXMgVkdJQyAoZnJv bSAidmlydHVhbCBHSUMiKS4KPiA+Pgo+ID4+IFRoaXMgZGVzaWduIHdhcyB0aGUgcmVzdWx0IG9m IGEgb25lLXdlZWstbG9uZyBkZXNpZ24gc2Vzc2lvbiB3aXRoIHNvbWUKPiA+PiBlbmdpbmVlcnMg aW4gYSByb29tLCB0cmlnZ2VyZWQgYnkgZXZlci1pbmNyZWFzaW5nIGRpZmZpY3VsdGllcyBpbiBt YWludGFpbmluZwo+ID4+IHRoZSBleGlzdGluZyBHSUMgZW11bGF0aW9uIGluIHRoZSBLVk0gaHlw ZXJ2aXNvci4gVGhlIGRlc2lnbiBldmVudHVhbGx5Cj4gPj4gbWF0ZXJpYWxpc2VkIGFzIGFuIGFs dGVybmF0aXZlIFZHSUMgaW1wbGVtZW50YXRpb24gaW4gdGhlIExpbnV4IGtlcm5lbAo+ID4+ICht ZXJnZWQgaW50byBMaW51eCB2NC43KS4gQXMgb2YgTGludXggdjQuOCB0aGUgcHJldmlvdXMgVkdJ QyBpbXBsZW1lbnRhdGlvbgo+ID4+IHdhcyByZW1vdmVkLCBzbyBpdCBpcyBub3cgdGhlIGN1cnJl bnQgY29kZSB1c2VkIGJ5IExpbnV4Lgo+ID4+IEFsdGhvdWdoIGJlaW5nIHVzZWQgaW4gS1ZNLCB0 aGUgYWN0dWFsIGRlc2lnbiBvZiB0aGlzIFZHSUMgaXMgcmF0aGVyIGh5cGVydmlzb3IKPiA+PiBh Z25vc3RpYyBhbmQgY2FuIGJlIHVzZWQgYnkgb3RoZXIgaHlwZXJ2aXNvcnMgYXMgd2VsbCwgaW4g cGFydGljdWxhciBmb3IgWGVuLgo+ID4+Cj4gPj4gR0lDIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9u IHN1cHBvcnQKPiA+PiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4+Cj4g Pj4gVGhlIEFSTSBHZW5lcmljIEludGVycnVwdCBDb250cm9sbGVyIChzaW5jZSB2Mikgc3VwcG9y dHMgdGhlIHZpcnR1YWxpemF0aW9uCj4gPj4gZXh0ZW5zaW9ucywgd2hpY2ggYWxsb3dzIHNvbWUg cGFydHMgb2YgdGhlIGludGVycnVwdCBsaWZlIGN5Y2xlIHRvIGJlIGhhbmRsZWQKPiA+PiBwdXJl bHkgaW5zaWRlIHRoZSBndWVzdCB3aXRob3V0IGV4aXRpbmcgaW50byB0aGUgaHlwZXJ2aXNvci4K PiA+PiBJbiB0aGUgR0lDdjIgYW5kIEdJQ3YzIGFyY2hpdGVjdHVyZSB0aGlzIGNvdmVycyBtb3N0 bHkgdGhlICJpbnRlcnJ1cHQKPiA+PiBhY2tub3dsZWRnZW1lbnQiLCAicHJpb3JpdHkgZHJvcCIg YW5kICJpbnRlcnJ1cHQgZGVhY3RpdmF0ZSIgYWN0aW9ucy4KPiA+PiBTbyBhIGd1ZXN0IGNhbiBo YW5kbGUgbW9zdCBvZiB0aGUgaW50ZXJydXB0IHByb2Nlc3NpbmcgY29kZSB3aXRob3V0Cj4gPj4g bGVhdmluZyBFTDEgYW5kIHRyYXBwaW5nIGludG8gdGhlIGh5cGVydmlzb3IuIFRvIGFjY29tcGxp c2gKPiA+PiB0aGlzLCB0aGUgR0lDIGhvbGRzIHNvIGNhbGxlZCAibGlzdCByZWdpc3RlcnMiIChM UnMpLCB3aGljaCBzaGFkb3cgdGhlCj4gPj4gaW50ZXJydXB0IHN0YXRlIGZvciBhbnkgdmlydHVh bCBpbnRlcnJ1cHQuIEluamVjdGluZyBhbiBpbnRlcnJ1cHQgdG8gYSBndWVzdAo+ID4+IGludm9s dmVzIHNldHRpbmcgdXAgb25lIExSIHdpdGggdGhlIGludGVycnVwdCBudW1iZXIsIGl0cyBwcmlv cml0eSBhbmQgaW5pdGlhbAo+ID4+IHN0YXRlIChtb3N0bHkgInBlbmRpbmciKSwgdGhlbiBlbnRl cmluZyB0aGUgZ3Vlc3QuIEFueSBFT0kgcmVsYXRlZCBhY3Rpb24KPiA+PiBmcm9tIHdpdGhpbiB0 aGUgZ3Vlc3QganVzdCBhY3RzIG9uIHRob3NlIExScywgdGhlIGh5cGVydmlzb3IgY2FuIGxhdGVy IHVwZGF0ZQo+ID4+IHRoZSB2aXJ0dWFsIGludGVycnVwdCBzdGF0ZSB3aGVuIHRoZSBndWVzdCBl eGlzdHMgdGhlIG5leHQgdGltZSAoZm9yIHdoYXRldmVyCj4gPj4gcmVhc29uKS4KPiA+PiBCdXQg ZGVzcGl0ZSB0aGUgR0lDIGhhcmR3YXJlIGhlbHBpbmcgb3V0IGhlcmUsIHRoZSB3aG9sZSBpbnRl cnJ1cHQKPiA+PiBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQgaXMgbm90IHZpcnR1YWxpemVkIGF0 IGFsbCBhbmQgbmVlZHMgdG8gYmUgZW11bGF0ZWQKPiA+PiBieSB0aGUgaHlwZXJ2aXNvciAtIG9y IGFub3RoZXIgcmVsYXRlZCBzb2Z0d2FyZSBjb21wb25lbnQsIGZvciBpbnN0YW5jZSBhCj4gPj4g dXNlcmxhbmQgZW11bGF0b3IuIFRoaXMgc28gY2FsbGVkICJkaXN0cmlidXRvciIgcGFydCBvZiB0 aGUgR0lDIGNvbnNpc3RzIG9mCj4gPj4gbWVtb3J5IG1hcHBlZCByZWdpc3RlcnMsIHdoaWNoIGNh biBiZSB0cmFwcGVkIGJ5IHRoZSBoeXBlcnZpc29yLCBzbyBhbnkgZ3Vlc3QKPiA+PiBhY2Nlc3Mg Y2FuIGJlIGVtdWxhdGVkIGluIHRoZSB1c3VhbCB3YXkuCj4gPj4KPiA+PiBWR0lDIGRlc2lnbiBt b3RpdmF0aW9uCj4gPj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4+Cj4gPj4gQSBHSUMgZW11 bGF0aW9uIHRodXMgbmVlZHMgdG8gdGFrZSBjYXJlIG9mIHRob3NlIGJpdHM6Cj4gPj4KPiA+PiAt IHRyYXAgR0lDIGRpc3RyaWJ1dG9yIE1NSU8gYWNjZXNzZXMgYW5kIHNoYWRvdyB0aGUgY29uZmln dXJhdGlvbiBzZXR1cAo+ID4+ICAgKGVuYWJsZWQvZGlzYWJsZWQsIGxldmVsL2VkZ2UsIHByaW9y aXR5LCBhZmZpbml0eSkgZm9yIHZpcnR1YWwgaW50ZXJydXB0cwo+ID4+IC0gaGFuZGxlIGluY29t aW5nIGhhcmR3YXJlIGFuZCB2aXJ0dWFsIGludGVycnVwdCByZXF1ZXN0cyBhbmQgaW5qZWN0IHRo ZQo+ID4+ICAgYXNzb2NpYXRlZCB2aXJ0dWFsIGludGVycnVwdCBieSBtYW5pcHVsYXRpbmcgb25l IG9mIHRoZSBsaXN0IHJlZ2lzdGVycwo+ID4+IC0gdHJhY2sgdGhlIHN0YXRlIG9mIGEgdmlydHVh bCBpbnRlcnJ1cHQgYnkgaW5zcGVjdGluZyB0aGUgTFJzIGFmdGVyIHRoZQo+ID4+ICAgZ3Vlc3Qg aGFzIGV4aXRlZCwgcG9zc2libHkgYWRqdXN0aW5nIHRoZSBzaGFkb3dlZCB2aXJ0dWFsIGludGVy cnVwdCBzdGF0ZQo+ID4+Cj4gPj4gRGVzcGl0ZSB0aGUgZGlzdHJpYnV0b3IgTU1JTyByZWdpc3Rl ciBlbXVsYXRpb24gYmVpbmcgYSBzaXplYWJsZSBjaHVuayBvZgo+ID4+IHRoZSBlbXVsYXRpb24s IGl0IGlzIGFjdHVhbGx5IG5vdCBkb21pbmFudCBpZiBsb29raW5nIGF0IHRoZSBmcmVxdWVuY3kg YXQKPiA+PiB3aGljaCBpdCBpcyBhY2Nlc3NlZC4gTm9ybWFsbHkgdGhlIGludGVycnVwdCBjb25m aWd1cmF0aW9uIGlzIGRvbmUgYXQgYm9vdAo+ID4+IHRpbWUgb3IgdXBvbiBpbml0aWFsaXNpbmcg dGhlIGRldmljZSAoZHJpdmVyKSwgYnV0IHJhcmVseSBkdXJpbmcgdGhlIGFjdHVhbAo+ID4+IHJ1 biB0aW1lIG9mIGEgc3lzdGVtLiBJbmplY3RpbmcgYW5kIEVPSS1pbmcgaW50ZXJydXB0cyBob3dl dmVyIGhhcHBlbnMgbXVjaAo+ID4+IG1vcmUgb2Z0ZW4uIEEgZ29vZCBlbXVsYXRpb24gYXBwcm9h Y2ggc2hvdWxkIHRodXMgZm9jdXMgb24gdHJhY2tpbmcgdGhlIHZpcnR1YWwKPiA+PiBpbnRlcnJ1 cHQgc3RhdGUgZWZmaWNpZW50bHksIGFsbG93aW5nIHF1aWNrIGhhbmRsaW5nIG9mIGluY29taW5n IGFuZCBFT0ktZWQKPiA+PiBpbnRlcnJ1cHRzLgo+ID4+Cj4gPj4gVGhlIGFjdHVhbCBpbnRlcnJ1 cHQgc3RhdGUgdHJhY2tpbmcgY2FuIGJlIHF1aXRlIHRyaWNreSBpbiBwYXJ0cy4gSW50ZXJydXB0 Cj4gPj4gaW5qZWN0aW9ucyBjYW4gYmUgaW5kZXBlbmRlbnQgZnJvbSB0aGUgZ3Vlc3QgZW50cnkv ZXhpdCBwb2ludHMsIGFsc28gTU1JTwo+ID4+IGNvbmZpZ3VyYXRpb24gYWNjZXNzZXMgY291bGQg YmUgdHJpZ2dlcmVkIGJ5IGFueSBWQ1BVIGF0IGFueSBwb2ludCBpbiB0aW1lLgo+ID4+IENoYW5n aW5nIGludGVycnVwdCBDUFUgYWZmaW5pdHkgYWRkcyB0byB0aGUgY29tcGxpY2F0aW9uLgo+ID4+ IFRoaXMgbGVhZHMgdG8gbWFueSBjb2RlIHBhcnRzIHdoaWNoIGNvdWxkIHJ1biBpbiBwYXJhbGxl bCBhbmQgdGh1cyBjb250YWlucwo+ID4+IHNvbWUgcmFjZSBjb25kaXRpb25zLCBzbyBwcm9wZXIg bG9ja2luZyBiZWNvbWVzIGtleSBvZiBhIGdvb2QgZGVzaWduLgo+ID4+IEJ1dCBvbmUgaGFzIHRv IGNvbnNpZGVyIHRoYXQgaW50ZXJydXB0cyBpbiBnZW5lcmFsIGNhbiBiZSBjaGFyYWN0ZXJpc2Vk Cj4gPj4gYXMgYSByYXJlIGV2ZW50IC0gb3RoZXJ3aXNlIGEgZ3Vlc3Qgd291bGQgYmUgYnVzeSBo YW5kbGluZyBpbnRlcnJ1cHRzIGFuZCBjb3VsZAo+ID4+IG5vdCBwcm9jZXNzIGFjdHVhbCBjb21w dXRhdGlvbiB0YXNrcy4KPiA+PiBUaGF0J3Mgd2h5IHRoZSBpbnRlcnJ1cHQgc3RhdGUgdHJhY2tp bmcgc2hvdWxkIGZvY3VzIG9uIGEgY2xlYXIgYW5kIHJhY2UtZnJlZQo+ID4+IGxvY2tpbmcgc2No ZW1lLCB3aXRob3V0IG5lZWRsZXNzbHkgb3B0aW1pc2luZyB0b28gbXVjaCBpbiB0aGlzIHJlc3Bl Y3QuCj4gPj4gRXhwZXJpZW5jZSBzaG93cyB0aGF0IHRoaXMgY29tcGxpY2F0ZXMgdGhlIGNvZGUg YW5kIGxlYWRzIHRvIHVuZGV0ZWN0ZWQgYW5kCj4gPj4gaGFyZC10by1kZWJ1ZyByYWNlIGNvbmRp dGlvbnMsIHdoaWNoIGFmZmVjdCB0aGUgc3RhYmlsaXR5IG9mIHRoZSBzeXN0ZW0gaW4KPiA+PiBw b3NzaWJseSB1bnRlc3RlZCBjb3JuZXIgY2FzZXMuCj4gPj4KPiA+PiBWR0lDIGRlc2lnbiBwcmlu Y2lwbGVzCj4gPj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4+Cj4gPj4gIyMjIERhdGEgc3Ry dWN0dXJlCj4gPj4KPiA+PiBUaGlzIFZHSUMgZGVzaWduIGlzIGJhc2VkIG9uIHRoZSBpZGVhIG9m IGhhdmluZyBvbmUgc3RydWN0dXJlIHBlciB2aXJ0dWFsCj4gPj4gaW50ZXJydXB0LCBwcm90ZWN0 ZWQgYnkgaXRzIG93biBsb2NrLiBJbiBhZGRpdGlvbiB0aGVyZSBpcyBhIGxpc3QgcGVyIFZDUFUs Cj4gPj4gd2hpY2ggcXVldWVzIHRoZSBpbnRlcnJ1cHRzIHdoaWNoIHRoaXMgVkNQVSBzaG91bGQg Y29uc2lkZXIgZm9yIGluamVjdGlvbi4KPiA+PiBPbmUgaW50ZXJydXB0IGNhbiBvbmx5IGJlIG9u IG9uZSBWQ1BVIGxpc3QgYXQgYW55IGdpdmVuIHBvaW50IGluIHRpbWUuCj4gPj4gRm9yIHByaXZh dGUgaW50ZXJydXB0cyBhbmQgU1BJcyBhIHN0YXRpYyBhbGxvY2F0aW9uIG9mIHRoaXMgZGF0YSBz dHJ1Y3R1cmUKPiA+PiB3b3VsZCBiZSBzdWZmaWNpZW50LCBob3dldmVyIExQSXMgKHRyaWdnZXJl ZCBieSBhICh2aXJ0dWFsKSBJVFMpIGhhdmUgYSB2ZXJ5Cj4gPj4gZHluYW1pYyBhbmQgcG9zc2li bHkgdmVyeSBzcGFyc2UgYWxsb2NhdGlvbiBzY2hlbWUsIHNvIHdlIG5lZWQgdG8gZGVhbCB3aXRo Cj4gPj4gZHluYW1pYyBhbGxvY2F0aW9uIGFuZCBkZS1hbGxvY2F0aW9uIG9mIHRoaXMgc3RydWN0 LiBUbyBhY2NvbW1vZGF0ZSB0aGlzCj4gPj4gdGhlcmUgaXMgYW4gYWRkaXRpb25hbCBsaXN0IGhl YWRlciB0byBsaW5rIGFsbCBMUElzLgo+ID4+IEFsc28gdGhlIExQSSBtYXBwaW5nIGFuZCB1bm1h cHBpbmcgY2FuIGhhcHBlbiBhc3luY2hyb25vdXNseSwgc28gd2UgbmVlZCB0bwo+ID4+IHByb3Bl cmx5IHJlZi1jb3VudCB0aGUgc3RydWN0dXJlIChhdCBsZWFzdCBmb3IgTFBJcyksIG90aGVyd2lz ZSBzb21lIGNvZGUgcGFydHMKPiA+PiB3b3VsZCBwb3RlbnRpYWxseSBlbmQgdXAgd2l0aCByZWZl cmVuY2luZyBhbiBhbHJlYWR5IGZyZWVkIHBvaW50ZXIuCj4gPj4KPiA+PiBUaGUgY2VudHJhbCBk YXRhIHN0cnVjdHVyZSBpcyBjYWxsZWQgYHN0cnVjdCB2Z2ljX2lycWAsIGFuZCwgYmVzaWRlIHRo ZQo+ID4+IGV4cGVjdGVkIGludGVycnVwdCBjb25maWd1cmF0aW9uIGRhdGEsIGNvbnRhaW5zIGF0 IGxlYXN0IHRoZSBsb2NrLCBhIGxpc3QKPiA+PiBoZWFkZXIgKHRvIGJlIGFibGUgdG8gbGluayBp dCB0byBhIFZDUFUpIGFuZCBhIHJlZmNvdW50LiBBbHNvIGl0IGNvbnRhaW5zCj4gPj4gdGhlIGlu dGVycnVwdCBudW1iZXIgKHRvIGFjY29tbW9kYXRlIGZvciBub24tY29udGlndW91cyBpbnRlcnJ1 cHQgYWxsb2NhdGlvbnMsCj4gPj4gZm9yIGluc3RhbmNlIGZvciBMUElzKS4KPiA+PiBCZXNpZGUg dGhvc2UgZXNzZW50aWFsIGVsZW1lbnRzIGl0IHByb3ZlcyB3b3J0aCB0byBzdG9yZSAoYSByZWZl cmVuY2UgdG8pIHRoZQo+ID4+IFZDUFUgdGhpcyBJUlEgaXMgYXNzb2NpYXRlZCB3aXRoLiBUaGlz IGFsbG93cyB0byBlYXNpbHkgZmluZCB0aGUgcmVzcGVjdGl2ZQo+ID4+IFZDUFUgbGlzdC4KPiA+ Pgo+ID4+ICAgICBzdHJ1Y3QgdmdpY19pcnEgewo+ID4+ICAgICAgICAgc3BpbmxvY2tfdCBpcnFf bG9jazsgICAgICAgICAgICAvKiBQcm90ZWN0cyB0aGUgY29udGVudCBvZiB0aGUgc3RydWN0ICov Cj4gPj4gICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxwaV9saXN0OyAgICAgIC8qIFVzZWQgdG8g bGluayBhbGwgTFBJcyB0b2dldGhlciAqLwo+ID4+ICAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBh cF9saXN0Owo+ID4+Cj4gPj4gICAgICAgICBzdHJ1Y3QgdmNwdSAqdmNwdTsgICAgICAgICAgICAg IC8qIFNHSXMgYW5kIFBQSXM6IFRoZSBWQ1BVCj4gPj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqIFNQSXMgYW5kIExQSXM6IFRoZSBWQ1BVIHdob3NlIGFwX2xpc3QK PiA+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhpcyBpcyBx dWV1ZWQgb24uCj4gPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq Lwo+ID4+Cj4gPj4gICAgICAgICBzdHJ1Y3QgdmNwdSAqdGFyZ2V0X3ZjcHU7ICAgICAgICAvKiBU aGUgVkNQVSB0aGF0IHRoaXMgaW50ZXJydXB0IHNob3VsZAo+ID4+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICogYmUgc2VudCB0bywgYXMgYSByZXN1bHQgb2YgdGhl Cj4gPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0YXJnZXRz IHJlZyAodjIpIG9yIHRoZQo+ID4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICogYWZmaW5pdHkgcmVnICh2MykuCj4gPj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKi8KPiA+Pgo+ID4+ICAgICAgICAgdTMyIGludGlkOyAgICAgICAg ICAgICAgICAgICAgICAvKiBHdWVzdCB2aXNpYmxlIElOVElEICovCj4gPj4gICAgICAgICBib29s IGxpbmVfbGV2ZWw7ICAgICAgICAgICAgICAgIC8qIExldmVsIG9ubHkgKi8KPiA+PiAgICAgICAg IGJvb2wgcGVuZGluZ19sYXRjaDsgICAgICAgICAgICAgLyogVGhlIHBlbmRpbmcgbGF0Y2ggc3Rh dGUgdXNlZCB0bwo+ID4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KiBjYWxjdWxhdGUgdGhlIHBlbmRpbmcgc3RhdGUgZm9yCj4gPj4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqIGJvdGggbGV2ZWwgYW5kIGVkZ2UgdHJpZ2dlcmVkIElS UXMuCj4gPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwo+ID4+ Cj4gPj4gICAgICAgICBib29sIGFjdGl2ZTsgICAgICAgICAgICAgICAgICAgIC8qIG5vdCB1c2Vk IGZvciBMUElzICovCj4gPj4gICAgICAgICBib29sIGVuYWJsZWQ7Cj4gPj4gICAgICAgICBib29s IGh3OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRpZWQgdG8gSFcgSVJRICovCj4gPj4gICAg ICAgICBzdHJ1Y3Qga3JlZiByZWZjb3VudDsgICAgICAgICAgIC8qIFVzZWQgZm9yIExQSXMgKi8K PiA+PiAgICAgICAgIHUzMiBod2ludGlkOyAgICAgICAgICAgICAgICAgICAgLyogSFcgSU5USUQg bnVtYmVyICovCj4gPj4gICAgICAgICB1bmlvbiB7Cj4gPj4gICAgICAgICAgICAgdTggdGFyZ2V0 czsgICAgICAgICAgICAgICAgICAgICAvKiBHSUN2MiB0YXJnZXQgVkNQVXMgbWFzayAqLwo+ID4+ ICAgICAgICAgICAgIHUzMiBtcGlkcjsgICAgICAgICAgICAgICAgICAgICAgLyogR0lDdjMgdGFy Z2V0IFZDUFUgKi8KPiA+PiAgICAgICAgIH07Cj4gPj4gICAgICAgICB1OCBzb3VyY2U7ICAgICAg ICAgICAgICAgICAgICAgIC8qIEdJQ3YyIFNHSXMgb25seSAqLwo+ID4+ICAgICAgICAgdTggcHJp b3JpdHk7Cj4gPj4gICAgICAgICBlbnVtIHZnaWNfaXJxX2NvbmZpZyBjb25maWc7ICAgIC8qIExl dmVsIG9yIGVkZ2UgKi8KPiA+PiAgICAgfTsKPiA+IAo+ID4gVGhlIHJlZmNvdW50IGFuZCBpcnFf bG9jayBhcmUgZ29vZCBpZGVhcywgbGV0J3MgaGF2ZSB0aGVtLgo+ID4gCj4gPiAKPiA+PiAjIyMg VkNQVSBsaXN0IGhhbmRsaW5nCj4gPj4KPiA+PiBJbml0aWFsbHkgYSB2aXJ0dWFsIGludGVycnVw dCBqdXN0IGxpdmVzIG9uIGl0cyBvd24uIEd1ZXN0IE1NSU8gYWNjZXNzZXMgdG8KPiA+PiB0aGUg ZGlzdHJpYnV0b3Igd2lsbCBjaGFuZ2UgdGhlIHN0YXRlIGluZm9ybWF0aW9uIGluIHRoaXMgc3Ry dWN0dXJlLgo+ID4+IFdoZW4gYW4gaW50ZXJydXB0IGlzIGFjdHVhbGx5IG1hZGUgcGVuZGluZyAo ZWl0aGVyIGJ5IGFuIGFzc29jaWF0ZWQgaGFyZHdhcmUKPiA+PiBJUlEgZmlyaW5nIG9yIGJ5IGEg dmlydHVhbCBJUlEgdHJpZ2dlciksIHRoZSBgdmdpY19pcnFgIHN0cnVjdHVyZSB3aWxsIGJlCj4g Pj4gbGlua2VkIHRvIHRoZSBjdXJyZW50IHRhcmdldCBWQ1BVLiBUaGUgYHZjcHVgIG1lbWJlciBp biB0aGUgc3RydWN0dXJlIHdpbGwKPiA+PiBiZSBzZXQgdG8gdGhpcyBWQ1BVLiBBbnkgYWZmaW5p dHkgY2hhbmdlIGFmdGVyIHRoaXMgcG9pbnQgd2lsbCBub3QgYWZmZWN0Cj4gPj4gdGhlIGN1cnJl bnQgdGFyZ2V0IFZDUFUgYW55bW9yZSwgaXQganVzdCB1cGRhdGVzIHRoZSBgdGFyZ2V0X3ZwdWAg ZmllbGQgaW4KPiA+PiB0aGUgc3RydWN0dXJlLCB3aGljaCB3aWxsIGJlIGNvbnNpZGVyZWQgb24g dGhlIG5leHQgaW5qZWN0aW9uLgo+ID4+IFRoaXMgcGVyLVZDUFUgbGlzdCBpcyBjYWxsZWQgdGhl IGBhcF9saXN0YCwgc2luY2UgaXQgaG9sZHMgaW50ZXJydXB0cyB3aGljaAo+ID4+IGFyZSBpbiBh IHBlbmRpbmcgYW5kL29yIGFjdGl2ZSBzdGF0ZS4KPiA+IAo+ID4gVGhlIHR3byB2Y3B1IGxpc3Rz IHNvdW5kIGxpa2UgYSBnb29kIGlkZWEgdG9vLCBhbmQgQ2hyaXN0b2ZmZXIncwo+ID4gZXhwbGFu YXRpb24gaGVscGVkLiBJdCBpcyBhY3R1YWxseSBzaW1pbGFyIHRvIHdoYXQgd2UgZG8gaW4gWGVu IGFscmVhZHkuCj4gPiBJIGd1ZXNzIGEgdmdpYyBpcyBhbHdheXMgYSB2Z2ljIDotKQo+IAo+IE1t bWgsIEkgZG9uJ3QgZ2V0IHdoZXJlIHlvdSBzZWUgdHdvIFZDUFUgKmxpc3RzKiBoZXJlLiBUaGVy ZSBhcmUgdHdvCj4gVkNQVSAqZmllbGRzKiBpbiB0aGUgc3RydWN0dXJlLCBidXQgdGhleSBhcmUg Y29tcGxldGVseSBkaWZmZXJlbnQgZnJvbQo+IHRoZSBscl9wZW5kaW5nIGFuZCBscl9xdWV1ZSBs aXN0cyBpbiBYZW4uCj4gSW4gZmFjdCBJIGJlbGlldmUgdGhhdCB0aGVzZSAqdHdvKiBsaXN0cyBp biBYZW4gYXJlIG9uZSBvZiB0aGUgbWFqb3IKPiBwYWluIHBvaW50cyBpbiB0aGUgY3VycmVudCBW R0lDLgoKT0sKCgo+ID4gV2hhdCBoYXBwZW5zIHdoZW4gdGhlIGlycSBpcyBtaWdyYXRlZCB3aGls ZSBzdGlsbCBpbiBhbiBMUiBvbiBhbm90aGVyCj4gPiBwY3B1PyBXaGVuL0hvdyBpcyB0aGUgcGh5 c2ljYWwgYWZmaW5pdHkgY2hhbmdlZD8KPiAKPiBQZXIgdGhlIGFyY2hpdGVjdHVyZSB0aGVyZSBp cyBub3RoaW5nIGxpa2UgYW4gSVJRICJtaWdyYXRpb24iLiBUaGVyZSBpcwo+IHRoZSBDUFUgYWZm aW5pdHksIHdoaWNoIGRldGVybWluZXMgdG8gd2hpY2ggY29yZSB0aGlzIElSUSBpcyBmb3J3YXJk ZWQKPiAqd2hlbiBpdCBiZWNvbWVzIHBlbmRpbmcqLiBPbmNlIGl0IGhhcyBiZWVuIGFjdGl2YXRl ZCwgaXQgc3RheXMgYXQgdGhpcwo+IGNvcmUsIGV2ZW4gaWYgeW91IGNoYW5nZSB0aGUgSVRBUkdF VFNSIG9yIElST1VURVIgcmVnaXN0ZXIgYWZ0ZXJ3YXJkcy4KPiBUaGlzIGlzIGEgYmVuaWduIHJh Y2UsIHlvdSBqdXN0IGNhbWUgdG9vIGxhdGUgdG8gY2hhbmdlIHRoZSBhZmZpbml0eS4KPiAKPiBB bmQgYXQgdGhlIG1vbWVudCB3ZSBkb24ndCBzeW5jaHJvbml6ZSB0aGUgcGh5c2ljYWwgYWZmaW5p dHksIHNpbXBseQo+IGJlY2F1c2UgbW9zdCBJUlFzIGluIEtWTSB3b3JsZCB3ZXJlIHZpcnR1YWwg c28gZmFyLiBOb3cgdGhpcyBpcyBnb2luZyB0bwo+IGNoYW5nZSwgc28gSSBndWVzcyB3ZSBoYXZl IHRvIHRha2UgYSBsb29rIGF0IHRoaXMgYXQgc29tZSBwb2ludC4gQnV0IEkKPiBjb25zaWRlciB0 aGlzIGFuIG9wdGltaXphdGlvbiwgYW5kIHdvdWxkIHByZWZlciBjb3JyZWN0bmVzcyBhbmQKPiBz dGFiaWxpdHkgb3ZlciBwZXJmb3JtYW5jZS4KClRoaXMgZmVhdHVyZSBpcyBhIGtleSBlbmFibGVy IGZvciBYZW4gaW4gZW1iZWRkZWQsIGl0IGlzIGNlcnRhaW5seSBhCmJsb2NrZXIuIEl0IG5lZWRz IHRvIGJlIHBhcnQgb2YgdGhlIGRlc2lnbiBkb2MuCgoKPiA+IFdoYXQgaGFwcGVucyB3aGVuIGEg bmV3IGlycSBpcyBzdXBwb3NlZCB0byBiZSBpbmplY3RlZCB3aGVuIHRhcmdldF92Y3B1IGlzCj4g PiBhbHJlYWR5IHNldD8gRG9lcyB0YXJnZXRfdmNwdSBzaW1wbHkgZ2V0IG92ZXJ3cml0dGVuPwo+ IAo+IHRhcmdldF92Y3B1IGlzIHNpbXBseSBhIGNvbmZpZ3VyYXRpb24gc3RvcmFnZS4gQW55b25l IGNhbiB1cGRhdGUgdGhpcwo+IGZpZWxkIGF0IGFueSB0aW1lLCB3aXRob3V0IGFueSBzaWRlIGVm ZmVjdHMuCj4gV2hlbiBhbiBJUlEgaXMgZ29pbmcgdG8gYmUgaW5qZWN0ZWQsIHRoZSBjdXJyZW50 IHZhbHVlIG9mIHRhcmdldF92Y3B1IGlzCj4gd3JpdHRlbiAqb25jZSogdG8gdGhlICJ2Y3B1IiBm aWVsZCwgd2hpY2ggZnJvbSBub3cgb24gZGV0ZXJtaW5lcyB0aGUKPiByZXNwb25zaWJsZSBWQ1BV IGZvciB0aGUgd2hvbGUgaW50ZXJydXB0IGxpZmUgY3ljbGUgKHF1ZXVlaW5nIG9uIGxpc3RzLAo+ IHB1dHRpbmcgaW50byBMUnMsIC4uLikuIFRoaXMgZmllbGQgY2Fubm90IGNoYW5nZSBhbnltb3Jl IHVudGlsIHRoZSBJUlEKPiBpcyBFT0llZC4KCk9LLCBJIHVuZGVyc3RhbmQuIFNvdW5kcyBnb29k LgoKCj4gPiBXaGF0IGhhcHBlbnMgd2hlbiBhIHZjcHUgaXMgbWlncmF0ZWQgZnJvbSBwY3B1MSB0 byBwY3B1Mj8KPiAKPiBOb3RoaW5nIHNwZWN0YWN1bGFyLCBJIGd1ZXNzLiBXZSBkb24ndCBjYXJl IGFib3V0IHRoZSBwaHlzaWNhbCBJUlEKPiBhZmZpbml0eS4gQW5kIHNpbmNlIHdlIGNsZWFyIGFs bCBMUnMgb24gZXhpdCBhbmQgKHJlLSlwb3B1bGF0ZSB0aGVtIG9uCj4gZW50cnksIGRvaW5nIHRo aXMgb24gdHdvIGRpZmZlcmVudCBDUFVzIGlzIGEgdG90YWwgbm8tYnJhaW5lci4KCldlIHNob3Vs ZCBjYXJlIGFib3V0IHBoeXNpY2FsIElSUSBhZmZpbml0eSwgYW5kIGl0IHNob3VsZCBiZSBwYXJ0 IG9mCnRoaXMgZGVzaWduIGRvYy4gVGhpcyB3b3VsZCBiZSBhIHJlZ3Jlc3Npb24uCgoKPiA+PiAj IyMgVmlydHVhbCBJUlEgcmVmZXJlbmNlcwo+ID4+Cj4gPj4gVGhlcmUgaXMgYSBmdW5jdGlvbiBg dmdpY19nZXRfaXJxKClgIHdoaWNoIHJldHVybnMgYSByZWZlcmVuY2UgdG8gYSB2aXJ0dWFsIElS UQo+ID4+IGdpdmVuIGl0cyBudW1iZXIuCj4gPj4gRm9yIHByaXZhdGUgSVJRcyBhbmQgU1BJcyBp dCBpcyBleHBlY3RlZCB0aGF0IHRoaXMganVzdCBpbmRleGVzIGEgc3RhdGljIGFycmF5Lgo+ID4+ IEZvciBMUElzICh3aGljaCBhcmUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGF0IHJ1biB0aW1lKSB0 aGlzIGlzIGV4cGVjdGVkIHRvCj4gPj4gaXRlcmF0ZSBhIGRhdGEgc3RydWN0dXJlIChsaWtlIGEg bGlua2VkIGxpc3QpIHRvIGZpbmQgdGhlIHJpZ2h0IHN0cnVjdHVyZS4KPiA+PiBJbiBhbnkgY2Fz ZSBhIGNhbGwgdG8gYHZnaWNfZ2V0X2lycWAgd2lsbCBpbmNyZWFzZSBhIHJlZmNvdW50LCB3aGlj aCB3aWxsCj4gPj4gcHJldmVudCBMUElzIGZyb20gYmVpbmcgZGUtYWxsb2NhdGVkIHdoaWxlIGFu b3RoZXIgcGFydCBvZiB0aGUgVkdJQyBpcyBzdGlsbAo+ID4+IGhvbGRpbmcgYSByZWZlcmVuY2Uu IFRodXMgYW55IGNhbGxlciB0byBgdmdpY19nZXRfaXJxYCBzaGFsbCBjYWxsCj4gPj4gYHZnaWNf cHV0X2lycSgpYCBhZnRlciBpdCBpcyBkb25lIHdpdGggaGFuZGxpbmcgdGhpcyBpbnRlcnJ1cHQu Cj4gPj4gQW4gZXhjZXB0aW9uIHdvdWxkIGJlIGlmIHRoZSB2aXJ0dWFsIElSUSBpcyBldmVudHVh bGx5IGluamVjdGVkIGludG8gYSBWQ1BVLiBJbgo+ID4+IHRoaXMgY2FzZSB0aGUgVkNQVSBob2xk cyB0aGF0IHJlZmVyZW5jZSBhbmQgaXQgaXMga2VwdCBhcyBsb25nIGFzIHRoZSBndWVzdAo+ID4+ IHNlZXMgdGhpcyB2aXJ0dWFsIElSUS4gVGhlIHJlZmNvdW50IHdvdWxkIG9ubHkgYmUgZGVjcmVh c2VkIHVwb24gdGhlIElSUSBoYXZpbmcKPiA+PiBiZWVuIEVPSWVkIGJ5IHRoZSBndWVzdCBhbmQg aXQgaGF2aW5nIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBWQ1BVIGxpc3QuCj4gPiAKPiA+IEkgdW5k ZXJzdGFuZCB0aGUgaWRlYSBiZWhpbmQgYSByZWZjb3VudCBhbmQgc291bmRzIGxpa2UgYSBnb29k IHRoaW5nIHRvCj4gPiBoYXZlLgo+ID4gCj4gPiBMZXQgbWUgYXNrIHlvdSBhIGNvdXBsZSBvZiBx dWVzdGlvbnMuIEhvdyBkb2VzIGl0IGhlbHAgd2l0aCB0aGUgaXNzdWUKPiA+IHRoYXQgYW4gTFBJ IGNvdWxkIGJlIGRpc2NhcmRlZCBhbmQgcmVtYXBwZWQgKE1BUFRJKSBmcm9tIGFub3RoZXIKPiA+ IHBjcHUgd2hpbGUgaXQgY291bGQgc3RpbGwgYmUgaW4gYW4gTFI/Cj4gCj4gT24gRElTQ0FSRCB3 ZSByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBvZiBtYXBwZWQgTFBJcywgYnV0IGRvbid0IGZyZWUg dGhlCj4gc3RydWN0dXJlLiBTbyBhbnkgdmdpY19nZXRfbHBpKGxwaV9ucikgd29uJ3QgZmluZCBp dCBhbnltb3JlLiBCdXQgc2luY2UKPiB0aGUgaW50ZXJydXB0IGlzIGluIGFuIExSLCB0aGUgVkNQ VSdzIGFwX2xpc3Qgc3RpbGwgcmVmZXJlbmNlcyB0aGUKPiB2Z2ljX2lycSBzdHJ1Y3R1cmUsIHNv IHdlIGNhbiBkbyB0aGUgd2hvbGUgSVJRIGxpZmUgY3ljbGUgbWFuYWdlbWVudAo+IGp1c3QgYXMg bm9ybWFsIChiZWNhdXNlIGJlaW5nIGEgbGlzdCBtZW1iZXIgaXMgd2hhdCBjb3VudHMgd2hlbiBp dCBjb21lcwo+IHRvIGEgImxpZmUiIGludGVycnVwdCkuCj4gT25jZSB0aGlzIExQSSBpcyBFT0ll ZCwgd2UgcmVtb3ZlIGl0IGZyb20gdGhlIFZDUFUgbGlzdCwgd2hpY2ggZGVjcmVhc2VzCj4gdGhl IHJlZmNvdW50IGFuZCBtb3N0IHByb2JhYmx5IHdpbGwgZnJlZSB0aGUgbWVtb3J5LCBzaW5jZSB0 aGUgdmFsdWUgaGFzCj4gYmVjb21lIHplcm8gYnkgdGhlbi4gTm9ybWFsbHksIHdpdGhvdXQgdW5t YXBwaW5nIGl0IGJlZm9yZSwgdGhlCj4gcmVmZXJlbmNlIGhlbGQgYnkgdGhlIElUUyBsaXN0IHdv dWxkIG1ha2Ugc3VyZSB0aGUgcmVmY291bnQgc3RheXMKPiBncmVhdGVyIHRoYW4gMC4KPgo+IE5v dyB3aGVuIHRoZXJlIGlzIGEgTUFQVEkgdG8gdGhlIHNhbWUgTFBJIG51bWJlciBtZWFud2hpbGUs IHRoaXMgd2lsbAo+IGFsbG9jYXRlIGEgbmV3IHN0cnVjdHVyZSAodGhpcyBpcyBhIG5ldyBpbnRl cnJ1cHQhKSBhbmQgZW50ZXJzIHRoaXMgaW50bwo+IHRoZSBJVFMgbGlzdC4gU28gYW55b25lIGFz a2luZyBmb3IgdGhpcyBuZXcgTFBJICpudW1iZXIqIHdpbGwgZ2V0IHRoZQo+IHJlZmVyZW5jZSB0 byB0aGUgbmV3IElSUS4gVGhpbms6IGRlbGV0aW5nIGEgZmlsZSBhbmQgY3JlYXRpbmcgYSBuZXcg b25lCj4gd2l0aCB0aGUgc2FtZSBuYW1lIG9uIGEgVU5JWCBzeXN0ZW0sIGFueSBvbGQgdXNlcnMg b2YgYW4gYWxyZWFkeSBvcGVuZWQKPiBmaWxlIGRlc2NyaXB0b3Igd2lsbCBzdGlsbCB1c2UgdGhl IGRlbGV0ZWQgZmlsZSwgYnV0IGFuIG9wZW4oKSB3aWxsCj4gcmV0dXJuIGEgaGFuZGxlIHRvIHRo ZSBuZXcgZmlsZS4KClRoaXMgbmVlZHMgdG8gYmUgY2FwdHVyZWQgaW4gdGhlIGRvYy4KCkFyZSB2 Z2ljX2lycSBzdHJ1Y3QgZHluYW1pY2FsbHkgYWxsb2NhdGVkPyBJcyB0aGVyZSBhIHJldXRpbGl6 YXRpb24Kc2NoZW1lIHRvIGF2b2lkIGEgbWFsaWNpb3VzIGd1ZXN0IGZyb20gc3BhbW1pbmcgWGVu IHdpdGggTFBJIHJlcXVlc3RzPwpNdWx0aXBsZSBzdHJ1Y3QgdmdpY19pcnEgZm9yIHRoZSBzYW1l IExQSSB3b3VsZCBjYXVzZSBldmVuIG1vcmUgbWVtb3J5CmFsbG9jYXRpb25zLgoKSWYgYm90aCB0 aGUgb2xkIGFuZCB0aGUgbmV3IHZnaWNfaXJxIHN0cnVjdCBlbmQgdXAgYmVpbmcgd3JpdHRlbiB0 byBMUnMsCndvdWxkbid0IGl0IGNhdXNlIHByb2JsZW1zPwoKCj4gPiBXaGF0IGhhcHBlbnMgaWYg dGhlIE1BUFRJIGlzCj4gPiBpc3N1ZWQgYmVmb3JlIGFuZCB3aGF0IGhhcHBlbnMgaWYgaXQgaXMg aXNzZWQgYWZ0ZXIgdGhlIGlycSBoYXMgYmVlbgo+ID4gRU9JZCBhbmQgY2xlYXJlZCBmcm9tIHRo ZSBMUiBhbmQgYXBfbGlzdD8KPiAKPiBJIGJlbGlldmUgdGhlIGFib3ZlIGRlc2NyaXB0aW9uIHNo b3VsZCBhbnN3ZXIgdGhpcy4gSWYgbm90LCBwbGVhc2UgbGV0Cj4gbWUga25vdy4KPiAKPiA+IEkg YW0gcmVmZXJyaW5nIHRvIHRoZSBjYXNlIHRoYXQgd2UgY3VycmVudGx5IGhhbmRsaW5nIHdpdGgg dGhlCj4gPiBHSUNfSVJRX0dVRVNUX1BSSVNUSU5FX0xQSSBmbGFnIGluIFhlbi4KPiAKPiAuLi4g d2hpY2ggd2FzIGEgaGFjayBvZiBtaW5lIHRvIHdvcmsgYXJvdW5kIHRoZSBtaXNzaW5nIHJlZmNv dW50IDstKQoKWWVzLCB5b3UgY2FuIHNheSB0aGF0IDopCgoKPiA+PiAjIyMgTG9ja2luZwo+ID4+ Cj4gPj4gVG8ga2VlcCB0aGUgYHZnaWNfaXJxYCBzdHJ1Y3R1cmUgY29uc2lzdGVudCBhbmQgdG8g YXZvaWQgcmFjZXMgYmV0d2Vlbgo+ID4+IGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgVkdJQywgbG9j a2luZyBpcyBlc3NlbnRpYWwgd2hlbmV2ZXIgYWNjZXNzaW5nIGEgbWVtYmVyCj4gPj4gb2YgdGhp cyBzdHJ1Y3R1cmUuIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhpcyBsb2NrIGlzIGFsbW9zdCBuZXZl ciBjb250ZW5kZWQsCj4gPj4gYWxzbyBoZWxkIG9ubHkgZm9yIGJyaWVmIHBlcmlvZHMgb2YgdGlt ZSwgc28gdGhpcyBpcyBjb25zaWRlcmVkIGNoZWFwLgo+ID4+IFRvIGtlZXAgdGhlIGNvZGUgY2xl YW4gYW5kIGF2b2lkIG5hc3R5IGNvcm5lciBjYXNlcywgdGhlcmUgYXJlIG5vIHRyaWNrcyBvbgo+ ID4+IHRyeWluZyB0byBiZSBsb2NrbGVzcyBoZXJlLgo+ID4+IElmIGZvciBhbnkgcmVhc29uIHRo ZSBjb2RlIG5lZWRzIHRvIGhvbGQgdGhlIGxvY2tzIGZvciB0d28gdmlydHVhbCBJUlFzLCB0aGUK PiA+PiBvbmUgd2l0aCB0aGUgbG93ZXIgSVJRIG51bWJlciBpcyB0byBiZSB0YWtlbiBmaXJzdCwg dG8gYXZvaWQgZGVhZGxvY2tzLgo+ID4+Cj4gPj4gQW5vdGhlciBsb2NrIHRvIGNvbnNpZGVyIGlz IHRoZSBWQ1BVIGxvY2ssIHdoaWNoIG9uIHRoZSBmaXJzdCBnbGFuY2UgcHJvdGVjdHMKPiA+PiB0 aGUgdmlydHVhbCBDUFUncyBsaXN0IHN0cnVjdHVyZSwgYnV0IGFsc28gc3luY2hyb25pc2VzIGFk ZGl0aW9ucyBhbmQgcmVtb3ZhbHMKPiA+PiBvZiBJUlFzIGZyb20gYSBWQ1BVLiBUbyBhZGQgYW4g SVJRIHRvIGEgbGlzdCwgYm90aCB0aGUgVkNQVSBhbmQgdGhlIHBlci1JUlEKPiA+PiBsb2NrIG5l ZWQgdG8gYmUgaGVsZC4gVG8gYXZvaWQgZGVhZGxvY2tzLCB0aGVyZSBpcyBhIHN0cmljdCBsb2Nr aW5nIG9yZGVyOgo+ID4+PiBUaGUgVkNQVSBsb2NrIG5lZWRzIHRvIGJlIHRha2VuIGZpcnN0LCB0 aGUgcGVyLUlSUSBsb2NrIGFmdGVyIHRoaXMuCj4gPiAKPiA+IFNvdW5kcyBnb29kIChpdCBpcyBi YXNpY2FsbHkgd2hhdCBJIHN1Z2dlc3RlZCB0byBkbyBpbiB0aGUgcGFzdCkuCj4gPiAKPiA+IAo+ ID4+IFNvbWUgb3BlcmF0aW9ucyAobGlrZSBtaWdyYXRpbmcgSVJRcyBiZXR3ZWVuIHR3byBWQ1BV cykgcmVxdWlyZSB0d28gVkNQVQo+ID4+IGxvY2tzIHRvIGJlIGhlbGQsIGluIHRoaXMgY2FzZSB0 aGUgbG9jayBmb3IgdGhlIFZDUFUgd2l0aCB0aGUgc21hbGxlciBWQ1BVIElECj4gPj4gaXMgdG8g YmUgdGFrZW4gZmlyc3QuCj4gPj4KPiA+PiBUaGVyZSBhcmUgb2NjYXNpb25zIHdoZXJlIHRoZSBs b2NraW5nIG9yZGVyIChWQ1BVIGZpcnN0KSBpcyBoYXJkIHRvIG9ic2VydmUsCj4gPj4gYmVjYXVz ZSB0aGUgcGVyLUlSUSBsb2NrIGlzIGFscmVhZHkgaGVsZCwgYnV0IHRoaXMgSVJRIG5lZWRzIHRv IGdvIG9uIGEgVkNQVQo+ID4+IGxpc3QuIEluIHRoaXMgY2FzZSB0aGUgSVJRIGxvY2sgbmVlZHMg dG8gYmUgZHJvcHBlZCwgdGhlIHJlc3BlY3RpdmUgVkNQVQo+ID4+IGxvY2sgc2hvdWxkIGJlIHRh a2VuLCB0aGVuIHRoZSBwZXItSVJRIGxvY2sgbmVlZHMgdG8gYmUgcmUtdGFrZW4uCj4gPj4gQWZ0 ZXIgYm90aCB0aGUgbG9ja3MgYXJlIGhlbGQsIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGNvbmRp dGlvbnMgd2hpY2gKPiA+PiBvcmlnaW5hbGx5IG1hbmRhdGVkIHRoZSBsaXN0IGFkZGl0aW9uIChv ciByZW1vdmFsKSBhcmUgc3RpbGwgdHJ1ZS4gVGhpcyBpcwo+ID4+IG5lZWRlZCBiZWNhdXNlIHRo ZSBJUlEgbG9jayBjb3VsZCBoYXZlIGJlZW4gdGFrZW4gYnkgYW5vdGhlciBlbnRpdHkgbWVhbndo aWxlCj4gPj4gYW5kIHRoZSBzdGF0ZSBvZiB0aGlzIGludGVycnVwdCBjb3VsZCBoYXZlIGJlZW4g Y2hhbmdlZC4gRXhhbXBsZXMgYXJlIGlmIHRoZQo+ID4+IGludGVycnVwdCBpcyBubyBsb25nZXIg cGVuZGluZywgZ290IGRpc2FibGVkIG9yIGNoYW5nZWQgdGhlIENQVSBhZmZpbml0eS4KPiA+PiBT b21lIG9mIHRob3NlIGNoYW5nZXMgbWlnaHQgcmVuZGVyIHRvIGN1cnJlbnQgYWN0aW9uIG9ic29s ZXRlIChubyBsb25nZXIKPiA+PiBwZW5kaW5nKSwgb3RoZXIgd2lsbCBsZWFkIHRvIGEgcmV0cnkg b2YgdGhlIHJlLWxvY2tpbmcgc2NoZW1lIGRlc2NyaWJlZCBhYm92ZS4KPiA+PiBUaGlzIHJlLWxv Y2tpbmcgc2NoZW1lIHNoYWxsIGJlIGltcGxlbWVudGVkIGluIGEgd2VsbC1kb2N1bWVudGVkIGZ1 bmN0aW9uLgo+ID4+Cj4gPj4gIyMjIExldmVsIGFuZCBlZGdlIHRyaWdnZXJlZCBpbnRlcnJ1cHRz Cj4gPj4KPiA+PiBUaGUgR0lDIGtub3dzIGFib3V0IHR3byBraW5kcyBvZiBzaWduYWxsaW5nIGlu dGVycnVwdHM6Cj4gPj4KPiA+PiAtIEVkZ2UgdHJpZ2dlcmVkIGludGVycnVwdHMgYXJlIHRyaWdn ZXJlZCBieSBhIGRldmljZSBvbmNlLCB0aGVpciBsaWZlIGN5Y2xlCj4gPj4gZW5kcyB3aGVuIHRo ZSBndWVzdCBoYXMgRU9JZWQgdGhlbSwgYXQgd2hpY2ggcG9pbnQgd2UgcmVtb3ZlIHRoZSBwZW5k aW5nIHN0YXRlLAo+ID4+IGNsZWFyIHRoZSBMUiBhbmQgcmV0dXJuIHRoZSBgdmdpY19pcnFgIHN0 cnVjdHVyZSB0byBhIHF1aWVzY2VudCBzdGF0ZS4KPiA+IAo+ID4gSSBhc3N1bWUgdGhhdCAiYXQg d2hpY2ggcG9pbnQiIG1lYW5zIGF0IHRoZSBuZXh0IHRyYXAgaW50byB0aGUKPiA+IGh5cGVydmlz b3I/IFdlIGFyZSBub3QgdHJhcHBpbmcgb24gcHVycG9zZSBndWVzdCBFT0lzLCBhcmUgd2U/Cj4g Cj4gQ29ycmVjdC4gVGhpcyBtZWFucyBvdXIgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBub3QgdXAtdG8t ZGF0ZSBhbGwgb2YgdGhlCj4gaXRtZS4gQnV0IEkgYmVsaWV2ZSB0aGlzIG9ubHkgbWF0dGVycyBm b3IgdGhlIElTUEVORElOR1IvSVNBQ1RJVkVSCj4gcmVnaXN0ZXIgYWNjZXNzZXMsIHdoaWNoIGFy ZSBoYW5kbGVkIGluIGEgc3BlY2lhbCB3YXkgdG8gZml4IHRoaXMuCj4gQW5kIHRoaXMgaXMgbm90 aGluZyBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYywgYnV0IGEgZ2VuZXJhbCBmZWF0dXJlIG9mCj4g dGhlIEdJQyBlbXVsYXRpb24gYXJjaGl0ZWN0dXJlLgoKUmlnaHQuIFhlbiBzdHJ1Y3RzIHRvZGF5 IGFyZSBhbHNvIG5vdCB1cC10by1kYXRlIGFsbCB0aGUgdGltZSBmb3IgdGhlCnNhbWUgcmVhc29u IEkgZ3Vlc3MuCgoKPiA+IElzIGl0IHBvc3NpYmxlIHRvIGhhdmUgYWN0aXZlIGFuZCBwZW5kaW5n IGlycXMgaW4gYW4gTFI/IEhvdyBpcyB0aGF0Cj4gPiBoYW5kbGVkPwo+IAo+IFN1cmUuIFRoaXMg aGFwcGVucyB3aGVuIHRoZXJlIGlzIGEgbmV3IGludGVycnVwdCB0cmlnZ2VyZWQgd2hpbGUgdGhl IG9sZAo+IG9uZSBoYXMgYmVlbiBhY3RpdmF0ZWQsIGJ1dCBub3QgRU9JZWQgKHlldCkuCj4gVGhp cyBhY3R1YWxseSBoYXBwZW5zIGluIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW86Cj4gLSBJUlEgdHJp Z2dlcnMgYW5kIGdldHMgaW5qZWN0ZWQgYXMgInBlbmRpbmciLgo+IC0gR3Vlc3QgYWNrcyB2SVJR IGJ5IHJlYWRpbmcgdmlydHVhbCBJQ0NfSUFSLCB0aGUgTFIgc3RhdGUgY2hhbmdlcyBmcm9tCj4g cGVuZGluZyB0byBhY3RpdmUuCj4gLSBEdXJpbmcgdGhlIGZ1cnRoZXIgaW50ZXJydXB0IGhhbmRs aW5nIHRoZSBndWVzdCB0cmlnZ2VycyBhbiBNTUlPIGZhdWx0Cj4gKGJlY2F1c2UgaXQgd2FudHMg dG8gcmVhZCBkYXRhIGZyb20gdGhlIGRldmljZSBvciBleHBsaWNpdGx5IGxvd2VycyB0aGUKPiBJ UlEgbGluZSB3aXRoIGEgcmVnaXN0ZXIgYWNjZXNzKS4gVGhlIENQVSBleGlzdHMsIGFuZCB0aGUg ImFjdGl2ZS1vbmx5Igo+IHN0YXRlIGJlY29tZXMgdmlzaWJsZSB0byB0aGUgaHlwZXJ2aXNvci4K PiAtIFRoZSBIViBzeW5jIGJhY2sgdGhlIExSIHRvIG91ciBzdHJ1Y3QsIGNsZWFyaW5nIHRoZSBw ZW5kaW5nIGxhdGNoLCBidXQKPiBzZXR0aW5nIHRoZSBhY3RpdmUgZmllbGQuIFRoZSBzdHJ1Y3Qg aXMgaW4gc3luYyBub3cuCj4gLSBGb3Igd2hhdGV2ZXIgcmVhc29uIHRoZSBpbnRlcnJ1cHQgZmly ZXMgKmFnYWluKiB3aGlsZSB0aGUgSFYgaXMgc3RpbGwKPiBpbiBjaGFyZ2UuIFRoaXMgc2V0cyB0 aGUgcGVuZGluZyBzdGF0ZSBpbiBvdXIgc3RydWN0Lgo+IC0gVXBvbiBndWVzdCBlbnRyeSB3ZSBz eW5jIGJvdGggdGhlIGFjdGl2ZSBhbmQgcGVuZGluZyBiaXQgdG8gdGhlIExSLAo+IG1ha2luZyBp dCBib3RoIGFjdGl2ZSAqYW5kKiBwZW5kaW5nLgo+IC0gVGhlIGd1ZXN0J3MgSVJRIGhhbmRsZXIg Y29udGludWVzIHRvIGhhbmRsZSB0aGUgSVJRLCB0aGUgYWN0aXZlIGJpdAo+ICJzaGFkb3dzIiB0 aGUgcGVuZGluZyBjb25kaXRpb24gZm9yIG5vdy4gRXZlbnR1YWxseSAgdGhlIGhhbmRsZXIgcmV0 aXJlcwo+IHRoZSBJUlEgYnkgRU9JaW5nIGl0LCBkcm9wcGluZyB0aGUgYWN0aXZlIHN0YXRlIChp biB0aGUgTFIpLgo+IC0gTm93IGltbWVkaWF0ZWx5IGFmdGVyIHRoaXMgZHJvcCB0aGUgdmlydHVh bCBJUlEgaXMgZmlyaW5nIGFnYWluLCBzaW5jZQo+IGl0IGlzIHBlbmRpbmcsIGJ1dCBub3QgYmxv Y2tlZCBieSB0aGUgYWN0aXZlIHN0YXRlIGFueW1vcmUuCj4gLSBUaGUgZ3Vlc3QncyBJUlEgaGFu ZGxlciBpcyBpbnZva2VkIGFnYWluIGFuZCBoYW5kbGVzIHRoaXMgc2Vjb25kIElSUQo+IGFzIG5v cm1hbC4KPiAKPiBEb2VzIHRoYXQgbWFrZSBzZW5zZT8KPiBUaGlzIGlzIGEgYml0IHNpbXBsaWZp ZWQgZGVzY3JpcHRpb24gZm9yIHRoZSBzYWtlIG9mIGNsYXJpdHksIGFzIHRoZXJlCj4gYXJlIGNv cm5lciBjYXNlcyB3aXRoIHByaW9yaXR5IGRyb3BzLCBmb3IgaW5zdGFuY2UuCgpPSwoKCj4gPj4g LSBMZXZlbCB0cmlnZ2VyZWQgaW50ZXJydXB0cyBhcmUgdHJpZ2dlcmVkIHdoZW4gYSBkZXZpY2Ug cmFpc2VzIGl0cyBpbnRlcnJ1cHQKPiA+PiBsaW5lLCB0aGV5IHN0YXkgcGVuZGluZyBhcyBsb25n IGFzIHRoaXMgbGluZSBpcyBoZWxkIGhpZ2guIEF0IHNvbWUgcG9pbnQgdGhlCj4gPj4gZHJpdmVy IGluIHRoZSBndWVzdCBpcyBleHBlY3RlZCB0byBwcm9ncmFtIHRoZSBkZXZpY2UgdG8gZXhwbGlj aXRseSBvcgo+ID4+IGltcGxpY2l0bHkgbG93ZXIgdGhpcyBpbnRlcnJ1cHQgbGluZS4gVGhhdCBt ZWFucyB0aGF0IHdlIGhhdmUgdG8gc3RvcmUgdGhlCj4gPj4gc3RhdGUgb2YgdGhlIHZpcnR1YWwg aW50ZXJydXB0IGxpbmUsIHdoaWNoIGlzIG9ubHkgY29udHJvbGxlZCBieSB0aGUgKHZpcnR1YWwp Cj4gPj4gZGV2aWNlLiBUaGlzIGlzIGRvbmUgaW4gdGhlIGBsaW5lX2xldmVsYCBtZW1iZXIgb2Yg YHN0cnVjdCB2Z2ljX2lycWAuCj4gPj4KPiA+PiBUbyBhc3NlcnQgdGhlIGludGVycnVwdCBjb25k aXRpb24sIGEgKHZpcnR1YWwpIGRldmljZSBjYWxscyBhIGZ1bmN0aW9uIGV4cG9ydGVkCj4gPj4g YnkgdGhlIFZHSUMsIHdoaWNoIGFsbG93cyB0byByYWlzZSBvciBsb3dlciBhbiBpbnRlcnJ1cHQg bGluZS4gTG93ZXJpbmcgdGhlCj4gPj4gbGluZSBmb3IgYW4gZWRnZSB0cmlnZ2VyZWQgSVJRIGlz IGlnbm9yZWQgKGFuZCBzbyBpcyBvcHRpb25hbCkuIFJhaXNpbmcgdGhlCj4gPj4gbGluZSBhc3Nl cnRzIHRoZSBwZW5kaW5nIHN0YXRlIGFuZCBwb3RlbnRpYWxseSBpbmplY3RzIHRoaXMgdmlydHVh bCBJUlEuIEFueQo+ID4+IHN1YnNlcXVlbnQgInJhaXNpbmciIGNhbGwgbWlnaHQgaW5qZWN0IGFu b3RoZXIgSVJRLCBpZiB0aGUgcHJldmlvdXMgaGFzIGF0Cj4gPj4gbGVhc3QgYmVlbiBhY3RpdmF0 ZWQgYnkgdGhlIGd1ZXN0IGFscmVhZHksIG90aGVyd2lzZSBpcyBpZ25vcmVkLgo+ID4gCj4gPiBU aGUgaXJxIGJlY29tZXMgYWN0aXZlIGFuZCBwZW5kaW5nIGluIHRoZSBMUj8KPiAKPiBZZXMsIHNl ZSBhYm92ZS4KPiAKPiA+PiBGb3IgbGV2ZWwgdHJpZ2dlcmVkIGludGVycnVwdHMgdGhpcyBmdW5j dGlvbiBzdG9yZXMgdGhlIG5ldyBzdGF0ZSBpbnRvIHRoZQo+ID4+IGBsaW5lX2xldmVsYCB2YXJp YWJsZSwgcG90ZW50aWFsbHkgaW5qZWN0aW5nIHRoZSBpbnRlcnJ1cHQgaWYgdGhhdCBsaW5lCj4g Pj4gY2hhbmdlcyBmcm9tIGZhbHNlIHRvIHRydWUuIElmIHRoZSBsaW5lIGlzIGxvd2VyZWQgYmVm b3JlIHRoZSBndWVzdCBoYXMKPiA+PiBzZWVuIGl0LCB0aGlzIHBhcnRpY3VsYXIgaW50ZXJydXB0 IGluc3RhbmNlIHdpbGwgYmUgZGlzY2FyZGVkLiBTdWNjZXNzaXZlCj4gPj4gInJhaXNpbmciIGNh bGxzIHdpbGwgbm90IGxlYWQgdG8gbXVsdGlwbGUgaW50ZXJydXB0cyBpZiB0aGUgbGluZSBoYXMg bm90Cj4gPj4gYmVlbiBsb3dlcmVkIGluIGJldHdlZW4uCj4gPiAKPiA+IFRoaXMgaXMgc29tZXRo aW5nIFhlbiBuZWVkcyB0b28uCj4gPiAKPiA+IAo+ID4+ICMjIyBTb2Z0d2FyZSB0cmlnZ2VyZWQg aW50ZXJydXB0cwo+ID4+Cj4gPj4gQmVzaWRlIHRoZSBuYXR1cmFsbHkgc29mdHdhcmUgdHJpZ2dl cmVkIGludGVyLXByb2Nlc3Nvci1pbnRlcnJ1cHRzCj4gPj4gKFNHSXMgaW4gR0lDIHNwZWFrKSwg dGhlcmUgaXMgYW5vdGhlciB3YXkgb2YgbGV0dGluZyBzb2Z0d2FyZSByYWlzZSBhbgo+ID4+IGlu dGVycnVwdCBjb25kaXRpb24uCj4gPj4gVGhlIEdJQyBkaXN0cmlidXRvciBhbGxvd3MgdG8gc2V0 IG9yIGNsZWFyIGJvdGggdGhlIHBlbmRpbmcgYW5kIGFjdGl2ZSBzdGF0ZQo+ID4+IG9mIGFueSBp bnRlcnJ1cHQgdmlhIE1NSU8gcmVnaXN0ZXJzLiBUaGlzIGlzbid0IHdpZGVseSB1c2VkIGJ5IG1h bnkgb3BlcmF0aW5nCj4gPj4gc3lzdGVtcywgYnV0IGlzIHVzZWZ1bCB3aGVuIHNhdmluZyBhbmQg cmVzdG9yaW5nIHRoZSBzdGF0ZSBvZiBhIG1hY2hpbmUuCj4gPj4gU28gZW11bGF0aW5nIHRoZXNl IGZ1bmN0aW9ucyBpcyByZXF1aXJlZCBmb3IgYmVpbmcgYXJjaGl0ZWN0dXJlIGNvbXBsaWFudCwK PiA+PiBob3dldmVyIHRoZSBpbXBsZW1lbnRhdGlvbiBtaWdodCBub3QgbmVlZCB0byBiZSB2ZXJ5 IGVmZmljaWVudCBnaXZlbiBpdHMgcmFyZQo+ID4+IHVzYWdlLiBJbiBmYWN0IHN1cHBvcnRpbmcg dGhlIHNldC1wZW5kaW5nIGFuZCBjbGVhci1wZW5kaW5nIHJlZ2lzdGVycyBpcwo+ID4+IHJlbGF0 aXZlbHkgc3RyYWlnaHQtZm9yd2FyZCwgYXMgbG9uZyBhcyBvbmUga2VlcHMgdGhpcyBzdGF0ZSBz ZXBhcmF0ZSBmcm9tCj4gPj4gdGhlIGVtdWxhdGVkIGludGVycnVwdCBsaW5lLiBgcGVuZGluZ19s YXRjaGAgc3RvcmVzIHRoaXMgc3RhdGUgaW4gYHZnaWNfaXJxYC4KPiA+Pgo+ID4+IFRoZSBzZXQt YWN0aXZlIGFuZCBjbGVhci1hY3RpdmUgcmVnaXN0ZXJzIGFyZSBtdWNoIGhhcmRlciB0byBlbXVs YXRlLCB0aG91Z2gsCj4gPj4gYXMgbm9ybWFsbHkgdGhlIGFjdGl2ZSBzdGF0ZSBpcyBvZiBsaXR0 bGUgY29uY2VybiB0byB0aGUgR0lDIGVtdWxhdGlvbi4gSW4KPiA+PiBhIG5vcm1hbCBpbnRlcnJ1 cHQgbGlmZSBjeWNsZSB0aGUgYWN0aXZlIHN0YXRlIGlzbid0IGV2ZW4gdmlzaWJsZSB0byB0aGUK PiA+PiBoeXBlcnZpc29yLCBhcyBpdCBtaWdodCBiZSBzZXQgYW5kIGNsZWFyZWQgYWdhaW4gZW50 aXJlbHkgd2l0aGluIHRoZSBndWVzdAo+ID4+IGluIHRoZSBsaXN0IHJlZ2lzdGVyLCB3aXRob3V0 IGV4aXRpbmcgdG8gdGhlIGh5cGVydmlzb3IuCj4gPj4gU28gbWFuaXB1bGF0aW5nIHRoZSBhY3Rp dmUgc3RhdGUgdmlhIHRoZSBNTUlPIHJlZ2lzdGVycyByZXF1aXJlcyBzb21lIGhlYXZ5Cj4gPj4g bGlmdGluZzogSWYgdGhpcyBpbnRlcnJ1cHQgaXMgY3VycmVudGx5IGluamVjdGVkIGludG8gYSBy dW5uaW5nIFZDUFUsIHRoaXMKPiA+PiBWQ1BVIG11c3QgZXhpdCwgdGhlIGFjdGl2ZSBzdGF0ZSBt dXN0IGJlIHNldCBvciBjbGVhcmVkIGluIHRoZSBMUiwgdGhlbgo+ID4+IGV4ZWN1dGlvbiBjYW4g Y29udGludWUuIFdoaWxlIHRoaXMgaXMgZXhwZW5zaXZlLCBhcyBtZW50aW9uZWQgYWJvdmUgdGhp cwo+ID4+IHNob3VsZCBub3QgaGFwcGVuIHRvbyBvZnRlbiwgYWxzbyBwcm9iYWJseSB0aGUgc3lz dGVtIGlzbid0IHZlcnkgcGVyZm9ybWFuY2UKPiA+PiBzZW5zaXRpdmUgd2hlbiB1c2luZyB0aGlz IGZlYXR1cmUgZm9yIHNhdmUgYW5kIHJlc3RvcmUgYW55d2F5Lgo+ID4gCj4gPiBzZXQtYWN0aXZl IGFuZCBjbGVhci1hY3RpdmUgcmVnaXN0ZXJzIGFyZSBub3QgZW11bGF0ZWQgaW4gWGVuIHRvZGF5 LCBpdAo+ID4gd291bGQgYmUgbmljZSB0byBoYXZlIHRoZW0uCj4gPiAKPiA+IEhvdyBkb2VzIHRo ZSBsb2NraW5nL3N5bmNocm9uaXphdGlvbiB3b3JrIGluIHRoZSBjYXNlIGdpdmVuIHRoYXQgdGhl Cj4gPiB2Q1BVIHRoYXQgbmVlZHMgdG8gZXhpdCBjb3VsZCBiZSBydW5uaW5nIG9uIGEgZGlmZmVy ZW50IHBDUFU/Cj4gCj4gQXMgSSBoaW50ZWQgYWJvdmUgdGhpcyBpcyBhIGJpdCBvZiBhIHNsZWRn ZSBoYW1tZXI6IFdlIGNhbGwKPiBrdm1fYXJtX2hhbHRfZ3Vlc3QoKSB0byBmb3JjZSBhbGwgVkNQ VXMgdG8gZXhpdCBhbmQgdG8gbWFrZSBzdXJlIHdlIGFyZQo+IGluIHN5bmMuIFRoZW4gd2UgY2Fu IHNhZmVseSB1cGRhdGUgdGhlIHN0YXR1cywgYW5kIHRoZSBub3JtYWwgZW50cnkKPiBwcm9jZXNz IHRha2VzIGNhcmUgb2Ygd3JpdGluZyB0aGlzIGludG8gdGhlIExScy4KCkhvdyBkb2VzIHZjcHUx L3BjcHUxIHRlbGwgdmNwdTIvcGNwdTIgdGhhdCBhZnRlciB0cmFwcGluZyBpbnRvIHRoZQpoeXBl cnZpc29yLCBpdCBzaG91bGQgZ2V0IHJpZCBvZiB0aGUgYWN0aXZlIGJpdCBvciBzZXQgdGhlIGFj dGl2ZSBiaXQ/CklzIGl0IGRvbmUgdmlhIHRoZSBhY3RpdmUgZmllbGQgaW4gc3RydWN0IHZnaWNf aXJxPwoKCj4gPiBUaGUgc3VnZ2VzdGlvbiBvZiB1c2luZyB0aGlzIG1vZGVsIGluIFhlbiB3YXMg bWFkZSBpbiB0aGUgcGFzdCBhbHJlYWR5Lgo+ID4gSSBhbHdheXMgb2JqZWN0ZWQgZm9yIHRoZSBy ZWFzb24gdGhhdCB3ZSBkb24ndCBhY3R1YWxseSBrbm93IGhvdyBtYW55Cj4gPiBMUnMgdGhlIGhh cmR3YXJlIHByb3ZpZGVzLCBwb3RlbnRpYWxseSB2ZXJ5IG1hbnksIGFuZCBpdCBpcyBleHBlbnNp dmUKPiA+IGFuZCBuZWVkbGVzcyB0byByZWFkL3dyaXRlIHRoZW0gYWxsIGV2ZXJ5IHRpbWUgb24g ZW50cnkvZXhpdC4KPiA+IAo+ID4gSSB3b3VsZCBwcmVmZXIgdG8gYXZvaWQgdGhhdCwgYnV0IEkn bGwgYmUgaG9uZXN0OiBJIGNhbiBiZSBjb252aW5jZWQKPiA+IHRoYXQgdGhhdCBtb2RlbCBvZiBo YW5kbGluZyBMUnMgaXMgc28gbXVjaCBzaW1wbGVyIHRoYXQgaXQgaXMgd29ydGggaXQuCj4gPiBJ IGFtIG1vcmUgY29uY2VybmVkIGFib3V0IHRoZSBmdXR1cmUgbWFpbnRhaW5hbmNlIG9mIGEgc2Vw YXJhdGUgbmV3Cj4gPiBkcml2ZXIgZGV2ZWxvcGVkIGVsc2V3aGVyZS4KPiAKPiBJIHRoaW5rIHRo aXMgTFIgdG9waWMgc2hvdWxkIGhhdmUgYmVlbiBjb3ZlcmVkIGluIHRoYXQgb3RoZXIgZW1haWwu Cj4gCj4gQmVzaWRlIGJlaW5nIGEgc3Ryb25nIHN1cHBvcnRlciBvZiB0aGUgS0lTUyBwcmluY2lw bGUgaW4gZ2VuZXJhbCwgSQo+IGJlbGlldmUgaW4gY2FzZSBvZiB0aGUgR0lDIGVtdWxhdGlvbiB3 ZSBzaG91bGQgYXZvaWQgKHByZW1hdHVyZSkKPiBvcHRpbWl6YXRpb25zIGxpa2UgdGhlIHBsYWd1 ZSwgYXMgdGhlcmUgYXJlIHF1aXRlIHNvbWUgY29ybmVyIGNhc2VzIGluCj4gYW55IFZHSUMsIGFu ZCBoYW5kbGluZyBhbGwgb2YgdGhlbSBleHBsaWNpdGx5IHdpdGggc29tZSBoYWNrcyB3aWxsIG5v dAo+IGZseSAoYmVlbiB0aGVyZSwgZG9uZSB0aGF0KS4KPiBTbyBJIGNhbiBqdXN0IHN1cHBvcnQg Q2hyaXN0b2ZmZXIncyBwb2ludDogaGF2aW5nIGFuIGFyY2hpdGVjdHVyZQo+IGNvbXBsaWFudCBW R0lDIGVtdWxhdGlvbiBpbiBhbiBtYWludGFpbmFibGUgbWFubmVyIHJlcXVpcmVzIGEKPiBzdHJh aWdodC1mb3J3YXJkIGFuZCBjbGVhciBkZXNpZ24uIEV2ZXJ5dGhpbmcgZWxzZSBzaG91bGQgYmUg c2Vjb25kYXJ5LAo+IGFuZCBjYW4gYmUgZXZhbHVhdGVkIGxhdGVyLCBpZiB0aGVyZSBhcmUgZ29v ZCByZWFzb25zIChudW1iZXJzISkuCgpUaGUgcmVhc29uIHdoeSBJIHN0YXRlZCB0aGUgYWJvdmUg aXMgdGhhdCBJIHJhbiB0aGUgbnVtYmVycyBiYWNrIGluIHRoZQpkYXkgYW5kIHJlYWRpbmcgb3Ig d3JpdGluZyBMUnMgb24gYW4gWEdlbmUgd2FzIHNvIHNsb3cgdGhhdCBpdCBtYWRlCnNlbnNlIHRv IGF2b2lkIGl0IGFzIG11Y2ggYXMgcG9zc2libGUuIEJ1dCBtYXliZSB0aGluZ3MgaGF2ZSBjaGFu Z2VkIGlmCkNocmlzdG9mZmVyIGFsc28gcmFuIHRoZSBudW1iZXJzIGFuZCBtYW5hZ2VkIHRvIGRl bW9uc3RyYXRlIHRoZQpvcHBvc2l0ZS4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhl bi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=