From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hai Li Subject: [PATCH 4/5] drm/msm/dsi: Split PHY drivers to separate files Date: Thu, 13 Aug 2015 17:45:52 -0400 Message-ID: <1439502353-7681-5-git-send-email-hali@codeaurora.org> References: <1439502353-7681-1-git-send-email-hali@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from smtp.codeaurora.org (smtp.codeaurora.org [198.145.29.96]) by gabe.freedesktop.org (Postfix) with ESMTPS id 354D76EE5D for ; Thu, 13 Aug 2015 14:46:38 -0700 (PDT) In-Reply-To: <1439502353-7681-1-git-send-email-hali@codeaurora.org> 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: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org VGhpcyBjaGFuZ2UgbW92ZXMgZWFjaCBQSFkgdHlwZSBzcGVjaWZpYyBjb2RlIGludG8Kc2VwYXJh dGUgZmlsZXMuCgpTaWduZWQtb2ZmLWJ5OiBIYWkgTGkgPGhhbGlAY29kZWF1cm9yYS5vcmc+Ci0t LQogZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICA2ICstCiBk cml2ZXJzL2dwdS9kcm0vbXNtL2RzaS9kc2lfcGh5LmMgICAgICAgICAgfCA3NTYgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpL3BoeS9kc2lfcGh5 LmMgICAgICB8IDQ0OCArKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9kc2kv cGh5L2RzaV9waHkuaCAgICAgIHwgIDg5ICsrKysKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpL3Bo eS9kc2lfcGh5XzIwbm0uYyB8IDE1MCArKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpL3Bo eS9kc2lfcGh5XzI4bm0uYyB8IDE2NiArKysrKysrCiA2IGZpbGVzIGNoYW5nZWQsIDg1NyBpbnNl cnRpb25zKCspLCA3NTggZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL21zbS9kc2kvZHNpX3BoeS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL21zbS9kc2kvcGh5L2RzaV9waHkuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9tc20vZHNpL3BoeS9kc2lfcGh5LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vbXNtL2RzaS9waHkvZHNpX3BoeV8yMG5tLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vbXNtL2RzaS9waHkvZHNpX3BoeV8yOG5tLmMKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQpp bmRleCAxNGQxNjdlLi4zMGY5OThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL01h a2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBA CiBjY2ZsYWdzLXkgOj0gLUlpbmNsdWRlL2RybSAtSWRyaXZlcnMvZ3B1L2RybS9tc20KLWNjZmxh Z3MtJChDT05GSUdfRFJNX01TTV9EU0lfUExMKSArPSAtSWRyaXZlcnMvZ3B1L2RybS9tc20vZHNp CitjY2ZsYWdzLSQoQ09ORklHX0RSTV9NU01fRFNJKSArPSAtSWRyaXZlcnMvZ3B1L2RybS9tc20v ZHNpCiAKIG1zbS15IDo9IFwKIAlhZHJlbm8vYWRyZW5vX2RldmljZS5vIFwKQEAgLTU2LDcgKzU2 LDkgQEAgbXNtLSQoQ09ORklHX0NPTU1PTl9DTEspICs9IG1kcC9tZHA0L21kcDRfbHZkc19wbGwu bwogbXNtLSQoQ09ORklHX0RSTV9NU01fRFNJKSArPSBkc2kvZHNpLm8gXAogCQkJZHNpL2RzaV9o b3N0Lm8gXAogCQkJZHNpL2RzaV9tYW5hZ2VyLm8gXAotCQkJZHNpL2RzaV9waHkubyBcCisJCQlk c2kvcGh5L2RzaV9waHkubyBcCisJCQlkc2kvcGh5L2RzaV9waHlfMjBubS5vIFwKKwkJCWRzaS9w aHkvZHNpX3BoeV8yOG5tLm8gXAogCQkJbWRwL21kcDUvbWRwNV9jbWRfZW5jb2Rlci5vCiAKIG1z bS0kKENPTkZJR19EUk1fTVNNX0RTSV9QTEwpICs9IGRzaS9wbGwvZHNpX3BsbC5vIFwKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL2RzaV9waHkuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHNpL2RzaV9waHkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdmMWVm ZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS9kc2lfcGh5LmMKKysrIC9k ZXYvbnVsbApAQCAtMSw3NTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNSwgVGhl IExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwot Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVn dWxhdG9yL2NvbnN1bWVyLmg+Ci0KLSNpbmNsdWRlICJkc2kuaCIKLSNpbmNsdWRlICJkc2kueG1s LmgiCi0KLSNkZWZpbmUgZHNpX3BoeV9yZWFkKG9mZnNldCkgbXNtX3JlYWRsKChvZmZzZXQpKQot I2RlZmluZSBkc2lfcGh5X3dyaXRlKG9mZnNldCwgZGF0YSkgbXNtX3dyaXRlbCgoZGF0YSksIChv ZmZzZXQpKQotCi1zdHJ1Y3QgZHNpX3BoeV9vcHMgewotCWludCAoKmVuYWJsZSkoc3RydWN0IG1z bV9kc2lfcGh5ICpwaHksIGludCBzcmNfcGxsX2lkLAotCQljb25zdCB1bnNpZ25lZCBsb25nIGJp dF9yYXRlLCBjb25zdCB1bnNpZ25lZCBsb25nIGVzY19yYXRlKTsKLQl2b2lkICgqZGlzYWJsZSko c3RydWN0IG1zbV9kc2lfcGh5ICpwaHkpOwotfTsKLQotc3RydWN0IGRzaV9waHlfY2ZnIHsKLQll bnVtIG1zbV9kc2lfcGh5X3R5cGUgdHlwZTsKLQlzdHJ1Y3QgZHNpX3JlZ19jb25maWcgcmVnX2Nm ZzsKLQlzdHJ1Y3QgZHNpX3BoeV9vcHMgb3BzOwotCi0JLyogRWFjaCBjZWxsIHtwaHlfaWQsIHBs bF9pZH0gb2YgdGhlIHRydXRoIHRhYmxlIGluZGljYXRlcwotCSAqIGlmIHRoZSBzb3VyY2UgUExM IGlzIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBQSFkuCi0JICogRmlsbCBkZWZhdWx0IEgvVyB2 YWx1ZXMgaW4gaWxsZWdhbCBjZWxscywgZWcuIGNlbGwgezAsIDF9LgotCSAqLwotCWJvb2wgc3Jj X3BsbF90cnV0aHRhYmxlW0RTSV9NQVhdW0RTSV9NQVhdOwotfTsKLQotc3RydWN0IGRzaV9kcGh5 X3RpbWluZyB7Ci0JdTMyIGNsa19wcmU7Ci0JdTMyIGNsa19wb3N0OwotCXUzMiBjbGtfemVybzsK LQl1MzIgY2xrX3RyYWlsOwotCXUzMiBjbGtfcHJlcGFyZTsKLQl1MzIgaHNfZXhpdDsKLQl1MzIg aHNfemVybzsKLQl1MzIgaHNfcHJlcGFyZTsKLQl1MzIgaHNfdHJhaWw7Ci0JdTMyIGhzX3Jxc3Q7 Ci0JdTMyIHRhX2dvOwotCXUzMiB0YV9zdXJlOwotCXUzMiB0YV9nZXQ7Ci19OwotCi1zdHJ1Y3Qg bXNtX2RzaV9waHkgewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0Jdm9pZCBfX2lv bWVtICpiYXNlOwotCXZvaWQgX19pb21lbSAqcmVnX2Jhc2U7Ci0JaW50IGlkOwotCi0Jc3RydWN0 IGNsayAqYWhiX2NsazsKLQlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBwbGllc1tEU0lf REVWX1JFR1VMQVRPUl9NQVhdOwotCi0Jc3RydWN0IGRzaV9kcGh5X3RpbWluZyB0aW1pbmc7Ci0J Y29uc3Qgc3RydWN0IGRzaV9waHlfY2ZnICpjZmc7Ci0KLQlib29sIHJlZ3VsYXRvcl9sZG9fbW9k ZTsKLQotCXN0cnVjdCBtc21fZHNpX3BsbCAqcGxsOwotfTsKLQotc3RhdGljIGludCBkc2lfcGh5 X3JlZ3VsYXRvcl9pbml0KHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5KQotewotCXN0cnVjdCByZWd1 bGF0b3JfYnVsa19kYXRhICpzID0gcGh5LT5zdXBwbGllczsKLQljb25zdCBzdHJ1Y3QgZHNpX3Jl Z19lbnRyeSAqcmVncyA9IHBoeS0+Y2ZnLT5yZWdfY2ZnLnJlZ3M7Ci0Jc3RydWN0IGRldmljZSAq ZGV2ID0gJnBoeS0+cGRldi0+ZGV2OwotCWludCBudW0gPSBwaHktPmNmZy0+cmVnX2NmZy5udW07 Ci0JaW50IGksIHJldDsKLQotCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKLQkJc1tpXS5zdXBw bHkgPSByZWdzW2ldLm5hbWU7Ci0KLQlyZXQgPSBkZXZtX3JlZ3VsYXRvcl9idWxrX2dldCgmcGh5 LT5wZGV2LT5kZXYsIG51bSwgcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycihkZXYsICIl czogZmFpbGVkIHRvIGluaXQgcmVndWxhdG9yLCByZXQ9JWRcbiIsCi0JCQkJCQlfX2Z1bmNfXywg cmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsK LQkJaWYgKChyZWdzW2ldLm1pbl92b2x0YWdlID49IDApICYmIChyZWdzW2ldLm1heF92b2x0YWdl ID49IDApKSB7Ci0JCQlyZXQgPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2Uoc1tpXS5jb25zdW1lciwK LQkJCQlyZWdzW2ldLm1pbl92b2x0YWdlLCByZWdzW2ldLm1heF92b2x0YWdlKTsKLQkJCWlmIChy ZXQgPCAwKSB7Ci0JCQkJZGV2X2VycihkZXYsCi0JCQkJCSJyZWd1bGF0b3IgJWQgc2V0IHZvbHRh Z2UgZmFpbGVkLCAlZFxuIiwKLQkJCQkJaSwgcmV0KTsKLQkJCQlyZXR1cm4gcmV0OwotCQkJfQot CQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzaV9waHlfcmVndWxhdG9y X2Rpc2FibGUoc3RydWN0IG1zbV9kc2lfcGh5ICpwaHkpCi17Ci0Jc3RydWN0IHJlZ3VsYXRvcl9i dWxrX2RhdGEgKnMgPSBwaHktPnN1cHBsaWVzOwotCWNvbnN0IHN0cnVjdCBkc2lfcmVnX2VudHJ5 ICpyZWdzID0gcGh5LT5jZmctPnJlZ19jZmcucmVnczsKLQlpbnQgbnVtID0gcGh5LT5jZmctPnJl Z19jZmcubnVtOwotCWludCBpOwotCi0JREJHKCIiKTsKLQlmb3IgKGkgPSBudW0gLSAxOyBpID49 IDA7IGktLSkKLQkJaWYgKHJlZ3NbaV0uZGlzYWJsZV9sb2FkID49IDApCi0JCQlyZWd1bGF0b3Jf c2V0X2xvYWQoc1tpXS5jb25zdW1lciwKLQkJCQkJCXJlZ3NbaV0uZGlzYWJsZV9sb2FkKTsKLQot CXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUobnVtLCBzKTsKLX0KLQotc3RhdGljIGludCBkc2lfcGh5 X3JlZ3VsYXRvcl9lbmFibGUoc3RydWN0IG1zbV9kc2lfcGh5ICpwaHkpCi17Ci0Jc3RydWN0IHJl Z3VsYXRvcl9idWxrX2RhdGEgKnMgPSBwaHktPnN1cHBsaWVzOwotCWNvbnN0IHN0cnVjdCBkc2lf cmVnX2VudHJ5ICpyZWdzID0gcGh5LT5jZmctPnJlZ19jZmcucmVnczsKLQlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmcGh5LT5wZGV2LT5kZXY7Ci0JaW50IG51bSA9IHBoeS0+Y2ZnLT5yZWdfY2ZnLm51 bTsKLQlpbnQgcmV0LCBpOwotCi0JREJHKCIiKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKysp IHsKLQkJaWYgKHJlZ3NbaV0uZW5hYmxlX2xvYWQgPj0gMCkgewotCQkJcmV0ID0gcmVndWxhdG9y X3NldF9sb2FkKHNbaV0uY29uc3VtZXIsCi0JCQkJCQkJcmVnc1tpXS5lbmFibGVfbG9hZCk7Ci0J CQlpZiAocmV0IDwgMCkgewotCQkJCWRldl9lcnIoZGV2LAotCQkJCQkicmVndWxhdG9yICVkIHNl dCBvcCBtb2RlIGZhaWxlZCwgJWRcbiIsCi0JCQkJCWksIHJldCk7Ci0JCQkJZ290byBmYWlsOwot CQkJfQotCQl9Ci0JfQotCi0JcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKG51bSwgcyk7Ci0J aWYgKHJldCA8IDApIHsKLQkJZGV2X2VycihkZXYsICJyZWd1bGF0b3IgZW5hYmxlIGZhaWxlZCwg JWRcbiIsIHJldCk7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZmFpbDoKLQlm b3IgKGktLTsgaSA+PSAwOyBpLS0pCi0JCXJlZ3VsYXRvcl9zZXRfbG9hZChzW2ldLmNvbnN1bWVy LCByZWdzW2ldLmRpc2FibGVfbG9hZCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQg ZHNpX3BoeV9zZXRfc3JjX3BsbChzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSwgaW50IHBsbF9pZCwg dTMyIHJlZywKLQkJCQl1MzIgYml0X21hc2spCi17Ci0JaW50IHBoeV9pZCA9IHBoeS0+aWQ7Ci0J dTMyIHZhbDsKLQotCWlmICgocGh5X2lkID49IERTSV9NQVgpIHx8IChwbGxfaWQgPj0gRFNJX01B WCkpCi0JCXJldHVybjsKLQotCXZhbCA9IGRzaV9waHlfcmVhZChwaHktPmJhc2UgKyByZWcpOwot Ci0JaWYgKHBoeS0+Y2ZnLT5zcmNfcGxsX3RydXRodGFibGVbcGh5X2lkXVtwbGxfaWRdKQotCQlk c2lfcGh5X3dyaXRlKHBoeS0+YmFzZSArIHJlZywgdmFsIHwgYml0X21hc2spOwotCWVsc2UKLQkJ ZHNpX3BoeV93cml0ZShwaHktPmJhc2UgKyByZWcsIHZhbCAmICh+Yml0X21hc2spKTsKLX0KLQot I2RlZmluZSBTX0RJVl9ST1VORF9VUChuLCBkKQlcCi0JKCgobikgPj0gMCkgPyAoKChuKSArIChk KSAtIDEpIC8gKGQpKSA6ICgoKG4pIC0gKGQpICsgMSkgLyAoZCkpKQotCi1zdGF0aWMgaW5saW5l IHMzMiBsaW5lYXJfaW50ZXIoczMyIHRtYXgsIHMzMiB0bWluLCBzMzIgcGVyY2VudCwKLQkJCQlz MzIgbWluX3Jlc3VsdCwgYm9vbCBldmVuKQotewotCXMzMiB2OwotCXYgPSAodG1heCAtIHRtaW4p ICogcGVyY2VudDsKLQl2ID0gU19ESVZfUk9VTkRfVVAodiwgMTAwKSArIHRtaW47Ci0JaWYgKGV2 ZW4gJiYgKHYgJiAweDEpKQotCQlyZXR1cm4gbWF4X3QoczMyLCBtaW5fcmVzdWx0LCB2IC0gMSk7 Ci0JZWxzZQotCQlyZXR1cm4gbWF4X3QoczMyLCBtaW5fcmVzdWx0LCB2KTsKLX0KLQotc3RhdGlj IHZvaWQgZHNpX2RwaHlfdGltaW5nX2NhbGNfY2xrX3plcm8oc3RydWN0IGRzaV9kcGh5X3RpbWlu ZyAqdGltaW5nLAotCQkJCQlzMzIgdWksIHMzMiBjb2VmZiwgczMyIHBjbnQpCi17Ci0JczMyIHRt YXgsIHRtaW4sIGNsa196OwotCXMzMiB0ZW1wOwotCi0JLyogcmVzZXQgKi8KLQl0ZW1wID0gMzAw ICogY29lZmYgLSAoKHRpbWluZy0+Y2xrX3ByZXBhcmUgPj4gMSkgKyAxKSAqIDIgKiB1aTsKLQl0 bWluID0gU19ESVZfUk9VTkRfVVAodGVtcCwgdWkpIC0gMjsKLQlpZiAodG1pbiA+IDI1NSkgewot CQl0bWF4ID0gNTExOwotCQljbGtfeiA9IGxpbmVhcl9pbnRlcigyICogdG1pbiwgdG1pbiwgcGNu dCwgMCwgdHJ1ZSk7Ci0JfSBlbHNlIHsKLQkJdG1heCA9IDI1NTsKLQkJY2xrX3ogPSBsaW5lYXJf aW50ZXIodG1heCwgdG1pbiwgcGNudCwgMCwgdHJ1ZSk7Ci0JfQotCi0JLyogYWRqdXN0ICovCi0J dGVtcCA9ICh0aW1pbmctPmhzX3Jxc3QgKyB0aW1pbmctPmNsa19wcmVwYXJlICsgY2xrX3opICYg MHg3OwotCXRpbWluZy0+Y2xrX3plcm8gPSBjbGtfeiArIDggLSB0ZW1wOwotfQotCi1zdGF0aWMg aW50IGRzaV9kcGh5X3RpbWluZ19jYWxjKHN0cnVjdCBkc2lfZHBoeV90aW1pbmcgKnRpbWluZywK LQljb25zdCB1bnNpZ25lZCBsb25nIGJpdF9yYXRlLCBjb25zdCB1bnNpZ25lZCBsb25nIGVzY19y YXRlKQotewotCXMzMiB1aSwgbHB4OwotCXMzMiB0bWF4LCB0bWluOwotCXMzMiBwY250MCA9IDEw OwotCXMzMiBwY250MSA9IChiaXRfcmF0ZSA+IDEyMDAwMDAwMDApID8gMTUgOiAxMDsKLQlzMzIg cGNudDIgPSAxMDsKLQlzMzIgcGNudDMgPSAoYml0X3JhdGUgPiAxODAwMDAwMDApID8gMTAgOiA0 MDsKLQlzMzIgY29lZmYgPSAxMDAwOyAvKiBQcmVjaXNpb24sIHNob3VsZCBhdm9pZCBvdmVyZmxv dyAqLwotCXMzMiB0ZW1wOwotCi0JaWYgKCFiaXRfcmF0ZSB8fCAhZXNjX3JhdGUpCi0JCXJldHVy biAtRUlOVkFMOwotCi0JdWkgPSBtdWx0X2ZyYWMoTlNFQ19QRVJfTVNFQywgY29lZmYsIGJpdF9y YXRlIC8gMTAwMCk7Ci0JbHB4ID0gbXVsdF9mcmFjKE5TRUNfUEVSX01TRUMsIGNvZWZmLCBlc2Nf cmF0ZSAvIDEwMDApOwotCi0JdG1heCA9IFNfRElWX1JPVU5EX1VQKDk1ICogY29lZmYsIHVpKSAt IDI7Ci0JdG1pbiA9IFNfRElWX1JPVU5EX1VQKDM4ICogY29lZmYsIHVpKSAtIDI7Ci0JdGltaW5n LT5jbGtfcHJlcGFyZSA9IGxpbmVhcl9pbnRlcih0bWF4LCB0bWluLCBwY250MCwgMCwgdHJ1ZSk7 Ci0KLQl0ZW1wID0gbHB4IC8gdWk7Ci0JaWYgKHRlbXAgJiAweDEpCi0JCXRpbWluZy0+aHNfcnFz dCA9IHRlbXA7Ci0JZWxzZQotCQl0aW1pbmctPmhzX3Jxc3QgPSBtYXhfdChzMzIsIDAsIHRlbXAg LSAyKTsKLQotCS8qIENhbGN1bGF0ZSBjbGtfemVybyBhZnRlciBjbGtfcHJlcGFyZSBhbmQgaHNf cnFzdCAqLwotCWRzaV9kcGh5X3RpbWluZ19jYWxjX2Nsa196ZXJvKHRpbWluZywgdWksIGNvZWZm LCBwY250Mik7Ci0KLQl0ZW1wID0gMTA1ICogY29lZmYgKyAxMiAqIHVpIC0gMjAgKiBjb2VmZjsK LQl0bWF4ID0gU19ESVZfUk9VTkRfVVAodGVtcCwgdWkpIC0gMjsKLQl0bWluID0gU19ESVZfUk9V TkRfVVAoNjAgKiBjb2VmZiwgdWkpIC0gMjsKLQl0aW1pbmctPmNsa190cmFpbCA9IGxpbmVhcl9p bnRlcih0bWF4LCB0bWluLCBwY250MywgMCwgdHJ1ZSk7Ci0KLQl0ZW1wID0gODUgKiBjb2VmZiAr IDYgKiB1aTsKLQl0bWF4ID0gU19ESVZfUk9VTkRfVVAodGVtcCwgdWkpIC0gMjsKLQl0ZW1wID0g NDAgKiBjb2VmZiArIDQgKiB1aTsKLQl0bWluID0gU19ESVZfUk9VTkRfVVAodGVtcCwgdWkpIC0g MjsKLQl0aW1pbmctPmhzX3ByZXBhcmUgPSBsaW5lYXJfaW50ZXIodG1heCwgdG1pbiwgcGNudDEs IDAsIHRydWUpOwotCi0JdG1heCA9IDI1NTsKLQl0ZW1wID0gKCh0aW1pbmctPmhzX3ByZXBhcmUg Pj4gMSkgKyAxKSAqIDIgKiB1aSArIDIgKiB1aTsKLQl0ZW1wID0gMTQ1ICogY29lZmYgKyAxMCAq IHVpIC0gdGVtcDsKLQl0bWluID0gU19ESVZfUk9VTkRfVVAodGVtcCwgdWkpIC0gMjsKLQl0aW1p bmctPmhzX3plcm8gPSBsaW5lYXJfaW50ZXIodG1heCwgdG1pbiwgcGNudDIsIDI0LCB0cnVlKTsK LQotCXRlbXAgPSAxMDUgKiBjb2VmZiArIDEyICogdWkgLSAyMCAqIGNvZWZmOwotCXRtYXggPSBT X0RJVl9ST1VORF9VUCh0ZW1wLCB1aSkgLSAyOwotCXRlbXAgPSA2MCAqIGNvZWZmICsgNCAqIHVp OwotCXRtaW4gPSBESVZfUk9VTkRfVVAodGVtcCwgdWkpIC0gMjsKLQl0aW1pbmctPmhzX3RyYWls ID0gbGluZWFyX2ludGVyKHRtYXgsIHRtaW4sIHBjbnQzLCAwLCB0cnVlKTsKLQotCXRtYXggPSAy NTU7Ci0JdG1pbiA9IFNfRElWX1JPVU5EX1VQKDEwMCAqIGNvZWZmLCB1aSkgLSAyOwotCXRpbWlu Zy0+aHNfZXhpdCA9IGxpbmVhcl9pbnRlcih0bWF4LCB0bWluLCBwY250MiwgMCwgdHJ1ZSk7Ci0K LQl0bWF4ID0gNjM7Ci0JdGVtcCA9ICgodGltaW5nLT5oc19leGl0ID4+IDEpICsgMSkgKiAyICog dWk7Ci0JdGVtcCA9IDYwICogY29lZmYgKyA1MiAqIHVpIC0gMjQgKiB1aSAtIHRlbXA7Ci0JdG1p biA9IFNfRElWX1JPVU5EX1VQKHRlbXAsIDggKiB1aSkgLSAxOwotCXRpbWluZy0+Y2xrX3Bvc3Qg PSBsaW5lYXJfaW50ZXIodG1heCwgdG1pbiwgcGNudDIsIDAsIGZhbHNlKTsKLQotCXRtYXggPSA2 MzsKLQl0ZW1wID0gKCh0aW1pbmctPmNsa19wcmVwYXJlID4+IDEpICsgMSkgKiAyICogdWk7Ci0J dGVtcCArPSAoKHRpbWluZy0+Y2xrX3plcm8gPj4gMSkgKyAxKSAqIDIgKiB1aTsKLQl0ZW1wICs9 IDggKiB1aSArIGxweDsKLQl0bWluID0gU19ESVZfUk9VTkRfVVAodGVtcCwgOCAqIHVpKSAtIDE7 Ci0JaWYgKHRtaW4gPiB0bWF4KSB7Ci0JCXRlbXAgPSBsaW5lYXJfaW50ZXIoMiAqIHRtYXgsIHRt aW4sIHBjbnQyLCAwLCBmYWxzZSkgPj4gMTsKLQkJdGltaW5nLT5jbGtfcHJlID0gdGVtcCA+PiAx OwotCQl0ZW1wID0gKDIgKiB0bWF4IC0gdG1pbikgKiBwY250MjsKLQl9IGVsc2UgewotCQl0aW1p bmctPmNsa19wcmUgPSBsaW5lYXJfaW50ZXIodG1heCwgdG1pbiwgcGNudDIsIDAsIGZhbHNlKTsK LQl9Ci0KLQl0aW1pbmctPnRhX2dvID0gMzsKLQl0aW1pbmctPnRhX3N1cmUgPSAwOwotCXRpbWlu Zy0+dGFfZ2V0ID0gNDsKLQotCURCRygiUEhZIHRpbWluZ3M6ICVkLCAlZCwgJWQsICVkLCAlZCwg JWQsICVkLCAlZCwgJWQsICVkIiwKLQkJdGltaW5nLT5jbGtfcHJlLCB0aW1pbmctPmNsa19wb3N0 LCB0aW1pbmctPmNsa196ZXJvLAotCQl0aW1pbmctPmNsa190cmFpbCwgdGltaW5nLT5jbGtfcHJl cGFyZSwgdGltaW5nLT5oc19leGl0LAotCQl0aW1pbmctPmhzX3plcm8sIHRpbWluZy0+aHNfcHJl cGFyZSwgdGltaW5nLT5oc190cmFpbCwKLQkJdGltaW5nLT5oc19ycXN0KTsKLQotCXJldHVybiAw OwotfQotCi1zdGF0aWMgdm9pZCBkc2lfMjhubV9waHlfcmVndWxhdG9yX2N0cmwoc3RydWN0IG1z bV9kc2lfcGh5ICpwaHksIGJvb2wgZW5hYmxlKQotewotCXZvaWQgX19pb21lbSAqYmFzZSA9IHBo eS0+cmVnX2Jhc2U7Ci0KLQlpZiAoIWVuYWJsZSkgewotCQlkc2lfcGh5X3dyaXRlKGJhc2UgKyBS RUdfRFNJXzI4bm1fUEhZX1JFR1VMQVRPUl9DQUxfUFdSX0NGRywgMCk7Ci0JCXJldHVybjsKLQl9 Ci0KLQlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzI4bm1fUEhZX1JFR1VMQVRPUl9DVFJM XzAsIDB4MCk7Ci0JZHNpX3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8yOG5tX1BIWV9SRUdVTEFU T1JfQ0FMX1BXUl9DRkcsIDEpOwotCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV9Q SFlfUkVHVUxBVE9SX0NUUkxfNSwgMCk7Ci0JZHNpX3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8y OG5tX1BIWV9SRUdVTEFUT1JfQ1RSTF8zLCAwKTsKLQlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdf RFNJXzI4bm1fUEhZX1JFR1VMQVRPUl9DVFJMXzIsIDB4Myk7Ci0JZHNpX3BoeV93cml0ZShiYXNl ICsgUkVHX0RTSV8yOG5tX1BIWV9SRUdVTEFUT1JfQ1RSTF8xLCAweDkpOwotCWRzaV9waHlfd3Jp dGUoYmFzZSArIFJFR19EU0lfMjhubV9QSFlfUkVHVUxBVE9SX0NUUkxfMCwgMHg3KTsKLQlkc2lf cGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzI4bm1fUEhZX1JFR1VMQVRPUl9DVFJMXzQsIDB4MjAp OwotfQotCi1zdGF0aWMgaW50IGRzaV8yOG5tX3BoeV9lbmFibGUoc3RydWN0IG1zbV9kc2lfcGh5 ICpwaHksIGludCBzcmNfcGxsX2lkLAotCQljb25zdCB1bnNpZ25lZCBsb25nIGJpdF9yYXRlLCBj b25zdCB1bnNpZ25lZCBsb25nIGVzY19yYXRlKQotewotCXN0cnVjdCBkc2lfZHBoeV90aW1pbmcg KnRpbWluZyA9ICZwaHktPnRpbWluZzsKLQlpbnQgaTsKLQl2b2lkIF9faW9tZW0gKmJhc2UgPSBw aHktPmJhc2U7Ci0KLQlEQkcoIiIpOwotCi0JaWYgKGRzaV9kcGh5X3RpbWluZ19jYWxjKHRpbWlu ZywgYml0X3JhdGUsIGVzY19yYXRlKSkgewotCQlwcl9lcnIoIiVzOiBELVBIWSB0aW1pbmcgY2Fs Y3VsYXRpb24gZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQot CWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV9QSFlfU1RSRU5HVEhfMCwgMHhmZik7 Ci0KLQlkc2lfMjhubV9waHlfcmVndWxhdG9yX2N0cmwocGh5LCB0cnVlKTsKLQotCWRzaV9waHlf d3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV9QSFlfTERPX0NOVFJMLCAweDAwKTsKLQotCWRzaV9w aHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV9QSFlfVElNSU5HX0NUUkxfMCwKLQkJRFNJXzI4 bm1fUEhZX1RJTUlOR19DVFJMXzBfQ0xLX1pFUk8odGltaW5nLT5jbGtfemVybykpOwotCWRzaV9w aHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV9QSFlfVElNSU5HX0NUUkxfMSwKLQkJRFNJXzI4 bm1fUEhZX1RJTUlOR19DVFJMXzFfQ0xLX1RSQUlMKHRpbWluZy0+Y2xrX3RyYWlsKSk7Ci0JZHNp X3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8yOG5tX1BIWV9USU1JTkdfQ1RSTF8yLAotCQlEU0lf MjhubV9QSFlfVElNSU5HX0NUUkxfMl9DTEtfUFJFUEFSRSh0aW1pbmctPmNsa19wcmVwYXJlKSk7 Ci0JaWYgKHRpbWluZy0+Y2xrX3plcm8gJiBCSVQoOCkpCi0JCWRzaV9waHlfd3JpdGUoYmFzZSAr IFJFR19EU0lfMjhubV9QSFlfVElNSU5HX0NUUkxfMywKLQkJCURTSV8yOG5tX1BIWV9USU1JTkdf Q1RSTF8zX0NMS19aRVJPXzgpOwotCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV9Q SFlfVElNSU5HX0NUUkxfNCwKLQkJRFNJXzI4bm1fUEhZX1RJTUlOR19DVFJMXzRfSFNfRVhJVCh0 aW1pbmctPmhzX2V4aXQpKTsKLQlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzI4bm1fUEhZ X1RJTUlOR19DVFJMXzUsCi0JCURTSV8yOG5tX1BIWV9USU1JTkdfQ1RSTF81X0hTX1pFUk8odGlt aW5nLT5oc196ZXJvKSk7Ci0JZHNpX3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8yOG5tX1BIWV9U SU1JTkdfQ1RSTF82LAotCQlEU0lfMjhubV9QSFlfVElNSU5HX0NUUkxfNl9IU19QUkVQQVJFKHRp bWluZy0+aHNfcHJlcGFyZSkpOwotCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV9Q SFlfVElNSU5HX0NUUkxfNywKLQkJRFNJXzI4bm1fUEhZX1RJTUlOR19DVFJMXzdfSFNfVFJBSUwo dGltaW5nLT5oc190cmFpbCkpOwotCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV9Q SFlfVElNSU5HX0NUUkxfOCwKLQkJRFNJXzI4bm1fUEhZX1RJTUlOR19DVFJMXzhfSFNfUlFTVCh0 aW1pbmctPmhzX3Jxc3QpKTsKLQlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzI4bm1fUEhZ X1RJTUlOR19DVFJMXzksCi0JCURTSV8yOG5tX1BIWV9USU1JTkdfQ1RSTF85X1RBX0dPKHRpbWlu Zy0+dGFfZ28pIHwKLQkJRFNJXzI4bm1fUEhZX1RJTUlOR19DVFJMXzlfVEFfU1VSRSh0aW1pbmct PnRhX3N1cmUpKTsKLQlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzI4bm1fUEhZX1RJTUlO R19DVFJMXzEwLAotCQlEU0lfMjhubV9QSFlfVElNSU5HX0NUUkxfMTBfVEFfR0VUKHRpbWluZy0+ dGFfZ2V0KSk7Ci0JZHNpX3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8yOG5tX1BIWV9USU1JTkdf Q1RSTF8xMSwKLQkJRFNJXzI4bm1fUEhZX1RJTUlOR19DVFJMXzExX1RSSUczX0NNRCgwKSk7Ci0K LQlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzI4bm1fUEhZX0NUUkxfMSwgMHgwMCk7Ci0J ZHNpX3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8yOG5tX1BIWV9DVFJMXzAsIDB4NWYpOwotCi0J ZHNpX3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8yOG5tX1BIWV9TVFJFTkdUSF8xLCAweDYpOwot Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdf RFNJXzI4bm1fUEhZX0xOX0NGR18wKGkpLCAwKTsKLQkJZHNpX3BoeV93cml0ZShiYXNlICsgUkVH X0RTSV8yOG5tX1BIWV9MTl9DRkdfMShpKSwgMCk7Ci0JCWRzaV9waHlfd3JpdGUoYmFzZSArIFJF R19EU0lfMjhubV9QSFlfTE5fQ0ZHXzIoaSksIDApOwotCQlkc2lfcGh5X3dyaXRlKGJhc2UgKyBS RUdfRFNJXzI4bm1fUEhZX0xOX0NGR18zKGkpLCAwKTsKLQkJZHNpX3BoeV93cml0ZShiYXNlICsg UkVHX0RTSV8yOG5tX1BIWV9MTl9URVNUX0RBVEFQQVRIKGkpLCAwKTsKLQkJZHNpX3BoeV93cml0 ZShiYXNlICsgUkVHX0RTSV8yOG5tX1BIWV9MTl9ERUJVR19TRUwoaSksIDApOwotCQlkc2lfcGh5 X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzI4bm1fUEhZX0xOX1RFU1RfU1RSXzAoaSksIDB4MSk7Ci0J CWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV9QSFlfTE5fVEVTVF9TVFJfMShpKSwg MHg5Nyk7Ci0JfQotCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV9QSFlfTE5fQ0ZH XzQoMCksIDApOwotCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV9QSFlfTE5fQ0ZH XzQoMSksIDB4NSk7Ci0JZHNpX3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8yOG5tX1BIWV9MTl9D RkdfNCgyKSwgMHhhKTsKLQlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzI4bm1fUEhZX0xO X0NGR180KDMpLCAweGYpOwotCi0JZHNpX3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8yOG5tX1BI WV9MTkNLX0NGR18xLCAweGMwKTsKLQlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzI4bm1f UEhZX0xOQ0tfVEVTVF9TVFIwLCAweDEpOwotCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lf MjhubV9QSFlfTE5DS19URVNUX1NUUjEsIDB4YmIpOwotCi0JZHNpX3BoeV93cml0ZShiYXNlICsg UkVHX0RTSV8yOG5tX1BIWV9DVFJMXzAsIDB4NWYpOwotCi0JZHNpX3BoeV9zZXRfc3JjX3BsbChw aHksIHNyY19wbGxfaWQsIFJFR19EU0lfMjhubV9QSFlfR0xCTF9URVNUX0NUUkwsCi0JCQlEU0lf MjhubV9QSFlfR0xCTF9URVNUX0NUUkxfQklUQ0xLX0hTX1NFTCk7Ci0KLQlyZXR1cm4gMDsKLX0K LQotc3RhdGljIHZvaWQgZHNpXzI4bm1fcGh5X2Rpc2FibGUoc3RydWN0IG1zbV9kc2lfcGh5ICpw aHkpCi17Ci0JZHNpX3BoeV93cml0ZShwaHktPmJhc2UgKyBSRUdfRFNJXzI4bm1fUEhZX0NUUkxf MCwgMCk7Ci0JZHNpXzI4bm1fcGh5X3JlZ3VsYXRvcl9jdHJsKHBoeSwgZmFsc2UpOwotCi0JLyoK LQkgKiBXYWl0IGZvciB0aGUgcmVnaXN0ZXJzIHdyaXRlcyB0byBjb21wbGV0ZSBpbiBvcmRlciB0 bwotCSAqIGVuc3VyZSB0aGF0IHRoZSBwaHkgaXMgY29tcGxldGVseSBkaXNhYmxlZAotCSAqLwot CXdtYigpOwotfQotCi1zdGF0aWMgdm9pZCBkc2lfMjBubV9waHlfcmVndWxhdG9yX2N0cmwoc3Ry dWN0IG1zbV9kc2lfcGh5ICpwaHksIGJvb2wgZW5hYmxlKQotewotCXZvaWQgX19pb21lbSAqYmFz ZSA9IHBoeS0+cmVnX2Jhc2U7Ci0KLQlpZiAoIWVuYWJsZSkgewotCQlkc2lfcGh5X3dyaXRlKGJh c2UgKyBSRUdfRFNJXzIwbm1fUEhZX1JFR1VMQVRPUl9DQUxfUFdSX0NGRywgMCk7Ci0JCXJldHVy bjsKLQl9Ci0KLQlpZiAocGh5LT5yZWd1bGF0b3JfbGRvX21vZGUpIHsKLQkJZHNpX3BoeV93cml0 ZShwaHktPmJhc2UgKyBSRUdfRFNJXzIwbm1fUEhZX0xET19DTlRSTCwgMHgxZCk7Ci0JCXJldHVy bjsKLQl9Ci0KLQkvKiBub24gTERPIG1vZGUgKi8KLQlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdf RFNJXzIwbm1fUEhZX1JFR1VMQVRPUl9DVFJMXzEsIDB4MDMpOwotCWRzaV9waHlfd3JpdGUoYmFz ZSArIFJFR19EU0lfMjBubV9QSFlfUkVHVUxBVE9SX0NUUkxfMiwgMHgwMyk7Ci0JZHNpX3BoeV93 cml0ZShiYXNlICsgUkVHX0RTSV8yMG5tX1BIWV9SRUdVTEFUT1JfQ1RSTF8zLCAweDAwKTsKLQlk c2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzIwbm1fUEhZX1JFR1VMQVRPUl9DVFJMXzQsIDB4 MjApOwotCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjBubV9QSFlfUkVHVUxBVE9SX0NB TF9QV1JfQ0ZHLCAweDAxKTsKLQlkc2lfcGh5X3dyaXRlKHBoeS0+YmFzZSArIFJFR19EU0lfMjBu bV9QSFlfTERPX0NOVFJMLCAweDAwKTsKLQlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzIw bm1fUEhZX1JFR1VMQVRPUl9DVFJMXzAsIDB4MDMpOwotfQotCi1zdGF0aWMgaW50IGRzaV8yMG5t X3BoeV9lbmFibGUoc3RydWN0IG1zbV9kc2lfcGh5ICpwaHksIGludCBzcmNfcGxsX2lkLAotCQlj b25zdCB1bnNpZ25lZCBsb25nIGJpdF9yYXRlLCBjb25zdCB1bnNpZ25lZCBsb25nIGVzY19yYXRl KQotewotCXN0cnVjdCBkc2lfZHBoeV90aW1pbmcgKnRpbWluZyA9ICZwaHktPnRpbWluZzsKLQlp bnQgaTsKLQl2b2lkIF9faW9tZW0gKmJhc2UgPSBwaHktPmJhc2U7Ci0JdTMyIGNmZ180WzRdID0g ezB4MjAsIDB4NDAsIDB4MjAsIDB4MDB9OwotCi0JREJHKCIiKTsKLQotCWlmIChkc2lfZHBoeV90 aW1pbmdfY2FsYyh0aW1pbmcsIGJpdF9yYXRlLCBlc2NfcmF0ZSkpIHsKLQkJcHJfZXJyKCIlczog RC1QSFkgdGltaW5nIGNhbGN1bGF0aW9uIGZhaWxlZFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4g LUVJTlZBTDsKLQl9Ci0KLQlkc2lfMjBubV9waHlfcmVndWxhdG9yX2N0cmwocGh5LCB0cnVlKTsK LQotCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjBubV9QSFlfU1RSRU5HVEhfMCwgMHhm Zik7Ci0KLQlkc2lfcGh5X3NldF9zcmNfcGxsKHBoeSwgc3JjX3BsbF9pZCwgUkVHX0RTSV8yMG5t X1BIWV9HTEJMX1RFU1RfQ1RSTCwKLQkJCURTSV8yMG5tX1BIWV9HTEJMX1RFU1RfQ1RSTF9CSVRD TEtfSFNfU0VMKTsKLQotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJZHNpX3BoeV93cml0 ZShiYXNlICsgUkVHX0RTSV8yMG5tX1BIWV9MTl9DRkdfMyhpKSwKLQkJCQkJCQkoaSA+PiAxKSAq IDB4NDApOwotCQlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzIwbm1fUEhZX0xOX1RFU1Rf U1RSXzAoaSksIDB4MDEpOwotCQlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzIwbm1fUEhZ X0xOX1RFU1RfU1RSXzEoaSksIDB4NDYpOwotCQlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJ XzIwbm1fUEhZX0xOX0NGR18wKGkpLCAweDAyKTsKLQkJZHNpX3BoeV93cml0ZShiYXNlICsgUkVH X0RTSV8yMG5tX1BIWV9MTl9DRkdfMShpKSwgMHhhMCk7Ci0JCWRzaV9waHlfd3JpdGUoYmFzZSAr IFJFR19EU0lfMjBubV9QSFlfTE5fQ0ZHXzQoaSksIGNmZ180W2ldKTsKLQl9Ci0KLQlkc2lfcGh5 X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzIwbm1fUEhZX0xOQ0tfQ0ZHXzMsIDB4ODApOwotCWRzaV9w aHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjBubV9QSFlfTE5DS19URVNUX1NUUjAsIDB4MDEpOwot CWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjBubV9QSFlfTE5DS19URVNUX1NUUjEsIDB4 NDYpOwotCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjBubV9QSFlfTE5DS19DRkdfMCwg MHgwMCk7Ci0JZHNpX3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8yMG5tX1BIWV9MTkNLX0NGR18x LCAweGEwKTsKLQlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzIwbm1fUEhZX0xOQ0tfQ0ZH XzIsIDB4MDApOwotCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjBubV9QSFlfTE5DS19D RkdfNCwgMHgwMCk7Ci0KLQlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzIwbm1fUEhZX1RJ TUlOR19DVFJMXzAsCi0JCURTSV8yMG5tX1BIWV9USU1JTkdfQ1RSTF8wX0NMS19aRVJPKHRpbWlu Zy0+Y2xrX3plcm8pKTsKLQlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzIwbm1fUEhZX1RJ TUlOR19DVFJMXzEsCi0JCURTSV8yMG5tX1BIWV9USU1JTkdfQ1RSTF8xX0NMS19UUkFJTCh0aW1p bmctPmNsa190cmFpbCkpOwotCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjBubV9QSFlf VElNSU5HX0NUUkxfMiwKLQkJRFNJXzIwbm1fUEhZX1RJTUlOR19DVFJMXzJfQ0xLX1BSRVBBUkUo dGltaW5nLT5jbGtfcHJlcGFyZSkpOwotCWlmICh0aW1pbmctPmNsa196ZXJvICYgQklUKDgpKQot CQlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzIwbm1fUEhZX1RJTUlOR19DVFJMXzMsCi0J CQlEU0lfMjBubV9QSFlfVElNSU5HX0NUUkxfM19DTEtfWkVST184KTsKLQlkc2lfcGh5X3dyaXRl KGJhc2UgKyBSRUdfRFNJXzIwbm1fUEhZX1RJTUlOR19DVFJMXzQsCi0JCURTSV8yMG5tX1BIWV9U SU1JTkdfQ1RSTF80X0hTX0VYSVQodGltaW5nLT5oc19leGl0KSk7Ci0JZHNpX3BoeV93cml0ZShi YXNlICsgUkVHX0RTSV8yMG5tX1BIWV9USU1JTkdfQ1RSTF81LAotCQlEU0lfMjBubV9QSFlfVElN SU5HX0NUUkxfNV9IU19aRVJPKHRpbWluZy0+aHNfemVybykpOwotCWRzaV9waHlfd3JpdGUoYmFz ZSArIFJFR19EU0lfMjBubV9QSFlfVElNSU5HX0NUUkxfNiwKLQkJRFNJXzIwbm1fUEhZX1RJTUlO R19DVFJMXzZfSFNfUFJFUEFSRSh0aW1pbmctPmhzX3ByZXBhcmUpKTsKLQlkc2lfcGh5X3dyaXRl KGJhc2UgKyBSRUdfRFNJXzIwbm1fUEhZX1RJTUlOR19DVFJMXzcsCi0JCURTSV8yMG5tX1BIWV9U SU1JTkdfQ1RSTF83X0hTX1RSQUlMKHRpbWluZy0+aHNfdHJhaWwpKTsKLQlkc2lfcGh5X3dyaXRl KGJhc2UgKyBSRUdfRFNJXzIwbm1fUEhZX1RJTUlOR19DVFJMXzgsCi0JCURTSV8yMG5tX1BIWV9U SU1JTkdfQ1RSTF84X0hTX1JRU1QodGltaW5nLT5oc19ycXN0KSk7Ci0JZHNpX3BoeV93cml0ZShi YXNlICsgUkVHX0RTSV8yMG5tX1BIWV9USU1JTkdfQ1RSTF85LAotCQlEU0lfMjBubV9QSFlfVElN SU5HX0NUUkxfOV9UQV9HTyh0aW1pbmctPnRhX2dvKSB8Ci0JCURTSV8yMG5tX1BIWV9USU1JTkdf Q1RSTF85X1RBX1NVUkUodGltaW5nLT50YV9zdXJlKSk7Ci0JZHNpX3BoeV93cml0ZShiYXNlICsg UkVHX0RTSV8yMG5tX1BIWV9USU1JTkdfQ1RSTF8xMCwKLQkJRFNJXzIwbm1fUEhZX1RJTUlOR19D VFJMXzEwX1RBX0dFVCh0aW1pbmctPnRhX2dldCkpOwotCWRzaV9waHlfd3JpdGUoYmFzZSArIFJF R19EU0lfMjBubV9QSFlfVElNSU5HX0NUUkxfMTEsCi0JCURTSV8yMG5tX1BIWV9USU1JTkdfQ1RS TF8xMV9UUklHM19DTUQoMCkpOwotCi0JZHNpX3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8yMG5t X1BIWV9DVFJMXzEsIDB4MDApOwotCi0JZHNpX3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8yMG5t X1BIWV9TVFJFTkdUSF8xLCAweDA2KTsKLQotCS8qIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHdy aXR0ZW4gYmVmb3JlIGVuYWJsZSAqLwotCXdtYigpOwotCWRzaV9waHlfd3JpdGUoYmFzZSArIFJF R19EU0lfMjBubV9QSFlfQ1RSTF8wLCAweDdmKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMg dm9pZCBkc2lfMjBubV9waHlfZGlzYWJsZShzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSkKLXsKLQlk c2lfcGh5X3dyaXRlKHBoeS0+YmFzZSArIFJFR19EU0lfMjBubV9QSFlfQ1RSTF8wLCAwKTsKLQlk c2lfMjBubV9waHlfcmVndWxhdG9yX2N0cmwocGh5LCBmYWxzZSk7Ci19Ci0KLXN0YXRpYyBpbnQg ZHNpX3BoeV9lbmFibGVfcmVzb3VyY2Uoc3RydWN0IG1zbV9kc2lfcGh5ICpwaHkpCi17Ci0JaW50 IHJldDsKLQotCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnBoeS0+cGRldi0+ZGV2KTsKLQotCXJldCA9 IGNsa19wcmVwYXJlX2VuYWJsZShwaHktPmFoYl9jbGspOwotCWlmIChyZXQpIHsKLQkJcHJfZXJy KCIlczogY2FuJ3QgZW5hYmxlIGFoYiBjbGssICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKLQkJcG1f cnVudGltZV9wdXRfc3luYygmcGh5LT5wZGV2LT5kZXYpOwotCX0KLQotCXJldHVybiByZXQ7Ci19 Ci0KLXN0YXRpYyB2b2lkIGRzaV9waHlfZGlzYWJsZV9yZXNvdXJjZShzdHJ1Y3QgbXNtX2RzaV9w aHkgKnBoeSkKLXsKLQljbGtfZGlzYWJsZV91bnByZXBhcmUocGh5LT5haGJfY2xrKTsKLQlwbV9y dW50aW1lX3B1dF9zeW5jKCZwaHktPnBkZXYtPmRldik7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1 Y3QgZHNpX3BoeV9jZmcgZHNpX3BoeV9jZmdzW01TTV9EU0lfUEhZX01BWF0gPSB7Ci0JW01TTV9E U0lfUEhZXzI4Tk1fSFBNXSA9IHsKLQkJLnR5cGUgPSBNU01fRFNJX1BIWV8yOE5NX0hQTSwKLQkJ LnNyY19wbGxfdHJ1dGh0YWJsZSA9IHsge3RydWUsIHRydWV9LCB7ZmFsc2UsIHRydWV9IH0sCi0J CS5yZWdfY2ZnID0gewotCQkJLm51bSA9IDEsCi0JCQkucmVncyA9IHsKLQkJCQl7InZkZGlvIiwg MTgwMDAwMCwgMTgwMDAwMCwgMTAwMDAwLCAxMDB9LAotCQkJfSwKLQkJfSwKLQkJLm9wcyA9IHsK LQkJCS5lbmFibGUgPSBkc2lfMjhubV9waHlfZW5hYmxlLAotCQkJLmRpc2FibGUgPSBkc2lfMjhu bV9waHlfZGlzYWJsZSwKLQkJfQotCX0sCi0JW01TTV9EU0lfUEhZXzI4Tk1fTFBdID0gewotCQku dHlwZSA9IE1TTV9EU0lfUEhZXzI4Tk1fTFAsCi0JCS5zcmNfcGxsX3RydXRodGFibGUgPSB7IHt0 cnVlLCB0cnVlfSwge3RydWUsIHRydWV9IH0sCi0JCS5yZWdfY2ZnID0gewotCQkJLm51bSA9IDEs Ci0JCQkucmVncyA9IHsKLQkJCQl7InZkZGlvIiwgMTgwMDAwMCwgMTgwMDAwMCwgMTAwMDAwLCAx MDB9LAotCQkJfSwKLQkJfSwKLQkJLm9wcyA9IHsKLQkJCS5lbmFibGUgPSBkc2lfMjhubV9waHlf ZW5hYmxlLAotCQkJLmRpc2FibGUgPSBkc2lfMjhubV9waHlfZGlzYWJsZSwKLQkJfQotCX0sCi0J W01TTV9EU0lfUEhZXzIwTk1dID0gewotCQkudHlwZSA9IE1TTV9EU0lfUEhZXzIwTk0sCi0JCS5z cmNfcGxsX3RydXRodGFibGUgPSB7IHtmYWxzZSwgdHJ1ZX0sIHtmYWxzZSwgdHJ1ZX0gfSwKLQkJ LnJlZ19jZmcgPSB7Ci0JCQkubnVtID0gMiwKLQkJCS5yZWdzID0gewotCQkJCXsidmRkaW8iLCAx ODAwMDAwLCAxODAwMDAwLCAxMDAwMDAsIDEwMH0sCi0JCQkJeyJ2Y2NhIiwgMTAwMDAwMCwgMTAw MDAwMCwgMTAwMDAsIDEwMH0sCi0JCQl9LAotCQl9LAotCQkub3BzID0gewotCQkJLmVuYWJsZSA9 IGRzaV8yMG5tX3BoeV9lbmFibGUsCi0JCQkuZGlzYWJsZSA9IGRzaV8yMG5tX3BoeV9kaXNhYmxl LAotCQl9Ci0JfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGRzaV9w aHlfZHRfbWF0Y2hbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gInFjb20sZHNpLXBoeS0yOG5tLWhw bSIsCi0JICAuZGF0YSA9ICZkc2lfcGh5X2NmZ3NbTVNNX0RTSV9QSFlfMjhOTV9IUE1dLH0sCi0J eyAuY29tcGF0aWJsZSA9ICJxY29tLGRzaS1waHktMjhubS1scCIsCi0JICAuZGF0YSA9ICZkc2lf cGh5X2NmZ3NbTVNNX0RTSV9QSFlfMjhOTV9MUF0sfSwKLQl7IC5jb21wYXRpYmxlID0gInFjb20s ZHNpLXBoeS0yMG5tIiwKLQkgIC5kYXRhID0gJmRzaV9waHlfY2Znc1tNU01fRFNJX1BIWV8yME5N XSx9LAotCXt9Ci19OwotCi1zdGF0aWMgaW50IGRzaV9waHlfZHJpdmVyX3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IG1zbV9kc2lfcGh5ICpwaHk7Ci0JY29u c3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7Ci0JaW50IHJldDsKLQotCXBoeSA9IGRldm1f a3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnBoeSksIEdGUF9LRVJORUwpOwotCWlmICghcGh5 KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1hdGNoID0gb2ZfbWF0Y2hfbm9kZShkc2lfcGh5X2R0 X21hdGNoLCBwZGV2LT5kZXYub2Zfbm9kZSk7Ci0JaWYgKCFtYXRjaCkKLQkJcmV0dXJuIC1FTk9E RVY7Ci0KLQlwaHktPmNmZyA9IG1hdGNoLT5kYXRhOwotCXBoeS0+cGRldiA9IHBkZXY7Ci0KLQly ZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwZGV2LT5kZXYub2Zfbm9kZSwKLQkJCQkicWNvbSxk c2ktcGh5LWluZGV4IiwgJnBoeS0+aWQpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycigmcGRldi0+ ZGV2LAotCQkJIiVzOiBQSFkgaW5kZXggbm90IHNwZWNpZmllZCwgcmV0PSVkXG4iLAotCQkJX19m dW5jX18sIHJldCk7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQlwaHktPnJlZ3VsYXRvcl9sZG9fbW9k ZSA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChwZGV2LT5kZXYub2Zfbm9kZSwKLQkJCQkicWNvbSxk c2ktcGh5LXJlZ3VsYXRvci1sZG8tbW9kZSIpOwotCi0JcGh5LT5iYXNlID0gbXNtX2lvcmVtYXAo cGRldiwgImRzaV9waHkiLCAiRFNJX1BIWSIpOwotCWlmIChJU19FUlIocGh5LT5iYXNlKSkgewot CQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogZmFpbGVkIHRvIG1hcCBwaHkgYmFzZVxuIiwgX19m dW5jX18pOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWw7Ci0JfQotCXBoeS0+cmVnX2Jh c2UgPSBtc21faW9yZW1hcChwZGV2LCAiZHNpX3BoeV9yZWd1bGF0b3IiLCAiRFNJX1BIWV9SRUci KTsKLQlpZiAoSVNfRVJSKHBoeS0+cmVnX2Jhc2UpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwK LQkJCSIlczogZmFpbGVkIHRvIG1hcCBwaHkgcmVndWxhdG9yIGJhc2VcbiIsIF9fZnVuY19fKTsK LQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBmYWlsOwotCX0KLQotCXJldCA9IGRzaV9waHlfcmVn dWxhdG9yX2luaXQocGh5KTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIiVz OiBmYWlsZWQgdG8gaW5pdCByZWd1bGF0b3JcbiIsIF9fZnVuY19fKTsKLQkJZ290byBmYWlsOwot CX0KLQotCXBoeS0+YWhiX2NsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAiaWZhY2VfY2xr Iik7Ci0JaWYgKElTX0VSUihwaHktPmFoYl9jbGspKSB7Ci0JCXByX2VycigiJXM6IFVuYWJsZSB0 byBnZXQgYWhiIGNsa1xuIiwgX19mdW5jX18pOwotCQlyZXQgPSBQVFJfRVJSKHBoeS0+YWhiX2Ns ayk7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQkvKiBQTEwgaW5pdCB3aWxsIGNhbGwgaW50byBjbGtf cmVnaXN0ZXIgd2hpY2ggcmVxdWlyZXMKLQkgKiByZWdpc3RlciBhY2Nlc3MsIHNvIHdlIG5lZWQg dG8gZW5hYmxlIHBvd2VyIGFuZCBhaGIgY2xvY2suCi0JICovCi0JcmV0ID0gZHNpX3BoeV9lbmFi bGVfcmVzb3VyY2UocGh5KTsKLQlpZiAocmV0KQotCQlnb3RvIGZhaWw7Ci0KLQlwaHktPnBsbCA9 IG1zbV9kc2lfcGxsX2luaXQocGRldiwgcGh5LT5jZmctPnR5cGUsIHBoeS0+aWQpOwotCWlmICgh cGh5LT5wbGwpCi0JCWRldl9pbmZvKCZwZGV2LT5kZXYsCi0JCQkiJXM6IHBsbCBpbml0IGZhaWxl ZCwgbmVlZCBzZXBhcmF0ZSBwbGwgY2xrIGRyaXZlclxuIiwKLQkJCV9fZnVuY19fKTsKLQotCWRz aV9waHlfZGlzYWJsZV9yZXNvdXJjZShwaHkpOwotCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRl diwgcGh5KTsKLQotCXJldHVybiAwOwotCi1mYWlsOgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRp YyBpbnQgZHNpX3BoeV9kcml2ZXJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp Ci17Ci0Jc3RydWN0IG1zbV9kc2lfcGh5ICpwaHkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2 KTsKLQotCWlmIChwaHkgJiYgcGh5LT5wbGwpIHsKLQkJbXNtX2RzaV9wbGxfZGVzdHJveShwaHkt PnBsbCk7Ci0JCXBoeS0+cGxsID0gTlVMTDsKLQl9Ci0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShw ZGV2LCBOVUxMKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2Ry aXZlciBkc2lfcGh5X3BsYXRmb3JtX2RyaXZlciA9IHsKLQkucHJvYmUgICAgICA9IGRzaV9waHlf ZHJpdmVyX3Byb2JlLAotCS5yZW1vdmUgICAgID0gZHNpX3BoeV9kcml2ZXJfcmVtb3ZlLAotCS5k cml2ZXIgICAgID0gewotCQkubmFtZSAgID0gIm1zbV9kc2lfcGh5IiwKLQkJLm9mX21hdGNoX3Rh YmxlID0gZHNpX3BoeV9kdF9tYXRjaCwKLQl9LAotfTsKLQotdm9pZCBfX2luaXQgbXNtX2RzaV9w aHlfZHJpdmVyX3JlZ2lzdGVyKHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZk c2lfcGh5X3BsYXRmb3JtX2RyaXZlcik7Ci19Ci0KLXZvaWQgX19leGl0IG1zbV9kc2lfcGh5X2Ry aXZlcl91bnJlZ2lzdGVyKHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRz aV9waHlfcGxhdGZvcm1fZHJpdmVyKTsKLX0KLQotaW50IG1zbV9kc2lfcGh5X2VuYWJsZShzdHJ1 Y3QgbXNtX2RzaV9waHkgKnBoeSwgaW50IHNyY19wbGxfaWQsCi0JY29uc3QgdW5zaWduZWQgbG9u ZyBiaXRfcmF0ZSwgY29uc3QgdW5zaWduZWQgbG9uZyBlc2NfcmF0ZSkKLXsKLQlpbnQgcmV0Owot Ci0JaWYgKCFwaHkgfHwgIXBoeS0+Y2ZnLT5vcHMuZW5hYmxlKQotCQlyZXR1cm4gLUVJTlZBTDsK LQotCXJldCA9IGRzaV9waHlfcmVndWxhdG9yX2VuYWJsZShwaHkpOwotCWlmIChyZXQpIHsKLQkJ ZGV2X2VycigmcGh5LT5wZGV2LT5kZXYsICIlczogcmVndWxhdG9yIGVuYWJsZSBmYWlsZWQsICVk XG4iLAotCQkJX19mdW5jX18sIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIHBo eS0+Y2ZnLT5vcHMuZW5hYmxlKHBoeSwgc3JjX3BsbF9pZCwgYml0X3JhdGUsIGVzY19yYXRlKTsK LX0KLQotdm9pZCBtc21fZHNpX3BoeV9kaXNhYmxlKHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5KQot ewotCWlmICghcGh5IHx8ICFwaHktPmNmZy0+b3BzLmRpc2FibGUpCi0JCXJldHVybjsKLQotCXBo eS0+Y2ZnLT5vcHMuZGlzYWJsZShwaHkpOwotCWRzaV9waHlfcmVndWxhdG9yX2Rpc2FibGUocGh5 KTsKLX0KLQotdm9pZCBtc21fZHNpX3BoeV9nZXRfY2xrX3ByZV9wb3N0KHN0cnVjdCBtc21fZHNp X3BoeSAqcGh5LAotCXUzMiAqY2xrX3ByZSwgdTMyICpjbGtfcG9zdCkKLXsKLQlpZiAoIXBoeSkK LQkJcmV0dXJuOwotCWlmIChjbGtfcHJlKQotCQkqY2xrX3ByZSA9IHBoeS0+dGltaW5nLmNsa19w cmU7Ci0JaWYgKGNsa19wb3N0KQotCQkqY2xrX3Bvc3QgPSBwaHktPnRpbWluZy5jbGtfcG9zdDsK LX0KLQotc3RydWN0IG1zbV9kc2lfcGxsICptc21fZHNpX3BoeV9nZXRfcGxsKHN0cnVjdCBtc21f ZHNpX3BoeSAqcGh5KQotewotCWlmICghcGh5KQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBw aHktPnBsbDsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvcGh5L2Rz aV9waHkuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL3BoeS9kc2lfcGh5LmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI4YTk0YwotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHNpL3BoeS9kc2lfcGh5LmMKQEAgLTAsMCArMSw0NDggQEAKKy8q CisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVy c2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2Rl dmljZS5oPgorCisjaW5jbHVkZSAiZHNpX3BoeS5oIgorCisjZGVmaW5lIFNfRElWX1JPVU5EX1VQ KG4sIGQpCVwKKwkoKChuKSA+PSAwKSA/ICgoKG4pICsgKGQpIC0gMSkgLyAoZCkpIDogKCgobikg LSAoZCkgKyAxKSAvIChkKSkpCisKK3N0YXRpYyBpbmxpbmUgczMyIGxpbmVhcl9pbnRlcihzMzIg dG1heCwgczMyIHRtaW4sIHMzMiBwZXJjZW50LAorCQkJCXMzMiBtaW5fcmVzdWx0LCBib29sIGV2 ZW4pCit7CisJczMyIHY7CisKKwl2ID0gKHRtYXggLSB0bWluKSAqIHBlcmNlbnQ7CisJdiA9IFNf RElWX1JPVU5EX1VQKHYsIDEwMCkgKyB0bWluOworCWlmIChldmVuICYmICh2ICYgMHgxKSkKKwkJ cmV0dXJuIG1heF90KHMzMiwgbWluX3Jlc3VsdCwgdiAtIDEpOworCWVsc2UKKwkJcmV0dXJuIG1h eF90KHMzMiwgbWluX3Jlc3VsdCwgdik7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9kcGh5X3RpbWlu Z19jYWxjX2Nsa196ZXJvKHN0cnVjdCBtc21fZHNpX2RwaHlfdGltaW5nICp0aW1pbmcsCisJCQkJ CXMzMiB1aSwgczMyIGNvZWZmLCBzMzIgcGNudCkKK3sKKwlzMzIgdG1heCwgdG1pbiwgY2xrX3o7 CisJczMyIHRlbXA7CisKKwkvKiByZXNldCAqLworCXRlbXAgPSAzMDAgKiBjb2VmZiAtICgodGlt aW5nLT5jbGtfcHJlcGFyZSA+PiAxKSArIDEpICogMiAqIHVpOworCXRtaW4gPSBTX0RJVl9ST1VO RF9VUCh0ZW1wLCB1aSkgLSAyOworCWlmICh0bWluID4gMjU1KSB7CisJCXRtYXggPSA1MTE7CisJ CWNsa196ID0gbGluZWFyX2ludGVyKDIgKiB0bWluLCB0bWluLCBwY250LCAwLCB0cnVlKTsKKwl9 IGVsc2UgeworCQl0bWF4ID0gMjU1OworCQljbGtfeiA9IGxpbmVhcl9pbnRlcih0bWF4LCB0bWlu LCBwY250LCAwLCB0cnVlKTsKKwl9CisKKwkvKiBhZGp1c3QgKi8KKwl0ZW1wID0gKHRpbWluZy0+ aHNfcnFzdCArIHRpbWluZy0+Y2xrX3ByZXBhcmUgKyBjbGtfeikgJiAweDc7CisJdGltaW5nLT5j bGtfemVybyA9IGNsa196ICsgOCAtIHRlbXA7Cit9CisKK2ludCBtc21fZHNpX2RwaHlfdGltaW5n X2NhbGMoc3RydWN0IG1zbV9kc2lfZHBoeV90aW1pbmcgKnRpbWluZywKKwljb25zdCB1bnNpZ25l ZCBsb25nIGJpdF9yYXRlLCBjb25zdCB1bnNpZ25lZCBsb25nIGVzY19yYXRlKQoreworCXMzMiB1 aSwgbHB4OworCXMzMiB0bWF4LCB0bWluOworCXMzMiBwY250MCA9IDEwOworCXMzMiBwY250MSA9 IChiaXRfcmF0ZSA+IDEyMDAwMDAwMDApID8gMTUgOiAxMDsKKwlzMzIgcGNudDIgPSAxMDsKKwlz MzIgcGNudDMgPSAoYml0X3JhdGUgPiAxODAwMDAwMDApID8gMTAgOiA0MDsKKwlzMzIgY29lZmYg PSAxMDAwOyAvKiBQcmVjaXNpb24sIHNob3VsZCBhdm9pZCBvdmVyZmxvdyAqLworCXMzMiB0ZW1w OworCisJaWYgKCFiaXRfcmF0ZSB8fCAhZXNjX3JhdGUpCisJCXJldHVybiAtRUlOVkFMOworCisJ dWkgPSBtdWx0X2ZyYWMoTlNFQ19QRVJfTVNFQywgY29lZmYsIGJpdF9yYXRlIC8gMTAwMCk7CisJ bHB4ID0gbXVsdF9mcmFjKE5TRUNfUEVSX01TRUMsIGNvZWZmLCBlc2NfcmF0ZSAvIDEwMDApOwor CisJdG1heCA9IFNfRElWX1JPVU5EX1VQKDk1ICogY29lZmYsIHVpKSAtIDI7CisJdG1pbiA9IFNf RElWX1JPVU5EX1VQKDM4ICogY29lZmYsIHVpKSAtIDI7CisJdGltaW5nLT5jbGtfcHJlcGFyZSA9 IGxpbmVhcl9pbnRlcih0bWF4LCB0bWluLCBwY250MCwgMCwgdHJ1ZSk7CisKKwl0ZW1wID0gbHB4 IC8gdWk7CisJaWYgKHRlbXAgJiAweDEpCisJCXRpbWluZy0+aHNfcnFzdCA9IHRlbXA7CisJZWxz ZQorCQl0aW1pbmctPmhzX3Jxc3QgPSBtYXhfdChzMzIsIDAsIHRlbXAgLSAyKTsKKworCS8qIENh bGN1bGF0ZSBjbGtfemVybyBhZnRlciBjbGtfcHJlcGFyZSBhbmQgaHNfcnFzdCAqLworCWRzaV9k cGh5X3RpbWluZ19jYWxjX2Nsa196ZXJvKHRpbWluZywgdWksIGNvZWZmLCBwY250Mik7CisKKwl0 ZW1wID0gMTA1ICogY29lZmYgKyAxMiAqIHVpIC0gMjAgKiBjb2VmZjsKKwl0bWF4ID0gU19ESVZf Uk9VTkRfVVAodGVtcCwgdWkpIC0gMjsKKwl0bWluID0gU19ESVZfUk9VTkRfVVAoNjAgKiBjb2Vm ZiwgdWkpIC0gMjsKKwl0aW1pbmctPmNsa190cmFpbCA9IGxpbmVhcl9pbnRlcih0bWF4LCB0bWlu LCBwY250MywgMCwgdHJ1ZSk7CisKKwl0ZW1wID0gODUgKiBjb2VmZiArIDYgKiB1aTsKKwl0bWF4 ID0gU19ESVZfUk9VTkRfVVAodGVtcCwgdWkpIC0gMjsKKwl0ZW1wID0gNDAgKiBjb2VmZiArIDQg KiB1aTsKKwl0bWluID0gU19ESVZfUk9VTkRfVVAodGVtcCwgdWkpIC0gMjsKKwl0aW1pbmctPmhz X3ByZXBhcmUgPSBsaW5lYXJfaW50ZXIodG1heCwgdG1pbiwgcGNudDEsIDAsIHRydWUpOworCisJ dG1heCA9IDI1NTsKKwl0ZW1wID0gKCh0aW1pbmctPmhzX3ByZXBhcmUgPj4gMSkgKyAxKSAqIDIg KiB1aSArIDIgKiB1aTsKKwl0ZW1wID0gMTQ1ICogY29lZmYgKyAxMCAqIHVpIC0gdGVtcDsKKwl0 bWluID0gU19ESVZfUk9VTkRfVVAodGVtcCwgdWkpIC0gMjsKKwl0aW1pbmctPmhzX3plcm8gPSBs aW5lYXJfaW50ZXIodG1heCwgdG1pbiwgcGNudDIsIDI0LCB0cnVlKTsKKworCXRlbXAgPSAxMDUg KiBjb2VmZiArIDEyICogdWkgLSAyMCAqIGNvZWZmOworCXRtYXggPSBTX0RJVl9ST1VORF9VUCh0 ZW1wLCB1aSkgLSAyOworCXRlbXAgPSA2MCAqIGNvZWZmICsgNCAqIHVpOworCXRtaW4gPSBESVZf Uk9VTkRfVVAodGVtcCwgdWkpIC0gMjsKKwl0aW1pbmctPmhzX3RyYWlsID0gbGluZWFyX2ludGVy KHRtYXgsIHRtaW4sIHBjbnQzLCAwLCB0cnVlKTsKKworCXRtYXggPSAyNTU7CisJdG1pbiA9IFNf RElWX1JPVU5EX1VQKDEwMCAqIGNvZWZmLCB1aSkgLSAyOworCXRpbWluZy0+aHNfZXhpdCA9IGxp bmVhcl9pbnRlcih0bWF4LCB0bWluLCBwY250MiwgMCwgdHJ1ZSk7CisKKwl0bWF4ID0gNjM7CisJ dGVtcCA9ICgodGltaW5nLT5oc19leGl0ID4+IDEpICsgMSkgKiAyICogdWk7CisJdGVtcCA9IDYw ICogY29lZmYgKyA1MiAqIHVpIC0gMjQgKiB1aSAtIHRlbXA7CisJdG1pbiA9IFNfRElWX1JPVU5E X1VQKHRlbXAsIDggKiB1aSkgLSAxOworCXRpbWluZy0+Y2xrX3Bvc3QgPSBsaW5lYXJfaW50ZXIo dG1heCwgdG1pbiwgcGNudDIsIDAsIGZhbHNlKTsKKworCXRtYXggPSA2MzsKKwl0ZW1wID0gKCh0 aW1pbmctPmNsa19wcmVwYXJlID4+IDEpICsgMSkgKiAyICogdWk7CisJdGVtcCArPSAoKHRpbWlu Zy0+Y2xrX3plcm8gPj4gMSkgKyAxKSAqIDIgKiB1aTsKKwl0ZW1wICs9IDggKiB1aSArIGxweDsK Kwl0bWluID0gU19ESVZfUk9VTkRfVVAodGVtcCwgOCAqIHVpKSAtIDE7CisJaWYgKHRtaW4gPiB0 bWF4KSB7CisJCXRlbXAgPSBsaW5lYXJfaW50ZXIoMiAqIHRtYXgsIHRtaW4sIHBjbnQyLCAwLCBm YWxzZSk7CisJCXRpbWluZy0+Y2xrX3ByZSA9IHRlbXAgPj4gMTsKKwl9IGVsc2UgeworCQl0aW1p bmctPmNsa19wcmUgPSBsaW5lYXJfaW50ZXIodG1heCwgdG1pbiwgcGNudDIsIDAsIGZhbHNlKTsK Kwl9CisKKwl0aW1pbmctPnRhX2dvID0gMzsKKwl0aW1pbmctPnRhX3N1cmUgPSAwOworCXRpbWlu Zy0+dGFfZ2V0ID0gNDsKKworCURCRygiUEhZIHRpbWluZ3M6ICVkLCAlZCwgJWQsICVkLCAlZCwg JWQsICVkLCAlZCwgJWQsICVkIiwKKwkJdGltaW5nLT5jbGtfcHJlLCB0aW1pbmctPmNsa19wb3N0 LCB0aW1pbmctPmNsa196ZXJvLAorCQl0aW1pbmctPmNsa190cmFpbCwgdGltaW5nLT5jbGtfcHJl cGFyZSwgdGltaW5nLT5oc19leGl0LAorCQl0aW1pbmctPmhzX3plcm8sIHRpbWluZy0+aHNfcHJl cGFyZSwgdGltaW5nLT5oc190cmFpbCwKKwkJdGltaW5nLT5oc19ycXN0KTsKKworCXJldHVybiAw OworfQorCit2b2lkIG1zbV9kc2lfcGh5X3NldF9zcmNfcGxsKHN0cnVjdCBtc21fZHNpX3BoeSAq cGh5LCBpbnQgcGxsX2lkLCB1MzIgcmVnLAorCQkJCXUzMiBiaXRfbWFzaykKK3sKKwlpbnQgcGh5 X2lkID0gcGh5LT5pZDsKKwl1MzIgdmFsOworCisJaWYgKChwaHlfaWQgPj0gRFNJX01BWCkgfHwg KHBsbF9pZCA+PSBEU0lfTUFYKSkKKwkJcmV0dXJuOworCisJdmFsID0gZHNpX3BoeV9yZWFkKHBo eS0+YmFzZSArIHJlZyk7CisKKwlpZiAocGh5LT5jZmctPnNyY19wbGxfdHJ1dGh0YWJsZVtwaHlf aWRdW3BsbF9pZF0pCisJCWRzaV9waHlfd3JpdGUocGh5LT5iYXNlICsgcmVnLCB2YWwgfCBiaXRf bWFzayk7CisJZWxzZQorCQlkc2lfcGh5X3dyaXRlKHBoeS0+YmFzZSArIHJlZywgdmFsICYgKH5i aXRfbWFzaykpOworfQorCitzdGF0aWMgaW50IGRzaV9waHlfcmVndWxhdG9yX2luaXQoc3RydWN0 IG1zbV9kc2lfcGh5ICpwaHkpCit7CisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgKnMgPSBw aHktPnN1cHBsaWVzOworCWNvbnN0IHN0cnVjdCBkc2lfcmVnX2VudHJ5ICpyZWdzID0gcGh5LT5j ZmctPnJlZ19jZmcucmVnczsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGh5LT5wZGV2LT5kZXY7 CisJaW50IG51bSA9IHBoeS0+Y2ZnLT5yZWdfY2ZnLm51bTsKKwlpbnQgaSwgcmV0OworCisJZm9y IChpID0gMDsgaSA8IG51bTsgaSsrKQorCQlzW2ldLnN1cHBseSA9IHJlZ3NbaV0ubmFtZTsKKwor CXJldCA9IGRldm1fcmVndWxhdG9yX2J1bGtfZ2V0KGRldiwgbnVtLCBzKTsKKwlpZiAocmV0IDwg MCkgeworCQlkZXZfZXJyKGRldiwgIiVzOiBmYWlsZWQgdG8gaW5pdCByZWd1bGF0b3IsIHJldD0l ZFxuIiwKKwkJCQkJCV9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWZvciAo aSA9IDA7IGkgPCBudW07IGkrKykgeworCQlpZiAoKHJlZ3NbaV0ubWluX3ZvbHRhZ2UgPj0gMCkg JiYgKHJlZ3NbaV0ubWF4X3ZvbHRhZ2UgPj0gMCkpIHsKKwkJCXJldCA9IHJlZ3VsYXRvcl9zZXRf dm9sdGFnZShzW2ldLmNvbnN1bWVyLAorCQkJCXJlZ3NbaV0ubWluX3ZvbHRhZ2UsIHJlZ3NbaV0u bWF4X3ZvbHRhZ2UpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlkZXZfZXJyKGRldiwKKwkJCQkJ InJlZ3VsYXRvciAlZCBzZXQgdm9sdGFnZSBmYWlsZWQsICVkXG4iLAorCQkJCQlpLCByZXQpOwor CQkJCXJldHVybiByZXQ7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQgZHNpX3BoeV9yZWd1bGF0b3JfZGlzYWJsZShzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSkK K3sKKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSAqcyA9IHBoeS0+c3VwcGxpZXM7CisJY29u c3Qgc3RydWN0IGRzaV9yZWdfZW50cnkgKnJlZ3MgPSBwaHktPmNmZy0+cmVnX2NmZy5yZWdzOwor CWludCBudW0gPSBwaHktPmNmZy0+cmVnX2NmZy5udW07CisJaW50IGk7CisKKwlEQkcoIiIpOwor CWZvciAoaSA9IG51bSAtIDE7IGkgPj0gMDsgaS0tKQorCQlpZiAocmVnc1tpXS5kaXNhYmxlX2xv YWQgPj0gMCkKKwkJCXJlZ3VsYXRvcl9zZXRfbG9hZChzW2ldLmNvbnN1bWVyLCByZWdzW2ldLmRp c2FibGVfbG9hZCk7CisKKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKG51bSwgcyk7Cit9CisKK3N0 YXRpYyBpbnQgZHNpX3BoeV9yZWd1bGF0b3JfZW5hYmxlKHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5 KQoreworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhICpzID0gcGh5LT5zdXBwbGllczsKKwlj b25zdCBzdHJ1Y3QgZHNpX3JlZ19lbnRyeSAqcmVncyA9IHBoeS0+Y2ZnLT5yZWdfY2ZnLnJlZ3M7 CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBoeS0+cGRldi0+ZGV2OworCWludCBudW0gPSBwaHkt PmNmZy0+cmVnX2NmZy5udW07CisJaW50IHJldCwgaTsKKworCURCRygiIik7CisJZm9yIChpID0g MDsgaSA8IG51bTsgaSsrKSB7CisJCWlmIChyZWdzW2ldLmVuYWJsZV9sb2FkID49IDApIHsKKwkJ CXJldCA9IHJlZ3VsYXRvcl9zZXRfbG9hZChzW2ldLmNvbnN1bWVyLAorCQkJCQkJCXJlZ3NbaV0u ZW5hYmxlX2xvYWQpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlkZXZfZXJyKGRldiwKKwkJCQkJ InJlZ3VsYXRvciAlZCBzZXQgb3AgbW9kZSBmYWlsZWQsICVkXG4iLAorCQkJCQlpLCByZXQpOwor CQkJCWdvdG8gZmFpbDsKKwkJCX0KKwkJfQorCX0KKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2Vu YWJsZShudW0sIHMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAicmVndWxhdG9y IGVuYWJsZSBmYWlsZWQsICVkXG4iLCByZXQpOworCQlnb3RvIGZhaWw7CisJfQorCisJcmV0dXJu IDA7CisKK2ZhaWw6CisJZm9yIChpLS07IGkgPj0gMDsgaS0tKQorCQlyZWd1bGF0b3Jfc2V0X2xv YWQoc1tpXS5jb25zdW1lciwgcmVnc1tpXS5kaXNhYmxlX2xvYWQpOworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyBpbnQgZHNpX3BoeV9lbmFibGVfcmVzb3VyY2Uoc3RydWN0IG1zbV9kc2lfcGh5 ICpwaHkpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBoeS0+cGRldi0+ZGV2OworCWludCBy ZXQ7CisKKwlwbV9ydW50aW1lX2dldF9zeW5jKGRldik7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9l bmFibGUocGh5LT5haGJfY2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiJXM6IGNh bid0IGVuYWJsZSBhaGIgY2xrLCAlZFxuIiwgX19mdW5jX18sIHJldCk7CisJCXBtX3J1bnRpbWVf cHV0X3N5bmMoZGV2KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBkc2lf cGh5X2Rpc2FibGVfcmVzb3VyY2Uoc3RydWN0IG1zbV9kc2lfcGh5ICpwaHkpCit7CisJY2xrX2Rp c2FibGVfdW5wcmVwYXJlKHBoeS0+YWhiX2Nsayk7CisJcG1fcnVudGltZV9wdXRfc3luYygmcGh5 LT5wZGV2LT5kZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkc2lf cGh5X2R0X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJxY29tLGRzaS1waHktMjhubS1o cG0iLAorCSAgLmRhdGEgPSAmZHNpX3BoeV8yOG5tX2hwbV9jZmdzIH0sCisJeyAuY29tcGF0aWJs ZSA9ICJxY29tLGRzaS1waHktMjhubS1scCIsCisJICAuZGF0YSA9ICZkc2lfcGh5XzI4bm1fbHBf Y2ZncyB9LAorCXsgLmNvbXBhdGlibGUgPSAicWNvbSxkc2ktcGh5LTIwbm0iLAorCSAgLmRhdGEg PSAmZHNpX3BoeV8yMG5tX2NmZ3MgfSwKKwl7fQorfTsKKworc3RhdGljIGludCBkc2lfcGh5X2Ry aXZlcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtc21f ZHNpX3BoeSAqcGh5OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJY29uc3Qg c3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CisJaW50IHJldDsKKworCXBoeSA9IGRldm1fa3ph bGxvYyhkZXYsIHNpemVvZigqcGh5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwaHkpCisJCXJldHVy biAtRU5PTUVNOworCisJbWF0Y2ggPSBvZl9tYXRjaF9ub2RlKGRzaV9waHlfZHRfbWF0Y2gsIGRl di0+b2Zfbm9kZSk7CisJaWYgKCFtYXRjaCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwaHktPmNm ZyA9IG1hdGNoLT5kYXRhOworCXBoeS0+cGRldiA9IHBkZXY7CisKKwlyZXQgPSBvZl9wcm9wZXJ0 eV9yZWFkX3UzMihkZXYtPm9mX25vZGUsCisJCQkJInFjb20sZHNpLXBoeS1pbmRleCIsICZwaHkt PmlkKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiJXM6IFBIWSBpbmRleCBub3Qgc3Bl Y2lmaWVkLCAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXQpOworCQlnb3RvIGZhaWw7CisJfQorCisJ cGh5LT5yZWd1bGF0b3JfbGRvX21vZGUgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LT5vZl9u b2RlLAorCQkJCSJxY29tLGRzaS1waHktcmVndWxhdG9yLWxkby1tb2RlIik7CisKKwlwaHktPmJh c2UgPSBtc21faW9yZW1hcChwZGV2LCAiZHNpX3BoeSIsICJEU0lfUEhZIik7CisJaWYgKElTX0VS UihwaHktPmJhc2UpKSB7CisJCWRldl9lcnIoZGV2LCAiJXM6IGZhaWxlZCB0byBtYXAgcGh5IGJh c2VcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKwor CXBoeS0+cmVnX2Jhc2UgPSBtc21faW9yZW1hcChwZGV2LCAiZHNpX3BoeV9yZWd1bGF0b3IiLAor CQkJCSJEU0lfUEhZX1JFRyIpOworCWlmIChJU19FUlIocGh5LT5yZWdfYmFzZSkpIHsKKwkJZGV2 X2VycihkZXYsICIlczogZmFpbGVkIHRvIG1hcCBwaHkgcmVndWxhdG9yIGJhc2VcbiIsCisJCQlf X2Z1bmNfXyk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisKKwlyZXQgPSBk c2lfcGh5X3JlZ3VsYXRvcl9pbml0KHBoeSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwg IiVzOiBmYWlsZWQgdG8gaW5pdCByZWd1bGF0b3JcbiIsIF9fZnVuY19fKTsKKwkJZ290byBmYWls OworCX0KKworCXBoeS0+YWhiX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJpZmFjZV9jbGsiKTsK KwlpZiAoSVNfRVJSKHBoeS0+YWhiX2NsaykpIHsKKwkJZGV2X2VycihkZXYsICIlczogVW5hYmxl IHRvIGdldCBhaGIgY2xrXG4iLCBfX2Z1bmNfXyk7CisJCXJldCA9IFBUUl9FUlIocGh5LT5haGJf Y2xrKTsKKwkJZ290byBmYWlsOworCX0KKworCS8qIFBMTCBpbml0IHdpbGwgY2FsbCBpbnRvIGNs a19yZWdpc3RlciB3aGljaCByZXF1aXJlcworCSAqIHJlZ2lzdGVyIGFjY2Vzcywgc28gd2UgbmVl ZCB0byBlbmFibGUgcG93ZXIgYW5kIGFoYiBjbG9jay4KKwkgKi8KKwlyZXQgPSBkc2lfcGh5X2Vu YWJsZV9yZXNvdXJjZShwaHkpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKKworCXBoeS0+cGxs ID0gbXNtX2RzaV9wbGxfaW5pdChwZGV2LCBwaHktPmNmZy0+dHlwZSwgcGh5LT5pZCk7CisJaWYg KCFwaHktPnBsbCkKKwkJZGV2X2luZm8oZGV2LAorCQkJIiVzOiBwbGwgaW5pdCBmYWlsZWQsIG5l ZWQgc2VwYXJhdGUgcGxsIGNsayBkcml2ZXJcbiIsCisJCQlfX2Z1bmNfXyk7CisKKwlkc2lfcGh5 X2Rpc2FibGVfcmVzb3VyY2UocGh5KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBo eSk7CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50 IGRzaV9waHlfZHJpdmVyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorewor CXN0cnVjdCBtc21fZHNpX3BoeSAqcGh5ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisK KwlpZiAocGh5ICYmIHBoeS0+cGxsKSB7CisJCW1zbV9kc2lfcGxsX2Rlc3Ryb3kocGh5LT5wbGwp OworCQlwaHktPnBsbCA9IE5VTEw7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwg TlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIg ZHNpX3BoeV9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLnByb2JlICAgICAgPSBkc2lfcGh5X2RyaXZl cl9wcm9iZSwKKwkucmVtb3ZlICAgICA9IGRzaV9waHlfZHJpdmVyX3JlbW92ZSwKKwkuZHJpdmVy ICAgICA9IHsKKwkJLm5hbWUgICA9ICJtc21fZHNpX3BoeSIsCisJCS5vZl9tYXRjaF90YWJsZSA9 IGRzaV9waHlfZHRfbWF0Y2gsCisJfSwKK307CisKK3ZvaWQgX19pbml0IG1zbV9kc2lfcGh5X2Ry aXZlcl9yZWdpc3Rlcih2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZHNpX3Bo eV9wbGF0Zm9ybV9kcml2ZXIpOworfQorCit2b2lkIF9fZXhpdCBtc21fZHNpX3BoeV9kcml2ZXJf dW5yZWdpc3Rlcih2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkc2lfcGh5 X3BsYXRmb3JtX2RyaXZlcik7Cit9CisKK2ludCBtc21fZHNpX3BoeV9lbmFibGUoc3RydWN0IG1z bV9kc2lfcGh5ICpwaHksIGludCBzcmNfcGxsX2lkLAorCWNvbnN0IHVuc2lnbmVkIGxvbmcgYml0 X3JhdGUsIGNvbnN0IHVuc2lnbmVkIGxvbmcgZXNjX3JhdGUpCit7CisJc3RydWN0IGRldmljZSAq ZGV2ID0gJnBoeS0+cGRldi0+ZGV2OworCWludCByZXQ7CisKKwlpZiAoIXBoeSB8fCAhcGh5LT5j ZmctPm9wcy5lbmFibGUpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gZHNpX3BoeV9yZWd1 bGF0b3JfZW5hYmxlKHBoeSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIiVzOiByZWd1 bGF0b3IgZW5hYmxlIGZhaWxlZCwgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0KTsKKwkJcmV0dXJu IHJldDsKKwl9CisKKwlyZXQgPSBwaHktPmNmZy0+b3BzLmVuYWJsZShwaHksIHNyY19wbGxfaWQs IGJpdF9yYXRlLCBlc2NfcmF0ZSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIiVzOiBw aHkgZW5hYmxlIGZhaWxlZCwgJWRcbiIsIF9fZnVuY19fLCByZXQpOworCQlkc2lfcGh5X3JlZ3Vs YXRvcl9kaXNhYmxlKHBoeSk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisK K3ZvaWQgbXNtX2RzaV9waHlfZGlzYWJsZShzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSkKK3sKKwlp ZiAoIXBoeSB8fCAhcGh5LT5jZmctPm9wcy5kaXNhYmxlKQorCQlyZXR1cm47CisKKwlwaHktPmNm Zy0+b3BzLmRpc2FibGUocGh5KTsKKworCWRzaV9waHlfcmVndWxhdG9yX2Rpc2FibGUocGh5KTsK K30KKwordm9pZCBtc21fZHNpX3BoeV9nZXRfY2xrX3ByZV9wb3N0KHN0cnVjdCBtc21fZHNpX3Bo eSAqcGh5LAorCQkJCQl1MzIgKmNsa19wcmUsIHUzMiAqY2xrX3Bvc3QpCit7CisJaWYgKCFwaHkp CisJCXJldHVybjsKKworCWlmIChjbGtfcHJlKQorCQkqY2xrX3ByZSA9IHBoeS0+dGltaW5nLmNs a19wcmU7CisJaWYgKGNsa19wb3N0KQorCQkqY2xrX3Bvc3QgPSBwaHktPnRpbWluZy5jbGtfcG9z dDsKK30KKworc3RydWN0IG1zbV9kc2lfcGxsICptc21fZHNpX3BoeV9nZXRfcGxsKHN0cnVjdCBt c21fZHNpX3BoeSAqcGh5KQoreworCWlmICghcGh5KQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVy biBwaHktPnBsbDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvcGh5 L2RzaV9waHkuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL3BoeS9kc2lfcGh5LmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ1NmIyNQotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL3BoeS9kc2lfcGh5LmgKQEAgLTAsMCArMSw4OSBAQAor LyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2 ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fRFNJX1BIWV9IX18KKyNk ZWZpbmUgX19EU0lfUEhZX0hfXworCisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVy Lmg+CisKKyNpbmNsdWRlICJkc2kuaCIKKworI2RlZmluZSBkc2lfcGh5X3JlYWQob2Zmc2V0KSBt c21fcmVhZGwoKG9mZnNldCkpCisjZGVmaW5lIGRzaV9waHlfd3JpdGUob2Zmc2V0LCBkYXRhKSBt c21fd3JpdGVsKChkYXRhKSwgKG9mZnNldCkpCisKK3N0cnVjdCBtc21fZHNpX3BoeV9vcHMgewor CWludCAoKmVuYWJsZSkoc3RydWN0IG1zbV9kc2lfcGh5ICpwaHksIGludCBzcmNfcGxsX2lkLAor CQljb25zdCB1bnNpZ25lZCBsb25nIGJpdF9yYXRlLCBjb25zdCB1bnNpZ25lZCBsb25nIGVzY19y YXRlKTsKKwl2b2lkICgqZGlzYWJsZSkoc3RydWN0IG1zbV9kc2lfcGh5ICpwaHkpOworfTsKKwor c3RydWN0IG1zbV9kc2lfcGh5X2NmZyB7CisJZW51bSBtc21fZHNpX3BoeV90eXBlIHR5cGU7CisJ c3RydWN0IGRzaV9yZWdfY29uZmlnIHJlZ19jZmc7CisJc3RydWN0IG1zbV9kc2lfcGh5X29wcyBv cHM7CisKKwkvKgorCSAqIEVhY2ggY2VsbCB7cGh5X2lkLCBwbGxfaWR9IG9mIHRoZSB0cnV0aCB0 YWJsZSBpbmRpY2F0ZXMKKwkgKiBpZiB0aGUgc291cmNlIFBMTCBzZWxlY3Rpb24gYml0IHNob3Vs ZCBiZSBzZXQgZm9yIGVhY2ggUEhZLgorCSAqIEZpbGwgZGVmYXVsdCBIL1cgdmFsdWVzIGluIGls bGVnYWwgY2VsbHMsIGVnLiBjZWxsIHswLCAxfS4KKwkgKi8KKwlib29sIHNyY19wbGxfdHJ1dGh0 YWJsZVtEU0lfTUFYXVtEU0lfTUFYXTsKK307CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbXNtX2Rz aV9waHlfY2ZnIGRzaV9waHlfMjhubV9ocG1fY2ZnczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbXNt X2RzaV9waHlfY2ZnIGRzaV9waHlfMjhubV9scF9jZmdzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBt c21fZHNpX3BoeV9jZmcgZHNpX3BoeV8yMG5tX2NmZ3M7CisKK3N0cnVjdCBtc21fZHNpX2RwaHlf dGltaW5nIHsKKwl1MzIgY2xrX3ByZTsKKwl1MzIgY2xrX3Bvc3Q7CisJdTMyIGNsa196ZXJvOwor CXUzMiBjbGtfdHJhaWw7CisJdTMyIGNsa19wcmVwYXJlOworCXUzMiBoc19leGl0OworCXUzMiBo c196ZXJvOworCXUzMiBoc19wcmVwYXJlOworCXUzMiBoc190cmFpbDsKKwl1MzIgaHNfcnFzdDsK Kwl1MzIgdGFfZ287CisJdTMyIHRhX3N1cmU7CisJdTMyIHRhX2dldDsKK307CisKK3N0cnVjdCBt c21fZHNpX3BoeSB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwl2b2lkIF9faW9t ZW0gKmJhc2U7CisJdm9pZCBfX2lvbWVtICpyZWdfYmFzZTsKKwlpbnQgaWQ7CisKKwlzdHJ1Y3Qg Y2xrICphaGJfY2xrOworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW0RTSV9E RVZfUkVHVUxBVE9SX01BWF07CisKKwlzdHJ1Y3QgbXNtX2RzaV9kcGh5X3RpbWluZyB0aW1pbmc7 CisJY29uc3Qgc3RydWN0IG1zbV9kc2lfcGh5X2NmZyAqY2ZnOworCisJYm9vbCByZWd1bGF0b3Jf bGRvX21vZGU7CisKKwlzdHJ1Y3QgbXNtX2RzaV9wbGwgKnBsbDsKK307CisKKy8qCisgKiBQSFkg aW50ZXJuYWwgZnVuY3Rpb25zCisgKi8KK2ludCBtc21fZHNpX2RwaHlfdGltaW5nX2NhbGMoc3Ry dWN0IG1zbV9kc2lfZHBoeV90aW1pbmcgKnRpbWluZywKKwljb25zdCB1bnNpZ25lZCBsb25nIGJp dF9yYXRlLCBjb25zdCB1bnNpZ25lZCBsb25nIGVzY19yYXRlKTsKK3ZvaWQgbXNtX2RzaV9waHlf c2V0X3NyY19wbGwoc3RydWN0IG1zbV9kc2lfcGh5ICpwaHksIGludCBwbGxfaWQsIHUzMiByZWcs CisJCQkJdTMyIGJpdF9tYXNrKTsKKworI2VuZGlmIC8qIF9fRFNJX1BIWV9IX18gKi8KKwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvcGh5L2RzaV9waHlfMjBubS5jIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kc2kvcGh5L2RzaV9waHlfMjBubS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjJlOWJhMTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2RzaS9waHkvZHNpX3BoeV8yMG5tLmMKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisg KiBDb3B5cmlnaHQgKGMpIDIwMTUsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJl c2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lv biAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgImRzaV9waHkuaCIKKyNpbmNsdWRl ICJkc2kueG1sLmgiCisKK3N0YXRpYyB2b2lkIGRzaV8yMG5tX2RwaHlfc2V0X3RpbWluZyhzdHJ1 Y3QgbXNtX2RzaV9waHkgKnBoeSwKKwkJc3RydWN0IG1zbV9kc2lfZHBoeV90aW1pbmcgKnRpbWlu ZykKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBwaHktPmJhc2U7CisKKwlkc2lfcGh5X3dyaXRl KGJhc2UgKyBSRUdfRFNJXzIwbm1fUEhZX1RJTUlOR19DVFJMXzAsCisJCURTSV8yMG5tX1BIWV9U SU1JTkdfQ1RSTF8wX0NMS19aRVJPKHRpbWluZy0+Y2xrX3plcm8pKTsKKwlkc2lfcGh5X3dyaXRl KGJhc2UgKyBSRUdfRFNJXzIwbm1fUEhZX1RJTUlOR19DVFJMXzEsCisJCURTSV8yMG5tX1BIWV9U SU1JTkdfQ1RSTF8xX0NMS19UUkFJTCh0aW1pbmctPmNsa190cmFpbCkpOworCWRzaV9waHlfd3Jp dGUoYmFzZSArIFJFR19EU0lfMjBubV9QSFlfVElNSU5HX0NUUkxfMiwKKwkJRFNJXzIwbm1fUEhZ X1RJTUlOR19DVFJMXzJfQ0xLX1BSRVBBUkUodGltaW5nLT5jbGtfcHJlcGFyZSkpOworCWlmICh0 aW1pbmctPmNsa196ZXJvICYgQklUKDgpKQorCQlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJ XzIwbm1fUEhZX1RJTUlOR19DVFJMXzMsCisJCQlEU0lfMjBubV9QSFlfVElNSU5HX0NUUkxfM19D TEtfWkVST184KTsKKwlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzIwbm1fUEhZX1RJTUlO R19DVFJMXzQsCisJCURTSV8yMG5tX1BIWV9USU1JTkdfQ1RSTF80X0hTX0VYSVQodGltaW5nLT5o c19leGl0KSk7CisJZHNpX3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8yMG5tX1BIWV9USU1JTkdf Q1RSTF81LAorCQlEU0lfMjBubV9QSFlfVElNSU5HX0NUUkxfNV9IU19aRVJPKHRpbWluZy0+aHNf emVybykpOworCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjBubV9QSFlfVElNSU5HX0NU UkxfNiwKKwkJRFNJXzIwbm1fUEhZX1RJTUlOR19DVFJMXzZfSFNfUFJFUEFSRSh0aW1pbmctPmhz X3ByZXBhcmUpKTsKKwlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzIwbm1fUEhZX1RJTUlO R19DVFJMXzcsCisJCURTSV8yMG5tX1BIWV9USU1JTkdfQ1RSTF83X0hTX1RSQUlMKHRpbWluZy0+ aHNfdHJhaWwpKTsKKwlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzIwbm1fUEhZX1RJTUlO R19DVFJMXzgsCisJCURTSV8yMG5tX1BIWV9USU1JTkdfQ1RSTF84X0hTX1JRU1QodGltaW5nLT5o c19ycXN0KSk7CisJZHNpX3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8yMG5tX1BIWV9USU1JTkdf Q1RSTF85LAorCQlEU0lfMjBubV9QSFlfVElNSU5HX0NUUkxfOV9UQV9HTyh0aW1pbmctPnRhX2dv KSB8CisJCURTSV8yMG5tX1BIWV9USU1JTkdfQ1RSTF85X1RBX1NVUkUodGltaW5nLT50YV9zdXJl KSk7CisJZHNpX3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8yMG5tX1BIWV9USU1JTkdfQ1RSTF8x MCwKKwkJRFNJXzIwbm1fUEhZX1RJTUlOR19DVFJMXzEwX1RBX0dFVCh0aW1pbmctPnRhX2dldCkp OworCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjBubV9QSFlfVElNSU5HX0NUUkxfMTEs CisJCURTSV8yMG5tX1BIWV9USU1JTkdfQ1RSTF8xMV9UUklHM19DTUQoMCkpOworfQorCitzdGF0 aWMgdm9pZCBkc2lfMjBubV9waHlfcmVndWxhdG9yX2N0cmwoc3RydWN0IG1zbV9kc2lfcGh5ICpw aHksIGJvb2wgZW5hYmxlKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IHBoeS0+cmVnX2Jhc2U7 CisKKwlpZiAoIWVuYWJsZSkgeworCQlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzIwbm1f UEhZX1JFR1VMQVRPUl9DQUxfUFdSX0NGRywgMCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAocGh5 LT5yZWd1bGF0b3JfbGRvX21vZGUpIHsKKwkJZHNpX3BoeV93cml0ZShwaHktPmJhc2UgKyBSRUdf RFNJXzIwbm1fUEhZX0xET19DTlRSTCwgMHgxZCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBub24g TERPIG1vZGUgKi8KKwlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzIwbm1fUEhZX1JFR1VM QVRPUl9DVFJMXzEsIDB4MDMpOworCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjBubV9Q SFlfUkVHVUxBVE9SX0NUUkxfMiwgMHgwMyk7CisJZHNpX3BoeV93cml0ZShiYXNlICsgUkVHX0RT SV8yMG5tX1BIWV9SRUdVTEFUT1JfQ1RSTF8zLCAweDAwKTsKKwlkc2lfcGh5X3dyaXRlKGJhc2Ug KyBSRUdfRFNJXzIwbm1fUEhZX1JFR1VMQVRPUl9DVFJMXzQsIDB4MjApOworCWRzaV9waHlfd3Jp dGUoYmFzZSArIFJFR19EU0lfMjBubV9QSFlfUkVHVUxBVE9SX0NBTF9QV1JfQ0ZHLCAweDAxKTsK Kwlkc2lfcGh5X3dyaXRlKHBoeS0+YmFzZSArIFJFR19EU0lfMjBubV9QSFlfTERPX0NOVFJMLCAw eDAwKTsKKwlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzIwbm1fUEhZX1JFR1VMQVRPUl9D VFJMXzAsIDB4MDMpOworfQorCitzdGF0aWMgaW50IGRzaV8yMG5tX3BoeV9lbmFibGUoc3RydWN0 IG1zbV9kc2lfcGh5ICpwaHksIGludCBzcmNfcGxsX2lkLAorCQljb25zdCB1bnNpZ25lZCBsb25n IGJpdF9yYXRlLCBjb25zdCB1bnNpZ25lZCBsb25nIGVzY19yYXRlKQoreworCXN0cnVjdCBtc21f ZHNpX2RwaHlfdGltaW5nICp0aW1pbmcgPSAmcGh5LT50aW1pbmc7CisJaW50IGk7CisJdm9pZCBf X2lvbWVtICpiYXNlID0gcGh5LT5iYXNlOworCXUzMiBjZmdfNFs0XSA9IHsweDIwLCAweDQwLCAw eDIwLCAweDAwfTsKKworCURCRygiIik7CisKKwlpZiAobXNtX2RzaV9kcGh5X3RpbWluZ19jYWxj KHRpbWluZywgYml0X3JhdGUsIGVzY19yYXRlKSkgeworCQlkZXZfZXJyKCZwaHktPnBkZXYtPmRl diwKKwkJCSIlczogRC1QSFkgdGltaW5nIGNhbGN1bGF0aW9uIGZhaWxlZFxuIiwgX19mdW5jX18p OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkc2lfMjBubV9waHlfcmVndWxhdG9yX2N0cmwo cGh5LCB0cnVlKTsKKworCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjBubV9QSFlfU1RS RU5HVEhfMCwgMHhmZik7CisKKwltc21fZHNpX3BoeV9zZXRfc3JjX3BsbChwaHksIHNyY19wbGxf aWQsCisJCQkJUkVHX0RTSV8yMG5tX1BIWV9HTEJMX1RFU1RfQ1RSTCwKKwkJCQlEU0lfMjBubV9Q SFlfR0xCTF9URVNUX0NUUkxfQklUQ0xLX0hTX1NFTCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsg aSsrKSB7CisJCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjBubV9QSFlfTE5fQ0ZHXzMo aSksCisJCQkJCQkJKGkgPj4gMSkgKiAweDQwKTsKKwkJZHNpX3BoeV93cml0ZShiYXNlICsgUkVH X0RTSV8yMG5tX1BIWV9MTl9URVNUX1NUUl8wKGkpLCAweDAxKTsKKwkJZHNpX3BoeV93cml0ZShi YXNlICsgUkVHX0RTSV8yMG5tX1BIWV9MTl9URVNUX1NUUl8xKGkpLCAweDQ2KTsKKwkJZHNpX3Bo eV93cml0ZShiYXNlICsgUkVHX0RTSV8yMG5tX1BIWV9MTl9DRkdfMChpKSwgMHgwMik7CisJCWRz aV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjBubV9QSFlfTE5fQ0ZHXzEoaSksIDB4YTApOwor CQlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzIwbm1fUEhZX0xOX0NGR180KGkpLCBjZmdf NFtpXSk7CisJfQorCisJZHNpX3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8yMG5tX1BIWV9MTkNL X0NGR18zLCAweDgwKTsKKwlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzIwbm1fUEhZX0xO Q0tfVEVTVF9TVFIwLCAweDAxKTsKKwlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzIwbm1f UEhZX0xOQ0tfVEVTVF9TVFIxLCAweDQ2KTsKKwlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJ XzIwbm1fUEhZX0xOQ0tfQ0ZHXzAsIDB4MDApOworCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19E U0lfMjBubV9QSFlfTE5DS19DRkdfMSwgMHhhMCk7CisJZHNpX3BoeV93cml0ZShiYXNlICsgUkVH X0RTSV8yMG5tX1BIWV9MTkNLX0NGR18yLCAweDAwKTsKKwlkc2lfcGh5X3dyaXRlKGJhc2UgKyBS RUdfRFNJXzIwbm1fUEhZX0xOQ0tfQ0ZHXzQsIDB4MDApOworCisJZHNpXzIwbm1fZHBoeV9zZXRf dGltaW5nKHBoeSwgdGltaW5nKTsKKworCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjBu bV9QSFlfQ1RSTF8xLCAweDAwKTsKKworCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjBu bV9QSFlfU1RSRU5HVEhfMSwgMHgwNik7CisKKwkvKiBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyB3 cml0dGVuIGJlZm9yZSBlbmFibGUgKi8KKwl3bWIoKTsKKwlkc2lfcGh5X3dyaXRlKGJhc2UgKyBS RUdfRFNJXzIwbm1fUEhZX0NUUkxfMCwgMHg3Zik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQgZHNpXzIwbm1fcGh5X2Rpc2FibGUoc3RydWN0IG1zbV9kc2lfcGh5ICpwaHkpCit7CisJ ZHNpX3BoeV93cml0ZShwaHktPmJhc2UgKyBSRUdfRFNJXzIwbm1fUEhZX0NUUkxfMCwgMCk7CisJ ZHNpXzIwbm1fcGh5X3JlZ3VsYXRvcl9jdHJsKHBoeSwgZmFsc2UpOworfQorCitjb25zdCBzdHJ1 Y3QgbXNtX2RzaV9waHlfY2ZnIGRzaV9waHlfMjBubV9jZmdzID0geworCS50eXBlID0gTVNNX0RT SV9QSFlfMjBOTSwKKwkuc3JjX3BsbF90cnV0aHRhYmxlID0geyB7ZmFsc2UsIHRydWV9LCB7ZmFs c2UsIHRydWV9IH0sCisJLnJlZ19jZmcgPSB7CisJCS5udW0gPSAyLAorCQkucmVncyA9IHsKKwkJ CXsidmRkaW8iLCAxODAwMDAwLCAxODAwMDAwLCAxMDAwMDAsIDEwMH0sCisJCQl7InZjY2EiLCAx MDAwMDAwLCAxMDAwMDAwLCAxMDAwMCwgMTAwfSwKKwkJfSwKKwl9LAorCS5vcHMgPSB7CisJCS5l bmFibGUgPSBkc2lfMjBubV9waHlfZW5hYmxlLAorCQkuZGlzYWJsZSA9IGRzaV8yMG5tX3BoeV9k aXNhYmxlLAorCX0KK307CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL3Bo eS9kc2lfcGh5XzI4bm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL3BoeS9kc2lfcGh5XzI4 bm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWE3YzdiCi0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvcGh5L2RzaV9waHlfMjhubS5jCkBA IC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBUaGUgTGludXggRm91 bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u IDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRl ICJkc2lfcGh5LmgiCisjaW5jbHVkZSAiZHNpLnhtbC5oIgorCitzdGF0aWMgdm9pZCBkc2lfMjhu bV9kcGh5X3NldF90aW1pbmcoc3RydWN0IG1zbV9kc2lfcGh5ICpwaHksCisJCXN0cnVjdCBtc21f ZHNpX2RwaHlfdGltaW5nICp0aW1pbmcpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gcGh5LT5i YXNlOworCisJZHNpX3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8yOG5tX1BIWV9USU1JTkdfQ1RS TF8wLAorCQlEU0lfMjhubV9QSFlfVElNSU5HX0NUUkxfMF9DTEtfWkVSTyh0aW1pbmctPmNsa196 ZXJvKSk7CisJZHNpX3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8yOG5tX1BIWV9USU1JTkdfQ1RS TF8xLAorCQlEU0lfMjhubV9QSFlfVElNSU5HX0NUUkxfMV9DTEtfVFJBSUwodGltaW5nLT5jbGtf dHJhaWwpKTsKKwlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzI4bm1fUEhZX1RJTUlOR19D VFJMXzIsCisJCURTSV8yOG5tX1BIWV9USU1JTkdfQ1RSTF8yX0NMS19QUkVQQVJFKHRpbWluZy0+ Y2xrX3ByZXBhcmUpKTsKKwlpZiAodGltaW5nLT5jbGtfemVybyAmIEJJVCg4KSkKKwkJZHNpX3Bo eV93cml0ZShiYXNlICsgUkVHX0RTSV8yOG5tX1BIWV9USU1JTkdfQ1RSTF8zLAorCQkJRFNJXzI4 bm1fUEhZX1RJTUlOR19DVFJMXzNfQ0xLX1pFUk9fOCk7CisJZHNpX3BoeV93cml0ZShiYXNlICsg UkVHX0RTSV8yOG5tX1BIWV9USU1JTkdfQ1RSTF80LAorCQlEU0lfMjhubV9QSFlfVElNSU5HX0NU UkxfNF9IU19FWElUKHRpbWluZy0+aHNfZXhpdCkpOworCWRzaV9waHlfd3JpdGUoYmFzZSArIFJF R19EU0lfMjhubV9QSFlfVElNSU5HX0NUUkxfNSwKKwkJRFNJXzI4bm1fUEhZX1RJTUlOR19DVFJM XzVfSFNfWkVSTyh0aW1pbmctPmhzX3plcm8pKTsKKwlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdf RFNJXzI4bm1fUEhZX1RJTUlOR19DVFJMXzYsCisJCURTSV8yOG5tX1BIWV9USU1JTkdfQ1RSTF82 X0hTX1BSRVBBUkUodGltaW5nLT5oc19wcmVwYXJlKSk7CisJZHNpX3BoeV93cml0ZShiYXNlICsg UkVHX0RTSV8yOG5tX1BIWV9USU1JTkdfQ1RSTF83LAorCQlEU0lfMjhubV9QSFlfVElNSU5HX0NU UkxfN19IU19UUkFJTCh0aW1pbmctPmhzX3RyYWlsKSk7CisJZHNpX3BoeV93cml0ZShiYXNlICsg UkVHX0RTSV8yOG5tX1BIWV9USU1JTkdfQ1RSTF84LAorCQlEU0lfMjhubV9QSFlfVElNSU5HX0NU UkxfOF9IU19SUVNUKHRpbWluZy0+aHNfcnFzdCkpOworCWRzaV9waHlfd3JpdGUoYmFzZSArIFJF R19EU0lfMjhubV9QSFlfVElNSU5HX0NUUkxfOSwKKwkJRFNJXzI4bm1fUEhZX1RJTUlOR19DVFJM XzlfVEFfR08odGltaW5nLT50YV9nbykgfAorCQlEU0lfMjhubV9QSFlfVElNSU5HX0NUUkxfOV9U QV9TVVJFKHRpbWluZy0+dGFfc3VyZSkpOworCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lf MjhubV9QSFlfVElNSU5HX0NUUkxfMTAsCisJCURTSV8yOG5tX1BIWV9USU1JTkdfQ1RSTF8xMF9U QV9HRVQodGltaW5nLT50YV9nZXQpKTsKKwlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzI4 bm1fUEhZX1RJTUlOR19DVFJMXzExLAorCQlEU0lfMjhubV9QSFlfVElNSU5HX0NUUkxfMTFfVFJJ RzNfQ01EKDApKTsKK30KKworc3RhdGljIHZvaWQgZHNpXzI4bm1fcGh5X3JlZ3VsYXRvcl9jdHJs KHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5LCBib29sIGVuYWJsZSkKK3sKKwl2b2lkIF9faW9tZW0g KmJhc2UgPSBwaHktPnJlZ19iYXNlOworCisJaWYgKCFlbmFibGUpIHsKKwkJZHNpX3BoeV93cml0 ZShiYXNlICsgUkVHX0RTSV8yOG5tX1BIWV9SRUdVTEFUT1JfQ0FMX1BXUl9DRkcsIDApOworCQly ZXR1cm47CisJfQorCisJZHNpX3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8yOG5tX1BIWV9SRUdV TEFUT1JfQ1RSTF8wLCAweDApOworCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV9Q SFlfUkVHVUxBVE9SX0NBTF9QV1JfQ0ZHLCAxKTsKKwlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdf RFNJXzI4bm1fUEhZX1JFR1VMQVRPUl9DVFJMXzUsIDApOworCWRzaV9waHlfd3JpdGUoYmFzZSAr IFJFR19EU0lfMjhubV9QSFlfUkVHVUxBVE9SX0NUUkxfMywgMCk7CisJZHNpX3BoeV93cml0ZShi YXNlICsgUkVHX0RTSV8yOG5tX1BIWV9SRUdVTEFUT1JfQ1RSTF8yLCAweDMpOworCWRzaV9waHlf d3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV9QSFlfUkVHVUxBVE9SX0NUUkxfMSwgMHg5KTsKKwlk c2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzI4bm1fUEhZX1JFR1VMQVRPUl9DVFJMXzAsIDB4 Nyk7CisJZHNpX3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8yOG5tX1BIWV9SRUdVTEFUT1JfQ1RS TF80LCAweDIwKTsKK30KKworc3RhdGljIGludCBkc2lfMjhubV9waHlfZW5hYmxlKHN0cnVjdCBt c21fZHNpX3BoeSAqcGh5LCBpbnQgc3JjX3BsbF9pZCwKKwkJY29uc3QgdW5zaWduZWQgbG9uZyBi aXRfcmF0ZSwgY29uc3QgdW5zaWduZWQgbG9uZyBlc2NfcmF0ZSkKK3sKKwlzdHJ1Y3QgbXNtX2Rz aV9kcGh5X3RpbWluZyAqdGltaW5nID0gJnBoeS0+dGltaW5nOworCWludCBpOworCXZvaWQgX19p b21lbSAqYmFzZSA9IHBoeS0+YmFzZTsKKworCURCRygiIik7CisKKwlpZiAobXNtX2RzaV9kcGh5 X3RpbWluZ19jYWxjKHRpbWluZywgYml0X3JhdGUsIGVzY19yYXRlKSkgeworCQlkZXZfZXJyKCZw aHktPnBkZXYtPmRldiwKKwkJCSIlczogRC1QSFkgdGltaW5nIGNhbGN1bGF0aW9uIGZhaWxlZFxu IiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkc2lfcGh5X3dyaXRlKGJh c2UgKyBSRUdfRFNJXzI4bm1fUEhZX1NUUkVOR1RIXzAsIDB4ZmYpOworCisJZHNpXzI4bm1fcGh5 X3JlZ3VsYXRvcl9jdHJsKHBoeSwgdHJ1ZSk7CisKKwlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdf RFNJXzI4bm1fUEhZX0xET19DTlRSTCwgMHgwMCk7CisKKwlkc2lfMjhubV9kcGh5X3NldF90aW1p bmcocGh5LCB0aW1pbmcpOworCisJZHNpX3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8yOG5tX1BI WV9DVFJMXzEsIDB4MDApOworCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV9QSFlf Q1RSTF8wLCAweDVmKTsKKworCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV9QSFlf U1RSRU5HVEhfMSwgMHg2KTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJZHNpX3Bo eV93cml0ZShiYXNlICsgUkVHX0RTSV8yOG5tX1BIWV9MTl9DRkdfMChpKSwgMCk7CisJCWRzaV9w aHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV9QSFlfTE5fQ0ZHXzEoaSksIDApOworCQlkc2lf cGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzI4bm1fUEhZX0xOX0NGR18yKGkpLCAwKTsKKwkJZHNp X3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8yOG5tX1BIWV9MTl9DRkdfMyhpKSwgMCk7CisJCWRz aV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV9QSFlfTE5fVEVTVF9EQVRBUEFUSChpKSwg MCk7CisJCWRzaV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV9QSFlfTE5fREVCVUdfU0VM KGkpLCAwKTsKKwkJZHNpX3BoeV93cml0ZShiYXNlICsgUkVHX0RTSV8yOG5tX1BIWV9MTl9URVNU X1NUUl8wKGkpLCAweDEpOworCQlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdfRFNJXzI4bm1fUEhZ X0xOX1RFU1RfU1RSXzEoaSksIDB4OTcpOworCX0KKwlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdf RFNJXzI4bm1fUEhZX0xOX0NGR180KDApLCAwKTsKKwlkc2lfcGh5X3dyaXRlKGJhc2UgKyBSRUdf RFNJXzI4bm1fUEhZX0xOX0NGR180KDEpLCAweDUpOworCWRzaV9waHlfd3JpdGUoYmFzZSArIFJF R19EU0lfMjhubV9QSFlfTE5fQ0ZHXzQoMiksIDB4YSk7CisJZHNpX3BoeV93cml0ZShiYXNlICsg UkVHX0RTSV8yOG5tX1BIWV9MTl9DRkdfNCgzKSwgMHhmKTsKKworCWRzaV9waHlfd3JpdGUoYmFz ZSArIFJFR19EU0lfMjhubV9QSFlfTE5DS19DRkdfMSwgMHhjMCk7CisJZHNpX3BoeV93cml0ZShi YXNlICsgUkVHX0RTSV8yOG5tX1BIWV9MTkNLX1RFU1RfU1RSMCwgMHgxKTsKKwlkc2lfcGh5X3dy aXRlKGJhc2UgKyBSRUdfRFNJXzI4bm1fUEhZX0xOQ0tfVEVTVF9TVFIxLCAweGJiKTsKKworCWRz aV9waHlfd3JpdGUoYmFzZSArIFJFR19EU0lfMjhubV9QSFlfQ1RSTF8wLCAweDVmKTsKKworCW1z bV9kc2lfcGh5X3NldF9zcmNfcGxsKHBoeSwgc3JjX3BsbF9pZCwKKwkJCQlSRUdfRFNJXzI4bm1f UEhZX0dMQkxfVEVTVF9DVFJMLAorCQkJCURTSV8yOG5tX1BIWV9HTEJMX1RFU1RfQ1RSTF9CSVRD TEtfSFNfU0VMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkc2lfMjhubV9waHlf ZGlzYWJsZShzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSkKK3sKKwlkc2lfcGh5X3dyaXRlKHBoeS0+ YmFzZSArIFJFR19EU0lfMjhubV9QSFlfQ1RSTF8wLCAwKTsKKwlkc2lfMjhubV9waHlfcmVndWxh dG9yX2N0cmwocGh5LCBmYWxzZSk7CisKKwkvKgorCSAqIFdhaXQgZm9yIHRoZSByZWdpc3RlcnMg d3JpdGVzIHRvIGNvbXBsZXRlIGluIG9yZGVyIHRvCisJICogZW5zdXJlIHRoYXQgdGhlIHBoeSBp cyBjb21wbGV0ZWx5IGRpc2FibGVkCisJICovCisJd21iKCk7Cit9CisKK2NvbnN0IHN0cnVjdCBt c21fZHNpX3BoeV9jZmcgZHNpX3BoeV8yOG5tX2hwbV9jZmdzID0geworCS50eXBlID0gTVNNX0RT SV9QSFlfMjhOTV9IUE0sCisJLnNyY19wbGxfdHJ1dGh0YWJsZSA9IHsge3RydWUsIHRydWV9LCB7 ZmFsc2UsIHRydWV9IH0sCisJLnJlZ19jZmcgPSB7CisJCS5udW0gPSAxLAorCQkucmVncyA9IHsK KwkJCXsidmRkaW8iLCAxODAwMDAwLCAxODAwMDAwLCAxMDAwMDAsIDEwMH0sCisJCX0sCisJfSwK Kwkub3BzID0geworCQkuZW5hYmxlID0gZHNpXzI4bm1fcGh5X2VuYWJsZSwKKwkJLmRpc2FibGUg PSBkc2lfMjhubV9waHlfZGlzYWJsZSwKKwl9LAorfTsKKworY29uc3Qgc3RydWN0IG1zbV9kc2lf cGh5X2NmZyBkc2lfcGh5XzI4bm1fbHBfY2ZncyA9IHsKKwkudHlwZSA9IE1TTV9EU0lfUEhZXzI4 Tk1fTFAsCisJLnNyY19wbGxfdHJ1dGh0YWJsZSA9IHsge3RydWUsIHRydWV9LCB7dHJ1ZSwgdHJ1 ZX0gfSwKKwkucmVnX2NmZyA9IHsKKwkJLm51bSA9IDEsCisJCS5yZWdzID0geworCQkJeyJ2ZGRp byIsIDE4MDAwMDAsIDE4MDAwMDAsIDEwMDAwMCwgMTAwfSwKKwkJfSwKKwl9LAorCS5vcHMgPSB7 CisJCS5lbmFibGUgPSBkc2lfMjhubV9waHlfZW5hYmxlLAorCQkuZGlzYWJsZSA9IGRzaV8yOG5t X3BoeV9kaXNhYmxlLAorCX0sCit9OworCi0tIApUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50 ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLApob3N0ZWQgYnkg VGhlIExpbnV4IEZvdW5kYXRpb24KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v ZHJpLWRldmVsCg==