From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1lCLJz-0004BY-UC for barebox@lists.infradead.org; Wed, 17 Feb 2021 11:48:52 +0000 References: <20210215102740.30418-1-a.fatoum@pengutronix.de> <20210215102740.30418-4-a.fatoum@pengutronix.de> From: Ahmad Fatoum Message-ID: <508b4ab2-3f0b-2f34-e5bc-61141b307304@pengutronix.de> Date: Wed, 17 Feb 2021 12:48:39 +0100 MIME-Version: 1.0 In-Reply-To: <20210215102740.30418-4-a.fatoum@pengutronix.de> Content-Language: en-US List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "barebox" Errors-To: barebox-bounces+u.kleine-koenig=pengutronix.de@lists.infradead.org Subject: Re: [PATCH 3/3] usbgadget: add support for USB mass storage gadget To: Ahmad Fatoum , "barebox@lists.infradead.org" CgpPbiAxNS4wMi4yMSAxMToyNywgQWhtYWQgRmF0b3VtIHdyb3RlOgo+IFRoaXMgZHJpdmVyIGlz IGJhc2VkIG9uIHRoZSBmX21hc3Nfc3RvcmFnZSBkcml2ZXJzIGluIExpbnV4IHY1LjExIGFuZAo+ IFUtQm9vdCB2MjAyMS4wMS4gTGlrZSB3aXRoIFUtQm9vdCwgaXQncyBpbnZva2VkIHdpdGggYSBi bG9ja2luZyB1bXMKPiBjb21tYW5kLiBEdXJpbmcgdGhpcyB0aW1lLCBubyBvdGhlciBwcm9jZXNz aW5nLCBleGNlcHQgZm9yIHBvbGxlcnMsIGlzCj4gcG9zc2libGUuIFRoZSBjb21tYW5kIGNhbiBi ZSBhYm9ydGVkIHdpdGggY3RybCtjLgo+IAo+IFRoZSBzdGF0ZSBtYWNoaW5lIHRvIGltcGxlbWVu dCB0aGUgbWFzcyBzdG9yYWdlIGdhZGdldCBpcyBxdWl0ZQo+IGV4dGVuc2l2ZSwgc28gaW1wb3J0 IHRoZSBmdW5jdGlvbmFsaXR5IG5vdyBhbmQgZGVsYXkgbW92aW5nIHRoZSBzdGF0ZQo+IG1hY2hp bmUgaW50byBhIHBvbGxlciBmb3IgYXN5bmNocm9ub3VzIG9wZXJhdGlvbiBhcyBwYXJ0IG9mIGEg Y29tcG9zaXRlCj4gZ2FkZ2V0IGZvciBsYXRlci4KCkkgbm90aWNlZCBzb21lIGJyb2tlbm5lc3Mg aW4gaGFuZGxpbmcgZXJyb3IgY29uZGl0aW9uLgpJJ2xsIHJlc3BpbiBsYXRlciB0aGlzIHdlZWsu Cgo+IAo+IFNpZ25lZC1vZmYtYnk6IEFobWFkIEZhdG91bSA8YS5mYXRvdW1AcGVuZ3V0cm9uaXgu ZGU+Cj4gLS0tCj4gIGNvbW1hbmRzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgIHwgICAgMSAr Cj4gIGNvbW1hbmRzL3Vtcy5jICAgICAgICAgICAgICAgICAgICAgIHwgICA1MyArCj4gIGRyaXZl cnMvdXNiL2dhZGdldC9LY29uZmlnICAgICAgICAgIHwgICAxMSArCj4gIGRyaXZlcnMvdXNiL2dh ZGdldC9NYWtlZmlsZSAgICAgICAgIHwgICAgMSArCj4gIGRyaXZlcnMvdXNiL2dhZGdldC9mX21h c3Nfc3RvcmFnZS5jIHwgMjkzNiArKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgZHJpdmVy cy91c2IvZ2FkZ2V0L3N0b3JhZ2VfY29tbW9uLmMgfCAgMTczICsrCj4gIGRyaXZlcnMvdXNiL2dh ZGdldC9zdG9yYWdlX2NvbW1vbi5oIHwgIDI0NSArKysKPiAgaW5jbHVkZS9zY3NpLmggICAgICAg ICAgICAgICAgICAgICAgfCAgIDEyICsKPiAgaW5jbHVkZS91c2IvbWFzc19zdG9yYWdlLmggICAg ICAgICAgfCAgIDI4ICsKPiAgaW5jbHVkZS91c2Ivc3RvcmFnZS5oICAgICAgICAgICAgICAgfCAg IDg3ICsKPiAgMTAgZmlsZXMgY2hhbmdlZCwgMzU0NyBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBjb21tYW5kcy91bXMuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91 c2IvZ2FkZ2V0L2ZfbWFzc19zdG9yYWdlLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv dXNiL2dhZGdldC9zdG9yYWdlX2NvbW1vbi5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L3VzYi9nYWRnZXQvc3RvcmFnZV9jb21tb24uaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVk ZS91c2IvbWFzc19zdG9yYWdlLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdXNiL3N0 b3JhZ2UuaAo+IAo+IGRpZmYgLS1naXQgYS9jb21tYW5kcy9NYWtlZmlsZSBiL2NvbW1hbmRzL01h a2VmaWxlCj4gaW5kZXggMDM0YzBlNjM4M2QzLi5hMzFkNWM4Nzc3MDMgMTAwNjQ0Cj4gLS0tIGEv Y29tbWFuZHMvTWFrZWZpbGUKPiArKysgYi9jb21tYW5kcy9NYWtlZmlsZQo+IEBAIC0xMzAsNSAr MTMwLDYgQEAgb2JqLSQoQ09ORklHX0NNRF9OQU5EX0JJVEZMSVApCSs9IG5hbmQtYml0ZmxpcC5v Cj4gIG9iai0kKENPTkZJR19DTURfU0VFRCkJCSs9IHNlZWQubwo+ICBvYmotJChDT05GSUdfQ01E X0lQX1JPVVRFX0dFVCkgICs9IGlwLXJvdXRlLWdldC5vCj4gIG9iai0kKENPTkZJR19DTURfVUJT QU4pCQkrPSB1YnNhbi5vCj4gK29iai0kKENPTkZJR19VU0JfR0FER0VUX01BU1NfU1RPUkFHRSkg Kz0gdW1zLm8KPiAgCj4gIFVCU0FOX1NBTklUSVpFX3Vic2FuLm8gOj0geQo+IGRpZmYgLS1naXQg YS9jb21tYW5kcy91bXMuYyBiL2NvbW1hbmRzL3Vtcy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwMDAwMDAuLjBiYzJjZmRmNWU5OAo+IC0tLSAvZGV2L251bGwKPiArKysg Yi9jb21tYW5kcy91bXMuYwo+IEBAIC0wLDAgKzEsNTMgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjArCj4gKy8qCj4gKyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5n IEVsZWN0cm9uaWNzCj4gKyAqIEx1a2FzeiBNYWpld3NraSA8bC5tYWpld3NraUBzYW1zdW5nLmNv bT4KPiArICoKPiArICogQ29weXJpZ2h0IChjKSAyMDE1LCBOVklESUEgQ09SUE9SQVRJT04uIEFs bCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGNvbW1vbi5oPgo+ICsj aW5jbHVkZSA8Y29tbWFuZC5oPgo+ICsjaW5jbHVkZSA8ZXJybm8uaD4KPiArI2luY2x1ZGUgPG1h bGxvYy5oPgo+ICsjaW5jbHVkZSA8Z2V0b3B0Lmg+Cj4gKyNpbmNsdWRlIDxmcy5oPgo+ICsjaW5j bHVkZSA8eGZ1bmNzLmg+Cj4gKyNpbmNsdWRlIDxmaWxlLWxpc3QuaD4KPiArI2luY2x1ZGUgPHVz Yi9tYXNzX3N0b3JhZ2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+ICsKPiArc3RhdGlj IGludCBkb191c2JfbWFzc19zdG9yYWdlKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gK3sKPiAr CXN0cnVjdCBmX3Vtc19vcHRzIG9wdHM7Cj4gKwljaGFyICphcmdzdHI7Cj4gKwlpbnQgcmV0Owo+ ICsKPiArCWlmIChhcmdjICE9IG9wdGluZCArIDEpCj4gKwkJcmV0dXJuIENPTU1BTkRfRVJST1Jf VVNBR0U7Cj4gKwo+ICsJYXJnc3RyID0gYXJndltvcHRpbmRdOwo+ICsKPiArCW9wdHMuZmlsZXMg PSBmaWxlX2xpc3RfcGFyc2UoYXJnc3RyKTsKPiArCWlmIChJU19FUlIob3B0cy5maWxlcykpIHsK PiArCQlyZXQgPSBQVFJfRVJSKG9wdHMuZmlsZXMpOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsK PiArCXJldCA9IHVzYl91bXNfcmVnaXN0ZXIoJm9wdHMpOwo+ICsKPiArCWZpbGVfbGlzdF9mcmVl KG9wdHMuZmlsZXMpOwo+ICtvdXQ6Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtCQVJFQk9Y X0NNRF9IRUxQX1NUQVJUKHVzYikKPiArQkFSRUJPWF9DTURfSEVMUF9URVhUKCJUdXJuJ3MgdGhl IFVTQiBob3N0IGludG8gYSBVTVMgKFVTQiBNYXNzIHN0b3JhZ2UpIGdhZGdldCIpCj4gK0JBUkVC T1hfQ01EX0hFTFBfRU5ECj4gKwo+ICtCQVJFQk9YX0NNRF9TVEFSVCh1bXMpCj4gKwkuY21kCQk9 IGRvX3VzYl9tYXNzX3N0b3JhZ2UsCj4gKwlCQVJFQk9YX0NNRF9ERVNDKCJVU0IgbWFzcyBzdG9y YWdlIGdhZGdldCIpCj4gKwlCQVJFQk9YX0NNRF9HUk9VUChDTURfR1JQX01JU0MpCj4gKwlCQVJF Qk9YX0NNRF9IRUxQKGNtZF91c2JfaGVscCkKPiArQkFSRUJPWF9DTURfRU5ECj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25m aWcKPiBpbmRleCA3ZTBjNTcwOTE0ZDcuLjkwZDIzNzhiNWI3MiAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmln Cj4gQEAgLTU5LDQgKzU5LDE1IEBAIGNvbmZpZyBVU0JfR0FER0VUX0ZBU1RCT09UCj4gIAlzZWxl Y3QgRklMRV9MSVNUCj4gIAlzZWxlY3QgRkFTVEJPT1RfQkFTRQo+ICAJcHJvbXB0ICJBbmRyb2lk IEZhc3Rib290IFVTQiBHYWRnZXQiCj4gKwo+ICtjb25maWcgVVNCX0dBREdFVF9NQVNTX1NUT1JB R0UKPiArCWJvb2wKPiArCXNlbGVjdCBGSUxFX0xJU1QKPiArCXByb21wdCAiVVNCIE1hc3MgU3Rv cmFnZSBHYWRnZXQiCj4gKwloZWxwCj4gKwkgIFRoZSBNYXNzIFN0b3JhZ2UgR2FkZ2V0IGFjdHMg YXMgYSBVU0IgTWFzcyBTdG9yYWdlIGRpc2sgZHJpdmUuCj4gKwkgIEFzIGl0cyBzdG9yYWdlIHJl cG9zaXRvcnkgaXQgY2FuIHVzZSBhIHJlZ3VsYXIgZmlsZSBvciBhIGJsb2NrCj4gKwkgIGRldmlj ZS4gTXVsdGlwbGUgc3RvcmFnZXMgY2FuIGJlIHNwZWNpZmllZCBhdCBvbmNlIG9uCj4gKwkgIGlu c3RhbnRpYXRpb24gdGltZS4KPiArCj4gIGVuZGlmCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNi L2dhZGdldC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZQo+IGluZGV4IDI3 NjczZmNmMGVmNi4uNWJhNDkyMGMwODVhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdXNiL2dhZGdl dC9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZQo+IEBAIC0zLDYg KzMsNyBAQCBvYmotJChDT05GSUdfVVNCX0dBREdFVCkgKz0gY29tcG9zaXRlLm8gY29uZmlnLm8g dXNic3RyaW5nLm8gZXBhdXRvY29uZi5vIHVkYy1jbwo+ICBvYmotJChDT05GSUdfVVNCX0dBREdF VF9TRVJJQUwpICs9IHVfc2VyaWFsLm8gc2VyaWFsLm8gZl9zZXJpYWwubyBmX2FjbS5vCj4gIG9i ai0kKENPTkZJR19VU0JfR0FER0VUX0RGVSkgKz0gZGZ1Lm8KPiAgb2JqLSQoQ09ORklHX1VTQl9H QURHRVRfRkFTVEJPT1QpICs9IGZfZmFzdGJvb3Qubwo+ICtvYmotJChDT05GSUdfVVNCX0dBREdF VF9NQVNTX1NUT1JBR0UpICs9IGZfbWFzc19zdG9yYWdlLm8gc3RvcmFnZV9jb21tb24ubwo+ICBv YmotJChDT05GSUdfVVNCX0dBREdFVF9EUklWRVJfQVJDKSArPSBmc2xfdWRjLm8KPiAgcGJsLSQo Q09ORklHX1VTQl9HQURHRVRfRFJJVkVSX0FSQ19QQkwpICs9IGZzbF91ZGNfcGJsLm8KPiAgb2Jq LSQoQ09ORklHX1VTQl9HQURHRVRfRFJJVkVSX0FUOTEpICs9IGF0OTFfdWRjLm8KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbWFzc19zdG9yYWdlLmMgYi9kcml2ZXJzL3VzYi9n YWRnZXQvZl9tYXNzX3N0b3JhZ2UuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAw MDAwMDAwMDAwLi45YzAwNzZiZTI2ZDEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy91 c2IvZ2FkZ2V0L2ZfbWFzc19zdG9yYWdlLmMKPiBAQCAtMCwwICsxLDI5MzYgQEAKPiArLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArIE9SIEJTRC0zLUNsYXVzZQo+ICsvKgo+ICsg KiBmX21hc3Nfc3RvcmFnZS5jIC0tIE1hc3MgU3RvcmFnZSBVU0IgQ29tcG9zaXRlIEZ1bmN0aW9u Cj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4IEFsYW4gU3Rlcm4KPiArICogQ29w eXJpZ2h0IChDKSAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MKPiArICogICAgICAgICAgICAgICAg ICAgIEF1dGhvcjogTWljaGFsIE5hemFyZXdpY3ogPG0ubmF6YXJld2ljekBzYW1zdW5nLmNvbT4K PiArICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICovCj4gKwo+ICsvKgo+ICsgKiBUaGUgTWFz cyBTdG9yYWdlIEZ1bmN0aW9uIGFjdHMgYXMgYSBVU0IgTWFzcyBTdG9yYWdlIGRldmljZSwKPiAr ICogYXBwZWFyaW5nIHRvIHRoZSBob3N0IGFzIGEgZGlzayBkcml2ZSBvciBhcyBhIENELVJPTSBk cml2ZS4gIEluCj4gKyAqIGFkZGl0aW9uIHRvIHByb3ZpZGluZyBhbiBleGFtcGxlIG9mIGEgZ2Vu dWluZWx5IHVzZWZ1bCBjb21wb3NpdGUKPiArICogZnVuY3Rpb24gZm9yIGEgVVNCIGRldmljZSwg aXQgYWxzbyBpbGx1c3RyYXRlcyBhIHRlY2huaXF1ZSBvZgo+ICsgKiBkb3VibGUtYnVmZmVyaW5n IGZvciBpbmNyZWFzZWQgdGhyb3VnaHB1dC4KPiArICoKPiArICogRnVuY3Rpb24gc3VwcG9ydHMg bXVsdGlwbGUgbG9naWNhbCB1bml0cyAoTFVOcykuICBCYWNraW5nIHN0b3JhZ2UKPiArICogZm9y IGVhY2ggTFVOIGlzIHByb3ZpZGVkIGJ5IGEgcmVndWxhciBmaWxlIG9yIGEgYmxvY2sgZGV2aWNl Lgo+ICsgKiBBY2Nlc3MgZm9yIGVhY2ggTFVOIGNhbiBiZSBsaW1pdGVkIHRvIHJlYWQtb25seS4g IE1vcmVvdmVyLCB0aGUKPiArICogZnVuY3Rpb24gY2FuIGluZGljYXRlIHRoYXQgTFVOIGlzIHJl bW92YWJsZSBhbmQvb3IgQ0QtUk9NLiAgKFRoZQo+ICsgKiBsYXRlciBpbXBsaWVzIHJlYWQtb25s eSBhY2Nlc3MuKQo+ICsgKgo+ICsgKiBNU0YgaXMgY29uZmlndXJlZCBieSBzcGVjaWZ5aW5nIGEg ZnNnX2NvbmZpZyBzdHJ1Y3R1cmUuICBJdCBoYXMgdGhlCj4gKyAqIGZvbGxvd2luZyBmaWVsZHM6 Cj4gKyAqCj4gKyAqCW5sdW5zCQlOdW1iZXIgb2YgTFVOcyBmdW5jdGlvbiBoYXZlIChhbnl3aGVy ZSBmcm9tIDEKPiArICoJCQkJdG8gRlNHX01BWF9MVU5TIHdoaWNoIGlzIDgpLgo+ICsgKglsdW5z CQlBbiBhcnJheSBvZiBMVU4gY29uZmlndXJhdGlvbiB2YWx1ZXMuICBUaGlzCj4gKyAqCQkJCXNo b3VsZCBiZSBmaWxsZWQgZm9yIGVhY2ggTFVOIHRoYXQKPiArICoJCQkJZnVuY3Rpb24gd2lsbCBp bmNsdWRlIChpZS4gZm9yICJubHVucyIKPiArICoJCQkJTFVOcykuICBFYWNoIGVsZW1lbnQgb2Yg dGhlIGFycmF5IGhhcwo+ICsgKgkJCQl0aGUgZm9sbG93aW5nIGZpZWxkczoKPiArICoJLT5maWxl bmFtZQlUaGUgcGF0aCB0byB0aGUgYmFja2luZyBmaWxlIGZvciB0aGUgTFVOLgo+ICsgKgkJCQlS ZXF1aXJlZCBpZiBMVU4gaXMgbm90IG1hcmtlZCBhcwo+ICsgKgkJCQlyZW1vdmFibGUuCj4gKyAq CS0+cm8JCUZsYWcgc3BlY2lmeWluZyBhY2Nlc3MgdG8gdGhlIExVTiBzaGFsbCBiZQo+ICsgKgkJ CQlyZWFkLW9ubHkuICBUaGlzIGlzIGltcGxpZWQgaWYgQ0QtUk9NCj4gKyAqCQkJCWVtdWxhdGlv biBpcyBlbmFibGVkIGFzIHdlbGwgYXMgd2hlbgo+ICsgKgkJCQlpdCB3YXMgaW1wb3NzaWJsZSB0 byBvcGVuICJmaWxlbmFtZSIKPiArICoJCQkJaW4gUi9XIG1vZGUuCj4gKyAqCS0+cmVtb3ZhYmxl CUZsYWcgc3BlY2lmeWluZyB0aGF0IExVTiBzaGFsbCBiZSBpbmRpY2F0ZWQgYXMKPiArICoJCQkJ YmVpbmcgcmVtb3ZhYmxlLgo+ICsgKgktPmNkcm9tCQlGbGFnIHNwZWNpZnlpbmcgdGhhdCBMVU4g c2hhbGwgYmUgcmVwb3J0ZWQgYXMKPiArICoJCQkJYmVpbmcgYSBDRC1ST00uCj4gKyAqCj4gKyAq CWx1bl9uYW1lX2Zvcm1hdAlBIHByaW50Zi1saWtlIGZvcm1hdCBmb3IgbmFtZXMgb2YgdGhlIExV Tgo+ICsgKgkJCQlkZXZpY2VzLiAgVGhpcyBkZXRlcm1pbmVzIGhvdyB0aGUKPiArICoJCQkJZGly ZWN0b3J5IGluIHN5c2ZzIHdpbGwgYmUgbmFtZWQuCj4gKyAqCQkJCVVubGVzcyB5b3UgYXJlIHVz aW5nIHNldmVyYWwgTVNGcyBpbgo+ICsgKgkJCQlhIHNpbmdsZSBnYWRnZXQgKGFzIG9wcG9zZWQg dG8gc2luZ2xlCj4gKyAqCQkJCU1TRiBpbiBtYW55IGNvbmZpZ3VyYXRpb25zKSB5b3UgbWF5Cj4g KyAqCQkJCWxlYXZlIGl0IGFzIE5VTEwgKGluIHdoaWNoIGNhc2UKPiArICoJCQkJImx1biVkIiB3 aWxsIGJlIHVzZWQpLiAgSW4gdGhlIGZvcm1hdAo+ICsgKgkJCQl5b3UgY2FuIHVzZSAiJWQiIHRv IGluZGV4IExVTnMgZm9yCj4gKyAqCQkJCU1TRidzIHdpdGggbW9yZSB0aGFuIG9uZSBMVU4uICAo QmV3YXJlCj4gKyAqCQkJCXRoYXQgdGhlcmUgaXMgb25seSBvbmUgaW50ZWdlciBnaXZlbgo+ICsg KgkJCQlhcyBhbiBhcmd1bWVudCBmb3IgdGhlIGZvcm1hdCBhbmQKPiArICoJCQkJc3BlY2lmeWlu ZyBpbnZhbGlkIGZvcm1hdCBtYXkgY2F1c2UKPiArICoJCQkJdW5zcGVjaWZpZWQgYmVoYXZpb3Vy LikKPiArICoJdGhyZWFkX25hbWUJTmFtZSBvZiB0aGUga2VybmVsIHRocmVhZCBwcm9jZXNzIHVz ZWQgYnkgdGhlCj4gKyAqCQkJCU1TRi4gIFlvdSBjYW4gc2FmZWx5IHNldCBpdCB0byBOVUxMCj4g KyAqCQkJCShpbiB3aGljaCBjYXNlIGRlZmF1bHQgImZpbGUtc3RvcmFnZSIKPiArICoJCQkJd2ls bCBiZSB1c2VkKS4KPiArICoKPiArICoJdmVuZG9yX25hbWUKPiArICoJcHJvZHVjdF9uYW1lCj4g KyAqCXJlbGVhc2UJCUluZm9ybWF0aW9uIHVzZWQgYXMgYSByZXBseSB0byBJTlFVSVJZCj4gKyAq CQkJCXJlcXVlc3QuICBUbyB1c2UgZGVmYXVsdCBzZXQgdG8gTlVMTCwKPiArICoJCQkJTlVMTCwg MHhmZmZmIHJlc3BlY3RpdmVseS4gIFRoZSBmaXJzdAo+ICsgKgkJCQlmaWVsZCBzaG91bGQgYmUg OCBhbmQgdGhlIHNlY29uZCAxNgo+ICsgKgkJCQljaGFyYWN0ZXJzIG9yIGxlc3MuCj4gKyAqCj4g KyAqCWNhbl9zdGFsbAlTZXQgdG8gcGVybWl0IGZ1bmN0aW9uIHRvIGhhbHQgYnVsayBlbmRwb2lu dHMuCj4gKyAqCQkJCURpc2FibGVkIG9uIHNvbWUgVVNCIGRldmljZXMga25vd24gbm90Cj4gKyAq CQkJCXRvIHdvcmsgY29ycmVjdGx5LiAgWW91IHNob3VsZCBzZXQgaXQKPiArICoJCQkJdG8gdHJ1 ZS4KPiArICoKPiArICogSWYgInJlbW92YWJsZSIgaXMgbm90IHNldCBmb3IgYSBMVU4gdGhlbiBh IGJhY2tpbmcgZmlsZSBtdXN0IGJlCj4gKyAqIHNwZWNpZmllZC4gIElmIGl0IGlzIHNldCwgdGhl biBOVUxMIGZpbGVuYW1lIG1lYW5zIHRoZSBMVU4ncyBtZWRpdW0KPiArICogaXMgbm90IGxvYWRl ZCAoYW4gZW1wdHkgc3RyaW5nIGFzICJmaWxlbmFtZSIgaW4gdGhlIGZzZ19jb25maWcKPiArICog c3RydWN0dXJlIGNhdXNlcyBlcnJvcikuICBUaGUgQ0QtUk9NIGVtdWxhdGlvbiBpbmNsdWRlcyBh IHNpbmdsZQo+ICsgKiBkYXRhIHRyYWNrIGFuZCBubyBhdWRpbyB0cmFja3M7IGhlbmNlIHRoZXJl IG5lZWQgYmUgb25seSBvbmUKPiArICogYmFja2luZyBmaWxlIHBlciBMVU4uICBOb3RlIGFsc28g dGhhdCB0aGUgQ0QtUk9NIGJsb2NrIGxlbmd0aCBpcwo+ICsgKiBzZXQgdG8gNTEyIHJhdGhlciB0 aGFuIHRoZSBtb3JlIGNvbW1vbiB2YWx1ZSAyMDQ4Lgo+ICsgKgo+ICsgKgo+ICsgKiBNU0YgaW5j bHVkZXMgc3VwcG9ydCBmb3IgbW9kdWxlIHBhcmFtZXRlcnMuICBJZiBnYWRnZXQgdXNpbmcgaXQK PiArICogZGVjaWRlcyB0byB1c2UgaXQsIHRoZSBmb2xsb3dpbmcgbW9kdWxlIHBhcmFtZXRlcnMg d2lsbCBiZQo+ICsgKiBhdmFpbGFibGU6Cj4gKyAqCj4gKyAqCWZpbGU9ZmlsZW5hbWVbLGZpbGVu YW1lLi4uXQo+ICsgKgkJCU5hbWVzIG9mIHRoZSBmaWxlcyBvciBibG9jayBkZXZpY2VzIHVzZWQg Zm9yCj4gKyAqCQkJCWJhY2tpbmcgc3RvcmFnZS4KPiArICoJcm89YlssYi4uLl0JRGVmYXVsdCBm YWxzZSwgYm9vbGVhbiBmb3IgcmVhZC1vbmx5IGFjY2Vzcy4KPiArICoJcmVtb3ZhYmxlPWJbLGIu Li5dCj4gKyAqCQkJRGVmYXVsdCB0cnVlLCBib29sZWFuIGZvciByZW1vdmFibGUgbWVkaWEuCj4g KyAqCWNkcm9tPWJbLGIuLi5dCURlZmF1bHQgZmFsc2UsIGJvb2xlYW4gZm9yIHdoZXRoZXIgdG8g ZW11bGF0ZQo+ICsgKgkJCQlhIENELVJPTSBkcml2ZS4KPiArICoJbHVucz1OCQlEZWZhdWx0IE4g PSBudW1iZXIgb2YgZmlsZW5hbWVzLCBudW1iZXIgb2YKPiArICoJCQkJTFVOcyB0byBzdXBwb3J0 Lgo+ICsgKglzdGFsbAkJRGVmYXVsdCBkZXRlcm1pbmVkIGFjY29yZGluZyB0byB0aGUgdHlwZSBv Zgo+ICsgKgkJCQlVU0IgZGV2aWNlIGNvbnRyb2xsZXIgKHVzdWFsbHkgdHJ1ZSksCj4gKyAqCQkJ CWJvb2xlYW4gdG8gcGVybWl0IHRoZSBkcml2ZXIgdG8gaGFsdAo+ICsgKgkJCQlidWxrIGVuZHBv aW50cy4KPiArICoKPiArICogVGhlIG1vZHVsZSBwYXJhbWV0ZXJzIG1heSBiZSBwcmVmaXhlZCB3 aXRoIHNvbWUgc3RyaW5nLiAgWW91IG5lZWQKPiArICogdG8gY29uc3VsdCBnYWRnZXQncyBkb2N1 bWVudGF0aW9uIG9yIHNvdXJjZSB0byB2ZXJpZnkgd2hldGhlciBpdCBpcwo+ICsgKiB1c2luZyB0 aG9zZSBtb2R1bGUgcGFyYW1ldGVycyBhbmQgaWYgaXQgZG9lcyB3aGF0IGFyZSB0aGUgcHJlZml4 ZXMKPiArICogKGxvb2sgZm9yIEZTR19NT0RVTEVfUEFSQU1FVEVSUygpIG1hY3JvIHVzYWdlLCB3 aGF0J3MgaW5zaWRlIGl0IGlzCj4gKyAqIHRoZSBwcmVmaXgpLgo+ICsgKgo+ICsgKgo+ICsgKiBS ZXF1aXJlbWVudHMgYXJlIG1vZGVzdDsgb25seSBhIGJ1bGstaW4gYW5kIGEgYnVsay1vdXQgZW5k cG9pbnQgYXJlCj4gKyAqIG5lZWRlZC4gIFRoZSBtZW1vcnkgcmVxdWlyZW1lbnQgYW1vdW50cyB0 byB0d28gMTZLIGJ1ZmZlcnMsIHNpemUKPiArICogY29uZmlndXJhYmxlIGJ5IGEgcGFyYW1ldGVy LiAgU3VwcG9ydCBpcyBpbmNsdWRlZCBmb3IgYm90aAo+ICsgKiBmdWxsLXNwZWVkIGFuZCBoaWdo LXNwZWVkIG9wZXJhdGlvbi4KPiArICoKPiArICogTm90ZSB0aGF0IHRoZSBkcml2ZXIgaXMgc2xp Z2h0bHkgbm9uLXBvcnRhYmxlIGluIHRoYXQgaXQgYXNzdW1lcyBhCj4gKyAqIHNpbmdsZSBtZW1v cnkvRE1BIGJ1ZmZlciB3aWxsIGJlIHVzZWFibGUgZm9yIGJ1bGstaW4sIGJ1bGstb3V0LCBhbmQK PiArICogaW50ZXJydXB0LWluIGVuZHBvaW50cy4gIFdpdGggbW9zdCBkZXZpY2UgY29udHJvbGxl cnMgdGhpcyBpc24ndCBhbgo+ICsgKiBpc3N1ZSwgYnV0IHRoZXJlIG1heSBiZSBzb21lIHdpdGgg aGFyZHdhcmUgcmVzdHJpY3Rpb25zIHRoYXQgcHJldmVudAo+ICsgKiBhIGJ1ZmZlciBmcm9tIGJl aW5nIHVzZWQgYnkgbW9yZSB0aGFuIG9uZSBlbmRwb2ludC4KPiArICoKPiArICoKPiArICogVGhl IHBhdGhuYW1lcyBvZiB0aGUgYmFja2luZyBmaWxlcyBhbmQgdGhlIHJvIHNldHRpbmdzIGFyZQo+ ICsgKiBhdmFpbGFibGUgaW4gdGhlIGF0dHJpYnV0ZSBmaWxlcyAiZmlsZSIgYW5kICJybyIgaW4g dGhlIGx1bjxuPiAob3IKPiArICogdG8gYmUgbW9yZSBwcmVjaXNlIGluIGEgZGlyZWN0b3J5IHdo aWNoIG5hbWUgY29tZXMgZnJvbQo+ICsgKiAibHVuX25hbWVfZm9ybWF0IiBvcHRpb24hKSBzdWJk aXJlY3Rvcnkgb2YgdGhlIGdhZGdldCdzIHN5c2ZzCj4gKyAqIGRpcmVjdG9yeS4gIElmIHRoZSAi cmVtb3ZhYmxlIiBvcHRpb24gaXMgc2V0LCB3cml0aW5nIHRvIHRoZXNlCj4gKyAqIGZpbGVzIHdp bGwgc2ltdWxhdGUgZWplY3RpbmcvbG9hZGluZyB0aGUgbWVkaXVtICh3cml0aW5nIGFuIGVtcHR5 Cj4gKyAqIGxpbmUgbWVhbnMgZWplY3QpIGFuZCBhZGp1c3RpbmcgYSB3cml0ZS1lbmFibGUgdGFi LiAgQ2hhbmdlcyB0byB0aGUKPiArICogcm8gc2V0dGluZyBhcmUgbm90IGFsbG93ZWQgd2hlbiB0 aGUgbWVkaXVtIGlzIGxvYWRlZCBvciBpZiBDRC1ST00KPiArICogZW11bGF0aW9uIGlzIGJlaW5n IHVzZWQuCj4gKyAqCj4gKyAqIFdoZW4gYSBMVU4gcmVjZWl2ZSBhbiAiZWplY3QiIFNDU0kgcmVx dWVzdCAoU3RhcnQvU3RvcCBVbml0KSwKPiArICogaWYgdGhlIExVTiBpcyByZW1vdmFibGUsIHRo ZSBiYWNraW5nIGZpbGUgaXMgcmVsZWFzZWQgdG8gc2ltdWxhdGUKPiArICogZWplY3Rpb24uCj4g KyAqCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgaGVhdmlseSBiYXNlZCBvbiAiRmlsZS1i YWNrZWQgU3RvcmFnZSBHYWRnZXQiIGJ5Cj4gKyAqIEFsYW4gU3Rlcm4gd2hpY2ggaW4gdHVybiBp cyBoZWF2aWx5IGJhc2VkIG9uICJHYWRnZXQgWmVybyIgYnkgRGF2aWQKPiArICogQnJvd25lbGwu ICBUaGUgZHJpdmVyJ3MgU0NTSSBjb21tYW5kIGludGVyZmFjZSB3YXMgYmFzZWQgb24gdGhlCj4g KyAqICJJbmZvcm1hdGlvbiB0ZWNobm9sb2d5IC0gU21hbGwgQ29tcHV0ZXIgU3lzdGVtIEludGVy ZmFjZSAtIDIiCj4gKyAqIGRvY3VtZW50IGZyb20gWDNUOS4yIFByb2plY3QgMzc1RCwgUmV2aXNp b24gMTBMLCA3LVNFUC05MywKPiArICogYXZhaWxhYmxlIGF0IDxodHRwOi8vd3d3LnQxMC5vcmcv ZnRwL3QxMC9kcmFmdHMvczIvczItcjEwbC5wZGY+Lgo+ICsgKiBUaGUgc2luZ2xlIGV4Y2VwdGlv biBpcyBvcGNvZGUgMHgyMyAoUkVBRCBGT1JNQVQgQ0FQQUNJVElFUyksIHdoaWNoCj4gKyAqIHdh cyBiYXNlZCBvbiB0aGUgIlVuaXZlcnNhbCBTZXJpYWwgQnVzIE1hc3MgU3RvcmFnZSBDbGFzcyBV RkkKPiArICogQ29tbWFuZCBTcGVjaWZpY2F0aW9uIiBkb2N1bWVudCwgUmV2aXNpb24gMS4wLCBE ZWNlbWJlciAxNCwgMTk5OCwKPiArICogYXZhaWxhYmxlIGF0Cj4gKyAqIDxodHRwOi8vd3d3LnVz Yi5vcmcvZGV2ZWxvcGVycy9kZXZjbGFzc19kb2NzL3VzYm1hc3MtdWZpMTAucGRmPi4KPiArICov Cj4gKwo+ICsvKgo+ICsgKgkJCQlEcml2ZXIgRGVzaWduCj4gKyAqCj4gKyAqIFRoZSBNU0YgaXMg ZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZC4gIFRoZXJlIGlzIGEgbWFpbiBrZXJuZWwKPiArICogdGhy ZWFkIHRoYXQgaGFuZGxlcyBtb3N0IG9mIHRoZSB3b3JrLiAgSW50ZXJydXB0IHJvdXRpbmVzIGZp ZWxkCj4gKyAqIGNhbGxiYWNrcyBmcm9tIHRoZSBjb250cm9sbGVyIGRyaXZlcjogYnVsay0gYW5k IGludGVycnVwdC1yZXF1ZXN0Cj4gKyAqIGNvbXBsZXRpb24gbm90aWZpY2F0aW9ucywgZW5kcG9p bnQtMCBldmVudHMsIGFuZCBkaXNjb25uZWN0IGV2ZW50cy4KPiArICogQ29tcGxldGlvbiBldmVu dHMgYXJlIHBhc3NlZCB0byB0aGUgbWFpbiB0aHJlYWQgYnkgd2FrZXVwIGNhbGxzLiAgTWFueQo+ ICsgKiBlcDAgcmVxdWVzdHMgYXJlIGhhbmRsZWQgYXQgaW50ZXJydXB0IHRpbWUsIGJ1dCBTZXRJ bnRlcmZhY2UsCj4gKyAqIFNldENvbmZpZ3VyYXRpb24sIGFuZCBkZXZpY2UgcmVzZXQgcmVxdWVz dHMgYXJlIGZvcndhcmRlZCB0byB0aGUKPiArICogdGhyZWFkIGluIHRoZSBmb3JtIG9mICJleGNl cHRpb25zIiB1c2luZyBTSUdVU1IxIHNpZ25hbHMgKHNpbmNlIHRoZXkKPiArICogc2hvdWxkIGlu dGVycnVwdCBhbnkgb25nb2luZyBmaWxlIEkvTyBvcGVyYXRpb25zKS4KPiArICoKPiArICogVGhl IHRocmVhZCdzIG1haW4gcm91dGluZSBpbXBsZW1lbnRzIHRoZSBzdGFuZGFyZCBjb21tYW5kL2Rh dGEvc3RhdHVzCj4gKyAqIHBhcnRzIG9mIGEgU0NTSSBpbnRlcmFjdGlvbi4gIEl0IGFuZCBpdHMg c3Vicm91dGluZXMgYXJlIGZ1bGwgb2YgdGVzdHMKPiArICogZm9yIHBlbmRpbmcgc2lnbmFscy9l eGNlcHRpb25zIC0tIGFsbCB0aGlzIHBvbGxpbmcgaXMgbmVjZXNzYXJ5IHNpbmNlCj4gKyAqIHRo ZSBrZXJuZWwgaGFzIG5vIHNldGptcC9sb25nam1wIGVxdWl2YWxlbnRzLiAgKE1heWJlIHRoaXMg aXMgYW4KPiArICogaW5kaWNhdGlvbiB0aGF0IHRoZSBkcml2ZXIgcmVhbGx5IHdhbnRzIHRvIGJl IHJ1bm5pbmcgaW4gdXNlcnNwYWNlLikKPiArICogQW4gaW1wb3J0YW50IHBvaW50IGlzIHRoYXQg c28gbG9uZyBhcyB0aGUgdGhyZWFkIGlzIGFsaXZlIGl0IGtlZXBzIGFuCj4gKyAqIG9wZW4gcmVm ZXJlbmNlIHRvIHRoZSBiYWNraW5nIGZpbGUuICBUaGlzIHdpbGwgcHJldmVudCB1bm1vdW50aW5n Cj4gKyAqIHRoZSBiYWNraW5nIGZpbGUncyB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gYW5kIGNvdWxk IGNhdXNlIHByb2JsZW1zCj4gKyAqIGR1cmluZyBzeXN0ZW0gc2h1dGRvd24sIGZvciBleGFtcGxl LiAgVG8gcHJldmVudCBzdWNoIHByb2JsZW1zLCB0aGUKPiArICogdGhyZWFkIGNhdGNoZXMgSU5U LCBURVJNLCBhbmQgS0lMTCBzaWduYWxzIGFuZCBjb252ZXJ0cyB0aGVtIGludG8KPiArICogYW4g RVhJVCBleGNlcHRpb24uCj4gKyAqCj4gKyAqIEluIG5vcm1hbCBvcGVyYXRpb24gdGhlIG1haW4g dGhyZWFkIGlzIHN0YXJ0ZWQgZHVyaW5nIHRoZSBnYWRnZXQncwo+ICsgKiBmc2dfYmluZCgpIGNh bGxiYWNrIGFuZCBzdG9wcGVkIGR1cmluZyBmc2dfdW5iaW5kKCkuICBCdXQgaXQgY2FuCj4gKyAq IGFsc28gZXhpdCB3aGVuIGl0IHJlY2VpdmVzIGEgc2lnbmFsLCBhbmQgdGhlcmUncyBubyBwb2lu dCBsZWF2aW5nCj4gKyAqIHRoZSBnYWRnZXQgcnVubmluZyB3aGVuIHRoZSB0aHJlYWQgaXMgZGVh ZC4gIEF0IG9mIHRoaXMgbW9tZW50LCBNU0YKPiArICogcHJvdmlkZXMgbm8gd2F5IHRvIGRlcmVn aXN0ZXIgdGhlIGdhZGdldCB3aGVuIHRocmVhZCBkaWVzIC0tIG1heWJlCj4gKyAqIGEgY2FsbGJh Y2sgZnVuY3Rpb25zIGlzIG5lZWRlZC4KPiArICoKPiArICogVG8gcHJvdmlkZSBtYXhpbXVtIHRo cm91Z2hwdXQsIHRoZSBkcml2ZXIgdXNlcyBhIGNpcmN1bGFyIHBpcGVsaW5lIG9mCj4gKyAqIGJ1 ZmZlciBoZWFkcyAoc3RydWN0IGZzZ19idWZmaGQpLiAgSW4gcHJpbmNpcGxlIHRoZSBwaXBlbGlu ZSBjYW4gYmUKPiArICogYXJiaXRyYXJpbHkgbG9uZzsgaW4gcHJhY3RpY2UgdGhlIGJlbmVmaXRz IGRvbid0IGp1c3RpZnkgaGF2aW5nIG1vcmUKPiArICogdGhhbiAyIHN0YWdlcyAoaS5lLiwgZG91 YmxlIGJ1ZmZlcmluZykuICBCdXQgaXQgaGVscHMgdG8gdGhpbmsgb2YgdGhlCj4gKyAqIHBpcGVs aW5lIGFzIGJlaW5nIGEgbG9uZyBvbmUuICBFYWNoIGJ1ZmZlciBoZWFkIGNvbnRhaW5zIGEgYnVs ay1pbiBhbmQKPiArICogYSBidWxrLW91dCByZXF1ZXN0IHBvaW50ZXIgKHNpbmNlIHRoZSBidWZm ZXIgY2FuIGJlIHVzZWQgZm9yIGJvdGgKPiArICogb3V0cHV0IGFuZCBpbnB1dCAtLSBkaXJlY3Rp b25zIGFsd2F5cyBhcmUgZ2l2ZW4gZnJvbSB0aGUgaG9zdCdzCj4gKyAqIHBvaW50IG9mIHZpZXcp IGFzIHdlbGwgYXMgYSBwb2ludGVyIHRvIHRoZSBidWZmZXIgYW5kIHZhcmlvdXMgc3RhdGUKPiAr ICogdmFyaWFibGVzLgo+ICsgKgo+ICsgKiBVc2Ugb2YgdGhlIHBpcGVsaW5lIGZvbGxvd3MgYSBz aW1wbGUgcHJvdG9jb2wuICBUaGVyZSBpcyBhIHZhcmlhYmxlCj4gKyAqIChmc2ctPm5leHRfYnVm ZmhkX3RvX2ZpbGwpIHRoYXQgcG9pbnRzIHRvIHRoZSBuZXh0IGJ1ZmZlciBoZWFkIHRvIHVzZS4K PiArICogQXQgYW55IHRpbWUgdGhhdCBidWZmZXIgaGVhZCBtYXkgc3RpbGwgYmUgaW4gdXNlIGZy b20gYW4gZWFybGllcgo+ICsgKiByZXF1ZXN0LCBzbyBlYWNoIGJ1ZmZlciBoZWFkIGhhcyBhIHN0 YXRlIHZhcmlhYmxlIGluZGljYXRpbmcgd2hldGhlcgo+ICsgKiBpdCBpcyBFTVBUWSwgRlVMTCwg b3IgQlVTWS4gIFR5cGljYWwgdXNlIGludm9sdmVzIHdhaXRpbmcgZm9yIHRoZQo+ICsgKiBidWZm ZXIgaGVhZCB0byBiZSBFTVBUWSwgZmlsbGluZyB0aGUgYnVmZmVyIGVpdGhlciBieSBmaWxlIEkv TyBvciBieQo+ICsgKiBVU0IgSS9PIChkdXJpbmcgd2hpY2ggdGhlIGJ1ZmZlciBoZWFkIGlzIEJV U1kpLCBhbmQgbWFya2luZyB0aGUgYnVmZmVyCj4gKyAqIGhlYWQgRlVMTCB3aGVuIHRoZSBJL08g aXMgY29tcGxldGUuICBUaGVuIHRoZSBidWZmZXIgd2lsbCBiZSBlbXB0aWVkCj4gKyAqIChhZ2Fp biBwb3NzaWJseSBieSBVU0IgSS9PLCBkdXJpbmcgd2hpY2ggaXQgaXMgbWFya2VkIEJVU1kpIGFu ZAo+ICsgKiBmaW5hbGx5IG1hcmtlZCBFTVBUWSBhZ2FpbiAocG9zc2libHkgYnkgYSBjb21wbGV0 aW9uIHJvdXRpbmUpLgo+ICsgKgo+ICsgKiBBIG1vZHVsZSBwYXJhbWV0ZXIgdGVsbHMgdGhlIGRy aXZlciB0byBhdm9pZCBzdGFsbGluZyB0aGUgYnVsawo+ICsgKiBlbmRwb2ludHMgd2hlcmV2ZXIg dGhlIHRyYW5zcG9ydCBzcGVjaWZpY2F0aW9uIGFsbG93cy4gIFRoaXMgaXMKPiArICogbmVjZXNz YXJ5IGZvciBzb21lIFVEQ3MgbGlrZSB0aGUgU3VwZXJILCB3aGljaCBjYW5ub3QgcmVsaWFibHkg Y2xlYXIgYQo+ICsgKiBoYWx0IG9uIGEgYnVsayBlbmRwb2ludC4gIEhvd2V2ZXIsIHVuZGVyIGNl cnRhaW4gY2lyY3Vtc3RhbmNlcyB0aGUKPiArICogQnVsay1vbmx5IHNwZWNpZmljYXRpb24gcmVx dWlyZXMgYSBzdGFsbC4gIEluIHN1Y2ggY2FzZXMgdGhlIGRyaXZlcgo+ICsgKiB3aWxsIGhhbHQg dGhlIGVuZHBvaW50IGFuZCBzZXQgYSBmbGFnIGluZGljYXRpbmcgdGhhdCBpdCBzaG91bGQgY2xl YXIKPiArICogdGhlIGhhbHQgaW4gc29mdHdhcmUgZHVyaW5nIHRoZSBuZXh0IGRldmljZSByZXNl dC4gIEhvcGVmdWxseSB0aGlzCj4gKyAqIHdpbGwgcGVybWl0IGV2ZXJ5dGhpbmcgdG8gd29yayBj b3JyZWN0bHkuICBGdXJ0aGVybW9yZSwgYWx0aG91Z2ggdGhlCj4gKyAqIHNwZWNpZmljYXRpb24g YWxsb3dzIHRoZSBidWxrLW91dCBlbmRwb2ludCB0byBoYWx0IHdoZW4gdGhlIGhvc3Qgc2VuZHMK PiArICogdG9vIG11Y2ggZGF0YSwgaW1wbGVtZW50aW5nIHRoaXMgd291bGQgY2F1c2UgYW4gdW5h dm9pZGFibGUgcmFjZS4KPiArICogVGhlIGRyaXZlciB3aWxsIGFsd2F5cyB1c2UgdGhlICJuby1z dGFsbCIgYXBwcm9hY2ggZm9yIE9VVCB0cmFuc2ZlcnMuCj4gKyAqCj4gKyAqIE9uZSBzdWJ0bGUg cG9pbnQgY29uY2VybnMgc2VuZGluZyBzdGF0dXMtc3RhZ2UgcmVzcG9uc2VzIGZvciBlcDAKPiAr ICogcmVxdWVzdHMuICBTb21lIG9mIHRoZXNlIHJlcXVlc3RzLCBzdWNoIGFzIGRldmljZSByZXNl dCwgY2FuIGludm9sdmUKPiArICogaW50ZXJydXB0aW5nIGFuIG9uZ29pbmcgZmlsZSBJL08gb3Bl cmF0aW9uLCB3aGljaCBtaWdodCB0YWtlIGFuCj4gKyAqIGFyYml0cmFyaWx5IGxvbmcgdGltZS4g IER1cmluZyB0aGF0IGRlbGF5IHRoZSBob3N0IG1pZ2h0IGdpdmUgdXAgb24KPiArICogdGhlIG9y aWdpbmFsIGVwMCByZXF1ZXN0IGFuZCBpc3N1ZSBhIG5ldyBvbmUuICBXaGVuIHRoYXQgaGFwcGVu cyB0aGUKPiArICogZHJpdmVyIHNob3VsZCBub3Qgbm90aWZ5IHRoZSBob3N0IGFib3V0IGNvbXBs ZXRpb24gb2YgdGhlIG9yaWdpbmFsCj4gKyAqIHJlcXVlc3QsIGFzIHRoZSBob3N0IHdpbGwgbm8g bG9uZ2VyIGJlIHdhaXRpbmcgZm9yIGl0LiAgU28gdGhlIGRyaXZlcgo+ICsgKiBhc3NpZ25zIHRv IGVhY2ggZXAwIHJlcXVlc3QgYSB1bmlxdWUgdGFnLCBhbmQgaXQga2VlcHMgdHJhY2sgb2YgdGhl Cj4gKyAqIHRhZyB2YWx1ZSBvZiB0aGUgcmVxdWVzdCBhc3NvY2lhdGVkIHdpdGggYSBsb25nLXJ1 bm5pbmcgZXhjZXB0aW9uCj4gKyAqIChkZXZpY2UtcmVzZXQsIGludGVyZmFjZS1jaGFuZ2UsIG9y IGNvbmZpZ3VyYXRpb24tY2hhbmdlKS4gIFdoZW4gdGhlCj4gKyAqIGV4Y2VwdGlvbiBoYW5kbGVy IGlzIGZpbmlzaGVkLCB0aGUgc3RhdHVzLXN0YWdlIHJlc3BvbnNlIGlzIHN1Ym1pdHRlZAo+ICsg KiBvbmx5IGlmIHRoZSBjdXJyZW50IGVwMCByZXF1ZXN0IHRhZyBpcyBlcXVhbCB0byB0aGUgZXhj ZXB0aW9uIHJlcXVlc3QKPiArICogdGFnLiAgVGh1cyBvbmx5IHRoZSBtb3N0IHJlY2VudGx5IHJl Y2VpdmVkIGVwMCByZXF1ZXN0IHdpbGwgZ2V0IGEKPiArICogc3RhdHVzLXN0YWdlIHJlc3BvbnNl Lgo+ICsgKgo+ICsgKiBXYXJuaW5nOiBUaGlzIGRyaXZlciBzb3VyY2UgZmlsZSBpcyB0b28gbG9u Zy4gIEl0IG91Z2h0IHRvIGJlIHNwbGl0IHVwCj4gKyAqIGludG8gYSBoZWFkZXIgZmlsZSBwbHVz IGFib3V0IDMgc2VwYXJhdGUgLmMgZmlsZXMsIHRvIGhhbmRsZSB0aGUgZGV0YWlscwo+ICsgKiBv ZiB0aGUgR2FkZ2V0LCBVU0IgTWFzcyBTdG9yYWdlLCBhbmQgU0NTSSBwcm90b2NvbHMuCj4gKyAq Lwo+ICsKPiArLyogI2RlZmluZSBWRVJCT1NFX0RFQlVHICovCj4gKy8qICNkZWZpbmUgRFVNUF9N U0dTICovCj4gKwo+ICsjZGVmaW5lIHByX2ZtdChmbXQpICJmX3VtczogIiBmbXQKPiArCj4gKyNp bmNsdWRlIDxjb21tb24uaD4KPiArI2luY2x1ZGUgPHVuaXN0ZC5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvc3RhdC5oPgo+ICsjaW5jbHVkZSA8bGludXgvd2FpdC5oPgo+ICsjaW5jbHVkZSA8ZmNudGwu aD4KPiArI2luY2x1ZGUgPGZpbGUtbGlzdC5oPgo+ICsjaW5jbHVkZSA8ZG1hLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9idWcuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9wYWdlbWFwLmg+Cj4gKyNpbmNsdWRlIDxkaXNrcy5oPgo+ICsjaW5jbHVkZSA8c2Nz aS5oPgo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+ICsjaW5jbHVkZSA8dXNiL21hc3Nf c3RvcmFnZS5oPgo+ICsKPiArI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2JpdG9wcy5oPgo+ICsjaW5jbHVkZSA8dXNiL2dhZGdldC5oPgo+ICsjaW5jbHVkZSA8 dXNiL2NvbXBvc2l0ZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+Cj4gKwo+ICsvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSovCj4gKwo+ICsjZGVmaW5lIEZTR19EUklWRVJfREVTQwkidW1zIgo+ICsj ZGVmaW5lIFVNU19OQU1FX0xFTiAxNgo+ICsKPiArI2RlZmluZSBGU0dfRFJJVkVSX1ZFUlNJT04J IjIwMTIvMDYvNSIKPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyIGZzZ19zdHJpbmdfaW50ZXJmYWNl W10gPSAiTWFzcyBTdG9yYWdlIjsKPiArCj4gKyNpbmNsdWRlICJzdG9yYWdlX2NvbW1vbi5oIgo+ ICsKPiArLyogU3RhdGljIHN0cmluZ3MsIGluIFVURi04IChmb3Igc2ltcGxpY2l0eSB3ZSB1c2Ug b25seSBBU0NJSSBjaGFyYWN0ZXJzKSAqLwo+ICtzdHJ1Y3QgdXNiX3N0cmluZwkJZnNnX3N0cmlu Z3NbXSA9IHsKPiArCXtGU0dfU1RSSU5HX0lOVEVSRkFDRSwJCWZzZ19zdHJpbmdfaW50ZXJmYWNl fSwKPiArCXt9Cj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncwlm c2dfc3RyaW5ndGFiID0gewo+ICsJLmxhbmd1YWdlCT0gMHgwNDA5LAkJLyogZW4tdXMgKi8KPiAr CS5zdHJpbmdzCT0gZnNnX3N0cmluZ3MsCj4gK307Cj4gKwo+ICsvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q Lwo+ICsKPiArc3RydWN0IGNvbXBsZXRpb24geyBpbnQgZG9uZTsgfTsKPiArCj4gKyNkZWZpbmUg aW5pdF9jb21wbGV0aW9uKHgpIGRvIHsgKHgpLT5kb25lID0gMDsgfSB3aGlsZSAoMCkKPiArI2Rl ZmluZSByZWluaXRfY29tcGxldGlvbih4KSBpbml0X2NvbXBsZXRpb24oeCkKPiArc3RhdGljIGlu bGluZSBpbnQgd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBjb21wbGV0 aW9uICp4KQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXdoaWxlICgheC0+ZG9uZSkgewo+ICsJ CXJldCA9IGN0cmxjKCk7Cj4gKwkJaWYgKHJldCkKPiArCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsK PiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsjZGVmaW5lIGNvbXBsZXRlX2FuZF9leGl0 KC4uLikgcmV0dXJuIDAKPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBjb21wbGV0ZShzdHJ1Y3Qg Y29tcGxldGlvbiAqeCkKPiArewo+ICsJeC0+ZG9uZSA9IDE7Cj4gK30KPiArCj4gK3N0cnVjdCB0 YXNrX3N0cnVjdCB7Cj4gKwlpbnQgKCp0aHJlYWRmbikodm9pZCAqKTsKPiArCXZvaWQgKmFyZzsK PiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmt0aHJlYWRfcnVuKGludCAo KnRocmVhZGZuKSh2b2lkICopLCB2b2lkICphcmcsCj4gKwkJCQkJICBjb25zdCBjaGFyICpuYW1l KQo+ICt7Cj4gKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Cj4gKwo+ICsJdGFzayA9IHhtYWxs b2Moc2l6ZW9mKCp0YXNrKSk7Cj4gKwl0YXNrLT50aHJlYWRmbiA9IHRocmVhZGZuOwo+ICsJdGFz ay0+YXJnID0gYXJnOwo+ICsKPiArCXJldHVybiB0YXNrOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIGZy ZWVfa3RocmVhZF9zdHJ1Y3QodCkgZnJlZSh0KQo+ICsKPiArI2RlZmluZSBwb2xsKCkgdGhyZWFk X3Rhc2stPnRocmVhZGZuKHRocmVhZF90YXNrLT5hcmcpCj4gKwo+ICsjZGVmaW5lIHdhaXRfZXZl bnQocXVldWUsIGNvbmQpCWRvIHsgcG9sbCgpOyB9IHdoaWxlICghKGNvbmQpKQo+ICsjZGVmaW5l IHdha2VfdXAoLi4uKQkJZG8ge30gd2hpbGUgKDApCj4gKwo+ICtzdHJ1Y3QgdGFza19zdHJ1Y3QJ KnRocmVhZF90YXNrOwo+ICsKPiArLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KPiArCj4gK3N0cnVjdCBr cmVmIHtpbnQgeDsgfTsKPiArCj4gK3N0cnVjdCBmc2dfZGV2Owo+ICsKPiArc3RhdGljIHN0cnVj dCBmaWxlX2xpc3QgKnVtc19maWxlczsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9k ZXNjcmlwdG9yIHVtc19kZXZfZGVzY3JpcHRvciA9IHsKPiArCS5iTGVuZ3RoCQk9IFVTQl9EVF9E RVZJQ0VfU0laRSwKPiArCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfREVWSUNFLAo+ICsJLmJj ZFVTQgkJCT0gX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAo+ICsJLmJEZXZpY2VDbGFz cwkJPSBVU0JfQ0xBU1NfUEVSX0lOVEVSRkFDRSwKPiArCS5iTnVtQ29uZmlndXJhdGlvbnMJPSAx LAo+ICt9Owo+ICsKPiArLyogRGF0YSBzaGFyZWQgYnkgYWxsIHRoZSBGU0cgaW5zdGFuY2VzLiAq Lwo+ICtzdHJ1Y3QgZnNnX2NvbW1vbiB7Cj4gKwlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0Owo+ ICsJc3RydWN0IGZzZ19kZXYJCSpmc2csICpuZXdfZnNnOwo+ICsKPiArCXdhaXRfcXVldWVfaGVh ZF90CWZzZ193YWl0Owo+ICsJc3RydWN0IHVzYl9lcAkJKmVwMDsJCS8qIENvcHkgb2YgZ2FkZ2V0 LT5lcDAgKi8KPiArCXN0cnVjdCB1c2JfcmVxdWVzdAkqZXAwcmVxOwkvKiBDb3B5IG9mIGNkZXYt PnJlcSAqLwo+ICsJdW5zaWduZWQgaW50CQllcDBfcmVxX3RhZzsKPiArCj4gKwlzdHJ1Y3QgZnNn X2J1ZmZoZAkqbmV4dF9idWZmaGRfdG9fZmlsbDsKPiArCXN0cnVjdCBmc2dfYnVmZmhkCSpuZXh0 X2J1ZmZoZF90b19kcmFpbjsKPiArCXN0cnVjdCBmc2dfYnVmZmhkCWJ1ZmZoZHNbRlNHX05VTV9C VUZGRVJTXTsKPiArCj4gKwlpbnQJCQljbW5kX3NpemU7Cj4gKwl1OAkJCWNtbmRbTUFYX0NPTU1B TkRfU0laRV07Cj4gKwo+ICsJdW5zaWduZWQgaW50CQlubHVuczsKPiArCXVuc2lnbmVkIGludAkJ bHVuOwo+ICsJc3RydWN0IGZzZ19sdW4gICAgICAgICAgbHVuc1tGU0dfTUFYX0xVTlNdOwo+ICsK PiArCXVuc2lnbmVkIGludAkJYnVsa19vdXRfbWF4cGFja2V0Owo+ICsJZW51bSBmc2dfc3RhdGUJ CXN0YXRlOwkJLyogRm9yIGV4Y2VwdGlvbiBoYW5kbGluZyAqLwo+ICsJdW5zaWduZWQgaW50CQll eGNlcHRpb25fcmVxX3RhZzsKPiArCj4gKwllbnVtIGRhdGFfZGlyZWN0aW9uCWRhdGFfZGlyOwo+ ICsJdTMyCQkJZGF0YV9zaXplOwo+ICsJdTMyCQkJZGF0YV9zaXplX2Zyb21fY21uZDsKPiArCXUz MgkJCXRhZzsKPiArCXUzMgkJCXJlc2lkdWU7Cj4gKwl1MzIJCQl1c2JfYW1vdW50X2xlZnQ7Cj4g Kwo+ICsJdW5zaWduZWQgaW50CQljYW5fc3RhbGw6MTsKPiArCXVuc2lnbmVkIGludAkJZnJlZV9z dG9yYWdlX29uX3JlbGVhc2U6MTsKPiArCXVuc2lnbmVkIGludAkJcGhhc2VfZXJyb3I6MTsKPiAr CXVuc2lnbmVkIGludAkJc2hvcnRfcGFja2V0X3JlY2VpdmVkOjE7Cj4gKwl1bnNpZ25lZCBpbnQJ CWJhZF9sdW5fb2theToxOwo+ICsJdW5zaWduZWQgaW50CQlydW5uaW5nOjE7Cj4gKwo+ICsJc3Ry dWN0IGNvbXBsZXRpb24JdGhyZWFkX3dha2V1cF9uZWVkZWQ7Cj4gKwlzdHJ1Y3QgY29tcGxldGlv bgl0aHJlYWRfbm90aWZpZXI7Cj4gKwlib29sCQkJc2h1dGRvd247Cj4gKwo+ICsJLyogQ2FsbGJh Y2sgZnVuY3Rpb25zLiAqLwo+ICsJY29uc3Qgc3RydWN0IGZzZ19vcGVyYXRpb25zCSpvcHM7Cj4g KwkvKiBHYWRnZXQncyBwcml2YXRlIGRhdGEuICovCj4gKwl2b2lkCQkJKnByaXZhdGVfZGF0YTsK PiArCj4gKwljb25zdCBjaGFyICp2ZW5kb3JfbmFtZTsJCS8qICA4IGNoYXJhY3RlcnMgb3IgbGVz cyAqLwo+ICsJY29uc3QgY2hhciAqcHJvZHVjdF9uYW1lOwkJLyogMTYgY2hhcmFjdGVycyBvciBs ZXNzICovCj4gKwl1MTYgcmVsZWFzZTsKPiArCj4gKwkvKiBWZW5kb3IgKDggY2hhcnMpLCBwcm9k dWN0ICgxNiBjaGFycyksIHJlbGVhc2UgKDQKPiArCSAqIGhleGFkZWNpbWFsIGRpZ2l0cykgYW5k IE5VTCBieXRlICovCj4gKwljaGFyIGlucXVpcnlfc3RyaW5nWzggKyAxNiArIDQgKyAxXTsKPiAr Cj4gKwlzdHJ1Y3Qga3JlZgkJcmVmOwo+ICt9Owo+ICsKPiArc3RydWN0IGZzZ19jb25maWcgewo+ ICsJdW5zaWduZWQgbmx1bnM7Cj4gKwlzdHJ1Y3QgZnNnX2x1bl9jb25maWcgewo+ICsJCWNvbnN0 IGNoYXIgKmZpbGVuYW1lOwo+ICsJCWNoYXIgcm87Cj4gKwkJY2hhciByZW1vdmFibGU7Cj4gKwkJ Y2hhciBjZHJvbTsKPiArCQljaGFyIG5vZnVhOwo+ICsJfSBsdW5zW0ZTR19NQVhfTFVOU107Cj4g Kwo+ICsJLyogQ2FsbGJhY2sgZnVuY3Rpb25zLiAqLwo+ICsJY29uc3Qgc3RydWN0IGZzZ19vcGVy YXRpb25zICAgICAqb3BzOwo+ICsJLyogR2FkZ2V0J3MgcHJpdmF0ZSBkYXRhLiAqLwo+ICsJdm9p ZAkJCSpwcml2YXRlX2RhdGE7Cj4gKwo+ICsJY29uc3QgY2hhciAqdmVuZG9yX25hbWU7CQkvKiAg OCBjaGFyYWN0ZXJzIG9yIGxlc3MgKi8KPiArCWNvbnN0IGNoYXIgKnByb2R1Y3RfbmFtZTsJCS8q IDE2IGNoYXJhY3RlcnMgb3IgbGVzcyAqLwo+ICsKPiArCWNoYXIJCQljYW5fc3RhbGw7Cj4gK307 Cj4gKwo+ICtzdHJ1Y3QgZnNnX2RldiB7Cj4gKwlzdHJ1Y3QgdXNiX2Z1bmN0aW9uCWZ1bmN0aW9u Owo+ICsJc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldDsJLyogQ29weSBvZiBjZGV2LT5nYWRnZXQg Ki8KPiArCXN0cnVjdCBmc2dfY29tbW9uCSpjb21tb247Cj4gKwo+ICsJdTE2CQkJaW50ZXJmYWNl X251bWJlcjsKPiArCj4gKwl1bnNpZ25lZCBpbnQJCWJ1bGtfaW5fZW5hYmxlZDoxOwo+ICsJdW5z aWduZWQgaW50CQlidWxrX291dF9lbmFibGVkOjE7Cj4gKwo+ICsJdW5zaWduZWQgbG9uZwkJYXRv bWljX2JpdGZsYWdzOwo+ICsjZGVmaW5lIElHTk9SRV9CVUxLX09VVAkJMAo+ICsKPiArCXN0cnVj dCB1c2JfZXAJCSpidWxrX2luOwo+ICsJc3RydWN0IHVzYl9lcAkJKmJ1bGtfb3V0Owo+ICt9Owo+ ICsKPiArCj4gK3N0YXRpYyBpbmxpbmUgaW50IF9fZnNnX2lzX3NldChzdHJ1Y3QgZnNnX2NvbW1v biAqY29tbW9uLAo+ICsJCQkgICAgICAgY29uc3QgY2hhciAqZnVuYywgdW5zaWduZWQgbGluZSkK PiArewo+ICsJaWYgKGNvbW1vbi0+ZnNnKQo+ICsJCXJldHVybiAxOwo+ICsJRVJST1IoY29tbW9u LCAiY29tbW9uLT5mc2cgaXMgTlVMTCBpbiAlcyBhdCAldVxuIiwgZnVuYywgbGluZSk7Cj4gKwlX QVJOX09OKDEpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIGZzZ19pc19z ZXQoY29tbW9uKSBsaWtlbHkoX19mc2dfaXNfc2V0KGNvbW1vbiwgX19mdW5jX18sIF9fTElORV9f KSkKPiArCj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBmc2dfZGV2ICpmc2dfZnJvbV9mdW5j KHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCj4gK3sKPiArCXJldHVybiBjb250YWluZXJfb2YoZiwg c3RydWN0IGZzZ19kZXYsIGZ1bmN0aW9uKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1 Y3QgZl91bXNfb3B0cyAqCj4gK2ZzZ19vcHRzX2Zyb21fZnVuY19pbnN0KGNvbnN0IHN0cnVjdCB1 c2JfZnVuY3Rpb25faW5zdGFuY2UgKmZpKQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGZp LCBzdHJ1Y3QgZl91bXNfb3B0cywgZnVuY19pbnN0KTsKPiArfQo+ICsKPiArdHlwZWRlZiB2b2lk ICgqZnNnX3JvdXRpbmVfdCkoc3RydWN0IGZzZ19kZXYgKik7Cj4gKwo+ICtzdGF0aWMgaW50IGV4 Y2VwdGlvbl9pbl9wcm9ncmVzcyhzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uKQo+ICt7Cj4gKwly ZXR1cm4gY29tbW9uLT5zdGF0ZSA+IEZTR19TVEFURV9JRExFOwo+ICt9Cj4gKwo+ICsvKiBNYWtl IGJ1bGstb3V0IHJlcXVlc3RzIGJlIGRpdmlzaWJsZSBieSB0aGUgbWF4cGFja2V0IHNpemUgKi8K PiArc3RhdGljIHZvaWQgc2V0X2J1bGtfb3V0X3JlcV9sZW5ndGgoc3RydWN0IGZzZ19jb21tb24g KmNvbW1vbiwKPiArCQlzdHJ1Y3QgZnNnX2J1ZmZoZCAqYmgsIHVuc2lnbmVkIGludCBsZW5ndGgp Cj4gK3sKPiArCXVuc2lnbmVkIGludAlyZW07Cj4gKwo+ICsJYmgtPmJ1bGtfb3V0X2ludGVuZGVk X2xlbmd0aCA9IGxlbmd0aDsKPiArCXJlbSA9IGxlbmd0aCAlIGNvbW1vbi0+YnVsa19vdXRfbWF4 cGFja2V0Owo+ICsJaWYgKHJlbSA+IDApCj4gKwkJbGVuZ3RoICs9IGNvbW1vbi0+YnVsa19vdXRf bWF4cGFja2V0IC0gcmVtOwo+ICsJYmgtPm91dHJlcS0+bGVuZ3RoID0gbGVuZ3RoOwo+ICt9Cj4g Kwo+ICsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwo+ICsKPiArc3RhdGljIHN0cnVjdCBmX3Vtc19vcHRz IHVtc1sxNF07IC8vIEZJWE1FCj4gK3N0YXRpYyBpbnQgdW1zX2NvdW50Owo+ICsKPiArc3RhdGlj IGludCBmc2dfc2V0X2hhbHQoc3RydWN0IGZzZ19kZXYgKmZzZywgc3RydWN0IHVzYl9lcCAqZXAp Cj4gK3sKPiArCWNvbnN0IGNoYXIJKm5hbWU7Cj4gKwo+ICsJaWYgKGVwID09IGZzZy0+YnVsa19p bikKPiArCQluYW1lID0gImJ1bGstaW4iOwo+ICsJZWxzZSBpZiAoZXAgPT0gZnNnLT5idWxrX291 dCkKPiArCQluYW1lID0gImJ1bGstb3V0IjsKPiArCWVsc2UKPiArCQluYW1lID0gZXAtPm5hbWU7 Cj4gKwlEQkcoZnNnLCAiJXMgc2V0IGhhbHRcbiIsIG5hbWUpOwo+ICsJcmV0dXJuIHVzYl9lcF9z ZXRfaGFsdChlcCk7Cj4gK30KPiArCj4gKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCj4gKwo+ICsvKiBU aGVzZSByb3V0aW5lcyBtYXkgYmUgY2FsbGVkIGluIHByb2Nlc3MgY29udGV4dCBvciBpbl9pcnEg Ki8KPiArCj4gKy8qIENhbGxlciBtdXN0IGhvbGQgZnNnLT5sb2NrICovCj4gK3N0YXRpYyB2b2lk IHdha2V1cF90aHJlYWQoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbikKPiArewo+ICsJY29tcGxl dGUoJmNvbW1vbi0+dGhyZWFkX3dha2V1cF9uZWVkZWQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCByZXBvcnRfZXhjZXB0aW9uKGNvbnN0IGNoYXIgKnByZWZpeCwgZW51bSBmc2dfc3RhdGUgc3Rh dGUpCj4gK3sKPiArCWNvbnN0IGNoYXIgKm1zZyA9ICI8dW5rbm93bj4iOwo+ICsJc3dpdGNoIChz dGF0ZSkgewo+ICsJLyogVGhpcyBvbmUgaXNuJ3QgdXNlZCBhbnl3aGVyZSAqLwo+ICsJY2FzZSBG U0dfU1RBVEVfQ09NTUFORF9QSEFTRToKPiArCQltc2cgPSAiQ29tbWFuZCBQaGFzZSI7Cj4gKwkJ YnJlYWs7Cj4gKwljYXNlIEZTR19TVEFURV9EQVRBX1BIQVNFOgo+ICsJCW1zZyA9ICJEYXRhIFBo YXNlIjsKPiArCQlicmVhazsKPiArCWNhc2UgRlNHX1NUQVRFX1NUQVRVU19QSEFTRToKPiArCQlt c2cgPSAiU3RhdHVzIFBoYXNlIjsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIEZTR19TVEFURV9J RExFOgo+ICsJCW1zZyA9ICJJZGxlIjsKPiArCQlicmVhazsKPiArCWNhc2UgRlNHX1NUQVRFX0FC T1JUX0JVTEtfT1VUOgo+ICsJCW1zZyA9ICJhYm9ydCBidWxrIG91dCI7Cj4gKwkJYnJlYWs7Cj4g KwljYXNlIEZTR19TVEFURV9SRVNFVDoKPiArCQltc2cgPSAicmVzZXQiOwo+ICsJCWJyZWFrOwo+ ICsJY2FzZSBGU0dfU1RBVEVfSU5URVJGQUNFX0NIQU5HRToKPiArCQltc2cgPSAiaW50ZXJmYWNl IGNoYW5nZSI7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEZTR19TVEFURV9DT05GSUdfQ0hBTkdFOgo+ ICsJCW1zZyA9ICJjb25maWcgY2hhbmdlIjsKPiArCQlicmVhazsKPiArCWNhc2UgRlNHX1NUQVRF X0RJU0NPTk5FQ1Q6Cj4gKwkJbXNnID0gImRpc2Nvbm5lY3QiOwo+ICsJCWJyZWFrOwo+ICsJY2Fz ZSBGU0dfU1RBVEVfRVhJVDoKPiArCQltc2cgPSAiZXhpdCI7Cj4gKwkJYnJlYWs7Cj4gKwljYXNl IEZTR19TVEFURV9URVJNSU5BVEVEOgo+ICsJCW1zZyA9ICJ0ZXJtaW5hdGVkIjsKPiArCQlicmVh azsKPiArCX0KPiArCj4gKwlwcl9kZWJ1ZygiJXM6ICVzXG4iLCBwcmVmaXgsIG1zZyk7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIHJhaXNlX2V4Y2VwdGlvbihzdHJ1Y3QgZnNnX2NvbW1vbiAqY29t bW9uLCBlbnVtIGZzZ19zdGF0ZSBuZXdfc3RhdGUpCj4gK3sKPiArCS8qIERvIG5vdGhpbmcgaWYg YSBoaWdoZXItcHJpb3JpdHkgZXhjZXB0aW9uIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MuCj4gKwkg KiBJZiBhIGxvd2VyLW9yLWVxdWFsIHByaW9yaXR5IGV4Y2VwdGlvbiBpcyBpbiBwcm9ncmVzcywg cHJlZW1wdCBpdAo+ICsJICogYW5kIG5vdGlmeSB0aGUgbWFpbiB0aHJlYWQgYnkgc2VuZGluZyBp dCBhIHNpZ25hbC4gKi8KPiArCWlmIChjb21tb24tPnN0YXRlIDw9IG5ld19zdGF0ZSkgewo+ICsJ CXJlcG9ydF9leGNlcHRpb24oInJhaXNpbmcgKHByZWVtcHRlZCkiLCBuZXdfc3RhdGUpOwo+ICsJ CWNvbW1vbi0+ZXhjZXB0aW9uX3JlcV90YWcgPSBjb21tb24tPmVwMF9yZXFfdGFnOwo+ICsJCWNv bW1vbi0+c3RhdGUgPSBuZXdfc3RhdGU7Cj4gKwkJd2FrZXVwX3RocmVhZChjb21tb24pOwo+ICsJ fQo+ICt9Cj4gKwo+ICsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwo+ICsKPiArc3RhdGljIGludCBlcDBf cXVldWUoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbikKPiArewo+ICsJaW50CXJjOwo+ICsKPiAr CXJjID0gdXNiX2VwX3F1ZXVlKGNvbW1vbi0+ZXAwLCBjb21tb24tPmVwMHJlcSk7Cj4gKwljb21t b24tPmVwMC0+ZHJpdmVyX2RhdGEgPSBjb21tb247Cj4gKwlpZiAocmMgIT0gMCAmJiByYyAhPSAt RVNIVVRET1dOKSB7Cj4gKwkJLyogV2UgY2FuJ3QgZG8gbXVjaCBtb3JlIHRoYW4gd2FpdCBmb3Ig YSByZXNldCAqLwo+ICsJCVdBUk5JTkcoY29tbW9uLCAiZXJyb3IgaW4gc3VibWlzc2lvbjogJXMg LS0+ICVkXG4iLAo+ICsJCQljb21tb24tPmVwMC0+bmFtZSwgcmMpOwo+ICsJfQo+ICsJcmV0dXJu IHJjOwo+ICt9Cj4gKwo+ICsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwo+ICsKPiArLyogQnVsayBhbmQg aW50ZXJydXB0IGVuZHBvaW50IGNvbXBsZXRpb24gaGFuZGxlcnMuCj4gKyAqIFRoZXNlIGFsd2F5 cyBydW4gaW5faXJxLiAqLwo+ICsKPiArc3RhdGljIHZvaWQgYnVsa19pbl9jb21wbGV0ZShzdHJ1 Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCj4gK3sKPiArCXN0cnVjdCBm c2dfY29tbW9uCSpjb21tb24gPSBlcC0+ZHJpdmVyX2RhdGE7Cj4gKwlzdHJ1Y3QgZnNnX2J1ZmZo ZAkqYmggPSByZXEtPmNvbnRleHQ7Cj4gKwo+ICsJaWYgKHJlcS0+c3RhdHVzIHx8IHJlcS0+YWN0 dWFsICE9IHJlcS0+bGVuZ3RoKQo+ICsJCURCRyhjb21tb24sICIlcyAtLT4gJWQsICV1LyV1XG4i LCBfX2Z1bmNfXywKPiArCQkJCXJlcS0+c3RhdHVzLCByZXEtPmFjdHVhbCwgcmVxLT5sZW5ndGgp Owo+ICsJaWYgKHJlcS0+c3RhdHVzID09IC1FQ09OTlJFU0VUKQkJLyogUmVxdWVzdCB3YXMgY2Fu Y2VsbGVkICovCj4gKwkJdXNiX2VwX2ZpZm9fZmx1c2goZXApOwo+ICsKPiArCS8qIEhvbGQgdGhl IGxvY2sgd2hpbGUgd2UgdXBkYXRlIHRoZSByZXF1ZXN0IGFuZCBidWZmZXIgc3RhdGVzICovCj4g KwliaC0+aW5yZXFfYnVzeSA9IDA7Cj4gKwliaC0+c3RhdGUgPSBCVUZfU1RBVEVfRU1QVFk7Cj4g Kwl3YWtldXBfdGhyZWFkKGNvbW1vbik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGJ1bGtfb3V0 X2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKPiAr ewo+ICsJc3RydWN0IGZzZ19jb21tb24JKmNvbW1vbiA9IGVwLT5kcml2ZXJfZGF0YTsKPiArCXN0 cnVjdCBmc2dfYnVmZmhkCSpiaCA9IHJlcS0+Y29udGV4dDsKPiArCj4gKwlkdW1wX21zZyhjb21t b24sICJidWxrLW91dCIsIHJlcS0+YnVmLCByZXEtPmFjdHVhbCk7Cj4gKwlpZiAocmVxLT5zdGF0 dXMgfHwgcmVxLT5hY3R1YWwgIT0gYmgtPmJ1bGtfb3V0X2ludGVuZGVkX2xlbmd0aCkKPiArCQlE QkcoY29tbW9uLCAiJXMgLS0+ICVkLCAldS8ldVxuIiwgX19mdW5jX18sCj4gKwkJCQlyZXEtPnN0 YXR1cywgcmVxLT5hY3R1YWwsCj4gKwkJCQliaC0+YnVsa19vdXRfaW50ZW5kZWRfbGVuZ3RoKTsK PiArCWlmIChyZXEtPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCkJCS8qIFJlcXVlc3Qgd2FzIGNhbmNl bGxlZCAqLwo+ICsJCXVzYl9lcF9maWZvX2ZsdXNoKGVwKTsKPiArCj4gKwkvKiBIb2xkIHRoZSBs b2NrIHdoaWxlIHdlIHVwZGF0ZSB0aGUgcmVxdWVzdCBhbmQgYnVmZmVyIHN0YXRlcyAqLwo+ICsJ YmgtPm91dHJlcV9idXN5ID0gMDsKPiArCWJoLT5zdGF0ZSA9IEJVRl9TVEFURV9GVUxMOwo+ICsJ d2FrZXVwX3RocmVhZChjb21tb24pOwo+ICt9Cj4gKwo+ICsvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwo+ ICsKPiArLyogRXAwIGNsYXNzLXNwZWNpZmljIGhhbmRsZXJzLiAgVGhlc2UgYWx3YXlzIHJ1biBp bl9pcnEuICovCj4gKwo+ICtzdGF0aWMgaW50IGZzZ19zZXR1cChzdHJ1Y3QgdXNiX2Z1bmN0aW9u ICpmLAo+ICsJCWNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpCj4gK3sKPiArCXN0 cnVjdCBmc2dfZGV2CQkqZnNnID0gZnNnX2Zyb21fZnVuYyhmKTsKPiArCXN0cnVjdCB1c2JfcmVx dWVzdAkqcmVxID0gZnNnLT5jb21tb24tPmVwMHJlcTsKPiArCXUxNgkJCXdfaW5kZXggPSBnZXRf dW5hbGlnbmVkX2xlMTYoJmN0cmwtPndJbmRleCk7Cj4gKwl1MTYJCQl3X3ZhbHVlID0gZ2V0X3Vu YWxpZ25lZF9sZTE2KCZjdHJsLT53VmFsdWUpOwo+ICsJdTE2CQkJd19sZW5ndGggPSBnZXRfdW5h bGlnbmVkX2xlMTYoJmN0cmwtPndMZW5ndGgpOwo+ICsKPiArCWlmICghZnNnX2lzX3NldChmc2ct PmNvbW1vbikpCj4gKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICsKPiArCXN3aXRjaCAoY3RybC0+ YlJlcXVlc3QpIHsKPiArCj4gKwljYXNlIFVTX0JVTEtfUkVTRVRfUkVRVUVTVDoKPiArCQlpZiAo Y3RybC0+YlJlcXVlc3RUeXBlICE9Cj4gKwkJICAgIChVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NM QVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSkpCj4gKwkJCWJyZWFrOwo+ICsJCWlmICh3X2luZGV4 ICE9IGZzZy0+aW50ZXJmYWNlX251bWJlciB8fCB3X3ZhbHVlICE9IDApCj4gKwkJCXJldHVybiAt RURPTTsKPiArCj4gKwkJLyogUmFpc2UgYW4gZXhjZXB0aW9uIHRvIHN0b3AgdGhlIGN1cnJlbnQg b3BlcmF0aW9uCj4gKwkJICogYW5kIHJlaW5pdGlhbGl6ZSBvdXIgc3RhdGUuICovCj4gKwkJREJH KGZzZywgImJ1bGsgcmVzZXQgcmVxdWVzdFxuIik7Cj4gKwkJcmFpc2VfZXhjZXB0aW9uKGZzZy0+ Y29tbW9uLCBGU0dfU1RBVEVfUkVTRVQpOwo+ICsJCXJldHVybiBERUxBWUVEX1NUQVRVUzsKPiAr Cj4gKwljYXNlIFVTX0JVTEtfR0VUX01BWF9MVU46Cj4gKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlw ZSAhPQo+ICsJCSAgICAoVVNCX0RJUl9JTiB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lO VEVSRkFDRSkpCj4gKwkJCWJyZWFrOwo+ICsJCWlmICh3X2luZGV4ICE9IGZzZy0+aW50ZXJmYWNl X251bWJlciB8fCB3X3ZhbHVlICE9IDApCj4gKwkJCXJldHVybiAtRURPTTsKPiArCQlWREJHKGZz ZywgImdldCBtYXggTFVOXG4iKTsKPiArCQkqKHU4ICopIHJlcS0+YnVmID0gZnNnLT5jb21tb24t Pm5sdW5zIC0gMTsKPiArCj4gKwkJLyogUmVzcG9uZCB3aXRoIGRhdGEvc3RhdHVzICovCj4gKwkJ cmVxLT5sZW5ndGggPSBtaW4oKHUxNikxLCB3X2xlbmd0aCk7Cj4gKwkJcmV0dXJuIGVwMF9xdWV1 ZShmc2ctPmNvbW1vbik7Cj4gKwl9Cj4gKwo+ICsJVkRCRyhmc2csCj4gKwkgICAgICJ1bmtub3du IGNsYXNzLXNwZWNpZmljIGNvbnRyb2wgcmVxICIKPiArCSAgICAgIiUwMnguJTAyeCB2JTA0eCBp JTA0eCBsJXVcbiIsCj4gKwkgICAgIGN0cmwtPmJSZXF1ZXN0VHlwZSwgY3RybC0+YlJlcXVlc3Qs Cj4gKwkgICAgIGdldF91bmFsaWduZWRfbGUxNigmY3RybC0+d1ZhbHVlKSwgd19pbmRleCwgd19s ZW5ndGgpOwo+ICsJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICt9Cj4gKwo+ICsvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0qLwo+ICsKPiArLyogQWxsIHRoZSBmb2xsb3dpbmcgcm91dGluZXMgcnVuIGluIHByb2Nl c3MgY29udGV4dCAqLwo+ICsKPiArLyogVXNlIHRoaXMgZm9yIGJ1bGsgb3IgaW50ZXJydXB0IHRy YW5zZmVycywgbm90IGVwMCAqLwo+ICtzdGF0aWMgdm9pZCBzdGFydF90cmFuc2ZlcihzdHJ1Y3Qg ZnNnX2RldiAqZnNnLCBzdHJ1Y3QgdXNiX2VwICplcCwKPiArCQlzdHJ1Y3QgdXNiX3JlcXVlc3Qg KnJlcSwgaW50ICpwYnVzeSwKPiArCQllbnVtIGZzZ19idWZmZXJfc3RhdGUgKnN0YXRlKQo+ICt7 Cj4gKwlpbnQJcmM7Cj4gKwo+ICsJaWYgKGVwID09IGZzZy0+YnVsa19pbikKPiArCQlkdW1wX21z Zyhmc2csICJidWxrLWluIiwgcmVxLT5idWYsIHJlcS0+bGVuZ3RoKTsKPiArCj4gKwkqcGJ1c3kg PSAxOwo+ICsJKnN0YXRlID0gQlVGX1NUQVRFX0JVU1k7Cj4gKwlyYyA9IHVzYl9lcF9xdWV1ZShl cCwgcmVxKTsKPiArCWlmIChyYyAhPSAwKSB7Cj4gKwkJKnBidXN5ID0gMDsKPiArCQkqc3RhdGUg PSBCVUZfU1RBVEVfRU1QVFk7Cj4gKwo+ICsJCS8qIFdlIGNhbid0IGRvIG11Y2ggbW9yZSB0aGFu IHdhaXQgZm9yIGEgcmVzZXQgKi8KPiArCj4gKwkJLyogTm90ZTogY3VycmVudGx5IHRoZSBuZXQy MjgwIGRyaXZlciBmYWlscyB6ZXJvLWxlbmd0aAo+ICsJCSAqIHN1Ym1pc3Npb25zIGlmIERNQSBp cyBlbmFibGVkLiAqLwo+ICsJCWlmIChyYyAhPSAtRVNIVVRET1dOICYmICEocmMgPT0gLUVPUE5P VFNVUFAgJiYKPiArCQkJCQkJcmVxLT5sZW5ndGggPT0gMCkpCj4gKwkJCVdBUk5JTkcoZnNnLCAi ZXJyb3IgaW4gc3VibWlzc2lvbjogJXMgLS0+ICVkXG4iLAo+ICsJCQkJCWVwLT5uYW1lLCByYyk7 Cj4gKwl9Cj4gK30KPiArCj4gKyNkZWZpbmUgU1RBUlRfVFJBTlNGRVJfT1IoY29tbW9uLCBlcF9u YW1lLCByZXEsIHBidXN5LCBzdGF0ZSkJCVwKPiArCWlmIChmc2dfaXNfc2V0KGNvbW1vbikpCQkJ CQkJXAo+ICsJCXN0YXJ0X3RyYW5zZmVyKChjb21tb24pLT5mc2csIChjb21tb24pLT5mc2ctPmVw X25hbWUsCVwKPiArCQkJICAgICAgIHJlcSwgcGJ1c3ksIHN0YXRlKTsJCQlcCj4gKwllbHNlCj4g Kwo+ICsjZGVmaW5lIFNUQVJUX1RSQU5TRkVSKGNvbW1vbiwgZXBfbmFtZSwgcmVxLCBwYnVzeSwg c3RhdGUpCQlcCj4gKwlTVEFSVF9UUkFOU0ZFUl9PUihjb21tb24sIGVwX25hbWUsIHJlcSwgcGJ1 c3ksIHN0YXRlKSAodm9pZCkwCj4gKwo+ICtzdGF0aWMgaW50IHNsZWVwX3RocmVhZChzdHJ1Y3Qg ZnNnX2NvbW1vbiAqY29tbW9uKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCS8qIFdhaXQgdW50 aWwgYSBzaWduYWwgYXJyaXZlcyBvciB3ZSBhcmUgd29rZW4gdXAgKi8KPiArCXJldCA9IHdhaXRf Zm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmY29tbW9uLT50aHJlYWRfd2FrZXVwX25lZWRl ZCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJLyogSWYgd2UgcnVuIG91dHNpZGUgb2YgYSBwb2xsZXIs IHRoaXMgZW5zdXJlcyB3ZSBleGl0IHRoZSBsb29wICovCj4gKwkJY29tbW9uLT5ydW5uaW5nID0g ZmFsc2U7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlpZiAoY29tbW9uLT5zaHV0ZG93 bikKPiArCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwo+ICsKPiArCXJlaW5pdF9jb21wbGV0aW9uKCZj b21tb24tPnRocmVhZF93YWtldXBfbmVlZGVkKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0qLwo+ICsKPiArc3RhdGljIGludCBkb19yZWFkKHN0cnVjdCBmc2df Y29tbW9uICpjb21tb24pCj4gK3sKPiArCXN0cnVjdCBmc2dfbHVuCQkqY3VybHVuID0gJmNvbW1v bi0+bHVuc1tjb21tb24tPmx1bl07Cj4gKwl1MzIJCQlsYmE7Cj4gKwlzdHJ1Y3QgZnNnX2J1ZmZo ZAkqYmg7Cj4gKwlpbnQJCQlyYzsKPiArCXUzMgkJCWFtb3VudF9sZWZ0Owo+ICsJbG9mZl90CQkJ ZmlsZV9vZmZzZXQ7Cj4gKwl1bnNpZ25lZCBpbnQJCWFtb3VudDsKPiArCXVuc2lnbmVkIGludAkJ cGFydGlhbF9wYWdlOwo+ICsJc3NpemVfdAkJCW5yZWFkOwo+ICsKPiArCS8qIEdldCB0aGUgc3Rh cnRpbmcgTG9naWNhbCBCbG9jayBBZGRyZXNzIGFuZCBjaGVjayB0aGF0IGl0J3MKPiArCSAqIG5v dCB0b28gYmlnICovCj4gKwlpZiAoY29tbW9uLT5jbW5kWzBdID09IFNDU0lfUkVBRDYpCj4gKwkJ bGJhID0gZ2V0X3VuYWxpZ25lZF9iZTI0KCZjb21tb24tPmNtbmRbMV0pOwo+ICsJZWxzZSB7Cj4g KwkJbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTMyKCZjb21tb24tPmNtbmRbMl0pOwo+ICsKPiArCQkv KiBXZSBhbGxvdyBEUE8gKERpc2FibGUgUGFnZSBPdXQgPSBkb24ndCBzYXZlIGRhdGEgaW4gdGhl Cj4gKwkJICogY2FjaGUpIGFuZCBGVUEgKEZvcmNlIFVuaXQgQWNjZXNzID0gZG9uJ3QgcmVhZCBm cm9tIHRoZQo+ICsJCSAqIGNhY2hlKSwgYnV0IHdlIGRvbid0IGltcGxlbWVudCB0aGVtLiAqLwo+ ICsJCWlmICgoY29tbW9uLT5jbW5kWzFdICYgfjB4MTgpICE9IDApIHsKPiArCQkJY3VybHVuLT5z ZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9GSUVMRF9JTl9DREI7Cj4gKwkJCXJldHVybiAtRUlOVkFM Owo+ICsJCX0KPiArCX0KPiArCWlmIChsYmEgPj0gY3VybHVuLT5udW1fc2VjdG9ycykgewo+ICsJ CWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0xPR0lDQUxfQkxPQ0tfQUREUkVTU19PVVRfT0ZfUkFO R0U7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwlmaWxlX29mZnNldCA9ICgobG9mZl90 KSBsYmEpIDw8IDk7Cj4gKwo+ICsJLyogQ2Fycnkgb3V0IHRoZSBmaWxlIHJlYWRzICovCj4gKwlh bW91bnRfbGVmdCA9IGNvbW1vbi0+ZGF0YV9zaXplX2Zyb21fY21uZDsKPiArCWlmICh1bmxpa2Vs eShhbW91bnRfbGVmdCA9PSAwKSkKPiArCQlyZXR1cm4gLUVJTzsJCS8qIE5vIGRlZmF1bHQgcmVw bHkgKi8KPiArCj4gKwlmb3IgKDs7KSB7Cj4gKwkJLyogV2FpdCBmb3IgdGhlIG5leHQgYnVmZmVy IHRvIGJlY29tZSBhdmFpbGFibGUgKi8KPiArCQliaCA9IGNvbW1vbi0+bmV4dF9idWZmaGRfdG9f ZmlsbDsKPiArCQl3aGlsZSAoYmgtPnN0YXRlICE9IEJVRl9TVEFURV9FTVBUWSkgewo+ICsJCQly YyA9IHNsZWVwX3RocmVhZChjb21tb24pOwo+ICsJCQlpZiAocmMpCj4gKwkJCQlyZXR1cm4gcmM7 Cj4gKwkJfQo+ICsKPiArCQkvKiBGaWd1cmUgb3V0IGhvdyBtdWNoIHdlIG5lZWQgdG8gcmVhZDoK PiArCQkgKiBUcnkgdG8gcmVhZCB0aGUgcmVtYWluaW5nIGFtb3VudC4KPiArCQkgKiBCdXQgZG9u J3QgcmVhZCBtb3JlIHRoYW4gdGhlIGJ1ZmZlciBzaXplLgo+ICsJCSAqIEFuZCBkb24ndCB0cnkg dG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGZpbGUuCj4gKwkJICogRmluYWxseSwgaWYgd2Un cmUgbm90IGF0IGEgcGFnZSBib3VuZGFyeSwgZG9uJ3QgcmVhZCBwYXN0Cj4gKwkJICoJdGhlIG5l eHQgcGFnZS4KPiArCQkgKiBJZiB0aGlzIG1lYW5zIHJlYWRpbmcgMCB0aGVuIHdlIHdlcmUgYXNr ZWQgdG8gcmVhZCBwYXN0Cj4gKwkJICoJdGhlIGVuZCBvZiBmaWxlLiAqLwo+ICsJCWFtb3VudCA9 IG1pbihhbW91bnRfbGVmdCwgRlNHX0JVRkxFTik7Cj4gKwkJcGFydGlhbF9wYWdlID0gZmlsZV9v ZmZzZXQgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7Cj4gKwkJaWYgKHBhcnRpYWxfcGFnZSA+IDAp Cj4gKwkJCWFtb3VudCA9IG1pbihhbW91bnQsICh1bnNpZ25lZCBpbnQpIFBBR0VfQ0FDSEVfU0la RSAtCj4gKwkJCQkJcGFydGlhbF9wYWdlKTsKPiArCj4gKwo+ICsJCS8qIElmIHdlIHdlcmUgYXNr ZWQgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgZmlsZSwKPiArCQkgKiBlbmQgd2l0aCBhbiBlbXB0 eSBidWZmZXIuICovCj4gKwkJaWYgKGFtb3VudCA9PSAwKSB7Cj4gKwkJCWN1cmx1bi0+c2Vuc2Vf ZGF0YSA9Cj4gKwkJCQkJU1NfTE9HSUNBTF9CTE9DS19BRERSRVNTX09VVF9PRl9SQU5HRTsKPiAr CQkJY3VybHVuLT5pbmZvX3ZhbGlkID0gMTsKPiArCQkJYmgtPmlucmVxLT5sZW5ndGggPSAwOwo+ ICsJCQliaC0+c3RhdGUgPSBCVUZfU1RBVEVfRlVMTDsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsK PiArCQkvKiBQZXJmb3JtIHRoZSByZWFkICovCj4gKwkJbnJlYWQgPSBwcmVhZCh1bXNbY29tbW9u LT5sdW5dLmZkLCBiaC0+YnVmLCBhbW91bnQsIGZpbGVfb2Zmc2V0KTsKPiArCj4gKwkJVkxEQkco Y3VybHVuLCAiZmlsZSByZWFkICV1IEAgJWxsdSAtPiAlemRcbiIsIGFtb3VudCwKPiArCQkJCSh1 bnNpZ25lZCBsb25nIGxvbmcpIGZpbGVfb2Zmc2V0LAo+ICsJCQkJbnJlYWQpOwo+ICsJCWlmIChu cmVhZCA8PSAwKSB7Cj4gKwkJCWNvbnN0IGNoYXIgKmVyciA9IG5yZWFkID8gc3RyZXJyb3IoLW5y ZWFkKSA6ICJFT0YiOwo+ICsJCQlMREJHKGN1cmx1biwgImVycm9yIGluIGZpbGUgcmVhZDogJXNc biIsIGVycik7Cj4gKwkJCW5yZWFkID0gMDsKPiArCQl9IGVsc2UgaWYgKG5yZWFkIDwgYW1vdW50 KSB7Cj4gKwkJCUxEQkcoY3VybHVuLCAicGFydGlhbCBmaWxlIHJlYWQ6ICVkLyV1XG4iLAo+ICsJ CQkJCShpbnQpIG5yZWFkLCBhbW91bnQpOwo+ICsJCQlucmVhZCAtPSAobnJlYWQgJiA1MTEpOwkv KiBSb3VuZCBkb3duIHRvIGEgYmxvY2sgKi8KPiArCQl9Cj4gKwkJZmlsZV9vZmZzZXQgICs9IG5y ZWFkOwo+ICsJCWFtb3VudF9sZWZ0ICAtPSBucmVhZDsKPiArCQljb21tb24tPnJlc2lkdWUgLT0g bnJlYWQ7Cj4gKwkJYmgtPmlucmVxLT5sZW5ndGggPSBucmVhZDsKPiArCQliaC0+c3RhdGUgPSBC VUZfU1RBVEVfRlVMTDsKPiArCj4gKwkJLyogSWYgYW4gZXJyb3Igb2NjdXJyZWQsIHJlcG9ydCBp dCBhbmQgaXRzIHBvc2l0aW9uICovCj4gKwkJaWYgKG5yZWFkIDwgYW1vdW50KSB7Cj4gKwkJCWN1 cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX1VOUkVDT1ZFUkVEX1JFQURfRVJST1I7Cj4gKwkJCWN1cmx1 bi0+aW5mb192YWxpZCA9IDE7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCj4gKwkJaWYgKGFtb3Vu dF9sZWZ0ID09IDApCj4gKwkJCWJyZWFrOwkJLyogTm8gbW9yZSBsZWZ0IHRvIHJlYWQgKi8KPiAr Cj4gKwkJLyogU2VuZCB0aGlzIGJ1ZmZlciBhbmQgZ28gcmVhZCBzb21lIG1vcmUgKi8KPiArCQli aC0+aW5yZXEtPnplcm8gPSAwOwo+ICsJCVNUQVJUX1RSQU5TRkVSX09SKGNvbW1vbiwgYnVsa19p biwgYmgtPmlucmVxLAo+ICsJCQkgICAgICAgJmJoLT5pbnJlcV9idXN5LCAmYmgtPnN0YXRlKQo+ ICsJCQkvKiBEb24ndCBrbm93IHdoYXQgdG8gZG8gaWYKPiArCQkJICogY29tbW9uLT5mc2cgaXMg TlVMTCAqLwo+ICsJCQlyZXR1cm4gLUVJTzsKPiArCQljb21tb24tPm5leHRfYnVmZmhkX3RvX2Zp bGwgPSBiaC0+bmV4dDsKPiArCX0KPiArCj4gKwlyZXR1cm4gLUVJTzsJCS8qIE5vIGRlZmF1bHQg cmVwbHkgKi8KPiArfQo+ICsKPiArLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KPiArCj4gK3N0YXRpYyBp bnQgZG9fd3JpdGUoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbikKPiArewo+ICsJc3RydWN0IGZz Z19sdW4JCSpjdXJsdW4gPSAmY29tbW9uLT5sdW5zW2NvbW1vbi0+bHVuXTsKPiArCXUzMgkJCWxi YTsKPiArCXN0cnVjdCBmc2dfYnVmZmhkCSpiaDsKPiArCWludAkJCWdldF9zb21lX21vcmU7Cj4g Kwl1MzIJCQlhbW91bnRfbGVmdF90b19yZXEsIGFtb3VudF9sZWZ0X3RvX3dyaXRlOwo+ICsJbG9m Zl90CQkJdXNiX29mZnNldCwgZmlsZV9vZmZzZXQ7Cj4gKwl1bnNpZ25lZCBpbnQJCWFtb3VudDsK PiArCXVuc2lnbmVkIGludAkJcGFydGlhbF9wYWdlOwo+ICsJc3NpemVfdAkJCW53cml0dGVuOwo+ ICsJaW50CQkJcmM7Cj4gKwo+ICsJaWYgKGN1cmx1bi0+cm8pIHsKPiArCQljdXJsdW4tPnNlbnNl X2RhdGEgPSBTU19XUklURV9QUk9URUNURUQ7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4g Kwo+ICsJLyogR2V0IHRoZSBzdGFydGluZyBMb2dpY2FsIEJsb2NrIEFkZHJlc3MgYW5kIGNoZWNr IHRoYXQgaXQncwo+ICsJICogbm90IHRvbyBiaWcgKi8KPiArCWlmIChjb21tb24tPmNtbmRbMF0g PT0gU0NTSV9XUklURTYpCj4gKwkJbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTI0KCZjb21tb24tPmNt bmRbMV0pOwo+ICsJZWxzZSB7Cj4gKwkJbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTMyKCZjb21tb24t PmNtbmRbMl0pOwo+ICsKPiArCQkvKiBXZSBhbGxvdyBEUE8gKERpc2FibGUgUGFnZSBPdXQgPSBk b24ndCBzYXZlIGRhdGEgaW4gdGhlCj4gKwkJICogY2FjaGUpIGFuZCBGVUEgKEZvcmNlIFVuaXQg QWNjZXNzID0gd3JpdGUgZGlyZWN0bHkgdG8gdGhlCj4gKwkJICogbWVkaXVtKS4gIFdlIGRvbid0 IGltcGxlbWVudCBEUE87IHdlIGltcGxlbWVudCBGVUEgYnkKPiArCQkgKiBwZXJmb3JtaW5nIHN5 bmNocm9ub3VzIG91dHB1dC4gKi8KPiArCQlpZiAoY29tbW9uLT5jbW5kWzFdICYgfjB4MTgpIHsK PiArCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9GSUVMRF9JTl9DREI7Cj4gKwkJ CXJldHVybiAtRUlOVkFMOwo+ICsJCX0KPiArCX0KPiArCWlmIChsYmEgPj0gY3VybHVuLT5udW1f c2VjdG9ycykgewo+ICsJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0xPR0lDQUxfQkxPQ0tfQURE UkVTU19PVVRfT0ZfUkFOR0U7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJLyog Q2Fycnkgb3V0IHRoZSBmaWxlIHdyaXRlcyAqLwo+ICsJZ2V0X3NvbWVfbW9yZSA9IDE7Cj4gKwlm aWxlX29mZnNldCA9IHVzYl9vZmZzZXQgPSAoKGxvZmZfdCkgbGJhKSA8PCA5Owo+ICsJYW1vdW50 X2xlZnRfdG9fcmVxID0gY29tbW9uLT5kYXRhX3NpemVfZnJvbV9jbW5kOwo+ICsJYW1vdW50X2xl ZnRfdG9fd3JpdGUgPSBjb21tb24tPmRhdGFfc2l6ZV9mcm9tX2NtbmQ7Cj4gKwo+ICsJd2hpbGUg KGFtb3VudF9sZWZ0X3RvX3dyaXRlID4gMCkgewo+ICsKPiArCQkvKiBRdWV1ZSBhIHJlcXVlc3Qg Zm9yIG1vcmUgZGF0YSBmcm9tIHRoZSBob3N0ICovCj4gKwkJYmggPSBjb21tb24tPm5leHRfYnVm ZmhkX3RvX2ZpbGw7Cj4gKwkJaWYgKGJoLT5zdGF0ZSA9PSBCVUZfU1RBVEVfRU1QVFkgJiYgZ2V0 X3NvbWVfbW9yZSkgewo+ICsKPiArCQkJLyogRmlndXJlIG91dCBob3cgbXVjaCB3ZSB3YW50IHRv IGdldDoKPiArCQkJICogVHJ5IHRvIGdldCB0aGUgcmVtYWluaW5nIGFtb3VudC4KPiArCQkJICog QnV0IGRvbid0IGdldCBtb3JlIHRoYW4gdGhlIGJ1ZmZlciBzaXplLgo+ICsJCQkgKiBBbmQgZG9u J3QgdHJ5IHRvIGdvIHBhc3QgdGhlIGVuZCBvZiB0aGUgZmlsZS4KPiArCQkJICogSWYgd2UncmUg bm90IGF0IGEgcGFnZSBib3VuZGFyeSwKPiArCQkJICoJZG9uJ3QgZ28gcGFzdCB0aGUgbmV4dCBw YWdlLgo+ICsJCQkgKiBJZiB0aGlzIG1lYW5zIGdldHRpbmcgMCwgdGhlbiB3ZSB3ZXJlIGFza2Vk Cj4gKwkJCSAqCXRvIHdyaXRlIHBhc3QgdGhlIGVuZCBvZiBmaWxlLgo+ICsJCQkgKiBGaW5hbGx5 LCByb3VuZCBkb3duIHRvIGEgYmxvY2sgYm91bmRhcnkuICovCj4gKwkJCWFtb3VudCA9IG1pbihh bW91bnRfbGVmdF90b19yZXEsIEZTR19CVUZMRU4pOwo+ICsJCQlwYXJ0aWFsX3BhZ2UgPSB1c2Jf b2Zmc2V0ICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOwo+ICsJCQlpZiAocGFydGlhbF9wYWdlID4g MCkKPiArCQkJCWFtb3VudCA9IG1pbihhbW91bnQsCj4gKwkodW5zaWduZWQgaW50KSBQQUdFX0NB Q0hFX1NJWkUgLSBwYXJ0aWFsX3BhZ2UpOwo+ICsKPiArCQkJaWYgKGFtb3VudCA9PSAwKSB7Cj4g KwkJCQlnZXRfc29tZV9tb3JlID0gMDsKPiArCQkJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9Cj4gKwkJ CQkJU1NfTE9HSUNBTF9CTE9DS19BRERSRVNTX09VVF9PRl9SQU5HRTsKPiArCQkJCWN1cmx1bi0+ aW5mb192YWxpZCA9IDE7Cj4gKwkJCQljb250aW51ZTsKPiArCQkJfQo+ICsJCQlhbW91bnQgLT0g KGFtb3VudCAmIDUxMSk7Cj4gKwkJCWlmIChhbW91bnQgPT0gMCkgewo+ICsKPiArCQkJCS8qIFdo eSB3ZXJlIHdlIHdlcmUgYXNrZWQgdG8gdHJhbnNmZXIgYQo+ICsJCQkJICogcGFydGlhbCBibG9j az8gKi8KPiArCQkJCWdldF9zb21lX21vcmUgPSAwOwo+ICsJCQkJY29udGludWU7Cj4gKwkJCX0K PiArCj4gKwkJCS8qIEdldCB0aGUgbmV4dCBidWZmZXIgKi8KPiArCQkJdXNiX29mZnNldCArPSBh bW91bnQ7Cj4gKwkJCWNvbW1vbi0+dXNiX2Ftb3VudF9sZWZ0IC09IGFtb3VudDsKPiArCQkJYW1v dW50X2xlZnRfdG9fcmVxIC09IGFtb3VudDsKPiArCQkJaWYgKGFtb3VudF9sZWZ0X3RvX3JlcSA9 PSAwKQo+ICsJCQkJZ2V0X3NvbWVfbW9yZSA9IDA7Cj4gKwo+ICsJCQkvKiBhbW91bnQgaXMgYWx3 YXlzIGRpdmlzaWJsZSBieSA1MTIsIGhlbmNlIGJ5Cj4gKwkJCSAqIHRoZSBidWxrLW91dCBtYXhw YWNrZXQgc2l6ZSAqLwo+ICsJCQliaC0+b3V0cmVxLT5sZW5ndGggPSBhbW91bnQ7Cj4gKwkJCWJo LT5idWxrX291dF9pbnRlbmRlZF9sZW5ndGggPSBhbW91bnQ7Cj4gKwkJCWJoLT5vdXRyZXEtPnNo b3J0X25vdF9vayA9IDE7Cj4gKwkJCVNUQVJUX1RSQU5TRkVSX09SKGNvbW1vbiwgYnVsa19vdXQs IGJoLT5vdXRyZXEsCj4gKwkJCQkJICAmYmgtPm91dHJlcV9idXN5LCAmYmgtPnN0YXRlKQo+ICsJ CQkJLyogRG9uJ3Qga25vdyB3aGF0IHRvIGRvIGlmCj4gKwkJCQkgKiBjb21tb24tPmZzZyBpcyBO VUxMICovCj4gKwkJCQlyZXR1cm4gLUVJTzsKPiArCQkJY29tbW9uLT5uZXh0X2J1ZmZoZF90b19m aWxsID0gYmgtPm5leHQ7Cj4gKwkJCWNvbnRpbnVlOwo+ICsJCX0KPiArCj4gKwkJLyogV3JpdGUg dGhlIHJlY2VpdmVkIGRhdGEgdG8gdGhlIGJhY2tpbmcgZmlsZSAqLwo+ICsJCWJoID0gY29tbW9u LT5uZXh0X2J1ZmZoZF90b19kcmFpbjsKPiArCQlpZiAoYmgtPnN0YXRlID09IEJVRl9TVEFURV9F TVBUWSAmJiAhZ2V0X3NvbWVfbW9yZSkKPiArCQkJYnJlYWs7CQkJLyogV2Ugc3RvcHBlZCBlYXJs eSAqLwo+ICsJCWlmIChiaC0+c3RhdGUgPT0gQlVGX1NUQVRFX0ZVTEwpIHsKPiArCQkJY29tbW9u LT5uZXh0X2J1ZmZoZF90b19kcmFpbiA9IGJoLT5uZXh0Owo+ICsJCQliaC0+c3RhdGUgPSBCVUZf U1RBVEVfRU1QVFk7Cj4gKwo+ICsJCQkvKiBEaWQgc29tZXRoaW5nIGdvIHdyb25nIHdpdGggdGhl IHRyYW5zZmVyPyAqLwo+ICsJCQlpZiAoYmgtPm91dHJlcS0+c3RhdHVzICE9IDApIHsKPiArCQkJ CWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0NPTU1VTklDQVRJT05fRkFJTFVSRTsKPiArCQkJCWN1 cmx1bi0+aW5mb192YWxpZCA9IDE7Cj4gKwkJCQlicmVhazsKPiArCQkJfQo+ICsKPiArCQkJYW1v dW50ID0gYmgtPm91dHJlcS0+YWN0dWFsOwo+ICsKPiArCQkJLyogUGVyZm9ybSB0aGUgd3JpdGUg Ki8KPiArCQkJbndyaXR0ZW4gPSBwd3JpdGUodW1zW2NvbW1vbi0+bHVuXS5mZCwgYmgtPmJ1Ziwg YW1vdW50LCBmaWxlX29mZnNldCk7Cj4gKwo+ICsJCQlWTERCRyhjdXJsdW4sICJmaWxlIHdyaXRl ICV1IEAgJWxsdSAtPiAlemRcbiIsIGFtb3VudCwKPiArCQkJCQkodW5zaWduZWQgbG9uZyBsb25n KSBmaWxlX29mZnNldCwKPiArCQkJCQlud3JpdHRlbik7Cj4gKwo+ICsJCQlpZiAobndyaXR0ZW4g PCAwKSB7Cj4gKwkJCQlMREJHKGN1cmx1biwgImVycm9yIGluIGZpbGUgd3JpdGU6ICVwZVxuIiwg RVJSX1BUUihud3JpdHRlbikpOwo+ICsJCQkJbndyaXR0ZW4gPSAwOwo+ICsJCQl9IGVsc2UgaWYg KG53cml0dGVuIDwgYW1vdW50KSB7Cj4gKwkJCQlMREJHKGN1cmx1biwgInBhcnRpYWwgZmlsZSB3 cml0ZTogJWQvJXVcbiIsCj4gKwkJCQkJCShpbnQpIG53cml0dGVuLCBhbW91bnQpOwo+ICsJCQkJ bndyaXR0ZW4gLT0gKG53cml0dGVuICYgNTExKTsKPiArCQkJCS8qIFJvdW5kIGRvd24gdG8gYSBi bG9jayAqLwo+ICsJCQl9Cj4gKwkJCWZpbGVfb2Zmc2V0ICs9IG53cml0dGVuOwo+ICsJCQlhbW91 bnRfbGVmdF90b193cml0ZSAtPSBud3JpdHRlbjsKPiArCQkJY29tbW9uLT5yZXNpZHVlIC09IG53 cml0dGVuOwo+ICsKPiArCQkJLyogSWYgYW4gZXJyb3Igb2NjdXJyZWQsIHJlcG9ydCBpdCBhbmQg aXRzIHBvc2l0aW9uICovCj4gKwkJCWlmIChud3JpdHRlbiA8IGFtb3VudCkgewo+ICsJCQkJcHJf d2FybigibndyaXR0ZW46JXpkIGFtb3VudDoldVxuIiwgbndyaXR0ZW4sCj4gKwkJCQkgICAgICAg YW1vdW50KTsKPiArCQkJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX1dSSVRFX0VSUk9SOwo+ICsJ CQkJY3VybHVuLT5pbmZvX3ZhbGlkID0gMTsKPiArCQkJCWJyZWFrOwo+ICsJCQl9Cj4gKwo+ICsJ CQkvKiBEaWQgdGhlIGhvc3QgZGVjaWRlIHRvIHN0b3AgZWFybHk/ICovCj4gKwkJCWlmIChiaC0+ b3V0cmVxLT5hY3R1YWwgIT0gYmgtPm91dHJlcS0+bGVuZ3RoKSB7Cj4gKwkJCQljb21tb24tPnNo b3J0X3BhY2tldF9yZWNlaXZlZCA9IDE7Cj4gKwkJCQlicmVhazsKPiArCQkJfQo+ICsJCQljb250 aW51ZTsKPiArCQl9Cj4gKwo+ICsJCS8qIFdhaXQgZm9yIHNvbWV0aGluZyB0byBoYXBwZW4gKi8K PiArCQlyYyA9IHNsZWVwX3RocmVhZChjb21tb24pOwo+ICsJCWlmIChyYykKPiArCQkJcmV0dXJu IHJjOwo+ICsJfQo+ICsKPiArCXJldHVybiAtRUlPOwkJLyogTm8gZGVmYXVsdCByZXBseSAqLwo+ ICt9Cj4gKwo+ICsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwo+ICsKPiArc3RhdGljIGludCBkb19zeW5j aHJvbml6ZV9jYWNoZShzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uKQo+ICt7Cj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KPiArCj4gK3N0YXRpYyBpbnQgZG9f dmVyaWZ5KHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24pCj4gK3sKPiArCXN0cnVjdCBmc2dfbHVu CQkqY3VybHVuID0gJmNvbW1vbi0+bHVuc1tjb21tb24tPmx1bl07Cj4gKwl1MzIJCQlsYmE7Cj4g Kwl1MzIJCQl2ZXJpZmljYXRpb25fbGVuZ3RoOwo+ICsJc3RydWN0IGZzZ19idWZmaGQJKmJoID0g Y29tbW9uLT5uZXh0X2J1ZmZoZF90b19maWxsOwo+ICsJbG9mZl90CQkJZmlsZV9vZmZzZXQ7Cj4g Kwl1MzIJCQlhbW91bnRfbGVmdDsKPiArCXVuc2lnbmVkIGludAkJYW1vdW50Owo+ICsJc3NpemVf dAkJCW5yZWFkOwo+ICsKPiArCS8qIEdldCB0aGUgc3RhcnRpbmcgTG9naWNhbCBCbG9jayBBZGRy ZXNzIGFuZCBjaGVjayB0aGF0IGl0J3MKPiArCSAqIG5vdCB0b28gYmlnICovCj4gKwlsYmEgPSBn ZXRfdW5hbGlnbmVkX2JlMzIoJmNvbW1vbi0+Y21uZFsyXSk7Cj4gKwlpZiAobGJhID49IGN1cmx1 bi0+bnVtX3NlY3RvcnMpIHsKPiArCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19MT0dJQ0FMX0JM T0NLX0FERFJFU1NfT1VUX09GX1JBTkdFOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsK PiArCS8qIFdlIGFsbG93IERQTyAoRGlzYWJsZSBQYWdlIE91dCA9IGRvbid0IHNhdmUgZGF0YSBp biB0aGUKPiArCSAqIGNhY2hlKSBidXQgd2UgZG9uJ3QgaW1wbGVtZW50IGl0LiAqLwo+ICsJaWYg KGNvbW1vbi0+Y21uZFsxXSAmIH4weDEwKSB7Cj4gKwkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1Nf SU5WQUxJRF9GSUVMRF9JTl9DREI7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJ dmVyaWZpY2F0aW9uX2xlbmd0aCA9IGdldF91bmFsaWduZWRfYmUxNigmY29tbW9uLT5jbW5kWzdd KTsKPiArCWlmICh1bmxpa2VseSh2ZXJpZmljYXRpb25fbGVuZ3RoID09IDApKQo+ICsJCXJldHVy biAtRUlPOwkJLyogTm8gZGVmYXVsdCByZXBseSAqLwo+ICsKPiArCS8qIFByZXBhcmUgdG8gY2Fy cnkgb3V0IHRoZSBmaWxlIHZlcmlmeSAqLwo+ICsJYW1vdW50X2xlZnQgPSB2ZXJpZmljYXRpb25f bGVuZ3RoIDw8IDk7Cj4gKwlmaWxlX29mZnNldCA9ICgobG9mZl90KSBsYmEpIDw8IDk7Cj4gKwo+ ICsJLyogV3JpdGUgb3V0IGFsbCB0aGUgZGlydHkgYnVmZmVycyBiZWZvcmUgaW52YWxpZGF0aW5n IHRoZW0gKi8KPiArCj4gKwkvKiBKdXN0IHRyeSB0byByZWFkIHRoZSByZXF1ZXN0ZWQgYmxvY2tz ICovCj4gKwl3aGlsZSAoYW1vdW50X2xlZnQgPiAwKSB7Cj4gKwo+ICsJCS8qIEZpZ3VyZSBvdXQg aG93IG11Y2ggd2UgbmVlZCB0byByZWFkOgo+ICsJCSAqIFRyeSB0byByZWFkIHRoZSByZW1haW5p bmcgYW1vdW50LCBidXQgbm90IG1vcmUgdGhhbgo+ICsJCSAqIHRoZSBidWZmZXIgc2l6ZS4KPiAr CQkgKiBBbmQgZG9uJ3QgdHJ5IHRvIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBmaWxlLgo+ICsJ CSAqIElmIHRoaXMgbWVhbnMgcmVhZGluZyAwIHRoZW4gd2Ugd2VyZSBhc2tlZCB0byByZWFkCj4g KwkJICogcGFzdCB0aGUgZW5kIG9mIGZpbGUuICovCj4gKwkJYW1vdW50ID0gbWluKGFtb3VudF9s ZWZ0LCBGU0dfQlVGTEVOKTsKPiArCQlpZiAoYW1vdW50ID09IDApIHsKPiArCQkJY3VybHVuLT5z ZW5zZV9kYXRhID0KPiArCQkJCQlTU19MT0dJQ0FMX0JMT0NLX0FERFJFU1NfT1VUX09GX1JBTkdF Owo+ICsJCQljdXJsdW4tPmluZm9fdmFsaWQgPSAxOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwo+ ICsJCS8qIFBlcmZvcm0gdGhlIHJlYWQgKi8KPiArCQlucmVhZCA9IHByZWFkKHVtc1tjb21tb24t Pmx1bl0uZmQsIGJoLT5idWYsIGFtb3VudCwgZmlsZV9vZmZzZXQpOwo+ICsKPiArCQlWTERCRyhj dXJsdW4sICJmaWxlIHJlYWQgJXUgQCAlbGx1IC0+ICV6ZFxuIiwgYW1vdW50LAo+ICsJCQkJKHVu c2lnbmVkIGxvbmcgbG9uZykgZmlsZV9vZmZzZXQsCj4gKwkJCQlucmVhZCk7Cj4gKwkJaWYgKG5y ZWFkIDw9IDApIHsKPiArCQkJY29uc3QgY2hhciAqZXJyID0gbnJlYWQgPyBzdHJlcnJvcigtbnJl YWQpIDogIkVPRiI7Cj4gKwkJCUxEQkcoY3VybHVuLCAiZXJyb3IgaW4gZmlsZSByZWFkOiAlc1xu IiwgZXJyKTsKPiArCQkJbnJlYWQgPSAwOwo+ICsJCX0gZWxzZSBpZiAobnJlYWQgPCBhbW91bnQp IHsKPiArCQkJTERCRyhjdXJsdW4sICJwYXJ0aWFsIGZpbGUgdmVyaWZ5OiAlZC8ldVxuIiwKPiAr CQkJCQkoaW50KSBucmVhZCwgYW1vdW50KTsKPiArCQkJbnJlYWQgLT0gKG5yZWFkICYgNTExKTsJ LyogUm91bmQgZG93biB0byBhIHNlY3RvciAqLwo+ICsJCX0KPiArCQlpZiAobnJlYWQgPT0gMCkg ewo+ICsJCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19VTlJFQ09WRVJFRF9SRUFEX0VSUk9SOwo+ ICsJCQljdXJsdW4tPmluZm9fdmFsaWQgPSAxOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwkJZmls ZV9vZmZzZXQgKz0gbnJlYWQ7Cj4gKwkJYW1vdW50X2xlZnQgLT0gbnJlYWQ7Cj4gKwl9Cj4gKwly ZXR1cm4gMDsKPiArfQo+ICsKPiArLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KPiArCj4gK3N0YXRpYyBp bnQgZG9faW5xdWlyeShzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3QgZnNnX2J1ZmZo ZCAqYmgpCj4gK3sKPiArCXN0cnVjdCBmc2dfbHVuICpjdXJsdW4gPSAmY29tbW9uLT5sdW5zW2Nv bW1vbi0+bHVuXTsKPiArCXN0YXRpYyBjb25zdCBjaGFyIHZlbmRvcl9pZFtdID0gIkxpbnV4ICAg IjsKPiArCXU4CSpidWYgPSAodTggKikgYmgtPmJ1ZjsKPiArCj4gKwlpZiAoIWN1cmx1bikgewkJ LyogVW5zdXBwb3J0ZWQgTFVOcyBhcmUgb2theSAqLwo+ICsJCWNvbW1vbi0+YmFkX2x1bl9va2F5 ID0gMTsKPiArCQltZW1zZXQoYnVmLCAwLCAzNik7Cj4gKwkJYnVmWzBdID0gMHg3ZjsJCS8qIFVu c3VwcG9ydGVkLCBubyBkZXZpY2UtdHlwZSAqLwo+ICsJCWJ1Zls0XSA9IDMxOwkJLyogQWRkaXRp b25hbCBsZW5ndGggKi8KPiArCQlyZXR1cm4gMzY7Cj4gKwl9Cj4gKwo+ICsJbWVtc2V0KGJ1Ziwg MCwgOCk7Cj4gKwlidWZbMF0gPSBUWVBFX0RJU0s7Cj4gKwlidWZbMV0gPSBjdXJsdW4tPnJlbW92 YWJsZSA/IDB4ODAgOiAwOwo+ICsJYnVmWzJdID0gMjsJCS8qIEFOU0kgU0NTSSBsZXZlbCAyICov Cj4gKwlidWZbM10gPSAyOwkJLyogU0NTSS0yIElOUVVJUlkgZGF0YSBmb3JtYXQgKi8KPiArCWJ1 Zls0XSA9IDMxOwkJLyogQWRkaXRpb25hbCBsZW5ndGggKi8KPiArCQkJCS8qIE5vIHNwZWNpYWwg b3B0aW9ucyAqLwo+ICsJc3ByaW50ZigoY2hhciAqKSAoYnVmICsgOCksICIlLThzJS0xNnMlMDR4 IiwgKGNoYXIqKSB2ZW5kb3JfaWQgLAo+ICsJCQl1bXNbY29tbW9uLT5sdW5dLm5hbWUsICh1MTYp IDB4ZmZmZik7Cj4gKwo+ICsJcmV0dXJuIDM2Owo+ICt9Cj4gKwo+ICsKPiArc3RhdGljIGludCBk b19yZXF1ZXN0X3NlbnNlKHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24sIHN0cnVjdCBmc2dfYnVm ZmhkICpiaCkKPiArewo+ICsJc3RydWN0IGZzZ19sdW4JKmN1cmx1biA9ICZjb21tb24tPmx1bnNb Y29tbW9uLT5sdW5dOwo+ICsJdTgJCSpidWYgPSAodTggKikgYmgtPmJ1ZjsKPiArCXUzMgkJc2Qs IHNkaW5mbyA9IDA7Cj4gKwlpbnQJCXZhbGlkOwo+ICsKPiArCS8qCj4gKwkgKiBGcm9tIHRoZSBT Q1NJLTIgc3BlYy4sIHNlY3Rpb24gNy45IChVbml0IGF0dGVudGlvbiBjb25kaXRpb24pOgo+ICsJ ICoKPiArCSAqIElmIGEgUkVRVUVTVCBTRU5TRSBjb21tYW5kIGlzIHJlY2VpdmVkIGZyb20gYW4g aW5pdGlhdG9yCj4gKwkgKiB3aXRoIGEgcGVuZGluZyB1bml0IGF0dGVudGlvbiBjb25kaXRpb24g KGJlZm9yZSB0aGUgdGFyZ2V0Cj4gKwkgKiBnZW5lcmF0ZXMgdGhlIGNvbnRpbmdlbnQgYWxsZWdp YW5jZSBjb25kaXRpb24pLCB0aGVuIHRoZQo+ICsJICogdGFyZ2V0IHNoYWxsIGVpdGhlcjoKPiAr CSAqICAgYSkgcmVwb3J0IGFueSBwZW5kaW5nIHNlbnNlIGRhdGEgYW5kIHByZXNlcnZlIHRoZSB1 bml0Cj4gKwkgKglhdHRlbnRpb24gY29uZGl0aW9uIG9uIHRoZSBsb2dpY2FsIHVuaXQsIG9yLAo+ ICsJICogICBiKSByZXBvcnQgdGhlIHVuaXQgYXR0ZW50aW9uIGNvbmRpdGlvbiwgbWF5IGRpc2Nh cmQgYW55Cj4gKwkgKglwZW5kaW5nIHNlbnNlIGRhdGEsIGFuZCBjbGVhciB0aGUgdW5pdCBhdHRl bnRpb24KPiArCSAqCWNvbmRpdGlvbiBvbiB0aGUgbG9naWNhbCB1bml0IGZvciB0aGF0IGluaXRp YXRvci4KPiArCSAqCj4gKwkgKiBGU0cgbm9ybWFsbHkgdXNlcyBvcHRpb24gYSk7IGVuYWJsZSB0 aGlzIGNvZGUgdG8gdXNlIG9wdGlvbiBiKS4KPiArCSAqLwo+ICsjaWYgMAo+ICsJaWYgKGN1cmx1 biAmJiBjdXJsdW4tPnVuaXRfYXR0ZW50aW9uX2RhdGEgIT0gU1NfTk9fU0VOU0UpIHsKPiArCQlj dXJsdW4tPnNlbnNlX2RhdGEgPSBjdXJsdW4tPnVuaXRfYXR0ZW50aW9uX2RhdGE7Cj4gKwkJY3Vy bHVuLT51bml0X2F0dGVudGlvbl9kYXRhID0gU1NfTk9fU0VOU0U7Cj4gKwl9Cj4gKyNlbmRpZgo+ ICsKPiArCWlmICghY3VybHVuKSB7CQkvKiBVbnN1cHBvcnRlZCBMVU5zIGFyZSBva2F5ICovCj4g KwkJY29tbW9uLT5iYWRfbHVuX29rYXkgPSAxOwo+ICsJCXNkID0gU1NfTE9HSUNBTF9VTklUX05P VF9TVVBQT1JURUQ7Cj4gKwkJdmFsaWQgPSAwOwo+ICsJfSBlbHNlIHsKPiArCQlzZCA9IGN1cmx1 bi0+c2Vuc2VfZGF0YTsKPiArCQl2YWxpZCA9IGN1cmx1bi0+aW5mb192YWxpZCA8PCA3Owo+ICsJ CWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX05PX1NFTlNFOwo+ICsJCWN1cmx1bi0+aW5mb192YWxp ZCA9IDA7Cj4gKwl9Cj4gKwo+ICsJbWVtc2V0KGJ1ZiwgMCwgMTgpOwo+ICsJYnVmWzBdID0gdmFs aWQgfCAweDcwOwkJCS8qIFZhbGlkLCBjdXJyZW50IGVycm9yICovCj4gKwlidWZbMl0gPSBTSyhz ZCk7Cj4gKwlwdXRfdW5hbGlnbmVkX2JlMzIoc2RpbmZvLCAmYnVmWzNdKTsJLyogU2Vuc2UgaW5m b3JtYXRpb24gKi8KPiArCWJ1Zls3XSA9IDE4IC0gODsJCQkvKiBBZGRpdGlvbmFsIHNlbnNlIGxl bmd0aCAqLwo+ICsJYnVmWzEyXSA9IEFTQyhzZCk7Cj4gKwlidWZbMTNdID0gQVNDUShzZCk7Cj4g KwlyZXR1cm4gMTg7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZG9fcmVhZF9jYXBhY2l0eShzdHJ1 Y3QgZnNnX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3QgZnNnX2J1ZmZoZCAqYmgpCj4gK3sKPiArCXN0 cnVjdCBmc2dfbHVuCSpjdXJsdW4gPSAmY29tbW9uLT5sdW5zW2NvbW1vbi0+bHVuXTsKPiArCXUz MgkJbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTMyKCZjb21tb24tPmNtbmRbMl0pOwo+ICsJaW50CQlw bWkgPSBjb21tb24tPmNtbmRbOF07Cj4gKwl1OAkJKmJ1ZiA9ICh1OCAqKSBiaC0+YnVmOwo+ICsK PiArCS8qIENoZWNrIHRoZSBQTUkgYW5kIExCQSBmaWVsZHMgKi8KPiArCWlmIChwbWkgPiAxIHx8 IChwbWkgPT0gMCAmJiBsYmEgIT0gMCkpIHsKPiArCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19J TlZBTElEX0ZJRUxEX0lOX0NEQjsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlw dXRfdW5hbGlnbmVkX2JlMzIoY3VybHVuLT5udW1fc2VjdG9ycyAtIDEsICZidWZbMF0pOwo+ICsJ CQkJCQkvKiBNYXggbG9naWNhbCBibG9jayAqLwo+ICsJcHV0X3VuYWxpZ25lZF9iZTMyKDUxMiwg JmJ1Zls0XSk7CS8qIEJsb2NrIGxlbmd0aCAqLwo+ICsJcmV0dXJuIDg7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgZG9fcmVhZF9oZWFkZXIoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbiwgc3RydWN0 IGZzZ19idWZmaGQgKmJoKQo+ICt7Cj4gKwlzdHJ1Y3QgZnNnX2x1bgkqY3VybHVuID0gJmNvbW1v bi0+bHVuc1tjb21tb24tPmx1bl07Cj4gKwlpbnQJCW1zZiA9IGNvbW1vbi0+Y21uZFsxXSAmIDB4 MDI7Cj4gKwl1MzIJCWxiYSA9IGdldF91bmFsaWduZWRfYmUzMigmY29tbW9uLT5jbW5kWzJdKTsK PiArCXU4CQkqYnVmID0gKHU4ICopIGJoLT5idWY7Cj4gKwo+ICsJaWYgKGNvbW1vbi0+Y21uZFsx XSAmIH4weDAyKSB7CQkvKiBNYXNrIGF3YXkgTVNGICovCj4gKwkJY3VybHVuLT5zZW5zZV9kYXRh ID0gU1NfSU5WQUxJRF9GSUVMRF9JTl9DREI7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4g KwlpZiAobGJhID49IGN1cmx1bi0+bnVtX3NlY3RvcnMpIHsKPiArCQljdXJsdW4tPnNlbnNlX2Rh dGEgPSBTU19MT0dJQ0FMX0JMT0NLX0FERFJFU1NfT1VUX09GX1JBTkdFOwo+ICsJCXJldHVybiAt RUlOVkFMOwo+ICsJfQo+ICsKPiArCW1lbXNldChidWYsIDAsIDgpOwo+ICsJYnVmWzBdID0gMHgw MTsJCS8qIDIwNDggYnl0ZXMgb2YgdXNlciBkYXRhLCByZXN0IGlzIEVDICovCj4gKwlzdG9yZV9j ZHJvbV9hZGRyZXNzKCZidWZbNF0sIG1zZiwgbGJhKTsKPiArCXJldHVybiA4Owo+ICt9Cj4gKwo+ ICsKPiArc3RhdGljIGludCBkb19yZWFkX3RvYyhzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uLCBz dHJ1Y3QgZnNnX2J1ZmZoZCAqYmgpCj4gK3sKPiArCXN0cnVjdCBmc2dfbHVuCSpjdXJsdW4gPSAm Y29tbW9uLT5sdW5zW2NvbW1vbi0+bHVuXTsKPiArCWludAkJbXNmID0gY29tbW9uLT5jbW5kWzFd ICYgMHgwMjsKPiArCWludAkJc3RhcnRfdHJhY2sgPSBjb21tb24tPmNtbmRbNl07Cj4gKwl1OAkJ KmJ1ZiA9ICh1OCAqKSBiaC0+YnVmOwo+ICsKPiArCWlmICgoY29tbW9uLT5jbW5kWzFdICYgfjB4 MDIpICE9IDAgfHwJLyogTWFzayBhd2F5IE1TRiAqLwo+ICsJCQlzdGFydF90cmFjayA+IDEpIHsK PiArCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19JTlZBTElEX0ZJRUxEX0lOX0NEQjsKPiArCQly ZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwltZW1zZXQoYnVmLCAwLCAyMCk7Cj4gKwlidWZb MV0gPSAoMjAtMik7CQkvKiBUT0MgZGF0YSBsZW5ndGggKi8KPiArCWJ1ZlsyXSA9IDE7CQkJLyog Rmlyc3QgdHJhY2sgbnVtYmVyICovCj4gKwlidWZbM10gPSAxOwkJCS8qIExhc3QgdHJhY2sgbnVt YmVyICovCj4gKwlidWZbNV0gPSAweDE2OwkJCS8qIERhdGEgdHJhY2ssIGNvcHlpbmcgYWxsb3dl ZCAqLwo+ICsJYnVmWzZdID0gMHgwMTsJCQkvKiBPbmx5IHRyYWNrIGlzIG51bWJlciAxICovCj4g KwlzdG9yZV9jZHJvbV9hZGRyZXNzKCZidWZbOF0sIG1zZiwgMCk7Cj4gKwo+ICsJYnVmWzEzXSA9 IDB4MTY7CQkJLyogTGVhZC1vdXQgdHJhY2sgaXMgZGF0YSAqLwo+ICsJYnVmWzE0XSA9IDB4QUE7 CQkJLyogTGVhZC1vdXQgdHJhY2sgbnVtYmVyICovCj4gKwlzdG9yZV9jZHJvbV9hZGRyZXNzKCZi dWZbMTZdLCBtc2YsIGN1cmx1bi0+bnVtX3NlY3RvcnMpOwo+ICsKPiArCXJldHVybiAyMDsKPiAr fQo+ICsKPiArc3RhdGljIGludCBkb19tb2RlX3NlbnNlKHN0cnVjdCBmc2dfY29tbW9uICpjb21t b24sIHN0cnVjdCBmc2dfYnVmZmhkICpiaCkKPiArewo+ICsJc3RydWN0IGZzZ19sdW4JKmN1cmx1 biA9ICZjb21tb24tPmx1bnNbY29tbW9uLT5sdW5dOwo+ICsJaW50CQltc2NtbmQgPSBjb21tb24t PmNtbmRbMF07Cj4gKwl1OAkJKmJ1ZiA9ICh1OCAqKSBiaC0+YnVmOwo+ICsJdTgJCSpidWYwID0g YnVmOwo+ICsJaW50CQlwYywgcGFnZV9jb2RlOwo+ICsJaW50CQljaGFuZ2VhYmxlX3ZhbHVlcywg YWxsX3BhZ2VzOwo+ICsJaW50CQl2YWxpZF9wYWdlID0gMDsKPiArCWludAkJbGVuLCBsaW1pdDsK PiArCj4gKwlpZiAoKGNvbW1vbi0+Y21uZFsxXSAmIH4weDA4KSAhPSAwKSB7CS8qIE1hc2sgYXdh eSBEQkQgKi8KPiArCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19JTlZBTElEX0ZJRUxEX0lOX0NE QjsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCXBjID0gY29tbW9uLT5jbW5kWzJdID4+ IDY7Cj4gKwlwYWdlX2NvZGUgPSBjb21tb24tPmNtbmRbMl0gJiAweDNmOwo+ICsJaWYgKHBjID09 IDMpIHsKPiArCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19TQVZJTkdfUEFSQU1FVEVSU19OT1Rf U1VQUE9SVEVEOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsJY2hhbmdlYWJsZV92YWx1 ZXMgPSAocGMgPT0gMSk7Cj4gKwlhbGxfcGFnZXMgPSAocGFnZV9jb2RlID09IDB4M2YpOwo+ICsK PiArCS8qIFdyaXRlIHRoZSBtb2RlIHBhcmFtZXRlciBoZWFkZXIuICBGaXhlZCB2YWx1ZXMgYXJl OiBkZWZhdWx0Cj4gKwkgKiBtZWRpdW0gdHlwZSwgbm8gY2FjaGUgY29udHJvbCAoRFBPRlVBKSwg YW5kIG5vIGJsb2NrIGRlc2NyaXB0b3JzLgo+ICsJICogVGhlIG9ubHkgdmFyaWFibGUgdmFsdWUg aXMgdGhlIFdyaXRlUHJvdGVjdCBiaXQuICBXZSB3aWxsIGZpbGwgaW4KPiArCSAqIHRoZSBtb2Rl IGRhdGEgbGVuZ3RoIGxhdGVyLiAqLwo+ICsJbWVtc2V0KGJ1ZiwgMCwgOCk7Cj4gKwlpZiAobXNj bW5kID09IFNDU0lfTU9ERV9TRU42KSB7Cj4gKwkJYnVmWzJdID0gKGN1cmx1bi0+cm8gPyAweDgw IDogMHgwMCk7CQkvKiBXUCwgRFBPRlVBICovCj4gKwkJYnVmICs9IDQ7Cj4gKwkJbGltaXQgPSAy NTU7Cj4gKwl9IGVsc2UgewkJCS8qIFNDU0lfTU9ERV9TRU4xMCAqLwo+ICsJCWJ1ZlszXSA9IChj dXJsdW4tPnJvID8gMHg4MCA6IDB4MDApOwkJLyogV1AsIERQT0ZVQSAqLwo+ICsJCWJ1ZiArPSA4 Owo+ICsJCWxpbWl0ID0gNjU1MzU7CQkvKiBTaG91bGQgcmVhbGx5IGJlIEZTR19CVUZMRU4gKi8K PiArCX0KPiArCj4gKwkvKiBObyBibG9jayBkZXNjcmlwdG9ycyAqLwo+ICsKPiArCS8qIFRoZSBt b2RlIHBhZ2VzLCBpbiBudW1lcmljYWwgb3JkZXIuICBUaGUgb25seSBwYWdlIHdlIHN1cHBvcnQK PiArCSAqIGlzIHRoZSBDYWNoaW5nIHBhZ2UuICovCj4gKwlpZiAocGFnZV9jb2RlID09IDB4MDgg fHwgYWxsX3BhZ2VzKSB7Cj4gKwkJdmFsaWRfcGFnZSA9IDE7Cj4gKwkJYnVmWzBdID0gMHgwODsJ CS8qIFBhZ2UgY29kZSAqLwo+ICsJCWJ1ZlsxXSA9IDEwOwkJLyogUGFnZSBsZW5ndGggKi8KPiAr CQltZW1zZXQoYnVmKzIsIDAsIDEwKTsJLyogTm9uZSBvZiB0aGUgZmllbGRzIGFyZSBjaGFuZ2Vh YmxlICovCj4gKwo+ICsJCWlmICghY2hhbmdlYWJsZV92YWx1ZXMpIHsKPiArCQkJYnVmWzJdID0g MHgwNDsJLyogV3JpdGUgY2FjaGUgZW5hYmxlLCAqLwo+ICsJCQkJCS8qIFJlYWQgY2FjaGUgbm90 IGRpc2FibGVkICovCj4gKwkJCQkJLyogTm8gY2FjaGUgcmV0ZW50aW9uIHByaW9yaXRpZXMgKi8K PiArCQkJcHV0X3VuYWxpZ25lZF9iZTE2KDB4ZmZmZiwgJmJ1Zls0XSk7Cj4gKwkJCQkJLyogRG9u J3QgZGlzYWJsZSBwcmVmZXRjaCAqLwo+ICsJCQkJCS8qIE1pbmltdW0gcHJlZmV0Y2ggPSAwICov Cj4gKwkJCXB1dF91bmFsaWduZWRfYmUxNigweGZmZmYsICZidWZbOF0pOwo+ICsJCQkJCS8qIE1h eGltdW0gcHJlZmV0Y2ggKi8KPiArCQkJcHV0X3VuYWxpZ25lZF9iZTE2KDB4ZmZmZiwgJmJ1Zlsx MF0pOwo+ICsJCQkJCS8qIE1heGltdW0gcHJlZmV0Y2ggY2VpbGluZyAqLwo+ICsJCX0KPiArCQli dWYgKz0gMTI7Cj4gKwl9Cj4gKwo+ICsJLyogQ2hlY2sgdGhhdCBhIHZhbGlkIHBhZ2Ugd2FzIHJl cXVlc3RlZCBhbmQgdGhlIG1vZGUgZGF0YSBsZW5ndGgKPiArCSAqIGlzbid0IHRvbyBsb25nLiAq Lwo+ICsJbGVuID0gYnVmIC0gYnVmMDsKPiArCWlmICghdmFsaWRfcGFnZSB8fCBsZW4gPiBsaW1p dCkgewo+ICsJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0lOVkFMSURfRklFTERfSU5fQ0RCOwo+ ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCS8qICBTdG9yZSB0aGUgbW9kZSBkYXRh IGxlbmd0aCAqLwo+ICsJaWYgKG1zY21uZCA9PSBTQ1NJX01PREVfU0VONikKPiArCQlidWYwWzBd ID0gbGVuIC0gMTsKPiArCWVsc2UKPiArCQlwdXRfdW5hbGlnbmVkX2JlMTYobGVuIC0gMiwgYnVm MCk7Cj4gKwlyZXR1cm4gbGVuOwo+ICt9Cj4gKwo+ICsKPiArc3RhdGljIGludCBkb19zdGFydF9z dG9wKHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24pCj4gK3sKPiArCXN0cnVjdCBmc2dfbHVuCSpj dXJsdW4gPSAmY29tbW9uLT5sdW5zW2NvbW1vbi0+bHVuXTsKPiArCj4gKwlpZiAoIWN1cmx1bikg ewo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfSBlbHNlIGlmICghY3VybHVuLT5yZW1vdmFibGUp IHsKPiArCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19JTlZBTElEX0NPTU1BTkQ7Cj4gKwkJcmV0 dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgZG9fcHJldmVudF9hbGxvdyhzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uKQo+ICt7Cj4gKwlz dHJ1Y3QgZnNnX2x1bgkqY3VybHVuID0gJmNvbW1vbi0+bHVuc1tjb21tb24tPmx1bl07Cj4gKwlp bnQJCXByZXZlbnQ7Cj4gKwo+ICsJaWYgKCFjdXJsdW4tPnJlbW92YWJsZSkgewo+ICsJCWN1cmx1 bi0+c2Vuc2VfZGF0YSA9IFNTX0lOVkFMSURfQ09NTUFORDsKPiArCQlyZXR1cm4gLUVJTlZBTDsK PiArCX0KPiArCj4gKwlwcmV2ZW50ID0gY29tbW9uLT5jbW5kWzRdICYgMHgwMTsKPiArCWlmICgo Y29tbW9uLT5jbW5kWzRdICYgfjB4MDEpICE9IDApIHsJLyogTWFzayBhd2F5IFByZXZlbnQgKi8K PiArCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19JTlZBTElEX0ZJRUxEX0lOX0NEQjsKPiArCQly ZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlpZiAoY3VybHVuLT5wcmV2ZW50X21lZGl1bV9y ZW1vdmFsICYmICFwcmV2ZW50KQo+ICsJCWZzZ19sdW5fZnN5bmNfc3ViKGN1cmx1bik7Cj4gKwlj dXJsdW4tPnByZXZlbnRfbWVkaXVtX3JlbW92YWwgPSBwcmV2ZW50Owo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gKwo+ICtzdGF0aWMgaW50IGRvX3JlYWRfZm9ybWF0X2NhcGFjaXRpZXMoc3RydWN0 IGZzZ19jb21tb24gKmNvbW1vbiwKPiArCQkJc3RydWN0IGZzZ19idWZmaGQgKmJoKQo+ICt7Cj4g KwlzdHJ1Y3QgZnNnX2x1bgkqY3VybHVuID0gJmNvbW1vbi0+bHVuc1tjb21tb24tPmx1bl07Cj4g Kwl1OAkJKmJ1ZiA9ICh1OCAqKSBiaC0+YnVmOwo+ICsKPiArCWJ1ZlswXSA9IGJ1ZlsxXSA9IGJ1 ZlsyXSA9IDA7Cj4gKwlidWZbM10gPSA4OwkvKiBPbmx5IHRoZSBDdXJyZW50L01heGltdW0gQ2Fw YWNpdHkgRGVzY3JpcHRvciAqLwo+ICsJYnVmICs9IDQ7Cj4gKwo+ICsJcHV0X3VuYWxpZ25lZF9i ZTMyKGN1cmx1bi0+bnVtX3NlY3RvcnMsICZidWZbMF0pOwo+ICsJCQkJCQkvKiBOdW1iZXIgb2Yg YmxvY2tzICovCj4gKwlwdXRfdW5hbGlnbmVkX2JlMzIoNTEyLCAmYnVmWzRdKTsJLyogQmxvY2sg bGVuZ3RoICovCj4gKwlidWZbNF0gPSAweDAyOwkJCQkvKiBDdXJyZW50IGNhcGFjaXR5ICovCj4g KwlyZXR1cm4gMTI7Cj4gK30KPiArCj4gKwo+ICtzdGF0aWMgaW50IGRvX21vZGVfc2VsZWN0KHN0 cnVjdCBmc2dfY29tbW9uICpjb21tb24sIHN0cnVjdCBmc2dfYnVmZmhkICpiaCkKPiArewo+ICsJ c3RydWN0IGZzZ19sdW4JKmN1cmx1biA9ICZjb21tb24tPmx1bnNbY29tbW9uLT5sdW5dOwo+ICsK PiArCS8qIFdlIGRvbid0IHN1cHBvcnQgTU9ERSBTRUxFQ1QgKi8KPiArCWlmIChjdXJsdW4pCj4g KwkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9DT01NQU5EOwo+ICsJcmV0dXJuIC1F SU5WQUw7Cj4gK30KPiArCj4gKwo+ICsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwo+ICsKPiArc3RhdGlj IGludCBoYWx0X2J1bGtfaW5fZW5kcG9pbnQoc3RydWN0IGZzZ19kZXYgKmZzZykKPiArewo+ICsJ aW50CXJjOwo+ICsKPiArCXJjID0gZnNnX3NldF9oYWx0KGZzZywgZnNnLT5idWxrX2luKTsKPiAr CWlmIChyYyA9PSAtRUFHQUlOKQo+ICsJCVZEQkcoZnNnLCAiZGVsYXllZCBidWxrLWluIGVuZHBv aW50IGhhbHRcbiIpOwo+ICsJd2hpbGUgKHJjICE9IDApIHsKPiArCQlpZiAocmMgIT0gLUVBR0FJ Tikgewo+ICsJCQlXQVJOSU5HKGZzZywgInVzYl9lcF9zZXRfaGFsdCAtPiAlZFxuIiwgcmMpOwo+ ICsJCQlyYyA9IDA7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCj4gKwkJcmMgPSB1c2JfZXBfc2V0 X2hhbHQoZnNnLT5idWxrX2luKTsKPiArCX0KPiArCXJldHVybiByYzsKPiArfQo+ICsKPiArc3Rh dGljIGludCB3ZWRnZV9idWxrX2luX2VuZHBvaW50KHN0cnVjdCBmc2dfZGV2ICpmc2cpCj4gK3sK PiArCWludAlyYzsKPiArCj4gKwlEQkcoZnNnLCAiYnVsay1pbiBzZXQgd2VkZ2VcbiIpOwo+ICsJ cmMgPSAwOyAvKiB1c2JfZXBfc2V0X3dlZGdlKGZzZy0+YnVsa19pbik7ICovCj4gKwlpZiAocmMg PT0gLUVBR0FJTikKPiArCQlWREJHKGZzZywgImRlbGF5ZWQgYnVsay1pbiBlbmRwb2ludCB3ZWRn ZVxuIik7Cj4gKwl3aGlsZSAocmMgIT0gMCkgewo+ICsJCWlmIChyYyAhPSAtRUFHQUlOKSB7Cj4g KwkJCVdBUk5JTkcoZnNnLCAidXNiX2VwX3NldF93ZWRnZSAtPiAlZFxuIiwgcmMpOwo+ICsJCQly YyA9IDA7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiArCXJldHVybiByYzsKPiArfQo+ICsK PiArc3RhdGljIGludCBwYWRfd2l0aF96ZXJvcyhzdHJ1Y3QgZnNnX2RldiAqZnNnKQo+ICt7Cj4g KwlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmggPSBmc2ctPmNvbW1vbi0+bmV4dF9idWZmaGRfdG9fZmls bDsKPiArCXUzMgkJCW5rZWVwID0gYmgtPmlucmVxLT5sZW5ndGg7Cj4gKwl1MzIJCQluc2VuZDsK PiArCWludAkJCXJjOwo+ICsKPiArCWJoLT5zdGF0ZSA9IEJVRl9TVEFURV9FTVBUWTsJCS8qIEZv ciB0aGUgZmlyc3QgaXRlcmF0aW9uICovCj4gKwlmc2ctPmNvbW1vbi0+dXNiX2Ftb3VudF9sZWZ0 ID0gbmtlZXAgKyBmc2ctPmNvbW1vbi0+cmVzaWR1ZTsKPiArCXdoaWxlIChmc2ctPmNvbW1vbi0+ dXNiX2Ftb3VudF9sZWZ0ID4gMCkgewo+ICsKPiArCQkvKiBXYWl0IGZvciB0aGUgbmV4dCBidWZm ZXIgdG8gYmUgZnJlZSAqLwo+ICsJCXdoaWxlIChiaC0+c3RhdGUgIT0gQlVGX1NUQVRFX0VNUFRZ KSB7Cj4gKwkJCXJjID0gc2xlZXBfdGhyZWFkKGZzZy0+Y29tbW9uKTsKPiArCQkJaWYgKHJjKQo+ ICsJCQkJcmV0dXJuIHJjOwo+ICsJCX0KPiArCj4gKwkJbnNlbmQgPSBtaW4oZnNnLT5jb21tb24t PnVzYl9hbW91bnRfbGVmdCwgRlNHX0JVRkxFTik7Cj4gKwkJbWVtc2V0KGJoLT5idWYgKyBua2Vl cCwgMCwgbnNlbmQgLSBua2VlcCk7Cj4gKwkJYmgtPmlucmVxLT5sZW5ndGggPSBuc2VuZDsKPiAr CQliaC0+aW5yZXEtPnplcm8gPSAwOwo+ICsJCXN0YXJ0X3RyYW5zZmVyKGZzZywgZnNnLT5idWxr X2luLCBiaC0+aW5yZXEsCj4gKwkJCQkmYmgtPmlucmVxX2J1c3ksICZiaC0+c3RhdGUpOwo+ICsJ CWJoID0gZnNnLT5jb21tb24tPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBiaC0+bmV4dDsKPiArCQlm c2ctPmNvbW1vbi0+dXNiX2Ftb3VudF9sZWZ0IC09IG5zZW5kOwo+ICsJCW5rZWVwID0gMDsKPiAr CX0KPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRocm93X2F3YXlfZGF0YShz dHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uKQo+ICt7Cj4gKwlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmg7 Cj4gKwl1MzIJCQlhbW91bnQ7Cj4gKwlpbnQJCQlyYzsKPiArCj4gKwlmb3IgKGJoID0gY29tbW9u LT5uZXh0X2J1ZmZoZF90b19kcmFpbjsKPiArCSAgICAgYmgtPnN0YXRlICE9IEJVRl9TVEFURV9F TVBUWSB8fCBjb21tb24tPnVzYl9hbW91bnRfbGVmdCA+IDA7Cj4gKwkgICAgIGJoID0gY29tbW9u LT5uZXh0X2J1ZmZoZF90b19kcmFpbikgewo+ICsKPiArCQkvKiBUaHJvdyBhd2F5IHRoZSBkYXRh IGluIGEgZmlsbGVkIGJ1ZmZlciAqLwo+ICsJCWlmIChiaC0+c3RhdGUgPT0gQlVGX1NUQVRFX0ZV TEwpIHsKPiArCQkJYmgtPnN0YXRlID0gQlVGX1NUQVRFX0VNUFRZOwo+ICsJCQljb21tb24tPm5l eHRfYnVmZmhkX3RvX2RyYWluID0gYmgtPm5leHQ7Cj4gKwo+ICsJCQkvKiBBIHNob3J0IHBhY2tl dCBvciBhbiBlcnJvciBlbmRzIGV2ZXJ5dGhpbmcgKi8KPiArCQkJaWYgKGJoLT5vdXRyZXEtPmFj dHVhbCAhPSBiaC0+b3V0cmVxLT5sZW5ndGggfHwKPiArCQkJCQliaC0+b3V0cmVxLT5zdGF0dXMg IT0gMCkgewo+ICsJCQkJcmFpc2VfZXhjZXB0aW9uKGNvbW1vbiwKPiArCQkJCQkJRlNHX1NUQVRF X0FCT1JUX0JVTEtfT1VUKTsKPiArCQkJCXJldHVybiAtRVBJUEU7Cj4gKwkJCX0KPiArCQkJY29u dGludWU7Cj4gKwkJfQo+ICsKPiArCQkvKiBUcnkgdG8gc3VibWl0IGFub3RoZXIgcmVxdWVzdCBp ZiB3ZSBuZWVkIG9uZSAqLwo+ICsJCWJoID0gY29tbW9uLT5uZXh0X2J1ZmZoZF90b19maWxsOwo+ ICsJCWlmIChiaC0+c3RhdGUgPT0gQlVGX1NUQVRFX0VNUFRZCj4gKwkJICYmIGNvbW1vbi0+dXNi X2Ftb3VudF9sZWZ0ID4gMCkgewo+ICsJCQlhbW91bnQgPSBtaW4oY29tbW9uLT51c2JfYW1vdW50 X2xlZnQsIEZTR19CVUZMRU4pOwo+ICsKPiArCQkJLyogYW1vdW50IGlzIGFsd2F5cyBkaXZpc2li bGUgYnkgNTEyLCBoZW5jZSBieQo+ICsJCQkgKiB0aGUgYnVsay1vdXQgbWF4cGFja2V0IHNpemUg Ki8KPiArCQkJYmgtPm91dHJlcS0+bGVuZ3RoID0gYW1vdW50Owo+ICsJCQliaC0+YnVsa19vdXRf aW50ZW5kZWRfbGVuZ3RoID0gYW1vdW50Owo+ICsJCQliaC0+b3V0cmVxLT5zaG9ydF9ub3Rfb2sg PSAxOwo+ICsJCQlTVEFSVF9UUkFOU0ZFUl9PUihjb21tb24sIGJ1bGtfb3V0LCBiaC0+b3V0cmVx LAo+ICsJCQkJCSAgJmJoLT5vdXRyZXFfYnVzeSwgJmJoLT5zdGF0ZSkKPiArCQkJCS8qIERvbid0 IGtub3cgd2hhdCB0byBkbyBpZgo+ICsJCQkJICogY29tbW9uLT5mc2cgaXMgTlVMTCAqLwo+ICsJ CQkJcmV0dXJuIC1FSU87Cj4gKwkJCWNvbW1vbi0+bmV4dF9idWZmaGRfdG9fZmlsbCA9IGJoLT5u ZXh0Owo+ICsJCQljb21tb24tPnVzYl9hbW91bnRfbGVmdCAtPSBhbW91bnQ7Cj4gKwkJCWNvbnRp bnVlOwo+ICsJCX0KPiArCj4gKwkJLyogT3RoZXJ3aXNlIHdhaXQgZm9yIHNvbWV0aGluZyB0byBo YXBwZW4gKi8KPiArCQlyYyA9IHNsZWVwX3RocmVhZChjb21tb24pOwo+ICsJCWlmIChyYykKPiAr CQkJcmV0dXJuIHJjOwo+ICsJfQo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKwo+ICtzdGF0aWMg aW50IGZpbmlzaF9yZXBseShzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uKQo+ICt7Cj4gKwlzdHJ1 Y3QgZnNnX2J1ZmZoZAkqYmggPSBjb21tb24tPm5leHRfYnVmZmhkX3RvX2ZpbGw7Cj4gKwlpbnQJ CQlyYyA9IDA7Cj4gKwo+ICsJc3dpdGNoIChjb21tb24tPmRhdGFfZGlyKSB7Cj4gKwljYXNlIERB VEFfRElSX05PTkU6Cj4gKwkJYnJlYWs7CQkJLyogTm90aGluZyB0byBzZW5kICovCj4gKwo+ICsJ LyogSWYgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZSBob3N0IHdhbnRzIHRvIHJlYWQgb3Igd3Jp dGUsCj4gKwkgKiB0aGlzIG11c3QgYmUgQ0Igb3IgQ0JJIHdpdGggYW4gdW5rbm93biBjb21tYW5k LiAgV2UgbXVzdG4ndAo+ICsJICogdHJ5IHRvIHNlbmQgb3IgcmVjZWl2ZSBhbnkgZGF0YS4gIFNv IHN0YWxsIGJvdGggYnVsayBwaXBlcwo+ICsJICogaWYgd2UgY2FuIGFuZCB3YWl0IGZvciBhIHJl c2V0LiAqLwo+ICsJY2FzZSBEQVRBX0RJUl9VTktOT1dOOgo+ICsJCWlmICghY29tbW9uLT5jYW5f c3RhbGwpIHsKPiArCQkJLyogTm90aGluZyAqLwo+ICsJCX0gZWxzZSBpZiAoZnNnX2lzX3NldChj b21tb24pKSB7Cj4gKwkJCWZzZ19zZXRfaGFsdChjb21tb24tPmZzZywgY29tbW9uLT5mc2ctPmJ1 bGtfb3V0KTsKPiArCQkJcmMgPSBoYWx0X2J1bGtfaW5fZW5kcG9pbnQoY29tbW9uLT5mc2cpOwo+ ICsJCX0gZWxzZSB7Cj4gKwkJCS8qIERvbid0IGtub3cgd2hhdCB0byBkbyBpZiBjb21tb24tPmZz ZyBpcyBOVUxMICovCj4gKwkJCXJjID0gLUVJTzsKPiArCQl9Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJ LyogQWxsIGJ1dCB0aGUgbGFzdCBidWZmZXIgb2YgZGF0YSBtdXN0IGhhdmUgYWxyZWFkeSBiZWVu IHNlbnQgKi8KPiArCWNhc2UgREFUQV9ESVJfVE9fSE9TVDoKPiArCQlpZiAoY29tbW9uLT5kYXRh X3NpemUgPT0gMCkgewo+ICsJCQkvKiBOb3RoaW5nIHRvIHNlbmQgKi8KPiArCj4gKwkJLyogSWYg dGhlcmUncyBubyByZXNpZHVlLCBzaW1wbHkgc2VuZCB0aGUgbGFzdCBidWZmZXIgKi8KPiArCQl9 IGVsc2UgaWYgKGNvbW1vbi0+cmVzaWR1ZSA9PSAwKSB7Cj4gKwkJCWJoLT5pbnJlcS0+emVybyA9 IDA7Cj4gKwkJCVNUQVJUX1RSQU5TRkVSX09SKGNvbW1vbiwgYnVsa19pbiwgYmgtPmlucmVxLAo+ ICsJCQkJCSAgJmJoLT5pbnJlcV9idXN5LCAmYmgtPnN0YXRlKQo+ICsJCQkJcmV0dXJuIC1FSU87 Cj4gKwkJCWNvbW1vbi0+bmV4dF9idWZmaGRfdG9fZmlsbCA9IGJoLT5uZXh0Owo+ICsKPiArCQkv KiBGb3IgQnVsay1vbmx5LCBpZiB3ZSdyZSBhbGxvd2VkIHRvIHN0YWxsIHRoZW4gc2VuZCB0aGUK PiArCQkgKiBzaG9ydCBwYWNrZXQgYW5kIGhhbHQgdGhlIGJ1bGstaW4gZW5kcG9pbnQuICBJZiB3 ZSBjYW4ndAo+ICsJCSAqIHN0YWxsLCBwYWQgb3V0IHRoZSByZW1haW5pbmcgZGF0YSB3aXRoIDAn cy4gKi8KPiArCQl9IGVsc2UgaWYgKGNvbW1vbi0+Y2FuX3N0YWxsKSB7Cj4gKwkJCWJoLT5pbnJl cS0+emVybyA9IDE7Cj4gKwkJCVNUQVJUX1RSQU5TRkVSX09SKGNvbW1vbiwgYnVsa19pbiwgYmgt PmlucmVxLAo+ICsJCQkJCSAgJmJoLT5pbnJlcV9idXN5LCAmYmgtPnN0YXRlKQo+ICsJCQkJLyog RG9uJ3Qga25vdyB3aGF0IHRvIGRvIGlmCj4gKwkJCQkgKiBjb21tb24tPmZzZyBpcyBOVUxMICov Cj4gKwkJCQlyYyA9IC1FSU87Cj4gKwkJCWNvbW1vbi0+bmV4dF9idWZmaGRfdG9fZmlsbCA9IGJo LT5uZXh0Owo+ICsJCQlpZiAoY29tbW9uLT5mc2cpCj4gKwkJCQlyYyA9IGhhbHRfYnVsa19pbl9l bmRwb2ludChjb21tb24tPmZzZyk7Cj4gKwkJfSBlbHNlIGlmIChmc2dfaXNfc2V0KGNvbW1vbikp IHsKPiArCQkJcmMgPSBwYWRfd2l0aF96ZXJvcyhjb21tb24tPmZzZyk7Cj4gKwkJfSBlbHNlIHsK PiArCQkJLyogRG9uJ3Qga25vdyB3aGF0IHRvIGRvIGlmIGNvbW1vbi0+ZnNnIGlzIE5VTEwgKi8K PiArCQkJcmMgPSAtRUlPOwo+ICsJCX0KPiArCQlicmVhazsKPiArCj4gKwkvKiBXZSBoYXZlIHBy b2Nlc3NlZCBhbGwgd2Ugd2FudCBmcm9tIHRoZSBkYXRhIHRoZSBob3N0IGhhcyBzZW50Lgo+ICsJ ICogVGhlcmUgbWF5IHN0aWxsIGJlIG91dHN0YW5kaW5nIGJ1bGstb3V0IHJlcXVlc3RzLiAqLwo+ ICsJY2FzZSBEQVRBX0RJUl9GUk9NX0hPU1Q6Cj4gKwkJaWYgKGNvbW1vbi0+cmVzaWR1ZSA9PSAw KSB7Cj4gKwkJCS8qIE5vdGhpbmcgdG8gcmVjZWl2ZSAqLwo+ICsKPiArCQkvKiBEaWQgdGhlIGhv c3Qgc3RvcCBzZW5kaW5nIHVuZXhwZWN0ZWRseSBlYXJseT8gKi8KPiArCQl9IGVsc2UgaWYgKGNv bW1vbi0+c2hvcnRfcGFja2V0X3JlY2VpdmVkKSB7Cj4gKwkJCXJhaXNlX2V4Y2VwdGlvbihjb21t b24sIEZTR19TVEFURV9BQk9SVF9CVUxLX09VVCk7Cj4gKwkJCXJjID0gLUVQSVBFOwo+ICsKPiAr CQkvKiBXZSBoYXZlbid0IHByb2Nlc3NlZCBhbGwgdGhlIGluY29taW5nIGRhdGEuICBFdmVuIHRo b3VnaAo+ICsJCSAqIHdlIG1heSBiZSBhbGxvd2VkIHRvIHN0YWxsLCBkb2luZyBzbyB3b3VsZCBj YXVzZSBhIHJhY2UuCj4gKwkJICogVGhlIGNvbnRyb2xsZXIgbWF5IGFscmVhZHkgaGF2ZSBBQ0sn ZWQgYWxsIHRoZSByZW1haW5pbmcKPiArCQkgKiBidWxrLW91dCBwYWNrZXRzLCBpbiB3aGljaCBj YXNlIHRoZSBob3N0IHdvdWxkbid0IHNlZSBhCj4gKwkJICogU1RBTEwuICBOb3QgcmVhbGl6aW5n IHRoZSBlbmRwb2ludCB3YXMgaGFsdGVkLCBpdCB3b3VsZG4ndAo+ICsJCSAqIGNsZWFyIHRoZSBo YWx0IC0tIGxlYWRpbmcgdG8gcHJvYmxlbXMgbGF0ZXIgb24uICovCj4gKyNpZiAwCj4gKwkJfSBl bHNlIGlmIChjb21tb24tPmNhbl9zdGFsbCkgewo+ICsJCQlpZiAoZnNnX2lzX3NldChjb21tb24p KQo+ICsJCQkJZnNnX3NldF9oYWx0KGNvbW1vbi0+ZnNnLAo+ICsJCQkJCSAgICAgY29tbW9uLT5m c2ctPmJ1bGtfb3V0KTsKPiArCQkJcmFpc2VfZXhjZXB0aW9uKGNvbW1vbiwgRlNHX1NUQVRFX0FC T1JUX0JVTEtfT1VUKTsKPiArCQkJcmMgPSAtRVBJUEU7Cj4gKyNlbmRpZgo+ICsKPiArCQkvKiBX ZSBjYW4ndCBzdGFsbC4gIFJlYWQgaW4gdGhlIGV4Y2VzcyBkYXRhIGFuZCB0aHJvdyBpdAo+ICsJ CSAqIGFsbCBhd2F5LiAqLwo+ICsJCX0gZWxzZSB7Cj4gKwkJCXJjID0gdGhyb3dfYXdheV9kYXRh KGNvbW1vbik7Cj4gKwkJfQo+ICsJCWJyZWFrOwo+ICsJfQo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4g Kwo+ICsKPiArc3RhdGljIGludCBzZW5kX3N0YXR1cyhzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9u KQo+ICt7Cj4gKwlzdHJ1Y3QgZnNnX2x1bgkJKmN1cmx1biA9ICZjb21tb24tPmx1bnNbY29tbW9u LT5sdW5dOwo+ICsJc3RydWN0IGZzZ19idWZmaGQJKmJoOwo+ICsJc3RydWN0IGJ1bGtfY3Nfd3Jh cAkqY3N3Owo+ICsJaW50CQkJcmM7Cj4gKwl1OAkJCXN0YXR1cyA9IFVTX0JVTEtfU1RBVF9PSzsK PiArCXUzMgkJCXNkLCBzZGluZm8gPSAwOwo+ICsKPiArCS8qIFdhaXQgZm9yIHRoZSBuZXh0IGJ1 ZmZlciB0byBiZWNvbWUgYXZhaWxhYmxlICovCj4gKwliaCA9IGNvbW1vbi0+bmV4dF9idWZmaGRf dG9fZmlsbDsKPiArCXdoaWxlIChiaC0+c3RhdGUgIT0gQlVGX1NUQVRFX0VNUFRZKSB7Cj4gKwkJ cmMgPSBzbGVlcF90aHJlYWQoY29tbW9uKTsKPiArCQlpZiAocmMpCj4gKwkJCXJldHVybiByYzsK PiArCX0KPiArCj4gKwlpZiAoY3VybHVuKQo+ICsJCXNkID0gY3VybHVuLT5zZW5zZV9kYXRhOwo+ ICsJZWxzZSBpZiAoY29tbW9uLT5iYWRfbHVuX29rYXkpCj4gKwkJc2QgPSBTU19OT19TRU5TRTsK PiArCWVsc2UKPiArCQlzZCA9IFNTX0xPR0lDQUxfVU5JVF9OT1RfU1VQUE9SVEVEOwo+ICsKPiAr CWlmIChjb21tb24tPnBoYXNlX2Vycm9yKSB7Cj4gKwkJREJHKGNvbW1vbiwgInNlbmRpbmcgcGhh c2UtZXJyb3Igc3RhdHVzXG4iKTsKPiArCQlzdGF0dXMgPSBVU19CVUxLX1NUQVRfUEhBU0U7Cj4g KwkJc2QgPSBTU19JTlZBTElEX0NPTU1BTkQ7Cj4gKwl9IGVsc2UgaWYgKHNkICE9IFNTX05PX1NF TlNFKSB7Cj4gKwkJREJHKGNvbW1vbiwgInNlbmRpbmcgY29tbWFuZC1mYWlsdXJlIHN0YXR1c1xu Iik7Cj4gKwkJc3RhdHVzID0gVVNfQlVMS19TVEFUX0ZBSUw7Cj4gKwkJVkRCRyhjb21tb24sICIg IHNlbnNlIGRhdGE6IFNLIHglMDJ4LCBBU0MgeCUwMngsIEFTQ1EgeCUwMng7Igo+ICsJCQkiICBp bmZvIHgleFxuIiwKPiArCQkJU0soc2QpLCBBU0Moc2QpLCBBU0NRKHNkKSwgc2RpbmZvKTsKPiAr CX0KPiArCj4gKwkvKiBTdG9yZSBhbmQgc2VuZCB0aGUgQnVsay1vbmx5IENTVyAqLwo+ICsJY3N3 ID0gKHZvaWQgKiliaC0+YnVmOwo+ICsKPiArCWNzdy0+U2lnbmF0dXJlID0gY3B1X3RvX2xlMzIo VVNfQlVMS19DU19TSUdOKTsKPiArCWNzdy0+VGFnID0gY29tbW9uLT50YWc7Cj4gKwljc3ctPlJl c2lkdWUgPSBjcHVfdG9fbGUzMihjb21tb24tPnJlc2lkdWUpOwo+ICsJY3N3LT5TdGF0dXMgPSBz dGF0dXM7Cj4gKwo+ICsJYmgtPmlucmVxLT5sZW5ndGggPSBVU19CVUxLX0NTX1dSQVBfTEVOOwo+ ICsJYmgtPmlucmVxLT56ZXJvID0gMDsKPiArCVNUQVJUX1RSQU5TRkVSX09SKGNvbW1vbiwgYnVs a19pbiwgYmgtPmlucmVxLAo+ICsJCQkgICZiaC0+aW5yZXFfYnVzeSwgJmJoLT5zdGF0ZSkKPiAr CQkvKiBEb24ndCBrbm93IHdoYXQgdG8gZG8gaWYgY29tbW9uLT5mc2cgaXMgTlVMTCAqLwo+ICsJ CXJldHVybiAtRUlPOwo+ICsKPiArCWNvbW1vbi0+bmV4dF9idWZmaGRfdG9fZmlsbCA9IGJoLT5u ZXh0Owo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKwo+ICsvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwo+ ICsKPiArLyogQ2hlY2sgd2hldGhlciB0aGUgY29tbWFuZCBpcyBwcm9wZXJseSBmb3JtZWQgYW5k IHdoZXRoZXIgaXRzIGRhdGEgc2l6ZQo+ICsgKiBhbmQgZGlyZWN0aW9uIGFncmVlIHdpdGggdGhl IHZhbHVlcyB3ZSBhbHJlYWR5IGhhdmUuICovCj4gK3N0YXRpYyBpbnQgY2hlY2tfY29tbWFuZChz dHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uLCBpbnQgY21uZF9zaXplLAo+ICsJCWVudW0gZGF0YV9k aXJlY3Rpb24gZGF0YV9kaXIsIHVuc2lnbmVkIGludCBtYXNrLAo+ICsJCWludCBuZWVkc19tZWRp dW0sIGNvbnN0IGNoYXIgKm5hbWUpCj4gK3sKPiArCWludAkJCWk7Cj4gKwlpbnQJCQlsdW4gPSBj b21tb24tPmNtbmRbMV0gPj4gNTsKPiArCXN0YXRpYyBjb25zdCBjaGFyCWRpcmxldHRlcls0XSA9 IHsndScsICdvJywgJ2knLCAnbid9Owo+ICsJY2hhcgkJCWhkbGVuWzIwXTsKPiArCXN0cnVjdCBm c2dfbHVuCQkqY3VybHVuOwo+ICsKPiArCWhkbGVuWzBdID0gMDsKPiArCWlmIChjb21tb24tPmRh dGFfZGlyICE9IERBVEFfRElSX1VOS05PV04pCj4gKwkJc3ByaW50ZihoZGxlbiwgIiwgSCVjPSV1 IiwgZGlybGV0dGVyWyhpbnQpIGNvbW1vbi0+ZGF0YV9kaXJdLAo+ICsJCQkJY29tbW9uLT5kYXRh X3NpemUpOwo+ICsJVkRCRyhjb21tb24sICJTQ1NJIGNvbW1hbmQ6ICVzOyAgRGM9JWQsIEQlYz0l dTsgIEhjPSVkJXNcbiIsCj4gKwkgICAgIG5hbWUsIGNtbmRfc2l6ZSwgZGlybGV0dGVyWyhpbnQp IGRhdGFfZGlyXSwKPiArCSAgICAgY29tbW9uLT5kYXRhX3NpemVfZnJvbV9jbW5kLCBjb21tb24t PmNtbmRfc2l6ZSwgaGRsZW4pOwo+ICsKPiArCS8qIFdlIGNhbid0IHJlcGx5IGF0IGFsbCB1bnRp bCB3ZSBrbm93IHRoZSBjb3JyZWN0IGRhdGEgZGlyZWN0aW9uCj4gKwkgKiBhbmQgc2l6ZS4gKi8K PiArCWlmIChjb21tb24tPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPT0gMCkKPiArCQlkYXRhX2RpciA9 IERBVEFfRElSX05PTkU7Cj4gKwlpZiAoY29tbW9uLT5kYXRhX3NpemUgPCBjb21tb24tPmRhdGFf c2l6ZV9mcm9tX2NtbmQpIHsKPiArCQkvKiBIb3N0IGRhdGEgc2l6ZSA8IERldmljZSBkYXRhIHNp emUgaXMgYSBwaGFzZSBlcnJvci4KPiArCQkgKiBDYXJyeSBvdXQgdGhlIGNvbW1hbmQsIGJ1dCBv bmx5IHRyYW5zZmVyIGFzIG11Y2ggYXMKPiArCQkgKiB3ZSBhcmUgYWxsb3dlZC4gKi8KPiArCQlj b21tb24tPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSBjb21tb24tPmRhdGFfc2l6ZTsKPiArCQljb21t b24tPnBoYXNlX2Vycm9yID0gMTsKPiArCX0KPiArCWNvbW1vbi0+cmVzaWR1ZSA9IGNvbW1vbi0+ ZGF0YV9zaXplOwo+ICsJY29tbW9uLT51c2JfYW1vdW50X2xlZnQgPSBjb21tb24tPmRhdGFfc2l6 ZTsKPiArCj4gKwkvKiBDb25mbGljdGluZyBkYXRhIGRpcmVjdGlvbnMgaXMgYSBwaGFzZSBlcnJv ciAqLwo+ICsJaWYgKGNvbW1vbi0+ZGF0YV9kaXIgIT0gZGF0YV9kaXIKPiArCSAmJiBjb21tb24t PmRhdGFfc2l6ZV9mcm9tX2NtbmQgPiAwKSB7Cj4gKwkJY29tbW9uLT5waGFzZV9lcnJvciA9IDE7 Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJLyogVmVyaWZ5IHRoZSBsZW5ndGgg b2YgdGhlIGNvbW1hbmQgaXRzZWxmICovCj4gKwlpZiAoY21uZF9zaXplICE9IGNvbW1vbi0+Y21u ZF9zaXplKSB7Cj4gKwo+ICsJCS8qIFNwZWNpYWwgY2FzZSB3b3JrYXJvdW5kOiBUaGVyZSBhcmUg cGxlbnR5IG9mIGJ1Z2d5IFNDU0kKPiArCQkgKiBpbXBsZW1lbnRhdGlvbnMuIE1hbnkgaGF2ZSBp c3N1ZXMgd2l0aCBjYnctPkxlbmd0aAo+ICsJCSAqIGZpZWxkIHBhc3NpbmcgYSB3cm9uZyBjb21t YW5kIHNpemUuIEZvciB0aG9zZSBjYXNlcyB3ZQo+ICsJCSAqIGFsd2F5cyB0cnkgdG8gd29yayBh cm91bmQgdGhlIHByb2JsZW0gYnkgdXNpbmcgdGhlIGxlbmd0aAo+ICsJCSAqIHNlbnQgYnkgdGhl IGhvc3Qgc2lkZSBwcm92aWRlZCBpdCBpcyBhdCBsZWFzdCBhcyBsYXJnZQo+ICsJCSAqIGFzIHRo ZSBjb3JyZWN0IGNvbW1hbmQgbGVuZ3RoLgo+ICsJCSAqIEV4YW1wbGVzIG9mIHN1Y2ggY2FzZXMg d291bGQgYmUgTVMtV2luZG93cywgd2hpY2ggaXNzdWVzCj4gKwkJICogUkVRVUVTVCBTRU5TRSB3 aXRoIGNidy0+TGVuZ3RoID09IDEyIHdoZXJlIGl0IHNob3VsZAo+ICsJCSAqIGJlIDYsIGFuZCB4 Ym94MzYwIGlzc3VpbmcgSU5RVUlSWSwgVEVTVCBVTklUIFJFQURZIGFuZAo+ICsJCSAqIFJFUVVF U1QgU0VOU0Ugd2l0aCBjYnctPkxlbmd0aCA9PSAxMCB3aGVyZSBpdCBzaG91bGQKPiArCQkgKiBi ZSA2IGFzIHdlbGwuCj4gKwkJICovCj4gKwkJaWYgKGNtbmRfc2l6ZSA8PSBjb21tb24tPmNtbmRf c2l6ZSkgewo+ICsJCQlEQkcoY29tbW9uLCAiJXMgaXMgYnVnZ3khIEV4cGVjdGVkIGxlbmd0aCAl ZCAiCj4gKwkJCSAgICAiYnV0IHdlIGdvdCAlZFxuIiwgbmFtZSwKPiArCQkJICAgIGNtbmRfc2l6 ZSwgY29tbW9uLT5jbW5kX3NpemUpOwo+ICsJCQljbW5kX3NpemUgPSBjb21tb24tPmNtbmRfc2l6 ZTsKPiArCQl9IGVsc2Ugewo+ICsJCQljb21tb24tPnBoYXNlX2Vycm9yID0gMTsKPiArCQkJcmV0 dXJuIC1FSU5WQUw7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCS8qIENoZWNrIHRoYXQgdGhlIExVTiB2 YWx1ZXMgYXJlIGNvbnNpc3RlbnQgKi8KPiArCWlmIChjb21tb24tPmx1biAhPSBsdW4pCj4gKwkJ REJHKGNvbW1vbiwgInVzaW5nIExVTiAlZCBmcm9tIENCVywgbm90IExVTiAlZCBmcm9tIENEQlxu IiwKPiArCQkgICAgY29tbW9uLT5sdW4sIGx1bik7Cj4gKwo+ICsJLyogQ2hlY2sgdGhlIExVTiAq Lwo+ICsJaWYgKGNvbW1vbi0+bHVuIDwgY29tbW9uLT5ubHVucykgewo+ICsJCWN1cmx1biA9ICZj b21tb24tPmx1bnNbY29tbW9uLT5sdW5dOwo+ICsJCWlmIChjb21tb24tPmNtbmRbMF0gIT0gU0NT SV9SRVFfU0VOU0UpIHsKPiArCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfTk9fU0VOU0U7Cj4g KwkJCWN1cmx1bi0+aW5mb192YWxpZCA9IDA7Cj4gKwkJfQo+ICsJfSBlbHNlIHsKPiArCQljdXJs dW4gPSBOVUxMOwo+ICsJCWNvbW1vbi0+YmFkX2x1bl9va2F5ID0gMDsKPiArCj4gKwkJLyogSU5R VUlSWSBhbmQgUkVRVUVTVCBTRU5TRSBjb21tYW5kcyBhcmUgZXhwbGljaXRseSBhbGxvd2VkCj4g KwkJICogdG8gdXNlIHVuc3VwcG9ydGVkIExVTnM7IGFsbCBvdGhlcnMgbWF5IG5vdC4gKi8KPiAr CQlpZiAoY29tbW9uLT5jbW5kWzBdICE9IFNDU0lfSU5RVUlSWSAmJgo+ICsJCSAgICBjb21tb24t PmNtbmRbMF0gIT0gU0NTSV9SRVFfU0VOU0UpIHsKPiArCQkJREJHKGNvbW1vbiwgInVuc3VwcG9y dGVkIExVTiAlZFxuIiwgY29tbW9uLT5sdW4pOwo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9 Cj4gKwl9Cj4gKyNpZiAwCj4gKwkvKiBJZiBhIHVuaXQgYXR0ZW50aW9uIGNvbmRpdGlvbiBleGlz dHMsIG9ubHkgSU5RVUlSWSBhbmQKPiArCSAqIFJFUVVFU1QgU0VOU0UgY29tbWFuZHMgYXJlIGFs bG93ZWQ7IGFueXRoaW5nIGVsc2UgbXVzdCBmYWlsLiAqLwo+ICsJaWYgKGN1cmx1biAmJiBjdXJs dW4tPnVuaXRfYXR0ZW50aW9uX2RhdGEgIT0gU1NfTk9fU0VOU0UgJiYKPiArCQkJY29tbW9uLT5j bW5kWzBdICE9IFNDU0lfSU5RVUlSWSAmJgo+ICsJCQljb21tb24tPmNtbmRbMF0gIT0gU0NTSV9S RVFfU0VOU0UpIHsKPiArCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBjdXJsdW4tPnVuaXRfYXR0ZW50 aW9uX2RhdGE7Cj4gKwkJY3VybHVuLT51bml0X2F0dGVudGlvbl9kYXRhID0gU1NfTk9fU0VOU0U7 Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKyNlbmRpZgo+ICsJLyogQ2hlY2sgdGhhdCBv bmx5IGNvbW1hbmQgYnl0ZXMgbGlzdGVkIGluIHRoZSBtYXNrIGFyZSBub24temVybyAqLwo+ICsJ Y29tbW9uLT5jbW5kWzFdICY9IDB4MWY7CQkJLyogTWFzayBhd2F5IHRoZSBMVU4gKi8KPiArCWZv ciAoaSA9IDE7IGkgPCBjbW5kX3NpemU7ICsraSkgewo+ICsJCWlmIChjb21tb24tPmNtbmRbaV0g JiYgIShtYXNrICYgKDEgPDwgaSkpKSB7Cj4gKwkJCWlmIChjdXJsdW4pCj4gKwkJCQljdXJsdW4t PnNlbnNlX2RhdGEgPSBTU19JTlZBTElEX0ZJRUxEX0lOX0NEQjsKPiArCQkJcmV0dXJuIC1FSU5W QUw7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGRvX3Njc2lfY29tbWFuZChzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uKQo+ICt7Cj4gKwlzdHJ1 Y3QgZnNnX2J1ZmZoZAkqYmg7Cj4gKwlpbnQJCQlyYzsKPiArCWludAkJCXJlcGx5ID0gLUVJTlZB TDsKPiArCWludAkJCWk7Cj4gKwlzdGF0aWMgY2hhcgkJdW5rbm93blsxNl07Cj4gKwlzdHJ1Y3Qg ZnNnX2x1bgkJKmN1cmx1biA9ICZjb21tb24tPmx1bnNbY29tbW9uLT5sdW5dOwo+ICsKPiArCWR1 bXBfY2RiKGNvbW1vbik7Cj4gKwo+ICsJLyogV2FpdCBmb3IgdGhlIG5leHQgYnVmZmVyIHRvIGJl Y29tZSBhdmFpbGFibGUgZm9yIGRhdGEgb3Igc3RhdHVzICovCj4gKwliaCA9IGNvbW1vbi0+bmV4 dF9idWZmaGRfdG9fZmlsbDsKPiArCWNvbW1vbi0+bmV4dF9idWZmaGRfdG9fZHJhaW4gPSBiaDsK PiArCXdoaWxlIChiaC0+c3RhdGUgIT0gQlVGX1NUQVRFX0VNUFRZKSB7Cj4gKwkJcmMgPSBzbGVl cF90aHJlYWQoY29tbW9uKTsKPiArCQlpZiAocmMpCj4gKwkJCXJldHVybiByYzsKPiArCX0KPiAr CWNvbW1vbi0+cGhhc2VfZXJyb3IgPSAwOwo+ICsJY29tbW9uLT5zaG9ydF9wYWNrZXRfcmVjZWl2 ZWQgPSAwOwo+ICsKPiArCWRvd25fcmVhZCgmY29tbW9uLT5maWxlc2VtKTsJLyogV2UncmUgdXNp bmcgdGhlIGJhY2tpbmcgZmlsZSAqLwo+ICsJc3dpdGNoIChjb21tb24tPmNtbmRbMF0pIHsKPiAr Cj4gKwljYXNlIFNDU0lfSU5RVUlSWToKPiArCQljb21tb24tPmRhdGFfc2l6ZV9mcm9tX2NtbmQg PSBjb21tb24tPmNtbmRbNF07Cj4gKwkJcmVwbHkgPSBjaGVja19jb21tYW5kKGNvbW1vbiwgNiwg REFUQV9ESVJfVE9fSE9TVCwKPiArCQkJCSAgICAgICgxPDw0KSwgMCwKPiArCQkJCSAgICAgICJJ TlFVSVJZIik7Cj4gKwkJaWYgKHJlcGx5ID09IDApCj4gKwkJCXJlcGx5ID0gZG9faW5xdWlyeShj b21tb24sIGJoKTsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIFNDU0lfTU9ERV9TRUw2Ogo+ICsJ CWNvbW1vbi0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IGNvbW1vbi0+Y21uZFs0XTsKPiArCQlyZXBs eSA9IGNoZWNrX2NvbW1hbmQoY29tbW9uLCA2LCBEQVRBX0RJUl9GUk9NX0hPU1QsCj4gKwkJCQkg ICAgICAoMTw8MSkgfCAoMTw8NCksIDAsCj4gKwkJCQkgICAgICAiTU9ERSBTRUxFQ1QoNikiKTsK PiArCQlpZiAocmVwbHkgPT0gMCkKPiArCQkJcmVwbHkgPSBkb19tb2RlX3NlbGVjdChjb21tb24s IGJoKTsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIFNDU0lfTU9ERV9TRUwxMDoKPiArCQljb21t b24tPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPQo+ICsJCQlnZXRfdW5hbGlnbmVkX2JlMTYoJmNvbW1v bi0+Y21uZFs3XSk7Cj4gKwkJcmVwbHkgPSBjaGVja19jb21tYW5kKGNvbW1vbiwgMTAsIERBVEFf RElSX0ZST01fSE9TVCwKPiArCQkJCSAgICAgICgxPDwxKSB8ICgzPDw3KSwgMCwKPiArCQkJCSAg ICAgICJNT0RFIFNFTEVDVCgxMCkiKTsKPiArCQlpZiAocmVwbHkgPT0gMCkKPiArCQkJcmVwbHkg PSBkb19tb2RlX3NlbGVjdChjb21tb24sIGJoKTsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIFND U0lfTU9ERV9TRU42Ogo+ICsJCWNvbW1vbi0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IGNvbW1vbi0+ Y21uZFs0XTsKPiArCQlyZXBseSA9IGNoZWNrX2NvbW1hbmQoY29tbW9uLCA2LCBEQVRBX0RJUl9U T19IT1NULAo+ICsJCQkJICAgICAgKDE8PDEpIHwgKDE8PDIpIHwgKDE8PDQpLCAwLAo+ICsJCQkJ ICAgICAgIk1PREUgU0VOU0UoNikiKTsKPiArCQlpZiAocmVwbHkgPT0gMCkKPiArCQkJcmVwbHkg PSBkb19tb2RlX3NlbnNlKGNvbW1vbiwgYmgpOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgU0NT SV9NT0RFX1NFTjEwOgo+ICsJCWNvbW1vbi0+ZGF0YV9zaXplX2Zyb21fY21uZCA9Cj4gKwkJCWdl dF91bmFsaWduZWRfYmUxNigmY29tbW9uLT5jbW5kWzddKTsKPiArCQlyZXBseSA9IGNoZWNrX2Nv bW1hbmQoY29tbW9uLCAxMCwgREFUQV9ESVJfVE9fSE9TVCwKPiArCQkJCSAgICAgICgxPDwxKSB8 ICgxPDwyKSB8ICgzPDw3KSwgMCwKPiArCQkJCSAgICAgICJNT0RFIFNFTlNFKDEwKSIpOwo+ICsJ CWlmIChyZXBseSA9PSAwKQo+ICsJCQlyZXBseSA9IGRvX21vZGVfc2Vuc2UoY29tbW9uLCBiaCk7 Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBTQ1NJX01FRF9SRU1PVkw6Cj4gKwkJY29tbW9uLT5k YXRhX3NpemVfZnJvbV9jbW5kID0gMDsKPiArCQlyZXBseSA9IGNoZWNrX2NvbW1hbmQoY29tbW9u LCA2LCBEQVRBX0RJUl9OT05FLAo+ICsJCQkJICAgICAgKDE8PDQpLCAwLAo+ICsJCQkJICAgICAg IlBSRVZFTlQtQUxMT1cgTUVESVVNIFJFTU9WQUwiKTsKPiArCQlpZiAocmVwbHkgPT0gMCkKPiAr CQkJcmVwbHkgPSBkb19wcmV2ZW50X2FsbG93KGNvbW1vbik7Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJ Y2FzZSBTQ1NJX1JFQUQ2Ogo+ICsJCWkgPSBjb21tb24tPmNtbmRbNF07Cj4gKwkJY29tbW9uLT5k YXRhX3NpemVfZnJvbV9jbW5kID0gKGkgPT0gMCA/IDI1NiA6IGkpIDw8IDk7Cj4gKwkJcmVwbHkg PSBjaGVja19jb21tYW5kKGNvbW1vbiwgNiwgREFUQV9ESVJfVE9fSE9TVCwKPiArCQkJCSAgICAg ICg3PDwxKSB8ICgxPDw0KSwgMSwKPiArCQkJCSAgICAgICJSRUFEKDYpIik7Cj4gKwkJaWYgKHJl cGx5ID09IDApCj4gKwkJCXJlcGx5ID0gZG9fcmVhZChjb21tb24pOwo+ICsJCWJyZWFrOwo+ICsK PiArCWNhc2UgU0NTSV9SRUFEMTA6Cj4gKwkJY29tbW9uLT5kYXRhX3NpemVfZnJvbV9jbW5kID0K PiArCQkJCWdldF91bmFsaWduZWRfYmUxNigmY29tbW9uLT5jbW5kWzddKSA8PCA5Owo+ICsJCXJl cGx5ID0gY2hlY2tfY29tbWFuZChjb21tb24sIDEwLCBEQVRBX0RJUl9UT19IT1NULAo+ICsJCQkJ ICAgICAgKDE8PDEpIHwgKDB4Zjw8MikgfCAoMzw8NyksIDEsCj4gKwkJCQkgICAgICAiUkVBRCgx MCkiKTsKPiArCQlpZiAocmVwbHkgPT0gMCkKPiArCQkJcmVwbHkgPSBkb19yZWFkKGNvbW1vbik7 Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBTQ1NJX1JFQUQxMjoKPiArCQljb21tb24tPmRhdGFf c2l6ZV9mcm9tX2NtbmQgPQo+ICsJCQkJZ2V0X3VuYWxpZ25lZF9iZTMyKCZjb21tb24tPmNtbmRb Nl0pIDw8IDk7Cj4gKwkJcmVwbHkgPSBjaGVja19jb21tYW5kKGNvbW1vbiwgMTIsIERBVEFfRElS X1RPX0hPU1QsCj4gKwkJCQkgICAgICAoMTw8MSkgfCAoMHhmPDwyKSB8ICgweGY8PDYpLCAxLAo+ ICsJCQkJICAgICAgIlJFQUQoMTIpIik7Cj4gKwkJaWYgKHJlcGx5ID09IDApCj4gKwkJCXJlcGx5 ID0gZG9fcmVhZChjb21tb24pOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgU0NTSV9SRF9DQVBB QzoKPiArCQljb21tb24tPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSA4Owo+ICsJCXJlcGx5ID0gY2hl Y2tfY29tbWFuZChjb21tb24sIDEwLCBEQVRBX0RJUl9UT19IT1NULAo+ICsJCQkJICAgICAgKDB4 Zjw8MikgfCAoMTw8OCksIDEsCj4gKwkJCQkgICAgICAiUkVBRCBDQVBBQ0lUWSIpOwo+ICsJCWlm IChyZXBseSA9PSAwKQo+ICsJCQlyZXBseSA9IGRvX3JlYWRfY2FwYWNpdHkoY29tbW9uLCBiaCk7 Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBTQ1NJX1JEX0hFQURFUjoKPiArCQlpZiAoIWNvbW1v bi0+bHVuc1tjb21tb24tPmx1bl0uY2Ryb20pCj4gKwkJCWdvdG8gdW5rbm93bl9jbW5kOwo+ICsJ CWNvbW1vbi0+ZGF0YV9zaXplX2Zyb21fY21uZCA9Cj4gKwkJCWdldF91bmFsaWduZWRfYmUxNigm Y29tbW9uLT5jbW5kWzddKTsKPiArCQlyZXBseSA9IGNoZWNrX2NvbW1hbmQoY29tbW9uLCAxMCwg REFUQV9ESVJfVE9fSE9TVCwKPiArCQkJCSAgICAgICgzPDw3KSB8ICgweDFmPDwxKSwgMSwKPiAr CQkJCSAgICAgICJSRUFEIEhFQURFUiIpOwo+ICsJCWlmIChyZXBseSA9PSAwKQo+ICsJCQlyZXBs eSA9IGRvX3JlYWRfaGVhZGVyKGNvbW1vbiwgYmgpOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2Ug U0NTSV9SRF9UT0M6Cj4gKwkJaWYgKCFjb21tb24tPmx1bnNbY29tbW9uLT5sdW5dLmNkcm9tKQo+ ICsJCQlnb3RvIHVua25vd25fY21uZDsKPiArCQljb21tb24tPmRhdGFfc2l6ZV9mcm9tX2NtbmQg PQo+ICsJCQlnZXRfdW5hbGlnbmVkX2JlMTYoJmNvbW1vbi0+Y21uZFs3XSk7Cj4gKwkJcmVwbHkg PSBjaGVja19jb21tYW5kKGNvbW1vbiwgMTAsIERBVEFfRElSX1RPX0hPU1QsCj4gKwkJCQkgICAg ICAoNzw8NikgfCAoMTw8MSksIDEsCj4gKwkJCQkgICAgICAiUkVBRCBUT0MiKTsKPiArCQlpZiAo cmVwbHkgPT0gMCkKPiArCQkJcmVwbHkgPSBkb19yZWFkX3RvYyhjb21tb24sIGJoKTsKPiArCQli cmVhazsKPiArCj4gKwljYXNlIFNDU0lfUkRfRk1UX0NBUEFDOgo+ICsJCWNvbW1vbi0+ZGF0YV9z aXplX2Zyb21fY21uZCA9Cj4gKwkJCWdldF91bmFsaWduZWRfYmUxNigmY29tbW9uLT5jbW5kWzdd KTsKPiArCQlyZXBseSA9IGNoZWNrX2NvbW1hbmQoY29tbW9uLCAxMCwgREFUQV9ESVJfVE9fSE9T VCwKPiArCQkJCSAgICAgICgzPDw3KSwgMSwKPiArCQkJCSAgICAgICJSRUFEIEZPUk1BVCBDQVBB Q0lUSUVTIik7Cj4gKwkJaWYgKHJlcGx5ID09IDApCj4gKwkJCXJlcGx5ID0gZG9fcmVhZF9mb3Jt YXRfY2FwYWNpdGllcyhjb21tb24sIGJoKTsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIFNDU0lf UkVRX1NFTlNFOgo+ICsJCWNvbW1vbi0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IGNvbW1vbi0+Y21u ZFs0XTsKPiArCQlyZXBseSA9IGNoZWNrX2NvbW1hbmQoY29tbW9uLCA2LCBEQVRBX0RJUl9UT19I T1NULAo+ICsJCQkJICAgICAgKDE8PDQpLCAwLAo+ICsJCQkJICAgICAgIlJFUVVFU1QgU0VOU0Ui KTsKPiArCQlpZiAocmVwbHkgPT0gMCkKPiArCQkJcmVwbHkgPSBkb19yZXF1ZXN0X3NlbnNlKGNv bW1vbiwgYmgpOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgU0NTSV9TVEFSVF9TVFA6Cj4gKwkJ Y29tbW9uLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gMDsKPiArCQlyZXBseSA9IGNoZWNrX2NvbW1h bmQoY29tbW9uLCA2LCBEQVRBX0RJUl9OT05FLAo+ICsJCQkJICAgICAgKDE8PDEpIHwgKDE8PDQp LCAwLAo+ICsJCQkJICAgICAgIlNUQVJULVNUT1AgVU5JVCIpOwo+ICsJCWlmIChyZXBseSA9PSAw KQo+ICsJCQlyZXBseSA9IGRvX3N0YXJ0X3N0b3AoY29tbW9uKTsKPiArCQlicmVhazsKPiArCj4g KwljYXNlIFNDU0lfU1lOQ19DQUNIRToKPiArCQljb21tb24tPmRhdGFfc2l6ZV9mcm9tX2NtbmQg PSAwOwo+ICsJCXJlcGx5ID0gY2hlY2tfY29tbWFuZChjb21tb24sIDEwLCBEQVRBX0RJUl9OT05F LAo+ICsJCQkJICAgICAgKDB4Zjw8MikgfCAoMzw8NyksIDEsCj4gKwkJCQkgICAgICAiU1lOQ0hS T05JWkUgQ0FDSEUiKTsKPiArCQlpZiAocmVwbHkgPT0gMCkKPiArCQkJcmVwbHkgPSBkb19zeW5j aHJvbml6ZV9jYWNoZShjb21tb24pOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgU0NTSV9UU1Rf VV9SRFk6Cj4gKwkJY29tbW9uLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gMDsKPiArCQlyZXBseSA9 IGNoZWNrX2NvbW1hbmQoY29tbW9uLCA2LCBEQVRBX0RJUl9OT05FLAo+ICsJCQkJMCwgMSwKPiAr CQkJCSJURVNUIFVOSVQgUkVBRFkiKTsKPiArCQlicmVhazsKPiArCj4gKwkvKiBBbHRob3VnaCBv cHRpb25hbCwgdGhpcyBjb21tYW5kIGlzIHVzZWQgYnkgTVMtV2luZG93cy4gIFdlCj4gKwkgKiBz dXBwb3J0IGEgbWluaW1hbCB2ZXJzaW9uOiBCeXRDaGsgbXVzdCBiZSAwLiAqLwo+ICsJY2FzZSBT Q1NJX1ZFUklGWToKPiArCQljb21tb24tPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSAwOwo+ICsJCXJl cGx5ID0gY2hlY2tfY29tbWFuZChjb21tb24sIDEwLCBEQVRBX0RJUl9OT05FLAo+ICsJCQkJICAg ICAgKDE8PDEpIHwgKDB4Zjw8MikgfCAoMzw8NyksIDEsCj4gKwkJCQkgICAgICAiVkVSSUZZIik7 Cj4gKwkJaWYgKHJlcGx5ID09IDApCj4gKwkJCXJlcGx5ID0gZG9fdmVyaWZ5KGNvbW1vbik7Cj4g KwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBTQ1NJX1dSSVRFNjoKPiArCQlpID0gY29tbW9uLT5jbW5k WzRdOwo+ICsJCWNvbW1vbi0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IChpID09IDAgPyAyNTYgOiBp KSA8PCA5Owo+ICsJCXJlcGx5ID0gY2hlY2tfY29tbWFuZChjb21tb24sIDYsIERBVEFfRElSX0ZS T01fSE9TVCwKPiArCQkJCSAgICAgICg3PDwxKSB8ICgxPDw0KSwgMSwKPiArCQkJCSAgICAgICJX UklURSg2KSIpOwo+ICsJCWlmIChyZXBseSA9PSAwKQo+ICsJCQlyZXBseSA9IGRvX3dyaXRlKGNv bW1vbik7Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBTQ1NJX1dSSVRFMTA6Cj4gKwkJY29tbW9u LT5kYXRhX3NpemVfZnJvbV9jbW5kID0KPiArCQkJCWdldF91bmFsaWduZWRfYmUxNigmY29tbW9u LT5jbW5kWzddKSA8PCA5Owo+ICsJCXJlcGx5ID0gY2hlY2tfY29tbWFuZChjb21tb24sIDEwLCBE QVRBX0RJUl9GUk9NX0hPU1QsCj4gKwkJCQkgICAgICAoMTw8MSkgfCAoMHhmPDwyKSB8ICgzPDw3 KSwgMSwKPiArCQkJCSAgICAgICJXUklURSgxMCkiKTsKPiArCQlpZiAocmVwbHkgPT0gMCkKPiAr CQkJcmVwbHkgPSBkb193cml0ZShjb21tb24pOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgU0NT SV9XUklURTEyOgo+ICsJCWNvbW1vbi0+ZGF0YV9zaXplX2Zyb21fY21uZCA9Cj4gKwkJCQlnZXRf dW5hbGlnbmVkX2JlMzIoJmNvbW1vbi0+Y21uZFs2XSkgPDwgOTsKPiArCQlyZXBseSA9IGNoZWNr X2NvbW1hbmQoY29tbW9uLCAxMiwgREFUQV9ESVJfRlJPTV9IT1NULAo+ICsJCQkJICAgICAgKDE8 PDEpIHwgKDB4Zjw8MikgfCAoMHhmPDw2KSwgMSwKPiArCQkJCSAgICAgICJXUklURSgxMikiKTsK PiArCQlpZiAocmVwbHkgPT0gMCkKPiArCQkJcmVwbHkgPSBkb193cml0ZShjb21tb24pOwo+ICsJ CWJyZWFrOwo+ICsKPiArCS8qIFNvbWUgbWFuZGF0b3J5IGNvbW1hbmRzIHRoYXQgd2UgcmVjb2du aXplIGJ1dCBkb24ndCBpbXBsZW1lbnQuCj4gKwkgKiBUaGV5IGRvbid0IG1lYW4gbXVjaCBpbiB0 aGlzIHNldHRpbmcuICBJdCdzIGxlZnQgYXMgYW4gZXhlcmNpc2UKPiArCSAqIGZvciBhbnlvbmUg aW50ZXJlc3RlZCB0byBpbXBsZW1lbnQgUkVTRVJWRSBhbmQgUkVMRUFTRSBpbiB0ZXJtcwo+ICsJ ICogb2YgUG9zaXggbG9ja3MuICovCj4gKwljYXNlIFNDU0lfRk9STUFUOgo+ICsJY2FzZSBTQ1NJ X1JFTEVBU0U6Cj4gKwljYXNlIFNDU0lfUkVTRVJWRToKPiArCWNhc2UgU0NTSV9TRU5EX0RJQUc6 Cj4gKwkJLyogRmFsbCB0aHJvdWdoICovCj4gKwo+ICsJZGVmYXVsdDoKPiArdW5rbm93bl9jbW5k Ogo+ICsJCWNvbW1vbi0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IDA7Cj4gKwkJc3ByaW50Zih1bmtu b3duLCAiVW5rbm93biB4JTAyeCIsIGNvbW1vbi0+Y21uZFswXSk7Cj4gKwkJcmVwbHkgPSBjaGVj a19jb21tYW5kKGNvbW1vbiwgY29tbW9uLT5jbW5kX3NpemUsCj4gKwkJCQkgICAgICBEQVRBX0RJ Ul9VTktOT1dOLCAweGZmLCAwLCB1bmtub3duKTsKPiArCQlpZiAocmVwbHkgPT0gMCkgewo+ICsJ CQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19JTlZBTElEX0NPTU1BTkQ7Cj4gKwkJCXJlcGx5ID0g LUVJTlZBTDsKPiArCQl9Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwl1cF9yZWFkKCZjb21tb24tPmZp bGVzZW0pOwo+ICsKPiArCWlmIChyZXBseSA9PSAtRVBJUEUpCj4gKwkJcmV0dXJuIC1FUElQRTsK PiArCj4gKwkvKiBTZXQgdXAgdGhlIHNpbmdsZSByZXBseSBidWZmZXIgZm9yIGZpbmlzaF9yZXBs eSgpICovCj4gKwlpZiAocmVwbHkgPT0gLUVJTlZBTCkKPiArCQlyZXBseSA9IDA7CQkvKiBFcnJv ciByZXBseSBsZW5ndGggKi8KPiArCWlmIChyZXBseSA+PSAwICYmIGNvbW1vbi0+ZGF0YV9kaXIg PT0gREFUQV9ESVJfVE9fSE9TVCkgewo+ICsJCXJlcGx5ID0gbWluKCh1MzIpIHJlcGx5LCBjb21t b24tPmRhdGFfc2l6ZV9mcm9tX2NtbmQpOwo+ICsJCWJoLT5pbnJlcS0+bGVuZ3RoID0gcmVwbHk7 Cj4gKwkJYmgtPnN0YXRlID0gQlVGX1NUQVRFX0ZVTEw7Cj4gKwkJY29tbW9uLT5yZXNpZHVlIC09 IHJlcGx5Owo+ICsJfQkJCQkvKiBPdGhlcndpc2UgaXQncyBhbHJlYWR5IHNldCAqLwo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwo+ICsKPiArc3RhdGlj IGludCByZWNlaXZlZF9jYncoc3RydWN0IGZzZ19kZXYgKmZzZywgc3RydWN0IGZzZ19idWZmaGQg KmJoKQo+ICt7Cj4gKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcSA9IGJoLT5vdXRyZXE7Cj4gKwlz dHJ1Y3QgYnVsa19jYl93cmFwCSpjYncgPSByZXEtPmJ1ZjsKPiArCXN0cnVjdCBmc2dfY29tbW9u CSpjb21tb24gPSBmc2ctPmNvbW1vbjsKPiArCj4gKwkvKiBXYXMgdGhpcyBhIHJlYWwgcGFja2V0 PyAgU2hvdWxkIGl0IGJlIGlnbm9yZWQ/ICovCj4gKwlpZiAocmVxLT5zdGF0dXMgfHwgdGVzdF9i aXQoSUdOT1JFX0JVTEtfT1VULCAmZnNnLT5hdG9taWNfYml0ZmxhZ3MpKQo+ICsJCXJldHVybiAt RUlOVkFMOwo+ICsKPiArCS8qIElzIHRoZSBDQlcgdmFsaWQ/ICovCj4gKwlpZiAocmVxLT5hY3R1 YWwgIT0gVVNfQlVMS19DQl9XUkFQX0xFTiB8fAo+ICsJCQljYnctPlNpZ25hdHVyZSAhPSBjcHVf dG9fbGUzMigKPiArCQkJCVVTX0JVTEtfQ0JfU0lHTikpIHsKPiArCQlEQkcoZnNnLCAiaW52YWxp ZCBDQlc6IGxlbiAldSBzaWcgMHgleFxuIiwKPiArCQkJCXJlcS0+YWN0dWFsLAo+ICsJCQkJbGUz Ml90b19jcHUoY2J3LT5TaWduYXR1cmUpKTsKPiArCj4gKwkJLyogVGhlIEJ1bGstb25seSBzcGVj IHNheXMgd2UgTVVTVCBzdGFsbCB0aGUgSU4gZW5kcG9pbnQKPiArCQkgKiAoNi42LjEpLCBzbyBp dCdzIHVuYXZvaWRhYmxlLiAgSXQgYWxzbyBzYXlzIHdlIG11c3QKPiArCQkgKiByZXRhaW4gdGhp cyBzdGF0ZSB1bnRpbCB0aGUgbmV4dCByZXNldCwgYnV0IHRoZXJlJ3MKPiArCQkgKiBubyB3YXkg dG8gdGVsbCB0aGUgY29udHJvbGxlciBkcml2ZXIgaXQgc2hvdWxkIGlnbm9yZQo+ICsJCSAqIENs ZWFyLUZlYXR1cmUoSEFMVCkgcmVxdWVzdHMuCj4gKwkJICoKPiArCQkgKiBXZSBhcmVuJ3QgcmVx dWlyZWQgdG8gaGFsdCB0aGUgT1VUIGVuZHBvaW50OyBpbnN0ZWFkCj4gKwkJICogd2UgY2FuIHNp bXBseSBhY2NlcHQgYW5kIGRpc2NhcmQgYW55IGRhdGEgcmVjZWl2ZWQKPiArCQkgKiB1bnRpbCB0 aGUgbmV4dCByZXNldC4gKi8KPiArCQl3ZWRnZV9idWxrX2luX2VuZHBvaW50KGZzZyk7Cj4gKwkJ c2V0X2JpdChJR05PUkVfQlVMS19PVVQsICZmc2ctPmF0b21pY19iaXRmbGFncyk7Cj4gKwkJcmV0 dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJLyogSXMgdGhlIENCVyBtZWFuaW5nZnVsPyAqLwo+ ICsJaWYgKGNidy0+THVuID49IEZTR19NQVhfTFVOUyB8fCBjYnctPkZsYWdzICYgflVTX0JVTEtf RkxBR19JTiB8fAo+ICsJCQljYnctPkxlbmd0aCA8PSAwIHx8IGNidy0+TGVuZ3RoID4gTUFYX0NP TU1BTkRfU0laRSkgewo+ICsJCURCRyhmc2csICJub24tbWVhbmluZ2Z1bCBDQlc6IGx1biA9ICV1 LCBmbGFncyA9IDB4JXgsICIKPiArCQkJCSJjbWRsZW4gJXVcbiIsCj4gKwkJCQljYnctPkx1biwg Y2J3LT5GbGFncywgY2J3LT5MZW5ndGgpOwo+ICsKPiArCQkvKiBXZSBjYW4gZG8gYW55dGhpbmcg d2Ugd2FudCBoZXJlLCBzbyBsZXQncyBzdGFsbCB0aGUKPiArCQkgKiBidWxrIHBpcGVzIGlmIHdl IGFyZSBhbGxvd2VkIHRvLiAqLwo+ICsJCWlmIChjb21tb24tPmNhbl9zdGFsbCkgewo+ICsJCQlm c2dfc2V0X2hhbHQoZnNnLCBmc2ctPmJ1bGtfb3V0KTsKPiArCQkJaGFsdF9idWxrX2luX2VuZHBv aW50KGZzZyk7Cj4gKwkJfQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCS8qIFNh dmUgdGhlIGNvbW1hbmQgZm9yIGxhdGVyICovCj4gKwljb21tb24tPmNtbmRfc2l6ZSA9IGNidy0+ TGVuZ3RoOwo+ICsJbWVtY3B5KGNvbW1vbi0+Y21uZCwgY2J3LT5DREIsIGNvbW1vbi0+Y21uZF9z aXplKTsKPiArCWlmIChjYnctPkZsYWdzICYgVVNfQlVMS19GTEFHX0lOKQo+ICsJCWNvbW1vbi0+ ZGF0YV9kaXIgPSBEQVRBX0RJUl9UT19IT1NUOwo+ICsJZWxzZQo+ICsJCWNvbW1vbi0+ZGF0YV9k aXIgPSBEQVRBX0RJUl9GUk9NX0hPU1Q7Cj4gKwljb21tb24tPmRhdGFfc2l6ZSA9IGxlMzJfdG9f Y3B1KGNidy0+RGF0YVRyYW5zZmVyTGVuZ3RoKTsKPiArCWlmIChjb21tb24tPmRhdGFfc2l6ZSA9 PSAwKQo+ICsJCWNvbW1vbi0+ZGF0YV9kaXIgPSBEQVRBX0RJUl9OT05FOwo+ICsJY29tbW9uLT5s dW4gPSBjYnctPkx1bjsKPiArCWNvbW1vbi0+dGFnID0gY2J3LT5UYWc7Cj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArCj4gK3N0YXRpYyBpbnQgZ2V0X25leHRfY29tbWFuZChzdHJ1Y3QgZnNnX2Nv bW1vbiAqY29tbW9uKQo+ICt7Cj4gKwlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmg7Cj4gKwlpbnQJCQly YyA9IDA7Cj4gKwo+ICsJLyogV2FpdCBmb3IgdGhlIG5leHQgYnVmZmVyIHRvIGJlY29tZSBhdmFp bGFibGUgKi8KPiArCWJoID0gY29tbW9uLT5uZXh0X2J1ZmZoZF90b19maWxsOwo+ICsJd2hpbGUg KGJoLT5zdGF0ZSAhPSBCVUZfU1RBVEVfRU1QVFkpIHsKPiArCQlyYyA9IHNsZWVwX3RocmVhZChj b21tb24pOwo+ICsJCWlmIChyYykKPiArCQkJcmV0dXJuIHJjOwo+ICsJfQo+ICsKPiArCS8qIFF1 ZXVlIGEgcmVxdWVzdCB0byByZWFkIGEgQnVsay1vbmx5IENCVyAqLwo+ICsJc2V0X2J1bGtfb3V0 X3JlcV9sZW5ndGgoY29tbW9uLCBiaCwgVVNfQlVMS19DQl9XUkFQX0xFTik7Cj4gKwliaC0+b3V0 cmVxLT5zaG9ydF9ub3Rfb2sgPSAxOwo+ICsJU1RBUlRfVFJBTlNGRVJfT1IoY29tbW9uLCBidWxr X291dCwgYmgtPm91dHJlcSwKPiArCQkJICAmYmgtPm91dHJlcV9idXN5LCAmYmgtPnN0YXRlKQo+ ICsJCS8qIERvbid0IGtub3cgd2hhdCB0byBkbyBpZiBjb21tb24tPmZzZyBpcyBOVUxMICovCj4g KwkJcmV0dXJuIC1FSU87Cj4gKwo+ICsJLyogV2Ugd2lsbCBkcmFpbiB0aGUgYnVmZmVyIGluIHNv ZnR3YXJlLCB3aGljaCBtZWFucyB3ZQo+ICsJICogY2FuIHJldXNlIGl0IGZvciB0aGUgbmV4dCBm aWxsaW5nLiAgTm8gbmVlZCB0byBhZHZhbmNlCj4gKwkgKiBuZXh0X2J1ZmZoZF90b19maWxsLiAq Lwo+ICsKPiArCS8qIFdhaXQgZm9yIHRoZSBDQlcgdG8gYXJyaXZlICovCj4gKwl3aGlsZSAoYmgt PnN0YXRlICE9IEJVRl9TVEFURV9GVUxMKSB7Cj4gKwkJcmMgPSBzbGVlcF90aHJlYWQoY29tbW9u KTsKPiArCQlpZiAocmMpCj4gKwkJCXJldHVybiByYzsKPiArCX0KPiArCj4gKwlyYyA9IGZzZ19p c19zZXQoY29tbW9uKSA/IHJlY2VpdmVkX2Nidyhjb21tb24tPmZzZywgYmgpIDogLUVJTzsKPiAr CWJoLT5zdGF0ZSA9IEJVRl9TVEFURV9FTVBUWTsKPiArCj4gKwlyZXR1cm4gcmM7Cj4gK30KPiAr Cj4gKwo+ICsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwo+ICsKPiArc3RhdGljIGludCBlbmFibGVfZW5k cG9pbnQoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbiwgc3RydWN0IHVzYl9lcCAqZXApCj4gK3sK PiArCWludAlyYzsKPiArCj4gKwllcC0+ZHJpdmVyX2RhdGEgPSBjb21tb247Cj4gKwlyYyA9IHVz Yl9lcF9lbmFibGUoZXApOwo+ICsJaWYgKHJjKQo+ICsJCUVSUk9SKGNvbW1vbiwgImNhbid0IGVu YWJsZSAlcywgcmVzdWx0ICVkXG4iLCBlcC0+bmFtZSwgcmMpOwo+ICsJcmV0dXJuIHJjOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IGFsbG9jX3JlcXVlc3Qoc3RydWN0IGZzZ19jb21tb24gKmNvbW1v biwgc3RydWN0IHVzYl9lcCAqZXAsCj4gKwkJc3RydWN0IHVzYl9yZXF1ZXN0ICoqcHJlcSkKPiAr ewo+ICsJKnByZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdChlcCk7Cj4gKwlpZiAoKnByZXEpCj4g KwkJcmV0dXJuIDA7Cj4gKwlFUlJPUihjb21tb24sICJjYW4ndCBhbGxvY2F0ZSByZXF1ZXN0IGZv ciAlc1xuIiwgZXAtPm5hbWUpOwo+ICsJcmV0dXJuIC1FTk9NRU07Cj4gK30KPiArCj4gKy8qIFJl c2V0IGludGVyZmFjZSBzZXR0aW5nIGFuZCByZS1pbml0IGVuZHBvaW50IHN0YXRlICh0b2dnbGUg ZXRjKS4gKi8KPiArc3RhdGljIGludCBkb19zZXRfaW50ZXJmYWNlKHN0cnVjdCBmc2dfY29tbW9u ICpjb21tb24sIHN0cnVjdCBmc2dfZGV2ICpuZXdfZnNnKQo+ICt7Cj4gKwlzdHJ1Y3QgZnNnX2Rl diAqZnNnOwo+ICsJaW50IGksIHJjID0gMDsKPiArCj4gKwlpZiAoY29tbW9uLT5ydW5uaW5nKQo+ ICsJCURCRyhjb21tb24sICJyZXNldCBpbnRlcmZhY2VcbiIpOwo+ICsKPiArcmVzZXQ6Cj4gKwkv KiBEZWFsbG9jYXRlIHRoZSByZXF1ZXN0cyAqLwo+ICsJaWYgKGNvbW1vbi0+ZnNnKSB7Cj4gKwkJ ZnNnID0gY29tbW9uLT5mc2c7Cj4gKwo+ICsJCWZvciAoaSA9IDA7IGkgPCBGU0dfTlVNX0JVRkZF UlM7ICsraSkgewo+ICsJCQlzdHJ1Y3QgZnNnX2J1ZmZoZCAqYmggPSAmY29tbW9uLT5idWZmaGRz W2ldOwo+ICsKPiArCQkJaWYgKGJoLT5pbnJlcSkgewo+ICsJCQkJdXNiX2VwX2ZyZWVfcmVxdWVz dChmc2ctPmJ1bGtfaW4sIGJoLT5pbnJlcSk7Cj4gKwkJCQliaC0+aW5yZXEgPSBOVUxMOwo+ICsJ CQl9Cj4gKwkJCWlmIChiaC0+b3V0cmVxKSB7Cj4gKwkJCQl1c2JfZXBfZnJlZV9yZXF1ZXN0KGZz Zy0+YnVsa19vdXQsIGJoLT5vdXRyZXEpOwo+ICsJCQkJYmgtPm91dHJlcSA9IE5VTEw7Cj4gKwkJ CX0KPiArCQl9Cj4gKwo+ICsJCS8qIERpc2FibGUgdGhlIGVuZHBvaW50cyAqLwo+ICsJCWlmIChm c2ctPmJ1bGtfaW5fZW5hYmxlZCkgewo+ICsJCQl1c2JfZXBfZGlzYWJsZShmc2ctPmJ1bGtfaW4p Owo+ICsJCQlmc2ctPmJ1bGtfaW5fZW5hYmxlZCA9IDA7Cj4gKwkJfQo+ICsJCWlmIChmc2ctPmJ1 bGtfb3V0X2VuYWJsZWQpIHsKPiArCQkJdXNiX2VwX2Rpc2FibGUoZnNnLT5idWxrX291dCk7Cj4g KwkJCWZzZy0+YnVsa19vdXRfZW5hYmxlZCA9IDA7Cj4gKwkJfQo+ICsKPiArCQljb21tb24tPmZz ZyA9IE5VTEw7Cj4gKwkJd2FrZV91cCgmY29tbW9uLT5mc2dfd2FpdCk7Cj4gKwl9Cj4gKwo+ICsJ Y29tbW9uLT5ydW5uaW5nID0gMDsKPiArCWlmICghbmV3X2ZzZyB8fCByYykKPiArCQlyZXR1cm4g cmM7Cj4gKwo+ICsJY29tbW9uLT5mc2cgPSBuZXdfZnNnOwo+ICsJZnNnID0gY29tbW9uLT5mc2c7 Cj4gKwo+ICsJLyogRW5hYmxlIHRoZSBlbmRwb2ludHMgKi8KPiArCWZzZy0+YnVsa19pbi0+ZGVz YyA9IGZzZ19lcF9kZXNjKGNvbW1vbi0+Z2FkZ2V0LAo+ICsJCQkJCSAmZnNnX2ZzX2J1bGtfaW5f ZGVzYywgJmZzZ19oc19idWxrX2luX2Rlc2MpOwo+ICsJcmMgPSBlbmFibGVfZW5kcG9pbnQoY29t bW9uLCBmc2ctPmJ1bGtfaW4pOwo+ICsJaWYgKHJjKQo+ICsJCWdvdG8gcmVzZXQ7Cj4gKwlmc2ct PmJ1bGtfaW5fZW5hYmxlZCA9IDE7Cj4gKwo+ICsJZnNnLT5idWxrX291dC0+ZGVzYyA9IGZzZ19l cF9kZXNjKGNvbW1vbi0+Z2FkZ2V0LAo+ICsJCQkJCSAgJmZzZ19mc19idWxrX291dF9kZXNjLCAm ZnNnX2hzX2J1bGtfb3V0X2Rlc2MpOwo+ICsJcmMgPSBlbmFibGVfZW5kcG9pbnQoY29tbW9uLCBm c2ctPmJ1bGtfb3V0KTsKPiArCWlmIChyYykKPiArCQlnb3RvIHJlc2V0Owo+ICsJZnNnLT5idWxr X291dF9lbmFibGVkID0gMTsKPiArCWNvbW1vbi0+YnVsa19vdXRfbWF4cGFja2V0ID0gNTEyOwo+ ICsJY2xlYXJfYml0KElHTk9SRV9CVUxLX09VVCwgJmZzZy0+YXRvbWljX2JpdGZsYWdzKTsKPiAr Cj4gKwkvKiBBbGxvY2F0ZSB0aGUgcmVxdWVzdHMgKi8KPiArCWZvciAoaSA9IDA7IGkgPCBGU0df TlVNX0JVRkZFUlM7ICsraSkgewo+ICsJCXN0cnVjdCBmc2dfYnVmZmhkCSpiaCA9ICZjb21tb24t PmJ1ZmZoZHNbaV07Cj4gKwo+ICsJCXJjID0gYWxsb2NfcmVxdWVzdChjb21tb24sIGZzZy0+YnVs a19pbiwgJmJoLT5pbnJlcSk7Cj4gKwkJaWYgKHJjKQo+ICsJCQlnb3RvIHJlc2V0Owo+ICsJCXJj ID0gYWxsb2NfcmVxdWVzdChjb21tb24sIGZzZy0+YnVsa19vdXQsICZiaC0+b3V0cmVxKTsKPiAr CQlpZiAocmMpCj4gKwkJCWdvdG8gcmVzZXQ7Cj4gKwkJYmgtPmlucmVxLT5idWYgPSBiaC0+b3V0 cmVxLT5idWYgPSBiaC0+YnVmOwo+ICsJCWJoLT5pbnJlcS0+Y29udGV4dCA9IGJoLT5vdXRyZXEt PmNvbnRleHQgPSBiaDsKPiArCQliaC0+aW5yZXEtPmNvbXBsZXRlID0gYnVsa19pbl9jb21wbGV0 ZTsKPiArCQliaC0+b3V0cmVxLT5jb21wbGV0ZSA9IGJ1bGtfb3V0X2NvbXBsZXRlOwo+ICsJfQo+ ICsKPiArCWNvbW1vbi0+cnVubmluZyA9IDE7Cj4gKwo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ ICsKPiArLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBBTFQgQ09ORklHUyAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCj4gKwo+ICsKPiArc3RhdGljIGludCBmc2dfc2V0X2Fs dChzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmLCB1bnNpZ25lZCBpbnRmLCB1bnNpZ25lZCBhbHQpCj4g K3sKPiArCXN0cnVjdCBmc2dfZGV2ICpmc2cgPSBmc2dfZnJvbV9mdW5jKGYpOwo+ICsJZnNnLT5j b21tb24tPm5ld19mc2cgPSBmc2c7Cj4gKwlyYWlzZV9leGNlcHRpb24oZnNnLT5jb21tb24sIEZT R19TVEFURV9DT05GSUdfQ0hBTkdFKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBmc2dfZGlzYWJsZShzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQo+ICt7Cj4gKwlzdHJ1Y3Qg ZnNnX2RldiAqZnNnID0gZnNnX2Zyb21fZnVuYyhmKTsKPiArCWZzZy0+Y29tbW9uLT5uZXdfZnNn ID0gTlVMTDsKPiArCXJhaXNlX2V4Y2VwdGlvbihmc2ctPmNvbW1vbiwgRlNHX1NUQVRFX0NPTkZJ R19DSEFOR0UpOwo+ICt9Cj4gKwo+ICsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwo+ICsKPiArc3RhdGlj IHZvaWQgaGFuZGxlX2V4Y2VwdGlvbihzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uKQo+ICt7Cj4g KwlpbnQJCQlpOwo+ICsJc3RydWN0IGZzZ19idWZmaGQJKmJoOwo+ICsJZW51bSBmc2dfc3RhdGUJ CW9sZF9zdGF0ZTsKPiArCXN0cnVjdCBmc2dfbHVuCQkqY3VybHVuOwo+ICsJdW5zaWduZWQgaW50 CQlleGNlcHRpb25fcmVxX3RhZzsKPiArCj4gKwkvKiBDYW5jZWwgYWxsIHRoZSBwZW5kaW5nIHRy YW5zZmVycyAqLwo+ICsJaWYgKGNvbW1vbi0+ZnNnKSB7Cj4gKwkJZm9yIChpID0gMDsgaSA8IEZT R19OVU1fQlVGRkVSUzsgKytpKSB7Cj4gKwkJCWJoID0gJmNvbW1vbi0+YnVmZmhkc1tpXTsKPiAr CQkJaWYgKGJoLT5pbnJlcV9idXN5KQo+ICsJCQkJdXNiX2VwX2RlcXVldWUoY29tbW9uLT5mc2ct PmJ1bGtfaW4sIGJoLT5pbnJlcSk7Cj4gKwkJCWlmIChiaC0+b3V0cmVxX2J1c3kpCj4gKwkJCQl1 c2JfZXBfZGVxdWV1ZShjb21tb24tPmZzZy0+YnVsa19vdXQsCj4gKwkJCQkJICAgICAgIGJoLT5v dXRyZXEpOwo+ICsJCX0KPiArCj4gKwkJLyogV2FpdCB1bnRpbCBldmVyeXRoaW5nIGlzIGlkbGUg Ki8KPiArCQlmb3IgKDs7KSB7Cj4gKwkJCWludCBudW1fYWN0aXZlID0gMDsKPiArCQkJZm9yIChp ID0gMDsgaSA8IEZTR19OVU1fQlVGRkVSUzsgKytpKSB7Cj4gKwkJCQliaCA9ICZjb21tb24tPmJ1 ZmZoZHNbaV07Cj4gKwkJCQludW1fYWN0aXZlICs9IGJoLT5pbnJlcV9idXN5ICsgYmgtPm91dHJl cV9idXN5Owo+ICsJCQl9Cj4gKwkJCWlmIChudW1fYWN0aXZlID09IDApCj4gKwkJCQlicmVhazsK PiArCQkJaWYgKHNsZWVwX3RocmVhZChjb21tb24pKQo+ICsJCQkJcmV0dXJuOwo+ICsJCX0KPiAr Cj4gKwkJLyogQ2xlYXIgb3V0IHRoZSBjb250cm9sbGVyJ3MgZmlmb3MgKi8KPiArCQlpZiAoY29t bW9uLT5mc2ctPmJ1bGtfaW5fZW5hYmxlZCkKPiArCQkJdXNiX2VwX2ZpZm9fZmx1c2goY29tbW9u LT5mc2ctPmJ1bGtfaW4pOwo+ICsJCWlmIChjb21tb24tPmZzZy0+YnVsa19vdXRfZW5hYmxlZCkK PiArCQkJdXNiX2VwX2ZpZm9fZmx1c2goY29tbW9uLT5mc2ctPmJ1bGtfb3V0KTsKPiArCX0KPiAr Cj4gKwkvKiBSZXNldCB0aGUgSS9PIGJ1ZmZlciBzdGF0ZXMgYW5kIHBvaW50ZXJzLCB0aGUgU0NT SQo+ICsJICogc3RhdGUsIGFuZCB0aGUgZXhjZXB0aW9uLiAgVGhlbiBpbnZva2UgdGhlIGhhbmRs ZXIuICovCj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEZTR19OVU1fQlVGRkVSUzsgKytpKSB7Cj4g KwkJYmggPSAmY29tbW9uLT5idWZmaGRzW2ldOwo+ICsJCWJoLT5zdGF0ZSA9IEJVRl9TVEFURV9F TVBUWTsKPiArCX0KPiArCWNvbW1vbi0+bmV4dF9idWZmaGRfdG9fZmlsbCA9ICZjb21tb24tPmJ1 ZmZoZHNbMF07Cj4gKwljb21tb24tPm5leHRfYnVmZmhkX3RvX2RyYWluID0gJmNvbW1vbi0+YnVm Zmhkc1swXTsKPiArCWV4Y2VwdGlvbl9yZXFfdGFnID0gY29tbW9uLT5leGNlcHRpb25fcmVxX3Rh ZzsKPiArCW9sZF9zdGF0ZSA9IGNvbW1vbi0+c3RhdGU7Cj4gKwo+ICsJcmVwb3J0X2V4Y2VwdGlv bigiaGFuZGxpbmciLCBvbGRfc3RhdGUpOwo+ICsKPiArCWlmIChvbGRfc3RhdGUgPT0gRlNHX1NU QVRFX0FCT1JUX0JVTEtfT1VUKQo+ICsJCWNvbW1vbi0+c3RhdGUgPSBGU0dfU1RBVEVfU1RBVFVT X1BIQVNFOwo+ICsJZWxzZSB7Cj4gKwkJZm9yIChpID0gMDsgaSA8IGNvbW1vbi0+bmx1bnM7ICsr aSkgewo+ICsJCQljdXJsdW4gPSAmY29tbW9uLT5sdW5zW2ldOwo+ICsJCQljdXJsdW4tPnNlbnNl X2RhdGEgPSBTU19OT19TRU5TRTsKPiArCQkJY3VybHVuLT5pbmZvX3ZhbGlkID0gMDsKPiArCQl9 Cj4gKwkJY29tbW9uLT5zdGF0ZSA9IEZTR19TVEFURV9JRExFOwo+ICsJfQo+ICsKPiArCS8qIENh cnJ5IG91dCBhbnkgZXh0cmEgYWN0aW9ucyByZXF1aXJlZCBmb3IgdGhlIGV4Y2VwdGlvbiAqLwo+ ICsJc3dpdGNoIChvbGRfc3RhdGUpIHsKPiArCWNhc2UgRlNHX1NUQVRFX0FCT1JUX0JVTEtfT1VU Ogo+ICsJCXNlbmRfc3RhdHVzKGNvbW1vbik7Cj4gKwo+ICsJCWlmIChjb21tb24tPnN0YXRlID09 IEZTR19TVEFURV9TVEFUVVNfUEhBU0UpCj4gKwkJCWNvbW1vbi0+c3RhdGUgPSBGU0dfU1RBVEVf SURMRTsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIEZTR19TVEFURV9SRVNFVDoKPiArCQkvKiBJ biBjYXNlIHdlIHdlcmUgZm9yY2VkIGFnYWluc3Qgb3VyIHdpbGwgdG8gaGFsdCBhCj4gKwkJICog YnVsayBlbmRwb2ludCwgY2xlYXIgdGhlIGhhbHQgbm93LiAgKFRoZSBTdXBlckggVURDCj4gKwkJ ICogcmVxdWlyZXMgdGhpcy4pICovCj4gKwkJaWYgKCFmc2dfaXNfc2V0KGNvbW1vbikpCj4gKwkJ CWJyZWFrOwo+ICsJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSUdOT1JFX0JVTEtfT1VULAo+ICsJ CQkJICAgICAgICZjb21tb24tPmZzZy0+YXRvbWljX2JpdGZsYWdzKSkKPiArCQkJdXNiX2VwX2Ns ZWFyX2hhbHQoY29tbW9uLT5mc2ctPmJ1bGtfaW4pOwo+ICsKPiArCQlpZiAoY29tbW9uLT5lcDBf cmVxX3RhZyA9PSBleGNlcHRpb25fcmVxX3RhZykKPiArCQkJZXAwX3F1ZXVlKGNvbW1vbik7CS8q IENvbXBsZXRlIHRoZSBzdGF0dXMgc3RhZ2UgKi8KPiArCj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2Fz ZSBGU0dfU1RBVEVfQ09ORklHX0NIQU5HRToKPiArCQlkb19zZXRfaW50ZXJmYWNlKGNvbW1vbiwg Y29tbW9uLT5uZXdfZnNnKTsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIEZTR19TVEFURV9FWElU Ogo+ICsJY2FzZSBGU0dfU1RBVEVfVEVSTUlOQVRFRDoKPiArCQlkb19zZXRfaW50ZXJmYWNlKGNv bW1vbiwgTlVMTCk7CQkvKiBGcmVlIHJlc291cmNlcyAqLwo+ICsJCWNvbW1vbi0+c3RhdGUgPSBG U0dfU1RBVEVfVEVSTUlOQVRFRDsJLyogU3RvcCB0aGUgdGhyZWFkICovCj4gKwkJYnJlYWs7Cj4g Kwo+ICsJY2FzZSBGU0dfU1RBVEVfSU5URVJGQUNFX0NIQU5HRToKPiArCWNhc2UgRlNHX1NUQVRF X0RJU0NPTk5FQ1Q6Cj4gKwljYXNlIEZTR19TVEFURV9DT01NQU5EX1BIQVNFOgo+ICsJY2FzZSBG U0dfU1RBVEVfREFUQV9QSEFTRToKPiArCWNhc2UgRlNHX1NUQVRFX1NUQVRVU19QSEFTRToKPiAr CWNhc2UgRlNHX1NUQVRFX0lETEU6Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gK30KPiArCj4gKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSovCj4gKwo+ICtzdGF0aWMgaW50IGZzZ19tYWluX3RocmVhZCh2b2lkICpj b21tb25fKQo+ICt7Cj4gKwlzdHJ1Y3QgZnNnX2NvbW1vbgkqY29tbW9uID0gY29tbW9uXzsKPiAr CWludCByZXQgPSAwOwo+ICsKPiArCS8qIFRoZSBtYWluIGxvb3AgKi8KPiArCXdoaWxlIChjb21t b24tPnN0YXRlICE9IEZTR19TVEFURV9URVJNSU5BVEVEKSB7Cj4gKwkJaWYgKGV4Y2VwdGlvbl9p bl9wcm9ncmVzcyhjb21tb24pKSB7Cj4gKwkJCWhhbmRsZV9leGNlcHRpb24oY29tbW9uKTsKPiAr CQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQlpZiAoIWNvbW1vbi0+cnVubmluZykgewo+ICsJ CQlyZXQgPSBzbGVlcF90aHJlYWQoY29tbW9uKTsKPiArCQkJaWYgKHJldCkKPiArCQkJCWJyZWFr Owo+ICsJCQljb250aW51ZTsKPiArCQl9Cj4gKwo+ICsJCXJldCA9IGdldF9uZXh0X2NvbW1hbmQo Y29tbW9uKTsKPiArCQlpZiAocmV0KQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJaWYgKCFleGNl cHRpb25faW5fcHJvZ3Jlc3MoY29tbW9uKSkKPiArCQkJY29tbW9uLT5zdGF0ZSA9IEZTR19TVEFU RV9EQVRBX1BIQVNFOwo+ICsKPiArCQlpZiAoZG9fc2NzaV9jb21tYW5kKGNvbW1vbikgfHwgZmlu aXNoX3JlcGx5KGNvbW1vbikpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlpZiAoIWV4Y2VwdGlv bl9pbl9wcm9ncmVzcyhjb21tb24pKQo+ICsJCQljb21tb24tPnN0YXRlID0gRlNHX1NUQVRFX1NU QVRVU19QSEFTRTsKPiArCj4gKwkJaWYgKHNlbmRfc3RhdHVzKGNvbW1vbikpCj4gKwkJCWNvbnRp bnVlOwo+ICsKPiArCQlpZiAoIWV4Y2VwdGlvbl9pbl9wcm9ncmVzcyhjb21tb24pKQo+ICsJCQlj b21tb24tPnN0YXRlID0gRlNHX1NUQVRFX0lETEU7Cj4gKwl9Cj4gKwo+ICsJaWYgKHJldCAmJiBy ZXQgIT0gLUVSRVNUQVJUU1lTKQo+ICsJCXByX3dhcm4oIiVzOiBlcnJvciAlcGVcbiIsIF9fZnVu Y19fLCBFUlJfUFRSKHJldCkpOwo+ICsKPiArCWNvbXBsZXRlX2FuZF9leGl0KCZjb21tb24tPnRo cmVhZF9ub3RpZmllciwgMCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGZzZ19jb21tb25fcmVs ZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZnNnX2NvbW1vbiAq ZnNnX2NvbW1vbl9zZXR1cCh2b2lkKQo+ICt7Cj4gKwlzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9u Owo+ICsKPiArCS8qIEFsbG9jYXRlPyAqLwo+ICsJY29tbW9uID0gY2FsbG9jKHNpemVvZigqY29t bW9uKSwgMSk7Cj4gKwlpZiAoIWNvbW1vbikKPiArCQlyZXR1cm4gTlVMTDsKPiArCWNvbW1vbi0+ ZnJlZV9zdG9yYWdlX29uX3JlbGVhc2UgPSAxOwo+ICsKPiArCWluaXRfY29tcGxldGlvbigmY29t bW9uLT50aHJlYWRfbm90aWZpZXIpOwo+ICsKPiArCWNvbW1vbi0+b3BzID0gTlVMTDsKPiArCWNv bW1vbi0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKPiArCj4gKwlyZXR1cm4gY29tbW9uOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGZzZ19jb21tb25faW5pdChzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9u LAo+ICsJCQkgICBzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCj4gK3sKPiArCXN0cnVj dCB1c2JfZ2FkZ2V0ICpnYWRnZXQgPSBjZGV2LT5nYWRnZXQ7Cj4gKwlzdHJ1Y3QgZmlsZV9saXN0 X2VudHJ5ICpmZW50cnk7Cj4gKwlzdHJ1Y3QgZnNnX2J1ZmZoZCAqYmg7Cj4gKwlzdHJ1Y3QgZnNn X2x1biAqY3VybHVuOwo+ICsJaW50IG5sdW5zLCBpLCBmZCA9IC0xLCByYzsKPiArCj4gKwl1bXNf Y291bnQgPSAwOwo+ICsKPiArCWNvbW1vbi0+Z2FkZ2V0ID0gZ2FkZ2V0Owo+ICsJY29tbW9uLT5l cDAgPSBnYWRnZXQtPmVwMDsKPiArCWNvbW1vbi0+ZXAwcmVxID0gY2Rldi0+cmVxOwo+ICsKPiAr CWZpbGVfbGlzdF9mb3JfZWFjaF9lbnRyeSh1bXNfZmlsZXMsIGZlbnRyeSkgewo+ICsJCXVuc2ln bmVkIGZsYWdzID0gT19SRFdSOwo+ICsJCXN0cnVjdCBzdGF0IHN0Owo+ICsKPiArCQlpZiAoZmVu dHJ5LT5mbGFncykgewo+ICsJCQlwcl9lcnIoImZsYWdzIG5vdCBzdXBwb3J0ZWRcbiIpOwo+ICsJ CQlyZXR1cm4gLUVOT1NZUzsKPiArCQl9Cj4gKwo+ICsJCWZkID0gb3BlbihmZW50cnktPmZpbGVu YW1lLCBmbGFncyk7Cj4gKwkJaWYgKGZkIDwgMCkgewo+ICsJCQlwcl9lcnIoIm9wZW4oJyVzJykg ZmFpbGVkOiAlcGVcbiIsCj4gKwkJCSAgICAgICBmZW50cnktPmZpbGVuYW1lLCBFUlJfUFRSKGZk KSk7Cj4gKwkJCXJldHVybiBmZDsKPiArCQl9Cj4gKwo+ICsJCXJjID0gZnN0YXQoZmQsICZzdCk7 Cj4gKwkJaWYgKHJjIDwgMCkgewo+ICsJCQlwcl9lcnIoInN0YXQoJyVzJykgZmFpbGVkOiAlcGVc biIsCj4gKwkJCSAgICAgICBmZW50cnktPmZpbGVuYW1lLCBFUlJfUFRSKHJjKSk7Cj4gKwkJCWdv dG8gY2xvc2U7Cj4gKwkJfQo+ICsKPiArCQlpZiAoc3Quc3Rfc2l6ZSAlIFNFQ1RPUl9TSVpFICE9 IDApIHsKPiArCQkJcHJfZXJyKCJleHBvcnRpbmcgJyVzJyBmYWlsZWQ6IGludmFsaWQgYmxvY2sg c2l6ZVxuIiwKPiArCQkJICAgICAgIGZlbnRyeS0+ZmlsZW5hbWUpOwo+ICsJCQlnb3RvIGNsb3Nl Owo+ICsJCX0KPiArCj4gKwkJdW1zW3Vtc19jb3VudF0uZmQgPSBmZDsKPiArCQl1bXNbdW1zX2Nv dW50XS5udW1fc2VjdG9ycyA9IHN0LnN0X3NpemUgLyBTRUNUT1JfU0laRTsKPiArCj4gKwkJc3Ry bGNweSh1bXNbdW1zX2NvdW50XS5uYW1lLCBmZW50cnktPm5hbWUsIHNpemVvZih1bXNbdW1zX2Nv dW50XS5uYW1lKSk7Cj4gKwo+ICsJCURCRyhjb21tb24sICJMVU4gJWQsICVzIHNlY3Rvcl9jb3Vu dCAlI3hcbiIsCj4gKwkJCXVtc19jb3VudCwgZmVudHJ5LT5uYW1lLCB1bXNbdW1zX2NvdW50XS5u dW1fc2VjdG9ycyk7Cj4gKwo+ICsJCXVtc19jb3VudCsrOwo+ICsJfQo+ICsKPiArCS8qIEZpbmQg b3V0IGhvdyBtYW55IExVTnMgdGhlcmUgc2hvdWxkIGJlICovCj4gKwlubHVucyA9IHVtc19jb3Vu dDsKPiArCWlmIChubHVucyA8IDEgfHwgbmx1bnMgPiBGU0dfTUFYX0xVTlMpIHsKPiArCQlwcl93 YXJuKCJpbnZhbGlkIG51bWJlciBvZiBMVU5zOiAldVxuIiwgbmx1bnMpOwo+ICsJCXJjID0gLUVJ TlZBTDsKPiArCQlnb3RvIGNsb3NlOwo+ICsJfQo+ICsKPiArCS8qIE1heWJlIGFsbG9jYXRlIGRl dmljZS1nbG9iYWwgc3RyaW5nIElEcywgYW5kIHBhdGNoIGRlc2NyaXB0b3JzICovCj4gKwlpZiAo ZnNnX3N0cmluZ3NbRlNHX1NUUklOR19JTlRFUkZBQ0VdLmlkID09IDApIHsKPiArCQlyYyA9IHVz Yl9zdHJpbmdfaWQoY2Rldik7Cj4gKwkJaWYgKHVubGlrZWx5KHJjIDwgMCkpCj4gKwkJCWdvdG8g ZXJyb3JfcmVsZWFzZTsKPiArCQlmc2dfc3RyaW5nc1tGU0dfU1RSSU5HX0lOVEVSRkFDRV0uaWQg PSByYzsKPiArCQlmc2dfaW50Zl9kZXNjLmlJbnRlcmZhY2UgPSByYzsKPiArCX0KPiArCj4gKwkv KiBDcmVhdGUgdGhlIExVTnMsIG9wZW4gdGhlaXIgYmFja2luZyBmaWxlcywgYW5kIHJlZ2lzdGVy IHRoZQo+ICsJICogTFVOIGRldmljZXMgaW4gc3lzZnMuICovCj4gKwljdXJsdW4gPSBjYWxsb2Mo bmx1bnMsIHNpemVvZiAqY3VybHVuKTsKPiArCWlmICghY3VybHVuKSB7Cj4gKwkJcmMgPSAtRU5P TUVNOwo+ICsJCWdvdG8gZXJyb3JfcmVsZWFzZTsKPiArCX0KPiArCWNvbW1vbi0+bmx1bnMgPSBu bHVuczsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbmx1bnM7IGkrKykgewo+ICsJCWNvbW1vbi0+ bHVuc1tpXS5yZW1vdmFibGUgPSAxOwo+ICsKPiArCQlyYyA9IGZzZ19sdW5fb3BlbigmY29tbW9u LT5sdW5zW2ldLCB1bXNbaV0ubnVtX3NlY3RvcnMsICIiKTsKPiArCQlpZiAocmMpCj4gKwkJCWdv dG8gZXJyb3JfbHVuczsKPiArCX0KPiArCWNvbW1vbi0+bHVuID0gMDsKPiArCj4gKwkvKiBEYXRh IGJ1ZmZlcnMgY3ljbGljIGxpc3QgKi8KPiArCWJoID0gY29tbW9uLT5idWZmaGRzOwo+ICsKPiAr CWkgPSBGU0dfTlVNX0JVRkZFUlM7Cj4gKwlnb3RvIGJ1ZmZoZHNfZmlyc3RfaXQ7Cj4gKwlkbyB7 Cj4gKwkJYmgtPm5leHQgPSBiaCArIDE7Cj4gKwkJKytiaDsKPiArYnVmZmhkc19maXJzdF9pdDoK PiArCQliaC0+aW5yZXFfYnVzeSA9IDA7Cj4gKwkJYmgtPm91dHJlcV9idXN5ID0gMDsKPiArCQli aC0+YnVmID0gZG1hX2FsbG9jKEZTR19CVUZMRU4pOwo+ICsJCWlmICh1bmxpa2VseSghYmgtPmJ1 ZikpIHsKPiArCQkJcmMgPSAtRU5PTUVNOwo+ICsJCQlnb3RvIGVycm9yX3JlbGVhc2U7Cj4gKwkJ fQo+ICsJfSB3aGlsZSAoLS1pKTsKPiArCWJoLT5uZXh0ID0gY29tbW9uLT5idWZmaGRzOwo+ICsK PiArCXNucHJpbnRmKGNvbW1vbi0+aW5xdWlyeV9zdHJpbmcsIHNpemVvZiBjb21tb24tPmlucXVp cnlfc3RyaW5nLAo+ICsJCSAiJS04cyUtMTZzJTA0eCIsCj4gKwkJICJMaW51eCAgICIsCj4gKwkJ ICJGaWxlLVN0b3JlIEdhZGdldCIsCj4gKwkJIDB4ZmZmZik7Cj4gKwo+ICsJLyogU29tZSBwZXJp cGhlcmFsIGNvbnRyb2xsZXJzIGFyZSBrbm93biBub3QgdG8gYmUgYWJsZSB0bwo+ICsJICogaGFs dCBidWxrIGVuZHBvaW50cyBjb3JyZWN0bHkuICBJZiBvbmUgb2YgdGhlbSBpcyBwcmVzZW50LAo+ ICsJICogZGlzYWJsZSBzdGFsbHMuCj4gKwkgKi8KPiArCj4gKwkvKiBJbmZvcm1hdGlvbiAqLwo+ ICsJREJHKGNvbW1vbiwgRlNHX0RSSVZFUl9ERVNDICIsIHZlcnNpb246ICIgRlNHX0RSSVZFUl9W RVJTSU9OICJcbiIpOwo+ICsJREJHKGNvbW1vbiwgIk51bWJlciBvZiBMVU5zPSVkXG4iLCBjb21t b24tPm5sdW5zKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vycm9yX2x1bnM6Cj4gKwljb21t b24tPm5sdW5zID0gaSArIDE7Cj4gK2Vycm9yX3JlbGVhc2U6Cj4gKwljb21tb24tPnN0YXRlID0g RlNHX1NUQVRFX1RFUk1JTkFURUQ7CS8qIFRoZSB0aHJlYWQgaXMgZGVhZCAqLwo+ICsJLyogQ2Fs bCBmc2dfY29tbW9uX3JlbGVhc2UoKSBkaXJlY3RseSwgcmVmIG1pZ2h0IGJlIG5vdAo+ICsJICog aW5pdGlhbGlzZWQgKi8KPiArCWZzZ19jb21tb25fcmVsZWFzZSgmY29tbW9uLT5yZWYpOwo+ICtj bG9zZToKPiArCWNsb3NlKGZkKTsKPiArCXJldHVybiByYzsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgZnNnX2NvbW1vbl9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpCj4gK3sKPiArCXN0cnVjdCBm c2dfY29tbW9uICpjb21tb24gPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgZnNnX2NvbW1vbiwg cmVmKTsKPiArCXN0cnVjdCBmc2dfYnVmZmhkICpiaDsKPiArCXVuc2lnbmVkIGk7Cj4gKwo+ICsJ LyogSWYgdGhlIHRocmVhZCBpc24ndCBhbHJlYWR5IGRlYWQsIHRlbGwgaXQgdG8gZXhpdCBub3cg Ki8KPiArCWlmIChjb21tb24tPnN0YXRlICE9IEZTR19TVEFURV9URVJNSU5BVEVEKSB7Cj4gKwkJ cmFpc2VfZXhjZXB0aW9uKGNvbW1vbiwgRlNHX1NUQVRFX0VYSVQpOwo+ICsJCXdhaXRfZm9yX2Nv bXBsZXRpb25faW50ZXJydXB0aWJsZSgmY29tbW9uLT50aHJlYWRfbm90aWZpZXIpOwo+ICsJCWZy ZWVfa3RocmVhZF9zdHJ1Y3QodGhyZWFkX3Rhc2spOwo+ICsJfQo+ICsKPiArCWJoID0gY29tbW9u LT5idWZmaGRzOwo+ICsJaSA9IEZTR19OVU1fQlVGRkVSUzsKPiArCj4gKwlkbyB7Cj4gKwkJZG1h X2ZyZWUoYmgtPmJ1Zik7Cj4gKwl9IHdoaWxlICgrK2JoLCAtLWkpOwo+ICsKPiArCWlmIChjb21t b24tPmZyZWVfc3RvcmFnZV9vbl9yZWxlYXNlKQo+ICsJCWtmcmVlKGNvbW1vbik7Cj4gK30KPiAr Cj4gKwo+ICtzdGF0aWMgdm9pZCBmc2dfdW5iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAq Yywgc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKPiArewo+ICsJc3RydWN0IGZzZ19kZXYJCSpmc2cg PSBmc2dfZnJvbV9mdW5jKGYpOwo+ICsJc3RydWN0IGZzZ19jb21tb24JKmNvbW1vbiA9IGZzZy0+ Y29tbW9uOwo+ICsJaW50IGk7Cj4gKwo+ICsJREJHKGZzZywgInVuYmluZFxuIik7Cj4gKwo+ICsJ aWYgKGZzZy0+Y29tbW9uLT5mc2cgPT0gZnNnKSB7Cj4gKwkJZnNnLT5jb21tb24tPm5ld19mc2cg PSBOVUxMOwo+ICsJCWZzZy0+Y29tbW9uLT5zaHV0ZG93biA9IHRydWU7Cj4gKwkJcmFpc2VfZXhj ZXB0aW9uKGZzZy0+Y29tbW9uLCBGU0dfU1RBVEVfQ09ORklHX0NIQU5HRSk7Cj4gKwkJd2FpdF9l dmVudChjb21tb24tPmZzZ193YWl0LCBjb21tb24tPmZzZyAhPSBmc2cpOwo+ICsJfQo+ICsKPiAr CWZvciAoaSA9IDA7IGkgPCB1bXNfY291bnQ7IGkrKykKPiArCQljbG9zZSh1bXNbaV0uZmQpOwo+ ICsKPiArCXVzYl9mcmVlX2FsbF9kZXNjcmlwdG9ycygmZnNnLT5mdW5jdGlvbik7Cj4gKwo+ICsJ dW1zX2ZpbGVzID0gTlVMTDsKPiArfQo+ICsKPiArc3RhdGljIGludCBmc2dfYmluZChzdHJ1Y3Qg dXNiX2NvbmZpZ3VyYXRpb24gKmMsIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCj4gK3sKPiArCXN0 cnVjdCBmc2dfZGV2CQkqZnNnID0gZnNnX2Zyb21fZnVuYyhmKTsKPiArCXN0cnVjdCB1c2JfZ2Fk Z2V0CSpnYWRnZXQgPSBjLT5jZGV2LT5nYWRnZXQ7Cj4gKwlpbnQJCQlpID0gLUVJTlZBTDsKPiAr CXN0cnVjdCB1c2JfZXAJCSplcDsKPiArCXN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKipo c19mdW5jdGlvbiA9IE5VTEw7Cj4gKwlzdHJ1Y3QgZnNnX2NvbW1vbgkqY29tbW9uID0gZnNnLT5j b21tb247Cj4gKwo+ICsJaWYgKCF1bXNfZmlsZXMpIHsKPiArCQlzdHJ1Y3QgZl91bXNfb3B0cyAq b3B0cyA9IGNvbnRhaW5lcl9vZihmLT5maSwgc3RydWN0IGZfdW1zX29wdHMsIGZ1bmNfaW5zdCk7 Cj4gKwo+ICsJCXVtc19maWxlcyA9IG9wdHMtPmZpbGVzOwo+ICsJfQo+ICsKPiArCWZzZy0+Z2Fk Z2V0ID0gZ2FkZ2V0Owo+ICsKPiArCURCRyhmc2csICJiaW5kXG4iKTsKPiArCj4gKwlpID0gZnNn X2NvbW1vbl9pbml0KGNvbW1vbiwgYy0+Y2Rldik7Cj4gKwlpZiAoaSkKPiArCQlyZXR1cm4gaTsK PiArCj4gKwl0aHJlYWRfdGFzayA9IGt0aHJlYWRfcnVuKGZzZ19tYWluX3RocmVhZCwgY29tbW9u LCAiZmlsZS1zdG9yYWdlIik7Cj4gKwlpZiAoSVNfRVJSKHRocmVhZF90YXNrKSkKPiArCQlyZXR1 cm4gUFRSX0VSUih0aHJlYWRfdGFzayk7Cj4gKwo+ICsJLyogTmV3IGludGVyZmFjZSAqLwo+ICsJ aSA9IHVzYl9pbnRlcmZhY2VfaWQoYywgZik7Cj4gKwlpZiAoaSA8IDApCj4gKwkJcmV0dXJuIGk7 Cj4gKwlmc2dfaW50Zl9kZXNjLmJJbnRlcmZhY2VOdW1iZXIgPSBpOwo+ICsJZnNnLT5pbnRlcmZh Y2VfbnVtYmVyID0gaTsKPiArCj4gKwkvKiBGaW5kIGFsbCB0aGUgZW5kcG9pbnRzIHdlIHdpbGwg dXNlICovCj4gKwllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGdhZGdldCwgJmZzZ19mc19idWxrX2lu X2Rlc2MpOwo+ICsJaWYgKCFlcCkKPiArCQlnb3RvIGF1dG9jb25mX2ZhaWw7Cj4gKwllcC0+ZHJp dmVyX2RhdGEgPSBjb21tb247CS8qIGNsYWltIHRoZSBlbmRwb2ludCAqLwo+ICsJZnNnLT5idWxr X2luID0gZXA7Cj4gKwo+ICsJZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhnYWRnZXQsICZmc2dfZnNf YnVsa19vdXRfZGVzYyk7Cj4gKwlpZiAoIWVwKQo+ICsJCWdvdG8gYXV0b2NvbmZfZmFpbDsKPiAr CWVwLT5kcml2ZXJfZGF0YSA9IGNvbW1vbjsJLyogY2xhaW0gdGhlIGVuZHBvaW50ICovCj4gKwlm c2ctPmJ1bGtfb3V0ID0gZXA7Cj4gKwo+ICsJaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoZ2FkZ2V0 KSkgewo+ICsJCS8qIEFzc3VtZSBlbmRwb2ludCBhZGRyZXNzZXMgYXJlIHRoZSBzYW1lIGZvciBi b3RoIHNwZWVkcyAqLwo+ICsJCWZzZ19oc19idWxrX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9 Cj4gKwkJCWZzZ19mc19idWxrX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKPiArCQlmc2dfaHNf YnVsa19vdXRfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KPiArCQkJZnNnX2ZzX2J1bGtfb3V0X2Rl c2MuYkVuZHBvaW50QWRkcmVzczsKPiArCQloc19mdW5jdGlvbiA9IGZzZ19oc19mdW5jdGlvbjsK PiArCX0KPiArCj4gKwkvKiBDb3B5IGRlc2NyaXB0b3JzICovCj4gKwlyZXR1cm4gdXNiX2Fzc2ln bl9kZXNjcmlwdG9ycyhmLCBmc2dfZnNfZnVuY3Rpb24sIGhzX2Z1bmN0aW9uLCBOVUxMKTsKPiAr Cj4gK2F1dG9jb25mX2ZhaWw6Cj4gKwlFUlJPUihmc2csICJ1bmFibGUgdG8gYXV0b2NvbmZpZ3Vy ZSBhbGwgZW5kcG9pbnRzXG4iKTsKPiArCXJldHVybiAtRU5PVFNVUFA7Cj4gK30KPiArCj4gKwo+ ICsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEFERCBGVU5DVElPTiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCj4gKwo+ICtzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3Ry aW5ncyAqZnNnX3N0cmluZ3NfYXJyYXlbXSA9IHsKPiArCSZmc2dfc3RyaW5ndGFiLAo+ICsJTlVM TCwKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIGZzZ19mcmVlKHN0cnVjdCB1c2JfZnVuY3Rpb24g KmYpCj4gK3sKPiArCXN0cnVjdCBmc2dfZGV2ICpmc2c7Cj4gKwo+ICsJZnNnID0gY29udGFpbmVy X29mKGYsIHN0cnVjdCBmc2dfZGV2LCBmdW5jdGlvbik7Cj4gKwo+ICsJa2ZyZWUoZnNnKTsKPiAr fQo+ICsKPiArc3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZzZ19hbGxvYyhzdHJ1Y3QgdXNi X2Z1bmN0aW9uX2luc3RhbmNlICpmaSkKPiArewo+ICsJc3RydWN0IGZfdW1zX29wdHMgKm9wdHMg PSBmc2dfb3B0c19mcm9tX2Z1bmNfaW5zdChmaSk7Cj4gKwlzdHJ1Y3QgZnNnX2NvbW1vbiAqY29t bW9uID0gb3B0cy0+Y29tbW9uOwo+ICsJc3RydWN0IGZzZ19kZXYgKmZzZzsKPiArCj4gKwlmc2cg PSBremFsbG9jKHNpemVvZigqZnNnKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWZzZykKPiArCQly ZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCj4gKwlmc2ctPmZ1bmN0aW9uLm5hbWUgPSBGU0df RFJJVkVSX0RFU0M7Cj4gKwlmc2ctPmZ1bmN0aW9uLnN0cmluZ3MgPSBmc2dfc3RyaW5nc19hcnJh eTsKPiArCS8qIGRlc2NyaXB0b3JzIGFyZSBwZXItaW5zdGFuY2UgY29waWVzICovCj4gKwlmc2ct PmZ1bmN0aW9uLmJpbmQgPSBmc2dfYmluZDsKPiArCWZzZy0+ZnVuY3Rpb24uc2V0X2FsdCA9IGZz Z19zZXRfYWx0Owo+ICsJZnNnLT5mdW5jdGlvbi5zZXR1cCA9IGZzZ19zZXR1cDsKPiArCWZzZy0+ ZnVuY3Rpb24uZGlzYWJsZSA9IGZzZ19kaXNhYmxlOwo+ICsJZnNnLT5mdW5jdGlvbi51bmJpbmQg PSBmc2dfdW5iaW5kOwo+ICsJZnNnLT5mdW5jdGlvbi5mcmVlX2Z1bmMgPSBmc2dfZnJlZTsKPiAr Cj4gKwlmc2ctPmNvbW1vbiA9IGNvbW1vbjsKPiArCWNvbW1vbi0+ZnNnID0gZnNnOwo+ICsKPiAr CXJldHVybiAmZnNnLT5mdW5jdGlvbjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZnNnX2ZyZWVf aW5zdGFuY2Uoc3RydWN0IHVzYl9mdW5jdGlvbl9pbnN0YW5jZSAqZmkpCj4gK3sKPiArCXN0cnVj dCBmX3Vtc19vcHRzICpvcHRzID0gZnNnX29wdHNfZnJvbV9mdW5jX2luc3QoZmkpOwo+ICsKPiAr CWZzZ19jb21tb25fcmVsZWFzZSgmb3B0cy0+Y29tbW9uLT5yZWYpOwo+ICsKPiArCWtmcmVlKG9w dHMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHVzYl9mdW5jdGlvbl9pbnN0YW5jZSAqZnNn X2FsbG9jX2luc3Qodm9pZCkKPiArewo+ICsJc3RydWN0IGZfdW1zX29wdHMgKm9wdHM7Cj4gKwo+ ICsJb3B0cyA9IGt6YWxsb2Moc2l6ZW9mKCpvcHRzKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIW9w dHMpCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gKwo+ICsJb3B0cy0+ZnVuY19pbnN0 LmZyZWVfZnVuY19pbnN0ID0gZnNnX2ZyZWVfaW5zdGFuY2U7Cj4gKwo+ICsJb3B0cy0+Y29tbW9u ID0gZnNnX2NvbW1vbl9zZXR1cCgpOwo+ICsJaWYgKCFvcHRzLT5jb21tb24pIHsKPiArCQlmcmVl KG9wdHMpOwo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsJfQo+ICsKPiArCXJldHVy biAmb3B0cy0+ZnVuY19pbnN0Owo+ICt9Cj4gKwo+ICtERUNMQVJFX1VTQl9GVU5DVElPTl9JTklU KHVtcywgZnNnX2FsbG9jX2luc3QsIGZzZ19hbGxvYyk7Cj4gKwo+ICsjZGVmaW5lIFNUUklOR19N QU5VRkFDVFVSRVJfSURYCQkwCj4gKyNkZWZpbmUgU1RSSU5HX1BST0RVQ1RfSURYCQkxCj4gKyNk ZWZpbmUgU1RSSU5HX0RFU0NSSVBUSU9OX0lEWAkJMgo+ICsKPiArc3RhdGljIHN0cnVjdCB1c2Jf c3RyaW5nIHN0cmluZ3NfZGV2W10gPSB7Cj4gKwlbU1RSSU5HX01BTlVGQUNUVVJFUl9JRFhdLnMg PSBOVUxMLAo+ICsJW1NUUklOR19QUk9EVUNUX0lEWF0ucyA9IE5VTEwsCj4gKwlbU1RSSU5HX0RF U0NSSVBUSU9OX0lEWF0ucyA9ICJVU0IgTWFzcyBTdG9yYWdlIiwKPiArCXsgIH0gLyogZW5kIG9m IGxpc3QgKi8KPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2luc3RhbmNl ICpmaV9mc2c7Cj4gK3N0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmX2ZzZzsKPiArCj4gK3N0 YXRpYyBzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gY29uZmlnID0gewo+ICsJLmxhYmVsCQkJPSAi VVNCIE1hc3MgU3RvcmFnZSIsCj4gKwkuYkNvbmZpZ3VyYXRpb25WYWx1ZSAgICA9IDEsCj4gKwku Ym1BdHRyaWJ1dGVzICAgICAgICAgICA9IFVTQl9DT05GSUdfQVRUX09ORSB8IFVTQl9DT05GSUdf QVRUX1NFTEZQT1dFUiwKPiArCS5pQ29uZmlndXJhdGlvbgkJPSAyLAo+ICt9Owo+ICsKPiArc3Rh dGljIGludCB1bXNfZHJpdmVyX2JpbmQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQo+ ICt7Cj4gKwlzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0ID0gY2Rldi0+Z2FkZ2V0Owo+ICsJaW50 IGlkOwo+ICsKPiArCWlmIChnYWRnZXQtPnZlbmRvcl9pZCAmJiBnYWRnZXQtPnByb2R1Y3RfaWQp IHsKPiArCQl1bXNfZGV2X2Rlc2NyaXB0b3IuaWRWZW5kb3IgPSBjcHVfdG9fbGUxNihnYWRnZXQt PnZlbmRvcl9pZCk7Cj4gKwkJdW1zX2Rldl9kZXNjcmlwdG9yLmlkUHJvZHVjdCA9IGNwdV90b19s ZTE2KGdhZGdldC0+cHJvZHVjdF9pZCk7Cj4gKwl9IGVsc2Ugewo+ICsJCXVtc19kZXZfZGVzY3Jp cHRvci5pZFZlbmRvciA9IGNwdV90b19sZTE2KEZTR19WRU5ET1JfSUQpOwo+ICsJCXVtc19kZXZf ZGVzY3JpcHRvci5pZFByb2R1Y3QgPSBjcHVfdG9fbGUxNihGU0dfUFJPRFVDVF9JRCk7Cj4gKwl9 Cj4gKwo+ICsJc3RyaW5nc19kZXZbU1RSSU5HX01BTlVGQUNUVVJFUl9JRFhdLnMgPSBnYWRnZXQt Pm1hbnVmYWN0dXJlcjsKPiArCXN0cmluZ3NfZGV2W1NUUklOR19QUk9EVUNUX0lEWF0ucyA9IGdh ZGdldC0+cHJvZHVjdG5hbWU7Cj4gKwo+ICsJaWQgPSB1c2Jfc3RyaW5nX2lkKGNkZXYpOwo+ICsJ aWYgKGlkIDwgMCkKPiArCQlnb3RvIGZhaWw7Cj4gKwo+ICsJc3RyaW5nc19kZXZbU1RSSU5HX01B TlVGQUNUVVJFUl9JRFhdLmlkID0gaWQ7Cj4gKwl1bXNfZGV2X2Rlc2NyaXB0b3IuaU1hbnVmYWN0 dXJlciA9IGlkOwo+ICsKPiArCWlkID0gdXNiX3N0cmluZ19pZChjZGV2KTsKPiArCWlmIChpZCA8 IDApCj4gKwkJZ290byBmYWlsOwo+ICsKPiArCXN0cmluZ3NfZGV2W1NUUklOR19QUk9EVUNUX0lE WF0uaWQgPSBpZDsKPiArCXVtc19kZXZfZGVzY3JpcHRvci5pUHJvZHVjdCA9IGlkOwo+ICsKPiAr CWlkID0gdXNiX2FkZF9jb25maWdfb25seShjZGV2LCAmY29uZmlnKTsKPiArCWlmIChpZCkKPiAr CQlyZXR1cm4gaWQ7Cj4gKwo+ICsJZmlfZnNnID0gdXNiX2dldF9mdW5jdGlvbl9pbnN0YW5jZSgi dW1zIik7Cj4gKwlpZiAoSVNfRVJSKGZpX2ZzZykpIHsKPiArCQlpZCA9IFBUUl9FUlIoZmlfZnNn KTsKPiArCQlnb3RvIGZhaWw7Cj4gKwl9Cj4gKwo+ICsJZl9mc2cgPSB1c2JfZ2V0X2Z1bmN0aW9u KGZpX2ZzZyk7Cj4gKwlpZiAoSVNfRVJSKGZfZnNnKSkgewo+ICsJCWlkID0gUFRSX0VSUihmX2Zz Zyk7Cj4gKwkJZ290byBmYWlsOwo+ICsJfQo+ICsKPiArCWlkID0gdXNiX2FkZF9mdW5jdGlvbigm Y29uZmlnLCBmX2ZzZyk7Cj4gKwlpZiAoaWQpCj4gKwkJZ290byBmYWlsOwo+ICsKPiArCXJldHVy biAwOwo+ICtmYWlsOgo+ICsJcmV0dXJuIGlkOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHVtc19k cml2ZXJfdW5iaW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKPiArewo+ICsJdXNi X3B1dF9mdW5jdGlvbihmX2ZzZyk7Cj4gKwl1c2JfcHV0X2Z1bmN0aW9uX2luc3RhbmNlKGZpX2Zz Zyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgdXNiX2NvbXBv c2l0ZV9kcml2ZXIgdW1zX2RyaXZlciA9IHsKPiArCS5uYW1lCQk9ICJ1bXMiLAo+ICsJLmRldgkJ PSAmdW1zX2Rldl9kZXNjcmlwdG9yLAo+ICsJLnN0cmluZ3MJPSBmc2dfc3RyaW5nc19hcnJheSwK PiArCS5tYXhfc3BlZWQJPSBVU0JfU1BFRURfSElHSCwKPiArCS5iaW5kCQk9IHVtc19kcml2ZXJf YmluZCwKPiArCS51bmJpbmQJCT0gdW1zX2RyaXZlcl91bmJpbmQsCj4gK307Cj4gKwo+ICtpbnQg dXNiX3Vtc19yZWdpc3RlcihzdHJ1Y3QgZl91bXNfb3B0cyAqb3B0cykKPiArewo+ICsJaW50IHJl dDsKPiArCj4gKwlpZiAodW1zX2ZpbGVzKQo+ICsJCXJldHVybiAtRUJVU1k7Cj4gKwo+ICsJdW1z X2ZpbGVzID0gb3B0cy0+ZmlsZXM7Cj4gKwo+ICsJcmV0ID0gdXNiX2NvbXBvc2l0ZV9wcm9iZSgm dW1zX2RyaXZlcik7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCXdoaWxlIChw b2xsKCkpCj4gKwkJOwo+ICsKPiArCXVzYl9jb21wb3NpdGVfdW5yZWdpc3RlcigmdW1zX2RyaXZl cik7Cj4gK291dDoKPiArCXVtc19maWxlcyA9IE5VTEw7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiAr fQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvc3RvcmFnZV9jb21tb24uYyBiL2Ry aXZlcnMvdXNiL2dhZGdldC9zdG9yYWdlX2NvbW1vbi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwMDAwMDAuLjg4Y2Q3NDUwNjNlNAo+IC0tLSAvZGV2L251bGwKPiArKysg Yi9kcml2ZXJzL3VzYi9nYWRnZXQvc3RvcmFnZV9jb21tb24uYwo+IEBAIC0wLDAgKzEsMTczIEBA Cj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKwo+ICsvKgo+ICsgKiBzdG9y YWdlX2NvbW1vbi5jIC0tIENvbW1vbiBkZWZpbml0aW9ucyBmb3IgbWFzcyBzdG9yYWdlIGZ1bmN0 aW9uYWxpdHkKPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDggQWxhbiBTdGVybgo+ ICsgKiBDb3B5ZWlnaHQgKEMpIDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcwo+ICsgKiBBdXRob3I6 IE1pY2hhbCBOYXphcmV3aWN6IChtLm5hemFyZXdpY3pAc2Ftc3VuZy5jb20pCj4gKyAqCj4gKyAq IFBvcnRlZCB0byB1LWJvb3Q6Cj4gKyAqIEFuZHJ6ZWogUGlldHJhc2lld2ljeiA8YW5kcnplai5w QHNhbXN1bmcuY29tPgo+ICsgKgo+ICsgKiBDb2RlIHJlZmFjdG9yaW5nICYgY2xlYW51cDoKPiAr ICogxYF1a2FzeiBNYWpld3NraSA8bC5tYWpld3NraUBzYW1zdW5nLmNvbT4KPiArICovCj4gKwo+ ICsjaW5jbHVkZSAic3RvcmFnZV9jb21tb24uaCIKPiArCj4gKy8qCj4gKyAqIFRoaXMgZmlsZSBy ZXF1aXJlcyB0aGUgZm9sbG93aW5nIGlkZW50aWZpZXJzIHVzZWQgaW4gVVNCIHN0cmluZ3MgdG8K PiArICogYmUgZGVmaW5lZCAoZWFjaCBvZiB0eXBlIHBvaW50ZXIgdG8gY2hhcik6Cj4gKyAqICAt IGZzZ19zdHJpbmdfbWFudWZhY3R1cmVyIC0tIG5hbWUgb2YgdGhlIG1hbnVmYWN0dXJlcgo+ICsg KiAgLSBmc2dfc3RyaW5nX3Byb2R1Y3QgICAgICAtLSBuYW1lIG9mIHRoZSBwcm9kdWN0Cj4gKyAq ICAtIGZzZ19zdHJpbmdfc2VyaWFsICAgICAgIC0tIHByb2R1Y3QncyBzZXJpYWwKPiArICogIC0g ZnNnX3N0cmluZ19jb25maWcgICAgICAgLS0gbmFtZSBvZiB0aGUgY29uZmlndXJhdGlvbgo+ICsg KiAgLSBmc2dfc3RyaW5nX2ludGVyZmFjZSAgICAtLSBuYW1lIG9mIHRoZSBpbnRlcmZhY2UKPiAr ICogVGhlIGZpcnN0IGZvdXIgYXJlIG9ubHkgbmVlZGVkIHdoZW4gRlNHX0RFU0NSSVBUT1JTX0RF VklDRV9TVFJJTkdTCj4gKyAqIG1hY3JvIGlzIGRlZmluZWQgcHJpb3IgdG8gaW5jbHVkaW5nIHRo aXMgZmlsZS4KPiArICovCj4gKwo+ICsvKiBUaGVyZSBpcyBvbmx5IG9uZSBpbnRlcmZhY2UuICov Cj4gKwo+ICtzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIGZzZ19pbnRmX2Rlc2MgPSB7 Cj4gKwkuYkxlbmd0aCA9CQlzaXplb2YgZnNnX2ludGZfZGVzYywKPiArCS5iRGVzY3JpcHRvclR5 cGUgPQlVU0JfRFRfSU5URVJGQUNFLAo+ICsKPiArCS5iTnVtRW5kcG9pbnRzID0JMiwJCS8qIEFk anVzdGVkIGR1cmluZyBmc2dfYmluZCgpICovCj4gKwkuYkludGVyZmFjZUNsYXNzID0JVVNCX0NM QVNTX01BU1NfU1RPUkFHRSwKPiArCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPQlVU0JfU0NfU0NTSSwJ LyogQWRqdXN0ZWQgZHVyaW5nIGZzZ19iaW5kKCkgKi8KPiArCS5iSW50ZXJmYWNlUHJvdG9jb2wg PQlVU0JfUFJfQlVMSywJLyogQWRqdXN0ZWQgZHVyaW5nIGZzZ19iaW5kKCkgKi8KPiArCS5pSW50 ZXJmYWNlID0JCUZTR19TVFJJTkdfSU5URVJGQUNFLAo+ICt9Owo+ICsKPiArLyoKPiArICogVGhy ZWUgZnVsbC1zcGVlZCBlbmRwb2ludCBkZXNjcmlwdG9yczogYnVsay1pbiwgYnVsay1vdXQsIGFu ZAo+ICsgKiBpbnRlcnJ1cHQtaW4uCj4gKyAqLwo+ICsKPiArc3RydWN0IHVzYl9lbmRwb2ludF9k ZXNjcmlwdG9yIGZzZ19mc19idWxrX2luX2Rlc2MgPSB7Cj4gKwkuYkxlbmd0aCA9CQlVU0JfRFRf RU5EUE9JTlRfU0laRSwKPiArCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCj4g Kwo+ICsJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAo+ICsJLmJtQXR0cmlidXRlcyA9 CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAo+ICsJLyogd01heFBhY2tldFNpemUgc2V0IGJ5IGF1 dG9jb25maWd1cmF0aW9uICovCj4gK307Cj4gKwo+ICtzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2Ny aXB0b3IgZnNnX2ZzX2J1bGtfb3V0X2Rlc2MgPSB7Cj4gKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5E UE9JTlRfU0laRSwKPiArCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCj4gKwo+ ICsJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX09VVCwKPiArCS5ibUF0dHJpYnV0ZXMgPQkJ VVNCX0VORFBPSU5UX1hGRVJfQlVMSywKPiArCS8qIHdNYXhQYWNrZXRTaXplIHNldCBieSBhdXRv Y29uZmlndXJhdGlvbiAqLwo+ICt9Owo+ICsKPiArc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRl ciAqZnNnX2ZzX2Z1bmN0aW9uW10gPSB7Cj4gKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRl ciAqKSAmZnNnX2ludGZfZGVzYywKPiArCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICop ICZmc2dfZnNfYnVsa19pbl9kZXNjLAo+ICsJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIg KikgJmZzZ19mc19idWxrX291dF9kZXNjLAo+ICsJTlVMTCwKPiArfTsKPiArCj4gKy8qCj4gKyAq IFVTQiAyLjAgZGV2aWNlcyBuZWVkIHRvIGV4cG9zZSBib3RoIGhpZ2ggc3BlZWQgYW5kIGZ1bGwg c3BlZWQKPiArICogZGVzY3JpcHRvcnMsIHVubGVzcyB0aGV5IG9ubHkgcnVuIGF0IGZ1bGwgc3Bl ZWQuCj4gKyAqCj4gKyAqIFRoYXQgbWVhbnMgYWx0ZXJuYXRlIGVuZHBvaW50IGRlc2NyaXB0b3Jz IChiaWdnZXIgcGFja2V0cykKPiArICogYW5kIGEgImRldmljZSBxdWFsaWZpZXIiIC4uLiBwbHVz IG1vcmUgY29uc3RydWN0aW9uIG9wdGlvbnMKPiArICogZm9yIHRoZSBjb25maWd1cmF0aW9uIGRl c2NyaXB0b3IuCj4gKyAqLwo+ICtzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNnX2hz X2J1bGtfaW5fZGVzYyA9IHsKPiArCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAo+ ICsJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKPiArCj4gKwkvKiBiRW5kcG9p bnRBZGRyZXNzIGNvcGllZCBmcm9tIGZzX2J1bGtfaW5fZGVzYyBkdXJpbmcgZnNnX2JpbmQoKSAq Lwo+ICsJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAo+ICsJLndNYXhQ YWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKPiArfTsKPiArCj4gK3N0cnVjdCB1c2JfZW5k cG9pbnRfZGVzY3JpcHRvciBmc2dfaHNfYnVsa19vdXRfZGVzYyA9IHsKPiArCS5iTGVuZ3RoID0J CVVTQl9EVF9FTkRQT0lOVF9TSVpFLAo+ICsJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQ T0lOVCwKPiArCj4gKwkvKiBiRW5kcG9pbnRBZGRyZXNzIGNvcGllZCBmcm9tIGZzX2J1bGtfb3V0 X2Rlc2MgZHVyaW5nIGZzZ19iaW5kKCkgKi8KPiArCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBP SU5UX1hGRVJfQlVMSywKPiArCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCj4g KwkuYkludGVydmFsID0JCTEsCS8qIE5BSyBldmVyeSAxIHVmcmFtZSAqLwo+ICt9Owo+ICsKPiAr c3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZnNnX2hzX2Z1bmN0aW9uW10gPSB7Cj4gKwko c3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNnX2ludGZfZGVzYywKPiArCShzdHJ1 Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc2dfaHNfYnVsa19pbl9kZXNjLAo+ICsJKHN0 cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzZ19oc19idWxrX291dF9kZXNjLAo+ICsJ TlVMTCwKPiArfTsKPiArCj4gKy8qIE1heHBhY2tldCBhbmQgb3RoZXIgdHJhbnNmZXIgY2hhcmFj dGVyaXN0aWNzIHZhcnkgYnkgc3BlZWQuICovCj4gK3N0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3Jp cHRvciAqCj4gK2ZzZ19lcF9kZXNjKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnLCBzdHJ1Y3QgdXNiX2Vu ZHBvaW50X2Rlc2NyaXB0b3IgKmZzLAo+ICsJCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRv ciAqaHMpCj4gK3sKPiArCWlmIChnYWRnZXRfaXNfZHVhbHNwZWVkKGcpICYmIGctPnNwZWVkID09 IFVTQl9TUEVFRF9ISUdIKQo+ICsJCXJldHVybiBoczsKPiArCXJldHVybiBmczsKPiArfQo+ICsK PiArLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KPiArCj4gKy8qCj4gKyAqIElmIHRoZSBuZXh0IHR3byBy b3V0aW5lcyBhcmUgY2FsbGVkIHdoaWxlIHRoZSBnYWRnZXQgaXMgcmVnaXN0ZXJlZCwKPiArICog dGhlIGNhbGxlciBtdXN0IG93biBmc2ctPmZpbGVzZW0gZm9yIHdyaXRpbmcuCj4gKyAqLwo+ICsK PiAraW50IGZzZ19sdW5fb3BlbihzdHJ1Y3QgZnNnX2x1biAqY3VybHVuLCB1bnNpZ25lZCBpbnQg bnVtX3NlY3RvcnMsCj4gKwkJIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQo+ICt7Cj4gKwlpbnQJCQkJ cm87Cj4gKwo+ICsJLyogUi9XIGlmIHdlIGNhbiwgUi9PIGlmIHdlIG11c3QgKi8KPiArCXJvID0g Y3VybHVuLT5pbml0aWFsbHlfcm87Cj4gKwo+ICsJY3VybHVuLT5ybyA9IHJvOwo+ICsJY3VybHVu LT5maWxlX2xlbmd0aCA9IG51bV9zZWN0b3JzIDw8IDk7Cj4gKwljdXJsdW4tPm51bV9zZWN0b3Jz ID0gbnVtX3NlY3RvcnM7Cj4gKwlkZWJ1Zygib3BlbiBiYWNraW5nIGZpbGU6ICVzXG4iLCBmaWxl bmFtZSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3ZvaWQgZnNnX2x1bl9jbG9zZShz dHJ1Y3QgZnNnX2x1biAqY3VybHVuKQo+ICt7Cj4gK30KPiArCj4gKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSovCj4gKwo+ICsvKgo+ICsgKiBTeW5jIHRoZSBmaWxlIGRhdGEsIGRvbid0IGJvdGhlciB3aXRo IHRoZSBtZXRhZGF0YS4KPiArICogVGhpcyBjb2RlIHdhcyBjb3BpZWQgZnJvbSBmcy9idWZmZXIu YzpzeXNfZmRhdGFzeW5jKCkuCj4gKyAqLwo+ICtpbnQgZnNnX2x1bl9mc3luY19zdWIoc3RydWN0 IGZzZ19sdW4gKmN1cmx1bikKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3ZvaWQgc3Rv cmVfY2Ryb21fYWRkcmVzcyh1OCAqZGVzdCwgaW50IG1zZiwgdTMyIGFkZHIpCj4gK3sKPiArCWlm IChtc2YpIHsKPiArCQkvKiBDb252ZXJ0IHRvIE1pbnV0ZXMtU2Vjb25kcy1GcmFtZXMgKi8KPiAr CQlhZGRyID4+PSAyOwkJLyogQ29udmVydCB0byAyMDQ4LWJ5dGUgZnJhbWVzICovCj4gKwkJYWRk ciArPSAyKjc1OwkJLyogTGVhZC1pbiBvY2N1cGllcyAyIHNlY29uZHMgKi8KPiArCQlkZXN0WzNd ID0gYWRkciAlIDc1OwkvKiBGcmFtZXMgKi8KPiArCQlhZGRyIC89IDc1Owo+ICsJCWRlc3RbMl0g PSBhZGRyICUgNjA7CS8qIFNlY29uZHMgKi8KPiArCQlhZGRyIC89IDYwOwo+ICsJCWRlc3RbMV0g PSBhZGRyOwkJLyogTWludXRlcyAqLwo+ICsJCWRlc3RbMF0gPSAwOwkJLyogUmVzZXJ2ZWQgKi8K PiArCX0gZWxzZSB7Cj4gKwkJLyogQWJzb2x1dGUgc2VjdG9yICovCj4gKwkJcHV0X3VuYWxpZ25l ZF9iZTMyKGFkZHIsIGRlc3QpOwo+ICsJfQo+ICt9Cj4gKwo+ICsvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q Lwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvc3RvcmFnZV9jb21tb24uaCBiL2Ry aXZlcnMvdXNiL2dhZGdldC9zdG9yYWdlX2NvbW1vbi5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwMDAwMDAuLmNlMDdhN2RhYzcyYwo+IC0tLSAvZGV2L251bGwKPiArKysg Yi9kcml2ZXJzL3VzYi9nYWRnZXQvc3RvcmFnZV9jb21tb24uaAo+IEBAIC0wLDAgKzEsMjQ1IEBA Cj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCj4gKwo+ICsjaWZuZGVm IFVTQl9TVE9SQUdFX0NPTU1PTl9ICj4gKyNkZWZpbmUgVVNCX1NUT1JBR0VfQ09NTU9OX0gKPiAr Cj4gKyNpbmNsdWRlIDxkcml2ZXIuaD4KPiArI2luY2x1ZGUgPHVzYi9zdG9yYWdlLmg+Cj4gKyNp bmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+Cj4gKyNpbmNsdWRlIDx1c2IvbWFzc19zdG9yYWdlLmg+ Cj4gKwo+ICsjaWZuZGVmIERFQlVHCj4gKyN1bmRlZiBWRVJCT1NFX0RFQlVHCj4gKyN1bmRlZiBE VU1QX01TR1MKPiArI2VuZGlmIC8qICFERUJVRyAqLwo+ICsKPiArI2RlZmluZSBWTERCRyhsdW4s IGZtdCwgYXJncy4uLikgIGRldl92ZGJnKCYobHVuKS0+ZGV2LCBmbXQsICMjIGFyZ3MpCj4gKyNk ZWZpbmUgTERCRyhsdW4sIGZtdCwgYXJncy4uLikgICBkZXZfZGJnICgmKGx1biktPmRldiwgZm10 LCAjIyBhcmdzKQo+ICsjZGVmaW5lIExFUlJPUihsdW4sIGZtdCwgYXJncy4uLikgZGV2X2VyciAo JihsdW4pLT5kZXYsIGZtdCwgIyMgYXJncykKPiArI2RlZmluZSBMV0FSTihsdW4sIGZtdCwgYXJn cy4uLikgIGRldl93YXJuKCYobHVuKS0+ZGV2LCBmbXQsICMjIGFyZ3MpCj4gKyNkZWZpbmUgTElO Rk8obHVuLCBmbXQsIGFyZ3MuLi4pICBkZXZfaW5mbygmKGx1biktPmRldiwgZm10LCAjIyBhcmdz KQo+ICsKPiArLyoKPiArICogS2VlcCB0aG9zZSBtYWNyb3MgaW4gc3luYyB3aXRoIHRob3NlIGlu Cj4gKyAqIGluY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oIG9yIGVsc2UgR0NDIHdpbGwgY29t cGxhaW4uICBJZiB0aGV5Cj4gKyAqIGFyZSBpZGVudGljYWwgKHRoZSBzYW1lIG5hbWVzIG9mIGFy Z3VtZW50cywgd2hpdGUgc3BhY2VzIGluIHRoZQo+ICsgKiBzYW1lIHBsYWNlcykgR0NDIHdpbGwg YWxsb3cgcmVkZWZpbml0aW9uIG90aGVyd2lzZSAoZXZlbiBpZiBzb21lCj4gKyAqIHdoaXRlIHNw YWNlIGlzIHJlbW92ZWQgb3IgYWRkZWQpIHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQuCj4gKyAqCj4g KyAqIFRob3NlIG1hY3JvcyBhcmUgbmVlZGVkIGhlcmUgYmVjYXVzZSBGaWxlIFN0b3JhZ2UgR2Fk Z2V0IGRvZXMgbm90Cj4gKyAqIGluY2x1ZGUgdGhlIGNvbXBvc2l0ZS5oIGhlYWRlci4gIEZvciBj b21wb3NpdGUgZ2FkZ2V0cyB0aG9zZSBtYWNyb3MKPiArICogYXJlIHJlZHVuZGFudCBzaW5jZSBj b21wb3NpdGUuaCBpcyBpbmNsdWRlZCBhbnkgd2F5Lgo+ICsgKgo+ICsgKiBPbmUgY291bGQgY2hl Y2sgd2hldGhlciB0aG9zZSBtYWNyb3MgYXJlIGFscmVhZHkgZGVmaW5lZCAod2hpY2gKPiArICog d291bGQgaW5kaWNhdGUgY29tcG9zaXRlLmggaGFkIGJlZW4gaW5jbHVkZWQpIG9yIG5vdCAod2hp Y2ggd291bGQKPiArICogaW5kaWNhdGUgd2Ugd2VyZSBpbiBGU0cpIGJ1dCB0aGlzIGlzIG5vdCBk b25lIGJlY2F1c2UgYSB3YXJuaW5nIGlzCj4gKyAqIGRlc2lyZWQgaWYgZGVmaW5pdGlvbnMgaGVy ZSBkaWZmZXIgZnJvbSB0aGUgb25lcyBpbiBjb21wb3NpdGUuaC4KPiArICoKPiArICogV2Ugd2Fu dCB0aGUgZGVmaW5pdGlvbnMgdG8gbWF0Y2ggYW5kIGJlIHRoZSBzYW1lIGluIEZpbGUgU3RvcmFn ZQo+ICsgKiBHYWRnZXQgYXMgd2VsbCBhcyBNYXNzIFN0b3JhZ2UgRnVuY3Rpb24gKGFuZCBzbyBj b21wb3NpdGUgZ2FkZ2V0cwo+ICsgKiB1c2luZyBNU0YpLiAgSWYgc29tZW9uZSBjaGFuZ2VzIHRo ZW0gaW4gY29tcG9zaXRlLmggaXQgd2lsbCBwcm9kdWNlCj4gKyAqIGEgd2FybmluZyBpbiB0aGlz IGZpbGUgd2hlbiBidWlsZGluZyBNU0YuCj4gKyAqLwo+ICsKPiArI2RlZmluZSBEQkcoZCwgZm10 LCBhcmdzLi4uKSBcCj4gKwlkZXZfZGJnKCYoZCktPmdhZGdldC0+ZGV2ICwgZm10ICwgIyMgYXJn cykKPiArI2RlZmluZSBWREJHKGQsIGZtdCwgYXJncy4uLikgXAo+ICsJZGV2X3ZkYmcoJihkKS0+ Z2FkZ2V0LT5kZXYgLCBmbXQgLCAjIyBhcmdzKQo+ICsjZGVmaW5lIEVSUk9SKGQsIGZtdCwgYXJn cy4uLikgXAo+ICsJZGV2X2VycigmKGQpLT5nYWRnZXQtPmRldiAsIGZtdCAsICMjIGFyZ3MpCj4g KyNkZWZpbmUgV0FSTklORyhkLCBmbXQsIGFyZ3MuLi4pIFwKPiArCWRldl93YXJuKCYoZCktPmdh ZGdldC0+ZGV2ICwgZm10ICwgIyMgYXJncykKPiArI2RlZmluZSBJTkZPKGQsIGZtdCwgYXJncy4u LikgXAo+ICsJZGV2X2luZm8oJihkKS0+Z2FkZ2V0LT5kZXYgLCBmbXQgLCAjIyBhcmdzKQo+ICsK PiArI2lmZGVmIERVTVBfTVNHUwo+ICsKPiArLyogZHVtcF9tc2coZnNnLCBjb25zdCBjaGFyICog bGFiZWwsIGNvbnN0IHU4ICogYnVmLCB1bnNpZ25lZCBsZW5ndGgpOyAqLwo+ICsjIGRlZmluZSBk dW1wX21zZyhmc2csIGxhYmVsLCBidWYsIGxlbmd0aCkgZG8geyAgICAgICAgICAgICAgICAgICAg ICAgICBcCj4gKwlpZiAobGVuZ3RoIDwgNTEyKSB7CQkJCQkJXAo+ICsJCURCRyhmc2csICIlcywg bGVuZ3RoICV1OlxuIiwgbGFiZWwsIGxlbmd0aCk7CQlcCj4gKwkJcHJpbnRfaGV4X2R1bXAoIiIs IERVTVBfUFJFRklYX09GRlNFVCwJXAo+ICsJCQkgICAgICAgMTYsIDEsIGJ1ZiwgbGVuZ3RoLCAw KTsJCQlcCj4gKwl9CQkJCQkJCQlcCj4gK30gd2hpbGUgKDApCj4gKwo+ICsjICBkZWZpbmUgZHVt cF9jZGIoZnNnKSBkbyB7IH0gd2hpbGUgKDApCj4gKwo+ICsjZWxzZQo+ICsKPiArIyAgZGVmaW5l IGR1bXBfbXNnKGZzZywgLyogY29uc3QgY2hhciAqICovIGxhYmVsLCBcCj4gKwkJICAgLyogY29u c3QgdTggKiAqLyBidWYsIC8qIHVuc2lnbmVkICovIGxlbmd0aCkgZG8geyB9IHdoaWxlICgwKQo+ ICsKPiArIyAgaWZkZWYgVkVSQk9TRV9ERUJVRwo+ICsKPiArIyAgICBkZWZpbmUgZHVtcF9jZGIo ZnNnKQkJCQkJCVwKPiArCXByaW50X2hleF9kdW1wKCJTQ1NJIENEQjogIiwgRFVNUF9QUkVGSVhf Tk9ORSwJXAo+ICsJCSAgICAgICAxNiwgMSwgKGZzZyktPmNtbmQsIChmc2cpLT5jbW5kX3NpemUs IDApCQlcCj4gKwo+ICsjICBlbHNlCj4gKwo+ICsjICAgIGRlZmluZSBkdW1wX2NkYihmc2cpIGRv IHsgfSB3aGlsZSAoMCkKPiArCj4gKyMgIGVuZGlmIC8qIFZFUkJPU0VfREVCVUcgKi8KPiArCj4g KyNlbmRpZiAvKiBEVU1QX01TR1MgKi8KPiArCj4gKy8qCj4gKyAqIFRoYW5rcyB0byBOZXRDaGlw IFRlY2hub2xvZ2llcyBmb3IgZG9uYXRpbmcgdGhpcyBwcm9kdWN0IElELgo+ICsgKgo+ICsgKiBE TyBOT1QgUkVVU0UgVEhFU0UgSURzIHdpdGggYW55IG90aGVyIGRyaXZlciEhICBFdmVyISEKPiAr ICogSW5zdGVhZDogIGFsbG9jYXRlIHlvdXIgb3duLCB1c2luZyBub3JtYWwgVVNCLUlGIHByb2Nl ZHVyZXMuCj4gKyAqLwo+ICsKPiArI2RlZmluZSBGU0dfVkVORE9SX0lECTB4MDUyNQkvKiBOZXRD aGlwICovCj4gKyNkZWZpbmUgRlNHX1BST0RVQ1RfSUQJMHhhNGE1CS8qIExpbnV4LVVTQiBGaWxl LWJhY2tlZCBTdG9yYWdlIEdhZGdldCAqLwo+ICsKPiArLyogTGVuZ3RoIG9mIGEgU0NTSSBDb21t YW5kIERhdGEgQmxvY2sgKi8KPiArI2RlZmluZSBNQVhfQ09NTUFORF9TSVpFCTE2Cj4gKwo+ICsv KiBTQ1NJIFNlbnNlIEtleS9BZGRpdGlvbmFsIFNlbnNlIENvZGUvQVNDIFF1YWxpZmllciB2YWx1 ZXMgKi8KPiArI2RlZmluZSBTU19OT19TRU5TRQkJCQkwCj4gKyNkZWZpbmUgU1NfQ09NTVVOSUNB VElPTl9GQUlMVVJFCQkweDA0MDgwMAo+ICsjZGVmaW5lIFNTX0lOVkFMSURfQ09NTUFORAkJCTB4 MDUyMDAwCj4gKyNkZWZpbmUgU1NfSU5WQUxJRF9GSUVMRF9JTl9DREIJCQkweDA1MjQwMAo+ICsj ZGVmaW5lIFNTX0xPR0lDQUxfQkxPQ0tfQUREUkVTU19PVVRfT0ZfUkFOR0UJMHgwNTIxMDAKPiAr I2RlZmluZSBTU19MT0dJQ0FMX1VOSVRfTk9UX1NVUFBPUlRFRAkJMHgwNTI1MDAKPiArI2RlZmlu ZSBTU19NRURJVU1fTk9UX1BSRVNFTlQJCQkweDAyM2EwMAo+ICsjZGVmaW5lIFNTX01FRElVTV9S RU1PVkFMX1BSRVZFTlRFRAkJMHgwNTUzMDIKPiArI2RlZmluZSBTU19OT1RfUkVBRFlfVE9fUkVB RFlfVFJBTlNJVElPTgkweDA2MjgwMAo+ICsjZGVmaW5lIFNTX1JFU0VUX09DQ1VSUkVECQkJMHgw NjI5MDAKPiArI2RlZmluZSBTU19TQVZJTkdfUEFSQU1FVEVSU19OT1RfU1VQUE9SVEVECTB4MDUz OTAwCj4gKyNkZWZpbmUgU1NfVU5SRUNPVkVSRURfUkVBRF9FUlJPUgkJMHgwMzExMDAKPiArI2Rl ZmluZSBTU19XUklURV9FUlJPUgkJCQkweDAzMGMwMgo+ICsjZGVmaW5lIFNTX1dSSVRFX1BST1RF Q1RFRAkJCTB4MDcyNzAwCj4gKwo+ICsjZGVmaW5lIFNLKHgpCQkoKHU4KSAoKHgpID4+IDE2KSkJ LyogU2Vuc2UgS2V5IGJ5dGUsIGV0Yy4gKi8KPiArI2RlZmluZSBBU0MoeCkJCSgodTgpICgoeCkg Pj4gOCkpCj4gKyNkZWZpbmUgQVNDUSh4KQkJKCh1OCkgKHgpKQo+ICsKPiArLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKi8KPiArCj4gK3N0cnVjdCBmc2dfbHVuIHsKPiArCWxvZmZfdAkJZmlsZV9sZW5ndGg7 Cj4gKwlsb2ZmX3QJCW51bV9zZWN0b3JzOwo+ICsKPiArCXVuc2lnbmVkIGludAlpbml0aWFsbHlf cm86MTsKPiArCXVuc2lnbmVkIGludAlybzoxOwo+ICsJdW5zaWduZWQgaW50CXJlbW92YWJsZTox Owo+ICsJdW5zaWduZWQgaW50CWNkcm9tOjE7Cj4gKwl1bnNpZ25lZCBpbnQJcHJldmVudF9tZWRp dW1fcmVtb3ZhbDoxOwo+ICsJdW5zaWduZWQgaW50CXJlZ2lzdGVyZWQ6MTsKPiArCXVuc2lnbmVk IGludAlpbmZvX3ZhbGlkOjE7Cj4gKwl1bnNpZ25lZCBpbnQJbm9mdWE6MTsKPiArCj4gKwl1MzIJ CXNlbnNlX2RhdGE7Cj4gKwl1MzIJCXNlbnNlX2RhdGFfaW5mbzsKPiArCXUzMgkJdW5pdF9hdHRl bnRpb25fZGF0YTsKPiArCj4gKwlzdHJ1Y3QgZGV2aWNlX2QJZGV2Owo+ICt9Owo+ICsKPiArI2Rl ZmluZSBmc2dfbHVuX2lzX29wZW4oY3VybHVuKQkoKGN1cmx1biktPmZpbHAgIT0gTlVMTCkKPiAr Cj4gKy8qIEJpZyBlbm91Z2ggdG8gaG9sZCBvdXIgYmlnZ2VzdCBkZXNjcmlwdG9yICovCj4gKyNk ZWZpbmUgRVAwX0JVRlNJWkUJMjU2Cj4gKyNkZWZpbmUgREVMQVlFRF9TVEFUVVMJKEVQMF9CVUZT SVpFICsgOTk5KQkvKiBBbiBpbXBvc3NpYmx5IGxhcmdlIHZhbHVlICovCj4gKwo+ICsvKiBOdW1i ZXIgb2YgYnVmZmVycyB3ZSB3aWxsIHVzZS4gIDIgaXMgZW5vdWdoIGZvciBkb3VibGUtYnVmZmVy aW5nICovCj4gKyNkZWZpbmUgRlNHX05VTV9CVUZGRVJTCTIKPiArCj4gKy8qIERlZmF1bHQgc2l6 ZSBvZiBidWZmZXIgbGVuZ3RoLiAqLwo+ICsjZGVmaW5lIEZTR19CVUZMRU4JKCh1MzIpMTMxMDcy KQo+ICsKPiArLyogTWF4aW1hbCBudW1iZXIgb2YgTFVOcyBzdXBwb3J0ZWQgaW4gbWFzcyBzdG9y YWdlIGZ1bmN0aW9uICovCj4gKyNkZWZpbmUgRlNHX01BWF9MVU5TCTgKPiArCj4gK2VudW0gZnNn X2J1ZmZlcl9zdGF0ZSB7Cj4gKwlCVUZfU1RBVEVfRU1QVFkgPSAwLAo+ICsJQlVGX1NUQVRFX0ZV TEwsCj4gKwlCVUZfU1RBVEVfQlVTWQo+ICt9Owo+ICsKPiArLyoKPiArICogV2hlbiBGU0dfQlVG RkhEX1NUQVRJQ19CVUZGRVIgaXMgZGVmaW5lZCB3aGVuIHRoaXMgZmlsZSBpcyBpbmNsdWRlZAo+ ICsgKiB0aGUgZnNnX2J1ZmZoZCBzdHJ1Y3R1cmUncyBidWYgZmllbGQgd2lsbCBiZSBhbiBhcnJh eSBvZiBGU0dfQlVGTEVOCj4gKyAqIGNoYXJhY3RlcnMgcmF0aGVyIHRoZW4gYSBwb2ludGVyIHRv IHZvaWQuCj4gKyAqLwo+ICsKPiArc3RydWN0IGZzZ19idWZmaGQgewo+ICsJdm9pZAkJCQkqYnVm Owo+ICsJZW51bSBmc2dfYnVmZmVyX3N0YXRlCQlzdGF0ZTsKPiArCXN0cnVjdCBmc2dfYnVmZmhk CQkqbmV4dDsKPiArCj4gKwkvKgo+ICsJICogVGhlIE5ldENoaXAgMjI4MCBpcyBmYXN0ZXIsIGFu ZCBoYW5kbGVzIHNvbWUgcHJvdG9jb2wgZmF1bHRzCj4gKwkgKiBiZXR0ZXIsIGlmIHdlIGRvbid0 IHN1Ym1pdCBhbnkgc2hvcnQgYnVsay1vdXQgcmVhZCByZXF1ZXN0cy4KPiArCSAqIFNvIHdlIHdp bGwgcmVjb3JkIHRoZSBpbnRlbmRlZCByZXF1ZXN0IGxlbmd0aCBoZXJlLgo+ICsJICovCj4gKwl1 bnNpZ25lZCBpbnQJCQlidWxrX291dF9pbnRlbmRlZF9sZW5ndGg7Cj4gKwo+ICsJc3RydWN0IHVz Yl9yZXF1ZXN0CQkqaW5yZXE7Cj4gKwlpbnQJCQkJaW5yZXFfYnVzeTsKPiArCXN0cnVjdCB1c2Jf cmVxdWVzdAkJKm91dHJlcTsKPiArCWludAkJCQlvdXRyZXFfYnVzeTsKPiArfTsKPiArCj4gK2Vu dW0gZnNnX3N0YXRlIHsKPiArCS8qIFRoaXMgb25lIGlzbid0IHVzZWQgYW55d2hlcmUgKi8KPiAr CUZTR19TVEFURV9DT01NQU5EX1BIQVNFID0gLTEwLAo+ICsJRlNHX1NUQVRFX0RBVEFfUEhBU0Us Cj4gKwlGU0dfU1RBVEVfU1RBVFVTX1BIQVNFLAo+ICsKPiArCUZTR19TVEFURV9JRExFID0gMCwK PiArCUZTR19TVEFURV9BQk9SVF9CVUxLX09VVCwKPiArCUZTR19TVEFURV9SRVNFVCwKPiArCUZT R19TVEFURV9JTlRFUkZBQ0VfQ0hBTkdFLAo+ICsJRlNHX1NUQVRFX0NPTkZJR19DSEFOR0UsCj4g KwlGU0dfU1RBVEVfRElTQ09OTkVDVCwKPiArCUZTR19TVEFURV9FWElULAo+ICsJRlNHX1NUQVRF X1RFUk1JTkFURUQKPiArfTsKPiArCj4gK2VudW0gZGF0YV9kaXJlY3Rpb24gewo+ICsJREFUQV9E SVJfVU5LTk9XTiA9IDAsCj4gKwlEQVRBX0RJUl9GUk9NX0hPU1QsCj4gKwlEQVRBX0RJUl9UT19I T1NULAo+ICsJREFUQV9ESVJfTk9ORQo+ICt9Owo+ICsKPiArLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K PiArCj4gK3N0YXRpYyBpbmxpbmUgdTMyIGdldF91bmFsaWduZWRfYmUyNCh1OCAqYnVmKQo+ICt7 Cj4gKwlyZXR1cm4gMHhmZmZmZmYgJiAodTMyKSBnZXRfdW5hbGlnbmVkX2JlMzIoYnVmIC0gMSk7 Cj4gK30KPiArCj4gKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCj4gKwo+ICtlbnVtIHsKPiArCUZTR19T VFJJTkdfSU5URVJGQUNFCj4gK307Cj4gKwo+ICsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwo+ICsKPiAr ZXh0ZXJuIHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgZnNnX2ludGZfZGVzYzsKPiAr Cj4gK2V4dGVybiBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNnX2ZzX2J1bGtfaW5f ZGVzYzsKPiArZXh0ZXJuIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBmc2dfZnNfYnVs a19vdXRfZGVzYzsKPiArZXh0ZXJuIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmZzZ19m c19mdW5jdGlvbltdOwo+ICsKPiArZXh0ZXJuIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRv ciBmc2dfaHNfYnVsa19pbl9kZXNjOwo+ICtleHRlcm4gc3RydWN0IHVzYl9lbmRwb2ludF9kZXNj cmlwdG9yIGZzZ19oc19idWxrX291dF9kZXNjOwo+ICtleHRlcm4gc3RydWN0IHVzYl9kZXNjcmlw dG9yX2hlYWRlciAqZnNnX2hzX2Z1bmN0aW9uW107Cj4gKwo+ICtpbnQgZnNnX2x1bl9vcGVuKHN0 cnVjdCBmc2dfbHVuICpjdXJsdW4sIHVuc2lnbmVkIGludCBudW1fc2VjdG9ycywKPiArCQkgY29u c3QgY2hhciAqZmlsZW5hbWUpOwo+ICt2b2lkIGZzZ19sdW5fY2xvc2Uoc3RydWN0IGZzZ19sdW4g KmN1cmx1bik7Cj4gKwo+ICtzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKgo+ICtmc2df ZXBfZGVzYyhzdHJ1Y3QgdXNiX2dhZGdldCAqZywgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlw dG9yICpmcywKPiArCQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmhzKTsKPiAraW50 IGZzZ19sdW5fZnN5bmNfc3ViKHN0cnVjdCBmc2dfbHVuICpjdXJsdW4pOwo+ICt2b2lkIHN0b3Jl X2Nkcm9tX2FkZHJlc3ModTggKmRlc3QsIGludCBtc2YsIHUzMiBhZGRyKTsKPiArCj4gKyNlbmRp ZiAvKiBVU0JfU1RPUkFHRV9DT01NT05fSCAqLwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2ku aCBiL2luY2x1ZGUvc2NzaS5oCj4gaW5kZXggZTIzOTc0ODllYWQ5Li43MjUyYjhjZTNiNjIgMTAw NjQ0Cj4gLS0tIGEvaW5jbHVkZS9zY3NpLmgKPiArKysgYi9pbmNsdWRlL3Njc2kuaAo+IEBAIC0x MDksMTEgKzEwOSwxNCBAQAo+ICAjZGVmaW5lIFNDU0lfTUVEX1JFTU9WTAkweDFFCQkvKiBQcmV2 ZW50L0FsbG93IG1lZGl1bSBSZW1vdmFsIChPKSAqLwo+ICAjZGVmaW5lIFNDU0lfUkVBRDYJMHgw OAkJLyogUmVhZCA2LWJ5dGUgKE1BTkRBVE9SWSkgKi8KPiAgI2RlZmluZSBTQ1NJX1JFQUQxMAkw eDI4CQkvKiBSZWFkIDEwLWJ5dGUgKE1BTkRBVE9SWSkgKi8KPiArI2RlZmluZSBTQ1NJX1JFQUQx MgkweEE4CQkvKiBSZWFkIDEyLWJ5dGUgKE8pICovCj4gICNkZWZpbmUgU0NTSV9SRF9DQVBBQwkw eDI1CQkvKiBSZWFkIENhcGFjaXR5IChNQU5EQVRPUlkpICovCj4gKyNkZWZpbmUgU0NTSV9SRF9G TVRfQ0FQQUMJMHgyMwo+ICAjZGVmaW5lIFNDU0lfUkRfREVGRUNUCTB4MzcJCS8qIFJlYWQgRGVm ZWN0IERhdGEgKE8pICovCj4gICNkZWZpbmUgU0NTSV9SRUFEX0xPTkcJMHgzRQkJLyogUmVhZCBM b25nIChPKSAqLwo+ICAjZGVmaW5lIFNDU0lfUkVBU1NfQkxLCTB4MDcJCS8qIFJlYXNzaWduIEJs b2NrcyAoTykgKi8KPiAgI2RlZmluZSBTQ1NJX1JDVl9ESUFHCTB4MUMJCS8qIFJlY2VpdmUgRGlh Z25vc3RpYyBSZXN1bHRzIChPKSAqLwo+ICsjZGVmaW5lIFNDU0lfUkVTRVJWRQkweDE2Cj4gICNk ZWZpbmUgU0NTSV9SRUxFQVNFCTB4MTcJCS8qIFJlbGVhc2UgVW5pdCAoTUFOREFUT1JZKSAqLwo+ ICAjZGVmaW5lIFNDU0lfUkVaRVJPCTB4MDEJCS8qIFJlemVybyBVbml0IChPKSAqLwo+ICAjZGVm aW5lIFNDU0lfU1JDSF9EQVRfRQkweDMxCQkvKiBTZWFyY2ggRGF0YSBFcXVhbCAoTykgKi8KPiBA QCAtMTI4LDkgKzEzMSwxMiBAQAo+ICAjZGVmaW5lIFNDU0lfVkVSSUZZCTB4MkYJCS8qIFZlcmlm eSAoTykgKi8KPiAgI2RlZmluZSBTQ1NJX1dSSVRFNgkweDBBCQkvKiBXcml0ZSA2LUJ5dGUgKE1B TkRBVE9SWSkgKi8KPiAgI2RlZmluZSBTQ1NJX1dSSVRFMTAJMHgyQQkJLyogV3JpdGUgMTAtQnl0 ZSAoTUFOREFUT1JZKSAqLwo+ICsjZGVmaW5lIFNDU0lfV1JJVEUxMgkweEFBCQkvKiBXcml0ZSAx Mi1CeXRlIChPKSAqLwo+ICAjZGVmaW5lIFNDU0lfV1JUX1ZFUklGWQkweDJFCQkvKiBXcml0ZSBh bmQgVmVyaWZ5IChPKSAqLwo+ICAjZGVmaW5lIFNDU0lfV1JJVEVfTE9ORwkweDNGCQkvKiBXcml0 ZSBMb25nIChPKSAqLwo+ICAjZGVmaW5lIFNDU0lfV1JJVEVfU0FNRQkweDQxCQkvKiBXcml0ZSBT YW1lIChPKSAqLwo+ICsjZGVmaW5lIFNDU0lfUkRfVE9DCTB4NDMKPiArI2RlZmluZSBTQ1NJX1JE X0hFQURFUgkweDQ0Cj4gIAo+ICAKPiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKPiBAQCAtMTY1LDQg KzE3MSwxMCBAQCB2b2lkIHNjc2lfaW5pdCh2b2lkKTsKPiAgI2RlZmluZSBGQUxTRSAwCj4gICNl bmRpZgo+ICAKPiArLyoKPiArICogIERFVklDRSBUWVBFUwo+ICsgKi8KPiArCj4gKyNkZWZpbmUg VFlQRV9ESVNLICAgICAgICAgICAweDAwCj4gKwo+ICAjZW5kaWYgLyogX1NDU0lfSCAqLwo+IGRp ZmYgLS1naXQgYS9pbmNsdWRlL3VzYi9tYXNzX3N0b3JhZ2UuaCBiL2luY2x1ZGUvdXNiL21hc3Nf c3RvcmFnZS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjA4 NGIzYzhlOGYzMQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9pbmNsdWRlL3VzYi9tYXNzX3N0b3Jh Z2UuaAo+IEBAIC0wLDAgKzEsMjggQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjArICovCj4gKy8qCj4gKyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm5v aWNzCj4gKyAqIEx1a2FzeiBNYWpld3NraSA8bC5tYWpld3NraUBzYW1zdW5nLmNvbT4KPiArICov Cj4gKwo+ICsjaWZuZGVmIF9fVVNCX01BU1NfU1RPUkFHRV9IX18KPiArI2RlZmluZSBfX1VTQl9N QVNTX1NUT1JBR0VfSF9fCj4gKwo+ICsjaW5jbHVkZSA8dXNiL2NvbXBvc2l0ZS5oPgo+ICsKPiAr LyogV2FpdCBhdCBtYXhpbXVtIDYwIHNlY29uZHMgZm9yIGNhYmxlIGNvbm5lY3Rpb24gKi8KPiAr I2RlZmluZSBVTVNfQ0FCTEVfUkVBRFlfVElNRU9VVAk2MAo+ICsKPiArc3RydWN0IGZzZ19jb21t b247Cj4gKwo+ICtzdHJ1Y3QgZl91bXNfb3B0cyB7Cj4gKwlzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2lu c3RhbmNlIGZ1bmNfaW5zdDsKPiArCXN0cnVjdCBmc2dfY29tbW9uICpjb21tb247Cj4gKwlzdHJ1 Y3QgZmlsZV9saXN0ICpmaWxlczsKPiArCXVuc2lnbmVkIGludCBudW1fc2VjdG9yczsKPiArCWlu dCBmZDsKPiArCWNoYXIgbmFtZVsxNl07Cj4gK307Cj4gKwo+ICtpbnQgdXNiX3Vtc19yZWdpc3Rl cihzdHJ1Y3QgZl91bXNfb3B0cyAqKTsKPiArCj4gKyNlbmRpZiAvKiBfX1VTQl9NQVNTX1NUT1JB R0VfSF9fICovCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdXNiL3N0b3JhZ2UuaCBiL2luY2x1ZGUv dXNiL3N0b3JhZ2UuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAw Li5lMDI0MGY4NjQ1NDgKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvaW5jbHVkZS91c2Ivc3RvcmFn ZS5oCj4gQEAgLTAsMCArMSw4NyBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMAo+ICsjaWZuZGVmIF9fTElOVVhfVVNCX1NUT1JBR0VfSAo+ICsjZGVmaW5lIF9fTElOVVhf VVNCX1NUT1JBR0VfSAo+ICsKPiArLyoKPiArICogbGludXgvdXNiL3N0b3JhZ2UuaAo+ICsgKgo+ ICsgKiBDb3B5cmlnaHQgTWF0dGhldyBXaWxjb3ggZm9yIEludGVsIENvcnAsIDIwMTAKPiArICoK PiArICogVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIHRha2VuIGZyb20gdGhlCj4gKyAq IFVTQiBNYXNzIFN0b3JhZ2UgQ2xhc3MgU3BlY2lmaWNhdGlvbiBPdmVydmlldwo+ICsgKgo+ICsg KiBEaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwsIHZlcnNpb24gdHdv Lgo+ICsgKi8KPiArCj4gKy8qIFN0b3JhZ2Ugc3ViY2xhc3MgY29kZXMgKi8KPiArCj4gKyNkZWZp bmUgVVNCX1NDX1JCQwkweDAxCQkvKiBUeXBpY2FsbHksIGZsYXNoIGRldmljZXMgKi8KPiArI2Rl ZmluZSBVU0JfU0NfODAyMAkweDAyCQkvKiBDRC1ST00gKi8KPiArI2RlZmluZSBVU0JfU0NfUUlD CTB4MDMJCS8qIFFJQy0xNTcgVGFwZXMgKi8KPiArI2RlZmluZSBVU0JfU0NfVUZJCTB4MDQJCS8q IEZsb3BweSAqLwo+ICsjZGVmaW5lIFVTQl9TQ184MDcwCTB4MDUJCS8qIFJlbW92YWJsZSBtZWRp YSAqLwo+ICsjZGVmaW5lIFVTQl9TQ19TQ1NJCTB4MDYJCS8qIFRyYW5zcGFyZW50ICovCj4gKyNk ZWZpbmUgVVNCX1NDX0xPQ0tBQkxFCTB4MDcJCS8qIFBhc3N3b3JkLXByb3RlY3RlZCAqLwo+ICsK PiArI2RlZmluZSBVU0JfU0NfSVNEMjAwCTB4ZjAJCS8qIElTRDIwMCBBVEEgKi8KPiArI2RlZmlu ZSBVU0JfU0NfQ1lQX0FUQUNCCTB4ZjEJLyogQ3lwcmVzcyBBVEFDQiAqLwo+ICsjZGVmaW5lIFVT Ql9TQ19ERVZJQ0UJMHhmZgkJLyogVXNlIGRldmljZSdzIHZhbHVlICovCj4gKwo+ICsvKiBTdG9y YWdlIHByb3RvY29sIGNvZGVzICovCj4gKwo+ICsjZGVmaW5lIFVTQl9QUl9DQkkJMHgwMAkJLyog Q29udHJvbC9CdWxrL0ludGVycnVwdCAqLwo+ICsjZGVmaW5lIFVTQl9QUl9DQgkweDAxCQkvKiBD b250cm9sL0J1bGsgdy9vIGludGVycnVwdCAqLwo+ICsjZGVmaW5lIFVTQl9QUl9CVUxLCTB4NTAJ CS8qIGJ1bGsgb25seSAqLwo+ICsjZGVmaW5lIFVTQl9QUl9VQVMJMHg2MgkJLyogVVNCIEF0dGFj aGVkIFNDU0kgKi8KPiArCj4gKyNkZWZpbmUgVVNCX1BSX1VTQkFUCTB4ODAJCS8qIFNDTS1BVEFQ SSBicmlkZ2UgKi8KPiArI2RlZmluZSBVU0JfUFJfRVVTQl9TRERSMDkJMHg4MQkvKiBTQ00tU0NT SSBicmlkZ2UgZm9yIFNERFItMDkgKi8KPiArI2RlZmluZSBVU0JfUFJfU0REUjU1CTB4ODIJCS8q IFNERFItNTUgKG1hZGUgdXApICovCj4gKyNkZWZpbmUgVVNCX1BSX0RQQ01fVVNCCTB4ZjAJCS8q IENvbWJpbmF0aW9uIENCL1NERFIwOSAqLwo+ICsjZGVmaW5lIFVTQl9QUl9GUkVFQ09NCTB4ZjEJ CS8qIEZyZWVjb20gKi8KPiArI2RlZmluZSBVU0JfUFJfREFUQUZBQgkweGYyCQkvKiBEYXRhZmFi IGNoaXBzZXRzICovCj4gKyNkZWZpbmUgVVNCX1BSX0pVTVBTSE9UCTB4ZjMJCS8qIExleGFyIEp1 bXBzaG90ICovCj4gKyNkZWZpbmUgVVNCX1BSX0FMQVVEQQkweGY0CQkvKiBBbGF1ZGEgY2hpcHNl dHMgKi8KPiArI2RlZmluZSBVU0JfUFJfS0FSTUEJMHhmNQkJLyogUmlvIEthcm1hICovCj4gKwo+ ICsjZGVmaW5lIFVTQl9QUl9ERVZJQ0UJMHhmZgkJLyogVXNlIGRldmljZSdzIHZhbHVlICovCj4g Kwo+ICsvKgo+ICsgKiBCdWxrIG9ubHkgZGF0YSBzdHJ1Y3R1cmVzCj4gKyAqLwo+ICsKPiArLyog Y29tbWFuZCBibG9jayB3cmFwcGVyICovCj4gK3N0cnVjdCBidWxrX2NiX3dyYXAgewo+ICsJX19s ZTMyCVNpZ25hdHVyZTsJCS8qIGNvbnRhaW5zICdVU0JDJyAqLwo+ICsJX191MzIJVGFnOwkJCS8q IHVuaXF1ZSBwZXIgY29tbWFuZCBpZCAqLwo+ICsJX19sZTMyCURhdGFUcmFuc2Zlckxlbmd0aDsJ Lyogc2l6ZSBvZiBkYXRhICovCj4gKwlfX3U4CUZsYWdzOwkJCS8qIGRpcmVjdGlvbiBpbiBiaXQg MCAqLwo+ICsJX191OAlMdW47CQkJLyogTFVOIG5vcm1hbGx5IDAgKi8KPiArCV9fdTgJTGVuZ3Ro OwkJCS8qIGxlbmd0aCBvZiB0aGUgQ0RCICovCj4gKwlfX3U4CUNEQlsxNl07CQkvKiBtYXggY29t bWFuZCAqLwo+ICt9Owo+ICsKPiArI2RlZmluZSBVU19CVUxLX0NCX1dSQVBfTEVOCTMxCj4gKyNk ZWZpbmUgVVNfQlVMS19DQl9TSUdOCQkweDQzNDI1MzU1CS8qIHNwZWxscyBvdXQgJ1VTQkMnICov Cj4gKyNkZWZpbmUgVVNfQlVMS19GTEFHX0lOCQkoMSA8PCA3KQo+ICsjZGVmaW5lIFVTX0JVTEtf RkxBR19PVVQJMAo+ICsKPiArLyogY29tbWFuZCBzdGF0dXMgd3JhcHBlciAqLwo+ICtzdHJ1Y3Qg YnVsa19jc193cmFwIHsKPiArCV9fbGUzMglTaWduYXR1cmU7CS8qIGNvbnRhaW5zICdVU0JTJyAq Lwo+ICsJX191MzIJVGFnOwkJLyogc2FtZSBhcyBvcmlnaW5hbCBjb21tYW5kICovCj4gKwlfX2xl MzIJUmVzaWR1ZTsJLyogYW1vdW50IG5vdCB0cmFuc2ZlcnJlZCAqLwo+ICsJX191OAlTdGF0dXM7 CQkvKiBzZWUgYmVsb3cgKi8KPiArfTsKPiArCj4gKyNkZWZpbmUgVVNfQlVMS19DU19XUkFQX0xF TgkxMwo+ICsjZGVmaW5lIFVTX0JVTEtfQ1NfU0lHTgkJMHg1MzQyNTM1NSAgICAgIC8qIHNwZWxs cyBvdXQgJ1VTQlMnICovCj4gKyNkZWZpbmUgVVNfQlVMS19TVEFUX09LCQkwCj4gKyNkZWZpbmUg VVNfQlVMS19TVEFUX0ZBSUwJMQo+ICsjZGVmaW5lIFVTX0JVTEtfU1RBVF9QSEFTRQkyCj4gKwo+ ICsvKiBidWxrLW9ubHkgY2xhc3Mgc3BlY2lmaWMgcmVxdWVzdHMgKi8KPiArI2RlZmluZSBVU19C VUxLX1JFU0VUX1JFUVVFU1QgICAweGZmCj4gKyNkZWZpbmUgVVNfQlVMS19HRVRfTUFYX0xVTiAg ICAgMHhmZQo+ICsKPiArI2VuZGlmCj4gCgotLSAKUGVuZ3V0cm9uaXggZS5LLiAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKU3RldWVyd2Fs ZGVyIFN0ci4gMjEgICAgICAgICAgICAgICAgICAgICAgIHwgaHR0cDovL3d3dy5wZW5ndXRyb25p eC5kZS8gIHwKMzExMzcgSGlsZGVzaGVpbSwgR2VybWFueSAgICAgICAgICAgICAgICAgIHwgUGhv bmU6ICs0OS01MTIxLTIwNjkxNy0wICAgIHwKQW10c2dlcmljaHQgSGlsZGVzaGVpbSwgSFJBIDI2 ODYgICAgICAgICAgIHwgRmF4OiAgICs0OS01MTIxLTIwNjkxNy01NTU1IHwKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmJhcmVib3ggbWFpbGluZyBsaXN0 CmJhcmVib3hAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2JhcmVib3gK