From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andre Przywara Subject: Re: [RFC] ARM: New (Xen) VGIC design document Date: Thu, 2 Nov 2017 16:00:58 +0000 Message-ID: <57cd8f84-8a56-132f-cb9a-a6889f743e53@linaro.org> 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 1eAHvU-0001Xp-Oy for xen-devel@lists.xenproject.org; Thu, 02 Nov 2017 16:01:05 +0000 Received: by mail-wm0-f66.google.com with SMTP id r68so20847wmr.3 for ; Thu, 02 Nov 2017 09:01:02 -0700 (PDT) In-Reply-To: Content-Language: en-GB List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Stefano Stabellini Cc: Marc Zyngier , xen-devel@lists.xenproject.org, Julien Grall , Christoffer Dall , Eric Auger List-Id: xen-devel@lists.xenproject.org SGksCgpPbiAwMS8xMS8xNyAyMTo1NCwgU3RlZmFubyBTdGFiZWxsaW5pIHdyb3RlOgo+IE9uIFdl ZCwgMSBOb3YgMjAxNywgQW5kcmUgUHJ6eXdhcmEgd3JvdGU6Cj4+IEhpIFN0ZWZhbm8sCj4+Cj4+ Cj4+IE9uIDAxLzExLzE3IDAxOjU4LCBTdGVmYW5vIFN0YWJlbGxpbmkgd3JvdGU6Cj4+PiBPbiBX ZWQsIDExIE9jdCAyMDE3LCBBbmRyZSBQcnp5d2FyYSB3cm90ZToKPj4KPj4gbWFueSB0aGFua3Mg Zm9yIGdvaW5nIHRocm91Z2ggYWxsIG9mIHRoaXMhCj4gCj4gTm8gcHJvYmxlbXMsIGFuZCB0aGFu a3MgZm9yIHlvdXIgd29yayBhbmQgZm9yIGNhcmluZyBhYm91dCBkb2luZyB0aGUKPiBiZXN0IHRo aW5nIGZvciB0aGUgcHJvamVjdC4KPiAKPiAKPj4+PiAoQ0M6aW5nIHNvbWUgS1ZNL0FSTSBmb2xr cyBpbnZvbHZlZCBpbiB0aGUgVkdJQykKPj4+Pgo+Pj4+IHN0YXJ0aW5nIHdpdGggdGhlIGFkZGl0 aW9uIG9mIHRoZSBJVFMgc3VwcG9ydCB3ZSB3ZXJlIHNlZWluZyBtb3JlIGFuZAo+Pj4+IG1vcmUg aXNzdWVzIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2Ygb3VyIEFSTSBHZW5lcmlj IEludGVycnVwdAo+Pj4+IENvbnRyb2xsZXIgKEdJQykgZW11bGF0aW9uLCB0aGUgVkdJQy4KPj4+ PiBBbW9uZyBvdGhlciBhcHByb2FjaGVzIHRvIGZpeCB0aG9zZSBpc3N1ZXMgaXQgd2FzIHByb3Bv c2VkIHRvIGNvcHkgdGhlCj4+Pj4gVkdJQyBlbXVsYXRpb24gdXNlZCBpbiBLVk0uIFRoaXMgb25l IHdhcyBzdWZmZXJpbmcgZnJvbSB2ZXJ5IHNpbWlsYXIKPj4+PiBpc3N1ZXMsIGFuZCBhIGNsZWFu IGRlc2lnbiBmcm9tIHNjcmF0Y2ggbGVhZCB0byBhIHZlcnkgcm9idXN0IGFuZAo+Pj4+IGNhcGFi bGUgcmUtaW1wbGVtZW50YXRpb24uIEludGVyZXN0aW5nbHkgdGhpcyBpbXBsZW1lbnRhdGlvbiBp cyBmYWlybHkKPj4+PiBzZWxmLWNvbnRhaW5lZCwgc28gaXQgc2VlbXMgZmVhc2libGUgdG8gY29w eSBpdC4gSG9wZWZ1bGx5IHdlIG9ubHkgbmVlZAo+Pj4+IG1pbm9yIGFkanVzdG1lbnRzLCBwb3Nz aWJseSB3ZSBjYW4gZXZlbiBjb3B5IGl0IHZlcmJhdGltIHdpdGggc29tZQo+Pj4+IGFkZGl0aW9u YWwgZ2x1ZSBsYXllciBjb2RlLgo+Pj4+Cj4+Pj4gU3RlZmFubyBhc2tlZCBmb3IgZ2V0dGluZyBh IGRlc2lnbiBvdmVydmlldywgdG8gYXNzZXNzIHRoZSBmZWFzaWJpbGl0eQo+Pj4+IG9mIGNvcHlp bmcgdGhlIEtWTSBjb2RlIHdpdGhvdXQgcmV2aWV3aW5nIHRvbnMgb2YgY29kZSBpbiB0aGUgZmly c3QKPj4+PiBwbGFjZS4KPj4+PiBTbyB0byBmb2xsb3cgWGVuIHJ1bGVzIGZvciBuZXcgZmVhdHVy ZXMsIHRoaXMgZGVzaWduIGRvY3VtZW50IGJlbG93IGlzCj4+Pj4gYW4gYXR0ZW1wdCB0byBkZXNj cmliZSB0aGUgY3VycmVudCBLVk0gVkdJQyBkZXNpZ24gLSBpbiBhIGh5cGVydmlzb3IKPj4+PiBh Z25vc3RpYyBzZXNzaW9uLiBJdCBpcyBhIGJpdCBvZiBhIHJldHJvLWZpdCBkZXNpZ24gZGVzY3Jp cHRpb24sIGFzIGl0Cj4+Pj4gaXMgbm90IHN0cmljdGx5IGZvcndhcmQtbG9va2luZyBvbmx5LCBi dXQgYWN0dWFsbHkgZGVzY3JpYmluZyB0aGUKPj4+PiBleGlzdGluZyBpbXBsZW1lbmF0aW9uIFsx XS4KPj4+Pgo+Pj4+IFBsZWFzZSBoYXZlIGEgbG9vayBhbmQgbGV0IG1lIGtub3c6Cj4+Pj4gMSkg aWYgdGhpcyBkb2N1bWVudCBoYXMgdGhlIHJpZ2h0IHNjb3BlCj4+Pj4gMikgaWYgdGhpcyBkb2N1 bWVudCBoYXMgdGhlIHJpZ2h0IGxldmVsIG9mIGRldGFpbAo+Pj4+IDMpIGlmIHRoZXJlIGFyZSBw b2ludHMgbWlzc2luZyBmcm9tIHRoZSBkb2N1bWVudAo+Pj4+IDMpIGlmIHRoZSBkZXNpZ24gaW4g Z2VuZXJhbCBpcyBhIGZpdAo+Pj4KPj4+IFBsZWFzZSByZWFkIHRoZSBmb2xsb3dpbmcgc3RhdGVt ZW50cyBhcyBnZW51aW5lIHF1ZXN0aW9ucyBhbmQgY29uY2VybnMuCj4+PiBNb3N0IGlkZWFzIG9u IHRoaXMgZG9jdW1lbnQgYXJlIGdvb2QuIFNvbWUgb2YgdGhlbSBJIGhhdmUgZXZlbiBzdWdnZXN0 ZWQKPj4+IHRoZW0gbXlzZWxmIGluIHRoZSBjb250ZXh0IG9mIEdJQyBpbXByb3ZlbWVudHMgZm9y IFhlbi4gSSBhc2tlZCBmb3IgYQo+Pj4gY291cGxlIG9mIGNsYXJpZmljYXRpb25zLgo+Pj4KPj4+ IEJ1dCBJIGRvbid0IHNlZSB3aHkgd2UgY2Fubm90IGltcGxlbWVudCB0aGVzZSBpZGVhcyBvbiB0 b3Agb2YgdGhlCj4+PiBleGlzdGluZyBjb2RlLCByYXRoZXIgdGhhbiB3aXRoIGEgc2VwYXJhdGUg Y29kZWJhc2UsIGVuZGluZyB1cCB3aXRoIHR3bwo+Pj4gZHJpdmVycy4gSSB3b3VsZCBwcmVmZXIg YSBuYXR1YWwgZXZvbHV0aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBmb2xsb3dpbmcKPj4+IGltcHJv dmVtZW50cyB3b3VsZCBiZSBzaW1wbGUgYW5kIHdvdWxkIGdpdmUgdXMgbW9zdCBvZiB0aGUgYmVu ZWZpdHMgb24KPj4+IHRvcCBvZiB0aGUgY3VycmVudCBjb2RlYmFzZToKPj4+IC0gYWRkaW5nIHRo ZSBpcnEgbG9jaywgYW5kIHRoZSByZWZjb3VudAo+Pj4gLSB0YWtpbmcgYm90aCB2Y3B1IGxvY2tz IHdoZW4gbmVjZXNzYXJ5IChvbiBtaWdyYXRpb24gY29kZSBmb3IgZXhhbXBsZQo+Pj4gICBpdCB3 b3VsZCBoZWxwIGEgbG90KSwgdGhlIGxvd2VyIHZjcHVfaWQgZmlyc3QKPj4+IC0gbGV2ZWwgaXJx IGVtdWxhdGlvbgo+Pgo+PiBJIHRoaW5rIHNvbWUgb2YgdGhvc2UgcG9pbnRzIHlvdSBtZW50aW9u ZWQgYXJlIG5vdCBlYXNpbHkgaW1wbGVtZW50ZWQgaW4KPj4gdGhlIGN1cnJlbnQgWGVuLiBGb3Ig aW5zdGFuY2UgSSByYW4gaW50byBsb2NraW5nIG9yZGVyIGlzc3VlcyB3aXRoIHRob3NlCj4+ICp0 d28qIGluZmxpZ2h0IGFuZCBscl9xdWV1ZSBsaXN0cywgd2hlbiB0cnlpbmcgdG8gaW1wbGVtZW50 IHRoZSBsb2NrIGFuZAo+PiB0aGUgcmVmY291bnQuCj4+IEFsc28gdGhpcyAicHV0IHZJUlFzIGlu dG8gTFJzIGVhcmx5LCBidXQgcG9zc2libHkgcmlwIHRoZW0gb3V0IGFnYWluIiBpcwo+PiByZWFs bHkgY29tcGxpY2F0aW5nIHRoaW5ncyBhIGxvdC4KPj4KPj4gSSBiZWxpZXZlIG9ubHkgbGV2ZWwg SVJRcyBjb3VsZCBiZSBhZGRlZCBpbiBhIHJlbGF0aXZlbHkgc3RyYWlnaHQKPj4gZm9yd2FyZCBt YW5uZXIuCj4+Cj4+IFNvIHRoZSBwcm9ibGVtIHdpdGggdGhlIGV2b2x1dGlvbmFyeSBhcHByb2Fj aCBpcyB0aGF0IGl0IGdlbmVyYXRlcyBhIGxvdAo+PiBvZiBwYXRjaGVzLCBzb21lIG9mIHRoZW0g cXVpdGUgaW52YXNpdmUsIG90aGVycyBjcmVhdGluZyBoYXJkLXRvLXJlYWQKPj4gZGlmZnMsIHdo aWNoIGFyZSBib3RoIGhhcmQgdG8gcmV2aWV3Lgo+PiBBbmQgY2hhbmNlcyBhcmUgdGhhdCB0aGUg YWN0dWFsIHJlc3VsdCB3b3VsZCBiZSBwcmV0dHkgY2xvc2UgdG8gdGhlIEtWTQo+PiBjb2RlLiBU byBiZSBjbGVhcjogSSBoYWNrZWQgdGhlIFhlbiBWR0lDIGludG8gdGhlIEtWTSBkaXJlY3Rpb24g aW4gYSBmZXcKPj4gZGF5cyBzb21lIG1vbnRocyBhZ28sIGJ1dCBpdCB0b29rIG1lICp3ZWVrcyog dG8gbWFrZSBzYW5lIHBhdGNoZXMgb2YKPj4gb25seSB0aGUgZmlyc3QgcGFydCBvZiBpdC4KPj4g QW5kIHRoaXMgd291bGQgbm90IGNvdmVyIGFsbCB0aG9zZSBnZW5lcmFsLCB0ZWRpb3VzIGNvcm5l ciBjYXNlcyB0aGF0Cj4+IHRoZSBWR0lDIGNvbWVzIHdpdGguIFRob3NlIHdvdWxkIG5lZWQgdG8g YmUgZml4ZWQgaW4gYSBwYWluZnVsIHByb2Nlc3MsCj4+IHdoaWNoIHdlIGNvdWxkIGF2b2lkIGJ5 ICJsaWZ0aW5nIiB0aGUgS1ZNIGNvZGUuCj4gCj4gSSBoZWFyIHlvdSwgYnV0IHRoZSBwcmluY2lw YWwgY29zdCBoZXJlIGlzIHRoZSByZXZpZXcgdGltZSwgbm90IHRoZQo+IGRldmVsb3BtZW50IHRp bWUuIEp1bGllbiB0b2xkIG1lIHRoYXQgaXQgd291bGQgYmUgcHJldHR5IG11Y2ggdGhlIHNhbWUK PiBmb3IgaGltIGluIHRlcm1zIG9mIHRpbWUgaXQgdGFrZXMgdG8gcmV2aWV3IHRoZSBjaGFuZ2Vz LCBpdCBkb2Vzbid0Cj4gbWF0dGVyIGlmIGl0J3MgYSBuZXcgZHJpdmVyIG9yIGNoYW5nZXMgdG8g dGhlIGV4aXN0aW5nIGRyaXZlci4gRm9yIG1lLAo+IGl0IHdvdWxkbid0IGJlIHRoZSBzYW1lOiBJ IHRoaW5rIGl0IHdvdWxkIHRha2UgbWUgZmFyIGxlc3MgdGltZSB0bwo+IHJldmlldyB0aGVtIGlm IHRoZXkgd2VyZSBhZ2FpbnN0IHRoZSBleGlzdGluZyBjb2RlYmFzZS4KCkkgYW0gbm90IHNvIHN1 cmUgYWJvdXQgdGhpcy4gVGhlIGNoYW5nZXMgYXJlIHF1aXRlIGRyYW1hdGljLCBhbmQgdGhvc2UK Y2hhbmdlcyB0ZW5kIHRvIHByb2R1Y2UgaG9ycmlibGUgZGlmZnMuIE9yIHdlIHRyeSB0byBtaXRp Z2F0ZSB0aGlzLCBidXQKdGhpcyBjb21lcyBhdCBhIGNvc3Qgb2YgaGF2aW5nICptYW55KiBwYXRj aGVzLCB3aGljaCB0YWtlIGEgd2hpbGUgdG8KcHJvZHVjZS4KQnV0IGlmIHdlIGluc3RhbnRpYXRl IGEgbmV3IFZHSUMgaW1wbGVtZW50YXRpb24gZnJvbSBzY3JhdGNoLCB3ZSBjYW4KcHJvdmlkZSB2 ZXJ5IG5pY2UtdG8tcmV2aWV3IHBhdGNoZXMsIGJlY2F1c2UgdGhlIHBhdGNoZXMgY2FuIGZvY3Vz IG9uCmxvZ2ljYWwgY2hhbmdlcyBhbmQgZG9uJ3QgbmVlZCB0byBjYXJlIGFib3V0IGJpc2VjdGFi aWxpdHkuCgo+IEhvd2V2ZXIsIGFzIEkgd3JvdGUsIHRoaXMgaXMgbm90IG15IGZvcmVtb3N0IGNv bmNlcm4uIEkgd291bGQgYmUgdXAgdG8KPiBjb21taXR0aW5nIG15c2VsZiB0byByZXZpZXcgdGhp cyBldmVuIGlmIHdlIGRlY2lkZSB0byBnbyBmb3IgYSBuZXcKPiBkcml2ZXIuCj4gCj4gCj4+PiBJ ZiB3ZSBkbyBlbmQgdXAgd2l0aCBhIHNlY29uZCBzZXBhcmF0ZSBkcml2ZXIgZm9yIHRlY2huaWNh bCBvciBwcm9jZXNzCj4+PiByZWFzb25zLCBJIHdvdWxkIGV4cGVjdCB0aGUgcmVndWxhciBYZW4g c3VibWlzc2lvbi9yZXZpZXcgcHJvY2VzcyB0byBiZQo+Pj4gZm9sbG93ZWQuIFRoZSBjb2RlIHN0 eWxlIHdpbGwgYmUgZGlmZmVyZW50LCB0aGUgaG9va3MgaW50byB0aGUgcmVzdCBvZgo+Pj4gdGhl IGh5cGVydmlzb3JzIHdpbGwgYmUgZGlmZmVyZW50IGFuZCB0aGluZ3Mgd2lsbCBiZSBnZW5lcmFs bHkgY2hhbmdlZC4KPj4+IFRoZSBuZXcgVi9HSUMgbWlnaHQgYmUgZGVyaXZlZCBmcm9tIEtWTSwg YnV0IGl0IHNob3VsZCBlbmQgdXAgbG9va2luZwo+Pj4gYW5kIGZlZWxpbmcgbGlrZSBhIDEwMCUg Z2VudWluZSBYZW4gY29tcG9uZW50LiBBZnRlciBhbGwsIHdlJ2xsCj4+PiBtYWludGFpbiBpdCBn b2luZyBmb3J3YXJkLiBJIGRvbid0IHdhbnQgYSBjb3B5IG9mIGEgTGludXggZHJpdmVyIHdpdGgK Pj4+IGdsdWUgY29kZS4gVGhlIFhlbiBjb21tdW5pdHkgY2Fubm90IGJlIGV4cGVjdGVkIG5vdCB0 byByZXZpZXcgdGhlCj4+PiBzdWJtaXNzaW9uLCBidXQgaWYgd2UgcmV2aWV3IGl0LCB0aGVuIHdl J2xsIGFzayBmb3IgY2hhbmdlcy4gT25jZSB3ZQo+Pj4gY2hhbmdlIHRoZSBjb2RlLCB0aGVyZSB3 aWxsIGJlIG5vIHBvaW50IGluIGtlZXBpbmcgdGhlIExpbnV4IGNvZGUKPj4+IHNlcGFyYXRlIHdp dGggZ2x1ZSBjb2RlLiBXZSBzaG91bGQgZnVsbHkgYWRhcHQgaXQgdG8gWGVuLgo+Pgo+PiBJIHNl ZSB5b3VyIHBvaW50LCBhbmQgdGhpcyBhY3R1YWxseSBzaW1wbGlmaWVzICpteSogd29yaywgYnV0 IEkgYW0gYSBiaXQKPj4gd29ycmllZCBhYm91dCB0aGUgZWZmZWN0cyBvZiBoYXZpbmcgdHdvIHNl cGFyYXRlIGltcGxlbWVudGF0aW9ucyB3aGljaAo+PiB0aGVuIGRpdmVyZ2Ugb3ZlciB0aW1lLgo+ PiBJbiB0aGUgbW9tZW50IHdlIGhhdmUgdHdvIHNlcGFyYXRlIGltcGxlbWVudGF0aW9ucyBhcyB3 ZWxsLCBidXQgdGhleSBhcmUKPj4gcXVpdGUgZGlmZmVyZW50LCB3aGljaCBoYXMgdGhlIGFkdmFu dGFnZSBvZiBkb2luZyB0aGluZ3MgZGlmZmVyZW50bHkKPj4gZW5vdWdoIHRvIGhlbHAgaW4gZmlu ZGluZyBidWdzIGluIHRoZSBvdGhlciBvbmUgKHNvbWV0aGluZyB3ZSBzaG91bGQKPj4gYWN0dWFs bHkgZXhwbG9pdCBpbiB0ZXN0aW5nLCBJIGJlbGlldmUpLgo+IAo+IEl0IGlzIGEgbWF0dGVyIG9m IG93bmVyc2hpcCBhbmQgcmVzcG9uc2liaWxpdGllcy4gVGhlIGdpYyBhbmQgdmdpYwo+IGNvbXBv bmVudHMgYXJlIGNyaXRpY2FsIHRvIHRoZSBoeXBlcnZpc29yIGZ1bmN0aW9uYWxpdGllcywgYW5k IGFzIFhlbgo+IFByb2plY3Qgd2UgbmVlZCB0byB0YWtlIG93bmVyc2hpcCBvZiB0aGVtLiBJdCBt ZWFucyBmaXhpbmcgYnVncyBhbmQKPiBtYWludGFpbmluZyB0aGVtIGdvaW5nIGZvcndhcmQuIEl0 IG1ha2VzIHNlbnNlIHRvIGhhdmUgdGhlbSBmdWxseQo+IGludGVncmF0ZWQgaW50byBYZW4uCgpZ ZXMsIEkgY2FuIHNlZSB0aGF0LiBJIG5vdyBjYW1lIHRvIHRoZSBiZWxpZWYgdGhhdCB0YWtpbmcg dGhlIEtWTSBjb2RlCip2ZXJiYXRpbSogaXMgbm90IHdvcnRoIHRoZSBlZmZvcnQ6IGluIHRoZSBt b21lbnQgSSBhbSBzdHJ1Z2dsaW5nIHdpdGgKdGlueSwgYnV0IG5hc3R5IGRldGFpbHMgdG8gYmUg c29sdmVkLgpJZiB3ZSBhbGxvdyB0aGUgY29kZSB0byBiZSBjaGFuZ2VkLCB3ZSBnZXQgbXVjaCBt b3JlIGZyZWVkb20uCgo+PiBTbyBob3cgaXMgeW91ciBmZWVsaW5nIHRvd2FyZHMgc29tZSBzaGFy ZWQgImxpYnZnaWMiPyBJIHVuZGVyc3RhbmQgdGhhdAo+PiBwZW9wbGUgYXJlIG5vdCB0b28gaGFw cHkgYWJvdXQgdGhhdCBleHRyYSBtYWludGVuYW5jZSBjb3N0IG9mIGhhdmluZyBhCj4+IHNlcGFy YXRlIHJlcG9zaXRvcnksIGJ1dCBJIGFtIGN1cmlvdXMgd2hhdCB5b3VyLCBNYXJjJ3MgYW5kCj4+ IENocmlzdG9mZmVyJ3MgdGFrZSBpcyBvbiB0aGlzIGlkZWEuCj4gCj4gSSBhbSBvcGVuIHRvIHRo aXMgZGlzY3Vzc2lvbi4gSXQgaXMgbmljZSBpbiB0aGVvcnksIGJ1dCBpdCBpcyBoYXJkIHRvCj4g cHV0IGludG8gcHJhY3RpY2UuIEkgdGhpbmsgbmVpdGhlciBKdWxpZW4gYW5kIEkgbm9yIENocmlz dG9mZmVyIGFuZCBNYXJjCj4gbGlrZSB0aGUgaWRlYSBvZiBhIHNlcGFyYXRlIHJlcG9zaXRvcnku IEl0IGlzIGEgcGFpbiBhbmQgaXQgaXMgdWdseS4gQnV0Cj4gaWYgd2UgZG9uJ3QgaGF2ZSBhIHNp bmdsZSByZXBvc2l0b3J5LCBob3cgY2FuIHdlIHNoYXJlIHRoZSBjb2RlYmFzZT8KPiAKPiBBbHNv IGtlZXAgaW4gbWluZCB0aGF0IFhlbiBhbmQgTGludXggaGF2ZSBkaWZmZXJlbnQgcmVsZWFzZSBj eWNsZXMgYW5kCj4gdGhleSBnbyBpbnRvIGZyZWV6ZSBhdCBkaWZmZXJlbnQgdGltZXMuIEl0IGFm ZmVjdHMgd2hlbi9ob3cgZml4ZXMgY2FuCj4gZ2V0IGludG8gdGhlIGNvZGViYXNlLgo+IAo+IFVu bGVzcyB5b3UgY29tZSB1cCB3aXRoIGEgY2xldmVyIGlkZWEgb24gaG93IHRvIG1ha2UgdGhpcyB3 b3JrLCBJIHRoaW5rCj4gd2UgYXJlIGJldHRlciBvZmYgd2l0aCBvdXIgb3duIHZlcnNpb24gb2Yg dGhlIGRyaXZlci4KClllYWgsIEkgYWdyZWUsIGl0IHdvdWxkIHByb2JhYmx5IGJlIHF1aXRlIHNv bWUgcGFpbiwgd2hpY2ggaXMgaGFyZCB0bwpqdXN0aWZ5LCBlc3BlY2lhbGx5IGZyb20gdGhlIExp bnV4IHNpZGUuCgo+Pj4gVGhhdCBpcyB3aGF0IHdhcyBkb25lIGluIHRoZSBwYXN0IHdoZW4gS1ZN IHRvb2sgY29kZSBmcm9tIFhlbiAoZm9yCj4+PiBleGFtcGxlIGFzeW5jIHNoYWRvdyBwYWdldGFi bGVzKS4gSSBhbSBlYWdlciB0byBhdm9pZCBhIHNpdHVhdGlvbiBsaWtlCj4+PiB0aGUgY3VycmVu dCBTTU1VIGRyaXZlciBpbiBYZW4sIHdoaWNoIGNvbWVzIGZyb20gTGludXgsIGFuZCB3ZSBhcmUg bm90Cj4+PiBlbnRpcmVseSBzdXJlIGhvdyB0byBtYWludGFpbiBpdC4KPj4+Cj4+Pgo+Pj4+IEFw cHJlY2lhdGUgYW55IGZlZWRiYWNrIQo+Pj4+Cj4+Pj4gQ2hlZXJzLAo+Pj4+IEFuZHJlLgo+Pj4+ Cj4+Pj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4+Pj4KPj4+PiBW R0lDIGRlc2lnbgo+Pj4+ID09PT09PT09PT09Cj4+Pj4KPj4+PiBUaGlzIGRvY3VtZW50IGRlc2Ny aWJlcyB0aGUgZGVzaWduIG9mIGFuIEFSTSBHZW5lcmljIEludGVycnVwdCBDb250cm9sbGVyIChH SUMpCj4+Pj4gZW11bGF0aW9uLiBJdCBpcyBtZWFudCB0byBlbXVsYXRlIGEgR0lDIGZvciBhIGd1 ZXN0IGluIGFuIHZpcnR1YWwgbWFjaGluZSwKPj4+PiB0aGUgY29tbW9uIG5hbWUgZm9yIHRoYXQg aXMgVkdJQyAoZnJvbSAidmlydHVhbCBHSUMiKS4KPj4+Pgo+Pj4+IFRoaXMgZGVzaWduIHdhcyB0 aGUgcmVzdWx0IG9mIGEgb25lLXdlZWstbG9uZyBkZXNpZ24gc2Vzc2lvbiB3aXRoIHNvbWUKPj4+ PiBlbmdpbmVlcnMgaW4gYSByb29tLCB0cmlnZ2VyZWQgYnkgZXZlci1pbmNyZWFzaW5nIGRpZmZp Y3VsdGllcyBpbiBtYWludGFpbmluZwo+Pj4+IHRoZSBleGlzdGluZyBHSUMgZW11bGF0aW9uIGlu IHRoZSBLVk0gaHlwZXJ2aXNvci4gVGhlIGRlc2lnbiBldmVudHVhbGx5Cj4+Pj4gbWF0ZXJpYWxp c2VkIGFzIGFuIGFsdGVybmF0aXZlIFZHSUMgaW1wbGVtZW50YXRpb24gaW4gdGhlIExpbnV4IGtl cm5lbAo+Pj4+IChtZXJnZWQgaW50byBMaW51eCB2NC43KS4gQXMgb2YgTGludXggdjQuOCB0aGUg cHJldmlvdXMgVkdJQyBpbXBsZW1lbnRhdGlvbgo+Pj4+IHdhcyByZW1vdmVkLCBzbyBpdCBpcyBu b3cgdGhlIGN1cnJlbnQgY29kZSB1c2VkIGJ5IExpbnV4Lgo+Pj4+IEFsdGhvdWdoIGJlaW5nIHVz ZWQgaW4gS1ZNLCB0aGUgYWN0dWFsIGRlc2lnbiBvZiB0aGlzIFZHSUMgaXMgcmF0aGVyIGh5cGVy dmlzb3IKPj4+PiBhZ25vc3RpYyBhbmQgY2FuIGJlIHVzZWQgYnkgb3RoZXIgaHlwZXJ2aXNvcnMg YXMgd2VsbCwgaW4gcGFydGljdWxhciBmb3IgWGVuLgo+Pj4+Cj4+Pj4gR0lDIGhhcmR3YXJlIHZp cnR1YWxpemF0aW9uIHN1cHBvcnQKPj4+PiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQo+Pj4+Cj4+Pj4gVGhlIEFSTSBHZW5lcmljIEludGVycnVwdCBDb250cm9sbGVyIChzaW5j ZSB2Mikgc3VwcG9ydHMgdGhlIHZpcnR1YWxpemF0aW9uCj4+Pj4gZXh0ZW5zaW9ucywgd2hpY2gg YWxsb3dzIHNvbWUgcGFydHMgb2YgdGhlIGludGVycnVwdCBsaWZlIGN5Y2xlIHRvIGJlIGhhbmRs ZWQKPj4+PiBwdXJlbHkgaW5zaWRlIHRoZSBndWVzdCB3aXRob3V0IGV4aXRpbmcgaW50byB0aGUg aHlwZXJ2aXNvci4KPj4+PiBJbiB0aGUgR0lDdjIgYW5kIEdJQ3YzIGFyY2hpdGVjdHVyZSB0aGlz IGNvdmVycyBtb3N0bHkgdGhlICJpbnRlcnJ1cHQKPj4+PiBhY2tub3dsZWRnZW1lbnQiLCAicHJp b3JpdHkgZHJvcCIgYW5kICJpbnRlcnJ1cHQgZGVhY3RpdmF0ZSIgYWN0aW9ucy4KPj4+PiBTbyBh IGd1ZXN0IGNhbiBoYW5kbGUgbW9zdCBvZiB0aGUgaW50ZXJydXB0IHByb2Nlc3NpbmcgY29kZSB3 aXRob3V0Cj4+Pj4gbGVhdmluZyBFTDEgYW5kIHRyYXBwaW5nIGludG8gdGhlIGh5cGVydmlzb3Iu IFRvIGFjY29tcGxpc2gKPj4+PiB0aGlzLCB0aGUgR0lDIGhvbGRzIHNvIGNhbGxlZCAibGlzdCBy ZWdpc3RlcnMiIChMUnMpLCB3aGljaCBzaGFkb3cgdGhlCj4+Pj4gaW50ZXJydXB0IHN0YXRlIGZv ciBhbnkgdmlydHVhbCBpbnRlcnJ1cHQuIEluamVjdGluZyBhbiBpbnRlcnJ1cHQgdG8gYSBndWVz dAo+Pj4+IGludm9sdmVzIHNldHRpbmcgdXAgb25lIExSIHdpdGggdGhlIGludGVycnVwdCBudW1i ZXIsIGl0cyBwcmlvcml0eSBhbmQgaW5pdGlhbAo+Pj4+IHN0YXRlIChtb3N0bHkgInBlbmRpbmci KSwgdGhlbiBlbnRlcmluZyB0aGUgZ3Vlc3QuIEFueSBFT0kgcmVsYXRlZCBhY3Rpb24KPj4+PiBm cm9tIHdpdGhpbiB0aGUgZ3Vlc3QganVzdCBhY3RzIG9uIHRob3NlIExScywgdGhlIGh5cGVydmlz b3IgY2FuIGxhdGVyIHVwZGF0ZQo+Pj4+IHRoZSB2aXJ0dWFsIGludGVycnVwdCBzdGF0ZSB3aGVu IHRoZSBndWVzdCBleGlzdHMgdGhlIG5leHQgdGltZSAoZm9yIHdoYXRldmVyCj4+Pj4gcmVhc29u KS4KPj4+PiBCdXQgZGVzcGl0ZSB0aGUgR0lDIGhhcmR3YXJlIGhlbHBpbmcgb3V0IGhlcmUsIHRo ZSB3aG9sZSBpbnRlcnJ1cHQKPj4+PiBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQgaXMgbm90IHZp cnR1YWxpemVkIGF0IGFsbCBhbmQgbmVlZHMgdG8gYmUgZW11bGF0ZWQKPj4+PiBieSB0aGUgaHlw ZXJ2aXNvciAtIG9yIGFub3RoZXIgcmVsYXRlZCBzb2Z0d2FyZSBjb21wb25lbnQsIGZvciBpbnN0 YW5jZSBhCj4+Pj4gdXNlcmxhbmQgZW11bGF0b3IuIFRoaXMgc28gY2FsbGVkICJkaXN0cmlidXRv ciIgcGFydCBvZiB0aGUgR0lDIGNvbnNpc3RzIG9mCj4+Pj4gbWVtb3J5IG1hcHBlZCByZWdpc3Rl cnMsIHdoaWNoIGNhbiBiZSB0cmFwcGVkIGJ5IHRoZSBoeXBlcnZpc29yLCBzbyBhbnkgZ3Vlc3QK Pj4+PiBhY2Nlc3MgY2FuIGJlIGVtdWxhdGVkIGluIHRoZSB1c3VhbCB3YXkuCj4+Pj4KPj4+PiBW R0lDIGRlc2lnbiBtb3RpdmF0aW9uCj4+Pj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+Pj4+Cj4+ Pj4gQSBHSUMgZW11bGF0aW9uIHRodXMgbmVlZHMgdG8gdGFrZSBjYXJlIG9mIHRob3NlIGJpdHM6 Cj4+Pj4KPj4+PiAtIHRyYXAgR0lDIGRpc3RyaWJ1dG9yIE1NSU8gYWNjZXNzZXMgYW5kIHNoYWRv dyB0aGUgY29uZmlndXJhdGlvbiBzZXR1cAo+Pj4+ICAgKGVuYWJsZWQvZGlzYWJsZWQsIGxldmVs L2VkZ2UsIHByaW9yaXR5LCBhZmZpbml0eSkgZm9yIHZpcnR1YWwgaW50ZXJydXB0cwo+Pj4+IC0g aGFuZGxlIGluY29taW5nIGhhcmR3YXJlIGFuZCB2aXJ0dWFsIGludGVycnVwdCByZXF1ZXN0cyBh bmQgaW5qZWN0IHRoZQo+Pj4+ICAgYXNzb2NpYXRlZCB2aXJ0dWFsIGludGVycnVwdCBieSBtYW5p cHVsYXRpbmcgb25lIG9mIHRoZSBsaXN0IHJlZ2lzdGVycwo+Pj4+IC0gdHJhY2sgdGhlIHN0YXRl IG9mIGEgdmlydHVhbCBpbnRlcnJ1cHQgYnkgaW5zcGVjdGluZyB0aGUgTFJzIGFmdGVyIHRoZQo+ Pj4+ICAgZ3Vlc3QgaGFzIGV4aXRlZCwgcG9zc2libHkgYWRqdXN0aW5nIHRoZSBzaGFkb3dlZCB2 aXJ0dWFsIGludGVycnVwdCBzdGF0ZQo+Pj4+Cj4+Pj4gRGVzcGl0ZSB0aGUgZGlzdHJpYnV0b3Ig TU1JTyByZWdpc3RlciBlbXVsYXRpb24gYmVpbmcgYSBzaXplYWJsZSBjaHVuayBvZgo+Pj4+IHRo ZSBlbXVsYXRpb24sIGl0IGlzIGFjdHVhbGx5IG5vdCBkb21pbmFudCBpZiBsb29raW5nIGF0IHRo ZSBmcmVxdWVuY3kgYXQKPj4+PiB3aGljaCBpdCBpcyBhY2Nlc3NlZC4gTm9ybWFsbHkgdGhlIGlu dGVycnVwdCBjb25maWd1cmF0aW9uIGlzIGRvbmUgYXQgYm9vdAo+Pj4+IHRpbWUgb3IgdXBvbiBp bml0aWFsaXNpbmcgdGhlIGRldmljZSAoZHJpdmVyKSwgYnV0IHJhcmVseSBkdXJpbmcgdGhlIGFj dHVhbAo+Pj4+IHJ1biB0aW1lIG9mIGEgc3lzdGVtLiBJbmplY3RpbmcgYW5kIEVPSS1pbmcgaW50 ZXJydXB0cyBob3dldmVyIGhhcHBlbnMgbXVjaAo+Pj4+IG1vcmUgb2Z0ZW4uIEEgZ29vZCBlbXVs YXRpb24gYXBwcm9hY2ggc2hvdWxkIHRodXMgZm9jdXMgb24gdHJhY2tpbmcgdGhlIHZpcnR1YWwK Pj4+PiBpbnRlcnJ1cHQgc3RhdGUgZWZmaWNpZW50bHksIGFsbG93aW5nIHF1aWNrIGhhbmRsaW5n IG9mIGluY29taW5nIGFuZCBFT0ktZWQKPj4+PiBpbnRlcnJ1cHRzLgo+Pj4+Cj4+Pj4gVGhlIGFj dHVhbCBpbnRlcnJ1cHQgc3RhdGUgdHJhY2tpbmcgY2FuIGJlIHF1aXRlIHRyaWNreSBpbiBwYXJ0 cy4gSW50ZXJydXB0Cj4+Pj4gaW5qZWN0aW9ucyBjYW4gYmUgaW5kZXBlbmRlbnQgZnJvbSB0aGUg Z3Vlc3QgZW50cnkvZXhpdCBwb2ludHMsIGFsc28gTU1JTwo+Pj4+IGNvbmZpZ3VyYXRpb24gYWNj ZXNzZXMgY291bGQgYmUgdHJpZ2dlcmVkIGJ5IGFueSBWQ1BVIGF0IGFueSBwb2ludCBpbiB0aW1l Lgo+Pj4+IENoYW5naW5nIGludGVycnVwdCBDUFUgYWZmaW5pdHkgYWRkcyB0byB0aGUgY29tcGxp Y2F0aW9uLgo+Pj4+IFRoaXMgbGVhZHMgdG8gbWFueSBjb2RlIHBhcnRzIHdoaWNoIGNvdWxkIHJ1 biBpbiBwYXJhbGxlbCBhbmQgdGh1cyBjb250YWlucwo+Pj4+IHNvbWUgcmFjZSBjb25kaXRpb25z LCBzbyBwcm9wZXIgbG9ja2luZyBiZWNvbWVzIGtleSBvZiBhIGdvb2QgZGVzaWduLgo+Pj4+IEJ1 dCBvbmUgaGFzIHRvIGNvbnNpZGVyIHRoYXQgaW50ZXJydXB0cyBpbiBnZW5lcmFsIGNhbiBiZSBj aGFyYWN0ZXJpc2VkCj4+Pj4gYXMgYSByYXJlIGV2ZW50IC0gb3RoZXJ3aXNlIGEgZ3Vlc3Qgd291 bGQgYmUgYnVzeSBoYW5kbGluZyBpbnRlcnJ1cHRzIGFuZCBjb3VsZAo+Pj4+IG5vdCBwcm9jZXNz IGFjdHVhbCBjb21wdXRhdGlvbiB0YXNrcy4KPj4+PiBUaGF0J3Mgd2h5IHRoZSBpbnRlcnJ1cHQg c3RhdGUgdHJhY2tpbmcgc2hvdWxkIGZvY3VzIG9uIGEgY2xlYXIgYW5kIHJhY2UtZnJlZQo+Pj4+ IGxvY2tpbmcgc2NoZW1lLCB3aXRob3V0IG5lZWRsZXNzbHkgb3B0aW1pc2luZyB0b28gbXVjaCBp biB0aGlzIHJlc3BlY3QuCj4+Pj4gRXhwZXJpZW5jZSBzaG93cyB0aGF0IHRoaXMgY29tcGxpY2F0 ZXMgdGhlIGNvZGUgYW5kIGxlYWRzIHRvIHVuZGV0ZWN0ZWQgYW5kCj4+Pj4gaGFyZC10by1kZWJ1 ZyByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFmZmVjdCB0aGUgc3RhYmlsaXR5IG9mIHRoZSBzeXN0 ZW0gaW4KPj4+PiBwb3NzaWJseSB1bnRlc3RlZCBjb3JuZXIgY2FzZXMuCj4+Pj4KPj4+PiBWR0lD IGRlc2lnbiBwcmluY2lwbGVzCj4+Pj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+Pj4+Cj4+Pj4g IyMjIERhdGEgc3RydWN0dXJlCj4+Pj4KPj4+PiBUaGlzIFZHSUMgZGVzaWduIGlzIGJhc2VkIG9u IHRoZSBpZGVhIG9mIGhhdmluZyBvbmUgc3RydWN0dXJlIHBlciB2aXJ0dWFsCj4+Pj4gaW50ZXJy dXB0LCBwcm90ZWN0ZWQgYnkgaXRzIG93biBsb2NrLiBJbiBhZGRpdGlvbiB0aGVyZSBpcyBhIGxp c3QgcGVyIFZDUFUsCj4+Pj4gd2hpY2ggcXVldWVzIHRoZSBpbnRlcnJ1cHRzIHdoaWNoIHRoaXMg VkNQVSBzaG91bGQgY29uc2lkZXIgZm9yIGluamVjdGlvbi4KPj4+PiBPbmUgaW50ZXJydXB0IGNh biBvbmx5IGJlIG9uIG9uZSBWQ1BVIGxpc3QgYXQgYW55IGdpdmVuIHBvaW50IGluIHRpbWUuCj4+ Pj4gRm9yIHByaXZhdGUgaW50ZXJydXB0cyBhbmQgU1BJcyBhIHN0YXRpYyBhbGxvY2F0aW9uIG9m IHRoaXMgZGF0YSBzdHJ1Y3R1cmUKPj4+PiB3b3VsZCBiZSBzdWZmaWNpZW50LCBob3dldmVyIExQ SXMgKHRyaWdnZXJlZCBieSBhICh2aXJ0dWFsKSBJVFMpIGhhdmUgYSB2ZXJ5Cj4+Pj4gZHluYW1p YyBhbmQgcG9zc2libHkgdmVyeSBzcGFyc2UgYWxsb2NhdGlvbiBzY2hlbWUsIHNvIHdlIG5lZWQg dG8gZGVhbCB3aXRoCj4+Pj4gZHluYW1pYyBhbGxvY2F0aW9uIGFuZCBkZS1hbGxvY2F0aW9uIG9m IHRoaXMgc3RydWN0LiBUbyBhY2NvbW1vZGF0ZSB0aGlzCj4+Pj4gdGhlcmUgaXMgYW4gYWRkaXRp b25hbCBsaXN0IGhlYWRlciB0byBsaW5rIGFsbCBMUElzLgo+Pj4+IEFsc28gdGhlIExQSSBtYXBw aW5nIGFuZCB1bm1hcHBpbmcgY2FuIGhhcHBlbiBhc3luY2hyb25vdXNseSwgc28gd2UgbmVlZCB0 bwo+Pj4+IHByb3Blcmx5IHJlZi1jb3VudCB0aGUgc3RydWN0dXJlIChhdCBsZWFzdCBmb3IgTFBJ cyksIG90aGVyd2lzZSBzb21lIGNvZGUgcGFydHMKPj4+PiB3b3VsZCBwb3RlbnRpYWxseSBlbmQg dXAgd2l0aCByZWZlcmVuY2luZyBhbiBhbHJlYWR5IGZyZWVkIHBvaW50ZXIuCj4+Pj4KPj4+PiBU aGUgY2VudHJhbCBkYXRhIHN0cnVjdHVyZSBpcyBjYWxsZWQgYHN0cnVjdCB2Z2ljX2lycWAsIGFu ZCwgYmVzaWRlIHRoZQo+Pj4+IGV4cGVjdGVkIGludGVycnVwdCBjb25maWd1cmF0aW9uIGRhdGEs IGNvbnRhaW5zIGF0IGxlYXN0IHRoZSBsb2NrLCBhIGxpc3QKPj4+PiBoZWFkZXIgKHRvIGJlIGFi bGUgdG8gbGluayBpdCB0byBhIFZDUFUpIGFuZCBhIHJlZmNvdW50LiBBbHNvIGl0IGNvbnRhaW5z Cj4+Pj4gdGhlIGludGVycnVwdCBudW1iZXIgKHRvIGFjY29tbW9kYXRlIGZvciBub24tY29udGln dW91cyBpbnRlcnJ1cHQgYWxsb2NhdGlvbnMsCj4+Pj4gZm9yIGluc3RhbmNlIGZvciBMUElzKS4K Pj4+PiBCZXNpZGUgdGhvc2UgZXNzZW50aWFsIGVsZW1lbnRzIGl0IHByb3ZlcyB3b3J0aCB0byBz dG9yZSAoYSByZWZlcmVuY2UgdG8pIHRoZQo+Pj4+IFZDUFUgdGhpcyBJUlEgaXMgYXNzb2NpYXRl ZCB3aXRoLiBUaGlzIGFsbG93cyB0byBlYXNpbHkgZmluZCB0aGUgcmVzcGVjdGl2ZQo+Pj4+IFZD UFUgbGlzdC4KPj4+Pgo+Pj4+ICAgICBzdHJ1Y3QgdmdpY19pcnEgewo+Pj4+ICAgICAgICAgc3Bp bmxvY2tfdCBpcnFfbG9jazsgICAgICAgICAgICAvKiBQcm90ZWN0cyB0aGUgY29udGVudCBvZiB0 aGUgc3RydWN0ICovCj4+Pj4gICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxwaV9saXN0OyAgICAg IC8qIFVzZWQgdG8gbGluayBhbGwgTFBJcyB0b2dldGhlciAqLwo+Pj4+ICAgICAgICAgc3RydWN0 IGxpc3RfaGVhZCBhcF9saXN0Owo+Pj4+Cj4+Pj4gICAgICAgICBzdHJ1Y3QgdmNwdSAqdmNwdTsg ICAgICAgICAgICAgIC8qIFNHSXMgYW5kIFBQSXM6IFRoZSBWQ1BVCj4+Pj4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFNQSXMgYW5kIExQSXM6IFRoZSBWQ1BVIHdo b3NlIGFwX2xpc3QKPj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICogdGhpcyBpcyBxdWV1ZWQgb24uCj4+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqLwo+Pj4+Cj4+Pj4gICAgICAgICBzdHJ1Y3QgdmNwdSAqdGFyZ2V0X3ZjcHU7 ICAgICAgICAvKiBUaGUgVkNQVSB0aGF0IHRoaXMgaW50ZXJydXB0IHNob3VsZAo+Pj4+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYmUgc2VudCB0bywgYXMgYSBy ZXN1bHQgb2YgdGhlCj4+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKiB0YXJnZXRzIHJlZyAodjIpIG9yIHRoZQo+Pj4+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICogYWZmaW5pdHkgcmVnICh2MykuCj4+Pj4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KPj4+Pgo+Pj4+ICAgICAgICAgdTMyIGlu dGlkOyAgICAgICAgICAgICAgICAgICAgICAvKiBHdWVzdCB2aXNpYmxlIElOVElEICovCj4+Pj4g ICAgICAgICBib29sIGxpbmVfbGV2ZWw7ICAgICAgICAgICAgICAgIC8qIExldmVsIG9ubHkgKi8K Pj4+PiAgICAgICAgIGJvb2wgcGVuZGluZ19sYXRjaDsgICAgICAgICAgICAgLyogVGhlIHBlbmRp bmcgbGF0Y2ggc3RhdGUgdXNlZCB0bwo+Pj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKiBjYWxjdWxhdGUgdGhlIHBlbmRpbmcgc3RhdGUgZm9yCj4+Pj4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJvdGggbGV2ZWwgYW5kIGVkZ2Ug dHJpZ2dlcmVkIElSUXMuCj4+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqLwo+Pj4+Cj4+Pj4gICAgICAgICBib29sIGFjdGl2ZTsgICAgICAgICAgICAgICAgICAg IC8qIG5vdCB1c2VkIGZvciBMUElzICovCj4+Pj4gICAgICAgICBib29sIGVuYWJsZWQ7Cj4+Pj4g ICAgICAgICBib29sIGh3OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRpZWQgdG8gSFcgSVJR ICovCj4+Pj4gICAgICAgICBzdHJ1Y3Qga3JlZiByZWZjb3VudDsgICAgICAgICAgIC8qIFVzZWQg Zm9yIExQSXMgKi8KPj4+PiAgICAgICAgIHUzMiBod2ludGlkOyAgICAgICAgICAgICAgICAgICAg LyogSFcgSU5USUQgbnVtYmVyICovCj4+Pj4gICAgICAgICB1bmlvbiB7Cj4+Pj4gICAgICAgICAg ICAgdTggdGFyZ2V0czsgICAgICAgICAgICAgICAgICAgICAvKiBHSUN2MiB0YXJnZXQgVkNQVXMg bWFzayAqLwo+Pj4+ICAgICAgICAgICAgIHUzMiBtcGlkcjsgICAgICAgICAgICAgICAgICAgICAg LyogR0lDdjMgdGFyZ2V0IFZDUFUgKi8KPj4+PiAgICAgICAgIH07Cj4+Pj4gICAgICAgICB1OCBz b3VyY2U7ICAgICAgICAgICAgICAgICAgICAgIC8qIEdJQ3YyIFNHSXMgb25seSAqLwo+Pj4+ICAg ICAgICAgdTggcHJpb3JpdHk7Cj4+Pj4gICAgICAgICBlbnVtIHZnaWNfaXJxX2NvbmZpZyBjb25m aWc7ICAgIC8qIExldmVsIG9yIGVkZ2UgKi8KPj4+PiAgICAgfTsKPj4+Cj4+PiBUaGUgcmVmY291 bnQgYW5kIGlycV9sb2NrIGFyZSBnb29kIGlkZWFzLCBsZXQncyBoYXZlIHRoZW0uCj4+Pgo+Pj4K Pj4+PiAjIyMgVkNQVSBsaXN0IGhhbmRsaW5nCj4+Pj4KPj4+PiBJbml0aWFsbHkgYSB2aXJ0dWFs IGludGVycnVwdCBqdXN0IGxpdmVzIG9uIGl0cyBvd24uIEd1ZXN0IE1NSU8gYWNjZXNzZXMgdG8K Pj4+PiB0aGUgZGlzdHJpYnV0b3Igd2lsbCBjaGFuZ2UgdGhlIHN0YXRlIGluZm9ybWF0aW9uIGlu IHRoaXMgc3RydWN0dXJlLgo+Pj4+IFdoZW4gYW4gaW50ZXJydXB0IGlzIGFjdHVhbGx5IG1hZGUg cGVuZGluZyAoZWl0aGVyIGJ5IGFuIGFzc29jaWF0ZWQgaGFyZHdhcmUKPj4+PiBJUlEgZmlyaW5n IG9yIGJ5IGEgdmlydHVhbCBJUlEgdHJpZ2dlciksIHRoZSBgdmdpY19pcnFgIHN0cnVjdHVyZSB3 aWxsIGJlCj4+Pj4gbGlua2VkIHRvIHRoZSBjdXJyZW50IHRhcmdldCBWQ1BVLiBUaGUgYHZjcHVg IG1lbWJlciBpbiB0aGUgc3RydWN0dXJlIHdpbGwKPj4+PiBiZSBzZXQgdG8gdGhpcyBWQ1BVLiBB bnkgYWZmaW5pdHkgY2hhbmdlIGFmdGVyIHRoaXMgcG9pbnQgd2lsbCBub3QgYWZmZWN0Cj4+Pj4g dGhlIGN1cnJlbnQgdGFyZ2V0IFZDUFUgYW55bW9yZSwgaXQganVzdCB1cGRhdGVzIHRoZSBgdGFy Z2V0X3ZwdWAgZmllbGQgaW4KPj4+PiB0aGUgc3RydWN0dXJlLCB3aGljaCB3aWxsIGJlIGNvbnNp ZGVyZWQgb24gdGhlIG5leHQgaW5qZWN0aW9uLgo+Pj4+IFRoaXMgcGVyLVZDUFUgbGlzdCBpcyBj YWxsZWQgdGhlIGBhcF9saXN0YCwgc2luY2UgaXQgaG9sZHMgaW50ZXJydXB0cyB3aGljaAo+Pj4+ IGFyZSBpbiBhIHBlbmRpbmcgYW5kL29yIGFjdGl2ZSBzdGF0ZS4KPj4+Cj4+PiBUaGUgdHdvIHZj cHUgbGlzdHMgc291bmQgbGlrZSBhIGdvb2QgaWRlYSB0b28sIGFuZCBDaHJpc3RvZmZlcidzCj4+ PiBleHBsYW5hdGlvbiBoZWxwZWQuIEl0IGlzIGFjdHVhbGx5IHNpbWlsYXIgdG8gd2hhdCB3ZSBk byBpbiBYZW4gYWxyZWFkeS4KPj4+IEkgZ3Vlc3MgYSB2Z2ljIGlzIGFsd2F5cyBhIHZnaWMgOi0p Cj4+Cj4+IE1tbWgsIEkgZG9uJ3QgZ2V0IHdoZXJlIHlvdSBzZWUgdHdvIFZDUFUgKmxpc3RzKiBo ZXJlLiBUaGVyZSBhcmUgdHdvCj4+IFZDUFUgKmZpZWxkcyogaW4gdGhlIHN0cnVjdHVyZSwgYnV0 IHRoZXkgYXJlIGNvbXBsZXRlbHkgZGlmZmVyZW50IGZyb20KPj4gdGhlIGxyX3BlbmRpbmcgYW5k IGxyX3F1ZXVlIGxpc3RzIGluIFhlbi4KPj4gSW4gZmFjdCBJIGJlbGlldmUgdGhhdCB0aGVzZSAq dHdvKiBsaXN0cyBpbiBYZW4gYXJlIG9uZSBvZiB0aGUgbWFqb3IKPj4gcGFpbiBwb2ludHMgaW4g dGhlIGN1cnJlbnQgVkdJQy4KPiAKPiBPSwo+IAo+IAo+Pj4gV2hhdCBoYXBwZW5zIHdoZW4gdGhl IGlycSBpcyBtaWdyYXRlZCB3aGlsZSBzdGlsbCBpbiBhbiBMUiBvbiBhbm90aGVyCj4+PiBwY3B1 PyBXaGVuL0hvdyBpcyB0aGUgcGh5c2ljYWwgYWZmaW5pdHkgY2hhbmdlZD8KPj4KPj4gUGVyIHRo ZSBhcmNoaXRlY3R1cmUgdGhlcmUgaXMgbm90aGluZyBsaWtlIGFuIElSUSAibWlncmF0aW9uIi4g VGhlcmUgaXMKPj4gdGhlIENQVSBhZmZpbml0eSwgd2hpY2ggZGV0ZXJtaW5lcyB0byB3aGljaCBj b3JlIHRoaXMgSVJRIGlzIGZvcndhcmRlZAo+PiAqd2hlbiBpdCBiZWNvbWVzIHBlbmRpbmcqLiBP bmNlIGl0IGhhcyBiZWVuIGFjdGl2YXRlZCwgaXQgc3RheXMgYXQgdGhpcwo+PiBjb3JlLCBldmVu IGlmIHlvdSBjaGFuZ2UgdGhlIElUQVJHRVRTUiBvciBJUk9VVEVSIHJlZ2lzdGVyIGFmdGVyd2Fy ZHMuCj4+IFRoaXMgaXMgYSBiZW5pZ24gcmFjZSwgeW91IGp1c3QgY2FtZSB0b28gbGF0ZSB0byBj aGFuZ2UgdGhlIGFmZmluaXR5Lgo+Pgo+PiBBbmQgYXQgdGhlIG1vbWVudCB3ZSBkb24ndCBzeW5j aHJvbml6ZSB0aGUgcGh5c2ljYWwgYWZmaW5pdHksIHNpbXBseQo+PiBiZWNhdXNlIG1vc3QgSVJR cyBpbiBLVk0gd29ybGQgd2VyZSB2aXJ0dWFsIHNvIGZhci4gTm93IHRoaXMgaXMgZ29pbmcgdG8K Pj4gY2hhbmdlLCBzbyBJIGd1ZXNzIHdlIGhhdmUgdG8gdGFrZSBhIGxvb2sgYXQgdGhpcyBhdCBz b21lIHBvaW50LiBCdXQgSQo+PiBjb25zaWRlciB0aGlzIGFuIG9wdGltaXphdGlvbiwgYW5kIHdv dWxkIHByZWZlciBjb3JyZWN0bmVzcyBhbmQKPj4gc3RhYmlsaXR5IG92ZXIgcGVyZm9ybWFuY2Uu Cj4gCj4gVGhpcyBmZWF0dXJlIGlzIGEga2V5IGVuYWJsZXIgZm9yIFhlbiBpbiBlbWJlZGRlZCwg aXQgaXMgY2VydGFpbmx5IGEKPiBibG9ja2VyLiBJdCBuZWVkcyB0byBiZSBwYXJ0IG9mIHRoZSBk ZXNpZ24gZG9jLgoKT0ssIGNhbiBkbyB0aGlzLgoKPj4+IFdoYXQgaGFwcGVucyB3aGVuIGEgbmV3 IGlycSBpcyBzdXBwb3NlZCB0byBiZSBpbmplY3RlZCB3aGVuIHRhcmdldF92Y3B1IGlzCj4+PiBh bHJlYWR5IHNldD8gRG9lcyB0YXJnZXRfdmNwdSBzaW1wbHkgZ2V0IG92ZXJ3cml0dGVuPwo+Pgo+ PiB0YXJnZXRfdmNwdSBpcyBzaW1wbHkgYSBjb25maWd1cmF0aW9uIHN0b3JhZ2UuIEFueW9uZSBj YW4gdXBkYXRlIHRoaXMKPj4gZmllbGQgYXQgYW55IHRpbWUsIHdpdGhvdXQgYW55IHNpZGUgZWZm ZWN0cy4KPj4gV2hlbiBhbiBJUlEgaXMgZ29pbmcgdG8gYmUgaW5qZWN0ZWQsIHRoZSBjdXJyZW50 IHZhbHVlIG9mIHRhcmdldF92Y3B1IGlzCj4+IHdyaXR0ZW4gKm9uY2UqIHRvIHRoZSAidmNwdSIg ZmllbGQsIHdoaWNoIGZyb20gbm93IG9uIGRldGVybWluZXMgdGhlCj4+IHJlc3BvbnNpYmxlIFZD UFUgZm9yIHRoZSB3aG9sZSBpbnRlcnJ1cHQgbGlmZSBjeWNsZSAocXVldWVpbmcgb24gbGlzdHMs Cj4+IHB1dHRpbmcgaW50byBMUnMsIC4uLikuIFRoaXMgZmllbGQgY2Fubm90IGNoYW5nZSBhbnlt b3JlIHVudGlsIHRoZSBJUlEKPj4gaXMgRU9JZWQuCj4gCj4gT0ssIEkgdW5kZXJzdGFuZC4gU291 bmRzIGdvb2QuCj4gCj4gCj4+PiBXaGF0IGhhcHBlbnMgd2hlbiBhIHZjcHUgaXMgbWlncmF0ZWQg ZnJvbSBwY3B1MSB0byBwY3B1Mj8KPj4KPj4gTm90aGluZyBzcGVjdGFjdWxhciwgSSBndWVzcy4g V2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgcGh5c2ljYWwgSVJRCj4+IGFmZmluaXR5LiBBbmQgc2lu Y2Ugd2UgY2xlYXIgYWxsIExScyBvbiBleGl0IGFuZCAocmUtKXBvcHVsYXRlIHRoZW0gb24KPj4g ZW50cnksIGRvaW5nIHRoaXMgb24gdHdvIGRpZmZlcmVudCBDUFVzIGlzIGEgdG90YWwgbm8tYnJh aW5lci4KPiAKPiBXZSBzaG91bGQgY2FyZSBhYm91dCBwaHlzaWNhbCBJUlEgYWZmaW5pdHksIGFu ZCBpdCBzaG91bGQgYmUgcGFydCBvZgo+IHRoaXMgZGVzaWduIGRvYy4gVGhpcyB3b3VsZCBiZSBh IHJlZ3Jlc3Npb24uCgpVbmRlcnN0b29kLgoKPj4+PiAjIyMgVmlydHVhbCBJUlEgcmVmZXJlbmNl cwo+Pj4+Cj4+Pj4gVGhlcmUgaXMgYSBmdW5jdGlvbiBgdmdpY19nZXRfaXJxKClgIHdoaWNoIHJl dHVybnMgYSByZWZlcmVuY2UgdG8gYSB2aXJ0dWFsIElSUQo+Pj4+IGdpdmVuIGl0cyBudW1iZXIu Cj4+Pj4gRm9yIHByaXZhdGUgSVJRcyBhbmQgU1BJcyBpdCBpcyBleHBlY3RlZCB0aGF0IHRoaXMg anVzdCBpbmRleGVzIGEgc3RhdGljIGFycmF5Lgo+Pj4+IEZvciBMUElzICh3aGljaCBhcmUgZHlu YW1pY2FsbHkgYWxsb2NhdGVkIGF0IHJ1biB0aW1lKSB0aGlzIGlzIGV4cGVjdGVkIHRvCj4+Pj4g aXRlcmF0ZSBhIGRhdGEgc3RydWN0dXJlIChsaWtlIGEgbGlua2VkIGxpc3QpIHRvIGZpbmQgdGhl IHJpZ2h0IHN0cnVjdHVyZS4KPj4+PiBJbiBhbnkgY2FzZSBhIGNhbGwgdG8gYHZnaWNfZ2V0X2ly cWAgd2lsbCBpbmNyZWFzZSBhIHJlZmNvdW50LCB3aGljaCB3aWxsCj4+Pj4gcHJldmVudCBMUElz IGZyb20gYmVpbmcgZGUtYWxsb2NhdGVkIHdoaWxlIGFub3RoZXIgcGFydCBvZiB0aGUgVkdJQyBp cyBzdGlsbAo+Pj4+IGhvbGRpbmcgYSByZWZlcmVuY2UuIFRodXMgYW55IGNhbGxlciB0byBgdmdp Y19nZXRfaXJxYCBzaGFsbCBjYWxsCj4+Pj4gYHZnaWNfcHV0X2lycSgpYCBhZnRlciBpdCBpcyBk b25lIHdpdGggaGFuZGxpbmcgdGhpcyBpbnRlcnJ1cHQuCj4+Pj4gQW4gZXhjZXB0aW9uIHdvdWxk IGJlIGlmIHRoZSB2aXJ0dWFsIElSUSBpcyBldmVudHVhbGx5IGluamVjdGVkIGludG8gYSBWQ1BV LiBJbgo+Pj4+IHRoaXMgY2FzZSB0aGUgVkNQVSBob2xkcyB0aGF0IHJlZmVyZW5jZSBhbmQgaXQg aXMga2VwdCBhcyBsb25nIGFzIHRoZSBndWVzdAo+Pj4+IHNlZXMgdGhpcyB2aXJ0dWFsIElSUS4g VGhlIHJlZmNvdW50IHdvdWxkIG9ubHkgYmUgZGVjcmVhc2VkIHVwb24gdGhlIElSUSBoYXZpbmcK Pj4+PiBiZWVuIEVPSWVkIGJ5IHRoZSBndWVzdCBhbmQgaXQgaGF2aW5nIGJlZW4gcmVtb3ZlZCBm cm9tIHRoZSBWQ1BVIGxpc3QuCj4+Pgo+Pj4gSSB1bmRlcnN0YW5kIHRoZSBpZGVhIGJlaGluZCBh IHJlZmNvdW50IGFuZCBzb3VuZHMgbGlrZSBhIGdvb2QgdGhpbmcgdG8KPj4+IGhhdmUuCj4+Pgo+ Pj4gTGV0IG1lIGFzayB5b3UgYSBjb3VwbGUgb2YgcXVlc3Rpb25zLiBIb3cgZG9lcyBpdCBoZWxw IHdpdGggdGhlIGlzc3VlCj4+PiB0aGF0IGFuIExQSSBjb3VsZCBiZSBkaXNjYXJkZWQgYW5kIHJl bWFwcGVkIChNQVBUSSkgZnJvbSBhbm90aGVyCj4+PiBwY3B1IHdoaWxlIGl0IGNvdWxkIHN0aWxs IGJlIGluIGFuIExSPwo+Pgo+PiBPbiBESVNDQVJEIHdlIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0 IG9mIG1hcHBlZCBMUElzLCBidXQgZG9uJ3QgZnJlZSB0aGUKPj4gc3RydWN0dXJlLiBTbyBhbnkg dmdpY19nZXRfbHBpKGxwaV9ucikgd29uJ3QgZmluZCBpdCBhbnltb3JlLiBCdXQgc2luY2UKPj4g dGhlIGludGVycnVwdCBpcyBpbiBhbiBMUiwgdGhlIFZDUFUncyBhcF9saXN0IHN0aWxsIHJlZmVy ZW5jZXMgdGhlCj4+IHZnaWNfaXJxIHN0cnVjdHVyZSwgc28gd2UgY2FuIGRvIHRoZSB3aG9sZSBJ UlEgbGlmZSBjeWNsZSBtYW5hZ2VtZW50Cj4+IGp1c3QgYXMgbm9ybWFsIChiZWNhdXNlIGJlaW5n IGEgbGlzdCBtZW1iZXIgaXMgd2hhdCBjb3VudHMgd2hlbiBpdCBjb21lcwo+PiB0byBhICJsaWZl IiBpbnRlcnJ1cHQpLgo+PiBPbmNlIHRoaXMgTFBJIGlzIEVPSWVkLCB3ZSByZW1vdmUgaXQgZnJv bSB0aGUgVkNQVSBsaXN0LCB3aGljaCBkZWNyZWFzZXMKPj4gdGhlIHJlZmNvdW50IGFuZCBtb3N0 IHByb2JhYmx5IHdpbGwgZnJlZSB0aGUgbWVtb3J5LCBzaW5jZSB0aGUgdmFsdWUgaGFzCj4+IGJl Y29tZSB6ZXJvIGJ5IHRoZW4uIE5vcm1hbGx5LCB3aXRob3V0IHVubWFwcGluZyBpdCBiZWZvcmUs IHRoZQo+PiByZWZlcmVuY2UgaGVsZCBieSB0aGUgSVRTIGxpc3Qgd291bGQgbWFrZSBzdXJlIHRo ZSByZWZjb3VudCBzdGF5cwo+PiBncmVhdGVyIHRoYW4gMC4KPj4KPj4gTm93IHdoZW4gdGhlcmUg aXMgYSBNQVBUSSB0byB0aGUgc2FtZSBMUEkgbnVtYmVyIG1lYW53aGlsZSwgdGhpcyB3aWxsCj4+ IGFsbG9jYXRlIGEgbmV3IHN0cnVjdHVyZSAodGhpcyBpcyBhIG5ldyBpbnRlcnJ1cHQhKSBhbmQg ZW50ZXJzIHRoaXMgaW50bwo+PiB0aGUgSVRTIGxpc3QuIFNvIGFueW9uZSBhc2tpbmcgZm9yIHRo aXMgbmV3IExQSSAqbnVtYmVyKiB3aWxsIGdldCB0aGUKPj4gcmVmZXJlbmNlIHRvIHRoZSBuZXcg SVJRLiBUaGluazogZGVsZXRpbmcgYSBmaWxlIGFuZCBjcmVhdGluZyBhIG5ldyBvbmUKPj4gd2l0 aCB0aGUgc2FtZSBuYW1lIG9uIGEgVU5JWCBzeXN0ZW0sIGFueSBvbGQgdXNlcnMgb2YgYW4gYWxy ZWFkeSBvcGVuZWQKPj4gZmlsZSBkZXNjcmlwdG9yIHdpbGwgc3RpbGwgdXNlIHRoZSBkZWxldGVk IGZpbGUsIGJ1dCBhbiBvcGVuKCkgd2lsbAo+PiByZXR1cm4gYSBoYW5kbGUgdG8gdGhlIG5ldyBm aWxlLgo+IAo+IFRoaXMgbmVlZHMgdG8gYmUgY2FwdHVyZWQgaW4gdGhlIGRvYy4KPiAKPiBBcmUg dmdpY19pcnEgc3RydWN0IGR5bmFtaWNhbGx5IGFsbG9jYXRlZD8KPiBJcyB0aGVyZSBhIHJldXRp bGl6YXRpb24KPiBzY2hlbWUgdG8gYXZvaWQgYSBtYWxpY2lvdXMgZ3Vlc3QgZnJvbSBzcGFtbWlu ZyBYZW4gd2l0aCBMUEkgcmVxdWVzdHM/Cj4gTXVsdGlwbGUgc3RydWN0IHZnaWNfaXJxIGZvciB0 aGUgc2FtZSBMUEkgd291bGQgY2F1c2UgZXZlbiBtb3JlIG1lbW9yeQo+IGFsbG9jYXRpb25zLgoK SW50ZXJlc3RpbmcgcG9pbnQuIEkgbmVlZCB0byB0aGluayBhYm91dCBhIG5lYXQgc29sdXRpb24u IEZvciBub3JtYWwKY2FzZXMgSSB0aGluayB3ZSBtaWdodCB3YW50IHRvIHN0aWNrIHdpdGggdGhl IGN1cnJlbnQgWGVuIHNjaGVtZSBvZgphbGxvY2F0aW5nIHRoZSB2SVJRIHN0cnVjdHMgd2hlbiB3 ZSBtYXAgYSBkZXZpY2UsdGhlbiBoYW5kaW5nIG91dApwb2ludGVycyB0byBzb21lIGFycmF5IG1l bWJlciBvbiB2Z2ljX2FkZF9scGkoKS4gTWF5YmUgd2UgcmUtcG9pbnRlciB0aGUKZXhpc3Rpbmcg dklSUSB0byBwb2ludCB0byBzb21lIG90aGVyIGxvY2F0aW9uLCBhbmQgdXNlIHRoZSBkZXZpY2UK cHJvdmlkZWQgc3RvcmFnZQoKPiBJZiBib3RoIHRoZSBvbGQgYW5kIHRoZSBuZXcgdmdpY19pcnEg c3RydWN0IGVuZCB1cCBiZWluZyB3cml0dGVuIHRvIExScywKPiB3b3VsZG4ndCBpdCBjYXVzZSBw cm9ibGVtcz8KCkNhbid0IGhhcHBlbi4gRElTQ0FSRCByZW1vdmVzIHRoZSBwZW5kaW5nIHN0YXRl LiBTaW5jZSBMUElzIGhhdmUgbm8KYWN0aXZlIHN0YXRlLCB1cG9uIHRoZSBWQ1BVIGV4aXRpbmcg dGhpcyBMUEkncyBsaWZlIGN5Y2xlIGhhcyBmaW5pc2hlZC4KU28gd2UganVzdCBrZWVwIGl0IGFy b3VuZCBhcyBsb25nIGFzIGl0J3Mgc3RpbGwgaW4gYSBWQ1BVLCBidXQgaXQKdmFuaXNoZXMgYXMg c29vbiBhcyB0aGlzIFZDUFUgZXhpdHMuCgo+Pj4gV2hhdCBoYXBwZW5zIGlmIHRoZSBNQVBUSSBp cwo+Pj4gaXNzdWVkIGJlZm9yZSBhbmQgd2hhdCBoYXBwZW5zIGlmIGl0IGlzIGlzc2VkIGFmdGVy IHRoZSBpcnEgaGFzIGJlZW4KPj4+IEVPSWQgYW5kIGNsZWFyZWQgZnJvbSB0aGUgTFIgYW5kIGFw X2xpc3Q/Cj4+Cj4+IEkgYmVsaWV2ZSB0aGUgYWJvdmUgZGVzY3JpcHRpb24gc2hvdWxkIGFuc3dl ciB0aGlzLiBJZiBub3QsIHBsZWFzZSBsZXQKPj4gbWUga25vdy4KPj4KPj4+IEkgYW0gcmVmZXJy aW5nIHRvIHRoZSBjYXNlIHRoYXQgd2UgY3VycmVudGx5IGhhbmRsaW5nIHdpdGggdGhlCj4+PiBH SUNfSVJRX0dVRVNUX1BSSVNUSU5FX0xQSSBmbGFnIGluIFhlbi4KPj4KPj4gLi4uIHdoaWNoIHdh cyBhIGhhY2sgb2YgbWluZSB0byB3b3JrIGFyb3VuZCB0aGUgbWlzc2luZyByZWZjb3VudCA7LSkK PiAKPiBZZXMsIHlvdSBjYW4gc2F5IHRoYXQgOikKPiAKPiAKPj4+PiAjIyMgTG9ja2luZwo+Pj4+ Cj4+Pj4gVG8ga2VlcCB0aGUgYHZnaWNfaXJxYCBzdHJ1Y3R1cmUgY29uc2lzdGVudCBhbmQgdG8g YXZvaWQgcmFjZXMgYmV0d2Vlbgo+Pj4+IGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgVkdJQywgbG9j a2luZyBpcyBlc3NlbnRpYWwgd2hlbmV2ZXIgYWNjZXNzaW5nIGEgbWVtYmVyCj4+Pj4gb2YgdGhp cyBzdHJ1Y3R1cmUuIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhpcyBsb2NrIGlzIGFsbW9zdCBuZXZl ciBjb250ZW5kZWQsCj4+Pj4gYWxzbyBoZWxkIG9ubHkgZm9yIGJyaWVmIHBlcmlvZHMgb2YgdGlt ZSwgc28gdGhpcyBpcyBjb25zaWRlcmVkIGNoZWFwLgo+Pj4+IFRvIGtlZXAgdGhlIGNvZGUgY2xl YW4gYW5kIGF2b2lkIG5hc3R5IGNvcm5lciBjYXNlcywgdGhlcmUgYXJlIG5vIHRyaWNrcyBvbgo+ Pj4+IHRyeWluZyB0byBiZSBsb2NrbGVzcyBoZXJlLgo+Pj4+IElmIGZvciBhbnkgcmVhc29uIHRo ZSBjb2RlIG5lZWRzIHRvIGhvbGQgdGhlIGxvY2tzIGZvciB0d28gdmlydHVhbCBJUlFzLCB0aGUK Pj4+PiBvbmUgd2l0aCB0aGUgbG93ZXIgSVJRIG51bWJlciBpcyB0byBiZSB0YWtlbiBmaXJzdCwg dG8gYXZvaWQgZGVhZGxvY2tzLgo+Pj4+Cj4+Pj4gQW5vdGhlciBsb2NrIHRvIGNvbnNpZGVyIGlz IHRoZSBWQ1BVIGxvY2ssIHdoaWNoIG9uIHRoZSBmaXJzdCBnbGFuY2UgcHJvdGVjdHMKPj4+PiB0 aGUgdmlydHVhbCBDUFUncyBsaXN0IHN0cnVjdHVyZSwgYnV0IGFsc28gc3luY2hyb25pc2VzIGFk ZGl0aW9ucyBhbmQgcmVtb3ZhbHMKPj4+PiBvZiBJUlFzIGZyb20gYSBWQ1BVLiBUbyBhZGQgYW4g SVJRIHRvIGEgbGlzdCwgYm90aCB0aGUgVkNQVSBhbmQgdGhlIHBlci1JUlEKPj4+PiBsb2NrIG5l ZWQgdG8gYmUgaGVsZC4gVG8gYXZvaWQgZGVhZGxvY2tzLCB0aGVyZSBpcyBhIHN0cmljdCBsb2Nr aW5nIG9yZGVyOgo+Pj4+PiBUaGUgVkNQVSBsb2NrIG5lZWRzIHRvIGJlIHRha2VuIGZpcnN0LCB0 aGUgcGVyLUlSUSBsb2NrIGFmdGVyIHRoaXMuCj4+Pgo+Pj4gU291bmRzIGdvb2QgKGl0IGlzIGJh c2ljYWxseSB3aGF0IEkgc3VnZ2VzdGVkIHRvIGRvIGluIHRoZSBwYXN0KS4KPj4+Cj4+Pgo+Pj4+ IFNvbWUgb3BlcmF0aW9ucyAobGlrZSBtaWdyYXRpbmcgSVJRcyBiZXR3ZWVuIHR3byBWQ1BVcykg cmVxdWlyZSB0d28gVkNQVQo+Pj4+IGxvY2tzIHRvIGJlIGhlbGQsIGluIHRoaXMgY2FzZSB0aGUg bG9jayBmb3IgdGhlIFZDUFUgd2l0aCB0aGUgc21hbGxlciBWQ1BVIElECj4+Pj4gaXMgdG8gYmUg dGFrZW4gZmlyc3QuCj4+Pj4KPj4+PiBUaGVyZSBhcmUgb2NjYXNpb25zIHdoZXJlIHRoZSBsb2Nr aW5nIG9yZGVyIChWQ1BVIGZpcnN0KSBpcyBoYXJkIHRvIG9ic2VydmUsCj4+Pj4gYmVjYXVzZSB0 aGUgcGVyLUlSUSBsb2NrIGlzIGFscmVhZHkgaGVsZCwgYnV0IHRoaXMgSVJRIG5lZWRzIHRvIGdv IG9uIGEgVkNQVQo+Pj4+IGxpc3QuIEluIHRoaXMgY2FzZSB0aGUgSVJRIGxvY2sgbmVlZHMgdG8g YmUgZHJvcHBlZCwgdGhlIHJlc3BlY3RpdmUgVkNQVQo+Pj4+IGxvY2sgc2hvdWxkIGJlIHRha2Vu LCB0aGVuIHRoZSBwZXItSVJRIGxvY2sgbmVlZHMgdG8gYmUgcmUtdGFrZW4uCj4+Pj4gQWZ0ZXIg Ym90aCB0aGUgbG9ja3MgYXJlIGhlbGQsIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGNvbmRpdGlv bnMgd2hpY2gKPj4+PiBvcmlnaW5hbGx5IG1hbmRhdGVkIHRoZSBsaXN0IGFkZGl0aW9uIChvciBy ZW1vdmFsKSBhcmUgc3RpbGwgdHJ1ZS4gVGhpcyBpcwo+Pj4+IG5lZWRlZCBiZWNhdXNlIHRoZSBJ UlEgbG9jayBjb3VsZCBoYXZlIGJlZW4gdGFrZW4gYnkgYW5vdGhlciBlbnRpdHkgbWVhbndoaWxl Cj4+Pj4gYW5kIHRoZSBzdGF0ZSBvZiB0aGlzIGludGVycnVwdCBjb3VsZCBoYXZlIGJlZW4gY2hh bmdlZC4gRXhhbXBsZXMgYXJlIGlmIHRoZQo+Pj4+IGludGVycnVwdCBpcyBubyBsb25nZXIgcGVu ZGluZywgZ290IGRpc2FibGVkIG9yIGNoYW5nZWQgdGhlIENQVSBhZmZpbml0eS4KPj4+PiBTb21l IG9mIHRob3NlIGNoYW5nZXMgbWlnaHQgcmVuZGVyIHRvIGN1cnJlbnQgYWN0aW9uIG9ic29sZXRl IChubyBsb25nZXIKPj4+PiBwZW5kaW5nKSwgb3RoZXIgd2lsbCBsZWFkIHRvIGEgcmV0cnkgb2Yg dGhlIHJlLWxvY2tpbmcgc2NoZW1lIGRlc2NyaWJlZCBhYm92ZS4KPj4+PiBUaGlzIHJlLWxvY2tp bmcgc2NoZW1lIHNoYWxsIGJlIGltcGxlbWVudGVkIGluIGEgd2VsbC1kb2N1bWVudGVkIGZ1bmN0 aW9uLgo+Pj4+Cj4+Pj4gIyMjIExldmVsIGFuZCBlZGdlIHRyaWdnZXJlZCBpbnRlcnJ1cHRzCj4+ Pj4KPj4+PiBUaGUgR0lDIGtub3dzIGFib3V0IHR3byBraW5kcyBvZiBzaWduYWxsaW5nIGludGVy cnVwdHM6Cj4+Pj4KPj4+PiAtIEVkZ2UgdHJpZ2dlcmVkIGludGVycnVwdHMgYXJlIHRyaWdnZXJl ZCBieSBhIGRldmljZSBvbmNlLCB0aGVpciBsaWZlIGN5Y2xlCj4+Pj4gZW5kcyB3aGVuIHRoZSBn dWVzdCBoYXMgRU9JZWQgdGhlbSwgYXQgd2hpY2ggcG9pbnQgd2UgcmVtb3ZlIHRoZSBwZW5kaW5n IHN0YXRlLAo+Pj4+IGNsZWFyIHRoZSBMUiBhbmQgcmV0dXJuIHRoZSBgdmdpY19pcnFgIHN0cnVj dHVyZSB0byBhIHF1aWVzY2VudCBzdGF0ZS4KPj4+Cj4+PiBJIGFzc3VtZSB0aGF0ICJhdCB3aGlj aCBwb2ludCIgbWVhbnMgYXQgdGhlIG5leHQgdHJhcCBpbnRvIHRoZQo+Pj4gaHlwZXJ2aXNvcj8g V2UgYXJlIG5vdCB0cmFwcGluZyBvbiBwdXJwb3NlIGd1ZXN0IEVPSXMsIGFyZSB3ZT8KPj4KPj4g Q29ycmVjdC4gVGhpcyBtZWFucyBvdXIgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBub3QgdXAtdG8tZGF0 ZSBhbGwgb2YgdGhlCj4+IGl0bWUuIEJ1dCBJIGJlbGlldmUgdGhpcyBvbmx5IG1hdHRlcnMgZm9y IHRoZSBJU1BFTkRJTkdSL0lTQUNUSVZFUgo+PiByZWdpc3RlciBhY2Nlc3Nlcywgd2hpY2ggYXJl IGhhbmRsZWQgaW4gYSBzcGVjaWFsIHdheSB0byBmaXggdGhpcy4KPj4gQW5kIHRoaXMgaXMgbm90 aGluZyBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYywgYnV0IGEgZ2VuZXJhbCBmZWF0dXJlIG9mCj4+ IHRoZSBHSUMgZW11bGF0aW9uIGFyY2hpdGVjdHVyZS4KPiAKPiBSaWdodC4gWGVuIHN0cnVjdHMg dG9kYXkgYXJlIGFsc28gbm90IHVwLXRvLWRhdGUgYWxsIHRoZSB0aW1lIGZvciB0aGUKPiBzYW1l IHJlYXNvbiBJIGd1ZXNzLgo+IAo+IAo+Pj4gSXMgaXQgcG9zc2libGUgdG8gaGF2ZSBhY3RpdmUg YW5kIHBlbmRpbmcgaXJxcyBpbiBhbiBMUj8gSG93IGlzIHRoYXQKPj4+IGhhbmRsZWQ/Cj4+Cj4+ IFN1cmUuIFRoaXMgaGFwcGVucyB3aGVuIHRoZXJlIGlzIGEgbmV3IGludGVycnVwdCB0cmlnZ2Vy ZWQgd2hpbGUgdGhlIG9sZAo+PiBvbmUgaGFzIGJlZW4gYWN0aXZhdGVkLCBidXQgbm90IEVPSWVk ICh5ZXQpLgo+PiBUaGlzIGFjdHVhbGx5IGhhcHBlbnMgaW4gdGhlIGZvbGxvd2luZyBzY2VuYXJp bzoKPj4gLSBJUlEgdHJpZ2dlcnMgYW5kIGdldHMgaW5qZWN0ZWQgYXMgInBlbmRpbmciLgo+PiAt IEd1ZXN0IGFja3MgdklSUSBieSByZWFkaW5nIHZpcnR1YWwgSUNDX0lBUiwgdGhlIExSIHN0YXRl IGNoYW5nZXMgZnJvbQo+PiBwZW5kaW5nIHRvIGFjdGl2ZS4KPj4gLSBEdXJpbmcgdGhlIGZ1cnRo ZXIgaW50ZXJydXB0IGhhbmRsaW5nIHRoZSBndWVzdCB0cmlnZ2VycyBhbiBNTUlPIGZhdWx0Cj4+ IChiZWNhdXNlIGl0IHdhbnRzIHRvIHJlYWQgZGF0YSBmcm9tIHRoZSBkZXZpY2Ugb3IgZXhwbGlj aXRseSBsb3dlcnMgdGhlCj4+IElSUSBsaW5lIHdpdGggYSByZWdpc3RlciBhY2Nlc3MpLiBUaGUg Q1BVIGV4aXN0cywgYW5kIHRoZSAiYWN0aXZlLW9ubHkiCj4+IHN0YXRlIGJlY29tZXMgdmlzaWJs ZSB0byB0aGUgaHlwZXJ2aXNvci4KPj4gLSBUaGUgSFYgc3luYyBiYWNrIHRoZSBMUiB0byBvdXIg c3RydWN0LCBjbGVhcmluZyB0aGUgcGVuZGluZyBsYXRjaCwgYnV0Cj4+IHNldHRpbmcgdGhlIGFj dGl2ZSBmaWVsZC4gVGhlIHN0cnVjdCBpcyBpbiBzeW5jIG5vdy4KPj4gLSBGb3Igd2hhdGV2ZXIg cmVhc29uIHRoZSBpbnRlcnJ1cHQgZmlyZXMgKmFnYWluKiB3aGlsZSB0aGUgSFYgaXMgc3RpbGwK Pj4gaW4gY2hhcmdlLiBUaGlzIHNldHMgdGhlIHBlbmRpbmcgc3RhdGUgaW4gb3VyIHN0cnVjdC4K Pj4gLSBVcG9uIGd1ZXN0IGVudHJ5IHdlIHN5bmMgYm90aCB0aGUgYWN0aXZlIGFuZCBwZW5kaW5n IGJpdCB0byB0aGUgTFIsCj4+IG1ha2luZyBpdCBib3RoIGFjdGl2ZSAqYW5kKiBwZW5kaW5nLgo+ PiAtIFRoZSBndWVzdCdzIElSUSBoYW5kbGVyIGNvbnRpbnVlcyB0byBoYW5kbGUgdGhlIElSUSwg dGhlIGFjdGl2ZSBiaXQKPj4gInNoYWRvd3MiIHRoZSBwZW5kaW5nIGNvbmRpdGlvbiBmb3Igbm93 LiBFdmVudHVhbGx5ICB0aGUgaGFuZGxlciByZXRpcmVzCj4+IHRoZSBJUlEgYnkgRU9JaW5nIGl0 LCBkcm9wcGluZyB0aGUgYWN0aXZlIHN0YXRlIChpbiB0aGUgTFIpLgo+PiAtIE5vdyBpbW1lZGlh dGVseSBhZnRlciB0aGlzIGRyb3AgdGhlIHZpcnR1YWwgSVJRIGlzIGZpcmluZyBhZ2Fpbiwgc2lu Y2UKPj4gaXQgaXMgcGVuZGluZywgYnV0IG5vdCBibG9ja2VkIGJ5IHRoZSBhY3RpdmUgc3RhdGUg YW55bW9yZS4KPj4gLSBUaGUgZ3Vlc3QncyBJUlEgaGFuZGxlciBpcyBpbnZva2VkIGFnYWluIGFu ZCBoYW5kbGVzIHRoaXMgc2Vjb25kIElSUQo+PiBhcyBub3JtYWwuCj4+Cj4+IERvZXMgdGhhdCBt YWtlIHNlbnNlPwo+PiBUaGlzIGlzIGEgYml0IHNpbXBsaWZpZWQgZGVzY3JpcHRpb24gZm9yIHRo ZSBzYWtlIG9mIGNsYXJpdHksIGFzIHRoZXJlCj4+IGFyZSBjb3JuZXIgY2FzZXMgd2l0aCBwcmlv cml0eSBkcm9wcywgZm9yIGluc3RhbmNlLgo+IAo+IE9LCj4gCj4gCj4+Pj4gLSBMZXZlbCB0cmln Z2VyZWQgaW50ZXJydXB0cyBhcmUgdHJpZ2dlcmVkIHdoZW4gYSBkZXZpY2UgcmFpc2VzIGl0cyBp bnRlcnJ1cHQKPj4+PiBsaW5lLCB0aGV5IHN0YXkgcGVuZGluZyBhcyBsb25nIGFzIHRoaXMgbGlu ZSBpcyBoZWxkIGhpZ2guIEF0IHNvbWUgcG9pbnQgdGhlCj4+Pj4gZHJpdmVyIGluIHRoZSBndWVz dCBpcyBleHBlY3RlZCB0byBwcm9ncmFtIHRoZSBkZXZpY2UgdG8gZXhwbGljaXRseSBvcgo+Pj4+ IGltcGxpY2l0bHkgbG93ZXIgdGhpcyBpbnRlcnJ1cHQgbGluZS4gVGhhdCBtZWFucyB0aGF0IHdl IGhhdmUgdG8gc3RvcmUgdGhlCj4+Pj4gc3RhdGUgb2YgdGhlIHZpcnR1YWwgaW50ZXJydXB0IGxp bmUsIHdoaWNoIGlzIG9ubHkgY29udHJvbGxlZCBieSB0aGUgKHZpcnR1YWwpCj4+Pj4gZGV2aWNl LiBUaGlzIGlzIGRvbmUgaW4gdGhlIGBsaW5lX2xldmVsYCBtZW1iZXIgb2YgYHN0cnVjdCB2Z2lj X2lycWAuCj4+Pj4KPj4+PiBUbyBhc3NlcnQgdGhlIGludGVycnVwdCBjb25kaXRpb24sIGEgKHZp cnR1YWwpIGRldmljZSBjYWxscyBhIGZ1bmN0aW9uIGV4cG9ydGVkCj4+Pj4gYnkgdGhlIFZHSUMs IHdoaWNoIGFsbG93cyB0byByYWlzZSBvciBsb3dlciBhbiBpbnRlcnJ1cHQgbGluZS4gTG93ZXJp bmcgdGhlCj4+Pj4gbGluZSBmb3IgYW4gZWRnZSB0cmlnZ2VyZWQgSVJRIGlzIGlnbm9yZWQgKGFu ZCBzbyBpcyBvcHRpb25hbCkuIFJhaXNpbmcgdGhlCj4+Pj4gbGluZSBhc3NlcnRzIHRoZSBwZW5k aW5nIHN0YXRlIGFuZCBwb3RlbnRpYWxseSBpbmplY3RzIHRoaXMgdmlydHVhbCBJUlEuIEFueQo+ Pj4+IHN1YnNlcXVlbnQgInJhaXNpbmciIGNhbGwgbWlnaHQgaW5qZWN0IGFub3RoZXIgSVJRLCBp ZiB0aGUgcHJldmlvdXMgaGFzIGF0Cj4+Pj4gbGVhc3QgYmVlbiBhY3RpdmF0ZWQgYnkgdGhlIGd1 ZXN0IGFscmVhZHksIG90aGVyd2lzZSBpcyBpZ25vcmVkLgo+Pj4KPj4+IFRoZSBpcnEgYmVjb21l cyBhY3RpdmUgYW5kIHBlbmRpbmcgaW4gdGhlIExSPwo+Pgo+PiBZZXMsIHNlZSBhYm92ZS4KPj4K Pj4+PiBGb3IgbGV2ZWwgdHJpZ2dlcmVkIGludGVycnVwdHMgdGhpcyBmdW5jdGlvbiBzdG9yZXMg dGhlIG5ldyBzdGF0ZSBpbnRvIHRoZQo+Pj4+IGBsaW5lX2xldmVsYCB2YXJpYWJsZSwgcG90ZW50 aWFsbHkgaW5qZWN0aW5nIHRoZSBpbnRlcnJ1cHQgaWYgdGhhdCBsaW5lCj4+Pj4gY2hhbmdlcyBm cm9tIGZhbHNlIHRvIHRydWUuIElmIHRoZSBsaW5lIGlzIGxvd2VyZWQgYmVmb3JlIHRoZSBndWVz dCBoYXMKPj4+PiBzZWVuIGl0LCB0aGlzIHBhcnRpY3VsYXIgaW50ZXJydXB0IGluc3RhbmNlIHdp bGwgYmUgZGlzY2FyZGVkLiBTdWNjZXNzaXZlCj4+Pj4gInJhaXNpbmciIGNhbGxzIHdpbGwgbm90 IGxlYWQgdG8gbXVsdGlwbGUgaW50ZXJydXB0cyBpZiB0aGUgbGluZSBoYXMgbm90Cj4+Pj4gYmVl biBsb3dlcmVkIGluIGJldHdlZW4uCj4+Pgo+Pj4gVGhpcyBpcyBzb21ldGhpbmcgWGVuIG5lZWRz IHRvby4KPj4+Cj4+Pgo+Pj4+ICMjIyBTb2Z0d2FyZSB0cmlnZ2VyZWQgaW50ZXJydXB0cwo+Pj4+ Cj4+Pj4gQmVzaWRlIHRoZSBuYXR1cmFsbHkgc29mdHdhcmUgdHJpZ2dlcmVkIGludGVyLXByb2Nl c3Nvci1pbnRlcnJ1cHRzCj4+Pj4gKFNHSXMgaW4gR0lDIHNwZWFrKSwgdGhlcmUgaXMgYW5vdGhl ciB3YXkgb2YgbGV0dGluZyBzb2Z0d2FyZSByYWlzZSBhbgo+Pj4+IGludGVycnVwdCBjb25kaXRp b24uCj4+Pj4gVGhlIEdJQyBkaXN0cmlidXRvciBhbGxvd3MgdG8gc2V0IG9yIGNsZWFyIGJvdGgg dGhlIHBlbmRpbmcgYW5kIGFjdGl2ZSBzdGF0ZQo+Pj4+IG9mIGFueSBpbnRlcnJ1cHQgdmlhIE1N SU8gcmVnaXN0ZXJzLiBUaGlzIGlzbid0IHdpZGVseSB1c2VkIGJ5IG1hbnkgb3BlcmF0aW5nCj4+ Pj4gc3lzdGVtcywgYnV0IGlzIHVzZWZ1bCB3aGVuIHNhdmluZyBhbmQgcmVzdG9yaW5nIHRoZSBz dGF0ZSBvZiBhIG1hY2hpbmUuCj4+Pj4gU28gZW11bGF0aW5nIHRoZXNlIGZ1bmN0aW9ucyBpcyBy ZXF1aXJlZCBmb3IgYmVpbmcgYXJjaGl0ZWN0dXJlIGNvbXBsaWFudCwKPj4+PiBob3dldmVyIHRo ZSBpbXBsZW1lbnRhdGlvbiBtaWdodCBub3QgbmVlZCB0byBiZSB2ZXJ5IGVmZmljaWVudCBnaXZl biBpdHMgcmFyZQo+Pj4+IHVzYWdlLiBJbiBmYWN0IHN1cHBvcnRpbmcgdGhlIHNldC1wZW5kaW5n IGFuZCBjbGVhci1wZW5kaW5nIHJlZ2lzdGVycyBpcwo+Pj4+IHJlbGF0aXZlbHkgc3RyYWlnaHQt Zm9yd2FyZCwgYXMgbG9uZyBhcyBvbmUga2VlcHMgdGhpcyBzdGF0ZSBzZXBhcmF0ZSBmcm9tCj4+ Pj4gdGhlIGVtdWxhdGVkIGludGVycnVwdCBsaW5lLiBgcGVuZGluZ19sYXRjaGAgc3RvcmVzIHRo aXMgc3RhdGUgaW4gYHZnaWNfaXJxYC4KPj4+Pgo+Pj4+IFRoZSBzZXQtYWN0aXZlIGFuZCBjbGVh ci1hY3RpdmUgcmVnaXN0ZXJzIGFyZSBtdWNoIGhhcmRlciB0byBlbXVsYXRlLCB0aG91Z2gsCj4+ Pj4gYXMgbm9ybWFsbHkgdGhlIGFjdGl2ZSBzdGF0ZSBpcyBvZiBsaXR0bGUgY29uY2VybiB0byB0 aGUgR0lDIGVtdWxhdGlvbi4gSW4KPj4+PiBhIG5vcm1hbCBpbnRlcnJ1cHQgbGlmZSBjeWNsZSB0 aGUgYWN0aXZlIHN0YXRlIGlzbid0IGV2ZW4gdmlzaWJsZSB0byB0aGUKPj4+PiBoeXBlcnZpc29y LCBhcyBpdCBtaWdodCBiZSBzZXQgYW5kIGNsZWFyZWQgYWdhaW4gZW50aXJlbHkgd2l0aGluIHRo ZSBndWVzdAo+Pj4+IGluIHRoZSBsaXN0IHJlZ2lzdGVyLCB3aXRob3V0IGV4aXRpbmcgdG8gdGhl IGh5cGVydmlzb3IuCj4+Pj4gU28gbWFuaXB1bGF0aW5nIHRoZSBhY3RpdmUgc3RhdGUgdmlhIHRo ZSBNTUlPIHJlZ2lzdGVycyByZXF1aXJlcyBzb21lIGhlYXZ5Cj4+Pj4gbGlmdGluZzogSWYgdGhp cyBpbnRlcnJ1cHQgaXMgY3VycmVudGx5IGluamVjdGVkIGludG8gYSBydW5uaW5nIFZDUFUsIHRo aXMKPj4+PiBWQ1BVIG11c3QgZXhpdCwgdGhlIGFjdGl2ZSBzdGF0ZSBtdXN0IGJlIHNldCBvciBj bGVhcmVkIGluIHRoZSBMUiwgdGhlbgo+Pj4+IGV4ZWN1dGlvbiBjYW4gY29udGludWUuIFdoaWxl IHRoaXMgaXMgZXhwZW5zaXZlLCBhcyBtZW50aW9uZWQgYWJvdmUgdGhpcwo+Pj4+IHNob3VsZCBu b3QgaGFwcGVuIHRvbyBvZnRlbiwgYWxzbyBwcm9iYWJseSB0aGUgc3lzdGVtIGlzbid0IHZlcnkg cGVyZm9ybWFuY2UKPj4+PiBzZW5zaXRpdmUgd2hlbiB1c2luZyB0aGlzIGZlYXR1cmUgZm9yIHNh dmUgYW5kIHJlc3RvcmUgYW55d2F5Lgo+Pj4KPj4+IHNldC1hY3RpdmUgYW5kIGNsZWFyLWFjdGl2 ZSByZWdpc3RlcnMgYXJlIG5vdCBlbXVsYXRlZCBpbiBYZW4gdG9kYXksIGl0Cj4+PiB3b3VsZCBi ZSBuaWNlIHRvIGhhdmUgdGhlbS4KPj4+Cj4+PiBIb3cgZG9lcyB0aGUgbG9ja2luZy9zeW5jaHJv bml6YXRpb24gd29yayBpbiB0aGUgY2FzZSBnaXZlbiB0aGF0IHRoZQo+Pj4gdkNQVSB0aGF0IG5l ZWRzIHRvIGV4aXQgY291bGQgYmUgcnVubmluZyBvbiBhIGRpZmZlcmVudCBwQ1BVPwo+Pgo+PiBB cyBJIGhpbnRlZCBhYm92ZSB0aGlzIGlzIGEgYml0IG9mIGEgc2xlZGdlIGhhbW1lcjogV2UgY2Fs bAo+PiBrdm1fYXJtX2hhbHRfZ3Vlc3QoKSB0byBmb3JjZSBhbGwgVkNQVXMgdG8gZXhpdCBhbmQg dG8gbWFrZSBzdXJlIHdlIGFyZQo+PiBpbiBzeW5jLiBUaGVuIHdlIGNhbiBzYWZlbHkgdXBkYXRl IHRoZSBzdGF0dXMsIGFuZCB0aGUgbm9ybWFsIGVudHJ5Cj4+IHByb2Nlc3MgdGFrZXMgY2FyZSBv ZiB3cml0aW5nIHRoaXMgaW50byB0aGUgTFJzLgo+IAo+IEhvdyBkb2VzIHZjcHUxL3BjcHUxIHRl bGwgdmNwdTIvcGNwdTIgdGhhdCBhZnRlciB0cmFwcGluZyBpbnRvIHRoZQo+IGh5cGVydmlzb3Is IGl0IHNob3VsZCBnZXQgcmlkIG9mIHRoZSBhY3RpdmUgYml0IG9yIHNldCB0aGUgYWN0aXZlIGJp dD8KPiBJcyBpdCBkb25lIHZpYSB0aGUgYWN0aXZlIGZpZWxkIGluIHN0cnVjdCB2Z2ljX2lycT8K ClByZWNpc2VseS4gV2Uga2ljayBhbGwgVkNQVXMgb3V0LCB0aGVuIHVwZGF0ZSB0aGUgcmVzcGVj dGl2ZSBib29scyBpbgpzdHJ1Y3QgdmdpY19pcnEuIFRoZW4sIHVwb24gZW50ZXJpbmcgdGhlIGd1 ZXN0IGFnYWluLCBlYWNoIFZDUFUKbmF0dXJhbGx5IHByZXNlbnRzIHRoZSBuZXcgc3RhdGUgaW4g YW4gTFIuCgoKQ2hlZXJzLApBbmRyZS4KCgo+Pj4gVGhlIHN1Z2dlc3Rpb24gb2YgdXNpbmcgdGhp cyBtb2RlbCBpbiBYZW4gd2FzIG1hZGUgaW4gdGhlIHBhc3QgYWxyZWFkeS4KPj4+IEkgYWx3YXlz IG9iamVjdGVkIGZvciB0aGUgcmVhc29uIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkga25vdyBob3cg bWFueQo+Pj4gTFJzIHRoZSBoYXJkd2FyZSBwcm92aWRlcywgcG90ZW50aWFsbHkgdmVyeSBtYW55 LCBhbmQgaXQgaXMgZXhwZW5zaXZlCj4+PiBhbmQgbmVlZGxlc3MgdG8gcmVhZC93cml0ZSB0aGVt IGFsbCBldmVyeSB0aW1lIG9uIGVudHJ5L2V4aXQuCj4+Pgo+Pj4gSSB3b3VsZCBwcmVmZXIgdG8g YXZvaWQgdGhhdCwgYnV0IEknbGwgYmUgaG9uZXN0OiBJIGNhbiBiZSBjb252aW5jZWQKPj4+IHRo YXQgdGhhdCBtb2RlbCBvZiBoYW5kbGluZyBMUnMgaXMgc28gbXVjaCBzaW1wbGVyIHRoYXQgaXQg aXMgd29ydGggaXQuCj4+PiBJIGFtIG1vcmUgY29uY2VybmVkIGFib3V0IHRoZSBmdXR1cmUgbWFp bnRhaW5hbmNlIG9mIGEgc2VwYXJhdGUgbmV3Cj4+PiBkcml2ZXIgZGV2ZWxvcGVkIGVsc2V3aGVy ZS4KPj4KPj4gSSB0aGluayB0aGlzIExSIHRvcGljIHNob3VsZCBoYXZlIGJlZW4gY292ZXJlZCBp biB0aGF0IG90aGVyIGVtYWlsLgo+Pgo+PiBCZXNpZGUgYmVpbmcgYSBzdHJvbmcgc3VwcG9ydGVy IG9mIHRoZSBLSVNTIHByaW5jaXBsZSBpbiBnZW5lcmFsLCBJCj4+IGJlbGlldmUgaW4gY2FzZSBv ZiB0aGUgR0lDIGVtdWxhdGlvbiB3ZSBzaG91bGQgYXZvaWQgKHByZW1hdHVyZSkKPj4gb3B0aW1p emF0aW9ucyBsaWtlIHRoZSBwbGFndWUsIGFzIHRoZXJlIGFyZSBxdWl0ZSBzb21lIGNvcm5lciBj YXNlcyBpbgo+PiBhbnkgVkdJQywgYW5kIGhhbmRsaW5nIGFsbCBvZiB0aGVtIGV4cGxpY2l0bHkg d2l0aCBzb21lIGhhY2tzIHdpbGwgbm90Cj4+IGZseSAoYmVlbiB0aGVyZSwgZG9uZSB0aGF0KS4K Pj4gU28gSSBjYW4ganVzdCBzdXBwb3J0IENocmlzdG9mZmVyJ3MgcG9pbnQ6IGhhdmluZyBhbiBh cmNoaXRlY3R1cmUKPj4gY29tcGxpYW50IFZHSUMgZW11bGF0aW9uIGluIGFuIG1haW50YWluYWJs ZSBtYW5uZXIgcmVxdWlyZXMgYQo+PiBzdHJhaWdodC1mb3J3YXJkIGFuZCBjbGVhciBkZXNpZ24u IEV2ZXJ5dGhpbmcgZWxzZSBzaG91bGQgYmUgc2Vjb25kYXJ5LAo+PiBhbmQgY2FuIGJlIGV2YWx1 YXRlZCBsYXRlciwgaWYgdGhlcmUgYXJlIGdvb2QgcmVhc29ucyAobnVtYmVycyEpLgo+IAo+IFRo ZSByZWFzb24gd2h5IEkgc3RhdGVkIHRoZSBhYm92ZSBpcyB0aGF0IEkgcmFuIHRoZSBudW1iZXJz IGJhY2sgaW4gdGhlCj4gZGF5IGFuZCByZWFkaW5nIG9yIHdyaXRpbmcgTFJzIG9uIGFuIFhHZW5l IHdhcyBzbyBzbG93IHRoYXQgaXQgbWFkZQo+IHNlbnNlIHRvIGF2b2lkIGl0IGFzIG11Y2ggYXMg cG9zc2libGUuIEJ1dCBtYXliZSB0aGluZ3MgaGF2ZSBjaGFuZ2VkIGlmCj4gQ2hyaXN0b2ZmZXIg YWxzbyByYW4gdGhlIG51bWJlcnMgYW5kIG1hbmFnZWQgdG8gZGVtb25zdHJhdGUgdGhlCj4gb3Bw b3NpdGUuCj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8v bGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK