From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mo4.mail-out.ovh.net ([178.32.228.4]) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1UP6ay-00014u-BQ for barebox@lists.infradead.org; Mon, 08 Apr 2013 07:34:30 +0000 Received: from mail628.ha.ovh.net (b7.ovh.net [213.186.33.57]) by mo4.mail-out.ovh.net (Postfix) with SMTP id 04D26104E8A6 for ; Mon, 8 Apr 2013 09:46:33 +0200 (CEST) Date: Mon, 8 Apr 2013 09:30:27 +0200 From: Jean-Christophe PLAGNIOL-VILLARD Message-ID: <20130408073027.GV1568@game.jcrosoft.org> References: <20130402065241.GB1906@pengutronix.de> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: 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] ARM: Support for IXP4xx Network Processor Engines (NPEs). To: Krzysztof Halasa Cc: barebox@lists.infradead.org T24gMjE6NTcgU3VuIDA3IEFwciAgICAgLCBLcnp5c3p0b2YgSGFsYXNhIHdyb3RlOgo+IFNpZ25l ZC1vZmYtYnk6IEtyenlzenRvZiBIYcWCYXNhIDxraGNAcG0ud2F3LnBsPgo+IAo+IGRpZmYgLS1n aXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgv S2NvbmZpZwo+IGluZGV4IDkyNDRiZTkuLjMzZThiYjMgMTAwNjQ0Cj4gLS0tIGEvYXJjaC9hcm0v bWFjaC1peHA0eHgvS2NvbmZpZwo+ICsrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L0tjb25maWcK PiBAQCAtNiw0ICs2LDEwIEBAIGNvbmZpZyBJWFA0WFhfUU1HUgo+ICAJICBUaGlzIGRyaXZlciBz dXBwb3J0cyBJWFA0eHggYnVpbHQtaW4gaGFyZHdhcmUgcXVldWUgbWFuYWdlcgo+ICAJICBhbmQg aXMgcmVxdWlyZWQgYnkgdGhlIEV0aGVybmV0IGRyaXZlci4KPiAgCj4gK2NvbmZpZyBJWFA0WFhf TlBFCj4gKwl0cmlzdGF0ZSAiSVhQNHh4IE5ldHdvcmsgUHJvY2Vzc29yIEVuZ2luZSBzdXBwb3J0 Igo+ICsJaGVscAo+ICsJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBJWFA0eHggYnVpbHQtaW4gbmV0 d29yayBjb3Byb2Nlc3NvcnMKPiArCSAgYW5kIGlzIHJlcXVpcmVkIGJ5IHRoZSBFdGhlcm5ldCBk cml2ZXIuCj4gKwo+ICBlbmRpZgo+IGRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9N YWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L01ha2VmaWxlCj4gaW5kZXggMDlhMGQ2My4u N2NmYzkyNCAxMDA2NDQKPiAtLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9NYWtlZmlsZQo+ICsr KyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L01ha2VmaWxlCj4gQEAgLTEsMiArMSwzIEBACj4gIG9i ai15ICs9IGdlbmVyaWMubwo+ICBvYmotJChDT05GSUdfSVhQNFhYX1FNR1IpICs9IHFtZ3Iubwo+ ICtvYmotJChDT05GSUdfSVhQNFhYX05QRSkgKz0gbnBlLm8KPiBkaWZmIC0tZ2l0IGEvYXJjaC9h cm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL25wZS5oIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgv aW5jbHVkZS9tYWNoL25wZS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw Li4xOGJkMDFiCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2lu Y2x1ZGUvbWFjaC9ucGUuaAo+IEBAIC0wLDAgKzEsMzAgQEAKPiArI2lmbmRlZiBfX0lYUDRYWF9O UEVfSAo+ICsjZGVmaW5lIF9fSVhQNFhYX05QRV9ICj4gKwo+ICsjaW5jbHVkZSA8Y29tbW9uLmg+ Cj4gKwo+ICsjZGVmaW5lIE5QRV9OQU1FX0xFTkdUSCA1Cj4gKwo+ICtzdHJ1Y3QgbnBlX3JlZ3Mg ewo+ICsJdTMyIGV4ZWNfYWRkciwgZXhlY19kYXRhLCBleGVjX3N0YXR1c19jbWQsIGV4ZWNfY291 bnQ7Cj4gKwl1MzIgYWN0aW9uX3BvaW50c1s0XTsKPiArCXUzMiB3YXRjaHBvaW50X2ZpZm8sIHdh dGNoX2NvdW50Owo+ICsJdTMyIHByb2ZpbGVfY291bnQ7Cj4gKwl1MzIgbWVzc2FnaW5nX3N0YXR1 cywgbWVzc2FnaW5nX2NvbnRyb2w7Cj4gKwl1MzIgbWFpbGJveF9zdGF0dXMsIC8qbWVzc2FnaW5n XyovIGluX291dF9maWZvOwo+ICt9Owo+ICsKPiArc3RydWN0IG5wZSB7Cj4gKwlzdHJ1Y3QgbnBl X3JlZ3MgKnJlZ3M7Cj4gKwlpbnQgaWQsIHZhbGlkOwo+ICsJY29uc3QgY2hhciBuYW1lW05QRV9O QU1FX0xFTkdUSCArIDFdOwo+ICt9Owo+ICsKPiAraW50IG5wZV9ydW5uaW5nKHN0cnVjdCBucGUg Km5wZSk7Cj4gK2ludCBucGVfc2VuZF9tZXNzYWdlKHN0cnVjdCBucGUgKm5wZSwgY29uc3Qgdm9p ZCAqbXNnLCBjb25zdCBjaGFyICp3aGF0KTsKPiAraW50IG5wZV9yZWN2X21lc3NhZ2Uoc3RydWN0 IG5wZSAqbnBlLCB2b2lkICptc2csIGNvbnN0IGNoYXIgKndoYXQpOwo+ICtpbnQgbnBlX3NlbmRf cmVjdl9tZXNzYWdlKHN0cnVjdCBucGUgKm5wZSwgdm9pZCAqbXNnLCBjb25zdCBjaGFyICp3aGF0 KTsKPiAraW50IG5wZV9sb2FkX2Zpcm13YXJlKHN0cnVjdCBucGUgKm5wZSk7Cj4gK3N0cnVjdCBu cGUgKm5wZV9yZXF1ZXN0KGludCBpZCk7Cj4gKwo+ICsjZW5kaWYgLyogX19JWFA0WFhfTlBFX0gg Ki8KPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnBlLmMgYi9hcmNoL2FybS9t YWNoLWl4cDR4eC9ucGUuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4u ZDQwMzM0MAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9ucGUu Ywo+IEBAIC0wLDAgKzEsNjY3IEBACj4gKy8qCj4gKyAqIEludGVsIElYUDR4eCBOZXR3b3JrIFBy b2Nlc3NvciBFbmdpbmUgZHJpdmVyIGZvciBMaW51eAo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMp IDIwMDcgS3J6eXN6dG9mIEhhbGFzYSA8a2hjQHBtLndhdy5wbD4KPiArICoKPiArICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkgaXQKPiArICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKPiArICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGNvbW1vbi5oPgo+ICsjaW5j bHVkZSA8ZXJybm8uaD4KPiArI2luY2x1ZGUgPGZzLmg+Cj4gKyNpbmNsdWRlIDxpbml0Lmg+Cj4g KyNpbmNsdWRlIDxtYWxsb2MuaD4KPiArI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KPiArI2lu Y2x1ZGUgPGFzbS9pby5oPgo+ICsjaW5jbHVkZSA8bWFjaC9peHA0eHgtcmVncy5oPgo+ICsjaW5j bHVkZSA8bWFjaC9jcHUuaD4KPiArI2luY2x1ZGUgPG1hY2gvbnBlLmg+Cj4gKwo+ICsjZGVmaW5l IERFQlVHX01TRyAgICAgICAgICAgICAgICAgICAgICAwCj4gKyNkZWZpbmUgREVCVUdfRlcgICAg ICAgICAgICAgICAgICAgICAgIDAKPiArCj4gKyNkZWZpbmUgTUFYX1JFVFJJRVMgICAgICAgICAg ICAgICAgICAgIDEwMDAgIC8qIG1pY3Jvc2Vjb25kcyAqLwo+ICsjZGVmaW5lIE5QRV80MlhfREFU QV9TSVpFICAgICAgICAgICAgICAweDgwMCAvKiBpbiBkd29yZHMgKi8KPiArI2RlZmluZSBOUEVf NDZYX0RBVEFfU0laRSAgICAgICAgICAgICAgMHgxMDAwCj4gKyNkZWZpbmUgTlBFX0FfNDJYX0lO U1RSX1NJWkUgICAgICAgICAgIDB4MTAwMAo+ICsjZGVmaW5lIE5QRV9CX0FORF9DXzQyWF9JTlNU Ul9TSVpFICAgICAweDgwMAo+ICsjZGVmaW5lIE5QRV80NlhfSU5TVFJfU0laRSAgICAgICAgICAg ICAweDEwMDAKPiArI2RlZmluZSBSRUdTX1NJWkUgICAgICAgICAgICAgICAgICAgICAgMHgxMDAw Cj4gKwo+ICsjZGVmaW5lIE5QRV9QSFlTX1JFRyAgICAgICAgICAgICAgICAgICAzMgo+ICsKPiAr I2RlZmluZSBGV19NQUdJQyAgICAgICAgICAgICAgICAgICAgICAgMHhGRUVERjAwRAo+ICsjZGVm aW5lIEZXX0JMT0NLX1RZUEVfSU5TVFIgICAgICAgICAgICAweDAKPiArI2RlZmluZSBGV19CTE9D S19UWVBFX0RBVEEgICAgICAgICAgICAgMHgxCj4gKyNkZWZpbmUgRldfQkxPQ0tfVFlQRV9FT0Yg ICAgICAgICAgICAgIDB4Rgo+ICsKPiArLyogTlBFIGV4ZWMgc3RhdHVzIChyZWFkKSBhbmQgY29t bWFuZCAod3JpdGUpICovCj4gKyNkZWZpbmUgQ01EX05QRV9TVEVQICAgICAgICAgICAgICAgICAg IDB4MDEKPiArI2RlZmluZSBDTURfTlBFX1NUQVJUICAgICAgICAgICAgICAgICAgMHgwMgo+ICsj ZGVmaW5lIENNRF9OUEVfU1RPUCAgICAgICAgICAgICAgICAgICAweDAzCj4gKyNkZWZpbmUgQ01E X05QRV9DTFJfUElQRSAgICAgICAgICAgICAgIDB4MDQKPiArI2RlZmluZSBDTURfQ0xSX1BST0ZJ TEVfQ05UICAgICAgICAgICAgMHgwQwo+ICsjZGVmaW5lIENNRF9SRF9JTlNfTUVNICAgICAgICAg ICAgICAgICAweDEwIC8qIGluc3RydWN0aW9uIG1lbW9yeSAqLwo+ICsjZGVmaW5lIENNRF9XUl9J TlNfTUVNICAgICAgICAgICAgICAgICAweDExCj4gKyNkZWZpbmUgQ01EX1JEX0RBVEFfTUVNICAg ICAgICAgICAgICAgIDB4MTIgLyogZGF0YSBtZW1vcnkgKi8KPiArI2RlZmluZSBDTURfV1JfREFU QV9NRU0gICAgICAgICAgICAgICAgMHgxMwo+ICsjZGVmaW5lIENNRF9SRF9FQ1NfUkVHICAgICAg ICAgICAgICAgICAweDE0IC8qIGV4ZWMgYWNjZXNzIHJlZ2lzdGVyICovCj4gKyNkZWZpbmUgQ01E X1dSX0VDU19SRUcgICAgICAgICAgICAgICAgIDB4MTUKPiArCj4gKyNkZWZpbmUgU1RBVF9SVU4g ICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKPiArI2RlZmluZSBTVEFUX1NUT1AgICAg ICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAo+ICsjZGVmaW5lIFNUQVRfQ0xFQVIgICAgICAg ICAgICAgICAgICAgICAweDIwMDAwMDAwCj4gKyNkZWZpbmUgU1RBVF9FQ1NfSyAgICAgICAgICAg ICAgICAgICAgIDB4MDA4MDAwMDAgLyogcGlwZWxpbmUgY2xlYW4gKi8KPiArCj4gKyNkZWZpbmUg TlBFX1NURVZUICAgICAgICAgICAgICAgICAgICAgIDB4MUIKPiArI2RlZmluZSBOUEVfU1RBUlRQ QyAgICAgICAgICAgICAgICAgICAgMHgxQwo+ICsjZGVmaW5lIE5QRV9SRUdNQVAgICAgICAgICAg ICAgICAgICAgICAweDFFCj4gKyNkZWZpbmUgTlBFX0NJTkRFWCAgICAgICAgICAgICAgICAgICAg IDB4MUYKPiArCj4gKyNkZWZpbmUgSU5TVFJfV1JfUkVHX1NIT1JUICAgICAgICAgICAgIDB4MDAw MEMwMDAKPiArI2RlZmluZSBJTlNUUl9XUl9SRUdfQllURSAgICAgICAgICAgICAgMHgwMDAwNDAw MAo+ICsjZGVmaW5lIElOU1RSX1JEX0ZJRk8gICAgICAgICAgICAgICAgICAweDBGODg4MjIwCj4g KyNkZWZpbmUgSU5TVFJfUkVTRVRfTUJPWCAgICAgICAgICAgICAgIDB4MEZBQzgyMTAKPiArCj4g KyNkZWZpbmUgRUNTX0JHX0NUWFRfUkVHXzAgICAgICAgICAgICAgIDB4MDAgLyogQmFja2dyb3Vu ZCBFeGVjdXRpbmcgQ29udGV4dCAqLwo+ICsjZGVmaW5lIEVDU19CR19DVFhUX1JFR18xICAgICAg ICAgICAgICAweDAxIC8qIFN0YWNrIGxldmVsICovCj4gKyNkZWZpbmUgRUNTX0JHX0NUWFRfUkVH XzIgICAgICAgICAgICAgIDB4MDIKPiArI2RlZmluZSBFQ1NfUFJJXzFfQ1RYVF9SRUdfMCAgICAg ICAgICAgMHgwNCAvKiBQcmlvcml0eSAxIEV4ZWN1dGluZyBDb250ZXh0ICovCj4gKyNkZWZpbmUg RUNTX1BSSV8xX0NUWFRfUkVHXzEgICAgICAgICAgIDB4MDUgLyogU3RhY2sgbGV2ZWwgKi8KPiAr I2RlZmluZSBFQ1NfUFJJXzFfQ1RYVF9SRUdfMiAgICAgICAgICAgMHgwNgo+ICsjZGVmaW5lIEVD U19QUklfMl9DVFhUX1JFR18wICAgICAgICAgICAweDA4IC8qIFByaW9yaXR5IDIgRXhlY3V0aW5n IENvbnRleHQgKi8KPiArI2RlZmluZSBFQ1NfUFJJXzJfQ1RYVF9SRUdfMSAgICAgICAgICAgMHgw OSAvKiBTdGFjayBsZXZlbCAqLwo+ICsjZGVmaW5lIEVDU19QUklfMl9DVFhUX1JFR18yICAgICAg ICAgICAweDBBCj4gKyNkZWZpbmUgRUNTX0RCR19DVFhUX1JFR18wICAgICAgICAgICAgIDB4MEMg LyogRGVidWcgRXhlY3V0aW5nIENvbnRleHQgKi8KPiArI2RlZmluZSBFQ1NfREJHX0NUWFRfUkVH XzEgICAgICAgICAgICAgMHgwRCAvKiBTdGFjayBsZXZlbCAqLwo+ICsjZGVmaW5lIEVDU19EQkdf Q1RYVF9SRUdfMiAgICAgICAgICAgICAweDBFCj4gKyNkZWZpbmUgRUNTX0lOU1RSVUNUX1JFRyAg ICAgICAgICAgICAgIDB4MTEgLyogTlBFIEluc3RydWN0aW9uIFJlZ2lzdGVyICovCj4gKwo+ICsj ZGVmaW5lIEVDU19SRUdfMF9BQ1RJVkUgICAgICAgICAgICAgICAweDgwMDAwMDAwIC8qIGFsbCBs ZXZlbHMgKi8KPiArI2RlZmluZSBFQ1NfUkVHXzBfTkVYVFBDX01BU0sgICAgICAgICAgMHgxRkZG MDAwMCAvKiBCRy9QUkkxL1BSSTIgbGV2ZWxzICovCj4gKyNkZWZpbmUgRUNTX1JFR18wX0xEVVJf QklUUyAgICAgICAgICAgIDgKPiArI2RlZmluZSBFQ1NfUkVHXzBfTERVUl9NQVNLICAgICAgICAg ICAgMHgwMDAwMDcwMCAvKiBhbGwgbGV2ZWxzICovCj4gKyNkZWZpbmUgRUNTX1JFR18xX0NDVFhU X0JJVFMgICAgICAgICAgIDE2Cj4gKyNkZWZpbmUgRUNTX1JFR18xX0NDVFhUX01BU0sgICAgICAg ICAgIDB4MDAwRjAwMDAgLyogYWxsIGxldmVscyAqLwo+ICsjZGVmaW5lIEVDU19SRUdfMV9TRUxD VFhUX0JJVFMgICAgICAgICAwCj4gKyNkZWZpbmUgRUNTX1JFR18xX1NFTENUWFRfTUFTSyAgICAg ICAgIDB4MDAwMDAwMEYgLyogYWxsIGxldmVscyAqLwo+ICsjZGVmaW5lIEVDU19EQkdfUkVHXzJf SUYgICAgICAgICAgICAgICAweDAwMTAwMDAwIC8qIGRlYnVnIGxldmVsICovCj4gKyNkZWZpbmUg RUNTX0RCR19SRUdfMl9JRSAgICAgICAgICAgICAgIDB4MDAwODAwMDAgLyogZGVidWcgbGV2ZWwg Ki8KPiArCj4gKy8qIE5QRSB3YXRjaHBvaW50X2ZpZm8gcmVnaXN0ZXIgYml0ICovCj4gKyNkZWZp bmUgV0ZJRk9fVkFMSUQgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKPiArCj4gKy8qIE5Q RSBtZXNzYWdpbmdfc3RhdHVzIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyAqLwo+ICsjZGVmaW5l IE1TR1NUQVRfT0ZORSAgMHgwMDAxMDAwMCAvKiBPdXRGaWZvTm90RW1wdHkgKi8KPiArI2RlZmlu ZSBNU0dTVEFUX0lGTkYgIDB4MDAwMjAwMDAgLyogSW5GaWZvTm90RnVsbCAqLwo+ICsjZGVmaW5l IE1TR1NUQVRfT0ZORiAgMHgwMDA0MDAwMCAvKiBPdXRGaWZvTm90RnVsbCAqLwo+ICsjZGVmaW5l IE1TR1NUQVRfSUZORSAgMHgwMDA4MDAwMCAvKiBJbkZpZm9Ob3RFbXB0eSAqLwo+ICsjZGVmaW5l IE1TR1NUQVRfTUJJTlQgMHgwMDEwMDAwMCAvKiBNYWlsYm94IGludGVycnVwdCAqLwo+ICsjZGVm aW5lIE1TR1NUQVRfSUZJTlQgMHgwMDIwMDAwMCAvKiBJbkZpZm8gaW50ZXJydXB0ICovCj4gKyNk ZWZpbmUgTVNHU1RBVF9PRklOVCAweDAwNDAwMDAwIC8qIE91dEZpZm8gaW50ZXJydXB0ICovCj4g KyNkZWZpbmUgTVNHU1RBVF9XRklOVCAweDAwODAwMDAwIC8qIFdhdGNoRmlmbyBpbnRlcnJ1cHQg Ki8KPiArCj4gKy8qIE5QRSBtZXNzYWdpbmdfY29udHJvbCByZWdpc3RlciBiaXQgZGVmaW5pdGlv bnMgKi8KPiArI2RlZmluZSBNU0dDVExfT1VUX0ZJRk8gICAgICAgMHgwMDAxMDAwMCAvKiBlbmFi bGUgb3V0cHV0IEZJRk8gKi8KPiArI2RlZmluZSBNU0dDVExfSU5fRklGTyAgICAgICAgMHgwMDAy MDAwMCAvKiBlbmFibGUgaW5wdXQgRklGTyAqLwo+ICsjZGVmaW5lIE1TR0NUTF9PVVRfRklGT19X UklURSAweDAxMDAwMDAwIC8qIGVuYWJsZSBGSUZPICsgV1JJVEUgKi8KPiArI2RlZmluZSBNU0dD VExfSU5fRklGT19XUklURSAgMHgwMjAwMDAwMAo+ICsKPiArLyogTlBFIG1haWxib3hfc3RhdHVz IHZhbHVlIGZvciByZXNldCAqLwo+ICsjZGVmaW5lIFJFU0VUX01CT1hfU1RBVCAgICAgICAgICAw eDAwMDBGMEYwCj4gKwo+ICsjZGVmaW5lIHByaW50X25wZShucGUsIGZtdCwgLi4uKSBmcHJpbnRm KHN0ZGVyciwgIiVzOiAiIGZtdCwgbnBlLT5uYW1lLCAjIyBfX1ZBX0FSR1NfXykKbm8gcHJpbnRm IHVzZSBkZXZfZGJnCj4gKwo+ICsjaWYgREVCVUdfTVNHCj4gKyNkZWZpbmUgZGVidWdfbXNnKG5w ZSwgZm10LCAuLi4pIHByaW50X25wZShucGUsIGZtdCwgIyMgX19WQV9BUkdTX18pCj4gKyNlbHNl Cj4gKyNkZWZpbmUgZGVidWdfbXNnKG5wZSwgZm10LCAuLi4pCj4gKyNlbmRpZgo+ICsKPiArc3Rh dGljIHN0cnVjdCB7Cj4gKwl1MzIgcmVnLCB2YWw7Cj4gK30gZWNzX3Jlc2V0W10gPSB7Cj4gKwl7 RUNTX0JHX0NUWFRfUkVHXzAsICAgIDB4QTAwMDAwMDB9LAo+ICsJe0VDU19CR19DVFhUX1JFR18x LCAgICAweDAxMDAwMDAwfSwKPiArCXtFQ1NfQkdfQ1RYVF9SRUdfMiwgICAgMHgwMDAwODAwMH0s Cj4gKwl7RUNTX1BSSV8xX0NUWFRfUkVHXzAsIDB4MjAwMDAwODB9LAo+ICsJe0VDU19QUklfMV9D VFhUX1JFR18xLCAweDAxMDAwMDAwfSwKPiArCXtFQ1NfUFJJXzFfQ1RYVF9SRUdfMiwgMHgwMDAw ODAwMH0sCj4gKwl7RUNTX1BSSV8yX0NUWFRfUkVHXzAsIDB4MjAwMDAwODB9LAo+ICsJe0VDU19Q UklfMl9DVFhUX1JFR18xLCAweDAxMDAwMDAwfSwKPiArCXtFQ1NfUFJJXzJfQ1RYVF9SRUdfMiwg MHgwMDAwODAwMH0sCj4gKwl7RUNTX0RCR19DVFhUX1JFR18wLCAgIDB4MjAwMDAwMDB9LAo+ICsJ e0VDU19EQkdfQ1RYVF9SRUdfMSwgICAweDAwMDAwMDAwfSwKPiArCXtFQ1NfREJHX0NUWFRfUkVH XzIsICAgMHgwMDFFMDAwMH0sCj4gKwl7RUNTX0lOU1RSVUNUX1JFRywgICAgIDB4MTAwM0MwMEZ9 LAo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBucGUgbnBlX3RhYltdID0gewo+ICsJewo+ICsJ CS5yZWdzID0gKHN0cnVjdCBucGVfcmVncyAqKUlYUDRYWF9OUEVBX0JBU0UsCj4gKwkJLmlkID0g MCwKPiArCQkubmFtZSA9ICJOUEUtQSIsCj4gKwl9LCB7Cj4gKwkJLnJlZ3MgPSAoc3RydWN0IG5w ZV9yZWdzICopSVhQNFhYX05QRUJfQkFTRSwKPiArCQkuaWQgPSAxLAo+ICsJCS5uYW1lID0gIk5Q RS1CIiwKPiArCX0sIHsKPiArCQkucmVncyA9IChzdHJ1Y3QgbnBlX3JlZ3MgKilJWFA0WFhfTlBF Q19CQVNFLAo+ICsJCS5pZCA9IDIsCj4gKwkJLm5hbWUgPSAiTlBFLUMiLAo+ICsJfQo+ICt9Owo+ ICsKPiAraW50IG5wZV9ydW5uaW5nKHN0cnVjdCBucGUgKm5wZSkKPiArewo+ICsJcmV0dXJuIChf X3Jhd19yZWFkbCgmbnBlLT5yZWdzLT5leGVjX3N0YXR1c19jbWQpICYgU1RBVF9SVU4pICE9IDA7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG5wZV9jbWRfd3JpdGUoc3RydWN0IG5wZSAqbnBlLCB1 MzIgYWRkciwgaW50IGNtZCwgdTMyIGRhdGEpCj4gK3sKPiArCV9fcmF3X3dyaXRlbChkYXRhLCAm bnBlLT5yZWdzLT5leGVjX2RhdGEpOwo+ICsJX19yYXdfd3JpdGVsKGFkZHIsICZucGUtPnJlZ3Mt PmV4ZWNfYWRkcik7Cj4gKwlfX3Jhd193cml0ZWwoY21kLCAmbnBlLT5yZWdzLT5leGVjX3N0YXR1 c19jbWQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdTMyIG5wZV9jbWRfcmVhZChzdHJ1Y3QgbnBlICpu cGUsIHUzMiBhZGRyLCBpbnQgY21kKQo+ICt7Cj4gKwlfX3Jhd193cml0ZWwoYWRkciwgJm5wZS0+ cmVncy0+ZXhlY19hZGRyKTsKPiArCV9fcmF3X3dyaXRlbChjbWQsICZucGUtPnJlZ3MtPmV4ZWNf c3RhdHVzX2NtZCk7Cj4gKwkvKiBJaW50cm9kdWNlIGV4dHJhIHJlYWQgY3ljbGVzIGFmdGVyIGlz c3VpbmcgcmVhZCBjb21tYW5kIHRvIE5QRQo+ICsJICAgc28gdGhhdCB3ZSByZWFkIHRoZSByZWdp c3RlciBhZnRlciB0aGUgTlBFIGhhcyB1cGRhdGVkIGl0Lgo+ICsJICAgVGhpcyBpcyB0byBvdmVy Y29tZSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIFhTY2FsZSBhbmQgTlBFICovCj4gKwlfX3Jhd19y ZWFkbCgmbnBlLT5yZWdzLT5leGVjX2RhdGEpOwo+ICsJX19yYXdfcmVhZGwoJm5wZS0+cmVncy0+ ZXhlY19kYXRhKTsKPiArCXJldHVybiBfX3Jhd19yZWFkbCgmbnBlLT5yZWdzLT5leGVjX2RhdGEp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBucGVfY2xlYXJfYWN0aXZlKHN0cnVjdCBucGUgKm5w ZSwgdTMyIHJlZykKPiArewo+ICsJdTMyIHZhbCA9IG5wZV9jbWRfcmVhZChucGUsIHJlZywgQ01E X1JEX0VDU19SRUcpOwo+ICsJbnBlX2NtZF93cml0ZShucGUsIHJlZywgQ01EX1dSX0VDU19SRUcs IHZhbCAmIH5FQ1NfUkVHXzBfQUNUSVZFKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbnBlX3N0 YXJ0KHN0cnVjdCBucGUgKm5wZSkKPiArewo+ICsJLyogZW5zdXJlIG9ubHkgQmFja2dyb3VuZCBD b250ZXh0IFN0YWNrIExldmVsIGlzIGFjdGl2ZSAqLwo+ICsJbnBlX2NsZWFyX2FjdGl2ZShucGUs IEVDU19QUklfMV9DVFhUX1JFR18wKTsKPiArCW5wZV9jbGVhcl9hY3RpdmUobnBlLCBFQ1NfUFJJ XzJfQ1RYVF9SRUdfMCk7Cj4gKwlucGVfY2xlYXJfYWN0aXZlKG5wZSwgRUNTX0RCR19DVFhUX1JF R18wKTsKPiArCj4gKwlfX3Jhd193cml0ZWwoQ01EX05QRV9DTFJfUElQRSwgJm5wZS0+cmVncy0+ ZXhlY19zdGF0dXNfY21kKTsKPiArCV9fcmF3X3dyaXRlbChDTURfTlBFX1NUQVJULCAmbnBlLT5y ZWdzLT5leGVjX3N0YXR1c19jbWQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBucGVfc3RvcChz dHJ1Y3QgbnBlICpucGUpCj4gK3sKPiArCV9fcmF3X3dyaXRlbChDTURfTlBFX1NUT1AsICZucGUt PnJlZ3MtPmV4ZWNfc3RhdHVzX2NtZCk7Cj4gKwlfX3Jhd193cml0ZWwoQ01EX05QRV9DTFJfUElQ RSwgJm5wZS0+cmVncy0+ZXhlY19zdGF0dXNfY21kKTsgLypGSVhNRT8qLwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IG5wZV9kZWJ1Z19pbnN0cihzdHJ1Y3QgbnBlICpucGUsIHUzMiBpbnN0ciwgdTMy IGN0eCwgdTMyIGxkdXIpCj4gK3sKPiArCXUzMiB3YzsKPiArCWludCBpOwo+ICsKPiArCS8qIHNl dCB0aGUgQWN0aXZlIGJpdCwgYW5kIHRoZSBMRFVSLCBpbiB0aGUgZGVidWcgbGV2ZWwgKi8KPiAr CW5wZV9jbWRfd3JpdGUobnBlLCBFQ1NfREJHX0NUWFRfUkVHXzAsIENNRF9XUl9FQ1NfUkVHLAo+ ICsJCSAgICAgIEVDU19SRUdfMF9BQ1RJVkUgfCAobGR1ciA8PCBFQ1NfUkVHXzBfTERVUl9CSVRT KSk7Cj4gKwo+ICsJLyogc2V0IENDVFhUIGF0IEVDUyBERUJVRyBMMyB0byBzcGVjaWZ5IGluIHdo aWNoIGNvbnRleHQgdG8gZXhlY3V0ZQo+ICsJICAgdGhlIGluc3RydWN0aW9uLCBhbmQgc2V0IFNF TENUWFQgYXQgRUNTIERFQlVHIExldmVsIHRvIHNwZWNpZnkKPiArCSAgIHdoaWNoIGNvbnRleHQg c3RvcmUgdG8gYWNjZXNzLgo+ICsJICAgRGVidWcgRUNTIExldmVsIFJlZyAxIGhhcyBmb3JtIDB4 MDAwbjAwMG4sIHdoZXJlIG4gPSBjb250ZXh0IG51bWJlcgo+ICsJKi8KPiArCW5wZV9jbWRfd3Jp dGUobnBlLCBFQ1NfREJHX0NUWFRfUkVHXzEsIENNRF9XUl9FQ1NfUkVHLAo+ICsJCSAgICAgIChj dHggPDwgRUNTX1JFR18xX0NDVFhUX0JJVFMpIHwKPiArCQkgICAgICAoY3R4IDw8IEVDU19SRUdf MV9TRUxDVFhUX0JJVFMpKTsKPiArCj4gKwkvKiBjbGVhciB0aGUgcGlwZWxpbmUgKi8KPiArCV9f cmF3X3dyaXRlbChDTURfTlBFX0NMUl9QSVBFLCAmbnBlLT5yZWdzLT5leGVjX3N0YXR1c19jbWQp Owo+ICsKPiArCS8qIGxvYWQgTlBFIGluc3RydWN0aW9uIGludG8gdGhlIGluc3RydWN0aW9uIHJl Z2lzdGVyICovCj4gKwlucGVfY21kX3dyaXRlKG5wZSwgRUNTX0lOU1RSVUNUX1JFRywgQ01EX1dS X0VDU19SRUcsIGluc3RyKTsKPiArCj4gKwkvKiB3ZSBuZWVkIHRoaXMgdmFsdWUgbGF0ZXIgdG8g d2FpdCBmb3IgY29tcGxldGlvbiBvZiBOUEUgZXhlY3V0aW9uCj4gKwkgICBzdGVwICovCj4gKwl3 YyA9IF9fcmF3X3JlYWRsKCZucGUtPnJlZ3MtPndhdGNoX2NvdW50KTsKPiArCj4gKwkvKiBpc3N1 ZSBhIFN0ZXAgT25lIGNvbW1hbmQgdmlhIHRoZSBFeGVjdXRpb24gQ29udHJvbCByZWdpc3RlciAq Lwo+ICsJX19yYXdfd3JpdGVsKENNRF9OUEVfU1RFUCwgJm5wZS0+cmVncy0+ZXhlY19zdGF0dXNf Y21kKTsKPiArCj4gKwkvKiBXYXRjaCBDb3VudCByZWdpc3RlciBpbmNyZW1lbnRzIHdoZW4gTlBF IGNvbXBsZXRlcyBhbiBpbnN0cnVjdGlvbiAqLwo+ICsJZm9yIChpID0gMDsgaSA8IE1BWF9SRVRS SUVTOyBpKyspIHsKPiArCQlpZiAod2MgIT0gX19yYXdfcmVhZGwoJm5wZS0+cmVncy0+d2F0Y2hf Y291bnQpKQo+ICsJCQlyZXR1cm4gMDsKPiArCQl1ZGVsYXkoMSk7Cj4gKwl9Cj4gKwo+ICsJcHJp bnRfbnBlKG5wZSwgInJlc2V0OiBucGVfZGVidWdfaW5zdHIoKTogdGltZW91dFxuIik7Cj4gKwly ZXR1cm4gLUVUSU1FRE9VVDsKPiArfQo+ICsKPiArc3RhdGljIGludCBucGVfbG9naWNhbF9yZWdf d3JpdGU4KHN0cnVjdCBucGUgKm5wZSwgdTMyIGFkZHIsIHU4IHZhbCwgdTMyIGN0eCkKPiArewo+ ICsJLyogaGVyZSB3ZSBidWlsZCB0aGUgTlBFIGFzc2VtYmxlciBpbnN0cnVjdGlvbjogbW92OCBk MCwgIzAgKi8KPiArCXUzMiBpbnN0ciA9IElOU1RSX1dSX1JFR19CWVRFIHwgLyogT3BDb2RlICov Cj4gKwkJYWRkciA8PCA5IHwgICAgICAgICAgICAgLyogYmFzZSBPcGVyYW5kICovCj4gKwkJKHZh bCAmIDB4MUYpIDw8IDQgfCAgICAgLyogbG93ZXIgNSBiaXRzIHRvIGltbWVkaWF0ZSBkYXRhICov Cj4gKwkJKHZhbCAmIH4weDFGKSA8PCAoMTggLSA1KTsvKiBoaWdoZXIgMyBiaXRzIHRvIENvUHJv YyBpbnN0ci4gKi8KPiArCXJldHVybiBucGVfZGVidWdfaW5zdHIobnBlLCBpbnN0ciwgY3R4LCAx KTsgLyogZXhlY3V0ZSBpdCAqLwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG5wZV9sb2dpY2FsX3Jl Z193cml0ZTE2KHN0cnVjdCBucGUgKm5wZSwgdTMyIGFkZHIsIHUxNiB2YWwsIHUzMiBjdHgpCj4g K3sKPiArCS8qIGhlcmUgd2UgYnVpbGQgdGhlIE5QRSBhc3NlbWJsZXIgaW5zdHJ1Y3Rpb246IG1v djE2IGQwLCAjMCAqLwo+ICsJdTMyIGluc3RyID0gSU5TVFJfV1JfUkVHX1NIT1JUIHwgLyogT3BD b2RlICovCj4gKwkJYWRkciA8PCA5IHwgICAgICAgICAgICAgLyogYmFzZSBPcGVyYW5kICovCj4g KwkJKHZhbCAmIDB4MUYpIDw8IDQgfCAgICAgLyogbG93ZXIgNSBiaXRzIHRvIGltbWVkaWF0ZSBk YXRhICovCj4gKwkJKHZhbCAmIH4weDFGKSA8PCAoMTggLSA1KTsvKiBoaWdoZXIgMTEgYml0cyB0 byBDb1Byb2MgaW5zdHIuICovCj4gKwlyZXR1cm4gbnBlX2RlYnVnX2luc3RyKG5wZSwgaW5zdHIs IGN0eCwgMSk7IC8qIGV4ZWN1dGUgaXQgKi8KPiArfQo+ICsKPiArc3RhdGljIGludCBucGVfbG9n aWNhbF9yZWdfd3JpdGUzMihzdHJ1Y3QgbnBlICpucGUsIHUzMiBhZGRyLCB1MzIgdmFsLCB1MzIg Y3R4KQo+ICt7Cj4gKwkvKiB3cml0ZSBpbiAxNiBiaXQgc3RlcHMgZmlyc3QgdGhlIGhpZ2ggYW5k IHRoZW4gdGhlIGxvdyB2YWx1ZSAqLwo+ICsJaWYgKG5wZV9sb2dpY2FsX3JlZ193cml0ZTE2KG5w ZSwgYWRkciwgdmFsID4+IDE2LCBjdHgpKQo+ICsJCXJldHVybiAtRVRJTUVET1VUOwo+ICsJcmV0 dXJuIG5wZV9sb2dpY2FsX3JlZ193cml0ZTE2KG5wZSwgYWRkciArIDIsIHZhbCAmIDB4RkZGRiwg Y3R4KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBucGVfcmVzZXQoc3RydWN0IG5wZSAqbnBlKQo+ ICt7Cj4gKwl1MzIgdmFsLCBjdGwsIGV4ZWNfY291bnQsIGN0eF9yZWcyOwo+ICsJaW50IGk7Cj4g Kwo+ICsJY3RsID0gKF9fcmF3X3JlYWRsKCZucGUtPnJlZ3MtPm1lc3NhZ2luZ19jb250cm9sKSB8 IDB4M0YwMDAwMDApICYKPiArCQkweDNGM0ZGRkZGOwo+ICsKPiArCS8qIGRpc2FibGUgcGFyaXR5 IGludGVycnVwdCAqLwo+ICsJX19yYXdfd3JpdGVsKGN0bCAmIDB4M0YwMEZGRkYsICZucGUtPnJl Z3MtPm1lc3NhZ2luZ19jb250cm9sKTsKPiArCj4gKwkvKiBwcmUgZXhlYyAtIGRlYnVnIGluc3Ry dWN0aW9uICovCj4gKwkvKiB0dXJuIG9mZiB0aGUgaGFsdCBiaXQgYnkgY2xlYXJpbmcgRXhlY3V0 aW9uIENvdW50IHJlZ2lzdGVyLiAqLwo+ICsJZXhlY19jb3VudCA9IF9fcmF3X3JlYWRsKCZucGUt PnJlZ3MtPmV4ZWNfY291bnQpOwo+ICsJX19yYXdfd3JpdGVsKDAsICZucGUtPnJlZ3MtPmV4ZWNf Y291bnQpOwo+ICsJLyogZW5zdXJlIHRoYXQgSUYgYW5kIElFIGFyZSBvbiAodGVtcG9yYXJpbHkp LCBzbyB0aGF0IHdlIGRvbid0IGVuZCB1cAo+ICsJICAgc3RlcHBpbmcgZm9yZXZlciAqLwo+ICsJ Y3R4X3JlZzIgPSBucGVfY21kX3JlYWQobnBlLCBFQ1NfREJHX0NUWFRfUkVHXzIsIENNRF9SRF9F Q1NfUkVHKTsKPiArCW5wZV9jbWRfd3JpdGUobnBlLCBFQ1NfREJHX0NUWFRfUkVHXzIsIENNRF9X Ul9FQ1NfUkVHLCBjdHhfcmVnMiB8Cj4gKwkJICAgICAgRUNTX0RCR19SRUdfMl9JRiB8IEVDU19E QkdfUkVHXzJfSUUpOwo+ICsKPiArCS8qIGNsZWFyIHRoZSBGSUZPcyAqLwo+ICsJd2hpbGUgKF9f cmF3X3JlYWRsKCZucGUtPnJlZ3MtPndhdGNocG9pbnRfZmlmbykgJiBXRklGT19WQUxJRCkKPiAr CQk7Cj4gKwl3aGlsZSAoX19yYXdfcmVhZGwoJm5wZS0+cmVncy0+bWVzc2FnaW5nX3N0YXR1cykg JiBNU0dTVEFUX09GTkUpCj4gKwkJLyogcmVhZCBmcm9tIHRoZSBvdXRGSUZPIHVudGlsIGVtcHR5 ICovCj4gKwkJcHJpbnRfbnBlKG5wZSwgIm5wZV9yZXNldDogcmVhZCBGSUZPID0gMHglWFxuIiwK PiArCQkJICBfX3Jhd19yZWFkbCgmbnBlLT5yZWdzLT5pbl9vdXRfZmlmbykpOwo+ICsKPiArCXdo aWxlIChfX3Jhd19yZWFkbCgmbnBlLT5yZWdzLT5tZXNzYWdpbmdfc3RhdHVzKSAmIE1TR1NUQVRf SUZORSkKPiArCQkvKiBzdGVwIGV4ZWN1dGlvbiBvZiB0aGUgTlBFIGludHJ1Y3Rpb24gdG8gcmVh ZCBpbkZJRk8gdXNpbmcKPiArCQkgICB0aGUgRGVidWcgRXhlY3V0aW5nIENvbnRleHQgc3RhY2sg Ki8KPiArCQlpZiAobnBlX2RlYnVnX2luc3RyKG5wZSwgSU5TVFJfUkRfRklGTywgMCwgMCkpCj4g KwkJCXJldHVybiAtRVRJTUVET1VUOwo+ICsKPiArCS8qIHJlc2V0IHRoZSBtYWlsYm94IHJlZyBm cm9tIHRoZSBYU2NhbGUgc2lkZSAqLwo+ICsJX19yYXdfd3JpdGVsKFJFU0VUX01CT1hfU1RBVCwg Jm5wZS0+cmVncy0+bWFpbGJveF9zdGF0dXMpOwo+ICsJLyogZnJvbSBOUEUgc2lkZSAqLwo+ICsJ aWYgKG5wZV9kZWJ1Z19pbnN0cihucGUsIElOU1RSX1JFU0VUX01CT1gsIDAsIDApKQo+ICsJCXJl dHVybiAtRVRJTUVET1VUOwo+ICsKPiArCS8qIFJlc2V0IHRoZSBwaHlzaWNhbCByZWdpc3RlcnMg aW4gdGhlIE5QRSByZWdpc3RlciBmaWxlICovCj4gKwlmb3IgKHZhbCA9IDA7IHZhbCA8IE5QRV9Q SFlTX1JFRzsgdmFsKyspIHsKPiArCQlpZiAobnBlX2xvZ2ljYWxfcmVnX3dyaXRlMTYobnBlLCBO UEVfUkVHTUFQLCB2YWwgPj4gMSwgMCkpCj4gKwkJCXJldHVybiAtRVRJTUVET1VUOwo+ICsJCS8q IGFkZHJlc3MgaXMgZWl0aGVyIDAgb3IgNCAqLwo+ICsJCWlmIChucGVfbG9naWNhbF9yZWdfd3Jp dGUzMihucGUsICh2YWwgJiAxKSAqIDQsIDAsIDApKQo+ICsJCQlyZXR1cm4gLUVUSU1FRE9VVDsK PiArCX0KPiArCj4gKwkvKiBSZXNldCB0aGUgY29udGV4dCBzdG9yZSA9IGVhY2ggY29udGV4dCdz IENvbnRleHQgU3RvcmUgcmVnaXN0ZXJzICovCj4gKwo+ICsJLyogQ29udGV4dCAwIGhhcyBubyBT VEFSVFBDLiBJbnN0ZWFkLCB0aGlzIHZhbHVlIGlzIHVzZWQgdG8gc2V0IE5leHRQQwo+ICsJICAg Zm9yIEJhY2tncm91bmQgRUNTLCB0byBzZXQgd2hlcmUgTlBFIHN0YXJ0cyBleGVjdXRpbmcgY29k ZSAqLwo+ICsJdmFsID0gbnBlX2NtZF9yZWFkKG5wZSwgRUNTX0JHX0NUWFRfUkVHXzAsIENNRF9S RF9FQ1NfUkVHKTsKPiArCXZhbCAmPSB+RUNTX1JFR18wX05FWFRQQ19NQVNLOwo+ICsJdmFsIHw9 ICgwIC8qIE5leHRQQyAqLyA8PCAxNikgJiBFQ1NfUkVHXzBfTkVYVFBDX01BU0s7Cj4gKwlucGVf Y21kX3dyaXRlKG5wZSwgRUNTX0JHX0NUWFRfUkVHXzAsIENNRF9XUl9FQ1NfUkVHLCB2YWwpOwo+ ICsKPiArCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Cj4gKwkJaWYgKGkpIHsgLyogQ29udGV4 dCAwIGhhcyBubyBTVEVWVCBub3IgU1RBUlRQQyAqLwo+ICsJCQkvKiBTVEVWVCA9IG9mZiwgMHg4 MCAqLwo+ICsJCQlpZiAobnBlX2xvZ2ljYWxfcmVnX3dyaXRlOChucGUsIE5QRV9TVEVWVCwgMHg4 MCwgaSkpCj4gKwkJCQlyZXR1cm4gLUVUSU1FRE9VVDsKPiArCQkJaWYgKG5wZV9sb2dpY2FsX3Jl Z193cml0ZTE2KG5wZSwgTlBFX1NUQVJUUEMsIDAsIGkpKQo+ICsJCQkJcmV0dXJuIC1FVElNRURP VVQ7Cj4gKwkJfQo+ICsJCS8qIFJFR01BUCA9IGQwLT5wMCwgZDgtPnAyLCBkMTYtPnA0ICovCj4g KwkJaWYgKG5wZV9sb2dpY2FsX3JlZ193cml0ZTE2KG5wZSwgTlBFX1JFR01BUCwgMHg4MjAsIGkp KQo+ICsJCQlyZXR1cm4gLUVUSU1FRE9VVDsKPiArCQlpZiAobnBlX2xvZ2ljYWxfcmVnX3dyaXRl OChucGUsIE5QRV9DSU5ERVgsIDAsIGkpKQo+ICsJCQlyZXR1cm4gLUVUSU1FRE9VVDsKPiArCX0K PiArCj4gKwkvKiBwb3N0IGV4ZWMgKi8KPiArCS8qIGNsZWFyIGFjdGl2ZSBiaXQgaW4gZGVidWcg bGV2ZWwgKi8KPiArCW5wZV9jbWRfd3JpdGUobnBlLCBFQ1NfREJHX0NUWFRfUkVHXzAsIENNRF9X Ul9FQ1NfUkVHLCAwKTsKPiArCS8qIGNsZWFyIHRoZSBwaXBlbGluZSAqLwo+ICsJX19yYXdfd3Jp dGVsKENNRF9OUEVfQ0xSX1BJUEUsICZucGUtPnJlZ3MtPmV4ZWNfc3RhdHVzX2NtZCk7Cj4gKwkv KiByZXN0b3JlIHByZXZpb3VzIHZhbHVlcyAqLwo+ICsJX19yYXdfd3JpdGVsKGV4ZWNfY291bnQs ICZucGUtPnJlZ3MtPmV4ZWNfY291bnQpOwo+ICsJbnBlX2NtZF93cml0ZShucGUsIEVDU19EQkdf Q1RYVF9SRUdfMiwgQ01EX1dSX0VDU19SRUcsIGN0eF9yZWcyKTsKPiArCj4gKwkvKiB3cml0ZSBy ZXNldCB2YWx1ZXMgdG8gRXhlY3V0aW9uIENvbnRleHQgU3RhY2sgcmVnaXN0ZXJzICovCj4gKwlm b3IgKHZhbCA9IDA7IHZhbCA8IEFSUkFZX1NJWkUoZWNzX3Jlc2V0KTsgdmFsKyspCj4gKwkJbnBl X2NtZF93cml0ZShucGUsIGVjc19yZXNldFt2YWxdLnJlZywgQ01EX1dSX0VDU19SRUcsCj4gKwkJ CSAgICAgIGVjc19yZXNldFt2YWxdLnZhbCk7Cj4gKwo+ICsJLyogY2xlYXIgdGhlIHByb2ZpbGUg Y291bnRlciAqLwo+ICsJX19yYXdfd3JpdGVsKENNRF9DTFJfUFJPRklMRV9DTlQsICZucGUtPnJl Z3MtPmV4ZWNfc3RhdHVzX2NtZCk7Cj4gKwo+ICsJX19yYXdfd3JpdGVsKDAsICZucGUtPnJlZ3Mt PmV4ZWNfY291bnQpOwo+ICsJX19yYXdfd3JpdGVsKDAsICZucGUtPnJlZ3MtPmFjdGlvbl9wb2lu dHNbMF0pOwo+ICsJX19yYXdfd3JpdGVsKDAsICZucGUtPnJlZ3MtPmFjdGlvbl9wb2ludHNbMV0p Owo+ICsJX19yYXdfd3JpdGVsKDAsICZucGUtPnJlZ3MtPmFjdGlvbl9wb2ludHNbMl0pOwo+ICsJ X19yYXdfd3JpdGVsKDAsICZucGUtPnJlZ3MtPmFjdGlvbl9wb2ludHNbM10pOwo+ICsJX19yYXdf d3JpdGVsKDAsICZucGUtPnJlZ3MtPndhdGNoX2NvdW50KTsKPiArCj4gKwl2YWwgPSBpeHA0eHhf cmVhZF9mZWF0dXJlX2JpdHMoKTsKPiArCS8qIHJlc2V0IHRoZSBOUEUgKi8KPiArCWl4cDR4eF93 cml0ZV9mZWF0dXJlX2JpdHModmFsICYKPiArCQkJCSAgfihJWFA0WFhfRkVBVFVSRV9SRVNFVF9O UEVBIDw8IG5wZS0+aWQpKTsKPiArCS8qIGRlYXNzZXJ0IHJlc2V0ICovCj4gKwlpeHA0eHhfd3Jp dGVfZmVhdHVyZV9iaXRzKHZhbCB8Cj4gKwkJCQkgIChJWFA0WFhfRkVBVFVSRV9SRVNFVF9OUEVB IDw8IG5wZS0+aWQpKTsKPiArCWZvciAoaSA9IDA7IGkgPCBNQVhfUkVUUklFUzsgaSsrKSB7Cj4g KwkJaWYgKGl4cDR4eF9yZWFkX2ZlYXR1cmVfYml0cygpICYKPiArCQkgICAgKElYUDRYWF9GRUFU VVJFX1JFU0VUX05QRUEgPDwgbnBlLT5pZCkpCj4gKwkJCWJyZWFrOyAvKiBOUEUgaXMgYmFjayBh bGl2ZSAqLwo+ICsJCXVkZWxheSgxKTsKPiArCX0KPiArCWlmIChpID09IE1BWF9SRVRSSUVTKQo+ ICsJCXJldHVybiAtRVRJTUVET1VUOwo+ICsKPiArCW5wZV9zdG9wKG5wZSk7Cj4gKwo+ICsJLyog cmVzdG9yZSBOUEUgY29uZmlndXJhdGlvbiBidXMgQ29udHJvbCBSZWdpc3RlciAtIHBhcml0eSBz ZXR0aW5ncyAqLwo+ICsJX19yYXdfd3JpdGVsKGN0bCwgJm5wZS0+cmVncy0+bWVzc2FnaW5nX2Nv bnRyb2wpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKwo+ICtpbnQgbnBlX3NlbmRfbWVzc2Fn ZShzdHJ1Y3QgbnBlICpucGUsIGNvbnN0IHZvaWQgKm1zZywgY29uc3QgY2hhciAqd2hhdCkKPiAr ewo+ICsJY29uc3QgdTMyICpzZW5kID0gbXNnOwo+ICsJaW50IGN5Y2xlcyA9IDA7Cj4gKwo+ICsJ ZGVidWdfbXNnKG5wZSwgIlRyeWluZyB0byBzZW5kIG1lc3NhZ2UgJXMgWyUwOFg6JTA4WF1cbiIs Cj4gKwkJICB3aGF0LCBzZW5kWzBdLCBzZW5kWzFdKTsKPiArCj4gKwlpZiAoX19yYXdfcmVhZGwo Jm5wZS0+cmVncy0+bWVzc2FnaW5nX3N0YXR1cykgJiBNU0dTVEFUX0lGTkUpIHsKPiArCQlkZWJ1 Z19tc2cobnBlLCAiTlBFIGlucHV0IEZJRk8gbm90IGVtcHR5XG4iKTsKPiArCQlyZXR1cm4gLUVJ TzsKPiArCX0KPiArCj4gKwlfX3Jhd193cml0ZWwoc2VuZFswXSwgJm5wZS0+cmVncy0+aW5fb3V0 X2ZpZm8pOwo+ICsKPiArCWlmICghKF9fcmF3X3JlYWRsKCZucGUtPnJlZ3MtPm1lc3NhZ2luZ19z dGF0dXMpICYgTVNHU1RBVF9JRk5GKSkgewo+ICsJCWRlYnVnX21zZyhucGUsICJOUEUgaW5wdXQg RklGTyBmdWxsXG4iKTsKPiArCQlyZXR1cm4gLUVJTzsKPiArCX0KPiArCj4gKwlfX3Jhd193cml0 ZWwoc2VuZFsxXSwgJm5wZS0+cmVncy0+aW5fb3V0X2ZpZm8pOwo+ICsKPiArCXdoaWxlICgoY3lj bGVzIDwgTUFYX1JFVFJJRVMpICYmCj4gKwkgICAgICAgKF9fcmF3X3JlYWRsKCZucGUtPnJlZ3Mt Pm1lc3NhZ2luZ19zdGF0dXMpICYgTVNHU1RBVF9JRk5FKSkgewo+ICsJCXVkZWxheSgxKTsKPiAr CQljeWNsZXMrKzsKPiArCX0KPiArCj4gKwlpZiAoY3ljbGVzID09IE1BWF9SRVRSSUVTKSB7Cj4g KwkJZGVidWdfbXNnKG5wZSwgIlRpbWVvdXQgc2VuZGluZyBtZXNzYWdlXG4iKTsKPiArCQlyZXR1 cm4gLUVUSU1FRE9VVDsKPiArCX0KPiArCj4gKyNpZiBERUJVR19NU0cgPiAxCj4gKwlkZWJ1Z19t c2cobnBlLCAiU2VuZGluZyBhIG1lc3NhZ2UgdG9vayAlaSBjeWNsZXNcbiIsIGN5Y2xlcyk7Cj4g KyNlbmRpZgo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCBucGVfcmVjdl9tZXNzYWdlKHN0 cnVjdCBucGUgKm5wZSwgdm9pZCAqbXNnLCBjb25zdCBjaGFyICp3aGF0KQo+ICt7Cj4gKwl1MzIg KnJlY3YgPSBtc2c7Cj4gKwlpbnQgY3ljbGVzID0gMCwgY250ID0gMDsKPiArCj4gKwlkZWJ1Z19t c2cobnBlLCAiVHJ5aW5nIHRvIHJlY2VpdmUgbWVzc2FnZSAlc1xuIiwgd2hhdCk7Cj4gKwo+ICsJ d2hpbGUgKGN5Y2xlcyA8IE1BWF9SRVRSSUVTKSB7Cj4gKwkJaWYgKF9fcmF3X3JlYWRsKCZucGUt PnJlZ3MtPm1lc3NhZ2luZ19zdGF0dXMpICYgTVNHU1RBVF9PRk5FKSB7Cj4gKwkJCXJlY3ZbY250 KytdID0gX19yYXdfcmVhZGwoJm5wZS0+cmVncy0+aW5fb3V0X2ZpZm8pOwo+ICsJCQlpZiAoY250 ID09IDIpCj4gKwkJCQlicmVhazsKPiArCQl9IGVsc2Ugewo+ICsJCQl1ZGVsYXkoMSk7Cj4gKwkJ CWN5Y2xlcysrOwo+ICsJCX0KPiArCX0KPiArCj4gKwlzd2l0Y2goY250KSB7Cj4gKwljYXNlIDE6 Cj4gKwkJZGVidWdfbXNnKG5wZSwgIlJlY2VpdmVkIFslMDhYXVxuIiwgcmVjdlswXSk7Cj4gKwkJ YnJlYWs7Cj4gKwljYXNlIDI6Cj4gKwkJZGVidWdfbXNnKG5wZSwgIlJlY2VpdmVkIFslMDhYOiUw OFhdXG4iLCByZWN2WzBdLCByZWN2WzFdKTsKPiArCQlicmVhazsKPiArCX0KPiArCj4gKwlpZiAo Y3ljbGVzID09IE1BWF9SRVRSSUVTKSB7Cj4gKwkJZGVidWdfbXNnKG5wZSwgIlRpbWVvdXQgd2Fp dGluZyBmb3IgbWVzc2FnZVxuIik7Cj4gKwkJcmV0dXJuIC1FVElNRURPVVQ7Cj4gKwl9Cj4gKwo+ ICsjaWYgREVCVUdfTVNHID4gMQo+ICsJZGVidWdfbXNnKG5wZSwgIlJlY2VpdmluZyBhIG1lc3Nh Z2UgdG9vayAlaSBjeWNsZXNcbiIsIGN5Y2xlcyk7Cj4gKyNlbmRpZgo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gK2ludCBucGVfc2VuZF9yZWN2X21lc3NhZ2Uoc3RydWN0IG5wZSAqbnBlLCB2b2lk ICptc2csIGNvbnN0IGNoYXIgKndoYXQpCj4gK3sKPiArCWludCByZXN1bHQ7Cj4gKwl1MzIgKnNl bmQgPSBtc2csIHJlY3ZbMl07Cj4gKwo+ICsJaWYgKChyZXN1bHQgPSBucGVfc2VuZF9tZXNzYWdl KG5wZSwgbXNnLCB3aGF0KSkgIT0gMCkKPiArCQlyZXR1cm4gcmVzdWx0Owo+ICsJaWYgKChyZXN1 bHQgPSBucGVfcmVjdl9tZXNzYWdlKG5wZSwgcmVjdiwgd2hhdCkpICE9IDApCj4gKwkJcmV0dXJu IHJlc3VsdDsKPiArCj4gKwlpZiAoKHJlY3ZbMF0gIT0gc2VuZFswXSkgfHwgKHJlY3ZbMV0gIT0g c2VuZFsxXSkpIHsKPiArCQlkZWJ1Z19tc2cobnBlLCAiTWVzc2FnZSAlczogdW5leHBlY3RlZCBt ZXNzYWdlIHJlY2VpdmVkXG4iLAo+ICsJCQkgIHdoYXQpOwo+ICsJCXJldHVybiAtRUlPOwo+ICsJ fQo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKwo+ICtpbnQgbnBlX2xvYWRfZmlybXdhcmUoc3Ry dWN0IG5wZSAqbnBlKQo+ICt7Cj4gKwlzdHJ1Y3QgZGxfYmxvY2sgewo+ICsJCXUzMiB0eXBlOwo+ ICsJCXUzMiBvZmZzZXQ7Cj4gKwl9ICpibGs7Cj4gKwo+ICsJc3RydWN0IGRsX2ltYWdlIHsKPiAr CQl1MzIgbWFnaWM7Cj4gKwkJdTMyIGlkOwo+ICsJCXUzMiBzaXplOwo+ICsJCXVuaW9uIHsKPiAr CQkJdTMyIGRhdGFbMF07Cj4gKwkJCXN0cnVjdCBkbF9ibG9jayBibG9ja3NbMF07Cj4gKwkJfTsK PiArCX0gKmltYWdlOwo+ICsKPiArCXN0cnVjdCBkbF9jb2RlYmxvY2sgewo+ICsJCXUzMiBucGVf YWRkcjsKPiArCQl1MzIgc2l6ZTsKPiArCQl1MzIgZGF0YVswXTsKPiArCX0gKmNiOwo+ICsKPiAr CWludCBpLCBqLCBlcnIsIGRhdGFfc2l6ZSwgaW5zdHJfc2l6ZSwgYmxvY2tzLCB0YWJsZV9lbmQ7 Cj4gKwl1MzIgY21kOwo+ICsJY2hhciBuYW1lWzEwIC8qICIvZmlybXdhcmUvIiAqLyArIE5QRV9O QU1FX0xFTkdUSCArIDEgLyogTlVMICovXTsKPiArCXNpemVfdCBpbWFnZV9zaXplOwo+ICsKPiAr CXNwcmludGYobmFtZSwgIi9maXJtd2FyZS8lcyIsIG5wZS0+bmFtZSk7Cj4gKwlpZiAoIShpbWFn ZSA9IHJlYWRfZmlsZShuYW1lLCAmaW1hZ2Vfc2l6ZSkpKSB7Cj4gKwkJcHJpbnRfbnBlKG5wZSwg ImJhZCBvciBtaXNzaW5nIG1pY3JvY29kZSBmaWxlICVzXG4iLCBuYW1lKTsKPiArCQlyZXR1cm4g LUVJTzsKPiArCX0KPiArCj4gKwllcnIgPSAtRUlOVkFMOwo+ICsJaWYgKGltYWdlX3NpemUgPCBz aXplb2Yoc3RydWN0IGRsX2ltYWdlKSkgewo+ICsJCXByaW50X25wZShucGUsICJpbmNvbXBsZXRl IG1pY3JvY29kZSBmaWxlICVzXG4iLCBuYW1lKTsKPiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4g KyNpZiBERUJVR19GVwo+ICsJcHJpbnRfbnBlKG5wZSwgIm1pY3JvY29kZTogJTA4WCAlMDhYICUw OFggKDB4JVggYnl0ZXMpXG4iLAo+ICsJCSAgaW1hZ2UtPm1hZ2ljLCBpbWFnZS0+aWQsIGltYWdl LT5zaXplLCBpbWFnZS0+c2l6ZSAqIDQpOwo+ICsjZW5kaWYKPiArCj4gKwlpZiAoaW1hZ2UtPm1h Z2ljID09IHN3YWIzMihGV19NQUdJQykpIHsgLyogc3dhcHBlZCBmaWxlICovCj4gKwkJaW1hZ2Ut PmlkID0gc3dhYjMyKGltYWdlLT5pZCk7Cj4gKwkJaW1hZ2UtPnNpemUgPSBzd2FiMzIoaW1hZ2Ut PnNpemUpOwo+ICsJfSBlbHNlIGlmIChpbWFnZS0+bWFnaWMgIT0gRldfTUFHSUMpIHsKPiArCQlw cmludF9ucGUobnBlLCAiYmFkIG1pY3JvY29kZSBmaWxlICVzIG1hZ2ljOiAweCVYXG4iLCBuYW1l LCBpbWFnZS0+bWFnaWMpOwo+ICsJCWdvdG8gZXJyOwo+ICsJfQo+ICsJaWYgKChpbWFnZS0+c2l6 ZSAqIDQgKyBzaXplb2Yoc3RydWN0IGRsX2ltYWdlKSkgPiBpbWFnZV9zaXplKSB7Cj4gKwkJcHJp bnRfbnBlKG5wZSwgImluY29tcGxldGUgbWljcm9jb2RlIGZpbGUgJXNcbiIsIG5hbWUpOwo+ICsJ CWdvdG8gZXJyOwo+ICsJfQo+ICsJaWYgKCgoaW1hZ2UtPmlkID4+IDI0KSAmIDB4RiAvKiBOUEUg SUQgKi8pICE9IG5wZS0+aWQpIHsKPiArCQlwcmludF9ucGUobnBlLCAiTlBFIElEIG1pc21hdGNo IGluIG1pY3JvY29kZSBmaWxlICVzXG4iLCBuYW1lKTsKPiArCQlnb3RvIGVycjsKPiArCX0KPiAr CWlmIChpbWFnZS0+bWFnaWMgPT0gc3dhYjMyKEZXX01BR0lDKSkKPiArCQlmb3IgKGkgPSAwOyBp IDwgaW1hZ2UtPnNpemU7IGkrKykKPiArCQkJaW1hZ2UtPmRhdGFbaV0gPSBzd2FiMzIoaW1hZ2Ut PmRhdGFbaV0pOwo+ICsKPiArCWlmIChjcHVfaXNfaXhwNDJ4KCkgJiYgKChpbWFnZS0+aWQgPj4g MjgpICYgMHhGIC8qIGRldmljZSBJRCAqLykpIHsKPiArCQlwcmludF9ucGUobnBlLCAiSVhQNDN4 L0lYUDQ2eCBtaWNyb2NvZGUgaWdub3JlZCBvbiBJWFA0MnhcbiIpOwo+ICsJCWdvdG8gZXJyOwo+ ICsJfQo+ICsKPiArCWlmIChucGVfcnVubmluZyhucGUpKSB7Cj4gKwkJcHJpbnRfbnBlKG5wZSwg InVuYWJsZSB0byBsb2FkIG1pY3JvY29kZSBmaWxlICVzLCBOUEUgaXMgYWxyZWFkeSBydW5uaW5n XG4iLCBuYW1lKTsKPiArCQllcnIgPSAtRUJVU1k7Cj4gKwkJZ290byBlcnI7Cj4gKwl9Cj4gKwo+ ICsJaWYgKGNwdV9pc19peHA0MngoKSkgewo+ICsJCWlmICghbnBlLT5pZCkKPiArCQkJaW5zdHJf c2l6ZSA9IE5QRV9BXzQyWF9JTlNUUl9TSVpFOwo+ICsJCWVsc2UKPiArCQkJaW5zdHJfc2l6ZSA9 IE5QRV9CX0FORF9DXzQyWF9JTlNUUl9TSVpFOwo+ICsJCWRhdGFfc2l6ZSA9IE5QRV80MlhfREFU QV9TSVpFOwo+ICsJfSBlbHNlIHsKPiArCQlpbnN0cl9zaXplID0gTlBFXzQ2WF9JTlNUUl9TSVpF Owo+ICsJCWRhdGFfc2l6ZSA9IE5QRV80NlhfREFUQV9TSVpFOwo+ICsJfQo+ICsKPiArCWZvciAo YmxvY2tzID0gMDsgYmxvY2tzICogc2l6ZW9mKHN0cnVjdCBkbF9ibG9jaykgLyA0IDwgaW1hZ2Ut PnNpemU7Cj4gKwkgICAgIGJsb2NrcysrKQo+ICsJCWlmIChpbWFnZS0+YmxvY2tzW2Jsb2Nrc10u dHlwZSA9PSBGV19CTE9DS19UWVBFX0VPRikKPiArCQkJYnJlYWs7Cj4gKwlpZiAoYmxvY2tzICog c2l6ZW9mKHN0cnVjdCBkbF9ibG9jaykgLyA0ID49IGltYWdlLT5zaXplKSB7Cj4gKwkJcHJpbnRf bnBlKG5wZSwgIm1pY3JvY29kZSBFT0YgYmxvY2sgbWFya2VyIG5vdCBmb3VuZFxuIik7Cj4gKwkJ Z290byBlcnI7Cj4gKwl9Cj4gKwo+ICsjaWYgREVCVUdfRlcKPiArCXByaW50X25wZShucGUsICIl aSBtaWNyb2NvZGUgYmxvY2tzIGZvdW5kXG4iLCBibG9ja3MpOwo+ICsjZW5kaWYKPiArCj4gKwl0 YWJsZV9lbmQgPSBibG9ja3MgKiBzaXplb2Yoc3RydWN0IGRsX2Jsb2NrKSAvIDQgKyAxIC8qIEVP RiBtYXJrZXIgKi87Cj4gKwlmb3IgKGkgPSAwLCBibGsgPSBpbWFnZS0+YmxvY2tzOyBpIDwgYmxv Y2tzOyBpKyssIGJsaysrKSB7Cj4gKwkJaWYgKGJsay0+b2Zmc2V0ID4gaW1hZ2UtPnNpemUgLSBz aXplb2Yoc3RydWN0IGRsX2NvZGVibG9jaykgLyA0Cj4gKwkJICAgIHx8IGJsay0+b2Zmc2V0IDwg dGFibGVfZW5kKSB7Cj4gKwkJCXByaW50X25wZShucGUsICJpbnZhbGlkIG9mZnNldCAweCVYIG9m ICIKPiArCQkJCSAgIm1pY3JvY29kZSBibG9jayAjJWlcbiIsIGJsay0+b2Zmc2V0LCBpKTsKPiAr CQkJZ290byBlcnI7Cj4gKwkJfQo+ICsKPiArCQljYiA9IChzdHJ1Y3QgZGxfY29kZWJsb2NrKikm aW1hZ2UtPmRhdGFbYmxrLT5vZmZzZXRdOwo+ICsJCWlmIChibGstPnR5cGUgPT0gRldfQkxPQ0tf VFlQRV9JTlNUUikgewo+ICsJCQlpZiAoY2ItPm5wZV9hZGRyICsgY2ItPnNpemUgPiBpbnN0cl9z aXplKQo+ICsJCQkJZ290byB0b29fYmlnOwo+ICsJCQljbWQgPSBDTURfV1JfSU5TX01FTTsKPiAr CQl9IGVsc2UgaWYgKGJsay0+dHlwZSA9PSBGV19CTE9DS19UWVBFX0RBVEEpIHsKPiArCQkJaWYg KGNiLT5ucGVfYWRkciArIGNiLT5zaXplID4gZGF0YV9zaXplKQo+ICsJCQkJZ290byB0b29fYmln Owo+ICsJCQljbWQgPSBDTURfV1JfREFUQV9NRU07Cj4gKwkJfSBlbHNlIHsKPiArCQkJcHJpbnRf bnBlKG5wZSwgImludmFsaWQgbWljcm9jb2RlIGJsb2NrICMlaSB0eXBlIDB4JVhcbiIsCj4gKwkJ CQkgIGksIGJsay0+dHlwZSk7Cj4gKwkJCWdvdG8gZXJyOwo+ICsJCX0KPiArCQlpZiAoYmxrLT5v ZmZzZXQgKyBzaXplb2YoKmNiKSAvIDQgKyBjYi0+c2l6ZSA+IGltYWdlLT5zaXplKSB7Cj4gKwkJ CXByaW50X25wZShucGUsICJtaWNyb2NvZGUgYmxvY2sgIyVpIGRvZXNuJ3QgIgo+ICsJCQkJICAi Zml0IGluIG1pY3JvY29kZSBpbWFnZTogdHlwZSAlYywgc3RhcnQgMHglWCwiCj4gKwkJCQkgICIg bGVuZ3RoIDB4JVhcbiIsIGksCj4gKwkJCQkgIGJsay0+dHlwZSA9PSBGV19CTE9DS19UWVBFX0lO U1RSID8gJ0knIDogJ0QnLAo+ICsJCQkJICBjYi0+bnBlX2FkZHIsIGNiLT5zaXplKTsKPiArCQkJ Z290byBlcnI7Cj4gKwkJfQo+ICsKPiArCQlmb3IgKGogPSAwOyBqIDwgY2ItPnNpemU7IGorKykK PiArCQkJbnBlX2NtZF93cml0ZShucGUsIGNiLT5ucGVfYWRkciArIGosIGNtZCwgY2ItPmRhdGFb al0pOwo+ICsJfQo+ICsKPiArCW5wZV9zdGFydChucGUpOwo+ICsJaWYgKCFucGVfcnVubmluZyhu cGUpKQo+ICsJCXByaW50X25wZShucGUsICJ1bmFibGUgdG8gc3RhcnRcbiIpOwo+ICsJZnJlZShp bWFnZSk7Cj4gKwlyZXR1cm4gMDsKPiArCj4gK3Rvb19iaWc6Cj4gKwlwcmludF9ucGUobnBlLCAi bWljcm9jb2RlIGJsb2NrICMlaSBkb2Vzbid0IGZpdCBpbiBOUEUgIgo+ICsJCSAgIm1lbW9yeTog dHlwZSAlYywgc3RhcnQgMHglWCwgbGVuZ3RoIDB4JVhcbiIsIGksCj4gKwkJICBibGstPnR5cGUg PT0gRldfQkxPQ0tfVFlQRV9JTlNUUiA/ICdJJyA6ICdEJywKPiArCQkgIGNiLT5ucGVfYWRkciwg Y2ItPnNpemUpOwo+ICtlcnI6Cj4gKwlmcmVlKGltYWdlKTsKPiArCXJldHVybiBlcnI7Cj4gK30K PiArCj4gKwo+ICtzdHJ1Y3QgbnBlICpucGVfcmVxdWVzdChpbnQgaWQpCj4gK3sKPiArCWlmIChp ZCA8IEFSUkFZX1NJWkUobnBlX3RhYikpCj4gKwkJaWYgKG5wZV90YWJbaWRdLnZhbGlkKQo+ICsJ CQlyZXR1cm4gJm5wZV90YWJbaWRdOwo+ICsJcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgX19pbml0IG5wZV9pbml0KHZvaWQpCj4gK3sKPiArCWludCBpOwo+ICsKPiArCWZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKG5wZV90YWIpOyBpKyspIHsKPiArCQlzdHJ1Y3QgbnBlICpu cGUgPSAmbnBlX3RhYltpXTsKPiArCQlpZiAoIShpeHA0eHhfcmVhZF9mZWF0dXJlX2JpdHMoKSAm IChJWFA0WFhfRkVBVFVSRV9SRVNFVF9OUEVBIDw8IGkpKSkKPiArCQkJY29udGludWU7IC8qIE5Q RSBhbHJlYWR5IGRpc2FibGVkIG9yIG5vdCBwcmVzZW50ICovCj4gKwkJaWYgKG5wZV9yZXNldChu cGUpKQo+ICsJCQljb250aW51ZTsKPiArCQlucGUtPnZhbGlkID0gMTsKPiArCX0KPiArCXJldHVy biAwOwo+ICt9Cj4gKwo+ICtjb3JlZGV2aWNlX2luaXRjYWxsKG5wZV9pbml0KTsKPiAKPiBfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGJhcmVib3ggbWFp bGluZyBsaXN0Cj4gYmFyZWJveEBsaXN0cy5pbmZyYWRlYWQub3JnCj4gaHR0cDovL2xpc3RzLmlu ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9iYXJlYm94CgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpiYXJlYm94IG1haWxpbmcgbGlzdApiYXJlYm94 QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9s aXN0aW5mby9iYXJlYm94Cg==