From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: [PATCH v6 1/2] drm/bridge: Add Cadence DSI driver Date: Tue, 10 Apr 2018 15:00:00 +0200 Message-ID: <20180410130001.1234-1-boris.brezillon@bootlin.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Archit Taneja , David Airlie , Daniel Vetter , dri-devel@lists.freedesktop.org Cc: "Menon, Nishanth" , Mark Rutland , Rafal Ciepiela , Pawel Moll , Ian Campbell , Maxime Ripard , Simon Hatliff , Kumar Gala , Jyri Sarha , Rob Herring , Alan Douglas , Tomi Valkeinen , Boris Brezillon , Thomas Petazzoni , Suresh Punnoose , Richard Sproul , devicetree@vger.kernel.org List-Id: devicetree@vger.kernel.org RnJvbTogQm9yaXMgQnJlemlsbG9uIDxib3Jpcy5icmV6aWxsb25AZnJlZS1lbGVjdHJvbnMuY29t PgoKQWRkIGEgZHJpdmVyIGZvciBDYWRlbmNlIERQSSAtPiBEU0kgYnJpZGdlLgoKVGhpcyBkcml2 ZXIgb25seSBzdXBwb3J0IGEgc3Vic2V0IG9mIENhZGVuY2UgRFNJIGJyaWRnZSBjYXBhYmlsaXRp ZXMuCgpUaGlzIGRyaXZlciBoYXMgYmVlbiB0ZXN0ZWQvZGVidWdnZWQgaW4gYSBzaW11bGF0ZWQg ZW52aXJvbm1lbnQgd2hpY2gKZXhwbGFpbnMgd2h5IHNvbWUgb2YgdGhlIGZlYXR1cmVzIGFyZSBt aXNzaW5nLiAgSGVyZSBpcyBhCm5vbi1leGhhdXN0aXZlIGxpc3Qgb2YgbWlzc2luZyBmZWF0dXJl czoKICogYnVyc3QgbW9kZQogKiBEUEhZIGluaXQvY29uZmlndXJhdGlvbiBzdGVwcwogKiBzdXBw b3J0IGZvciBhZGRpdGlvbmFsIGlucHV0IGludGVyZmFjZXMgKFNESSBpbnB1dCkKCkRTSSBjb21t YW5kcyBhbmQgbm9uLWJ1cnN0IHZpZGVvIG1vZGUgaGF2ZSBiZWVuIHRlc3RlZC4KClNpZ25lZC1v ZmYtYnk6IEJvcmlzIEJyZXppbGxvbiA8Ym9yaXMuYnJlemlsbG9uQGZyZWUtZWxlY3Ryb25zLmNv bT4KUmV2aWV3ZWQtYnk6IEFuZHJ6ZWogSGFqZGEgPGEuaGFqZGFAc2Ftc3VuZy5jb20+CkFja2Vk LWJ5OiBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgotLS0KSGVsbG8sCgpUaGlzIHZlcnNp b24gaXMgc3RpbGwgbWlzc2luZyBEUEhZIGNvbmZpZy9pbml0IGNvZGUsIG1haW5seSBiZWNhdXNl IEkKZG9uJ3QgaGF2ZSBhIERQSFkgKGVpdGhlciByZWFsIG9yIGVtdWxhdGVkKSB0byB0ZXN0IHdp dGguIEJ1dCBJJ20Kd29ya2luZyBvbiBhIERQSFkgYWJzdHJhY3Rpb24gbGF5ZXIgdG8gaGVscCBl eHRyYWN0IGNvbW1vbiBEUEhZCm9wZXJhdGlvbnMgb3V0IG9mIERTSSBkcml2ZXJzIHNvIHRoYXQg RFBIWSBkcml2ZXJzIGNhbiBiZSB1c2VkIG91dHNpZGUKb2YgdGhlIERSTSB3b3JsZCAoSSBrbm93 IEQtUEhZcyBjYW4gYmUgdXNlZCB3aXRoIENTSSB3aGljaCBiZWxvbmdzIGluClY0TCkuCgpSZWdh cmRzLAoKQm9yaXMKClRoaXMgdmVyc2lvbiBpcyBzdGlsbCBtaXNzaW5nCgpDaGFuZ2VzIGluIHY2 OgotIFVzZSBTUERYIGhlYWRlcgotIERvIG5vdCBlbmFibGUgdGhlIHN5c19jbGsgaW4gdGhlIHBy b2JlIGZ1bmN0aW9uCi0gUmVtb3ZlIHVubmVlZGVkIHVkZWxheSgpCi0gQWRkIGEgZnVuY3Rpb24g dG8gbWFrZSBzdXJlIHRoZSBQTEwgYW5kIHBpeGVsIGNsb2NrIGFyZSBjbG9zZSBlbm91Z2gKICB0 byBiZSByZWNvdmVyYWJsZSBpZiB0aGV5IGRvbid0IG1hdGNoIGV4YWN0bHkKLSBBZGQgdGhlIERQ SFkgaW5pdCBzZXF1ZW5jZSB1c2VkIGluIHNpbXVsYXRpb24gKGxpa2VseSB0byBiZSBkaWZmZXJl bnQKICBiYXNlZCBvbiBlYWNoIFNvQyBpbnRlZ3JhdGlvbikKCkNoYW5nZXMgaW4gdjU6Ci0gQWRk IHJ1bnRpbWUgUE0gc3VwcG9ydAoKQ2hhbmdlcyBpbiB2NDoKLSBGaXggdHlwb3MKLSBSZW5hbWUg Y2xrcyBhcyBzdWdnZXN0ZWQgYnkgVG9taQotIEZpeCBEU0kgc2V0dXAgZG9uZSBpbiBjZG5zX2Rz aV9icmlkZ2VfZW5hYmxlKCkKLSBBZGQgYSBwcmVjaXNpb24gYWJvdXQgd2hlcmUgdGhpcyBicmlk Z2UgaXMgc3VwcG9zZWQgdG8gdXNlZCB0byB0aGUKICBLY29uZmlnIGVudHJ5Ci0gTGV0IERSTV9D RE5TX0RTSSBzZWxlY3QgRFJNX1BBTkVMX0JSSURHRQotIFJlbW92ZSB0aGUgSVAgdmVyc2lvbiBm cm9tIHRoZSBEVCBjb21wYXRpYmxlIG5hbWUKLSBBZGFwdCByZWdpc3RlciB0aGUgbGF5b3V0IHRv IG1hdGNoIHRoZSBvbmUgdXNlZCBpbiB0aGUgbGFzdCByZXZpc2lvbgogIG9mIHRoZSBJUCAoaG9w ZWZ1bGx5IHRoZSBmaW5hbCB2ZXJzaW9uKQoKQ2hhbmdlcyBpbiB2MzoKLSByZXBsYWNlIG1hZ2lj IHZhbHVlcyBieSByZWFsIHRpbWluZyBjYWxjdWxhdGlvbi4gVGhlIERQSFkgUExMIGNsb2NrCiAg aXMgc3RpbGwgaGFyZGNvZGVkIHNpbmNlIHdlIGRvbid0IGhhdmUgYSB3b3JraW5nIERQSFkgYmxv Y2sgeWV0LCBhbmQKICB0aGlzIGlzIHRoZSBwaWVjZSBvZiBIVyB3ZSBuZWVkIHRvIGR5bmFtaWNh bGx5IGNvbmZpZ3VyZSB0aGUgUExMCiAgcmF0ZSBiYXNlZCBvbiB0aGUgZGlzcGxheSByZWZyZXNo IHJhdGUgYW5kIHRoZSByZXNvbHV0aW9uLgotIHBhcnNlIERTSSBkZXZpY2VzIHJlcHJlc2VudGVk IHdpdGggdGhlIE9GLWdyYXBoLiBUaGlzIGlzIG5lZWRlZCB0bwogIHN1cHBvcnQgRFNJIGRldmlj ZXMgY29udHJvbGxlZCB0aHJvdWdoIGFuIGV4dGVybmFsIGJ1cyBsaWtlIEkyQyBvcgogIFNQSS4K LSB1c2UgdGhlIERSTSBwYW5lbC1icmlkZ2UgaW5mcmFzdHJ1Y3R1cmUgdG8gc2ltcGxpZnkgdGhl IERSTSBwYW5lbAogIGxvZ2ljCgpDaGFuZ2VzIGluIHYyOgotIHJlYmFzZSBvbiB2NC4xMi1yYzEg YW5kIGFkYXB0IHRvIGRyaXZlciB0byB0aGUgZHJtX2JyaWRnZSBBUEkgY2hhbmdlcwotIHJldHVy biB0aGUgY29ycmVjdCBlcnJvciB3aGVuIGRldm1fY2xrX2dldChzeXNjbGspIGZhaWxzCi0gYWRk IG1pc3NpbmcgZGVwZW5kcyBvbiBPRiBhbmQgc2VsZWN0IERSTV9QQU5FTCBpbiB0aGUgS2NvbmZp ZyBlbnRyeQoKRFNJIHJ1bnRpbWUgUE0KLS0tCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25m aWcgICAgfCAgIDEwICsKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgICB8ICAgIDEg KwogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9jZG5zLWRzaS5jIHwgMTYyNCArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDE2MzUgaW5zZXJ0aW9u cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvY2Rucy1kc2ku YwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZyBiL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvS2NvbmZpZwppbmRleCAzYWE2NWJkZWNiMGUuLjFjZDI2Nzg4MGI1MyAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvS2NvbmZpZwpAQCAtMjUsNiArMjUsMTYgQEAgY29uZmlnIERSTV9BTkFM T0dJWF9BTlg3OFhYCiAJICB0aGUgSERNSSBvdXRwdXQgb2YgYW4gYXBwbGljYXRpb24gcHJvY2Vz c29yIHRvIE15RFAKIAkgIG9yIERpc3BsYXlQb3J0LgogCitjb25maWcgRFJNX0NETlNfRFNJCisJ dHJpc3RhdGUgIkNhZGVuY2UgRFBJL0RTSSBicmlkZ2UiCisJc2VsZWN0IERSTV9LTVNfSEVMUEVS CisJc2VsZWN0IERSTV9NSVBJX0RTSQorCXNlbGVjdCBEUk1fUEFORUxfQlJJREdFCisJZGVwZW5k cyBvbiBPRgorCWhlbHAKKwkgIFN1cHBvcnQgQ2FkZW5jZSBEUEkgdG8gRFNJIGJyaWRnZS4gVGhp cyBpcyBhbiBpbnRlcm5hbAorCSAgYnJpZGdlIGFuZCBpcyBtZWFudCB0byBiZSBkaXJlY3RseSBl bWJlZGRlZCBpbiBhIFNvQy4KKwogY29uZmlnIERSTV9EVU1CX1ZHQV9EQUMKIAl0cmlzdGF0ZSAi RHVtYiBWR0EgREFDIEJyaWRnZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gT0YKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L01ha2VmaWxlCmluZGV4IDM3M2ViMjhmMzFlZC4uYWVhN2NiZTkwNzBiIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvTWFrZWZpbGUKQEAgLTEsNSArMSw2IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wCiBvYmotJChDT05GSUdfRFJNX0FOQUxPR0lYX0FOWDc4WFgpICs9IGFuYWxvZ2l4LWFu eDc4eHgubworb2JqLSQoQ09ORklHX0RSTV9DRE5TX0RTSSkgKz0gY2Rucy1kc2kubwogb2JqLSQo Q09ORklHX0RSTV9EVU1CX1ZHQV9EQUMpICs9IGR1bWItdmdhLWRhYy5vCiBvYmotJChDT05GSUdf RFJNX0xWRFNfRU5DT0RFUikgKz0gbHZkcy1lbmNvZGVyLm8KIG9iai0kKENPTkZJR19EUk1fTUVH QUNISVBTX1NURFBYWFhYX0dFX0I4NTBWM19GVykgKz0gbWVnYWNoaXBzLXN0ZHB4eHh4LWdlLWI4 NTB2My1mdy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2NkbnMtZHNpLmMg Yi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2NkbnMtZHNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi5kNGNlYjk2MWY0NzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL2NkbnMtZHNpLmMKQEAgLTAsMCArMSwxNjI0IEBACisvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodDogMjAxNyBDYWRl bmNlIERlc2lnbiBTeXN0ZW1zLCBJbmMuCisgKgorICogQXV0aG9yOiBCb3JpcyBCcmV6aWxsb24g PGJvcmlzLmJyZXppbGxvbkBmcmVlLWVsZWN0cm9ucy5jb20+CisgKi8KKworI2luY2x1ZGUgPGRy bS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fYnJpZGdlLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2ku aD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+CisjaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNw bGF5Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwu aD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNz Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9y bV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGlu dXgvcmVzZXQuaD4KKworI2RlZmluZSBJUF9DT05GCQkJCTB4MAorI2RlZmluZSBTUF9IU19GSUZP X0RFUFRIKHgpCQkoKCh4KSAmIEdFTk1BU0soMzAsIDI2KSkgPj4gMjYpCisjZGVmaW5lIFNQX0xQ X0ZJRk9fREVQVEgoeCkJCSgoKHgpICYgR0VOTUFTSygyNSwgMjEpKSA+PiAyMSkKKyNkZWZpbmUg VlJTX0ZJRk9fREVQVEgoeCkJCSgoKHgpICYgR0VOTUFTSygyMCwgMTYpKSA+PiAxNikKKyNkZWZp bmUgRElSQ01EX0ZJRk9fREVQVEgoeCkJCSgoKHgpICYgR0VOTUFTSygxNSwgMTMpKSA+PiAxMykK KyNkZWZpbmUgU0RJX0lGQUNFXzMyCQkJQklUKDEyKQorI2RlZmluZSBJTlRFUk5BTF9EQVRBUEFU SF8zMgkJKDAgPDwgMTApCisjZGVmaW5lIElOVEVSTkFMX0RBVEFQQVRIXzE2CQkoMSA8PCAxMCkK KyNkZWZpbmUgSU5URVJOQUxfREFUQVBBVEhfOAkJKDMgPDwgMTApCisjZGVmaW5lIElOVEVSTkFM X0RBVEFQQVRIX1NJWkUJCSgoeCkgJiBHRU5NQVNLKDExLCAxMCkpCisjZGVmaW5lIE5VTV9JRkFD RSh4KQkJCSgoKCh4KSAmIEdFTk1BU0soOSwgOCkpID4+IDgpICsgMSkKKyNkZWZpbmUgTUFYX0xB TkVfTkIoeCkJCQkoKCh4KSAmIEdFTk1BU0soNywgNikpID4+IDYpCisjZGVmaW5lIFJYX0ZJRk9f REVQVEgoeCkJCSgoeCkgJiBHRU5NQVNLKDUsIDApKQorCisjZGVmaW5lIE1DVExfTUFJTl9EQVRB X0NUTAkJMHg0CisjZGVmaW5lIFRFX01JUElfUE9MTElOR19FTgkJQklUKDI1KQorI2RlZmluZSBU RV9IV19QT0xMSU5HX0VOCQlCSVQoMjQpCisjZGVmaW5lIERJU1BfRU9UX0dFTgkJCUJJVCgxOCkK KyNkZWZpbmUgSE9TVF9FT1RfR0VOCQkJQklUKDE3KQorI2RlZmluZSBESVNQX0dFTl9DSEVDS1NV TQkJQklUKDE2KQorI2RlZmluZSBESVNQX0dFTl9FQ0MJCQlCSVQoMTUpCisjZGVmaW5lIEJUQV9F TgkJCQlCSVQoMTQpCisjZGVmaW5lIFJFQURfRU4JCQkJQklUKDEzKQorI2RlZmluZSBSRUdfVEVf RU4JCQlCSVQoMTIpCisjZGVmaW5lIElGX1RFX0VOKHgpCQkJQklUKDggKyAoeCkpCisjZGVmaW5l IFRWR19TRUwJCQkJQklUKDYpCisjZGVmaW5lIFZJRF9FTgkJCQlCSVQoNSkKKyNkZWZpbmUgSUZf VklEX1NFTEVDVCh4KQkJKCh4KSA8PCAyKQorI2RlZmluZSBJRl9WSURfU0VMRUNUX01BU0sJCUdF Tk1BU0soMywgMikKKyNkZWZpbmUgSUZfVklEX01PREUJCQlCSVQoMSkKKyNkZWZpbmUgTElOS19F TgkJCQlCSVQoMCkKKworI2RlZmluZSBNQ1RMX01BSU5fUEhZX0NUTAkJMHg4CisjZGVmaW5lIEhT X0lOVkVSVF9EQVQoeCkJCUJJVCgxOSArICgoeCkgKiAyKSkKKyNkZWZpbmUgU1dBUF9QSU5TX0RB VCh4KQkJQklUKDE4ICsgKCh4KSAqIDIpKQorI2RlZmluZSBIU19JTlZFUlRfQ0xLCQkJQklUKDE3 KQorI2RlZmluZSBTV0FQX1BJTlNfQ0xLCQkJQklUKDE2KQorI2RlZmluZSBIU19TS0VXQ0FMX0VO CQkJQklUKDE1KQorI2RlZmluZSBXQUlUX0JVUlNUX1RJTUUoeCkJCSgoeCkgPDwgMTApCisjZGVm aW5lIERBVEFfVUxQTV9FTih4KQkJCUJJVCg2ICsgKHgpKQorI2RlZmluZSBDTEtfVUxQTV9FTgkJ CUJJVCg1KQorI2RlZmluZSBDTEtfQ09OVElOVU9VUwkJCUJJVCg0KQorI2RlZmluZSBEQVRBX0xB TkVfRU4oeCkJCQlCSVQoKHgpIC0gMSkKKworI2RlZmluZSBNQ1RMX01BSU5fRU4JCQkweGMKKyNk ZWZpbmUgREFUQV9GT1JDRV9TVE9QCQkJQklUKDE3KQorI2RlZmluZSBDTEtfRk9SQ0VfU1RPUAkJ CUJJVCgxNikKKyNkZWZpbmUgSUZfRU4oeCkJCQlCSVQoMTMgKyAoeCkpCisjZGVmaW5lIERBVEFf TEFORV9VTFBNX1JFUShsKQkJQklUKDkgKyAobCkpCisjZGVmaW5lIENMS19MQU5FX1VMUE1fUkVR CQlCSVQoOCkKKyNkZWZpbmUgREFUQV9MQU5FX1NUQVJUKHgpCQlCSVQoNCArICh4KSkKKyNkZWZp bmUgQ0xLX0xBTkVfRU4JCQlCSVQoMykKKyNkZWZpbmUgUExMX1NUQVJUCQkJQklUKDApCisKKyNk ZWZpbmUgTUNUTF9EUEhZX0NGRzAJCQkweDEwCisjZGVmaW5lIERQSFlfQ19SU1RCCQkJQklUKDIw KQorI2RlZmluZSBEUEhZX0RfUlNUQih4KQkJCUdFTk1BU0soMTUgKyAoeCksIDE2KQorI2RlZmlu ZSBEUEhZX1BMTF9QRE4JCQlCSVQoMTApCisjZGVmaW5lIERQSFlfQ01OX1BETgkJCUJJVCg5KQor I2RlZmluZSBEUEhZX0NfUEROCQkJQklUKDgpCisjZGVmaW5lIERQSFlfRF9QRE4oeCkJCQlHRU5N QVNLKDMgKyAoeCksIDQpCisjZGVmaW5lIERQSFlfQUxMX0RfUEROCQkJR0VOTUFTSyg3LCA0KQor I2RlZmluZSBEUEhZX1BMTF9QU08JCQlCSVQoMSkKKyNkZWZpbmUgRFBIWV9DTU5fUFNPCQkJQklU KDApCisKKyNkZWZpbmUgTUNUTF9EUEhZX1RJTUVPVVQxCQkweDE0CisjZGVmaW5lIEhTVFhfVElN RU9VVCh4KQkJCSgoeCkgPDwgNCkKKyNkZWZpbmUgSFNUWF9USU1FT1VUX01BWAkJR0VOTUFTSygx NywgMCkKKyNkZWZpbmUgQ0xLX0RJVih4KQkJCSh4KQorI2RlZmluZSBDTEtfRElWX01BWAkJCUdF Tk1BU0soMywgMCkKKworI2RlZmluZSBNQ1RMX0RQSFlfVElNRU9VVDIJCTB4MTgKKyNkZWZpbmUg TFBSWF9USU1FT1VUKHgpCQkJKHgpCisKKyNkZWZpbmUgTUNUTF9VTFBPVVRfVElNRQkJMHgxYwor I2RlZmluZSBEQVRBX0xBTkVfVUxQT1VUX1RJTUUoeCkJKCh4KSA8PCA5KQorI2RlZmluZSBDTEtf TEFORV9VTFBPVVRfVElNRSh4KQkJKHgpCisKKyNkZWZpbmUgTUNUTF8zRFZJREVPX0NUTAkJMHgy MAorI2RlZmluZSBWSURfVlNZTkNfM0RfRU4JCQlCSVQoNykKKyNkZWZpbmUgVklEX1ZTWU5DXzNE X0xSCQkJQklUKDUpCisjZGVmaW5lIFZJRF9WU1lOQ18zRF9TRUNPTkRfRU4JCUJJVCg0KQorI2Rl ZmluZSBWSURfVlNZTkNfM0RGT1JNQVRfTElORQkJKDAgPDwgMikKKyNkZWZpbmUgVklEX1ZTWU5D XzNERk9STUFUX0ZSQU1FCSgxIDw8IDIpCisjZGVmaW5lIFZJRF9WU1lOQ18zREZPUk1BVF9QSVhF TAkoMiA8PCAyKQorI2RlZmluZSBWSURfVlNZTkNfM0RNT0RFX09GRgkJMAorI2RlZmluZSBWSURf VlNZTkNfM0RNT0RFX1BPUlRSQUlUCTEKKyNkZWZpbmUgVklEX1ZTWU5DXzNETU9ERV9MQU5EU0NB UEUJMgorCisjZGVmaW5lIE1DVExfTUFJTl9TVFMJCQkweDI0CisjZGVmaW5lIE1DVExfTUFJTl9T VFNfQ1RMCQkweDEzMAorI2RlZmluZSBNQ1RMX01BSU5fU1RTX0NMUgkJMHgxNTAKKyNkZWZpbmUg TUNUTF9NQUlOX1NUU19GTEFHCQkweDE3MAorI2RlZmluZSBIU19TS0VXQ0FMX0RPTkUJCQlCSVQo MTEpCisjZGVmaW5lIElGX1VOVEVSTV9QS1RfRVJSKHgpCQlCSVQoOCArICh4KSkKKyNkZWZpbmUg TFBSWF9USU1FT1VUX0VSUgkJQklUKDcpCisjZGVmaW5lIEhTVFhfVElNRU9VVF9FUlIJCUJJVCg2 KQorI2RlZmluZSBEQVRBX0xBTkVfUkRZKGwpCQlCSVQoMiArIChsKSkKKyNkZWZpbmUgQ0xLX0xB TkVfUkRZCQkJQklUKDEpCisjZGVmaW5lIFBMTF9MT0NLRUQJCQlCSVQoMCkKKworI2RlZmluZSBN Q1RMX0RQSFlfRVJSCQkJMHgyOAorI2RlZmluZSBNQ1RMX0RQSFlfRVJSX0NUTDEJCTB4MTQ4Cisj ZGVmaW5lIE1DVExfRFBIWV9FUlJfQ0xSCQkweDE2OAorI2RlZmluZSBNQ1RMX0RQSFlfRVJSX0ZM QUcJCTB4MTg4CisjZGVmaW5lIEVSUl9DT05UX0xQKHgsIGwpCQlCSVQoMTggKyAoKHgpICogNCkg KyAobCkpCisjZGVmaW5lIEVSUl9DT05UUk9MKGwpCQkJQklUKDE0ICsgKGwpKQorI2RlZmluZSBF UlJfU1lORVNDKGwpCQkJQklUKDEwICsgKGwpKQorI2RlZmluZSBFUlJfRVNDKGwpCQkJQklUKDYg KyAobCkpCisKKyNkZWZpbmUgTUNUTF9EUEhZX0VSUl9DVEwyCQkweDE0YworI2RlZmluZSBFUlJf Q09OVF9MUF9FREdFKHgsIGwpCQlCSVQoMTIgKyAoKHgpICogNCkgKyAobCkpCisjZGVmaW5lIEVS Ul9DT05UUk9MX0VER0UobCkJCUJJVCg4ICsgKGwpKQorI2RlZmluZSBFUlJfU1lOX0VTQ19FREdF KGwpCQlCSVQoNCArIChsKSkKKyNkZWZpbmUgRVJSX0VTQ19FREdFKGwpCQkJQklUKDAgKyAobCkp CisKKyNkZWZpbmUgTUNUTF9MQU5FX1NUUwkJCTB4MmMKKyNkZWZpbmUgUFBJX0NfVFhfUkVBRFlf SFMJCUJJVCgxOCkKKyNkZWZpbmUgRFBIWV9QTExfTE9DSwkJCUJJVCgxNykKKyNkZWZpbmUgUFBJ X0RfUlhfVUxQU19FU0MoeCkJCSgoKHgpICYgR0VOTUFTSygxNSwgMTIpKSA+PiAxMikKKyNkZWZp bmUgTEFORV9TVEFURV9TVEFSVAkJMAorI2RlZmluZSBMQU5FX1NUQVRFX0lETEUJCQkxCisjZGVm aW5lIExBTkVfU1RBVEVfV1JJVEUJCTIKKyNkZWZpbmUgTEFORV9TVEFURV9VTFBNCQkJMworI2Rl ZmluZSBMQU5FX1NUQVRFX1JFQUQJCQk0CisjZGVmaW5lIERBVEFfTEFORV9TVEFURShsLCB2YWwp CQlcCisJKCgodmFsKSA+PiAoMiArIDIgKiAobCkgKyAoKGwpID8gMSA6IDApKSkgJiBHRU5NQVNL KChsKSA/IDEgOiAyLCAwKSkKKyNkZWZpbmUgQ0xLX0xBTkVfU1RBVEVfSFMJCTIKKyNkZWZpbmUg Q0xLX0xBTkVfU1RBVEUodmFsKQkJKCh2YWwpICYgR0VOTUFTSygxLCAwKSkKKworI2RlZmluZSBE U0NfTU9ERV9DVEwJCQkweDMwCisjZGVmaW5lIERTQ19NT0RFX0VOCQkJQklUKDApCisKKyNkZWZp bmUgRFNDX0NNRF9TRU5ECQkJMHgzNAorI2RlZmluZSBEU0NfU0VORF9QUFMJCQlCSVQoMCkKKyNk ZWZpbmUgRFNDX0VYRUNVVEVfUVVFVUUJCUJJVCgxKQorCisjZGVmaW5lIERTQ19QUFNfV1JEQVQJ CQkweDM4CisKKyNkZWZpbmUgRFNDX01PREVfU1RTCQkJMHgzYworI2RlZmluZSBEU0NfUFBTX0RP TkUJCQlCSVQoMSkKKyNkZWZpbmUgRFNDX0VYRUNfRE9ORQkJCUJJVCgyKQorCisjZGVmaW5lIENN RF9NT0RFX0NUTAkJCTB4NzAKKyNkZWZpbmUgSUZfTFBfRU4oeCkJCQlCSVQoOSArICh4KSkKKyNk ZWZpbmUgSUZfVkNIQU5fSUQoeCwgYykJCSgoYykgPDwgKCh4KSAqIDIpKQorCisjZGVmaW5lIENN RF9NT0RFX0NUTDIJCQkweDc0CisjZGVmaW5lIFRFX1RJTUVPVVQoeCkJCQkoKHgpIDw8IDExKQor I2RlZmluZSBGSUxMX1ZBTFVFKHgpCQkJKCh4KSA8PCAzKQorI2RlZmluZSBBUkJfSUZfV0lUSF9I SUdIRVNUX1BSSU9SSVRZKHgpCSgoeCkgPDwgMSkKKyNkZWZpbmUgQVJCX1JPVU5EX1JPQklOX01P REUJCUJJVCgwKQorCisjZGVmaW5lIENNRF9NT0RFX1NUUwkJCTB4NzgKKyNkZWZpbmUgQ01EX01P REVfU1RTX0NUTAkJMHgxMzQKKyNkZWZpbmUgQ01EX01PREVfU1RTX0NMUgkJMHgxNTQKKyNkZWZp bmUgQ01EX01PREVfU1RTX0ZMQUcJCTB4MTc0CisjZGVmaW5lIEVSUl9JRl9VTkRFUlJVTih4KQkJ QklUKDQgKyAoeCkpCisjZGVmaW5lIEVSUl9VTldBTlRFRF9SRUFECQlCSVQoMykKKyNkZWZpbmUg RVJSX1RFX01JU1MJCQlCSVQoMikKKyNkZWZpbmUgRVJSX05PX1RFCQkJQklUKDEpCisjZGVmaW5l IENTTV9SVU5OSU5HCQkJQklUKDApCisKKyNkZWZpbmUgRElSRUNUX0NNRF9TRU5ECQkJMHg4MAor CisjZGVmaW5lIERJUkVDVF9DTURfTUFJTl9TRVRUSU5HUwkweDg0CisjZGVmaW5lIFRSSUdHRVJf VkFMKHgpCQkJKCh4KSA8PCAyNSkKKyNkZWZpbmUgQ01EX0xQX0VOCQkJQklUKDI0KQorI2RlZmlu ZSBDTURfU0laRSh4KQkJCSgoeCkgPDwgMTYpCisjZGVmaW5lIENNRF9WQ0hBTl9JRCh4KQkJCSgo eCkgPDwgMTQpCisjZGVmaW5lIENNRF9EQVRBVFlQRSh4KQkJCSgoeCkgPDwgOCkKKyNkZWZpbmUg Q01EX0xPTkcJCQlCSVQoMykKKyNkZWZpbmUgV1JJVEVfQ01ECQkJMAorI2RlZmluZSBSRUFEX0NN RAkJCTEKKyNkZWZpbmUgVEVfUkVRCQkJCTQKKyNkZWZpbmUgVFJJR0dFUl9SRVEJCQk1CisjZGVm aW5lIEJUQV9SRVEJCQkJNgorCisjZGVmaW5lIERJUkVDVF9DTURfU1RTCQkJMHg4OAorI2RlZmlu ZSBESVJFQ1RfQ01EX1NUU19DVEwJCTB4MTM4CisjZGVmaW5lIERJUkVDVF9DTURfU1RTX0NMUgkJ MHgxNTgKKyNkZWZpbmUgRElSRUNUX0NNRF9TVFNfRkxBRwkJMHgxNzgKKyNkZWZpbmUgUkNWRF9B Q0tfVkFMKHZhbCkJCSgodmFsKSA+PiAxNikKKyNkZWZpbmUgUkNWRF9UUklHR0VSX1ZBTCh2YWwp CQkoKCh2YWwpICYgR0VOTUFTSygxNCwgMTEpKSA+PiAxMSkKKyNkZWZpbmUgUkVBRF9DT01QTEVU RURfV0lUSF9FUlIJCUJJVCgxMCkKKyNkZWZpbmUgQlRBX0ZJTklTSEVECQkJQklUKDkpCisjZGVm aW5lIEJUQV9DT01QTEVURUQJCQlCSVQoOCkKKyNkZWZpbmUgVEVfUkNWRAkJCQlCSVQoNykKKyNk ZWZpbmUgVFJJR0dFUl9SQ1ZECQkJQklUKDYpCisjZGVmaW5lIEFDS19XSVRIX0VSUl9SQ1ZECQlC SVQoNSkKKyNkZWZpbmUgQUNLX1JDVkQJCQlCSVQoNCkKKyNkZWZpbmUgUkVBRF9DT01QTEVURUQJ CQlCSVQoMykKKyNkZWZpbmUgVFJJR0dFUl9DT01QTEVURUQJCUJJVCgyKQorI2RlZmluZSBXUklU RV9DT01QTEVURUQJCQlCSVQoMSkKKyNkZWZpbmUgU0VORElOR19DTUQJCQlCSVQoMCkKKworI2Rl ZmluZSBESVJFQ1RfQ01EX1NUT1BfUkVBRAkJMHg4YworCisjZGVmaW5lIERJUkVDVF9DTURfV1JE QVRBCQkweDkwCisKKyNkZWZpbmUgRElSRUNUX0NNRF9GSUZPX1JTVAkJMHg5NAorCisjZGVmaW5l IERJUkVDVF9DTURfUkREQVRBCQkweGEwCisKKyNkZWZpbmUgRElSRUNUX0NNRF9SRF9QUk9QUwkJ MHhhNAorI2RlZmluZSBSRF9EQ1MJCQkJQklUKDE4KQorI2RlZmluZSBSRF9WQ0hBTl9JRCh2YWwp CQkoKCh2YWwpID4+IDE2KSAmIEdFTk1BU0soMSwgMCkpCisjZGVmaW5lIFJEX1NJWkUodmFsKQkJ CSgodmFsKSAmIEdFTk1BU0soMTUsIDApKQorCisjZGVmaW5lIERJUkVDVF9DTURfUkRfU1RTCQkw eGE4CisjZGVmaW5lIERJUkVDVF9DTURfUkRfU1RTX0NUTAkJMHgxM2MKKyNkZWZpbmUgRElSRUNU X0NNRF9SRF9TVFNfQ0xSCQkweDE1YworI2RlZmluZSBESVJFQ1RfQ01EX1JEX1NUU19GTEFHCQkw eDE3YworI2RlZmluZSBFUlJfRU9UX1dJVEhfRVJSCQlCSVQoOCkKKyNkZWZpbmUgRVJSX01JU1NJ TkdfRU9UCQkJQklUKDcpCisjZGVmaW5lIEVSUl9XUk9OR19MRU5HVEgJCUJJVCg2KQorI2RlZmlu ZSBFUlJfT1ZFUlNJWkUJCQlCSVQoNSkKKyNkZWZpbmUgRVJSX1JFQ0VJVkUJCQlCSVQoNCkKKyNk ZWZpbmUgRVJSX1VOREVDT0RBQkxFCQkJQklUKDMpCisjZGVmaW5lIEVSUl9DSEVDS1NVTQkJCUJJ VCgyKQorI2RlZmluZSBFUlJfVU5DT1JSRUNUQUJMRQkJQklUKDEpCisjZGVmaW5lIEVSUl9GSVhF RAkJCUJJVCgwKQorCisjZGVmaW5lIFZJRF9NQUlOX0NUTAkJCTB4YjAKKyNkZWZpbmUgVklEX0lH Tk9SRV9NSVNTX1ZTWU5DCQlCSVQoMzEpCisjZGVmaW5lIFZJRF9GSUVMRF9TVwkJCUJJVCgyOCkK KyNkZWZpbmUgVklEX0lOVEVSTEFDRURfRU4JCUJJVCgyNykKKyNkZWZpbmUgUkVDT1ZFUllfTU9E RSh4KQkJKCh4KSA8PCAyNSkKKyNkZWZpbmUgUkVDT1ZFUllfTU9ERV9ORVhUX0hTWU5DCTAKKyNk ZWZpbmUgUkVDT1ZFUllfTU9ERV9ORVhUX1NUT1BfUE9JTlQJMgorI2RlZmluZSBSRUNPVkVSWV9N T0RFX05FWFRfVlNZTkMJMworI2RlZmluZSBSRUdfQkxLRU9MX01PREUoeCkJCSgoeCkgPDwgMjMp CisjZGVmaW5lIFJFR19CTEtMSU5FX01PREUoeCkJCSgoeCkgPDwgMjEpCisjZGVmaW5lIFJFR19C TEtfTU9ERV9OVUxMX1BLVAkJMAorI2RlZmluZSBSRUdfQkxLX01PREVfQkxBTktJTkdfUEtUCTEK KyNkZWZpbmUgUkVHX0JMS19NT0RFX0xQCQkJMgorI2RlZmluZSBTWU5DX1BVTFNFX0hPUklaT05U QUwJCUJJVCgyMCkKKyNkZWZpbmUgU1lOQ19QVUxTRV9BQ1RJVkUJCUJJVCgxOSkKKyNkZWZpbmUg QlVSU1RfTU9ERQkJCUJJVCgxOCkKKyNkZWZpbmUgVklEX1BJWEVMX01PREVfTUFTSwkJR0VOTUFT SygxNywgMTQpCisjZGVmaW5lIFZJRF9QSVhFTF9NT0RFX1JHQjU2NQkJKDAgPDwgMTQpCisjZGVm aW5lIFZJRF9QSVhFTF9NT0RFX1JHQjY2Nl9QQUNLRUQJKDEgPDwgMTQpCisjZGVmaW5lIFZJRF9Q SVhFTF9NT0RFX1JHQjY2NgkJKDIgPDwgMTQpCisjZGVmaW5lIFZJRF9QSVhFTF9NT0RFX1JHQjg4 OAkJKDMgPDwgMTQpCisjZGVmaW5lIFZJRF9QSVhFTF9NT0RFX1JHQjEwMTAxMAkoNCA8PCAxNCkK KyNkZWZpbmUgVklEX1BJWEVMX01PREVfUkdCMTIxMjEyCSg1IDw8IDE0KQorI2RlZmluZSBWSURf UElYRUxfTU9ERV9ZVVY0MjAJCSg4IDw8IDE0KQorI2RlZmluZSBWSURfUElYRUxfTU9ERV9ZVVY0 MjJfUEFDS0VECSg5IDw8IDE0KQorI2RlZmluZSBWSURfUElYRUxfTU9ERV9ZVVY0MjIJCSgxMCA8 PCAxNCkKKyNkZWZpbmUgVklEX1BJWEVMX01PREVfWVVWNDIyXzI0QgkoMTEgPDwgMTQpCisjZGVm aW5lIFZJRF9QSVhFTF9NT0RFX0RTQ19DT01QCQkoMTIgPDwgMTQpCisjZGVmaW5lIFZJRF9EQVRB VFlQRSh4KQkJCSgoeCkgPDwgOCkKKyNkZWZpbmUgVklEX1ZJUlRDSEFOX0lEKGlmYWNlLCB4KQko KHgpIDw8ICg0ICsgKGlmYWNlKSAqIDIpKQorI2RlZmluZSBTVE9QX01PREUoeCkJCQkoKHgpIDw8 IDIpCisjZGVmaW5lIFNUQVJUX01PREUoeCkJCQkoeCkKKworI2RlZmluZSBWSURfVlNJWkUxCQkJ MHhiNAorI2RlZmluZSBWRlBfTEVOKHgpCQkJKCh4KSA8PCAxMikKKyNkZWZpbmUgVkJQX0xFTih4 KQkJCSgoeCkgPDwgNikKKyNkZWZpbmUgVlNBX0xFTih4KQkJCSh4KQorCisjZGVmaW5lIFZJRF9W U0laRTIJCQkweGI4CisjZGVmaW5lIFZBQ1RfTEVOKHgpCQkJKHgpCisKKyNkZWZpbmUgVklEX0hT SVpFMQkJCTB4YzAKKyNkZWZpbmUgSEJQX0xFTih4KQkJCSgoeCkgPDwgMTYpCisjZGVmaW5lIEhT QV9MRU4oeCkJCQkoeCkKKworI2RlZmluZSBWSURfSFNJWkUyCQkJMHhjNAorI2RlZmluZSBIRlBf TEVOKHgpCQkJKCh4KSA8PCAxNikKKyNkZWZpbmUgSEFDVF9MRU4oeCkJCQkoeCkKKworI2RlZmlu ZSBWSURfQkxLU0laRTEJCQkweGNjCisjZGVmaW5lIEJMS19FT0xfUEtUX0xFTih4KQkJKCh4KSA8 PCAxNSkKKyNkZWZpbmUgQkxLX0xJTkVfRVZFTlRfUEtUX0xFTih4KQkoeCkKKworI2RlZmluZSBW SURfQkxLU0laRTIJCQkweGQwCisjZGVmaW5lIEJMS19MSU5FX1BVTFNFX1BLVF9MRU4oeCkJKHgp CisKKyNkZWZpbmUgVklEX1BLVF9USU1FCQkJMHhkOAorI2RlZmluZSBCTEtfRU9MX0RVUkFUSU9O KHgpCQkoeCkKKworI2RlZmluZSBWSURfRFBIWV9USU1FCQkJMHhkYworI2RlZmluZSBSRUdfV0FL RVVQX1RJTUUoeCkJCSgoeCkgPDwgMTcpCisjZGVmaW5lIFJFR19MSU5FX0RVUkFUSU9OKHgpCQko eCkKKworI2RlZmluZSBWSURfRVJSX0NPTE9SMQkJCTB4ZTAKKyNkZWZpbmUgQ09MX0dSRUVOKHgp CQkJKCh4KSA8PCAxMikKKyNkZWZpbmUgQ09MX1JFRCh4KQkJCSh4KQorCisjZGVmaW5lIFZJRF9F UlJfQ09MT1IyCQkJMHhlNAorI2RlZmluZSBQQURfVkFMKHgpCQkJKCh4KSA8PCAxMikKKyNkZWZp bmUgQ09MX0JMVUUoeCkJCQkoeCkKKworI2RlZmluZSBWSURfVlBPUwkJCTB4ZTgKKyNkZWZpbmUg TElORV9WQUwodmFsKQkJCSgoKHZhbCkgJiBHRU5NQVNLKDE0LCAyKSkgPj4gMikKKyNkZWZpbmUg TElORV9QT1ModmFsKQkJCSgodmFsKSAmIEdFTk1BU0soMSwgMCkpCisKKyNkZWZpbmUgVklEX0hQ T1MJCQkweGVjCisjZGVmaW5lIEhPUklaX1ZBTCh2YWwpCQkJKCgodmFsKSAmIEdFTk1BU0soMTcs IDMpKSA+PiAzKQorI2RlZmluZSBIT1JJWl9QT1ModmFsKQkJCSgodmFsKSAmIEdFTk1BU0soMiwg MCkpCisKKyNkZWZpbmUgVklEX01PREVfU1RTCQkJMHhmMAorI2RlZmluZSBWSURfTU9ERV9TVFNf Q1RMCQkweDE0MAorI2RlZmluZSBWSURfTU9ERV9TVFNfQ0xSCQkweDE2MAorI2RlZmluZSBWSURf TU9ERV9TVFNfRkxBRwkJMHgxODAKKyNkZWZpbmUgVlNHX1JFQ09WRVJZCQkJQklUKDEwKQorI2Rl ZmluZSBFUlJfVlJTX1dST05HX0xFTgkJQklUKDkpCisjZGVmaW5lIEVSUl9MT05HX1JFQUQJCQlC SVQoOCkKKyNkZWZpbmUgRVJSX0xJTkVfV1JJVEUJCQlCSVQoNykKKyNkZWZpbmUgRVJSX0JVUlNU X1dSSVRFCQkJQklUKDYpCisjZGVmaW5lIEVSUl9TTUFMTF9IRUlHSFQJCUJJVCg1KQorI2RlZmlu ZSBFUlJfU01BTExfTEVOCQkJQklUKDQpCisjZGVmaW5lIEVSUl9NSVNTSU5HX1ZTWU5DCQlCSVQo MykKKyNkZWZpbmUgRVJSX01JU1NJTkdfSFNZTkMJCUJJVCgyKQorI2RlZmluZSBFUlJfTUlTU0lO R19EQVRBCQlCSVQoMSkKKyNkZWZpbmUgVlNHX1JVTk5JTkcJCQlCSVQoMCkKKworI2RlZmluZSBW SURfVkNBX1NFVFRJTkcxCQkweGY0CisjZGVmaW5lIEJVUlNUX0xQCQkJQklUKDE2KQorI2RlZmlu ZSBNQVhfQlVSU1RfTElNSVQoeCkJCSh4KQorCisjZGVmaW5lIFZJRF9WQ0FfU0VUVElORzIJCTB4 ZjgKKyNkZWZpbmUgTUFYX0xJTkVfTElNSVQoeCkJCSgoeCkgPDwgMTYpCisjZGVmaW5lIEVYQUNU X0JVUlNUX0xJTUlUKHgpCQkoeCkKKworI2RlZmluZSBUVkdfQ1RMCQkJCTB4ZmMKKyNkZWZpbmUg VFZHX1NUUklQRV9TSVpFKHgpCQkoKHgpIDw8IDUpCisjZGVmaW5lIFRWR19NT0RFX01BU0sJCQlH RU5NQVNLKDQsIDMpCisjZGVmaW5lIFRWR19NT0RFX1NJTkdMRV9DT0xPUgkJKDAgPDwgMykKKyNk ZWZpbmUgVFZHX01PREVfVlNUUklQRVMJCSgyIDw8IDMpCisjZGVmaW5lIFRWR19NT0RFX0hTVFJJ UEVTCQkoMyA8PCAzKQorI2RlZmluZSBUVkdfU1RPUE1PREVfTUFTSwkJR0VOTUFTSygyLCAxKQor I2RlZmluZSBUVkdfU1RPUE1PREVfRU9GCQkoMCA8PCAxKQorI2RlZmluZSBUVkdfU1RPUE1PREVf RU9MCQkoMSA8PCAxKQorI2RlZmluZSBUVkdfU1RPUE1PREVfTk9XCQkoMiA8PCAxKQorI2RlZmlu ZSBUVkdfUlVOCQkJCUJJVCgwKQorCisjZGVmaW5lIFRWR19JTUdfU0laRQkJCTB4MTAwCisjZGVm aW5lIFRWR19OQkxJTkVTKHgpCQkJKCh4KSA8PCAxNikKKyNkZWZpbmUgVFZHX0xJTkVfU0laRSh4 KQkJKHgpCisKKyNkZWZpbmUgVFZHX0NPTE9SMQkJCTB4MTA0CisjZGVmaW5lIFRWR19DT0wxX0dS RUVOKHgpCQkoKHgpIDw8IDEyKQorI2RlZmluZSBUVkdfQ09MMV9SRUQoeCkJCQkoeCkKKworI2Rl ZmluZSBUVkdfQ09MT1IxX0JJUwkJCTB4MTA4CisjZGVmaW5lIFRWR19DT0wxX0JMVUUoeCkJCSh4 KQorCisjZGVmaW5lIFRWR19DT0xPUjIJCQkweDEwYworI2RlZmluZSBUVkdfQ09MMl9HUkVFTih4 KQkJKCh4KSA8PCAxMikKKyNkZWZpbmUgVFZHX0NPTDJfUkVEKHgpCQkJKHgpCisKKyNkZWZpbmUg VFZHX0NPTE9SMl9CSVMJCQkweDExMAorI2RlZmluZSBUVkdfQ09MMl9CTFVFKHgpCQkoeCkKKwor I2RlZmluZSBUVkdfU1RTCQkJCTB4MTE0CisjZGVmaW5lIFRWR19TVFNfQ1RMCQkJMHgxNDQKKyNk ZWZpbmUgVFZHX1NUU19DTFIJCQkweDE2NAorI2RlZmluZSBUVkdfU1RTX0ZMQUcJCQkweDE4NAor I2RlZmluZSBUVkdfU1RTX1JVTk5JTkcJCQlCSVQoMCkKKworI2RlZmluZSBTVFNfQ1RMX0VER0Uo ZSkJCQkoKGUpIDw8IDE2KQorCisjZGVmaW5lIERQSFlfTEFORVNfTUFQCQkJMHgxOTgKKyNkZWZp bmUgREFUX1JFTUFQX0NGRyhiLCBsKQkJKChsKSA8PCAoKGIpICogOCkpCisKKyNkZWZpbmUgRFBJ X0lSUV9FTgkJCTB4MWEwCisjZGVmaW5lIERQSV9JUlFfQ0xSCQkJMHgxYTQKKyNkZWZpbmUgRFBJ X0lSUV9TVFMJCQkweDFhOAorI2RlZmluZSBQSVhFTF9CVUZfT1ZFUkZMT1cJCUJJVCgwKQorCisj ZGVmaW5lIERQSV9DRkcJCQkJMHgxYWMKKyNkZWZpbmUgRFBJX0NGR19GSUZPX0RFUFRIKHgpCQko KHgpID4+IDE2KQorI2RlZmluZSBEUElfQ0ZHX0ZJRk9fTEVWRUwoeCkJCSgoeCkgJiBHRU5NQVNL KDE1LCAwKSkKKworI2RlZmluZSBURVNUX0dFTkVSSUMJCQkweDFmMAorI2RlZmluZSBURVNUX1NU QVRVUyh4KQkJCSgoeCkgPj4gMTYpCisjZGVmaW5lIFRFU1RfQ1RSTCh4KQkJCSh4KQorCisjZGVm aW5lIElEX1JFRwkJCQkweDFmYworI2RlZmluZSBSRVZfVkVORE9SX0lEKHgpCQkoKCh4KSAmIEdF Tk1BU0soMzEsIDIwKSkgPj4gMjApCisjZGVmaW5lIFJFVl9QUk9EVUNUX0lEKHgpCQkoKCh4KSAm IEdFTk1BU0soMTksIDEyKSkgPj4gMTIpCisjZGVmaW5lIFJFVl9IVyh4KQkJCSgoKHgpICYgR0VO TUFTSygxMSwgOCkpID4+IDgpCisjZGVmaW5lIFJFVl9NQUpPUih4KQkJCSgoKHgpICYgR0VOTUFT Syg3LCA0KSkgPj4gNCkKKyNkZWZpbmUgUkVWX01JTk9SKHgpCQkJKCh4KSAmIEdFTk1BU0soMywg MCkpCisKKyNkZWZpbmUgRFNJX09VVFBVVF9QT1JUCQkJMAorI2RlZmluZSBEU0lfSU5QVVRfUE9S VChpbnB1dGlkKQkJKDEgKyAoaW5wdXRpZCkpCisKKyNkZWZpbmUgRFNJX0hCUF9GUkFNRV9PVkVS SEVBRAkJMTIKKyNkZWZpbmUgRFNJX0hTQV9GUkFNRV9PVkVSSEVBRAkJMTQKKyNkZWZpbmUgRFNJ X0hGUF9GUkFNRV9PVkVSSEVBRAkJNgorI2RlZmluZSBEU0lfSFNTX1ZTU19WU0VfRlJBTUVfT1ZF UkhFQUQJNAorI2RlZmluZSBEU0lfQkxBTktJTkdfRlJBTUVfT1ZFUkhFQUQJNgorI2RlZmluZSBE U0lfTlVMTF9GUkFNRV9PVkVSSEVBRAkJNgorI2RlZmluZSBEU0lfRU9UX1BLVF9TSVpFCQk0CisK KyNkZWZpbmUgUkVHX1dBS0VVUF9USU1FX05TCQk4MDAKKyNkZWZpbmUgRFBIWV9QTExfUkFURV9I WgkJMTA4MDAwMDAwCisKKy8qIERQSFkgcmVnaXN0ZXJzICovCisjZGVmaW5lIERQSFlfUE1BX0NN TihyZWcpCQkocmVnKQorI2RlZmluZSBEUEhZX1BNQV9MQ0xLKHJlZykJCSgweDEwMCArIChyZWcp KQorI2RlZmluZSBEUEhZX1BNQV9MREFUQShsYW5lLCByZWcpCSgweDIwMCArICgobGFuZSkgKiAw eDEwMCkgKyAocmVnKSkKKyNkZWZpbmUgRFBIWV9QTUFfUkNMSyhyZWcpCQkoMHg2MDAgKyAocmVn KSkKKyNkZWZpbmUgRFBIWV9QTUFfUkRBVEEobGFuZSwgcmVnKQkoMHg3MDAgKyAoKGxhbmUpICog MHgxMDApICsgKHJlZykpCisjZGVmaW5lIERQSFlfUENTKHJlZykJCQkoMHhiMDAgKyAocmVnKSkK KworI2RlZmluZSBEUEhZX0NNTl9TU00JCQlEUEhZX1BNQV9DTU4oMHgyMCkKKyNkZWZpbmUgRFBI WV9DTU5fU1NNX0VOCQkJQklUKDApCisjZGVmaW5lIERQSFlfQ01OX1RYX01PREVfRU4JCUJJVCg5 KQorCisjZGVmaW5lIERQSFlfQ01OX1BXTQkJCURQSFlfUE1BX0NNTigweDQwKQorI2RlZmluZSBE UEhZX0NNTl9QV01fRElWKHgpCQkoKHgpIDw8IDIwKQorI2RlZmluZSBEUEhZX0NNTl9QV01fTE9X KHgpCQkoKHgpIDw8IDEwKQorI2RlZmluZSBEUEhZX0NNTl9QV01fSElHSCh4KQkJKHgpCisKKyNk ZWZpbmUgRFBIWV9DTU5fRkJESVYJCQlEUEhZX1BNQV9DTU4oMHg0YykKKyNkZWZpbmUgRFBIWV9D TU5fRkJESVZfVkFMKGxvdywgaGlnaCkJKCgoaGlnaCkgPDwgMTEpIHwgKChsb3cpIDw8IDIyKSkK KyNkZWZpbmUgRFBIWV9DTU5fRkJESVZfRlJPTV9SRUcJCShCSVQoMTApIHwgQklUKDIxKSkKKwor I2RlZmluZSBEUEhZX0NNTl9PUElQRElWCQlEUEhZX1BNQV9DTU4oMHg1MCkKKyNkZWZpbmUgRFBI WV9DTU5fSVBESVZfRlJPTV9SRUcJCUJJVCgwKQorI2RlZmluZSBEUEhZX0NNTl9JUERJVih4KQkJ KCh4KSA8PCAxKQorI2RlZmluZSBEUEhZX0NNTl9PUERJVl9GUk9NX1JFRwkJQklUKDYpCisjZGVm aW5lIERQSFlfQ01OX09QRElWKHgpCQkoKHgpIDw8IDcpCisKKyNkZWZpbmUgRFBIWV9QU01fQ0ZH CQkJRFBIWV9QQ1MoMHg0KQorI2RlZmluZSBEUEhZX1BTTV9DRkdfRlJPTV9SRUcJCUJJVCgwKQor I2RlZmluZSBEUEhZX1BTTV9DTEtfRElWKHgpCQkoKHgpIDw8IDEpCisKK3N0cnVjdCBjZG5zX2Rz aV9vdXRwdXQgeworCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX3Bh bmVsICpwYW5lbDsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlOworfTsKKworZW51bSBjZG5z X2RzaV9pbnB1dF9pZCB7CisJQ0ROU19TRElfSU5QVVQsCisJQ0ROU19EUElfSU5QVVQsCisJQ0RO U19EU0NfSU5QVVQsCit9OworCitzdHJ1Y3QgY2Ruc19kcGh5X2NmZyB7CisJdTggcGxsX2lwZGl2 OworCXU4IHBsbF9vcGRpdjsKKwl1MTYgcGxsX2ZiZGl2OworCXVuc2lnbmVkIGxvbmcgbGFuZV9i cHM7CisJdW5zaWduZWQgaW50IG5sYW5lczsKK307CisKK3N0cnVjdCBjZG5zX2RzaV9jZmcgewor CXVuc2lnbmVkIGludCBoZnA7CisJdW5zaWduZWQgaW50IGhzYTsKKwl1bnNpZ25lZCBpbnQgaGJw OworCXVuc2lnbmVkIGludCBoYWN0OworCXVuc2lnbmVkIGludCBodG90YWw7Cit9OworCitzdHJ1 Y3QgY2Ruc19kcGh5OworCitlbnVtIGNkbnNfZHBoeV9jbGtfbGFuZV9jZmcgeworCURQSFlfQ0xL X0NGR19MRUZUX0RSSVZFU19BTEwgPSAwLAorCURQSFlfQ0xLX0NGR19MRUZUX0RSSVZFU19SSUdI VCA9IDEsCisJRFBIWV9DTEtfQ0ZHX0xFRlRfRFJJVkVTX0xFRlQgPSAyLAorCURQSFlfQ0xLX0NG R19SSUdIVF9EUklWRVNfQUxMID0gMywKK307CisKK3N0cnVjdCBjZG5zX2RwaHlfb3BzIHsKKwlp bnQgKCpwcm9iZSkoc3RydWN0IGNkbnNfZHBoeSAqZHBoeSk7CisJdm9pZCAoKnJlbW92ZSkoc3Ry dWN0IGNkbnNfZHBoeSAqZHBoeSk7CisJdm9pZCAoKnNldF9wc21fZGl2KShzdHJ1Y3QgY2Ruc19k cGh5ICpkcGh5LCB1OCBkaXYpOworCXZvaWQgKCpzZXRfY2xrX2xhbmVfY2ZnKShzdHJ1Y3QgY2Ru c19kcGh5ICpkcGh5LAorCQkJCSBlbnVtIGNkbnNfZHBoeV9jbGtfbGFuZV9jZmcgY2ZnKTsKKwl2 b2lkICgqc2V0X3BsbF9jZmcpKHN0cnVjdCBjZG5zX2RwaHkgKmRwaHksCisJCQkgICAgY29uc3Qg c3RydWN0IGNkbnNfZHBoeV9jZmcgKmNmZyk7CisJdW5zaWduZWQgbG9uZyAoKmdldF93YWtldXBf dGltZV9ucykoc3RydWN0IGNkbnNfZHBoeSAqZHBoeSk7Cit9OworCitzdHJ1Y3QgY2Ruc19kcGh5 IHsKKwlzdHJ1Y3QgY2Ruc19kcGh5X2NmZyBjZmc7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0 cnVjdCBjbGsgKnBzbV9jbGs7CisJc3RydWN0IGNsayAqcGxsX3JlZl9jbGs7CisJY29uc3Qgc3Ry dWN0IGNkbnNfZHBoeV9vcHMgKm9wczsKK307CisKK3N0cnVjdCBjZG5zX2RzaV9pbnB1dCB7CisJ ZW51bSBjZG5zX2RzaV9pbnB1dF9pZCBpZDsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSBicmlkZ2U7Cit9 OworCitzdHJ1Y3QgY2Ruc19kc2kgeworCXN0cnVjdCBtaXBpX2RzaV9ob3N0IGJhc2U7CisJdm9p ZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBjZG5zX2RzaV9pbnB1dCBpbnB1dDsKKwlzdHJ1Y3Qg Y2Ruc19kc2lfb3V0cHV0IG91dHB1dDsKKwl1bnNpZ25lZCBpbnQgZGlyZWN0X2NtZF9maWZvX2Rl cHRoOworCXVuc2lnbmVkIGludCByeF9maWZvX2RlcHRoOworCXN0cnVjdCBjb21wbGV0aW9uIGRp cmVjdF9jbWRfY29tcDsKKwlzdHJ1Y3QgY2xrICpkc2lfcF9jbGs7CisJc3RydWN0IHJlc2V0X2Nv bnRyb2wgKmRzaV9wX3JzdDsKKwlzdHJ1Y3QgY2xrICpkc2lfc3lzX2NsazsKKwlib29sIGxpbmtf aW5pdGlhbGl6ZWQ7CisJc3RydWN0IGNkbnNfZHBoeSAqZHBoeTsKK307CisKK3N0YXRpYyBpbmxp bmUgc3RydWN0IGNkbnNfZHNpICppbnB1dF90b19kc2koc3RydWN0IGNkbnNfZHNpX2lucHV0ICpp bnB1dCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGlucHV0LCBzdHJ1Y3QgY2Ruc19kc2ksIGlu cHV0KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2Ruc19kc2kgKnRvX2NkbnNfZHNpKHN0 cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0KQoreworCXJldHVybiBjb250YWluZXJfb2YoaG9zdCwg c3RydWN0IGNkbnNfZHNpLCBiYXNlKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2Ruc19k c2lfaW5wdXQgKgorYnJpZGdlX3RvX2NkbnNfZHNpX2lucHV0KHN0cnVjdCBkcm1fYnJpZGdlICpi cmlkZ2UpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihicmlkZ2UsIHN0cnVjdCBjZG5zX2RzaV9p bnB1dCwgYnJpZGdlKTsKK30KKworc3RhdGljIGludCBjZG5zX2RzaV9nZXRfZHBoeV9wbGxfY2Zn KHN0cnVjdCBjZG5zX2RwaHkgKmRwaHksCisJCQkJICAgICBzdHJ1Y3QgY2Ruc19kcGh5X2NmZyAq Y2ZnLAorCQkJCSAgICAgdW5zaWduZWQgaW50IGRwaV9odG90YWwsCisJCQkJICAgICB1bnNpZ25l ZCBpbnQgZHBpX2JwcCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBkcGlfaHosCisJCQkJICAgICB1 bnNpZ25lZCBpbnQgZHNpX2h0b3RhbCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBkc2lfbmxhbmVz LAorCQkJCSAgICAgdW5zaWduZWQgaW50ICpkc2lfaGZwX2V4dCkKK3sKKwl1NjQgZGxhbmVfYnBz LCBkbGFuZV9icHNfbWF4LCBmYmRpdiwgZmJkaXZfbWF4LCBhZGpfZHNpX2h0b3RhbDsKKwl1bnNp Z25lZCBsb25nIHBsbF9yZWZfaHogPSBjbGtfZ2V0X3JhdGUoZHBoeS0+cGxsX3JlZl9jbGspOwor CisJbWVtc2V0KGNmZywgMCwgc2l6ZW9mKCpjZmcpKTsKKworCWNmZy0+bmxhbmVzID0gZHNpX25s YW5lczsKKworCWlmIChwbGxfcmVmX2h6IDwgOTYwMDAwMCB8fCBwbGxfcmVmX2h6ID49IDE1MDAw MDAwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZWxzZSBpZiAocGxsX3JlZl9oeiA8IDE5MjAwMDAw KQorCQljZmctPnBsbF9pcGRpdiA9IDE7CisJZWxzZSBpZiAocGxsX3JlZl9oeiA8IDM4NDAwMDAw KQorCQljZmctPnBsbF9pcGRpdiA9IDI7CisJZWxzZSBpZiAocGxsX3JlZl9oeiA8IDc2ODAwMDAw KQorCQljZmctPnBsbF9pcGRpdiA9IDQ7CisJZWxzZQorCQljZmctPnBsbF9pcGRpdiA9IDg7CisK KwkvKgorCSAqIE1ha2Ugc3VyZSBEU0kgaHRvdGFsIGlzIGFsaWduZWQgb24gYSBsYW5lIGJvdW5k YXJ5IHdoZW4gY2FsY3VsYXRpbmcKKwkgKiB0aGUgZXhwZWN0ZWQgZGF0YSByYXRlLiBUaGlzIGlz IGRvbmUgYnkgZXh0ZW5kaW5nIEhGUCBpbiBjYXNlIG9mCisJICogbWlzYWxpZ25tZW50LgorCSAq LworCWFkal9kc2lfaHRvdGFsID0gZHNpX2h0b3RhbDsKKwlpZiAoZHNpX2h0b3RhbCAlIGRzaV9u bGFuZXMpCisJCWFkal9kc2lfaHRvdGFsICs9IGRzaV9ubGFuZXMgLSAoZHNpX2h0b3RhbCAlIGRz aV9ubGFuZXMpOworCisJZGxhbmVfYnBzID0gKHU2NClkcGlfaHogKiBhZGpfZHNpX2h0b3RhbDsK KworCS8qIGRhdGEgcmF0ZSBpbiBieXRlcy9zZWMgaXMgbm90IGFuIGludGVnZXIsIHJlZnVzZSB0 aGUgbW9kZS4gKi8KKwlpZiAoZG9fZGl2KGRsYW5lX2JwcywgZHNpX25sYW5lcyAqIGRwaV9odG90 YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGRhdGEgcmF0ZSB3YXMgaW4gYnl0ZXMvc2Vj LCBjb252ZXJ0IHRvIGJpdHMvc2VjLiAqLworCWRsYW5lX2JwcyAqPSA4OworCisJaWYgKGRsYW5l X2JwcyA+IDI1MDAwMDAwMDBVTCB8fCBkbGFuZV9icHMgPCAxNjAwMDAwMDBVTCkKKwkJcmV0dXJu IC1FSU5WQUw7CisJZWxzZSBpZiAoZGxhbmVfYnBzID49IDEyNTAwMDAwMDApCisJCWNmZy0+cGxs X29wZGl2ID0gMTsKKwllbHNlIGlmIChkbGFuZV9icHMgPj0gNjMwMDAwMDAwKQorCQljZmctPnBs bF9vcGRpdiA9IDI7CisJZWxzZSBpZiAoZGxhbmVfYnBzID49IDMyMDAwMDAwMCkKKwkJY2ZnLT5w bGxfb3BkaXYgPSA0OworCWVsc2UgaWYgKGRsYW5lX2JwcyA+PSAxNjAwMDAwMDApCisJCWNmZy0+ cGxsX29wZGl2ID0gODsKKworCS8qCisJICogQWxsb3cgYSBkZXZpYXRpb24gb2YgMC4yJSBvbiB0 aGUgcGVyLWxhbmUgZGF0YSByYXRlIHRvIHRyeSB0bworCSAqIHJlY292ZXIgYSBwb3RlbnRpYWwg bWlzbWF0Y2ggYmV0d2VlbiBEUEkgYW5kIFBQSSBjbGtzLgorCSAqLworCWRsYW5lX2Jwc19tYXgg PSBkbGFuZV9icHMgKyAoZGxhbmVfYnBzIC8gNTAwKTsKKworCWZiZGl2X21heCA9IERJVl9ST1VO RF9ET1dOX1VMTCgoZGxhbmVfYnBzICsgKGRsYW5lX2JwcyAvIDUwMCkpICogMiAqCisJCQkJICAg ICAgIGNmZy0+cGxsX29wZGl2ICogY2ZnLT5wbGxfaXBkaXYsCisJCQkJICAgICAgIHBsbF9yZWZf aHopOworCWZiZGl2ID0gRElWX1JPVU5EX1VQX1VMTChkbGFuZV9icHMgKiAyICogY2ZnLT5wbGxf b3BkaXYgKgorCQkJCSBjZmctPnBsbF9pcGRpdiwKKwkJCQkgcGxsX3JlZl9oeik7CisKKwkvKgor CSAqIEl0ZXJhdGUgb3ZlciBhbGwgYWNjZXB0YWJsZSBmYmRpdiBhbmQgdHJ5IHRvIGZpbmQgYW4g YWRqdXN0ZWQgRFNJCisJICogaHRvdGFsIGxlbmd0aCBwcm92aWRpbmcgYW4gZXhhY3QgbWF0Y2gu CisJICoKKwkgKiBOb3RlIHRoYXQgd2UgY291bGQgZG8gc29tZXRoaW5nIGV2ZW4gdHJpY2tpZXIg YnkgcmVseWluZyBvbiB0aGUgZmFjdAorCSAqIHRoYXQgYSBuZXcgbGluZSBpcyBub3QgbmVjZXNz YXJpbHkgYWxpZ25lZCBvbiBhIGxhbmUgYm91bmRhcnksIHNvLAorCSAqIGJ5IG1ha2luZyBhZGpf ZHNpX2h0b3RhbCBub24gYWxpZ25lZCBvbiBhIGRzaV9sYW5lcyB3ZSBjYW4gaW1wcm92ZSBhCisJ ICogYml0IHRoZSBwcmVjaXNpb24uIFdpdGggdGhpcywgdGhlIHN0ZXAgd291bGQgYmUKKwkgKgor CSAqCXBsbF9yZWZfaHogLyAoMiAqIG9wZGl2ICogaXBkaXYgKiBubGFuZXMpCisJICoKKwkgKiBp bnN0ZWFkIG9mCisJICoKKwkgKglwbGxfcmVmX2h6IC8gKDIgKiBvcGRpdiAqIGlwZGl2KQorCSAq CisJICogVGhlIGRyYXdiYWNrIG9mIHRoaXMgYXBwcm9hY2ggaXMgdGhhdCB3ZSB3b3VsZCBuZWVk IHRvIG1ha2Ugc3VyZSB0aGUKKwkgKiBudW1iZXIgb3IgbGluZXMgaXMgYSBtdWx0aXBsZSBvZiB0 aGUgcmVhbGlnbm1lbnQgcGVyaW9kaWNpdHkgd2hpY2ggaXMKKwkgKiBhIGZ1bmN0aW9uIG9mIHRo ZSBudW1iZXIgb2YgbGFuZXMgYW5kIHRoZSBvcmlnaW5hbCBtaXNhbGlnbm1lbnQuIEZvcgorCSAq IGV4YW1wbGUsIGZvciBOTEFORVMgPSA0IGFuZCBIVE9UQUwgJSBOTEFORVMgPSAzLCBpdCB0YWtl cyA0IGxpbmVzCisJICogdG8gcmVhbGlnbiBvbiBhIGxhbmU6CisJICogTElORSAwOiBleHBlY3Rl ZCBudW1iZXIgb2YgYnl0ZXMsIHN0YXJ0cyBlbWl0dGluZyBmaXJzdCBieXRlIG9mCisJICoJICAg TElORSAxIG9uIExBTkUgMworCSAqIExJTkUgMTogZXhwZWN0ZWQgbnVtYmVyIG9mIGJ5dGVzLCBz dGFydHMgZW1pdHRpbmcgZmlyc3QgMiBieXRlcyBvZgorCSAqCSAgIExJTkUgMiBvbiBMQU5FUyAy IGFuZCAzCisJICogTElORSAyOiBleHBlY3RlZCBudW1iZXIgb2YgYnl0ZXMsIHN0YXJ0cyBlbWl0 dGluZyBmaXJzdCAzIGJ5dGVzIG9mCisJICoJICAgb2YgTElORSAzIG9uIExBTkVTIDEsIDIgYW5k IDMKKwkgKiBMSU5FIDM6IG9uZSBieXRlIGxlc3MsIG5vdyB0aGluZ3MgYXJlIHJlYWxpZ25lZCBv biBMQU5FIDAgZm9yIExJTkUgNAorCSAqCisJICogSSBmaWd1cmVkIHRoaXMgZXh0cmEgY29tcGxl eGl0eSB3YXMgbm90IHdvcnRoIHRoZSBiZW5lZml0LCBidXQgaWYKKwkgKiBzb21lb25lIHJlYWxs eSBoYXMgdW5maXhhYmxlIG1pc21hdGNoLCB0aGF0IHdvdWxkIGJlIHNvbWV0aGluZyB0bworCSAq IGludmVzdGlnYXRlLgorCSAqLworCWZvciAoOyBmYmRpdiA8PSBmYmRpdl9tYXg7IGZiZGl2Kysp IHsKKwkJdTMyIHJlbTsKKworCQlhZGpfZHNpX2h0b3RhbCA9ICh1NjQpZmJkaXYgKiBwbGxfcmVm X2h6ICogZHNpX25sYW5lcyAqCisJCQkJIGRwaV9odG90YWw7CisKKwkJLyoKKwkJICogRG8gdGhl IGRpdmlzaW9uIGluIDIgc3RlcHMgdG8gYXZvaWQgYW4gb3ZlcmZsb3cgb24gdGhlCisJCSAqIGRp dmlkZXIuCisJCSAqLworCQlyZW0gPSBkb19kaXYoYWRqX2RzaV9odG90YWwsIGRwaV9oeik7CisJ CWlmIChyZW0pCisJCQljb250aW51ZTsKKworCQlyZW0gPSBkb19kaXYoYWRqX2RzaV9odG90YWws CisJCQkgICAgIGNmZy0+cGxsX29wZGl2ICogY2ZnLT5wbGxfaXBkaXYgKiAyICogOCk7CisJCWlm IChyZW0pCisJCQljb250aW51ZTsKKworCQljZmctPnBsbF9mYmRpdiA9IGZiZGl2OworCQkqZHNp X2hmcF9leHQgPSBhZGpfZHNpX2h0b3RhbCAtIGRzaV9odG90YWw7CisJCWJyZWFrOworCX0KKwor CS8qIE5vIG1hdGNoLCBsZXQncyBqdXN0IHJlamVjdCB0aGUgZGlzcGxheSBtb2RlLiAqLworCWlm ICghY2ZnLT5wbGxfZmJkaXYpCisJCXJldHVybiAtRUlOVkFMOworCisJZGxhbmVfYnBzID0gRElW X1JPVU5EX0RPV05fVUxMKCh1NjQpZHBpX2h6ICogYWRqX2RzaV9odG90YWwgKiA4LAorCQkJCSAg ICAgICBkc2lfbmxhbmVzICogZHBpX2h0b3RhbCk7CisJY2ZnLT5sYW5lX2JwcyA9IGRsYW5lX2Jw czsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNkbnNfZHBoeV9zZXR1cF9wc20oc3Ry dWN0IGNkbnNfZHBoeSAqZHBoeSkKK3sKKwl1bnNpZ25lZCBsb25nIHBzbV9jbGtfaHogPSBjbGtf Z2V0X3JhdGUoZHBoeS0+cHNtX2Nsayk7CisJdW5zaWduZWQgbG9uZyBwc21fZGl2OworCisJaWYg KCFwc21fY2xrX2h6IHx8IHBzbV9jbGtfaHogPiAxMDAwMDAwMDApCisJCXJldHVybiAtRUlOVkFM OworCisJcHNtX2RpdiA9IERJVl9ST1VORF9DTE9TRVNUKHBzbV9jbGtfaHosIDEwMDAwMDApOwor CWlmIChkcGh5LT5vcHMtPnNldF9wc21fZGl2KQorCQlkcGh5LT5vcHMtPnNldF9wc21fZGl2KGRw aHksIHBzbV9kaXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNkbnNfZHBoeV9z ZXRfY2xrX2xhbmVfY2ZnKHN0cnVjdCBjZG5zX2RwaHkgKmRwaHksCisJCQkJICAgICAgIGVudW0g Y2Ruc19kcGh5X2Nsa19sYW5lX2NmZyBjZmcpCit7CisJaWYgKGRwaHktPm9wcy0+c2V0X2Nsa19s YW5lX2NmZykKKwkJZHBoeS0+b3BzLT5zZXRfY2xrX2xhbmVfY2ZnKGRwaHksIGNmZyk7Cit9CisK K3N0YXRpYyB2b2lkIGNkbnNfZHBoeV9zZXRfcGxsX2NmZyhzdHJ1Y3QgY2Ruc19kcGh5ICpkcGh5 LAorCQkJCSAgY29uc3Qgc3RydWN0IGNkbnNfZHBoeV9jZmcgKmNmZykKK3sKKwlpZiAoZHBoeS0+ b3BzLT5zZXRfcGxsX2NmZykKKwkJZHBoeS0+b3BzLT5zZXRfcGxsX2NmZyhkcGh5LCBjZmcpOwor fQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjZG5zX2RwaHlfZ2V0X3dha2V1cF90aW1lX25zKHN0 cnVjdCBjZG5zX2RwaHkgKmRwaHkpCit7CisJcmV0dXJuIGRwaHktPm9wcy0+Z2V0X3dha2V1cF90 aW1lX25zKGRwaHkpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGRwaV90b19kc2lfdGltaW5n KHVuc2lnbmVkIGludCBkcGlfdGltaW5nLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBkcGlfYnBw LAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBkc2lfcGt0X292ZXJoZWFkKQoreworCXVuc2lnbmVk IGludCBkc2lfdGltaW5nID0gRElWX1JPVU5EX1VQKGRwaV90aW1pbmcgKiBkcGlfYnBwLCA4KTsK KworCWlmIChkc2lfdGltaW5nIDwgZHNpX3BrdF9vdmVyaGVhZCkKKwkJZHNpX3RpbWluZyA9IDA7 CisJZWxzZQorCQlkc2lfdGltaW5nIC09IGRzaV9wa3Rfb3ZlcmhlYWQ7CisKKwlyZXR1cm4gZHNp X3RpbWluZzsKK30KKworc3RhdGljIGludCBjZG5zX2RzaV9tb2RlMmNmZyhzdHJ1Y3QgY2Ruc19k c2kgKmRzaSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJ CQkgICAgIHN0cnVjdCBjZG5zX2RzaV9jZmcgKmRzaV9jZmcsCisJCQkgICAgIHN0cnVjdCBjZG5z X2RwaHlfY2ZnICpkcGh5X2NmZywKKwkJCSAgICAgYm9vbCBtb2RlX3ZhbGlkX2NoZWNrKQorewor CXVuc2lnbmVkIGxvbmcgZHNpX2h0b3RhbCA9IDAsIGRzaV9oc3NfaHNhX2hzZV9oYnAgPSAwOwor CXN0cnVjdCBjZG5zX2RzaV9vdXRwdXQgKm91dHB1dCA9ICZkc2ktPm91dHB1dDsKKwl1bnNpZ25l ZCBpbnQgZHNpX2hmcF9leHQgPSAwLCBkcGlfaGZwLCB0bXA7CisJYm9vbCBzeW5jX3B1bHNlID0g ZmFsc2U7CisJaW50IGJwcCwgbmxhbmVzLCByZXQ7CisKKwltZW1zZXQoZHNpX2NmZywgMCwgc2l6 ZW9mKCpkc2lfY2ZnKSk7CisKKwlpZiAob3V0cHV0LT5kZXYtPm1vZGVfZmxhZ3MgJiBNSVBJX0RT SV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpCisJCXN5bmNfcHVsc2UgPSB0cnVlOworCisJYnBwID0g bWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChvdXRwdXQtPmRldi0+Zm9ybWF0KTsKKwlubGFu ZXMgPSBvdXRwdXQtPmRldi0+bGFuZXM7CisKKwlpZiAobW9kZV92YWxpZF9jaGVjaykKKwkJdG1w ID0gbW9kZS0+aHRvdGFsIC0KKwkJICAgICAgKHN5bmNfcHVsc2UgPyBtb2RlLT5oc3luY19lbmQg OiBtb2RlLT5oc3luY19zdGFydCk7CisJZWxzZQorCQl0bXAgPSBtb2RlLT5jcnRjX2h0b3RhbCAt CisJCSAgICAgIChzeW5jX3B1bHNlID8KKwkJICAgICAgIG1vZGUtPmNydGNfaHN5bmNfZW5kIDog bW9kZS0+Y3J0Y19oc3luY19zdGFydCk7CisKKwlkc2lfY2ZnLT5oYnAgPSBkcGlfdG9fZHNpX3Rp bWluZyh0bXAsIGJwcCwgRFNJX0hCUF9GUkFNRV9PVkVSSEVBRCk7CisJZHNpX2h0b3RhbCArPSBk c2lfY2ZnLT5oYnAgKyBEU0lfSEJQX0ZSQU1FX09WRVJIRUFEOworCWRzaV9oc3NfaHNhX2hzZV9o YnAgKz0gZHNpX2NmZy0+aGJwICsgRFNJX0hCUF9GUkFNRV9PVkVSSEVBRDsKKworCWlmIChzeW5j X3B1bHNlKSB7CisJCWlmIChtb2RlX3ZhbGlkX2NoZWNrKQorCQkJdG1wID0gbW9kZS0+aHN5bmNf ZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQ7CisJCWVsc2UKKwkJCXRtcCA9IG1vZGUtPmNydGNfaHN5 bmNfZW5kIC0gbW9kZS0+Y3J0Y19oc3luY19zdGFydDsKKworCQlkc2lfY2ZnLT5oc2EgPSBkcGlf dG9fZHNpX3RpbWluZyh0bXAsIGJwcCwKKwkJCQkJCSBEU0lfSFNBX0ZSQU1FX09WRVJIRUFEKTsK KwkJZHNpX2h0b3RhbCArPSBkc2lfY2ZnLT5oc2EgKyBEU0lfSFNBX0ZSQU1FX09WRVJIRUFEOwor CQlkc2lfaHNzX2hzYV9oc2VfaGJwICs9IGRzaV9jZmctPmhzYSArIERTSV9IU0FfRlJBTUVfT1ZF UkhFQUQ7CisJfQorCisJZHNpX2NmZy0+aGFjdCA9IGRwaV90b19kc2lfdGltaW5nKG1vZGVfdmFs aWRfY2hlY2sgPworCQkJCQkgIG1vZGUtPmhkaXNwbGF5IDogbW9kZS0+Y3J0Y19oZGlzcGxheSwK KwkJCQkJICBicHAsIDApOworCWRzaV9odG90YWwgKz0gZHNpX2NmZy0+aGFjdDsKKworCWlmICht b2RlX3ZhbGlkX2NoZWNrKQorCQlkcGlfaGZwID0gbW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5o ZGlzcGxheTsKKwllbHNlCisJCWRwaV9oZnAgPSBtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0IC0gbW9k ZS0+Y3J0Y19oZGlzcGxheTsKKworCWRzaV9jZmctPmhmcCA9IGRwaV90b19kc2lfdGltaW5nKGRw aV9oZnAsIGJwcCwgRFNJX0hGUF9GUkFNRV9PVkVSSEVBRCk7CisJZHNpX2h0b3RhbCArPSBkc2lf Y2ZnLT5oZnAgKyBEU0lfSEZQX0ZSQU1FX09WRVJIRUFEOworCisJaWYgKG1vZGVfdmFsaWRfY2hl Y2spCisJCXJldCA9IGNkbnNfZHNpX2dldF9kcGh5X3BsbF9jZmcoZHNpLT5kcGh5LCBkcGh5X2Nm ZywKKwkJCQkJCW1vZGUtPmh0b3RhbCwgYnBwLAorCQkJCQkJbW9kZS0+Y2xvY2sgKiAxMDAwLAor CQkJCQkJZHNpX2h0b3RhbCwgbmxhbmVzLAorCQkJCQkJJmRzaV9oZnBfZXh0KTsKKwllbHNlCisJ CXJldCA9IGNkbnNfZHNpX2dldF9kcGh5X3BsbF9jZmcoZHNpLT5kcGh5LCBkcGh5X2NmZywKKwkJ CQkJCW1vZGUtPmNydGNfaHRvdGFsLCBicHAsCisJCQkJCQltb2RlLT5jcnRjX2Nsb2NrICogMTAw MCwKKwkJCQkJCWRzaV9odG90YWwsIG5sYW5lcywKKwkJCQkJCSZkc2lfaGZwX2V4dCk7CisKKwlp ZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZHNpX2NmZy0+aGZwICs9IGRzaV9oZnBfZXh0Owor CWRzaV9odG90YWwgKz0gZHNpX2hmcF9leHQ7CisJZHNpX2NmZy0+aHRvdGFsID0gZHNpX2h0b3Rh bDsKKworCS8qCisJICogTWFrZSBzdXJlIERQSShIRlApID4gRFNJKEhTUytIU0ErSFNFK0hCUCkg dG8gZ3VhcmFudGVlIHRoYXQgdGhlIEZJRk8KKwkgKiBpcyBlbXB0eSBiZWZvcmUgd2Ugc3RhcnQg YSByZWNlaXZpbmcgYSBuZXcgbGluZSBvbiB0aGUgRFBJCisJICogaW50ZXJmYWNlLgorCSAqLwor CWlmICgodTY0KWRwaHlfY2ZnLT5sYW5lX2JwcyAqIGRwaV9oZnAgKiBubGFuZXMgPAorCSAgICAo dTY0KWRzaV9oc3NfaHNhX2hzZV9oYnAgKgorCSAgICAobW9kZV92YWxpZF9jaGVjayA/IG1vZGUt PmNsb2NrIDogbW9kZS0+Y3J0Y19jbG9jaykgKiAxMDAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNkbnNfZHNpX2JyaWRnZV9hdHRhY2goc3RydWN0 IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgY2Ruc19kc2lfaW5wdXQgKmlucHV0ID0g YnJpZGdlX3RvX2NkbnNfZHNpX2lucHV0KGJyaWRnZSk7CisJc3RydWN0IGNkbnNfZHNpICpkc2kg PSBpbnB1dF90b19kc2koaW5wdXQpOworCXN0cnVjdCBjZG5zX2RzaV9vdXRwdXQgKm91dHB1dCA9 ICZkc2ktPm91dHB1dDsKKworCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShicmlkZ2UtPmRl diwgRFJJVkVSX0FUT01JQykpIHsKKwkJZGV2X2Vycihkc2ktPmJhc2UuZGV2LAorCQkJImNkbnMt ZHNpIGRyaXZlciBpcyBvbmx5IGNvbXBhdGlibGUgd2l0aCBEUk0gZGV2aWNlcyBzdXBwb3J0aW5n IGF0b21pYyB1cGRhdGVzIik7CisJCXJldHVybiAtRU5PVFNVUFA7CisJfQorCisJcmV0dXJuIGRy bV9icmlkZ2VfYXR0YWNoKGJyaWRnZS0+ZW5jb2Rlciwgb3V0cHV0LT5icmlkZ2UsIGJyaWRnZSk7 Cit9CisKK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cworY2Ruc19kc2lfYnJpZGdlX21vZGVf dmFsaWQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBjZG5zX2RzaV9pbnB1dCAqaW5wdXQgPSBi cmlkZ2VfdG9fY2Ruc19kc2lfaW5wdXQoYnJpZGdlKTsKKwlzdHJ1Y3QgY2Ruc19kc2kgKmRzaSA9 IGlucHV0X3RvX2RzaShpbnB1dCk7CisJc3RydWN0IGNkbnNfZHNpX291dHB1dCAqb3V0cHV0ID0g JmRzaS0+b3V0cHV0OworCXN0cnVjdCBjZG5zX2RwaHlfY2ZnIGRwaHlfY2ZnOworCXN0cnVjdCBj ZG5zX2RzaV9jZmcgZHNpX2NmZzsKKwlpbnQgYnBwLCBubGFuZXMsIHJldDsKKworCS8qCisJICog VkZQX0RTSSBzaG91bGQgYmUgbGVzcyB0aGFuIFZGUF9EUEkgYW5kIFZGUF9EU0kgc2hvdWxkIGJl IGF0CisJICogbGVhc3QgMS4KKwkgKi8KKwlpZiAobW9kZS0+dnRvdGFsIC0gbW9kZS0+dnN5bmNf ZW5kIDwgMikKKwkJcmV0dXJuIE1PREVfVl9JTExFR0FMOworCisJLyogVlNBX0RTSSA9IFZTQV9E UEkgYW5kIG11c3QgYmUgYXQgbGVhc3QgMi4gKi8KKwlpZiAobW9kZS0+dnN5bmNfZW5kIC0gbW9k ZS0+dnN5bmNfc3RhcnQgPCAyKQorCQlyZXR1cm4gTU9ERV9WX0lMTEVHQUw7CisKKwkvKiBIQUNU IG11c3QgYmUgMzItYml0cyBhbGlnbmVkLiAqLworCWJwcCA9IG1pcGlfZHNpX3BpeGVsX2Zvcm1h dF90b19icHAob3V0cHV0LT5kZXYtPmZvcm1hdCk7CisJaWYgKChtb2RlLT5oZGlzcGxheSAqIGJw cCkgJSAzMikKKwkJcmV0dXJuIE1PREVfSF9JTExFR0FMOworCisJbmxhbmVzID0gb3V0cHV0LT5k ZXYtPmxhbmVzOworCisJcmV0ID0gY2Ruc19kc2lfbW9kZTJjZmcoZHNpLCBtb2RlLCAmZHNpX2Nm ZywgJmRwaHlfY2ZnLCB0cnVlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gTU9ERV9DTE9DS19SQU5H RTsKKworCXJldHVybiBNT0RFX09LOworfQorCitzdGF0aWMgdm9pZCBjZG5zX2RzaV9icmlkZ2Vf ZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCBjZG5zX2RzaV9p bnB1dCAqaW5wdXQgPSBicmlkZ2VfdG9fY2Ruc19kc2lfaW5wdXQoYnJpZGdlKTsKKwlzdHJ1Y3Qg Y2Ruc19kc2kgKmRzaSA9IGlucHV0X3RvX2RzaShpbnB1dCk7CisJdTMyIHZhbDsKKworCXZhbCA9 IHJlYWRsKGRzaS0+cmVncyArIE1DVExfTUFJTl9EQVRBX0NUTCk7CisJdmFsICY9IH4oSUZfVklE X1NFTEVDVF9NQVNLIHwgSUZfVklEX01PREUgfCBWSURfRU4gfCBIT1NUX0VPVF9HRU4gfAorCQkg RElTUF9FT1RfR0VOKTsKKwl3cml0ZWwodmFsLCBkc2ktPnJlZ3MgKyBNQ1RMX01BSU5fREFUQV9D VEwpOworCisJdmFsID0gcmVhZGwoZHNpLT5yZWdzICsgTUNUTF9NQUlOX0VOKSAmIH5JRl9FTihp bnB1dC0+aWQpOworCXdyaXRlbCh2YWwsIGRzaS0+cmVncyArIE1DVExfTUFJTl9FTik7CisJcG1f cnVudGltZV9wdXQoZHNpLT5iYXNlLmRldik7Cit9CisKK3N0YXRpYyB2b2lkIGNkbnNfZHNpX2hz X2luaXQoc3RydWN0IGNkbnNfZHNpICpkc2ksCisJCQkgICAgIGNvbnN0IHN0cnVjdCBjZG5zX2Rw aHlfY2ZnICpkcGh5X2NmZykKK3sKKwl1MzIgc3RhdHVzOworCisJLyoKKwkgKiBQb3dlciBhbGwg aW50ZXJuYWwgRFBIWSBibG9ja3MgZG93biBhbmQgbWFpbnRhaW4gdGhlaXIgcmVzZXQgbGluZQor CSAqIGFzc2VydGVkIGJlZm9yZSBjaGFuZ2luZyB0aGUgRFBIWSBjb25maWcuCisJICovCisJd3Jp dGVsKERQSFlfQ01OX1BTTyB8IERQSFlfUExMX1BTTyB8IERQSFlfQUxMX0RfUEROIHwgRFBIWV9D X1BETiB8CisJICAgICAgIERQSFlfQ01OX1BETiB8IERQSFlfUExMX1BETiwKKwkgICAgICAgZHNp LT5yZWdzICsgTUNUTF9EUEhZX0NGRzApOworCisJLyoKKwkgKiBDb25maWd1cmUgdGhlIGludGVy bmFsIFBTTSBjbGsgZGl2aWRlciBzbyB0aGF0IHRoZSBEUEhZIGhhcyBhCisJICogMU1IeiBjbGsg KG9yIHNvbWV0aGluZyBjbG9zZSkuCisJICovCisJV0FSTl9PTl9PTkNFKGNkbnNfZHBoeV9zZXR1 cF9wc20oZHNpLT5kcGh5KSk7CisKKwkvKgorCSAqIENvbmZpZ3VyZSBhdHRhY2ggY2xrIGxhbmVz IHRvIGRhdGEgbGFuZXM6IHRoZSBEUEhZIGhhcyAyIGNsayBsYW5lcworCSAqIGFuZCA4IGRhdGEg bGFuZXMsIGVhY2ggY2xrIGxhbmUgY2FuIGJlIGF0dGFjaGUgZGlmZmVyZW50IHNldCBvZgorCSAq IGRhdGEgbGFuZXMuIFRoZSAyIGdyb3VwcyBhcmUgbmFtZWQgJ2xlZnQnIGFuZCAncmlnaHQnLCBz byBoZXJlIHdlCisJICoganVzdCBzYXkgdGhhdCB3ZSB3YW50IHRoZSAnbGVmdCcgY2xrIGxhbmUg dG8gZHJpdmUgdGhlICdsZWZ0JyBkYXRhCisJICogbGFuZXMuCisJICovCisJY2Ruc19kcGh5X3Nl dF9jbGtfbGFuZV9jZmcoZHNpLT5kcGh5LCBEUEhZX0NMS19DRkdfTEVGVF9EUklWRVNfTEVGVCk7 CisKKwkvKgorCSAqIENvbmZpZ3VyZSB0aGUgRFBIWSBQTEwgdGhhdCB3aWxsIGJlIHVzZWQgdG8g Z2VuZXJhdGUgdGhlIFRYIGJ5dGUKKwkgKiBjbGsuCisJICovCisJY2Ruc19kcGh5X3NldF9wbGxf Y2ZnKGRzaS0+ZHBoeSwgZHBoeV9jZmcpOworCisJLyogU3RhcnQgVFggc3RhdGUgbWFjaGluZS4g Ki8KKwl3cml0ZWwoRFBIWV9DTU5fU1NNX0VOIHwgRFBIWV9DTU5fVFhfTU9ERV9FTiwKKwkgICAg ICAgZHNpLT5kcGh5LT5yZWdzICsgRFBIWV9DTU5fU1NNKTsKKworCS8qIEFjdGl2YXRlIHRoZSBQ TEwgYW5kIHdhaXQgdW50aWwgaXQncyBsb2NrZWQuICovCisJd3JpdGVsKFBMTF9MT0NLRUQsIGRz aS0+cmVncyArIE1DVExfTUFJTl9TVFNfQ0xSKTsKKwl3cml0ZWwoRFBIWV9DTU5fUFNPIHwgRFBI WV9BTExfRF9QRE4gfCBEUEhZX0NfUEROIHwgRFBIWV9DTU5fUEROLAorCSAgICAgICBkc2ktPnJl Z3MgKyBNQ1RMX0RQSFlfQ0ZHMCk7CisJV0FSTl9PTl9PTkNFKHJlYWRsX3BvbGxfdGltZW91dChk c2ktPnJlZ3MgKyBNQ1RMX01BSU5fU1RTLCBzdGF0dXMsCisJCQkJCXN0YXR1cyAmIFBMTF9MT0NL RUQsIDEwMCwgMTAwKSk7CisJLyogRGUtYXNzZXJ0IGRhdGEgYW5kIGNsb2NrIHJlc2V0IGxpbmVz LiAqLworCXdyaXRlbChEUEhZX0NNTl9QU08gfCBEUEhZX0FMTF9EX1BETiB8IERQSFlfQ19QRE4g fCBEUEhZX0NNTl9QRE4gfAorCSAgICAgICBEUEhZX0RfUlNUQihkcGh5X2NmZy0+bmxhbmVzKSB8 IERQSFlfQ19SU1RCLAorCSAgICAgICBkc2ktPnJlZ3MgKyBNQ1RMX0RQSFlfQ0ZHMCk7Cit9CisK K3N0YXRpYyB2b2lkIGNkbnNfZHNpX2luaXRfbGluayhzdHJ1Y3QgY2Ruc19kc2kgKmRzaSkKK3sK KwlzdHJ1Y3QgY2Ruc19kc2lfb3V0cHV0ICpvdXRwdXQgPSAmZHNpLT5vdXRwdXQ7CisJdW5zaWdu ZWQgbG9uZyBzeXNjbGtfcGVyaW9kLCB1bHBvdXQ7CisJdTMyIHZhbDsKKwlpbnQgaTsKKworCWlm IChkc2ktPmxpbmtfaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKworCXZhbCA9IDA7CisJZm9yIChp ID0gMTsgaSA8IG91dHB1dC0+ZGV2LT5sYW5lczsgaSsrKQorCQl2YWwgfD0gREFUQV9MQU5FX0VO KGkpOworCisJaWYgKCEob3V0cHV0LT5kZXYtPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9DTE9DS19O T05fQ09OVElOVU9VUykpCisJCXZhbCB8PSBDTEtfQ09OVElOVU9VUzsKKworCXdyaXRlbCh2YWws IGRzaS0+cmVncyArIE1DVExfTUFJTl9QSFlfQ1RMKTsKKworCS8qIFVMUE9VVCBzaG91bGQgYmUg c2V0IHRvIDFtcyBhbmQgaXMgZXhwcmVzc2VkIGluIHN5c2NsayBjeWNsZXMuICovCisJc3lzY2xr X3BlcmlvZCA9IE5TRUNfUEVSX1NFQyAvIGNsa19nZXRfcmF0ZShkc2ktPmRzaV9zeXNfY2xrKTsK Kwl1bHBvdXQgPSBESVZfUk9VTkRfVVAoTlNFQ19QRVJfTVNFQywgc3lzY2xrX3BlcmlvZCk7CisJ d3JpdGVsKENMS19MQU5FX1VMUE9VVF9USU1FKHVscG91dCkgfCBEQVRBX0xBTkVfVUxQT1VUX1RJ TUUodWxwb3V0KSwKKwkgICAgICAgZHNpLT5yZWdzICsgTUNUTF9VTFBPVVRfVElNRSk7CisKKwl3 cml0ZWwoTElOS19FTiwgZHNpLT5yZWdzICsgTUNUTF9NQUlOX0RBVEFfQ1RMKTsKKworCXZhbCA9 IENMS19MQU5FX0VOIHwgUExMX1NUQVJUOworCWZvciAoaSA9IDA7IGkgPCBvdXRwdXQtPmRldi0+ bGFuZXM7IGkrKykKKwkJdmFsIHw9IERBVEFfTEFORV9TVEFSVChpKTsKKworCXdyaXRlbCh2YWws IGRzaS0+cmVncyArIE1DVExfTUFJTl9FTik7CisKKwlkc2ktPmxpbmtfaW5pdGlhbGl6ZWQgPSB0 cnVlOworfQorCitzdGF0aWMgdm9pZCBjZG5zX2RzaV9icmlkZ2VfZW5hYmxlKHN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0IGNkbnNfZHNpX2lucHV0ICppbnB1dCA9IGJyaWRn ZV90b19jZG5zX2RzaV9pbnB1dChicmlkZ2UpOworCXN0cnVjdCBjZG5zX2RzaSAqZHNpID0gaW5w dXRfdG9fZHNpKGlucHV0KTsKKwlzdHJ1Y3QgY2Ruc19kc2lfb3V0cHV0ICpvdXRwdXQgPSAmZHNp LT5vdXRwdXQ7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisJc3RydWN0IGNkbnNf ZHBoeV9jZmcgZHBoeV9jZmc7CisJdW5zaWduZWQgbG9uZyB0eF9ieXRlX3BlcmlvZDsKKwlzdHJ1 Y3QgY2Ruc19kc2lfY2ZnIGRzaV9jZmc7CisJdTMyIHRtcCwgcmVnX3dha2V1cCwgZGl2OworCWlu dCBicHAsIG5sYW5lczsKKworCWlmIChXQVJOX09OKHBtX3J1bnRpbWVfZ2V0X3N5bmMoZHNpLT5i YXNlLmRldikgPCAwKSkKKwkJcmV0dXJuOworCisJbW9kZSA9ICZicmlkZ2UtPmVuY29kZXItPmNy dGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlOworCWJwcCA9IG1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90 b19icHAob3V0cHV0LT5kZXYtPmZvcm1hdCk7CisJbmxhbmVzID0gb3V0cHV0LT5kZXYtPmxhbmVz OworCisJV0FSTl9PTl9PTkNFKGNkbnNfZHNpX21vZGUyY2ZnKGRzaSwgbW9kZSwgJmRzaV9jZmcs ICZkcGh5X2NmZywgZmFsc2UpKTsKKworCWNkbnNfZHNpX2hzX2luaXQoZHNpLCAmZHBoeV9jZmcp OworCWNkbnNfZHNpX2luaXRfbGluayhkc2kpOworCisJd3JpdGVsKEhCUF9MRU4oZHNpX2NmZy5o YnApIHwgSFNBX0xFTihkc2lfY2ZnLmhzYSksCisJICAgICAgIGRzaS0+cmVncyArIFZJRF9IU0la RTEpOworCXdyaXRlbChIRlBfTEVOKGRzaV9jZmcuaGZwKSB8IEhBQ1RfTEVOKGRzaV9jZmcuaGFj dCksCisJICAgICAgIGRzaS0+cmVncyArIFZJRF9IU0laRTIpOworCisJd3JpdGVsKFZCUF9MRU4o bW9kZS0+Y3J0Y192dG90YWwgLSBtb2RlLT5jcnRjX3ZzeW5jX2VuZCAtIDEpIHwKKwkgICAgICAg VkZQX0xFTihtb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0IC0gbW9kZS0+Y3J0Y192ZGlzcGxheSkgfAor CSAgICAgICBWU0FfTEVOKG1vZGUtPmNydGNfdnN5bmNfZW5kIC0gbW9kZS0+Y3J0Y192c3luY19z dGFydCArIDEpLAorCSAgICAgICBkc2ktPnJlZ3MgKyBWSURfVlNJWkUxKTsKKwl3cml0ZWwobW9k ZS0+Y3J0Y192ZGlzcGxheSwgZHNpLT5yZWdzICsgVklEX1ZTSVpFMik7CisKKwl0bXAgPSBkc2lf Y2ZnLmh0b3RhbCAtCisJICAgICAgKGRzaV9jZmcuaHNhICsgRFNJX0JMQU5LSU5HX0ZSQU1FX09W RVJIRUFEICsKKwkgICAgICAgRFNJX0hTQV9GUkFNRV9PVkVSSEVBRCk7CisJd3JpdGVsKEJMS19M SU5FX1BVTFNFX1BLVF9MRU4odG1wKSwgZHNpLT5yZWdzICsgVklEX0JMS1NJWkUyKTsKKwlpZiAo b3V0cHV0LT5kZXYtPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0Up CisJCXdyaXRlbChNQVhfTElORV9MSU1JVCh0bXAgLSBEU0lfTlVMTF9GUkFNRV9PVkVSSEVBRCks CisJCSAgICAgICBkc2ktPnJlZ3MgKyBWSURfVkNBX1NFVFRJTkcyKTsKKworCXRtcCA9IGRzaV9j ZmcuaHRvdGFsIC0KKwkgICAgICAoRFNJX0hTU19WU1NfVlNFX0ZSQU1FX09WRVJIRUFEICsgRFNJ X0JMQU5LSU5HX0ZSQU1FX09WRVJIRUFEKTsKKwl3cml0ZWwoQkxLX0xJTkVfRVZFTlRfUEtUX0xF Tih0bXApLCBkc2ktPnJlZ3MgKyBWSURfQkxLU0laRTEpOworCWlmICghKG91dHB1dC0+ZGV2LT5t b2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFKSkKKwkJd3JpdGVsKE1B WF9MSU5FX0xJTUlUKHRtcCAtIERTSV9OVUxMX0ZSQU1FX09WRVJIRUFEKSwKKwkJICAgICAgIGRz aS0+cmVncyArIFZJRF9WQ0FfU0VUVElORzIpOworCisJdG1wID0gRElWX1JPVU5EX1VQKGRzaV9j ZmcuaHRvdGFsLCBubGFuZXMpIC0KKwkgICAgICBESVZfUk9VTkRfVVAoZHNpX2NmZy5oc2EsIG5s YW5lcyk7CisKKwlpZiAoIShvdXRwdXQtPmRldi0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVf RU9UX1BBQ0tFVCkpCisJCXRtcCAtPSBESVZfUk9VTkRfVVAoRFNJX0VPVF9QS1RfU0laRSwgbmxh bmVzKTsKKworCXR4X2J5dGVfcGVyaW9kID0gRElWX1JPVU5EX0RPV05fVUxMKCh1NjQpTlNFQ19Q RVJfU0VDICogOCwKKwkJCQkJICAgIGRwaHlfY2ZnLmxhbmVfYnBzKTsKKwlyZWdfd2FrZXVwID0g Y2Ruc19kcGh5X2dldF93YWtldXBfdGltZV9ucyhkc2ktPmRwaHkpIC8KKwkJICAgICB0eF9ieXRl X3BlcmlvZDsKKwl3cml0ZWwoUkVHX1dBS0VVUF9USU1FKHJlZ193YWtldXApIHwgUkVHX0xJTkVf RFVSQVRJT04odG1wKSwKKwkgICAgICAgZHNpLT5yZWdzICsgVklEX0RQSFlfVElNRSk7CisKKwkv KgorCSAqIEhTVFggYW5kIExQUlggdGltZW91dHMgYXJlIGJvdGggZXhwcmVzc2VkIGluIFRYIGJ5 dGUgY2xrIGN5Y2xlcyBhbmQKKwkgKiBib3RoIHNob3VsZCBiZSBzZXQgdG8gYXQgbGVhc3QgdGhl IHRpbWUgaXQgdGFrZXMgdG8gdHJhbnNtaXQgYQorCSAqIGZyYW1lLgorCSAqLworCXRtcCA9IE5T RUNfUEVSX1NFQyAvIGRybV9tb2RlX3ZyZWZyZXNoKG1vZGUpOworCXRtcCAvPSB0eF9ieXRlX3Bl cmlvZDsKKworCWZvciAoZGl2ID0gMDsgZGl2IDw9IENMS19ESVZfTUFYOyBkaXYrKykgeworCQlp ZiAodG1wIDw9IEhTVFhfVElNRU9VVF9NQVgpCisJCQlicmVhazsKKworCQl0bXAgPj49IDE7CisJ fQorCisJaWYgKHRtcCA+IEhTVFhfVElNRU9VVF9NQVgpCisJCXRtcCA9IEhTVFhfVElNRU9VVF9N QVg7CisKKwl3cml0ZWwoQ0xLX0RJVihkaXYpIHwgSFNUWF9USU1FT1VUKHRtcCksCisJICAgICAg IGRzaS0+cmVncyArIE1DVExfRFBIWV9USU1FT1VUMSk7CisKKwl3cml0ZWwoTFBSWF9USU1FT1VU KHRtcCksIGRzaS0+cmVncyArIE1DVExfRFBIWV9USU1FT1VUMik7CisKKwlpZiAob3V0cHV0LT5k ZXYtPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPKSB7CisJCXN3aXRjaCAob3V0cHV0 LT5kZXYtPmZvcm1hdCkgeworCQljYXNlIE1JUElfRFNJX0ZNVF9SR0I4ODg6CisJCQl0bXAgPSBW SURfUElYRUxfTU9ERV9SR0I4ODggfAorCQkJICAgICAgVklEX0RBVEFUWVBFKE1JUElfRFNJX1BB Q0tFRF9QSVhFTF9TVFJFQU1fMjQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBNSVBJX0RTSV9GTVRf UkdCNjY2OgorCQkJdG1wID0gVklEX1BJWEVMX01PREVfUkdCNjY2IHwKKwkJCSAgICAgIFZJRF9E QVRBVFlQRShNSVBJX0RTSV9QSVhFTF9TVFJFQU1fM0JZVEVfMTgpOworCQkJYnJlYWs7CisKKwkJ Y2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2X1BBQ0tFRDoKKwkJCXRtcCA9IFZJRF9QSVhFTF9NT0RF X1JHQjY2Nl9QQUNLRUQgfAorCQkJICAgICAgVklEX0RBVEFUWVBFKE1JUElfRFNJX1BBQ0tFRF9Q SVhFTF9TVFJFQU1fMTgpOworCQkJYnJlYWs7CisKKwkJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNTY1 OgorCQkJdG1wID0gVklEX1BJWEVMX01PREVfUkdCNTY1IHwKKwkJCSAgICAgIFZJRF9EQVRBVFlQ RShNSVBJX0RTSV9QQUNLRURfUElYRUxfU1RSRUFNXzE2KTsKKwkJCWJyZWFrOworCisJCWRlZmF1 bHQ6CisJCQlkZXZfZXJyKGRzaS0+YmFzZS5kZXYsICJVbnN1cHBvcnRlZCBEU0kgZm9ybWF0XG4i KTsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmIChvdXRwdXQtPmRldi0+bW9kZV9mbGFncyAmIE1J UElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRSkKKwkJCXRtcCB8PSBTWU5DX1BVTFNFX0FDVElW RSB8IFNZTkNfUFVMU0VfSE9SSVpPTlRBTDsKKworCQl0bXAgfD0gUkVHX0JMS0xJTkVfTU9ERShS RUdfQkxLX01PREVfQkxBTktJTkdfUEtUKSB8CisJCSAgICAgICBSRUdfQkxLRU9MX01PREUoUkVH X0JMS19NT0RFX0JMQU5LSU5HX1BLVCkgfAorCQkgICAgICAgUkVDT1ZFUllfTU9ERShSRUNPVkVS WV9NT0RFX05FWFRfSFNZTkMpIHwKKwkJICAgICAgIFZJRF9JR05PUkVfTUlTU19WU1lOQzsKKwor CQl3cml0ZWwodG1wLCBkc2ktPnJlZ3MgKyBWSURfTUFJTl9DVEwpOworCX0KKworCXRtcCA9IHJl YWRsKGRzaS0+cmVncyArIE1DVExfTUFJTl9EQVRBX0NUTCk7CisJdG1wICY9IH4oSUZfVklEX1NF TEVDVF9NQVNLIHwgSE9TVF9FT1RfR0VOIHwgSUZfVklEX01PREUpOworCisJaWYgKCEob3V0cHV0 LT5kZXYtPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX0VPVF9QQUNLRVQpKQorCQl0bXAgfD0g SE9TVF9FT1RfR0VOOworCisJaWYgKG91dHB1dC0+ZGV2LT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lf TU9ERV9WSURFTykKKwkJdG1wIHw9IElGX1ZJRF9NT0RFIHwgSUZfVklEX1NFTEVDVChpbnB1dC0+ aWQpIHwgVklEX0VOOworCisJd3JpdGVsKHRtcCwgZHNpLT5yZWdzICsgTUNUTF9NQUlOX0RBVEFf Q1RMKTsKKworCXRtcCA9IHJlYWRsKGRzaS0+cmVncyArIE1DVExfTUFJTl9FTikgfCBJRl9FTihp bnB1dC0+aWQpOworCXdyaXRlbCh0bXAsIGRzaS0+cmVncyArIE1DVExfTUFJTl9FTik7Cit9CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyBjZG5zX2RzaV9icmlkZ2VfZnVu Y3MgPSB7CisJLmF0dGFjaCA9IGNkbnNfZHNpX2JyaWRnZV9hdHRhY2gsCisJLm1vZGVfdmFsaWQg PSBjZG5zX2RzaV9icmlkZ2VfbW9kZV92YWxpZCwKKwkuZGlzYWJsZSA9IGNkbnNfZHNpX2JyaWRn ZV9kaXNhYmxlLAorCS5lbmFibGUgPSBjZG5zX2RzaV9icmlkZ2VfZW5hYmxlLAorfTsKKworc3Rh dGljIGludCBjZG5zX2RzaV9hdHRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCisJCQkg ICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGNkbnNfZHNpICpkc2kg PSB0b19jZG5zX2RzaShob3N0KTsKKwlzdHJ1Y3QgY2Ruc19kc2lfb3V0cHV0ICpvdXRwdXQgPSAm ZHNpLT5vdXRwdXQ7CisJc3RydWN0IGNkbnNfZHNpX2lucHV0ICppbnB1dCA9ICZkc2ktPmlucHV0 OworCXN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2U7CisJc3RydWN0IGRybV9wYW5lbCAqcGFuZWw7 CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBXZSBjdXJy ZW50bHkgZG8gbm90IHN1cHBvcnQgY29ubmVjdGluZyBzZXZlcmFsIERTSSBkZXZpY2VzIHRvIHRo ZQorCSAqIHNhbWUgaG9zdC4gSW4gb3JkZXIgdG8gc3VwcG9ydCB0aGF0IHdlJ2QgbmVlZCB0aGUg RFJNIGJyaWRnZQorCSAqIGZyYW1ld29yayB0byBhbGxvdyBkeW5hbWljIHJlY29uZmlndXJhdGlv biBvZiB0aGUgYnJpZGdlIGNoYWluLgorCSAqLworCWlmIChvdXRwdXQtPmRldikKKwkJcmV0dXJu IC1FQlVTWTsKKworCS8qIFdlIGRvIG5vdCBzdXBwb3J0IGJ1cnN0IG1vZGUgeWV0LiAqLworCWlm IChkZXYtPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX0JVUlNUKQorCQlyZXR1cm4g LUVOT1RTVVBQOworCisJLyoKKwkgKiBUaGUgaG9zdCA8LT4gZGV2aWNlIGxpbmsgbWlnaHQgYmUg ZGVzY3JpYmVkIHVzaW5nIGFuIE9GLWdyYXBoCisJICogcmVwcmVzZW50YXRpb24sIGluIHRoaXMg Y2FzZSB3ZSBleHRyYWN0IHRoZSBkZXZpY2Ugb2Zfbm9kZSBmcm9tCisJICogdGhpcyByZXByZXNl bnRhdGlvbiwgb3RoZXJ3aXNlIHdlIHVzZSBkc2lkZXYtPmRldi5vZl9ub2RlIHdoaWNoCisJICog c2hvdWxkIGhhdmUgYmVlbiBmaWxsZWQgYnkgdGhlIGNvcmUuCisJICovCisJbnAgPSBvZl9ncmFw aF9nZXRfcmVtb3RlX25vZGUoZHNpLT5iYXNlLmRldi0+b2Zfbm9kZSwgRFNJX09VVFBVVF9QT1JU LAorCQkJCSAgICAgIGRldi0+Y2hhbm5lbCk7CisJaWYgKCFucCkKKwkJbnAgPSBvZl9ub2RlX2dl dChkZXYtPmRldi5vZl9ub2RlKTsKKworCXBhbmVsID0gb2ZfZHJtX2ZpbmRfcGFuZWwobnApOwor CWlmIChwYW5lbCkgeworCQlicmlkZ2UgPSBkcm1fcGFuZWxfYnJpZGdlX2FkZChwYW5lbCwgRFJN X01PREVfQ09OTkVDVE9SX0RTSSk7CisJfSBlbHNlIHsKKwkJYnJpZGdlID0gb2ZfZHJtX2ZpbmRf YnJpZGdlKGRldi0+ZGV2Lm9mX25vZGUpOworCQlpZiAoIWJyaWRnZSkKKwkJCWJyaWRnZSA9IEVS Ul9QVFIoLUVJTlZBTCk7CisJfQorCisJb2Zfbm9kZV9wdXQobnApOworCisJaWYgKElTX0VSUihi cmlkZ2UpKSB7CisJCXJldCA9IFBUUl9FUlIoYnJpZGdlKTsKKwkJZGV2X2Vycihob3N0LT5kZXYs ICJmYWlsZWQgdG8gYWRkIERTSSBkZXZpY2UgJXMgKGVyciA9ICVkKSIsCisJCQlkZXYtPm5hbWUs IHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJb3V0cHV0LT5kZXYgPSBkZXY7CisJb3V0cHV0 LT5icmlkZ2UgPSBicmlkZ2U7CisJb3V0cHV0LT5wYW5lbCA9IHBhbmVsOworCisJLyoKKwkgKiBU aGUgRFNJIG91dHB1dCBoYXMgYmVlbiBwcm9wZXJseSBjb25maWd1cmVkLCB3ZSBjYW4gbm93IHNh ZmVseQorCSAqIHJlZ2lzdGVyIHRoZSBpbnB1dCB0byB0aGUgYnJpZGdlIGZyYW1ld29yayBzbyB0 aGF0IGl0IGNhbiB0YWtlIHBsYWNlCisJICogaW4gYSBkaXNwbGF5IHBpcGVsaW5lLgorCSAqLwor CWRybV9icmlkZ2VfYWRkKCZpbnB1dC0+YnJpZGdlKTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGNkbnNfZHNpX2RldGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCSAg IHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2Ruc19kc2kgKmRzaSA9 IHRvX2NkbnNfZHNpKGhvc3QpOworCXN0cnVjdCBjZG5zX2RzaV9vdXRwdXQgKm91dHB1dCA9ICZk c2ktPm91dHB1dDsKKwlzdHJ1Y3QgY2Ruc19kc2lfaW5wdXQgKmlucHV0ID0gJmRzaS0+aW5wdXQ7 CisKKwlkcm1fYnJpZGdlX3JlbW92ZSgmaW5wdXQtPmJyaWRnZSk7CisJaWYgKG91dHB1dC0+cGFu ZWwpCisJCWRybV9wYW5lbF9icmlkZ2VfcmVtb3ZlKG91dHB1dC0+YnJpZGdlKTsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgY2Ruc19kc2lfaW50ZXJydXB0KGludCBpcnEs IHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNkbnNfZHNpICpkc2kgPSBkYXRhOworCWlycXJldHVy bl90IHJldCA9IElSUV9OT05FOworCXUzMiBmbGFnLCBjdGw7CisKKwlmbGFnID0gcmVhZGwoZHNp LT5yZWdzICsgRElSRUNUX0NNRF9TVFNfRkxBRyk7CisJaWYgKGZsYWcpIHsKKwkJY3RsID0gcmVh ZGwoZHNpLT5yZWdzICsgRElSRUNUX0NNRF9TVFNfQ1RMKTsKKwkJY3RsICY9IH5mbGFnOworCQl3 cml0ZWwoY3RsLCBkc2ktPnJlZ3MgKyBESVJFQ1RfQ01EX1NUU19DVEwpOworCQljb21wbGV0ZSgm ZHNpLT5kaXJlY3RfY21kX2NvbXApOworCQlyZXQgPSBJUlFfSEFORExFRDsKKwl9CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBjZG5zX2RzaV90cmFuc2ZlcihzdHJ1Y3QgbWlw aV9kc2lfaG9zdCAqaG9zdCwKKwkJCQkgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQor eworCXN0cnVjdCBjZG5zX2RzaSAqZHNpID0gdG9fY2Ruc19kc2koaG9zdCk7CisJdTMyIGNtZCwg c3RzLCB2YWwsIHdhaXQgPSBXUklURV9DT01QTEVURUQsIGN0bCA9IDA7CisJc3RydWN0IG1pcGlf ZHNpX3BhY2tldCBwYWNrZXQ7CisJaW50IHJldCwgaSwgdHhfbGVuLCByeF9sZW47CisKKwlyZXQg PSBwbV9ydW50aW1lX2dldF9zeW5jKGhvc3QtPmRldik7CisJaWYgKHJldCA8IDApCisJCXJldHVy biByZXQ7CisKKwljZG5zX2RzaV9pbml0X2xpbmsoZHNpKTsKKworCXJldCA9IG1pcGlfZHNpX2Ny ZWF0ZV9wYWNrZXQoJnBhY2tldCwgbXNnKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXR4 X2xlbiA9IG1zZy0+dHhfYnVmID8gbXNnLT50eF9sZW4gOiAwOworCXJ4X2xlbiA9IG1zZy0+cnhf YnVmID8gbXNnLT5yeF9sZW4gOiAwOworCisJLyogRm9yIHJlYWQgb3BlcmF0aW9ucywgdGhlIG1h eGltdW0gVFggbGVuIGlzIDIuICovCisJaWYgKHJ4X2xlbiAmJiB0eF9sZW4gPiAyKSB7CisJCXJl dCA9IC1FTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogVFggbGVuIGlzIGxpbWl0ZWQg YnkgdGhlIENNRCBGSUZPIGRlcHRoLiAqLworCWlmICh0eF9sZW4gPiBkc2ktPmRpcmVjdF9jbWRf Zmlmb19kZXB0aCkgeworCQlyZXQgPSAtRU5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCS8q IFJYIGxlbiBpcyBsaW1pdGVkIGJ5IHRoZSBSWCBGSUZPIGRlcHRoLiAqLworCWlmIChyeF9sZW4g PiBkc2ktPnJ4X2ZpZm9fZGVwdGgpIHsKKwkJcmV0ID0gLUVOT1RTVVBQOworCQlnb3RvIG91dDsK Kwl9CisKKwljbWQgPSBDTURfU0laRSh0eF9sZW4pIHwgQ01EX1ZDSEFOX0lEKG1zZy0+Y2hhbm5l bCkgfAorCSAgICAgIENNRF9EQVRBVFlQRShtc2ctPnR5cGUpOworCisJaWYgKG1zZy0+ZmxhZ3Mg JiBNSVBJX0RTSV9NU0dfVVNFX0xQTSkKKwkJY21kIHw9IENNRF9MUF9FTjsKKworCWlmIChtaXBp X2RzaV9wYWNrZXRfZm9ybWF0X2lzX2xvbmcobXNnLT50eXBlKSkKKwkJY21kIHw9IENNRF9MT05H OworCisJaWYgKHJ4X2xlbikgeworCQljbWQgfD0gUkVBRF9DTUQ7CisJCXdhaXQgPSBSRUFEX0NP TVBMRVRFRF9XSVRIX0VSUiB8IFJFQURfQ09NUExFVEVEOworCQljdGwgPSBSRUFEX0VOIHwgQlRB X0VOOworCX0gZWxzZSBpZiAobXNnLT5mbGFncyAmIE1JUElfRFNJX01TR19SRVFfQUNLKSB7CisJ CWNtZCB8PSBCVEFfUkVROworCQl3YWl0ID0gQUNLX1dJVEhfRVJSX1JDVkQgfCBBQ0tfUkNWRDsK KwkJY3RsID0gQlRBX0VOOworCX0KKworCXdyaXRlbChyZWFkbChkc2ktPnJlZ3MgKyBNQ1RMX01B SU5fREFUQV9DVEwpIHwgY3RsLAorCSAgICAgICBkc2ktPnJlZ3MgKyBNQ1RMX01BSU5fREFUQV9D VEwpOworCisJd3JpdGVsKGNtZCwgZHNpLT5yZWdzICsgRElSRUNUX0NNRF9NQUlOX1NFVFRJTkdT KTsKKworCWZvciAoaSA9IDA7IGkgPCB0eF9sZW47IGkgKz0gNCkgeworCQljb25zdCB1OCAqYnVm ID0gbXNnLT50eF9idWY7CisJCWludCBqOworCisJCXZhbCA9IDA7CisJCWZvciAoaiA9IDA7IGog PCA0ICYmIGogKyBpIDwgdHhfbGVuOyBqKyspCisJCQl2YWwgfD0gKHUzMilidWZbaSArIGpdIDw8 ICg4ICogaik7CisKKwkJd3JpdGVsKHZhbCwgZHNpLT5yZWdzICsgRElSRUNUX0NNRF9XUkRBVEEp OworCX0KKworCS8qIENsZWFyIHN0YXR1cyBmbGFncyBiZWZvcmUgc2VuZGluZyB0aGUgY29tbWFu ZC4gKi8KKwl3cml0ZWwod2FpdCwgZHNpLT5yZWdzICsgRElSRUNUX0NNRF9TVFNfQ0xSKTsKKwl3 cml0ZWwod2FpdCwgZHNpLT5yZWdzICsgRElSRUNUX0NNRF9TVFNfQ1RMKTsKKwlyZWluaXRfY29t cGxldGlvbigmZHNpLT5kaXJlY3RfY21kX2NvbXApOworCXdyaXRlbCgwLCBkc2ktPnJlZ3MgKyBE SVJFQ1RfQ01EX1NFTkQpOworCisJd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZkc2ktPmRp cmVjdF9jbWRfY29tcCwKKwkJCQkgICAgbXNlY3NfdG9famlmZmllcygxMDAwKSk7CisKKwlzdHMg PSByZWFkbChkc2ktPnJlZ3MgKyBESVJFQ1RfQ01EX1NUUyk7CisJd3JpdGVsKHdhaXQsIGRzaS0+ cmVncyArIERJUkVDVF9DTURfU1RTX0NMUik7CisJd3JpdGVsKDAsIGRzaS0+cmVncyArIERJUkVD VF9DTURfU1RTX0NUTCk7CisKKwl3cml0ZWwocmVhZGwoZHNpLT5yZWdzICsgTUNUTF9NQUlOX0RB VEFfQ1RMKSAmIH5jdGwsCisJICAgICAgIGRzaS0+cmVncyArIE1DVExfTUFJTl9EQVRBX0NUTCk7 CisKKwkvKiBXZSBkaWQgbm90IHJlY2VpdmUgdGhlIGV2ZW50cyB3ZSB3ZXJlIHdhaXRpbmcgZm9y LiAqLworCWlmICghKHN0cyAmIHdhaXQpKSB7CisJCXJldCA9IC1FVElNRURPVVQ7CisJCWdvdG8g b3V0OworCX0KKworCS8qICdSRUFEJyBvciAnV1JJVEUgd2l0aCBBQ0snIGZhaWxlZC4gKi8KKwlp ZiAoc3RzICYgKFJFQURfQ09NUExFVEVEX1dJVEhfRVJSIHwgQUNLX1dJVEhfRVJSX1JDVkQpKSB7 CisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCByeF9s ZW47IGkgKz0gNCkgeworCQl1OCAqYnVmID0gbXNnLT5yeF9idWY7CisJCWludCBqOworCisJCXZh bCA9IHJlYWRsKGRzaS0+cmVncyArIERJUkVDVF9DTURfUkREQVRBKTsKKwkJZm9yIChqID0gMDsg aiA8IDQgJiYgaiArIGkgPCByeF9sZW47IGorKykKKwkJCWJ1ZltpICsgal0gPSB2YWwgPj4gKDgg KiBqKTsKKwl9CisKK291dDoKKwlwbV9ydW50aW1lX3B1dChob3N0LT5kZXYpOworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfaG9zdF9vcHMgY2Ruc19kc2lf b3BzID0geworCS5hdHRhY2ggPSBjZG5zX2RzaV9hdHRhY2gsCisJLmRldGFjaCA9IGNkbnNfZHNp X2RldGFjaCwKKwkudHJhbnNmZXIgPSBjZG5zX2RzaV90cmFuc2ZlciwKK307CisKK3N0YXRpYyBp bnQgY2Ruc19kc2lfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2Ruc19k c2kgKmRzaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmVzZXRfY29udHJvbF9kZWFzc2Vy dChkc2ktPmRzaV9wX3JzdCk7CisJY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+ZHNpX3BfY2xrKTsK KwljbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5kc2lfc3lzX2Nsayk7CisJY2xrX3ByZXBhcmVfZW5h YmxlKGRzaS0+ZHBoeS0+cHNtX2Nsayk7CisJY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+ZHBoeS0+ cGxsX3JlZl9jbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2Ruc19kc2lfc3Vz cGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGNkbnNfZHNpICpkc2kgPSBkZXZf Z2V0X2RydmRhdGEoZGV2KTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmRwaHktPnBs bF9yZWZfY2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5kcGh5LT5wc21fY2xrKTsK KwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5kc2lfc3lzX2Nsayk7CisJY2xrX2Rpc2FibGVf dW5wcmVwYXJlKGRzaS0+ZHNpX3BfY2xrKTsKKwlyZXNldF9jb250cm9sX2Fzc2VydChkc2ktPmRz aV9wX3JzdCk7CisJZHNpLT5saW5rX2luaXRpYWxpemVkID0gZmFsc2U7CisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBVTklWRVJTQUxfREVWX1BNX09QUyhjZG5zX2RzaV9wbV9vcHMsIGNkbnNfZHNp X3N1c3BlbmQsIGNkbnNfZHNpX3Jlc3VtZSwKKwkJCSAgICBOVUxMKTsKKworc3RhdGljIHVuc2ln bmVkIGxvbmcgY2Ruc19kcGh5X3JlZl9nZXRfd2FrZXVwX3RpbWVfbnMoc3RydWN0IGNkbnNfZHBo eSAqZHBoeSkKK3sKKwkvKiBEZWZhdWx0IHdha2V1cCB0aW1lIGlzIDgwMCBucyAoaW4gYSBzaW11 bGF0ZWQgZW52aXJvbm1lbnQpLiAqLworCXJldHVybiA4MDA7Cit9CisKK3N0YXRpYyB2b2lkIGNk bnNfZHBoeV9yZWZfc2V0X3BsbF9jZmcoc3RydWN0IGNkbnNfZHBoeSAqZHBoeSwKKwkJCQkgICAg ICBjb25zdCBzdHJ1Y3QgY2Ruc19kcGh5X2NmZyAqY2ZnKQoreworCXUzMiBmYmRpdl9sb3csIGZi ZGl2X2hpZ2g7CisKKwlmYmRpdl9sb3cgPSAoY2ZnLT5wbGxfZmJkaXYgLyA0KSAtIDI7CisJZmJk aXZfaGlnaCA9IGNmZy0+cGxsX2ZiZGl2IC0gZmJkaXZfbG93IC0gMjsKKworCXdyaXRlbChEUEhZ X0NNTl9JUERJVl9GUk9NX1JFRyB8IERQSFlfQ01OX09QRElWX0ZST01fUkVHIHwKKwkgICAgICAg RFBIWV9DTU5fSVBESVYoY2ZnLT5wbGxfaXBkaXYpIHwKKwkgICAgICAgRFBIWV9DTU5fT1BESVYo Y2ZnLT5wbGxfb3BkaXYpLAorCSAgICAgICBkcGh5LT5yZWdzICsgRFBIWV9DTU5fT1BJUERJVik7 CisJd3JpdGVsKERQSFlfQ01OX0ZCRElWX0ZST01fUkVHIHwKKwkgICAgICAgRFBIWV9DTU5fRkJE SVZfVkFMKGZiZGl2X2xvdywgZmJkaXZfaGlnaCksCisJICAgICAgIGRwaHktPnJlZ3MgKyBEUEhZ X0NNTl9GQkRJVik7CisJd3JpdGVsKERQSFlfQ01OX1BXTV9ISUdIKDYpIHwgRFBIWV9DTU5fUFdN X0xPVygweDEwMSkgfAorCSAgICAgICBEUEhZX0NNTl9QV01fRElWKDB4OCksCisJICAgICAgIGRw aHktPnJlZ3MgKyBEUEhZX0NNTl9QV00pOworfQorCitzdGF0aWMgdm9pZCBjZG5zX2RwaHlfcmVm X3NldF9wc21fZGl2KHN0cnVjdCBjZG5zX2RwaHkgKmRwaHksIHU4IGRpdikKK3sKKwl3cml0ZWwo RFBIWV9QU01fQ0ZHX0ZST01fUkVHIHwgRFBIWV9QU01fQ0xLX0RJVihkaXYpLAorCSAgICAgICBk cGh5LT5yZWdzICsgRFBIWV9QU01fQ0ZHKTsKK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIHJlZmVy ZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiBEUEhZIGhvb2tzLiBTcGVjaWZpYyBpbnRlZ3JhdGlvbiBv ZgorICogdGhpcyBJUCBtYXkgaGF2ZSB0byByZS1pbXBsZW1lbnQgc29tZSBvZiB0aGVtIGRlcGVu ZGluZyBvbiBob3cgdGhleSBkZWNpZGVkCisgKiB0byB3aXJlIHRoaW5ncyBpbiB0aGUgU29DLgor ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNkbnNfZHBoeV9vcHMgcmVmX2RwaHlfb3BzID0gewor CS5nZXRfd2FrZXVwX3RpbWVfbnMgPSBjZG5zX2RwaHlfcmVmX2dldF93YWtldXBfdGltZV9ucywK Kwkuc2V0X3BsbF9jZmcgPSBjZG5zX2RwaHlfcmVmX3NldF9wbGxfY2ZnLAorCS5zZXRfcHNtX2Rp diA9IGNkbnNfZHBoeV9yZWZfc2V0X3BzbV9kaXYsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0 IG9mX2RldmljZV9pZCBjZG5zX2RwaHlfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0g ImNkbnMsZHBoeSIsIC5kYXRhID0gJnJlZl9kcGh5X29wcyB9LAorCXsgLyogc2VudGluZWwgKi8g fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2Ruc19kcGh5ICpjZG5zX2RwaHlfcHJvYmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpt YXRjaDsKKwlzdHJ1Y3QgY2Ruc19kcGh5ICpkcGh5OworCXN0cnVjdCBvZl9waGFuZGxlX2FyZ3Mg YXJnczsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzOworCWludCByZXQ7CisKKwlyZXQgPSBvZl9wYXJz ZV9waGFuZGxlX3dpdGhfYXJncyhwZGV2LT5kZXYub2Zfbm9kZSwgInBoeXMiLAorCQkJCQkgIiNw aHktY2VsbHMiLCAwLCAmYXJncyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VO VCk7CisKKwltYXRjaCA9IG9mX21hdGNoX25vZGUoY2Ruc19kcGh5X29mX21hdGNoLCBhcmdzLm5w KTsKKwlpZiAoIW1hdGNoIHx8ICFtYXRjaC0+ZGF0YSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZB TCk7CisKKwlkcGh5ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqZHBoeSksIEdG UF9LRVJORUwpOworCWlmICghZHBoeSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlk cGh5LT5vcHMgPSBtYXRjaC0+ZGF0YTsKKworCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2Uo YXJncy5ucCwgMCwgJnJlcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwor CWRwaHktPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgJnJlcyk7CisJ aWYgKElTX0VSUihkcGh5LT5yZWdzKSkKKwkJcmV0dXJuIEVSUl9DQVNUKGRwaHktPnJlZ3MpOwor CisJZHBoeS0+cHNtX2NsayA9IG9mX2Nsa19nZXRfYnlfbmFtZShhcmdzLm5wLCAicHNtIik7CisJ aWYgKElTX0VSUihkcGh5LT5wc21fY2xrKSkKKwkJcmV0dXJuIEVSUl9DQVNUKGRwaHktPnBzbV9j bGspOworCisJZHBoeS0+cGxsX3JlZl9jbGsgPSBvZl9jbGtfZ2V0X2J5X25hbWUoYXJncy5ucCwg InBsbF9yZWYiKTsKKwlpZiAoSVNfRVJSKGRwaHktPnBsbF9yZWZfY2xrKSkgeworCQlyZXQgPSBQ VFJfRVJSKGRwaHktPnBsbF9yZWZfY2xrKTsKKwkJZ290byBlcnJfcHV0X3BzbV9jbGs7CisJfQor CisJaWYgKGRwaHktPm9wcy0+cHJvYmUpIHsKKwkJcmV0ID0gZHBoeS0+b3BzLT5wcm9iZShkcGh5 KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX3B1dF9wbGxfcmVmX2NsazsKKwl9CisKKwlyZXR1 cm4gZHBoeTsKKworZXJyX3B1dF9wbGxfcmVmX2NsazoKKwljbGtfcHV0KGRwaHktPnBsbF9yZWZf Y2xrKTsKKworZXJyX3B1dF9wc21fY2xrOgorCWNsa19wdXQoZHBoeS0+cHNtX2Nsayk7CisKKwly ZXR1cm4gRVJSX1BUUihyZXQpOworfQorCitzdGF0aWMgdm9pZCBjZG5zX2RwaHlfcmVtb3ZlKHN0 cnVjdCBjZG5zX2RwaHkgKmRwaHkpCit7CisJaWYgKGRwaHktPm9wcy0+cmVtb3ZlKQorCQlkcGh5 LT5vcHMtPnJlbW92ZShkcGh5KTsKKworCWNsa19wdXQoZHBoeS0+cGxsX3JlZl9jbGspOworCWNs a19wdXQoZHBoeS0+cHNtX2Nsayk7Cit9CisKK3N0YXRpYyBpbnQgY2Ruc19kc2lfZHJtX3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGNkbnNfZHNpICpkc2k7 CisJc3RydWN0IGNkbnNfZHNpX2lucHV0ICppbnB1dDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsK KwlpbnQgcmV0LCBpcnE7CisJdTMyIHZhbDsKKworCWRzaSA9IGRldm1fa3phbGxvYygmcGRldi0+ ZGV2LCBzaXplb2YoKmRzaSksIEdGUF9LRVJORUwpOworCWlmICghZHNpKQorCQlyZXR1cm4gLUVO T01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRzaSk7CisKKwlpbnB1dCA9ICZk c2ktPmlucHV0OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VS Q0VfTUVNLCAwKTsKKwlkc2ktPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRl diwgcmVzKTsKKwlpZiAoSVNfRVJSKGRzaS0+cmVncykpCisJCXJldHVybiBQVFJfRVJSKGRzaS0+ cmVncyk7CisKKwlkc2ktPmRzaV9wX2NsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAiZHNp X3BfY2xrIik7CisJaWYgKElTX0VSUihkc2ktPmRzaV9wX2NsaykpCisJCXJldHVybiBQVFJfRVJS KGRzaS0+ZHNpX3BfY2xrKTsKKworCWRzaS0+ZHNpX3BfcnN0ID0gZGV2bV9yZXNldF9jb250cm9s X2dldF9vcHRpb25hbF9leGNsdXNpdmUoJnBkZXYtPmRldiwKKwkJCQkJCQkJImRzaV9wX3JzdCIp OworCWlmIChJU19FUlIoZHNpLT5kc2lfcF9yc3QpKQorCQlyZXR1cm4gUFRSX0VSUihkc2ktPmRz aV9wX3JzdCk7CisKKwlkc2ktPmRzaV9zeXNfY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYs ICJkc2lfc3lzX2NsayIpOworCWlmIChJU19FUlIoZHNpLT5kc2lfc3lzX2NsaykpCisJCXJldHVy biBQVFJfRVJSKGRzaS0+ZHNpX3N5c19jbGspOworCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShw ZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkKKwkJcmV0dXJuIGlycTsKKworCWRzaS0+ZHBoeSA9IGNk bnNfZHBoeV9wcm9iZShwZGV2KTsKKwlpZiAoSVNfRVJSKGRzaS0+ZHBoeSkpCisJCXJldHVybiBQ VFJfRVJSKGRzaS0+ZHBoeSk7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5kc2lf cF9jbGspOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3JlbW92ZV9kcGh5OworCisJdmFsID0gcmVh ZGwoZHNpLT5yZWdzICsgSURfUkVHKTsKKwlpZiAoUkVWX1ZFTkRPUl9JRCh2YWwpICE9IDB4Y2Fk KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgdmVuZG9yIGlkXG4iKTsKKwkJcmV0 ID0gLUVJTlZBTDsKKwkJZ290byBlcnJfZGlzYWJsZV9wY2xrOworCX0KKworCXZhbCA9IHJlYWRs KGRzaS0+cmVncyArIElQX0NPTkYpOworCWRzaS0+ZGlyZWN0X2NtZF9maWZvX2RlcHRoID0gMSA8 PCAoRElSQ01EX0ZJRk9fREVQVEgodmFsKSArIDIpOworCWRzaS0+cnhfZmlmb19kZXB0aCA9IFJY X0ZJRk9fREVQVEgodmFsKTsKKwlpbml0X2NvbXBsZXRpb24oJmRzaS0+ZGlyZWN0X2NtZF9jb21w KTsKKworCXdyaXRlbCgwLCBkc2ktPnJlZ3MgKyBNQ1RMX01BSU5fREFUQV9DVEwpOworCXdyaXRl bCgwLCBkc2ktPnJlZ3MgKyBNQ1RMX01BSU5fRU4pOworCXdyaXRlbCgwLCBkc2ktPnJlZ3MgKyBN Q1RMX01BSU5fUEhZX0NUTCk7CisKKwkvKgorCSAqIFdlIG9ubHkgc3VwcG9ydCB0aGUgRFBJIGlu cHV0LCBzbyBmb3JjZSBpbnB1dC0+aWQgdG8KKwkgKiBDRE5TX0RQSV9JTlBVVC4KKwkgKi8KKwlp bnB1dC0+aWQgPSBDRE5TX0RQSV9JTlBVVDsKKwlpbnB1dC0+YnJpZGdlLmZ1bmNzID0gJmNkbnNf ZHNpX2JyaWRnZV9mdW5jczsKKwlpbnB1dC0+YnJpZGdlLm9mX25vZGUgPSBwZGV2LT5kZXYub2Zf bm9kZTsKKworCS8qIE1hc2sgYWxsIGludGVycnVwdHMgYmVmb3JlIHJlZ2lzdGVyaW5nIHRoZSBJ UlEgaGFuZGxlci4gKi8KKwl3cml0ZWwoMCwgZHNpLT5yZWdzICsgTUNUTF9NQUlOX1NUU19DVEwp OworCXdyaXRlbCgwLCBkc2ktPnJlZ3MgKyBNQ1RMX0RQSFlfRVJSX0NUTDEpOworCXdyaXRlbCgw LCBkc2ktPnJlZ3MgKyBDTURfTU9ERV9TVFNfQ1RMKTsKKwl3cml0ZWwoMCwgZHNpLT5yZWdzICsg RElSRUNUX0NNRF9TVFNfQ1RMKTsKKwl3cml0ZWwoMCwgZHNpLT5yZWdzICsgRElSRUNUX0NNRF9S RF9TVFNfQ1RMKTsKKwl3cml0ZWwoMCwgZHNpLT5yZWdzICsgVklEX01PREVfU1RTX0NUTCk7CisJ d3JpdGVsKDAsIGRzaS0+cmVncyArIFRWR19TVFNfQ1RMKTsKKwl3cml0ZWwoMCwgZHNpLT5yZWdz ICsgRFBJX0lSUV9FTik7CisJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBpcnEs IGNkbnNfZHNpX2ludGVycnVwdCwgMCwKKwkJCSAgICAgICBkZXZfbmFtZSgmcGRldi0+ZGV2KSwg ZHNpKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9kaXNhYmxlX3BjbGs7CisKKwlwbV9ydW50aW1l X2VuYWJsZSgmcGRldi0+ZGV2KTsKKwlkc2ktPmJhc2UuZGV2ID0gJnBkZXYtPmRldjsKKwlkc2kt PmJhc2Uub3BzID0gJmNkbnNfZHNpX29wczsKKworCXJldCA9IG1pcGlfZHNpX2hvc3RfcmVnaXN0 ZXIoJmRzaS0+YmFzZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZGlzYWJsZV9ydW50aW1lX3Bt OworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+ZHNpX3BfY2xrKTsKKworCXJldHVybiAw OworCitlcnJfZGlzYWJsZV9ydW50aW1lX3BtOgorCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ ZGV2KTsKKworZXJyX2Rpc2FibGVfcGNsazoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5k c2lfcF9jbGspOworCitlcnJfcmVtb3ZlX2RwaHk6CisJY2Ruc19kcGh5X3JlbW92ZShkc2ktPmRw aHkpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjZG5zX2RzaV9kcm1fcmVtb3Zl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGNkbnNfZHNpICpkc2kg PSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCW1pcGlfZHNpX2hvc3RfdW5yZWdpc3Rl cigmZHNpLT5iYXNlKTsKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CisJY2Ruc19k cGh5X3JlbW92ZShkc2ktPmRwaHkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIGNkbnNfZHNpX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJs ZSA9ICJjZG5zLGRzaSIgfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2Ry aXZlciBjZG5zX2RzaV9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLnByb2JlICA9IGNkbnNfZHNpX2Ry bV9wcm9iZSwKKwkucmVtb3ZlID0gY2Ruc19kc2lfZHJtX3JlbW92ZSwKKwkuZHJpdmVyID0gewor CQkubmFtZSAgID0gImNkbnMtZHNpIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gY2Ruc19kc2lfb2Zf bWF0Y2gsCisJCS5wbSA9ICZjZG5zX2RzaV9wbV9vcHMsCisJfSwKK307Cittb2R1bGVfcGxhdGZv cm1fZHJpdmVyKGNkbnNfZHNpX3BsYXRmb3JtX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIkJv cmlzIEJyZXppbGxvbiA8Ym9yaXMuYnJlemlsbG9uQGZyZWUtZWxlY3Ryb25zLmNvbT4iKTsKK01P RFVMRV9ERVNDUklQVElPTigiQ2FkZW5jZSBEU0kgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgi R1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmNkbnMtZHNpIik7CisKLS0gCjIuMTQuMQoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVs IG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==