From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5ED8489F89 for ; Sun, 2 Aug 2020 16:30:50 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Sun, 2 Aug 2020 18:30:00 +0200 Message-Id: <20200802163002.5815-17-zbigniew.kempczynski@intel.com> In-Reply-To: <20200802163002.5815-1-zbigniew.kempczynski@intel.com> References: <20200802163002.5815-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v23 16/18] tests/perf: remove libdrm dependency for rendercopy 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: Chris Wilson List-ID: UmVuZGVyY29weSBub3cgdXNlcyBuby1kcm0gdmVyc2lvbiBzbyBhbGwgdXNlcnMgaGFzIHRvCm1p Z3JhdGUgdG8gbmV3IGludGVyZmFjZS4KClNpZ25lZC1vZmYtYnk6IFpiaWduaWV3IEtlbXBjennF hHNraSA8emJpZ25pZXcua2VtcGN6eW5za2lAaW50ZWwuY29tPgpDYzogTGlvbmVsIExhbmR3ZXJs aW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50ZWwuY29tPgpDYzogRG9taW5payBHcnplZ29yemVr IDxkb21pbmlrLmdyemVnb3J6ZWtAaW50ZWwuY29tPgpDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0Bj aHJpcy13aWxzb24uY28udWs+ClJldmlld2VkLWJ5OiBMaW9uZWwgTGFuZHdlcmxpbiA8bGlvbmVs LmcubGFuZHdlcmxpbkBpbnRlbC5jb20+Ci0tLQogdGVzdHMvaTkxNS9wZXJmLmMgfCA2NTUgKysr KysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5n ZWQsIDI3MyBpbnNlcnRpb25zKCspLCAzODIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvdGVz dHMvaTkxNS9wZXJmLmMgYi90ZXN0cy9pOTE1L3BlcmYuYwppbmRleCA5MmVkYzlmMS4uNDAxZmU3 MmYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2k5MTUvcGVyZi5jCisrKyBiL3Rlc3RzL2k5MTUvcGVyZi5j CkBAIC00OTcsNjQgKzQ5Nyw0MiBAQCBvYV9yZXBvcnRfZ2V0X2N0eF9pZCh1aW50MzJfdCAqcmVw b3J0KQogfQogCiBzdGF0aWMgdm9pZAotc2NyYXRjaF9idWZfbWVtc2V0KGRybV9pbnRlbF9ibyAq Ym8sIGludCB3aWR0aCwgaW50IGhlaWdodCwgdWludDMyX3QgY29sb3IpCitzY3JhdGNoX2J1Zl9t ZW1zZXQoc3RydWN0IGludGVsX2J1ZiAqYnVmLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVpbnQz Ml90IGNvbG9yKQogewotCWludCByZXQ7Ci0KLQlyZXQgPSBkcm1faW50ZWxfYm9fbWFwKGJvLCB0 cnVlIC8qIHdyaXRhYmxlICovKTsKLQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7CisJaW50ZWxfYnVm X2NwdV9tYXAoYnVmLCB0cnVlKTsKIAogCWZvciAoaW50IGkgPSAwOyBpIDwgd2lkdGggKiBoZWln aHQ7IGkrKykKLQkJKCh1aW50MzJfdCAqKWJvLT52aXJ0dWFsKVtpXSA9IGNvbG9yOworCQlidWYt PnB0cltpXSA9IGNvbG9yOwogCi0JZHJtX2ludGVsX2JvX3VubWFwKGJvKTsKKwlpbnRlbF9idWZf dW5tYXAoYnVmKTsKIH0KIAogc3RhdGljIHZvaWQKLXNjcmF0Y2hfYnVmX2luaXQoZHJtX2ludGVs X2J1Zm1nciAqYnVmbWdyLAotCQkgc3RydWN0IGlndF9idWYgKmJ1ZiwKK3NjcmF0Y2hfYnVmX2lu aXQoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsCisJCSBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCiAJCSBp bnQgd2lkdGgsIGludCBoZWlnaHQsCiAJCSB1aW50MzJfdCBjb2xvcikKIHsKLQlzaXplX3Qgc3Ry aWRlID0gd2lkdGggKiA0OwotCXNpemVfdCBzaXplID0gc3RyaWRlICogaGVpZ2h0OwotCWRybV9p bnRlbF9ibyAqYm8gPSBkcm1faW50ZWxfYm9fYWxsb2MoYnVmbWdyLCAiIiwgc2l6ZSwgNDA5Nik7 Ci0KLQlzY3JhdGNoX2J1Zl9tZW1zZXQoYm8sIHdpZHRoLCBoZWlnaHQsIGNvbG9yKTsKLQotCW1l bXNldChidWYsIDAsIHNpemVvZigqYnVmKSk7Ci0KLQlidWYtPmJvID0gYm87Ci0JYnVmLT5zdXJm YWNlWzBdLnN0cmlkZSA9IHN0cmlkZTsKLQlidWYtPnRpbGluZyA9IEk5MTVfVElMSU5HX05PTkU7 Ci0JYnVmLT5zdXJmYWNlWzBdLnNpemUgPSBzaXplOwotCWJ1Zi0+YnBwID0gMzI7CisJaW50ZWxf YnVmX2luaXQoYm9wcywgYnVmLCB3aWR0aCwgaGVpZ2h0LCAzMiwgMCwKKwkJICAgICAgIEk5MTVf VElMSU5HX05PTkUsIEk5MTVfQ09NUFJFU1NJT05fTk9ORSk7CisJc2NyYXRjaF9idWZfbWVtc2V0 KGJ1Ziwgd2lkdGgsIGhlaWdodCwgY29sb3IpOwogfQogCiBzdGF0aWMgdm9pZAotZW1pdF9yZXBv cnRfcGVyZl9jb3VudChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkgICAgICAg ZHJtX2ludGVsX2JvICpkc3RfYm8sCitlbWl0X3JlcG9ydF9wZXJmX2NvdW50KHN0cnVjdCBpbnRl bF9iYiAqaWJiLAorCQkgICAgICAgc3RydWN0IGludGVsX2J1ZiAqZHN0LAogCQkgICAgICAgaW50 IGRzdF9vZmZzZXQsCiAJCSAgICAgICB1aW50MzJfdCByZXBvcnRfaWQpCiB7Ci0JaWYgKElTX0hB U1dFTEwoZGV2aWQpKSB7Ci0JCUJFR0lOX0JBVENIKDMsIDEpOwotCQlPVVRfQkFUQ0goR0VONl9N SV9SRVBPUlRfUEVSRl9DT1VOVCk7Ci0JCU9VVF9SRUxPQyhkc3RfYm8sIEk5MTVfR0VNX0RPTUFJ Tl9JTlNUUlVDVElPTiwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLAotCQkJICBkc3Rfb2Zm c2V0KTsKLQkJT1VUX0JBVENIKHJlcG9ydF9pZCk7Ci0JCUFEVkFOQ0VfQkFUQ0goKTsKLQl9IGVs c2UgewotCQkvKiBYWFg6IE5COiBuIGR3b3JkcyBhcmcgaXMgYWN0dWFsbHkgbWFnaWMgc2luY2Ug aXQgaW50ZXJuYWxseQotCQkgKiBhdXRvbWF0aWNhbGx5IGFjY291bnRzIGZvciBsYXJnZXIgYWRk cmVzc2VzIG9uIGdlbiA+PSA4Li4uCi0JCSAqLwotCQlCRUdJTl9CQVRDSCgzLCAxKTsKLQkJT1VU X0JBVENIKEdFTjhfTUlfUkVQT1JUX1BFUkZfQ09VTlQpOwotCQlPVVRfUkVMT0MoZHN0X2JvLCBJ OTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwK LQkJCSAgZHN0X29mZnNldCk7Ci0JCU9VVF9CQVRDSChyZXBvcnRfaWQpOwotCQlBRFZBTkNFX0JB VENIKCk7Ci0JfQorCWlmIChJU19IQVNXRUxMKGRldmlkKSkKKwkJaW50ZWxfYmJfb3V0KGliYiwg R0VONl9NSV9SRVBPUlRfUEVSRl9DT1VOVCk7CisJZWxzZQorCQlpbnRlbF9iYl9vdXQoaWJiLCBH RU44X01JX1JFUE9SVF9QRVJGX0NPVU5UKTsKKworCWludGVsX2JiX2VtaXRfcmVsb2MoaWJiLCBk c3QtPmhhbmRsZSwKKwkJCSAgICBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIEk5MTVfR0VN X0RPTUFJTl9JTlNUUlVDVElPTiwKKwkJCSAgICBkc3Rfb2Zmc2V0LCBkc3QtPmFkZHIub2Zmc2V0 KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCByZXBvcnRfaWQpOwogfQogCiBzdGF0aWMgdm9pZApAQCAt MTQ5NSwxNCArMTQ3MywxMyBAQCBlbnVtIGxvYWQgewogCiBzdGF0aWMgc3RydWN0IGxvYWRfaGVs cGVyIHsKIAlpbnQgZGV2aWQ7Ci0JZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyOwotCWRybV9pbnRl bF9jb250ZXh0ICpjb250ZXh0OworCXN0cnVjdCBidWZfb3BzICpib3BzOwogCXVpbnQzMl90IGNv bnRleHRfaWQ7Ci0Jc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaDsKKwlzdHJ1Y3QgaW50 ZWxfYmIgKmliYjsKIAllbnVtIGxvYWQgbG9hZDsKIAlib29sIGV4aXQ7CiAJc3RydWN0IGlndF9o ZWxwZXJfcHJvY2VzcyBpZ3RfcHJvYzsKLQlzdHJ1Y3QgaWd0X2J1ZiBzcmMsIGRzdDsKKwlzdHJ1 Y3QgaW50ZWxfYnVmIHNyYywgZHN0OwogfSBsaCA9IHsgMCwgfTsKIAogc3RhdGljIHZvaWQgbG9h ZF9oZWxwZXJfc2lnbmFsX2hhbmRsZXIoaW50IHNpZykKQEAgLTE1NDIsMjEgKzE1MTksMTIgQEAg c3RhdGljIHZvaWQgbG9hZF9oZWxwZXJfcnVuKGVudW0gbG9hZCBsb2FkKQogCQlzaWduYWwoU0lH VVNSMiwgbG9hZF9oZWxwZXJfc2lnbmFsX2hhbmRsZXIpOwogCiAJCXdoaWxlICghbGguZXhpdCkg ewotCQkJaW50IHJldDsKLQotCQkJcmVuZGVyX2NvcHkobGguYmF0Y2gsCi0JCQkJICAgIGxoLmNv bnRleHQsCisJCQlyZW5kZXJfY29weShsaC5pYmIsCisJCQkJICAgIGxoLmNvbnRleHRfaWQsCiAJ CQkJICAgICZsaC5zcmMsIDAsIDAsIDE5MjAsIDEwODAsCiAJCQkJICAgICZsaC5kc3QsIDAsIDAp OwogCi0JCQlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQobGguYmF0Y2gsCi0J CQkJCQkJICAgICBsaC5jb250ZXh0KTsKLQotCQkJcmV0ID0gZHJtX2ludGVsX2dlbV9jb250ZXh0 X2dldF9pZChsaC5jb250ZXh0LAotCQkJCQkJCSAgICZsaC5jb250ZXh0X2lkKTsKLQkJCWlndF9h c3NlcnRfZXEocmV0LCAwKTsKLQotCQkJZHJtX2ludGVsX2JvX3dhaXRfcmVuZGVyaW5nKGxoLmRz dC5ibyk7CisJCQlpbnRlbF9iYl9zeW5jKGxoLmliYik7CiAKIAkJCS8qIExvd2VyIHRoZSBsb2Fk IGJ5IHBhdXNpbmcgYWZ0ZXIgZXZlcnkgc3VibWl0dGVkCiAJCQkgKiB3cml0ZS4gKi8KQEAgLTE1 NzQsNTIgKzE1NDIsMzYgQEAgc3RhdGljIHZvaWQgbG9hZF9oZWxwZXJfc3RvcCh2b2lkKQogCiBz dGF0aWMgdm9pZCBsb2FkX2hlbHBlcl9pbml0KHZvaWQpCiB7Ci0JaW50IHJldDsKLQogCWxoLmRl dmlkID0gaW50ZWxfZ2V0X2RybV9kZXZpZChkcm1fZmQpOwogCiAJLyogTUlfU1RPUkVfREFUQSBj YW4gb25seSB1c2UgR1RUIGFkZHJlc3Mgb24gZ2VuNCsvZzMzIGFuZCBuZWVkcwogCSAqIHNub29w YWJsZSBtZW0gb24gcHJlLWdlbjYuIEhlbmNlIGxvYWQtaGVscGVyIG9ubHkgd29ya3Mgb24gZ2Vu NissIGJ1dAogCSAqIHRoYXQncyBhbHNvIGFsbCB3ZSBjYXJlIGFib3V0IGZvciB0aGUgcnBzIHRl c3RjYXNlKi8KIAlpZ3RfYXNzZXJ0KGludGVsX2dlbihsaC5kZXZpZCkgPj0gNik7Ci0JbGguYnVm bWdyID0gZHJtX2ludGVsX2J1Zm1ncl9nZW1faW5pdChkcm1fZmQsIDQwOTYpOwotCWlndF9hc3Nl cnQobGguYnVmbWdyKTsKLQotCWRybV9pbnRlbF9idWZtZ3JfZ2VtX2VuYWJsZV9yZXVzZShsaC5i dWZtZ3IpOwogCi0JbGguY29udGV4dCA9IGRybV9pbnRlbF9nZW1fY29udGV4dF9jcmVhdGUobGgu YnVmbWdyKTsKLQlpZ3RfYXNzZXJ0KGxoLmNvbnRleHQpOworCWxoLmJvcHMgPSBidWZfb3BzX2Ny ZWF0ZShkcm1fZmQpOwogCi0JbGguY29udGV4dF9pZCA9IDB4ZmZmZmZmZmY7Ci0JcmV0ID0gZHJt X2ludGVsX2dlbV9jb250ZXh0X2dldF9pZChsaC5jb250ZXh0LCAmbGguY29udGV4dF9pZCk7Ci0J aWd0X2Fzc2VydF9lcShyZXQsIDApOworCWxoLmNvbnRleHRfaWQgPSBnZW1fY29udGV4dF9jcmVh dGUoZHJtX2ZkKTsKIAlpZ3RfYXNzZXJ0X25lcShsaC5jb250ZXh0X2lkLCAweGZmZmZmZmZmKTsK IAotCWxoLmJhdGNoID0gaW50ZWxfYmF0Y2hidWZmZXJfYWxsb2MobGguYnVmbWdyLCBsaC5kZXZp ZCk7Ci0JaWd0X2Fzc2VydChsaC5iYXRjaCk7CisJbGguaWJiID0gaW50ZWxfYmJfY3JlYXRlKGRy bV9mZCwgQkFUQ0hfU1opOwogCi0Jc2NyYXRjaF9idWZfaW5pdChsaC5idWZtZ3IsICZsaC5kc3Qs IDE5MjAsIDEwODAsIDApOwotCXNjcmF0Y2hfYnVmX2luaXQobGguYnVmbWdyLCAmbGguc3JjLCAx OTIwLCAxMDgwLCAwKTsKKwlzY3JhdGNoX2J1Zl9pbml0KGxoLmJvcHMsICZsaC5kc3QsIDE5MjAs IDEwODAsIDApOworCXNjcmF0Y2hfYnVmX2luaXQobGguYm9wcywgJmxoLnNyYywgMTkyMCwgMTA4 MCwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGxvYWRfaGVscGVyX2Zpbmkodm9pZCkKIHsKKwlpbnQg aTkxNSA9IGJ1Zl9vcHNfZ2V0X2ZkKGxoLmJvcHMpOworCiAJaWYgKGxoLmlndF9wcm9jLnJ1bm5p bmcpCiAJCWxvYWRfaGVscGVyX3N0b3AoKTsKIAotCWlmIChsaC5zcmMuYm8pCi0JCWRybV9pbnRl bF9ib191bnJlZmVyZW5jZShsaC5zcmMuYm8pOwotCWlmIChsaC5kc3QuYm8pCi0JCWRybV9pbnRl bF9ib191bnJlZmVyZW5jZShsaC5kc3QuYm8pOwotCi0JaWYgKGxoLmJhdGNoKQotCQlpbnRlbF9i YXRjaGJ1ZmZlcl9mcmVlKGxoLmJhdGNoKTsKLQotCWlmIChsaC5jb250ZXh0KQotCQlkcm1faW50 ZWxfZ2VtX2NvbnRleHRfZGVzdHJveShsaC5jb250ZXh0KTsKLQotCWlmIChsaC5idWZtZ3IpCi0J CWRybV9pbnRlbF9idWZtZ3JfZGVzdHJveShsaC5idWZtZ3IpOworCWludGVsX2J1Zl9jbG9zZShs aC5ib3BzLCAmbGguc3JjKTsKKwlpbnRlbF9idWZfY2xvc2UobGguYm9wcywgJmxoLmRzdCk7CisJ aW50ZWxfYmJfZGVzdHJveShsaC5pYmIpOworCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgbGgu Y29udGV4dF9pZCk7CisJYnVmX29wc19kZXN0cm95KGxoLmJvcHMpOwogfQogCiBzdGF0aWMgYm9v bCBleHBlY3RlZF9yZXBvcnRfdGltaW5nX2RlbHRhKHVpbnQzMl90IGRlbHRhLCB1aW50MzJfdCBl eHBlY3RlZF9kZWx0YSkKQEAgLTE4ODgsMjAgKzE4NDAsMTEgQEAgdGVzdF9wZXJfY29udGV4dF9t b2RlX3VucHJpdmlsZWdlZCh2b2lkKQogCXdyaXRlX3U2NF9maWxlKCIvcHJvYy9zeXMvZGV2L2k5 MTUvcGVyZl9zdHJlYW1fcGFyYW5vaWQiLCAxKTsKIAogCWlndF9mb3JrKGNoaWxkLCAxKSB7Ci0J CWRybV9pbnRlbF9jb250ZXh0ICpjb250ZXh0OwotCQlkcm1faW50ZWxfYnVmbWdyICpidWZtZ3I7 CiAJCXVpbnQzMl90IGN0eF9pZCA9IDB4ZmZmZmZmZmY7IC8qIGludmFsaWQgaWQgKi8KLQkJaW50 IHJldDsKIAogCQlpZ3RfZHJvcF9yb290KCk7CiAKLQkJYnVmbWdyID0gZHJtX2ludGVsX2J1Zm1n cl9nZW1faW5pdChkcm1fZmQsIDQwOTYpOwotCQljb250ZXh0ID0gZHJtX2ludGVsX2dlbV9jb250 ZXh0X2NyZWF0ZShidWZtZ3IpOwotCi0JCWlndF9hc3NlcnQoY29udGV4dCk7Ci0KLQkJcmV0ID0g ZHJtX2ludGVsX2dlbV9jb250ZXh0X2dldF9pZChjb250ZXh0LCAmY3R4X2lkKTsKLQkJaWd0X2Fz c2VydF9lcShyZXQsIDApOworCQljdHhfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZHJtX2ZkKTsK IAkJaWd0X2Fzc2VydF9uZXEoY3R4X2lkLCAweGZmZmZmZmZmKTsKIAogCQlwcm9wZXJ0aWVzWzFd ID0gY3R4X2lkOwpAQCAtMTkwOSw4ICsxODUyLDcgQEAgdGVzdF9wZXJfY29udGV4dF9tb2RlX3Vu cHJpdmlsZWdlZCh2b2lkKQogCQlzdHJlYW1fZmQgPSBfX3BlcmZfb3Blbihkcm1fZmQsICZwYXJh bSwgZmFsc2UpOwogCQlfX3BlcmZfY2xvc2Uoc3RyZWFtX2ZkKTsKIAotCQlkcm1faW50ZWxfZ2Vt X2NvbnRleHRfZGVzdHJveShjb250ZXh0KTsKLQkJZHJtX2ludGVsX2J1Zm1ncl9kZXN0cm95KGJ1 Zm1ncik7CisJCWdlbV9jb250ZXh0X2Rlc3Ryb3koZHJtX2ZkLCBjdHhfaWQpOwogCX0KIAogCWln dF93YWl0Y2hpbGRyZW4oKTsKQEAgLTI5MzYsNTUgKzI4NzgsNDQgQEAgZ2VuMTJfdGVzdF9taV9y cGModm9pZCkKIAkJLm51bV9wcm9wZXJ0aWVzID0gQVJSQVlfU0laRShwcm9wZXJ0aWVzKSAvIDIs CiAJCS5wcm9wZXJ0aWVzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihwcm9wZXJ0aWVzKSwKIAl9Owot CWRybV9pbnRlbF9ibyAqYm87Ci0JZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyOwotCWRybV9pbnRl bF9jb250ZXh0ICpjb250ZXh0OwotCXN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2g7CisJ c3RydWN0IGJ1Zl9vcHMgKmJvcHM7CisJc3RydWN0IGludGVsX2JiICppYmI7CisJc3RydWN0IGlu dGVsX2J1ZiAqYnVmOwogI2RlZmluZSBJTlZBTElEX0NUWF9JRCAweGZmZmZmZmZmCiAJdWludDMy X3QgY3R4X2lkID0gSU5WQUxJRF9DVFhfSUQ7CiAJdWludDMyX3QgKnJlcG9ydDMyOwotCWludCBy ZXQ7CiAJc2l6ZV90IGZvcm1hdF9zaXplXzMyOwogCXN0cnVjdCBvYV9mb3JtYXQgZm9ybWF0ID0g Z2V0X29hX2Zvcm1hdCh0ZXN0X3NldC0+cGVyZl9vYV9mb3JtYXQpOwogCiAJLyogRW5zdXJlIHBl cmZfc3RyZWFtX3BhcmFub2lkIGlzIHNldCB0byAxIGJ5IGRlZmF1bHQgKi8KIAl3cml0ZV91NjRf ZmlsZSgiL3Byb2Mvc3lzL2Rldi9pOTE1L3BlcmZfc3RyZWFtX3BhcmFub2lkIiwgMSk7CiAKLQli dWZtZ3IgPSBkcm1faW50ZWxfYnVmbWdyX2dlbV9pbml0KGRybV9mZCwgNDA5Nik7Ci0JaWd0X2Fz c2VydChidWZtZ3IpOwotCi0JZHJtX2ludGVsX2J1Zm1ncl9nZW1fZW5hYmxlX3JldXNlKGJ1Zm1n cik7Ci0KLQljb250ZXh0ID0gZHJtX2ludGVsX2dlbV9jb250ZXh0X2NyZWF0ZShidWZtZ3IpOwot CWlndF9hc3NlcnQoY29udGV4dCk7Ci0KLQlyZXQgPSBkcm1faW50ZWxfZ2VtX2NvbnRleHRfZ2V0 X2lkKGNvbnRleHQsICZjdHhfaWQpOwotCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKwlib3BzID0g YnVmX29wc19jcmVhdGUoZHJtX2ZkKTsKKwljdHhfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZHJt X2ZkKTsKIAlpZ3RfYXNzZXJ0X25lcShjdHhfaWQsIElOVkFMSURfQ1RYX0lEKTsKIAlwcm9wZXJ0 aWVzWzFdID0gY3R4X2lkOwogCi0JYmF0Y2ggPSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGxvYyhidWZt Z3IsIGRldmlkKTsKLQlibyA9IGRybV9pbnRlbF9ib19hbGxvYyhidWZtZ3IsICJtaV9ycGMgZGVz dCBibyIsIDQwOTYsIDY0KTsKKwlpYmIgPSBpbnRlbF9iYl9jcmVhdGUoZHJtX2ZkLCBCQVRDSF9T Wik7CisJYnVmID0gaW50ZWxfYnVmX2NyZWF0ZShib3BzLCA0MDk2LCAxLCA4LCA2NCwKKwkJCSAg ICAgICBJOTE1X1RJTElOR19OT05FLCBJOTE1X0NPTVBSRVNTSU9OX05PTkUpOwogCi0JcmV0ID0g ZHJtX2ludGVsX2JvX21hcChibywgdHJ1ZSk7Ci0JaWd0X2Fzc2VydF9lcShyZXQsIDApOwotCW1l bXNldChiby0+dmlydHVhbCwgMHg4MCwgNDA5Nik7Ci0JZHJtX2ludGVsX2JvX3VubWFwKGJvKTsK KwlpbnRlbF9idWZfY3B1X21hcChidWYsIHRydWUpOworCW1lbXNldChidWYtPnB0ciwgMHg4MCwg NDA5Nik7CisJaW50ZWxfYnVmX3VubWFwKGJ1Zik7CiAKIAlzdHJlYW1fZmQgPSBfX3BlcmZfb3Bl bihkcm1fZmQsICZwYXJhbSwgZmFsc2UpOwogCiAjZGVmaW5lIFJFUE9SVF9JRCAweGRlYWRiZWVm CiAjZGVmaW5lIFJFUE9SVF9PRkZTRVQgMAotCWVtaXRfcmVwb3J0X3BlcmZfY291bnQoYmF0Y2gs Ci0JCQkgICAgICAgYm8sCisJZW1pdF9yZXBvcnRfcGVyZl9jb3VudChpYmIsCisJCQkgICAgICAg YnVmLAogCQkJICAgICAgIFJFUE9SVF9PRkZTRVQsCiAJCQkgICAgICAgUkVQT1JUX0lEKTsKLQlp bnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQoYmF0Y2gsIGNvbnRleHQpOwotCi0J cmV0ID0gZHJtX2ludGVsX2JvX21hcChibywgZmFsc2UpOwotCWlndF9hc3NlcnRfZXEocmV0LCAw KTsKKwlpbnRlbF9iYl9mbHVzaF9yZW5kZXJfd2l0aF9jb250ZXh0KGliYiwgY3R4X2lkKTsKKwlp bnRlbF9iYl9zeW5jKGliYik7CiAKLQlyZXBvcnQzMiA9IGJvLT52aXJ0dWFsOworCWludGVsX2J1 Zl9jcHVfbWFwKGJ1ZiwgZmFsc2UpOworCXJlcG9ydDMyID0gYnVmLT5wdHI7CiAJZm9ybWF0X3Np emVfMzIgPSBmb3JtYXQuc2l6ZSA+PiAyOwogCWR1bXBfcmVwb3J0KHJlcG9ydDMyLCBmb3JtYXRf c2l6ZV8zMiwgIm1pLXJwYyIpOwogCkBAIC0zMDA2LDExICsyOTM3LDExIEBAIGdlbjEyX3Rlc3Rf bWlfcnBjKHZvaWQpCiAJaWd0X2Fzc2VydF9uZXEocmVwb3J0MzJbZm9ybWF0LmJfb2ZmID4+IDJd LCAweDgwODA4MDgwKTsKIAlpZ3RfYXNzZXJ0X2VxKHJlcG9ydDMyW2Zvcm1hdF9zaXplXzMyXSwg MHg4MDgwODA4MCk7CiAKLQlkcm1faW50ZWxfYm9fdW5tYXAoYm8pOwotCWRybV9pbnRlbF9ib191 bnJlZmVyZW5jZShibyk7Ci0JaW50ZWxfYmF0Y2hidWZmZXJfZnJlZShiYXRjaCk7Ci0JZHJtX2lu dGVsX2dlbV9jb250ZXh0X2Rlc3Ryb3koY29udGV4dCk7Ci0JZHJtX2ludGVsX2J1Zm1ncl9kZXN0 cm95KGJ1Zm1ncik7CisJaW50ZWxfYnVmX3VubWFwKGJ1Zik7CisJaW50ZWxfYnVmX2Rlc3Ryb3ko YnVmKTsKKwlpbnRlbF9iYl9kZXN0cm95KGliYik7CisJZ2VtX2NvbnRleHRfZGVzdHJveShkcm1f ZmQsIGN0eF9pZCk7CisJYnVmX29wc19kZXN0cm95KGJvcHMpOwogCV9fcGVyZl9jbG9zZShzdHJl YW1fZmQpOwogfQogCkBAIC0zMDM0LDQxICsyOTY1LDMzIEBAIHRlc3RfbWlfcnBjKHZvaWQpCiAJ CS5udW1fcHJvcGVydGllcyA9IHNpemVvZihwcm9wZXJ0aWVzKSAvIDE2LAogCQkucHJvcGVydGll c19wdHIgPSB0b191c2VyX3BvaW50ZXIocHJvcGVydGllcyksCiAJfTsKLQlkcm1faW50ZWxfYnVm bWdyICpidWZtZ3IgPSBkcm1faW50ZWxfYnVmbWdyX2dlbV9pbml0KGRybV9mZCwgNDA5Nik7Ci0J ZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQ7Ci0Jc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaDsKLQlkcm1faW50ZWxfYm8gKmJvOwotCXVpbnQzMl90ICpyZXBvcnQzMjsKLQlpbnQgcmV0 OworCXN0cnVjdCBidWZfb3BzICpib3BzID0gYnVmX29wc19jcmVhdGUoZHJtX2ZkKTsKKwlzdHJ1 Y3QgaW50ZWxfYmIgKmliYjsKKwlzdHJ1Y3QgaW50ZWxfYnVmICpidWY7CisJdWludDMyX3QgKnJl cG9ydDMyLCBjdHhfaWQ7CiAKIAlzdHJlYW1fZmQgPSBfX3BlcmZfb3Blbihkcm1fZmQsICZwYXJh bSwgZmFsc2UpOwogCi0JZHJtX2ludGVsX2J1Zm1ncl9nZW1fZW5hYmxlX3JldXNlKGJ1Zm1ncik7 Ci0KLQljb250ZXh0ID0gZHJtX2ludGVsX2dlbV9jb250ZXh0X2NyZWF0ZShidWZtZ3IpOwotCWln dF9hc3NlcnQoY29udGV4dCk7CisJY3R4X2lkID0gZ2VtX2NvbnRleHRfY3JlYXRlKGRybV9mZCk7 CiAKLQliYXRjaCA9IGludGVsX2JhdGNoYnVmZmVyX2FsbG9jKGJ1Zm1nciwgZGV2aWQpOworCWli YiA9IGludGVsX2JiX2NyZWF0ZShkcm1fZmQsIEJBVENIX1NaKTsKKwlidWYgPSBpbnRlbF9idWZf Y3JlYXRlKGJvcHMsIDQwOTYsIDEsIDgsIDY0LAorCQkJICAgICAgIEk5MTVfVElMSU5HX05PTkUs IEk5MTVfQ09NUFJFU1NJT05fTk9ORSk7CiAKLQlibyA9IGRybV9pbnRlbF9ib19hbGxvYyhidWZt Z3IsICJtaV9ycGMgZGVzdCBibyIsIDQwOTYsIDY0KTsKLQotCXJldCA9IGRybV9pbnRlbF9ib19t YXAoYm8sIHRydWUpOwotCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKwlpbnRlbF9idWZfY3B1X21h cChidWYsIHRydWUpOworCW1lbXNldChidWYtPnB0ciwgMHg4MCwgNDA5Nik7CisJaW50ZWxfYnVm X3VubWFwKGJ1Zik7CiAKLQltZW1zZXQoYm8tPnZpcnR1YWwsIDB4ODAsIDQwOTYpOwotCWRybV9p bnRlbF9ib191bm1hcChibyk7Ci0KLQllbWl0X3JlcG9ydF9wZXJmX2NvdW50KGJhdGNoLAotCQkJ ICAgICAgIGJvLCAvKiBkc3QgKi8KKwllbWl0X3JlcG9ydF9wZXJmX2NvdW50KGliYiwKKwkJCSAg ICAgICBidWYsIC8qIGRzdCAqLwogCQkJICAgICAgIDAsIC8qIGRzdCBvZmZzZXQgaW4gYnl0ZXMg Ki8KIAkJCSAgICAgICAweGRlYWRiZWVmKTsgLyogcmVwb3J0IElEICovCiAKLQlpbnRlbF9iYXRj aGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQoYmF0Y2gsIGNvbnRleHQpOwotCi0JcmV0ID0gZHJt X2ludGVsX2JvX21hcChibywgZmFsc2UgLyogd3JpdGUgZW5hYmxlICovKTsKLQlpZ3RfYXNzZXJ0 X2VxKHJldCwgMCk7CisJaW50ZWxfYmJfZmx1c2hfcmVuZGVyX3dpdGhfY29udGV4dChpYmIsIGN0 eF9pZCk7CisJaW50ZWxfYmJfc3luYyhpYmIpOwogCi0JcmVwb3J0MzIgPSBiby0+dmlydHVhbDsK KwlpbnRlbF9idWZfY3B1X21hcChidWYsIGZhbHNlKTsKKwlyZXBvcnQzMiA9IGJ1Zi0+cHRyOwog CWR1bXBfcmVwb3J0KHJlcG9ydDMyLCA2NCwgIm1pLXJwYyIpOwogCWlndF9hc3NlcnRfZXEocmVw b3J0MzJbMF0sIDB4ZGVhZGJlZWYpOyAvKiByZXBvcnQgSUQgKi8KIAlpZ3RfYXNzZXJ0X25lcShy ZXBvcnQzMlsxXSwgMCk7IC8qIHRpbWVzdGFtcCAqLwpAQCAtMzA3NiwxNyArMjk5OSwxNyBAQCB0 ZXN0X21pX3JwYyh2b2lkKQogCWlndF9hc3NlcnRfbmVxKHJlcG9ydDMyWzYzXSwgMHg4MDgwODA4 MCk7IC8qIGVuZCBvZiByZXBvcnQgKi8KIAlpZ3RfYXNzZXJ0X2VxKHJlcG9ydDMyWzY0XSwgMHg4 MDgwODA4MCk7IC8qIGFmdGVyIDI1NiBieXRlIHJlcG9ydCAqLwogCi0JZHJtX2ludGVsX2JvX3Vu bWFwKGJvKTsKLQlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2UoYm8pOwotCWludGVsX2JhdGNoYnVm ZmVyX2ZyZWUoYmF0Y2gpOwotCWRybV9pbnRlbF9nZW1fY29udGV4dF9kZXN0cm95KGNvbnRleHQp OwotCWRybV9pbnRlbF9idWZtZ3JfZGVzdHJveShidWZtZ3IpOworCWludGVsX2J1Zl91bm1hcChi dWYpOworCWludGVsX2J1Zl9kZXN0cm95KGJ1Zik7CisJaW50ZWxfYmJfZGVzdHJveShpYmIpOwor CWdlbV9jb250ZXh0X2Rlc3Ryb3koZHJtX2ZkLCBjdHhfaWQpOworCWJ1Zl9vcHNfZGVzdHJveShi b3BzKTsKIAlfX3BlcmZfY2xvc2Uoc3RyZWFtX2ZkKTsKIH0KIAogc3RhdGljIHZvaWQKLWVtaXRf c3RhbGxfdGltZXN0YW1wX2FuZF9ycGMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwK LQkJCSAgICAgZHJtX2ludGVsX2JvICpkc3QsCitlbWl0X3N0YWxsX3RpbWVzdGFtcF9hbmRfcnBj KHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJICAgICBzdHJ1Y3QgaW50ZWxfYnVmICpkc3QsCiAJ CQkgICAgIGludCB0aW1lc3RhbXBfb2Zmc2V0LAogCQkJICAgICBpbnQgcmVwb3J0X2RzdF9vZmZz ZXQsCiAJCQkgICAgIHVpbnQzMl90IHJlcG9ydF9pZCkKQEAgLTMwOTUsMjcgKzMwMTgsMTkgQEAg ZW1pdF9zdGFsbF90aW1lc3RhbXBfYW5kX3JwYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoLAogCQkJCSAgIFBJUEVfQ09OVFJPTF9SRU5ERVJfVEFSR0VUX0ZMVVNIIHwKIAkJCQkgICBQ SVBFX0NPTlRST0xfV1JJVEVfVElNRVNUQU1QKTsKIAotCWlmIChpbnRlbF9nZW4oZGV2aWQpID49 IDgpIHsKLQkJQkVHSU5fQkFUQ0goNSwgMSk7Ci0JCU9VVF9CQVRDSChHRlhfT1BfUElQRV9DT05U Uk9MIHwgKDYgLSAyKSk7Ci0JCU9VVF9CQVRDSChwaXBlX2N0bF9mbGFncyk7Ci0JCU9VVF9SRUxP Qyhkc3QsIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgSTkxNV9HRU1fRE9NQUlOX0lOU1RS VUNUSU9OLAotCQkJICB0aW1lc3RhbXBfb2Zmc2V0KTsKLQkJT1VUX0JBVENIKDApOyAvKiBpbW0g bG93ZXIgKi8KLQkJT1VUX0JBVENIKDApOyAvKiBpbW0gdXBwZXIgKi8KLQkJQURWQU5DRV9CQVRD SCgpOwotCX0gZWxzZSB7Ci0JCUJFR0lOX0JBVENIKDUsIDEpOwotCQlPVVRfQkFUQ0goR0ZYX09Q X1BJUEVfQ09OVFJPTCB8ICg1IC0gMikpOwotCQlPVVRfQkFUQ0gocGlwZV9jdGxfZmxhZ3MpOwot CQlPVVRfUkVMT0MoZHN0LCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIEk5MTVfR0VNX0RP TUFJTl9JTlNUUlVDVElPTiwKLQkJCSAgdGltZXN0YW1wX29mZnNldCk7Ci0JCU9VVF9CQVRDSCgw KTsgLyogaW1tIGxvd2VyICovCi0JCU9VVF9CQVRDSCgwKTsgLyogaW1tIHVwcGVyICovCi0JCUFE VkFOQ0VfQkFUQ0goKTsKLQl9CisJaWYgKGludGVsX2dlbihkZXZpZCkgPj0gOCkKKwkJaW50ZWxf YmJfb3V0KGliYiwgR0ZYX09QX1BJUEVfQ09OVFJPTCB8ICg2IC0gMikpOworCWVsc2UKKwkJaW50 ZWxfYmJfb3V0KGliYiwgR0ZYX09QX1BJUEVfQ09OVFJPTCB8ICg1IC0gMikpOwogCi0JZW1pdF9y ZXBvcnRfcGVyZl9jb3VudChiYXRjaCwgZHN0LCByZXBvcnRfZHN0X29mZnNldCwgcmVwb3J0X2lk KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBwaXBlX2N0bF9mbGFncyk7CisJaW50ZWxfYmJfZW1pdF9y ZWxvYyhpYmIsIGRzdC0+aGFuZGxlLAorCQkJICAgIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElP TiwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLAorCQkJICAgIHRpbWVzdGFtcF9vZmZzZXQs IGRzdC0+YWRkci5vZmZzZXQpOworCWludGVsX2JiX291dChpYmIsIDApOyAvKiBpbW0gbG93ZXIg Ki8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogaW1tIHVwcGVyICovCisKKwllbWl0X3JlcG9y dF9wZXJmX2NvdW50KGliYiwgZHN0LCByZXBvcnRfZHN0X29mZnNldCwgcmVwb3J0X2lkKTsKIH0K IAogLyogVGVzdHMgdGhlIElOVEVMX3BlcmZvcm1hbmNlX3F1ZXJ5IHVzZSBjYXNlIHdoZXJlIGFu IHVucHJpdmlsZWdlZCBwcm9jZXNzCkBAIC0zMTU2LDExICszMDcxLDEwIEBAIGhzd190ZXN0X3Np bmdsZV9jdHhfY291bnRlcnModm9pZCkKIAl3cml0ZV91NjRfZmlsZSgiL3Byb2Mvc3lzL2Rldi9p OTE1L3BlcmZfc3RyZWFtX3BhcmFub2lkIiwgMSk7CiAKIAlpZ3RfZm9yayhjaGlsZCwgMSkgewot CQlkcm1faW50ZWxfYnVmbWdyICpidWZtZ3I7Ci0JCWRybV9pbnRlbF9jb250ZXh0ICpjb250ZXh0 MCwgKmNvbnRleHQxOwotCQlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoOwotCQlzdHJ1 Y3QgaWd0X2J1ZiBzcmNbM10sIGRzdFszXTsKLQkJZHJtX2ludGVsX2JvICpibzsKKwkJc3RydWN0 IGJ1Zl9vcHMgKmJvcHM7CisJCXN0cnVjdCBpbnRlbF9idWYgc3JjWzNdLCBkc3RbM10sICpkc3Rf YnVmOworCQlzdHJ1Y3QgaW50ZWxfYmIgKmliYjAsICppYmIxOworCQl1aW50MzJfdCBjb250ZXh0 MF9pZCwgY29udGV4dDFfaWQ7CiAJCXVpbnQzMl90ICpyZXBvcnQwXzMyLCAqcmVwb3J0MV8zMjsK IAkJdWludDY0X3QgdGltZXN0YW1wMF82NCwgdGltZXN0YW1wMV82NDsKIAkJdWludDMyX3QgZGVs dGFfdHM2NCwgZGVsdGFfb2EzMjsKQEAgLTMxNjksMjYgKzMwODMsMjQgQEAgaHN3X3Rlc3Rfc2lu Z2xlX2N0eF9jb3VudGVycyh2b2lkKQogCQlpbnQgbl9zYW1wbGVzX3dyaXR0ZW47CiAJCWludCB3 aWR0aCA9IDgwMDsKIAkJaW50IGhlaWdodCA9IDYwMDsKLQkJdWludDMyX3QgY3R4X2lkID0gMHhm ZmZmZmZmZjsgLyogaW52YWxpZCBpZCAqLwotCQlpbnQgcmV0OwogCiAJCWlndF9kcm9wX3Jvb3Qo KTsKIAotCQlidWZtZ3IgPSBkcm1faW50ZWxfYnVmbWdyX2dlbV9pbml0KGRybV9mZCwgNDA5Nik7 Ci0JCWRybV9pbnRlbF9idWZtZ3JfZ2VtX2VuYWJsZV9yZXVzZShidWZtZ3IpOworCQlib3BzID0g YnVmX29wc19jcmVhdGUoZHJtX2ZkKTsKIAogCQlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJ WkUoc3JjKTsgaSsrKSB7Ci0JCQlzY3JhdGNoX2J1Zl9pbml0KGJ1Zm1nciwgJnNyY1tpXSwgd2lk dGgsIGhlaWdodCwgMHhmZjAwMDBmZik7Ci0JCQlzY3JhdGNoX2J1Zl9pbml0KGJ1Zm1nciwgJmRz dFtpXSwgd2lkdGgsIGhlaWdodCwgMHgwMGZmMDBmZik7CisJCQlzY3JhdGNoX2J1Zl9pbml0KGJv cHMsICZzcmNbaV0sIHdpZHRoLCBoZWlnaHQsIDB4ZmYwMDAwZmYpOworCQkJc2NyYXRjaF9idWZf aW5pdChib3BzLCAmZHN0W2ldLCB3aWR0aCwgaGVpZ2h0LCAweDAwZmYwMGZmKTsKIAkJfQogCi0J CWJhdGNoID0gaW50ZWxfYmF0Y2hidWZmZXJfYWxsb2MoYnVmbWdyLCBkZXZpZCk7Ci0KLQkJY29u dGV4dDAgPSBkcm1faW50ZWxfZ2VtX2NvbnRleHRfY3JlYXRlKGJ1Zm1ncik7Ci0JCWlndF9hc3Nl cnQoY29udGV4dDApOwotCi0JCWNvbnRleHQxID0gZHJtX2ludGVsX2dlbV9jb250ZXh0X2NyZWF0 ZShidWZtZ3IpOwotCQlpZ3RfYXNzZXJ0KGNvbnRleHQxKTsKKwkJLyoKKwkJICogV2UgY3VycmVu dGx5IGNhY2hlIGFkZHJlc3NlcyBmb3IgYnVmZmVycyB3aXRoaW4KKwkJICogaW50ZWxfYmIsIHNv IHVzZSBzZXBhcmF0ZSBiYXRjaGVzIGZvciBkaWZmZXJlbnQgY29udGV4dHMKKwkJICovCisJCWli YjAgPSBpbnRlbF9iYl9jcmVhdGUoZHJtX2ZkLCBCQVRDSF9TWik7CisJCWliYjEgPSBpbnRlbF9i Yl9jcmVhdGUoZHJtX2ZkLCBCQVRDSF9TWik7CisJCWNvbnRleHQwX2lkID0gZ2VtX2NvbnRleHRf Y3JlYXRlKGRybV9mZCk7CisJCWNvbnRleHQxX2lkID0gZ2VtX2NvbnRleHRfY3JlYXRlKGRybV9m ZCk7CiAKIAkJaWd0X2RlYnVnKCJzdWJtaXR0aW5nIHdhcm0gdXAgcmVuZGVyX2NvcHlcbiIpOwog CkBAIC0zMjEyLDM0ICszMTI0LDMyIEBAIGhzd190ZXN0X3NpbmdsZV9jdHhfY291bnRlcnModm9p ZCkKIAkJICogdXAgcGlubmluZyB0aGUgY29udGV4dCBzaW5jZSB0aGVyZSB3b24ndCBldmVyIGJl IGEgcGlubmluZwogCQkgKiBob29rIGNhbGxiYWNrLgogCQkgKi8KLQkJcmVuZGVyX2NvcHkoYmF0 Y2gsCi0JCQkgICAgY29udGV4dDAsCisJCXJlbmRlcl9jb3B5KGliYjAsCisJCQkgICAgY29udGV4 dDBfaWQsCiAJCQkgICAgJnNyY1swXSwgMCwgMCwgd2lkdGgsIGhlaWdodCwKIAkJCSAgICAmZHN0 WzBdLCAwLCAwKTsKIAotCQlyZXQgPSBkcm1faW50ZWxfZ2VtX2NvbnRleHRfZ2V0X2lkKGNvbnRl eHQwLCAmY3R4X2lkKTsKLQkJaWd0X2Fzc2VydF9lcShyZXQsIDApOwotCQlpZ3RfYXNzZXJ0X25l cShjdHhfaWQsIDB4ZmZmZmZmZmYpOwotCQlwcm9wZXJ0aWVzWzFdID0gY3R4X2lkOworCQlwcm9w ZXJ0aWVzWzFdID0gY29udGV4dDBfaWQ7CiAKLQkJaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfd2l0 aF9jb250ZXh0KGJhdGNoLCBjb250ZXh0MCk7CisJCWludGVsX2JiX2ZsdXNoX3JlbmRlcl93aXRo X2NvbnRleHQoaWJiMCwgY29udGV4dDBfaWQpOworCQlpbnRlbF9iYl9zeW5jKGliYjApOwogCi0J CXNjcmF0Y2hfYnVmX21lbXNldChzcmNbMF0uYm8sIHdpZHRoLCBoZWlnaHQsIDB4ZmYwMDAwZmYp OwotCQlzY3JhdGNoX2J1Zl9tZW1zZXQoZHN0WzBdLmJvLCB3aWR0aCwgaGVpZ2h0LCAweDAwZmYw MGZmKTsKKwkJc2NyYXRjaF9idWZfbWVtc2V0KCZzcmNbMF0sIHdpZHRoLCBoZWlnaHQsIDB4ZmYw MDAwZmYpOworCQlzY3JhdGNoX2J1Zl9tZW1zZXQoJmRzdFswXSwgd2lkdGgsIGhlaWdodCwgMHgw MGZmMDBmZik7CiAKIAkJaWd0X2RlYnVnKCJvcGVuaW5nIGk5MTUtcGVyZiBzdHJlYW1cbiIpOwog CQlzdHJlYW1fZmQgPSBfX3BlcmZfb3Blbihkcm1fZmQsICZwYXJhbSwgZmFsc2UpOwogCi0JCWJv ID0gZHJtX2ludGVsX2JvX2FsbG9jKGJ1Zm1nciwgIm1pX3JwYyBkZXN0IGJvIiwgNDA5NiwgNjQp OworCQlkc3RfYnVmID0gaW50ZWxfYnVmX2NyZWF0ZShib3BzLCA0MDk2LCAxLCA4LCA2NCwKKwkJ CQkJICAgSTkxNV9USUxJTkdfTk9ORSwKKwkJCQkJICAgSTkxNV9DT01QUkVTU0lPTl9OT05FKTsK IAotCQlyZXQgPSBkcm1faW50ZWxfYm9fbWFwKGJvLCB0cnVlIC8qIHdyaXRlIGVuYWJsZSAqLyk7 Ci0JCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKwkJaW50ZWxfYnVmX2NwdV9tYXAoZHN0X2J1Ziwg dHJ1ZSAvKiB3cml0ZSBlbmFibGUgKi8pOworCQltZW1zZXQoZHN0X2J1Zi0+cHRyLCAweDgwLCA0 MDk2KTsKKwkJaW50ZWxfYnVmX3VubWFwKGRzdF9idWYpOwogCi0JCW1lbXNldChiby0+dmlydHVh bCwgMHg4MCwgNDA5Nik7Ci0JCWRybV9pbnRlbF9ib191bm1hcChibyk7Ci0KLQkJZW1pdF9zdGFs bF90aW1lc3RhbXBfYW5kX3JwYyhiYXRjaCwKLQkJCQkJICAgICBibywKKwkJZW1pdF9zdGFsbF90 aW1lc3RhbXBfYW5kX3JwYyhpYmIwLAorCQkJCQkgICAgIGRzdF9idWYsCiAJCQkJCSAgICAgNTEy IC8qIHRpbWVzdGFtcCBvZmZzZXQgKi8sCiAJCQkJCSAgICAgMCwgLyogcmVwb3J0IGRzdCBvZmZz ZXQgKi8KIAkJCQkJICAgICAweGRlYWRiZWVmKTsgLyogcmVwb3J0IGlkICovCkBAIC0zMjQ5LDQ1 ICszMTU5LDQ1IEBAIGhzd190ZXN0X3NpbmdsZV9jdHhfY291bnRlcnModm9pZCkKIAkJICogdGhh dCB0aGUgUElQRV9DT05UUk9MICsgTUlfUlBDIGNvbW1hbmRzIHdpbGwgYmUgaW4gYQogCQkgKiBz ZXBhcmF0ZSBiYXRjaCBmcm9tIHRoZSBjb3B5LgogCQkgKi8KLQkJaW50ZWxfYmF0Y2hidWZmZXJf Zmx1c2hfd2l0aF9jb250ZXh0KGJhdGNoLCBjb250ZXh0MCk7CisJCWludGVsX2JiX2ZsdXNoX3Jl bmRlcl93aXRoX2NvbnRleHQoaWJiMCwgY29udGV4dDBfaWQpOwogCi0JCXJlbmRlcl9jb3B5KGJh dGNoLAotCQkJICAgIGNvbnRleHQwLAorCQlyZW5kZXJfY29weShpYmIwLAorCQkJICAgIGNvbnRl eHQwX2lkLAogCQkJICAgICZzcmNbMF0sIDAsIDAsIHdpZHRoLCBoZWlnaHQsCiAJCQkgICAgJmRz dFswXSwgMCwgMCk7CiAKIAkJLyogQW5vdGhlciByZWR1bmRhbnQgZmx1c2ggdG8gY2xhcmlmeSBi YXRjaCBibyBpcyBmcmVlIHRvIHJldXNlICovCi0JCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX3dp dGhfY29udGV4dChiYXRjaCwgY29udGV4dDApOworCQlpbnRlbF9iYl9mbHVzaF9yZW5kZXJfd2l0 aF9jb250ZXh0KGliYjAsIGNvbnRleHQwX2lkKTsKIAogCQkvKiBzdWJtaXQgdHdvIGNvcGllcyBv biB0aGUgb3RoZXIgY29udGV4dCB0byBhdm9pZCBhIGZhbHNlCiAJCSAqIHBvc2l0aXZlIGluIGNh c2UgdGhlIGRyaXZlciBzb21laG93IGVuZGVkIHVwIGZpbHRlcmluZyBmb3IKIAkJICogY29udGV4 dDEKIAkJICovCi0JCXJlbmRlcl9jb3B5KGJhdGNoLAotCQkJICAgIGNvbnRleHQxLAorCQlyZW5k ZXJfY29weShpYmIxLAorCQkJICAgIGNvbnRleHQxX2lkLAogCQkJICAgICZzcmNbMV0sIDAsIDAs IHdpZHRoLCBoZWlnaHQsCiAJCQkgICAgJmRzdFsxXSwgMCwgMCk7CiAKLQkJcmVuZGVyX2NvcHko YmF0Y2gsCi0JCQkgICAgY29udGV4dDEsCisJCXJlbmRlcl9jb3B5KGliYjEsCisJCQkgICAgY29u dGV4dDFfaWQsCiAJCQkgICAgJnNyY1syXSwgMCwgMCwgd2lkdGgsIGhlaWdodCwKIAkJCSAgICAm ZHN0WzJdLCAwLCAwKTsKIAogCQkvKiBBbmQgYW5vdGhlciAqLwotCQlpbnRlbF9iYXRjaGJ1ZmZl cl9mbHVzaF93aXRoX2NvbnRleHQoYmF0Y2gsIGNvbnRleHQxKTsKKwkJaW50ZWxfYmJfZmx1c2hf cmVuZGVyX3dpdGhfY29udGV4dChpYmIxLCBjb250ZXh0MV9pZCk7CiAKLQkJZW1pdF9zdGFsbF90 aW1lc3RhbXBfYW5kX3JwYyhiYXRjaCwKLQkJCQkJICAgICBibywKKwkJZW1pdF9zdGFsbF90aW1l c3RhbXBfYW5kX3JwYyhpYmIwLAorCQkJCQkgICAgIGRzdF9idWYsCiAJCQkJCSAgICAgNTIwIC8q IHRpbWVzdGFtcCBvZmZzZXQgKi8sCiAJCQkJCSAgICAgMjU2LCAvKiByZXBvcnQgZHN0IG9mZnNl dCAqLwogCQkJCQkgICAgIDB4YmVlZmJlZWYpOyAvKiByZXBvcnQgaWQgKi8KIAotCQlpbnRlbF9i YXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQoYmF0Y2gsIGNvbnRleHQwKTsKKwkJaW50ZWxf YmJfZmx1c2hfcmVuZGVyX3dpdGhfY29udGV4dChpYmIwLCBjb250ZXh0MF9pZCk7CisJCWludGVs X2JiX3N5bmMoaWJiMCk7CiAKLQkJcmV0ID0gZHJtX2ludGVsX2JvX21hcChibywgZmFsc2UgLyog d3JpdGUgZW5hYmxlICovKTsKLQkJaWd0X2Fzc2VydF9lcShyZXQsIDApOworCQlpbnRlbF9idWZf Y3B1X21hcChkc3RfYnVmLCBmYWxzZSAvKiB3cml0ZSBlbmFibGUgKi8pOwogCi0JCXJlcG9ydDBf MzIgPSBiby0+dmlydHVhbDsKKwkJcmVwb3J0MF8zMiA9IGRzdF9idWYtPnB0cjsKIAkJaWd0X2Fz c2VydF9lcShyZXBvcnQwXzMyWzBdLCAweGRlYWRiZWVmKTsgLyogcmVwb3J0IElEICovCiAJCWln dF9hc3NlcnRfbmVxKHJlcG9ydDBfMzJbMV0sIDApOyAvKiB0aW1lc3RhbXAgKi8KIApAQCAtMzMw Nyw4ICszMjE3LDggQEAgaHN3X3Rlc3Rfc2luZ2xlX2N0eF9jb3VudGVycyh2b2lkKQogCQlpZ3Rf ZGVidWcoInRpbWVzdGFtcDMyIDAgPSAldVxuIiwgcmVwb3J0MF8zMlsxXSk7CiAJCWlndF9kZWJ1 ZygidGltZXN0YW1wMzIgMSA9ICV1XG4iLCByZXBvcnQxXzMyWzFdKTsKIAotCQl0aW1lc3RhbXAw XzY0ID0gKih1aW50NjRfdCAqKSgoKHVpbnQ4X3QgKiliby0+dmlydHVhbCkgKyA1MTIpOwotCQl0 aW1lc3RhbXAxXzY0ID0gKih1aW50NjRfdCAqKSgoKHVpbnQ4X3QgKiliby0+dmlydHVhbCkgKyA1 MjApOworCQl0aW1lc3RhbXAwXzY0ID0gKih1aW50NjRfdCAqKSgoKHVpbnQ4X3QgKilkc3RfYnVm LT5wdHIpICsgNTEyKTsKKwkJdGltZXN0YW1wMV82NCA9ICoodWludDY0X3QgKikoKCh1aW50OF90 ICopZHN0X2J1Zi0+cHRyKSArIDUyMCk7CiAKIAkJaWd0X2RlYnVnKCJ0aW1lc3RhbXA2NCAwID0g JSJQUkl1NjQiXG4iLCB0aW1lc3RhbXAwXzY0KTsKIAkJaWd0X2RlYnVnKCJ0aW1lc3RhbXA2NCAx ID0gJSJQUkl1NjQiXG4iLCB0aW1lc3RhbXAxXzY0KTsKQEAgLTMzMzYsMTYgKzMyNDYsMTcgQEAg aHN3X3Rlc3Rfc2luZ2xlX2N0eF9jb3VudGVycyh2b2lkKQogCQlpZ3RfYXNzZXJ0KGRlbHRhX2Rl bHRhIDw9IDMyMCk7CiAKIAkJZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNyYyk7IGkr KykgewotCQkJZHJtX2ludGVsX2JvX3VucmVmZXJlbmNlKHNyY1tpXS5ibyk7Ci0JCQlkcm1faW50 ZWxfYm9fdW5yZWZlcmVuY2UoZHN0W2ldLmJvKTsKKwkJCWludGVsX2J1Zl9jbG9zZShib3BzLCAm c3JjW2ldKTsKKwkJCWludGVsX2J1Zl9jbG9zZShib3BzLCAmZHN0W2ldKTsKIAkJfQogCi0JCWRy bV9pbnRlbF9ib191bm1hcChibyk7Ci0JCWRybV9pbnRlbF9ib191bnJlZmVyZW5jZShibyk7Ci0J CWludGVsX2JhdGNoYnVmZmVyX2ZyZWUoYmF0Y2gpOwotCQlkcm1faW50ZWxfZ2VtX2NvbnRleHRf ZGVzdHJveShjb250ZXh0MCk7Ci0JCWRybV9pbnRlbF9nZW1fY29udGV4dF9kZXN0cm95KGNvbnRl eHQxKTsKLQkJZHJtX2ludGVsX2J1Zm1ncl9kZXN0cm95KGJ1Zm1ncik7CisJCWludGVsX2J1Zl91 bm1hcChkc3RfYnVmKTsKKwkJaW50ZWxfYnVmX2Rlc3Ryb3koZHN0X2J1Zik7CisJCWludGVsX2Ji X2Rlc3Ryb3koaWJiMCk7CisJCWludGVsX2JiX2Rlc3Ryb3koaWJiMSk7CisJCWdlbV9jb250ZXh0 X2Rlc3Ryb3koZHJtX2ZkLCBjb250ZXh0MF9pZCk7CisJCWdlbV9jb250ZXh0X2Rlc3Ryb3koZHJt X2ZkLCBjb250ZXh0MV9pZCk7CisJCWJ1Zl9vcHNfZGVzdHJveShib3BzKTsKIAkJX19wZXJmX2Ns b3NlKHN0cmVhbV9mZCk7CiAJfQogCkBAIC0zNDA2LDExICszMzE3LDEwIEBAIGdlbjhfdGVzdF9z aW5nbGVfY3R4X3JlbmRlcl90YXJnZXRfd3JpdGVzX2FfY291bnRlcih2b2lkKQogCiAJCWlndF9m b3JrX2hlbHBlcigmY2hpbGQpIHsKIAkJCXN0cnVjdCBkcm1faTkxNV9wZXJmX3JlY29yZF9oZWFk ZXIgKmhlYWRlcjsKLQkJCWRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1ncjsKLQkJCWRybV9pbnRlbF9j b250ZXh0ICpjb250ZXh0MCwgKmNvbnRleHQxOwotCQkJc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaDsKLQkJCXN0cnVjdCBpZ3RfYnVmIHNyY1szXSwgZHN0WzNdOwotCQkJZHJtX2ludGVs X2JvICpibzsKKwkJCXN0cnVjdCBidWZfb3BzICpib3BzOworCQkJc3RydWN0IGludGVsX2JiICpp YmIwLCAqaWJiMTsKKwkJCXN0cnVjdCBpbnRlbF9idWYgc3JjWzNdLCBkc3RbM10sICpkc3RfYnVm OworCQkJdWludDMyX3QgY29udGV4dDBfaWQsIGNvbnRleHQxX2lkOwogCQkJdWludDMyX3QgKnJl cG9ydDBfMzIsICpyZXBvcnQxXzMyOwogCQkJdWludDMyX3QgKnByZXYsICpscHJldiA9IE5VTEw7 CiAJCQl1aW50NjRfdCB0aW1lc3RhbXAwXzY0LCB0aW1lc3RhbXAxXzY0OwpAQCAtMzQyOCwyMSAr MzMzOCwxNyBAQCBnZW44X3Rlc3Rfc2luZ2xlX2N0eF9yZW5kZXJfdGFyZ2V0X3dyaXRlc19hX2Nv dW50ZXIodm9pZCkKIAkJCQkuZm9ybWF0ID0gdGVzdF9zZXQtPnBlcmZfb2FfZm9ybWF0CiAJCQl9 OwogCi0JCQlidWZtZ3IgPSBkcm1faW50ZWxfYnVmbWdyX2dlbV9pbml0KGRybV9mZCwgNDA5Nik7 Ci0JCQlkcm1faW50ZWxfYnVmbWdyX2dlbV9lbmFibGVfcmV1c2UoYnVmbWdyKTsKKwkJCWJvcHMg PSBidWZfb3BzX2NyZWF0ZShkcm1fZmQpOwogCiAJCQlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZ X1NJWkUoc3JjKTsgaSsrKSB7Ci0JCQkJc2NyYXRjaF9idWZfaW5pdChidWZtZ3IsICZzcmNbaV0s IHdpZHRoLCBoZWlnaHQsIDB4ZmYwMDAwZmYpOwotCQkJCXNjcmF0Y2hfYnVmX2luaXQoYnVmbWdy LCAmZHN0W2ldLCB3aWR0aCwgaGVpZ2h0LCAweDAwZmYwMGZmKTsKKwkJCQlzY3JhdGNoX2J1Zl9p bml0KGJvcHMsICZzcmNbaV0sIHdpZHRoLCBoZWlnaHQsIDB4ZmYwMDAwZmYpOworCQkJCXNjcmF0 Y2hfYnVmX2luaXQoYm9wcywgJmRzdFtpXSwgd2lkdGgsIGhlaWdodCwgMHgwMGZmMDBmZik7CiAJ CQl9CiAKLQkJCWJhdGNoID0gaW50ZWxfYmF0Y2hidWZmZXJfYWxsb2MoYnVmbWdyLCBkZXZpZCk7 Ci0KLQkJCWNvbnRleHQwID0gZHJtX2ludGVsX2dlbV9jb250ZXh0X2NyZWF0ZShidWZtZ3IpOwot CQkJaWd0X2Fzc2VydChjb250ZXh0MCk7Ci0KLQkJCWNvbnRleHQxID0gZHJtX2ludGVsX2dlbV9j b250ZXh0X2NyZWF0ZShidWZtZ3IpOwotCQkJaWd0X2Fzc2VydChjb250ZXh0MSk7CisJCQlpYmIw ID0gaW50ZWxfYmJfY3JlYXRlKGRybV9mZCwgQkFUQ0hfU1opOworCQkJaWJiMSA9IGludGVsX2Ji X2NyZWF0ZShkcm1fZmQsIEJBVENIX1NaKTsKKwkJCWNvbnRleHQwX2lkID0gZ2VtX2NvbnRleHRf Y3JlYXRlKGRybV9mZCk7CisJCQljb250ZXh0MV9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShkcm1f ZmQpOwogCiAJCQlpZ3RfZGVidWcoInN1Ym1pdHRpbmcgd2FybSB1cCByZW5kZXJfY29weVxuIik7 CiAKQEAgLTM0NjYsMzIgKzMzNzIsMzAgQEAgZ2VuOF90ZXN0X3NpbmdsZV9jdHhfcmVuZGVyX3Rh cmdldF93cml0ZXNfYV9jb3VudGVyKHZvaWQpCiAJCQkgKiB1cCBwaW5uaW5nIHRoZSBjb250ZXh0 IHNpbmNlIHRoZXJlIHdvbid0IGV2ZXIgYmUgYSBwaW5uaW5nCiAJCQkgKiBob29rIGNhbGxiYWNr LgogCQkJICovCi0JCQlyZW5kZXJfY29weShiYXRjaCwKLQkJCQkgICAgY29udGV4dDAsCisJCQly ZW5kZXJfY29weShpYmIwLAorCQkJCSAgICBjb250ZXh0MF9pZCwKIAkJCQkgICAgJnNyY1swXSwg MCwgMCwgd2lkdGgsIGhlaWdodCwKIAkJCQkgICAgJmRzdFswXSwgMCwgMCk7CisJCQlpbnRlbF9i Yl9zeW5jKGliYjApOwogCi0JCQlyZXQgPSBkcm1faW50ZWxfZ2VtX2NvbnRleHRfZ2V0X2lkKGNv bnRleHQwLCAmY3R4X2lkKTsKLQkJCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKLQkJCWlndF9hc3Nl cnRfbmVxKGN0eF9pZCwgMHhmZmZmZmZmZik7Ci0JCQlwcm9wZXJ0aWVzWzFdID0gY3R4X2lkOwor CQkJcHJvcGVydGllc1sxXSA9IGNvbnRleHQwX2lkOwogCi0JCQlzY3JhdGNoX2J1Zl9tZW1zZXQo c3JjWzBdLmJvLCB3aWR0aCwgaGVpZ2h0LCAweGZmMDAwMGZmKTsKLQkJCXNjcmF0Y2hfYnVmX21l bXNldChkc3RbMF0uYm8sIHdpZHRoLCBoZWlnaHQsIDB4MDBmZjAwZmYpOworCQkJc2NyYXRjaF9i dWZfbWVtc2V0KCZzcmNbMF0sIHdpZHRoLCBoZWlnaHQsIDB4ZmYwMDAwZmYpOworCQkJc2NyYXRj aF9idWZfbWVtc2V0KCZkc3RbMF0sIHdpZHRoLCBoZWlnaHQsIDB4MDBmZjAwZmYpOwogCiAJCQlp Z3RfZGVidWcoIm9wZW5pbmcgaTkxNS1wZXJmIHN0cmVhbVxuIik7CiAJCQlzdHJlYW1fZmQgPSBf X3BlcmZfb3Blbihkcm1fZmQsICZwYXJhbSwgZmFsc2UpOwogCi0JCQlibyA9IGRybV9pbnRlbF9i b19hbGxvYyhidWZtZ3IsICJtaV9ycGMgZGVzdCBibyIsIDQwOTYsIDY0KTsKLQotCQkJcmV0ID0g ZHJtX2ludGVsX2JvX21hcChibywgdHJ1ZSAvKiB3cml0ZSBlbmFibGUgKi8pOwotCQkJaWd0X2Fz c2VydF9lcShyZXQsIDApOworCQkJZHN0X2J1ZiA9IGludGVsX2J1Zl9jcmVhdGUoYm9wcywgNDA5 NiwgMSwgOCwgNjQsCisJCQkJCQkgICBJOTE1X1RJTElOR19OT05FLAorCQkJCQkJICAgSTkxNV9D T01QUkVTU0lPTl9OT05FKTsKIAotCQkJbWVtc2V0KGJvLT52aXJ0dWFsLCAweDgwLCA0MDk2KTsK LQkJCWRybV9pbnRlbF9ib191bm1hcChibyk7CisJCQlpbnRlbF9idWZfY3B1X21hcChkc3RfYnVm LCB0cnVlIC8qIHdyaXRlIGVuYWJsZSAqLyk7CisJCQltZW1zZXQoZHN0X2J1Zi0+cHRyLCAweDgw LCA0MDk2KTsKKwkJCWludGVsX2J1Zl91bm1hcChkc3RfYnVmKTsKIAotCQkJZW1pdF9zdGFsbF90 aW1lc3RhbXBfYW5kX3JwYyhiYXRjaCwKLQkJCQkJCSAgICAgYm8sCisJCQllbWl0X3N0YWxsX3Rp bWVzdGFtcF9hbmRfcnBjKGliYjAsCisJCQkJCQkgICAgIGRzdF9idWYsCiAJCQkJCQkgICAgIDUx MiAvKiB0aW1lc3RhbXAgb2Zmc2V0ICovLAogCQkJCQkJICAgICAwLCAvKiByZXBvcnQgZHN0IG9m ZnNldCAqLwogCQkJCQkJICAgICAweGRlYWRiZWVmKTsgLyogcmVwb3J0IGlkICovCkBAIC0zNTAx LDQ5ICszNDA1LDQ2IEBAIGdlbjhfdGVzdF9zaW5nbGVfY3R4X3JlbmRlcl90YXJnZXRfd3JpdGVz X2FfY291bnRlcih2b2lkKQogCQkJICogdGhhdCB0aGUgUElQRV9DT05UUk9MICsgTUlfUlBDIGNv bW1hbmRzIHdpbGwgYmUgaW4gYQogCQkJICogc2VwYXJhdGUgYmF0Y2ggZnJvbSB0aGUgY29weS4K IAkJCSAqLwotCQkJaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfd2l0aF9jb250ZXh0KGJhdGNoLCBj b250ZXh0MCk7CisJCQlpbnRlbF9iYl9mbHVzaF9yZW5kZXJfd2l0aF9jb250ZXh0KGliYjAsIGNv bnRleHQwX2lkKTsKIAotCQkJcmVuZGVyX2NvcHkoYmF0Y2gsCi0JCQkJICAgIGNvbnRleHQwLAor CQkJcmVuZGVyX2NvcHkoaWJiMCwKKwkJCQkgICAgY29udGV4dDBfaWQsCiAJCQkJICAgICZzcmNb MF0sIDAsIDAsIHdpZHRoLCBoZWlnaHQsCiAJCQkJICAgICZkc3RbMF0sIDAsIDApOwogCiAJCQkv KiBBbm90aGVyIHJlZHVuZGFudCBmbHVzaCB0byBjbGFyaWZ5IGJhdGNoIGJvIGlzIGZyZWUgdG8g cmV1c2UgKi8KLQkJCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX3dpdGhfY29udGV4dChiYXRjaCwg Y29udGV4dDApOworCQkJaW50ZWxfYmJfZmx1c2hfcmVuZGVyX3dpdGhfY29udGV4dChpYmIwLCBj b250ZXh0MF9pZCk7CiAKIAkJCS8qIHN1Ym1pdCB0d28gY29waWVzIG9uIHRoZSBvdGhlciBjb250 ZXh0IHRvIGF2b2lkIGEgZmFsc2UKIAkJCSAqIHBvc2l0aXZlIGluIGNhc2UgdGhlIGRyaXZlciBz b21laG93IGVuZGVkIHVwIGZpbHRlcmluZyBmb3IKIAkJCSAqIGNvbnRleHQxCiAJCQkgKi8KLQkJ CXJlbmRlcl9jb3B5KGJhdGNoLAotCQkJCSAgICBjb250ZXh0MSwKKwkJCXJlbmRlcl9jb3B5KGli YjEsCisJCQkJICAgIGNvbnRleHQxX2lkLAogCQkJCSAgICAmc3JjWzFdLCAwLCAwLCB3aWR0aCwg aGVpZ2h0LAogCQkJCSAgICAmZHN0WzFdLCAwLCAwKTsKIAotCQkJcmV0ID0gZHJtX2ludGVsX2dl bV9jb250ZXh0X2dldF9pZChjb250ZXh0MSwgJmN0eDFfaWQpOwotCQkJaWd0X2Fzc2VydF9lcShy ZXQsIDApOwotCQkJaWd0X2Fzc2VydF9uZXEoY3R4MV9pZCwgMHhmZmZmZmZmZik7Ci0KLQkJCXJl bmRlcl9jb3B5KGJhdGNoLAotCQkJCSAgICBjb250ZXh0MSwKKwkJCXJlbmRlcl9jb3B5KGliYjEs CisJCQkJICAgIGNvbnRleHQxX2lkLAogCQkJCSAgICAmc3JjWzJdLCAwLCAwLCB3aWR0aCwgaGVp Z2h0LAogCQkJCSAgICAmZHN0WzJdLCAwLCAwKTsKIAogCQkJLyogQW5kIGFub3RoZXIgKi8KLQkJ CWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX3dpdGhfY29udGV4dChiYXRjaCwgY29udGV4dDEpOwor CQkJaW50ZWxfYmJfZmx1c2hfcmVuZGVyX3dpdGhfY29udGV4dChpYmIxLCBjb250ZXh0MV9pZCk7 CiAKLQkJCWVtaXRfc3RhbGxfdGltZXN0YW1wX2FuZF9ycGMoYmF0Y2gsCi0JCQkJCQkgICAgIGJv LAorCQkJZW1pdF9zdGFsbF90aW1lc3RhbXBfYW5kX3JwYyhpYmIxLAorCQkJCQkJICAgICBkc3Rf YnVmLAogCQkJCQkJICAgICA1MjAgLyogdGltZXN0YW1wIG9mZnNldCAqLywKIAkJCQkJCSAgICAg MjU2LCAvKiByZXBvcnQgZHN0IG9mZnNldCAqLwogCQkJCQkJICAgICAweGJlZWZiZWVmKTsgLyog cmVwb3J0IGlkICovCiAKLQkJCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX3dpdGhfY29udGV4dChi YXRjaCwgY29udGV4dDEpOworCQkJaW50ZWxfYmJfZmx1c2hfcmVuZGVyX3dpdGhfY29udGV4dChp YmIxLCBjb250ZXh0MV9pZCk7CisJCQlpbnRlbF9iYl9zeW5jKGliYjEpOworCQkJaW50ZWxfYmJf c3luYyhpYmIwKTsKIAotCQkJcmV0ID0gZHJtX2ludGVsX2JvX21hcChibywgZmFsc2UgLyogd3Jp dGUgZW5hYmxlICovKTsKLQkJCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKwkJCWludGVsX2J1Zl9j cHVfbWFwKGRzdF9idWYsIGZhbHNlIC8qIHdyaXRlIGVuYWJsZSAqLyk7CiAKLQkJCXJlcG9ydDBf MzIgPSBiby0+dmlydHVhbDsKKwkJCXJlcG9ydDBfMzIgPSBkc3RfYnVmLT5wdHI7CiAJCQlpZ3Rf YXNzZXJ0X2VxKHJlcG9ydDBfMzJbMF0sIDB4ZGVhZGJlZWYpOyAvKiByZXBvcnQgSUQgKi8KIAkJ CWlndF9hc3NlcnRfbmVxKHJlcG9ydDBfMzJbMV0sIDApOyAvKiB0aW1lc3RhbXAgKi8KIAkJCXBy ZXYgPSByZXBvcnQwXzMyOwpAQCAtMzU1NSw2ICszNDU2LDcgQEAgZ2VuOF90ZXN0X3NpbmdsZV9j dHhfcmVuZGVyX3RhcmdldF93cml0ZXNfYV9jb3VudGVyKHZvaWQpCiAJCQlpZ3RfYXNzZXJ0X2Vx KHJlcG9ydDFfMzJbMF0sIDB4YmVlZmJlZWYpOyAvKiByZXBvcnQgSUQgKi8KIAkJCWlndF9hc3Nl cnRfbmVxKHJlcG9ydDFfMzJbMV0sIDApOyAvKiB0aW1lc3RhbXAgKi8KIAkJCWN0eDFfaWQgPSBy ZXBvcnQxXzMyWzJdOworCQkJaWd0X2RlYnVnKCJDVFgxIElEOiAldVxuIiwgY3R4MV9pZCk7CiAJ CQlkdW1wX3JlcG9ydChyZXBvcnQxXzMyLCA2NCwgInJlcG9ydDFfMzIiKTsKIAogCQkJbWVtc2V0 KGFjY3VtdWxhdG9yLmRlbHRhcywgMCwgc2l6ZW9mKGFjY3VtdWxhdG9yLmRlbHRhcykpOwpAQCAt MzU2OSw4ICszNDcxLDggQEAgZ2VuOF90ZXN0X3NpbmdsZV9jdHhfcmVuZGVyX3RhcmdldF93cml0 ZXNfYV9jb3VudGVyKHZvaWQpCiAJCQlpZ3RfZGVidWcoImN0eF9pZCAwID0gJXVcbiIsIHJlcG9y dDBfMzJbMl0pOwogCQkJaWd0X2RlYnVnKCJjdHhfaWQgMSA9ICV1XG4iLCByZXBvcnQxXzMyWzJd KTsKIAotCQkJdGltZXN0YW1wMF82NCA9ICoodWludDY0X3QgKikoKCh1aW50OF90ICopYm8tPnZp cnR1YWwpICsgNTEyKTsKLQkJCXRpbWVzdGFtcDFfNjQgPSAqKHVpbnQ2NF90ICopKCgodWludDhf dCAqKWJvLT52aXJ0dWFsKSArIDUyMCk7CisJCQl0aW1lc3RhbXAwXzY0ID0gKih1aW50NjRfdCAq KSgoKHVpbnQ4X3QgKilkc3RfYnVmLT5wdHIpICsgNTEyKTsKKwkJCXRpbWVzdGFtcDFfNjQgPSAq KHVpbnQ2NF90ICopKCgodWludDhfdCAqKWRzdF9idWYtPnB0cikgKyA1MjApOwogCiAJCQlpZ3Rf ZGVidWcoInRzX3RpbWVzdGFtcDY0IDAgPSAlIlBSSXU2NCJcbiIsIHRpbWVzdGFtcDBfNjQpOwog CQkJaWd0X2RlYnVnKCJ0c190aW1lc3RhbXA2NCAxID0gJSJQUkl1NjQiXG4iLCB0aW1lc3RhbXAx XzY0KTsKQEAgLTM3NTgsMjcgKzM2NjAsMjYgQEAgZ2VuOF90ZXN0X3NpbmdsZV9jdHhfcmVuZGVy X3RhcmdldF93cml0ZXNfYV9jb3VudGVyKHZvaWQpCiAJCQkJICB3aWR0aCwgaGVpZ2h0KTsKIAkJ CWFjY3VtdWxhdG9yX3ByaW50KCZhY2N1bXVsYXRvciwgImZpbHRlcmVkIik7CiAKLQkJCXJldCA9 IGRybV9pbnRlbF9ib19tYXAoc3JjWzBdLmJvLCBmYWxzZSAvKiB3cml0ZSBlbmFibGUgKi8pOwot CQkJaWd0X2Fzc2VydF9lcShyZXQsIDApOwotCQkJcmV0ID0gZHJtX2ludGVsX2JvX21hcChkc3Rb MF0uYm8sIGZhbHNlIC8qIHdyaXRlIGVuYWJsZSAqLyk7Ci0JCQlpZ3RfYXNzZXJ0X2VxKHJldCwg MCk7CisJCQlpbnRlbF9idWZfY3B1X21hcCgmc3JjWzBdLCBmYWxzZSAvKiB3cml0ZSBlbmFibGUg Ki8pOworCQkJaW50ZWxfYnVmX2NwdV9tYXAoJmRzdFswXSwgZmFsc2UgLyogd3JpdGUgZW5hYmxl ICovKTsKIAotCQkJcmV0ID0gbWVtY21wKHNyY1swXS5iby0+dmlydHVhbCwgZHN0WzBdLmJvLT52 aXJ0dWFsLCA0ICogd2lkdGggKiBoZWlnaHQpOwotCQkJZHJtX2ludGVsX2JvX3VubWFwKHNyY1sw XS5ibyk7Ci0JCQlkcm1faW50ZWxfYm9fdW5tYXAoZHN0WzBdLmJvKTsKKwkJCXJldCA9IG1lbWNt cChzcmNbMF0ucHRyLCBkc3RbMF0ucHRyLCA0ICogd2lkdGggKiBoZWlnaHQpOworCQkJaW50ZWxf YnVmX3VubWFwKCZzcmNbMF0pOworCQkJaW50ZWxfYnVmX3VubWFwKCZkc3RbMF0pOwogCiBhZ2Fp bjoKIAkJCWZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcmMpOyBpKyspIHsKLQkJCQlk cm1faW50ZWxfYm9fdW5yZWZlcmVuY2Uoc3JjW2ldLmJvKTsKLQkJCQlkcm1faW50ZWxfYm9fdW5y ZWZlcmVuY2UoZHN0W2ldLmJvKTsKKwkJCQlpbnRlbF9idWZfY2xvc2UoYm9wcywgJnNyY1tpXSk7 CisJCQkJaW50ZWxfYnVmX2Nsb3NlKGJvcHMsICZkc3RbaV0pOwogCQkJfQogCi0JCQlkcm1faW50 ZWxfYm9fdW5tYXAoYm8pOwotCQkJZHJtX2ludGVsX2JvX3VucmVmZXJlbmNlKGJvKTsKLQkJCWlu dGVsX2JhdGNoYnVmZmVyX2ZyZWUoYmF0Y2gpOwotCQkJZHJtX2ludGVsX2dlbV9jb250ZXh0X2Rl c3Ryb3koY29udGV4dDApOwotCQkJZHJtX2ludGVsX2dlbV9jb250ZXh0X2Rlc3Ryb3koY29udGV4 dDEpOwotCQkJZHJtX2ludGVsX2J1Zm1ncl9kZXN0cm95KGJ1Zm1ncik7CisJCQlpbnRlbF9idWZf dW5tYXAoZHN0X2J1Zik7CisJCQlpbnRlbF9idWZfZGVzdHJveShkc3RfYnVmKTsKKwkJCWludGVs X2JiX2Rlc3Ryb3koaWJiMCk7CisJCQlpbnRlbF9iYl9kZXN0cm95KGliYjEpOworCQkJZ2VtX2Nv bnRleHRfZGVzdHJveShkcm1fZmQsIGNvbnRleHQwX2lkKTsKKwkJCWdlbV9jb250ZXh0X2Rlc3Ry b3koZHJtX2ZkLCBjb250ZXh0MV9pZCk7CisJCQlidWZfb3BzX2Rlc3Ryb3koYm9wcyk7CiAJCQlf X3BlcmZfY2xvc2Uoc3RyZWFtX2ZkKTsKIAkJCWdlbV9xdWllc2NlbnRfZ3B1KGRybV9mZCk7CiAK QEAgLTM4MjUsMTEgKzM3MjYsMTAgQEAgc3RhdGljIHZvaWQgZ2VuMTJfc2luZ2xlX2N0eF9oZWxw ZXIodm9pZCkKIAkJLm51bV9wcm9wZXJ0aWVzID0gQVJSQVlfU0laRShwcm9wZXJ0aWVzKSAvIDIs CiAJCS5wcm9wZXJ0aWVzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihwcm9wZXJ0aWVzKSwKIAl9Owot CWRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1ncjsKLQlkcm1faW50ZWxfY29udGV4dCAqY29udGV4dDAs ICpjb250ZXh0MTsKLQlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoOwotCXN0cnVjdCBp Z3RfYnVmIHNyY1szXSwgZHN0WzNdOwotCWRybV9pbnRlbF9ibyAqYm87CisJc3RydWN0IGJ1Zl9v cHMgKmJvcHM7CisJc3RydWN0IGludGVsX2JiICppYmIwLCAqaWJiMTsKKwlzdHJ1Y3QgaW50ZWxf YnVmIHNyY1szXSwgZHN0WzNdLCAqZHN0X2J1ZjsKKwl1aW50MzJfdCBjb250ZXh0MF9pZCwgY29u dGV4dDFfaWQ7CiAJdWludDMyX3QgKnJlcG9ydDBfMzIsICpyZXBvcnQxXzMyLCAqcmVwb3J0Ml8z MiwgKnJlcG9ydDNfMzI7CiAJdWludDY0X3QgdGltZXN0YW1wMF82NCwgdGltZXN0YW1wMV82NDsK IAl1aW50MzJfdCBkZWx0YV90czY0LCBkZWx0YV9vYTMyOwpAQCAtMzg0NSwyMSArMzc0NSwxNyBA QCBzdGF0aWMgdm9pZCBnZW4xMl9zaW5nbGVfY3R4X2hlbHBlcih2b2lkKQogCQkuZm9ybWF0ID0g dGVzdF9zZXQtPnBlcmZfb2FfZm9ybWF0CiAJfTsKIAotCWJ1Zm1nciA9IGRybV9pbnRlbF9idWZt Z3JfZ2VtX2luaXQoZHJtX2ZkLCA0MDk2KTsKLQlkcm1faW50ZWxfYnVmbWdyX2dlbV9lbmFibGVf cmV1c2UoYnVmbWdyKTsKKwlib3BzID0gYnVmX29wc19jcmVhdGUoZHJtX2ZkKTsKIAogCWZvciAo aW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcmMpOyBpKyspIHsKLQkJc2NyYXRjaF9idWZfaW5p dChidWZtZ3IsICZzcmNbaV0sIHdpZHRoLCBoZWlnaHQsIDB4ZmYwMDAwZmYpOwotCQlzY3JhdGNo X2J1Zl9pbml0KGJ1Zm1nciwgJmRzdFtpXSwgd2lkdGgsIGhlaWdodCwgMHgwMGZmMDBmZik7CisJ CXNjcmF0Y2hfYnVmX2luaXQoYm9wcywgJnNyY1tpXSwgd2lkdGgsIGhlaWdodCwgMHhmZjAwMDBm Zik7CisJCXNjcmF0Y2hfYnVmX2luaXQoYm9wcywgJmRzdFtpXSwgd2lkdGgsIGhlaWdodCwgMHgw MGZmMDBmZik7CiAJfQogCi0JYmF0Y2ggPSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGxvYyhidWZtZ3Is IGRldmlkKTsKLQotCWNvbnRleHQwID0gZHJtX2ludGVsX2dlbV9jb250ZXh0X2NyZWF0ZShidWZt Z3IpOwotCWlndF9hc3NlcnQoY29udGV4dDApOwotCi0JY29udGV4dDEgPSBkcm1faW50ZWxfZ2Vt X2NvbnRleHRfY3JlYXRlKGJ1Zm1ncik7Ci0JaWd0X2Fzc2VydChjb250ZXh0MSk7CisJaWJiMCA9 IGludGVsX2JiX2NyZWF0ZShkcm1fZmQsIEJBVENIX1NaKTsKKwlpYmIxID0gaW50ZWxfYmJfY3Jl YXRlKGRybV9mZCwgQkFUQ0hfU1opOworCWNvbnRleHQwX2lkID0gZ2VtX2NvbnRleHRfY3JlYXRl KGRybV9mZCk7CisJY29udGV4dDFfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZHJtX2ZkKTsKIAog CWlndF9kZWJ1Zygic3VibWl0dGluZyB3YXJtIHVwIHJlbmRlcl9jb3B5XG4iKTsKIApAQCAtMzg4 Myw0NCArMzc3OSw0MiBAQCBzdGF0aWMgdm9pZCBnZW4xMl9zaW5nbGVfY3R4X2hlbHBlcih2b2lk KQogCSAqIHVwIHBpbm5pbmcgdGhlIGNvbnRleHQgc2luY2UgdGhlcmUgd29uJ3QgZXZlciBiZSBh IHBpbm5pbmcKIAkgKiBob29rIGNhbGxiYWNrLgogCSAqLwotCXJlbmRlcl9jb3B5KGJhdGNoLCBj b250ZXh0MCwKKwlyZW5kZXJfY29weShpYmIwLCBjb250ZXh0MF9pZCwKIAkJICAgICZzcmNbMF0s IDAsIDAsIHdpZHRoLCBoZWlnaHQsCiAJCSAgICAmZHN0WzBdLCAwLCAwKTsKIAogCS8qIEluaXRp YWxpemUgdGhlIGNvbnRleHQgcGFyYW1ldGVyIHRvIHRoZSBwZXJmIG9wZW4gaW9jdGwgaGVyZSAq LwotCXJldCA9IGRybV9pbnRlbF9nZW1fY29udGV4dF9nZXRfaWQoY29udGV4dDAsICZjdHgwX2lk KTsKLQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Ci0JaWd0X2Fzc2VydF9uZXEoY3R4MF9pZCwgMHhm ZmZmZmZmZik7Ci0JcHJvcGVydGllc1sxXSA9IGN0eDBfaWQ7CisJcHJvcGVydGllc1sxXSA9IGNv bnRleHQwX2lkOwogCiAJaWd0X2RlYnVnKCJvcGVuaW5nIGk5MTUtcGVyZiBzdHJlYW1cbiIpOwog CXN0cmVhbV9mZCA9IF9fcGVyZl9vcGVuKGRybV9mZCwgJnBhcmFtLCBmYWxzZSk7CiAKLQlibyA9 IGRybV9pbnRlbF9ib19hbGxvYyhidWZtZ3IsICJtaV9ycGMgZGVzdCBibyIsIDQwOTYsIDY0KTsK Kwlkc3RfYnVmID0gaW50ZWxfYnVmX2NyZWF0ZShib3BzLCA0MDk2LCAxLCA4LCA2NCwKKwkJCQkg ICBJOTE1X1RJTElOR19OT05FLAorCQkJCSAgIEk5MTVfQ09NUFJFU1NJT05fTk9ORSk7CiAKIAkv KiBTZXQgd3JpdGUgZG9tYWluIHRvIGNwdSBicmllZmx5IHRvIGZpbGwgdGhlIGJ1ZmZlciB3aXRo IDgwcyAqLwotCXJldCA9IGRybV9pbnRlbF9ib19tYXAoYm8sIHRydWUpOwotCWlndF9hc3NlcnRf ZXEocmV0LCAwKTsKLQltZW1zZXQoYm8tPnZpcnR1YWwsIDB4ODAsIDIwNDgpOwotCW1lbXNldChi by0+dmlydHVhbCArIDIwNDgsIDAsIDIwNDgpOwotCWRybV9pbnRlbF9ib191bm1hcChibyk7CisJ aW50ZWxfYnVmX2NwdV9tYXAoZHN0X2J1ZiwgdHJ1ZSAvKiB3cml0ZSBlbmFibGUgKi8pOworCW1l bXNldChkc3RfYnVmLT5wdHIsIDB4ODAsIDIwNDgpOworCW1lbXNldCgodWludDhfdCAqKSBkc3Rf YnVmLT5wdHIgKyAyMDQ4LCAwLCAyMDQ4KTsKKwlpbnRlbF9idWZfdW5tYXAoZHN0X2J1Zik7CiAK IAkvKiBTdWJtaXQgYW4gbWktcnBjIHRvIGNvbnRleHQwIGJlZm9yZSBtZWFzdXJhYmxlIHdvcmsg Ki8KICNkZWZpbmUgQk9fVElNRVNUQU1QX09GRlNFVDAgMTAyNAogI2RlZmluZSBCT19SRVBPUlRf T0ZGU0VUMCAwCiAjZGVmaW5lIEJPX1JFUE9SVF9JRDAgMHhkZWFkYmVlZgotCWVtaXRfc3RhbGxf dGltZXN0YW1wX2FuZF9ycGMoYmF0Y2gsCi0JCQkJICAgICBibywKKwllbWl0X3N0YWxsX3RpbWVz dGFtcF9hbmRfcnBjKGliYjAsCisJCQkJICAgICBkc3RfYnVmLAogCQkJCSAgICAgQk9fVElNRVNU QU1QX09GRlNFVDAsCiAJCQkJICAgICBCT19SRVBPUlRfT0ZGU0VUMCwKIAkJCQkgICAgIEJPX1JF UE9SVF9JRDApOwotCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX3dpdGhfY29udGV4dChiYXRjaCwg Y29udGV4dDApOworCWludGVsX2JiX2ZsdXNoX3JlbmRlcl93aXRoX2NvbnRleHQoaWJiMCwgY29u dGV4dDBfaWQpOwogCiAJLyogVGhpcyBpcyB0aGUgd29yay9jb250ZXh0IHRoYXQgaXMgbWVhc3Vy ZWQgZm9yIGNvdW50ZXIgaW5jcmVtZW50cyAqLwotCXJlbmRlcl9jb3B5KGJhdGNoLCBjb250ZXh0 MCwKKwlyZW5kZXJfY29weShpYmIwLCBjb250ZXh0MF9pZCwKIAkJICAgICZzcmNbMF0sIDAsIDAs IHdpZHRoLCBoZWlnaHQsCiAJCSAgICAmZHN0WzBdLCAwLCAwKTsKLQlpbnRlbF9iYXRjaGJ1ZmZl cl9mbHVzaF93aXRoX2NvbnRleHQoYmF0Y2gsIGNvbnRleHQwKTsKKwlpbnRlbF9iYl9mbHVzaF9y ZW5kZXJfd2l0aF9jb250ZXh0KGliYjAsIGNvbnRleHQwX2lkKTsKIAogCS8qIFN1Ym1pdCBhbiBt aS1ycGMgdG8gY29udGV4dDEgYmVmb3JlIHdvcmsKIAkgKgpAQCAtMzkzMSw1NCArMzgyNSw1MSBA QCBzdGF0aWMgdm9pZCBnZW4xMl9zaW5nbGVfY3R4X2hlbHBlcih2b2lkKQogI2RlZmluZSBCT19U SU1FU1RBTVBfT0ZGU0VUMiAxMDQwCiAjZGVmaW5lIEJPX1JFUE9SVF9PRkZTRVQyIDUxMgogI2Rl ZmluZSBCT19SRVBPUlRfSUQyIDB4MDBjMGZmZWUKLQllbWl0X3N0YWxsX3RpbWVzdGFtcF9hbmRf cnBjKGJhdGNoLAotCQkJCSAgICAgYm8sCisJZW1pdF9zdGFsbF90aW1lc3RhbXBfYW5kX3JwYyhp YmIxLAorCQkJCSAgICAgZHN0X2J1ZiwKIAkJCQkgICAgIEJPX1RJTUVTVEFNUF9PRkZTRVQyLAog CQkJCSAgICAgQk9fUkVQT1JUX09GRlNFVDIsCiAJCQkJICAgICBCT19SRVBPUlRfSUQyKTsKLQlp bnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQoYmF0Y2gsIGNvbnRleHQxKTsKKwlp bnRlbF9iYl9mbHVzaF9yZW5kZXJfd2l0aF9jb250ZXh0KGliYjEsIGNvbnRleHQxX2lkKTsKIAog CS8qIFN1Ym1pdCB0d28gY29waWVzIG9uIHRoZSBvdGhlciBjb250ZXh0IHRvIGF2b2lkIGEgZmFs c2UKIAkgKiBwb3NpdGl2ZSBpbiBjYXNlIHRoZSBkcml2ZXIgc29tZWhvdyBlbmRlZCB1cCBmaWx0 ZXJpbmcgZm9yCiAJICogY29udGV4dDEKIAkgKi8KLQlyZW5kZXJfY29weShiYXRjaCwgY29udGV4 dDEsCisJcmVuZGVyX2NvcHkoaWJiMSwgY29udGV4dDFfaWQsCiAJCSAgICAmc3JjWzFdLCAwLCAw LCB3aWR0aCwgaGVpZ2h0LAogCQkgICAgJmRzdFsxXSwgMCwgMCk7Ci0JcmV0ID0gZHJtX2ludGVs X2dlbV9jb250ZXh0X2dldF9pZChjb250ZXh0MSwgJmN0eDFfaWQpOwotCWlndF9hc3NlcnRfZXEo cmV0LCAwKTsKLQlpZ3RfYXNzZXJ0X25lcShjdHgxX2lkLCAweGZmZmZmZmZmKTsKIAotCXJlbmRl cl9jb3B5KGJhdGNoLCBjb250ZXh0MSwKKwlyZW5kZXJfY29weShpYmIxLCBjb250ZXh0MV9pZCwK IAkJICAgICZzcmNbMl0sIDAsIDAsIHdpZHRoLCBoZWlnaHQsCiAJCSAgICAmZHN0WzJdLCAwLCAw KTsKLQlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQoYmF0Y2gsIGNvbnRleHQx KTsKKwlpbnRlbF9iYl9mbHVzaF9yZW5kZXJfd2l0aF9jb250ZXh0KGliYjEsIGNvbnRleHQxX2lk KTsKIAogCS8qIFN1Ym1pdCBhbiBtaS1ycGMgdG8gY29udGV4dDEgYWZ0ZXIgYWxsIHdvcmsgKi8K ICNkZWZpbmUgQk9fVElNRVNUQU1QX09GRlNFVDMgMTA0OAogI2RlZmluZSBCT19SRVBPUlRfT0ZG U0VUMyA3NjgKICNkZWZpbmUgQk9fUkVQT1JUX0lEMyAweDAxYzBmZmVlCi0JZW1pdF9zdGFsbF90 aW1lc3RhbXBfYW5kX3JwYyhiYXRjaCwKLQkJCQkgICAgIGJvLAorCWVtaXRfc3RhbGxfdGltZXN0 YW1wX2FuZF9ycGMoaWJiMSwKKwkJCQkgICAgIGRzdF9idWYsCiAJCQkJICAgICBCT19USU1FU1RB TVBfT0ZGU0VUMywKIAkJCQkgICAgIEJPX1JFUE9SVF9PRkZTRVQzLAogCQkJCSAgICAgQk9fUkVQ T1JUX0lEMyk7Ci0JaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfd2l0aF9jb250ZXh0KGJhdGNoLCBj b250ZXh0MSk7CisJaW50ZWxfYmJfZmx1c2hfcmVuZGVyX3dpdGhfY29udGV4dChpYmIxLCBjb250 ZXh0MV9pZCk7CiAKIAkvKiBTdWJtaXQgYW4gbWktcnBjIHRvIGNvbnRleHQwIGFmdGVyIGFsbCBt ZWFzdXJhYmxlIHdvcmsgKi8KICNkZWZpbmUgQk9fVElNRVNUQU1QX09GRlNFVDEgMTAzMgogI2Rl ZmluZSBCT19SRVBPUlRfT0ZGU0VUMSAyNTYKICNkZWZpbmUgQk9fUkVQT1JUX0lEMSAweGJlZWZi ZWVmCi0JZW1pdF9zdGFsbF90aW1lc3RhbXBfYW5kX3JwYyhiYXRjaCwKLQkJCQkgICAgIGJvLAor CWVtaXRfc3RhbGxfdGltZXN0YW1wX2FuZF9ycGMoaWJiMCwKKwkJCQkgICAgIGRzdF9idWYsCiAJ CQkJICAgICBCT19USU1FU1RBTVBfT0ZGU0VUMSwKIAkJCQkgICAgIEJPX1JFUE9SVF9PRkZTRVQx LAogCQkJCSAgICAgQk9fUkVQT1JUX0lEMSk7Ci0JaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfd2l0 aF9jb250ZXh0KGJhdGNoLCBjb250ZXh0MCk7CisJaW50ZWxfYmJfZmx1c2hfcmVuZGVyX3dpdGhf Y29udGV4dChpYmIwLCBjb250ZXh0MF9pZCk7CisJaW50ZWxfYmJfc3luYyhpYmIwKTsKKwlpbnRl bF9iYl9zeW5jKGliYjEpOwogCi0JLyogU2V0IHdyaXRlIGRvbWFpbiB0byBub25lICovCi0JcmV0 ID0gZHJtX2ludGVsX2JvX21hcChibywgZmFsc2UpOwotCWlndF9hc3NlcnRfZXEocmV0LCAwKTsK KwlpbnRlbF9idWZfY3B1X21hcChkc3RfYnVmLCBmYWxzZSk7CiAKIAkvKiBTYW5pdHkgY2hlY2sg cmVwb3J0cwogCSAqIHJlcG9ydFhfMzJbMF06IHJlcG9ydCBpZCBwYXNzZWQgd2l0aCBtaS1ycGMK QEAgLTM5OTAsNyArMzg4MSw3IEBAIHN0YXRpYyB2b2lkIGdlbjEyX3NpbmdsZV9jdHhfaGVscGVy KHZvaWQpCiAJICogcmVwb3J0Ml8zMjogc3RhcnQgb2Ygb3RoZXIgd29yawogCSAqIHJlcG9ydDNf MzI6IGVuZCBvZiBvdGhlciB3b3JrCiAJICovCi0JcmVwb3J0MF8zMiA9IGJvLT52aXJ0dWFsOwor CXJlcG9ydDBfMzIgPSBkc3RfYnVmLT5wdHI7CiAJaWd0X2Fzc2VydF9lcShyZXBvcnQwXzMyWzBd LCAweGRlYWRiZWVmKTsKIAlpZ3RfYXNzZXJ0X25lcShyZXBvcnQwXzMyWzFdLCAwKTsKIAljdHgw X2lkID0gcmVwb3J0MF8zMlsyXTsKQEAgLTQwMDEsNiArMzg5Miw3IEBAIHN0YXRpYyB2b2lkIGdl bjEyX3NpbmdsZV9jdHhfaGVscGVyKHZvaWQpCiAJaWd0X2Fzc2VydF9lcShyZXBvcnQxXzMyWzBd LCAweGJlZWZiZWVmKTsKIAlpZ3RfYXNzZXJ0X25lcShyZXBvcnQxXzMyWzFdLCAwKTsKIAljdHgx X2lkID0gcmVwb3J0MV8zMlsyXTsKKwlpZ3RfZGVidWcoIkNUWCBJRDE6ICV1XG4iLCBjdHgxX2lk KTsKIAlkdW1wX3JlcG9ydChyZXBvcnQxXzMyLCA2NCwgInJlcG9ydDFfMzIiKTsKIAogCS8qIFZl cmlmeSB0aGF0IGNvdW50ZXJzIGluIGNvbnRleHQxIGFyZSBhbGwgemVyb2VzICovCkBAIC00MDA5 LDcgKzM5MDEsNyBAQCBzdGF0aWMgdm9pZCBnZW4xMl9zaW5nbGVfY3R4X2hlbHBlcih2b2lkKQog CWlndF9hc3NlcnRfbmVxKHJlcG9ydDJfMzJbMV0sIDApOwogCWR1bXBfcmVwb3J0KHJlcG9ydDJf MzIsIDY0LCAicmVwb3J0Ml8zMiIpOwogCWlndF9hc3NlcnRfZXEoMCwgbWVtY21wKCZyZXBvcnQy XzMyWzRdLAotCQkJCWJvLT52aXJ0dWFsICsgMjA0OCwKKwkJCQkodWludDhfdCAqKSBkc3RfYnVm LT5wdHIgKyAyMDQ4LAogCQkJCTI0MCkpOwogCiAJcmVwb3J0M18zMiA9IHJlcG9ydDBfMzIgKyAx OTI7CkBAIC00MDE3LDcgKzM5MDksNyBAQCBzdGF0aWMgdm9pZCBnZW4xMl9zaW5nbGVfY3R4X2hl bHBlcih2b2lkKQogCWlndF9hc3NlcnRfbmVxKHJlcG9ydDNfMzJbMV0sIDApOwogCWR1bXBfcmVw b3J0KHJlcG9ydDNfMzIsIDY0LCAicmVwb3J0M18zMiIpOwogCWlndF9hc3NlcnRfZXEoMCwgbWVt Y21wKCZyZXBvcnQzXzMyWzRdLAotCQkJCWJvLT52aXJ0dWFsICsgMjA0OCwKKwkJCQkodWludDhf dCAqKSBkc3RfYnVmLT5wdHIgKyAyMDQ4LAogCQkJCTI0MCkpOwogCiAJLyogQWNjdW11bGF0ZSBk ZWx0YXMgZm9yIGNvdW50ZXJzIC0gQTAsIEEyMSBhbmQgQTI2ICovCkBAIC00MDM3LDggKzM5Mjks OCBAQCBzdGF0aWMgdm9pZCBnZW4xMl9zaW5nbGVfY3R4X2hlbHBlcih2b2lkKQogCSAqIHRoZSBP QSByZXBvcnQgdGltZXN0YW1wcyBzaG91bGQgYmUgYWxtb3N0IGlkZW50aWNhbCBidXQKIAkgKiBh bGxvdyBhIDUwMCBuYW5vc2Vjb25kcyBtYXJnaW4uCiAJICovCi0JdGltZXN0YW1wMF82NCA9ICoo dWludDY0X3QgKikoKCh1aW50OF90ICopYm8tPnZpcnR1YWwpICsgQk9fVElNRVNUQU1QX09GRlNF VDApOwotCXRpbWVzdGFtcDFfNjQgPSAqKHVpbnQ2NF90ICopKCgodWludDhfdCAqKWJvLT52aXJ0 dWFsKSArIEJPX1RJTUVTVEFNUF9PRkZTRVQxKTsKKwl0aW1lc3RhbXAwXzY0ID0gKih1aW50NjRf dCAqKSgoKHVpbnQ4X3QgKilkc3RfYnVmLT5wdHIpICsgQk9fVElNRVNUQU1QX09GRlNFVDApOwor CXRpbWVzdGFtcDFfNjQgPSAqKHVpbnQ2NF90ICopKCgodWludDhfdCAqKWRzdF9idWYtPnB0cikg KyBCT19USU1FU1RBTVBfT0ZGU0VUMSk7CiAKIAlpZ3RfZGVidWcoInRzX3RpbWVzdGFtcDY0IDAg PSAlIlBSSXU2NCJcbiIsIHRpbWVzdGFtcDBfNjQpOwogCWlndF9kZWJ1ZygidHNfdGltZXN0YW1w NjQgMSA9ICUiUFJJdTY0IlxuIiwgdGltZXN0YW1wMV82NCk7CkBAIC00MDczLDIwICszOTY1LDE4 IEBAIHN0YXRpYyB2b2lkIGdlbjEyX3NpbmdsZV9jdHhfaGVscGVyKHZvaWQpCiAJLyogVmVyaWZ5 IHRoYXQgdGhlIHdvcmsgYWN0dWFsbHkgaGFwcGVuZWQgYnkgY29tcGFyaW5nIHRoZSBzcmMKIAkg KiBhbmQgZHN0IGJ1ZmZlcnMKIAkgKi8KLQlyZXQgPSBkcm1faW50ZWxfYm9fbWFwKHNyY1swXS5i bywgZmFsc2UpOwotCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKLQlyZXQgPSBkcm1faW50ZWxfYm9f bWFwKGRzdFswXS5ibywgZmFsc2UpOwotCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKwlpbnRlbF9i dWZfY3B1X21hcCgmc3JjWzBdLCBmYWxzZSk7CisJaW50ZWxfYnVmX2NwdV9tYXAoJmRzdFswXSwg ZmFsc2UpOworCisJcmV0ID0gbWVtY21wKHNyY1swXS5wdHIsIGRzdFswXS5wdHIsIDQgKiB3aWR0 aCAqIGhlaWdodCk7CisJaW50ZWxfYnVmX3VubWFwKCZzcmNbMF0pOworCWludGVsX2J1Zl91bm1h cCgmZHN0WzBdKTsKIAotCXJldCA9IG1lbWNtcChzcmNbMF0uYm8tPnZpcnR1YWwsIGRzdFswXS5i by0+dmlydHVhbCwgNCAqIHdpZHRoICogaGVpZ2h0KTsKIAlpZiAocmV0ICE9IDApIHsKIAkJYWNj dW11bGF0b3JfcHJpbnQoJmFjY3VtdWxhdG9yLCAidG90YWwiKTsKIAkJZXhpdChFQUdBSU4pOwog CX0KIAotCWRybV9pbnRlbF9ib191bm1hcChzcmNbMF0uYm8pOwotCWRybV9pbnRlbF9ib191bm1h cChkc3RbMF0uYm8pOwotCiAJLyogQ2hlY2sgdGhhdCB0aGlzIHRlc3QgcGFzc2VkLiBUaGUgdGVz dCBtZWFzdXJlcyB0aGUgbnVtYmVyIG9mIDJ4MgogCSAqIHNhbXBsZXMgd3JpdHRlbiB0byB0aGUg cmVuZGVyIHRhcmdldCB1c2luZyB0aGUgY291bnRlciBBMjYuIEZvcgogCSAqIE9BUiwgdGhpcyBj b3VudGVyIHdpbGwgb25seSBoYXZlIGluY3JlbWVudHMgcmVsZXZhbnQgdG8gdGhpcyBzcGVjaWZp YwpAQCAtNDA5NiwxNiArMzk4NiwxNyBAQCBzdGF0aWMgdm9pZCBnZW4xMl9zaW5nbGVfY3R4X2hl bHBlcih2b2lkKQogCiAJLyogQ2xlYW4gdXAgKi8KIAlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZ X1NJWkUoc3JjKTsgaSsrKSB7Ci0JCWRybV9pbnRlbF9ib191bnJlZmVyZW5jZShzcmNbaV0uYm8p OwotCQlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2UoZHN0W2ldLmJvKTsKKwkJaW50ZWxfYnVmX2Ns b3NlKGJvcHMsICZzcmNbaV0pOworCQlpbnRlbF9idWZfY2xvc2UoYm9wcywgJmRzdFtpXSk7CiAJ fQogCi0JZHJtX2ludGVsX2JvX3VubWFwKGJvKTsKLQlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2Uo Ym8pOwotCWludGVsX2JhdGNoYnVmZmVyX2ZyZWUoYmF0Y2gpOwotCWRybV9pbnRlbF9nZW1fY29u dGV4dF9kZXN0cm95KGNvbnRleHQwKTsKLQlkcm1faW50ZWxfZ2VtX2NvbnRleHRfZGVzdHJveShj b250ZXh0MSk7Ci0JZHJtX2ludGVsX2J1Zm1ncl9kZXN0cm95KGJ1Zm1ncik7CisJaW50ZWxfYnVm X3VubWFwKGRzdF9idWYpOworCWludGVsX2J1Zl9kZXN0cm95KGRzdF9idWYpOworCWludGVsX2Ji X2Rlc3Ryb3koaWJiMCk7CisJaW50ZWxfYmJfZGVzdHJveShpYmIxKTsKKwlnZW1fY29udGV4dF9k ZXN0cm95KGRybV9mZCwgY29udGV4dDBfaWQpOworCWdlbV9jb250ZXh0X2Rlc3Ryb3koZHJtX2Zk LCBjb250ZXh0MV9pZCk7CisJYnVmX29wc19kZXN0cm95KGJvcHMpOwogCV9fcGVyZl9jbG9zZShz dHJlYW1fZmQpOwogfQogCi0tIAoyLjI2LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vaWd0LWRldgo=