From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manish Jaggi Subject: Re: [Draft E] Xen on ARM vITS Handling Date: Tue, 9 Jun 2015 08:50:20 -0700 Message-ID: <55770B3C.8000004@caviumnetworks.com> References: <1433864565.7108.565.camel@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1433864565.7108.565.camel@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Ian Campbell , xen-devel Cc: manish.jaggi@caviumnetworks.com, Julien Grall , Stefano Stabellini , Vijay Kilari List-Id: xen-devel@lists.xenproject.org CgpPbiBUdWVzZGF5IDA5IEp1bmUgMjAxNSAwODo0MiBBTSwgSWFuIENhbXBiZWxsIHdyb3RlOgo+ IERyYWZ0IEUgZm9sbG93cy4gQWxzbyBhdDoKPiBodHRwOi8veGVuYml0cy54ZW4ub3JnL3Blb3Bs ZS9pYW5jL3ZpdHMvZHJhZnRFLntwZGYsaHRtbH0KSWFuLCBJIGhhdmUgc2VudCBhIHBjaSBwYXNz dGhyb3VnaCBkZXNpZ24uIEl0IHdvdWxkIGJlIGdvb2QgaWYgdGhhdCBjYW4gCmJlIGxpbmtlZCB3 aXRoIHRoaXMgb25lLgpDYW4gSSB1cGxvYWQgdGhlIHNhbWUgb24geGVuYml0cwo+IFRoZSBtYWpv ciBjaGFuZ2UgaGVyZSBhcmlzZXMgZnJvbSB0aGUgcmVhbGlzYXRpb24gdGhhdCBpdCBpcyBub3QK PiBwb3NzaWJsZSB0byBhc3NvY2lhdGUgYSB2UExJIHdpdGggYSBzaW5nbGUgcExQSSwgd2hpY2gg aGFzIHJhbWlmaWNhdGlvbnMKPiBmb3IgdGhlIG1hbmFnZW1lbnQgb2YgZW5hYmxpbmcvZGlzYWJs aW5nIHBMUElzIGFuZCB0aGUgaGFuZGxpbmcgb2YKPiBzcHVyaW91cyBwTFBJcyB3aGljaCB3ZSBh cmUgbm93IGV4cGVjdGluZyB0byBzZWUgYXMgYSBjb25zZXF1ZW5jZS4gT24KPiB0aGUgcGx1cyBz aWRlIHRoaXMgZW5kZWQgdXAgdGFraW5nIGNhcmUgb2YgVUkxIGFuZCB0aGVyZSBhcmUgbm93IG5v Cj4gbWFqb3Igc3R1bWJsaW5nIGJsb2NrcyB0aGF0IEkgY2FuIHNlZS4KPgo+IEkgc3VnZ2VzdCB3 ZSBnaXZlIHBlb3BsZSBhIGRheSB0byBkaWdlc3QgYW5kIHRoZW4gbWVldCBvbiBJUkMgKCN4ZW5h cm0KPiBvbiBGcmVlbm9kZSkgb24gVGh1cnNkYXkgKDExIEp1bmUpIHRvIGRpc2N1c3MgYW55IHJl bWFpbmluZyBpc3N1ZXMuCj4KPiBJJ20gbm90IHN1cmUgd2hhdCB0aW1lIHpvbmUgZm9sa3MgYXJl IGluLCBhc3N1bWluZyBFdXJvcGUrQXNpYSBJIHByb3Bvc2UKPiAxMUFNIEJTVCwgd2hpY2ggaXMg MTBBTSBHTVQsIDM6MzBQTSBJU1Qgb3IgM0FNIFBEVC4gSWYgdGhlcmUgYXJlIGZvbGtzCj4gb24g V2VzdCBDb3N0IFVTQSB0aGVuIHdlIG1pZ2h0IG5lZWQgdG8gdGhpbmsgYWdhaW4uCj4KPiBJYW4u Cj4KPiAtLS0tLS0tOD4tLS0tLS0KPgo+ICUgWGVuIG9uIEFSTSB2SVRTIEhhbmRsaW5nCj4gJSBJ YW4gQ2FtcGJlbGwgPGlhbi5jYW1wYmVsbEBjaXRyaXguY29tPgo+ICUgRHJhZnQgRQo+Cj4gIyBD aGFuZ2Vsb2cKPgo+ICMjIFNpbmNlIERyYWZ0IEQKPgo+ICogRml4ZWQgYXNzdW1wdGlvbnMgYWJv dXQgdkxQSS0+cExQSSBtYXBwaW5nLCB3aGljaCBpcyBub3QKPiAgICBwb3NzaWJsZS4gVGhpcyBs ZWFkIHRvIGNoYW5nZXMgdG8gdGhlIG1vZGVsIGZvciBlbmFibGluZyBhbmQKPiAgICBkaXNhYmxp bmcgcExQSSBhbmQgdkxQSSBhbmQgdGhlIGhhbmRsaW5nIG9mIHRoZSB2aXJ0dWFsIExQSQo+ICAg IGNvbmZpZ3VyYXRpb24gdGFibGUsIHJlc29sdmluZyBfVW5yZXNvbHZlZCBJc3N1ZSAxXy4KPiAq IE1hZGUgdGhlIHBMUEkgYW5kIHZMUEkgaW50ZXJydXB0IHByaW9yaXRpZXMgZXhwbGljaXQuCj4g KiBBdHRlbXB0ZWQgdG8gY2xhcmlmeSB0aGUgdHJ1c3QgaXNzdWVzIHJlZ2FyZGluZyBpbi1ndWVz dCBkYXRhCj4gICAgc3RydWN0dXJlcy4KPiAqIE1hbmRhdGUgYSBwYXJ0aWN1bGFyIGNhY2hlYWJp bGl0eSBmb3IgdGFibGVzIGluIGd1ZXN0IG1lbW9yeS4KPgo+ICMjIFNpbmNlIERyYWZ0IEMKPgo+ ICogX01ham9yXyByZXdvcmssIGluIGFuIGF0dGVtcHQgdG8gc2ltcGxpZnkgZXZlcnl0aGluZyBp bnRvIHNvbWV0aGluZwo+ICAgIG1vcmUgbGlrZWx5IHRvIGJlIGFjaGlldmFibGUgZm9yIDQuNi4K PiAgICAgICogTWFkZSBzb21lIHNpbXBsaWZ5aW5nIGFzc3VtcHRpb25zLgo+ICAgICAgKiBSZWR1 Y2VkIHRoZSBzY29wZSBvZiBzb21lIHN1cHBvcnQuCj4gICAgICAqIENvbW1hbmQgZW11bGF0aW9u IGlzIG5vdyBtb3N0bHkgdHJpdmlhbC4KPiAgICAgICogRXhwYW5kZWQgZGV0YWlsIG9uIGhvc3Qg c2V0dXAsIGFsbG93aW5nIG90aGVyIGFzc3VtcHRpb25zIHRvIGJlCj4gICAgICAgIG1hZGUgZHVy aW5nIGVtdWxhdGlvbi4KPiAqIE1hbnkgb3RoZXIgdGhpbmdzIGxvc3QgaW4gdGhlIG5vaXNlIG9m IHRoZSBhYm92ZS4KPgo+ICMjIFNpbmNlIERyYWZ0IEIKPgo+ICogRGV0YWlscyBvZiBjb21tYW5k IHRyYW5zbGF0aW9uICh0aGFua3MgdG8gSnVsaWVuIGFuZCBWaWpheSkKPiAqIEFkZGVkIGJhY2tn cm91bmQgb24gTFBJIFRyYW5zbGF0aW9uIGFuZCBQZW5kaW5nIHRhYmxlcwo+ICogQWRkZWQgYmFj a2dyb3VuZCBvbiBDb2xsZWN0aW9ucwo+ICogU2V0dGxlZCBvbiBgTjpOYCBzY2hlbWUgZm9yIHZJ VFM6cGF0J3MgbWFwcGluZy4KPiAqIFJlamlnZ2VkIHNlY3Rpb24gbmVzdGluZyBhIGJpdC4KPiAq IFNpbmNlIHdlIG5vdyB0aGluZyB0cmFuc2xhdGlvbiBzaG91bGQgYmUgY2hlYXAsIHNldHRsZSBv bgo+ICAgIHRyYW5zbGF0aW9uIGF0IHNjaGVkdWxpbmcgdGltZS4KPiAqIExhenkgYElOVkFMTGAg YW5kIGBTWU5DYAo+Cj4gIyMgU2luY2UgRHJhZnQgQQo+Cj4gKiBBZGRlZCBkaXNjdXNzaW9uIG9m IHdoZW4vd2hlcmUgY29tbWFuZCB0cmFuc2xhdGlvbiBvY2N1cnMuCj4gKiBDb250ZW50aW9uIG9u IHNjaGVkdWxlciBsb2NrLCBzdWdnZXN0aW9uIHRvIHVzZSBTT0ZUSVJRLgo+ICogSGFuZGxpbmcg b2YgZG9tYWluIHNodXRkb3duLgo+ICogTW9yZSBkZXRhaWxlZCBkaXNjdXNzaW9uIG9mIG11bHRp cGxlIHZzIHNpbmdsZSB2aXRzIHByb3MvY29ucy4KPgo+ICMgSW50cm9kdWN0aW9uCj4KPiBBUk0g c3lzdGVtcyBjb250YWluaW5nIGEgR0lDIHZlcnNpb24gMyBvciBsYXRlciBtYXkgY29udGFpbiBv bmUgb3IKPiBtb3JlIElUUyBsb2dpY2FsIGJsb2Nrcy4gQW4gSVRTIGlzIHVzZWQgdG8gcm91dGUg TWVzc2FnZSBTaWduYWxsZWQKPiBpbnRlcnJ1cHRzIGZyb20gZGV2aWNlcyBpbnRvIGFuIExQSSBp bmplY3Rpb24gb24gdGhlIHByb2Nlc3Nvci4KPgo+IFRoZSBmb2xsb3dpbmcgc3VtbWFyaXNlcyB0 aGUgSVRTIGhhcmR3YXJlIGRlc2lnbiBhbmQgc2VydmVzIGFzIGEgc2V0Cj4gb2YgYXNzdW1wdGlv bnMgZm9yIHRoZSB2SVRTIHNvZnR3YXJlIGRlc2lnbi4gRm9yIGZ1bGwgZGV0YWlscyBvZiB0aGUK PiBJVFMgc2VlIHRoZSAiR0lDIEFyY2hpdGVjdHVyZSBTcGVjaWZpY2F0aW9uIi4KPgo+ICMjIExv Y2FsaXR5LXNwZWNpZmljIFBlcmlwaGVyYWwgSW50ZXJydXB0cyAoYExQSWApCj4KPiBUaGlzIGlz IGEgbmV3IGNsYXNzIG9mIG1lc3NhZ2Ugc2lnbmFsbGVkIGludGVycnVwdHMgaW50cm9kdWNlZCBp bgo+IEdJQ3YzLiBUaGV5IG9jY3VweSB0aGUgaW50ZXJydXB0IElEIHNwYWNlIGZyb20gYDgxOTIu LigyXjMyKS0xYC4KPgo+IFRoZSBudW1iZXIgb2YgTFBJcyBzdXBwb3J0IGJ5IGFuIElUUyBpcyBl eHBvc2VkIHZpYQo+IGBHSVRTX1RZUEVSLklEYml0c2AgKGFzIG51bWJlciBvZiBiaXRzIC0gMSks IGl0IG1heSBiZSB1cCB0bwo+IDJeMzIuIF9Ob3RlXzogVGhpcyBmaWVsZCBhbHNvIGNvbnRhaW5z IHRoZSBudW1iZXIgb2YgRXZlbnQgSURzCj4gc3VwcG9ydGVkIGJ5IHRoZSBJVFMuCj4KPiAjIyMg TFBJIENvbmZpZ3VyYXRpb24gVGFibGUKPgo+IEVhY2ggTFBJIGhhcyBhbiBhc3NvY2lhdGVkIGNv bmZpZ3VyYXRpb24gYnl0ZSBpbiB0aGUgTFBJIENvbmZpZ3VyYXRpb24KPiBUYWJsZSAobWFuYWdl ZCB2aWEgdGhlIEdJQyBSZWRpc3RyaWJ1dG9yIGFuZCBwbGFjZWQgYXQKPiBgR0lDUl9QUk9QQkFT RVJgIG9yIGBHSUNSX1ZQUk9QQkFTRVJgKS4gVGhpcyBieXRlIGNvbmZpZ3VyZXM6Cj4KPiAqIFRo ZSBMUEkncyBwcmlvcml0eTsKPiAqIFdoZXRoZXIgdGhlIExQSSBpcyBlbmFibGVkIG9yIGRpc2Fi bGVkLgo+Cj4gU29mdHdhcmUgdXBkYXRlcyB0aGUgQ29uZmlndXJhdGlvbiBUYWJsZSBkaXJlY3Rs eSBidXQgbXVzdCB0aGVuIGlzc3VlCj4gYW4gaW52YWxpZGF0ZSBjb21tYW5kIChwZXItZGV2aWNl IGBJTlZgIElUUyBjb21tYW5kLCBnbG9iYWwgYElOVkFMTGAKPiBJVFMgY29tbWFuZCBvciB3cml0 ZSBgR0lDUl9JTlZMUElSYCkgZm9yIHRoZSBhZmZlY3QgdG8gYmUgZ3VhcmFudGVlZAo+IHRvIGJl Y29tZSB2aXNpYmxlIChwb3NzaWJseSByZXF1aXJpbmcgYW4gSVRTIGBTWU5DYCBjb21tYW5kIHRv IGVuc3VyZQo+IGNvbXBsZXRpb24gb2YgdGhlIGBJTlZgIG9yIGBJTlZBTExgKS4gTm90ZSB0aGF0 IGl0IGlzIHZhbGlkIGZvciBhbgo+IGltcGxlbWVudGF0aW9uIHRvIHJlcmVhZCB0aGUgY29uZmln dXJhdGlvbiB0YWJsZSBhdCBhbnkgdGltZSAoSU9XIGl0Cj4gaXMgX25vdF8gZ3VhcmFudGVlZCB0 aGF0IGEgY2hhbmdlIHRvIHRoZSBMUEkgQ29uZmlndXJhdGlvbiBUYWJsZSB3b24ndAo+IGJlIHZp c2libGUgdW50aWwgYW4gaW52YWxpZGF0ZSBpcyBpc3N1ZWQpLgo+Cj4gIyMjIExQSSBQZW5kaW5n IFRhYmxlCj4KPiBFYWNoIExQSSBhbHNvIGhhcyBhbiBhc3NvY2lhdGVkIGJpdCBpbiB0aGUgTFBJ IFBlbmRpbmcgVGFibGUgKG1hbmFnZWQKPiBieSB0aGUgR0lDIHJlZGlzdHJpYnV0b3IpLiBUaGlz IGJpdCBzaWduYWxzIHdoZXRoZXIgdGhlIExQSSBpcyBwZW5kaW5nCj4gb3Igbm90Lgo+Cj4gVGhp cyByZWdpb24gbWF5IGNvbnRhaW4gb3V0IG9mIGRhdGUgaW5mb3JtYXRpb24gYW5kIHRoZSBtZWNo YW5pc20gdG8KPiBzeW5jaHJvbmlzZSBpcyBgSU1QTEVNRU5UQVRJT04gREVGSU5FRGAuCj4KPiAj IyBJbnRlcnJ1cHQgVHJhbnNsYXRpb24gU2VydmljZSAoYElUU2ApCj4KPiAjIyMgRGV2aWNlIElk ZW50aWZpZXJzCj4KPiBFYWNoIGRldmljZSB1c2luZyB0aGUgSVRTIGlzIGFzc29jaWF0ZWQgd2l0 aCBhIHVuaXF1ZSAiRGV2aWNlCj4gSWRlbnRpZmllciIuCj4KPiBUaGUgZGV2aWNlIElEcyBhcmUg cHJvcGVydGllcyBvZiB0aGUgaW1wbGVtZW50YXRpb24gYW5kIGFyZSB0eXBpY2FsbHkKPiBkZXNj cmliZWQgdmlhIHN5c3RlbSBmaXJtd2FyZSwgZS5nLiB0aGUgQUNQSSBJT1JUIHRhYmxlIG9yIHZp YSBkZXZpY2UKPiB0cmVlLgo+Cj4gVGhlIG51bWJlciBvZiBkZXZpY2UgaWRzIGluIGEgc3lzdGVt IGRlcGVuZHMgb24gdGhlIGltcGxlbWVudGF0aW9uIGFuZAo+IGNhbiBiZSBkaXNjb3ZlcmVkIHZp YSBgR0lUU19UWVBFUi5EZXZiaXRzYC4gVGhpcyBmaWVsZCBhbGxvd3MgYW4gSVRTCj4gdG8gaGF2 ZSB1cCB0byAyXjMyIGRldmljZXMuCj4KPiAjIyMgRXZlbnRzCj4KPiBFYWNoIGRldmljZSBjYW4g Z2VuZXJhdGUgIkV2ZW50cyIgKGNhbGxlZCBgSURgIGluIHRoZSBzcGVjKSB0aGVzZQo+IGNvcnJl c3BvbmQgdG8gcG9zc2libGUgaW50ZXJydXB0IHNvdXJjZXMgaW4gdGhlIGRldmljZSAoZS5nLiBN U0kKPiBvZmZzZXQpLgo+Cj4gVGhlIG1heGltdW0gbnVtYmVyIG9mIGludGVycnVwdCBzb3VyY2Vz IGlzIGRldmljZSBzcGVjaWZpYy4gSXQgaXMKPiB1c3VhbGx5IGRpc2NvdmVyZWQgZWl0aGVyIGZy b20gZmlybXdhcmUgdGFibGVzIChlLmcuIERUIG9yIEFDUEkpIG9yCj4gZnJvbSBidXMgc3BlY2lm aWMgbWVjaGFuaXNtcyAoZS5nLiBQQ0kgY29uZmlnIHNwYWNlKS4KPgo+IFRoZSBtYXhpbXVtIG51 bWJlciBvZiBldmVudHMgaWRzIHN1cHBvcnQgYnkgYW4gSVRTIGlzIGV4cG9zZWQgdmlhCj4gYEdJ VFNfVFlQRVIuSURiaXRzYCAoYXMgbnVtYmVyIG9mIGJpdHMgLSAxKSwgaXQgbWF5IGJlIHVwIHRv Cj4gMl4zMi4gX05vdGVfOiBUaGlzIGZpZWxkIGFsc28gY29udGFpbnMgdGhlIG51bWJlciBvZiBg TFBJc2Agc3VwcG9ydGVkCj4gYnkgdGhlIElUUy4KPgo+ICMjIyBJbnRlcnJ1cHQgQ29sbGVjdGlv bnMKPgo+IEVhY2ggaW50ZXJydXB0IGlzIGEgbWVtYmVyIG9mIGFuICJJbnRlcnJ1cHQgQ29sbGVj dGlvbiIuIFRoaXMgYWxsb3dzCj4gc29mdHdhcmUgdG8gbWFuYWdlIGxhcmdlIG51bWJlcnMgb2Yg cGh5c2ljYWwgaW50ZXJydXB0cyB3aXRoIGEgc21hbGwKPiBudW1iZXIgb2YgY29tbWFuZHMgcmF0 aGVyIHRoYW4gaXNzdWluZyBvbmUgY29tbWFuZCBwZXIgaW50ZXJydXB0Lgo+Cj4gT24gYSBzeXN0 ZW0gd2l0aCBOIHByb2Nlc3NvcnMsIHRoZSBJVFMgbXVzdCBwcm92aWRlIGF0IGxlYXN0IE4rMQo+ IGNvbGxlY3Rpb25zLgo+Cj4gQW4gSVRTIG1heSBzdXBwb3J0IHNvbWUgbnVtYmVyIG9mIGludGVy bmFsIGNvbGxlY3Rpb25zIChpbmRpY2F0ZWQgYnkKPiBgR0lUU19UWVBFUi5IQ0NgKSBhbmQgZXh0 ZXJuYWwgb25lcyB3aGljaCByZXF1aXJlIG1lbW9yeSBwcm92aXNpb25lZAo+IGJ5IHRoZSBPcGVy YXRpbmcgU3lzdGVtIHZpYSBhIGBHSVRTX0JBU0VSbmAgcmVnaXN0ZXIuCj4KPiAjIyMgVGFyZ2V0 IEFkZHJlc3Nlcwo+Cj4gVGhlIFRhcmdldCBBZGRyZXNzIGNvcnJlc3BvbmQgdG8gYSBzcGVjaWZp YyBHSUMgcmUtZGlzdHJpYnV0b3IuIFRoZQo+IGZvcm1hdCBvZiB0aGlzIGZpZWxkIGRlcGVuZHMg b24gdGhlIHZhbHVlIG9mIHRoZSBgR0lUU19UWVBFUi5QVEFgIGJpdDoKPgo+ICogMTogdGhlIGJh c2UgYWRkcmVzcyBvZiB0aGUgcmUtZGlzdHJpYnV0b3IgdGFyZ2V0IGlzIHVzZWQKPiAqIDA6IGEg dW5pcXVlIHByb2Nlc3NvciBudW1iZXIgaXMgdXNlZC4gVGhlIG1hcHBpbmcgYmV0d2VlbiB0aGUK PiAgICBwcm9jZXNzb3IgYWZmaW5pdHkgdmFsdWUgKGBNUElEUmApIGFuZCB0aGUgcHJvY2Vzc29y IG51bWJlciBpcwo+ICAgIGRpc2NvdmVyYWJsZSB2aWEgYEdJQ1JfVFlQRVIuUHJvY2Vzc29yTnVt YmVyYC4KPgo+IFRoaXMgdmFsdWUgaXMgdXAgdG8gdGhlIElUUyBpbXBsZW1lbnRlciAoYEdJVFNf VFlQRVJgIGlzIGEgcmVhZC1vbmx5Cj4gcmVnaXN0ZXIpLgo+Cj4gIyMjIERldmljZSBUYWJsZQo+ Cj4gQSBEZXZpY2UgVGFibGUgaXMgY29uZmlndXJlZCBpbiBlYWNoIElUUyB3aGljaCBtYXBzIGlu Y29taW5nIGRldmljZQo+IGlkZW50aWZpZXJzIGludG8gYW4gSVRTIEludGVycnVwdCBUcmFuc2xh dGlvbiBUYWJsZS4KPgo+ICMjIyBJbnRlcnJ1cHQgVHJhbnNsYXRpb24gVGFibGUgKGBJVFRgKSBh bmQgQ29sbGVjdGlvbiBUYWJsZQo+Cj4gQW4gYEV2ZW50YCBnZW5lcmF0ZWQgYnkgYSBgRGV2aWNl YCBpcyB0cmFuc2xhdGVkIGludG8gYW4gYExQSWAgdmlhIGEKPiBwZXItRGV2aWNlIEludGVycnVw dCBUcmFuc2xhdGlvbiBUYWJsZS4gVGhlIHN0cnVjdHVyZSBvZiB0aGlzIHRhYmxlIGlzCj4gZGVz Y3JpYmVkIGluIEdJQyBTcGVjIDQuOS4xMi4KPgo+IFRoZSBJVFMgdHJhbnNsYXRpb24gdGFibGUg bWFwcyB0aGUgZGV2aWNlIGlkIG9mIHRoZSBvcmlnaW5hdGluZyBkZXZpY2UKPiBpbnRvIGEgcGh5 c2ljYWwgaW50ZXJydXB0IChgTFBJYCkgYW5kIGFuIEludGVycnVwdCBDb2xsZWN0aW9uLgo+Cj4g VGhlIENvbGxlY3Rpb24gaXMgaW4gdHVybiBsb29rZWQgdXAgaW4gdGhlIENvbGxlY3Rpb24gVGFi bGUgdG8gcHJvZHVjZQo+IGEgVGFyZ2V0IEFkZHJlc3MsIGluZGljYXRpbmcgYSByZWRpc3RyaWJ1 dG9yIChBS0EgQ1BVKSB0byB3aGljaCB0aGUKPiBMUEkgaXMgZGVsaXZlcmVkLgo+Cj4gIyMjIE9T IFByb3Zpc2lvbmVkIE1lbW9yeSBSZWdpb25zCj4KPiBUaGUgSVRTIGhhcmR3YXJlIGRlc2lnbiBw cm92aWRlcyBtZWNoYW5pc21zIGZvciBhbiBJVFMgdG8gYmUgcHJvdmlkZWQKPiB3aXRoIHZhcmlv dXMgYmxvY2tzIG9mIG1lbW9yeSBieSB0aGUgT1MgZm9yIElUUyBpbnRlcm5hbCB1c2UsIHRoaXMK PiBpbmNsdWRlIHRoZSBwZXItZGV2aWNlIElUVCAoZXN0YWJsaXNoZWQgd2l0aCBgTUFQRGApIGFu ZCBtZW1vcnkKPiByZWdpb25zIGZvciBEZXZpY2UgVGFibGVzLCBWaXJ0dWFsIFByb2Nlc3NvcnMg YW5kIEludGVycnVwdAo+IENvbGxlY3Rpb25zLiBVcCB0byA4IHN1Y2ggcmVnaW9ucyBjYW4gYmUg cmVxdWVzdGVkIGJ5IHRoZSBJVFMgYW5kCj4gcHJvdmlzaW9uZWQgYnkgdGhlIE9TIHZpYSB0aGUg YEdJVFNfQkFTRVJuYCByZWdpc3RlcnMuCj4KPiAjIyMgSVRTIENvbmZpZ3VyYXRpb24KPgo+IFRo ZSBJVFMgaXMgY29uZmlndXJlZCBhbmQgbWFuYWdlZCwgaW5jbHVkaW5nIGVzdGFibGlzaGluZyBh bmQKPiBjb25maWd1cmluZyB0aGUgVHJhbnNsYXRpb24gVGFibGVzIGFuZCBDb2xsZWN0aW9uIFRh YmxlLCB2aWEgYW4gaW4KPiBtZW1vcnkgcmluZyBzaGFyZWQgYmV0d2VlbiB0aGUgQ1BVIGFuZCB0 aGUgSVRTIGNvbnRyb2xsZXIuIFRoZSByaW5nIGlzCj4gbWFuYWdlZCB2aWEgdGhlIGBHSVRTX0NC QVNFUmAgcmVnaXN0ZXIgYW5kIGluZGV4ZWQgYnkgYEdJVFNfQ1dSSVRFUmAKPiBhbmQgYEdJVFNf Q1JFQURSYCByZWdpc3RlcnMuCj4KPiBBIHByb2Nlc3NvciBhZGRzIGNvbW1hbmRzIHRvIHRoZSBz aGFyZWQgcmluZyBhbmQgdGhlbiB1cGRhdGVzCj4gYEdJVFNfQ1dSSVRFUmAgdG8gbWFrZSB0aGVt IHZpc2libGUgdG8gdGhlIElUUyBjb250cm9sbGVyLgo+Cj4gVGhlIElUUyBjb250cm9sbGVyIHBy b2Nlc3NlcyBjb21tYW5kcyBmcm9tIHRoZSByaW5nIGFuZCB0aGVuIHVwZGF0ZXMKPiBgR0lUU19D UkVBRFJgIHRvIGluZGljYXRlIHRoZSB0aGUgcHJvY2Vzc29yIHRoYXQgdGhlIGNvbW1hbmQgaGFz IGJlZW4KPiBwcm9jZXNzZWQuCj4KPiBDb21tYW5kcyBhcmUgcHJvY2Vzc2VkIHNlcXVlbnRpYWxs eS4KPgo+IENvbW1hbmRzIHNlbnQgb24gdGhlIHJpbmcgaW5jbHVkZSBvcGVyYXRpb25hbCBjb21t YW5kczoKPgo+ICogUm91dGluZyBpbnRlcnJ1cHRzIHRvIHByb2Nlc3NvcnM7Cj4gKiBHZW5lcmF0 aW5nIGludGVycnVwdHM7Cj4gKiBDbGVhcmluZyB0aGUgcGVuZGluZyBzdGF0ZSBvZiBpbnRlcnJ1 cHRzOwo+ICogU3luY2hyb25pc2luZyB0aGUgY29tbWFuZCBxdWV1ZQo+Cj4gYW5kIG1haW50ZW5h bmNlIGNvbW1hbmRzOgo+Cj4gKiBNYXAgZGV2aWNlL2NvbGxlY3Rpb24vcHJvY2Vzc29yOwo+ICog TWFwIHZpcnR1YWwgaW50ZXJydXB0Owo+ICogQ2xlYW4gaW50ZXJydXB0czsKPiAqIERpc2NhcmQg aW50ZXJydXB0czsKPgo+IFRoZSBmaWVsZCBgR0lUU19DQkFTRVIuU2l6ZWAgZW5jb2RlcyB0aGUg bnVtYmVyIG9mIDRLQiBwYWdlcyBtaW51cyAwCj4gY29uc2lzdGluZyBvZiB0aGUgY29tbWFuZCBx dWV1ZS4gVGhpcyBmaWVsZCBpcyA4IGJpdHMgd2hpY2ggbWVhbnMgdGhlCj4gbWF4aW11bSBzaXpl IGlzIDJeOCAqIDRLQiA9IDFNQi4gR2l2ZW4gdGhhdCBlYWNoIGNvbW1hbmQgaXMgMzIgYnl0ZXMs Cj4gdGhlcmUgaXMgYSBtYXhpbXVtIG9mIDMyNzY4IGNvbW1hbmRzIGluIHRoZSBxdWV1ZS4KPgo+ IFRoZSBJVFMgcHJvdmlkZXMgbm8gc3BlY2lmaWMgY29tcGxldGlvbiBub3RpZmljYXRpb24KPiBt ZWNoYW5pc20uIENvbXBsZXRpb24gaXMgbW9uaXRvcmVkIGJ5IGEgY29tYmluYXRpb24gb2YgYSBg U1lOQ2AKPiBjb21tYW5kIGFuZCBlaXRoZXIgcG9sbGluZyBgR0lUU19DUkVBRFJgIG9yIG5vdGlm aWNhdGlvbiB2aWEgYW4KPiBpbnRlcnJ1cHQgZ2VuZXJhdGVkIHZpYSB0aGUgYElOVGAgY29tbWFu ZC4KPgo+IE5vdGUgdGhhdCB0aGUgaW50ZXJydXB0IGdlbmVyYXRpb24gdmlhIGBJTlRgIHJlcXVp cmVzIGFuIG9yaWdpbmF0aW5nCj4gZGV2aWNlIElEIHRvIGJlIHN1cHBsaWVkICh3aGljaCBpcyB0 aGVuIHRyYW5zbGF0ZWQgdmlhIHRoZSBJVFMgaW50byBhbgo+IExQSSkuIE5vIHNwZWNpZmljIGRl dmljZSBJRCBpcyBkZWZpbmVkIGZvciB0aGlzIHB1cnBvc2UgYW5kIHNvIHRoZSBPUwo+IHNvZnR3 YXJlIGlzIGV4cGVjdGVkIHRvIGZhYnJpY2F0ZSBvbmUuCj4KPiBQb3NzaWJsZSB3YXlzIG9mIGlu dmVudGluZyBzdWNoIGEgZGV2aWNlIElEIGFyZToKPgo+ICogRW51bWVyYXRlIGFsbCBkZXZpY2Ug aWRzIGluIHRoZSBzeXN0ZW0gYW5kIHBpY2sgYW5vdGhlciBvbmU7Cj4gKiBVc2UgYSBQQ0kgQkRG IGFzc29jaWF0ZWQgd2l0aCBhIG5vbi1leGlzdGVudCBkZXZpY2UgZnVuY3Rpb24gKHN1Y2gKPiAg ICBhcyBhbiB1bnVzZWQgb25lIHJlbGF0aW5nIHRvIHRoZSBQQ0kgcm9vdC1icmlkZ2UpIGFuZCB0 cmFuc2xhdGUgdGhhdAo+ICAgICh2aWEgZmlybXdhcmUgdGFibGVzKSBpbnRvIGEgc3VpdGFibGUg ZGV2aWNlIGlkOwo+ICogPz8/Cj4KPiAjIExQSSBIYW5kbGluZyBpbiBYZW4KPgo+ICMjIElSUSBk ZXNjcmlwdG9ycwo+Cj4gQ3VycmVudGx5IGFsbCBTR0kvUFBJL1NQSSBpbnRlcnJ1cHRzIGFyZSBj b3ZlcmVkIGJ5IGEgc2luZ2xlIHN0YXRpYwo+IGFycmF5IG9mIGBzdHJ1Y3QgaXJxX2Rlc2NgIHdp dGggfjEwMjQgZW50cmllcyAodGhlIG1heGltdW0gaW50ZXJydXB0Cj4gbnVtYmVyIGluIHRoYXQg c2V0IG9mIGludGVycnVwdCB0eXBlcykuCj4KPiBUaGUgYWRkaXRpb24gb2YgTFBJcyBpbiBHSUN2 MyBtZWFucyB0aGF0IHRoZSBsYXJnZXN0IHBvdGVudGlhbAo+IGludGVycnVwdCBzcGVjaWZpZXIg aXMgbXVjaCBsYXJnZXIuCj4KPiBUaGVyZWZvcmUgYSBzZWNvbmQgZHluYW1pY2FsbHkgYWxsb2Nh dGVkIGFycmF5IHdpbGwgYmUgYWRkZWQgdG8gY292ZXIKPiB0aGUgcmFuZ2UgYDgxOTIuLm5yX2xw aXNgLiBUaGUgYGlycV90b19kZXNjYCBmdW5jdGlvbiB3aWxsIGRldGVybWluZQo+IHdoaWNoIGFy cmF5IHRvIHVzZSAoc3RhdGljIGAwLi4xMDI0YCBvciBkeW5hbWljIGA4MTkyLi5lbmRgIGxwaSBk ZXNjCj4gYXJyYXkpIGJhc2VkIG9uIHRoZSBpbnB1dCBpcnEgbnVtYmVyLiBUd28gYXJyYXlzIGFy ZSB1c2VkIHRvIGF2b2lkIGEKPiB3YXN0ZWZ1bCBhbGxvY2F0aW9uIGNvdmVyaW5nIHRoZSB1bnVz ZWQvdW51c2FibGUpIGAxMDI0Li44MTkxYCByYW5nZS4KPgo+ICMjIFZpcnR1YWwgTFBJIGludGVy cnVwdCBpbmplY3Rpb24KPgo+IEEgcGh5c2ljYWwgaW50ZXJydXB0IHdoaWNoIGlzIHJvdXRlZCB0 byBhIGd1ZXN0IHZDUFUgaGFzIHRoZQo+IGBfSVJRX0dVRVNUYCBmbGFnIHNldCBpbiB0aGUgYGly cV9kZXNjYCBzdGF0dXMgbWFzay4gU3VjaCBpbnRlcnJ1cHRzCj4gaGF2ZSBhbiBhc3NvY2lhdGVk IGluc3RhbmNlIG9mIGBzdHJ1Y3QgaXJxX2d1ZXN0YCB3aGljaCBjb250YWlucyB0aGUKPiB0YXJn ZXQgYHN0cnVjdCBkb21haW5gIHBvaW50ZXIgYW5kIHZpcnR1YWwgaW50ZXJydXB0IG51bWJlci4K Pgo+IEluIFhlbiBhIHZpcnR1YWwgaW50ZXJydXB0IChlaXRoZXIgYXJpc2luZyBmcm9tIGEgcGh5 c2ljYWwgaW50ZXJydXB0Cj4gb3IgY29tcGxldGVseSB2aXJ0dWFsKSBpcyB1bHRpbWF0ZWx5IGlu amVjdGVkIHRvIGEgVkNQVSB1c2luZyB0aGUKPiBgdmdpY192Y3B1X2luamVjdF9pcnFgIGZ1bmN0 aW9uLCBvciBgdmdpY192Y3B1X2luamVjdF9scGlgLgo+Cj4gVGhpcyBtZWNoYW5pc20gd2lsbCBs aWtlbHkgbmVlZCB1cGRhdGluZyB0byBoYW5kbGUgdGhlIGluamVjdGlvbiBvZgo+IHZpcnR1YWwg TFBJcy4gSW4gcGFydGljdWxhciByYXRoZXIgdGhhbiBgR0lDRF9JVEFSR0VSUm5gIG9yCj4gYEdJ Q0RfSVJPVVRFUm5gIHJvdXRpbmcgb2YgTFBJcyBpcyBwZXJmb3JtZWQgdmlhIHRoZSBJVFMgY29s bGVjdGlvbnMKPiBtZWNoYW5pc20uIFRoaXMgaXMgZGlzY3Vzc2VkIGJlbG93IChJbiBfdklUU186 X1ZpcnR1YWwgTFBJIGluamVjdGlvbl8pLgo+Cj4gIyBTY29wZQo+Cj4gVGhlIElUUyBpcyByYXRo ZXIgY29tcGxpY2F0ZWQsIGVzcGVjaWFsbHkgd2hlbiBjb21iaW5lZCB3aXRoCj4gdmlydHVhbGlz YXRpb24uIFRvIHNpbXBsaWZ5IHRoaW5ncyB3ZSBpbml0aWFsbHkgb21pdCB0aGUgZm9sbG93aW5n Cj4gZnVuY3Rpb25hbGl0eToKPgo+IC0gSW50ZXJydXB0IC0+IHZDUFUgLT4gcENQVSBhZmZpbml0 eS4gVGhlIG1hbmFnZW1lbnQgb2YgcGh5c2ljYWwgdnMKPiAgICB2aXJ0dWFsIENvbGxlY3Rpb25z IGlzIGEgZmVhdHVyZSBvZiBHSUN2NCwgdGh1cyBpcyBvbWl0dGVkIGluIHRoaXMKPiAgICBkZXNp Z24gZm9yIEdJQ3YzLiBQaHlzaWNhbCBpbnRlcnJ1cHRzIHdoaWNoIG9jY3VyIG9uIGEgcENQVSB3 aGVyZQo+ICAgIHRoZSB0YXJnZXQgdkNQVSBpcyBub3QgYWxyZWFkeSByZXNpZGVudCB3aWxsIGJl IGZvcndhcmRlZCAodmlhIElQSSkKPiAgICB0byB0aGUgY29ycmVjdCBwQ1BVIGZvciBpbmplY3Rp b24gdmlhIHRoZSBleGlzdGluZwo+ICAgIGB2Z2ljX3ZjcHVfaW5qZWN0X2lycWAgbWVjaGFuaXNt IChleHRlbmRlZCB0byBoYW5kbGUgTFBJIGluamVjdGlvbgo+ICAgIGNvcnJlY3RseSkuCj4gLSBD bGVhcmluZyBvZiB0aGUgcGVuZGluZyBzdGF0ZSBvZiBhbiBMUEkgdW5kZXIgdmFyaW91cyBjaXJj dW1zdGFuY2VzCj4gICAgKGBNT1ZJYCwgYERJU0NBUkRgLCBgQ0xFQVJgIGNvbW1hbmRzKSBpcyBu b3QgZG9uZS4gVGhpcyB3aWxsIHJlc3VsdAo+ICAgIGluIGd1ZXN0cyBzZWVpbmcgc29tZSBwZXJo YXBzIHNwdXJpb3VzIGludGVycnVwdHMuCj4gLSB2SVRTIGZ1bmN0aW9uYWxpdHkgd2lsbCBvbmx5 IGJlIGF2YWlsYWJsZSBvbiA2NC1iaXQgQVJNIGhvc3RzLAo+ICAgIGF2b2lkaW5nIHRoZSBuZWVk IHRvIHdvcnJ5IGFib3V0IGZhc3QgYWNjZXNzIHRvIGd1ZXN0IG93bmVkIGRhdGEKPiAgICBzdHJ1 Y3R1cmVzICg2NC1iaXQgdXNlcyBhIGRpcmVjdCBtYXApLiAoTkI6IDMyLWJpdCBndWVzdHMgb24g NjQtYml0Cj4gICAgaG9zdHMgY2FuIGJlIGNvbnNpZGVyZWQgdG8gaGF2ZSBhY2Nlc3MpCj4KPiAj IHBJVFMKPgo+ICMjIEFzc3VtcHRpb25zCj4KPiBJdCBpcyBhc3N1bWVkIHRoYXQgYEdJVFNfVFlQ RVIuSURiaXRzYCBpcyBsYXJnZSBlbm91Z2ggdGhhdCB0aGVyZSBhcmUKPiBzdWZmaWNpZW50IExQ SXMgYXZhaWxhYmxlIHRvIGNvdmVyIHRoZSBzdW0gb2YgdGhlIG51bWJlciBvZiBwb3NzaWJsZQo+ IGV2ZW50cyBnZW5lcmF0ZWQgYnkgZWFjaCBkZXZpY2UgaW4gdGhlIHN5c3RlbSAodGhhdCBpcyB0 aGUgc3VtIG9mIHRoZQo+IGFjdHVhbCBldmVudHMgZm9yIGVhY2ggYml0IG9mIGhhcmR3YXJlLCBy YXRoZXIgdGhhbiB0aGUgbm90aW9uYWwKPiBwZXItZGV2aWNlIG1heGltdW0gZnJvbSBgR0lUU19U WVBFUi5JZGJpdHNgKS4KPgo+IFRoaXMgYXNzdW1wdGlvbiBhdm9pZHMgdGhlIG5lZWQgdG8gZG8g bWVtb3J5IGFsbG9jYXRpb25zIGFuZCBpbnRlcnJ1cHQKPiByb3V0aW5nIGF0IHJ1biB0aW1lLCBl LmcuIGR1cmluZyBjb21tYW5kIHByb2Nlc3NpbmcgYnkgYWxsb3dpbmcgdXMgdG8KPiBzZXR1cCBl dmVyeXRoaW5nIHVwIGZyb250Lgo+Cj4gIyMgRHJpdmVyCj4KPiBUaGUgcGh5c2ljYWwgZHJpdmVy IHdpbGwgcHJvdmlkZSBmdW5jdGlvbnMgZm9yIGVuYWJsaW5nLCBkaXNhYmxpbmcKPiByb3V0aW5n IGV0YyBhIHNwZWNpZmllZCBpbnRlcnJ1cHQsIHZpYSB0aGUgdXN1YWwgWGVuIEFQSXMgZm9yIGRv aW5nCj4gc3VjaCB0aGluZ3MuCj4KPiBUaGlzIHdpbGwgbGlrZWx5IGludm9sdmUgaW50ZXJhY3Rp bmcgd2l0aCB0aGUgcGh5c2ljYWwgSVRTIGNvbW1hbmQKPiBxdWV1ZSBldGMuIEluIHRoaXMgZG9j dW1lbnQgc3VjaCBpbnRlcmFjdGlvbnMgYXJlIGNvbnNpZGVyZWQgaW50ZXJuYWwKPiB0byB0aGUg ZHJpdmVyIChpLmUuIHdlIGNhcmUgdGhhdCB0aGUgQVBJIHRvIGVuYWJsZSBhbiBpbnRlcnJ1cHQK PiBleGlzdHMsIG5vdCBob3cgaXQgaXMgaW1wbGVtZW50ZWQpLgo+Cj4gVGhlIHBoeXNpY2FsIElU UyB3aWxsIGJlIHByb3Zpc2lvbmVkIHdpdGggd2hhdGV2ZXIgdGFibGVzIGl0IHJlcXVlc3RzCj4g dmlhIGl0cyBgR0lUU19CQVNFUm5gIHJlZ2lzdGVycy4KPgo+ICMjIENvbGxlY3Rpb25zCj4KPiBU aGUgYHBJVFNgIHdpbGwgYmUgY29uZmlndXJlZCBhdCBzdGFydCBvZiBkYXkgd2l0aCAxIENvbGxl Y3Rpb24gbWFwcGVkCj4gdG8gZWFjaCBwaHlzaWNhbCBwcm9jZXNzb3IsIHVzaW5nIHRoZSBgTUFQ Q2AgY29tbWFuZCBvbiB0aGUgcGh5c2ljYWwKPiBJVFMuCj4KPiAjIyBQZXIgRGV2aWNlIEluZm9y bWF0aW9uCj4KPiBFYWNoIHBoeXNpY2FsIGRldmljZSBpbiB0aGUgc3lzdGVtIHdoaWNoIGNhbiBi ZSB1c2VkIHRvZ2V0aGVyIHdpdGggYW4KPiBJVFMgKHdoZXRoZXIgdXNpbmcgcGFzc3Rocm91Z2gg b3Igbm90KSB3aWxsIGhhdmUgYXNzb2NpYXRlZCB3aXRoIGl0IGEKPiBkYXRhIHN0cnVjdHVyZToK Pgo+ICAgICAgc3RydWN0IGl0c19kZXZpY2Ugewo+ICAgICAgICAgIHN0cnVjdCBwaXRzICpwaXRz Owo+ICAgICAgICAgIHVpbnROTl90IHBoeXNfZGV2aWNlX2lkOwo+ICAgICAgICAgIHVpbnROTl90 IHZpcnRfZGV2aWNlX2lkOwo+ICAgICAgICAgIHVuc2lnbmVkIGludCAqZXZlbnRzOwo+ICAgICAg ICAgIHVuc2lnbmVkIGludCBucl9ldmVudHM7Cj4gICAgICAgICAgc3RydWN0IHBhZ2VfaW5mbyAq cGl0dDsKPiAgICAgICAgICB1bnNpZ25lZCBpbnQgbnJfcGl0dF9wYWdlczsKPiAgICAgICAgICAv KiBPdGhlciBmaWVsZHMgcmVsYXRpbmcgdG8gcElUUyBtYWludGVuYW5jZSBidXQgdW5yZWxhdGVk IHRvIHZJVFMgKi8KPiAgICAgIH07Cj4KPiBXaGVyZToKPgo+IC0gYHBpdHNgOiBQb2ludGVyIHRv IHRoZSBhc3NvY2lhdGVkIHBoeXNpY2FsIElUUy4KPiAtIGBwaHlzX2RldmljZV9pZGA6IFRoZSBw aHlzaWNhbCBkZXZpY2UgSUQgb2YgdGhlIHBoeXNpY2FsIGRldmljZQo+IC0gYHZpcnRfZGV2aWNl X2lkYDogVGhlIHZpcnR1YWwgZGV2aWNlIElEIGlmIHRoZSBkZXZpY2UgaXMgYWNjZXNzaWJsZQo+ ICAgIHRvIGEgZG9tYWluCj4gLSBgZXZlbnRzYDogQW4gYXJyYXkgbWFwcGluZyBhIHBlci1kZXZp Y2UgZXZlbnQgbnVtYmVyIGludG8gYSBwaHlzaWNhbAo+ICAgIExQSS4KPiAtIGBucl9ldmVudHNg OiBUaGUgbnVtYmVyIG9mIGV2ZW50cyB3aGljaCB0aGlzIGRldmljZSBpcyBhYmxlIHRvCj4gICAg Z2VuZXJhdGUuCj4gLSBgcGl0dGAsIGBucl9waXR0X3BhZ2VzYDogUmVjb3JkcyBhbGxvY2F0aW9u IG9mIHBhZ2VzIGZvciBwaHlzaWNhbAo+ICAgIElUVCAobm90IGRpcmVjdGx5IGFjY2Vzc2libGUp Lgo+Cj4gRHVyaW5nIGl0cyBsaWZldGltZSB0aGlzIHN0cnVjdHVyZSBtYXkgYmUgcmVmZXJlbmNl ZCBieSBzZXZlcmFsCj4gZGlmZmVyZW50IG1hcHBpbmdzIChlLmcuIHBoeXNpY2FsIGFuZCB2aXJ0 dWFsIGRldmljZSBpZCBtYXBzLCB2aXJ0dWFsCj4gY29sbGVjdGlvbiBkZXZpY2UgaWQpLgo+Cj4g IyMgRGV2aWNlIERpc2NvdmVyeS9SZWdpc3RyYXRpb24gYW5kIENvbmZpZ3VyYXRpb24KPgo+IFBl ciBkZXZpY2UgaW5mb3JtYXRpb24gd2lsbCBiZSBkaXNjb3ZlcmVkIGJhc2VkIG9uIGZpcm13YXJl IHRhYmxlcyAoRFQKPiBvciBBQ1BJKSBhbmQgaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgZG9tMCAo ZS5nLiByZWFkaW5nIGFzc29jaWF0ZWQgUENJCj4gY2ZnIHNwYWNlLCByZWdpc3RyYXRpb24gdmlh IFBIWVNERVZPUF9wY2lfZGV2aWNlX2FkZCBvciBuZXcgY3VzdG9tCj4gaHlwZXJjYWxscykuCj4K PiBUaGlzIGluZm9ybWF0aW9uIHNoYWxsIGluY2x1ZGUgYXQgbGVhc3Q6Cj4KPiAtIFRoZSBEZXZp Y2UgSUQgb2YgdGhlIGRldmljZS4KPiAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBFdmVudHMgd2hp Y2ggdGhlIGRldmljZSBpcyBjYXBhYmxlIG9mCj4gICAgZ2VuZXJhdGluZy4KPgo+IFdoZW4gYSBk ZXZpY2UgaXMgZGlzY292ZXJlZC9yZWdpc3RlcmVkIChpLmUuIHdoZW4gYWxsIG5lY2Vzc2FyeQo+ IGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSkgdGhlbjoKPgo+IC0gYHN0cnVjdCBpdHNfZGV2aWNl YCBhbmQgdGhlIGVtYmVkZGVkIGBldmVudHNgIGFycmF5IHdpbGwgYmUKPiAgICBhbGxvY2F0ZWQg KHRoZSBsYXR0ZXIgd2l0aCBgbnJfZXZlbnRzYCBlbGVtZW50cykuCj4gLSBUaGUgYHN0cnVjdCBp dHNfZGV2aWNlYCB3aWxsIGJlIGluc2VydGVkIGludG8gYSBtYXBwaW5nIChwb3NzaWJseSBhbgo+ ICAgIFItQiB0cmVlKSBmcm9tIGl0cyBwaHlzaWNhbCBEZXZpY2UgSUQgdG8gdGhlIGBzdHJ1Y3Qg aXRzYC4KPiAtIGBucl9ldmVudHNgIHBoeXNpY2FsIExQSXMgd2lsbCBiZSBhbGxvY2F0ZWQgYW5k IHJlY29yZGVkIGluIHRoZQo+ICAgIGBldmVudHNgIGFycmF5Lgo+IC0gQW4gSVRUIHRhYmxlIHdp bGwgYmUgYWxsb2NhdGVkIGZvciB0aGUgZGV2aWNlIGFuZCB0aGUgYXBwcm9wcmlhdGUKPiAgICBg TUFQRGAgY29tbWFuZCB3aWxsIGJlIGlzc3VlZCB0byB0aGUgcGh5c2ljYWwgSVRTLiBUaGUgbG9j YXRpb24gd2lsbAo+ICAgIGJlIHJlY29yZGVkIGluIGBzdHJ1Y3QgaXRzX2RldmljZS5waXR0YC4K PiAtIEVhY2ggRXZlbnQgd2hpY2ggdGhlIGRldmljZSBtYXkgZ2VuZXJhdGUgd2lsbCBiZSBtYXBw ZWQgdG8gdGhlCj4gICAgY29ycmVzcG9uZGluZyBMUEkgaW4gdGhlIGBldmVudHNgIGFycmF5IGFu ZCBhIGNvbGxlY3Rpb24sIGJ5IGlzc3VpbmcKPiAgICBhIHNlcmllcyBvZiBgTUFQVklgIGNvbW1h bmRzLiBFdmVudHMgd2lsbCBiZSBhc3NpZ25lZCB0byBwaHlzaWNhbAo+ICAgIGNvbGxlY3Rpb25z IGluIGEgcm91bmQtcm9iaW4gZmFzaGlvbi4KPgo+IFRoaXMgc2V0dXAgbXVzdCBvY2N1ciBmb3Ig YSBnaXZlbiBkZXZpY2UgYmVmb3JlIGFueSBJVFMgaW50ZXJydXB0cyBtYXkKPiBiZSBjb25maWd1 cmVkIGZvciB0aGUgZGV2aWNlIGFuZCBjZXJ0YWlubHkgYmVmb3JlIGEgZGV2aWNlIGlzIHBhc3Nl ZAo+IHRocm91Z2ggdG8gYSBndWVzdC4gVGhpcyBpbXBsaWVzIHRoYXQgZG9tMCBjYW5ub3QgdXNl IE1TSXMgb24gYSBQQ0kKPiBkZXZpY2UgYmVmb3JlIGhhdmluZyBjYWxsZWQgYFBIWVNERVZPUF9w Y2lfZGV2aWNlX2FkZGAuCj4KPiAjIERldmljZSBBc3NpZ25tZW50Cj4KPiBFYWNoIGRvbWFpbiB3 aWxsIGhhdmUgYW4gYXNzb2NpYXRlZCBtYXBwaW5nIGZyb20gdmlydHVhbCBkZXZpY2UgaWRzCj4g aW50byBhIGRhdGEgc3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIHBoeXNpY2FsIGRldmljZSwgaW5j bHVkaW5nIGEKPiByZWZlcmVuY2UgdG8gdGhlIHJlbGV2YW50IGBzdHJ1Y3QgaXRzX2RldmljZWAu Cj4KPiBUaGUgbnVtYmVyIG9mIHBvc3NpYmxlIGRldmljZSBJRHMgbWF5IGJlIGxhcmdlIHNvIGEg c2ltcGxlIGFycmF5IG9yCj4gbGlzdCBpcyBsaWtlbHkgdW5zdWl0YWJsZS4gQSB0cmVlIChlLmcu IFJlZC1CbGFjayBtYXkgYmUgYSBzdWl0YWJsZQo+IGRhdGEgc3RydWN0dXJlLiBDdXJyZW50bHkg d2UgZG8gbm90IG5lZWQgdG8gcGVyZm9ybSBsb29rdXBzIGluIHRoaXMKPiB0cmVlIG9uIGFueSBo b3QgcGF0aHMuCj4KPiBfTm90ZV86IEluIHRoZSBjb250ZXh0IG9mIHZpcnR1YWxpc2VkIGRldmlj ZSBpZHMgKGVzcGVjaWFsbHkgZm9yIGRvbVUpCj4gaXQgbWF5IGJlIHBvc3NpYmxlIHRvIGFycmFu Z2UgZm9yIHRoZSB1cHBlciBib3VuZCBvbiB0aGUgbnVtYmVyIG9mCj4gZGV2aWNlIElEcyB0byBi ZSBsb3dlciBhbGxvd2luZyBhIG1vcmUgZWZmaWNpZW50IGRhdGEgc3RydWN0dXJlIHRvIGJlCj4g dXNlZC4gVGhpcyBpcyBsZWZ0IGZvciBhIGZ1dHVyZSBpbXByb3ZlbWVudC4KPgo+IFdoZW4gYSBk ZXZpY2UgaXMgYXNzaWduZWQgdG8gYSBkb21haW4gKGluY2x1ZGluZyB0byBkb21haW4gMCkgdGhl Cj4gbWFwcGluZyBmb3IgdGhlIG5ldyB2aXJ0dWFsIGRldmljZSBJRCB3aWxsIGJlIGVudGVyZWQg aW50byB0aGUgdHJlZS4KPgo+IER1cmluZyBhc3NpZ25tZW50IGFsbCBMUElzIGFzc29jaWF0ZWQg d2l0aCB0aGUgZGV2aWNlIHdpbGwgYmUgcm91dGVkCj4gdG8gdGhlIGd1ZXN0IChpLmUuIGByb3V0 ZV9pcnFfdG9fZ3Vlc3RgIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoIExQSSBpbgo+IHRoZSBgc3Ry dWN0IGl0c19kZXZpY2UuZXZlbnRzYCBhcnJheSkgYW5kIHRoZSBwTFBJIHdpbGwgYmUgZW5hYmxl ZCBpbgo+IHRoZSBwaHlzaWNhbCBMUEkgY29uZmlndXJhdGlvbiB0YWJsZSB3aXRoIGEgcHJpb3Jp dHkgb2YgYEdJQ19QUklfSVJRYAo+IChub3QgYW55IHByaW9yaXR5IGZyb20gdGhlIGd1ZXN0KS4K Pgo+ICMgdklUUwo+Cj4gQSBndWVzdCBkb21haW4gd2hpY2ggaXMgYWxsb3dlZCB0byB1c2UgSVRT IGZ1bmN0aW9uYWxpdHkgKGkuZS4gaGFzCj4gYmVlbiBhc3NpZ25lZCBwYXNzLXRocm91Z2ggZGV2 aWNlcyB3aGljaCBjYW4gZ2VuZXJhdGUgTVNJcykgd2lsbCBiZQo+IHByZXNlbnRlZCB3aXRoIGEg dmlydHVhbGlzZWQgSVRTLgo+Cj4gQWNjZXNzZXMgdG8gdGhlIHZJVFMgcmVnaXN0ZXJzIHdpbGwg dHJhcCB0byBYZW4gYW5kIGJlIGVtdWxhdGVkIGFuZCBhCj4gdmlydHVhbGlzZWQgQ29tbWFuZCBR dWV1ZSB3aWxsIGJlIHByb3ZpZGVkLgo+Cj4gQ29tbWFuZHMgZW50ZXJlZCBvbnRvIHRoZSB2aXJ0 dWFsIENvbW1hbmQgUXVldWUgd2lsbCBiZSB0cmFuc2xhdGVkCj4gaW50byBwaHlzaWNhbCBjb21t YW5kcywgYXMgZGVzY3JpYmVkIGxhdGVyIGluIHRoaXMgZG9jdW1lbnQuCj4KPiBUaGVyZSBhcmUg b3RoZXIgYXNwZWN0cyB0byB2aXJ0dWFsaXNpbmcgdGhlIElUUyAoTFBJIGNvbGxlY3Rpb24KPiBt YW5hZ2VtZW50LCBhc3NpZ25tZW50IG9mIExQSSByYW5nZXMgdG8gZ3Vlc3RzLCBkZXZpY2UKPiBt YW5hZ2VtZW50KS4gSG93ZXZlciB0aGVzZSBhcmUgb25seSBjb25zaWRlcmVkIGhlcmUgdG8gdGhl IGV4dGVudAo+IG5lZWRlZCBmb3IgZGVzY3JpYmluZyB0aGUgdklUUyBlbXVsYXRpb24uCj4KPiAj IyBYZW4gaW50ZXJhY3Rpb24gd2l0aCBndWVzdCBPUyBwcm92aXNpb25lZCB2SVRTIG1lbW9yeQo+ Cj4gTWVtb3J5IHdoaWNoIHRoZSBndWVzdCBwcm92aXNpb25zIHRvIHRoZSB2SVRTIChJVFQgdmlh IGBNQVBEYCBvciBvdGhlcgo+IHRhYmxlcyB2aWEgYEdJVFNfQkFTRVJuYCkgbmVlZHMgY2FyZWZ1 bCBoYW5kbGluZyBpbiBYZW4uCj4KPiAjIyMgVHJ1c3QKPgo+IFNpbmNlIFhlbiBjYW5ub3QgdHJ1 c3QgZGF0YSBpbiBkYXRhIHN0cnVjdHVyZXMgY29udGFpbmVkIGluIHN1Y2gKPiBtZW1vcnkgaWYg YSBndWVzdCBjYW4gdHJhbXBsZSBvdmVyIGl0IGF0IHdpbGwuIFRoZXJlZm9yZSBYZW4gZWl0aGVy Cj4gbXVzdCB0YWtlIGdyZWF0IGNhcmUgd2hlbiBhY2Nlc3NpbmcgZGF0YSBzdHJ1Y3R1cmVzIHN0 b3JlZCBpbiBzdWNoCj4gbWVtb3J5IHRvIHZhbGlkYXRlIHRoZSBjb250ZW50cyBlLmcuIG5vdCB0 cnVzdCB0aGF0IHZhbHVlcyBhcmUgd2l0aGluCj4gdGhlIHJlcXVpcmVkIGxpbWl0cyBvciBpdCBt dXN0IHRha2Ugc3RlcHMgdG8gcmVzdHJpY3QgZ3Vlc3QgYWNjZXNzIHRvCj4gdGhlIG1lbW9yeSB3 aGVuIGl0IGlzIHByb3Zpc2lvbmVkLiBTaW5jZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFyZQo+IHNp bXBsZSBhbmQgbW9zdCBhY2Nlc3NvcnMgbmVlZCB0byBkbyBib3VuZHMgY2hlY2sgYW55d2F5IGl0 IGlzCj4gY29uc2lkZXJlZCBzdWZmaWNpZW50IHRvIHNpbXBseSBkbyB0aGUgbmVjZXNzYXJ5IGNo ZWNrcyBvbiBhY2Nlc3MuCj4KPiAqKkFueSBpbmZvcm1hdGlvbiByZWFkIG1lbW9yeSB3aGljaCBo YXMgYmVlbiBwcm92aXNpb25lZCBieSB0aGUgZ3Vlc3QKPiAgICAgT1Mgc2hvdWxkIG5vdCBiZSB0 cnVzdGVkIGFuZCBtdXN0IGJlIGNhcmVmdWxseSBjaGVja2VkIChlLmcuIHJhbmdlcwo+ICAgICBl dGMpIGJlZm9yZSB1c2UuKioKPgo+ICMjIyBNYXBwaW5nCj4KPiBNb3N0IGRhdGEgc3RydWN0dXJl cyBzdG9yZWQgaW4gdGhpcyBzaGFyZWQgbWVtb3J5IGFyZSBhY2Nlc3NlZCBvbiB0aGUKPiBob3Qg aW50ZXJydXB0IGluamVjdGlvbiBwYXRoIGFuZCBtdXN0IHRoZXJlZm9yZSBiZSBxdWlja2x5IGFj Y2Vzc2libGUKPiBmcm9tIHdpdGhpbiBYZW4uIFNpbmNlIHdlIGhhdmUgcmVzdHJpY3RlZCB2aXRz IHN1cHBvcnQgdG8gNjQtYml0IGhvc3RzCj4gb25seSBgbWFwX2RvbWFpbl9wYWdlYCBpcyBmYXN0 IGVub3VnaCB0byBiZSB1c2VkIG9uIHRoZSBmbHkgYW5kCj4gdGhlcmVmb3JlIHdlIGRvIG5vdCBu ZWVkIHRvIGJlIGNvbmNlcm5lZCBhYm91dCB1bmJvdW5kZWQgYW1vdW50cyBvZgo+IHBlcm1hbmVu dGx5IG1hcHBlZCBtZW1vcnkgY29uc3VtZWQgYnkgZWFjaCBgTUFQRGAgY29tbWFuZC4KPgo+IEFs dGhvdWdoIGBtYXBfZG9tYWluX3BhZ2VgIGlzIGZhc3QsIGBwMm1fbG9va3VwYCAodHJhbnNsYXRp b24gZnJvbSBJUEEKPiB0byBQQSkgaXMgbm90IG5lY2Vzc2FyaWx5IHNvLiBGb3Igbm93IHdlIGFj Y2VwdCB0aGlzLCBhcyBhIGZ1dHVyZQo+IGV4dGVuc2lvbiBhIHNwYXJzZSBtYXBwaW5nIG9mIHRo ZSBndWVzdCBkZXZpY2UgdGFibGUgaW4gdm1hcCBzcGFjZQo+IGNvdWxkIGJlIGNvbnNpZGVyZWQs IHdpdGggbGltaXRzIG9uIHRoZSB0b3RhbCBhbW91bnQgb2Ygdm1hcCBzcGFjZSB3aGljaAo+IHdl IGFsbG93IGVhY2ggZG9tYWluIHRvIGNvbnN1bWUuCj4KPiBUaGUgYEdJVFNfQkFTRVJuYCByZWdp c3RlcnMgYWxsb3cgZm9yIHRoZSBndWVzdCB0byBzcGVjaWZ5IGNhY2hlCj4gYXR0cmlidXRlcyBm b3IgdGhlIG1lbW9yeS4gRm9yIG5vdyB3ZSByZXF1aXJlIHRoYXQgdGhlc2UgaGF2ZSB0aGUgc2Ft ZQo+IGF0dHJpYnV0ZXMgYXMgaHlwZXJjYWxsIGFyZ3VtZW50cyBpbiBnZW5lcmFsIChzZWUgYHB1 YmxpYy9hcmNoLWFybS5oYCkKPgo+IEluIGFkZGl0aW9uIHdoaWxlIGBHSVRTX0JBU0VSbmAgYWxs b3dzIHRoZSBDYWNoZWFiaWxpdHkgdG8gYmUKPiBzcGVjaWZpZWQgYXMgYERldmljZS1uR25SbkVg IHdlIHJlcXVpcmUgdGhhdCB0aGUgdGFibGVzIHByb3ZpZGVkIGJlIGluCj4gbm9ybWFsIGd1ZXN0 IFJBTSAobm90IE1NSU8sIG5vdCBncmFudGVkIG1lbW9yeSBldGMpLCB0aGF0IGlzIGl0IG11c3QK PiBoYXZlIHR5cGUgYHAybV9yYW1fcndgLgo+Cj4gIyMgdklUUyBwcm9wZXJ0aWVzCj4KPiBUaGUg dklUUyBpbXBsZW1lbnRhdGlvbiBzaGFsbCBoYXZlOgo+Cj4gLSBgR0lUU19UWVBFUi5IQ0MgPT0g bnJfdmNwdXMgKyAxYC4KPiAtIGBHSVRTX1RZUEVSLlBUQSA9PSAwYC4gVGFyZ2V0IGFkZHJlc3Nl cyBhcmUgbGluZWFyIHByb2Nlc3NvciBudW1iZXJzLgo+IC0gYEdJVFNfVFlQRVIuRGV2Yml0cyA9 PSBTZWUgYmVsb3dgLgo+IC0gYEdJVFNfVFlQRVIuSURiaXRzID09IFNlZSBiZWxvd2AuCj4gLSBg R0lUU19UWVBFUi5JVFQgRW50cnkgU2l6ZSA9PSA3YCwgbWVhbmluZyA4IGJ5dGVzLCB3aGljaCBp cyB0aGUgc2l6ZQo+ICAgIG9mIGBzdHJ1Y3Qgdml0dGAgKGRlZmluZWQgYmVsb3cpLgo+Cj4gYEdJ VFNfVFlQRVIuRGV2Yml0c2AgYW5kIGBHSVRTX1RZUEVSLklkYml0c2Agd2lsbCBuZWVkIHRvIGJl IGNob3NlbiB0bwo+IHJlZmxlY3QgdGhlIGhvc3QgYW5kIGd1ZXN0IGNvbmZpZ3VyYXRpb25zIChu dW1iZXIgb2YgTFBJcywgbWF4aW11bQo+IGRldmljZSBJRCBldGMpLgo+Cj4gT3RoZXIgZmllbGRz IChub3QgbWVudGlvbmVkIGhlcmUpIHdpbGwgYmUgc2V0IHRvIHNvbWUgc2Vuc2libGUgKG9yCj4g bWFuZGF0ZWQpIHZhbHVlLgo+Cj4gVGhlIGBHSVRTX0JBU0VSMGAgd2lsbCBiZSBzZXR1cCB0byBy ZXF1ZXN0IHN1ZmZpY2llbnQgbWVtb3J5IGZvciBhCj4gZGV2aWNlIHRhYmxlIGNvbnNpc3Rpbmcg b2YgZW50cmllcyBvZjoKPgo+ICAgICAgc3RydWN0IHZkZXZpY2VfdGFibGUgewo+ICAgICAgICAg IHVpbnQ2NF90IHZpdHRfaXBhOwo+ICAgICAgICAgIHVpbnQzMl90IHZpdHRfc2l6ZTsKPiAgICAg ICAgICB1aW50MzJfdCBwYWRkaW5nOwo+ICAgICAgfTsKPiAgICAgIEJVSUxEX0JVR19PTihzaXpl b2Yoc3RydWN0IHZkZXZpY2VfdGFibGUpICE9IDE2KTsKPgo+IE9uIHdyaXRlIHRvIGBHSVRTX0JB U0VSMGAgdGhlIHJlbGV2YW50IGRldGFpbHMgb2YgdGhlIERldmljZSBUYWJsZQo+IChJUEEsIHNp emUsIGNhY2hlIGF0dHJpYnV0ZXMgdG8gdXNlIHdoZW4gbWFwcGluZykgd2lsbCBiZSByZWNvcmRl ZCBpbgo+IGBzdHJ1Y3QgZG9tYWluYC4KPgo+IEFsbCBvdGhlciBgR0lUU19CQVNFUm4uVmFsaWQg PT0gMGAuCj4KPiAjIyB2SVRTIHRvIHBJVFMgbWFwcGluZwo+Cj4gQSBwaHlzaWNhbCBzeXN0ZW0g bWF5IGhhdmUgbXVsdGlwbGUgcGh5c2ljYWwgSVRTcy4KPgo+IFdpdGggdGhlIHNpbXBsaWZpZWQg dml0cyBjb21tYW5kIG1vZGVsIHByZXNlbnRlZCBoZXJlIG9ubHkgYSBzaW5nbGUKPiBgdml0c2Ag aXMgcmVxdWlyZWQuCj4KPiBJbiB0aGUgZnV0dXJlIGEgbW9yZSBjb21wbGV4IGFycmFuZ2VtZW50 IG1heSBiZSBkZXNpcmVkLiBTaW5jZSB0aGUKPiBjaG9pY2Ugb2YgbW9kZWwgaXMgaW50ZXJuYWwg dG8gdGhlIGh5cGVydmlzb3IvdG9vbHMgYW5kIGlzCj4gY29tbXVuaWNhdGVkIHRvIHRoZSBndWVz dCB2aWEgZmlybXdhcmUgdGFibGVzIHdlIGFyZSBub3QgdGllZCB0byB0aGlzCj4gbW9kZWwgYXMg YW4gQUJJIGlmIHdlIGRlY2lkZSB0byBjaGFuZ2UuCj4KPiBXaGVuIGNvbnN0cnVjdGluZyBkb20w IGl0IHdpbGwgdGhlcmVmb3JlIGJlIG5lY2Vzc2FyeSB0byByZXdyaXRlIGFueQo+IERUUyBwcm9w ZXJ0aWVzIHdoaWNoIHJlZmVyIHRvIGFuIElUUyB0byBwb2ludCB0byB0aGUgc2luZ2xlIHByb3Zp ZGVkCj4gSVRTLCBhcyB3ZWxsIGFzIGRyb3BwaW5nIGFsbCBJVFMgbm9kZXMgYW5kIHJlcGxhY2lu ZyB0aGVtIHdpdGggYQo+IHNpbmdsZSBub2RlIHJlcHJlc2VudGluZyB0aGUgdklUUy4KPgo+ICMj IE1hcHBpbmcgZnJvbSBgdkxQSWAgYmFjayB0byBgcExQSWAKPgo+IFdoaWxlIHdlIGhhdmUgYXJy YW5nZWQgZm9yIGEgKGBwRGV2aWNlYCxgcEV2ZW50YCkgdG8gbWFwIHRvIGEgc2luZ2xlCj4gYHBM UElgIHdlIGNhbm5vdCBndWFyYW50ZWUgdGhhdCBhIGdpdmVuIGB2TFBJYCBpcyBtYXBwZWQgYnkg YSBzaW5nbGUKPiAoYHZEZXZpY2VgLGB2RXZlbnRgKSBzaW5jZSB0aGUgZ3Vlc3QgbWF5IHNldHVw IG11bHRpcGxlIElUVCB0YWJsZXMKPiBzdWNoIHRoYXQgdGhpcyBpcyBub3QgdGhlIGNhc2UuIEVu Zm9yY2luZyB0aGF0IHRoaXMgaXMgdGhlIGNhc2UgaXMKPiBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2 ZS4KPgo+IFRoZXJlZm9yZSBpdCBpcyBub3QgaW4gZ2VuZXJhbCBwb3NzaWJsZSB0byBhc3NvY2lh dGUgYSBgdkxQSWAgd2l0aCBhCj4gYHBMUElgLgo+Cj4gIyMgTFBJIENvbmZpZ3VyYXRpb24gVGFi bGUgVmlydHVhbGlzYXRpb24KPgo+IEEgYHZMUElgIGNhbm5vdCBpbiBnZW5lcmFsIGJlIGFzc29j aWF0ZWQgd2l0aCBhIHNwZWNpZmljCj4gYHBMUElgLiBUaGVyZWZvcmUgdGhlcmUgaXMgbm8gdmly dHVhbGlzYXRpb24gdG8gYmUgZG9uZSBoZXJlLgo+Cj4gSW5zdGVhZCBhIGxvb2t1cCBpcyBtYWRl IGludG8gdGhlIHRhYmxlIGVhY2ggdGltZSBhIGB2TFBJYCBpcyB0byBiZQo+IGRlbGl2ZXJlZC4K Pgo+ICAgICAgZGVmaW5lIGdldF92bHBpX2NmZyhkb21haW4sIHZscGksIHVpbnQ4X3QgKmNmZyk6 Cj4gICAgICAgICAgb2Zmc2V0ID0gdmxwaSpzaXplb2YodWludDhfdCkKPiAgICAgICAgICBpZiBv ZmZzZXQgPiA8TFBJIENGRyBUYWJsZSBzaXplPjogZXJyb3IKPgo+ICAgICAgICAgIGxwaV9lbnRy eSA9IDxMUEkgQ0ZHIElQQT4gKyBvZmZzZXQKPiAgICAgICAgICBwYWdlID0gcDJtX2xvb2t1cChk b21haW4sIGxwaV9lbnRyeSwgcDJtX3JhbSkKPiAgICAgICAgICBpZiAhcGFnZTogZXJyb3IKPiAg ICAgICAgICAvKiBuYjogbm9uLVJBTSBwYWdlcywgZS5nLiBncmFudCBtYXBwaW5ncywKPiAgICAg ICAgICAgKiBhcmUgcmVqZWN0ZWQgYnkgdGhpcyBsb29rdXAgKi8KPgo+ICAgICAgICAgIGxwaV9t YXBwaW5nID0gbWFwX2RvbWFpbl9wYWdlKHBhZ2UpCj4KPiAgICAgICAgICAqY2ZnID0gbHBpX21h cHBpbmdbPGFwcHJvcHJpYXRlIHBhZ2Ugb2Zmc2V0Pl07Cj4KPiAgICAgICAgICB1bm1hcF9kb21h aW5fcGFnZShscGlfbWFwcGluZykKPgo+IE5vdGUgdGhhdCBwaHlzaWNhbCBpbnRlcnJ1cHRzIGFy ZSBhbHdheXMgY29uZmlndXJlZCB3aXRoIGEgcHJpb3JpdHkgb2YKPiBgR0lDX1BSSV9JUlFgLCBy ZWdhcmRsZXNzIG9mIHRoZSBwcmlvcml0eSBvZiBhbnkgdmlydHVhbCBpbnRlcnJ1cHQuCj4KPiAj IyMgRW5hYmxpbmcgYW5kIGRpc2FibGluZyBMUElzCj4KPiBTaW5jZSB0aGVyZSBpcyBubyAxOjEg bGluayBiZXR3ZWVuIGEgYHZMUElgIGFuZCBgcExQSWAgZW5hYmxpbmcgYW5kCj4gZGlzYWJsaW5n IG9mIHBoeWlzY2FsIExQSXMgY2Fubm90IGJlIGRyaXZlbiBmcm9tIHRoZSBzdGF0ZSBvZiBhbgo+ IGFzc29jaWF0ZWQgdkxQSS4KPgo+IEVhY2ggYHBMUElgIGlzIHJvdXRlZCBhbmQgZW5hYmxlZCBk dXJlaW5nIGRldmljZSBhc3NpZ25tZW50LCB0aGVyZWZvcmUKPiBpdCBpcyBwb3NzaWJsZSB0byBy ZWNlaXZlIGEgcGh5c2ljYWwgTFBJIHdoaWNoIGhhcyB5ZXQgdG8gYmUgcm91dGVkCj4gKHZpYSBh IGB2SVRTYCkgdG8gYSBgdkxQSWAgb3IgZm9yIHdoaWNoIHRoZSBgdkxQSWAgaGFzIG5vdCB5ZXQg YmUKPiBjb25maWd1cmVkL2VuYWJsZWQuCj4KPiBTaW1pbGFybHkgaWYgYSBndWVzdCByb3V0ZXMg bXVsdGlwbGUgRXZlbnRzIHRvIGEgc2luZ2xlIGB2TFBJYCB0aGUKPiBpbnRlcnJ1cHQgbWF5IGFs cmVhZHkgYmUgcGVuZGluZyB3aGVuIHdlIGF0dGVtcHQgdG8gZGVsaXZlciBpdC4KPgo+IFN1Y2gg YHBMUElgcyBzaGFsbCBiZSBpZ25vcmVkIGFuZCBsZWZ0IGluIHRoZSBwcmlvcml0eSBkcm9wcGVk IHN0YXRlCj4gKHBlciB0aGUgcmVhZCBmcm9tIGBHSUNDX0lBUmApLiBUaGV5IHdpbGwgbm90IGJl IGBFT0lgLWQgaW4gb3JkZXIgdG8KPiBhdm9pZCBhIHBvc3NpYmxlIGludGVycnVwdCBzdG9ybS4K Pgo+IE9uIGRldmljZSBkZWFzc2lnbm1lbnQgKGluY2x1ZGluZyBhcyBwYXJ0IG9mIGRvbWFpbiBk ZXN0cm95KSBhZnRlcgo+IHJlc2V0dGluZyB0aGUgZGV2aWNlIGl0IHdpbGwgYmUgbmVjZXNzYXJ5 IHRvIEVPSSBhbnkgaW50ZXJydXB0cyBpbgo+IHN1Y2ggYSBzdGF0ZSBieSB3YWxraW5nIG92ZXIg YWxsIGV2ZW50cyBpbiB0aGUgY29ycmVzcG9uZGluZyBgc3RydWN0Cj4gaXRzX2RldmljZWAuCj4K PiAjIyBMUEkgUGVuZGluZyBUYWJsZSBWaXJ0dWFsaXNhdGlvbgo+Cj4gQWNjb3JkaW5nIHRvIEdJ QyBzcGVjIDQuOC41IHRoaXMgdGFibGUgaXMgbm90IG5lY2Vzc2FyaWx5IGluIHN5bmMgYW5kCj4g dGhlIG1lY2hhbmlzbSB0byBmb3JjZSBhIHN5bmMgaXMgYElNUExFTUVOVEFUSU9OIERFRklORURg LCBoZW5jZSB3ZQo+IGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuCj4KPiAjIyBEZXZpY2UgVGFi bGUgVmlydHVhbGlzYXRpb24KPgo+IFRoZSBJUEEsIHNpemUgYW5kIGNhY2hlYWJpbGl0eSBhdHRy aWJ1dGVzIG9mIHRoZSBndWVzdCBkZXZpY2UgdGFibGUKPiB3aWxsIGJlIHJlY29yZGVkIGluIGBz dHJ1Y3QgZG9tYWluYCB1cG9uIHdyaXRlIHRvIGBHSVRTX0JBU0VSMGAuCj4KPiBJbiBvcmRlciB0 byBsb29rdXAgYW4gZW50cnkgZm9yIGBkZXZpY2VgOgo+Cj4gICAgICBkZWZpbmUge2dldCxzZXR9 X3ZkZXZpY2VfZW50cnkoZG9tYWluLCBkZXZpY2UsIHN0cnVjdCBkZXZpY2VfdGFibGUgKmVudHJ5 KToKPiAgICAgICAgICBvZmZzZXQgPSBkZXZpY2Uqc2l6ZW9mKHN0cnVjdCB2ZGV2aWNlX3RhYmxl KQo+ICAgICAgICAgIGlmIG9mZnNldCA+IDxEVCBzaXplPjogZXJyb3IKPgo+ICAgICAgICAgIGR0 X2VudHJ5ID0gPERUIGJhc2UgSVBBPiArIGRldmljZSpzaXplb2Yoc3RydWN0IHZkZXZpY2VfdGFi bGUpCj4gICAgICAgICAgcGFnZSA9IHAybV9sb29rdXAoZG9tYWluLCBkdF9lbnRyeSwgcDJtX3Jh bSkKPiAgICAgICAgICBpZiAhcGFnZTogZXJyb3IKPiAgICAgICAgICAvKiBuYjogbm9uLVJBTSBw YWdlcywgZS5nLiBncmFudCBtYXBwaW5ncywKPiAgICAgICAgICAgKiBhcmUgcmVqZWN0ZWQgYnkg dGhpcyBsb29rdXAgKi8KPgo+ICAgICAgICAgIGR0X21hcHBpbmcgPSBtYXBfZG9tYWluX3BhZ2Uo cGFnZSkKPgo+ICAgICAgICAgIGlmIChzZXQpCj4gICAgICAgICAgICAgICBkdF9tYXBwaW5nWzxh cHByb3ByaWF0ZSBwYWdlIG9mZnNldCBmcm9tIGRldmljZT5dID0gKmVudHJ5Owo+ICAgICAgICAg IGVsc2UKPiAgICAgICAgICAgICAgICplbnRyeSA9IGR0X21hcHBpbmdbPGFwcHJvcHJpYXRlIHBh Z2Ugb2Zmc2V0Pl07Cj4KPiAgICAgICAgICB1bm1hcF9kb21haW5fcGFnZShkdF9tYXBwaW5nKQo+ Cj4gU2luY2UgZXZlcnl0aGluZyBpcyBiYXNlZCB1cG9uIElQQSAoZ3Vlc3QgYWRkcmVzc2VzKSBh IG1hbGljaW91cyBndWVzdAo+IGNhbiBvbmx5IHJlZmVyZW5jZSBpdHMgb3duIFJBTSBoZXJlLgo+ Cj4gIyMgSVRUIFZpcnR1YWxpc2F0aW9uCj4KPiBUaGUgbG9jYXRpb24gb2YgYSBWSVRTIHdpbGwg aGF2ZSBiZWVuIHJlY29yZGVkIGluIHRoZSBkb21haW4gRGV2aWNlCj4gVGFibGUgYnkgYSBgTUFQ SWAgb3IgYE1BUFZJYCBjb21tYW5kIGFuZCBpcyBsb29rZWQgdXAgYXMgYWJvdmUuCj4KPiBUaGUg YHZpdHRgIGlzIGEgYHN0cnVjdCB2aXR0YDoKPgo+ICAgICAgc3RydWN0IHZpdHQgewo+ICAgICAg ICAgIHVpbnQxNl90IHZhbGlkOjE7Cj4gICAgICAgICAgdWludDE2X3QgcGFkOjE1Owo+ICAgICAg ICAgIHVpbnQxNl90IGNvbGxlY3Rpb247Cj4gICAgICAgICAgdWludDMyX3QgdmxwaTsKPiAgICAg IH07Cj4gICAgICBCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB2aXR0KSAhPSA4KTsKPgo+IEEg bG9va3VwIG9jY3VycyBzaW1pbGFyIHRvIGZvciBhIGRldmljZSB0YWJsZSwgdGhlIG9mZnNldCBp cyByYW5nZQo+IGNoZWNrZWQgYWdhaW5zdCB0aGUgYHZpdHRfc2l6ZWAgZnJvbSB0aGUgZGV2aWNl IHRhYmxlLiBUbyBsb29rdXAKPiBgZXZlbnRgIG9uIGBkZXZpY2VgOgo+Cj4gICAgICBkZWZpbmUg e2dldCxzZXR9X3ZpdHRfZW50cnkoZG9tYWluLCBkZXZpY2UsIGV2ZW50LCBzdHJ1Y3Qgdml0dCAq ZW50cnkpOgo+ICAgICAgICAgIGdldF92ZGV2aWNlX2VudHJ5KGRvbWFpbiwgZGV2aWNlLCAmZHQp Cj4KPiAgICAgICAgICBvZmZzZXQgPSBldmVudCpzaXplb2Yoc3RydWN0IHZpdHQpOwo+ICAgICAg ICAgIGlmIG9mZnNldCA+IGR0LT52aXR0X3NpemU6IGVycm9yCj4KPiAgICAgICAgICB2aXR0X2Vu dHJ5ID0gZHQtPnZpdGFfaXBhICsgZXZlbnQqc2l6ZW9mKHN0cnVjdCB2aXR0KQo+ICAgICAgICAg IHBhZ2UgPSBwMm1fbG9va3VwKGRvbWFpbiwgdml0dF9lbnRyeSwgcDJtX3JhbSkKPiAgICAgICAg ICBpZiAhcGFnZTogZXJyb3IKPiAgICAgICAgICAvKiBuYjogbm9uLVJBTSBwYWdlcywgZS5nLiBn cmFudCBtYXBwaW5ncywKPiAgICAgICAgICAgKiBhcmUgcmVqZWN0ZWQgYnkgdGhpcyBsb29rdXAg Ki8KPgo+ICAgICAgICAgIHZpdHRfbWFwcGluZyA9IG1hcF9kb21haW5fcGFnZShwYWdlKQo+Cj4g ICAgICAgICAgaWYgKHNldCkKPiAgICAgICAgICAgICAgIHZpdHRfbWFwcGluZ1s8YXBwcm9wcmlh dGUgcGFnZSBvZmZzZXQgZnJvbSBldmVudD5dID0gKmVudHJ5Owo+ICAgICAgICAgIGVsc2UKPiAg ICAgICAgICAgICAgICplbnRyeSA9IHZpdHRfbWFwcGluZ1s8YXBwcm9wcmlhdGUgcGFnZSBvZmZz ZXQ+XTsKPgo+ICAgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKGVudHJ5KQo+Cj4gQWdhaW4gc2lu Y2UgdGhpcyBpcyBJUEEgYmFzZWQgYSBtYWxpY2lvdXMgZ3Vlc3QgY2FuIG9ubHkgcG9pbnQgdGhp bmdzCj4gdG8gaXRzIG93biByYW0uCj4KPiAjIyBDb2xsZWN0aW9uIFRhYmxlIFZpcnR1YWxpc2F0 aW9uCj4KPiBBIHBvaW50ZXIgdG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYXJyYXkgYGl0c19j b2xsZWN0aW9uc2AgbWFwcGluZwo+IGNvbGxlY3Rpb24gSUQgdG8gdmNwdSBJRCB3aWxsIGJlIGFk ZGVkIHRvIGBzdHJ1Y3QgZG9tYWluYC4gVGhlIGFycmF5Cj4gc2hhbGwgaGF2ZSBgbnJfdmNwdXMg KyAxYCBlbnRyaWVzIGFuZCByZXNldHMgdG8gfjAgKG9yIGFub3RoZXIKPiBleHBsaWNpdGx5IGlu dmFsaWQgdnBjdSBucikuCj4KPiAjIyBWaXJ0dWFsIExQSSBpbmplY3Rpb24KPgo+IEFzIGRpc2N1 c3NlZCBhYm92ZSB0aGUgYHZnaWNfdmNwdV9pbmplY3RfaXJxYCBmdW5jdGlvbmFsaXR5IHdpbGwg bmVlZAo+IHRvIGJlIGV4dGVuZGVkIHRvIGNvdmVyIHRoaXMgbmV3IGNhc2UsIG1vc3QgbGlrZWx5 IHZpYSBhIG5ldwo+IGB2Z2ljX3ZjcHVfaW5qZWN0X2xwaWAgZnJvbnRlbmQgZnVuY3Rpb24uIGB2 Z2ljX3ZjcHVfaW5qZWN0X2lycWAgd2lsbAo+IGFsc28gcmVxdWlyZSBzb21lIHJlZmFjdG9yaW5n IHRvIGFsbG93IHRoZSBwcmlvcml0eSB0byBiZSBwYXNzZWQgaW4KPiBmcm9tIHRoZSBjYWxsZXIg KHNpbmNlIGBMUElgIHByb3ByaXR5IGNvbWVzIGZyb20gdGhlIGBMUElgIENGRyB0YWJsZSwKPiB3 aGlsZSBgU1BJYCBhbmQgYFBQSWAgcHJpb3JpdHkgaXMgY29uZmlndXJlZCB2aWEgb3RoZXIgbWVh bnMpLgo+Cj4gYHZnaWNfdmNwdV9pbmplY3RfbHBpYCByZWNlaXZlcyBhIGBzdHJ1Y3QgZG9tYWlu ICpgIGFuZCBhIHZpcnR1YWwKPiBpbnRlcnJ1cHQgbnVtYmVyIChjb3JyZXNwb25kaW5nIHRvIGEg dkxQSSkgYW5kIG5lZWRzIHRvIGZpZ3VyZSBvdXQKPiB3aGljaCB2Y3B1IHRoaXMgc2hvdWxkIG1h cCB0by4KPgo+IFRvIGRvIHRoaXMgaXQgbXVzdCBsb29rIHVwIHRoZSBDb2xsZWN0aW9uIElEIGFz c29jaWF0ZWQgKHZpYSB0aGUgdklUUykKPiB3aXRoIHRoYXQgTFBJLgo+Cj4gUHJvcG9zYWw6IEFk ZCBhIG5ldyBgaXRzX2RldmljZWAgZmllbGQgdG8gYHN0cnVjdCBpcnFfZ3Vlc3RgLCBhCj4gcG9p bnRlciB0byB0aGUgYXNzb2NpYXRlZCBgc3RydWN0IGl0c19kZXZpY2VgLiBUaGUgZXhpc3Rpbmcg YHN0cnVjdAo+IGlycV9ndWVzdC52aXJxYCBmaWVsZCBjb250YWlucyB0aGUgZXZlbnQgSUQgKHBl cmhhcHMgdXNlIGEgYHVuaW9uYAo+IHRvIGdpdmUgYSBtb3JlIGFwcHJvcHJpYXRlIG5hbWUpIGFu ZCBfbm90XyB0aGUgdmlydHVhbCBMUEkuIEluamVjdGlvbgo+IHRoZW4gY29uc2lzdHMgb2Y6Cj4K PiAgICAgICAgICBkID0gaXJxX2d1ZXN0LT5kb21haW4KPiAgICAgICAgICB2aXJxID0gaXJxX2d1 ZXN0LT52aXJxCj4gICAgICAgICAgaXRzX2RldmljZSA9IGlycV9ndWVzdC0+aXRzX2RldmljZQo+ Cj4gICAgICAgICAgZ2V0X3ZpdHRfZW50cnkoZCwgaXRzX2RldmljZS0+dmlydF9kZXZpY2VfaWQs IHZpcnEsICZ2aXR0KQo+ICAgICAgICAgIHZjcHUgPSBkLT5pdHNfY29sbGVjdGlvbnNbdml0dC5j b2xsZWN0aW9uXQo+Cj4gICAgICAgICAgaWYgIWlzX3ZhbGlkX2xwaSh2aXR0LnZscGkpOiBlcnJv cgo+Cj4gICAgICAgICAgZ2V0X3ZscGlfY2ZnKGQsIHZpdHQudmxwaSwgJmNmZykKPiAgICAgICAg ICBpZiAhY2ZnLmVuYWJsZWQ6IGlnbm9yZQo+Cj4gICAgICAgICAgdmdpY192Y3B1X2luamVjdF9p cnEoJmQtPnZjcHVzW3ZjcHVdLCB2aXR0LnZscGksIGNmZy5wcmlvcml0eSkKPgo+ICMjIENvbW1h bmQgUXVldWUgVmlydHVhbGlzYXRpb24KPgo+IFRoZSBjb21tYW5kIHRyYW5zbGF0aW9uL2VtdWxh dGlvbiBpbiB0aGlzIGRlc2lnbiBoYXMgYmVlbiBhcnJhbmdlZCB0bwo+IGJlIGFzIGNoZWFwIGFz IHBvc3NpYmxlIChlLmcuIGluIG1hbnkgY2FzZXMgdGhlIGFjdGlvbnMgYXJlIE5PUHMpLAo+IGF2 b2lkaW5nIHByZXZpb3VzIGNvbmNlcm5zIGFib3V0IHRoZSBsZW5ndGggb2YgdGltZSB3aGljaCBh biBlbXVsYXRlZAo+IHdyaXRlIHRvIGEgYENXUklURVJgIHJlZ2lzdGVyIG1heSBibG9jayB0aGUg dmNwdS4KPgo+IFRoZSB2aXRzIHdpbGwgc2ltcGx5IHRyYWNrIGl0cyByZWFkZXIgYW5kIHdyaXRl ciBwb2ludGVycy4gT24gd3JpdGUKPiB0byBgQ1dSSVRFUmAgaXQgd2lsbCBpbW1lZGlhdGVseSBh bmQgc3luY2hyb25vdXNseSBwcm9jZXNzIGFsbAo+IGNvbW1hbmRzIGluIHRoZSBxdWV1ZSBhbmQg dXBkYXRlIGl0cyBzdGF0ZSBhY2NvcmRpbmdseS4KPgo+IEl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRv IGltcGxlbWVudCBhIHJ1ZGltZW50YXJ5IGZvcm0gb2YgcHJlZW1wdGlvbiBieQo+IHBlcmlvZGlj YWxseSAoYXMgZGV0ZXJtaW5lZCBieSBgaHlwZXJjYWxsX3ByZWVtcHRfY2hlY2soKWApIHJldHVy bmluZwo+IHRvIHRoZSBndWVzdCB3aXRob3V0IGluY3JlbWVudGluZyBQQyBidXQgd2l0aCB1cGRh dGVkIGludGVybmFsCj4gYENSRUFEUmAgc3RhdGUsIG1lYW5pbmcgaXQgd2lsbCByZWV4ZWN1dGUg dGhlIHdyaXRlIHRvIGBDV1JJVEVSYCBhbmQKPiB3ZSBjYW4gcGlja3VwIHdoZXJlIHdlIGxlZnQg b2ZmIGZvciBhbm90aGVyIGl0ZXJhdGlvbi4gVGhpcyBhdCBsZWFzdAo+IGxldHMgdXMgc2NoZWR1 bGUgb3RoZXIgdmNwdXMgZXRjIGFuZCBwcmV2ZW50cyBhIG1vbm9wb2x5Lgo+Cj4gIyMgSVRTIENv bW1hbmQgVHJhbnNsYXRpb24KPgo+IFRoaXMgc2VjdGlvbiBpcyBiYXNlZCBvbiB0aGUgc2VjdGlv biA1LjEzIG9mIEdJQ3YzIHNwZWNpZmljYXRpb24KPiAoUFJEMDMtR0VOQy0wMTA3NDUgMjQuMCkg YW5kIHByb3ZpZGVzIGNvbmNyZXRlIGlkZWFzIG9mIGhvdyB0aGlzIGNhbgo+IGJlIGludGVycHJl dGVkIGZvciBYZW4uCj4KPiBUaGUgSVRTIHByb3ZpZGVzIDEyIGNvbW1hbmRzIGluIG9yZGVyIHRv IG1hbmFnZSBpbnRlcnJ1cHQgY29sbGVjdGlvbnMsCj4gZGV2aWNlcyBhbmQgaW50ZXJydXB0cy4g UG9zc2libGUgY29tbWFuZCBwYXJhbWV0ZXJzIGFyZToKPgo+IC0gRGV2aWNlIElEIChgRGV2aWNl YCkgKGNhbGxlZCBgZGV2aWNlYCBpbiB0aGUgc3BlYykuCj4gLSBFdmVudCBJRCAoYEV2ZW50YCkg KGNhbGxlZCBgSURgIGluIHRoZSBzcGVjKS4gVGhpcyBpcyBhbiBpbmRleCBpbnRvCj4gICAgYSBk ZXZpY2VzIGBJVFRgLgo+IC0gQ29sbGVjdGlvbiBJRCAoYENvbGxlY3Rpb25gKSAoY2FsbGVkIGBj b2xsZWN0aW9uYCBpbiB0aGUgc3BlYykKPiAtIExQSSBJRCAoYExQSWApIChjYWxsZWQgYHBJRGAg aW4gdGhlIHNwZWMpCj4gLSBUYXJnZXQgQWRkcmVzcyAoYFRBYCkgKGNhbGxlZCBgVEFgIGluIHRo ZSBzcGVjYCkKPgo+IFRoZXNlIHBhcmFtZXRlcnMgbmVlZCB0byBiZSB2YWxpZGF0ZWQgYW5kIHRy YW5zbGF0ZWQgZnJvbSBWaXJ0dWFsIChgdmAKPiBwcmVmaXgpIHRvIFBoeXNpY2FsIChgcGAgcHJl Zml4KS4KPgo+IE5vdGUsIHdlIGRpZmZlciBmcm9tIHRoZSBuYW1pbmcgaW4gdGhlIEdJQyBzcGVj IGZvciBjbGFyaXR5LCBpbgo+IHBhcnRpY3VsYXIgd2UgdXNlIGBFdmVudGAgbm90IGBJRGAgYW5k IGBMUElgIG5vdCBgcElEYCB0byByZWR1Y2UKPiBjb25mdXNpb24sIGVzcGVjaWFsbHkgd2hlbiBg dmAgYW5kIGBwYCBzdWZmaXhlcyBhcmUgdXNlZCBkdWUgdG8KPiB2aXJ0dWFsaXNhdGlvbi4KPgo+ ICMjIyBQYXJhbWV0ZXIgVmFsaWRhdGlvbiAvIFRyYW5zbGF0aW9uCj4KPiBFYWNoIGNvbW1hbmQg Y29udGFpbnMgcGFyYW1ldGVycyB0aGF0IG5lZWRzIHRvIGJlIHZhbGlkYXRlZCBiZWZvcmUgYW55 Cj4gdXNhZ2UgaW4gWGVuIG9yIHBhc3NpbmcgdG8gdGhlIGhhcmR3YXJlLgo+Cj4gIyMjIyBEZXZp Y2UgSUQgKGBEZXZpY2VgKQo+Cj4gQ29ycmVzcG9uZGluZyBJVFQgb2J0YWluZWQgYnkgbG9va2lu ZyB1cCBhcyBkZXNjcmliZWQgYWJvdmUuCj4KPiBUaGUgcGh5c2ljYWwgYHN0cnVjdCBpdHNfZGV2 aWNlYCBjYW4gYmUgZm91bmQgYnkgbG9va2luZyB1cCBpbiB0aGUKPiBkb21haW4ncyBkZXZpY2Ug bWFwLgo+Cj4gSWYgbG9va3VwIGZhaWxzIG9yIHRoZSByZXN1bHRpbmcgZGV2aWNlIHRhYmxlIGVu dHJ5IGlzIGludmFsaWQgdGhlbgo+IHRoZSBEZXZpY2UgaXMgaW52YWxpZC4KPgo+ICMjIyMgRXZl bnQgSUQgKGBFdmVudGApCj4KPiBWYWxpZGF0ZWQgYWdhaW5zdCBlbXVsYXRlZCBgR0lUU19UWVBF Ui5JRGJpdHNgLgo+Cj4gSXQgaXMgbm90IG5lY2Vzc2FyeSB0byB0cmFuc2xhdGUgYSBgdkV2ZW50 YC4KPgo+ICMjIyMgTFBJIChgTFBJYCkKPgo+IFZhbGlkYXRlZCBhZ2FpbnN0IGVtdWxhdGVkIGBH SVRTX1RZUEVSLklEYml0c2AuCj4KPiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHRyYW5zbGF0ZSBh IGB2TFBJYCBpbnRvIGEgYHBMUElgIHNpbmNlIHRoZQo+IHRhYmxlcyBhbGwgY29udGFpbiBgdkxQ SWAuIChUcmFuc2xhdGlvbiBmcm9tIGBwTFBJYCB0byBgdkxQSWAgaGFwcGVucwo+IHZpYSBgc3Ry dWN0IGlycV9ndWVzdGAgd2hlbiB3ZSByZWNlaXZlIHRoZSBJUlEpLgo+Cj4gIyMjIyBJbnRlcnJ1 cHQgQ29sbGVjdGlvbiAoYENvbGxlY3Rpb25gKQo+Cj4gVGhlIGBDb2xsZWN0aW9uYCBpcyB2YWxp ZGF0ZWQgYWdhaW5zdCB0aGUgc2l6ZSBvZiB0aGUgcGVyLWRvbWFpbgo+IGBpdHNfY29sbGVjdGlv bnNgIGFycmF5IChpLmUuIG5yX3ZjcHVzICsgMSkgYW5kIHRoZW4gdHJhbnNsYXRlZCBieSBhCj4g c2ltcGxlIGxvb2t1cCBpbiB0aGF0IGFycmF5Lgo+Cj4gICAgICAgdmNwdV9uciA9IGQtPml0c19j b2xsZWN0aW9uc1tDb2xsZWN0aW9uXQo+Cj4gQSByZXN1bHQgPiBgbnJfY3B1c2AgaXMgaW52YWxp ZAo+Cj4gIyMjIyBUYXJnZXQgQWRkcmVzcyAoYFRBYCkKPgo+IFRoaXMgcGFyYW1ldGVyIGlzIHVz ZWQgaW4gY29tbWFuZHMgd2hpY2ggbWFuYWdlIGNvbGxlY3Rpb25zLiBJdCBpcyBhCj4gdW5pcXVl IGlkZW50aWZpZXIgcGVyIHByb2Nlc3Nvci4KPgo+IFdlIGhhdmUgY2hvc2VuIHRvIGltcGxlbWVu dCBgR0lUU19UWVBFUi5QVEFgIGFzIDAsIGhlbmNlIGB2VEFgIHNpbXBseQo+IGNvcnJlc3BvbmRz IHRvIHRoZSBgdmNwdV9pZGAsIHNvIG9ubHkgbmVlZHMgYm91bmRzIGNoZWNraW5nIGFnYWluc3QK PiBgbnJfdmNwdXNgLgo+Cj4gIyMjIENvbW1hbmRzCj4KPiBUbyBiZSByZWFkIHdpdGggcmVmZXJl bmNlIHRvIHNwZWMgZm9yIGVhY2ggY29tbWFuZCAod2hpY2ggaW5jbHVkZXMKPiBlcnJvciBjaGVj a3MgZXRjIHdoaWNoIGFyZSBvbWl0dGVkIGhlcmUpLgo+Cj4gSXQgaXMgYXNzdW1lZCB0aGF0IGlu cHV0cyB3aWxsIGJlIGJvdW5kcyBhbmQgdmFsaWRpdHkgY2hlY2tlZCBhcwo+IGRlc2NyaWJlZCBh Ym92ZSwgdGh1cyBlcnJvciBoYW5kbGluZyBpcyBvbWl0dGVkIGZvciBicmV2aXR5IChpLmUuIGlm Cj4gZ2V0IGFuZC9vciBzZXQgZmFpbCB0aGVuIHNvIGJlIGl0KS4gSW4gZ2VuZXJhbCBpbnZhbGlk IGNvbW1hbmRzIGFyZQo+IHNpbXBseSBpZ25vcmVkLgo+Cj4gIyMjIyBgTUFQRGA6IE1hcCBhIHBo eXNpY2FsIGRldmljZSB0byBhbiBJVFQuCj4KPiBfRm9ybWF0XzogYE1BUEQgRGV2aWNlLCBWYWxp ZCwgSVRUIEFkZHJlc3MsIElUVCBTaXplYC4KPgo+IF9TcGVjXzogNS4xMy4xMQo+Cj4gYE1BUERg IGlzIHNlbnQgd2l0aCBgVmFsaWRgIGJpdCBzZXQgaWYgdGhlIG1hcHBpbmcgaXMgdG8gYmUgYWRk ZWQgYW5kCj4gcmVzZXQgd2hlbiBtYXBwaW5nIGlzIHJlbW92ZWQuCj4KPiBXaGVuIHRoZSBgVmFs aWRgIGJpdCBpcyBzZXQgdGhlbiB0aGUgcmFuZ2UgYElUVCBBZGRyZXNzYCB0byBgSVRUCj4gQWRk cmVzc2AgKyBgSVRUIFNpemVgIG5lZWQgbm90IGJlIHZhbGlkYXRlZCwgdGhpcyBpcyBkb25lIGlu Cj4gYHtnZXQsc2V0fV92ZGV2aWNlX2VudHJ5YCB3aGVuIGNhbGxpbmcgdGhlIGBwMm1fbG9va3Vw YAo+IGZ1bmN0aW9uLiBWYWxpZGF0aW5nIHRoZSBtZW1vcnkgYXQgYE1BUERgIHRpbWUgd291bGQg c2VydmUgbm8gcHVycG9zZQo+IHNpbmNlIHRoZSBndWVzdCBjb3VsZCBzdWJzZXF1ZW50bHkgYmFs bG9vbiBpdCBvdXQgb3IgZ3JhbnQgbWFwIG92ZXIgaXQgZXRjLgo+Cj4gVGhlIGRvbWFpbidzIGRl dmljZSB0YWJsZSBpcyB1cGRhdGVkIHdpdGggdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLgo+Cj4g VGhlIGB2aXR0X21hcGRgIGZpZWxkIGlzIHNldCBhY2NvcmRpbmcgdG8gdGhlIGBWYWxpZGAgZmxh ZyBpbiB0aGUKPiBjb21tYW5kOgo+Cj4gICAgICBkdF9lbnRyeS52aXR0X2lwYSA9IElUVCBBZGRy ZXNzCj4gICAgICBkdF9lbnRyeS52aXR0X3NpemUgPSBJVFQgU2l6ZQo+ICAgICAgc2V0X3ZkZXZp Y2VfZW50cnkoY3VycmVudC0+ZG9tYWluLCBEZXZpY2UsICZkdF9lbnRyeSkKPgo+ICMjIyMgYE1B UENgOiBNYXAgYW4gaW50ZXJydXB0IGNvbGxlY3Rpb24gdG8gYSB0YXJnZXQgcHJvY2Vzc29yCj4K PiBfRm9ybWF0XzogYE1BUEMgQ29sbGVjdGlvbiwgVEFgCj4KPiBfU3BlY186IDUuMTMuMTIKPgo+ IFRoZSB1cGRhdGVkIGB2VEFgIChhIHZjcHUgbnVtYmVyKSBpcyByZWNvcmRlZCBpbiB0aGUgYGl0 c19jb2xsZWN0aW9uc2AKPiBhcnJheSBvZiB0aGUgZG9tYWluIHN0cnVjdDoKPgo+ICAgICAgZC0+ aXRzX2NvbGxlY3Rpb25zW0NvbGxlY3Rpb25dID0gVEEKPgo+ICMjIyMgYE1BUElgOiBNYXAgYW4g aW50ZXJydXB0IHRvIGFuIGludGVycnVwdCBjb2xsZWN0aW9uLgo+Cj4gX0Zvcm1hdF86IGBNQVBJ IERldmljZSwgTFBJLCBDb2xsZWN0aW9uYAo+Cj4gX1NwZWNfOiA1LjEzLjEzCj4KPiBBZnRlciB2 YWxpZGF0aW9uOgo+Cj4gICAgICB2aXR0LnZhbGlkID0gVHJ1ZQo+ICAgICAgdml0dC5jb2xsZWN0 aW9uID0gQ29sbGVjdGlvbgo+ICAgICAgdml0dC52bHBpID0gTFBJCj4gICAgICBzZXRfdml0dF9l bnRyeShjdXJyZW50LT5kb21pYW4sIERldmljZSwgTFBJLCAmdml0dCkKPgo+ICMjIyMgYE1BUFZJ YDogTWFwIGFuIGlucHV0IGlkZW50aWZpZXIgdG8gYSBwaHlzaWNhbCBpbnRlcnJ1cHQgYW5kIGFu IGludGVycnVwdCBjb2xsZWN0aW9uLgo+Cj4gRm9ybWF0OiBgTUFQVkkgRGV2aWNlLCBFdmVudCwg TFBJLCBDb2xsZWN0aW9uYAo+Cj4gICAgICB2aXR0LnZhbGlkID0gVHJ1ZQo+ICAgICAgdml0dC5j b2xsZWN0aW9uID0gQ29sbGVjdGlvbgo+ICAgICAgdml0dC52bHBpID0gTFBJCj4gICAgICBzZXRf dml0dF9lbnRyeShjdXJyZW50LT5vZG1pYW4sIERldmljZSwgRXZlbnQsICZ2aXR0KQo+Cj4gIyMj IyBgTU9WSWA6IFJlZGlyZWN0IGludGVycnVwdCB0byBhbiBpbnRlcnJ1cHQgY29sbGVjdGlvbgo+ Cj4gX0Zvcm1hdF86IGBNT1ZJIERldmljZSwgRXZlbnQsIENvbGxlY3Rpb25gCj4KPiBfU3BlY186 IDUuMTMuMTUKPgo+ICAgICAgZ2V0X3ZpdHRfZW50cnkoY3VycmVudC0+ZG9tYWluLCBEZXZpY2Us IEV2ZW50LCAmdml0dCkKPiAgICAgIHZpdHQuY29sbGVjdGlvbiA9IENvbGxlY3Rpb24KPiAgICAg IHNldF92aXR0X2VudHJ5KGN1cnJlbnQtPmRvbWFpbiwgRGV2aWNlLCBFdmVudCwgJnZpdHQpCj4K PiAgICAgIFhYWCBjb25zaWRlciBoZWxwZXIgd2hpY2ggc2V0cyBmaWVsZCB3aXRob3V0IG1hcHBp bmcvdW5tYXBwaW5nCj4gICAgICB0d2ljZS4KPgo+IFRoaXMgY29tbWFuZCBpcyBzdXBwb3NlZCB0 byBtb3ZlIGFueSBwZW5kaW5nIGludGVycnVwdHMgYXNzb2NpYXRlZAo+IHdpdGggYEV2ZW50YCB0 byB0aGUgdmNwdSBpbXBsaWVkIGJ5IHRoZSBuZXcgYENvbGxlY3Rpb25gLCB3aGljaCBpcwo+IHRy aWNreS4gRm9yIG5vdyB3ZSBpZ25vcmUgdGhpcyByZXF1aXJlbWVudCAoYXMgd2UgZG8gZm9yCj4g YEdJQ0RfSVJPVVRFUm5gIGFuZCBgR0lDRF9UQVJHRVRSbmAgZm9yIG90aGVyIGludGVycnVwdCB0 eXBlcykuCj4KPiAjIyMjIGBESVNDQVJEYDogRGlzY2FyZCBpbnRlcnJ1cHQgcmVxdWVzdHMKPgo+ IF9Gb3JtYXRfOiBgRElTQ0FSRCBEZXZpY2UsIEV2ZW50YAo+Cj4gX1NwZWNfOiA1LjEzLjE2Cj4K PiAgICAgIGdldF92aXR0X2VudHJ5KGN1cnJlbnQtPmRvbWFpbiwgRGV2aWNlLCBFdmVudCwgJnZp dHQpCj4gICAgICB2aXR0LnZhbGlkID0gRmFsc2UKPiAgICAgIHNldF92aXR0X2VudHJ5KGN1cnJl bnQtPmRvbWFpbiwgRGV2aWNlLCBFdmVudCwgJnZpdHQpCj4KPiAgICAgIFhYWCBjb25zaWRlciBo ZWxwZXIgd2hpY2ggc2V0cyBmaWVsZCB3aXRob3V0IG1hcHBpbmcvdW5tYXBwaW5nCj4gICAgICB0 d2ljZS4KPgo+IFRoaXMgY29tbWFuZCBpcyBzdXBwb3NlZCB0byBjbGVhciB0aGUgcGVuZGluZyBz dGF0ZSBvZiBhbnkgYXNzb2NpYXRlZAo+IGludGVycnVwdC4gVGhpcyByZXF1aXJlbWVudCBpcyBp Z25vcmVkIChndWVzdCBtYXkgc2VlIGEgc3B1cmlvdXMKPiBpbnRlcnJ1cHQpLgo+Cj4gIyMjIyBg SU5WYDogQ2xlYW4gYW55IGNhY2hlcyBhc3NvY2lhdGVkIHdpdGggaW50ZXJydXB0Cj4KPiBfRm9y bWF0XzogYElOViBEZXZpY2UsIEV2ZW50YAo+Cj4gX1NwZWNfOiA1LjEzLjE3Cj4KPiBTaW5jZSBM UEkgQ29uZmlndXJhdGlvbiB0YWJsZSB1cGRhdGVzIGFyZSBub3QgdHJhcHBlZCBhbmQgdGhlIGNv bmZpZwo+IGlzIHJlYWQgb24gdXNlLCB0aGVyZSBpcyBub3RoaW5nIHRvIGRvIGhlcmUuCj4KPiAj IyMjIGBJTlZBTExgOiBDbGVhbiBhbnkgY2FjaGVzIGFzc29jaWF0ZWQgd2l0aCBhbiBpbnRlcnJ1 cHQgY29sbGVjdGlvbgo+Cj4gX0Zvcm1hdF86IGBJTlZBTEwgQ29sbGVjdGlvbmAKPgo+IF9TcGVj XzogNS4xMy4xOQo+Cj4gU2luY2UgTFBJIENvbmZpZ3VyYXRpb24gdGFibGUgdXBkYXRlcyBhcmUg bm90IHRyYXBwZWQgYW5kIHRoZSBjb25maWcKPiBpcyByZWFkIG9uIHVzZSwgdGhlcmUgaXMgbm90 aGluZyB0byBkbyBoZXJlLgo+Cj4gIyMjIyBgSU5UYDogR2VuZXJhdGUgYW4gaW50ZXJydXB0Cj4K PiBfRm9ybWF0XzogYElOVCBEZXZpY2UsIEV2ZW50YAo+Cj4gX1NwZWNfOiA1LjEzLjIwCj4KPiBU aGUgYHZpdHRgIGVudHJ5IGNvcnJlc29uZGluZyB0byBgRGV2aWNlLEV2ZW50YCBpcyBsb29rZWQg dXAgYW5kIHRoZW46Cj4KPiAgICAgIGdldF92aXR0X2VudHJ5KGN1cnJlbnQtPmRvbWFpbiwgRGV2 aWNlLCBFdmVudCwgJnZpdHQpCj4gICAgICB2Z2ljX3ZjcHVfaW5qZWN0X2xwaShjdXJyZW50LT5k b21haW4sIHZpdHQudmxwaSkKPgo+IF9fTm90ZV86IFdoZXJlIChEZXZpY2UsRXZlbnQpIGlzIHJl YWwgbWF5IG5lZWQgY29uc2lkZXJhdGlvbiBvZgo+IGludGVyYWN0aW9ucyB3aXRoIHJlYWwgTFBJ cyBiZWluZyBkZWxpdmVyZWQ6IEp1bGllbiBoYWQgY29uY2VybnMgYWJvdXQKPiBYZW4ncyBpbnRl cm5hbCBJUlEgU3RhdGUgdHJhY2tpbmcuIGlmIHRoaXMgaXMgYSBwcm9ibGVtIHRoZW4gbWF5IG5l ZWQKPiBjaGFuZ2VzIHRvIElSUSBzdGF0ZSB0cmFja2luZywgb3IgdG8gaW5qZWN0IGFzIGEgcmVh bCBJUlEgYW5kIGxldAo+IHBoeXNpY2FsIElSUSBpbmplY3Rpb24gaGFuZGxlIGl0LCBvciB3cml0 ZSB0byBgR0lDUl9TRVRMUElSYD8KPgo+ICMjIyMgYENMRUFSYDogQ2xlYXIgdGhlIHBlbmRpbmcg c3RhdGUgb2YgYW4gaW50ZXJydXB0Cj4KPiBfRm9ybWF0XzogYENMRUFSIERldmljZSwgRXZlbnRg Cj4KPiBfU3BlY186IDUuMTMuMjEKPgo+IFNob3VsZCBjbGVhciBwZW5kaW5nIHN0YXRlIG9mIExQ SS4gSWdub3JlIChndWVzdCBtYXkgc2VlIGEgc3B1cmlvdXMKPiBpbnRlcnJ1cHQpLgo+Cj4gIyMj IyBgU1lOQ2A6IFdhaXQgZm9yIGNvbXBsZXRpb24gb2YgYW55IG91dHN0YW5kaW5nIElUUyBhY3Rp b25zIGZvciBjb2xsZWN0aW9uCj4KPiBfRm9ybWF0XzogYFNZTkMgVEFgCj4KPiBfU3BlY186IDUu MTMuMjIKPgo+IFRoaXMgY29tbWFuZCBjYW4gYmUgaWdub3JlZC4KPgo+ICMgR0lDdjQgRGlyZWN0 IEludGVycnVwdCBJbmplY3Rpb24KPgo+IEdJQ3Y0IHdpbGwgZGlyZWN0bHkgbWFyayB0aGUgTFBJ cyBwZW5kaW5nIGluIHRoZSB2aXJ0dWFsIHBlbmRpbmcgdGFibGUKPiB3aGljaCBpcyBwZXItcmVk aXN0cmlidXRvciAoaS5lIHBlci12Q1BVKS4KPgo+IExQSXMgd2lsbCBiZSByZWNlaXZlZCBieSB0 aGUgZ3Vlc3QgdGhlIHNhbWUgd2F5IGFzIGFuIFNQSXMuIEkuZSB0cmFwIGluCj4gSVJRIG1vZGUg dGhlbiByZWFkIElDQ19JQVIxX0VMMSAoZm9yIEdJQ3YzKS4KPgo+IFRoZXJlZm9yZSBHSUN2NCB3 aWxsIG5vdCByZXF1aXJlIG9uZSB2SVRTIHBlciBwSVRTLgo+Cj4gIyBFdmVudCBDaGFubmVscwo+ Cj4gSXQgaGFzIGJlZW4gcHJvcG9zZWQgdGhhdCBpdCBtaWdodCBiZSBuaWNlIHRvIGluamVjdCBl dmVudCBjaGFubmVscyBhcwo+IExQSXMgaW4gdGhlIGZ1dHVyZS4gV2hldGhlciBvciBub3QgdGhh dCB3b3VsZCBpbnZvbHZlIGFueSBzb3J0IG9mIHZJVFMKPiBpcyB1bmNsZWFyLCBidXQgaWYgaXQg ZGlkIHRoZW4gaXQgd291bGQgbGlrZWx5IGJlIGEgc2VwYXJhdGUgZW11bGF0aW9uCj4gdG8gdGhl IHZJVFMgZW11bGF0aW9uIHVzZWQgd2l0aCBhIHBJVFMgYW5kIGFzIHN1Y2ggaXMgbm90IGNvbnNp ZGVyZWQKPiBmdXJ0aGVyIGhlcmUuCj4KPiAjIEdsb3NzYXJ5Cj4KPiAqIF9NU0lfOiBNZXNzYWdl IFNpZ25hbGxlZCBJbnRlcnJ1cHQKPiAqIF9JVFNfOiBJbnRlcnJ1cHQgVHJhbnNsYXRpb24gU2Vy dmljZQo+ICogX0dJQ186IEdlbmVyaWMgSW50ZXJydXB0IENvbnRyb2xsZXIKPiAqIF9MUElfOiBM b2NhbGl0eS1zcGVjaWZpYyBQZXJpcGhlcmFsIEludGVycnVwdAo+Cj4gIyBSZWZlcmVuY2VzCj4K PiAiR0lDIEFyY2hpdGVjdHVyZSBTcGVjaWZpY2F0aW9uIiBQUkQwMy1HRU5DLTAxMDc0NSAyNC4w Lgo+Cj4gIklPIFJlbWFwcGluZyBUYWJsZSBTeXN0ZW0gU29mdHdhcmUgb24gQVJNwq4gUGxhdGZv cm1zIiBBUk0gREVOIDAwNDlBLgo+CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVu Lm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK