From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Anholt Subject: [PATCH 3/7] drm/vc4: Add KMS support for Raspberry Pi. Date: Wed, 12 Aug 2015 17:56:16 -0700 Message-ID: <1439427380-2436-4-git-send-email-eric@anholt.net> References: <1439427380-2436-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: <1439427380-2436-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 VGhpcyBpcyB0aGUgc3RhcnQgb2YgYSBmdWxsIFZDNCBkcml2ZXIuICBSaWdodCBub3cgdGhpcyBq dXN0IHN1cHBvcnRzCmNvbmZpZ3VyaW5nIHRoZSBkaXNwbGF5IHVzaW5nIGEgcHJlLWV4aXN0aW5n IHZpZGVvIG1vZGUgKGJlY2F1c2UKY2hhbmdpbmcgdGhlIHBpeGVsIGNsb2NrIGlzbid0IGF2YWls YWJsZSB5ZXQsIGFuZCBkb2Vzbid0IHdvcmsgd2hlbiBpdAppcykuICBIb3dldmVyLCB0aGlzIGlz IGVub3VnaCBmb3IgZmJjb24gYW5kIGJyaW5naW5nIHVwIFggdXNpbmcKeGY4Ni12aWRlby1tb2Rl c2V0dGluZy4KClNpZ25lZC1vZmYtYnk6IEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+Ci0t LQogZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1 L2RybS9NYWtlZmlsZSAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vdmM0L0tjb25m aWcgICAgICAgfCAgMTQgKwogZHJpdmVycy9ncHUvZHJtL3ZjNC9NYWtlZmlsZSAgICAgIHwgIDE4 ICsrCiBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5jICAgICAgfCAgNTQgKysrKwogZHJpdmVy cy9ncHUvZHJtL3ZjNC92YzRfY3J0Yy5jICAgIHwgNTgzICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RlYnVnZnMuYyB8ICAzOCArKysK IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5jICAgICB8IDI0OSArKysrKysrKysrKysrKysK IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oICAgICB8IDEyMyArKysrKysrCiBkcml2ZXJz L2dwdS9kcm0vdmM0L3ZjNF9oZG1pLmMgICAgfCA2NTEgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2h2cy5jICAgICB8IDE3MiAr KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9rbXMuYyAgICAgfCAgODQgKysrKysK IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3BsYW5lLmMgICB8IDMyMCArKysrKysrKysrKysrKysr KysrCiBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9yZWdzLmggICAgfCA1NjIgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKIDE0IGZpbGVzIGNoYW5nZWQsIDI4NzEgaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92YzQvS2NvbmZpZwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92YzQvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL3ZjNC92YzRfY3J0Yy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL3ZjNC92YzRfZGVidWdmcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL3ZjNC92YzRfZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmM0 L3ZjNF9kcnYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2hk bWkuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2h2cy5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfa21zLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9wbGFuZS5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcmVncy5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwppbmRleCBjNDZjYTMx Li4xNzMwYTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9kcml2 ZXJzL2dwdS9kcm0vS2NvbmZpZwpAQCAtMjQwLDMgKzI0MCw1IEBAIHNvdXJjZSAiZHJpdmVycy9n cHUvZHJtL3N0aS9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9L Y29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9pbXgvS2NvbmZpZyIKKworc291cmNl ICJkcml2ZXJzL2dwdS9kcm0vdmM0L0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5kZXggNTcxM2QwNS4uYjk5 MWFjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9NYWtlZmlsZQpAQCAtNDIsNiArNDIsNyBAQCBvYmotJChDT05GSUdfRFJNX01HQSkJ Kz0gbWdhLwogb2JqLSQoQ09ORklHX0RSTV9JODEwKQkrPSBpODEwLwogb2JqLSQoQ09ORklHX0RS TV9JOTE1KSAgKz0gaTkxNS8KIG9iai0kKENPTkZJR19EUk1fTUdBRzIwMCkgKz0gbWdhZzIwMC8K K29iai0kKENPTkZJR19EUk1fVkM0KSAgKz0gdmM0Lwogb2JqLSQoQ09ORklHX0RSTV9DSVJSVVNf UUVNVSkgKz0gY2lycnVzLwogb2JqLSQoQ09ORklHX0RSTV9TSVMpICAgKz0gc2lzLwogb2JqLSQo Q09ORklHX0RSTV9TQVZBR0UpKz0gc2F2YWdlLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3ZjNC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC9LY29uZmlnCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMGNjOTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vdmM0L0tjb25maWcKQEAgLTAsMCArMSwxNCBAQAorY29uZmlnIERSTV9WQzQKKwl0 cmlzdGF0ZSAiQnJvYWRjb20gVkM0IEdyYXBoaWNzIgorCWRlcGVuZHMgb24gQVJDSF9CQ00yODM1 CisJZGVwZW5kcyBvbiBEUk0KKwlzZWxlY3QgRFJNX0tNU19IRUxQRVIKKwlzZWxlY3QgRFJNX0tN U19GQl9IRUxQRVIKKwlzZWxlY3QgRFJNX0tNU19DTUFfSEVMUEVSCisJaGVscAorCSAgQ2hvb3Nl IHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgc3lzdGVtIHRoYXQgaGFzIGEgQnJvYWRjb20KKwkg IFZDNCBHUFUsIHN1Y2ggYXMgdGhlIFJhc3BiZXJyeSBQaSBvciBvdGhlciBCQ00yNzA4L0JDTTI4 MzUuCisKKwkgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHRoYXQgImF2b2lkX3dhcm5pbmdzPTIiIGJl IHByZXNlbnQgaW4KKwkgIHRoZSBjb25maWcudHh0IGZvciB0aGUgZmlybXdhcmUsIHRvIGtlZXAg aXQgZnJvbSBzbWFzaGluZworCSAgb3VyIGRpc3BsYXkgc2V0dXAuCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vdmM0L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC9NYWtlZmlsZQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWEwN2NhCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC9NYWtlZmlsZQpAQCAtMCwwICsxLDE4IEBACitjY2Zs YWdzLXkgOj0gLUlpbmNsdWRlL2RybQorCisjIFBsZWFzZSBrZWVwIHRoZXNlIGJ1aWxkIGxpc3Rz IHNvcnRlZCEKKworIyBjb3JlIGRyaXZlciBjb2RlCit2YzQteSA6PSBcCisJdmM0X2JvLm8gXAor CXZjNF9jcnRjLm8gXAorCXZjNF9kcnYubyBcCisJdmM0X2ttcy5vIFwKKwl2YzRfaGRtaS5vIFwK Kwl2YzRfaHZzLm8gXAorCXZjNF9wbGFuZS5vIFwKKwkkKCkKKwordmM0LSQoQ09ORklHX0RFQlVH X0ZTKSArPSB2YzRfZGVidWdmcy5vCisKK29iai0kKENPTkZJR19EUk1fVkM0KSAgKz0gdmM0Lm8K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2JvLmMgYi9kcml2ZXJzL2dwdS9k cm0vdmM0L3ZjNF9iby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZThj YWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5jCkBAIC0w LDAgKzEsNTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IMKpIDIwMTUgQnJvYWRjb20KKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgorICovCisKKy8qIERPQzogVkM0IEdFTSBCTyBtYW5hZ2VtZW50IHN1cHBv cnQuCisgKgorICogVGhlIFZDNCBHUFUgYXJjaGl0ZWN0dXJlIChib3RoIHNjYW5vdXQgYW5kIHJl bmRlcmluZykgaGFzIGRpcmVjdAorICogYWNjZXNzIHRvIHN5c3RlbSBtZW1vcnkgd2l0aCBubyBN TVUgaW4gYmV0d2Vlbi4gIFRvIHN1cHBvcnQgaXQsIHdlCisgKiB1c2UgdGhlIEdFTSBDTUEgaGVs cGVyIGZ1bmN0aW9ucyB0byBhbGxvY2F0ZSBjb250aWd1b3VzIHJhbmdlcyBvZgorICogcGh5c2lj YWwgbWVtb3J5IGZvciBvdXIgQk9zLgorICovCisKKyNpbmNsdWRlICJ2YzRfZHJ2LmgiCisKK3N0 cnVjdCB2YzRfYm8gKnZjNF9ib19jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90 IHNpemUpCit7CisJc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqY21hX29iajsKKworCWNtYV9v YmogPSBkcm1fZ2VtX2NtYV9jcmVhdGUoZGV2LCBzaXplKTsKKwlpZiAoSVNfRVJSKGNtYV9vYmop KQorCQlyZXR1cm4gTlVMTDsKKwllbHNlCisJCXJldHVybiB0b192YzRfYm8oJmNtYV9vYmotPmJh c2UpOworfQorCitpbnQgdmM0X2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 LAorCQkgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgIHN0cnVjdCBkcm1fbW9kZV9j cmVhdGVfZHVtYiAqYXJncykKK3sKKwlpbnQgbWluX3BpdGNoID0gRElWX1JPVU5EX1VQKGFyZ3Mt PndpZHRoICogYXJncy0+YnBwLCA4KTsKKwlzdHJ1Y3QgdmM0X2JvICpibyA9IE5VTEw7CisJaW50 IHJldDsKKworCWlmIChhcmdzLT5waXRjaCA8IG1pbl9waXRjaCkKKwkJYXJncy0+cGl0Y2ggPSBt aW5fcGl0Y2g7CisKKwlpZiAoYXJncy0+c2l6ZSA8IGFyZ3MtPnBpdGNoICogYXJncy0+aGVpZ2h0 KQorCQlhcmdzLT5zaXplID0gYXJncy0+cGl0Y2ggKiBhcmdzLT5oZWlnaHQ7CisKKwltdXRleF9s b2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJYm8gPSB2YzRfYm9fY3JlYXRlKGRldiwgcm91bmR1 cChhcmdzLT5zaXplLCBQQUdFX1NJWkUpKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211 dGV4KTsKKwlpZiAoIWJvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IGRybV9nZW1faGFu ZGxlX2NyZWF0ZShmaWxlX3ByaXYsICZiby0+YmFzZS5iYXNlLCAmYXJncy0+aGFuZGxlKTsKKwlk cm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmYm8tPmJhc2UuYmFzZSk7CisKKwly ZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfY3J0Yy5j IGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfY3J0Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjZmMTI3ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v dmM0L3ZjNF9jcnRjLmMKQEAgLTAsMCArMSw1ODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw MTUgQnJvYWRjb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKy8qKgorICogRE9DOiBW QzQgQ1JUQyBtb2R1bGUKKyAqCisgKiBJbiBWQzQsIHRoZSBQaXhlbCBWYWx2ZSBpcyB3aGF0IG1v c3QgY2xvc2VseSBjb3JyZXNwb25kcyB0byB0aGUKKyAqIERSTSdzIGNvbmNlcHQgb2YgYSBDUlRD LiAgVGhlIFBWIGdlbmVyYXRlcyB2aWRlbyB0aW1pbmdzIGZyb20gdGhlCisgKiBwaXhlbCBjbG9j ayBhbmQgaXRzIGNvbmZpZ3VyYXRpb24uCisgKgorICogSG93ZXZlciwgdGhlIERSTSBDUlRDIGFs c28gY29sbGVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYWxsIHRoZQorICogRFJNIHBsYW5lcyBh dHRhY2hlZCB0byBpdC4gIEFzIGEgcmVzdWx0LCB0aGlzIGZpbGUgYWxzbyBtYW5hZ2VzCisgKiBz ZXR1cCBvZiB0aGUgVkM0IEhWUydzIGRpc3BsYXkgZWxlbWVudHMgb24gdGhlIENSVEMuCisgKi8K KworI2luY2x1ZGUgImRybV9hdG9taWNfaGVscGVyLmgiCisjaW5jbHVkZSAiZHJtX2NydGNfaGVs cGVyLmgiCisjaW5jbHVkZSAibGludXgvY2xrLmgiCisjaW5jbHVkZSAibGludXgvY29tcG9uZW50 LmgiCisjaW5jbHVkZSAidmM0X2Rydi5oIgorI2luY2x1ZGUgInZjNF9yZWdzLmgiCisKKyNkZWZp bmUgQ1JUQ19XUklURShvZmZzZXQsIHZhbCkgd3JpdGVsKHZhbCwgdmM0X2NydGMtPnJlZ3MgKyAo b2Zmc2V0KSkKKyNkZWZpbmUgQ1JUQ19SRUFEKG9mZnNldCkgcmVhZGwodmM0X2NydGMtPnJlZ3Mg KyAob2Zmc2V0KSkKKworI2RlZmluZSBDUlRDX1JFRyhyZWcpIHsgcmVnLCAjcmVnIH0KK3N0YXRp YyBjb25zdCBzdHJ1Y3QgeworCXUzMiByZWc7CisJY29uc3QgY2hhciAqbmFtZTsKK30gY3J0Y19y ZWdzW10gPSB7CisJQ1JUQ19SRUcoUFZfQ09OVFJPTCksCisJQ1JUQ19SRUcoUFZfVl9DT05UUk9M KSwKKwlDUlRDX1JFRyhQVl9WU1lOQ0QpLAorCUNSVENfUkVHKFBWX0hPUlpBKSwKKwlDUlRDX1JF RyhQVl9IT1JaQiksCisJQ1JUQ19SRUcoUFZfVkVSVEEpLAorCUNSVENfUkVHKFBWX1ZFUlRCKSwK KwlDUlRDX1JFRyhQVl9WRVJUQV9FVkVOKSwKKwlDUlRDX1JFRyhQVl9WRVJUQl9FVkVOKSwKKwlD UlRDX1JFRyhQVl9JTlRFTiksCisJQ1JUQ19SRUcoUFZfSU5UU1RBVCksCisJQ1JUQ19SRUcoUFZf U1RBVCksCisJQ1JUQ19SRUcoUFZfSEFDVF9BQ1QpLAorfTsKKworc3RhdGljIHZvaWQgdmM0X2Ny dGNfZHVtcF9yZWdzKHN0cnVjdCB2YzRfY3J0YyAqdmM0X2NydGMpCit7CisJaW50IGk7CisKKwlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjcnRjX3JlZ3MpOyBpKyspIHsKKwkJRFJNX0lORk8o IjB4JTA0eCAoJXMpOiAweCUwOHhcbiIsCisJCQkgY3J0Y19yZWdzW2ldLnJlZywgY3J0Y19yZWdz W2ldLm5hbWUsCisJCQkgQ1JUQ19SRUFEKGNydGNfcmVnc1tpXS5yZWcpKTsKKwl9Cit9CisKKyNp ZmRlZiBDT05GSUdfREVCVUdfRlMKK2ludCB2YzRfY3J0Y19kZWJ1Z2ZzX3JlZ3Moc3RydWN0IHNl cV9maWxlICptLCB2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUg PSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlpbnQgY3J0Y19pbmRleCA9ICh1aW50cHRyX3Qp bm9kZS0+aW5mb19lbnQtPmRhdGE7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCXN0cnVjdCB2 YzRfY3J0YyAqdmM0X2NydGM7CisJaW50IGk7CisKKwlpID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQlpZiAoaSA9 PSBjcnRjX2luZGV4KQorCQkJYnJlYWs7CisJCWkrKzsKKwl9CisJaWYgKCFjcnRjKQorCQlyZXR1 cm4gMDsKKwl2YzRfY3J0YyA9IHRvX3ZjNF9jcnRjKGNydGMpOworCisJZm9yIChpID0gMDsgaSA8 IEFSUkFZX1NJWkUoY3J0Y19yZWdzKTsgaSsrKSB7CisJCXNlcV9wcmludGYobSwgIiVzICgweCUw NHgpOiAweCUwOHhcbiIsCisJCQkgICBjcnRjX3JlZ3NbaV0ubmFtZSwgY3J0Y19yZWdzW2ldLnJl ZywKKwkJCSAgIENSVENfUkVBRChjcnRjX3JlZ3NbaV0ucmVnKSk7CisJfQorCisJcmV0dXJuIDA7 Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgdmM0X2NydGNfZGVzdHJveShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCit7CisJZHJtX2NydGNfY2xlYW51cChjcnRjKTsKK30KKworc3RhdGljIGJvb2wg dmM0X2NydGNfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJY29uc3Qgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUg KmFkanVzdGVkX21vZGUpCit7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB1MzIgdmM0X2dl dF9maWZvX2Z1bGxfbGV2ZWwodTMyIGZvcm1hdCkKK3sKKwlzdGF0aWMgY29uc3QgdTMyIGZpZm9f bGVuX2J5dGVzID0gNjQ7CisJc3RhdGljIGNvbnN0IHUzMiBodnNfbGF0ZW5jeV9waXggPSA2Owor CisJc3dpdGNoIChmb3JtYXQpIHsKKwljYXNlIFBWX0NPTlRST0xfRk9STUFUX0RTSVZfMTY6CisJ Y2FzZSBQVl9DT05UUk9MX0ZPUk1BVF9EU0lDXzE2OgorCQlyZXR1cm4gZmlmb19sZW5fYnl0ZXMg LSAyICogaHZzX2xhdGVuY3lfcGl4OworCWNhc2UgUFZfQ09OVFJPTF9GT1JNQVRfRFNJVl8xODoK KwkJcmV0dXJuIGZpZm9fbGVuX2J5dGVzIC0gMTQ7CisJY2FzZSBQVl9DT05UUk9MX0ZPUk1BVF8y NDoKKwljYXNlIFBWX0NPTlRST0xfRk9STUFUX0RTSVZfMjQ6CisJZGVmYXVsdDoKKwkJcmV0dXJu IGZpZm9fbGVuX2J5dGVzIC0gMyAqIGh2c19sYXRlbmN5X3BpeDsKKwl9Cit9CisKK3N0YXRpYyB2 b2lkIHZjNF9jcnRjX21vZGVfc2V0X25vZmIoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0 cnVjdCB2YzRfY3J0YyAqdmM0X2NydGMgPSB0b192YzRfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgZHJt X2NydGNfc3RhdGUgKnN0YXRlID0gY3J0Yy0+c3RhdGU7CisJc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm1vZGUgPSAmc3RhdGUtPmFkanVzdGVkX21vZGU7CisJdTMyIHZhY3RpdmUgPSAobW9kZS0+ dmRpc3BsYXkgPj4KKwkJICAgICAgICgobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVS TEFDRSkgPyAxIDogMCkpOworCXUzMiBmb3JtYXQgPSBQVl9DT05UUk9MX0ZPUk1BVF8yNDsKKwli b29sIGRlYnVnX2R1bXBfcmVncyA9IGZhbHNlOworCisJaWYgKGRlYnVnX2R1bXBfcmVncykgewor CQlEUk1fSU5GTygiQ1JUQyAlZCByZWdzIGJlZm9yZTpcbiIsIGRybV9jcnRjX2luZGV4KGNydGMp KTsKKwkJdmM0X2NydGNfZHVtcF9yZWdzKHZjNF9jcnRjKTsKKwl9CisKKwkvKiBUaGlzIGlzIHdo ZXJlIHdlIHdvdWxkIHNldCB0aGUgcGl4ZWwgY2xvY2suICovCisKKwkvKiBSZXNldCB0aGUgUFYg Zmlmby4gKi8KKwlDUlRDX1dSSVRFKFBWX0NPTlRST0wsIDApOworCUNSVENfV1JJVEUoUFZfQ09O VFJPTCwgUFZfQ09OVFJPTF9GSUZPX0NMUiB8IFBWX0NPTlRST0xfRU4pOworCUNSVENfV1JJVEUo UFZfQ09OVFJPTCwgMCk7CisKKwlDUlRDX1dSSVRFKFBWX0hPUlpBLAorCQkgICBWQzRfU0VUX0ZJ RUxEKG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX2VuZCwKKwkJCQkgUFZfSE9SWkFfSEJQKSB8 CisJCSAgIFZDNF9TRVRfRklFTEQobW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQs CisJCQkJIFBWX0hPUlpBX0hTWU5DKSk7CisJQ1JUQ19XUklURShQVl9IT1JaQiwKKwkJICAgVkM0 X1NFVF9GSUVMRChtb2RlLT5oc3luY19zdGFydCAtIG1vZGUtPmhkaXNwbGF5LAorCQkJCSBQVl9I T1JaQl9IRlApIHwKKwkJICAgVkM0X1NFVF9GSUVMRChtb2RlLT5oZGlzcGxheSwgUFZfSE9SWkJf SEFDVElWRSkpOworCisJQ1JUQ19XUklURShQVl9WRVJUQSwKKwkJICAgVkM0X1NFVF9GSUVMRCht b2RlLT52dG90YWwgLSBtb2RlLT52c3luY19lbmQsCisJCQkJIFBWX1ZFUlRBX1ZCUCkgfAorCQkg ICBWQzRfU0VUX0ZJRUxEKG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0YXJ0LAorCQkJ CSBQVl9WRVJUQV9WU1lOQykpOworCUNSVENfV1JJVEUoUFZfVkVSVEIsCisJCSAgIFZDNF9TRVRf RklFTEQobW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheSwKKwkJCQkgUFZfVkVSVEJf VkZQKSB8CisJCSAgIFZDNF9TRVRfRklFTEQodmFjdGl2ZSwgUFZfVkVSVEJfVkFDVElWRSkpOwor CWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSB7CisJCS8qIFdyaXRl IFBWX1ZFUlRBX0VWRU4vVkVSVEJfRVZFTiAqLworCX0KKworCUNSVENfV1JJVEUoUFZfSEFDVF9B Q1QsIG1vZGUtPmhkaXNwbGF5KTsKKworCUNSVENfV1JJVEUoUFZfVl9DT05UUk9MLAorCQkgICBQ Vl9WQ09OVFJPTF9DT05USU5VT1VTKTsKKworCUNSVENfV1JJVEUoUFZfQ09OVFJPTCwKKwkJICAg VkM0X1NFVF9GSUVMRChmb3JtYXQsIFBWX0NPTlRST0xfRk9STUFUKSB8CisJCSAgIFZDNF9TRVRf RklFTEQodmM0X2dldF9maWZvX2Z1bGxfbGV2ZWwoZm9ybWF0KSwKKwkJCQkgUFZfQ09OVFJPTF9G SUZPX0xFVkVMKSB8CisJCSAgIFBWX0NPTlRST0xfQ0xSX0FUX1NUQVJUIHwKKwkJICAgUFZfQ09O VFJPTF9UUklHR0VSX1VOREVSRkxPVyB8CisJCSAgIFBWX0NPTlRST0xfV0FJVF9IU1RBUlQgfAor CQkgICBWQzRfU0VUX0ZJRUxEKFBWX0NPTlRST0xfQ0xLX1NFTEVDVF9EUElfU01JX0hETUksCisJ CQkJIFBWX0NPTlRST0xfQ0xLX1NFTEVDVCkgfAorCQkgICBQVl9DT05UUk9MX0ZJRk9fQ0xSIHwK KwkJICAgUFZfQ09OVFJPTF9FTik7CisKKwlpZiAoZGVidWdfZHVtcF9yZWdzKSB7CisJCURSTV9J TkZPKCJDUlRDICVkIHJlZ3MgYWZ0ZXI6XG4iLCBkcm1fY3J0Y19pbmRleChjcnRjKSk7CisJCXZj NF9jcnRjX2R1bXBfcmVncyh2YzRfY3J0Yyk7CisJfQorfQorCitzdGF0aWMgdm9pZAorcmVxdWly ZV9odnNfZW5hYmxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2YzRfZGV2 ICp2YzQgPSB0b192YzRfZGV2KGRldik7CisKKwlXQVJOX09OX09OQ0UoKEhWU19SRUFEKFNDQUxF Ul9ESVNQQ1RSTCkgJiBTQ0FMRVJfRElTUENUUkxfRU5BQkxFKSAhPQorCQkgICAgIFNDQUxFUl9E SVNQQ1RSTF9FTkFCTEUpOworfQorCitzdGF0aWMgdm9pZCB2YzRfY3J0Y19kaXNhYmxlKHN0cnVj dCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2 OworCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7CisJc3RydWN0IHZjNF9j cnRjICp2YzRfY3J0YyA9IHRvX3ZjNF9jcnRjKGNydGMpOworCisJcmVxdWlyZV9odnNfZW5hYmxl ZChkZXYpOworCisJQ1JUQ19XUklURShQVl9WX0NPTlRST0wsCisJCSAgIENSVENfUkVBRChQVl9W X0NPTlRST0wpICYgflBWX1ZDT05UUk9MX1ZJREVOKTsKKwl3aGlsZSAoQ1JUQ19SRUFEKFBWX1Zf Q09OVFJPTCkgJiBQVl9WQ09OVFJPTF9WSURFTikKKwkJY3B1X3JlbGF4KCk7CisKKwkvKiBXaXRo b3V0IGEgd2FpdCBoZXJlLCB3ZSBlbmQgdXAgd2l0aCBhIGJsYWNrIHNjcmVlbi4gKi8KKwltc2xl ZXAoMzApOworCisJaWYgKEhWU19SRUFEKFNDQUxFUl9ESVNQQ1RSTFgodmM0X2NydGMtPmNoYW5u ZWwpKSAmCisJICAgIFNDQUxFUl9ESVNQQ1RSTFhfRU5BQkxFKSB7CisJCUhWU19XUklURShTQ0FM RVJfRElTUENUUkxYKHZjNF9jcnRjLT5jaGFubmVsKSwKKwkJCSAgU0NBTEVSX0RJU1BDVFJMWF9S RVNFVCk7CisKKwkJLyogV2hpbGUgdGhlIGRvY3Mgc2F5IHRoYXQgcmVzZXQgaXMgc2VsZi1jbGVh cmluZywgaXQKKwkJICogc2VlbXMgaXQgZG9lc24ndCBhY3R1YWxseS4KKwkJICovCisJCUhWU19X UklURShTQ0FMRVJfRElTUENUUkxYKHZjNF9jcnRjLT5jaGFubmVsKSwgMCk7CisJfQorCisJLyog T25jZSB3ZSBsZWF2ZSwgdGhlIHNjYWxlciBzaG91bGQgYmUgZGlzYWJsZWQgYW5kIGl0cyBmaWZv IGVtcHR5LiAqLworCisJV0FSTl9PTl9PTkNFKEhWU19SRUFEKFNDQUxFUl9ESVNQQ1RSTFgodmM0 X2NydGMtPmNoYW5uZWwpKSAmCisJCSAgICAgU0NBTEVSX0RJU1BDVFJMWF9SRVNFVCk7CisKKwlX QVJOX09OX09OQ0UoVkM0X0dFVF9GSUVMRChIVlNfUkVBRChTQ0FMRVJfRElTUFNUQVRYKHZjNF9j cnRjLT5jaGFubmVsKSksCisJCQkJICAgU0NBTEVSX0RJU1BTVEFUWF9NT0RFKSAhPQorCQkgICAg IFNDQUxFUl9ESVNQU1RBVFhfTU9ERV9ESVNBQkxFRCk7CisKKwlXQVJOX09OX09OQ0UoKEhWU19S RUFEKFNDQUxFUl9ESVNQU1RBVFgodmM0X2NydGMtPmNoYW5uZWwpKSAmCisJCSAgICAgIChTQ0FM RVJfRElTUFNUQVRYX0ZVTEwgfCBTQ0FMRVJfRElTUFNUQVRYX0VNUFRZKSkgIT0KKwkJICAgICBT Q0FMRVJfRElTUFNUQVRYX0VNUFRZKTsKK30KKworc3RhdGljIHZvaWQgdmM0X2NydGNfZW5hYmxl KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0 Yy0+ZGV2OworCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7CisJc3RydWN0 IHZjNF9jcnRjICp2YzRfY3J0YyA9IHRvX3ZjNF9jcnRjKGNydGMpOworCXN0cnVjdCBkcm1fY3J0 Y19zdGF0ZSAqc3RhdGUgPSBjcnRjLT5zdGF0ZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSA9ICZzdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKKworCXJlcXVpcmVfaHZzX2VuYWJsZWQoZGV2 KTsKKworCS8qIFR1cm4gb24gdGhlIHNjYWxlciwgd2hpY2ggd2lsbCB3YWl0IGZvciB2c3RhcnQg dG8gc3RhcnQKKwkgKiBjb21wb3NpdGluZy4KKwkgKi8KKwlIVlNfV1JJVEUoU0NBTEVSX0RJU1BD VFJMWCh2YzRfY3J0Yy0+Y2hhbm5lbCksCisJCSAgVkM0X1NFVF9GSUVMRChtb2RlLT5oZGlzcGxh eSwgU0NBTEVSX0RJU1BDVFJMWF9XSURUSCkgfAorCQkgIFZDNF9TRVRfRklFTEQobW9kZS0+dmRp c3BsYXksIFNDQUxFUl9ESVNQQ1RSTFhfSEVJR0hUKSB8CisJCSAgU0NBTEVSX0RJU1BDVFJMWF9F TkFCTEUpOworCisJLyogVHVybiBvbiB0aGUgcGl4ZWwgdmFsdmUsIHdoaWNoIHdpbGwgZW1pdCB0 aGUgdnN0YXJ0IHNpZ25hbC4gKi8KKwlDUlRDX1dSSVRFKFBWX1ZfQ09OVFJPTCwKKwkJICAgQ1JU Q19SRUFEKFBWX1ZfQ09OVFJPTCkgfCBQVl9WQ09OVFJPTF9WSURFTik7Cit9CisKK3N0YXRpYyBp bnQgdmM0X2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g Y3J0Yy0+ZGV2OworCXN0cnVjdCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7CisJc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmU7CisJc3RydWN0IHZjNF9jcnRjICp2YzRfY3J0YyA9IHRvX3Zj NF9jcnRjKGNydGMpOworCXUzMiBkbGlzdF9jb3VudCA9IDA7CisKKwlkcm1fYXRvbWljX2NydGNf c3RhdGVfZm9yX2VhY2hfcGxhbmUocGxhbmUsIHN0YXRlKSB7CisJCXN0cnVjdCBkcm1fcGxhbmVf c3RhdGUgKnBsYW5lX3N0YXRlID0KKwkJCXN0YXRlLT5zdGF0ZS0+cGxhbmVfc3RhdGVzW2RybV9w bGFuZV9pbmRleChwbGFuZSldOworCisJCS8qIHBsYW5lIG1pZ2h0IG5vdCBoYXZlIGNoYW5nZWQs IGluIHdoaWNoIGNhc2UgdGFrZQorCQkgKiBjdXJyZW50IHN0YXRlOgorCQkgKi8KKwkJaWYgKCFw bGFuZV9zdGF0ZSkKKwkJCXBsYW5lX3N0YXRlID0gcGxhbmUtPnN0YXRlOworCisJCWRsaXN0X2Nv dW50ICs9IHZjNF9wbGFuZV9kbGlzdF9zaXplKHBsYW5lX3N0YXRlKTsKKwl9CisKKwlkbGlzdF9j b3VudCsrOyAvKiBBY2NvdW50IGZvciBTQ0FMRVJfQ1RMMF9FTkQuICovCisKKwlpZiAoIXZjNF9j cnRjLT5kbGlzdCB8fCBkbGlzdF9jb3VudCA+IHZjNF9jcnRjLT5kbGlzdF9zaXplKSB7CisJCXZj NF9jcnRjLT5kbGlzdCA9ICgodTMyIF9faW9tZW0gKil2YzQtPmh2cy0+ZGxpc3QgKworCQkJCSAg IEhWU19CT09UTE9BREVSX0RMSVNUX0VORCk7CisJCXZjNF9jcnRjLT5kbGlzdF9zaXplID0gKChT Q0FMRVJfRExJU1RfU0laRSA+PiAyKSAtCisJCQkJCUhWU19CT09UTE9BREVSX0RMSVNUX0VORCk7 CisKKwkJaWYgKGRsaXN0X2NvdW50ID4gdmM0X2NydGMtPmRsaXN0X3NpemUpIHsKKwkJCURSTV9E RUJVR19LTVMoImRsaXN0IHRvbyBsYXJnZSBmb3IgQ1JUQyAoJWQgPiAlZCkuXG4iLAorCQkJCSAg ICAgIGRsaXN0X2NvdW50LCB2YzRfY3J0Yy0+ZGxpc3Rfc2l6ZSk7CisJCQlyZXR1cm4gLUVJTlZB TDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2YzRfY3J0Y19hdG9t aWNfYmVnaW4oc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworfQorCitzdGF0aWMgdm9pZCB2YzRf Y3J0Y19hdG9taWNfZmx1c2goc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9k ZXYoZGV2KTsKKwlzdHJ1Y3QgdmM0X2NydGMgKnZjNF9jcnRjID0gdG9fdmM0X2NydGMoY3J0Yyk7 CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7CisJYm9vbCBkZWJ1Z19kdW1wX3JlZ3MgPSBmYWxz ZTsKKwl1MzIgX19pb21lbSAqZGxpc3RfbmV4dCA9IHZjNF9jcnRjLT5kbGlzdDsKKworCWlmIChk ZWJ1Z19kdW1wX3JlZ3MpIHsKKwkJRFJNX0lORk8oIkNSVEMgJWQgSFZTIGJlZm9yZTpcbiIsIGRy bV9jcnRjX2luZGV4KGNydGMpKTsKKwkJdmM0X2h2c19kdW1wX3N0YXRlKGRldik7CisJfQorCisJ LyogQ29weSBhbGwgdGhlIGFjdGl2ZSBwbGFuZXMnIGRsaXN0IGNvbnRlbnRzIHRvIHRoZSBoYXJk d2FyZSBkbGlzdC4KKwkgKgorCSAqIFhYWDogSWYgdGhlIG5ldyBkaXNwbGF5IGxpc3Qgd2FzIGxh cmdlIGVub3VnaCB0aGF0IGl0CisJICogb3ZlcmxhcHBlZCBhIGN1cnJlbnRseS1yZWFkIGRpc3Bs YXkgbGlzdCwgd2UgbmVlZCB0byBkbworCSAqIHNvbWV0aGluZyBsaWtlIGRpc2FibGUgc2Nhbm91 dCBiZWZvcmUgcHV0dGluZyBpbiB0aGUgbmV3CisJICogbGlzdC4gIEZvciBub3csIHdlJ3JlIHNh ZmUgYmVjYXVzZSB3ZSBvbmx5IGhhdmUgdGhlIHR3bworCSAqIHBsYW5lcy4KKwkgKi8KKwlkcm1f YXRvbWljX2NydGNfZm9yX2VhY2hfcGxhbmUocGxhbmUsIGNydGMpIHsKKwkJZGxpc3RfbmV4dCAr PSB2YzRfcGxhbmVfd3JpdGVfZGxpc3QocGxhbmUsIGRsaXN0X25leHQpOworCX0KKworCWlmIChk bGlzdF9uZXh0ID09IHZjNF9jcnRjLT5kbGlzdCkgeworCQkvKiBJZiBubyBwbGFuZXMgd2VyZSBl bmFibGVkLCB1c2UgdGhlIFNDQUxFUl9DVEwwX0VORAorCQkgKiBhdCB0aGUgc3RhcnQgb2YgdGhl IGRpc3BsYXkgbGlzdCBtZW1vcnkgKGluIHRoZQorCQkgKiBib290bG9hZGVyIHNlY3Rpb24pLiAg V2UnbGwgcmV3cml0ZSB0aGF0CisJCSAqIFNDQUxFUl9DVEwwX0VORCwganVzdCBpbiBjYXNlLCB0 aG91Z2guCisJCSAqLworCQl3cml0ZWwoU0NBTEVSX0NUTDBfRU5ELCB2YzQtPmh2cy0+ZGxpc3Qp OworCQlIVlNfV1JJVEUoU0NBTEVSX0RJU1BMSVNUWCh2YzRfY3J0Yy0+Y2hhbm5lbCksIDApOwor CX0gZWxzZSB7CisJCXdyaXRlbChTQ0FMRVJfQ1RMMF9FTkQsIGRsaXN0X25leHQpOworCQlkbGlz dF9uZXh0Kys7CisKKwkJSFZTX1dSSVRFKFNDQUxFUl9ESVNQTElTVFgodmM0X2NydGMtPmNoYW5u ZWwpLAorCQkJICAodTMyICopdmM0X2NydGMtPmRsaXN0IC0gKHUzMiAqKXZjNC0+aHZzLT5kbGlz dCk7CisKKwkJLyogTWFrZSB0aGUgbmV4dCBkaXNwbGF5IGxpc3Qgc3RhcnQgYWZ0ZXIgb3Vycy4g Ki8KKwkJdmM0X2NydGMtPmRsaXN0X3NpemUgLT0gKGRsaXN0X25leHQgLSB2YzRfY3J0Yy0+ZGxp c3QpOworCQl2YzRfY3J0Yy0+ZGxpc3QgPSBkbGlzdF9uZXh0OworCX0KKworCWlmIChkZWJ1Z19k dW1wX3JlZ3MpIHsKKwkJRFJNX0lORk8oIkNSVEMgJWQgSFZTIGFmdGVyOlxuIiwgZHJtX2NydGNf aW5kZXgoY3J0YykpOworCQl2YzRfaHZzX2R1bXBfc3RhdGUoZGV2KTsKKwl9CisKKwlpZiAoY3J0 Yy0+c3RhdGUtPmV2ZW50KSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJY3J0Yy0+c3Rh dGUtPmV2ZW50LT5waXBlID0gZHJtX2NydGNfaW5kZXgoY3J0Yyk7CisKKwkJV0FSTl9PTihkcm1f Y3J0Y192YmxhbmtfZ2V0KGNydGMpICE9IDApOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYt PmV2ZW50X2xvY2ssIGZsYWdzKTsKKwkJdmM0X2NydGMtPmV2ZW50ID0gY3J0Yy0+c3RhdGUtPmV2 ZW50OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsK KwkJY3J0Yy0+c3RhdGUtPmV2ZW50ID0gTlVMTDsKKwl9Cit9CisKK2ludCB2YzRfZW5hYmxlX3Zi bGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Y19pZCkKK3sKKwlzdHJ1Y3QgdmM0 X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOworCXN0cnVjdCB2YzRfY3J0YyAqdmM0X2NydGMg PSB2YzQtPmNydGNbY3J0Y19pZF07CisKKwlDUlRDX1dSSVRFKFBWX0lOVEVOLCBQVl9JTlRfVkZQ X1NUQVJUKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHZjNF9kaXNhYmxlX3ZibGFuayhzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Y19pZCkKK3sKKwlzdHJ1Y3QgdmM0X2RldiAqdmM0 ID0gdG9fdmM0X2RldihkZXYpOworCXN0cnVjdCB2YzRfY3J0YyAqdmM0X2NydGMgPSB2YzQtPmNy dGNbY3J0Y19pZF07CisKKwlDUlRDX1dSSVRFKFBWX0lOVEVOLCAwKTsKK30KKworc3RhdGljIHZv aWQKK3ZjNF9jcnRjX2hhbmRsZV9wYWdlX2ZsaXAoc3RydWN0IHZjNF9jcnRjICp2YzRfY3J0YykK K3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmdmM0X2NydGMtPmJhc2U7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bp bl9sb2NrX2lycXNhdmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOworCWlmICh2YzRfY3J0Yy0+ ZXZlbnQpIHsKKwkJZHJtX2NydGNfc2VuZF92YmxhbmtfZXZlbnQoY3J0YywgdmM0X2NydGMtPmV2 ZW50KTsKKwkJdmM0X2NydGMtPmV2ZW50ID0gTlVMTDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB2 YzRfY3J0Y19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB2YzRf Y3J0YyAqdmM0X2NydGMgPSBkYXRhOworCXUzMiBzdGF0ID0gQ1JUQ19SRUFEKFBWX0lOVFNUQVQp OworCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOworCisJaWYgKHN0YXQgJiBQVl9JTlRfVkZQ X1NUQVJUKSB7CisJCUNSVENfV1JJVEUoUFZfSU5UU1RBVCwgUFZfSU5UX1ZGUF9TVEFSVCk7CisJ CWRybV9jcnRjX2hhbmRsZV92YmxhbmsoJnZjNF9jcnRjLT5iYXNlKTsKKwkJdmM0X2NydGNfaGFu ZGxlX3BhZ2VfZmxpcCh2YzRfY3J0Yyk7CisJCXJldCA9IElSUV9IQU5ETEVEOworCX0KKworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgdmM0X2Ny dGNfZnVuY3MgPSB7CisJLnNldF9jb25maWcgPSBkcm1fYXRvbWljX2hlbHBlcl9zZXRfY29uZmln LAorCS5kZXN0cm95ID0gdmM0X2NydGNfZGVzdHJveSwKKwkucGFnZV9mbGlwID0gZHJtX2F0b21p Y19oZWxwZXJfcGFnZV9mbGlwLAorCS5zZXRfcHJvcGVydHkgPSBOVUxMLAorCS5jdXJzb3Jfc2V0 ID0gTlVMTCwgLyogaGFuZGxlZCBieSBkcm1fbW9kZV9jdXJzb3JfdW5pdmVyc2FsICovCisJLmN1 cnNvcl9tb3ZlID0gTlVMTCwgLyogaGFuZGxlZCBieSBkcm1fbW9kZV9jdXJzb3JfdW5pdmVyc2Fs ICovCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19yZXNldCwKKwkuYXRvbWljX2R1 cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlLAor CS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9z dGF0ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIHZj NF9jcnRjX2hlbHBlcl9mdW5jcyA9IHsKKwkubW9kZV9maXh1cCA9IHZjNF9jcnRjX21vZGVfZml4 dXAsCisJLm1vZGVfc2V0X25vZmIgPSB2YzRfY3J0Y19tb2RlX3NldF9ub2ZiLAorCS5kaXNhYmxl ID0gdmM0X2NydGNfZGlzYWJsZSwKKwkuZW5hYmxlID0gdmM0X2NydGNfZW5hYmxlLAorCS5hdG9t aWNfY2hlY2sgPSB2YzRfY3J0Y19hdG9taWNfY2hlY2ssCisJLmF0b21pY19iZWdpbiA9IHZjNF9j cnRjX2F0b21pY19iZWdpbiwKKwkuYXRvbWljX2ZsdXNoID0gdmM0X2NydGNfYXRvbWljX2ZsdXNo LAorfTsKKworLyogRnJlZXMgdGhlIHBhZ2UgZmxpcCBldmVudCB3aGVuIHRoZSBEUk0gZGV2aWNl IGlzIGNsb3NlZCB3aXRoIHRoZQorICogZXZlbnQgc3RpbGwgb3V0c3RhbmRpbmcuCisgKi8KK3Zv aWQgdmM0X2NhbmNlbF9wYWdlX2ZsaXAoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZjNF9jcnRjICp2YzRfY3J0YyA9IHRvX3ZjNF9jcnRj KGNydGMpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJdW5zaWduZWQg bG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdz KTsKKworCWlmICh2YzRfY3J0Yy0+ZXZlbnQgJiYgdmM0X2NydGMtPmV2ZW50LT5iYXNlLmZpbGVf cHJpdiA9PSBmaWxlKSB7CisJCXZjNF9jcnRjLT5ldmVudC0+YmFzZS5kZXN0cm95KCZ2YzRfY3J0 Yy0+ZXZlbnQtPmJhc2UpOworCQlkcm1fY3J0Y192YmxhbmtfcHV0KGNydGMpOworCQl2YzRfY3J0 Yy0+ZXZlbnQgPSBOVUxMOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZXZl bnRfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHZjNF9jcnRjX2JpbmQoc3RydWN0IGRl dmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVj dCBkcm1fZGV2aWNlICpkcm0gPSBkZXZfZ2V0X2RydmRhdGEobWFzdGVyKTsKKwlzdHJ1Y3QgdmM0 X2RldiAqdmM0ID0gdG9fdmM0X2Rldihkcm0pOworCXN0cnVjdCB2YzRfY3J0YyAqdmM0X2NydGM7 CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCXN0cnVjdCBkcm1fcGxhbmUgKnByaW1hcnlfcGxh bmUsICpjdXJzb3JfcGxhbmU7CisJaW50IHJldDsKKworCXByaW1hcnlfcGxhbmUgPSB2YzRfcGxh bmVfaW5pdChkcm0sIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOworCWlmICghcHJpbWFyeV9wbGFu ZSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjb25zdHJ1Y3QgcHJpbWFyeSBwbGFuZVxu Iik7CisJCXJldCA9IFBUUl9FUlIocHJpbWFyeV9wbGFuZSk7CisJCWdvdG8gZmFpbDsKKwl9CisK KwljdXJzb3JfcGxhbmUgPSB2YzRfcGxhbmVfaW5pdChkcm0sIERSTV9QTEFORV9UWVBFX0NVUlNP Uik7CisJaWYgKCFjdXJzb3JfcGxhbmUpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY29u c3RydWN0IGN1cnNvciBwbGFuZVxuIik7CisJCXJldCA9IFBUUl9FUlIoY3Vyc29yX3BsYW5lKTsK KwkJZ290byBmYWlsOworCX0KKworCXZjNF9jcnRjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9m KCp2YzRfY3J0YyksIEdGUF9LRVJORUwpOworCWlmICghdmM0X2NydGMpCisJCXJldHVybiAtRU5P TUVNOworCWNydGMgPSAmdmM0X2NydGMtPmJhc2U7CisKKwl2YzRfY3J0Yy0+cmVncyA9IHZjNF9p b3JlbWFwX3JlZ3MocGRldiwgMCk7CisJaWYgKElTX0VSUih2YzRfY3J0Yy0+cmVncykpCisJCXJl dHVybiBQVFJfRVJSKHZjNF9jcnRjLT5yZWdzKTsKKworCWRybV9jcnRjX2luaXRfd2l0aF9wbGFu ZXMoZHJtLCBjcnRjLCBwcmltYXJ5X3BsYW5lLCBjdXJzb3JfcGxhbmUsCisJCQkJICAmdmM0X2Ny dGNfZnVuY3MpOworCWRybV9jcnRjX2hlbHBlcl9hZGQoY3J0YywgJnZjNF9jcnRjX2hlbHBlcl9m dW5jcyk7CisJcHJpbWFyeV9wbGFuZS0+Y3J0YyA9IGNydGM7CisJY3Vyc29yX3BsYW5lLT5jcnRj ID0gY3J0YzsKKwl2YzQtPmNydGNbZHJtX2NydGNfaW5kZXgoY3J0YyldID0gdmM0X2NydGM7CisK KwkvKiBVbnRpbCB3ZSBoYXZlIGZ1bGwgc2Nhbm91dCBzZXR1cCB0byByb3V0ZSB0aGluZ3MgdGhy b3VnaCB0bworCSAqIGVuY29kZXJzLCBsaW5lIHRoaW5ncyB1cCBsaWtlIHRoZSBmaXJtd2FyZSBk aWQuCisJICovCisJc3dpdGNoIChkcm1fY3J0Y19pbmRleChjcnRjKSkgeworCWNhc2UgMDoKKwkJ dmM0X2NydGMtPmNoYW5uZWwgPSAwOworCQlicmVhazsKKwljYXNlIDE6CisJCXZjNF9jcnRjLT5j aGFubmVsID0gMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwljYXNlIDI6CisJCXZjNF9jcnRjLT5j aGFubmVsID0gMTsKKwkJYnJlYWs7CisJfQorCisJQ1JUQ19XUklURShQVl9JTlRFTiwgMCk7CisJ Q1JUQ19XUklURShQVl9JTlRTVEFULCBQVl9JTlRfVkZQX1NUQVJUKTsKKwlyZXQgPSBkZXZtX3Jl cXVlc3RfaXJxKGRldiwgcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKSwKKwkJCSAgICAgICB2YzRf Y3J0Y19pcnFfaGFuZGxlciwgMCwgInZjNCBjcnRjIiwgdmM0X2NydGMpOworCisJcGxhdGZvcm1f c2V0X2RydmRhdGEocGRldiwgdmM0X2NydGMpOworCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdmM0X2NydGNfdW5iaW5kKHN0cnVjdCBkZXZpY2Ug KmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkJICAgIHZvaWQgKmRhdGEpCit7CisJc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0 cnVjdCB2YzRfY3J0YyAqdmM0X2NydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXZjNF9j cnRjX2Rlc3Ryb3koJnZjNF9jcnRjLT5iYXNlKTsKKworCUNSVENfV1JJVEUoUFZfSU5URU4sIDAp OworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgY29tcG9uZW50X29wcyB2YzRfY3J0Y19vcHMgPSB7CisJLmJpbmQgICA9IHZjNF9j cnRjX2JpbmQsCisJLnVuYmluZCA9IHZjNF9jcnRjX3VuYmluZCwKK307CisKK3N0YXRpYyBpbnQg dmM0X2NydGNfZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0 dXJuIGNvbXBvbmVudF9hZGQoJnBkZXYtPmRldiwgJnZjNF9jcnRjX29wcyk7Cit9CisKK3N0YXRp YyBpbnQgdmM0X2NydGNfZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQor eworCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJnZjNF9jcnRjX29wcyk7CisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHZjNF9jcnRjX2R0X21hdGNo W10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJicmNtLHZjNC1waXhlbHZhbHZlIiB9LAorCXt9Cit9 OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2YzRfY3J0Y19kcml2ZXIgPSB7CisJ LnByb2JlID0gdmM0X2NydGNfZGV2X3Byb2JlLAorCS5yZW1vdmUgPSB2YzRfY3J0Y19kZXZfcmVt b3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInZjNF9jcnRjIiwKKwkJLm9mX21hdGNoX3Rh YmxlID0gdmM0X2NydGNfZHRfbWF0Y2gsCisJfSwKK307CisKK3ZvaWQgX19pbml0IHZjNF9jcnRj X3JlZ2lzdGVyKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ2YzRfY3J0Y19k cml2ZXIpOworfQorCit2b2lkIF9fZXhpdCB2YzRfY3J0Y191bnJlZ2lzdGVyKHZvaWQpCit7CisJ cGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnZjNF9jcnRjX2RyaXZlcik7Cit9CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0v dmM0L3ZjNF9kZWJ1Z2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU1 NzAzOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2RlYnVnZnMu YwpAQCAtMCwwICsxLDM4IEBACisvKgorICogIENvcHlyaWdodCDCqSAyMDE0IEJyb2FkY29tCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4K KyNpbmNsdWRlIDxsaW51eC9jaXJjX2J1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Cisj aW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisKKyNpbmNs dWRlICJ2YzRfZHJ2LmgiCisjaW5jbHVkZSAidmM0X3JlZ3MuaCIKKworc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1faW5mb19saXN0IHZjNF9kZWJ1Z2ZzX2xpc3RbXSA9IHsKKwl7ImhkbWlfcmVncyIs IHZjNF9oZG1pX2RlYnVnZnNfcmVncywgMH0sCisJeyJodnNfcmVncyIsIHZjNF9odnNfZGVidWdm c19yZWdzLCAwfSwKKwl7ImNydGMwX3JlZ3MiLCB2YzRfY3J0Y19kZWJ1Z2ZzX3JlZ3MsIDAsICh2 b2lkICopKHVpbnRwdHJfdCkwfSwKKwl7ImNydGMxX3JlZ3MiLCB2YzRfY3J0Y19kZWJ1Z2ZzX3Jl Z3MsIDAsICh2b2lkICopKHVpbnRwdHJfdCkxfSwKKwl7ImNydGMyX3JlZ3MiLCB2YzRfY3J0Y19k ZWJ1Z2ZzX3JlZ3MsIDAsICh2b2lkICopKHVpbnRwdHJfdCkyfSwKK307CisjZGVmaW5lIFZDNF9E RUJVR0ZTX0VOVFJJRVMgQVJSQVlfU0laRSh2YzRfZGVidWdmc19saXN0KQorCitpbnQKK3ZjNF9k ZWJ1Z2ZzX2luaXQoc3RydWN0IGRybV9taW5vciAqbWlub3IpCit7CisJcmV0dXJuIGRybV9kZWJ1 Z2ZzX2NyZWF0ZV9maWxlcyh2YzRfZGVidWdmc19saXN0LCBWQzRfREVCVUdGU19FTlRSSUVTLAor CQkJCQltaW5vci0+ZGVidWdmc19yb290LCBtaW5vcik7Cit9CisKK3ZvaWQKK3ZjNF9kZWJ1Z2Zz X2NsZWFudXAoc3RydWN0IGRybV9taW5vciAqbWlub3IpCit7CisJZHJtX2RlYnVnZnNfcmVtb3Zl X2ZpbGVzKHZjNF9kZWJ1Z2ZzX2xpc3QsIFZDNF9ERUJVR0ZTX0VOVFJJRVMsIG1pbm9yKTsKK30K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5jIGIvZHJpdmVycy9ncHUv ZHJtL3ZjNC92YzRfZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVj ZjRiOGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuYwpA QCAtMCwwICsxLDI0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEJyb2FkY29t CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVkIEhhdAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp b24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisg Ki8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5o PgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5j bHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNp bmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgInZjNF9kcnYuaCIK KyNpbmNsdWRlICJ2YzRfcmVncy5oIgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJ2YzQiCisjZGVm aW5lIERSSVZFUl9ERVNDICJCcm9hZGNvbSBWQzQgZ3JhcGhpY3MiCisjZGVmaW5lIERSSVZFUl9E QVRFICIyMDE0MDYxNiIKKyNkZWZpbmUgRFJJVkVSX01BSk9SIDAKKyNkZWZpbmUgRFJJVkVSX01J Tk9SIDAKKyNkZWZpbmUgRFJJVkVSX1BBVENITEVWRUwgMAorCisvKiBIZWxwZXIgZnVuY3Rpb24g Zm9yIG1hcHBpbmcgdGhlIHJlZ3Mgb24gYSBwbGF0Zm9ybSBkZXZpY2UuCisgKgorICogV2UgYXNz dW1lIG9ubHkgb25lIHJlZ2lzdGVyIHJhbmdlIHBlciBkZXZpY2UsIHNvIHdlIHVzZSBpbmRleCAw LgorICovCit2b2lkIF9faW9tZW0gKnZjNF9pb3JlbWFwX3JlZ3Moc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqZGV2LCBpbnQgaW5kZXgpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJdm9pZCBf X2lvbWVtICptYXA7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09V UkNFX01FTSwgaW5kZXgpOworCW1hcCA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmZGV2LT5kZXYs IHJlcyk7CisJaWYgKElTX0VSUihtYXApKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIG1hcCBy ZWdpc3RlcnM6ICVsZFxuIiwgUFRSX0VSUihtYXApKTsKKwkJcmV0dXJuIG1hcDsKKwl9CisKKwly ZXR1cm4gbWFwOworfQorCitzdGF0aWMgaW50IHZjNF9kcm1fbG9hZChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCB2YzRfZGV2ICp2YzQ7CisJ aW50IHJldDsKKworCXZjNCA9IGRldm1fa3phbGxvYyhkZXYtPmRldiwgc2l6ZW9mKCp2YzQpLCBH RlBfS0VSTkVMKTsKKwlpZiAoIXZjNCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXZfc2V0X2Ry dmRhdGEoZGV2LT5kZXYsIGRldik7CisJdmM0LT5kZXYgPSBkZXY7CisJZGV2LT5kZXZfcHJpdmF0 ZSA9IHZjNDsKKworCWRybV9tb2RlX2NvbmZpZ19pbml0KGRldik7CisKKwlyZXQgPSBjb21wb25l bnRfYmluZF9hbGwoZGV2LT5kZXYsIGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CXZjNF9rbXNfbG9hZChkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmM0X2Ry bV91bmxvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1fbW9kZV9jb25maWdfY2xl YW51cChkZXYpOworCisJY29tcG9uZW50X3VuYmluZF9hbGwoZGV2LT5kZXYsIGRldik7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdmM0X2RybV9wcmVjbG9zZShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCit7CisJc3RydWN0IGRybV9jcnRjICpj cnRjOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRj X2xpc3QsIGhlYWQpCisJCXZjNF9jYW5jZWxfcGFnZV9mbGlwKGNydGMsIGZpbGUpOworfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2YzRfZHJtX2ZvcHMgPSB7CisJLm93 bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBkcm1fb3BlbiwKKwkucmVsZWFzZSA9IGRybV9y ZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKKwkubW1hcCA9IGRybV9nZW1f Y21hX21tYXAsCisJLnBvbGwgPSBkcm1fcG9sbCwKKwkucmVhZCA9IGRybV9yZWFkLAorI2lmZGVm IENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsID0gZHJtX2NvbXBhdF9pb2N0bCwKKyNlbmRp ZgorCS5sbHNlZWsgPSBub29wX2xsc2VlaywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X2lvY3RsX2Rlc2MgdmM0X2RybV9pb2N0bHNbXSA9IHsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJt X2RyaXZlciB2YzRfZHJtX2RyaXZlciA9IHsKKwkuZHJpdmVyX2ZlYXR1cmVzID0gKERSSVZFUl9N T0RFU0VUIHwKKwkJCSAgICBEUklWRVJfQVRPTUlDIHwKKwkJCSAgICBEUklWRVJfR0VNIHwKKwkJ CSAgICBEUklWRVJfUFJJTUUpLAorCS5sb2FkID0gdmM0X2RybV9sb2FkLAorCS51bmxvYWQgPSB2 YzRfZHJtX3VubG9hZCwKKwkuc2V0X2J1c2lkID0gZHJtX3BsYXRmb3JtX3NldF9idXNpZCwKKwku cHJlY2xvc2UgPSB2YzRfZHJtX3ByZWNsb3NlLAorCisJLmVuYWJsZV92YmxhbmsgPSB2YzRfZW5h YmxlX3ZibGFuaywKKwkuZGlzYWJsZV92YmxhbmsgPSB2YzRfZGlzYWJsZV92YmxhbmssCisJLmdl dF92YmxhbmtfY291bnRlciA9IGRybV92YmxhbmtfY291bnQsCisKKyNpZiBkZWZpbmVkKENPTkZJ R19ERUJVR19GUykKKwkuZGVidWdmc19pbml0ID0gdmM0X2RlYnVnZnNfaW5pdCwKKwkuZGVidWdm c19jbGVhbnVwID0gdmM0X2RlYnVnZnNfY2xlYW51cCwKKyNlbmRpZgorCisJLmdlbV9mcmVlX29i amVjdCA9IGRybV9nZW1fY21hX2ZyZWVfb2JqZWN0LAorCS5nZW1fdm1fb3BzID0gJmRybV9nZW1f Y21hX3ZtX29wcywKKworCS5wcmltZV9oYW5kbGVfdG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRs ZV90b19mZCwKKwkucHJpbWVfZmRfdG9faGFuZGxlID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5k bGUsCisJLmdlbV9wcmltZV9pbXBvcnQgPSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwKKwkuZ2VtX3By aW1lX2V4cG9ydCA9IGRybV9nZW1fcHJpbWVfZXhwb3J0LAorCS5nZW1fcHJpbWVfZ2V0X3NnX3Rh YmxlCT0gZHJtX2dlbV9jbWFfcHJpbWVfZ2V0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfaW1wb3J0 X3NnX3RhYmxlID0gZHJtX2dlbV9jbWFfcHJpbWVfaW1wb3J0X3NnX3RhYmxlLAorCS5nZW1fcHJp bWVfdm1hcAkJPSBkcm1fZ2VtX2NtYV9wcmltZV92bWFwLAorCS5nZW1fcHJpbWVfdnVubWFwCT0g ZHJtX2dlbV9jbWFfcHJpbWVfdnVubWFwLAorCS5nZW1fcHJpbWVfbW1hcAkJPSBkcm1fZ2VtX2Nt YV9wcmltZV9tbWFwLAorCisJLmR1bWJfY3JlYXRlID0gdmM0X2R1bWJfY3JlYXRlLAorCS5kdW1i X21hcF9vZmZzZXQgPSBkcm1fZ2VtX2NtYV9kdW1iX21hcF9vZmZzZXQsCisJLmR1bWJfZGVzdHJv eSA9IGRybV9nZW1fZHVtYl9kZXN0cm95LAorCisJLmlvY3RscyA9IHZjNF9kcm1faW9jdGxzLAor CS5udW1faW9jdGxzID0gQVJSQVlfU0laRSh2YzRfZHJtX2lvY3RscyksCisJLmZvcHMgPSAmdmM0 X2RybV9mb3BzLAorCisJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkuZGVzYyA9IERSSVZFUl9ERVND LAorCS5kYXRlID0gRFJJVkVSX0RBVEUsCisJLm1ham9yID0gRFJJVkVSX01BSk9SLAorCS5taW5v ciA9IERSSVZFUl9NSU5PUiwKKwkucGF0Y2hsZXZlbCA9IERSSVZFUl9QQVRDSExFVkVMLAorfTsK Kworc3RhdGljIGludCB2YzRfZHJtX2JpbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVy biBkcm1fcGxhdGZvcm1faW5pdCgmdmM0X2RybV9kcml2ZXIsIHRvX3BsYXRmb3JtX2RldmljZShk ZXYpKTsKK30KKworc3RhdGljIHZvaWQgdmM0X2RybV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2 KQoreworCWRybV9wdXRfZGV2KHBsYXRmb3JtX2dldF9kcnZkYXRhKHRvX3BsYXRmb3JtX2Rldmlj ZShkZXYpKSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X21hc3Rlcl9vcHMg dmM0X2RybV9vcHMgPSB7CisJLmJpbmQgPSB2YzRfZHJtX2JpbmQsCisJLnVuYmluZCA9IHZjNF9k cm1fdW5iaW5kLAorfTsKKworc3RhdGljIGludCBjb21wYXJlX29mKHN0cnVjdCBkZXZpY2UgKmRl diwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gZGV2LT5vZl9ub2RlID09IGRhdGE7Cit9CisKK3N0 YXRpYyBpbnQgYWRkX2NvbXBvbmVudHMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgY29tcG9u ZW50X21hdGNoICoqbWF0Y2hwdHIsCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0 IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKKwl1bnNpZ25lZCBpOworCisJZm9yIChp ID0gMDsgOyBpKyspIHsKKwkJc3RydWN0IGRldmljZV9ub2RlICpub2RlOworCisJCW5vZGUgPSBv Zl9wYXJzZV9waGFuZGxlKG5wLCBuYW1lLCBpKTsKKwkJaWYgKCFub2RlKQorCQkJYnJlYWs7CisK KwkJY29tcG9uZW50X21hdGNoX2FkZChkZXYsIG1hdGNocHRyLCBjb21wYXJlX29mLCBub2RlKTsK Kwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2YzRfcGxhdGZvcm1fZHJtX3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGNvbXBvbmVudF9tYXRj aCAqbWF0Y2ggPSBOVUxMOworCisJYWRkX2NvbXBvbmVudHMoJnBkZXYtPmRldiwgJm1hdGNoLCAi Y3J0Y3MiKTsKKwlhZGRfY29tcG9uZW50cygmcGRldi0+ZGV2LCAmbWF0Y2gsICJlbmNvZGVycyIp OworCWFkZF9jb21wb25lbnRzKCZwZGV2LT5kZXYsICZtYXRjaCwgImh2c3MiKTsKKworCXBkZXYt PmRldi5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisJcmV0dXJuIGNvbXBv bmVudF9tYXN0ZXJfYWRkX3dpdGhfbWF0Y2goJnBkZXYtPmRldiwgJnZjNF9kcm1fb3BzLCBtYXRj aCk7Cit9CisKK3N0YXRpYyBpbnQgdmM0X3BsYXRmb3JtX2RybV9yZW1vdmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKK3sKKwlkcm1fcHV0X2RldihwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShw ZGV2KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf aWQgdmM0X29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJicmNtLHZjNCIsIH0sCisJ e30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdmM0X29mX21hdGNoKTsKKworc3RhdGlj IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdmM0X3BsYXRmb3JtX2RyaXZlciA9IHsKKwkucHJvYmUJ CT0gdmM0X3BsYXRmb3JtX2RybV9wcm9iZSwKKwkucmVtb3ZlCQk9IHZjNF9wbGF0Zm9ybV9kcm1f cmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJ2YzQtZHJtIiwKKwkJLm93bmVyCT0g VEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IHZjNF9vZl9tYXRjaCwKKwl9LAorfTsK Kworc3RhdGljIGludCBfX2luaXQgdmM0X2RybV9yZWdpc3Rlcih2b2lkKQoreworCXZjNF9oZG1p X3JlZ2lzdGVyKCk7CisJdmM0X2NydGNfcmVnaXN0ZXIoKTsKKwl2YzRfaHZzX3JlZ2lzdGVyKCk7 CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdmM0X3BsYXRmb3JtX2RyaXZlcik7 Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB2YzRfZHJtX3VucmVnaXN0ZXIodm9pZCkKK3sKKwlw bGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdmM0X3BsYXRmb3JtX2RyaXZlcik7CisJdmM0X2h2 c191bnJlZ2lzdGVyKCk7CisJdmM0X2NydGNfdW5yZWdpc3RlcigpOworCXZjNF9oZG1pX3VucmVn aXN0ZXIoKTsKK30KKworbW9kdWxlX2luaXQodmM0X2RybV9yZWdpc3Rlcik7Cittb2R1bGVfZXhp dCh2YzRfZHJtX3VucmVnaXN0ZXIpOworCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnZjNC1kcm0i KTsKK01PRFVMRV9ERVNDUklQVElPTigiQnJvYWRjb20gVkM0IERSTSBEcml2ZXIiKTsKK01PRFVM RV9BVVRIT1IoIkVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+Iik7CitNT0RVTEVfTElDRU5T RSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaCBi L2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjFiMGEwYjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0 L3ZjNF9kcnYuaApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBC cm9hZGNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgImRybVAuaCIK KyNpbmNsdWRlICJkcm1fZ2VtX2NtYV9oZWxwZXIuaCIKKworc3RydWN0IHZjNF9kZXYgeworCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXY7CisKKwlzdHJ1Y3QgdmM0X2hkbWkgKmhkbWk7CisJc3RydWN0 IHZjNF9odnMgKmh2czsKKwlzdHJ1Y3QgdmM0X2NydGMgKmNydGNbM107Cit9OworCitzdGF0aWMg aW5saW5lIHN0cnVjdCB2YzRfZGV2ICoKK3RvX3ZjNF9kZXYoc3RydWN0IGRybV9kZXZpY2UgKmRl dikKK3sKKwlyZXR1cm4gKHN0cnVjdCB2YzRfZGV2ICopZGV2LT5kZXZfcHJpdmF0ZTsKK30KKwor c3RydWN0IHZjNF9ibyB7CisJc3RydWN0IGRybV9nZW1fY21hX29iamVjdCBiYXNlOworfTsKKwor c3RhdGljIGlubGluZSBzdHJ1Y3QgdmM0X2JvICoKK3RvX3ZjNF9ibyhzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKmJvKQoreworCXJldHVybiAoc3RydWN0IHZjNF9ibyAqKWJvOworfQorCitzdHJ1Y3Qg dmM0X2h2cyB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwl2b2lkIF9faW9tZW0g KnJlZ3M7CisJdm9pZCBfX2lvbWVtICpkbGlzdDsKK307CisKK3N0cnVjdCB2YzRfY3J0YyB7CisJ c3RydWN0IGRybV9jcnRjIGJhc2U7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCisJLyogV2hpY2gg SFZTIGNoYW5uZWwgd2UncmUgdXNpbmcgZm9yIG91ciBDUlRDLiAqLworCWludCBjaGFubmVsOwor CisJLyogUG9pbnRlciB0byB0aGUgYWN0dWFsIGhhcmR3YXJlIGRpc3BsYXkgbGlzdCBtZW1vcnkg Zm9yIHRoZQorCSAqIGNydGMuCisJICovCisJdTMyIF9faW9tZW0gKmRsaXN0OworCisJdTMyIGRs aXN0X3NpemU7IC8qIGluIGR3b3JkcyAqLworCisJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19l dmVudCAqZXZlbnQ7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2YzRfY3J0YyAqCit0b192 YzRfY3J0YyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJcmV0dXJuIChzdHJ1Y3QgdmM0X2Ny dGMgKiljcnRjOworfQorCitzdHJ1Y3QgdmM0X3BsYW5lIHsKKwlzdHJ1Y3QgZHJtX3BsYW5lIGJh c2U7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2YzRfcGxhbmUgKgordG9fdmM0X3BsYW5l KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXJldHVybiAoc3RydWN0IHZjNF9wbGFuZSAq KXBsYW5lOworfQorCisjZGVmaW5lIEhWU19SRUFEKG9mZnNldCkgcmVhZGwodmM0LT5odnMtPnJl Z3MgKyBvZmZzZXQpCisjZGVmaW5lIEhWU19XUklURShvZmZzZXQsIHZhbCkgd3JpdGVsKHZhbCwg dmM0LT5odnMtPnJlZ3MgKyBvZmZzZXQpCisKKy8qIHZjNF9iby5jICovCit2b2lkIHZjNF9mcmVl X29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopOworc3RydWN0IHZjNF9ibyAq dmM0X2JvX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSk7CitpbnQg dmM0X2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkgICAgc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKKwkJICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJn cyk7CitzdHJ1Y3QgZG1hX2J1ZiAqdmM0X3ByaW1lX2V4cG9ydChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAorCQkJCSBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50IGZsYWdzKTsKKworLyog dmM0X2NydGMuYyAqLwordm9pZCB2YzRfY3J0Y19yZWdpc3Rlcih2b2lkKTsKK3ZvaWQgdmM0X2Ny dGNfdW5yZWdpc3Rlcih2b2lkKTsKK2ludCB2YzRfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCBpbnQgY3J0Y19pZCk7Cit2b2lkIHZjNF9kaXNhYmxlX3ZibGFuayhzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Y19pZCk7Cit2b2lkIHZjNF9jYW5jZWxfcGFnZV9mbGlw KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9maWxlICpmaWxlKTsKK2ludCB2YzRf Y3J0Y19kZWJ1Z2ZzX3JlZ3Moc3RydWN0IHNlcV9maWxlICptLCB2b2lkICphcmcpOworCisvKiB2 YzRfZGVidWdmcy5jICovCitpbnQgdmM0X2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICpt aW5vcik7Cit2b2lkIHZjNF9kZWJ1Z2ZzX2NsZWFudXAoc3RydWN0IGRybV9taW5vciAqbWlub3Ip OworCisvKiB2YzRfZHJ2LmMgKi8KK3ZvaWQgX19pb21lbSAqdmM0X2lvcmVtYXBfcmVncyhzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIGludCBpbmRleCk7CisKKy8qIHZjNF9oZG1pLmMgKi8K K3ZvaWQgdmM0X2hkbWlfcmVnaXN0ZXIodm9pZCk7Cit2b2lkIHZjNF9oZG1pX3VucmVnaXN0ZXIo dm9pZCk7CitzdHJ1Y3QgZHJtX2VuY29kZXIgKnZjNF9oZG1pX2VuY29kZXJfaW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KTsKK3N0cnVjdCBkcm1fY29ubmVjdG9yICp2YzRfaGRtaV9jb25uZWN0 b3JfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgICAgICBzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXIpOworaW50IHZjNF9oZG1pX2RlYnVnZnNfcmVncyhzdHJ1Y3Qgc2VxX2Zp bGUgKm0sIHZvaWQgKnVudXNlZCk7CisKKy8qIHZjNF9odnMuYyAqLwordm9pZCB2YzRfaHZzX3Jl Z2lzdGVyKHZvaWQpOwordm9pZCB2YzRfaHZzX3VucmVnaXN0ZXIodm9pZCk7Cit2b2lkIHZjNF9o dnNfZHVtcF9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2ludCB2YzRfaHZzX2RlYnVn ZnNfcmVncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCk7CisKKy8qIHZjNF9rbXMu YyAqLworaW50IHZjNF9rbXNfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKworLyogdmM0 X3BsYW5lLmMgKi8KK3N0cnVjdCBkcm1fcGxhbmUgKnZjNF9wbGFuZV9pbml0KHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCisJCQkJIGVudW0gZHJtX3BsYW5lX3R5cGUgdHlwZSk7Cit1MzIgdmM0X3Bs YW5lX3dyaXRlX2RsaXN0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLCB1MzIgX19pb21lbSAqZGxp c3QpOwordTMyIHZjNF9wbGFuZV9kbGlzdF9zaXplKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0 YXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2hkbWkuYyBiL2RyaXZl cnMvZ3B1L2RybS92YzQvdmM0X2hkbWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5jMWFjOTZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRf aGRtaS5jCkBAIC0wLDAgKzEsNjUxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBM aW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy MDEzIFJlZCBIYXQKKyAqIEF1dGhvcjogUm9iIENsYXJrIDxyb2JkY2xhcmtAZ21haWwuY29tPgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFC SUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgImRybV9hdG9taWNfaGVs cGVyLmgiCisjaW5jbHVkZSAiZHJtX2NydGNfaGVscGVyLmgiCisjaW5jbHVkZSAiZHJtX2VkaWQu aCIKKyNpbmNsdWRlICJsaW51eC9jbGsuaCIKKyNpbmNsdWRlICJsaW51eC9jb21wb25lbnQuaCIK KyNpbmNsdWRlICJsaW51eC9vZl9ncGlvLmgiCisjaW5jbHVkZSAibGludXgvb2ZfcGxhdGZvcm0u aCIKKyNpbmNsdWRlICJ2YzRfZHJ2LmgiCisjaW5jbHVkZSAidmM0X3JlZ3MuaCIKKworLyogR2Vu ZXJhbCBIRE1JIGhhcmR3YXJlIHN0YXRlLiAqLworc3RydWN0IHZjNF9oZG1pIHsKKwlzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBpMmNfYWRhcHRlciAqZGRjOworCXZvaWQg X19pb21lbSAqaGRtaWNvcmVfcmVnczsKKwl2b2lkIF9faW9tZW0gKmhkX3JlZ3M7CisJaW50IGhw ZF9ncGlvOworCisJLyogUHJvYmVkIHZpZGVvIG1vZGUgYXQgYm9vdCB0aW1lLCB1c2VkIHRvIGZp bHRlciBkaXNwbGF5CisJICogbW9kZXMgdG8gb25seSBhbGxvdyBlcXVpdmFsZW50IG9uZXMgKHNp bmNlIHdlIGNhbid0IHNldCB0aGUKKwkgKiBwaXhlbCBjbG9jayB5ZXQpLgorCSAqLworCXN0cnVj dCBkcm1fZGlzcGxheV9tb2RlIGJvb3RfbW9kZTsKK307CisjZGVmaW5lIEhETUlfUkVBRChvZmZz ZXQpIHJlYWRsKHZjNC0+aGRtaS0+aGRtaWNvcmVfcmVncyArIG9mZnNldCkKKyNkZWZpbmUgSERN SV9XUklURShvZmZzZXQsIHZhbCkgd3JpdGVsKHZhbCwgdmM0LT5oZG1pLT5oZG1pY29yZV9yZWdz ICsgb2Zmc2V0KQorI2RlZmluZSBIRF9SRUFEKG9mZnNldCkgcmVhZGwodmM0LT5oZG1pLT5oZF9y ZWdzICsgb2Zmc2V0KQorI2RlZmluZSBIRF9XUklURShvZmZzZXQsIHZhbCkgd3JpdGVsKHZhbCwg dmM0LT5oZG1pLT5oZF9yZWdzICsgb2Zmc2V0KQorCisvKiBWQzQgSERNSSBlbmNvZGVyIEtNUyBz dHJ1Y3QgKi8KK3N0cnVjdCB2YzRfaGRtaV9lbmNvZGVyIHsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIg YmFzZTsKKwlib29sIGhkbWlfbW9uaXRvcjsKK307CitzdGF0aWMgaW5saW5lIHN0cnVjdCB2YzRf aGRtaV9lbmNvZGVyICoKK3RvX3ZjNF9oZG1pX2VuY29kZXIoc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyKQoreworCXJldHVybiBjb250YWluZXJfb2YoZW5jb2Rlciwgc3RydWN0IHZjNF9oZG1p X2VuY29kZXIsIGJhc2UpOworfQorCisvKiBWQzQgSERNSSBjb25uZWN0b3IgS01TIHN0cnVjdCAq Lworc3RydWN0IHZjNF9oZG1pX2Nvbm5lY3RvciB7CisJc3RydWN0IGRybV9jb25uZWN0b3IgYmFz ZTsKKworCS8qIFNpbmNlIHRoZSBjb25uZWN0b3IgaXMgYXR0YWNoZWQgdG8ganVzdCB0aGUgb25l IGVuY29kZXIsCisJICogdGhpcyBpcyB0aGUgcmVmZXJlbmNlIHRvIGl0IHNvIHdlIGNhbiBkbyB0 aGUgYmVzdF9lbmNvZGVyKCkKKwkgKiBob29rLgorCSAqLworCXN0cnVjdCBkcm1fZW5jb2RlciAq ZW5jb2RlcjsKK307CitzdGF0aWMgaW5saW5lIHN0cnVjdCB2YzRfaGRtaV9jb25uZWN0b3IgKgor dG9fdmM0X2hkbWlfY29ubmVjdG9yKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7 CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjb25uZWN0b3IsIHN0cnVjdCB2YzRfaGRtaV9jb25uZWN0 b3IsIGJhc2UpOworfQorCisjZGVmaW5lIEhETUlfUkVHKHJlZykgeyByZWcsICNyZWcgfQorc3Rh dGljIGNvbnN0IHN0cnVjdCB7CisJdTMyIHJlZzsKKwljb25zdCBjaGFyICpuYW1lOworfSBoZG1p X3JlZ3NbXSA9IHsKKwlIRE1JX1JFRyhWQzRfSERNSV9DT1JFX1JFViksCisJSERNSV9SRUcoVkM0 X0hETUlfU1dfUkVTRVRfQ09OVFJPTCksCisJSERNSV9SRUcoVkM0X0hETUlfSE9UUExVR19JTlQp LAorCUhETUlfUkVHKFZDNF9IRE1JX0hPVFBMVUcpLAorCUhETUlfUkVHKFZDNF9IRE1JX0hPUlpB KSwKKwlIRE1JX1JFRyhWQzRfSERNSV9IT1JaQiksCisJSERNSV9SRUcoVkM0X0hETUlfRklGT19D VEwpLAorCUhETUlfUkVHKFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MKSwKKwlIRE1JX1JFRyhW QzRfSERNSV9WRVJUQTApLAorCUhETUlfUkVHKFZDNF9IRE1JX1ZFUlRBMSksCisJSERNSV9SRUco VkM0X0hETUlfVkVSVEIwKSwKKwlIRE1JX1JFRyhWQzRfSERNSV9WRVJUQjEpLAorCUhETUlfUkVH KFZDNF9IRE1JX1RYX1BIWV9SRVNFVF9DVEwpLAorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgewor CXUzMiByZWc7CisJY29uc3QgY2hhciAqbmFtZTsKK30gaGRfcmVnc1tdID0geworCUhETUlfUkVH KFZDNF9IRF9NX0NUTCksCisJSERNSV9SRUcoVkM0X0hEX01BSV9DVEwpLAorCUhETUlfUkVHKFZD NF9IRF9WSURfQ1RMKSwKKwlIRE1JX1JFRyhWQzRfSERfQ1NDX0NUTCksCisJSERNSV9SRUcoVkM0 X0hEX0ZSQU1FX0NPVU5UKSwKK307CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKK2ludCB2YzRf aGRtaV9kZWJ1Z2ZzX3JlZ3Moc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCit7CisJ c3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+ cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlz dHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOworCWludCBpOworCisJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUoaGRtaV9yZWdzKTsgaSsrKSB7CisJCXNlcV9wcmludGYobSwg IiVzICgweCUwNHgpOiAweCUwOHhcbiIsCisJCQkgICBoZG1pX3JlZ3NbaV0ubmFtZSwgaGRtaV9y ZWdzW2ldLnJlZywKKwkJCSAgIEhETUlfUkVBRChoZG1pX3JlZ3NbaV0ucmVnKSk7CisJfQorCisJ Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaGRfcmVncyk7IGkrKykgeworCQlzZXFfcHJpbnRm KG0sICIlcyAoMHglMDR4KTogMHglMDh4XG4iLAorCQkJICAgaGRfcmVnc1tpXS5uYW1lLCBoZF9y ZWdzW2ldLnJlZywKKwkJCSAgIEhEX1JFQUQoaGRfcmVnc1tpXS5yZWcpKTsKKwl9CisKKwlyZXR1 cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi8KKworc3RhdGljIHZvaWQgdmM0 X2hkbWlfZHVtcF9yZWdzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHZjNF9k ZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBB UlJBWV9TSVpFKGhkbWlfcmVncyk7IGkrKykgeworCQlEUk1fSU5GTygiMHglMDR4ICglcyk6IDB4 JTA4eFxuIiwKKwkJCSBoZG1pX3JlZ3NbaV0ucmVnLCBoZG1pX3JlZ3NbaV0ubmFtZSwKKwkJCSBI RE1JX1JFQUQoaGRtaV9yZWdzW2ldLnJlZykpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShoZF9yZWdzKTsgaSsrKSB7CisJCURSTV9JTkZPKCIweCUwNHggKCVzKTogMHglMDh4XG4i LAorCQkJIGhkX3JlZ3NbaV0ucmVnLCBoZF9yZWdzW2ldLm5hbWUsCisJCQkgSERfUkVBRChoZF9y ZWdzW2ldLnJlZykpOworCX0KK30KKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMK K3ZjNF9oZG1pX2Nvbm5lY3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciwgYm9vbCBmb3JjZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5k ZXY7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKKworCWlmICh2YzQt PmhkbWktPmhwZF9ncGlvKSB7CisJCWlmIChncGlvX2dldF92YWx1ZSh2YzQtPmhkbWktPmhwZF9n cGlvKSkKKwkJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwkJZWxzZQorCQkJ cmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCX0KKworCWlmIChIRE1JX1JF QUQoVkM0X0hETUlfSE9UUExVRykgJiBWQzRfSERNSV9IT1RQTFVHX0NPTk5FQ1RFRCkKKwkJcmV0 dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCWVsc2UKKwkJcmV0dXJuIGNvbm5lY3Rv cl9zdGF0dXNfZGlzY29ubmVjdGVkOworfQorCitzdGF0aWMgdm9pZCB2YzRfaGRtaV9jb25uZWN0 b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCWRybV9jb25u ZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0b3IpOworCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25u ZWN0b3IpOworfQorCitzdGF0aWMgaW50IHZjNF9oZG1pX2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgdmM0X2hkbWlfY29ubmVj dG9yICp2YzRfY29ubmVjdG9yID0KKwkJdG9fdmM0X2hkbWlfY29ubmVjdG9yKGNvbm5lY3Rvcik7 CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gdmM0X2Nvbm5lY3Rvci0+ZW5jb2RlcjsK KwlzdHJ1Y3QgdmM0X2hkbWlfZW5jb2RlciAqdmM0X2VuY29kZXIgPSB0b192YzRfaGRtaV9lbmNv ZGVyKGVuY29kZXIpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsK KwlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOworCWludCByZXQgPSAwOwor CXN0cnVjdCBlZGlkICplZGlkOworCisJZWRpZCA9IGRybV9nZXRfZWRpZChjb25uZWN0b3IsIHZj NC0+aGRtaS0+ZGRjKTsKKwlpZiAoIWVkaWQpCisJCXJldHVybiAtRU5PREVWOworCisJdmM0X2Vu Y29kZXItPmhkbWlfbW9uaXRvciA9IGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKGVkaWQpOworCWRy bV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsIGVkaWQpOwor CXJldCA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOworCisJcmV0dXJuIHJl dDsKK30KKworLyogU2luY2Ugd2UgY2FuJ3Qgc2V0IHRoZSBwaXhlbCBjbG9jayB5ZXQsIGZpbHRl ciBvdXQgYWxsIHRoZSBFRElECisgKiBtb2RlcyB0aGF0IGRvbid0IG1hdGNoIHdoYXQgd2FzIHNl dCB1cCBieSB0aGUgZmlybXdhcmUuCisgKi8KK2ludCB2YzRfaGRtaV9tb2RlX3ZhbGlkKHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJc3Ry dWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqYm9vdF9tb2RlID0gJnZjNC0+aGRtaS0+Ym9vdF9tb2RlOworCisJaWYgKG1vZGUtPmhk aXNwbGF5ICE9IGJvb3RfbW9kZS0+aGRpc3BsYXkgfHwKKwkgICAgbW9kZS0+aHN5bmNfc3RhcnQg IT0gYm9vdF9tb2RlLT5oc3luY19zdGFydCB8fAorCSAgICBtb2RlLT5oc3luY19lbmQgIT0gYm9v dF9tb2RlLT5oc3luY19lbmQgfHwKKwkgICAgbW9kZS0+aHRvdGFsICE9IGJvb3RfbW9kZS0+aHRv dGFsKSB7CisJCXJldHVybiBNT0RFX0VSUk9SOworCX0KKworCXJldHVybiBNT0RFX09LOworfQor CitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyICoKK3ZjNF9oZG1pX2Nvbm5lY3Rvcl9iZXN0X2Vu Y29kZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgdmM0X2hk bWlfY29ubmVjdG9yICpoZG1pX2Nvbm5lY3RvciA9CisJCXRvX3ZjNF9oZG1pX2Nvbm5lY3Rvcihj b25uZWN0b3IpOworCXJldHVybiBoZG1pX2Nvbm5lY3Rvci0+ZW5jb2RlcjsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIHZjNF9oZG1pX2Nvbm5lY3Rvcl9mdW5j cyA9IHsKKwkuZHBtcyA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAorCS5kZXRl Y3QgPSB2YzRfaGRtaV9jb25uZWN0b3JfZGV0ZWN0LAorCS5maWxsX21vZGVzID0gZHJtX2hlbHBl cl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXN0cm95ID0gdmM0X2hkbWlfY29u bmVjdG9yX2Rlc3Ryb3ksCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jl c2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVj dG9yX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWlj X2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgdmM0X2hkbWlfY29ubmVjdG9yX2hlbHBlcl9m dW5jcyA9IHsKKwkuZ2V0X21vZGVzID0gdmM0X2hkbWlfY29ubmVjdG9yX2dldF9tb2RlcywKKwku bW9kZV92YWxpZCA9IHZjNF9oZG1pX21vZGVfdmFsaWQsCisJLmJlc3RfZW5jb2RlciA9IHZjNF9o ZG1pX2Nvbm5lY3Rvcl9iZXN0X2VuY29kZXIsCit9OworCitzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq dmM0X2hkbWlfY29ubmVjdG9yX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAg ICAgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IgPSBOVUxMOworCXN0cnVjdCB2YzRfaGRtaV9jb25uZWN0b3IgKmhkbWlfY29u bmVjdG9yOworCWludCByZXQgPSAwOworCisJaGRtaV9jb25uZWN0b3IgPSBkZXZtX2t6YWxsb2Mo ZGV2LT5kZXYsIHNpemVvZigqaGRtaV9jb25uZWN0b3IpLAorCQkJCSAgICAgIEdGUF9LRVJORUwp OworCWlmICghaGRtaV9jb25uZWN0b3IpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWls OworCX0KKwljb25uZWN0b3IgPSAmaGRtaV9jb25uZWN0b3ItPmJhc2U7CisKKwloZG1pX2Nvbm5l Y3Rvci0+ZW5jb2RlciA9IGVuY29kZXI7CisKKwlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25u ZWN0b3IsICZ2YzRfaGRtaV9jb25uZWN0b3JfZnVuY3MsCisJCQkgICBEUk1fTU9ERV9DT05ORUNU T1JfSERNSUEpOworCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3IsICZ2YzRfaGRt aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKworCWNvbm5lY3Rvci0+cG9sbGVkID0gKERSTV9D T05ORUNUT1JfUE9MTF9DT05ORUNUIHwKKwkJCSAgICAgRFJNX0NPTk5FQ1RPUl9QT0xMX0RJU0NP Tk5FQ1QpOworCisJY29ubmVjdG9yLT5pbnRlcmxhY2VfYWxsb3dlZCA9IDA7CisJY29ubmVjdG9y LT5kb3VibGVzY2FuX2FsbG93ZWQgPSAwOworCisJZHJtX2Nvbm5lY3Rvcl9yZWdpc3Rlcihjb25u ZWN0b3IpOworCisJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKGNvbm5lY3Rvciwg ZW5jb2Rlcik7CisKKwlyZXR1cm4gY29ubmVjdG9yOworCisgZmFpbDoKKwlpZiAoY29ubmVjdG9y KQorCQl2YzRfaGRtaV9jb25uZWN0b3JfZGVzdHJveShjb25uZWN0b3IpOworCisJcmV0dXJuIEVS Ul9QVFIocmV0KTsKK30KKworc3RhdGljIHZvaWQgdmM0X2VuY29kZXJfZGVzdHJveShzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsK K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyB2YzRfaGRtaV9lbmNv ZGVyX2Z1bmNzID0geworCS5kZXN0cm95ID0gdmM0X2VuY29kZXJfZGVzdHJveSwKK307CisKK3N0 YXRpYyBib29sIHZjNF9oZG1pX2VuY29kZXJfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXIsCisJCQkJCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJ CQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlyZXR1cm4gdHJ1 ZTsKK30KKworc3RhdGljIHZvaWQgdmM0X2hkbWlfZW5jb2Rlcl9tb2RlX3NldChzdHJ1Y3QgZHJt X2VuY29kZXIgKmVuY29kZXIsCisJCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKnVu YWRqdXN0ZWRfbW9kZSwKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkK K3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCB2YzRf ZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7CisJYm9vbCBkZWJ1Z19kdW1wX3JlZ3MgPSBmYWxz ZTsKKwlib29sIGhzeW5jX3BvcyA9ICEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05IU1lO Qyk7CisJYm9vbCB2c3luY19wb3MgPSAhKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OVlNZ TkMpOworCXUzMiB2YWN0aXZlID0gKG1vZGUtPnZkaXNwbGF5ID4+CisJCSAgICAgICAoKG1vZGUt PmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpID8gMSA6IDApKTsKKwl1MzIgdmVydGEg PSAoVkM0X1NFVF9GSUVMRChtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydCwKKwkJ CQkgICBWQzRfSERNSV9WRVJUQV9WU1ApIHwKKwkJICAgICBWQzRfU0VUX0ZJRUxEKG1vZGUtPnZz eW5jX3N0YXJ0IC0gbW9kZS0+dmRpc3BsYXksCisJCQkJICAgVkM0X0hETUlfVkVSVEFfVkZQKSB8 CisJCSAgICAgVkM0X1NFVF9GSUVMRCh2YWN0aXZlLCBWQzRfSERNSV9WRVJUQV9WQUwpKTsKKwl1 MzIgdmVydGIgPSAoVkM0X1NFVF9GSUVMRCgwLCBWQzRfSERNSV9WRVJUQl9WU1BPKSB8CisJCSAg ICAgVkM0X1NFVF9GSUVMRChtb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19lbmQsCisJCQkJICAg VkM0X0hETUlfVkVSVEJfVkJQKSk7CisKKwlpZiAoZGVidWdfZHVtcF9yZWdzKSB7CisJCURSTV9J TkZPKCJIRE1JIHJlZ3MgYmVmb3JlOlxuIik7CisJCXZjNF9oZG1pX2R1bXBfcmVncyhkZXYpOwor CX0KKworCUhEX1dSSVRFKFZDNF9IRF9WSURfQ1RMLCAwKTsKKworCS8qIFhYWDogVGhpcyBpcyB3 aGVyZSB3ZSB3b3VsZCBzZXQgdGhlIEhETUkgc3RhdGUgbWFjaGluZQorCSAqIGNsb2NrLCBpZiB3 ZSBoYWQgYW4gaW50ZXJmYWNlIGZvciBpdC4KKwkgKi8KKworCUhETUlfV1JJVEUoVkM0X0hETUlf U0NIRURVTEVSX0NPTlRST0wsCisJCSAgIEhETUlfUkVBRChWQzRfSERNSV9TQ0hFRFVMRVJfQ09O VFJPTCkgfAorCQkgICBWQzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTF9NQU5VQUxfRk9STUFUIHwK KwkJICAgVkM0X0hETUlfU0NIRURVTEVSX0NPTlRST0xfSUdOT1JFX1ZTWU5DX1BSRURJQ1RTKTsK KworCUhETUlfV1JJVEUoVkM0X0hETUlfSE9SWkEsCisJCSAgICh2c3luY19wb3MgPyBWQzRfSERN SV9IT1JaQV9WUE9TIDogMCkgfAorCQkgICAoaHN5bmNfcG9zID8gVkM0X0hETUlfSE9SWkFfSFBP UyA6IDApIHwKKwkJICAgVkM0X1NFVF9GSUVMRChtb2RlLT5oZGlzcGxheSwgVkM0X0hETUlfSE9S WkFfSEFQKSk7CisKKwlIRE1JX1dSSVRFKFZDNF9IRE1JX0hPUlpCLAorCQkgICBWQzRfU0VUX0ZJ RUxEKG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX2VuZCwKKwkJCQkgVkM0X0hETUlfSE9SWkJf SEJQKSB8CisJCSAgIFZDNF9TRVRfRklFTEQobW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNf c3RhcnQsCisJCQkJIFZDNF9IRE1JX0hPUlpCX0hTUCkgfAorCQkgICBWQzRfU0VUX0ZJRUxEKG1v ZGUtPmhzeW5jX3N0YXJ0IC0gbW9kZS0+aGRpc3BsYXksCisJCQkJIFZDNF9IRE1JX0hPUlpCX0hG UCkpOworCisJSERNSV9XUklURShWQzRfSERNSV9WRVJUQTAsIHZlcnRhKTsKKwlIRE1JX1dSSVRF KFZDNF9IRE1JX1ZFUlRBMSwgdmVydGEpOworCisJSERNSV9XUklURShWQzRfSERNSV9WRVJUQjAs IHZlcnRiKTsKKwlIRE1JX1dSSVRFKFZDNF9IRE1JX1ZFUlRCMSwgdmVydGIpOworCisJSERfV1JJ VEUoVkM0X0hEX1ZJRF9DVEwsCisJCSAodnN5bmNfcG9zID8gMCA6IFZDNF9IRF9WSURfQ1RMX1ZT WU5DX0xPVykgfAorCQkgKGhzeW5jX3BvcyA/IDAgOiBWQzRfSERfVklEX0NUTF9IU1lOQ19MT1cp KTsKKworCS8qIFRoZSBSR0Igb3JkZXIgYXBwbGllcyBldmVuIHdoZW4gQ1NDIGlzIGRpc2FibGVk LiAqLworCUhEX1dSSVRFKFZDNF9IRF9DU0NfQ1RMLCBWQzRfU0VUX0ZJRUxEKFZDNF9IRF9DU0Nf Q1RMX09SREVSX0JHUiwKKwkJCQkJICAgICAgIFZDNF9IRF9DU0NfQ1RMX09SREVSKSk7CisKKwlI RE1JX1dSSVRFKFZDNF9IRE1JX0ZJRk9fQ1RMLCBWQzRfSERNSV9GSUZPX0NUTF9NQVNURVJfU0xB VkVfTik7CisKKwlpZiAoZGVidWdfZHVtcF9yZWdzKSB7CisJCURSTV9JTkZPKCJIRE1JIHJlZ3Mg YWZ0ZXI6XG4iKTsKKwkJdmM0X2hkbWlfZHVtcF9yZWdzKGRldik7CisJfQorfQorCitzdGF0aWMg dm9pZCB2YzRfaGRtaV9lbmNvZGVyX2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVy KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CisJc3RydWN0IHZj NF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKKworCUhETUlfV1JJVEUoVkM0X0hETUlfVFhf UEhZX1JFU0VUX0NUTCwgMHhmIDw8IDE2KTsKKwlIRF9XUklURShWQzRfSERfVklEX0NUTCwKKwkJ IEhEX1JFQUQoVkM0X0hEX1ZJRF9DVEwpICYgflZDNF9IRF9WSURfQ1RMX0VOQUJMRSk7Cit9CisK K3N0YXRpYyB2b2lkIHZjNF9oZG1pX2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAq ZW5jb2RlcikKK3sKKwlzdHJ1Y3QgdmM0X2hkbWlfZW5jb2RlciAqdmM0X2VuY29kZXIgPSB0b192 YzRfaGRtaV9lbmNvZGVyKGVuY29kZXIpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNv ZGVyLT5kZXY7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKKworCUhE TUlfV1JJVEUoVkM0X0hETUlfVFhfUEhZX1JFU0VUX0NUTCwgMCk7CisKKwlIRF9XUklURShWQzRf SERfVklEX0NUTCwKKwkJIEhEX1JFQUQoVkM0X0hEX1ZJRF9DVEwpIHwKKwkJIFZDNF9IRF9WSURf Q1RMX0VOQUJMRSB8CisJCSBWQzRfSERfVklEX0NUTF9VTkRFUkZMT1dfRU5BQkxFIHwKKwkJIFZD NF9IRF9WSURfQ1RMX0ZSQU1FX0NPVU5URVJfUkVTRVQpOworCisJaWYgKHZjNF9lbmNvZGVyLT5o ZG1pX21vbml0b3IpIHsKKwkJSERNSV9XUklURShWQzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTCwK KwkJCSAgIEhETUlfUkVBRChWQzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTCkgfAorCQkJICAgVkM0 X0hETUlfU0NIRURVTEVSX0NPTlRST0xfTU9ERV9IRE1JKTsKKworCQl3aGlsZSAoIShIRE1JX1JF QUQoVkM0X0hETUlfU0NIRURVTEVSX0NPTlRST0wpICYKKwkJCSBWQzRfSERNSV9TQ0hFRFVMRVJf Q09OVFJPTF9IRE1JX0FDVElWRSkpIHsKKwkJCWNwdV9yZWxheCgpOworCQl9CisJfSBlbHNlIHsK KwkJSERNSV9XUklURShWQzRfSERNSV9SQU1fUEFDS0VUX0NPTkZJRywKKwkJCSAgIEhETUlfUkVB RChWQzRfSERNSV9SQU1fUEFDS0VUX0NPTkZJRykgJgorCQkJICAgfihWQzRfSERNSV9SQU1fUEFD S0VUX0VOQUJMRSkpOworCQlIRE1JX1dSSVRFKFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MLAor CQkJICAgSERNSV9SRUFEKFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MKSAmCisJCQkgICB+VkM0 X0hETUlfU0NIRURVTEVSX0NPTlRST0xfTU9ERV9IRE1JKTsKKworCQl3aGlsZSAoSERNSV9SRUFE KFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MKSAmCisJCSAgICAgICBWQzRfSERNSV9TQ0hFRFVM RVJfQ09OVFJPTF9IRE1JX0FDVElWRSkgeworCQkJY3B1X3JlbGF4KCk7CisJCX0KKwl9CisKKwlp ZiAodmM0X2VuY29kZXItPmhkbWlfbW9uaXRvcikgeworCQl1MzIgZHJpZnQ7CisKKwkJV0FSTl9P TighKEhETUlfUkVBRChWQzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTCkgJgorCQkJICBWQzRfSERN SV9TQ0hFRFVMRVJfQ09OVFJPTF9IRE1JX0FDVElWRSkpOworCQlIRE1JX1dSSVRFKFZDNF9IRE1J X1NDSEVEVUxFUl9DT05UUk9MLAorCQkJICAgSERNSV9SRUFEKFZDNF9IRE1JX1NDSEVEVUxFUl9D T05UUk9MKSB8CisJCQkgICBWQzRfSERNSV9TQ0hFRFVMRVJfQ09OVFJPTF9WRVJUX0FMV0FZU19L RUVQT1VUKTsKKworCQkvKiBYWFg6IFNldCBIRE1JX1JBTV9QQUNLRVRfQ09ORklHICgxIDw8IDE2 KSBhbmQgc2V0CisJCSAqIHVwIHRoZSBpbmZvZnJhbWUuCisJCSAqLworCisJCWRyaWZ0ID0gSERN SV9SRUFEKFZDNF9IRE1JX0ZJRk9fQ1RMKTsKKwkJZHJpZnQgJj0gVkM0X0hETUlfRklGT19WQUxJ RF9XUklURV9NQVNLOworCisJCUhETUlfV1JJVEUoVkM0X0hETUlfRklGT19DVEwsCisJCQkgICBk cmlmdCAmIH5WQzRfSERNSV9GSUZPX0NUTF9SRUNFTlRFUik7CisJCUhETUlfV1JJVEUoVkM0X0hE TUlfRklGT19DVEwsCisJCQkgICBkcmlmdCB8IFZDNF9IRE1JX0ZJRk9fQ1RMX1JFQ0VOVEVSKTsK KwkJdWRlbGF5KDEwMDApOworCQlIRE1JX1dSSVRFKFZDNF9IRE1JX0ZJRk9fQ1RMLAorCQkJICAg ZHJpZnQgJiB+VkM0X0hETUlfRklGT19DVExfUkVDRU5URVIpOworCQlIRE1JX1dSSVRFKFZDNF9I RE1JX0ZJRk9fQ1RMLAorCQkJICAgZHJpZnQgfCBWQzRfSERNSV9GSUZPX0NUTF9SRUNFTlRFUik7 CisKKwkJd2hpbGUgKChIRE1JX1JFQUQoVkM0X0hETUlfRklGT19DVEwpICYKKwkJCVZDNF9IRE1J X0ZJRk9fQ1RMX1JFQ0VOVEVSX0RPTkUpID09IDApIHsKKwkJCWNwdV9yZWxheCgpOworCQl9CisJ fQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyB2YzRf aGRtaV9lbmNvZGVyX2hlbHBlcl9mdW5jcyA9IHsKKwkubW9kZV9maXh1cCA9IHZjNF9oZG1pX2Vu Y29kZXJfbW9kZV9maXh1cCwKKwkubW9kZV9zZXQgPSB2YzRfaGRtaV9lbmNvZGVyX21vZGVfc2V0 LAorCS5kaXNhYmxlID0gdmM0X2hkbWlfZW5jb2Rlcl9kaXNhYmxlLAorCS5lbmFibGUgPSB2YzRf aGRtaV9lbmNvZGVyX2VuYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2NydGMgKgordmM0 X2dldF9jcnRjX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qg ZGV2aWNlX25vZGUgKmNydGNfbm9kZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjcnRjX3Bk ZXY7CisKKwljcnRjX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBkZXYtPmRldi5vZl9ub2RlLCAi Y3J0YyIsIDApOworCWlmICghY3J0Y19ub2RlKSB7CisJCURSTV9FUlJPUigiTm8gQ1JUQyBmb3Ig aGRtaSBpbiBEVFxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCWNydGNf cGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUoY3J0Y19ub2RlKTsKKwlpZiAoIWNydGNfcGRl dikgeworCQlEUk1fRVJST1IoIk5vIENSVEMgZGV2aWNlIGF0dGFjaGVkIHRvIE9GIG5vZGVcbiIp OworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwlyZXR1cm4gcGxhdGZvcm1fZ2V0 X2RydmRhdGEoY3J0Y19wZGV2KTsKK30KKworc3RydWN0IGRybV9lbmNvZGVyICp2YzRfaGRtaV9l bmNvZGVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdmM0X2RldiAq dmM0ID0gdG9fdmM0X2RldihkZXYpOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IE5V TEw7CisJc3RydWN0IHZjNF9oZG1pX2VuY29kZXIgKnZjNF9oZG1pX2VuY29kZXI7CisJc3RydWN0 IGRybV9jcnRjICpjcnRjOworCWludCByZXQ7CisKKwl2YzRfaGRtaV9lbmNvZGVyID0gZGV2bV9r emFsbG9jKGRldi0+ZGV2LCBzaXplb2YoKnZjNF9oZG1pX2VuY29kZXIpLAorCQkJCQlHRlBfS0VS TkVMKTsKKwlpZiAoIXZjNF9oZG1pX2VuY29kZXIpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290 byBmYWlsOworCX0KKwllbmNvZGVyID0gJnZjNF9oZG1pX2VuY29kZXItPmJhc2U7CisKKwljcnRj ID0gdmM0X2dldF9jcnRjX25vZGUodmM0LT5oZG1pLT5wZGV2KTsKKwlpZiAoSVNfRVJSKGNydGMp KSB7CisJCXJldCA9IFBUUl9FUlIoY3J0Yyk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlkcm1fZW5j b2Rlcl9pbml0KGRldiwgZW5jb2RlciwgJnZjNF9oZG1pX2VuY29kZXJfZnVuY3MsCisJCQkgRFJN X01PREVfRU5DT0RFUl9UTURTKTsKKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGVuY29kZXIsICZ2 YzRfaGRtaV9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7CisKKwllbmNvZGVyLT5wb3NzaWJsZV9jcnRj cyA9IGRybV9jcnRjX21hc2soY3J0Yyk7CisKKwlyZXR1cm4gZW5jb2RlcjsKKworZmFpbDoKKwlp ZiAoZW5jb2RlcikKKwkJdmM0X2VuY29kZXJfZGVzdHJveShlbmNvZGVyKTsKKworCXJldHVybiBF UlJfUFRSKHJldCk7Cit9CisKKy8qIFJlYWRzIG91dCB0aGUgY3VycmVudCBIRE1JIG1vZGUgcHJv Z3JlYW1taW5nIGF0IGRyaXZlciBsb2FkIHRpbWUuCisgKgorICogVGhpcyBpcyBjdXJyZW50bHkg dXNlZCBmb3IgbGF0ZXIgZmlsdGVyaW5nIG91dCBvZiB0aGUgRERDLXByb2JlZAorICogdmlkZW8g bW9kZXMsIHNpbmNlIHdlIGNhbid0IGFjdHVhbGx5IGNoYW5nZSBtb2RlcyBkdWUgdG8gbm90IGhh dmluZworICogY29udHJvbCBvZiB0aGUgbmVjZXNzYXJ5IGNsb2Nrcy4gIExhdGVyIG9uLCB3ZSBt YXkgZW5kIHVwIHJldXNpbmcKKyAqIHRoaXMgZm9yIHNraXBwaW5nIG1vZGVzZXRzIGF0IGJvb3Qg dGltZS4KKyAqLworc3RhdGljIHZvaWQKK3ZjNF9oZG1pX2dldF9ib290X2Rpc3BsYXlfbW9kZShz dHJ1Y3QgdmM0X2RldiAqdmM0KQoreworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0g JnZjNC0+aGRtaS0+Ym9vdF9tb2RlOworCXUzMiBob3J6YSA9IEhETUlfUkVBRChWQzRfSERNSV9I T1JaQSk7CisJdTMyIGhvcnpiID0gSERNSV9SRUFEKFZDNF9IRE1JX0hPUlpCKTsKKwl1MzIgdmVy dGEgPSBIRE1JX1JFQUQoVkM0X0hETUlfVkVSVEEwKTsKKwl1MzIgdmVydGIgPSBIRE1JX1JFQUQo VkM0X0hETUlfVkVSVEIwKTsKKworCW1lbXNldChtb2RlLCAwLCBzaXplb2YoKm1vZGUpKTsKKwor CWlmICghKGhvcnphICYgVkM0X0hETUlfSE9SWkFfVlBPUykpCisJCW1vZGUtPmZsYWdzIHw9IERS TV9NT0RFX0ZMQUdfTlZTWU5DOworCWlmICghKGhvcnphICYgVkM0X0hETUlfSE9SWkFfSFBPUykp CisJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfTkhTWU5DOworCW1vZGUtPmhkaXNwbGF5 ID0gVkM0X0dFVF9GSUVMRChob3J6YSwgVkM0X0hETUlfSE9SWkFfSEFQKTsKKwltb2RlLT5oc3lu Y19zdGFydCA9IChtb2RlLT5oZGlzcGxheSArCisJCQkgICAgIFZDNF9HRVRfRklFTEQoaG9yemIs IFZDNF9IRE1JX0hPUlpCX0hGUCkpOworCW1vZGUtPmhzeW5jX2VuZCA9IChtb2RlLT5oc3luY19z dGFydCArCisJCQkgICBWQzRfR0VUX0ZJRUxEKGhvcnpiLCBWQzRfSERNSV9IT1JaQl9IU1ApKTsK Kwltb2RlLT5odG90YWwgPSAobW9kZS0+aHN5bmNfZW5kICsKKwkJCVZDNF9HRVRfRklFTEQoaG9y emIsIFZDNF9IRE1JX0hPUlpCX0hCUCkpOworCisJbW9kZS0+dmRpc3BsYXkgPSBWQzRfR0VUX0ZJ RUxEKHZlcnRhLCBWQzRfSERNSV9WRVJUQV9WQUwpOworCW1vZGUtPnZzeW5jX3N0YXJ0ID0gKG1v ZGUtPnZkaXNwbGF5ICsKKwkJCSAgICAgVkM0X0dFVF9GSUVMRCh2ZXJ0YSwgVkM0X0hETUlfVkVS VEFfVkZQKSk7CisJbW9kZS0+dnN5bmNfZW5kID0gKG1vZGUtPnZzeW5jX3N0YXJ0ICsKKwkJCSAg IFZDNF9HRVRfRklFTEQodmVydGEsIFZDNF9IRE1JX1ZFUlRBX1ZTUCkpOworCW1vZGUtPnZ0b3Rh bCA9IChtb2RlLT52c3luY19lbmQgKworCQkJVkM0X0dFVF9GSUVMRCh2ZXJ0YiwgVkM0X0hETUlf VkVSVEJfVkJQKSk7Cit9CisKK3N0YXRpYyBpbnQgdmM0X2hkbWlfYmluZChzdHJ1Y3QgZGV2aWNl ICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YShtYXN0ZXIpOworCXN0cnVjdCB2YzRfZGV2 ICp2YzQgPSBkcm0tPmRldl9wcml2YXRlOworCXN0cnVjdCB2YzRfaGRtaSAqaGRtaTsKKwlzdHJ1 Y3QgZGV2aWNlX25vZGUgKmRkY19ub2RlOworCXUzMiB2YWx1ZTsKKworCWhkbWkgPSBkZXZtX2t6 YWxsb2MoZGV2LCBzaXplb2YoKmhkbWkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhkbWkpCisJCXJl dHVybiAtRU5PTUVNOworCisJaGRtaS0+cGRldiA9IHBkZXY7CisJaGRtaS0+aGRtaWNvcmVfcmVn cyA9IHZjNF9pb3JlbWFwX3JlZ3MocGRldiwgMCk7CisJaWYgKElTX0VSUihoZG1pLT5oZG1pY29y ZV9yZWdzKSkKKwkJcmV0dXJuIFBUUl9FUlIoaGRtaS0+aGRtaWNvcmVfcmVncyk7CisKKwloZG1p LT5oZF9yZWdzID0gdmM0X2lvcmVtYXBfcmVncyhwZGV2LCAxKTsKKwlpZiAoSVNfRVJSKGhkbWkt PmhkX3JlZ3MpKQorCQlyZXR1cm4gUFRSX0VSUihoZG1pLT5oZF9yZWdzKTsKKworCS8qIEREQyBp MmMgZHJpdmVyICovCisJZGRjX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKGRldi0+b2Zfbm9kZSwg ImRkYyIsIDApOworCWlmICghZGRjX25vZGUpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZmlu ZCBkZGMgbm9kZSBpbiBkZXZpY2UgdHJlZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwor CWhkbWktPmRkYyA9IG9mX2ZpbmRfaTJjX2FkYXB0ZXJfYnlfbm9kZShkZGNfbm9kZSk7CisJaWYg KCFoZG1pLT5kZGMpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IGRkYyBpMmMgYWRhcHRl ciBieSBub2RlXG4iKTsKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCisJLyogT25seSB1 c2UgdGhlIEdQSU8gSFBEIHBpbiBpZiBwcmVzZW50IGluIHRoZSBEVCwgb3RoZXJ3aXNlCisJICog d2UnbGwgdXNlIHRoZSBIRE1JIGNvcmUncyByZWdpc3Rlci4KKwkgKi8KKwlpZiAob2ZfZmluZF9w cm9wZXJ0eShkZXYtPm9mX25vZGUsICJocGQtZ3BpbyIsICZ2YWx1ZSkpIHsKKwkJaGRtaS0+aHBk X2dwaW8gPSBvZl9nZXRfbmFtZWRfZ3BpbyhkZXYtPm9mX25vZGUsICJocGQtZ3BpbyIsIDApOwor CQlpZiAoaGRtaS0+aHBkX2dwaW8gPCAwKQorCQkJcmV0dXJuIGhkbWktPmhwZF9ncGlvOworCX0K KworCXZjNC0+aGRtaSA9IGhkbWk7CisKKwkvKiBIRE1JIGNvcmUgbXVzdCBiZSBlbmFibGVkLiAq LworCVdBUk5fT05fT05DRSgoSERfUkVBRChWQzRfSERfTV9DVEwpICYgVkM0X0hEX01fRU5BQkxF KSA9PSAwKTsKKworCXZjNF9oZG1pX2dldF9ib290X2Rpc3BsYXlfbW9kZSh2YzQpOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZjNF9oZG1pX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpk ZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCSAgICB2b2lkICpkYXRhKQoreworCXN0cnVj dCBkcm1fZGV2aWNlICpkcm0gPSBkZXZfZ2V0X2RydmRhdGEobWFzdGVyKTsKKwlzdHJ1Y3QgdmM0 X2RldiAqdmM0ID0gZHJtLT5kZXZfcHJpdmF0ZTsKKworCXB1dF9kZXZpY2UoJnZjNC0+aGRtaS0+ ZGRjLT5kZXYpOworCisJdmM0LT5oZG1pID0gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBjb21wb25lbnRfb3BzIHZjNF9oZG1pX29wcyA9IHsKKwkuYmluZCAgID0gdmM0X2hkbWlfYmlu ZCwKKwkudW5iaW5kID0gdmM0X2hkbWlfdW5iaW5kLAorfTsKKworc3RhdGljIGludCB2YzRfaGRt aV9kZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gY29t cG9uZW50X2FkZCgmcGRldi0+ZGV2LCAmdmM0X2hkbWlfb3BzKTsKK30KKworc3RhdGljIGludCB2 YzRfaGRtaV9kZXZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29t cG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmdmM0X2hkbWlfb3BzKTsKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdmM0X2hkbWlfZHRfbWF0Y2hbXSA9IHsK Kwl7IC5jb21wYXRpYmxlID0gImJyY20sdmM0LWhkbWkiIH0sCisJe30KK307CisKK3N0YXRpYyBz dHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZjNF9oZG1pX2RyaXZlciA9IHsKKwkucHJvYmUgPSB2YzRf aGRtaV9kZXZfcHJvYmUsCisJLnJlbW92ZSA9IHZjNF9oZG1pX2Rldl9yZW1vdmUsCisJLmRyaXZl ciA9IHsKKwkJLm5hbWUgPSAidmM0X2hkbWkiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSB2YzRfaGRt aV9kdF9tYXRjaCwKKwl9LAorfTsKKwordm9pZCBfX2luaXQgdmM0X2hkbWlfcmVnaXN0ZXIodm9p ZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnZjNF9oZG1pX2RyaXZlcik7Cit9CisK K3ZvaWQgX19leGl0IHZjNF9oZG1pX3VucmVnaXN0ZXIodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2 ZXJfdW5yZWdpc3RlcigmdmM0X2hkbWlfZHJpdmVyKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS92YzQvdmM0X2h2cy5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfaHZzLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNmNGY3OAotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2h2cy5jCkBAIC0wLDAgKzEsMTcyIEBACisvKgor ICogQ29weXJpZ2h0IChDKSAyMDE1IEJyb2FkY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lv biAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAq LworCisvKioKKyAqIERPQzogVkM0IEhWUyBtb2R1bGUuCisgKgorICogVGhlIEhWUyBpcyB0aGUg cGllY2Ugb2YgaGFyZHdhcmUgdGhhdCBkb2VzIHRyYW5zbGF0aW9uLCBzY2FsaW5nLAorICogY29s b3JzcGFjZSBjb252ZXJzaW9uLCBhbmQgY29tcG9zaXRpbmcgb2YgcGl4ZWxzIHN0b3JlZCBpbgor ICogZnJhbWVidWZmZXJzIGludG8gYSBGSUZPIG9mIHBpeGVscyBnb2luZyBvdXQgdG8gdGhlIFBp eGVsIFZhbHZlCisgKiAoQ1JUQykuCisgKgorICogVGhlcmUgaXMgYSBzaW5nbGUgZ2xvYmFsIEhW Uywgd2l0aCBtdWx0aXBsZSBvdXRwdXQgRklGT3MgdGhhdCBjYW4KKyAqIGJlIGNvbnN1bWVkIGJ5 IHRoZSBQVnMuICBUaGlzIGZpbGUganVzdCBtYW5hZ2VzIHRoZSByZXNvdXJjZXMgZm9yCisgKiB0 aGUgSFZTLCB3aGlsZSB0aGUgdmM0X2NydGMuYyBjb2RlIGFjdHVhbGx5IGRyaXZlcyBIVlMgc2V0 dXAgZm9yCisgKiBlYWNoIENSVEMuCisgKi8KKworI2luY2x1ZGUgImxpbnV4L2NvbXBvbmVudC5o IgorI2luY2x1ZGUgInZjNF9kcnYuaCIKKyNpbmNsdWRlICJ2YzRfcmVncy5oIgorCisjZGVmaW5l IEhWU19SRUcocmVnKSB7IHJlZywgI3JlZyB9CitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwl1MzIg cmVnOworCWNvbnN0IGNoYXIgKm5hbWU7Cit9IGh2c19yZWdzW10gPSB7CisJSFZTX1JFRyhTQ0FM RVJfRElTUENUUkwpLAorCUhWU19SRUcoU0NBTEVSX0RJU1BTVEFUKSwKKwlIVlNfUkVHKFNDQUxF Ul9ESVNQSUQpLAorCUhWU19SRUcoU0NBTEVSX0RJU1BFQ1RSTCksCisJSFZTX1JFRyhTQ0FMRVJf RElTUFBST0YpLAorCUhWU19SRUcoU0NBTEVSX0RJU1BESVRIRVIpLAorCUhWU19SRUcoU0NBTEVS X0RJU1BFT0xOKSwKKwlIVlNfUkVHKFNDQUxFUl9ESVNQTElTVDApLAorCUhWU19SRUcoU0NBTEVS X0RJU1BMSVNUMSksCisJSFZTX1JFRyhTQ0FMRVJfRElTUExJU1QyKSwKKwlIVlNfUkVHKFNDQUxF Ul9ESVNQTFNUQVQpLAorCUhWU19SRUcoU0NBTEVSX0RJU1BMQUNUMCksCisJSFZTX1JFRyhTQ0FM RVJfRElTUExBQ1QxKSwKKwlIVlNfUkVHKFNDQUxFUl9ESVNQTEFDVDIpLAorCUhWU19SRUcoU0NB TEVSX0RJU1BDVFJMMCksCisJSFZTX1JFRyhTQ0FMRVJfRElTUEJLR05EMCksCisJSFZTX1JFRyhT Q0FMRVJfRElTUFNUQVQwKSwKKwlIVlNfUkVHKFNDQUxFUl9ESVNQQkFTRTApLAorCUhWU19SRUco U0NBTEVSX0RJU1BDVFJMMSksCisJSFZTX1JFRyhTQ0FMRVJfRElTUEJLR05EMSksCisJSFZTX1JF RyhTQ0FMRVJfRElTUFNUQVQxKSwKKwlIVlNfUkVHKFNDQUxFUl9ESVNQQkFTRTEpLAorCUhWU19S RUcoU0NBTEVSX0RJU1BDVFJMMiksCisJSFZTX1JFRyhTQ0FMRVJfRElTUEJLR05EMiksCisJSFZT X1JFRyhTQ0FMRVJfRElTUFNUQVQyKSwKKwlIVlNfUkVHKFNDQUxFUl9ESVNQQkFTRTIpLAorCUhW U19SRUcoU0NBTEVSX0RJU1BBTFBIQTIpLAorfTsKKwordm9pZAordmM0X2h2c19kdW1wX3N0YXRl KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3Zj NF9kZXYoZGV2KTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGh2c19y ZWdzKTsgaSsrKSB7CisJCURSTV9JTkZPKCIweCUwNHggKCVzKTogMHglMDh4XG4iLAorCQkJIGh2 c19yZWdzW2ldLnJlZywgaHZzX3JlZ3NbaV0ubmFtZSwKKwkJCSBIVlNfUkVBRChodnNfcmVnc1tp XS5yZWcpKTsKKwl9CisKKwlEUk1fSU5GTygiSFZTIGN0eDpcbiIpOworCWZvciAoaSA9IDA7IGkg PCA2NDsgaSArPSA0KSB7CisJCURSTV9JTkZPKCIweCUwOHggKCVzKTogMHglMDh4IDB4JTA4eCAw eCUwOHggMHglMDh4XG4iLAorCQkJIGkgKiA0LCBpIDwgSFZTX0JPT1RMT0FERVJfRExJU1RfRU5E ID8gIkIiIDogIkQiLAorCQkJICgodWludDMyX3QgKil2YzQtPmh2cy0+ZGxpc3QpW2kgKyAwXSwK KwkJCSAoKHVpbnQzMl90ICopdmM0LT5odnMtPmRsaXN0KVtpICsgMV0sCisJCQkgKCh1aW50MzJf dCAqKXZjNC0+aHZzLT5kbGlzdClbaSArIDJdLAorCQkJICgodWludDMyX3QgKil2YzQtPmh2cy0+ ZGxpc3QpW2kgKyAzXSk7CisJfQorfQorCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCitpbnQgdmM0 X2h2c19kZWJ1Z2ZzX3JlZ3Moc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCit7CisJ c3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+ cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlz dHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOworCWludCBpOworCisJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUoaHZzX3JlZ3MpOyBpKyspIHsKKwkJc2VxX3ByaW50ZihtLCAi JXMgKDB4JTA0eCk6IDB4JTA4eFxuIiwKKwkJCSAgIGh2c19yZWdzW2ldLm5hbWUsIGh2c19yZWdz W2ldLnJlZywKKwkJCSAgIEhWU19SRUFEKGh2c19yZWdzW2ldLnJlZykpOworCX0KKworCXJldHVy biAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgdmM0X2h2c19iaW5kKHN0cnVjdCBkZXZpY2Ug KmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZHJt X2RldmljZSAqZHJtID0gZGV2X2dldF9kcnZkYXRhKG1hc3Rlcik7CisJc3RydWN0IHZjNF9kZXYg KnZjNCA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHZjNF9odnMgKmh2cyA9IE5VTEw7CisK KwlodnMgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpodnMpLCBHRlBfS0VSTkVM KTsKKwlpZiAoIWh2cykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlodnMtPnBkZXYgPSBwZGV2Owor CisJaHZzLT5yZWdzID0gdmM0X2lvcmVtYXBfcmVncyhwZGV2LCAwKTsKKwlpZiAoSVNfRVJSKGh2 cy0+cmVncykpCisJCXJldHVybiBQVFJfRVJSKGh2cy0+cmVncyk7CisKKwlodnMtPmRsaXN0ID0g aHZzLT5yZWdzICsgU0NBTEVSX0RMSVNUX1NUQVJUOworCisJdmM0LT5odnMgPSBodnM7CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZjNF9odnNfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRl diwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkJICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtID0gZGV2X2dldF9kcnZkYXRhKG1hc3Rlcik7CisJc3RydWN0IHZjNF9k ZXYgKnZjNCA9IGRybS0+ZGV2X3ByaXZhdGU7CisKKwl2YzQtPmh2cyA9IE5VTEw7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyB2YzRfaHZzX29wcyA9IHsKKwkuYmluZCAg ID0gdmM0X2h2c19iaW5kLAorCS51bmJpbmQgPSB2YzRfaHZzX3VuYmluZCwKK307CisKK3N0YXRp YyBpbnQgdmM0X2h2c19kZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sK KwlyZXR1cm4gY29tcG9uZW50X2FkZCgmcGRldi0+ZGV2LCAmdmM0X2h2c19vcHMpOworfQorCitz dGF0aWMgaW50IHZjNF9odnNfZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQoreworCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJnZjNF9odnNfb3BzKTsKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdmM0X2h2c19kdF9tYXRj aFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYnJjbSx2YzQtaHZzIiB9LAorCXt9Cit9OworCitz dGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2YzRfaHZzX2RyaXZlciA9IHsKKwkucHJvYmUg PSB2YzRfaHZzX2Rldl9wcm9iZSwKKwkucmVtb3ZlID0gdmM0X2h2c19kZXZfcmVtb3ZlLAorCS5k cml2ZXIgPSB7CisJCS5uYW1lID0gInZjNF9odnMiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSB2YzRf aHZzX2R0X21hdGNoLAorCX0sCit9OworCit2b2lkIF9faW5pdCB2YzRfaHZzX3JlZ2lzdGVyKHZv aWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ2YzRfaHZzX2RyaXZlcik7Cit9CisK K3ZvaWQgX19leGl0IHZjNF9odnNfdW5yZWdpc3Rlcih2b2lkKQoreworCXBsYXRmb3JtX2RyaXZl cl91bnJlZ2lzdGVyKCZ2YzRfaHZzX2RyaXZlcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vdmM0L3ZjNF9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2ttcy5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZTk2YmMKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9rbXMuYwpAQCAtMCwwICsxLDg0IEBACisvKgorICog Q29weXJpZ2h0IChDKSAyMDE1IEJyb2FkY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy IGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLwor CisvKioKKyAqIERPQzogVkM0IEtNUworICoKKyAqIFRoaXMgaXMgdGhlIGdlbmVyYWwgY29kZSBm b3IgaW1wbGVtZW50aW5nIEtNUyBtb2RlIHNldHRpbmcgdGhhdAorICogZG9lc24ndCBjbGVhcmx5 IGFzc29jaWF0ZSB3aXRoIGFueSBvZiB0aGUgb3RoZXIgb2JqZWN0cyAocGxhbmUsCisgKiBjcnRj LCBIRE1JIGVuY29kZXIpLgorICovCisKKyNpbmNsdWRlICJkcm1fY3J0Yy5oIgorI2luY2x1ZGUg ImRybV9hdG9taWNfaGVscGVyLmgiCisjaW5jbHVkZSAiZHJtX2NydGNfaGVscGVyLmgiCisjaW5j bHVkZSAiZHJtX3BsYW5lX2hlbHBlci5oIgorI2luY2x1ZGUgImRybV9mYl9jbWFfaGVscGVyLmgi CisjaW5jbHVkZSAidmM0X2Rydi5oIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9tb2RlX2Nv bmZpZ19mdW5jcyB2YzRfbW9kZV9mdW5jcyA9IHsKKwkuYXRvbWljX2NoZWNrID0gZHJtX2F0b21p Y19oZWxwZXJfY2hlY2ssCisJLmF0b21pY19jb21taXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb21t aXQsCisJLmZiX2NyZWF0ZSA9IGRybV9mYl9jbWFfY3JlYXRlLAorfTsKKworLyogQ2FsbHMgb3V0 IHRvIGluaXRpYWxpemUgYWxsIG9mIHRoZSBWQzQgS01TIG9iamVjdHMuICovCitzdGF0aWMgaW50 IHZjNF9pbml0X21vZGVzZXRfb2JqZWN0cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0 cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yOworCWludCByZXQgPSAwOworCisJZW5jb2RlciA9IHZjNF9oZG1pX2VuY29kZXJfaW5pdChk ZXYpOworCWlmIChJU19FUlIoZW5jb2RlcikpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgImZhaWxl ZCB0byBjb25zdHJ1Y3QgSERNSSBlbmNvZGVyXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihlbmNvZGVy KTsKKwkJZ290byBmYWlsOworCX0KKworCWNvbm5lY3RvciA9IHZjNF9oZG1pX2Nvbm5lY3Rvcl9p bml0KGRldiwgZW5jb2Rlcik7CisJaWYgKElTX0VSUihjb25uZWN0b3IpKSB7CisJCXJldCA9IFBU Ul9FUlIoY29ubmVjdG9yKTsKKwkJZGV2X2VycihkZXYtPmRldiwgImZhaWxlZCB0byBpbml0aWFs aXplIEhETUkgY29ubmVjdG9yXG4iKTsKKwkJZ290byBmYWlsOworCX0KKworZmFpbDoKKwlyZXR1 cm4gcmV0OworfQorCitpbnQgdmM0X2ttc19sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7 CisJaW50IHJldDsKKworCXJldCA9IGRybV92YmxhbmtfaW5pdChkZXYsIGRldi0+bW9kZV9jb25m aWcubnVtX2NydGMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LT5kZXYsICJmYWls ZWQgdG8gaW5pdGlhbGl6ZSB2YmxhbmtcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldi0+ bW9kZV9jb25maWcubWF4X3dpZHRoID0gMjA0ODsKKwlkZXYtPm1vZGVfY29uZmlnLm1heF9oZWln aHQgPSAyMDQ4OworCWRldi0+bW9kZV9jb25maWcuZnVuY3MgPSAmdmM0X21vZGVfZnVuY3M7CisJ ZGV2LT5tb2RlX2NvbmZpZy5wcmVmZXJyZWRfZGVwdGggPSAyNDsKKworCXJldCA9IHZjNF9pbml0 X21vZGVzZXRfb2JqZWN0cyhkZXYpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKKworCWRybV9t b2RlX2NvbmZpZ19yZXNldChkZXYpOworCisJZHJtX2ZiZGV2X2NtYV9pbml0KGRldiwgMzIsCisJ CQkgICBkZXYtPm1vZGVfY29uZmlnLm51bV9jcnRjLAorCQkJICAgZGV2LT5tb2RlX2NvbmZpZy5u dW1fY29ubmVjdG9yKTsKKworCWRybV9rbXNfaGVscGVyX3BvbGxfaW5pdChkZXYpOworCitmYWls OgorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9w bGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcGxhbmUuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5jZGQ4YjEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL3ZjNC92YzRfcGxhbmUuYwpAQCAtMCwwICsxLDMyMCBAQAorLyoKKyAqIENvcHlyaWdo dCAoQykgMjAxNSBCcm9hZGNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICog cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworLyoqCisg KiBET0M6IFZDNCBwbGFuZSBtb2R1bGUKKyAqCisgKiBFYWNoIERSTSBwbGFuZSBpcyBhIGxheWVy IG9mIHBpeGVscyBiZWluZyBzY2FubmVkIG91dCBieSB0aGUgSFZTLgorICoKKyAqIEF0IGF0b21p YyBtb2Rlc2V0IGNoZWNrIHRpbWUsIHdlIGNvbXB1dGUgdGhlIEhWUyBkaXNwbGF5IGVsZW1lbnQK KyAqIHN0YXRlIHRoYXQgd291bGQgYmUgbmVjZXNzYXJ5IGZvciBkaXNwbGF5aW5nIHRoZSBwbGFu ZSAoZ2l2aW5nIHVzIGEKKyAqIGNoYW5jZSB0byBmaWd1cmUgb3V0IGlmIGEgcGxhbmUgY29uZmln dXJhdGlvbiBpcyBpbnZhbGlkKSwgdGhlbiBhdAorICogYXRvbWljIGZsdXNoIHRpbWUgdGhlIENS VEMgd2lsbCBhc2sgdXMgdG8gd3JpdGUgb3VyIGVsZW1lbnQgc3RhdGUKKyAqIGludG8gdGhlIHJl Z2lvbiBvZiB0aGUgSFZTIHRoYXQgaXQgaGFzIGFsbG9jYXRlZCBmb3IgdXMuCisgKi8KKworI2lu Y2x1ZGUgInZjNF9kcnYuaCIKKyNpbmNsdWRlICJ2YzRfcmVncy5oIgorI2luY2x1ZGUgImRybV9h dG9taWNfaGVscGVyLmgiCisjaW5jbHVkZSAiZHJtX2ZiX2NtYV9oZWxwZXIuaCIKKyNpbmNsdWRl ICJkcm1fcGxhbmVfaGVscGVyLmgiCisKK3N0cnVjdCB2YzRfcGxhbmVfc3RhdGUgeworCXN0cnVj dCBkcm1fcGxhbmVfc3RhdGUgYmFzZTsKKwl1MzIgKmRsaXN0OworCXUzMiBkbGlzdF9zaXplOyAv KiBOdW1iZXIgb2YgZHdvcmRzIGluIGFsbG9jYXRlZCBmb3IgdGhlIGRpc3BsYXkgbGlzdCAqLwor CXUzMiBkbGlzdF9jb3VudDsgLyogTnVtYmVyIG9mIHVzZWQgZHdvcmRzIGluIHRoZSBkaXNwbGF5 IGxpc3QuICovCit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2YzRfcGxhbmVfc3RhdGUgKgor dG9fdmM0X3BsYW5lX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXJl dHVybiAoc3RydWN0IHZjNF9wbGFuZV9zdGF0ZSAqKXN0YXRlOworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IGh2c19mb3JtYXQgeworCXUzMiBkcm07IC8qIERSTV9GT1JNQVRfKiAqLworCXUzMiBo dnM7IC8qIEhWU19GT1JNQVRfKiAqLworCXUzMiBwaXhlbF9vcmRlcjsKKwlib29sIGhhc19hbHBo YTsKK30gaHZzX2Zvcm1hdHNbXSA9IHsKKwl7CisJCS5kcm0gPSBEUk1fRk9STUFUX1hSR0I4ODg4 LCAuaHZzID0gSFZTX1BJWEVMX0ZPUk1BVF9SR0JBODg4OCwKKwkJLnBpeGVsX29yZGVyID0gSFZT X1BJWEVMX09SREVSX0FCR1IsIC5oYXNfYWxwaGEgPSBmYWxzZSwKKwl9LAorCXsKKwkJLmRybSA9 IERSTV9GT1JNQVRfQVJHQjg4ODgsIC5odnMgPSBIVlNfUElYRUxfRk9STUFUX1JHQkE4ODg4LAor CQkucGl4ZWxfb3JkZXIgPSBIVlNfUElYRUxfT1JERVJfQUJHUiwgLmhhc19hbHBoYSA9IHRydWUs CisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHZzX2Zvcm1hdCAqdmM0X2dldF9odnNf Zm9ybWF0KHUzMiBkcm1fZm9ybWF0KQoreworCXVuc2lnbmVkIGk7CisKKwlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShodnNfZm9ybWF0cyk7IGkrKykgeworCQlpZiAoaHZzX2Zvcm1hdHNbaV0u ZHJtID09IGRybV9mb3JtYXQpCisJCQlyZXR1cm4gJmh2c19mb3JtYXRzW2ldOworCX0KKworCXJl dHVybiBOVUxMOworfQorCitzdGF0aWMgYm9vbCBwbGFuZV9lbmFibGVkKHN0cnVjdCBkcm1fcGxh bmVfc3RhdGUgKnN0YXRlKQoreworCXJldHVybiBzdGF0ZS0+ZmIgJiYgc3RhdGUtPmNydGM7Cit9 CisKK3N0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnZjNF9wbGFuZV9kdXBsaWNhdGVfc3RhdGUoc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJc3RydWN0IHZjNF9wbGFuZV9zdGF0ZSAqdmM0X3N0 YXRlOworCisJaWYgKFdBUk5fT04oIXBsYW5lLT5zdGF0ZSkpCisJCXJldHVybiBOVUxMOworCisJ dmM0X3N0YXRlID0ga21lbWR1cChwbGFuZS0+c3RhdGUsIHNpemVvZigqdmM0X3N0YXRlKSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCF2YzRfc3RhdGUpCisJCXJldHVybiBOVUxMOworCisJX19kcm1fYXRv bWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUocGxhbmUsICZ2YzRfc3RhdGUtPmJhc2Up OworCisJaWYgKHZjNF9zdGF0ZS0+ZGxpc3QpIHsKKwkJdmM0X3N0YXRlLT5kbGlzdCA9IGttZW1k dXAodmM0X3N0YXRlLT5kbGlzdCwKKwkJCQkJICAgdmM0X3N0YXRlLT5kbGlzdF9jb3VudCAqIDQs CisJCQkJCSAgIEdGUF9LRVJORUwpOworCQlpZiAoIXZjNF9zdGF0ZS0+ZGxpc3QpIHsKKwkJCWtm cmVlKHZjNF9zdGF0ZSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQl2YzRfc3RhdGUtPmRsaXN0 X3NpemUgPSB2YzRfc3RhdGUtPmRsaXN0X2NvdW50OworCX0KKworCXJldHVybiAmdmM0X3N0YXRl LT5iYXNlOworfQorCit2b2lkIHZjNF9wbGFuZV9kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lLAorCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlz dHJ1Y3QgdmM0X3BsYW5lX3N0YXRlICp2YzRfc3RhdGUgPSB0b192YzRfcGxhbmVfc3RhdGUoc3Rh dGUpOworCisJa2ZyZWUodmM0X3N0YXRlLT5kbGlzdCk7CisJX19kcm1fYXRvbWljX2hlbHBlcl9w bGFuZV9kZXN0cm95X3N0YXRlKHBsYW5lLCAmdmM0X3N0YXRlLT5iYXNlKTsKKwlrZnJlZShzdGF0 ZSk7Cit9CisKKy8qIENhbGxlZCBkdXJpbmcgaW5pdCB0byBhbGxvY2F0ZSB0aGUgcGxhbmUncyBh dG9taWMgc3RhdGUuICovCit2b2lkIHZjNF9wbGFuZV9yZXNldChzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSkKK3sKKwlzdHJ1Y3QgdmM0X3BsYW5lX3N0YXRlICp2YzRfc3RhdGU7CisKKwlXQVJOX09O KHBsYW5lLT5zdGF0ZSk7CisKKwl2YzRfc3RhdGUgPSBremFsbG9jKHNpemVvZigqdmM0X3N0YXRl KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2YzRfc3RhdGUpCisJCXJldHVybjsKKworCXBsYW5lLT5z dGF0ZSA9ICZ2YzRfc3RhdGUtPmJhc2U7CisJdmM0X3N0YXRlLT5iYXNlLnBsYW5lID0gcGxhbmU7 Cit9CisKK3N0YXRpYyB2b2lkIHZjNF9kbGlzdF93cml0ZShzdHJ1Y3QgdmM0X3BsYW5lX3N0YXRl ICp2YzRfc3RhdGUsIHUzMiB2YWwpCit7CisJaWYgKHZjNF9zdGF0ZS0+ZGxpc3RfY291bnQgPT0g dmM0X3N0YXRlLT5kbGlzdF9zaXplKSB7CisJCXUzMiBuZXdfc2l6ZSA9IG1heCg0dSwgdmM0X3N0 YXRlLT5kbGlzdF9jb3VudCAqIDIpOworCQl1MzIgKm5ld19kbGlzdCA9IGttYWxsb2MobmV3X3Np emUgKiA0LCBHRlBfS0VSTkVMKTsKKworCQlpZiAoIW5ld19kbGlzdCkKKwkJCXJldHVybjsKKwkJ bWVtY3B5KG5ld19kbGlzdCwgdmM0X3N0YXRlLT5kbGlzdCwgdmM0X3N0YXRlLT5kbGlzdF9jb3Vu dCAqIDQpOworCisJCWtmcmVlKHZjNF9zdGF0ZS0+ZGxpc3QpOworCQl2YzRfc3RhdGUtPmRsaXN0 ID0gbmV3X2RsaXN0OworCQl2YzRfc3RhdGUtPmRsaXN0X3NpemUgPSBuZXdfc2l6ZTsKKwl9CisK Kwl2YzRfc3RhdGUtPmRsaXN0W3ZjNF9zdGF0ZS0+ZGxpc3RfY291bnQrK10gPSB2YWw7Cit9CisK Ky8qIFdyaXRlcyBvdXQgYSBmdWxsIGRpc3BsYXkgbGlzdCBmb3IgYW4gYWN0aXZlIHBsYW5lIHRv IHRoZSBwbGFuZSdzCisgKiBwcml2YXRlIGRsaXN0IHN0YXRlLgorICovCitzdGF0aWMgaW50IHZj NF9wbGFuZV9tb2RlX3NldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCSAgICAgIHN0cnVj dCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCB2YzRfcGxhbmVfc3RhdGUgKnZj NF9zdGF0ZSA9IHRvX3ZjNF9wbGFuZV9zdGF0ZShzdGF0ZSk7CisJc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIgPSBzdGF0ZS0+ZmI7CisJc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqYm8gPSBk cm1fZmJfY21hX2dldF9nZW1fb2JqKGZiLCAwKTsKKwl1MzIgY3RsMF9vZmZzZXQgPSB2YzRfc3Rh dGUtPmRsaXN0X2NvdW50OworCWNvbnN0IHN0cnVjdCBodnNfZm9ybWF0ICpmb3JtYXQgPSB2YzRf Z2V0X2h2c19mb3JtYXQoZmItPnBpeGVsX2Zvcm1hdCk7CisJdWludDMyX3Qgb2Zmc2V0ID0gZmIt Pm9mZnNldHNbMF07CisJaW50IGNydGNfeCA9IHN0YXRlLT5jcnRjX3g7CisJaW50IGNydGNfeSA9 IHN0YXRlLT5jcnRjX3k7CisJaW50IGNydGNfdyA9IHN0YXRlLT5jcnRjX3c7CisJaW50IGNydGNf aCA9IHN0YXRlLT5jcnRjX2g7CisKKwlpZiAoY3J0Y194IDwgMCkgeworCQlvZmZzZXQgKz0gZHJt X2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCkgKiAtY3J0Y194OworCQljcnRj X3cgKz0gY3J0Y194OworCQljcnRjX3ggPSAwOworCX0KKworCWlmIChjcnRjX3kgPCAwKSB7CisJ CW9mZnNldCArPSBmYi0+cGl0Y2hlc1swXSAqIC1jcnRjX3k7CisJCWNydGNfaCArPSBjcnRjX3k7 CisJCWNydGNfeSA9IDA7CisJfQorCisJdmM0X2RsaXN0X3dyaXRlKHZjNF9zdGF0ZSwKKwkJCVND QUxFUl9DVEwwX1ZBTElEIHwKKwkJCShmb3JtYXQtPnBpeGVsX29yZGVyIDw8IFNDQUxFUl9DVEww X09SREVSX1NISUZUKSB8CisJCQkoZm9ybWF0LT5odnMgPDwgU0NBTEVSX0NUTDBfUElYRUxfRk9S TUFUX1NISUZUKSB8CisJCQlTQ0FMRVJfQ1RMMF9VTklUWSk7CisKKwkvKiBQb3NpdGlvbiBXb3Jk IDA6IEltYWdlIFBvc2l0aW9ucyBhbmQgQWxwaGEgVmFsdWUgKi8KKwl2YzRfZGxpc3Rfd3JpdGUo dmM0X3N0YXRlLAorCQkJVkM0X1NFVF9GSUVMRCgweGZmLCBTQ0FMRVJfUE9TMF9GSVhFRF9BTFBI QSkgfAorCQkJVkM0X1NFVF9GSUVMRChjcnRjX3gsIFNDQUxFUl9QT1MwX1NUQVJUX1gpIHwKKwkJ CVZDNF9TRVRfRklFTEQoY3J0Y195LCBTQ0FMRVJfUE9TMF9TVEFSVF9ZKSk7CisKKwkvKiBQb3Np dGlvbiBXb3JkIDE6IFNjYWxlZCBJbWFnZSBEaW1lbnNpb25zLgorCSAqIFNraXBwZWQgZHVlIHRv IFNDQUxFUl9DVEwwX1VOSVRZIHNjYWxpbmcuCisJICovCisKKwkvKiBQb3NpdGlvbiBXb3JkIDI6 IFNvdXJjZSBJbWFnZSBTaXplLCBBbHBoYSBNb2RlICovCisJdmM0X2RsaXN0X3dyaXRlKHZjNF9z dGF0ZSwKKwkJCVZDNF9TRVRfRklFTEQoZm9ybWF0LT5oYXNfYWxwaGEgPworCQkJCSAgICAgIFND QUxFUl9QT1MyX0FMUEhBX01PREVfUElQRUxJTkUgOgorCQkJCSAgICAgIFNDQUxFUl9QT1MyX0FM UEhBX01PREVfRklYRUQsCisJCQkJICAgICAgU0NBTEVSX1BPUzJfQUxQSEFfTU9ERSkgfAorCQkJ VkM0X1NFVF9GSUVMRChjcnRjX3csIFNDQUxFUl9QT1MyX1dJRFRIKSB8CisJCQlWQzRfU0VUX0ZJ RUxEKGNydGNfaCwgU0NBTEVSX1BPUzJfSEVJR0hUKSk7CisKKwkvKiBQb3NpdGlvbiBXb3JkIDM6 IENvbnRleHQuICBXcml0dGVuIGJ5IHRoZSBIVlMuICovCisJdmM0X2RsaXN0X3dyaXRlKHZjNF9z dGF0ZSwgMHhjMGMwYzBjMCk7CisKKwkvKiBQb2ludGVyIFdvcmQgMDogUkdCIC8gWSBQb2ludGVy ICovCisJdmM0X2RsaXN0X3dyaXRlKHZjNF9zdGF0ZSwgYm8tPnBhZGRyICsgb2Zmc2V0KTsKKwor CS8qIFBvaW50ZXIgQ29udGV4dCBXb3JkIDA6IFdyaXR0ZW4gYnkgdGhlIEhWUyAqLworCXZjNF9k bGlzdF93cml0ZSh2YzRfc3RhdGUsIDB4YzBjMGMwYzApOworCisJLyogUGl0Y2ggd29yZCAwOiBQ b2ludGVyIDAgUGl0Y2ggKi8KKwl2YzRfZGxpc3Rfd3JpdGUodmM0X3N0YXRlLAorCQkJVkM0X1NF VF9GSUVMRChmYi0+cGl0Y2hlc1swXSwgU0NBTEVSX1NSQ19QSVRDSCkpOworCisJdmM0X3N0YXRl LT5kbGlzdFtjdGwwX29mZnNldF0gfD0KKwkJVkM0X1NFVF9GSUVMRCh2YzRfc3RhdGUtPmRsaXN0 X2NvdW50LCBTQ0FMRVJfQ1RMMF9TSVpFKTsKKworCXJldHVybiAwOworfQorCisvKiBJZiBhIG1v ZGVzZXQgaW52b2x2ZXMgY2hhbmdpbmcgdGhlIHNldHVwIG9mIGEgcGxhbmUsIHRoZSBhdG9taWMK KyAqIGluZnJhc3RydWN0dXJlIHdpbGwgY2FsbCB0aGlzIHRvIHZhbGlkYXRlIGEgcHJvcG9zZWQg cGxhbmUgc2V0dXAuCisgKiBIb3dldmVyLCBpZiBhIHBsYW5lIGlzbid0IGdldHRpbmcgdXBkYXRl ZCwgdGhpcyAoYW5kIHRoZQorICogY29ycmVzcG9uZGluZyB2YzRfcGxhbmVfYXRvbWljX3VwZGF0 ZSkgd29uJ3QgZ2V0IGNhbGxlZC4gIFRodXMsIHdlCisgKiBjb21wdXRlIHRoZSBkbGlzdCBoZXJl IGFuZCBoYXZlIGFsbCBhY3RpdmUgcGxhbmUgZGxpc3RzIGdldCB1cGRhdGVkCisgKiBpbiB0aGUg Q1JUQydzIGZsdXNoLgorICovCitzdGF0aWMgaW50IHZjNF9wbGFuZV9hdG9taWNfY2hlY2soc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0 ZSkKK3sKKwlzdHJ1Y3QgdmM0X3BsYW5lX3N0YXRlICp2YzRfc3RhdGUgPSB0b192YzRfcGxhbmVf c3RhdGUoc3RhdGUpOworCisJdmM0X3N0YXRlLT5kbGlzdF9jb3VudCA9IDA7CisKKwlpZiAocGxh bmVfZW5hYmxlZChzdGF0ZSkpCisJCXJldHVybiB2YzRfcGxhbmVfbW9kZV9zZXQocGxhbmUsIHN0 YXRlKTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2YzRfcGxhbmVfYXRv bWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgICAgc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQoreworCS8qIE5vIGNvbnRlbnRzIGhlcmUuICBTaW5jZSB3 ZSBkb24ndCBrbm93IHdoZXJlIGluIHRoZSBDUlRDJ3MKKwkgKiBkbGlzdCB3ZSBzaG91bGQgYmUg c3RvcmVkLCBvdXIgZGxpc3QgaXMgdXBsb2FkZWQgdG8gdGhlCisJICogaGFyZHdhcmUgd2l0aCB2 YzRfcGxhbmVfd3JpdGVfZGxpc3QoKSBhdCBDUlRDIGF0b21pY19mbHVzaAorCSAqIHRpbWUuCisJ ICovCit9CisKK3UzMiB2YzRfcGxhbmVfd3JpdGVfZGxpc3Qoc3RydWN0IGRybV9wbGFuZSAqcGxh bmUsIHUzMiBfX2lvbWVtICpkbGlzdCkKK3sKKwlzdHJ1Y3QgdmM0X3BsYW5lX3N0YXRlICp2YzRf c3RhdGUgPSB0b192YzRfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwlpbnQgaTsKKworCS8q IENhbid0IG1lbWNweV90b2lvKCkgYmVjYXVzZSBpdCBuZWVkcyB0byBiZSAzMi1iaXQgd3JpdGVz LiAqLworCWZvciAoaSA9IDA7IGkgPCB2YzRfc3RhdGUtPmRsaXN0X2NvdW50OyBpKyspCisJCXdy aXRlbCh2YzRfc3RhdGUtPmRsaXN0W2ldLCAmZGxpc3RbaV0pOworCisJcmV0dXJuIHZjNF9zdGF0 ZS0+ZGxpc3RfY291bnQ7Cit9CisKK3UzMiB2YzRfcGxhbmVfZGxpc3Rfc2l6ZShzdHJ1Y3QgZHJt X3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgdmM0X3BsYW5lX3N0YXRlICp2YzRfc3Rh dGUgPSB0b192YzRfcGxhbmVfc3RhdGUoc3RhdGUpOworCisJcmV0dXJuIHZjNF9zdGF0ZS0+ZGxp c3RfY291bnQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5j cyB2YzRfcGxhbmVfaGVscGVyX2Z1bmNzID0geworCS5wcmVwYXJlX2ZiID0gTlVMTCwKKwkuY2xl YW51cF9mYiA9IE5VTEwsCisJLmF0b21pY19jaGVjayA9IHZjNF9wbGFuZV9hdG9taWNfY2hlY2ss CisJLmF0b21pY191cGRhdGUgPSB2YzRfcGxhbmVfYXRvbWljX3VwZGF0ZSwKK307CisKK3N0YXRp YyB2b2lkIHZjNF9wbGFuZV9kZXN0cm95KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCWRy bV9wbGFuZV9oZWxwZXJfZGlzYWJsZShwbGFuZSk7CisJZHJtX3BsYW5lX2NsZWFudXAocGxhbmUp OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyB2YzRfcGxhbmVfZnVu Y3MgPSB7CisJLnVwZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwK KwkuZGlzYWJsZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCisJLmRl c3Ryb3kgPSB2YzRfcGxhbmVfZGVzdHJveSwKKwkuc2V0X3Byb3BlcnR5ID0gTlVMTCwKKwkucmVz ZXQgPSB2YzRfcGxhbmVfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSB2YzRfcGxh bmVfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IHZjNF9wbGFuZV9k ZXN0cm95X3N0YXRlLAorfTsKKworc3RydWN0IGRybV9wbGFuZSAqdmM0X3BsYW5lX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlKQorewor CXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gTlVMTDsKKwlzdHJ1Y3QgdmM0X3BsYW5lICp2YzRf cGxhbmU7CisJdTMyIGZvcm1hdHNbQVJSQVlfU0laRShodnNfZm9ybWF0cyldOworCWludCByZXQg PSAwOworCXVuc2lnbmVkIGk7CisKKwl2YzRfcGxhbmUgPSBkZXZtX2t6YWxsb2MoZGV2LT5kZXYs IHNpemVvZigqdmM0X3BsYW5lKSwKKwkJCQkgR0ZQX0tFUk5FTCk7CisJaWYgKCF2YzRfcGxhbmUp IHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKGh2c19mb3JtYXRzKTsgaSsrKQorCQlmb3JtYXRzW2ldID0gaHZzX2Zvcm1h dHNbaV0uZHJtOworCXBsYW5lID0gJnZjNF9wbGFuZS0+YmFzZTsKKwlyZXQgPSBkcm1fdW5pdmVy c2FsX3BsYW5lX2luaXQoZGV2LCBwbGFuZSwgMHhmZiwKKwkJCQkgICAgICAgJnZjNF9wbGFuZV9m dW5jcywKKwkJCQkgICAgICAgZm9ybWF0cywgQVJSQVlfU0laRShmb3JtYXRzKSwKKwkJCQkgICAg ICAgdHlwZSk7CisKKwlkcm1fcGxhbmVfaGVscGVyX2FkZChwbGFuZSwgJnZjNF9wbGFuZV9oZWxw ZXJfZnVuY3MpOworCisJcmV0dXJuIHBsYW5lOworZmFpbDoKKwlpZiAocGxhbmUpCisJCXZjNF9w bGFuZV9kZXN0cm95KHBsYW5lKTsKKworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9yZWdzLmggYi9kcml2ZXJzL2dwdS9kcm0vdmM0 L3ZjNF9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVmZjYzMQot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3JlZ3MuaApAQCAtMCww ICsxLDU2MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgwqkgMjAxNC0yMDE1IEJyb2FkY29tCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjZGVmaW5lIFZDNF9NQVNLKGhpZ2gsIGxvdykgKCgo MSA8PCAoKGhpZ2gpIC0gKGxvdykgKyAxKSkgLSAxKSA8PCAobG93KSkKKy8qIFVzaW5nIHRoZSBH TlUgc3RhdGVtZW50IGV4cHJlc3Npb24gZXh0ZW5zaW9uICovCisjZGVmaW5lIFZDNF9TRVRfRklF TEQodmFsdWUsIGZpZWxkKQkJCQkJXAorCSh7CQkJCQkJCQlcCisJCXVpbnQzMl90IGZpZWxkdmFs ID0gKHZhbHVlKSA8PCBmaWVsZCMjX1NISUZUOwkJXAorCQlXQVJOX09OKChmaWVsZHZhbCAmIH5m aWVsZCMjX01BU0spICE9IDApOwkJXAorCQlmaWVsZHZhbCAmIGZpZWxkIyNfTUFTSzsJCQkJXAor CSB9KQorCisjZGVmaW5lIFZDNF9HRVRfRklFTEQod29yZCwgZmllbGQpICgoKHdvcmQpICYgZmll bGQjI19NQVNLKSA+PgkJXAorCQkJCSAgICBmaWVsZCMjX1NISUZUKQorCisjZGVmaW5lIFYzRF9J REVOVDAgICAweDAwMDAwCisjIGRlZmluZSBWM0RfRVhQRUNURURfSURFTlQwIFwKKwkoKDIgPDwg MjQpIHwgXAorCSgnVicgPDwgMCkgfCBcCisJKCczJyA8PCA4KSB8IFwKKwkgKCdEJyA8PCAxNikp CisKKyNkZWZpbmUgVjNEX0lERU5UMSAgIDB4MDAwMDQKKy8qIE11bHRpcGxlcyBvZiAxa2IgKi8K KyMgZGVmaW5lIFYzRF9JREVOVDFfVlBNX1NJWkVfTUFTSyAgICAgICAgICAgICAgICAgICAgICBW QzRfTUFTSygzMSwgMjgpCisjIGRlZmluZSBWM0RfSURFTlQxX1ZQTV9TSVpFX1NISUZUICAgICAg ICAgICAgICAgICAgICAgMjgKKyMgZGVmaW5lIFYzRF9JREVOVDFfTlNFTV9NQVNLICAgICAgICAg ICAgICAgICAgICAgICAgICBWQzRfTUFTSygyMywgMTYpCisjIGRlZmluZSBWM0RfSURFTlQxX05T RU1fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyMgZGVmaW5lIFYzRF9JREVOVDFf VFVQU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICBWQzRfTUFTSygxNSwgMTIpCisjIGRl ZmluZSBWM0RfSURFTlQxX1RVUFNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyMg ZGVmaW5lIFYzRF9JREVOVDFfUVVQU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICBWQzRf TUFTSygxMSwgOCkKKyMgZGVmaW5lIFYzRF9JREVOVDFfUVVQU19TSElGVCAgICAgICAgICAgICAg ICAgICAgICAgICA4CisjIGRlZmluZSBWM0RfSURFTlQxX05TTENfTUFTSyAgICAgICAgICAgICAg ICAgICAgICAgICAgVkM0X01BU0soNywgNCkKKyMgZGVmaW5lIFYzRF9JREVOVDFfTlNMQ19TSElG VCAgICAgICAgICAgICAgICAgICAgICAgICA0CisjIGRlZmluZSBWM0RfSURFTlQxX1JFVl9NQVNL ICAgICAgICAgICAgICAgICAgICAgICAgICAgVkM0X01BU0soMywgMCkKKyMgZGVmaW5lIFYzRF9J REVOVDFfUkVWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKyNkZWZpbmUgVjNE X0lERU5UMiAgIDB4MDAwMDgKKyNkZWZpbmUgVjNEX1NDUkFUQ0ggIDB4MDAwMTAKKyNkZWZpbmUg VjNEX0wyQ0FDVEwgIDB4MDAwMjAKKyMgZGVmaW5lIFYzRF9MMkNBQ1RMX0wyQ0NMUiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQorIyBkZWZpbmUgVjNEX0wyQ0FDVExfTDJDRElT ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjIGRlZmluZSBWM0RfTDJDQUNU TF9MMkNFTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKworI2RlZmluZSBW M0RfU0xDQUNUTCAgMHgwMDAyNAorIyBkZWZpbmUgVjNEX1NMQ0FDVExfVDFDQ19NQVNLICAgICAg ICAgICAgICAgICAgICAgICAgIFZDNF9NQVNLKDI3LCAyNCkKKyMgZGVmaW5lIFYzRF9TTENBQ1RM X1QxQ0NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAyNAorIyBkZWZpbmUgVjNEX1NMQ0FD VExfVDBDQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIFZDNF9NQVNLKDE5LCAxNikKKyMg ZGVmaW5lIFYzRF9TTENBQ1RMX1QwQ0NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxNgor IyBkZWZpbmUgVjNEX1NMQ0FDVExfVUNDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIFZD NF9NQVNLKDExLCA4KQorIyBkZWZpbmUgVjNEX1NMQ0FDVExfVUNDX1NISUZUICAgICAgICAgICAg ICAgICAgICAgICAgIDgKKyMgZGVmaW5lIFYzRF9TTENBQ1RMX0lDQ19NQVNLICAgICAgICAgICAg ICAgICAgICAgICAgICBWQzRfTUFTSygzLCAwKQorIyBkZWZpbmUgVjNEX1NMQ0FDVExfSUNDX1NI SUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworI2RlZmluZSBWM0RfSU5UQ1RMICAgMHgw MDAzMAorI2RlZmluZSBWM0RfSU5URU5BICAgMHgwMDAzNAorI2RlZmluZSBWM0RfSU5URElTICAg MHgwMDAzOAorIyBkZWZpbmUgVjNEX0lOVF9TUElMTFVTRSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgxIDw8IDMpCisjIGRlZmluZSBWM0RfSU5UX09VVE9NRU0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKDEgPDwgMikKKyMgZGVmaW5lIFYzRF9JTlRfRkxET05FICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorIyBkZWZpbmUgVjNEX0lOVF9GUkRPTkUg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisKKyNkZWZpbmUgVjNEX0NU MENTICAgIDB4MDAxMDAKKyNkZWZpbmUgVjNEX0NUMUNTICAgIDB4MDAxMDQKKyNkZWZpbmUgVjNE X0NUTkNTKG4pIChWM0RfQ1QwQ1MgKyA0ICogbikKKyMgZGVmaW5lIFYzRF9DVFJTVEEgICAgICAo MSA8PCAxNSkKKyMgZGVmaW5lIFYzRF9DVFNFTUEgICAgICAoMSA8PCAxMikKKyMgZGVmaW5lIFYz RF9DVFJUU0QgICAgICAoMSA8PCA4KQorIyBkZWZpbmUgVjNEX0NUUlVOICAgICAgICgxIDw8IDUp CisjIGRlZmluZSBWM0RfQ1RTVUJTICAgICAgKDEgPDwgNCkKKyMgZGVmaW5lIFYzRF9DVEVSUiAg ICAgICAoMSA8PCAzKQorIyBkZWZpbmUgVjNEX0NUTU9ERSAgICAgICgxIDw8IDApCisKKyNkZWZp bmUgVjNEX0NUMEVBICAgIDB4MDAxMDgKKyNkZWZpbmUgVjNEX0NUMUVBICAgIDB4MDAxMGMKKyNk ZWZpbmUgVjNEX0NUTkVBKG4pIChWM0RfQ1QwRUEgKyA0ICogKG4pKQorI2RlZmluZSBWM0RfQ1Qw Q0EgICAgMHgwMDExMAorI2RlZmluZSBWM0RfQ1QxQ0EgICAgMHgwMDExNAorI2RlZmluZSBWM0Rf Q1ROQ0EobikgKFYzRF9DVDBDQSArIDQgKiAobikpCisjZGVmaW5lIFYzRF9DVDAwUkEwICAweDAw MTE4CisjZGVmaW5lIFYzRF9DVDAxUkEwICAweDAwMTFjCisjZGVmaW5lIFYzRF9DVE5SQTAobikg KFYzRF9DVDAwUkEwICsgNCAqIChuKSkKKyNkZWZpbmUgVjNEX0NUMExDICAgIDB4MDAxMjAKKyNk ZWZpbmUgVjNEX0NUMUxDICAgIDB4MDAxMjQKKyNkZWZpbmUgVjNEX0NUTkxDKG4pIChWM0RfQ1Qw TEMgKyA0ICogKG4pKQorI2RlZmluZSBWM0RfQ1QwUEMgICAgMHgwMDEyOAorI2RlZmluZSBWM0Rf Q1QxUEMgICAgMHgwMDEyYworI2RlZmluZSBWM0RfQ1ROUEMobikgKFYzRF9DVDBQQyArIDQgKiAo bikpCisKKyNkZWZpbmUgVjNEX1BDUyAgICAgIDB4MDAxMzAKKyMgZGVmaW5lIFYzRF9CTU9PTSAg ICAgICAoMSA8PCA4KQorIyBkZWZpbmUgVjNEX1JNQlVTWSAgICAgICgxIDw8IDMpCisjIGRlZmlu ZSBWM0RfUk1BQ1RJVkUgICAgKDEgPDwgMikKKyMgZGVmaW5lIFYzRF9CTUJVU1kgICAgICAoMSA8 PCAxKQorIyBkZWZpbmUgVjNEX0JNQUNUSVZFICAgICgxIDw8IDApCisKKyNkZWZpbmUgVjNEX0JG QyAgICAgIDB4MDAxMzQKKyNkZWZpbmUgVjNEX1JGQyAgICAgIDB4MDAxMzgKKyNkZWZpbmUgVjNE X0JQQ0EgICAgIDB4MDAzMDAKKyNkZWZpbmUgVjNEX0JQQ1MgICAgIDB4MDAzMDQKKyNkZWZpbmUg VjNEX0JQT0EgICAgIDB4MDAzMDgKKyNkZWZpbmUgVjNEX0JQT1MgICAgIDB4MDAzMGMKKyNkZWZp bmUgVjNEX0JYQ0YgICAgIDB4MDAzMTAKKyNkZWZpbmUgVjNEX1NRUlNWMCAgIDB4MDA0MTAKKyNk ZWZpbmUgVjNEX1NRUlNWMSAgIDB4MDA0MTQKKyNkZWZpbmUgVjNEX1NRQ05UTCAgIDB4MDA0MTgK KyNkZWZpbmUgVjNEX1NSUVBDICAgIDB4MDA0MzAKKyNkZWZpbmUgVjNEX1NSUVVBICAgIDB4MDA0 MzQKKyNkZWZpbmUgVjNEX1NSUVVMICAgIDB4MDA0MzgKKyNkZWZpbmUgVjNEX1NSUUNTICAgIDB4 MDA0M2MKKyNkZWZpbmUgVjNEX1ZQQUNOVEwgIDB4MDA1MDAKKyNkZWZpbmUgVjNEX1ZQTUJBU0Ug IDB4MDA1MDQKKyNkZWZpbmUgVjNEX1BDVFJDICAgIDB4MDA2NzAKKyNkZWZpbmUgVjNEX1BDVFJF ICAgIDB4MDA2NzQKKyNkZWZpbmUgVjNEX1BDVFIwICAgIDB4MDA2ODAKKyNkZWZpbmUgVjNEX1BD VFJTMCAgIDB4MDA2ODQKKyNkZWZpbmUgVjNEX1BDVFIxICAgIDB4MDA2ODgKKyNkZWZpbmUgVjNE X1BDVFJTMSAgIDB4MDA2OGMKKyNkZWZpbmUgVjNEX1BDVFIyICAgIDB4MDA2OTAKKyNkZWZpbmUg VjNEX1BDVFJTMiAgIDB4MDA2OTQKKyNkZWZpbmUgVjNEX1BDVFIzICAgIDB4MDA2OTgKKyNkZWZp bmUgVjNEX1BDVFJTMyAgIDB4MDA2OWMKKyNkZWZpbmUgVjNEX1BDVFI0ICAgIDB4MDA2YTAKKyNk ZWZpbmUgVjNEX1BDVFJTNCAgIDB4MDA2YTQKKyNkZWZpbmUgVjNEX1BDVFI1ICAgIDB4MDA2YTgK KyNkZWZpbmUgVjNEX1BDVFJTNSAgIDB4MDA2YWMKKyNkZWZpbmUgVjNEX1BDVFI2ICAgIDB4MDA2 YjAKKyNkZWZpbmUgVjNEX1BDVFJTNiAgIDB4MDA2YjQKKyNkZWZpbmUgVjNEX1BDVFI3ICAgIDB4 MDA2YjgKKyNkZWZpbmUgVjNEX1BDVFJTNyAgIDB4MDA2YmMKKyNkZWZpbmUgVjNEX1BDVFI4ICAg IDB4MDA2YzAKKyNkZWZpbmUgVjNEX1BDVFJTOCAgIDB4MDA2YzQKKyNkZWZpbmUgVjNEX1BDVFI5 ICAgIDB4MDA2YzgKKyNkZWZpbmUgVjNEX1BDVFJTOSAgIDB4MDA2Y2MKKyNkZWZpbmUgVjNEX1BD VFIxMCAgIDB4MDA2ZDAKKyNkZWZpbmUgVjNEX1BDVFJTMTAgIDB4MDA2ZDQKKyNkZWZpbmUgVjNE X1BDVFIxMSAgIDB4MDA2ZDgKKyNkZWZpbmUgVjNEX1BDVFJTMTEgIDB4MDA2ZGMKKyNkZWZpbmUg VjNEX1BDVFIxMiAgIDB4MDA2ZTAKKyNkZWZpbmUgVjNEX1BDVFJTMTIgIDB4MDA2ZTQKKyNkZWZp bmUgVjNEX1BDVFIxMyAgIDB4MDA2ZTgKKyNkZWZpbmUgVjNEX1BDVFJTMTMgIDB4MDA2ZWMKKyNk ZWZpbmUgVjNEX1BDVFIxNCAgIDB4MDA2ZjAKKyNkZWZpbmUgVjNEX1BDVFJTMTQgIDB4MDA2ZjQK KyNkZWZpbmUgVjNEX1BDVFIxNSAgIDB4MDA2ZjgKKyNkZWZpbmUgVjNEX1BDVFJTMTUgIDB4MDA2 ZmMKKyNkZWZpbmUgVjNEX0JHRSAgICAgIDB4MDBmMDAKKyNkZWZpbmUgVjNEX0ZEQkdPICAgIDB4 MDBmMDQKKyNkZWZpbmUgVjNEX0ZEQkdCICAgIDB4MDBmMDgKKyNkZWZpbmUgVjNEX0ZEQkdSICAg IDB4MDBmMGMKKyNkZWZpbmUgVjNEX0ZEQkdTICAgIDB4MDBmMTAKKyNkZWZpbmUgVjNEX0VSUlNU QVQgIDB4MDBmMjAKKworI2RlZmluZSBQVl9DT05UUk9MCQkJCTB4MDAKKyMgZGVmaW5lIFBWX0NP TlRST0xfRk9STUFUX01BU0sJCQlWQzRfTUFTSygyMywgMjEpCisjIGRlZmluZSBQVl9DT05UUk9M X0ZPUk1BVF9TSElGVAkJMjEKKyMgZGVmaW5lIFBWX0NPTlRST0xfRk9STUFUXzI0CQkJMAorIyBk ZWZpbmUgUFZfQ09OVFJPTF9GT1JNQVRfRFNJVl8xNgkJMQorIyBkZWZpbmUgUFZfQ09OVFJPTF9G T1JNQVRfRFNJQ18xNgkJMgorIyBkZWZpbmUgUFZfQ09OVFJPTF9GT1JNQVRfRFNJVl8xOAkJMwor IyBkZWZpbmUgUFZfQ09OVFJPTF9GT1JNQVRfRFNJVl8yNAkJNAorCisjIGRlZmluZSBQVl9DT05U Uk9MX0ZJRk9fTEVWRUxfTUFTSwkJVkM0X01BU0soMjAsIDE1KQorIyBkZWZpbmUgUFZfQ09OVFJP TF9GSUZPX0xFVkVMX1NISUZUCQkxNQorIyBkZWZpbmUgUFZfQ09OVFJPTF9DTFJfQVRfU1RBUlQJ CSgxIDw8IDE0KQorIyBkZWZpbmUgUFZfQ09OVFJPTF9UUklHR0VSX1VOREVSRkxPVwkJKDEgPDwg MTMpCisjIGRlZmluZSBQVl9DT05UUk9MX1dBSVRfSFNUQVJUCQkJKDEgPDwgMTIpCisjIGRlZmlu ZSBQVl9DT05UUk9MX0NMS19TRUxFQ1RfRFNJCQkwCisjIGRlZmluZSBQVl9DT05UUk9MX0NMS19T RUxFQ1RfRFBJX1NNSV9IRE1JCTEKKyMgZGVmaW5lIFBWX0NPTlRST0xfQ0xLX1NFTEVDVF9NQVNL CQlWQzRfTUFTSygzLCAyKQorIyBkZWZpbmUgUFZfQ09OVFJPTF9DTEtfU0VMRUNUX1NISUZUCQky CisjIGRlZmluZSBQVl9DT05UUk9MX0ZJRk9fQ0xSCQkJKDEgPDwgMSkKKyMgZGVmaW5lIFBWX0NP TlRST0xfRU4JCQkJKDEgPDwgMCkKKworI2RlZmluZSBQVl9WX0NPTlRST0wJCQkJMHgwNAorIyBk ZWZpbmUgUFZfVkNPTlRST0xfQ09OVElOVU9VUwkJCSgxIDw8IDEpCisjIGRlZmluZSBQVl9WQ09O VFJPTF9WSURFTgkJCSgxIDw8IDApCisKKyNkZWZpbmUgUFZfVlNZTkNECQkJCTB4MDgKKworI2Rl ZmluZSBQVl9IT1JaQQkJCQkweDBjCisjIGRlZmluZSBQVl9IT1JaQV9IQlBfTUFTSwkJCVZDNF9N QVNLKDMxLCAxNikKKyMgZGVmaW5lIFBWX0hPUlpBX0hCUF9TSElGVAkJCTE2CisjIGRlZmluZSBQ Vl9IT1JaQV9IU1lOQ19NQVNLCQkJVkM0X01BU0soMTUsIDApCisjIGRlZmluZSBQVl9IT1JaQV9I U1lOQ19TSElGVAkJCTAKKworI2RlZmluZSBQVl9IT1JaQgkJCQkweDEwCisjIGRlZmluZSBQVl9I T1JaQl9IRlBfTUFTSwkJCVZDNF9NQVNLKDMxLCAxNikKKyMgZGVmaW5lIFBWX0hPUlpCX0hGUF9T SElGVAkJCTE2CisjIGRlZmluZSBQVl9IT1JaQl9IQUNUSVZFX01BU0sJCQlWQzRfTUFTSygxNSwg MCkKKyMgZGVmaW5lIFBWX0hPUlpCX0hBQ1RJVkVfU0hJRlQJCQkwCisKKyNkZWZpbmUgUFZfVkVS VEEJCQkJMHgxNAorIyBkZWZpbmUgUFZfVkVSVEFfVkJQX01BU0sJCQlWQzRfTUFTSygzMSwgMTYp CisjIGRlZmluZSBQVl9WRVJUQV9WQlBfU0hJRlQJCQkxNgorIyBkZWZpbmUgUFZfVkVSVEFfVlNZ TkNfTUFTSwkJCVZDNF9NQVNLKDE1LCAwKQorIyBkZWZpbmUgUFZfVkVSVEFfVlNZTkNfU0hJRlQJ CQkwCisKKyNkZWZpbmUgUFZfVkVSVEIJCQkJMHgxOAorIyBkZWZpbmUgUFZfVkVSVEJfVkZQX01B U0sJCQlWQzRfTUFTSygzMSwgMTYpCisjIGRlZmluZSBQVl9WRVJUQl9WRlBfU0hJRlQJCQkxNgor IyBkZWZpbmUgUFZfVkVSVEJfVkFDVElWRV9NQVNLCQkJVkM0X01BU0soMTUsIDApCisjIGRlZmlu ZSBQVl9WRVJUQl9WQUNUSVZFX1NISUZUCQkJMAorCisjZGVmaW5lIFBWX1ZFUlRBX0VWRU4JCQkJ MHgxYworI2RlZmluZSBQVl9WRVJUQl9FVkVOCQkJCTB4MjAKKworI2RlZmluZSBQVl9JTlRFTgkJ CQkweDI0CisjZGVmaW5lIFBWX0lOVFNUQVQJCQkJMHgyOAorIyBkZWZpbmUgUFZfSU5UX1ZJRF9J RExFCQkJKDEgPDwgOSkKKyMgZGVmaW5lIFBWX0lOVF9WRlBfRU5ECQkJCSgxIDw8IDgpCisjIGRl ZmluZSBQVl9JTlRfVkZQX1NUQVJUCQkJKDEgPDwgNykKKyMgZGVmaW5lIFBWX0lOVF9WQUNUX1NU QVJUCQkJKDEgPDwgNikKKyMgZGVmaW5lIFBWX0lOVF9WQlBfU1RBUlQJCQkoMSA8PCA1KQorIyBk ZWZpbmUgUFZfSU5UX1ZTWU5DX1NUQVJUCQkJKDEgPDwgNCkKKyMgZGVmaW5lIFBWX0lOVF9IRlBf U1RBUlQJCQkoMSA8PCAzKQorIyBkZWZpbmUgUFZfSU5UX0hBQ1RfU1RBUlQJCQkoMSA8PCAyKQor IyBkZWZpbmUgUFZfSU5UX0hCUF9TVEFSVAkJCSgxIDw8IDEpCisjIGRlZmluZSBQVl9JTlRfSFNZ TkNfU1RBUlQJCQkoMSA8PCAwKQorCisjZGVmaW5lIFBWX1NUQVQJCQkJCTB4MmMKKworI2RlZmlu ZSBQVl9IQUNUX0FDVAkJCQkweDMwCisKKyNkZWZpbmUgU0NBTEVSX0RJU1BDVFJMICAgICAgICAg ICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKy8qIEdsb2JhbCByZWdpc3RlciBmb3IgY2xvY2sg Z2F0aW5nIHRoZSBIVlMgKi8KKyMgZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTF9FTkFCTEUJCQkoMSA8 PCAzMSkKKyMgZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTF9EU1AyRUlTTFVSCQkoMSA8PCAxNSkKKyMg ZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTF9EU1AxRUlTTFVSCQkoMSA8PCAxNCkKKy8qIEVuYWJsZXMg RGlzcGxheSAwIHNob3J0IGxpbmUgYW5kIHVuZGVycnVuIGNvbnRyaWJ1dGlvbiB0bworICogU0NB TEVSX0RJU1BTVEFUX0lSUURJU1AwLiAgTm90ZSB0aGF0IHNob3J0IGZyYW1lIGNvbnRyaWJ1dGlv bnMgYXJlCisgKiBhbHdheXMgZW5hYmxlZC4KKyAqLworIyBkZWZpbmUgU0NBTEVSX0RJU1BDVFJM X0RTUDBFSVNMVVIJCSgxIDw8IDEzKQorIyBkZWZpbmUgU0NBTEVSX0RJU1BDVFJMX0RTUDJFSUVP TE4JCSgxIDw8IDEyKQorIyBkZWZpbmUgU0NBTEVSX0RJU1BDVFJMX0RTUDJFSUVPRgkJKDEgPDwg MTEpCisjIGRlZmluZSBTQ0FMRVJfRElTUENUUkxfRFNQMUVJRU9MTgkJKDEgPDwgMTApCisjIGRl ZmluZSBTQ0FMRVJfRElTUENUUkxfRFNQMUVJRU9GCQkoMSA8PCA5KQorLyogRW5hYmxlcyBEaXNw bGF5IDAgZW5kLW9mLWxpbmUtTiBjb250cmlidXRpb24gdG8KKyAqIFNDQUxFUl9ESVNQU1RBVF9J UlFESVNQMAorICovCisjIGRlZmluZSBTQ0FMRVJfRElTUENUUkxfRFNQMEVJRU9MTgkJKDEgPDwg OCkKKy8qIEVuYWJsZXMgRGlzcGxheSAwIEVPRiBjb250cmlidXRpb24gdG8gU0NBTEVSX0RJU1BT VEFUX0lSUURJU1AwICovCisjIGRlZmluZSBTQ0FMRVJfRElTUENUUkxfRFNQMEVJRU9GCQkoMSA8 PCA3KQorCisjIGRlZmluZSBTQ0FMRVJfRElTUENUUkxfU0xWUkRFSVJRCQkoMSA8PCA2KQorIyBk ZWZpbmUgU0NBTEVSX0RJU1BDVFJMX1NMVldSRUlSUQkJKDEgPDwgNSkKKyMgZGVmaW5lIFNDQUxF Ul9ESVNQQ1RSTF9ETUFFSVJRCQkoMSA8PCA0KQorIyBkZWZpbmUgU0NBTEVSX0RJU1BDVFJMX0RJ U1AyRUlSUQkJKDEgPDwgMykKKyMgZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTF9ESVNQMUVJUlEJCSgx IDw8IDIpCisvKiBFbmFibGVzIGludGVycnVwdCBnZW5lcmF0aW9uIG9uIHRoZSBlbmFibGVkIEVP Ri9FT0xOL0VJU0xVUgorICogYml0cyBhbmQgc2hvcnQgZnJhbWVzLi4KKyAqLworIyBkZWZpbmUg U0NBTEVSX0RJU1BDVFJMX0RJU1AwRUlSUQkJKDEgPDwgMSkKKy8qIEVuYWJsZXMgaW50ZXJydXB0 IGdlbmVyYXRpb24gb24gc2NhbGVyIHByb2ZpbGVyIGludGVycnVwdC4gKi8KKyMgZGVmaW5lIFND QUxFUl9ESVNQQ1RSTF9TQ0xFSVJRCQkoMSA8PCAwKQorCisjZGVmaW5lIFNDQUxFUl9ESVNQU1RB VCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjIGRlZmluZSBTQ0FMRVJfRElT UFNUQVRfQ09CTE9XMgkJKDEgPDwgMjkpCisjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfRU9MTjIJ CQkoMSA8PCAyOCkKKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVF9FU0ZSQU1FMgkJKDEgPDwgMjcp CisjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfRVNMSU5FMgkJKDEgPDwgMjYpCisjIGRlZmluZSBT Q0FMRVJfRElTUFNUQVRfRVVGTE9XMgkJKDEgPDwgMjUpCisjIGRlZmluZSBTQ0FMRVJfRElTUFNU QVRfRU9GMgkJCSgxIDw8IDI0KQorCisjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfQ09CTE9XMQkJ KDEgPDwgMjEpCisjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfRU9MTjEJCQkoMSA8PCAyMCkKKyMg ZGVmaW5lIFNDQUxFUl9ESVNQU1RBVF9FU0ZSQU1FMQkJKDEgPDwgMTkpCisjIGRlZmluZSBTQ0FM RVJfRElTUFNUQVRfRVNMSU5FMQkJKDEgPDwgMTgpCisjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRf RVVGTE9XMQkJKDEgPDwgMTcpCisjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfRU9GMQkJCSgxIDw8 IDE2KQorCisjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfUkVTUF9NQVNLCQlWQzRfTUFTSygxNSwg MTQpCisjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfUkVTUF9TSElGVAkJMTQKKyMgZGVmaW5lIFND QUxFUl9ESVNQU1RBVF9SRVNQX09LQVkJCTAKKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVF9SRVNQ X0VYT0tBWQkJMQorIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX1JFU1BfU0xWRVJSCQkyCisjIGRl ZmluZSBTQ0FMRVJfRElTUFNUQVRfUkVTUF9ERUNFUlIJCTMKKworIyBkZWZpbmUgU0NBTEVSX0RJ U1BTVEFUX0NPQkxPVzAJCSgxIDw8IDEzKQorLyogU2V0IHdoZW4gdGhlIERJU1BFT0xOIGxpbmUg aXMgZG9uZSBjb21wb3NpdGluZy4gKi8KKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVF9FT0xOMAkJ CSgxIDw8IDEyKQorLyogU2V0IHdoZW4gVlNUQVJUIGlzIHNlZW4gYnV0IHRoZXJlIGFyZSBzdGls bCBwaXhlbHMgaW4gdGhlIGN1cnJlbnQKKyAqIG91dHB1dCBsaW5lLgorICovCisjIGRlZmluZSBT Q0FMRVJfRElTUFNUQVRfRVNGUkFNRTAJCSgxIDw8IDExKQorLyogU2V0IHdoZW4gSFNUQVJUIGlz IHNlZW4gYnV0IHRoZXJlIGFyZSBzdGlsbCBwaXhlbHMgaW4gdGhlIGN1cnJlbnQKKyAqIG91dHB1 dCBsaW5lLgorICovCisjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfRVNMSU5FMAkJKDEgPDwgMTAp CisvKiBTZXQgd2hlbiB0aGUgdGhlIGRvd25zdHJlYW0gdHJpZXMgdG8gcmVhZCBmcm9tIHRoZSBk aXNwbGF5IEZJRk8KKyAqIHdoaWxlIGl0J3MgZW1wdHkuCisgKi8KKyMgZGVmaW5lIFNDQUxFUl9E SVNQU1RBVF9FVUZMT1cwCQkoMSA8PCA5KQorLyogU2V0IHdoZW4gdGhlIGRpc3BsYXkgbW9kZSBj aGFuZ2VzIGZyb20gUlVOIHRvIEVPRiAqLworIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0VPRjAJ CQkoMSA8PCA4KQorCisvKiBTZXQgb24gQVhJIGludmFsaWQgRE1BIElEIGVycm9yLiAqLworIyBk ZWZpbmUgU0NBTEVSX0RJU1BTVEFUX0RNQV9FUlJPUgkJKDEgPDwgNykKKy8qIFNldCBvbiBBWEkg c2xhdmUgcmVhZCBkZWNvZGUgZXJyb3IgKi8KKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVF9JUlFT TFZSRAkJKDEgPDwgNikKKy8qIFNldCBvbiBBWEkgc2xhdmUgd3JpdGUgZGVjb2RlIGVycm9yICov CisjIGRlZmluZSBTQ0FMRVJfRElTUFNUQVRfSVJRU0xWV1IJCSgxIDw8IDUpCisvKiBTZXQgd2hl biBTQ0FMRVJfRElTUFNUQVRfRE1BX0VSUk9SIGlzIHNldCwgb3IKKyAqIFNDQUxFUl9ESVNQU1RB VF9SRVNQX0VSUk9SIGlzIG5vdCBTQ0FMRVJfRElTUFNUQVRfUkVTUF9PS0FZLgorICovCisjIGRl ZmluZSBTQ0FMRVJfRElTUFNUQVRfSVJRRE1BCQkJKDEgPDwgNCkKKyMgZGVmaW5lIFNDQUxFUl9E SVNQU1RBVF9JUlFESVNQMgkJKDEgPDwgMykKKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVF9JUlFE SVNQMQkJKDEgPDwgMikKKy8qIFNldCB3aGVuIGFueSBvZiB0aGUgRU9GL0VPTE4vRVNGUkFNRS9F U0xJTkUgYml0cyBhcmUgc2V0IGFuZCB0aGVpcgorICogY29ycmVzcG9uZGluZyBpbnRlcnJ1cHQg Yml0IGlzIGVuYWJsZWQgaW4gRElTUENUUkwuCisgKi8KKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RB VF9JUlFESVNQMAkJKDEgPDwgMSkKKy8qIE9uIHJlYWQsIHRoZSBwcm9maWxlciBpbnRlcnJ1cHQu ICBPbiB3cml0ZSwgY2xlYXIgKmFsbCogaW50ZXJydXB0IGJpdHMuICovCisjIGRlZmluZSBTQ0FM RVJfRElTUFNUQVRfSVJRU0NMCQkJKDEgPDwgMCkKKworI2RlZmluZSBTQ0FMRVJfRElTUElEICAg ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBTQ0FMRVJfRElTUEVD VFJMICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYworI2RlZmluZSBTQ0FMRVJfRElT UFBST0YgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBTQ0FMRVJf RElTUERJVEhFUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorI2RlZmluZSBTQ0FM RVJfRElTUEVPTE4gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBT Q0FMRVJfRElTUExJU1QwICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmlu ZSBTQ0FMRVJfRElTUExJU1QxICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNAorI2Rl ZmluZSBTQ0FMRVJfRElTUExJU1QyICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOAor I2RlZmluZSBTQ0FMRVJfRElTUExTVEFUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAy YworI2RlZmluZSBTQ0FMRVJfRElTUExJU1RYKHgpCQkJKFNDQUxFUl9ESVNQTElTVDAgKwlcCisJ CQkJCQkgKHgpICogKFNDQUxFUl9ESVNQTElTVDEgLSBcCisJCQkJCQkJU0NBTEVSX0RJU1BMSVNU MCkpCisKKyNkZWZpbmUgU0NBTEVSX0RJU1BMQUNUMCAgICAgICAgICAgICAgICAgICAgICAgIDB4 MDAwMDAwMzAKKyNkZWZpbmUgU0NBTEVSX0RJU1BMQUNUMSAgICAgICAgICAgICAgICAgICAgICAg IDB4MDAwMDAwMzQKKyNkZWZpbmUgU0NBTEVSX0RJU1BMQUNUMiAgICAgICAgICAgICAgICAgICAg ICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgU0NBTEVSX0RJU1BDVFJMMCAgICAgICAgICAgICAgICAg ICAgICAgIDB4MDAwMDAwNDAKKyMgZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTFhfRU5BQkxFCQkoMSA8 PCAzMSkKKyMgZGVmaW5lIFNDQUxFUl9ESVNQQ1RSTFhfUkVTRVQJCQkoMSA8PCAzMCkKKyMgZGVm aW5lIFNDQUxFUl9ESVNQQ1RSTFhfV0lEVEhfTUFTSwkJVkM0X01BU0soMjMsIDEyKQorIyBkZWZp bmUgU0NBTEVSX0RJU1BDVFJMWF9XSURUSF9TSElGVAkJMTIKKyMgZGVmaW5lIFNDQUxFUl9ESVNQ Q1RSTFhfSEVJR0hUX01BU0sJCVZDNF9NQVNLKDExLCAwKQorIyBkZWZpbmUgU0NBTEVSX0RJU1BD VFJMWF9IRUlHSFRfU0hJRlQJCTAKKworI2RlZmluZSBTQ0FMRVJfRElTUEJLR05EMCAgICAgICAg ICAgICAgICAgICAgICAgMHgwMDAwMDA0NAorI2RlZmluZSBTQ0FMRVJfRElTUFNUQVQwICAgICAg ICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0OAorI2RlZmluZSBTQ0FMRVJfRElTUEJBU0UwICAg ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0YworIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFU WF9NT0RFX01BU0sJCVZDNF9NQVNLKDMxLCAzMCkKKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVFhf TU9ERV9TSElGVAkJMzAKKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVFhfTU9ERV9ESVNBQkxFRAkJ MAorIyBkZWZpbmUgU0NBTEVSX0RJU1BTVEFUWF9NT0RFX0lOSVQJCTEKKyMgZGVmaW5lIFNDQUxF Ul9ESVNQU1RBVFhfTU9ERV9SVU4JCTIKKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVFhfTU9ERV9F T0YJCTMKKyMgZGVmaW5lIFNDQUxFUl9ESVNQU1RBVFhfRlVMTAkJCSgxIDw8IDI5KQorIyBkZWZp bmUgU0NBTEVSX0RJU1BTVEFUWF9FTVBUWQkJCSgxIDw8IDI4KQorI2RlZmluZSBTQ0FMRVJfRElT UENUUkwxICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1MAorI2RlZmluZSBTQ0FMRVJf RElTUEJLR05EMSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1NAorI2RlZmluZSBTQ0FM RVJfRElTUFNUQVQxICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1OAorI2RlZmluZSBT Q0FMRVJfRElTUFNUQVRYKHgpCQkJKFNDQUxFUl9ESVNQU1RBVDAgKyAgICAgICAgXAorCQkJCQkJ ICh4KSAqIChTQ0FMRVJfRElTUFNUQVQxIC0gXAorCQkJCQkJCVNDQUxFUl9ESVNQU1RBVDApKQor I2RlZmluZSBTQ0FMRVJfRElTUEJBU0UxICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA1 YworI2RlZmluZSBTQ0FMRVJfRElTUENUUkwyICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAw MDA2MAorI2RlZmluZSBTQ0FMRVJfRElTUENUUkxYKHgpCQkJKFNDQUxFUl9ESVNQQ1RSTDAgKyAg ICAgICAgXAorCQkJCQkJICh4KSAqIChTQ0FMRVJfRElTUENUUkwxIC0gXAorCQkJCQkJCVNDQUxF Ul9ESVNQQ1RSTDApKQorI2RlZmluZSBTQ0FMRVJfRElTUEJLR05EMiAgICAgICAgICAgICAgICAg ICAgICAgMHgwMDAwMDA2NAorI2RlZmluZSBTQ0FMRVJfRElTUFNUQVQyICAgICAgICAgICAgICAg ICAgICAgICAgMHgwMDAwMDA2OAorI2RlZmluZSBTQ0FMRVJfRElTUEJBU0UyICAgICAgICAgICAg ICAgICAgICAgICAgMHgwMDAwMDA2YworI2RlZmluZSBTQ0FMRVJfRElTUEFMUEhBMiAgICAgICAg ICAgICAgICAgICAgICAgMHgwMDAwMDA3MAorI2RlZmluZSBTQ0FMRVJfR0FNQUREUiAgICAgICAg ICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3OAorI2RlZmluZSBTQ0FMRVJfR0FNREFUQSAgICAg ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBlMAorI2RlZmluZSBTQ0FMRVJfRExJU1RfU1RB UlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBTQ0FMRVJfRExJU1Rf U0laRSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorCisjZGVmaW5lIFZDNF9IRE1J X0NPUkVfUkVWCQkJMHgwMDAKKworI2RlZmluZSBWQzRfSERNSV9TV19SRVNFVF9DT05UUk9MCQkw eDAwNAorIyBkZWZpbmUgVkM0X0hETUlfU1dfUkVTRVRfRk9STUFUX0RFVEVDVAkoMSA8PCAxKQor IyBkZWZpbmUgVkM0X0hETUlfU1dfUkVTRVRfSERNSQkJCSgxIDw8IDApCisKKyNkZWZpbmUgVkM0 X0hETUlfSE9UUExVR19JTlQJCQkweDAwOAorCisjZGVmaW5lIFZDNF9IRE1JX0hPVFBMVUcJCQkw eDAwYworIyBkZWZpbmUgVkM0X0hETUlfSE9UUExVR19DT05ORUNURUQJCSgxIDw8IDApCisKKyNk ZWZpbmUgVkM0X0hETUlfUkFNX1BBQ0tFVF9DT05GSUcJCTB4MGEwCisjIGRlZmluZSBWQzRfSERN SV9SQU1fUEFDS0VUX0VOQUJMRQkJKDEgPDwgMTYpCisKKyNkZWZpbmUgVkM0X0hETUlfSE9SWkEJ CQkJMHgwYzQKKyMgZGVmaW5lIFZDNF9IRE1JX0hPUlpBX1ZQT1MJCQkoMSA8PCAxNCkKKyMgZGVm aW5lIFZDNF9IRE1JX0hPUlpBX0hQT1MJCQkoMSA8PCAxMykKKy8qIEhvcml6b250YWwgYWN0aXZl IHBpeGVscyAoaGRpc3BsYXkpLiAqLworIyBkZWZpbmUgVkM0X0hETUlfSE9SWkFfSEFQX01BU0sJ CVZDNF9NQVNLKDEyLCAwKQorIyBkZWZpbmUgVkM0X0hETUlfSE9SWkFfSEFQX1NISUZUCQkwCisK KyNkZWZpbmUgVkM0X0hETUlfSE9SWkIJCQkJMHgwYzgKKy8qIEhvcml6b250YWwgcGFjayBwb3Jj aCAoaHRvdGFsIC0gaHN5bmNfZW5kKS4gKi8KKyMgZGVmaW5lIFZDNF9IRE1JX0hPUlpCX0hCUF9N QVNLCQlWQzRfTUFTSygyOSwgMjApCisjIGRlZmluZSBWQzRfSERNSV9IT1JaQl9IQlBfU0hJRlQJ CTIwCisvKiBIb3Jpem9udGFsIHN5bmMgcHVsc2UgKGhzeW5jX2VuZCAtIGhzeW5jX3N0YXJ0KS4g Ki8KKyMgZGVmaW5lIFZDNF9IRE1JX0hPUlpCX0hTUF9NQVNLCQlWQzRfTUFTSygxOSwgMTApCisj IGRlZmluZSBWQzRfSERNSV9IT1JaQl9IU1BfU0hJRlQJCTEwCisvKiBIb3Jpem9udGFsIGZyb250 IHBvcmNoIChoc3luY19zdGFydCAtIGhkaXNwbGF5KS4gKi8KKyMgZGVmaW5lIFZDNF9IRE1JX0hP UlpCX0hGUF9NQVNLCQlWQzRfTUFTSyg5LCAwKQorIyBkZWZpbmUgVkM0X0hETUlfSE9SWkJfSEZQ X1NISUZUCQkwCisKKyNkZWZpbmUgVkM0X0hETUlfRklGT19DVEwJCQkweDA1YworIyBkZWZpbmUg VkM0X0hETUlfRklGT19DVExfUkVDRU5URVJfRE9ORQkoMSA8PCAxNCkKKyMgZGVmaW5lIFZDNF9I RE1JX0ZJRk9fQ1RMX1VTRV9FTVBUWQkJKDEgPDwgMTMpCisjIGRlZmluZSBWQzRfSERNSV9GSUZP X0NUTF9PTl9WQgkJKDEgPDwgNykKKyMgZGVmaW5lIFZDNF9IRE1JX0ZJRk9fQ1RMX1JFQ0VOVEVS CQkoMSA8PCA2KQorIyBkZWZpbmUgVkM0X0hETUlfRklGT19DVExfRklGT19SRVNFVAkJKDEgPDwg NSkKKyMgZGVmaW5lIFZDNF9IRE1JX0ZJRk9fQ1RMX1VTRV9QTExfTE9DSwkJKDEgPDwgNCkKKyMg ZGVmaW5lIFZDNF9IRE1JX0ZJRk9fQ1RMX0lOVl9DTEtfWEZSCQkoMSA8PCAzKQorIyBkZWZpbmUg VkM0X0hETUlfRklGT19DVExfQ0FQVFVSRV9QVFIJCSgxIDw8IDIpCisjIGRlZmluZSBWQzRfSERN SV9GSUZPX0NUTF9VU0VfRlVMTAkJKDEgPDwgMSkKKyMgZGVmaW5lIFZDNF9IRE1JX0ZJRk9fQ1RM X01BU1RFUl9TTEFWRV9OCSgxIDw8IDApCisjIGRlZmluZSBWQzRfSERNSV9GSUZPX1ZBTElEX1dS SVRFX01BU0sJCTB4ZWZmZgorCisjZGVmaW5lIFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MCQkw eDBjMAorIyBkZWZpbmUgVkM0X0hETUlfU0NIRURVTEVSX0NPTlRST0xfTUFOVUFMX0ZPUk1BVCAo MSA8PCAxNSkKKyMgZGVmaW5lIFZDNF9IRE1JX1NDSEVEVUxFUl9DT05UUk9MX0lHTk9SRV9WU1lO Q19QUkVESUNUUyAoMSA8PCA1KQorIyBkZWZpbmUgVkM0X0hETUlfU0NIRURVTEVSX0NPTlRST0xf VkVSVF9BTFdBWVNfS0VFUE9VVAkoMSA8PCAzKQorIyBkZWZpbmUgVkM0X0hETUlfU0NIRURVTEVS X0NPTlRST0xfSERNSV9BQ1RJVkUJKDEgPDwgMSkKKyMgZGVmaW5lIFZDNF9IRE1JX1NDSEVEVUxF Ul9DT05UUk9MX01PREVfSERNSQkoMSA8PCAwKQorCisjZGVmaW5lIFZDNF9IRE1JX1ZFUlRBMAkJ CQkweDBjYworI2RlZmluZSBWQzRfSERNSV9WRVJUQTEJCQkJMHgwZDQKKy8qIFZlcnRpY2FsIHN5 bmMgcHVsc2UgKHZzeW5jX2VuZCAtIHZzeW5jX3N0YXJ0KS4gKi8KKyMgZGVmaW5lIFZDNF9IRE1J X1ZFUlRBX1ZTUF9NQVNLCQlWQzRfTUFTSygyNCwgMjApCisjIGRlZmluZSBWQzRfSERNSV9WRVJU QV9WU1BfU0hJRlQJCTIwCisvKiBWZXJ0aWNhbCBmcm9udCBwb3JjaCAodnN5bmNfc3RhcnQgLSB2 ZGlzcGxheSkuICovCisjIGRlZmluZSBWQzRfSERNSV9WRVJUQV9WRlBfTUFTSwkJVkM0X01BU0so MTksIDEzKQorIyBkZWZpbmUgVkM0X0hETUlfVkVSVEFfVkZQX1NISUZUCQkxMworLyogVmVydGlj YWwgYWN0aXZlIGxpbmVzICh2ZGlzcGxheSkuICovCisjIGRlZmluZSBWQzRfSERNSV9WRVJUQV9W QUxfTUFTSwkJVkM0X01BU0soMTIsIDApCisjIGRlZmluZSBWQzRfSERNSV9WRVJUQV9WQUxfU0hJ RlQJCTAKKworI2RlZmluZSBWQzRfSERNSV9WRVJUQjAJCQkJMHgwZDAKKyNkZWZpbmUgVkM0X0hE TUlfVkVSVEIxCQkJCTB4MGQ4CisvKiBWZXJ0aWNhbCBzeW5jIHB1bHNlIG9mZnNldCAoZm9yIGlu dGVybGFjZWQpICovCisjIGRlZmluZSBWQzRfSERNSV9WRVJUQl9WU1BPX01BU0sJCVZDNF9NQVNL KDIxLCA5KQorIyBkZWZpbmUgVkM0X0hETUlfVkVSVEJfVlNQT19TSElGVAkJOQorLyogVmVydGlj YWwgcGFjayBwb3JjaCAodnRvdGFsIC0gdnN5bmNfZW5kKS4gKi8KKyMgZGVmaW5lIFZDNF9IRE1J X1ZFUlRCX1ZCUF9NQVNLCQlWQzRfTUFTSyg4LCAwKQorIyBkZWZpbmUgVkM0X0hETUlfVkVSVEJf VkJQX1NISUZUCQkwCisKKyNkZWZpbmUgVkM0X0hETUlfVFhfUEhZX1JFU0VUX0NUTAkJMHgyYzAK KworI2RlZmluZSBWQzRfSERfTV9DVEwJCQkJMHgwMGMKKyMgZGVmaW5lIFZDNF9IRF9NX1NXX1JT VAkJCSgxIDw8IDIpCisjIGRlZmluZSBWQzRfSERfTV9FTkFCTEUJCQkoMSA8PCAwKQorCisjZGVm aW5lIFZDNF9IRF9NQUlfQ1RMCQkJCTB4MDE0CisKKyNkZWZpbmUgVkM0X0hEX1ZJRF9DVEwJCQkJ MHgwMzgKKyMgZGVmaW5lIFZDNF9IRF9WSURfQ1RMX0VOQUJMRQkJCSgxIDw8IDMxKQorIyBkZWZp bmUgVkM0X0hEX1ZJRF9DVExfVU5ERVJGTE9XX0VOQUJMRQkoMSA8PCAzMCkKKyMgZGVmaW5lIFZD NF9IRF9WSURfQ1RMX0ZSQU1FX0NPVU5URVJfUkVTRVQJKDEgPDwgMjkpCisjIGRlZmluZSBWQzRf SERfVklEX0NUTF9WU1lOQ19MT1cJCSgxIDw8IDI4KQorIyBkZWZpbmUgVkM0X0hEX1ZJRF9DVExf SFNZTkNfTE9XCQkoMSA8PCAyNykKKworI2RlZmluZSBWQzRfSERfQ1NDX0NUTAkJCQkweDA0MAor IyBkZWZpbmUgVkM0X0hEX0NTQ19DVExfT1JERVJfTUFTSwkJVkM0X01BU0soNywgNSkKKyMgZGVm aW5lIFZDNF9IRF9DU0NfQ1RMX09SREVSX1NISUZUCQk1CisjIGRlZmluZSBWQzRfSERfQ1NDX0NU TF9PUkRFUl9SR0IJCTAKKyMgZGVmaW5lIFZDNF9IRF9DU0NfQ1RMX09SREVSX0JHUgkJMQorIyBk ZWZpbmUgVkM0X0hEX0NTQ19DVExfT1JERVJfQlJHCQkyCisjIGRlZmluZSBWQzRfSERfQ1NDX0NU TF9PUkRFUl9HUkIJCTMKKyMgZGVmaW5lIFZDNF9IRF9DU0NfQ1RMX09SREVSX0dCUgkJNAorIyBk ZWZpbmUgVkM0X0hEX0NTQ19DVExfT1JERVJfUkJHCQk1CisjIGRlZmluZSBWQzRfSERfQ1NDX0NU TF9QQURNU0IJCQkoMSA8PCA0KQorIyBkZWZpbmUgVkM0X0hEX0NTQ19DVExfTU9ERV9NQVNLCQlW QzRfTUFTSygzLCAyKQorIyBkZWZpbmUgVkM0X0hEX0NTQ19DVExfTU9ERV9TSElGVAkJMgorIyBk ZWZpbmUgVkM0X0hEX0NTQ19DVExfTU9ERV9SR0JfVE9fU0RfWVBSUEIJMAorIyBkZWZpbmUgVkM0 X0hEX0NTQ19DVExfTU9ERV9SR0JfVE9fSERfWVBSUEIJMQorIyBkZWZpbmUgVkM0X0hEX0NTQ19D VExfTU9ERV9DVVNUT00JCTIKKyMgZGVmaW5lIFZDNF9IRF9DU0NfQ1RMX1JHQjJZQ0MJCQkoMSA8 PCAxKQorIyBkZWZpbmUgVkM0X0hEX0NTQ19DVExfRU5BQkxFCQkJKDEgPDwgMCkKKworI2RlZmlu ZSBWQzRfSERfRlJBTUVfQ09VTlQJCQkweDA2OAorCisvKiBIVlMgZGlzcGxheSBsaXN0IGluZm9y bWF0aW9uLiAqLworI2RlZmluZSBIVlNfQk9PVExPQURFUl9ETElTVF9FTkQgICAgICAgICAgICAg ICAgMzIKKworZW51bSBodnNfcGl4ZWxfZm9ybWF0IHsKKwkvKiA4YnBwICovCisJSFZTX1BJWEVM X0ZPUk1BVF9SR0IzMzIgPSAwLAorCS8qIDE2YnBwICovCisJSFZTX1BJWEVMX0ZPUk1BVF9SR0JB NDQ0NCA9IDEsCisJSFZTX1BJWEVMX0ZPUk1BVF9SR0I1NTUgPSAyLAorCUhWU19QSVhFTF9GT1JN QVRfUkdCQTU1NTEgPSAzLAorCUhWU19QSVhFTF9GT1JNQVRfUkdCNTY1ID0gNCwKKwkvKiAyNGJw cCAqLworCUhWU19QSVhFTF9GT1JNQVRfUkdCODg4ID0gNSwKKwlIVlNfUElYRUxfRk9STUFUX1JH QkE2NjY2ID0gNiwKKwkvKiAzMmJwcCAqLworCUhWU19QSVhFTF9GT1JNQVRfUkdCQTg4ODggPSA3 Cit9OworCisvKiBOb3RlOiB0aGUgTFNCIGlzIHRoZSByaWdodG1vc3QgY2hhcmFjdGVyIHNob3du LiAgT25seSB2YWxpZCBmb3IKKyAqIEhWU19QSVhFTF9GT1JNQVRfUkdCODg4OCwgbm90IFJHQjg4 OC4KKyAqLworI2RlZmluZSBIVlNfUElYRUxfT1JERVJfUkdCQQkJCTAKKyNkZWZpbmUgSFZTX1BJ WEVMX09SREVSX0JHUkEJCQkxCisjZGVmaW5lIEhWU19QSVhFTF9PUkRFUl9BUkdCCQkJMgorI2Rl ZmluZSBIVlNfUElYRUxfT1JERVJfQUJHUgkJCTMKKworI2RlZmluZSBIVlNfUElYRUxfT1JERVJf WEJSRwkJCTAKKyNkZWZpbmUgSFZTX1BJWEVMX09SREVSX1hSQkcJCQkxCisjZGVmaW5lIEhWU19Q SVhFTF9PUkRFUl9YUkdCCQkJMgorI2RlZmluZSBIVlNfUElYRUxfT1JERVJfWEJHUgkJCTMKKwor I2RlZmluZSBIVlNfUElYRUxfT1JERVJfWFlDQkNSCQkJMAorI2RlZmluZSBIVlNfUElYRUxfT1JE RVJfWFlDUkNCCQkJMQorI2RlZmluZSBIVlNfUElYRUxfT1JERVJfWVhDQkNSCQkJMgorI2RlZmlu ZSBIVlNfUElYRUxfT1JERVJfWVhDUkNCCQkJMworCisjZGVmaW5lIFNDQUxFUl9DVEwwX0VORAkJ CQkoMSA8PCAzMSkKKyNkZWZpbmUgU0NBTEVSX0NUTDBfVkFMSUQJCQkoMSA8PCAzMCkKKworI2Rl ZmluZSBTQ0FMRVJfQ1RMMF9TSVpFX01BU0sJCQlWQzRfTUFTSygyOSwgMjQpCisjZGVmaW5lIFND QUxFUl9DVEwwX1NJWkVfU0hJRlQJCQkyNAorCisjZGVmaW5lIFNDQUxFUl9DVEwwX0hGTElQICAg ICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNikKKyNkZWZpbmUgU0NBTEVSX0NUTDBfVkZMSVAg ICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE1KQorCisjZGVmaW5lIFNDQUxFUl9DVEwwX09S REVSX01BU0sJCQlWQzRfTUFTSygxNCwgMTMpCisjZGVmaW5lIFNDQUxFUl9DVEwwX09SREVSX1NI SUZUCQkJMTMKKworLyogU2V0IHRvIGluZGljYXRlIG5vIHNjYWxpbmcuICovCisjZGVmaW5lIFND QUxFUl9DVEwwX1VOSVRZCQkJKDEgPDwgNCkKKworI2RlZmluZSBTQ0FMRVJfQ1RMMF9QSVhFTF9G T1JNQVRfTUFTSwkJVkM0X01BU0soMywgMCkKKyNkZWZpbmUgU0NBTEVSX0NUTDBfUElYRUxfRk9S TUFUX1NISUZUCQkwCisKKyNkZWZpbmUgU0NBTEVSX1BPUzBfRklYRURfQUxQSEFfTUFTSwkJVkM0 X01BU0soMzEsIDI0KQorI2RlZmluZSBTQ0FMRVJfUE9TMF9GSVhFRF9BTFBIQV9TSElGVAkJMjQK KworI2RlZmluZSBTQ0FMRVJfUE9TMF9TVEFSVF9ZX01BU0sJCVZDNF9NQVNLKDIzLCAxMikKKyNk ZWZpbmUgU0NBTEVSX1BPUzBfU1RBUlRfWV9TSElGVAkJMTIKKworI2RlZmluZSBTQ0FMRVJfUE9T MF9TVEFSVF9YX01BU0sJCVZDNF9NQVNLKDExLCAwKQorI2RlZmluZSBTQ0FMRVJfUE9TMF9TVEFS VF9YX1NISUZUCQkwCisKKyNkZWZpbmUgU0NBTEVSX1BPUzJfQUxQSEFfTU9ERV9NQVNLCQlWQzRf TUFTSygzMSwgMzApCisjZGVmaW5lIFNDQUxFUl9QT1MyX0FMUEhBX01PREVfU0hJRlQJCTMwCisj ZGVmaW5lIFNDQUxFUl9QT1MyX0FMUEhBX01PREVfUElQRUxJTkUJCTAKKyNkZWZpbmUgU0NBTEVS X1BPUzJfQUxQSEFfTU9ERV9GSVhFRAkJMQorI2RlZmluZSBTQ0FMRVJfUE9TMl9BTFBIQV9NT0RF X0ZJWEVEX05PTlpFUk8JMgorI2RlZmluZSBTQ0FMRVJfUE9TMl9BTFBIQV9NT0RFX0ZJWEVEX09W RVJfMHgwNwkzCisKKyNkZWZpbmUgU0NBTEVSX1BPUzJfSEVJR0hUX01BU0sJCQlWQzRfTUFTSygy NywgMTYpCisjZGVmaW5lIFNDQUxFUl9QT1MyX0hFSUdIVF9TSElGVAkJMTYKKworI2RlZmluZSBT Q0FMRVJfUE9TMl9XSURUSF9NQVNLCQkJVkM0X01BU0soMTEsIDApCisjZGVmaW5lIFNDQUxFUl9Q T1MyX1dJRFRIX1NISUZUCQkJMAorCisjZGVmaW5lIFNDQUxFUl9TUkNfUElUQ0hfTUFTSwkJCVZD NF9NQVNLKDE1LCAwKQorI2RlZmluZSBTQ0FMRVJfU1JDX1BJVENIX1NISUZUCQkJMAotLSAKMi4x LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1k ZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==