From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andi Shyti Subject: [PATCH 1/2] drm/i915: Extract GT render power state management Date: Wed, 23 Oct 2019 12:38:20 +0300 Message-ID: <20191023093821.3350-2-andi.shyti@intel.com> References: <20191023093821.3350-1-andi.shyti@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id ED7036E13A for ; Wed, 23 Oct 2019 09:38:29 +0000 (UTC) In-Reply-To: <20191023093821.3350-1-andi.shyti@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel GFX List-Id: intel-gfx@lists.freedesktop.org RnJvbTogQW5kaSBTaHl0aSA8YW5kaUBldGV6aWFuLm9yZz4KCmk5MTVfaXJxLmMgaXMgbGFyZ2Uu IE9uZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCBoYXMgYSBsYXJnZSBjaHVuayBvZgp0aGUgR1Qg cmVuZGVyIHBvd2VyIG1hbmFnZW1lbnQgc3Rhc2hlZCBhd2F5IGluIGl0LiBFeHRyYWN0IHRoYXQg bG9naWMKb3V0IG9mIGk5MTVfaXJxLmMgYW5kIGludGVsX3BtLmMgYW5kIHB1dCBpdCB1bmRlciBv bmUgcm9vZi4KCkJhc2VkIG9uIGEgcGF0Y2ggYnkgQ2hyaXMgV2lsc29uLgoKU2lnbmVkLW9mZi1i eTogQW5kaSBTaHl0aSA8YW5kaS5zaHl0aUBpbnRlbC5jb20+CkNjOiBDaHJpcyBXaWxzb24gPGNo cmlzQGNocmlzLXdpbHNvbi5jby51az4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZSAgICAgICAgICAgICAgICAgfCAgICAzICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L2ludGVsX2Rpc3BsYXkuYyAgfCAgICA4ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9ndC5jICAgICAgICAgICAgfCAgICA2ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9ndF9pcnEuYyAgICAgICAgfCAgICA1ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9ndF9wbS5jICAgICAgICAgfCAgIDQ5ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9ndF9wbS5oICAgICAgICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2d0X3R5cGVzLmggICAgICB8ICAgIDIgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf bGxjLmMgICAgICAgICAgIHwgICAgMiArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf cnBzLmMgICAgICAgICAgIHwgMTg3MiArKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX3Jwcy5oICAgICAgICAgICB8ICAgMzcgKwogZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfcnBzX3R5cGVzLmggICAgIHwgICA5MyArCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9zZWxmdGVzdF9sbGMuYyAgICAgICAgfCAgICA3ICstCiAuLi4vZ3B1L2RybS9pOTE1L2d0 L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMgfCAgICA0ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2RlYnVnZnMuYyAgICAgICAgICAgfCAgIDczICstCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5jICAgICAgICAgICAgICAgfCAgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmggICAgICAgICAgICAgICB8ICAgOTYgLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW0uYyAgICAgICAgICAgICAgIHwgICAgMyArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9pcnEuYyAgICAgICAgICAgICAgIHwgIDM1OSArLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfaXJxLmggICAgICAgICAgICAgICB8ICAgIDMgLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9wbXUuYyAgICAgICAgICAgICAgIHwgICAxMCArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9yZXF1ZXN0LmMgICAgICAgICAgIHwgICAgNyArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9zeXNmcy5jICAgICAgICAgICAgIHwgICA3NCArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfcG0uYyAgICAgICAgICAgICAgIHwgMjEwNSArKy0tLS0tLS0tLS0tLS0tLQogZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uaCAgICAgICAgICAgICAgIHwgICAyMiAtCiAyNCBmaWxl cyBjaGFuZ2VkLCAyMzU5IGluc2VydGlvbnMoKyksIDI0ODQgZGVsZXRpb25zKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ycHMuaAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jwc190eXBlcy5oCgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9NYWtlZmlsZQppbmRleCAyZmQ0YmVkMTg4ZTUuLjEzM2NhNTllN2M0OCAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUKQEAgLTkwLDExICs5MCwxMiBAQCBndC15ICs9IFwKIAlndC9pbnRlbF9oYW5n Y2hlY2subyBcCiAJZ3QvaW50ZWxfbGxjLm8gXAogCWd0L2ludGVsX2xyYy5vIFwKKwlndC9pbnRl bF9tb2NzLm8gXAogCWd0L2ludGVsX3JjNi5vIFwKIAlndC9pbnRlbF9yZW5kZXJzdGF0ZS5vIFwK IAlndC9pbnRlbF9yZXNldC5vIFwKIAlndC9pbnRlbF9yaW5nYnVmZmVyLm8gXAotCWd0L2ludGVs X21vY3MubyBcCisJZ3QvaW50ZWxfcnBzLm8gXAogCWd0L2ludGVsX3NzZXUubyBcCiAJZ3QvaW50 ZWxfdGltZWxpbmUubyBcCiAJZ3QvaW50ZWxfd29ya2Fyb3VuZHMubwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwppbmRleCAyMzZmZGYxMjJlNDcuLjQ5YzJj N2Y3MTM5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9k aXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5 LmMKQEAgLTU1LDYgKzU1LDggQEAKICNpbmNsdWRlICJkaXNwbGF5L2ludGVsX3R2LmgiCiAjaW5j bHVkZSAiZGlzcGxheS9pbnRlbF92ZHNjLmgiCiAKKyNpbmNsdWRlICJndC9pbnRlbF9ycHMuaCIK KwogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCiAjaW5jbHVkZSAiaTkxNV90cmFjZS5oIgogI2luY2x1 ZGUgImludGVsX2FjcGkuaCIKQEAgLTE0NzgyLDcgKzE0Nzg0LDcgQEAgc3RhdGljIGludCBkb19y cHNfYm9vc3Qoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKl93YWl0LAogCSAqIHZibGFuayB3aXRo b3V0IG91ciBpbnRlcnZlbnRpb24sIHNvIGxlYXZlIFJQUyBhbG9uZS4KIAkgKi8KIAlpZiAoIWk5 MTVfcmVxdWVzdF9zdGFydGVkKHJxKSkKLQkJZ2VuNl9ycHNfYm9vc3QocnEpOworCQlpbnRlbF9y cHNfYm9vc3QocnEpOwogCWk5MTVfcmVxdWVzdF9wdXQocnEpOwogCiAJZHJtX2NydGNfdmJsYW5r X3B1dCh3YWl0LT5jcnRjKTsKQEAgLTE0OTc2LDcgKzE0OTc4LDcgQEAgaW50ZWxfcHJlcGFyZV9w bGFuZV9mYihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkgKiBtYXhpbXVtIGNsb2NrcyBmb2xs b3dpbmcgYSB2YmxhbmsgbWlzcyAoc2VlIGRvX3Jwc19ib29zdCgpKS4KIAkgKi8KIAlpZiAoIWlu dGVsX3N0YXRlLT5ycHNfaW50ZXJhY3RpdmUpIHsKLQkJaW50ZWxfcnBzX21hcmtfaW50ZXJhY3Rp dmUoZGV2X3ByaXYsIHRydWUpOworCQlpbnRlbF9ycHNfbWFya19pbnRlcmFjdGl2ZSgmZGV2X3By aXYtPmd0LnJwcywgdHJ1ZSk7CiAJCWludGVsX3N0YXRlLT5ycHNfaW50ZXJhY3RpdmUgPSB0cnVl OwogCX0KIApAQCAtMTUwMDEsNyArMTUwMDMsNyBAQCBpbnRlbF9jbGVhbnVwX3BsYW5lX2ZiKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUocGxhbmUtPmRldik7CiAKIAlpZiAoaW50ZWxfc3RhdGUtPnJwc19pbnRlcmFj dGl2ZSkgewotCQlpbnRlbF9ycHNfbWFya19pbnRlcmFjdGl2ZShkZXZfcHJpdiwgZmFsc2UpOwor CQlpbnRlbF9ycHNfbWFya19pbnRlcmFjdGl2ZSgmZGV2X3ByaXYtPmd0LnJwcywgZmFsc2UpOwog CQlpbnRlbF9zdGF0ZS0+cnBzX2ludGVyYWN0aXZlID0gZmFsc2U7CiAJfQogCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfZ3QuYwppbmRleCAxYzRiNmM5NjQyYWQuLjc1MTg4NTJjYjc4YSAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3QuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9ndC5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgImludGVs X2d0X3JlcXVlc3RzLmgiCiAjaW5jbHVkZSAiaW50ZWxfbW9jcy5oIgogI2luY2x1ZGUgImludGVs X3JjNi5oIgorI2luY2x1ZGUgImludGVsX3Jwcy5oIgogI2luY2x1ZGUgImludGVsX3VuY29yZS5o IgogI2luY2x1ZGUgImludGVsX3BtLmgiCiAKQEAgLTMyMSw4ICszMjIsNyBAQCB2b2lkIGludGVs X2d0X2NoaXBzZXRfZmx1c2goc3RydWN0IGludGVsX2d0ICpndCkKIAogdm9pZCBpbnRlbF9ndF9k cml2ZXJfcmVnaXN0ZXIoc3RydWN0IGludGVsX2d0ICpndCkKIHsKLQlpZiAoSVNfR0VOKGd0LT5p OTE1LCA1KSkKLQkJaW50ZWxfZ3B1X2lwc19pbml0KGd0LT5pOTE1KTsKKwlpbnRlbF9ycHNfZHJp dmVyX3JlZ2lzdGVyKCZndC0+cnBzKTsKIH0KIAogc3RhdGljIGludCBpbnRlbF9ndF9pbml0X3Nj cmF0Y2goc3RydWN0IGludGVsX2d0ICpndCwgdW5zaWduZWQgaW50IHNpemUpCkBAIC0zODUsNyAr Mzg1LDcgQEAgdm9pZCBpbnRlbF9ndF9kcml2ZXJfcmVtb3ZlKHN0cnVjdCBpbnRlbF9ndCAqZ3Qp CiAKIHZvaWQgaW50ZWxfZ3RfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGludGVsX2d0ICpndCkK IHsKLQlpbnRlbF9ncHVfaXBzX3RlYXJkb3duKCk7CisJaW50ZWxfcnBzX2RyaXZlcl91bnJlZ2lz dGVyKCZndC0+cnBzKTsKIH0KIAogdm9pZCBpbnRlbF9ndF9kcml2ZXJfcmVsZWFzZShzdHJ1Y3Qg aW50ZWxfZ3QgKmd0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf Z3RfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9pcnEuYwppbmRleCAz NGE0ZmI2MjRiZjcuLjk3M2VlN2VkZWQ2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfZ3RfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf Z3RfaXJxLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlICJpbnRlbF9ndC5oIgogI2luY2x1 ZGUgImludGVsX2d0X2lycS5oIgogI2luY2x1ZGUgImludGVsX3VuY29yZS5oIgorI2luY2x1ZGUg ImludGVsX3Jwcy5oIgogCiBzdGF0aWMgdm9pZCBndWNfaXJxX2hhbmRsZXIoc3RydWN0IGludGVs X2d1YyAqZ3VjLCB1MTYgaWlyKQogewpAQCAtNzcsNyArNzgsNyBAQCBnZW4xMV9vdGhlcl9pcnFf aGFuZGxlcihzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCBjb25zdCB1OCBpbnN0YW5jZSwKIAkJcmV0dXJu IGd1Y19pcnFfaGFuZGxlcigmZ3QtPnVjLmd1YywgaWlyKTsKIAogCWlmIChpbnN0YW5jZSA9PSBP VEhFUl9HVFBNX0lOU1RBTkNFKQotCQlyZXR1cm4gZ2VuMTFfcnBzX2lycV9oYW5kbGVyKGd0LCBp aXIpOworCQlyZXR1cm4gZ2VuMTFfcnBzX2lycV9oYW5kbGVyKCZndC0+cnBzLCBpaXIpOwogCiAJ V0FSTl9PTkNFKDEsICJ1bmhhbmRsZWQgb3RoZXIgaW50ZXJydXB0IGluc3RhbmNlPTB4JXgsIGlp cj0weCV4XG4iLAogCQkgIGluc3RhbmNlLCBpaXIpOwpAQCAtMzM2LDcgKzMzNyw3IEBAIHZvaWQg Z2VuOF9ndF9pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCB1MzIgbWFzdGVyX2N0bCwg dTMyIGd0X2lpcls0XSkKIAl9CiAKIAlpZiAobWFzdGVyX2N0bCAmIChHRU44X0dUX1BNX0lSUSB8 IEdFTjhfR1RfR1VDX0lSUSkpIHsKLQkJZ2VuNl9ycHNfaXJxX2hhbmRsZXIoZ3QtPmk5MTUsIGd0 X2lpclsyXSk7CisJCWdlbjZfcnBzX2lycV9oYW5kbGVyKCZndC0+cnBzLCBndF9paXJbMl0pOwog CQlndWNfaXJxX2hhbmRsZXIoJmd0LT51Yy5ndWMsIGd0X2lpclsyXSA+PiAxNik7CiAJfQogfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG0uYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X3BtLmMKaW5kZXggMDZlNzNkNTZjZmNmLi4zMmNh ODcyNjUyMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X3Bt LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG0uYwpAQCAtMTIsOCAr MTIsMTAgQEAKICNpbmNsdWRlICJpbnRlbF9ndC5oIgogI2luY2x1ZGUgImludGVsX2d0X3BtLmgi CiAjaW5jbHVkZSAiaW50ZWxfZ3RfcmVxdWVzdHMuaCIKKyNpbmNsdWRlICJpbnRlbF9sbGMuaCIK ICNpbmNsdWRlICJpbnRlbF9wbS5oIgogI2luY2x1ZGUgImludGVsX3JjNi5oIgorI2luY2x1ZGUg ImludGVsX3Jwcy5oIgogI2luY2x1ZGUgImludGVsX3dha2VyZWYuaCIKIAogc3RhdGljIGludCBf X2d0X3VucGFyayhzdHJ1Y3QgaW50ZWxfd2FrZXJlZiAqd2YpCkBAIC0zOSwxMiArNDEsOCBAQCBz dGF0aWMgaW50IF9fZ3RfdW5wYXJrKHN0cnVjdCBpbnRlbF93YWtlcmVmICp3ZikKIAlndC0+YXdh a2UgPSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldChpOTE1LCBQT1dFUl9ET01BSU5fR1RfSVJRKTsK IAlHRU1fQlVHX09OKCFndC0+YXdha2UpOwogCi0JaW50ZWxfZW5hYmxlX2d0X3Bvd2Vyc2F2ZShp OTE1KTsKLQotCWk5MTVfdXBkYXRlX2dmeF92YWwoaTkxNSk7Ci0JaWYgKElOVEVMX0dFTihpOTE1 KSA+PSA2KQotCQlnZW42X3Jwc19idXN5KGk5MTUpOwotCisJaW50ZWxfcnBzX3VucGFyaygmZ3Qt PnJwcyk7CisJaW50ZWxfbGxjX2VuYWJsZSgmZ3QtPmxsYyk7CiAJaTkxNV9wbXVfZ3RfdW5wYXJr ZWQoaTkxNSk7CiAKIAlpbnRlbF9ndF9xdWV1ZV9oYW5nY2hlY2soZ3QpOwpAQCAtNjUsOCArNjMs OCBAQCBzdGF0aWMgaW50IF9fZ3RfcGFyayhzdHJ1Y3QgaW50ZWxfd2FrZXJlZiAqd2YpCiAKIAlp OTE1X3ZtYV9wYXJrZWQoZ3QpOwogCWk5MTVfcG11X2d0X3BhcmtlZChpOTE1KTsKLQlpZiAoSU5U RUxfR0VOKGk5MTUpID49IDYpCi0JCWdlbjZfcnBzX2lkbGUoaTkxNSk7CisJaW50ZWxfbGxjX2Rp c2FibGUoJmd0LT5sbGMpOworCWludGVsX3Jwc19wYXJrKCZndC0+cnBzKTsKIAogCS8qIEV2ZXJ5 dGhpbmcgc3dpdGNoZWQgb2ZmLCBmbHVzaCBhbnkgcmVzaWR1YWwgaW50ZXJydXB0IGp1c3QgaW4g Y2FzZSAqLwogCWludGVsX3N5bmNocm9uaXplX2lycShpOTE1KTsKQEAgLTk4LDYgKzk2LDcgQEAg dm9pZCBpbnRlbF9ndF9wbV9pbml0KHN0cnVjdCBpbnRlbF9ndCAqZ3QpCiAJICogdXNlci4KIAkg Ki8KIAlpbnRlbF9yYzZfaW5pdCgmZ3QtPnJjNik7CisJaW50ZWxfcnBzX2luaXQoJmd0LT5ycHMp OwogfQogCiBzdGF0aWMgYm9vbCByZXNldF9lbmdpbmVzKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCkBA IC0xNDEsMTAgKzE0MCwzOSBAQCB2b2lkIGludGVsX2d0X3Nhbml0aXplKHN0cnVjdCBpbnRlbF9n dCAqZ3QsIGJvb2wgZm9yY2UpCiAJCQllbmdpbmUtPnJlc2V0LmZpbmlzaChlbmdpbmUpOwogfQog Cit2b2lkIGludGVsX2d0X3BtX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQoreworCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKKwllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKKwor CS8qIFBvd2Vyc2F2aW5nIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGhvc3Qgd2hlbiBpbnNpZGUgYSBW TSAqLworCWlmIChpbnRlbF92Z3B1X2FjdGl2ZShndC0+aTkxNSkpCisJCXJldHVybjsKKworCWlm IChpc19tb2NrX2d0KGd0KSkKKwkJcmV0dXJuOworCisJaW50ZWxfZ3RfcG1fZ2V0KGd0KTsKKwlp bnRlbF9ycHNfZW5hYmxlKCZndC0+cnBzKTsKKwlpbnRlbF9sbGNfZW5hYmxlKCZndC0+bGxjKTsK KworCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGd0LT5pOTE1LCBpZCkgeworCQlpbnRlbF9lbmdp bmVfcG1fZ2V0KGVuZ2luZSk7CisJCWVuZ2luZS0+c2VyaWFsKys7IC8qIGZvcmNlIGtlcm5lbCBj b250ZXh0IHJlbG9hZCAqLworCQlpbnRlbF9lbmdpbmVfcG1fcHV0KGVuZ2luZSk7CisJfQorCisJ aW50ZWxfZ3RfcG1fcHV0KGd0KTsKK30KKwogdm9pZCBpbnRlbF9ndF9wbV9kaXNhYmxlKHN0cnVj dCBpbnRlbF9ndCAqZ3QpCiB7Ci0JaWYgKCFpc19tb2NrX2d0KGd0KSkKLQkJaW50ZWxfc2FuaXRp emVfZ3RfcG93ZXJzYXZlKGd0LT5pOTE1KTsKKwlpZiAoaXNfbW9ja19ndChndCkpCisJCXJldHVy bjsKKworCWludGVsX3JjNl9kaXNhYmxlKCZndC0+cmM2KTsKKwlpbnRlbF9sbGNfZGlzYWJsZSgm Z3QtPmxsYyk7CisJaW50ZWxfcnBzX2Rpc2FibGUoJmd0LT5ycHMpOwogfQogCiB2b2lkIGludGVs X2d0X3BtX2Zpbmkoc3RydWN0IGludGVsX2d0ICpndCkKQEAgLTE2NSw2ICsxOTMsNyBAQCBpbnQg aW50ZWxfZ3RfcmVzdW1lKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCiAJICogYWxsb3dpbmcgdXMgdG8g Zml4dXAgdGhlIHVzZXIgY29udGV4dHMgb24gdGhlaXIgZmlyc3QgcGluLgogCSAqLwogCWludGVs X2d0X3BtX2dldChndCk7CisKIAlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldChndC0+dW5jb3Jl LCBGT1JDRVdBS0VfQUxMKTsKIAlpbnRlbF9yYzZfc2FuaXRpemUoJmd0LT5yYzYpOwogCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9wbS5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG0uaAppbmRleCAwZWQ4N2RhNGJiNjguLmRmNTBmODUz NzQ4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG0uaAor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9wbS5oCkBAIC00MCw2ICs0MCw3 IEBAIHN0YXRpYyBpbmxpbmUgaW50IGludGVsX2d0X3BtX3dhaXRfZm9yX2lkbGUoc3RydWN0IGlu dGVsX2d0ICpndCkKIHZvaWQgaW50ZWxfZ3RfcG1faW5pdF9lYXJseShzdHJ1Y3QgaW50ZWxfZ3Qg Kmd0KTsKIHZvaWQgaW50ZWxfZ3RfcG1faW5pdChzdHJ1Y3QgaW50ZWxfZ3QgKmd0KTsKIHZvaWQg aW50ZWxfZ3RfcG1fZGlzYWJsZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KTsKK3ZvaWQgaW50ZWxfZ3Rf cG1fZW5hYmxlKHN0cnVjdCBpbnRlbF9ndCAqZ3QpOwogdm9pZCBpbnRlbF9ndF9wbV9maW5pKHN0 cnVjdCBpbnRlbF9ndCAqZ3QpOwogCiB2b2lkIGludGVsX2d0X3Nhbml0aXplKHN0cnVjdCBpbnRl bF9ndCAqZ3QsIGJvb2wgZm9yY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfZ3RfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X3R5 cGVzLmgKaW5kZXggOTgwOTczZTY2ZTdmLi5lNGJkMjNlYjgyOTAgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X3R5cGVzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfZ3RfdHlwZXMuaApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImlu dGVsX2xsY190eXBlcy5oIgogI2luY2x1ZGUgImludGVsX3Jlc2V0X3R5cGVzLmgiCiAjaW5jbHVk ZSAiaW50ZWxfcmM2X3R5cGVzLmgiCisjaW5jbHVkZSAiaW50ZWxfcnBzX3R5cGVzLmgiCiAjaW5j bHVkZSAiaW50ZWxfd2FrZXJlZi5oIgogCiBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZTsKQEAgLTgy LDYgKzgzLDcgQEAgc3RydWN0IGludGVsX2d0IHsKIAogCXN0cnVjdCBpbnRlbF9sbGMgbGxjOwog CXN0cnVjdCBpbnRlbF9yYzYgcmM2OworCXN0cnVjdCBpbnRlbF9ycHMgcnBzOwogCiAJa3RpbWVf dCBsYXN0X2luaXRfdGltZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv aW50ZWxfbGxjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9sbGMuYwppbmRleCAz NTA5M2ViNWYyNGUuLmNlYjc4NWI3NWMyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfbGxjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbGxj LmMKQEAgLTQ4LDcgKzQ4LDcgQEAgc3RhdGljIGJvb2wgZ2V0X2lhX2NvbnN0YW50cyhzdHJ1Y3Qg aW50ZWxfbGxjICpsbGMsCiAJCQkgICAgIHN0cnVjdCBpYV9jb25zdGFudHMgKmNvbnN0cykKIHsK IAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGxsY190b19ndChsbGMpLT5pOTE1Owot CXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZpOTE1LT5ndF9wbS5ycHM7CisJc3RydWN0IGludGVs X3JwcyAqcnBzID0gJmxsY190b19ndChsbGMpLT5ycHM7CiAKIAlpZiAocnBzLT5tYXhfZnJlcSA8 PSBycHMtPm1pbl9mcmVxKQogCQlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9ycHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X3Jwcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzBmNTZjNzg2 NDY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBz LmMKQEAgLTAsMCArMSwxODcyIEBACisvKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1J VAorICoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lu Y2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiaW50ZWxfZ3QuaCIKKyNpbmNsdWRlICJpbnRl bF9ndF9pcnEuaCIKKyNpbmNsdWRlICJpbnRlbF9ndF9wbV9pcnEuaCIKKyNpbmNsdWRlICJpbnRl bF9ycHMuaCIKKyNpbmNsdWRlICJpbnRlbF9zaWRlYmFuZC5oIgorI2luY2x1ZGUgIi4uLy4uLy4u L3BsYXRmb3JtL3g4Ni9pbnRlbF9pcHMuaCIKKworLyoKKyAqIExvY2sgcHJvdGVjdGluZyBJUFMg cmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMKKyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhtY2hk ZXZfbG9jayk7CisKK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfZ3QgKnJwc190b19ndChzdHJ1Y3QgaW50 ZWxfcnBzICpycHMpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihycHMsIHN0cnVjdCBpbnRlbF9n dCwgcnBzKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpycHNfdG9faTkx NShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJcmV0dXJuIHJwc190b19ndChycHMpLT5pOTE1 OworfQorCitzdGF0aWMgc3RydWN0IGludGVsX3VuY29yZSAqcnBzX3RvX3VuY29yZShzdHJ1Y3Qg aW50ZWxfcnBzICpycHMpCit7CisJcmV0dXJuIHJwc190b19ndChycHMpLT51bmNvcmU7Cit9CisK K3N0YXRpYyB1MzIgcnBzX3BtX3Nhbml0aXplX21hc2soc3RydWN0IGludGVsX3JwcyAqcnBzLCB1 MzIgbWFzaykKK3sKKwlyZXR1cm4gbWFzayAmIH5ycHMtPnBtX2ludHJtc2tfbWJ6OworfQorCitz dGF0aWMgdTMyIHJwc19wbV9tYXNrKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTggdmFsKQorewor CXUzMiBtYXNrID0gMDsKKworCS8qIFdlIHVzZSBVUF9FSV9FWFBJUkVEIGludGVycnVwdHMgZm9y IGJvdGggdXAvZG93biBpbiBtYW51YWwgbW9kZSAqLworCWlmICh2YWwgPiBycHMtPm1pbl9mcmVx X3NvZnRsaW1pdCkKKwkJbWFzayB8PSAoR0VONl9QTV9SUF9VUF9FSV9FWFBJUkVEIHwKKwkJCSBH RU42X1BNX1JQX0RPV05fVEhSRVNIT0xEIHwKKwkJCSBHRU42X1BNX1JQX0RPV05fVElNRU9VVCk7 CisKKwlpZiAodmFsIDwgcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQpCisJCW1hc2sgfD0gR0VONl9Q TV9SUF9VUF9FSV9FWFBJUkVEIHwgR0VONl9QTV9SUF9VUF9USFJFU0hPTEQ7CisKKwltYXNrICY9 IHJwcy0+cG1fZXZlbnRzOworCisJcmV0dXJuIHJwc19wbV9zYW5pdGl6ZV9tYXNrKHJwcywgfm1h c2spOworfQorCitzdGF0aWMgdm9pZCBycHNfcmVzZXRfZWkoc3RydWN0IGludGVsX3JwcyAqcnBz KQoreworCW1lbXNldCgmcnBzLT5laSwgMCwgc2l6ZW9mKHJwcy0+ZWkpKTsKK30KKworc3RhdGlj IHZvaWQgcnBzX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlz dHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gcnBzX3RvX2d0KHJwcyk7CisKKwlycHNfcmVzZXRfZWkocnBz KTsKKworCWlmIChJU19WQUxMRVlWSUVXKGd0LT5pOTE1KSkKKwkJLyogV2FHc3ZSQzBSZXNpZGVu Y3lNZXRob2Q6dmx2ICovCisJCXJwcy0+cG1fZXZlbnRzID0gR0VONl9QTV9SUF9VUF9FSV9FWFBJ UkVEOworCWVsc2UKKwkJcnBzLT5wbV9ldmVudHMgPSAoR0VONl9QTV9SUF9VUF9USFJFU0hPTEQg fAorCQkJCSAgR0VONl9QTV9SUF9ET1dOX1RIUkVTSE9MRCB8CisJCQkJICBHRU42X1BNX1JQX0RP V05fVElNRU9VVCk7CisKKwlzcGluX2xvY2tfaXJxKCZndC0+aXJxX2xvY2spOworCWdlbjZfZ3Rf cG1fZW5hYmxlX2lycShndCwgcnBzLT5wbV9ldmVudHMpOworCXNwaW5fdW5sb2NrX2lycSgmZ3Qt PmlycV9sb2NrKTsKKworCWludGVsX3VuY29yZV93cml0ZShndC0+dW5jb3JlLCBHRU42X1BNSU5U Uk1TSywKKwkJCSAgIHJwc19wbV9tYXNrKHJwcywgcnBzLT5jdXJfZnJlcSkpOworfQorCitzdGF0 aWMgdm9pZCBnZW42X3Jwc19yZXNldF9pbnRlcnJ1cHRzKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykK K3sKKwlnZW42X2d0X3BtX3Jlc2V0X2lpcihycHNfdG9fZ3QocnBzKSwgR0VONl9QTV9SUFNfRVZF TlRTKTsKK30KKworc3RhdGljIHZvaWQgZ2VuMTFfcnBzX3Jlc2V0X2ludGVycnVwdHMoc3RydWN0 IGludGVsX3JwcyAqcnBzKQoreworCXdoaWxlIChnZW4xMV9ndF9yZXNldF9vbmVfaWlyKHJwc190 b19ndChycHMpLCAwLCBHRU4xMV9HVFBNKSkKKwkJOworfQorCitzdGF0aWMgdm9pZCBycHNfcmVz ZXRfaW50ZXJydXB0cyhzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGludGVsX2d0 ICpndCA9IHJwc190b19ndChycHMpOworCisJc3Bpbl9sb2NrX2lycSgmZ3QtPmlycV9sb2NrKTsK KwlpZiAoSU5URUxfR0VOKGd0LT5pOTE1KSA+PSAxMSkKKwkJZ2VuMTFfcnBzX3Jlc2V0X2ludGVy cnVwdHMocnBzKTsKKwllbHNlCisJCWdlbjZfcnBzX3Jlc2V0X2ludGVycnVwdHMocnBzKTsKKwor CXJwcy0+cG1faWlyID0gMDsKKwlzcGluX3VubG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Cit9CisK K3N0YXRpYyB2b2lkIHJwc19kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IGludGVsX3JwcyAqcnBz KQoreworCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBycHNfdG9fZ3QocnBzKTsKKworCXJwcy0+cG1f ZXZlbnRzID0gMDsKKworCWludGVsX3VuY29yZV93cml0ZShndC0+dW5jb3JlLCBHRU42X1BNSU5U Uk1TSywKKwkJCSAgIHJwc19wbV9zYW5pdGl6ZV9tYXNrKHJwcywgfjB1KSk7CisKKwlzcGluX2xv Y2tfaXJxKCZndC0+aXJxX2xvY2spOworCWdlbjZfZ3RfcG1fZGlzYWJsZV9pcnEoZ3QsIEdFTjZf UE1fUlBTX0VWRU5UUyk7CisJc3Bpbl91bmxvY2tfaXJxKCZndC0+aXJxX2xvY2spOworCisJaW50 ZWxfc3luY2hyb25pemVfaXJxKGd0LT5pOTE1KTsKKworCS8qCisJICogTm93IHRoYXQgd2Ugd2ls bCBub3QgYmUgZ2VuZXJhdGluZyBhbnkgbW9yZSB3b3JrLCBmbHVzaCBhbnkKKwkgKiBvdXRzdGFu ZGluZyB0YXNrcy4gQXMgd2UgYXJlIGNhbGxlZCBvbiB0aGUgUlBTIGlkbGUgcGF0aCwKKwkgKiB3 ZSB3aWxsIHJlc2V0IHRoZSBHUFUgdG8gbWluaW11bSBmcmVxdWVuY2llcywgc28gdGhlIGN1cnJl bnQKKwkgKiBzdGF0ZSBvZiB0aGUgd29ya2VyIGNhbiBiZSBkaXNjYXJkZWQuCisJICovCisJY2Fu Y2VsX3dvcmtfc3luYygmcnBzLT53b3JrKTsKKworCXJwc19yZXNldF9pbnRlcnJ1cHRzKHJwcyk7 Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3BhcmFtcyB7CisJdTE2IGk7CisJdTE2IHQ7CisJ dTE2IG07CisJdTE2IGM7Cit9IGNwYXJhbXNbXSA9IHsKKwl7IDEsIDEzMzMsIDMwMSwgMjg2NjQg fSwKKwl7IDEsIDEwNjYsIDI5NCwgMjQ0NjAgfSwKKwl7IDEsIDgwMCwgMjk0LCAyNTE5MiB9LAor CXsgMCwgMTMzMywgMjc2LCAyNzYwNSB9LAorCXsgMCwgMTA2NiwgMjc2LCAyNzYwNSB9LAorCXsg MCwgODAwLCAyMzEsIDIzNzg0IH0sCit9OworCitzdGF0aWMgdm9pZCBnZW41X3Jwc19pbml0KHN0 cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9 IHJwc190b19pOTE1KHJwcyk7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3Rv X3VuY29yZShycHMpOworCXU4IGZtYXgsIGZtaW4sIGZzdGFydDsKKwl1MzIgcmd2bW9kZWN0bDsK KwlpbnQgY19tLCBpOworCisJaWYgKGk5MTUtPmZzYl9mcmVxIDw9IDMyMDApCisJCWNfbSA9IDA7 CisJZWxzZSBpZiAoaTkxNS0+ZnNiX2ZyZXEgPD0gNDgwMCkKKwkJY19tID0gMTsKKwllbHNlCisJ CWNfbSA9IDI7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjcGFyYW1zKTsgaSsrKSB7 CisJCWlmIChjcGFyYW1zW2ldLmkgPT0gY19tICYmIGNwYXJhbXNbaV0udCA9PSBpOTE1LT5tZW1f ZnJlcSkgeworCQkJcnBzLT5pcHMubSA9IGNwYXJhbXNbaV0ubTsKKwkJCXJwcy0+aXBzLmMgPSBj cGFyYW1zW2ldLmM7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJndm1vZGVjdGwgPSBpbnRlbF91 bmNvcmVfcmVhZCh1bmNvcmUsIE1FTU1PREVDVEwpOworCisJLyogU2V0IHVwIG1pbiwgbWF4LCBh bmQgY3VyIGZvciBpbnRlcnJ1cHQgaGFuZGxpbmcgKi8KKwlmbWF4ID0gKHJndm1vZGVjdGwgJiBN RU1NT0RFX0ZNQVhfTUFTSykgPj4gTUVNTU9ERV9GTUFYX1NISUZUOworCWZtaW4gPSAocmd2bW9k ZWN0bCAmIE1FTU1PREVfRk1JTl9NQVNLKTsKKwlmc3RhcnQgPSAocmd2bW9kZWN0bCAmIE1FTU1P REVfRlNUQVJUX01BU0spID4+CisJCU1FTU1PREVfRlNUQVJUX1NISUZUOworCURSTV9ERUJVR19E UklWRVIoImZtYXg6ICVkLCBmbWluOiAlZCwgZnN0YXJ0OiAlZFxuIiwKKwkJCSBmbWF4LCBmbWlu LCBmc3RhcnQpOworCisJcnBzLT5taW5fZnJlcSA9IC1mc3RhcnQ7CisJcnBzLT5tYXhfZnJlcSA9 IC1mbWluOworCisJcnBzLT5pZGxlX2ZyZXEgPSBycHMtPm1pbl9mcmVxOworCXJwcy0+Y3VyX2Zy ZXEgPSBycHMtPmlkbGVfZnJlcTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcKK19faXBzX2No aXBzZXRfdmFsKHN0cnVjdCBpbnRlbF9pcHMgKmlwcykKK3sKKwlzdHJ1Y3QgaW50ZWxfdW5jb3Jl ICp1bmNvcmUgPQorCQlycHNfdG9fdW5jb3JlKGNvbnRhaW5lcl9vZihpcHMsIHN0cnVjdCBpbnRl bF9ycHMsIGlwcykpOworCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllc190b19tc2VjcyhqaWZm aWVzKSwgZHQ7CisJdW5zaWduZWQgbG9uZyByZXN1bHQ7CisJdTY0IHRvdGFsLCBkZWx0YTsKKwor CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm1jaGRldl9sb2NrKTsKKworCS8qCisJICogUHJldmVudCBk aXZpc2lvbi1ieS16ZXJvIGlmIHdlIGFyZSBhc2tpbmcgdG9vIGZhc3QuCisJICogQWxzbywgd2Ug ZG9uJ3QgZ2V0IGludGVyZXN0aW5nIHJlc3VsdHMgaWYgd2UgYXJlIHBvbGxpbmcKKwkgKiBmYXN0 ZXIgdGhhbiBvbmNlIGluIDEwbXMsIHNvIGp1c3QgcmV0dXJuIHRoZSBzYXZlZCB2YWx1ZQorCSAq IGluIHN1Y2ggY2FzZXMuCisJICovCisJZHQgPSBub3cgLSBpcHMtPmxhc3RfdGltZTE7CisJaWYg KGR0IDw9IDEwKQorCQlyZXR1cm4gaXBzLT5jaGlwc2V0X3Bvd2VyOworCisJLyogRklYTUU6IGhh bmRsZSBwZXItY291bnRlciBvdmVyZmxvdyAqLworCXRvdGFsID0gaW50ZWxfdW5jb3JlX3JlYWQo dW5jb3JlLCBETUlFQyk7CisJdG90YWwgKz0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBERFJF Qyk7CisJdG90YWwgKz0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBDU0lFQyk7CisKKwlkZWx0 YSA9IHRvdGFsIC0gaXBzLT5sYXN0X2NvdW50MTsKKworCXJlc3VsdCA9IGRpdl91NjQoZGl2X3U2 NChpcHMtPm0gKiBkZWx0YSwgZHQpICsgaXBzLT5jLCAxMCk7CisKKwlpcHMtPmxhc3RfY291bnQx ID0gdG90YWw7CisJaXBzLT5sYXN0X3RpbWUxID0gbm93OworCisJaXBzLT5jaGlwc2V0X3Bvd2Vy ID0gcmVzdWx0OworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcg aXBzX21jaF92YWwoc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlKQoreworCXVuc2lnbmVkIGlu dCBtLCB4LCBiOworCXUzMiB0c2ZzOworCisJdHNmcyA9IGludGVsX3VuY29yZV9yZWFkKHVuY29y ZSwgVFNGUyk7CisJeCA9IGludGVsX3VuY29yZV9yZWFkOCh1bmNvcmUsIFRSMSk7CisKKwliID0g dHNmcyAmIFRTRlNfSU5UUl9NQVNLOworCW0gPSAodHNmcyAmIFRTRlNfU0xPUEVfTUFTSykgPj4g VFNGU19TTE9QRV9TSElGVDsKKworCXJldHVybiBtICogeCAvIDEyNyAtIGI7Cit9CisKK3N0YXRp YyBpbnQgX3B4dmlkX3RvX3ZkKHU4IHB4dmlkKQoreworCWlmIChweHZpZCA9PSAwKQorCQlyZXR1 cm4gMDsKKworCWlmIChweHZpZCA+PSA4ICYmIHB4dmlkIDwgMzEpCisJCXB4dmlkID0gMzE7CisK KwlyZXR1cm4gKHB4dmlkICsgMikgKiAxMjU7Cit9CisKK3N0YXRpYyB1MzIgcHZpZF90b19leHR2 aWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHU4IHB4dmlkKQoreworCWNvbnN0IGlu dCB2ZCA9IF9weHZpZF90b192ZChweHZpZCk7CisKKwlpZiAoSU5URUxfSU5GTyhpOTE1KS0+aXNf bW9iaWxlKQorCQlyZXR1cm4gbWF4KHZkIC0gMTEyNSwgMCk7CisKKwlyZXR1cm4gdmQ7Cit9CisK K3N0YXRpYyB2b2lkIF9fZ2VuNV9pcHNfdXBkYXRlKHN0cnVjdCBpbnRlbF9pcHMgKmlwcykKK3sK KwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPQorCQlycHNfdG9fdW5jb3JlKGNvbnRhaW5l cl9vZihpcHMsIHN0cnVjdCBpbnRlbF9ycHMsIGlwcykpOworCXU2NCBub3csIGRlbHRhLCBkdDsK Kwl1MzIgY291bnQ7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZtY2hkZXZfbG9jayk7CisKKwlu b3cgPSBrdGltZV9nZXRfcmF3X25zKCk7CisJZHQgPSBub3cgLSBpcHMtPmxhc3RfdGltZTI7CisJ ZG9fZGl2KGR0LCBOU0VDX1BFUl9NU0VDKTsKKworCS8qIERvbid0IGRpdmlkZSBieSAwICovCisJ aWYgKGR0IDw9IDEwKQorCQlyZXR1cm47CisKKwljb3VudCA9IGludGVsX3VuY29yZV9yZWFkKHVu Y29yZSwgR0ZYRUMpOworCWRlbHRhID0gY291bnQgLSBpcHMtPmxhc3RfY291bnQyOworCisJaXBz LT5sYXN0X2NvdW50MiA9IGNvdW50OworCWlwcy0+bGFzdF90aW1lMiA9IG5vdzsKKworCS8qIE1v cmUgbWFnaWMgY29uc3RhbnRzLi4uICovCisJaXBzLT5nZnhfcG93ZXIgPSBkaXZfdTY0KGRlbHRh ICogMTE4MSwgZHQgKiAxMCk7Cit9CisKK3N0YXRpYyB2b2lkIGdlbjVfcnBzX3VwZGF0ZShzdHJ1 Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3Bpbl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOworCV9f Z2VuNV9pcHNfdXBkYXRlKCZycHMtPmlwcyk7CisJc3Bpbl91bmxvY2tfaXJxKCZtY2hkZXZfbG9j ayk7Cit9CisKK3N0YXRpYyBib29sIGdlbjVfcnBzX3NldChzdHJ1Y3QgaW50ZWxfcnBzICpycHMs IHU4IHZhbCkKK3sKKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBycHNfdG9fdW5jb3Jl KHJwcyk7CisJdTE2IHJndnN3Y3RsOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbWNoZGV2X2xv Y2spOworCisJcmd2c3djdGwgPSBpbnRlbF91bmNvcmVfcmVhZDE2KHVuY29yZSwgTUVNU1dDVEwp OworCWlmIChyZ3Zzd2N0bCAmIE1FTUNUTF9DTURfU1RTKSB7CisJCURSTV9ERUJVRygiZ3B1IGJ1 c3ksIFJDUyBjaGFuZ2UgcmVqZWN0ZWRcbiIpOworCQlyZXR1cm4gZmFsc2U7IC8qIHN0aWxsIGJ1 c3kgd2l0aCBhbm90aGVyIGNvbW1hbmQgKi8KKwl9CisKKwl2YWwgPSAtdmFsOworCisJcmd2c3dj dGwgPQorCQkoTUVNQ1RMX0NNRF9DSEZSRVEgPDwgTUVNQ1RMX0NNRF9TSElGVCkgfAorCQkodmFs IDw8IE1FTUNUTF9GUkVRX1NISUZUKSB8CisJCU1FTUNUTF9TRkNBVk07CisJaW50ZWxfdW5jb3Jl X3dyaXRlMTYodW5jb3JlLCBNRU1TV0NUTCwgcmd2c3djdGwpOworCWludGVsX3VuY29yZV9wb3N0 aW5nX3JlYWQxNih1bmNvcmUsIE1FTVNXQ1RMKTsKKworCXJndnN3Y3RsIHw9IE1FTUNUTF9DTURf U1RTOworCWludGVsX3VuY29yZV93cml0ZTE2KHVuY29yZSwgTUVNU1dDVEwsIHJndnN3Y3RsKTsK KworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpbnRlbF9weGZyZXEo dTMyIHZpZGZyZXEpCit7CisJaW50IGRpdiA9ICh2aWRmcmVxICYgMHgzZjAwMDApID4+IDE2Owor CWludCBwb3N0ID0gKHZpZGZyZXEgJiAweDMwMDApID4+IDEyOworCWludCBwcmUgPSAodmlkZnJl cSAmIDB4Nyk7CisKKwlpZiAoIXByZSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gZGl2ICogMTMz MzMzIC8gKHByZSA8PCBwb3N0KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2Vtb24o c3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlKQoreworCXU4IHB4d1sxNl07CisJaW50IGk7CisK KwkvKiBEaXNhYmxlIHRvIHByb2dyYW0gKi8KKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBF Q1IsIDApOworCWludGVsX3VuY29yZV9wb3N0aW5nX3JlYWQodW5jb3JlLCBFQ1IpOworCisJLyog UHJvZ3JhbSBlbmVyZ3kgd2VpZ2h0cyBmb3IgdmFyaW91cyBldmVudHMgKi8KKwlpbnRlbF91bmNv cmVfd3JpdGUodW5jb3JlLCBTREVXLCAweDE1MDQwZDAwKTsKKwlpbnRlbF91bmNvcmVfd3JpdGUo dW5jb3JlLCBDU0lFVzAsIDB4MDA3ZjAwMDApOworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUs IENTSUVXMSwgMHgxZTIyMDAwNCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgQ1NJRVcy LCAweDA0MDAwMDA0KTsKKworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCWludGVsX3VuY29y ZV93cml0ZSh1bmNvcmUsIFBFVyhpKSwgMCk7CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJ aW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgREVXKGkpLCAwKTsKKworCS8qIFByb2dyYW0gUC1z dGF0ZSB3ZWlnaHRzIHRvIGFjY291bnQgZm9yIGZyZXF1ZW5jeSBwb3dlciBhZGp1c3RtZW50ICov CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJdTMyIHB4dmlkZnJlcSA9IGludGVsX3Vu Y29yZV9yZWFkKHVuY29yZSwgUFhWRlJFUShpKSk7CisJCXVuc2lnbmVkIGludCBmcmVxID0gaW50 ZWxfcHhmcmVxKHB4dmlkZnJlcSk7CisJCXVuc2lnbmVkIGludCB2aWQgPQorCQkJKHB4dmlkZnJl cSAmIFBYVkZSRVFfUFhfTUFTSykgPj4gUFhWRlJFUV9QWF9TSElGVDsKKwkJdW5zaWduZWQgaW50 IHZhbDsKKworCQl2YWwgPSB2aWQgKiB2aWQgKiBmcmVxIC8gMTAwMCAqIDI1NTsKKwkJdmFsIC89 IDEyNyAqIDEyNyAqIDkwMDsKKworCQlweHdbaV0gPSB2YWw7CisJfQorCS8qIFJlbmRlciBzdGFu ZGJ5IHN0YXRlcyBnZXQgMCB3ZWlnaHQgKi8KKwlweHdbMTRdID0gMDsKKwlweHdbMTVdID0gMDsK KworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29y ZSwgUFhXKGkpLAorCQkJCSAgIHB4d1tpICogNCArIDBdIDw8IDI0IHwKKwkJCQkgICBweHdbaSAq IDQgKyAxXSA8PCAxNiB8CisJCQkJICAgcHh3W2kgKiA0ICsgMl0gPDwgIDggfAorCQkJCSAgIHB4 d1tpICogNCArIDNdIDw8ICAwKTsKKwl9CisKKwkvKiBBZGp1c3QgbWFnaWMgcmVncyB0byBtYWdp YyB2YWx1ZXMgKG1vcmUgZXhwZXJpbWVudGFsIHJlc3VsdHMpICovCisJaW50ZWxfdW5jb3JlX3dy aXRlKHVuY29yZSwgT0dXMCwgMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgT0dXMSwg MCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgRUcwLCAweDAwMDA3ZjAwKTsKKwlpbnRl bF91bmNvcmVfd3JpdGUodW5jb3JlLCBFRzEsIDB4MDAwMDAwMGUpOworCWludGVsX3VuY29yZV93 cml0ZSh1bmNvcmUsIEVHMiwgMHgwMDBlMDAwMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29y ZSwgRUczLCAweDY4MDAwMzAwKTsKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBFRzQsIDB4 NDIwMDAwMDApOworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEVHNSwgMHgwMDE0MDAzMSk7 CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgRUc2LCAwKTsKKwlpbnRlbF91bmNvcmVfd3Jp dGUodW5jb3JlLCBFRzcsIDApOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJaW50ZWxf dW5jb3JlX3dyaXRlKHVuY29yZSwgUFhXTChpKSwgMCk7CisKKwkvKiBFbmFibGUgUE1PTiArIHNl bGVjdCBldmVudHMgKi8KKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBFQ1IsIDB4ODAwMDAw MTkpOworCisJcmV0dXJuIGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgTENGVVNFMDIpICYgTENG VVNFX0hJVl9NQVNLOworfQorCitzdGF0aWMgYm9vbCBnZW41X3Jwc19lbmFibGUoc3RydWN0IGlu dGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJwc190b191 bmNvcmUocnBzKTsKKwl1OCBmc3RhcnQsIHZzdGFydDsKKwl1MzIgcmd2bW9kZWN0bDsKKworCXNw aW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKKworCXJndm1vZGVjdGwgPSBpbnRlbF91bmNvcmVf cmVhZCh1bmNvcmUsIE1FTU1PREVDVEwpOworCisJLyogRW5hYmxlIHRlbXAgcmVwb3J0aW5nICov CisJaW50ZWxfdW5jb3JlX3dyaXRlMTYodW5jb3JlLCBQTU1JU0MsCisJCQkgICAgIGludGVsX3Vu Y29yZV9yZWFkMTYodW5jb3JlLCBQTU1JU0MpIHwgTUNQUENFX0VOKTsKKwlpbnRlbF91bmNvcmVf d3JpdGUxNih1bmNvcmUsIFRTQzEsCisJCQkgICAgIGludGVsX3VuY29yZV9yZWFkMTYodW5jb3Jl LCBUU0MxKSB8IFRTRSk7CisKKwkvKiAxMDBtcyBSQyBldmFsdWF0aW9uIGludGVydmFscyAqLwor CWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFJDVVBFSSwgMTAwMDAwKTsKKwlpbnRlbF91bmNv cmVfd3JpdGUodW5jb3JlLCBSQ0RORUksIDEwMDAwMCk7CisKKwkvKiBTZXQgbWF4L21pbiB0aHJl c2hvbGRzIHRvIDkwbXMgYW5kIDgwbXMgcmVzcGVjdGl2ZWx5ICovCisJaW50ZWxfdW5jb3JlX3dy aXRlKHVuY29yZSwgUkNCTUFYQVZHLCA5MDAwMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29y ZSwgUkNCTUlOQVZHLCA4MDAwMCk7CisKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBNRU1J SFlTVCwgMSk7CisKKwkvKiBTZXQgdXAgbWluLCBtYXgsIGFuZCBjdXIgZm9yIGludGVycnVwdCBo YW5kbGluZyAqLworCWZzdGFydCA9IChyZ3Ztb2RlY3RsICYgTUVNTU9ERV9GU1RBUlRfTUFTSykg Pj4KKwkJTUVNTU9ERV9GU1RBUlRfU0hJRlQ7CisKKwl2c3RhcnQgPSAoaW50ZWxfdW5jb3JlX3Jl YWQodW5jb3JlLCBQWFZGUkVRKGZzdGFydCkpICYKKwkJICBQWFZGUkVRX1BYX01BU0spID4+IFBY VkZSRVFfUFhfU0hJRlQ7CisKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLAorCQkJICAgTUVN SU5UUkVOLAorCQkJICAgTUVNSU5UX0NYX1NVUFJfRU4gfCBNRU1JTlRfRVZBTF9DSEdfRU4pOwor CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgVklEU1RBUlQsIHZzdGFydCk7CisJaW50ZWxf dW5jb3JlX3Bvc3RpbmdfcmVhZCh1bmNvcmUsIFZJRFNUQVJUKTsKKworCXJndm1vZGVjdGwgfD0g TUVNTU9ERV9TV01PREVfRU47CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgTUVNTU9ERUNU TCwgcmd2bW9kZWN0bCk7CisKKwlpZiAod2FpdF9mb3JfYXRvbWljKChpbnRlbF91bmNvcmVfcmVh ZCh1bmNvcmUsIE1FTVNXQ1RMKSAmCisJCQkgICAgIE1FTUNUTF9DTURfU1RTKSA9PSAwLCAxMCkp CisJCURSTV9FUlJPUigic3R1Y2sgdHJ5aW5nIHRvIGNoYW5nZSBwZXJmIG1vZGVcbiIpOworCW1k ZWxheSgxKTsKKworCWdlbjVfcnBzX3NldChycHMsIHJwcy0+Y3VyX2ZyZXEpOworCisJcnBzLT5p cHMubGFzdF9jb3VudDEgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIERNSUVDKTsKKwlycHMt Pmlwcy5sYXN0X2NvdW50MSArPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEREUkVDKTsKKwly cHMtPmlwcy5sYXN0X2NvdW50MSArPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIENTSUVDKTsK KwlycHMtPmlwcy5sYXN0X3RpbWUxID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzKTsKKworCXJw cy0+aXBzLmxhc3RfY291bnQyID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBHRlhFQyk7CisJ cnBzLT5pcHMubGFzdF90aW1lMiA9IGt0aW1lX2dldF9yYXdfbnMoKTsKKworCXNwaW5fdW5sb2Nr X2lycSgmbWNoZGV2X2xvY2spOworCisJcnBzLT5pcHMuY29yciA9IGluaXRfZW1vbih1bmNvcmUp OworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGdlbjVfcnBzX2Rpc2FibGUoc3Ry dWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJw c190b191bmNvcmUocnBzKTsKKwl1MTYgcmd2c3djdGw7CisKKwlzcGluX2xvY2tfaXJxKCZtY2hk ZXZfbG9jayk7CisKKwlyZ3Zzd2N0bCA9IGludGVsX3VuY29yZV9yZWFkMTYodW5jb3JlLCBNRU1T V0NUTCk7CisKKwkvKiBBY2sgaW50ZXJydXB0cywgZGlzYWJsZSBFRkMgaW50ZXJydXB0ICovCisJ aW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgTUVNSU5UUkVOLAorCQkJICAgaW50ZWxfdW5jb3Jl X3JlYWQodW5jb3JlLCBNRU1JTlRSRU4pICYKKwkJCSAgIH5NRU1JTlRfRVZBTF9DSEdfRU4pOwor CWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIE1FTUlOVFJTVFMsIE1FTUlOVF9FVkFMX0NIRyk7 CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgREVJRVIsCisJCQkgICBpbnRlbF91bmNvcmVf cmVhZCh1bmNvcmUsIERFSUVSKSAmIH5ERV9QQ1VfRVZFTlQpOworCWludGVsX3VuY29yZV93cml0 ZSh1bmNvcmUsIERFSUlSLCBERV9QQ1VfRVZFTlQpOworCWludGVsX3VuY29yZV93cml0ZSh1bmNv cmUsIERFSU1SLAorCQkJICAgaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBERUlNUikgfCBERV9Q Q1VfRVZFTlQpOworCisJLyogR28gYmFjayB0byB0aGUgc3RhcnRpbmcgZnJlcXVlbmN5ICovCisJ Z2VuNV9ycHNfc2V0KHJwcywgcnBzLT5pZGxlX2ZyZXEpOworCW1kZWxheSgxKTsKKwlyZ3Zzd2N0 bCB8PSBNRU1DVExfQ01EX1NUUzsKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBNRU1TV0NU TCwgcmd2c3djdGwpOworCW1kZWxheSgxKTsKKworCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xv Y2spOworfQorCitzdGF0aWMgdTMyIHJwc19saW1pdHMoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1 OCB2YWwpCit7CisJdTMyIGxpbWl0czsKKworCS8qCisJICogT25seSBzZXQgdGhlIGRvd24gbGlt aXQgd2hlbiB3ZSd2ZSByZWFjaGVkIHRoZSBsb3dlc3QgbGV2ZWwgdG8gYXZvaWQKKwkgKiBnZXR0 aW5nIG1vcmUgaW50ZXJydXB0cywgb3RoZXJ3aXNlIGxlYXZlIHRoaXMgY2xlYXIuIFRoaXMgcHJl dmVudHMgYQorCSAqIHJhY2UgaW4gdGhlIGh3IHdoZW4gY29taW5nIG91dCBvZiByYzY6IFRoZXJl J3MgYSB0aW55IHdpbmRvdyB3aGVyZQorCSAqIHRoZSBodyBydW5zIGF0IHRoZSBtaW5pbWFsIGNs b2NrIGJlZm9yZSBzZWxlY3RpbmcgdGhlIGRlc2lyZWQKKwkgKiBmcmVxdWVuY3ksIGlmIHRoZSBk b3duIHRocmVzaG9sZCBleHBpcmVzIGluIHRoYXQgd2luZG93IHdlIHdpbGwgbm90CisJICogcmVj ZWl2ZSBhIGRvd24gaW50ZXJydXB0LgorCSAqLworCWlmIChJTlRFTF9HRU4ocnBzX3RvX2k5MTUo cnBzKSkgPj0gOSkgeworCQlsaW1pdHMgPSBycHMtPm1heF9mcmVxX3NvZnRsaW1pdCA8PCAyMzsK KwkJaWYgKHZhbCA8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkKKwkJCWxpbWl0cyB8PSBycHMt Pm1pbl9mcmVxX3NvZnRsaW1pdCA8PCAxNDsKKwl9IGVsc2UgeworCQlsaW1pdHMgPSBycHMtPm1h eF9mcmVxX3NvZnRsaW1pdCA8PCAyNDsKKwkJaWYgKHZhbCA8PSBycHMtPm1pbl9mcmVxX3NvZnRs aW1pdCkKKwkJCWxpbWl0cyB8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCA8PCAxNjsKKwl9CisK KwlyZXR1cm4gbGltaXRzOworfQorCitzdGF0aWMgdm9pZCBycHNfc2V0X3Bvd2VyKHN0cnVjdCBp bnRlbF9ycHMgKnJwcywgaW50IG5ld19wb3dlcikKK3sKKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1 bmNvcmUgPSBycHNfdG9fdW5jb3JlKHJwcyk7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUgPSBycHNfdG9faTkxNShycHMpOworCXUzMiB0aHJlc2hvbGRfdXAgPSAwLCB0aHJlc2hvbGRf ZG93biA9IDA7IC8qIGluICUgKi8KKwl1MzIgZWlfdXAgPSAwLCBlaV9kb3duID0gMDsKKworCWxv Y2tkZXBfYXNzZXJ0X2hlbGQoJnJwcy0+cG93ZXIubXV0ZXgpOworCisJaWYgKG5ld19wb3dlciA9 PSBycHMtPnBvd2VyLm1vZGUpCisJCXJldHVybjsKKworCS8qIE5vdGUgdGhlIHVuaXRzIGhlcmUg YXJlIG5vdCBleGFjdGx5IDF1cywgYnV0IDEyODBucy4gKi8KKwlzd2l0Y2ggKG5ld19wb3dlcikg eworCWNhc2UgTE9XX1BPV0VSOgorCQkvKiBVcGNsb2NrIGlmIG1vcmUgdGhhbiA5NSUgYnVzeSBv dmVyIDE2bXMgKi8KKwkJZWlfdXAgPSAxNjAwMDsKKwkJdGhyZXNob2xkX3VwID0gOTU7CisKKwkJ LyogRG93bmNsb2NrIGlmIGxlc3MgdGhhbiA4NSUgYnVzeSBvdmVyIDMybXMgKi8KKwkJZWlfZG93 biA9IDMyMDAwOworCQl0aHJlc2hvbGRfZG93biA9IDg1OworCQlicmVhazsKKworCWNhc2UgQkVU V0VFTjoKKwkJLyogVXBjbG9jayBpZiBtb3JlIHRoYW4gOTAlIGJ1c3kgb3ZlciAxM21zICovCisJ CWVpX3VwID0gMTMwMDA7CisJCXRocmVzaG9sZF91cCA9IDkwOworCisJCS8qIERvd25jbG9jayBp ZiBsZXNzIHRoYW4gNzUlIGJ1c3kgb3ZlciAzMm1zICovCisJCWVpX2Rvd24gPSAzMjAwMDsKKwkJ dGhyZXNob2xkX2Rvd24gPSA3NTsKKwkJYnJlYWs7CisKKwljYXNlIEhJR0hfUE9XRVI6CisJCS8q IFVwY2xvY2sgaWYgbW9yZSB0aGFuIDg1JSBidXN5IG92ZXIgMTBtcyAqLworCQllaV91cCA9IDEw MDAwOworCQl0aHJlc2hvbGRfdXAgPSA4NTsKKworCQkvKiBEb3duY2xvY2sgaWYgbGVzcyB0aGFu IDYwJSBidXN5IG92ZXIgMzJtcyAqLworCQllaV9kb3duID0gMzIwMDA7CisJCXRocmVzaG9sZF9k b3duID0gNjA7CisJCWJyZWFrOworCX0KKworCS8qIFdoZW4gYnl0IGNhbiBzdXJ2aXZlIHdpdGhv dXQgc3lzdGVtIGhhbmcgd2l0aCBkeW5hbWljCisJICogc3cgZnJlcSBhZGp1c3RtZW50cywgdGhp cyByZXN0cmljdGlvbiBjYW4gYmUgbGlmdGVkLgorCSAqLworCWlmIChJU19WQUxMRVlWSUVXKGk5 MTUpKQorCQlnb3RvIHNraXBfaHdfd3JpdGU7CisKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3Jl LCBHRU42X1JQX1VQX0VJLAorCQkJICAgR1RfSU5URVJWQUxfRlJPTV9VUyhpOTE1LCBlaV91cCkp OworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjZfUlBfVVBfVEhSRVNIT0xELAorCQkJ ICAgR1RfSU5URVJWQUxfRlJPTV9VUyhpOTE1LAorCQkJCQkgICAgICAgZWlfdXAgKiB0aHJlc2hv bGRfdXAgLyAxMDApKTsKKworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjZfUlBfRE9X Tl9FSSwKKwkJCSAgIEdUX0lOVEVSVkFMX0ZST01fVVMoaTkxNSwgZWlfZG93bikpOworCWludGVs X3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjZfUlBfRE9XTl9USFJFU0hPTEQsCisJCQkgICBHVF9J TlRFUlZBTF9GUk9NX1VTKGk5MTUsCisJCQkJCSAgICAgICBlaV9kb3duICogdGhyZXNob2xkX2Rv d24gLyAxMDApKTsKKworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjZfUlBfQ09OVFJP TCwKKwkJCSAgIChJTlRFTF9HRU4oaTkxNSkgPiA5ID8gMCA6IEdFTjZfUlBfTUVESUFfVFVSQk8p IHwKKwkJCSAgIEdFTjZfUlBfTUVESUFfSFdfTk9STUFMX01PREUgfAorCQkJICAgR0VONl9SUF9N RURJQV9JU19HRlggfAorCQkJICAgR0VONl9SUF9FTkFCTEUgfAorCQkJICAgR0VONl9SUF9VUF9C VVNZX0FWRyB8CisJCQkgICBHRU42X1JQX0RPV05fSURMRV9BVkcpOworCitza2lwX2h3X3dyaXRl OgorCXJwcy0+cG93ZXIubW9kZSA9IG5ld19wb3dlcjsKKwlycHMtPnBvd2VyLnVwX3RocmVzaG9s ZCA9IHRocmVzaG9sZF91cDsKKwlycHMtPnBvd2VyLmRvd25fdGhyZXNob2xkID0gdGhyZXNob2xk X2Rvd247Cit9CisKK3N0YXRpYyB2b2lkIGdlbjZfcnBzX3NldF90aHJlc2hvbGRzKHN0cnVjdCBp bnRlbF9ycHMgKnJwcywgdTggdmFsKQoreworCWludCBuZXdfcG93ZXI7CisKKwluZXdfcG93ZXIg PSBycHMtPnBvd2VyLm1vZGU7CisJc3dpdGNoIChycHMtPnBvd2VyLm1vZGUpIHsKKwljYXNlIExP V19QT1dFUjoKKwkJaWYgKHZhbCA+IHJwcy0+ZWZmaWNpZW50X2ZyZXEgKyAxICYmCisJCSAgICB2 YWwgPiBycHMtPmN1cl9mcmVxKQorCQkJbmV3X3Bvd2VyID0gQkVUV0VFTjsKKwkJYnJlYWs7CisK KwljYXNlIEJFVFdFRU46CisJCWlmICh2YWwgPD0gcnBzLT5lZmZpY2llbnRfZnJlcSAmJgorCQkg ICAgdmFsIDwgcnBzLT5jdXJfZnJlcSkKKwkJCW5ld19wb3dlciA9IExPV19QT1dFUjsKKwkJZWxz ZSBpZiAodmFsID49IHJwcy0+cnAwX2ZyZXEgJiYKKwkJCSB2YWwgPiBycHMtPmN1cl9mcmVxKQor CQkJbmV3X3Bvd2VyID0gSElHSF9QT1dFUjsKKwkJYnJlYWs7CisKKwljYXNlIEhJR0hfUE9XRVI6 CisJCWlmICh2YWwgPCAocnBzLT5ycDFfZnJlcSArIHJwcy0+cnAwX2ZyZXEpID4+IDEgJiYKKwkJ ICAgIHZhbCA8IHJwcy0+Y3VyX2ZyZXEpCisJCQluZXdfcG93ZXIgPSBCRVRXRUVOOworCQlicmVh azsKKwl9CisJLyogTWF4L21pbiBiaW5zIGFyZSBzcGVjaWFsICovCisJaWYgKHZhbCA8PSBycHMt Pm1pbl9mcmVxX3NvZnRsaW1pdCkKKwkJbmV3X3Bvd2VyID0gTE9XX1BPV0VSOworCWlmICh2YWwg Pj0gcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQpCisJCW5ld19wb3dlciA9IEhJR0hfUE9XRVI7CisK KwltdXRleF9sb2NrKCZycHMtPnBvd2VyLm11dGV4KTsKKwlpZiAocnBzLT5wb3dlci5pbnRlcmFj dGl2ZSkKKwkJbmV3X3Bvd2VyID0gSElHSF9QT1dFUjsKKwlycHNfc2V0X3Bvd2VyKHJwcywgbmV3 X3Bvd2VyKTsKKwltdXRleF91bmxvY2soJnJwcy0+cG93ZXIubXV0ZXgpOworfQorCit2b2lkIGlu dGVsX3Jwc19tYXJrX2ludGVyYWN0aXZlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgYm9vbCBpbnRl cmFjdGl2ZSkKK3sKKwlpZiAoIXJwcy0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9j aygmcnBzLT5wb3dlci5tdXRleCk7CisJaWYgKGludGVyYWN0aXZlKSB7CisJCWlmICghcnBzLT5w b3dlci5pbnRlcmFjdGl2ZSsrICYmIHJwcy0+YWN0aXZlKQorCQkJcnBzX3NldF9wb3dlcihycHMs IEhJR0hfUE9XRVIpOworCX0gZWxzZSB7CisJCUdFTV9CVUdfT04oIXJwcy0+cG93ZXIuaW50ZXJh Y3RpdmUpOworCQlycHMtPnBvd2VyLmludGVyYWN0aXZlLS07CisJfQorCW11dGV4X3VubG9jaygm cnBzLT5wb3dlci5tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgZ2VuNl9ycHNfc2V0KHN0cnVjdCBp bnRlbF9ycHMgKnJwcywgdTggdmFsKQoreworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9 IHJwc190b191bmNvcmUocnBzKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJw c190b19pOTE1KHJwcyk7CisJdTMyIHN3cmVxOworCisJaWYgKElOVEVMX0dFTihpOTE1KSA+PSA5 KQorCQlzd3JlcSA9IEdFTjlfRlJFUVVFTkNZKHZhbCk7CisJZWxzZSBpZiAoSVNfSEFTV0VMTChp OTE1KSB8fCBJU19CUk9BRFdFTEwoaTkxNSkpCisJCXN3cmVxID0gSFNXX0ZSRVFVRU5DWSh2YWwp OworCWVsc2UKKwkJc3dyZXEgPSAoR0VONl9GUkVRVUVOQ1kodmFsKSB8CisJCQkgR0VONl9PRkZT RVQoMCkgfAorCQkJIEdFTjZfQUdHUkVTU0lWRV9UVVJCTyk7CisJaW50ZWxfdW5jb3JlX3dyaXRl KHVuY29yZSwgR0VONl9SUE5TV1JFUSwgc3dyZXEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgdmx2X3Jwc19zZXQoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1OCB2YWwpCit7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOworCWludCBlcnI7 CisKKwl2bHZfcHVuaXRfZ2V0KGk5MTUpOworCWVyciA9IHZsdl9wdW5pdF93cml0ZShpOTE1LCBQ VU5JVF9SRUdfR1BVX0ZSRVFfUkVRLCB2YWwpOworCXZsdl9wdW5pdF9wdXQoaTkxNSk7CisKKwly ZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHJwc19zZXQoc3RydWN0IGludGVsX3JwcyAqcnBz LCB1OCB2YWwpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkx NShycHMpOworCWludCBlcnI7CisKKwlpZiAoSU5URUxfR0VOKGk5MTUpIDwgNikKKwkJcmV0dXJu IDA7CisKKwlpZiAodmFsID09IHJwcy0+bGFzdF9mcmVxKQorCQlyZXR1cm4gMDsKKworCWlmIChJ U19WQUxMRVlWSUVXKGk5MTUpIHx8IElTX0NIRVJSWVZJRVcoaTkxNSkpCisJCWVyciA9IHZsdl9y cHNfc2V0KHJwcywgdmFsKTsKKwllbHNlCisJCWVyciA9IGdlbjZfcnBzX3NldChycHMsIHZhbCk7 CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWdlbjZfcnBzX3NldF90aHJlc2hvbGRzKHJw cywgdmFsKTsKKwlycHMtPmxhc3RfZnJlcSA9IHZhbDsKKworCXJldHVybiAwOworfQorCit2b2lk IGludGVsX3Jwc191bnBhcmsoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXU4IGZyZXE7CisK KwlpZiAoIXJwcy0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBVc2UgdGhlIHVzZXIn cyBkZXNpcmVkIGZyZXF1ZW5jeSBhcyBhIGd1aWRlLCBidXQgZm9yIGJldHRlcgorCSAqIHBlcmZv cm1hbmNlLCBqdW1wIGRpcmVjdGx5IHRvIFJQZSBhcyBvdXIgc3RhcnRpbmcgZnJlcXVlbmN5Lgor CSAqLworCW11dGV4X2xvY2soJnJwcy0+bG9jayk7CisJcnBzLT5hY3RpdmUgPSB0cnVlOworCWZy ZXEgPSBtYXgocnBzLT5jdXJfZnJlcSwgcnBzLT5lZmZpY2llbnRfZnJlcSksCisJZnJlcSA9IGNs YW1wKGZyZXEsIHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0LCBycHMtPm1heF9mcmVxX3NvZnRsaW1p dCk7CisJaW50ZWxfcnBzX3NldChycHMsIGZyZXEpOworCXJwcy0+bGFzdF9hZGogPSAwOworCW11 dGV4X3VubG9jaygmcnBzLT5sb2NrKTsKKworCWlmIChJTlRFTF9HRU4ocnBzX3RvX2k5MTUocnBz KSkgPj0gNikKKwkJcnBzX2VuYWJsZV9pbnRlcnJ1cHRzKHJwcyk7CisKKwlpZiAoSVNfR0VOKHJw c190b19pOTE1KHJwcyksIDUpKQorCQlnZW41X3Jwc191cGRhdGUocnBzKTsKK30KKwordm9pZCBp bnRlbF9ycHNfcGFyayhzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOworCisJaWYgKCFycHMtPmVuYWJsZWQp CisJCXJldHVybjsKKworCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNikKKwkJcnBzX2Rpc2FibGVf aW50ZXJydXB0cyhycHMpOworCisJcnBzLT5hY3RpdmUgPSBmYWxzZTsKKwlpZiAocnBzLT5sYXN0 X2ZyZXEgPD0gcnBzLT5pZGxlX2ZyZXEpCisJCXJldHVybjsKKworCS8qCisJICogVGhlIHB1bml0 IGRlbGF5cyB0aGUgd3JpdGUgb2YgdGhlIGZyZXF1ZW5jeSBhbmQgdm9sdGFnZSB1bnRpbCBpdAor CSAqIGRldGVybWluZXMgdGhlIEdQVSBpcyBhd2FrZS4gRHVyaW5nIG5vcm1hbCB1c2FnZSB3ZSBk b24ndCB3YW50IHRvCisJICogd2FzdGUgcG93ZXIgY2hhbmdpbmcgdGhlIGZyZXF1ZW5jeSBpZiB0 aGUgR1BVIGlzIHNsZWVwaW5nIChyYzYpLgorCSAqIEhvd2V2ZXIsIHRoZSBHUFUgYW5kIGRyaXZl ciBpcyBub3cgaWRsZSBhbmQgd2UgZG8gbm90IHdhbnQgdG8gZGVsYXkKKwkgKiBzd2l0Y2hpbmcg dG8gbWluaW11bSB2b2x0YWdlIChyZWR1Y2luZyBwb3dlciB3aGlsc3QgaWRsZSkgYXMgd2UgZG8K KwkgKiBub3QgZXhwZWN0IHRvIGJlIHdva2VuIGluIHRoZSBuZWFyIGZ1dHVyZSBhbmQgc28gbXVz dCBmbHVzaCB0aGUKKwkgKiBjaGFuZ2UgYnkgd2FraW5nIHRoZSBkZXZpY2UuCisJICoKKwkgKiBX ZSBjaG9vc2UgdG8gdGFrZSB0aGUgbWVkaWEgcG93ZXJ3ZWxsIChlaXRoZXIgd291bGQgZG8gdG8g dHJpY2sgdGhlCisJICogcHVuaXQgaW50byBjb21taXR0aW5nIHRoZSB2b2x0YWdlIGNoYW5nZSkg YXMgdGhhdCB0YWtlcyBhIGxvdCBsZXNzCisJICogcG93ZXIgdGhhbiB0aGUgcmVuZGVyIHBvd2Vy d2VsbC4KKwkgKi8KKwlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldChycHNfdG9fdW5jb3JlKHJw cyksIEZPUkNFV0FLRV9NRURJQSk7CisJcnBzX3NldChycHMsIHJwcy0+aWRsZV9mcmVxKTsKKwlp bnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dChycHNfdG9fdW5jb3JlKHJwcyksIEZPUkNFV0FLRV9N RURJQSk7Cit9CisKK3ZvaWQgaW50ZWxfcnBzX2Jvb3N0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJx KQoreworCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZycS0+ZW5naW5lLT5ndC0+cnBzOworCXVu c2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoaTkxNV9yZXF1ZXN0X3NpZ25hbGVkKHJxKSB8fCAh cnBzLT5hY3RpdmUpCisJCXJldHVybjsKKworCS8qIFNlcmlhbGl6ZXMgd2l0aCBpOTE1X3JlcXVl c3RfcmV0aXJlKCkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwlp ZiAoIWk5MTVfcmVxdWVzdF9oYXNfd2FpdGJvb3N0KHJxKSAmJgorCSAgICAhZG1hX2ZlbmNlX2lz X3NpZ25hbGVkX2xvY2tlZCgmcnEtPmZlbmNlKSkgeworCQlycS0+ZmxhZ3MgfD0gSTkxNV9SRVFV RVNUX1dBSVRCT09TVDsKKworCQlpZiAoIWF0b21pY19mZXRjaF9pbmMoJnJwcy0+bnVtX3dhaXRl cnMpICYmCisJCSAgICBSRUFEX09OQ0UocnBzLT5jdXJfZnJlcSkgPCBycHMtPmJvb3N0X2ZyZXEp CisJCQlzY2hlZHVsZV93b3JrKCZycHMtPndvcmspOworCisJCWF0b21pY19pbmMoJnJwcy0+Ym9v c3RzKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKK30K KworaW50IGludGVsX3Jwc19zZXQoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1OCB2YWwpCit7CisJ aW50IGVyciA9IDA7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZycHMtPmxvY2spOworCUdFTV9C VUdfT04odmFsID4gcnBzLT5tYXhfZnJlcSk7CisJR0VNX0JVR19PTih2YWwgPCBycHMtPm1pbl9m cmVxKTsKKworCWlmIChycHMtPmFjdGl2ZSkgeworCQllcnIgPSBycHNfc2V0KHJwcywgdmFsKTsK KworCQkvKgorCQkgKiBNYWtlIHN1cmUgd2UgY29udGludWUgdG8gZ2V0IGludGVycnVwdHMKKwkJ ICogdW50aWwgd2UgaGl0IHRoZSBtaW5pbXVtIG9yIG1heGltdW0gZnJlcXVlbmNpZXMuCisJCSAq LworCQlpZiAoSU5URUxfR0VOKHJwc190b19pOTE1KHJwcykpID49IDYpIHsKKwkJCXN0cnVjdCBp bnRlbF91bmNvcmUgKnVuY29yZSA9IHJwc190b191bmNvcmUocnBzKTsKKworCQkJaW50ZWxfdW5j b3JlX3dyaXRlKHVuY29yZSwgR0VONl9SUF9JTlRFUlJVUFRfTElNSVRTLAorCQkJCQkgICBycHNf bGltaXRzKHJwcywgdmFsKSk7CisKKwkJCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjZf UE1JTlRSTVNLLAorCQkJCQkgICBycHNfcG1fbWFzayhycHMsIHZhbCkpOworCQl9CisJfQorCisJ aWYgKGVyciA9PSAwKQorCQlycHMtPmN1cl9mcmVxID0gdmFsOworCisJcmV0dXJuIGVycjsKK30K Kworc3RhdGljIHZvaWQgZ2VuNl9ycHNfaW5pdChzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOworCXN0cnVj dCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJwc190b191bmNvcmUocnBzKTsKKworCS8qIEFsbCBv ZiB0aGVzZSB2YWx1ZXMgYXJlIGluIHVuaXRzIG9mIDUwTUh6ICovCisKKwkvKiBzdGF0aWMgdmFs dWVzIGZyb20gSFc6IFJQMCA+IFJQMSA+IFJQbiAobWluX2ZyZXEpICovCisJaWYgKElTX0dFTjlf TFAoaTkxNSkpIHsKKwkJdTMyIHJwX3N0YXRlX2NhcCA9IGludGVsX3VuY29yZV9yZWFkKHVuY29y ZSwgQlhUX1JQX1NUQVRFX0NBUCk7CisKKwkJcnBzLT5ycDBfZnJlcSA9IChycF9zdGF0ZV9jYXAg Pj4gMTYpICYgMHhmZjsKKwkJcnBzLT5ycDFfZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4gIDgpICYg MHhmZjsKKwkJcnBzLT5taW5fZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4gIDApICYgMHhmZjsKKwl9 IGVsc2UgeworCQl1MzIgcnBfc3RhdGVfY2FwID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBH RU42X1JQX1NUQVRFX0NBUCk7CisKKwkJcnBzLT5ycDBfZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4g IDApICYgMHhmZjsKKwkJcnBzLT5ycDFfZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4gIDgpICYgMHhm ZjsKKwkJcnBzLT5taW5fZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4gMTYpICYgMHhmZjsKKwl9CisK KwkvKiBod19tYXggPSBSUDAgdW50aWwgd2UgY2hlY2sgZm9yIG92ZXJjbG9ja2luZyAqLworCXJw cy0+bWF4X2ZyZXEgPSBycHMtPnJwMF9mcmVxOworCisJcnBzLT5lZmZpY2llbnRfZnJlcSA9IHJw cy0+cnAxX2ZyZXE7CisJaWYgKElTX0hBU1dFTEwoaTkxNSkgfHwgSVNfQlJPQURXRUxMKGk5MTUp IHx8CisJICAgIElTX0dFTjlfQkMoaTkxNSkgfHwgSU5URUxfR0VOKGk5MTUpID49IDEwKSB7CisJ CXUzMiBkZGNjX3N0YXR1cyA9IDA7CisKKwkJaWYgKHNhbmR5YnJpZGdlX3Bjb2RlX3JlYWQoaTkx NSwKKwkJCQkJICAgSFNXX1BDT0RFX0RZTkFNSUNfRFVUWV9DWUNMRV9DT05UUk9MLAorCQkJCQkg ICAmZGRjY19zdGF0dXMsIE5VTEwpID09IDApCisJCQlycHMtPmVmZmljaWVudF9mcmVxID0KKwkJ CQljbGFtcF90KHU4LAorCQkJCQkoZGRjY19zdGF0dXMgPj4gOCkgJiAweGZmLAorCQkJCQlycHMt Pm1pbl9mcmVxLAorCQkJCQlycHMtPm1heF9mcmVxKTsKKwl9CisKKwlpZiAoSVNfR0VOOV9CQyhp OTE1KSB8fCBJTlRFTF9HRU4oaTkxNSkgPj0gMTApIHsKKwkJLyogU3RvcmUgdGhlIGZyZXF1ZW5j eSB2YWx1ZXMgaW4gMTYuNjYgTUhaIHVuaXRzLCB3aGljaCBpcworCQkgKiB0aGUgbmF0dXJhbCBo YXJkd2FyZSB1bml0IGZvciBTS0wKKwkJICovCisJCXJwcy0+cnAwX2ZyZXEgKj0gR0VOOV9GUkVR X1NDQUxFUjsKKwkJcnBzLT5ycDFfZnJlcSAqPSBHRU45X0ZSRVFfU0NBTEVSOworCQlycHMtPm1p bl9mcmVxICo9IEdFTjlfRlJFUV9TQ0FMRVI7CisJCXJwcy0+bWF4X2ZyZXEgKj0gR0VOOV9GUkVR X1NDQUxFUjsKKwkJcnBzLT5lZmZpY2llbnRfZnJlcSAqPSBHRU45X0ZSRVFfU0NBTEVSOworCX0K K30KKworc3RhdGljIGJvb2wgcnBzX3Jlc2V0KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwkv KiBmb3JjZSBhIHJlc2V0ICovCisJcnBzLT5wb3dlci5tb2RlID0gLTE7CisJcnBzLT5sYXN0X2Zy ZXEgPSAtMTsKKworCWlmIChycHNfc2V0KHJwcywgcnBzLT5taW5fZnJlcSkpIHsKKwkJRFJNX0VS Uk9SKCJGYWlsZWQgdG8gcmVzZXQgUlBTIHRvIGluaXRpYWwgdmFsdWVzXG4iKTsKKwkJcmV0dXJu IGZhbHNlOworCX0KKworCXJwcy0+Y3VyX2ZyZXEgPSBycHMtPm1pbl9mcmVxOworCXJldHVybiB0 cnVlOworfQorCisvKiBTZWUgdGhlIEdlbjlfR1RfUE1fUHJvZ3JhbW1pbmdfR3VpZGUgZG9jIGZv ciB0aGUgYmVsb3cgKi8KK3N0YXRpYyBib29sIGdlbjlfcnBzX2VuYWJsZShzdHJ1Y3QgaW50ZWxf cnBzICpycHMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkx NShycHMpOworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJwc190b191bmNvcmUocnBz KTsKKworCS8qIFByb2dyYW0gZGVmYXVsdHMgYW5kIHRocmVzaG9sZHMgZm9yIFJQUyAqLworCWlm IChJU19HRU4oaTkxNSwgOSkpCisJCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZf UkNfVklERU9fRlJFUSwKKwkJCQkgICAgICBHRU45X0ZSRVFVRU5DWShycHMtPnJwMV9mcmVxKSk7 CisKKwkvKiAxIHNlY29uZCB0aW1lb3V0ICovCisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29y ZSwgR0VONl9SUF9ET1dOX1RJTUVPVVQsCisJCQkgICAgICBHVF9JTlRFUlZBTF9GUk9NX1VTKGk5 MTUsIDEwMDAwMDApKTsKKworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBf SURMRV9IWVNURVJTSVMsIDB4YSk7CisKKwlyZXR1cm4gcnBzX3Jlc2V0KHJwcyk7Cit9CisKK3N0 YXRpYyBib29sIGdlbjhfcnBzX2VuYWJsZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3Ry dWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOworCisJaW50ZWxf dW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SQ19WSURFT19GUkVRLAorCQkJICAgICAgSFNX X0ZSRVFVRU5DWShycHMtPnJwMV9mcmVxKSk7CisKKwkvKiBOQjogRG9jcyBzYXkgMXMsIGFuZCAx MDAwMDAwIC0gd2hpY2ggYXJlbid0IGVxdWl2YWxlbnQgKi8KKwlpbnRlbF91bmNvcmVfd3JpdGVf ZncodW5jb3JlLCBHRU42X1JQX0RPV05fVElNRU9VVCwKKwkJCSAgICAgIDEwMDAwMDAwMCAvIDEy OCk7IC8qIDEgc2Vjb25kIHRpbWVvdXQgKi8KKworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNv cmUsIEdFTjZfUlBfSURMRV9IWVNURVJTSVMsIDEwKTsKKworCXJldHVybiBycHNfcmVzZXQocnBz KTsKK30KKworc3RhdGljIGJvb2wgZ2VuNl9ycHNfZW5hYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJw cykKK3sKKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBycHNfdG9fdW5jb3JlKHJwcyk7 CisKKwkvKiBQb3dlciBkb3duIGlmIGNvbXBsZXRlbHkgaWRsZSBmb3Igb3ZlciA1MG1zICovCisJ aW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9ET1dOX1RJTUVPVVQsIDUwMDAw KTsKKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JQX0lETEVfSFlTVEVSU0lT LCAxMCk7CisKKwlyZXR1cm4gcnBzX3Jlc2V0KHJwcyk7Cit9CisKK3N0YXRpYyBpbnQgY2h2X3Jw c19tYXhfZnJlcShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOworCXUzMiB2YWw7CisKKwl2YWwgPSB2bHZf cHVuaXRfcmVhZChpOTE1LCBGQl9HRlhfRk1BWF9BVF9WTUFYX0ZVU0UpOworCisJc3dpdGNoIChS VU5USU1FX0lORk8oaTkxNSktPnNzZXUuZXVfdG90YWwpIHsKKwljYXNlIDg6CisJCS8qICgyICog NCkgY29uZmlnICovCisJCXZhbCA+Pj0gRkJfR0ZYX0ZNQVhfQVRfVk1BWF8yU1M0RVVfRlVTRV9T SElGVDsKKwkJYnJlYWs7CisJY2FzZSAxMjoKKwkJLyogKDIgKiA2KSBjb25maWcgKi8KKwkJdmFs ID4+PSBGQl9HRlhfRk1BWF9BVF9WTUFYXzJTUzZFVV9GVVNFX1NISUZUOworCQlicmVhazsKKwlj YXNlIDE2OgorCQkvKiAoMiAqIDgpIGNvbmZpZyAqLworCWRlZmF1bHQ6CisJCS8qIFNldHRpbmcg KDIgKiA4KSBNaW4gUlAwIGZvciBhbnkgb3RoZXIgY29tYmluYXRpb24gKi8KKwkJdmFsID4+PSBG Ql9HRlhfRk1BWF9BVF9WTUFYXzJTUzhFVV9GVVNFX1NISUZUOworCQlicmVhazsKKwl9CisKKwly ZXR1cm4gdmFsICYgRkJfR0ZYX0ZSRVFfRlVTRV9NQVNLOworfQorCitzdGF0aWMgaW50IGNodl9y cHNfcnBlX2ZyZXEoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKKwl1MzIgdmFsOworCisJdmFsID0gdmx2 X3B1bml0X3JlYWQoaTkxNSwgUFVOSVRfR1BVX0RVVFlDWUNMRV9SRUcpOworCXZhbCA+Pj0gUFVO SVRfR1BVX0RVVFlDWUNMRV9SUEVfRlJFUV9TSElGVDsKKworCXJldHVybiB2YWwgJiBQVU5JVF9H UFVfRFVUWUNZQ0xFX1JQRV9GUkVRX01BU0s7Cit9CisKK3N0YXRpYyBpbnQgY2h2X3Jwc19ndWFy X2ZyZXEoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKKwl1MzIgdmFsOworCisJdmFsID0gdmx2X3B1bml0 X3JlYWQoaTkxNSwgRkJfR0ZYX0ZNQVhfQVRfVk1BWF9GVVNFKTsKKworCXJldHVybiB2YWwgJiBG Ql9HRlhfRlJFUV9GVVNFX01BU0s7Cit9CisKK3N0YXRpYyB1MzIgY2h2X3Jwc19taW5fZnJlcShz dHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUg PSBycHNfdG9faTkxNShycHMpOworCXUzMiB2YWw7CisKKwl2YWwgPSB2bHZfcHVuaXRfcmVhZChp OTE1LCBGQl9HRlhfRk1JTl9BVF9WTUlOX0ZVU0UpOworCXZhbCA+Pj0gRkJfR0ZYX0ZNSU5fQVRf Vk1JTl9GVVNFX1NISUZUOworCisJcmV0dXJuIHZhbCAmIEZCX0dGWF9GUkVRX0ZVU0VfTUFTSzsK K30KKworc3RhdGljIGJvb2wgY2h2X3Jwc19lbmFibGUoc3RydWN0IGludGVsX3JwcyAqcnBzKQor eworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJwc190b191bmNvcmUocnBzKTsKKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJdTMyIHZh bDsKKworCS8qIDE6IFByb2dyYW0gZGVmYXVsdHMgYW5kIHRocmVzaG9sZHMgZm9yIFJQUyovCisJ aW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9ET1dOX1RJTUVPVVQsIDEwMDAw MDApOworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfVVBfVEhSRVNIT0xE LCA1OTQwMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9ET1dOX1RI UkVTSE9MRCwgMjQ1MDAwKTsKKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JQ X1VQX0VJLCA2NjAwMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9E T1dOX0VJLCAzNTAwMDApOworCisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9S UF9JRExFX0hZU1RFUlNJUywgMTApOworCisJLyogMjogRW5hYmxlIFJQUyAqLworCWludGVsX3Vu Y29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfQ09OVFJPTCwKKwkJCSAgICAgIEdFTjZfUlBf TUVESUFfSFdfTk9STUFMX01PREUgfAorCQkJICAgICAgR0VONl9SUF9NRURJQV9JU19HRlggfAor CQkJICAgICAgR0VONl9SUF9FTkFCTEUgfAorCQkJICAgICAgR0VONl9SUF9VUF9CVVNZX0FWRyB8 CisJCQkgICAgICBHRU42X1JQX0RPV05fSURMRV9BVkcpOworCisJLyogU2V0dGluZyBGaXhlZCBC aWFzICovCisJdmx2X3B1bml0X2dldChpOTE1KTsKKworCXZhbCA9IFZMVl9PVkVSUklERV9FTiB8 IFZMVl9TT0NfVERQX0VOIHwgQ0hWX0JJQVNfQ1BVXzUwX1NPQ181MDsKKwl2bHZfcHVuaXRfd3Jp dGUoaTkxNSwgVkxWX1RVUkJPX1NPQ19PVkVSUklERSwgdmFsKTsKKworCXZhbCA9IHZsdl9wdW5p dF9yZWFkKGk5MTUsIFBVTklUX1JFR19HUFVfRlJFUV9TVFMpOworCisJdmx2X3B1bml0X3B1dChp OTE1KTsKKworCS8qIFJQUyBjb2RlIGFzc3VtZXMgR1BMTCBpcyB1c2VkICovCisJV0FSTl9PTkNF KCh2YWwgJiBHUExMRU5BQkxFKSA9PSAwLCAiR1BMTCBub3QgZW5hYmxlZFxuIik7CisKKwlEUk1f REVCVUdfRFJJVkVSKCJHUExMIGVuYWJsZWQ/ICVzXG4iLCB5ZXNubyh2YWwgJiBHUExMRU5BQkxF KSk7CisJRFJNX0RFQlVHX0RSSVZFUigiR1BVIHN0YXR1czogMHglMDh4XG4iLCB2YWwpOworCisJ cmV0dXJuIHJwc19yZXNldChycHMpOworfQorCitzdGF0aWMgaW50IHZsdl9ycHNfZ3Vhcl9mcmVx KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSA9IHJwc190b19pOTE1KHJwcyk7CisJdTMyIHZhbCwgcnAxOworCisJdmFsID0gdmx2X25jX3Jl YWQoaTkxNSwgSU9TRl9OQ19GQl9HRlhfRlJFUV9GVVNFKTsKKworCXJwMSA9IHZhbCAmIEZCX0dG WF9GR1VBUkFOVEVFRF9GUkVRX0ZVU0VfTUFTSzsKKwlycDEgPj49IEZCX0dGWF9GR1VBUkFOVEVF RF9GUkVRX0ZVU0VfU0hJRlQ7CisKKwlyZXR1cm4gcnAxOworfQorCitzdGF0aWMgaW50IHZsdl9y cHNfbWF4X2ZyZXEoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKKwl1MzIgdmFsLCBycDA7CisKKwl2YWwg PSB2bHZfbmNfcmVhZChpOTE1LCBJT1NGX05DX0ZCX0dGWF9GUkVRX0ZVU0UpOworCisJcnAwID0g KHZhbCAmIEZCX0dGWF9NQVhfRlJFUV9GVVNFX01BU0spID4+IEZCX0dGWF9NQVhfRlJFUV9GVVNF X1NISUZUOworCS8qIENsYW1wIHRvIG1heCAqLworCXJwMCA9IG1pbl90KHUzMiwgcnAwLCAweGVh KTsKKworCXJldHVybiBycDA7Cit9CisKK3N0YXRpYyBpbnQgdmx2X3Jwc19ycGVfZnJlcShzdHJ1 Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBy cHNfdG9faTkxNShycHMpOworCXUzMiB2YWwsIHJwZTsKKworCXZhbCA9IHZsdl9uY19yZWFkKGk5 MTUsIElPU0ZfTkNfRkJfR0ZYX0ZNQVhfRlVTRV9MTyk7CisJcnBlID0gKHZhbCAmIEZCX0ZNQVhf Vk1JTl9GUkVRX0xPX01BU0spID4+IEZCX0ZNQVhfVk1JTl9GUkVRX0xPX1NISUZUOworCXZhbCA9 IHZsdl9uY19yZWFkKGk5MTUsIElPU0ZfTkNfRkJfR0ZYX0ZNQVhfRlVTRV9ISSk7CisJcnBlIHw9 ICh2YWwgJiBGQl9GTUFYX1ZNSU5fRlJFUV9ISV9NQVNLKSA8PCA1OworCisJcmV0dXJuIHJwZTsK K30KKworc3RhdGljIGludCB2bHZfcnBzX21pbl9mcmVxKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJ dTMyIHZhbDsKKworCXZhbCA9IHZsdl9wdW5pdF9yZWFkKGk5MTUsIFBVTklUX1JFR19HUFVfTEZN KSAmIDB4ZmY7CisJLyoKKwkgKiBBY2NvcmRpbmcgdG8gdGhlIEJZVCBQdW5pdCBHUFUgdHVyYm8g SEFTIDEuMS42LjMgdGhlIG1pbmltdW0gdmFsdWUKKwkgKiBmb3IgdGhlIG1pbmltdW0gZnJlcXVl bmN5IGluIEdQTEwgbW9kZSBpcyAweGMxLiBDb250cmFyeSB0byB0aGlzIG9uCisJICogYSBCWVQt TSBCMCB0aGUgYWJvdmUgcmVnaXN0ZXIgY29udGFpbnMgMHhiZi4gTW9yZW92ZXIgd2hlbiBzZXR0 aW5nCisJICogYSBmcmVxdWVuY3kgUHVuaXQgd2lsbCBub3QgYWxsb3cgdmFsdWVzIGJlbG93IDB4 YzAuIENsYW1wIGl0IDB4YzAKKwkgKiB0byBtYWtlIHN1cmUgaXQgbWF0Y2hlcyB3aGF0IFB1bml0 IGFjY2VwdHMuCisJICovCisJcmV0dXJuIG1heF90KHUzMiwgdmFsLCAweGMwKTsKK30KKworc3Rh dGljIGJvb2wgdmx2X3Jwc19lbmFibGUoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVj dCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJwc190b191bmNvcmUocnBzKTsKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJdTMyIHZhbDsKKworCWlu dGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfRE9XTl9USU1FT1VULCAxMDAwMDAw KTsKKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JQX1VQX1RIUkVTSE9MRCwg NTk0MDApOworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfRE9XTl9USFJF U0hPTEQsIDI0NTAwMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9V UF9FSSwgNjYwMDApOworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfRE9X Tl9FSSwgMzUwMDAwKTsKKworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBf SURMRV9IWVNURVJTSVMsIDEwKTsKKworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdF TjZfUlBfQ09OVFJPTCwKKwkJCSAgICAgIEdFTjZfUlBfTUVESUFfVFVSQk8gfAorCQkJICAgICAg R0VONl9SUF9NRURJQV9IV19OT1JNQUxfTU9ERSB8CisJCQkgICAgICBHRU42X1JQX01FRElBX0lT X0dGWCB8CisJCQkgICAgICBHRU42X1JQX0VOQUJMRSB8CisJCQkgICAgICBHRU42X1JQX1VQX0JV U1lfQVZHIHwKKwkJCSAgICAgIEdFTjZfUlBfRE9XTl9JRExFX0NPTlQpOworCisJdmx2X3B1bml0 X2dldChpOTE1KTsKKworCS8qIFNldHRpbmcgRml4ZWQgQmlhcyAqLworCXZhbCA9IFZMVl9PVkVS UklERV9FTiB8IFZMVl9TT0NfVERQX0VOIHwgVkxWX0JJQVNfQ1BVXzEyNV9TT0NfODc1OworCXZs dl9wdW5pdF93cml0ZShpOTE1LCBWTFZfVFVSQk9fU09DX09WRVJSSURFLCB2YWwpOworCisJdmFs ID0gdmx2X3B1bml0X3JlYWQoaTkxNSwgUFVOSVRfUkVHX0dQVV9GUkVRX1NUUyk7CisKKwl2bHZf cHVuaXRfcHV0KGk5MTUpOworCisJLyogUlBTIGNvZGUgYXNzdW1lcyBHUExMIGlzIHVzZWQgKi8K KwlXQVJOX09OQ0UoKHZhbCAmIEdQTExFTkFCTEUpID09IDAsICJHUExMIG5vdCBlbmFibGVkXG4i KTsKKworCURSTV9ERUJVR19EUklWRVIoIkdQTEwgZW5hYmxlZD8gJXNcbiIsIHllc25vKHZhbCAm IEdQTExFTkFCTEUpKTsKKwlEUk1fREVCVUdfRFJJVkVSKCJHUFUgc3RhdHVzOiAweCUwOHhcbiIs IHZhbCk7CisKKwlyZXR1cm4gcnBzX3Jlc2V0KHJwcyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBs b25nIF9faXBzX2dmeF92YWwoc3RydWN0IGludGVsX2lwcyAqaXBzKQoreworCXN0cnVjdCBpbnRl bF9ycHMgKnJwcyA9IGNvbnRhaW5lcl9vZihpcHMsIHR5cGVvZigqcnBzKSwgaXBzKTsKKwlzdHJ1 Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBycHNfdG9fdW5jb3JlKHJwcyk7CisJdW5zaWduZWQg bG9uZyB0LCBjb3JyLCBzdGF0ZTEsIGNvcnIyLCBzdGF0ZTI7CisJdTMyIHB4dmlkLCBleHRfdjsK KworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm1jaGRldl9sb2NrKTsKKworCXB4dmlkID0gaW50ZWxf dW5jb3JlX3JlYWQodW5jb3JlLCBQWFZGUkVRKHJwcy0+Y3VyX2ZyZXEpKTsKKwlweHZpZCA9IChw eHZpZCA+PiAyNCkgJiAweDdmOworCWV4dF92ID0gcHZpZF90b19leHR2aWQocnBzX3RvX2k5MTUo cnBzKSwgcHh2aWQpOworCisJc3RhdGUxID0gZXh0X3Y7CisKKwkvKiBSZXZlbCBpbiB0aGUgZW1w aXJpY2FsbHkgZGVyaXZlZCBjb25zdGFudHMgKi8KKworCS8qIENvcnJlY3Rpb24gZmFjdG9yIGlu IDEvMTAwMDAwIHVuaXRzICovCisJdCA9IGlwc19tY2hfdmFsKHVuY29yZSk7CisJaWYgKHQgPiA4 MCkKKwkJY29yciA9IHQgKiAyMzQ5ICsgMTM1OTQwOworCWVsc2UgaWYgKHQgPj0gNTApCisJCWNv cnIgPSB0ICogOTY0ICsgMjkzMTc7CisJZWxzZSAvKiA8IDUwICovCisJCWNvcnIgPSB0ICogMzAx ICsgMTAwNDsKKworCWNvcnIgPSBjb3JyICogMTUwMTQyICogc3RhdGUxIC8gMTAwMDAgLSA3ODY0 MjsKKwljb3JyIC89IDEwMDAwMDsKKwljb3JyMiA9IGNvcnIgKiBpcHMtPmNvcnI7CisKKwlzdGF0 ZTIgPSBjb3JyMiAqIHN0YXRlMSAvIDEwMDAwOworCXN0YXRlMiAvPSAxMDA7IC8qIGNvbnZlcnQg dG8gbVcgKi8KKworCV9fZ2VuNV9pcHNfdXBkYXRlKGlwcyk7CisKKwlyZXR1cm4gaXBzLT5nZnhf cG93ZXIgKyBzdGF0ZTI7Cit9CisKK3ZvaWQgaW50ZWxfcnBzX2VuYWJsZShzdHJ1Y3QgaW50ZWxf cnBzICpycHMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkx NShycHMpOworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJwc190b191bmNvcmUocnBz KTsKKworCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KHVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7 CisJaWYgKElTX0NIRVJSWVZJRVcoaTkxNSkpCisJCXJwcy0+ZW5hYmxlZCA9IGNodl9ycHNfZW5h YmxlKHJwcyk7CisJZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhpOTE1KSkKKwkJcnBzLT5lbmFibGVk ID0gdmx2X3Jwc19lbmFibGUocnBzKTsKKwllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkK KwkJcnBzLT5lbmFibGVkID0gZ2VuOV9ycHNfZW5hYmxlKHJwcyk7CisJZWxzZSBpZiAoSU5URUxf R0VOKGk5MTUpID49IDgpCisJCXJwcy0+ZW5hYmxlZCA9IGdlbjhfcnBzX2VuYWJsZShycHMpOwor CWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA2KQorCQlycHMtPmVuYWJsZWQgPSBnZW42X3Jw c19lbmFibGUocnBzKTsKKwllbHNlIGlmIChJU19JUk9OTEFLRV9NKGk5MTUpKQorCQlycHMtPmVu YWJsZWQgPSBnZW41X3Jwc19lbmFibGUocnBzKTsKKwlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1 dCh1bmNvcmUsIEZPUkNFV0FLRV9BTEwpOworCWlmICghcnBzLT5lbmFibGVkKQorCQlyZXR1cm47 CisKKwlXQVJOX09OKHJwcy0+bWF4X2ZyZXEgPCBycHMtPm1pbl9mcmVxKTsKKwlXQVJOX09OKHJw cy0+aWRsZV9mcmVxID4gcnBzLT5tYXhfZnJlcSk7CisKKwlXQVJOX09OKHJwcy0+ZWZmaWNpZW50 X2ZyZXEgPCBycHMtPm1pbl9mcmVxKTsKKwlXQVJOX09OKHJwcy0+ZWZmaWNpZW50X2ZyZXEgPiBy cHMtPm1heF9mcmVxKTsKK30KKworc3RhdGljIHZvaWQgZ2VuNl9ycHNfZGlzYWJsZShzdHJ1Y3Qg aW50ZWxfcnBzICpycHMpCit7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHJwc190b191bmNvcmUocnBz KSwgR0VONl9SUF9DT05UUk9MLCAwKTsKK30KKwordm9pZCBpbnRlbF9ycHNfZGlzYWJsZShzdHJ1 Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBy cHNfdG9faTkxNShycHMpOworCisJcnBzLT5lbmFibGVkID0gZmFsc2U7CisKKwlpZiAoSU5URUxf R0VOKGk5MTUpID49IDYpCisJCWdlbjZfcnBzX2Rpc2FibGUocnBzKTsKKwllbHNlIGlmIChJU19J Uk9OTEFLRV9NKGk5MTUpKQorCQlnZW41X3Jwc19kaXNhYmxlKHJwcyk7Cit9CisKK3N0YXRpYyBp bnQgYnl0X2dwdV9mcmVxKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgaW50IHZhbCkKK3sKKwkvKgor CSAqIE4gPSB2YWwgLSAweGI3CisJICogU2xvdyA9IEZhc3QgPSBHUExMIHJlZiAqIE4KKwkgKi8K KwlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QocnBzLT5ncGxsX3JlZl9mcmVxICogKHZhbCAtIDB4 YjcpLCAxMDAwKTsKK30KKworc3RhdGljIGludCBieXRfZnJlcV9vcGNvZGUoc3RydWN0IGludGVs X3JwcyAqcnBzLCBpbnQgdmFsKQoreworCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVCgxMDAwICog dmFsLCBycHMtPmdwbGxfcmVmX2ZyZXEpICsgMHhiNzsKK30KKworc3RhdGljIGludCBjaHZfZ3B1 X2ZyZXEoc3RydWN0IGludGVsX3JwcyAqcnBzLCBpbnQgdmFsKQoreworCS8qCisJICogTiA9IHZh bCAvIDIKKwkgKiBDVSAoc2xvdykgPSBDVTJ4IChmYXN0KSAvIDIgPSBHUExMIHJlZiAqIE4gLyAy CisJICovCisJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHJwcy0+Z3BsbF9yZWZfZnJlcSAqIHZh bCwgMiAqIDIgKiAxMDAwKTsKK30KKworc3RhdGljIGludCBjaHZfZnJlcV9vcGNvZGUoc3RydWN0 IGludGVsX3JwcyAqcnBzLCBpbnQgdmFsKQoreworCS8qIENIViBuZWVkcyBldmVuIHZhbHVlcyAq LworCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVCgyICogMTAwMCAqIHZhbCwgcnBzLT5ncGxsX3Jl Zl9mcmVxKSAqIDI7Cit9CisKK2ludCBpbnRlbF9ncHVfZnJlcShzdHJ1Y3QgaW50ZWxfcnBzICpy cHMsIGludCB2YWwpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9f aTkxNShycHMpOworCisJaWYgKElOVEVMX0dFTihpOTE1KSA+PSA5KQorCQlyZXR1cm4gRElWX1JP VU5EX0NMT1NFU1QodmFsICogR1RfRlJFUVVFTkNZX01VTFRJUExJRVIsCisJCQkJCSBHRU45X0ZS RVFfU0NBTEVSKTsKKwllbHNlIGlmIChJU19DSEVSUllWSUVXKGk5MTUpKQorCQlyZXR1cm4gY2h2 X2dwdV9mcmVxKHJwcywgdmFsKTsKKwllbHNlIGlmIChJU19WQUxMRVlWSUVXKGk5MTUpKQorCQly ZXR1cm4gYnl0X2dwdV9mcmVxKHJwcywgdmFsKTsKKwllbHNlCisJCXJldHVybiB2YWwgKiBHVF9G UkVRVUVOQ1lfTVVMVElQTElFUjsKK30KKworaW50IGludGVsX2ZyZXFfb3Bjb2RlKHN0cnVjdCBp bnRlbF9ycHMgKnJwcywgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSA9IHJwc190b19pOTE1KHJwcyk7CisKKwlpZiAoSU5URUxfR0VOKGk5MTUpID49IDkpCisJCXJl dHVybiBESVZfUk9VTkRfQ0xPU0VTVCh2YWwgKiBHRU45X0ZSRVFfU0NBTEVSLAorCQkJCQkgR1Rf RlJFUVVFTkNZX01VTFRJUExJRVIpOworCWVsc2UgaWYgKElTX0NIRVJSWVZJRVcoaTkxNSkpCisJ CXJldHVybiBjaHZfZnJlcV9vcGNvZGUocnBzLCB2YWwpOworCWVsc2UgaWYgKElTX1ZBTExFWVZJ RVcoaTkxNSkpCisJCXJldHVybiBieXRfZnJlcV9vcGNvZGUocnBzLCB2YWwpOworCWVsc2UKKwkJ cmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHZhbCwgR1RfRlJFUVVFTkNZX01VTFRJUExJRVIpOwor fQorCitzdGF0aWMgdm9pZCB2bHZfaW5pdF9ncGxsX3JlZl9mcmVxKHN0cnVjdCBpbnRlbF9ycHMg KnJwcykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJw cyk7CisKKwlycHMtPmdwbGxfcmVmX2ZyZXEgPQorCQl2bHZfZ2V0X2Nja19jbG9jayhpOTE1LCAi R1BMTCByZWYiLAorCQkJCSAgQ0NLX0dQTExfQ0xPQ0tfQ09OVFJPTCwKKwkJCQkgIGk5MTUtPmN6 Y2xrX2ZyZXEpOworCisJRFJNX0RFQlVHX0RSSVZFUigiR1BMTCByZWZlcmVuY2UgZnJlcTogJWQg a0h6XG4iLCBycHMtPmdwbGxfcmVmX2ZyZXEpOworfQorCitzdGF0aWMgdm9pZCB2bHZfcnBzX2lu aXQoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKKwl1MzIgdmFsOworCisJdmx2X2lvc2Zfc2JfZ2V0KGk5 MTUsCisJCQlCSVQoVkxWX0lPU0ZfU0JfUFVOSVQpIHwKKwkJCUJJVChWTFZfSU9TRl9TQl9OQykg fAorCQkJQklUKFZMVl9JT1NGX1NCX0NDSykpOworCisJdmx2X2luaXRfZ3BsbF9yZWZfZnJlcShy cHMpOworCisJdmFsID0gdmx2X3B1bml0X3JlYWQoaTkxNSwgUFVOSVRfUkVHX0dQVV9GUkVRX1NU Uyk7CisJc3dpdGNoICgodmFsID4+IDYpICYgMykgeworCWNhc2UgMDoKKwljYXNlIDE6CisJCWk5 MTUtPm1lbV9mcmVxID0gODAwOworCQlicmVhazsKKwljYXNlIDI6CisJCWk5MTUtPm1lbV9mcmVx ID0gMTA2NjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlpOTE1LT5tZW1fZnJlcSA9IDEzMzM7CisJ CWJyZWFrOworCX0KKwlEUk1fREVCVUdfRFJJVkVSKCJERFIgc3BlZWQ6ICVkIE1IelxuIiwgaTkx NS0+bWVtX2ZyZXEpOworCisJcnBzLT5tYXhfZnJlcSA9IHZsdl9ycHNfbWF4X2ZyZXEocnBzKTsK KwlycHMtPnJwMF9mcmVxID0gcnBzLT5tYXhfZnJlcTsKKwlEUk1fREVCVUdfRFJJVkVSKCJtYXgg R1BVIGZyZXE6ICVkIE1IeiAoJXUpXG4iLAorCQkJIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5t YXhfZnJlcSksCisJCQkgcnBzLT5tYXhfZnJlcSk7CisKKwlycHMtPmVmZmljaWVudF9mcmVxID0g dmx2X3Jwc19ycGVfZnJlcShycHMpOworCURSTV9ERUJVR19EUklWRVIoIlJQZSBHUFUgZnJlcTog JWQgTUh6ICgldSlcbiIsCisJCQkgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPmVmZmljaWVudF9m cmVxKSwKKwkJCSBycHMtPmVmZmljaWVudF9mcmVxKTsKKworCXJwcy0+cnAxX2ZyZXEgPSB2bHZf cnBzX2d1YXJfZnJlcShycHMpOworCURSTV9ERUJVR19EUklWRVIoIlJQMShHdWFyIEZyZXEpIEdQ VSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKKwkJCSBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+cnAx X2ZyZXEpLAorCQkJIHJwcy0+cnAxX2ZyZXEpOworCisJcnBzLT5taW5fZnJlcSA9IHZsdl9ycHNf bWluX2ZyZXEocnBzKTsKKwlEUk1fREVCVUdfRFJJVkVSKCJtaW4gR1BVIGZyZXE6ICVkIE1IeiAo JXUpXG4iLAorCQkJIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5taW5fZnJlcSksCisJCQkgcnBz LT5taW5fZnJlcSk7CisKKwl2bHZfaW9zZl9zYl9wdXQoaTkxNSwKKwkJCUJJVChWTFZfSU9TRl9T Ql9QVU5JVCkgfAorCQkJQklUKFZMVl9JT1NGX1NCX05DKSB8CisJCQlCSVQoVkxWX0lPU0ZfU0Jf Q0NLKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNodl9ycHNfaW5pdChzdHJ1Y3QgaW50ZWxfcnBzICpy cHMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMp OworCXUzMiB2YWw7CisKKwl2bHZfaW9zZl9zYl9nZXQoaTkxNSwKKwkJCUJJVChWTFZfSU9TRl9T Ql9QVU5JVCkgfAorCQkJQklUKFZMVl9JT1NGX1NCX05DKSB8CisJCQlCSVQoVkxWX0lPU0ZfU0Jf Q0NLKSk7CisKKwl2bHZfaW5pdF9ncGxsX3JlZl9mcmVxKHJwcyk7CisKKwl2YWwgPSB2bHZfY2Nr X3JlYWQoaTkxNSwgQ0NLX0ZVU0VfUkVHKTsKKworCXN3aXRjaCAoKHZhbCA+PiAyKSAmIDB4Nykg eworCWNhc2UgMzoKKwkJaTkxNS0+bWVtX2ZyZXEgPSAyMDAwOworCQlicmVhazsKKwlkZWZhdWx0 OgorCQlpOTE1LT5tZW1fZnJlcSA9IDE2MDA7CisJCWJyZWFrOworCX0KKwlEUk1fREVCVUdfRFJJ VkVSKCJERFIgc3BlZWQ6ICVkIE1IelxuIiwgaTkxNS0+bWVtX2ZyZXEpOworCisJcnBzLT5tYXhf ZnJlcSA9IGNodl9ycHNfbWF4X2ZyZXEocnBzKTsKKwlycHMtPnJwMF9mcmVxID0gcnBzLT5tYXhf ZnJlcTsKKwlEUk1fREVCVUdfRFJJVkVSKCJtYXggR1BVIGZyZXE6ICVkIE1IeiAoJXUpXG4iLAor CQkJIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5tYXhfZnJlcSksCisJCQkgcnBzLT5tYXhfZnJl cSk7CisKKwlycHMtPmVmZmljaWVudF9mcmVxID0gY2h2X3Jwc19ycGVfZnJlcShycHMpOworCURS TV9ERUJVR19EUklWRVIoIlJQZSBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIsCisJCQkgaW50ZWxf Z3B1X2ZyZXEocnBzLCBycHMtPmVmZmljaWVudF9mcmVxKSwKKwkJCSBycHMtPmVmZmljaWVudF9m cmVxKTsKKworCXJwcy0+cnAxX2ZyZXEgPSBjaHZfcnBzX2d1YXJfZnJlcShycHMpOworCURSTV9E RUJVR19EUklWRVIoIlJQMShHdWFyKSBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIsCisJCQkgaW50 ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPnJwMV9mcmVxKSwKKwkJCSBycHMtPnJwMV9mcmVxKTsKKwor CXJwcy0+bWluX2ZyZXEgPSBjaHZfcnBzX21pbl9mcmVxKHJwcyk7CisJRFJNX0RFQlVHX0RSSVZF UigibWluIEdQVSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKKwkJCSBpbnRlbF9ncHVfZnJlcShycHMs IHJwcy0+bWluX2ZyZXEpLAorCQkJIHJwcy0+bWluX2ZyZXEpOworCisJdmx2X2lvc2Zfc2JfcHV0 KGk5MTUsCisJCQlCSVQoVkxWX0lPU0ZfU0JfUFVOSVQpIHwKKwkJCUJJVChWTFZfSU9TRl9TQl9O QykgfAorCQkJQklUKFZMVl9JT1NGX1NCX0NDSykpOworCisJV0FSTl9PTkNFKChycHMtPm1heF9m cmVxIHwgcnBzLT5lZmZpY2llbnRfZnJlcSB8IHJwcy0+cnAxX2ZyZXEgfAorCQkgICBycHMtPm1p bl9mcmVxKSAmIDEsCisJCSAgIk9kZCBHUFUgZnJlcSB2YWx1ZXNcbiIpOworfQorCitzdGF0aWMg dm9pZCB2bHZfYzBfcmVhZChzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUsIHN0cnVjdCBpbnRl bF9ycHNfZWkgKmVpKQoreworCWVpLT5rdGltZSA9IGt0aW1lX2dldF9yYXcoKTsKKwllaS0+cmVu ZGVyX2MwID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBWTFZfUkVOREVSX0MwX0NPVU5UKTsK KwllaS0+bWVkaWFfYzAgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFZMVl9NRURJQV9DMF9D T1VOVCk7Cit9CisKK3N0YXRpYyB1MzIgdmx2X3dhX2MwX2VpKHN0cnVjdCBpbnRlbF9ycHMgKnJw cywgdTMyIHBtX2lpcikKK3sKKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBycHNfdG9f dW5jb3JlKHJwcyk7CisJY29uc3Qgc3RydWN0IGludGVsX3Jwc19laSAqcHJldiA9ICZycHMtPmVp OworCXN0cnVjdCBpbnRlbF9ycHNfZWkgbm93OworCXUzMiBldmVudHMgPSAwOworCisJaWYgKChw bV9paXIgJiBHRU42X1BNX1JQX1VQX0VJX0VYUElSRUQpID09IDApCisJCXJldHVybiAwOworCisJ dmx2X2MwX3JlYWQodW5jb3JlLCAmbm93KTsKKworCWlmIChwcmV2LT5rdGltZSkgeworCQl1NjQg dGltZSwgYzA7CisJCXUzMiByZW5kZXIsIG1lZGlhOworCisJCXRpbWUgPSBrdGltZV91c19kZWx0 YShub3cua3RpbWUsIHByZXYtPmt0aW1lKTsKKworCQl0aW1lICo9IHJwc190b19pOTE1KHJwcykt PmN6Y2xrX2ZyZXE7CisKKwkJLyogV29ya2xvYWQgY2FuIGJlIHNwbGl0IGJldHdlZW4gcmVuZGVy ICsgbWVkaWEsCisJCSAqIGUuZy4gU3dhcEJ1ZmZlcnMgYmVpbmcgYmxpdHRlZCBpbiBYIGFmdGVy IGJlaW5nIHJlbmRlcmVkIGluCisJCSAqIG1lc2EuIFRvIGFjY291bnQgZm9yIHRoaXMgd2UgbmVl ZCB0byBjb21iaW5lIGJvdGggZW5naW5lcworCQkgKiBpbnRvIG91ciBhY3Rpdml0eSBjb3VudGVy LgorCQkgKi8KKwkJcmVuZGVyID0gbm93LnJlbmRlcl9jMCAtIHByZXYtPnJlbmRlcl9jMDsKKwkJ bWVkaWEgPSBub3cubWVkaWFfYzAgLSBwcmV2LT5tZWRpYV9jMDsKKwkJYzAgPSBtYXgocmVuZGVy LCBtZWRpYSk7CisJCWMwICo9IDEwMDAgKiAxMDAgPDwgODsgLyogdG8gdXNlY3MgYW5kIHNjYWxl IHRvIHRocmVzaG9sZCUgKi8KKworCQlpZiAoYzAgPiB0aW1lICogcnBzLT5wb3dlci51cF90aHJl c2hvbGQpCisJCQlldmVudHMgPSBHRU42X1BNX1JQX1VQX1RIUkVTSE9MRDsKKwkJZWxzZSBpZiAo YzAgPCB0aW1lICogcnBzLT5wb3dlci5kb3duX3RocmVzaG9sZCkKKwkJCWV2ZW50cyA9IEdFTjZf UE1fUlBfRE9XTl9USFJFU0hPTEQ7CisJfQorCisJcnBzLT5laSA9IG5vdzsKKwlyZXR1cm4gZXZl bnRzOworfQorCitzdGF0aWMgdm9pZCBycHNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsp Cit7CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigq cnBzKSwgd29yayk7CisJc3RydWN0IGludGVsX2d0ICpndCA9IHJwc190b19ndChycHMpOworCWJv b2wgY2xpZW50X2Jvb3N0ID0gZmFsc2U7CisJaW50IG5ld19mcmVxLCBhZGosIG1pbiwgbWF4Owor CXUzMiBwbV9paXIgPSAwOworCisJc3Bpbl9sb2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKKwlwbV9p aXIgPSBmZXRjaF9hbmRfemVybygmcnBzLT5wbV9paXIpOworCWNsaWVudF9ib29zdCA9IGF0b21p Y19yZWFkKCZycHMtPm51bV93YWl0ZXJzKTsKKwlzcGluX3VubG9ja19pcnEoJmd0LT5pcnFfbG9j ayk7CisKKwkvKiBNYWtlIHN1cmUgd2UgZGlkbid0IHF1ZXVlIGFueXRoaW5nIHdlJ3JlIG5vdCBn b2luZyB0byBwcm9jZXNzLiAqLworCWlmICgocG1faWlyICYgcnBzLT5wbV9ldmVudHMpID09IDAg JiYgIWNsaWVudF9ib29zdCkKKwkJZ290byBvdXQ7CisKKwltdXRleF9sb2NrKCZycHMtPmxvY2sp OworCisJcG1faWlyIHw9IHZsdl93YV9jMF9laShycHMsIHBtX2lpcik7CisKKwlhZGogPSBycHMt Pmxhc3RfYWRqOworCW5ld19mcmVxID0gcnBzLT5jdXJfZnJlcTsKKwltaW4gPSBycHMtPm1pbl9m cmVxX3NvZnRsaW1pdDsKKwltYXggPSBycHMtPm1heF9mcmVxX3NvZnRsaW1pdDsKKwlpZiAoY2xp ZW50X2Jvb3N0KQorCQltYXggPSBycHMtPm1heF9mcmVxOworCWlmIChjbGllbnRfYm9vc3QgJiYg bmV3X2ZyZXEgPCBycHMtPmJvb3N0X2ZyZXEpIHsKKwkJbmV3X2ZyZXEgPSBycHMtPmJvb3N0X2Zy ZXE7CisJCWFkaiA9IDA7CisJfSBlbHNlIGlmIChwbV9paXIgJiBHRU42X1BNX1JQX1VQX1RIUkVT SE9MRCkgeworCQlpZiAoYWRqID4gMCkKKwkJCWFkaiAqPSAyOworCQllbHNlIC8qIENIViBuZWVk cyBldmVuIGVuY29kZSB2YWx1ZXMgKi8KKwkJCWFkaiA9IElTX0NIRVJSWVZJRVcoZ3QtPmk5MTUp ID8gMiA6IDE7CisKKwkJaWYgKG5ld19mcmVxID49IHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KQor CQkJYWRqID0gMDsKKwl9IGVsc2UgaWYgKGNsaWVudF9ib29zdCkgeworCQlhZGogPSAwOworCX0g ZWxzZSBpZiAocG1faWlyICYgR0VONl9QTV9SUF9ET1dOX1RJTUVPVVQpIHsKKwkJaWYgKHJwcy0+ Y3VyX2ZyZXEgPiBycHMtPmVmZmljaWVudF9mcmVxKQorCQkJbmV3X2ZyZXEgPSBycHMtPmVmZmlj aWVudF9mcmVxOworCQllbHNlIGlmIChycHMtPmN1cl9mcmVxID4gcnBzLT5taW5fZnJlcV9zb2Z0 bGltaXQpCisJCQluZXdfZnJlcSA9IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0OworCQlhZGogPSAw OworCX0gZWxzZSBpZiAocG1faWlyICYgR0VONl9QTV9SUF9ET1dOX1RIUkVTSE9MRCkgeworCQlp ZiAoYWRqIDwgMCkKKwkJCWFkaiAqPSAyOworCQllbHNlIC8qIENIViBuZWVkcyBldmVuIGVuY29k ZSB2YWx1ZXMgKi8KKwkJCWFkaiA9IElTX0NIRVJSWVZJRVcoZ3QtPmk5MTUpID8gLTIgOiAtMTsK KworCQlpZiAobmV3X2ZyZXEgPD0gcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQpCisJCQlhZGogPSAw OworCX0gZWxzZSB7IC8qIHVua25vd24gZXZlbnQgKi8KKwkJYWRqID0gMDsKKwl9CisKKwlycHMt Pmxhc3RfYWRqID0gYWRqOworCisJLyoKKwkgKiBMaW1pdCBkZWJvb3N0aW5nIGFuZCBib29zdGlu ZyB0byBrZWVwIG91cnNlbHZlcyBhdCB0aGUgZXh0cmVtZXMKKwkgKiB3aGVuIGluIHRoZSByZXNw ZWN0aXZlIHBvd2VyIG1vZGVzIChpLmUuIHNsb3dseSBkZWNyZWFzZSBmcmVxdWVuY2llcworCSAq IHdoaWxlIGluIHRoZSBISUdIX1BPV0VSIHpvbmUgYW5kIHNsb3dseSBpbmNyZWFzZSBmcmVxdWVu Y2llcyB3aGlsZQorCSAqIGluIHRoZSBMT1dfUE9XRVIgem9uZSkuIE9uIGlkbGUsIHdlIHdpbGwg aGl0IHRoZSB0aW1lb3V0IGFuZCBkcm9wCisJICogdG8gdGhlIG5leHQgbGV2ZWwgcXVpY2tseSwg YW5kIGNvbnZlcnNlbHkgaWYgYnVzeSB3ZSBleHBlY3QgdG8KKwkgKiBoaXQgYSB3YWl0Ym9vc3Qg YW5kIHJhcGlkbHkgc3dpdGNoIGludG8gbWF4IHBvd2VyLgorCSAqLworCWlmICgoYWRqIDwgMCAm JiBycHMtPnBvd2VyLm1vZGUgPT0gSElHSF9QT1dFUikgfHwKKwkgICAgKGFkaiA+IDAgJiYgcnBz LT5wb3dlci5tb2RlID09IExPV19QT1dFUikpCisJCXJwcy0+bGFzdF9hZGogPSAwOworCisJLyog c3lzZnMgZnJlcXVlbmN5IGludGVyZmFjZXMgbWF5IGhhdmUgc251Y2sgaW4gd2hpbGUgc2Vydmlj aW5nIHRoZQorCSAqIGludGVycnVwdAorCSAqLworCW5ld19mcmVxICs9IGFkajsKKwluZXdfZnJl cSA9IGNsYW1wX3QoaW50LCBuZXdfZnJlcSwgbWluLCBtYXgpOworCisJaWYgKGludGVsX3Jwc19z ZXQocnBzLCBuZXdfZnJlcSkpIHsKKwkJRFJNX0RFQlVHX0RSSVZFUigiRmFpbGVkIHRvIHNldCBu ZXcgR1BVIGZyZXF1ZW5jeVxuIik7CisJCXJwcy0+bGFzdF9hZGogPSAwOworCX0KKworCW11dGV4 X3VubG9jaygmcnBzLT5sb2NrKTsKKworb3V0OgorCXNwaW5fbG9ja19pcnEoJmd0LT5pcnFfbG9j ayk7CisJZ2VuNl9ndF9wbV91bm1hc2tfaXJxKGd0LCBycHMtPnBtX2V2ZW50cyk7CisJc3Bpbl91 bmxvY2tfaXJxKCZndC0+aXJxX2xvY2spOworfQorCit2b2lkIGdlbjExX3Jwc19pcnFfaGFuZGxl cihzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIHUzMiBwbV9paXIpCit7CisJc3RydWN0IGludGVsX2d0 ICpndCA9IHJwc190b19ndChycHMpOworCWNvbnN0IHUzMiBldmVudHMgPSBycHMtPnBtX2V2ZW50 cyAmIHBtX2lpcjsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmd0LT5pcnFfbG9jayk7CisKKwlp ZiAodW5saWtlbHkoIWV2ZW50cykpCisJCXJldHVybjsKKworCWdlbjZfZ3RfcG1fbWFza19pcnEo Z3QsIGV2ZW50cyk7CisKKwlycHMtPnBtX2lpciB8PSBldmVudHM7CisJc2NoZWR1bGVfd29yaygm cnBzLT53b3JrKTsKK30KKwordm9pZCBnZW42X3Jwc19pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxf cnBzICpycHMsIHUzMiBwbV9paXIpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUg PSBycHNfdG9faTkxNShycHMpOworCisJaWYgKHBtX2lpciAmIHJwcy0+cG1fZXZlbnRzKSB7CisJ CXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBycHNfdG9fZ3QocnBzKTsKKworCQlzcGluX2xvY2soJmd0 LT5pcnFfbG9jayk7CisJCWdlbjZfZ3RfcG1fbWFza19pcnEoZ3QsIHBtX2lpciAmIHJwcy0+cG1f ZXZlbnRzKTsKKwkJcnBzLT5wbV9paXIgfD0gcG1faWlyICYgcnBzLT5wbV9ldmVudHM7CisJCXNj aGVkdWxlX3dvcmsoJnJwcy0+d29yayk7CisJCXNwaW5fdW5sb2NrKCZndC0+aXJxX2xvY2spOwor CX0KKworCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOCkKKwkJcmV0dXJuOworCisJaWYgKHBtX2lp ciAmIFBNX1ZFQk9YX1VTRVJfSU5URVJSVVBUKQorCQlpbnRlbF9lbmdpbmVfYnJlYWRjcnVtYnNf aXJxKGk5MTUtPmVuZ2luZVtWRUNTMF0pOworCisJaWYgKHBtX2lpciAmIFBNX1ZFQk9YX0NTX0VS Uk9SX0lOVEVSUlVQVCkKKwkJRFJNX0RFQlVHKCJDb21tYW5kIHBhcnNlciBlcnJvciwgcG1faWly IDB4JTA4eFxuIiwgcG1faWlyKTsKK30KKwordm9pZCBnZW41X3Jwc19pcnFfaGFuZGxlcihzdHJ1 Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBz X3RvX3VuY29yZShycHMpOworCXUzMiBidXN5X3VwLCBidXN5X2Rvd24sIG1heF9hdmcsIG1pbl9h dmc7CisJdTggbmV3X2ZyZXE7CisKKwlzcGluX2xvY2soJm1jaGRldl9sb2NrKTsKKworCWludGVs X3VuY29yZV93cml0ZTE2KHVuY29yZSwKKwkJCSAgICAgTUVNSU5UUlNUUywKKwkJCSAgICAgaW50 ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBNRU1JTlRSU1RTKSk7CisKKwlpbnRlbF91bmNvcmVfd3Jp dGUxNih1bmNvcmUsIE1FTUlOVFJTVFMsIE1FTUlOVF9FVkFMX0NIRyk7CisJYnVzeV91cCA9IGlu dGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUkNQUkVWQlNZVFVQQVZHKTsKKwlidXN5X2Rvd24gPSBp bnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFJDUFJFVkJTWVRETkFWRyk7CisJbWF4X2F2ZyA9IGlu dGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUkNCTUFYQVZHKTsKKwltaW5fYXZnID0gaW50ZWxfdW5j b3JlX3JlYWQodW5jb3JlLCBSQ0JNSU5BVkcpOworCisJLyogSGFuZGxlIFJDUyBjaGFuZ2UgcmVx dWVzdCBmcm9tIGh3ICovCisJbmV3X2ZyZXEgPSBycHMtPmN1cl9mcmVxOworCWlmIChidXN5X3Vw ID4gbWF4X2F2ZykKKwkJbmV3X2ZyZXErKzsKKwllbHNlIGlmIChidXN5X2Rvd24gPCBtaW5fYXZn KQorCQluZXdfZnJlcS0tOworCW5ld19mcmVxID0gY2xhbXAobmV3X2ZyZXEsCisJCQkgcnBzLT5t aW5fZnJlcV9zb2Z0bGltaXQsCisJCQkgcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQpOworCisJaWYg KG5ld19mcmVxICE9IHJwcy0+Y3VyX2ZyZXEgJiYgZ2VuNV9ycHNfc2V0KHJwcywgbmV3X2ZyZXEp KQorCQlycHMtPmN1cl9mcmVxID0gbmV3X2ZyZXE7CisKKwlzcGluX3VubG9jaygmbWNoZGV2X2xv Y2spOworfQorCit2b2lkIGludGVsX3Jwc19pbml0KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisKKwlt dXRleF9pbml0KCZycHMtPmxvY2spOworCW11dGV4X2luaXQoJnJwcy0+cG93ZXIubXV0ZXgpOwor CisJSU5JVF9XT1JLKCZycHMtPndvcmssIHJwc193b3JrKTsKKworCWF0b21pY19zZXQoJnJwcy0+ bnVtX3dhaXRlcnMsIDApOworCisJaWYgKElTX0NIRVJSWVZJRVcoaTkxNSkpCisJCWNodl9ycHNf aW5pdChycHMpOworCWVsc2UgaWYgKElTX1ZBTExFWVZJRVcoaTkxNSkpCisJCXZsdl9ycHNfaW5p dChycHMpOworCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA2KQorCQlnZW42X3Jwc19pbml0 KHJwcyk7CisJZWxzZSBpZiAoSVNfSVJPTkxBS0VfTShpOTE1KSkKKwkJZ2VuNV9ycHNfaW5pdChy cHMpOworCisJLyogRGVyaXZlIGluaXRpYWwgdXNlciBwcmVmZXJlbmNlcy9saW1pdHMgZnJvbSB0 aGUgaGFyZHdhcmUgbGltaXRzICovCisJcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQgPSBycHMtPm1h eF9mcmVxOworCXJwcy0+bWluX2ZyZXFfc29mdGxpbWl0ID0gcnBzLT5taW5fZnJlcTsKKworCS8q IEFmdGVyIHNldHRpbmcgbWF4LXNvZnRsaW1pdCwgZmluZCB0aGUgb3ZlcmNsb2NrIG1heCBmcmVx ICovCisJaWYgKElTX0dFTihpOTE1LCA2KSB8fCBJU19JVllCUklER0UoaTkxNSkgfHwgSVNfSEFT V0VMTChpOTE1KSkgeworCQl1MzIgcGFyYW1zID0gMDsKKworCQlzYW5keWJyaWRnZV9wY29kZV9y ZWFkKGk5MTUsIEdFTjZfUkVBRF9PQ19QQVJBTVMsCisJCQkJICAgICAgICZwYXJhbXMsIE5VTEwp OworCQlpZiAocGFyYW1zICYgQklUKDMxKSkgeyAvKiBPQyBzdXBwb3J0ZWQgKi8KKwkJCURSTV9E RUJVR19EUklWRVIoIk92ZXJjbG9ja2luZyBzdXBwb3J0ZWQsIG1heDogJWRNSHosIG92ZXJjbG9j azogJWRNSHpcbiIsCisJCQkJCSAocnBzLT5tYXhfZnJlcSAmIDB4ZmYpICogNTAsCisJCQkJCSAo cGFyYW1zICYgMHhmZikgKiA1MCk7CisJCQlycHMtPm1heF9mcmVxID0gcGFyYW1zICYgMHhmZjsK KwkJfQorCX0KKworCS8qIEZpbmFsbHkgYWxsb3cgdXMgdG8gYm9vc3QgdG8gbWF4IGJ5IGRlZmF1 bHQgKi8KKwlycHMtPmJvb3N0X2ZyZXEgPSBycHMtPm1heF9mcmVxOworCXJwcy0+aWRsZV9mcmVx ID0gcnBzLT5taW5fZnJlcTsKKwlycHMtPmN1cl9mcmVxID0gcnBzLT5pZGxlX2ZyZXE7CisKKwly cHMtPnBtX2ludHJtc2tfbWJ6ID0gMDsKKworCS8qCisJICogU05CLElWQixIU1cgY2FuIHdoaWxl IFZMVixDSFYgbWF5IGhhcmQgaGFuZyBvbiBsb29waW5nIGJhdGNoYnVmZmVyCisJICogaWYgR0VO Nl9QTV9VUF9FSV9FWFBJUkVEIGlzIG1hc2tlZC4KKwkgKgorCSAqIFRPRE86IHZlcmlmeSBpZiB0 aGlzIGNhbiBiZSByZXByb2R1Y2VkIG9uIFZMVixDSFYuCisJICovCisJaWYgKElOVEVMX0dFTihp OTE1KSA8PSA3KQorCQlycHMtPnBtX2ludHJtc2tfbWJ6IHw9IEdFTjZfUE1fUlBfVVBfRUlfRVhQ SVJFRDsKKworCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOCkKKwkJcnBzLT5wbV9pbnRybXNrX21i eiB8PSBHRU44X1BNSU5UUl9ESVNBQkxFX1JFRElSRUNUX1RPX0dVQzsKK30KKwordTMyIGludGVs X2dldF9jYWdmKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTMyIHJwc3RhdCkKK3sKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJdTMyIGNhZ2Y7CisK KwlpZiAoSU5URUxfR0VOKGk5MTUpID49IDkpCisJCWNhZ2YgPSAocnBzdGF0ICYgR0VOOV9DQUdG X01BU0spID4+IEdFTjlfQ0FHRl9TSElGVDsKKwllbHNlIGlmIChJU19IQVNXRUxMKGk5MTUpIHx8 IElTX0JST0FEV0VMTChpOTE1KSkKKwkJY2FnZiA9IChycHN0YXQgJiBIU1dfQ0FHRl9NQVNLKSA+ PiBIU1dfQ0FHRl9TSElGVDsKKwllbHNlCisJCWNhZ2YgPSAocnBzdGF0ICYgR0VONl9DQUdGX01B U0spID4+IEdFTjZfQ0FHRl9TSElGVDsKKworCXJldHVybiAgY2FnZjsKK30KKworLyogRXh0ZXJu YWwgaW50ZXJmYWNlIGZvciBpbnRlbF9pcHMua28gKi8KKworc3RhdGljIHN0cnVjdCBkcm1faTkx NV9wcml2YXRlIF9fcmN1ICppcHNfbWNoZGV2OworCisvKioKKyAqIFRlbGxzIHRoZSBpbnRlbF9p cHMgZHJpdmVyIHRoYXQgdGhlIGk5MTUgZHJpdmVyIGlzIG5vdyBsb2FkZWQsIGlmCisgKiBJUFMg Z290IGxvYWRlZCBmaXJzdC4KKyAqCisgKiBUaGlzIGF3a3dhcmQgZGFuY2UgaXMgc28gdGhhdCBu ZWl0aGVyIG1vZHVsZSBoYXMgdG8gZGVwZW5kIG9uIHRoZQorICogb3RoZXIgaW4gb3JkZXIgZm9y IElQUyB0byBkbyB0aGUgYXBwcm9wcmlhdGUgY29tbXVuaWNhdGlvbiBvZgorICogR1BVIHR1cmJv IGxpbWl0cyB0byBpOTE1LgorICovCitzdGF0aWMgdm9pZAoraXBzX3BpbmdfZm9yX2k5MTVfbG9h ZCh2b2lkKQoreworCXZvaWQgKCpsaW5rKSh2b2lkKTsKKworCWxpbmsgPSBzeW1ib2xfZ2V0KGlw c19saW5rX3RvX2k5MTVfZHJpdmVyKTsKKwlpZiAobGluaykgeworCQlsaW5rKCk7CisJCXN5bWJv bF9wdXQoaXBzX2xpbmtfdG9faTkxNV9kcml2ZXIpOworCX0KK30KKwordm9pZCBpbnRlbF9ycHNf ZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgaW50ZWxf Z3QgKmd0ID0gcnBzX3RvX2d0KHJwcyk7CisKKwkvKgorCSAqIFdlIG9ubHkgcmVnaXN0ZXIgdGhl IGk5MTUgaXBzIHBhcnQgd2l0aCBpbnRlbC1pcHMgb25jZSBldmVyeXRoaW5nIGlzCisJICogc2V0 IHVwLCB0byBhdm9pZCBpbnRlbC1pcHMgc25lYWtpbmcgaW4gYW5kIHJlYWRpbmcgYm9ndXMgdmFs dWVzLgorCSAqLworCWlmIChJU19HRU4oZ3QtPmk5MTUsIDUpKSB7CisJCXJjdV9hc3NpZ25fcG9p bnRlcihpcHNfbWNoZGV2LCBndC0+aTkxNSk7CisJCWlwc19waW5nX2Zvcl9pOTE1X2xvYWQoKTsK Kwl9Cit9CisKK3ZvaWQgaW50ZWxfcnBzX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBpbnRlbF9y cHMgKnJwcykKK3sKKwlyY3VfYXNzaWduX3BvaW50ZXIoaXBzX21jaGRldiwgTlVMTCk7Cit9CisK K3N0YXRpYyBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqbWNoZGV2X2dldCh2b2lkKQoreworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1OworCisJcmN1X3JlYWRfbG9jaygpOworCWk5MTUg PSByY3VfZGVyZWZlcmVuY2UoaXBzX21jaGRldik7CisJaWYgKCFrcmVmX2dldF91bmxlc3NfemVy bygmaTkxNS0+ZHJtLnJlZikpCisJCWk5MTUgPSBOVUxMOworCXJjdV9yZWFkX3VubG9jaygpOwor CisJcmV0dXJuIGk5MTU7Cit9CisKKy8qKgorICogaTkxNV9yZWFkX21jaF92YWwgLSByZXR1cm4g dmFsdWUgZm9yIElQUyB1c2UKKyAqCisgKiBDYWxjdWxhdGUgYW5kIHJldHVybiBhIHZhbHVlIGZv ciB0aGUgSVBTIGRyaXZlciB0byB1c2Ugd2hlbiBkZWNpZGluZyB3aGV0aGVyCisgKiB3ZSBoYXZl IHRoZXJtYWwgYW5kIHBvd2VyIGhlYWRyb29tIHRvIGluY3JlYXNlIENQVSBvciBHUFUgcG93ZXIg YnVkZ2V0LgorICovCit1bnNpZ25lZCBsb25nIGk5MTVfcmVhZF9tY2hfdmFsKHZvaWQpCit7CisJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7CisJdW5zaWduZWQgbG9uZyBjaGlwc2V0X3Zh bCA9IDA7CisJdW5zaWduZWQgbG9uZyBncmFwaGljc192YWwgPSAwOworCWludGVsX3dha2VyZWZf dCB3YWtlcmVmOworCisJaTkxNSA9IG1jaGRldl9nZXQoKTsKKwlpZiAoIWk5MTUpCisJCXJldHVy biAwOworCisJd2l0aF9pbnRlbF9ydW50aW1lX3BtKCZpOTE1LT5ydW50aW1lX3BtLCB3YWtlcmVm KSB7CisJCXN0cnVjdCBpbnRlbF9pcHMgKmlwcyA9ICZpOTE1LT5ndC5ycHMuaXBzOworCisJCXNw aW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKKwkJY2hpcHNldF92YWwgPSBfX2lwc19jaGlwc2V0 X3ZhbChpcHMpOworCQlncmFwaGljc192YWwgPSBfX2lwc19nZnhfdmFsKGlwcyk7CisJCXNwaW5f dW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOworCX0KKworCWRybV9kZXZfcHV0KCZpOTE1LT5kcm0p OworCXJldHVybiBjaGlwc2V0X3ZhbCArIGdyYXBoaWNzX3ZhbDsKK30KK0VYUE9SVF9TWU1CT0xf R1BMKGk5MTVfcmVhZF9tY2hfdmFsKTsKKworLyoqCisgKiBpOTE1X2dwdV9yYWlzZSAtIHJhaXNl IEdQVSBmcmVxdWVuY3kgbGltaXQKKyAqCisgKiBSYWlzZSB0aGUgbGltaXQ7IElQUyBpbmRpY2F0 ZXMgd2UgaGF2ZSB0aGVybWFsIGhlYWRyb29tLgorICovCitib29sIGk5MTVfZ3B1X3JhaXNlKHZv aWQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7CisJc3RydWN0IGludGVsX3Jw cyAqcnBzOworCisJaTkxNSA9IG1jaGRldl9nZXQoKTsKKwlpZiAoIWk5MTUpCisJCXJldHVybiBm YWxzZTsKKworCXJwcyA9ICZpOTE1LT5ndC5ycHM7CisKKwlzcGluX2xvY2tfaXJxKCZtY2hkZXZf bG9jayk7CisJaWYgKHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0IDwgcnBzLT5tYXhfZnJlcSkKKwkJ cnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQrKzsKKwlzcGluX3VubG9ja19pcnEoJm1jaGRldl9sb2Nr KTsKKworCWRybV9kZXZfcHV0KCZpOTE1LT5kcm0pOworCXJldHVybiB0cnVlOworfQorRVhQT1JU X1NZTUJPTF9HUEwoaTkxNV9ncHVfcmFpc2UpOworCisvKioKKyAqIGk5MTVfZ3B1X2xvd2VyIC0g bG93ZXIgR1BVIGZyZXF1ZW5jeSBsaW1pdAorICoKKyAqIElQUyBpbmRpY2F0ZXMgd2UncmUgY2xv c2UgdG8gYSB0aGVybWFsIGxpbWl0LCBzbyB0aHJvdHRsZSBiYWNrIHRoZSBHUFUKKyAqIGZyZXF1 ZW5jeSBtYXhpbXVtLgorICovCitib29sIGk5MTVfZ3B1X2xvd2VyKHZvaWQpCit7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7CisJc3RydWN0IGludGVsX3JwcyAqcnBzOworCisJaTkx NSA9IG1jaGRldl9nZXQoKTsKKwlpZiAoIWk5MTUpCisJCXJldHVybiBmYWxzZTsKKworCXJwcyA9 ICZpOTE1LT5ndC5ycHM7CisKKwlzcGluX2xvY2tfaXJxKCZtY2hkZXZfbG9jayk7CisJaWYgKHJw cy0+bWF4X2ZyZXFfc29mdGxpbWl0ID4gcnBzLT5taW5fZnJlcSkKKwkJcnBzLT5tYXhfZnJlcV9z b2Z0bGltaXQtLTsKKwlzcGluX3VubG9ja19pcnEoJm1jaGRldl9sb2NrKTsKKworCWRybV9kZXZf cHV0KCZpOTE1LT5kcm0pOworCXJldHVybiB0cnVlOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaTkx NV9ncHVfbG93ZXIpOworCisvKioKKyAqIGk5MTVfZ3B1X2J1c3kgLSBpbmRpY2F0ZSBHUFUgYnVz aW5lc3MgdG8gSVBTCisgKgorICogVGVsbCB0aGUgSVBTIGRyaXZlciB3aGV0aGVyIG9yIG5vdCB0 aGUgR1BVIGlzIGJ1c3kuCisgKi8KK2Jvb2wgaTkxNV9ncHVfYnVzeSh2b2lkKQoreworCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1OworCWJvb2wgcmV0OworCisJaTkxNSA9IG1jaGRldl9n ZXQoKTsKKwlpZiAoIWk5MTUpCisJCXJldHVybiBmYWxzZTsKKworCXJldCA9IGk5MTUtPmd0LmF3 YWtlOworCisJZHJtX2Rldl9wdXQoJmk5MTUtPmRybSk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9S VF9TWU1CT0xfR1BMKGk5MTVfZ3B1X2J1c3kpOworCisvKioKKyAqIGk5MTVfZ3B1X3R1cmJvX2Rp c2FibGUgLSBkaXNhYmxlIGdyYXBoaWNzIHR1cmJvCisgKgorICogRGlzYWJsZSBncmFwaGljcyB0 dXJibyBieSByZXNldHRpbmcgdGhlIG1heCBmcmVxdWVuY3kgYW5kIHNldHRpbmcgdGhlCisgKiBj dXJyZW50IGZyZXF1ZW5jeSB0byB0aGUgZGVmYXVsdC4KKyAqLworYm9vbCBpOTE1X2dwdV90dXJi b19kaXNhYmxlKHZvaWQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7CisJc3Ry dWN0IGludGVsX3JwcyAqcnBzOworCWJvb2wgcmV0OworCisJaTkxNSA9IG1jaGRldl9nZXQoKTsK KwlpZiAoIWk5MTUpCisJCXJldHVybiBmYWxzZTsKKworCXJwcyA9ICZpOTE1LT5ndC5ycHM7CisK KwlzcGluX2xvY2tfaXJxKCZtY2hkZXZfbG9jayk7CisJcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQg PSBycHMtPm1pbl9mcmVxOworCXJldCA9IGdlbjVfcnBzX3NldCgmaTkxNS0+Z3QucnBzLCBycHMt Pm1pbl9mcmVxKTsKKwlzcGluX3VubG9ja19pcnEoJm1jaGRldl9sb2NrKTsKKworCWRybV9kZXZf cHV0KCZpOTE1LT5kcm0pOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpOTE1 X2dwdV90dXJib19kaXNhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX3Jwcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45OTdhNGI0ZTAyMDcKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ycHMuaApAQCAtMCwwICsx LDM3IEBACisvKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAorICoKKyAqIENvcHly aWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBJTlRFTF9SUFNf SAorI2RlZmluZSBJTlRFTF9SUFNfSAorCisjaW5jbHVkZSAiaW50ZWxfcnBzX3R5cGVzLmgiCisK K3N0cnVjdCBpOTE1X3JlcXVlc3Q7CisKK3ZvaWQgaW50ZWxfcnBzX2luaXQoc3RydWN0IGludGVs X3JwcyAqcnBzKTsKKwordm9pZCBpbnRlbF9ycHNfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBpbnRl bF9ycHMgKnJwcyk7Cit2b2lkIGludGVsX3Jwc19kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgaW50 ZWxfcnBzICpycHMpOworCit2b2lkIGludGVsX3Jwc19lbmFibGUoc3RydWN0IGludGVsX3JwcyAq cnBzKTsKK3ZvaWQgaW50ZWxfcnBzX2Rpc2FibGUoc3RydWN0IGludGVsX3JwcyAqcnBzKTsKKwor dm9pZCBpbnRlbF9ycHNfcGFyayhzdHJ1Y3QgaW50ZWxfcnBzICpycHMpOwordm9pZCBpbnRlbF9y cHNfdW5wYXJrKHN0cnVjdCBpbnRlbF9ycHMgKnJwcyk7Cit2b2lkIGludGVsX3Jwc19ib29zdChz dHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSk7CisKK2ludCBpbnRlbF9ycHNfc2V0KHN0cnVjdCBpbnRl bF9ycHMgKnJwcywgdTggdmFsKTsKK3ZvaWQgaW50ZWxfcnBzX21hcmtfaW50ZXJhY3RpdmUoc3Ry dWN0IGludGVsX3JwcyAqcnBzLCBib29sIGludGVyYWN0aXZlKTsKKworaW50IGludGVsX2dwdV9m cmVxKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgaW50IHZhbCk7CitpbnQgaW50ZWxfZnJlcV9vcGNv ZGUoc3RydWN0IGludGVsX3JwcyAqcnBzLCBpbnQgdmFsKTsKK3UzMiBpbnRlbF9nZXRfY2FnZihz dHJ1Y3QgaW50ZWxfcnBzICpycHMsIHUzMiBycHN0YXQxKTsKKwordm9pZCBnZW41X3Jwc19pcnFf aGFuZGxlcihzdHJ1Y3QgaW50ZWxfcnBzICpycHMpOwordm9pZCBnZW42X3Jwc19pcnFfaGFuZGxl cihzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIHUzMiBwbV9paXIpOwordm9pZCBnZW4xMV9ycHNfaXJx X2hhbmRsZXIoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1MzIgcG1faWlyKTsKKworI2VuZGlmIC8q IElOVEVMX1JQU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9ycHNfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jwc190eXBlcy5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNDBlYjFmYjY1MWU3Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzX3R5cGVz LmgKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQK KyAqCisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpZm5k ZWYgSU5URUxfUlBTX1RZUEVTX0gKKyNkZWZpbmUgSU5URUxfUlBTX1RZUEVTX0gKKworI2luY2x1 ZGUgPGxpbnV4L2F0b21pYy5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CisjaW5jbHVkZSA8 bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4 L3dvcmtxdWV1ZS5oPgorCitzdHJ1Y3QgaW50ZWxfaXBzIHsKKwl1NjQgbGFzdF9jb3VudDE7CisJ dW5zaWduZWQgbG9uZyBsYXN0X3RpbWUxOworCXVuc2lnbmVkIGxvbmcgY2hpcHNldF9wb3dlcjsK Kwl1NjQgbGFzdF9jb3VudDI7CisJdTY0IGxhc3RfdGltZTI7CisJdW5zaWduZWQgbG9uZyBnZnhf cG93ZXI7CisJdTggY29ycjsKKworCWludCBjLCBtOworfTsKKworc3RydWN0IGludGVsX3Jwc19l aSB7CisJa3RpbWVfdCBrdGltZTsKKwl1MzIgcmVuZGVyX2MwOworCXUzMiBtZWRpYV9jMDsKK307 CisKK3N0cnVjdCBpbnRlbF9ycHMgeworCXN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0cyBl bmFibGluZyBhbmQgdGhlIHdvcmtlciAqLworCisJLyoKKwkgKiB3b3JrLCBpbnRlcnJ1cHRzX2Vu YWJsZWQgYW5kIHBtX2lpciBhcmUgcHJvdGVjdGVkIGJ5CisJICogZGV2X3ByaXYtPmlycV9sb2Nr CisJICovCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJYm9vbCBlbmFibGVkOworCWJvb2wg YWN0aXZlOworCXUzMiBwbV9paXI7CisKKwkvKiBQTSBpbnRlcnJ1cHQgYml0cyB0aGF0IHNob3Vs ZCBuZXZlciBiZSBtYXNrZWQgKi8KKwl1MzIgcG1faW50cm1za19tYno7CisJdTMyIHBtX2V2ZW50 czsKKworCS8qIEZyZXF1ZW5jaWVzIGFyZSBzdG9yZWQgaW4gcG90ZW50aWFsbHkgcGxhdGZvcm0g ZGVwZW5kZW50IG11bHRpcGxlcy4KKwkgKiBJbiBvdGhlciB3b3JkcywgKl9mcmVxIG5lZWRzIHRv IGJlIG11bHRpcGxpZWQgYnkgWCB0byBiZSBpbnRlcmVzdGluZy4KKwkgKiBTb2Z0IGxpbWl0cyBh cmUgdGhvc2Ugd2hpY2ggYXJlIHVzZWQgZm9yIHRoZSBkeW5hbWljIHJlY2xvY2tpbmcgZG9uZQor CSAqIGJ5IHRoZSBkcml2ZXIgKHJhaXNlIGZyZXF1ZW5jaWVzIHVuZGVyIGhlYXZ5IGxvYWRzLCBh bmQgbG93ZXIgZm9yCisJICogbGlnaHRlciBsb2FkcykuIEhhcmQgbGltaXRzIGFyZSB0aG9zZSBp bXBvc2VkIGJ5IHRoZSBoYXJkd2FyZS4KKwkgKgorCSAqIEEgZGlzdGluY3Rpb24gaXMgbWFkZSBm b3Igb3ZlcmNsb2NraW5nLCB3aGljaCBpcyBuZXZlciBlbmFibGVkIGJ5CisJICogZGVmYXVsdCwg YW5kIGlzIGNvbnNpZGVyZWQgdG8gYmUgYWJvdmUgdGhlIGhhcmQgbGltaXQgaWYgaXQncworCSAq IHBvc3NpYmxlIGF0IGFsbC4KKwkgKi8KKwl1OCBjdXJfZnJlcTsJCS8qIEN1cnJlbnQgZnJlcXVl bmN5IChjYWNoZWQsIG1heSBub3QgPT0gSFcpICovCisJdTggbGFzdF9mcmVxOwkJLyogTGFzdCBz d3FyZXEgZnJlcXVlbmN5ICovCisJdTggbWluX2ZyZXFfc29mdGxpbWl0OwkvKiBNaW5pbXVtIGZy ZXF1ZW5jeSBwZXJtaXR0ZWQgYnkgdGhlIGRyaXZlciAqLworCXU4IG1heF9mcmVxX3NvZnRsaW1p dDsJLyogTWF4IGZyZXF1ZW5jeSBwZXJtaXR0ZWQgYnkgdGhlIGRyaXZlciAqLworCXU4IG1heF9m cmVxOwkJLyogTWF4aW11bSBmcmVxdWVuY3ksIFJQMCBpZiBub3Qgb3ZlcmNsb2NraW5nICovCisJ dTggbWluX2ZyZXE7CQkvKiBBS0EgUlBuLiBNaW5pbXVtIGZyZXF1ZW5jeSAqLworCXU4IGJvb3N0 X2ZyZXE7CQkvKiBGcmVxdWVuY3kgdG8gcmVxdWVzdCB3aGVuIHdhaXQgYm9vc3RpbmcgKi8KKwl1 OCBpZGxlX2ZyZXE7CQkvKiBGcmVxdWVuY3kgdG8gcmVxdWVzdCB3aGVuIHdlIGFyZSBpZGxlICov CisJdTggZWZmaWNpZW50X2ZyZXE7CS8qIEFLQSBSUGUuIFByZS1kZXRlcm1pbmVkIGJhbGFuY2Vk IGZyZXF1ZW5jeSAqLworCXU4IHJwMV9mcmVxOwkJLyogImxlc3MgdGhhbiIgUlAwIHBvd2VyL2Zy ZXFlbmN5ICovCisJdTggcnAwX2ZyZXE7CQkvKiBOb24tb3ZlcmNsb2NrZWQgbWF4IGZyZXF1ZW5j eS4gKi8KKwl1MTYgZ3BsbF9yZWZfZnJlcTsJLyogdmx2L2NodiBHUExMIHJlZmVyZW5jZSBmcmVx dWVuY3kgKi8KKworCWludCBsYXN0X2FkajsKKworCXN0cnVjdCB7CisJCXN0cnVjdCBtdXRleCBt dXRleDsKKworCQllbnVtIHsgTE9XX1BPV0VSLCBCRVRXRUVOLCBISUdIX1BPV0VSIH0gbW9kZTsK KwkJdW5zaWduZWQgaW50IGludGVyYWN0aXZlOworCisJCXU4IHVwX3RocmVzaG9sZDsgLyogQ3Vy cmVudCAlYnVzeSByZXF1aXJlZCB0byB1cGxvY2sgKi8KKwkJdTggZG93bl90aHJlc2hvbGQ7IC8q IEN1cnJlbnQgJWJ1c3kgcmVxdWlyZWQgdG8gZG93bmNsb2NrICovCisJfSBwb3dlcjsKKworCWF0 b21pY190IG51bV93YWl0ZXJzOworCWF0b21pY190IGJvb3N0czsKKworCS8qIG1hbnVhbCB3YSBy ZXNpZGVuY3kgY2FsY3VsYXRpb25zICovCisJc3RydWN0IGludGVsX3Jwc19laSBlaTsKKwlzdHJ1 Y3QgaW50ZWxfaXBzIGlwczsKK307CisKKyNlbmRpZiAvKiBJTlRFTF9SUFNfVFlQRVNfSCAqLwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbGxjLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9sbGMuYwppbmRleCBhNzA1Nzc4NWU0MjAuLmZk Mzc3MGU0OGFjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3Rf bGxjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbGxjLmMKQEAgLTYs NiArNiw3IEBACiAKICNpbmNsdWRlICJpbnRlbF9wbS5oIiAvKiBpbnRlbF9ncHVfZnJlcSgpICov CiAjaW5jbHVkZSAic2VsZnRlc3RfbGxjLmgiCisjaW5jbHVkZSAiaW50ZWxfcnBzLmgiCiAKIHN0 YXRpYyBpbnQgZ2VuNl92ZXJpZnlfcmluZ19mcmVxKHN0cnVjdCBpbnRlbF9sbGMgKmxsYykKIHsK QEAgLTI1LDYgKzI2LDggQEAgc3RhdGljIGludCBnZW42X3ZlcmlmeV9yaW5nX2ZyZXEoc3RydWN0 IGludGVsX2xsYyAqbGxjKQogCWZvciAoZ3B1X2ZyZXEgPSBjb25zdHMubWluX2dwdV9mcmVxOwog CSAgICAgZ3B1X2ZyZXEgPD0gY29uc3RzLm1heF9ncHVfZnJlcTsKIAkgICAgIGdwdV9mcmVxKysp IHsKKwkJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmxsY190b19ndChsbGMpLT5ycHM7CisKIAkJ dW5zaWduZWQgaW50IGlhX2ZyZXEsIHJpbmdfZnJlcSwgZm91bmQ7CiAJCXUzMiB2YWw7CiAKQEAg LTQ0LDcgKzQ3LDcgQEAgc3RhdGljIGludCBnZW42X3ZlcmlmeV9yaW5nX2ZyZXEoc3RydWN0IGlu dGVsX2xsYyAqbGxjKQogCQlpZiAoZm91bmQgIT0gaWFfZnJlcSkgewogCQkJcHJfZXJyKCJNaW4g ZnJlcSB0YWJsZSglZC9bJWQsICVkXSk6JWRNSHogZGlkIG5vdCBtYXRjaCBleHBlY3RlZCBDUFUg ZnJlcSwgZm91bmQgJWQsIGV4cGVjdGVkICVkXG4iLAogCQkJICAgICAgIGdwdV9mcmVxLCBjb25z dHMubWluX2dwdV9mcmVxLCBjb25zdHMubWF4X2dwdV9mcmVxLAotCQkJICAgICAgIGludGVsX2dw dV9mcmVxKGk5MTUsIGdwdV9mcmVxICogKElOVEVMX0dFTihpOTE1KSA+PSA5ID8gR0VOOV9GUkVR X1NDQUxFUiA6IDEpKSwKKwkJCSAgICAgICBpbnRlbF9ncHVfZnJlcShycHMsIGdwdV9mcmVxICog KElOVEVMX0dFTihpOTE1KSA+PSA5ID8gR0VOOV9GUkVRX1NDQUxFUiA6IDEpKSwKIAkJCSAgICAg ICBmb3VuZCwgaWFfZnJlcSk7CiAJCQllcnIgPSAtRUlOVkFMOwogCQkJYnJlYWs7CkBAIC01NCw3 ICs1Nyw3IEBAIHN0YXRpYyBpbnQgZ2VuNl92ZXJpZnlfcmluZ19mcmVxKHN0cnVjdCBpbnRlbF9s bGMgKmxsYykKIAkJaWYgKGZvdW5kICE9IHJpbmdfZnJlcSkgewogCQkJcHJfZXJyKCJNaW4gZnJl cSB0YWJsZSglZC9bJWQsICVkXSk6JWRNSHogZGlkIG5vdCBtYXRjaCBleHBlY3RlZCByaW5nIGZy ZXEsIGZvdW5kICVkLCBleHBlY3RlZCAlZFxuIiwKIAkJCSAgICAgICBncHVfZnJlcSwgY29uc3Rz Lm1pbl9ncHVfZnJlcSwgY29uc3RzLm1heF9ncHVfZnJlcSwKLQkJCSAgICAgICBpbnRlbF9ncHVf ZnJlcShpOTE1LCBncHVfZnJlcSAqIChJTlRFTF9HRU4oaTkxNSkgPj0gOSA/IEdFTjlfRlJFUV9T Q0FMRVIgOiAxKSksCisJCQkgICAgICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBncHVfZnJlcSAqIChJ TlRFTF9HRU4oaTkxNSkgPj0gOSA/IEdFTjlfRlJFUV9TQ0FMRVIgOiAxKSksCiAJCQkgICAgICAg Zm91bmQsIHJpbmdfZnJlcSk7CiAJCQllcnIgPSAtRUlOVkFMOwogCQkJYnJlYWs7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYwppbmRleCAw MDllNTRhMzc2NGYuLjk3Yjg1OGNlNzY4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5jCkBAIC0xMDEwLDcgKzEwMTAsNyBAQCB2b2lk IGludGVsX2d1Y19zdWJtaXNzaW9uX2Zpbmkoc3RydWN0IGludGVsX2d1YyAqZ3VjKQogCiBzdGF0 aWMgdm9pZCBndWNfaW50ZXJydXB0c19jYXB0dXJlKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCiB7Ci0J c3RydWN0IGludGVsX3JwcyAqcnBzID0gJmd0LT5pOTE1LT5ndF9wbS5ycHM7CisJc3RydWN0IGlu dGVsX3JwcyAqcnBzID0gJmd0LT5ycHM7CiAJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0g Z3QtPnVuY29yZTsKIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CiAJZW51bSBpbnRl bF9lbmdpbmVfaWQgaWQ7CkBAIC0xMDU2LDcgKzEwNTYsNyBAQCBzdGF0aWMgdm9pZCBndWNfaW50 ZXJydXB0c19jYXB0dXJlKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCiAKIHN0YXRpYyB2b2lkIGd1Y19p bnRlcnJ1cHRzX3JlbGVhc2Uoc3RydWN0IGludGVsX2d0ICpndCkKIHsKLQlzdHJ1Y3QgaW50ZWxf cnBzICpycHMgPSAmZ3QtPmk5MTUtPmd0X3BtLnJwczsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMg PSAmZ3QtPnJwczsKIAlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBndC0+dW5jb3JlOwog CXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKIAllbnVtIGludGVsX2VuZ2luZV9pZCBp ZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKaW5kZXggMTYyMTE0MzBlYjc4Li4yMjk2 MjM3MzcyM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCkBAIC00NCw2ICs0NCw3 IEBACiAjaW5jbHVkZSAiZ3QvaW50ZWxfZ3RfcmVxdWVzdHMuaCIKICNpbmNsdWRlICJndC9pbnRl bF9yZXNldC5oIgogI2luY2x1ZGUgImd0L2ludGVsX3JjNi5oIgorI2luY2x1ZGUgImd0L2ludGVs X3Jwcy5oIgogI2luY2x1ZGUgImd0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmgiCiAKICNpbmNs dWRlICJpOTE1X2RlYnVnZnMuaCIKQEAgLTc5MSw3ICs3OTIsNyBAQCBzdGF0aWMgaW50IGk5MTVf ZnJlcXVlbmN5X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCiB7CiAJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbm9kZV90b19pOTE1KG0tPnByaXZhdGUp OwogCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9ICZkZXZfcHJpdi0+dW5jb3JlOwotCXN0 cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOworCXN0cnVjdCBpbnRl bF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3QucnBzOwogCWludGVsX3dha2VyZWZfdCB3YWtlcmVm OwogCWludCByZXQgPSAwOwogCkBAIC04MjcsMjMgKzgyOCwyMyBAQCBzdGF0aWMgaW50IGk5MTVf ZnJlcXVlbmN5X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCiAJCXNlcV9w cmludGYobSwgIkREUiBmcmVxOiAlZCBNSHpcbiIsIGRldl9wcml2LT5tZW1fZnJlcSk7CiAKIAkJ c2VxX3ByaW50ZihtLCAiYWN0dWFsIEdQVSBmcmVxOiAlZCBNSHpcbiIsCi0JCQkgICBpbnRlbF9n cHVfZnJlcShkZXZfcHJpdiwgKGZyZXFfc3RzID4+IDgpICYgMHhmZikpOworCQkJICAgaW50ZWxf Z3B1X2ZyZXEocnBzLCAoZnJlcV9zdHMgPj4gOCkgJiAweGZmKSk7CiAKIAkJc2VxX3ByaW50Ziht LCAiY3VycmVudCBHUFUgZnJlcTogJWQgTUh6XG4iLAotCQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2 X3ByaXYsIHJwcy0+Y3VyX2ZyZXEpKTsKKwkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5j dXJfZnJlcSkpOwogCiAJCXNlcV9wcmludGYobSwgIm1heCBHUFUgZnJlcTogJWQgTUh6XG4iLAot CQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+bWF4X2ZyZXEpKTsKKwkJCSAgIGlu dGVsX2dwdV9mcmVxKHJwcywgcnBzLT5tYXhfZnJlcSkpOwogCiAJCXNlcV9wcmludGYobSwgIm1p biBHUFUgZnJlcTogJWQgTUh6XG4iLAotCQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJw cy0+bWluX2ZyZXEpKTsKKwkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5taW5fZnJlcSkp OwogCiAJCXNlcV9wcmludGYobSwgImlkbGUgR1BVIGZyZXE6ICVkIE1IelxuIiwKLQkJCSAgIGlu dGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPmlkbGVfZnJlcSkpOworCQkJICAgaW50ZWxfZ3B1 X2ZyZXEocnBzLCBycHMtPmlkbGVfZnJlcSkpOwogCiAJCXNlcV9wcmludGYobSwKIAkJCSAgICJl ZmZpY2llbnQgKFJQZSkgZnJlcXVlbmN5OiAlZCBNSHpcbiIsCi0JCQkgICBpbnRlbF9ncHVfZnJl cShkZXZfcHJpdiwgcnBzLT5lZmZpY2llbnRfZnJlcSkpOworCQkJICAgaW50ZWxfZ3B1X2ZyZXEo cnBzLCBycHMtPmVmZmljaWVudF9mcmVxKSk7CiAJfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDYpIHsKIAkJdTMyIHJwX3N0YXRlX2xpbWl0czsKIAkJdTMyIGd0X3BlcmZfc3RhdHVz OwpAQCAtODc3LDcgKzg3OCw3IEBAIHN0YXRpYyBpbnQgaTkxNV9mcmVxdWVuY3lfaW5mbyhzdHJ1 Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKIAkJCWVsc2UKIAkJCQlyZXFmID4+PSAyNTsK IAkJfQotCQlyZXFmID0gaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJlcWYpOworCQlyZXFmID0g aW50ZWxfZ3B1X2ZyZXEocnBzLCByZXFmKTsKIAogCQlycG1vZGVjdGwgPSBJOTE1X1JFQUQoR0VO Nl9SUF9DT05UUk9MKTsKIAkJcnBpbmNsaW1pdCA9IEk5MTVfUkVBRChHRU42X1JQX1VQX1RIUkVT SE9MRCk7CkBAIC04OTAsOCArODkxLDcgQEAgc3RhdGljIGludCBpOTE1X2ZyZXF1ZW5jeV9pbmZv KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogCQlycGRvd25laSA9IEk5MTVfUkVB RChHRU42X1JQX0NVUl9ET1dOX0VJKSAmIEdFTjZfQ1VSSUFWR19NQVNLOwogCQlycGN1cmRvd24g PSBJOTE1X1JFQUQoR0VONl9SUF9DVVJfRE9XTikgJiBHRU42X0NVUkJTWVRBVkdfTUFTSzsKIAkJ cnBwcmV2ZG93biA9IEk5MTVfUkVBRChHRU42X1JQX1BSRVZfRE9XTikgJiBHRU42X0NVUkJTWVRB VkdfTUFTSzsKLQkJY2FnZiA9IGludGVsX2dwdV9mcmVxKGRldl9wcml2LAotCQkJCSAgICAgIGlu dGVsX2dldF9jYWdmKGRldl9wcml2LCBycHN0YXQpKTsKKwkJY2FnZiA9IGludGVsX2dwdV9mcmVx KHJwcywgaW50ZWxfZ2V0X2NhZ2YocnBzLCBycHN0YXQpKTsKIAogCQlpbnRlbF91bmNvcmVfZm9y Y2V3YWtlX3B1dCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7CiAKQEAgLTk2OCwz NyArOTY4LDM3IEBAIHN0YXRpYyBpbnQgaTkxNV9mcmVxdWVuY3lfaW5mbyhzdHJ1Y3Qgc2VxX2Zp bGUgKm0sIHZvaWQgKnVudXNlZCkKIAkJbWF4X2ZyZXEgKj0gKElTX0dFTjlfQkMoZGV2X3ByaXYp IHx8CiAJCQkgICAgIElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgPyBHRU45X0ZSRVFfU0NBTEVS IDogMSk7CiAJCXNlcV9wcmludGYobSwgIkxvd2VzdCAoUlBOKSBmcmVxdWVuY3k6ICVkTUh6XG4i LAotCQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIG1heF9mcmVxKSk7CisJCQkgICBpbnRl bF9ncHVfZnJlcShycHMsIG1heF9mcmVxKSk7CiAKIAkJbWF4X2ZyZXEgPSAocnBfc3RhdGVfY2Fw ICYgMHhmZjAwKSA+PiA4OwogCQltYXhfZnJlcSAqPSAoSVNfR0VOOV9CQyhkZXZfcHJpdikgfHwK IAkJCSAgICAgSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCA/IEdFTjlfRlJFUV9TQ0FMRVIgOiAx KTsKIAkJc2VxX3ByaW50ZihtLCAiTm9taW5hbCAoUlAxKSBmcmVxdWVuY3k6ICVkTUh6XG4iLAot CQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIG1heF9mcmVxKSk7CisJCQkgICBpbnRlbF9n cHVfZnJlcShycHMsIG1heF9mcmVxKSk7CiAKIAkJbWF4X2ZyZXEgPSAoSVNfR0VOOV9MUChkZXZf cHJpdikgPyBycF9zdGF0ZV9jYXAgPj4gMTYgOgogCQkJICAgIHJwX3N0YXRlX2NhcCA+PiAwKSAm IDB4ZmY7CiAJCW1heF9mcmVxICo9IChJU19HRU45X0JDKGRldl9wcml2KSB8fAogCQkJICAgICBJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDEwID8gR0VOOV9GUkVRX1NDQUxFUiA6IDEpOwogCQlzZXFf cHJpbnRmKG0sICJNYXggbm9uLW92ZXJjbG9ja2VkIChSUDApIGZyZXF1ZW5jeTogJWRNSHpcbiIs Ci0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgbWF4X2ZyZXEpKTsKKwkJCSAgIGludGVs X2dwdV9mcmVxKHJwcywgbWF4X2ZyZXEpKTsKIAkJc2VxX3ByaW50ZihtLCAiTWF4IG92ZXJjbG9j a2VkIGZyZXF1ZW5jeTogJWRNSHpcbiIsCi0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwg cnBzLT5tYXhfZnJlcSkpOworCQkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1heF9mcmVx KSk7CiAKIAkJc2VxX3ByaW50ZihtLCAiQ3VycmVudCBmcmVxOiAlZCBNSHpcbiIsCi0JCQkgICBp bnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5jdXJfZnJlcSkpOworCQkJICAgaW50ZWxfZ3B1 X2ZyZXEocnBzLCBycHMtPmN1cl9mcmVxKSk7CiAJCXNlcV9wcmludGYobSwgIkFjdHVhbCBmcmVx OiAlZCBNSHpcbiIsIGNhZ2YpOwogCQlzZXFfcHJpbnRmKG0sICJJZGxlIGZyZXE6ICVkIE1Ielxu IiwKLQkJCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPmlkbGVfZnJlcSkpOworCQkJ ICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPmlkbGVfZnJlcSkpOwogCQlzZXFfcHJpbnRmKG0s ICJNaW4gZnJlcTogJWQgTUh6XG4iLAotCQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJw cy0+bWluX2ZyZXEpKTsKKwkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5taW5fZnJlcSkp OwogCQlzZXFfcHJpbnRmKG0sICJCb29zdCBmcmVxOiAlZCBNSHpcbiIsCi0JCQkgICBpbnRlbF9n cHVfZnJlcShkZXZfcHJpdiwgcnBzLT5ib29zdF9mcmVxKSk7CisJCQkgICBpbnRlbF9ncHVfZnJl cShycHMsIHJwcy0+Ym9vc3RfZnJlcSkpOwogCQlzZXFfcHJpbnRmKG0sICJNYXggZnJlcTogJWQg TUh6XG4iLAotCQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+bWF4X2ZyZXEpKTsK KwkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5tYXhfZnJlcSkpOwogCQlzZXFfcHJpbnRm KG0sCiAJCQkgICAiZWZmaWNpZW50IChSUGUpIGZyZXF1ZW5jeTogJWQgTUh6XG4iLAotCQkJICAg aW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+ZWZmaWNpZW50X2ZyZXEpKTsKKwkJCSAgIGlu dGVsX2dwdV9mcmVxKHJwcywgcnBzLT5lZmZpY2llbnRfZnJlcSkpOwogCX0gZWxzZSB7CiAJCXNl cV9wdXRzKG0sICJubyBQLXN0YXRlIGluZm8gYXZhaWxhYmxlXG4iKTsKIAl9CkBAIC0xNDYxLDcg KzE0NjEsNyBAQCBzdGF0aWMgaW50IGk5MTVfc3Jfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwg dm9pZCAqdW51c2VkKQogc3RhdGljIGludCBpOTE1X3JpbmdfZnJlcV90YWJsZShzdHJ1Y3Qgc2Vx X2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBz ID0gJmRldl9wcml2LT5ndF9wbS5ycHM7CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9w cml2LT5ndC5ycHM7CiAJdW5zaWduZWQgaW50IG1heF9ncHVfZnJlcSwgbWluX2dwdV9mcmVxOwog CWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwogCWludCBncHVfZnJlcSwgaWFfZnJlcTsKQEAgLTE0 ODYsMTAgKzE0ODYsMTEgQEAgc3RhdGljIGludCBpOTE1X3JpbmdfZnJlcV90YWJsZShzdHJ1Y3Qg c2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKIAkJCQkgICAgICAgR0VONl9QQ09ERV9SRUFEX01J Tl9GUkVRX1RBQkxFLAogCQkJCSAgICAgICAmaWFfZnJlcSwgTlVMTCk7CiAJCXNlcV9wcmludGYo bSwgIiVkXHRcdCVkXHRcdFx0XHQlZFxuIiwKLQkJCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2 LCAoZ3B1X2ZyZXEgKgotCQkJCQkJICAgICAoSVNfR0VOOV9CQyhkZXZfcHJpdikgfHwKLQkJCQkJ CSAgICAgIElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgPwotCQkJCQkJICAgICAgR0VOOV9GUkVR X1NDQUxFUiA6IDEpKSksCisJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsCisJCQkJCSAgKGdwdV9m cmVxICoKKwkJCQkJICAgKElTX0dFTjlfQkMoZGV2X3ByaXYpIHx8CisJCQkJCSAgICBJTlRFTF9H RU4oZGV2X3ByaXYpID49IDEwID8KKwkJCQkJICAgIEdFTjlfRlJFUV9TQ0FMRVIgOiAxKSkpLAog CQkJICAgKChpYV9mcmVxID4+IDApICYgMHhmZikgKiAxMDAsCiAJCQkgICAoKGlhX2ZyZXEgPj4g OCkgJiAweGZmKSAqIDEwMCk7CiAJfQpAQCAtMTcxNyw3ICsxNzE4LDcgQEAgc3RhdGljIGNvbnN0 IGNoYXIgKnJwc19wb3dlcl90b19zdHIodW5zaWduZWQgaW50IHBvd2VyKQogc3RhdGljIGludCBp OTE1X3Jwc19ib29zdF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKIHsKIAlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0 ZSk7Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7CisJc3Ry dWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndC5ycHM7CiAJdTMyIGFjdF9mcmVxID0g cnBzLT5jdXJfZnJlcTsKIAlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKIApAQCAtMTcyOSw3ICsx NzMwLDcgQEAgc3RhdGljIGludCBpOTE1X3Jwc19ib29zdF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAq bSwgdm9pZCAqZGF0YSkKIAkJCXZsdl9wdW5pdF9wdXQoZGV2X3ByaXYpOwogCQkJYWN0X2ZyZXEg PSAoYWN0X2ZyZXEgPj4gOCkgJiAweGZmOwogCQl9IGVsc2UgewotCQkJYWN0X2ZyZXEgPSBpbnRl bF9nZXRfY2FnZihkZXZfcHJpdiwKKwkJCWFjdF9mcmVxID0gaW50ZWxfZ2V0X2NhZ2YocnBzLAog CQkJCQkJICBJOTE1X1JFQUQoR0VONl9SUFNUQVQxKSk7CiAJCX0KIAl9CkBAIC0xNzQwLDE3ICsx NzQxLDE3IEBAIHN0YXRpYyBpbnQgaTkxNV9ycHNfYm9vc3RfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUg Km0sIHZvaWQgKmRhdGEpCiAJCSAgIGF0b21pY19yZWFkKCZycHMtPm51bV93YWl0ZXJzKSk7CiAJ c2VxX3ByaW50ZihtLCAiSW50ZXJhY3RpdmU/ICVkXG4iLCBSRUFEX09OQ0UocnBzLT5wb3dlci5p bnRlcmFjdGl2ZSkpOwogCXNlcV9wcmludGYobSwgIkZyZXF1ZW5jeSByZXF1ZXN0ZWQgJWQsIGFj dHVhbCAlZFxuIiwKLQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+Y3VyX2ZyZXEp LAotCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgYWN0X2ZyZXEpKTsKKwkJICAgaW50ZWxf Z3B1X2ZyZXEocnBzLCBycHMtPmN1cl9mcmVxKSwKKwkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBh Y3RfZnJlcSkpOwogCXNlcV9wcmludGYobSwgIiAgbWluIGhhcmQ6JWQsIHNvZnQ6JWQ7IG1heCBz b2Z0OiVkLCBoYXJkOiVkXG4iLAotCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5t aW5fZnJlcSksCi0JCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPm1pbl9mcmVxX3Nv ZnRsaW1pdCksCi0JCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPm1heF9mcmVxX3Nv ZnRsaW1pdCksCi0JCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPm1heF9mcmVxKSk7 CisJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5taW5fZnJlcSksCisJCSAgIGludGVsX2dw dV9mcmVxKHJwcywgcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQpLAorCQkgICBpbnRlbF9ncHVfZnJl cShycHMsIHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KSwKKwkJICAgaW50ZWxfZ3B1X2ZyZXEocnBz LCBycHMtPm1heF9mcmVxKSk7CiAJc2VxX3ByaW50ZihtLCAiICBpZGxlOiVkLCBlZmZpY2llbnQ6 JWQsIGJvb3N0OiVkXG4iLAotCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5pZGxl X2ZyZXEpLAotCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5lZmZpY2llbnRfZnJl cSksCi0JCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPmJvb3N0X2ZyZXEpKTsKKwkJ ICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPmlkbGVfZnJlcSksCisJCSAgIGludGVsX2dwdV9m cmVxKHJwcywgcnBzLT5lZmZpY2llbnRfZnJlcSksCisJCSAgIGludGVsX2dwdV9mcmVxKHJwcywg cnBzLT5ib29zdF9mcmVxKSk7CiAKIAlzZXFfcHJpbnRmKG0sICJXYWl0IGJvb3N0czogJWRcbiIs IGF0b21pY19yZWFkKCZycHMtPmJvb3N0cykpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRl eCA1MTM4ZDFlZWQzMDYuLjc4YWMwOGRiNDhhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCkBA IC0xODQxLDYgKzE4NDEsOCBAQCBzdGF0aWMgaW50IGk5MTVfZHJtX3Jlc3VtZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQogCiAJaW50ZWxfZHBfbXN0X3Jlc3VtZShkZXZfcHJpdik7CiAKKwlpbnRl bF9ndF9wbV9lbmFibGUoJmRldl9wcml2LT5ndCk7CisKIAlpbnRlbF9kaXNwbGF5X3Jlc3VtZShk ZXYpOwogCiAJZHJtX2ttc19oZWxwZXJfcG9sbF9lbmFibGUoZGV2KTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCmluZGV4IDg4ODJjMDkwOGMzYi4uZWI1NDYwMjkwODExIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmgKQEAgLTU0Myw5NCArNTQzLDYgQEAgc3RydWN0IGk5MTVfc3VzcGVuZF9zYXZlZF9y ZWdpc3RlcnMgewogCiBzdHJ1Y3Qgdmx2X3MwaXhfc3RhdGU7CiAKLXN0cnVjdCBpbnRlbF9ycHNf ZWkgewotCWt0aW1lX3Qga3RpbWU7Ci0JdTMyIHJlbmRlcl9jMDsKLQl1MzIgbWVkaWFfYzA7Ci19 OwotCi1zdHJ1Y3QgaW50ZWxfcnBzIHsKLQlzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdHMg ZW5hYmxpbmcgYW5kIHRoZSB3b3JrZXIgKi8KLQotCS8qCi0JICogd29yaywgaW50ZXJydXB0c19l bmFibGVkIGFuZCBwbV9paXIgYXJlIHByb3RlY3RlZCBieQotCSAqIGRldl9wcml2LT5pcnFfbG9j awotCSAqLwotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwotCWJvb2wgaW50ZXJydXB0c19lbmFi bGVkOwotCXUzMiBwbV9paXI7Ci0KLQkvKiBQTSBpbnRlcnJ1cHQgYml0cyB0aGF0IHNob3VsZCBu ZXZlciBiZSBtYXNrZWQgKi8KLQl1MzIgcG1faW50cm1za19tYno7Ci0KLQkvKiBGcmVxdWVuY2ll cyBhcmUgc3RvcmVkIGluIHBvdGVudGlhbGx5IHBsYXRmb3JtIGRlcGVuZGVudCBtdWx0aXBsZXMu Ci0JICogSW4gb3RoZXIgd29yZHMsICpfZnJlcSBuZWVkcyB0byBiZSBtdWx0aXBsaWVkIGJ5IFgg dG8gYmUgaW50ZXJlc3RpbmcuCi0JICogU29mdCBsaW1pdHMgYXJlIHRob3NlIHdoaWNoIGFyZSB1 c2VkIGZvciB0aGUgZHluYW1pYyByZWNsb2NraW5nIGRvbmUKLQkgKiBieSB0aGUgZHJpdmVyIChy YWlzZSBmcmVxdWVuY2llcyB1bmRlciBoZWF2eSBsb2FkcywgYW5kIGxvd2VyIGZvcgotCSAqIGxp Z2h0ZXIgbG9hZHMpLiBIYXJkIGxpbWl0cyBhcmUgdGhvc2UgaW1wb3NlZCBieSB0aGUgaGFyZHdh cmUuCi0JICoKLQkgKiBBIGRpc3RpbmN0aW9uIGlzIG1hZGUgZm9yIG92ZXJjbG9ja2luZywgd2hp Y2ggaXMgbmV2ZXIgZW5hYmxlZCBieQotCSAqIGRlZmF1bHQsIGFuZCBpcyBjb25zaWRlcmVkIHRv IGJlIGFib3ZlIHRoZSBoYXJkIGxpbWl0IGlmIGl0J3MKLQkgKiBwb3NzaWJsZSBhdCBhbGwuCi0J ICovCi0JdTggY3VyX2ZyZXE7CQkvKiBDdXJyZW50IGZyZXF1ZW5jeSAoY2FjaGVkLCBtYXkgbm90 ID09IEhXKSAqLwotCXU4IG1pbl9mcmVxX3NvZnRsaW1pdDsJLyogTWluaW11bSBmcmVxdWVuY3kg cGVybWl0dGVkIGJ5IHRoZSBkcml2ZXIgKi8KLQl1OCBtYXhfZnJlcV9zb2Z0bGltaXQ7CS8qIE1h eCBmcmVxdWVuY3kgcGVybWl0dGVkIGJ5IHRoZSBkcml2ZXIgKi8KLQl1OCBtYXhfZnJlcTsJCS8q IE1heGltdW0gZnJlcXVlbmN5LCBSUDAgaWYgbm90IG92ZXJjbG9ja2luZyAqLwotCXU4IG1pbl9m cmVxOwkJLyogQUtBIFJQbi4gTWluaW11bSBmcmVxdWVuY3kgKi8KLQl1OCBib29zdF9mcmVxOwkJ LyogRnJlcXVlbmN5IHRvIHJlcXVlc3Qgd2hlbiB3YWl0IGJvb3N0aW5nICovCi0JdTggaWRsZV9m cmVxOwkJLyogRnJlcXVlbmN5IHRvIHJlcXVlc3Qgd2hlbiB3ZSBhcmUgaWRsZSAqLwotCXU4IGVm ZmljaWVudF9mcmVxOwkvKiBBS0EgUlBlLiBQcmUtZGV0ZXJtaW5lZCBiYWxhbmNlZCBmcmVxdWVu Y3kgKi8KLQl1OCBycDFfZnJlcTsJCS8qICJsZXNzIHRoYW4iIFJQMCBwb3dlci9mcmVxZW5jeSAq LwotCXU4IHJwMF9mcmVxOwkJLyogTm9uLW92ZXJjbG9ja2VkIG1heCBmcmVxdWVuY3kuICovCi0J dTE2IGdwbGxfcmVmX2ZyZXE7CS8qIHZsdi9jaHYgR1BMTCByZWZlcmVuY2UgZnJlcXVlbmN5ICov Ci0KLQlpbnQgbGFzdF9hZGo7Ci0KLQlzdHJ1Y3QgewotCQlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Ci0K LQkJZW51bSB7IExPV19QT1dFUiwgQkVUV0VFTiwgSElHSF9QT1dFUiB9IG1vZGU7Ci0JCXVuc2ln bmVkIGludCBpbnRlcmFjdGl2ZTsKLQotCQl1OCB1cF90aHJlc2hvbGQ7IC8qIEN1cnJlbnQgJWJ1 c3kgcmVxdWlyZWQgdG8gdXBsb2NrICovCi0JCXU4IGRvd25fdGhyZXNob2xkOyAvKiBDdXJyZW50 ICVidXN5IHJlcXVpcmVkIHRvIGRvd25jbG9jayAqLwotCX0gcG93ZXI7Ci0KLQlib29sIGVuYWJs ZWQ7Ci0JYXRvbWljX3QgbnVtX3dhaXRlcnM7Ci0JYXRvbWljX3QgYm9vc3RzOwotCi0JLyogbWFu dWFsIHdhIHJlc2lkZW5jeSBjYWxjdWxhdGlvbnMgKi8KLQlzdHJ1Y3QgaW50ZWxfcnBzX2VpIGVp OwotfTsKLQotc3RydWN0IGludGVsX2dlbjZfcG93ZXJfbWdtdCB7Ci0Jc3RydWN0IGludGVsX3Jw cyBycHM7Ci19OwotCi0vKiBkZWZpbmVkIGludGVsX3BtLmMgKi8KLWV4dGVybiBzcGlubG9ja190 IG1jaGRldl9sb2NrOwotCi1zdHJ1Y3QgaW50ZWxfaWxrX3Bvd2VyX21nbXQgewotCXU4IGN1cl9k ZWxheTsKLQl1OCBtaW5fZGVsYXk7Ci0JdTggbWF4X2RlbGF5OwotCXU4IGZtYXg7Ci0JdTggZnN0 YXJ0OwotCi0JdTY0IGxhc3RfY291bnQxOwotCXVuc2lnbmVkIGxvbmcgbGFzdF90aW1lMTsKLQl1 bnNpZ25lZCBsb25nIGNoaXBzZXRfcG93ZXI7Ci0JdTY0IGxhc3RfY291bnQyOwotCXU2NCBsYXN0 X3RpbWUyOwotCXVuc2lnbmVkIGxvbmcgZ2Z4X3Bvd2VyOwotCXU4IGNvcnI7Ci0KLQlpbnQgY19t OwotCWludCByX3Q7Ci19OwotCiAjZGVmaW5lIE1BWF9MM19TTElDRVMgMgogc3RydWN0IGludGVs X2wzX3Bhcml0eSB7CiAJdTMyICpyZW1hcF9pbmZvW01BWF9MM19TTElDRVNdOwpAQCAtMTA2Nyw3 ICs5NzksNiBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAJCXUzMiBpcnFfbWFzazsKIAkJ dTMyIGRlX2lycV9tYXNrW0k5MTVfTUFYX1BJUEVTXTsKIAl9OwotCXUzMiBwbV9ycHNfZXZlbnRz OwogCXUzMiBwaXBlc3RhdF9pcnFfbWFza1tJOTE1X01BWF9QSVBFU107CiAKIAlzdHJ1Y3QgaTkx NV9ob3RwbHVnIGhvdHBsdWc7CkBAIC0xMjAyLDEzICsxMTEzLDYgQEAgc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgewogCSAqLwogCXUzMiBlZHJhbV9zaXplX21iOwogCi0JLyogZ2VuNisgR1QgUE0g c3RhdGUgKi8KLQlzdHJ1Y3QgaW50ZWxfZ2VuNl9wb3dlcl9tZ210IGd0X3BtOwotCi0JLyogaWxr LW9ubHkgaXBzL3JwcyBzdGF0ZS4gRXZlcnl0aGluZyBpbiBoZXJlIGlzIHByb3RlY3RlZCBieSB0 aGUgZ2xvYmFsCi0JICogbWNoZGV2X2xvY2sgaW4gaW50ZWxfcG0uYyAqLwotCXN0cnVjdCBpbnRl bF9pbGtfcG93ZXJfbWdtdCBpcHM7Ci0KIAlzdHJ1Y3QgaTkxNV9wb3dlcl9kb21haW5zIHBvd2Vy X2RvbWFpbnM7CiAKIAlzdHJ1Y3QgaTkxNV9wc3IgcHNyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMK aW5kZXggYjg4Mjk4ODA1NmJkLi5lYWIxNzA5ZDE4OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0u YwpAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgImd0L2ludGVsX21vY3MuaCIKICNpbmNsdWRl ICJndC9pbnRlbF9yZXNldC5oIgogI2luY2x1ZGUgImd0L2ludGVsX3JlbmRlcnN0YXRlLmgiCisj aW5jbHVkZSAiZ3QvaW50ZWxfcnBzLmgiCiAjaW5jbHVkZSAiZ3QvaW50ZWxfd29ya2Fyb3VuZHMu aCIKIAogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCkBAIC0xMjcyLDggKzEyNzMsNiBAQCBpbnQgaTkx NV9nZW1faW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJCWdvdG8gZXJy X2NvbnRleHQ7CiAJfQogCi0JaW50ZWxfaW5pdF9ndF9wb3dlcnNhdmUoZGV2X3ByaXYpOwotCiAJ aW50ZWxfdWNfaW5pdCgmZGV2X3ByaXYtPmd0LnVjKTsKIAogCXJldCA9IGludGVsX2d0X2luaXRf aHcoJmRldl9wcml2LT5ndCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCA1NzJhNWMzN2Nj NjEuLjU5ODkyNGIzYzU1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9p cnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCkBAIC00NSw2ICs0NSw3 IEBACiAjaW5jbHVkZSAiZ3QvaW50ZWxfZ3QuaCIKICNpbmNsdWRlICJndC9pbnRlbF9ndF9pcnEu aCIKICNpbmNsdWRlICJndC9pbnRlbF9ndF9wbV9pcnEuaCIKKyNpbmNsdWRlICJndC9pbnRlbF9y cHMuaCIKIAogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCiAjaW5jbHVkZSAiaTkxNV9pcnEuaCIKQEAg LTMyNyw4NyArMzI4LDYgQEAgc3RhdGljIGk5MTVfcmVnX3QgZ2VuNl9wbV9paXIoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCXJldHVybiBJTlRFTF9HRU4oZGV2X3ByaXYpID49 IDggPyBHRU44X0dUX0lJUigyKSA6IEdFTjZfUE1JSVI7CiB9CiAKLXZvaWQgZ2VuMTFfcmVzZXRf cnBzX2ludGVycnVwdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXN0 cnVjdCBpbnRlbF9ndCAqZ3QgPSAmZGV2X3ByaXYtPmd0OwotCi0Jc3Bpbl9sb2NrX2lycSgmZ3Qt PmlycV9sb2NrKTsKLQotCXdoaWxlIChnZW4xMV9ndF9yZXNldF9vbmVfaWlyKGd0LCAwLCBHRU4x MV9HVFBNKSkKLQkJOwotCi0JZGV2X3ByaXYtPmd0X3BtLnJwcy5wbV9paXIgPSAwOwotCi0Jc3Bp bl91bmxvY2tfaXJxKCZndC0+aXJxX2xvY2spOwotfQotCi12b2lkIGdlbjZfcmVzZXRfcnBzX2lu dGVycnVwdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXN0cnVjdCBp bnRlbF9ndCAqZ3QgPSAmZGV2X3ByaXYtPmd0OwotCi0Jc3Bpbl9sb2NrX2lycSgmZ3QtPmlycV9s b2NrKTsKLQlnZW42X2d0X3BtX3Jlc2V0X2lpcihndCwgR0VONl9QTV9SUFNfRVZFTlRTKTsKLQlk ZXZfcHJpdi0+Z3RfcG0ucnBzLnBtX2lpciA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZndC0+aXJx X2xvY2spOwotfQotCi12b2lkIGdlbjZfZW5hYmxlX3Jwc19pbnRlcnJ1cHRzKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gJmRldl9w cml2LT5ndDsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsK LQotCWlmIChSRUFEX09OQ0UocnBzLT5pbnRlcnJ1cHRzX2VuYWJsZWQpKQotCQlyZXR1cm47Ci0K LQlzcGluX2xvY2tfaXJxKCZndC0+aXJxX2xvY2spOwotCVdBUk5fT05fT05DRShycHMtPnBtX2lp cik7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkKLQkJV0FSTl9PTl9PTkNFKGdl bjExX2d0X3Jlc2V0X29uZV9paXIoZ3QsIDAsIEdFTjExX0dUUE0pKTsKLQllbHNlCi0JCVdBUk5f T05fT05DRShJOTE1X1JFQUQoZ2VuNl9wbV9paXIoZGV2X3ByaXYpKSAmIGRldl9wcml2LT5wbV9y cHNfZXZlbnRzKTsKLQotCXJwcy0+aW50ZXJydXB0c19lbmFibGVkID0gdHJ1ZTsKLQlnZW42X2d0 X3BtX2VuYWJsZV9pcnEoZ3QsIGRldl9wcml2LT5wbV9ycHNfZXZlbnRzKTsKLQotCXNwaW5fdW5s b2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKLX0KLQotdTMyIGdlbjZfc2FuaXRpemVfcnBzX3BtX21h c2soY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHUzMiBtYXNrKQotewotCXJl dHVybiBtYXNrICYgfmk5MTUtPmd0X3BtLnJwcy5wbV9pbnRybXNrX21iejsKLX0KLQotdm9pZCBn ZW42X2Rpc2FibGVfcnBzX2ludGVycnVwdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQotewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwot CXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSAmZGV2X3ByaXYtPmd0OwotCi0JaWYgKCFSRUFEX09OQ0Uo cnBzLT5pbnRlcnJ1cHRzX2VuYWJsZWQpKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2tfaXJxKCZn dC0+aXJxX2xvY2spOwotCXJwcy0+aW50ZXJydXB0c19lbmFibGVkID0gZmFsc2U7Ci0KLQlJOTE1 X1dSSVRFKEdFTjZfUE1JTlRSTVNLLCBnZW42X3Nhbml0aXplX3Jwc19wbV9tYXNrKGRldl9wcml2 LCB+MHUpKTsKLQotCWdlbjZfZ3RfcG1fZGlzYWJsZV9pcnEoZ3QsIEdFTjZfUE1fUlBTX0VWRU5U Uyk7Ci0KLQlzcGluX3VubG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Ci0JaW50ZWxfc3luY2hyb25p emVfaXJxKGRldl9wcml2KTsKLQotCS8qIE5vdyB0aGF0IHdlIHdpbGwgbm90IGJlIGdlbmVyYXRp bmcgYW55IG1vcmUgd29yaywgZmx1c2ggYW55Ci0JICogb3V0c3RhbmRpbmcgdGFza3MuIEFzIHdl IGFyZSBjYWxsZWQgb24gdGhlIFJQUyBpZGxlIHBhdGgsCi0JICogd2Ugd2lsbCByZXNldCB0aGUg R1BVIHRvIG1pbmltdW0gZnJlcXVlbmNpZXMsIHNvIHRoZSBjdXJyZW50Ci0JICogc3RhdGUgb2Yg dGhlIHdvcmtlciBjYW4gYmUgZGlzY2FyZGVkLgotCSAqLwotCWNhbmNlbF93b3JrX3N5bmMoJnJw cy0+d29yayk7Ci0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEpCi0JCWdlbjExX3Jlc2V0 X3Jwc19pbnRlcnJ1cHRzKGRldl9wcml2KTsKLQllbHNlCi0JCWdlbjZfcmVzZXRfcnBzX2ludGVy cnVwdHMoZGV2X3ByaXYpOwotfQotCiB2b2lkIGdlbjlfcmVzZXRfZ3VjX2ludGVycnVwdHMoc3Ry dWN0IGludGVsX2d1YyAqZ3VjKQogewogCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBndWNfdG9fZ3Qo Z3VjKTsKQEAgLTEwNjUsMTk5ICs5ODUsNiBAQCBpbnQgaW50ZWxfZ2V0X2NydGNfc2NhbmxpbmUo c3RydWN0IGludGVsX2NydGMgKmNydGMpCiAJcmV0dXJuIHBvc2l0aW9uOwogfQogCi1zdGF0aWMg dm9pZCBpcm9ubGFrZV9ycHNfY2hhbmdlX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSAmZGV2X3By aXYtPnVuY29yZTsKLQl1MzIgYnVzeV91cCwgYnVzeV9kb3duLCBtYXhfYXZnLCBtaW5fYXZnOwot CXU4IG5ld19kZWxheTsKLQotCXNwaW5fbG9jaygmbWNoZGV2X2xvY2spOwotCi0JaW50ZWxfdW5j b3JlX3dyaXRlMTYodW5jb3JlLAotCQkJICAgICBNRU1JTlRSU1RTLAotCQkJICAgICBpbnRlbF91 bmNvcmVfcmVhZCh1bmNvcmUsIE1FTUlOVFJTVFMpKTsKLQotCW5ld19kZWxheSA9IGRldl9wcml2 LT5pcHMuY3VyX2RlbGF5OwotCi0JaW50ZWxfdW5jb3JlX3dyaXRlMTYodW5jb3JlLCBNRU1JTlRS U1RTLCBNRU1JTlRfRVZBTF9DSEcpOwotCWJ1c3lfdXAgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNv cmUsIFJDUFJFVkJTWVRVUEFWRyk7Ci0JYnVzeV9kb3duID0gaW50ZWxfdW5jb3JlX3JlYWQodW5j b3JlLCBSQ1BSRVZCU1lURE5BVkcpOwotCW1heF9hdmcgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNv cmUsIFJDQk1BWEFWRyk7Ci0JbWluX2F2ZyA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUkNC TUlOQVZHKTsKLQotCS8qIEhhbmRsZSBSQ1MgY2hhbmdlIHJlcXVlc3QgZnJvbSBodyAqLwotCWlm IChidXN5X3VwID4gbWF4X2F2ZykgewotCQlpZiAoZGV2X3ByaXYtPmlwcy5jdXJfZGVsYXkgIT0g ZGV2X3ByaXYtPmlwcy5tYXhfZGVsYXkpCi0JCQluZXdfZGVsYXkgPSBkZXZfcHJpdi0+aXBzLmN1 cl9kZWxheSAtIDE7Ci0JCWlmIChuZXdfZGVsYXkgPCBkZXZfcHJpdi0+aXBzLm1heF9kZWxheSkK LQkJCW5ld19kZWxheSA9IGRldl9wcml2LT5pcHMubWF4X2RlbGF5OwotCX0gZWxzZSBpZiAoYnVz eV9kb3duIDwgbWluX2F2ZykgewotCQlpZiAoZGV2X3ByaXYtPmlwcy5jdXJfZGVsYXkgIT0gZGV2 X3ByaXYtPmlwcy5taW5fZGVsYXkpCi0JCQluZXdfZGVsYXkgPSBkZXZfcHJpdi0+aXBzLmN1cl9k ZWxheSArIDE7Ci0JCWlmIChuZXdfZGVsYXkgPiBkZXZfcHJpdi0+aXBzLm1pbl9kZWxheSkKLQkJ CW5ld19kZWxheSA9IGRldl9wcml2LT5pcHMubWluX2RlbGF5OwotCX0KLQotCWlmIChpcm9ubGFr ZV9zZXRfZHJwcyhkZXZfcHJpdiwgbmV3X2RlbGF5KSkKLQkJZGV2X3ByaXYtPmlwcy5jdXJfZGVs YXkgPSBuZXdfZGVsYXk7Ci0KLQlzcGluX3VubG9jaygmbWNoZGV2X2xvY2spOwotCi0JcmV0dXJu OwotfQotCi1zdGF0aWMgdm9pZCB2bHZfYzBfcmVhZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCi0JCQlzdHJ1Y3QgaW50ZWxfcnBzX2VpICplaSkKLXsKLQllaS0+a3RpbWUgPSBr dGltZV9nZXRfcmF3KCk7Ci0JZWktPnJlbmRlcl9jMCA9IEk5MTVfUkVBRChWTFZfUkVOREVSX0Mw X0NPVU5UKTsKLQllaS0+bWVkaWFfYzAgPSBJOTE1X1JFQUQoVkxWX01FRElBX0MwX0NPVU5UKTsK LX0KLQotdm9pZCBnZW42X3Jwc19yZXNldF9laShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCi17Ci0JbWVtc2V0KCZkZXZfcHJpdi0+Z3RfcG0ucnBzLmVpLCAwLCBzaXplb2YoZGV2 X3ByaXYtPmd0X3BtLnJwcy5laSkpOwotfQotCi1zdGF0aWMgdTMyIHZsdl93YV9jMF9laShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBwbV9paXIpCi17Ci0Jc3RydWN0IGlu dGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0JY29uc3Qgc3RydWN0IGludGVs X3Jwc19laSAqcHJldiA9ICZycHMtPmVpOwotCXN0cnVjdCBpbnRlbF9ycHNfZWkgbm93OwotCXUz MiBldmVudHMgPSAwOwotCi0JaWYgKChwbV9paXIgJiBHRU42X1BNX1JQX1VQX0VJX0VYUElSRUQp ID09IDApCi0JCXJldHVybiAwOwotCi0Jdmx2X2MwX3JlYWQoZGV2X3ByaXYsICZub3cpOwotCi0J aWYgKHByZXYtPmt0aW1lKSB7Ci0JCXU2NCB0aW1lLCBjMDsKLQkJdTMyIHJlbmRlciwgbWVkaWE7 Ci0KLQkJdGltZSA9IGt0aW1lX3VzX2RlbHRhKG5vdy5rdGltZSwgcHJldi0+a3RpbWUpOwotCi0J CXRpbWUgKj0gZGV2X3ByaXYtPmN6Y2xrX2ZyZXE7Ci0KLQkJLyogV29ya2xvYWQgY2FuIGJlIHNw bGl0IGJldHdlZW4gcmVuZGVyICsgbWVkaWEsCi0JCSAqIGUuZy4gU3dhcEJ1ZmZlcnMgYmVpbmcg YmxpdHRlZCBpbiBYIGFmdGVyIGJlaW5nIHJlbmRlcmVkIGluCi0JCSAqIG1lc2EuIFRvIGFjY291 bnQgZm9yIHRoaXMgd2UgbmVlZCB0byBjb21iaW5lIGJvdGggZW5naW5lcwotCQkgKiBpbnRvIG91 ciBhY3Rpdml0eSBjb3VudGVyLgotCQkgKi8KLQkJcmVuZGVyID0gbm93LnJlbmRlcl9jMCAtIHBy ZXYtPnJlbmRlcl9jMDsKLQkJbWVkaWEgPSBub3cubWVkaWFfYzAgLSBwcmV2LT5tZWRpYV9jMDsK LQkJYzAgPSBtYXgocmVuZGVyLCBtZWRpYSk7Ci0JCWMwICo9IDEwMDAgKiAxMDAgPDwgODsgLyog dG8gdXNlY3MgYW5kIHNjYWxlIHRvIHRocmVzaG9sZCUgKi8KLQotCQlpZiAoYzAgPiB0aW1lICog cnBzLT5wb3dlci51cF90aHJlc2hvbGQpCi0JCQlldmVudHMgPSBHRU42X1BNX1JQX1VQX1RIUkVT SE9MRDsKLQkJZWxzZSBpZiAoYzAgPCB0aW1lICogcnBzLT5wb3dlci5kb3duX3RocmVzaG9sZCkK LQkJCWV2ZW50cyA9IEdFTjZfUE1fUlBfRE9XTl9USFJFU0hPTEQ7Ci0JfQotCi0JcnBzLT5laSA9 IG5vdzsKLQlyZXR1cm4gZXZlbnRzOwotfQotCi1zdGF0aWMgdm9pZCBnZW42X3BtX3Jwc193b3Jr KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUs IGd0X3BtLnJwcy53b3JrKTsKLQlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gJmRldl9wcml2LT5ndDsK LQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKLQlib29sIGNs aWVudF9ib29zdCA9IGZhbHNlOwotCWludCBuZXdfZGVsYXksIGFkaiwgbWluLCBtYXg7Ci0JdTMy IHBtX2lpciA9IDA7Ci0KLQlzcGluX2xvY2tfaXJxKCZndC0+aXJxX2xvY2spOwotCWlmIChycHMt PmludGVycnVwdHNfZW5hYmxlZCkgewotCQlwbV9paXIgPSBmZXRjaF9hbmRfemVybygmcnBzLT5w bV9paXIpOwotCQljbGllbnRfYm9vc3QgPSBhdG9taWNfcmVhZCgmcnBzLT5udW1fd2FpdGVycyk7 Ci0JfQotCXNwaW5fdW5sb2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKLQotCS8qIE1ha2Ugc3VyZSB3 ZSBkaWRuJ3QgcXVldWUgYW55dGhpbmcgd2UncmUgbm90IGdvaW5nIHRvIHByb2Nlc3MuICovCi0J V0FSTl9PTihwbV9paXIgJiB+ZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMpOwotCWlmICgocG1faWly ICYgZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMpID09IDAgJiYgIWNsaWVudF9ib29zdCkKLQkJZ290 byBvdXQ7Ci0KLQltdXRleF9sb2NrKCZycHMtPmxvY2spOwotCi0JcG1faWlyIHw9IHZsdl93YV9j MF9laShkZXZfcHJpdiwgcG1faWlyKTsKLQotCWFkaiA9IHJwcy0+bGFzdF9hZGo7Ci0JbmV3X2Rl bGF5ID0gcnBzLT5jdXJfZnJlcTsKLQltaW4gPSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdDsKLQlt YXggPSBycHMtPm1heF9mcmVxX3NvZnRsaW1pdDsKLQlpZiAoY2xpZW50X2Jvb3N0KQotCQltYXgg PSBycHMtPm1heF9mcmVxOwotCWlmIChjbGllbnRfYm9vc3QgJiYgbmV3X2RlbGF5IDwgcnBzLT5i b29zdF9mcmVxKSB7Ci0JCW5ld19kZWxheSA9IHJwcy0+Ym9vc3RfZnJlcTsKLQkJYWRqID0gMDsK LQl9IGVsc2UgaWYgKHBtX2lpciAmIEdFTjZfUE1fUlBfVVBfVEhSRVNIT0xEKSB7Ci0JCWlmIChh ZGogPiAwKQotCQkJYWRqICo9IDI7Ci0JCWVsc2UgLyogQ0hWIG5lZWRzIGV2ZW4gZW5jb2RlIHZh bHVlcyAqLwotCQkJYWRqID0gSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikgPyAyIDogMTsKLQotCQlp ZiAobmV3X2RlbGF5ID49IHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KQotCQkJYWRqID0gMDsKLQl9 IGVsc2UgaWYgKGNsaWVudF9ib29zdCkgewotCQlhZGogPSAwOwotCX0gZWxzZSBpZiAocG1faWly ICYgR0VONl9QTV9SUF9ET1dOX1RJTUVPVVQpIHsKLQkJaWYgKHJwcy0+Y3VyX2ZyZXEgPiBycHMt PmVmZmljaWVudF9mcmVxKQotCQkJbmV3X2RlbGF5ID0gcnBzLT5lZmZpY2llbnRfZnJlcTsKLQkJ ZWxzZSBpZiAocnBzLT5jdXJfZnJlcSA+IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0KQotCQkJbmV3 X2RlbGF5ID0gcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQ7Ci0JCWFkaiA9IDA7Ci0JfSBlbHNlIGlm IChwbV9paXIgJiBHRU42X1BNX1JQX0RPV05fVEhSRVNIT0xEKSB7Ci0JCWlmIChhZGogPCAwKQot CQkJYWRqICo9IDI7Ci0JCWVsc2UgLyogQ0hWIG5lZWRzIGV2ZW4gZW5jb2RlIHZhbHVlcyAqLwot CQkJYWRqID0gSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikgPyAtMiA6IC0xOwotCi0JCWlmIChuZXdf ZGVsYXkgPD0gcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQpCi0JCQlhZGogPSAwOwotCX0gZWxzZSB7 IC8qIHVua25vd24gZXZlbnQgKi8KLQkJYWRqID0gMDsKLQl9Ci0KLQlycHMtPmxhc3RfYWRqID0g YWRqOwotCi0JLyoKLQkgKiBMaW1pdCBkZWJvb3N0aW5nIGFuZCBib29zdGluZyB0byBrZWVwIG91 cnNlbHZlcyBhdCB0aGUgZXh0cmVtZXMKLQkgKiB3aGVuIGluIHRoZSByZXNwZWN0aXZlIHBvd2Vy IG1vZGVzIChpLmUuIHNsb3dseSBkZWNyZWFzZSBmcmVxdWVuY2llcwotCSAqIHdoaWxlIGluIHRo ZSBISUdIX1BPV0VSIHpvbmUgYW5kIHNsb3dseSBpbmNyZWFzZSBmcmVxdWVuY2llcyB3aGlsZQot CSAqIGluIHRoZSBMT1dfUE9XRVIgem9uZSkuIE9uIGlkbGUsIHdlIHdpbGwgaGl0IHRoZSB0aW1l b3V0IGFuZCBkcm9wCi0JICogdG8gdGhlIG5leHQgbGV2ZWwgcXVpY2tseSwgYW5kIGNvbnZlcnNl bHkgaWYgYnVzeSB3ZSBleHBlY3QgdG8KLQkgKiBoaXQgYSB3YWl0Ym9vc3QgYW5kIHJhcGlkbHkg c3dpdGNoIGludG8gbWF4IHBvd2VyLgotCSAqLwotCWlmICgoYWRqIDwgMCAmJiBycHMtPnBvd2Vy Lm1vZGUgPT0gSElHSF9QT1dFUikgfHwKLQkgICAgKGFkaiA+IDAgJiYgcnBzLT5wb3dlci5tb2Rl ID09IExPV19QT1dFUikpCi0JCXJwcy0+bGFzdF9hZGogPSAwOwotCi0JLyogc3lzZnMgZnJlcXVl bmN5IGludGVyZmFjZXMgbWF5IGhhdmUgc251Y2sgaW4gd2hpbGUgc2VydmljaW5nIHRoZQotCSAq IGludGVycnVwdAotCSAqLwotCW5ld19kZWxheSArPSBhZGo7Ci0JbmV3X2RlbGF5ID0gY2xhbXBf dChpbnQsIG5ld19kZWxheSwgbWluLCBtYXgpOwotCi0JaWYgKGludGVsX3NldF9ycHMoZGV2X3By aXYsIG5ld19kZWxheSkpIHsKLQkJRFJNX0RFQlVHX0RSSVZFUigiRmFpbGVkIHRvIHNldCBuZXcg R1BVIGZyZXF1ZW5jeVxuIik7Ci0JCXJwcy0+bGFzdF9hZGogPSAwOwotCX0KLQotCW11dGV4X3Vu bG9jaygmcnBzLT5sb2NrKTsKLQotb3V0OgotCS8qIE1ha2Ugc3VyZSBub3QgdG8gY29ycnVwdCBQ TUlNUiBzdGF0ZSB1c2VkIGJ5IHJpbmdidWZmZXIgb24gR0VONiAqLwotCXNwaW5fbG9ja19pcnEo Jmd0LT5pcnFfbG9jayk7Ci0JaWYgKHJwcy0+aW50ZXJydXB0c19lbmFibGVkKQotCQlnZW42X2d0 X3BtX3VubWFza19pcnEoZ3QsIGRldl9wcml2LT5wbV9ycHNfZXZlbnRzKTsKLQlzcGluX3VubG9j a19pcnEoJmd0LT5pcnFfbG9jayk7Ci19Ci0KLQogLyoqCiAgKiBpdnlicmlkZ2VfcGFyaXR5X3dv cmsgLSBXb3JrcXVldWUgY2FsbGVkIHdoZW4gYSBwYXJpdHkgZXJyb3IgaW50ZXJydXB0CiAgKiBv Y2N1cnJlZC4KQEAgLTE2MzEsNTQgKzEzNTgsNiBAQCBzdGF0aWMgdm9pZCBpOXh4X3BpcGVfY3Jj X2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJCQkgICAg IHJlczEsIHJlczIpOwogfQogCi0vKiBUaGUgUlBTIGV2ZW50cyBuZWVkIGZvcmNld2FrZSwgc28g d2UgYWRkIHRoZW0gdG8gYSB3b3JrIHF1ZXVlIGFuZCBtYXNrIHRoZWlyCi0gKiBJTVIgYml0cyB1 bnRpbCB0aGUgd29yayBpcyBkb25lLiBPdGhlciBpbnRlcnJ1cHRzIGNhbiBiZSBwcm9jZXNzZWQg d2l0aG91dAotICogdGhlIHdvcmsgcXVldWUuICovCi12b2lkIGdlbjExX3Jwc19pcnFfaGFuZGxl cihzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCB1MzIgcG1faWlyKQotewotCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1ID0gZ3QtPmk5MTU7Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmk5MTUt Pmd0X3BtLnJwczsKLQljb25zdCB1MzIgZXZlbnRzID0gaTkxNS0+cG1fcnBzX2V2ZW50cyAmIHBt X2lpcjsKLQotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmd0LT5pcnFfbG9jayk7Ci0KLQlpZiAodW5s aWtlbHkoIWV2ZW50cykpCi0JCXJldHVybjsKLQotCWdlbjZfZ3RfcG1fbWFza19pcnEoZ3QsIGV2 ZW50cyk7Ci0KLQlpZiAoIXJwcy0+aW50ZXJydXB0c19lbmFibGVkKQotCQlyZXR1cm47Ci0KLQly cHMtPnBtX2lpciB8PSBldmVudHM7Ci0Jc2NoZWR1bGVfd29yaygmcnBzLT53b3JrKTsKLX0KLQot dm9pZCBnZW42X3Jwc19pcnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsIHUzMiBwbV9paXIpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5n dF9wbS5ycHM7Ci0Jc3RydWN0IGludGVsX2d0ICpndCA9ICZkZXZfcHJpdi0+Z3Q7Ci0KLQlpZiAo cG1faWlyICYgZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMpIHsKLQkJc3Bpbl9sb2NrKCZndC0+aXJx X2xvY2spOwotCQlnZW42X2d0X3BtX21hc2tfaXJxKGd0LCBwbV9paXIgJiBkZXZfcHJpdi0+cG1f cnBzX2V2ZW50cyk7Ci0JCWlmIChycHMtPmludGVycnVwdHNfZW5hYmxlZCkgewotCQkJcnBzLT5w bV9paXIgfD0gcG1faWlyICYgZGV2X3ByaXYtPnBtX3Jwc19ldmVudHM7Ci0JCQlzY2hlZHVsZV93 b3JrKCZycHMtPndvcmspOwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZndC0+aXJxX2xvY2spOwotCX0K LQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDgpCi0JCXJldHVybjsKLQotCWlmIChwbV9p aXIgJiBQTV9WRUJPWF9VU0VSX0lOVEVSUlVQVCkKLQkJaW50ZWxfZW5naW5lX2JyZWFkY3J1bWJz X2lycShkZXZfcHJpdi0+ZW5naW5lW1ZFQ1MwXSk7Ci0KLQlpZiAocG1faWlyICYgUE1fVkVCT1hf Q1NfRVJST1JfSU5URVJSVVBUKQotCQlEUk1fREVCVUcoIkNvbW1hbmQgcGFyc2VyIGVycm9yLCBw bV9paXIgMHglMDh4XG4iLCBwbV9paXIpOwotfQotCiBzdGF0aWMgdm9pZCBpOXh4X3BpcGVzdGF0 X2lycV9yZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJZW51bSBw aXBlIHBpcGU7CkBAIC0xOTg5LDcgKzE2NjgsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgdmFsbGV5 dmlld19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCiAJCWlmIChndF9paXIpCiAJCQln ZW42X2d0X2lycV9oYW5kbGVyKCZkZXZfcHJpdi0+Z3QsIGd0X2lpcik7CiAJCWlmIChwbV9paXIp Ci0JCQlnZW42X3Jwc19pcnFfaGFuZGxlcihkZXZfcHJpdiwgcG1faWlyKTsKKwkJCWdlbjZfcnBz X2lycV9oYW5kbGVyKCZkZXZfcHJpdi0+Z3QucnBzLCBwbV9paXIpOwogCiAJCWlmIChob3RwbHVn X3N0YXR1cykKIAkJCWk5eHhfaHBkX2lycV9oYW5kbGVyKGRldl9wcml2LCBob3RwbHVnX3N0YXR1 cyk7CkBAIC0yMzkzLDcgKzIwNzIsNyBAQCBzdGF0aWMgdm9pZCBpbGtfZGlzcGxheV9pcnFfaGFu ZGxlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJfQogCiAJaWYgKElTX0dF TihkZXZfcHJpdiwgNSkgJiYgZGVfaWlyICYgREVfUENVX0VWRU5UKQotCQlpcm9ubGFrZV9ycHNf Y2hhbmdlX2lycV9oYW5kbGVyKGRldl9wcml2KTsKKwkJZ2VuNV9ycHNfaXJxX2hhbmRsZXIoJmRl dl9wcml2LT5ndC5ycHMpOwogfQogCiBzdGF0aWMgdm9pZCBpdmJfZGlzcGxheV9pcnFfaGFuZGxl cihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCkBAIC0yNDk4LDcgKzIxNzcsNyBA QCBzdGF0aWMgaXJxcmV0dXJuX3QgaXJvbmxha2VfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAq YXJnKQogCQlpZiAocG1faWlyKSB7CiAJCQlJOTE1X1dSSVRFKEdFTjZfUE1JSVIsIHBtX2lpcik7 CiAJCQlyZXQgPSBJUlFfSEFORExFRDsKLQkJCWdlbjZfcnBzX2lycV9oYW5kbGVyKGRldl9wcml2 LCBwbV9paXIpOworCQkJZ2VuNl9ycHNfaXJxX2hhbmRsZXIoJmRldl9wcml2LT5ndC5ycHMsIHBt X2lpcik7CiAJCX0KIAl9CiAKQEAgLTQyNzAsMTMgKzM5NDksMTAgQEAgc3RhdGljIGlycXJldHVy bl90IGk5NjVfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKQogdm9pZCBpbnRlbF9pcnFf aW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOwotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZk ZXZfcHJpdi0+Z3RfcG0ucnBzOwogCWludCBpOwogCiAJaW50ZWxfaHBkX2luaXRfd29yayhkZXZf cHJpdik7CiAKLQlJTklUX1dPUksoJnJwcy0+d29yaywgZ2VuNl9wbV9ycHNfd29yayk7Ci0KIAlJ TklUX1dPUksoJmRldl9wcml2LT5sM19wYXJpdHkuZXJyb3Jfd29yaywgaXZ5YnJpZGdlX3Bhcml0 eV93b3JrKTsKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0wzX1NMSUNFUzsgKytpKQogCQlkZXZfcHJp di0+bDNfcGFyaXR5LnJlbWFwX2luZm9baV0gPSBOVUxMOwpAQCAtNDI4NSwzMyArMzk2MSw2IEBA IHZvaWQgaW50ZWxfaXJxX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQog CWlmIChIQVNfR1RfVUMoZGV2X3ByaXYpICYmIElOVEVMX0dFTihkZXZfcHJpdikgPCAxMSkKIAkJ ZGV2X3ByaXYtPmd0LnBtX2d1Y19ldmVudHMgPSBHVUNfSU5UUl9HVUMySE9TVCA8PCAxNjsKIAot CS8qIExldCdzIHRyYWNrIHRoZSBlbmFibGVkIHJwcyBldmVudHMgKi8KLQlpZiAoSVNfVkFMTEVZ VklFVyhkZXZfcHJpdikpCi0JCS8qIFdhR3N2UkMwUmVzaWRlbmN5TWV0aG9kOnZsdiAqLwotCQlk ZXZfcHJpdi0+cG1fcnBzX2V2ZW50cyA9IEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJFRDsKLQllbHNl Ci0JCWRldl9wcml2LT5wbV9ycHNfZXZlbnRzID0gKEdFTjZfUE1fUlBfVVBfVEhSRVNIT0xEIHwK LQkJCQkJICAgR0VONl9QTV9SUF9ET1dOX1RIUkVTSE9MRCB8Ci0JCQkJCSAgIEdFTjZfUE1fUlBf RE9XTl9USU1FT1VUKTsKLQotCS8qIFdlIHNoYXJlIHRoZSByZWdpc3RlciB3aXRoIG90aGVyIGVu Z2luZSAqLwotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID4gOSkKLQkJR0VNX1dBUk5fT04oZGV2 X3ByaXYtPnBtX3Jwc19ldmVudHMgJiAweGZmZmYwMDAwKTsKLQotCXJwcy0+cG1faW50cm1za19t YnogPSAwOwotCi0JLyoKLQkgKiBTTkIsSVZCLEhTVyBjYW4gd2hpbGUgVkxWLENIViBtYXkgaGFy ZCBoYW5nIG9uIGxvb3BpbmcgYmF0Y2hidWZmZXIKLQkgKiBpZiBHRU42X1BNX1VQX0VJX0VYUElS RUQgaXMgbWFza2VkLgotCSAqCi0JICogVE9ETzogdmVyaWZ5IGlmIHRoaXMgY2FuIGJlIHJlcHJv ZHVjZWQgb24gVkxWLENIVi4KLQkgKi8KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8PSA3KQot CQlycHMtPnBtX2ludHJtc2tfbWJ6IHw9IEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJFRDsKLQotCWlm IChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDgpCi0JCXJwcy0+cG1faW50cm1za19tYnogfD0gR0VO OF9QTUlOVFJfRElTQUJMRV9SRURJUkVDVF9UT19HVUM7Ci0KIAlkZXYtPnZibGFua19kaXNhYmxl X2ltbWVkaWF0ZSA9IHRydWU7CiAKIAkvKiBNb3N0IHBsYXRmb3JtcyB0cmVhdCB0aGUgZGlzcGxh eSBpcnEgYmxvY2sgYXMgYW4gYWx3YXlzLW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2lycS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuaAppbmRleCAx OWEzYmMwMTk1MzUuLmQwZDkxYzZlMDBkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9pcnEuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5oCkBAIC0y Miw5ICsyMiw2IEBAIHN0cnVjdCBpbnRlbF9ndDsKIHN0cnVjdCBpbnRlbF9ndWM7CiBzdHJ1Y3Qg aW50ZWxfdW5jb3JlOwogCi12b2lkIGdlbjExX3Jwc19pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxf Z3QgKmd0LCB1MzIgcG1faWlyKTsKLXZvaWQgZ2VuNl9ycHNfaXJxX2hhbmRsZXIoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgcG1faWlyKTsKLQogdm9pZCBpbnRlbF9pcnFf aW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBpbnRlbF9pcnFf ZmluaShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogaW50IGludGVsX2lycV9p bnN0YWxsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9wbXUuYwppbmRleCA4NTkxMjkxN2MwNjIuLjI2NmQ2NmIxZmI3YiAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3BtdS5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSAiZ3QvaW50ZWxfZW5naW5lX3Vz ZXIuaCIKICNpbmNsdWRlICJndC9pbnRlbF9ndF9wbS5oIgogI2luY2x1ZGUgImd0L2ludGVsX3Jj Ni5oIgorI2luY2x1ZGUgImd0L2ludGVsX3Jwcy5oIgogCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIK ICNpbmNsdWRlICJpOTE1X3BtdS5oIgpAQCAtMzU4LDI1ICszNTksMjYgQEAgZnJlcXVlbmN5X3Nh bXBsZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCB1bnNpZ25lZCBpbnQgcGVyaW9kX25zKQogCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZ3QtPmk5MTU7CiAJc3RydWN0IGludGVsX3VuY29y ZSAqdW5jb3JlID0gZ3QtPnVuY29yZTsKIAlzdHJ1Y3QgaTkxNV9wbXUgKnBtdSA9ICZpOTE1LT5w bXU7CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmd0LT5ycHM7CiAKIAlpZiAocG11LT5lbmFi bGUgJiBjb25maWdfZW5hYmxlZF9tYXNrKEk5MTVfUE1VX0FDVFVBTF9GUkVRVUVOQ1kpKSB7CiAJ CXUzMiB2YWw7CiAKLQkJdmFsID0gaTkxNS0+Z3RfcG0ucnBzLmN1cl9mcmVxOworCQl2YWwgPSBy cHMtPmN1cl9mcmVxOwogCQlpZiAoaW50ZWxfZ3RfcG1fZ2V0X2lmX2F3YWtlKGd0KSkgewogCQkJ dmFsID0gaW50ZWxfdW5jb3JlX3JlYWRfbm90cmFjZSh1bmNvcmUsIEdFTjZfUlBTVEFUMSk7Ci0J CQl2YWwgPSBpbnRlbF9nZXRfY2FnZihpOTE1LCB2YWwpOworCQkJdmFsID0gaW50ZWxfZ2V0X2Nh Z2YocnBzLCB2YWwpOwogCQkJaW50ZWxfZ3RfcG1fcHV0KGd0KTsKIAkJfQogCiAJCWFkZF9zYW1w bGVfbXVsdCgmcG11LT5zYW1wbGVbX19JOTE1X1NBTVBMRV9GUkVRX0FDVF0sCi0JCQkJaW50ZWxf Z3B1X2ZyZXEoaTkxNSwgdmFsKSwKKwkJCQlpbnRlbF9ncHVfZnJlcShycHMsIHZhbCksCiAJCQkJ cGVyaW9kX25zIC8gMTAwMCk7CiAJfQogCiAJaWYgKHBtdS0+ZW5hYmxlICYgY29uZmlnX2VuYWJs ZWRfbWFzayhJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZKSkgewogCQlhZGRfc2FtcGxlX211 bHQoJnBtdS0+c2FtcGxlW19fSTkxNV9TQU1QTEVfRlJFUV9SRVFdLAotCQkJCWludGVsX2dwdV9m cmVxKGk5MTUsIGk5MTUtPmd0X3BtLnJwcy5jdXJfZnJlcSksCisJCQkJaW50ZWxfZ3B1X2ZyZXEo cnBzLCBycHMtPmN1cl9mcmVxKSwKIAkJCQlwZXJpb2RfbnMgLyAxMDAwKTsKIAl9CiB9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jCmluZGV4IDQ1NzVmMzY4NDU1ZC4uMDhjZTJlZWVjZjdl IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYwpAQCAtMzEsNiArMzEsNyBAQAogCiAj aW5jbHVkZSAiZ2VtL2k5MTVfZ2VtX2NvbnRleHQuaCIKICNpbmNsdWRlICJndC9pbnRlbF9jb250 ZXh0LmgiCisjaW5jbHVkZSAiZ3QvaW50ZWxfcnBzLmgiCiAKICNpbmNsdWRlICJpOTE1X2FjdGl2 ZS5oIgogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCkBAIC0yNTcsOCArMjU4LDggQEAgYm9vbCBpOTE1 X3JlcXVlc3RfcmV0aXJlKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQogCWlmICh0ZXN0X2JpdChE TUFfRkVOQ0VfRkxBR19FTkFCTEVfU0lHTkFMX0JJVCwgJnJxLT5mZW5jZS5mbGFncykpCiAJCWk5 MTVfcmVxdWVzdF9jYW5jZWxfYnJlYWRjcnVtYihycSk7CiAJaWYgKGk5MTVfcmVxdWVzdF9oYXNf d2FpdGJvb3N0KHJxKSkgewotCQlHRU1fQlVHX09OKCFhdG9taWNfcmVhZCgmcnEtPmk5MTUtPmd0 X3BtLnJwcy5udW1fd2FpdGVycykpOwotCQlhdG9taWNfZGVjKCZycS0+aTkxNS0+Z3RfcG0ucnBz Lm51bV93YWl0ZXJzKTsKKwkJR0VNX0JVR19PTighYXRvbWljX3JlYWQoJnJxLT5lbmdpbmUtPmd0 LT5ycHMubnVtX3dhaXRlcnMpKTsKKwkJYXRvbWljX2RlYygmcnEtPmVuZ2luZS0+Z3QtPnJwcy5u dW1fd2FpdGVycyk7CiAJfQogCWlmICghdGVzdF9iaXQoSTkxNV9GRU5DRV9GTEFHX0FDVElWRSwg JnJxLT5mZW5jZS5mbGFncykpIHsKIAkJc2V0X2JpdChJOTE1X0ZFTkNFX0ZMQUdfQUNUSVZFLCAm cnEtPmZlbmNlLmZsYWdzKTsKQEAgLTE0NjYsNyArMTQ2Nyw3IEBAIGxvbmcgaTkxNV9yZXF1ZXN0 X3dhaXQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCiAJICovCiAJaWYgKGZsYWdzICYgSTkxNV9X QUlUX1BSSU9SSVRZKSB7CiAJCWlmICghaTkxNV9yZXF1ZXN0X3N0YXJ0ZWQocnEpICYmIElOVEVM X0dFTihycS0+aTkxNSkgPj0gNikKLQkJCWdlbjZfcnBzX2Jvb3N0KHJxKTsKKwkJCWludGVsX3Jw c19ib29zdChycSk7CiAJCWk5MTVfc2NoZWR1bGVfYnVtcF9wcmlvcml0eShycSwgSTkxNV9QUklP UklUWV9XQUlUKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf c3lzZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3lzZnMuYwppbmRleCBiZjAzOWI4 YmE1OTMuLjY1NDc2OTA5ZDFiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3lzZnMuYwpAQCAtMzEs NiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAKICNpbmNsdWRlICJndC9pbnRl bF9yYzYuaCIKKyNpbmNsdWRlICJndC9pbnRlbF9ycHMuaCIKIAogI2luY2x1ZGUgImk5MTVfZHJ2 LmgiCiAjaW5jbHVkZSAiaTkxNV9zeXNmcy5oIgpAQCAtMjU5LDYgKzI2MCw3IEBAIHN0YXRpYyBz c2l6ZV90IGd0X2FjdF9mcmVxX21oel9zaG93KHN0cnVjdCBkZXZpY2UgKmtkZXYsCiAJCQkJICAg IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0ga2Rldl9taW5vcl90b19pOTE1KGtkZXYpOworCXN0 cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3QucnBzOwogCWludGVsX3dha2VyZWZf dCB3YWtlcmVmOwogCXUzMiBmcmVxOwogCkBAIC0yNzEsMzEgKzI3MywzMSBAQCBzdGF0aWMgc3Np emVfdCBndF9hY3RfZnJlcV9taHpfc2hvdyhzdHJ1Y3QgZGV2aWNlICprZGV2LAogCiAJCWZyZXEg PSAoZnJlcSA+PiA4KSAmIDB4ZmY7CiAJfSBlbHNlIHsKLQkJZnJlcSA9IGludGVsX2dldF9jYWdm KGRldl9wcml2LCBJOTE1X1JFQUQoR0VONl9SUFNUQVQxKSk7CisJCWZyZXEgPSBpbnRlbF9nZXRf Y2FnZihycHMsIEk5MTVfUkVBRChHRU42X1JQU1RBVDEpKTsKIAl9CiAKIAlpbnRlbF9ydW50aW1l X3BtX3B1dCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0sIHdha2VyZWYpOwogCi0JcmV0dXJuIHNucHJp bnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBmcmVx KSk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGludGVsX2dwdV9m cmVxKHJwcywgZnJlcSkpOwogfQogCiBzdGF0aWMgc3NpemVfdCBndF9jdXJfZnJlcV9taHpfc2hv dyhzdHJ1Y3QgZGV2aWNlICprZGV2LAogCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAq YXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IGtkZXZfbWlub3JfdG9faTkxNShrZGV2KTsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2 X3ByaXYtPmd0LnJwczsKIAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4i LAotCQkJaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsCi0JCQkJICAgICAgIGRldl9wcml2LT5ndF9w bS5ycHMuY3VyX2ZyZXEpKTsKKwkJCWludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5jdXJfZnJlcSkp OwogfQogCiBzdGF0aWMgc3NpemVfdCBndF9ib29zdF9mcmVxX21oel9zaG93KHN0cnVjdCBkZXZp Y2UgKmtkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0ga2Rldl9taW5vcl90b19pOTE1KGtk ZXYpOworCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3QucnBzOwogCiAJcmV0 dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsCi0JCQlpbnRlbF9ncHVfZnJlcShk ZXZfcHJpdiwKLQkJCQkgICAgICAgZGV2X3ByaXYtPmd0X3BtLnJwcy5ib29zdF9mcmVxKSk7CisJ CQlpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+Ym9vc3RfZnJlcSkpOwogfQogCiBzdGF0aWMgc3Np emVfdCBndF9ib29zdF9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICprZGV2LApAQCAtMzAz LDcgKzMwNSw3IEBAIHN0YXRpYyBzc2l6ZV90IGd0X2Jvb3N0X2ZyZXFfbWh6X3N0b3JlKHN0cnVj dCBkZXZpY2UgKmtkZXYsCiAJCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50 KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGtkZXZfbWlub3JfdG9f aTkxNShrZGV2KTsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJw czsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0LnJwczsKIAlib29sIGJv b3N0ID0gZmFsc2U7CiAJc3NpemVfdCByZXQ7CiAJdTMyIHZhbDsKQEAgLTMxMyw3ICszMTUsNyBA QCBzdGF0aWMgc3NpemVfdCBndF9ib29zdF9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICpr ZGV2LAogCQlyZXR1cm4gcmV0OwogCiAJLyogVmFsaWRhdGUgYWdhaW5zdCAoc3RhdGljKSBoYXJk d2FyZSBsaW1pdHMgKi8KLQl2YWwgPSBpbnRlbF9mcmVxX29wY29kZShkZXZfcHJpdiwgdmFsKTsK Kwl2YWwgPSBpbnRlbF9mcmVxX29wY29kZShycHMsIHZhbCk7CiAJaWYgKHZhbCA8IHJwcy0+bWlu X2ZyZXEgfHwgdmFsID4gcnBzLT5tYXhfZnJlcSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTMz MywxOSArMzM1LDE5IEBAIHN0YXRpYyBzc2l6ZV90IHZsdl9ycGVfZnJlcV9taHpfc2hvdyhzdHJ1 Y3QgZGV2aWNlICprZGV2LAogCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIs IGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBrZGV2 X21pbm9yX3RvX2k5MTUoa2Rldik7CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2 LT5ndC5ycHM7CiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKLQkJ CWludGVsX2dwdV9mcmVxKGRldl9wcml2LAotCQkJCSAgICAgICBkZXZfcHJpdi0+Z3RfcG0ucnBz LmVmZmljaWVudF9mcmVxKSk7CisJCQlpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+ZWZmaWNpZW50 X2ZyZXEpKTsKIH0KIAogc3RhdGljIHNzaXplX3QgZ3RfbWF4X2ZyZXFfbWh6X3Nob3coc3RydWN0 IGRldmljZSAqa2Rldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikK IHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBrZGV2X21pbm9yX3RvX2k5 MTUoa2Rldik7CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndC5ycHM7CiAK IAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKLQkJCWludGVsX2dwdV9m cmVxKGRldl9wcml2LAotCQkJCSAgICAgICBkZXZfcHJpdi0+Z3RfcG0ucnBzLm1heF9mcmVxX3Nv ZnRsaW1pdCkpOworCQkJaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1heF9mcmVxX3NvZnRsaW1p dCkpOwogfQogCiBzdGF0aWMgc3NpemVfdCBndF9tYXhfZnJlcV9taHpfc3RvcmUoc3RydWN0IGRl dmljZSAqa2RldiwKQEAgLTM1MywxOSArMzU1LDE3IEBAIHN0YXRpYyBzc2l6ZV90IGd0X21heF9m cmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICprZGV2LAogCQkJCSAgICAgY29uc3QgY2hhciAq YnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0ga2Rldl9taW5vcl90b19pOTE1KGtkZXYpOwotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZk ZXZfcHJpdi0+Z3RfcG0ucnBzOwotCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwotCXUzMiB2YWw7 CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndC5ycHM7CiAJc3NpemVfdCBy ZXQ7CisJdTMyIHZhbDsKIAogCXJldCA9IGtzdHJ0b3UzMihidWYsIDAsICZ2YWwpOwogCWlmIChy ZXQpCiAJCXJldHVybiByZXQ7CiAKLQl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoJmRl dl9wcml2LT5ydW50aW1lX3BtKTsKIAltdXRleF9sb2NrKCZycHMtPmxvY2spOwogCi0JdmFsID0g aW50ZWxfZnJlcV9vcGNvZGUoZGV2X3ByaXYsIHZhbCk7CisJdmFsID0gaW50ZWxfZnJlcV9vcGNv ZGUocnBzLCB2YWwpOwogCWlmICh2YWwgPCBycHMtPm1pbl9mcmVxIHx8CiAJICAgIHZhbCA+IHJw cy0+bWF4X2ZyZXEgfHwKIAkgICAgdmFsIDwgcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQpIHsKQEAg LTM3NSw3ICszNzUsNyBAQCBzdGF0aWMgc3NpemVfdCBndF9tYXhfZnJlcV9taHpfc3RvcmUoc3Ry dWN0IGRldmljZSAqa2RldiwKIAogCWlmICh2YWwgPiBycHMtPnJwMF9mcmVxKQogCQlEUk1fREVC VUcoIlVzZXIgcmVxdWVzdGVkIG92ZXJjbG9ja2luZyB0byAlZFxuIiwKLQkJCSAgaW50ZWxfZ3B1 X2ZyZXEoZGV2X3ByaXYsIHZhbCkpOworCQkJICBpbnRlbF9ncHVfZnJlcShycHMsIHZhbCkpOwog CiAJcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQgPSB2YWw7CiAKQEAgLTM4MywxNCArMzgzLDE1IEBA IHN0YXRpYyBzc2l6ZV90IGd0X21heF9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICprZGV2 LAogCQkgICAgICBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCwKIAkJICAgICAgcnBzLT5tYXhfZnJl cV9zb2Z0bGltaXQpOwogCi0JLyogV2Ugc3RpbGwgbmVlZCAqX3NldF9ycHMgdG8gcHJvY2VzcyB0 aGUgbmV3IG1heF9kZWxheSBhbmQKKwkvKgorCSAqIFdlIHN0aWxsIG5lZWQgKl9zZXRfcnBzIHRv IHByb2Nlc3MgdGhlIG5ldyBtYXhfZGVsYXkgYW5kCiAJICogdXBkYXRlIHRoZSBpbnRlcnJ1cHQg bGltaXRzIGFuZCBQTUlOVFJNU0sgZXZlbiB0aG91Z2gKLQkgKiBmcmVxdWVuY3kgcmVxdWVzdCBt YXkgYmUgdW5jaGFuZ2VkLiAqLwotCXJldCA9IGludGVsX3NldF9ycHMoZGV2X3ByaXYsIHZhbCk7 CisJICogZnJlcXVlbmN5IHJlcXVlc3QgbWF5IGJlIHVuY2hhbmdlZC4KKwkgKi8KKwlpbnRlbF9y cHNfc2V0KHJwcywgdmFsKTsKIAogdW5sb2NrOgogCW11dGV4X3VubG9jaygmcnBzLT5sb2NrKTsK LQlpbnRlbF9ydW50aW1lX3BtX3B1dCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0sIHdha2VyZWYpOwog CiAJcmV0dXJuIHJldCA/OiBjb3VudDsKIH0KQEAgLTM5OCwxMCArMzk5LDEwIEBAIHN0YXRpYyBz c2l6ZV90IGd0X21heF9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICprZGV2LAogc3RhdGlj IHNzaXplX3QgZ3RfbWluX2ZyZXFfbWh6X3Nob3coc3RydWN0IGRldmljZSAqa2Rldiwgc3RydWN0 IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBrZGV2X21pbm9yX3RvX2k5MTUoa2Rldik7CisJc3RydWN0IGlu dGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndC5ycHM7CiAKIAlyZXR1cm4gc25wcmludGYoYnVm LCBQQUdFX1NJWkUsICIlZFxuIiwKLQkJCWludGVsX2dwdV9mcmVxKGRldl9wcml2LAotCQkJCSAg ICAgICBkZXZfcHJpdi0+Z3RfcG0ucnBzLm1pbl9mcmVxX3NvZnRsaW1pdCkpOworCQkJaW50ZWxf Z3B1X2ZyZXEocnBzLCBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkpOwogfQogCiBzdGF0aWMgc3Np emVfdCBndF9taW5fZnJlcV9taHpfc3RvcmUoc3RydWN0IGRldmljZSAqa2RldiwKQEAgLTQwOSwx OSArNDEwLDE3IEBAIHN0YXRpYyBzc2l6ZV90IGd0X21pbl9mcmVxX21oel9zdG9yZShzdHJ1Y3Qg ZGV2aWNlICprZGV2LAogCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7 CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0ga2Rldl9taW5vcl90b19pOTE1 KGtkZXYpOwotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwot CWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwotCXUzMiB2YWw7CisJc3RydWN0IGludGVsX3JwcyAq cnBzID0gJmRldl9wcml2LT5ndC5ycHM7CiAJc3NpemVfdCByZXQ7CisJdTMyIHZhbDsKIAogCXJl dCA9IGtzdHJ0b3UzMihidWYsIDAsICZ2YWwpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAK LQl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoJmRldl9wcml2LT5ydW50aW1lX3BtKTsK IAltdXRleF9sb2NrKCZycHMtPmxvY2spOwogCi0JdmFsID0gaW50ZWxfZnJlcV9vcGNvZGUoZGV2 X3ByaXYsIHZhbCk7CisJdmFsID0gaW50ZWxfZnJlcV9vcGNvZGUocnBzLCB2YWwpOwogCWlmICh2 YWwgPCBycHMtPm1pbl9mcmVxIHx8CiAJICAgIHZhbCA+IHJwcy0+bWF4X2ZyZXEgfHwKIAkgICAg dmFsID4gcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQpIHsKQEAgLTQzNSwxNCArNDM0LDE1IEBAIHN0 YXRpYyBzc2l6ZV90IGd0X21pbl9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICprZGV2LAog CQkgICAgICBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCwKIAkJICAgICAgcnBzLT5tYXhfZnJlcV9z b2Z0bGltaXQpOwogCi0JLyogV2Ugc3RpbGwgbmVlZCAqX3NldF9ycHMgdG8gcHJvY2VzcyB0aGUg bmV3IG1pbl9kZWxheSBhbmQKKwkvKgorCSAqIFdlIHN0aWxsIG5lZWQgKl9zZXRfcnBzIHRvIHBy b2Nlc3MgdGhlIG5ldyBtaW5fZGVsYXkgYW5kCiAJICogdXBkYXRlIHRoZSBpbnRlcnJ1cHQgbGlt aXRzIGFuZCBQTUlOVFJNU0sgZXZlbiB0aG91Z2gKLQkgKiBmcmVxdWVuY3kgcmVxdWVzdCBtYXkg YmUgdW5jaGFuZ2VkLiAqLwotCXJldCA9IGludGVsX3NldF9ycHMoZGV2X3ByaXYsIHZhbCk7CisJ ICogZnJlcXVlbmN5IHJlcXVlc3QgbWF5IGJlIHVuY2hhbmdlZC4KKwkgKi8KKwlpbnRlbF9ycHNf c2V0KHJwcywgdmFsKTsKIAogdW5sb2NrOgogCW11dGV4X3VubG9jaygmcnBzLT5sb2NrKTsKLQlp bnRlbF9ydW50aW1lX3BtX3B1dCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0sIHdha2VyZWYpOwogCiAJ cmV0dXJuIHJldCA/OiBjb3VudDsKIH0KQEAgLTQ2NCwxNSArNDY0LDE1IEBAIHN0YXRpYyBERVZJ Q0VfQVRUUihndF9SUG5fZnJlcV9taHosIFNfSVJVR08sIGd0X3JwX21oel9zaG93LCBOVUxMKTsK IHN0YXRpYyBzc2l6ZV90IGd0X3JwX21oel9zaG93KHN0cnVjdCBkZXZpY2UgKmtkZXYsIHN0cnVj dCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0ga2Rldl9taW5vcl90b19pOTE1KGtkZXYpOwotCXN0cnVjdCBp bnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOworCXN0cnVjdCBpbnRlbF9ycHMg KnJwcyA9ICZkZXZfcHJpdi0+Z3QucnBzOwogCXUzMiB2YWw7CiAKIAlpZiAoYXR0ciA9PSAmZGV2 X2F0dHJfZ3RfUlAwX2ZyZXFfbWh6KQotCQl2YWwgPSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwg cnBzLT5ycDBfZnJlcSk7CisJCXZhbCA9IGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5ycDBfZnJl cSk7CiAJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfZ3RfUlAxX2ZyZXFfbWh6KQotCQl2YWwg PSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5ycDFfZnJlcSk7CisJCXZhbCA9IGludGVs X2dwdV9mcmVxKHJwcywgcnBzLT5ycDFfZnJlcSk7CiAJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0 dHJfZ3RfUlBuX2ZyZXFfbWh6KQotCQl2YWwgPSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBz LT5taW5fZnJlcSk7CisJCXZhbCA9IGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5taW5fZnJlcSk7 CiAJZWxzZQogCQlCVUcoKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKaW5kZXggMzYyMjM0NDQ5 MDg3Li42NzQxNTA3Yzc0ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwpAQCAtMTk3LDggKzE5 Nyw2IEBAIHN0YXRpYyB2b2lkIGk5MTVfaXJvbmxha2VfZ2V0X21lbV9mcmVxKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkJYnJlYWs7CiAJfQogCi0JZGV2X3ByaXYtPmlwcy5y X3QgPSBkZXZfcHJpdi0+bWVtX2ZyZXE7Ci0KIAlzd2l0Y2ggKGNzaXBsbCAmIDB4M2ZmKSB7CiAJ Y2FzZSAweDAwYzoKIAkJZGV2X3ByaXYtPmZzYl9mcmVxID0gMzIwMDsKQEAgLTIyNywxNCArMjI1 LDYgQEAgc3RhdGljIHZvaWQgaTkxNV9pcm9ubGFrZV9nZXRfbWVtX2ZyZXEoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQogCQlkZXZfcHJpdi0+ZnNiX2ZyZXEgPSAwOwogCQlicmVh azsKIAl9Ci0KLQlpZiAoZGV2X3ByaXYtPmZzYl9mcmVxID09IDMyMDApIHsKLQkJZGV2X3ByaXYt Pmlwcy5jX20gPSAwOwotCX0gZWxzZSBpZiAoZGV2X3ByaXYtPmZzYl9mcmVxID4gMzIwMCAmJiBk ZXZfcHJpdi0+ZnNiX2ZyZXEgPD0gNDgwMCkgewotCQlkZXZfcHJpdi0+aXBzLmNfbSA9IDE7Ci0J fSBlbHNlIHsKLQkJZGV2X3ByaXYtPmlwcy5jX20gPSAyOwotCX0KIH0KIAogc3RhdGljIGNvbnN0 IHN0cnVjdCBjeHNyX2xhdGVuY3kgY3hzcl9sYXRlbmN5X3RhYmxlW10gPSB7CkBAIC02MzM5LDE4 NjUgKzYzMjksMjU4IEBAIHZvaWQgaW50ZWxfaW5pdF9pcGMoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQogCWludGVsX2VuYWJsZV9pcGMoZGV2X3ByaXYpOwogfQogCi0vKgotICog TG9jayBwcm90ZWN0aW5nIElQUyByZWxhdGVkIGRhdGEgc3RydWN0dXJlcwotICovCi1ERUZJTkVf U1BJTkxPQ0sobWNoZGV2X2xvY2spOworc3RhdGljIGNvbnN0IHN0cnVjdCBjcGFyYW1zIHsKKwl1 MTYgaTsKKwl1MTYgdDsKKwl1MTYgbTsKKwl1MTYgYzsKK30gY3BhcmFtc1tdID0geworCXsgMSwg MTMzMywgMzAxLCAyODY2NCB9LAorCXsgMSwgMTA2NiwgMjk0LCAyNDQ2MCB9LAorCXsgMSwgODAw LCAyOTQsIDI1MTkyIH0sCisJeyAwLCAxMzMzLCAyNzYsIDI3NjA1IH0sCisJeyAwLCAxMDY2LCAy NzYsIDI3NjA1IH0sCisJeyAwLCA4MDAsIDIzMSwgMjM3ODQgfSwKK307CiAKLWJvb2wgaXJvbmxh a2Vfc2V0X2RycHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHU4IHZhbCkKK3N0YXRp YyB2b2lkIGlieF9pbml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCiB7Ci0Jc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gJmk5MTUtPnVuY29yZTsK LQl1MTYgcmd2c3djdGw7Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZtY2hkZXZfbG9jayk7Ci0K LQlyZ3Zzd2N0bCA9IGludGVsX3VuY29yZV9yZWFkMTYodW5jb3JlLCBNRU1TV0NUTCk7Ci0JaWYg KHJndnN3Y3RsICYgTUVNQ1RMX0NNRF9TVFMpIHsKLQkJRFJNX0RFQlVHKCJncHUgYnVzeSwgUkNT IGNoYW5nZSByZWplY3RlZFxuIik7Ci0JCXJldHVybiBmYWxzZTsgLyogc3RpbGwgYnVzeSB3aXRo IGFub3RoZXIgY29tbWFuZCAqLwotCX0KLQotCXJndnN3Y3RsID0gKE1FTUNUTF9DTURfQ0hGUkVR IDw8IE1FTUNUTF9DTURfU0hJRlQpIHwKLQkJKHZhbCA8PCBNRU1DVExfRlJFUV9TSElGVCkgfCBN RU1DVExfU0ZDQVZNOwotCWludGVsX3VuY29yZV93cml0ZTE2KHVuY29yZSwgTUVNU1dDVEwsIHJn dnN3Y3RsKTsKLQlpbnRlbF91bmNvcmVfcG9zdGluZ19yZWFkMTYodW5jb3JlLCBNRU1TV0NUTCk7 Ci0KLQlyZ3Zzd2N0bCB8PSBNRU1DVExfQ01EX1NUUzsKLQlpbnRlbF91bmNvcmVfd3JpdGUxNih1 bmNvcmUsIE1FTVNXQ1RMLCByZ3Zzd2N0bCk7Ci0KLQlyZXR1cm4gdHJ1ZTsKKwkvKgorCSAqIE9u IEliZXggUGVhayBhbmQgQ291Z2FyIFBvaW50LCB3ZSBuZWVkIHRvIGRpc2FibGUgY2xvY2sKKwkg KiBnYXRpbmcgZm9yIHRoZSBwYW5lbCBwb3dlciBzZXF1ZW5jZXIgb3IgaXQgd2lsbCBmYWlsIHRv CisJICogc3RhcnQgdXAgd2hlbiBubyBwb3J0cyBhcmUgYWN0aXZlLgorCSAqLworCUk5MTVfV1JJ VEUoU09VVEhfRFNQQ0xLX0dBVEVfRCwgUENIX0RQTFNVTklUX0NMT0NLX0dBVEVfRElTQUJMRSk7 CiB9CiAKLXN0YXRpYyB2b2lkIGlyb25sYWtlX2VuYWJsZV9kcnBzKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKK3N0YXRpYyB2b2lkIGc0eF9kaXNhYmxlX3RyaWNrbGVfZmVlZChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0Jc3RydWN0IGludGVsX3VuY29y ZSAqdW5jb3JlID0gJmRldl9wcml2LT51bmNvcmU7Ci0JdTMyIHJndm1vZGVjdGw7Ci0JdTggZm1h eCwgZm1pbiwgZnN0YXJ0LCB2c3RhcnQ7Ci0KLQlzcGluX2xvY2tfaXJxKCZtY2hkZXZfbG9jayk7 Ci0KLQlyZ3Ztb2RlY3RsID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBNRU1NT0RFQ1RMKTsK LQotCS8qIEVuYWJsZSB0ZW1wIHJlcG9ydGluZyAqLwotCWludGVsX3VuY29yZV93cml0ZTE2KHVu Y29yZSwgUE1NSVNDLCBJOTE1X1JFQUQoUE1NSVNDKSB8IE1DUFBDRV9FTik7Ci0JaW50ZWxfdW5j b3JlX3dyaXRlMTYodW5jb3JlLCBUU0MxLCBJOTE1X1JFQUQoVFNDMSkgfCBUU0UpOwotCi0JLyog MTAwbXMgUkMgZXZhbHVhdGlvbiBpbnRlcnZhbHMgKi8KLQlpbnRlbF91bmNvcmVfd3JpdGUodW5j b3JlLCBSQ1VQRUksIDEwMDAwMCk7Ci0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgUkNETkVJ LCAxMDAwMDApOwotCi0JLyogU2V0IG1heC9taW4gdGhyZXNob2xkcyB0byA5MG1zIGFuZCA4MG1z IHJlc3BlY3RpdmVseSAqLwotCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFJDQk1BWEFWRywg OTAwMDApOwotCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFJDQk1JTkFWRywgODAwMDApOwot Ci0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgTUVNSUhZU1QsIDEpOworCWVudW0gcGlwZSBw aXBlOwogCi0JLyogU2V0IHVwIG1pbiwgbWF4LCBhbmQgY3VyIGZvciBpbnRlcnJ1cHQgaGFuZGxp bmcgKi8KLQlmbWF4ID0gKHJndm1vZGVjdGwgJiBNRU1NT0RFX0ZNQVhfTUFTSykgPj4gTUVNTU9E RV9GTUFYX1NISUZUOwotCWZtaW4gPSAocmd2bW9kZWN0bCAmIE1FTU1PREVfRk1JTl9NQVNLKTsK LQlmc3RhcnQgPSAocmd2bW9kZWN0bCAmIE1FTU1PREVfRlNUQVJUX01BU0spID4+Ci0JCU1FTU1P REVfRlNUQVJUX1NISUZUOworCWZvcl9lYWNoX3BpcGUoZGV2X3ByaXYsIHBpcGUpIHsKKwkJSTkx NV9XUklURShEU1BDTlRSKHBpcGUpLAorCQkJICAgSTkxNV9SRUFEKERTUENOVFIocGlwZSkpIHwK KwkJCSAgIERJU1BQTEFORV9UUklDS0xFX0ZFRURfRElTQUJMRSk7CiAKLQl2c3RhcnQgPSAoaW50 ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBQWFZGUkVRKGZzdGFydCkpICYKLQkJICBQWFZGUkVRX1BY X01BU0spID4+IFBYVkZSRVFfUFhfU0hJRlQ7CisJCUk5MTVfV1JJVEUoRFNQU1VSRihwaXBlKSwg STkxNV9SRUFEKERTUFNVUkYocGlwZSkpKTsKKwkJUE9TVElOR19SRUFEKERTUFNVUkYocGlwZSkp OworCX0KK30KIAotCWRldl9wcml2LT5pcHMuZm1heCA9IGZtYXg7IC8qIElQUyBjYWxsYmFjayB3 aWxsIGluY3JlYXNlIHRoaXMgKi8KLQlkZXZfcHJpdi0+aXBzLmZzdGFydCA9IGZzdGFydDsKK3N0 YXRpYyB2b2lkIGlsa19pbml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCit7CisJdTMyIGRzcGNsa19nYXRlID0gSUxLX1ZSSFVOSVRfQ0xPQ0tfR0FURV9E SVNBQkxFOwogCi0JZGV2X3ByaXYtPmlwcy5tYXhfZGVsYXkgPSBmc3RhcnQ7Ci0JZGV2X3ByaXYt Pmlwcy5taW5fZGVsYXkgPSBmbWluOwotCWRldl9wcml2LT5pcHMuY3VyX2RlbGF5ID0gZnN0YXJ0 OworCS8qCisJICogUmVxdWlyZWQgZm9yIEZCQworCSAqIFdhRmJjRGlzYWJsZURwZmNDbG9ja0dh dGluZzppbGsKKwkgKi8KKwlkc3BjbGtfZ2F0ZSB8PSBJTEtfRFBGQ1JVTklUX0NMT0NLX0dBVEVf RElTQUJMRSB8CisJCSAgIElMS19EUEZDVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAorCQkgICBJ TEtfRFBGRFVOSVRfQ0xPQ0tfR0FURV9FTkFCTEU7CiAKLQlEUk1fREVCVUdfRFJJVkVSKCJmbWF4 OiAlZCwgZm1pbjogJWQsIGZzdGFydDogJWRcbiIsCi0JCQkgZm1heCwgZm1pbiwgZnN0YXJ0KTsK KwlJOTE1X1dSSVRFKFBDSF8zRENHRElTMCwKKwkJICAgTUFSSVVOSVRfQ0xPQ0tfR0FURV9ESVNB QkxFIHwKKwkJICAgU1ZTTVVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKKwlJOTE1X1dSSVRFKFBD SF8zRENHRElTMSwKKwkJICAgVkZNVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOwogCi0JaW50ZWxf dW5jb3JlX3dyaXRlKHVuY29yZSwKLQkJCSAgIE1FTUlOVFJFTiwKLQkJCSAgIE1FTUlOVF9DWF9T VVBSX0VOIHwgTUVNSU5UX0VWQUxfQ0hHX0VOKTsKKwkvKgorCSAqIEFjY29yZGluZyB0byB0aGUg c3BlYyB0aGUgZm9sbG93aW5nIGJpdHMgc2hvdWxkIGJlIHNldCBpbgorCSAqIG9yZGVyIHRvIGVu YWJsZSBtZW1vcnkgc2VsZi1yZWZyZXNoCisJICogVGhlIGJpdCAyMi8yMSBvZiAweDQyMDA0CisJ ICogVGhlIGJpdCA1IG9mIDB4NDIwMjAKKwkgKiBUaGUgYml0IDE1IG9mIDB4NDUwMDAKKwkgKi8K KwlJOTE1X1dSSVRFKElMS19ESVNQTEFZX0NISUNLRU4yLAorCQkgICAoSTkxNV9SRUFEKElMS19E SVNQTEFZX0NISUNLRU4yKSB8CisJCSAgICBJTEtfRFBBUkJfR0FURSB8IElMS19WU0RQRkRfRlVM TCkpOworCWRzcGNsa19nYXRlIHw9IElMS19EUEFSQlVOSVRfQ0xPQ0tfR0FURV9FTkFCTEU7CisJ STkxNV9XUklURShESVNQX0FSQl9DVEwsCisJCSAgIChJOTE1X1JFQUQoRElTUF9BUkJfQ1RMKSB8 CisJCSAgICBESVNQX0ZCQ19XTV9ESVMpKTsKIAogCS8qCi0JICogSW50ZXJydXB0cyB3aWxsIGJl IGVuYWJsZWQgaW4gaXJvbmxha2VfaXJxX3Bvc3RpbnN0YWxsCisJICogQmFzZWQgb24gdGhlIGRv Y3VtZW50IGZyb20gaGFyZHdhcmUgZ3V5cyB0aGUgZm9sbG93aW5nIGJpdHMKKwkgKiBzaG91bGQg YmUgc2V0IHVuY29uZGl0aW9uYWxseSBpbiBvcmRlciB0byBlbmFibGUgRkJDLgorCSAqIFRoZSBi aXQgMjIgb2YgMHg0MjAwMAorCSAqIFRoZSBiaXQgMjIgb2YgMHg0MjAwNAorCSAqIFRoZSBiaXQg Nyw4LDkgb2YgMHg0MjAyMC4KIAkgKi8KKwlpZiAoSVNfSVJPTkxBS0VfTShkZXZfcHJpdikpIHsK KwkJLyogV2FGYmNBc3luY2hGbGlwRGlzYWJsZUZiY1F1ZXVlOmlsayAqLworCQlJOTE1X1dSSVRF KElMS19ESVNQTEFZX0NISUNLRU4xLAorCQkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNL RU4xKSB8CisJCQkgICBJTEtfRkJDUV9ESVMpOworCQlJOTE1X1dSSVRFKElMS19ESVNQTEFZX0NI SUNLRU4yLAorCQkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4yKSB8CisJCQkgICBJ TEtfRFBBUkJfR0FURSk7CisJfQogCi0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgVklEU1RB UlQsIHZzdGFydCk7Ci0JaW50ZWxfdW5jb3JlX3Bvc3RpbmdfcmVhZCh1bmNvcmUsIFZJRFNUQVJU KTsKKwlJOTE1X1dSSVRFKElMS19EU1BDTEtfR0FURV9ELCBkc3BjbGtfZ2F0ZSk7CiAKLQlyZ3Zt b2RlY3RsIHw9IE1FTU1PREVfU1dNT0RFX0VOOwotCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUs IE1FTU1PREVDVEwsIHJndm1vZGVjdGwpOworCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tF TjIsCisJCSAgIEk5MTVfUkVBRChJTEtfRElTUExBWV9DSElDS0VOMikgfAorCQkgICBJTEtfRUxQ SU5fNDA5X1NFTEVDVCk7CisJSTkxNV9XUklURShfM0RfQ0hJQ0tFTjIsCisJCSAgIF8zRF9DSElD S0VOMl9XTV9SRUFEX1BJUEVMSU5FRCA8PCAxNiB8CisJCSAgIF8zRF9DSElDS0VOMl9XTV9SRUFE X1BJUEVMSU5FRCk7CiAKLQlpZiAod2FpdF9mb3JfYXRvbWljKChpbnRlbF91bmNvcmVfcmVhZCh1 bmNvcmUsIE1FTVNXQ1RMKSAmCi0JCQkgICAgIE1FTUNUTF9DTURfU1RTKSA9PSAwLCAxMCkpCi0J CURSTV9FUlJPUigic3R1Y2sgdHJ5aW5nIHRvIGNoYW5nZSBwZXJmIG1vZGVcbiIpOwotCW1kZWxh eSgxKTsKKwkvKiBXYURpc2FibGVSZW5kZXJDYWNoZVBpcGVsaW5lZEZsdXNoOmlsayAqLworCUk5 MTVfV1JJVEUoQ0FDSEVfTU9ERV8wLAorCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoQ00wX1BJUEVM SU5FRF9SRU5ERVJfRkxVU0hfRElTQUJMRSkpOwogCi0JaXJvbmxha2Vfc2V0X2RycHMoZGV2X3By aXYsIGZzdGFydCk7CisJLyogV2FEaXNhYmxlX1JlbmRlckNhY2hlX09wZXJhdGlvbmFsRmx1c2g6 aWxrICovCisJSTkxNV9XUklURShDQUNIRV9NT0RFXzAsIF9NQVNLRURfQklUX0RJU0FCTEUoUkNf T1BfRkxVU0hfRU5BQkxFKSk7CiAKLQlkZXZfcHJpdi0+aXBzLmxhc3RfY291bnQxID0KLQkJaW50 ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBETUlFQykgKwotCQlpbnRlbF91bmNvcmVfcmVhZCh1bmNv cmUsIEREUkVDKSArCi0JCWludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgQ1NJRUMpOwotCWRldl9w cml2LT5pcHMubGFzdF90aW1lMSA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyk7Ci0JZGV2X3By aXYtPmlwcy5sYXN0X2NvdW50MiA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgR0ZYRUMpOwot CWRldl9wcml2LT5pcHMubGFzdF90aW1lMiA9IGt0aW1lX2dldF9yYXdfbnMoKTsKKwlnNHhfZGlz YWJsZV90cmlja2xlX2ZlZWQoZGV2X3ByaXYpOwogCi0Jc3Bpbl91bmxvY2tfaXJxKCZtY2hkZXZf bG9jayk7CisJaWJ4X2luaXRfY2xvY2tfZ2F0aW5nKGRldl9wcml2KTsKIH0KIAotc3RhdGljIHZv aWQgaXJvbmxha2VfZGlzYWJsZV9kcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQor c3RhdGljIHZvaWQgY3B0X2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikKIHsKLQlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSAmaTkxNS0+dW5j b3JlOwotCXUxNiByZ3Zzd2N0bDsKLQotCXNwaW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKLQot CXJndnN3Y3RsID0gaW50ZWxfdW5jb3JlX3JlYWQxNih1bmNvcmUsIE1FTVNXQ1RMKTsKLQotCS8q IEFjayBpbnRlcnJ1cHRzLCBkaXNhYmxlIEVGQyBpbnRlcnJ1cHQgKi8KLQlpbnRlbF91bmNvcmVf d3JpdGUodW5jb3JlLAotCQkJICAgTUVNSU5UUkVOLAotCQkJICAgaW50ZWxfdW5jb3JlX3JlYWQo dW5jb3JlLCBNRU1JTlRSRU4pICYKLQkJCSAgIH5NRU1JTlRfRVZBTF9DSEdfRU4pOwotCWludGVs X3VuY29yZV93cml0ZSh1bmNvcmUsIE1FTUlOVFJTVFMsIE1FTUlOVF9FVkFMX0NIRyk7Ci0JaW50 ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwKLQkJCSAgIERFSUVSLAotCQkJICAgaW50ZWxfdW5jb3Jl X3JlYWQodW5jb3JlLCBERUlFUikgJiB+REVfUENVX0VWRU5UKTsKLQlpbnRlbF91bmNvcmVfd3Jp dGUodW5jb3JlLCBERUlJUiwgREVfUENVX0VWRU5UKTsKLQlpbnRlbF91bmNvcmVfd3JpdGUodW5j b3JlLAotCQkJICAgREVJTVIsCi0JCQkgICBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIERFSU1S KSB8IERFX1BDVV9FVkVOVCk7Ci0KLQkvKiBHbyBiYWNrIHRvIHRoZSBzdGFydGluZyBmcmVxdWVu Y3kgKi8KLQlpcm9ubGFrZV9zZXRfZHJwcyhpOTE1LCBpOTE1LT5pcHMuZnN0YXJ0KTsKLQltZGVs YXkoMSk7Ci0Jcmd2c3djdGwgfD0gTUVNQ1RMX0NNRF9TVFM7Ci0JaW50ZWxfdW5jb3JlX3dyaXRl KHVuY29yZSwgTUVNU1dDVEwsIHJndnN3Y3RsKTsKLQltZGVsYXkoMSk7CisJZW51bSBwaXBlIHBp cGU7CisJdTMyIHZhbDsKIAotCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOworCS8qCisJ ICogT24gSWJleCBQZWFrIGFuZCBDb3VnYXIgUG9pbnQsIHdlIG5lZWQgdG8gZGlzYWJsZSBjbG9j aworCSAqIGdhdGluZyBmb3IgdGhlIHBhbmVsIHBvd2VyIHNlcXVlbmNlciBvciBpdCB3aWxsIGZh aWwgdG8KKwkgKiBzdGFydCB1cCB3aGVuIG5vIHBvcnRzIGFyZSBhY3RpdmUuCisJICovCisJSTkx NV9XUklURShTT1VUSF9EU1BDTEtfR0FURV9ELCBQQ0hfRFBMU1VOSVRfQ0xPQ0tfR0FURV9ESVNB QkxFIHwKKwkJICAgUENIX0RQTFVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKKwkJICAgUENIX0NQ VU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOworCUk5MTVfV1JJVEUoU09VVEhfQ0hJQ0tFTjIsIEk5 MTVfUkVBRChTT1VUSF9DSElDS0VOMikgfAorCQkgICBEUExTX0VEUF9QUFNfRklYX0RJUyk7CisJ LyogVGhlIGJlbG93IGZpeGVzIHRoZSB3ZWlyZCBkaXNwbGF5IGNvcnJ1cHRpb24sIGEgZmV3IHBp eGVscyBzaGlmdGVkCisJICogZG93bndhcmQsIG9uIChvbmx5KSBMVkRTIG9mIHNvbWUgSFAgbGFw dG9wcyB3aXRoIElWWS4KKwkgKi8KKwlmb3JfZWFjaF9waXBlKGRldl9wcml2LCBwaXBlKSB7CisJ CXZhbCA9IEk5MTVfUkVBRChUUkFOU19DSElDS0VOMihwaXBlKSk7CisJCXZhbCB8PSBUUkFOU19D SElDS0VOMl9USU1JTkdfT1ZFUlJJREU7CisJCXZhbCAmPSB+VFJBTlNfQ0hJQ0tFTjJfRkRJX1BP TEFSSVRZX1JFVkVSU0VEOworCQlpZiAoZGV2X3ByaXYtPnZidC5mZGlfcnhfcG9sYXJpdHlfaW52 ZXJ0ZWQpCisJCQl2YWwgfD0gVFJBTlNfQ0hJQ0tFTjJfRkRJX1BPTEFSSVRZX1JFVkVSU0VEOwor CQl2YWwgJj0gflRSQU5TX0NISUNLRU4yX0ZSQU1FX1NUQVJUX0RFTEFZX01BU0s7CisJCXZhbCAm PSB+VFJBTlNfQ0hJQ0tFTjJfRElTQUJMRV9ERUVQX0NPTE9SX0NPVU5URVI7CisJCXZhbCAmPSB+ VFJBTlNfQ0hJQ0tFTjJfRElTQUJMRV9ERUVQX0NPTE9SX01PREVTV0lUQ0g7CisJCUk5MTVfV1JJ VEUoVFJBTlNfQ0hJQ0tFTjIocGlwZSksIHZhbCk7CisJfQorCS8qIFdBRFAwQ2xvY2tHYXRpbmdE aXNhYmxlICovCisJZm9yX2VhY2hfcGlwZShkZXZfcHJpdiwgcGlwZSkgeworCQlJOTE1X1dSSVRF KFRSQU5TX0NISUNLRU4xKHBpcGUpLAorCQkJICAgVFJBTlNfQ0hJQ0tFTjFfRFAwVU5JVF9HQ19E SVNBQkxFKTsKKwl9CiB9CiAKLS8qIFRoZXJlJ3MgYSBmdW5ueSBodyBpc3N1ZSB3aGVyZSB0aGUg aHcgcmV0dXJucyBhbGwgMCB3aGVuIHJlYWRpbmcgZnJvbQotICogR0VONl9SUF9JTlRFUlJVUFRf TElNSVRTLiBIZW5jZSB3ZSBhbHdheXMgbmVlZCB0byBjb21wdXRlIHRoZSBkZXNpcmVkIHZhbHVl Ci0gKiBvdXJzZWx2ZXMsIGluc3RlYWQgb2YgZG9pbmcgYSBybXcgY3ljbGUgKHdoaWNoIG1pZ2h0 IHJlc3VsdCBpbiB1cyBjbGVhcmluZwotICogYWxsIGxpbWl0cyBhbmQgdGhlIGdwdSBzdHVjayBh dCB3aGF0ZXZlciBmcmVxdWVuY3kgaXQgaXMgYXQgYXRtKS4KLSAqLwotc3RhdGljIHUzMiBpbnRl bF9ycHNfbGltaXRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTggdmFsKQor c3RhdGljIHZvaWQgZ2VuNl9jaGVja19tY2hfc2V0dXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQogewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0u cnBzOwotCXUzMiBsaW1pdHM7Ci0KLQkvKiBPbmx5IHNldCB0aGUgZG93biBsaW1pdCB3aGVuIHdl J3ZlIHJlYWNoZWQgdGhlIGxvd2VzdCBsZXZlbCB0byBhdm9pZAotCSAqIGdldHRpbmcgbW9yZSBp bnRlcnJ1cHRzLCBvdGhlcndpc2UgbGVhdmUgdGhpcyBjbGVhci4gVGhpcyBwcmV2ZW50cyBhCi0J ICogcmFjZSBpbiB0aGUgaHcgd2hlbiBjb21pbmcgb3V0IG9mIHJjNjogVGhlcmUncyBhIHRpbnkg d2luZG93IHdoZXJlCi0JICogdGhlIGh3IHJ1bnMgYXQgdGhlIG1pbmltYWwgY2xvY2sgYmVmb3Jl IHNlbGVjdGluZyB0aGUgZGVzaXJlZAotCSAqIGZyZXF1ZW5jeSwgaWYgdGhlIGRvd24gdGhyZXNo b2xkIGV4cGlyZXMgaW4gdGhhdCB3aW5kb3cgd2Ugd2lsbCBub3QKLQkgKiByZWNlaXZlIGEgZG93 biBpbnRlcnJ1cHQuICovCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkgewotCQlsaW1p dHMgPSAocnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQpIDw8IDIzOwotCQlpZiAodmFsIDw9IHJwcy0+ bWluX2ZyZXFfc29mdGxpbWl0KQotCQkJbGltaXRzIHw9IChycHMtPm1pbl9mcmVxX3NvZnRsaW1p dCkgPDwgMTQ7Ci0JfSBlbHNlIHsKLQkJbGltaXRzID0gcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQg PDwgMjQ7Ci0JCWlmICh2YWwgPD0gcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQpCi0JCQlsaW1pdHMg fD0gcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQgPDwgMTY7Ci0JfQorCXUzMiB0bXA7CiAKLQlyZXR1 cm4gbGltaXRzOworCXRtcCA9IEk5MTVfUkVBRChNQ0hfU1NLUEQpOworCWlmICgodG1wICYgTUNI X1NTS1BEX1dNMF9NQVNLKSAhPSBNQ0hfU1NLUERfV00wX1ZBTCkKKwkJRFJNX0RFQlVHX0tNUygi V3JvbmcgTUNIX1NTS1BEIHZhbHVlOiAweCUwOHggVGhpcyBjYW4gY2F1c2UgdW5kZXJydW5zLlxu IiwKKwkJCSAgICAgIHRtcCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJwc19zZXRfcG93ZXIoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpbnQgbmV3X3Bvd2VyKQorc3RhdGljIHZvaWQg Z2VuNl9pbml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp CiB7Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0JdTMy IHRocmVzaG9sZF91cCA9IDAsIHRocmVzaG9sZF9kb3duID0gMDsgLyogaW4gJSAqLwotCXUzMiBl aV91cCA9IDAsIGVpX2Rvd24gPSAwOwotCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmcnBzLT5wb3dl ci5tdXRleCk7CisJdTMyIGRzcGNsa19nYXRlID0gSUxLX1ZSSFVOSVRfQ0xPQ0tfR0FURV9ESVNB QkxFOwogCi0JaWYgKG5ld19wb3dlciA9PSBycHMtPnBvd2VyLm1vZGUpCi0JCXJldHVybjsKKwlJ OTE1X1dSSVRFKElMS19EU1BDTEtfR0FURV9ELCBkc3BjbGtfZ2F0ZSk7CiAKLQkvKiBOb3RlIHRo ZSB1bml0cyBoZXJlIGFyZSBub3QgZXhhY3RseSAxdXMsIGJ1dCAxMjgwbnMuICovCi0Jc3dpdGNo IChuZXdfcG93ZXIpIHsKLQljYXNlIExPV19QT1dFUjoKLQkJLyogVXBjbG9jayBpZiBtb3JlIHRo YW4gOTUlIGJ1c3kgb3ZlciAxNm1zICovCi0JCWVpX3VwID0gMTYwMDA7Ci0JCXRocmVzaG9sZF91 cCA9IDk1OworCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIsCisJCSAgIEk5MTVfUkVB RChJTEtfRElTUExBWV9DSElDS0VOMikgfAorCQkgICBJTEtfRUxQSU5fNDA5X1NFTEVDVCk7CiAK LQkJLyogRG93bmNsb2NrIGlmIGxlc3MgdGhhbiA4NSUgYnVzeSBvdmVyIDMybXMgKi8KLQkJZWlf ZG93biA9IDMyMDAwOwotCQl0aHJlc2hvbGRfZG93biA9IDg1OwotCQlicmVhazsKKwkvKiBXYURp c2FibGVIaVpQbGFuZXNXaGVuTVNBQUVuYWJsZWQ6c25iICovCisJSTkxNV9XUklURShfM0RfQ0hJ Q0tFTiwKKwkJICAgX01BU0tFRF9CSVRfRU5BQkxFKF8zRF9DSElDS0VOX0hJWl9QTEFORV9ESVNB QkxFX01TQUFfNFhfU05CKSk7CiAKLQljYXNlIEJFVFdFRU46Ci0JCS8qIFVwY2xvY2sgaWYgbW9y ZSB0aGFuIDkwJSBidXN5IG92ZXIgMTNtcyAqLwotCQllaV91cCA9IDEzMDAwOwotCQl0aHJlc2hv bGRfdXAgPSA5MDsKKwkvKiBXYURpc2FibGVfUmVuZGVyQ2FjaGVfT3BlcmF0aW9uYWxGbHVzaDpz bmIgKi8KKwlJOTE1X1dSSVRFKENBQ0hFX01PREVfMCwgX01BU0tFRF9CSVRfRElTQUJMRShSQ19P UF9GTFVTSF9FTkFCTEUpKTsKIAotCQkvKiBEb3duY2xvY2sgaWYgbGVzcyB0aGFuIDc1JSBidXN5 IG92ZXIgMzJtcyAqLwotCQllaV9kb3duID0gMzIwMDA7Ci0JCXRocmVzaG9sZF9kb3duID0gNzU7 Ci0JCWJyZWFrOworCS8qCisJICogQlNwZWMgcmVjb29tZW5kcyA4eDQgd2hlbiBNU0FBIGlzIHVz ZWQsCisJICogaG93ZXZlciBpbiBwcmFjdGljZSAxNng0IHNlZW1zIGZhc3Rlc3QuCisJICoKKwkg KiBOb3RlIHRoYXQgUFMvV00gdGhyZWFkIGNvdW50cyBkZXBlbmQgb24gdGhlIFdJWiBoYXNoaW5n CisJICogZGlzYWJsZSBiaXQsIHdoaWNoIHdlIGRvbid0IHRvdWNoIGhlcmUsIGJ1dCBpdCdzIGdv b2QKKwkgKiB0byBrZWVwIGluIG1pbmQgKHNlZSAzRFNUQVRFX1BTIGFuZCAzRFNUQVRFX1dNKS4K KwkgKi8KKwlJOTE1X1dSSVRFKEdFTjZfR1RfTU9ERSwKKwkJICAgX01BU0tFRF9GSUVMRChHRU42 X1dJWl9IQVNISU5HX01BU0ssIEdFTjZfV0laX0hBU0hJTkdfMTZ4NCkpOwogCi0JY2FzZSBISUdI X1BPV0VSOgotCQkvKiBVcGNsb2NrIGlmIG1vcmUgdGhhbiA4NSUgYnVzeSBvdmVyIDEwbXMgKi8K LQkJZWlfdXAgPSAxMDAwMDsKLQkJdGhyZXNob2xkX3VwID0gODU7CisJSTkxNV9XUklURShDQUNI RV9NT0RFXzAsCisJCSAgIF9NQVNLRURfQklUX0RJU0FCTEUoQ00wX1NUQ19FVklDVF9ESVNBQkxF X0xSQV9TTkIpKTsKIAotCQkvKiBEb3duY2xvY2sgaWYgbGVzcyB0aGFuIDYwJSBidXN5IG92ZXIg MzJtcyAqLwotCQllaV9kb3duID0gMzIwMDA7Ci0JCXRocmVzaG9sZF9kb3duID0gNjA7Ci0JCWJy ZWFrOwotCX0KKwlJOTE1X1dSSVRFKEdFTjZfVUNHQ1RMMSwKKwkJICAgSTkxNV9SRUFEKEdFTjZf VUNHQ1RMMSkgfAorCQkgICBHRU42X0JMQlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKKwkJICAg R0VONl9DU1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKIAotCS8qIFdoZW4gYnl0IGNhbiBzdXJ2 aXZlIHdpdGhvdXQgc3lzdGVtIGhhbmcgd2l0aCBkeW5hbWljCi0JICogc3cgZnJlcSBhZGp1c3Rt ZW50cywgdGhpcyByZXN0cmljdGlvbiBjYW4gYmUgbGlmdGVkLgorCS8qIEFjY29yZGluZyB0byB0 aGUgQlNwZWMgdm9sMWcsIGJpdCAxMiAoUkNQQlVOSVQpIGNsb2NrCisJICogZ2F0aW5nIGRpc2Fi bGUgbXVzdCBiZSBzZXQuICBGYWlsdXJlIHRvIHNldCBpdCByZXN1bHRzIGluCisJICogZmxpY2tl cmluZyBwaXhlbHMgZHVlIHRvIFogd3JpdGUgb3JkZXJpbmcgZmFpbHVyZXMgYWZ0ZXIKKwkgKiBz b21lIGFtb3VudCBvZiBydW50aW1lIGluIHRoZSBNZXNhICJmaXJlIiBkZW1vLCBhbmQgVW5pZ2lu ZQorCSAqIFNhbmN0dWFyeSBhbmQgVHJvcGljcywgYW5kIGFwcGFyZW50bHkgYW55dGhpbmcgZWxz ZSB3aXRoCisJICogYWxwaGEgdGVzdCBvciBwaXhlbCBkaXNjYXJkLgorCSAqCisJICogQWNjb3Jk aW5nIHRvIHRoZSBzcGVjLCBiaXQgMTEgKFJDQ1VOSVQpIG11c3QgYWxzbyBiZSBzZXQsCisJICog YnV0IHdlIGRpZG4ndCBkZWJ1ZyBhY3R1YWwgdGVzdGNhc2VzIHRvIGZpbmQgaXQgb3V0LgorCSAq CisJICogV2FEaXNhYmxlUkNDVW5pdENsb2NrR2F0aW5nOnNuYgorCSAqIFdhRGlzYWJsZVJDUEJV bml0Q2xvY2tHYXRpbmc6c25iCiAJICovCi0JaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKQot CQlnb3RvIHNraXBfaHdfd3JpdGU7Ci0KLQlJOTE1X1dSSVRFKEdFTjZfUlBfVVBfRUksCi0JCSAg IEdUX0lOVEVSVkFMX0ZST01fVVMoZGV2X3ByaXYsIGVpX3VwKSk7Ci0JSTkxNV9XUklURShHRU42 X1JQX1VQX1RIUkVTSE9MRCwKLQkJICAgR1RfSU5URVJWQUxfRlJPTV9VUyhkZXZfcHJpdiwKLQkJ CQkgICAgICAgZWlfdXAgKiB0aHJlc2hvbGRfdXAgLyAxMDApKTsKLQotCUk5MTVfV1JJVEUoR0VO Nl9SUF9ET1dOX0VJLAotCQkgICBHVF9JTlRFUlZBTF9GUk9NX1VTKGRldl9wcml2LCBlaV9kb3du KSk7Ci0JSTkxNV9XUklURShHRU42X1JQX0RPV05fVEhSRVNIT0xELAotCQkgICBHVF9JTlRFUlZB TF9GUk9NX1VTKGRldl9wcml2LAotCQkJCSAgICAgICBlaV9kb3duICogdGhyZXNob2xkX2Rvd24g LyAxMDApKTsKLQotCUk5MTVfV1JJVEUoR0VONl9SUF9DT05UUk9MLAotCQkgICAoSU5URUxfR0VO KGRldl9wcml2KSA+IDkgPyAwIDogR0VONl9SUF9NRURJQV9UVVJCTykgfAotCQkgICBHRU42X1JQ X01FRElBX0hXX05PUk1BTF9NT0RFIHwKLQkJICAgR0VONl9SUF9NRURJQV9JU19HRlggfAotCQkg ICBHRU42X1JQX0VOQUJMRSB8Ci0JCSAgIEdFTjZfUlBfVVBfQlVTWV9BVkcgfAotCQkgICBHRU42 X1JQX0RPV05fSURMRV9BVkcpOwotCi1za2lwX2h3X3dyaXRlOgotCXJwcy0+cG93ZXIubW9kZSA9 IG5ld19wb3dlcjsKLQlycHMtPnBvd2VyLnVwX3RocmVzaG9sZCA9IHRocmVzaG9sZF91cDsKLQly cHMtPnBvd2VyLmRvd25fdGhyZXNob2xkID0gdGhyZXNob2xkX2Rvd247Ci19Ci0KLXN0YXRpYyB2 b2lkIGdlbjZfc2V0X3Jwc190aHJlc2hvbGRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwgdTggdmFsKQotewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3Rf cG0ucnBzOwotCWludCBuZXdfcG93ZXI7Ci0KLQluZXdfcG93ZXIgPSBycHMtPnBvd2VyLm1vZGU7 Ci0Jc3dpdGNoIChycHMtPnBvd2VyLm1vZGUpIHsKLQljYXNlIExPV19QT1dFUjoKLQkJaWYgKHZh bCA+IHJwcy0+ZWZmaWNpZW50X2ZyZXEgKyAxICYmCi0JCSAgICB2YWwgPiBycHMtPmN1cl9mcmVx KQotCQkJbmV3X3Bvd2VyID0gQkVUV0VFTjsKLQkJYnJlYWs7CisJSTkxNV9XUklURShHRU42X1VD R0NUTDIsCisJCSAgIEdFTjZfUkNQQlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKKwkJICAgR0VO Nl9SQ0NVTklUX0NMT0NLX0dBVEVfRElTQUJMRSk7CiAKLQljYXNlIEJFVFdFRU46Ci0JCWlmICh2 YWwgPD0gcnBzLT5lZmZpY2llbnRfZnJlcSAmJgotCQkgICAgdmFsIDwgcnBzLT5jdXJfZnJlcSkK LQkJCW5ld19wb3dlciA9IExPV19QT1dFUjsKLQkJZWxzZSBpZiAodmFsID49IHJwcy0+cnAwX2Zy ZXEgJiYKLQkJCSB2YWwgPiBycHMtPmN1cl9mcmVxKQotCQkJbmV3X3Bvd2VyID0gSElHSF9QT1dF UjsKLQkJYnJlYWs7CisJLyogV2FTdHJpcHNGYW5zRGlzYWJsZUZhc3RDbGlwUGVyZm9ybWFuY2VG aXg6c25iICovCisJSTkxNV9XUklURShfM0RfQ0hJQ0tFTjMsCisJCSAgIF9NQVNLRURfQklUX0VO QUJMRShfM0RfQ0hJQ0tFTjNfU0ZfRElTQUJMRV9GQVNUQ0xJUF9DVUxMKSk7CiAKLQljYXNlIEhJ R0hfUE9XRVI6Ci0JCWlmICh2YWwgPCAocnBzLT5ycDFfZnJlcSArIHJwcy0+cnAwX2ZyZXEpID4+ IDEgJiYKLQkJICAgIHZhbCA8IHJwcy0+Y3VyX2ZyZXEpCi0JCQluZXdfcG93ZXIgPSBCRVRXRUVO OwotCQlicmVhazsKLQl9Ci0JLyogTWF4L21pbiBiaW5zIGFyZSBzcGVjaWFsICovCi0JaWYgKHZh bCA8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkKLQkJbmV3X3Bvd2VyID0gTE9XX1BPV0VSOwot CWlmICh2YWwgPj0gcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQpCi0JCW5ld19wb3dlciA9IEhJR0hf UE9XRVI7CisJLyoKKwkgKiBCc3BlYyBzYXlzOgorCSAqICJUaGlzIGJpdCBtdXN0IGJlIHNldCBp ZiAzRFNUQVRFX0NMSVAgY2xpcCBtb2RlIGlzIHNldCB0byBub3JtYWwgYW5kCisJICogM0RTVEFU RV9TRiBudW1iZXIgb2YgU0Ygb3V0cHV0IGF0dHJpYnV0ZXMgaXMgbW9yZSB0aGFuIDE2LiIKKwkg Ki8KKwlJOTE1X1dSSVRFKF8zRF9DSElDS0VOMywKKwkJICAgX01BU0tFRF9CSVRfRU5BQkxFKF8z RF9DSElDS0VOM19TRl9ESVNBQkxFX1BJUEVMSU5FRF9BVFRSX0ZFVENIKSk7CiAKLQltdXRleF9s b2NrKCZycHMtPnBvd2VyLm11dGV4KTsKLQlpZiAocnBzLT5wb3dlci5pbnRlcmFjdGl2ZSkKLQkJ bmV3X3Bvd2VyID0gSElHSF9QT1dFUjsKLQlycHNfc2V0X3Bvd2VyKGRldl9wcml2LCBuZXdfcG93 ZXIpOwotCW11dGV4X3VubG9jaygmcnBzLT5wb3dlci5tdXRleCk7Ci19CisJLyoKKwkgKiBBY2Nv cmRpbmcgdG8gdGhlIHNwZWMgdGhlIGZvbGxvd2luZyBiaXRzIHNob3VsZCBiZQorCSAqIHNldCBp biBvcmRlciB0byBlbmFibGUgbWVtb3J5IHNlbGYtcmVmcmVzaCBhbmQgZmJjOgorCSAqIFRoZSBi aXQyMSBhbmQgYml0MjIgb2YgMHg0MjAwMAorCSAqIFRoZSBiaXQyMSBhbmQgYml0MjIgb2YgMHg0 MjAwNAorCSAqIFRoZSBiaXQ1IGFuZCBiaXQ3IG9mIDB4NDIwMjAKKwkgKiBUaGUgYml0MTQgb2Yg MHg3MDE4MAorCSAqIFRoZSBiaXQxNCBvZiAweDcxMTgwCisJICoKKwkgKiBXYUZiY0FzeW5jaEZs aXBEaXNhYmxlRmJjUXVldWU6c25iCisJICovCisJSTkxNV9XUklURShJTEtfRElTUExBWV9DSElD S0VOMSwKKwkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4xKSB8CisJCSAgIElMS19G QkNRX0RJUyB8IElMS19QQUJTVFJFVENIX0RJUyk7CisJSTkxNV9XUklURShJTEtfRElTUExBWV9D SElDS0VOMiwKKwkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4yKSB8CisJCSAgIElM S19EUEFSQl9HQVRFIHwgSUxLX1ZTRFBGRF9GVUxMKTsKKwlJOTE1X1dSSVRFKElMS19EU1BDTEtf R0FURV9ELAorCQkgICBJOTE1X1JFQUQoSUxLX0RTUENMS19HQVRFX0QpIHwKKwkJICAgSUxLX0RQ QVJCVU5JVF9DTE9DS19HQVRFX0VOQUJMRSAgfAorCQkgICBJTEtfRFBGRFVOSVRfQ0xPQ0tfR0FU RV9FTkFCTEUpOwogCi12b2lkIGludGVsX3Jwc19tYXJrX2ludGVyYWN0aXZlKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1LCBib29sIGludGVyYWN0aXZlKQotewotCXN0cnVjdCBpbnRlbF9y cHMgKnJwcyA9ICZpOTE1LT5ndF9wbS5ycHM7CisJZzR4X2Rpc2FibGVfdHJpY2tsZV9mZWVkKGRl dl9wcml2KTsKIAotCWlmIChJTlRFTF9HRU4oaTkxNSkgPCA2KQotCQlyZXR1cm47CisJY3B0X2lu aXRfY2xvY2tfZ2F0aW5nKGRldl9wcml2KTsKIAotCW11dGV4X2xvY2soJnJwcy0+cG93ZXIubXV0 ZXgpOwotCWlmIChpbnRlcmFjdGl2ZSkgewotCQlpZiAoIXJwcy0+cG93ZXIuaW50ZXJhY3RpdmUr KyAmJiBSRUFEX09OQ0UoaTkxNS0+Z3QuYXdha2UpKQotCQkJcnBzX3NldF9wb3dlcihpOTE1LCBI SUdIX1BPV0VSKTsKLQl9IGVsc2UgewotCQlHRU1fQlVHX09OKCFycHMtPnBvd2VyLmludGVyYWN0 aXZlKTsKLQkJcnBzLT5wb3dlci5pbnRlcmFjdGl2ZS0tOwotCX0KLQltdXRleF91bmxvY2soJnJw cy0+cG93ZXIubXV0ZXgpOworCWdlbjZfY2hlY2tfbWNoX3NldHVwKGRldl9wcml2KTsKIH0KIAot c3RhdGljIHUzMiBnZW42X3Jwc19wbV9tYXNrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwgdTggdmFsKQorc3RhdGljIHZvaWQgZ2VuN19zZXR1cF9maXhlZF9mdW5jX3NjaGVkdWxl cihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0Jc3RydWN0IGludGVsX3Jw cyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0JdTMyIG1hc2sgPSAwOwotCi0JLyogV2Ug dXNlIFVQX0VJX0VYUElSRUQgaW50ZXJ1cHRzIGZvciBib3RoIHVwL2Rvd24gaW4gbWFudWFsIG1v ZGUgKi8KLQlpZiAodmFsID4gcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQpCi0JCW1hc2sgfD0gR0VO Nl9QTV9SUF9VUF9FSV9FWFBJUkVEIHwgR0VONl9QTV9SUF9ET1dOX1RIUkVTSE9MRCB8IEdFTjZf UE1fUlBfRE9XTl9USU1FT1VUOwotCWlmICh2YWwgPCBycHMtPm1heF9mcmVxX3NvZnRsaW1pdCkK LQkJbWFzayB8PSBHRU42X1BNX1JQX1VQX0VJX0VYUElSRUQgfCBHRU42X1BNX1JQX1VQX1RIUkVT SE9MRDsKLQotCW1hc2sgJj0gZGV2X3ByaXYtPnBtX3Jwc19ldmVudHM7Ci0KLQlyZXR1cm4gZ2Vu Nl9zYW5pdGl6ZV9ycHNfcG1fbWFzayhkZXZfcHJpdiwgfm1hc2spOwotfQotCi0vKiBnZW42X3Nl dF9ycHMgaXMgY2FsbGVkIHRvIHVwZGF0ZSB0aGUgZnJlcXVlbmN5IHJlcXVlc3QsIGJ1dCBzaG91 bGQgYWxzbyBiZQotICogY2FsbGVkIHdoZW4gdGhlIHJhbmdlIChtaW5fZGVsYXkgYW5kIG1heF9k ZWxheSkgaXMgbW9kaWZpZWQgc28gdGhhdCB3ZSBjYW4KLSAqIHVwZGF0ZSB0aGUgR0VONl9SUF9J TlRFUlJVUFRfTElNSVRTIHJlZ2lzdGVyIGFjY29yZGluZ2x5LiAqLwotc3RhdGljIGludCBnZW42 X3NldF9ycHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1OCB2YWwpCi17Ci0J c3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0KLQkvKiBtaW4v bWF4IGRlbGF5IG1heSBzdGlsbCBoYXZlIGJlZW4gbW9kaWZpZWQgc28gYmUgc3VyZSB0bwotCSAq IHdyaXRlIHRoZSBsaW1pdHMgdmFsdWUuCi0JICovCi0JaWYgKHZhbCAhPSBycHMtPmN1cl9mcmVx KSB7Ci0JCWdlbjZfc2V0X3Jwc190aHJlc2hvbGRzKGRldl9wcml2LCB2YWwpOwotCi0JCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDkpCi0JCQlJOTE1X1dSSVRFKEdFTjZfUlBOU1dSRVEsCi0J CQkJICAgR0VOOV9GUkVRVUVOQ1kodmFsKSk7Ci0JCWVsc2UgaWYgKElTX0hBU1dFTEwoZGV2X3By aXYpIHx8IElTX0JST0FEV0VMTChkZXZfcHJpdikpCi0JCQlJOTE1X1dSSVRFKEdFTjZfUlBOU1dS RVEsCi0JCQkJICAgSFNXX0ZSRVFVRU5DWSh2YWwpKTsKLQkJZWxzZQotCQkJSTkxNV9XUklURShH RU42X1JQTlNXUkVRLAotCQkJCSAgIEdFTjZfRlJFUVVFTkNZKHZhbCkgfAotCQkJCSAgIEdFTjZf T0ZGU0VUKDApIHwKLQkJCQkgICBHRU42X0FHR1JFU1NJVkVfVFVSQk8pOwotCX0KLQotCS8qIE1h a2Ugc3VyZSB3ZSBjb250aW51ZSB0byBnZXQgaW50ZXJydXB0cwotCSAqIHVudGlsIHdlIGhpdCB0 aGUgbWluaW11bSBvciBtYXhpbXVtIGZyZXF1ZW5jaWVzLgotCSAqLwotCUk5MTVfV1JJVEUoR0VO Nl9SUF9JTlRFUlJVUFRfTElNSVRTLCBpbnRlbF9ycHNfbGltaXRzKGRldl9wcml2LCB2YWwpKTsK LQlJOTE1X1dSSVRFKEdFTjZfUE1JTlRSTVNLLCBnZW42X3Jwc19wbV9tYXNrKGRldl9wcml2LCB2 YWwpKTsKLQotCXJwcy0+Y3VyX2ZyZXEgPSB2YWw7Ci0JdHJhY2VfaW50ZWxfZ3B1X2ZyZXFfY2hh bmdlKGludGVsX2dwdV9mcmVxKGRldl9wcml2LCB2YWwpKTsKLQotCXJldHVybiAwOwotfQotCi1z dGF0aWMgaW50IHZhbGxleXZpZXdfc2V0X3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsIHU4IHZhbCkKLXsKLQlpbnQgZXJyOwotCi0JaWYgKFdBUk5fT05DRShJU19DSEVSUllW SUVXKGRldl9wcml2KSAmJiAodmFsICYgMSksCi0JCSAgICAgICJPZGQgR1BVIGZyZXEgdmFsdWVc biIpKQotCQl2YWwgJj0gfjE7Ci0KLQlJOTE1X1dSSVRFKEdFTjZfUE1JTlRSTVNLLCBnZW42X3Jw c19wbV9tYXNrKGRldl9wcml2LCB2YWwpKTsKLQotCWlmICh2YWwgIT0gZGV2X3ByaXYtPmd0X3Bt LnJwcy5jdXJfZnJlcSkgewotCQl2bHZfcHVuaXRfZ2V0KGRldl9wcml2KTsKLQkJZXJyID0gdmx2 X3B1bml0X3dyaXRlKGRldl9wcml2LCBQVU5JVF9SRUdfR1BVX0ZSRVFfUkVRLCB2YWwpOwotCQl2 bHZfcHVuaXRfcHV0KGRldl9wcml2KTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0KLQkJ Z2VuNl9zZXRfcnBzX3RocmVzaG9sZHMoZGV2X3ByaXYsIHZhbCk7Ci0JfQotCi0JZGV2X3ByaXYt Pmd0X3BtLnJwcy5jdXJfZnJlcSA9IHZhbDsKLQl0cmFjZV9pbnRlbF9ncHVfZnJlcV9jaGFuZ2Uo aW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHZhbCkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIHZs dl9zZXRfcnBzX2lkbGU6IFNldCB0aGUgZnJlcXVlbmN5IHRvIGlkbGUsIGlmIEdmeCBjbG9ja3Mg YXJlIGRvd24KLSAqCi0gKiAqIElmIEdmeCBpcyBJZGxlLCB0aGVuCi0gKiAxLiBGb3JjZXdha2Ug TWVkaWEgd2VsbC4KLSAqIDIuIFJlcXVlc3QgaWRsZSBmcmVxLgotICogMy4gUmVsZWFzZSBGb3Jj ZXdha2Ugb2YgTWVkaWEgd2VsbC4KLSovCi1zdGF0aWMgdm9pZCB2bHZfc2V0X3Jwc19pZGxlKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpy cHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKLQl1MzIgdmFsID0gcnBzLT5pZGxlX2ZyZXE7Ci0J aW50IGVycjsKLQotCWlmIChycHMtPmN1cl9mcmVxIDw9IHZhbCkKLQkJcmV0dXJuOwotCi0JLyog VGhlIHB1bml0IGRlbGF5cyB0aGUgd3JpdGUgb2YgdGhlIGZyZXF1ZW5jeSBhbmQgdm9sdGFnZSB1 bnRpbCBpdAotCSAqIGRldGVybWluZXMgdGhlIEdQVSBpcyBhd2FrZS4gRHVyaW5nIG5vcm1hbCB1 c2FnZSB3ZSBkb24ndCB3YW50IHRvCi0JICogd2FzdGUgcG93ZXIgY2hhbmdpbmcgdGhlIGZyZXF1 ZW5jeSBpZiB0aGUgR1BVIGlzIHNsZWVwaW5nIChyYzYpLgotCSAqIEhvd2V2ZXIsIHRoZSBHUFUg YW5kIGRyaXZlciBpcyBub3cgaWRsZSBhbmQgd2UgZG8gbm90IHdhbnQgdG8gZGVsYXkKLQkgKiBz d2l0Y2hpbmcgdG8gbWluaW11bSB2b2x0YWdlIChyZWR1Y2luZyBwb3dlciB3aGlsc3QgaWRsZSkg YXMgd2UgZG8KLQkgKiBub3QgZXhwZWN0IHRvIGJlIHdva2VuIGluIHRoZSBuZWFyIGZ1dHVyZSBh bmQgc28gbXVzdCBmbHVzaCB0aGUKLQkgKiBjaGFuZ2UgYnkgd2FraW5nIHRoZSBkZXZpY2UuCi0J ICoKLQkgKiBXZSBjaG9vc2UgdG8gdGFrZSB0aGUgbWVkaWEgcG93ZXJ3ZWxsIChlaXRoZXIgd291 bGQgZG8gdG8gdHJpY2sgdGhlCi0JICogcHVuaXQgaW50byBjb21taXR0aW5nIHRoZSB2b2x0YWdl IGNoYW5nZSkgYXMgdGhhdCB0YWtlcyBhIGxvdCBsZXNzCi0JICogcG93ZXIgdGhhbiB0aGUgcmVu ZGVyIHBvd2Vyd2VsbC4KLQkgKi8KLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldCgmZGV2X3By aXYtPnVuY29yZSwgRk9SQ0VXQUtFX01FRElBKTsKLQllcnIgPSB2YWxsZXl2aWV3X3NldF9ycHMo ZGV2X3ByaXYsIHZhbCk7Ci0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoJmRldl9wcml2LT51 bmNvcmUsIEZPUkNFV0FLRV9NRURJQSk7Ci0KLQlpZiAoZXJyKQotCQlEUk1fRVJST1IoIkZhaWxl ZCB0byBzZXQgUlBTIGZvciBpZGxlXG4iKTsKLX0KLQotdm9pZCBnZW42X3Jwc19idXN5KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMg PSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKLQotCW11dGV4X2xvY2soJnJwcy0+bG9jayk7Ci0JaWYg KHJwcy0+ZW5hYmxlZCkgewotCQl1OCBmcmVxOwotCi0JCWlmIChkZXZfcHJpdi0+cG1fcnBzX2V2 ZW50cyAmIEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJFRCkKLQkJCWdlbjZfcnBzX3Jlc2V0X2VpKGRl dl9wcml2KTsKLQkJSTkxNV9XUklURShHRU42X1BNSU5UUk1TSywKLQkJCSAgIGdlbjZfcnBzX3Bt X21hc2soZGV2X3ByaXYsIHJwcy0+Y3VyX2ZyZXEpKTsKLQotCQlnZW42X2VuYWJsZV9ycHNfaW50 ZXJydXB0cyhkZXZfcHJpdik7Ci0KLQkJLyogVXNlIHRoZSB1c2VyJ3MgZGVzaXJlZCBmcmVxdWVu Y3kgYXMgYSBndWlkZSwgYnV0IGZvciBiZXR0ZXIKLQkJICogcGVyZm9ybWFuY2UsIGp1bXAgZGly ZWN0bHkgdG8gUlBlIGFzIG91ciBzdGFydGluZyBmcmVxdWVuY3kuCi0JCSAqLwotCQlmcmVxID0g bWF4KHJwcy0+Y3VyX2ZyZXEsCi0JCQkgICBycHMtPmVmZmljaWVudF9mcmVxKTsKLQotCQlpZiAo aW50ZWxfc2V0X3JwcyhkZXZfcHJpdiwKLQkJCQkgIGNsYW1wKGZyZXEsCi0JCQkJCXJwcy0+bWlu X2ZyZXFfc29mdGxpbWl0LAotCQkJCQlycHMtPm1heF9mcmVxX3NvZnRsaW1pdCkpKQotCQkJRFJN X0RFQlVHX0RSSVZFUigiRmFpbGVkIHRvIHNldCBpZGxlIGZyZXF1ZW5jeVxuIik7Ci0JfQotCW11 dGV4X3VubG9jaygmcnBzLT5sb2NrKTsKLX0KLQotdm9pZCBnZW42X3Jwc19pZGxlKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAm ZGV2X3ByaXYtPmd0X3BtLnJwczsKLQotCS8qIEZsdXNoIG91ciBib3R0b20taGFsZiBzbyB0aGF0 IGl0IGRvZXMgbm90IHJhY2Ugd2l0aCB1cwotCSAqIHNldHRpbmcgdGhlIGlkbGUgZnJlcXVlbmN5 IGFuZCBzbyB0aGF0IGl0IGlzIGJvdW5kZWQgYnkKLQkgKiBvdXIgcnBtIHdha2VyZWYuIEFuZCB0 aGVuIGRpc2FibGUgdGhlIGludGVycnVwdHMgdG8gc3RvcCBhbnkKLQkgKiBmdXRoZXIgUlBTIHJl Y2xvY2tpbmcgd2hpbHN0IHdlIGFyZSBhc2xlZXAuCi0JICovCi0JZ2VuNl9kaXNhYmxlX3Jwc19p bnRlcnJ1cHRzKGRldl9wcml2KTsKLQotCW11dGV4X2xvY2soJnJwcy0+bG9jayk7Ci0JaWYgKHJw cy0+ZW5hYmxlZCkgewotCQlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZ VklFVyhkZXZfcHJpdikpCi0JCQl2bHZfc2V0X3Jwc19pZGxlKGRldl9wcml2KTsKLQkJZWxzZQot CQkJZ2VuNl9zZXRfcnBzKGRldl9wcml2LCBycHMtPmlkbGVfZnJlcSk7Ci0JCXJwcy0+bGFzdF9h ZGogPSAwOwotCQlJOTE1X1dSSVRFKEdFTjZfUE1JTlRSTVNLLAotCQkJICAgZ2VuNl9zYW5pdGl6 ZV9ycHNfcG1fbWFzayhkZXZfcHJpdiwgfjApKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZycHMtPmxv Y2spOwotfQotCi12b2lkIGdlbjZfcnBzX2Jvb3N0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQot ewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZycS0+aTkxNS0+Z3RfcG0ucnBzOwotCXVuc2ln bmVkIGxvbmcgZmxhZ3M7Ci0JYm9vbCBib29zdDsKLQotCS8qIFRoaXMgaXMgaW50ZW50aW9uYWxs eSByYWN5ISBXZSBwZWVrIGF0IHRoZSBzdGF0ZSBoZXJlLCB0aGVuCi0JICogdmFsaWRhdGUgaW5z aWRlIHRoZSBSUFMgd29ya2VyLgotCSAqLwotCWlmICghcnBzLT5lbmFibGVkKQotCQlyZXR1cm47 Ci0KLQlpZiAoaTkxNV9yZXF1ZXN0X3NpZ25hbGVkKHJxKSkKLQkJcmV0dXJuOwotCi0JLyogU2Vy aWFsaXplcyB3aXRoIGk5MTVfcmVxdWVzdF9yZXRpcmUoKSAqLwotCWJvb3N0ID0gZmFsc2U7Ci0J c3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7Ci0JaWYgKCFpOTE1X3JlcXVlc3Rf aGFzX3dhaXRib29zdChycSkgJiYKLQkgICAgIWRtYV9mZW5jZV9pc19zaWduYWxlZF9sb2NrZWQo JnJxLT5mZW5jZSkpIHsKLQkJYm9vc3QgPSAhYXRvbWljX2ZldGNoX2luYygmcnBzLT5udW1fd2Fp dGVycyk7Ci0JCXJxLT5mbGFncyB8PSBJOTE1X1JFUVVFU1RfV0FJVEJPT1NUOwotCX0KLQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOwotCWlmICghYm9vc3QpCi0JCXJl dHVybjsKLQotCWlmIChSRUFEX09OQ0UocnBzLT5jdXJfZnJlcSkgPCBycHMtPmJvb3N0X2ZyZXEp Ci0JCXNjaGVkdWxlX3dvcmsoJnJwcy0+d29yayk7Ci0KLQlhdG9taWNfaW5jKCZycHMtPmJvb3N0 cyk7Ci19Ci0KLWludCBpbnRlbF9zZXRfcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwgdTggdmFsKQotewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3Rf cG0ucnBzOwotCWludCBlcnI7Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZycHMtPmxvY2spOwot CUdFTV9CVUdfT04odmFsID4gcnBzLT5tYXhfZnJlcSk7Ci0JR0VNX0JVR19PTih2YWwgPCBycHMt Pm1pbl9mcmVxKTsKLQotCWlmICghcnBzLT5lbmFibGVkKSB7Ci0JCXJwcy0+Y3VyX2ZyZXEgPSB2 YWw7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJ U19DSEVSUllWSUVXKGRldl9wcml2KSkKLQkJZXJyID0gdmFsbGV5dmlld19zZXRfcnBzKGRldl9w cml2LCB2YWwpOwotCWVsc2UKLQkJZXJyID0gZ2VuNl9zZXRfcnBzKGRldl9wcml2LCB2YWwpOwot Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgZ2VuOV9kaXNhYmxlX3JwcyhzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JSTkxNV9XUklURShHRU42X1JQX0NPTlRS T0wsIDApOwotfQotCi1zdGF0aWMgdm9pZCBnZW42X2Rpc2FibGVfcnBzKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlJOTE1X1dSSVRFKEdFTjZfUlBOU1dSRVEsIDEgPDwg MzEpOwotCUk5MTVfV1JJVEUoR0VONl9SUF9DT05UUk9MLCAwKTsKLX0KLQotc3RhdGljIHZvaWQg Y2hlcnJ5dmlld19kaXNhYmxlX3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Ci17Ci0JSTkxNV9XUklURShHRU42X1JQX0NPTlRST0wsIDApOwotfQotCi1zdGF0aWMgdm9pZCB2 YWxsZXl2aWV3X2Rpc2FibGVfcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK LXsKLQlJOTE1X1dSSVRFKEdFTjZfUlBfQ09OVFJPTCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdl bjZfaW5pdF9ycHNfZnJlcXVlbmNpZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQotewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwotCi0J LyogQWxsIG9mIHRoZXNlIHZhbHVlcyBhcmUgaW4gdW5pdHMgb2YgNTBNSHogKi8KLQotCS8qIHN0 YXRpYyB2YWx1ZXMgZnJvbSBIVzogUlAwID4gUlAxID4gUlBuIChtaW5fZnJlcSkgKi8KLQlpZiAo SVNfR0VOOV9MUChkZXZfcHJpdikpIHsKLQkJdTMyIHJwX3N0YXRlX2NhcCA9IEk5MTVfUkVBRChC WFRfUlBfU1RBVEVfQ0FQKTsKLQkJcnBzLT5ycDBfZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4gMTYp ICYgMHhmZjsKLQkJcnBzLT5ycDFfZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4gIDgpICYgMHhmZjsK LQkJcnBzLT5taW5fZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4gIDApICYgMHhmZjsKLQl9IGVsc2Ug ewotCQl1MzIgcnBfc3RhdGVfY2FwID0gSTkxNV9SRUFEKEdFTjZfUlBfU1RBVEVfQ0FQKTsKLQkJ cnBzLT5ycDBfZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4gIDApICYgMHhmZjsKLQkJcnBzLT5ycDFf ZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4gIDgpICYgMHhmZjsKLQkJcnBzLT5taW5fZnJlcSA9IChy cF9zdGF0ZV9jYXAgPj4gMTYpICYgMHhmZjsKLQl9Ci0JLyogaHdfbWF4ID0gUlAwIHVudGlsIHdl IGNoZWNrIGZvciBvdmVyY2xvY2tpbmcgKi8KLQlycHMtPm1heF9mcmVxID0gcnBzLT5ycDBfZnJl cTsKLQotCXJwcy0+ZWZmaWNpZW50X2ZyZXEgPSBycHMtPnJwMV9mcmVxOwotCWlmIChJU19IQVNX RUxMKGRldl9wcml2KSB8fCBJU19CUk9BRFdFTEwoZGV2X3ByaXYpIHx8Ci0JICAgIElTX0dFTjlf QkMoZGV2X3ByaXYpIHx8IElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTApIHsKLQkJdTMyIGRkY2Nf c3RhdHVzID0gMDsKLQotCQlpZiAoc2FuZHlicmlkZ2VfcGNvZGVfcmVhZChkZXZfcHJpdiwKLQkJ CQkJICAgSFNXX1BDT0RFX0RZTkFNSUNfRFVUWV9DWUNMRV9DT05UUk9MLAotCQkJCQkgICAmZGRj Y19zdGF0dXMsIE5VTEwpID09IDApCi0JCQlycHMtPmVmZmljaWVudF9mcmVxID0KLQkJCQljbGFt cF90KHU4LAotCQkJCQkoKGRkY2Nfc3RhdHVzID4+IDgpICYgMHhmZiksCi0JCQkJCXJwcy0+bWlu X2ZyZXEsCi0JCQkJCXJwcy0+bWF4X2ZyZXEpOwotCX0KLQotCWlmIChJU19HRU45X0JDKGRldl9w cml2KSB8fCBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwKSB7Ci0JCS8qIFN0b3JlIHRoZSBmcmVx dWVuY3kgdmFsdWVzIGluIDE2LjY2IE1IWiB1bml0cywgd2hpY2ggaXMKLQkJICogdGhlIG5hdHVy YWwgaGFyZHdhcmUgdW5pdCBmb3IgU0tMCi0JCSAqLwotCQlycHMtPnJwMF9mcmVxICo9IEdFTjlf RlJFUV9TQ0FMRVI7Ci0JCXJwcy0+cnAxX2ZyZXEgKj0gR0VOOV9GUkVRX1NDQUxFUjsKLQkJcnBz LT5taW5fZnJlcSAqPSBHRU45X0ZSRVFfU0NBTEVSOwotCQlycHMtPm1heF9mcmVxICo9IEdFTjlf RlJFUV9TQ0FMRVI7Ci0JCXJwcy0+ZWZmaWNpZW50X2ZyZXEgKj0gR0VOOV9GUkVRX1NDQUxFUjsK LQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHJlc2V0X3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCi0JCSAgICAgIGludCAoKnNldCkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKiwg dTgpKQotewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwot CXU4IGZyZXEgPSBycHMtPmN1cl9mcmVxOwotCi0JLyogZm9yY2UgYSByZXNldCAqLwotCXJwcy0+ cG93ZXIubW9kZSA9IC0xOwotCXJwcy0+Y3VyX2ZyZXEgPSAtMTsKLQotCWlmIChzZXQoZGV2X3By aXYsIGZyZXEpKQotCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZXNldCBSUFMgdG8gaW5pdGlhbCB2 YWx1ZXNcbiIpOwotfQotCi0vKiBTZWUgdGhlIEdlbjlfR1RfUE1fUHJvZ3JhbW1pbmdfR3VpZGUg ZG9jIGZvciB0aGUgYmVsb3cgKi8KLXN0YXRpYyB2b2lkIGdlbjlfZW5hYmxlX3JwcyhzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9n ZXQoJmRldl9wcml2LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwotCi0JLyogUHJvZ3JhbSBkZWZh dWx0cyBhbmQgdGhyZXNob2xkcyBmb3IgUlBTICovCi0JaWYgKElTX0dFTihkZXZfcHJpdiwgOSkp Ci0JCUk5MTVfV1JJVEUoR0VONl9SQ19WSURFT19GUkVRLAotCQkJR0VOOV9GUkVRVUVOQ1koZGV2 X3ByaXYtPmd0X3BtLnJwcy5ycDFfZnJlcSkpOwotCi0JLyogMSBzZWNvbmQgdGltZW91dCovCi0J STkxNV9XUklURShHRU42X1JQX0RPV05fVElNRU9VVCwKLQkJR1RfSU5URVJWQUxfRlJPTV9VUyhk ZXZfcHJpdiwgMTAwMDAwMCkpOwotCi0JSTkxNV9XUklURShHRU42X1JQX0lETEVfSFlTVEVSU0lT LCAweGEpOwotCi0JLyogTGVhbmluZyBvbiB0aGUgYmVsb3cgY2FsbCB0byBnZW42X3NldF9ycHMg dG8gcHJvZ3JhbS9zZXR1cCB0aGUKLQkgKiBVcC9Eb3duIEVJICYgdGhyZXNob2xkIHJlZ2lzdGVy cywgYXMgd2VsbCBhcyB0aGUgUlBfQ09OVFJPTCwKLQkgKiBSUF9JTlRFUlJVUFRfTElNSVRTICYg UlBOU1dSRVEgcmVnaXN0ZXJzICovCi0JcmVzZXRfcnBzKGRldl9wcml2LCBnZW42X3NldF9ycHMp OwotCi0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoJmRldl9wcml2LT51bmNvcmUsIEZPUkNF V0FLRV9BTEwpOwotfQotCi1zdGF0aWMgdm9pZCBnZW44X2VuYWJsZV9ycHMoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZf cHJpdi0+Z3RfcG0ucnBzOwotCi0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoJmRldl9wcml2 LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwotCi0JLyogMSBQcm9ncmFtIGRlZmF1bHRzIGFuZCB0 aHJlc2hvbGRzIGZvciBSUFMqLwotCUk5MTVfV1JJVEUoR0VONl9SUE5TV1JFUSwKLQkJICAgSFNX X0ZSRVFVRU5DWShycHMtPnJwMV9mcmVxKSk7Ci0JSTkxNV9XUklURShHRU42X1JDX1ZJREVPX0ZS RVEsCi0JCSAgIEhTV19GUkVRVUVOQ1kocnBzLT5ycDFfZnJlcSkpOwotCS8qIE5COiBEb2NzIHNh eSAxcywgYW5kIDEwMDAwMDAgLSB3aGljaCBhcmVuJ3QgZXF1aXZhbGVudCAqLwotCUk5MTVfV1JJ VEUoR0VONl9SUF9ET1dOX1RJTUVPVVQsIDEwMDAwMDAwMCAvIDEyOCk7IC8qIDEgc2Vjb25kIHRp bWVvdXQgKi8KLQotCS8qIERvY3MgcmVjb21tZW5kIDkwME1IeiwgYW5kIDMwMCBNSHogcmVzcGVj dGl2ZWx5ICovCi0JSTkxNV9XUklURShHRU42X1JQX0lOVEVSUlVQVF9MSU1JVFMsCi0JCSAgIHJw cy0+bWF4X2ZyZXFfc29mdGxpbWl0IDw8IDI0IHwKLQkJICAgcnBzLT5taW5fZnJlcV9zb2Z0bGlt aXQgPDwgMTYpOwotCi0JSTkxNV9XUklURShHRU42X1JQX1VQX1RIUkVTSE9MRCwgNzYwMDAwMCAv IDEyOCk7IC8qIDc2bXMgYnVzeW5lc3MgcGVyIEVJLCA5MCUgKi8KLQlJOTE1X1dSSVRFKEdFTjZf UlBfRE9XTl9USFJFU0hPTEQsIDMxMzAwMDAwIC8gMTI4KTsgLyogMzEzbXMgYnVzeW5lc3MgcGVy IEVJLCA3MCUqLwotCUk5MTVfV1JJVEUoR0VONl9SUF9VUF9FSSwgNjYwMDApOyAvKiA4NC40OG1z LCBYWFg6IHJhbmRvbT8gKi8KLQlJOTE1X1dSSVRFKEdFTjZfUlBfRE9XTl9FSSwgMzUwMDAwKTsg LyogNDQ4bXMsIFhYWDogcmFuZG9tPyAqLwotCi0JSTkxNV9XUklURShHRU42X1JQX0lETEVfSFlT VEVSU0lTLCAxMCk7Ci0KLQkvKiAyOiBFbmFibGUgUlBTICovCi0JSTkxNV9XUklURShHRU42X1JQ X0NPTlRST0wsCi0JCSAgIEdFTjZfUlBfTUVESUFfVFVSQk8gfAotCQkgICBHRU42X1JQX01FRElB X0hXX05PUk1BTF9NT0RFIHwKLQkJICAgR0VONl9SUF9NRURJQV9JU19HRlggfAotCQkgICBHRU42 X1JQX0VOQUJMRSB8Ci0JCSAgIEdFTjZfUlBfVVBfQlVTWV9BVkcgfAotCQkgICBHRU42X1JQX0RP V05fSURMRV9BVkcpOwotCi0JcmVzZXRfcnBzKGRldl9wcml2LCBnZW42X3NldF9ycHMpOwotCi0J aW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoJmRldl9wcml2LT51bmNvcmUsIEZPUkNFV0FLRV9B TEwpOwotfQotCi1zdGF0aWMgdm9pZCBnZW42X2VuYWJsZV9ycHMoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQotewotCS8qIEhlcmUgYmVnaW5zIGEgbWFnaWMgc2VxdWVuY2Ugb2Yg cmVnaXN0ZXIgd3JpdGVzIHRvIGVuYWJsZQotCSAqIGF1dG8tZG93bmNsb2NraW5nLgotCSAqCi0J ICogUGVyaGFwcyB0aGVyZSBtaWdodCBiZSBzb21lIHZhbHVlIGluIGV4cG9zaW5nIHRoZXNlIHRv Ci0JICogdXNlcnNwYWNlLi4uCi0JICovCi0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoJmRl dl9wcml2LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwotCi0JLyogUG93ZXIgZG93biBpZiBjb21w bGV0ZWx5IGlkbGUgZm9yIG92ZXIgNTBtcyAqLwotCUk5MTVfV1JJVEUoR0VONl9SUF9ET1dOX1RJ TUVPVVQsIDUwMDAwKTsKLQlJOTE1X1dSSVRFKEdFTjZfUlBfSURMRV9IWVNURVJTSVMsIDEwKTsK LQotCXJlc2V0X3JwcyhkZXZfcHJpdiwgZ2VuNl9zZXRfcnBzKTsKLQotCWludGVsX3VuY29yZV9m b3JjZXdha2VfcHV0KCZkZXZfcHJpdi0+dW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKLX0KLQotc3Rh dGljIGludCBjaGVycnl2aWV3X3Jwc19tYXhfZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCi17Ci0JdTMyIHZhbCwgcnAwOwotCi0JdmFsID0gdmx2X3B1bml0X3JlYWQoZGV2 X3ByaXYsIEZCX0dGWF9GTUFYX0FUX1ZNQVhfRlVTRSk7Ci0KLQlzd2l0Y2ggKFJVTlRJTUVfSU5G TyhkZXZfcHJpdiktPnNzZXUuZXVfdG90YWwpIHsKLQljYXNlIDg6Ci0JCS8qICgyICogNCkgY29u ZmlnICovCi0JCXJwMCA9ICh2YWwgPj4gRkJfR0ZYX0ZNQVhfQVRfVk1BWF8yU1M0RVVfRlVTRV9T SElGVCk7Ci0JCWJyZWFrOwotCWNhc2UgMTI6Ci0JCS8qICgyICogNikgY29uZmlnICovCi0JCXJw MCA9ICh2YWwgPj4gRkJfR0ZYX0ZNQVhfQVRfVk1BWF8yU1M2RVVfRlVTRV9TSElGVCk7Ci0JCWJy ZWFrOwotCWNhc2UgMTY6Ci0JCS8qICgyICogOCkgY29uZmlnICovCi0JZGVmYXVsdDoKLQkJLyog U2V0dGluZyAoMiAqIDgpIE1pbiBSUDAgZm9yIGFueSBvdGhlciBjb21iaW5hdGlvbiAqLwotCQly cDAgPSAodmFsID4+IEZCX0dGWF9GTUFYX0FUX1ZNQVhfMlNTOEVVX0ZVU0VfU0hJRlQpOwotCQli cmVhazsKLQl9Ci0KLQlycDAgPSAocnAwICYgRkJfR0ZYX0ZSRVFfRlVTRV9NQVNLKTsKLQotCXJl dHVybiBycDA7Ci19Ci0KLXN0YXRpYyBpbnQgY2hlcnJ5dmlld19ycHNfcnBlX2ZyZXEoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXUzMiB2YWwsIHJwZTsKLQotCXZhbCA9 IHZsdl9wdW5pdF9yZWFkKGRldl9wcml2LCBQVU5JVF9HUFVfRFVUWUNZQ0xFX1JFRyk7Ci0JcnBl ID0gKHZhbCA+PiBQVU5JVF9HUFVfRFVUWUNZQ0xFX1JQRV9GUkVRX1NISUZUKSAmIFBVTklUX0dQ VV9EVVRZQ1lDTEVfUlBFX0ZSRVFfTUFTSzsKLQotCXJldHVybiBycGU7Ci19Ci0KLXN0YXRpYyBp bnQgY2hlcnJ5dmlld19ycHNfZ3Vhcl9mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKLXsKLQl1MzIgdmFsLCBycDE7Ci0KLQl2YWwgPSB2bHZfcHVuaXRfcmVhZChkZXZfcHJp diwgRkJfR0ZYX0ZNQVhfQVRfVk1BWF9GVVNFKTsKLQlycDEgPSAodmFsICYgRkJfR0ZYX0ZSRVFf RlVTRV9NQVNLKTsKLQotCXJldHVybiBycDE7Ci19Ci0KLXN0YXRpYyB1MzIgY2hlcnJ5dmlld19y cHNfbWluX2ZyZXEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXUzMiB2 YWwsIHJwbjsKLQotCXZhbCA9IHZsdl9wdW5pdF9yZWFkKGRldl9wcml2LCBGQl9HRlhfRk1JTl9B VF9WTUlOX0ZVU0UpOwotCXJwbiA9ICgodmFsID4+IEZCX0dGWF9GTUlOX0FUX1ZNSU5fRlVTRV9T SElGVCkgJgotCQkgICAgICAgRkJfR0ZYX0ZSRVFfRlVTRV9NQVNLKTsKLQotCXJldHVybiBycG47 Ci19Ci0KLXN0YXRpYyBpbnQgdmFsbGV5dmlld19ycHNfZ3Vhcl9mcmVxKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQl1MzIgdmFsLCBycDE7Ci0KLQl2YWwgPSB2bHZfbmNf cmVhZChkZXZfcHJpdiwgSU9TRl9OQ19GQl9HRlhfRlJFUV9GVVNFKTsKLQotCXJwMSA9ICh2YWwg JiBGQl9HRlhfRkdVQVJBTlRFRURfRlJFUV9GVVNFX01BU0spID4+IEZCX0dGWF9GR1VBUkFOVEVF RF9GUkVRX0ZVU0VfU0hJRlQ7Ci0KLQlyZXR1cm4gcnAxOwotfQotCi1zdGF0aWMgaW50IHZhbGxl eXZpZXdfcnBzX21heF9mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsK LQl1MzIgdmFsLCBycDA7Ci0KLQl2YWwgPSB2bHZfbmNfcmVhZChkZXZfcHJpdiwgSU9TRl9OQ19G Ql9HRlhfRlJFUV9GVVNFKTsKLQotCXJwMCA9ICh2YWwgJiBGQl9HRlhfTUFYX0ZSRVFfRlVTRV9N QVNLKSA+PiBGQl9HRlhfTUFYX0ZSRVFfRlVTRV9TSElGVDsKLQkvKiBDbGFtcCB0byBtYXggKi8K LQlycDAgPSBtaW5fdCh1MzIsIHJwMCwgMHhlYSk7Ci0KLQlyZXR1cm4gcnAwOwotfQotCi1zdGF0 aWMgaW50IHZhbGxleXZpZXdfcnBzX3JwZV9mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKLXsKLQl1MzIgdmFsLCBycGU7Ci0KLQl2YWwgPSB2bHZfbmNfcmVhZChkZXZfcHJp diwgSU9TRl9OQ19GQl9HRlhfRk1BWF9GVVNFX0xPKTsKLQlycGUgPSAodmFsICYgRkJfRk1BWF9W TUlOX0ZSRVFfTE9fTUFTSykgPj4gRkJfRk1BWF9WTUlOX0ZSRVFfTE9fU0hJRlQ7Ci0JdmFsID0g dmx2X25jX3JlYWQoZGV2X3ByaXYsIElPU0ZfTkNfRkJfR0ZYX0ZNQVhfRlVTRV9ISSk7Ci0JcnBl IHw9ICh2YWwgJiBGQl9GTUFYX1ZNSU5fRlJFUV9ISV9NQVNLKSA8PCA1OwotCi0JcmV0dXJuIHJw ZTsKLX0KLQotc3RhdGljIGludCB2YWxsZXl2aWV3X3Jwc19taW5fZnJlcShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JdTMyIHZhbDsKLQotCXZhbCA9IHZsdl9wdW5pdF9y ZWFkKGRldl9wcml2LCBQVU5JVF9SRUdfR1BVX0xGTSkgJiAweGZmOwotCS8qCi0JICogQWNjb3Jk aW5nIHRvIHRoZSBCWVQgUHVuaXQgR1BVIHR1cmJvIEhBUyAxLjEuNi4zIHRoZSBtaW5pbXVtIHZh bHVlCi0JICogZm9yIHRoZSBtaW5pbXVtIGZyZXF1ZW5jeSBpbiBHUExMIG1vZGUgaXMgMHhjMS4g Q29udHJhcnkgdG8gdGhpcyBvbgotCSAqIGEgQllULU0gQjAgdGhlIGFib3ZlIHJlZ2lzdGVyIGNv bnRhaW5zIDB4YmYuIE1vcmVvdmVyIHdoZW4gc2V0dGluZwotCSAqIGEgZnJlcXVlbmN5IFB1bml0 IHdpbGwgbm90IGFsbG93IHZhbHVlcyBiZWxvdyAweGMwLiBDbGFtcCBpdCAweGMwCi0JICogdG8g bWFrZSBzdXJlIGl0IG1hdGNoZXMgd2hhdCBQdW5pdCBhY2NlcHRzLgotCSAqLwotCXJldHVybiBt YXhfdCh1MzIsIHZhbCwgMHhjMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZsdl9pbml0X2dwbGxfcmVm X2ZyZXEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCWRldl9wcml2LT5n dF9wbS5ycHMuZ3BsbF9yZWZfZnJlcSA9Ci0JCXZsdl9nZXRfY2NrX2Nsb2NrKGRldl9wcml2LCAi R1BMTCByZWYiLAotCQkJCSAgQ0NLX0dQTExfQ0xPQ0tfQ09OVFJPTCwKLQkJCQkgIGRldl9wcml2 LT5jemNsa19mcmVxKTsKLQotCURSTV9ERUJVR19EUklWRVIoIkdQTEwgcmVmZXJlbmNlIGZyZXE6 ICVkIGtIelxuIiwKLQkJCSBkZXZfcHJpdi0+Z3RfcG0ucnBzLmdwbGxfcmVmX2ZyZXEpOwotfQot Ci1zdGF0aWMgdm9pZCB2YWxsZXl2aWV3X2luaXRfZ3RfcG93ZXJzYXZlKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3By aXYtPmd0X3BtLnJwczsKLQl1MzIgdmFsOwotCi0Jdmx2X2lvc2Zfc2JfZ2V0KGRldl9wcml2LAot CQkJQklUKFZMVl9JT1NGX1NCX1BVTklUKSB8Ci0JCQlCSVQoVkxWX0lPU0ZfU0JfTkMpIHwKLQkJ CUJJVChWTFZfSU9TRl9TQl9DQ0spKTsKLQotCXZsdl9pbml0X2dwbGxfcmVmX2ZyZXEoZGV2X3By aXYpOwotCi0JdmFsID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBVTklUX1JFR19HUFVfRlJF UV9TVFMpOwotCXN3aXRjaCAoKHZhbCA+PiA2KSAmIDMpIHsKLQljYXNlIDA6Ci0JY2FzZSAxOgot CQlkZXZfcHJpdi0+bWVtX2ZyZXEgPSA4MDA7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJZGV2X3By aXYtPm1lbV9mcmVxID0gMTA2NjsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQlkZXZfcHJpdi0+bWVt X2ZyZXEgPSAxMzMzOwotCQlicmVhazsKLQl9Ci0JRFJNX0RFQlVHX0RSSVZFUigiRERSIHNwZWVk OiAlZCBNSHpcbiIsIGRldl9wcml2LT5tZW1fZnJlcSk7Ci0KLQlycHMtPm1heF9mcmVxID0gdmFs bGV5dmlld19ycHNfbWF4X2ZyZXEoZGV2X3ByaXYpOwotCXJwcy0+cnAwX2ZyZXEgPSBycHMtPm1h eF9mcmVxOwotCURSTV9ERUJVR19EUklWRVIoIm1heCBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIs Ci0JCQkgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+bWF4X2ZyZXEpLAotCQkJIHJwcy0+ bWF4X2ZyZXEpOwotCi0JcnBzLT5lZmZpY2llbnRfZnJlcSA9IHZhbGxleXZpZXdfcnBzX3JwZV9m cmVxKGRldl9wcml2KTsKLQlEUk1fREVCVUdfRFJJVkVSKCJSUGUgR1BVIGZyZXE6ICVkIE1IeiAo JXUpXG4iLAotCQkJIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPmVmZmljaWVudF9mcmVx KSwKLQkJCSBycHMtPmVmZmljaWVudF9mcmVxKTsKLQotCXJwcy0+cnAxX2ZyZXEgPSB2YWxsZXl2 aWV3X3Jwc19ndWFyX2ZyZXEoZGV2X3ByaXYpOwotCURSTV9ERUJVR19EUklWRVIoIlJQMShHdWFy IEZyZXEpIEdQVSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKLQkJCSBpbnRlbF9ncHVfZnJlcShkZXZf cHJpdiwgcnBzLT5ycDFfZnJlcSksCi0JCQkgcnBzLT5ycDFfZnJlcSk7Ci0KLQlycHMtPm1pbl9m cmVxID0gdmFsbGV5dmlld19ycHNfbWluX2ZyZXEoZGV2X3ByaXYpOwotCURSTV9ERUJVR19EUklW RVIoIm1pbiBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIsCi0JCQkgaW50ZWxfZ3B1X2ZyZXEoZGV2 X3ByaXYsIHJwcy0+bWluX2ZyZXEpLAotCQkJIHJwcy0+bWluX2ZyZXEpOwotCi0Jdmx2X2lvc2Zf c2JfcHV0KGRldl9wcml2LAotCQkJQklUKFZMVl9JT1NGX1NCX1BVTklUKSB8Ci0JCQlCSVQoVkxW X0lPU0ZfU0JfTkMpIHwKLQkJCUJJVChWTFZfSU9TRl9TQl9DQ0spKTsKLX0KLQotc3RhdGljIHZv aWQgY2hlcnJ5dmlld19pbml0X2d0X3Bvd2Vyc2F2ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5y cHM7Ci0JdTMyIHZhbDsKLQotCXZsdl9pb3NmX3NiX2dldChkZXZfcHJpdiwKLQkJCUJJVChWTFZf SU9TRl9TQl9QVU5JVCkgfAotCQkJQklUKFZMVl9JT1NGX1NCX05DKSB8Ci0JCQlCSVQoVkxWX0lP U0ZfU0JfQ0NLKSk7Ci0KLQl2bHZfaW5pdF9ncGxsX3JlZl9mcmVxKGRldl9wcml2KTsKLQotCXZh bCA9IHZsdl9jY2tfcmVhZChkZXZfcHJpdiwgQ0NLX0ZVU0VfUkVHKTsKLQotCXN3aXRjaCAoKHZh bCA+PiAyKSAmIDB4NykgewotCWNhc2UgMzoKLQkJZGV2X3ByaXYtPm1lbV9mcmVxID0gMjAwMDsK LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGV2X3ByaXYtPm1lbV9mcmVxID0gMTYwMDsKLQkJYnJl YWs7Ci0JfQotCURSTV9ERUJVR19EUklWRVIoIkREUiBzcGVlZDogJWQgTUh6XG4iLCBkZXZfcHJp di0+bWVtX2ZyZXEpOwotCi0JcnBzLT5tYXhfZnJlcSA9IGNoZXJyeXZpZXdfcnBzX21heF9mcmVx KGRldl9wcml2KTsKLQlycHMtPnJwMF9mcmVxID0gcnBzLT5tYXhfZnJlcTsKLQlEUk1fREVCVUdf RFJJVkVSKCJtYXggR1BVIGZyZXE6ICVkIE1IeiAoJXUpXG4iLAotCQkJIGludGVsX2dwdV9mcmVx KGRldl9wcml2LCBycHMtPm1heF9mcmVxKSwKLQkJCSBycHMtPm1heF9mcmVxKTsKLQotCXJwcy0+ ZWZmaWNpZW50X2ZyZXEgPSBjaGVycnl2aWV3X3Jwc19ycGVfZnJlcShkZXZfcHJpdik7Ci0JRFJN X0RFQlVHX0RSSVZFUigiUlBlIEdQVSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKLQkJCSBpbnRlbF9n cHVfZnJlcShkZXZfcHJpdiwgcnBzLT5lZmZpY2llbnRfZnJlcSksCi0JCQkgcnBzLT5lZmZpY2ll bnRfZnJlcSk7Ci0KLQlycHMtPnJwMV9mcmVxID0gY2hlcnJ5dmlld19ycHNfZ3Vhcl9mcmVxKGRl dl9wcml2KTsKLQlEUk1fREVCVUdfRFJJVkVSKCJSUDEoR3VhcikgR1BVIGZyZXE6ICVkIE1IeiAo JXUpXG4iLAotCQkJIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPnJwMV9mcmVxKSwKLQkJ CSBycHMtPnJwMV9mcmVxKTsKLQotCXJwcy0+bWluX2ZyZXEgPSBjaGVycnl2aWV3X3Jwc19taW5f ZnJlcShkZXZfcHJpdik7Ci0JRFJNX0RFQlVHX0RSSVZFUigibWluIEdQVSBmcmVxOiAlZCBNSHog KCV1KVxuIiwKLQkJCSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5taW5fZnJlcSksCi0J CQkgcnBzLT5taW5fZnJlcSk7Ci0KLQl2bHZfaW9zZl9zYl9wdXQoZGV2X3ByaXYsCi0JCQlCSVQo VkxWX0lPU0ZfU0JfUFVOSVQpIHwKLQkJCUJJVChWTFZfSU9TRl9TQl9OQykgfAotCQkJQklUKFZM Vl9JT1NGX1NCX0NDSykpOwotCi0JV0FSTl9PTkNFKChycHMtPm1heF9mcmVxIHwgcnBzLT5lZmZp Y2llbnRfZnJlcSB8IHJwcy0+cnAxX2ZyZXEgfAotCQkgICBycHMtPm1pbl9mcmVxKSAmIDEsCi0J CSAgIk9kZCBHUFUgZnJlcSB2YWx1ZXNcbiIpOwotfQotCi1zdGF0aWMgdm9pZCBjaGVycnl2aWV3 X2VuYWJsZV9ycHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXUzMiB2 YWw7Ci0KLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldCgmZGV2X3ByaXYtPnVuY29yZSwgRk9S Q0VXQUtFX0FMTCk7Ci0KLQkvKiAxOiBQcm9ncmFtIGRlZmF1bHRzIGFuZCB0aHJlc2hvbGRzIGZv ciBSUFMqLwotCUk5MTVfV1JJVEUoR0VONl9SUF9ET1dOX1RJTUVPVVQsIDEwMDAwMDApOwotCUk5 MTVfV1JJVEUoR0VONl9SUF9VUF9USFJFU0hPTEQsIDU5NDAwKTsKLQlJOTE1X1dSSVRFKEdFTjZf UlBfRE9XTl9USFJFU0hPTEQsIDI0NTAwMCk7Ci0JSTkxNV9XUklURShHRU42X1JQX1VQX0VJLCA2 NjAwMCk7Ci0JSTkxNV9XUklURShHRU42X1JQX0RPV05fRUksIDM1MDAwMCk7Ci0KLQlJOTE1X1dS SVRFKEdFTjZfUlBfSURMRV9IWVNURVJTSVMsIDEwKTsKLQotCS8qIDI6IEVuYWJsZSBSUFMgKi8K LQlJOTE1X1dSSVRFKEdFTjZfUlBfQ09OVFJPTCwKLQkJICAgR0VONl9SUF9NRURJQV9IV19OT1JN QUxfTU9ERSB8Ci0JCSAgIEdFTjZfUlBfTUVESUFfSVNfR0ZYIHwKLQkJICAgR0VONl9SUF9FTkFC TEUgfAotCQkgICBHRU42X1JQX1VQX0JVU1lfQVZHIHwKLQkJICAgR0VONl9SUF9ET1dOX0lETEVf QVZHKTsKLQotCS8qIFNldHRpbmcgRml4ZWQgQmlhcyAqLwotCXZsdl9wdW5pdF9nZXQoZGV2X3By aXYpOwotCi0JdmFsID0gVkxWX09WRVJSSURFX0VOIHwgVkxWX1NPQ19URFBfRU4gfCBDSFZfQklB U19DUFVfNTBfU09DXzUwOwotCXZsdl9wdW5pdF93cml0ZShkZXZfcHJpdiwgVkxWX1RVUkJPX1NP Q19PVkVSUklERSwgdmFsKTsKLQotCXZhbCA9IHZsdl9wdW5pdF9yZWFkKGRldl9wcml2LCBQVU5J VF9SRUdfR1BVX0ZSRVFfU1RTKTsKLQotCXZsdl9wdW5pdF9wdXQoZGV2X3ByaXYpOwotCi0JLyog UlBTIGNvZGUgYXNzdW1lcyBHUExMIGlzIHVzZWQgKi8KLQlXQVJOX09OQ0UoKHZhbCAmIEdQTExF TkFCTEUpID09IDAsICJHUExMIG5vdCBlbmFibGVkXG4iKTsKLQotCURSTV9ERUJVR19EUklWRVIo IkdQTEwgZW5hYmxlZD8gJXNcbiIsIHllc25vKHZhbCAmIEdQTExFTkFCTEUpKTsKLQlEUk1fREVC VUdfRFJJVkVSKCJHUFUgc3RhdHVzOiAweCUwOHhcbiIsIHZhbCk7Ci0KLQlyZXNldF9ycHMoZGV2 X3ByaXYsIHZhbGxleXZpZXdfc2V0X3Jwcyk7Ci0KLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1 dCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZh bGxleXZpZXdfZW5hYmxlX3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17 Ci0JdTMyIHZhbDsKLQotCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KCZkZXZfcHJpdi0+dW5j b3JlLCBGT1JDRVdBS0VfQUxMKTsKLQotCUk5MTVfV1JJVEUoR0VONl9SUF9ET1dOX1RJTUVPVVQs IDEwMDAwMDApOwotCUk5MTVfV1JJVEUoR0VONl9SUF9VUF9USFJFU0hPTEQsIDU5NDAwKTsKLQlJ OTE1X1dSSVRFKEdFTjZfUlBfRE9XTl9USFJFU0hPTEQsIDI0NTAwMCk7Ci0JSTkxNV9XUklURShH RU42X1JQX1VQX0VJLCA2NjAwMCk7Ci0JSTkxNV9XUklURShHRU42X1JQX0RPV05fRUksIDM1MDAw MCk7Ci0KLQlJOTE1X1dSSVRFKEdFTjZfUlBfSURMRV9IWVNURVJTSVMsIDEwKTsKLQotCUk5MTVf V1JJVEUoR0VONl9SUF9DT05UUk9MLAotCQkgICBHRU42X1JQX01FRElBX1RVUkJPIHwKLQkJICAg R0VONl9SUF9NRURJQV9IV19OT1JNQUxfTU9ERSB8Ci0JCSAgIEdFTjZfUlBfTUVESUFfSVNfR0ZY IHwKLQkJICAgR0VONl9SUF9FTkFCTEUgfAotCQkgICBHRU42X1JQX1VQX0JVU1lfQVZHIHwKLQkJ ICAgR0VONl9SUF9ET1dOX0lETEVfQ09OVCk7Ci0KLQl2bHZfcHVuaXRfZ2V0KGRldl9wcml2KTsK LQotCS8qIFNldHRpbmcgRml4ZWQgQmlhcyAqLwotCXZhbCA9IFZMVl9PVkVSUklERV9FTiB8IFZM Vl9TT0NfVERQX0VOIHwgVkxWX0JJQVNfQ1BVXzEyNV9TT0NfODc1OwotCXZsdl9wdW5pdF93cml0 ZShkZXZfcHJpdiwgVkxWX1RVUkJPX1NPQ19PVkVSUklERSwgdmFsKTsKLQotCXZhbCA9IHZsdl9w dW5pdF9yZWFkKGRldl9wcml2LCBQVU5JVF9SRUdfR1BVX0ZSRVFfU1RTKTsKLQotCXZsdl9wdW5p dF9wdXQoZGV2X3ByaXYpOwotCi0JLyogUlBTIGNvZGUgYXNzdW1lcyBHUExMIGlzIHVzZWQgKi8K LQlXQVJOX09OQ0UoKHZhbCAmIEdQTExFTkFCTEUpID09IDAsICJHUExMIG5vdCBlbmFibGVkXG4i KTsKLQotCURSTV9ERUJVR19EUklWRVIoIkdQTEwgZW5hYmxlZD8gJXNcbiIsIHllc25vKHZhbCAm IEdQTExFTkFCTEUpKTsKLQlEUk1fREVCVUdfRFJJVkVSKCJHUFUgc3RhdHVzOiAweCUwOHhcbiIs IHZhbCk7Ci0KLQlyZXNldF9ycHMoZGV2X3ByaXYsIHZhbGxleXZpZXdfc2V0X3Jwcyk7Ci0KLQlp bnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX0FM TCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGludGVsX3B4ZnJlcSh1MzIgdmlkZnJlcSkK LXsKLQl1bnNpZ25lZCBsb25nIGZyZXE7Ci0JaW50IGRpdiA9ICh2aWRmcmVxICYgMHgzZjAwMDAp ID4+IDE2OwotCWludCBwb3N0ID0gKHZpZGZyZXEgJiAweDMwMDApID4+IDEyOwotCWludCBwcmUg PSAodmlkZnJlcSAmIDB4Nyk7Ci0KLQlpZiAoIXByZSkKLQkJcmV0dXJuIDA7Ci0KLQlmcmVxID0g KChkaXYgKiAxMzMzMzMpIC8gKCgxPDxwb3N0KSAqIHByZSkpOwotCi0JcmV0dXJuIGZyZXE7Ci19 Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3BhcmFtcyB7Ci0JdTE2IGk7Ci0JdTE2IHQ7Ci0JdTE2 IG07Ci0JdTE2IGM7Ci19IGNwYXJhbXNbXSA9IHsKLQl7IDEsIDEzMzMsIDMwMSwgMjg2NjQgfSwK LQl7IDEsIDEwNjYsIDI5NCwgMjQ0NjAgfSwKLQl7IDEsIDgwMCwgMjk0LCAyNTE5MiB9LAotCXsg MCwgMTMzMywgMjc2LCAyNzYwNSB9LAotCXsgMCwgMTA2NiwgMjc2LCAyNzYwNSB9LAotCXsgMCwg ODAwLCAyMzEsIDIzNzg0IH0sCi19OwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2k5MTVfY2hp cHNldF92YWwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXU2NCB0b3Rh bF9jb3VudCwgZGlmZiwgcmV0OwotCXUzMiBjb3VudDEsIGNvdW50MiwgY291bnQzLCBtID0gMCwg YyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMpLCBk aWZmMTsKLQlpbnQgaTsKLQotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm1jaGRldl9sb2NrKTsKLQot CWRpZmYxID0gbm93IC0gZGV2X3ByaXYtPmlwcy5sYXN0X3RpbWUxOwotCi0JLyogUHJldmVudCBk aXZpc2lvbi1ieS16ZXJvIGlmIHdlIGFyZSBhc2tpbmcgdG9vIGZhc3QuCi0JICogQWxzbywgd2Ug ZG9uJ3QgZ2V0IGludGVyZXN0aW5nIHJlc3VsdHMgaWYgd2UgYXJlIHBvbGxpbmcKLQkgKiBmYXN0 ZXIgdGhhbiBvbmNlIGluIDEwbXMsIHNvIGp1c3QgcmV0dXJuIHRoZSBzYXZlZCB2YWx1ZQotCSAq IGluIHN1Y2ggY2FzZXMuCi0JICovCi0JaWYgKGRpZmYxIDw9IDEwKQotCQlyZXR1cm4gZGV2X3By aXYtPmlwcy5jaGlwc2V0X3Bvd2VyOwotCi0JY291bnQxID0gSTkxNV9SRUFEKERNSUVDKTsKLQlj b3VudDIgPSBJOTE1X1JFQUQoRERSRUMpOwotCWNvdW50MyA9IEk5MTVfUkVBRChDU0lFQyk7Ci0K LQl0b3RhbF9jb3VudCA9IGNvdW50MSArIGNvdW50MiArIGNvdW50MzsKLQotCS8qIEZJWE1FOiBo YW5kbGUgcGVyLWNvdW50ZXIgb3ZlcmZsb3cgKi8KLQlpZiAodG90YWxfY291bnQgPCBkZXZfcHJp di0+aXBzLmxhc3RfY291bnQxKSB7Ci0JCWRpZmYgPSB+MFVMIC0gZGV2X3ByaXYtPmlwcy5sYXN0 X2NvdW50MTsKLQkJZGlmZiArPSB0b3RhbF9jb3VudDsKLQl9IGVsc2UgewotCQlkaWZmID0gdG90 YWxfY291bnQgLSBkZXZfcHJpdi0+aXBzLmxhc3RfY291bnQxOwotCX0KLQotCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKGNwYXJhbXMpOyBpKyspIHsKLQkJaWYgKGNwYXJhbXNbaV0uaSA9PSBk ZXZfcHJpdi0+aXBzLmNfbSAmJgotCQkgICAgY3BhcmFtc1tpXS50ID09IGRldl9wcml2LT5pcHMu cl90KSB7Ci0JCQltID0gY3BhcmFtc1tpXS5tOwotCQkJYyA9IGNwYXJhbXNbaV0uYzsKLQkJCWJy ZWFrOwotCQl9Ci0JfQotCi0JZGlmZiA9IGRpdl91NjQoZGlmZiwgZGlmZjEpOwotCXJldCA9ICgo bSAqIGRpZmYpICsgYyk7Ci0JcmV0ID0gZGl2X3U2NChyZXQsIDEwKTsKLQotCWRldl9wcml2LT5p cHMubGFzdF9jb3VudDEgPSB0b3RhbF9jb3VudDsKLQlkZXZfcHJpdi0+aXBzLmxhc3RfdGltZTEg PSBub3c7Ci0KLQlkZXZfcHJpdi0+aXBzLmNoaXBzZXRfcG93ZXIgPSByZXQ7Ci0KLQlyZXR1cm4g cmV0OwotfQotCi11bnNpZ25lZCBsb25nIGk5MTVfY2hpcHNldF92YWwoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQotewotCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwotCXVuc2ln bmVkIGxvbmcgdmFsID0gMDsKLQotCWlmICghSVNfR0VOKGRldl9wcml2LCA1KSkKLQkJcmV0dXJu IDA7Ci0KLQl3aXRoX2ludGVsX3J1bnRpbWVfcG0oJmRldl9wcml2LT5ydW50aW1lX3BtLCB3YWtl cmVmKSB7Ci0JCXNwaW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKLQkJdmFsID0gX19pOTE1X2No aXBzZXRfdmFsKGRldl9wcml2KTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZtY2hkZXZfbG9jayk7Ci0J fQotCi0JcmV0dXJuIHZhbDsKLX0KLQotdW5zaWduZWQgbG9uZyBpOTE1X21jaF92YWwoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCi17Ci0JdW5zaWduZWQgbG9uZyBtLCB4LCBiOwotCXUz MiB0c2ZzOwotCi0JdHNmcyA9IGludGVsX3VuY29yZV9yZWFkKCZpOTE1LT51bmNvcmUsIFRTRlMp OwotCi0JbSA9ICgodHNmcyAmIFRTRlNfU0xPUEVfTUFTSykgPj4gVFNGU19TTE9QRV9TSElGVCk7 Ci0JeCA9IGludGVsX3VuY29yZV9yZWFkOCgmaTkxNS0+dW5jb3JlLCBUUjEpOwotCi0JYiA9IHRz ZnMgJiBUU0ZTX0lOVFJfTUFTSzsKLQotCXJldHVybiAoKG0gKiB4KSAvIDEyNykgLSBiOwotfQot Ci1zdGF0aWMgaW50IF9weHZpZF90b192ZCh1OCBweHZpZCkKLXsKLQlpZiAocHh2aWQgPT0gMCkK LQkJcmV0dXJuIDA7Ci0KLQlpZiAocHh2aWQgPj0gOCAmJiBweHZpZCA8IDMxKQotCQlweHZpZCA9 IDMxOwotCi0JcmV0dXJuIChweHZpZCArIDIpICogMTI1OwotfQotCi1zdGF0aWMgdTMyIHB2aWRf dG9fZXh0dmlkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTggcHh2aWQpCi17 Ci0JY29uc3QgaW50IHZkID0gX3B4dmlkX3RvX3ZkKHB4dmlkKTsKLQljb25zdCBpbnQgdm0gPSB2 ZCAtIDExMjU7Ci0KLQlpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmlzX21vYmlsZSkKLQkJcmV0 dXJuIHZtID4gMCA/IHZtIDogMDsKLQotCXJldHVybiB2ZDsKLX0KLQotc3RhdGljIHZvaWQgX19p OTE1X3VwZGF0ZV9nZnhfdmFsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsK LQl1NjQgbm93LCBkaWZmLCBkaWZmbXM7Ci0JdTMyIGNvdW50OwotCi0JbG9ja2RlcF9hc3NlcnRf aGVsZCgmbWNoZGV2X2xvY2spOwotCi0Jbm93ID0ga3RpbWVfZ2V0X3Jhd19ucygpOwotCWRpZmZt cyA9IG5vdyAtIGRldl9wcml2LT5pcHMubGFzdF90aW1lMjsKLQlkb19kaXYoZGlmZm1zLCBOU0VD X1BFUl9NU0VDKTsKLQotCS8qIERvbid0IGRpdmlkZSBieSAwICovCi0JaWYgKCFkaWZmbXMpCi0J CXJldHVybjsKLQotCWNvdW50ID0gSTkxNV9SRUFEKEdGWEVDKTsKLQotCWlmIChjb3VudCA8IGRl dl9wcml2LT5pcHMubGFzdF9jb3VudDIpIHsKLQkJZGlmZiA9IH4wVUwgLSBkZXZfcHJpdi0+aXBz Lmxhc3RfY291bnQyOwotCQlkaWZmICs9IGNvdW50OwotCX0gZWxzZSB7Ci0JCWRpZmYgPSBjb3Vu dCAtIGRldl9wcml2LT5pcHMubGFzdF9jb3VudDI7Ci0JfQotCi0JZGV2X3ByaXYtPmlwcy5sYXN0 X2NvdW50MiA9IGNvdW50OwotCWRldl9wcml2LT5pcHMubGFzdF90aW1lMiA9IG5vdzsKLQotCS8q IE1vcmUgbWFnaWMgY29uc3RhbnRzLi4uICovCi0JZGlmZiA9IGRpZmYgKiAxMTgxOwotCWRpZmYg PSBkaXZfdTY0KGRpZmYsIGRpZmZtcyAqIDEwKTsKLQlkZXZfcHJpdi0+aXBzLmdmeF9wb3dlciA9 IGRpZmY7Ci19Ci0KLXZvaWQgaTkxNV91cGRhdGVfZ2Z4X3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCi17Ci0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Ci0KLQlpZiAoIUlT X0dFTihkZXZfcHJpdiwgNSkpCi0JCXJldHVybjsKLQotCXdpdGhfaW50ZWxfcnVudGltZV9wbSgm ZGV2X3ByaXYtPnJ1bnRpbWVfcG0sIHdha2VyZWYpIHsKLQkJc3Bpbl9sb2NrX2lycSgmbWNoZGV2 X2xvY2spOwotCQlfX2k5MTVfdXBkYXRlX2dmeF92YWwoZGV2X3ByaXYpOwotCQlzcGluX3VubG9j a19pcnEoJm1jaGRldl9sb2NrKTsKLQl9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faTkx NV9nZnhfdmFsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQl1bnNpZ25l ZCBsb25nIHQsIGNvcnIsIHN0YXRlMSwgY29ycjIsIHN0YXRlMjsKLQl1MzIgcHh2aWQsIGV4dF92 OwotCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmbWNoZGV2X2xvY2spOwotCi0JcHh2aWQgPSBJOTE1 X1JFQUQoUFhWRlJFUShkZXZfcHJpdi0+Z3RfcG0ucnBzLmN1cl9mcmVxKSk7Ci0JcHh2aWQgPSAo cHh2aWQgPj4gMjQpICYgMHg3ZjsKLQlleHRfdiA9IHB2aWRfdG9fZXh0dmlkKGRldl9wcml2LCBw eHZpZCk7Ci0KLQlzdGF0ZTEgPSBleHRfdjsKLQotCXQgPSBpOTE1X21jaF92YWwoZGV2X3ByaXYp OwotCi0JLyogUmV2ZWwgaW4gdGhlIGVtcGlyaWNhbGx5IGRlcml2ZWQgY29uc3RhbnRzICovCi0K LQkvKiBDb3JyZWN0aW9uIGZhY3RvciBpbiAxLzEwMDAwMCB1bml0cyAqLwotCWlmICh0ID4gODAp Ci0JCWNvcnIgPSAoKHQgKiAyMzQ5KSArIDEzNTk0MCk7Ci0JZWxzZSBpZiAodCA+PSA1MCkKLQkJ Y29yciA9ICgodCAqIDk2NCkgKyAyOTMxNyk7Ci0JZWxzZSAvKiA8IDUwICovCi0JCWNvcnIgPSAo KHQgKiAzMDEpICsgMTAwNCk7Ci0KLQljb3JyID0gY29yciAqICgoMTUwMTQyICogc3RhdGUxKSAv IDEwMDAwIC0gNzg2NDIpOwotCWNvcnIgLz0gMTAwMDAwOwotCWNvcnIyID0gKGNvcnIgKiBkZXZf cHJpdi0+aXBzLmNvcnIpOwotCi0Jc3RhdGUyID0gKGNvcnIyICogc3RhdGUxKSAvIDEwMDAwOwot CXN0YXRlMiAvPSAxMDA7IC8qIGNvbnZlcnQgdG8gbVcgKi8KLQotCV9faTkxNV91cGRhdGVfZ2Z4 X3ZhbChkZXZfcHJpdik7Ci0KLQlyZXR1cm4gZGV2X3ByaXYtPmlwcy5nZnhfcG93ZXIgKyBzdGF0 ZTI7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgaTkxNV9nZnhfdmFsKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKLXsKLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKLQl1bnNpZ25lZCBs b25nIHZhbCA9IDA7Ci0KLQlpZiAoIUlTX0dFTihkZXZfcHJpdiwgNSkpCi0JCXJldHVybiAwOwot Ci0Jd2l0aF9pbnRlbF9ydW50aW1lX3BtKCZkZXZfcHJpdi0+cnVudGltZV9wbSwgd2FrZXJlZikg ewotCQlzcGluX2xvY2tfaXJxKCZtY2hkZXZfbG9jayk7Ci0JCXZhbCA9IF9faTkxNV9nZnhfdmFs KGRldl9wcml2KTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZtY2hkZXZfbG9jayk7Ci0JfQotCi0JcmV0 dXJuIHZhbDsKLX0KLQotc3RhdGljIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIF9fcmN1ICppOTE1 X21jaF9kZXY7Ci0KLXN0YXRpYyBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqbWNoZGV2X2dldCh2 b2lkKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1OwotCi0JcmN1X3JlYWRfbG9j aygpOwotCWk5MTUgPSByY3VfZGVyZWZlcmVuY2UoaTkxNV9tY2hfZGV2KTsKLQlpZiAoIWtyZWZf Z2V0X3VubGVzc196ZXJvKCZpOTE1LT5kcm0ucmVmKSkKLQkJaTkxNSA9IE5VTEw7Ci0JcmN1X3Jl YWRfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gaTkxNTsKLX0KLQotLyoqCi0gKiBpOTE1X3JlYWRfbWNo X3ZhbCAtIHJldHVybiB2YWx1ZSBmb3IgSVBTIHVzZQotICoKLSAqIENhbGN1bGF0ZSBhbmQgcmV0 dXJuIGEgdmFsdWUgZm9yIHRoZSBJUFMgZHJpdmVyIHRvIHVzZSB3aGVuIGRlY2lkaW5nIHdoZXRo ZXIKLSAqIHdlIGhhdmUgdGhlcm1hbCBhbmQgcG93ZXIgaGVhZHJvb20gdG8gaW5jcmVhc2UgQ1BV IG9yIEdQVSBwb3dlciBidWRnZXQuCi0gKi8KLXVuc2lnbmVkIGxvbmcgaTkxNV9yZWFkX21jaF92 YWwodm9pZCkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKLQl1bnNpZ25lZCBs b25nIGNoaXBzZXRfdmFsID0gMDsKLQl1bnNpZ25lZCBsb25nIGdyYXBoaWNzX3ZhbCA9IDA7Ci0J aW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Ci0KLQlpOTE1ID0gbWNoZGV2X2dldCgpOwotCWlmICgh aTkxNSkKLQkJcmV0dXJuIDA7Ci0KLQl3aXRoX2ludGVsX3J1bnRpbWVfcG0oJmk5MTUtPnJ1bnRp bWVfcG0sIHdha2VyZWYpIHsKLQkJc3Bpbl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOwotCQljaGlw c2V0X3ZhbCA9IF9faTkxNV9jaGlwc2V0X3ZhbChpOTE1KTsKLQkJZ3JhcGhpY3NfdmFsID0gX19p OTE1X2dmeF92YWwoaTkxNSk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOwotCX0K LQotCWRybV9kZXZfcHV0KCZpOTE1LT5kcm0pOwotCXJldHVybiBjaGlwc2V0X3ZhbCArIGdyYXBo aWNzX3ZhbDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGk5MTVfcmVhZF9tY2hfdmFsKTsKLQotLyoq Ci0gKiBpOTE1X2dwdV9yYWlzZSAtIHJhaXNlIEdQVSBmcmVxdWVuY3kgbGltaXQKLSAqCi0gKiBS YWlzZSB0aGUgbGltaXQ7IElQUyBpbmRpY2F0ZXMgd2UgaGF2ZSB0aGVybWFsIGhlYWRyb29tLgot ICovCi1ib29sIGk5MTVfZ3B1X3JhaXNlKHZvaWQpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTU7Ci0KLQlpOTE1ID0gbWNoZGV2X2dldCgpOwotCWlmICghaTkxNSkKLQkJcmV0dXJu IGZhbHNlOwotCi0Jc3Bpbl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOwotCWlmIChpOTE1LT5pcHMu bWF4X2RlbGF5ID4gaTkxNS0+aXBzLmZtYXgpCi0JCWk5MTUtPmlwcy5tYXhfZGVsYXktLTsKLQlz cGluX3VubG9ja19pcnEoJm1jaGRldl9sb2NrKTsKLQotCWRybV9kZXZfcHV0KCZpOTE1LT5kcm0p OwotCXJldHVybiB0cnVlOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaTkxNV9ncHVfcmFpc2UpOwot Ci0vKioKLSAqIGk5MTVfZ3B1X2xvd2VyIC0gbG93ZXIgR1BVIGZyZXF1ZW5jeSBsaW1pdAotICoK LSAqIElQUyBpbmRpY2F0ZXMgd2UncmUgY2xvc2UgdG8gYSB0aGVybWFsIGxpbWl0LCBzbyB0aHJv dHRsZSBiYWNrIHRoZSBHUFUKLSAqIGZyZXF1ZW5jeSBtYXhpbXVtLgotICovCi1ib29sIGk5MTVf Z3B1X2xvd2VyKHZvaWQpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Ci0KLQlp OTE1ID0gbWNoZGV2X2dldCgpOwotCWlmICghaTkxNSkKLQkJcmV0dXJuIGZhbHNlOwotCi0Jc3Bp bl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOwotCWlmIChpOTE1LT5pcHMubWF4X2RlbGF5IDwgaTkx NS0+aXBzLm1pbl9kZWxheSkKLQkJaTkxNS0+aXBzLm1heF9kZWxheSsrOwotCXNwaW5fdW5sb2Nr X2lycSgmbWNoZGV2X2xvY2spOwotCi0JZHJtX2Rldl9wdXQoJmk5MTUtPmRybSk7Ci0JcmV0dXJu IHRydWU7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpOTE1X2dwdV9sb3dlcik7Ci0KLS8qKgotICog aTkxNV9ncHVfYnVzeSAtIGluZGljYXRlIEdQVSBidXNpbmVzcyB0byBJUFMKLSAqCi0gKiBUZWxs IHRoZSBJUFMgZHJpdmVyIHdoZXRoZXIgb3Igbm90IHRoZSBHUFUgaXMgYnVzeS4KLSAqLwotYm9v bCBpOTE1X2dwdV9idXN5KHZvaWQpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7 Ci0JYm9vbCByZXQ7Ci0KLQlpOTE1ID0gbWNoZGV2X2dldCgpOwotCWlmICghaTkxNSkKLQkJcmV0 dXJuIGZhbHNlOwotCi0JcmV0ID0gaTkxNS0+Z3QuYXdha2U7Ci0KLQlkcm1fZGV2X3B1dCgmaTkx NS0+ZHJtKTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaTkxNV9ncHVfYnVz eSk7Ci0KLS8qKgotICogaTkxNV9ncHVfdHVyYm9fZGlzYWJsZSAtIGRpc2FibGUgZ3JhcGhpY3Mg dHVyYm8KLSAqCi0gKiBEaXNhYmxlIGdyYXBoaWNzIHR1cmJvIGJ5IHJlc2V0dGluZyB0aGUgbWF4 IGZyZXF1ZW5jeSBhbmQgc2V0dGluZyB0aGUKLSAqIGN1cnJlbnQgZnJlcXVlbmN5IHRvIHRoZSBk ZWZhdWx0LgotICovCi1ib29sIGk5MTVfZ3B1X3R1cmJvX2Rpc2FibGUodm9pZCkKLXsKLQlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKLQlib29sIHJldDsKLQotCWk5MTUgPSBtY2hkZXZf Z2V0KCk7Ci0JaWYgKCFpOTE1KQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlzcGluX2xvY2tfaXJxKCZt Y2hkZXZfbG9jayk7Ci0JaTkxNS0+aXBzLm1heF9kZWxheSA9IGk5MTUtPmlwcy5mc3RhcnQ7Ci0J cmV0ID0gaXJvbmxha2Vfc2V0X2RycHMoaTkxNSwgaTkxNS0+aXBzLmZzdGFydCk7Ci0Jc3Bpbl91 bmxvY2tfaXJxKCZtY2hkZXZfbG9jayk7Ci0KLQlkcm1fZGV2X3B1dCgmaTkxNS0+ZHJtKTsKLQly ZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaTkxNV9ncHVfdHVyYm9fZGlzYWJsZSk7 Ci0KLS8qKgotICogVGVsbHMgdGhlIGludGVsX2lwcyBkcml2ZXIgdGhhdCB0aGUgaTkxNSBkcml2 ZXIgaXMgbm93IGxvYWRlZCwgaWYKLSAqIElQUyBnb3QgbG9hZGVkIGZpcnN0LgotICoKLSAqIFRo aXMgYXdrd2FyZCBkYW5jZSBpcyBzbyB0aGF0IG5laXRoZXIgbW9kdWxlIGhhcyB0byBkZXBlbmQg b24gdGhlCi0gKiBvdGhlciBpbiBvcmRlciBmb3IgSVBTIHRvIGRvIHRoZSBhcHByb3ByaWF0ZSBj b21tdW5pY2F0aW9uIG9mCi0gKiBHUFUgdHVyYm8gbGltaXRzIHRvIGk5MTUuCi0gKi8KLXN0YXRp YyB2b2lkCi1pcHNfcGluZ19mb3JfaTkxNV9sb2FkKHZvaWQpCi17Ci0Jdm9pZCAoKmxpbmspKHZv aWQpOwotCi0JbGluayA9IHN5bWJvbF9nZXQoaXBzX2xpbmtfdG9faTkxNV9kcml2ZXIpOwotCWlm IChsaW5rKSB7Ci0JCWxpbmsoKTsKLQkJc3ltYm9sX3B1dChpcHNfbGlua190b19pOTE1X2RyaXZl cik7Ci0JfQotfQotCi12b2lkIGludGVsX2dwdV9pcHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCi17Ci0JLyogV2Ugb25seSByZWdpc3RlciB0aGUgaTkxNSBpcHMgcGFy dCB3aXRoIGludGVsLWlwcyBvbmNlIGV2ZXJ5dGhpbmcgaXMKLQkgKiBzZXQgdXAsIHRvIGF2b2lk IGludGVsLWlwcyBzbmVha2luZyBpbiBhbmQgcmVhZGluZyBib2d1cyB2YWx1ZXMuICovCi0JcmN1 X2Fzc2lnbl9wb2ludGVyKGk5MTVfbWNoX2RldiwgZGV2X3ByaXYpOwotCi0JaXBzX3BpbmdfZm9y X2k5MTVfbG9hZCgpOwotfQotCi12b2lkIGludGVsX2dwdV9pcHNfdGVhcmRvd24odm9pZCkKLXsK LQlyY3VfYXNzaWduX3BvaW50ZXIoaTkxNV9tY2hfZGV2LCBOVUxMKTsKLX0KLQotc3RhdGljIHZv aWQgaW50ZWxfaW5pdF9lbW9uKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsK LQl1MzIgbGNmdXNlOwotCXU4IHB4d1sxNl07Ci0JaW50IGk7Ci0KLQkvKiBEaXNhYmxlIHRvIHBy b2dyYW0gKi8KLQlJOTE1X1dSSVRFKEVDUiwgMCk7Ci0JUE9TVElOR19SRUFEKEVDUik7Ci0KLQkv KiBQcm9ncmFtIGVuZXJneSB3ZWlnaHRzIGZvciB2YXJpb3VzIGV2ZW50cyAqLwotCUk5MTVfV1JJ VEUoU0RFVywgMHgxNTA0MGQwMCk7Ci0JSTkxNV9XUklURShDU0lFVzAsIDB4MDA3ZjAwMDApOwot CUk5MTVfV1JJVEUoQ1NJRVcxLCAweDFlMjIwMDA0KTsKLQlJOTE1X1dSSVRFKENTSUVXMiwgMHgw NDAwMDAwNCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQotCQlJOTE1X1dSSVRFKFBFVyhp KSwgMCk7Ci0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLQkJSTkxNV9XUklURShERVcoaSksIDAp OwotCi0JLyogUHJvZ3JhbSBQLXN0YXRlIHdlaWdodHMgdG8gYWNjb3VudCBmb3IgZnJlcXVlbmN5 IHBvd2VyIGFkanVzdG1lbnQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQl1MzIg cHh2aWRmcmVxID0gSTkxNV9SRUFEKFBYVkZSRVEoaSkpOwotCQl1bnNpZ25lZCBsb25nIGZyZXEg PSBpbnRlbF9weGZyZXEocHh2aWRmcmVxKTsKLQkJdW5zaWduZWQgbG9uZyB2aWQgPSAocHh2aWRm cmVxICYgUFhWRlJFUV9QWF9NQVNLKSA+PgotCQkJUFhWRlJFUV9QWF9TSElGVDsKLQkJdW5zaWdu ZWQgbG9uZyB2YWw7Ci0KLQkJdmFsID0gdmlkICogdmlkOwotCQl2YWwgKj0gKGZyZXEgLyAxMDAw KTsKLQkJdmFsICo9IDI1NTsKLQkJdmFsIC89ICgxMjcqMTI3KjkwMCk7Ci0JCWlmICh2YWwgPiAw eGZmKQotCQkJRFJNX0VSUk9SKCJiYWQgcHh2YWw6ICVsZFxuIiwgdmFsKTsKLQkJcHh3W2ldID0g dmFsOwotCX0KLQkvKiBSZW5kZXIgc3RhbmRieSBzdGF0ZXMgZ2V0IDAgd2VpZ2h0ICovCi0JcHh3 WzE0XSA9IDA7Ci0JcHh3WzE1XSA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0J CXUzMiB2YWwgPSAocHh3W2kqNF0gPDwgMjQpIHwgKHB4d1soaSo0KSsxXSA8PCAxNikgfAotCQkJ KHB4d1soaSo0KSsyXSA8PCA4KSB8IChweHdbKGkqNCkrM10pOwotCQlJOTE1X1dSSVRFKFBYVyhp KSwgdmFsKTsKLQl9Ci0KLQkvKiBBZGp1c3QgbWFnaWMgcmVncyB0byBtYWdpYyB2YWx1ZXMgKG1v cmUgZXhwZXJpbWVudGFsIHJlc3VsdHMpICovCi0JSTkxNV9XUklURShPR1cwLCAwKTsKLQlJOTE1 X1dSSVRFKE9HVzEsIDApOwotCUk5MTVfV1JJVEUoRUcwLCAweDAwMDA3ZjAwKTsKLQlJOTE1X1dS SVRFKEVHMSwgMHgwMDAwMDAwZSk7Ci0JSTkxNV9XUklURShFRzIsIDB4MDAwZTAwMDApOwotCUk5 MTVfV1JJVEUoRUczLCAweDY4MDAwMzAwKTsKLQlJOTE1X1dSSVRFKEVHNCwgMHg0MjAwMDAwMCk7 Ci0JSTkxNV9XUklURShFRzUsIDB4MDAxNDAwMzEpOwotCUk5MTVfV1JJVEUoRUc2LCAwKTsKLQlJ OTE1X1dSSVRFKEVHNywgMCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlJOTE1X1dS SVRFKFBYV0woaSksIDApOwotCi0JLyogRW5hYmxlIFBNT04gKyBzZWxlY3QgZXZlbnRzICovCi0J STkxNV9XUklURShFQ1IsIDB4ODAwMDAwMTkpOwotCi0JbGNmdXNlID0gSTkxNV9SRUFEKExDRlVT RTAyKTsKLQotCWRldl9wcml2LT5pcHMuY29yciA9IChsY2Z1c2UgJiBMQ0ZVU0VfSElWX01BU0sp OwotfQotCi12b2lkIGludGVsX2luaXRfZ3RfcG93ZXJzYXZlKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0 X3BtLnJwczsKLQotCS8qIFBvd2Vyc2F2aW5nIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGhvc3Qgd2hl biBpbnNpZGUgYSBWTSAqLwotCWlmIChpbnRlbF92Z3B1X2FjdGl2ZShkZXZfcHJpdikpCi0JCW1r d3JpdGVfZGV2aWNlX2luZm8oZGV2X3ByaXYpLT5oYXNfcnBzID0gZmFsc2U7Ci0KLQkvKiBJbml0 aWFsaXplIFJQUyBsaW1pdHMgKGZvciB1c2Vyc3BhY2UpICovCi0JaWYgKElTX0NIRVJSWVZJRVco ZGV2X3ByaXYpKQotCQljaGVycnl2aWV3X2luaXRfZ3RfcG93ZXJzYXZlKGRldl9wcml2KTsKLQll bHNlIGlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSkKLQkJdmFsbGV5dmlld19pbml0X2d0X3Bv d2Vyc2F2ZShkZXZfcHJpdik7Ci0JZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA2KQot CQlnZW42X2luaXRfcnBzX2ZyZXF1ZW5jaWVzKGRldl9wcml2KTsKLQotCS8qIERlcml2ZSBpbml0 aWFsIHVzZXIgcHJlZmVyZW5jZXMvbGltaXRzIGZyb20gdGhlIGhhcmR3YXJlIGxpbWl0cyAqLwot CXJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0ID0gcnBzLT5tYXhfZnJlcTsKLQlycHMtPm1pbl9mcmVx X3NvZnRsaW1pdCA9IHJwcy0+bWluX2ZyZXE7Ci0KLQkvKiBBZnRlciBzZXR0aW5nIG1heC1zb2Z0 bGltaXQsIGZpbmQgdGhlIG92ZXJjbG9jayBtYXggZnJlcSAqLwotCWlmIChJU19HRU4oZGV2X3By aXYsIDYpIHx8Ci0JICAgIElTX0lWWUJSSURHRShkZXZfcHJpdikgfHwgSVNfSEFTV0VMTChkZXZf cHJpdikpIHsKLQkJdTMyIHBhcmFtcyA9IDA7Ci0KLQkJc2FuZHlicmlkZ2VfcGNvZGVfcmVhZChk ZXZfcHJpdiwgR0VONl9SRUFEX09DX1BBUkFNUywKLQkJCQkgICAgICAgJnBhcmFtcywgTlVMTCk7 Ci0JCWlmIChwYXJhbXMgJiBCSVQoMzEpKSB7IC8qIE9DIHN1cHBvcnRlZCAqLwotCQkJRFJNX0RF QlVHX0RSSVZFUigiT3ZlcmNsb2NraW5nIHN1cHBvcnRlZCwgbWF4OiAlZE1Ieiwgb3ZlcmNsb2Nr OiAlZE1IelxuIiwKLQkJCQkJIChycHMtPm1heF9mcmVxICYgMHhmZikgKiA1MCwKLQkJCQkJIChw YXJhbXMgJiAweGZmKSAqIDUwKTsKLQkJCXJwcy0+bWF4X2ZyZXEgPSBwYXJhbXMgJiAweGZmOwot CQl9Ci0JfQotCi0JLyogRmluYWxseSBhbGxvdyB1cyB0byBib29zdCB0byBtYXggYnkgZGVmYXVs dCAqLwotCXJwcy0+Ym9vc3RfZnJlcSA9IHJwcy0+bWF4X2ZyZXE7Ci0JcnBzLT5pZGxlX2ZyZXEg PSBycHMtPm1pbl9mcmVxOwotCXJwcy0+Y3VyX2ZyZXEgPSBycHMtPmlkbGVfZnJlcTsKLX0KLQot dm9pZCBpbnRlbF9zYW5pdGl6ZV9ndF9wb3dlcnNhdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQotewotCWRldl9wcml2LT5ndF9wbS5ycHMuZW5hYmxlZCA9IHRydWU7IC8qIGZv cmNlIFJQUyBkaXNhYmxpbmcgKi8KLQlpbnRlbF9kaXNhYmxlX2d0X3Bvd2Vyc2F2ZShkZXZfcHJp dik7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkKLQkJZ2VuMTFfcmVzZXRfcnBz X2ludGVycnVwdHMoZGV2X3ByaXYpOwotCWVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g NikKLQkJZ2VuNl9yZXNldF9ycHNfaW50ZXJydXB0cyhkZXZfcHJpdik7Ci19Ci0KLXN0YXRpYyB2 b2lkIGludGVsX2Rpc2FibGVfcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK LXsKLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+Z3RfcG0ucnBzLmxvY2spOwotCi0J aWYgKCFkZXZfcHJpdi0+Z3RfcG0ucnBzLmVuYWJsZWQpCi0JCXJldHVybjsKLQotCWlmIChJTlRF TF9HRU4oZGV2X3ByaXYpID49IDkpCi0JCWdlbjlfZGlzYWJsZV9ycHMoZGV2X3ByaXYpOwotCWVs c2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQotCQljaGVycnl2aWV3X2Rpc2FibGVfcnBz KGRldl9wcml2KTsKLQllbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSkKLQkJdmFsbGV5 dmlld19kaXNhYmxlX3JwcyhkZXZfcHJpdik7Ci0JZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA+PSA2KQotCQlnZW42X2Rpc2FibGVfcnBzKGRldl9wcml2KTsKLQllbHNlIGlmIChJU19JUk9O TEFLRV9NKGRldl9wcml2KSkKLQkJaXJvbmxha2VfZGlzYWJsZV9kcnBzKGRldl9wcml2KTsKLQot CWRldl9wcml2LT5ndF9wbS5ycHMuZW5hYmxlZCA9IGZhbHNlOwotfQotCi12b2lkIGludGVsX2Rp c2FibGVfZ3RfcG93ZXJzYXZlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsK LQltdXRleF9sb2NrKCZkZXZfcHJpdi0+Z3RfcG0ucnBzLmxvY2spOwotCi0JaW50ZWxfZGlzYWJs ZV9ycHMoZGV2X3ByaXYpOwotCWlmIChIQVNfTExDKGRldl9wcml2KSkKLQkJaW50ZWxfbGxjX2Rp c2FibGUoJmRldl9wcml2LT5ndC5sbGMpOwotCi0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+Z3Rf cG0ucnBzLmxvY2spOwotfQotCi1zdGF0aWMgdm9pZCBpbnRlbF9lbmFibGVfcnBzKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAm ZGV2X3ByaXYtPmd0X3BtLnJwczsKLQotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnJwcy0+bG9jayk7 Ci0KLQlpZiAocnBzLT5lbmFibGVkKQotCQlyZXR1cm47Ci0KLQlpZiAoSVNfQ0hFUlJZVklFVyhk ZXZfcHJpdikpIHsKLQkJY2hlcnJ5dmlld19lbmFibGVfcnBzKGRldl9wcml2KTsKLQl9IGVsc2Ug aWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKSB7Ci0JCXZhbGxleXZpZXdfZW5hYmxlX3Jwcyhk ZXZfcHJpdik7Ci0JfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpIHsKLQkJZ2Vu OV9lbmFibGVfcnBzKGRldl9wcml2KTsKLQl9IGVsc2UgaWYgKElTX0JST0FEV0VMTChkZXZfcHJp dikpIHsKLQkJZ2VuOF9lbmFibGVfcnBzKGRldl9wcml2KTsKLQl9IGVsc2UgaWYgKElOVEVMX0dF TihkZXZfcHJpdikgPj0gNikgewotCQlnZW42X2VuYWJsZV9ycHMoZGV2X3ByaXYpOwotCX0gZWxz ZSBpZiAoSVNfSVJPTkxBS0VfTShkZXZfcHJpdikpIHsKLQkJaXJvbmxha2VfZW5hYmxlX2RycHMo ZGV2X3ByaXYpOwotCQlpbnRlbF9pbml0X2Vtb24oZGV2X3ByaXYpOwotCX0KLQotCVdBUk5fT04o cnBzLT5tYXhfZnJlcSA8IHJwcy0+bWluX2ZyZXEpOwotCVdBUk5fT04ocnBzLT5pZGxlX2ZyZXEg PiBycHMtPm1heF9mcmVxKTsKLQotCVdBUk5fT04ocnBzLT5lZmZpY2llbnRfZnJlcSA8IHJwcy0+ bWluX2ZyZXEpOwotCVdBUk5fT04ocnBzLT5lZmZpY2llbnRfZnJlcSA+IHJwcy0+bWF4X2ZyZXEp OwotCi0JcnBzLT5lbmFibGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBpbnRlbF9lbmFibGVfZ3RfcG93 ZXJzYXZlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQkvKiBQb3dlcnNh dmluZyBpcyBjb250cm9sbGVkIGJ5IHRoZSBob3N0IHdoZW4gaW5zaWRlIGEgVk0gKi8KLQlpZiAo aW50ZWxfdmdwdV9hY3RpdmUoZGV2X3ByaXYpKQotCQlyZXR1cm47Ci0KLQltdXRleF9sb2NrKCZk ZXZfcHJpdi0+Z3RfcG0ucnBzLmxvY2spOwotCi0JaWYgKEhBU19SUFMoZGV2X3ByaXYpKQotCQlp bnRlbF9lbmFibGVfcnBzKGRldl9wcml2KTsKLQotCWludGVsX2xsY19lbmFibGUoJmRldl9wcml2 LT5ndC5sbGMpOwotCi0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+Z3RfcG0ucnBzLmxvY2spOwot fQotCi1zdGF0aWMgdm9pZCBpYnhfaW5pdF9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQotewotCS8qCi0JICogT24gSWJleCBQZWFrIGFuZCBDb3VnYXIgUG9p bnQsIHdlIG5lZWQgdG8gZGlzYWJsZSBjbG9jawotCSAqIGdhdGluZyBmb3IgdGhlIHBhbmVsIHBv d2VyIHNlcXVlbmNlciBvciBpdCB3aWxsIGZhaWwgdG8KLQkgKiBzdGFydCB1cCB3aGVuIG5vIHBv cnRzIGFyZSBhY3RpdmUuCi0JICovCi0JSTkxNV9XUklURShTT1VUSF9EU1BDTEtfR0FURV9ELCBQ Q0hfRFBMU1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKLX0KLQotc3RhdGljIHZvaWQgZzR4X2Rp c2FibGVfdHJpY2tsZV9mZWVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsK LQllbnVtIHBpcGUgcGlwZTsKLQotCWZvcl9lYWNoX3BpcGUoZGV2X3ByaXYsIHBpcGUpIHsKLQkJ STkxNV9XUklURShEU1BDTlRSKHBpcGUpLAotCQkJICAgSTkxNV9SRUFEKERTUENOVFIocGlwZSkp IHwKLQkJCSAgIERJU1BQTEFORV9UUklDS0xFX0ZFRURfRElTQUJMRSk7Ci0KLQkJSTkxNV9XUklU RShEU1BTVVJGKHBpcGUpLCBJOTE1X1JFQUQoRFNQU1VSRihwaXBlKSkpOwotCQlQT1NUSU5HX1JF QUQoRFNQU1VSRihwaXBlKSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBpbGtfaW5pdF9jbG9ja19n YXRpbmcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXUzMiBkc3BjbGtf Z2F0ZSA9IElMS19WUkhVTklUX0NMT0NLX0dBVEVfRElTQUJMRTsKLQotCS8qCi0JICogUmVxdWly ZWQgZm9yIEZCQwotCSAqIFdhRmJjRGlzYWJsZURwZmNDbG9ja0dhdGluZzppbGsKLQkgKi8KLQlk c3BjbGtfZ2F0ZSB8PSBJTEtfRFBGQ1JVTklUX0NMT0NLX0dBVEVfRElTQUJMRSB8Ci0JCSAgIElM S19EUEZDVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAotCQkgICBJTEtfRFBGRFVOSVRfQ0xPQ0tf R0FURV9FTkFCTEU7Ci0KLQlJOTE1X1dSSVRFKFBDSF8zRENHRElTMCwKLQkJICAgTUFSSVVOSVRf Q0xPQ0tfR0FURV9ESVNBQkxFIHwKLQkJICAgU1ZTTVVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsK LQlJOTE1X1dSSVRFKFBDSF8zRENHRElTMSwKLQkJICAgVkZNVU5JVF9DTE9DS19HQVRFX0RJU0FC TEUpOwotCi0JLyoKLQkgKiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMgdGhlIGZvbGxvd2luZyBiaXRz IHNob3VsZCBiZSBzZXQgaW4KLQkgKiBvcmRlciB0byBlbmFibGUgbWVtb3J5IHNlbGYtcmVmcmVz aAotCSAqIFRoZSBiaXQgMjIvMjEgb2YgMHg0MjAwNAotCSAqIFRoZSBiaXQgNSBvZiAweDQyMDIw Ci0JICogVGhlIGJpdCAxNSBvZiAweDQ1MDAwCi0JICovCi0JSTkxNV9XUklURShJTEtfRElTUExB WV9DSElDS0VOMiwKLQkJICAgKEk5MTVfUkVBRChJTEtfRElTUExBWV9DSElDS0VOMikgfAotCQkg ICAgSUxLX0RQQVJCX0dBVEUgfCBJTEtfVlNEUEZEX0ZVTEwpKTsKLQlkc3BjbGtfZ2F0ZSB8PSBJ TEtfRFBBUkJVTklUX0NMT0NLX0dBVEVfRU5BQkxFOwotCUk5MTVfV1JJVEUoRElTUF9BUkJfQ1RM LAotCQkgICAoSTkxNV9SRUFEKERJU1BfQVJCX0NUTCkgfAotCQkgICAgRElTUF9GQkNfV01fRElT KSk7Ci0KLQkvKgotCSAqIEJhc2VkIG9uIHRoZSBkb2N1bWVudCBmcm9tIGhhcmR3YXJlIGd1eXMg dGhlIGZvbGxvd2luZyBiaXRzCi0JICogc2hvdWxkIGJlIHNldCB1bmNvbmRpdGlvbmFsbHkgaW4g b3JkZXIgdG8gZW5hYmxlIEZCQy4KLQkgKiBUaGUgYml0IDIyIG9mIDB4NDIwMDAKLQkgKiBUaGUg Yml0IDIyIG9mIDB4NDIwMDQKLQkgKiBUaGUgYml0IDcsOCw5IG9mIDB4NDIwMjAuCi0JICovCi0J aWYgKElTX0lST05MQUtFX00oZGV2X3ByaXYpKSB7Ci0JCS8qIFdhRmJjQXN5bmNoRmxpcERpc2Fi bGVGYmNRdWV1ZTppbGsgKi8KLQkJSTkxNV9XUklURShJTEtfRElTUExBWV9DSElDS0VOMSwKLQkJ CSAgIEk5MTVfUkVBRChJTEtfRElTUExBWV9DSElDS0VOMSkgfAotCQkJICAgSUxLX0ZCQ1FfRElT KTsKLQkJSTkxNV9XUklURShJTEtfRElTUExBWV9DSElDS0VOMiwKLQkJCSAgIEk5MTVfUkVBRChJ TEtfRElTUExBWV9DSElDS0VOMikgfAotCQkJICAgSUxLX0RQQVJCX0dBVEUpOwotCX0KLQotCUk5 MTVfV1JJVEUoSUxLX0RTUENMS19HQVRFX0QsIGRzcGNsa19nYXRlKTsKLQotCUk5MTVfV1JJVEUo SUxLX0RJU1BMQVlfQ0hJQ0tFTjIsCi0JCSAgIEk5MTVfUkVBRChJTEtfRElTUExBWV9DSElDS0VO MikgfAotCQkgICBJTEtfRUxQSU5fNDA5X1NFTEVDVCk7Ci0JSTkxNV9XUklURShfM0RfQ0hJQ0tF TjIsCi0JCSAgIF8zRF9DSElDS0VOMl9XTV9SRUFEX1BJUEVMSU5FRCA8PCAxNiB8Ci0JCSAgIF8z RF9DSElDS0VOMl9XTV9SRUFEX1BJUEVMSU5FRCk7Ci0KLQkvKiBXYURpc2FibGVSZW5kZXJDYWNo ZVBpcGVsaW5lZEZsdXNoOmlsayAqLwotCUk5MTVfV1JJVEUoQ0FDSEVfTU9ERV8wLAotCQkgICBf TUFTS0VEX0JJVF9FTkFCTEUoQ00wX1BJUEVMSU5FRF9SRU5ERVJfRkxVU0hfRElTQUJMRSkpOwot Ci0JLyogV2FEaXNhYmxlX1JlbmRlckNhY2hlX09wZXJhdGlvbmFsRmx1c2g6aWxrICovCi0JSTkx NV9XUklURShDQUNIRV9NT0RFXzAsIF9NQVNLRURfQklUX0RJU0FCTEUoUkNfT1BfRkxVU0hfRU5B QkxFKSk7Ci0KLQlnNHhfZGlzYWJsZV90cmlja2xlX2ZlZWQoZGV2X3ByaXYpOwotCi0JaWJ4X2lu aXRfY2xvY2tfZ2F0aW5nKGRldl9wcml2KTsKLX0KLQotc3RhdGljIHZvaWQgY3B0X2luaXRfY2xv Y2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQllbnVtIHBp cGUgcGlwZTsKLQl1MzIgdmFsOwotCi0JLyoKLQkgKiBPbiBJYmV4IFBlYWsgYW5kIENvdWdhciBQ b2ludCwgd2UgbmVlZCB0byBkaXNhYmxlIGNsb2NrCi0JICogZ2F0aW5nIGZvciB0aGUgcGFuZWwg cG93ZXIgc2VxdWVuY2VyIG9yIGl0IHdpbGwgZmFpbCB0bwotCSAqIHN0YXJ0IHVwIHdoZW4gbm8g cG9ydHMgYXJlIGFjdGl2ZS4KLQkgKi8KLQlJOTE1X1dSSVRFKFNPVVRIX0RTUENMS19HQVRFX0Qs IFBDSF9EUExTVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAotCQkgICBQQ0hfRFBMVU5JVF9DTE9D S19HQVRFX0RJU0FCTEUgfAotCQkgICBQQ0hfQ1BVTklUX0NMT0NLX0dBVEVfRElTQUJMRSk7Ci0J STkxNV9XUklURShTT1VUSF9DSElDS0VOMiwgSTkxNV9SRUFEKFNPVVRIX0NISUNLRU4yKSB8Ci0J CSAgIERQTFNfRURQX1BQU19GSVhfRElTKTsKLQkvKiBUaGUgYmVsb3cgZml4ZXMgdGhlIHdlaXJk IGRpc3BsYXkgY29ycnVwdGlvbiwgYSBmZXcgcGl4ZWxzIHNoaWZ0ZWQKLQkgKiBkb3dud2FyZCwg b24gKG9ubHkpIExWRFMgb2Ygc29tZSBIUCBsYXB0b3BzIHdpdGggSVZZLgotCSAqLwotCWZvcl9l YWNoX3BpcGUoZGV2X3ByaXYsIHBpcGUpIHsKLQkJdmFsID0gSTkxNV9SRUFEKFRSQU5TX0NISUNL RU4yKHBpcGUpKTsKLQkJdmFsIHw9IFRSQU5TX0NISUNLRU4yX1RJTUlOR19PVkVSUklERTsKLQkJ dmFsICY9IH5UUkFOU19DSElDS0VOMl9GRElfUE9MQVJJVFlfUkVWRVJTRUQ7Ci0JCWlmIChkZXZf cHJpdi0+dmJ0LmZkaV9yeF9wb2xhcml0eV9pbnZlcnRlZCkKLQkJCXZhbCB8PSBUUkFOU19DSElD S0VOMl9GRElfUE9MQVJJVFlfUkVWRVJTRUQ7Ci0JCXZhbCAmPSB+VFJBTlNfQ0hJQ0tFTjJfRlJB TUVfU1RBUlRfREVMQVlfTUFTSzsKLQkJdmFsICY9IH5UUkFOU19DSElDS0VOMl9ESVNBQkxFX0RF RVBfQ09MT1JfQ09VTlRFUjsKLQkJdmFsICY9IH5UUkFOU19DSElDS0VOMl9ESVNBQkxFX0RFRVBf Q09MT1JfTU9ERVNXSVRDSDsKLQkJSTkxNV9XUklURShUUkFOU19DSElDS0VOMihwaXBlKSwgdmFs KTsKLQl9Ci0JLyogV0FEUDBDbG9ja0dhdGluZ0Rpc2FibGUgKi8KLQlmb3JfZWFjaF9waXBlKGRl dl9wcml2LCBwaXBlKSB7Ci0JCUk5MTVfV1JJVEUoVFJBTlNfQ0hJQ0tFTjEocGlwZSksCi0JCQkg ICBUUkFOU19DSElDS0VOMV9EUDBVTklUX0dDX0RJU0FCTEUpOwotCX0KLX0KLQotc3RhdGljIHZv aWQgZ2VuNl9jaGVja19tY2hfc2V0dXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQotewotCXUzMiB0bXA7Ci0KLQl0bXAgPSBJOTE1X1JFQUQoTUNIX1NTS1BEKTsKLQlpZiAoKHRt cCAmIE1DSF9TU0tQRF9XTTBfTUFTSykgIT0gTUNIX1NTS1BEX1dNMF9WQUwpCi0JCURSTV9ERUJV R19LTVMoIldyb25nIE1DSF9TU0tQRCB2YWx1ZTogMHglMDh4IFRoaXMgY2FuIGNhdXNlIHVuZGVy cnVucy5cbiIsCi0JCQkgICAgICB0bXApOwotfQotCi1zdGF0aWMgdm9pZCBnZW42X2luaXRfY2xv Y2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQl1MzIgZHNw Y2xrX2dhdGUgPSBJTEtfVlJIVU5JVF9DTE9DS19HQVRFX0RJU0FCTEU7Ci0KLQlJOTE1X1dSSVRF KElMS19EU1BDTEtfR0FURV9ELCBkc3BjbGtfZ2F0ZSk7Ci0KLQlJOTE1X1dSSVRFKElMS19ESVNQ TEFZX0NISUNLRU4yLAotCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIpIHwKLQkJ ICAgSUxLX0VMUElOXzQwOV9TRUxFQ1QpOwotCi0JLyogV2FEaXNhYmxlSGlaUGxhbmVzV2hlbk1T QUFFbmFibGVkOnNuYiAqLwotCUk5MTVfV1JJVEUoXzNEX0NISUNLRU4sCi0JCSAgIF9NQVNLRURf QklUX0VOQUJMRShfM0RfQ0hJQ0tFTl9ISVpfUExBTkVfRElTQUJMRV9NU0FBXzRYX1NOQikpOwot Ci0JLyogV2FEaXNhYmxlX1JlbmRlckNhY2hlX09wZXJhdGlvbmFsRmx1c2g6c25iICovCi0JSTkx NV9XUklURShDQUNIRV9NT0RFXzAsIF9NQVNLRURfQklUX0RJU0FCTEUoUkNfT1BfRkxVU0hfRU5B QkxFKSk7Ci0KLQkvKgotCSAqIEJTcGVjIHJlY29vbWVuZHMgOHg0IHdoZW4gTVNBQSBpcyB1c2Vk LAotCSAqIGhvd2V2ZXIgaW4gcHJhY3RpY2UgMTZ4NCBzZWVtcyBmYXN0ZXN0LgotCSAqCi0JICog Tm90ZSB0aGF0IFBTL1dNIHRocmVhZCBjb3VudHMgZGVwZW5kIG9uIHRoZSBXSVogaGFzaGluZwot CSAqIGRpc2FibGUgYml0LCB3aGljaCB3ZSBkb24ndCB0b3VjaCBoZXJlLCBidXQgaXQncyBnb29k Ci0JICogdG8ga2VlcCBpbiBtaW5kIChzZWUgM0RTVEFURV9QUyBhbmQgM0RTVEFURV9XTSkuCi0J ICovCi0JSTkxNV9XUklURShHRU42X0dUX01PREUsCi0JCSAgIF9NQVNLRURfRklFTEQoR0VONl9X SVpfSEFTSElOR19NQVNLLCBHRU42X1dJWl9IQVNISU5HXzE2eDQpKTsKLQotCUk5MTVfV1JJVEUo Q0FDSEVfTU9ERV8wLAotCQkgICBfTUFTS0VEX0JJVF9ESVNBQkxFKENNMF9TVENfRVZJQ1RfRElT QUJMRV9MUkFfU05CKSk7Ci0KLQlJOTE1X1dSSVRFKEdFTjZfVUNHQ1RMMSwKLQkJICAgSTkxNV9S RUFEKEdFTjZfVUNHQ1RMMSkgfAotCQkgICBHRU42X0JMQlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxF IHwKLQkJICAgR0VONl9DU1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKLQotCS8qIEFjY29yZGlu ZyB0byB0aGUgQlNwZWMgdm9sMWcsIGJpdCAxMiAoUkNQQlVOSVQpIGNsb2NrCi0JICogZ2F0aW5n IGRpc2FibGUgbXVzdCBiZSBzZXQuICBGYWlsdXJlIHRvIHNldCBpdCByZXN1bHRzIGluCi0JICog ZmxpY2tlcmluZyBwaXhlbHMgZHVlIHRvIFogd3JpdGUgb3JkZXJpbmcgZmFpbHVyZXMgYWZ0ZXIK LQkgKiBzb21lIGFtb3VudCBvZiBydW50aW1lIGluIHRoZSBNZXNhICJmaXJlIiBkZW1vLCBhbmQg VW5pZ2luZQotCSAqIFNhbmN0dWFyeSBhbmQgVHJvcGljcywgYW5kIGFwcGFyZW50bHkgYW55dGhp bmcgZWxzZSB3aXRoCi0JICogYWxwaGEgdGVzdCBvciBwaXhlbCBkaXNjYXJkLgotCSAqCi0JICog QWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBiaXQgMTEgKFJDQ1VOSVQpIG11c3QgYWxzbyBiZSBzZXQs Ci0JICogYnV0IHdlIGRpZG4ndCBkZWJ1ZyBhY3R1YWwgdGVzdGNhc2VzIHRvIGZpbmQgaXQgb3V0 LgotCSAqCi0JICogV2FEaXNhYmxlUkNDVW5pdENsb2NrR2F0aW5nOnNuYgotCSAqIFdhRGlzYWJs ZVJDUEJVbml0Q2xvY2tHYXRpbmc6c25iCi0JICovCi0JSTkxNV9XUklURShHRU42X1VDR0NUTDIs Ci0JCSAgIEdFTjZfUkNQQlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKLQkJICAgR0VONl9SQ0NV TklUX0NMT0NLX0dBVEVfRElTQUJMRSk7Ci0KLQkvKiBXYVN0cmlwc0ZhbnNEaXNhYmxlRmFzdENs aXBQZXJmb3JtYW5jZUZpeDpzbmIgKi8KLQlJOTE1X1dSSVRFKF8zRF9DSElDS0VOMywKLQkJICAg X01BU0tFRF9CSVRfRU5BQkxFKF8zRF9DSElDS0VOM19TRl9ESVNBQkxFX0ZBU1RDTElQX0NVTEwp KTsKLQotCS8qCi0JICogQnNwZWMgc2F5czoKLQkgKiAiVGhpcyBiaXQgbXVzdCBiZSBzZXQgaWYg M0RTVEFURV9DTElQIGNsaXAgbW9kZSBpcyBzZXQgdG8gbm9ybWFsIGFuZAotCSAqIDNEU1RBVEVf U0YgbnVtYmVyIG9mIFNGIG91dHB1dCBhdHRyaWJ1dGVzIGlzIG1vcmUgdGhhbiAxNi4iCi0JICov Ci0JSTkxNV9XUklURShfM0RfQ0hJQ0tFTjMsCi0JCSAgIF9NQVNLRURfQklUX0VOQUJMRShfM0Rf Q0hJQ0tFTjNfU0ZfRElTQUJMRV9QSVBFTElORURfQVRUUl9GRVRDSCkpOwotCi0JLyoKLQkgKiBB Y2NvcmRpbmcgdG8gdGhlIHNwZWMgdGhlIGZvbGxvd2luZyBiaXRzIHNob3VsZCBiZQotCSAqIHNl dCBpbiBvcmRlciB0byBlbmFibGUgbWVtb3J5IHNlbGYtcmVmcmVzaCBhbmQgZmJjOgotCSAqIFRo ZSBiaXQyMSBhbmQgYml0MjIgb2YgMHg0MjAwMAotCSAqIFRoZSBiaXQyMSBhbmQgYml0MjIgb2Yg MHg0MjAwNAotCSAqIFRoZSBiaXQ1IGFuZCBiaXQ3IG9mIDB4NDIwMjAKLQkgKiBUaGUgYml0MTQg b2YgMHg3MDE4MAotCSAqIFRoZSBiaXQxNCBvZiAweDcxMTgwCi0JICoKLQkgKiBXYUZiY0FzeW5j aEZsaXBEaXNhYmxlRmJjUXVldWU6c25iCi0JICovCi0JSTkxNV9XUklURShJTEtfRElTUExBWV9D SElDS0VOMSwKLQkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4xKSB8Ci0JCSAgIElM S19GQkNRX0RJUyB8IElMS19QQUJTVFJFVENIX0RJUyk7Ci0JSTkxNV9XUklURShJTEtfRElTUExB WV9DSElDS0VOMiwKLQkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4yKSB8Ci0JCSAg IElMS19EUEFSQl9HQVRFIHwgSUxLX1ZTRFBGRF9GVUxMKTsKLQlJOTE1X1dSSVRFKElMS19EU1BD TEtfR0FURV9ELAotCQkgICBJOTE1X1JFQUQoSUxLX0RTUENMS19HQVRFX0QpIHwKLQkJICAgSUxL X0RQQVJCVU5JVF9DTE9DS19HQVRFX0VOQUJMRSAgfAotCQkgICBJTEtfRFBGRFVOSVRfQ0xPQ0tf R0FURV9FTkFCTEUpOwotCi0JZzR4X2Rpc2FibGVfdHJpY2tsZV9mZWVkKGRldl9wcml2KTsKLQot CWNwdF9pbml0X2Nsb2NrX2dhdGluZyhkZXZfcHJpdik7Ci0KLQlnZW42X2NoZWNrX21jaF9zZXR1 cChkZXZfcHJpdik7Ci19Ci0KLXN0YXRpYyB2b2lkIGdlbjdfc2V0dXBfZml4ZWRfZnVuY19zY2hl ZHVsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXUzMiByZWcgPSBJ OTE1X1JFQUQoR0VON19GRl9USFJFQURfTU9ERSk7CisJdTMyIHJlZyA9IEk5MTVfUkVBRChHRU43 X0ZGX1RIUkVBRF9NT0RFKTsKIAogCS8qCiAJICogV2FWU1RocmVhZERpc3BhdGNoT3ZlcnJpZGU6 aXZiLHZsdgpAQCAtODk0Miw5MCArNzMyNSw4IEBAIHZvaWQgaW50ZWxfaW5pdF9wbShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJfQogfQogCi1zdGF0aWMgaW50IGJ5dF9ncHVf ZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpCi17Ci0Jc3Ry dWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0KLQkvKgotCSAqIE4g PSB2YWwgLSAweGI3Ci0JICogU2xvdyA9IEZhc3QgPSBHUExMIHJlZiAqIE4KLQkgKi8KLQlyZXR1 cm4gRElWX1JPVU5EX0NMT1NFU1QocnBzLT5ncGxsX3JlZl9mcmVxICogKHZhbCAtIDB4YjcpLCAx MDAwKTsKLX0KLQotc3RhdGljIGludCBieXRfZnJlcV9vcGNvZGUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LCBpbnQgdmFsKQotewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZk ZXZfcHJpdi0+Z3RfcG0ucnBzOwotCi0JcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKDEwMDAgKiB2 YWwsIHJwcy0+Z3BsbF9yZWZfZnJlcSkgKyAweGI3OwotfQotCi1zdGF0aWMgaW50IGNodl9ncHVf ZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpCi17Ci0Jc3Ry dWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0KLQkvKgotCSAqIE4g PSB2YWwgLyAyCi0JICogQ1UgKHNsb3cpID0gQ1UyeCAoZmFzdCkgLyAyID0gR1BMTCByZWYgKiBO IC8gMgotCSAqLwotCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVChycHMtPmdwbGxfcmVmX2ZyZXEg KiB2YWwsIDIgKiAyICogMTAwMCk7Ci19Ci0KLXN0YXRpYyBpbnQgY2h2X2ZyZXFfb3Bjb2RlKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IHZhbCkKLXsKLQlzdHJ1Y3QgaW50 ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKLQotCS8qIENIViBuZWVkcyBldmVu IHZhbHVlcyAqLwotCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVCgyICogMTAwMCAqIHZhbCwgcnBz LT5ncGxsX3JlZl9mcmVxKSAqIDI7Ci19Ci0KLWludCBpbnRlbF9ncHVfZnJlcShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpCi17Ci0JaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gOSkKLQkJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHZhbCAqIEdUX0ZSRVFVRU5D WV9NVUxUSVBMSUVSLAotCQkJCQkgR0VOOV9GUkVRX1NDQUxFUik7Ci0JZWxzZSBpZiAoSVNfQ0hF UlJZVklFVyhkZXZfcHJpdikpCi0JCXJldHVybiBjaHZfZ3B1X2ZyZXEoZGV2X3ByaXYsIHZhbCk7 Ci0JZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikpCi0JCXJldHVybiBieXRfZ3B1X2Zy ZXEoZGV2X3ByaXYsIHZhbCk7Ci0JZWxzZQotCQlyZXR1cm4gdmFsICogR1RfRlJFUVVFTkNZX01V TFRJUExJRVI7Ci19Ci0KLWludCBpbnRlbF9mcmVxX29wY29kZShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpCi17Ci0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g OSkKLQkJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHZhbCAqIEdFTjlfRlJFUV9TQ0FMRVIsCi0J CQkJCSBHVF9GUkVRVUVOQ1lfTVVMVElQTElFUik7Ci0JZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhk ZXZfcHJpdikpCi0JCXJldHVybiBjaHZfZnJlcV9vcGNvZGUoZGV2X3ByaXYsIHZhbCk7Ci0JZWxz ZSBpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikpCi0JCXJldHVybiBieXRfZnJlcV9vcGNvZGUo ZGV2X3ByaXYsIHZhbCk7Ci0JZWxzZQotCQlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QodmFsLCBH VF9GUkVRVUVOQ1lfTVVMVElQTElFUik7Ci19Ci0KIHZvaWQgaW50ZWxfcG1fc2V0dXAoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewotCW11dGV4X2luaXQoJmRldl9wcml2LT5n dF9wbS5ycHMubG9jayk7Ci0JbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPmd0X3BtLnJwcy5wb3dlci5t dXRleCk7Ci0KLQlhdG9taWNfc2V0KCZkZXZfcHJpdi0+Z3RfcG0ucnBzLm51bV93YWl0ZXJzLCAw KTsKLQogCWRldl9wcml2LT5ydW50aW1lX3BtLnN1c3BlbmRlZCA9IGZhbHNlOwogCWF0b21pY19z ZXQoJmRldl9wcml2LT5ydW50aW1lX3BtLndha2VyZWZfY291bnQsIDApOwogfQotCi11MzIgaW50 ZWxfZ2V0X2NhZ2Yoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgcnBzdGF0 KQotewotCXUzMiBjYWdmOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkKLQkJY2Fn ZiA9IChycHN0YXQgJiBHRU45X0NBR0ZfTUFTSykgPj4gR0VOOV9DQUdGX1NISUZUOwotCWVsc2Ug aWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpIHx8IElTX0JST0FEV0VMTChkZXZfcHJpdikpCi0JCWNh Z2YgPSAocnBzdGF0ICYgSFNXX0NBR0ZfTUFTSykgPj4gSFNXX0NBR0ZfU0hJRlQ7Ci0JZWxzZQot CQljYWdmID0gKHJwc3RhdCAmIEdFTjZfQ0FHRl9NQVNLKSA+PiBHRU42X0NBR0ZfU0hJRlQ7Ci0K LQlyZXR1cm4gIGNhZ2Y7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9wbS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uaAppbmRleCA5M2QxOTJkMDYx MGEuLmI1NmU2Mjg1ZDFjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cG0uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5oCkBAIC0yOSwxNSArMjks NiBAQCB2b2lkIGludGVsX3VwZGF0ZV93YXRlcm1hcmtzKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRj KTsKIHZvaWQgaW50ZWxfaW5pdF9wbShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Owogdm9pZCBpbnRlbF9pbml0X2Nsb2NrX2dhdGluZ19ob29rcyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBpbnRlbF9wbV9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpOwotdm9pZCBpbnRlbF9ncHVfaXBzX2luaXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KTsKLXZvaWQgaW50ZWxfZ3B1X2lwc190ZWFyZG93bih2b2lkKTsK LXZvaWQgaW50ZWxfaW5pdF9ndF9wb3dlcnNhdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KTsKLXZvaWQgaW50ZWxfc2FuaXRpemVfZ3RfcG93ZXJzYXZlKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdik7Ci12b2lkIGludGVsX2VuYWJsZV9ndF9wb3dlcnNhdmUoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKLXZvaWQgaW50ZWxfZGlzYWJsZV9ndF9w b3dlcnNhdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKLXZvaWQgZ2VuNl9y cHNfYnVzeShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotdm9pZCBnZW42X3Jw c19pZGxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Ci12b2lkIGdlbjZfcnBz X2Jvb3N0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKTsKIHZvaWQgZzR4X3dtX2dldF9od19zdGF0 ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogdm9pZCB2bHZfd21fZ2V0X2h3 X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiB2b2lkIGlsa193bV9n ZXRfaHdfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKQEAgLTY5LDE5 ICs2MCw2IEBAIGludCBza2xfY2hlY2tfcGlwZV9tYXhfcGl4ZWxfcmF0ZShzdHJ1Y3QgaW50ZWxf Y3J0YyAqaW50ZWxfY3J0YywKIHZvaWQgaW50ZWxfaW5pdF9pcGMoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KTsKIHZvaWQgaW50ZWxfZW5hYmxlX2lwYyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpOwogCi1pbnQgaW50ZWxfZ3B1X2ZyZXEoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LCBpbnQgdmFsKTsKLWludCBpbnRlbF9mcmVxX29wY29kZShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpOwotCi11MzIgaW50ZWxfZ2V0 X2NhZ2Yoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgcnBzdGF0MSk7Ci0K LXVuc2lnbmVkIGxvbmcgaTkxNV9jaGlwc2V0X3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpOwotdW5zaWduZWQgbG9uZyBpOTE1X21jaF92YWwoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KTsKLXVuc2lnbmVkIGxvbmcgaTkxNV9nZnhfdmFsKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdik7Ci12b2lkIGk5MTVfdXBkYXRlX2dmeF92YWwoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKLQotYm9vbCBpcm9ubGFrZV9zZXRfZHJwcyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHU4IHZhbCk7Ci1pbnQgaW50ZWxfc2V0 X3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHU4IHZhbCk7Ci12b2lkIGlu dGVsX3Jwc19tYXJrX2ludGVyYWN0aXZlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCBi b29sIGludGVyYWN0aXZlKTsKIGJvb2wgaW50ZWxfc2V0X21lbW9yeV9jeHNyKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwgYm9vbCBlbmFibGUpOwogCiAjZW5kaWYgLyogX19JTlRF TF9QTV9IX18gKi8KLS0gCjIuMjMuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vaW50ZWwtZ2Z4 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8EE2BCA9EB6 for ; Wed, 23 Oct 2019 09:38:37 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6866321D7B for ; Wed, 23 Oct 2019 09:38:37 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6866321D7B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E79B46EA15; Wed, 23 Oct 2019 09:38:36 +0000 (UTC) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id ED7036E13A for ; Wed, 23 Oct 2019 09:38:29 +0000 (UTC) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 23 Oct 2019 02:38:29 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.68,220,1569308400"; d="scan'208";a="196726296" Received: from server.fi.intel.com (HELO teofilatto.example.org) ([10.237.72.186]) by fmsmga008.fm.intel.com with ESMTP; 23 Oct 2019 02:38:26 -0700 From: Andi Shyti To: Intel GFX Date: Wed, 23 Oct 2019 12:38:20 +0300 Message-Id: <20191023093821.3350-2-andi.shyti@intel.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191023093821.3350-1-andi.shyti@intel.com> References: <20191023093821.3350-1-andi.shyti@intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH 1/2] drm/i915: Extract GT render power state management X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Message-ID: <20191023093820.2C8O15uGLZMMmWBLgdTVu0FRRfnTUrPv99WQY94cLFg@z> RnJvbTogQW5kaSBTaHl0aSA8YW5kaUBldGV6aWFuLm9yZz4KCmk5MTVfaXJxLmMgaXMgbGFyZ2Uu IE9uZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCBoYXMgYSBsYXJnZSBjaHVuayBvZgp0aGUgR1Qg cmVuZGVyIHBvd2VyIG1hbmFnZW1lbnQgc3Rhc2hlZCBhd2F5IGluIGl0LiBFeHRyYWN0IHRoYXQg bG9naWMKb3V0IG9mIGk5MTVfaXJxLmMgYW5kIGludGVsX3BtLmMgYW5kIHB1dCBpdCB1bmRlciBv bmUgcm9vZi4KCkJhc2VkIG9uIGEgcGF0Y2ggYnkgQ2hyaXMgV2lsc29uLgoKU2lnbmVkLW9mZi1i eTogQW5kaSBTaHl0aSA8YW5kaS5zaHl0aUBpbnRlbC5jb20+CkNjOiBDaHJpcyBXaWxzb24gPGNo cmlzQGNocmlzLXdpbHNvbi5jby51az4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZSAgICAgICAgICAgICAgICAgfCAgICAzICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L2ludGVsX2Rpc3BsYXkuYyAgfCAgICA4ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9ndC5jICAgICAgICAgICAgfCAgICA2ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9ndF9pcnEuYyAgICAgICAgfCAgICA1ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9ndF9wbS5jICAgICAgICAgfCAgIDQ5ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9ndF9wbS5oICAgICAgICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2d0X3R5cGVzLmggICAgICB8ICAgIDIgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf bGxjLmMgICAgICAgICAgIHwgICAgMiArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf cnBzLmMgICAgICAgICAgIHwgMTg3MiArKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX3Jwcy5oICAgICAgICAgICB8ICAgMzcgKwogZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfcnBzX3R5cGVzLmggICAgIHwgICA5MyArCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9zZWxmdGVzdF9sbGMuYyAgICAgICAgfCAgICA3ICstCiAuLi4vZ3B1L2RybS9pOTE1L2d0 L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMgfCAgICA0ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2RlYnVnZnMuYyAgICAgICAgICAgfCAgIDczICstCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5jICAgICAgICAgICAgICAgfCAgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmggICAgICAgICAgICAgICB8ICAgOTYgLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW0uYyAgICAgICAgICAgICAgIHwgICAgMyArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9pcnEuYyAgICAgICAgICAgICAgIHwgIDM1OSArLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfaXJxLmggICAgICAgICAgICAgICB8ICAgIDMgLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9wbXUuYyAgICAgICAgICAgICAgIHwgICAxMCArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9yZXF1ZXN0LmMgICAgICAgICAgIHwgICAgNyArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9zeXNmcy5jICAgICAgICAgICAgIHwgICA3NCArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfcG0uYyAgICAgICAgICAgICAgIHwgMjEwNSArKy0tLS0tLS0tLS0tLS0tLQogZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uaCAgICAgICAgICAgICAgIHwgICAyMiAtCiAyNCBmaWxl cyBjaGFuZ2VkLCAyMzU5IGluc2VydGlvbnMoKyksIDI0ODQgZGVsZXRpb25zKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ycHMuaAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jwc190eXBlcy5oCgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9NYWtlZmlsZQppbmRleCAyZmQ0YmVkMTg4ZTUuLjEzM2NhNTllN2M0OCAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUKQEAgLTkwLDExICs5MCwxMiBAQCBndC15ICs9IFwKIAlndC9pbnRlbF9oYW5n Y2hlY2subyBcCiAJZ3QvaW50ZWxfbGxjLm8gXAogCWd0L2ludGVsX2xyYy5vIFwKKwlndC9pbnRl bF9tb2NzLm8gXAogCWd0L2ludGVsX3JjNi5vIFwKIAlndC9pbnRlbF9yZW5kZXJzdGF0ZS5vIFwK IAlndC9pbnRlbF9yZXNldC5vIFwKIAlndC9pbnRlbF9yaW5nYnVmZmVyLm8gXAotCWd0L2ludGVs X21vY3MubyBcCisJZ3QvaW50ZWxfcnBzLm8gXAogCWd0L2ludGVsX3NzZXUubyBcCiAJZ3QvaW50 ZWxfdGltZWxpbmUubyBcCiAJZ3QvaW50ZWxfd29ya2Fyb3VuZHMubwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwppbmRleCAyMzZmZGYxMjJlNDcuLjQ5YzJj N2Y3MTM5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9k aXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5 LmMKQEAgLTU1LDYgKzU1LDggQEAKICNpbmNsdWRlICJkaXNwbGF5L2ludGVsX3R2LmgiCiAjaW5j bHVkZSAiZGlzcGxheS9pbnRlbF92ZHNjLmgiCiAKKyNpbmNsdWRlICJndC9pbnRlbF9ycHMuaCIK KwogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCiAjaW5jbHVkZSAiaTkxNV90cmFjZS5oIgogI2luY2x1 ZGUgImludGVsX2FjcGkuaCIKQEAgLTE0NzgyLDcgKzE0Nzg0LDcgQEAgc3RhdGljIGludCBkb19y cHNfYm9vc3Qoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKl93YWl0LAogCSAqIHZibGFuayB3aXRo b3V0IG91ciBpbnRlcnZlbnRpb24sIHNvIGxlYXZlIFJQUyBhbG9uZS4KIAkgKi8KIAlpZiAoIWk5 MTVfcmVxdWVzdF9zdGFydGVkKHJxKSkKLQkJZ2VuNl9ycHNfYm9vc3QocnEpOworCQlpbnRlbF9y cHNfYm9vc3QocnEpOwogCWk5MTVfcmVxdWVzdF9wdXQocnEpOwogCiAJZHJtX2NydGNfdmJsYW5r X3B1dCh3YWl0LT5jcnRjKTsKQEAgLTE0OTc2LDcgKzE0OTc4LDcgQEAgaW50ZWxfcHJlcGFyZV9w bGFuZV9mYihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkgKiBtYXhpbXVtIGNsb2NrcyBmb2xs b3dpbmcgYSB2YmxhbmsgbWlzcyAoc2VlIGRvX3Jwc19ib29zdCgpKS4KIAkgKi8KIAlpZiAoIWlu dGVsX3N0YXRlLT5ycHNfaW50ZXJhY3RpdmUpIHsKLQkJaW50ZWxfcnBzX21hcmtfaW50ZXJhY3Rp dmUoZGV2X3ByaXYsIHRydWUpOworCQlpbnRlbF9ycHNfbWFya19pbnRlcmFjdGl2ZSgmZGV2X3By aXYtPmd0LnJwcywgdHJ1ZSk7CiAJCWludGVsX3N0YXRlLT5ycHNfaW50ZXJhY3RpdmUgPSB0cnVl OwogCX0KIApAQCAtMTUwMDEsNyArMTUwMDMsNyBAQCBpbnRlbF9jbGVhbnVwX3BsYW5lX2ZiKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUocGxhbmUtPmRldik7CiAKIAlpZiAoaW50ZWxfc3RhdGUtPnJwc19pbnRlcmFj dGl2ZSkgewotCQlpbnRlbF9ycHNfbWFya19pbnRlcmFjdGl2ZShkZXZfcHJpdiwgZmFsc2UpOwor CQlpbnRlbF9ycHNfbWFya19pbnRlcmFjdGl2ZSgmZGV2X3ByaXYtPmd0LnJwcywgZmFsc2UpOwog CQlpbnRlbF9zdGF0ZS0+cnBzX2ludGVyYWN0aXZlID0gZmFsc2U7CiAJfQogCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfZ3QuYwppbmRleCAxYzRiNmM5NjQyYWQuLjc1MTg4NTJjYjc4YSAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3QuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9ndC5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgImludGVs X2d0X3JlcXVlc3RzLmgiCiAjaW5jbHVkZSAiaW50ZWxfbW9jcy5oIgogI2luY2x1ZGUgImludGVs X3JjNi5oIgorI2luY2x1ZGUgImludGVsX3Jwcy5oIgogI2luY2x1ZGUgImludGVsX3VuY29yZS5o IgogI2luY2x1ZGUgImludGVsX3BtLmgiCiAKQEAgLTMyMSw4ICszMjIsNyBAQCB2b2lkIGludGVs X2d0X2NoaXBzZXRfZmx1c2goc3RydWN0IGludGVsX2d0ICpndCkKIAogdm9pZCBpbnRlbF9ndF9k cml2ZXJfcmVnaXN0ZXIoc3RydWN0IGludGVsX2d0ICpndCkKIHsKLQlpZiAoSVNfR0VOKGd0LT5p OTE1LCA1KSkKLQkJaW50ZWxfZ3B1X2lwc19pbml0KGd0LT5pOTE1KTsKKwlpbnRlbF9ycHNfZHJp dmVyX3JlZ2lzdGVyKCZndC0+cnBzKTsKIH0KIAogc3RhdGljIGludCBpbnRlbF9ndF9pbml0X3Nj cmF0Y2goc3RydWN0IGludGVsX2d0ICpndCwgdW5zaWduZWQgaW50IHNpemUpCkBAIC0zODUsNyAr Mzg1LDcgQEAgdm9pZCBpbnRlbF9ndF9kcml2ZXJfcmVtb3ZlKHN0cnVjdCBpbnRlbF9ndCAqZ3Qp CiAKIHZvaWQgaW50ZWxfZ3RfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGludGVsX2d0ICpndCkK IHsKLQlpbnRlbF9ncHVfaXBzX3RlYXJkb3duKCk7CisJaW50ZWxfcnBzX2RyaXZlcl91bnJlZ2lz dGVyKCZndC0+cnBzKTsKIH0KIAogdm9pZCBpbnRlbF9ndF9kcml2ZXJfcmVsZWFzZShzdHJ1Y3Qg aW50ZWxfZ3QgKmd0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf Z3RfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9pcnEuYwppbmRleCAz NGE0ZmI2MjRiZjcuLjk3M2VlN2VkZWQ2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfZ3RfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf Z3RfaXJxLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlICJpbnRlbF9ndC5oIgogI2luY2x1 ZGUgImludGVsX2d0X2lycS5oIgogI2luY2x1ZGUgImludGVsX3VuY29yZS5oIgorI2luY2x1ZGUg ImludGVsX3Jwcy5oIgogCiBzdGF0aWMgdm9pZCBndWNfaXJxX2hhbmRsZXIoc3RydWN0IGludGVs X2d1YyAqZ3VjLCB1MTYgaWlyKQogewpAQCAtNzcsNyArNzgsNyBAQCBnZW4xMV9vdGhlcl9pcnFf aGFuZGxlcihzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCBjb25zdCB1OCBpbnN0YW5jZSwKIAkJcmV0dXJu IGd1Y19pcnFfaGFuZGxlcigmZ3QtPnVjLmd1YywgaWlyKTsKIAogCWlmIChpbnN0YW5jZSA9PSBP VEhFUl9HVFBNX0lOU1RBTkNFKQotCQlyZXR1cm4gZ2VuMTFfcnBzX2lycV9oYW5kbGVyKGd0LCBp aXIpOworCQlyZXR1cm4gZ2VuMTFfcnBzX2lycV9oYW5kbGVyKCZndC0+cnBzLCBpaXIpOwogCiAJ V0FSTl9PTkNFKDEsICJ1bmhhbmRsZWQgb3RoZXIgaW50ZXJydXB0IGluc3RhbmNlPTB4JXgsIGlp cj0weCV4XG4iLAogCQkgIGluc3RhbmNlLCBpaXIpOwpAQCAtMzM2LDcgKzMzNyw3IEBAIHZvaWQg Z2VuOF9ndF9pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCB1MzIgbWFzdGVyX2N0bCwg dTMyIGd0X2lpcls0XSkKIAl9CiAKIAlpZiAobWFzdGVyX2N0bCAmIChHRU44X0dUX1BNX0lSUSB8 IEdFTjhfR1RfR1VDX0lSUSkpIHsKLQkJZ2VuNl9ycHNfaXJxX2hhbmRsZXIoZ3QtPmk5MTUsIGd0 X2lpclsyXSk7CisJCWdlbjZfcnBzX2lycV9oYW5kbGVyKCZndC0+cnBzLCBndF9paXJbMl0pOwog CQlndWNfaXJxX2hhbmRsZXIoJmd0LT51Yy5ndWMsIGd0X2lpclsyXSA+PiAxNik7CiAJfQogfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG0uYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X3BtLmMKaW5kZXggMDZlNzNkNTZjZmNmLi4zMmNh ODcyNjUyMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X3Bt LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG0uYwpAQCAtMTIsOCAr MTIsMTAgQEAKICNpbmNsdWRlICJpbnRlbF9ndC5oIgogI2luY2x1ZGUgImludGVsX2d0X3BtLmgi CiAjaW5jbHVkZSAiaW50ZWxfZ3RfcmVxdWVzdHMuaCIKKyNpbmNsdWRlICJpbnRlbF9sbGMuaCIK ICNpbmNsdWRlICJpbnRlbF9wbS5oIgogI2luY2x1ZGUgImludGVsX3JjNi5oIgorI2luY2x1ZGUg ImludGVsX3Jwcy5oIgogI2luY2x1ZGUgImludGVsX3dha2VyZWYuaCIKIAogc3RhdGljIGludCBf X2d0X3VucGFyayhzdHJ1Y3QgaW50ZWxfd2FrZXJlZiAqd2YpCkBAIC0zOSwxMiArNDEsOCBAQCBz dGF0aWMgaW50IF9fZ3RfdW5wYXJrKHN0cnVjdCBpbnRlbF93YWtlcmVmICp3ZikKIAlndC0+YXdh a2UgPSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldChpOTE1LCBQT1dFUl9ET01BSU5fR1RfSVJRKTsK IAlHRU1fQlVHX09OKCFndC0+YXdha2UpOwogCi0JaW50ZWxfZW5hYmxlX2d0X3Bvd2Vyc2F2ZShp OTE1KTsKLQotCWk5MTVfdXBkYXRlX2dmeF92YWwoaTkxNSk7Ci0JaWYgKElOVEVMX0dFTihpOTE1 KSA+PSA2KQotCQlnZW42X3Jwc19idXN5KGk5MTUpOwotCisJaW50ZWxfcnBzX3VucGFyaygmZ3Qt PnJwcyk7CisJaW50ZWxfbGxjX2VuYWJsZSgmZ3QtPmxsYyk7CiAJaTkxNV9wbXVfZ3RfdW5wYXJr ZWQoaTkxNSk7CiAKIAlpbnRlbF9ndF9xdWV1ZV9oYW5nY2hlY2soZ3QpOwpAQCAtNjUsOCArNjMs OCBAQCBzdGF0aWMgaW50IF9fZ3RfcGFyayhzdHJ1Y3QgaW50ZWxfd2FrZXJlZiAqd2YpCiAKIAlp OTE1X3ZtYV9wYXJrZWQoZ3QpOwogCWk5MTVfcG11X2d0X3BhcmtlZChpOTE1KTsKLQlpZiAoSU5U RUxfR0VOKGk5MTUpID49IDYpCi0JCWdlbjZfcnBzX2lkbGUoaTkxNSk7CisJaW50ZWxfbGxjX2Rp c2FibGUoJmd0LT5sbGMpOworCWludGVsX3Jwc19wYXJrKCZndC0+cnBzKTsKIAogCS8qIEV2ZXJ5 dGhpbmcgc3dpdGNoZWQgb2ZmLCBmbHVzaCBhbnkgcmVzaWR1YWwgaW50ZXJydXB0IGp1c3QgaW4g Y2FzZSAqLwogCWludGVsX3N5bmNocm9uaXplX2lycShpOTE1KTsKQEAgLTk4LDYgKzk2LDcgQEAg dm9pZCBpbnRlbF9ndF9wbV9pbml0KHN0cnVjdCBpbnRlbF9ndCAqZ3QpCiAJICogdXNlci4KIAkg Ki8KIAlpbnRlbF9yYzZfaW5pdCgmZ3QtPnJjNik7CisJaW50ZWxfcnBzX2luaXQoJmd0LT5ycHMp OwogfQogCiBzdGF0aWMgYm9vbCByZXNldF9lbmdpbmVzKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCkBA IC0xNDEsMTAgKzE0MCwzOSBAQCB2b2lkIGludGVsX2d0X3Nhbml0aXplKHN0cnVjdCBpbnRlbF9n dCAqZ3QsIGJvb2wgZm9yY2UpCiAJCQllbmdpbmUtPnJlc2V0LmZpbmlzaChlbmdpbmUpOwogfQog Cit2b2lkIGludGVsX2d0X3BtX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQoreworCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKKwllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKKwor CS8qIFBvd2Vyc2F2aW5nIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGhvc3Qgd2hlbiBpbnNpZGUgYSBW TSAqLworCWlmIChpbnRlbF92Z3B1X2FjdGl2ZShndC0+aTkxNSkpCisJCXJldHVybjsKKworCWlm IChpc19tb2NrX2d0KGd0KSkKKwkJcmV0dXJuOworCisJaW50ZWxfZ3RfcG1fZ2V0KGd0KTsKKwlp bnRlbF9ycHNfZW5hYmxlKCZndC0+cnBzKTsKKwlpbnRlbF9sbGNfZW5hYmxlKCZndC0+bGxjKTsK KworCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGd0LT5pOTE1LCBpZCkgeworCQlpbnRlbF9lbmdp bmVfcG1fZ2V0KGVuZ2luZSk7CisJCWVuZ2luZS0+c2VyaWFsKys7IC8qIGZvcmNlIGtlcm5lbCBj b250ZXh0IHJlbG9hZCAqLworCQlpbnRlbF9lbmdpbmVfcG1fcHV0KGVuZ2luZSk7CisJfQorCisJ aW50ZWxfZ3RfcG1fcHV0KGd0KTsKK30KKwogdm9pZCBpbnRlbF9ndF9wbV9kaXNhYmxlKHN0cnVj dCBpbnRlbF9ndCAqZ3QpCiB7Ci0JaWYgKCFpc19tb2NrX2d0KGd0KSkKLQkJaW50ZWxfc2FuaXRp emVfZ3RfcG93ZXJzYXZlKGd0LT5pOTE1KTsKKwlpZiAoaXNfbW9ja19ndChndCkpCisJCXJldHVy bjsKKworCWludGVsX3JjNl9kaXNhYmxlKCZndC0+cmM2KTsKKwlpbnRlbF9sbGNfZGlzYWJsZSgm Z3QtPmxsYyk7CisJaW50ZWxfcnBzX2Rpc2FibGUoJmd0LT5ycHMpOwogfQogCiB2b2lkIGludGVs X2d0X3BtX2Zpbmkoc3RydWN0IGludGVsX2d0ICpndCkKQEAgLTE2NSw2ICsxOTMsNyBAQCBpbnQg aW50ZWxfZ3RfcmVzdW1lKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCiAJICogYWxsb3dpbmcgdXMgdG8g Zml4dXAgdGhlIHVzZXIgY29udGV4dHMgb24gdGhlaXIgZmlyc3QgcGluLgogCSAqLwogCWludGVs X2d0X3BtX2dldChndCk7CisKIAlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldChndC0+dW5jb3Jl LCBGT1JDRVdBS0VfQUxMKTsKIAlpbnRlbF9yYzZfc2FuaXRpemUoJmd0LT5yYzYpOwogCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9wbS5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG0uaAppbmRleCAwZWQ4N2RhNGJiNjguLmRmNTBmODUz NzQ4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG0uaAor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9wbS5oCkBAIC00MCw2ICs0MCw3 IEBAIHN0YXRpYyBpbmxpbmUgaW50IGludGVsX2d0X3BtX3dhaXRfZm9yX2lkbGUoc3RydWN0IGlu dGVsX2d0ICpndCkKIHZvaWQgaW50ZWxfZ3RfcG1faW5pdF9lYXJseShzdHJ1Y3QgaW50ZWxfZ3Qg Kmd0KTsKIHZvaWQgaW50ZWxfZ3RfcG1faW5pdChzdHJ1Y3QgaW50ZWxfZ3QgKmd0KTsKIHZvaWQg aW50ZWxfZ3RfcG1fZGlzYWJsZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KTsKK3ZvaWQgaW50ZWxfZ3Rf cG1fZW5hYmxlKHN0cnVjdCBpbnRlbF9ndCAqZ3QpOwogdm9pZCBpbnRlbF9ndF9wbV9maW5pKHN0 cnVjdCBpbnRlbF9ndCAqZ3QpOwogCiB2b2lkIGludGVsX2d0X3Nhbml0aXplKHN0cnVjdCBpbnRl bF9ndCAqZ3QsIGJvb2wgZm9yY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfZ3RfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X3R5 cGVzLmgKaW5kZXggOTgwOTczZTY2ZTdmLi5lNGJkMjNlYjgyOTAgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X3R5cGVzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfZ3RfdHlwZXMuaApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImlu dGVsX2xsY190eXBlcy5oIgogI2luY2x1ZGUgImludGVsX3Jlc2V0X3R5cGVzLmgiCiAjaW5jbHVk ZSAiaW50ZWxfcmM2X3R5cGVzLmgiCisjaW5jbHVkZSAiaW50ZWxfcnBzX3R5cGVzLmgiCiAjaW5j bHVkZSAiaW50ZWxfd2FrZXJlZi5oIgogCiBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZTsKQEAgLTgy LDYgKzgzLDcgQEAgc3RydWN0IGludGVsX2d0IHsKIAogCXN0cnVjdCBpbnRlbF9sbGMgbGxjOwog CXN0cnVjdCBpbnRlbF9yYzYgcmM2OworCXN0cnVjdCBpbnRlbF9ycHMgcnBzOwogCiAJa3RpbWVf dCBsYXN0X2luaXRfdGltZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv aW50ZWxfbGxjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9sbGMuYwppbmRleCAz NTA5M2ViNWYyNGUuLmNlYjc4NWI3NWMyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfbGxjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbGxj LmMKQEAgLTQ4LDcgKzQ4LDcgQEAgc3RhdGljIGJvb2wgZ2V0X2lhX2NvbnN0YW50cyhzdHJ1Y3Qg aW50ZWxfbGxjICpsbGMsCiAJCQkgICAgIHN0cnVjdCBpYV9jb25zdGFudHMgKmNvbnN0cykKIHsK IAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGxsY190b19ndChsbGMpLT5pOTE1Owot CXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZpOTE1LT5ndF9wbS5ycHM7CisJc3RydWN0IGludGVs X3JwcyAqcnBzID0gJmxsY190b19ndChsbGMpLT5ycHM7CiAKIAlpZiAocnBzLT5tYXhfZnJlcSA8 PSBycHMtPm1pbl9mcmVxKQogCQlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9ycHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X3Jwcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzBmNTZjNzg2 NDY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBz LmMKQEAgLTAsMCArMSwxODcyIEBACisvKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1J VAorICoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lu Y2x1ZGUgImk5MTVfZHJ2LmgiCisjaW5jbHVkZSAiaW50ZWxfZ3QuaCIKKyNpbmNsdWRlICJpbnRl bF9ndF9pcnEuaCIKKyNpbmNsdWRlICJpbnRlbF9ndF9wbV9pcnEuaCIKKyNpbmNsdWRlICJpbnRl bF9ycHMuaCIKKyNpbmNsdWRlICJpbnRlbF9zaWRlYmFuZC5oIgorI2luY2x1ZGUgIi4uLy4uLy4u L3BsYXRmb3JtL3g4Ni9pbnRlbF9pcHMuaCIKKworLyoKKyAqIExvY2sgcHJvdGVjdGluZyBJUFMg cmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMKKyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhtY2hk ZXZfbG9jayk7CisKK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfZ3QgKnJwc190b19ndChzdHJ1Y3QgaW50 ZWxfcnBzICpycHMpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihycHMsIHN0cnVjdCBpbnRlbF9n dCwgcnBzKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpycHNfdG9faTkx NShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJcmV0dXJuIHJwc190b19ndChycHMpLT5pOTE1 OworfQorCitzdGF0aWMgc3RydWN0IGludGVsX3VuY29yZSAqcnBzX3RvX3VuY29yZShzdHJ1Y3Qg aW50ZWxfcnBzICpycHMpCit7CisJcmV0dXJuIHJwc190b19ndChycHMpLT51bmNvcmU7Cit9CisK K3N0YXRpYyB1MzIgcnBzX3BtX3Nhbml0aXplX21hc2soc3RydWN0IGludGVsX3JwcyAqcnBzLCB1 MzIgbWFzaykKK3sKKwlyZXR1cm4gbWFzayAmIH5ycHMtPnBtX2ludHJtc2tfbWJ6OworfQorCitz dGF0aWMgdTMyIHJwc19wbV9tYXNrKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTggdmFsKQorewor CXUzMiBtYXNrID0gMDsKKworCS8qIFdlIHVzZSBVUF9FSV9FWFBJUkVEIGludGVycnVwdHMgZm9y IGJvdGggdXAvZG93biBpbiBtYW51YWwgbW9kZSAqLworCWlmICh2YWwgPiBycHMtPm1pbl9mcmVx X3NvZnRsaW1pdCkKKwkJbWFzayB8PSAoR0VONl9QTV9SUF9VUF9FSV9FWFBJUkVEIHwKKwkJCSBH RU42X1BNX1JQX0RPV05fVEhSRVNIT0xEIHwKKwkJCSBHRU42X1BNX1JQX0RPV05fVElNRU9VVCk7 CisKKwlpZiAodmFsIDwgcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQpCisJCW1hc2sgfD0gR0VONl9Q TV9SUF9VUF9FSV9FWFBJUkVEIHwgR0VONl9QTV9SUF9VUF9USFJFU0hPTEQ7CisKKwltYXNrICY9 IHJwcy0+cG1fZXZlbnRzOworCisJcmV0dXJuIHJwc19wbV9zYW5pdGl6ZV9tYXNrKHJwcywgfm1h c2spOworfQorCitzdGF0aWMgdm9pZCBycHNfcmVzZXRfZWkoc3RydWN0IGludGVsX3JwcyAqcnBz KQoreworCW1lbXNldCgmcnBzLT5laSwgMCwgc2l6ZW9mKHJwcy0+ZWkpKTsKK30KKworc3RhdGlj IHZvaWQgcnBzX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlz dHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gcnBzX3RvX2d0KHJwcyk7CisKKwlycHNfcmVzZXRfZWkocnBz KTsKKworCWlmIChJU19WQUxMRVlWSUVXKGd0LT5pOTE1KSkKKwkJLyogV2FHc3ZSQzBSZXNpZGVu Y3lNZXRob2Q6dmx2ICovCisJCXJwcy0+cG1fZXZlbnRzID0gR0VONl9QTV9SUF9VUF9FSV9FWFBJ UkVEOworCWVsc2UKKwkJcnBzLT5wbV9ldmVudHMgPSAoR0VONl9QTV9SUF9VUF9USFJFU0hPTEQg fAorCQkJCSAgR0VONl9QTV9SUF9ET1dOX1RIUkVTSE9MRCB8CisJCQkJICBHRU42X1BNX1JQX0RP V05fVElNRU9VVCk7CisKKwlzcGluX2xvY2tfaXJxKCZndC0+aXJxX2xvY2spOworCWdlbjZfZ3Rf cG1fZW5hYmxlX2lycShndCwgcnBzLT5wbV9ldmVudHMpOworCXNwaW5fdW5sb2NrX2lycSgmZ3Qt PmlycV9sb2NrKTsKKworCWludGVsX3VuY29yZV93cml0ZShndC0+dW5jb3JlLCBHRU42X1BNSU5U Uk1TSywKKwkJCSAgIHJwc19wbV9tYXNrKHJwcywgcnBzLT5jdXJfZnJlcSkpOworfQorCitzdGF0 aWMgdm9pZCBnZW42X3Jwc19yZXNldF9pbnRlcnJ1cHRzKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykK K3sKKwlnZW42X2d0X3BtX3Jlc2V0X2lpcihycHNfdG9fZ3QocnBzKSwgR0VONl9QTV9SUFNfRVZF TlRTKTsKK30KKworc3RhdGljIHZvaWQgZ2VuMTFfcnBzX3Jlc2V0X2ludGVycnVwdHMoc3RydWN0 IGludGVsX3JwcyAqcnBzKQoreworCXdoaWxlIChnZW4xMV9ndF9yZXNldF9vbmVfaWlyKHJwc190 b19ndChycHMpLCAwLCBHRU4xMV9HVFBNKSkKKwkJOworfQorCitzdGF0aWMgdm9pZCBycHNfcmVz ZXRfaW50ZXJydXB0cyhzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGludGVsX2d0 ICpndCA9IHJwc190b19ndChycHMpOworCisJc3Bpbl9sb2NrX2lycSgmZ3QtPmlycV9sb2NrKTsK KwlpZiAoSU5URUxfR0VOKGd0LT5pOTE1KSA+PSAxMSkKKwkJZ2VuMTFfcnBzX3Jlc2V0X2ludGVy cnVwdHMocnBzKTsKKwllbHNlCisJCWdlbjZfcnBzX3Jlc2V0X2ludGVycnVwdHMocnBzKTsKKwor CXJwcy0+cG1faWlyID0gMDsKKwlzcGluX3VubG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Cit9CisK K3N0YXRpYyB2b2lkIHJwc19kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IGludGVsX3JwcyAqcnBz KQoreworCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBycHNfdG9fZ3QocnBzKTsKKworCXJwcy0+cG1f ZXZlbnRzID0gMDsKKworCWludGVsX3VuY29yZV93cml0ZShndC0+dW5jb3JlLCBHRU42X1BNSU5U Uk1TSywKKwkJCSAgIHJwc19wbV9zYW5pdGl6ZV9tYXNrKHJwcywgfjB1KSk7CisKKwlzcGluX2xv Y2tfaXJxKCZndC0+aXJxX2xvY2spOworCWdlbjZfZ3RfcG1fZGlzYWJsZV9pcnEoZ3QsIEdFTjZf UE1fUlBTX0VWRU5UUyk7CisJc3Bpbl91bmxvY2tfaXJxKCZndC0+aXJxX2xvY2spOworCisJaW50 ZWxfc3luY2hyb25pemVfaXJxKGd0LT5pOTE1KTsKKworCS8qCisJICogTm93IHRoYXQgd2Ugd2ls bCBub3QgYmUgZ2VuZXJhdGluZyBhbnkgbW9yZSB3b3JrLCBmbHVzaCBhbnkKKwkgKiBvdXRzdGFu ZGluZyB0YXNrcy4gQXMgd2UgYXJlIGNhbGxlZCBvbiB0aGUgUlBTIGlkbGUgcGF0aCwKKwkgKiB3 ZSB3aWxsIHJlc2V0IHRoZSBHUFUgdG8gbWluaW11bSBmcmVxdWVuY2llcywgc28gdGhlIGN1cnJl bnQKKwkgKiBzdGF0ZSBvZiB0aGUgd29ya2VyIGNhbiBiZSBkaXNjYXJkZWQuCisJICovCisJY2Fu Y2VsX3dvcmtfc3luYygmcnBzLT53b3JrKTsKKworCXJwc19yZXNldF9pbnRlcnJ1cHRzKHJwcyk7 Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3BhcmFtcyB7CisJdTE2IGk7CisJdTE2IHQ7CisJ dTE2IG07CisJdTE2IGM7Cit9IGNwYXJhbXNbXSA9IHsKKwl7IDEsIDEzMzMsIDMwMSwgMjg2NjQg fSwKKwl7IDEsIDEwNjYsIDI5NCwgMjQ0NjAgfSwKKwl7IDEsIDgwMCwgMjk0LCAyNTE5MiB9LAor CXsgMCwgMTMzMywgMjc2LCAyNzYwNSB9LAorCXsgMCwgMTA2NiwgMjc2LCAyNzYwNSB9LAorCXsg MCwgODAwLCAyMzEsIDIzNzg0IH0sCit9OworCitzdGF0aWMgdm9pZCBnZW41X3Jwc19pbml0KHN0 cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9 IHJwc190b19pOTE1KHJwcyk7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3Rv X3VuY29yZShycHMpOworCXU4IGZtYXgsIGZtaW4sIGZzdGFydDsKKwl1MzIgcmd2bW9kZWN0bDsK KwlpbnQgY19tLCBpOworCisJaWYgKGk5MTUtPmZzYl9mcmVxIDw9IDMyMDApCisJCWNfbSA9IDA7 CisJZWxzZSBpZiAoaTkxNS0+ZnNiX2ZyZXEgPD0gNDgwMCkKKwkJY19tID0gMTsKKwllbHNlCisJ CWNfbSA9IDI7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjcGFyYW1zKTsgaSsrKSB7 CisJCWlmIChjcGFyYW1zW2ldLmkgPT0gY19tICYmIGNwYXJhbXNbaV0udCA9PSBpOTE1LT5tZW1f ZnJlcSkgeworCQkJcnBzLT5pcHMubSA9IGNwYXJhbXNbaV0ubTsKKwkJCXJwcy0+aXBzLmMgPSBj cGFyYW1zW2ldLmM7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJndm1vZGVjdGwgPSBpbnRlbF91 bmNvcmVfcmVhZCh1bmNvcmUsIE1FTU1PREVDVEwpOworCisJLyogU2V0IHVwIG1pbiwgbWF4LCBh bmQgY3VyIGZvciBpbnRlcnJ1cHQgaGFuZGxpbmcgKi8KKwlmbWF4ID0gKHJndm1vZGVjdGwgJiBN RU1NT0RFX0ZNQVhfTUFTSykgPj4gTUVNTU9ERV9GTUFYX1NISUZUOworCWZtaW4gPSAocmd2bW9k ZWN0bCAmIE1FTU1PREVfRk1JTl9NQVNLKTsKKwlmc3RhcnQgPSAocmd2bW9kZWN0bCAmIE1FTU1P REVfRlNUQVJUX01BU0spID4+CisJCU1FTU1PREVfRlNUQVJUX1NISUZUOworCURSTV9ERUJVR19E UklWRVIoImZtYXg6ICVkLCBmbWluOiAlZCwgZnN0YXJ0OiAlZFxuIiwKKwkJCSBmbWF4LCBmbWlu LCBmc3RhcnQpOworCisJcnBzLT5taW5fZnJlcSA9IC1mc3RhcnQ7CisJcnBzLT5tYXhfZnJlcSA9 IC1mbWluOworCisJcnBzLT5pZGxlX2ZyZXEgPSBycHMtPm1pbl9mcmVxOworCXJwcy0+Y3VyX2Zy ZXEgPSBycHMtPmlkbGVfZnJlcTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcKK19faXBzX2No aXBzZXRfdmFsKHN0cnVjdCBpbnRlbF9pcHMgKmlwcykKK3sKKwlzdHJ1Y3QgaW50ZWxfdW5jb3Jl ICp1bmNvcmUgPQorCQlycHNfdG9fdW5jb3JlKGNvbnRhaW5lcl9vZihpcHMsIHN0cnVjdCBpbnRl bF9ycHMsIGlwcykpOworCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllc190b19tc2VjcyhqaWZm aWVzKSwgZHQ7CisJdW5zaWduZWQgbG9uZyByZXN1bHQ7CisJdTY0IHRvdGFsLCBkZWx0YTsKKwor CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm1jaGRldl9sb2NrKTsKKworCS8qCisJICogUHJldmVudCBk aXZpc2lvbi1ieS16ZXJvIGlmIHdlIGFyZSBhc2tpbmcgdG9vIGZhc3QuCisJICogQWxzbywgd2Ug ZG9uJ3QgZ2V0IGludGVyZXN0aW5nIHJlc3VsdHMgaWYgd2UgYXJlIHBvbGxpbmcKKwkgKiBmYXN0 ZXIgdGhhbiBvbmNlIGluIDEwbXMsIHNvIGp1c3QgcmV0dXJuIHRoZSBzYXZlZCB2YWx1ZQorCSAq IGluIHN1Y2ggY2FzZXMuCisJICovCisJZHQgPSBub3cgLSBpcHMtPmxhc3RfdGltZTE7CisJaWYg KGR0IDw9IDEwKQorCQlyZXR1cm4gaXBzLT5jaGlwc2V0X3Bvd2VyOworCisJLyogRklYTUU6IGhh bmRsZSBwZXItY291bnRlciBvdmVyZmxvdyAqLworCXRvdGFsID0gaW50ZWxfdW5jb3JlX3JlYWQo dW5jb3JlLCBETUlFQyk7CisJdG90YWwgKz0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBERFJF Qyk7CisJdG90YWwgKz0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBDU0lFQyk7CisKKwlkZWx0 YSA9IHRvdGFsIC0gaXBzLT5sYXN0X2NvdW50MTsKKworCXJlc3VsdCA9IGRpdl91NjQoZGl2X3U2 NChpcHMtPm0gKiBkZWx0YSwgZHQpICsgaXBzLT5jLCAxMCk7CisKKwlpcHMtPmxhc3RfY291bnQx ID0gdG90YWw7CisJaXBzLT5sYXN0X3RpbWUxID0gbm93OworCisJaXBzLT5jaGlwc2V0X3Bvd2Vy ID0gcmVzdWx0OworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcg aXBzX21jaF92YWwoc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlKQoreworCXVuc2lnbmVkIGlu dCBtLCB4LCBiOworCXUzMiB0c2ZzOworCisJdHNmcyA9IGludGVsX3VuY29yZV9yZWFkKHVuY29y ZSwgVFNGUyk7CisJeCA9IGludGVsX3VuY29yZV9yZWFkOCh1bmNvcmUsIFRSMSk7CisKKwliID0g dHNmcyAmIFRTRlNfSU5UUl9NQVNLOworCW0gPSAodHNmcyAmIFRTRlNfU0xPUEVfTUFTSykgPj4g VFNGU19TTE9QRV9TSElGVDsKKworCXJldHVybiBtICogeCAvIDEyNyAtIGI7Cit9CisKK3N0YXRp YyBpbnQgX3B4dmlkX3RvX3ZkKHU4IHB4dmlkKQoreworCWlmIChweHZpZCA9PSAwKQorCQlyZXR1 cm4gMDsKKworCWlmIChweHZpZCA+PSA4ICYmIHB4dmlkIDwgMzEpCisJCXB4dmlkID0gMzE7CisK KwlyZXR1cm4gKHB4dmlkICsgMikgKiAxMjU7Cit9CisKK3N0YXRpYyB1MzIgcHZpZF90b19leHR2 aWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHU4IHB4dmlkKQoreworCWNvbnN0IGlu dCB2ZCA9IF9weHZpZF90b192ZChweHZpZCk7CisKKwlpZiAoSU5URUxfSU5GTyhpOTE1KS0+aXNf bW9iaWxlKQorCQlyZXR1cm4gbWF4KHZkIC0gMTEyNSwgMCk7CisKKwlyZXR1cm4gdmQ7Cit9CisK K3N0YXRpYyB2b2lkIF9fZ2VuNV9pcHNfdXBkYXRlKHN0cnVjdCBpbnRlbF9pcHMgKmlwcykKK3sK KwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPQorCQlycHNfdG9fdW5jb3JlKGNvbnRhaW5l cl9vZihpcHMsIHN0cnVjdCBpbnRlbF9ycHMsIGlwcykpOworCXU2NCBub3csIGRlbHRhLCBkdDsK Kwl1MzIgY291bnQ7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZtY2hkZXZfbG9jayk7CisKKwlu b3cgPSBrdGltZV9nZXRfcmF3X25zKCk7CisJZHQgPSBub3cgLSBpcHMtPmxhc3RfdGltZTI7CisJ ZG9fZGl2KGR0LCBOU0VDX1BFUl9NU0VDKTsKKworCS8qIERvbid0IGRpdmlkZSBieSAwICovCisJ aWYgKGR0IDw9IDEwKQorCQlyZXR1cm47CisKKwljb3VudCA9IGludGVsX3VuY29yZV9yZWFkKHVu Y29yZSwgR0ZYRUMpOworCWRlbHRhID0gY291bnQgLSBpcHMtPmxhc3RfY291bnQyOworCisJaXBz LT5sYXN0X2NvdW50MiA9IGNvdW50OworCWlwcy0+bGFzdF90aW1lMiA9IG5vdzsKKworCS8qIE1v cmUgbWFnaWMgY29uc3RhbnRzLi4uICovCisJaXBzLT5nZnhfcG93ZXIgPSBkaXZfdTY0KGRlbHRh ICogMTE4MSwgZHQgKiAxMCk7Cit9CisKK3N0YXRpYyB2b2lkIGdlbjVfcnBzX3VwZGF0ZShzdHJ1 Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3Bpbl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOworCV9f Z2VuNV9pcHNfdXBkYXRlKCZycHMtPmlwcyk7CisJc3Bpbl91bmxvY2tfaXJxKCZtY2hkZXZfbG9j ayk7Cit9CisKK3N0YXRpYyBib29sIGdlbjVfcnBzX3NldChzdHJ1Y3QgaW50ZWxfcnBzICpycHMs IHU4IHZhbCkKK3sKKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBycHNfdG9fdW5jb3Jl KHJwcyk7CisJdTE2IHJndnN3Y3RsOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbWNoZGV2X2xv Y2spOworCisJcmd2c3djdGwgPSBpbnRlbF91bmNvcmVfcmVhZDE2KHVuY29yZSwgTUVNU1dDVEwp OworCWlmIChyZ3Zzd2N0bCAmIE1FTUNUTF9DTURfU1RTKSB7CisJCURSTV9ERUJVRygiZ3B1IGJ1 c3ksIFJDUyBjaGFuZ2UgcmVqZWN0ZWRcbiIpOworCQlyZXR1cm4gZmFsc2U7IC8qIHN0aWxsIGJ1 c3kgd2l0aCBhbm90aGVyIGNvbW1hbmQgKi8KKwl9CisKKwl2YWwgPSAtdmFsOworCisJcmd2c3dj dGwgPQorCQkoTUVNQ1RMX0NNRF9DSEZSRVEgPDwgTUVNQ1RMX0NNRF9TSElGVCkgfAorCQkodmFs IDw8IE1FTUNUTF9GUkVRX1NISUZUKSB8CisJCU1FTUNUTF9TRkNBVk07CisJaW50ZWxfdW5jb3Jl X3dyaXRlMTYodW5jb3JlLCBNRU1TV0NUTCwgcmd2c3djdGwpOworCWludGVsX3VuY29yZV9wb3N0 aW5nX3JlYWQxNih1bmNvcmUsIE1FTVNXQ1RMKTsKKworCXJndnN3Y3RsIHw9IE1FTUNUTF9DTURf U1RTOworCWludGVsX3VuY29yZV93cml0ZTE2KHVuY29yZSwgTUVNU1dDVEwsIHJndnN3Y3RsKTsK KworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpbnRlbF9weGZyZXEo dTMyIHZpZGZyZXEpCit7CisJaW50IGRpdiA9ICh2aWRmcmVxICYgMHgzZjAwMDApID4+IDE2Owor CWludCBwb3N0ID0gKHZpZGZyZXEgJiAweDMwMDApID4+IDEyOworCWludCBwcmUgPSAodmlkZnJl cSAmIDB4Nyk7CisKKwlpZiAoIXByZSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gZGl2ICogMTMz MzMzIC8gKHByZSA8PCBwb3N0KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2Vtb24o c3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlKQoreworCXU4IHB4d1sxNl07CisJaW50IGk7CisK KwkvKiBEaXNhYmxlIHRvIHByb2dyYW0gKi8KKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBF Q1IsIDApOworCWludGVsX3VuY29yZV9wb3N0aW5nX3JlYWQodW5jb3JlLCBFQ1IpOworCisJLyog UHJvZ3JhbSBlbmVyZ3kgd2VpZ2h0cyBmb3IgdmFyaW91cyBldmVudHMgKi8KKwlpbnRlbF91bmNv cmVfd3JpdGUodW5jb3JlLCBTREVXLCAweDE1MDQwZDAwKTsKKwlpbnRlbF91bmNvcmVfd3JpdGUo dW5jb3JlLCBDU0lFVzAsIDB4MDA3ZjAwMDApOworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUs IENTSUVXMSwgMHgxZTIyMDAwNCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgQ1NJRVcy LCAweDA0MDAwMDA0KTsKKworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCWludGVsX3VuY29y ZV93cml0ZSh1bmNvcmUsIFBFVyhpKSwgMCk7CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJ aW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgREVXKGkpLCAwKTsKKworCS8qIFByb2dyYW0gUC1z dGF0ZSB3ZWlnaHRzIHRvIGFjY291bnQgZm9yIGZyZXF1ZW5jeSBwb3dlciBhZGp1c3RtZW50ICov CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJdTMyIHB4dmlkZnJlcSA9IGludGVsX3Vu Y29yZV9yZWFkKHVuY29yZSwgUFhWRlJFUShpKSk7CisJCXVuc2lnbmVkIGludCBmcmVxID0gaW50 ZWxfcHhmcmVxKHB4dmlkZnJlcSk7CisJCXVuc2lnbmVkIGludCB2aWQgPQorCQkJKHB4dmlkZnJl cSAmIFBYVkZSRVFfUFhfTUFTSykgPj4gUFhWRlJFUV9QWF9TSElGVDsKKwkJdW5zaWduZWQgaW50 IHZhbDsKKworCQl2YWwgPSB2aWQgKiB2aWQgKiBmcmVxIC8gMTAwMCAqIDI1NTsKKwkJdmFsIC89 IDEyNyAqIDEyNyAqIDkwMDsKKworCQlweHdbaV0gPSB2YWw7CisJfQorCS8qIFJlbmRlciBzdGFu ZGJ5IHN0YXRlcyBnZXQgMCB3ZWlnaHQgKi8KKwlweHdbMTRdID0gMDsKKwlweHdbMTVdID0gMDsK KworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29y ZSwgUFhXKGkpLAorCQkJCSAgIHB4d1tpICogNCArIDBdIDw8IDI0IHwKKwkJCQkgICBweHdbaSAq IDQgKyAxXSA8PCAxNiB8CisJCQkJICAgcHh3W2kgKiA0ICsgMl0gPDwgIDggfAorCQkJCSAgIHB4 d1tpICogNCArIDNdIDw8ICAwKTsKKwl9CisKKwkvKiBBZGp1c3QgbWFnaWMgcmVncyB0byBtYWdp YyB2YWx1ZXMgKG1vcmUgZXhwZXJpbWVudGFsIHJlc3VsdHMpICovCisJaW50ZWxfdW5jb3JlX3dy aXRlKHVuY29yZSwgT0dXMCwgMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgT0dXMSwg MCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgRUcwLCAweDAwMDA3ZjAwKTsKKwlpbnRl bF91bmNvcmVfd3JpdGUodW5jb3JlLCBFRzEsIDB4MDAwMDAwMGUpOworCWludGVsX3VuY29yZV93 cml0ZSh1bmNvcmUsIEVHMiwgMHgwMDBlMDAwMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29y ZSwgRUczLCAweDY4MDAwMzAwKTsKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBFRzQsIDB4 NDIwMDAwMDApOworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEVHNSwgMHgwMDE0MDAzMSk7 CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgRUc2LCAwKTsKKwlpbnRlbF91bmNvcmVfd3Jp dGUodW5jb3JlLCBFRzcsIDApOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJaW50ZWxf dW5jb3JlX3dyaXRlKHVuY29yZSwgUFhXTChpKSwgMCk7CisKKwkvKiBFbmFibGUgUE1PTiArIHNl bGVjdCBldmVudHMgKi8KKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBFQ1IsIDB4ODAwMDAw MTkpOworCisJcmV0dXJuIGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgTENGVVNFMDIpICYgTENG VVNFX0hJVl9NQVNLOworfQorCitzdGF0aWMgYm9vbCBnZW41X3Jwc19lbmFibGUoc3RydWN0IGlu dGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJwc190b191 bmNvcmUocnBzKTsKKwl1OCBmc3RhcnQsIHZzdGFydDsKKwl1MzIgcmd2bW9kZWN0bDsKKworCXNw aW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKKworCXJndm1vZGVjdGwgPSBpbnRlbF91bmNvcmVf cmVhZCh1bmNvcmUsIE1FTU1PREVDVEwpOworCisJLyogRW5hYmxlIHRlbXAgcmVwb3J0aW5nICov CisJaW50ZWxfdW5jb3JlX3dyaXRlMTYodW5jb3JlLCBQTU1JU0MsCisJCQkgICAgIGludGVsX3Vu Y29yZV9yZWFkMTYodW5jb3JlLCBQTU1JU0MpIHwgTUNQUENFX0VOKTsKKwlpbnRlbF91bmNvcmVf d3JpdGUxNih1bmNvcmUsIFRTQzEsCisJCQkgICAgIGludGVsX3VuY29yZV9yZWFkMTYodW5jb3Jl LCBUU0MxKSB8IFRTRSk7CisKKwkvKiAxMDBtcyBSQyBldmFsdWF0aW9uIGludGVydmFscyAqLwor CWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFJDVVBFSSwgMTAwMDAwKTsKKwlpbnRlbF91bmNv cmVfd3JpdGUodW5jb3JlLCBSQ0RORUksIDEwMDAwMCk7CisKKwkvKiBTZXQgbWF4L21pbiB0aHJl c2hvbGRzIHRvIDkwbXMgYW5kIDgwbXMgcmVzcGVjdGl2ZWx5ICovCisJaW50ZWxfdW5jb3JlX3dy aXRlKHVuY29yZSwgUkNCTUFYQVZHLCA5MDAwMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29y ZSwgUkNCTUlOQVZHLCA4MDAwMCk7CisKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBNRU1J SFlTVCwgMSk7CisKKwkvKiBTZXQgdXAgbWluLCBtYXgsIGFuZCBjdXIgZm9yIGludGVycnVwdCBo YW5kbGluZyAqLworCWZzdGFydCA9IChyZ3Ztb2RlY3RsICYgTUVNTU9ERV9GU1RBUlRfTUFTSykg Pj4KKwkJTUVNTU9ERV9GU1RBUlRfU0hJRlQ7CisKKwl2c3RhcnQgPSAoaW50ZWxfdW5jb3JlX3Jl YWQodW5jb3JlLCBQWFZGUkVRKGZzdGFydCkpICYKKwkJICBQWFZGUkVRX1BYX01BU0spID4+IFBY VkZSRVFfUFhfU0hJRlQ7CisKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLAorCQkJICAgTUVN SU5UUkVOLAorCQkJICAgTUVNSU5UX0NYX1NVUFJfRU4gfCBNRU1JTlRfRVZBTF9DSEdfRU4pOwor CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgVklEU1RBUlQsIHZzdGFydCk7CisJaW50ZWxf dW5jb3JlX3Bvc3RpbmdfcmVhZCh1bmNvcmUsIFZJRFNUQVJUKTsKKworCXJndm1vZGVjdGwgfD0g TUVNTU9ERV9TV01PREVfRU47CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgTUVNTU9ERUNU TCwgcmd2bW9kZWN0bCk7CisKKwlpZiAod2FpdF9mb3JfYXRvbWljKChpbnRlbF91bmNvcmVfcmVh ZCh1bmNvcmUsIE1FTVNXQ1RMKSAmCisJCQkgICAgIE1FTUNUTF9DTURfU1RTKSA9PSAwLCAxMCkp CisJCURSTV9FUlJPUigic3R1Y2sgdHJ5aW5nIHRvIGNoYW5nZSBwZXJmIG1vZGVcbiIpOworCW1k ZWxheSgxKTsKKworCWdlbjVfcnBzX3NldChycHMsIHJwcy0+Y3VyX2ZyZXEpOworCisJcnBzLT5p cHMubGFzdF9jb3VudDEgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIERNSUVDKTsKKwlycHMt Pmlwcy5sYXN0X2NvdW50MSArPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEREUkVDKTsKKwly cHMtPmlwcy5sYXN0X2NvdW50MSArPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIENTSUVDKTsK KwlycHMtPmlwcy5sYXN0X3RpbWUxID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzKTsKKworCXJw cy0+aXBzLmxhc3RfY291bnQyID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBHRlhFQyk7CisJ cnBzLT5pcHMubGFzdF90aW1lMiA9IGt0aW1lX2dldF9yYXdfbnMoKTsKKworCXNwaW5fdW5sb2Nr X2lycSgmbWNoZGV2X2xvY2spOworCisJcnBzLT5pcHMuY29yciA9IGluaXRfZW1vbih1bmNvcmUp OworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGdlbjVfcnBzX2Rpc2FibGUoc3Ry dWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJw c190b191bmNvcmUocnBzKTsKKwl1MTYgcmd2c3djdGw7CisKKwlzcGluX2xvY2tfaXJxKCZtY2hk ZXZfbG9jayk7CisKKwlyZ3Zzd2N0bCA9IGludGVsX3VuY29yZV9yZWFkMTYodW5jb3JlLCBNRU1T V0NUTCk7CisKKwkvKiBBY2sgaW50ZXJydXB0cywgZGlzYWJsZSBFRkMgaW50ZXJydXB0ICovCisJ aW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgTUVNSU5UUkVOLAorCQkJICAgaW50ZWxfdW5jb3Jl X3JlYWQodW5jb3JlLCBNRU1JTlRSRU4pICYKKwkJCSAgIH5NRU1JTlRfRVZBTF9DSEdfRU4pOwor CWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIE1FTUlOVFJTVFMsIE1FTUlOVF9FVkFMX0NIRyk7 CisJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgREVJRVIsCisJCQkgICBpbnRlbF91bmNvcmVf cmVhZCh1bmNvcmUsIERFSUVSKSAmIH5ERV9QQ1VfRVZFTlQpOworCWludGVsX3VuY29yZV93cml0 ZSh1bmNvcmUsIERFSUlSLCBERV9QQ1VfRVZFTlQpOworCWludGVsX3VuY29yZV93cml0ZSh1bmNv cmUsIERFSU1SLAorCQkJICAgaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBERUlNUikgfCBERV9Q Q1VfRVZFTlQpOworCisJLyogR28gYmFjayB0byB0aGUgc3RhcnRpbmcgZnJlcXVlbmN5ICovCisJ Z2VuNV9ycHNfc2V0KHJwcywgcnBzLT5pZGxlX2ZyZXEpOworCW1kZWxheSgxKTsKKwlyZ3Zzd2N0 bCB8PSBNRU1DVExfQ01EX1NUUzsKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBNRU1TV0NU TCwgcmd2c3djdGwpOworCW1kZWxheSgxKTsKKworCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xv Y2spOworfQorCitzdGF0aWMgdTMyIHJwc19saW1pdHMoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1 OCB2YWwpCit7CisJdTMyIGxpbWl0czsKKworCS8qCisJICogT25seSBzZXQgdGhlIGRvd24gbGlt aXQgd2hlbiB3ZSd2ZSByZWFjaGVkIHRoZSBsb3dlc3QgbGV2ZWwgdG8gYXZvaWQKKwkgKiBnZXR0 aW5nIG1vcmUgaW50ZXJydXB0cywgb3RoZXJ3aXNlIGxlYXZlIHRoaXMgY2xlYXIuIFRoaXMgcHJl dmVudHMgYQorCSAqIHJhY2UgaW4gdGhlIGh3IHdoZW4gY29taW5nIG91dCBvZiByYzY6IFRoZXJl J3MgYSB0aW55IHdpbmRvdyB3aGVyZQorCSAqIHRoZSBodyBydW5zIGF0IHRoZSBtaW5pbWFsIGNs b2NrIGJlZm9yZSBzZWxlY3RpbmcgdGhlIGRlc2lyZWQKKwkgKiBmcmVxdWVuY3ksIGlmIHRoZSBk b3duIHRocmVzaG9sZCBleHBpcmVzIGluIHRoYXQgd2luZG93IHdlIHdpbGwgbm90CisJICogcmVj ZWl2ZSBhIGRvd24gaW50ZXJydXB0LgorCSAqLworCWlmIChJTlRFTF9HRU4ocnBzX3RvX2k5MTUo cnBzKSkgPj0gOSkgeworCQlsaW1pdHMgPSBycHMtPm1heF9mcmVxX3NvZnRsaW1pdCA8PCAyMzsK KwkJaWYgKHZhbCA8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkKKwkJCWxpbWl0cyB8PSBycHMt Pm1pbl9mcmVxX3NvZnRsaW1pdCA8PCAxNDsKKwl9IGVsc2UgeworCQlsaW1pdHMgPSBycHMtPm1h eF9mcmVxX3NvZnRsaW1pdCA8PCAyNDsKKwkJaWYgKHZhbCA8PSBycHMtPm1pbl9mcmVxX3NvZnRs aW1pdCkKKwkJCWxpbWl0cyB8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCA8PCAxNjsKKwl9CisK KwlyZXR1cm4gbGltaXRzOworfQorCitzdGF0aWMgdm9pZCBycHNfc2V0X3Bvd2VyKHN0cnVjdCBp bnRlbF9ycHMgKnJwcywgaW50IG5ld19wb3dlcikKK3sKKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1 bmNvcmUgPSBycHNfdG9fdW5jb3JlKHJwcyk7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUgPSBycHNfdG9faTkxNShycHMpOworCXUzMiB0aHJlc2hvbGRfdXAgPSAwLCB0aHJlc2hvbGRf ZG93biA9IDA7IC8qIGluICUgKi8KKwl1MzIgZWlfdXAgPSAwLCBlaV9kb3duID0gMDsKKworCWxv Y2tkZXBfYXNzZXJ0X2hlbGQoJnJwcy0+cG93ZXIubXV0ZXgpOworCisJaWYgKG5ld19wb3dlciA9 PSBycHMtPnBvd2VyLm1vZGUpCisJCXJldHVybjsKKworCS8qIE5vdGUgdGhlIHVuaXRzIGhlcmUg YXJlIG5vdCBleGFjdGx5IDF1cywgYnV0IDEyODBucy4gKi8KKwlzd2l0Y2ggKG5ld19wb3dlcikg eworCWNhc2UgTE9XX1BPV0VSOgorCQkvKiBVcGNsb2NrIGlmIG1vcmUgdGhhbiA5NSUgYnVzeSBv dmVyIDE2bXMgKi8KKwkJZWlfdXAgPSAxNjAwMDsKKwkJdGhyZXNob2xkX3VwID0gOTU7CisKKwkJ LyogRG93bmNsb2NrIGlmIGxlc3MgdGhhbiA4NSUgYnVzeSBvdmVyIDMybXMgKi8KKwkJZWlfZG93 biA9IDMyMDAwOworCQl0aHJlc2hvbGRfZG93biA9IDg1OworCQlicmVhazsKKworCWNhc2UgQkVU V0VFTjoKKwkJLyogVXBjbG9jayBpZiBtb3JlIHRoYW4gOTAlIGJ1c3kgb3ZlciAxM21zICovCisJ CWVpX3VwID0gMTMwMDA7CisJCXRocmVzaG9sZF91cCA9IDkwOworCisJCS8qIERvd25jbG9jayBp ZiBsZXNzIHRoYW4gNzUlIGJ1c3kgb3ZlciAzMm1zICovCisJCWVpX2Rvd24gPSAzMjAwMDsKKwkJ dGhyZXNob2xkX2Rvd24gPSA3NTsKKwkJYnJlYWs7CisKKwljYXNlIEhJR0hfUE9XRVI6CisJCS8q IFVwY2xvY2sgaWYgbW9yZSB0aGFuIDg1JSBidXN5IG92ZXIgMTBtcyAqLworCQllaV91cCA9IDEw MDAwOworCQl0aHJlc2hvbGRfdXAgPSA4NTsKKworCQkvKiBEb3duY2xvY2sgaWYgbGVzcyB0aGFu IDYwJSBidXN5IG92ZXIgMzJtcyAqLworCQllaV9kb3duID0gMzIwMDA7CisJCXRocmVzaG9sZF9k b3duID0gNjA7CisJCWJyZWFrOworCX0KKworCS8qIFdoZW4gYnl0IGNhbiBzdXJ2aXZlIHdpdGhv dXQgc3lzdGVtIGhhbmcgd2l0aCBkeW5hbWljCisJICogc3cgZnJlcSBhZGp1c3RtZW50cywgdGhp cyByZXN0cmljdGlvbiBjYW4gYmUgbGlmdGVkLgorCSAqLworCWlmIChJU19WQUxMRVlWSUVXKGk5 MTUpKQorCQlnb3RvIHNraXBfaHdfd3JpdGU7CisKKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3Jl LCBHRU42X1JQX1VQX0VJLAorCQkJICAgR1RfSU5URVJWQUxfRlJPTV9VUyhpOTE1LCBlaV91cCkp OworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjZfUlBfVVBfVEhSRVNIT0xELAorCQkJ ICAgR1RfSU5URVJWQUxfRlJPTV9VUyhpOTE1LAorCQkJCQkgICAgICAgZWlfdXAgKiB0aHJlc2hv bGRfdXAgLyAxMDApKTsKKworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjZfUlBfRE9X Tl9FSSwKKwkJCSAgIEdUX0lOVEVSVkFMX0ZST01fVVMoaTkxNSwgZWlfZG93bikpOworCWludGVs X3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjZfUlBfRE9XTl9USFJFU0hPTEQsCisJCQkgICBHVF9J TlRFUlZBTF9GUk9NX1VTKGk5MTUsCisJCQkJCSAgICAgICBlaV9kb3duICogdGhyZXNob2xkX2Rv d24gLyAxMDApKTsKKworCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjZfUlBfQ09OVFJP TCwKKwkJCSAgIChJTlRFTF9HRU4oaTkxNSkgPiA5ID8gMCA6IEdFTjZfUlBfTUVESUFfVFVSQk8p IHwKKwkJCSAgIEdFTjZfUlBfTUVESUFfSFdfTk9STUFMX01PREUgfAorCQkJICAgR0VONl9SUF9N RURJQV9JU19HRlggfAorCQkJICAgR0VONl9SUF9FTkFCTEUgfAorCQkJICAgR0VONl9SUF9VUF9C VVNZX0FWRyB8CisJCQkgICBHRU42X1JQX0RPV05fSURMRV9BVkcpOworCitza2lwX2h3X3dyaXRl OgorCXJwcy0+cG93ZXIubW9kZSA9IG5ld19wb3dlcjsKKwlycHMtPnBvd2VyLnVwX3RocmVzaG9s ZCA9IHRocmVzaG9sZF91cDsKKwlycHMtPnBvd2VyLmRvd25fdGhyZXNob2xkID0gdGhyZXNob2xk X2Rvd247Cit9CisKK3N0YXRpYyB2b2lkIGdlbjZfcnBzX3NldF90aHJlc2hvbGRzKHN0cnVjdCBp bnRlbF9ycHMgKnJwcywgdTggdmFsKQoreworCWludCBuZXdfcG93ZXI7CisKKwluZXdfcG93ZXIg PSBycHMtPnBvd2VyLm1vZGU7CisJc3dpdGNoIChycHMtPnBvd2VyLm1vZGUpIHsKKwljYXNlIExP V19QT1dFUjoKKwkJaWYgKHZhbCA+IHJwcy0+ZWZmaWNpZW50X2ZyZXEgKyAxICYmCisJCSAgICB2 YWwgPiBycHMtPmN1cl9mcmVxKQorCQkJbmV3X3Bvd2VyID0gQkVUV0VFTjsKKwkJYnJlYWs7CisK KwljYXNlIEJFVFdFRU46CisJCWlmICh2YWwgPD0gcnBzLT5lZmZpY2llbnRfZnJlcSAmJgorCQkg ICAgdmFsIDwgcnBzLT5jdXJfZnJlcSkKKwkJCW5ld19wb3dlciA9IExPV19QT1dFUjsKKwkJZWxz ZSBpZiAodmFsID49IHJwcy0+cnAwX2ZyZXEgJiYKKwkJCSB2YWwgPiBycHMtPmN1cl9mcmVxKQor CQkJbmV3X3Bvd2VyID0gSElHSF9QT1dFUjsKKwkJYnJlYWs7CisKKwljYXNlIEhJR0hfUE9XRVI6 CisJCWlmICh2YWwgPCAocnBzLT5ycDFfZnJlcSArIHJwcy0+cnAwX2ZyZXEpID4+IDEgJiYKKwkJ ICAgIHZhbCA8IHJwcy0+Y3VyX2ZyZXEpCisJCQluZXdfcG93ZXIgPSBCRVRXRUVOOworCQlicmVh azsKKwl9CisJLyogTWF4L21pbiBiaW5zIGFyZSBzcGVjaWFsICovCisJaWYgKHZhbCA8PSBycHMt Pm1pbl9mcmVxX3NvZnRsaW1pdCkKKwkJbmV3X3Bvd2VyID0gTE9XX1BPV0VSOworCWlmICh2YWwg Pj0gcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQpCisJCW5ld19wb3dlciA9IEhJR0hfUE9XRVI7CisK KwltdXRleF9sb2NrKCZycHMtPnBvd2VyLm11dGV4KTsKKwlpZiAocnBzLT5wb3dlci5pbnRlcmFj dGl2ZSkKKwkJbmV3X3Bvd2VyID0gSElHSF9QT1dFUjsKKwlycHNfc2V0X3Bvd2VyKHJwcywgbmV3 X3Bvd2VyKTsKKwltdXRleF91bmxvY2soJnJwcy0+cG93ZXIubXV0ZXgpOworfQorCit2b2lkIGlu dGVsX3Jwc19tYXJrX2ludGVyYWN0aXZlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgYm9vbCBpbnRl cmFjdGl2ZSkKK3sKKwlpZiAoIXJwcy0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9j aygmcnBzLT5wb3dlci5tdXRleCk7CisJaWYgKGludGVyYWN0aXZlKSB7CisJCWlmICghcnBzLT5w b3dlci5pbnRlcmFjdGl2ZSsrICYmIHJwcy0+YWN0aXZlKQorCQkJcnBzX3NldF9wb3dlcihycHMs IEhJR0hfUE9XRVIpOworCX0gZWxzZSB7CisJCUdFTV9CVUdfT04oIXJwcy0+cG93ZXIuaW50ZXJh Y3RpdmUpOworCQlycHMtPnBvd2VyLmludGVyYWN0aXZlLS07CisJfQorCW11dGV4X3VubG9jaygm cnBzLT5wb3dlci5tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgZ2VuNl9ycHNfc2V0KHN0cnVjdCBp bnRlbF9ycHMgKnJwcywgdTggdmFsKQoreworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9 IHJwc190b191bmNvcmUocnBzKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJw c190b19pOTE1KHJwcyk7CisJdTMyIHN3cmVxOworCisJaWYgKElOVEVMX0dFTihpOTE1KSA+PSA5 KQorCQlzd3JlcSA9IEdFTjlfRlJFUVVFTkNZKHZhbCk7CisJZWxzZSBpZiAoSVNfSEFTV0VMTChp OTE1KSB8fCBJU19CUk9BRFdFTEwoaTkxNSkpCisJCXN3cmVxID0gSFNXX0ZSRVFVRU5DWSh2YWwp OworCWVsc2UKKwkJc3dyZXEgPSAoR0VONl9GUkVRVUVOQ1kodmFsKSB8CisJCQkgR0VONl9PRkZT RVQoMCkgfAorCQkJIEdFTjZfQUdHUkVTU0lWRV9UVVJCTyk7CisJaW50ZWxfdW5jb3JlX3dyaXRl KHVuY29yZSwgR0VONl9SUE5TV1JFUSwgc3dyZXEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgdmx2X3Jwc19zZXQoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1OCB2YWwpCit7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOworCWludCBlcnI7 CisKKwl2bHZfcHVuaXRfZ2V0KGk5MTUpOworCWVyciA9IHZsdl9wdW5pdF93cml0ZShpOTE1LCBQ VU5JVF9SRUdfR1BVX0ZSRVFfUkVRLCB2YWwpOworCXZsdl9wdW5pdF9wdXQoaTkxNSk7CisKKwly ZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHJwc19zZXQoc3RydWN0IGludGVsX3JwcyAqcnBz LCB1OCB2YWwpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkx NShycHMpOworCWludCBlcnI7CisKKwlpZiAoSU5URUxfR0VOKGk5MTUpIDwgNikKKwkJcmV0dXJu IDA7CisKKwlpZiAodmFsID09IHJwcy0+bGFzdF9mcmVxKQorCQlyZXR1cm4gMDsKKworCWlmIChJ U19WQUxMRVlWSUVXKGk5MTUpIHx8IElTX0NIRVJSWVZJRVcoaTkxNSkpCisJCWVyciA9IHZsdl9y cHNfc2V0KHJwcywgdmFsKTsKKwllbHNlCisJCWVyciA9IGdlbjZfcnBzX3NldChycHMsIHZhbCk7 CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWdlbjZfcnBzX3NldF90aHJlc2hvbGRzKHJw cywgdmFsKTsKKwlycHMtPmxhc3RfZnJlcSA9IHZhbDsKKworCXJldHVybiAwOworfQorCit2b2lk IGludGVsX3Jwc191bnBhcmsoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXU4IGZyZXE7CisK KwlpZiAoIXJwcy0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBVc2UgdGhlIHVzZXIn cyBkZXNpcmVkIGZyZXF1ZW5jeSBhcyBhIGd1aWRlLCBidXQgZm9yIGJldHRlcgorCSAqIHBlcmZv cm1hbmNlLCBqdW1wIGRpcmVjdGx5IHRvIFJQZSBhcyBvdXIgc3RhcnRpbmcgZnJlcXVlbmN5Lgor CSAqLworCW11dGV4X2xvY2soJnJwcy0+bG9jayk7CisJcnBzLT5hY3RpdmUgPSB0cnVlOworCWZy ZXEgPSBtYXgocnBzLT5jdXJfZnJlcSwgcnBzLT5lZmZpY2llbnRfZnJlcSksCisJZnJlcSA9IGNs YW1wKGZyZXEsIHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0LCBycHMtPm1heF9mcmVxX3NvZnRsaW1p dCk7CisJaW50ZWxfcnBzX3NldChycHMsIGZyZXEpOworCXJwcy0+bGFzdF9hZGogPSAwOworCW11 dGV4X3VubG9jaygmcnBzLT5sb2NrKTsKKworCWlmIChJTlRFTF9HRU4ocnBzX3RvX2k5MTUocnBz KSkgPj0gNikKKwkJcnBzX2VuYWJsZV9pbnRlcnJ1cHRzKHJwcyk7CisKKwlpZiAoSVNfR0VOKHJw c190b19pOTE1KHJwcyksIDUpKQorCQlnZW41X3Jwc191cGRhdGUocnBzKTsKK30KKwordm9pZCBp bnRlbF9ycHNfcGFyayhzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOworCisJaWYgKCFycHMtPmVuYWJsZWQp CisJCXJldHVybjsKKworCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gNikKKwkJcnBzX2Rpc2FibGVf aW50ZXJydXB0cyhycHMpOworCisJcnBzLT5hY3RpdmUgPSBmYWxzZTsKKwlpZiAocnBzLT5sYXN0 X2ZyZXEgPD0gcnBzLT5pZGxlX2ZyZXEpCisJCXJldHVybjsKKworCS8qCisJICogVGhlIHB1bml0 IGRlbGF5cyB0aGUgd3JpdGUgb2YgdGhlIGZyZXF1ZW5jeSBhbmQgdm9sdGFnZSB1bnRpbCBpdAor CSAqIGRldGVybWluZXMgdGhlIEdQVSBpcyBhd2FrZS4gRHVyaW5nIG5vcm1hbCB1c2FnZSB3ZSBk b24ndCB3YW50IHRvCisJICogd2FzdGUgcG93ZXIgY2hhbmdpbmcgdGhlIGZyZXF1ZW5jeSBpZiB0 aGUgR1BVIGlzIHNsZWVwaW5nIChyYzYpLgorCSAqIEhvd2V2ZXIsIHRoZSBHUFUgYW5kIGRyaXZl ciBpcyBub3cgaWRsZSBhbmQgd2UgZG8gbm90IHdhbnQgdG8gZGVsYXkKKwkgKiBzd2l0Y2hpbmcg dG8gbWluaW11bSB2b2x0YWdlIChyZWR1Y2luZyBwb3dlciB3aGlsc3QgaWRsZSkgYXMgd2UgZG8K KwkgKiBub3QgZXhwZWN0IHRvIGJlIHdva2VuIGluIHRoZSBuZWFyIGZ1dHVyZSBhbmQgc28gbXVz dCBmbHVzaCB0aGUKKwkgKiBjaGFuZ2UgYnkgd2FraW5nIHRoZSBkZXZpY2UuCisJICoKKwkgKiBX ZSBjaG9vc2UgdG8gdGFrZSB0aGUgbWVkaWEgcG93ZXJ3ZWxsIChlaXRoZXIgd291bGQgZG8gdG8g dHJpY2sgdGhlCisJICogcHVuaXQgaW50byBjb21taXR0aW5nIHRoZSB2b2x0YWdlIGNoYW5nZSkg YXMgdGhhdCB0YWtlcyBhIGxvdCBsZXNzCisJICogcG93ZXIgdGhhbiB0aGUgcmVuZGVyIHBvd2Vy d2VsbC4KKwkgKi8KKwlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldChycHNfdG9fdW5jb3JlKHJw cyksIEZPUkNFV0FLRV9NRURJQSk7CisJcnBzX3NldChycHMsIHJwcy0+aWRsZV9mcmVxKTsKKwlp bnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dChycHNfdG9fdW5jb3JlKHJwcyksIEZPUkNFV0FLRV9N RURJQSk7Cit9CisKK3ZvaWQgaW50ZWxfcnBzX2Jvb3N0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJx KQoreworCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZycS0+ZW5naW5lLT5ndC0+cnBzOworCXVu c2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoaTkxNV9yZXF1ZXN0X3NpZ25hbGVkKHJxKSB8fCAh cnBzLT5hY3RpdmUpCisJCXJldHVybjsKKworCS8qIFNlcmlhbGl6ZXMgd2l0aCBpOTE1X3JlcXVl c3RfcmV0aXJlKCkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwlp ZiAoIWk5MTVfcmVxdWVzdF9oYXNfd2FpdGJvb3N0KHJxKSAmJgorCSAgICAhZG1hX2ZlbmNlX2lz X3NpZ25hbGVkX2xvY2tlZCgmcnEtPmZlbmNlKSkgeworCQlycS0+ZmxhZ3MgfD0gSTkxNV9SRVFV RVNUX1dBSVRCT09TVDsKKworCQlpZiAoIWF0b21pY19mZXRjaF9pbmMoJnJwcy0+bnVtX3dhaXRl cnMpICYmCisJCSAgICBSRUFEX09OQ0UocnBzLT5jdXJfZnJlcSkgPCBycHMtPmJvb3N0X2ZyZXEp CisJCQlzY2hlZHVsZV93b3JrKCZycHMtPndvcmspOworCisJCWF0b21pY19pbmMoJnJwcy0+Ym9v c3RzKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKK30K KworaW50IGludGVsX3Jwc19zZXQoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1OCB2YWwpCit7CisJ aW50IGVyciA9IDA7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZycHMtPmxvY2spOworCUdFTV9C VUdfT04odmFsID4gcnBzLT5tYXhfZnJlcSk7CisJR0VNX0JVR19PTih2YWwgPCBycHMtPm1pbl9m cmVxKTsKKworCWlmIChycHMtPmFjdGl2ZSkgeworCQllcnIgPSBycHNfc2V0KHJwcywgdmFsKTsK KworCQkvKgorCQkgKiBNYWtlIHN1cmUgd2UgY29udGludWUgdG8gZ2V0IGludGVycnVwdHMKKwkJ ICogdW50aWwgd2UgaGl0IHRoZSBtaW5pbXVtIG9yIG1heGltdW0gZnJlcXVlbmNpZXMuCisJCSAq LworCQlpZiAoSU5URUxfR0VOKHJwc190b19pOTE1KHJwcykpID49IDYpIHsKKwkJCXN0cnVjdCBp bnRlbF91bmNvcmUgKnVuY29yZSA9IHJwc190b191bmNvcmUocnBzKTsKKworCQkJaW50ZWxfdW5j b3JlX3dyaXRlKHVuY29yZSwgR0VONl9SUF9JTlRFUlJVUFRfTElNSVRTLAorCQkJCQkgICBycHNf bGltaXRzKHJwcywgdmFsKSk7CisKKwkJCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjZf UE1JTlRSTVNLLAorCQkJCQkgICBycHNfcG1fbWFzayhycHMsIHZhbCkpOworCQl9CisJfQorCisJ aWYgKGVyciA9PSAwKQorCQlycHMtPmN1cl9mcmVxID0gdmFsOworCisJcmV0dXJuIGVycjsKK30K Kworc3RhdGljIHZvaWQgZ2VuNl9ycHNfaW5pdChzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOworCXN0cnVj dCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJwc190b191bmNvcmUocnBzKTsKKworCS8qIEFsbCBv ZiB0aGVzZSB2YWx1ZXMgYXJlIGluIHVuaXRzIG9mIDUwTUh6ICovCisKKwkvKiBzdGF0aWMgdmFs dWVzIGZyb20gSFc6IFJQMCA+IFJQMSA+IFJQbiAobWluX2ZyZXEpICovCisJaWYgKElTX0dFTjlf TFAoaTkxNSkpIHsKKwkJdTMyIHJwX3N0YXRlX2NhcCA9IGludGVsX3VuY29yZV9yZWFkKHVuY29y ZSwgQlhUX1JQX1NUQVRFX0NBUCk7CisKKwkJcnBzLT5ycDBfZnJlcSA9IChycF9zdGF0ZV9jYXAg Pj4gMTYpICYgMHhmZjsKKwkJcnBzLT5ycDFfZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4gIDgpICYg MHhmZjsKKwkJcnBzLT5taW5fZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4gIDApICYgMHhmZjsKKwl9 IGVsc2UgeworCQl1MzIgcnBfc3RhdGVfY2FwID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBH RU42X1JQX1NUQVRFX0NBUCk7CisKKwkJcnBzLT5ycDBfZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4g IDApICYgMHhmZjsKKwkJcnBzLT5ycDFfZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4gIDgpICYgMHhm ZjsKKwkJcnBzLT5taW5fZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4gMTYpICYgMHhmZjsKKwl9CisK KwkvKiBod19tYXggPSBSUDAgdW50aWwgd2UgY2hlY2sgZm9yIG92ZXJjbG9ja2luZyAqLworCXJw cy0+bWF4X2ZyZXEgPSBycHMtPnJwMF9mcmVxOworCisJcnBzLT5lZmZpY2llbnRfZnJlcSA9IHJw cy0+cnAxX2ZyZXE7CisJaWYgKElTX0hBU1dFTEwoaTkxNSkgfHwgSVNfQlJPQURXRUxMKGk5MTUp IHx8CisJICAgIElTX0dFTjlfQkMoaTkxNSkgfHwgSU5URUxfR0VOKGk5MTUpID49IDEwKSB7CisJ CXUzMiBkZGNjX3N0YXR1cyA9IDA7CisKKwkJaWYgKHNhbmR5YnJpZGdlX3Bjb2RlX3JlYWQoaTkx NSwKKwkJCQkJICAgSFNXX1BDT0RFX0RZTkFNSUNfRFVUWV9DWUNMRV9DT05UUk9MLAorCQkJCQkg ICAmZGRjY19zdGF0dXMsIE5VTEwpID09IDApCisJCQlycHMtPmVmZmljaWVudF9mcmVxID0KKwkJ CQljbGFtcF90KHU4LAorCQkJCQkoZGRjY19zdGF0dXMgPj4gOCkgJiAweGZmLAorCQkJCQlycHMt Pm1pbl9mcmVxLAorCQkJCQlycHMtPm1heF9mcmVxKTsKKwl9CisKKwlpZiAoSVNfR0VOOV9CQyhp OTE1KSB8fCBJTlRFTF9HRU4oaTkxNSkgPj0gMTApIHsKKwkJLyogU3RvcmUgdGhlIGZyZXF1ZW5j eSB2YWx1ZXMgaW4gMTYuNjYgTUhaIHVuaXRzLCB3aGljaCBpcworCQkgKiB0aGUgbmF0dXJhbCBo YXJkd2FyZSB1bml0IGZvciBTS0wKKwkJICovCisJCXJwcy0+cnAwX2ZyZXEgKj0gR0VOOV9GUkVR X1NDQUxFUjsKKwkJcnBzLT5ycDFfZnJlcSAqPSBHRU45X0ZSRVFfU0NBTEVSOworCQlycHMtPm1p bl9mcmVxICo9IEdFTjlfRlJFUV9TQ0FMRVI7CisJCXJwcy0+bWF4X2ZyZXEgKj0gR0VOOV9GUkVR X1NDQUxFUjsKKwkJcnBzLT5lZmZpY2llbnRfZnJlcSAqPSBHRU45X0ZSRVFfU0NBTEVSOworCX0K K30KKworc3RhdGljIGJvb2wgcnBzX3Jlc2V0KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwkv KiBmb3JjZSBhIHJlc2V0ICovCisJcnBzLT5wb3dlci5tb2RlID0gLTE7CisJcnBzLT5sYXN0X2Zy ZXEgPSAtMTsKKworCWlmIChycHNfc2V0KHJwcywgcnBzLT5taW5fZnJlcSkpIHsKKwkJRFJNX0VS Uk9SKCJGYWlsZWQgdG8gcmVzZXQgUlBTIHRvIGluaXRpYWwgdmFsdWVzXG4iKTsKKwkJcmV0dXJu IGZhbHNlOworCX0KKworCXJwcy0+Y3VyX2ZyZXEgPSBycHMtPm1pbl9mcmVxOworCXJldHVybiB0 cnVlOworfQorCisvKiBTZWUgdGhlIEdlbjlfR1RfUE1fUHJvZ3JhbW1pbmdfR3VpZGUgZG9jIGZv ciB0aGUgYmVsb3cgKi8KK3N0YXRpYyBib29sIGdlbjlfcnBzX2VuYWJsZShzdHJ1Y3QgaW50ZWxf cnBzICpycHMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkx NShycHMpOworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJwc190b191bmNvcmUocnBz KTsKKworCS8qIFByb2dyYW0gZGVmYXVsdHMgYW5kIHRocmVzaG9sZHMgZm9yIFJQUyAqLworCWlm IChJU19HRU4oaTkxNSwgOSkpCisJCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZf UkNfVklERU9fRlJFUSwKKwkJCQkgICAgICBHRU45X0ZSRVFVRU5DWShycHMtPnJwMV9mcmVxKSk7 CisKKwkvKiAxIHNlY29uZCB0aW1lb3V0ICovCisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29y ZSwgR0VONl9SUF9ET1dOX1RJTUVPVVQsCisJCQkgICAgICBHVF9JTlRFUlZBTF9GUk9NX1VTKGk5 MTUsIDEwMDAwMDApKTsKKworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBf SURMRV9IWVNURVJTSVMsIDB4YSk7CisKKwlyZXR1cm4gcnBzX3Jlc2V0KHJwcyk7Cit9CisKK3N0 YXRpYyBib29sIGdlbjhfcnBzX2VuYWJsZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3Ry dWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOworCisJaW50ZWxf dW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SQ19WSURFT19GUkVRLAorCQkJICAgICAgSFNX X0ZSRVFVRU5DWShycHMtPnJwMV9mcmVxKSk7CisKKwkvKiBOQjogRG9jcyBzYXkgMXMsIGFuZCAx MDAwMDAwIC0gd2hpY2ggYXJlbid0IGVxdWl2YWxlbnQgKi8KKwlpbnRlbF91bmNvcmVfd3JpdGVf ZncodW5jb3JlLCBHRU42X1JQX0RPV05fVElNRU9VVCwKKwkJCSAgICAgIDEwMDAwMDAwMCAvIDEy OCk7IC8qIDEgc2Vjb25kIHRpbWVvdXQgKi8KKworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNv cmUsIEdFTjZfUlBfSURMRV9IWVNURVJTSVMsIDEwKTsKKworCXJldHVybiBycHNfcmVzZXQocnBz KTsKK30KKworc3RhdGljIGJvb2wgZ2VuNl9ycHNfZW5hYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJw cykKK3sKKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBycHNfdG9fdW5jb3JlKHJwcyk7 CisKKwkvKiBQb3dlciBkb3duIGlmIGNvbXBsZXRlbHkgaWRsZSBmb3Igb3ZlciA1MG1zICovCisJ aW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9ET1dOX1RJTUVPVVQsIDUwMDAw KTsKKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JQX0lETEVfSFlTVEVSU0lT LCAxMCk7CisKKwlyZXR1cm4gcnBzX3Jlc2V0KHJwcyk7Cit9CisKK3N0YXRpYyBpbnQgY2h2X3Jw c19tYXhfZnJlcShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOworCXUzMiB2YWw7CisKKwl2YWwgPSB2bHZf cHVuaXRfcmVhZChpOTE1LCBGQl9HRlhfRk1BWF9BVF9WTUFYX0ZVU0UpOworCisJc3dpdGNoIChS VU5USU1FX0lORk8oaTkxNSktPnNzZXUuZXVfdG90YWwpIHsKKwljYXNlIDg6CisJCS8qICgyICog NCkgY29uZmlnICovCisJCXZhbCA+Pj0gRkJfR0ZYX0ZNQVhfQVRfVk1BWF8yU1M0RVVfRlVTRV9T SElGVDsKKwkJYnJlYWs7CisJY2FzZSAxMjoKKwkJLyogKDIgKiA2KSBjb25maWcgKi8KKwkJdmFs ID4+PSBGQl9HRlhfRk1BWF9BVF9WTUFYXzJTUzZFVV9GVVNFX1NISUZUOworCQlicmVhazsKKwlj YXNlIDE2OgorCQkvKiAoMiAqIDgpIGNvbmZpZyAqLworCWRlZmF1bHQ6CisJCS8qIFNldHRpbmcg KDIgKiA4KSBNaW4gUlAwIGZvciBhbnkgb3RoZXIgY29tYmluYXRpb24gKi8KKwkJdmFsID4+PSBG Ql9HRlhfRk1BWF9BVF9WTUFYXzJTUzhFVV9GVVNFX1NISUZUOworCQlicmVhazsKKwl9CisKKwly ZXR1cm4gdmFsICYgRkJfR0ZYX0ZSRVFfRlVTRV9NQVNLOworfQorCitzdGF0aWMgaW50IGNodl9y cHNfcnBlX2ZyZXEoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKKwl1MzIgdmFsOworCisJdmFsID0gdmx2 X3B1bml0X3JlYWQoaTkxNSwgUFVOSVRfR1BVX0RVVFlDWUNMRV9SRUcpOworCXZhbCA+Pj0gUFVO SVRfR1BVX0RVVFlDWUNMRV9SUEVfRlJFUV9TSElGVDsKKworCXJldHVybiB2YWwgJiBQVU5JVF9H UFVfRFVUWUNZQ0xFX1JQRV9GUkVRX01BU0s7Cit9CisKK3N0YXRpYyBpbnQgY2h2X3Jwc19ndWFy X2ZyZXEoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKKwl1MzIgdmFsOworCisJdmFsID0gdmx2X3B1bml0 X3JlYWQoaTkxNSwgRkJfR0ZYX0ZNQVhfQVRfVk1BWF9GVVNFKTsKKworCXJldHVybiB2YWwgJiBG Ql9HRlhfRlJFUV9GVVNFX01BU0s7Cit9CisKK3N0YXRpYyB1MzIgY2h2X3Jwc19taW5fZnJlcShz dHJ1Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUg PSBycHNfdG9faTkxNShycHMpOworCXUzMiB2YWw7CisKKwl2YWwgPSB2bHZfcHVuaXRfcmVhZChp OTE1LCBGQl9HRlhfRk1JTl9BVF9WTUlOX0ZVU0UpOworCXZhbCA+Pj0gRkJfR0ZYX0ZNSU5fQVRf Vk1JTl9GVVNFX1NISUZUOworCisJcmV0dXJuIHZhbCAmIEZCX0dGWF9GUkVRX0ZVU0VfTUFTSzsK K30KKworc3RhdGljIGJvb2wgY2h2X3Jwc19lbmFibGUoc3RydWN0IGludGVsX3JwcyAqcnBzKQor eworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJwc190b191bmNvcmUocnBzKTsKKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJdTMyIHZh bDsKKworCS8qIDE6IFByb2dyYW0gZGVmYXVsdHMgYW5kIHRocmVzaG9sZHMgZm9yIFJQUyovCisJ aW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9ET1dOX1RJTUVPVVQsIDEwMDAw MDApOworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfVVBfVEhSRVNIT0xE LCA1OTQwMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9ET1dOX1RI UkVTSE9MRCwgMjQ1MDAwKTsKKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JQ X1VQX0VJLCA2NjAwMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9E T1dOX0VJLCAzNTAwMDApOworCisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9S UF9JRExFX0hZU1RFUlNJUywgMTApOworCisJLyogMjogRW5hYmxlIFJQUyAqLworCWludGVsX3Vu Y29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfQ09OVFJPTCwKKwkJCSAgICAgIEdFTjZfUlBf TUVESUFfSFdfTk9STUFMX01PREUgfAorCQkJICAgICAgR0VONl9SUF9NRURJQV9JU19HRlggfAor CQkJICAgICAgR0VONl9SUF9FTkFCTEUgfAorCQkJICAgICAgR0VONl9SUF9VUF9CVVNZX0FWRyB8 CisJCQkgICAgICBHRU42X1JQX0RPV05fSURMRV9BVkcpOworCisJLyogU2V0dGluZyBGaXhlZCBC aWFzICovCisJdmx2X3B1bml0X2dldChpOTE1KTsKKworCXZhbCA9IFZMVl9PVkVSUklERV9FTiB8 IFZMVl9TT0NfVERQX0VOIHwgQ0hWX0JJQVNfQ1BVXzUwX1NPQ181MDsKKwl2bHZfcHVuaXRfd3Jp dGUoaTkxNSwgVkxWX1RVUkJPX1NPQ19PVkVSUklERSwgdmFsKTsKKworCXZhbCA9IHZsdl9wdW5p dF9yZWFkKGk5MTUsIFBVTklUX1JFR19HUFVfRlJFUV9TVFMpOworCisJdmx2X3B1bml0X3B1dChp OTE1KTsKKworCS8qIFJQUyBjb2RlIGFzc3VtZXMgR1BMTCBpcyB1c2VkICovCisJV0FSTl9PTkNF KCh2YWwgJiBHUExMRU5BQkxFKSA9PSAwLCAiR1BMTCBub3QgZW5hYmxlZFxuIik7CisKKwlEUk1f REVCVUdfRFJJVkVSKCJHUExMIGVuYWJsZWQ/ICVzXG4iLCB5ZXNubyh2YWwgJiBHUExMRU5BQkxF KSk7CisJRFJNX0RFQlVHX0RSSVZFUigiR1BVIHN0YXR1czogMHglMDh4XG4iLCB2YWwpOworCisJ cmV0dXJuIHJwc19yZXNldChycHMpOworfQorCitzdGF0aWMgaW50IHZsdl9ycHNfZ3Vhcl9mcmVx KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSA9IHJwc190b19pOTE1KHJwcyk7CisJdTMyIHZhbCwgcnAxOworCisJdmFsID0gdmx2X25jX3Jl YWQoaTkxNSwgSU9TRl9OQ19GQl9HRlhfRlJFUV9GVVNFKTsKKworCXJwMSA9IHZhbCAmIEZCX0dG WF9GR1VBUkFOVEVFRF9GUkVRX0ZVU0VfTUFTSzsKKwlycDEgPj49IEZCX0dGWF9GR1VBUkFOVEVF RF9GUkVRX0ZVU0VfU0hJRlQ7CisKKwlyZXR1cm4gcnAxOworfQorCitzdGF0aWMgaW50IHZsdl9y cHNfbWF4X2ZyZXEoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKKwl1MzIgdmFsLCBycDA7CisKKwl2YWwg PSB2bHZfbmNfcmVhZChpOTE1LCBJT1NGX05DX0ZCX0dGWF9GUkVRX0ZVU0UpOworCisJcnAwID0g KHZhbCAmIEZCX0dGWF9NQVhfRlJFUV9GVVNFX01BU0spID4+IEZCX0dGWF9NQVhfRlJFUV9GVVNF X1NISUZUOworCS8qIENsYW1wIHRvIG1heCAqLworCXJwMCA9IG1pbl90KHUzMiwgcnAwLCAweGVh KTsKKworCXJldHVybiBycDA7Cit9CisKK3N0YXRpYyBpbnQgdmx2X3Jwc19ycGVfZnJlcShzdHJ1 Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBy cHNfdG9faTkxNShycHMpOworCXUzMiB2YWwsIHJwZTsKKworCXZhbCA9IHZsdl9uY19yZWFkKGk5 MTUsIElPU0ZfTkNfRkJfR0ZYX0ZNQVhfRlVTRV9MTyk7CisJcnBlID0gKHZhbCAmIEZCX0ZNQVhf Vk1JTl9GUkVRX0xPX01BU0spID4+IEZCX0ZNQVhfVk1JTl9GUkVRX0xPX1NISUZUOworCXZhbCA9 IHZsdl9uY19yZWFkKGk5MTUsIElPU0ZfTkNfRkJfR0ZYX0ZNQVhfRlVTRV9ISSk7CisJcnBlIHw9 ICh2YWwgJiBGQl9GTUFYX1ZNSU5fRlJFUV9ISV9NQVNLKSA8PCA1OworCisJcmV0dXJuIHJwZTsK K30KKworc3RhdGljIGludCB2bHZfcnBzX21pbl9mcmVxKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJ dTMyIHZhbDsKKworCXZhbCA9IHZsdl9wdW5pdF9yZWFkKGk5MTUsIFBVTklUX1JFR19HUFVfTEZN KSAmIDB4ZmY7CisJLyoKKwkgKiBBY2NvcmRpbmcgdG8gdGhlIEJZVCBQdW5pdCBHUFUgdHVyYm8g SEFTIDEuMS42LjMgdGhlIG1pbmltdW0gdmFsdWUKKwkgKiBmb3IgdGhlIG1pbmltdW0gZnJlcXVl bmN5IGluIEdQTEwgbW9kZSBpcyAweGMxLiBDb250cmFyeSB0byB0aGlzIG9uCisJICogYSBCWVQt TSBCMCB0aGUgYWJvdmUgcmVnaXN0ZXIgY29udGFpbnMgMHhiZi4gTW9yZW92ZXIgd2hlbiBzZXR0 aW5nCisJICogYSBmcmVxdWVuY3kgUHVuaXQgd2lsbCBub3QgYWxsb3cgdmFsdWVzIGJlbG93IDB4 YzAuIENsYW1wIGl0IDB4YzAKKwkgKiB0byBtYWtlIHN1cmUgaXQgbWF0Y2hlcyB3aGF0IFB1bml0 IGFjY2VwdHMuCisJICovCisJcmV0dXJuIG1heF90KHUzMiwgdmFsLCAweGMwKTsKK30KKworc3Rh dGljIGJvb2wgdmx2X3Jwc19lbmFibGUoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVj dCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJwc190b191bmNvcmUocnBzKTsKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJdTMyIHZhbDsKKworCWlu dGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfRE9XTl9USU1FT1VULCAxMDAwMDAw KTsKKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JQX1VQX1RIUkVTSE9MRCwg NTk0MDApOworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfRE9XTl9USFJF U0hPTEQsIDI0NTAwMCk7CisJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9V UF9FSSwgNjYwMDApOworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfRE9X Tl9FSSwgMzUwMDAwKTsKKworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBf SURMRV9IWVNURVJTSVMsIDEwKTsKKworCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdF TjZfUlBfQ09OVFJPTCwKKwkJCSAgICAgIEdFTjZfUlBfTUVESUFfVFVSQk8gfAorCQkJICAgICAg R0VONl9SUF9NRURJQV9IV19OT1JNQUxfTU9ERSB8CisJCQkgICAgICBHRU42X1JQX01FRElBX0lT X0dGWCB8CisJCQkgICAgICBHRU42X1JQX0VOQUJMRSB8CisJCQkgICAgICBHRU42X1JQX1VQX0JV U1lfQVZHIHwKKwkJCSAgICAgIEdFTjZfUlBfRE9XTl9JRExFX0NPTlQpOworCisJdmx2X3B1bml0 X2dldChpOTE1KTsKKworCS8qIFNldHRpbmcgRml4ZWQgQmlhcyAqLworCXZhbCA9IFZMVl9PVkVS UklERV9FTiB8IFZMVl9TT0NfVERQX0VOIHwgVkxWX0JJQVNfQ1BVXzEyNV9TT0NfODc1OworCXZs dl9wdW5pdF93cml0ZShpOTE1LCBWTFZfVFVSQk9fU09DX09WRVJSSURFLCB2YWwpOworCisJdmFs ID0gdmx2X3B1bml0X3JlYWQoaTkxNSwgUFVOSVRfUkVHX0dQVV9GUkVRX1NUUyk7CisKKwl2bHZf cHVuaXRfcHV0KGk5MTUpOworCisJLyogUlBTIGNvZGUgYXNzdW1lcyBHUExMIGlzIHVzZWQgKi8K KwlXQVJOX09OQ0UoKHZhbCAmIEdQTExFTkFCTEUpID09IDAsICJHUExMIG5vdCBlbmFibGVkXG4i KTsKKworCURSTV9ERUJVR19EUklWRVIoIkdQTEwgZW5hYmxlZD8gJXNcbiIsIHllc25vKHZhbCAm IEdQTExFTkFCTEUpKTsKKwlEUk1fREVCVUdfRFJJVkVSKCJHUFUgc3RhdHVzOiAweCUwOHhcbiIs IHZhbCk7CisKKwlyZXR1cm4gcnBzX3Jlc2V0KHJwcyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBs b25nIF9faXBzX2dmeF92YWwoc3RydWN0IGludGVsX2lwcyAqaXBzKQoreworCXN0cnVjdCBpbnRl bF9ycHMgKnJwcyA9IGNvbnRhaW5lcl9vZihpcHMsIHR5cGVvZigqcnBzKSwgaXBzKTsKKwlzdHJ1 Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBycHNfdG9fdW5jb3JlKHJwcyk7CisJdW5zaWduZWQg bG9uZyB0LCBjb3JyLCBzdGF0ZTEsIGNvcnIyLCBzdGF0ZTI7CisJdTMyIHB4dmlkLCBleHRfdjsK KworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm1jaGRldl9sb2NrKTsKKworCXB4dmlkID0gaW50ZWxf dW5jb3JlX3JlYWQodW5jb3JlLCBQWFZGUkVRKHJwcy0+Y3VyX2ZyZXEpKTsKKwlweHZpZCA9IChw eHZpZCA+PiAyNCkgJiAweDdmOworCWV4dF92ID0gcHZpZF90b19leHR2aWQocnBzX3RvX2k5MTUo cnBzKSwgcHh2aWQpOworCisJc3RhdGUxID0gZXh0X3Y7CisKKwkvKiBSZXZlbCBpbiB0aGUgZW1w aXJpY2FsbHkgZGVyaXZlZCBjb25zdGFudHMgKi8KKworCS8qIENvcnJlY3Rpb24gZmFjdG9yIGlu IDEvMTAwMDAwIHVuaXRzICovCisJdCA9IGlwc19tY2hfdmFsKHVuY29yZSk7CisJaWYgKHQgPiA4 MCkKKwkJY29yciA9IHQgKiAyMzQ5ICsgMTM1OTQwOworCWVsc2UgaWYgKHQgPj0gNTApCisJCWNv cnIgPSB0ICogOTY0ICsgMjkzMTc7CisJZWxzZSAvKiA8IDUwICovCisJCWNvcnIgPSB0ICogMzAx ICsgMTAwNDsKKworCWNvcnIgPSBjb3JyICogMTUwMTQyICogc3RhdGUxIC8gMTAwMDAgLSA3ODY0 MjsKKwljb3JyIC89IDEwMDAwMDsKKwljb3JyMiA9IGNvcnIgKiBpcHMtPmNvcnI7CisKKwlzdGF0 ZTIgPSBjb3JyMiAqIHN0YXRlMSAvIDEwMDAwOworCXN0YXRlMiAvPSAxMDA7IC8qIGNvbnZlcnQg dG8gbVcgKi8KKworCV9fZ2VuNV9pcHNfdXBkYXRlKGlwcyk7CisKKwlyZXR1cm4gaXBzLT5nZnhf cG93ZXIgKyBzdGF0ZTI7Cit9CisKK3ZvaWQgaW50ZWxfcnBzX2VuYWJsZShzdHJ1Y3QgaW50ZWxf cnBzICpycHMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkx NShycHMpOworCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJwc190b191bmNvcmUocnBz KTsKKworCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KHVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7 CisJaWYgKElTX0NIRVJSWVZJRVcoaTkxNSkpCisJCXJwcy0+ZW5hYmxlZCA9IGNodl9ycHNfZW5h YmxlKHJwcyk7CisJZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhpOTE1KSkKKwkJcnBzLT5lbmFibGVk ID0gdmx2X3Jwc19lbmFibGUocnBzKTsKKwllbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkK KwkJcnBzLT5lbmFibGVkID0gZ2VuOV9ycHNfZW5hYmxlKHJwcyk7CisJZWxzZSBpZiAoSU5URUxf R0VOKGk5MTUpID49IDgpCisJCXJwcy0+ZW5hYmxlZCA9IGdlbjhfcnBzX2VuYWJsZShycHMpOwor CWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA2KQorCQlycHMtPmVuYWJsZWQgPSBnZW42X3Jw c19lbmFibGUocnBzKTsKKwllbHNlIGlmIChJU19JUk9OTEFLRV9NKGk5MTUpKQorCQlycHMtPmVu YWJsZWQgPSBnZW41X3Jwc19lbmFibGUocnBzKTsKKwlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1 dCh1bmNvcmUsIEZPUkNFV0FLRV9BTEwpOworCWlmICghcnBzLT5lbmFibGVkKQorCQlyZXR1cm47 CisKKwlXQVJOX09OKHJwcy0+bWF4X2ZyZXEgPCBycHMtPm1pbl9mcmVxKTsKKwlXQVJOX09OKHJw cy0+aWRsZV9mcmVxID4gcnBzLT5tYXhfZnJlcSk7CisKKwlXQVJOX09OKHJwcy0+ZWZmaWNpZW50 X2ZyZXEgPCBycHMtPm1pbl9mcmVxKTsKKwlXQVJOX09OKHJwcy0+ZWZmaWNpZW50X2ZyZXEgPiBy cHMtPm1heF9mcmVxKTsKK30KKworc3RhdGljIHZvaWQgZ2VuNl9ycHNfZGlzYWJsZShzdHJ1Y3Qg aW50ZWxfcnBzICpycHMpCit7CisJaW50ZWxfdW5jb3JlX3dyaXRlKHJwc190b191bmNvcmUocnBz KSwgR0VONl9SUF9DT05UUk9MLCAwKTsKK30KKwordm9pZCBpbnRlbF9ycHNfZGlzYWJsZShzdHJ1 Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBy cHNfdG9faTkxNShycHMpOworCisJcnBzLT5lbmFibGVkID0gZmFsc2U7CisKKwlpZiAoSU5URUxf R0VOKGk5MTUpID49IDYpCisJCWdlbjZfcnBzX2Rpc2FibGUocnBzKTsKKwllbHNlIGlmIChJU19J Uk9OTEFLRV9NKGk5MTUpKQorCQlnZW41X3Jwc19kaXNhYmxlKHJwcyk7Cit9CisKK3N0YXRpYyBp bnQgYnl0X2dwdV9mcmVxKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgaW50IHZhbCkKK3sKKwkvKgor CSAqIE4gPSB2YWwgLSAweGI3CisJICogU2xvdyA9IEZhc3QgPSBHUExMIHJlZiAqIE4KKwkgKi8K KwlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QocnBzLT5ncGxsX3JlZl9mcmVxICogKHZhbCAtIDB4 YjcpLCAxMDAwKTsKK30KKworc3RhdGljIGludCBieXRfZnJlcV9vcGNvZGUoc3RydWN0IGludGVs X3JwcyAqcnBzLCBpbnQgdmFsKQoreworCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVCgxMDAwICog dmFsLCBycHMtPmdwbGxfcmVmX2ZyZXEpICsgMHhiNzsKK30KKworc3RhdGljIGludCBjaHZfZ3B1 X2ZyZXEoc3RydWN0IGludGVsX3JwcyAqcnBzLCBpbnQgdmFsKQoreworCS8qCisJICogTiA9IHZh bCAvIDIKKwkgKiBDVSAoc2xvdykgPSBDVTJ4IChmYXN0KSAvIDIgPSBHUExMIHJlZiAqIE4gLyAy CisJICovCisJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHJwcy0+Z3BsbF9yZWZfZnJlcSAqIHZh bCwgMiAqIDIgKiAxMDAwKTsKK30KKworc3RhdGljIGludCBjaHZfZnJlcV9vcGNvZGUoc3RydWN0 IGludGVsX3JwcyAqcnBzLCBpbnQgdmFsKQoreworCS8qIENIViBuZWVkcyBldmVuIHZhbHVlcyAq LworCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVCgyICogMTAwMCAqIHZhbCwgcnBzLT5ncGxsX3Jl Zl9mcmVxKSAqIDI7Cit9CisKK2ludCBpbnRlbF9ncHVfZnJlcShzdHJ1Y3QgaW50ZWxfcnBzICpy cHMsIGludCB2YWwpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9f aTkxNShycHMpOworCisJaWYgKElOVEVMX0dFTihpOTE1KSA+PSA5KQorCQlyZXR1cm4gRElWX1JP VU5EX0NMT1NFU1QodmFsICogR1RfRlJFUVVFTkNZX01VTFRJUExJRVIsCisJCQkJCSBHRU45X0ZS RVFfU0NBTEVSKTsKKwllbHNlIGlmIChJU19DSEVSUllWSUVXKGk5MTUpKQorCQlyZXR1cm4gY2h2 X2dwdV9mcmVxKHJwcywgdmFsKTsKKwllbHNlIGlmIChJU19WQUxMRVlWSUVXKGk5MTUpKQorCQly ZXR1cm4gYnl0X2dwdV9mcmVxKHJwcywgdmFsKTsKKwllbHNlCisJCXJldHVybiB2YWwgKiBHVF9G UkVRVUVOQ1lfTVVMVElQTElFUjsKK30KKworaW50IGludGVsX2ZyZXFfb3Bjb2RlKHN0cnVjdCBp bnRlbF9ycHMgKnJwcywgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSA9IHJwc190b19pOTE1KHJwcyk7CisKKwlpZiAoSU5URUxfR0VOKGk5MTUpID49IDkpCisJCXJl dHVybiBESVZfUk9VTkRfQ0xPU0VTVCh2YWwgKiBHRU45X0ZSRVFfU0NBTEVSLAorCQkJCQkgR1Rf RlJFUVVFTkNZX01VTFRJUExJRVIpOworCWVsc2UgaWYgKElTX0NIRVJSWVZJRVcoaTkxNSkpCisJ CXJldHVybiBjaHZfZnJlcV9vcGNvZGUocnBzLCB2YWwpOworCWVsc2UgaWYgKElTX1ZBTExFWVZJ RVcoaTkxNSkpCisJCXJldHVybiBieXRfZnJlcV9vcGNvZGUocnBzLCB2YWwpOworCWVsc2UKKwkJ cmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHZhbCwgR1RfRlJFUVVFTkNZX01VTFRJUExJRVIpOwor fQorCitzdGF0aWMgdm9pZCB2bHZfaW5pdF9ncGxsX3JlZl9mcmVxKHN0cnVjdCBpbnRlbF9ycHMg KnJwcykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJw cyk7CisKKwlycHMtPmdwbGxfcmVmX2ZyZXEgPQorCQl2bHZfZ2V0X2Nja19jbG9jayhpOTE1LCAi R1BMTCByZWYiLAorCQkJCSAgQ0NLX0dQTExfQ0xPQ0tfQ09OVFJPTCwKKwkJCQkgIGk5MTUtPmN6 Y2xrX2ZyZXEpOworCisJRFJNX0RFQlVHX0RSSVZFUigiR1BMTCByZWZlcmVuY2UgZnJlcTogJWQg a0h6XG4iLCBycHMtPmdwbGxfcmVmX2ZyZXEpOworfQorCitzdGF0aWMgdm9pZCB2bHZfcnBzX2lu aXQoc3RydWN0IGludGVsX3JwcyAqcnBzKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKKwl1MzIgdmFsOworCisJdmx2X2lvc2Zfc2JfZ2V0KGk5 MTUsCisJCQlCSVQoVkxWX0lPU0ZfU0JfUFVOSVQpIHwKKwkJCUJJVChWTFZfSU9TRl9TQl9OQykg fAorCQkJQklUKFZMVl9JT1NGX1NCX0NDSykpOworCisJdmx2X2luaXRfZ3BsbF9yZWZfZnJlcShy cHMpOworCisJdmFsID0gdmx2X3B1bml0X3JlYWQoaTkxNSwgUFVOSVRfUkVHX0dQVV9GUkVRX1NU Uyk7CisJc3dpdGNoICgodmFsID4+IDYpICYgMykgeworCWNhc2UgMDoKKwljYXNlIDE6CisJCWk5 MTUtPm1lbV9mcmVxID0gODAwOworCQlicmVhazsKKwljYXNlIDI6CisJCWk5MTUtPm1lbV9mcmVx ID0gMTA2NjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlpOTE1LT5tZW1fZnJlcSA9IDEzMzM7CisJ CWJyZWFrOworCX0KKwlEUk1fREVCVUdfRFJJVkVSKCJERFIgc3BlZWQ6ICVkIE1IelxuIiwgaTkx NS0+bWVtX2ZyZXEpOworCisJcnBzLT5tYXhfZnJlcSA9IHZsdl9ycHNfbWF4X2ZyZXEocnBzKTsK KwlycHMtPnJwMF9mcmVxID0gcnBzLT5tYXhfZnJlcTsKKwlEUk1fREVCVUdfRFJJVkVSKCJtYXgg R1BVIGZyZXE6ICVkIE1IeiAoJXUpXG4iLAorCQkJIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5t YXhfZnJlcSksCisJCQkgcnBzLT5tYXhfZnJlcSk7CisKKwlycHMtPmVmZmljaWVudF9mcmVxID0g dmx2X3Jwc19ycGVfZnJlcShycHMpOworCURSTV9ERUJVR19EUklWRVIoIlJQZSBHUFUgZnJlcTog JWQgTUh6ICgldSlcbiIsCisJCQkgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPmVmZmljaWVudF9m cmVxKSwKKwkJCSBycHMtPmVmZmljaWVudF9mcmVxKTsKKworCXJwcy0+cnAxX2ZyZXEgPSB2bHZf cnBzX2d1YXJfZnJlcShycHMpOworCURSTV9ERUJVR19EUklWRVIoIlJQMShHdWFyIEZyZXEpIEdQ VSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKKwkJCSBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+cnAx X2ZyZXEpLAorCQkJIHJwcy0+cnAxX2ZyZXEpOworCisJcnBzLT5taW5fZnJlcSA9IHZsdl9ycHNf bWluX2ZyZXEocnBzKTsKKwlEUk1fREVCVUdfRFJJVkVSKCJtaW4gR1BVIGZyZXE6ICVkIE1IeiAo JXUpXG4iLAorCQkJIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5taW5fZnJlcSksCisJCQkgcnBz LT5taW5fZnJlcSk7CisKKwl2bHZfaW9zZl9zYl9wdXQoaTkxNSwKKwkJCUJJVChWTFZfSU9TRl9T Ql9QVU5JVCkgfAorCQkJQklUKFZMVl9JT1NGX1NCX05DKSB8CisJCQlCSVQoVkxWX0lPU0ZfU0Jf Q0NLKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNodl9ycHNfaW5pdChzdHJ1Y3QgaW50ZWxfcnBzICpy cHMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMp OworCXUzMiB2YWw7CisKKwl2bHZfaW9zZl9zYl9nZXQoaTkxNSwKKwkJCUJJVChWTFZfSU9TRl9T Ql9QVU5JVCkgfAorCQkJQklUKFZMVl9JT1NGX1NCX05DKSB8CisJCQlCSVQoVkxWX0lPU0ZfU0Jf Q0NLKSk7CisKKwl2bHZfaW5pdF9ncGxsX3JlZl9mcmVxKHJwcyk7CisKKwl2YWwgPSB2bHZfY2Nr X3JlYWQoaTkxNSwgQ0NLX0ZVU0VfUkVHKTsKKworCXN3aXRjaCAoKHZhbCA+PiAyKSAmIDB4Nykg eworCWNhc2UgMzoKKwkJaTkxNS0+bWVtX2ZyZXEgPSAyMDAwOworCQlicmVhazsKKwlkZWZhdWx0 OgorCQlpOTE1LT5tZW1fZnJlcSA9IDE2MDA7CisJCWJyZWFrOworCX0KKwlEUk1fREVCVUdfRFJJ VkVSKCJERFIgc3BlZWQ6ICVkIE1IelxuIiwgaTkxNS0+bWVtX2ZyZXEpOworCisJcnBzLT5tYXhf ZnJlcSA9IGNodl9ycHNfbWF4X2ZyZXEocnBzKTsKKwlycHMtPnJwMF9mcmVxID0gcnBzLT5tYXhf ZnJlcTsKKwlEUk1fREVCVUdfRFJJVkVSKCJtYXggR1BVIGZyZXE6ICVkIE1IeiAoJXUpXG4iLAor CQkJIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5tYXhfZnJlcSksCisJCQkgcnBzLT5tYXhfZnJl cSk7CisKKwlycHMtPmVmZmljaWVudF9mcmVxID0gY2h2X3Jwc19ycGVfZnJlcShycHMpOworCURS TV9ERUJVR19EUklWRVIoIlJQZSBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIsCisJCQkgaW50ZWxf Z3B1X2ZyZXEocnBzLCBycHMtPmVmZmljaWVudF9mcmVxKSwKKwkJCSBycHMtPmVmZmljaWVudF9m cmVxKTsKKworCXJwcy0+cnAxX2ZyZXEgPSBjaHZfcnBzX2d1YXJfZnJlcShycHMpOworCURSTV9E RUJVR19EUklWRVIoIlJQMShHdWFyKSBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIsCisJCQkgaW50 ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPnJwMV9mcmVxKSwKKwkJCSBycHMtPnJwMV9mcmVxKTsKKwor CXJwcy0+bWluX2ZyZXEgPSBjaHZfcnBzX21pbl9mcmVxKHJwcyk7CisJRFJNX0RFQlVHX0RSSVZF UigibWluIEdQVSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKKwkJCSBpbnRlbF9ncHVfZnJlcShycHMs IHJwcy0+bWluX2ZyZXEpLAorCQkJIHJwcy0+bWluX2ZyZXEpOworCisJdmx2X2lvc2Zfc2JfcHV0 KGk5MTUsCisJCQlCSVQoVkxWX0lPU0ZfU0JfUFVOSVQpIHwKKwkJCUJJVChWTFZfSU9TRl9TQl9O QykgfAorCQkJQklUKFZMVl9JT1NGX1NCX0NDSykpOworCisJV0FSTl9PTkNFKChycHMtPm1heF9m cmVxIHwgcnBzLT5lZmZpY2llbnRfZnJlcSB8IHJwcy0+cnAxX2ZyZXEgfAorCQkgICBycHMtPm1p bl9mcmVxKSAmIDEsCisJCSAgIk9kZCBHUFUgZnJlcSB2YWx1ZXNcbiIpOworfQorCitzdGF0aWMg dm9pZCB2bHZfYzBfcmVhZChzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUsIHN0cnVjdCBpbnRl bF9ycHNfZWkgKmVpKQoreworCWVpLT5rdGltZSA9IGt0aW1lX2dldF9yYXcoKTsKKwllaS0+cmVu ZGVyX2MwID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBWTFZfUkVOREVSX0MwX0NPVU5UKTsK KwllaS0+bWVkaWFfYzAgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFZMVl9NRURJQV9DMF9D T1VOVCk7Cit9CisKK3N0YXRpYyB1MzIgdmx2X3dhX2MwX2VpKHN0cnVjdCBpbnRlbF9ycHMgKnJw cywgdTMyIHBtX2lpcikKK3sKKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBycHNfdG9f dW5jb3JlKHJwcyk7CisJY29uc3Qgc3RydWN0IGludGVsX3Jwc19laSAqcHJldiA9ICZycHMtPmVp OworCXN0cnVjdCBpbnRlbF9ycHNfZWkgbm93OworCXUzMiBldmVudHMgPSAwOworCisJaWYgKChw bV9paXIgJiBHRU42X1BNX1JQX1VQX0VJX0VYUElSRUQpID09IDApCisJCXJldHVybiAwOworCisJ dmx2X2MwX3JlYWQodW5jb3JlLCAmbm93KTsKKworCWlmIChwcmV2LT5rdGltZSkgeworCQl1NjQg dGltZSwgYzA7CisJCXUzMiByZW5kZXIsIG1lZGlhOworCisJCXRpbWUgPSBrdGltZV91c19kZWx0 YShub3cua3RpbWUsIHByZXYtPmt0aW1lKTsKKworCQl0aW1lICo9IHJwc190b19pOTE1KHJwcykt PmN6Y2xrX2ZyZXE7CisKKwkJLyogV29ya2xvYWQgY2FuIGJlIHNwbGl0IGJldHdlZW4gcmVuZGVy ICsgbWVkaWEsCisJCSAqIGUuZy4gU3dhcEJ1ZmZlcnMgYmVpbmcgYmxpdHRlZCBpbiBYIGFmdGVy IGJlaW5nIHJlbmRlcmVkIGluCisJCSAqIG1lc2EuIFRvIGFjY291bnQgZm9yIHRoaXMgd2UgbmVl ZCB0byBjb21iaW5lIGJvdGggZW5naW5lcworCQkgKiBpbnRvIG91ciBhY3Rpdml0eSBjb3VudGVy LgorCQkgKi8KKwkJcmVuZGVyID0gbm93LnJlbmRlcl9jMCAtIHByZXYtPnJlbmRlcl9jMDsKKwkJ bWVkaWEgPSBub3cubWVkaWFfYzAgLSBwcmV2LT5tZWRpYV9jMDsKKwkJYzAgPSBtYXgocmVuZGVy LCBtZWRpYSk7CisJCWMwICo9IDEwMDAgKiAxMDAgPDwgODsgLyogdG8gdXNlY3MgYW5kIHNjYWxl IHRvIHRocmVzaG9sZCUgKi8KKworCQlpZiAoYzAgPiB0aW1lICogcnBzLT5wb3dlci51cF90aHJl c2hvbGQpCisJCQlldmVudHMgPSBHRU42X1BNX1JQX1VQX1RIUkVTSE9MRDsKKwkJZWxzZSBpZiAo YzAgPCB0aW1lICogcnBzLT5wb3dlci5kb3duX3RocmVzaG9sZCkKKwkJCWV2ZW50cyA9IEdFTjZf UE1fUlBfRE9XTl9USFJFU0hPTEQ7CisJfQorCisJcnBzLT5laSA9IG5vdzsKKwlyZXR1cm4gZXZl bnRzOworfQorCitzdGF0aWMgdm9pZCBycHNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsp Cit7CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigq cnBzKSwgd29yayk7CisJc3RydWN0IGludGVsX2d0ICpndCA9IHJwc190b19ndChycHMpOworCWJv b2wgY2xpZW50X2Jvb3N0ID0gZmFsc2U7CisJaW50IG5ld19mcmVxLCBhZGosIG1pbiwgbWF4Owor CXUzMiBwbV9paXIgPSAwOworCisJc3Bpbl9sb2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKKwlwbV9p aXIgPSBmZXRjaF9hbmRfemVybygmcnBzLT5wbV9paXIpOworCWNsaWVudF9ib29zdCA9IGF0b21p Y19yZWFkKCZycHMtPm51bV93YWl0ZXJzKTsKKwlzcGluX3VubG9ja19pcnEoJmd0LT5pcnFfbG9j ayk7CisKKwkvKiBNYWtlIHN1cmUgd2UgZGlkbid0IHF1ZXVlIGFueXRoaW5nIHdlJ3JlIG5vdCBn b2luZyB0byBwcm9jZXNzLiAqLworCWlmICgocG1faWlyICYgcnBzLT5wbV9ldmVudHMpID09IDAg JiYgIWNsaWVudF9ib29zdCkKKwkJZ290byBvdXQ7CisKKwltdXRleF9sb2NrKCZycHMtPmxvY2sp OworCisJcG1faWlyIHw9IHZsdl93YV9jMF9laShycHMsIHBtX2lpcik7CisKKwlhZGogPSBycHMt Pmxhc3RfYWRqOworCW5ld19mcmVxID0gcnBzLT5jdXJfZnJlcTsKKwltaW4gPSBycHMtPm1pbl9m cmVxX3NvZnRsaW1pdDsKKwltYXggPSBycHMtPm1heF9mcmVxX3NvZnRsaW1pdDsKKwlpZiAoY2xp ZW50X2Jvb3N0KQorCQltYXggPSBycHMtPm1heF9mcmVxOworCWlmIChjbGllbnRfYm9vc3QgJiYg bmV3X2ZyZXEgPCBycHMtPmJvb3N0X2ZyZXEpIHsKKwkJbmV3X2ZyZXEgPSBycHMtPmJvb3N0X2Zy ZXE7CisJCWFkaiA9IDA7CisJfSBlbHNlIGlmIChwbV9paXIgJiBHRU42X1BNX1JQX1VQX1RIUkVT SE9MRCkgeworCQlpZiAoYWRqID4gMCkKKwkJCWFkaiAqPSAyOworCQllbHNlIC8qIENIViBuZWVk cyBldmVuIGVuY29kZSB2YWx1ZXMgKi8KKwkJCWFkaiA9IElTX0NIRVJSWVZJRVcoZ3QtPmk5MTUp ID8gMiA6IDE7CisKKwkJaWYgKG5ld19mcmVxID49IHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KQor CQkJYWRqID0gMDsKKwl9IGVsc2UgaWYgKGNsaWVudF9ib29zdCkgeworCQlhZGogPSAwOworCX0g ZWxzZSBpZiAocG1faWlyICYgR0VONl9QTV9SUF9ET1dOX1RJTUVPVVQpIHsKKwkJaWYgKHJwcy0+ Y3VyX2ZyZXEgPiBycHMtPmVmZmljaWVudF9mcmVxKQorCQkJbmV3X2ZyZXEgPSBycHMtPmVmZmlj aWVudF9mcmVxOworCQllbHNlIGlmIChycHMtPmN1cl9mcmVxID4gcnBzLT5taW5fZnJlcV9zb2Z0 bGltaXQpCisJCQluZXdfZnJlcSA9IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0OworCQlhZGogPSAw OworCX0gZWxzZSBpZiAocG1faWlyICYgR0VONl9QTV9SUF9ET1dOX1RIUkVTSE9MRCkgeworCQlp ZiAoYWRqIDwgMCkKKwkJCWFkaiAqPSAyOworCQllbHNlIC8qIENIViBuZWVkcyBldmVuIGVuY29k ZSB2YWx1ZXMgKi8KKwkJCWFkaiA9IElTX0NIRVJSWVZJRVcoZ3QtPmk5MTUpID8gLTIgOiAtMTsK KworCQlpZiAobmV3X2ZyZXEgPD0gcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQpCisJCQlhZGogPSAw OworCX0gZWxzZSB7IC8qIHVua25vd24gZXZlbnQgKi8KKwkJYWRqID0gMDsKKwl9CisKKwlycHMt Pmxhc3RfYWRqID0gYWRqOworCisJLyoKKwkgKiBMaW1pdCBkZWJvb3N0aW5nIGFuZCBib29zdGlu ZyB0byBrZWVwIG91cnNlbHZlcyBhdCB0aGUgZXh0cmVtZXMKKwkgKiB3aGVuIGluIHRoZSByZXNw ZWN0aXZlIHBvd2VyIG1vZGVzIChpLmUuIHNsb3dseSBkZWNyZWFzZSBmcmVxdWVuY2llcworCSAq IHdoaWxlIGluIHRoZSBISUdIX1BPV0VSIHpvbmUgYW5kIHNsb3dseSBpbmNyZWFzZSBmcmVxdWVu Y2llcyB3aGlsZQorCSAqIGluIHRoZSBMT1dfUE9XRVIgem9uZSkuIE9uIGlkbGUsIHdlIHdpbGwg aGl0IHRoZSB0aW1lb3V0IGFuZCBkcm9wCisJICogdG8gdGhlIG5leHQgbGV2ZWwgcXVpY2tseSwg YW5kIGNvbnZlcnNlbHkgaWYgYnVzeSB3ZSBleHBlY3QgdG8KKwkgKiBoaXQgYSB3YWl0Ym9vc3Qg YW5kIHJhcGlkbHkgc3dpdGNoIGludG8gbWF4IHBvd2VyLgorCSAqLworCWlmICgoYWRqIDwgMCAm JiBycHMtPnBvd2VyLm1vZGUgPT0gSElHSF9QT1dFUikgfHwKKwkgICAgKGFkaiA+IDAgJiYgcnBz LT5wb3dlci5tb2RlID09IExPV19QT1dFUikpCisJCXJwcy0+bGFzdF9hZGogPSAwOworCisJLyog c3lzZnMgZnJlcXVlbmN5IGludGVyZmFjZXMgbWF5IGhhdmUgc251Y2sgaW4gd2hpbGUgc2Vydmlj aW5nIHRoZQorCSAqIGludGVycnVwdAorCSAqLworCW5ld19mcmVxICs9IGFkajsKKwluZXdfZnJl cSA9IGNsYW1wX3QoaW50LCBuZXdfZnJlcSwgbWluLCBtYXgpOworCisJaWYgKGludGVsX3Jwc19z ZXQocnBzLCBuZXdfZnJlcSkpIHsKKwkJRFJNX0RFQlVHX0RSSVZFUigiRmFpbGVkIHRvIHNldCBu ZXcgR1BVIGZyZXF1ZW5jeVxuIik7CisJCXJwcy0+bGFzdF9hZGogPSAwOworCX0KKworCW11dGV4 X3VubG9jaygmcnBzLT5sb2NrKTsKKworb3V0OgorCXNwaW5fbG9ja19pcnEoJmd0LT5pcnFfbG9j ayk7CisJZ2VuNl9ndF9wbV91bm1hc2tfaXJxKGd0LCBycHMtPnBtX2V2ZW50cyk7CisJc3Bpbl91 bmxvY2tfaXJxKCZndC0+aXJxX2xvY2spOworfQorCit2b2lkIGdlbjExX3Jwc19pcnFfaGFuZGxl cihzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIHUzMiBwbV9paXIpCit7CisJc3RydWN0IGludGVsX2d0 ICpndCA9IHJwc190b19ndChycHMpOworCWNvbnN0IHUzMiBldmVudHMgPSBycHMtPnBtX2V2ZW50 cyAmIHBtX2lpcjsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmd0LT5pcnFfbG9jayk7CisKKwlp ZiAodW5saWtlbHkoIWV2ZW50cykpCisJCXJldHVybjsKKworCWdlbjZfZ3RfcG1fbWFza19pcnEo Z3QsIGV2ZW50cyk7CisKKwlycHMtPnBtX2lpciB8PSBldmVudHM7CisJc2NoZWR1bGVfd29yaygm cnBzLT53b3JrKTsKK30KKwordm9pZCBnZW42X3Jwc19pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxf cnBzICpycHMsIHUzMiBwbV9paXIpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUg PSBycHNfdG9faTkxNShycHMpOworCisJaWYgKHBtX2lpciAmIHJwcy0+cG1fZXZlbnRzKSB7CisJ CXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBycHNfdG9fZ3QocnBzKTsKKworCQlzcGluX2xvY2soJmd0 LT5pcnFfbG9jayk7CisJCWdlbjZfZ3RfcG1fbWFza19pcnEoZ3QsIHBtX2lpciAmIHJwcy0+cG1f ZXZlbnRzKTsKKwkJcnBzLT5wbV9paXIgfD0gcG1faWlyICYgcnBzLT5wbV9ldmVudHM7CisJCXNj aGVkdWxlX3dvcmsoJnJwcy0+d29yayk7CisJCXNwaW5fdW5sb2NrKCZndC0+aXJxX2xvY2spOwor CX0KKworCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOCkKKwkJcmV0dXJuOworCisJaWYgKHBtX2lp ciAmIFBNX1ZFQk9YX1VTRVJfSU5URVJSVVBUKQorCQlpbnRlbF9lbmdpbmVfYnJlYWRjcnVtYnNf aXJxKGk5MTUtPmVuZ2luZVtWRUNTMF0pOworCisJaWYgKHBtX2lpciAmIFBNX1ZFQk9YX0NTX0VS Uk9SX0lOVEVSUlVQVCkKKwkJRFJNX0RFQlVHKCJDb21tYW5kIHBhcnNlciBlcnJvciwgcG1faWly IDB4JTA4eFxuIiwgcG1faWlyKTsKK30KKwordm9pZCBnZW41X3Jwc19pcnFfaGFuZGxlcihzdHJ1 Y3QgaW50ZWxfcnBzICpycHMpCit7CisJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBz X3RvX3VuY29yZShycHMpOworCXUzMiBidXN5X3VwLCBidXN5X2Rvd24sIG1heF9hdmcsIG1pbl9h dmc7CisJdTggbmV3X2ZyZXE7CisKKwlzcGluX2xvY2soJm1jaGRldl9sb2NrKTsKKworCWludGVs X3VuY29yZV93cml0ZTE2KHVuY29yZSwKKwkJCSAgICAgTUVNSU5UUlNUUywKKwkJCSAgICAgaW50 ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBNRU1JTlRSU1RTKSk7CisKKwlpbnRlbF91bmNvcmVfd3Jp dGUxNih1bmNvcmUsIE1FTUlOVFJTVFMsIE1FTUlOVF9FVkFMX0NIRyk7CisJYnVzeV91cCA9IGlu dGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUkNQUkVWQlNZVFVQQVZHKTsKKwlidXN5X2Rvd24gPSBp bnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFJDUFJFVkJTWVRETkFWRyk7CisJbWF4X2F2ZyA9IGlu dGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUkNCTUFYQVZHKTsKKwltaW5fYXZnID0gaW50ZWxfdW5j b3JlX3JlYWQodW5jb3JlLCBSQ0JNSU5BVkcpOworCisJLyogSGFuZGxlIFJDUyBjaGFuZ2UgcmVx dWVzdCBmcm9tIGh3ICovCisJbmV3X2ZyZXEgPSBycHMtPmN1cl9mcmVxOworCWlmIChidXN5X3Vw ID4gbWF4X2F2ZykKKwkJbmV3X2ZyZXErKzsKKwllbHNlIGlmIChidXN5X2Rvd24gPCBtaW5fYXZn KQorCQluZXdfZnJlcS0tOworCW5ld19mcmVxID0gY2xhbXAobmV3X2ZyZXEsCisJCQkgcnBzLT5t aW5fZnJlcV9zb2Z0bGltaXQsCisJCQkgcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQpOworCisJaWYg KG5ld19mcmVxICE9IHJwcy0+Y3VyX2ZyZXEgJiYgZ2VuNV9ycHNfc2V0KHJwcywgbmV3X2ZyZXEp KQorCQlycHMtPmN1cl9mcmVxID0gbmV3X2ZyZXE7CisKKwlzcGluX3VubG9jaygmbWNoZGV2X2xv Y2spOworfQorCit2b2lkIGludGVsX3Jwc19pbml0KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisKKwlt dXRleF9pbml0KCZycHMtPmxvY2spOworCW11dGV4X2luaXQoJnJwcy0+cG93ZXIubXV0ZXgpOwor CisJSU5JVF9XT1JLKCZycHMtPndvcmssIHJwc193b3JrKTsKKworCWF0b21pY19zZXQoJnJwcy0+ bnVtX3dhaXRlcnMsIDApOworCisJaWYgKElTX0NIRVJSWVZJRVcoaTkxNSkpCisJCWNodl9ycHNf aW5pdChycHMpOworCWVsc2UgaWYgKElTX1ZBTExFWVZJRVcoaTkxNSkpCisJCXZsdl9ycHNfaW5p dChycHMpOworCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA2KQorCQlnZW42X3Jwc19pbml0 KHJwcyk7CisJZWxzZSBpZiAoSVNfSVJPTkxBS0VfTShpOTE1KSkKKwkJZ2VuNV9ycHNfaW5pdChy cHMpOworCisJLyogRGVyaXZlIGluaXRpYWwgdXNlciBwcmVmZXJlbmNlcy9saW1pdHMgZnJvbSB0 aGUgaGFyZHdhcmUgbGltaXRzICovCisJcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQgPSBycHMtPm1h eF9mcmVxOworCXJwcy0+bWluX2ZyZXFfc29mdGxpbWl0ID0gcnBzLT5taW5fZnJlcTsKKworCS8q IEFmdGVyIHNldHRpbmcgbWF4LXNvZnRsaW1pdCwgZmluZCB0aGUgb3ZlcmNsb2NrIG1heCBmcmVx ICovCisJaWYgKElTX0dFTihpOTE1LCA2KSB8fCBJU19JVllCUklER0UoaTkxNSkgfHwgSVNfSEFT V0VMTChpOTE1KSkgeworCQl1MzIgcGFyYW1zID0gMDsKKworCQlzYW5keWJyaWRnZV9wY29kZV9y ZWFkKGk5MTUsIEdFTjZfUkVBRF9PQ19QQVJBTVMsCisJCQkJICAgICAgICZwYXJhbXMsIE5VTEwp OworCQlpZiAocGFyYW1zICYgQklUKDMxKSkgeyAvKiBPQyBzdXBwb3J0ZWQgKi8KKwkJCURSTV9E RUJVR19EUklWRVIoIk92ZXJjbG9ja2luZyBzdXBwb3J0ZWQsIG1heDogJWRNSHosIG92ZXJjbG9j azogJWRNSHpcbiIsCisJCQkJCSAocnBzLT5tYXhfZnJlcSAmIDB4ZmYpICogNTAsCisJCQkJCSAo cGFyYW1zICYgMHhmZikgKiA1MCk7CisJCQlycHMtPm1heF9mcmVxID0gcGFyYW1zICYgMHhmZjsK KwkJfQorCX0KKworCS8qIEZpbmFsbHkgYWxsb3cgdXMgdG8gYm9vc3QgdG8gbWF4IGJ5IGRlZmF1 bHQgKi8KKwlycHMtPmJvb3N0X2ZyZXEgPSBycHMtPm1heF9mcmVxOworCXJwcy0+aWRsZV9mcmVx ID0gcnBzLT5taW5fZnJlcTsKKwlycHMtPmN1cl9mcmVxID0gcnBzLT5pZGxlX2ZyZXE7CisKKwly cHMtPnBtX2ludHJtc2tfbWJ6ID0gMDsKKworCS8qCisJICogU05CLElWQixIU1cgY2FuIHdoaWxl IFZMVixDSFYgbWF5IGhhcmQgaGFuZyBvbiBsb29waW5nIGJhdGNoYnVmZmVyCisJICogaWYgR0VO Nl9QTV9VUF9FSV9FWFBJUkVEIGlzIG1hc2tlZC4KKwkgKgorCSAqIFRPRE86IHZlcmlmeSBpZiB0 aGlzIGNhbiBiZSByZXByb2R1Y2VkIG9uIFZMVixDSFYuCisJICovCisJaWYgKElOVEVMX0dFTihp OTE1KSA8PSA3KQorCQlycHMtPnBtX2ludHJtc2tfbWJ6IHw9IEdFTjZfUE1fUlBfVVBfRUlfRVhQ SVJFRDsKKworCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOCkKKwkJcnBzLT5wbV9pbnRybXNrX21i eiB8PSBHRU44X1BNSU5UUl9ESVNBQkxFX1JFRElSRUNUX1RPX0dVQzsKK30KKwordTMyIGludGVs X2dldF9jYWdmKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTMyIHJwc3RhdCkKK3sKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7CisJdTMyIGNhZ2Y7CisK KwlpZiAoSU5URUxfR0VOKGk5MTUpID49IDkpCisJCWNhZ2YgPSAocnBzdGF0ICYgR0VOOV9DQUdG X01BU0spID4+IEdFTjlfQ0FHRl9TSElGVDsKKwllbHNlIGlmIChJU19IQVNXRUxMKGk5MTUpIHx8 IElTX0JST0FEV0VMTChpOTE1KSkKKwkJY2FnZiA9IChycHN0YXQgJiBIU1dfQ0FHRl9NQVNLKSA+ PiBIU1dfQ0FHRl9TSElGVDsKKwllbHNlCisJCWNhZ2YgPSAocnBzdGF0ICYgR0VONl9DQUdGX01B U0spID4+IEdFTjZfQ0FHRl9TSElGVDsKKworCXJldHVybiAgY2FnZjsKK30KKworLyogRXh0ZXJu YWwgaW50ZXJmYWNlIGZvciBpbnRlbF9pcHMua28gKi8KKworc3RhdGljIHN0cnVjdCBkcm1faTkx NV9wcml2YXRlIF9fcmN1ICppcHNfbWNoZGV2OworCisvKioKKyAqIFRlbGxzIHRoZSBpbnRlbF9p cHMgZHJpdmVyIHRoYXQgdGhlIGk5MTUgZHJpdmVyIGlzIG5vdyBsb2FkZWQsIGlmCisgKiBJUFMg Z290IGxvYWRlZCBmaXJzdC4KKyAqCisgKiBUaGlzIGF3a3dhcmQgZGFuY2UgaXMgc28gdGhhdCBu ZWl0aGVyIG1vZHVsZSBoYXMgdG8gZGVwZW5kIG9uIHRoZQorICogb3RoZXIgaW4gb3JkZXIgZm9y IElQUyB0byBkbyB0aGUgYXBwcm9wcmlhdGUgY29tbXVuaWNhdGlvbiBvZgorICogR1BVIHR1cmJv IGxpbWl0cyB0byBpOTE1LgorICovCitzdGF0aWMgdm9pZAoraXBzX3BpbmdfZm9yX2k5MTVfbG9h ZCh2b2lkKQoreworCXZvaWQgKCpsaW5rKSh2b2lkKTsKKworCWxpbmsgPSBzeW1ib2xfZ2V0KGlw c19saW5rX3RvX2k5MTVfZHJpdmVyKTsKKwlpZiAobGluaykgeworCQlsaW5rKCk7CisJCXN5bWJv bF9wdXQoaXBzX2xpbmtfdG9faTkxNV9kcml2ZXIpOworCX0KK30KKwordm9pZCBpbnRlbF9ycHNf ZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKK3sKKwlzdHJ1Y3QgaW50ZWxf Z3QgKmd0ID0gcnBzX3RvX2d0KHJwcyk7CisKKwkvKgorCSAqIFdlIG9ubHkgcmVnaXN0ZXIgdGhl IGk5MTUgaXBzIHBhcnQgd2l0aCBpbnRlbC1pcHMgb25jZSBldmVyeXRoaW5nIGlzCisJICogc2V0 IHVwLCB0byBhdm9pZCBpbnRlbC1pcHMgc25lYWtpbmcgaW4gYW5kIHJlYWRpbmcgYm9ndXMgdmFs dWVzLgorCSAqLworCWlmIChJU19HRU4oZ3QtPmk5MTUsIDUpKSB7CisJCXJjdV9hc3NpZ25fcG9p bnRlcihpcHNfbWNoZGV2LCBndC0+aTkxNSk7CisJCWlwc19waW5nX2Zvcl9pOTE1X2xvYWQoKTsK Kwl9Cit9CisKK3ZvaWQgaW50ZWxfcnBzX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBpbnRlbF9y cHMgKnJwcykKK3sKKwlyY3VfYXNzaWduX3BvaW50ZXIoaXBzX21jaGRldiwgTlVMTCk7Cit9CisK K3N0YXRpYyBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqbWNoZGV2X2dldCh2b2lkKQoreworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1OworCisJcmN1X3JlYWRfbG9jaygpOworCWk5MTUg PSByY3VfZGVyZWZlcmVuY2UoaXBzX21jaGRldik7CisJaWYgKCFrcmVmX2dldF91bmxlc3NfemVy bygmaTkxNS0+ZHJtLnJlZikpCisJCWk5MTUgPSBOVUxMOworCXJjdV9yZWFkX3VubG9jaygpOwor CisJcmV0dXJuIGk5MTU7Cit9CisKKy8qKgorICogaTkxNV9yZWFkX21jaF92YWwgLSByZXR1cm4g dmFsdWUgZm9yIElQUyB1c2UKKyAqCisgKiBDYWxjdWxhdGUgYW5kIHJldHVybiBhIHZhbHVlIGZv ciB0aGUgSVBTIGRyaXZlciB0byB1c2Ugd2hlbiBkZWNpZGluZyB3aGV0aGVyCisgKiB3ZSBoYXZl IHRoZXJtYWwgYW5kIHBvd2VyIGhlYWRyb29tIHRvIGluY3JlYXNlIENQVSBvciBHUFUgcG93ZXIg YnVkZ2V0LgorICovCit1bnNpZ25lZCBsb25nIGk5MTVfcmVhZF9tY2hfdmFsKHZvaWQpCit7CisJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7CisJdW5zaWduZWQgbG9uZyBjaGlwc2V0X3Zh bCA9IDA7CisJdW5zaWduZWQgbG9uZyBncmFwaGljc192YWwgPSAwOworCWludGVsX3dha2VyZWZf dCB3YWtlcmVmOworCisJaTkxNSA9IG1jaGRldl9nZXQoKTsKKwlpZiAoIWk5MTUpCisJCXJldHVy biAwOworCisJd2l0aF9pbnRlbF9ydW50aW1lX3BtKCZpOTE1LT5ydW50aW1lX3BtLCB3YWtlcmVm KSB7CisJCXN0cnVjdCBpbnRlbF9pcHMgKmlwcyA9ICZpOTE1LT5ndC5ycHMuaXBzOworCisJCXNw aW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKKwkJY2hpcHNldF92YWwgPSBfX2lwc19jaGlwc2V0 X3ZhbChpcHMpOworCQlncmFwaGljc192YWwgPSBfX2lwc19nZnhfdmFsKGlwcyk7CisJCXNwaW5f dW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOworCX0KKworCWRybV9kZXZfcHV0KCZpOTE1LT5kcm0p OworCXJldHVybiBjaGlwc2V0X3ZhbCArIGdyYXBoaWNzX3ZhbDsKK30KK0VYUE9SVF9TWU1CT0xf R1BMKGk5MTVfcmVhZF9tY2hfdmFsKTsKKworLyoqCisgKiBpOTE1X2dwdV9yYWlzZSAtIHJhaXNl IEdQVSBmcmVxdWVuY3kgbGltaXQKKyAqCisgKiBSYWlzZSB0aGUgbGltaXQ7IElQUyBpbmRpY2F0 ZXMgd2UgaGF2ZSB0aGVybWFsIGhlYWRyb29tLgorICovCitib29sIGk5MTVfZ3B1X3JhaXNlKHZv aWQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7CisJc3RydWN0IGludGVsX3Jw cyAqcnBzOworCisJaTkxNSA9IG1jaGRldl9nZXQoKTsKKwlpZiAoIWk5MTUpCisJCXJldHVybiBm YWxzZTsKKworCXJwcyA9ICZpOTE1LT5ndC5ycHM7CisKKwlzcGluX2xvY2tfaXJxKCZtY2hkZXZf bG9jayk7CisJaWYgKHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0IDwgcnBzLT5tYXhfZnJlcSkKKwkJ cnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQrKzsKKwlzcGluX3VubG9ja19pcnEoJm1jaGRldl9sb2Nr KTsKKworCWRybV9kZXZfcHV0KCZpOTE1LT5kcm0pOworCXJldHVybiB0cnVlOworfQorRVhQT1JU X1NZTUJPTF9HUEwoaTkxNV9ncHVfcmFpc2UpOworCisvKioKKyAqIGk5MTVfZ3B1X2xvd2VyIC0g bG93ZXIgR1BVIGZyZXF1ZW5jeSBsaW1pdAorICoKKyAqIElQUyBpbmRpY2F0ZXMgd2UncmUgY2xv c2UgdG8gYSB0aGVybWFsIGxpbWl0LCBzbyB0aHJvdHRsZSBiYWNrIHRoZSBHUFUKKyAqIGZyZXF1 ZW5jeSBtYXhpbXVtLgorICovCitib29sIGk5MTVfZ3B1X2xvd2VyKHZvaWQpCit7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7CisJc3RydWN0IGludGVsX3JwcyAqcnBzOworCisJaTkx NSA9IG1jaGRldl9nZXQoKTsKKwlpZiAoIWk5MTUpCisJCXJldHVybiBmYWxzZTsKKworCXJwcyA9 ICZpOTE1LT5ndC5ycHM7CisKKwlzcGluX2xvY2tfaXJxKCZtY2hkZXZfbG9jayk7CisJaWYgKHJw cy0+bWF4X2ZyZXFfc29mdGxpbWl0ID4gcnBzLT5taW5fZnJlcSkKKwkJcnBzLT5tYXhfZnJlcV9z b2Z0bGltaXQtLTsKKwlzcGluX3VubG9ja19pcnEoJm1jaGRldl9sb2NrKTsKKworCWRybV9kZXZf cHV0KCZpOTE1LT5kcm0pOworCXJldHVybiB0cnVlOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaTkx NV9ncHVfbG93ZXIpOworCisvKioKKyAqIGk5MTVfZ3B1X2J1c3kgLSBpbmRpY2F0ZSBHUFUgYnVz aW5lc3MgdG8gSVBTCisgKgorICogVGVsbCB0aGUgSVBTIGRyaXZlciB3aGV0aGVyIG9yIG5vdCB0 aGUgR1BVIGlzIGJ1c3kuCisgKi8KK2Jvb2wgaTkxNV9ncHVfYnVzeSh2b2lkKQoreworCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1OworCWJvb2wgcmV0OworCisJaTkxNSA9IG1jaGRldl9n ZXQoKTsKKwlpZiAoIWk5MTUpCisJCXJldHVybiBmYWxzZTsKKworCXJldCA9IGk5MTUtPmd0LmF3 YWtlOworCisJZHJtX2Rldl9wdXQoJmk5MTUtPmRybSk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9S VF9TWU1CT0xfR1BMKGk5MTVfZ3B1X2J1c3kpOworCisvKioKKyAqIGk5MTVfZ3B1X3R1cmJvX2Rp c2FibGUgLSBkaXNhYmxlIGdyYXBoaWNzIHR1cmJvCisgKgorICogRGlzYWJsZSBncmFwaGljcyB0 dXJibyBieSByZXNldHRpbmcgdGhlIG1heCBmcmVxdWVuY3kgYW5kIHNldHRpbmcgdGhlCisgKiBj dXJyZW50IGZyZXF1ZW5jeSB0byB0aGUgZGVmYXVsdC4KKyAqLworYm9vbCBpOTE1X2dwdV90dXJi b19kaXNhYmxlKHZvaWQpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7CisJc3Ry dWN0IGludGVsX3JwcyAqcnBzOworCWJvb2wgcmV0OworCisJaTkxNSA9IG1jaGRldl9nZXQoKTsK KwlpZiAoIWk5MTUpCisJCXJldHVybiBmYWxzZTsKKworCXJwcyA9ICZpOTE1LT5ndC5ycHM7CisK KwlzcGluX2xvY2tfaXJxKCZtY2hkZXZfbG9jayk7CisJcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQg PSBycHMtPm1pbl9mcmVxOworCXJldCA9IGdlbjVfcnBzX3NldCgmaTkxNS0+Z3QucnBzLCBycHMt Pm1pbl9mcmVxKTsKKwlzcGluX3VubG9ja19pcnEoJm1jaGRldl9sb2NrKTsKKworCWRybV9kZXZf cHV0KCZpOTE1LT5kcm0pOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpOTE1 X2dwdV90dXJib19kaXNhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX3Jwcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45OTdhNGI0ZTAyMDcKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ycHMuaApAQCAtMCwwICsx LDM3IEBACisvKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAorICoKKyAqIENvcHly aWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBJTlRFTF9SUFNf SAorI2RlZmluZSBJTlRFTF9SUFNfSAorCisjaW5jbHVkZSAiaW50ZWxfcnBzX3R5cGVzLmgiCisK K3N0cnVjdCBpOTE1X3JlcXVlc3Q7CisKK3ZvaWQgaW50ZWxfcnBzX2luaXQoc3RydWN0IGludGVs X3JwcyAqcnBzKTsKKwordm9pZCBpbnRlbF9ycHNfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBpbnRl bF9ycHMgKnJwcyk7Cit2b2lkIGludGVsX3Jwc19kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgaW50 ZWxfcnBzICpycHMpOworCit2b2lkIGludGVsX3Jwc19lbmFibGUoc3RydWN0IGludGVsX3JwcyAq cnBzKTsKK3ZvaWQgaW50ZWxfcnBzX2Rpc2FibGUoc3RydWN0IGludGVsX3JwcyAqcnBzKTsKKwor dm9pZCBpbnRlbF9ycHNfcGFyayhzdHJ1Y3QgaW50ZWxfcnBzICpycHMpOwordm9pZCBpbnRlbF9y cHNfdW5wYXJrKHN0cnVjdCBpbnRlbF9ycHMgKnJwcyk7Cit2b2lkIGludGVsX3Jwc19ib29zdChz dHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSk7CisKK2ludCBpbnRlbF9ycHNfc2V0KHN0cnVjdCBpbnRl bF9ycHMgKnJwcywgdTggdmFsKTsKK3ZvaWQgaW50ZWxfcnBzX21hcmtfaW50ZXJhY3RpdmUoc3Ry dWN0IGludGVsX3JwcyAqcnBzLCBib29sIGludGVyYWN0aXZlKTsKKworaW50IGludGVsX2dwdV9m cmVxKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgaW50IHZhbCk7CitpbnQgaW50ZWxfZnJlcV9vcGNv ZGUoc3RydWN0IGludGVsX3JwcyAqcnBzLCBpbnQgdmFsKTsKK3UzMiBpbnRlbF9nZXRfY2FnZihz dHJ1Y3QgaW50ZWxfcnBzICpycHMsIHUzMiBycHN0YXQxKTsKKwordm9pZCBnZW41X3Jwc19pcnFf aGFuZGxlcihzdHJ1Y3QgaW50ZWxfcnBzICpycHMpOwordm9pZCBnZW42X3Jwc19pcnFfaGFuZGxl cihzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIHUzMiBwbV9paXIpOwordm9pZCBnZW4xMV9ycHNfaXJx X2hhbmRsZXIoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1MzIgcG1faWlyKTsKKworI2VuZGlmIC8q IElOVEVMX1JQU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9ycHNfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jwc190eXBlcy5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNDBlYjFmYjY1MWU3Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzX3R5cGVz LmgKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQK KyAqCisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpZm5k ZWYgSU5URUxfUlBTX1RZUEVTX0gKKyNkZWZpbmUgSU5URUxfUlBTX1RZUEVTX0gKKworI2luY2x1 ZGUgPGxpbnV4L2F0b21pYy5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CisjaW5jbHVkZSA8 bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4 L3dvcmtxdWV1ZS5oPgorCitzdHJ1Y3QgaW50ZWxfaXBzIHsKKwl1NjQgbGFzdF9jb3VudDE7CisJ dW5zaWduZWQgbG9uZyBsYXN0X3RpbWUxOworCXVuc2lnbmVkIGxvbmcgY2hpcHNldF9wb3dlcjsK Kwl1NjQgbGFzdF9jb3VudDI7CisJdTY0IGxhc3RfdGltZTI7CisJdW5zaWduZWQgbG9uZyBnZnhf cG93ZXI7CisJdTggY29ycjsKKworCWludCBjLCBtOworfTsKKworc3RydWN0IGludGVsX3Jwc19l aSB7CisJa3RpbWVfdCBrdGltZTsKKwl1MzIgcmVuZGVyX2MwOworCXUzMiBtZWRpYV9jMDsKK307 CisKK3N0cnVjdCBpbnRlbF9ycHMgeworCXN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0cyBl bmFibGluZyBhbmQgdGhlIHdvcmtlciAqLworCisJLyoKKwkgKiB3b3JrLCBpbnRlcnJ1cHRzX2Vu YWJsZWQgYW5kIHBtX2lpciBhcmUgcHJvdGVjdGVkIGJ5CisJICogZGV2X3ByaXYtPmlycV9sb2Nr CisJICovCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJYm9vbCBlbmFibGVkOworCWJvb2wg YWN0aXZlOworCXUzMiBwbV9paXI7CisKKwkvKiBQTSBpbnRlcnJ1cHQgYml0cyB0aGF0IHNob3Vs ZCBuZXZlciBiZSBtYXNrZWQgKi8KKwl1MzIgcG1faW50cm1za19tYno7CisJdTMyIHBtX2V2ZW50 czsKKworCS8qIEZyZXF1ZW5jaWVzIGFyZSBzdG9yZWQgaW4gcG90ZW50aWFsbHkgcGxhdGZvcm0g ZGVwZW5kZW50IG11bHRpcGxlcy4KKwkgKiBJbiBvdGhlciB3b3JkcywgKl9mcmVxIG5lZWRzIHRv IGJlIG11bHRpcGxpZWQgYnkgWCB0byBiZSBpbnRlcmVzdGluZy4KKwkgKiBTb2Z0IGxpbWl0cyBh cmUgdGhvc2Ugd2hpY2ggYXJlIHVzZWQgZm9yIHRoZSBkeW5hbWljIHJlY2xvY2tpbmcgZG9uZQor CSAqIGJ5IHRoZSBkcml2ZXIgKHJhaXNlIGZyZXF1ZW5jaWVzIHVuZGVyIGhlYXZ5IGxvYWRzLCBh bmQgbG93ZXIgZm9yCisJICogbGlnaHRlciBsb2FkcykuIEhhcmQgbGltaXRzIGFyZSB0aG9zZSBp bXBvc2VkIGJ5IHRoZSBoYXJkd2FyZS4KKwkgKgorCSAqIEEgZGlzdGluY3Rpb24gaXMgbWFkZSBm b3Igb3ZlcmNsb2NraW5nLCB3aGljaCBpcyBuZXZlciBlbmFibGVkIGJ5CisJICogZGVmYXVsdCwg YW5kIGlzIGNvbnNpZGVyZWQgdG8gYmUgYWJvdmUgdGhlIGhhcmQgbGltaXQgaWYgaXQncworCSAq IHBvc3NpYmxlIGF0IGFsbC4KKwkgKi8KKwl1OCBjdXJfZnJlcTsJCS8qIEN1cnJlbnQgZnJlcXVl bmN5IChjYWNoZWQsIG1heSBub3QgPT0gSFcpICovCisJdTggbGFzdF9mcmVxOwkJLyogTGFzdCBz d3FyZXEgZnJlcXVlbmN5ICovCisJdTggbWluX2ZyZXFfc29mdGxpbWl0OwkvKiBNaW5pbXVtIGZy ZXF1ZW5jeSBwZXJtaXR0ZWQgYnkgdGhlIGRyaXZlciAqLworCXU4IG1heF9mcmVxX3NvZnRsaW1p dDsJLyogTWF4IGZyZXF1ZW5jeSBwZXJtaXR0ZWQgYnkgdGhlIGRyaXZlciAqLworCXU4IG1heF9m cmVxOwkJLyogTWF4aW11bSBmcmVxdWVuY3ksIFJQMCBpZiBub3Qgb3ZlcmNsb2NraW5nICovCisJ dTggbWluX2ZyZXE7CQkvKiBBS0EgUlBuLiBNaW5pbXVtIGZyZXF1ZW5jeSAqLworCXU4IGJvb3N0 X2ZyZXE7CQkvKiBGcmVxdWVuY3kgdG8gcmVxdWVzdCB3aGVuIHdhaXQgYm9vc3RpbmcgKi8KKwl1 OCBpZGxlX2ZyZXE7CQkvKiBGcmVxdWVuY3kgdG8gcmVxdWVzdCB3aGVuIHdlIGFyZSBpZGxlICov CisJdTggZWZmaWNpZW50X2ZyZXE7CS8qIEFLQSBSUGUuIFByZS1kZXRlcm1pbmVkIGJhbGFuY2Vk IGZyZXF1ZW5jeSAqLworCXU4IHJwMV9mcmVxOwkJLyogImxlc3MgdGhhbiIgUlAwIHBvd2VyL2Zy ZXFlbmN5ICovCisJdTggcnAwX2ZyZXE7CQkvKiBOb24tb3ZlcmNsb2NrZWQgbWF4IGZyZXF1ZW5j eS4gKi8KKwl1MTYgZ3BsbF9yZWZfZnJlcTsJLyogdmx2L2NodiBHUExMIHJlZmVyZW5jZSBmcmVx dWVuY3kgKi8KKworCWludCBsYXN0X2FkajsKKworCXN0cnVjdCB7CisJCXN0cnVjdCBtdXRleCBt dXRleDsKKworCQllbnVtIHsgTE9XX1BPV0VSLCBCRVRXRUVOLCBISUdIX1BPV0VSIH0gbW9kZTsK KwkJdW5zaWduZWQgaW50IGludGVyYWN0aXZlOworCisJCXU4IHVwX3RocmVzaG9sZDsgLyogQ3Vy cmVudCAlYnVzeSByZXF1aXJlZCB0byB1cGxvY2sgKi8KKwkJdTggZG93bl90aHJlc2hvbGQ7IC8q IEN1cnJlbnQgJWJ1c3kgcmVxdWlyZWQgdG8gZG93bmNsb2NrICovCisJfSBwb3dlcjsKKworCWF0 b21pY190IG51bV93YWl0ZXJzOworCWF0b21pY190IGJvb3N0czsKKworCS8qIG1hbnVhbCB3YSBy ZXNpZGVuY3kgY2FsY3VsYXRpb25zICovCisJc3RydWN0IGludGVsX3Jwc19laSBlaTsKKwlzdHJ1 Y3QgaW50ZWxfaXBzIGlwczsKK307CisKKyNlbmRpZiAvKiBJTlRFTF9SUFNfVFlQRVNfSCAqLwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbGxjLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9sbGMuYwppbmRleCBhNzA1Nzc4NWU0MjAuLmZk Mzc3MGU0OGFjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3Rf bGxjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbGxjLmMKQEAgLTYs NiArNiw3IEBACiAKICNpbmNsdWRlICJpbnRlbF9wbS5oIiAvKiBpbnRlbF9ncHVfZnJlcSgpICov CiAjaW5jbHVkZSAic2VsZnRlc3RfbGxjLmgiCisjaW5jbHVkZSAiaW50ZWxfcnBzLmgiCiAKIHN0 YXRpYyBpbnQgZ2VuNl92ZXJpZnlfcmluZ19mcmVxKHN0cnVjdCBpbnRlbF9sbGMgKmxsYykKIHsK QEAgLTI1LDYgKzI2LDggQEAgc3RhdGljIGludCBnZW42X3ZlcmlmeV9yaW5nX2ZyZXEoc3RydWN0 IGludGVsX2xsYyAqbGxjKQogCWZvciAoZ3B1X2ZyZXEgPSBjb25zdHMubWluX2dwdV9mcmVxOwog CSAgICAgZ3B1X2ZyZXEgPD0gY29uc3RzLm1heF9ncHVfZnJlcTsKIAkgICAgIGdwdV9mcmVxKysp IHsKKwkJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmxsY190b19ndChsbGMpLT5ycHM7CisKIAkJ dW5zaWduZWQgaW50IGlhX2ZyZXEsIHJpbmdfZnJlcSwgZm91bmQ7CiAJCXUzMiB2YWw7CiAKQEAg LTQ0LDcgKzQ3LDcgQEAgc3RhdGljIGludCBnZW42X3ZlcmlmeV9yaW5nX2ZyZXEoc3RydWN0IGlu dGVsX2xsYyAqbGxjKQogCQlpZiAoZm91bmQgIT0gaWFfZnJlcSkgewogCQkJcHJfZXJyKCJNaW4g ZnJlcSB0YWJsZSglZC9bJWQsICVkXSk6JWRNSHogZGlkIG5vdCBtYXRjaCBleHBlY3RlZCBDUFUg ZnJlcSwgZm91bmQgJWQsIGV4cGVjdGVkICVkXG4iLAogCQkJICAgICAgIGdwdV9mcmVxLCBjb25z dHMubWluX2dwdV9mcmVxLCBjb25zdHMubWF4X2dwdV9mcmVxLAotCQkJICAgICAgIGludGVsX2dw dV9mcmVxKGk5MTUsIGdwdV9mcmVxICogKElOVEVMX0dFTihpOTE1KSA+PSA5ID8gR0VOOV9GUkVR X1NDQUxFUiA6IDEpKSwKKwkJCSAgICAgICBpbnRlbF9ncHVfZnJlcShycHMsIGdwdV9mcmVxICog KElOVEVMX0dFTihpOTE1KSA+PSA5ID8gR0VOOV9GUkVRX1NDQUxFUiA6IDEpKSwKIAkJCSAgICAg ICBmb3VuZCwgaWFfZnJlcSk7CiAJCQllcnIgPSAtRUlOVkFMOwogCQkJYnJlYWs7CkBAIC01NCw3 ICs1Nyw3IEBAIHN0YXRpYyBpbnQgZ2VuNl92ZXJpZnlfcmluZ19mcmVxKHN0cnVjdCBpbnRlbF9s bGMgKmxsYykKIAkJaWYgKGZvdW5kICE9IHJpbmdfZnJlcSkgewogCQkJcHJfZXJyKCJNaW4gZnJl cSB0YWJsZSglZC9bJWQsICVkXSk6JWRNSHogZGlkIG5vdCBtYXRjaCBleHBlY3RlZCByaW5nIGZy ZXEsIGZvdW5kICVkLCBleHBlY3RlZCAlZFxuIiwKIAkJCSAgICAgICBncHVfZnJlcSwgY29uc3Rz Lm1pbl9ncHVfZnJlcSwgY29uc3RzLm1heF9ncHVfZnJlcSwKLQkJCSAgICAgICBpbnRlbF9ncHVf ZnJlcShpOTE1LCBncHVfZnJlcSAqIChJTlRFTF9HRU4oaTkxNSkgPj0gOSA/IEdFTjlfRlJFUV9T Q0FMRVIgOiAxKSksCisJCQkgICAgICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBncHVfZnJlcSAqIChJ TlRFTF9HRU4oaTkxNSkgPj0gOSA/IEdFTjlfRlJFUV9TQ0FMRVIgOiAxKSksCiAJCQkgICAgICAg Zm91bmQsIHJpbmdfZnJlcSk7CiAJCQllcnIgPSAtRUlOVkFMOwogCQkJYnJlYWs7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYwppbmRleCAw MDllNTRhMzc2NGYuLjk3Yjg1OGNlNzY4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5jCkBAIC0xMDEwLDcgKzEwMTAsNyBAQCB2b2lk IGludGVsX2d1Y19zdWJtaXNzaW9uX2Zpbmkoc3RydWN0IGludGVsX2d1YyAqZ3VjKQogCiBzdGF0 aWMgdm9pZCBndWNfaW50ZXJydXB0c19jYXB0dXJlKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCiB7Ci0J c3RydWN0IGludGVsX3JwcyAqcnBzID0gJmd0LT5pOTE1LT5ndF9wbS5ycHM7CisJc3RydWN0IGlu dGVsX3JwcyAqcnBzID0gJmd0LT5ycHM7CiAJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0g Z3QtPnVuY29yZTsKIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CiAJZW51bSBpbnRl bF9lbmdpbmVfaWQgaWQ7CkBAIC0xMDU2LDcgKzEwNTYsNyBAQCBzdGF0aWMgdm9pZCBndWNfaW50 ZXJydXB0c19jYXB0dXJlKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCiAKIHN0YXRpYyB2b2lkIGd1Y19p bnRlcnJ1cHRzX3JlbGVhc2Uoc3RydWN0IGludGVsX2d0ICpndCkKIHsKLQlzdHJ1Y3QgaW50ZWxf cnBzICpycHMgPSAmZ3QtPmk5MTUtPmd0X3BtLnJwczsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMg PSAmZ3QtPnJwczsKIAlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBndC0+dW5jb3JlOwog CXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKIAllbnVtIGludGVsX2VuZ2luZV9pZCBp ZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKaW5kZXggMTYyMTE0MzBlYjc4Li4yMjk2 MjM3MzcyM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCkBAIC00NCw2ICs0NCw3 IEBACiAjaW5jbHVkZSAiZ3QvaW50ZWxfZ3RfcmVxdWVzdHMuaCIKICNpbmNsdWRlICJndC9pbnRl bF9yZXNldC5oIgogI2luY2x1ZGUgImd0L2ludGVsX3JjNi5oIgorI2luY2x1ZGUgImd0L2ludGVs X3Jwcy5oIgogI2luY2x1ZGUgImd0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmgiCiAKICNpbmNs dWRlICJpOTE1X2RlYnVnZnMuaCIKQEAgLTc5MSw3ICs3OTIsNyBAQCBzdGF0aWMgaW50IGk5MTVf ZnJlcXVlbmN5X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCiB7CiAJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbm9kZV90b19pOTE1KG0tPnByaXZhdGUp OwogCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9ICZkZXZfcHJpdi0+dW5jb3JlOwotCXN0 cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOworCXN0cnVjdCBpbnRl bF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3QucnBzOwogCWludGVsX3dha2VyZWZfdCB3YWtlcmVm OwogCWludCByZXQgPSAwOwogCkBAIC04MjcsMjMgKzgyOCwyMyBAQCBzdGF0aWMgaW50IGk5MTVf ZnJlcXVlbmN5X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCiAJCXNlcV9w cmludGYobSwgIkREUiBmcmVxOiAlZCBNSHpcbiIsIGRldl9wcml2LT5tZW1fZnJlcSk7CiAKIAkJ c2VxX3ByaW50ZihtLCAiYWN0dWFsIEdQVSBmcmVxOiAlZCBNSHpcbiIsCi0JCQkgICBpbnRlbF9n cHVfZnJlcShkZXZfcHJpdiwgKGZyZXFfc3RzID4+IDgpICYgMHhmZikpOworCQkJICAgaW50ZWxf Z3B1X2ZyZXEocnBzLCAoZnJlcV9zdHMgPj4gOCkgJiAweGZmKSk7CiAKIAkJc2VxX3ByaW50Ziht LCAiY3VycmVudCBHUFUgZnJlcTogJWQgTUh6XG4iLAotCQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2 X3ByaXYsIHJwcy0+Y3VyX2ZyZXEpKTsKKwkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5j dXJfZnJlcSkpOwogCiAJCXNlcV9wcmludGYobSwgIm1heCBHUFUgZnJlcTogJWQgTUh6XG4iLAot CQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+bWF4X2ZyZXEpKTsKKwkJCSAgIGlu dGVsX2dwdV9mcmVxKHJwcywgcnBzLT5tYXhfZnJlcSkpOwogCiAJCXNlcV9wcmludGYobSwgIm1p biBHUFUgZnJlcTogJWQgTUh6XG4iLAotCQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJw cy0+bWluX2ZyZXEpKTsKKwkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5taW5fZnJlcSkp OwogCiAJCXNlcV9wcmludGYobSwgImlkbGUgR1BVIGZyZXE6ICVkIE1IelxuIiwKLQkJCSAgIGlu dGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPmlkbGVfZnJlcSkpOworCQkJICAgaW50ZWxfZ3B1 X2ZyZXEocnBzLCBycHMtPmlkbGVfZnJlcSkpOwogCiAJCXNlcV9wcmludGYobSwKIAkJCSAgICJl ZmZpY2llbnQgKFJQZSkgZnJlcXVlbmN5OiAlZCBNSHpcbiIsCi0JCQkgICBpbnRlbF9ncHVfZnJl cShkZXZfcHJpdiwgcnBzLT5lZmZpY2llbnRfZnJlcSkpOworCQkJICAgaW50ZWxfZ3B1X2ZyZXEo cnBzLCBycHMtPmVmZmljaWVudF9mcmVxKSk7CiAJfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDYpIHsKIAkJdTMyIHJwX3N0YXRlX2xpbWl0czsKIAkJdTMyIGd0X3BlcmZfc3RhdHVz OwpAQCAtODc3LDcgKzg3OCw3IEBAIHN0YXRpYyBpbnQgaTkxNV9mcmVxdWVuY3lfaW5mbyhzdHJ1 Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKIAkJCWVsc2UKIAkJCQlyZXFmID4+PSAyNTsK IAkJfQotCQlyZXFmID0gaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJlcWYpOworCQlyZXFmID0g aW50ZWxfZ3B1X2ZyZXEocnBzLCByZXFmKTsKIAogCQlycG1vZGVjdGwgPSBJOTE1X1JFQUQoR0VO Nl9SUF9DT05UUk9MKTsKIAkJcnBpbmNsaW1pdCA9IEk5MTVfUkVBRChHRU42X1JQX1VQX1RIUkVT SE9MRCk7CkBAIC04OTAsOCArODkxLDcgQEAgc3RhdGljIGludCBpOTE1X2ZyZXF1ZW5jeV9pbmZv KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogCQlycGRvd25laSA9IEk5MTVfUkVB RChHRU42X1JQX0NVUl9ET1dOX0VJKSAmIEdFTjZfQ1VSSUFWR19NQVNLOwogCQlycGN1cmRvd24g PSBJOTE1X1JFQUQoR0VONl9SUF9DVVJfRE9XTikgJiBHRU42X0NVUkJTWVRBVkdfTUFTSzsKIAkJ cnBwcmV2ZG93biA9IEk5MTVfUkVBRChHRU42X1JQX1BSRVZfRE9XTikgJiBHRU42X0NVUkJTWVRB VkdfTUFTSzsKLQkJY2FnZiA9IGludGVsX2dwdV9mcmVxKGRldl9wcml2LAotCQkJCSAgICAgIGlu dGVsX2dldF9jYWdmKGRldl9wcml2LCBycHN0YXQpKTsKKwkJY2FnZiA9IGludGVsX2dwdV9mcmVx KHJwcywgaW50ZWxfZ2V0X2NhZ2YocnBzLCBycHN0YXQpKTsKIAogCQlpbnRlbF91bmNvcmVfZm9y Y2V3YWtlX3B1dCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7CiAKQEAgLTk2OCwz NyArOTY4LDM3IEBAIHN0YXRpYyBpbnQgaTkxNV9mcmVxdWVuY3lfaW5mbyhzdHJ1Y3Qgc2VxX2Zp bGUgKm0sIHZvaWQgKnVudXNlZCkKIAkJbWF4X2ZyZXEgKj0gKElTX0dFTjlfQkMoZGV2X3ByaXYp IHx8CiAJCQkgICAgIElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgPyBHRU45X0ZSRVFfU0NBTEVS IDogMSk7CiAJCXNlcV9wcmludGYobSwgIkxvd2VzdCAoUlBOKSBmcmVxdWVuY3k6ICVkTUh6XG4i LAotCQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIG1heF9mcmVxKSk7CisJCQkgICBpbnRl bF9ncHVfZnJlcShycHMsIG1heF9mcmVxKSk7CiAKIAkJbWF4X2ZyZXEgPSAocnBfc3RhdGVfY2Fw ICYgMHhmZjAwKSA+PiA4OwogCQltYXhfZnJlcSAqPSAoSVNfR0VOOV9CQyhkZXZfcHJpdikgfHwK IAkJCSAgICAgSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCA/IEdFTjlfRlJFUV9TQ0FMRVIgOiAx KTsKIAkJc2VxX3ByaW50ZihtLCAiTm9taW5hbCAoUlAxKSBmcmVxdWVuY3k6ICVkTUh6XG4iLAot CQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIG1heF9mcmVxKSk7CisJCQkgICBpbnRlbF9n cHVfZnJlcShycHMsIG1heF9mcmVxKSk7CiAKIAkJbWF4X2ZyZXEgPSAoSVNfR0VOOV9MUChkZXZf cHJpdikgPyBycF9zdGF0ZV9jYXAgPj4gMTYgOgogCQkJICAgIHJwX3N0YXRlX2NhcCA+PiAwKSAm IDB4ZmY7CiAJCW1heF9mcmVxICo9IChJU19HRU45X0JDKGRldl9wcml2KSB8fAogCQkJICAgICBJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDEwID8gR0VOOV9GUkVRX1NDQUxFUiA6IDEpOwogCQlzZXFf cHJpbnRmKG0sICJNYXggbm9uLW92ZXJjbG9ja2VkIChSUDApIGZyZXF1ZW5jeTogJWRNSHpcbiIs Ci0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgbWF4X2ZyZXEpKTsKKwkJCSAgIGludGVs X2dwdV9mcmVxKHJwcywgbWF4X2ZyZXEpKTsKIAkJc2VxX3ByaW50ZihtLCAiTWF4IG92ZXJjbG9j a2VkIGZyZXF1ZW5jeTogJWRNSHpcbiIsCi0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwg cnBzLT5tYXhfZnJlcSkpOworCQkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1heF9mcmVx KSk7CiAKIAkJc2VxX3ByaW50ZihtLCAiQ3VycmVudCBmcmVxOiAlZCBNSHpcbiIsCi0JCQkgICBp bnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5jdXJfZnJlcSkpOworCQkJICAgaW50ZWxfZ3B1 X2ZyZXEocnBzLCBycHMtPmN1cl9mcmVxKSk7CiAJCXNlcV9wcmludGYobSwgIkFjdHVhbCBmcmVx OiAlZCBNSHpcbiIsIGNhZ2YpOwogCQlzZXFfcHJpbnRmKG0sICJJZGxlIGZyZXE6ICVkIE1Ielxu IiwKLQkJCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPmlkbGVfZnJlcSkpOworCQkJ ICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPmlkbGVfZnJlcSkpOwogCQlzZXFfcHJpbnRmKG0s ICJNaW4gZnJlcTogJWQgTUh6XG4iLAotCQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJw cy0+bWluX2ZyZXEpKTsKKwkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5taW5fZnJlcSkp OwogCQlzZXFfcHJpbnRmKG0sICJCb29zdCBmcmVxOiAlZCBNSHpcbiIsCi0JCQkgICBpbnRlbF9n cHVfZnJlcShkZXZfcHJpdiwgcnBzLT5ib29zdF9mcmVxKSk7CisJCQkgICBpbnRlbF9ncHVfZnJl cShycHMsIHJwcy0+Ym9vc3RfZnJlcSkpOwogCQlzZXFfcHJpbnRmKG0sICJNYXggZnJlcTogJWQg TUh6XG4iLAotCQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+bWF4X2ZyZXEpKTsK KwkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5tYXhfZnJlcSkpOwogCQlzZXFfcHJpbnRm KG0sCiAJCQkgICAiZWZmaWNpZW50IChSUGUpIGZyZXF1ZW5jeTogJWQgTUh6XG4iLAotCQkJICAg aW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+ZWZmaWNpZW50X2ZyZXEpKTsKKwkJCSAgIGlu dGVsX2dwdV9mcmVxKHJwcywgcnBzLT5lZmZpY2llbnRfZnJlcSkpOwogCX0gZWxzZSB7CiAJCXNl cV9wdXRzKG0sICJubyBQLXN0YXRlIGluZm8gYXZhaWxhYmxlXG4iKTsKIAl9CkBAIC0xNDYxLDcg KzE0NjEsNyBAQCBzdGF0aWMgaW50IGk5MTVfc3Jfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwg dm9pZCAqdW51c2VkKQogc3RhdGljIGludCBpOTE1X3JpbmdfZnJlcV90YWJsZShzdHJ1Y3Qgc2Vx X2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBz ID0gJmRldl9wcml2LT5ndF9wbS5ycHM7CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9w cml2LT5ndC5ycHM7CiAJdW5zaWduZWQgaW50IG1heF9ncHVfZnJlcSwgbWluX2dwdV9mcmVxOwog CWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwogCWludCBncHVfZnJlcSwgaWFfZnJlcTsKQEAgLTE0 ODYsMTAgKzE0ODYsMTEgQEAgc3RhdGljIGludCBpOTE1X3JpbmdfZnJlcV90YWJsZShzdHJ1Y3Qg c2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKIAkJCQkgICAgICAgR0VONl9QQ09ERV9SRUFEX01J Tl9GUkVRX1RBQkxFLAogCQkJCSAgICAgICAmaWFfZnJlcSwgTlVMTCk7CiAJCXNlcV9wcmludGYo bSwgIiVkXHRcdCVkXHRcdFx0XHQlZFxuIiwKLQkJCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2 LCAoZ3B1X2ZyZXEgKgotCQkJCQkJICAgICAoSVNfR0VOOV9CQyhkZXZfcHJpdikgfHwKLQkJCQkJ CSAgICAgIElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgPwotCQkJCQkJICAgICAgR0VOOV9GUkVR X1NDQUxFUiA6IDEpKSksCisJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsCisJCQkJCSAgKGdwdV9m cmVxICoKKwkJCQkJICAgKElTX0dFTjlfQkMoZGV2X3ByaXYpIHx8CisJCQkJCSAgICBJTlRFTF9H RU4oZGV2X3ByaXYpID49IDEwID8KKwkJCQkJICAgIEdFTjlfRlJFUV9TQ0FMRVIgOiAxKSkpLAog CQkJICAgKChpYV9mcmVxID4+IDApICYgMHhmZikgKiAxMDAsCiAJCQkgICAoKGlhX2ZyZXEgPj4g OCkgJiAweGZmKSAqIDEwMCk7CiAJfQpAQCAtMTcxNyw3ICsxNzE4LDcgQEAgc3RhdGljIGNvbnN0 IGNoYXIgKnJwc19wb3dlcl90b19zdHIodW5zaWduZWQgaW50IHBvd2VyKQogc3RhdGljIGludCBp OTE1X3Jwc19ib29zdF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKIHsKIAlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0 ZSk7Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7CisJc3Ry dWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndC5ycHM7CiAJdTMyIGFjdF9mcmVxID0g cnBzLT5jdXJfZnJlcTsKIAlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKIApAQCAtMTcyOSw3ICsx NzMwLDcgQEAgc3RhdGljIGludCBpOTE1X3Jwc19ib29zdF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAq bSwgdm9pZCAqZGF0YSkKIAkJCXZsdl9wdW5pdF9wdXQoZGV2X3ByaXYpOwogCQkJYWN0X2ZyZXEg PSAoYWN0X2ZyZXEgPj4gOCkgJiAweGZmOwogCQl9IGVsc2UgewotCQkJYWN0X2ZyZXEgPSBpbnRl bF9nZXRfY2FnZihkZXZfcHJpdiwKKwkJCWFjdF9mcmVxID0gaW50ZWxfZ2V0X2NhZ2YocnBzLAog CQkJCQkJICBJOTE1X1JFQUQoR0VONl9SUFNUQVQxKSk7CiAJCX0KIAl9CkBAIC0xNzQwLDE3ICsx NzQxLDE3IEBAIHN0YXRpYyBpbnQgaTkxNV9ycHNfYm9vc3RfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUg Km0sIHZvaWQgKmRhdGEpCiAJCSAgIGF0b21pY19yZWFkKCZycHMtPm51bV93YWl0ZXJzKSk7CiAJ c2VxX3ByaW50ZihtLCAiSW50ZXJhY3RpdmU/ICVkXG4iLCBSRUFEX09OQ0UocnBzLT5wb3dlci5p bnRlcmFjdGl2ZSkpOwogCXNlcV9wcmludGYobSwgIkZyZXF1ZW5jeSByZXF1ZXN0ZWQgJWQsIGFj dHVhbCAlZFxuIiwKLQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+Y3VyX2ZyZXEp LAotCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgYWN0X2ZyZXEpKTsKKwkJICAgaW50ZWxf Z3B1X2ZyZXEocnBzLCBycHMtPmN1cl9mcmVxKSwKKwkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBh Y3RfZnJlcSkpOwogCXNlcV9wcmludGYobSwgIiAgbWluIGhhcmQ6JWQsIHNvZnQ6JWQ7IG1heCBz b2Z0OiVkLCBoYXJkOiVkXG4iLAotCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5t aW5fZnJlcSksCi0JCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPm1pbl9mcmVxX3Nv ZnRsaW1pdCksCi0JCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPm1heF9mcmVxX3Nv ZnRsaW1pdCksCi0JCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPm1heF9mcmVxKSk7 CisJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5taW5fZnJlcSksCisJCSAgIGludGVsX2dw dV9mcmVxKHJwcywgcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQpLAorCQkgICBpbnRlbF9ncHVfZnJl cShycHMsIHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KSwKKwkJICAgaW50ZWxfZ3B1X2ZyZXEocnBz LCBycHMtPm1heF9mcmVxKSk7CiAJc2VxX3ByaW50ZihtLCAiICBpZGxlOiVkLCBlZmZpY2llbnQ6 JWQsIGJvb3N0OiVkXG4iLAotCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5pZGxl X2ZyZXEpLAotCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5lZmZpY2llbnRfZnJl cSksCi0JCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPmJvb3N0X2ZyZXEpKTsKKwkJ ICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPmlkbGVfZnJlcSksCisJCSAgIGludGVsX2dwdV9m cmVxKHJwcywgcnBzLT5lZmZpY2llbnRfZnJlcSksCisJCSAgIGludGVsX2dwdV9mcmVxKHJwcywg cnBzLT5ib29zdF9mcmVxKSk7CiAKIAlzZXFfcHJpbnRmKG0sICJXYWl0IGJvb3N0czogJWRcbiIs IGF0b21pY19yZWFkKCZycHMtPmJvb3N0cykpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRl eCA1MTM4ZDFlZWQzMDYuLjc4YWMwOGRiNDhhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCkBA IC0xODQxLDYgKzE4NDEsOCBAQCBzdGF0aWMgaW50IGk5MTVfZHJtX3Jlc3VtZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQogCiAJaW50ZWxfZHBfbXN0X3Jlc3VtZShkZXZfcHJpdik7CiAKKwlpbnRl bF9ndF9wbV9lbmFibGUoJmRldl9wcml2LT5ndCk7CisKIAlpbnRlbF9kaXNwbGF5X3Jlc3VtZShk ZXYpOwogCiAJZHJtX2ttc19oZWxwZXJfcG9sbF9lbmFibGUoZGV2KTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCmluZGV4IDg4ODJjMDkwOGMzYi4uZWI1NDYwMjkwODExIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmgKQEAgLTU0Myw5NCArNTQzLDYgQEAgc3RydWN0IGk5MTVfc3VzcGVuZF9zYXZlZF9y ZWdpc3RlcnMgewogCiBzdHJ1Y3Qgdmx2X3MwaXhfc3RhdGU7CiAKLXN0cnVjdCBpbnRlbF9ycHNf ZWkgewotCWt0aW1lX3Qga3RpbWU7Ci0JdTMyIHJlbmRlcl9jMDsKLQl1MzIgbWVkaWFfYzA7Ci19 OwotCi1zdHJ1Y3QgaW50ZWxfcnBzIHsKLQlzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdHMg ZW5hYmxpbmcgYW5kIHRoZSB3b3JrZXIgKi8KLQotCS8qCi0JICogd29yaywgaW50ZXJydXB0c19l bmFibGVkIGFuZCBwbV9paXIgYXJlIHByb3RlY3RlZCBieQotCSAqIGRldl9wcml2LT5pcnFfbG9j awotCSAqLwotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwotCWJvb2wgaW50ZXJydXB0c19lbmFi bGVkOwotCXUzMiBwbV9paXI7Ci0KLQkvKiBQTSBpbnRlcnJ1cHQgYml0cyB0aGF0IHNob3VsZCBu ZXZlciBiZSBtYXNrZWQgKi8KLQl1MzIgcG1faW50cm1za19tYno7Ci0KLQkvKiBGcmVxdWVuY2ll cyBhcmUgc3RvcmVkIGluIHBvdGVudGlhbGx5IHBsYXRmb3JtIGRlcGVuZGVudCBtdWx0aXBsZXMu Ci0JICogSW4gb3RoZXIgd29yZHMsICpfZnJlcSBuZWVkcyB0byBiZSBtdWx0aXBsaWVkIGJ5IFgg dG8gYmUgaW50ZXJlc3RpbmcuCi0JICogU29mdCBsaW1pdHMgYXJlIHRob3NlIHdoaWNoIGFyZSB1 c2VkIGZvciB0aGUgZHluYW1pYyByZWNsb2NraW5nIGRvbmUKLQkgKiBieSB0aGUgZHJpdmVyIChy YWlzZSBmcmVxdWVuY2llcyB1bmRlciBoZWF2eSBsb2FkcywgYW5kIGxvd2VyIGZvcgotCSAqIGxp Z2h0ZXIgbG9hZHMpLiBIYXJkIGxpbWl0cyBhcmUgdGhvc2UgaW1wb3NlZCBieSB0aGUgaGFyZHdh cmUuCi0JICoKLQkgKiBBIGRpc3RpbmN0aW9uIGlzIG1hZGUgZm9yIG92ZXJjbG9ja2luZywgd2hp Y2ggaXMgbmV2ZXIgZW5hYmxlZCBieQotCSAqIGRlZmF1bHQsIGFuZCBpcyBjb25zaWRlcmVkIHRv IGJlIGFib3ZlIHRoZSBoYXJkIGxpbWl0IGlmIGl0J3MKLQkgKiBwb3NzaWJsZSBhdCBhbGwuCi0J ICovCi0JdTggY3VyX2ZyZXE7CQkvKiBDdXJyZW50IGZyZXF1ZW5jeSAoY2FjaGVkLCBtYXkgbm90 ID09IEhXKSAqLwotCXU4IG1pbl9mcmVxX3NvZnRsaW1pdDsJLyogTWluaW11bSBmcmVxdWVuY3kg cGVybWl0dGVkIGJ5IHRoZSBkcml2ZXIgKi8KLQl1OCBtYXhfZnJlcV9zb2Z0bGltaXQ7CS8qIE1h eCBmcmVxdWVuY3kgcGVybWl0dGVkIGJ5IHRoZSBkcml2ZXIgKi8KLQl1OCBtYXhfZnJlcTsJCS8q IE1heGltdW0gZnJlcXVlbmN5LCBSUDAgaWYgbm90IG92ZXJjbG9ja2luZyAqLwotCXU4IG1pbl9m cmVxOwkJLyogQUtBIFJQbi4gTWluaW11bSBmcmVxdWVuY3kgKi8KLQl1OCBib29zdF9mcmVxOwkJ LyogRnJlcXVlbmN5IHRvIHJlcXVlc3Qgd2hlbiB3YWl0IGJvb3N0aW5nICovCi0JdTggaWRsZV9m cmVxOwkJLyogRnJlcXVlbmN5IHRvIHJlcXVlc3Qgd2hlbiB3ZSBhcmUgaWRsZSAqLwotCXU4IGVm ZmljaWVudF9mcmVxOwkvKiBBS0EgUlBlLiBQcmUtZGV0ZXJtaW5lZCBiYWxhbmNlZCBmcmVxdWVu Y3kgKi8KLQl1OCBycDFfZnJlcTsJCS8qICJsZXNzIHRoYW4iIFJQMCBwb3dlci9mcmVxZW5jeSAq LwotCXU4IHJwMF9mcmVxOwkJLyogTm9uLW92ZXJjbG9ja2VkIG1heCBmcmVxdWVuY3kuICovCi0J dTE2IGdwbGxfcmVmX2ZyZXE7CS8qIHZsdi9jaHYgR1BMTCByZWZlcmVuY2UgZnJlcXVlbmN5ICov Ci0KLQlpbnQgbGFzdF9hZGo7Ci0KLQlzdHJ1Y3QgewotCQlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Ci0K LQkJZW51bSB7IExPV19QT1dFUiwgQkVUV0VFTiwgSElHSF9QT1dFUiB9IG1vZGU7Ci0JCXVuc2ln bmVkIGludCBpbnRlcmFjdGl2ZTsKLQotCQl1OCB1cF90aHJlc2hvbGQ7IC8qIEN1cnJlbnQgJWJ1 c3kgcmVxdWlyZWQgdG8gdXBsb2NrICovCi0JCXU4IGRvd25fdGhyZXNob2xkOyAvKiBDdXJyZW50 ICVidXN5IHJlcXVpcmVkIHRvIGRvd25jbG9jayAqLwotCX0gcG93ZXI7Ci0KLQlib29sIGVuYWJs ZWQ7Ci0JYXRvbWljX3QgbnVtX3dhaXRlcnM7Ci0JYXRvbWljX3QgYm9vc3RzOwotCi0JLyogbWFu dWFsIHdhIHJlc2lkZW5jeSBjYWxjdWxhdGlvbnMgKi8KLQlzdHJ1Y3QgaW50ZWxfcnBzX2VpIGVp OwotfTsKLQotc3RydWN0IGludGVsX2dlbjZfcG93ZXJfbWdtdCB7Ci0Jc3RydWN0IGludGVsX3Jw cyBycHM7Ci19OwotCi0vKiBkZWZpbmVkIGludGVsX3BtLmMgKi8KLWV4dGVybiBzcGlubG9ja190 IG1jaGRldl9sb2NrOwotCi1zdHJ1Y3QgaW50ZWxfaWxrX3Bvd2VyX21nbXQgewotCXU4IGN1cl9k ZWxheTsKLQl1OCBtaW5fZGVsYXk7Ci0JdTggbWF4X2RlbGF5OwotCXU4IGZtYXg7Ci0JdTggZnN0 YXJ0OwotCi0JdTY0IGxhc3RfY291bnQxOwotCXVuc2lnbmVkIGxvbmcgbGFzdF90aW1lMTsKLQl1 bnNpZ25lZCBsb25nIGNoaXBzZXRfcG93ZXI7Ci0JdTY0IGxhc3RfY291bnQyOwotCXU2NCBsYXN0 X3RpbWUyOwotCXVuc2lnbmVkIGxvbmcgZ2Z4X3Bvd2VyOwotCXU4IGNvcnI7Ci0KLQlpbnQgY19t OwotCWludCByX3Q7Ci19OwotCiAjZGVmaW5lIE1BWF9MM19TTElDRVMgMgogc3RydWN0IGludGVs X2wzX3Bhcml0eSB7CiAJdTMyICpyZW1hcF9pbmZvW01BWF9MM19TTElDRVNdOwpAQCAtMTA2Nyw3 ICs5NzksNiBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7CiAJCXUzMiBpcnFfbWFzazsKIAkJ dTMyIGRlX2lycV9tYXNrW0k5MTVfTUFYX1BJUEVTXTsKIAl9OwotCXUzMiBwbV9ycHNfZXZlbnRz OwogCXUzMiBwaXBlc3RhdF9pcnFfbWFza1tJOTE1X01BWF9QSVBFU107CiAKIAlzdHJ1Y3QgaTkx NV9ob3RwbHVnIGhvdHBsdWc7CkBAIC0xMjAyLDEzICsxMTEzLDYgQEAgc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgewogCSAqLwogCXUzMiBlZHJhbV9zaXplX21iOwogCi0JLyogZ2VuNisgR1QgUE0g c3RhdGUgKi8KLQlzdHJ1Y3QgaW50ZWxfZ2VuNl9wb3dlcl9tZ210IGd0X3BtOwotCi0JLyogaWxr LW9ubHkgaXBzL3JwcyBzdGF0ZS4gRXZlcnl0aGluZyBpbiBoZXJlIGlzIHByb3RlY3RlZCBieSB0 aGUgZ2xvYmFsCi0JICogbWNoZGV2X2xvY2sgaW4gaW50ZWxfcG0uYyAqLwotCXN0cnVjdCBpbnRl bF9pbGtfcG93ZXJfbWdtdCBpcHM7Ci0KIAlzdHJ1Y3QgaTkxNV9wb3dlcl9kb21haW5zIHBvd2Vy X2RvbWFpbnM7CiAKIAlzdHJ1Y3QgaTkxNV9wc3IgcHNyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMK aW5kZXggYjg4Mjk4ODA1NmJkLi5lYWIxNzA5ZDE4OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0u YwpAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgImd0L2ludGVsX21vY3MuaCIKICNpbmNsdWRl ICJndC9pbnRlbF9yZXNldC5oIgogI2luY2x1ZGUgImd0L2ludGVsX3JlbmRlcnN0YXRlLmgiCisj aW5jbHVkZSAiZ3QvaW50ZWxfcnBzLmgiCiAjaW5jbHVkZSAiZ3QvaW50ZWxfd29ya2Fyb3VuZHMu aCIKIAogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCkBAIC0xMjcyLDggKzEyNzMsNiBAQCBpbnQgaTkx NV9nZW1faW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJCWdvdG8gZXJy X2NvbnRleHQ7CiAJfQogCi0JaW50ZWxfaW5pdF9ndF9wb3dlcnNhdmUoZGV2X3ByaXYpOwotCiAJ aW50ZWxfdWNfaW5pdCgmZGV2X3ByaXYtPmd0LnVjKTsKIAogCXJldCA9IGludGVsX2d0X2luaXRf aHcoJmRldl9wcml2LT5ndCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCA1NzJhNWMzN2Nj NjEuLjU5ODkyNGIzYzU1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9p cnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCkBAIC00NSw2ICs0NSw3 IEBACiAjaW5jbHVkZSAiZ3QvaW50ZWxfZ3QuaCIKICNpbmNsdWRlICJndC9pbnRlbF9ndF9pcnEu aCIKICNpbmNsdWRlICJndC9pbnRlbF9ndF9wbV9pcnEuaCIKKyNpbmNsdWRlICJndC9pbnRlbF9y cHMuaCIKIAogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCiAjaW5jbHVkZSAiaTkxNV9pcnEuaCIKQEAg LTMyNyw4NyArMzI4LDYgQEAgc3RhdGljIGk5MTVfcmVnX3QgZ2VuNl9wbV9paXIoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCXJldHVybiBJTlRFTF9HRU4oZGV2X3ByaXYpID49 IDggPyBHRU44X0dUX0lJUigyKSA6IEdFTjZfUE1JSVI7CiB9CiAKLXZvaWQgZ2VuMTFfcmVzZXRf cnBzX2ludGVycnVwdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXN0 cnVjdCBpbnRlbF9ndCAqZ3QgPSAmZGV2X3ByaXYtPmd0OwotCi0Jc3Bpbl9sb2NrX2lycSgmZ3Qt PmlycV9sb2NrKTsKLQotCXdoaWxlIChnZW4xMV9ndF9yZXNldF9vbmVfaWlyKGd0LCAwLCBHRU4x MV9HVFBNKSkKLQkJOwotCi0JZGV2X3ByaXYtPmd0X3BtLnJwcy5wbV9paXIgPSAwOwotCi0Jc3Bp bl91bmxvY2tfaXJxKCZndC0+aXJxX2xvY2spOwotfQotCi12b2lkIGdlbjZfcmVzZXRfcnBzX2lu dGVycnVwdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXN0cnVjdCBp bnRlbF9ndCAqZ3QgPSAmZGV2X3ByaXYtPmd0OwotCi0Jc3Bpbl9sb2NrX2lycSgmZ3QtPmlycV9s b2NrKTsKLQlnZW42X2d0X3BtX3Jlc2V0X2lpcihndCwgR0VONl9QTV9SUFNfRVZFTlRTKTsKLQlk ZXZfcHJpdi0+Z3RfcG0ucnBzLnBtX2lpciA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZndC0+aXJx X2xvY2spOwotfQotCi12b2lkIGdlbjZfZW5hYmxlX3Jwc19pbnRlcnJ1cHRzKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gJmRldl9w cml2LT5ndDsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsK LQotCWlmIChSRUFEX09OQ0UocnBzLT5pbnRlcnJ1cHRzX2VuYWJsZWQpKQotCQlyZXR1cm47Ci0K LQlzcGluX2xvY2tfaXJxKCZndC0+aXJxX2xvY2spOwotCVdBUk5fT05fT05DRShycHMtPnBtX2lp cik7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkKLQkJV0FSTl9PTl9PTkNFKGdl bjExX2d0X3Jlc2V0X29uZV9paXIoZ3QsIDAsIEdFTjExX0dUUE0pKTsKLQllbHNlCi0JCVdBUk5f T05fT05DRShJOTE1X1JFQUQoZ2VuNl9wbV9paXIoZGV2X3ByaXYpKSAmIGRldl9wcml2LT5wbV9y cHNfZXZlbnRzKTsKLQotCXJwcy0+aW50ZXJydXB0c19lbmFibGVkID0gdHJ1ZTsKLQlnZW42X2d0 X3BtX2VuYWJsZV9pcnEoZ3QsIGRldl9wcml2LT5wbV9ycHNfZXZlbnRzKTsKLQotCXNwaW5fdW5s b2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKLX0KLQotdTMyIGdlbjZfc2FuaXRpemVfcnBzX3BtX21h c2soY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHUzMiBtYXNrKQotewotCXJl dHVybiBtYXNrICYgfmk5MTUtPmd0X3BtLnJwcy5wbV9pbnRybXNrX21iejsKLX0KLQotdm9pZCBn ZW42X2Rpc2FibGVfcnBzX2ludGVycnVwdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQotewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwot CXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSAmZGV2X3ByaXYtPmd0OwotCi0JaWYgKCFSRUFEX09OQ0Uo cnBzLT5pbnRlcnJ1cHRzX2VuYWJsZWQpKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2tfaXJxKCZn dC0+aXJxX2xvY2spOwotCXJwcy0+aW50ZXJydXB0c19lbmFibGVkID0gZmFsc2U7Ci0KLQlJOTE1 X1dSSVRFKEdFTjZfUE1JTlRSTVNLLCBnZW42X3Nhbml0aXplX3Jwc19wbV9tYXNrKGRldl9wcml2 LCB+MHUpKTsKLQotCWdlbjZfZ3RfcG1fZGlzYWJsZV9pcnEoZ3QsIEdFTjZfUE1fUlBTX0VWRU5U Uyk7Ci0KLQlzcGluX3VubG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Ci0JaW50ZWxfc3luY2hyb25p emVfaXJxKGRldl9wcml2KTsKLQotCS8qIE5vdyB0aGF0IHdlIHdpbGwgbm90IGJlIGdlbmVyYXRp bmcgYW55IG1vcmUgd29yaywgZmx1c2ggYW55Ci0JICogb3V0c3RhbmRpbmcgdGFza3MuIEFzIHdl IGFyZSBjYWxsZWQgb24gdGhlIFJQUyBpZGxlIHBhdGgsCi0JICogd2Ugd2lsbCByZXNldCB0aGUg R1BVIHRvIG1pbmltdW0gZnJlcXVlbmNpZXMsIHNvIHRoZSBjdXJyZW50Ci0JICogc3RhdGUgb2Yg dGhlIHdvcmtlciBjYW4gYmUgZGlzY2FyZGVkLgotCSAqLwotCWNhbmNlbF93b3JrX3N5bmMoJnJw cy0+d29yayk7Ci0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEpCi0JCWdlbjExX3Jlc2V0 X3Jwc19pbnRlcnJ1cHRzKGRldl9wcml2KTsKLQllbHNlCi0JCWdlbjZfcmVzZXRfcnBzX2ludGVy cnVwdHMoZGV2X3ByaXYpOwotfQotCiB2b2lkIGdlbjlfcmVzZXRfZ3VjX2ludGVycnVwdHMoc3Ry dWN0IGludGVsX2d1YyAqZ3VjKQogewogCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBndWNfdG9fZ3Qo Z3VjKTsKQEAgLTEwNjUsMTk5ICs5ODUsNiBAQCBpbnQgaW50ZWxfZ2V0X2NydGNfc2NhbmxpbmUo c3RydWN0IGludGVsX2NydGMgKmNydGMpCiAJcmV0dXJuIHBvc2l0aW9uOwogfQogCi1zdGF0aWMg dm9pZCBpcm9ubGFrZV9ycHNfY2hhbmdlX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSAmZGV2X3By aXYtPnVuY29yZTsKLQl1MzIgYnVzeV91cCwgYnVzeV9kb3duLCBtYXhfYXZnLCBtaW5fYXZnOwot CXU4IG5ld19kZWxheTsKLQotCXNwaW5fbG9jaygmbWNoZGV2X2xvY2spOwotCi0JaW50ZWxfdW5j b3JlX3dyaXRlMTYodW5jb3JlLAotCQkJICAgICBNRU1JTlRSU1RTLAotCQkJICAgICBpbnRlbF91 bmNvcmVfcmVhZCh1bmNvcmUsIE1FTUlOVFJTVFMpKTsKLQotCW5ld19kZWxheSA9IGRldl9wcml2 LT5pcHMuY3VyX2RlbGF5OwotCi0JaW50ZWxfdW5jb3JlX3dyaXRlMTYodW5jb3JlLCBNRU1JTlRS U1RTLCBNRU1JTlRfRVZBTF9DSEcpOwotCWJ1c3lfdXAgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNv cmUsIFJDUFJFVkJTWVRVUEFWRyk7Ci0JYnVzeV9kb3duID0gaW50ZWxfdW5jb3JlX3JlYWQodW5j b3JlLCBSQ1BSRVZCU1lURE5BVkcpOwotCW1heF9hdmcgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNv cmUsIFJDQk1BWEFWRyk7Ci0JbWluX2F2ZyA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUkNC TUlOQVZHKTsKLQotCS8qIEhhbmRsZSBSQ1MgY2hhbmdlIHJlcXVlc3QgZnJvbSBodyAqLwotCWlm IChidXN5X3VwID4gbWF4X2F2ZykgewotCQlpZiAoZGV2X3ByaXYtPmlwcy5jdXJfZGVsYXkgIT0g ZGV2X3ByaXYtPmlwcy5tYXhfZGVsYXkpCi0JCQluZXdfZGVsYXkgPSBkZXZfcHJpdi0+aXBzLmN1 cl9kZWxheSAtIDE7Ci0JCWlmIChuZXdfZGVsYXkgPCBkZXZfcHJpdi0+aXBzLm1heF9kZWxheSkK LQkJCW5ld19kZWxheSA9IGRldl9wcml2LT5pcHMubWF4X2RlbGF5OwotCX0gZWxzZSBpZiAoYnVz eV9kb3duIDwgbWluX2F2ZykgewotCQlpZiAoZGV2X3ByaXYtPmlwcy5jdXJfZGVsYXkgIT0gZGV2 X3ByaXYtPmlwcy5taW5fZGVsYXkpCi0JCQluZXdfZGVsYXkgPSBkZXZfcHJpdi0+aXBzLmN1cl9k ZWxheSArIDE7Ci0JCWlmIChuZXdfZGVsYXkgPiBkZXZfcHJpdi0+aXBzLm1pbl9kZWxheSkKLQkJ CW5ld19kZWxheSA9IGRldl9wcml2LT5pcHMubWluX2RlbGF5OwotCX0KLQotCWlmIChpcm9ubGFr ZV9zZXRfZHJwcyhkZXZfcHJpdiwgbmV3X2RlbGF5KSkKLQkJZGV2X3ByaXYtPmlwcy5jdXJfZGVs YXkgPSBuZXdfZGVsYXk7Ci0KLQlzcGluX3VubG9jaygmbWNoZGV2X2xvY2spOwotCi0JcmV0dXJu OwotfQotCi1zdGF0aWMgdm9pZCB2bHZfYzBfcmVhZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCi0JCQlzdHJ1Y3QgaW50ZWxfcnBzX2VpICplaSkKLXsKLQllaS0+a3RpbWUgPSBr dGltZV9nZXRfcmF3KCk7Ci0JZWktPnJlbmRlcl9jMCA9IEk5MTVfUkVBRChWTFZfUkVOREVSX0Mw X0NPVU5UKTsKLQllaS0+bWVkaWFfYzAgPSBJOTE1X1JFQUQoVkxWX01FRElBX0MwX0NPVU5UKTsK LX0KLQotdm9pZCBnZW42X3Jwc19yZXNldF9laShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCi17Ci0JbWVtc2V0KCZkZXZfcHJpdi0+Z3RfcG0ucnBzLmVpLCAwLCBzaXplb2YoZGV2 X3ByaXYtPmd0X3BtLnJwcy5laSkpOwotfQotCi1zdGF0aWMgdTMyIHZsdl93YV9jMF9laShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBwbV9paXIpCi17Ci0Jc3RydWN0IGlu dGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0JY29uc3Qgc3RydWN0IGludGVs X3Jwc19laSAqcHJldiA9ICZycHMtPmVpOwotCXN0cnVjdCBpbnRlbF9ycHNfZWkgbm93OwotCXUz MiBldmVudHMgPSAwOwotCi0JaWYgKChwbV9paXIgJiBHRU42X1BNX1JQX1VQX0VJX0VYUElSRUQp ID09IDApCi0JCXJldHVybiAwOwotCi0Jdmx2X2MwX3JlYWQoZGV2X3ByaXYsICZub3cpOwotCi0J aWYgKHByZXYtPmt0aW1lKSB7Ci0JCXU2NCB0aW1lLCBjMDsKLQkJdTMyIHJlbmRlciwgbWVkaWE7 Ci0KLQkJdGltZSA9IGt0aW1lX3VzX2RlbHRhKG5vdy5rdGltZSwgcHJldi0+a3RpbWUpOwotCi0J CXRpbWUgKj0gZGV2X3ByaXYtPmN6Y2xrX2ZyZXE7Ci0KLQkJLyogV29ya2xvYWQgY2FuIGJlIHNw bGl0IGJldHdlZW4gcmVuZGVyICsgbWVkaWEsCi0JCSAqIGUuZy4gU3dhcEJ1ZmZlcnMgYmVpbmcg YmxpdHRlZCBpbiBYIGFmdGVyIGJlaW5nIHJlbmRlcmVkIGluCi0JCSAqIG1lc2EuIFRvIGFjY291 bnQgZm9yIHRoaXMgd2UgbmVlZCB0byBjb21iaW5lIGJvdGggZW5naW5lcwotCQkgKiBpbnRvIG91 ciBhY3Rpdml0eSBjb3VudGVyLgotCQkgKi8KLQkJcmVuZGVyID0gbm93LnJlbmRlcl9jMCAtIHBy ZXYtPnJlbmRlcl9jMDsKLQkJbWVkaWEgPSBub3cubWVkaWFfYzAgLSBwcmV2LT5tZWRpYV9jMDsK LQkJYzAgPSBtYXgocmVuZGVyLCBtZWRpYSk7Ci0JCWMwICo9IDEwMDAgKiAxMDAgPDwgODsgLyog dG8gdXNlY3MgYW5kIHNjYWxlIHRvIHRocmVzaG9sZCUgKi8KLQotCQlpZiAoYzAgPiB0aW1lICog cnBzLT5wb3dlci51cF90aHJlc2hvbGQpCi0JCQlldmVudHMgPSBHRU42X1BNX1JQX1VQX1RIUkVT SE9MRDsKLQkJZWxzZSBpZiAoYzAgPCB0aW1lICogcnBzLT5wb3dlci5kb3duX3RocmVzaG9sZCkK LQkJCWV2ZW50cyA9IEdFTjZfUE1fUlBfRE9XTl9USFJFU0hPTEQ7Ci0JfQotCi0JcnBzLT5laSA9 IG5vdzsKLQlyZXR1cm4gZXZlbnRzOwotfQotCi1zdGF0aWMgdm9pZCBnZW42X3BtX3Jwc193b3Jr KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUs IGd0X3BtLnJwcy53b3JrKTsKLQlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gJmRldl9wcml2LT5ndDsK LQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKLQlib29sIGNs aWVudF9ib29zdCA9IGZhbHNlOwotCWludCBuZXdfZGVsYXksIGFkaiwgbWluLCBtYXg7Ci0JdTMy IHBtX2lpciA9IDA7Ci0KLQlzcGluX2xvY2tfaXJxKCZndC0+aXJxX2xvY2spOwotCWlmIChycHMt PmludGVycnVwdHNfZW5hYmxlZCkgewotCQlwbV9paXIgPSBmZXRjaF9hbmRfemVybygmcnBzLT5w bV9paXIpOwotCQljbGllbnRfYm9vc3QgPSBhdG9taWNfcmVhZCgmcnBzLT5udW1fd2FpdGVycyk7 Ci0JfQotCXNwaW5fdW5sb2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKLQotCS8qIE1ha2Ugc3VyZSB3 ZSBkaWRuJ3QgcXVldWUgYW55dGhpbmcgd2UncmUgbm90IGdvaW5nIHRvIHByb2Nlc3MuICovCi0J V0FSTl9PTihwbV9paXIgJiB+ZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMpOwotCWlmICgocG1faWly ICYgZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMpID09IDAgJiYgIWNsaWVudF9ib29zdCkKLQkJZ290 byBvdXQ7Ci0KLQltdXRleF9sb2NrKCZycHMtPmxvY2spOwotCi0JcG1faWlyIHw9IHZsdl93YV9j MF9laShkZXZfcHJpdiwgcG1faWlyKTsKLQotCWFkaiA9IHJwcy0+bGFzdF9hZGo7Ci0JbmV3X2Rl bGF5ID0gcnBzLT5jdXJfZnJlcTsKLQltaW4gPSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdDsKLQlt YXggPSBycHMtPm1heF9mcmVxX3NvZnRsaW1pdDsKLQlpZiAoY2xpZW50X2Jvb3N0KQotCQltYXgg PSBycHMtPm1heF9mcmVxOwotCWlmIChjbGllbnRfYm9vc3QgJiYgbmV3X2RlbGF5IDwgcnBzLT5i b29zdF9mcmVxKSB7Ci0JCW5ld19kZWxheSA9IHJwcy0+Ym9vc3RfZnJlcTsKLQkJYWRqID0gMDsK LQl9IGVsc2UgaWYgKHBtX2lpciAmIEdFTjZfUE1fUlBfVVBfVEhSRVNIT0xEKSB7Ci0JCWlmIChh ZGogPiAwKQotCQkJYWRqICo9IDI7Ci0JCWVsc2UgLyogQ0hWIG5lZWRzIGV2ZW4gZW5jb2RlIHZh bHVlcyAqLwotCQkJYWRqID0gSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikgPyAyIDogMTsKLQotCQlp ZiAobmV3X2RlbGF5ID49IHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KQotCQkJYWRqID0gMDsKLQl9 IGVsc2UgaWYgKGNsaWVudF9ib29zdCkgewotCQlhZGogPSAwOwotCX0gZWxzZSBpZiAocG1faWly ICYgR0VONl9QTV9SUF9ET1dOX1RJTUVPVVQpIHsKLQkJaWYgKHJwcy0+Y3VyX2ZyZXEgPiBycHMt PmVmZmljaWVudF9mcmVxKQotCQkJbmV3X2RlbGF5ID0gcnBzLT5lZmZpY2llbnRfZnJlcTsKLQkJ ZWxzZSBpZiAocnBzLT5jdXJfZnJlcSA+IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0KQotCQkJbmV3 X2RlbGF5ID0gcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQ7Ci0JCWFkaiA9IDA7Ci0JfSBlbHNlIGlm IChwbV9paXIgJiBHRU42X1BNX1JQX0RPV05fVEhSRVNIT0xEKSB7Ci0JCWlmIChhZGogPCAwKQot CQkJYWRqICo9IDI7Ci0JCWVsc2UgLyogQ0hWIG5lZWRzIGV2ZW4gZW5jb2RlIHZhbHVlcyAqLwot CQkJYWRqID0gSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikgPyAtMiA6IC0xOwotCi0JCWlmIChuZXdf ZGVsYXkgPD0gcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQpCi0JCQlhZGogPSAwOwotCX0gZWxzZSB7 IC8qIHVua25vd24gZXZlbnQgKi8KLQkJYWRqID0gMDsKLQl9Ci0KLQlycHMtPmxhc3RfYWRqID0g YWRqOwotCi0JLyoKLQkgKiBMaW1pdCBkZWJvb3N0aW5nIGFuZCBib29zdGluZyB0byBrZWVwIG91 cnNlbHZlcyBhdCB0aGUgZXh0cmVtZXMKLQkgKiB3aGVuIGluIHRoZSByZXNwZWN0aXZlIHBvd2Vy IG1vZGVzIChpLmUuIHNsb3dseSBkZWNyZWFzZSBmcmVxdWVuY2llcwotCSAqIHdoaWxlIGluIHRo ZSBISUdIX1BPV0VSIHpvbmUgYW5kIHNsb3dseSBpbmNyZWFzZSBmcmVxdWVuY2llcyB3aGlsZQot CSAqIGluIHRoZSBMT1dfUE9XRVIgem9uZSkuIE9uIGlkbGUsIHdlIHdpbGwgaGl0IHRoZSB0aW1l b3V0IGFuZCBkcm9wCi0JICogdG8gdGhlIG5leHQgbGV2ZWwgcXVpY2tseSwgYW5kIGNvbnZlcnNl bHkgaWYgYnVzeSB3ZSBleHBlY3QgdG8KLQkgKiBoaXQgYSB3YWl0Ym9vc3QgYW5kIHJhcGlkbHkg c3dpdGNoIGludG8gbWF4IHBvd2VyLgotCSAqLwotCWlmICgoYWRqIDwgMCAmJiBycHMtPnBvd2Vy Lm1vZGUgPT0gSElHSF9QT1dFUikgfHwKLQkgICAgKGFkaiA+IDAgJiYgcnBzLT5wb3dlci5tb2Rl ID09IExPV19QT1dFUikpCi0JCXJwcy0+bGFzdF9hZGogPSAwOwotCi0JLyogc3lzZnMgZnJlcXVl bmN5IGludGVyZmFjZXMgbWF5IGhhdmUgc251Y2sgaW4gd2hpbGUgc2VydmljaW5nIHRoZQotCSAq IGludGVycnVwdAotCSAqLwotCW5ld19kZWxheSArPSBhZGo7Ci0JbmV3X2RlbGF5ID0gY2xhbXBf dChpbnQsIG5ld19kZWxheSwgbWluLCBtYXgpOwotCi0JaWYgKGludGVsX3NldF9ycHMoZGV2X3By aXYsIG5ld19kZWxheSkpIHsKLQkJRFJNX0RFQlVHX0RSSVZFUigiRmFpbGVkIHRvIHNldCBuZXcg R1BVIGZyZXF1ZW5jeVxuIik7Ci0JCXJwcy0+bGFzdF9hZGogPSAwOwotCX0KLQotCW11dGV4X3Vu bG9jaygmcnBzLT5sb2NrKTsKLQotb3V0OgotCS8qIE1ha2Ugc3VyZSBub3QgdG8gY29ycnVwdCBQ TUlNUiBzdGF0ZSB1c2VkIGJ5IHJpbmdidWZmZXIgb24gR0VONiAqLwotCXNwaW5fbG9ja19pcnEo Jmd0LT5pcnFfbG9jayk7Ci0JaWYgKHJwcy0+aW50ZXJydXB0c19lbmFibGVkKQotCQlnZW42X2d0 X3BtX3VubWFza19pcnEoZ3QsIGRldl9wcml2LT5wbV9ycHNfZXZlbnRzKTsKLQlzcGluX3VubG9j a19pcnEoJmd0LT5pcnFfbG9jayk7Ci19Ci0KLQogLyoqCiAgKiBpdnlicmlkZ2VfcGFyaXR5X3dv cmsgLSBXb3JrcXVldWUgY2FsbGVkIHdoZW4gYSBwYXJpdHkgZXJyb3IgaW50ZXJydXB0CiAgKiBv Y2N1cnJlZC4KQEAgLTE2MzEsNTQgKzEzNTgsNiBAQCBzdGF0aWMgdm9pZCBpOXh4X3BpcGVfY3Jj X2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJCQkgICAg IHJlczEsIHJlczIpOwogfQogCi0vKiBUaGUgUlBTIGV2ZW50cyBuZWVkIGZvcmNld2FrZSwgc28g d2UgYWRkIHRoZW0gdG8gYSB3b3JrIHF1ZXVlIGFuZCBtYXNrIHRoZWlyCi0gKiBJTVIgYml0cyB1 bnRpbCB0aGUgd29yayBpcyBkb25lLiBPdGhlciBpbnRlcnJ1cHRzIGNhbiBiZSBwcm9jZXNzZWQg d2l0aG91dAotICogdGhlIHdvcmsgcXVldWUuICovCi12b2lkIGdlbjExX3Jwc19pcnFfaGFuZGxl cihzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCB1MzIgcG1faWlyKQotewotCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1ID0gZ3QtPmk5MTU7Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmk5MTUt Pmd0X3BtLnJwczsKLQljb25zdCB1MzIgZXZlbnRzID0gaTkxNS0+cG1fcnBzX2V2ZW50cyAmIHBt X2lpcjsKLQotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmd0LT5pcnFfbG9jayk7Ci0KLQlpZiAodW5s aWtlbHkoIWV2ZW50cykpCi0JCXJldHVybjsKLQotCWdlbjZfZ3RfcG1fbWFza19pcnEoZ3QsIGV2 ZW50cyk7Ci0KLQlpZiAoIXJwcy0+aW50ZXJydXB0c19lbmFibGVkKQotCQlyZXR1cm47Ci0KLQly cHMtPnBtX2lpciB8PSBldmVudHM7Ci0Jc2NoZWR1bGVfd29yaygmcnBzLT53b3JrKTsKLX0KLQot dm9pZCBnZW42X3Jwc19pcnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsIHUzMiBwbV9paXIpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5n dF9wbS5ycHM7Ci0Jc3RydWN0IGludGVsX2d0ICpndCA9ICZkZXZfcHJpdi0+Z3Q7Ci0KLQlpZiAo cG1faWlyICYgZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMpIHsKLQkJc3Bpbl9sb2NrKCZndC0+aXJx X2xvY2spOwotCQlnZW42X2d0X3BtX21hc2tfaXJxKGd0LCBwbV9paXIgJiBkZXZfcHJpdi0+cG1f cnBzX2V2ZW50cyk7Ci0JCWlmIChycHMtPmludGVycnVwdHNfZW5hYmxlZCkgewotCQkJcnBzLT5w bV9paXIgfD0gcG1faWlyICYgZGV2X3ByaXYtPnBtX3Jwc19ldmVudHM7Ci0JCQlzY2hlZHVsZV93 b3JrKCZycHMtPndvcmspOwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZndC0+aXJxX2xvY2spOwotCX0K LQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDgpCi0JCXJldHVybjsKLQotCWlmIChwbV9p aXIgJiBQTV9WRUJPWF9VU0VSX0lOVEVSUlVQVCkKLQkJaW50ZWxfZW5naW5lX2JyZWFkY3J1bWJz X2lycShkZXZfcHJpdi0+ZW5naW5lW1ZFQ1MwXSk7Ci0KLQlpZiAocG1faWlyICYgUE1fVkVCT1hf Q1NfRVJST1JfSU5URVJSVVBUKQotCQlEUk1fREVCVUcoIkNvbW1hbmQgcGFyc2VyIGVycm9yLCBw bV9paXIgMHglMDh4XG4iLCBwbV9paXIpOwotfQotCiBzdGF0aWMgdm9pZCBpOXh4X3BpcGVzdGF0 X2lycV9yZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJZW51bSBw aXBlIHBpcGU7CkBAIC0xOTg5LDcgKzE2NjgsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgdmFsbGV5 dmlld19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCiAJCWlmIChndF9paXIpCiAJCQln ZW42X2d0X2lycV9oYW5kbGVyKCZkZXZfcHJpdi0+Z3QsIGd0X2lpcik7CiAJCWlmIChwbV9paXIp Ci0JCQlnZW42X3Jwc19pcnFfaGFuZGxlcihkZXZfcHJpdiwgcG1faWlyKTsKKwkJCWdlbjZfcnBz X2lycV9oYW5kbGVyKCZkZXZfcHJpdi0+Z3QucnBzLCBwbV9paXIpOwogCiAJCWlmIChob3RwbHVn X3N0YXR1cykKIAkJCWk5eHhfaHBkX2lycV9oYW5kbGVyKGRldl9wcml2LCBob3RwbHVnX3N0YXR1 cyk7CkBAIC0yMzkzLDcgKzIwNzIsNyBAQCBzdGF0aWMgdm9pZCBpbGtfZGlzcGxheV9pcnFfaGFu ZGxlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJfQogCiAJaWYgKElTX0dF TihkZXZfcHJpdiwgNSkgJiYgZGVfaWlyICYgREVfUENVX0VWRU5UKQotCQlpcm9ubGFrZV9ycHNf Y2hhbmdlX2lycV9oYW5kbGVyKGRldl9wcml2KTsKKwkJZ2VuNV9ycHNfaXJxX2hhbmRsZXIoJmRl dl9wcml2LT5ndC5ycHMpOwogfQogCiBzdGF0aWMgdm9pZCBpdmJfZGlzcGxheV9pcnFfaGFuZGxl cihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCkBAIC0yNDk4LDcgKzIxNzcsNyBA QCBzdGF0aWMgaXJxcmV0dXJuX3QgaXJvbmxha2VfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAq YXJnKQogCQlpZiAocG1faWlyKSB7CiAJCQlJOTE1X1dSSVRFKEdFTjZfUE1JSVIsIHBtX2lpcik7 CiAJCQlyZXQgPSBJUlFfSEFORExFRDsKLQkJCWdlbjZfcnBzX2lycV9oYW5kbGVyKGRldl9wcml2 LCBwbV9paXIpOworCQkJZ2VuNl9ycHNfaXJxX2hhbmRsZXIoJmRldl9wcml2LT5ndC5ycHMsIHBt X2lpcik7CiAJCX0KIAl9CiAKQEAgLTQyNzAsMTMgKzM5NDksMTAgQEAgc3RhdGljIGlycXJldHVy bl90IGk5NjVfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKQogdm9pZCBpbnRlbF9pcnFf aW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOwotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZk ZXZfcHJpdi0+Z3RfcG0ucnBzOwogCWludCBpOwogCiAJaW50ZWxfaHBkX2luaXRfd29yayhkZXZf cHJpdik7CiAKLQlJTklUX1dPUksoJnJwcy0+d29yaywgZ2VuNl9wbV9ycHNfd29yayk7Ci0KIAlJ TklUX1dPUksoJmRldl9wcml2LT5sM19wYXJpdHkuZXJyb3Jfd29yaywgaXZ5YnJpZGdlX3Bhcml0 eV93b3JrKTsKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0wzX1NMSUNFUzsgKytpKQogCQlkZXZfcHJp di0+bDNfcGFyaXR5LnJlbWFwX2luZm9baV0gPSBOVUxMOwpAQCAtNDI4NSwzMyArMzk2MSw2IEBA IHZvaWQgaW50ZWxfaXJxX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQog CWlmIChIQVNfR1RfVUMoZGV2X3ByaXYpICYmIElOVEVMX0dFTihkZXZfcHJpdikgPCAxMSkKIAkJ ZGV2X3ByaXYtPmd0LnBtX2d1Y19ldmVudHMgPSBHVUNfSU5UUl9HVUMySE9TVCA8PCAxNjsKIAot CS8qIExldCdzIHRyYWNrIHRoZSBlbmFibGVkIHJwcyBldmVudHMgKi8KLQlpZiAoSVNfVkFMTEVZ VklFVyhkZXZfcHJpdikpCi0JCS8qIFdhR3N2UkMwUmVzaWRlbmN5TWV0aG9kOnZsdiAqLwotCQlk ZXZfcHJpdi0+cG1fcnBzX2V2ZW50cyA9IEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJFRDsKLQllbHNl Ci0JCWRldl9wcml2LT5wbV9ycHNfZXZlbnRzID0gKEdFTjZfUE1fUlBfVVBfVEhSRVNIT0xEIHwK LQkJCQkJICAgR0VONl9QTV9SUF9ET1dOX1RIUkVTSE9MRCB8Ci0JCQkJCSAgIEdFTjZfUE1fUlBf RE9XTl9USU1FT1VUKTsKLQotCS8qIFdlIHNoYXJlIHRoZSByZWdpc3RlciB3aXRoIG90aGVyIGVu Z2luZSAqLwotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID4gOSkKLQkJR0VNX1dBUk5fT04oZGV2 X3ByaXYtPnBtX3Jwc19ldmVudHMgJiAweGZmZmYwMDAwKTsKLQotCXJwcy0+cG1faW50cm1za19t YnogPSAwOwotCi0JLyoKLQkgKiBTTkIsSVZCLEhTVyBjYW4gd2hpbGUgVkxWLENIViBtYXkgaGFy ZCBoYW5nIG9uIGxvb3BpbmcgYmF0Y2hidWZmZXIKLQkgKiBpZiBHRU42X1BNX1VQX0VJX0VYUElS RUQgaXMgbWFza2VkLgotCSAqCi0JICogVE9ETzogdmVyaWZ5IGlmIHRoaXMgY2FuIGJlIHJlcHJv ZHVjZWQgb24gVkxWLENIVi4KLQkgKi8KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8PSA3KQot CQlycHMtPnBtX2ludHJtc2tfbWJ6IHw9IEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJFRDsKLQotCWlm IChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDgpCi0JCXJwcy0+cG1faW50cm1za19tYnogfD0gR0VO OF9QTUlOVFJfRElTQUJMRV9SRURJUkVDVF9UT19HVUM7Ci0KIAlkZXYtPnZibGFua19kaXNhYmxl X2ltbWVkaWF0ZSA9IHRydWU7CiAKIAkvKiBNb3N0IHBsYXRmb3JtcyB0cmVhdCB0aGUgZGlzcGxh eSBpcnEgYmxvY2sgYXMgYW4gYWx3YXlzLW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2lycS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuaAppbmRleCAx OWEzYmMwMTk1MzUuLmQwZDkxYzZlMDBkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9pcnEuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5oCkBAIC0y Miw5ICsyMiw2IEBAIHN0cnVjdCBpbnRlbF9ndDsKIHN0cnVjdCBpbnRlbF9ndWM7CiBzdHJ1Y3Qg aW50ZWxfdW5jb3JlOwogCi12b2lkIGdlbjExX3Jwc19pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxf Z3QgKmd0LCB1MzIgcG1faWlyKTsKLXZvaWQgZ2VuNl9ycHNfaXJxX2hhbmRsZXIoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgcG1faWlyKTsKLQogdm9pZCBpbnRlbF9pcnFf aW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBpbnRlbF9pcnFf ZmluaShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogaW50IGludGVsX2lycV9p bnN0YWxsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9wbXUuYwppbmRleCA4NTkxMjkxN2MwNjIuLjI2NmQ2NmIxZmI3YiAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3BtdS5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSAiZ3QvaW50ZWxfZW5naW5lX3Vz ZXIuaCIKICNpbmNsdWRlICJndC9pbnRlbF9ndF9wbS5oIgogI2luY2x1ZGUgImd0L2ludGVsX3Jj Ni5oIgorI2luY2x1ZGUgImd0L2ludGVsX3Jwcy5oIgogCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIK ICNpbmNsdWRlICJpOTE1X3BtdS5oIgpAQCAtMzU4LDI1ICszNTksMjYgQEAgZnJlcXVlbmN5X3Nh bXBsZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCB1bnNpZ25lZCBpbnQgcGVyaW9kX25zKQogCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZ3QtPmk5MTU7CiAJc3RydWN0IGludGVsX3VuY29y ZSAqdW5jb3JlID0gZ3QtPnVuY29yZTsKIAlzdHJ1Y3QgaTkxNV9wbXUgKnBtdSA9ICZpOTE1LT5w bXU7CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmd0LT5ycHM7CiAKIAlpZiAocG11LT5lbmFi bGUgJiBjb25maWdfZW5hYmxlZF9tYXNrKEk5MTVfUE1VX0FDVFVBTF9GUkVRVUVOQ1kpKSB7CiAJ CXUzMiB2YWw7CiAKLQkJdmFsID0gaTkxNS0+Z3RfcG0ucnBzLmN1cl9mcmVxOworCQl2YWwgPSBy cHMtPmN1cl9mcmVxOwogCQlpZiAoaW50ZWxfZ3RfcG1fZ2V0X2lmX2F3YWtlKGd0KSkgewogCQkJ dmFsID0gaW50ZWxfdW5jb3JlX3JlYWRfbm90cmFjZSh1bmNvcmUsIEdFTjZfUlBTVEFUMSk7Ci0J CQl2YWwgPSBpbnRlbF9nZXRfY2FnZihpOTE1LCB2YWwpOworCQkJdmFsID0gaW50ZWxfZ2V0X2Nh Z2YocnBzLCB2YWwpOwogCQkJaW50ZWxfZ3RfcG1fcHV0KGd0KTsKIAkJfQogCiAJCWFkZF9zYW1w bGVfbXVsdCgmcG11LT5zYW1wbGVbX19JOTE1X1NBTVBMRV9GUkVRX0FDVF0sCi0JCQkJaW50ZWxf Z3B1X2ZyZXEoaTkxNSwgdmFsKSwKKwkJCQlpbnRlbF9ncHVfZnJlcShycHMsIHZhbCksCiAJCQkJ cGVyaW9kX25zIC8gMTAwMCk7CiAJfQogCiAJaWYgKHBtdS0+ZW5hYmxlICYgY29uZmlnX2VuYWJs ZWRfbWFzayhJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZKSkgewogCQlhZGRfc2FtcGxlX211 bHQoJnBtdS0+c2FtcGxlW19fSTkxNV9TQU1QTEVfRlJFUV9SRVFdLAotCQkJCWludGVsX2dwdV9m cmVxKGk5MTUsIGk5MTUtPmd0X3BtLnJwcy5jdXJfZnJlcSksCisJCQkJaW50ZWxfZ3B1X2ZyZXEo cnBzLCBycHMtPmN1cl9mcmVxKSwKIAkJCQlwZXJpb2RfbnMgLyAxMDAwKTsKIAl9CiB9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jCmluZGV4IDQ1NzVmMzY4NDU1ZC4uMDhjZTJlZWVjZjdl IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYwpAQCAtMzEsNiArMzEsNyBAQAogCiAj aW5jbHVkZSAiZ2VtL2k5MTVfZ2VtX2NvbnRleHQuaCIKICNpbmNsdWRlICJndC9pbnRlbF9jb250 ZXh0LmgiCisjaW5jbHVkZSAiZ3QvaW50ZWxfcnBzLmgiCiAKICNpbmNsdWRlICJpOTE1X2FjdGl2 ZS5oIgogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCkBAIC0yNTcsOCArMjU4LDggQEAgYm9vbCBpOTE1 X3JlcXVlc3RfcmV0aXJlKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQogCWlmICh0ZXN0X2JpdChE TUFfRkVOQ0VfRkxBR19FTkFCTEVfU0lHTkFMX0JJVCwgJnJxLT5mZW5jZS5mbGFncykpCiAJCWk5 MTVfcmVxdWVzdF9jYW5jZWxfYnJlYWRjcnVtYihycSk7CiAJaWYgKGk5MTVfcmVxdWVzdF9oYXNf d2FpdGJvb3N0KHJxKSkgewotCQlHRU1fQlVHX09OKCFhdG9taWNfcmVhZCgmcnEtPmk5MTUtPmd0 X3BtLnJwcy5udW1fd2FpdGVycykpOwotCQlhdG9taWNfZGVjKCZycS0+aTkxNS0+Z3RfcG0ucnBz Lm51bV93YWl0ZXJzKTsKKwkJR0VNX0JVR19PTighYXRvbWljX3JlYWQoJnJxLT5lbmdpbmUtPmd0 LT5ycHMubnVtX3dhaXRlcnMpKTsKKwkJYXRvbWljX2RlYygmcnEtPmVuZ2luZS0+Z3QtPnJwcy5u dW1fd2FpdGVycyk7CiAJfQogCWlmICghdGVzdF9iaXQoSTkxNV9GRU5DRV9GTEFHX0FDVElWRSwg JnJxLT5mZW5jZS5mbGFncykpIHsKIAkJc2V0X2JpdChJOTE1X0ZFTkNFX0ZMQUdfQUNUSVZFLCAm cnEtPmZlbmNlLmZsYWdzKTsKQEAgLTE0NjYsNyArMTQ2Nyw3IEBAIGxvbmcgaTkxNV9yZXF1ZXN0 X3dhaXQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCiAJICovCiAJaWYgKGZsYWdzICYgSTkxNV9X QUlUX1BSSU9SSVRZKSB7CiAJCWlmICghaTkxNV9yZXF1ZXN0X3N0YXJ0ZWQocnEpICYmIElOVEVM X0dFTihycS0+aTkxNSkgPj0gNikKLQkJCWdlbjZfcnBzX2Jvb3N0KHJxKTsKKwkJCWludGVsX3Jw c19ib29zdChycSk7CiAJCWk5MTVfc2NoZWR1bGVfYnVtcF9wcmlvcml0eShycSwgSTkxNV9QUklP UklUWV9XQUlUKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf c3lzZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3lzZnMuYwppbmRleCBiZjAzOWI4 YmE1OTMuLjY1NDc2OTA5ZDFiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3lzZnMuYwpAQCAtMzEs NiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAKICNpbmNsdWRlICJndC9pbnRl bF9yYzYuaCIKKyNpbmNsdWRlICJndC9pbnRlbF9ycHMuaCIKIAogI2luY2x1ZGUgImk5MTVfZHJ2 LmgiCiAjaW5jbHVkZSAiaTkxNV9zeXNmcy5oIgpAQCAtMjU5LDYgKzI2MCw3IEBAIHN0YXRpYyBz c2l6ZV90IGd0X2FjdF9mcmVxX21oel9zaG93KHN0cnVjdCBkZXZpY2UgKmtkZXYsCiAJCQkJICAg IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0ga2Rldl9taW5vcl90b19pOTE1KGtkZXYpOworCXN0 cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3QucnBzOwogCWludGVsX3dha2VyZWZf dCB3YWtlcmVmOwogCXUzMiBmcmVxOwogCkBAIC0yNzEsMzEgKzI3MywzMSBAQCBzdGF0aWMgc3Np emVfdCBndF9hY3RfZnJlcV9taHpfc2hvdyhzdHJ1Y3QgZGV2aWNlICprZGV2LAogCiAJCWZyZXEg PSAoZnJlcSA+PiA4KSAmIDB4ZmY7CiAJfSBlbHNlIHsKLQkJZnJlcSA9IGludGVsX2dldF9jYWdm KGRldl9wcml2LCBJOTE1X1JFQUQoR0VONl9SUFNUQVQxKSk7CisJCWZyZXEgPSBpbnRlbF9nZXRf Y2FnZihycHMsIEk5MTVfUkVBRChHRU42X1JQU1RBVDEpKTsKIAl9CiAKIAlpbnRlbF9ydW50aW1l X3BtX3B1dCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0sIHdha2VyZWYpOwogCi0JcmV0dXJuIHNucHJp bnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBmcmVx KSk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGludGVsX2dwdV9m cmVxKHJwcywgZnJlcSkpOwogfQogCiBzdGF0aWMgc3NpemVfdCBndF9jdXJfZnJlcV9taHpfc2hv dyhzdHJ1Y3QgZGV2aWNlICprZGV2LAogCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAq YXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IGtkZXZfbWlub3JfdG9faTkxNShrZGV2KTsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2 X3ByaXYtPmd0LnJwczsKIAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4i LAotCQkJaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsCi0JCQkJICAgICAgIGRldl9wcml2LT5ndF9w bS5ycHMuY3VyX2ZyZXEpKTsKKwkJCWludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5jdXJfZnJlcSkp OwogfQogCiBzdGF0aWMgc3NpemVfdCBndF9ib29zdF9mcmVxX21oel9zaG93KHN0cnVjdCBkZXZp Y2UgKmtkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0ga2Rldl9taW5vcl90b19pOTE1KGtk ZXYpOworCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3QucnBzOwogCiAJcmV0 dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsCi0JCQlpbnRlbF9ncHVfZnJlcShk ZXZfcHJpdiwKLQkJCQkgICAgICAgZGV2X3ByaXYtPmd0X3BtLnJwcy5ib29zdF9mcmVxKSk7CisJ CQlpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+Ym9vc3RfZnJlcSkpOwogfQogCiBzdGF0aWMgc3Np emVfdCBndF9ib29zdF9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICprZGV2LApAQCAtMzAz LDcgKzMwNSw3IEBAIHN0YXRpYyBzc2l6ZV90IGd0X2Jvb3N0X2ZyZXFfbWh6X3N0b3JlKHN0cnVj dCBkZXZpY2UgKmtkZXYsCiAJCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50 KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGtkZXZfbWlub3JfdG9f aTkxNShrZGV2KTsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJw czsKKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0LnJwczsKIAlib29sIGJv b3N0ID0gZmFsc2U7CiAJc3NpemVfdCByZXQ7CiAJdTMyIHZhbDsKQEAgLTMxMyw3ICszMTUsNyBA QCBzdGF0aWMgc3NpemVfdCBndF9ib29zdF9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICpr ZGV2LAogCQlyZXR1cm4gcmV0OwogCiAJLyogVmFsaWRhdGUgYWdhaW5zdCAoc3RhdGljKSBoYXJk d2FyZSBsaW1pdHMgKi8KLQl2YWwgPSBpbnRlbF9mcmVxX29wY29kZShkZXZfcHJpdiwgdmFsKTsK Kwl2YWwgPSBpbnRlbF9mcmVxX29wY29kZShycHMsIHZhbCk7CiAJaWYgKHZhbCA8IHJwcy0+bWlu X2ZyZXEgfHwgdmFsID4gcnBzLT5tYXhfZnJlcSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTMz MywxOSArMzM1LDE5IEBAIHN0YXRpYyBzc2l6ZV90IHZsdl9ycGVfZnJlcV9taHpfc2hvdyhzdHJ1 Y3QgZGV2aWNlICprZGV2LAogCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIs IGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBrZGV2 X21pbm9yX3RvX2k5MTUoa2Rldik7CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2 LT5ndC5ycHM7CiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKLQkJ CWludGVsX2dwdV9mcmVxKGRldl9wcml2LAotCQkJCSAgICAgICBkZXZfcHJpdi0+Z3RfcG0ucnBz LmVmZmljaWVudF9mcmVxKSk7CisJCQlpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+ZWZmaWNpZW50 X2ZyZXEpKTsKIH0KIAogc3RhdGljIHNzaXplX3QgZ3RfbWF4X2ZyZXFfbWh6X3Nob3coc3RydWN0 IGRldmljZSAqa2Rldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikK IHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBrZGV2X21pbm9yX3RvX2k5 MTUoa2Rldik7CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndC5ycHM7CiAK IAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKLQkJCWludGVsX2dwdV9m cmVxKGRldl9wcml2LAotCQkJCSAgICAgICBkZXZfcHJpdi0+Z3RfcG0ucnBzLm1heF9mcmVxX3Nv ZnRsaW1pdCkpOworCQkJaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1heF9mcmVxX3NvZnRsaW1p dCkpOwogfQogCiBzdGF0aWMgc3NpemVfdCBndF9tYXhfZnJlcV9taHpfc3RvcmUoc3RydWN0IGRl dmljZSAqa2RldiwKQEAgLTM1MywxOSArMzU1LDE3IEBAIHN0YXRpYyBzc2l6ZV90IGd0X21heF9m cmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICprZGV2LAogCQkJCSAgICAgY29uc3QgY2hhciAq YnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0ga2Rldl9taW5vcl90b19pOTE1KGtkZXYpOwotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZk ZXZfcHJpdi0+Z3RfcG0ucnBzOwotCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwotCXUzMiB2YWw7 CisJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndC5ycHM7CiAJc3NpemVfdCBy ZXQ7CisJdTMyIHZhbDsKIAogCXJldCA9IGtzdHJ0b3UzMihidWYsIDAsICZ2YWwpOwogCWlmIChy ZXQpCiAJCXJldHVybiByZXQ7CiAKLQl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoJmRl dl9wcml2LT5ydW50aW1lX3BtKTsKIAltdXRleF9sb2NrKCZycHMtPmxvY2spOwogCi0JdmFsID0g aW50ZWxfZnJlcV9vcGNvZGUoZGV2X3ByaXYsIHZhbCk7CisJdmFsID0gaW50ZWxfZnJlcV9vcGNv ZGUocnBzLCB2YWwpOwogCWlmICh2YWwgPCBycHMtPm1pbl9mcmVxIHx8CiAJICAgIHZhbCA+IHJw cy0+bWF4X2ZyZXEgfHwKIAkgICAgdmFsIDwgcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQpIHsKQEAg LTM3NSw3ICszNzUsNyBAQCBzdGF0aWMgc3NpemVfdCBndF9tYXhfZnJlcV9taHpfc3RvcmUoc3Ry dWN0IGRldmljZSAqa2RldiwKIAogCWlmICh2YWwgPiBycHMtPnJwMF9mcmVxKQogCQlEUk1fREVC VUcoIlVzZXIgcmVxdWVzdGVkIG92ZXJjbG9ja2luZyB0byAlZFxuIiwKLQkJCSAgaW50ZWxfZ3B1 X2ZyZXEoZGV2X3ByaXYsIHZhbCkpOworCQkJICBpbnRlbF9ncHVfZnJlcShycHMsIHZhbCkpOwog CiAJcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQgPSB2YWw7CiAKQEAgLTM4MywxNCArMzgzLDE1IEBA IHN0YXRpYyBzc2l6ZV90IGd0X21heF9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICprZGV2 LAogCQkgICAgICBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCwKIAkJICAgICAgcnBzLT5tYXhfZnJl cV9zb2Z0bGltaXQpOwogCi0JLyogV2Ugc3RpbGwgbmVlZCAqX3NldF9ycHMgdG8gcHJvY2VzcyB0 aGUgbmV3IG1heF9kZWxheSBhbmQKKwkvKgorCSAqIFdlIHN0aWxsIG5lZWQgKl9zZXRfcnBzIHRv IHByb2Nlc3MgdGhlIG5ldyBtYXhfZGVsYXkgYW5kCiAJICogdXBkYXRlIHRoZSBpbnRlcnJ1cHQg bGltaXRzIGFuZCBQTUlOVFJNU0sgZXZlbiB0aG91Z2gKLQkgKiBmcmVxdWVuY3kgcmVxdWVzdCBt YXkgYmUgdW5jaGFuZ2VkLiAqLwotCXJldCA9IGludGVsX3NldF9ycHMoZGV2X3ByaXYsIHZhbCk7 CisJICogZnJlcXVlbmN5IHJlcXVlc3QgbWF5IGJlIHVuY2hhbmdlZC4KKwkgKi8KKwlpbnRlbF9y cHNfc2V0KHJwcywgdmFsKTsKIAogdW5sb2NrOgogCW11dGV4X3VubG9jaygmcnBzLT5sb2NrKTsK LQlpbnRlbF9ydW50aW1lX3BtX3B1dCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0sIHdha2VyZWYpOwog CiAJcmV0dXJuIHJldCA/OiBjb3VudDsKIH0KQEAgLTM5OCwxMCArMzk5LDEwIEBAIHN0YXRpYyBz c2l6ZV90IGd0X21heF9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICprZGV2LAogc3RhdGlj IHNzaXplX3QgZ3RfbWluX2ZyZXFfbWh6X3Nob3coc3RydWN0IGRldmljZSAqa2Rldiwgc3RydWN0 IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBrZGV2X21pbm9yX3RvX2k5MTUoa2Rldik7CisJc3RydWN0IGlu dGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndC5ycHM7CiAKIAlyZXR1cm4gc25wcmludGYoYnVm LCBQQUdFX1NJWkUsICIlZFxuIiwKLQkJCWludGVsX2dwdV9mcmVxKGRldl9wcml2LAotCQkJCSAg ICAgICBkZXZfcHJpdi0+Z3RfcG0ucnBzLm1pbl9mcmVxX3NvZnRsaW1pdCkpOworCQkJaW50ZWxf Z3B1X2ZyZXEocnBzLCBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkpOwogfQogCiBzdGF0aWMgc3Np emVfdCBndF9taW5fZnJlcV9taHpfc3RvcmUoc3RydWN0IGRldmljZSAqa2RldiwKQEAgLTQwOSwx OSArNDEwLDE3IEBAIHN0YXRpYyBzc2l6ZV90IGd0X21pbl9mcmVxX21oel9zdG9yZShzdHJ1Y3Qg ZGV2aWNlICprZGV2LAogCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7 CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0ga2Rldl9taW5vcl90b19pOTE1 KGtkZXYpOwotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwot CWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwotCXUzMiB2YWw7CisJc3RydWN0IGludGVsX3JwcyAq cnBzID0gJmRldl9wcml2LT5ndC5ycHM7CiAJc3NpemVfdCByZXQ7CisJdTMyIHZhbDsKIAogCXJl dCA9IGtzdHJ0b3UzMihidWYsIDAsICZ2YWwpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAK LQl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoJmRldl9wcml2LT5ydW50aW1lX3BtKTsK IAltdXRleF9sb2NrKCZycHMtPmxvY2spOwogCi0JdmFsID0gaW50ZWxfZnJlcV9vcGNvZGUoZGV2 X3ByaXYsIHZhbCk7CisJdmFsID0gaW50ZWxfZnJlcV9vcGNvZGUocnBzLCB2YWwpOwogCWlmICh2 YWwgPCBycHMtPm1pbl9mcmVxIHx8CiAJICAgIHZhbCA+IHJwcy0+bWF4X2ZyZXEgfHwKIAkgICAg dmFsID4gcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQpIHsKQEAgLTQzNSwxNCArNDM0LDE1IEBAIHN0 YXRpYyBzc2l6ZV90IGd0X21pbl9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICprZGV2LAog CQkgICAgICBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCwKIAkJICAgICAgcnBzLT5tYXhfZnJlcV9z b2Z0bGltaXQpOwogCi0JLyogV2Ugc3RpbGwgbmVlZCAqX3NldF9ycHMgdG8gcHJvY2VzcyB0aGUg bmV3IG1pbl9kZWxheSBhbmQKKwkvKgorCSAqIFdlIHN0aWxsIG5lZWQgKl9zZXRfcnBzIHRvIHBy b2Nlc3MgdGhlIG5ldyBtaW5fZGVsYXkgYW5kCiAJICogdXBkYXRlIHRoZSBpbnRlcnJ1cHQgbGlt aXRzIGFuZCBQTUlOVFJNU0sgZXZlbiB0aG91Z2gKLQkgKiBmcmVxdWVuY3kgcmVxdWVzdCBtYXkg YmUgdW5jaGFuZ2VkLiAqLwotCXJldCA9IGludGVsX3NldF9ycHMoZGV2X3ByaXYsIHZhbCk7CisJ ICogZnJlcXVlbmN5IHJlcXVlc3QgbWF5IGJlIHVuY2hhbmdlZC4KKwkgKi8KKwlpbnRlbF9ycHNf c2V0KHJwcywgdmFsKTsKIAogdW5sb2NrOgogCW11dGV4X3VubG9jaygmcnBzLT5sb2NrKTsKLQlp bnRlbF9ydW50aW1lX3BtX3B1dCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0sIHdha2VyZWYpOwogCiAJ cmV0dXJuIHJldCA/OiBjb3VudDsKIH0KQEAgLTQ2NCwxNSArNDY0LDE1IEBAIHN0YXRpYyBERVZJ Q0VfQVRUUihndF9SUG5fZnJlcV9taHosIFNfSVJVR08sIGd0X3JwX21oel9zaG93LCBOVUxMKTsK IHN0YXRpYyBzc2l6ZV90IGd0X3JwX21oel9zaG93KHN0cnVjdCBkZXZpY2UgKmtkZXYsIHN0cnVj dCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0ga2Rldl9taW5vcl90b19pOTE1KGtkZXYpOwotCXN0cnVjdCBp bnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOworCXN0cnVjdCBpbnRlbF9ycHMg KnJwcyA9ICZkZXZfcHJpdi0+Z3QucnBzOwogCXUzMiB2YWw7CiAKIAlpZiAoYXR0ciA9PSAmZGV2 X2F0dHJfZ3RfUlAwX2ZyZXFfbWh6KQotCQl2YWwgPSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwg cnBzLT5ycDBfZnJlcSk7CisJCXZhbCA9IGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5ycDBfZnJl cSk7CiAJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfZ3RfUlAxX2ZyZXFfbWh6KQotCQl2YWwg PSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5ycDFfZnJlcSk7CisJCXZhbCA9IGludGVs X2dwdV9mcmVxKHJwcywgcnBzLT5ycDFfZnJlcSk7CiAJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0 dHJfZ3RfUlBuX2ZyZXFfbWh6KQotCQl2YWwgPSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBz LT5taW5fZnJlcSk7CisJCXZhbCA9IGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5taW5fZnJlcSk7 CiAJZWxzZQogCQlCVUcoKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKaW5kZXggMzYyMjM0NDQ5 MDg3Li42NzQxNTA3Yzc0ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwpAQCAtMTk3LDggKzE5 Nyw2IEBAIHN0YXRpYyB2b2lkIGk5MTVfaXJvbmxha2VfZ2V0X21lbV9mcmVxKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkJYnJlYWs7CiAJfQogCi0JZGV2X3ByaXYtPmlwcy5y X3QgPSBkZXZfcHJpdi0+bWVtX2ZyZXE7Ci0KIAlzd2l0Y2ggKGNzaXBsbCAmIDB4M2ZmKSB7CiAJ Y2FzZSAweDAwYzoKIAkJZGV2X3ByaXYtPmZzYl9mcmVxID0gMzIwMDsKQEAgLTIyNywxNCArMjI1 LDYgQEAgc3RhdGljIHZvaWQgaTkxNV9pcm9ubGFrZV9nZXRfbWVtX2ZyZXEoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQogCQlkZXZfcHJpdi0+ZnNiX2ZyZXEgPSAwOwogCQlicmVh azsKIAl9Ci0KLQlpZiAoZGV2X3ByaXYtPmZzYl9mcmVxID09IDMyMDApIHsKLQkJZGV2X3ByaXYt Pmlwcy5jX20gPSAwOwotCX0gZWxzZSBpZiAoZGV2X3ByaXYtPmZzYl9mcmVxID4gMzIwMCAmJiBk ZXZfcHJpdi0+ZnNiX2ZyZXEgPD0gNDgwMCkgewotCQlkZXZfcHJpdi0+aXBzLmNfbSA9IDE7Ci0J fSBlbHNlIHsKLQkJZGV2X3ByaXYtPmlwcy5jX20gPSAyOwotCX0KIH0KIAogc3RhdGljIGNvbnN0 IHN0cnVjdCBjeHNyX2xhdGVuY3kgY3hzcl9sYXRlbmN5X3RhYmxlW10gPSB7CkBAIC02MzM5LDE4 NjUgKzYzMjksMjU4IEBAIHZvaWQgaW50ZWxfaW5pdF9pcGMoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQogCWludGVsX2VuYWJsZV9pcGMoZGV2X3ByaXYpOwogfQogCi0vKgotICog TG9jayBwcm90ZWN0aW5nIElQUyByZWxhdGVkIGRhdGEgc3RydWN0dXJlcwotICovCi1ERUZJTkVf U1BJTkxPQ0sobWNoZGV2X2xvY2spOworc3RhdGljIGNvbnN0IHN0cnVjdCBjcGFyYW1zIHsKKwl1 MTYgaTsKKwl1MTYgdDsKKwl1MTYgbTsKKwl1MTYgYzsKK30gY3BhcmFtc1tdID0geworCXsgMSwg MTMzMywgMzAxLCAyODY2NCB9LAorCXsgMSwgMTA2NiwgMjk0LCAyNDQ2MCB9LAorCXsgMSwgODAw LCAyOTQsIDI1MTkyIH0sCisJeyAwLCAxMzMzLCAyNzYsIDI3NjA1IH0sCisJeyAwLCAxMDY2LCAy NzYsIDI3NjA1IH0sCisJeyAwLCA4MDAsIDIzMSwgMjM3ODQgfSwKK307CiAKLWJvb2wgaXJvbmxh a2Vfc2V0X2RycHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHU4IHZhbCkKK3N0YXRp YyB2b2lkIGlieF9pbml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCiB7Ci0Jc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gJmk5MTUtPnVuY29yZTsK LQl1MTYgcmd2c3djdGw7Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZtY2hkZXZfbG9jayk7Ci0K LQlyZ3Zzd2N0bCA9IGludGVsX3VuY29yZV9yZWFkMTYodW5jb3JlLCBNRU1TV0NUTCk7Ci0JaWYg KHJndnN3Y3RsICYgTUVNQ1RMX0NNRF9TVFMpIHsKLQkJRFJNX0RFQlVHKCJncHUgYnVzeSwgUkNT IGNoYW5nZSByZWplY3RlZFxuIik7Ci0JCXJldHVybiBmYWxzZTsgLyogc3RpbGwgYnVzeSB3aXRo IGFub3RoZXIgY29tbWFuZCAqLwotCX0KLQotCXJndnN3Y3RsID0gKE1FTUNUTF9DTURfQ0hGUkVR IDw8IE1FTUNUTF9DTURfU0hJRlQpIHwKLQkJKHZhbCA8PCBNRU1DVExfRlJFUV9TSElGVCkgfCBN RU1DVExfU0ZDQVZNOwotCWludGVsX3VuY29yZV93cml0ZTE2KHVuY29yZSwgTUVNU1dDVEwsIHJn dnN3Y3RsKTsKLQlpbnRlbF91bmNvcmVfcG9zdGluZ19yZWFkMTYodW5jb3JlLCBNRU1TV0NUTCk7 Ci0KLQlyZ3Zzd2N0bCB8PSBNRU1DVExfQ01EX1NUUzsKLQlpbnRlbF91bmNvcmVfd3JpdGUxNih1 bmNvcmUsIE1FTVNXQ1RMLCByZ3Zzd2N0bCk7Ci0KLQlyZXR1cm4gdHJ1ZTsKKwkvKgorCSAqIE9u IEliZXggUGVhayBhbmQgQ291Z2FyIFBvaW50LCB3ZSBuZWVkIHRvIGRpc2FibGUgY2xvY2sKKwkg KiBnYXRpbmcgZm9yIHRoZSBwYW5lbCBwb3dlciBzZXF1ZW5jZXIgb3IgaXQgd2lsbCBmYWlsIHRv CisJICogc3RhcnQgdXAgd2hlbiBubyBwb3J0cyBhcmUgYWN0aXZlLgorCSAqLworCUk5MTVfV1JJ VEUoU09VVEhfRFNQQ0xLX0dBVEVfRCwgUENIX0RQTFNVTklUX0NMT0NLX0dBVEVfRElTQUJMRSk7 CiB9CiAKLXN0YXRpYyB2b2lkIGlyb25sYWtlX2VuYWJsZV9kcnBzKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKK3N0YXRpYyB2b2lkIGc0eF9kaXNhYmxlX3RyaWNrbGVfZmVlZChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0Jc3RydWN0IGludGVsX3VuY29y ZSAqdW5jb3JlID0gJmRldl9wcml2LT51bmNvcmU7Ci0JdTMyIHJndm1vZGVjdGw7Ci0JdTggZm1h eCwgZm1pbiwgZnN0YXJ0LCB2c3RhcnQ7Ci0KLQlzcGluX2xvY2tfaXJxKCZtY2hkZXZfbG9jayk7 Ci0KLQlyZ3Ztb2RlY3RsID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBNRU1NT0RFQ1RMKTsK LQotCS8qIEVuYWJsZSB0ZW1wIHJlcG9ydGluZyAqLwotCWludGVsX3VuY29yZV93cml0ZTE2KHVu Y29yZSwgUE1NSVNDLCBJOTE1X1JFQUQoUE1NSVNDKSB8IE1DUFBDRV9FTik7Ci0JaW50ZWxfdW5j b3JlX3dyaXRlMTYodW5jb3JlLCBUU0MxLCBJOTE1X1JFQUQoVFNDMSkgfCBUU0UpOwotCi0JLyog MTAwbXMgUkMgZXZhbHVhdGlvbiBpbnRlcnZhbHMgKi8KLQlpbnRlbF91bmNvcmVfd3JpdGUodW5j b3JlLCBSQ1VQRUksIDEwMDAwMCk7Ci0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgUkNETkVJ LCAxMDAwMDApOwotCi0JLyogU2V0IG1heC9taW4gdGhyZXNob2xkcyB0byA5MG1zIGFuZCA4MG1z IHJlc3BlY3RpdmVseSAqLwotCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFJDQk1BWEFWRywg OTAwMDApOwotCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFJDQk1JTkFWRywgODAwMDApOwot Ci0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgTUVNSUhZU1QsIDEpOworCWVudW0gcGlwZSBw aXBlOwogCi0JLyogU2V0IHVwIG1pbiwgbWF4LCBhbmQgY3VyIGZvciBpbnRlcnJ1cHQgaGFuZGxp bmcgKi8KLQlmbWF4ID0gKHJndm1vZGVjdGwgJiBNRU1NT0RFX0ZNQVhfTUFTSykgPj4gTUVNTU9E RV9GTUFYX1NISUZUOwotCWZtaW4gPSAocmd2bW9kZWN0bCAmIE1FTU1PREVfRk1JTl9NQVNLKTsK LQlmc3RhcnQgPSAocmd2bW9kZWN0bCAmIE1FTU1PREVfRlNUQVJUX01BU0spID4+Ci0JCU1FTU1P REVfRlNUQVJUX1NISUZUOworCWZvcl9lYWNoX3BpcGUoZGV2X3ByaXYsIHBpcGUpIHsKKwkJSTkx NV9XUklURShEU1BDTlRSKHBpcGUpLAorCQkJICAgSTkxNV9SRUFEKERTUENOVFIocGlwZSkpIHwK KwkJCSAgIERJU1BQTEFORV9UUklDS0xFX0ZFRURfRElTQUJMRSk7CiAKLQl2c3RhcnQgPSAoaW50 ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBQWFZGUkVRKGZzdGFydCkpICYKLQkJICBQWFZGUkVRX1BY X01BU0spID4+IFBYVkZSRVFfUFhfU0hJRlQ7CisJCUk5MTVfV1JJVEUoRFNQU1VSRihwaXBlKSwg STkxNV9SRUFEKERTUFNVUkYocGlwZSkpKTsKKwkJUE9TVElOR19SRUFEKERTUFNVUkYocGlwZSkp OworCX0KK30KIAotCWRldl9wcml2LT5pcHMuZm1heCA9IGZtYXg7IC8qIElQUyBjYWxsYmFjayB3 aWxsIGluY3JlYXNlIHRoaXMgKi8KLQlkZXZfcHJpdi0+aXBzLmZzdGFydCA9IGZzdGFydDsKK3N0 YXRpYyB2b2lkIGlsa19pbml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCit7CisJdTMyIGRzcGNsa19nYXRlID0gSUxLX1ZSSFVOSVRfQ0xPQ0tfR0FURV9E SVNBQkxFOwogCi0JZGV2X3ByaXYtPmlwcy5tYXhfZGVsYXkgPSBmc3RhcnQ7Ci0JZGV2X3ByaXYt Pmlwcy5taW5fZGVsYXkgPSBmbWluOwotCWRldl9wcml2LT5pcHMuY3VyX2RlbGF5ID0gZnN0YXJ0 OworCS8qCisJICogUmVxdWlyZWQgZm9yIEZCQworCSAqIFdhRmJjRGlzYWJsZURwZmNDbG9ja0dh dGluZzppbGsKKwkgKi8KKwlkc3BjbGtfZ2F0ZSB8PSBJTEtfRFBGQ1JVTklUX0NMT0NLX0dBVEVf RElTQUJMRSB8CisJCSAgIElMS19EUEZDVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAorCQkgICBJ TEtfRFBGRFVOSVRfQ0xPQ0tfR0FURV9FTkFCTEU7CiAKLQlEUk1fREVCVUdfRFJJVkVSKCJmbWF4 OiAlZCwgZm1pbjogJWQsIGZzdGFydDogJWRcbiIsCi0JCQkgZm1heCwgZm1pbiwgZnN0YXJ0KTsK KwlJOTE1X1dSSVRFKFBDSF8zRENHRElTMCwKKwkJICAgTUFSSVVOSVRfQ0xPQ0tfR0FURV9ESVNB QkxFIHwKKwkJICAgU1ZTTVVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKKwlJOTE1X1dSSVRFKFBD SF8zRENHRElTMSwKKwkJICAgVkZNVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOwogCi0JaW50ZWxf dW5jb3JlX3dyaXRlKHVuY29yZSwKLQkJCSAgIE1FTUlOVFJFTiwKLQkJCSAgIE1FTUlOVF9DWF9T VVBSX0VOIHwgTUVNSU5UX0VWQUxfQ0hHX0VOKTsKKwkvKgorCSAqIEFjY29yZGluZyB0byB0aGUg c3BlYyB0aGUgZm9sbG93aW5nIGJpdHMgc2hvdWxkIGJlIHNldCBpbgorCSAqIG9yZGVyIHRvIGVu YWJsZSBtZW1vcnkgc2VsZi1yZWZyZXNoCisJICogVGhlIGJpdCAyMi8yMSBvZiAweDQyMDA0CisJ ICogVGhlIGJpdCA1IG9mIDB4NDIwMjAKKwkgKiBUaGUgYml0IDE1IG9mIDB4NDUwMDAKKwkgKi8K KwlJOTE1X1dSSVRFKElMS19ESVNQTEFZX0NISUNLRU4yLAorCQkgICAoSTkxNV9SRUFEKElMS19E SVNQTEFZX0NISUNLRU4yKSB8CisJCSAgICBJTEtfRFBBUkJfR0FURSB8IElMS19WU0RQRkRfRlVM TCkpOworCWRzcGNsa19nYXRlIHw9IElMS19EUEFSQlVOSVRfQ0xPQ0tfR0FURV9FTkFCTEU7CisJ STkxNV9XUklURShESVNQX0FSQl9DVEwsCisJCSAgIChJOTE1X1JFQUQoRElTUF9BUkJfQ1RMKSB8 CisJCSAgICBESVNQX0ZCQ19XTV9ESVMpKTsKIAogCS8qCi0JICogSW50ZXJydXB0cyB3aWxsIGJl IGVuYWJsZWQgaW4gaXJvbmxha2VfaXJxX3Bvc3RpbnN0YWxsCisJICogQmFzZWQgb24gdGhlIGRv Y3VtZW50IGZyb20gaGFyZHdhcmUgZ3V5cyB0aGUgZm9sbG93aW5nIGJpdHMKKwkgKiBzaG91bGQg YmUgc2V0IHVuY29uZGl0aW9uYWxseSBpbiBvcmRlciB0byBlbmFibGUgRkJDLgorCSAqIFRoZSBi aXQgMjIgb2YgMHg0MjAwMAorCSAqIFRoZSBiaXQgMjIgb2YgMHg0MjAwNAorCSAqIFRoZSBiaXQg Nyw4LDkgb2YgMHg0MjAyMC4KIAkgKi8KKwlpZiAoSVNfSVJPTkxBS0VfTShkZXZfcHJpdikpIHsK KwkJLyogV2FGYmNBc3luY2hGbGlwRGlzYWJsZUZiY1F1ZXVlOmlsayAqLworCQlJOTE1X1dSSVRF KElMS19ESVNQTEFZX0NISUNLRU4xLAorCQkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNL RU4xKSB8CisJCQkgICBJTEtfRkJDUV9ESVMpOworCQlJOTE1X1dSSVRFKElMS19ESVNQTEFZX0NI SUNLRU4yLAorCQkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4yKSB8CisJCQkgICBJ TEtfRFBBUkJfR0FURSk7CisJfQogCi0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgVklEU1RB UlQsIHZzdGFydCk7Ci0JaW50ZWxfdW5jb3JlX3Bvc3RpbmdfcmVhZCh1bmNvcmUsIFZJRFNUQVJU KTsKKwlJOTE1X1dSSVRFKElMS19EU1BDTEtfR0FURV9ELCBkc3BjbGtfZ2F0ZSk7CiAKLQlyZ3Zt b2RlY3RsIHw9IE1FTU1PREVfU1dNT0RFX0VOOwotCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUs IE1FTU1PREVDVEwsIHJndm1vZGVjdGwpOworCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tF TjIsCisJCSAgIEk5MTVfUkVBRChJTEtfRElTUExBWV9DSElDS0VOMikgfAorCQkgICBJTEtfRUxQ SU5fNDA5X1NFTEVDVCk7CisJSTkxNV9XUklURShfM0RfQ0hJQ0tFTjIsCisJCSAgIF8zRF9DSElD S0VOMl9XTV9SRUFEX1BJUEVMSU5FRCA8PCAxNiB8CisJCSAgIF8zRF9DSElDS0VOMl9XTV9SRUFE X1BJUEVMSU5FRCk7CiAKLQlpZiAod2FpdF9mb3JfYXRvbWljKChpbnRlbF91bmNvcmVfcmVhZCh1 bmNvcmUsIE1FTVNXQ1RMKSAmCi0JCQkgICAgIE1FTUNUTF9DTURfU1RTKSA9PSAwLCAxMCkpCi0J CURSTV9FUlJPUigic3R1Y2sgdHJ5aW5nIHRvIGNoYW5nZSBwZXJmIG1vZGVcbiIpOwotCW1kZWxh eSgxKTsKKwkvKiBXYURpc2FibGVSZW5kZXJDYWNoZVBpcGVsaW5lZEZsdXNoOmlsayAqLworCUk5 MTVfV1JJVEUoQ0FDSEVfTU9ERV8wLAorCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoQ00wX1BJUEVM SU5FRF9SRU5ERVJfRkxVU0hfRElTQUJMRSkpOwogCi0JaXJvbmxha2Vfc2V0X2RycHMoZGV2X3By aXYsIGZzdGFydCk7CisJLyogV2FEaXNhYmxlX1JlbmRlckNhY2hlX09wZXJhdGlvbmFsRmx1c2g6 aWxrICovCisJSTkxNV9XUklURShDQUNIRV9NT0RFXzAsIF9NQVNLRURfQklUX0RJU0FCTEUoUkNf T1BfRkxVU0hfRU5BQkxFKSk7CiAKLQlkZXZfcHJpdi0+aXBzLmxhc3RfY291bnQxID0KLQkJaW50 ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBETUlFQykgKwotCQlpbnRlbF91bmNvcmVfcmVhZCh1bmNv cmUsIEREUkVDKSArCi0JCWludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgQ1NJRUMpOwotCWRldl9w cml2LT5pcHMubGFzdF90aW1lMSA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyk7Ci0JZGV2X3By aXYtPmlwcy5sYXN0X2NvdW50MiA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgR0ZYRUMpOwot CWRldl9wcml2LT5pcHMubGFzdF90aW1lMiA9IGt0aW1lX2dldF9yYXdfbnMoKTsKKwlnNHhfZGlz YWJsZV90cmlja2xlX2ZlZWQoZGV2X3ByaXYpOwogCi0Jc3Bpbl91bmxvY2tfaXJxKCZtY2hkZXZf bG9jayk7CisJaWJ4X2luaXRfY2xvY2tfZ2F0aW5nKGRldl9wcml2KTsKIH0KIAotc3RhdGljIHZv aWQgaXJvbmxha2VfZGlzYWJsZV9kcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQor c3RhdGljIHZvaWQgY3B0X2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikKIHsKLQlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSAmaTkxNS0+dW5j b3JlOwotCXUxNiByZ3Zzd2N0bDsKLQotCXNwaW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKLQot CXJndnN3Y3RsID0gaW50ZWxfdW5jb3JlX3JlYWQxNih1bmNvcmUsIE1FTVNXQ1RMKTsKLQotCS8q IEFjayBpbnRlcnJ1cHRzLCBkaXNhYmxlIEVGQyBpbnRlcnJ1cHQgKi8KLQlpbnRlbF91bmNvcmVf d3JpdGUodW5jb3JlLAotCQkJICAgTUVNSU5UUkVOLAotCQkJICAgaW50ZWxfdW5jb3JlX3JlYWQo dW5jb3JlLCBNRU1JTlRSRU4pICYKLQkJCSAgIH5NRU1JTlRfRVZBTF9DSEdfRU4pOwotCWludGVs X3VuY29yZV93cml0ZSh1bmNvcmUsIE1FTUlOVFJTVFMsIE1FTUlOVF9FVkFMX0NIRyk7Ci0JaW50 ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwKLQkJCSAgIERFSUVSLAotCQkJICAgaW50ZWxfdW5jb3Jl X3JlYWQodW5jb3JlLCBERUlFUikgJiB+REVfUENVX0VWRU5UKTsKLQlpbnRlbF91bmNvcmVfd3Jp dGUodW5jb3JlLCBERUlJUiwgREVfUENVX0VWRU5UKTsKLQlpbnRlbF91bmNvcmVfd3JpdGUodW5j b3JlLAotCQkJICAgREVJTVIsCi0JCQkgICBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIERFSU1S KSB8IERFX1BDVV9FVkVOVCk7Ci0KLQkvKiBHbyBiYWNrIHRvIHRoZSBzdGFydGluZyBmcmVxdWVu Y3kgKi8KLQlpcm9ubGFrZV9zZXRfZHJwcyhpOTE1LCBpOTE1LT5pcHMuZnN0YXJ0KTsKLQltZGVs YXkoMSk7Ci0Jcmd2c3djdGwgfD0gTUVNQ1RMX0NNRF9TVFM7Ci0JaW50ZWxfdW5jb3JlX3dyaXRl KHVuY29yZSwgTUVNU1dDVEwsIHJndnN3Y3RsKTsKLQltZGVsYXkoMSk7CisJZW51bSBwaXBlIHBp cGU7CisJdTMyIHZhbDsKIAotCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOworCS8qCisJ ICogT24gSWJleCBQZWFrIGFuZCBDb3VnYXIgUG9pbnQsIHdlIG5lZWQgdG8gZGlzYWJsZSBjbG9j aworCSAqIGdhdGluZyBmb3IgdGhlIHBhbmVsIHBvd2VyIHNlcXVlbmNlciBvciBpdCB3aWxsIGZh aWwgdG8KKwkgKiBzdGFydCB1cCB3aGVuIG5vIHBvcnRzIGFyZSBhY3RpdmUuCisJICovCisJSTkx NV9XUklURShTT1VUSF9EU1BDTEtfR0FURV9ELCBQQ0hfRFBMU1VOSVRfQ0xPQ0tfR0FURV9ESVNB QkxFIHwKKwkJICAgUENIX0RQTFVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKKwkJICAgUENIX0NQ VU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOworCUk5MTVfV1JJVEUoU09VVEhfQ0hJQ0tFTjIsIEk5 MTVfUkVBRChTT1VUSF9DSElDS0VOMikgfAorCQkgICBEUExTX0VEUF9QUFNfRklYX0RJUyk7CisJ LyogVGhlIGJlbG93IGZpeGVzIHRoZSB3ZWlyZCBkaXNwbGF5IGNvcnJ1cHRpb24sIGEgZmV3IHBp eGVscyBzaGlmdGVkCisJICogZG93bndhcmQsIG9uIChvbmx5KSBMVkRTIG9mIHNvbWUgSFAgbGFw dG9wcyB3aXRoIElWWS4KKwkgKi8KKwlmb3JfZWFjaF9waXBlKGRldl9wcml2LCBwaXBlKSB7CisJ CXZhbCA9IEk5MTVfUkVBRChUUkFOU19DSElDS0VOMihwaXBlKSk7CisJCXZhbCB8PSBUUkFOU19D SElDS0VOMl9USU1JTkdfT1ZFUlJJREU7CisJCXZhbCAmPSB+VFJBTlNfQ0hJQ0tFTjJfRkRJX1BP TEFSSVRZX1JFVkVSU0VEOworCQlpZiAoZGV2X3ByaXYtPnZidC5mZGlfcnhfcG9sYXJpdHlfaW52 ZXJ0ZWQpCisJCQl2YWwgfD0gVFJBTlNfQ0hJQ0tFTjJfRkRJX1BPTEFSSVRZX1JFVkVSU0VEOwor CQl2YWwgJj0gflRSQU5TX0NISUNLRU4yX0ZSQU1FX1NUQVJUX0RFTEFZX01BU0s7CisJCXZhbCAm PSB+VFJBTlNfQ0hJQ0tFTjJfRElTQUJMRV9ERUVQX0NPTE9SX0NPVU5URVI7CisJCXZhbCAmPSB+ VFJBTlNfQ0hJQ0tFTjJfRElTQUJMRV9ERUVQX0NPTE9SX01PREVTV0lUQ0g7CisJCUk5MTVfV1JJ VEUoVFJBTlNfQ0hJQ0tFTjIocGlwZSksIHZhbCk7CisJfQorCS8qIFdBRFAwQ2xvY2tHYXRpbmdE aXNhYmxlICovCisJZm9yX2VhY2hfcGlwZShkZXZfcHJpdiwgcGlwZSkgeworCQlJOTE1X1dSSVRF KFRSQU5TX0NISUNLRU4xKHBpcGUpLAorCQkJICAgVFJBTlNfQ0hJQ0tFTjFfRFAwVU5JVF9HQ19E SVNBQkxFKTsKKwl9CiB9CiAKLS8qIFRoZXJlJ3MgYSBmdW5ueSBodyBpc3N1ZSB3aGVyZSB0aGUg aHcgcmV0dXJucyBhbGwgMCB3aGVuIHJlYWRpbmcgZnJvbQotICogR0VONl9SUF9JTlRFUlJVUFRf TElNSVRTLiBIZW5jZSB3ZSBhbHdheXMgbmVlZCB0byBjb21wdXRlIHRoZSBkZXNpcmVkIHZhbHVl Ci0gKiBvdXJzZWx2ZXMsIGluc3RlYWQgb2YgZG9pbmcgYSBybXcgY3ljbGUgKHdoaWNoIG1pZ2h0 IHJlc3VsdCBpbiB1cyBjbGVhcmluZwotICogYWxsIGxpbWl0cyBhbmQgdGhlIGdwdSBzdHVjayBh dCB3aGF0ZXZlciBmcmVxdWVuY3kgaXQgaXMgYXQgYXRtKS4KLSAqLwotc3RhdGljIHUzMiBpbnRl bF9ycHNfbGltaXRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTggdmFsKQor c3RhdGljIHZvaWQgZ2VuNl9jaGVja19tY2hfc2V0dXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQogewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0u cnBzOwotCXUzMiBsaW1pdHM7Ci0KLQkvKiBPbmx5IHNldCB0aGUgZG93biBsaW1pdCB3aGVuIHdl J3ZlIHJlYWNoZWQgdGhlIGxvd2VzdCBsZXZlbCB0byBhdm9pZAotCSAqIGdldHRpbmcgbW9yZSBp bnRlcnJ1cHRzLCBvdGhlcndpc2UgbGVhdmUgdGhpcyBjbGVhci4gVGhpcyBwcmV2ZW50cyBhCi0J ICogcmFjZSBpbiB0aGUgaHcgd2hlbiBjb21pbmcgb3V0IG9mIHJjNjogVGhlcmUncyBhIHRpbnkg d2luZG93IHdoZXJlCi0JICogdGhlIGh3IHJ1bnMgYXQgdGhlIG1pbmltYWwgY2xvY2sgYmVmb3Jl IHNlbGVjdGluZyB0aGUgZGVzaXJlZAotCSAqIGZyZXF1ZW5jeSwgaWYgdGhlIGRvd24gdGhyZXNo b2xkIGV4cGlyZXMgaW4gdGhhdCB3aW5kb3cgd2Ugd2lsbCBub3QKLQkgKiByZWNlaXZlIGEgZG93 biBpbnRlcnJ1cHQuICovCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkgewotCQlsaW1p dHMgPSAocnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQpIDw8IDIzOwotCQlpZiAodmFsIDw9IHJwcy0+ bWluX2ZyZXFfc29mdGxpbWl0KQotCQkJbGltaXRzIHw9IChycHMtPm1pbl9mcmVxX3NvZnRsaW1p dCkgPDwgMTQ7Ci0JfSBlbHNlIHsKLQkJbGltaXRzID0gcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQg PDwgMjQ7Ci0JCWlmICh2YWwgPD0gcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQpCi0JCQlsaW1pdHMg fD0gcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQgPDwgMTY7Ci0JfQorCXUzMiB0bXA7CiAKLQlyZXR1 cm4gbGltaXRzOworCXRtcCA9IEk5MTVfUkVBRChNQ0hfU1NLUEQpOworCWlmICgodG1wICYgTUNI X1NTS1BEX1dNMF9NQVNLKSAhPSBNQ0hfU1NLUERfV00wX1ZBTCkKKwkJRFJNX0RFQlVHX0tNUygi V3JvbmcgTUNIX1NTS1BEIHZhbHVlOiAweCUwOHggVGhpcyBjYW4gY2F1c2UgdW5kZXJydW5zLlxu IiwKKwkJCSAgICAgIHRtcCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJwc19zZXRfcG93ZXIoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpbnQgbmV3X3Bvd2VyKQorc3RhdGljIHZvaWQg Z2VuNl9pbml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp CiB7Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0JdTMy IHRocmVzaG9sZF91cCA9IDAsIHRocmVzaG9sZF9kb3duID0gMDsgLyogaW4gJSAqLwotCXUzMiBl aV91cCA9IDAsIGVpX2Rvd24gPSAwOwotCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmcnBzLT5wb3dl ci5tdXRleCk7CisJdTMyIGRzcGNsa19nYXRlID0gSUxLX1ZSSFVOSVRfQ0xPQ0tfR0FURV9ESVNB QkxFOwogCi0JaWYgKG5ld19wb3dlciA9PSBycHMtPnBvd2VyLm1vZGUpCi0JCXJldHVybjsKKwlJ OTE1X1dSSVRFKElMS19EU1BDTEtfR0FURV9ELCBkc3BjbGtfZ2F0ZSk7CiAKLQkvKiBOb3RlIHRo ZSB1bml0cyBoZXJlIGFyZSBub3QgZXhhY3RseSAxdXMsIGJ1dCAxMjgwbnMuICovCi0Jc3dpdGNo IChuZXdfcG93ZXIpIHsKLQljYXNlIExPV19QT1dFUjoKLQkJLyogVXBjbG9jayBpZiBtb3JlIHRo YW4gOTUlIGJ1c3kgb3ZlciAxNm1zICovCi0JCWVpX3VwID0gMTYwMDA7Ci0JCXRocmVzaG9sZF91 cCA9IDk1OworCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIsCisJCSAgIEk5MTVfUkVB RChJTEtfRElTUExBWV9DSElDS0VOMikgfAorCQkgICBJTEtfRUxQSU5fNDA5X1NFTEVDVCk7CiAK LQkJLyogRG93bmNsb2NrIGlmIGxlc3MgdGhhbiA4NSUgYnVzeSBvdmVyIDMybXMgKi8KLQkJZWlf ZG93biA9IDMyMDAwOwotCQl0aHJlc2hvbGRfZG93biA9IDg1OwotCQlicmVhazsKKwkvKiBXYURp c2FibGVIaVpQbGFuZXNXaGVuTVNBQUVuYWJsZWQ6c25iICovCisJSTkxNV9XUklURShfM0RfQ0hJ Q0tFTiwKKwkJICAgX01BU0tFRF9CSVRfRU5BQkxFKF8zRF9DSElDS0VOX0hJWl9QTEFORV9ESVNB QkxFX01TQUFfNFhfU05CKSk7CiAKLQljYXNlIEJFVFdFRU46Ci0JCS8qIFVwY2xvY2sgaWYgbW9y ZSB0aGFuIDkwJSBidXN5IG92ZXIgMTNtcyAqLwotCQllaV91cCA9IDEzMDAwOwotCQl0aHJlc2hv bGRfdXAgPSA5MDsKKwkvKiBXYURpc2FibGVfUmVuZGVyQ2FjaGVfT3BlcmF0aW9uYWxGbHVzaDpz bmIgKi8KKwlJOTE1X1dSSVRFKENBQ0hFX01PREVfMCwgX01BU0tFRF9CSVRfRElTQUJMRShSQ19P UF9GTFVTSF9FTkFCTEUpKTsKIAotCQkvKiBEb3duY2xvY2sgaWYgbGVzcyB0aGFuIDc1JSBidXN5 IG92ZXIgMzJtcyAqLwotCQllaV9kb3duID0gMzIwMDA7Ci0JCXRocmVzaG9sZF9kb3duID0gNzU7 Ci0JCWJyZWFrOworCS8qCisJICogQlNwZWMgcmVjb29tZW5kcyA4eDQgd2hlbiBNU0FBIGlzIHVz ZWQsCisJICogaG93ZXZlciBpbiBwcmFjdGljZSAxNng0IHNlZW1zIGZhc3Rlc3QuCisJICoKKwkg KiBOb3RlIHRoYXQgUFMvV00gdGhyZWFkIGNvdW50cyBkZXBlbmQgb24gdGhlIFdJWiBoYXNoaW5n CisJICogZGlzYWJsZSBiaXQsIHdoaWNoIHdlIGRvbid0IHRvdWNoIGhlcmUsIGJ1dCBpdCdzIGdv b2QKKwkgKiB0byBrZWVwIGluIG1pbmQgKHNlZSAzRFNUQVRFX1BTIGFuZCAzRFNUQVRFX1dNKS4K KwkgKi8KKwlJOTE1X1dSSVRFKEdFTjZfR1RfTU9ERSwKKwkJICAgX01BU0tFRF9GSUVMRChHRU42 X1dJWl9IQVNISU5HX01BU0ssIEdFTjZfV0laX0hBU0hJTkdfMTZ4NCkpOwogCi0JY2FzZSBISUdI X1BPV0VSOgotCQkvKiBVcGNsb2NrIGlmIG1vcmUgdGhhbiA4NSUgYnVzeSBvdmVyIDEwbXMgKi8K LQkJZWlfdXAgPSAxMDAwMDsKLQkJdGhyZXNob2xkX3VwID0gODU7CisJSTkxNV9XUklURShDQUNI RV9NT0RFXzAsCisJCSAgIF9NQVNLRURfQklUX0RJU0FCTEUoQ00wX1NUQ19FVklDVF9ESVNBQkxF X0xSQV9TTkIpKTsKIAotCQkvKiBEb3duY2xvY2sgaWYgbGVzcyB0aGFuIDYwJSBidXN5IG92ZXIg MzJtcyAqLwotCQllaV9kb3duID0gMzIwMDA7Ci0JCXRocmVzaG9sZF9kb3duID0gNjA7Ci0JCWJy ZWFrOwotCX0KKwlJOTE1X1dSSVRFKEdFTjZfVUNHQ1RMMSwKKwkJICAgSTkxNV9SRUFEKEdFTjZf VUNHQ1RMMSkgfAorCQkgICBHRU42X0JMQlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKKwkJICAg R0VONl9DU1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKIAotCS8qIFdoZW4gYnl0IGNhbiBzdXJ2 aXZlIHdpdGhvdXQgc3lzdGVtIGhhbmcgd2l0aCBkeW5hbWljCi0JICogc3cgZnJlcSBhZGp1c3Rt ZW50cywgdGhpcyByZXN0cmljdGlvbiBjYW4gYmUgbGlmdGVkLgorCS8qIEFjY29yZGluZyB0byB0 aGUgQlNwZWMgdm9sMWcsIGJpdCAxMiAoUkNQQlVOSVQpIGNsb2NrCisJICogZ2F0aW5nIGRpc2Fi bGUgbXVzdCBiZSBzZXQuICBGYWlsdXJlIHRvIHNldCBpdCByZXN1bHRzIGluCisJICogZmxpY2tl cmluZyBwaXhlbHMgZHVlIHRvIFogd3JpdGUgb3JkZXJpbmcgZmFpbHVyZXMgYWZ0ZXIKKwkgKiBz b21lIGFtb3VudCBvZiBydW50aW1lIGluIHRoZSBNZXNhICJmaXJlIiBkZW1vLCBhbmQgVW5pZ2lu ZQorCSAqIFNhbmN0dWFyeSBhbmQgVHJvcGljcywgYW5kIGFwcGFyZW50bHkgYW55dGhpbmcgZWxz ZSB3aXRoCisJICogYWxwaGEgdGVzdCBvciBwaXhlbCBkaXNjYXJkLgorCSAqCisJICogQWNjb3Jk aW5nIHRvIHRoZSBzcGVjLCBiaXQgMTEgKFJDQ1VOSVQpIG11c3QgYWxzbyBiZSBzZXQsCisJICog YnV0IHdlIGRpZG4ndCBkZWJ1ZyBhY3R1YWwgdGVzdGNhc2VzIHRvIGZpbmQgaXQgb3V0LgorCSAq CisJICogV2FEaXNhYmxlUkNDVW5pdENsb2NrR2F0aW5nOnNuYgorCSAqIFdhRGlzYWJsZVJDUEJV bml0Q2xvY2tHYXRpbmc6c25iCiAJICovCi0JaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKQot CQlnb3RvIHNraXBfaHdfd3JpdGU7Ci0KLQlJOTE1X1dSSVRFKEdFTjZfUlBfVVBfRUksCi0JCSAg IEdUX0lOVEVSVkFMX0ZST01fVVMoZGV2X3ByaXYsIGVpX3VwKSk7Ci0JSTkxNV9XUklURShHRU42 X1JQX1VQX1RIUkVTSE9MRCwKLQkJICAgR1RfSU5URVJWQUxfRlJPTV9VUyhkZXZfcHJpdiwKLQkJ CQkgICAgICAgZWlfdXAgKiB0aHJlc2hvbGRfdXAgLyAxMDApKTsKLQotCUk5MTVfV1JJVEUoR0VO Nl9SUF9ET1dOX0VJLAotCQkgICBHVF9JTlRFUlZBTF9GUk9NX1VTKGRldl9wcml2LCBlaV9kb3du KSk7Ci0JSTkxNV9XUklURShHRU42X1JQX0RPV05fVEhSRVNIT0xELAotCQkgICBHVF9JTlRFUlZB TF9GUk9NX1VTKGRldl9wcml2LAotCQkJCSAgICAgICBlaV9kb3duICogdGhyZXNob2xkX2Rvd24g LyAxMDApKTsKLQotCUk5MTVfV1JJVEUoR0VONl9SUF9DT05UUk9MLAotCQkgICAoSU5URUxfR0VO KGRldl9wcml2KSA+IDkgPyAwIDogR0VONl9SUF9NRURJQV9UVVJCTykgfAotCQkgICBHRU42X1JQ X01FRElBX0hXX05PUk1BTF9NT0RFIHwKLQkJICAgR0VONl9SUF9NRURJQV9JU19HRlggfAotCQkg ICBHRU42X1JQX0VOQUJMRSB8Ci0JCSAgIEdFTjZfUlBfVVBfQlVTWV9BVkcgfAotCQkgICBHRU42 X1JQX0RPV05fSURMRV9BVkcpOwotCi1za2lwX2h3X3dyaXRlOgotCXJwcy0+cG93ZXIubW9kZSA9 IG5ld19wb3dlcjsKLQlycHMtPnBvd2VyLnVwX3RocmVzaG9sZCA9IHRocmVzaG9sZF91cDsKLQly cHMtPnBvd2VyLmRvd25fdGhyZXNob2xkID0gdGhyZXNob2xkX2Rvd247Ci19Ci0KLXN0YXRpYyB2 b2lkIGdlbjZfc2V0X3Jwc190aHJlc2hvbGRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwgdTggdmFsKQotewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3Rf cG0ucnBzOwotCWludCBuZXdfcG93ZXI7Ci0KLQluZXdfcG93ZXIgPSBycHMtPnBvd2VyLm1vZGU7 Ci0Jc3dpdGNoIChycHMtPnBvd2VyLm1vZGUpIHsKLQljYXNlIExPV19QT1dFUjoKLQkJaWYgKHZh bCA+IHJwcy0+ZWZmaWNpZW50X2ZyZXEgKyAxICYmCi0JCSAgICB2YWwgPiBycHMtPmN1cl9mcmVx KQotCQkJbmV3X3Bvd2VyID0gQkVUV0VFTjsKLQkJYnJlYWs7CisJSTkxNV9XUklURShHRU42X1VD R0NUTDIsCisJCSAgIEdFTjZfUkNQQlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKKwkJICAgR0VO Nl9SQ0NVTklUX0NMT0NLX0dBVEVfRElTQUJMRSk7CiAKLQljYXNlIEJFVFdFRU46Ci0JCWlmICh2 YWwgPD0gcnBzLT5lZmZpY2llbnRfZnJlcSAmJgotCQkgICAgdmFsIDwgcnBzLT5jdXJfZnJlcSkK LQkJCW5ld19wb3dlciA9IExPV19QT1dFUjsKLQkJZWxzZSBpZiAodmFsID49IHJwcy0+cnAwX2Zy ZXEgJiYKLQkJCSB2YWwgPiBycHMtPmN1cl9mcmVxKQotCQkJbmV3X3Bvd2VyID0gSElHSF9QT1dF UjsKLQkJYnJlYWs7CisJLyogV2FTdHJpcHNGYW5zRGlzYWJsZUZhc3RDbGlwUGVyZm9ybWFuY2VG aXg6c25iICovCisJSTkxNV9XUklURShfM0RfQ0hJQ0tFTjMsCisJCSAgIF9NQVNLRURfQklUX0VO QUJMRShfM0RfQ0hJQ0tFTjNfU0ZfRElTQUJMRV9GQVNUQ0xJUF9DVUxMKSk7CiAKLQljYXNlIEhJ R0hfUE9XRVI6Ci0JCWlmICh2YWwgPCAocnBzLT5ycDFfZnJlcSArIHJwcy0+cnAwX2ZyZXEpID4+ IDEgJiYKLQkJICAgIHZhbCA8IHJwcy0+Y3VyX2ZyZXEpCi0JCQluZXdfcG93ZXIgPSBCRVRXRUVO OwotCQlicmVhazsKLQl9Ci0JLyogTWF4L21pbiBiaW5zIGFyZSBzcGVjaWFsICovCi0JaWYgKHZh bCA8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkKLQkJbmV3X3Bvd2VyID0gTE9XX1BPV0VSOwot CWlmICh2YWwgPj0gcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQpCi0JCW5ld19wb3dlciA9IEhJR0hf UE9XRVI7CisJLyoKKwkgKiBCc3BlYyBzYXlzOgorCSAqICJUaGlzIGJpdCBtdXN0IGJlIHNldCBp ZiAzRFNUQVRFX0NMSVAgY2xpcCBtb2RlIGlzIHNldCB0byBub3JtYWwgYW5kCisJICogM0RTVEFU RV9TRiBudW1iZXIgb2YgU0Ygb3V0cHV0IGF0dHJpYnV0ZXMgaXMgbW9yZSB0aGFuIDE2LiIKKwkg Ki8KKwlJOTE1X1dSSVRFKF8zRF9DSElDS0VOMywKKwkJICAgX01BU0tFRF9CSVRfRU5BQkxFKF8z RF9DSElDS0VOM19TRl9ESVNBQkxFX1BJUEVMSU5FRF9BVFRSX0ZFVENIKSk7CiAKLQltdXRleF9s b2NrKCZycHMtPnBvd2VyLm11dGV4KTsKLQlpZiAocnBzLT5wb3dlci5pbnRlcmFjdGl2ZSkKLQkJ bmV3X3Bvd2VyID0gSElHSF9QT1dFUjsKLQlycHNfc2V0X3Bvd2VyKGRldl9wcml2LCBuZXdfcG93 ZXIpOwotCW11dGV4X3VubG9jaygmcnBzLT5wb3dlci5tdXRleCk7Ci19CisJLyoKKwkgKiBBY2Nv cmRpbmcgdG8gdGhlIHNwZWMgdGhlIGZvbGxvd2luZyBiaXRzIHNob3VsZCBiZQorCSAqIHNldCBp biBvcmRlciB0byBlbmFibGUgbWVtb3J5IHNlbGYtcmVmcmVzaCBhbmQgZmJjOgorCSAqIFRoZSBi aXQyMSBhbmQgYml0MjIgb2YgMHg0MjAwMAorCSAqIFRoZSBiaXQyMSBhbmQgYml0MjIgb2YgMHg0 MjAwNAorCSAqIFRoZSBiaXQ1IGFuZCBiaXQ3IG9mIDB4NDIwMjAKKwkgKiBUaGUgYml0MTQgb2Yg MHg3MDE4MAorCSAqIFRoZSBiaXQxNCBvZiAweDcxMTgwCisJICoKKwkgKiBXYUZiY0FzeW5jaEZs aXBEaXNhYmxlRmJjUXVldWU6c25iCisJICovCisJSTkxNV9XUklURShJTEtfRElTUExBWV9DSElD S0VOMSwKKwkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4xKSB8CisJCSAgIElMS19G QkNRX0RJUyB8IElMS19QQUJTVFJFVENIX0RJUyk7CisJSTkxNV9XUklURShJTEtfRElTUExBWV9D SElDS0VOMiwKKwkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4yKSB8CisJCSAgIElM S19EUEFSQl9HQVRFIHwgSUxLX1ZTRFBGRF9GVUxMKTsKKwlJOTE1X1dSSVRFKElMS19EU1BDTEtf R0FURV9ELAorCQkgICBJOTE1X1JFQUQoSUxLX0RTUENMS19HQVRFX0QpIHwKKwkJICAgSUxLX0RQ QVJCVU5JVF9DTE9DS19HQVRFX0VOQUJMRSAgfAorCQkgICBJTEtfRFBGRFVOSVRfQ0xPQ0tfR0FU RV9FTkFCTEUpOwogCi12b2lkIGludGVsX3Jwc19tYXJrX2ludGVyYWN0aXZlKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1LCBib29sIGludGVyYWN0aXZlKQotewotCXN0cnVjdCBpbnRlbF9y cHMgKnJwcyA9ICZpOTE1LT5ndF9wbS5ycHM7CisJZzR4X2Rpc2FibGVfdHJpY2tsZV9mZWVkKGRl dl9wcml2KTsKIAotCWlmIChJTlRFTF9HRU4oaTkxNSkgPCA2KQotCQlyZXR1cm47CisJY3B0X2lu aXRfY2xvY2tfZ2F0aW5nKGRldl9wcml2KTsKIAotCW11dGV4X2xvY2soJnJwcy0+cG93ZXIubXV0 ZXgpOwotCWlmIChpbnRlcmFjdGl2ZSkgewotCQlpZiAoIXJwcy0+cG93ZXIuaW50ZXJhY3RpdmUr KyAmJiBSRUFEX09OQ0UoaTkxNS0+Z3QuYXdha2UpKQotCQkJcnBzX3NldF9wb3dlcihpOTE1LCBI SUdIX1BPV0VSKTsKLQl9IGVsc2UgewotCQlHRU1fQlVHX09OKCFycHMtPnBvd2VyLmludGVyYWN0 aXZlKTsKLQkJcnBzLT5wb3dlci5pbnRlcmFjdGl2ZS0tOwotCX0KLQltdXRleF91bmxvY2soJnJw cy0+cG93ZXIubXV0ZXgpOworCWdlbjZfY2hlY2tfbWNoX3NldHVwKGRldl9wcml2KTsKIH0KIAot c3RhdGljIHUzMiBnZW42X3Jwc19wbV9tYXNrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwgdTggdmFsKQorc3RhdGljIHZvaWQgZ2VuN19zZXR1cF9maXhlZF9mdW5jX3NjaGVkdWxl cihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0Jc3RydWN0IGludGVsX3Jw cyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0JdTMyIG1hc2sgPSAwOwotCi0JLyogV2Ug dXNlIFVQX0VJX0VYUElSRUQgaW50ZXJ1cHRzIGZvciBib3RoIHVwL2Rvd24gaW4gbWFudWFsIG1v ZGUgKi8KLQlpZiAodmFsID4gcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQpCi0JCW1hc2sgfD0gR0VO Nl9QTV9SUF9VUF9FSV9FWFBJUkVEIHwgR0VONl9QTV9SUF9ET1dOX1RIUkVTSE9MRCB8IEdFTjZf UE1fUlBfRE9XTl9USU1FT1VUOwotCWlmICh2YWwgPCBycHMtPm1heF9mcmVxX3NvZnRsaW1pdCkK LQkJbWFzayB8PSBHRU42X1BNX1JQX1VQX0VJX0VYUElSRUQgfCBHRU42X1BNX1JQX1VQX1RIUkVT SE9MRDsKLQotCW1hc2sgJj0gZGV2X3ByaXYtPnBtX3Jwc19ldmVudHM7Ci0KLQlyZXR1cm4gZ2Vu Nl9zYW5pdGl6ZV9ycHNfcG1fbWFzayhkZXZfcHJpdiwgfm1hc2spOwotfQotCi0vKiBnZW42X3Nl dF9ycHMgaXMgY2FsbGVkIHRvIHVwZGF0ZSB0aGUgZnJlcXVlbmN5IHJlcXVlc3QsIGJ1dCBzaG91 bGQgYWxzbyBiZQotICogY2FsbGVkIHdoZW4gdGhlIHJhbmdlIChtaW5fZGVsYXkgYW5kIG1heF9k ZWxheSkgaXMgbW9kaWZpZWQgc28gdGhhdCB3ZSBjYW4KLSAqIHVwZGF0ZSB0aGUgR0VONl9SUF9J TlRFUlJVUFRfTElNSVRTIHJlZ2lzdGVyIGFjY29yZGluZ2x5LiAqLwotc3RhdGljIGludCBnZW42 X3NldF9ycHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1OCB2YWwpCi17Ci0J c3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0KLQkvKiBtaW4v bWF4IGRlbGF5IG1heSBzdGlsbCBoYXZlIGJlZW4gbW9kaWZpZWQgc28gYmUgc3VyZSB0bwotCSAq IHdyaXRlIHRoZSBsaW1pdHMgdmFsdWUuCi0JICovCi0JaWYgKHZhbCAhPSBycHMtPmN1cl9mcmVx KSB7Ci0JCWdlbjZfc2V0X3Jwc190aHJlc2hvbGRzKGRldl9wcml2LCB2YWwpOwotCi0JCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDkpCi0JCQlJOTE1X1dSSVRFKEdFTjZfUlBOU1dSRVEsCi0J CQkJICAgR0VOOV9GUkVRVUVOQ1kodmFsKSk7Ci0JCWVsc2UgaWYgKElTX0hBU1dFTEwoZGV2X3By aXYpIHx8IElTX0JST0FEV0VMTChkZXZfcHJpdikpCi0JCQlJOTE1X1dSSVRFKEdFTjZfUlBOU1dS RVEsCi0JCQkJICAgSFNXX0ZSRVFVRU5DWSh2YWwpKTsKLQkJZWxzZQotCQkJSTkxNV9XUklURShH RU42X1JQTlNXUkVRLAotCQkJCSAgIEdFTjZfRlJFUVVFTkNZKHZhbCkgfAotCQkJCSAgIEdFTjZf T0ZGU0VUKDApIHwKLQkJCQkgICBHRU42X0FHR1JFU1NJVkVfVFVSQk8pOwotCX0KLQotCS8qIE1h a2Ugc3VyZSB3ZSBjb250aW51ZSB0byBnZXQgaW50ZXJydXB0cwotCSAqIHVudGlsIHdlIGhpdCB0 aGUgbWluaW11bSBvciBtYXhpbXVtIGZyZXF1ZW5jaWVzLgotCSAqLwotCUk5MTVfV1JJVEUoR0VO Nl9SUF9JTlRFUlJVUFRfTElNSVRTLCBpbnRlbF9ycHNfbGltaXRzKGRldl9wcml2LCB2YWwpKTsK LQlJOTE1X1dSSVRFKEdFTjZfUE1JTlRSTVNLLCBnZW42X3Jwc19wbV9tYXNrKGRldl9wcml2LCB2 YWwpKTsKLQotCXJwcy0+Y3VyX2ZyZXEgPSB2YWw7Ci0JdHJhY2VfaW50ZWxfZ3B1X2ZyZXFfY2hh bmdlKGludGVsX2dwdV9mcmVxKGRldl9wcml2LCB2YWwpKTsKLQotCXJldHVybiAwOwotfQotCi1z dGF0aWMgaW50IHZhbGxleXZpZXdfc2V0X3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsIHU4IHZhbCkKLXsKLQlpbnQgZXJyOwotCi0JaWYgKFdBUk5fT05DRShJU19DSEVSUllW SUVXKGRldl9wcml2KSAmJiAodmFsICYgMSksCi0JCSAgICAgICJPZGQgR1BVIGZyZXEgdmFsdWVc biIpKQotCQl2YWwgJj0gfjE7Ci0KLQlJOTE1X1dSSVRFKEdFTjZfUE1JTlRSTVNLLCBnZW42X3Jw c19wbV9tYXNrKGRldl9wcml2LCB2YWwpKTsKLQotCWlmICh2YWwgIT0gZGV2X3ByaXYtPmd0X3Bt LnJwcy5jdXJfZnJlcSkgewotCQl2bHZfcHVuaXRfZ2V0KGRldl9wcml2KTsKLQkJZXJyID0gdmx2 X3B1bml0X3dyaXRlKGRldl9wcml2LCBQVU5JVF9SRUdfR1BVX0ZSRVFfUkVRLCB2YWwpOwotCQl2 bHZfcHVuaXRfcHV0KGRldl9wcml2KTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0KLQkJ Z2VuNl9zZXRfcnBzX3RocmVzaG9sZHMoZGV2X3ByaXYsIHZhbCk7Ci0JfQotCi0JZGV2X3ByaXYt Pmd0X3BtLnJwcy5jdXJfZnJlcSA9IHZhbDsKLQl0cmFjZV9pbnRlbF9ncHVfZnJlcV9jaGFuZ2Uo aW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHZhbCkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIHZs dl9zZXRfcnBzX2lkbGU6IFNldCB0aGUgZnJlcXVlbmN5IHRvIGlkbGUsIGlmIEdmeCBjbG9ja3Mg YXJlIGRvd24KLSAqCi0gKiAqIElmIEdmeCBpcyBJZGxlLCB0aGVuCi0gKiAxLiBGb3JjZXdha2Ug TWVkaWEgd2VsbC4KLSAqIDIuIFJlcXVlc3QgaWRsZSBmcmVxLgotICogMy4gUmVsZWFzZSBGb3Jj ZXdha2Ugb2YgTWVkaWEgd2VsbC4KLSovCi1zdGF0aWMgdm9pZCB2bHZfc2V0X3Jwc19pZGxlKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpy cHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKLQl1MzIgdmFsID0gcnBzLT5pZGxlX2ZyZXE7Ci0J aW50IGVycjsKLQotCWlmIChycHMtPmN1cl9mcmVxIDw9IHZhbCkKLQkJcmV0dXJuOwotCi0JLyog VGhlIHB1bml0IGRlbGF5cyB0aGUgd3JpdGUgb2YgdGhlIGZyZXF1ZW5jeSBhbmQgdm9sdGFnZSB1 bnRpbCBpdAotCSAqIGRldGVybWluZXMgdGhlIEdQVSBpcyBhd2FrZS4gRHVyaW5nIG5vcm1hbCB1 c2FnZSB3ZSBkb24ndCB3YW50IHRvCi0JICogd2FzdGUgcG93ZXIgY2hhbmdpbmcgdGhlIGZyZXF1 ZW5jeSBpZiB0aGUgR1BVIGlzIHNsZWVwaW5nIChyYzYpLgotCSAqIEhvd2V2ZXIsIHRoZSBHUFUg YW5kIGRyaXZlciBpcyBub3cgaWRsZSBhbmQgd2UgZG8gbm90IHdhbnQgdG8gZGVsYXkKLQkgKiBz d2l0Y2hpbmcgdG8gbWluaW11bSB2b2x0YWdlIChyZWR1Y2luZyBwb3dlciB3aGlsc3QgaWRsZSkg YXMgd2UgZG8KLQkgKiBub3QgZXhwZWN0IHRvIGJlIHdva2VuIGluIHRoZSBuZWFyIGZ1dHVyZSBh bmQgc28gbXVzdCBmbHVzaCB0aGUKLQkgKiBjaGFuZ2UgYnkgd2FraW5nIHRoZSBkZXZpY2UuCi0J ICoKLQkgKiBXZSBjaG9vc2UgdG8gdGFrZSB0aGUgbWVkaWEgcG93ZXJ3ZWxsIChlaXRoZXIgd291 bGQgZG8gdG8gdHJpY2sgdGhlCi0JICogcHVuaXQgaW50byBjb21taXR0aW5nIHRoZSB2b2x0YWdl IGNoYW5nZSkgYXMgdGhhdCB0YWtlcyBhIGxvdCBsZXNzCi0JICogcG93ZXIgdGhhbiB0aGUgcmVu ZGVyIHBvd2Vyd2VsbC4KLQkgKi8KLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldCgmZGV2X3By aXYtPnVuY29yZSwgRk9SQ0VXQUtFX01FRElBKTsKLQllcnIgPSB2YWxsZXl2aWV3X3NldF9ycHMo ZGV2X3ByaXYsIHZhbCk7Ci0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoJmRldl9wcml2LT51 bmNvcmUsIEZPUkNFV0FLRV9NRURJQSk7Ci0KLQlpZiAoZXJyKQotCQlEUk1fRVJST1IoIkZhaWxl ZCB0byBzZXQgUlBTIGZvciBpZGxlXG4iKTsKLX0KLQotdm9pZCBnZW42X3Jwc19idXN5KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMg PSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKLQotCW11dGV4X2xvY2soJnJwcy0+bG9jayk7Ci0JaWYg KHJwcy0+ZW5hYmxlZCkgewotCQl1OCBmcmVxOwotCi0JCWlmIChkZXZfcHJpdi0+cG1fcnBzX2V2 ZW50cyAmIEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJFRCkKLQkJCWdlbjZfcnBzX3Jlc2V0X2VpKGRl dl9wcml2KTsKLQkJSTkxNV9XUklURShHRU42X1BNSU5UUk1TSywKLQkJCSAgIGdlbjZfcnBzX3Bt X21hc2soZGV2X3ByaXYsIHJwcy0+Y3VyX2ZyZXEpKTsKLQotCQlnZW42X2VuYWJsZV9ycHNfaW50 ZXJydXB0cyhkZXZfcHJpdik7Ci0KLQkJLyogVXNlIHRoZSB1c2VyJ3MgZGVzaXJlZCBmcmVxdWVu Y3kgYXMgYSBndWlkZSwgYnV0IGZvciBiZXR0ZXIKLQkJICogcGVyZm9ybWFuY2UsIGp1bXAgZGly ZWN0bHkgdG8gUlBlIGFzIG91ciBzdGFydGluZyBmcmVxdWVuY3kuCi0JCSAqLwotCQlmcmVxID0g bWF4KHJwcy0+Y3VyX2ZyZXEsCi0JCQkgICBycHMtPmVmZmljaWVudF9mcmVxKTsKLQotCQlpZiAo aW50ZWxfc2V0X3JwcyhkZXZfcHJpdiwKLQkJCQkgIGNsYW1wKGZyZXEsCi0JCQkJCXJwcy0+bWlu X2ZyZXFfc29mdGxpbWl0LAotCQkJCQlycHMtPm1heF9mcmVxX3NvZnRsaW1pdCkpKQotCQkJRFJN X0RFQlVHX0RSSVZFUigiRmFpbGVkIHRvIHNldCBpZGxlIGZyZXF1ZW5jeVxuIik7Ci0JfQotCW11 dGV4X3VubG9jaygmcnBzLT5sb2NrKTsKLX0KLQotdm9pZCBnZW42X3Jwc19pZGxlKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAm ZGV2X3ByaXYtPmd0X3BtLnJwczsKLQotCS8qIEZsdXNoIG91ciBib3R0b20taGFsZiBzbyB0aGF0 IGl0IGRvZXMgbm90IHJhY2Ugd2l0aCB1cwotCSAqIHNldHRpbmcgdGhlIGlkbGUgZnJlcXVlbmN5 IGFuZCBzbyB0aGF0IGl0IGlzIGJvdW5kZWQgYnkKLQkgKiBvdXIgcnBtIHdha2VyZWYuIEFuZCB0 aGVuIGRpc2FibGUgdGhlIGludGVycnVwdHMgdG8gc3RvcCBhbnkKLQkgKiBmdXRoZXIgUlBTIHJl Y2xvY2tpbmcgd2hpbHN0IHdlIGFyZSBhc2xlZXAuCi0JICovCi0JZ2VuNl9kaXNhYmxlX3Jwc19p bnRlcnJ1cHRzKGRldl9wcml2KTsKLQotCW11dGV4X2xvY2soJnJwcy0+bG9jayk7Ci0JaWYgKHJw cy0+ZW5hYmxlZCkgewotCQlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZ VklFVyhkZXZfcHJpdikpCi0JCQl2bHZfc2V0X3Jwc19pZGxlKGRldl9wcml2KTsKLQkJZWxzZQot CQkJZ2VuNl9zZXRfcnBzKGRldl9wcml2LCBycHMtPmlkbGVfZnJlcSk7Ci0JCXJwcy0+bGFzdF9h ZGogPSAwOwotCQlJOTE1X1dSSVRFKEdFTjZfUE1JTlRSTVNLLAotCQkJICAgZ2VuNl9zYW5pdGl6 ZV9ycHNfcG1fbWFzayhkZXZfcHJpdiwgfjApKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZycHMtPmxv Y2spOwotfQotCi12b2lkIGdlbjZfcnBzX2Jvb3N0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQot ewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZycS0+aTkxNS0+Z3RfcG0ucnBzOwotCXVuc2ln bmVkIGxvbmcgZmxhZ3M7Ci0JYm9vbCBib29zdDsKLQotCS8qIFRoaXMgaXMgaW50ZW50aW9uYWxs eSByYWN5ISBXZSBwZWVrIGF0IHRoZSBzdGF0ZSBoZXJlLCB0aGVuCi0JICogdmFsaWRhdGUgaW5z aWRlIHRoZSBSUFMgd29ya2VyLgotCSAqLwotCWlmICghcnBzLT5lbmFibGVkKQotCQlyZXR1cm47 Ci0KLQlpZiAoaTkxNV9yZXF1ZXN0X3NpZ25hbGVkKHJxKSkKLQkJcmV0dXJuOwotCi0JLyogU2Vy aWFsaXplcyB3aXRoIGk5MTVfcmVxdWVzdF9yZXRpcmUoKSAqLwotCWJvb3N0ID0gZmFsc2U7Ci0J c3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7Ci0JaWYgKCFpOTE1X3JlcXVlc3Rf aGFzX3dhaXRib29zdChycSkgJiYKLQkgICAgIWRtYV9mZW5jZV9pc19zaWduYWxlZF9sb2NrZWQo JnJxLT5mZW5jZSkpIHsKLQkJYm9vc3QgPSAhYXRvbWljX2ZldGNoX2luYygmcnBzLT5udW1fd2Fp dGVycyk7Ci0JCXJxLT5mbGFncyB8PSBJOTE1X1JFUVVFU1RfV0FJVEJPT1NUOwotCX0KLQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOwotCWlmICghYm9vc3QpCi0JCXJl dHVybjsKLQotCWlmIChSRUFEX09OQ0UocnBzLT5jdXJfZnJlcSkgPCBycHMtPmJvb3N0X2ZyZXEp Ci0JCXNjaGVkdWxlX3dvcmsoJnJwcy0+d29yayk7Ci0KLQlhdG9taWNfaW5jKCZycHMtPmJvb3N0 cyk7Ci19Ci0KLWludCBpbnRlbF9zZXRfcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwgdTggdmFsKQotewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3Rf cG0ucnBzOwotCWludCBlcnI7Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZycHMtPmxvY2spOwot CUdFTV9CVUdfT04odmFsID4gcnBzLT5tYXhfZnJlcSk7Ci0JR0VNX0JVR19PTih2YWwgPCBycHMt Pm1pbl9mcmVxKTsKLQotCWlmICghcnBzLT5lbmFibGVkKSB7Ci0JCXJwcy0+Y3VyX2ZyZXEgPSB2 YWw7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJ U19DSEVSUllWSUVXKGRldl9wcml2KSkKLQkJZXJyID0gdmFsbGV5dmlld19zZXRfcnBzKGRldl9w cml2LCB2YWwpOwotCWVsc2UKLQkJZXJyID0gZ2VuNl9zZXRfcnBzKGRldl9wcml2LCB2YWwpOwot Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgZ2VuOV9kaXNhYmxlX3JwcyhzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JSTkxNV9XUklURShHRU42X1JQX0NPTlRS T0wsIDApOwotfQotCi1zdGF0aWMgdm9pZCBnZW42X2Rpc2FibGVfcnBzKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlJOTE1X1dSSVRFKEdFTjZfUlBOU1dSRVEsIDEgPDwg MzEpOwotCUk5MTVfV1JJVEUoR0VONl9SUF9DT05UUk9MLCAwKTsKLX0KLQotc3RhdGljIHZvaWQg Y2hlcnJ5dmlld19kaXNhYmxlX3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Ci17Ci0JSTkxNV9XUklURShHRU42X1JQX0NPTlRST0wsIDApOwotfQotCi1zdGF0aWMgdm9pZCB2 YWxsZXl2aWV3X2Rpc2FibGVfcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK LXsKLQlJOTE1X1dSSVRFKEdFTjZfUlBfQ09OVFJPTCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdl bjZfaW5pdF9ycHNfZnJlcXVlbmNpZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQotewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwotCi0J LyogQWxsIG9mIHRoZXNlIHZhbHVlcyBhcmUgaW4gdW5pdHMgb2YgNTBNSHogKi8KLQotCS8qIHN0 YXRpYyB2YWx1ZXMgZnJvbSBIVzogUlAwID4gUlAxID4gUlBuIChtaW5fZnJlcSkgKi8KLQlpZiAo SVNfR0VOOV9MUChkZXZfcHJpdikpIHsKLQkJdTMyIHJwX3N0YXRlX2NhcCA9IEk5MTVfUkVBRChC WFRfUlBfU1RBVEVfQ0FQKTsKLQkJcnBzLT5ycDBfZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4gMTYp ICYgMHhmZjsKLQkJcnBzLT5ycDFfZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4gIDgpICYgMHhmZjsK LQkJcnBzLT5taW5fZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4gIDApICYgMHhmZjsKLQl9IGVsc2Ug ewotCQl1MzIgcnBfc3RhdGVfY2FwID0gSTkxNV9SRUFEKEdFTjZfUlBfU1RBVEVfQ0FQKTsKLQkJ cnBzLT5ycDBfZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4gIDApICYgMHhmZjsKLQkJcnBzLT5ycDFf ZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4gIDgpICYgMHhmZjsKLQkJcnBzLT5taW5fZnJlcSA9IChy cF9zdGF0ZV9jYXAgPj4gMTYpICYgMHhmZjsKLQl9Ci0JLyogaHdfbWF4ID0gUlAwIHVudGlsIHdl IGNoZWNrIGZvciBvdmVyY2xvY2tpbmcgKi8KLQlycHMtPm1heF9mcmVxID0gcnBzLT5ycDBfZnJl cTsKLQotCXJwcy0+ZWZmaWNpZW50X2ZyZXEgPSBycHMtPnJwMV9mcmVxOwotCWlmIChJU19IQVNX RUxMKGRldl9wcml2KSB8fCBJU19CUk9BRFdFTEwoZGV2X3ByaXYpIHx8Ci0JICAgIElTX0dFTjlf QkMoZGV2X3ByaXYpIHx8IElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTApIHsKLQkJdTMyIGRkY2Nf c3RhdHVzID0gMDsKLQotCQlpZiAoc2FuZHlicmlkZ2VfcGNvZGVfcmVhZChkZXZfcHJpdiwKLQkJ CQkJICAgSFNXX1BDT0RFX0RZTkFNSUNfRFVUWV9DWUNMRV9DT05UUk9MLAotCQkJCQkgICAmZGRj Y19zdGF0dXMsIE5VTEwpID09IDApCi0JCQlycHMtPmVmZmljaWVudF9mcmVxID0KLQkJCQljbGFt cF90KHU4LAotCQkJCQkoKGRkY2Nfc3RhdHVzID4+IDgpICYgMHhmZiksCi0JCQkJCXJwcy0+bWlu X2ZyZXEsCi0JCQkJCXJwcy0+bWF4X2ZyZXEpOwotCX0KLQotCWlmIChJU19HRU45X0JDKGRldl9w cml2KSB8fCBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwKSB7Ci0JCS8qIFN0b3JlIHRoZSBmcmVx dWVuY3kgdmFsdWVzIGluIDE2LjY2IE1IWiB1bml0cywgd2hpY2ggaXMKLQkJICogdGhlIG5hdHVy YWwgaGFyZHdhcmUgdW5pdCBmb3IgU0tMCi0JCSAqLwotCQlycHMtPnJwMF9mcmVxICo9IEdFTjlf RlJFUV9TQ0FMRVI7Ci0JCXJwcy0+cnAxX2ZyZXEgKj0gR0VOOV9GUkVRX1NDQUxFUjsKLQkJcnBz LT5taW5fZnJlcSAqPSBHRU45X0ZSRVFfU0NBTEVSOwotCQlycHMtPm1heF9mcmVxICo9IEdFTjlf RlJFUV9TQ0FMRVI7Ci0JCXJwcy0+ZWZmaWNpZW50X2ZyZXEgKj0gR0VOOV9GUkVRX1NDQUxFUjsK LQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHJlc2V0X3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCi0JCSAgICAgIGludCAoKnNldCkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKiwg dTgpKQotewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwot CXU4IGZyZXEgPSBycHMtPmN1cl9mcmVxOwotCi0JLyogZm9yY2UgYSByZXNldCAqLwotCXJwcy0+ cG93ZXIubW9kZSA9IC0xOwotCXJwcy0+Y3VyX2ZyZXEgPSAtMTsKLQotCWlmIChzZXQoZGV2X3By aXYsIGZyZXEpKQotCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZXNldCBSUFMgdG8gaW5pdGlhbCB2 YWx1ZXNcbiIpOwotfQotCi0vKiBTZWUgdGhlIEdlbjlfR1RfUE1fUHJvZ3JhbW1pbmdfR3VpZGUg ZG9jIGZvciB0aGUgYmVsb3cgKi8KLXN0YXRpYyB2b2lkIGdlbjlfZW5hYmxlX3JwcyhzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9n ZXQoJmRldl9wcml2LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwotCi0JLyogUHJvZ3JhbSBkZWZh dWx0cyBhbmQgdGhyZXNob2xkcyBmb3IgUlBTICovCi0JaWYgKElTX0dFTihkZXZfcHJpdiwgOSkp Ci0JCUk5MTVfV1JJVEUoR0VONl9SQ19WSURFT19GUkVRLAotCQkJR0VOOV9GUkVRVUVOQ1koZGV2 X3ByaXYtPmd0X3BtLnJwcy5ycDFfZnJlcSkpOwotCi0JLyogMSBzZWNvbmQgdGltZW91dCovCi0J STkxNV9XUklURShHRU42X1JQX0RPV05fVElNRU9VVCwKLQkJR1RfSU5URVJWQUxfRlJPTV9VUyhk ZXZfcHJpdiwgMTAwMDAwMCkpOwotCi0JSTkxNV9XUklURShHRU42X1JQX0lETEVfSFlTVEVSU0lT LCAweGEpOwotCi0JLyogTGVhbmluZyBvbiB0aGUgYmVsb3cgY2FsbCB0byBnZW42X3NldF9ycHMg dG8gcHJvZ3JhbS9zZXR1cCB0aGUKLQkgKiBVcC9Eb3duIEVJICYgdGhyZXNob2xkIHJlZ2lzdGVy cywgYXMgd2VsbCBhcyB0aGUgUlBfQ09OVFJPTCwKLQkgKiBSUF9JTlRFUlJVUFRfTElNSVRTICYg UlBOU1dSRVEgcmVnaXN0ZXJzICovCi0JcmVzZXRfcnBzKGRldl9wcml2LCBnZW42X3NldF9ycHMp OwotCi0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoJmRldl9wcml2LT51bmNvcmUsIEZPUkNF V0FLRV9BTEwpOwotfQotCi1zdGF0aWMgdm9pZCBnZW44X2VuYWJsZV9ycHMoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZf cHJpdi0+Z3RfcG0ucnBzOwotCi0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoJmRldl9wcml2 LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwotCi0JLyogMSBQcm9ncmFtIGRlZmF1bHRzIGFuZCB0 aHJlc2hvbGRzIGZvciBSUFMqLwotCUk5MTVfV1JJVEUoR0VONl9SUE5TV1JFUSwKLQkJICAgSFNX X0ZSRVFVRU5DWShycHMtPnJwMV9mcmVxKSk7Ci0JSTkxNV9XUklURShHRU42X1JDX1ZJREVPX0ZS RVEsCi0JCSAgIEhTV19GUkVRVUVOQ1kocnBzLT5ycDFfZnJlcSkpOwotCS8qIE5COiBEb2NzIHNh eSAxcywgYW5kIDEwMDAwMDAgLSB3aGljaCBhcmVuJ3QgZXF1aXZhbGVudCAqLwotCUk5MTVfV1JJ VEUoR0VONl9SUF9ET1dOX1RJTUVPVVQsIDEwMDAwMDAwMCAvIDEyOCk7IC8qIDEgc2Vjb25kIHRp bWVvdXQgKi8KLQotCS8qIERvY3MgcmVjb21tZW5kIDkwME1IeiwgYW5kIDMwMCBNSHogcmVzcGVj dGl2ZWx5ICovCi0JSTkxNV9XUklURShHRU42X1JQX0lOVEVSUlVQVF9MSU1JVFMsCi0JCSAgIHJw cy0+bWF4X2ZyZXFfc29mdGxpbWl0IDw8IDI0IHwKLQkJICAgcnBzLT5taW5fZnJlcV9zb2Z0bGlt aXQgPDwgMTYpOwotCi0JSTkxNV9XUklURShHRU42X1JQX1VQX1RIUkVTSE9MRCwgNzYwMDAwMCAv IDEyOCk7IC8qIDc2bXMgYnVzeW5lc3MgcGVyIEVJLCA5MCUgKi8KLQlJOTE1X1dSSVRFKEdFTjZf UlBfRE9XTl9USFJFU0hPTEQsIDMxMzAwMDAwIC8gMTI4KTsgLyogMzEzbXMgYnVzeW5lc3MgcGVy IEVJLCA3MCUqLwotCUk5MTVfV1JJVEUoR0VONl9SUF9VUF9FSSwgNjYwMDApOyAvKiA4NC40OG1z LCBYWFg6IHJhbmRvbT8gKi8KLQlJOTE1X1dSSVRFKEdFTjZfUlBfRE9XTl9FSSwgMzUwMDAwKTsg LyogNDQ4bXMsIFhYWDogcmFuZG9tPyAqLwotCi0JSTkxNV9XUklURShHRU42X1JQX0lETEVfSFlT VEVSU0lTLCAxMCk7Ci0KLQkvKiAyOiBFbmFibGUgUlBTICovCi0JSTkxNV9XUklURShHRU42X1JQ X0NPTlRST0wsCi0JCSAgIEdFTjZfUlBfTUVESUFfVFVSQk8gfAotCQkgICBHRU42X1JQX01FRElB X0hXX05PUk1BTF9NT0RFIHwKLQkJICAgR0VONl9SUF9NRURJQV9JU19HRlggfAotCQkgICBHRU42 X1JQX0VOQUJMRSB8Ci0JCSAgIEdFTjZfUlBfVVBfQlVTWV9BVkcgfAotCQkgICBHRU42X1JQX0RP V05fSURMRV9BVkcpOwotCi0JcmVzZXRfcnBzKGRldl9wcml2LCBnZW42X3NldF9ycHMpOwotCi0J aW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoJmRldl9wcml2LT51bmNvcmUsIEZPUkNFV0FLRV9B TEwpOwotfQotCi1zdGF0aWMgdm9pZCBnZW42X2VuYWJsZV9ycHMoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQotewotCS8qIEhlcmUgYmVnaW5zIGEgbWFnaWMgc2VxdWVuY2Ugb2Yg cmVnaXN0ZXIgd3JpdGVzIHRvIGVuYWJsZQotCSAqIGF1dG8tZG93bmNsb2NraW5nLgotCSAqCi0J ICogUGVyaGFwcyB0aGVyZSBtaWdodCBiZSBzb21lIHZhbHVlIGluIGV4cG9zaW5nIHRoZXNlIHRv Ci0JICogdXNlcnNwYWNlLi4uCi0JICovCi0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoJmRl dl9wcml2LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwotCi0JLyogUG93ZXIgZG93biBpZiBjb21w bGV0ZWx5IGlkbGUgZm9yIG92ZXIgNTBtcyAqLwotCUk5MTVfV1JJVEUoR0VONl9SUF9ET1dOX1RJ TUVPVVQsIDUwMDAwKTsKLQlJOTE1X1dSSVRFKEdFTjZfUlBfSURMRV9IWVNURVJTSVMsIDEwKTsK LQotCXJlc2V0X3JwcyhkZXZfcHJpdiwgZ2VuNl9zZXRfcnBzKTsKLQotCWludGVsX3VuY29yZV9m b3JjZXdha2VfcHV0KCZkZXZfcHJpdi0+dW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKLX0KLQotc3Rh dGljIGludCBjaGVycnl2aWV3X3Jwc19tYXhfZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCi17Ci0JdTMyIHZhbCwgcnAwOwotCi0JdmFsID0gdmx2X3B1bml0X3JlYWQoZGV2 X3ByaXYsIEZCX0dGWF9GTUFYX0FUX1ZNQVhfRlVTRSk7Ci0KLQlzd2l0Y2ggKFJVTlRJTUVfSU5G TyhkZXZfcHJpdiktPnNzZXUuZXVfdG90YWwpIHsKLQljYXNlIDg6Ci0JCS8qICgyICogNCkgY29u ZmlnICovCi0JCXJwMCA9ICh2YWwgPj4gRkJfR0ZYX0ZNQVhfQVRfVk1BWF8yU1M0RVVfRlVTRV9T SElGVCk7Ci0JCWJyZWFrOwotCWNhc2UgMTI6Ci0JCS8qICgyICogNikgY29uZmlnICovCi0JCXJw MCA9ICh2YWwgPj4gRkJfR0ZYX0ZNQVhfQVRfVk1BWF8yU1M2RVVfRlVTRV9TSElGVCk7Ci0JCWJy ZWFrOwotCWNhc2UgMTY6Ci0JCS8qICgyICogOCkgY29uZmlnICovCi0JZGVmYXVsdDoKLQkJLyog U2V0dGluZyAoMiAqIDgpIE1pbiBSUDAgZm9yIGFueSBvdGhlciBjb21iaW5hdGlvbiAqLwotCQly cDAgPSAodmFsID4+IEZCX0dGWF9GTUFYX0FUX1ZNQVhfMlNTOEVVX0ZVU0VfU0hJRlQpOwotCQli cmVhazsKLQl9Ci0KLQlycDAgPSAocnAwICYgRkJfR0ZYX0ZSRVFfRlVTRV9NQVNLKTsKLQotCXJl dHVybiBycDA7Ci19Ci0KLXN0YXRpYyBpbnQgY2hlcnJ5dmlld19ycHNfcnBlX2ZyZXEoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXUzMiB2YWwsIHJwZTsKLQotCXZhbCA9 IHZsdl9wdW5pdF9yZWFkKGRldl9wcml2LCBQVU5JVF9HUFVfRFVUWUNZQ0xFX1JFRyk7Ci0JcnBl ID0gKHZhbCA+PiBQVU5JVF9HUFVfRFVUWUNZQ0xFX1JQRV9GUkVRX1NISUZUKSAmIFBVTklUX0dQ VV9EVVRZQ1lDTEVfUlBFX0ZSRVFfTUFTSzsKLQotCXJldHVybiBycGU7Ci19Ci0KLXN0YXRpYyBp bnQgY2hlcnJ5dmlld19ycHNfZ3Vhcl9mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKLXsKLQl1MzIgdmFsLCBycDE7Ci0KLQl2YWwgPSB2bHZfcHVuaXRfcmVhZChkZXZfcHJp diwgRkJfR0ZYX0ZNQVhfQVRfVk1BWF9GVVNFKTsKLQlycDEgPSAodmFsICYgRkJfR0ZYX0ZSRVFf RlVTRV9NQVNLKTsKLQotCXJldHVybiBycDE7Ci19Ci0KLXN0YXRpYyB1MzIgY2hlcnJ5dmlld19y cHNfbWluX2ZyZXEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXUzMiB2 YWwsIHJwbjsKLQotCXZhbCA9IHZsdl9wdW5pdF9yZWFkKGRldl9wcml2LCBGQl9HRlhfRk1JTl9B VF9WTUlOX0ZVU0UpOwotCXJwbiA9ICgodmFsID4+IEZCX0dGWF9GTUlOX0FUX1ZNSU5fRlVTRV9T SElGVCkgJgotCQkgICAgICAgRkJfR0ZYX0ZSRVFfRlVTRV9NQVNLKTsKLQotCXJldHVybiBycG47 Ci19Ci0KLXN0YXRpYyBpbnQgdmFsbGV5dmlld19ycHNfZ3Vhcl9mcmVxKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQl1MzIgdmFsLCBycDE7Ci0KLQl2YWwgPSB2bHZfbmNf cmVhZChkZXZfcHJpdiwgSU9TRl9OQ19GQl9HRlhfRlJFUV9GVVNFKTsKLQotCXJwMSA9ICh2YWwg JiBGQl9HRlhfRkdVQVJBTlRFRURfRlJFUV9GVVNFX01BU0spID4+IEZCX0dGWF9GR1VBUkFOVEVF RF9GUkVRX0ZVU0VfU0hJRlQ7Ci0KLQlyZXR1cm4gcnAxOwotfQotCi1zdGF0aWMgaW50IHZhbGxl eXZpZXdfcnBzX21heF9mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsK LQl1MzIgdmFsLCBycDA7Ci0KLQl2YWwgPSB2bHZfbmNfcmVhZChkZXZfcHJpdiwgSU9TRl9OQ19G Ql9HRlhfRlJFUV9GVVNFKTsKLQotCXJwMCA9ICh2YWwgJiBGQl9HRlhfTUFYX0ZSRVFfRlVTRV9N QVNLKSA+PiBGQl9HRlhfTUFYX0ZSRVFfRlVTRV9TSElGVDsKLQkvKiBDbGFtcCB0byBtYXggKi8K LQlycDAgPSBtaW5fdCh1MzIsIHJwMCwgMHhlYSk7Ci0KLQlyZXR1cm4gcnAwOwotfQotCi1zdGF0 aWMgaW50IHZhbGxleXZpZXdfcnBzX3JwZV9mcmVxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKLXsKLQl1MzIgdmFsLCBycGU7Ci0KLQl2YWwgPSB2bHZfbmNfcmVhZChkZXZfcHJp diwgSU9TRl9OQ19GQl9HRlhfRk1BWF9GVVNFX0xPKTsKLQlycGUgPSAodmFsICYgRkJfRk1BWF9W TUlOX0ZSRVFfTE9fTUFTSykgPj4gRkJfRk1BWF9WTUlOX0ZSRVFfTE9fU0hJRlQ7Ci0JdmFsID0g dmx2X25jX3JlYWQoZGV2X3ByaXYsIElPU0ZfTkNfRkJfR0ZYX0ZNQVhfRlVTRV9ISSk7Ci0JcnBl IHw9ICh2YWwgJiBGQl9GTUFYX1ZNSU5fRlJFUV9ISV9NQVNLKSA8PCA1OwotCi0JcmV0dXJuIHJw ZTsKLX0KLQotc3RhdGljIGludCB2YWxsZXl2aWV3X3Jwc19taW5fZnJlcShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0JdTMyIHZhbDsKLQotCXZhbCA9IHZsdl9wdW5pdF9y ZWFkKGRldl9wcml2LCBQVU5JVF9SRUdfR1BVX0xGTSkgJiAweGZmOwotCS8qCi0JICogQWNjb3Jk aW5nIHRvIHRoZSBCWVQgUHVuaXQgR1BVIHR1cmJvIEhBUyAxLjEuNi4zIHRoZSBtaW5pbXVtIHZh bHVlCi0JICogZm9yIHRoZSBtaW5pbXVtIGZyZXF1ZW5jeSBpbiBHUExMIG1vZGUgaXMgMHhjMS4g Q29udHJhcnkgdG8gdGhpcyBvbgotCSAqIGEgQllULU0gQjAgdGhlIGFib3ZlIHJlZ2lzdGVyIGNv bnRhaW5zIDB4YmYuIE1vcmVvdmVyIHdoZW4gc2V0dGluZwotCSAqIGEgZnJlcXVlbmN5IFB1bml0 IHdpbGwgbm90IGFsbG93IHZhbHVlcyBiZWxvdyAweGMwLiBDbGFtcCBpdCAweGMwCi0JICogdG8g bWFrZSBzdXJlIGl0IG1hdGNoZXMgd2hhdCBQdW5pdCBhY2NlcHRzLgotCSAqLwotCXJldHVybiBt YXhfdCh1MzIsIHZhbCwgMHhjMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZsdl9pbml0X2dwbGxfcmVm X2ZyZXEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCWRldl9wcml2LT5n dF9wbS5ycHMuZ3BsbF9yZWZfZnJlcSA9Ci0JCXZsdl9nZXRfY2NrX2Nsb2NrKGRldl9wcml2LCAi R1BMTCByZWYiLAotCQkJCSAgQ0NLX0dQTExfQ0xPQ0tfQ09OVFJPTCwKLQkJCQkgIGRldl9wcml2 LT5jemNsa19mcmVxKTsKLQotCURSTV9ERUJVR19EUklWRVIoIkdQTEwgcmVmZXJlbmNlIGZyZXE6 ICVkIGtIelxuIiwKLQkJCSBkZXZfcHJpdi0+Z3RfcG0ucnBzLmdwbGxfcmVmX2ZyZXEpOwotfQot Ci1zdGF0aWMgdm9pZCB2YWxsZXl2aWV3X2luaXRfZ3RfcG93ZXJzYXZlKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3By aXYtPmd0X3BtLnJwczsKLQl1MzIgdmFsOwotCi0Jdmx2X2lvc2Zfc2JfZ2V0KGRldl9wcml2LAot CQkJQklUKFZMVl9JT1NGX1NCX1BVTklUKSB8Ci0JCQlCSVQoVkxWX0lPU0ZfU0JfTkMpIHwKLQkJ CUJJVChWTFZfSU9TRl9TQl9DQ0spKTsKLQotCXZsdl9pbml0X2dwbGxfcmVmX2ZyZXEoZGV2X3By aXYpOwotCi0JdmFsID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBVTklUX1JFR19HUFVfRlJF UV9TVFMpOwotCXN3aXRjaCAoKHZhbCA+PiA2KSAmIDMpIHsKLQljYXNlIDA6Ci0JY2FzZSAxOgot CQlkZXZfcHJpdi0+bWVtX2ZyZXEgPSA4MDA7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJZGV2X3By aXYtPm1lbV9mcmVxID0gMTA2NjsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQlkZXZfcHJpdi0+bWVt X2ZyZXEgPSAxMzMzOwotCQlicmVhazsKLQl9Ci0JRFJNX0RFQlVHX0RSSVZFUigiRERSIHNwZWVk OiAlZCBNSHpcbiIsIGRldl9wcml2LT5tZW1fZnJlcSk7Ci0KLQlycHMtPm1heF9mcmVxID0gdmFs bGV5dmlld19ycHNfbWF4X2ZyZXEoZGV2X3ByaXYpOwotCXJwcy0+cnAwX2ZyZXEgPSBycHMtPm1h eF9mcmVxOwotCURSTV9ERUJVR19EUklWRVIoIm1heCBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIs Ci0JCQkgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+bWF4X2ZyZXEpLAotCQkJIHJwcy0+ bWF4X2ZyZXEpOwotCi0JcnBzLT5lZmZpY2llbnRfZnJlcSA9IHZhbGxleXZpZXdfcnBzX3JwZV9m cmVxKGRldl9wcml2KTsKLQlEUk1fREVCVUdfRFJJVkVSKCJSUGUgR1BVIGZyZXE6ICVkIE1IeiAo JXUpXG4iLAotCQkJIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPmVmZmljaWVudF9mcmVx KSwKLQkJCSBycHMtPmVmZmljaWVudF9mcmVxKTsKLQotCXJwcy0+cnAxX2ZyZXEgPSB2YWxsZXl2 aWV3X3Jwc19ndWFyX2ZyZXEoZGV2X3ByaXYpOwotCURSTV9ERUJVR19EUklWRVIoIlJQMShHdWFy IEZyZXEpIEdQVSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKLQkJCSBpbnRlbF9ncHVfZnJlcShkZXZf cHJpdiwgcnBzLT5ycDFfZnJlcSksCi0JCQkgcnBzLT5ycDFfZnJlcSk7Ci0KLQlycHMtPm1pbl9m cmVxID0gdmFsbGV5dmlld19ycHNfbWluX2ZyZXEoZGV2X3ByaXYpOwotCURSTV9ERUJVR19EUklW RVIoIm1pbiBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIsCi0JCQkgaW50ZWxfZ3B1X2ZyZXEoZGV2 X3ByaXYsIHJwcy0+bWluX2ZyZXEpLAotCQkJIHJwcy0+bWluX2ZyZXEpOwotCi0Jdmx2X2lvc2Zf c2JfcHV0KGRldl9wcml2LAotCQkJQklUKFZMVl9JT1NGX1NCX1BVTklUKSB8Ci0JCQlCSVQoVkxW X0lPU0ZfU0JfTkMpIHwKLQkJCUJJVChWTFZfSU9TRl9TQl9DQ0spKTsKLX0KLQotc3RhdGljIHZv aWQgY2hlcnJ5dmlld19pbml0X2d0X3Bvd2Vyc2F2ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCi17Ci0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5y cHM7Ci0JdTMyIHZhbDsKLQotCXZsdl9pb3NmX3NiX2dldChkZXZfcHJpdiwKLQkJCUJJVChWTFZf SU9TRl9TQl9QVU5JVCkgfAotCQkJQklUKFZMVl9JT1NGX1NCX05DKSB8Ci0JCQlCSVQoVkxWX0lP U0ZfU0JfQ0NLKSk7Ci0KLQl2bHZfaW5pdF9ncGxsX3JlZl9mcmVxKGRldl9wcml2KTsKLQotCXZh bCA9IHZsdl9jY2tfcmVhZChkZXZfcHJpdiwgQ0NLX0ZVU0VfUkVHKTsKLQotCXN3aXRjaCAoKHZh bCA+PiAyKSAmIDB4NykgewotCWNhc2UgMzoKLQkJZGV2X3ByaXYtPm1lbV9mcmVxID0gMjAwMDsK LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGV2X3ByaXYtPm1lbV9mcmVxID0gMTYwMDsKLQkJYnJl YWs7Ci0JfQotCURSTV9ERUJVR19EUklWRVIoIkREUiBzcGVlZDogJWQgTUh6XG4iLCBkZXZfcHJp di0+bWVtX2ZyZXEpOwotCi0JcnBzLT5tYXhfZnJlcSA9IGNoZXJyeXZpZXdfcnBzX21heF9mcmVx KGRldl9wcml2KTsKLQlycHMtPnJwMF9mcmVxID0gcnBzLT5tYXhfZnJlcTsKLQlEUk1fREVCVUdf RFJJVkVSKCJtYXggR1BVIGZyZXE6ICVkIE1IeiAoJXUpXG4iLAotCQkJIGludGVsX2dwdV9mcmVx KGRldl9wcml2LCBycHMtPm1heF9mcmVxKSwKLQkJCSBycHMtPm1heF9mcmVxKTsKLQotCXJwcy0+ ZWZmaWNpZW50X2ZyZXEgPSBjaGVycnl2aWV3X3Jwc19ycGVfZnJlcShkZXZfcHJpdik7Ci0JRFJN X0RFQlVHX0RSSVZFUigiUlBlIEdQVSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKLQkJCSBpbnRlbF9n cHVfZnJlcShkZXZfcHJpdiwgcnBzLT5lZmZpY2llbnRfZnJlcSksCi0JCQkgcnBzLT5lZmZpY2ll bnRfZnJlcSk7Ci0KLQlycHMtPnJwMV9mcmVxID0gY2hlcnJ5dmlld19ycHNfZ3Vhcl9mcmVxKGRl dl9wcml2KTsKLQlEUk1fREVCVUdfRFJJVkVSKCJSUDEoR3VhcikgR1BVIGZyZXE6ICVkIE1IeiAo JXUpXG4iLAotCQkJIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPnJwMV9mcmVxKSwKLQkJ CSBycHMtPnJwMV9mcmVxKTsKLQotCXJwcy0+bWluX2ZyZXEgPSBjaGVycnl2aWV3X3Jwc19taW5f ZnJlcShkZXZfcHJpdik7Ci0JRFJNX0RFQlVHX0RSSVZFUigibWluIEdQVSBmcmVxOiAlZCBNSHog KCV1KVxuIiwKLQkJCSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5taW5fZnJlcSksCi0J CQkgcnBzLT5taW5fZnJlcSk7Ci0KLQl2bHZfaW9zZl9zYl9wdXQoZGV2X3ByaXYsCi0JCQlCSVQo VkxWX0lPU0ZfU0JfUFVOSVQpIHwKLQkJCUJJVChWTFZfSU9TRl9TQl9OQykgfAotCQkJQklUKFZM Vl9JT1NGX1NCX0NDSykpOwotCi0JV0FSTl9PTkNFKChycHMtPm1heF9mcmVxIHwgcnBzLT5lZmZp Y2llbnRfZnJlcSB8IHJwcy0+cnAxX2ZyZXEgfAotCQkgICBycHMtPm1pbl9mcmVxKSAmIDEsCi0J CSAgIk9kZCBHUFUgZnJlcSB2YWx1ZXNcbiIpOwotfQotCi1zdGF0aWMgdm9pZCBjaGVycnl2aWV3 X2VuYWJsZV9ycHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXUzMiB2 YWw7Ci0KLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldCgmZGV2X3ByaXYtPnVuY29yZSwgRk9S Q0VXQUtFX0FMTCk7Ci0KLQkvKiAxOiBQcm9ncmFtIGRlZmF1bHRzIGFuZCB0aHJlc2hvbGRzIGZv ciBSUFMqLwotCUk5MTVfV1JJVEUoR0VONl9SUF9ET1dOX1RJTUVPVVQsIDEwMDAwMDApOwotCUk5 MTVfV1JJVEUoR0VONl9SUF9VUF9USFJFU0hPTEQsIDU5NDAwKTsKLQlJOTE1X1dSSVRFKEdFTjZf UlBfRE9XTl9USFJFU0hPTEQsIDI0NTAwMCk7Ci0JSTkxNV9XUklURShHRU42X1JQX1VQX0VJLCA2 NjAwMCk7Ci0JSTkxNV9XUklURShHRU42X1JQX0RPV05fRUksIDM1MDAwMCk7Ci0KLQlJOTE1X1dS SVRFKEdFTjZfUlBfSURMRV9IWVNURVJTSVMsIDEwKTsKLQotCS8qIDI6IEVuYWJsZSBSUFMgKi8K LQlJOTE1X1dSSVRFKEdFTjZfUlBfQ09OVFJPTCwKLQkJICAgR0VONl9SUF9NRURJQV9IV19OT1JN QUxfTU9ERSB8Ci0JCSAgIEdFTjZfUlBfTUVESUFfSVNfR0ZYIHwKLQkJICAgR0VONl9SUF9FTkFC TEUgfAotCQkgICBHRU42X1JQX1VQX0JVU1lfQVZHIHwKLQkJICAgR0VONl9SUF9ET1dOX0lETEVf QVZHKTsKLQotCS8qIFNldHRpbmcgRml4ZWQgQmlhcyAqLwotCXZsdl9wdW5pdF9nZXQoZGV2X3By aXYpOwotCi0JdmFsID0gVkxWX09WRVJSSURFX0VOIHwgVkxWX1NPQ19URFBfRU4gfCBDSFZfQklB U19DUFVfNTBfU09DXzUwOwotCXZsdl9wdW5pdF93cml0ZShkZXZfcHJpdiwgVkxWX1RVUkJPX1NP Q19PVkVSUklERSwgdmFsKTsKLQotCXZhbCA9IHZsdl9wdW5pdF9yZWFkKGRldl9wcml2LCBQVU5J VF9SRUdfR1BVX0ZSRVFfU1RTKTsKLQotCXZsdl9wdW5pdF9wdXQoZGV2X3ByaXYpOwotCi0JLyog UlBTIGNvZGUgYXNzdW1lcyBHUExMIGlzIHVzZWQgKi8KLQlXQVJOX09OQ0UoKHZhbCAmIEdQTExF TkFCTEUpID09IDAsICJHUExMIG5vdCBlbmFibGVkXG4iKTsKLQotCURSTV9ERUJVR19EUklWRVIo IkdQTEwgZW5hYmxlZD8gJXNcbiIsIHllc25vKHZhbCAmIEdQTExFTkFCTEUpKTsKLQlEUk1fREVC VUdfRFJJVkVSKCJHUFUgc3RhdHVzOiAweCUwOHhcbiIsIHZhbCk7Ci0KLQlyZXNldF9ycHMoZGV2 X3ByaXYsIHZhbGxleXZpZXdfc2V0X3Jwcyk7Ci0KLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1 dCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZh bGxleXZpZXdfZW5hYmxlX3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCi17 Ci0JdTMyIHZhbDsKLQotCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KCZkZXZfcHJpdi0+dW5j b3JlLCBGT1JDRVdBS0VfQUxMKTsKLQotCUk5MTVfV1JJVEUoR0VONl9SUF9ET1dOX1RJTUVPVVQs IDEwMDAwMDApOwotCUk5MTVfV1JJVEUoR0VONl9SUF9VUF9USFJFU0hPTEQsIDU5NDAwKTsKLQlJ OTE1X1dSSVRFKEdFTjZfUlBfRE9XTl9USFJFU0hPTEQsIDI0NTAwMCk7Ci0JSTkxNV9XUklURShH RU42X1JQX1VQX0VJLCA2NjAwMCk7Ci0JSTkxNV9XUklURShHRU42X1JQX0RPV05fRUksIDM1MDAw MCk7Ci0KLQlJOTE1X1dSSVRFKEdFTjZfUlBfSURMRV9IWVNURVJTSVMsIDEwKTsKLQotCUk5MTVf V1JJVEUoR0VONl9SUF9DT05UUk9MLAotCQkgICBHRU42X1JQX01FRElBX1RVUkJPIHwKLQkJICAg R0VONl9SUF9NRURJQV9IV19OT1JNQUxfTU9ERSB8Ci0JCSAgIEdFTjZfUlBfTUVESUFfSVNfR0ZY IHwKLQkJICAgR0VONl9SUF9FTkFCTEUgfAotCQkgICBHRU42X1JQX1VQX0JVU1lfQVZHIHwKLQkJ ICAgR0VONl9SUF9ET1dOX0lETEVfQ09OVCk7Ci0KLQl2bHZfcHVuaXRfZ2V0KGRldl9wcml2KTsK LQotCS8qIFNldHRpbmcgRml4ZWQgQmlhcyAqLwotCXZhbCA9IFZMVl9PVkVSUklERV9FTiB8IFZM Vl9TT0NfVERQX0VOIHwgVkxWX0JJQVNfQ1BVXzEyNV9TT0NfODc1OwotCXZsdl9wdW5pdF93cml0 ZShkZXZfcHJpdiwgVkxWX1RVUkJPX1NPQ19PVkVSUklERSwgdmFsKTsKLQotCXZhbCA9IHZsdl9w dW5pdF9yZWFkKGRldl9wcml2LCBQVU5JVF9SRUdfR1BVX0ZSRVFfU1RTKTsKLQotCXZsdl9wdW5p dF9wdXQoZGV2X3ByaXYpOwotCi0JLyogUlBTIGNvZGUgYXNzdW1lcyBHUExMIGlzIHVzZWQgKi8K LQlXQVJOX09OQ0UoKHZhbCAmIEdQTExFTkFCTEUpID09IDAsICJHUExMIG5vdCBlbmFibGVkXG4i KTsKLQotCURSTV9ERUJVR19EUklWRVIoIkdQTEwgZW5hYmxlZD8gJXNcbiIsIHllc25vKHZhbCAm IEdQTExFTkFCTEUpKTsKLQlEUk1fREVCVUdfRFJJVkVSKCJHUFUgc3RhdHVzOiAweCUwOHhcbiIs IHZhbCk7Ci0KLQlyZXNldF9ycHMoZGV2X3ByaXYsIHZhbGxleXZpZXdfc2V0X3Jwcyk7Ci0KLQlp bnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX0FM TCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGludGVsX3B4ZnJlcSh1MzIgdmlkZnJlcSkK LXsKLQl1bnNpZ25lZCBsb25nIGZyZXE7Ci0JaW50IGRpdiA9ICh2aWRmcmVxICYgMHgzZjAwMDAp ID4+IDE2OwotCWludCBwb3N0ID0gKHZpZGZyZXEgJiAweDMwMDApID4+IDEyOwotCWludCBwcmUg PSAodmlkZnJlcSAmIDB4Nyk7Ci0KLQlpZiAoIXByZSkKLQkJcmV0dXJuIDA7Ci0KLQlmcmVxID0g KChkaXYgKiAxMzMzMzMpIC8gKCgxPDxwb3N0KSAqIHByZSkpOwotCi0JcmV0dXJuIGZyZXE7Ci19 Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3BhcmFtcyB7Ci0JdTE2IGk7Ci0JdTE2IHQ7Ci0JdTE2 IG07Ci0JdTE2IGM7Ci19IGNwYXJhbXNbXSA9IHsKLQl7IDEsIDEzMzMsIDMwMSwgMjg2NjQgfSwK LQl7IDEsIDEwNjYsIDI5NCwgMjQ0NjAgfSwKLQl7IDEsIDgwMCwgMjk0LCAyNTE5MiB9LAotCXsg MCwgMTMzMywgMjc2LCAyNzYwNSB9LAotCXsgMCwgMTA2NiwgMjc2LCAyNzYwNSB9LAotCXsgMCwg ODAwLCAyMzEsIDIzNzg0IH0sCi19OwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2k5MTVfY2hp cHNldF92YWwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXU2NCB0b3Rh bF9jb3VudCwgZGlmZiwgcmV0OwotCXUzMiBjb3VudDEsIGNvdW50MiwgY291bnQzLCBtID0gMCwg YyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMpLCBk aWZmMTsKLQlpbnQgaTsKLQotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm1jaGRldl9sb2NrKTsKLQot CWRpZmYxID0gbm93IC0gZGV2X3ByaXYtPmlwcy5sYXN0X3RpbWUxOwotCi0JLyogUHJldmVudCBk aXZpc2lvbi1ieS16ZXJvIGlmIHdlIGFyZSBhc2tpbmcgdG9vIGZhc3QuCi0JICogQWxzbywgd2Ug ZG9uJ3QgZ2V0IGludGVyZXN0aW5nIHJlc3VsdHMgaWYgd2UgYXJlIHBvbGxpbmcKLQkgKiBmYXN0 ZXIgdGhhbiBvbmNlIGluIDEwbXMsIHNvIGp1c3QgcmV0dXJuIHRoZSBzYXZlZCB2YWx1ZQotCSAq IGluIHN1Y2ggY2FzZXMuCi0JICovCi0JaWYgKGRpZmYxIDw9IDEwKQotCQlyZXR1cm4gZGV2X3By aXYtPmlwcy5jaGlwc2V0X3Bvd2VyOwotCi0JY291bnQxID0gSTkxNV9SRUFEKERNSUVDKTsKLQlj b3VudDIgPSBJOTE1X1JFQUQoRERSRUMpOwotCWNvdW50MyA9IEk5MTVfUkVBRChDU0lFQyk7Ci0K LQl0b3RhbF9jb3VudCA9IGNvdW50MSArIGNvdW50MiArIGNvdW50MzsKLQotCS8qIEZJWE1FOiBo YW5kbGUgcGVyLWNvdW50ZXIgb3ZlcmZsb3cgKi8KLQlpZiAodG90YWxfY291bnQgPCBkZXZfcHJp di0+aXBzLmxhc3RfY291bnQxKSB7Ci0JCWRpZmYgPSB+MFVMIC0gZGV2X3ByaXYtPmlwcy5sYXN0 X2NvdW50MTsKLQkJZGlmZiArPSB0b3RhbF9jb3VudDsKLQl9IGVsc2UgewotCQlkaWZmID0gdG90 YWxfY291bnQgLSBkZXZfcHJpdi0+aXBzLmxhc3RfY291bnQxOwotCX0KLQotCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKGNwYXJhbXMpOyBpKyspIHsKLQkJaWYgKGNwYXJhbXNbaV0uaSA9PSBk ZXZfcHJpdi0+aXBzLmNfbSAmJgotCQkgICAgY3BhcmFtc1tpXS50ID09IGRldl9wcml2LT5pcHMu cl90KSB7Ci0JCQltID0gY3BhcmFtc1tpXS5tOwotCQkJYyA9IGNwYXJhbXNbaV0uYzsKLQkJCWJy ZWFrOwotCQl9Ci0JfQotCi0JZGlmZiA9IGRpdl91NjQoZGlmZiwgZGlmZjEpOwotCXJldCA9ICgo bSAqIGRpZmYpICsgYyk7Ci0JcmV0ID0gZGl2X3U2NChyZXQsIDEwKTsKLQotCWRldl9wcml2LT5p cHMubGFzdF9jb3VudDEgPSB0b3RhbF9jb3VudDsKLQlkZXZfcHJpdi0+aXBzLmxhc3RfdGltZTEg PSBub3c7Ci0KLQlkZXZfcHJpdi0+aXBzLmNoaXBzZXRfcG93ZXIgPSByZXQ7Ci0KLQlyZXR1cm4g cmV0OwotfQotCi11bnNpZ25lZCBsb25nIGk5MTVfY2hpcHNldF92YWwoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQotewotCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwotCXVuc2ln bmVkIGxvbmcgdmFsID0gMDsKLQotCWlmICghSVNfR0VOKGRldl9wcml2LCA1KSkKLQkJcmV0dXJu IDA7Ci0KLQl3aXRoX2ludGVsX3J1bnRpbWVfcG0oJmRldl9wcml2LT5ydW50aW1lX3BtLCB3YWtl cmVmKSB7Ci0JCXNwaW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKLQkJdmFsID0gX19pOTE1X2No aXBzZXRfdmFsKGRldl9wcml2KTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZtY2hkZXZfbG9jayk7Ci0J fQotCi0JcmV0dXJuIHZhbDsKLX0KLQotdW5zaWduZWQgbG9uZyBpOTE1X21jaF92YWwoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCi17Ci0JdW5zaWduZWQgbG9uZyBtLCB4LCBiOwotCXUz MiB0c2ZzOwotCi0JdHNmcyA9IGludGVsX3VuY29yZV9yZWFkKCZpOTE1LT51bmNvcmUsIFRTRlMp OwotCi0JbSA9ICgodHNmcyAmIFRTRlNfU0xPUEVfTUFTSykgPj4gVFNGU19TTE9QRV9TSElGVCk7 Ci0JeCA9IGludGVsX3VuY29yZV9yZWFkOCgmaTkxNS0+dW5jb3JlLCBUUjEpOwotCi0JYiA9IHRz ZnMgJiBUU0ZTX0lOVFJfTUFTSzsKLQotCXJldHVybiAoKG0gKiB4KSAvIDEyNykgLSBiOwotfQot Ci1zdGF0aWMgaW50IF9weHZpZF90b192ZCh1OCBweHZpZCkKLXsKLQlpZiAocHh2aWQgPT0gMCkK LQkJcmV0dXJuIDA7Ci0KLQlpZiAocHh2aWQgPj0gOCAmJiBweHZpZCA8IDMxKQotCQlweHZpZCA9 IDMxOwotCi0JcmV0dXJuIChweHZpZCArIDIpICogMTI1OwotfQotCi1zdGF0aWMgdTMyIHB2aWRf dG9fZXh0dmlkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTggcHh2aWQpCi17 Ci0JY29uc3QgaW50IHZkID0gX3B4dmlkX3RvX3ZkKHB4dmlkKTsKLQljb25zdCBpbnQgdm0gPSB2 ZCAtIDExMjU7Ci0KLQlpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmlzX21vYmlsZSkKLQkJcmV0 dXJuIHZtID4gMCA/IHZtIDogMDsKLQotCXJldHVybiB2ZDsKLX0KLQotc3RhdGljIHZvaWQgX19p OTE1X3VwZGF0ZV9nZnhfdmFsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsK LQl1NjQgbm93LCBkaWZmLCBkaWZmbXM7Ci0JdTMyIGNvdW50OwotCi0JbG9ja2RlcF9hc3NlcnRf aGVsZCgmbWNoZGV2X2xvY2spOwotCi0Jbm93ID0ga3RpbWVfZ2V0X3Jhd19ucygpOwotCWRpZmZt cyA9IG5vdyAtIGRldl9wcml2LT5pcHMubGFzdF90aW1lMjsKLQlkb19kaXYoZGlmZm1zLCBOU0VD X1BFUl9NU0VDKTsKLQotCS8qIERvbid0IGRpdmlkZSBieSAwICovCi0JaWYgKCFkaWZmbXMpCi0J CXJldHVybjsKLQotCWNvdW50ID0gSTkxNV9SRUFEKEdGWEVDKTsKLQotCWlmIChjb3VudCA8IGRl dl9wcml2LT5pcHMubGFzdF9jb3VudDIpIHsKLQkJZGlmZiA9IH4wVUwgLSBkZXZfcHJpdi0+aXBz Lmxhc3RfY291bnQyOwotCQlkaWZmICs9IGNvdW50OwotCX0gZWxzZSB7Ci0JCWRpZmYgPSBjb3Vu dCAtIGRldl9wcml2LT5pcHMubGFzdF9jb3VudDI7Ci0JfQotCi0JZGV2X3ByaXYtPmlwcy5sYXN0 X2NvdW50MiA9IGNvdW50OwotCWRldl9wcml2LT5pcHMubGFzdF90aW1lMiA9IG5vdzsKLQotCS8q IE1vcmUgbWFnaWMgY29uc3RhbnRzLi4uICovCi0JZGlmZiA9IGRpZmYgKiAxMTgxOwotCWRpZmYg PSBkaXZfdTY0KGRpZmYsIGRpZmZtcyAqIDEwKTsKLQlkZXZfcHJpdi0+aXBzLmdmeF9wb3dlciA9 IGRpZmY7Ci19Ci0KLXZvaWQgaTkxNV91cGRhdGVfZ2Z4X3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCi17Ci0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Ci0KLQlpZiAoIUlT X0dFTihkZXZfcHJpdiwgNSkpCi0JCXJldHVybjsKLQotCXdpdGhfaW50ZWxfcnVudGltZV9wbSgm ZGV2X3ByaXYtPnJ1bnRpbWVfcG0sIHdha2VyZWYpIHsKLQkJc3Bpbl9sb2NrX2lycSgmbWNoZGV2 X2xvY2spOwotCQlfX2k5MTVfdXBkYXRlX2dmeF92YWwoZGV2X3ByaXYpOwotCQlzcGluX3VubG9j a19pcnEoJm1jaGRldl9sb2NrKTsKLQl9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faTkx NV9nZnhfdmFsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQl1bnNpZ25l ZCBsb25nIHQsIGNvcnIsIHN0YXRlMSwgY29ycjIsIHN0YXRlMjsKLQl1MzIgcHh2aWQsIGV4dF92 OwotCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmbWNoZGV2X2xvY2spOwotCi0JcHh2aWQgPSBJOTE1 X1JFQUQoUFhWRlJFUShkZXZfcHJpdi0+Z3RfcG0ucnBzLmN1cl9mcmVxKSk7Ci0JcHh2aWQgPSAo cHh2aWQgPj4gMjQpICYgMHg3ZjsKLQlleHRfdiA9IHB2aWRfdG9fZXh0dmlkKGRldl9wcml2LCBw eHZpZCk7Ci0KLQlzdGF0ZTEgPSBleHRfdjsKLQotCXQgPSBpOTE1X21jaF92YWwoZGV2X3ByaXYp OwotCi0JLyogUmV2ZWwgaW4gdGhlIGVtcGlyaWNhbGx5IGRlcml2ZWQgY29uc3RhbnRzICovCi0K LQkvKiBDb3JyZWN0aW9uIGZhY3RvciBpbiAxLzEwMDAwMCB1bml0cyAqLwotCWlmICh0ID4gODAp Ci0JCWNvcnIgPSAoKHQgKiAyMzQ5KSArIDEzNTk0MCk7Ci0JZWxzZSBpZiAodCA+PSA1MCkKLQkJ Y29yciA9ICgodCAqIDk2NCkgKyAyOTMxNyk7Ci0JZWxzZSAvKiA8IDUwICovCi0JCWNvcnIgPSAo KHQgKiAzMDEpICsgMTAwNCk7Ci0KLQljb3JyID0gY29yciAqICgoMTUwMTQyICogc3RhdGUxKSAv IDEwMDAwIC0gNzg2NDIpOwotCWNvcnIgLz0gMTAwMDAwOwotCWNvcnIyID0gKGNvcnIgKiBkZXZf cHJpdi0+aXBzLmNvcnIpOwotCi0Jc3RhdGUyID0gKGNvcnIyICogc3RhdGUxKSAvIDEwMDAwOwot CXN0YXRlMiAvPSAxMDA7IC8qIGNvbnZlcnQgdG8gbVcgKi8KLQotCV9faTkxNV91cGRhdGVfZ2Z4 X3ZhbChkZXZfcHJpdik7Ci0KLQlyZXR1cm4gZGV2X3ByaXYtPmlwcy5nZnhfcG93ZXIgKyBzdGF0 ZTI7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgaTkxNV9nZnhfdmFsKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKLXsKLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKLQl1bnNpZ25lZCBs b25nIHZhbCA9IDA7Ci0KLQlpZiAoIUlTX0dFTihkZXZfcHJpdiwgNSkpCi0JCXJldHVybiAwOwot Ci0Jd2l0aF9pbnRlbF9ydW50aW1lX3BtKCZkZXZfcHJpdi0+cnVudGltZV9wbSwgd2FrZXJlZikg ewotCQlzcGluX2xvY2tfaXJxKCZtY2hkZXZfbG9jayk7Ci0JCXZhbCA9IF9faTkxNV9nZnhfdmFs KGRldl9wcml2KTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZtY2hkZXZfbG9jayk7Ci0JfQotCi0JcmV0 dXJuIHZhbDsKLX0KLQotc3RhdGljIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIF9fcmN1ICppOTE1 X21jaF9kZXY7Ci0KLXN0YXRpYyBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqbWNoZGV2X2dldCh2 b2lkKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1OwotCi0JcmN1X3JlYWRfbG9j aygpOwotCWk5MTUgPSByY3VfZGVyZWZlcmVuY2UoaTkxNV9tY2hfZGV2KTsKLQlpZiAoIWtyZWZf Z2V0X3VubGVzc196ZXJvKCZpOTE1LT5kcm0ucmVmKSkKLQkJaTkxNSA9IE5VTEw7Ci0JcmN1X3Jl YWRfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gaTkxNTsKLX0KLQotLyoqCi0gKiBpOTE1X3JlYWRfbWNo X3ZhbCAtIHJldHVybiB2YWx1ZSBmb3IgSVBTIHVzZQotICoKLSAqIENhbGN1bGF0ZSBhbmQgcmV0 dXJuIGEgdmFsdWUgZm9yIHRoZSBJUFMgZHJpdmVyIHRvIHVzZSB3aGVuIGRlY2lkaW5nIHdoZXRo ZXIKLSAqIHdlIGhhdmUgdGhlcm1hbCBhbmQgcG93ZXIgaGVhZHJvb20gdG8gaW5jcmVhc2UgQ1BV IG9yIEdQVSBwb3dlciBidWRnZXQuCi0gKi8KLXVuc2lnbmVkIGxvbmcgaTkxNV9yZWFkX21jaF92 YWwodm9pZCkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKLQl1bnNpZ25lZCBs b25nIGNoaXBzZXRfdmFsID0gMDsKLQl1bnNpZ25lZCBsb25nIGdyYXBoaWNzX3ZhbCA9IDA7Ci0J aW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Ci0KLQlpOTE1ID0gbWNoZGV2X2dldCgpOwotCWlmICgh aTkxNSkKLQkJcmV0dXJuIDA7Ci0KLQl3aXRoX2ludGVsX3J1bnRpbWVfcG0oJmk5MTUtPnJ1bnRp bWVfcG0sIHdha2VyZWYpIHsKLQkJc3Bpbl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOwotCQljaGlw c2V0X3ZhbCA9IF9faTkxNV9jaGlwc2V0X3ZhbChpOTE1KTsKLQkJZ3JhcGhpY3NfdmFsID0gX19p OTE1X2dmeF92YWwoaTkxNSk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOwotCX0K LQotCWRybV9kZXZfcHV0KCZpOTE1LT5kcm0pOwotCXJldHVybiBjaGlwc2V0X3ZhbCArIGdyYXBo aWNzX3ZhbDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGk5MTVfcmVhZF9tY2hfdmFsKTsKLQotLyoq Ci0gKiBpOTE1X2dwdV9yYWlzZSAtIHJhaXNlIEdQVSBmcmVxdWVuY3kgbGltaXQKLSAqCi0gKiBS YWlzZSB0aGUgbGltaXQ7IElQUyBpbmRpY2F0ZXMgd2UgaGF2ZSB0aGVybWFsIGhlYWRyb29tLgot ICovCi1ib29sIGk5MTVfZ3B1X3JhaXNlKHZvaWQpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTU7Ci0KLQlpOTE1ID0gbWNoZGV2X2dldCgpOwotCWlmICghaTkxNSkKLQkJcmV0dXJu IGZhbHNlOwotCi0Jc3Bpbl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOwotCWlmIChpOTE1LT5pcHMu bWF4X2RlbGF5ID4gaTkxNS0+aXBzLmZtYXgpCi0JCWk5MTUtPmlwcy5tYXhfZGVsYXktLTsKLQlz cGluX3VubG9ja19pcnEoJm1jaGRldl9sb2NrKTsKLQotCWRybV9kZXZfcHV0KCZpOTE1LT5kcm0p OwotCXJldHVybiB0cnVlOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaTkxNV9ncHVfcmFpc2UpOwot Ci0vKioKLSAqIGk5MTVfZ3B1X2xvd2VyIC0gbG93ZXIgR1BVIGZyZXF1ZW5jeSBsaW1pdAotICoK LSAqIElQUyBpbmRpY2F0ZXMgd2UncmUgY2xvc2UgdG8gYSB0aGVybWFsIGxpbWl0LCBzbyB0aHJv dHRsZSBiYWNrIHRoZSBHUFUKLSAqIGZyZXF1ZW5jeSBtYXhpbXVtLgotICovCi1ib29sIGk5MTVf Z3B1X2xvd2VyKHZvaWQpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Ci0KLQlp OTE1ID0gbWNoZGV2X2dldCgpOwotCWlmICghaTkxNSkKLQkJcmV0dXJuIGZhbHNlOwotCi0Jc3Bp bl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOwotCWlmIChpOTE1LT5pcHMubWF4X2RlbGF5IDwgaTkx NS0+aXBzLm1pbl9kZWxheSkKLQkJaTkxNS0+aXBzLm1heF9kZWxheSsrOwotCXNwaW5fdW5sb2Nr X2lycSgmbWNoZGV2X2xvY2spOwotCi0JZHJtX2Rldl9wdXQoJmk5MTUtPmRybSk7Ci0JcmV0dXJu IHRydWU7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpOTE1X2dwdV9sb3dlcik7Ci0KLS8qKgotICog aTkxNV9ncHVfYnVzeSAtIGluZGljYXRlIEdQVSBidXNpbmVzcyB0byBJUFMKLSAqCi0gKiBUZWxs IHRoZSBJUFMgZHJpdmVyIHdoZXRoZXIgb3Igbm90IHRoZSBHUFUgaXMgYnVzeS4KLSAqLwotYm9v bCBpOTE1X2dwdV9idXN5KHZvaWQpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7 Ci0JYm9vbCByZXQ7Ci0KLQlpOTE1ID0gbWNoZGV2X2dldCgpOwotCWlmICghaTkxNSkKLQkJcmV0 dXJuIGZhbHNlOwotCi0JcmV0ID0gaTkxNS0+Z3QuYXdha2U7Ci0KLQlkcm1fZGV2X3B1dCgmaTkx NS0+ZHJtKTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaTkxNV9ncHVfYnVz eSk7Ci0KLS8qKgotICogaTkxNV9ncHVfdHVyYm9fZGlzYWJsZSAtIGRpc2FibGUgZ3JhcGhpY3Mg dHVyYm8KLSAqCi0gKiBEaXNhYmxlIGdyYXBoaWNzIHR1cmJvIGJ5IHJlc2V0dGluZyB0aGUgbWF4 IGZyZXF1ZW5jeSBhbmQgc2V0dGluZyB0aGUKLSAqIGN1cnJlbnQgZnJlcXVlbmN5IHRvIHRoZSBk ZWZhdWx0LgotICovCi1ib29sIGk5MTVfZ3B1X3R1cmJvX2Rpc2FibGUodm9pZCkKLXsKLQlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKLQlib29sIHJldDsKLQotCWk5MTUgPSBtY2hkZXZf Z2V0KCk7Ci0JaWYgKCFpOTE1KQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlzcGluX2xvY2tfaXJxKCZt Y2hkZXZfbG9jayk7Ci0JaTkxNS0+aXBzLm1heF9kZWxheSA9IGk5MTUtPmlwcy5mc3RhcnQ7Ci0J cmV0ID0gaXJvbmxha2Vfc2V0X2RycHMoaTkxNSwgaTkxNS0+aXBzLmZzdGFydCk7Ci0Jc3Bpbl91 bmxvY2tfaXJxKCZtY2hkZXZfbG9jayk7Ci0KLQlkcm1fZGV2X3B1dCgmaTkxNS0+ZHJtKTsKLQly ZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaTkxNV9ncHVfdHVyYm9fZGlzYWJsZSk7 Ci0KLS8qKgotICogVGVsbHMgdGhlIGludGVsX2lwcyBkcml2ZXIgdGhhdCB0aGUgaTkxNSBkcml2 ZXIgaXMgbm93IGxvYWRlZCwgaWYKLSAqIElQUyBnb3QgbG9hZGVkIGZpcnN0LgotICoKLSAqIFRo aXMgYXdrd2FyZCBkYW5jZSBpcyBzbyB0aGF0IG5laXRoZXIgbW9kdWxlIGhhcyB0byBkZXBlbmQg b24gdGhlCi0gKiBvdGhlciBpbiBvcmRlciBmb3IgSVBTIHRvIGRvIHRoZSBhcHByb3ByaWF0ZSBj b21tdW5pY2F0aW9uIG9mCi0gKiBHUFUgdHVyYm8gbGltaXRzIHRvIGk5MTUuCi0gKi8KLXN0YXRp YyB2b2lkCi1pcHNfcGluZ19mb3JfaTkxNV9sb2FkKHZvaWQpCi17Ci0Jdm9pZCAoKmxpbmspKHZv aWQpOwotCi0JbGluayA9IHN5bWJvbF9nZXQoaXBzX2xpbmtfdG9faTkxNV9kcml2ZXIpOwotCWlm IChsaW5rKSB7Ci0JCWxpbmsoKTsKLQkJc3ltYm9sX3B1dChpcHNfbGlua190b19pOTE1X2RyaXZl cik7Ci0JfQotfQotCi12b2lkIGludGVsX2dwdV9pcHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCi17Ci0JLyogV2Ugb25seSByZWdpc3RlciB0aGUgaTkxNSBpcHMgcGFy dCB3aXRoIGludGVsLWlwcyBvbmNlIGV2ZXJ5dGhpbmcgaXMKLQkgKiBzZXQgdXAsIHRvIGF2b2lk IGludGVsLWlwcyBzbmVha2luZyBpbiBhbmQgcmVhZGluZyBib2d1cyB2YWx1ZXMuICovCi0JcmN1 X2Fzc2lnbl9wb2ludGVyKGk5MTVfbWNoX2RldiwgZGV2X3ByaXYpOwotCi0JaXBzX3BpbmdfZm9y X2k5MTVfbG9hZCgpOwotfQotCi12b2lkIGludGVsX2dwdV9pcHNfdGVhcmRvd24odm9pZCkKLXsK LQlyY3VfYXNzaWduX3BvaW50ZXIoaTkxNV9tY2hfZGV2LCBOVUxMKTsKLX0KLQotc3RhdGljIHZv aWQgaW50ZWxfaW5pdF9lbW9uKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsK LQl1MzIgbGNmdXNlOwotCXU4IHB4d1sxNl07Ci0JaW50IGk7Ci0KLQkvKiBEaXNhYmxlIHRvIHBy b2dyYW0gKi8KLQlJOTE1X1dSSVRFKEVDUiwgMCk7Ci0JUE9TVElOR19SRUFEKEVDUik7Ci0KLQkv KiBQcm9ncmFtIGVuZXJneSB3ZWlnaHRzIGZvciB2YXJpb3VzIGV2ZW50cyAqLwotCUk5MTVfV1JJ VEUoU0RFVywgMHgxNTA0MGQwMCk7Ci0JSTkxNV9XUklURShDU0lFVzAsIDB4MDA3ZjAwMDApOwot CUk5MTVfV1JJVEUoQ1NJRVcxLCAweDFlMjIwMDA0KTsKLQlJOTE1X1dSSVRFKENTSUVXMiwgMHgw NDAwMDAwNCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQotCQlJOTE1X1dSSVRFKFBFVyhp KSwgMCk7Ci0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLQkJSTkxNV9XUklURShERVcoaSksIDAp OwotCi0JLyogUHJvZ3JhbSBQLXN0YXRlIHdlaWdodHMgdG8gYWNjb3VudCBmb3IgZnJlcXVlbmN5 IHBvd2VyIGFkanVzdG1lbnQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQl1MzIg cHh2aWRmcmVxID0gSTkxNV9SRUFEKFBYVkZSRVEoaSkpOwotCQl1bnNpZ25lZCBsb25nIGZyZXEg PSBpbnRlbF9weGZyZXEocHh2aWRmcmVxKTsKLQkJdW5zaWduZWQgbG9uZyB2aWQgPSAocHh2aWRm cmVxICYgUFhWRlJFUV9QWF9NQVNLKSA+PgotCQkJUFhWRlJFUV9QWF9TSElGVDsKLQkJdW5zaWdu ZWQgbG9uZyB2YWw7Ci0KLQkJdmFsID0gdmlkICogdmlkOwotCQl2YWwgKj0gKGZyZXEgLyAxMDAw KTsKLQkJdmFsICo9IDI1NTsKLQkJdmFsIC89ICgxMjcqMTI3KjkwMCk7Ci0JCWlmICh2YWwgPiAw eGZmKQotCQkJRFJNX0VSUk9SKCJiYWQgcHh2YWw6ICVsZFxuIiwgdmFsKTsKLQkJcHh3W2ldID0g dmFsOwotCX0KLQkvKiBSZW5kZXIgc3RhbmRieSBzdGF0ZXMgZ2V0IDAgd2VpZ2h0ICovCi0JcHh3 WzE0XSA9IDA7Ci0JcHh3WzE1XSA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0J CXUzMiB2YWwgPSAocHh3W2kqNF0gPDwgMjQpIHwgKHB4d1soaSo0KSsxXSA8PCAxNikgfAotCQkJ KHB4d1soaSo0KSsyXSA8PCA4KSB8IChweHdbKGkqNCkrM10pOwotCQlJOTE1X1dSSVRFKFBYVyhp KSwgdmFsKTsKLQl9Ci0KLQkvKiBBZGp1c3QgbWFnaWMgcmVncyB0byBtYWdpYyB2YWx1ZXMgKG1v cmUgZXhwZXJpbWVudGFsIHJlc3VsdHMpICovCi0JSTkxNV9XUklURShPR1cwLCAwKTsKLQlJOTE1 X1dSSVRFKE9HVzEsIDApOwotCUk5MTVfV1JJVEUoRUcwLCAweDAwMDA3ZjAwKTsKLQlJOTE1X1dS SVRFKEVHMSwgMHgwMDAwMDAwZSk7Ci0JSTkxNV9XUklURShFRzIsIDB4MDAwZTAwMDApOwotCUk5 MTVfV1JJVEUoRUczLCAweDY4MDAwMzAwKTsKLQlJOTE1X1dSSVRFKEVHNCwgMHg0MjAwMDAwMCk7 Ci0JSTkxNV9XUklURShFRzUsIDB4MDAxNDAwMzEpOwotCUk5MTVfV1JJVEUoRUc2LCAwKTsKLQlJ OTE1X1dSSVRFKEVHNywgMCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlJOTE1X1dS SVRFKFBYV0woaSksIDApOwotCi0JLyogRW5hYmxlIFBNT04gKyBzZWxlY3QgZXZlbnRzICovCi0J STkxNV9XUklURShFQ1IsIDB4ODAwMDAwMTkpOwotCi0JbGNmdXNlID0gSTkxNV9SRUFEKExDRlVT RTAyKTsKLQotCWRldl9wcml2LT5pcHMuY29yciA9IChsY2Z1c2UgJiBMQ0ZVU0VfSElWX01BU0sp OwotfQotCi12b2lkIGludGVsX2luaXRfZ3RfcG93ZXJzYXZlKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0 X3BtLnJwczsKLQotCS8qIFBvd2Vyc2F2aW5nIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGhvc3Qgd2hl biBpbnNpZGUgYSBWTSAqLwotCWlmIChpbnRlbF92Z3B1X2FjdGl2ZShkZXZfcHJpdikpCi0JCW1r d3JpdGVfZGV2aWNlX2luZm8oZGV2X3ByaXYpLT5oYXNfcnBzID0gZmFsc2U7Ci0KLQkvKiBJbml0 aWFsaXplIFJQUyBsaW1pdHMgKGZvciB1c2Vyc3BhY2UpICovCi0JaWYgKElTX0NIRVJSWVZJRVco ZGV2X3ByaXYpKQotCQljaGVycnl2aWV3X2luaXRfZ3RfcG93ZXJzYXZlKGRldl9wcml2KTsKLQll bHNlIGlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSkKLQkJdmFsbGV5dmlld19pbml0X2d0X3Bv d2Vyc2F2ZShkZXZfcHJpdik7Ci0JZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA2KQot CQlnZW42X2luaXRfcnBzX2ZyZXF1ZW5jaWVzKGRldl9wcml2KTsKLQotCS8qIERlcml2ZSBpbml0 aWFsIHVzZXIgcHJlZmVyZW5jZXMvbGltaXRzIGZyb20gdGhlIGhhcmR3YXJlIGxpbWl0cyAqLwot CXJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0ID0gcnBzLT5tYXhfZnJlcTsKLQlycHMtPm1pbl9mcmVx X3NvZnRsaW1pdCA9IHJwcy0+bWluX2ZyZXE7Ci0KLQkvKiBBZnRlciBzZXR0aW5nIG1heC1zb2Z0 bGltaXQsIGZpbmQgdGhlIG92ZXJjbG9jayBtYXggZnJlcSAqLwotCWlmIChJU19HRU4oZGV2X3By aXYsIDYpIHx8Ci0JICAgIElTX0lWWUJSSURHRShkZXZfcHJpdikgfHwgSVNfSEFTV0VMTChkZXZf cHJpdikpIHsKLQkJdTMyIHBhcmFtcyA9IDA7Ci0KLQkJc2FuZHlicmlkZ2VfcGNvZGVfcmVhZChk ZXZfcHJpdiwgR0VONl9SRUFEX09DX1BBUkFNUywKLQkJCQkgICAgICAgJnBhcmFtcywgTlVMTCk7 Ci0JCWlmIChwYXJhbXMgJiBCSVQoMzEpKSB7IC8qIE9DIHN1cHBvcnRlZCAqLwotCQkJRFJNX0RF QlVHX0RSSVZFUigiT3ZlcmNsb2NraW5nIHN1cHBvcnRlZCwgbWF4OiAlZE1Ieiwgb3ZlcmNsb2Nr OiAlZE1IelxuIiwKLQkJCQkJIChycHMtPm1heF9mcmVxICYgMHhmZikgKiA1MCwKLQkJCQkJIChw YXJhbXMgJiAweGZmKSAqIDUwKTsKLQkJCXJwcy0+bWF4X2ZyZXEgPSBwYXJhbXMgJiAweGZmOwot CQl9Ci0JfQotCi0JLyogRmluYWxseSBhbGxvdyB1cyB0byBib29zdCB0byBtYXggYnkgZGVmYXVs dCAqLwotCXJwcy0+Ym9vc3RfZnJlcSA9IHJwcy0+bWF4X2ZyZXE7Ci0JcnBzLT5pZGxlX2ZyZXEg PSBycHMtPm1pbl9mcmVxOwotCXJwcy0+Y3VyX2ZyZXEgPSBycHMtPmlkbGVfZnJlcTsKLX0KLQot dm9pZCBpbnRlbF9zYW5pdGl6ZV9ndF9wb3dlcnNhdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQotewotCWRldl9wcml2LT5ndF9wbS5ycHMuZW5hYmxlZCA9IHRydWU7IC8qIGZv cmNlIFJQUyBkaXNhYmxpbmcgKi8KLQlpbnRlbF9kaXNhYmxlX2d0X3Bvd2Vyc2F2ZShkZXZfcHJp dik7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkKLQkJZ2VuMTFfcmVzZXRfcnBz X2ludGVycnVwdHMoZGV2X3ByaXYpOwotCWVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g NikKLQkJZ2VuNl9yZXNldF9ycHNfaW50ZXJydXB0cyhkZXZfcHJpdik7Ci19Ci0KLXN0YXRpYyB2 b2lkIGludGVsX2Rpc2FibGVfcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK LXsKLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+Z3RfcG0ucnBzLmxvY2spOwotCi0J aWYgKCFkZXZfcHJpdi0+Z3RfcG0ucnBzLmVuYWJsZWQpCi0JCXJldHVybjsKLQotCWlmIChJTlRF TF9HRU4oZGV2X3ByaXYpID49IDkpCi0JCWdlbjlfZGlzYWJsZV9ycHMoZGV2X3ByaXYpOwotCWVs c2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQotCQljaGVycnl2aWV3X2Rpc2FibGVfcnBz KGRldl9wcml2KTsKLQllbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSkKLQkJdmFsbGV5 dmlld19kaXNhYmxlX3JwcyhkZXZfcHJpdik7Ci0JZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA+PSA2KQotCQlnZW42X2Rpc2FibGVfcnBzKGRldl9wcml2KTsKLQllbHNlIGlmIChJU19JUk9O TEFLRV9NKGRldl9wcml2KSkKLQkJaXJvbmxha2VfZGlzYWJsZV9kcnBzKGRldl9wcml2KTsKLQot CWRldl9wcml2LT5ndF9wbS5ycHMuZW5hYmxlZCA9IGZhbHNlOwotfQotCi12b2lkIGludGVsX2Rp c2FibGVfZ3RfcG93ZXJzYXZlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsK LQltdXRleF9sb2NrKCZkZXZfcHJpdi0+Z3RfcG0ucnBzLmxvY2spOwotCi0JaW50ZWxfZGlzYWJs ZV9ycHMoZGV2X3ByaXYpOwotCWlmIChIQVNfTExDKGRldl9wcml2KSkKLQkJaW50ZWxfbGxjX2Rp c2FibGUoJmRldl9wcml2LT5ndC5sbGMpOwotCi0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+Z3Rf cG0ucnBzLmxvY2spOwotfQotCi1zdGF0aWMgdm9pZCBpbnRlbF9lbmFibGVfcnBzKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAm ZGV2X3ByaXYtPmd0X3BtLnJwczsKLQotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnJwcy0+bG9jayk7 Ci0KLQlpZiAocnBzLT5lbmFibGVkKQotCQlyZXR1cm47Ci0KLQlpZiAoSVNfQ0hFUlJZVklFVyhk ZXZfcHJpdikpIHsKLQkJY2hlcnJ5dmlld19lbmFibGVfcnBzKGRldl9wcml2KTsKLQl9IGVsc2Ug aWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKSB7Ci0JCXZhbGxleXZpZXdfZW5hYmxlX3Jwcyhk ZXZfcHJpdik7Ci0JfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpIHsKLQkJZ2Vu OV9lbmFibGVfcnBzKGRldl9wcml2KTsKLQl9IGVsc2UgaWYgKElTX0JST0FEV0VMTChkZXZfcHJp dikpIHsKLQkJZ2VuOF9lbmFibGVfcnBzKGRldl9wcml2KTsKLQl9IGVsc2UgaWYgKElOVEVMX0dF TihkZXZfcHJpdikgPj0gNikgewotCQlnZW42X2VuYWJsZV9ycHMoZGV2X3ByaXYpOwotCX0gZWxz ZSBpZiAoSVNfSVJPTkxBS0VfTShkZXZfcHJpdikpIHsKLQkJaXJvbmxha2VfZW5hYmxlX2RycHMo ZGV2X3ByaXYpOwotCQlpbnRlbF9pbml0X2Vtb24oZGV2X3ByaXYpOwotCX0KLQotCVdBUk5fT04o cnBzLT5tYXhfZnJlcSA8IHJwcy0+bWluX2ZyZXEpOwotCVdBUk5fT04ocnBzLT5pZGxlX2ZyZXEg PiBycHMtPm1heF9mcmVxKTsKLQotCVdBUk5fT04ocnBzLT5lZmZpY2llbnRfZnJlcSA8IHJwcy0+ bWluX2ZyZXEpOwotCVdBUk5fT04ocnBzLT5lZmZpY2llbnRfZnJlcSA+IHJwcy0+bWF4X2ZyZXEp OwotCi0JcnBzLT5lbmFibGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBpbnRlbF9lbmFibGVfZ3RfcG93 ZXJzYXZlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQkvKiBQb3dlcnNh dmluZyBpcyBjb250cm9sbGVkIGJ5IHRoZSBob3N0IHdoZW4gaW5zaWRlIGEgVk0gKi8KLQlpZiAo aW50ZWxfdmdwdV9hY3RpdmUoZGV2X3ByaXYpKQotCQlyZXR1cm47Ci0KLQltdXRleF9sb2NrKCZk ZXZfcHJpdi0+Z3RfcG0ucnBzLmxvY2spOwotCi0JaWYgKEhBU19SUFMoZGV2X3ByaXYpKQotCQlp bnRlbF9lbmFibGVfcnBzKGRldl9wcml2KTsKLQotCWludGVsX2xsY19lbmFibGUoJmRldl9wcml2 LT5ndC5sbGMpOwotCi0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+Z3RfcG0ucnBzLmxvY2spOwot fQotCi1zdGF0aWMgdm9pZCBpYnhfaW5pdF9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQotewotCS8qCi0JICogT24gSWJleCBQZWFrIGFuZCBDb3VnYXIgUG9p bnQsIHdlIG5lZWQgdG8gZGlzYWJsZSBjbG9jawotCSAqIGdhdGluZyBmb3IgdGhlIHBhbmVsIHBv d2VyIHNlcXVlbmNlciBvciBpdCB3aWxsIGZhaWwgdG8KLQkgKiBzdGFydCB1cCB3aGVuIG5vIHBv cnRzIGFyZSBhY3RpdmUuCi0JICovCi0JSTkxNV9XUklURShTT1VUSF9EU1BDTEtfR0FURV9ELCBQ Q0hfRFBMU1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKLX0KLQotc3RhdGljIHZvaWQgZzR4X2Rp c2FibGVfdHJpY2tsZV9mZWVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsK LQllbnVtIHBpcGUgcGlwZTsKLQotCWZvcl9lYWNoX3BpcGUoZGV2X3ByaXYsIHBpcGUpIHsKLQkJ STkxNV9XUklURShEU1BDTlRSKHBpcGUpLAotCQkJICAgSTkxNV9SRUFEKERTUENOVFIocGlwZSkp IHwKLQkJCSAgIERJU1BQTEFORV9UUklDS0xFX0ZFRURfRElTQUJMRSk7Ci0KLQkJSTkxNV9XUklU RShEU1BTVVJGKHBpcGUpLCBJOTE1X1JFQUQoRFNQU1VSRihwaXBlKSkpOwotCQlQT1NUSU5HX1JF QUQoRFNQU1VSRihwaXBlKSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBpbGtfaW5pdF9jbG9ja19n YXRpbmcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXUzMiBkc3BjbGtf Z2F0ZSA9IElMS19WUkhVTklUX0NMT0NLX0dBVEVfRElTQUJMRTsKLQotCS8qCi0JICogUmVxdWly ZWQgZm9yIEZCQwotCSAqIFdhRmJjRGlzYWJsZURwZmNDbG9ja0dhdGluZzppbGsKLQkgKi8KLQlk c3BjbGtfZ2F0ZSB8PSBJTEtfRFBGQ1JVTklUX0NMT0NLX0dBVEVfRElTQUJMRSB8Ci0JCSAgIElM S19EUEZDVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAotCQkgICBJTEtfRFBGRFVOSVRfQ0xPQ0tf R0FURV9FTkFCTEU7Ci0KLQlJOTE1X1dSSVRFKFBDSF8zRENHRElTMCwKLQkJICAgTUFSSVVOSVRf Q0xPQ0tfR0FURV9ESVNBQkxFIHwKLQkJICAgU1ZTTVVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsK LQlJOTE1X1dSSVRFKFBDSF8zRENHRElTMSwKLQkJICAgVkZNVU5JVF9DTE9DS19HQVRFX0RJU0FC TEUpOwotCi0JLyoKLQkgKiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMgdGhlIGZvbGxvd2luZyBiaXRz IHNob3VsZCBiZSBzZXQgaW4KLQkgKiBvcmRlciB0byBlbmFibGUgbWVtb3J5IHNlbGYtcmVmcmVz aAotCSAqIFRoZSBiaXQgMjIvMjEgb2YgMHg0MjAwNAotCSAqIFRoZSBiaXQgNSBvZiAweDQyMDIw Ci0JICogVGhlIGJpdCAxNSBvZiAweDQ1MDAwCi0JICovCi0JSTkxNV9XUklURShJTEtfRElTUExB WV9DSElDS0VOMiwKLQkJICAgKEk5MTVfUkVBRChJTEtfRElTUExBWV9DSElDS0VOMikgfAotCQkg ICAgSUxLX0RQQVJCX0dBVEUgfCBJTEtfVlNEUEZEX0ZVTEwpKTsKLQlkc3BjbGtfZ2F0ZSB8PSBJ TEtfRFBBUkJVTklUX0NMT0NLX0dBVEVfRU5BQkxFOwotCUk5MTVfV1JJVEUoRElTUF9BUkJfQ1RM LAotCQkgICAoSTkxNV9SRUFEKERJU1BfQVJCX0NUTCkgfAotCQkgICAgRElTUF9GQkNfV01fRElT KSk7Ci0KLQkvKgotCSAqIEJhc2VkIG9uIHRoZSBkb2N1bWVudCBmcm9tIGhhcmR3YXJlIGd1eXMg dGhlIGZvbGxvd2luZyBiaXRzCi0JICogc2hvdWxkIGJlIHNldCB1bmNvbmRpdGlvbmFsbHkgaW4g b3JkZXIgdG8gZW5hYmxlIEZCQy4KLQkgKiBUaGUgYml0IDIyIG9mIDB4NDIwMDAKLQkgKiBUaGUg Yml0IDIyIG9mIDB4NDIwMDQKLQkgKiBUaGUgYml0IDcsOCw5IG9mIDB4NDIwMjAuCi0JICovCi0J aWYgKElTX0lST05MQUtFX00oZGV2X3ByaXYpKSB7Ci0JCS8qIFdhRmJjQXN5bmNoRmxpcERpc2Fi bGVGYmNRdWV1ZTppbGsgKi8KLQkJSTkxNV9XUklURShJTEtfRElTUExBWV9DSElDS0VOMSwKLQkJ CSAgIEk5MTVfUkVBRChJTEtfRElTUExBWV9DSElDS0VOMSkgfAotCQkJICAgSUxLX0ZCQ1FfRElT KTsKLQkJSTkxNV9XUklURShJTEtfRElTUExBWV9DSElDS0VOMiwKLQkJCSAgIEk5MTVfUkVBRChJ TEtfRElTUExBWV9DSElDS0VOMikgfAotCQkJICAgSUxLX0RQQVJCX0dBVEUpOwotCX0KLQotCUk5 MTVfV1JJVEUoSUxLX0RTUENMS19HQVRFX0QsIGRzcGNsa19nYXRlKTsKLQotCUk5MTVfV1JJVEUo SUxLX0RJU1BMQVlfQ0hJQ0tFTjIsCi0JCSAgIEk5MTVfUkVBRChJTEtfRElTUExBWV9DSElDS0VO MikgfAotCQkgICBJTEtfRUxQSU5fNDA5X1NFTEVDVCk7Ci0JSTkxNV9XUklURShfM0RfQ0hJQ0tF TjIsCi0JCSAgIF8zRF9DSElDS0VOMl9XTV9SRUFEX1BJUEVMSU5FRCA8PCAxNiB8Ci0JCSAgIF8z RF9DSElDS0VOMl9XTV9SRUFEX1BJUEVMSU5FRCk7Ci0KLQkvKiBXYURpc2FibGVSZW5kZXJDYWNo ZVBpcGVsaW5lZEZsdXNoOmlsayAqLwotCUk5MTVfV1JJVEUoQ0FDSEVfTU9ERV8wLAotCQkgICBf TUFTS0VEX0JJVF9FTkFCTEUoQ00wX1BJUEVMSU5FRF9SRU5ERVJfRkxVU0hfRElTQUJMRSkpOwot Ci0JLyogV2FEaXNhYmxlX1JlbmRlckNhY2hlX09wZXJhdGlvbmFsRmx1c2g6aWxrICovCi0JSTkx NV9XUklURShDQUNIRV9NT0RFXzAsIF9NQVNLRURfQklUX0RJU0FCTEUoUkNfT1BfRkxVU0hfRU5B QkxFKSk7Ci0KLQlnNHhfZGlzYWJsZV90cmlja2xlX2ZlZWQoZGV2X3ByaXYpOwotCi0JaWJ4X2lu aXRfY2xvY2tfZ2F0aW5nKGRldl9wcml2KTsKLX0KLQotc3RhdGljIHZvaWQgY3B0X2luaXRfY2xv Y2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQllbnVtIHBp cGUgcGlwZTsKLQl1MzIgdmFsOwotCi0JLyoKLQkgKiBPbiBJYmV4IFBlYWsgYW5kIENvdWdhciBQ b2ludCwgd2UgbmVlZCB0byBkaXNhYmxlIGNsb2NrCi0JICogZ2F0aW5nIGZvciB0aGUgcGFuZWwg cG93ZXIgc2VxdWVuY2VyIG9yIGl0IHdpbGwgZmFpbCB0bwotCSAqIHN0YXJ0IHVwIHdoZW4gbm8g cG9ydHMgYXJlIGFjdGl2ZS4KLQkgKi8KLQlJOTE1X1dSSVRFKFNPVVRIX0RTUENMS19HQVRFX0Qs IFBDSF9EUExTVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAotCQkgICBQQ0hfRFBMVU5JVF9DTE9D S19HQVRFX0RJU0FCTEUgfAotCQkgICBQQ0hfQ1BVTklUX0NMT0NLX0dBVEVfRElTQUJMRSk7Ci0J STkxNV9XUklURShTT1VUSF9DSElDS0VOMiwgSTkxNV9SRUFEKFNPVVRIX0NISUNLRU4yKSB8Ci0J CSAgIERQTFNfRURQX1BQU19GSVhfRElTKTsKLQkvKiBUaGUgYmVsb3cgZml4ZXMgdGhlIHdlaXJk IGRpc3BsYXkgY29ycnVwdGlvbiwgYSBmZXcgcGl4ZWxzIHNoaWZ0ZWQKLQkgKiBkb3dud2FyZCwg b24gKG9ubHkpIExWRFMgb2Ygc29tZSBIUCBsYXB0b3BzIHdpdGggSVZZLgotCSAqLwotCWZvcl9l YWNoX3BpcGUoZGV2X3ByaXYsIHBpcGUpIHsKLQkJdmFsID0gSTkxNV9SRUFEKFRSQU5TX0NISUNL RU4yKHBpcGUpKTsKLQkJdmFsIHw9IFRSQU5TX0NISUNLRU4yX1RJTUlOR19PVkVSUklERTsKLQkJ dmFsICY9IH5UUkFOU19DSElDS0VOMl9GRElfUE9MQVJJVFlfUkVWRVJTRUQ7Ci0JCWlmIChkZXZf cHJpdi0+dmJ0LmZkaV9yeF9wb2xhcml0eV9pbnZlcnRlZCkKLQkJCXZhbCB8PSBUUkFOU19DSElD S0VOMl9GRElfUE9MQVJJVFlfUkVWRVJTRUQ7Ci0JCXZhbCAmPSB+VFJBTlNfQ0hJQ0tFTjJfRlJB TUVfU1RBUlRfREVMQVlfTUFTSzsKLQkJdmFsICY9IH5UUkFOU19DSElDS0VOMl9ESVNBQkxFX0RF RVBfQ09MT1JfQ09VTlRFUjsKLQkJdmFsICY9IH5UUkFOU19DSElDS0VOMl9ESVNBQkxFX0RFRVBf Q09MT1JfTU9ERVNXSVRDSDsKLQkJSTkxNV9XUklURShUUkFOU19DSElDS0VOMihwaXBlKSwgdmFs KTsKLQl9Ci0JLyogV0FEUDBDbG9ja0dhdGluZ0Rpc2FibGUgKi8KLQlmb3JfZWFjaF9waXBlKGRl dl9wcml2LCBwaXBlKSB7Ci0JCUk5MTVfV1JJVEUoVFJBTlNfQ0hJQ0tFTjEocGlwZSksCi0JCQkg ICBUUkFOU19DSElDS0VOMV9EUDBVTklUX0dDX0RJU0FCTEUpOwotCX0KLX0KLQotc3RhdGljIHZv aWQgZ2VuNl9jaGVja19tY2hfc2V0dXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQotewotCXUzMiB0bXA7Ci0KLQl0bXAgPSBJOTE1X1JFQUQoTUNIX1NTS1BEKTsKLQlpZiAoKHRt cCAmIE1DSF9TU0tQRF9XTTBfTUFTSykgIT0gTUNIX1NTS1BEX1dNMF9WQUwpCi0JCURSTV9ERUJV R19LTVMoIldyb25nIE1DSF9TU0tQRCB2YWx1ZTogMHglMDh4IFRoaXMgY2FuIGNhdXNlIHVuZGVy cnVucy5cbiIsCi0JCQkgICAgICB0bXApOwotfQotCi1zdGF0aWMgdm9pZCBnZW42X2luaXRfY2xv Y2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQl1MzIgZHNw Y2xrX2dhdGUgPSBJTEtfVlJIVU5JVF9DTE9DS19HQVRFX0RJU0FCTEU7Ci0KLQlJOTE1X1dSSVRF KElMS19EU1BDTEtfR0FURV9ELCBkc3BjbGtfZ2F0ZSk7Ci0KLQlJOTE1X1dSSVRFKElMS19ESVNQ TEFZX0NISUNLRU4yLAotCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIpIHwKLQkJ ICAgSUxLX0VMUElOXzQwOV9TRUxFQ1QpOwotCi0JLyogV2FEaXNhYmxlSGlaUGxhbmVzV2hlbk1T QUFFbmFibGVkOnNuYiAqLwotCUk5MTVfV1JJVEUoXzNEX0NISUNLRU4sCi0JCSAgIF9NQVNLRURf QklUX0VOQUJMRShfM0RfQ0hJQ0tFTl9ISVpfUExBTkVfRElTQUJMRV9NU0FBXzRYX1NOQikpOwot Ci0JLyogV2FEaXNhYmxlX1JlbmRlckNhY2hlX09wZXJhdGlvbmFsRmx1c2g6c25iICovCi0JSTkx NV9XUklURShDQUNIRV9NT0RFXzAsIF9NQVNLRURfQklUX0RJU0FCTEUoUkNfT1BfRkxVU0hfRU5B QkxFKSk7Ci0KLQkvKgotCSAqIEJTcGVjIHJlY29vbWVuZHMgOHg0IHdoZW4gTVNBQSBpcyB1c2Vk LAotCSAqIGhvd2V2ZXIgaW4gcHJhY3RpY2UgMTZ4NCBzZWVtcyBmYXN0ZXN0LgotCSAqCi0JICog Tm90ZSB0aGF0IFBTL1dNIHRocmVhZCBjb3VudHMgZGVwZW5kIG9uIHRoZSBXSVogaGFzaGluZwot CSAqIGRpc2FibGUgYml0LCB3aGljaCB3ZSBkb24ndCB0b3VjaCBoZXJlLCBidXQgaXQncyBnb29k Ci0JICogdG8ga2VlcCBpbiBtaW5kIChzZWUgM0RTVEFURV9QUyBhbmQgM0RTVEFURV9XTSkuCi0J ICovCi0JSTkxNV9XUklURShHRU42X0dUX01PREUsCi0JCSAgIF9NQVNLRURfRklFTEQoR0VONl9X SVpfSEFTSElOR19NQVNLLCBHRU42X1dJWl9IQVNISU5HXzE2eDQpKTsKLQotCUk5MTVfV1JJVEUo Q0FDSEVfTU9ERV8wLAotCQkgICBfTUFTS0VEX0JJVF9ESVNBQkxFKENNMF9TVENfRVZJQ1RfRElT QUJMRV9MUkFfU05CKSk7Ci0KLQlJOTE1X1dSSVRFKEdFTjZfVUNHQ1RMMSwKLQkJICAgSTkxNV9S RUFEKEdFTjZfVUNHQ1RMMSkgfAotCQkgICBHRU42X0JMQlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxF IHwKLQkJICAgR0VONl9DU1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKLQotCS8qIEFjY29yZGlu ZyB0byB0aGUgQlNwZWMgdm9sMWcsIGJpdCAxMiAoUkNQQlVOSVQpIGNsb2NrCi0JICogZ2F0aW5n IGRpc2FibGUgbXVzdCBiZSBzZXQuICBGYWlsdXJlIHRvIHNldCBpdCByZXN1bHRzIGluCi0JICog ZmxpY2tlcmluZyBwaXhlbHMgZHVlIHRvIFogd3JpdGUgb3JkZXJpbmcgZmFpbHVyZXMgYWZ0ZXIK LQkgKiBzb21lIGFtb3VudCBvZiBydW50aW1lIGluIHRoZSBNZXNhICJmaXJlIiBkZW1vLCBhbmQg VW5pZ2luZQotCSAqIFNhbmN0dWFyeSBhbmQgVHJvcGljcywgYW5kIGFwcGFyZW50bHkgYW55dGhp bmcgZWxzZSB3aXRoCi0JICogYWxwaGEgdGVzdCBvciBwaXhlbCBkaXNjYXJkLgotCSAqCi0JICog QWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBiaXQgMTEgKFJDQ1VOSVQpIG11c3QgYWxzbyBiZSBzZXQs Ci0JICogYnV0IHdlIGRpZG4ndCBkZWJ1ZyBhY3R1YWwgdGVzdGNhc2VzIHRvIGZpbmQgaXQgb3V0 LgotCSAqCi0JICogV2FEaXNhYmxlUkNDVW5pdENsb2NrR2F0aW5nOnNuYgotCSAqIFdhRGlzYWJs ZVJDUEJVbml0Q2xvY2tHYXRpbmc6c25iCi0JICovCi0JSTkxNV9XUklURShHRU42X1VDR0NUTDIs Ci0JCSAgIEdFTjZfUkNQQlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKLQkJICAgR0VONl9SQ0NV TklUX0NMT0NLX0dBVEVfRElTQUJMRSk7Ci0KLQkvKiBXYVN0cmlwc0ZhbnNEaXNhYmxlRmFzdENs aXBQZXJmb3JtYW5jZUZpeDpzbmIgKi8KLQlJOTE1X1dSSVRFKF8zRF9DSElDS0VOMywKLQkJICAg X01BU0tFRF9CSVRfRU5BQkxFKF8zRF9DSElDS0VOM19TRl9ESVNBQkxFX0ZBU1RDTElQX0NVTEwp KTsKLQotCS8qCi0JICogQnNwZWMgc2F5czoKLQkgKiAiVGhpcyBiaXQgbXVzdCBiZSBzZXQgaWYg M0RTVEFURV9DTElQIGNsaXAgbW9kZSBpcyBzZXQgdG8gbm9ybWFsIGFuZAotCSAqIDNEU1RBVEVf U0YgbnVtYmVyIG9mIFNGIG91dHB1dCBhdHRyaWJ1dGVzIGlzIG1vcmUgdGhhbiAxNi4iCi0JICov Ci0JSTkxNV9XUklURShfM0RfQ0hJQ0tFTjMsCi0JCSAgIF9NQVNLRURfQklUX0VOQUJMRShfM0Rf Q0hJQ0tFTjNfU0ZfRElTQUJMRV9QSVBFTElORURfQVRUUl9GRVRDSCkpOwotCi0JLyoKLQkgKiBB Y2NvcmRpbmcgdG8gdGhlIHNwZWMgdGhlIGZvbGxvd2luZyBiaXRzIHNob3VsZCBiZQotCSAqIHNl dCBpbiBvcmRlciB0byBlbmFibGUgbWVtb3J5IHNlbGYtcmVmcmVzaCBhbmQgZmJjOgotCSAqIFRo ZSBiaXQyMSBhbmQgYml0MjIgb2YgMHg0MjAwMAotCSAqIFRoZSBiaXQyMSBhbmQgYml0MjIgb2Yg MHg0MjAwNAotCSAqIFRoZSBiaXQ1IGFuZCBiaXQ3IG9mIDB4NDIwMjAKLQkgKiBUaGUgYml0MTQg b2YgMHg3MDE4MAotCSAqIFRoZSBiaXQxNCBvZiAweDcxMTgwCi0JICoKLQkgKiBXYUZiY0FzeW5j aEZsaXBEaXNhYmxlRmJjUXVldWU6c25iCi0JICovCi0JSTkxNV9XUklURShJTEtfRElTUExBWV9D SElDS0VOMSwKLQkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4xKSB8Ci0JCSAgIElM S19GQkNRX0RJUyB8IElMS19QQUJTVFJFVENIX0RJUyk7Ci0JSTkxNV9XUklURShJTEtfRElTUExB WV9DSElDS0VOMiwKLQkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4yKSB8Ci0JCSAg IElMS19EUEFSQl9HQVRFIHwgSUxLX1ZTRFBGRF9GVUxMKTsKLQlJOTE1X1dSSVRFKElMS19EU1BD TEtfR0FURV9ELAotCQkgICBJOTE1X1JFQUQoSUxLX0RTUENMS19HQVRFX0QpIHwKLQkJICAgSUxL X0RQQVJCVU5JVF9DTE9DS19HQVRFX0VOQUJMRSAgfAotCQkgICBJTEtfRFBGRFVOSVRfQ0xPQ0tf R0FURV9FTkFCTEUpOwotCi0JZzR4X2Rpc2FibGVfdHJpY2tsZV9mZWVkKGRldl9wcml2KTsKLQot CWNwdF9pbml0X2Nsb2NrX2dhdGluZyhkZXZfcHJpdik7Ci0KLQlnZW42X2NoZWNrX21jaF9zZXR1 cChkZXZfcHJpdik7Ci19Ci0KLXN0YXRpYyB2b2lkIGdlbjdfc2V0dXBfZml4ZWRfZnVuY19zY2hl ZHVsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCXUzMiByZWcgPSBJ OTE1X1JFQUQoR0VON19GRl9USFJFQURfTU9ERSk7CisJdTMyIHJlZyA9IEk5MTVfUkVBRChHRU43 X0ZGX1RIUkVBRF9NT0RFKTsKIAogCS8qCiAJICogV2FWU1RocmVhZERpc3BhdGNoT3ZlcnJpZGU6 aXZiLHZsdgpAQCAtODk0Miw5MCArNzMyNSw4IEBAIHZvaWQgaW50ZWxfaW5pdF9wbShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJfQogfQogCi1zdGF0aWMgaW50IGJ5dF9ncHVf ZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpCi17Ci0Jc3Ry dWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0KLQkvKgotCSAqIE4g PSB2YWwgLSAweGI3Ci0JICogU2xvdyA9IEZhc3QgPSBHUExMIHJlZiAqIE4KLQkgKi8KLQlyZXR1 cm4gRElWX1JPVU5EX0NMT1NFU1QocnBzLT5ncGxsX3JlZl9mcmVxICogKHZhbCAtIDB4YjcpLCAx MDAwKTsKLX0KLQotc3RhdGljIGludCBieXRfZnJlcV9vcGNvZGUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LCBpbnQgdmFsKQotewotCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZk ZXZfcHJpdi0+Z3RfcG0ucnBzOwotCi0JcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKDEwMDAgKiB2 YWwsIHJwcy0+Z3BsbF9yZWZfZnJlcSkgKyAweGI3OwotfQotCi1zdGF0aWMgaW50IGNodl9ncHVf ZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpCi17Ci0Jc3Ry dWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Ci0KLQkvKgotCSAqIE4g PSB2YWwgLyAyCi0JICogQ1UgKHNsb3cpID0gQ1UyeCAoZmFzdCkgLyAyID0gR1BMTCByZWYgKiBO IC8gMgotCSAqLwotCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVChycHMtPmdwbGxfcmVmX2ZyZXEg KiB2YWwsIDIgKiAyICogMTAwMCk7Ci19Ci0KLXN0YXRpYyBpbnQgY2h2X2ZyZXFfb3Bjb2RlKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IHZhbCkKLXsKLQlzdHJ1Y3QgaW50 ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKLQotCS8qIENIViBuZWVkcyBldmVu IHZhbHVlcyAqLwotCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVCgyICogMTAwMCAqIHZhbCwgcnBz LT5ncGxsX3JlZl9mcmVxKSAqIDI7Ci19Ci0KLWludCBpbnRlbF9ncHVfZnJlcShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpCi17Ci0JaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gOSkKLQkJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHZhbCAqIEdUX0ZSRVFVRU5D WV9NVUxUSVBMSUVSLAotCQkJCQkgR0VOOV9GUkVRX1NDQUxFUik7Ci0JZWxzZSBpZiAoSVNfQ0hF UlJZVklFVyhkZXZfcHJpdikpCi0JCXJldHVybiBjaHZfZ3B1X2ZyZXEoZGV2X3ByaXYsIHZhbCk7 Ci0JZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikpCi0JCXJldHVybiBieXRfZ3B1X2Zy ZXEoZGV2X3ByaXYsIHZhbCk7Ci0JZWxzZQotCQlyZXR1cm4gdmFsICogR1RfRlJFUVVFTkNZX01V TFRJUExJRVI7Ci19Ci0KLWludCBpbnRlbF9mcmVxX29wY29kZShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpCi17Ci0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g OSkKLQkJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHZhbCAqIEdFTjlfRlJFUV9TQ0FMRVIsCi0J CQkJCSBHVF9GUkVRVUVOQ1lfTVVMVElQTElFUik7Ci0JZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhk ZXZfcHJpdikpCi0JCXJldHVybiBjaHZfZnJlcV9vcGNvZGUoZGV2X3ByaXYsIHZhbCk7Ci0JZWxz ZSBpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikpCi0JCXJldHVybiBieXRfZnJlcV9vcGNvZGUo ZGV2X3ByaXYsIHZhbCk7Ci0JZWxzZQotCQlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QodmFsLCBH VF9GUkVRVUVOQ1lfTVVMVElQTElFUik7Ci19Ci0KIHZvaWQgaW50ZWxfcG1fc2V0dXAoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewotCW11dGV4X2luaXQoJmRldl9wcml2LT5n dF9wbS5ycHMubG9jayk7Ci0JbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPmd0X3BtLnJwcy5wb3dlci5t dXRleCk7Ci0KLQlhdG9taWNfc2V0KCZkZXZfcHJpdi0+Z3RfcG0ucnBzLm51bV93YWl0ZXJzLCAw KTsKLQogCWRldl9wcml2LT5ydW50aW1lX3BtLnN1c3BlbmRlZCA9IGZhbHNlOwogCWF0b21pY19z ZXQoJmRldl9wcml2LT5ydW50aW1lX3BtLndha2VyZWZfY291bnQsIDApOwogfQotCi11MzIgaW50 ZWxfZ2V0X2NhZ2Yoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgcnBzdGF0 KQotewotCXUzMiBjYWdmOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkKLQkJY2Fn ZiA9IChycHN0YXQgJiBHRU45X0NBR0ZfTUFTSykgPj4gR0VOOV9DQUdGX1NISUZUOwotCWVsc2Ug aWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpIHx8IElTX0JST0FEV0VMTChkZXZfcHJpdikpCi0JCWNh Z2YgPSAocnBzdGF0ICYgSFNXX0NBR0ZfTUFTSykgPj4gSFNXX0NBR0ZfU0hJRlQ7Ci0JZWxzZQot CQljYWdmID0gKHJwc3RhdCAmIEdFTjZfQ0FHRl9NQVNLKSA+PiBHRU42X0NBR0ZfU0hJRlQ7Ci0K LQlyZXR1cm4gIGNhZ2Y7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9wbS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uaAppbmRleCA5M2QxOTJkMDYx MGEuLmI1NmU2Mjg1ZDFjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cG0uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5oCkBAIC0yOSwxNSArMjks NiBAQCB2b2lkIGludGVsX3VwZGF0ZV93YXRlcm1hcmtzKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRj KTsKIHZvaWQgaW50ZWxfaW5pdF9wbShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Owogdm9pZCBpbnRlbF9pbml0X2Nsb2NrX2dhdGluZ19ob29rcyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBpbnRlbF9wbV9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpOwotdm9pZCBpbnRlbF9ncHVfaXBzX2luaXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KTsKLXZvaWQgaW50ZWxfZ3B1X2lwc190ZWFyZG93bih2b2lkKTsK LXZvaWQgaW50ZWxfaW5pdF9ndF9wb3dlcnNhdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KTsKLXZvaWQgaW50ZWxfc2FuaXRpemVfZ3RfcG93ZXJzYXZlKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdik7Ci12b2lkIGludGVsX2VuYWJsZV9ndF9wb3dlcnNhdmUoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKLXZvaWQgaW50ZWxfZGlzYWJsZV9ndF9w b3dlcnNhdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKLXZvaWQgZ2VuNl9y cHNfYnVzeShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotdm9pZCBnZW42X3Jw c19pZGxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Ci12b2lkIGdlbjZfcnBz X2Jvb3N0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKTsKIHZvaWQgZzR4X3dtX2dldF9od19zdGF0 ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogdm9pZCB2bHZfd21fZ2V0X2h3 X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiB2b2lkIGlsa193bV9n ZXRfaHdfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKQEAgLTY5LDE5 ICs2MCw2IEBAIGludCBza2xfY2hlY2tfcGlwZV9tYXhfcGl4ZWxfcmF0ZShzdHJ1Y3QgaW50ZWxf Y3J0YyAqaW50ZWxfY3J0YywKIHZvaWQgaW50ZWxfaW5pdF9pcGMoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KTsKIHZvaWQgaW50ZWxfZW5hYmxlX2lwYyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpOwogCi1pbnQgaW50ZWxfZ3B1X2ZyZXEoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LCBpbnQgdmFsKTsKLWludCBpbnRlbF9mcmVxX29wY29kZShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpOwotCi11MzIgaW50ZWxfZ2V0 X2NhZ2Yoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgcnBzdGF0MSk7Ci0K LXVuc2lnbmVkIGxvbmcgaTkxNV9jaGlwc2V0X3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpOwotdW5zaWduZWQgbG9uZyBpOTE1X21jaF92YWwoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KTsKLXVuc2lnbmVkIGxvbmcgaTkxNV9nZnhfdmFsKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdik7Ci12b2lkIGk5MTVfdXBkYXRlX2dmeF92YWwoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKLQotYm9vbCBpcm9ubGFrZV9zZXRfZHJwcyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHU4IHZhbCk7Ci1pbnQgaW50ZWxfc2V0 X3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHU4IHZhbCk7Ci12b2lkIGlu dGVsX3Jwc19tYXJrX2ludGVyYWN0aXZlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCBi b29sIGludGVyYWN0aXZlKTsKIGJvb2wgaW50ZWxfc2V0X21lbW9yeV9jeHNyKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwgYm9vbCBlbmFibGUpOwogCiAjZW5kaWYgLyogX19JTlRF TF9QTV9IX18gKi8KLS0gCjIuMjMuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vaW50ZWwtZ2Z4