From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?q?Daniel=20Gl=C3=B6ckner?= Subject: [patch 1/2] alsa: ASoC driver for s6000 I2S interface Date: Thu, 26 Mar 2009 14:36:13 +0100 Message-ID: <1238074574-24734-1-git-send-email-dg@emlix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.emlix.com (mx1.emlix.com [193.175.82.87]) by alsa0.perex.cz (Postfix) with ESMTP id 62A74103857 for ; Thu, 26 Mar 2009 14:35:07 +0100 (CET) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: alsa-devel-bounces@alsa-project.org Errors-To: alsa-devel-bounces@alsa-project.org To: Mark Brown Cc: alsa-devel@alsa-project.org, =?utf-8?q?Daniel=20Gl=C3=B6ckner?= List-Id: alsa-devel@alsa-project.org VGhpcyBwYXRjaCBhZGRzIGEgZHJpdmVyIGZvciB0aGUgSTJTIGludGVyZmFjZSBmb3VuZCBvbiBT dHJldGNoIHM2MDAwCmZhbWlseSBwcm9jZXNzb3JzLgoKU2lnbmVkLW9mZi1ieTogRGFuaWVsIEds w7Zja25lciA8ZGdAZW1saXguY29tPgotLS0KIHNvdW5kL3NvYy9LY29uZmlnICAgICAgICAgICB8 ICAgIDEgKwogc291bmQvc29jL01ha2VmaWxlICAgICAgICAgIHwgICAgMSArCiBzb3VuZC9zb2Mv czYwMDAvS2NvbmZpZyAgICAgfCAgIDEwICsKIHNvdW5kL3NvYy9zNjAwMC9NYWtlZmlsZSAgICB8 ICAgIDYgKwogc291bmQvc29jL3M2MDAwL3M2MDAwLWkycy5jIHwgIDQyMSArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogc291bmQvc29jL3M2MDAwL3M2MDAwLWkycy5oIHwgIDE2 NyArKysrKysrKysrKysrKwogc291bmQvc29jL3M2MDAwL3M2MDAwLXBjbS5jIHwgIDUxOCArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzb3VuZC9zb2MvczYwMDAv czYwMDAtcGNtLmggfCAgIDQxICsrKysKIDggZmlsZXMgY2hhbmdlZCwgMTE2NSBpbnNlcnRpb25z KCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNvdW5kL3NvYy9zNjAwMC9L Y29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc291bmQvc29jL3M2MDAwL01ha2VmaWxlCiBjcmVh dGUgbW9kZSAxMDA2NDQgc291bmQvc29jL3M2MDAwL3M2MDAwLWkycy5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgc291bmQvc29jL3M2MDAwL3M2MDAwLWkycy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc291 bmQvc29jL3M2MDAwL3M2MDAwLXBjbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc291bmQvc29jL3M2 MDAwL3M2MDAwLXBjbS5oCgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL0tjb25maWcgYi9zb3VuZC9z b2MvS2NvbmZpZwppbmRleCBlZjAyNWM2Li41NmU1MTk4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mv S2NvbmZpZworKysgYi9zb3VuZC9zb2MvS2NvbmZpZwpAQCAtMzEsNiArMzEsNyBAQCBzb3VyY2Ug InNvdW5kL3NvYy9mc2wvS2NvbmZpZyIKIHNvdXJjZSAic291bmQvc29jL29tYXAvS2NvbmZpZyIK IHNvdXJjZSAic291bmQvc29jL3B4YS9LY29uZmlnIgogc291cmNlICJzb3VuZC9zb2MvczNjMjR4 eC9LY29uZmlnIgorc291cmNlICJzb3VuZC9zb2MvczYwMDAvS2NvbmZpZyIKIHNvdXJjZSAic291 bmQvc29jL3NoL0tjb25maWciCiAKICMgU3VwcG9ydGVkIGNvZGVjcwpkaWZmIC0tZ2l0IGEvc291 bmQvc29jL01ha2VmaWxlIGIvc291bmQvc29jL01ha2VmaWxlCmluZGV4IDg2YTliMWYuLjZiMzNk ODAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvTWFrZWZp bGUKQEAgLTEwLDQgKzEwLDUgQEAgb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IGZzbC8KIG9iai0k KENPTkZJR19TTkRfU09DKQkrPSBvbWFwLwogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IHB4YS8K IG9iai0kKENPTkZJR19TTkRfU09DKQkrPSBzM2MyNHh4Lworb2JqLSQoQ09ORklHX1NORF9TT0Mp CSs9IHM2MDAwLwogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IHNoLwpkaWZmIC0tZ2l0IGEvc291 bmQvc29jL3M2MDAwL0tjb25maWcgYi9zb3VuZC9zb2MvczYwMDAvS2NvbmZpZwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjEyZWQyCi0tLSAvZGV2L251bGwKKysrIGIvc291 bmQvc29jL3M2MDAwL0tjb25maWcKQEAgLTAsMCArMSwxMCBAQAorY29uZmlnIFNORF9TNjAwMF9T T0MKKwl0cmlzdGF0ZSAiU29DIEF1ZGlvIGZvciB0aGUgU3RyZXRjaCBzNjAwMCBmYW1pbHkiCisJ ZGVwZW5kcyBvbiBYVEVOU0FfVkFSSUFOVF9TNjAwMCAmJiBTTkRfU09DCisJaGVscAorCSAgU2F5 IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgY29kZWNzIGF0dGFjaGVkIHRv CisJICBzNjAwMCBmYW1pbHkgY2hpcHMuIFlvdSB3aWxsIGFsc28gbmVlZCB0byBzZWxlY3QgdGhl IHBsYXRmb3JtCisJICB0byBzdXBwb3J0IGJlbG93LgorCitjb25maWcgU05EX1M2MDAwX1NPQ19J MlMKKwl0cmlzdGF0ZQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3M2MDAwL01ha2VmaWxlIGIvc291 bmQvc29jL3M2MDAwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmRmMTVmODcKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvczYwMDAvTWFrZWZpbGUKQEAg LTAsMCArMSw2IEBACisjIHM2MDAwIFBsYXRmb3JtIFN1cHBvcnQKK3NuZC1zb2MtczYwMDAtb2Jq cyA6PSBzNjAwMC1wY20ubworc25kLXNvYy1zNjAwMC1pMnMtb2JqcyA6PSBzNjAwMC1pMnMubwor CitvYmotJChDT05GSUdfU05EX1M2MDAwX1NPQykgKz0gc25kLXNvYy1zNjAwMC5vCitvYmotJChD T05GSUdfU05EX1M2MDAwX1NPQ19JMlMpICs9IHNuZC1zb2MtczYwMDAtaTJzLm8KZGlmZiAtLWdp dCBhL3NvdW5kL3NvYy9zNjAwMC9zNjAwMC1pMnMuYyBiL3NvdW5kL3NvYy9zNjAwMC9zNjAwMC1p MnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTlhM2M0Ci0tLSAvZGV2 L251bGwKKysrIGIvc291bmQvc29jL3M2MDAwL3M2MDAwLWkycy5jCkBAIC0wLDAgKzEsNDIxIEBA CisvKgorICogQUxTQSBTb0MgSTJTIEF1ZGlvIExheWVyIGZvciB0aGUgU3RyZXRjaCBTNjAwMCBm YW1pbHkKKyAqCisgKiBBdXRob3I6ICAgICAgRGFuaWVsIEdsb2Vja25lciwgPGRnQGVtbGl4LmNv bT4KKyAqIENvcHlyaWdodDogICAoQykgMjAwOSBlbWxpeCBHbWJIIDxpbmZvQGVtbGl4LmNvbT4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Cisj aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5j bHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxs aW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxz b3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291 bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCisjaW5jbHVkZSAiczYwMDAt aTJzLmgiCisjaW5jbHVkZSAiczYwMDAtcGNtLmgiCisKK3N0YXRpYyB2b2lkIHM2MDAwX2kyc193 YWl0X2Rpc2FibGVkKHN0cnVjdCBzNjAwMF9pMnNfZGV2ICpkZXYpCit7CisJaW50IGNoYW5uZWw7 CisJaW50IG4gPSA1MDsKKwlmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgMjsgY2hhbm5lbCsr KSB7CisJCXdoaWxlICgtLW4gPj0gMCkgeworCQkJaW50IHYgPSBzNl9pMnNfcmVhZF9yZWcoZGV2 LCBTNl9JMlNfRU5BQkxFKGNoYW5uZWwpKTsKKwkJCWlmICgodiAmIFM2X0kyU19JU19FTkFCTEVE KQorCQkJICAgIHx8ICEodiAmIChTNl9JMlNfRE1BX0FDVElWRSB8IFM2X0kyU19JU19CVVNZKSkp CisJCQkJYnJlYWs7CisJCQl1ZGVsYXkoMjApOworCQl9CisJfQorCWlmIChuIDwgMCkKKwkJcHJp bnRrKEtFUk5fV0FSTklORyAiczYwMDAtaTJzOiB0aW1lb3V0IGRpc2FibGluZyBpbnRlcmZhY2Vz Iik7Cit9CisKK3N0YXRpYyBpbnQgczYwMDBfaTJzX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29j X2RhaSAqY3B1X2RhaSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzNjAw MF9pMnNfZGV2ICpkZXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CisJdTMyIHc7CisKKwlzd2l0 Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RB SUZNVF9DQk1fQ0ZNOgorCQl3ID0gUzZfSTJTX1NDS19JTiB8IFM2X0kyU19XU19JTjsKKwkJYnJl YWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZNOgorCQl3ID0gUzZfSTJTX1NDS19PVVQg fCBTNl9JMlNfV1NfSU47CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGUzoK KwkJdyA9IFM2X0kyU19TQ0tfSU4gfCBTNl9JMlNfV1NfT1VUOworCQlicmVhazsKKwljYXNlIFNO RF9TT0NfREFJRk1UX0NCU19DRlM6CisJCXcgPSBTNl9JMlNfU0NLX09VVCB8IFM2X0kyU19XU19P VVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRj aCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1U X0lCX0lGOgorCQl3IHw9IFM2X0kyU19MRUZUX0ZJUlNUOworCQlicmVhazsKKwljYXNlIFNORF9T T0NfREFJRk1UX0lCX05GOgorCQl3IHw9IFM2X0kyU19SSUdIVF9GSVJTVDsKKwkJYnJlYWs7CisJ ZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJczZfaTJzX21vZF9yZWcoZGV2LCBT Nl9JMlNfSU5URVJGQUNFX0NGRygwKSwKKwkJICAgICAgIFM2X0kyU19GSVJTVCB8IFM2X0kyU19X U19ESVIgfCBTNl9JMlNfU0NLX0RJUiwgdyk7CisJczZfaTJzX21vZF9yZWcoZGV2LCBTNl9JMlNf SU5URVJGQUNFX0NGRygxKSwKKwkJICAgICAgIFM2X0kyU19GSVJTVCB8IFM2X0kyU19XU19ESVIg fCBTNl9JMlNfU0NLX0RJUiwgdyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzNjAw MF9pMnNfc2V0X2Nsa2RpdihzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IGRpdl9pZCwgaW50 IGRpdikKK3sKKwlzdHJ1Y3QgczYwMDBfaTJzX2RldiAqZGV2ID0gZGFpLT5wcml2YXRlX2RhdGE7 CisKKwlpZiAoIWRpdiB8fCAoZGl2ICYgMSkgfHwgZGl2ID4gKFM2X0kyU19ESVZfTUFTSyArIDEp ICogMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzNl9pMnNfbW9kX3JlZyhkZXYsIFM2X0kyU19J TlRFUkZBQ0VfQ0ZHKGRpdl9pZCksCisJCSAgICAgICBTNl9JMlNfRElWX01BU0ssIGRpdiAvIDIg LSAxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzNjAwMF9pMnNfaHdfcGFyYW1zKHN0 cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgICAgIHN0cnVjdCBzbmRf cGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJICAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFp KQoreworCXN0cnVjdCBzNjAwMF9pMnNfZGV2ICpkZXYgPSBkYWktPnByaXZhdGVfZGF0YTsKKwlp bnQgaW50ZXJmOworCXUzMiB3ID0gMDsKKworCWlmIChkZXYtPndpZGUpCisJCWludGVyZiA9IDA7 CisJZWxzZSB7CisJCXcgfD0gKCgocGFyYW1zX2NoYW5uZWxzKHBhcmFtcykgLSAyKSAvIDIpCisJ CSAgICAgIDw8IFM2X0kyU19DSEFOTkVMU19TSElGVCkgJiBTNl9JMlNfQ0hBTk5FTFNfTUFTSzsK KwkJaW50ZXJmID0gKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJB Q0spCisJCQkJPyBkZXYtPmNoYW5uZWxfb3V0IDogZGV2LT5jaGFubmVsX2luOworCX0KKworCXN3 aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1Mx Nl9MRToKKwkJdyB8PSBTNl9JMlNfMTZCSVQgfCBTNl9JMlNfTUVNXzE2QklUOworCQlicmVhazsK KwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgorCQl3IHw9IFM2X0kyU18zMkJJVCB8IFM2 X0kyU19NRU1fMzJCSVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX1dBUk5J TkcgInM2MDAwLWkyczogdW5zdXBwb3J0ZWQgUENNIGZvcm1hdCAleFxuIiwKKwkJICAgICAgIHBh cmFtc19mb3JtYXQocGFyYW1zKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChzNl9p MnNfcmVhZF9yZWcoZGV2LCBTNl9JMlNfSU5URVJGQUNFX0NGRyhpbnRlcmYpKQorCSAgICAgJiBT Nl9JMlNfSVNfRU5BQkxFRCkgeworCQlwcmludGsoS0VSTl9FUlIgInM2MDAwLWkyczogaW50ZXJm YWNlIGFscmVhZHkgZW5hYmxlZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJczZfaTJz X21vZF9yZWcoZGV2LCBTNl9JMlNfSU5URVJGQUNFX0NGRyhpbnRlcmYpLAorCQkgICAgICAgUzZf STJTX0NIQU5ORUxTX01BU0t8UzZfSTJTX01FTV9NQVNLfFM2X0kyU19CSVRTX01BU0ssCisJCSAg ICAgICB3KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzNjAwMF9p MnNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCQkgICAgIHN0cnVjdCBz bmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzNjAwMF9pMnNfZGV2ICpkZXY7CisJc3RydWN0 IHJlc291cmNlICpzY2JtZW0sICpzaWZtZW0sICpyZWdpb24sICpkbWFfaW4sICpkbWFfb3V0Owor CXN0cnVjdCBzNjAwMF9zbmRfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJdTggX19pb21lbSAqbW1p bzsKKwlpbnQgcmV0OworCisJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCXNj Ym1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJ aWYgKCFzY2JtZW0pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gbWVtIHJlc291cmNlP1xu Iik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX3JlbGVhc2Vfbm9uZTsKKwl9CisKKwly ZWdpb24gPSByZXF1ZXN0X21lbV9yZWdpb24oc2NibWVtLT5zdGFydCwKKwkJCQkgICAgc2NibWVt LT5lbmQgLSBzY2JtZW0tPnN0YXJ0ICsgMSwKKwkJCQkgICAgcGRldi0+bmFtZSk7CisJaWYgKCFy ZWdpb24pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiSTJTIFNDQiByZWdpb24gYWxyZWFkeSBj bGFpbWVkXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycl9yZWxlYXNlX25vbmU7CisJ fQorCisJbW1pbyA9IGlvcmVtYXAoc2NibWVtLT5zdGFydCwgc2NibWVtLT5lbmQgLSBzY2JtZW0t PnN0YXJ0ICsgMSk7CisJaWYgKCFtbWlvKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0 IGlvcmVtYXAgU0NCIHJlZ2lvblxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3Jl bGVhc2Vfc2NiOworCX0KKworCXNpZm1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJ T1JFU09VUkNFX01FTSwgMSk7CisJaWYgKCFzaWZtZW0pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2 LCAibm8gc2Vjb25kIG1lbSByZXNvdXJjZT9cbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3Rv IGVycl9yZWxlYXNlX21hcDsKKwl9CisKKwlyZWdpb24gPSByZXF1ZXN0X21lbV9yZWdpb24oc2lm bWVtLT5zdGFydCwKKwkJCQkgICAgc2lmbWVtLT5lbmQgLSBzaWZtZW0tPnN0YXJ0ICsgMSwKKwkJ CQkgICAgcGRldi0+bmFtZSk7CisJaWYgKCFyZWdpb24pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2 LCAiSTJTIFNJRiByZWdpb24gYWxyZWFkeSBjbGFpbWVkXG4iKTsKKwkJcmV0ID0gLUVCVVNZOwor CQlnb3RvIGVycl9yZWxlYXNlX21hcDsKKwl9CisKKwlkbWFfaW4gPSBwbGF0Zm9ybV9nZXRfcmVz b3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDApOworCWlmICghZG1hX2luKSB7CisJCWRldl9l cnIoJnBkZXYtPmRldiwgIm5vIGRtYSByZXNvdXJjZT9cbiIpOworCQlyZXQgPSAtRU5PREVWOwor CQlnb3RvIGVycl9yZWxlYXNlX3NpZjsKKwl9CisKKwlyZWdpb24gPSByZXF1ZXN0X21lbV9yZWdp b24oZG1hX2luLT5zdGFydCwKKwkJCQkgICAgZG1hX2luLT5lbmQgLSBkbWFfaW4tPnN0YXJ0ICsg MSwKKwkJCQkgICAgcGRldi0+bmFtZSk7CisJaWYgKCFyZWdpb24pIHsKKwkJZGV2X2VycigmcGRl di0+ZGV2LCAiSTJTIERNQSByZWdpb24gYWxyZWFkeSBjbGFpbWVkXG4iKTsKKwkJcmV0ID0gLUVC VVNZOworCQlnb3RvIGVycl9yZWxlYXNlX3NpZjsKKwl9CisKKwlkbWFfb3V0ID0gMDsKKwlpZiAo cGRhdGEtPmxpbmVzX291dCkgeworCQlpZiAocGRhdGEtPmxpbmVzX2luKSB7CisJCQlkbWFfb3V0 ID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfRE1BLAorCQkJCQkJCTEp OworCQkJaWYgKCFkbWFfb3V0KSB7CisJCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCQkibm8g c2Vjb25kIGRtYSByZXNvdXJjZT9cbiIpOworCQkJCXJldCA9IC1FTk9ERVY7CisJCQkJZ290byBl cnJfcmVsZWFzZV9kbWExOworCQkJfQorCisJCQlyZWdpb24gPSByZXF1ZXN0X21lbV9yZWdpb24o ZG1hX291dC0+c3RhcnQsCisJCQkJCQkgICAgZG1hX291dC0+ZW5kCisJCQkJCQkgICAgIC0gZG1h X291dC0+c3RhcnQgKyAxLAorCQkJCQkJICAgIHBkZXYtPm5hbWUpOworCQkJaWYgKCFyZWdpb24p IHsKKwkJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJCSJJMlMgRE1BIHJlZ2lvbiBhbHJlYWR5 IGNsYWltZWRcbiIpOworCQkJCXJldCA9IC1FQlVTWTsKKwkJCQlnb3RvIGVycl9yZWxlYXNlX2Rt YTE7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkbWFfb3V0ID0gZG1hX2luOworCQkJZG1hX2luID0g MDsKKwkJfQorCX0KKworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzNjAwMF9pMnNfZGV2 KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBl cnJfcmVsZWFzZV9kbWEyOworCX0KKworCWRhaS0+cHJpdmF0ZV9kYXRhID0gZGV2OworCWRhaS0+ ZG1hX2RhdGEgPSAmZGV2LT5kbWFfcGFyYW1zOworCisJZGV2LT5zaWZiYXNlID0gc2lmbWVtLT5z dGFydDsKKwlkZXYtPnNjYmJhc2UgPSBtbWlvOworCisJczZfaTJzX3dyaXRlX3JlZyhkZXYsIFM2 X0kyU19JTlRFUlJVUFRfRU5BQkxFLCAwKTsKKwlzNl9pMnNfd3JpdGVfcmVnKGRldiwgUzZfSTJT X0lOVEVSUlVQVF9DTEVBUiwKKwkJCSBTNl9JMlNfSU5UX0FMSUdOTUVOVCB8CisJCQkgUzZfSTJT X0lOVF9VTkRFUlJVTiB8CisJCQkgUzZfSTJTX0lOVF9PVkVSUlVOKTsKKworCXM2MDAwX2kyc19z dG9wX2NoYW5uZWwoZGV2LCAwKTsKKwlzNjAwMF9pMnNfc3RvcF9jaGFubmVsKGRldiwgMSk7CisJ czYwMDBfaTJzX3dhaXRfZGlzYWJsZWQoZGV2KTsKKworCWRldi0+d2lkZSA9IHBkYXRhLT53aWRl OworCWRldi0+Y2hhbm5lbF9pbiA9IHBkYXRhLT5jaGFubmVsX2luOworCWRldi0+Y2hhbm5lbF9v dXQgPSBwZGF0YS0+Y2hhbm5lbF9vdXQ7CisJZGV2LT5saW5lc19pbiA9IHBkYXRhLT5saW5lc19p bjsKKwlkZXYtPmxpbmVzX291dCA9IHBkYXRhLT5saW5lc19vdXQ7CisKKwlzNl9pMnNfd3JpdGVf cmVnKGRldiwgUzZfSTJTX01PREUsCisJCQkgZGV2LT53aWRlID8gUzZfSTJTX1dJREUgOiBTNl9J MlNfRFVBTCk7CisKKwlpZiAoZGV2LT53aWRlKSB7CisJCWludCBpOworCQlkZXYtPmNoYW5uZWxf aW4gPSAwOworCQlkZXYtPmNoYW5uZWxfb3V0ID0gMTsKKwkJZGFpLT5jYXB0dXJlLmNoYW5uZWxz X21pbiA9IDIgKiBkZXYtPmxpbmVzX2luOworCQlkYWktPmNhcHR1cmUuY2hhbm5lbHNfbWF4ID0g ZGFpLT5jYXB0dXJlLmNoYW5uZWxzX21pbjsKKwkJZGFpLT5wbGF5YmFjay5jaGFubmVsc19taW4g PSAyICogZGV2LT5saW5lc19vdXQ7CisJCWRhaS0+cGxheWJhY2suY2hhbm5lbHNfbWF4ID0gZGFp LT5wbGF5YmFjay5jaGFubmVsc19taW47CisKKwkJZm9yIChpID0gMDsgaSA8IGRldi0+bGluZXNf b3V0OyBpKyspCisJCQlzNl9pMnNfd3JpdGVfcmVnKGRldiwgUzZfSTJTX0RBVEFfQ0ZHKGkpLCBT Nl9JMlNfT1VUKTsKKworCQlmb3IgKDsgaSA8IFM2X0kyU19OVU1fTElORVMgLSBkZXYtPmxpbmVz X2luOyBpKyspCisJCQlzNl9pMnNfd3JpdGVfcmVnKGRldiwgUzZfSTJTX0RBVEFfQ0ZHKGkpLAor CQkJCQkgUzZfSTJTX1VOVVNFRCk7CisKKwkJZm9yICg7IGkgPCBTNl9JMlNfTlVNX0xJTkVTOyBp KyspCisJCQlzNl9pMnNfd3JpdGVfcmVnKGRldiwgUzZfSTJTX0RBVEFfQ0ZHKGkpLCBTNl9JMlNf SU4pOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGludCBjZmdbMl0gPSB7UzZfSTJTX1VOVVNFRCwg UzZfSTJTX1VOVVNFRH07CisKKwkJZGV2LT5saW5lc19pbiA9IChkZXYtPmxpbmVzX2luICE9IDAp OworCQlkZXYtPmxpbmVzX291dCA9IChkZXYtPmxpbmVzX291dCAhPSAwKTsKKwkJZGFpLT5jYXB0 dXJlLmNoYW5uZWxzX21pbiA9IDIgKiBkZXYtPmxpbmVzX2luOworCQlkYWktPmNhcHR1cmUuY2hh bm5lbHNfbWF4ID0gOCAqIGRldi0+bGluZXNfaW47CisJCWRhaS0+cGxheWJhY2suY2hhbm5lbHNf bWluID0gMiAqIGRldi0+bGluZXNfb3V0OworCQlkYWktPnBsYXliYWNrLmNoYW5uZWxzX21heCA9 IDggKiBkZXYtPmxpbmVzX291dDsKKworCQljZmdbZGV2LT5jaGFubmVsX2luXSA9IFM2X0kyU19J TjsKKwkJY2ZnW2Rldi0+Y2hhbm5lbF9vdXRdID0gUzZfSTJTX09VVDsKKworCQlzNl9pMnNfd3Jp dGVfcmVnKGRldiwgUzZfSTJTX0RBVEFfQ0ZHKDApLCBjZmdbMF0pOworCQlzNl9pMnNfd3JpdGVf cmVnKGRldiwgUzZfSTJTX0RBVEFfQ0ZHKDEpLCBjZmdbMV0pOworCX0KKworCWRldi0+ZG1hX3Bh cmFtcy5kbWFfaW4gPSBkbWFfaW4gPyBkbWFfaW4tPnN0YXJ0IDogMDsKKwlkZXYtPmRtYV9wYXJh bXMuZG1hX291dCA9IGRtYV9vdXQgPyBkbWFfb3V0LT5zdGFydCA6IDA7CisJZGV2LT5kbWFfcGFy YW1zLnNpZl9pbiA9IGRldi0+c2lmYmFzZSArIChkZXYtPmNoYW5uZWxfaW4gPworCQkJCQlTNl9J MlNfU0lGX1BPUlQxIDogUzZfSTJTX1NJRl9QT1JUMCk7CisJZGV2LT5kbWFfcGFyYW1zLnNpZl9v dXQgPSBkZXYtPnNpZmJhc2UgKyAoZGV2LT5jaGFubmVsX291dCA/CisJCQkJCVM2X0kyU19TSUZf UE9SVDEgOiBTNl9JMlNfU0lGX1BPUlQwKTsKKwlkZXYtPmRtYV9wYXJhbXMuc2FtZV9yYXRlID0g cGRhdGEtPnNhbWVfcmF0ZSB8IHBkYXRhLT53aWRlOworCisJZGV2LT5kbWFfcGFyYW1zLmlycSA9 IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGRldi0+ZG1hX3BhcmFtcy5pcnEgPCAw KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGlycSByZXNvdXJjZT9cbiIpOworCQlyZXQg PSAtRU5PREVWOworCQlnb3RvIGVycl9yZWxlYXNlX2RldjsKKwl9CisKKwlzNl9pMnNfd3JpdGVf cmVnKGRldiwgUzZfSTJTX0lOVEVSUlVQVF9FTkFCTEUsCisJCQkgUzZfSTJTX0lOVF9BTElHTk1F TlQgfAorCQkJIFM2X0kyU19JTlRfVU5ERVJSVU4gfAorCQkJIFM2X0kyU19JTlRfT1ZFUlJVTik7 CisKKwlyZXR1cm4gMDsKKworZXJyX3JlbGVhc2VfZGV2OgorCWtmcmVlKGRldik7CitlcnJfcmVs ZWFzZV9kbWEyOgorCWlmIChkbWFfb3V0KQorCQlyZWxlYXNlX21lbV9yZWdpb24oZG1hX291dC0+ c3RhcnQsCisJCQkJICAgZG1hX291dC0+ZW5kIC0gZG1hX291dC0+c3RhcnQgKyAxKTsKK2Vycl9y ZWxlYXNlX2RtYTE6CisJaWYgKGRtYV9pbikKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKGRtYV9pbi0+ c3RhcnQsCisJCQkJICAgZG1hX2luLT5lbmQgLSBkbWFfaW4tPnN0YXJ0ICsgMSk7CitlcnJfcmVs ZWFzZV9zaWY6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHNpZm1lbS0+c3RhcnQsIChzaWZtZW0tPmVu ZCAtIHNpZm1lbS0+c3RhcnQpICsgMSk7CitlcnJfcmVsZWFzZV9tYXA6CisJaW91bm1hcChtbWlv KTsKK2Vycl9yZWxlYXNlX3NjYjoKKwlyZWxlYXNlX21lbV9yZWdpb24oc2NibWVtLT5zdGFydCwg KHNjYm1lbS0+ZW5kIC0gc2NibWVtLT5zdGFydCkgKyAxKTsKK2Vycl9yZWxlYXNlX25vbmU6CisJ cmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHM2MDAwX2kyc19yZW1vdmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCQkgICAgICAgc3RydWN0IHNuZF9zb2Nf ZGFpICpkYWkpCit7CisJc3RydWN0IHM2MDAwX2kyc19kZXYgKmRldiA9IGRhaS0+cHJpdmF0ZV9k YXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVnaW9uOworCXZvaWQgX19pb21lbSAqbW1pbyA9IGRl di0+c2NiYmFzZTsKKworCXM2MDAwX2kyc19zdG9wX2NoYW5uZWwoZGV2LCAwKTsKKwlzNjAwMF9p MnNfc3RvcF9jaGFubmVsKGRldiwgMSk7CisJa2ZyZWUoZGV2KTsKKwlkYWktPnByaXZhdGVfZGF0 YSA9IDA7CisKKwlzNl9pMnNfd3JpdGVfcmVnKGRldiwgUzZfSTJTX0lOVEVSUlVQVF9FTkFCTEUs IDApOworCisJcmVnaW9uID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0Vf RE1BLCAwKTsKKwlyZWxlYXNlX3JlZ2lvbihyZWdpb24tPnN0YXJ0LCByZWdpb24tPmVuZCAtIHJl Z2lvbi0+c3RhcnQgKyAxKTsKKworCWlmIChkZXYtPmxpbmVzX2luICYmIGRldi0+bGluZXNfb3V0 KSB7CisJCXJlZ2lvbiA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RN QSwgMSk7CisJCXJlbGVhc2VfcmVnaW9uKHJlZ2lvbi0+c3RhcnQsIHJlZ2lvbi0+ZW5kIC0gcmVn aW9uLT5zdGFydCArIDEpOworCX0KKworCXJlZ2lvbiA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShw ZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVsZWFzZV9yZWdpb24ocmVnaW9uLT5zdGFydCwg KHJlZ2lvbi0+ZW5kIC0gcmVnaW9uLT5zdGFydCkgKyAxKTsKKworCWlvdW5tYXAobW1pbyk7CisJ cmVnaW9uID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOwor CXJlbGVhc2VfbWVtX3JlZ2lvbihyZWdpb24tPnN0YXJ0LCAocmVnaW9uLT5lbmQgLSByZWdpb24t PnN0YXJ0KSArIDEpOworfQorCisjZGVmaW5lIFM2MDAwX0kyU19SQVRFUwkoU05EUlZfUENNX1JB VEVfQ09OVElOVU9VUyB8IFNORFJWX1BDTV9SQVRFX0tOT1QgfCBcCisJCQkgU05EUlZfUENNX1JB VEVfNTUxMiB8IFNORFJWX1BDTV9SQVRFXzgwMDBfMTkyMDAwKQorI2RlZmluZSBTNjAwMF9JMlNf Rk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9M RSkKKworc3RydWN0IHNuZF9zb2NfZGFpIHM2MDAwX2kyc19kYWkgPSB7CisJLm5hbWUgPSAiczYw MDAtaTJzIiwKKwkuaWQgPSAwLAorCS5wcm9iZSA9IHM2MDAwX2kyc19wcm9iZSwKKwkucmVtb3Zl ID0gX19kZXZleGl0X3AoczYwMDBfaTJzX3JlbW92ZSksCisJLnBsYXliYWNrID0geworCQkuY2hh bm5lbHNfbWluID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDgsCisJCS5mb3JtYXRzID0gUzYwMDBf STJTX0ZPUk1BVFMsCisJCS5yYXRlcyA9IFM2MDAwX0kyU19SQVRFUywKKwkJLnJhdGVfbWluID0g MCwKKwkJLnJhdGVfbWF4ID0gMTU2MjUwMCwKKwl9LAorCS5jYXB0dXJlID0geworCQkuY2hhbm5l bHNfbWluID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDgsCisJCS5mb3JtYXRzID0gUzYwMDBfSTJT X0ZPUk1BVFMsCisJCS5yYXRlcyA9IFM2MDAwX0kyU19SQVRFUywKKwkJLnJhdGVfbWluID0gMCwK KwkJLnJhdGVfbWF4ID0gMTU2MjUwMCwKKwl9LAorCS5vcHMgPSB7CisJCS5zZXRfZm10ID0gczYw MDBfaTJzX3NldF9kYWlfZm10LAorCQkuc2V0X2Nsa2RpdiA9IHM2MDAwX2kyc19zZXRfY2xrZGl2 LAorCQkuaHdfcGFyYW1zID0gczYwMDBfaTJzX2h3X3BhcmFtcywKKwl9Cit9CitFWFBPUlRfU1lN Qk9MX0dQTChzNjAwMF9pMnNfZGFpKTsKKworc3RhdGljIGludCBfX2luaXQgczYwMDBfaTJzX2lu aXQodm9pZCkKK3sKKwlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWkoJnM2MDAwX2kyc19kYWkp OworfQorbW9kdWxlX2luaXQoczYwMDBfaTJzX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQg czYwMDBfaTJzX2V4aXQodm9pZCkKK3sKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZzNjAwMF9p MnNfZGFpKTsKK30KK21vZHVsZV9leGl0KHM2MDAwX2kyc19leGl0KTsKKworTU9EVUxFX0FVVEhP UigiRGFuaWVsIEdsb2Vja25lciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTdHJldGNoIHM2MDAw IGZhbWlseSBJMlMgU29DIEludGVyZmFjZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZm IC0tZ2l0IGEvc291bmQvc29jL3M2MDAwL3M2MDAwLWkycy5oIGIvc291bmQvc29jL3M2MDAwL3M2 MDAwLWkycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MThmOTUKLS0t IC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvczYwMDAvczYwMDAtaTJzLmgKQEAgLTAsMCArMSwx NjcgQEAKKy8qCisgKiBBTFNBIFNvQyBJMlMgQXVkaW8gTGF5ZXIgZm9yIHRoZSBTdHJldGNoIHM2 MDAwIGZhbWlseQorICoKKyAqIEF1dGhvcjogICAgICBEYW5pZWwgR2xvZWNrbmVyLCA8ZGdAZW1s aXguY29tPgorICogQ29weXJpZ2h0OiAgIChDKSAyMDA5IGVtbGl4IEdtYkggPGluZm9AZW1saXgu Y29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfUzYwMDBfSTJTX0gK KyNkZWZpbmUgX1M2MDAwX0kyU19ICisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUg InM2MDAwLXBjbS5oIgorCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHM2MDAwX2kyc19kYWk7 CisKK3N0cnVjdCBzNjAwMF9pMnNfZGV2IHsKKwlkbWFfYWRkcl90IHNpZmJhc2U7CisJdTggX19p b21lbSAqc2NiYmFzZTsKKwlpbnQgd2lkZTsKKwlpbnQgY2hhbm5lbF9pbjsKKwlpbnQgY2hhbm5l bF9vdXQ7CisJaW50IGxpbmVzX2luOworCWludCBsaW5lc19vdXQ7CisJc3RydWN0IHM2MDAwX3Bj bV9kbWFfcGFyYW1zIGRtYV9wYXJhbXM7Cit9OworCisjZGVmaW5lIFM2X0kyU19JTlRFUlJVUFRf U1RBVFVTCTB4MDAKKyNkZWZpbmUgICBTNl9JMlNfSU5UX09WRVJSVU4JMQorI2RlZmluZSAgIFM2 X0kyU19JTlRfVU5ERVJSVU4gICAyCisjZGVmaW5lICAgUzZfSTJTX0lOVF9BTElHTk1FTlQgIDQK KyNkZWZpbmUgUzZfSTJTX0lOVEVSUlVQVF9FTkFCTEUJMHgwNAorI2RlZmluZSBTNl9JMlNfSU5U RVJSVVBUX1JBVwkweDA4CisjZGVmaW5lIFM2X0kyU19JTlRFUlJVUFRfQ0xFQVIJMHgwQworI2Rl ZmluZQlTNl9JMlNfSU5URVJSVVBUX1NFVAkweDEwCisjZGVmaW5lIFM2X0kyU19NT0RFCQkweDIw CisjZGVmaW5lICAgUzZfSTJTX0RVQUwJCTAKKyNkZWZpbmUgICBTNl9JMlNfV0lERQkJMQorI2Rl ZmluZSBTNl9JMlNfVFhfREVGQVVMVAkweDI0CisjZGVmaW5lIFM2X0kyU19EQVRBX0NGRyhjKQko MHg0MCArIDB4MTAgKiAoYykpCisjZGVmaW5lICAgUzZfSTJTX0lOCQkwCisjZGVmaW5lICAgUzZf STJTX09VVAkJMQorI2RlZmluZSAgIFM2X0kyU19VTlVTRUQJCTIKKyNkZWZpbmUgUzZfSTJTX0lO VEVSRkFDRV9DRkcoYykJKDB4NDQgKyAweDEwICogKGMpKQorI2RlZmluZSAgIFM2X0kyU19ESVZf TUFTSwkweDAwMWZmZgorI2RlZmluZSAgIFM2X0kyU18xNkJJVAkJMHgwMDAwMDAKKyNkZWZpbmUg ICBTNl9JMlNfMjBCSVQJCTB4MDAyMDAwCisjZGVmaW5lICAgUzZfSTJTXzI0QklUCQkweDAwNDAw MAorI2RlZmluZSAgIFM2X0kyU18zMkJJVAkJMHgwMDYwMDAKKyNkZWZpbmUgICBTNl9JMlNfQklU U19NQVNLCTB4MDA2MDAwCisjZGVmaW5lICAgUzZfSTJTX01FTV8xNkJJVAkweDAwMDAwMAorI2Rl ZmluZSAgIFM2X0kyU19NRU1fMzJCSVQJMHgwMDgwMDAKKyNkZWZpbmUgICBTNl9JMlNfTUVNX01B U0sJMHgwMDgwMDAKKyNkZWZpbmUgICBTNl9JMlNfQ0hBTk5FTFNfU0hJRlQJMTYKKyNkZWZpbmUg ICBTNl9JMlNfQ0hBTk5FTFNfTUFTSwkweDAzMDAwMAorI2RlZmluZSAgIFM2X0kyU19TQ0tfSU4J CTB4MDAwMDAwCisjZGVmaW5lICAgUzZfSTJTX1NDS19PVVQJMHgwNDAwMDAKKyNkZWZpbmUgICBT Nl9JMlNfU0NLX0RJUgkweDA0MDAwMAorI2RlZmluZSAgIFM2X0kyU19XU19JTgkJMHgwMDAwMDAK KyNkZWZpbmUgICBTNl9JMlNfV1NfT1VUCQkweDA4MDAwMAorI2RlZmluZSAgIFM2X0kyU19XU19E SVIJCTB4MDgwMDAwCisjZGVmaW5lICAgUzZfSTJTX0xFRlRfRklSU1QJMHgwMDAwMDAKKyNkZWZp bmUgICBTNl9JMlNfUklHSFRfRklSU1QJMHgxMDAwMDAKKyNkZWZpbmUgICBTNl9JMlNfRklSU1QJ CTB4MTAwMDAwCisjZGVmaW5lICAgUzZfSTJTX0NVUl9TQ0sJMHgyMDAwMDAKKyNkZWZpbmUgICBT Nl9JMlNfQ1VSX1dTCQkweDQwMDAwMAorI2RlZmluZSBTNl9JMlNfRU5BQkxFKGMpCSgweDQ4ICsg MHgxMCAqIChjKSkKKyNkZWZpbmUgICBTNl9JMlNfRElTQUJMRV9JRgkweDAyCisjZGVmaW5lICAg UzZfSTJTX0VOQUJMRV9JRgkweDAzCisjZGVmaW5lICAgUzZfSTJTX0lTX0JVU1kJMHgwNAorI2Rl ZmluZSAgIFM2X0kyU19ETUFfQUNUSVZFCTB4MDgKKyNkZWZpbmUgICBTNl9JMlNfSVNfRU5BQkxF RAkweDEwCisKKyNkZWZpbmUgUzZfSTJTX05VTV9MSU5FUwk0CisKKyNkZWZpbmUgUzZfSTJTX1NJ Rl9QT1JUMAkweDAwMDAwMDAKKyNkZWZpbmUgUzZfSTJTX1NJRl9QT1JUMQkweDAwMDAwODAgLyog ZG9jcyBzYXkgMHgwMDAwMDEwICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzNl9pMnNfd3JpdGVf cmVnKHN0cnVjdCBzNjAwMF9pMnNfZGV2ICpkZXYsIGludCByZWcsIHUzMiB2YWwpCit7CisJd3Jp dGVsKHZhbCwgZGV2LT5zY2JiYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgczZf aTJzX3JlYWRfcmVnKHN0cnVjdCBzNjAwMF9pMnNfZGV2ICpkZXYsIGludCByZWcpCit7CisJcmV0 dXJuIHJlYWRsKGRldi0+c2NiYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBz Nl9pMnNfbW9kX3JlZyhzdHJ1Y3QgczYwMDBfaTJzX2RldiAqZGV2LCBpbnQgcmVnLAorCQkJCSAg dTMyIG1hc2ssIHUzMiB2YWwpCit7CisJdmFsIF49IHM2X2kyc19yZWFkX3JlZyhkZXYsIHJlZykg JiB+bWFzazsKKwlzNl9pMnNfd3JpdGVfcmVnKGRldiwgcmVnLCB2YWwpOworfQorCitzdGF0aWMg aW5saW5lIHZvaWQgczYwMDBfaTJzX3N0YXJ0X2NoYW5uZWwoc3RydWN0IHM2MDAwX2kyc19kZXYg KmRldiwKKwkJCQkJICAgaW50IGNoYW5uZWwpCit7CisJaW50IGksIGosIGN1ciwgcHJldjsKKwor CS8qCisJICogV2FpdCBmb3IgV0NMSyB0byB0b2dnbGUgNSB0aW1lcyBiZWZvcmUgZW5hYmxpbmcg dGhlIGNoYW5uZWwKKwkgKiBzNjAwMCBGYW1pbHkgRGF0YXNoZWV0IDMuNi40OgorCSAqICAgIkF0 IGxlYXN0IHR3byBjeWNsZXMgb2YgV1MgbXVzdCBvY2N1ciBiZXR3ZWVuIGNvbW1hbmRzCisJICog ICAgdG8gZGlzYWJsZSBvciBlbmFibGUgdGhlIGludGVyZmFjZSIKKwkgKi8KKwlqID0gMDsKKwlw cmV2ID0gflM2X0kyU19DVVJfV1M7CisJZm9yIChpID0gMTAwMDAwMDsgLS1pICYmIGogPCA2OyAp IHsKKwkJY3VyID0gczZfaTJzX3JlYWRfcmVnKGRldiwgUzZfSTJTX0lOVEVSRkFDRV9DRkcoY2hh bm5lbCkpCisJCSAgICAgICAmIFM2X0kyU19DVVJfV1M7CisJCWlmIChwcmV2ICE9IGN1cikgewor CQkJcHJldiA9IGN1cjsKKwkJCWorKzsKKwkJfQorCX0KKwlpZiAoaiA8IDYpCisJCXByaW50ayhL RVJOX1dBUk5JTkcgInM2MDAwLWkyczogdGltZW91dCB3YWl0aW5nIGZvciBXQ0xLXG4iKTsKKwor CXM2X2kyc193cml0ZV9yZWcoZGV2LCBTNl9JMlNfRU5BQkxFKGNoYW5uZWwpLCBTNl9JMlNfRU5B QkxFX0lGKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHM2MDAwX2kyc19zdG9wX2NoYW5uZWwo c3RydWN0IHM2MDAwX2kyc19kZXYgKmRldiwKKwkJCQkJICBpbnQgY2hhbm5lbCkKK3sKKwlzNl9p MnNfd3JpdGVfcmVnKGRldiwgUzZfSTJTX0VOQUJMRShjaGFubmVsKSwgUzZfSTJTX0RJU0FCTEVf SUYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgczYwMDBfaTJzX3N0YXJ0KHN0cnVjdCBzbmRf cGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1l ICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgczYwMDBfaTJzX2RldiAq ZGV2ID0gcnRkLT5kYWktPmNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwlpbnQgY2hhbm5lbDsKKwor CWNoYW5uZWwgPSAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFD SykgPworCQkJZGV2LT5jaGFubmVsX291dCA6IGRldi0+Y2hhbm5lbF9pbjsKKworCXM2MDAwX2ky c19zdGFydF9jaGFubmVsKGRldiwgY2hhbm5lbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBz NjAwMF9pMnNfc3RvcChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlz dHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7 CisJc3RydWN0IHM2MDAwX2kyc19kZXYgKmRldiA9IHJ0ZC0+ZGFpLT5jcHVfZGFpLT5wcml2YXRl X2RhdGE7CisJaW50IGNoYW5uZWw7CisKKwljaGFubmVsID0gKHN1YnN0cmVhbS0+c3RyZWFtID09 IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spID8KKwkJCWRldi0+Y2hhbm5lbF9vdXQgOiBkZXYt PmNoYW5uZWxfaW47CisKKwlzNjAwMF9pMnNfc3RvcF9jaGFubmVsKGRldiwgY2hhbm5lbCk7Cit9 CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHM2MDAwX2kyc19pbnRfc291cmNlcyhzdHJ1 Y3QgczYwMDBfaTJzX2RldiAqZGV2KQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nOworCXBlbmRp bmcgPSBzNl9pMnNfcmVhZF9yZWcoZGV2LCBTNl9JMlNfSU5URVJSVVBUX1JBVyk7CisJcGVuZGlu ZyAmPSBTNl9JMlNfSU5UX0FMSUdOTUVOVCB8CisJCSAgIFM2X0kyU19JTlRfVU5ERVJSVU4gfAor CQkgICBTNl9JMlNfSU5UX09WRVJSVU47CisJczZfaTJzX3dyaXRlX3JlZyhkZXYsIFM2X0kyU19J TlRFUlJVUFRfQ0xFQVIsIHBlbmRpbmcpOworCisJcmV0dXJuIHBlbmRpbmc7Cit9CisjZW5kaWYK ZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zNjAwMC9zNjAwMC1wY20uYyBiL3NvdW5kL3NvYy9zNjAw MC9zNjAwMC1wY20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGI1NDZj Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3M2MDAwL3M2MDAwLXBjbS5jCkBAIC0wLDAg KzEsNTE4IEBACisvKgorICogQUxTQSBQQ00gaW50ZXJmYWNlIGZvciB0aGUgU3RldGNoIHM2MDAw IGZhbWlseQorICoKKyAqIEF1dGhvcjogICAgICBEYW5pZWwgR2xvZWNrbmVyLCA8ZGdAZW1saXgu Y29tPgorICogQ29weXJpZ2h0OiAgIChDKSAyMDA5IGVtbGl4IEdtYkggPGluZm9AZW1saXguY29t PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5o PgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZp Y2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBp bmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgPHNvdW5kL2Nv cmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1z Lmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5j bHVkZSA8dmFyaWFudC9kbWFjLmg+CisKKyNpbmNsdWRlICJzNjAwMC1pMnMuaCIKKyNpbmNsdWRl ICJzNjAwMC1wY20uaCIKKworI2RlZmluZSBTNjAwMF9QQ01fREVCVUcgMAorI2lmIFM2MDAwX1BD TV9ERUJVRworI2RlZmluZSBEUFJJTlRLKHguLi4pIHByaW50ayhLRVJOX0RFQlVHIHgpCisjZWxz ZQorI2RlZmluZSBEUFJJTlRLKHguLi4pCisjZW5kaWYKKworI2RlZmluZSBTNl9QQ01fUFJFQUxM T0NBVEVfU0laRSAoOTYgKiAxMDI0KQorI2RlZmluZSBTNl9QQ01fUFJFQUxMT0NBVEVfTUFYICAo MjA0OCAqIDEwMjQpCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzNjAwMF9wY21f aGFyZHdhcmUgPSB7CisJLmluZm8gPSAoU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfCBTTkRS Vl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCSBTTkRSVl9QQ01fSU5GT19NTUFQIHwgU05E UlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CisJCSBTTkRSVl9QQ01fSU5GT19QQVVTRSB8IFNORFJW X1BDTV9JTkZPX0pPSU5UX0RVUExFWCksCisJLmZvcm1hdHMgPSAoU05EUlZfUENNX0ZNVEJJVF9T MTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSksCisJLnJhdGVzID0gKFNORFJWX1BDTV9S QVRFX0NPTlRJTlVPVVMgfCBTTkRSVl9QQ01fUkFURV9LTk9UIHwKKwkJICBTTkRSVl9QQ01fUkFU RV81NTEyIHwgU05EUlZfUENNX1JBVEVfODAwMF8xOTIwMDApLAorCS5yYXRlX21pbiA9IDAsCisJ LnJhdGVfbWF4ID0gMTU2MjUwMCwKKwkuY2hhbm5lbHNfbWluID0gMiwKKwkuY2hhbm5lbHNfbWF4 ID0gOCwKKwkuYnVmZmVyX2J5dGVzX21heCA9IDB4N2ZmZmZmZjAsCisJLnBlcmlvZF9ieXRlc19t aW4gPSAxNiwKKwkucGVyaW9kX2J5dGVzX21heCA9IDB4ZmZmZmYwLAorCS5wZXJpb2RzX21pbiA9 IDIsCisJLnBlcmlvZHNfbWF4ID0gMTAyNCwgLyogbm8gbGltaXQgKi8KKwkuZmlmb19zaXplID0g MCwKK307CisKK3N0cnVjdCBzNjAwMF9ydW50aW1lX2RhdGEgeworCXNwaW5sb2NrX3QgbG9jazsK KwlpbnQgcGVyaW9kOwkJLyogY3VycmVudCBETUEgcGVyaW9kICovCit9OworCitzdGF0aWMgdm9p ZCBzNjAwMF9wY21fZW5xdWV1ZV9kbWEoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJl YW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVu dGltZTsKKwlzdHJ1Y3QgczYwMDBfcnVudGltZV9kYXRhICpwcnRkID0gcnVudGltZS0+cHJpdmF0 ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpzb2NfcnVudGltZSA9IHN1YnN0 cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzNjAwMF9wY21fZG1hX3BhcmFtcyAqcGFyID0g c29jX3J1bnRpbWUtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGE7CisJaW50IGNoYW5uZWw7CisJdW5z aWduZWQgaW50IHBlcmlvZF9zaXplOworCXVuc2lnbmVkIGludCBkbWFfb2Zmc2V0OworCWRtYV9h ZGRyX3QgZG1hX3BvczsKKwlkbWFfYWRkcl90IHNyYywgZHN0OworCisJcGVyaW9kX3NpemUgPSBz bmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKKwlkbWFfb2Zmc2V0ID0gcHJ0ZC0+ cGVyaW9kICogcGVyaW9kX3NpemU7CisJZG1hX3BvcyA9IHJ1bnRpbWUtPmRtYV9hZGRyICsgZG1h X29mZnNldDsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BM QVlCQUNLKSB7CisJCXNyYyA9IGRtYV9wb3M7CisJCWRzdCA9IHBhci0+c2lmX291dDsKKwkJY2hh bm5lbCA9IHBhci0+ZG1hX291dDsKKwl9IGVsc2UgeworCQlzcmMgPSBwYXItPnNpZl9pbjsKKwkJ ZHN0ID0gZG1hX3BvczsKKwkJY2hhbm5lbCA9IHBhci0+ZG1hX2luOworCX0KKworCWlmICghczZk bWFjX2NoYW5uZWxfZW5hYmxlZChETUFfTUFTS19ETUFDKGNoYW5uZWwpLAorCQkJCSAgICBETUFf SU5ERVhfQ0hOTChjaGFubmVsKSkpCisJCXJldHVybjsKKworCWlmIChzNmRtYWNfZmlmb19mdWxs KERNQV9NQVNLX0RNQUMoY2hhbm5lbCksIERNQV9JTkRFWF9DSE5MKGNoYW5uZWwpKSkgeworCQlw cmludGsoS0VSTl9FUlIgInM2MDAwLXBjbTogZmlmbyBmdWxsXG4iKTsKKwkJcmV0dXJuOworCX0K KworCUJVR19PTihwZXJpb2Rfc2l6ZSAmIDE1KTsKKwlzNmRtYWNfcHV0X2ZpZm8oRE1BX01BU0tf RE1BQyhjaGFubmVsKSwgRE1BX0lOREVYX0NITkwoY2hhbm5lbCksCisJCQlzcmMsIGRzdCwgcGVy aW9kX3NpemUpOworCisJcHJ0ZC0+cGVyaW9kKys7CisJaWYgKHVubGlrZWx5KHBydGQtPnBlcmlv ZCA+PSBydW50aW1lLT5wZXJpb2RzKSkKKwkJcHJ0ZC0+cGVyaW9kID0gMDsKK30KKworc3RhdGlj IGlycXJldHVybl90IHM2MDAwX3BjbV9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1 Y3Qgc25kX3BjbSAqcGNtID0gZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnVu dGltZSA9IHBjbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzNjAwMF9wY21fZG1hX3BhcmFtcyAq cGFyYW1zID0gcnVudGltZS0+ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YTsKKwlzdHJ1Y3Qgc25kX3Bj bV9zdWJzdHJlYW0gKnBsYXliYWNrLCAqY2FwdHVyZTsKKwlzdHJ1Y3QgczYwMDBfcnVudGltZV9k YXRhICpwcnRkOworCXVuc2lnbmVkIGludCBpMnNfZXJyb3JzOworCWludCBpLCByZXQgPSBJUlFf Tk9ORTsKKwl1MzIgY2hhbm5lbFsyXSA9IHsKKwkJW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0td ID0gcGFyYW1zLT5kbWFfb3V0LAorCQlbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXSA9IHBhcmFt cy0+ZG1hX2luCisJfTsKKworCWkyc19lcnJvcnMgPSBzNjAwMF9pMnNfaW50X3NvdXJjZXMocnVu dGltZS0+ZGFpLT5jcHVfZGFpLT5wcml2YXRlX2RhdGEpOworCXBsYXliYWNrID0gcGNtLT5zdHJl YW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLnN1YnN0cmVhbTsKKwljYXB0dXJlID0gcGNt LT5zdHJlYW1zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uc3Vic3RyZWFtOworCisJaWYgKHVu bGlrZWx5KGkyc19lcnJvcnMgJiBTNl9JMlNfSU5UX0FMSUdOTUVOVCkpIHsKKwkJcHJpbnRrKEtF Uk5fRVJSICJzNjAwMC1pMnM6IEFsaWdubWVudCBFcnJvclxuIik7CisJCXJldCA9IElSUV9IQU5E TEVEOworCX0KKworCWlmICh1bmxpa2VseShpMnNfZXJyb3JzICYgUzZfSTJTX0lOVF9VTkRFUlJV TikgJiYKKwkgICAgcGxheWJhY2stPnJ1bnRpbWUgJiYKKwkgICAgc25kX3BjbV9ydW5uaW5nKHBs YXliYWNrKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzNjAwMC1pMnM6IFR4IFVuZGVycnVu XG4iKTsKKwkJczYwMDBfaTJzX3N0YXJ0KHBsYXliYWNrKTsKKworCQlwcnRkID0gcGxheWJhY2st PnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwkJc3Bpbl9sb2NrKCZwcnRkLT5sb2NrKTsKKwkJczYw MDBfcGNtX2VucXVldWVfZG1hKHBsYXliYWNrKTsKKwkJLyogYSBzZWNvbmQgZGVzY3JpcHRvciB3 aWxsIGJlIHF1ZXVlZCBiZWxvdyAqLworCQlzcGluX3VubG9jaygmcHJ0ZC0+bG9jayk7CisKKwkJ cmV0ID0gSVJRX0hBTkRMRUQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IDI7ICsraSkgeworCQlz dHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IHBjbS0+c3RyZWFtc1tpXS5zdWJz dHJlYW07CisJCXVuc2lnbmVkIGludCBwZW5kaW5nOworCisJCWlmICghY2hhbm5lbFtpXSkKKwkJ CWNvbnRpbnVlOworCisJCXBlbmRpbmcgPSBzNmRtYWNfaW50X3NvdXJjZXMoRE1BX01BU0tfRE1B QyhjaGFubmVsW2ldKSwKKwkJCQkJICAgICBETUFfSU5ERVhfQ0hOTChjaGFubmVsW2ldKSk7CisK KwkJaWYgKHBlbmRpbmcgJiAxKSB7CisJCQlyZXQgPSBJUlFfSEFORExFRDsKKwkJCWlmIChsaWtl bHkoc3Vic3RyZWFtLT5ydW50aW1lICYmCisJCQkJICAgc25kX3BjbV9ydW5uaW5nKHN1YnN0cmVh bSkpKSB7CisJCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOworCQkJCURQUklO VEsoInBlcmlvZCBlbGFwc2VkICV4ICV4XG4iLAorCQkJCSAgICAgICBzNmRtYWNfY3VyX3NyYyhE TUFfTUFTS19ETUFDKGNoYW5uZWxbaV0pLAorCQkJCQkJICAgRE1BX0lOREVYX0NITkwoY2hhbm5l bFtpXSkpLAorCQkJCSAgICAgICBzNmRtYWNfY3VyX2RzdChETUFfTUFTS19ETUFDKGNoYW5uZWxb aV0pLAorCQkJCQkJICAgRE1BX0lOREVYX0NITkwoY2hhbm5lbFtpXSkpKTsKKwkJCQlwcnRkID0g c3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisJCQkJc3Bpbl9sb2NrKCZwcnRkLT5s b2NrKTsKKwkJCQlzNjAwMF9wY21fZW5xdWV1ZV9kbWEoc3Vic3RyZWFtKTsKKwkJCQlzcGluX3Vu bG9jaygmcHJ0ZC0+bG9jayk7CisJCQl9CisJCX0KKworCQlpZiAodW5saWtlbHkocGVuZGluZyAm IH43KSkgeworCQkJaWYgKHBlbmRpbmcgJiAoMSA8PCAzKSkKKwkJCQlwcmludGsoS0VSTl9XQVJO SU5HCisJCQkJICAgICAgICJzNjAwMC1wY206IERNQSAleCBVbmRlcmZsb3dcbiIsCisJCQkJICAg ICAgIGNoYW5uZWxbaV0pOworCQkJaWYgKHBlbmRpbmcgJiAoMSA8PCA0KSkKKwkJCQlwcmludGso S0VSTl9XQVJOSU5HCisJCQkJICAgICAgICJzNjAwMC1wY206IERNQSAleCBPdmVyZmxvd1xuIiwK KwkJCQkgICAgICAgY2hhbm5lbFtpXSk7CisJCQlpZiAocGVuZGluZyAmIDB4MWUwKQorCQkJCXBy aW50ayhLRVJOX1dBUk5JTkcKKwkJCQkgICAgICAgInM2MDAwLXBjbTogRE1BICV4IE1hc3RlciBF cnJvciAiCisJCQkJICAgICAgICIobWFzayAleClcbiIsCisJCQkJICAgICAgIGNoYW5uZWxbaV0s IHBlbmRpbmcgPj4gNSk7CisKKwkJfQorCX0KKworCWlmICh1bmxpa2VseShpMnNfZXJyb3JzICYg UzZfSTJTX0lOVF9PVkVSUlVOKSAmJgorCSAgICBjYXB0dXJlLT5ydW50aW1lICYmCisJICAgIHNu ZF9wY21fcnVubmluZyhjYXB0dXJlKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzNjAwMC1p MnM6IFJ4IE92ZXJydW5cbiIpOworCisJCXBydGQgPSBjYXB0dXJlLT5ydW50aW1lLT5wcml2YXRl X2RhdGE7CisJCXNwaW5fbG9jaygmcHJ0ZC0+bG9jayk7CisJCXM2MDAwX3BjbV9lbnF1ZXVlX2Rt YShjYXB0dXJlKTsKKwkJc3Bpbl91bmxvY2soJnBydGQtPmxvY2spOworCisJCXM2MDAwX2kyc19z dGFydChjYXB0dXJlKTsKKwkJcmV0ID0gSVJRX0hBTkRMRUQ7CisJfQorCisJcmV0dXJuIHJldDsK K30KKworaW50IHM2MDAwX3BjbV9zdGFydChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0 cmVhbSkKK3sKKwlzdHJ1Y3QgczYwMDBfcnVudGltZV9kYXRhICpwcnRkID0gc3Vic3RyZWFtLT5y dW50aW1lLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnNvY19y dW50aW1lID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHM2MDAwX3BjbV9kbWFf cGFyYW1zICpwYXIgPSBzb2NfcnVudGltZS0+ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YTsKKwl1bnNp Z25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBydGQtPmxvY2ssIGZsYWdz KTsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNL KQorCQlzNmRtYWNfZW5hYmxlX2NoYW4oRE1BX01BU0tfRE1BQyhwYXItPmRtYV9vdXQpLAorCQkJ CSAgIERNQV9JTkRFWF9DSE5MKHBhci0+ZG1hX291dCksCisJCQkJICAgMSwgMCwgMSwgMCwgMCwg MCwgMCwgNCwgLTEsIDAsIDAsIDEpOworCWVsc2UKKwkJczZkbWFjX2VuYWJsZV9jaGFuKERNQV9N QVNLX0RNQUMocGFyLT5kbWFfaW4pLAorCQkJCSAgIERNQV9JTkRFWF9DSE5MKHBhci0+ZG1hX2lu KSwKKwkJCQkgICAxLCAwLCAwLCAxLCAwLCAwLCAwLCA0LCAtMSwgMCwgMCwgMSk7CisKKwlzNjAw MF9wY21fZW5xdWV1ZV9kbWEoc3Vic3RyZWFtKTsKKwlzNjAwMF9wY21fZW5xdWV1ZV9kbWEoc3Vi c3RyZWFtKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBydGQtPmxvY2ssIGZsYWdzKTsK KworCXJldHVybiAwOworfQorCitpbnQgczYwMDBfcGNtX3N0b3Aoc3RydWN0IHNuZF9wY21fc3Vi c3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHM2MDAwX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9 IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX3BjbV9y dW50aW1lICpzb2NfcnVudGltZSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBz NjAwMF9wY21fZG1hX3BhcmFtcyAqcGFyID0gc29jX3J1bnRpbWUtPmRhaS0+Y3B1X2RhaS0+ZG1h X2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgY2hhbm5lbDsKKworCWlmIChzdWJz dHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQljaGFubmVsID0g cGFyLT5kbWFfb3V0OworCWVsc2UKKwkJY2hhbm5lbCA9IHBhci0+ZG1hX2luOworCisJczZkbWFj X3NldF90ZXJtaW5hbF9jb3VudChETUFfTUFTS19ETUFDKGNoYW5uZWwpLAorCQkJCSAgRE1BX0lO REVYX0NITkwoY2hhbm5lbCksIDApOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBydGQtPmxvY2ss IGZsYWdzKTsKKworCXM2ZG1hY19kaXNhYmxlX2NoYW4oRE1BX01BU0tfRE1BQyhjaGFubmVsKSwg RE1BX0lOREVYX0NITkwoY2hhbm5lbCkpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJ0 ZC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczYwMDBfcGNt X3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7 CisJaW50IHJldCA9IDA7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VS X1NUQVJUOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgorCWNhc2UgU05EUlZfUENN X1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJW X1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJCXM2MDAwX2kyc19zdGFydChzdWJzdHJlYW0pOwor CQkJcmV0ID0gczYwMDBfcGNtX3N0YXJ0KHN1YnN0cmVhbSk7CisJCX0gZWxzZSB7CisJCQlyZXQg PSBzNjAwMF9wY21fc3RhcnQoc3Vic3RyZWFtKTsKKwkJCXM2MDAwX2kyc19zdGFydChzdWJzdHJl YW0pOworCQl9CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNl IFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVT RV9QVVNIOgorCQlzNjAwMF9pMnNfc3RvcChzdWJzdHJlYW0pOworCQlyZXQgPSBzNjAwMF9wY21f c3RvcChzdWJzdHJlYW0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOwor CX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgczYwMDBfcGNtX3ByZXBhcmUoc3Ry dWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHM2MDAwX3J1bnRp bWVfZGF0YSAqcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCisJcHJ0 ZC0+cGVyaW9kID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVz X3QgczYwMDBfcGNtX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0p Cit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnNvY19ydW50aW1lID0gc3Vic3RyZWFt LT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHM2MDAwX3BjbV9kbWFfcGFyYW1zICpwYXIgPSBzb2Nf cnVudGltZS0+ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1l ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzNjAwMF9ydW50aW1lX2Rh dGEgKnBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsK Kwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCWRtYV9hZGRyX3QgY291bnQ7CisKKwlzcGluX2xvY2tf aXJxc2F2ZSgmcHJ0ZC0+bG9jaywgZmxhZ3MpOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09 IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCWNvdW50ID0gczZkbWFjX2N1cl9zcmMoRE1B X01BU0tfRE1BQyhwYXItPmRtYV9vdXQpLAorCQkJCSAgICAgICBETUFfSU5ERVhfQ0hOTChwYXIt PmRtYV9vdXQpKTsKKwllbHNlCisJCWNvdW50ID0gczZkbWFjX2N1cl9kc3QoRE1BX01BU0tfRE1B QyhwYXItPmRtYV9pbiksCisJCQkJICAgICAgIERNQV9JTkRFWF9DSE5MKHBhci0+ZG1hX2luKSk7 CisKKwljb3VudCAtPSBydW50aW1lLT5kbWFfYWRkcjsKKworCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJnBydGQtPmxvY2ssIGZsYWdzKTsKKworCW9mZnNldCA9IGJ5dGVzX3RvX2ZyYW1lcyhydW50 aW1lLCBjb3VudCk7CisJaWYgKHVubGlrZWx5KG9mZnNldCA+PSBydW50aW1lLT5idWZmZXJfc2l6 ZSkpCisJCW9mZnNldCA9IDA7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCitzdGF0aWMgaW50IHM2 MDAwX3BjbV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0 cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpzb2NfcnVudGltZSA9IHN1YnN0cmVhbS0+cHJpdmF0 ZV9kYXRhOworCXN0cnVjdCBzNjAwMF9wY21fZG1hX3BhcmFtcyAqcGFyID0gc29jX3J1bnRpbWUt PmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGE7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGlt ZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgczYwMDBfcnVudGltZV9kYXRhICpwcnRk OworCWludCByZXQ7CisKKwlzbmRfc29jX3NldF9ydW50aW1lX2h3cGFyYW1zKHN1YnN0cmVhbSwg JnM2MDAwX3BjbV9oYXJkd2FyZSk7CisKKwlyZXQgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfc3Rl cChydW50aW1lLCAwLAorCQkJCQkgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9CWVRFUywgMTYp OworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldCA9IHNuZF9wY21faHdfY29uc3Ry YWludF9zdGVwKHJ1bnRpbWUsIDAsCisJCQkJCSBTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX0JZ VEVTLCAxNik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0ID0gc25kX3BjbV9o d19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwKKwkJCQkJICAgIFNORFJWX1BDTV9IV19QQVJB TV9QRVJJT0RTKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChwYXItPnNh bWVfcmF0ZSkgeworCQlpbnQgcmF0ZTsKKwkJc3Bpbl9sb2NrKCZwYXItPmxvY2spOyAvKiBuZWVk ZWQ/ICovCisJCXJhdGUgPSBwYXItPnJhdGU7CisJCXNwaW5fdW5sb2NrKCZwYXItPmxvY2spOwor CQlpZiAocmF0ZSAhPSAtMSkgeworCQkJcmV0ID0gc25kX3BjbV9od19jb25zdHJhaW50X21pbm1h eChydW50aW1lLAorCQkJCQkJCVNORFJWX1BDTV9IV19QQVJBTV9SQVRFLAorCQkJCQkJCXJhdGUs IHJhdGUpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXBy dGQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgczYwMDBfcnVudGltZV9kYXRhKSwgR0ZQX0tFUk5F TCk7CisJaWYgKHBydGQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tf aW5pdCgmcHJ0ZC0+bG9jayk7CisKKwlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBwcnRkOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczYwMDBfcGNtX2Nsb3NlKHN0cnVjdCBzbmRfcGNt X3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRp bWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHM2MDAwX3J1bnRpbWVfZGF0YSAqcHJ0 ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCWtmcmVlKHBydGQpOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgczYwMDBfcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJz dHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJh bXMpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnNvY19ydW50aW1lID0gc3Vic3Ry ZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHM2MDAwX3BjbV9kbWFfcGFyYW1zICpwYXIgPSBz b2NfcnVudGltZS0+ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YTsKKwlpbnQgcmV0OworCXJldCA9IHNu ZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sCisJCQkJICAgICAgIHBhcmFtc19idWZm ZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FS TklORyAiczYwMDAtcGNtOiBhbGxvY2F0aW9uIG9mIG1lbW9yeSBmYWlsZWRcbiIpOworCQlyZXR1 cm4gcmV0OworCX0KKworCWlmIChwYXItPnNhbWVfcmF0ZSkgeworCQlzcGluX2xvY2soJnBhci0+ bG9jayk7CisJCWlmIChwYXItPnJhdGUgPT0gLTEgfHwKKwkJICAgICEocGFyLT5pbl91c2UgJiB+ KDEgPDwgc3Vic3RyZWFtLT5zdHJlYW0pKSkgeworCQkJcGFyLT5yYXRlID0gcGFyYW1zX3JhdGUo aHdfcGFyYW1zKTsKKwkJCXBhci0+aW5fdXNlIHw9IDEgPDwgc3Vic3RyZWFtLT5zdHJlYW07CisJ CX0gZWxzZSBpZiAocGFyYW1zX3JhdGUoaHdfcGFyYW1zKSAhPSBwYXItPnJhdGUpIHsKKwkJCXNu ZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKKwkJCXBhci0+aW5fdXNlICY9IH4oMSA8 PCBzdWJzdHJlYW0tPnN0cmVhbSk7CisJCQlyZXQgPSAtRUJVU1k7CisJCX0KKwkJc3Bpbl91bmxv Y2soJnBhci0+bG9jayk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgczYwMDBf cGNtX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3Ry dWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnNvY19ydW50aW1lID0gc3Vic3RyZWFtLT5wcml2YXRl X2RhdGE7CisJc3RydWN0IHM2MDAwX3BjbV9kbWFfcGFyYW1zICpwYXIgPSBzb2NfcnVudGltZS0+ ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YTsKKworCXNwaW5fbG9jaygmcGFyLT5sb2NrKTsKKwlwYXIt PmluX3VzZSAmPSB+KDEgPDwgc3Vic3RyZWFtLT5zdHJlYW0pOworCWlmICghcGFyLT5pbl91c2Up CisJCXBhci0+cmF0ZSA9IC0xOworCXNwaW5fdW5sb2NrKCZwYXItPmxvY2spOworCisJcmV0dXJu IHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKK30KKworc3RydWN0IHNuZF9wY21f b3BzIHM2MDAwX3BjbV9vcHMgPSB7CisJLm9wZW4gPSAJczYwMDBfcGNtX29wZW4sCisJLmNsb3Nl ID0gCXM2MDAwX3BjbV9jbG9zZSwKKwkuaW9jdGwgPSAJc25kX3BjbV9saWJfaW9jdGwsCisJLmh3 X3BhcmFtcyA9IAlzNjAwMF9wY21faHdfcGFyYW1zLAorCS5od19mcmVlID0gCXM2MDAwX3BjbV9o d19mcmVlLAorCS50cmlnZ2VyID0JczYwMDBfcGNtX3RyaWdnZXIsCisJLnByZXBhcmUgPSAJczYw MDBfcGNtX3ByZXBhcmUsCisJLnBvaW50ZXIgPSAJczYwMDBfcGNtX3BvaW50ZXIsCit9OworCitz dGF0aWMgdm9pZCBzNjAwMF9wY21fZnJlZShzdHJ1Y3Qgc25kX3BjbSAqcGNtKQoreworCXN0cnVj dCBzbmRfc29jX3BjbV9ydW50aW1lICpydW50aW1lID0gcGNtLT5wcml2YXRlX2RhdGE7CisJc3Ry dWN0IHM2MDAwX3BjbV9kbWFfcGFyYW1zICpwYXJhbXMgPSBydW50aW1lLT5kYWktPmNwdV9kYWkt PmRtYV9kYXRhOworCisJZnJlZV9pcnEocGFyYW1zLT5pcnEsIHBjbSk7CisJc25kX3BjbV9saWJf cHJlYWxsb2NhdGVfZnJlZV9mb3JfYWxsKHBjbSk7Cit9CisKK3N0YXRpYyB1NjQgczYwMDBfcGNt X2RtYW1hc2sgPSBETUFfMzJCSVRfTUFTSzsKKworc3RhdGljIGludCBzNjAwMF9wY21fbmV3KHN0 cnVjdCBzbmRfY2FyZCAqY2FyZCwKKwkJCSBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgc3RydWN0 IHNuZF9wY20gKnBjbSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnVudGltZSA9 IHBjbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzNjAwMF9wY21fZG1hX3BhcmFtcyAqcGFyYW1z ID0gcnVudGltZS0+ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YTsKKwlpbnQgcmVzOworCisJaWYgKCFj YXJkLT5kZXYtPmRtYV9tYXNrKQorCQljYXJkLT5kZXYtPmRtYV9tYXNrID0gJnM2MDAwX3BjbV9k bWFtYXNrOworCWlmICghY2FyZC0+ZGV2LT5jb2hlcmVudF9kbWFfbWFzaykKKwkJY2FyZC0+ZGV2 LT5jb2hlcmVudF9kbWFfbWFzayA9IERNQV8zMkJJVF9NQVNLOworCisJaWYgKHBhcmFtcy0+ZG1h X2luKSB7CisJCXM2ZG1hY19kaXNhYmxlX2NoYW4oRE1BX01BU0tfRE1BQyhwYXJhbXMtPmRtYV9p biksCisJCQkJICAgIERNQV9JTkRFWF9DSE5MKHBhcmFtcy0+ZG1hX2luKSk7CisJCXM2ZG1hY19p bnRfc291cmNlcyhETUFfTUFTS19ETUFDKHBhcmFtcy0+ZG1hX2luKSwKKwkJCQkgICBETUFfSU5E RVhfQ0hOTChwYXJhbXMtPmRtYV9pbikpOworCX0KKworCWlmIChwYXJhbXMtPmRtYV9vdXQpIHsK KwkJczZkbWFjX2Rpc2FibGVfY2hhbihETUFfTUFTS19ETUFDKHBhcmFtcy0+ZG1hX291dCksCisJ CQkJICAgIERNQV9JTkRFWF9DSE5MKHBhcmFtcy0+ZG1hX291dCkpOworCQlzNmRtYWNfaW50X3Nv dXJjZXMoRE1BX01BU0tfRE1BQyhwYXJhbXMtPmRtYV9vdXQpLAorCQkJCSAgIERNQV9JTkRFWF9D SE5MKHBhcmFtcy0+ZG1hX291dCkpOworCX0KKworCXJlcyA9IHJlcXVlc3RfaXJxKHBhcmFtcy0+ aXJxLCBzNjAwMF9wY21faXJxLCBJUlFGX1NIQVJFRCwKKwkJCSAgczYwMDBfc29jX3BsYXRmb3Jt Lm5hbWUsIHBjbSk7CisJaWYgKHJlcykgeworCQlwcmludGsoS0VSTl9FUlIgInM2MDAwLXBjbSBj b3VsZG4ndCBnZXQgSVJRXG4iKTsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwlyZXMgPSBzbmRfcGNt X2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwKKwkJCQkJCSAgICBTTkRSVl9ETUFf VFlQRV9ERVYsCisJCQkJCQkgICAgY2FyZC0+ZGV2LAorCQkJCQkJICAgIFM2X1BDTV9QUkVBTExP Q0FURV9TSVpFLAorCQkJCQkJICAgIFM2X1BDTV9QUkVBTExPQ0FURV9NQVgpOworCWlmIChyZXMp CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInM2MDAwLXBjbTogcHJlYWxsb2NhdGlvbiBmYWlsZWRc biIpOworCisJc3Bpbl9sb2NrX2luaXQoJnBhcmFtcy0+bG9jayk7CisJcGFyYW1zLT5pbl91c2Ug PSAwOworCXBhcmFtcy0+cmF0ZSA9IC0xOworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc25kX3Nv Y19wbGF0Zm9ybSBzNjAwMF9zb2NfcGxhdGZvcm0gPSB7CisJLm5hbWUgPSAJInM2MDAwLWF1ZGlv IiwKKwkucGNtX29wcyA9IAkmczYwMDBfcGNtX29wcywKKwkucGNtX25ldyA9IAlzNjAwMF9wY21f bmV3LAorCS5wY21fZnJlZSA9IAlzNjAwMF9wY21fZnJlZSwKK307CitFWFBPUlRfU1lNQk9MX0dQ TChzNjAwMF9zb2NfcGxhdGZvcm0pOworCitzdGF0aWMgaW50IF9faW5pdCBzNjAwMF9wY21faW5p dCh2b2lkKQoreworCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX3BsYXRmb3JtKCZzNjAwMF9zb2Nf cGxhdGZvcm0pOworfQorbW9kdWxlX2luaXQoczYwMDBfcGNtX2luaXQpOworCitzdGF0aWMgdm9p ZCBfX2V4aXQgczYwMDBfcGNtX2V4aXQodm9pZCkKK3sKKwlzbmRfc29jX3VucmVnaXN0ZXJfcGxh dGZvcm0oJnM2MDAwX3NvY19wbGF0Zm9ybSk7Cit9Cittb2R1bGVfZXhpdChzNjAwMF9wY21fZXhp dCk7CisKK01PRFVMRV9BVVRIT1IoIkRhbmllbCBHbG9lY2tuZXIiKTsKK01PRFVMRV9ERVNDUklQ VElPTigiU3RyZXRjaCBzNjAwMCBmYW1pbHkgUENNIERNQSBtb2R1bGUiKTsKK01PRFVMRV9MSUNF TlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zNjAwMC9zNjAwMC1wY20uaCBiL3Nv dW5kL3NvYy9zNjAwMC9zNjAwMC1wY20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi44ZDczMDVmCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3M2MDAwL3M2MDAwLXBj bS5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBBTFNBIFBDTSBpbnRlcmZhY2UgZm9yIHRoZSBT dHJldGNoIHM2MDAwIGZhbWlseQorICoKKyAqIEF1dGhvcjogICAgICBEYW5pZWwgR2xvZWNrbmVy LCA8ZGdAZW1saXguY29tPgorICogQ29weXJpZ2h0OiAgIChDKSAyMDA5IGVtbGl4IEdtYkggPGlu Zm9AZW1saXguY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfUzYw MDBfUENNX0gKKyNkZWZpbmUgX1M2MDAwX1BDTV9ICisKK3N0cnVjdCBzNjAwMF9wY21fZG1hX3Bh cmFtcyB7CisJZG1hX2FkZHJfdCBzaWZfaW47CisJZG1hX2FkZHJfdCBzaWZfb3V0OworCXUzMiBk bWFfaW47CisJdTMyIGRtYV9vdXQ7CisJaW50IGlycTsKKwlpbnQgc2FtZV9yYXRlOworCisJc3Bp bmxvY2tfdCBsb2NrOworCWludCBpbl91c2U7CisJaW50IHJhdGU7Cit9OworCitzdHJ1Y3QgczYw MDBfc25kX3BsYXRmb3JtX2RhdGEgeworCWludCBsaW5lc19pbjsKKwlpbnQgbGluZXNfb3V0Owor CWludCBjaGFubmVsX2luOworCWludCBjaGFubmVsX291dDsKKwlpbnQgd2lkZTsKKwlpbnQgc2Ft ZV9yYXRlOworfTsKKworaW50IHM2MDAwX3BjbV9zdGFydChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJl YW0gKnN1YnN0cmVhbSk7CitpbnQgczYwMDBfcGNtX3N0b3Aoc3RydWN0IHNuZF9wY21fc3Vic3Ry ZWFtICpzdWJzdHJlYW0pOworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX3BsYXRmb3JtIHM2MDAwX3Nv Y19wbGF0Zm9ybTsKKworI2VuZGlmCi0tIAoxLjYuMi4xMDcuZ2U0N2VlCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBbHNhLWRldmVsIG1haWxpbmcgbGlz dApBbHNhLWRldmVsQGFsc2EtcHJvamVjdC5vcmcKaHR0cDovL21haWxtYW4uYWxzYS1wcm9qZWN0 Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Fsc2EtZGV2ZWwK