From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id D95D46E02A for ; Thu, 4 Oct 2018 21:50:38 +0000 (UTC) From: Tarun Vyas Date: Thu, 4 Oct 2018 14:50:23 -0700 Message-Id: <20181004215024.142469-1-tarun.vyas@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v5] tools: Add a simple tool to read/write/decode dpcd registers List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: dhinakaran.pandiyan@intel.com, rodrigo.vivi@intel.com List-ID: VGhpcyB0b29sIHNlcnZlcyBhcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBjb25zdHJ1Y3RzIHByb3Zp ZGVkIGJ5IHRoZQpkcm1fZHBjZF9hdXhfZGV2IGtlcm5lbCBtb2R1bGUgYnkgd29ya2luZyBvbiB0 aGUgL2Rldi9kcm1fZHBfYXV4W25dCmRldmljZXMgY3JlYXRlZCBieSB0aGUga2VybmVsIG1vZHVs ZS4KSXQgc3VwcG9ydHMgcmVhZGluZyBhbmQgd3JpdGluZyBkcGNkIHJlZ2lzdGVycyBvbiB0aGUg Y29ubmVjdGVkIGF1eApjaGFubmVscy4KSW4gdGhlIGZvbGxvdy11cCBwYXRjaCwgc3VwcG9ydCBm b3IgZGVjb2RpbmcgdGhlc2UgcmVnaXN0ZXJzIHdpbGwgYmUKYWRkZWQgdG8gZmFjaWxhdGUgZGVi dWdnaW5nIHBhbmVsIHJlbGF0ZWQgaXNzdWVzLgoKdjI6IChGaXhlcyBieSBSb2RyaWdvIGJ1dCBu byBmdW5jdGlvbmFsIGNoYW5nZXMgeWV0KToKICAgIC0gSW5kZW50YXRpb25zLCBUeXBvLCBNaXNz ZWQgc3BhY2VzCiAgICAtIFJlbW92aW5nIG1lbnRpb25pbmcgdG8gZGVjb2RlIGFuZCBzcGVjIHRo YXQgaXMgbm90IGltcGxlbWVudGVkIHlldC4KICAgIC0gQWRkIE1ha2VmaWxlLnNvdXJjZXMgYmFj awogICAgLSBNaXNzZWQgcy9wcmludGYvaWd0X3dhcm4KCnYzOgogICAgLSBBZGRyZXNzIERLJ3Mg cmV2aWV3IGNvbW1lbnRzIGZyb20gdjIgYWJvdmUuCiAgICAtIFNxdWFzaCBSb2RyaWdvJ3MgZmls ZSBoYW5kbGluZyB1bmlmaWNhdGlvbiBwYXRjaC4KICAgIC0gTWFrZSBjb3VudCwgb2Zmc2V0IGFu ZCBkZXZpY2UgaWQgb3B0aW9uYWwuCgp2NDoKICAgIC0gQmV0dGVyIGVycm9yIGhhbmRsaW5nIGFu ZCByZWZhY3RvcmluZy4KClN1Z2dlc3RlZC1ieTogRGhpbmFrYXJhbiBQYW5kaXlhbiA8ZGhpbmFr YXJhbi5wYW5kaXlhbkBpbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IFRhcnVuIFZ5YXMgPHRhcnVu LnZ5YXNAaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBSb2RyaWdvIFZpdmkgPHJvZHJpZ28udml2 aUBpbnRlbC5jb20+ClJldmlld2VkLWJ5OiBEaGluYWthcmFuIFBhbmRpeWFuIDxkaGluYWthcmFu LnBhbmRpeWFuQGludGVsLmNvbT4KLS0tCiB0b29scy9NYWtlZmlsZS5zb3VyY2VzIHwgICAxICsK IHRvb2xzL2RwY2RfcmVnLmMgICAgICAgfCAyODAgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogdG9vbHMvbWVzb24uYnVpbGQgICAgICB8ICAgMSArCiAz IGZpbGVzIGNoYW5nZWQsIDI4MiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9v bHMvZHBjZF9yZWcuYwoKZGlmZiAtLWdpdCBhL3Rvb2xzL01ha2VmaWxlLnNvdXJjZXMgYi90b29s cy9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IGFiZDIzYTBmLi41MDcwNmY0MSAxMDA2NDQKLS0tIGEv dG9vbHMvTWFrZWZpbGUuc291cmNlcworKysgYi90b29scy9NYWtlZmlsZS5zb3VyY2VzCkBAIC03 LDYgKzcsNyBAQCBub2luc3RfUFJPR1JBTVMgPQkJXAogCiB0b29sc19wcm9nX2xpc3RzID0JCVwK IAlpZ3Rfc3RhdHMJCVwKKwlkcGNkX3JlZwkJXAogCWludGVsX2F1ZGlvX2R1bXAJXAogCWludGVs X3JlZwkJXAogCWludGVsX2JhY2tsaWdodAkJXApkaWZmIC0tZ2l0IGEvdG9vbHMvZHBjZF9yZWcu YyBiL3Rvb2xzL2RwY2RfcmVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAu LmQ1NzdhYTU1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvZHBjZF9yZWcuYwpAQCAtMCwwICsx LDI4MCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE4IEludGVsIENvcnBvcmF0aW9uCisgKgor ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRo ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0 aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMg ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK KyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVk IGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2Fy ZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8g RVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJM RSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9N LAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT RSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqIERQQ0QgcmVn aXN0ZXIgcmVhZC93cml0ZSB0b29sCisgKiBUaGlzIHRvb2wgd3JhcHMgYXJvdW5kIERSTV9EUF9B VVhfREVWIG1vZHVsZSB0byBwcm92aWRlIERQQ0QgcmVnaXN0ZXIgcmVhZAorICogYW5kIHdyaXRl LCBzbyBDT05GSUdfRFJNX0RQX0FVWF9ERVYgbmVlZHMgdG8gYmUgc2V0LgorICovCisKKyNpbmNs dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+Cisj aW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxnZXRvcHQu aD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxs aW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisKKyNkZWZpbmUgTUFYX0RQX09GRlNFVAkw eGZmZmZmCisjZGVmaW5lIERSTV9BVVhfTUlOT1JTCTI1NgorCitjb25zdCBjaGFyIGF1eF9kZXZb XSA9ICIvZGV2L2RybV9kcF9hdXgiOworCitzdHJ1Y3QgZHBjZF9kYXRhIHsKKwlpbnQgZGV2aWQ7 CisJaW50IGZpbGVfb3A7CisJdWludDMyX3Qgb2Zmc2V0OworCWVudW0gY29tbWFuZCB7CisJCUlO VkFMSUQgPSAtMSwKKwkJUkVBRCA9IDIsCisJCVdSSVRFLAorCX0gY21kOworCXNpemVfdCBjb3Vu dDsKKwl1aW50OF90IHZhbDsKK307CisKK3N0YXRpYyB2b2lkIHByaW50X3VzYWdlKHZvaWQpCit7 CisJcHJpbnRmKCJVc2FnZTogZHBjZF9yZWcgW09QVElPTiAuLi5dIENPTU1BTkRcblxuIik7CisJ cHJpbnRmKCJDT01NQU5EIGlzIG9uZSBvZjpcbiIpOworCXByaW50ZigiICByZWFkOgkJUmVhZCBb Y291bnRdIGJ5dGVzIGRwY2QgcmVnIGF0IGFuIG9mZnNldFxuIik7CisJcHJpbnRmKCIgIHdyaXRl OglXcml0ZSBhIGRwY2QgcmVnIGF0IGFuIG9mZnNldFxuXG4iKTsKKwlwcmludGYoIk9wdGlvbnMg Zm9yIHRoZSBhYm92ZSBDT01NQU5EUyBhcmVcbiIpOworCXByaW50ZigiIC0tZGV2aWNlPURFVklE CQlBdXggZGV2aWNlIGlkLCBhcyBsaXN0ZWQgaW4gL2Rldi9kcm1fZHBfYXV4X2RldltuXS4gRGVm YXVsdHMgdG8gMC4gVXBwZXIgbGltaXQgLSAyNTZcbiIpOworCXByaW50ZigiIC0tb2Zmc2V0PVJF R19BRERSCURQQ0QgcmVnaXN0ZXIgb2Zmc2V0IGluIGhleC4gRGVmYXVsdHMgdG8gMHgwLiBVcHBl ciBsaW1pdCAtIDB4ZmZmZmZcbiIpOworCXByaW50ZigiIC0tY291bnQ9QllURVMJCUZvciByZWFk cywgc3BlY2lmeSBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgcmVhZCBmcm9tIHRoZSBvZmZzZXQuIERl ZmF1bHRzIHRvIDFcbiIpOworCXByaW50ZigiIC0tdmFsdWUJCUZvciB3cml0ZXMsIHNwZWNpZnkg YSBoZXggdmFsdWUgdG8gYmUgd3JpdHRlbi4gVXBwZXIgbGltaXQgLSAweGZmXG5cbiIpOworCisJ cHJpbnRmKCIgLS1oZWxwOiBwcmludCB0aGUgdXNhZ2VcbiIpOworfQorCitzdGF0aWMgaW5saW5l IGJvb2wgc3RydG9sX2Vycl91dGlsKGNoYXIgKmVuZHB0ciwgbG9uZyAqdmFsKQoreworCWlmICgq ZW5kcHRyICE9ICdcMCcgfHwgKnZhbCA8IDAgfHwKKwkgICAgKCp2YWwgPT0gTE9OR19NQVggJiYg ZXJybm8gPT0gRVJBTkdFKSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisK K3N0YXRpYyBpbnQgcGFyc2Vfb3B0cyhzdHJ1Y3QgZHBjZF9kYXRhICpkcGNkLCBpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCit7CisJaW50IHJldCwgdmZsYWcgPSAwOworCWxvbmcgdGVtcDsKKwljaGFy ICplbmRwdHI7CisKKwlzdHJ1Y3Qgb3B0aW9uIGxvbmdvcHRzW10gPSB7CisJCXsgImNvdW50IiwJ cmVxdWlyZWRfYXJndW1lbnQsCU5VTEwsCQknYycgfSwKKwkJeyAiZGV2aWNlIiwJcmVxdWlyZWRf YXJndW1lbnQsCU5VTEwsCQknZCcgfSwKKwkJeyAiaGVscCIsCW5vX2FyZ3VtZW50LAkJTlVMTCwJ CSdoJyB9LAorCQl7ICJvZmZzZXQiLAlyZXF1aXJlZF9hcmd1bWVudCwJTlVMTCwJCSdvJyB9LAor CQl7ICJ2YWx1ZSIsCXJlcXVpcmVkX2FyZ3VtZW50LAlOVUxMLAkJJ3YnIH0sCisJCXsgMCB9CisJ fTsKKworCXdoaWxlICgocmV0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgIi06YzpkOmhvOnY6 IiwgbG9uZ29wdHMsIE5VTEwpKSAhPSAtMSkgeworCQlzd2l0Y2ggKHJldCkgeworCQljYXNlICdj JzoKKwkJCXRlbXAgPSBzdHJ0b2wob3B0YXJnLCAmZW5kcHRyLCAxMCk7CisJCQlpZiAoc3RydG9s X2Vycl91dGlsKGVuZHB0ciwgJnRlbXApKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSIt LWNvdW50IGFyZ3VtZW50IGlzIGludmFsaWQvbmVnYXRpdmUvb3V0LW9mLXJhbmdlXG4iKTsKKwkJ CQlwcmludF91c2FnZSgpOworCQkJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJCQl9CisJCQlkcGNk LT5jb3VudCA9IHRlbXA7CisJCQlicmVhazsKKwkJY2FzZSAnZCc6CisJCQl0ZW1wID0gc3RydG9s KG9wdGFyZywgJmVuZHB0ciwgMTApOworCQkJaWYgKHN0cnRvbF9lcnJfdXRpbChlbmRwdHIsICZ0 ZW1wKSB8fAorCQkJCQkgICAgdGVtcCA+IERSTV9BVVhfTUlOT1JTKSB7CisJCQkJZnByaW50Zihz dGRlcnIsCisJCQkJCSItLWRldmljZSBhcmd1bWVudCBpcyBpbnZhbGlkL25lZ2F0aXZlL291dC1v Zi1yYW5nZVxuIik7CisJCQkJcHJpbnRfdXNhZ2UoKTsKKwkJCQlyZXR1cm4gRVJBTkdFOworCQkJ fQorCQkJZHBjZC0+ZGV2aWQgPSB0ZW1wOworCQkJYnJlYWs7CisJCWNhc2UgJ2gnOgorCQkJcHJp bnRmKCJEUENEIHJlZ2lzdGVyIHJlYWQgYW5kIHdyaXRlIHRvb2xcblxuIik7CisJCQlwcmludGYo IlRoaXMgdG9vbCByZXF1aXJlcyBDT05GSUdfRFJNX0RQX0FVWF9DSEFSREVWXG4iCisJCQkJInRv IGJlIHNldCBpbiB0aGUga2VybmVsIGNvbmZpZy5cblxuIik7CisJCQlwcmludF91c2FnZSgpOwor CQkJZXhpdChFWElUX1NVQ0NFU1MpOworCQljYXNlICdvJzoKKwkJCXRlbXAgPSBzdHJ0b2wob3B0 YXJnLCAmZW5kcHRyLCAxNik7CisJCQlpZiAoc3RydG9sX2Vycl91dGlsKGVuZHB0ciwgJnRlbXAp IHx8CisJCQkJCSAgICB0ZW1wID4gTUFYX0RQX09GRlNFVCkgeworCQkJCWZwcmludGYoc3RkZXJy LAorCQkJCQkiLS1vZmZzZXQgYXJndW1lbnQgaXMgaW52YWxpZC9uZWdhdGl2ZS9vdXQtb2YtcmFu Z2VcbiIpOworCQkJCXByaW50X3VzYWdlKCk7CisJCQkJcmV0dXJuIEVSQU5HRTsKKwkJCX0KKwkJ CWRwY2QtPm9mZnNldCA9IHRlbXA7CisJCQlicmVhazsKKwkJY2FzZSAndic6CisJCQl2ZmxhZyA9 ICd2JzsKKwkJCXRlbXAgPSBzdHJ0b2wob3B0YXJnLCAmZW5kcHRyLCAxNik7CisJCQlpZiAoc3Ry dG9sX2Vycl91dGlsKGVuZHB0ciwgJnRlbXApIHx8IHRlbXAgPiAweGZmKSB7CisJCQkJZnByaW50 ZihzdGRlcnIsCisJCQkJCSItLXZhbHVlIGFyZ3VtZW50IGlzIGludmFsaWQvbmVnYXRpdmUvb3V0 LW9mLXJhbmdlXG4iKTsKKwkJCQlwcmludF91c2FnZSgpOworCQkJCXJldHVybiBFUkFOR0U7CisJ CQl9CisJCQlkcGNkLT52YWwgPSB0ZW1wOworCQkJYnJlYWs7CisJCS8qIENvbW1hbmQgcGFyc2lu ZyAqLworCQljYXNlIDE6CisJCQlpZiAoc3RyY21wKG9wdGFyZywgInJlYWQiKSA9PSAwKSB7CisJ CQkJdGVtcCA9IFJFQUQ7CisJCQl9IGVsc2UgaWYgKHN0cmNtcChvcHRhcmcsICJ3cml0ZSIpID09 IDApIHsKKwkJCQl0ZW1wID0gV1JJVEU7CisJCQkJZHBjZC0+ZmlsZV9vcCA9IE9fV1JPTkxZOwor CQkJfSBlbHNlIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlVucmVjb2duaXplZCBjb21tYW5kXG4i KTsKKwkJCQlwcmludF91c2FnZSgpOworCQkJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJCQl9CisJ CQlkcGNkLT5jbWQgPSB0ZW1wOworCQkJYnJlYWs7CisJCWNhc2UgJzonOgorCQkJZnByaW50Zihz dGRlcnIsICJPcHRpb24gLSVjIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iLAorCQkJCSBvcHRvcHQp OworCQkJcHJpbnRfdXNhZ2UoKTsKKwkJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJCWRlZmF1bHQ6 CisJCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgb3B0aW9uXG4iKTsKKwkJCXByaW50X3VzYWdl KCk7CisJCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCQl9CisJfQorCisJaWYgKChkcGNkLT5jb3Vu dCArIGRwY2QtPm9mZnNldCkgPiAoTUFYX0RQX09GRlNFVCArIDEpKSB7CisJCWZwcmludGYoc3Rk ZXJyLCAiT3V0IG9mIGJvdW5kcy4gQ291bnQgKyBPZmZzZXQgPD0gMHgxMDAwMDBcbiIpOworCQly ZXR1cm4gRVJBTkdFOworCX0KKworCWlmICgoZHBjZC0+Y21kID09IFdSSVRFKSAmJiAodmZsYWcg IT0gJ3YnKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIldyaXRlIHZhbHVlIGlzIG1pc3NpbmdcbiIp OworCQlwcmludF91c2FnZSgpOworCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCX0KKworCXJldHVy biBFWElUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBpbnQgZHBjZF9yZWFkKGludCBmZCwgdWludDMy X3Qgb2Zmc2V0LCBzaXplX3QgY291bnQpCit7CisJaW50IHJldCA9IEVYSVRfU1VDQ0VTUywgcHJl dCwgaTsKKwl1aW50OF90ICpidWYgPSBjYWxsb2MoY291bnQsIHNpemVvZih1aW50OF90KSk7CisK KwlpZiAoIWJ1ZikgeworCQlmcHJpbnRmKHN0ZGVyciwgIkNhbid0IGFsbG9jYXRlIHJlYWQgYnVm ZmVyXG4iKTsKKwkJcmV0dXJuIEVOT01FTTsKKwl9CisKKwlwcmV0ID0gcHJlYWQoZmQsIGJ1Ziwg Y291bnQsIG9mZnNldCk7CisJaWYgKHByZXQgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiRmFp bGVkIHRvIHJlYWQgLSAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0ID0gZXJybm87CisJ CWdvdG8gb3V0OworCX0KKworCWlmIChwcmV0IDwgY291bnQpIHsKKwkJZnByaW50ZihzdGRlcnIs CisJCQkiUmVhZCAldSBieXRlKHMpLCBleHBlY3RlZCAlenUgYnl0ZXMsIHN0YXJ0aW5nIGF0IG9m ZnNldCAleFxuXG4iLCBwcmV0LCBjb3VudCwgb2Zmc2V0KTsKKwkJcmV0ID0gRVhJVF9GQUlMVVJF OworCX0KKworCXByaW50ZigiMHglMDJ4OiAiLCBvZmZzZXQpOworCWZvciAoaSA9IDA7IGkgPCBw cmV0OyBpKyspCisJCXByaW50ZigiICUwMngiLCAqKGJ1ZiArIGkpKTsKKwlwcmludGYoIlxuIik7 CisKK291dDoKKwlmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkcGNk X3dyaXRlKGludCBmZCwgdWludDMyX3Qgb2Zmc2V0LCB1aW50OF90IHZhbCkKK3sKKwlpbnQgcmV0 ID0gRVhJVF9TVUNDRVNTLCBwcmV0OworCisJcHJldCA9IHB3cml0ZShmZCwgKGNvbnN0IHZvaWQg KikmdmFsLCBzaXplb2YodWludDhfdCksIG9mZnNldCk7CisJaWYgKHByZXQgPCAwKSB7CisJCWZw cmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHdyaXRlIC0gJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7 CisJCXJldCA9IGVycm5vOworCX0gZWxzZSBpZiAocHJldCA9PSAwKSB7CisJCWZwcmludGYoc3Rk ZXJyLCAiWmVybyBieXRlcyB3ZXJlIHdyaXR0ZW5cbiIpOworCQlyZXQgPSBFWElUX0ZBSUxVUkU7 CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQoreworCWNoYXIgZGV2X25hbWVbMjBdOworCWludCByZXQsIGZkOworCisJc3RydWN0IGRwY2Rf ZGF0YSBkcGNkID0geworCQkuZGV2aWQgPSAwLAorCQkuZmlsZV9vcCA9IE9fUkRPTkxZLAorCQku b2Zmc2V0ID0gMHgwLAorCQkuY21kID0gSU5WQUxJRCwKKwkJLmNvdW50ID0gMSwKKwl9OworCisJ cmV0ID0gcGFyc2Vfb3B0cygmZHBjZCwgYXJnYywgYXJndik7CisJaWYgKHJldCAhPSBFWElUX1NV Q0NFU1MpCisJCXJldHVybiByZXQ7CisKKwlzbnByaW50ZihkZXZfbmFtZSwgc3RybGVuKGF1eF9k ZXYpICsgNCwgIiVzJWQiLCBhdXhfZGV2LCBkcGNkLmRldmlkKTsKKworCWZkID0gb3BlbihkZXZf bmFtZSwgZHBjZC5maWxlX29wKTsKKwlpZiAoZmQgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLAor CQkJIkZhaWxlZCB0byBvcGVuICVzIGF1eCBkZXZpY2UgLSBlcnJvcjogJXNcbiIsIGRldl9uYW1l LAorCQkJc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuIGVycm5vOworCX0KKworCXN3aXRjaCAo ZHBjZC5jbWQpIHsKKwljYXNlIFJFQUQ6CisJCXJldCA9IGRwY2RfcmVhZChmZCwgZHBjZC5vZmZz ZXQsIGRwY2QuY291bnQpOworCQlicmVhazsKKwljYXNlIFdSSVRFOgorCQlyZXQgPSBkcGNkX3dy aXRlKGZkLCBkcGNkLm9mZnNldCwgZHBjZC52YWwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlm cHJpbnRmKHN0ZGVyciwgIlBsZWFzZSBzcGVjaWZ5IGEgY29tbWFuZDogcmVhZC93cml0ZS5cbiIp OworCQlwcmludF91c2FnZSgpOworCQlyZXQgPSBFWElUX0ZBSUxVUkU7CisJCWJyZWFrOworCX0K KworCWNsb3NlKGZkKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS90b29scy9tZXNv bi5idWlsZCBiL3Rvb2xzL21lc29uLmJ1aWxkCmluZGV4IGU0NTE3ZDY2Li43OWYzNmFhOSAxMDA2 NDQKLS0tIGEvdG9vbHMvbWVzb24uYnVpbGQKKysrIGIvdG9vbHMvbWVzb24uYnVpbGQKQEAgLTM2 LDYgKzM2LDcgQEAgdG9vbHNfcHJvZ3MgPSBbCiAJJ2ludGVsX3dhdGVybWFyaycsCiAJJ2ludGVs X2dlbV9pbmZvJywKIAknaW50ZWxfZ3Z0Z190ZXN0JywKKwknZHBjZF9yZWcnLAogXQogdG9vbF9k ZXBzID0gaWd0X2RlcHMKIAotLSAKMi4xNC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2lndC1kZXYK