From mboxrd@z Thu Jan 1 00:00:00 1970 From: jassi brar Subject: Re: [PATCH] SPI slave driver for Intel's Moorestown platform Date: Thu, 21 Jan 2010 11:46:38 +0900 Message-ID: <1b68c6791001201846pe794b32q1338a9290b50efa0@mail.gmail.com> References: <1261528613.17041.3.camel@ubuntu-vmware> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: spi mailing list , Ken Mills To: Grant Likely Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: spi-devel-general-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org List-Id: linux-spi.vger.kernel.org T24gVGh1LCBKYW4gMjEsIDIwMTAgYXQgMTI6MjggQU0sIEdyYW50IExpa2VseQo8Z3JhbnQubGlr ZWx5QHNlY3JldGxhYi5jYT4gd3JvdGU6Cj4gSGkgS2VuLAo+Cj4gVGhhbmtzIGZvciB0aGUgcGF0 Y2guIMKgU29tZSBjb21tZW50cyBiZWxvdy4KPgo+IE9uIFR1ZSwgRGVjIDIyLCAyMDA5IGF0IDU6 MzYgUE0sIEtlbiBNaWxscyA8a2VuLmsubWlsbHNAaW50ZWwuY29tPiB3cm90ZToKPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvc3BpL21yc3Rfc3BpX3NsYXZlLmMgYi9kcml2ZXJzL3NwaS9tcnN0X3Nw aV9zbGF2ZS5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLjcxODBl Y2UKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL3NwaS9tcnN0X3NwaV9zbGF2ZS5j Cj4+IEBAIC0wLDAgKzEsMTEzNiBAQAo+PiArLyoKPj4gKyAqIMKgbXJzdF9zcGlfc2xhdmUuYyAt IE1vb3Jlc3Rvd24gU1BJIHNsYXZlIGNvbnRyb2xsZXIgZHJpdmVyCj4KPiBEcm9wIHRoZSBmaWxl IG5hbWUgZnJvbSB0aGUgY29tbWVudC4gwqBGaWxlIG5hbWVzIG9mdGVuIGNoYW5nZS4gwqBBbGwg eW91Cj4gbmVlZCBoZXJlIGlzIHRoZSBzdGF0ZW1lbnQgb2Ygd2hhdCB0aGUgZHJpdmVyIGlzLgo+ Cj4+ICsgKiDCoGJhc2VkIG9uIHB4YTJ4eF9zcGkuYwo+PiArICoKPj4gKyAqIMKgQ29weXJpZ2h0 IChDKSBJbnRlbCAyMDA5Cj4+ICsgKiDCoEtlbiBNaWxscyA8a2VuLmsubWlsbHNAaW50ZWwuY29t Pgo+PiArICoKPj4gKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Cj4+ICsgKgo+PiArICogwqBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQo+PiArICogwqBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo+PiArICogwqB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgo+PiArICogwqAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+PiArICoKPj4gKyAqIMKgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4+ ICsgKiDCoGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCj4+ICsgKiDCoE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gwqBTZWUgdGhlCj4+ICsgKiDCoEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4+ICsgKgo+PiArICogwqBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQo+PiArICog wqBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0 d2FyZQo+PiArICogwqBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMz MCwgQm9zdG9uLCBNQSDCoDAyMTExLTEzMDcgwqBVU0EKPj4gKyAqCj4+ICsgKiB+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fgo+Cj4gUGxlYXNlIGRyb3AgdGhlIH5+fn4gaG9yaXpvbnRhbCBydWxlcy4gwqBBbmQg dW5sZXNzIEludGVsIGxlZ2FsIGluc2lzdHMKPiBvbiB0aGUgMyBwYXJhZ3JhcGggbGljZW5zZSB0 ZXh0LCBJIHRoaW5rIGp1c3QgdGhlIGZpcnN0IHBhcmFncmFwaCBpcwo+IG5lY2Vzc2FyeS4gwqBJ IGxpa2UgdG8gc2VlIGJvaWxlcnBsYXRlIGtlcHQgdG8gYSBtaW5pbXVtIGluIGZpbGVzIHNvIGl0 Cj4gaXMgZWFzeSB0byBnbGVhbiBvdXQgdGhlIGVzc2VudGlhbCBpbmZvcm1hdGlvbiBhdCBhIGds YW5jZS4KPgo+PiArICoKPj4gKyAqLwo+PiArCj4+ICsvKgo+PiArICogTm90ZToKPj4gKyAqCj4+ ICsgKiBTdXBwb3J0cyBpbnRlcnJ1cHQgcHJvZ3JhbW1lZCBJL08sIERNQSBhbmQgbm9uLWludGVy cnVwdCBwb2xsZWQgdHJhbnNmZXJzLgo+PiArICoKPj4gKyAqLwo+PiArCj4+ICsjaW5jbHVkZSA8 bGludXgvZGVsYXkuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+Cj4+ICsjaW5jbHVk ZSA8bGludXgvcGNpLmg+Cj4+ICsKPj4gKyNpZmRlZiBDT05GSUdfU1BJX01SU1RfU0xBVkVfRE1B Cj4+ICsjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9s bndfZG1hLmg+Cj4+ICsjZW5kaWYKPj4gKwo+PiArI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4K Pj4gKyNpbmNsdWRlIDxsaW51eC9zcGkvbXJzdF9zcGlfc2xhdmUuaD4KPj4gKwo+PiArCj4+ICsj ZGVmaW5lIERSSVZFUl9OQU1FICJtcnN0X3NwaV9zbGF2ZSIKPgo+IERSSVZFUl9OQU1FIGlzIHVz ZWQgaW4gZXhhY3RseSAxIHBsYWNlLiDCoFBsZWFzZSBkcm9wIHRoaXMgbGluZS4KPgo+PiArCj4+ ICsjZGVmaW5lIFNTUF9OT1RfU1lOQyAweDQwMDAwMAo+PiArCj4+ICtNT0RVTEVfQVVUSE9SKCIi KTsKPgo+IEVpdGhlciBmaWxsIGluLCBvciBkcm9wIHRoaXMgbGluZS4KPgo+PiArTU9EVUxFX0RF U0NSSVBUSU9OKCJNb29yZXN0b3duIFNQSSBTbGF2ZSBDb250b2xsZXIiKTsKPj4gK01PRFVMRV9M SUNFTlNFKCJHUEwiKTsKPj4gKwo+PiArLyoKPj4gKyAqIEZvciB0ZXN0aW5nIFNTQ1IxIGNoYW5n ZXMgdGhhdCByZXF1aXJlIFNTUCByZXN0YXJ0LCBiYXNpY2FsbHkKPj4gKyAqIGV2ZXJ5dGhpbmcg ZXhjZXB0IHRoZSBzZXJ2aWNlIGFuZCBpbnRlcnJ1cHQgZW5hYmxlcwo+PiArICovCj4+ICsjZGVm aW5lIFNTQ1IxX0NIQU5HRV9NQVNLIChTU0NSMV9UVEVMUCB8IFNTQ1IxX1RURSB8IFNTQ1IxX0VC Q0VJIHwgU1NDUjFfU0NGUiBcCj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgfCBTU0NSMV9FQ1JBIHwgU1NDUjFfRUNSQiB8IFNTQ1IxX1NDTEtESVIgXAo+ PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHwgU1NDUjFf U0ZSTURJUiBcCj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgfCBTU0NSMV9SV09UIHwgU1NDUjFfVFJBSUwgfCBTU0NSMV9QSU5URSBcCj4+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfCBTU0NSMV9TVFJGIHwgU1ND UjFfRUZXUiB8IFNTQ1IxX1JGVCBcCj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgfCBTU0NSMV9URlQgfCBTU0NSMV9TUEggfCBTU0NSMV9TUE8pCj4+ICsK Pj4gKyNkZWZpbmUgREVGSU5FX1NTUF9SRUcocmVnLCBvZmYpIFwKPj4gK3N0YXRpYyBpbmxpbmUg dTMyIHJlYWRfIyNyZWcodm9pZCAqcCkgeyByZXR1cm4gX19yYXdfcmVhZGwocCArIChvZmYpKTsg fSBcCj4+ICtzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfIyNyZWcodTMyIHYsIHZvaWQgKnApIHsg X19yYXdfd3JpdGVsKHYsIHAgKyAob2ZmKSk7IH0KPgo+IEV2ZW4gdGhvdWdoIHRoZXkgYXJlIHJl c3RyaWN0ZWQgdG8gdGhlIGZpbGUgc2NvcGUsIHN0YXRpYyBnbG9iYWxzIHN0aWxsCj4gY29tcGV0 ZSB3aXRoIHRoZSBnbG9iYWwgbmFtZXNwYWNlLiDCoEl0IGlzIGdvb2QgcHJhY3Rpc2UgdG8gcHJl Zml4IGFsbAo+IGdsb2JhbCBzdGF0aWNzIHdpdGggYSBkcml2ZXIgcHJlZml4LiDCoFRoaXMgZ29l cyBmb3IgYWxsIGRlY2xhcmF0aW9uczsKPiB2YXJpYWJsZXMsIGZ1bmN0aW9ucyBhbmQgc3RydWN0 dXJlcy4KPgo+IEFkZGluZyBhIHByZWZpeCBhbHNvIG1ha2VzIGl0IGVhc2llciB0byBkaWZmZXJl bnRpYXRlIGJldHdlZW4gZHJpdmVyIGxvY2FsCj4gc3R1ZmYgYW5kIGNvbW1vbiBmdW5jdGlvbnMg d2hlbiByZXZpZXdpbmcgY29kZS4KPgo+PiArI2RlZmluZSBTVEFSVF9TVEFURSAoKHZvaWQgKikw KQo+PiArI2RlZmluZSBSVU5OSU5HX1NUQVRFICgodm9pZCAqKTEpCj4+ICsjZGVmaW5lIERPTkVf U1RBVEUgKCh2b2lkICopMikKPj4gKyNkZWZpbmUgRVJST1JfU1RBVEUgKCh2b2lkICopLTEpCj4K PiBUaGlzIGxvb2tzIHByZXR0eSB1Z2x5LCBhbmQgd2hpbGUgdGhlIHN0YXRlIHBvaW50ZXIgZ2V0 cyBzZXQgdG8gdGhlc2UKPiB2YWx1ZXMsIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBhY3R1YWxseSB1 c2VkIGFueXdoZXJlLgo+Cj4+ICsKPj4gK3N0cnVjdCBjaGlwX2RhdGEgewo+PiArIMKgIMKgIMKg IHUzMiBjcjA7Cj4+ICsgwqAgwqAgwqAgdTMyIGNyMTsKPj4gKyDCoCDCoCDCoCB1MzIgcHNwOwo+ PiArIMKgIMKgIMKgIHUzMiB0aW1lb3V0Owo+PiArIMKgIMKgIMKgIHU4IG5fYnl0ZXM7Cj4+ICsg wqAgwqAgwqAgdTMyIHRocmVzaG9sZDsKPj4gKyDCoCDCoCDCoCB1OCBlbmFibGVfZG1hOwo+PiAr IMKgIMKgIMKgIHU4IHBvbGxfbW9kZTsgwqAgwqAgLyogMSBtZWFucyB1c2UgcG9sbCBtb2RlICov Cj4+ICsgwqAgwqAgwqAgdTggYml0c19wZXJfd29yZDsKPj4gKyDCoCDCoCDCoCBpbnQgKCp3cml0 ZSkoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSk7Cj4+ICsgwqAgwqAgwqAgaW50ICgqcmVh ZCkoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSk7Cj4+ICt9Owo+PiArCj4+ICtzdGF0aWMg dm9pZCBmbHVzaChzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQo+PiArewo+PiArIMKgIMKg IMKgIHZvaWQgKnJlZyA9IGRydl9kYXRhLT5pb2FkZHI7Cj4+ICsgwqAgwqAgwqAgdTMyIHNzc3I7 Cj4+ICsKPj4gKyDCoCDCoCDCoCAvKiBJZiB0aGUgdHJhbnNtaXQgZmlmbyBpcyBub3QgZW1wdHks IHJlc2V0IHRoZSBpbnRlcmZhY2UuICovCj4+ICsgwqAgwqAgwqAgc3NzciA9IHJlYWRfU1NTUihy ZWcpOwo+PiArIMKgIMKgIMKgIGlmICgoc3NzciAmIDB4ZjAwKSB8fCAoc3NzciAmIFNTU1JfVE5G KSA9PSAwKSB7Cj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgd3JpdGVfU1NDUjAocmVhZF9TU0NS MChyZWcpICYgflNTQ1IwX1NTRSwgcmVnKTsKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1 cm47Cj4+ICsgwqAgwqAgwqAgfQo+PiArCj4+ICsgwqAgwqAgwqAgd2hpbGUgKHJlYWRfU1NTUihy ZWcpICYgU1NTUl9STkUpCj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmVhZF9TU0RSKHJlZyk7 Cj4+ICsKPj4gKyDCoCDCoCDCoCB3cml0ZV9TU1NSKFNTU1JfUk9SLCByZWcpOwo+PiArIMKgIMKg IMKgIHdyaXRlX1NTU1IoU1NTUl9UVVIsIHJlZyk7Cj4+ICsKPj4gKyDCoCDCoCDCoCByZXR1cm47 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgbnVsbF93cml0ZXIoc3RydWN0IGRyaXZlcl9kYXRh ICpkcnZfZGF0YSkKPj4gK3sKPj4gKyDCoCDCoCDCoCB2b2lkICpyZWcgPSBkcnZfZGF0YS0+aW9h ZGRyOwo+PiArIMKgIMKgIMKgIHU4IG5fYnl0ZXMgPSBkcnZfZGF0YS0+bl9ieXRlczsKPj4gKwo+ PiArIMKgIMKgIMKgIGlmICgoKHJlYWRfU1NTUihyZWcpICYgMHgwMDAwMGYwMCkgPT0gMHgwMDAw MGYwMCkKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB8fCAoZHJ2X2RhdGEtPnR4ID09IGRydl9k YXRhLT50eF9lbmQpKQo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiAwOwo+PiArCj4+ ICsgwqAgwqAgwqAgd3JpdGVfU1NEUigwLCByZWcpOwo+PiArIMKgIMKgIMKgIGRydl9kYXRhLT50 eCArPSBuX2J5dGVzOwo+PiArCj4+ICsgwqAgwqAgwqAgcmV0dXJuIDE7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyBpbnQgbnVsbF9yZWFkZXIoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKPj4g K3sKPj4gKyDCoCDCoCDCoCB2b2lkICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOwo+PiArIMKgIMKg IMKgIHU4IG5fYnl0ZXMgPSBkcnZfZGF0YS0+bl9ieXRlczsKPj4gKwo+PiArIMKgIMKgIMKgIHdo aWxlICgocmVhZF9TU1NSKHJlZykgJiBTU1NSX1JORSkKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCAmJiAoZHJ2X2RhdGEtPnJ4IDwgZHJ2X2RhdGEtPnJ4X2VuZCkpIHsKPj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCByZWFkX1NTRFIocmVnKTsKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkcnZf ZGF0YS0+cnggKz0gbl9ieXRlczsKPj4gKyDCoCDCoCDCoCB9Cj4+ICsKPj4gKyDCoCDCoCDCoCBy ZXR1cm4gZHJ2X2RhdGEtPnJ4ID09IGRydl9kYXRhLT5yeF9lbmQ7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyBpbnQgdThfd3JpdGVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCj4+ICt7Cj4+ ICsgwqAgwqAgwqAgdm9pZCAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKPj4gKyDCoCDCoCDCoCBp ZiAoKChyZWFkX1NTU1IocmVnKSAmIDB4MDAwMDBmMDApID09IDB4MDAwMDBmMDApCj4+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgfHwgKGRydl9kYXRhLT50eCA9PSBkcnZfZGF0YS0+dHhfZW5kKSkK Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gMDsKPj4gKwo+PiArIMKgIMKgIMKgIHdy aXRlX1NTRFIoKih1OCAqKShkcnZfZGF0YS0+dHgpLCByZWcpOwo+PiArIMKgIMKgIMKgICsrZHJ2 X2RhdGEtPnR4Owo+PiArCj4+ICsgwqAgwqAgwqAgcmV0dXJuIDE7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyBpbnQgdThfcmVhZGVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCj4+ICt7Cj4+ ICsgwqAgwqAgwqAgdm9pZCAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKPj4gKyDCoCDCoCDCoCB3 aGlsZSAoKHJlYWRfU1NTUihyZWcpICYgU1NTUl9STkUpCj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgJiYgKGRydl9kYXRhLT5yeCA8IGRydl9kYXRhLT5yeF9lbmQpKSB7Cj4+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgKih1OCAqKShkcnZfZGF0YS0+cngpID0gcmVhZF9TU0RSKHJlZyk7Cj4+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgKytkcnZfZGF0YS0+cng7Cj4+ICsgwqAgwqAgwqAgfQo+PiAr Cj4+ICsgwqAgwqAgwqAgcmV0dXJuIGRydl9kYXRhLT5yeCA9PSBkcnZfZGF0YS0+cnhfZW5kOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHUxNl93cml0ZXIoc3RydWN0IGRyaXZlcl9kYXRhICpk cnZfZGF0YSkKPj4gK3sKPj4gKyDCoCDCoCDCoCB2b2lkICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRy Owo+PiArIMKgIMKgIMKgIGlmICgoKHJlYWRfU1NTUihyZWcpICYgMHgwMDAwMGYwMCkgPT0gMHgw MDAwMGYwMCkKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB8fCAoZHJ2X2RhdGEtPnR4ID09IGRy dl9kYXRhLT50eF9lbmQpKQo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiAwOwo+PiAr Cj4+ICsgwqAgwqAgwqAgd3JpdGVfU1NEUigqKHUxNiAqKShkcnZfZGF0YS0+dHgpLCByZWcpOwo+ PiArIMKgIMKgIMKgIGRydl9kYXRhLT50eCArPSAyOwo+PiArCj4+ICsgwqAgwqAgwqAgcmV0dXJu IDE7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdTE2X3JlYWRlcihzdHJ1Y3QgZHJpdmVyX2Rh dGEgKmRydl9kYXRhKQo+PiArewo+PiArIMKgIMKgIMKgIHZvaWQgKnJlZyA9IGRydl9kYXRhLT5p b2FkZHI7Cj4+ICsgwqAgwqAgwqAgd2hpbGUgKChyZWFkX1NTU1IocmVnKSAmIFNTU1JfUk5FKQo+ PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgICYmIChkcnZfZGF0YS0+cnggPCBkcnZfZGF0YS0+cnhf ZW5kKSkgewo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgICoodTE2ICopKGRydl9kYXRhLT5yeCkg PSByZWFkX1NTRFIocmVnKTsKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkcnZfZGF0YS0+cngg Kz0gMjsKPj4gKyDCoCDCoCDCoCB9Cj4+ICsKPj4gK3JldHVybiBkcnZfZGF0YS0+cnggPT0gZHJ2 X2RhdGEtPnJ4X2VuZDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCB1MzJfd3JpdGVyKHN0cnVj dCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCj4+ICt7Cj4+ICt2b2lkICpyZWcgPSBkcnZfZGF0YS0+ aW9hZGRyOwo+PiArIMKgIMKgIMKgIGlmICgoKHJlYWRfU1NTUihyZWcpICYgMHgwMDAwMGYwMCkg PT0gMHgwMDAwMGYwMCkKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB8fCAoZHJ2X2RhdGEtPnR4 ID09IGRydl9kYXRhLT50eF9lbmQpKQo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiAw Owo+PiArCj4+ICsgwqAgwqAgwqAgd3JpdGVfU1NEUigqKHUzMiAqKShkcnZfZGF0YS0+dHgpLCBy ZWcpOwo+PiArIMKgIMKgIMKgIGRydl9kYXRhLT50eCArPSA0Owo+PiArCj4+ICsgwqAgwqAgwqAg cmV0dXJuIDE7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdTMyX3JlYWRlcihzdHJ1Y3QgZHJp dmVyX2RhdGEgKmRydl9kYXRhKQo+PiArewo+PiArIMKgIMKgIMKgIHZvaWQgKnJlZyA9IGRydl9k YXRhLT5pb2FkZHI7Cj4+ICsgwqAgwqAgwqAgd2hpbGUgKChyZWFkX1NTU1IocmVnKSAmIFNTU1Jf Uk5FKQo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgICYmIChkcnZfZGF0YS0+cnggPCBkcnZfZGF0 YS0+cnhfZW5kKSkgewo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgICoodTMyICopKGRydl9kYXRh LT5yeCkgPSByZWFkX1NTRFIocmVnKTsKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkcnZfZGF0 YS0+cnggKz0gNDsKPj4gKyDCoCDCoCDCoCB9Cj4+ICsKPj4gKyDCoCDCoCDCoCByZXR1cm4gZHJ2 X2RhdGEtPnJ4ID09IGRydl9kYXRhLT5yeF9lbmQ7Cj4+ICt9Cj4+ICsKPj4gKwo+PiArCj4+ICsv KiBjYWxsZXIgYWxyZWFkeSBzZXQgbWVzc2FnZS0+c3RhdHVzOyBkbWEgYW5kIHBpbyBpcnFzIGFy ZSBibG9ja2VkICovCj4+ICtzdGF0aWMgdm9pZCBnaXZlYmFjayhzdHJ1Y3QgZHJpdmVyX2RhdGEg KmRydl9kYXRhKQo+PiArewo+PiArIMKgIMKgIMKgIHN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnOwo+ PiArCj4+ICsgwqAgwqAgwqAgbXNnID0gZHJ2X2RhdGEtPmN1cl9tc2c7Cj4+ICsgwqAgwqAgwqAg bXNnLT5zdGF0ZSA9IE5VTEw7Cj4+ICsgwqAgwqAgwqAgaWYgKG1zZy0+Y29tcGxldGUpCj4+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgbXNnLT5jb21wbGV0ZShtc2ctPmNvbnRleHQpOwo+PiArfQo+ PiArCj4+ICsjaWZkZWYgQ09ORklHX1NQSV9NUlNUX1NMQVZFX0RNQQo+PiArCj4+ICtzdGF0aWMg Ym9vbCBjaGFuX2ZpbHRlcihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHZvaWQgKnBhcmFtKQo+PiAr ewo+PiArIMKgIMKgIMKgIHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSAoc3RydWN0IGRy aXZlcl9kYXRhICopcGFyYW07Cj4+ICsgwqAgwqAgwqAgYm9vbCByZXQgPSBmYWxzZTsKPj4gKwo+ PiArIMKgIMKgIMKgIGlmICghZHJ2X2RhdGEtPmRtYWMxKQo+PiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIHJldHVybiByZXQ7Cj4+ICsKPj4gKyDCoCDCoCDCoCBpZiAoY2hhbi0+ZGV2aWNlLT5kZXYg PT0gJmRydl9kYXRhLT5kbWFjMS0+ZGV2KQo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldCA9 IHRydWU7Cj4+ICsKPj4gKyDCoCDCoCDCoCByZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0 aWMgdm9pZCBpbnRfdHJhbnNmZXJfY29tcGxldGUoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0 YSk7Cj4+ICtzdGF0aWMgdm9pZCB1bm1hcF9kbWFfYnVmZmVycyhzdHJ1Y3QgZHJpdmVyX2RhdGEg KmRydl9kYXRhKTsKPj4gKwo+PiArc3RhdGljIHZvaWQgbXJzdF9zcGlfZG1hX2RvbmUodm9pZCAq YXJnKQo+PiArewo+PiArIMKgIMKgIMKgIHU2NCAqcGFyYW0gPSBhcmc7Cj4+ICsgwqAgwqAgwqAg c3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YTsKPj4gKyDCoCDCoCDCoCBpbnQgKmRvbmU7Cj4+ ICsKPj4gKyDCoCDCoCDCoCBkcnZfZGF0YSA9IChzdHJ1Y3QgZHJpdmVyX2RhdGEgKikodTMyKSgq cGFyYW0gPj4gMzIpOwo+PiArIMKgIMKgIMKgIGRvbmUgPSAoaW50ICopKHUzMikoKnBhcmFtICYg MHhmZmZmZmZmZik7Cj4+ICsgwqAgwqAgwqAgKmRvbmUgPSAxOwo+PiArCj4+ICsgwqAgwqAgwqAg dW5tYXBfZG1hX2J1ZmZlcnMoZHJ2X2RhdGEpOwo+PiArCj4+ICsgwqAgwqAgwqAgaWYgKCFkcnZf ZGF0YS0+dHhkbWFfZG9uZSB8fCAhZHJ2X2RhdGEtPnJ4ZG1hX2RvbmUpCj4+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgcmV0dXJuOwo+PiArIMKgIMKgIMKgIGludF90cmFuc2Zlcl9jb21wbGV0ZShk cnZfZGF0YSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIG1yc3Rfc3BpX2RtYV9pbml0KHN0 cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCj4+ICt7Cj4+ICsgwqAgwqAgwqAgc3RydWN0IGxu d19kbWFfc2xhdmUgKnJ4cywgKnR4czsKPj4gKyDCoCDCoCDCoCBkbWFfY2FwX21hc2tfdCBtYXNr Owo+PiArCj4+ICsgwqAgwqAgwqAgLyogVXNlIERNQUMxICovCj4+ICsgwqAgwqAgwqAgZHJ2X2Rh dGEtPmRtYWMxID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgwODE0LCBO VUxMKTsKPj4gKyDCoCDCoCDCoCBpZiAoIWRydl9kYXRhLT5kbWFjMSkgewo+PiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIHByaW50ayhLRVJOX1dBUk5JTkcgIlNQSSBTbGF2ZTpDYW4ndCBmaW5kIERN QUMxXG4iKTsKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm47Cj4+ICsgwqAgwqAgwqAg fQo+PiArCj4+ICsvKiAxLiBpbml0IHJ4IGNoYW5uZWwgKi8KPj4gKyDCoCDCoCDCoCByeHMgPSAm ZHJ2X2RhdGEtPmRtYXNfcng7Cj4+ICsKPj4gKyDCoCDCoCDCoCByeHMtPmRpcm4gPSBETUFfRlJP TV9ERVZJQ0U7Cj4+ICsgwqAgwqAgwqAgcnhzLT5oc19tb2RlID0gTE5XX0RNQV9IV19IUzsKPj4g KyDCoCDCoCDCoCByeHMtPmNmZ19tb2RlID0gTE5XX0RNQV9QRVJfVE9fTUVNOwo+PiArIMKgIMKg IMKgIHJ4cy0+c3JjX3dpZHRoID0gTE5XX0RNQV9XSURUSF8xNkJJVDsKPj4gKyDCoCDCoCDCoCBy eHMtPmRzdF93aWR0aCA9IExOV19ETUFfV0lEVEhfMzJCSVQ7Cj4+ICsgwqAgwqAgwqAgcnhzLT5z cmNfbXNpemUgPSBMTldfRE1BX01TSVpFXzg7Cj4+ICsgwqAgwqAgwqAgcnhzLT5kc3RfbXNpemUg PSBMTldfRE1BX01TSVpFXzg7Cj4+ICsKPj4gKwo+PiArIMKgIMKgIMKgIGRtYV9jYXBfemVybyht YXNrKTsKPj4gKyDCoCDCoCDCoCBkbWFfY2FwX3NldChETUFfTUVNQ1BZLCBtYXNrKTsKPj4gKyDC oCDCoCDCoCBkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOwo+PiArCj4+ICsgwqAgwqAgwqAg ZHJ2X2RhdGEtPnJ4Y2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW5uZWwobWFzaywgY2hhbl9maWx0ZXIs IGRydl9kYXRhKTsKPj4gKyDCoCDCoCDCoCBpZiAoIWRydl9kYXRhLT5yeGNoYW4pCj4+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgZ290byBlcnJfZXhpdDsKPj4gKwo+PiArIMKgIMKgIMKgIGRydl9k YXRhLT5yeGNoYW4tPnByaXZhdGUgPSByeHM7Cj4+ICsKPj4gKyDCoCDCoCDCoCAvKiAyLiBpbml0 IHR4IGNoYW5uZWwgKi8KPj4gKyDCoCDCoCDCoCB0eHMgPSAmZHJ2X2RhdGEtPmRtYXNfdHg7Cj4+ ICsKPj4gKyDCoCDCoCDCoCB0eHMtPmRpcm4gPSBETUFfVE9fREVWSUNFOwo+PiArIMKgIMKgIMKg IHR4cy0+aHNfbW9kZSA9IExOV19ETUFfSFdfSFM7Cj4+ICsgwqAgwqAgwqAgdHhzLT5jZmdfbW9k ZSA9IExOV19ETUFfTUVNX1RPX1BFUjsKPj4gKyDCoCDCoCDCoCB0eHMtPnNyY193aWR0aCA9IExO V19ETUFfV0lEVEhfMzJCSVQ7Cj4+ICsgwqAgwqAgwqAgdHhzLT5kc3Rfd2lkdGggPSBMTldfRE1B X1dJRFRIXzE2QklUOwo+PiArIMKgIMKgIMKgIHR4cy0+c3JjX21zaXplID0gTE5XX0RNQV9NU0la RV84Owo+PiArIMKgIMKgIMKgIHR4cy0+ZHN0X21zaXplID0gTE5XX0RNQV9NU0laRV84Owo+PiAr Cj4+ICsKPj4gKyDCoCDCoCDCoCBkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOwo+PiArIMKg IMKgIMKgIGRtYV9jYXBfc2V0KERNQV9NRU1DUFksIG1hc2spOwo+PiArCj4+ICsgwqAgwqAgwqAg ZHJ2X2RhdGEtPnR4Y2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW5uZWwobWFzaywgY2hhbl9maWx0ZXIs IGRydl9kYXRhKTsKPj4gKyDCoCDCoCDCoCBpZiAoIWRydl9kYXRhLT50eGNoYW4pCj4+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgZ290byBmcmVlX3J4Y2hhbjsKPj4gKyDCoCDCoCDCoCBlbHNlCj4+ ICsKPj4gKyDCoCDCoCDCoCBkcnZfZGF0YS0+dHhjaGFuLT5wcml2YXRlID0gdHhzOwo+PiArCj4+ ICsgwqAgwqAgwqAgLyogc2V0IHRoZSBkbWEgZG9uZSBiaXQgdG8gMSAqLwo+PiArIMKgIMKgIMKg IGRydl9kYXRhLT50eGRtYV9kb25lID0gMTsKPj4gKyDCoCDCoCDCoCBkcnZfZGF0YS0+cnhkbWFf ZG9uZSA9IDE7Cj4+ICsKPj4gKyDCoCDCoCDCoCBkcnZfZGF0YS0+dHhfcGFyYW0gPSAoKHU2NCko dTMyKWRydl9kYXRhIDw8IDMyKQo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHwgKHUzMikoJmRy dl9kYXRhLT50eGRtYV9kb25lKTsKPj4gKyDCoCDCoCDCoCBkcnZfZGF0YS0+cnhfcGFyYW0gPSAo KHU2NCkodTMyKWRydl9kYXRhIDw8IDMyKQo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHwgKHUz MikoJmRydl9kYXRhLT5yeGRtYV9kb25lKTsKPj4gKyDCoCDCoCDCoCByZXR1cm47Cj4+ICsKPj4g K2ZyZWVfcnhjaGFuOgo+PiArIMKgIMKgIMKgIHByaW50ayhLRVJOX0VSUiAiU1BJLVNsYXZlIEVy cm9yIDogRE1BIENoYW5ubGUgTm90IGF2YWlsYWJsZVxuIik7Cj4+ICsgwqAgwqAgwqAgZG1hX3Jl bGVhc2VfY2hhbm5lbChkcnZfZGF0YS0+cnhjaGFuKTsKPj4gK2Vycl9leGl0Ogo+PiArIMKgIMKg IMKgIHByaW50ayhLRVJOX0VSUiAiU1BJLVNsYXZlIEVycm9yIDogRE1BIENoYW5uZWwgTm90IGF2 YWlsYWJsZVxuIik7Cj4+ICsgwqAgwqAgwqAgcGNpX2Rldl9wdXQoZHJ2X2RhdGEtPmRtYWMxKTsK Pj4gKyDCoCDCoCDCoCByZXR1cm47Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIG1yc3Rfc3Bp X2RtYV9leGl0KHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCj4+ICt7Cj4+ICsgwqAgwqAg wqAgZG1hX3JlbGVhc2VfY2hhbm5lbChkcnZfZGF0YS0+dHhjaGFuKTsKPj4gKyDCoCDCoCDCoCBk bWFfcmVsZWFzZV9jaGFubmVsKGRydl9kYXRhLT5yeGNoYW4pOwo+PiArIMKgIMKgIMKgIHBjaV9k ZXZfcHV0KGRydl9kYXRhLT5kbWFjMSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRtYV90 cmFuc2ZlcihzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQo+PiArewo+PiArIMKgIMKgIMKg IGRtYV9hZGRyX3Qgc3Nkcl9hZGRyOwo+PiArIMKgIMKgIMKgIHN0cnVjdCBkbWFfYXN5bmNfdHhf ZGVzY3JpcHRvciAqdHhkZXNjID0gTlVMTCwgKnJ4ZGVzYyA9IE5VTEw7Cj4+ICsgwqAgwqAgwqAg c3RydWN0IGRtYV9jaGFuICp0eGNoYW4sICpyeGNoYW47Cj4+ICsgwqAgwqAgwqAgZW51bSBkbWFf Y3RybF9mbGFncyBmbGFnOwo+PiArCj4+ICsgwqAgwqAgwqAgLyogZ2V0IERhdGEgUmVhZC9Xcml0 ZSBhZGRyZXNzICovCj4+ICsgwqAgwqAgwqAgc3Nkcl9hZGRyID0gKGRtYV9hZGRyX3QpKHUzMiko ZHJ2X2RhdGEtPnBhZGRyICsgMHgxMCk7Cj4+ICsKPj4gKyDCoCDCoCDCoCBpZiAoZHJ2X2RhdGEt PnR4X2RtYSkKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkcnZfZGF0YS0+dHhkbWFfZG9uZSA9 IDA7Cj4+ICsKPj4gKyDCoCDCoCDCoCBpZiAoZHJ2X2RhdGEtPnJ4X2RtYSkKPj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCBkcnZfZGF0YS0+cnhkbWFfZG9uZSA9IDA7Cj4+ICsKPj4gKyDCoCDCoCDC oCAvKiAyLiBzdGFydCB0aGUgVFggZG1hIHRyYW5zZmVyICovCj4+ICsgwqAgwqAgwqAgdHhjaGFu ID0gZHJ2X2RhdGEtPnR4Y2hhbjsKPj4gKyDCoCDCoCDCoCByeGNoYW4gPSBkcnZfZGF0YS0+cnhj aGFuOwo+PiArCj4+ICsgwqAgwqAgwqAgZmxhZyA9IERNQV9QUkVQX0lOVEVSUlVQVCB8IERNQV9D VFJMX0FDSzsKPj4gKwo+PiArIMKgIMKgIMKgIGlmIChkcnZfZGF0YS0+cnhfZG1hKSB7Cj4+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgcnhkZXNjID0gcnhjaGFuLT5kZXZpY2UtPmRldmljZV9wcmVw X2RtYV9tZW1jcHkKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCAocnhjaGFuLCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoC8qIERNQSBDaGFubmVsICovCj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg ZHJ2X2RhdGEtPnJ4X2RtYSwgwqAgwqAgwqAgLyogREFSICovCj4+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgc3Nkcl9hZGRyLCDCoCDCoCDCoCDCoCDCoCDCoCDCoC8qIFNBUiAqLwo+PiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIGRydl9kYXRhLT5sZW4sIMKgIMKgIMKgIMKgIMKgLyogRGF0YSBMZW5n dGggKi8KPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBmbGFnKTsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAvKiBGbGFnICovCj4+ICsKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCByeGRlc2Mt PmNhbGxiYWNrID0gbXJzdF9zcGlfZG1hX2RvbmU7Cj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg cnhkZXNjLT5jYWxsYmFja19wYXJhbSA9ICZkcnZfZGF0YS0+cnhfcGFyYW07Cj4+ICsgwqAgwqAg wqAgfQo+PiArCj4+ICsvKiAzLiBzdGFydCB0aGUgUlggZG1hIHRyYW5zZmVyICovCj4+ICsgwqAg wqAgwqAgaWYgKGRydl9kYXRhLT50eF9kbWEpIHsKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0 eGRlc2MgPSB0eGNoYW4tPmRldmljZS0+ZGV2aWNlX3ByZXBfZG1hX21lbWNweQo+PiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgICh0eGNoYW4sIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgLyogRE1BIENo YW5uZWwgKi8KPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzc2RyX2FkZHIsIMKgIMKgIMKgIMKg IMKgIMKgIMKgLyogREFSICovCj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZHJ2X2RhdGEtPnR4 X2RtYSwgwqAgwqAgwqAgLyogU0FSICovCj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZHJ2X2Rh dGEtPmxlbiwgwqAgwqAgwqAgwqAgwqAvKiBEYXRhIExlbmd0aCAqLwo+PiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIGZsYWcpOyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoC8qIEZsYWcgKi8KPj4g Kwo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHR4ZGVzYy0+Y2FsbGJhY2sgPSBtcnN0X3NwaV9k bWFfZG9uZTsKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0eGRlc2MtPmNhbGxiYWNrX3BhcmFt ID0gJmRydl9kYXRhLT50eF9wYXJhbTsKPj4gKyDCoCDCoCDCoCB9Cj4+ICsKPj4gKyDCoCDCoCDC oCBpZiAocnhkZXNjKQo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJ4ZGVzYy0+dHhfc3VibWl0 KHJ4ZGVzYyk7Cj4+ICsgwqAgwqAgwqAgaWYgKHR4ZGVzYykKPj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCB0eGRlc2MtPnR4X3N1Ym1pdCh0eGRlc2MpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50 IG1hcF9kbWFfYnVmZmVycyhzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQo+PiArewo+PiAr IMKgIMKgIMKgIHN0cnVjdCBkZXZpY2UgKmRldiA9ICZkcnZfZGF0YS0+cGRldi0+ZGV2Owo+PiAr Cj4+ICsgwqAgwqAgwqAgaWYgKGRydl9kYXRhLT5kbWFfbWFwcGVkKQo+PiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIHJldHVybiAxOwo+PiArCj4+ICsgwqAgwqAgwqAgZHJ2X2RhdGEtPnR4X2RtYSA9 Cj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZG1hX21hcF9zaW5nbGUoZGV2LCBkcnZfZGF0YS0+ dHgsIGRydl9kYXRhLT5sZW4sCj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg UENJX0RNQV9UT0RFVklDRSk7Cj4+ICsgwqAgwqAgwqAgaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRl diwgZHJ2X2RhdGEtPnR4X2RtYSkpCj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIDA7 Cj4+ICsKPj4gKyDCoCDCoCDCoCBkcnZfZGF0YS0+cnhfZG1hID0KPj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCBkbWFfbWFwX3NpbmdsZShkZXYsIGRydl9kYXRhLT5yeCwgZHJ2X2RhdGEtPmxlbiwK Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBQQ0lfRE1BX0ZST01ERVZJQ0Up Owo+PiArIMKgIMKgIMKgIGlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIGRydl9kYXRhLT5yeF9k bWEpKSB7Cj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZG1hX3VubWFwX3NpbmdsZShkZXYsIGRy dl9kYXRhLT50eF9kbWEsCj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZHJ2 X2RhdGEtPnR4X21hcF9sZW4sIERNQV9UT19ERVZJQ0UpOwo+PiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIHJldHVybiAwOwo+PiArIMKgIMKgIMKgIH0KPj4gKwo+PiArIMKgIMKgIMKgIHJldHVybiAx Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCB1bm1hcF9kbWFfYnVmZmVycyhzdHJ1Y3QgZHJp dmVyX2RhdGEgKmRydl9kYXRhKQo+PiArewo+PiArIMKgIMKgIMKgIHN0cnVjdCBkZXZpY2UgKmRl diA9ICZkcnZfZGF0YS0+cGRldi0+ZGV2Owo+PiArCj4+ICsgwqAgwqAgwqAgaWYgKCFkcnZfZGF0 YS0+ZG1hX21hcHBlZCkKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm47Cj4+ICsgwqAg wqAgwqAgZG1hX3VubWFwX3NpbmdsZShkZXYsIGRydl9kYXRhLT5yeF9kbWEsIGRydl9kYXRhLT5s ZW4sCj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgUENJX0RNQV9GUk9NREVWSUNFKTsKPj4gKyDC oCDCoCDCoCBkbWFfdW5tYXBfc2luZ2xlKGRldiwgZHJ2X2RhdGEtPnR4X2RtYSwgZHJ2X2RhdGEt PmxlbiwKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBQQ0lfRE1BX1RPREVWSUNFKTsKPj4gKyDC oCDCoCDCoCBkcnZfZGF0YS0+ZG1hX21hcHBlZCA9IDA7Cj4+ICt9Cj4+ICsKPj4gKyNlbmRpZgo+ PiArCj4+ICtzdGF0aWMgdm9pZCBpbnRfZXJyb3Jfc3RvcChzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRy dl9kYXRhLCBjb25zdCBjaGFyKiBtc2cpCj4+ICt7Cj4+ICsgwqAgwqAgwqAgdm9pZCAqcmVnID0g ZHJ2X2RhdGEtPmlvYWRkcjsKPj4gKwo+PiArIMKgIMKgIMKgIC8qIFN0b3AgYW5kIHJlc2V0IFNT UCAqLwo+PiArIMKgIMKgIMKgIHdyaXRlX1NTU1IoZHJ2X2RhdGEtPmNsZWFyX3NyLCByZWcpOwo+ PiArIMKgIMKgIMKgIHdyaXRlX1NTQ1IxKHJlYWRfU1NDUjEocmVnKSAmIH5kcnZfZGF0YS0+aW50 X2NyMSwgcmVnKTsKPj4gKyDCoCDCoCDCoCB3cml0ZV9TU1RPKDAsIHJlZyk7Cj4+ICsgwqAgwqAg wqAgZmx1c2goZHJ2X2RhdGEpOwo+PiArCj4+ICsgwqAgwqAgwqAgZGV2X2VycigmZHJ2X2RhdGEt PnBkZXYtPmRldiwgIiVzXG4iLCBtc2cpOwo+PiArCj4+ICsgwqAgwqAgwqAgZHJ2X2RhdGEtPmN1 cl9tc2ctPnN0YXRlID0gRVJST1JfU1RBVEU7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGlu dF90cmFuc2Zlcl9jb21wbGV0ZShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQo+PiArewo+ PiArdm9pZCAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKPj4gKwo+PiArIMKgIMKgIMKgIC8qIENs ZWFyIFN0YXR1cyBSZWdpc3RlciAqLwo+PiArIMKgIMKgIMKgIHdyaXRlX1NTU1IoZHJ2X2RhdGEt PmNsZWFyX3NyLCByZWcpOwo+PiArCj4+ICsjaWZkZWYgQ09ORklHX1NQSV9NUlNUX1NMQVZFX0RN QQo+PiArIMKgIMKgIMKgIC8qIERpc2FibGUgVHJpZ2dlcnMgdG8gRE1BICovCj4+ICsgwqAgwqAg wqAgd3JpdGVfU1NDUjEocmVhZF9TU0NSMShyZWcpICYgfmRydl9kYXRhLT5kbWFfY3IxLCByZWcp Owo+PiArI2Vsc2UKPj4gKyDCoCDCoCDCoCAvKiBEaXNhYmxlIEludGVycnVwdCAqLwo+PiArIMKg IMKgIMKgIHdyaXRlX1NTQ1IxKHJlYWRfU1NDUjEocmVnKSAmIH5kcnZfZGF0YS0+aW50X2NyMSwg cmVnKTsKPj4gKyNlbmRpZgo+PiArIMKgIMKgIMKgIC8qIFN0b3AgZ2V0dGluZyBUaW1lIE91dHMg Ki8KPj4gKyDCoCDCoCDCoCB3cml0ZV9TU1RPKDAsIHJlZyk7Cj4+ICsKPj4gKyDCoCDCoCDCoCAv KiBVcGRhdGUgdG90YWwgYnl0ZSB0cmFuc2ZlcmVkIHJldHVybiBjb3VudCBhY3R1YWwgYnl0ZXMg cmVhZCAqLwo+PiArIMKgIMKgIMKgIGRydl9kYXRhLT5jdXJfbXNnLT5hY3R1YWxfbGVuZ3RoICs9 IGRydl9kYXRhLT5sZW4gLQo+PiArIMKgIMKgIMKgIChkcnZfZGF0YS0+cnhfZW5kIC0gZHJ2X2Rh dGEtPnJ4KTsKPj4gKwo+PiArIMKgIMKgIMKgIGRydl9kYXRhLT5jdXJfbXNnLT5zdGF0dXMgPSAw Owo+PiArIMKgIMKgIMKgIGdpdmViYWNrKGRydl9kYXRhKTsKPj4gK30KPj4gKwo+PiArc3RhdGlj IHZvaWQgdHJhbnNmZXJfY29tcGxldGUoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKPj4g K3sKPj4gKyDCoCDCoCDCoCAvKiBVcGRhdGUgdG90YWwgYnl0ZSB0cmFuc2ZlcmVkIHJldHVybiBj b3VudCBhY3R1YWwgYnl0ZXMgcmVhZCAqLwo+PiArIMKgIMKgIMKgIGRydl9kYXRhLT5jdXJfbXNn LT5hY3R1YWxfbGVuZ3RoICs9Cj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZHJ2X2RhdGEtPmxl biAtIChkcnZfZGF0YS0+cnhfZW5kIC0gZHJ2X2RhdGEtPnJ4KTsKPj4gKwo+PiArIMKgIMKgIMKg IGRydl9kYXRhLT5jdXJfbXNnLT5zdGF0dXMgPSAwOwo+PiArIMKgIMKgIMKgIGdpdmViYWNrKGRy dl9kYXRhKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF90cmFu c2ZlcihzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQo+PiArewo+PiArIMKgIMKgIMKgIHZv aWQgKnJlZyA9IGRydl9kYXRhLT5pb2FkZHI7Cj4+ICsgwqAgwqAgwqAgdTMyIGlycV9tYXNrID0g KHJlYWRfU1NDUjEocmVnKSAmIFNTQ1IxX1RJRSkgPwo+PiArIMKgIMKgIMKgIGRydl9kYXRhLT5t YXNrX3NyIDogZHJ2X2RhdGEtPm1hc2tfc3IgJiB+U1NTUl9URlM7Cj4+ICsKPj4gKyDCoCDCoCDC oCB1MzIgaXJxX3N0YXR1cyA9IHJlYWRfU1NTUihyZWcpICYgaXJxX21hc2s7Cj4+ICsgwqAgwqAg wqAgaWYgKGlycV9zdGF0dXMgJiBTU1NSX1JPUikgewo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGludF9lcnJvcl9zdG9wKGRydl9kYXRhLCAiaW50ZXJydXB0X3RyYW5zZmVyOiBmaWZvIG92ZXJy dW4iKTsKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gSVJRX0hBTkRMRUQ7Cj4+ICsg wqAgwqAgwqAgfQo+PiArCj4+ICsgwqAgwqAgwqAgaWYgKGlycV9zdGF0dXMgJiBTU1NSX1RJTlQp IHsKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB3cml0ZV9TU1NSKFNTU1JfVElOVCwgcmVnKTsK Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoZHJ2X2RhdGEtPnJlYWQoZHJ2X2RhdGEpKSB7 Cj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaW50X3RyYW5zZmVyX2NvbXBs ZXRlKGRydl9kYXRhKTsKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1 cm4gSVJRX0hBTkRMRUQ7Cj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQo+PiArIMKgIMKgIMKg IH0KPj4gKwo+PiArLyogRHJhaW4gcnggZmlmbywgRmlsbCB0eCBmaWZvIGFuZCBwcmV2ZW50IG92 ZXJydW5zICovCj4KPiBJbmRlbnRhdGlvbgo+Cj4+ICsgwqAgwqAgwqAgZG8gewo+PiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIGlmIChkcnZfZGF0YS0+cmVhZChkcnZfZGF0YSkpIHsKPj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpbnRfdHJhbnNmZXJfY29tcGxldGUoZHJ2X2Rh dGEpOwo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiBJUlFfSEFO RExFRDsKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9Cj4+ICsgwqAgwqAgwqAgfSB3aGlsZSAo ZHJ2X2RhdGEtPndyaXRlKGRydl9kYXRhKSk7Cj4+ICsKPj4gKyDCoCDCoCDCoCBpZiAoZHJ2X2Rh dGEtPnJlYWQoZHJ2X2RhdGEpKSB7Cj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaW50X3RyYW5z ZmVyX2NvbXBsZXRlKGRydl9kYXRhKTsKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4g SVJRX0hBTkRMRUQ7Cj4+ICsgwqAgwqAgwqAgfQo+PiArCj4+ICsgwqAgwqAgwqAgaWYgKGRydl9k YXRhLT50eCA9PSBkcnZfZGF0YS0+dHhfZW5kKQo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHdy aXRlX1NTQ1IxKHJlYWRfU1NDUjEocmVnKSAmIH5TU0NSMV9USUUsIHJlZyk7Cj4+ICsKPj4gKyDC oCDCoCDCoCByZXR1cm4gSVJRX0hBTkRMRUQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpcnFyZXR1 cm5fdCBzc3BfaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCkKPj4gK3sKPj4gKyDCoCDCoCDCoCBz dHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gZGV2X2lkOwo+PiArIMKgIMKgIMKgIHZvaWQg KnJlZyA9IGRydl9kYXRhLT5pb2FkZHI7Cj4+ICsjaWZkZWYgQ09ORklHX1NQSV9NUlNUX1NMQVZF X0RNQQo+PiArIMKgIMKgIMKgIHUzMiBzdGF0dXMgPSByZWFkX1NTU1IocmVnKTsKPj4gKwo+PiAr IMKgIMKgIMKgIGlmIChzdGF0dXMgJiBTU1NSX1JPUiB8fCBzdGF0dXMgJiBTU1NSX1RVUikgewo+ PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHByaW50ayhLRVJOX0RFQlVHICItLS0gU1BJIFJPUiBv ciBUVVIgb2NjdXJyZWQgOiBTU1NSPSV4XG4iLAo+PiArIMKgIMKgIMKgIHN0YXR1cyk7Cj4+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgd3JpdGVfU1NTUihTU1NSX1JPUiwgcmVnKTsgwqAgwqAgwqAg wqAgwqAgwqAgwqAvKiBDbGVhciBST1IgKi8KPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB3cml0 ZV9TU1NSKFNTU1JfVFVSLCByZWcpOyDCoCDCoCDCoCDCoCDCoCDCoCDCoC8qIENsZWFyIFRVUiAq Lwo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiBJUlFfSEFORExFRDsKPj4gKyDCoCDC oCDCoCB9Cj4+ICsgwqAgwqAgwqAgcmV0dXJuIElSUV9OT05FOwo+PiArI2VuZGlmCj4KPiBJIGRv bid0IHNlZSBDT05GSUdfU1BJX01SU1RfU0xBVkVfRE1BIGRlZmluZWQgYW55d2hlcmUuIMKgUGxl YXNlIGRyb3AgdGhlc2UKPiBzZWN0aW9ucyBmcm9tIHRoZSBkcml2ZXIgdW50aWwgdGhhdCBiaXQg aXMgcmVhZHkuIMKgSXQgY2FuIGJlIGFkZGVkIGluIGEKPiBmb2xsb3ctb24gcGF0Y2guCj4KPj4g KyDCoCDCoCDCoCAvKiBqdXN0IHJldHVybiBpZiB0aGlzIGlzIG5vdCBvdXIgaW50ZXJydXB0ICov Cj4+ICsgwqAgwqAgwqAgaWYgKCEocmVhZF9TU1NSKHJlZykgJiBkcnZfZGF0YS0+bWFza19zcikp Cj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIElSUV9OT05FOwo+PiArCj4+ICsgwqAg wqAgwqAgaWYgKCFkcnZfZGF0YS0+Y3VyX21zZykgewo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IHdyaXRlX1NTQ1IwKHJlYWRfU1NDUjAocmVnKSAmIH5TU0NSMF9TU0UsIHJlZyk7Cj4+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgd3JpdGVfU1NDUjEocmVhZF9TU0NSMShyZWcpICYgfmRydl9kYXRh LT5pbnRfY3IxLCByZWcpOwo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHdyaXRlX1NTU1IoZHJ2 X2RhdGEtPmNsZWFyX3NyLCByZWcpOwo+PiArCj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLyog TmV2ZXIgZmFpbCAqLwo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiBJUlFfSEFORExF RDsKPj4gKyDCoCDCoCDCoCB9Cj4+ICsgwqAgwqAgwqAgcmV0dXJuIGRydl9kYXRhLT50cmFuc2Zl cl9oYW5kbGVyKGRydl9kYXRhKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgcG9sbF90cmFu c2Zlcih1bnNpZ25lZCBsb25nIGRhdGEpCj4+ICt7Cj4+ICsgwqAgwqAgwqAgc3RydWN0IGRyaXZl cl9kYXRhICpkcnZfZGF0YSA9IChzdHJ1Y3QgZHJpdmVyX2RhdGEgKilkYXRhOwo+PiArCj4+ICsg wqAgwqAgwqAgaWYgKGRydl9kYXRhLT50eCkKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB3aGls ZSAoZHJ2X2RhdGEtPnR4ICE9IGRydl9kYXRhLT50eF9lbmQpIHsKPj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBkcnZfZGF0YS0+d3JpdGUoZHJ2X2RhdGEpOwo+PiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRydl9kYXRhLT5yZWFkKGRydl9kYXRhKTsKPj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9Cj4+ICsKPj4gKyDCoCDCoCDCoCB3aGlsZSAoIWRydl9k YXRhLT5yZWFkKGRydl9kYXRhKSkKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCA7Cj4+ICsKPj4g KyDCoCDCoCDCoCB0cmFuc2Zlcl9jb21wbGV0ZShkcnZfZGF0YSk7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyBpbnQgdHJhbnNmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV9tZXNz YWdlICptc2cpCj4+ICt7Cj4+ICsgwqAgwqAgwqAgc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0 YSA9IFwKPj4gKyDCoCDCoCDCoCBzcGlfc2xhdmVfZ2V0X2RldmRhdGEoc3BpLT5zbGF2ZSk7Cj4K PiBCYWNrc2xhc2hlcyBhcmUgdW5uZWNlc3NhcnkgaW4gbm9ybWFsIEMgY29kZS4gwqA6LSkKPgo+ PiArIMKgIMKgIMKgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4+ICsgwqAgwqAgwqAgc3RydWN0IGNo aXBfZGF0YSAqY2hpcCA9IE5VTEw7Cj4+ICsgwqAgwqAgwqAgc3RydWN0IHNwaV90cmFuc2ZlciAq dHJhbnNmZXIgPSBOVUxMOwo+PiArIMKgIMKgIMKgIHZvaWQgKnJlZyA9IGRydl9kYXRhLT5pb2Fk ZHI7Cj4+ICsgwqAgwqAgwqAgdm9pZCAqaTJjUmVnID0gZHJ2X2RhdGEtPkkyQ19pb2FkZHI7Cj4+ ICsgwqAgwqAgwqAgdTMyIGNsa19kaXYgPSAwOwo+PiArIMKgIMKgIMKgIHU4IGJpdHMgPSAwOwo+ PiArIMKgIMKgIMKgIHUzMiBjcjA7Cj4+ICsgwqAgwqAgwqAgdTMyIGNyMTsKPj4gKyDCoCDCoCDC oCB1MzIgc3NzcjsKPj4gKwo+PiArIMKgIMKgIMKgIHNwaW5fbG9ja19pcnFzYXZlKCZkcnZfZGF0 YS0+bG9jaywgZmxhZ3MpOwo+PiArIMKgIMKgIMKgIG1zZy0+YWN0dWFsX2xlbmd0aCA9IDA7Cj4+ ICsgwqAgwqAgwqAgbXNnLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7Cj4+ICsgwqAgwqAgwqAgZHJ2 X2RhdGEtPmN1cl9tc2cgPSBtc2c7Cj4+ICsgwqAgwqAgwqAgLyogSW5pdGlhbCBtZXNzYWdlIHN0 YXRlKi8KPj4gKyDCoCDCoCDCoCBtc2ctPnN0YXRlID0gU1RBUlRfU1RBVEU7Cj4+ICsKPj4gKyDC oCDCoCDCoCAvKiBXZSBoYW5kbGUgb25seSBvbmUgdHJhbnNmZXIgbWVzc2FnZSBzaW5jZSB0aGUg cHJvdG9jb2wgbW9kdWxlIGhhcyB0bwo+PiArIMKgIMKgIMKgIMKgIMKgY29udHJvbCB0aGUgb3V0 IG9mIGJhbmQgc2lnbmFsaW5nLiAqLwo+Cj4gVHJ5IHRvIGtlZXAgbGluZXMgZG93biB1bmRlciA4 MCBjaGFycyBhcyBtdWNoIGFzIHBvc3NpYmxlLgo+Cj4+ICsgwqAgwqAgwqAgdHJhbnNmZXIgPSBs aXN0X2VudHJ5KG1zZy0+dHJhbnNmZXJzLm5leHQsCj4+ICsgwqAgwqAgwqAgc3RydWN0IHNwaV90 cmFuc2ZlciwKPj4gKyDCoCDCoCDCoCB0cmFuc2Zlcl9saXN0KTsKPj4gKwo+PiArIMKgIMKgIMKg IGNoaXAgPSBzcGlfZ2V0X2N0bGRhdGEobXNnLT5zcGkpOwo+PiArCj4+ICsgwqAgwqAgwqAgZHJ2 X2RhdGEtPmJ1c3kgPSAxOwo+PiArCj4+ICsvKiBDaGVjayB0cmFuc2ZlciBsZW5ndGggKi8KPgo+ IGluZGVudAo+Cj4+ICsgwqAgwqAgwqAgaWYgKHRyYW5zZmVyLT5sZW4gPiA4MTkyKSB7Cj4+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgZGV2X3dhcm4oJmRydl9kYXRhLT5wZGV2LT5kZXYsICJTUEkt U0xBVkU6IHRyYW5zZmVyICIKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCAibGVuZ3RoIGdyZWF0 ZXIgdGhhbiA4MTkyXG4iKTsKPgo+IEluZGVudCBzZWNvbmQgbGluZSBzbyBpdCBpcyBvYnZpb3Vz IHRoYXQgdGhpcyBpcyBhIGNvbnRpbnVhdGlvbiBvZiB0aGUKPiBkZXZfd2FybiBwYXJhbWV0ZXJz Lgo+Cj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbXNnLT5zdGF0dXMgPSAtRUlOVkFMOwo+PiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGdpdmViYWNrKGRydl9kYXRhKTsKPj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3Mp Owo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiAwOwo+PiArIMKgIMKgIMKgIH0KPj4g Kwo+PiArIMKgIMKgIMKgIC8qIFNldHVwIHRoZSB0cmFuc2ZlciBzdGF0ZSBiYXNlZCBvbiB0aGUg dHlwZSBvZiB0cmFuc2ZlciAqLwo+PiArIMKgIMKgIMKgIGZsdXNoKGRydl9kYXRhKTsKPj4gKyDC oCDCoCDCoCBkcnZfZGF0YS0+bl9ieXRlcyA9IGNoaXAtPm5fYnl0ZXM7Cj4+ICsgwqAgwqAgwqAg ZHJ2X2RhdGEtPnR4ID0gKHZvaWQgKil0cmFuc2Zlci0+dHhfYnVmOwo+PiArIMKgIMKgIMKgIGRy dl9kYXRhLT50eF9lbmQgPSBkcnZfZGF0YS0+dHggKyB0cmFuc2Zlci0+bGVuOwo+PiArIMKgIMKg IMKgIGRydl9kYXRhLT5yeCA9IHRyYW5zZmVyLT5yeF9idWY7Cj4+ICsgwqAgwqAgwqAgZHJ2X2Rh dGEtPnJ4X2VuZCA9IGRydl9kYXRhLT5yeCArIHRyYW5zZmVyLT5sZW47Cj4+ICsgwqAgwqAgwqAg ZHJ2X2RhdGEtPnJ4X2RtYSA9IHRyYW5zZmVyLT5yeF9kbWE7Cj4+ICsgwqAgwqAgwqAgZHJ2X2Rh dGEtPnR4X2RtYSA9IHRyYW5zZmVyLT50eF9kbWE7Cj4+ICsgwqAgwqAgwqAgZHJ2X2RhdGEtPmxl biA9IHRyYW5zZmVyLT5sZW47Cj4+ICsgwqAgwqAgwqAgZHJ2X2RhdGEtPndyaXRlID0gZHJ2X2Rh dGEtPnR4ID8gY2hpcC0+d3JpdGUgOiBudWxsX3dyaXRlcjsKPj4gKyDCoCDCoCDCoCBkcnZfZGF0 YS0+cmVhZCA9IGRydl9kYXRhLT5yeCA/IGNoaXAtPnJlYWQgOiBudWxsX3JlYWRlcjsKPj4gKwo+ PiArIMKgIMKgIMKgIC8qIENoYW5nZSBzcGVlZCBhbmQgYml0IHBlciB3b3JkIG9uIGEgcGVyIHRy YW5zZmVyICovCj4+ICsgwqAgwqAgwqAgY3IwID0gY2hpcC0+Y3IwOwo+PiArIMKgIMKgIMKgIGlm ICh0cmFuc2Zlci0+Yml0c19wZXJfd29yZCkgewo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJp dHMgPSBjaGlwLT5iaXRzX3Blcl93b3JkOwo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNsa19k aXYgPSAweDA7Cj4+ICsKPj4gKyDCoCDCoCDCoCBpZiAodHJhbnNmZXItPmJpdHNfcGVyX3dvcmQp Cj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYml0cyA9IHRyYW5zZmVyLT5iaXRzX3Blcl93b3Jk Owo+Cj4gaWNrLiDCoE11c3QgZml4IHRoaXMgaW5kZW50YXRpb24gb3ZlciB3aG9sZSBmaWxlIHNv IGEgcmVhZGVyIGNhbiBmb2xsb3cKPiB0aGUgc2NvcGUuCj4KPj4gZGlmZiAtLWdpdCBhL2luY2x1 ZGUvbGludXgvc3BpL21yc3Rfc3BpX3NsYXZlLmggYi9pbmNsdWRlL2xpbnV4L3NwaS9tcnN0X3Nw aV9zbGF2ZS5oCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLjcwZWEz YjcKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9tcnN0X3NwaV9z bGF2ZS5oCj4+IEBAIC0wLDAgKzEsMTM0IEBACj4+ICsvKgo+Cj4gSW5jbHVkZSBhIG9uZS1saW5l IHN0YXRlbWVudCBvbiB3aGF0IHRoaXMgZmlsZSBpcy4KVGhpcyBoZWFkZXIgY29udGFpbnMgbW9z dGx5IHdoYXQgaXMgY29udHJvbGxlciBzcGVjaWZpYy4KQW0gbm90IHN1cmUgaWYgaW5jbHVkZS9s aW51eC9zcGkgaXMgdGhlIHBsYWNlIGZvciB0aGlzIGhlYWRlciwgYnV0IG9ubHkKZm9yIGNvbW1v biBTUEkgcHJvdG9jb2wgaGVhZGVycyBhbmQgb3RoZXIgc3R1ZmYgdXNlZCBhY3Jvc3MgdmFyaW91 cwpwbGF0Zm9ybXMoZXZlbiB0aG91Z2gsIHVuZm9ydHVuYXRlbHksIHRoYXQgaXNuJ3QgdGhlIHNp dHVhdGlvbiBhbHJlYWR5KS4KCj4+ICsgKiDCoENvcHlyaWdodCAoQykgSW50ZWwgMjAwOQo+PiAr ICogwqBLZW4gTWlsbHMgPGtlbi5rLm1pbGxzQGludGVsLmNvbT4KPj4gKyAqCj4+ICsgKiB+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fgo+PiArICoKPj4gKyAqIMKgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPj4gKyAqIMKgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKPj4gKyAqIMKgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMiBvZiB0aGUgTGljZW5zZSwgb3IKPj4gKyAqIMKgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KPj4gKyAqCj4+ICsgKiDCoFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+PiArICogwqBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+PiArICog wqBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIMKg U2VlIHRoZQo+PiArICogwqBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgo+PiArICoKPj4gKyAqIMKgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKPj4gKyAqIMKgYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPj4gKyAqIMKgRm91bmRh dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgwqAwMjEx MS0xMzA3IMKgVVNBCj4+ICsgKgo+PiArICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KPgo+IFNhbWUgY29t bWVudCBhcyBvbiAuYyBmaWxlLgo+PiArICoKPj4gKyAqLwo+PiArI2lmbmRlZiBNUlNUX1NTUF9I Xwo+PiArI2RlZmluZSBNUlNUX1NTUF9IXwo+PiArCj4+ICsKPj4gKy8qCj4+ICsgKiBMYW5nd2Vs bCBTU1Agc2VyaWFsIHBvcnQgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKPj4gKyAqLwo+PiArCj4+ICsj ZGVmaW5lIFNTQ1IwX0RTUyDCoCDCoCDCoCgweDAwMDAwMDBmKSDCoCDCoC8qIERhdGEgU2l6ZSBT ZWxlY3QgKG1hc2spICovCj4+ICsjZGVmaW5lIFNTQ1IwX0RhdGFTaXplKHgpICgoeCkgLSAxKSDC oCDCoC8qIERhdGEgU2l6ZSBTZWxlY3QgWzQuLjE2XSAqLwo+PiArI2RlZmluZSBTU0NSMF9GUkYg wqAgwqAgwqAoMHgwMDAwMDAzMCkgwqAgwqAvKiBGUmFtZSBGb3JtYXQgKG1hc2spICovCj4+ICsj ZGVmaW5lIFNTQ1IwX01vdG9yb2xhICgweDAgPDwgNCkgwqAgwqAgwqAvKiBNb3Rvcm9sYSdzIFNQ SSBtb2RlICovCj4+ICsjZGVmaW5lIFNTQ1IwX0VDUyDCoCDCoCDCoCgxIDw8IDYpIMKgIMKgIMKg IMKgLyogRXh0ZXJuYWwgY2xvY2sgc2VsZWN0ICovCj4+ICsjZGVmaW5lIFNTQ1IwX1NTRSDCoCDC oCDCoCgxIDw8IDcpIMKgIMKgIMKgIMKgLyogU3luY2hyb25vdXMgU2VyaWFsIFBvcnQgRW5hYmxl ICovCj4+ICsKPj4gKwo+PiArI2RlZmluZSBTU0NSMF9TQ1IgwqAgwqAgwqAoMHgwMDBmZmYwMCkg wqAgwqAvKiBTZXJpYWwgQ2xvY2sgUmF0ZSAobWFzaykgKi8KPj4gKyNkZWZpbmUgU1NDUjBfU2Vy Q2xrRGl2KHgpICgoKHgpIC0gMSkgPDwgOCkvKiBEaXZpc29yIFsxLi40MDk2XSAqLwo+PiArI2Rl ZmluZSBTU0NSMF9FRFNTIMKgIMKgICgxIDw8IDIwKSDCoCDCoCDCoCAvKiBFeHRlbmRlZCBkYXRh IHNpemUgc2VsZWN0ICovCj4+ICsjZGVmaW5lIFNTQ1IwX05DUyDCoCDCoCDCoCgxIDw8IDIxKSDC oCDCoCDCoCAvKiBOZXR3b3JrIGNsb2NrIHNlbGVjdCAqLwo+PiArI2RlZmluZSBTU0NSMF9SSU0g wqAgwqAgwqAoMSA8PCAyMikgwqAgwqAgwqAgLyogUmVjZWl2ZSBGSUZPIG92ZXJycnVuIGludCBt YXNrICovCj4+ICsjZGVmaW5lIFNTQ1IwX1RVTSDCoCDCoCDCoCgxIDw8IDIzKSDCoCDCoCDCoCAv KiBUcmFuc21pdCBGSUZPIHVuZGVycnVuIGludCBtYXNrICovCj4+ICsjZGVmaW5lIFNTQ1IwX0ZS REMgwqAgwqAgKDB4MDcwMDAwMDApIMKgIMKgLyogRnJhbWUgcmF0ZSBkaXZpZGVyIGNvbnRyb2wg KG1hc2spICovCj4+ICsjZGVmaW5lIFNTQ1IwX1Nsb3RzUGVyRnJtKHgpICgoKHgpIC0gMSkgPDwg MjQpLyogVGltZSBzbG90cyBwZXIgZnJhbWUgKi8KPj4gKyNkZWZpbmUgU1NDUjBfQURDIMKgIMKg IMKgKDEgPDwgMzApIMKgIMKgIMKgIC8qIEF1ZGlvIGNsb2NrIHNlbGVjdCAqLwo+PiArI2RlZmlu ZSBTU0NSMF9NT0QgwqAgwqAgwqAoMSA8PCAzMSkgwqAgwqAgwqAgLyogTW9kZSAobm9ybWFsIG9y IG5ldHdvcmspICovCj4+ICsKPj4gKwo+PiArI2RlZmluZSBTU0NSMV9SSUUgwqAgwqAgwqAoMSA8 PCAwKSDCoCDCoCDCoCDCoC8qIFJlY2VpdmUgRklGTyBJbnRlcnJ1cHQgRW5hYmxlICovCj4+ICsj ZGVmaW5lIFNTQ1IxX1RJRSDCoCDCoCDCoCgxIDw8IDEpIMKgIMKgIMKgIMKgLyogVHJhbnNtaXQg RklGTyBJbnRlcnJ1cHQgRW5hYmxlICovCj4+ICsjZGVmaW5lIFNTQ1IxX0xCTSDCoCDCoCDCoCgx IDw8IDIpIMKgIMKgIMKgIMKgLyogTG9vcC1CYWNrIE1vZGUgKi8KPj4gKyNkZWZpbmUgU1NDUjFf U1BPIMKgIMKgIMKgKDEgPDwgMykgwqAgwqAgwqAgwqAvKiBTU1BTQ0xLIHBvbGFyaXR5IHNldHRp bmcgKi8KPj4gKyNkZWZpbmUgU1NDUjFfU1BIIMKgIMKgIMKgKDEgPDwgNCkgwqAgwqAgwqAgwqAv KiBNb3Rvcm9sYSBTUEkgU1NQU0NMSyBwaGFzZSBzZXR0aW5nICovCj4+ICsjZGVmaW5lIFNTQ1Ix X01XRFMgwqAgwqAgKDEgPDwgNSkgwqAgwqAgwqAgwqAvKiBNaWNyb3dpcmUgVHJhbnNtaXQgRGF0 YSBTaXplICovCj4+ICsjZGVmaW5lIFNTQ1IxX1RGVCDCoCDCoCDCoCgweDAwMDAwM2MwKSDCoCDC oC8qIFRyYW5zbWl0IEZJRk8gVGhyZXNob2xkIChtYXNrKSAqLwo+PiArI2RlZmluZSBTU0NSMV9U eFRyZXNoKHgpICgoKHgpIC0gMSkgPDwgNikgLyogbGV2ZWwgWzEuLjE2XSAqLwo+PiArI2RlZmlu ZSBTU0NSMV9SRlQgwqAgwqAgwqAoMHgwMDAwM2MwMCkgwqAgwqAvKiBSZWNlaXZlIEZJRk8gVGhy ZXNob2xkIChtYXNrKSAqLwo+PiArI2RlZmluZSBTU0NSMV9SeFRyZXNoKHgpICgoKHgpIC0gMSkg PDwgMTApIC8qIGxldmVsIFsxLi4xNl0gKi8KPj4gKwo+PiArI2RlZmluZSBTU1NSX1RORiDCoCDC oCDCoCAoMSA8PCAyKSDCoCDCoCDCoCDCoC8qIFRyYW5zbWl0IEZJRk8gTm90IEZ1bGwgKi8KPj4g KyNkZWZpbmUgU1NTUl9STkUgwqAgwqAgwqAgKDEgPDwgMykgwqAgwqAgwqAgwqAvKiBSZWNlaXZl IEZJRk8gTm90IEVtcHR5ICovCj4+ICsjZGVmaW5lIFNTU1JfQlNZIMKgIMKgIMKgICgxIDw8IDQp IMKgIMKgIMKgIMKgLyogU1NQIEJ1c3kgKi8KPj4gKyNkZWZpbmUgU1NTUl9URlMgwqAgwqAgwqAg KDEgPDwgNSkgwqAgwqAgwqAgwqAvKiBUcmFuc21pdCBGSUZPIFNlcnZpY2UgUmVxdWVzdCAqLwo+ PiArI2RlZmluZSBTU1NSX1JGUyDCoCDCoCDCoCAoMSA8PCA2KSDCoCDCoCDCoCDCoC8qIFJlY2Vp dmUgRklGTyBTZXJ2aWNlIFJlcXVlc3QgKi8KPj4gKyNkZWZpbmUgU1NTUl9ST1IgwqAgwqAgwqAg KDEgPDwgNykgwqAgwqAgwqAgwqAvKiBSZWNlaXZlIEZJRk8gT3ZlcnJ1biAqLwo+PiArCj4+ICsj ZGVmaW5lIFNTQ1IwX1RJTSDCoCDCoCDCoCgxIDw8IDIzKSDCoCDCoCDCoCAvKiBUcmFuc21pdCBG SUZPIFVuZGVyIFJ1biBJbnQgTWFzayAqLwo+PiArI2RlZmluZSBTU0NSMF9SSU0gwqAgwqAgwqAo MSA8PCAyMikgwqAgwqAgwqAgLyogUmVjZWl2ZSBGSUZPIE92ZXIgUnVuIGludCBNYXNrICovCj4+ ICsjZGVmaW5lIFNTQ1IwX05DUyDCoCDCoCDCoCgxIDw8IDIxKSDCoCDCoCDCoCAvKiBOZXR3b3Jr IENsb2NrIFNlbGVjdCAqLwo+PiArI2RlZmluZSBTU0NSMF9FRFNTIMKgIMKgICgxIDw8IDIwKSDC oCDCoCDCoCAvKiBFeHRlbmRlZCBEYXRhIFNpemUgU2VsZWN0ICovCj4+ICsKPj4gKyNkZWZpbmUg U1NDUjBfVElTU1AgwqAgwqAoMSA8PCA0KSDCoCDCoCDCoCDCoC8qIFRJIFN5bmMgU2VyaWFsIFBy b3RvY29sICovCj4+ICsjZGVmaW5lIFNTQ1IwX1BTUCDCoCDCoCDCoCgzIDw8IDQpIMKgIMKgIMKg IMKgLyogUFNQIC0gUHJvZ3JhbW1hYmxlIFNlcmlhbCBQcm90b2NvbCAqLwo+PiArI2RlZmluZSBT U0NSMV9UVEVMUCDCoCDCoCgxIDw8IDMxKSDCoCDCoCDCoCAvKiBUWEQgVHJpc3RhdGUgRW5hYmxl IExhc3QgUGhhc2UgKi8KPj4gKyNkZWZpbmUgU1NDUjFfVFRFIMKgIMKgIMKgKDEgPDwgMzApIMKg IMKgIMKgIC8qIFRYRCBUcmlzdGF0ZSBFbmFibGUgKi8KPj4gKyNkZWZpbmUgU1NDUjFfRUJDRUkg wqAgwqAoMSA8PCAyOSkgwqAgwqAgwqAgLyogRW5hYmxlIEJpdCBDb3VudCBFcnJvciBpbnRlcnJ1 cHQgKi8KPj4gKyNkZWZpbmUgU1NDUjFfU0NGUiDCoCDCoCAoMSA8PCAyOCkgwqAgwqAgwqAgLyog U2xhdmUgQ2xvY2sgZnJlZSBSdW5uaW5nICovCj4+ICsjZGVmaW5lIFNTQ1IxX0VDUkEgwqAgwqAg KDEgPDwgMjcpIMKgIMKgIMKgIC8qIEVuYWJsZSBDbG9jayBSZXF1ZXN0IEEgKi8KPj4gKyNkZWZp bmUgU1NDUjFfRUNSQiDCoCDCoCAoMSA8PCAyNikgwqAgwqAgwqAgLyogRW5hYmxlIENsb2NrIHJl cXVlc3QgQiAqLwo+PiArI2RlZmluZSBTU0NSMV9TQ0xLRElSIMKgKDEgPDwgMjUpIMKgIMKgIMKg IC8qIFNlcmlhbCBCaXQgUmF0ZSBDbG9jayBEaXJlY3Rpb24gKi8KPj4gKyNkZWZpbmUgU1NDUjFf U0ZSTURJUiDCoCgxIDw8IDI0KSDCoCDCoCDCoCAvKiBGcmFtZSBEaXJlY3Rpb24gKi8KPj4gKyNk ZWZpbmUgU1NDUjFfUldPVCDCoCDCoCAoMSA8PCAyMykgwqAgwqAgwqAgLyogUmVjZWl2ZSBXaXRo b3V0IFRyYW5zbWl0ICovCj4+ICsjZGVmaW5lIFNTQ1IxX1RSQUlMIMKgIMKgKDEgPDwgMjIpIMKg IMKgIMKgIC8qIFRyYWlsaW5nIEJ5dGUgKi8KPj4gKyNkZWZpbmUgU1NDUjFfVFNSRSDCoCDCoCAo MSA8PCAyMSkgwqAgwqAgwqAgLyogVHJhbnNtaXQgU2VydmljZSBSZXF1ZXN0IEVuYWJsZSAqLwo+ PiArI2RlZmluZSBTU0NSMV9SU1JFIMKgIMKgICgxIDw8IDIwKSDCoCDCoCDCoCAvKiBSZWNlaXZl IFNlcnZpY2UgUmVxdWVzdCBFbmFibGUgKi8KPj4gKyNkZWZpbmUgU1NDUjFfVElOVEUgwqAgwqAo MSA8PCAxOSkgwqAgwqAgwqAgLyogUmVjZWl2ZXIgVGltZS1vdXQgSW50ZXJydXB0IGVuYWJsZSAq Lwo+PiArI2RlZmluZSBTU0NSMV9QSU5URSDCoCDCoCgxIDw8IDE4KSDCoCDCoCDCoCAvKiBUcmFp bGluZyBCeXRlIEludGVydXB0IEVuYWJsZSAqLwo+PiArI2RlZmluZSBTU0NSMV9TVFJGIMKgIMKg ICgxIDw8IDE1KSDCoCDCoCDCoCAvKiBTZWxlY3QgRklGTyBvciBFRldSICovCj4+ICsjZGVmaW5l IFNTQ1IxX0VGV1IgwqAgwqAgKDEgPDwgMTQpIMKgIMKgIMKgIC8qIEVuYWJsZSBGSUZPIFdyaXRl L1JlYWQgKi8KPj4gKwo+PiArI2RlZmluZSBTU1NSX0JDRSDCoCDCoCDCoCAoMSA8PCAyMykgwqAg wqAgwqAgLyogQml0IENvdW50IEVycm9yICovCj4+ICsjZGVmaW5lIFNTU1JfQ1NTIMKgIMKgIMKg ICgxIDw8IDIyKSDCoCDCoCDCoCAvKiBDbG9jayBTeW5jaHJvbmlzYXRpb24gU3RhdHVzICovCj4+ ICsjZGVmaW5lIFNTU1JfVFVSIMKgIMKgIMKgICgxIDw8IDIxKSDCoCDCoCDCoCAvKiBUcmFuc21p dCBGSUZPIFVuZGVyIFJ1biAqLwo+PiArI2RlZmluZSBTU1NSX0VPQyDCoCDCoCDCoCAoMSA8PCAy MCkgwqAgwqAgwqAgLyogRW5kIE9mIENoYWluICovCj4+ICsjZGVmaW5lIFNTU1JfVElOVCDCoCDC oCDCoCgxIDw8IDE5KSDCoCDCoCDCoCAvKiBSZWNlaXZlciBUaW1lLW91dCBJbnRlcnJ1cHQgKi8K Pj4gKyNkZWZpbmUgU1NTUl9QSU5UIMKgIMKgIMKgKDEgPDwgMTgpIMKgIMKgIMKgIC8qIFBlcmlw aGVyYWwgVHJhaWxpbmcgQnl0ZSBJbnRlcnJ1cHQgKi8KPj4gKwo+PiArI2RlZmluZSBTU1BTUF9G U1JUIMKgIMKgICgxIDw8IDI1KSDCoCDCoCDCoCAvKiBGcmFtZSBTeW5jIFJlbGF0aXZlIFRpbWlu ZyAqLwo+PiArI2RlZmluZSBTU1BTUF9ETVlTVE9QKHgpICgoeCkgPDwgMjMpIMKgIC8qIER1bW15 IFN0b3AgKi8KPj4gKyNkZWZpbmUgU1NQU1BfU0ZSTVdEVEgoeCkgKCh4KSA8PCAxNikgwqAvKiBT ZXJpYWwgRnJhbWUgV2lkdGggKi8KPj4gKyNkZWZpbmUgU1NQU1BfU0ZSTURMWSh4KSAoKHgpIDw8 IDkpIMKgIMKgLyogU2VyaWFsIEZyYW1lIERlbGF5ICovCj4+ICsjZGVmaW5lIFNTUFNQX0RNWVNU UlQoeCkgKCh4KSA8PCA3KSDCoCDCoC8qIER1bW15IFN0YXJ0ICovCj4+ICsjZGVmaW5lIFNTUFNQ X1NUUlRETFkoeCkgKCh4KSA8PCA0KSDCoCDCoC8qIFN0YXJ0IERlbGF5ICovCj4+ICsjZGVmaW5l IFNTUFNQX0VURFMoMSA8PCAzKSDCoCDCoCDCoCDCoCDCoCDCoCAvKiBFbmQgb2YgVHJhbnNmZXIg ZGF0YSBTdGF0ZSAqLwo+PiArI2RlZmluZSBTU1BTUF9TRlJNUCDCoCgxIDw8IDIpIMKgIMKgIMKg IMKgIMKgLyogU2VyaWFsIEZyYW1lIFBvbGFyaXR5ICovCj4+ICsjZGVmaW5lIFNTUFNQX1NDTU9E RSh4KSgoeCkgPDwgMCkgwqAgwqAgwqAvKiBTZXJpYWwgQml0IFJhdGUgQ2xvY2sgTW9kZSAqLwo+ Cj4gTW92ZSB0aGVzZSAjZGVmaW5lcyB0byB0aGUgLmMgZmlsZS4gwqBUaGV5IGFyZW4ndCBwYXJ0 IG9mIHRoZSBpbnRlcmZhY2UuCj4KPj4gKwo+PiArLyogc3BpX2JvYXJkX2luZm8uY29udHJvbGxl cl9kYXRhIGZvciBTUEkgc2xhdmUgZGV2aWNlcywKPj4gKyAqIGNvcGllZCB0byBzcGlfZGV2aWNl LnBsYXRmb3JtX2RhdGEgLi4uIG1vc3RseSBmb3IgZG1hIHR1bmluZwo+PiArICovCj4+ICtzdHJ1 Y3QgbXJzdF9zcGlfY2hpcCB7Cj4+ICsgwqAgwqAgwqAgdTggdHhfdGhyZXNob2xkOwo+PiArIMKg IMKgIMKgIHU4IHJ4X3RocmVzaG9sZDsKPj4gKyDCoCDCoCDCoCB1OCBkbWFfYnVyc3Rfc2l6ZTsK Pj4gKyDCoCDCoCDCoCB1MzIgdGltZW91dDsKPj4gKyDCoCDCoCDCoCB1OCBlbmFibGVfbG9vcGJh Y2s7Cj4+ICsgwqAgwqAgwqAgdTE2IGV4dHJhX2RhdGFbNV07Cj4+ICt9Owo+PiArCj4+ICsjZGVm aW5lIFNQSV9ESUJfTkFNRV9MRU4gwqAxNgo+PiArI2RlZmluZSBTUElfRElCX1NQRUNfSU5GT19M RU4gwqAxMAo+Cj4gTm90IHVzZWQgYW55d2hlcmUKPgo+PiArc3RydWN0IHNwaV9kaWJfaGVhZGVy IHsKPj4gKyDCoCDCoCDCoCB1MzJzaWduYXR1cmU7Cj4+ICsgwqAgwqAgwqAgdTMybGVuZ3RoOwo+ PiArIMKgIMKgIMKgIHU4IHJldjsKPj4gKyDCoCDCoCDCoCB1OCBjaGVja3N1bTsKPj4gKyDCoCDC oCDCoCB1OCBkaWJbMF07Cj4+ICt9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwo+Cj4gc3BpX2Rp Yl9oZWFkZXIgaXNuJ3QgdXNlZCBhbnl3aGVyZS4KPgo+IENoZWVycywKPiBnLgo+Cj4gLS0KPiBH cmFudCBMaWtlbHksIEIuU2MuLCBQLkVuZy4KPiBTZWNyZXQgTGFiIFRlY2hub2xvZ2llcyBMdGQu Cj4KPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiBUaHJvdWdob3V0IGl0cyAxOC15ZWFyIGhpc3Rv cnksIFJTQSBDb25mZXJlbmNlIGNvbnNpc3RlbnRseSBhdHRyYWN0cyB0aGUKPiB3b3JsZCdzIGJl c3QgYW5kIGJyaWdodGVzdCBpbiB0aGUgZmllbGQsIGNyZWF0aW5nIG9wcG9ydHVuaXRpZXMgZm9y IENvbmZlcmVuY2UKPiBhdHRlbmRlZXMgdG8gbGVhcm4gYWJvdXQgaW5mb3JtYXRpb24gc2VjdXJp dHkncyBtb3N0IGltcG9ydGFudCBpc3N1ZXMgdGhyb3VnaAo+IGludGVyYWN0aW9ucyB3aXRoIHBl ZXJzLCBsdW1pbmFyaWVzIGFuZCBlbWVyZ2luZyBhbmQgZXN0YWJsaXNoZWQgY29tcGFuaWVzLgo+ IGh0dHA6Ly9wLnNmLm5ldC9zZnUvcnNhY29uZi1kZXYyZGV2Cj4gX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBzcGktZGV2ZWwtZ2VuZXJhbCBtYWlsaW5n IGxpc3QKPiBzcGktZGV2ZWwtZ2VuZXJhbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKPiBodHRwczov L2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9zcGktZGV2ZWwtZ2VuZXJhbAo+ CgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGhyb3VnaG91dCBpdHMgMTgteWVhciBoaXN0b3J5LCBS U0EgQ29uZmVyZW5jZSBjb25zaXN0ZW50bHkgYXR0cmFjdHMgdGhlCndvcmxkJ3MgYmVzdCBhbmQg YnJpZ2h0ZXN0IGluIHRoZSBmaWVsZCwgY3JlYXRpbmcgb3Bwb3J0dW5pdGllcyBmb3IgQ29uZmVy ZW5jZQphdHRlbmRlZXMgdG8gbGVhcm4gYWJvdXQgaW5mb3JtYXRpb24gc2VjdXJpdHkncyBtb3N0 IGltcG9ydGFudCBpc3N1ZXMgdGhyb3VnaAppbnRlcmFjdGlvbnMgd2l0aCBwZWVycywgbHVtaW5h cmllcyBhbmQgZW1lcmdpbmcgYW5kIGVzdGFibGlzaGVkIGNvbXBhbmllcy4KaHR0cDovL3Auc2Yu bmV0L3NmdS9yc2Fjb25mLWRldjJkZXYKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18Kc3BpLWRldmVsLWdlbmVyYWwgbWFpbGluZyBsaXN0CnNwaS1kZXZlbC1n ZW5lcmFsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldApodHRwczovL2xpc3RzLnNvdXJjZWZvcmdlLm5l dC9saXN0cy9saXN0aW5mby9zcGktZGV2ZWwtZ2VuZXJhbAo=