From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Anholt Subject: [PATCH v3 3/7] drm/vc4: Add KMS support for Raspberry Pi. Date: Fri, 9 Oct 2015 14:27:44 -0700 Message-ID: <1444426068-15817-4-git-send-email-eric@anholt.net> References: <1444426068-15817-1-git-send-email-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1444426068-15817-1-git-send-email-eric@anholt.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: devicetree@vger.kernel.org, Stephen Warren , Lee Jones , linux-kernel@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org VGhpcyBpcyBlbm91Z2ggZm9yIGZiY29uIGFuZCBicmluZ2luZyB1cCBYIHVzaW5nCnhmODYtdmlk ZW8tbW9kZXNldHRpbmcuICBJdCBkb2Vzbid0IHN1cHBvcnQgdGhlIDNEIGFjY2VsZXJhdG9yIG9y CnBvd2VyIG1hbmFnZW1lbnQgeWV0LgoKU2lnbmVkLW9mZi1ieTogRXJpYyBBbmhvbHQgPGVyaWNA YW5ob2x0Lm5ldD4KQWNrZWQtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwu Y2g+Ci0tLQoKdjI6IERyb3AgRkJfSEVMUEVSIHNlbGVjdCB0aGFua3MgdG8gQXJjaGl0J3MgcGF0 Y2hlcy4gIERvIG1hbnVhbCBpbml0CiAgICBvcmRlcmluZyBpbnN0ZWFkIG9mIHVzaW5nIHRoZSAu bG9hZCBob29rLiAgU3RydWN0dXJlIHJlZ2lzdHJhdGlvbgogICAgbW9yZSBsaWtlIHRlZ3JhJ3Ms IGJ1dCBzdGlsbCB1c2luZyB0aGUgdHlwaWNhbCAiY29tcG9uZW50IiBjb2RlLgogICAgRHJvcCBu by1vcCBob29rcyBmb3IgYXRvbWljX2JlZ2luIGFuZCBtb2RlX2ZpeHVwKCkgbm93IHRoYXQKICAg IHRoZXkncmUgb3B0aW9uYWwuICBEcm9wIHNlbnRpbmVsIGluIE1ha2VmaWxlLiAgRml4IG1pbm9y IHN0eWxlCiAgICBuaXRzIEkgbm90aWNlZCBvbiBhbm90aGVyIHJlcmVhZC4KCnYzOiBVc2UgdGhl IG5ldyBiY20yODM1IGNsayBkcml2ZXIgdG8gbWFuYWdlIHBpeGVsL0hTTSBjbG9ja3MgaW5zdGVh ZAogICAgb2YgaGF2aW5nIGEgZml4ZWQgdmlkZW8gbW9kZS4gIFVzZSBleHlub3Mtc3R5bGUgY29t cG9uZW50IGRyaXZlcgogICAgbWF0Y2hpbmcgaW5zdGVhZCBvZiBkZXZpY2V0cmVlIG5vZGVzIHRv IGxpc3QgdGhlIGNvbXBvbmVudCBkcml2ZXIKICAgIGluc3RhbmNlcy4gIFJlbmFtZSBjb21wYXRp YmlsaXR5IHN0cmluZ3MgdG8gc2F5IGJjbTI4MzUsIGFuZAogICAgZGlzdGluZ3Vpc2ggcHYwLzEv Mi4gIENsZWFuIHVwIHNvbWUgaC92c3luYyBjb2RlLCBhbmQgYWRkIGluCiAgICBpbnRlcmxhY2Vk IG1vZGUgc2V0dXAuICBGaXggdXAgcHJvYmUvYmluZCBlcnJvciBwYXRocy4gIFVzZQogICAgYml0 b3BzLmggbWFjcm9zIGZvciB2YzRfcmVncy5oCgogZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAg ICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgICB8ICAgMSAr CiBkcml2ZXJzL2dwdS9kcm0vdmM0L0tjb25maWcgICAgICAgfCAgMTMgKwogZHJpdmVycy9ncHUv ZHJtL3ZjNC9NYWtlZmlsZSAgICAgIHwgIDE3ICsKIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Jv LmMgICAgICB8ICA1MiArKysKIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2NydGMuYyAgICB8IDY3 NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJt L3ZjNC92YzRfZGVidWdmcy5jIHwgIDM5ICsrKwogZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2 LmMgICAgIHwgMjg0ICsrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Ry di5oICAgICB8IDExNSArKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9oZG1pLmMgICAg fCA1ODggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0v dmM0L3ZjNF9odnMuYyAgICAgfCAxNjMgKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vdmM0L3Zj NF9rbXMuYyAgICAgfCAgNTQgKysrCiBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9wbGFuZS5jICAg fCAzMjAgKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9yZWdzLmgg ICAgfCA1NzAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDE0IGZpbGVzIGNoYW5n ZWQsIDI4OTMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS92YzQvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92YzQvTWFr ZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfY3J0Yy5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZGVidWdmcy5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS92YzQvdmM0X2hkbWkuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS92YzQvdmM0X2h2cy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3Zj NC92YzRfa21zLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9w bGFuZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcmVncy5o CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0v S2NvbmZpZwppbmRleCAxYTBhOGRmLi5jNGJmOWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpAQCAtMjY0LDMgKzI2NCw1 IEBAIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3N0aS9LY29uZmlnIgogc291cmNlICJkcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGtmZC9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9p bXgvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL2dwdS9kcm0vdmM0L0tjb25maWciCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZp bGUKaW5kZXggNDVlNzcxOS4uMGVkYzllMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01h a2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtNDIsNiArNDIsNyBAQCBv YmotJChDT05GSUdfRFJNX01HQSkJKz0gbWdhLwogb2JqLSQoQ09ORklHX0RSTV9JODEwKQkrPSBp ODEwLwogb2JqLSQoQ09ORklHX0RSTV9JOTE1KSAgKz0gaTkxNS8KIG9iai0kKENPTkZJR19EUk1f TUdBRzIwMCkgKz0gbWdhZzIwMC8KK29iai0kKENPTkZJR19EUk1fVkM0KSAgKz0gdmM0Lwogb2Jq LSQoQ09ORklHX0RSTV9DSVJSVVNfUUVNVSkgKz0gY2lycnVzLwogb2JqLSQoQ09ORklHX0RSTV9T SVMpICAgKz0gc2lzLwogb2JqLSQoQ09ORklHX0RSTV9TQVZBR0UpKz0gc2F2YWdlLwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC9L Y29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MTBlZjcKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L0tjb25maWcKQEAgLTAsMCArMSwxMyBA QAorY29uZmlnIERSTV9WQzQKKwl0cmlzdGF0ZSAiQnJvYWRjb20gVkM0IEdyYXBoaWNzIgorCWRl cGVuZHMgb24gQVJDSF9CQ00yODM1CisJZGVwZW5kcyBvbiBEUk0KKwlzZWxlY3QgRFJNX0tNU19I RUxQRVIKKwlzZWxlY3QgRFJNX0tNU19DTUFfSEVMUEVSCisJaGVscAorCSAgQ2hvb3NlIHRoaXMg b3B0aW9uIGlmIHlvdSBoYXZlIGEgc3lzdGVtIHRoYXQgaGFzIGEgQnJvYWRjb20KKwkgIFZDNCBH UFUsIHN1Y2ggYXMgdGhlIFJhc3BiZXJyeSBQaSBvciBvdGhlciBCQ00yNzA4L0JDTTI4MzUuCisK KwkgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHRoYXQgImF2b2lkX3dhcm5pbmdzPTIiIGJlIHByZXNl bnQgaW4KKwkgIHRoZSBjb25maWcudHh0IGZvciB0aGUgZmlybXdhcmUsIHRvIGtlZXAgaXQgZnJv bSBzbWFzaGluZworCSAgb3VyIGRpc3BsYXkgc2V0dXAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vdmM0L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC9NYWtlZmlsZQpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmI0ZjljCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL3ZjNC9NYWtlZmlsZQpAQCAtMCwwICsxLDE3IEBACitjY2ZsYWdzLXkg Oj0gLUlpbmNsdWRlL2RybQorCisjIFBsZWFzZSBrZWVwIHRoZXNlIGJ1aWxkIGxpc3RzIHNvcnRl ZCEKKworIyBjb3JlIGRyaXZlciBjb2RlCit2YzQteSA6PSBcCisJdmM0X2JvLm8gXAorCXZjNF9j cnRjLm8gXAorCXZjNF9kcnYubyBcCisJdmM0X2ttcy5vIFwKKwl2YzRfaGRtaS5vIFwKKwl2YzRf aHZzLm8gXAorCXZjNF9wbGFuZS5vCisKK3ZjNC0kKENPTkZJR19ERUJVR19GUykgKz0gdmM0X2Rl YnVnZnMubworCitvYmotJChDT05GSUdfRFJNX1ZDNCkgICs9IHZjNC5vCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfYm8u YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjlmNTEwCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfYm8uYwpAQCAtMCwwICsxLDUyIEBACisv KgorICogIENvcHlyaWdodCDCqSAyMDE1IEJyb2FkY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy c2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K KyAqLworCisvKiBET0M6IFZDNCBHRU0gQk8gbWFuYWdlbWVudCBzdXBwb3J0LgorICoKKyAqIFRo ZSBWQzQgR1BVIGFyY2hpdGVjdHVyZSAoYm90aCBzY2Fub3V0IGFuZCByZW5kZXJpbmcpIGhhcyBk aXJlY3QKKyAqIGFjY2VzcyB0byBzeXN0ZW0gbWVtb3J5IHdpdGggbm8gTU1VIGluIGJldHdlZW4u ICBUbyBzdXBwb3J0IGl0LCB3ZQorICogdXNlIHRoZSBHRU0gQ01BIGhlbHBlciBmdW5jdGlvbnMg dG8gYWxsb2NhdGUgY29udGlndW91cyByYW5nZXMgb2YKKyAqIHBoeXNpY2FsIG1lbW9yeSBmb3Ig b3VyIEJPcy4KKyAqLworCisjaW5jbHVkZSAidmM0X2Rydi5oIgorCitzdHJ1Y3QgdmM0X2JvICp2 YzRfYm9fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHNpemVfdCBzaXplKQoreworCXN0 cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKmNtYV9vYmo7CisKKwljbWFfb2JqID0gZHJtX2dlbV9j bWFfY3JlYXRlKGRldiwgc2l6ZSk7CisJaWYgKElTX0VSUihjbWFfb2JqKSkKKwkJcmV0dXJuIE5V TEw7CisJZWxzZQorCQlyZXR1cm4gdG9fdmM0X2JvKCZjbWFfb2JqLT5iYXNlKTsKK30KKworaW50 IHZjNF9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJICAgIHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCisJCSAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFy Z3MpCit7CisJaW50IG1pbl9waXRjaCA9IERJVl9ST1VORF9VUChhcmdzLT53aWR0aCAqIGFyZ3Mt PmJwcCwgOCk7CisJc3RydWN0IHZjNF9ibyAqYm8gPSBOVUxMOworCWludCByZXQ7CisKKwlpZiAo YXJncy0+cGl0Y2ggPCBtaW5fcGl0Y2gpCisJCWFyZ3MtPnBpdGNoID0gbWluX3BpdGNoOworCisJ aWYgKGFyZ3MtPnNpemUgPCBhcmdzLT5waXRjaCAqIGFyZ3MtPmhlaWdodCkKKwkJYXJncy0+c2l6 ZSA9IGFyZ3MtPnBpdGNoICogYXJncy0+aGVpZ2h0OworCisJYm8gPSB2YzRfYm9fY3JlYXRlKGRl diwgcm91bmR1cChhcmdzLT5zaXplLCBQQUdFX1NJWkUpKTsKKwlpZiAoIWJvKQorCQlyZXR1cm4g LUVOT01FTTsKKworCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsICZiby0+ YmFzZS5iYXNlLCAmYXJncy0+aGFuZGxlKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91 bmxvY2tlZCgmYm8tPmJhc2UuYmFzZSk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRf Y3J0Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZTZiZDEKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9jcnRjLmMKQEAgLTAsMCArMSw2 NzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQnJvYWRjb20KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgorICovCisKKy8qKgorICogRE9DOiBWQzQgQ1JUQyBtb2R1bGUKKyAqCisgKiBJbiBW QzQsIHRoZSBQaXhlbCBWYWx2ZSBpcyB3aGF0IG1vc3QgY2xvc2VseSBjb3JyZXNwb25kcyB0byB0 aGUKKyAqIERSTSdzIGNvbmNlcHQgb2YgYSBDUlRDLiAgVGhlIFBWIGdlbmVyYXRlcyB2aWRlbyB0 aW1pbmdzIGZyb20gdGhlCisgKiBvdXRwdXQncyBjbG9jayBwbHVzIGl0cyBjb25maWd1cmF0aW9u LiAgSXQgcHVsbHMgc2NhbGVkIHBpeGVscyBmcm9tCisgKiB0aGUgSFZTIGF0IHRoYXQgdGltaW5n LCBhbmQgZmVlZHMgaXQgdG8gdGhlIGVuY29kZXIuCisgKgorICogSG93ZXZlciwgdGhlIERSTSBD UlRDIGFsc28gY29sbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYWxsIHRoZQorICogRFJNIHBs YW5lcyBhdHRhY2hlZCB0byBpdC4gIEFzIGEgcmVzdWx0LCB0aGlzIGZpbGUgYWxzbyBtYW5hZ2Vz CisgKiBzZXR1cCBvZiB0aGUgVkM0IEhWUydzIGRpc3BsYXkgZWxlbWVudHMgb24gdGhlIENSVEMu CisgKgorICogVGhlIDI4MzUgaGFzIDMgZGlmZmVyZW50IHBpeGVsIHZhbHZlcy4gIHB2MCBpbiB0 aGUgYXVkaW8gcG93ZXIKKyAqIGRvbWFpbiBmZWVkcyBEU0kwIG9yIERQSSwgd2hpbGUgcHYxIGZl ZWRzIERTMSBvciBTTUkuICBwdjIgaW4gdGhlCisgKiBpbWFnZSBkb21haW4gY2FuIGZlZWQgZWl0 aGVyIEhETUkgb3IgdGhlIFNEVFYgY29udHJvbGxlci4gIFRoZQorICogcGl4ZWwgdmFsdmUgY2hv b3NlcyBmcm9tIHRoZSBDUFJNQU4gY2xvY2tzIChIU00gZm9yIEhETUksIFZFQyBmb3IKKyAqIFNE VFYsIGV0Yy4pIGFjY29yZGluZyB0byB3aGljaCBvdXRwdXQgdHlwZSBpcyBjaG9zZW4gaW4gdGhl IG11eC4KKyAqCisgKiBGb3IgcG93ZXIgbWFuYWdlbWVudCwgdGhlIHBpeGVsIHZhbHZlJ3MgcmVn aXN0ZXJzIGFyZSBhbGwgY2xvY2tlZAorICogYnkgdGhlIEFYSSBjbG9jaywgd2hpbGUgdGhlIHRp bWluZ3MgYW5kIEZJRk9zIG1ha2UgdXNlIG9mIHRoZQorICogb3V0cHV0LXNwZWNpZmljIGNsb2Nr LiAgU2luY2UgdGhlIGVuY29kZXJzIGFsc28gZGlyZWN0bHkgY29uc3VtZQorICogdGhlIENQUk1B TiBjbG9ja3MsIGFuZCBrbm93IHdoYXQgdGltaW5ncyB0aGV5IG5lZWQsIHRoZXkgYXJlIHRoZQor ICogb25lcyB0aGF0IHNldCB0aGUgY2xvY2suCisgKi8KKworI2luY2x1ZGUgImRybV9hdG9taWMu aCIKKyNpbmNsdWRlICJkcm1fYXRvbWljX2hlbHBlci5oIgorI2luY2x1ZGUgImRybV9jcnRjX2hl bHBlci5oIgorI2luY2x1ZGUgImxpbnV4L2Nsay5oIgorI2luY2x1ZGUgImxpbnV4L2NvbXBvbmVu dC5oIgorI2luY2x1ZGUgImxpbnV4L29mX2RldmljZS5oIgorI2luY2x1ZGUgInZjNF9kcnYuaCIK KyNpbmNsdWRlICJ2YzRfcmVncy5oIgorCitzdHJ1Y3QgdmM0X2NydGMgeworCXN0cnVjdCBkcm1f Y3J0YyBiYXNlOworCWNvbnN0IHN0cnVjdCB2YzRfY3J0Y19kYXRhICpkYXRhOworCXZvaWQgX19p b21lbSAqcmVnczsKKworCS8qIFdoaWNoIEhWUyBjaGFubmVsIHdlJ3JlIHVzaW5nIGZvciBvdXIg Q1JUQy4gKi8KKwlpbnQgY2hhbm5lbDsKKworCS8qIFBvaW50ZXIgdG8gdGhlIGFjdHVhbCBoYXJk d2FyZSBkaXNwbGF5IGxpc3QgbWVtb3J5IGZvciB0aGUKKwkgKiBjcnRjLgorCSAqLworCXUzMiBf X2lvbWVtICpkbGlzdDsKKworCXUzMiBkbGlzdF9zaXplOyAvKiBpbiBkd29yZHMgKi8KKworCXN0 cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50OworfTsKKworc3RhdGljIGlubGlu ZSBzdHJ1Y3QgdmM0X2NydGMgKgordG9fdmM0X2NydGMoc3RydWN0IGRybV9jcnRjICpjcnRjKQor eworCXJldHVybiAoc3RydWN0IHZjNF9jcnRjICopY3J0YzsKK30KKworc3RydWN0IHZjNF9jcnRj X2RhdGEgeworCS8qIFdoaWNoIGNoYW5uZWwgb2YgdGhlIEhWUyB0aGlzIHBpeGVsdmFsdmUgc291 cmNlcyBmcm9tLiAqLworCWludCBodnNfY2hhbm5lbDsKKworCWVudW0gdmM0X2VuY29kZXJfdHlw ZSBlbmNvZGVyMF90eXBlOworCWVudW0gdmM0X2VuY29kZXJfdHlwZSBlbmNvZGVyMV90eXBlOwor fTsKKworI2RlZmluZSBDUlRDX1dSSVRFKG9mZnNldCwgdmFsKSB3cml0ZWwodmFsLCB2YzRfY3J0 Yy0+cmVncyArIChvZmZzZXQpKQorI2RlZmluZSBDUlRDX1JFQUQob2Zmc2V0KSByZWFkbCh2YzRf Y3J0Yy0+cmVncyArIChvZmZzZXQpKQorCisjZGVmaW5lIENSVENfUkVHKHJlZykgeyByZWcsICNy ZWcgfQorc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJdTMyIHJlZzsKKwljb25zdCBjaGFyICpuYW1l OworfSBjcnRjX3JlZ3NbXSA9IHsKKwlDUlRDX1JFRyhQVl9DT05UUk9MKSwKKwlDUlRDX1JFRyhQ Vl9WX0NPTlRST0wpLAorCUNSVENfUkVHKFBWX1ZTWU5DRCksCisJQ1JUQ19SRUcoUFZfSE9SWkEp LAorCUNSVENfUkVHKFBWX0hPUlpCKSwKKwlDUlRDX1JFRyhQVl9WRVJUQSksCisJQ1JUQ19SRUco UFZfVkVSVEIpLAorCUNSVENfUkVHKFBWX1ZFUlRBX0VWRU4pLAorCUNSVENfUkVHKFBWX1ZFUlRC X0VWRU4pLAorCUNSVENfUkVHKFBWX0lOVEVOKSwKKwlDUlRDX1JFRyhQVl9JTlRTVEFUKSwKKwlD UlRDX1JFRyhQVl9TVEFUKSwKKwlDUlRDX1JFRyhQVl9IQUNUX0FDVCksCit9OworCitzdGF0aWMg dm9pZCB2YzRfY3J0Y19kdW1wX3JlZ3Moc3RydWN0IHZjNF9jcnRjICp2YzRfY3J0YykKK3sKKwlp bnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNydGNfcmVncyk7IGkrKykgewor CQlEUk1fSU5GTygiMHglMDR4ICglcyk6IDB4JTA4eFxuIiwKKwkJCSBjcnRjX3JlZ3NbaV0ucmVn LCBjcnRjX3JlZ3NbaV0ubmFtZSwKKwkJCSBDUlRDX1JFQUQoY3J0Y19yZWdzW2ldLnJlZykpOwor CX0KK30KKworI2lmZGVmIENPTkZJR19ERUJVR19GUworaW50IHZjNF9jcnRjX2RlYnVnZnNfcmVn cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9f bm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKW0tPnByaXZhdGU7CisJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJaW50IGNydGNfaW5kZXggPSAo dWludHB0cl90KW5vZGUtPmluZm9fZW50LT5kYXRhOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsK KwlzdHJ1Y3QgdmM0X2NydGMgKnZjNF9jcnRjOworCWludCBpOworCisJaSA9IDA7CisJbGlzdF9m b3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsK KwkJaWYgKGkgPT0gY3J0Y19pbmRleCkKKwkJCWJyZWFrOworCQlpKys7CisJfQorCWlmICghY3J0 YykKKwkJcmV0dXJuIDA7CisJdmM0X2NydGMgPSB0b192YzRfY3J0YyhjcnRjKTsKKworCWZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNydGNfcmVncyk7IGkrKykgeworCQlzZXFfcHJpbnRmKG0s ICIlcyAoMHglMDR4KTogMHglMDh4XG4iLAorCQkJICAgY3J0Y19yZWdzW2ldLm5hbWUsIGNydGNf cmVnc1tpXS5yZWcsCisJCQkgICBDUlRDX1JFQUQoY3J0Y19yZWdzW2ldLnJlZykpOworCX0KKwor CXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHZjNF9jcnRjX2Rlc3Ryb3koc3Ry dWN0IGRybV9jcnRjICpjcnRjKQoreworCWRybV9jcnRjX2NsZWFudXAoY3J0Yyk7Cit9CisKK3N0 YXRpYyB1MzIgdmM0X2dldF9maWZvX2Z1bGxfbGV2ZWwodTMyIGZvcm1hdCkKK3sKKwlzdGF0aWMg Y29uc3QgdTMyIGZpZm9fbGVuX2J5dGVzID0gNjQ7CisJc3RhdGljIGNvbnN0IHUzMiBodnNfbGF0 ZW5jeV9waXggPSA2OworCisJc3dpdGNoIChmb3JtYXQpIHsKKwljYXNlIFBWX0NPTlRST0xfRk9S TUFUX0RTSVZfMTY6CisJY2FzZSBQVl9DT05UUk9MX0ZPUk1BVF9EU0lDXzE2OgorCQlyZXR1cm4g Zmlmb19sZW5fYnl0ZXMgLSAyICogaHZzX2xhdGVuY3lfcGl4OworCWNhc2UgUFZfQ09OVFJPTF9G T1JNQVRfRFNJVl8xODoKKwkJcmV0dXJuIGZpZm9fbGVuX2J5dGVzIC0gMTQ7CisJY2FzZSBQVl9D T05UUk9MX0ZPUk1BVF8yNDoKKwljYXNlIFBWX0NPTlRST0xfRk9STUFUX0RTSVZfMjQ6CisJZGVm YXVsdDoKKwkJcmV0dXJuIGZpZm9fbGVuX2J5dGVzIC0gMyAqIGh2c19sYXRlbmN5X3BpeDsKKwl9 Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBjbG9jayBzZWxlY3QgYml0IGZvciB0aGUgY29ubmVj dG9yIGF0dGFjaGVkIHRvIHRoZQorICogQ1JUQy4KKyAqLworc3RhdGljIGludCB2YzRfZ2V0X2Ns b2NrX3NlbGVjdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvcjsKKworCWRybV9mb3JfZWFjaF9jb25uZWN0b3IoY29ubmVjdG9yLCBjcnRj LT5kZXYpIHsKKwkJaWYgKGNvbm5lY3RvciAmJiBjb25uZWN0b3ItPnN0YXRlLT5jcnRjID09IGNy dGMpIHsKKwkJCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IGNvbm5lY3Rvci0+ZW5jb2Rl cjsKKwkJCXN0cnVjdCB2YzRfZW5jb2RlciAqdmM0X2VuY29kZXIgPQorCQkJCXRvX3ZjNF9lbmNv ZGVyKGVuY29kZXIpOworCisJCQlyZXR1cm4gdmM0X2VuY29kZXItPmNsb2NrX3NlbGVjdDsKKwkJ fQorCX0KKworCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgdmM0X2NydGNfbW9kZV9zZXRf bm9mYihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IHZjNF9jcnRjICp2YzRfY3J0 YyA9IHRvX3ZjNF9jcnRjKGNydGMpOworCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUgPSBj cnRjLT5zdGF0ZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZzdGF0ZS0+YWRq dXN0ZWRfbW9kZTsKKwlib29sIGludGVybGFjZSA9IG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxB R19JTlRFUkxBQ0U7CisJdTMyIHZhY3RpdmUgPSAobW9kZS0+dmRpc3BsYXkgPj4gKGludGVybGFj ZSA/IDEgOiAwKSk7CisJdTMyIGZvcm1hdCA9IFBWX0NPTlRST0xfRk9STUFUXzI0OworCWJvb2wg ZGVidWdfZHVtcF9yZWdzID0gZmFsc2U7CisJaW50IGNsb2NrX3NlbGVjdCA9IHZjNF9nZXRfY2xv Y2tfc2VsZWN0KGNydGMpOworCisJaWYgKGRlYnVnX2R1bXBfcmVncykgeworCQlEUk1fSU5GTygi Q1JUQyAlZCByZWdzIGJlZm9yZTpcbiIsIGRybV9jcnRjX2luZGV4KGNydGMpKTsKKwkJdmM0X2Ny dGNfZHVtcF9yZWdzKHZjNF9jcnRjKTsKKwl9CisKKwkvKiBSZXNldCB0aGUgUFYgZmlmby4gKi8K KwlDUlRDX1dSSVRFKFBWX0NPTlRST0wsIDApOworCUNSVENfV1JJVEUoUFZfQ09OVFJPTCwgUFZf Q09OVFJPTF9GSUZPX0NMUiB8IFBWX0NPTlRST0xfRU4pOworCUNSVENfV1JJVEUoUFZfQ09OVFJP TCwgMCk7CisKKwlDUlRDX1dSSVRFKFBWX0hPUlpBLAorCQkgICBWQzRfU0VUX0ZJRUxEKG1vZGUt Pmh0b3RhbCAtIG1vZGUtPmhzeW5jX2VuZCwKKwkJCQkgUFZfSE9SWkFfSEJQKSB8CisJCSAgIFZD NF9TRVRfRklFTEQobW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQsCisJCQkJIFBW X0hPUlpBX0hTWU5DKSk7CisJQ1JUQ19XUklURShQVl9IT1JaQiwKKwkJICAgVkM0X1NFVF9GSUVM RChtb2RlLT5oc3luY19zdGFydCAtIG1vZGUtPmhkaXNwbGF5LAorCQkJCSBQVl9IT1JaQl9IRlAp IHwKKwkJICAgVkM0X1NFVF9GSUVMRChtb2RlLT5oZGlzcGxheSwgUFZfSE9SWkJfSEFDVElWRSkp OworCisJaWYgKGludGVybGFjZSkgeworCQlDUlRDX1dSSVRFKFBWX1ZFUlRBX0VWRU4sCisJCQkg ICBWQzRfU0VUX0ZJRUxEKG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5jX2VuZCAtIDEsCisJCQkJ CSBQVl9WRVJUQV9WQlApIHwKKwkJCSAgIFZDNF9TRVRfRklFTEQobW9kZS0+dnN5bmNfZW5kIC0g bW9kZS0+dnN5bmNfc3RhcnQsCisJCQkJCSBQVl9WRVJUQV9WU1lOQykpOworCQlDUlRDX1dSSVRF KFBWX1ZFUlRCX0VWRU4sCisJCQkgICBWQzRfU0VUX0ZJRUxEKG1vZGUtPnZzeW5jX3N0YXJ0IC0g bW9kZS0+dmRpc3BsYXksCisJCQkJCSBQVl9WRVJUQl9WRlApIHwKKwkJCSAgIFZDNF9TRVRfRklF TEQodmFjdGl2ZSwgUFZfVkVSVEJfVkFDVElWRSkpOworCX0KKworCUNSVENfV1JJVEUoUFZfSEFD VF9BQ1QsIG1vZGUtPmhkaXNwbGF5KTsKKworCUNSVENfV1JJVEUoUFZfVl9DT05UUk9MLAorCQkg ICBQVl9WQ09OVFJPTF9DT05USU5VT1VTIHwKKwkJICAgKGludGVybGFjZSA/IFBWX1ZDT05UUk9M X0lOVEVSTEFDRSA6IDApKTsKKworCUNSVENfV1JJVEUoUFZfQ09OVFJPTCwKKwkJICAgVkM0X1NF VF9GSUVMRChmb3JtYXQsIFBWX0NPTlRST0xfRk9STUFUKSB8CisJCSAgIFZDNF9TRVRfRklFTEQo dmM0X2dldF9maWZvX2Z1bGxfbGV2ZWwoZm9ybWF0KSwKKwkJCQkgUFZfQ09OVFJPTF9GSUZPX0xF VkVMKSB8CisJCSAgIFBWX0NPTlRST0xfQ0xSX0FUX1NUQVJUIHwKKwkJICAgUFZfQ09OVFJPTF9U UklHR0VSX1VOREVSRkxPVyB8CisJCSAgIFBWX0NPTlRST0xfV0FJVF9IU1RBUlQgfAorCQkgICBW QzRfU0VUX0ZJRUxEKGNsb2NrX3NlbGVjdCwgUFZfQ09OVFJPTF9DTEtfU0VMRUNUKSB8CisJCSAg IFBWX0NPTlRST0xfRklGT19DTFIgfAorCQkgICBQVl9DT05UUk9MX0VOKTsKKworCWlmIChkZWJ1 Z19kdW1wX3JlZ3MpIHsKKwkJRFJNX0lORk8oIkNSVEMgJWQgcmVncyBhZnRlcjpcbiIsIGRybV9j cnRjX2luZGV4KGNydGMpKTsKKwkJdmM0X2NydGNfZHVtcF9yZWdzKHZjNF9jcnRjKTsKKwl9Cit9 CisKK3N0YXRpYyB2b2lkIHJlcXVpcmVfaHZzX2VuYWJsZWQoc3RydWN0IGRybV9kZXZpY2UgKmRl dikKK3sKKwlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOworCisJV0FSTl9P Tl9PTkNFKChIVlNfUkVBRChTQ0FMRVJfRElTUENUUkwpICYgU0NBTEVSX0RJU1BDVFJMX0VOQUJM RSkgIT0KKwkJICAgICBTQ0FMRVJfRElTUENUUkxfRU5BQkxFKTsKK30KKworc3RhdGljIHZvaWQg dmM0X2NydGNfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2Rl dihkZXYpOworCXN0cnVjdCB2YzRfY3J0YyAqdmM0X2NydGMgPSB0b192YzRfY3J0YyhjcnRjKTsK Kwl1MzIgY2hhbiA9IHZjNF9jcnRjLT5jaGFubmVsOworCisJcmVxdWlyZV9odnNfZW5hYmxlZChk ZXYpOworCisJQ1JUQ19XUklURShQVl9WX0NPTlRST0wsCisJCSAgIENSVENfUkVBRChQVl9WX0NP TlRST0wpICYgflBWX1ZDT05UUk9MX1ZJREVOKTsKKwl3aGlsZSAoQ1JUQ19SRUFEKFBWX1ZfQ09O VFJPTCkgJiBQVl9WQ09OVFJPTF9WSURFTikKKwkJY3B1X3JlbGF4KCk7CisKKwkvKiBXaXRob3V0 IGEgd2FpdCBoZXJlLCB3ZSBlbmQgdXAgd2l0aCBhIGJsYWNrIHNjcmVlbi4gKi8KKwltc2xlZXAo MzApOworCisJaWYgKEhWU19SRUFEKFNDQUxFUl9ESVNQQ1RSTFgoY2hhbikpICYKKwkgICAgU0NB TEVSX0RJU1BDVFJMWF9FTkFCTEUpIHsKKwkJSFZTX1dSSVRFKFNDQUxFUl9ESVNQQ1RSTFgoY2hh biksCisJCQkgIFNDQUxFUl9ESVNQQ1RSTFhfUkVTRVQpOworCisJCS8qIFdoaWxlIHRoZSBkb2Nz IHNheSB0aGF0IHJlc2V0IGlzIHNlbGYtY2xlYXJpbmcsIGl0CisJCSAqIHNlZW1zIGl0IGRvZXNu J3QgYWN0dWFsbHkuCisJCSAqLworCQlIVlNfV1JJVEUoU0NBTEVSX0RJU1BDVFJMWChjaGFuKSwg MCk7CisJfQorCisJLyogT25jZSB3ZSBsZWF2ZSwgdGhlIHNjYWxlciBzaG91bGQgYmUgZGlzYWJs ZWQgYW5kIGl0cyBmaWZvIGVtcHR5LiAqLworCisJV0FSTl9PTl9PTkNFKEhWU19SRUFEKFNDQUxF Ul9ESVNQQ1RSTFgoY2hhbikpICYgU0NBTEVSX0RJU1BDVFJMWF9SRVNFVCk7CisKKwlXQVJOX09O X09OQ0UoVkM0X0dFVF9GSUVMRChIVlNfUkVBRChTQ0FMRVJfRElTUFNUQVRYKGNoYW4pKSwKKwkJ CQkgICBTQ0FMRVJfRElTUFNUQVRYX01PREUpICE9CisJCSAgICAgU0NBTEVSX0RJU1BTVEFUWF9N T0RFX0RJU0FCTEVEKTsKKworCVdBUk5fT05fT05DRSgoSFZTX1JFQUQoU0NBTEVSX0RJU1BTVEFU WChjaGFuKSkgJgorCQkgICAgICAoU0NBTEVSX0RJU1BTVEFUWF9GVUxMIHwgU0NBTEVSX0RJU1BT VEFUWF9FTVBUWSkpICE9CisJCSAgICAgU0NBTEVSX0RJU1BTVEFUWF9FTVBUWSk7Cit9CisKK3N0 YXRpYyB2b2lkIHZjNF9jcnRjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0g dG9fdmM0X2RldihkZXYpOworCXN0cnVjdCB2YzRfY3J0YyAqdmM0X2NydGMgPSB0b192YzRfY3J0 YyhjcnRjKTsKKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlID0gY3J0Yy0+c3RhdGU7CisJ c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmc3RhdGUtPmFkanVzdGVkX21vZGU7CisK KwlyZXF1aXJlX2h2c19lbmFibGVkKGRldik7CisKKwkvKiBUdXJuIG9uIHRoZSBzY2FsZXIsIHdo aWNoIHdpbGwgd2FpdCBmb3IgdnN0YXJ0IHRvIHN0YXJ0CisJICogY29tcG9zaXRpbmcuCisJICov CisJSFZTX1dSSVRFKFNDQUxFUl9ESVNQQ1RSTFgodmM0X2NydGMtPmNoYW5uZWwpLAorCQkgIFZD NF9TRVRfRklFTEQobW9kZS0+aGRpc3BsYXksIFNDQUxFUl9ESVNQQ1RSTFhfV0lEVEgpIHwKKwkJ ICBWQzRfU0VUX0ZJRUxEKG1vZGUtPnZkaXNwbGF5LCBTQ0FMRVJfRElTUENUUkxYX0hFSUdIVCkg fAorCQkgIFNDQUxFUl9ESVNQQ1RSTFhfRU5BQkxFKTsKKworCS8qIFR1cm4gb24gdGhlIHBpeGVs IHZhbHZlLCB3aGljaCB3aWxsIGVtaXQgdGhlIHZzdGFydCBzaWduYWwuICovCisJQ1JUQ19XUklU RShQVl9WX0NPTlRST0wsCisJCSAgIENSVENfUkVBRChQVl9WX0NPTlRST0wpIHwgUFZfVkNPTlRS T0xfVklERU4pOworfQorCitzdGF0aWMgaW50IHZjNF9jcnRjX2F0b21pY19jaGVjayhzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsCisJCQkJIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCit7CisJ c3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgdmM0X2RldiAqdmM0 ID0gdG9fdmM0X2RldihkZXYpOworCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOworCXN0cnVjdCB2 YzRfY3J0YyAqdmM0X2NydGMgPSB0b192YzRfY3J0YyhjcnRjKTsKKwl1MzIgZGxpc3RfY291bnQg PSAwOworCisJLyogVGhlIHBpeGVsdmFsdmUgY2FuIG9ubHkgZmVlZCBvbmUgZW5jb2RlciAoYW5k IGVuY29kZXJzIGFyZQorCSAqIDE6MSB3aXRoIGNvbm5lY3RvcnMuKQorCSAqLworCWlmIChkcm1f YXRvbWljX2Nvbm5lY3RvcnNfZm9yX2NydGMoc3RhdGUtPnN0YXRlLCBjcnRjKSA+IDEpCisJCXJl dHVybiAtRUlOVkFMOworCisJZHJtX2F0b21pY19jcnRjX3N0YXRlX2Zvcl9lYWNoX3BsYW5lKHBs YW5lLCBzdGF0ZSkgeworCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSA9CisJ CQlzdGF0ZS0+c3RhdGUtPnBsYW5lX3N0YXRlc1tkcm1fcGxhbmVfaW5kZXgocGxhbmUpXTsKKwor CQkvKiBwbGFuZSBtaWdodCBub3QgaGF2ZSBjaGFuZ2VkLCBpbiB3aGljaCBjYXNlIHRha2UKKwkJ ICogY3VycmVudCBzdGF0ZToKKwkJICovCisJCWlmICghcGxhbmVfc3RhdGUpCisJCQlwbGFuZV9z dGF0ZSA9IHBsYW5lLT5zdGF0ZTsKKworCQlkbGlzdF9jb3VudCArPSB2YzRfcGxhbmVfZGxpc3Rf c2l6ZShwbGFuZV9zdGF0ZSk7CisJfQorCisJZGxpc3RfY291bnQrKzsgLyogQWNjb3VudCBmb3Ig U0NBTEVSX0NUTDBfRU5ELiAqLworCisJaWYgKCF2YzRfY3J0Yy0+ZGxpc3QgfHwgZGxpc3RfY291 bnQgPiB2YzRfY3J0Yy0+ZGxpc3Rfc2l6ZSkgeworCQl2YzRfY3J0Yy0+ZGxpc3QgPSAoKHUzMiBf X2lvbWVtICopdmM0LT5odnMtPmRsaXN0ICsKKwkJCQkgICBIVlNfQk9PVExPQURFUl9ETElTVF9F TkQpOworCQl2YzRfY3J0Yy0+ZGxpc3Rfc2l6ZSA9ICgoU0NBTEVSX0RMSVNUX1NJWkUgPj4gMikg LQorCQkJCQlIVlNfQk9PVExPQURFUl9ETElTVF9FTkQpOworCisJCWlmIChkbGlzdF9jb3VudCA+ IHZjNF9jcnRjLT5kbGlzdF9zaXplKSB7CisJCQlEUk1fREVCVUdfS01TKCJkbGlzdCB0b28gbGFy Z2UgZm9yIENSVEMgKCVkID4gJWQpLlxuIiwKKwkJCQkgICAgICBkbGlzdF9jb3VudCwgdmM0X2Ny dGMtPmRsaXN0X3NpemUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIHZvaWQgdmM0X2NydGNfYXRvbWljX2ZsdXNoKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YywKKwkJCQkgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX3N0YXRlKQoreworCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9 IHRvX3ZjNF9kZXYoZGV2KTsKKwlzdHJ1Y3QgdmM0X2NydGMgKnZjNF9jcnRjID0gdG9fdmM0X2Ny dGMoY3J0Yyk7CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7CisJYm9vbCBkZWJ1Z19kdW1wX3Jl Z3MgPSBmYWxzZTsKKwl1MzIgX19pb21lbSAqZGxpc3RfbmV4dCA9IHZjNF9jcnRjLT5kbGlzdDsK KworCWlmIChkZWJ1Z19kdW1wX3JlZ3MpIHsKKwkJRFJNX0lORk8oIkNSVEMgJWQgSFZTIGJlZm9y ZTpcbiIsIGRybV9jcnRjX2luZGV4KGNydGMpKTsKKwkJdmM0X2h2c19kdW1wX3N0YXRlKGRldik7 CisJfQorCisJLyogQ29weSBhbGwgdGhlIGFjdGl2ZSBwbGFuZXMnIGRsaXN0IGNvbnRlbnRzIHRv IHRoZSBoYXJkd2FyZSBkbGlzdC4KKwkgKgorCSAqIFhYWDogSWYgdGhlIG5ldyBkaXNwbGF5IGxp c3Qgd2FzIGxhcmdlIGVub3VnaCB0aGF0IGl0CisJICogb3ZlcmxhcHBlZCBhIGN1cnJlbnRseS1y ZWFkIGRpc3BsYXkgbGlzdCwgd2UgbmVlZCB0byBkbworCSAqIHNvbWV0aGluZyBsaWtlIGRpc2Fi bGUgc2Nhbm91dCBiZWZvcmUgcHV0dGluZyBpbiB0aGUgbmV3CisJICogbGlzdC4gIEZvciBub3cs IHdlJ3JlIHNhZmUgYmVjYXVzZSB3ZSBvbmx5IGhhdmUgdGhlIHR3bworCSAqIHBsYW5lcy4KKwkg Ki8KKwlkcm1fYXRvbWljX2NydGNfZm9yX2VhY2hfcGxhbmUocGxhbmUsIGNydGMpIHsKKwkJZGxp c3RfbmV4dCArPSB2YzRfcGxhbmVfd3JpdGVfZGxpc3QocGxhbmUsIGRsaXN0X25leHQpOworCX0K KworCWlmIChkbGlzdF9uZXh0ID09IHZjNF9jcnRjLT5kbGlzdCkgeworCQkvKiBJZiBubyBwbGFu ZXMgd2VyZSBlbmFibGVkLCB1c2UgdGhlIFNDQUxFUl9DVEwwX0VORAorCQkgKiBhdCB0aGUgc3Rh cnQgb2YgdGhlIGRpc3BsYXkgbGlzdCBtZW1vcnkgKGluIHRoZQorCQkgKiBib290bG9hZGVyIHNl Y3Rpb24pLiAgV2UnbGwgcmV3cml0ZSB0aGF0CisJCSAqIFNDQUxFUl9DVEwwX0VORCwganVzdCBp biBjYXNlLCB0aG91Z2guCisJCSAqLworCQl3cml0ZWwoU0NBTEVSX0NUTDBfRU5ELCB2YzQtPmh2 cy0+ZGxpc3QpOworCQlIVlNfV1JJVEUoU0NBTEVSX0RJU1BMSVNUWCh2YzRfY3J0Yy0+Y2hhbm5l bCksIDApOworCX0gZWxzZSB7CisJCXdyaXRlbChTQ0FMRVJfQ1RMMF9FTkQsIGRsaXN0X25leHQp OworCQlkbGlzdF9uZXh0Kys7CisKKwkJSFZTX1dSSVRFKFNDQUxFUl9ESVNQTElTVFgodmM0X2Ny dGMtPmNoYW5uZWwpLAorCQkJICAodTMyICopdmM0X2NydGMtPmRsaXN0IC0gKHUzMiAqKXZjNC0+ aHZzLT5kbGlzdCk7CisKKwkJLyogTWFrZSB0aGUgbmV4dCBkaXNwbGF5IGxpc3Qgc3RhcnQgYWZ0 ZXIgb3Vycy4gKi8KKwkJdmM0X2NydGMtPmRsaXN0X3NpemUgLT0gKGRsaXN0X25leHQgLSB2YzRf Y3J0Yy0+ZGxpc3QpOworCQl2YzRfY3J0Yy0+ZGxpc3QgPSBkbGlzdF9uZXh0OworCX0KKworCWlm IChkZWJ1Z19kdW1wX3JlZ3MpIHsKKwkJRFJNX0lORk8oIkNSVEMgJWQgSFZTIGFmdGVyOlxuIiwg ZHJtX2NydGNfaW5kZXgoY3J0YykpOworCQl2YzRfaHZzX2R1bXBfc3RhdGUoZGV2KTsKKwl9CisK KwlpZiAoY3J0Yy0+c3RhdGUtPmV2ZW50KSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJ Y3J0Yy0+c3RhdGUtPmV2ZW50LT5waXBlID0gZHJtX2NydGNfaW5kZXgoY3J0Yyk7CisKKwkJV0FS Tl9PTihkcm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpICE9IDApOworCisJCXNwaW5fbG9ja19pcnFz YXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwkJdmM0X2NydGMtPmV2ZW50ID0gY3J0Yy0+ c3RhdGUtPmV2ZW50OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ss IGZsYWdzKTsKKwkJY3J0Yy0+c3RhdGUtPmV2ZW50ID0gTlVMTDsKKwl9Cit9CisKK2ludCB2YzRf ZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Y19pZCkKK3sKKwlz dHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOworCXN0cnVjdCB2YzRfY3J0YyAq dmM0X2NydGMgPSB2YzQtPmNydGNbY3J0Y19pZF07CisKKwlDUlRDX1dSSVRFKFBWX0lOVEVOLCBQ Vl9JTlRfVkZQX1NUQVJUKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHZjNF9kaXNhYmxlX3Zi bGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Y19pZCkKK3sKKwlzdHJ1Y3QgdmM0 X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOworCXN0cnVjdCB2YzRfY3J0YyAqdmM0X2NydGMg PSB2YzQtPmNydGNbY3J0Y19pZF07CisKKwlDUlRDX1dSSVRFKFBWX0lOVEVOLCAwKTsKK30KKwor c3RhdGljIHZvaWQgdmM0X2NydGNfaGFuZGxlX3BhZ2VfZmxpcChzdHJ1Y3QgdmM0X2NydGMgKnZj NF9jcnRjKQoreworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZ2YzRfY3J0Yy0+YmFzZTsKKwlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJaWYgKHZj NF9jcnRjLT5ldmVudCkgeworCQlkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudChjcnRjLCB2YzRf Y3J0Yy0+ZXZlbnQpOworCQl2YzRfY3J0Yy0+ZXZlbnQgPSBOVUxMOworCX0KKwlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlycXJl dHVybl90IHZjNF9jcnRjX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3Ry dWN0IHZjNF9jcnRjICp2YzRfY3J0YyA9IGRhdGE7CisJdTMyIHN0YXQgPSBDUlRDX1JFQUQoUFZf SU5UU1RBVCk7CisJaXJxcmV0dXJuX3QgcmV0ID0gSVJRX05PTkU7CisKKwlpZiAoc3RhdCAmIFBW X0lOVF9WRlBfU1RBUlQpIHsKKwkJQ1JUQ19XUklURShQVl9JTlRTVEFULCBQVl9JTlRfVkZQX1NU QVJUKTsKKwkJZHJtX2NydGNfaGFuZGxlX3ZibGFuaygmdmM0X2NydGMtPmJhc2UpOworCQl2YzRf Y3J0Y19oYW5kbGVfcGFnZV9mbGlwKHZjNF9jcnRjKTsKKwkJcmV0ID0gSVJRX0hBTkRMRUQ7CisJ fQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5j cyB2YzRfY3J0Y19mdW5jcyA9IHsKKwkuc2V0X2NvbmZpZyA9IGRybV9hdG9taWNfaGVscGVyX3Nl dF9jb25maWcsCisJLmRlc3Ryb3kgPSB2YzRfY3J0Y19kZXN0cm95LAorCS5wYWdlX2ZsaXAgPSBk cm1fYXRvbWljX2hlbHBlcl9wYWdlX2ZsaXAsCisJLnNldF9wcm9wZXJ0eSA9IE5VTEwsCisJLmN1 cnNvcl9zZXQgPSBOVUxMLCAvKiBoYW5kbGVkIGJ5IGRybV9tb2RlX2N1cnNvcl91bml2ZXJzYWwg Ki8KKwkuY3Vyc29yX21vdmUgPSBOVUxMLCAvKiBoYW5kbGVkIGJ5IGRybV9tb2RlX2N1cnNvcl91 bml2ZXJzYWwgKi8KKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX3Jlc2V0LAorCS5h dG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVf c3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19k ZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJf ZnVuY3MgdmM0X2NydGNfaGVscGVyX2Z1bmNzID0geworCS5tb2RlX3NldF9ub2ZiID0gdmM0X2Ny dGNfbW9kZV9zZXRfbm9mYiwKKwkuZGlzYWJsZSA9IHZjNF9jcnRjX2Rpc2FibGUsCisJLmVuYWJs ZSA9IHZjNF9jcnRjX2VuYWJsZSwKKwkuYXRvbWljX2NoZWNrID0gdmM0X2NydGNfYXRvbWljX2No ZWNrLAorCS5hdG9taWNfZmx1c2ggPSB2YzRfY3J0Y19hdG9taWNfZmx1c2gsCit9OworCisvKiBG cmVlcyB0aGUgcGFnZSBmbGlwIGV2ZW50IHdoZW4gdGhlIERSTSBkZXZpY2UgaXMgY2xvc2VkIHdp dGggdGhlCisgKiBldmVudCBzdGlsbCBvdXRzdGFuZGluZy4KKyAqLwordm9pZCB2YzRfY2FuY2Vs X3BhZ2VfZmxpcChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkK K3sKKwlzdHJ1Y3QgdmM0X2NydGMgKnZjNF9jcnRjID0gdG9fdmM0X2NydGMoY3J0Yyk7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwor CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOworCisJaWYgKHZj NF9jcnRjLT5ldmVudCAmJiB2YzRfY3J0Yy0+ZXZlbnQtPmJhc2UuZmlsZV9wcml2ID09IGZpbGUp IHsKKwkJdmM0X2NydGMtPmV2ZW50LT5iYXNlLmRlc3Ryb3koJnZjNF9jcnRjLT5ldmVudC0+YmFz ZSk7CisJCWRybV9jcnRjX3ZibGFua19wdXQoY3J0Yyk7CisJCXZjNF9jcnRjLT5ldmVudCA9IE5V TEw7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFn cyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmM0X2NydGNfZGF0YSBwdjBfZGF0YSA9IHsK KwkuaHZzX2NoYW5uZWwgPSAwLAorCS5lbmNvZGVyMF90eXBlID0gVkM0X0VOQ09ERVJfVFlQRV9E U0kwLAorCS5lbmNvZGVyMV90eXBlID0gVkM0X0VOQ09ERVJfVFlQRV9EUEksCit9OworCitzdGF0 aWMgY29uc3Qgc3RydWN0IHZjNF9jcnRjX2RhdGEgcHYxX2RhdGEgPSB7CisJLmh2c19jaGFubmVs ID0gMiwKKwkuZW5jb2RlcjBfdHlwZSA9IFZDNF9FTkNPREVSX1RZUEVfRFNJMSwKKwkuZW5jb2Rl cjFfdHlwZSA9IFZDNF9FTkNPREVSX1RZUEVfU01JLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVj dCB2YzRfY3J0Y19kYXRhIHB2Ml9kYXRhID0geworCS5odnNfY2hhbm5lbCA9IDEsCisJLmVuY29k ZXIwX3R5cGUgPSBWQzRfRU5DT0RFUl9UWVBFX1ZFQywKKwkuZW5jb2RlcjFfdHlwZSA9IFZDNF9F TkNPREVSX1RZUEVfSERNSSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lk IHZjNF9jcnRjX2R0X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJicmNtLGJjbTI4MzUt cGl4ZWx2YWx2ZTAiLCAuZGF0YSA9ICZwdjBfZGF0YSB9LAorCXsgLmNvbXBhdGlibGUgPSAiYnJj bSxiY20yODM1LXBpeGVsdmFsdmUxIiwgLmRhdGEgPSAmcHYxX2RhdGEgfSwKKwl7IC5jb21wYXRp YmxlID0gImJyY20sYmNtMjgzNS1waXhlbHZhbHZlMiIsIC5kYXRhID0gJnB2Ml9kYXRhIH0sCisJ e30KK307CisKK3N0YXRpYyB2b2lkIHZjNF9zZXRfY3J0Y19wb3NzaWJsZV9tYXNrcyhzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtLAorCQkJCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0 IHZjNF9jcnRjICp2YzRfY3J0YyA9IHRvX3ZjNF9jcnRjKGNydGMpOworCXN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2RlcjsKKworCWRybV9mb3JfZWFjaF9lbmNvZGVyKGVuY29kZXIsIGRybSkgewor CQlzdHJ1Y3QgdmM0X2VuY29kZXIgKnZjNF9lbmNvZGVyID0gdG9fdmM0X2VuY29kZXIoZW5jb2Rl cik7CisKKwkJaWYgKHZjNF9lbmNvZGVyLT50eXBlID09IHZjNF9jcnRjLT5kYXRhLT5lbmNvZGVy MF90eXBlKSB7CisJCQl2YzRfZW5jb2Rlci0+Y2xvY2tfc2VsZWN0ID0gMDsKKwkJCWVuY29kZXIt PnBvc3NpYmxlX2NydGNzIHw9IGRybV9jcnRjX21hc2soY3J0Yyk7CisJCX0gZWxzZSBpZiAodmM0 X2VuY29kZXItPnR5cGUgPT0gdmM0X2NydGMtPmRhdGEtPmVuY29kZXIxX3R5cGUpIHsKKwkJCXZj NF9lbmNvZGVyLT5jbG9ja19zZWxlY3QgPSAxOworCQkJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3Mg fD0gZHJtX2NydGNfbWFzayhjcnRjKTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCB2YzRfY3J0 Y19iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpk YXRhKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZp Y2UoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGV2X2dldF9kcnZkYXRhKG1hc3Rl cik7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZHJtKTsKKwlzdHJ1Y3QgdmM0 X2NydGMgKnZjNF9jcnRjOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlzdHJ1Y3QgZHJtX3Bs YW5lICpwcmltYXJ5X3BsYW5lLCAqY3Vyc29yX3BsYW5lOworCWNvbnN0IHN0cnVjdCBvZl9kZXZp Y2VfaWQgKm1hdGNoOworCWludCByZXQ7CisKKwl2YzRfY3J0YyA9IGRldm1fa3phbGxvYyhkZXYs IHNpemVvZigqdmM0X2NydGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZjNF9jcnRjKQorCQlyZXR1 cm4gLUVOT01FTTsKKwljcnRjID0gJnZjNF9jcnRjLT5iYXNlOworCisJbWF0Y2ggPSBvZl9tYXRj aF9kZXZpY2UodmM0X2NydGNfZHRfbWF0Y2gsIGRldik7CisJaWYgKCFtYXRjaCkKKwkJcmV0dXJu IC1FTk9ERVY7CisJdmM0X2NydGMtPmRhdGEgPSBtYXRjaC0+ZGF0YTsKKworCXZjNF9jcnRjLT5y ZWdzID0gdmM0X2lvcmVtYXBfcmVncyhwZGV2LCAwKTsKKwlpZiAoSVNfRVJSKHZjNF9jcnRjLT5y ZWdzKSkKKwkJcmV0dXJuIFBUUl9FUlIodmM0X2NydGMtPnJlZ3MpOworCisJLyogRm9yIG5vdywg d2UgY3JlYXRlIGp1c3QgdGhlIHByaW1hcnkgYW5kIHRoZSBsZWdhY3kgY3Vyc29yCisJICogcGxh bmVzLiAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gc3RhY2sgbW9yZSBwbGFuZXMgb24gZWFzaWx5LAor CSAqIGJ1dCB0byBkbyB0aGF0IHdlIHdvdWxkIG5lZWQgdG8gY29tcHV0ZSB0aGUgYmFuZHdpZHRo CisJICogcmVxdWlyZW1lbnQgb2YgdGhlIHBsYW5lIGNvbmZpZ3VyYXRpb24sIGFuZCByZWplY3Qg b25lcworCSAqIHRoYXQgd2lsbCB0YWtlIHRvbyBtdWNoLgorCSAqLworCXByaW1hcnlfcGxhbmUg PSB2YzRfcGxhbmVfaW5pdChkcm0sIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOworCWlmICghcHJp bWFyeV9wbGFuZSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjb25zdHJ1Y3QgcHJpbWFy eSBwbGFuZVxuIik7CisJCXJldCA9IFBUUl9FUlIocHJpbWFyeV9wbGFuZSk7CisJCWdvdG8gZXJy OworCX0KKworCWN1cnNvcl9wbGFuZSA9IHZjNF9wbGFuZV9pbml0KGRybSwgRFJNX1BMQU5FX1RZ UEVfQ1VSU09SKTsKKwlpZiAoIWN1cnNvcl9wbGFuZSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxl ZCB0byBjb25zdHJ1Y3QgY3Vyc29yIHBsYW5lXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihjdXJzb3Jf cGxhbmUpOworCQlnb3RvIGVycl9wcmltYXJ5OworCX0KKworCWRybV9jcnRjX2luaXRfd2l0aF9w bGFuZXMoZHJtLCBjcnRjLCBwcmltYXJ5X3BsYW5lLCBjdXJzb3JfcGxhbmUsCisJCQkJICAmdmM0 X2NydGNfZnVuY3MpOworCWRybV9jcnRjX2hlbHBlcl9hZGQoY3J0YywgJnZjNF9jcnRjX2hlbHBl cl9mdW5jcyk7CisJcHJpbWFyeV9wbGFuZS0+Y3J0YyA9IGNydGM7CisJY3Vyc29yX3BsYW5lLT5j cnRjID0gY3J0YzsKKwl2YzQtPmNydGNbZHJtX2NydGNfaW5kZXgoY3J0YyldID0gdmM0X2NydGM7 CisJdmM0X2NydGMtPmNoYW5uZWwgPSB2YzRfY3J0Yy0+ZGF0YS0+aHZzX2NoYW5uZWw7CisKKwlD UlRDX1dSSVRFKFBWX0lOVEVOLCAwKTsKKwlDUlRDX1dSSVRFKFBWX0lOVFNUQVQsIFBWX0lOVF9W RlBfU1RBUlQpOworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBwbGF0Zm9ybV9nZXRfaXJx KHBkZXYsIDApLAorCQkJICAgICAgIHZjNF9jcnRjX2lycV9oYW5kbGVyLCAwLCAidmM0IGNydGMi LCB2YzRfY3J0Yyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY3Vyc29yOworCisJdmM0X3NldF9j cnRjX3Bvc3NpYmxlX21hc2tzKGRybSwgY3J0Yyk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShw ZGV2LCB2YzRfY3J0Yyk7CisKKwlyZXR1cm4gMDsKKworZXJyX2N1cnNvcjoKKwljdXJzb3JfcGxh bmUtPmZ1bmNzLT5kZXN0cm95KGN1cnNvcl9wbGFuZSk7CitlcnJfcHJpbWFyeToKKwlwcmltYXJ5 X3BsYW5lLT5mdW5jcy0+ZGVzdHJveShwcmltYXJ5X3BsYW5lKTsKK2VycjoKKwlyZXR1cm4gcmV0 OworfQorCitzdGF0aWMgdm9pZCB2YzRfY3J0Y191bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBz dHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCQkgICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHZj NF9jcnRjICp2YzRfY3J0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJdmM0X2NydGNfZGVz dHJveSgmdmM0X2NydGMtPmJhc2UpOworCisJQ1JUQ19XUklURShQVl9JTlRFTiwgMCk7CisKKwlw bGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBjb21wb25lbnRfb3BzIHZjNF9jcnRjX29wcyA9IHsKKwkuYmluZCAgID0gdmM0X2NydGNfYmlu ZCwKKwkudW5iaW5kID0gdmM0X2NydGNfdW5iaW5kLAorfTsKKworc3RhdGljIGludCB2YzRfY3J0 Y19kZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gY29t cG9uZW50X2FkZCgmcGRldi0+ZGV2LCAmdmM0X2NydGNfb3BzKTsKK30KKworc3RhdGljIGludCB2 YzRfY3J0Y19kZXZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29t cG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmdmM0X2NydGNfb3BzKTsKKwlyZXR1cm4gMDsKK30KKwor c3RydWN0IHBsYXRmb3JtX2RyaXZlciB2YzRfY3J0Y19kcml2ZXIgPSB7CisJLnByb2JlID0gdmM0 X2NydGNfZGV2X3Byb2JlLAorCS5yZW1vdmUgPSB2YzRfY3J0Y19kZXZfcmVtb3ZlLAorCS5kcml2 ZXIgPSB7CisJCS5uYW1lID0gInZjNF9jcnRjIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gdmM0X2Ny dGNfZHRfbWF0Y2gsCisJfSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3Zj NF9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kZWJ1Z2ZzLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5N2IwYTUKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kZWJ1Z2ZzLmMKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAq ICBDb3B5cmlnaHQgwqkgMjAxNCBCcm9hZGNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g MiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8K KworI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvY2lyY19idWYu aD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4K KyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorCisjaW5jbHVkZSAidmM0X2Rydi5oIgorI2luY2x1ZGUg InZjNF9yZWdzLmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2luZm9fbGlzdCB2YzRfZGVi dWdmc19saXN0W10gPSB7CisJeyJoZG1pX3JlZ3MiLCB2YzRfaGRtaV9kZWJ1Z2ZzX3JlZ3MsIDB9 LAorCXsiaHZzX3JlZ3MiLCB2YzRfaHZzX2RlYnVnZnNfcmVncywgMH0sCisJeyJjcnRjMF9yZWdz IiwgdmM0X2NydGNfZGVidWdmc19yZWdzLCAwLCAodm9pZCAqKSh1aW50cHRyX3QpMH0sCisJeyJj cnRjMV9yZWdzIiwgdmM0X2NydGNfZGVidWdmc19yZWdzLCAwLCAodm9pZCAqKSh1aW50cHRyX3Qp MX0sCisJeyJjcnRjMl9yZWdzIiwgdmM0X2NydGNfZGVidWdmc19yZWdzLCAwLCAodm9pZCAqKSh1 aW50cHRyX3QpMn0sCit9OworCisjZGVmaW5lIFZDNF9ERUJVR0ZTX0VOVFJJRVMgQVJSQVlfU0la RSh2YzRfZGVidWdmc19saXN0KQorCitpbnQKK3ZjNF9kZWJ1Z2ZzX2luaXQoc3RydWN0IGRybV9t aW5vciAqbWlub3IpCit7CisJcmV0dXJuIGRybV9kZWJ1Z2ZzX2NyZWF0ZV9maWxlcyh2YzRfZGVi dWdmc19saXN0LCBWQzRfREVCVUdGU19FTlRSSUVTLAorCQkJCQltaW5vci0+ZGVidWdmc19yb290 LCBtaW5vcik7Cit9CisKK3ZvaWQKK3ZjNF9kZWJ1Z2ZzX2NsZWFudXAoc3RydWN0IGRybV9taW5v ciAqbWlub3IpCit7CisJZHJtX2RlYnVnZnNfcmVtb3ZlX2ZpbGVzKHZjNF9kZWJ1Z2ZzX2xpc3Qs IFZDNF9ERUJVR0ZTX0VOVFJJRVMsIG1pbm9yKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS92YzQvdmM0X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MzY2NmZgotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5jCkBAIC0wLDAgKzEsMjg0IEBACisvKgorICog Q29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQnJvYWRjb20KKyAqIENvcHlyaWdodCAoQykgMjAxMyBS ZWQgSGF0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xr Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNl Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNp bmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2Rl dmljZS5oPgorCisjaW5jbHVkZSAidmM0X2Rydi5oIgorI2luY2x1ZGUgInZjNF9yZWdzLmgiCisK KyNkZWZpbmUgRFJJVkVSX05BTUUgInZjNCIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkJyb2FkY29t IFZDNCBncmFwaGljcyIKKyNkZWZpbmUgRFJJVkVSX0RBVEUgIjIwMTQwNjE2IgorI2RlZmluZSBE UklWRVJfTUFKT1IgMAorI2RlZmluZSBEUklWRVJfTUlOT1IgMAorI2RlZmluZSBEUklWRVJfUEFU Q0hMRVZFTCAwCisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgbWFwcGluZyB0aGUgcmVncyBvbiBh IHBsYXRmb3JtIGRldmljZS4gKi8KK3ZvaWQgX19pb21lbSAqdmM0X2lvcmVtYXBfcmVncyhzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2Ug KnJlczsKKwl2b2lkIF9faW9tZW0gKm1hcDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJj ZShkZXYsIElPUkVTT1VSQ0VfTUVNLCBpbmRleCk7CisJbWFwID0gZGV2bV9pb3JlbWFwX3Jlc291 cmNlKCZkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKG1hcCkpIHsKKwkJRFJNX0VSUk9SKCJG YWlsZWQgdG8gbWFwIHJlZ2lzdGVyczogJWxkXG4iLCBQVFJfRVJSKG1hcCkpOworCQlyZXR1cm4g bWFwOworCX0KKworCXJldHVybiBtYXA7Cit9CisKK3N0YXRpYyB2b2lkIHZjNF9kcm1fcHJlY2xv c2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0 cnVjdCBkcm1fY3J0YyAqY3J0YzsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+ bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKQorCQl2YzRfY2FuY2VsX3BhZ2VfZmxpcChjcnRj LCBmaWxlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmM0X2Ry bV9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gZHJtX29wZW4sCisJ LnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKKwkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCisJ Lm1tYXAgPSBkcm1fZ2VtX2NtYV9tbWFwLAorCS5wb2xsID0gZHJtX3BvbGwsCisJLnJlYWQgPSBk cm1fcmVhZCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bCA9IGRybV9jb21w YXRfaW9jdGwsCisjZW5kaWYKKwkubGxzZWVrID0gbm9vcF9sbHNlZWssCit9OworCitzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9pb2N0bF9kZXNjIHZjNF9kcm1faW9jdGxzW10gPSB7Cit9OworCitz dGF0aWMgc3RydWN0IGRybV9kcml2ZXIgdmM0X2RybV9kcml2ZXIgPSB7CisJLmRyaXZlcl9mZWF0 dXJlcyA9IChEUklWRVJfTU9ERVNFVCB8CisJCQkgICAgRFJJVkVSX0FUT01JQyB8CisJCQkgICAg RFJJVkVSX0dFTSB8CisJCQkgICAgRFJJVkVSX1BSSU1FKSwKKwkucHJlY2xvc2UgPSB2YzRfZHJt X3ByZWNsb3NlLAorCisJLmVuYWJsZV92YmxhbmsgPSB2YzRfZW5hYmxlX3ZibGFuaywKKwkuZGlz YWJsZV92YmxhbmsgPSB2YzRfZGlzYWJsZV92YmxhbmssCisJLmdldF92YmxhbmtfY291bnRlciA9 IGRybV92YmxhbmtfY291bnQsCisKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKKwkuZGVi dWdmc19pbml0ID0gdmM0X2RlYnVnZnNfaW5pdCwKKwkuZGVidWdmc19jbGVhbnVwID0gdmM0X2Rl YnVnZnNfY2xlYW51cCwKKyNlbmRpZgorCisJLmdlbV9mcmVlX29iamVjdCA9IGRybV9nZW1fY21h X2ZyZWVfb2JqZWN0LAorCS5nZW1fdm1fb3BzID0gJmRybV9nZW1fY21hX3ZtX29wcywKKworCS5w cmltZV9oYW5kbGVfdG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKKwkucHJpbWVf ZmRfdG9faGFuZGxlID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdlbV9wcmltZV9p bXBvcnQgPSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwKKwkuZ2VtX3ByaW1lX2V4cG9ydCA9IGRybV9n ZW1fcHJpbWVfZXhwb3J0LAorCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlCT0gZHJtX2dlbV9jbWFf cHJpbWVfZ2V0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlID0gZHJtX2dl bV9jbWFfcHJpbWVfaW1wb3J0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfdm1hcCA9IGRybV9nZW1f Y21hX3ByaW1lX3ZtYXAsCisJLmdlbV9wcmltZV92dW5tYXAgPSBkcm1fZ2VtX2NtYV9wcmltZV92 dW5tYXAsCisJLmdlbV9wcmltZV9tbWFwID0gZHJtX2dlbV9jbWFfcHJpbWVfbW1hcCwKKworCS5k dW1iX2NyZWF0ZSA9IHZjNF9kdW1iX2NyZWF0ZSwKKwkuZHVtYl9tYXBfb2Zmc2V0ID0gZHJtX2dl bV9jbWFfZHVtYl9tYXBfb2Zmc2V0LAorCS5kdW1iX2Rlc3Ryb3kgPSBkcm1fZ2VtX2R1bWJfZGVz dHJveSwKKworCS5pb2N0bHMgPSB2YzRfZHJtX2lvY3RscywKKwkubnVtX2lvY3RscyA9IEFSUkFZ X1NJWkUodmM0X2RybV9pb2N0bHMpLAorCS5mb3BzID0gJnZjNF9kcm1fZm9wcywKKworCS5uYW1l ID0gRFJJVkVSX05BTUUsCisJLmRlc2MgPSBEUklWRVJfREVTQywKKwkuZGF0ZSA9IERSSVZFUl9E QVRFLAorCS5tYWpvciA9IERSSVZFUl9NQUpPUiwKKwkubWlub3IgPSBEUklWRVJfTUlOT1IsCisJ LnBhdGNobGV2ZWwgPSBEUklWRVJfUEFUQ0hMRVZFTCwKK307CisKK3N0YXRpYyBpbnQgY29tcGFy ZV9kZXYoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCXJldHVybiBkZXYgPT0g ZGF0YTsKK30KKworc3RhdGljIHZvaWQgdmM0X21hdGNoX2FkZF9kcml2ZXJzKHN0cnVjdCBkZXZp Y2UgKmRldiwKKwkJCQkgIHN0cnVjdCBjb21wb25lbnRfbWF0Y2ggKiptYXRjaCwKKwkJCQkgIHN0 cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKmNvbnN0ICpkcml2ZXJzLAorCQkJCSAgaW50IGNvdW50KQor eworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJc3RydWN0IGRl dmljZV9kcml2ZXIgKmRydiA9ICZkcml2ZXJzW2ldLT5kcml2ZXI7CisJCXN0cnVjdCBkZXZpY2Ug KnAgPSBOVUxMLCAqZDsKKworCQl3aGlsZSAoKGQgPSBidXNfZmluZF9kZXZpY2UoJnBsYXRmb3Jt X2J1c190eXBlLCBwLCBkcnYsCisJCQkJCSAgICAodm9pZCAqKXBsYXRmb3JtX2J1c190eXBlLm1h dGNoKSkpIHsKKwkJCXB1dF9kZXZpY2UocCk7CisJCQljb21wb25lbnRfbWF0Y2hfYWRkKGRldiwg bWF0Y2gsIGNvbXBhcmVfZGV2LCBkKTsKKwkJCXAgPSBkOworCQl9CisJCXB1dF9kZXZpY2UocCk7 CisJfQorfQorCitzdGF0aWMgaW50IHZjNF9kcm1fYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7 CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYp OworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvcjsKKwlzdHJ1Y3QgdmM0X2RldiAqdmM0OworCWludCByZXQgPSAwOworCisJZGV2LT5jb2hl cmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKKwl2YzQgPSBkZXZtX2t6YWxsb2Mo ZGV2LCBzaXplb2YoKnZjNCksIEdGUF9LRVJORUwpOworCWlmICghdmM0KQorCQlyZXR1cm4gLUVO T01FTTsKKworCWRybSA9IGRybV9kZXZfYWxsb2MoJnZjNF9kcm1fZHJpdmVyLCBkZXYpOworCWlm ICghZHJtKQorCQlyZXR1cm4gLUVOT01FTTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBk cm0pOworCXZjNC0+ZGV2ID0gZHJtOworCWRybS0+ZGV2X3ByaXZhdGUgPSB2YzQ7CisKKwlkcm1f ZGV2X3NldF91bmlxdWUoZHJtLCBkZXZfbmFtZShkZXYpKTsKKworCWRybV9tb2RlX2NvbmZpZ19p bml0KGRybSk7CisJaWYgKHJldCkKKwkJZ290byB1bnJlZjsKKworCXJldCA9IGNvbXBvbmVudF9i aW5kX2FsbChkZXYsIGRybSk7CisJaWYgKHJldCkKKwkJZ290byB1bnJlZjsKKworCXJldCA9IGRy bV9kZXZfcmVnaXN0ZXIoZHJtLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byB1bmJpbmRfYWxs OworCisJLyogQ29ubmVjdG9yIHJlZ2lzdHJhdGlvbiBoYXMgdG8gb2NjdXIgYWZ0ZXIgRFJNIGRl dmljZQorCSAqIHJlZ2lzdHJhdGlvbiwgYmVjYXVzZSBpdCBjcmVhdGVzIHN5c2ZzIGVudHJpZXMg YmFzZWQgb24gdGhlCisJICogRFJNIGRldmljZS4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5 KGNvbm5lY3RvciwgJmRybS0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJ cmV0ID0gZHJtX2Nvbm5lY3Rvcl9yZWdpc3Rlcihjb25uZWN0b3IpOworCQlpZiAocmV0KQorCQkJ Z290byB1bnJlZ2lzdGVyOworCX0KKworCXZjNF9rbXNfbG9hZChkcm0pOworCisJcmV0dXJuIDA7 CisKK3VucmVnaXN0ZXI6CisJZHJtX2Rldl91bnJlZ2lzdGVyKGRybSk7Cit1bmJpbmRfYWxsOgor CWNvbXBvbmVudF91bmJpbmRfYWxsKGRldiwgZHJtKTsKK3VucmVmOgorCWRybV9kZXZfdW5yZWYo ZHJtKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB2YzRfZHJtX3VuYmluZChzdHJ1 Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3Bs YXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBwbGF0Zm9ybV9n ZXRfZHJ2ZGF0YShwZGV2KTsKKworCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7CisKKwlk cm1fcHV0X2Rldihkcm0pOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9tYXN0 ZXJfb3BzIHZjNF9kcm1fb3BzID0geworCS5iaW5kID0gdmM0X2RybV9iaW5kLAorCS51bmJpbmQg PSB2YzRfZHJtX3VuYmluZCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpj b25zdCBjb21wb25lbnRfZHJpdmVyc1tdID0geworCSZ2YzRfaGRtaV9kcml2ZXIsCisJJnZjNF9j cnRjX2RyaXZlciwKKwkmdmM0X2h2c19kcml2ZXIsCit9OworCitzdGF0aWMgaW50IHZjNF9wbGF0 Zm9ybV9kcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qg Y29tcG9uZW50X21hdGNoICptYXRjaCA9IE5VTEw7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBk ZXYtPmRldjsKKworCXZjNF9tYXRjaF9hZGRfZHJpdmVycyhkZXYsICZtYXRjaCwKKwkJCSAgICAg IGNvbXBvbmVudF9kcml2ZXJzLCBBUlJBWV9TSVpFKGNvbXBvbmVudF9kcml2ZXJzKSk7CisKKwly ZXR1cm4gY29tcG9uZW50X21hc3Rlcl9hZGRfd2l0aF9tYXRjaChkZXYsICZ2YzRfZHJtX29wcywg bWF0Y2gpOworfQorCitzdGF0aWMgaW50IHZjNF9wbGF0Zm9ybV9kcm1fcmVtb3ZlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29tcG9uZW50X21hc3Rlcl9kZWwoJnBkZXYtPmRl diwgJnZjNF9kcm1fb3BzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IG9mX2RldmljZV9pZCB2YzRfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImJyY20s YmNtMjgzNS12YzQiLCB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHZjNF9v Zl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZjNF9wbGF0Zm9ybV9k cml2ZXIgPSB7CisJLnByb2JlCQk9IHZjNF9wbGF0Zm9ybV9kcm1fcHJvYmUsCisJLnJlbW92ZQkJ PSB2YzRfcGxhdGZvcm1fZHJtX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAidmM0 LWRybSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUgPSB2YzRf b2ZfbWF0Y2gsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHZjNF9kcm1fcmVnaXN0ZXIo dm9pZCkKK3sKKwlpbnQgaSwgcmV0OworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29t cG9uZW50X2RyaXZlcnMpOyBpKyspIHsKKwkJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVy KGNvbXBvbmVudF9kcml2ZXJzW2ldKTsKKwkJaWYgKHJldCkgeworCQkJd2hpbGUgKC0taSA+PSAw KQorCQkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKGNvbXBvbmVudF9kcml2ZXJzW2ldKTsK KwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rl cigmdmM0X3BsYXRmb3JtX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB2YzRfZHJt X3VucmVnaXN0ZXIodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IEFSUkFZX1NJWkUoY29t cG9uZW50X2RyaXZlcnMpIC0gMTsgaSA+PSAwOyBpLS0pCisJCXBsYXRmb3JtX2RyaXZlcl91bnJl Z2lzdGVyKGNvbXBvbmVudF9kcml2ZXJzW2ldKTsKKworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lz dGVyKCZ2YzRfcGxhdGZvcm1fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodmM0X2RybV9yZWdp c3Rlcik7Cittb2R1bGVfZXhpdCh2YzRfZHJtX3VucmVnaXN0ZXIpOworCitNT0RVTEVfQUxJQVMo InBsYXRmb3JtOnZjNC1kcm0iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQnJvYWRjb20gVkM0IERS TSBEcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+ Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vdmM0L3ZjNF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MTBlMDMKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENv cHlyaWdodCAoQykgMjAxNSBCcm9hZGNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh cworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKwor I2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJkcm1fZ2VtX2NtYV9oZWxwZXIuaCIKKworc3Ry dWN0IHZjNF9kZXYgeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CisKKwlzdHJ1Y3QgdmM0X2hk bWkgKmhkbWk7CisJc3RydWN0IHZjNF9odnMgKmh2czsKKwlzdHJ1Y3QgdmM0X2NydGMgKmNydGNb M107Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2YzRfZGV2ICoKK3RvX3ZjNF9kZXYoc3Ry dWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gKHN0cnVjdCB2YzRfZGV2ICopZGV2LT5k ZXZfcHJpdmF0ZTsKK30KKworc3RydWN0IHZjNF9ibyB7CisJc3RydWN0IGRybV9nZW1fY21hX29i amVjdCBiYXNlOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdmM0X2JvICoKK3RvX3ZjNF9i byhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmJvKQoreworCXJldHVybiAoc3RydWN0IHZjNF9ibyAq KWJvOworfQorCitzdHJ1Y3QgdmM0X2h2cyB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl djsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJdm9pZCBfX2lvbWVtICpkbGlzdDsKK307CisKK3N0 cnVjdCB2YzRfcGxhbmUgeworCXN0cnVjdCBkcm1fcGxhbmUgYmFzZTsKK307CisKK3N0YXRpYyBp bmxpbmUgc3RydWN0IHZjNF9wbGFuZSAqCit0b192YzRfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAq cGxhbmUpCit7CisJcmV0dXJuIChzdHJ1Y3QgdmM0X3BsYW5lICopcGxhbmU7Cit9CisKK2VudW0g dmM0X2VuY29kZXJfdHlwZSB7CisJVkM0X0VOQ09ERVJfVFlQRV9IRE1JLAorCVZDNF9FTkNPREVS X1RZUEVfVkVDLAorCVZDNF9FTkNPREVSX1RZUEVfRFNJMCwKKwlWQzRfRU5DT0RFUl9UWVBFX0RT STEsCisJVkM0X0VOQ09ERVJfVFlQRV9TTUksCisJVkM0X0VOQ09ERVJfVFlQRV9EUEksCit9Owor CitzdHJ1Y3QgdmM0X2VuY29kZXIgeworCXN0cnVjdCBkcm1fZW5jb2RlciBiYXNlOworCWVudW0g dmM0X2VuY29kZXJfdHlwZSB0eXBlOworCXUzMiBjbG9ja19zZWxlY3Q7Cit9OworCitzdGF0aWMg aW5saW5lIHN0cnVjdCB2YzRfZW5jb2RlciAqCit0b192YzRfZW5jb2RlcihzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXIpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihlbmNvZGVyLCBzdHJ1Y3Qg dmM0X2VuY29kZXIsIGJhc2UpOworfQorCisjZGVmaW5lIEhWU19SRUFEKG9mZnNldCkgcmVhZGwo dmM0LT5odnMtPnJlZ3MgKyBvZmZzZXQpCisjZGVmaW5lIEhWU19XUklURShvZmZzZXQsIHZhbCkg d3JpdGVsKHZhbCwgdmM0LT5odnMtPnJlZ3MgKyBvZmZzZXQpCisKKy8qIHZjNF9iby5jICovCit2 b2lkIHZjNF9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopOworc3Ry dWN0IHZjNF9ibyAqdmM0X2JvX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzaXplX3Qg c2l6ZSk7CitpbnQgdmM0X2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAor CQkgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVh dGVfZHVtYiAqYXJncyk7CitzdHJ1Y3QgZG1hX2J1ZiAqdmM0X3ByaW1lX2V4cG9ydChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50IGZs YWdzKTsKKworLyogdmM0X2NydGMuYyAqLworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIg dmM0X2NydGNfZHJpdmVyOworaW50IHZjNF9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIGludCBjcnRjX2lkKTsKK3ZvaWQgdmM0X2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIGludCBjcnRjX2lkKTsKK3ZvaWQgdmM0X2NhbmNlbF9wYWdlX2ZsaXAoc3Ry dWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOworaW50IHZjNF9jcnRj X2RlYnVnZnNfcmVncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmFyZyk7CisKKy8qIHZjNF9k ZWJ1Z2ZzLmMgKi8KK2ludCB2YzRfZGVidWdmc19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9y KTsKK3ZvaWQgdmM0X2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CisK Ky8qIHZjNF9kcnYuYyAqLwordm9pZCBfX2lvbWVtICp2YzRfaW9yZW1hcF9yZWdzKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKmRldiwgaW50IGluZGV4KTsKKworLyogdmM0X2hkbWkuYyAqLworZXh0 ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdmM0X2hkbWlfZHJpdmVyOworaW50IHZjNF9oZG1p X2RlYnVnZnNfcmVncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCk7CisKKy8qIHZj NF9odnMuYyAqLworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdmM0X2h2c19kcml2ZXI7 Cit2b2lkIHZjNF9odnNfZHVtcF9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2ludCB2 YzRfaHZzX2RlYnVnZnNfcmVncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCk7CisK Ky8qIHZjNF9rbXMuYyAqLworaW50IHZjNF9rbXNfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KTsKKworLyogdmM0X3BsYW5lLmMgKi8KK3N0cnVjdCBkcm1fcGxhbmUgKnZjNF9wbGFuZV9pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJIGVudW0gZHJtX3BsYW5lX3R5cGUgdHlwZSk7 Cit1MzIgdmM0X3BsYW5lX3dyaXRlX2RsaXN0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLCB1MzIg X19pb21lbSAqZGxpc3QpOwordTMyIHZjNF9wbGFuZV9kbGlzdF9zaXplKHN0cnVjdCBkcm1fcGxh bmVfc3RhdGUgKnN0YXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2hk bWkuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2hkbWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5hZTM3ZmVjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL3ZjNC92YzRfaGRtaS5jCkBAIC0wLDAgKzEsNTg4IEBACisvKgorICogQ29weXJpZ2h0IChD KSAyMDE1IEJyb2FkY29tCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIExpbnV4IEZvdW5kYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVkIEhhdAor ICogQXV0aG9yOiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+CisgKgorICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25n IHdpdGgKKyAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4KKyAqLworCisvKioKKyAqIERPQzogVkM0IEZhbGNvbiBIRE1JIG1vZHVsZQor ICoKKyAqIFRoZSBIRE1JIGNvcmUgaGFzIGEgc3RhdGUgbWFjaGluZSBhbmQgYSBQSFkuICBNb3N0 IG9mIHRoZSB1bml0CisgKiBvcGVyYXRlcyBvZmYgb2YgdGhlIEhTTSBjbG9jayBmcm9tIENQUk1B Ti4gIEl0IGFsc28gaW50ZXJuYWxseSB1c2VzCisgKiB0aGUgUExMSF9QSVggY2xvY2sgZm9yIHRo ZSBQSFkuCisgKi8KKworI2luY2x1ZGUgImRybV9hdG9taWNfaGVscGVyLmgiCisjaW5jbHVkZSAi ZHJtX2NydGNfaGVscGVyLmgiCisjaW5jbHVkZSAiZHJtX2VkaWQuaCIKKyNpbmNsdWRlICJsaW51 eC9jbGsuaCIKKyNpbmNsdWRlICJsaW51eC9jb21wb25lbnQuaCIKKyNpbmNsdWRlICJsaW51eC9v Zl9ncGlvLmgiCisjaW5jbHVkZSAibGludXgvb2ZfcGxhdGZvcm0uaCIKKyNpbmNsdWRlICJ2YzRf ZHJ2LmgiCisjaW5jbHVkZSAidmM0X3JlZ3MuaCIKKworLyogR2VuZXJhbCBIRE1JIGhhcmR3YXJl IHN0YXRlLiAqLworc3RydWN0IHZjNF9oZG1pIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2OworCisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCXN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3I7CisKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRkYzsKKwl2b2lkIF9faW9t ZW0gKmhkbWljb3JlX3JlZ3M7CisJdm9pZCBfX2lvbWVtICpoZF9yZWdzOworCWludCBocGRfZ3Bp bzsKKworCXN0cnVjdCBjbGsgKnBpeGVsX2Nsb2NrOworCXN0cnVjdCBjbGsgKmhzbV9jbG9jazsK K307CisKKyNkZWZpbmUgSERNSV9SRUFEKG9mZnNldCkgcmVhZGwodmM0LT5oZG1pLT5oZG1pY29y ZV9yZWdzICsgb2Zmc2V0KQorI2RlZmluZSBIRE1JX1dSSVRFKG9mZnNldCwgdmFsKSB3cml0ZWwo dmFsLCB2YzQtPmhkbWktPmhkbWljb3JlX3JlZ3MgKyBvZmZzZXQpCisjZGVmaW5lIEhEX1JFQUQo b2Zmc2V0KSByZWFkbCh2YzQtPmhkbWktPmhkX3JlZ3MgKyBvZmZzZXQpCisjZGVmaW5lIEhEX1dS SVRFKG9mZnNldCwgdmFsKSB3cml0ZWwodmFsLCB2YzQtPmhkbWktPmhkX3JlZ3MgKyBvZmZzZXQp CisKKy8qIFZDNCBIRE1JIGVuY29kZXIgS01TIHN0cnVjdCAqLworc3RydWN0IHZjNF9oZG1pX2Vu Y29kZXIgeworCXN0cnVjdCB2YzRfZW5jb2RlciBiYXNlOworCWJvb2wgaGRtaV9tb25pdG9yOwor fTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdmM0X2hkbWlfZW5jb2RlciAqCit0b192YzRfaGRt aV9lbmNvZGVyKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlyZXR1cm4gY29udGFp bmVyX29mKGVuY29kZXIsIHN0cnVjdCB2YzRfaGRtaV9lbmNvZGVyLCBiYXNlLmJhc2UpOworfQor CisvKiBWQzQgSERNSSBjb25uZWN0b3IgS01TIHN0cnVjdCAqLworc3RydWN0IHZjNF9oZG1pX2Nv bm5lY3RvciB7CisJc3RydWN0IGRybV9jb25uZWN0b3IgYmFzZTsKKworCS8qIFNpbmNlIHRoZSBj b25uZWN0b3IgaXMgYXR0YWNoZWQgdG8ganVzdCB0aGUgb25lIGVuY29kZXIsCisJICogdGhpcyBp cyB0aGUgcmVmZXJlbmNlIHRvIGl0IHNvIHdlIGNhbiBkbyB0aGUgYmVzdF9lbmNvZGVyKCkKKwkg KiBob29rLgorCSAqLworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKK307CisKK3N0YXRp YyBpbmxpbmUgc3RydWN0IHZjNF9oZG1pX2Nvbm5lY3RvciAqCit0b192YzRfaGRtaV9jb25uZWN0 b3Ioc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlyZXR1cm4gY29udGFpbmVy X29mKGNvbm5lY3Rvciwgc3RydWN0IHZjNF9oZG1pX2Nvbm5lY3RvciwgYmFzZSk7Cit9CisKKyNk ZWZpbmUgSERNSV9SRUcocmVnKSB7IHJlZywgI3JlZyB9CitzdGF0aWMgY29uc3Qgc3RydWN0IHsK Kwl1MzIgcmVnOworCWNvbnN0IGNoYXIgKm5hbWU7Cit9IGhkbWlfcmVnc1tdID0geworCUhETUlf UkVHKFZDNF9IRE1JX0NPUkVfUkVWKSwKKwlIRE1JX1JFRyhWQzRfSERNSV9TV19SRVNFVF9DT05U Uk9MKSwKKwlIRE1JX1JFRyhWQzRfSERNSV9IT1RQTFVHX0lOVCksCisJSERNSV9SRUcoVkM0X0hE TUlfSE9UUExVRyksCisJSERNSV9SRUcoVkM0X0hETUlfSE9SWkEpLAorCUhETUlfUkVHKFZDNF9I RE1JX0hPUlpCKSwKKwlIRE1JX1JFRyhWQzRfSERNSV9GSUZPX0NUTCksCisJSERNSV9SRUcoVkM0 X0hETUlfU0NIRURVTEVSX0NPTlRST0wpLAorCUhETUlfUkVHKFZDNF9IRE1JX1ZFUlRBMCksCisJ SERNSV9SRUcoVkM0X0hETUlfVkVSVEExKSwKKwlIRE1JX1JFRyhWQzRfSERNSV9WRVJUQjApLAor CUhETUlfUkVHKFZDNF9IRE1JX1ZFUlRCMSksCisJSERNSV9SRUcoVkM0X0hETUlfVFhfUEhZX1JF U0VUX0NUTCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwl1MzIgcmVnOworCWNvbnN0 IGNoYXIgKm5hbWU7Cit9IGhkX3JlZ3NbXSA9IHsKKwlIRE1JX1JFRyhWQzRfSERfTV9DVEwpLAor CUhETUlfUkVHKFZDNF9IRF9NQUlfQ1RMKSwKKwlIRE1JX1JFRyhWQzRfSERfVklEX0NUTCksCisJ SERNSV9SRUcoVkM0X0hEX0NTQ19DVEwpLAorCUhETUlfUkVHKFZDNF9IRF9GUkFNRV9DT1VOVCks Cit9OworCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCitpbnQgdmM0X2hkbWlfZGVidWdmc19yZWdz KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBkcm1faW5mb19u b2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopbS0+cHJpdmF0ZTsKKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlzdHJ1Y3QgdmM0X2RldiAqdmM0 ID0gdG9fdmM0X2RldihkZXYpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUoaGRtaV9yZWdzKTsgaSsrKSB7CisJCXNlcV9wcmludGYobSwgIiVzICgweCUwNHgpOiAweCUw OHhcbiIsCisJCQkgICBoZG1pX3JlZ3NbaV0ubmFtZSwgaGRtaV9yZWdzW2ldLnJlZywKKwkJCSAg IEhETUlfUkVBRChoZG1pX3JlZ3NbaV0ucmVnKSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFS UkFZX1NJWkUoaGRfcmVncyk7IGkrKykgeworCQlzZXFfcHJpbnRmKG0sICIlcyAoMHglMDR4KTog MHglMDh4XG4iLAorCQkJICAgaGRfcmVnc1tpXS5uYW1lLCBoZF9yZWdzW2ldLnJlZywKKwkJCSAg IEhEX1JFQUQoaGRfcmVnc1tpXS5yZWcpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAv KiBDT05GSUdfREVCVUdfRlMgKi8KKworc3RhdGljIHZvaWQgdmM0X2hkbWlfZHVtcF9yZWdzKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9k ZXYoZGV2KTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhkbWlfcmVn cyk7IGkrKykgeworCQlEUk1fSU5GTygiMHglMDR4ICglcyk6IDB4JTA4eFxuIiwKKwkJCSBoZG1p X3JlZ3NbaV0ucmVnLCBoZG1pX3JlZ3NbaV0ubmFtZSwKKwkJCSBIRE1JX1JFQUQoaGRtaV9yZWdz W2ldLnJlZykpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShoZF9yZWdzKTsgaSsr KSB7CisJCURSTV9JTkZPKCIweCUwNHggKCVzKTogMHglMDh4XG4iLAorCQkJIGhkX3JlZ3NbaV0u cmVnLCBoZF9yZWdzW2ldLm5hbWUsCisJCQkgSERfUkVBRChoZF9yZWdzW2ldLnJlZykpOworCX0K K30KKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKK3ZjNF9oZG1pX2Nvbm5lY3Rv cl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKK3sK KwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJc3RydWN0IHZjNF9k ZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKKworCWlmICh2YzQtPmhkbWktPmhwZF9ncGlvKSB7 CisJCWlmIChncGlvX2dldF92YWx1ZSh2YzQtPmhkbWktPmhwZF9ncGlvKSkKKwkJCXJldHVybiBj b25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwkJZWxzZQorCQkJcmV0dXJuIGNvbm5lY3Rvcl9z dGF0dXNfZGlzY29ubmVjdGVkOworCX0KKworCWlmIChIRE1JX1JFQUQoVkM0X0hETUlfSE9UUExV RykgJiBWQzRfSERNSV9IT1RQTFVHX0NPTk5FQ1RFRCkKKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0 dXNfY29ubmVjdGVkOworCWVsc2UKKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVj dGVkOworfQorCitzdGF0aWMgdm9pZCB2YzRfaGRtaV9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihj b25uZWN0b3IpOworCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOworfQorCitzdGF0 aWMgaW50IHZjNF9oZG1pX2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgdmM0X2hkbWlfY29ubmVjdG9yICp2YzRfY29ubmVjdG9y ID0KKwkJdG9fdmM0X2hkbWlfY29ubmVjdG9yKGNvbm5lY3Rvcik7CisJc3RydWN0IGRybV9lbmNv ZGVyICplbmNvZGVyID0gdmM0X2Nvbm5lY3Rvci0+ZW5jb2RlcjsKKwlzdHJ1Y3QgdmM0X2hkbWlf ZW5jb2RlciAqdmM0X2VuY29kZXIgPSB0b192YzRfaGRtaV9lbmNvZGVyKGVuY29kZXIpOworCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKwlzdHJ1Y3QgdmM0X2RldiAq dmM0ID0gdG9fdmM0X2RldihkZXYpOworCWludCByZXQgPSAwOworCXN0cnVjdCBlZGlkICplZGlk OworCisJZWRpZCA9IGRybV9nZXRfZWRpZChjb25uZWN0b3IsIHZjNC0+aGRtaS0+ZGRjKTsKKwlp ZiAoIWVkaWQpCisJCXJldHVybiAtRU5PREVWOworCisJdmM0X2VuY29kZXItPmhkbWlfbW9uaXRv ciA9IGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKGVkaWQpOworCWRybV9tb2RlX2Nvbm5lY3Rvcl91 cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsIGVkaWQpOworCXJldCA9IGRybV9hZGRfZWRp ZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0 cnVjdCBkcm1fZW5jb2RlciAqCit2YzRfaGRtaV9jb25uZWN0b3JfYmVzdF9lbmNvZGVyKHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IHZjNF9oZG1pX2Nvbm5lY3Rv ciAqaGRtaV9jb25uZWN0b3IgPQorCQl0b192YzRfaGRtaV9jb25uZWN0b3IoY29ubmVjdG9yKTsK KwlyZXR1cm4gaGRtaV9jb25uZWN0b3ItPmVuY29kZXI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyB2YzRfaGRtaV9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRw bXMgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHBtcywKKwkuZGV0ZWN0ID0gdmM0X2hk bWlfY29ubmVjdG9yX2RldGVjdCwKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2lu Z2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGVzdHJveSA9IHZjNF9oZG1pX2Nvbm5lY3Rvcl9kZXN0 cm95LAorCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRv bWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNh dGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29u bmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25u ZWN0b3JfaGVscGVyX2Z1bmNzIHZjNF9oZG1pX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJ LmdldF9tb2RlcyA9IHZjNF9oZG1pX2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCisJLmJlc3RfZW5jb2Rl ciA9IHZjNF9oZG1pX2Nvbm5lY3Rvcl9iZXN0X2VuY29kZXIsCit9OworCitzdGF0aWMgc3RydWN0 IGRybV9jb25uZWN0b3IgKnZjNF9oZG1pX2Nvbm5lY3Rvcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCisJCQkJCQkgICAgIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gTlVMTDsKKwlzdHJ1Y3QgdmM0X2hkbWlfY29u bmVjdG9yICpoZG1pX2Nvbm5lY3RvcjsKKwlpbnQgcmV0ID0gMDsKKworCWhkbWlfY29ubmVjdG9y ID0gZGV2bV9remFsbG9jKGRldi0+ZGV2LCBzaXplb2YoKmhkbWlfY29ubmVjdG9yKSwKKwkJCQkg ICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWhkbWlfY29ubmVjdG9yKSB7CisJCXJldCA9IC1FTk9N RU07CisJCWdvdG8gZmFpbDsKKwl9CisJY29ubmVjdG9yID0gJmhkbWlfY29ubmVjdG9yLT5iYXNl OworCisJaGRtaV9jb25uZWN0b3ItPmVuY29kZXIgPSBlbmNvZGVyOworCisJZHJtX2Nvbm5lY3Rv cl9pbml0KGRldiwgY29ubmVjdG9yLCAmdmM0X2hkbWlfY29ubmVjdG9yX2Z1bmNzLAorCQkJICAg RFJNX01PREVfQ09OTkVDVE9SX0hETUlBKTsKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoY29u bmVjdG9yLCAmdmM0X2hkbWlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisKKwljb25uZWN0b3It PnBvbGxlZCA9IChEUk1fQ09OTkVDVE9SX1BPTExfQ09OTkVDVCB8CisJCQkgICAgIERSTV9DT05O RUNUT1JfUE9MTF9ESVNDT05ORUNUKTsKKworCWNvbm5lY3Rvci0+aW50ZXJsYWNlX2FsbG93ZWQg PSAwOworCWNvbm5lY3Rvci0+ZG91Ymxlc2Nhbl9hbGxvd2VkID0gMDsKKworCWRybV9tb2RlX2Nv bm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsIGVuY29kZXIpOworCisJcmV0dXJuIGNv bm5lY3RvcjsKKworIGZhaWw6CisJaWYgKGNvbm5lY3RvcikKKwkJdmM0X2hkbWlfY29ubmVjdG9y X2Rlc3Ryb3koY29ubmVjdG9yKTsKKworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKK3N0YXRp YyB2b2lkIHZjNF9oZG1pX2VuY29kZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXIpCit7CisJZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKK30KKworc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyB2YzRfaGRtaV9lbmNvZGVyX2Z1bmNzID0geworCS5k ZXN0cm95ID0gdmM0X2hkbWlfZW5jb2Rlcl9kZXN0cm95LAorfTsKKworc3RhdGljIHZvaWQgdmM0 X2hkbWlfZW5jb2Rlcl9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJ ICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKnVuYWRqdXN0ZWRfbW9kZSwKKwkJCQkgICAg ICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRl dik7CisJYm9vbCBkZWJ1Z19kdW1wX3JlZ3MgPSBmYWxzZTsKKwlib29sIGhzeW5jX3BvcyA9IG1v ZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19QSFNZTkM7CisJYm9vbCB2c3luY19wb3MgPSBtb2Rl LT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUFZTWU5DOworCXUzMiB2YWN0aXZlID0gKG1vZGUtPnZk aXNwbGF5ID4+CisJCSAgICAgICAoKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxB Q0UpID8gMSA6IDApKTsKKwl1MzIgdmVydGEgPSAoVkM0X1NFVF9GSUVMRChtb2RlLT52c3luY19l bmQgLSBtb2RlLT52c3luY19zdGFydCwKKwkJCQkgICBWQzRfSERNSV9WRVJUQV9WU1ApIHwKKwkJ ICAgICBWQzRfU0VUX0ZJRUxEKG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9kZS0+dmRpc3BsYXksCisJ CQkJICAgVkM0X0hETUlfVkVSVEFfVkZQKSB8CisJCSAgICAgVkM0X1NFVF9GSUVMRCh2YWN0aXZl LCBWQzRfSERNSV9WRVJUQV9WQUwpKTsKKwl1MzIgdmVydGIgPSAoVkM0X1NFVF9GSUVMRCgwLCBW QzRfSERNSV9WRVJUQl9WU1BPKSB8CisJCSAgICAgVkM0X1NFVF9GSUVMRChtb2RlLT52dG90YWwg LSBtb2RlLT52c3luY19lbmQsCisJCQkJICAgVkM0X0hETUlfVkVSVEJfVkJQKSk7CisKKwlpZiAo ZGVidWdfZHVtcF9yZWdzKSB7CisJCURSTV9JTkZPKCJIRE1JIHJlZ3MgYmVmb3JlOlxuIik7CisJ CXZjNF9oZG1pX2R1bXBfcmVncyhkZXYpOworCX0KKworCUhEX1dSSVRFKFZDNF9IRF9WSURfQ1RM LCAwKTsKKworCWNsa19zZXRfcmF0ZSh2YzQtPmhkbWktPnBpeGVsX2Nsb2NrLCBtb2RlLT5jbG9j ayAqIDEwMDApOworCisJSERNSV9XUklURShWQzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTCwKKwkJ ICAgSERNSV9SRUFEKFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MKSB8CisJCSAgIFZDNF9IRE1J X1NDSEVEVUxFUl9DT05UUk9MX01BTlVBTF9GT1JNQVQgfAorCQkgICBWQzRfSERNSV9TQ0hFRFVM RVJfQ09OVFJPTF9JR05PUkVfVlNZTkNfUFJFRElDVFMpOworCisJSERNSV9XUklURShWQzRfSERN SV9IT1JaQSwKKwkJICAgKHZzeW5jX3BvcyA/IFZDNF9IRE1JX0hPUlpBX1ZQT1MgOiAwKSB8CisJ CSAgIChoc3luY19wb3MgPyBWQzRfSERNSV9IT1JaQV9IUE9TIDogMCkgfAorCQkgICBWQzRfU0VU X0ZJRUxEKG1vZGUtPmhkaXNwbGF5LCBWQzRfSERNSV9IT1JaQV9IQVApKTsKKworCUhETUlfV1JJ VEUoVkM0X0hETUlfSE9SWkIsCisJCSAgIFZDNF9TRVRfRklFTEQobW9kZS0+aHRvdGFsIC0gbW9k ZS0+aHN5bmNfZW5kLAorCQkJCSBWQzRfSERNSV9IT1JaQl9IQlApIHwKKwkJICAgVkM0X1NFVF9G SUVMRChtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFydCwKKwkJCQkgVkM0X0hETUlf SE9SWkJfSFNQKSB8CisJCSAgIFZDNF9TRVRfRklFTEQobW9kZS0+aHN5bmNfc3RhcnQgLSBtb2Rl LT5oZGlzcGxheSwKKwkJCQkgVkM0X0hETUlfSE9SWkJfSEZQKSk7CisKKwlIRE1JX1dSSVRFKFZD NF9IRE1JX1ZFUlRBMCwgdmVydGEpOworCUhETUlfV1JJVEUoVkM0X0hETUlfVkVSVEExLCB2ZXJ0 YSk7CisKKwlIRE1JX1dSSVRFKFZDNF9IRE1JX1ZFUlRCMCwgdmVydGIpOworCUhETUlfV1JJVEUo VkM0X0hETUlfVkVSVEIxLCB2ZXJ0Yik7CisKKwlIRF9XUklURShWQzRfSERfVklEX0NUTCwKKwkJ ICh2c3luY19wb3MgPyAwIDogVkM0X0hEX1ZJRF9DVExfVlNZTkNfTE9XKSB8CisJCSAoaHN5bmNf cG9zID8gMCA6IFZDNF9IRF9WSURfQ1RMX0hTWU5DX0xPVykpOworCisJLyogVGhlIFJHQiBvcmRl ciBhcHBsaWVzIGV2ZW4gd2hlbiBDU0MgaXMgZGlzYWJsZWQuICovCisJSERfV1JJVEUoVkM0X0hE X0NTQ19DVEwsIFZDNF9TRVRfRklFTEQoVkM0X0hEX0NTQ19DVExfT1JERVJfQkdSLAorCQkJCQkg ICAgICAgVkM0X0hEX0NTQ19DVExfT1JERVIpKTsKKworCUhETUlfV1JJVEUoVkM0X0hETUlfRklG T19DVEwsIFZDNF9IRE1JX0ZJRk9fQ1RMX01BU1RFUl9TTEFWRV9OKTsKKworCWlmIChkZWJ1Z19k dW1wX3JlZ3MpIHsKKwkJRFJNX0lORk8oIkhETUkgcmVncyBhZnRlcjpcbiIpOworCQl2YzRfaGRt aV9kdW1wX3JlZ3MoZGV2KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHZjNF9oZG1pX2VuY29kZXJf ZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2Rl dihkZXYpOworCisJSERNSV9XUklURShWQzRfSERNSV9UWF9QSFlfUkVTRVRfQ1RMLCAweGYgPDwg MTYpOworCUhEX1dSSVRFKFZDNF9IRF9WSURfQ1RMLAorCQkgSERfUkVBRChWQzRfSERfVklEX0NU TCkgJiB+VkM0X0hEX1ZJRF9DVExfRU5BQkxFKTsKK30KKworc3RhdGljIHZvaWQgdmM0X2hkbWlf ZW5jb2Rlcl9lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCB2 YzRfaGRtaV9lbmNvZGVyICp2YzRfZW5jb2RlciA9IHRvX3ZjNF9oZG1pX2VuY29kZXIoZW5jb2Rl cik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgdmM0 X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOworCisJSERNSV9XUklURShWQzRfSERNSV9UWF9Q SFlfUkVTRVRfQ1RMLCAwKTsKKworCUhEX1dSSVRFKFZDNF9IRF9WSURfQ1RMLAorCQkgSERfUkVB RChWQzRfSERfVklEX0NUTCkgfAorCQkgVkM0X0hEX1ZJRF9DVExfRU5BQkxFIHwKKwkJIFZDNF9I RF9WSURfQ1RMX1VOREVSRkxPV19FTkFCTEUgfAorCQkgVkM0X0hEX1ZJRF9DVExfRlJBTUVfQ09V TlRFUl9SRVNFVCk7CisKKwlpZiAodmM0X2VuY29kZXItPmhkbWlfbW9uaXRvcikgeworCQlIRE1J X1dSSVRFKFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MLAorCQkJICAgSERNSV9SRUFEKFZDNF9I RE1JX1NDSEVEVUxFUl9DT05UUk9MKSB8CisJCQkgICBWQzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJP TF9NT0RFX0hETUkpOworCisJCXdoaWxlICghKEhETUlfUkVBRChWQzRfSERNSV9TQ0hFRFVMRVJf Q09OVFJPTCkgJgorCQkJIFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MX0hETUlfQUNUSVZFKSkg eworCQkJY3B1X3JlbGF4KCk7CisJCX0KKwl9IGVsc2UgeworCQlIRE1JX1dSSVRFKFZDNF9IRE1J X1JBTV9QQUNLRVRfQ09ORklHLAorCQkJICAgSERNSV9SRUFEKFZDNF9IRE1JX1JBTV9QQUNLRVRf Q09ORklHKSAmCisJCQkgICB+KFZDNF9IRE1JX1JBTV9QQUNLRVRfRU5BQkxFKSk7CisJCUhETUlf V1JJVEUoVkM0X0hETUlfU0NIRURVTEVSX0NPTlRST0wsCisJCQkgICBIRE1JX1JFQUQoVkM0X0hE TUlfU0NIRURVTEVSX0NPTlRST0wpICYKKwkJCSAgIH5WQzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJP TF9NT0RFX0hETUkpOworCisJCXdoaWxlIChIRE1JX1JFQUQoVkM0X0hETUlfU0NIRURVTEVSX0NP TlRST0wpICYKKwkJICAgICAgIFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MX0hETUlfQUNUSVZF KSB7CisJCQljcHVfcmVsYXgoKTsKKwkJfQorCX0KKworCWlmICh2YzRfZW5jb2Rlci0+aGRtaV9t b25pdG9yKSB7CisJCXUzMiBkcmlmdDsKKworCQlXQVJOX09OKCEoSERNSV9SRUFEKFZDNF9IRE1J X1NDSEVEVUxFUl9DT05UUk9MKSAmCisJCQkgIFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MX0hE TUlfQUNUSVZFKSk7CisJCUhETUlfV1JJVEUoVkM0X0hETUlfU0NIRURVTEVSX0NPTlRST0wsCisJ CQkgICBIRE1JX1JFQUQoVkM0X0hETUlfU0NIRURVTEVSX0NPTlRST0wpIHwKKwkJCSAgIFZDNF9I RE1JX1NDSEVEVUxFUl9DT05UUk9MX1ZFUlRfQUxXQVlTX0tFRVBPVVQpOworCisJCS8qIFhYWDog U2V0IEhETUlfUkFNX1BBQ0tFVF9DT05GSUcgKDEgPDwgMTYpIGFuZCBzZXQKKwkJICogdXAgdGhl IGluZm9mcmFtZS4KKwkJICovCisKKwkJZHJpZnQgPSBIRE1JX1JFQUQoVkM0X0hETUlfRklGT19D VEwpOworCQlkcmlmdCAmPSBWQzRfSERNSV9GSUZPX1ZBTElEX1dSSVRFX01BU0s7CisKKwkJSERN SV9XUklURShWQzRfSERNSV9GSUZPX0NUTCwKKwkJCSAgIGRyaWZ0ICYgflZDNF9IRE1JX0ZJRk9f Q1RMX1JFQ0VOVEVSKTsKKwkJSERNSV9XUklURShWQzRfSERNSV9GSUZPX0NUTCwKKwkJCSAgIGRy aWZ0IHwgVkM0X0hETUlfRklGT19DVExfUkVDRU5URVIpOworCQl1ZGVsYXkoMTAwMCk7CisJCUhE TUlfV1JJVEUoVkM0X0hETUlfRklGT19DVEwsCisJCQkgICBkcmlmdCAmIH5WQzRfSERNSV9GSUZP X0NUTF9SRUNFTlRFUik7CisJCUhETUlfV1JJVEUoVkM0X0hETUlfRklGT19DVEwsCisJCQkgICBk cmlmdCB8IFZDNF9IRE1JX0ZJRk9fQ1RMX1JFQ0VOVEVSKTsKKworCQl3aGlsZSAoKEhETUlfUkVB RChWQzRfSERNSV9GSUZPX0NUTCkgJgorCQkJVkM0X0hETUlfRklGT19DVExfUkVDRU5URVJfRE9O RSkgPT0gMCkgeworCQkJY3B1X3JlbGF4KCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIHZjNF9oZG1pX2VuY29kZXJfaGVscGVyX2Z1 bmNzID0geworCS5tb2RlX3NldCA9IHZjNF9oZG1pX2VuY29kZXJfbW9kZV9zZXQsCisJLmRpc2Fi bGUgPSB2YzRfaGRtaV9lbmNvZGVyX2Rpc2FibGUsCisJLmVuYWJsZSA9IHZjNF9oZG1pX2VuY29k ZXJfZW5hYmxlLAorfTsKKworc3RhdGljIGludCB2YzRfaGRtaV9iaW5kKHN0cnVjdCBkZXZpY2Ug KmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZHJt X2RldmljZSAqZHJtID0gZGV2X2dldF9kcnZkYXRhKG1hc3Rlcik7CisJc3RydWN0IHZjNF9kZXYg KnZjNCA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHZjNF9oZG1pICpoZG1pOworCXN0cnVj dCB2YzRfaGRtaV9lbmNvZGVyICp2YzRfaGRtaV9lbmNvZGVyOworCXN0cnVjdCBkZXZpY2Vfbm9k ZSAqZGRjX25vZGU7CisJdTMyIHZhbHVlOworCWludCByZXQ7CisKKwloZG1pID0gZGV2bV9remFs bG9jKGRldiwgc2l6ZW9mKCpoZG1pKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFoZG1pKQorCQlyZXR1 cm4gLUVOT01FTTsKKworCXZjNF9oZG1pX2VuY29kZXIgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXpl b2YoKnZjNF9oZG1pX2VuY29kZXIpLAorCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIXZjNF9oZG1p X2VuY29kZXIpCisJCXJldHVybiAtRU5PTUVNOworCXZjNF9oZG1pX2VuY29kZXItPmJhc2UudHlw ZSA9IFZDNF9FTkNPREVSX1RZUEVfSERNSTsKKwloZG1pLT5lbmNvZGVyID0gJnZjNF9oZG1pX2Vu Y29kZXItPmJhc2UuYmFzZTsKKworCWhkbWktPnBkZXYgPSBwZGV2OworCWhkbWktPmhkbWljb3Jl X3JlZ3MgPSB2YzRfaW9yZW1hcF9yZWdzKHBkZXYsIDApOworCWlmIChJU19FUlIoaGRtaS0+aGRt aWNvcmVfcmVncykpCisJCXJldHVybiBQVFJfRVJSKGhkbWktPmhkbWljb3JlX3JlZ3MpOworCisJ aGRtaS0+aGRfcmVncyA9IHZjNF9pb3JlbWFwX3JlZ3MocGRldiwgMSk7CisJaWYgKElTX0VSUiho ZG1pLT5oZF9yZWdzKSkKKwkJcmV0dXJuIFBUUl9FUlIoaGRtaS0+aGRfcmVncyk7CisKKwlkZGNf bm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUoZGV2LT5vZl9ub2RlLCAiZGRjIiwgMCk7CisJaWYgKCFk ZGNfbm9kZSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBmaW5kIGRkYyBub2RlIGluIGRldmlj ZSB0cmVlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaGRtaS0+cGl4ZWxfY2xvY2sg PSBkZXZtX2Nsa19nZXQoZGV2LCAicGl4ZWwiKTsKKwlpZiAoSVNfRVJSKGhkbWktPnBpeGVsX2Ns b2NrKSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBnZXQgcGl4ZWwgY2xvY2tcbiIpOworCQly ZXR1cm4gUFRSX0VSUihoZG1pLT5waXhlbF9jbG9jayk7CisJfQorCWhkbWktPmhzbV9jbG9jayA9 IGRldm1fY2xrX2dldChkZXYsICJoZG1pIik7CisJaWYgKElTX0VSUihoZG1pLT5oc21fY2xvY2sp KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGdldCBIRE1JIHN0YXRlIG1hY2hpbmUgY2xvY2tc biIpOworCQlyZXR1cm4gUFRSX0VSUihoZG1pLT5oc21fY2xvY2spOworCX0KKworCWhkbWktPmRk YyA9IG9mX2ZpbmRfaTJjX2FkYXB0ZXJfYnlfbm9kZShkZGNfbm9kZSk7CisJaWYgKCFoZG1pLT5k ZGMpIHsKKwkJRFJNX0RFQlVHKCJGYWlsZWQgdG8gZ2V0IGRkYyBpMmMgYWRhcHRlciBieSBub2Rl XG4iKTsKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCisJLyogRW5hYmxlIHRoZSBjbG9j a3MgYXQgc3RhcnR1cC4gIFdlIGNhbid0IHF1aXRlIHJlY292ZXIgZnJvbQorCSAqIHR1cm5pbmcg b2ZmIHRoZSBwaXhlbCBjbG9jayBkdXJpbmcgZGlzYWJsZS9lbmFibGVzIHlldCwgc28KKwkgKiBp dCdzIGFsd2F5cyBydW5uaW5nLgorCSAqLworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShoZG1p LT5waXhlbF9jbG9jayk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byB0dXJu IG9uIHBpeGVsIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcHV0X2kyYzsKKwl9CisK KwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaGRtaS0+aHNtX2Nsb2NrKTsKKwlpZiAocmV0KSB7 CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIHR1cm4gb24gSERNSSBzdGF0ZSBtYWNoaW5lIGNsb2Nr OiAlZFxuIiwKKwkJCSAgcmV0KTsKKwkJZ290byBlcnJfdW5wcmVwYXJlX3BpeDsKKwl9CisKKwkv KiBPbmx5IHVzZSB0aGUgR1BJTyBIUEQgcGluIGlmIHByZXNlbnQgaW4gdGhlIERULCBvdGhlcndp c2UKKwkgKiB3ZSdsbCB1c2UgdGhlIEhETUkgY29yZSdzIHJlZ2lzdGVyLgorCSAqLworCWlmIChv Zl9maW5kX3Byb3BlcnR5KGRldi0+b2Zfbm9kZSwgImhwZC1ncGlvIiwgJnZhbHVlKSkgeworCQlo ZG1pLT5ocGRfZ3BpbyA9IG9mX2dldF9uYW1lZF9ncGlvKGRldi0+b2Zfbm9kZSwgImhwZC1ncGlv IiwgMCk7CisJCWlmIChoZG1pLT5ocGRfZ3BpbyA8IDApIHsKKwkJCXJldCA9IGhkbWktPmhwZF9n cGlvOworCQkJZ290byBlcnJfdW5wcmVwYXJlX2hzbTsKKwkJfQorCX0KKworCXZjNC0+aGRtaSA9 IGhkbWk7CisKKwkvKiBIRE1JIGNvcmUgbXVzdCBiZSBlbmFibGVkLiAqLworCVdBUk5fT05fT05D RSgoSERfUkVBRChWQzRfSERfTV9DVEwpICYgVkM0X0hEX01fRU5BQkxFKSA9PSAwKTsKKworCWRy bV9lbmNvZGVyX2luaXQoZHJtLCBoZG1pLT5lbmNvZGVyLCAmdmM0X2hkbWlfZW5jb2Rlcl9mdW5j cywKKwkJCSBEUk1fTU9ERV9FTkNPREVSX1RNRFMpOworCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQo aGRtaS0+ZW5jb2RlciwgJnZjNF9oZG1pX2VuY29kZXJfaGVscGVyX2Z1bmNzKTsKKworCWhkbWkt PmNvbm5lY3RvciA9IHZjNF9oZG1pX2Nvbm5lY3Rvcl9pbml0KGRybSwgaGRtaS0+ZW5jb2Rlcik7 CisJaWYgKElTX0VSUihoZG1pLT5jb25uZWN0b3IpKSB7CisJCXJldCA9IFBUUl9FUlIoaGRtaS0+ Y29ubmVjdG9yKTsKKwkJZ290byBlcnJfZGVzdHJveV9lbmNvZGVyOworCX0KKworCXJldHVybiAw OworCitlcnJfZGVzdHJveV9lbmNvZGVyOgorCXZjNF9oZG1pX2VuY29kZXJfZGVzdHJveShoZG1p LT5lbmNvZGVyKTsKK2Vycl91bnByZXBhcmVfaHNtOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZSho ZG1pLT5oc21fY2xvY2spOworZXJyX3VucHJlcGFyZV9waXg6CisJY2xrX2Rpc2FibGVfdW5wcmVw YXJlKGhkbWktPnBpeGVsX2Nsb2NrKTsKK2Vycl9wdXRfaTJjOgorCXB1dF9kZXZpY2UoJnZjNC0+ aGRtaS0+ZGRjLT5kZXYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdmM0X2hk bWlfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkJ ICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2 ZGF0YShtYXN0ZXIpOworCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSBkcm0tPmRldl9wcml2YXRlOwor CXN0cnVjdCB2YzRfaGRtaSAqaGRtaSA9IHZjNC0+aGRtaTsKKworCXZjNF9oZG1pX2Nvbm5lY3Rv cl9kZXN0cm95KGhkbWktPmNvbm5lY3Rvcik7CisJdmM0X2hkbWlfZW5jb2Rlcl9kZXN0cm95KGhk bWktPmVuY29kZXIpOworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWktPnBpeGVsX2Nsb2Nr KTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+aHNtX2Nsb2NrKTsKKwlwdXRfZGV2aWNl KCZoZG1pLT5kZGMtPmRldik7CisKKwl2YzQtPmhkbWkgPSBOVUxMOworfQorCitzdGF0aWMgY29u c3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgdmM0X2hkbWlfb3BzID0geworCS5iaW5kICAgPSB2YzRf aGRtaV9iaW5kLAorCS51bmJpbmQgPSB2YzRfaGRtaV91bmJpbmQsCit9OworCitzdGF0aWMgaW50 IHZjNF9oZG1pX2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJl dHVybiBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZ2YzRfaGRtaV9vcHMpOworfQorCitzdGF0 aWMgaW50IHZjNF9oZG1pX2Rldl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK K3sKKwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZ2YzRfaGRtaV9vcHMpOworCXJldHVybiAw OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB2YzRfaGRtaV9kdF9tYXRj aFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYnJjbSxiY20yODM1LWhkbWkiIH0sCisJe30KK307 CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdmM0X2hkbWlfZHJpdmVyID0geworCS5wcm9iZSA9 IHZjNF9oZG1pX2Rldl9wcm9iZSwKKwkucmVtb3ZlID0gdmM0X2hkbWlfZGV2X3JlbW92ZSwKKwku ZHJpdmVyID0geworCQkubmFtZSA9ICJ2YzRfaGRtaSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IHZj NF9oZG1pX2R0X21hdGNoLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Zj NC92YzRfaHZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9odnMuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjE2NzNmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL3ZjNC92YzRfaHZzLmMKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBDb3B5cmln aHQgKEMpIDIwMTUgQnJvYWRjb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAq IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKy8qKgor ICogRE9DOiBWQzQgSFZTIG1vZHVsZS4KKyAqCisgKiBUaGUgSFZTIGlzIHRoZSBwaWVjZSBvZiBo YXJkd2FyZSB0aGF0IGRvZXMgdHJhbnNsYXRpb24sIHNjYWxpbmcsCisgKiBjb2xvcnNwYWNlIGNv bnZlcnNpb24sIGFuZCBjb21wb3NpdGluZyBvZiBwaXhlbHMgc3RvcmVkIGluCisgKiBmcmFtZWJ1 ZmZlcnMgaW50byBhIEZJRk8gb2YgcGl4ZWxzIGdvaW5nIG91dCB0byB0aGUgUGl4ZWwgVmFsdmUK KyAqIChDUlRDKS4gIEl0IG9wZXJhdGVzIGF0IHRoZSBzeXN0ZW0gY2xvY2sgcmF0ZSAodGhlIHN5 c3RlbSBhdWRpbworICogY2xvY2sgZ2F0ZSwgc3BlY2lmaWNhbGx5KSwgd2hpY2ggaXMgbXVjaCBo aWdoZXIgdGhhbiB0aGUgcGl4ZWwKKyAqIGNsb2NrIHJhdGUuCisgKgorICogVGhlcmUgaXMgYSBz aW5nbGUgZ2xvYmFsIEhWUywgd2l0aCBtdWx0aXBsZSBvdXRwdXQgRklGT3MgdGhhdCBjYW4KKyAq IGJlIGNvbnN1bWVkIGJ5IHRoZSBQVnMuICBUaGlzIGZpbGUganVzdCBtYW5hZ2VzIHRoZSByZXNv dXJjZXMgZm9yCisgKiB0aGUgSFZTLCB3aGlsZSB0aGUgdmM0X2NydGMuYyBjb2RlIGFjdHVhbGx5 IGRyaXZlcyBIVlMgc2V0dXAgZm9yCisgKiBlYWNoIENSVEMuCisgKi8KKworI2luY2x1ZGUgImxp bnV4L2NvbXBvbmVudC5oIgorI2luY2x1ZGUgInZjNF9kcnYuaCIKKyNpbmNsdWRlICJ2YzRfcmVn cy5oIgorCisjZGVmaW5lIEhWU19SRUcocmVnKSB7IHJlZywgI3JlZyB9CitzdGF0aWMgY29uc3Qg c3RydWN0IHsKKwl1MzIgcmVnOworCWNvbnN0IGNoYXIgKm5hbWU7Cit9IGh2c19yZWdzW10gPSB7 CisJSFZTX1JFRyhTQ0FMRVJfRElTUENUUkwpLAorCUhWU19SRUcoU0NBTEVSX0RJU1BTVEFUKSwK KwlIVlNfUkVHKFNDQUxFUl9ESVNQSUQpLAorCUhWU19SRUcoU0NBTEVSX0RJU1BFQ1RSTCksCisJ SFZTX1JFRyhTQ0FMRVJfRElTUFBST0YpLAorCUhWU19SRUcoU0NBTEVSX0RJU1BESVRIRVIpLAor CUhWU19SRUcoU0NBTEVSX0RJU1BFT0xOKSwKKwlIVlNfUkVHKFNDQUxFUl9ESVNQTElTVDApLAor CUhWU19SRUcoU0NBTEVSX0RJU1BMSVNUMSksCisJSFZTX1JFRyhTQ0FMRVJfRElTUExJU1QyKSwK KwlIVlNfUkVHKFNDQUxFUl9ESVNQTFNUQVQpLAorCUhWU19SRUcoU0NBTEVSX0RJU1BMQUNUMCks CisJSFZTX1JFRyhTQ0FMRVJfRElTUExBQ1QxKSwKKwlIVlNfUkVHKFNDQUxFUl9ESVNQTEFDVDIp LAorCUhWU19SRUcoU0NBTEVSX0RJU1BDVFJMMCksCisJSFZTX1JFRyhTQ0FMRVJfRElTUEJLR05E MCksCisJSFZTX1JFRyhTQ0FMRVJfRElTUFNUQVQwKSwKKwlIVlNfUkVHKFNDQUxFUl9ESVNQQkFT RTApLAorCUhWU19SRUcoU0NBTEVSX0RJU1BDVFJMMSksCisJSFZTX1JFRyhTQ0FMRVJfRElTUEJL R05EMSksCisJSFZTX1JFRyhTQ0FMRVJfRElTUFNUQVQxKSwKKwlIVlNfUkVHKFNDQUxFUl9ESVNQ QkFTRTEpLAorCUhWU19SRUcoU0NBTEVSX0RJU1BDVFJMMiksCisJSFZTX1JFRyhTQ0FMRVJfRElT UEJLR05EMiksCisJSFZTX1JFRyhTQ0FMRVJfRElTUFNUQVQyKSwKKwlIVlNfUkVHKFNDQUxFUl9E SVNQQkFTRTIpLAorCUhWU19SRUcoU0NBTEVSX0RJU1BBTFBIQTIpLAorfTsKKwordm9pZCB2YzRf aHZzX2R1bXBfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdmM0X2Rl diAqdmM0ID0gdG9fdmM0X2RldihkZXYpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFS UkFZX1NJWkUoaHZzX3JlZ3MpOyBpKyspIHsKKwkJRFJNX0lORk8oIjB4JTA0eCAoJXMpOiAweCUw OHhcbiIsCisJCQkgaHZzX3JlZ3NbaV0ucmVnLCBodnNfcmVnc1tpXS5uYW1lLAorCQkJIEhWU19S RUFEKGh2c19yZWdzW2ldLnJlZykpOworCX0KKworCURSTV9JTkZPKCJIVlMgY3R4OlxuIik7CisJ Zm9yIChpID0gMDsgaSA8IDY0OyBpICs9IDQpIHsKKwkJRFJNX0lORk8oIjB4JTA4eCAoJXMpOiAw eCUwOHggMHglMDh4IDB4JTA4eCAweCUwOHhcbiIsCisJCQkgaSAqIDQsIGkgPCBIVlNfQk9PVExP QURFUl9ETElTVF9FTkQgPyAiQiIgOiAiRCIsCisJCQkgKCh1aW50MzJfdCAqKXZjNC0+aHZzLT5k bGlzdClbaSArIDBdLAorCQkJICgodWludDMyX3QgKil2YzQtPmh2cy0+ZGxpc3QpW2kgKyAxXSwK KwkJCSAoKHVpbnQzMl90ICopdmM0LT5odnMtPmRsaXN0KVtpICsgMl0sCisJCQkgKCh1aW50MzJf dCAqKXZjNC0+aHZzLT5kbGlzdClbaSArIDNdKTsKKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfREVC VUdfRlMKK2ludCB2YzRfaHZzX2RlYnVnZnNfcmVncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQg KnVudXNlZCkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2lu Zm9fbm9kZSAqKW0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1p bm9yLT5kZXY7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKKwlpbnQg aTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGh2c19yZWdzKTsgaSsrKSB7CisJCXNl cV9wcmludGYobSwgIiVzICgweCUwNHgpOiAweCUwOHhcbiIsCisJCQkgICBodnNfcmVnc1tpXS5u YW1lLCBodnNfcmVnc1tpXS5yZWcsCisJCQkgICBIVlNfUkVBRChodnNfcmVnc1tpXS5yZWcpKTsK Kwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHZjNF9odnNfYmluZChz dHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSkKK3sK KwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7 CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YShtYXN0ZXIpOworCXN0 cnVjdCB2YzRfZGV2ICp2YzQgPSBkcm0tPmRldl9wcml2YXRlOworCXN0cnVjdCB2YzRfaHZzICpo dnMgPSBOVUxMOworCisJaHZzID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqaHZz KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFodnMpCisJCXJldHVybiAtRU5PTUVNOworCisJaHZzLT5w ZGV2ID0gcGRldjsKKworCWh2cy0+cmVncyA9IHZjNF9pb3JlbWFwX3JlZ3MocGRldiwgMCk7CisJ aWYgKElTX0VSUihodnMtPnJlZ3MpKQorCQlyZXR1cm4gUFRSX0VSUihodnMtPnJlZ3MpOworCisJ aHZzLT5kbGlzdCA9IGh2cy0+cmVncyArIFNDQUxFUl9ETElTVF9TVEFSVDsKKworCXZjNC0+aHZz ID0gaHZzOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2YzRfaHZzX3VuYmluZChzdHJ1 Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCSAgIHZvaWQgKmRhdGEp Cit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YShtYXN0ZXIpOwor CXN0cnVjdCB2YzRfZGV2ICp2YzQgPSBkcm0tPmRldl9wcml2YXRlOworCisJdmM0LT5odnMgPSBO VUxMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgdmM0X2h2c19vcHMg PSB7CisJLmJpbmQgICA9IHZjNF9odnNfYmluZCwKKwkudW5iaW5kID0gdmM0X2h2c191bmJpbmQs Cit9OworCitzdGF0aWMgaW50IHZjNF9odnNfZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpCit7CisJcmV0dXJuIGNvbXBvbmVudF9hZGQoJnBkZXYtPmRldiwgJnZjNF9odnNf b3BzKTsKK30KKworc3RhdGljIGludCB2YzRfaHZzX2Rldl9yZW1vdmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKK3sKKwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZ2YzRfaHZzX29w cyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHZj NF9odnNfZHRfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImJyY20sYmNtMjgzNS1odnMi IH0sCisJe30KK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdmM0X2h2c19kcml2ZXIgPSB7 CisJLnByb2JlID0gdmM0X2h2c19kZXZfcHJvYmUsCisJLnJlbW92ZSA9IHZjNF9odnNfZGV2X3Jl bW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ2YzRfaHZzIiwKKwkJLm9mX21hdGNoX3Rh YmxlID0gdmM0X2h2c19kdF9tYXRjaCwKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS92YzQvdmM0X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfa21zLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI0MWM4ZgotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2ttcy5jCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBD b3B5cmlnaHQgKEMpIDIwMTUgQnJvYWRjb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg YXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisK Ky8qKgorICogRE9DOiBWQzQgS01TCisgKgorICogVGhpcyBpcyB0aGUgZ2VuZXJhbCBjb2RlIGZv ciBpbXBsZW1lbnRpbmcgS01TIG1vZGUgc2V0dGluZyB0aGF0CisgKiBkb2Vzbid0IGNsZWFybHkg YXNzb2NpYXRlIHdpdGggYW55IG9mIHRoZSBvdGhlciBvYmplY3RzIChwbGFuZSwKKyAqIGNydGMs IEhETUkgZW5jb2RlcikuCisgKi8KKworI2luY2x1ZGUgImRybV9jcnRjLmgiCisjaW5jbHVkZSAi ZHJtX2F0b21pY19oZWxwZXIuaCIKKyNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKKyNpbmNs dWRlICJkcm1fcGxhbmVfaGVscGVyLmgiCisjaW5jbHVkZSAiZHJtX2ZiX2NtYV9oZWxwZXIuaCIK KyNpbmNsdWRlICJ2YzRfZHJ2LmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX21vZGVfY29u ZmlnX2Z1bmNzIHZjNF9tb2RlX2Z1bmNzID0geworCS5hdG9taWNfY2hlY2sgPSBkcm1fYXRvbWlj X2hlbHBlcl9jaGVjaywKKwkuYXRvbWljX2NvbW1pdCA9IGRybV9hdG9taWNfaGVscGVyX2NvbW1p dCwKKwkuZmJfY3JlYXRlID0gZHJtX2ZiX2NtYV9jcmVhdGUsCit9OworCitpbnQgdmM0X2ttc19s b2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGRybV92 YmxhbmtfaW5pdChkZXYsIGRldi0+bW9kZV9jb25maWcubnVtX2NydGMpOworCWlmIChyZXQgPCAw KSB7CisJCWRldl9lcnIoZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB2YmxhbmtcbiIp OworCQlyZXR1cm4gcmV0OworCX0KKworCWRldi0+bW9kZV9jb25maWcubWF4X3dpZHRoID0gMjA0 ODsKKwlkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSAyMDQ4OworCWRldi0+bW9kZV9jb25m aWcuZnVuY3MgPSAmdmM0X21vZGVfZnVuY3M7CisJZGV2LT5tb2RlX2NvbmZpZy5wcmVmZXJyZWRf ZGVwdGggPSAyNDsKKworCWRybV9tb2RlX2NvbmZpZ19yZXNldChkZXYpOworCisJZHJtX2ZiZGV2 X2NtYV9pbml0KGRldiwgMzIsCisJCQkgICBkZXYtPm1vZGVfY29uZmlnLm51bV9jcnRjLAorCQkJ ICAgZGV2LT5tb2RlX2NvbmZpZy5udW1fY29ubmVjdG9yKTsKKworCWRybV9rbXNfaGVscGVyX3Bv bGxfaW5pdChkZXYpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vdmM0L3ZjNF9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcGxhbmUuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGQ4YjEwCi0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcGxhbmUuYwpAQCAtMCwwICsxLDMyMCBAQAorLyoK KyAqIENvcHlyaWdodCAoQykgMjAxNSBCcm9hZGNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp b24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisg Ki8KKworLyoqCisgKiBET0M6IFZDNCBwbGFuZSBtb2R1bGUKKyAqCisgKiBFYWNoIERSTSBwbGFu ZSBpcyBhIGxheWVyIG9mIHBpeGVscyBiZWluZyBzY2FubmVkIG91dCBieSB0aGUgSFZTLgorICoK KyAqIEF0IGF0b21pYyBtb2Rlc2V0IGNoZWNrIHRpbWUsIHdlIGNvbXB1dGUgdGhlIEhWUyBkaXNw bGF5IGVsZW1lbnQKKyAqIHN0YXRlIHRoYXQgd291bGQgYmUgbmVjZXNzYXJ5IGZvciBkaXNwbGF5 aW5nIHRoZSBwbGFuZSAoZ2l2aW5nIHVzIGEKKyAqIGNoYW5jZSB0byBmaWd1cmUgb3V0IGlmIGEg cGxhbmUgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkKSwgdGhlbiBhdAorICogYXRvbWljIGZsdXNo IHRpbWUgdGhlIENSVEMgd2lsbCBhc2sgdXMgdG8gd3JpdGUgb3VyIGVsZW1lbnQgc3RhdGUKKyAq IGludG8gdGhlIHJlZ2lvbiBvZiB0aGUgSFZTIHRoYXQgaXQgaGFzIGFsbG9jYXRlZCBmb3IgdXMu CisgKi8KKworI2luY2x1ZGUgInZjNF9kcnYuaCIKKyNpbmNsdWRlICJ2YzRfcmVncy5oIgorI2lu Y2x1ZGUgImRybV9hdG9taWNfaGVscGVyLmgiCisjaW5jbHVkZSAiZHJtX2ZiX2NtYV9oZWxwZXIu aCIKKyNpbmNsdWRlICJkcm1fcGxhbmVfaGVscGVyLmgiCisKK3N0cnVjdCB2YzRfcGxhbmVfc3Rh dGUgeworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgYmFzZTsKKwl1MzIgKmRsaXN0OworCXUzMiBk bGlzdF9zaXplOyAvKiBOdW1iZXIgb2YgZHdvcmRzIGluIGFsbG9jYXRlZCBmb3IgdGhlIGRpc3Bs YXkgbGlzdCAqLworCXUzMiBkbGlzdF9jb3VudDsgLyogTnVtYmVyIG9mIHVzZWQgZHdvcmRzIGlu IHRoZSBkaXNwbGF5IGxpc3QuICovCit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2YzRfcGxh bmVfc3RhdGUgKgordG9fdmM0X3BsYW5lX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0 YXRlKQoreworCXJldHVybiAoc3RydWN0IHZjNF9wbGFuZV9zdGF0ZSAqKXN0YXRlOworfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IGh2c19mb3JtYXQgeworCXUzMiBkcm07IC8qIERSTV9GT1JNQVRf KiAqLworCXUzMiBodnM7IC8qIEhWU19GT1JNQVRfKiAqLworCXUzMiBwaXhlbF9vcmRlcjsKKwli b29sIGhhc19hbHBoYTsKK30gaHZzX2Zvcm1hdHNbXSA9IHsKKwl7CisJCS5kcm0gPSBEUk1fRk9S TUFUX1hSR0I4ODg4LCAuaHZzID0gSFZTX1BJWEVMX0ZPUk1BVF9SR0JBODg4OCwKKwkJLnBpeGVs X29yZGVyID0gSFZTX1BJWEVMX09SREVSX0FCR1IsIC5oYXNfYWxwaGEgPSBmYWxzZSwKKwl9LAor CXsKKwkJLmRybSA9IERSTV9GT1JNQVRfQVJHQjg4ODgsIC5odnMgPSBIVlNfUElYRUxfRk9STUFU X1JHQkE4ODg4LAorCQkucGl4ZWxfb3JkZXIgPSBIVlNfUElYRUxfT1JERVJfQUJHUiwgLmhhc19h bHBoYSA9IHRydWUsCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHZzX2Zvcm1hdCAq dmM0X2dldF9odnNfZm9ybWF0KHUzMiBkcm1fZm9ybWF0KQoreworCXVuc2lnbmVkIGk7CisKKwlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShodnNfZm9ybWF0cyk7IGkrKykgeworCQlpZiAoaHZz X2Zvcm1hdHNbaV0uZHJtID09IGRybV9mb3JtYXQpCisJCQlyZXR1cm4gJmh2c19mb3JtYXRzW2ld OworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgYm9vbCBwbGFuZV9lbmFibGVkKHN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXJldHVybiBzdGF0ZS0+ZmIgJiYgc3Rh dGUtPmNydGM7Cit9CisKK3N0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnZjNF9wbGFuZV9kdXBsaWNh dGVfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJc3RydWN0IHZjNF9wbGFuZV9z dGF0ZSAqdmM0X3N0YXRlOworCisJaWYgKFdBUk5fT04oIXBsYW5lLT5zdGF0ZSkpCisJCXJldHVy biBOVUxMOworCisJdmM0X3N0YXRlID0ga21lbWR1cChwbGFuZS0+c3RhdGUsIHNpemVvZigqdmM0 X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2YzRfc3RhdGUpCisJCXJldHVybiBOVUxMOwor CisJX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUocGxhbmUsICZ2YzRf c3RhdGUtPmJhc2UpOworCisJaWYgKHZjNF9zdGF0ZS0+ZGxpc3QpIHsKKwkJdmM0X3N0YXRlLT5k bGlzdCA9IGttZW1kdXAodmM0X3N0YXRlLT5kbGlzdCwKKwkJCQkJICAgdmM0X3N0YXRlLT5kbGlz dF9jb3VudCAqIDQsCisJCQkJCSAgIEdGUF9LRVJORUwpOworCQlpZiAoIXZjNF9zdGF0ZS0+ZGxp c3QpIHsKKwkJCWtmcmVlKHZjNF9zdGF0ZSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQl2YzRf c3RhdGUtPmRsaXN0X3NpemUgPSB2YzRfc3RhdGUtPmRsaXN0X2NvdW50OworCX0KKworCXJldHVy biAmdmM0X3N0YXRlLT5iYXNlOworfQorCit2b2lkIHZjNF9wbGFuZV9kZXN0cm95X3N0YXRlKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpz dGF0ZSkKK3sKKwlzdHJ1Y3QgdmM0X3BsYW5lX3N0YXRlICp2YzRfc3RhdGUgPSB0b192YzRfcGxh bmVfc3RhdGUoc3RhdGUpOworCisJa2ZyZWUodmM0X3N0YXRlLT5kbGlzdCk7CisJX19kcm1fYXRv bWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlKHBsYW5lLCAmdmM0X3N0YXRlLT5iYXNlKTsK KwlrZnJlZShzdGF0ZSk7Cit9CisKKy8qIENhbGxlZCBkdXJpbmcgaW5pdCB0byBhbGxvY2F0ZSB0 aGUgcGxhbmUncyBhdG9taWMgc3RhdGUuICovCit2b2lkIHZjNF9wbGFuZV9yZXNldChzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSkKK3sKKwlzdHJ1Y3QgdmM0X3BsYW5lX3N0YXRlICp2YzRfc3RhdGU7 CisKKwlXQVJOX09OKHBsYW5lLT5zdGF0ZSk7CisKKwl2YzRfc3RhdGUgPSBremFsbG9jKHNpemVv ZigqdmM0X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2YzRfc3RhdGUpCisJCXJldHVybjsK KworCXBsYW5lLT5zdGF0ZSA9ICZ2YzRfc3RhdGUtPmJhc2U7CisJdmM0X3N0YXRlLT5iYXNlLnBs YW5lID0gcGxhbmU7Cit9CisKK3N0YXRpYyB2b2lkIHZjNF9kbGlzdF93cml0ZShzdHJ1Y3QgdmM0 X3BsYW5lX3N0YXRlICp2YzRfc3RhdGUsIHUzMiB2YWwpCit7CisJaWYgKHZjNF9zdGF0ZS0+ZGxp c3RfY291bnQgPT0gdmM0X3N0YXRlLT5kbGlzdF9zaXplKSB7CisJCXUzMiBuZXdfc2l6ZSA9IG1h eCg0dSwgdmM0X3N0YXRlLT5kbGlzdF9jb3VudCAqIDIpOworCQl1MzIgKm5ld19kbGlzdCA9IGtt YWxsb2MobmV3X3NpemUgKiA0LCBHRlBfS0VSTkVMKTsKKworCQlpZiAoIW5ld19kbGlzdCkKKwkJ CXJldHVybjsKKwkJbWVtY3B5KG5ld19kbGlzdCwgdmM0X3N0YXRlLT5kbGlzdCwgdmM0X3N0YXRl LT5kbGlzdF9jb3VudCAqIDQpOworCisJCWtmcmVlKHZjNF9zdGF0ZS0+ZGxpc3QpOworCQl2YzRf c3RhdGUtPmRsaXN0ID0gbmV3X2RsaXN0OworCQl2YzRfc3RhdGUtPmRsaXN0X3NpemUgPSBuZXdf c2l6ZTsKKwl9CisKKwl2YzRfc3RhdGUtPmRsaXN0W3ZjNF9zdGF0ZS0+ZGxpc3RfY291bnQrK10g PSB2YWw7Cit9CisKKy8qIFdyaXRlcyBvdXQgYSBmdWxsIGRpc3BsYXkgbGlzdCBmb3IgYW4gYWN0 aXZlIHBsYW5lIHRvIHRoZSBwbGFuZSdzCisgKiBwcml2YXRlIGRsaXN0IHN0YXRlLgorICovCitz dGF0aWMgaW50IHZjNF9wbGFuZV9tb2RlX3NldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJ CSAgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCB2YzRfcGxh bmVfc3RhdGUgKnZjNF9zdGF0ZSA9IHRvX3ZjNF9wbGFuZV9zdGF0ZShzdGF0ZSk7CisJc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBzdGF0ZS0+ZmI7CisJc3RydWN0IGRybV9nZW1fY21hX29i amVjdCAqYm8gPSBkcm1fZmJfY21hX2dldF9nZW1fb2JqKGZiLCAwKTsKKwl1MzIgY3RsMF9vZmZz ZXQgPSB2YzRfc3RhdGUtPmRsaXN0X2NvdW50OworCWNvbnN0IHN0cnVjdCBodnNfZm9ybWF0ICpm b3JtYXQgPSB2YzRfZ2V0X2h2c19mb3JtYXQoZmItPnBpeGVsX2Zvcm1hdCk7CisJdWludDMyX3Qg b2Zmc2V0ID0gZmItPm9mZnNldHNbMF07CisJaW50IGNydGNfeCA9IHN0YXRlLT5jcnRjX3g7CisJ aW50IGNydGNfeSA9IHN0YXRlLT5jcnRjX3k7CisJaW50IGNydGNfdyA9IHN0YXRlLT5jcnRjX3c7 CisJaW50IGNydGNfaCA9IHN0YXRlLT5jcnRjX2g7CisKKwlpZiAoY3J0Y194IDwgMCkgeworCQlv ZmZzZXQgKz0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCkgKiAtY3J0 Y194OworCQljcnRjX3cgKz0gY3J0Y194OworCQljcnRjX3ggPSAwOworCX0KKworCWlmIChjcnRj X3kgPCAwKSB7CisJCW9mZnNldCArPSBmYi0+cGl0Y2hlc1swXSAqIC1jcnRjX3k7CisJCWNydGNf aCArPSBjcnRjX3k7CisJCWNydGNfeSA9IDA7CisJfQorCisJdmM0X2RsaXN0X3dyaXRlKHZjNF9z dGF0ZSwKKwkJCVNDQUxFUl9DVEwwX1ZBTElEIHwKKwkJCShmb3JtYXQtPnBpeGVsX29yZGVyIDw8 IFNDQUxFUl9DVEwwX09SREVSX1NISUZUKSB8CisJCQkoZm9ybWF0LT5odnMgPDwgU0NBTEVSX0NU TDBfUElYRUxfRk9STUFUX1NISUZUKSB8CisJCQlTQ0FMRVJfQ1RMMF9VTklUWSk7CisKKwkvKiBQ b3NpdGlvbiBXb3JkIDA6IEltYWdlIFBvc2l0aW9ucyBhbmQgQWxwaGEgVmFsdWUgKi8KKwl2YzRf ZGxpc3Rfd3JpdGUodmM0X3N0YXRlLAorCQkJVkM0X1NFVF9GSUVMRCgweGZmLCBTQ0FMRVJfUE9T MF9GSVhFRF9BTFBIQSkgfAorCQkJVkM0X1NFVF9GSUVMRChjcnRjX3gsIFNDQUxFUl9QT1MwX1NU QVJUX1gpIHwKKwkJCVZDNF9TRVRfRklFTEQoY3J0Y195LCBTQ0FMRVJfUE9TMF9TVEFSVF9ZKSk7 CisKKwkvKiBQb3NpdGlvbiBXb3JkIDE6IFNjYWxlZCBJbWFnZSBEaW1lbnNpb25zLgorCSAqIFNr aXBwZWQgZHVlIHRvIFNDQUxFUl9DVEwwX1VOSVRZIHNjYWxpbmcuCisJICovCisKKwkvKiBQb3Np dGlvbiBXb3JkIDI6IFNvdXJjZSBJbWFnZSBTaXplLCBBbHBoYSBNb2RlICovCisJdmM0X2RsaXN0 X3dyaXRlKHZjNF9zdGF0ZSwKKwkJCVZDNF9TRVRfRklFTEQoZm9ybWF0LT5oYXNfYWxwaGEgPwor CQkJCSAgICAgIFNDQUxFUl9QT1MyX0FMUEhBX01PREVfUElQRUxJTkUgOgorCQkJCSAgICAgIFND QUxFUl9QT1MyX0FMUEhBX01PREVfRklYRUQsCisJCQkJICAgICAgU0NBTEVSX1BPUzJfQUxQSEFf TU9ERSkgfAorCQkJVkM0X1NFVF9GSUVMRChjcnRjX3csIFNDQUxFUl9QT1MyX1dJRFRIKSB8CisJ CQlWQzRfU0VUX0ZJRUxEKGNydGNfaCwgU0NBTEVSX1BPUzJfSEVJR0hUKSk7CisKKwkvKiBQb3Np dGlvbiBXb3JkIDM6IENvbnRleHQuICBXcml0dGVuIGJ5IHRoZSBIVlMuICovCisJdmM0X2RsaXN0 X3dyaXRlKHZjNF9zdGF0ZSwgMHhjMGMwYzBjMCk7CisKKwkvKiBQb2ludGVyIFdvcmQgMDogUkdC IC8gWSBQb2ludGVyICovCisJdmM0X2RsaXN0X3dyaXRlKHZjNF9zdGF0ZSwgYm8tPnBhZGRyICsg b2Zmc2V0KTsKKworCS8qIFBvaW50ZXIgQ29udGV4dCBXb3JkIDA6IFdyaXR0ZW4gYnkgdGhlIEhW UyAqLworCXZjNF9kbGlzdF93cml0ZSh2YzRfc3RhdGUsIDB4YzBjMGMwYzApOworCisJLyogUGl0 Y2ggd29yZCAwOiBQb2ludGVyIDAgUGl0Y2ggKi8KKwl2YzRfZGxpc3Rfd3JpdGUodmM0X3N0YXRl LAorCQkJVkM0X1NFVF9GSUVMRChmYi0+cGl0Y2hlc1swXSwgU0NBTEVSX1NSQ19QSVRDSCkpOwor CisJdmM0X3N0YXRlLT5kbGlzdFtjdGwwX29mZnNldF0gfD0KKwkJVkM0X1NFVF9GSUVMRCh2YzRf c3RhdGUtPmRsaXN0X2NvdW50LCBTQ0FMRVJfQ1RMMF9TSVpFKTsKKworCXJldHVybiAwOworfQor CisvKiBJZiBhIG1vZGVzZXQgaW52b2x2ZXMgY2hhbmdpbmcgdGhlIHNldHVwIG9mIGEgcGxhbmUs IHRoZSBhdG9taWMKKyAqIGluZnJhc3RydWN0dXJlIHdpbGwgY2FsbCB0aGlzIHRvIHZhbGlkYXRl IGEgcHJvcG9zZWQgcGxhbmUgc2V0dXAuCisgKiBIb3dldmVyLCBpZiBhIHBsYW5lIGlzbid0IGdl dHRpbmcgdXBkYXRlZCwgdGhpcyAoYW5kIHRoZQorICogY29ycmVzcG9uZGluZyB2YzRfcGxhbmVf YXRvbWljX3VwZGF0ZSkgd29uJ3QgZ2V0IGNhbGxlZC4gIFRodXMsIHdlCisgKiBjb21wdXRlIHRo ZSBkbGlzdCBoZXJlIGFuZCBoYXZlIGFsbCBhY3RpdmUgcGxhbmUgZGxpc3RzIGdldCB1cGRhdGVk CisgKiBpbiB0aGUgQ1JUQydzIGZsdXNoLgorICovCitzdGF0aWMgaW50IHZjNF9wbGFuZV9hdG9t aWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICBzdHJ1Y3QgZHJtX3BsYW5l X3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgdmM0X3BsYW5lX3N0YXRlICp2YzRfc3RhdGUgPSB0 b192YzRfcGxhbmVfc3RhdGUoc3RhdGUpOworCisJdmM0X3N0YXRlLT5kbGlzdF9jb3VudCA9IDA7 CisKKwlpZiAocGxhbmVfZW5hYmxlZChzdGF0ZSkpCisJCXJldHVybiB2YzRfcGxhbmVfbW9kZV9z ZXQocGxhbmUsIHN0YXRlKTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2 YzRfcGxhbmVfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgICAg c3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQoreworCS8qIE5vIGNvbnRlbnRzIGhl cmUuICBTaW5jZSB3ZSBkb24ndCBrbm93IHdoZXJlIGluIHRoZSBDUlRDJ3MKKwkgKiBkbGlzdCB3 ZSBzaG91bGQgYmUgc3RvcmVkLCBvdXIgZGxpc3QgaXMgdXBsb2FkZWQgdG8gdGhlCisJICogaGFy ZHdhcmUgd2l0aCB2YzRfcGxhbmVfd3JpdGVfZGxpc3QoKSBhdCBDUlRDIGF0b21pY19mbHVzaAor CSAqIHRpbWUuCisJICovCit9CisKK3UzMiB2YzRfcGxhbmVfd3JpdGVfZGxpc3Qoc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUsIHUzMiBfX2lvbWVtICpkbGlzdCkKK3sKKwlzdHJ1Y3QgdmM0X3BsYW5l X3N0YXRlICp2YzRfc3RhdGUgPSB0b192YzRfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwlp bnQgaTsKKworCS8qIENhbid0IG1lbWNweV90b2lvKCkgYmVjYXVzZSBpdCBuZWVkcyB0byBiZSAz Mi1iaXQgd3JpdGVzLiAqLworCWZvciAoaSA9IDA7IGkgPCB2YzRfc3RhdGUtPmRsaXN0X2NvdW50 OyBpKyspCisJCXdyaXRlbCh2YzRfc3RhdGUtPmRsaXN0W2ldLCAmZGxpc3RbaV0pOworCisJcmV0 dXJuIHZjNF9zdGF0ZS0+ZGxpc3RfY291bnQ7Cit9CisKK3UzMiB2YzRfcGxhbmVfZGxpc3Rfc2l6 ZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgdmM0X3BsYW5lX3N0 YXRlICp2YzRfc3RhdGUgPSB0b192YzRfcGxhbmVfc3RhdGUoc3RhdGUpOworCisJcmV0dXJuIHZj NF9zdGF0ZS0+ZGxpc3RfY291bnQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5l X2hlbHBlcl9mdW5jcyB2YzRfcGxhbmVfaGVscGVyX2Z1bmNzID0geworCS5wcmVwYXJlX2ZiID0g TlVMTCwKKwkuY2xlYW51cF9mYiA9IE5VTEwsCisJLmF0b21pY19jaGVjayA9IHZjNF9wbGFuZV9h dG9taWNfY2hlY2ssCisJLmF0b21pY191cGRhdGUgPSB2YzRfcGxhbmVfYXRvbWljX3VwZGF0ZSwK K307CisKK3N0YXRpYyB2b2lkIHZjNF9wbGFuZV9kZXN0cm95KHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lKQoreworCWRybV9wbGFuZV9oZWxwZXJfZGlzYWJsZShwbGFuZSk7CisJZHJtX3BsYW5lX2Ns ZWFudXAocGxhbmUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyB2 YzRfcGxhbmVfZnVuY3MgPSB7CisJLnVwZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX3Vw ZGF0ZV9wbGFuZSwKKwkuZGlzYWJsZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX2Rpc2FibGVf cGxhbmUsCisJLmRlc3Ryb3kgPSB2YzRfcGxhbmVfZGVzdHJveSwKKwkuc2V0X3Byb3BlcnR5ID0g TlVMTCwKKwkucmVzZXQgPSB2YzRfcGxhbmVfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3Rh dGUgPSB2YzRfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9 IHZjNF9wbGFuZV9kZXN0cm95X3N0YXRlLAorfTsKKworc3RydWN0IGRybV9wbGFuZSAqdmM0X3Bs YW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgZW51bSBkcm1fcGxhbmVfdHlw ZSB0eXBlKQoreworCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gTlVMTDsKKwlzdHJ1Y3QgdmM0 X3BsYW5lICp2YzRfcGxhbmU7CisJdTMyIGZvcm1hdHNbQVJSQVlfU0laRShodnNfZm9ybWF0cyld OworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGk7CisKKwl2YzRfcGxhbmUgPSBkZXZtX2t6YWxs b2MoZGV2LT5kZXYsIHNpemVvZigqdmM0X3BsYW5lKSwKKwkJCQkgR0ZQX0tFUk5FTCk7CisJaWYg KCF2YzRfcGxhbmUpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCWZv ciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGh2c19mb3JtYXRzKTsgaSsrKQorCQlmb3JtYXRzW2ld ID0gaHZzX2Zvcm1hdHNbaV0uZHJtOworCXBsYW5lID0gJnZjNF9wbGFuZS0+YmFzZTsKKwlyZXQg PSBkcm1fdW5pdmVyc2FsX3BsYW5lX2luaXQoZGV2LCBwbGFuZSwgMHhmZiwKKwkJCQkgICAgICAg JnZjNF9wbGFuZV9mdW5jcywKKwkJCQkgICAgICAgZm9ybWF0cywgQVJSQVlfU0laRShmb3JtYXRz KSwKKwkJCQkgICAgICAgdHlwZSk7CisKKwlkcm1fcGxhbmVfaGVscGVyX2FkZChwbGFuZSwgJnZj NF9wbGFuZV9oZWxwZXJfZnVuY3MpOworCisJcmV0dXJuIHBsYW5lOworZmFpbDoKKwlpZiAocGxh bmUpCisJCXZjNF9wbGFuZV9kZXN0cm95KHBsYW5lKTsKKworCXJldHVybiBFUlJfUFRSKHJldCk7 Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9yZWdzLmggYi9kcml2ZXJz L2dwdS9kcm0vdmM0L3ZjNF9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uOWU0ZTkwNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3Jl Z3MuaApAQCAtMCwwICsxLDU3MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgwqkgMjAxNC0yMDE1IEJy b2FkY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIFZDNF9SRUdTX0gK KyNkZWZpbmUgVkM0X1JFR1NfSAorCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisKKyNkZWZp bmUgVkM0X01BU0soaGlnaCwgbG93KSAoKHUzMilHRU5NQVNLKGhpZ2gsIGxvdykpCisvKiBVc2lu ZyB0aGUgR05VIHN0YXRlbWVudCBleHByZXNzaW9uIGV4dGVuc2lvbiAqLworI2RlZmluZSBWQzRf U0VUX0ZJRUxEKHZhbHVlLCBmaWVsZCkJCQkJCVwKKwkoewkJCQkJCQkJXAorCQl1aW50MzJfdCBm aWVsZHZhbCA9ICh2YWx1ZSkgPDwgZmllbGQjI19TSElGVDsJCVwKKwkJV0FSTl9PTigoZmllbGR2 YWwgJiB+ZmllbGQjI19NQVNLKSAhPSAwKTsJCVwKKwkJZmllbGR2YWwgJiBmaWVsZCMjX01BU0s7 CQkJCVwKKwkgfSkKKworI2RlZmluZSBWQzRfR0VUX0ZJRUxEKHdvcmQsIGZpZWxkKSAoKCh3b3Jk KSAmIGZpZWxkIyNfTUFTSykgPj4JCVwKKwkJCQkgICAgZmllbGQjI19TSElGVCkKKworI2RlZmlu ZSBWM0RfSURFTlQwICAgMHgwMDAwMAorIyBkZWZpbmUgVjNEX0VYUEVDVEVEX0lERU5UMCBcCisJ KCgyIDw8IDI0KSB8IFwKKwkoJ1YnIDw8IDApIHwgXAorCSgnMycgPDwgOCkgfCBcCisJICgnRCcg PDwgMTYpKQorCisjZGVmaW5lIFYzRF9JREVOVDEgICAweDAwMDA0CisvKiBNdWx0aXBsZXMgb2Yg MWtiICovCisjIGRlZmluZSBWM0RfSURFTlQxX1ZQTV9TSVpFX01BU0sgICAgICAgICAgICAgICAg ICAgICAgVkM0X01BU0soMzEsIDI4KQorIyBkZWZpbmUgVjNEX0lERU5UMV9WUE1fU0laRV9TSElG VCAgICAgICAgICAgICAgICAgICAgIDI4CisjIGRlZmluZSBWM0RfSURFTlQxX05TRU1fTUFTSyAg ICAgICAgICAgICAgICAgICAgICAgICAgVkM0X01BU0soMjMsIDE2KQorIyBkZWZpbmUgVjNEX0lE RU5UMV9OU0VNX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjIGRlZmluZSBWM0Rf SURFTlQxX1RVUFNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgVkM0X01BU0soMTUsIDEy KQorIyBkZWZpbmUgVjNEX0lERU5UMV9UVVBTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAg IDEyCisjIGRlZmluZSBWM0RfSURFTlQxX1FVUFNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAg ICAgVkM0X01BU0soMTEsIDgpCisjIGRlZmluZSBWM0RfSURFTlQxX1FVUFNfU0hJRlQgICAgICAg ICAgICAgICAgICAgICAgICAgOAorIyBkZWZpbmUgVjNEX0lERU5UMV9OU0xDX01BU0sgICAgICAg ICAgICAgICAgICAgICAgICAgIFZDNF9NQVNLKDcsIDQpCisjIGRlZmluZSBWM0RfSURFTlQxX05T TENfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNAorIyBkZWZpbmUgVjNEX0lERU5UMV9S RVZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZDNF9NQVNLKDMsIDApCisjIGRlZmlu ZSBWM0RfSURFTlQxX1JFVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisjZGVm aW5lIFYzRF9JREVOVDIgICAweDAwMDA4CisjZGVmaW5lIFYzRF9TQ1JBVENIICAweDAwMDEwCisj ZGVmaW5lIFYzRF9MMkNBQ1RMICAweDAwMDIwCisjIGRlZmluZSBWM0RfTDJDQUNUTF9MMkNDTFIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDIpCisjIGRlZmluZSBWM0RfTDJDQUNUTF9M MkNESVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDEpCisjIGRlZmluZSBWM0RfTDJD QUNUTF9MMkNFTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDApCisKKyNkZWZpbmUg VjNEX1NMQ0FDVEwgIDB4MDAwMjQKKyMgZGVmaW5lIFYzRF9TTENBQ1RMX1QxQ0NfTUFTSyAgICAg ICAgICAgICAgICAgICAgICAgICBWQzRfTUFTSygyNywgMjQpCisjIGRlZmluZSBWM0RfU0xDQUNU TF9UMUNDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyMgZGVmaW5lIFYzRF9TTENB Q1RMX1QwQ0NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICBWQzRfTUFTSygxOSwgMTYpCisj IGRlZmluZSBWM0RfU0xDQUNUTF9UMENDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTYK KyMgZGVmaW5lIFYzRF9TTENBQ1RMX1VDQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICBW QzRfTUFTSygxMSwgOCkKKyMgZGVmaW5lIFYzRF9TTENBQ1RMX1VDQ19TSElGVCAgICAgICAgICAg ICAgICAgICAgICAgICA4CisjIGRlZmluZSBWM0RfU0xDQUNUTF9JQ0NfTUFTSyAgICAgICAgICAg ICAgICAgICAgICAgICAgVkM0X01BU0soMywgMCkKKyMgZGVmaW5lIFYzRF9TTENBQ1RMX0lDQ19T SElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKyNkZWZpbmUgVjNEX0lOVENUTCAgIDB4 MDAwMzAKKyNkZWZpbmUgVjNEX0lOVEVOQSAgIDB4MDAwMzQKKyNkZWZpbmUgVjNEX0lOVERJUyAg IDB4MDAwMzgKKyMgZGVmaW5lIFYzRF9JTlRfU1BJTExVU0UgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBCSVQoMykKKyMgZGVmaW5lIFYzRF9JTlRfT1VUT01FTSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBCSVQoMikKKyMgZGVmaW5lIFYzRF9JTlRfRkxET05FICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBCSVQoMSkKKyMgZGVmaW5lIFYzRF9JTlRfRlJET05FICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMCkKKworI2RlZmluZSBWM0RfQ1QwQ1MgICAg MHgwMDEwMAorI2RlZmluZSBWM0RfQ1QxQ1MgICAgMHgwMDEwNAorI2RlZmluZSBWM0RfQ1ROQ1Mo bikgKFYzRF9DVDBDUyArIDQgKiBuKQorIyBkZWZpbmUgVjNEX0NUUlNUQSAgICAgIEJJVCgxNSkK KyMgZGVmaW5lIFYzRF9DVFNFTUEgICAgICBCSVQoMTIpCisjIGRlZmluZSBWM0RfQ1RSVFNEICAg ICAgQklUKDgpCisjIGRlZmluZSBWM0RfQ1RSVU4gICAgICAgQklUKDUpCisjIGRlZmluZSBWM0Rf Q1RTVUJTICAgICAgQklUKDQpCisjIGRlZmluZSBWM0RfQ1RFUlIgICAgICAgQklUKDMpCisjIGRl ZmluZSBWM0RfQ1RNT0RFICAgICAgQklUKDApCisKKyNkZWZpbmUgVjNEX0NUMEVBICAgIDB4MDAx MDgKKyNkZWZpbmUgVjNEX0NUMUVBICAgIDB4MDAxMGMKKyNkZWZpbmUgVjNEX0NUTkVBKG4pIChW M0RfQ1QwRUEgKyA0ICogKG4pKQorI2RlZmluZSBWM0RfQ1QwQ0EgICAgMHgwMDExMAorI2RlZmlu ZSBWM0RfQ1QxQ0EgICAgMHgwMDExNAorI2RlZmluZSBWM0RfQ1ROQ0EobikgKFYzRF9DVDBDQSAr IDQgKiAobikpCisjZGVmaW5lIFYzRF9DVDAwUkEwICAweDAwMTE4CisjZGVmaW5lIFYzRF9DVDAx UkEwICAweDAwMTFjCisjZGVmaW5lIFYzRF9DVE5SQTAobikgKFYzRF9DVDAwUkEwICsgNCAqIChu KSkKKyNkZWZpbmUgVjNEX0NUMExDICAgIDB4MDAxMjAKKyNkZWZpbmUgVjNEX0NUMUxDICAgIDB4 MDAxMjQKKyNkZWZpbmUgVjNEX0NUTkxDKG4pIChWM0RfQ1QwTEMgKyA0ICogKG4pKQorI2RlZmlu ZSBWM0RfQ1QwUEMgICAgMHgwMDEyOAorI2RlZmluZSBWM0RfQ1QxUEMgICAgMHgwMDEyYworI2Rl ZmluZSBWM0RfQ1ROUEMobikgKFYzRF9DVDBQQyArIDQgKiAobikpCisKKyNkZWZpbmUgVjNEX1BD UyAgICAgIDB4MDAxMzAKKyMgZGVmaW5lIFYzRF9CTU9PTSAgICAgICBCSVQoOCkKKyMgZGVmaW5l IFYzRF9STUJVU1kgICAgICBCSVQoMykKKyMgZGVmaW5lIFYzRF9STUFDVElWRSAgICBCSVQoMikK KyMgZGVmaW5lIFYzRF9CTUJVU1kgICAgICBCSVQoMSkKKyMgZGVmaW5lIFYzRF9CTUFDVElWRSAg ICBCSVQoMCkKKworI2RlZmluZSBWM0RfQkZDICAgICAgMHgwMDEzNAorI2RlZmluZSBWM0RfUkZD ICAgICAgMHgwMDEzOAorI2RlZmluZSBWM0RfQlBDQSAgICAgMHgwMDMwMAorI2RlZmluZSBWM0Rf QlBDUyAgICAgMHgwMDMwNAorI2RlZmluZSBWM0RfQlBPQSAgICAgMHgwMDMwOAorI2RlZmluZSBW M0RfQlBPUyAgICAgMHgwMDMwYworI2RlZmluZSBWM0RfQlhDRiAgICAgMHgwMDMxMAorI2RlZmlu ZSBWM0RfU1FSU1YwICAgMHgwMDQxMAorI2RlZmluZSBWM0RfU1FSU1YxICAgMHgwMDQxNAorI2Rl ZmluZSBWM0RfU1FDTlRMICAgMHgwMDQxOAorI2RlZmluZSBWM0RfU1JRUEMgICAgMHgwMDQzMAor I2RlZmluZSBWM0RfU1JRVUEgICAgMHgwMDQzNAorI2RlZmluZSBWM0RfU1JRVUwgICAgMHgwMDQz OAorI2RlZmluZSBWM0RfU1JRQ1MgICAgMHgwMDQzYworI2RlZmluZSBWM0RfVlBBQ05UTCAgMHgw MDUwMAorI2RlZmluZSBWM0RfVlBNQkFTRSAgMHgwMDUwNAorI2RlZmluZSBWM0RfUENUUkMgICAg MHgwMDY3MAorI2RlZmluZSBWM0RfUENUUkUgICAgMHgwMDY3NAorI2RlZmluZSBWM0RfUENUUjAg ICAgMHgwMDY4MAorI2RlZmluZSBWM0RfUENUUlMwICAgMHgwMDY4NAorI2RlZmluZSBWM0RfUENU UjEgICAgMHgwMDY4OAorI2RlZmluZSBWM0RfUENUUlMxICAgMHgwMDY4YworI2RlZmluZSBWM0Rf UENUUjIgICAgMHgwMDY5MAorI2RlZmluZSBWM0RfUENUUlMyICAgMHgwMDY5NAorI2RlZmluZSBW M0RfUENUUjMgICAgMHgwMDY5OAorI2RlZmluZSBWM0RfUENUUlMzICAgMHgwMDY5YworI2RlZmlu ZSBWM0RfUENUUjQgICAgMHgwMDZhMAorI2RlZmluZSBWM0RfUENUUlM0ICAgMHgwMDZhNAorI2Rl ZmluZSBWM0RfUENUUjUgICAgMHgwMDZhOAorI2RlZmluZSBWM0RfUENUUlM1ICAgMHgwMDZhYwor I2RlZmluZSBWM0RfUENUUjYgICAgMHgwMDZiMAorI2RlZmluZSBWM0RfUENUUlM2ICAgMHgwMDZi NAorI2RlZmluZSBWM0RfUENUUjcgICAgMHgwMDZiOAorI2RlZmluZSBWM0RfUENUUlM3ICAgMHgw MDZiYworI2RlZmluZSBWM0RfUENUUjggICAgMHgwMDZjMAorI2RlZmluZSBWM0RfUENUUlM4ICAg MHgwMDZjNAorI2RlZmluZSBWM0RfUENUUjkgICAgMHgwMDZjOAorI2RlZmluZSBWM0RfUENUUlM5 ICAgMHgwMDZjYworI2RlZmluZSBWM0RfUENUUjEwICAgMHgwMDZkMAorI2RlZmluZSBWM0RfUENU UlMxMCAgMHgwMDZkNAorI2RlZmluZSBWM0RfUENUUjExICAgMHgwMDZkOAorI2RlZmluZSBWM0Rf UENUUlMxMSAgMHgwMDZkYworI2RlZmluZSBWM0RfUENUUjEyICAgMHgwMDZlMAorI2RlZmluZSBW M0RfUENUUlMxMiAgMHgwMDZlNAorI2RlZmluZSBWM0RfUENUUjEzICAgMHgwMDZlOAorI2RlZmlu ZSBWM0RfUENUUlMxMyAgMHgwMDZlYworI2RlZmluZSBWM0RfUENUUjE0ICAgMHgwMDZmMAorI2Rl ZmluZSBWM0RfUENUUlMxNCAgMHgwMDZmNAorI2RlZmluZSBWM0RfUENUUjE1ICAgMHgwMDZmOAor I2RlZmluZSBWM0RfUENUUlMxNSAgMHgwMDZmYworI2RlZmluZSBWM0RfQkdFICAgICAgMHgwMGYw MAorI2RlZmluZSBWM0RfRkRCR08gICAgMHgwMGYwNAorI2RlZmluZSBWM0RfRkRCR0IgICAgMHgw MGYwOAorI2RlZmluZSBWM0RfRkRCR1IgICAgMHgwMGYwYworI2RlZmluZSBWM0RfRkRCR1MgICAg MHgwMGYxMAorI2RlZmluZSBWM0RfRVJSU1RBVCAgMHgwMGYyMAorCisjZGVmaW5lIFBWX0NPTlRS T0wJCQkJMHgwMAorIyBkZWZpbmUgUFZfQ09OVFJPTF9GT1JNQVRfTUFTSwkJCVZDNF9NQVNLKDIz LCAyMSkKKyMgZGVmaW5lIFBWX0NPTlRST0xfRk9STUFUX1NISUZUCQkyMQorIyBkZWZpbmUgUFZf Q09OVFJPTF9GT1JNQVRfMjQJCQkwCisjIGRlZmluZSBQVl9DT05UUk9MX0ZPUk1BVF9EU0lWXzE2 CQkxCisjIGRlZmluZSBQVl9DT05UUk9MX0ZPUk1BVF9EU0lDXzE2CQkyCisjIGRlZmluZSBQVl9D T05UUk9MX0ZPUk1BVF9EU0lWXzE4CQkzCisjIGRlZmluZSBQVl9DT05UUk9MX0ZPUk1BVF9EU0lW XzI0CQk0CisKKyMgZGVmaW5lIFBWX0NPTlRST0xfRklGT19MRVZFTF9NQVNLCQlWQzRfTUFTSygy MCwgMTUpCisjIGRlZmluZSBQVl9DT05UUk9MX0ZJRk9fTEVWRUxfU0hJRlQJCTE1CisjIGRlZmlu ZSBQVl9DT05UUk9MX0NMUl9BVF9TVEFSVAkJQklUKDE0KQorIyBkZWZpbmUgUFZfQ09OVFJPTF9U UklHR0VSX1VOREVSRkxPVwkJQklUKDEzKQorIyBkZWZpbmUgUFZfQ09OVFJPTF9XQUlUX0hTVEFS VAkJCUJJVCgxMikKKyMgZGVmaW5lIFBWX0NPTlRST0xfQ0xLX1NFTEVDVF9EU0lfVkVDCQkwCisj IGRlZmluZSBQVl9DT05UUk9MX0NMS19TRUxFQ1RfRFBJX1NNSV9IRE1JCTEKKyMgZGVmaW5lIFBW X0NPTlRST0xfQ0xLX1NFTEVDVF9NQVNLCQlWQzRfTUFTSygzLCAyKQorIyBkZWZpbmUgUFZfQ09O VFJPTF9DTEtfU0VMRUNUX1NISUZUCQkyCisjIGRlZmluZSBQVl9DT05UUk9MX0ZJRk9fQ0xSCQkJ QklUKDEpCisjIGRlZmluZSBQVl9DT05UUk9MX0VOCQkJCUJJVCgwKQorCisjZGVmaW5lIFBWX1Zf Q09OVFJPTAkJCQkweDA0CisjIGRlZmluZSBQVl9WQ09OVFJPTF9JTlRFUkxBQ0UJCQlCSVQoNCkK KyMgZGVmaW5lIFBWX1ZDT05UUk9MX0NPTlRJTlVPVVMJCQlCSVQoMSkKKyMgZGVmaW5lIFBWX1ZD T05UUk9MX1ZJREVOCQkJQklUKDApCisKKyNkZWZpbmUgUFZfVlNZTkNECQkJCTB4MDgKKworI2Rl ZmluZSBQVl9IT1JaQQkJCQkweDBjCisjIGRlZmluZSBQVl9IT1JaQV9IQlBfTUFTSwkJCVZDNF9N QVNLKDMxLCAxNikKKyMgZGVmaW5lIFBWX0hPUlpBX0hCUF9TSElGVAkJCTE2CisjIGRlZmluZSBQ Vl9IT1JaQV9IU1lOQ19NQVNLCQkJVkM0X01BU0soMTUsIDApCisjIGRlZmluZSBQVl9IT1JaQV9I U1lOQ19TSElGVAkJCTAKKworI2RlZmluZSBQVl9IT1JaQgkJCQkweDEwCisjIGRlZmluZSBQVl9I T1JaQl9IRlBfTUFTSwkJCVZDNF9NQVNLKDMxLCAxNikKKyMgZGVmaW5lIFBWX0hPUlpCX0hGUF9T SElGVAkJCTE2CisjIGRlZmluZSBQVl9IT1JaQl9IQUNUSVZFX01BU0sJCQlWQzRfTUFTSygxNSwg MCkKKyMgZGVmaW5lIFBWX0hPUlpCX0hBQ1RJVkVfU0hJRlQJCQkwCisKKyNkZWZpbmUgUFZfVkVS VEEJCQkJMHgxNAorIyBkZWZpbmUgUFZfVkVSVEFfVkJQX01BU0sJCQlWQzRfTUFTSygzMSwgMTYp CisjIGRlZmluZSBQVl9WRVJUQV9WQlBfU0hJRlQJCQkxNgorIyBkZWZpbmUgUFZfVkVSVEFfVlNZ TkNfTUFTSwkJCVZDNF9NQVNLKDE1LCAwKQorIyBkZWZpbmUgUFZfVkVSVEFfVlNZTkNfU0hJRlQJ CQkwCisKKyNkZWZpbmUgUFZfVkVSVEIJCQkJMHgxOAorIyBkZWZpbmUgUFZfVkVSVEJfVkZQX01B U0sJCQlWQzRfTUFTSygzMSwgMTYpCisjIGRlZmluZSBQVl9WRVJUQl9WRlBfU0hJRlQJCQkxNgor IyBkZWZpbmUgUFZfVkVSVEJfVkFDVElWRV9NQVNLCQkJVkM0X01BU0soMTUsIDApCisjIGRlZmlu ZSBQVl9WRVJUQl9WQUNUSVZFX1NISUZUCQkJMAorCisjZGVmaW5lIFBWX1ZFUlRBX0VWRU4JCQkJ MHgxYworI2RlZmluZSBQVl9WRVJUQl9FVkVOCQkJCTB4MjAKKworI2RlZmluZSBQVl9JTlRFTgkJ CQkweDI0CisjZGVmaW5lIFBWX0lOVFNUQVQJCQkJMHgyOAorIyBkZWZpbmUgUFZfSU5UX1ZJRF9J RExFCQkJQklUKDkpCisjIGRlZmluZSBQVl9JTlRfVkZQX0VORAkJCQlCSVQoOCkKKyMgZGVmaW5l IFBWX0lOVF9WRlBfU1RBUlQJCQlCSVQoNykKKyMgZGVmaW5lIFBWX0lOVF9WQUNUX1NUQVJUCQkJ QklUKDYpCisjIGRlZmluZSBQVl9JTlRfVkJQX1NUQVJUCQkJQklUKDUpCisjIGRlZmluZSBQVl9J TlRfVlNZTkNfU1RBUlQJCQlCSVQoNCkKKyMgZGVmaW5lIFBWX0lOVF9IRlBfU1RBUlQJCQlCSVQo MykKKyMgZGVmaW5lIFBWX0lOVF9IQUNUX1NUQVJUCQkJQklUKDIpCisjIGRlZmluZSBQVl9JTlRf SEJQX1NUQVJUCQkJQklUKDEpCisjIGRlZmluZSBQVl9JTlRfSFNZTkNfU1RBUlQJCQlCSVQoMCkK KworI2RlZmluZSBQVl9TVEFUCQkJCQkweDJjCisKKyNkZWZpbmUgUFZfSEFDVF9BQ1QJCQkJMHgz MAorCisjZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAw MDAwMDAwCisvKiBHbG9iYWwgcmVnaXN0ZXIgZm9yIGNsb2NrIGdhdGluZyB0aGUgSFZTICovCisj IGRlZmluZSBTQ0FMRVJfRElTUENUUkxfRU5BQkxFCQkJQklUKDMxKQorIyBkZWZpbmUgU0NBTEVS X0RJU1BDVFJMX0RTUDJFSVNMVVIJCUJJVCgxNSkKKyMgZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTF9E U1AxRUlTTFVSCQlCSVQoMTQpCisvKiBFbmFibGVzIERpc3BsYXkgMCBzaG9ydCBsaW5lIGFuZCB1 bmRlcnJ1biBjb250cmlidXRpb24gdG8KKyAqIFNDQUxFUl9ESVNQU1RBVF9JUlFESVNQMC4gIE5v dGUgdGhhdCBzaG9ydCBmcmFtZSBjb250cmlidXRpb25zIGFyZQorICogYWx3YXlzIGVuYWJsZWQu CisgKi8KKyMgZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTF9EU1AwRUlTTFVSCQlCSVQoMTMpCisjIGRl ZmluZSBTQ0FMRVJfRElTUENUUkxfRFNQMkVJRU9MTgkJQklUKDEyKQorIyBkZWZpbmUgU0NBTEVS X0RJU1BDVFJMX0RTUDJFSUVPRgkJQklUKDExKQorIyBkZWZpbmUgU0NBTEVSX0RJU1BDVFJMX0RT UDFFSUVPTE4JCUJJVCgxMCkKKyMgZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTF9EU1AxRUlFT0YJCUJJ VCg5KQorLyogRW5hYmxlcyBEaXNwbGF5IDAgZW5kLW9mLWxpbmUtTiBjb250cmlidXRpb24gdG8K KyAqIFNDQUxFUl9ESVNQU1RBVF9JUlFESVNQMAorICovCisjIGRlZmluZSBTQ0FMRVJfRElTUENU UkxfRFNQMEVJRU9MTgkJQklUKDgpCisvKiBFbmFibGVzIERpc3BsYXkgMCBFT0YgY29udHJpYnV0 aW9uIHRvIFNDQUxFUl9ESVNQU1RBVF9JUlFESVNQMCAqLworIyBkZWZpbmUgU0NBTEVSX0RJU1BD VFJMX0RTUDBFSUVPRgkJQklUKDcpCisKKyMgZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTF9TTFZSREVJ UlEJCUJJVCg2KQorIyBkZWZpbmUgU0NBTEVSX0RJU1BDVFJMX1NMVldSRUlSUQkJQklUKDUpCisj IGRlZmluZSBTQ0FMRVJfRElTUENUUkxfRE1BRUlSUQkJQklUKDQpCisjIGRlZmluZSBTQ0FMRVJf RElTUENUUkxfRElTUDJFSVJRCQlCSVQoMykKKyMgZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTF9ESVNQ MUVJUlEJCUJJVCgyKQorLyogRW5hYmxlcyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBvbiB0aGUgZW5h YmxlZCBFT0YvRU9MTi9FSVNMVVIKKyAqIGJpdHMgYW5kIHNob3J0IGZyYW1lcy4uCisgKi8KKyMg ZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTF9ESVNQMEVJUlEJCUJJVCgxKQorLyogRW5hYmxlcyBpbnRl cnJ1cHQgZ2VuZXJhdGlvbiBvbiBzY2FsZXIgcHJvZmlsZXIgaW50ZXJydXB0LiAqLworIyBkZWZp bmUgU0NBTEVSX0RJU1BDVFJMX1NDTEVJUlEJCUJJVCgwKQorCisjZGVmaW5lIFNDQUxFUl9ESVNQ U1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjIGRlZmluZSBTQ0FMRVJf RElTUFNUQVRfQ09CTE9XMgkJQklUKDI5KQorIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0VPTE4y CQkJQklUKDI4KQorIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0VTRlJBTUUyCQlCSVQoMjcpCisj IGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfRVNMSU5FMgkJQklUKDI2KQorIyBkZWZpbmUgU0NBTEVS X0RJU1BTVEFUX0VVRkxPVzIJCUJJVCgyNSkKKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVF9FT0Yy CQkJQklUKDI0KQorCisjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfQ09CTE9XMQkJQklUKDIxKQor IyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0VPTE4xCQkJQklUKDIwKQorIyBkZWZpbmUgU0NBTEVS X0RJU1BTVEFUX0VTRlJBTUUxCQlCSVQoMTkpCisjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfRVNM SU5FMQkJQklUKDE4KQorIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0VVRkxPVzEJCUJJVCgxNykK KyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVF9FT0YxCQkJQklUKDE2KQorCisjIGRlZmluZSBTQ0FM RVJfRElTUFNUQVRfUkVTUF9NQVNLCQlWQzRfTUFTSygxNSwgMTQpCisjIGRlZmluZSBTQ0FMRVJf RElTUFNUQVRfUkVTUF9TSElGVAkJMTQKKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVF9SRVNQX09L QVkJCTAKKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVF9SRVNQX0VYT0tBWQkJMQorIyBkZWZpbmUg U0NBTEVSX0RJU1BTVEFUX1JFU1BfU0xWRVJSCQkyCisjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRf UkVTUF9ERUNFUlIJCTMKKworIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0NPQkxPVzAJCUJJVCgx MykKKy8qIFNldCB3aGVuIHRoZSBESVNQRU9MTiBsaW5lIGlzIGRvbmUgY29tcG9zaXRpbmcuICov CisjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfRU9MTjAJCQlCSVQoMTIpCisvKiBTZXQgd2hlbiBW U1RBUlQgaXMgc2VlbiBidXQgdGhlcmUgYXJlIHN0aWxsIHBpeGVscyBpbiB0aGUgY3VycmVudAor ICogb3V0cHV0IGxpbmUuCisgKi8KKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVF9FU0ZSQU1FMAkJ QklUKDExKQorLyogU2V0IHdoZW4gSFNUQVJUIGlzIHNlZW4gYnV0IHRoZXJlIGFyZSBzdGlsbCBw aXhlbHMgaW4gdGhlIGN1cnJlbnQKKyAqIG91dHB1dCBsaW5lLgorICovCisjIGRlZmluZSBTQ0FM RVJfRElTUFNUQVRfRVNMSU5FMAkJQklUKDEwKQorLyogU2V0IHdoZW4gdGhlIHRoZSBkb3duc3Ry ZWFtIHRyaWVzIHRvIHJlYWQgZnJvbSB0aGUgZGlzcGxheSBGSUZPCisgKiB3aGlsZSBpdCdzIGVt cHR5LgorICovCisjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfRVVGTE9XMAkJQklUKDkpCisvKiBT ZXQgd2hlbiB0aGUgZGlzcGxheSBtb2RlIGNoYW5nZXMgZnJvbSBSVU4gdG8gRU9GICovCisjIGRl ZmluZSBTQ0FMRVJfRElTUFNUQVRfRU9GMAkJCUJJVCg4KQorCisvKiBTZXQgb24gQVhJIGludmFs aWQgRE1BIElEIGVycm9yLiAqLworIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0RNQV9FUlJPUgkJ QklUKDcpCisvKiBTZXQgb24gQVhJIHNsYXZlIHJlYWQgZGVjb2RlIGVycm9yICovCisjIGRlZmlu ZSBTQ0FMRVJfRElTUFNUQVRfSVJRU0xWUkQJCUJJVCg2KQorLyogU2V0IG9uIEFYSSBzbGF2ZSB3 cml0ZSBkZWNvZGUgZXJyb3IgKi8KKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVF9JUlFTTFZXUgkJ QklUKDUpCisvKiBTZXQgd2hlbiBTQ0FMRVJfRElTUFNUQVRfRE1BX0VSUk9SIGlzIHNldCwgb3IK KyAqIFNDQUxFUl9ESVNQU1RBVF9SRVNQX0VSUk9SIGlzIG5vdCBTQ0FMRVJfRElTUFNUQVRfUkVT UF9PS0FZLgorICovCisjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfSVJRRE1BCQkJQklUKDQpCisj IGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfSVJRRElTUDIJCUJJVCgzKQorIyBkZWZpbmUgU0NBTEVS X0RJU1BTVEFUX0lSUURJU1AxCQlCSVQoMikKKy8qIFNldCB3aGVuIGFueSBvZiB0aGUgRU9GL0VP TE4vRVNGUkFNRS9FU0xJTkUgYml0cyBhcmUgc2V0IGFuZCB0aGVpcgorICogY29ycmVzcG9uZGlu ZyBpbnRlcnJ1cHQgYml0IGlzIGVuYWJsZWQgaW4gRElTUENUUkwuCisgKi8KKyMgZGVmaW5lIFND QUxFUl9ESVNQU1RBVF9JUlFESVNQMAkJQklUKDEpCisvKiBPbiByZWFkLCB0aGUgcHJvZmlsZXIg aW50ZXJydXB0LiAgT24gd3JpdGUsIGNsZWFyICphbGwqIGludGVycnVwdCBiaXRzLiAqLworIyBk ZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0lSUVNDTAkJCUJJVCgwKQorCisjZGVmaW5lIFNDQUxFUl9E SVNQSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFNDQUxF Ul9ESVNQRUNUUkwgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBjCisjZGVmaW5lIFND QUxFUl9ESVNQUFJPRiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5l IFNDQUxFUl9ESVNQRElUSEVSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisjZGVm aW5lIFNDQUxFUl9ESVNQRU9MTiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE4Cisj ZGVmaW5lIFNDQUxFUl9ESVNQTElTVDAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIw CisjZGVmaW5lIFNDQUxFUl9ESVNQTElTVDEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAw MDI0CisjZGVmaW5lIFNDQUxFUl9ESVNQTElTVDIgICAgICAgICAgICAgICAgICAgICAgICAweDAw MDAwMDI4CisjZGVmaW5lIFNDQUxFUl9ESVNQTFNUQVQgICAgICAgICAgICAgICAgICAgICAgICAw eDAwMDAwMDJjCisjZGVmaW5lIFNDQUxFUl9ESVNQTElTVFgoeCkJCQkoU0NBTEVSX0RJU1BMSVNU MCArCVwKKwkJCQkJCSAoeCkgKiAoU0NBTEVSX0RJU1BMSVNUMSAtIFwKKwkJCQkJCQlTQ0FMRVJf RElTUExJU1QwKSkKKworI2RlZmluZSBTQ0FMRVJfRElTUExBQ1QwICAgICAgICAgICAgICAgICAg ICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBTQ0FMRVJfRElTUExBQ1QxICAgICAgICAgICAgICAg ICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBTQ0FMRVJfRElTUExBQ1QyICAgICAgICAgICAg ICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBTQ0FMRVJfRElTUENUUkwwICAgICAgICAg ICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorIyBkZWZpbmUgU0NBTEVSX0RJU1BDVFJMWF9FTkFC TEUJCUJJVCgzMSkKKyMgZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTFhfUkVTRVQJCQlCSVQoMzApCisj IGRlZmluZSBTQ0FMRVJfRElTUENUUkxYX1dJRFRIX01BU0sJCVZDNF9NQVNLKDIzLCAxMikKKyMg ZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTFhfV0lEVEhfU0hJRlQJCTEyCisjIGRlZmluZSBTQ0FMRVJf RElTUENUUkxYX0hFSUdIVF9NQVNLCQlWQzRfTUFTSygxMSwgMCkKKyMgZGVmaW5lIFNDQUxFUl9E SVNQQ1RSTFhfSEVJR0hUX1NISUZUCQkwCisKKyNkZWZpbmUgU0NBTEVSX0RJU1BCS0dORDAgICAg ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDQKKyNkZWZpbmUgU0NBTEVSX0RJU1BTVEFUMCAg ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDgKKyNkZWZpbmUgU0NBTEVSX0RJU1BCQVNF MCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNGMKKyMgZGVmaW5lIFNDQUxFUl9ESVNQ U1RBVFhfTU9ERV9NQVNLCQlWQzRfTUFTSygzMSwgMzApCisjIGRlZmluZSBTQ0FMRVJfRElTUFNU QVRYX01PREVfU0hJRlQJCTMwCisjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRYX01PREVfRElTQUJM RUQJCTAKKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVFhfTU9ERV9JTklUCQkxCisjIGRlZmluZSBT Q0FMRVJfRElTUFNUQVRYX01PREVfUlVOCQkyCisjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRYX01P REVfRU9GCQkzCisjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRYX0ZVTEwJCQlCSVQoMjkpCisjIGRl ZmluZSBTQ0FMRVJfRElTUFNUQVRYX0VNUFRZCQkJQklUKDI4KQorI2RlZmluZSBTQ0FMRVJfRElT UENUUkwxICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MAorI2RlZmluZSBTQ0FMRVJf RElTUEJLR05EMSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NAorI2RlZmluZSBTQ0FM RVJfRElTUFNUQVQxICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1OAorI2RlZmluZSBT Q0FMRVJfRElTUFNUQVRYKHgpCQkJKFNDQUxFUl9ESVNQU1RBVDAgKyAgICAgICAgXAorCQkJCQkJ ICh4KSAqIChTQ0FMRVJfRElTUFNUQVQxIC0gXAorCQkJCQkJCVNDQUxFUl9ESVNQU1RBVDApKQor I2RlZmluZSBTQ0FMRVJfRElTUEJBU0UxICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1 YworI2RlZmluZSBTQ0FMRVJfRElTUENUUkwyICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAw MDA2MAorI2RlZmluZSBTQ0FMRVJfRElTUENUUkxYKHgpCQkJKFNDQUxFUl9ESVNQQ1RSTDAgKyAg ICAgICAgXAorCQkJCQkJICh4KSAqIChTQ0FMRVJfRElTUENUUkwxIC0gXAorCQkJCQkJCVNDQUxF Ul9ESVNQQ1RSTDApKQorI2RlZmluZSBTQ0FMRVJfRElTUEJLR05EMiAgICAgICAgICAgICAgICAg ICAgICAgMHgwMDAwMDA2NAorI2RlZmluZSBTQ0FMRVJfRElTUFNUQVQyICAgICAgICAgICAgICAg ICAgICAgICAgMHgwMDAwMDA2OAorI2RlZmluZSBTQ0FMRVJfRElTUEJBU0UyICAgICAgICAgICAg ICAgICAgICAgICAgMHgwMDAwMDA2YworI2RlZmluZSBTQ0FMRVJfRElTUEFMUEhBMiAgICAgICAg ICAgICAgICAgICAgICAgMHgwMDAwMDA3MAorI2RlZmluZSBTQ0FMRVJfR0FNQUREUiAgICAgICAg ICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OAorI2RlZmluZSBTQ0FMRVJfR0FNREFUQSAgICAg ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBlMAorI2RlZmluZSBTQ0FMRVJfRExJU1RfU1RB UlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBTQ0FMRVJfRExJU1Rf U0laRSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorCisjZGVmaW5lIFZDNF9IRE1J X0NPUkVfUkVWCQkJMHgwMDAKKworI2RlZmluZSBWQzRfSERNSV9TV19SRVNFVF9DT05UUk9MCQkw eDAwNAorIyBkZWZpbmUgVkM0X0hETUlfU1dfUkVTRVRfRk9STUFUX0RFVEVDVAlCSVQoMSkKKyMg ZGVmaW5lIFZDNF9IRE1JX1NXX1JFU0VUX0hETUkJCQlCSVQoMCkKKworI2RlZmluZSBWQzRfSERN SV9IT1RQTFVHX0lOVAkJCTB4MDA4CisKKyNkZWZpbmUgVkM0X0hETUlfSE9UUExVRwkJCTB4MDBj CisjIGRlZmluZSBWQzRfSERNSV9IT1RQTFVHX0NPTk5FQ1RFRAkJQklUKDApCisKKyNkZWZpbmUg VkM0X0hETUlfUkFNX1BBQ0tFVF9DT05GSUcJCTB4MGEwCisjIGRlZmluZSBWQzRfSERNSV9SQU1f UEFDS0VUX0VOQUJMRQkJQklUKDE2KQorCisjZGVmaW5lIFZDNF9IRE1JX0hPUlpBCQkJCTB4MGM0 CisjIGRlZmluZSBWQzRfSERNSV9IT1JaQV9WUE9TCQkJQklUKDE0KQorIyBkZWZpbmUgVkM0X0hE TUlfSE9SWkFfSFBPUwkJCUJJVCgxMykKKy8qIEhvcml6b250YWwgYWN0aXZlIHBpeGVscyAoaGRp c3BsYXkpLiAqLworIyBkZWZpbmUgVkM0X0hETUlfSE9SWkFfSEFQX01BU0sJCVZDNF9NQVNLKDEy LCAwKQorIyBkZWZpbmUgVkM0X0hETUlfSE9SWkFfSEFQX1NISUZUCQkwCisKKyNkZWZpbmUgVkM0 X0hETUlfSE9SWkIJCQkJMHgwYzgKKy8qIEhvcml6b250YWwgcGFjayBwb3JjaCAoaHRvdGFsIC0g aHN5bmNfZW5kKS4gKi8KKyMgZGVmaW5lIFZDNF9IRE1JX0hPUlpCX0hCUF9NQVNLCQlWQzRfTUFT SygyOSwgMjApCisjIGRlZmluZSBWQzRfSERNSV9IT1JaQl9IQlBfU0hJRlQJCTIwCisvKiBIb3Jp em9udGFsIHN5bmMgcHVsc2UgKGhzeW5jX2VuZCAtIGhzeW5jX3N0YXJ0KS4gKi8KKyMgZGVmaW5l IFZDNF9IRE1JX0hPUlpCX0hTUF9NQVNLCQlWQzRfTUFTSygxOSwgMTApCisjIGRlZmluZSBWQzRf SERNSV9IT1JaQl9IU1BfU0hJRlQJCTEwCisvKiBIb3Jpem9udGFsIGZyb250IHBvcmNoIChoc3lu Y19zdGFydCAtIGhkaXNwbGF5KS4gKi8KKyMgZGVmaW5lIFZDNF9IRE1JX0hPUlpCX0hGUF9NQVNL CQlWQzRfTUFTSyg5LCAwKQorIyBkZWZpbmUgVkM0X0hETUlfSE9SWkJfSEZQX1NISUZUCQkwCisK KyNkZWZpbmUgVkM0X0hETUlfRklGT19DVEwJCQkweDA1YworIyBkZWZpbmUgVkM0X0hETUlfRklG T19DVExfUkVDRU5URVJfRE9ORQlCSVQoMTQpCisjIGRlZmluZSBWQzRfSERNSV9GSUZPX0NUTF9V U0VfRU1QVFkJCUJJVCgxMykKKyMgZGVmaW5lIFZDNF9IRE1JX0ZJRk9fQ1RMX09OX1ZCCQlCSVQo NykKKyMgZGVmaW5lIFZDNF9IRE1JX0ZJRk9fQ1RMX1JFQ0VOVEVSCQlCSVQoNikKKyMgZGVmaW5l IFZDNF9IRE1JX0ZJRk9fQ1RMX0ZJRk9fUkVTRVQJCUJJVCg1KQorIyBkZWZpbmUgVkM0X0hETUlf RklGT19DVExfVVNFX1BMTF9MT0NLCQlCSVQoNCkKKyMgZGVmaW5lIFZDNF9IRE1JX0ZJRk9fQ1RM X0lOVl9DTEtfWEZSCQlCSVQoMykKKyMgZGVmaW5lIFZDNF9IRE1JX0ZJRk9fQ1RMX0NBUFRVUkVf UFRSCQlCSVQoMikKKyMgZGVmaW5lIFZDNF9IRE1JX0ZJRk9fQ1RMX1VTRV9GVUxMCQlCSVQoMSkK KyMgZGVmaW5lIFZDNF9IRE1JX0ZJRk9fQ1RMX01BU1RFUl9TTEFWRV9OCUJJVCgwKQorIyBkZWZp bmUgVkM0X0hETUlfRklGT19WQUxJRF9XUklURV9NQVNLCQkweGVmZmYKKworI2RlZmluZSBWQzRf SERNSV9TQ0hFRFVMRVJfQ09OVFJPTAkJMHgwYzAKKyMgZGVmaW5lIFZDNF9IRE1JX1NDSEVEVUxF Ul9DT05UUk9MX01BTlVBTF9GT1JNQVQgQklUKDE1KQorIyBkZWZpbmUgVkM0X0hETUlfU0NIRURV TEVSX0NPTlRST0xfSUdOT1JFX1ZTWU5DX1BSRURJQ1RTIEJJVCg1KQorIyBkZWZpbmUgVkM0X0hE TUlfU0NIRURVTEVSX0NPTlRST0xfVkVSVF9BTFdBWVNfS0VFUE9VVAlCSVQoMykKKyMgZGVmaW5l IFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MX0hETUlfQUNUSVZFCUJJVCgxKQorIyBkZWZpbmUg VkM0X0hETUlfU0NIRURVTEVSX0NPTlRST0xfTU9ERV9IRE1JCUJJVCgwKQorCisjZGVmaW5lIFZD NF9IRE1JX1ZFUlRBMAkJCQkweDBjYworI2RlZmluZSBWQzRfSERNSV9WRVJUQTEJCQkJMHgwZDQK Ky8qIFZlcnRpY2FsIHN5bmMgcHVsc2UgKHZzeW5jX2VuZCAtIHZzeW5jX3N0YXJ0KS4gKi8KKyMg ZGVmaW5lIFZDNF9IRE1JX1ZFUlRBX1ZTUF9NQVNLCQlWQzRfTUFTSygyNCwgMjApCisjIGRlZmlu ZSBWQzRfSERNSV9WRVJUQV9WU1BfU0hJRlQJCTIwCisvKiBWZXJ0aWNhbCBmcm9udCBwb3JjaCAo dnN5bmNfc3RhcnQgLSB2ZGlzcGxheSkuICovCisjIGRlZmluZSBWQzRfSERNSV9WRVJUQV9WRlBf TUFTSwkJVkM0X01BU0soMTksIDEzKQorIyBkZWZpbmUgVkM0X0hETUlfVkVSVEFfVkZQX1NISUZU CQkxMworLyogVmVydGljYWwgYWN0aXZlIGxpbmVzICh2ZGlzcGxheSkuICovCisjIGRlZmluZSBW QzRfSERNSV9WRVJUQV9WQUxfTUFTSwkJVkM0X01BU0soMTIsIDApCisjIGRlZmluZSBWQzRfSERN SV9WRVJUQV9WQUxfU0hJRlQJCTAKKworI2RlZmluZSBWQzRfSERNSV9WRVJUQjAJCQkJMHgwZDAK KyNkZWZpbmUgVkM0X0hETUlfVkVSVEIxCQkJCTB4MGQ4CisvKiBWZXJ0aWNhbCBzeW5jIHB1bHNl IG9mZnNldCAoZm9yIGludGVybGFjZWQpICovCisjIGRlZmluZSBWQzRfSERNSV9WRVJUQl9WU1BP X01BU0sJCVZDNF9NQVNLKDIxLCA5KQorIyBkZWZpbmUgVkM0X0hETUlfVkVSVEJfVlNQT19TSElG VAkJOQorLyogVmVydGljYWwgcGFjayBwb3JjaCAodnRvdGFsIC0gdnN5bmNfZW5kKS4gKi8KKyMg ZGVmaW5lIFZDNF9IRE1JX1ZFUlRCX1ZCUF9NQVNLCQlWQzRfTUFTSyg4LCAwKQorIyBkZWZpbmUg VkM0X0hETUlfVkVSVEJfVkJQX1NISUZUCQkwCisKKyNkZWZpbmUgVkM0X0hETUlfVFhfUEhZX1JF U0VUX0NUTAkJMHgyYzAKKworI2RlZmluZSBWQzRfSERfTV9DVEwJCQkJMHgwMGMKKyMgZGVmaW5l IFZDNF9IRF9NX1NXX1JTVAkJCUJJVCgyKQorIyBkZWZpbmUgVkM0X0hEX01fRU5BQkxFCQkJQklU KDApCisKKyNkZWZpbmUgVkM0X0hEX01BSV9DVEwJCQkJMHgwMTQKKworI2RlZmluZSBWQzRfSERf VklEX0NUTAkJCQkweDAzOAorIyBkZWZpbmUgVkM0X0hEX1ZJRF9DVExfRU5BQkxFCQkJQklUKDMx KQorIyBkZWZpbmUgVkM0X0hEX1ZJRF9DVExfVU5ERVJGTE9XX0VOQUJMRQlCSVQoMzApCisjIGRl ZmluZSBWQzRfSERfVklEX0NUTF9GUkFNRV9DT1VOVEVSX1JFU0VUCUJJVCgyOSkKKyMgZGVmaW5l IFZDNF9IRF9WSURfQ1RMX1ZTWU5DX0xPVwkJQklUKDI4KQorIyBkZWZpbmUgVkM0X0hEX1ZJRF9D VExfSFNZTkNfTE9XCQlCSVQoMjcpCisKKyNkZWZpbmUgVkM0X0hEX0NTQ19DVEwJCQkJMHgwNDAK KyMgZGVmaW5lIFZDNF9IRF9DU0NfQ1RMX09SREVSX01BU0sJCVZDNF9NQVNLKDcsIDUpCisjIGRl ZmluZSBWQzRfSERfQ1NDX0NUTF9PUkRFUl9TSElGVAkJNQorIyBkZWZpbmUgVkM0X0hEX0NTQ19D VExfT1JERVJfUkdCCQkwCisjIGRlZmluZSBWQzRfSERfQ1NDX0NUTF9PUkRFUl9CR1IJCTEKKyMg ZGVmaW5lIFZDNF9IRF9DU0NfQ1RMX09SREVSX0JSRwkJMgorIyBkZWZpbmUgVkM0X0hEX0NTQ19D VExfT1JERVJfR1JCCQkzCisjIGRlZmluZSBWQzRfSERfQ1NDX0NUTF9PUkRFUl9HQlIJCTQKKyMg ZGVmaW5lIFZDNF9IRF9DU0NfQ1RMX09SREVSX1JCRwkJNQorIyBkZWZpbmUgVkM0X0hEX0NTQ19D VExfUEFETVNCCQkJQklUKDQpCisjIGRlZmluZSBWQzRfSERfQ1NDX0NUTF9NT0RFX01BU0sJCVZD NF9NQVNLKDMsIDIpCisjIGRlZmluZSBWQzRfSERfQ1NDX0NUTF9NT0RFX1NISUZUCQkyCisjIGRl ZmluZSBWQzRfSERfQ1NDX0NUTF9NT0RFX1JHQl9UT19TRF9ZUFJQQgkwCisjIGRlZmluZSBWQzRf SERfQ1NDX0NUTF9NT0RFX1JHQl9UT19IRF9ZUFJQQgkxCisjIGRlZmluZSBWQzRfSERfQ1NDX0NU TF9NT0RFX0NVU1RPTQkJMgorIyBkZWZpbmUgVkM0X0hEX0NTQ19DVExfUkdCMllDQwkJCUJJVCgx KQorIyBkZWZpbmUgVkM0X0hEX0NTQ19DVExfRU5BQkxFCQkJQklUKDApCisKKyNkZWZpbmUgVkM0 X0hEX0ZSQU1FX0NPVU5UCQkJMHgwNjgKKworLyogSFZTIGRpc3BsYXkgbGlzdCBpbmZvcm1hdGlv bi4gKi8KKyNkZWZpbmUgSFZTX0JPT1RMT0FERVJfRExJU1RfRU5EICAgICAgICAgICAgICAgIDMy CisKK2VudW0gaHZzX3BpeGVsX2Zvcm1hdCB7CisJLyogOGJwcCAqLworCUhWU19QSVhFTF9GT1JN QVRfUkdCMzMyID0gMCwKKwkvKiAxNmJwcCAqLworCUhWU19QSVhFTF9GT1JNQVRfUkdCQTQ0NDQg PSAxLAorCUhWU19QSVhFTF9GT1JNQVRfUkdCNTU1ID0gMiwKKwlIVlNfUElYRUxfRk9STUFUX1JH QkE1NTUxID0gMywKKwlIVlNfUElYRUxfRk9STUFUX1JHQjU2NSA9IDQsCisJLyogMjRicHAgKi8K KwlIVlNfUElYRUxfRk9STUFUX1JHQjg4OCA9IDUsCisJSFZTX1BJWEVMX0ZPUk1BVF9SR0JBNjY2 NiA9IDYsCisJLyogMzJicHAgKi8KKwlIVlNfUElYRUxfRk9STUFUX1JHQkE4ODg4ID0gNworfTsK KworLyogTm90ZTogdGhlIExTQiBpcyB0aGUgcmlnaHRtb3N0IGNoYXJhY3RlciBzaG93bi4gIE9u bHkgdmFsaWQgZm9yCisgKiBIVlNfUElYRUxfRk9STUFUX1JHQjg4ODgsIG5vdCBSR0I4ODguCisg Ki8KKyNkZWZpbmUgSFZTX1BJWEVMX09SREVSX1JHQkEJCQkwCisjZGVmaW5lIEhWU19QSVhFTF9P UkRFUl9CR1JBCQkJMQorI2RlZmluZSBIVlNfUElYRUxfT1JERVJfQVJHQgkJCTIKKyNkZWZpbmUg SFZTX1BJWEVMX09SREVSX0FCR1IJCQkzCisKKyNkZWZpbmUgSFZTX1BJWEVMX09SREVSX1hCUkcJ CQkwCisjZGVmaW5lIEhWU19QSVhFTF9PUkRFUl9YUkJHCQkJMQorI2RlZmluZSBIVlNfUElYRUxf T1JERVJfWFJHQgkJCTIKKyNkZWZpbmUgSFZTX1BJWEVMX09SREVSX1hCR1IJCQkzCisKKyNkZWZp bmUgSFZTX1BJWEVMX09SREVSX1hZQ0JDUgkJCTAKKyNkZWZpbmUgSFZTX1BJWEVMX09SREVSX1hZ Q1JDQgkJCTEKKyNkZWZpbmUgSFZTX1BJWEVMX09SREVSX1lYQ0JDUgkJCTIKKyNkZWZpbmUgSFZT X1BJWEVMX09SREVSX1lYQ1JDQgkJCTMKKworI2RlZmluZSBTQ0FMRVJfQ1RMMF9FTkQJCQkJQklU KDMxKQorI2RlZmluZSBTQ0FMRVJfQ1RMMF9WQUxJRAkJCUJJVCgzMCkKKworI2RlZmluZSBTQ0FM RVJfQ1RMMF9TSVpFX01BU0sJCQlWQzRfTUFTSygyOSwgMjQpCisjZGVmaW5lIFNDQUxFUl9DVEww X1NJWkVfU0hJRlQJCQkyNAorCisjZGVmaW5lIFNDQUxFUl9DVEwwX0hGTElQICAgICAgICAgICAg ICAgICAgICAgICBCSVQoMTYpCisjZGVmaW5lIFNDQUxFUl9DVEwwX1ZGTElQICAgICAgICAgICAg ICAgICAgICAgICBCSVQoMTUpCisKKyNkZWZpbmUgU0NBTEVSX0NUTDBfT1JERVJfTUFTSwkJCVZD NF9NQVNLKDE0LCAxMykKKyNkZWZpbmUgU0NBTEVSX0NUTDBfT1JERVJfU0hJRlQJCQkxMworCisv KiBTZXQgdG8gaW5kaWNhdGUgbm8gc2NhbGluZy4gKi8KKyNkZWZpbmUgU0NBTEVSX0NUTDBfVU5J VFkJCQlCSVQoNCkKKworI2RlZmluZSBTQ0FMRVJfQ1RMMF9QSVhFTF9GT1JNQVRfTUFTSwkJVkM0 X01BU0soMywgMCkKKyNkZWZpbmUgU0NBTEVSX0NUTDBfUElYRUxfRk9STUFUX1NISUZUCQkwCisK KyNkZWZpbmUgU0NBTEVSX1BPUzBfRklYRURfQUxQSEFfTUFTSwkJVkM0X01BU0soMzEsIDI0KQor I2RlZmluZSBTQ0FMRVJfUE9TMF9GSVhFRF9BTFBIQV9TSElGVAkJMjQKKworI2RlZmluZSBTQ0FM RVJfUE9TMF9TVEFSVF9ZX01BU0sJCVZDNF9NQVNLKDIzLCAxMikKKyNkZWZpbmUgU0NBTEVSX1BP UzBfU1RBUlRfWV9TSElGVAkJMTIKKworI2RlZmluZSBTQ0FMRVJfUE9TMF9TVEFSVF9YX01BU0sJ CVZDNF9NQVNLKDExLCAwKQorI2RlZmluZSBTQ0FMRVJfUE9TMF9TVEFSVF9YX1NISUZUCQkwCisK KyNkZWZpbmUgU0NBTEVSX1BPUzJfQUxQSEFfTU9ERV9NQVNLCQlWQzRfTUFTSygzMSwgMzApCisj ZGVmaW5lIFNDQUxFUl9QT1MyX0FMUEhBX01PREVfU0hJRlQJCTMwCisjZGVmaW5lIFNDQUxFUl9Q T1MyX0FMUEhBX01PREVfUElQRUxJTkUJCTAKKyNkZWZpbmUgU0NBTEVSX1BPUzJfQUxQSEFfTU9E RV9GSVhFRAkJMQorI2RlZmluZSBTQ0FMRVJfUE9TMl9BTFBIQV9NT0RFX0ZJWEVEX05PTlpFUk8J MgorI2RlZmluZSBTQ0FMRVJfUE9TMl9BTFBIQV9NT0RFX0ZJWEVEX09WRVJfMHgwNwkzCisKKyNk ZWZpbmUgU0NBTEVSX1BPUzJfSEVJR0hUX01BU0sJCQlWQzRfTUFTSygyNywgMTYpCisjZGVmaW5l IFNDQUxFUl9QT1MyX0hFSUdIVF9TSElGVAkJMTYKKworI2RlZmluZSBTQ0FMRVJfUE9TMl9XSURU SF9NQVNLCQkJVkM0X01BU0soMTEsIDApCisjZGVmaW5lIFNDQUxFUl9QT1MyX1dJRFRIX1NISUZU CQkJMAorCisjZGVmaW5lIFNDQUxFUl9TUkNfUElUQ0hfTUFTSwkJCVZDNF9NQVNLKDE1LCAwKQor I2RlZmluZSBTQ0FMRVJfU1JDX1BJVENIX1NISUZUCQkJMAorCisjZW5kaWYgLyogVkM0X1JFR1Nf SCAqLwotLSAKMi4xLjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl dmVsCg==