From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 98A9B89F6E for ; Sun, 2 Aug 2020 16:30:32 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Sun, 2 Aug 2020 18:29:53 +0200 Message-Id: <20200802163002.5815-10-zbigniew.kempczynski@intel.com> In-Reply-To: <20200802163002.5815-1-zbigniew.kempczynski@intel.com> References: <20200802163002.5815-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v23 09/18] lib/rendercopy: remove libdrm dependency List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Chris Wilson List-ID: VXNlIGludGVsX2JiIGFzIG1haW4gYmF0Y2ggaW1wbGVtZW50YXRpb24gdG8gcmVtb3ZlIGxpYmRy bSBkZXBlbmRlbmN5LgpSZXdyaXRlIGFsbCBwaXBlbGluZXMgdG8gdXNlIGludGVsX2JiIGFuZCB1 cGRhdGUgcmVuZGVyfHZlYm94X2NvcHkKZnVuY3Rpb24gcHJvdG90eXBlcy4KClNpZ25lZC1vZmYt Ynk6IFpiaWduaWV3IEtlbXBjennFhHNraSA8emJpZ25pZXcua2VtcGN6eW5za2lAaW50ZWwuY29t PgpDYzogRG9taW5payBHcnplZ29yemVrIDxkb21pbmlrLmdyemVnb3J6ZWtAaW50ZWwuY29tPgpD YzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Ci0tLQogbGliL2ludGVs X2F1eF9wZ3RhYmxlLmMgfCAgMzI1ICsrKysrLS0tLS0tCiBsaWIvaW50ZWxfYXV4X3BndGFibGUu aCB8ICAgMjkgKy0KIGxpYi9pbnRlbF9iYXRjaGJ1ZmZlci5oIHwgICA0MiArLQogbGliL3JlbmRl cmNvcHkuaCAgICAgICAgfCAgMTAyICsrLS0KIGxpYi9yZW5kZXJjb3B5X2dlbjQuYyAgIHwgIDU3 MSArKysrKysrKysrLS0tLS0tLS0tCiBsaWIvcmVuZGVyY29weV9nZW42LmMgICB8ICA1OTMgKysr KysrKysrKy0tLS0tLS0tLS0KIGxpYi9yZW5kZXJjb3B5X2dlbjcuYyAgIHwgIDYxMiArKysrKysr KysrLS0tLS0tLS0tLS0KIGxpYi9yZW5kZXJjb3B5X2dlbjguYyAgIHwgMTAzMCArKysrKysrKysr KysrKystLS0tLS0tLS0tLS0tLS0tLS0tLQogbGliL3JlbmRlcmNvcHlfZ2VuOS5jICAgfCAxMTQ1 ICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogbGliL3JlbmRlcmNvcHlf aTgzMC5jICAgfCAgMjc4ICsrKysrLS0tLS0KIGxpYi9yZW5kZXJjb3B5X2k5MTUuYyAgIHwgIDI4 MSArKysrKy0tLS0tCiBsaWIvdmVib3hjb3B5LmggICAgICAgICB8ICAgIDggKy0KIGxpYi92ZWJv eGNvcHlfZ2VuMTIuYyAgIHwgIDExNyArKy0tCiAxMyBmaWxlcyBjaGFuZ2VkLCAyNDI5IGluc2Vy dGlvbnMoKyksIDI3MDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGliL2ludGVsX2F1eF9w Z3RhYmxlLmMgYi9saWIvaW50ZWxfYXV4X3BndGFibGUuYwppbmRleCBkYjUwNTVjOC4uYjQzYTM2 NmIgMTAwNjQ0Ci0tLSBhL2xpYi9pbnRlbF9hdXhfcGd0YWJsZS5jCisrKyBiL2xpYi9pbnRlbF9h dXhfcGd0YWJsZS5jCkBAIC00LDcgKzQsNyBAQAogI2luY2x1ZGUgImRybXRlc3QuaCIKICNpbmNs dWRlICJpbnRlbF9hdXhfcGd0YWJsZS5oIgogI2luY2x1ZGUgImludGVsX2JhdGNoYnVmZmVyLmgi Ci0jaW5jbHVkZSAiaW50ZWxfYnVmbWdyLmgiCisjaW5jbHVkZSAiaW50ZWxfYnVmb3BzLmgiCiAj aW5jbHVkZSAiaW9jdGxfd3JhcHBlcnMuaCIKIAogI2luY2x1ZGUgImk5MTUvZ2VtX21tYW4uaCIK QEAgLTMxLDggKzMxLDYgQEAKIAogI2RlZmluZSBHRlhfQUREUkVTU19CSVRTCTQ4CiAKLSNkZWZp bmUgbWF4KGEsIGIpCQkoKGEpID4gKGIpID8gKGEpIDogKGIpKQotCiAjZGVmaW5lIEFVWF9GT1JN QVRfWUNSQ0IJMHgwMwogI2RlZmluZSBBVVhfRk9STUFUX1AwMTAJCTB4MDcKICNkZWZpbmUgQVVY X0ZPUk1BVF9QMDE2CQkweDA4CkBAIC01OCwxMCArNTYsMTIgQEAgc3RydWN0IHBndGFibGUgewog CXN0cnVjdCBwZ3RhYmxlX2xldmVsX2luZm8gKmxldmVsX2luZm87CiAJaW50IHNpemU7CiAJaW50 IG1heF9hbGlnbjsKLQlkcm1faW50ZWxfYm8gKmJvOworCXN0cnVjdCBpbnRlbF9iYiAqaWJiOwor CXN0cnVjdCBpbnRlbF9idWYgKmJ1ZjsKKwl2b2lkICpwdHI7CiB9OwogCi1zdGF0aWMgdWludDY0 X3QgbGFzdF9idWZfc3VyZmFjZV9lbmQoY29uc3Qgc3RydWN0IGlndF9idWYgKmJ1ZikKK3N0YXRp YyB1aW50NjRfdCBsYXN0X2J1Zl9zdXJmYWNlX2VuZChzdHJ1Y3QgaW50ZWxfYnVmICpidWYpCiB7 CiAJdWludDY0X3QgZW5kX29mZnNldCA9IDA7CiAJaW50IG51bV9zdXJmYWNlcyA9IGJ1Zi0+Zm9y bWF0X2lzX3l1dl9zZW1pcGxhbmFyID8gMiA6IDE7CkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyB1 aW50NjRfdCBsYXN0X2J1Zl9zdXJmYWNlX2VuZChjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmKQog fQogCiBzdGF0aWMgaW50Ci1wZ3RfdGFibGVfY291bnQoaW50IGFkZHJlc3NfYml0cywgY29uc3Qg c3RydWN0IGlndF9idWYgKipidWZzLCBpbnQgYnVmX2NvdW50KQorcGd0X3RhYmxlX2NvdW50KGlu dCBhZGRyZXNzX2JpdHMsIHN0cnVjdCBpbnRlbF9idWYgKipidWZzLCBpbnQgYnVmX2NvdW50KQog ewogCXVpbnQ2NF90IGVuZDsKIAlpbnQgY291bnQ7CkBAIC04OCwxOSArODgsMTkgQEAgcGd0X3Rh YmxlX2NvdW50KGludCBhZGRyZXNzX2JpdHMsIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICoqYnVmcywg aW50IGJ1Zl9jb3VudCkKIAljb3VudCA9IDA7CiAJZW5kID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwg YnVmX2NvdW50OyBpKyspIHsKLQkJY29uc3Qgc3RydWN0IGlndF9idWYgKmJ1ZiA9IGJ1ZnNbaV07 CisJCXN0cnVjdCBpbnRlbF9idWYgKmJ1ZiA9IGJ1ZnNbaV07CiAJCXVpbnQ2NF90IHN0YXJ0Owog CiAJCS8qIFdlIHJlcXVpcmUgYnVmcyB0byBiZSBzb3J0ZWQuICovCiAJCWlndF9hc3NlcnQoaSA9 PSAwIHx8Ci0JCQkgICBidWYtPmJvLT5vZmZzZXQ2NCA+PSBidWZzW2kgLSAxXS0+Ym8tPm9mZnNl dDY0ICsKLQkJCQkJCWJ1ZnNbaSAtIDFdLT5iby0+c2l6ZSk7CisJCQkgICBidWYtPmFkZHIub2Zm c2V0ID49IGJ1ZnNbaSAtIDFdLT5hZGRyLm9mZnNldCArCisJCQkJCSAgICAgICBpbnRlbF9idWZf Ym9fc2l6ZShidWZzW2kgLSAxXSkpOwogCi0JCXN0YXJ0ID0gQUxJR05fRE9XTihidWYtPmJvLT5v ZmZzZXQ2NCwgMVVMIDw8IGFkZHJlc3NfYml0cyk7CisJCXN0YXJ0ID0gQUxJR05fRE9XTihidWYt PmFkZHIub2Zmc2V0LCAxVUwgPDwgYWRkcmVzc19iaXRzKTsKIAkJLyogQXZvaWQgZG91YmxlIGNv dW50aW5nIGZvciBvdmVybGFwcGluZyBhbGlnbmVkIGJ1ZnMuICovCiAJCXN0YXJ0ID0gbWF4KHN0 YXJ0LCBlbmQpOwogCi0JCWVuZCA9IEFMSUdOKGJ1Zi0+Ym8tPm9mZnNldDY0ICsgbGFzdF9idWZf c3VyZmFjZV9lbmQoYnVmKSwKKwkJZW5kID0gQUxJR04oYnVmLT5hZGRyLm9mZnNldCArIGxhc3Rf YnVmX3N1cmZhY2VfZW5kKGJ1ZiksCiAJCQkgICAgMVVMIDw8IGFkZHJlc3NfYml0cyk7CiAJCWln dF9hc3NlcnQoZW5kID49IHN0YXJ0KTsKIApAQCAtMTExLDcgKzExMSw3IEBAIHBndF90YWJsZV9j b3VudChpbnQgYWRkcmVzc19iaXRzLCBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqKmJ1ZnMsIGludCBi dWZfY291bnQpCiB9CiAKIHN0YXRpYyB2b2lkCi1wZ3RfY2FsY19zaXplKHN0cnVjdCBwZ3RhYmxl ICpwZ3QsIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICoqYnVmcywgaW50IGJ1Zl9jb3VudCkKK3BndF9j YWxjX3NpemUoc3RydWN0IHBndGFibGUgKnBndCwgc3RydWN0IGludGVsX2J1ZiAqKmJ1ZnMsIGlu dCBidWZfY291bnQpCiB7CiAJaW50IGxldmVsOwogCkBAIC0xNzEsMjggKzE3MSwzMyBAQCBwZ3Rf Z2V0X2NoaWxkX3RhYmxlKHN0cnVjdCBwZ3RhYmxlICpwZ3QsIHVpbnQ2NF90IHBhcmVudF90YWJs ZSwKIAl1aW50NjRfdCAqY2hpbGRfZW50cnlfcHRyOwogCXVpbnQ2NF90IGNoaWxkX3RhYmxlOwog Ci0JcGFyZW50X3RhYmxlX3B0ciA9IHBndC0+Ym8tPnZpcnR1YWwgKyBwYXJlbnRfdGFibGU7CisJ cGFyZW50X3RhYmxlX3B0ciA9IHBndC0+cHRyICsgcGFyZW50X3RhYmxlOwogCWNoaWxkX2VudHJ5 X2lkeCA9IHBndF9lbnRyeV9pbmRleChwZ3QsIGxldmVsLCBhZGRyZXNzKTsKIAljaGlsZF9lbnRy eV9wdHIgPSAmcGFyZW50X3RhYmxlX3B0cltjaGlsZF9lbnRyeV9pZHhdOwogCiAJaWYgKCEqY2hp bGRfZW50cnlfcHRyKSB7CiAJCXVpbnQ2NF90IHB0ZTsKKwkJdWludDMyX3Qgb2Zmc2V0OwogCiAJ CWNoaWxkX3RhYmxlID0gcGd0X2FsbG9jX3RhYmxlKHBndCwgbGV2ZWwgLSAxKTsKLQkJaWd0X2Fz c2VydCghKChjaGlsZF90YWJsZSArIHBndC0+Ym8tPm9mZnNldDY0KSAmCisJCWlndF9hc3NlcnQo ISgoY2hpbGRfdGFibGUgKyBwZ3QtPmJ1Zi0+YWRkci5vZmZzZXQpICYKIAkJCSAgICAgfnB0cl9t YXNrKHBndCwgbGV2ZWwpKSk7CiAKIAkJcHRlID0gY2hpbGRfdGFibGUgfCBmbGFnczsKLQkJKmNo aWxkX2VudHJ5X3B0ciA9IHBndC0+Ym8tPm9mZnNldDY0ICsgcHRlOworCQkqY2hpbGRfZW50cnlf cHRyID0gcGd0LT5idWYtPmFkZHIub2Zmc2V0ICsgcHRlOwogCiAJCWlndF9hc3NlcnQocHRlIDw9 IElOVDMyX01BWCk7Ci0JCWRybV9pbnRlbF9ib19lbWl0X3JlbG9jKHBndC0+Ym8sCi0JCQkJCXBh cmVudF90YWJsZSArCi0JCQkJCQljaGlsZF9lbnRyeV9pZHggKiBzaXplb2YodWludDY0X3QpLAot CQkJCQlwZ3QtPmJvLCBwdGUsIDAsIDApOworCisJCW9mZnNldCA9IHBhcmVudF90YWJsZSArIGNo aWxkX2VudHJ5X2lkeCAqIHNpemVvZih1aW50NjRfdCk7CisJCWludGVsX2JiX29mZnNldF9yZWxv Y190b19vYmplY3QocGd0LT5pYmIsCisJCQkJCQlwZ3QtPmJ1Zi0+aGFuZGxlLAorCQkJCQkJcGd0 LT5idWYtPmhhbmRsZSwKKwkJCQkJCTAsIDAsCisJCQkJCQlwdGUsIG9mZnNldCwKKwkJCQkJCXBn dC0+YnVmLT5hZGRyLm9mZnNldCk7CiAJfSBlbHNlIHsKIAkJY2hpbGRfdGFibGUgPSAoKmNoaWxk X2VudHJ5X3B0ciAmIHB0cl9tYXNrKHBndCwgbGV2ZWwpKSAtCi0JCQkgICAgICBwZ3QtPmJvLT5v ZmZzZXQ2NDsKKwkJCSAgICAgIHBndC0+YnVmLT5hZGRyLm9mZnNldDsKIAl9CiAKIAlyZXR1cm4g Y2hpbGRfdGFibGU7CkBAIC0yMDUsNyArMjEwLDcgQEAgcGd0X3NldF9sMV9lbnRyeShzdHJ1Y3Qg cGd0YWJsZSAqcGd0LCB1aW50NjRfdCBsMV90YWJsZSwKIAl1aW50NjRfdCAqbDFfdGFibGVfcHRy OwogCXVpbnQ2NF90ICpsMV9lbnRyeV9wdHI7CiAKLQlsMV90YWJsZV9wdHIgPSBwZ3QtPmJvLT52 aXJ0dWFsICsgbDFfdGFibGU7CisJbDFfdGFibGVfcHRyID0gcGd0LT5wdHIgKyBsMV90YWJsZTsK IAlsMV9lbnRyeV9wdHIgPSAmbDFfdGFibGVfcHRyW3BndF9lbnRyeV9pbmRleChwZ3QsIDAsIGFk ZHJlc3MpXTsKIAogCWlndF9hc3NlcnQoIShwdHIgJiB+cHRyX21hc2socGd0LCAwKSkpOwpAQCAt MjM0LDcgKzIzOSw3IEBAIHN0YXRpYyBpbnQgYnBwX3RvX2RlcHRoX3ZhbChpbnQgYnBwKQogCX0K IH0KIAotc3RhdGljIHVpbnQ2NF90IHBndF9nZXRfbDFfZmxhZ3MoY29uc3Qgc3RydWN0IGlndF9i dWYgKmJ1ZiwgaW50IHN1cmZhY2VfaWR4KQorc3RhdGljIHVpbnQ2NF90IHBndF9nZXRfbDFfZmxh Z3MoY29uc3Qgc3RydWN0IGludGVsX2J1ZiAqYnVmLCBpbnQgc3VyZmFjZV9pZHgpCiB7CiAJLyoK IAkgKiBUaGUgb2Zmc2V0IG9mIC50aWxlX21vZGUgaXNuJ3Qgc3BlY2lmZWQgYnkgYnNwZWMsIGl0 J3Mgd2hhdCBNZXNhCkBAIC0zMzcsMTUgKzM0MiwxNSBAQCBzdGF0aWMgdWludDY0X3QgcGd0X2dl dF9seF9mbGFncyh2b2lkKQogCiBzdGF0aWMgdm9pZAogcGd0X3BvcHVsYXRlX2VudHJpZXNfZm9y X2J1ZihzdHJ1Y3QgcGd0YWJsZSAqcGd0LAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVm ICpidWYsCi0JCQkgICAgICAgdWludDY0X3QgdG9wX3RhYmxlLAotCQkJICAgICAgIGludCBzdXJm YWNlX2lkeCkKKwkJCSAgICAgc3RydWN0IGludGVsX2J1ZiAqYnVmLAorCQkJICAgICB1aW50NjRf dCB0b3BfdGFibGUsCisJCQkgICAgIGludCBzdXJmYWNlX2lkeCkKIHsKLQl1aW50NjRfdCBzdXJm YWNlX2FkZHIgPSBidWYtPmJvLT5vZmZzZXQ2NCArCisJdWludDY0X3Qgc3VyZmFjZV9hZGRyID0g YnVmLT5hZGRyLm9mZnNldCArCiAJCQkJYnVmLT5zdXJmYWNlW3N1cmZhY2VfaWR4XS5vZmZzZXQ7 CiAJdWludDY0X3Qgc3VyZmFjZV9lbmQgPSBzdXJmYWNlX2FkZHIgKwogCQkJICAgICAgIGJ1Zi0+ c3VyZmFjZVtzdXJmYWNlX2lkeF0uc2l6ZTsKLQl1aW50NjRfdCBhdXhfYWRkciA9IGJ1Zi0+Ym8t Pm9mZnNldDY0ICsgYnVmLT5jY3Nbc3VyZmFjZV9pZHhdLm9mZnNldDsKKwl1aW50NjRfdCBhdXhf YWRkciA9IGJ1Zi0+YWRkci5vZmZzZXQgKyBidWYtPmNjc1tzdXJmYWNlX2lkeF0ub2Zmc2V0Owog CXVpbnQ2NF90IGwxX2ZsYWdzID0gcGd0X2dldF9sMV9mbGFncyhidWYsIHN1cmZhY2VfaWR4KTsK IAl1aW50NjRfdCBseF9mbGFncyA9IHBndF9nZXRfbHhfZmxhZ3MoKTsKIApAQCAtMzY3LDE5ICsz NzIsMjQgQEAgcGd0X3BvcHVsYXRlX2VudHJpZXNfZm9yX2J1ZihzdHJ1Y3QgcGd0YWJsZSAqcGd0 LAogCX0KIH0KIAorc3RhdGljIHZvaWQgcGd0X21hcChpbnQgaTkxNSwgc3RydWN0IHBndGFibGUg KnBndCkKK3sKKwlwZ3QtPnB0ciA9IGdlbV9tbWFwX19kZXZpY2VfY29oZXJlbnQoaTkxNSwgcGd0 LT5idWYtPmhhbmRsZSwgMCwKKwkJCQkJICAgICBwZ3QtPnNpemUsIFBST1RfUkVBRCB8IFBST1Rf V1JJVEUpOworfQorCitzdGF0aWMgdm9pZCBwZ3RfdW5tYXAoc3RydWN0IHBndGFibGUgKnBndCkK K3sKKwltdW5tYXAocGd0LT5wdHIsIHBndC0+c2l6ZSk7Cit9CisKIHN0YXRpYyB2b2lkIHBndF9w b3B1bGF0ZV9lbnRyaWVzKHN0cnVjdCBwZ3RhYmxlICpwZ3QsCi0JCQkJIGNvbnN0IHN0cnVjdCBp Z3RfYnVmICoqYnVmcywKLQkJCQkgaW50IGJ1Zl9jb3VudCwKLQkJCQkgZHJtX2ludGVsX2JvICpw Z3RfYm8pCisJCQkJIHN0cnVjdCBpbnRlbF9idWYgKipidWZzLAorCQkJCSBpbnQgYnVmX2NvdW50 KQogewogCXVpbnQ2NF90IHRvcF90YWJsZTsKIAlpbnQgaTsKIAotCXBndC0+Ym8gPSBwZ3RfYm87 Ci0KLQlpZ3RfYXNzZXJ0KHBndF9iby0+c2l6ZSA+PSBwZ3QtPnNpemUpOwotCW1lbXNldChwZ3Rf Ym8tPnZpcnR1YWwsIDAsIHBndC0+c2l6ZSk7Ci0KIAl0b3BfdGFibGUgPSBwZ3RfYWxsb2NfdGFi bGUocGd0LCBwZ3QtPmxldmVscyAtIDEpOwogCS8qIFRvcCBsZXZlbCB0YWJsZSBtdXN0IGJlIGF0 IG9mZnNldCAwLiAqLwogCWlndF9hc3NlcnQodG9wX3RhYmxlID09IDApOwpAQCAtMzk1LDcgKzQw NSw3IEBAIHN0YXRpYyB2b2lkIHBndF9wb3B1bGF0ZV9lbnRyaWVzKHN0cnVjdCBwZ3RhYmxlICpw Z3QsCiAKIHN0YXRpYyBzdHJ1Y3QgcGd0YWJsZSAqCiBwZ3RfY3JlYXRlKGNvbnN0IHN0cnVjdCBw Z3RhYmxlX2xldmVsX2Rlc2MgKmxldmVsX2Rlc2NzLCBpbnQgbGV2ZWxzLAotCSAgIGNvbnN0IHN0 cnVjdCBpZ3RfYnVmICoqYnVmcywgaW50IGJ1Zl9jb3VudCkKKwkgICBzdHJ1Y3QgaW50ZWxfYnVm ICoqYnVmcywgaW50IGJ1Zl9jb3VudCkKIHsKIAlzdHJ1Y3QgcGd0YWJsZSAqcGd0OwogCWludCBs ZXZlbDsKQEAgLTQyNywxMCArNDM3LDExIEBAIHN0YXRpYyB2b2lkIHBndF9kZXN0cm95KHN0cnVj dCBwZ3RhYmxlICpwZ3QpCiAJZnJlZShwZ3QpOwogfQogCi1kcm1faW50ZWxfYm8gKgotaW50ZWxf YXV4X3BndGFibGVfY3JlYXRlKGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1nciwKLQkJICAgICAgIGNv bnN0IHN0cnVjdCBpZ3RfYnVmICoqYnVmcywgaW50IGJ1Zl9jb3VudCkKK3N0cnVjdCBpbnRlbF9i dWYgKgoraW50ZWxfYXV4X3BndGFibGVfY3JlYXRlKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJ IHN0cnVjdCBpbnRlbF9idWYgKipidWZzLCBpbnQgYnVmX2NvdW50KQogeworCXN0cnVjdCBkcm1f aTkxNV9nZW1fZXhlY19vYmplY3QyICpvYmo7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBwZ3RhYmxl X2xldmVsX2Rlc2MgbGV2ZWxfZGVzY1tdID0gewogCQl7CiAJCQkuaWR4X3NoaWZ0ID0gMTYsCkBA IC00NTIsOTkgKzQ2Myw0MyBAQCBpbnRlbF9hdXhfcGd0YWJsZV9jcmVhdGUoZHJtX2ludGVsX2J1 Zm1nciAqYnVmbWdyLAogCQl9LAogCX07CiAJc3RydWN0IHBndGFibGUgKnBndDsKLQlkcm1faW50 ZWxfYm8gKnBndF9ibzsKLQotCXBndCA9IHBndF9jcmVhdGUobGV2ZWxfZGVzYywgQVJSQVlfU0la RShsZXZlbF9kZXNjKSwgYnVmcywgYnVmX2NvdW50KTsKKwlzdHJ1Y3QgYnVmX29wcyAqYm9wczsK KwlzdHJ1Y3QgaW50ZWxfYnVmICpidWY7CisJdWludDY0X3QgcHJldl9hbGlnbm1lbnQ7CiAKLQlw Z3RfYm8gPSBkcm1faW50ZWxfYm9fYWxsb2NfZm9yX3JlbmRlcihidWZtZ3IsICJhdXggcGd0IiwK LQkJCQkJICAgICAgIHBndC0+c2l6ZSwgcGd0LT5tYXhfYWxpZ24pOwotCWlndF9hc3NlcnQocGd0 X2JvKTsKLQotCWlndF9hc3NlcnQoZHJtX2ludGVsX2JvX21hcChwZ3RfYm8sIHRydWUpID09IDAp OwotCXBndF9wb3B1bGF0ZV9lbnRyaWVzKHBndCwgYnVmcywgYnVmX2NvdW50LCBwZ3RfYm8pOwot CWlndF9hc3NlcnQoZHJtX2ludGVsX2JvX3VubWFwKHBndF9ibykgPT0gMCk7CisJaWd0X2Fzc2Vy dChidWZfY291bnQpOworCWJvcHMgPSBidWZzWzBdLT5ib3BzOwogCisJcGd0ID0gcGd0X2NyZWF0 ZShsZXZlbF9kZXNjLCBBUlJBWV9TSVpFKGxldmVsX2Rlc2MpLCBidWZzLCBidWZfY291bnQpOwor CXBndC0+aWJiID0gaWJiOworCXBndC0+YnVmID0gaW50ZWxfYnVmX2NyZWF0ZShib3BzLCBwZ3Qt PnNpemUsIDEsIDgsIDAsIEk5MTVfVElMSU5HX05PTkUsCisJCQkJICAgIEk5MTVfQ09NUFJFU1NJ T05fTk9ORSk7CisKKwkvKiBXZSBuZWVkIHRvIHVzZSBwZ3QtPm1heF9hbGlnbiBmb3IgYXV4IHRh YmxlICovCisJcHJldl9hbGlnbm1lbnQgPSBpbnRlbF9iYl9zZXRfZGVmYXVsdF9vYmplY3RfYWxp Z25tZW50KGliYiwKKwkJCQkJCQkgICAgICAgcGd0LT5tYXhfYWxpZ24pOworCW9iaiA9IGludGVs X2JiX2FkZF9pbnRlbF9idWYoaWJiLCBwZ3QtPmJ1ZiwgZmFsc2UpOworCWludGVsX2JiX3NldF9k ZWZhdWx0X29iamVjdF9hbGlnbm1lbnQoaWJiLCBwcmV2X2FsaWdubWVudCk7CisJb2JqLT5hbGln bm1lbnQgPSBwZ3QtPm1heF9hbGlnbjsKKworCXBndF9tYXAoaWJiLT5pOTE1LCBwZ3QpOworCXBn dF9wb3B1bGF0ZV9lbnRyaWVzKHBndCwgYnVmcywgYnVmX2NvdW50KTsKKwlwZ3RfdW5tYXAocGd0 KTsKKworCWJ1ZiA9IHBndC0+YnVmOwogCXBndF9kZXN0cm95KHBndCk7CiAKLQlyZXR1cm4gcGd0 X2JvOwotfQotCi1zdGF0aWMgdm9pZAotYXV4X3BndGFibGVfZmluZF9tYXhfZnJlZV9yYW5nZShj b25zdCBzdHJ1Y3QgaWd0X2J1ZiAqKmJ1ZnMsIGludCBidWZfY291bnQsCi0JCQkJdWludDY0X3Qg KnJhbmdlX3N0YXJ0LCB1aW50NjRfdCAqcmFuZ2Vfc2l6ZSkKLXsKLQkvKgotCSAqIEtlZXAgdGhl IGZpcnN0IHBhZ2UgcmVzZXJ2ZWQsIHNvIHdlIGNhbiBkaWZmZXJlbnRpYXRlIHBpbm5lZAotCSAq IG9iamVjdHMgYmFzZWQgb24gYSBub24tTlVMTCBvZmZzZXQuCi0JICovCi0JdWludDY0X3Qgc3Rh cnQgPSAweDEwMDA7Ci0JLyogRm9yIG5vdyBhbGxvYyBvbmx5IGZyb20gdGhlIGZpcnN0IDRHQiBh ZGRyZXNzIHNwYWNlLiAqLwotCWNvbnN0IHVpbnQ2NF90IGVuZCA9IDFVTEwgPDwgMzI7Ci0JdWlu dDY0X3QgbWF4X3JhbmdlX3N0YXJ0ID0gMDsKLQl1aW50NjRfdCBtYXhfcmFuZ2Vfc2l6ZSA9IDA7 Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYnVmX2NvdW50OyBpKyspIHsKLQkJaWYgKGJ1 ZnNbaV0tPmJvLT5vZmZzZXQ2NCA+PSBlbmQpCi0JCQlicmVhazsKLQotCQlpZiAoYnVmc1tpXS0+ Ym8tPm9mZnNldDY0IC0gc3RhcnQgPiBtYXhfcmFuZ2Vfc2l6ZSkgewotCQkJbWF4X3JhbmdlX3N0 YXJ0ID0gc3RhcnQ7Ci0JCQltYXhfcmFuZ2Vfc2l6ZSA9IGJ1ZnNbaV0tPmJvLT5vZmZzZXQ2NCAt IHN0YXJ0OwotCQl9Ci0JCXN0YXJ0ID0gYnVmc1tpXS0+Ym8tPm9mZnNldDY0ICsgYnVmc1tpXS0+ Ym8tPnNpemU7Ci0JfQotCi0JaWYgKHN0YXJ0IDwgZW5kICYmIGVuZCAtIHN0YXJ0ID4gbWF4X3Jh bmdlX3NpemUpIHsKLQkJbWF4X3JhbmdlX3N0YXJ0ID0gc3RhcnQ7Ci0JCW1heF9yYW5nZV9zaXpl ID0gZW5kIC0gc3RhcnQ7Ci0JfQotCi0JKnJhbmdlX3N0YXJ0ID0gbWF4X3JhbmdlX3N0YXJ0Owot CSpyYW5nZV9zaXplID0gbWF4X3JhbmdlX3NpemU7Ci19Ci0KLXN0YXRpYyB1aW50NjRfdAotYXV4 X3BndGFibGVfZmluZF9mcmVlX3JhbmdlKGNvbnN0IHN0cnVjdCBpZ3RfYnVmICoqYnVmcywgaW50 IGJ1Zl9jb3VudCwKLQkJCSAgICB1aW50MzJfdCBzaXplKQotewotCXVpbnQ2NF90IHJhbmdlX3N0 YXJ0OwotCXVpbnQ2NF90IHJhbmdlX3NpemU7Ci0JLyogQSBjb21wcmVzc2VkIHN1cmZhY2UgbXVz dCBiZSA2NGtCIGFsaWduZWQuICovCi0JY29uc3QgdWludDMyX3QgYWxpZ24gPSAweDEwMDAwOwot CWludCBwYWQ7Ci0KLQlhdXhfcGd0YWJsZV9maW5kX21heF9mcmVlX3JhbmdlKGJ1ZnMsIGJ1Zl9j b3VudCwKLQkJCQkJJnJhbmdlX3N0YXJ0LCAmcmFuZ2Vfc2l6ZSk7Ci0KLQlwYWQgPSBBTElHTihy YW5nZV9zdGFydCwgYWxpZ24pIC0gcmFuZ2Vfc3RhcnQ7Ci0JcmFuZ2Vfc3RhcnQgKz0gcGFkOwot CXJhbmdlX3NpemUgLT0gcGFkOwotCWlndF9hc3NlcnQocmFuZ2Vfc2l6ZSA+PSBzaXplKTsKLQot CXJldHVybiByYW5nZV9zdGFydCArCi0JICAgICAgIEFMSUdOX0RPV04ocmFuZCgpICUgKChyYW5n ZV9zaXplIC0gc2l6ZSkgKyAxKSwgYWxpZ24pOworCXJldHVybiBidWY7CiB9CiAKIHN0YXRpYyB2 b2lkCi1hdXhfcGd0YWJsZV9yZXNlcnZlX3JhbmdlKGNvbnN0IHN0cnVjdCBpZ3RfYnVmICoqYnVm cywgaW50IGJ1Zl9jb3VudCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKm5ld19idWYpCith dXhfcGd0YWJsZV9yZXNlcnZlX2J1Zl9zbG90KHN0cnVjdCBpbnRlbF9idWYgKipidWZzLCBpbnQg YnVmX2NvdW50LAorCQkJICAgICBzdHJ1Y3QgaW50ZWxfYnVmICpuZXdfYnVmKQogewogCWludCBp OwogCi0JaWYgKGlndF9idWZfY29tcHJlc3NlZChuZXdfYnVmKSkgewotCQl1aW50NjRfdCBwaW5f b2Zmc2V0ID0gbmV3X2J1Zi0+Ym8tPm9mZnNldDY0OwotCi0JCWlmICghcGluX29mZnNldCkKLQkJ CXBpbl9vZmZzZXQgPSBhdXhfcGd0YWJsZV9maW5kX2ZyZWVfcmFuZ2UoYnVmcywKLQkJCQkJCQkJ IGJ1Zl9jb3VudCwKLQkJCQkJCQkJIG5ld19idWYtPmJvLT5zaXplKTsKLQkJZHJtX2ludGVsX2Jv X3NldF9zb2Z0cGluX29mZnNldChuZXdfYnVmLT5ibywgcGluX29mZnNldCk7Ci0JCWlndF9hc3Nl cnQobmV3X2J1Zi0+Ym8tPm9mZnNldDY0ID09IHBpbl9vZmZzZXQpOwotCX0KLQogCWZvciAoaSA9 IDA7IGkgPCBidWZfY291bnQ7IGkrKykKLQkJaWYgKGJ1ZnNbaV0tPmJvLT5vZmZzZXQ2NCA+IG5l d19idWYtPmJvLT5vZmZzZXQ2NCkKKwkJaWYgKGJ1ZnNbaV0tPmFkZHIub2Zmc2V0ID4gbmV3X2J1 Zi0+YWRkci5vZmZzZXQpCiAJCQlicmVhazsKIAogCW1lbW1vdmUoJmJ1ZnNbaSArIDFdLCAmYnVm c1tpXSwgc2l6ZW9mKGJ1ZnNbMF0pICogKGJ1Zl9jb3VudCAtIGkpKTsKQEAgLTU1NCwxMDcgKzUw OSwxMTUgQEAgYXV4X3BndGFibGVfcmVzZXJ2ZV9yYW5nZShjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAq KmJ1ZnMsIGludCBidWZfY291bnQsCiAKIHZvaWQKIGdlbjEyX2F1eF9wZ3RhYmxlX2luaXQoc3Ry dWN0IGF1eF9wZ3RhYmxlX2luZm8gKmluZm8sCi0JCSAgICAgICBkcm1faW50ZWxfYnVmbWdyICpi dWZtZ3IsCi0JCSAgICAgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqc3JjX2J1ZiwKLQkJICAgICAg IGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpkc3RfYnVmKQorCQkgICAgICAgc3RydWN0IGludGVsX2Ji ICppYmIsCisJCSAgICAgICBzdHJ1Y3QgaW50ZWxfYnVmICpzcmNfYnVmLAorCQkgICAgICAgc3Ry dWN0IGludGVsX2J1ZiAqZHN0X2J1ZikKIHsKLQljb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmc1sy XTsKLQljb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqcmVzZXJ2ZWRfYnVmc1syXTsKKwlzdHJ1Y3QgaW50 ZWxfYnVmICpidWZzWzJdOworCXN0cnVjdCBpbnRlbF9idWYgKnJlc2VydmVkX2J1ZnNbMl07CiAJ aW50IHJlc2VydmVkX2J1Zl9jb3VudDsKIAlpbnQgaTsKIAotCWlmICghaWd0X2J1Zl9jb21wcmVz c2VkKHNyY19idWYpICYmICFpZ3RfYnVmX2NvbXByZXNzZWQoZHN0X2J1ZikpCisJaWd0X2Fzc2Vy dF9mKGliYi0+ZW5mb3JjZV9yZWxvY3MgPT0gZmFsc2UsCisJCSAgICAgIldlIHN1cHBvcnQgYXV4 IHBndGFibGVzIGZvciBub24tZm9yY2VkIHJlbG9jcyB5ZXQhIik7CisKKwlpZiAoIWludGVsX2J1 Zl9jb21wcmVzc2VkKHNyY19idWYpICYmICFpbnRlbF9idWZfY29tcHJlc3NlZChkc3RfYnVmKSkK IAkJcmV0dXJuOwogCiAJYnVmc1swXSA9IHNyY19idWY7CiAJYnVmc1sxXSA9IGRzdF9idWY7CiAK IAkvKgotCSAqIElkZWFsbHkgd2UnZCBuZWVkIGFuIElHVC13aWRlIEdGWCBhZGRyZXNzIHNwYWNl IGFsbG9jYXRvciwgd2hpY2gKLQkgKiB3b3VsZCBjb25zaWRlciBhbGwgYWxsb2NhdGlvbnMgYW5k IHRodXMgYXZvaWQgZXZpY3Rpb25zLiBGb3Igbm93IHVzZQotCSAqIGEgc2ltcGxlciBzY2hlbWUg aGVyZSwgd2hpY2ggb25seSBjb25zaWRlcnMgdGhlIGJ1ZmZlcnMgaW52b2x2ZWQgaW4KLQkgKiB0 aGUgYmxpdCwgd2hpY2ggc2hvdWxkIGF0IGxlYXN0IG1pbmltaXplIHRoZSBjaGFuY2UgZm9yIGV2 aWN0aW9ucwotCSAqIGluIHRoZSBjYXNlIG9mIHN1YnNlcXVlbnQgYmxpdHM6Ci0JICogICAxLiBJ ZiB0aGV5IHdlcmUgYWxyZWFkeSBib3VuZCAoYm8tPm9mZnNldDY0ICE9IDApLCB1c2UgdGhpcwot CSAqICAgICAgYWRkcmVzcy4KLQkgKiAgIDIuIFBpY2sgYSByYW5nZSByYW5kb21seSBmcm9tIHRo ZSA0R0IgYWRkcmVzcyBzcGFjZSwgdGhhdCBpcyBub3QKLQkgKiAgICAgIGFscmVhZHkgb2NjdXBp ZWQgYnkgYSBib3VuZCBvYmplY3QsIG9yIGFuIG9iamVjdCB3ZSBwaW5uZWQuCisJICogU3VyZmFj ZSBpbmRleCBpbiBwZ3QgdGFibGUgZGVwZW5kIG9uIGl0cyBhZGRyZXNzIHNvOgorCSAqICAgMS4g aWYgaGFuZGxlIHdhcyBwcmV2aW91c2x5IGV4ZWN1dGVkIGluIGJhdGNoIHVzZSB0aGF0IGFkZHJl c3MKKwkgKiAgIDIuIGFkZCBvYmplY3QgdG8gYmF0Y2gsIHRoaXMgd2lsbCBnZW5lcmF0ZSByYW5k b20gYWRkcmVzcworCSAqCisJICogUmFuZG9taXppbmcgYWRkcmVzc2VzIGNhbiBsZWFkIHRvIG92 ZXJsYXBwaW5nLCBidXQgd2UgZG9uJ3QgaGF2ZQorCSAqIGdsb2JhbCBhZGRyZXNzIHNwYWNlIGdl bmVyYXRvciBpbiBJR1QuIEN1cnJlbnRseSBhc3N1bXB0aW9uIGlzCisJICogcmFuZG9taXppbmcg YWRkcmVzcyBpcyBzcHJlYWQgb3ZlciA0OC1iaXQgYWRkcmVzcyBzcGFjZSBlcXVhbGx5CisJICog c28gcmlzayB3aXRoIG92ZXJsYXBwaW5nIGlzIG1pbmltYWwuIE9mIGNvdXJzZSBpdCBpcyBncm93 aW5nCisJICogd2l0aCBudW1iZXIgb2Ygb2JqZWN0cyAoK2l0cyBzaXplcykgaW52b2x2ZWQgaW4g YmxpdC4KKwkgKiBUbyBhdm9pZCByZWxvY2F0aW9uIEVYRUNfT0JKRUNUX1BJTk5FRCBmbGFnIGlz IHNldCBmb3IgY29tcHJlc3NlZAorCSAqIHN1cmZhY2VzLgogCSAqLworCisJaW50ZWxfYmJfYWRk X2ludGVsX2J1ZihpYmIsIHNyY19idWYsIGZhbHNlKTsKKwlpZiAoaW50ZWxfYnVmX2NvbXByZXNz ZWQoc3JjX2J1ZikpCisJCWludGVsX2JiX29iamVjdF9zZXRfZmxhZyhpYmIsIHNyY19idWYtPmhh bmRsZSwgRVhFQ19PQkpFQ1RfUElOTkVEKTsKKworCWludGVsX2JiX2FkZF9pbnRlbF9idWYoaWJi LCBkc3RfYnVmLCB0cnVlKTsKKwlpZiAoaW50ZWxfYnVmX2NvbXByZXNzZWQoZHN0X2J1ZikpCisJ CWludGVsX2JiX29iamVjdF9zZXRfZmxhZyhpYmIsIGRzdF9idWYtPmhhbmRsZSwgRVhFQ19PQkpF Q1RfUElOTkVEKTsKKwogCXJlc2VydmVkX2J1Zl9jb3VudCA9IDA7CiAJLyogRmlyc3QgcmVzZXJ2 ZSBzcGFjZSBmb3IgYW55IGJ1ZnMgdGhhdCBhcmUgYm91bmQgYWxyZWFkeS4gKi8KLQlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShidWZzKTsgaSsrKQotCQlpZiAoYnVmc1tpXS0+Ym8tPm9mZnNl dDY0KQotCQkJYXV4X3BndGFibGVfcmVzZXJ2ZV9yYW5nZShyZXNlcnZlZF9idWZzLAotCQkJCQkJ ICByZXNlcnZlZF9idWZfY291bnQrKywKLQkJCQkJCSAgYnVmc1tpXSk7Ci0KLQkvKiBOZXh0LCBy ZXNlcnZlIHNwYWNlIGZvciB1bmJvdW5kIGJ1ZnMgd2l0aCBhbiBBVVggc3VyZmFjZS4gKi8KLQlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidWZzKTsgaSsrKQotCQlpZiAoIWJ1ZnNbaV0tPmJv LT5vZmZzZXQ2NCAmJiBpZ3RfYnVmX2NvbXByZXNzZWQoYnVmc1tpXSkpCi0JCQlhdXhfcGd0YWJs ZV9yZXNlcnZlX3JhbmdlKHJlc2VydmVkX2J1ZnMsCi0JCQkJCQkgIHJlc2VydmVkX2J1Zl9jb3Vu dCsrLAotCQkJCQkJICBidWZzW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidWZz KTsgaSsrKSB7CisJCWlndF9hc3NlcnQoYnVmc1tpXS0+YWRkci5vZmZzZXQgIT0gSU5URUxfQlVG X0lOVkFMSURfQUREUkVTUyk7CisJCWF1eF9wZ3RhYmxlX3Jlc2VydmVfYnVmX3Nsb3QocmVzZXJ2 ZWRfYnVmcywKKwkJCQkJICAgICByZXNlcnZlZF9idWZfY291bnQrKywKKwkJCQkJICAgICBidWZz W2ldKTsKKwl9CiAKIAkvKiBDcmVhdGUgQVVYIHBndGFibGUgZW50cmllcyBvbmx5IGZvciBidWZz IHdpdGggYW4gQVVYIHN1cmZhY2UgKi8KIAlpbmZvLT5idWZfY291bnQgPSAwOwogCWZvciAoaSA9 IDA7IGkgPCByZXNlcnZlZF9idWZfY291bnQ7IGkrKykgewotCQlpZiAoIWlndF9idWZfY29tcHJl c3NlZChyZXNlcnZlZF9idWZzW2ldKSkKKwkJaWYgKCFpbnRlbF9idWZfY29tcHJlc3NlZChyZXNl cnZlZF9idWZzW2ldKSkKIAkJCWNvbnRpbnVlOwogCiAJCWluZm8tPmJ1ZnNbaW5mby0+YnVmX2Nv dW50XSA9IHJlc2VydmVkX2J1ZnNbaV07CiAJCWluZm8tPmJ1Zl9waW5fb2Zmc2V0c1tpbmZvLT5i dWZfY291bnRdID0KLQkJCXJlc2VydmVkX2J1ZnNbaV0tPmJvLT5vZmZzZXQ2NDsKKwkJCXJlc2Vy dmVkX2J1ZnNbaV0tPmFkZHIub2Zmc2V0OworCiAJCWluZm8tPmJ1Zl9jb3VudCsrOwogCX0KIAot CWluZm8tPnBndGFibGVfYm8gPSBpbnRlbF9hdXhfcGd0YWJsZV9jcmVhdGUoYnVmbWdyLAotCQkJ CQkJICAgIGluZm8tPmJ1ZnMsCi0JCQkJCQkgICAgaW5mby0+YnVmX2NvdW50KTsKLQlpZ3RfYXNz ZXJ0KGluZm8tPnBndGFibGVfYm8pOworCWluZm8tPnBndGFibGVfYnVmID0gaW50ZWxfYXV4X3Bn dGFibGVfY3JlYXRlKGliYiwKKwkJCQkJCSAgICAgaW5mby0+YnVmcywKKwkJCQkJCSAgICAgaW5m by0+YnVmX2NvdW50KTsKKworCWlndF9hc3NlcnQoaW5mby0+cGd0YWJsZV9idWYpOwogfQogCiB2 b2lkCi1nZW4xMl9hdXhfcGd0YWJsZV9jbGVhbnVwKHN0cnVjdCBhdXhfcGd0YWJsZV9pbmZvICpp bmZvKQorZ2VuMTJfYXV4X3BndGFibGVfY2xlYW51cChzdHJ1Y3QgaW50ZWxfYmIgKmliYiwgc3Ry dWN0IGF1eF9wZ3RhYmxlX2luZm8gKmluZm8pCiB7CiAJaW50IGk7CiAKIAkvKiBDaGVjayB0aGF0 IHRoZSBwaW5uZWQgYnVmcyBrZXB0IHRoZWlyIG9mZnNldCBhZnRlciB0aGUgZXhlYy4gKi8KLQlm b3IgKGkgPSAwOyBpIDwgaW5mby0+YnVmX2NvdW50OyBpKyspCi0JCWlndF9hc3NlcnRfZXFfdTY0 KGluZm8tPmJ1ZnNbaV0tPmJvLT5vZmZzZXQ2NCwKLQkJCQkgIGluZm8tPmJ1Zl9waW5fb2Zmc2V0 c1tpXSk7CisJZm9yIChpID0gMDsgaSA8IGluZm8tPmJ1Zl9jb3VudDsgaSsrKSB7CisJCXVpbnQ2 NF90IGFkZHI7CisKKwkJYWRkciA9IGludGVsX2JiX2dldF9vYmplY3Rfb2Zmc2V0KGliYiwgaW5m by0+YnVmc1tpXS0+aGFuZGxlKTsKKwkJaWd0X2Fzc2VydF9lcV91NjQoYWRkciwgaW5mby0+YnVm X3Bpbl9vZmZzZXRzW2ldKTsKKwl9CiAKLQlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2UoaW5mby0+ cGd0YWJsZV9ibyk7CisJaWYgKGluZm8tPnBndGFibGVfYnVmKQorCQlpbnRlbF9idWZfZGVzdHJv eShpbmZvLT5wZ3RhYmxlX2J1Zik7CiB9CiAKIHVpbnQzMl90Ci1nZW4xMl9jcmVhdGVfYXV4X3Bn dGFibGVfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgICAgICBk cm1faW50ZWxfYm8gKmF1eF9wZ3RhYmxlX2JvKQorZ2VuMTJfY3JlYXRlX2F1eF9wZ3RhYmxlX3N0 YXRlKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJICAgICAgIHN0cnVjdCBpbnRlbF9idWYgKmF1 eF9wZ3RhYmxlX2J1ZikKIHsKIAl1aW50NjRfdCAqcGd0YWJsZV9wdHI7CiAJdWludDMyX3QgcGd0 YWJsZV9wdHJfb2Zmc2V0OwotCWludCByZXQ7CiAKLQlpZiAoIWF1eF9wZ3RhYmxlX2JvKQorCWlm ICghYXV4X3BndGFibGVfYnVmKQogCQlyZXR1cm4gMDsKIAotCXBndGFibGVfcHRyID0gaW50ZWxf YmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwKLQkJCQkJCSAgICAgIHNpemVvZigqcGd0 YWJsZV9wdHIpLAotCQkJCQkJICAgICAgc2l6ZW9mKCpwZ3RhYmxlX3B0cikpOwotCXBndGFibGVf cHRyX29mZnNldCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLAotCQkJ CQkJCSAgICAgIHBndGFibGVfcHRyKTsKKwlwZ3RhYmxlX3B0ciA9IGludGVsX2JiX3B0cihpYmIp OworCXBndGFibGVfcHRyX29mZnNldCA9IGludGVsX2JiX29mZnNldChpYmIpOwogCi0JKnBndGFi bGVfcHRyID0gYXV4X3BndGFibGVfYm8tPm9mZnNldDY0OwotCXJldCA9IGRybV9pbnRlbF9ib19l bWl0X3JlbG9jKGJhdGNoLT5ibywgcGd0YWJsZV9wdHJfb2Zmc2V0LAotCQkJCSAgICAgIGF1eF9w Z3RhYmxlX2JvLCAwLAotCQkJCSAgICAgIDAsIDApOwotCWFzc2VydChyZXQgPT0gMCk7CisJKnBn dGFibGVfcHRyID0gaW50ZWxfYmJfb2Zmc2V0X3JlbG9jKGliYiwgYXV4X3BndGFibGVfYnVmLT5o YW5kbGUsCisJCQkJCSAgICAgMCwgMCwKKwkJCQkJICAgICBwZ3RhYmxlX3B0cl9vZmZzZXQsIC0x KTsKKwlpbnRlbF9iYl9wdHJfYWRkKGliYiwgc2l6ZW9mKCpwZ3RhYmxlX3B0cikpOwogCiAJcmV0 dXJuIHBndGFibGVfcHRyX29mZnNldDsKIH0KIAogdm9pZAotZ2VuMTJfZW1pdF9hdXhfcGd0YWJs ZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBzdGF0ZSwK LQkJCSAgICAgYm9vbCByZW5kZXIpCitnZW4xMl9lbWl0X2F1eF9wZ3RhYmxlX3N0YXRlKHN0cnVj dCBpbnRlbF9iYiAqaWJiLCB1aW50MzJfdCBzdGF0ZSwgYm9vbCByZW5kZXIpCiB7CiAJdWludDMy X3QgdGFibGVfYmFzZV9yZWcgPSByZW5kZXIgPyBHRU4xMl9HRlhfQVVYX1RBQkxFX0JBU0VfQURE UiA6CiAJCQkJCSAgIEdFTjEyX1ZFQk9YX0FVWF9UQUJMRV9CQVNFX0FERFI7CkBAIC02NjIsMTEg KzYyNSwxMSBAQCBnZW4xMl9lbWl0X2F1eF9wZ3RhYmxlX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IHN0YXRlLAogCWlmICghc3RhdGUpCiAJCXJldHVybjsK IAotCU9VVF9CQVRDSChNSV9MT0FEX1JFR0lTVEVSX01FTV9HRU44IHwgTUlfTU1JT19SRU1BUF9F TkFCTEVfR0VOMTIpOwotCU9VVF9CQVRDSCh0YWJsZV9iYXNlX3JlZyk7Ci0JT1VUX1JFTE9DKGJh dGNoLT5ibywgMCwgMCwgc3RhdGUpOworCWludGVsX2JiX291dChpYmIsIE1JX0xPQURfUkVHSVNU RVJfTUVNX0dFTjggfCBNSV9NTUlPX1JFTUFQX0VOQUJMRV9HRU4xMik7CisJaW50ZWxfYmJfb3V0 KGliYiwgdGFibGVfYmFzZV9yZWcpOworCWludGVsX2JiX2VtaXRfcmVsb2MoaWJiLCBpYmItPmhh bmRsZSwgMCwgMCwgc3RhdGUsIGliYi0+YmF0Y2hfb2Zmc2V0KTsKIAotCU9VVF9CQVRDSChNSV9M T0FEX1JFR0lTVEVSX01FTV9HRU44IHwgTUlfTU1JT19SRU1BUF9FTkFCTEVfR0VOMTIpOwotCU9V VF9CQVRDSCh0YWJsZV9iYXNlX3JlZyArIDQpOwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIDAsIDAs IHN0YXRlICsgNCk7CisJaW50ZWxfYmJfb3V0KGliYiwgTUlfTE9BRF9SRUdJU1RFUl9NRU1fR0VO OCB8IE1JX01NSU9fUkVNQVBfRU5BQkxFX0dFTjEyKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCB0YWJs ZV9iYXNlX3JlZyArIDQpOworCWludGVsX2JiX2VtaXRfcmVsb2MoaWJiLCBpYmItPmhhbmRsZSwg MCwgMCwgc3RhdGUgKyA0LCBpYmItPmJhdGNoX29mZnNldCk7CiB9CmRpZmYgLS1naXQgYS9saWIv aW50ZWxfYXV4X3BndGFibGUuaCBiL2xpYi9pbnRlbF9hdXhfcGd0YWJsZS5oCmluZGV4IGFjODJi N2QyLi5lOTk3NmU1MiAxMDA2NDQKLS0tIGEvbGliL2ludGVsX2F1eF9wZ3RhYmxlLmgKKysrIGIv bGliL2ludGVsX2F1eF9wZ3RhYmxlLmgKQEAgLTEsMzYgKzEsMzMgQEAKICNpZm5kZWYgX19JTlRF TF9BVVhfUEdUQUJMRV9IX18KICNkZWZpbmUgX19JTlRFTF9BVVhfUEdUQUJMRV9IX18KIAotI2lu Y2x1ZGUgImludGVsX2J1Zm1nci5oIgotCi1zdHJ1Y3QgaWd0X2J1ZjsKLXN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlcjsKKyNpbmNsdWRlICJpbnRlbF9idWZvcHMuaCIKIAogc3RydWN0IGF1eF9wZ3Rh YmxlX2luZm8gewogCWludCBidWZfY291bnQ7Ci0JY29uc3Qgc3RydWN0IGlndF9idWYgKmJ1ZnNb Ml07CisJc3RydWN0IGludGVsX2J1ZiAqYnVmc1syXTsKIAl1aW50NjRfdCBidWZfcGluX29mZnNl dHNbMl07Ci0JZHJtX2ludGVsX2JvICpwZ3RhYmxlX2JvOworCXN0cnVjdCBpbnRlbF9idWYgKnBn dGFibGVfYnVmOwogfTsKIAotZHJtX2ludGVsX2JvICoKLWludGVsX2F1eF9wZ3RhYmxlX2NyZWF0 ZShkcm1faW50ZWxfYnVmbWdyICpidWZtZ3IsCi0JCQkgY29uc3Qgc3RydWN0IGlndF9idWYgKipi dWZzLCBpbnQgYnVmX2NvdW50KTsKK3N0cnVjdCBpbnRlbF9idWYgKgoraW50ZWxfYXV4X3BndGFi bGVfY3JlYXRlKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJIHN0cnVjdCBpbnRlbF9idWYgKipi dWZzLCBpbnQgYnVmX2NvdW50KTsKIAogdm9pZAogZ2VuMTJfYXV4X3BndGFibGVfaW5pdChzdHJ1 Y3QgYXV4X3BndGFibGVfaW5mbyAqaW5mbywKLQkJICAgICAgIGRybV9pbnRlbF9idWZtZ3IgKmJ1 Zm1nciwKLQkJICAgICAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmNfYnVmLAotCQkgICAgICAg Y29uc3Qgc3RydWN0IGlndF9idWYgKmRzdF9idWYpOworCQkgICAgICAgc3RydWN0IGludGVsX2Ji ICppYmIsCisJCSAgICAgICBzdHJ1Y3QgaW50ZWxfYnVmICpzcmNfYnVmLAorCQkgICAgICAgc3Ry dWN0IGludGVsX2J1ZiAqZHN0X2J1Zik7CiAKIHZvaWQKLWdlbjEyX2F1eF9wZ3RhYmxlX2NsZWFu dXAoc3RydWN0IGF1eF9wZ3RhYmxlX2luZm8gKmluZm8pOworZ2VuMTJfYXV4X3BndGFibGVfY2xl YW51cChzdHJ1Y3QgaW50ZWxfYmIgKmliYiwgc3RydWN0IGF1eF9wZ3RhYmxlX2luZm8gKmluZm8p OwogCiB1aW50MzJfdAotZ2VuMTJfY3JlYXRlX2F1eF9wZ3RhYmxlX3N0YXRlKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQkgICAgICAgZHJtX2ludGVsX2JvICphdXhfcGd0YWJs ZV9ibyk7CitnZW4xMl9jcmVhdGVfYXV4X3BndGFibGVfc3RhdGUoc3RydWN0IGludGVsX2JiICpi YXRjaCwKKwkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfYnVmICphdXhfcGd0YWJsZV9idWYpOwogdm9p ZAotZ2VuMTJfZW1pdF9hdXhfcGd0YWJsZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLCB1aW50MzJfdCBzdGF0ZSwKK2dlbjEyX2VtaXRfYXV4X3BndGFibGVfc3RhdGUoc3Ry dWN0IGludGVsX2JiICpiYXRjaCwgdWludDMyX3Qgc3RhdGUsCiAJCQkgICAgIGJvb2wgcmVuZGVy KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvaW50ZWxfYmF0Y2hidWZmZXIuaCBiL2xpYi9p bnRlbF9iYXRjaGJ1ZmZlci5oCmluZGV4IGNhYTg5ZGM2Li45YzE2ZTM5ZiAxMDA2NDQKLS0tIGEv bGliL2ludGVsX2JhdGNoYnVmZmVyLmgKKysrIGIvbGliL2ludGVsX2JhdGNoYnVmZmVyLmgKQEAg LTMxOCwxNCArMzE4LDE0IEBAIHZvaWQgaWd0X2JsaXR0ZXJfZmFzdF9jb3B5X19yYXcoaW50IGZk LAogCiAvKioKICAqIGlndF9yZW5kZXJfY29weWZ1bmNfdDoKLSAqIEBiYXRjaDogYmF0Y2hidWZm ZXIgb2JqZWN0Ci0gKiBAY29udGV4dDogbGliZHJtIGhhcmR3YXJlIGNvbnRleHQgdG8gdXNlCi0g KiBAc3JjOiBzb3VyY2UgaS1nLXQgYnVmZmVyIG9iamVjdAorICogQGliYjogYmF0Y2hidWZmZXIK KyAqIEBjdHg6IGNvbnRleHQgdG8gdXNlCisgKiBAc3JjOiBpbnRlbF9idWYgc291cmNlIG9iamVj dAogICogQHNyY194OiBzb3VyY2UgcGl4ZWwgeC1jb29yZGluYXRpb24KICAqIEBzcmNfeTogc291 cmNlIHBpeGVsIHktY29vcmRpbmF0aW9uCiAgKiBAd2lkdGg6IHdpZHRoIG9mIHRoZSBjb3BpZWQg cmVjdGFuZ2xlCiAgKiBAaGVpZ2h0OiBoZWlnaHQgb2YgdGhlIGNvcGllZCByZWN0YW5nbGUKLSAq IEBkc3Q6IGRlc3RpbmF0aW9uIGktZy10IGJ1ZmZlciBvYmplY3QKKyAqIEBkc3Q6IGludGVsX2J1 ZiBkZXN0aW5hdGlvbiBvYmplY3QKICAqIEBkc3RfeDogZGVzdGluYXRpb24gcGl4ZWwgeC1jb29y ZGluYXRpb24KICAqIEBkc3RfeTogZGVzdGluYXRpb24gcGl4ZWwgeS1jb29yZGluYXRpb24KICAq CkBAIC0zMzQsMjUgKzMzNCwzMCBAQCB2b2lkIGlndF9ibGl0dGVyX2Zhc3RfY29weV9fcmF3KGlu dCBmZCwKICAqIGlndF9nZXRfcmVuZGVyX2NvcHlmdW5jKCkuCiAgKgogICogQSByZW5kZXIgY29w eSBmdW5jdGlvbiB3aWxsIGVtaXQgYSBiYXRjaGJ1ZmZlciB0byB0aGUga2VybmVsIHdoaWNoIGV4 ZWN1dGVzCi0gKiB0aGUgc3BlY2lmaWVkIGJsaXQgY29weSBvcGVyYXRpb24gdXNpbmcgdGhlIHJl bmRlciBlbmdpbmUuIEBjb250ZXh0IGlzCi0gKiBvcHRpb25hbCBhbmQgY2FuIGJlIE5VTEwuCisg KiB0aGUgc3BlY2lmaWVkIGJsaXQgY29weSBvcGVyYXRpb24gdXNpbmcgdGhlIHJlbmRlciBlbmdp bmUuIEBjdHggaXMKKyAqIG9wdGlvbmFsIGFuZCBjYW4gYmUgMC4KICAqLwotdHlwZWRlZiB2b2lk ICgqaWd0X3JlbmRlcl9jb3B5ZnVuY190KShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo LAotCQkJCSAgICAgIGRybV9pbnRlbF9jb250ZXh0ICpjb250ZXh0LAotCQkJCSAgICAgIGNvbnN0 IHN0cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2lnbmVkIHNyY194LCB1bnNpZ25lZCBzcmNfeSwKLQkJ CQkgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LAotCQkJCSAgICAgIGNvbnN0 IHN0cnVjdCBpZ3RfYnVmICpkc3QsIHVuc2lnbmVkIGRzdF94LCB1bnNpZ25lZCBkc3RfeSk7Citz dHJ1Y3QgaW50ZWxfYmI7CitzdHJ1Y3QgaW50ZWxfYnVmOworCit0eXBlZGVmIHZvaWQgKCppZ3Rf cmVuZGVyX2NvcHlmdW5jX3QpKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJCSAgICAgIHVpbnQz Ml90IGN0eCwKKwkJCQkgICAgICBzdHJ1Y3QgaW50ZWxfYnVmICpzcmMsCisJCQkJICAgICAgdWlu dDMyX3Qgc3JjX3gsIHVpbnQzMl90IHNyY195LAorCQkJCSAgICAgIHVpbnQzMl90IHdpZHRoLCB1 aW50MzJfdCBoZWlnaHQsCisJCQkJICAgICAgc3RydWN0IGludGVsX2J1ZiAqZHN0LAorCQkJCSAg ICAgIHVpbnQzMl90IGRzdF94LCB1aW50MzJfdCBkc3RfeSk7CiAKIGlndF9yZW5kZXJfY29weWZ1 bmNfdCBpZ3RfZ2V0X3JlbmRlcl9jb3B5ZnVuYyhpbnQgZGV2aWQpOwogCiAKIC8qKgogICogaWd0 X3ZlYm94X2NvcHlmdW5jX3Q6Ci0gKiBAYmF0Y2g6IGJhdGNoYnVmZmVyIG9iamVjdAotICogQHNy Yzogc291cmNlIGktZy10IGJ1ZmZlciBvYmplY3QKKyAqIEBpYmI6IGJhdGNoYnVmZmVyCisgKiBA c3JjOiBpbnRlbF9idWYgc291cmNlIG9iamVjdAogICogQHdpZHRoOiB3aWR0aCBvZiB0aGUgY29w aWVkIHJlY3RhbmdsZQogICogQGhlaWdodDogaGVpZ2h0IG9mIHRoZSBjb3BpZWQgcmVjdGFuZ2xl Ci0gKiBAZHN0OiBkZXN0aW5hdGlvbiBpLWctdCBidWZmZXIgb2JqZWN0CisgKiBAZHN0OiBpbnRl bF9idWYgZGVzdGluYXRpb24gb2JqZWN0CiAgKgogICogVGhpcyBpcyB0aGUgdHlwZSBvZiB0aGUg cGVyLXBsYXRmb3JtIHZlYm94IGNvcHkgZnVuY3Rpb25zLiBUaGUKICAqIHBsYXRmb3JtLXNwZWNp ZmljIGltcGxlbWVudGF0aW9uIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nCkBAIC0zNjEsMTAg KzM2NiwxMCBAQCBpZ3RfcmVuZGVyX2NvcHlmdW5jX3QgaWd0X2dldF9yZW5kZXJfY29weWZ1bmMo aW50IGRldmlkKTsKICAqIEEgdmVib3ggY29weSBmdW5jdGlvbiB3aWxsIGVtaXQgYSBiYXRjaGJ1 ZmZlciB0byB0aGUga2VybmVsIHdoaWNoIGV4ZWN1dGVzCiAgKiB0aGUgc3BlY2lmaWVkIGJsaXQg Y29weSBvcGVyYXRpb24gdXNpbmcgdGhlIHZlYm94IGVuZ2luZS4KICAqLwotdHlwZWRlZiB2b2lk ICgqaWd0X3ZlYm94X2NvcHlmdW5jX3QpKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gs Ci0JCQkJICAgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqc3JjLAotCQkJCSAgICAgdW5zaWduZWQg d2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpk c3QpOwordHlwZWRlZiB2b2lkICgqaWd0X3ZlYm94X2NvcHlmdW5jX3QpKHN0cnVjdCBpbnRlbF9i YiAqaWJiLAorCQkJCSAgICAgc3RydWN0IGludGVsX2J1ZiAqc3JjLAorCQkJCSAgICAgdW5zaWdu ZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LAorCQkJCSAgICAgc3RydWN0IGludGVs X2J1ZiAqZHN0KTsKIAogaWd0X3ZlYm94X2NvcHlmdW5jX3QgaWd0X2dldF92ZWJveF9jb3B5ZnVu YyhpbnQgZGV2aWQpOwogCkBAIC0zODUsNyArMzkwLDYgQEAgaWd0X3ZlYm94X2NvcHlmdW5jX3Qg aWd0X2dldF92ZWJveF9jb3B5ZnVuYyhpbnQgZGV2aWQpOwogICogQSBmaWxsIGZ1bmN0aW9uIHdp bGwgZW1pdCBhIGJhdGNoYnVmZmVyIHRvIHRoZSBrZXJuZWwgd2hpY2ggZXhlY3V0ZXMKICAqIHRo ZSBzcGVjaWZpZWQgYmxpdCBmaWxsIG9wZXJhdGlvbiB1c2luZyB0aGUgbWVkaWEvZ3BncHUgZW5n aW5lLgogICovCi1zdHJ1Y3QgaW50ZWxfYnVmOwogdHlwZWRlZiB2b2lkICgqaWd0X2ZpbGxmdW5j X3QpKGludCBpOTE1LAogCQkJICAgICAgIHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwKIAkJCSAgICAg ICB1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LApkaWZmIC0tZ2l0IGEvbGliL3JlbmRlcmNvcHkuaCBi L2xpYi9yZW5kZXJjb3B5LmgKaW5kZXggZTA1NzdjYWMuLjhkZDg2N2JjIDEwMDY0NAotLS0gYS9s aWIvcmVuZGVyY29weS5oCisrKyBiL2xpYi9yZW5kZXJjb3B5LmgKQEAgLTEsNzAgKzEsNzAgQEAK ICNpbmNsdWRlICJpbnRlbF9iYXRjaGJ1ZmZlci5oIgogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBl bWl0X3ZlcnRleF8ycyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorc3RhdGljIGlu bGluZSB2b2lkIGVtaXRfdmVydGV4XzJzKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAogCQkJCSAgaW50 MTZfdCB4LCBpbnQxNl90IHkpCiB7Ci0JT1VUX0JBVENIKCh1aW50MTZfdCl5IDw8IDE2IHwgKHVp bnQxNl90KXgpOworCWludGVsX2JiX291dChpYmIsICgodWludDE2X3QpeSA8PCAxNiB8ICh1aW50 MTZfdCl4KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBlbWl0X3ZlcnRleChzdHJ1Y3QgaW50 ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorc3RhdGljIGlubGluZSB2b2lkIGVtaXRfdmVydGV4KHN0 cnVjdCBpbnRlbF9iYiAqaWJiLAogCQkJICAgICAgIGZsb2F0IGYpCiB7CiAJdW5pb24geyBmbG9h dCBmOyB1aW50MzJfdCB1aTsgfSB1OwogCXUuZiA9IGY7Ci0JT1VUX0JBVENIKHUudWkpOworCWlu dGVsX2JiX291dChpYmIsIHUudWkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZW1pdF92ZXJ0 ZXhfbm9ybWFsaXplZChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorc3RhdGljIGlu bGluZSB2b2lkIGVtaXRfdmVydGV4X25vcm1hbGl6ZWQoc3RydWN0IGludGVsX2JiICppYmIsCiAJ CQkJCSAgZmxvYXQgZiwgZmxvYXQgdG90YWwpCiB7CiAJdW5pb24geyBmbG9hdCBmOyB1aW50MzJf dCB1aTsgfSB1OwogCXUuZiA9IGYgLyB0b3RhbDsKLQlPVVRfQkFUQ0godS51aSk7CisJaW50ZWxf YmJfb3V0KGliYiwgdS51aSk7CiB9CiAKLXZvaWQgZ2VuMTJfcmVuZGVyX2NvcHlmdW5jKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQkgICBkcm1faW50ZWxfY29udGV4dCAqY29u dGV4dCwKLQkJCSAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2lnbmVkIHNyY194LCB1 bnNpZ25lZCBzcmNfeSwKLQkJCSAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsCi0J CQkgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0LCB1bnNpZ25lZCBkc3RfeCwgdW5zaWduZWQg ZHN0X3kpOwotdm9pZCBnZW4xMV9yZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCwKLQkJCSAgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQsCi0JCQkgIGNvbnN0 IHN0cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2lnbmVkIHNyY194LCB1bnNpZ25lZCBzcmNfeSwKLQkJ CSAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKLQkJCSAgY29uc3Qgc3RydWN0IGln dF9idWYgKmRzdCwgdW5zaWduZWQgZHN0X3gsIHVuc2lnbmVkIGRzdF95KTsKLXZvaWQgZ2VuOV9y ZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgZHJt X2ludGVsX2NvbnRleHQgKmNvbnRleHQsCi0JCQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMs IHVuc2lnbmVkIHNyY194LCB1bnNpZ25lZCBzcmNfeSwKLQkJCSAgdW5zaWduZWQgd2lkdGgsIHVu c2lnbmVkIGhlaWdodCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCwgdW5zaWduZWQg ZHN0X3gsIHVuc2lnbmVkIGRzdF95KTsKLXZvaWQgZ2VuOF9yZW5kZXJfY29weWZ1bmMoc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRl eHQsCi0JCQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2lnbmVkIHNyY194LCB1bnNp Z25lZCBzcmNfeSwKLQkJCSAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKLQkJCSAg Y29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCwgdW5zaWduZWQgZHN0X3gsIHVuc2lnbmVkIGRzdF95 KTsKLXZvaWQgZ2VuN19yZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCwKLQkJCSAgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQsCi0JCQkgIGNvbnN0IHN0cnVj dCBpZ3RfYnVmICpzcmMsIHVuc2lnbmVkIHNyY194LCB1bnNpZ25lZCBzcmNfeSwKLQkJCSAgdW5z aWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYg KmRzdCwgdW5zaWduZWQgZHN0X3gsIHVuc2lnbmVkIGRzdF95KTsKLXZvaWQgZ2VuNl9yZW5kZXJf Y29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgZHJtX2ludGVs X2NvbnRleHQgKmNvbnRleHQsCi0JCQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2ln bmVkIHNyY194LCB1bnNpZ25lZCBzcmNfeSwKLQkJCSAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVk IGhlaWdodCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCwgdW5zaWduZWQgZHN0X3gs IHVuc2lnbmVkIGRzdF95KTsKLXZvaWQgZ2VuNF9yZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQsCi0J CQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2lnbmVkIHNyY194LCB1bnNpZ25lZCBz cmNfeSwKLQkJCSAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKLQkJCSAgY29uc3Qg c3RydWN0IGlndF9idWYgKmRzdCwgdW5zaWduZWQgZHN0X3gsIHVuc2lnbmVkIGRzdF95KTsKLXZv aWQgZ2VuM19yZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwK LQkJCSAgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQsCi0JCQkgIGNvbnN0IHN0cnVjdCBpZ3Rf YnVmICpzcmMsIHVuc2lnbmVkIHNyY194LCB1bnNpZ25lZCBzcmNfeSwKLQkJCSAgdW5zaWduZWQg d2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCwg dW5zaWduZWQgZHN0X3gsIHVuc2lnbmVkIGRzdF95KTsKLXZvaWQgZ2VuMl9yZW5kZXJfY29weWZ1 bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgZHJtX2ludGVsX2NvbnRl eHQgKmNvbnRleHQsCi0JCQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2lnbmVkIHNy Y194LCB1bnNpZ25lZCBzcmNfeSwKLQkJCSAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdo dCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCwgdW5zaWduZWQgZHN0X3gsIHVuc2ln bmVkIGRzdF95KTsKK3ZvaWQgZ2VuMTJfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYiAq aWJiLAorCQkJICAgdWludDMyX3QgY3R4LAorCQkJICAgc3RydWN0IGludGVsX2J1ZiAqc3JjLCB1 aW50MzJfdCBzcmNfeCwgdWludDMyX3Qgc3JjX3ksCisJCQkgICB1aW50MzJfdCB3aWR0aCwgdWlu dDMyX3QgaGVpZ2h0LAorCQkJICAgc3RydWN0IGludGVsX2J1ZiAqZHN0LCB1aW50MzJfdCBkc3Rf eCwgdWludDMyX3QgZHN0X3kpOwordm9pZCBnZW4xMV9yZW5kZXJfY29weWZ1bmMoc3RydWN0IGlu dGVsX2JiICppYmIsCisJCQkgIHVpbnQzMl90IGN0eCwKKwkJCSAgc3RydWN0IGludGVsX2J1ZiAq c3JjLCB1aW50MzJfdCBzcmNfeCwgdWludDMyX3Qgc3JjX3ksCisJCQkgIHVpbnQzMl90IHdpZHRo LCB1aW50MzJfdCBoZWlnaHQsCisJCQkgIHN0cnVjdCBpbnRlbF9idWYgKmRzdCwgdWludDMyX3Qg ZHN0X3gsIHVpbnQzMl90IGRzdF95KTsKK3ZvaWQgZ2VuOV9yZW5kZXJfY29weWZ1bmMoc3RydWN0 IGludGVsX2JiICppYmIsCisJCQkgIHVpbnQzMl90IGN0eCwKKwkJCSAgc3RydWN0IGludGVsX2J1 ZiAqc3JjLCB1aW50MzJfdCBzcmNfeCwgdWludDMyX3Qgc3JjX3ksCisJCQkgIHVpbnQzMl90IHdp ZHRoLCB1aW50MzJfdCBoZWlnaHQsCisJCQkgIHN0cnVjdCBpbnRlbF9idWYgKmRzdCwgdWludDMy X3QgZHN0X3gsIHVpbnQzMl90IGRzdF95KTsKK3ZvaWQgZ2VuOF9yZW5kZXJfY29weWZ1bmMoc3Ry dWN0IGludGVsX2JiICppYmIsCisJCQkgIHVpbnQzMl90IGN0eCwKKwkJCSAgc3RydWN0IGludGVs X2J1ZiAqc3JjLCB1aW50MzJfdCBzcmNfeCwgdWludDMyX3Qgc3JjX3ksCisJCQkgIHVpbnQzMl90 IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsCisJCQkgIHN0cnVjdCBpbnRlbF9idWYgKmRzdCwgdWlu dDMyX3QgZHN0X3gsIHVpbnQzMl90IGRzdF95KTsKK3ZvaWQgZ2VuN19yZW5kZXJfY29weWZ1bmMo c3RydWN0IGludGVsX2JiICppYmIsCisJCQkgIHVpbnQzMl90IGN0eCwKKwkJCSAgc3RydWN0IGlu dGVsX2J1ZiAqc3JjLCB1aW50MzJfdCBzcmNfeCwgdWludDMyX3Qgc3JjX3ksCisJCQkgIHVpbnQz Ml90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsCisJCQkgIHN0cnVjdCBpbnRlbF9idWYgKmRzdCwg dWludDMyX3QgZHN0X3gsIHVpbnQzMl90IGRzdF95KTsKK3ZvaWQgZ2VuNl9yZW5kZXJfY29weWZ1 bmMoc3RydWN0IGludGVsX2JiICppYmIsCisJCQkgIHVpbnQzMl90IGN0eCwKKwkJCSAgc3RydWN0 IGludGVsX2J1ZiAqc3JjLCB1aW50MzJfdCBzcmNfeCwgdWludDMyX3Qgc3JjX3ksCisJCQkgIHVp bnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsCisJCQkgIHN0cnVjdCBpbnRlbF9idWYgKmRz dCwgdWludDMyX3QgZHN0X3gsIHVpbnQzMl90IGRzdF95KTsKK3ZvaWQgZ2VuNF9yZW5kZXJfY29w eWZ1bmMoc3RydWN0IGludGVsX2JiICppYmIsCisJCQkgIHVpbnQzMl90IGN0eCwKKwkJCSAgc3Ry dWN0IGludGVsX2J1ZiAqc3JjLCB1aW50MzJfdCBzcmNfeCwgdWludDMyX3Qgc3JjX3ksCisJCQkg IHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsCisJCQkgIHN0cnVjdCBpbnRlbF9idWYg KmRzdCwgdWludDMyX3QgZHN0X3gsIHVpbnQzMl90IGRzdF95KTsKK3ZvaWQgZ2VuM19yZW5kZXJf Y29weWZ1bmMoc3RydWN0IGludGVsX2JiICppYmIsCisJCQkgIHVpbnQzMl90IGN0eCwKKwkJCSAg c3RydWN0IGludGVsX2J1ZiAqc3JjLCB1aW50MzJfdCBzcmNfeCwgdWludDMyX3Qgc3JjX3ksCisJ CQkgIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsCisJCQkgIHN0cnVjdCBpbnRlbF9i dWYgKmRzdCwgdWludDMyX3QgZHN0X3gsIHVpbnQzMl90IGRzdF95KTsKK3ZvaWQgZ2VuMl9yZW5k ZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JiICppYmIsCisJCQkgIHVpbnQzMl90IGN0eCwKKwkJ CSAgc3RydWN0IGludGVsX2J1ZiAqc3JjLCB1aW50MzJfdCBzcmNfeCwgdWludDMyX3Qgc3JjX3ks CisJCQkgIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsCisJCQkgIHN0cnVjdCBpbnRl bF9idWYgKmRzdCwgdWludDMyX3QgZHN0X3gsIHVpbnQzMl90IGRzdF95KTsKZGlmZiAtLWdpdCBh L2xpYi9yZW5kZXJjb3B5X2dlbjQuYyBiL2xpYi9yZW5kZXJjb3B5X2dlbjQuYwppbmRleCA0MTNl MzM1Ny4uMjc5MDY3Y2UgMTAwNjQ0Ci0tLSBhL2xpYi9yZW5kZXJjb3B5X2dlbjQuYworKysgYi9s aWIvcmVuZGVyY29weV9nZW40LmMKQEAgLTIsNiArMiw3IEBACiAjaW5jbHVkZSAiaW50ZWxfY2hp cHNldC5oIgogI2luY2x1ZGUgImdlbjRfcmVuZGVyLmgiCiAjaW5jbHVkZSAic3VyZmFjZWZvcm1h dC5oIgorI2luY2x1ZGUgImludGVsX2J1Zm9wcy5oIgogCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAK QEAgLTgwLDE4ICs4MSwxMyBAQCBzdGF0aWMgY29uc3QgdWludDMyX3QgZ2VuNV9wc19rZXJuZWxf bm9tYXNrX2FmZmluZVtdWzRdID0gewogfTsKIAogc3RhdGljIHVpbnQzMl90Ci1iYXRjaF91c2Vk KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitiYXRjaF9yb3VuZF91cHRvKHN0cnVj dCBpbnRlbF9iYiAqaWJiLCB1aW50MzJfdCBkaXZpc29yKQogewotCXJldHVybiBiYXRjaC0+cHRy IC0gYmF0Y2gtPmJ1ZmZlcjsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1iYXRjaF9yb3VuZF91cHRv KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGRpdmlzb3IpCi17Ci0J dWludDMyX3Qgb2Zmc2V0ID0gYmF0Y2hfdXNlZChiYXRjaCk7CisJdWludDMyX3Qgb2Zmc2V0ID0g aW50ZWxfYmJfb2Zmc2V0KGliYik7CiAKIAlvZmZzZXQgPSAob2Zmc2V0ICsgZGl2aXNvciAtIDEp IC8gZGl2aXNvciAqIGRpdmlzb3I7Ci0JYmF0Y2gtPnB0ciA9IGJhdGNoLT5idWZmZXIgKyBvZmZz ZXQ7CisJaW50ZWxfYmJfcHRyX3NldChpYmIsIG9mZnNldCk7CisKIAlyZXR1cm4gb2Zmc2V0Owog fQogCkBAIC0xMjAsMzAgKzExNiwxNiBAQCBzdGF0aWMgaW50IGdlbjRfbWF4X3dtX3RocmVhZHMo dWludDMyX3QgZGV2aWQpCiAJcmV0dXJuIElTX0dFTjUoZGV2aWQpID8gNzIgOiBJU19HNFgoZGV2 aWQpID8gNTAgOiAzMjsKIH0KIAotc3RhdGljIHZvaWQKLWdlbjRfcmVuZGVyX2ZsdXNoKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCSAgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRl eHQsIHVpbnQzMl90IGJhdGNoX2VuZCkKLXsKLQlpZ3RfYXNzZXJ0X2VxKGRybV9pbnRlbF9ib19z dWJkYXRhKGJhdGNoLT5ibywKLQkJCQkJICAgMCwgNDA5NiwgYmF0Y2gtPmJ1ZmZlciksCi0JCSAg ICAgIDApOwotCWlndF9hc3NlcnRfZXEoZHJtX2ludGVsX2dlbV9ib19jb250ZXh0X2V4ZWMoYmF0 Y2gtPmJvLCBjb250ZXh0LAotCQkJCQkJICAgIGJhdGNoX2VuZCwgMCksCi0JCSAgICAgIDApOwot fQotCiBzdGF0aWMgdWludDMyX3QKLWdlbjRfYmluZF9idWYoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCwKLQkgICAgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAotCSAgICAgIGlu dCBpc19kc3QpCitnZW40X2JpbmRfYnVmKHN0cnVjdCBpbnRlbF9iYiAqaWJiLCBjb25zdCBzdHJ1 Y3QgaW50ZWxfYnVmICpidWYsIGludCBpc19kc3QpCiB7CiAJc3RydWN0IGdlbjRfc3VyZmFjZV9z dGF0ZSAqc3M7CiAJdWludDMyX3Qgd3JpdGVfZG9tYWluLCByZWFkX2RvbWFpbjsKLQlpbnQgcmV0 OworCXVpbnQ2NF90IGFkZHJlc3M7CiAKIAlpZ3RfYXNzZXJ0X2x0ZShidWYtPnN1cmZhY2VbMF0u c3RyaWRlLCAxMjgqMTAyNCk7Ci0JaWd0X2Fzc2VydF9sdGUoaWd0X2J1Zl93aWR0aChidWYpLCA4 MTkyKTsKLQlpZ3RfYXNzZXJ0X2x0ZShpZ3RfYnVmX2hlaWdodChidWYpLCA4MTkyKTsKKwlpZ3Rf YXNzZXJ0X2x0ZShpbnRlbF9idWZfd2lkdGgoYnVmKSwgODE5Mik7CisJaWd0X2Fzc2VydF9sdGUo aW50ZWxfYnVmX2hlaWdodChidWYpLCA4MTkyKTsKIAogCWlmIChpc19kc3QpIHsKIAkJd3JpdGVf ZG9tYWluID0gcmVhZF9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fUkVOREVSOwpAQCAtMTUyLDcg KzEzNCw3IEBAIGdlbjRfYmluZF9idWYoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwK IAkJcmVhZF9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fU0FNUExFUjsKIAl9CiAKLQlzcyA9IGlu dGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigqc3MpLCAzMik7CisJ c3MgPSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCAzMik7CiAKIAlzcy0+c3MwLnN1cmZhY2VfdHlw ZSA9IFNVUkZBQ0VfMkQ7CiAJc3dpdGNoIChidWYtPmJwcCkgewpAQCAtMTY1LDEwMiArMTQ3LDEw MiBAQCBnZW40X2JpbmRfYnVmKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAKIAlz cy0+c3MwLmRhdGFfcmV0dXJuX2Zvcm1hdCA9IFNVUkZBQ0VSRVRVUk5GT1JNQVRfRkxPQVQzMjsK IAlzcy0+c3MwLmNvbG9yX2JsZW5kID0gMTsKLQlzcy0+c3MxLmJhc2VfYWRkciA9IGJ1Zi0+Ym8t Pm9mZnNldDsKIAotCXJldCA9IGRybV9pbnRlbF9ib19lbWl0X3JlbG9jKGJhdGNoLT5ibywKLQkJ CQkgICAgICBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChiYXRjaCwgc3MpICsgNCwK LQkJCQkgICAgICBidWYtPmJvLCAwLAotCQkJCSAgICAgIHJlYWRfZG9tYWluLCB3cml0ZV9kb21h aW4pOwotCWFzc2VydChyZXQgPT0gMCk7CisJYWRkcmVzcyA9IGludGVsX2JiX29mZnNldF9yZWxv YyhpYmIsIGJ1Zi0+aGFuZGxlLAorCQkJCQlyZWFkX2RvbWFpbiwgd3JpdGVfZG9tYWluLAorCQkJ CQlpbnRlbF9iYl9vZmZzZXQoaWJiKSArIDQsCisJCQkJCWJ1Zi0+YWRkci5vZmZzZXQpOworCXNz LT5zczEuYmFzZV9hZGRyID0gKHVpbnQzMl90KSBhZGRyZXNzOwogCi0Jc3MtPnNzMi5oZWlnaHQg PSBpZ3RfYnVmX2hlaWdodChidWYpIC0gMTsKLQlzcy0+c3MyLndpZHRoICA9IGlndF9idWZfd2lk dGgoYnVmKSAtIDE7CisJc3MtPnNzMi5oZWlnaHQgPSBpbnRlbF9idWZfaGVpZ2h0KGJ1ZikgLSAx OworCXNzLT5zczIud2lkdGggID0gaW50ZWxfYnVmX3dpZHRoKGJ1ZikgLSAxOwogCXNzLT5zczMu cGl0Y2ggID0gYnVmLT5zdXJmYWNlWzBdLnN0cmlkZSAtIDE7CiAJc3MtPnNzMy50aWxlZF9zdXJm YWNlID0gYnVmLT50aWxpbmcgIT0gSTkxNV9USUxJTkdfTk9ORTsKIAlzcy0+c3MzLnRpbGVfd2Fs ayAgICAgPSBidWYtPnRpbGluZyA9PSBJOTE1X1RJTElOR19ZOwogCi0JcmV0dXJuIGludGVsX2Jh dGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCBzcyk7CisJcmV0dXJuIGludGVsX2JiX3B0 cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgc2l6ZW9mKCpzcykpOwogfQogCiBzdGF0aWMg dWludDMyX3QKLWdlbjRfYmluZF9zdXJmYWNlcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoLAotCQkgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqc3JjLAotCQkgICBjb25zdCBzdHJ1Y3Qg aWd0X2J1ZiAqZHN0KQorZ2VuNF9iaW5kX3N1cmZhY2VzKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAor CQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfYnVmICpzcmMsCisJCSAgIGNvbnN0IHN0cnVjdCBpbnRl bF9idWYgKmRzdCkKIHsKLQl1aW50MzJfdCAqYmluZGluZ190YWJsZTsKKwl1aW50MzJfdCAqYmlu ZGluZ190YWJsZSwgYmluZGluZ190YWJsZV9vZmZzZXQ7CiAKLQliaW5kaW5nX3RhYmxlID0gaW50 ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwgMzIsIDMyKTsKKwliaW5kaW5nX3Rh YmxlID0gaW50ZWxfYmJfcHRyX2FsaWduKGliYiwgMzIpOworCWJpbmRpbmdfdGFibGVfb2Zmc2V0 ID0gaW50ZWxfYmJfcHRyX2FkZF9yZXR1cm5fcHJldl9vZmZzZXQoaWJiLCAzMik7CiAKLQliaW5k aW5nX3RhYmxlWzBdID0gZ2VuNF9iaW5kX2J1ZihiYXRjaCwgZHN0LCAxKTsKLQliaW5kaW5nX3Rh YmxlWzFdID0gZ2VuNF9iaW5kX2J1ZihiYXRjaCwgc3JjLCAwKTsKKwliaW5kaW5nX3RhYmxlWzBd ID0gZ2VuNF9iaW5kX2J1ZihpYmIsIGRzdCwgMSk7CisJYmluZGluZ190YWJsZVsxXSA9IGdlbjRf YmluZF9idWYoaWJiLCBzcmMsIDApOwogCi0JcmV0dXJuIGludGVsX2JhdGNoYnVmZmVyX3N1YmRh dGFfb2Zmc2V0KGJhdGNoLCBiaW5kaW5nX3RhYmxlKTsKKwlyZXR1cm4gYmluZGluZ190YWJsZV9v ZmZzZXQ7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW40X2VtaXRfc2lwKHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gpCitnZW40X2VtaXRfc2lwKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewot CU9VVF9CQVRDSChHRU40X1NUQVRFX1NJUCB8ICgyIC0gMikpOwotCU9VVF9CQVRDSCgwKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCBHRU40X1NUQVRFX1NJUCB8ICgyIC0gMikpOworCWludGVsX2JiX291 dChpYmIsIDApOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuNF9lbWl0X3N0YXRlX2Jhc2VfYWRkcmVz cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuNF9lbWl0X3N0YXRlX2Jhc2Vf YWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlpZiAoSVNfR0VONShiYXRjaC0+ZGV2 aWQpKSB7Ci0JCU9VVF9CQVRDSChHRU40X1NUQVRFX0JBU0VfQUREUkVTUyB8ICg4IC0gMikpOwot CQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCAvKiBnZW5lcmFsICovCi0JCQkgIEk5MTVfR0VNX0RPTUFJ Tl9JTlNUUlVDVElPTiwgMCwKLQkJCSAgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0JCU9VVF9SRUxP QyhiYXRjaC0+Ym8sIC8qIHN1cmZhY2UgKi8KLQkJCSAgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNU SU9OLCAwLAotCQkJICBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQkJT1VUX0JBVENIKDApOyAvKiBt ZWRpYSAqLwotCQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCAvKiBpbnN0cnVjdGlvbiAqLwotCQkJICBJ OTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsCi0JCQkgIEJBU0VfQUREUkVTU19NT0RJRlkp OworCWlmIChJU19HRU41KGliYi0+ZGV2aWQpKSB7CisJCWludGVsX2JiX291dChpYmIsIEdFTjRf U1RBVEVfQkFTRV9BRERSRVNTIHwgKDggLSAyKSk7CisJCWludGVsX2JiX2VtaXRfcmVsb2MoaWJi LCBpYmItPmhhbmRsZSwgLyogZ2VuZXJhbCAqLworCQkJCSAgICBJOTE1X0dFTV9ET01BSU5fSU5T VFJVQ1RJT04sIDAsCisJCQkJICAgIEJBU0VfQUREUkVTU19NT0RJRlksIGliYi0+YmF0Y2hfb2Zm c2V0KTsKKwkJaW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIGliYi0+aGFuZGxlLCAvKiBzdXJmYWNl ICovCisJCQkJICAgIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwKKwkJCQkgICAgQkFT RV9BRERSRVNTX01PRElGWSwgaWJiLT5iYXRjaF9vZmZzZXQpOworCQlpbnRlbF9iYl9vdXQoaWJi LCAwKTsgLyogbWVkaWEgKi8KKwkJaW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIGliYi0+aGFuZGxl LCAvKiBpbnN0cnVjdGlvbiAqLworCQkJCSAgICBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04s IDAsCisJCQkJICAgIEJBU0VfQUREUkVTU19NT0RJRlksIGliYi0+YmF0Y2hfb2Zmc2V0KTsKIAog CQkvKiB1cHBlciBib3VuZHMsIGRpc2FibGUgKi8KLQkJT1VUX0JBVENIKEJBU0VfQUREUkVTU19N T0RJRlkpOyAvKiBnZW5lcmFsICovCi0JCU9VVF9CQVRDSCgwKTsgLyogbWVkaWEgKi8KLQkJT1VU X0JBVENIKEJBU0VfQUREUkVTU19NT0RJRlkpOyAvKiBpbnN0cnVjdGlvbiAqLworCQlpbnRlbF9i Yl9vdXQoaWJiLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsgLyogZ2VuZXJhbCAqLworCQlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsgLyogbWVkaWEgKi8KKwkJaW50ZWxfYmJfb3V0KGliYiwgQkFTRV9BRERS RVNTX01PRElGWSk7IC8qIGluc3RydWN0aW9uICovCiAJfSBlbHNlIHsKLQkJT1VUX0JBVENIKEdF TjRfU1RBVEVfQkFTRV9BRERSRVNTIHwgKDYgLSAyKSk7Ci0JCU9VVF9SRUxPQyhiYXRjaC0+Ym8s IC8qIGdlbmVyYWwgKi8KLQkJCSAgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAwLAotCQkJ ICBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQkJT1VUX1JFTE9DKGJhdGNoLT5ibywgLyogc3VyZmFj ZSAqLwotCQkJICBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsCi0JCQkgIEJBU0VfQURE UkVTU19NT0RJRlkpOwotCQlPVVRfQkFUQ0goMCk7IC8qIG1lZGlhICovCisJCWludGVsX2JiX291 dChpYmIsIEdFTjRfU1RBVEVfQkFTRV9BRERSRVNTIHwgKDYgLSAyKSk7CisJCWludGVsX2JiX2Vt aXRfcmVsb2MoaWJiLCBpYmItPmhhbmRsZSwgLyogZ2VuZXJhbCAqLworCQkJCSAgICBJOTE1X0dF TV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsCisJCQkJICAgIEJBU0VfQUREUkVTU19NT0RJRlksIGli Yi0+YmF0Y2hfb2Zmc2V0KTsKKwkJaW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIGliYi0+aGFuZGxl LCAvKiBzdXJmYWNlICovCisJCQkJICAgIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwK KwkJCQkgICAgQkFTRV9BRERSRVNTX01PRElGWSwgaWJiLT5iYXRjaF9vZmZzZXQpOworCQlpbnRl bF9iYl9vdXQoaWJiLCAwKTsgLyogbWVkaWEgKi8KIAogCQkvKiB1cHBlciBib3VuZHMsIGRpc2Fi bGUgKi8KLQkJT1VUX0JBVENIKEJBU0VfQUREUkVTU19NT0RJRlkpOyAvKiBnZW5lcmFsICovCi0J CU9VVF9CQVRDSCgwKTsgLyogbWVkaWEgKi8KKwkJaW50ZWxfYmJfb3V0KGliYiwgQkFTRV9BRERS RVNTX01PRElGWSk7IC8qIGdlbmVyYWwgKi8KKwkJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qIG1l ZGlhICovCiAJfQogfQogCiBzdGF0aWMgdm9pZAotZ2VuNF9lbWl0X3BpcGVsaW5lZF9wb2ludGVy cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorZ2VuNF9lbWl0X3BpcGVsaW5lZF9w b2ludGVycyhzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKIAkJCSAgICAgdWludDMyX3QgdnMsIHVpbnQz Ml90IHNmLAogCQkJICAgICB1aW50MzJfdCB3bSwgdWludDMyX3QgY2MpCiB7Ci0JT1VUX0JBVENI KEdFTjRfM0RTVEFURV9QSVBFTElORURfUE9JTlRFUlMgfCAoNyAtIDIpKTsKLQlPVVRfQkFUQ0go dnMpOwotCU9VVF9CQVRDSChHRU40X0dTX0RJU0FCTEUpOwotCU9VVF9CQVRDSChHRU40X0NMSVBf RElTQUJMRSk7Ci0JT1VUX0JBVENIKHNmKTsKLQlPVVRfQkFUQ0god20pOwotCU9VVF9CQVRDSChj Yyk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF8zRFNUQVRFX1BJUEVMSU5FRF9QT0lOVEVSUyB8 ICg3IC0gMikpOworCWludGVsX2JiX291dChpYmIsIHZzKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBH RU40X0dTX0RJU0FCTEUpOworCWludGVsX2JiX291dChpYmIsIEdFTjRfQ0xJUF9ESVNBQkxFKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCBzZik7CisJaW50ZWxfYmJfb3V0KGliYiwgd20pOworCWludGVs X2JiX291dChpYmIsIGNjKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjRfZW1pdF91cmIoc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjRfZW1pdF91cmIoc3RydWN0IGludGVsX2Ji ICppYmIpCiB7Ci0JaW50IHZzX2VudHJpZXMgPSBnZW40X21heF92c19ucl91cmJfZW50cmllcyhi YXRjaC0+ZGV2aWQpOworCWludCB2c19lbnRyaWVzID0gZ2VuNF9tYXhfdnNfbnJfdXJiX2VudHJp ZXMoaWJiLT5kZXZpZCk7CiAJaW50IGdzX2VudHJpZXMgPSAwOwogCWludCBjbF9lbnRyaWVzID0g MDsKLQlpbnQgc2ZfZW50cmllcyA9IGdlbjRfbWF4X3NmX25yX3VyYl9lbnRyaWVzKGJhdGNoLT5k ZXZpZCk7CisJaW50IHNmX2VudHJpZXMgPSBnZW40X21heF9zZl9ucl91cmJfZW50cmllcyhpYmIt PmRldmlkKTsKIAlpbnQgY3NfZW50cmllcyA9IDA7CiAKIAlpbnQgdXJiX3ZzX2VuZCA9ICAgICAg ICAgICAgICB2c19lbnRyaWVzICogVVJCX1ZTX0VOVFJZX1NJWkU7CkBAIC0yNjksOTEgKzI1MSw5 MSBAQCBnZW40X2VtaXRfdXJiKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCiAJaW50 IHVyYl9zZl9lbmQgPSB1cmJfY2xfZW5kICsgc2ZfZW50cmllcyAqIFVSQl9TRl9FTlRSWV9TSVpF OwogCWludCB1cmJfY3NfZW5kID0gdXJiX3NmX2VuZCArIGNzX2VudHJpZXMgKiBVUkJfQ1NfRU5U UllfU0laRTsKIAotCWFzc2VydCh1cmJfY3NfZW5kIDw9IGdlbjRfdXJiX3NpemUoYmF0Y2gtPmRl dmlkKSk7Ci0KLQlpbnRlbF9iYXRjaGJ1ZmZlcl9hbGlnbihiYXRjaCwgMTYpOwotCi0JT1VUX0JB VENIKEdFTjRfVVJCX0ZFTkNFIHwKLQkJICBVRjBfQ1NfUkVBTExPQyB8Ci0JCSAgVUYwX1NGX1JF QUxMT0MgfAotCQkgIFVGMF9DTElQX1JFQUxMT0MgfAotCQkgIFVGMF9HU19SRUFMTE9DIHwKLQkJ ICBVRjBfVlNfUkVBTExPQyB8Ci0JCSAgKDMgLSAyKSk7Ci0JT1VUX0JBVENIKHVyYl9jbF9lbmQg PDwgVUYxX0NMSVBfRkVOQ0VfU0hJRlQgfAotCQkgIHVyYl9nc19lbmQgPDwgVUYxX0dTX0ZFTkNF X1NISUZUIHwKLQkJICB1cmJfdnNfZW5kIDw8IFVGMV9WU19GRU5DRV9TSElGVCk7Ci0JT1VUX0JB VENIKHVyYl9jc19lbmQgPDwgVUYyX0NTX0ZFTkNFX1NISUZUIHwKLQkJICB1cmJfc2ZfZW5kIDw8 IFVGMl9TRl9GRU5DRV9TSElGVCk7Ci0KLQlPVVRfQkFUQ0goR0VONF9DU19VUkJfU1RBVEUgfCAo MiAtIDIpKTsKLQlPVVRfQkFUQ0goKFVSQl9DU19FTlRSWV9TSVpFIC0gMSkgPDwgNCB8IGNzX2Vu dHJpZXMgPDwgMCk7CisJYXNzZXJ0KHVyYl9jc19lbmQgPD0gZ2VuNF91cmJfc2l6ZShpYmItPmRl dmlkKSk7CisKKwlpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCAxNik7CisKKwlpbnRlbF9iYl9vdXQo aWJiLCBHRU40X1VSQl9GRU5DRSB8CisJCSAgICAgVUYwX0NTX1JFQUxMT0MgfAorCQkgICAgIFVG MF9TRl9SRUFMTE9DIHwKKwkJICAgICBVRjBfQ0xJUF9SRUFMTE9DIHwKKwkJICAgICBVRjBfR1Nf UkVBTExPQyB8CisJCSAgICAgVUYwX1ZTX1JFQUxMT0MgfAorCQkgICAgICgzIC0gMikpOworCWlu dGVsX2JiX291dChpYmIsIHVyYl9jbF9lbmQgPDwgVUYxX0NMSVBfRkVOQ0VfU0hJRlQgfAorCQkg ICAgIHVyYl9nc19lbmQgPDwgVUYxX0dTX0ZFTkNFX1NISUZUIHwKKwkJICAgICB1cmJfdnNfZW5k IDw8IFVGMV9WU19GRU5DRV9TSElGVCk7CisJaW50ZWxfYmJfb3V0KGliYiwgdXJiX2NzX2VuZCA8 PCBVRjJfQ1NfRkVOQ0VfU0hJRlQgfAorCQkgICAgIHVyYl9zZl9lbmQgPDwgVUYyX1NGX0ZFTkNF X1NISUZUKTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjRfQ1NfVVJCX1NUQVRFIHwgKDIgLSAy KSk7CisJaW50ZWxfYmJfb3V0KGliYiwgKFVSQl9DU19FTlRSWV9TSVpFIC0gMSkgPDwgNCB8IGNz X2VudHJpZXMgPDwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW40X2VtaXRfbnVsbF9kZXB0aF9i dWZmZXIoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjRfZW1pdF9udWxsX2Rl cHRoX2J1ZmZlcihzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlpZiAoSVNfRzRYKGJhdGNoLT5k ZXZpZCkgfHwgSVNfR0VONShiYXRjaC0+ZGV2aWQpKSB7Ci0JCU9VVF9CQVRDSChHRU40XzNEU1RB VEVfREVQVEhfQlVGRkVSIHwgKDYgLSAyKSk7Ci0JCU9VVF9CQVRDSChTVVJGQUNFX05VTEwgPDwg R0VONF8zRFNUQVRFX0RFUFRIX0JVRkZFUl9UWVBFX1NISUZUIHwKLQkJCSAgR0VONF9ERVBUSEZP Uk1BVF9EMzJfRkxPQVQgPDwgR0VONF8zRFNUQVRFX0RFUFRIX0JVRkZFUl9GT1JNQVRfU0hJRlQp OwotCQlPVVRfQkFUQ0goMCk7Ci0JCU9VVF9CQVRDSCgwKTsKLQkJT1VUX0JBVENIKDApOwotCQlP VVRfQkFUQ0goMCk7CisJaWYgKElTX0c0WChpYmItPmRldmlkKSB8fCBJU19HRU41KGliYi0+ZGV2 aWQpKSB7CisJCWludGVsX2JiX291dChpYmIsIEdFTjRfM0RTVEFURV9ERVBUSF9CVUZGRVIgfCAo NiAtIDIpKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgU1VSRkFDRV9OVUxMIDw8IEdFTjRfM0RTVEFU RV9ERVBUSF9CVUZGRVJfVFlQRV9TSElGVCB8CisJCQkgICAgIEdFTjRfREVQVEhGT1JNQVRfRDMy X0ZMT0FUIDw8IEdFTjRfM0RTVEFURV9ERVBUSF9CVUZGRVJfRk9STUFUX1NISUZUKTsKKwkJaW50 ZWxfYmJfb3V0KGliYiwgMCk7CisJCWludGVsX2JiX291dChpYmIsIDApOworCQlpbnRlbF9iYl9v dXQoaWJiLCAwKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiAJfSBlbHNlIHsKLQkJT1VUX0JB VENIKEdFTjRfM0RTVEFURV9ERVBUSF9CVUZGRVIgfCAoNSAtIDIpKTsKLQkJT1VUX0JBVENIKFNV UkZBQ0VfTlVMTCA8PCBHRU40XzNEU1RBVEVfREVQVEhfQlVGRkVSX1RZUEVfU0hJRlQgfAotCQkJ ICBHRU40X0RFUFRIRk9STUFUX0QzMl9GTE9BVCA8PCBHRU40XzNEU1RBVEVfREVQVEhfQlVGRkVS X0ZPUk1BVF9TSElGVCk7Ci0JCU9VVF9CQVRDSCgwKTsKLQkJT1VUX0JBVENIKDApOwotCQlPVVRf QkFUQ0goMCk7CisJCWludGVsX2JiX291dChpYmIsIEdFTjRfM0RTVEFURV9ERVBUSF9CVUZGRVIg fCAoNSAtIDIpKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgU1VSRkFDRV9OVUxMIDw8IEdFTjRfM0RT VEFURV9ERVBUSF9CVUZGRVJfVFlQRV9TSElGVCB8CisJCQkgICAgIEdFTjRfREVQVEhGT1JNQVRf RDMyX0ZMT0FUIDw8IEdFTjRfM0RTVEFURV9ERVBUSF9CVUZGRVJfRk9STUFUX1NISUZUKTsKKwkJ aW50ZWxfYmJfb3V0KGliYiwgMCk7CisJCWludGVsX2JiX291dChpYmIsIDApOworCQlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKIAl9CiAKLQlpZiAoSVNfR0VONShiYXRjaC0+ZGV2aWQpKSB7Ci0JCU9V VF9CQVRDSChHRU40XzNEU1RBVEVfQ0xFQVJfUEFSQU1TIHwgKDIgLSAyKSk7Ci0JCU9VVF9CQVRD SCgwKTsKKwlpZiAoSVNfR0VONShpYmItPmRldmlkKSkgeworCQlpbnRlbF9iYl9vdXQoaWJiLCBH RU40XzNEU1RBVEVfQ0xFQVJfUEFSQU1TIHwgKDIgLSAyKSk7CisJCWludGVsX2JiX291dChpYmIs IDApOwogCX0KIH0KIAogc3RhdGljIHZvaWQKLWdlbjRfZW1pdF9pbnZhcmlhbnQoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjRfZW1pdF9pbnZhcmlhbnQoc3RydWN0IGludGVs X2JiICppYmIpCiB7Ci0JT1VUX0JBVENIKE1JX0ZMVVNIIHwgTUlfSU5ISUJJVF9SRU5ERVJfQ0FD SEVfRkxVU0gpOworCWludGVsX2JiX291dChpYmIsIE1JX0ZMVVNIIHwgTUlfSU5ISUJJVF9SRU5E RVJfQ0FDSEVfRkxVU0gpOwogCi0JaWYgKElTX0dFTjUoYmF0Y2gtPmRldmlkKSB8fCBJU19HNFgo YmF0Y2gtPmRldmlkKSkKLQkJT1VUX0JBVENIKEc0WF9QSVBFTElORV9TRUxFQ1QgfCBQSVBFTElO RV9TRUxFQ1RfM0QpOworCWlmIChJU19HRU41KGliYi0+ZGV2aWQpIHx8IElTX0c0WChpYmItPmRl dmlkKSkKKwkJaW50ZWxfYmJfb3V0KGliYiwgRzRYX1BJUEVMSU5FX1NFTEVDVCB8IFBJUEVMSU5F X1NFTEVDVF8zRCk7CiAJZWxzZQotCQlPVVRfQkFUQ0goR0VONF9QSVBFTElORV9TRUxFQ1QgfCBQ SVBFTElORV9TRUxFQ1RfM0QpOworCQlpbnRlbF9iYl9vdXQoaWJiLCBHRU40X1BJUEVMSU5FX1NF TEVDVCB8IFBJUEVMSU5FX1NFTEVDVF8zRCk7CiB9CiAKIHN0YXRpYyB1aW50MzJfdAotZ2VuNF9j cmVhdGVfdnNfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjRfY3Jl YXRlX3ZzX3N0YXRlKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewogCXN0cnVjdCBnZW40X3ZzX3N0 YXRlICp2czsKIAlpbnQgbnJfdXJiX2VudHJpZXM7CiAKLQl2cyA9IGludGVsX2JhdGNoYnVmZmVy X3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigqdnMpLCAzMik7CisJdnMgPSBpbnRlbF9iYl9w dHJfYWxpZ24oaWJiLCAzMik7CiAKIAkvKiBTZXQgdXAgdGhlIHZlcnRleCBzaGFkZXIgdG8gYmUg ZGlzYWJsZWQgKHBhc3N0aHJvdWdoKSAqLwotCW5yX3VyYl9lbnRyaWVzID0gZ2VuNF9tYXhfdnNf bnJfdXJiX2VudHJpZXMoYmF0Y2gtPmRldmlkKTsKLQlpZiAoSVNfR0VONShiYXRjaC0+ZGV2aWQp KQorCW5yX3VyYl9lbnRyaWVzID0gZ2VuNF9tYXhfdnNfbnJfdXJiX2VudHJpZXMoaWJiLT5kZXZp ZCk7CisJaWYgKElTX0dFTjUoaWJiLT5kZXZpZCkpCiAJCW5yX3VyYl9lbnRyaWVzID4+PSAyOwog CXZzLT52czQubnJfdXJiX2VudHJpZXMgPSBucl91cmJfZW50cmllczsKIAl2cy0+dnM0LnVyYl9l bnRyeV9hbGxvY2F0aW9uX3NpemUgPSBVUkJfVlNfRU5UUllfU0laRSAtIDE7CiAJdnMtPnZzNi52 c19lbmFibGUgPSAwOwogCXZzLT52czYudmVydF9jYWNoZV9kaXNhYmxlID0gMTsKIAotCXJldHVy biBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChiYXRjaCwgdnMpOworCXJldHVybiBp bnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNldChpYmIsIHNpemVvZigqdnMpKTsKIH0K IAogc3RhdGljIHVpbnQzMl90Ci1nZW40X2NyZWF0ZV9zZl9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoLAorZ2VuNF9jcmVhdGVfc2Zfc3RhdGUoc3RydWN0IGludGVsX2JiICpp YmIsCiAJCSAgICAgdWludDMyX3Qga2VybmVsKQogewogCXN0cnVjdCBnZW40X3NmX3N0YXRlICpz ZjsKIAotCXNmID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwgc2l6ZW9m KCpzZiksIDMyKTsKKwlzZiA9IGludGVsX2JiX3B0cl9hbGlnbihpYmIsIDMyKTsKIAogCXNmLT5z ZjAuZ3JmX3JlZ19jb3VudCA9IEdFTjRfR1JGX0JMT0NLUyhTRl9LRVJORUxfTlVNX0dSRik7CiAJ c2YtPnNmMC5rZXJuZWxfc3RhcnRfcG9pbnRlciA9IGtlcm5lbCA+PiA2OwpAQCAtMzYzLDI1ICsz NDUsMjUgQEAgZ2VuNF9jcmVhdGVfc2Zfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCwKIAlzZi0+c2YzLnVyYl9lbnRyeV9yZWFkX29mZnNldCA9IDE7CiAJc2YtPnNmMy5kaXNw YXRjaF9ncmZfc3RhcnRfcmVnID0gMzsKIAotCXNmLT5zZjQubWF4X3RocmVhZHMgPSBnZW40X21h eF9zZl90aHJlYWRzKGJhdGNoLT5kZXZpZCkgLSAxOworCXNmLT5zZjQubWF4X3RocmVhZHMgPSBn ZW40X21heF9zZl90aHJlYWRzKGliYi0+ZGV2aWQpIC0gMTsKIAlzZi0+c2Y0LnVyYl9lbnRyeV9h bGxvY2F0aW9uX3NpemUgPSBVUkJfU0ZfRU5UUllfU0laRSAtIDE7Ci0Jc2YtPnNmNC5ucl91cmJf ZW50cmllcyA9IGdlbjRfbWF4X3NmX25yX3VyYl9lbnRyaWVzKGJhdGNoLT5kZXZpZCk7CisJc2Yt PnNmNC5ucl91cmJfZW50cmllcyA9IGdlbjRfbWF4X3NmX25yX3VyYl9lbnRyaWVzKGliYi0+ZGV2 aWQpOwogCiAJc2YtPnNmNi5jdWxsX21vZGUgPSBHRU40X0NVTExNT0RFX05PTkU7CiAJc2YtPnNm Ni5kZXN0X29yZ192YmlhcyA9IDB4ODsKIAlzZi0+c2Y2LmRlc3Rfb3JnX2hiaWFzID0gMHg4Owog Ci0JcmV0dXJuIGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCBzZik7CisJ cmV0dXJuIGludGVsX2JiX3B0cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgc2l6ZW9mKCpz ZikpOwogfQogCiBzdGF0aWMgdWludDMyX3QKLWdlbjRfY3JlYXRlX3dtX3N0YXRlKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCitnZW40X2NyZWF0ZV93bV9zdGF0ZShzdHJ1Y3QgaW50 ZWxfYmIgKmliYiwKIAkJICAgICB1aW50MzJfdCBrZXJuZWwsCiAJCSAgICAgdWludDMyX3Qgc2Ft cGxlcikKIHsKIAlzdHJ1Y3QgZ2VuNF93bV9zdGF0ZSAqd207CiAKLQl3bSA9IGludGVsX2JhdGNo YnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigqd20pLCAzMik7CisJd20gPSBpbnRl bF9iYl9wdHJfYWxpZ24oaWJiLCAzMik7CiAKIAlhc3NlcnQoKGtlcm5lbCAmIDYzKSA9PSAwKTsK IAl3bS0+d20wLmtlcm5lbF9zdGFydF9wb2ludGVyID0ga2VybmVsID4+IDY7CkBAIC0zOTQsNDgg KzM3Niw0OCBAQCBnZW40X2NyZWF0ZV93bV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLAogCXdtLT53bTQuc2FtcGxlcl9zdGF0ZV9wb2ludGVyID0gc2FtcGxlciA+PiA1Owog CXdtLT53bTQuc2FtcGxlcl9jb3VudCA9IDE7CiAKLQl3bS0+d201Lm1heF90aHJlYWRzID0gZ2Vu NF9tYXhfd21fdGhyZWFkcyhiYXRjaC0+ZGV2aWQpOworCXdtLT53bTUubWF4X3RocmVhZHMgPSBn ZW40X21heF93bV90aHJlYWRzKGliYi0+ZGV2aWQpOwogCXdtLT53bTUudGhyZWFkX2Rpc3BhdGNo X2VuYWJsZSA9IDE7CiAJd20tPndtNS5lbmFibGVfMTZfcGl4ID0gMTsKIAl3bS0+d201LmVhcmx5 X2RlcHRoX3Rlc3QgPSAxOwogCi0JaWYgKElTX0dFTjUoYmF0Y2gtPmRldmlkKSkKKwlpZiAoSVNf R0VONShpYmItPmRldmlkKSkKIAkJd20tPndtMS5iaW5kaW5nX3RhYmxlX2VudHJ5X2NvdW50ID0g MDsKIAllbHNlCiAJCXdtLT53bTEuYmluZGluZ190YWJsZV9lbnRyeV9jb3VudCA9IDI7CiAJd20t PndtMy51cmJfZW50cnlfcmVhZF9sZW5ndGggPSAyOwogCi0JcmV0dXJuIGludGVsX2JhdGNoYnVm ZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCB3bSk7CisJcmV0dXJuIGludGVsX2JiX3B0cl9hZGRf cmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgc2l6ZW9mKCp3bSkpOwogfQogCiBzdGF0aWMgdm9pZAot Z2VuNF9lbWl0X2JpbmRpbmdfdGFibGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwK K2dlbjRfZW1pdF9iaW5kaW5nX3RhYmxlKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAogCQkJdWludDMy X3Qgd21fdGFibGUpCiB7Ci0JT1VUX0JBVENIKEdFTjRfM0RTVEFURV9CSU5ESU5HX1RBQkxFX1BP SU5URVJTIHwgKDYgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwkJLyogdnMgKi8KLQlPVVRfQkFUQ0go MCk7CQkvKiBncyAqLwotCU9VVF9CQVRDSCgwKTsJCS8qIGNsaXAgKi8KLQlPVVRfQkFUQ0goMCk7 CQkvKiBzZiAqLwotCU9VVF9CQVRDSCh3bV90YWJsZSk7ICAgIC8qIHBzICovCisJaW50ZWxfYmJf b3V0KGliYiwgR0VONF8zRFNUQVRFX0JJTkRJTkdfVEFCTEVfUE9JTlRFUlMgfCAoNiAtIDIpKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsJCS8qIHZzICovCisJaW50ZWxfYmJfb3V0KGliYiwgMCk7 CQkvKiBncyAqLworCWludGVsX2JiX291dChpYmIsIDApOwkJLyogY2xpcCAqLworCWludGVsX2Ji X291dChpYmIsIDApOwkJLyogc2YgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCB3bV90YWJsZSk7ICAg IC8qIHBzICovCiB9CiAKIHN0YXRpYyB2b2lkCi1nZW40X2VtaXRfZHJhd2luZ19yZWN0YW5nbGUo c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgaWd0 X2J1ZiAqZHN0KQorZ2VuNF9lbWl0X2RyYXdpbmdfcmVjdGFuZ2xlKHN0cnVjdCBpbnRlbF9iYiAq aWJiLAorCQkJICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9idWYgKmRzdCkKIHsKLQlPVVRfQkFUQ0go R0VONF8zRFNUQVRFX0RSQVdJTkdfUkVDVEFOR0xFIHwgKDQgLSAyKSk7Ci0JT1VUX0JBVENIKDAp OwotCU9VVF9CQVRDSCgoaWd0X2J1Zl9oZWlnaHQoZHN0KSAtIDEpIDw8IDE2IHwKLQkJICAoaWd0 X2J1Zl93aWR0aChkc3QpIC0gMSkpOwotCU9VVF9CQVRDSCgwKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCBHRU40XzNEU1RBVEVfRFJBV0lOR19SRUNUQU5HTEUgfCAoNCAtIDIpKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAoaW50ZWxfYnVmX2hlaWdodChkc3QpIC0g MSkgPDwgMTYgfAorCQkgICAgIChpbnRlbF9idWZfd2lkdGgoZHN0KSAtIDEpKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjRfZW1pdF92ZXJ0ZXhfZWxlbWVu dHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjRfZW1pdF92ZXJ0ZXhfZWxl bWVudHMoc3RydWN0IGludGVsX2JiICppYmIpCiB7CiAKLQlpZiAoSVNfR0VONShiYXRjaC0+ZGV2 aWQpKSB7CisJaWYgKElTX0dFTjUoaWJiLT5kZXZpZCkpIHsKIAkJLyogVGhlIFZVRSBsYXlvdXQK IAkJICogICAgZHdvcmQgMC0zOiBwYWQgKDAuMCwgMC4wLCAwLjAsIDAuMCksCiAJCSAqICAgIGR3 b3JkIDQtNzogcG9zaXRpb24gKHgsIHksIDEuMCwgMS4wKSwKQEAgLTQ0MywzNCArNDI1LDM0IEBA IGdlbjRfZW1pdF92ZXJ0ZXhfZWxlbWVudHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCkKIAkJICoKIAkJICogZHdvcmQgNC0xMSBhcmUgZmV0Y2hlZCBmcm9tIHZlcnRleCBidWZmZXIK IAkJICovCi0JCU9VVF9CQVRDSChHRU40XzNEU1RBVEVfVkVSVEVYX0VMRU1FTlRTIHwgKDMgKiAy ICsgMSAtIDIpKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgR0VONF8zRFNUQVRFX1ZFUlRFWF9FTEVN RU5UUyB8ICgzICogMiArIDEgLSAyKSk7CiAKIAkJLyogcGFkICovCi0JCU9VVF9CQVRDSCgwIDw8 IEdFTjRfVkUwX1ZFUlRFWF9CVUZGRVJfSU5ERVhfU0hJRlQgfCBHRU40X1ZFMF9WQUxJRCB8Ci0J CQkgIFNVUkZBQ0VGT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUIDw8IFZFMF9GT1JNQVRfU0hJRlQg fAotCQkJICAwIDw8IFZFMF9PRkZTRVRfU0hJRlQpOwotCQlPVVRfQkFUQ0goR0VONF9WRkNPTVBP TkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8wX1NISUZUIHwKLQkJCSAgR0VONF9WRkNP TVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKLQkJCSAgR0VONF9W RkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NISUZUIHwKLQkJCSAgR0VO NF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZUKTsKKwkJaW50 ZWxfYmJfb3V0KGliYiwgMCA8PCBHRU40X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZUIHwg R0VONF9WRTBfVkFMSUQgfAorCQkJICAgICBTVVJGQUNFRk9STUFUX1IzMkczMkIzMkEzMl9GTE9B VCA8PCBWRTBfRk9STUFUX1NISUZUIHwKKwkJCSAgICAgMCA8PCBWRTBfT0ZGU0VUX1NISUZUKTsK KwkJaW50ZWxfYmJfb3V0KGliYiwgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNP TVBPTkVOVF8wX1NISUZUIHwKKwkJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZF MV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKKwkJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8w IDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NISUZUIHwKKwkJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9T VE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZUKTsKIAogCQkvKiB4LHkgKi8KLQkJT1VU X0JBVENIKDAgPDwgR0VONF9WRTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8IEdFTjRfVkUw X1ZBTElEIHwKLQkJCSAgU1VSRkFDRUZPUk1BVF9SMTZHMTZfU1NDQUxFRCA8PCBWRTBfRk9STUFU X1NISUZUIHwKLQkJCSAgMCA8PCBWRTBfT0ZGU0VUX1NISUZUKTsKLQkJT1VUX0JBVENIKEdFTjRf VkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBPTkVOVF8wX1NISUZUIHwKLQkJCSAg R0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAot CQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzFfRkxUIDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NI SUZUIHwKLQkJCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8xX0ZMVCA8PCBWRTFfVkZDT01QT05F TlRfM19TSElGVCk7CisJCWludGVsX2JiX291dChpYmIsIDAgPDwgR0VONF9WRTBfVkVSVEVYX0JV RkZFUl9JTkRFWF9TSElGVCB8IEdFTjRfVkUwX1ZBTElEIHwKKwkJCSAgICAgU1VSRkFDRUZPUk1B VF9SMTZHMTZfU1NDQUxFRCA8PCBWRTBfRk9STUFUX1NISUZUIHwKKwkJCSAgICAgMCA8PCBWRTBf T0ZGU0VUX1NISUZUKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgR0VONF9WRkNPTVBPTkVOVF9TVE9S RV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzBfU0hJRlQgfAorCQkJICAgICBHRU40X1ZGQ09NUE9O RU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZDT01QT05FTlRfMV9TSElGVCB8CisJCQkgICAgIEdFTjRf VkZDT01QT05FTlRfU1RPUkVfMV9GTFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAorCQkJ ICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzFfRkxUIDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NI SUZUKTsKIAogCQkvKiB1MCwgdjAgKi8KLQkJT1VUX0JBVENIKDAgPDwgR0VONF9WRTBfVkVSVEVY X0JVRkZFUl9JTkRFWF9TSElGVCB8IEdFTjRfVkUwX1ZBTElEIHwKLQkJCSAgU1VSRkFDRUZPUk1B VF9SMzJHMzJfRkxPQVQgPDwgVkUwX0ZPUk1BVF9TSElGVCB8Ci0JCQkgIDQgPDwgVkUwX09GRlNF VF9TSElGVCk7Ci0JCU9VVF9CQVRDSChHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFf VkZDT01QT05FTlRfMF9TSElGVCB8Ci0JCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8 IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKLQkJCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8w IDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NISUZUIHwKLQkJCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9S RV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZUKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgMCA8 PCBHRU40X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZUIHwgR0VONF9WRTBfVkFMSUQgfAor CQkJICAgICBTVVJGQUNFRk9STUFUX1IzMkczMl9GTE9BVCA8PCBWRTBfRk9STUFUX1NISUZUIHwK KwkJCSAgICAgNCA8PCBWRTBfT0ZGU0VUX1NISUZUKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgR0VO NF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzBfU0hJRlQgfAorCQkJ ICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZDT01QT05FTlRfMV9TSElG VCB8CisJCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRf Ml9TSElGVCB8CisJCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01Q T05FTlRfM19TSElGVCk7CiAJfSBlbHNlIHsKIAkJLyogVGhlIFZVRSBsYXlvdXQKIAkJICogICAg ZHdvcmQgMC0zOiBwb3NpdGlvbiAoeCwgeSwgMS4wLCAxLjApLApAQCAtNDc4LDkwICs0NjAsODgg QEAgZ2VuNF9lbWl0X3ZlcnRleF9lbGVtZW50cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoKQogCQkgKgogCQkgKiBkd29yZCAwLTcgYXJlIGZldGNoZWQgZnJvbSB2ZXJ0ZXggYnVmZmVy CiAJCSAqLwotCQlPVVRfQkFUQ0goR0VONF8zRFNUQVRFX1ZFUlRFWF9FTEVNRU5UUyB8ICgyICog MiArIDEgLSAyKSk7CisJCWludGVsX2JiX291dChpYmIsIEdFTjRfM0RTVEFURV9WRVJURVhfRUxF TUVOVFMgfCAoMiAqIDIgKyAxIC0gMikpOwogCiAJCS8qIHgseSAqLwotCQlPVVRfQkFUQ0goMCA8 PCBHRU40X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZUIHwgR0VONF9WRTBfVkFMSUQgfAot CQkJICBTVVJGQUNFRk9STUFUX1IxNkcxNl9TU0NBTEVEIDw8IFZFMF9GT1JNQVRfU0hJRlQgfAot CQkJICAwIDw8IFZFMF9PRkZTRVRfU0hJRlQpOwotCQlPVVRfQkFUQ0goR0VONF9WRkNPTVBPTkVO VF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzBfU0hJRlQgfAotCQkJICBHRU40X1ZGQ09N UE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZDT01QT05FTlRfMV9TSElGVCB8Ci0JCQkgIEdFTjRf VkZDT01QT05FTlRfU1RPUkVfMV9GTFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAotCQkJ ICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzFfRkxUIDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZU IHwKLQkJCSAgNCA8PCBWRTFfREVTVElOQVRJT05fRUxFTUVOVF9PRkZTRVRfU0hJRlQpOworCQlp bnRlbF9iYl9vdXQoaWJiLCAwIDw8IEdFTjRfVkUwX1ZFUlRFWF9CVUZGRVJfSU5ERVhfU0hJRlQg fCBHRU40X1ZFMF9WQUxJRCB8CisJCQkgICAgIFNVUkZBQ0VGT1JNQVRfUjE2RzE2X1NTQ0FMRUQg PDwgVkUwX0ZPUk1BVF9TSElGVCB8CisJCQkgICAgIDAgPDwgVkUwX09GRlNFVF9TSElGVCk7CisJ CWludGVsX2JiX291dChpYmIsIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNP TVBPTkVOVF8wX1NISUZUIHwKKwkJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwg VkUxX1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAorCQkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JF XzFfRkxUIDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NISUZUIHwKKwkJCSAgICAgR0VONF9WRkNPTVBP TkVOVF9TVE9SRV8xX0ZMVCA8PCBWRTFfVkZDT01QT05FTlRfM19TSElGVCB8CisJCQkgICAgIDQg PDwgVkUxX0RFU1RJTkFUSU9OX0VMRU1FTlRfT0ZGU0VUX1NISUZUKTsKIAogCQkvKiB1MCwgdjAg Ki8KLQkJT1VUX0JBVENIKDAgPDwgR0VONF9WRTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8 IEdFTjRfVkUwX1ZBTElEIHwKLQkJCSAgU1VSRkFDRUZPUk1BVF9SMzJHMzJfRkxPQVQgPDwgVkUw X0ZPUk1BVF9TSElGVCB8Ci0JCQkgIDQgPDwgVkUwX09GRlNFVF9TSElGVCk7Ci0JCU9VVF9CQVRD SChHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZDT01QT05FTlRfMF9TSElGVCB8 Ci0JCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBPTkVOVF8xX1NI SUZUIHwKLQkJCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8y X1NISUZUIHwKLQkJCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVO VF8zX1NISUZUIHwKLQkJCSAgOCA8PCBWRTFfREVTVElOQVRJT05fRUxFTUVOVF9PRkZTRVRfU0hJ RlQpOworCQlpbnRlbF9iYl9vdXQoaWJiLCAwIDw8IEdFTjRfVkUwX1ZFUlRFWF9CVUZGRVJfSU5E RVhfU0hJRlQgfCBHRU40X1ZFMF9WQUxJRCB8CisJCQkgICAgIFNVUkZBQ0VGT1JNQVRfUjMyRzMy X0ZMT0FUIDw8IFZFMF9GT1JNQVRfU0hJRlQgfAorCQkJICAgICA0IDw8IFZFMF9PRkZTRVRfU0hJ RlQpOworCQlpbnRlbF9iYl9vdXQoaWJiLCBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBW RTFfVkZDT01QT05FTlRfMF9TSElGVCB8CisJCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVf U1JDIDw8IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKKwkJCSAgICAgR0VONF9WRkNPTVBPTkVO VF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NISUZUIHwKKwkJCSAgICAgR0VONF9WRkNP TVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZUIHwKKwkJCSAgICAgOCA8 PCBWRTFfREVTVElOQVRJT05fRUxFTUVOVF9PRkZTRVRfU0hJRlQpOwogCX0KIH0KIAogc3RhdGlj IHVpbnQzMl90Ci1nZW40X2NyZWF0ZV9jY192aWV3cG9ydChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoKQorZ2VuNF9jcmVhdGVfY2Nfdmlld3BvcnQoc3RydWN0IGludGVsX2JiICppYmIp CiB7CiAJc3RydWN0IGdlbjRfY2Nfdmlld3BvcnQgKnZwOwogCi0JdnAgPSBpbnRlbF9iYXRjaGJ1 ZmZlcl9zdWJkYXRhX2FsbG9jKGJhdGNoLCBzaXplb2YoKnZwKSwgMzIpOworCXZwID0gaW50ZWxf YmJfcHRyX2FsaWduKGliYiwgMzIpOwogCiAJdnAtPm1pbl9kZXB0aCA9IC0xLmUzNTsKIAl2cC0+ bWF4X2RlcHRoID0gMS5lMzU7CiAKLQlyZXR1cm4gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9v ZmZzZXQoYmF0Y2gsIHZwKTsKKwlyZXR1cm4gaW50ZWxfYmJfcHRyX2FkZF9yZXR1cm5fcHJldl9v ZmZzZXQoaWJiLCBzaXplb2YoKnZwKSk7CiB9CiAKIHN0YXRpYyB1aW50MzJfdAotZ2VuNF9jcmVh dGVfY2Nfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKK2dlbjRfY3JlYXRl X2NjX3N0YXRlKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAogCQkgICAgIHVpbnQzMl90IGNjX3ZwKQog ewogCXN0cnVjdCBnZW40X2NvbG9yX2NhbGNfc3RhdGUgKmNjOwogCi0JY2MgPSBpbnRlbF9iYXRj aGJ1ZmZlcl9zdWJkYXRhX2FsbG9jKGJhdGNoLCBzaXplb2YoKmNjKSwgNjQpOworCWNjID0gaW50 ZWxfYmJfcHRyX2FsaWduKGliYiwgNjQpOwogCiAJY2MtPmNjNC5jY192aWV3cG9ydF9zdGF0ZV9v ZmZzZXQgPSBjY192cDsKIAotCXJldHVybiBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNl dChiYXRjaCwgY2MpOworCXJldHVybiBpbnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNl dChpYmIsIHNpemVvZigqY2MpKTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW40X2NyZWF0ZV9z Zl9rZXJuZWwoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjRfY3JlYXRlX3Nm X2tlcm5lbChzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlpZiAoSVNfR0VONShiYXRjaC0+ZGV2 aWQpKQotCQlyZXR1cm4gaW50ZWxfYmF0Y2hidWZmZXJfY29weV9kYXRhKGJhdGNoLCBnZW41X3Nm X2tlcm5lbF9ub21hc2ssCi0JCQkJCQkgICBzaXplb2YoZ2VuNV9zZl9rZXJuZWxfbm9tYXNrKSwK LQkJCQkJCSAgIDY0KTsKKwlpZiAoSVNfR0VONShpYmItPmRldmlkKSkKKwkJcmV0dXJuIGludGVs X2JiX2NvcHlfZGF0YShpYmIsIGdlbjVfc2Zfa2VybmVsX25vbWFzaywKKwkJCQkJICBzaXplb2Yo Z2VuNV9zZl9rZXJuZWxfbm9tYXNrKSwgNjQpOwogCWVsc2UKLQkJcmV0dXJuIGludGVsX2JhdGNo YnVmZmVyX2NvcHlfZGF0YShiYXRjaCwgZ2VuNF9zZl9rZXJuZWxfbm9tYXNrLAotCQkJCQkJICAg c2l6ZW9mKGdlbjRfc2Zfa2VybmVsX25vbWFzayksCi0JCQkJCQkgICA2NCk7CisJCXJldHVybiBp bnRlbF9iYl9jb3B5X2RhdGEoaWJiLCBnZW40X3NmX2tlcm5lbF9ub21hc2ssCisJCQkJCSAgc2l6 ZW9mKGdlbjRfc2Zfa2VybmVsX25vbWFzayksIDY0KTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1n ZW40X2NyZWF0ZV9wc19rZXJuZWwoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dl bjRfY3JlYXRlX3BzX2tlcm5lbChzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlpZiAoSVNfR0VO NShiYXRjaC0+ZGV2aWQpKQotCQlyZXR1cm4gaW50ZWxfYmF0Y2hidWZmZXJfY29weV9kYXRhKGJh dGNoLCBnZW41X3BzX2tlcm5lbF9ub21hc2tfYWZmaW5lLAotCQkJCQkJICAgc2l6ZW9mKGdlbjVf cHNfa2VybmVsX25vbWFza19hZmZpbmUpLAotCQkJCQkJICAgNjQpOworCWlmIChJU19HRU41KGli Yi0+ZGV2aWQpKQorCQlyZXR1cm4gaW50ZWxfYmJfY29weV9kYXRhKGliYiwgZ2VuNV9wc19rZXJu ZWxfbm9tYXNrX2FmZmluZSwKKwkJCQkJICBzaXplb2YoZ2VuNV9wc19rZXJuZWxfbm9tYXNrX2Fm ZmluZSksCisJCQkJCSAgNjQpOwogCWVsc2UKLQkJcmV0dXJuIGludGVsX2JhdGNoYnVmZmVyX2Nv cHlfZGF0YShiYXRjaCwgZ2VuNF9wc19rZXJuZWxfbm9tYXNrX2FmZmluZSwKLQkJCQkJCSAgIHNp emVvZihnZW40X3BzX2tlcm5lbF9ub21hc2tfYWZmaW5lKSwKLQkJCQkJCSAgIDY0KTsKKwkJcmV0 dXJuIGludGVsX2JiX2NvcHlfZGF0YShpYmIsIGdlbjRfcHNfa2VybmVsX25vbWFza19hZmZpbmUs CisJCQkJCSAgc2l6ZW9mKGdlbjRfcHNfa2VybmVsX25vbWFza19hZmZpbmUpLAorCQkJCQkgIDY0 KTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW40X2NyZWF0ZV9zYW1wbGVyKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCitnZW40X2NyZWF0ZV9zYW1wbGVyKHN0cnVjdCBpbnRlbF9i YiAqaWJiLAogCQkgICAgc2FtcGxlcl9maWx0ZXJfdCBmaWx0ZXIsCiAJCSAgICBzYW1wbGVyX2V4 dGVuZF90IGV4dGVuZCkKIHsKIAlzdHJ1Y3QgZ2VuNF9zYW1wbGVyX3N0YXRlICpzczsKIAotCXNz ID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwgc2l6ZW9mKCpzcyksIDMy KTsKKwlzcyA9IGludGVsX2JiX3B0cl9hbGlnbihpYmIsIDMyKTsKIAogCXNzLT5zczAubG9kX3By ZWNsYW1wID0gR0VONF9MT0RfUFJFQ0xBTVBfT0dMOwogCkBAIC02MDYsNTAgKzU4Niw1MiBAQCBn ZW40X2NyZWF0ZV9zYW1wbGVyKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAJCWJy ZWFrOwogCX0KIAotCXJldHVybiBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChiYXRj aCwgc3MpOworCXJldHVybiBpbnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNldChpYmIs IHNpemVvZigqc3MpKTsKIH0KIAotc3RhdGljIHZvaWQgZ2VuNF9lbWl0X3ZlcnRleF9idWZmZXIo c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK3N0YXRpYyB2b2lkIGdlbjRfZW1pdF92 ZXJ0ZXhfYnVmZmVyKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewotCU9VVF9CQVRDSChHRU40XzNE U1RBVEVfVkVSVEVYX0JVRkZFUlMgfCAoNSAtIDIpKTsKLQlPVVRfQkFUQ0goR0VONF9WQjBfVkVS VEVYREFUQSB8Ci0JCSAgMCA8PCBHRU40X1ZCMF9CVUZGRVJfSU5ERVhfU0hJRlQgfAotCQkgIFZF UlRFWF9TSVpFIDw8IFZCMF9CVUZGRVJfUElUQ0hfU0hJRlQpOwotCU9VVF9SRUxPQyhiYXRjaC0+ Ym8sIEk5MTVfR0VNX0RPTUFJTl9WRVJURVgsIDAsIDApOwotCWlmIChJU19HRU41KGJhdGNoLT5k ZXZpZCkpCi0JCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9WRVJURVgsIDAs Ci0JCQkgIGJhdGNoLT5iby0+c2l6ZSAtIDEpOworCWludGVsX2JiX291dChpYmIsIEdFTjRfM0RT VEFURV9WRVJURVhfQlVGRkVSUyB8ICg1IC0gMikpOworCWludGVsX2JiX291dChpYmIsIEdFTjRf VkIwX1ZFUlRFWERBVEEgfAorCQkgICAgIDAgPDwgR0VONF9WQjBfQlVGRkVSX0lOREVYX1NISUZU IHwKKwkJICAgICBWRVJURVhfU0laRSA8PCBWQjBfQlVGRkVSX1BJVENIX1NISUZUKTsKKwlpbnRl bF9iYl9lbWl0X3JlbG9jKGliYiwgaWJiLT5oYW5kbGUsCisJCQkgICAgSTkxNV9HRU1fRE9NQUlO X1ZFUlRFWCwgMCwgMCwgaWJiLT5iYXRjaF9vZmZzZXQpOworCWlmIChJU19HRU41KGliYi0+ZGV2 aWQpKQorCQlpbnRlbF9iYl9lbWl0X3JlbG9jKGliYiwgaWJiLT5oYW5kbGUsCisJCQkJICAgIEk5 MTVfR0VNX0RPTUFJTl9WRVJURVgsIDAsCisJCQkJICAgIGliYi0+c2l6ZSAtIDEsIGliYi0+YmF0 Y2hfb2Zmc2V0KTsKIAllbHNlCi0JCU9VVF9CQVRDSChiYXRjaC0+Ym8tPnNpemUgLyBWRVJURVhf U0laRSAtIDEpOwotCU9VVF9CQVRDSCgwKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgaWJiLT5zaXpl IC8gVkVSVEVYX1NJWkUgLSAxKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0KIAotc3RhdGlj IHVpbnQzMl90IGdlbjRfZW1pdF9wcmltaXRpdmUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCkKK3N0YXRpYyB1aW50MzJfdCBnZW40X2VtaXRfcHJpbWl0aXZlKHN0cnVjdCBpbnRlbF9i YiAqaWJiKQogewogCXVpbnQzMl90IG9mZnNldDsKIAotCU9VVF9CQVRDSChHRU40XzNEUFJJTUlU SVZFIHwKLQkJICBHRU40XzNEUFJJTUlUSVZFX1ZFUlRFWF9TRVFVRU5USUFMIHwKLQkJICBfM0RQ UklNX1JFQ1RMSVNUIDw8IEdFTjRfM0RQUklNSVRJVkVfVE9QT0xPR1lfU0hJRlQgfAotCQkgIDAg PDwgOSB8Ci0JCSAgKDYgLSAyKSk7Ci0JT1VUX0JBVENIKDMpOwkvKiB2ZXJ0ZXggY291bnQgKi8K LQlvZmZzZXQgPSBiYXRjaF91c2VkKGJhdGNoKTsKLQlPVVRfQkFUQ0goMCk7CS8qIHZlcnRleF9p bmRleCAqLwotCU9VVF9CQVRDSCgxKTsJLyogc2luZ2xlIGluc3RhbmNlICovCi0JT1VUX0JBVENI KDApOwkvKiBzdGFydCBpbnN0YW5jZSBsb2NhdGlvbiAqLwotCU9VVF9CQVRDSCgwKTsJLyogaW5k ZXggYnVmZmVyIG9mZnNldCwgaWdub3JlZCAqLworCWludGVsX2JiX291dChpYmIsIEdFTjRfM0RQ UklNSVRJVkUgfAorCQkgICAgIEdFTjRfM0RQUklNSVRJVkVfVkVSVEVYX1NFUVVFTlRJQUwgfAor CQkgICAgIF8zRFBSSU1fUkVDVExJU1QgPDwgR0VONF8zRFBSSU1JVElWRV9UT1BPTE9HWV9TSElG VCB8CisJCSAgICAgMCA8PCA5IHwKKwkJICAgICAoNiAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCAzKTsJLyogdmVydGV4IGNvdW50ICovCisJb2Zmc2V0ID0gaW50ZWxfYmJfb2Zmc2V0KGliYik7 CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CS8qIHZlcnRleF9pbmRleCAqLworCWludGVsX2JiX291 dChpYmIsIDEpOwkvKiBzaW5nbGUgaW5zdGFuY2UgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsJ Lyogc3RhcnQgaW5zdGFuY2UgbG9jYXRpb24gKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsJLyog aW5kZXggYnVmZmVyIG9mZnNldCwgaWdub3JlZCAqLwogCiAJcmV0dXJuIG9mZnNldDsKIH0KIAot dm9pZCBnZW40X3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo LAotCQkJICBkcm1faW50ZWxfY29udGV4dCAqY29udGV4dCwKLQkJCSAgY29uc3Qgc3RydWN0IGln dF9idWYgKnNyYywKLQkJCSAgdW5zaWduZWQgc3JjX3gsIHVuc2lnbmVkIHNyY195LAotCQkJICB1 bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LAotCQkJICBjb25zdCBzdHJ1Y3QgaWd0X2J1 ZiAqZHN0LAotCQkJICB1bnNpZ25lZCBkc3RfeCwgdW5zaWduZWQgZHN0X3kpCit2b2lkIGdlbjRf cmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJICB1aW50MzJfdCBjdHgs CisJCQkgIHN0cnVjdCBpbnRlbF9idWYgKnNyYywKKwkJCSAgdWludDMyX3Qgc3JjX3gsIHVpbnQz Ml90IHNyY195LAorCQkJICB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LAorCQkJICBz dHJ1Y3QgaW50ZWxfYnVmICpkc3QsCisJCQkgIHVpbnQzMl90IGRzdF94LCB1aW50MzJfdCBkc3Rf eSkKIHsKIAl1aW50MzJfdCBjYywgY2NfdnA7CiAJdWludDMyX3Qgd20sIHdtX3NhbXBsZXIsIHdt X2tlcm5lbCwgd21fdGFibGU7CkBAIC02NTgsNjAgKzY0MCw2NyBAQCB2b2lkIGdlbjRfcmVuZGVy X2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAJdWludDMyX3Qgb2Zm c2V0LCBiYXRjaF9lbmQ7CiAKIAlpZ3RfYXNzZXJ0KHNyYy0+YnBwID09IGRzdC0+YnBwKTsKLQlp bnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQoYmF0Y2gsIGNvbnRleHQpOwogCi0J YmF0Y2gtPnB0ciA9IGJhdGNoLT5idWZmZXIgKyAxMDI0OwotCWludGVsX2JhdGNoYnVmZmVyX3N1 YmRhdGFfYWxsb2MoYmF0Y2gsIDY0LCA2NCk7CisJaW50ZWxfYmJfZmx1c2hfcmVuZGVyX3dpdGhf Y29udGV4dChpYmIsIGN0eCk7CiAKLQl2cyA9IGdlbjRfY3JlYXRlX3ZzX3N0YXRlKGJhdGNoKTsK KwlpbnRlbF9iYl9hZGRfaW50ZWxfYnVmKGliYiwgZHN0LCB0cnVlKTsKKwlpbnRlbF9iYl9hZGRf aW50ZWxfYnVmKGliYiwgc3JjLCBmYWxzZSk7CiAKLQlzZl9rZXJuZWwgPSBnZW40X2NyZWF0ZV9z Zl9rZXJuZWwoYmF0Y2gpOwotCXNmID0gZ2VuNF9jcmVhdGVfc2Zfc3RhdGUoYmF0Y2gsIHNmX2tl cm5lbCk7CisJaW50ZWxfYmJfcHRyX3NldChpYmIsIDEwMjQgKyA2NCk7CiAKLQl3bV90YWJsZSA9 IGdlbjRfYmluZF9zdXJmYWNlcyhiYXRjaCwgc3JjLCBkc3QpOwotCXdtX2tlcm5lbCA9IGdlbjRf Y3JlYXRlX3BzX2tlcm5lbChiYXRjaCk7Ci0Jd21fc2FtcGxlciA9IGdlbjRfY3JlYXRlX3NhbXBs ZXIoYmF0Y2gsCisJdnMgPSBnZW40X2NyZWF0ZV92c19zdGF0ZShpYmIpOworCisJc2Zfa2VybmVs ID0gZ2VuNF9jcmVhdGVfc2Zfa2VybmVsKGliYik7CisJc2YgPSBnZW40X2NyZWF0ZV9zZl9zdGF0 ZShpYmIsIHNmX2tlcm5lbCk7CisKKwl3bV90YWJsZSA9IGdlbjRfYmluZF9zdXJmYWNlcyhpYmIs IHNyYywgZHN0KTsKKwl3bV9rZXJuZWwgPSBnZW40X2NyZWF0ZV9wc19rZXJuZWwoaWJiKTsKKwl3 bV9zYW1wbGVyID0gZ2VuNF9jcmVhdGVfc2FtcGxlcihpYmIsCiAJCQkJCSBTQU1QTEVSX0ZJTFRF Ul9ORUFSRVNULAogCQkJCQkgU0FNUExFUl9FWFRFTkRfTk9ORSk7Ci0Jd20gPSBnZW40X2NyZWF0 ZV93bV9zdGF0ZShiYXRjaCwgd21fa2VybmVsLCB3bV9zYW1wbGVyKTsKKwl3bSA9IGdlbjRfY3Jl YXRlX3dtX3N0YXRlKGliYiwgd21fa2VybmVsLCB3bV9zYW1wbGVyKTsKKworCWNjX3ZwID0gZ2Vu NF9jcmVhdGVfY2Nfdmlld3BvcnQoaWJiKTsKKwljYyA9IGdlbjRfY3JlYXRlX2NjX3N0YXRlKGli YiwgY2NfdnApOwogCi0JY2NfdnAgPSBnZW40X2NyZWF0ZV9jY192aWV3cG9ydChiYXRjaCk7Ci0J Y2MgPSBnZW40X2NyZWF0ZV9jY19zdGF0ZShiYXRjaCwgY2NfdnApOworCWludGVsX2JiX3B0cl9z ZXQoaWJiLCAwKTsKIAotCWJhdGNoLT5wdHIgPSBiYXRjaC0+YnVmZmVyOworCWdlbjRfZW1pdF9p bnZhcmlhbnQoaWJiKTsKKwlnZW40X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKGliYik7CisJZ2Vu NF9lbWl0X3NpcChpYmIpOworCWdlbjRfZW1pdF9udWxsX2RlcHRoX2J1ZmZlcihpYmIpOwogCi0J Z2VuNF9lbWl0X2ludmFyaWFudChiYXRjaCk7Ci0JZ2VuNF9lbWl0X3N0YXRlX2Jhc2VfYWRkcmVz cyhiYXRjaCk7Ci0JZ2VuNF9lbWl0X3NpcChiYXRjaCk7Ci0JZ2VuNF9lbWl0X251bGxfZGVwdGhf YnVmZmVyKGJhdGNoKTsKKwlnZW40X2VtaXRfZHJhd2luZ19yZWN0YW5nbGUoaWJiLCBkc3QpOwor CWdlbjRfZW1pdF9iaW5kaW5nX3RhYmxlKGliYiwgd21fdGFibGUpOworCWdlbjRfZW1pdF92ZXJ0 ZXhfZWxlbWVudHMoaWJiKTsKKwlnZW40X2VtaXRfcGlwZWxpbmVkX3BvaW50ZXJzKGliYiwgdnMs IHNmLCB3bSwgY2MpOworCWdlbjRfZW1pdF91cmIoaWJiKTsKIAotCWdlbjRfZW1pdF9kcmF3aW5n X3JlY3RhbmdsZShiYXRjaCwgZHN0KTsKLQlnZW40X2VtaXRfYmluZGluZ190YWJsZShiYXRjaCwg d21fdGFibGUpOwotCWdlbjRfZW1pdF92ZXJ0ZXhfZWxlbWVudHMoYmF0Y2gpOwotCWdlbjRfZW1p dF9waXBlbGluZWRfcG9pbnRlcnMoYmF0Y2gsIHZzLCBzZiwgd20sIGNjKTsKLQlnZW40X2VtaXRf dXJiKGJhdGNoKTsKKwlnZW40X2VtaXRfdmVydGV4X2J1ZmZlcihpYmIpOworCW9mZnNldCA9IGdl bjRfZW1pdF9wcmltaXRpdmUoaWJiKTsKIAotCWdlbjRfZW1pdF92ZXJ0ZXhfYnVmZmVyKGJhdGNo KTsKLQlvZmZzZXQgPSBnZW40X2VtaXRfcHJpbWl0aXZlKGJhdGNoKTsKKwliYXRjaF9lbmQgPSBp bnRlbF9iYl9lbWl0X2JiZShpYmIpOwogCi0JT1VUX0JBVENIKE1JX0JBVENIX0JVRkZFUl9FTkQp OwotCWJhdGNoX2VuZCA9IGludGVsX2JhdGNoYnVmZmVyX2FsaWduKGJhdGNoLCA4KTsKKwlpYmIt PmJhdGNoW29mZnNldCAvIHNpemVvZih1aW50MzJfdCldID0KKwkJCWJhdGNoX3JvdW5kX3VwdG8o aWJiLCBWRVJURVhfU0laRSkvVkVSVEVYX1NJWkU7CiAKLQkqKHVpbnQzMl90ICopKGJhdGNoLT5i dWZmZXIgKyBvZmZzZXQpID0KLQkJYmF0Y2hfcm91bmRfdXB0byhiYXRjaCwgVkVSVEVYX1NJWkUp L1ZFUlRFWF9TSVpFOworCWVtaXRfdmVydGV4XzJzKGliYiwgZHN0X3ggKyB3aWR0aCwgZHN0X3kg KyBoZWlnaHQpOworCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoaWJiLCBzcmNfeCArIHdpZHRoLCBp bnRlbF9idWZfd2lkdGgoc3JjKSk7CisJZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChpYmIsIHNyY195 ICsgaGVpZ2h0LCBpbnRlbF9idWZfaGVpZ2h0KHNyYykpOwogCi0JZW1pdF92ZXJ0ZXhfMnMoYmF0 Y2gsIGRzdF94ICsgd2lkdGgsIGRzdF95ICsgaGVpZ2h0KTsKLQllbWl0X3ZlcnRleF9ub3JtYWxp emVkKGJhdGNoLCBzcmNfeCArIHdpZHRoLCBpZ3RfYnVmX3dpZHRoKHNyYykpOwotCWVtaXRfdmVy dGV4X25vcm1hbGl6ZWQoYmF0Y2gsIHNyY195ICsgaGVpZ2h0LCBpZ3RfYnVmX2hlaWdodChzcmMp KTsKKwllbWl0X3ZlcnRleF8ycyhpYmIsIGRzdF94LCBkc3RfeSArIGhlaWdodCk7CisJZW1pdF92 ZXJ0ZXhfbm9ybWFsaXplZChpYmIsIHNyY194LCBpbnRlbF9idWZfd2lkdGgoc3JjKSk7CisJZW1p dF92ZXJ0ZXhfbm9ybWFsaXplZChpYmIsIHNyY195ICsgaGVpZ2h0LCBpbnRlbF9idWZfaGVpZ2h0 KHNyYykpOwogCi0JZW1pdF92ZXJ0ZXhfMnMoYmF0Y2gsIGRzdF94LCBkc3RfeSArIGhlaWdodCk7 Ci0JZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3gsIGlndF9idWZfd2lkdGgoc3Jj KSk7Ci0JZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3kgKyBoZWlnaHQsIGlndF9i dWZfaGVpZ2h0KHNyYykpOworCWVtaXRfdmVydGV4XzJzKGliYiwgZHN0X3gsIGRzdF95KTsKKwll bWl0X3ZlcnRleF9ub3JtYWxpemVkKGliYiwgc3JjX3gsIGludGVsX2J1Zl93aWR0aChzcmMpKTsK KwllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGliYiwgc3JjX3ksIGludGVsX2J1Zl9oZWlnaHQoc3Jj KSk7CiAKLQllbWl0X3ZlcnRleF8ycyhiYXRjaCwgZHN0X3gsIGRzdF95KTsKLQllbWl0X3ZlcnRl eF9ub3JtYWxpemVkKGJhdGNoLCBzcmNfeCwgaWd0X2J1Zl93aWR0aChzcmMpKTsKLQllbWl0X3Zl cnRleF9ub3JtYWxpemVkKGJhdGNoLCBzcmNfeSwgaWd0X2J1Zl9oZWlnaHQoc3JjKSk7CisJLyog UG9zaXRpb24gdG8gdmFsaWQgYmF0Y2ggZW5kIHBvc2l0aW9uIGZvciBiYXRjaCByZXVzZSAqLwor CWludGVsX2JiX3B0cl9zZXQoaWJiLCBiYXRjaF9lbmQpOwogCi0JZ2VuNF9yZW5kZXJfZmx1c2go YmF0Y2gsIGNvbnRleHQsIGJhdGNoX2VuZCk7Ci0JaW50ZWxfYmF0Y2hidWZmZXJfcmVzZXQoYmF0 Y2gpOworCWludGVsX2JiX2V4ZWNfd2l0aF9jb250ZXh0KGliYiwgYmF0Y2hfZW5kLCBjdHgsCisJ CQkJICAgSTkxNV9FWEVDX0RFRkFVTFQgfCBJOTE1X0VYRUNfTk9fUkVMT0MsCisJCQkJICAgZmFs c2UpOworCWludGVsX2JiX3Jlc2V0KGliYiwgZmFsc2UpOwogfQpkaWZmIC0tZ2l0IGEvbGliL3Jl bmRlcmNvcHlfZ2VuNi5jIGIvbGliL3JlbmRlcmNvcHlfZ2VuNi5jCmluZGV4IDE2Y2JiNjc5Li40 YjdlZDk2NiAxMDA2NDQKLS0tIGEvbGliL3JlbmRlcmNvcHlfZ2VuNi5jCisrKyBiL2xpYi9yZW5k ZXJjb3B5X2dlbjYuYwpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgImRybS5oIgogI2luY2x1 ZGUgImk5MTVfZHJtLmgiCiAjaW5jbHVkZSAiZHJtdGVzdC5oIgotI2luY2x1ZGUgImludGVsX2J1 Zm1nci5oIgorI2luY2x1ZGUgImludGVsX2J1Zm9wcy5oIgogI2luY2x1ZGUgImludGVsX2JhdGNo YnVmZmVyLmgiCiAjaW5jbHVkZSAiaW50ZWxfaW8uaCIKICNpbmNsdWRlICJyZW5kZXJjb3B5Lmgi CkBAIC00OSwzOCArNDksMjYgQEAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHBzX2tlcm5lbF9ub21h c2tfYWZmaW5lW11bNF0gPSB7CiB9OwogCiBzdGF0aWMgdWludDMyX3QKLWJhdGNoX3JvdW5kX3Vw dG8oc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgZGl2aXNvcikKK2Jh dGNoX3JvdW5kX3VwdG8oc3RydWN0IGludGVsX2JiICppYmIsIHVpbnQzMl90IGRpdmlzb3IpCiB7 Ci0JdWludDMyX3Qgb2Zmc2V0ID0gYmF0Y2gtPnB0ciAtIGJhdGNoLT5idWZmZXI7CisJdWludDMy X3Qgb2Zmc2V0ID0gaW50ZWxfYmJfb2Zmc2V0KGliYik7CiAKLQlvZmZzZXQgPSAob2Zmc2V0ICsg ZGl2aXNvci0xKSAvIGRpdmlzb3IgKiBkaXZpc29yOwotCWJhdGNoLT5wdHIgPSBiYXRjaC0+YnVm ZmVyICsgb2Zmc2V0OwotCXJldHVybiBvZmZzZXQ7Ci19CisJb2Zmc2V0ID0gKG9mZnNldCArIGRp dmlzb3IgLSAxKSAvIGRpdmlzb3IgKiBkaXZpc29yOworCWludGVsX2JiX3B0cl9zZXQoaWJiLCBv ZmZzZXQpOwogCi1zdGF0aWMgdm9pZAotZ2VuNl9yZW5kZXJfZmx1c2goc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwKLQkJICBkcm1faW50ZWxfY29udGV4dCAqY29udGV4dCwgdWludDMy X3QgYmF0Y2hfZW5kKQotewotCWlndF9hc3NlcnRfZXEoZHJtX2ludGVsX2JvX3N1YmRhdGEoYmF0 Y2gtPmJvLAotCQkJCQkgICAwLCA0MDk2LCBiYXRjaC0+YnVmZmVyKSwKLQkJICAgICAgMCk7Ci0J aWd0X2Fzc2VydF9lcShkcm1faW50ZWxfZ2VtX2JvX2NvbnRleHRfZXhlYyhiYXRjaC0+Ym8sCi0J CQkJCQkgICAgY29udGV4dCwgYmF0Y2hfZW5kLCAwKSwKLQkJICAgICAgMCk7CisJcmV0dXJuIG9m ZnNldDsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW42X2JpbmRfYnVmKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gsIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpidWYsCi0JICAgICAgaW50 IGlzX2RzdCkKK2dlbjZfYmluZF9idWYoc3RydWN0IGludGVsX2JiICppYmIsIGNvbnN0IHN0cnVj dCBpbnRlbF9idWYgKmJ1ZiwgaW50IGlzX2RzdCkKIHsKIAlzdHJ1Y3QgZ2VuNl9zdXJmYWNlX3N0 YXRlICpzczsKIAl1aW50MzJfdCB3cml0ZV9kb21haW4sIHJlYWRfZG9tYWluOwotCWludCByZXQ7 CisJdWludDY0X3QgYWRkcmVzczsKIAogCWlndF9hc3NlcnRfbHRlKGJ1Zi0+c3VyZmFjZVswXS5z dHJpZGUsIDEyOCoxMDI0KTsKLQlpZ3RfYXNzZXJ0X2x0ZShpZ3RfYnVmX3dpZHRoKGJ1ZiksIDgx OTIpOwotCWlndF9hc3NlcnRfbHRlKGlndF9idWZfaGVpZ2h0KGJ1ZiksIDgxOTIpOworCWlndF9h c3NlcnRfbHRlKGludGVsX2J1Zl93aWR0aChidWYpLCA4MTkyKTsKKwlpZ3RfYXNzZXJ0X2x0ZShp bnRlbF9idWZfaGVpZ2h0KGJ1ZiksIDgxOTIpOwogCiAJaWYgKGlzX2RzdCkgewogCQl3cml0ZV9k b21haW4gPSByZWFkX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7CkBAIC04OSw3ICs3 Nyw3IEBAIGdlbjZfYmluZF9idWYoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgY29u c3Qgc3RydWN0IGlndF9idWYgKmJ1ZiwKIAkJcmVhZF9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5f U0FNUExFUjsKIAl9CiAKLQlzcyA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0 Y2gsIHNpemVvZigqc3MpLCAzMik7CisJc3MgPSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCAzMik7 CiAJc3MtPnNzMC5zdXJmYWNlX3R5cGUgPSBTVVJGQUNFXzJEOwogCiAJc3dpdGNoIChidWYtPmJw cCkgewpAQCAtMTAyLDI2NSArOTAsMjY1IEBAIGdlbjZfYmluZF9idWYoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwgY29uc3Qgc3RydWN0IGlndF9idWYgKmJ1ZiwKIAogCXNzLT5zczAu ZGF0YV9yZXR1cm5fZm9ybWF0ID0gU1VSRkFDRVJFVFVSTkZPUk1BVF9GTE9BVDMyOwogCXNzLT5z czAuY29sb3JfYmxlbmQgPSAxOwotCXNzLT5zczEuYmFzZV9hZGRyID0gYnVmLT5iby0+b2Zmc2V0 OwogCi0JcmV0ID0gZHJtX2ludGVsX2JvX2VtaXRfcmVsb2MoYmF0Y2gtPmJvLAotCQkJCSAgICAg IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCAmc3MtPnNzMSksCi0JCQkJ ICAgICAgYnVmLT5ibywgMCwKLQkJCQkgICAgICByZWFkX2RvbWFpbiwgd3JpdGVfZG9tYWluKTsK LQlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsKKwlhZGRyZXNzID0gaW50ZWxfYmJfb2Zmc2V0X3JlbG9j KGliYiwgYnVmLT5oYW5kbGUsCisJCQkJCXJlYWRfZG9tYWluLCB3cml0ZV9kb21haW4sCisJCQkJ CWludGVsX2JiX29mZnNldChpYmIpICsgNCwKKwkJCQkJYnVmLT5hZGRyLm9mZnNldCk7CisJc3Mt PnNzMS5iYXNlX2FkZHIgPSAodWludDMyX3QpIGFkZHJlc3M7CiAKLQlzcy0+c3MyLmhlaWdodCA9 IGlndF9idWZfaGVpZ2h0KGJ1ZikgLSAxOwotCXNzLT5zczIud2lkdGggID0gaWd0X2J1Zl93aWR0 aChidWYpIC0gMTsKKwlzcy0+c3MyLmhlaWdodCA9IGludGVsX2J1Zl9oZWlnaHQoYnVmKSAtIDE7 CisJc3MtPnNzMi53aWR0aCAgPSBpbnRlbF9idWZfd2lkdGgoYnVmKSAtIDE7CiAJc3MtPnNzMy5w aXRjaCAgPSBidWYtPnN1cmZhY2VbMF0uc3RyaWRlIC0gMTsKIAlzcy0+c3MzLnRpbGVkX3N1cmZh Y2UgPSBidWYtPnRpbGluZyAhPSBJOTE1X1RJTElOR19OT05FOwogCXNzLT5zczMudGlsZV93YWxr ICAgICA9IGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5HX1k7CiAKIAlzcy0+c3M1Lm1lbW9yeV9v YmplY3RfY29udHJvbCA9IEdFTjZfTU9DU19QVEU7CiAKLQlyZXR1cm4gaW50ZWxfYmF0Y2hidWZm ZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsIHNzKTsKKwlyZXR1cm4gaW50ZWxfYmJfcHRyX2FkZF9y ZXR1cm5fcHJldl9vZmZzZXQoaWJiLCBzaXplb2YoKnNzKSk7CiB9CiAKIHN0YXRpYyB1aW50MzJf dAotZ2VuNl9iaW5kX3N1cmZhY2VzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0J CSAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsCi0JCSAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVm ICpkc3QpCitnZW42X2JpbmRfc3VyZmFjZXMoc3RydWN0IGludGVsX2JiICppYmIsCisJCSAgIGNv bnN0IHN0cnVjdCBpbnRlbF9idWYgKnNyYywKKwkJICAgY29uc3Qgc3RydWN0IGludGVsX2J1ZiAq ZHN0KQogewotCXVpbnQzMl90ICpiaW5kaW5nX3RhYmxlOworCXVpbnQzMl90ICpiaW5kaW5nX3Rh YmxlLCBiaW5kaW5nX3RhYmxlX29mZnNldDsKIAotCWJpbmRpbmdfdGFibGUgPSBpbnRlbF9iYXRj aGJ1ZmZlcl9zdWJkYXRhX2FsbG9jKGJhdGNoLCAzMiwgMzIpOworCWJpbmRpbmdfdGFibGUgPSBp bnRlbF9iYl9wdHJfYWxpZ24oaWJiLCAzMik7CisJYmluZGluZ190YWJsZV9vZmZzZXQgPSBpbnRl bF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNldChpYmIsIDMyKTsKIAotCWJpbmRpbmdfdGFi bGVbMF0gPSBnZW42X2JpbmRfYnVmKGJhdGNoLCBkc3QsIDEpOwotCWJpbmRpbmdfdGFibGVbMV0g PSBnZW42X2JpbmRfYnVmKGJhdGNoLCBzcmMsIDApOworCWJpbmRpbmdfdGFibGVbMF0gPSBnZW42 X2JpbmRfYnVmKGliYiwgZHN0LCAxKTsKKwliaW5kaW5nX3RhYmxlWzFdID0gZ2VuNl9iaW5kX2J1 ZihpYmIsIHNyYywgMCk7CiAKLQlyZXR1cm4gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZz ZXQoYmF0Y2gsIGJpbmRpbmdfdGFibGUpOworCXJldHVybiBiaW5kaW5nX3RhYmxlX29mZnNldDsK IH0KIAogc3RhdGljIHZvaWQKLWdlbjZfZW1pdF9zaXAoc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCkKK2dlbjZfZW1pdF9zaXAoc3RydWN0IGludGVsX2JiICppYmIpCiB7Ci0JT1VUX0JB VENIKEdFTjRfU1RBVEVfU0lQIHwgMCk7Ci0JT1VUX0JBVENIKDApOworCWludGVsX2JiX291dChp YmIsIEdFTjRfU1RBVEVfU0lQIHwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9CiAKIHN0 YXRpYyB2b2lkCi1nZW42X2VtaXRfdXJiKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gp CitnZW42X2VtaXRfdXJiKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewotCU9VVF9CQVRDSChHRU42 XzNEU1RBVEVfVVJCIHwgKDMgLSAyKSk7Ci0JT1VUX0JBVENIKCgxIC0gMSkgPDwgR0VONl8zRFNU QVRFX1VSQl9WU19TSVpFX1NISUZUIHwKLQkJICAyNCA8PCBHRU42XzNEU1RBVEVfVVJCX1ZTX0VO VFJJRVNfU0hJRlQpOyAvKiBhdCBsZWFzdCAyNCBvbiBHRU42ICovCi0JT1VUX0JBVENIKDAgPDwg R0VONl8zRFNUQVRFX1VSQl9HU19TSVpFX1NISUZUIHwKLQkJICAwIDw8IEdFTjZfM0RTVEFURV9V UkJfR1NfRU5UUklFU19TSElGVCk7IC8qIG5vIEdTIHRocmVhZCAqLworCWludGVsX2JiX291dChp YmIsIEdFTjZfM0RTVEFURV9VUkIgfCAoMyAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAoMSAt IDEpIDw8IEdFTjZfM0RTVEFURV9VUkJfVlNfU0laRV9TSElGVCB8CisJCSAgICAgMjQgPDwgR0VO Nl8zRFNUQVRFX1VSQl9WU19FTlRSSUVTX1NISUZUKTsgLyogYXQgbGVhc3QgMjQgb24gR0VONiAq LworCWludGVsX2JiX291dChpYmIsIDAgPDwgR0VONl8zRFNUQVRFX1VSQl9HU19TSVpFX1NISUZU IHwKKwkJICAgICAwIDw8IEdFTjZfM0RTVEFURV9VUkJfR1NfRU5UUklFU19TSElGVCk7IC8qIG5v IEdTIHRocmVhZCAqLwogfQogCiBzdGF0aWMgdm9pZAotZ2VuNl9lbWl0X3N0YXRlX2Jhc2VfYWRk cmVzcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuNl9lbWl0X3N0YXRlX2Jh c2VfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlPVVRfQkFUQ0goR0VONF9TVEFU RV9CQVNFX0FERFJFU1MgfCAoMTAgLSAyKSk7Ci0JT1VUX0JBVENIKDApOyAvKiBnZW5lcmFsICov Ci0JT1VUX1JFTE9DKGJhdGNoLT5ibywgLyogc3VyZmFjZSAqLwotCQkgIEk5MTVfR0VNX0RPTUFJ Tl9JTlNUUlVDVElPTiwgMCwKLQkJICBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQlPVVRfUkVMT0Mo YmF0Y2gtPmJvLCAvKiBpbnN0cnVjdGlvbiAqLwotCQkgIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVD VElPTiwgMCwKLQkJICBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQlPVVRfQkFUQ0goMCk7IC8qIGlu ZGlyZWN0ICovCi0JT1VUX1JFTE9DKGJhdGNoLT5ibywgLyogZHluYW1pYyAqLwotCQkgIEk5MTVf R0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwKLQkJICBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCBHRU40X1NUQVRFX0JBU0VfQUREUkVTUyB8ICgxMCAtIDIpKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogZ2VuZXJhbCAqLworCWludGVsX2JiX2VtaXRfcmVsb2Mo aWJiLCBpYmItPmhhbmRsZSwgLyogc3VyZmFjZSAqLworCQkJICAgIEk5MTVfR0VNX0RPTUFJTl9J TlNUUlVDVElPTiwgMCwKKwkJCSAgICBCQVNFX0FERFJFU1NfTU9ESUZZLCBpYmItPmJhdGNoX29m ZnNldCk7CisJaW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIGliYi0+aGFuZGxlLCAvKiBpbnN0cnVj dGlvbiAqLworCQkJICAgIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwKKwkJCSAgICBC QVNFX0FERFJFU1NfTU9ESUZZLCBpYmItPmJhdGNoX29mZnNldCk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCk7IC8qIGluZGlyZWN0ICovCisJaW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIGliYi0+aGFu ZGxlLCAvKiBkeW5hbWljICovCisJCQkgICAgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAw LAorCQkJICAgIEJBU0VfQUREUkVTU19NT0RJRlksIGliYi0+YmF0Y2hfb2Zmc2V0KTsKIAogCS8q IHVwcGVyIGJvdW5kcywgZGlzYWJsZSAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goQkFT RV9BRERSRVNTX01PRElGWSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSChCQVNFX0FERFJF U1NfTU9ESUZZKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBC QVNFX0FERFJFU1NfTU9ESUZZKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjZfZW1p dF92aWV3cG9ydHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgY2Nf dnApCitnZW42X2VtaXRfdmlld3BvcnRzKHN0cnVjdCBpbnRlbF9iYiAqaWJiLCB1aW50MzJfdCBj Y192cCkKIHsKLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX1ZJRVdQT1JUX1NUQVRFX1BPSU5URVJT IHwKLQkJICBHRU42XzNEU1RBVEVfVklFV1BPUlRfU1RBVEVfTU9ESUZZX0NDIHwKLQkJICAoNCAt IDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSChjY192cCk7 CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX1ZJRVdQT1JUX1NUQVRFX1BPSU5URVJT IHwKKwkJICAgICBHRU42XzNEU1RBVEVfVklFV1BPUlRfU1RBVEVfTU9ESUZZX0NDIHwKKwkJICAg ICAoNCAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBjY192cCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW42X2Vt aXRfdnMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjZfZW1pdF92cyhzdHJ1 Y3QgaW50ZWxfYmIgKmliYikKIHsKIAkvKiBkaXNhYmxlIFZTIGNvbnN0YW50IGJ1ZmZlciAqLwot CU9VVF9CQVRDSChHRU42XzNEU1RBVEVfQ09OU1RBTlRfVlMgfCAoNSAtIDIpKTsKLQlPVVRfQkFU Q0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0K LQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX1ZTIHwgKDYgLSAyKSk7Ci0JT1VUX0JBVENIKDApOyAv KiBubyBWUyBrZXJuZWwgKi8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9C QVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7IC8qIHBhc3MtdGhyb3VnaCAqLworCWludGVsX2JiX291 dChpYmIsIEdFTjZfM0RTVEFURV9DT05TVEFOVF9WUyB8ICg1IC0gMikpOworCWludGVsX2JiX291 dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDAp OworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNU QVRFX1ZTIHwgKDYgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qIG5vIFZTIGtlcm5l bCAqLworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWlu dGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOyAvKiBwYXNzLXRocm91 Z2ggKi8KIH0KIAogc3RhdGljIHZvaWQKLWdlbjZfZW1pdF9ncyhzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoKQorZ2VuNl9lbWl0X2dzKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewogCS8q IGRpc2FibGUgR1MgY29uc3RhbnQgYnVmZmVyICovCi0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9D T05TVEFOVF9HUyB8ICg1IC0gMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0J T1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU42XzNEU1RBVEVf R1MgfCAoNyAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7IC8qIG5vIEdTIGtlcm5lbCAqLwotCU9VVF9C QVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsK LQlPVVRfQkFUQ0goMCk7IC8qIHBhc3MtdGhyb3VnaCAqLworCWludGVsX2JiX291dChpYmIsIEdF TjZfM0RTVEFURV9DT05TVEFOVF9HUyB8ICg1IC0gMikpOworCWludGVsX2JiX291dChpYmIsIDAp OworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX0dTIHwg KDcgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qIG5vIEdTIGtlcm5lbCAqLworCWlu dGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291 dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDAp OyAvKiBwYXNzLXRocm91Z2ggKi8KIH0KIAogc3RhdGljIHZvaWQKLWdlbjZfZW1pdF9jbGlwKHN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW42X2VtaXRfY2xpcChzdHJ1Y3QgaW50 ZWxfYmIgKmliYikKIHsKLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX0NMSVAgfCAoNCAtIDIpKTsK LQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOyAvKiBwYXNzLXRocm91Z2ggKi8KLQlPVVRf QkFUQ0goMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX0NMSVAgfCAoNCAtIDIp KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogcGFz cy10aHJvdWdoICovCisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1n ZW42X2VtaXRfd21fY29uc3RhbnRzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitn ZW42X2VtaXRfd21fY29uc3RhbnRzKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewogCS8qIGRpc2Fi bGUgV00gY29uc3RhbnQgYnVmZmVyICovCi0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9DT05TVEFO VF9QUyB8ICg1IC0gMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JB VENIKDApOwotCU9VVF9CQVRDSCgwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42XzNEU1RBVEVf Q09OU1RBTlRfUFMgfCAoNSAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjZfZW1pdF9udWxsX2RlcHRoX2J1ZmZlcihzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuNl9lbWl0X251bGxfZGVwdGhfYnVmZmVy KHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewotCU9VVF9CQVRDSChHRU40XzNEU1RBVEVfREVQVEhf QlVGRkVSIHwgKDcgLSAyKSk7Ci0JT1VUX0JBVENIKFNVUkZBQ0VfTlVMTCA8PCBHRU40XzNEU1RB VEVfREVQVEhfQlVGRkVSX1RZUEVfU0hJRlQgfAotCQkgIEdFTjRfREVQVEhGT1JNQVRfRDMyX0ZM T0FUIDw8IEdFTjRfM0RTVEFURV9ERVBUSF9CVUZGRVJfRk9STUFUX1NISUZUKTsKLQlPVVRfQkFU Q0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0J T1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjRfM0RTVEFURV9DTEVBUl9QQVJBTVMgfCAo MiAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF8zRFNUQVRF X0RFUFRIX0JVRkZFUiB8ICg3IC0gMikpOworCWludGVsX2JiX291dChpYmIsIFNVUkZBQ0VfTlVM TCA8PCBHRU40XzNEU1RBVEVfREVQVEhfQlVGRkVSX1RZUEVfU0hJRlQgfAorCQkgICAgIEdFTjRf REVQVEhGT1JNQVRfRDMyX0ZMT0FUIDw8IEdFTjRfM0RTVEFURV9ERVBUSF9CVUZGRVJfRk9STUFU X1NISUZUKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjRfM0RTVEFURV9DTEVBUl9Q QVJBTVMgfCAoMiAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0KIAogc3RhdGljIHZv aWQKLWdlbjZfZW1pdF9pbnZhcmlhbnQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkK K2dlbjZfZW1pdF9pbnZhcmlhbnQoc3RydWN0IGludGVsX2JiICppYmIpCiB7Ci0JT1VUX0JBVENI KEc0WF9QSVBFTElORV9TRUxFQ1QgfCBQSVBFTElORV9TRUxFQ1RfM0QpOworCWludGVsX2JiX291 dChpYmIsIEc0WF9QSVBFTElORV9TRUxFQ1QgfCBQSVBFTElORV9TRUxFQ1RfM0QpOwogCi0JT1VU X0JBVENIKEdFTjZfM0RTVEFURV9NVUxUSVNBTVBMRSB8ICgzIC0gMikpOwotCU9VVF9CQVRDSChH RU42XzNEU1RBVEVfTVVMVElTQU1QTEVfUElYRUxfTE9DQVRJT05fQ0VOVEVSIHwKLQkJICBHRU42 XzNEU1RBVEVfTVVMVElTQU1QTEVfTlVNU0FNUExFU18xKTsgLyogMSBzYW1wbGUvcGl4ZWwgKi8K LQlPVVRfQkFUQ0goMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX01VTFRJU0FN UExFIHwgKDMgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX01VTFRJU0FN UExFX1BJWEVMX0xPQ0FUSU9OX0NFTlRFUiB8CisJCSAgICAgR0VONl8zRFNUQVRFX01VTFRJU0FN UExFX05VTVNBTVBMRVNfMSk7IC8qIDEgc2FtcGxlL3BpeGVsICovCisJaW50ZWxfYmJfb3V0KGli YiwgMCk7CiAKLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX1NBTVBMRV9NQVNLIHwgKDIgLSAyKSk7 Ci0JT1VUX0JBVENIKDEpOworCWludGVsX2JiX291dChpYmIsIEdFTjZfM0RTVEFURV9TQU1QTEVf TUFTSyB8ICgyIC0gMikpOworCWludGVsX2JiX291dChpYmIsIDEpOwogfQogCiBzdGF0aWMgdm9p ZAotZ2VuNl9lbWl0X2NjKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90 IGJsZW5kKQorZ2VuNl9lbWl0X2NjKHN0cnVjdCBpbnRlbF9iYiAqaWJiLCB1aW50MzJfdCBibGVu ZCkKIHsKLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX0NDX1NUQVRFX1BPSU5URVJTIHwgKDQgLSAy KSk7Ci0JT1VUX0JBVENIKGJsZW5kIHwgMSk7Ci0JT1VUX0JBVENIKDEwMjQgfCAxKTsKLQlPVVRf QkFUQ0goMTAyNCB8IDEpOworCWludGVsX2JiX291dChpYmIsIEdFTjZfM0RTVEFURV9DQ19TVEFU RV9QT0lOVEVSUyB8ICg0IC0gMikpOworCWludGVsX2JiX291dChpYmIsIGJsZW5kIHwgMSk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMTAyNCB8IDEpOworCWludGVsX2JiX291dChpYmIsIDEwMjQgfCAx KTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjZfZW1pdF9zYW1wbGVyKHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IHN0YXRlKQorZ2VuNl9lbWl0X3NhbXBsZXIoc3RydWN0 IGludGVsX2JiICppYmIsIHVpbnQzMl90IHN0YXRlKQogewotCU9VVF9CQVRDSChHRU42XzNEU1RB VEVfU0FNUExFUl9TVEFURV9QT0lOVEVSUyB8Ci0JCSAgR0VONl8zRFNUQVRFX1NBTVBMRVJfU1RB VEVfTU9ESUZZX1BTIHwKLQkJICAoNCAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7IC8qIFZTICovCi0J T1VUX0JBVENIKDApOyAvKiBHUyAqLwotCU9VVF9CQVRDSChzdGF0ZSk7CisJaW50ZWxfYmJfb3V0 KGliYiwgR0VONl8zRFNUQVRFX1NBTVBMRVJfU1RBVEVfUE9JTlRFUlMgfAorCQkgICAgIEdFTjZf M0RTVEFURV9TQU1QTEVSX1NUQVRFX01PRElGWV9QUyB8CisJCSAgICAgKDQgLSAyKSk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7IC8qIFZTICovCisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qIEdT ICovCisJaW50ZWxfYmJfb3V0KGliYiwgc3RhdGUpOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuNl9l bWl0X3NmKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW42X2VtaXRfc2Yoc3Ry dWN0IGludGVsX2JiICppYmIpCiB7Ci0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9TRiB8ICgyMCAt IDIpKTsKLQlPVVRfQkFUQ0goMSA8PCBHRU42XzNEU1RBVEVfU0ZfTlVNX09VVFBVVFNfU0hJRlQg fAotCQkgIDEgPDwgR0VONl8zRFNUQVRFX1NGX1VSQl9FTlRSWV9SRUFEX0xFTkdUSF9TSElGVCB8 Ci0JCSAgMSA8PCBHRU42XzNEU1RBVEVfU0ZfVVJCX0VOVFJZX1JFQURfT0ZGU0VUX1NISUZUKTsK LQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9TRl9DVUxMX05PTkUpOwot CU9VVF9CQVRDSCgyIDw8IEdFTjZfM0RTVEFURV9TRl9UUklGQU5fUFJPVk9LRV9TSElGVCk7IC8q IERXNCAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwot CU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7IC8qIERXOSAqLwotCU9VVF9CQVRDSCgwKTsK LQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFU Q0goMCk7IC8qIERXMTQgKi8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9C QVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOyAvKiBEVzE5ICovCisJaW50 ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX1NGIHwgKDIwIC0gMikpOworCWludGVsX2JiX291 dChpYmIsIDEgPDwgR0VONl8zRFNUQVRFX1NGX05VTV9PVVRQVVRTX1NISUZUIHwKKwkJICAgICAx IDw8IEdFTjZfM0RTVEFURV9TRl9VUkJfRU5UUllfUkVBRF9MRU5HVEhfU0hJRlQgfAorCQkgICAg IDEgPDwgR0VONl8zRFNUQVRFX1NGX1VSQl9FTlRSWV9SRUFEX09GRlNFVF9TSElGVCk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX1NGX0NV TExfTk9ORSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMiA8PCBHRU42XzNEU1RBVEVfU0ZfVFJJRkFO X1BST1ZPS0VfU0hJRlQpOyAvKiBEVzQgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogRFc5ICovCisJaW50ZWxfYmJfb3V0 KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7 CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qIERXMTQg Ki8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCAwKTsgLyogRFcxOSAqLwogfQogCiBzdGF0aWMgdm9pZAotZ2VuNl9lbWl0X3dtKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIGludCBrZXJuZWwpCitnZW42X2VtaXRfd20oc3Ry dWN0IGludGVsX2JiICppYmIsIGludCBrZXJuZWwpCiB7Ci0JT1VUX0JBVENIKEdFTjZfM0RTVEFU RV9XTSB8ICg5IC0gMikpOwotCU9VVF9CQVRDSChrZXJuZWwpOwotCU9VVF9CQVRDSCgxIDw8IEdF TjZfM0RTVEFURV9XTV9TQU1QTEVSX0NPVU5UX1NISUZUIHwKLQkJICAyIDw8IEdFTjZfM0RTVEFU RV9XTV9CSU5ESU5HX1RBQkxFX0VOVFJZX0NPVU5UX1NISUZUKTsKLQlPVVRfQkFUQ0goMCk7Ci0J T1VUX0JBVENIKDYgPDwgR0VONl8zRFNUQVRFX1dNX0RJU1BBVENIX1NUQVJUX0dSRl8wX1NISUZU KTsgLyogRFc0ICovCi0JT1VUX0JBVENIKCg0MCAtIDEpIDw8IEdFTjZfM0RTVEFURV9XTV9NQVhf VEhSRUFEU19TSElGVCB8Ci0JCSAgR0VONl8zRFNUQVRFX1dNX0RJU1BBVENIX0VOQUJMRSB8Ci0J CSAgR0VONl8zRFNUQVRFX1dNXzE2X0RJU1BBVENIX0VOQUJMRSk7Ci0JT1VUX0JBVENIKDEgPDwg R0VONl8zRFNUQVRFX1dNX05VTV9TRl9PVVRQVVRTX1NISUZUIHwKLQkJICBHRU42XzNEU1RBVEVf V01fUEVSU1BFQ1RJVkVfUElYRUxfQkFSWUNFTlRSSUMpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRf QkFUQ0goMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX1dNIHwgKDkgLSAyKSk7 CisJaW50ZWxfYmJfb3V0KGliYiwga2VybmVsKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAxIDw8IEdF TjZfM0RTVEFURV9XTV9TQU1QTEVSX0NPVU5UX1NISUZUIHwKKwkJICAgICAyIDw8IEdFTjZfM0RT VEFURV9XTV9CSU5ESU5HX1RBQkxFX0VOVFJZX0NPVU5UX1NISUZUKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCA2IDw8IEdFTjZfM0RTVEFURV9XTV9ESVNQQVRD SF9TVEFSVF9HUkZfMF9TSElGVCk7IC8qIERXNCAqLworCWludGVsX2JiX291dChpYmIsICg0MCAt IDEpIDw8IEdFTjZfM0RTVEFURV9XTV9NQVhfVEhSRUFEU19TSElGVCB8CisJCSAgICAgR0VONl8z RFNUQVRFX1dNX0RJU1BBVENIX0VOQUJMRSB8CisJCSAgICAgR0VONl8zRFNUQVRFX1dNXzE2X0RJ U1BBVENIX0VOQUJMRSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMSA8PCBHRU42XzNEU1RBVEVfV01f TlVNX1NGX09VVFBVVFNfU0hJRlQgfAorCQkgICAgIEdFTjZfM0RTVEFURV9XTV9QRVJTUEVDVElW RV9QSVhFTF9CQVJZQ0VOVFJJQyk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW42X2VtaXRfYmluZGluZ190YWJsZShz dHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCB3bV90YWJsZSkKK2dlbjZf ZW1pdF9iaW5kaW5nX3RhYmxlKHN0cnVjdCBpbnRlbF9iYiAqaWJiLCB1aW50MzJfdCB3bV90YWJs ZSkKIHsKLQlPVVRfQkFUQ0goR0VONF8zRFNUQVRFX0JJTkRJTkdfVEFCTEVfUE9JTlRFUlMgfAot CQkgIEdFTjZfM0RTVEFURV9CSU5ESU5HX1RBQkxFX01PRElGWV9QUyB8Ci0JCSAgKDQgLSAyKSk7 Ci0JT1VUX0JBVENIKDApOwkJLyogdnMgKi8KLQlPVVRfQkFUQ0goMCk7CQkvKiBncyAqLwotCU9V VF9CQVRDSCh3bV90YWJsZSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF8zRFNUQVRFX0JJTkRJ TkdfVEFCTEVfUE9JTlRFUlMgfAorCQkgICAgIEdFTjZfM0RTVEFURV9CSU5ESU5HX1RBQkxFX01P RElGWV9QUyB8CisJCSAgICAgKDQgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CQkvKiB2 cyAqLworCWludGVsX2JiX291dChpYmIsIDApOwkJLyogZ3MgKi8KKwlpbnRlbF9iYl9vdXQoaWJi LCB3bV90YWJsZSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW42X2VtaXRfZHJhd2luZ19yZWN0YW5n bGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgY29uc3Qgc3RydWN0IGlndF9idWYg KmRzdCkKK2dlbjZfZW1pdF9kcmF3aW5nX3JlY3RhbmdsZShzdHJ1Y3QgaW50ZWxfYmIgKmliYiwg Y29uc3Qgc3RydWN0IGludGVsX2J1ZiAqZHN0KQogewotCU9VVF9CQVRDSChHRU40XzNEU1RBVEVf RFJBV0lOR19SRUNUQU5HTEUgfCAoNCAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENI KChpZ3RfYnVmX2hlaWdodChkc3QpIC0gMSkgPDwgMTYgfCAoaWd0X2J1Zl93aWR0aChkc3QpIC0g MSkpOwotCU9VVF9CQVRDSCgwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40XzNEU1RBVEVfRFJB V0lOR19SRUNUQU5HTEUgfCAoNCAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAoaW50ZWxfYnVmX2hlaWdodChkc3QpIC0gMSkgPDwgMTYgfCAoaW50ZWxf YnVmX3dpZHRoKGRzdCkgLSAxKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9CiAKIHN0YXRp YyB2b2lkCi1nZW42X2VtaXRfdmVydGV4X2VsZW1lbnRzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gpCitnZW42X2VtaXRfdmVydGV4X2VsZW1lbnRzKHN0cnVjdCBpbnRlbF9iYiAqaWJi KQogewogCS8qIFRoZSBWVUUgbGF5b3V0CiAJICogICAgZHdvcmQgMC0zOiBwYWQgKDAuMCwgMC4w LCAwLjAuIDAuMCkKQEAgLTM2OSw1NCArMzU3LDU0IEBAIGdlbjZfZW1pdF92ZXJ0ZXhfZWxlbWVu dHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKIAkgKgogCSAqIGR3b3JkIDQtMTEg YXJlIGZldGNoZWQgZnJvbSB2ZXJ0ZXggYnVmZmVyCiAJICovCi0JT1VUX0JBVENIKEdFTjRfM0RT VEFURV9WRVJURVhfRUxFTUVOVFMgfCAoMiAqIDMgKyAxIC0gMikpOworCWludGVsX2JiX291dChp YmIsIEdFTjRfM0RTVEFURV9WRVJURVhfRUxFTUVOVFMgfCAoMiAqIDMgKyAxIC0gMikpOwogCi0J T1VUX0JBVENIKDAgPDwgR0VONl9WRTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8IEdFTjZf VkUwX1ZBTElEIHwKLQkJICBTVVJGQUNFRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCA8PCBWRTBf Rk9STUFUX1NISUZUIHwKLQkJICAwIDw8IFZFMF9PRkZTRVRfU0hJRlQpOwotCU9VVF9CQVRDSChH RU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzBfU0hJRlQgfAotCQkg IEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfMV9TSElGVCB8Ci0J CSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NISUZUIHwK LQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQp OworCWludGVsX2JiX291dChpYmIsIDAgPDwgR0VONl9WRTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9T SElGVCB8IEdFTjZfVkUwX1ZBTElEIHwKKwkJICAgICBTVVJGQUNFRk9STUFUX1IzMkczMkIzMkEz Ml9GTE9BVCA8PCBWRTBfRk9STUFUX1NISUZUIHwKKwkJICAgICAwIDw8IFZFMF9PRkZTRVRfU0hJ RlQpOworCWludGVsX2JiX291dChpYmIsIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFf VkZDT01QT05FTlRfMF9TSElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8 IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKKwkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JF XzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05FTlRf U1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfM19TSElGVCk7CiAKIAkvKiB4LHkgKi8KLQlPVVRf QkFUQ0goMCA8PCBHRU42X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZUIHwgR0VONl9WRTBf VkFMSUQgfAotCQkgIFNVUkZBQ0VGT1JNQVRfUjE2RzE2X1NTQ0FMRUQgPDwgVkUwX0ZPUk1BVF9T SElGVCB8Ci0JCSAgMCA8PCBWRTBfT0ZGU0VUX1NISUZUKTsgLyogb2Zmc2V0cyB2YiBpbiBieXRl cyAqLwotCU9VVF9CQVRDSChHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZDT01Q T05FTlRfMF9TSElGVCB8Ci0JCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUxX1ZG Q09NUE9ORU5UXzFfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMV9GTFQgPDwg VkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMV9G TFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQpOworCWludGVsX2JiX291dChpYmIsIDAgPDwg R0VONl9WRTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8IEdFTjZfVkUwX1ZBTElEIHwKKwkJ ICAgICBTVVJGQUNFRk9STUFUX1IxNkcxNl9TU0NBTEVEIDw8IFZFMF9GT1JNQVRfU0hJRlQgfAor CQkgICAgIDAgPDwgVkUwX09GRlNFVF9TSElGVCk7IC8qIG9mZnNldHMgdmIgaW4gYnl0ZXMgKi8K KwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZD T01QT05FTlRfMF9TSElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwg VkUxX1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVf MV9GTFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05F TlRfU1RPUkVfMV9GTFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQpOwogCiAJLyogdTAsIHYw ICovCi0JT1VUX0JBVENIKDAgPDwgR0VONl9WRTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8 IEdFTjZfVkUwX1ZBTElEIHwKLQkJICBTVVJGQUNFRk9STUFUX1IzMkczMl9GTE9BVCA8PCBWRTBf Rk9STUFUX1NISUZUIHwKLQkJICA0IDw8IFZFMF9PRkZTRVRfU0hJRlQpOwkvKiBvZmZzZXQgdmIg aW4gYnl0ZXMgKi8KLQlPVVRfQkFUQ0goR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUx X1ZGQ09NUE9ORU5UXzBfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8 IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKLQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAg PDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVf MCA8PCBWRTFfVkZDT01QT05FTlRfM19TSElGVCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCA8PCBH RU42X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZUIHwgR0VONl9WRTBfVkFMSUQgfAorCQkg ICAgIFNVUkZBQ0VGT1JNQVRfUjMyRzMyX0ZMT0FUIDw8IFZFMF9GT1JNQVRfU0hJRlQgfAorCQkg ICAgIDQgPDwgVkUwX09GRlNFVF9TSElGVCk7CS8qIG9mZnNldCB2YiBpbiBieXRlcyAqLworCWlu dGVsX2JiX291dChpYmIsIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBP TkVOVF8wX1NISUZUIHwKKwkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFf VkZDT01QT05FTlRfMV9TSElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8 IFZFMV9WRkNPTVBPTkVOVF8yX1NISUZUIHwKKwkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JF XzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQpOwogfQogCiBzdGF0aWMgdWludDMyX3QKLWdl bjZfY3JlYXRlX2NjX3ZpZXdwb3J0KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitn ZW42X2NyZWF0ZV9jY192aWV3cG9ydChzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKIAlzdHJ1Y3Qg Z2VuNF9jY192aWV3cG9ydCAqdnA7CiAKLQl2cCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFf YWxsb2MoYmF0Y2gsIHNpemVvZigqdnApLCAzMik7CisJdnAgPSBpbnRlbF9iYl9wdHJfYWxpZ24o aWJiLCAzMik7CiAKIAl2cC0+bWluX2RlcHRoID0gLTEuZTM1OwogCXZwLT5tYXhfZGVwdGggPSAx LmUzNTsKIAotCXJldHVybiBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChiYXRjaCwg dnApOworCXJldHVybiBpbnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNldChpYmIsIHNp emVvZigqdnApKTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW42X2NyZWF0ZV9jY19ibGVuZChz dHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuNl9jcmVhdGVfY2NfYmxlbmQoc3Ry dWN0IGludGVsX2JiICppYmIpCiB7CiAJc3RydWN0IGdlbjZfYmxlbmRfc3RhdGUgKmJsZW5kOwog Ci0JYmxlbmQgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX2FsbG9jKGJhdGNoLCBzaXplb2Yo KmJsZW5kKSwgNjQpOworCWJsZW5kID0gaW50ZWxfYmJfcHRyX2FsaWduKGliYiwgNjQpOwogCiAJ YmxlbmQtPmJsZW5kMC5kZXN0X2JsZW5kX2ZhY3RvciA9IEdFTjZfQkxFTkRGQUNUT1JfWkVSTzsK IAlibGVuZC0+YmxlbmQwLnNvdXJjZV9ibGVuZF9mYWN0b3IgPSBHRU42X0JMRU5ERkFDVE9SX09O RTsKQEAgLTQyNiwyNSArNDE0LDI0IEBAIGdlbjZfY3JlYXRlX2NjX2JsZW5kKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCiAJYmxlbmQtPmJsZW5kMS5wb3N0X2JsZW5kX2NsYW1wX2Vu YWJsZSA9IDE7CiAJYmxlbmQtPmJsZW5kMS5wcmVfYmxlbmRfY2xhbXBfZW5hYmxlID0gMTsKIAot CXJldHVybiBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChiYXRjaCwgYmxlbmQpOwor CXJldHVybiBpbnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNldChpYmIsIHNpemVvZigq YmxlbmQpKTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW42X2NyZWF0ZV9rZXJuZWwoc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjZfY3JlYXRlX2tlcm5lbChzdHJ1Y3QgaW50 ZWxfYmIgKmliYikKIHsKLQlyZXR1cm4gaW50ZWxfYmF0Y2hidWZmZXJfY29weV9kYXRhKGJhdGNo LCBwc19rZXJuZWxfbm9tYXNrX2FmZmluZSwKLQkJCSAgc2l6ZW9mKHBzX2tlcm5lbF9ub21hc2tf YWZmaW5lKSwKLQkJCSAgNjQpOworCXJldHVybiBpbnRlbF9iYl9jb3B5X2RhdGEoaWJiLCBwc19r ZXJuZWxfbm9tYXNrX2FmZmluZSwKKwkJCQkgIHNpemVvZihwc19rZXJuZWxfbm9tYXNrX2FmZmlu ZSksIDY0KTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW42X2NyZWF0ZV9zYW1wbGVyKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCitnZW42X2NyZWF0ZV9zYW1wbGVyKHN0cnVjdCBp bnRlbF9iYiAqaWJiLAogCQkgICAgc2FtcGxlcl9maWx0ZXJfdCBmaWx0ZXIsCi0JCSAgIHNhbXBs ZXJfZXh0ZW5kX3QgZXh0ZW5kKQorCQkgICAgc2FtcGxlcl9leHRlbmRfdCBleHRlbmQpCiB7CiAJ c3RydWN0IGdlbjZfc2FtcGxlcl9zdGF0ZSAqc3M7CiAKLQlzcyA9IGludGVsX2JhdGNoYnVmZmVy X3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigqc3MpLCAzMik7CisJc3MgPSBpbnRlbF9iYl9w dHJfYWxpZ24oaWJiLCAzMik7CiAJc3MtPnNzMC5sb2RfcHJlY2xhbXAgPSAxOwkvKiBHTCBtb2Rl ICovCiAKIAkvKiBXZSB1c2UgdGhlIGxlZ2FjeSBtb2RlIHRvIGdldCB0aGUgc2VtYW50aWNzIHNw ZWNpZmllZCBieQpAQCAtNDg3LDEwNyArNDc0LDExOSBAQCBnZW42X2NyZWF0ZV9zYW1wbGVyKHN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAJCWJyZWFrOwogCX0KIAotCXJldHVybiBp bnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChiYXRjaCwgc3MpOworCXJldHVybiBpbnRl bF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNldChpYmIsIHNpemVvZigqc3MpKTsKIH0KIAot c3RhdGljIHZvaWQgZ2VuNl9lbWl0X3ZlcnRleF9idWZmZXIoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCkKK3N0YXRpYyB2b2lkIGdlbjZfZW1pdF92ZXJ0ZXhfYnVmZmVyKHN0cnVjdCBp bnRlbF9iYiAqaWJiKQogewotCU9VVF9CQVRDSChHRU40XzNEU1RBVEVfVkVSVEVYX0JVRkZFUlMg fCAzKTsKLQlPVVRfQkFUQ0goR0VONl9WQjBfVkVSVEVYREFUQSB8Ci0JCSAgMCA8PCBHRU42X1ZC MF9CVUZGRVJfSU5ERVhfU0hJRlQgfAotCQkgIFZFUlRFWF9TSVpFIDw8IFZCMF9CVUZGRVJfUElU Q0hfU0hJRlQpOwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9WRVJURVgs IDAsIDApOwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9WRVJURVgsIDAs IGJhdGNoLT5iby0+c2l6ZS0xKTsKLQlPVVRfQkFUQ0goMCk7CisJaW50ZWxfYmJfb3V0KGliYiwg R0VONF8zRFNUQVRFX1ZFUlRFWF9CVUZGRVJTIHwgMyk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VO Nl9WQjBfVkVSVEVYREFUQSB8CisJCSAgICAgMCA8PCBHRU42X1ZCMF9CVUZGRVJfSU5ERVhfU0hJ RlQgfAorCQkgICAgIFZFUlRFWF9TSVpFIDw8IFZCMF9CVUZGRVJfUElUQ0hfU0hJRlQpOworCWlu dGVsX2JiX2VtaXRfcmVsb2MoaWJiLCBpYmItPmhhbmRsZSwgSTkxNV9HRU1fRE9NQUlOX1ZFUlRF WCwgMCwKKwkJCSAgICAwLCBpYmItPmJhdGNoX29mZnNldCk7CisJaW50ZWxfYmJfZW1pdF9yZWxv YyhpYmIsIGliYi0+aGFuZGxlLCBJOTE1X0dFTV9ET01BSU5fVkVSVEVYLCAwLAorCQkJICAgIGli Yi0+c2l6ZSAtIDEsIGliYi0+YmF0Y2hfb2Zmc2V0KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsK IH0KIAotc3RhdGljIHVpbnQzMl90IGdlbjZfZW1pdF9wcmltaXRpdmUoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCkKK3N0YXRpYyB1aW50MzJfdCBnZW42X2VtaXRfcHJpbWl0aXZlKHN0 cnVjdCBpbnRlbF9iYiAqaWJiKQogewogCXVpbnQzMl90IG9mZnNldDsKIAotCU9VVF9CQVRDSChH RU40XzNEUFJJTUlUSVZFIHwKLQkJICBHRU40XzNEUFJJTUlUSVZFX1ZFUlRFWF9TRVFVRU5USUFM IHwKLQkJICBfM0RQUklNX1JFQ1RMSVNUIDw8IEdFTjRfM0RQUklNSVRJVkVfVE9QT0xPR1lfU0hJ RlQgfAotCQkgIDAgPDwgOSB8Ci0JCSAgNCk7Ci0JT1VUX0JBVENIKDMpOwkvKiB2ZXJ0ZXggY291 bnQgKi8KLQlvZmZzZXQgPSBiYXRjaC0+cHRyIC0gYmF0Y2gtPmJ1ZmZlcjsKLQlPVVRfQkFUQ0go MCk7CS8qIHZlcnRleF9pbmRleCAqLwotCU9VVF9CQVRDSCgxKTsJLyogc2luZ2xlIGluc3RhbmNl ICovCi0JT1VUX0JBVENIKDApOwkvKiBzdGFydCBpbnN0YW5jZSBsb2NhdGlvbiAqLwotCU9VVF9C QVRDSCgwKTsJLyogaW5kZXggYnVmZmVyIG9mZnNldCwgaWdub3JlZCAqLworCWludGVsX2JiX291 dChpYmIsIEdFTjRfM0RQUklNSVRJVkUgfAorCQkgICAgIEdFTjRfM0RQUklNSVRJVkVfVkVSVEVY X1NFUVVFTlRJQUwgfAorCQkgICAgIF8zRFBSSU1fUkVDVExJU1QgPDwgR0VONF8zRFBSSU1JVElW RV9UT1BPTE9HWV9TSElGVCB8CisJCSAgICAgMCA8PCA5IHwKKwkJICAgICA0KTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAzKTsJLyogdmVydGV4IGNvdW50ICovCisJb2Zmc2V0ID0gaW50ZWxfYmJfb2Zm c2V0KGliYik7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CS8qIHZlcnRleF9pbmRleCAqLworCWlu dGVsX2JiX291dChpYmIsIDEpOwkvKiBzaW5nbGUgaW5zdGFuY2UgKi8KKwlpbnRlbF9iYl9vdXQo aWJiLCAwKTsJLyogc3RhcnQgaW5zdGFuY2UgbG9jYXRpb24gKi8KKwlpbnRlbF9iYl9vdXQoaWJi LCAwKTsJLyogaW5kZXggYnVmZmVyIG9mZnNldCwgaWdub3JlZCAqLwogCiAJcmV0dXJuIG9mZnNl dDsKIH0KIAotdm9pZCBnZW42X3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoLAotCQkJICBkcm1faW50ZWxfY29udGV4dCAqY29udGV4dCwKLQkJCSAgY29uc3Qg c3RydWN0IGlndF9idWYgKnNyYywgdW5zaWduZWQgc3JjX3gsIHVuc2lnbmVkIHNyY195LAotCQkJ ICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LAotCQkJICBjb25zdCBzdHJ1Y3QgaWd0 X2J1ZiAqZHN0LCB1bnNpZ25lZCBkc3RfeCwgdW5zaWduZWQgZHN0X3kpCit2b2lkIGdlbjZfcmVu ZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJICB1aW50MzJfdCBjdHgsCisJ CQkgIHN0cnVjdCBpbnRlbF9idWYgKnNyYywKKwkJCSAgdWludDMyX3Qgc3JjX3gsIHVpbnQzMl90 IHNyY195LAorCQkJICB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LAorCQkJICBzdHJ1 Y3QgaW50ZWxfYnVmICpkc3QsCisJCQkgIHVpbnQzMl90IGRzdF94LCB1aW50MzJfdCBkc3RfeSkK IHsKIAl1aW50MzJfdCB3bV9zdGF0ZSwgd21fa2VybmVsLCB3bV90YWJsZTsKIAl1aW50MzJfdCBj Y192cCwgY2NfYmxlbmQsIG9mZnNldDsKIAl1aW50MzJfdCBiYXRjaF9lbmQ7CiAKIAlpZ3RfYXNz ZXJ0KHNyYy0+YnBwID09IGRzdC0+YnBwKTsKLQlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF93aXRo X2NvbnRleHQoYmF0Y2gsIGNvbnRleHQpOwogCi0JYmF0Y2gtPnB0ciA9IGJhdGNoLT5idWZmZXIg KyAxMDI0OwotCWludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsIDY0LCA2NCk7 Ci0Jd21fdGFibGUgID0gZ2VuNl9iaW5kX3N1cmZhY2VzKGJhdGNoLCBzcmMsIGRzdCk7Ci0Jd21f a2VybmVsID0gZ2VuNl9jcmVhdGVfa2VybmVsKGJhdGNoKTsKLQl3bV9zdGF0ZSAgPSBnZW42X2Ny ZWF0ZV9zYW1wbGVyKGJhdGNoLAorCWludGVsX2JiX2ZsdXNoX3JlbmRlcl93aXRoX2NvbnRleHQo aWJiLCBjdHgpOworCisJaW50ZWxfYmJfYWRkX2ludGVsX2J1ZihpYmIsIGRzdCwgdHJ1ZSk7CisJ aW50ZWxfYmJfYWRkX2ludGVsX2J1ZihpYmIsIHNyYywgZmFsc2UpOworCisJaW50ZWxfYmJfcHRy X3NldChpYmIsIDEwMjQgKyA2NCk7CisKKwl3bV90YWJsZSAgPSBnZW42X2JpbmRfc3VyZmFjZXMo aWJiLCBzcmMsIGRzdCk7CisJd21fa2VybmVsID0gZ2VuNl9jcmVhdGVfa2VybmVsKGliYik7CisJ d21fc3RhdGUgID0gZ2VuNl9jcmVhdGVfc2FtcGxlcihpYmIsCiAJCQkJCVNBTVBMRVJfRklMVEVS X05FQVJFU1QsCiAJCQkJCVNBTVBMRVJfRVhURU5EX05PTkUpOwogCi0JY2NfdnAgPSBnZW42X2Ny ZWF0ZV9jY192aWV3cG9ydChiYXRjaCk7Ci0JY2NfYmxlbmQgPSBnZW42X2NyZWF0ZV9jY19ibGVu ZChiYXRjaCk7CisJY2NfdnAgPSBnZW42X2NyZWF0ZV9jY192aWV3cG9ydChpYmIpOworCWNjX2Js ZW5kID0gZ2VuNl9jcmVhdGVfY2NfYmxlbmQoaWJiKTsKKworCWludGVsX2JiX3B0cl9zZXQoaWJi LCAwKTsKIAotCWJhdGNoLT5wdHIgPSBiYXRjaC0+YnVmZmVyOworCWdlbjZfZW1pdF9pbnZhcmlh bnQoaWJiKTsKKwlnZW42X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKGliYik7CiAKLQlnZW42X2Vt aXRfaW52YXJpYW50KGJhdGNoKTsKLQlnZW42X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKGJhdGNo KTsKKwlnZW42X2VtaXRfc2lwKGliYik7CisJZ2VuNl9lbWl0X3VyYihpYmIpOwogCi0JZ2VuNl9l bWl0X3NpcChiYXRjaCk7Ci0JZ2VuNl9lbWl0X3VyYihiYXRjaCk7CisJZ2VuNl9lbWl0X3ZpZXdw b3J0cyhpYmIsIGNjX3ZwKTsKKwlnZW42X2VtaXRfdnMoaWJiKTsKKwlnZW42X2VtaXRfZ3MoaWJi KTsKKwlnZW42X2VtaXRfY2xpcChpYmIpOworCWdlbjZfZW1pdF93bV9jb25zdGFudHMoaWJiKTsK KwlnZW42X2VtaXRfbnVsbF9kZXB0aF9idWZmZXIoaWJiKTsKIAotCWdlbjZfZW1pdF92aWV3cG9y dHMoYmF0Y2gsIGNjX3ZwKTsKLQlnZW42X2VtaXRfdnMoYmF0Y2gpOwotCWdlbjZfZW1pdF9ncyhi YXRjaCk7Ci0JZ2VuNl9lbWl0X2NsaXAoYmF0Y2gpOwotCWdlbjZfZW1pdF93bV9jb25zdGFudHMo YmF0Y2gpOwotCWdlbjZfZW1pdF9udWxsX2RlcHRoX2J1ZmZlcihiYXRjaCk7CisJZ2VuNl9lbWl0 X2RyYXdpbmdfcmVjdGFuZ2xlKGliYiwgZHN0KTsKKwlnZW42X2VtaXRfY2MoaWJiLCBjY19ibGVu ZCk7CisJZ2VuNl9lbWl0X3NhbXBsZXIoaWJiLCB3bV9zdGF0ZSk7CisJZ2VuNl9lbWl0X3NmKGli Yik7CisJZ2VuNl9lbWl0X3dtKGliYiwgd21fa2VybmVsKTsKKwlnZW42X2VtaXRfdmVydGV4X2Vs ZW1lbnRzKGliYik7CisJZ2VuNl9lbWl0X2JpbmRpbmdfdGFibGUoaWJiLCB3bV90YWJsZSk7CiAK LQlnZW42X2VtaXRfZHJhd2luZ19yZWN0YW5nbGUoYmF0Y2gsIGRzdCk7Ci0JZ2VuNl9lbWl0X2Nj KGJhdGNoLCBjY19ibGVuZCk7Ci0JZ2VuNl9lbWl0X3NhbXBsZXIoYmF0Y2gsIHdtX3N0YXRlKTsK LQlnZW42X2VtaXRfc2YoYmF0Y2gpOwotCWdlbjZfZW1pdF93bShiYXRjaCwgd21fa2VybmVsKTsK LQlnZW42X2VtaXRfdmVydGV4X2VsZW1lbnRzKGJhdGNoKTsKLQlnZW42X2VtaXRfYmluZGluZ190 YWJsZShiYXRjaCwgd21fdGFibGUpOworCWdlbjZfZW1pdF92ZXJ0ZXhfYnVmZmVyKGliYik7CisJ b2Zmc2V0ID0gZ2VuNl9lbWl0X3ByaW1pdGl2ZShpYmIpOwogCi0JZ2VuNl9lbWl0X3ZlcnRleF9i dWZmZXIoYmF0Y2gpOwotCW9mZnNldCA9IGdlbjZfZW1pdF9wcmltaXRpdmUoYmF0Y2gpOworCWJh dGNoX2VuZCA9IGludGVsX2JiX2VtaXRfYmJlKGliYik7CiAKLQlPVVRfQkFUQ0goTUlfQkFUQ0hf QlVGRkVSX0VORCk7Ci0JYmF0Y2hfZW5kID0gaW50ZWxfYmF0Y2hidWZmZXJfYWxpZ24oYmF0Y2gs IDgpOworCWliYi0+YmF0Y2hbb2Zmc2V0IC8gc2l6ZW9mKHVpbnQzMl90KV0gPQorCQkJYmF0Y2hf cm91bmRfdXB0byhpYmIsIFZFUlRFWF9TSVpFKS9WRVJURVhfU0laRTsKIAotCSoodWludDMyX3Qq KShiYXRjaC0+YnVmZmVyICsgb2Zmc2V0KSA9Ci0JCWJhdGNoX3JvdW5kX3VwdG8oYmF0Y2gsIFZF UlRFWF9TSVpFKS9WRVJURVhfU0laRTsKKwllbWl0X3ZlcnRleF8ycyhpYmIsIGRzdF94ICsgd2lk dGgsIGRzdF95ICsgaGVpZ2h0KTsKKwllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGliYiwgc3JjX3gg KyB3aWR0aCwgaW50ZWxfYnVmX3dpZHRoKHNyYykpOworCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQo aWJiLCBzcmNfeSArIGhlaWdodCwgaW50ZWxfYnVmX2hlaWdodChzcmMpKTsKIAotCWVtaXRfdmVy dGV4XzJzKGJhdGNoLCBkc3RfeCArIHdpZHRoLCBkc3RfeSArIGhlaWdodCk7Ci0JZW1pdF92ZXJ0 ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3ggKyB3aWR0aCwgaWd0X2J1Zl93aWR0aChzcmMpKTsK LQllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGJhdGNoLCBzcmNfeSArIGhlaWdodCwgaWd0X2J1Zl9o ZWlnaHQoc3JjKSk7CisJZW1pdF92ZXJ0ZXhfMnMoaWJiLCBkc3RfeCwgZHN0X3kgKyBoZWlnaHQp OworCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoaWJiLCBzcmNfeCwgaW50ZWxfYnVmX3dpZHRoKHNy YykpOworCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoaWJiLCBzcmNfeSArIGhlaWdodCwgaW50ZWxf YnVmX2hlaWdodChzcmMpKTsKIAotCWVtaXRfdmVydGV4XzJzKGJhdGNoLCBkc3RfeCwgZHN0X3kg KyBoZWlnaHQpOwotCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoYmF0Y2gsIHNyY194LCBpZ3RfYnVm X3dpZHRoKHNyYykpOwotCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoYmF0Y2gsIHNyY195ICsgaGVp Z2h0LCBpZ3RfYnVmX2hlaWdodChzcmMpKTsKKwllbWl0X3ZlcnRleF8ycyhpYmIsIGRzdF94LCBk c3RfeSk7CisJZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChpYmIsIHNyY194LCBpbnRlbF9idWZfd2lk dGgoc3JjKSk7CisJZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChpYmIsIHNyY195LCBpbnRlbF9idWZf aGVpZ2h0KHNyYykpOwogCi0JZW1pdF92ZXJ0ZXhfMnMoYmF0Y2gsIGRzdF94LCBkc3RfeSk7Ci0J ZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3gsIGlndF9idWZfd2lkdGgoc3JjKSk7 Ci0JZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3ksIGlndF9idWZfaGVpZ2h0KHNy YykpOworCS8qIFBvc2l0aW9uIHRvIHZhbGlkIGJhdGNoIGVuZCBwb3NpdGlvbiBmb3IgYmF0Y2gg cmV1c2UgKi8KKwlpbnRlbF9iYl9wdHJfc2V0KGliYiwgYmF0Y2hfZW5kKTsKIAotCWdlbjZfcmVu ZGVyX2ZsdXNoKGJhdGNoLCBjb250ZXh0LCBiYXRjaF9lbmQpOwotCWludGVsX2JhdGNoYnVmZmVy X3Jlc2V0KGJhdGNoKTsKKwlpbnRlbF9iYl9leGVjX3dpdGhfY29udGV4dChpYmIsIGJhdGNoX2Vu ZCwgY3R4LAorCQkJCSAgIEk5MTVfRVhFQ19ERUZBVUxUIHwgSTkxNV9FWEVDX05PX1JFTE9DLAor CQkJCSAgIGZhbHNlKTsKKwlpbnRlbF9iYl9yZXNldChpYmIsIGZhbHNlKTsKIH0KZGlmZiAtLWdp dCBhL2xpYi9yZW5kZXJjb3B5X2dlbjcuYyBiL2xpYi9yZW5kZXJjb3B5X2dlbjcuYwppbmRleCA5 M2I0ZGE3Mi4uNjJlZjQzMjUgMTAwNjQ0Ci0tLSBhL2xpYi9yZW5kZXJjb3B5X2dlbjcuYworKysg Yi9saWIvcmVuZGVyY29weV9nZW43LmMKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlICJkcm0u aCIKICNpbmNsdWRlICJpOTE1X2RybS5oIgogI2luY2x1ZGUgImRybXRlc3QuaCIKLSNpbmNsdWRl ICJpbnRlbF9idWZtZ3IuaCIKKyNpbmNsdWRlICJpbnRlbF9idWZvcHMuaCIKICNpbmNsdWRlICJp bnRlbF9iYXRjaGJ1ZmZlci5oIgogI2luY2x1ZGUgImludGVsX2lvLmgiCiAjaW5jbHVkZSAiaW50 ZWxfY2hpcHNldC5oIgpAQCAtMjAsNiArMjAsMTQgQEAKICNpbmNsdWRlICJnZW43X3JlbmRlci5o IgogI2luY2x1ZGUgImludGVsX3JlZy5oIgogCisjaWYgREVCVUdfUkVOREVSQ1BZCitzdGF0aWMg dm9pZCBkdW1wX2JhdGNoKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQoreworCWludGVsX2JiX2R1bXAo aWJiLCAiL3RtcC9nZW43LWJhdGNoYnVmZmVycy5kdW1wIik7Cit9CisjZWxzZQorI2RlZmluZSBk dW1wX2JhdGNoKHgpIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgogCiBzdGF0aWMgY29uc3QgdWlu dDMyX3QgcHNfa2VybmVsW11bNF0gPSB7CiAJeyAweDAwODAwMDVhLCAweDJlMjA3N2JkLCAweDAw MDAwMGMwLCAweDAwOGQwMDQwIH0sCkBAIC0zMiwxNyArNDAsNiBAQCBzdGF0aWMgY29uc3QgdWlu dDMyX3QgcHNfa2VybmVsW11bNF0gPSB7CiAJeyAweDA1ODAwMDMxLCAweDIwMDAxZmE4LCAweDAw OGQwZTIwLCAweDkwMDMxMDAwIH0sCiB9OwogCi1zdGF0aWMgdm9pZAotZ2VuN19yZW5kZXJfZmx1 c2goc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJICBkcm1faW50ZWxfY29udGV4 dCAqY29udGV4dCwgdWludDMyX3QgYmF0Y2hfZW5kKQotewotCWlndF9hc3NlcnRfZXEoZHJtX2lu dGVsX2JvX3N1YmRhdGEoYmF0Y2gtPmJvLAotCQkJCQkgICAwLCA0MDk2LCBiYXRjaC0+YnVmZmVy KSwKLQkJICAgICAgMCk7Ci0JaWd0X2Fzc2VydF9lcShkcm1faW50ZWxfZ2VtX2JvX2NvbnRleHRf ZXhlYyhiYXRjaC0+Ym8sIGNvbnRleHQsCi0JCQkJCQkgICAgYmF0Y2hfZW5kLCAwKSwKLQkJICAg ICAgMCk7Ci19CiAKIHN0YXRpYyB1aW50MzJfdAogZ2VuN190aWxpbmdfYml0cyh1aW50MzJfdCB0 aWxpbmcpCkBAIC01NiwxNyArNTMsMTcgQEAgZ2VuN190aWxpbmdfYml0cyh1aW50MzJfdCB0aWxp bmcpCiB9CiAKIHN0YXRpYyB1aW50MzJfdAotZ2VuN19iaW5kX2J1ZihzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoLAotCSAgICAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpidWYsCitnZW43 X2JpbmRfYnVmKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRl bF9idWYgKmJ1ZiwKIAkgICAgICBpbnQgaXNfZHN0KQogewogCXVpbnQzMl90IGZvcm1hdCwgKnNz OwogCXVpbnQzMl90IHdyaXRlX2RvbWFpbiwgcmVhZF9kb21haW47Ci0JaW50IHJldDsKKwl1aW50 NjRfdCBhZGRyZXNzOwogCiAJaWd0X2Fzc2VydF9sdGUoYnVmLT5zdXJmYWNlWzBdLnN0cmlkZSwg MjU2KjEwMjQpOwotCWlndF9hc3NlcnRfbHRlKGlndF9idWZfd2lkdGgoYnVmKSwgMTYzODQpOwot CWlndF9hc3NlcnRfbHRlKGlndF9idWZfaGVpZ2h0KGJ1ZiksIDE2Mzg0KTsKKwlpZ3RfYXNzZXJ0 X2x0ZShpbnRlbF9idWZfd2lkdGgoYnVmKSwgMTYzODQpOworCWlndF9hc3NlcnRfbHRlKGludGVs X2J1Zl9oZWlnaHQoYnVmKSwgMTYzODQpOwogCiAJc3dpdGNoIChidWYtPmJwcCkgewogCQljYXNl IDg6IGZvcm1hdCA9IFNVUkZBQ0VGT1JNQVRfUjhfVU5PUk07IGJyZWFrOwpAQCAtODMsNzcgKzgw LDc2IEBAIGdlbjdfYmluZF9idWYoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAkJ cmVhZF9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fU0FNUExFUjsKIAl9CiAKLQlzcyA9IGludGVs X2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsIDggKiBzaXplb2YoKnNzKSwgMzIpOwor CXNzID0gaW50ZWxfYmJfcHRyX2FsaWduKGliYiwgMzIpOwogCiAJc3NbMF0gPSAoU1VSRkFDRV8y RCA8PCBHRU43X1NVUkZBQ0VfVFlQRV9TSElGVCB8CiAJCSBnZW43X3RpbGluZ19iaXRzKGJ1Zi0+ dGlsaW5nKSB8CiAJCWZvcm1hdCA8PCBHRU43X1NVUkZBQ0VfRk9STUFUX1NISUZUKTsKLQlzc1sx XSA9IGJ1Zi0+Ym8tPm9mZnNldDsKLQlzc1syXSA9ICgoaWd0X2J1Zl93aWR0aChidWYpIC0gMSkg IDw8IEdFTjdfU1VSRkFDRV9XSURUSF9TSElGVCB8Ci0JCSAoaWd0X2J1Zl9oZWlnaHQoYnVmKSAt IDEpIDw8IEdFTjdfU1VSRkFDRV9IRUlHSFRfU0hJRlQpOworCisJYWRkcmVzcyA9IGludGVsX2Ji X29mZnNldF9yZWxvYyhpYmIsIGJ1Zi0+aGFuZGxlLAorCQkJCQlyZWFkX2RvbWFpbiwgd3JpdGVf ZG9tYWluLAorCQkJCQlpbnRlbF9iYl9vZmZzZXQoaWJiKSArIDQsCisJCQkJCWJ1Zi0+YWRkci5v ZmZzZXQpOworCXNzWzFdID0gYWRkcmVzczsKKwlzc1syXSA9ICgoaW50ZWxfYnVmX3dpZHRoKGJ1 ZikgLSAxKSAgPDwgR0VON19TVVJGQUNFX1dJRFRIX1NISUZUIHwKKwkJIChpbnRlbF9idWZfaGVp Z2h0KGJ1ZikgLSAxKSA8PCBHRU43X1NVUkZBQ0VfSEVJR0hUX1NISUZUKTsKIAlzc1szXSA9IChi dWYtPnN1cmZhY2VbMF0uc3RyaWRlIC0gMSkgPDwgR0VON19TVVJGQUNFX1BJVENIX1NISUZUOwog CXNzWzRdID0gMDsKLQlpZiAoSVNfVkFMTEVZVklFVyhiYXRjaC0+ZGV2aWQpKQorCWlmIChJU19W QUxMRVlWSUVXKGliYi0+ZGV2aWQpKQogCQlzc1s1XSA9IFZMVl9NT0NTX0wzIDw8IDE2OwogCWVs c2UKIAkJc3NbNV0gPSAoSVZCX01PQ1NfTDMgfCBJVkJfTU9DU19QVEUpIDw8IDE2OwogCXNzWzZd ID0gMDsKIAlzc1s3XSA9IDA7Ci0JaWYgKElTX0hBU1dFTEwoYmF0Y2gtPmRldmlkKSkKKwlpZiAo SVNfSEFTV0VMTChpYmItPmRldmlkKSkKIAkJc3NbN10gfD0gSFNXX1NVUkZBQ0VfU1dJWlpMRShS RUQsIEdSRUVOLCBCTFVFLCBBTFBIQSk7CiAKLQlyZXQgPSBkcm1faW50ZWxfYm9fZW1pdF9yZWxv YyhiYXRjaC0+Ym8sCi0JCQkJICAgICAgaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQo YmF0Y2gsICZzc1sxXSksCi0JCQkJICAgICAgYnVmLT5ibywgMCwKLQkJCQkgICAgICByZWFkX2Rv bWFpbiwgd3JpdGVfZG9tYWluKTsKLQlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsKLQotCXJldHVybiBp bnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChiYXRjaCwgc3MpOworCXJldHVybiBpbnRl bF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNldChpYmIsIDggKiBzaXplb2YoKnNzKSk7CiB9 CiAKIHN0YXRpYyB2b2lkCi1nZW43X2VtaXRfdmVydGV4X2VsZW1lbnRzKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW43X2VtaXRfdmVydGV4X2VsZW1lbnRzKHN0cnVjdCBpbnRl bF9iYiAqaWJiKQogewotCU9VVF9CQVRDSChHRU40XzNEU1RBVEVfVkVSVEVYX0VMRU1FTlRTIHwK LQkJICAoKDIgKiAoMSArIDIpKSArIDEgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF8z RFNUQVRFX1ZFUlRFWF9FTEVNRU5UUyB8CisJCSAgICAgKCgyICogKDEgKyAyKSkgKyAxIC0gMikp OwogCi0JT1VUX0JBVENIKDAgPDwgR0VONl9WRTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8 IEdFTjZfVkUwX1ZBTElEIHwKLQkJICBTVVJGQUNFRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCA8 PCBWRTBfRk9STUFUX1NISUZUIHwKLQkJICAwIDw8IFZFMF9PRkZTRVRfU0hJRlQpOworCWludGVs X2JiX291dChpYmIsIDAgPDwgR0VONl9WRTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8IEdF TjZfVkUwX1ZBTElEIHwKKwkJICAgICBTVVJGQUNFRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCA8 PCBWRTBfRk9STUFUX1NISUZUIHwKKwkJICAgICAwIDw8IFZFMF9PRkZTRVRfU0hJRlQpOwogCi0J T1VUX0JBVENIKEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfMF9T SElGVCB8Ci0JCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8x X1NISUZUIHwKLQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5U XzJfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05F TlRfM19TSElGVCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8w IDw8IFZFMV9WRkNPTVBPTkVOVF8wX1NISUZUIHwKKwkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NU T1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05F TlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfMl9TSElGVCB8CisJCSAgICAgR0VONF9WRkNP TVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZUKTsKIAogCS8qIHgseSAq LwotCU9VVF9CQVRDSCgwIDw8IEdFTjZfVkUwX1ZFUlRFWF9CVUZGRVJfSU5ERVhfU0hJRlQgfCBH RU42X1ZFMF9WQUxJRCB8Ci0JCSAgU1VSRkFDRUZPUk1BVF9SMTZHMTZfU1NDQUxFRCA8PCBWRTBf Rk9STUFUX1NISUZUIHwKLQkJICAwIDw8IFZFMF9PRkZTRVRfU0hJRlQpOyAvKiBvZmZzZXRzIHZi IGluIGJ5dGVzICovCi0JT1VUX0JBVENIKEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZF MV9WRkNPTVBPTkVOVF8wX1NISUZUIHwKLQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8 PCBWRTFfVkZDT01QT05FTlRfMV9TSElGVCB8Ci0JCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8w IDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NISUZUIHwKLQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JF XzFfRkxUIDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZUKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw IDw8IEdFTjZfVkUwX1ZFUlRFWF9CVUZGRVJfSU5ERVhfU0hJRlQgfCBHRU42X1ZFMF9WQUxJRCB8 CisJCSAgICAgU1VSRkFDRUZPUk1BVF9SMTZHMTZfU1NDQUxFRCA8PCBWRTBfRk9STUFUX1NISUZU IHwKKwkJICAgICAwIDw8IFZFMF9PRkZTRVRfU0hJRlQpOyAvKiBvZmZzZXRzIHZiIGluIGJ5dGVz ICovCisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUx X1ZGQ09NUE9ORU5UXzBfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JD IDw8IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKKwkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NU T1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05F TlRfU1RPUkVfMV9GTFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQpOwogCiAJLyogcyx0ICov Ci0JT1VUX0JBVENIKDAgPDwgR0VONl9WRTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8IEdF TjZfVkUwX1ZBTElEIHwKLQkJICBTVVJGQUNFRk9STUFUX1IxNkcxNl9TU0NBTEVEIDw8IFZFMF9G T1JNQVRfU0hJRlQgfAotCQkgIDQgPDwgVkUwX09GRlNFVF9TSElGVCk7ICAvKiBvZmZzZXQgdmIg aW4gYnl0ZXMgKi8KLQlPVVRfQkFUQ0goR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUx X1ZGQ09NUE9ORU5UXzBfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8 IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKLQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAg PDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVf MV9GTFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQpOworCWludGVsX2JiX291dChpYmIsIDAg PDwgR0VONl9WRTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8IEdFTjZfVkUwX1ZBTElEIHwK KwkJICAgICBTVVJGQUNFRk9STUFUX1IxNkcxNl9TU0NBTEVEIDw8IFZFMF9GT1JNQVRfU0hJRlQg fAorCQkgICAgIDQgPDwgVkUwX09GRlNFVF9TSElGVCk7ICAvKiBvZmZzZXQgdmIgaW4gYnl0ZXMg Ki8KKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFf VkZDT01QT05FTlRfMF9TSElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMg PDwgVkUxX1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RP UkVfMCA8PCBWRTFfVkZDT01QT05FTlRfMl9TSElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVO VF9TVE9SRV8xX0ZMVCA8PCBWRTFfVkZDT01QT05FTlRfM19TSElGVCk7CiB9CiAKIHN0YXRpYyB1 aW50MzJfdAotZ2VuN19jcmVhdGVfdmVydGV4X2J1ZmZlcihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoLAorZ2VuN19jcmVhdGVfdmVydGV4X2J1ZmZlcihzdHJ1Y3QgaW50ZWxfYmIgKmli YiwKIAkJCSAgdWludDMyX3Qgc3JjX3gsIHVpbnQzMl90IHNyY195LAogCQkJICB1aW50MzJfdCBk c3RfeCwgdWludDMyX3QgZHN0X3ksCiAJCQkgIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWln aHQpCiB7CiAJdWludDE2X3QgKnY7CiAKLQl2ID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9h bGxvYyhiYXRjaCwgMTIgKiBzaXplb2YoKnYpLCA4KTsKKwl2ID0gaW50ZWxfYmJfcHRyX2FsaWdu KGliYiwgOCk7CiAKIAl2WzBdID0gZHN0X3ggKyB3aWR0aDsKIAl2WzFdID0gZHN0X3kgKyBoZWln aHQ7CkBAIC0xNzAsNjYgKzE2Niw2OCBAQCBnZW43X2NyZWF0ZV92ZXJ0ZXhfYnVmZmVyKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAJdlsxMF0gPSBzcmNfeDsKIAl2WzExXSA9IHNy Y195OwogCi0JcmV0dXJuIGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCB2 KTsKKwlyZXR1cm4gaW50ZWxfYmJfcHRyX2FkZF9yZXR1cm5fcHJldl9vZmZzZXQoaWJiLCAxMiAq IHNpemVvZigqdikpOwogfQogCi1zdGF0aWMgdm9pZCBnZW43X2VtaXRfdmVydGV4X2J1ZmZlcihz dHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorc3RhdGljIHZvaWQgZ2VuN19lbWl0X3Zl cnRleF9idWZmZXIoc3RydWN0IGludGVsX2JiICppYmIsCiAJCQkJICAgIGludCBzcmNfeCwgaW50 IHNyY195LAogCQkJCSAgICBpbnQgZHN0X3gsIGludCBkc3RfeSwKIAkJCQkgICAgaW50IHdpZHRo LCBpbnQgaGVpZ2h0LAogCQkJCSAgICB1aW50MzJfdCBvZmZzZXQpCiB7Ci0JT1VUX0JBVENIKEdF TjRfM0RTVEFURV9WRVJURVhfQlVGRkVSUyB8ICg1IC0gMikpOwotCU9VVF9CQVRDSCgwIDw8IEdF TjZfVkIwX0JVRkZFUl9JTkRFWF9TSElGVCB8Ci0JCSAgR0VONl9WQjBfVkVSVEVYREFUQSB8Ci0J CSAgR0VON19WQjBfQUREUkVTU19NT0RJRllfRU5BQkxFIHwKLQkJICA0ICogMiA8PCBWQjBfQlVG RkVSX1BJVENIX1NISUZUKTsKLQotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJ Tl9WRVJURVgsIDAsIG9mZnNldCk7Ci0JT1VUX0JBVENIKH4wKTsKLQlPVVRfQkFUQ0goMCk7CisJ aW50ZWxfYmJfb3V0KGliYiwgR0VONF8zRFNUQVRFX1ZFUlRFWF9CVUZGRVJTIHwgKDUgLSAyKSk7 CisJaW50ZWxfYmJfb3V0KGliYiwgMCA8PCBHRU42X1ZCMF9CVUZGRVJfSU5ERVhfU0hJRlQgfAor CQkgICAgIEdFTjZfVkIwX1ZFUlRFWERBVEEgfAorCQkgICAgIEdFTjdfVkIwX0FERFJFU1NfTU9E SUZZX0VOQUJMRSB8CisJCSAgICAgNCAqIDIgPDwgVkIwX0JVRkZFUl9QSVRDSF9TSElGVCk7CisK KwlpbnRlbF9iYl9lbWl0X3JlbG9jKGliYiwgaWJiLT5oYW5kbGUsIEk5MTVfR0VNX0RPTUFJTl9W RVJURVgsIDAsCisJCQkgICAgb2Zmc2V0LCBpYmItPmJhdGNoX29mZnNldCk7CisJaW50ZWxfYmJf b3V0KGliYiwgfjApOworCWludGVsX2JiX291dChpYmIsIDApOwogfQogCiBzdGF0aWMgdWludDMy X3QKLWdlbjdfYmluZF9zdXJmYWNlcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAot CQkgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqc3JjLAotCQkgICBjb25zdCBzdHJ1Y3QgaWd0X2J1 ZiAqZHN0KQorZ2VuN19iaW5kX3N1cmZhY2VzKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkgICBj b25zdCBzdHJ1Y3QgaW50ZWxfYnVmICpzcmMsCisJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9idWYg KmRzdCkKIHsKLQl1aW50MzJfdCAqYmluZGluZ190YWJsZTsKKwl1aW50MzJfdCAqYmluZGluZ190 YWJsZSwgYmluZGluZ190YWJsZV9vZmZzZXQ7CiAKLQliaW5kaW5nX3RhYmxlID0gaW50ZWxfYmF0 Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwgOCwgMzIpOworCWJpbmRpbmdfdGFibGUgPSBp bnRlbF9iYl9wdHJfYWxpZ24oaWJiLCAzMik7CisJYmluZGluZ190YWJsZV9vZmZzZXQgPSBpbnRl bF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNldChpYmIsIDgpOwogCi0JYmluZGluZ190YWJs ZVswXSA9IGdlbjdfYmluZF9idWYoYmF0Y2gsIGRzdCwgMSk7Ci0JYmluZGluZ190YWJsZVsxXSA9 IGdlbjdfYmluZF9idWYoYmF0Y2gsIHNyYywgMCk7CisJYmluZGluZ190YWJsZVswXSA9IGdlbjdf YmluZF9idWYoaWJiLCBkc3QsIDEpOworCWJpbmRpbmdfdGFibGVbMV0gPSBnZW43X2JpbmRfYnVm KGliYiwgc3JjLCAwKTsKIAotCXJldHVybiBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNl dChiYXRjaCwgYmluZGluZ190YWJsZSk7CisJcmV0dXJuIGJpbmRpbmdfdGFibGVfb2Zmc2V0Owog fQogCiBzdGF0aWMgdm9pZAotZ2VuN19lbWl0X2JpbmRpbmdfdGFibGUoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwKLQkJCWNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsCi0JCQljb25z dCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0LAorZ2VuN19lbWl0X2JpbmRpbmdfdGFibGUoc3RydWN0IGlu dGVsX2JiICppYmIsCisJCQljb25zdCBzdHJ1Y3QgaW50ZWxfYnVmICpzcmMsCisJCQljb25zdCBz dHJ1Y3QgaW50ZWxfYnVmICpkc3QsCiAJCQl1aW50MzJfdCBiaW5kX3N1cmZfb2ZmKQogewotCU9V VF9CQVRDSChHRU43XzNEU1RBVEVfQklORElOR19UQUJMRV9QT0lOVEVSU19QUyB8ICgyIC0gMikp OwotCU9VVF9CQVRDSChiaW5kX3N1cmZfb2ZmKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNE U1RBVEVfQklORElOR19UQUJMRV9QT0lOVEVSU19QUyB8ICgyIC0gMikpOworCWludGVsX2JiX291 dChpYmIsIGJpbmRfc3VyZl9vZmYpOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuN19lbWl0X2RyYXdp bmdfcmVjdGFuZ2xlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIGNvbnN0IHN0cnVj dCBpZ3RfYnVmICpkc3QpCitnZW43X2VtaXRfZHJhd2luZ19yZWN0YW5nbGUoc3RydWN0IGludGVs X2JiICppYmIsIGNvbnN0IHN0cnVjdCBpbnRlbF9idWYgKmRzdCkKIHsKLQlPVVRfQkFUQ0goR0VO NF8zRFNUQVRFX0RSQVdJTkdfUkVDVEFOR0xFIHwgKDQgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwot CU9VVF9CQVRDSCgoaWd0X2J1Zl9oZWlnaHQoZHN0KSAtIDEpIDw8IDE2IHwgKGlndF9idWZfd2lk dGgoZHN0KSAtIDEpKTsKLQlPVVRfQkFUQ0goMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF8z RFNUQVRFX0RSQVdJTkdfUkVDVEFOR0xFIHwgKDQgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCk7CisJaW50ZWxfYmJfb3V0KGliYiwgKGludGVsX2J1Zl9oZWlnaHQoZHN0KSAtIDEpIDw8IDE2 IHwgKGludGVsX2J1Zl93aWR0aChkc3QpIC0gMSkpOworCWludGVsX2JiX291dChpYmIsIDApOwog fQogCiBzdGF0aWMgdWludDMyX3QKLWdlbjdfY3JlYXRlX2JsZW5kX3N0YXRlKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW43X2NyZWF0ZV9ibGVuZF9zdGF0ZShzdHJ1Y3QgaW50 ZWxfYmIgKmliYikKIHsKIAlzdHJ1Y3QgZ2VuNl9ibGVuZF9zdGF0ZSAqYmxlbmQ7CiAKLQlibGVu ZCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigqYmxlbmQp LCA2NCk7CisJYmxlbmQgPSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCA2NCk7CiAKIAlibGVuZC0+ YmxlbmQwLmRlc3RfYmxlbmRfZmFjdG9yID0gR0VONl9CTEVOREZBQ1RPUl9aRVJPOwogCWJsZW5k LT5ibGVuZDAuc291cmNlX2JsZW5kX2ZhY3RvciA9IEdFTjZfQkxFTkRGQUNUT1JfT05FOwpAQCAt MjM3LDU0ICsyMzUsNjEgQEAgZ2VuN19jcmVhdGVfYmxlbmRfc3RhdGUoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCkKIAlibGVuZC0+YmxlbmQxLnBvc3RfYmxlbmRfY2xhbXBfZW5hYmxl ID0gMTsKIAlibGVuZC0+YmxlbmQxLnByZV9ibGVuZF9jbGFtcF9lbmFibGUgPSAxOwogCi0JcmV0 dXJuIGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCBibGVuZCk7CisJcmV0 dXJuIGludGVsX2JiX3B0cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgc2l6ZW9mKCpibGVu ZCkpOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuN19lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuN19lbWl0X3N0YXRlX2Jhc2VfYWRkcmVz cyhzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlPVVRfQkFUQ0goR0VONF9TVEFURV9CQVNFX0FE RFJFU1MgfCAoMTAgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8s IEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0J T1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAwLCBCQVNF X0FERFJFU1NfTU9ESUZZKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX1JFTE9DKGJhdGNoLT5ibywg STkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQot CU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOwotCU9V VF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOworCWludGVs X2JiX291dChpYmIsIEdFTjRfU1RBVEVfQkFTRV9BRERSRVNTIHwgKDEwIC0gMikpOworCWludGVs X2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIGliYi0+aGFuZGxl LCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsCisJCQkgICAgQkFTRV9BRERSRVNTX01P RElGWSwKKwkJCSAgICBpYmItPmJhdGNoX29mZnNldCk7CisJaW50ZWxfYmJfZW1pdF9yZWxvYyhp YmIsIGliYi0+aGFuZGxlLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsCisJCQkgICAg QkFTRV9BRERSRVNTX01PRElGWSwKKwkJCSAgICBpYmItPmJhdGNoX29mZnNldCk7CisJaW50ZWxf YmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIGliYi0+aGFuZGxlLCBJ OTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsCisJCQkgICAgQkFTRV9BRERSRVNTX01PRElG WSwKKwkJCSAgICBpYmItPmJhdGNoX29mZnNldCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCB8IEJBU0VfQUREUkVTU19NT0RJRlkp OwogfQogCiBzdGF0aWMgdWludDMyX3QKLWdlbjdfY3JlYXRlX2NjX3ZpZXdwb3J0KHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW43X2NyZWF0ZV9jY192aWV3cG9ydChzdHJ1Y3Qg aW50ZWxfYmIgKmliYikKIHsKIAlzdHJ1Y3QgZ2VuNF9jY192aWV3cG9ydCAqdnA7CiAKLQl2cCA9 IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigqdnApLCAzMik7 CisJdnAgPSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCAzMik7CiAJdnAtPm1pbl9kZXB0aCA9IC0x LmUzNTsKIAl2cC0+bWF4X2RlcHRoID0gMS5lMzU7CiAKLQlyZXR1cm4gaW50ZWxfYmF0Y2hidWZm ZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsIHZwKTsKKwlyZXR1cm4gaW50ZWxfYmJfcHRyX2FkZF9y ZXR1cm5fcHJldl9vZmZzZXQoaWJiLCBzaXplb2YoKnZwKSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1n ZW43X2VtaXRfY2Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgYmxl bmRfc3RhdGUsCitnZW43X2VtaXRfY2Moc3RydWN0IGludGVsX2JiICppYmIsIHVpbnQzMl90IGJs ZW5kX3N0YXRlLAogCSAgICAgdWludDMyX3QgY2Nfdmlld3BvcnQpCiB7Ci0JT1VUX0JBVENIKEdF TjdfM0RTVEFURV9CTEVORF9TVEFURV9QT0lOVEVSUyB8ICgyIC0gMikpOwotCU9VVF9CQVRDSChi bGVuZF9zdGF0ZSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX0JMRU5EX1NUQVRF X1BPSU5URVJTIHwgKDIgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgYmxlbmRfc3RhdGUpOwog Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9WSUVXUE9SVF9TVEFURV9QT0lOVEVSU19DQyB8ICgy IC0gMikpOwotCU9VVF9CQVRDSChjY192aWV3cG9ydCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VO N18zRFNUQVRFX1ZJRVdQT1JUX1NUQVRFX1BPSU5URVJTX0NDIHwgKDIgLSAyKSk7CisJaW50ZWxf YmJfb3V0KGliYiwgY2Nfdmlld3BvcnQpOwogfQogCiBzdGF0aWMgdWludDMyX3QKLWdlbjdfY3Jl YXRlX3NhbXBsZXIoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjdfY3JlYXRl X3NhbXBsZXIoc3RydWN0IGludGVsX2JiICppYmIpCiB7CiAJc3RydWN0IGdlbjdfc2FtcGxlcl9z dGF0ZSAqc3M7CiAKLQlzcyA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gs IHNpemVvZigqc3MpLCAzMik7CisJc3MgPSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCAzMik7CiAK IAlzcy0+c3MwLm1pbl9maWx0ZXIgPSBHRU40X01BUEZJTFRFUl9ORUFSRVNUOwogCXNzLT5zczAu bWFnX2ZpbHRlciA9IEdFTjRfTUFQRklMVEVSX05FQVJFU1Q7CkBAIC0yOTUsMjgzICszMDAsMjg0 IEBAIGdlbjdfY3JlYXRlX3NhbXBsZXIoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkK IAogCXNzLT5zczMubm9uX25vcm1hbGl6ZWRfY29vcmQgPSAxOwogCi0JcmV0dXJuIGludGVsX2Jh dGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCBzcyk7CisJcmV0dXJuIGludGVsX2JiX3B0 cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgc2l6ZW9mKCpzcykpOwogfQogCiBzdGF0aWMg dm9pZAotZ2VuN19lbWl0X3NhbXBsZXIoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwg dWludDMyX3Qgc2FtcGxlcl9vZmYpCitnZW43X2VtaXRfc2FtcGxlcihzdHJ1Y3QgaW50ZWxfYmIg KmliYiwgdWludDMyX3Qgc2FtcGxlcl9vZmYpCiB7Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9T QU1QTEVSX1NUQVRFX1BPSU5URVJTX1BTIHwgKDIgLSAyKSk7Ci0JT1VUX0JBVENIKHNhbXBsZXJf b2ZmKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfU0FNUExFUl9TVEFURV9QT0lO VEVSU19QUyB8ICgyIC0gMikpOworCWludGVsX2JiX291dChpYmIsIHNhbXBsZXJfb2ZmKTsKIH0K IAogc3RhdGljIHZvaWQKLWdlbjdfZW1pdF9tdWx0aXNhbXBsZShzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoKQorZ2VuN19lbWl0X211bHRpc2FtcGxlKHN0cnVjdCBpbnRlbF9iYiAqaWJi KQogewotCU9VVF9CQVRDSChHRU42XzNEU1RBVEVfTVVMVElTQU1QTEUgfCAoNCAtIDIpKTsKLQlP VVRfQkFUQ0goR0VONl8zRFNUQVRFX01VTFRJU0FNUExFX1BJWEVMX0xPQ0FUSU9OX0NFTlRFUiB8 Ci0JCSAgR0VONl8zRFNUQVRFX01VTFRJU0FNUExFX05VTVNBTVBMRVNfMSk7IC8qIDEgc2FtcGxl L3BpeGVsICovCi0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChH RU42XzNEU1RBVEVfU0FNUExFX01BU0sgfCAoMiAtIDIpKTsKLQlPVVRfQkFUQ0goMSk7CisJaW50 ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX01VTFRJU0FNUExFIHwgKDQgLSAyKSk7CisJaW50 ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX01VTFRJU0FNUExFX1BJWEVMX0xPQ0FUSU9OX0NF TlRFUiB8CisJCSAgICAgR0VONl8zRFNUQVRFX01VTFRJU0FNUExFX05VTVNBTVBMRVNfMSk7IC8q IDEgc2FtcGxlL3BpeGVsICovCisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0 KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42XzNEU1RBVEVfU0FNUExFX01BU0sg fCAoMiAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAxKTsKIH0KIAogc3RhdGljIHZvaWQKLWdl bjdfZW1pdF91cmIoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjdfZW1pdF91 cmIoc3RydWN0IGludGVsX2JiICppYmIpCiB7Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9QVVNI X0NPTlNUQU5UX0FMTE9DX1BTIHwgKDIgLSAyKSk7Ci0JT1VUX0JBVENIKDgpOyAvKiBpbiAxS0Jz ICovCisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX1BVU0hfQ09OU1RBTlRfQUxMT0Nf UFMgfCAoMiAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCA4KTsgLyogaW4gMUtCcyAqLwogCiAJ LyogbnVtIG9mIFZTIGVudHJpZXMgbXVzdCBiZSBkaXZpc2libGUgYnkgOCBpZiBzaXplIDwgOSAq LwotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfVVJCX1ZTIHwgKDIgLSAyKSk7Ci0JT1VUX0JBVENI KCg2NCA8PCBHRU43X1VSQl9FTlRSWV9OVU1CRVJfU0hJRlQpIHwKLQkJICAoMiAtIDEpIDw8IEdF TjdfVVJCX0VOVFJZX1NJWkVfU0hJRlQgfAotCQkgICgxIDw8IEdFTjdfVVJCX1NUQVJUSU5HX0FE RFJFU1NfU0hJRlQpKTsKLQotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfVVJCX0hTIHwgKDIgLSAy KSk7Ci0JT1VUX0JBVENIKCgwIDw8IEdFTjdfVVJCX0VOVFJZX1NJWkVfU0hJRlQpIHwKLQkJICAo MiA8PCBHRU43X1VSQl9TVEFSVElOR19BRERSRVNTX1NISUZUKSk7Ci0KLQlPVVRfQkFUQ0goR0VO N18zRFNUQVRFX1VSQl9EUyB8ICgyIC0gMikpOwotCU9VVF9CQVRDSCgoMCA8PCBHRU43X1VSQl9F TlRSWV9TSVpFX1NISUZUKSB8Ci0JCSAgKDIgPDwgR0VON19VUkJfU1RBUlRJTkdfQUREUkVTU19T SElGVCkpOwotCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9VUkJfR1MgfCAoMiAtIDIpKTsKLQlP VVRfQkFUQ0goKDAgPDwgR0VON19VUkJfRU5UUllfU0laRV9TSElGVCkgfAotCQkgICgxIDw8IEdF TjdfVVJCX1NUQVJUSU5HX0FERFJFU1NfU0hJRlQpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43 XzNEU1RBVEVfVVJCX1ZTIHwgKDIgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgKDY0IDw8IEdF TjdfVVJCX0VOVFJZX05VTUJFUl9TSElGVCkgfAorCQkgICAgICgyIC0gMSkgPDwgR0VON19VUkJf RU5UUllfU0laRV9TSElGVCB8CisJCSAgICAgKDEgPDwgR0VON19VUkJfU1RBUlRJTkdfQUREUkVT U19TSElGVCkpOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX1VSQl9IUyB8ICgy IC0gMikpOworCWludGVsX2JiX291dChpYmIsICgwIDw8IEdFTjdfVVJCX0VOVFJZX1NJWkVfU0hJ RlQpIHwKKwkJICAgICAoMiA8PCBHRU43X1VSQl9TVEFSVElOR19BRERSRVNTX1NISUZUKSk7CisK KwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfVVJCX0RTIHwgKDIgLSAyKSk7CisJaW50 ZWxfYmJfb3V0KGliYiwgKDAgPDwgR0VON19VUkJfRU5UUllfU0laRV9TSElGVCkgfAorCQkgICAg ICgyIDw8IEdFTjdfVVJCX1NUQVJUSU5HX0FERFJFU1NfU0hJRlQpKTsKKworCWludGVsX2JiX291 dChpYmIsIEdFTjdfM0RTVEFURV9VUkJfR1MgfCAoMiAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCAoMCA8PCBHRU43X1VSQl9FTlRSWV9TSVpFX1NISUZUKSB8CisJCSAgICAgKDEgPDwgR0VON19V UkJfU1RBUlRJTkdfQUREUkVTU19TSElGVCkpOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuN19lbWl0 X3ZzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW43X2VtaXRfdnMoc3RydWN0 IGludGVsX2JiICppYmIpCiB7Ci0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9WUyB8ICg2IC0gMikp OwotCU9VVF9CQVRDSCgwKTsgLyogbm8gVlMga2VybmVsICovCi0JT1VUX0JBVENIKDApOwotCU9V VF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOyAvKiBwYXNzLXRocm91 Z2ggKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42XzNEU1RBVEVfVlMgfCAoNiAtIDIpKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogbm8gVlMga2VybmVsICovCisJaW50ZWxfYmJfb3V0KGli YiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qIHBhc3MtdGhyb3VnaCAqLwogfQogCiBzdGF0aWMgdm9p ZAotZ2VuN19lbWl0X2hzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW43X2Vt aXRfaHMoc3RydWN0IGludGVsX2JiICppYmIpCiB7Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9I UyB8ICg3IC0gMikpOwotCU9VVF9CQVRDSCgwKTsgLyogbm8gSFMga2VybmVsICovCi0JT1VUX0JB VENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwot CU9VVF9CQVRDSCgwKTsgLyogcGFzcy10aHJvdWdoICovCisJaW50ZWxfYmJfb3V0KGliYiwgR0VO N18zRFNUQVRFX0hTIHwgKDcgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qIG5vIEhT IGtlcm5lbCAqLworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDAp OworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIDApOyAvKiBwYXNzLXRocm91Z2ggKi8KIH0KIAogc3RhdGljIHZvaWQKLWdl bjdfZW1pdF90ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuN19lbWl0X3Rl KHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfVEUgfCAo NCAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfVEUgfCAoNCAtIDIpKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjdfZW1pdF9kcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoKQorZ2VuN19lbWl0X2RzKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewotCU9V VF9CQVRDSChHRU43XzNEU1RBVEVfRFMgfCAoNiAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VU X0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDAp OworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9EUyB8ICg2IC0gMikpOworCWludGVs X2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChp YmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwog fQogCiBzdGF0aWMgdm9pZAotZ2VuN19lbWl0X2dzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gpCitnZW43X2VtaXRfZ3Moc3RydWN0IGludGVsX2JiICppYmIpCiB7Ci0JT1VUX0JBVENI KEdFTjZfM0RTVEFURV9HUyB8ICg3IC0gMikpOwotCU9VVF9CQVRDSCgwKTsgLyogbm8gR1Mga2Vy bmVsICovCi0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0J T1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsgLyogcGFzcy10aHJvdWdoICAqLworCWludGVs X2JiX291dChpYmIsIEdFTjZfM0RTVEFURV9HUyB8ICg3IC0gMikpOworCWludGVsX2JiX291dChp YmIsIDApOyAvKiBubyBHUyBrZXJuZWwgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogcGFzcy10aHJvdWdoICAqLwogfQog CiBzdGF0aWMgdm9pZAotZ2VuN19lbWl0X3N0cmVhbW91dChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoKQorZ2VuN19lbWl0X3N0cmVhbW91dChzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsK LQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX1NUUkVBTU9VVCB8ICgzIC0gMikpOwotCU9VVF9CQVRD SCgwKTsKLQlPVVRfQkFUQ0goMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX1NU UkVBTU9VVCB8ICgzIC0gMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291 dChpYmIsIDApOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuN19lbWl0X3NmKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW43X2VtaXRfc2Yoc3RydWN0IGludGVsX2JiICppYmIpCiB7 Ci0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9TRiB8ICg3IC0gMikpOwotCU9VVF9CQVRDSCgwKTsK LQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX1NGX0NVTExfTk9ORSk7Ci0JT1VUX0JBVENIKDIgPDwg R0VONl8zRFNUQVRFX1NGX1RSSUZBTl9QUk9WT0tFX1NISUZUKTsKLQlPVVRfQkFUQ0goMCk7Ci0J T1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42XzNE U1RBVEVfU0YgfCAoNyAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCBHRU42XzNEU1RBVEVfU0ZfQ1VMTF9OT05FKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAy IDw8IEdFTjZfM0RTVEFURV9TRl9UUklGQU5fUFJPVk9LRV9TSElGVCk7CisJaW50ZWxfYmJfb3V0 KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7 CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW43X2VtaXRfc2JlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gpCitnZW43X2VtaXRfc2JlKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewotCU9VVF9C QVRDSChHRU43XzNEU1RBVEVfU0JFIHwgKDE0IC0gMikpOwotCU9VVF9CQVRDSCgxIDw8IEdFTjdf U0JFX05VTV9PVVRQVVRTX1NISUZUIHwKLQkJICAxIDw8IEdFTjdfU0JFX1VSQl9FTlRSWV9SRUFE X0xFTkdUSF9TSElGVCB8Ci0JCSAgMSA8PCBHRU43X1NCRV9VUkJfRU5UUllfUkVBRF9PRkZTRVRf U0hJRlQpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7IC8qIGR3NCAqLwotCU9VVF9C QVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsg LyogZHc4ICovCi0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7 Ci0JT1VUX0JBVENIKDApOyAvKiBkdzEyICovCi0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgw KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfU0JFIHwgKDE0IC0gMikpOworCWlu dGVsX2JiX291dChpYmIsIDEgPDwgR0VON19TQkVfTlVNX09VVFBVVFNfU0hJRlQgfAorCQkgICAg IDEgPDwgR0VON19TQkVfVVJCX0VOVFJZX1JFQURfTEVOR1RIX1NISUZUIHwKKwkJICAgICAxIDw8 IEdFTjdfU0JFX1VSQl9FTlRSWV9SRUFEX09GRlNFVF9TSElGVCk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qIGR3NCAqLworCWludGVsX2JiX291dChp YmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwor CWludGVsX2JiX291dChpYmIsIDApOyAvKiBkdzggKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsgLyogZHcxMiAqLworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIDApOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuN19lbWl0X3BzKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGtlcm5lbF9vZmYpCitnZW43X2VtaXRf cHMoc3RydWN0IGludGVsX2JiICppYmIsIHVpbnQzMl90IGtlcm5lbF9vZmYpCiB7CiAJaW50IHRo cmVhZHM7CiAKLQlpZiAoSVNfSEFTV0VMTChiYXRjaC0+ZGV2aWQpKQorCWlmIChJU19IQVNXRUxM KGliYi0+ZGV2aWQpKQogCQl0aHJlYWRzID0gNDAgPDwgSFNXX1BTX01BWF9USFJFQURTX1NISUZU IHwgMSA8PCBIU1dfUFNfU0FNUExFX01BU0tfU0hJRlQ7CiAJZWxzZQogCQl0aHJlYWRzID0gNDAg PDwgSVZCX1BTX01BWF9USFJFQURTX1NISUZUOwogCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9Q UyB8ICg4IC0gMikpOwotCU9VVF9CQVRDSChrZXJuZWxfb2ZmKTsKLQlPVVRfQkFUQ0goMSA8PCBH RU43X1BTX1NBTVBMRVJfQ09VTlRfU0hJRlQgfAotCQkgIDIgPDwgR0VON19QU19CSU5ESU5HX1RB QkxFX0VOVFJZX0NPVU5UX1NISUZUKTsKLQlPVVRfQkFUQ0goMCk7IC8qIHNjcmF0Y2ggYWRkcmVz cyAqLwotCU9VVF9CQVRDSCh0aHJlYWRzIHwKLQkJICBHRU43X1BTXzE2X0RJU1BBVENIX0VOQUJM RSB8Ci0JCSAgR0VON19QU19BVFRSSUJVVEVfRU5BQkxFKTsKLQlPVVRfQkFUQ0goNiA8PCBHRU43 X1BTX0RJU1BBVENIX1NUQVJUX0dSRl9TSElGVF8wKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JB VENIKDApOworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9QUyB8ICg4IC0gMikpOwor CWludGVsX2JiX291dChpYmIsIGtlcm5lbF9vZmYpOworCWludGVsX2JiX291dChpYmIsIDEgPDwg R0VON19QU19TQU1QTEVSX0NPVU5UX1NISUZUIHwKKwkJICAgICAyIDw8IEdFTjdfUFNfQklORElO R19UQUJMRV9FTlRSWV9DT1VOVF9TSElGVCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qIHNj cmF0Y2ggYWRkcmVzcyAqLworCWludGVsX2JiX291dChpYmIsIHRocmVhZHMgfAorCQkgICAgIEdF TjdfUFNfMTZfRElTUEFUQ0hfRU5BQkxFIHwKKwkJICAgICBHRU43X1BTX0FUVFJJQlVURV9FTkFC TEUpOworCWludGVsX2JiX291dChpYmIsIDYgPDwgR0VON19QU19ESVNQQVRDSF9TVEFSVF9HUkZf U0hJRlRfMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7 CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW43X2VtaXRfY2xpcChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoKQorZ2VuN19lbWl0X2NsaXAoc3RydWN0IGludGVsX2JiICppYmIpCiB7Ci0JT1VU X0JBVENIKEdFTjZfM0RTVEFURV9DTElQIHwgKDQgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCU9V VF9CQVRDSCgwKTsgLyogcGFzcy10aHJvdWdoICovCi0JT1VUX0JBVENIKDApOworCWludGVsX2Ji X291dChpYmIsIEdFTjZfM0RTVEFURV9DTElQIHwgKDQgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qIHBhc3MtdGhyb3VnaCAqLworCWludGVs X2JiX291dChpYmIsIDApOwogCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9WSUVXUE9SVF9TVEFU RV9QT0lOVEVSU19TRl9DTCB8ICgyIC0gMikpOwotCU9VVF9CQVRDSCgwKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCBHRU43XzNEU1RBVEVfVklFV1BPUlRfU1RBVEVfUE9JTlRFUlNfU0ZfQ0wgfCAoMiAt IDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjdfZW1p dF93bShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuN19lbWl0X3dtKHN0cnVj dCBpbnRlbF9iYiAqaWJiKQogewotCU9VVF9CQVRDSChHRU42XzNEU1RBVEVfV00gfCAoMyAtIDIp KTsKLQlPVVRfQkFUQ0goR0VON19XTV9ESVNQQVRDSF9FTkFCTEUgfAotCQlHRU43X1dNX1BFUlNQ RUNUSVZFX1BJWEVMX0JBUllDRU5UUklDKTsKLQlPVVRfQkFUQ0goMCk7CisJaW50ZWxfYmJfb3V0 KGliYiwgR0VONl8zRFNUQVRFX1dNIHwgKDMgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VO N19XTV9ESVNQQVRDSF9FTkFCTEUgfAorCQkgICAgIEdFTjdfV01fUEVSU1BFQ1RJVkVfUElYRUxf QkFSWUNFTlRSSUMpOworCWludGVsX2JiX291dChpYmIsIDApOwogfQogCiBzdGF0aWMgdm9pZAot Z2VuN19lbWl0X251bGxfZGVwdGhfYnVmZmVyKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gpCitnZW43X2VtaXRfbnVsbF9kZXB0aF9idWZmZXIoc3RydWN0IGludGVsX2JiICppYmIpCiB7 Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9ERVBUSF9CVUZGRVIgfCAoNyAtIDIpKTsKLQlPVVRf QkFUQ0goU1VSRkFDRV9OVUxMIDw8IEdFTjRfM0RTVEFURV9ERVBUSF9CVUZGRVJfVFlQRV9TSElG VCB8Ci0JCSAgR0VONF9ERVBUSEZPUk1BVF9EMzJfRkxPQVQgPDwgR0VONF8zRFNUQVRFX0RFUFRI X0JVRkZFUl9GT1JNQVRfU0hJRlQpOwotCU9VVF9CQVRDSCgwKTsgLyogZGlzYWJsZSBkZXB0aCwg c3RlbmNpbCBhbmQgaGl6ICovCi0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRf QkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9DTEVB Ul9QQVJBTVMgfCAoMyAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOworCWlu dGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9ERVBUSF9CVUZGRVIgfCAoNyAtIDIpKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCBTVVJGQUNFX05VTEwgPDwgR0VONF8zRFNUQVRFX0RFUFRIX0JVRkZF Ul9UWVBFX1NISUZUIHwKKwkJICAgICBHRU40X0RFUFRIRk9STUFUX0QzMl9GTE9BVCA8PCBHRU40 XzNEU1RBVEVfREVQVEhfQlVGRkVSX0ZPUk1BVF9TSElGVCk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCk7IC8qIGRpc2FibGUgZGVwdGgsIHN0ZW5jaWwgYW5kIGhpeiAqLworCWludGVsX2JiX291dChp YmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwor CWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRF X0NMRUFSX1BBUkFNUyB8ICgzIC0gMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIDApOwogfQogCiAjZGVmaW5lIEJBVENIX1NUQVRFX1NQTElUIDIwNDgKLXZv aWQgZ2VuN19yZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwK LQkJCSAgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQsCi0JCQkgIGNvbnN0IHN0cnVjdCBpZ3Rf YnVmICpzcmMsIHVuc2lnbmVkIHNyY194LCB1bnNpZ25lZCBzcmNfeSwKLQkJCSAgdW5zaWduZWQg d2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCwg dW5zaWduZWQgZHN0X3gsIHVuc2lnbmVkIGRzdF95KQordm9pZCBnZW43X3JlbmRlcl9jb3B5ZnVu YyhzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKKwkJCSAgdWludDMyX3QgY3R4LAorCQkJICBzdHJ1Y3Qg aW50ZWxfYnVmICpzcmMsCisJCQkgIHVpbnQzMl90IHNyY194LCB1aW50MzJfdCBzcmNfeSwKKwkJ CSAgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKKwkJCSAgc3RydWN0IGludGVsX2J1 ZiAqZHN0LAorCQkJICB1aW50MzJfdCBkc3RfeCwgdWludDMyX3QgZHN0X3kpCiB7CiAJdWludDMy X3QgcHNfYmluZGluZ190YWJsZSwgcHNfc2FtcGxlcl9vZmYsIHBzX2tlcm5lbF9vZmY7CiAJdWlu dDMyX3QgYmxlbmRfc3RhdGUsIGNjX3ZpZXdwb3J0OwogCXVpbnQzMl90IHZlcnRleF9idWZmZXI7 Ci0JdWludDMyX3QgYmF0Y2hfZW5kOwogCiAJaWd0X2Fzc2VydChzcmMtPmJwcCA9PSBkc3QtPmJw cCk7Ci0JaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfd2l0aF9jb250ZXh0KGJhdGNoLCBjb250ZXh0 KTsKIAotCWJhdGNoLT5wdHIgPSAmYmF0Y2gtPmJ1ZmZlcltCQVRDSF9TVEFURV9TUExJVF07CisJ aW50ZWxfYmJfZmx1c2hfcmVuZGVyX3dpdGhfY29udGV4dChpYmIsIGN0eCk7CisKKwlpbnRlbF9i Yl9hZGRfaW50ZWxfYnVmKGliYiwgZHN0LCB0cnVlKTsKKwlpbnRlbF9iYl9hZGRfaW50ZWxfYnVm KGliYiwgc3JjLCBmYWxzZSk7CiAKKwlpbnRlbF9iYl9wdHJfc2V0KGliYiwgQkFUQ0hfU1RBVEVf U1BMSVQpOwogCi0JYmxlbmRfc3RhdGUgPSBnZW43X2NyZWF0ZV9ibGVuZF9zdGF0ZShiYXRjaCk7 Ci0JY2Nfdmlld3BvcnQgPSBnZW43X2NyZWF0ZV9jY192aWV3cG9ydChiYXRjaCk7Ci0JcHNfc2Ft cGxlcl9vZmYgPSBnZW43X2NyZWF0ZV9zYW1wbGVyKGJhdGNoKTsKLQlwc19rZXJuZWxfb2ZmID0g aW50ZWxfYmF0Y2hidWZmZXJfY29weV9kYXRhKGJhdGNoLCBwc19rZXJuZWwsCi0JCQkJCQkgICAg c2l6ZW9mKHBzX2tlcm5lbCksIDY0KTsKLQl2ZXJ0ZXhfYnVmZmVyID0gZ2VuN19jcmVhdGVfdmVy dGV4X2J1ZmZlcihiYXRjaCwKKwlibGVuZF9zdGF0ZSA9IGdlbjdfY3JlYXRlX2JsZW5kX3N0YXRl KGliYik7CisJY2Nfdmlld3BvcnQgPSBnZW43X2NyZWF0ZV9jY192aWV3cG9ydChpYmIpOworCXBz X3NhbXBsZXJfb2ZmID0gZ2VuN19jcmVhdGVfc2FtcGxlcihpYmIpOworCXBzX2tlcm5lbF9vZmYg PSBpbnRlbF9iYl9jb3B5X2RhdGEoaWJiLCBwc19rZXJuZWwsCisJCQkJCSAgIHNpemVvZihwc19r ZXJuZWwpLCA2NCk7CisJdmVydGV4X2J1ZmZlciA9IGdlbjdfY3JlYXRlX3ZlcnRleF9idWZmZXIo aWJiLAogCQkJCQkJICBzcmNfeCwgc3JjX3ksCiAJCQkJCQkgIGRzdF94LCBkc3RfeSwKIAkJCQkJ CSAgd2lkdGgsIGhlaWdodCk7Ci0JcHNfYmluZGluZ190YWJsZSA9IGdlbjdfYmluZF9zdXJmYWNl cyhiYXRjaCwgc3JjLCBkc3QpOwotCi0JaWd0X2Fzc2VydChiYXRjaC0+cHRyIDwgJmJhdGNoLT5i dWZmZXJbNDA5NV0pOwotCi0JYmF0Y2gtPnB0ciA9IGJhdGNoLT5idWZmZXI7Ci0JT1VUX0JBVENI KEc0WF9QSVBFTElORV9TRUxFQ1QgfCBQSVBFTElORV9TRUxFQ1RfM0QpOwotCi0JZ2VuN19lbWl0 X3N0YXRlX2Jhc2VfYWRkcmVzcyhiYXRjaCk7Ci0JZ2VuN19lbWl0X211bHRpc2FtcGxlKGJhdGNo KTsKLQlnZW43X2VtaXRfdXJiKGJhdGNoKTsKLQlnZW43X2VtaXRfdnMoYmF0Y2gpOwotCWdlbjdf ZW1pdF9ocyhiYXRjaCk7Ci0JZ2VuN19lbWl0X3RlKGJhdGNoKTsKLQlnZW43X2VtaXRfZHMoYmF0 Y2gpOwotCWdlbjdfZW1pdF9ncyhiYXRjaCk7Ci0JZ2VuN19lbWl0X2NsaXAoYmF0Y2gpOwotCWdl bjdfZW1pdF9zZihiYXRjaCk7Ci0JZ2VuN19lbWl0X3dtKGJhdGNoKTsKLQlnZW43X2VtaXRfc3Ry ZWFtb3V0KGJhdGNoKTsKLQlnZW43X2VtaXRfbnVsbF9kZXB0aF9idWZmZXIoYmF0Y2gpOwotCWdl bjdfZW1pdF9jYyhiYXRjaCwgYmxlbmRfc3RhdGUsIGNjX3ZpZXdwb3J0KTsKLQlnZW43X2VtaXRf c2FtcGxlcihiYXRjaCwgcHNfc2FtcGxlcl9vZmYpOwotCWdlbjdfZW1pdF9zYmUoYmF0Y2gpOwot CWdlbjdfZW1pdF9wcyhiYXRjaCwgcHNfa2VybmVsX29mZik7Ci0JZ2VuN19lbWl0X3ZlcnRleF9l bGVtZW50cyhiYXRjaCk7Ci0JZ2VuN19lbWl0X3ZlcnRleF9idWZmZXIoYmF0Y2gsIHNyY194LCBz cmNfeSwKKwlwc19iaW5kaW5nX3RhYmxlID0gZ2VuN19iaW5kX3N1cmZhY2VzKGliYiwgc3JjLCBk c3QpOworCisJaW50ZWxfYmJfcHRyX3NldChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwg RzRYX1BJUEVMSU5FX1NFTEVDVCB8IFBJUEVMSU5FX1NFTEVDVF8zRCk7CisKKwlnZW43X2VtaXRf c3RhdGVfYmFzZV9hZGRyZXNzKGliYik7CisJZ2VuN19lbWl0X211bHRpc2FtcGxlKGliYik7CisJ Z2VuN19lbWl0X3VyYihpYmIpOworCWdlbjdfZW1pdF92cyhpYmIpOworCWdlbjdfZW1pdF9ocyhp YmIpOworCWdlbjdfZW1pdF90ZShpYmIpOworCWdlbjdfZW1pdF9kcyhpYmIpOworCWdlbjdfZW1p dF9ncyhpYmIpOworCWdlbjdfZW1pdF9jbGlwKGliYik7CisJZ2VuN19lbWl0X3NmKGliYik7CisJ Z2VuN19lbWl0X3dtKGliYik7CisJZ2VuN19lbWl0X3N0cmVhbW91dChpYmIpOworCWdlbjdfZW1p dF9udWxsX2RlcHRoX2J1ZmZlcihpYmIpOworCWdlbjdfZW1pdF9jYyhpYmIsIGJsZW5kX3N0YXRl LCBjY192aWV3cG9ydCk7CisJZ2VuN19lbWl0X3NhbXBsZXIoaWJiLCBwc19zYW1wbGVyX29mZik7 CisJZ2VuN19lbWl0X3NiZShpYmIpOworCWdlbjdfZW1pdF9wcyhpYmIsIHBzX2tlcm5lbF9vZmYp OworCWdlbjdfZW1pdF92ZXJ0ZXhfZWxlbWVudHMoaWJiKTsKKwlnZW43X2VtaXRfdmVydGV4X2J1 ZmZlcihpYmIsIHNyY194LCBzcmNfeSwKIAkJCQlkc3RfeCwgZHN0X3ksIHdpZHRoLAogCQkJCWhl aWdodCwgdmVydGV4X2J1ZmZlcik7Ci0JZ2VuN19lbWl0X2JpbmRpbmdfdGFibGUoYmF0Y2gsIHNy YywgZHN0LCBwc19iaW5kaW5nX3RhYmxlKTsKLQlnZW43X2VtaXRfZHJhd2luZ19yZWN0YW5nbGUo YmF0Y2gsIGRzdCk7Ci0KLQlPVVRfQkFUQ0goR0VONF8zRFBSSU1JVElWRSB8ICg3IC0gMikpOwot CU9VVF9CQVRDSChHRU40XzNEUFJJTUlUSVZFX1ZFUlRFWF9TRVFVRU5USUFMIHwgXzNEUFJJTV9S RUNUTElTVCk7Ci0JT1VUX0JBVENIKDMpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMSk7 ICAgLyogc2luZ2xlIGluc3RhbmNlICovCi0JT1VUX0JBVENIKDApOyAgIC8qIHN0YXJ0IGluc3Rh bmNlIGxvY2F0aW9uICovCi0JT1VUX0JBVENIKDApOyAgIC8qIGluZGV4IGJ1ZmZlciBvZmZzZXQs IGlnbm9yZWQgKi8KLQotCU9VVF9CQVRDSChNSV9CQVRDSF9CVUZGRVJfRU5EKTsKLQotCWJhdGNo X2VuZCA9IGJhdGNoLT5wdHIgLSBiYXRjaC0+YnVmZmVyOwotCWJhdGNoX2VuZCA9IEFMSUdOKGJh dGNoX2VuZCwgOCk7Ci0JaWd0X2Fzc2VydChiYXRjaF9lbmQgPCBCQVRDSF9TVEFURV9TUExJVCk7 Ci0KLQlnZW43X3JlbmRlcl9mbHVzaChiYXRjaCwgY29udGV4dCwgYmF0Y2hfZW5kKTsKLQlpbnRl bF9iYXRjaGJ1ZmZlcl9yZXNldChiYXRjaCk7CisJZ2VuN19lbWl0X2JpbmRpbmdfdGFibGUoaWJi LCBzcmMsIGRzdCwgcHNfYmluZGluZ190YWJsZSk7CisJZ2VuN19lbWl0X2RyYXdpbmdfcmVjdGFu Z2xlKGliYiwgZHN0KTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjRfM0RQUklNSVRJVkUgfCAo NyAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40XzNEUFJJTUlUSVZFX1ZFUlRFWF9TRVFV RU5USUFMIHwgXzNEUFJJTV9SRUNUTElTVCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMyk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMSk7ICAgLyogc2luZ2xlIGlu c3RhbmNlICovCisJaW50ZWxfYmJfb3V0KGliYiwgMCk7ICAgLyogc3RhcnQgaW5zdGFuY2UgbG9j YXRpb24gKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgICAvKiBpbmRleCBidWZmZXIgb2Zmc2V0 LCBpZ25vcmVkICovCisKKwlpbnRlbF9iYl9lbWl0X2JiZShpYmIpOworCWludGVsX2JiX2V4ZWNf d2l0aF9jb250ZXh0KGliYiwgaW50ZWxfYmJfb2Zmc2V0KGliYiksIGN0eCwKKwkJCQkgICBJOTE1 X0VYRUNfREVGQVVMVCB8IEk5MTVfRVhFQ19OT19SRUxPQywKKwkJCQkgICBmYWxzZSk7CisJZHVt cF9iYXRjaChpYmIpOworCWludGVsX2JiX3Jlc2V0KGliYiwgZmFsc2UpOwogfQpkaWZmIC0tZ2l0 IGEvbGliL3JlbmRlcmNvcHlfZ2VuOC5jIGIvbGliL3JlbmRlcmNvcHlfZ2VuOC5jCmluZGV4IDc1 MDA1ZDBiLi45NWMzYzQ5NyAxMDA2NDQKLS0tIGEvbGliL3JlbmRlcmNvcHlfZ2VuOC5jCisrKyBi L2xpYi9yZW5kZXJjb3B5X2dlbjguYwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGk5MTVf ZHJtLmg+CiAKICNpbmNsdWRlICJkcm10ZXN0LmgiCi0jaW5jbHVkZSAiaW50ZWxfYnVmbWdyLmgi CisjaW5jbHVkZSAiaW50ZWxfYnVmb3BzLmgiCiAjaW5jbHVkZSAiaW50ZWxfYmF0Y2hidWZmZXIu aCIKICNpbmNsdWRlICJpbnRlbF9jaGlwc2V0LmgiCiAjaW5jbHVkZSAiaW50ZWxfaW8uaCIKQEAg LTIzLDE3ICsyMywxMiBAQAogI2luY2x1ZGUgImludGVsX3JlZy5oIgogI2luY2x1ZGUgImlndF9h dXguaCIKIAotI2luY2x1ZGUgImludGVsX2F1Yi5oIgotCiAjZGVmaW5lIFZFUlRFWF9TSVpFICgz KjQpCiAKICNpZiBERUJVR19SRU5ERVJDUFkKLXN0YXRpYyB2b2lkIGR1bXBfYmF0Y2goc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkgewotCWludCBmZCA9IG9wZW4oIi90bXAvaTk2NS1i YXRjaGJ1ZmZlcnMuZHVtcCIsIE9fV1JPTkxZIHwgT19DUkVBVCwgIDA2NjYpOwotCWlmIChmZCAh PSAtMSkgewotCQlpZ3RfYXNzZXJ0X2VxKHdyaXRlKGZkLCBiYXRjaC0+YnVmZmVyLCA0MDk2KSwg NDA5Nik7Ci0JCWZkID0gY2xvc2UoZmQpOwotCX0KK3N0YXRpYyB2b2lkIGR1bXBfYmF0Y2goc3Ry dWN0IGludGVsX2JiICppYmIpCit7CisJaW50ZWxfYmJfZHVtcChpYmIsICIvdG1wL2dlbjgtYmF0 Y2hidWZmZXJzLmR1bXAiKTsKIH0KICNlbHNlCiAjZGVmaW5lIGR1bXBfYmF0Y2goeCkgZG8geyB9 IHdoaWxlKDApCkBAIC03MCw4OSArNjUsMTggQEAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHBzX2tl cm5lbFtdWzRdID0gewogI2VuZGlmCiB9OwogCi0vKiBBVUIgYW5ub3RhdGlvbiBzdXBwb3J0ICov Ci0jZGVmaW5lIE1BWF9BTk5PVEFUSU9OUwkzMwotc3RydWN0IGFubm90YXRpb25zX2NvbnRleHQg ewotCWRybV9pbnRlbF9hdWJfYW5ub3RhdGlvbiBhbm5vdGF0aW9uc1tNQVhfQU5OT1RBVElPTlNd OwotCWludCBpbmRleDsKLQl1aW50MzJfdCBvZmZzZXQ7Ci19OwotCi1zdGF0aWMgdm9pZCBhbm5v dGF0aW9uX2luaXQoc3RydWN0IGFubm90YXRpb25zX2NvbnRleHQgKmF1YikKLXsKLQkvKiBhdWIt PmFubm90YXRpb25zIGlzIGFuIGFycmF5IGtlZXBpbmcgYSBsaXN0IG9mIGFubm90YXRpb25zIG9m IHRoZQotCSAqIGJhdGNoIGJ1ZmZlciBvcmRlcmVkIGJ5IG9mZnNldC4gYXViLT5hbm5vdGF0aW9u c1swXSBpcyB0aHVzIGxlZnQKLQkgKiBmb3IgdGhlIGNvbW1hbmQgc3RyZWFtIGFuZCB3aWxsIGJl IGZpbGxlZCBqdXN0IGJlZm9yZSBleGVjdXRpbmcKLQkgKiB0aGUgYmF0Y2ggYnVmZmVyIHdpdGgg YW5ub3RhdGlvbnNfYWRkX2JhdGNoKCkgKi8KLQlhdWItPmluZGV4ID0gMTsKLX0KLQotc3RhdGlj IHZvaWQgYWRkX2Fubm90YXRpb24oZHJtX2ludGVsX2F1Yl9hbm5vdGF0aW9uICphLAotCQkJICAg dWludDMyX3QgdHlwZSwgdWludDMyX3Qgc3VidHlwZSwKLQkJCSAgIHVpbnQzMl90IGVuZGluZ19v ZmZzZXQpCi17Ci0JYS0+dHlwZSA9IHR5cGU7Ci0JYS0+c3VidHlwZSA9IHN1YnR5cGU7Ci0JYS0+ ZW5kaW5nX29mZnNldCA9IGVuZGluZ19vZmZzZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGFubm90YXRp b25fYWRkX2JhdGNoKHN0cnVjdCBhbm5vdGF0aW9uc19jb250ZXh0ICphdWIsIHNpemVfdCBzaXpl KQotewotCWFkZF9hbm5vdGF0aW9uKCZhdWItPmFubm90YXRpb25zWzBdLCBBVUJfVFJBQ0VfVFlQ RV9CQVRDSCwgMCwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFubm90YXRpb25fYWRkX3N0YXRl KHN0cnVjdCBhbm5vdGF0aW9uc19jb250ZXh0ICphdWIsCi0JCQkJIHVpbnQzMl90IHN0YXRlX3R5 cGUsCi0JCQkJIHVpbnQzMl90IHN0YXJ0X29mZnNldCwKLQkJCQkgc2l6ZV90ICAgc2l6ZSkKLXsK LQlpZ3RfYXNzZXJ0KGF1Yi0+aW5kZXggPCBNQVhfQU5OT1RBVElPTlMpOwotCi0JYWRkX2Fubm90 YXRpb24oJmF1Yi0+YW5ub3RhdGlvbnNbYXViLT5pbmRleCsrXSwKLQkJICAgICAgIEFVQl9UUkFD RV9UWVBFX05PVFlQRSwgMCwKLQkJICAgICAgIHN0YXJ0X29mZnNldCk7Ci0JYWRkX2Fubm90YXRp b24oJmF1Yi0+YW5ub3RhdGlvbnNbYXViLT5pbmRleCsrXSwKLQkJICAgICAgIEFVQl9UUkFDRV9U WVBFKHN0YXRlX3R5cGUpLAotCQkgICAgICAgQVVCX1RSQUNFX1NVQlRZUEUoc3RhdGVfdHlwZSks Ci0JCSAgICAgICBzdGFydF9vZmZzZXQgKyBzaXplKTsKLX0KLQotc3RhdGljIHZvaWQgYW5ub3Rh dGlvbl9mbHVzaChzdHJ1Y3QgYW5ub3RhdGlvbnNfY29udGV4dCAqYXViLAotCQkJICAgICBzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQotewotCWlmICghaWd0X2F1Yl9kdW1wX2VuYWJs ZWQoKSkKLQkJcmV0dXJuOwotCi0JZHJtX2ludGVsX2J1Zm1ncl9nZW1fc2V0X2F1Yl9hbm5vdGF0 aW9ucyhiYXRjaC0+Ym8sCi0JCQkJCQkgYXViLT5hbm5vdGF0aW9ucywKLQkJCQkJCSBhdWItPmlu ZGV4KTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjZfcmVuZGVyX2ZsdXNoKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCSAgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQsIHVpbnQz Ml90IGJhdGNoX2VuZCkKLXsKLQlpZ3RfYXNzZXJ0X2VxKGRybV9pbnRlbF9ib19zdWJkYXRhKGJh dGNoLT5ibywKLQkJCQkJICAgMCwgNDA5NiwgYmF0Y2gtPmJ1ZmZlciksCi0JCSAgICAgIDApOwot CWlndF9hc3NlcnRfZXEoZHJtX2ludGVsX2dlbV9ib19jb250ZXh0X2V4ZWMoYmF0Y2gtPmJvLCBj b250ZXh0LAotCQkJCQkJICAgIGJhdGNoX2VuZCwgMCksCi0JCSAgICAgIDApOwotfQotCiAvKiBN b3N0bHkgY29weStwYXN0ZSBmcm9tIGdlbjYsIGV4Y2VwdCBoZWlnaHQsIHdpZHRoLCBwaXRjaCBt b3ZlZCAqLwogc3RhdGljIHVpbnQzMl90Ci1nZW44X2JpbmRfYnVmKHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gsCi0JICAgICAgc3RydWN0IGFubm90YXRpb25zX2NvbnRleHQgKmF1YiwK LQkgICAgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLCBpbnQgaXNfZHN0KQorZ2VuOF9iaW5k X2J1ZihzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKKwkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfYnVm ICpidWYsIGludCBpc19kc3QpCiB7CiAJc3RydWN0IGdlbjhfc3VyZmFjZV9zdGF0ZSAqc3M7Ci0J dWludDMyX3Qgd3JpdGVfZG9tYWluLCByZWFkX2RvbWFpbiwgb2Zmc2V0OwotCWludCByZXQ7CisJ dWludDMyX3Qgd3JpdGVfZG9tYWluLCByZWFkX2RvbWFpbjsKKwl1aW50NjRfdCBhZGRyZXNzOwog CiAJaWd0X2Fzc2VydF9sdGUoYnVmLT5zdXJmYWNlWzBdLnN0cmlkZSwgMjU2KjEwMjQpOwotCWln dF9hc3NlcnRfbHRlKGlndF9idWZfd2lkdGgoYnVmKSwgMTYzODQpOwotCWlndF9hc3NlcnRfbHRl KGlndF9idWZfaGVpZ2h0KGJ1ZiksIDE2Mzg0KTsKKwlpZ3RfYXNzZXJ0X2x0ZShpbnRlbF9idWZf d2lkdGgoYnVmKSwgMTYzODQpOworCWlndF9hc3NlcnRfbHRlKGludGVsX2J1Zl9oZWlnaHQoYnVm KSwgMTYzODQpOwogCiAJaWYgKGlzX2RzdCkgewogCQl3cml0ZV9kb21haW4gPSByZWFkX2RvbWFp biA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7CkBAIC0xNjEsOSArODUsNyBAQCBnZW44X2JpbmRf YnVmKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAJCXJlYWRfZG9tYWluID0gSTkx NV9HRU1fRE9NQUlOX1NBTVBMRVI7CiAJfQogCi0Jc3MgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJk YXRhX2FsbG9jKGJhdGNoLCBzaXplb2YoKnNzKSwgNjQpOwotCW9mZnNldCA9IGludGVsX2JhdGNo YnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCBzcyk7Ci0JYW5ub3RhdGlvbl9hZGRfc3RhdGUo YXViLCBBVUJfVFJBQ0VfU1VSRkFDRV9TVEFURSwgb2Zmc2V0LCBzaXplb2YoKnNzKSk7CisJc3Mg PSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCA2NCk7CiAKIAlzcy0+c3MwLnN1cmZhY2VfdHlwZSA9 IFNVUkZBQ0VfMkQ7CiAJc3dpdGNoIChidWYtPmJwcCkgewpAQCAtMTgxLDIzICsxMDMsMjEgQEAg Z2VuOF9iaW5kX2J1ZihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAogCWVsc2UgaWYg KGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5HX1kpCiAJCXNzLT5zczAudGlsZWRfbW9kZSA9IDM7 CiAKLQlpZiAoSVNfQ0hFUlJZVklFVyhiYXRjaC0+ZGV2aWQpKQorCWlmIChJU19DSEVSUllWSUVX KGliYi0+ZGV2aWQpKQogCQlzcy0+c3MxLm1lbW9yeV9vYmplY3RfY29udHJvbCA9IENIVl9NT0NT X1dCIHwgQ0hWX01PQ1NfTDM7CiAJZWxzZQogCQlzcy0+c3MxLm1lbW9yeV9vYmplY3RfY29udHJv bCA9IEJEV19NT0NTX1BURSB8CiAJCQlCRFdfTU9DU19UQ19MM19QVEUgfCBCRFdfTU9DU19BR0Uo MCk7CiAKLQlzcy0+c3M4LmJhc2VfYWRkciA9IGJ1Zi0+Ym8tPm9mZnNldDY0OwotCXNzLT5zczku YmFzZV9hZGRyX2hpID0gYnVmLT5iby0+b2Zmc2V0NjQgPj4gMzI7Ci0KLQlyZXQgPSBkcm1faW50 ZWxfYm9fZW1pdF9yZWxvYyhiYXRjaC0+Ym8sCi0JCQkJICAgICAgaW50ZWxfYmF0Y2hidWZmZXJf c3ViZGF0YV9vZmZzZXQoYmF0Y2gsICZzcy0+c3M4KSwKLQkJCQkgICAgICBidWYtPmJvLCAwLAot CQkJCSAgICAgIHJlYWRfZG9tYWluLCB3cml0ZV9kb21haW4pOwotCWlndF9hc3NlcnQocmV0ID09 IDApOworCWFkZHJlc3MgPSBpbnRlbF9iYl9vZmZzZXRfcmVsb2MoaWJiLCBidWYtPmhhbmRsZSwK KwkJCQkJcmVhZF9kb21haW4sIHdyaXRlX2RvbWFpbiwKKwkJCQkJaW50ZWxfYmJfb2Zmc2V0KGli YikgKyA0ICogOCwKKwkJCQkJYnVmLT5hZGRyLm9mZnNldCk7CisJc3MtPnNzOC5iYXNlX2FkZHIg PSBhZGRyZXNzOworCXNzLT5zczkuYmFzZV9hZGRyX2hpID0gYWRkcmVzcyA+PiAzMjsKIAotCXNz LT5zczIuaGVpZ2h0ID0gaWd0X2J1Zl9oZWlnaHQoYnVmKSAtIDE7Ci0Jc3MtPnNzMi53aWR0aCAg PSBpZ3RfYnVmX3dpZHRoKGJ1ZikgLSAxOworCXNzLT5zczIuaGVpZ2h0ID0gaW50ZWxfYnVmX2hl aWdodChidWYpIC0gMTsKKwlzcy0+c3MyLndpZHRoICA9IGludGVsX2J1Zl93aWR0aChidWYpIC0g MTsKIAlzcy0+c3MzLnBpdGNoICA9IGJ1Zi0+c3VyZmFjZVswXS5zdHJpZGUgLSAxOwogCiAJc3Mt PnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9yID0gNDsKQEAgLTIwNSwzOSArMTI1LDMyIEBAIGdl bjhfYmluZF9idWYoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAlzcy0+c3M3LnNo YWRlcl9jaGFuZWxfc2VsZWN0X2IgPSA2OwogCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3Rf YSA9IDc7CiAKLQlyZXR1cm4gb2Zmc2V0OworCXJldHVybiBpbnRlbF9iYl9wdHJfYWRkX3JldHVy bl9wcmV2X29mZnNldChpYmIsIHNpemVvZigqc3MpKTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1n ZW44X2JpbmRfc3VyZmFjZXMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJICAg c3RydWN0IGFubm90YXRpb25zX2NvbnRleHQgKmF1YiwKLQkJICAgY29uc3Qgc3RydWN0IGlndF9i dWYgKnNyYywKLQkJICAgY29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCkKK2dlbjhfYmluZF9zdXJm YWNlcyhzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKKwkJICAgY29uc3Qgc3RydWN0IGludGVsX2J1ZiAq c3JjLAorCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfYnVmICpkc3QpCiB7Ci0JdWludDMyX3QgKmJp bmRpbmdfdGFibGUsIG9mZnNldDsKKwl1aW50MzJfdCAqYmluZGluZ190YWJsZSwgYmluZGluZ190 YWJsZV9vZmZzZXQ7CiAKLQliaW5kaW5nX3RhYmxlID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0 YV9hbGxvYyhiYXRjaCwgOCwgMzIpOwotCW9mZnNldCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRh dGFfb2Zmc2V0KGJhdGNoLCBiaW5kaW5nX3RhYmxlKTsKLQlhbm5vdGF0aW9uX2FkZF9zdGF0ZShh dWIsIEFVQl9UUkFDRV9CSU5ESU5HX1RBQkxFLCBvZmZzZXQsIDgpOworCWJpbmRpbmdfdGFibGUg PSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCAzMik7CisJYmluZGluZ190YWJsZV9vZmZzZXQgPSBp bnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNldChpYmIsIDgpOwogCi0JYmluZGluZ190 YWJsZVswXSA9IGdlbjhfYmluZF9idWYoYmF0Y2gsIGF1YiwgZHN0LCAxKTsKLQliaW5kaW5nX3Rh YmxlWzFdID0gZ2VuOF9iaW5kX2J1ZihiYXRjaCwgYXViLCBzcmMsIDApOworCWJpbmRpbmdfdGFi bGVbMF0gPSBnZW44X2JpbmRfYnVmKGliYiwgZHN0LCAxKTsKKwliaW5kaW5nX3RhYmxlWzFdID0g Z2VuOF9iaW5kX2J1ZihpYmIsIHNyYywgMCk7CiAKLQlyZXR1cm4gb2Zmc2V0OworCXJldHVybiBi aW5kaW5nX3RhYmxlX29mZnNldDsKIH0KIAogLyogTW9zdGx5IGNvcHkrcGFzdGUgZnJvbSBnZW42 LCBleGNlcHQgd3JhcCBtb2RlcyBtb3ZlZCAqLwogc3RhdGljIHVpbnQzMl90Ci1nZW44X2NyZWF0 ZV9zYW1wbGVyKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCSAgICBzdHJ1Y3Qg YW5ub3RhdGlvbnNfY29udGV4dCAqYXViKQorZ2VuOF9jcmVhdGVfc2FtcGxlcihzdHJ1Y3QgaW50 ZWxfYmIgKmliYikKIHsKIAlzdHJ1Y3QgZ2VuOF9zYW1wbGVyX3N0YXRlICpzczsKLQl1aW50MzJf dCBvZmZzZXQ7CiAKLQlzcyA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gs IHNpemVvZigqc3MpLCA2NCk7Ci0Jb2Zmc2V0ID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9v ZmZzZXQoYmF0Y2gsIHNzKTsKLQlhbm5vdGF0aW9uX2FkZF9zdGF0ZShhdWIsIEFVQl9UUkFDRV9T QU1QTEVSX1NUQVRFLAotCQkJICAgICBvZmZzZXQsIHNpemVvZigqc3MpKTsKKwlzcyA9IGludGVs X2JiX3B0cl9hbGlnbihpYmIsIDY0KTsKIAogCXNzLT5zczAubWluX2ZpbHRlciA9IEdFTjRfTUFQ RklMVEVSX05FQVJFU1Q7CiAJc3MtPnNzMC5tYWdfZmlsdGVyID0gR0VONF9NQVBGSUxURVJfTkVB UkVTVDsKQEAgLTI0OSwyMSArMTYyLDE1IEBAIGdlbjhfY3JlYXRlX3NhbXBsZXIoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAkgKiBzYW1wbGVyIGZldGNoLCBidXQgY291bGRuJ3Qg bWFrZSBpdCB3b3JrLiAqLwogCXNzLT5zczMubm9uX25vcm1hbGl6ZWRfY29vcmQgPSAwOwogCi0J cmV0dXJuIG9mZnNldDsKKwlyZXR1cm4gaW50ZWxfYmJfcHRyX2FkZF9yZXR1cm5fcHJldl9vZmZz ZXQoaWJiLCBzaXplb2YoKnNzKSk7CiB9CiAKIHN0YXRpYyB1aW50MzJfdAotZ2VuOF9maWxsX3Bz KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JICAgICBzdHJ1Y3QgYW5ub3RhdGlv bnNfY29udGV4dCAqYXViLAorZ2VuOF9maWxsX3BzKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAogCSAg ICAgY29uc3QgdWludDMyX3Qga2VybmVsW11bNF0sCiAJICAgICBzaXplX3Qgc2l6ZSkKIHsKLQl1 aW50MzJfdCBvZmZzZXQ7Ci0KLQlvZmZzZXQgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9jb3B5X2RhdGEo YmF0Y2gsIGtlcm5lbCwgc2l6ZSwgNjQpOwotCWFubm90YXRpb25fYWRkX3N0YXRlKGF1YiwgQVVC X1RSQUNFX0tFUk5FTF9JTlNUUlVDVElPTlMsIG9mZnNldCwgc2l6ZSk7Ci0KLQlyZXR1cm4gb2Zm c2V0OworCXJldHVybiBpbnRlbF9iYl9jb3B5X2RhdGEoaWJiLCBrZXJuZWwsIHNpemUsIDY0KTsK IH0KIAogLyoKQEAgLTI3NywzNCArMTg0LDI5IEBAIGdlbjhfZmlsbF9wcyhzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgKmJhdGNoLAogICogc2VlIGdlbjZfZW1pdF92ZXJ0ZXhfZWxlbWVudHMKICAq Lwogc3RhdGljIHVpbnQzMl90Ci1nZW43X2ZpbGxfdmVydGV4X2J1ZmZlcl9kYXRhKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQkgICAgIHN0cnVjdCBhbm5vdGF0aW9uc19jb250 ZXh0ICphdWIsCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsCitnZW43X2ZpbGxf dmVydGV4X2J1ZmZlcl9kYXRhKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJICAgICBjb25zdCBz dHJ1Y3QgaW50ZWxfYnVmICpzcmMsCiAJCQkgICAgIHVpbnQzMl90IHNyY194LCB1aW50MzJfdCBz cmNfeSwKIAkJCSAgICAgdWludDMyX3QgZHN0X3gsIHVpbnQzMl90IGRzdF95LAogCQkJICAgICB1 aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0KQogewotCXZvaWQgKnN0YXJ0OwogCXVpbnQz Ml90IG9mZnNldDsKIAotCWludGVsX2JhdGNoYnVmZmVyX2FsaWduKGJhdGNoLCA4KTsKLQlzdGFy dCA9IGJhdGNoLT5wdHI7CisJaW50ZWxfYmJfcHRyX2FsaWduKGliYiwgOCk7CisJb2Zmc2V0ID0g aW50ZWxfYmJfb2Zmc2V0KGliYik7CiAKLQllbWl0X3ZlcnRleF8ycyhiYXRjaCwgZHN0X3ggKyB3 aWR0aCwgZHN0X3kgKyBoZWlnaHQpOwotCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoYmF0Y2gsIHNy Y194ICsgd2lkdGgsIGlndF9idWZfd2lkdGgoc3JjKSk7Ci0JZW1pdF92ZXJ0ZXhfbm9ybWFsaXpl ZChiYXRjaCwgc3JjX3kgKyBoZWlnaHQsIGlndF9idWZfaGVpZ2h0KHNyYykpOworCWVtaXRfdmVy dGV4XzJzKGliYiwgZHN0X3ggKyB3aWR0aCwgZHN0X3kgKyBoZWlnaHQpOworCWVtaXRfdmVydGV4 X25vcm1hbGl6ZWQoaWJiLCBzcmNfeCArIHdpZHRoLCBpbnRlbF9idWZfd2lkdGgoc3JjKSk7CisJ ZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChpYmIsIHNyY195ICsgaGVpZ2h0LCBpbnRlbF9idWZfaGVp Z2h0KHNyYykpOwogCi0JZW1pdF92ZXJ0ZXhfMnMoYmF0Y2gsIGRzdF94LCBkc3RfeSArIGhlaWdo dCk7Ci0JZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3gsIGlndF9idWZfd2lkdGgo c3JjKSk7Ci0JZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3kgKyBoZWlnaHQsIGln dF9idWZfaGVpZ2h0KHNyYykpOworCWVtaXRfdmVydGV4XzJzKGliYiwgZHN0X3gsIGRzdF95ICsg aGVpZ2h0KTsKKwllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGliYiwgc3JjX3gsIGludGVsX2J1Zl93 aWR0aChzcmMpKTsKKwllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGliYiwgc3JjX3kgKyBoZWlnaHQs IGludGVsX2J1Zl9oZWlnaHQoc3JjKSk7CiAKLQllbWl0X3ZlcnRleF8ycyhiYXRjaCwgZHN0X3gs IGRzdF95KTsKLQllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGJhdGNoLCBzcmNfeCwgaWd0X2J1Zl93 aWR0aChzcmMpKTsKLQllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGJhdGNoLCBzcmNfeSwgaWd0X2J1 Zl9oZWlnaHQoc3JjKSk7CisJZW1pdF92ZXJ0ZXhfMnMoaWJiLCBkc3RfeCwgZHN0X3kpOworCWVt aXRfdmVydGV4X25vcm1hbGl6ZWQoaWJiLCBzcmNfeCwgaW50ZWxfYnVmX3dpZHRoKHNyYykpOwor CWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoaWJiLCBzcmNfeSwgaW50ZWxfYnVmX2hlaWdodChzcmMp KTsKIAotCW9mZnNldCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCBz dGFydCk7Ci0JYW5ub3RhdGlvbl9hZGRfc3RhdGUoYXViLCBBVUJfVFJBQ0VfVkVSVEVYX0JVRkZF UiwKLQkJCSAgICAgb2Zmc2V0LCAzICogVkVSVEVYX1NJWkUpOwogCXJldHVybiBvZmZzZXQ7CiB9 CiAKQEAgLTMxOCwyNSArMjIwLDI1IEBAIGdlbjdfZmlsbF92ZXJ0ZXhfYnVmZmVyX2RhdGEoc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKICAqIHBhY2tlZC4KICAqLwogc3RhdGljIHZv aWQKLWdlbjZfZW1pdF92ZXJ0ZXhfZWxlbWVudHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCkgeworZ2VuNl9lbWl0X3ZlcnRleF9lbGVtZW50cyhzdHJ1Y3QgaW50ZWxfYmIgKmliYikg ewogCS8qCiAJICogVGhlIFZVRSBsYXlvdXQKIAkgKiAgICBkd29yZCAwLTM6IHBhZCAoMCwgMCwg MC4gMCkKIAkgKiAgICBkd29yZCA0LTc6IHBvc2l0aW9uICh4LCB5LCAwLCAxLjApLAogCSAqICAg IGR3b3JkIDgtMTE6IHRleHR1cmUgY29vcmRpbmF0ZSAwICh1MCwgdjAsIDAsIDEuMCkKIAkgKi8K LQlPVVRfQkFUQ0goR0VONF8zRFNUQVRFX1ZFUlRFWF9FTEVNRU5UUyB8ICgzICogMiArIDEgLSAy KSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF8zRFNUQVRFX1ZFUlRFWF9FTEVNRU5UUyB8ICgz ICogMiArIDEgLSAyKSk7CiAKIAkvKiBFbGVtZW50IHN0YXRlIDAuIFRoZXNlIGFyZSA0IGR3b3Jk cyBvZiAwIHJlcXVpcmVkIGZvciB0aGUgVlVFIGZvcm1hdC4KIAkgKiBXZSBkb24ndCByZWFsbHkg a25vdyBvciBjYXJlIHdoYXQgdGhleSBkby4KIAkgKi8KLQlPVVRfQkFUQ0goMCA8PCBHRU42X1ZF MF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZUIHwgR0VONl9WRTBfVkFMSUQgfAotCQkgIFNVUkZB Q0VGT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUIDw8IFZFMF9GT1JNQVRfU0hJRlQgfAotCQkgIDAg PDwgVkUwX09GRlNFVF9TSElGVCk7IC8qIHdlIHNwZWNpZnkgMCwgYnV0IGl0J3MgcmVhbGx5IGRv ZXMgbm90IGV4aXN0ICovCi0JT1VUX0JBVENIKEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBW RTFfVkZDT01QT05FTlRfMF9TSElGVCB8Ci0JCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8 IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKLQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAg PDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVf MCA8PCBWRTFfVkZDT01QT05FTlRfM19TSElGVCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCA8PCBH RU42X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZUIHwgR0VONl9WRTBfVkFMSUQgfAorCQkg ICAgIFNVUkZBQ0VGT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUIDw8IFZFMF9GT1JNQVRfU0hJRlQg fAorCQkgICAgIDAgPDwgVkUwX09GRlNFVF9TSElGVCk7IC8qIHdlIHNwZWNpZnkgMCwgYnV0IGl0 J3MgcmVhbGx5IGRvZXMgbm90IGV4aXN0ICovCisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF9WRkNP TVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8wX1NISUZUIHwKKwkJICAgICBHRU40 X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAorCQkgICAg IEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfMl9TSElGVCB8CisJ CSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZU KTsKIAogCS8qIEVsZW1lbnQgc3RhdGUgMSAtIE91ciAiZGVzdGluYXRpb24iIHZlcnRpY2VzLiBU aGVzZSBhcmUgcGFzc2VkIGRvd24KIAkgKiB0aHJvdWdoIHRoZSBwaXBlbGluZSwgYW5kIGV2ZW50 dWFsbHkgbWFrZSBpdCB0byB0aGUgcGl4ZWwgc2hhZGVyIGFzCkBAIC0zNDQsMjUgKzI0NiwyNSBA QCBnZW42X2VtaXRfdmVydGV4X2VsZW1lbnRzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gpIHsKIAkgKiBzaWduZWQvc2NhbGVkIGJlY2F1c2Ugb2YgZ2VuNiByZW5kZXJjb3B5LiBJIHNl ZSBubyBwYXJ0aWN1bGFyIHJlYXNvbgogCSAqIGZvciBkb2luZyB0aGlzIHRob3VnaC4KIAkgKi8K LQlPVVRfQkFUQ0goMCA8PCBHRU42X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZUIHwgR0VO Nl9WRTBfVkFMSUQgfAotCQkgIFNVUkZBQ0VGT1JNQVRfUjE2RzE2X1NTQ0FMRUQgPDwgVkUwX0ZP Uk1BVF9TSElGVCB8Ci0JCSAgMCA8PCBWRTBfT0ZGU0VUX1NISUZUKTsgLyogb2Zmc2V0cyB2YiBp biBieXRlcyAqLwotCU9VVF9CQVRDSChHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFf VkZDT01QT05FTlRfMF9TSElGVCB8Ci0JCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwg VkUxX1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8 PCBWRTFfVkZDT01QT05FTlRfMl9TSElGVCB8Ci0JCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8x X0ZMVCA8PCBWRTFfVkZDT01QT05FTlRfM19TSElGVCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCA8 PCBHRU42X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZUIHwgR0VONl9WRTBfVkFMSUQgfAor CQkgICAgIFNVUkZBQ0VGT1JNQVRfUjE2RzE2X1NTQ0FMRUQgPDwgVkUwX0ZPUk1BVF9TSElGVCB8 CisJCSAgICAgMCA8PCBWRTBfT0ZGU0VUX1NISUZUKTsgLyogb2Zmc2V0cyB2YiBpbiBieXRlcyAq LworCWludGVsX2JiX291dChpYmIsIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9W RkNPTVBPTkVOVF8wX1NISUZUIHwKKwkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8 PCBWRTFfVkZDT01QT05FTlRfMV9TSElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9S RV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NISUZUIHwKKwkJICAgICBHRU40X1ZGQ09NUE9ORU5U X1NUT1JFXzFfRkxUIDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZUKTsKIAogCS8qIEVsZW1lbnQg c3RhdGUgMi4gTGFzdCBidXQgbm90IGxlYXN0IHdlIHN0b3JlIHRoZSBVLFYgY29tcG9uZW50cyBh cwogCSAqIG5vcm1hbGl6ZWQgZmxvYXRzLiBUaGVzZSB3aWxsIGJlIHVzZWQgaW4gdGhlIHBpeGVs IHNoYWRlciB0byBzYW1wbGUKIAkgKiBmcm9tIHRoZSBzb3VyY2UgYnVmZmVyLgogCSAqLwotCU9V VF9CQVRDSCgwIDw8IEdFTjZfVkUwX1ZFUlRFWF9CVUZGRVJfSU5ERVhfU0hJRlQgfCBHRU42X1ZF MF9WQUxJRCB8Ci0JCSAgU1VSRkFDRUZPUk1BVF9SMzJHMzJfRkxPQVQgPDwgVkUwX0ZPUk1BVF9T SElGVCB8Ci0JCSAgNCA8PCBWRTBfT0ZGU0VUX1NISUZUKTsJLyogb2Zmc2V0IHZiIGluIGJ5dGVz ICovCi0JT1VUX0JBVENIKEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBP TkVOVF8wX1NISUZUIHwKLQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZD T01QT05FTlRfMV9TSElGVCB8Ci0JCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9W RkNPTVBPTkVOVF8yX1NISUZUIHwKLQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzFfRkxUIDw8 IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZUKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwIDw8IEdFTjZf VkUwX1ZFUlRFWF9CVUZGRVJfSU5ERVhfU0hJRlQgfCBHRU42X1ZFMF9WQUxJRCB8CisJCSAgICAg U1VSRkFDRUZPUk1BVF9SMzJHMzJfRkxPQVQgPDwgVkUwX0ZPUk1BVF9TSElGVCB8CisJCSAgICAg NCA8PCBWRTBfT0ZGU0VUX1NISUZUKTsJLyogb2Zmc2V0IHZiIGluIGJ5dGVzICovCisJaW50ZWxf YmJfb3V0KGliYiwgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5U XzBfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNP TVBPTkVOVF8xX1NISUZUIHwKKwkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUx X1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMV9G TFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQpOwogfQogCiAvKgpAQCAtMzcxLDQ0ICsyNzMs MzUgQEAgZ2VuNl9lbWl0X3ZlcnRleF9lbGVtZW50cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoKSB7CiAgKiBAYmF0Y2gKICAqIEBvZmZzZXQgLSBieXR3IG9mZnNldCB3aXRoaW4gdGhl IEBiYXRjaCB3aGVyZSB0aGUgdmVydGV4IGJ1ZmZlciBzdGFydHMuCiAgKi8KLXN0YXRpYyB2b2lk IGdlbjhfZW1pdF92ZXJ0ZXhfYnVmZmVyKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gs Ci0JCQkJICAgIHVpbnQzMl90IG9mZnNldCkgewotCU9VVF9CQVRDSChHRU40XzNEU1RBVEVfVkVS VEVYX0JVRkZFUlMgfCAoMSArICg0ICogMSkgLSAyKSk7Ci0JT1VUX0JBVENIKDAgPDwgR0VONl9W QjBfQlVGRkVSX0lOREVYX1NISUZUIHwgLyogVkIgMHRoIGluZGV4ICovCi0JCSAgR0VOOF9WQjBf QlVGRkVSX0FERFJfTU9EX0VOIHwgLyogQWRkcmVzcyBNb2RpZnkgRW5hYmxlICovCi0JCSAgVkVS VEVYX1NJWkUgPDwgVkIwX0JVRkZFUl9QSVRDSF9TSElGVCk7Ci0JT1VUX1JFTE9DKGJhdGNoLT5i bywgSTkxNV9HRU1fRE9NQUlOX1ZFUlRFWCwgMCwgb2Zmc2V0KTsKLQlPVVRfQkFUQ0goMyAqIFZF UlRFWF9TSVpFKTsKK3N0YXRpYyB2b2lkIGdlbjhfZW1pdF92ZXJ0ZXhfYnVmZmVyKHN0cnVjdCBp bnRlbF9iYiAqaWJiLCB1aW50MzJfdCBvZmZzZXQpCit7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VO NF8zRFNUQVRFX1ZFUlRFWF9CVUZGRVJTIHwgKDEgKyAoNCAqIDEpIC0gMikpOworCWludGVsX2Ji X291dChpYmIsIDAgPDwgR0VONl9WQjBfQlVGRkVSX0lOREVYX1NISUZUIHwgLyogVkIgMHRoIGlu ZGV4ICovCisJCSAgICAgR0VOOF9WQjBfQlVGRkVSX0FERFJfTU9EX0VOIHwgLyogQWRkcmVzcyBN b2RpZnkgRW5hYmxlICovCisJCSAgICAgVkVSVEVYX1NJWkUgPDwgVkIwX0JVRkZFUl9QSVRDSF9T SElGVCk7CisJaW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIGliYi0+aGFuZGxlLAorCQkJICAgIEk5 MTVfR0VNX0RPTUFJTl9WRVJURVgsIDAsCisJCQkgICAgb2Zmc2V0LCBpYmItPmJhdGNoX29mZnNl dCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMyAqIFZFUlRFWF9TSVpFKTsKIH0KIAogc3RhdGljIHVp bnQzMl90Ci1nZW42X2NyZWF0ZV9jY19zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoLAotCQkgICAgIHN0cnVjdCBhbm5vdGF0aW9uc19jb250ZXh0ICphdWIpCitnZW42X2NyZWF0 ZV9jY19zdGF0ZShzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKIAlzdHJ1Y3QgZ2VuNl9jb2xvcl9j YWxjX3N0YXRlICpjY19zdGF0ZTsKLQl1aW50MzJfdCBvZmZzZXQ7CiAKLQljY19zdGF0ZSA9IGlu dGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsCi0JCQkJCQkgICBzaXplb2YoKmNj X3N0YXRlKSwgNjQpOwotCW9mZnNldCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0 KGJhdGNoLCBjY19zdGF0ZSk7Ci0JYW5ub3RhdGlvbl9hZGRfc3RhdGUoYXViLCBBVUJfVFJBQ0Vf Q0NfU1RBVEUsCi0JCQkgICAgIG9mZnNldCwgc2l6ZW9mKCpjY19zdGF0ZSkpOworCWNjX3N0YXRl ID0gaW50ZWxfYmJfcHRyX2FsaWduKGliYiwgNjQpOwogCi0JcmV0dXJuIG9mZnNldDsKKwlyZXR1 cm4gaW50ZWxfYmJfcHRyX2FkZF9yZXR1cm5fcHJldl9vZmZzZXQoaWJiLCBzaXplb2YoKmNjX3N0 YXRlKSk7CiB9CiAKIHN0YXRpYyB1aW50MzJfdAotZ2VuOF9jcmVhdGVfYmxlbmRfc3RhdGUoc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCXN0cnVjdCBhbm5vdGF0aW9uc19jb250 ZXh0ICphdWIpCitnZW44X2NyZWF0ZV9ibGVuZF9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmIgKmliYikK IHsKIAlzdHJ1Y3QgZ2VuOF9ibGVuZF9zdGF0ZSAqYmxlbmQ7CiAJaW50IGk7Ci0JdWludDMyX3Qg b2Zmc2V0OwogCi0JYmxlbmQgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX2FsbG9jKGJhdGNo LCBzaXplb2YoKmJsZW5kKSwgNjQpOwotCW9mZnNldCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRh dGFfb2Zmc2V0KGJhdGNoLCBibGVuZCk7Ci0JYW5ub3RhdGlvbl9hZGRfc3RhdGUoYXViLCBBVUJf VFJBQ0VfQkxFTkRfU1RBVEUsCi0JCQkgICAgIG9mZnNldCwgc2l6ZW9mKCpibGVuZCkpOworCWJs ZW5kID0gaW50ZWxfYmJfcHRyX2FsaWduKGliYiwgNjQpOwogCiAJZm9yIChpID0gMDsgaSA8IDE2 OyBpKyspIHsKIAkJYmxlbmQtPmJzW2ldLmRlc3RfYmxlbmRfZmFjdG9yID0gR0VONl9CTEVOREZB Q1RPUl9aRVJPOwpAQCAtNDE4LDQ1MSArMzExLDQ0MCBAQCBnZW44X2NyZWF0ZV9ibGVuZF9zdGF0 ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAogCQlibGVuZC0+YnNbaV0uY29sb3Jf YnVmZmVyX2JsZW5kID0gMDsKIAl9CiAKLQlyZXR1cm4gb2Zmc2V0OworCXJldHVybiBpbnRlbF9i Yl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNldChpYmIsIHNpemVvZigqYmxlbmQpKTsKIH0KIAog c3RhdGljIHVpbnQzMl90Ci1nZW42X2NyZWF0ZV9jY192aWV3cG9ydChzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoLAotCQkJc3RydWN0IGFubm90YXRpb25zX2NvbnRleHQgKmF1YikKK2dl bjZfY3JlYXRlX2NjX3ZpZXdwb3J0KHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewogCXN0cnVjdCBn ZW40X2NjX3ZpZXdwb3J0ICp2cDsKLQl1aW50MzJfdCBvZmZzZXQ7CiAKLQl2cCA9IGludGVsX2Jh dGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigqdnApLCAzMik7Ci0Jb2Zmc2V0 ID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsIHZwKTsKLQlhbm5vdGF0 aW9uX2FkZF9zdGF0ZShhdWIsIEFVQl9UUkFDRV9DQ19WUF9TVEFURSwKLQkJCSAgICAgb2Zmc2V0 LCBzaXplb2YoKnZwKSk7CisJdnAgPSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCAzMik7CiAKIAkv KiBYWFggSSBkb24ndCB1bmRlcnN0YW5kIHRoaXMgKi8KIAl2cC0+bWluX2RlcHRoID0gLTEuZTM1 OwogCXZwLT5tYXhfZGVwdGggPSAxLmUzNTsKIAotCXJldHVybiBvZmZzZXQ7CisJcmV0dXJuIGlu dGVsX2JiX3B0cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgc2l6ZW9mKCp2cCkpOwogfQog CiBzdGF0aWMgdWludDMyX3QKLWdlbjdfY3JlYXRlX3NmX2NsaXBfdmlld3BvcnQoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCXN0cnVjdCBhbm5vdGF0aW9uc19jb250ZXh0ICph dWIpCitnZW43X2NyZWF0ZV9zZl9jbGlwX3ZpZXdwb3J0KHN0cnVjdCBpbnRlbF9iYiAqaWJiKQog ewogCS8qIFhYWCB0aGVzZSBhcmUgbGlrZWx5IG5vdCBuZWVkZWQgKi8KIAlzdHJ1Y3QgZ2VuN19z Zl9jbGlwX3ZpZXdwb3J0ICpzY3Zfc3RhdGU7Ci0JdWludDMyX3Qgb2Zmc2V0OwogCi0Jc2N2X3N0 YXRlID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwKLQkJCQkJCSAgICBz aXplb2YoKnNjdl9zdGF0ZSksIDY0KTsKLQlvZmZzZXQgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJk YXRhX29mZnNldChiYXRjaCwgc2N2X3N0YXRlKTsKLQlhbm5vdGF0aW9uX2FkZF9zdGF0ZShhdWIs IEFVQl9UUkFDRV9DTElQX1ZQX1NUQVRFLAotCQkJICAgICBvZmZzZXQsIHNpemVvZigqc2N2X3N0 YXRlKSk7CisJc2N2X3N0YXRlID0gaW50ZWxfYmJfcHRyX2FsaWduKGliYiwgNjQpOwogCiAJc2N2 X3N0YXRlLT5ndWFyZGJhbmQueG1pbiA9IDA7CiAJc2N2X3N0YXRlLT5ndWFyZGJhbmQueG1heCA9 IDEuMGY7CiAJc2N2X3N0YXRlLT5ndWFyZGJhbmQueW1pbiA9IDA7CiAJc2N2X3N0YXRlLT5ndWFy ZGJhbmQueW1heCA9IDEuMGY7CiAKLQlyZXR1cm4gb2Zmc2V0OworCXJldHVybiBpbnRlbF9iYl9w dHJfYWRkX3JldHVybl9wcmV2X29mZnNldChpYmIsIHNpemVvZigqc2N2X3N0YXRlKSk7CiB9CiAK IHN0YXRpYyB1aW50MzJfdAotZ2VuNl9jcmVhdGVfc2Npc3Nvcl9yZWN0KHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQlzdHJ1Y3QgYW5ub3RhdGlvbnNfY29udGV4dCAqYXViKQor Z2VuNl9jcmVhdGVfc2Npc3Nvcl9yZWN0KHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewogCXN0cnVj dCBnZW42X3NjaXNzb3JfcmVjdCAqc2Npc3NvcjsKLQl1aW50MzJfdCBvZmZzZXQ7CiAKLQlzY2lz c29yID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwgc2l6ZW9mKCpzY2lz c29yKSwgNjQpOwotCW9mZnNldCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJh dGNoLCBzY2lzc29yKTsKLQlhbm5vdGF0aW9uX2FkZF9zdGF0ZShhdWIsIEFVQl9UUkFDRV9TQ0lT U09SX1NUQVRFLAotCQkJICAgICBvZmZzZXQsIHNpemVvZigqc2Npc3NvcikpOworCXNjaXNzb3Ig PSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCA2NCk7CiAKLQlyZXR1cm4gb2Zmc2V0OworCXJldHVy biBpbnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNldChpYmIsIHNpemVvZigqc2Npc3Nv cikpOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuOF9lbWl0X3NpcChzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoKSB7Ci0JT1VUX0JBVENIKEdFTjRfU1RBVEVfU0lQIHwgKDMgLSAyKSk7Ci0J T1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKK2dlbjhfZW1pdF9zaXAoc3RydWN0IGludGVs X2JiICppYmIpIHsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40X1NUQVRFX1NJUCB8ICgzIC0gMikp OworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwogfQogCiBz dGF0aWMgdm9pZAotZ2VuN19lbWl0X3B1c2hfY29uc3RhbnRzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gpIHsKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX1BVU0hfQ09OU1RBTlRfQUxM T0NfVlMpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRFX1BVU0hfQ09O U1RBTlRfQUxMT0NfSFMpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRF X1BVU0hfQ09OU1RBTlRfQUxMT0NfRFMpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goR0VO OF8zRFNUQVRFX1BVU0hfQ09OU1RBTlRfQUxMT0NfR1MpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRf QkFUQ0goR0VON18zRFNUQVRFX1BVU0hfQ09OU1RBTlRfQUxMT0NfUFMpOwotCU9VVF9CQVRDSCgw KTsKK2dlbjdfZW1pdF9wdXNoX2NvbnN0YW50cyhzdHJ1Y3QgaW50ZWxfYmIgKmliYikgeworCWlu dGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9QVVNIX0NPTlNUQU5UX0FMTE9DX1ZTKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU44XzNEU1RBVEVfUFVT SF9DT05TVEFOVF9BTExPQ19IUyk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJf b3V0KGliYiwgR0VOOF8zRFNUQVRFX1BVU0hfQ09OU1RBTlRfQUxMT0NfRFMpOworCWludGVsX2Ji X291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9QVVNIX0NPTlNU QU5UX0FMTE9DX0dTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCBHRU43XzNEU1RBVEVfUFVTSF9DT05TVEFOVF9BTExPQ19QUyk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW44X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKHN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpIHsKLQlPVVRfQkFUQ0goR0VONF9TVEFURV9C QVNFX0FERFJFU1MgfCAoMTYgLSAyKSk7CitnZW44X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKHN0 cnVjdCBpbnRlbF9iYiAqaWJiKSB7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF9TVEFURV9CQVNF X0FERFJFU1MgfCAoMTYgLSAyKSk7CiAKIAkvKiBnZW5lcmFsICovCi0JT1VUX0JBVENIKDAgfCBC QVNFX0FERFJFU1NfTU9ESUZZKTsKLQlPVVRfQkFUQ0goMCk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOworCWludGVsX2JiX291dChpYmIsIDApOwogCiAJLyog c3RhdGVsZXNzIGRhdGEgcG9ydCAqLwotCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElG WSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOwogCiAJLyog c3VyZmFjZSAqLwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVS LCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKwlpbnRlbF9iYl9lbWl0X3JlbG9jKGliYiwgaWJi LT5oYW5kbGUsCisJCQkgICAgSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIsIDAsCisJCQkgICAgQkFT RV9BRERSRVNTX01PRElGWSwgaWJiLT5iYXRjaF9vZmZzZXQpOwogCiAJLyogZHluYW1pYyAqLwot CU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIgfCBJOTE1X0dFTV9E T01BSU5fSU5TVFJVQ1RJT04sCi0JCSAgMCwgQkFTRV9BRERSRVNTX01PRElGWSk7CisJaW50ZWxf YmJfZW1pdF9yZWxvYyhpYmIsIGliYi0+aGFuZGxlLAorCQkJICAgIEk5MTVfR0VNX0RPTUFJTl9S RU5ERVIgfCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsCisJCQkgICAgQkFTRV9BRERS RVNTX01PRElGWSwgaWJiLT5iYXRjaF9vZmZzZXQpOwogCiAJLyogaW5kaXJlY3QgKi8KLQlPVVRf QkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIDApOwogCiAJLyogaW5zdHJ1Y3Rpb24gKi8KLQlPVVRfUkVMT0MoYmF0Y2gt PmJvLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsIEJBU0VfQUREUkVTU19NT0RJRlkp OworCWludGVsX2JiX2VtaXRfcmVsb2MoaWJiLCBpYmItPmhhbmRsZSwKKwkJCSAgICBJOTE1X0dF TV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsCisJCQkgICAgQkFTRV9BRERSRVNTX01PRElGWSwgaWJi LT5iYXRjaF9vZmZzZXQpOwogCiAJLyogZ2VuZXJhbCBzdGF0ZSBidWZmZXIgc2l6ZSAqLwotCU9V VF9CQVRDSCgweGZmZmZmMDAwIHwgMSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMHhmZmZmZjAwMCB8 IDEpOwogCS8qIGR5bmFtaWMgc3RhdGUgYnVmZmVyIHNpemUgKi8KLQlPVVRfQkFUQ0goMSA8PCAx MiB8IDEpOworCWludGVsX2JiX291dChpYmIsIDEgPDwgMTIgfCAxKTsKIAkvKiBpbmRpcmVjdCBv YmplY3QgYnVmZmVyIHNpemUgKi8KLQlPVVRfQkFUQ0goMHhmZmZmZjAwMCB8IDEpOworCWludGVs X2JiX291dChpYmIsIDB4ZmZmZmYwMDAgfCAxKTsKIAkvKiBpbnRydWN0aW9uIGJ1ZmZlciBzaXpl ICovCi0JT1VUX0JBVENIKDEgPDwgMTIgfCAxKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAxIDw8IDEy IHwgMSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW43X2VtaXRfdXJiKHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gpIHsKK2dlbjdfZW1pdF91cmIoc3RydWN0IGludGVsX2JiICppYmIpIHsK IAkvKiBYWFg6IE1pbiB2YWxpZCB2YWx1ZXMgZnJvbSBtZXNhICovCiAJY29uc3QgaW50IHZzX2Vu dHJpZXMgPSA2NDsKIAljb25zdCBpbnQgdnNfc2l6ZSA9IDI7CiAJY29uc3QgaW50IHZzX3N0YXJ0 ID0gMjsKIAotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfVVJCX1ZTKTsKLQlPVVRfQkFUQ0godnNf ZW50cmllcyB8ICgodnNfc2l6ZSAtIDEpIDw8IDE2KSB8ICh2c19zdGFydCA8PCAyNSkpOwotCU9V VF9CQVRDSChHRU43XzNEU1RBVEVfVVJCX0dTKTsKLQlPVVRfQkFUQ0godnNfc3RhcnQgPDwgMjUp OwotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfVVJCX0hTKTsKLQlPVVRfQkFUQ0godnNfc3RhcnQg PDwgMjUpOwotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfVVJCX0RTKTsKLQlPVVRfQkFUQ0godnNf c3RhcnQgPDwgMjUpOworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9VUkJfVlMpOwor CWludGVsX2JiX291dChpYmIsIHZzX2VudHJpZXMgfCAoKHZzX3NpemUgLSAxKSA8PCAxNikgfCAo dnNfc3RhcnQgPDwgMjUpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfVVJCX0dT KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCB2c19zdGFydCA8PCAyNSk7CisJaW50ZWxfYmJfb3V0KGli YiwgR0VON18zRFNUQVRFX1VSQl9IUyk7CisJaW50ZWxfYmJfb3V0KGliYiwgdnNfc3RhcnQgPDwg MjUpOworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9VUkJfRFMpOworCWludGVsX2Ji X291dChpYmIsIHZzX3N0YXJ0IDw8IDI1KTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjhfZW1pdF9j YyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKSB7Ci0JT1VUX0JBVENIKEdFTjdfM0RT VEFURV9CTEVORF9TVEFURV9QT0lOVEVSUyk7Ci0JT1VUX0JBVENIKGNjLmJsZW5kX3N0YXRlIHwg MSk7CitnZW44X2VtaXRfY2Moc3RydWN0IGludGVsX2JiICppYmIpIHsKKwlpbnRlbF9iYl9vdXQo aWJiLCBHRU43XzNEU1RBVEVfQkxFTkRfU1RBVEVfUE9JTlRFUlMpOworCWludGVsX2JiX291dChp YmIsIGNjLmJsZW5kX3N0YXRlIHwgMSk7CiAKLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX0NDX1NU QVRFX1BPSU5URVJTKTsKLQlPVVRfQkFUQ0goY2MuY2Nfc3RhdGUgfCAxKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCBHRU42XzNEU1RBVEVfQ0NfU1RBVEVfUE9JTlRFUlMpOworCWludGVsX2JiX291dChp YmIsIGNjLmNjX3N0YXRlIHwgMSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW44X2VtaXRfbXVsdGlz YW1wbGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkgewotCU9VVF9CQVRDSChHRU44 XzNEU1RBVEVfTVVMVElTQU1QTEUpOwotCU9VVF9CQVRDSCgwKTsKK2dlbjhfZW1pdF9tdWx0aXNh bXBsZShzdHJ1Y3QgaW50ZWxfYmIgKmliYikgeworCWludGVsX2JiX291dChpYmIsIEdFTjhfM0RT VEFURV9NVUxUSVNBTVBMRSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiAKLQlPVVRfQkFUQ0go R0VONl8zRFNUQVRFX1NBTVBMRV9NQVNLKTsKLQlPVVRfQkFUQ0goMSk7CisJaW50ZWxfYmJfb3V0 KGliYiwgR0VONl8zRFNUQVRFX1NBTVBMRV9NQVNLKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAxKTsK IH0KIAogc3RhdGljIHZvaWQKLWdlbjhfZW1pdF92cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoKSB7Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9CSU5ESU5HX1RBQkxFX1BPSU5URVJT X1ZTKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX1NBTVBMRVJf U1RBVEVfUE9JTlRFUlNfVlMpOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU42XzNE U1RBVEVfQ09OU1RBTlRfVlMgfCAoMTEgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRD SCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0go MCk7Ci0JT1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9WUyB8ICg5LTIp KTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRf QkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7 Ci0JT1VUX0JBVENIKDApOworZ2VuOF9lbWl0X3ZzKHN0cnVjdCBpbnRlbF9iYiAqaWJiKSB7CisJ aW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX0JJTkRJTkdfVEFCTEVfUE9JTlRFUlNfVlMp OworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNU QVRFX1NBTVBMRVJfU1RBVEVfUE9JTlRFUlNfVlMpOworCWludGVsX2JiX291dChpYmIsIDApOwor CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX0NPTlNUQU5UX1ZTIHwgKDExIC0gMikp OworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChp YmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwor CWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2Ji X291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX1ZTIHwgKDkt MikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWlu dGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291 dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDAp OworCWludGVsX2JiX291dChpYmIsIDApOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuOF9lbWl0X2hz KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpIHsKLQlPVVRfQkFUQ0goR0VON18zRFNU QVRFX0NPTlNUQU5UX0hTIHwgKDExIC0gMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0go MCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VU X0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDAp OwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfSFMgfCAoOS0yKSk7 Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JB VENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwot CU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfQklORElOR19UQUJMRV9Q T0lOVEVSU19IUyk7Ci0JT1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9T QU1QTEVSX1NUQVRFX1BPSU5URVJTX0hTKTsKLQlPVVRfQkFUQ0goMCk7CitnZW44X2VtaXRfaHMo c3RydWN0IGludGVsX2JiICppYmIpIHsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVf Q09OU1RBTlRfSFMgfCAoMTEgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxf YmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJi LCBHRU43XzNEU1RBVEVfSFMgfCAoOS0yKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0 KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7 CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisKKwlpbnRl bF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfQklORElOR19UQUJMRV9QT0lOVEVSU19IUyk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU44XzNEU1RBVEVf U0FNUExFUl9TVEFURV9QT0lOVEVSU19IUyk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9CiAK IHN0YXRpYyB2b2lkCi1nZW44X2VtaXRfZ3Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCkgewotCU9VVF9CQVRDSChHRU42XzNEU1RBVEVfQ09OU1RBTlRfR1MgfCAoMTEgLSAyKSk7Ci0J T1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENI KDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9V VF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENI KEdFTjZfM0RTVEFURV9HUyB8ICgxMC0yKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgw KTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRf QkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7 Ci0KLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX0JJTkRJTkdfVEFCTEVfUE9JTlRFUlNfR1MpOwot CU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfU0FNUExFUl9TVEFURV9Q T0lOVEVSU19HUyk7Ci0JT1VUX0JBVENIKDApOworZ2VuOF9lbWl0X2dzKHN0cnVjdCBpbnRlbF9i YiAqaWJiKSB7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX0NPTlNUQU5UX0dTIHwg KDExIC0gMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDAp OworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChp YmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwor CWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRF X0dTIHwgKDEwLTIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9CSU5ESU5HX1RBQkxFX1BPSU5U RVJTX0dTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKworCWludGVsX2JiX291dChpYmIsIEdF TjdfM0RTVEFURV9TQU1QTEVSX1NUQVRFX1BPSU5URVJTX0dTKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjhfZW1pdF9kcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoKSB7Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9DT05TVEFOVF9EUyB8ICgx MSAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsK LQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFU Q0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0K LQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX0RTIHwgKDktMikpOwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0go MCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQlP VVRfQkFUQ0goR0VON18zRFNUQVRFX0JJTkRJTkdfVEFCTEVfUE9JTlRFUlNfRFMpOwotCU9VVF9C QVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU44XzNEU1RBVEVfU0FNUExFUl9TVEFURV9QT0lOVEVS U19EUyk7Ci0JT1VUX0JBVENIKDApOworZ2VuOF9lbWl0X2RzKHN0cnVjdCBpbnRlbF9iYiAqaWJi KSB7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX0NPTlNUQU5UX0RTIHwgKDExIC0g MikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWlu dGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291 dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDAp OworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX0RTIHwg KDktMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwor CWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2Ji X291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIs IDApOworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18z RFNUQVRFX0JJTkRJTkdfVEFCTEVfUE9JTlRFUlNfRFMpOworCWludGVsX2JiX291dChpYmIsIDAp OworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNUQVRFX1NBTVBMRVJfU1RBVEVfUE9JTlRF UlNfRFMpOworCWludGVsX2JiX291dChpYmIsIDApOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuOF9l bWl0X3dtX2h6X29wKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpIHsKLQlPVVRfQkFU Q0goR0VOOF8zRFNUQVRFX1dNX0haX09QIHwgKDUtMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRf QkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKK2dlbjhfZW1pdF93bV9o el9vcChzdHJ1Y3QgaW50ZWxfYmIgKmliYikgeworCWludGVsX2JiX291dChpYmIsIEdFTjhfM0RT VEFURV9XTV9IWl9PUCB8ICg1LTIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjhfZW1pdF9udWxsX3N0YXRlKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gpIHsKLQlnZW44X2VtaXRfd21faHpfb3AoYmF0Y2gpOwotCWdl bjhfZW1pdF9ocyhiYXRjaCk7Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9URSB8ICg0LTIpKTsK LQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlnZW44X2Vt aXRfZ3MoYmF0Y2gpOwotCWdlbjhfZW1pdF9kcyhiYXRjaCk7Ci0JZ2VuOF9lbWl0X3ZzKGJhdGNo KTsKK2dlbjhfZW1pdF9udWxsX3N0YXRlKHN0cnVjdCBpbnRlbF9iYiAqaWJiKSB7CisJZ2VuOF9l bWl0X3dtX2h6X29wKGliYik7CisJZ2VuOF9lbWl0X2hzKGliYik7CisJaW50ZWxfYmJfb3V0KGli YiwgR0VON18zRFNUQVRFX1RFIHwgKDQtMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWlu dGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWdlbjhfZW1pdF9n cyhpYmIpOworCWdlbjhfZW1pdF9kcyhpYmIpOworCWdlbjhfZW1pdF92cyhpYmIpOwogfQogCiBz dGF0aWMgdm9pZAotZ2VuN19lbWl0X2NsaXAoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCkgewotCU9VVF9CQVRDSChHRU42XzNEU1RBVEVfQ0xJUCB8ICg0IC0gMikpOwotCU9VVF9CQVRD SCgwKTsgCi0JT1VUX0JBVENIKDApOyAvKiAgcGFzcy10aHJvdWdoICovCi0JT1VUX0JBVENIKDAp OworZ2VuN19lbWl0X2NsaXAoc3RydWN0IGludGVsX2JiICppYmIpIHsKKwlpbnRlbF9iYl9vdXQo aWJiLCBHRU42XzNEU1RBVEVfQ0xJUCB8ICg0IC0gMikpOworCWludGVsX2JiX291dChpYmIsIDAp OworCWludGVsX2JiX291dChpYmIsIDApOyAvKiAgcGFzcy10aHJvdWdoICovCisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW44X2VtaXRfc2Yoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjhfZW1pdF9zZihzdHJ1Y3QgaW50ZWxfYmIgKmliYikK IHsKIAlpbnQgaTsKIAotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfU0JFIHwgKDQgLSAyKSk7Ci0J T1VUX0JBVENIKDEgPDwgR0VON19TQkVfTlVNX09VVFBVVFNfU0hJRlQgfAotCQkgIEdFTjhfU0JF X0ZPUkNFX1VSQl9FTlRSWV9SRUFEX0xFTkdUSCB8Ci0JCSAgR0VOOF9TQkVfRk9SQ0VfVVJCX0VO VFJZX1JFQURfT0ZGU0VUIHwKLQkJICAxIDw8IEdFTjdfU0JFX1VSQl9FTlRSWV9SRUFEX0xFTkdU SF9TSElGVCB8Ci0JCSAgMSA8PCBHRU44X1NCRV9VUkJfRU5UUllfUkVBRF9PRkZTRVRfU0hJRlQp OwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VO N18zRFNUQVRFX1NCRSB8ICg0IC0gMikpOworCWludGVsX2JiX291dChpYmIsIDEgPDwgR0VON19T QkVfTlVNX09VVFBVVFNfU0hJRlQgfAorCQkgICAgIEdFTjhfU0JFX0ZPUkNFX1VSQl9FTlRSWV9S RUFEX0xFTkdUSCB8CisJCSAgICAgR0VOOF9TQkVfRk9SQ0VfVVJCX0VOVFJZX1JFQURfT0ZGU0VU IHwKKwkJICAgICAxIDw8IEdFTjdfU0JFX1VSQl9FTlRSWV9SRUFEX0xFTkdUSF9TSElGVCB8CisJ CSAgICAgMSA8PCBHRU44X1NCRV9VUkJfRU5UUllfUkVBRF9PRkZTRVRfU0hJRlQpOworCWludGVs X2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwogCi0JT1VUX0JBVENIKEdF TjhfM0RTVEFURV9TQkVfU1dJWiB8ICgxMSAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU44 XzNEU1RBVEVfU0JFX1NXSVogfCAoMTEgLSAyKSk7CiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykK LQkJT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7CisJCWludGVs X2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChp YmIsIDApOwogCi0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9SQVNURVIgfCAoNSAtIDIpKTsKLQlP VVRfQkFUQ0goR0VOOF9SQVNURVJfRlJPTlRfV0lORElOR19DQ1cgfCBHRU44X1JBU1RFUl9DVUxM X05PTkUpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwor CWludGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9SQVNURVIgfCAoNSAtIDIpKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCBHRU44X1JBU1RFUl9GUk9OVF9XSU5ESU5HX0NDVyB8IEdFTjhfUkFTVEVS X0NVTExfTk9ORSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiAKLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX1NG IHwgKDQgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0go MCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX1NGIHwgKDQgLSAyKSk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0 KGliYiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW44X2VtaXRfcHMoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qga2VybmVsKSB7CitnZW44X2VtaXRfcHMoc3RydWN0 IGludGVsX2JiICppYmIsIHVpbnQzMl90IGtlcm5lbCkgewogCWNvbnN0IGludCBtYXhfdGhyZWFk cyA9IDYzOwogCi0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9XTSB8ICgyIC0gMikpOwotCU9VVF9C QVRDSCgvKiBYWFg6IEkgZG9uJ3QgdW5kZXJzdGFuZCB0aGUgQkFSWUNFTlRSSUMgc3R1ZmYsIGJ1 dCBpdAorCWludGVsX2JiX291dChpYmIsIEdFTjZfM0RTVEFURV9XTSB8ICgyIC0gMikpOworCWlu dGVsX2JiX291dChpYmIsIC8qIFhYWDogSSBkb24ndCB1bmRlcnN0YW5kIHRoZSBCQVJZQ0VOVFJJ QyBzdHVmZiwgYnV0IGl0CiAJCSAgICogYXBwZWFycyB3ZSBuZWVkIGl0IHRvIHB1dCBvdXIgc2V0 dXAgZGF0YSBpbiB0aGUgcGxhY2Ugd2UKIAkJICAgKiBleHBlY3QgKGc2LCBzZWUgYmVsb3cpICov Ci0JCSAgR0VOOF8zRFNUQVRFX1BTX1BFUlNQRUNUSVZFX1BJWEVMX0JBUllDRU5UUklDKTsKLQot CU9VVF9CQVRDSChHRU42XzNEU1RBVEVfQ09OU1RBTlRfUFMgfCAoMTEtMikpOwotCU9VVF9CQVRD SCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0go MCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU43XzNE U1RBVEVfUFMgfCAoMTItMikpOwotCU9VVF9CQVRDSChrZXJuZWwpOwotCU9VVF9CQVRDSCgwKTsg Lyoga2VybmVsIGhpICovCi0JT1VUX0JBVENIKDEgPDwgR0VONl8zRFNUQVRFX1dNX1NBTVBMRVJf Q09VTlRfU0hJRlQgfAotCQkgIDIgPDwgR0VONl8zRFNUQVRFX1dNX0JJTkRJTkdfVEFCTEVfRU5U UllfQ09VTlRfU0hJRlQpOwotCU9VVF9CQVRDSCgwKTsgLyogc2NyYXRjaCBzcGFjZSBzdHVmZiAq LwotCU9VVF9CQVRDSCgwKTsgLyogc2NyYXRjaCBoaSAqLwotCU9VVF9CQVRDSCgobWF4X3RocmVh ZHMgLSAxKSA8PCBHRU44XzNEU1RBVEVfUFNfTUFYX1RIUkVBRFNfU0hJRlQgfAotCQkgIEdFTjZf M0RTVEFURV9XTV8xNl9ESVNQQVRDSF9FTkFCTEUpOwotCU9VVF9CQVRDSCg2IDw8IEdFTjZfM0RT VEFURV9XTV9ESVNQQVRDSF9TVEFSVF9HUkZfMF9TSElGVCk7Ci0JT1VUX0JBVENIKDApOyAvLyBr ZXJuZWwgMQotCU9VVF9CQVRDSCgwKTsgLyoga2VybmVsIDEgaGkgKi8KLQlPVVRfQkFUQ0goMCk7 IC8vIGtlcm5lbCAyCi0JT1VUX0JBVENIKDApOyAvKiBrZXJuZWwgMiBoaSAqLwotCi0JT1VUX0JB VENIKEdFTjhfM0RTVEFURV9QU19CTEVORCB8ICgyIC0gMikpOwotCU9VVF9CQVRDSChHRU44X1BT X0JMRU5EX0hBU19XUklURUFCTEVfUlQpOwotCi0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9QU19F WFRSQSB8ICgyIC0gMikpOwotCU9VVF9CQVRDSChHRU44X1BTWF9QSVhFTF9TSEFERVJfVkFMSUQg fCBHRU44X1BTWF9BVFRSSUJVVEVfRU5BQkxFKTsKKwkJICAgICBHRU44XzNEU1RBVEVfUFNfUEVS U1BFQ1RJVkVfUElYRUxfQkFSWUNFTlRSSUMpOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8z RFNUQVRFX0NPTlNUQU5UX1BTIHwgKDExLTIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKworCWludGVsX2JiX291 dChpYmIsIEdFTjdfM0RTVEFURV9QUyB8ICgxMi0yKSk7CisJaW50ZWxfYmJfb3V0KGliYiwga2Vy bmVsKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgLyoga2VybmVsIGhpICovCisJaW50ZWxfYmJf b3V0KGliYiwgMSA8PCBHRU42XzNEU1RBVEVfV01fU0FNUExFUl9DT1VOVF9TSElGVCB8CisJCSAg ICAgMiA8PCBHRU42XzNEU1RBVEVfV01fQklORElOR19UQUJMRV9FTlRSWV9DT1VOVF9TSElGVCk7 CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qIHNjcmF0Y2ggc3BhY2Ugc3R1ZmYgKi8KKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsgLyogc2NyYXRjaCBoaSAqLworCWludGVsX2JiX291dChpYmIsICht YXhfdGhyZWFkcyAtIDEpIDw8IEdFTjhfM0RTVEFURV9QU19NQVhfVEhSRUFEU19TSElGVCB8CisJ CSAgICAgR0VONl8zRFNUQVRFX1dNXzE2X0RJU1BBVENIX0VOQUJMRSk7CisJaW50ZWxfYmJfb3V0 KGliYiwgNiA8PCBHRU42XzNEU1RBVEVfV01fRElTUEFUQ0hfU1RBUlRfR1JGXzBfU0hJRlQpOwor CWludGVsX2JiX291dChpYmIsIDApOyAvLyBrZXJuZWwgMQorCWludGVsX2JiX291dChpYmIsIDAp OyAvKiBrZXJuZWwgMSBoaSAqLworCWludGVsX2JiX291dChpYmIsIDApOyAvLyBrZXJuZWwgMgor CWludGVsX2JiX291dChpYmIsIDApOyAvKiBrZXJuZWwgMiBoaSAqLworCisJaW50ZWxfYmJfb3V0 KGliYiwgR0VOOF8zRFNUQVRFX1BTX0JMRU5EIHwgKDIgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGli YiwgR0VOOF9QU19CTEVORF9IQVNfV1JJVEVBQkxFX1JUKTsKKworCWludGVsX2JiX291dChpYmIs IEdFTjhfM0RTVEFURV9QU19FWFRSQSB8ICgyIC0gMikpOworCWludGVsX2JiX291dChpYmIsIEdF TjhfUFNYX1BJWEVMX1NIQURFUl9WQUxJRCB8IEdFTjhfUFNYX0FUVFJJQlVURV9FTkFCTEUpOwog fQogCiBzdGF0aWMgdm9pZAotZ2VuOF9lbWl0X2RlcHRoKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gpIHsKLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRFX1dNX0RFUFRIX1NURU5DSUwgfCAo MyAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdF TjdfM0RTVEFURV9ERVBUSF9CVUZGRVIgfCAoOC0yKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9C QVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsK LQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjhfM0RTVEFU RV9ISUVSX0RFUFRIX0JVRkZFUiB8ICg1IC0gMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFU Q0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU44 XzNEU1RBVEVfU1RFTkNJTF9CVUZGRVIgfCAoNSAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VU X0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7CitnZW44X2VtaXRfZGVw dGgoc3RydWN0IGludGVsX2JiICppYmIpIHsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU44XzNEU1RB VEVfV01fREVQVEhfU1RFTkNJTCB8ICgzIC0gMikpOworCWludGVsX2JiX291dChpYmIsIDApOwor CWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRF X0RFUFRIX0JVRkZFUiB8ICg4LTIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9I SUVSX0RFUFRIX0JVRkZFUiB8ICg1IC0gMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWlu dGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291 dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNUQVRFX1NURU5DSUxfQlVG RkVSIHwgKDUgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9 CiAKIHN0YXRpYyB2b2lkCi1nZW43X2VtaXRfY2xlYXIoc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCkgewotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfQ0xFQVJfUEFSQU1TIHwgKDMtMikp OwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMSk7IC8vIGNsZWFyIHZhbGlkCitnZW43X2Vt aXRfY2xlYXIoc3RydWN0IGludGVsX2JiICppYmIpIHsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43 XzNEU1RBVEVfQ0xFQVJfUEFSQU1TIHwgKDMtMikpOworCWludGVsX2JiX291dChpYmIsIDApOwor CWludGVsX2JiX291dChpYmIsIDEpOyAvLyBjbGVhciB2YWxpZAogfQogCiBzdGF0aWMgdm9pZAot Z2VuNl9lbWl0X2RyYXdpbmdfcmVjdGFuZ2xlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gsIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpkc3QpCitnZW42X2VtaXRfZHJhd2luZ19yZWN0YW5n bGUoc3RydWN0IGludGVsX2JiICppYmIsIGNvbnN0IHN0cnVjdCBpbnRlbF9idWYgKmRzdCkKIHsK LQlPVVRfQkFUQ0goR0VONF8zRFNUQVRFX0RSQVdJTkdfUkVDVEFOR0xFIHwgKDQgLSAyKSk7Ci0J T1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgoaWd0X2J1Zl9oZWlnaHQoZHN0KSAtIDEpIDw8IDE2 IHwgKGlndF9idWZfd2lkdGgoZHN0KSAtIDEpKTsKLQlPVVRfQkFUQ0goMCk7CisJaW50ZWxfYmJf b3V0KGliYiwgR0VONF8zRFNUQVRFX0RSQVdJTkdfUkVDVEFOR0xFIHwgKDQgLSAyKSk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgKGludGVsX2J1Zl9oZWlnaHQo ZHN0KSAtIDEpIDw8IDE2IHwgKGludGVsX2J1Zl93aWR0aChkc3QpIC0gMSkpOworCWludGVsX2Ji X291dChpYmIsIDApOwogfQogCi1zdGF0aWMgdm9pZCBnZW44X2VtaXRfdmZfdG9wb2xvZ3koc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK3N0YXRpYyB2b2lkIGdlbjhfZW1pdF92Zl90 b3BvbG9neShzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRF X1ZGX1RPUE9MT0dZKTsKLQlPVVRfQkFUQ0goXzNEUFJJTV9SRUNUTElTVCk7CisJaW50ZWxfYmJf b3V0KGliYiwgR0VOOF8zRFNUQVRFX1ZGX1RPUE9MT0dZKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBf M0RQUklNX1JFQ1RMSVNUKTsKIH0KIAogLyogVmVydGV4IGVsZW1lbnRzIE1VU1QgYmUgZGVmaW5l ZCBiZWZvcmUgdGhpcyBhY2NvcmRpbmcgdG8gc3BlYyAqLwotc3RhdGljIHZvaWQgZ2VuOF9lbWl0 X3ByaW1pdGl2ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBvZmZz ZXQpCitzdGF0aWMgdm9pZCBnZW44X2VtaXRfcHJpbWl0aXZlKHN0cnVjdCBpbnRlbF9iYiAqaWJi LCB1aW50MzJfdCBvZmZzZXQpCiB7Ci0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9WRl9JTlNUQU5D SU5HIHwgKDMgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCBHRU44XzNEU1RBVEVfVkZfSU5TVEFOQ0lORyB8ICgzIC0gMikpOworCWludGVs X2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwogCi0JT1VUX0JBVENIKEdF TjRfM0RQUklNSVRJVkUgfCAoNy0yKSk7Ci0JT1VUX0JBVENIKDApOwkvKiBnZW44KyBpZ25vcmUg dGhlIHRvcG9sb2d5IHR5cGUgZmllbGQgKi8KLQlPVVRfQkFUQ0goMyk7CS8qIHZlcnRleCBjb3Vu dCAqLwotCU9VVF9CQVRDSCgwKTsJLyogIFdlJ3JlIHNwZWNpZnlpbmcgdGhpcyBpbnN0ZWFkIHdp dGggb2Zmc2V0IGluIEdFTjZfM0RTVEFURV9WRVJURVhfQlVGRkVSUyAqLwotCU9VVF9CQVRDSCgx KTsJLyogc2luZ2xlIGluc3RhbmNlICovCi0JT1VUX0JBVENIKDApOwkvKiBzdGFydCBpbnN0YW5j ZSBsb2NhdGlvbiAqLwotCU9VVF9CQVRDSCgwKTsJLyogaW5kZXggYnVmZmVyIG9mZnNldCwgaWdu b3JlZCAqLworCWludGVsX2JiX291dChpYmIsIEdFTjRfM0RQUklNSVRJVkUgfCAoNy0yKSk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7CS8qIGdlbjgrIGlnbm9yZSB0aGUgdG9wb2xvZ3kgdHlwZSBm aWVsZCAqLworCWludGVsX2JiX291dChpYmIsIDMpOwkvKiB2ZXJ0ZXggY291bnQgKi8KKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsJLyogIFdlJ3JlIHNwZWNpZnlpbmcgdGhpcyBpbnN0ZWFkIHdpdGgg b2Zmc2V0IGluIEdFTjZfM0RTVEFURV9WRVJURVhfQlVGRkVSUyAqLworCWludGVsX2JiX291dChp YmIsIDEpOwkvKiBzaW5nbGUgaW5zdGFuY2UgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsJLyog c3RhcnQgaW5zdGFuY2UgbG9jYXRpb24gKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsJLyogaW5k ZXggYnVmZmVyIG9mZnNldCwgaWdub3JlZCAqLwogfQogCiAvKiBUaGUgZ2VuZXJhbCBydWxlIGlz IGlmIGl0J3MgbmFtZWQgZ2VuNiBpdCBpcyBkaXJlY3RseSBjb3BpZWQgZnJvbQpAQCAtODk3LDEx NCArNzc5LDEwNCBAQCBzdGF0aWMgdm9pZCBnZW44X2VtaXRfcHJpbWl0aXZlKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IG9mZnNldAogCiAjZGVmaW5lIEJBVENIX1NU QVRFX1NQTElUIDIwNDgKIAotdm9pZCBnZW44X3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJICBkcm1faW50ZWxfY29udGV4dCAqY29udGV4dCwKLQkJ CSAgY29uc3Qgc3RydWN0IGlndF9idWYgKnNyYywgdW5zaWduZWQgc3JjX3gsIHVuc2lnbmVkIHNy Y195LAotCQkJICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LAotCQkJICBjb25zdCBz dHJ1Y3QgaWd0X2J1ZiAqZHN0LCB1bnNpZ25lZCBkc3RfeCwgdW5zaWduZWQgZHN0X3kpCit2b2lk IGdlbjhfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJICB1aW50MzJf dCBjdHgsCisJCQkgIHN0cnVjdCBpbnRlbF9idWYgKnNyYywKKwkJCSAgdW5zaWduZWQgaW50IHNy Y194LCB1bnNpZ25lZCBpbnQgc3JjX3ksCisJCQkgIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWdu ZWQgaW50IGhlaWdodCwKKwkJCSAgc3RydWN0IGludGVsX2J1ZiAqZHN0LAorCQkJICB1bnNpZ25l ZCBpbnQgZHN0X3gsIHVuc2lnbmVkIGludCBkc3RfeSkKIHsKLQlzdHJ1Y3QgYW5ub3RhdGlvbnNf Y29udGV4dCBhdWJfYW5ub3RhdGlvbnM7CiAJdWludDMyX3QgcHNfc2FtcGxlcl9zdGF0ZSwgcHNf a2VybmVsX29mZiwgcHNfYmluZGluZ190YWJsZTsKIAl1aW50MzJfdCBzY2lzc29yX3N0YXRlOwog CXVpbnQzMl90IHZlcnRleF9idWZmZXI7Ci0JdWludDMyX3QgYmF0Y2hfZW5kOwogCiAJaWd0X2Fz c2VydChzcmMtPmJwcCA9PSBkc3QtPmJwcCk7Ci0JaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfd2l0 aF9jb250ZXh0KGJhdGNoLCBjb250ZXh0KTsKIAotCWludGVsX2JhdGNoYnVmZmVyX2FsaWduKGJh dGNoLCA4KTsKKwlpbnRlbF9iYl9mbHVzaF9yZW5kZXJfd2l0aF9jb250ZXh0KGliYiwgY3R4KTsK IAotCWJhdGNoLT5wdHIgPSAmYmF0Y2gtPmJ1ZmZlcltCQVRDSF9TVEFURV9TUExJVF07CisJaW50 ZWxfYmJfYWRkX2ludGVsX2J1ZihpYmIsIGRzdCwgdHJ1ZSk7CisJaW50ZWxfYmJfYWRkX2ludGVs X2J1ZihpYmIsIHNyYywgZmFsc2UpOwogCi0JYW5ub3RhdGlvbl9pbml0KCZhdWJfYW5ub3RhdGlv bnMpOworCWludGVsX2JiX3B0cl9zZXQoaWJiLCBCQVRDSF9TVEFURV9TUExJVCk7CiAKLQlwc19i aW5kaW5nX3RhYmxlICA9IGdlbjhfYmluZF9zdXJmYWNlcyhiYXRjaCwgJmF1Yl9hbm5vdGF0aW9u cywKLQkJCQkJICAgICAgIHNyYywgZHN0KTsKLQlwc19zYW1wbGVyX3N0YXRlICA9IGdlbjhfY3Jl YXRlX3NhbXBsZXIoYmF0Y2gsICZhdWJfYW5ub3RhdGlvbnMpOwotCXBzX2tlcm5lbF9vZmYgPSBn ZW44X2ZpbGxfcHMoYmF0Y2gsICZhdWJfYW5ub3RhdGlvbnMsCi0JCQkJICAgICBwc19rZXJuZWws IHNpemVvZihwc19rZXJuZWwpKTsKLQl2ZXJ0ZXhfYnVmZmVyID0gZ2VuN19maWxsX3ZlcnRleF9i dWZmZXJfZGF0YShiYXRjaCwgJmF1Yl9hbm5vdGF0aW9ucywKKwlwc19iaW5kaW5nX3RhYmxlICA9 IGdlbjhfYmluZF9zdXJmYWNlcyhpYmIsIHNyYywgZHN0KTsKKwlwc19zYW1wbGVyX3N0YXRlICA9 IGdlbjhfY3JlYXRlX3NhbXBsZXIoaWJiKTsKKwlwc19rZXJuZWxfb2ZmID0gZ2VuOF9maWxsX3Bz KGliYiwgcHNfa2VybmVsLCBzaXplb2YocHNfa2VybmVsKSk7CisJdmVydGV4X2J1ZmZlciA9IGdl bjdfZmlsbF92ZXJ0ZXhfYnVmZmVyX2RhdGEoaWJiLAogCQkJCQkJICAgICBzcmMsCiAJCQkJCQkg ICAgIHNyY194LCBzcmNfeSwKIAkJCQkJCSAgICAgZHN0X3gsIGRzdF95LAogCQkJCQkJICAgICB3 aWR0aCwgaGVpZ2h0KTsKLQljYy5jY19zdGF0ZSA9IGdlbjZfY3JlYXRlX2NjX3N0YXRlKGJhdGNo LCAmYXViX2Fubm90YXRpb25zKTsKLQljYy5ibGVuZF9zdGF0ZSA9IGdlbjhfY3JlYXRlX2JsZW5k X3N0YXRlKGJhdGNoLCAmYXViX2Fubm90YXRpb25zKTsKLQl2aWV3cG9ydC5jY19zdGF0ZSA9IGdl bjZfY3JlYXRlX2NjX3ZpZXdwb3J0KGJhdGNoLCAmYXViX2Fubm90YXRpb25zKTsKLQl2aWV3cG9y dC5zZl9jbGlwX3N0YXRlID0gZ2VuN19jcmVhdGVfc2ZfY2xpcF92aWV3cG9ydChiYXRjaCwgJmF1 Yl9hbm5vdGF0aW9ucyk7Ci0Jc2Npc3Nvcl9zdGF0ZSA9IGdlbjZfY3JlYXRlX3NjaXNzb3JfcmVj dChiYXRjaCwgJmF1Yl9hbm5vdGF0aW9ucyk7CisJY2MuY2Nfc3RhdGUgPSBnZW42X2NyZWF0ZV9j Y19zdGF0ZShpYmIpOworCWNjLmJsZW5kX3N0YXRlID0gZ2VuOF9jcmVhdGVfYmxlbmRfc3RhdGUo aWJiKTsKKwl2aWV3cG9ydC5jY19zdGF0ZSA9IGdlbjZfY3JlYXRlX2NjX3ZpZXdwb3J0KGliYik7 CisJdmlld3BvcnQuc2ZfY2xpcF9zdGF0ZSA9IGdlbjdfY3JlYXRlX3NmX2NsaXBfdmlld3BvcnQo aWJiKTsKKwlzY2lzc29yX3N0YXRlID0gZ2VuNl9jcmVhdGVfc2Npc3Nvcl9yZWN0KGliYik7CiAJ LyogVE9ETzogdGhlcmVlIGlzIG90aGVyIHN0YXRlIHdoaWNoIGlzbid0IHNldHVwICovCiAKLQlp Z3RfYXNzZXJ0KGJhdGNoLT5wdHIgPCAmYmF0Y2gtPmJ1ZmZlcls0MDk1XSk7Ci0KLQliYXRjaC0+ cHRyID0gYmF0Y2gtPmJ1ZmZlcjsKKwlpbnRlbF9iYl9wdHJfc2V0KGliYiwgMCk7CiAKIAkvKiBT dGFydCBlbWl0dGluZyB0aGUgY29tbWFuZHMuIFRoZSBvcmRlciByb3VnaGx5IGZvbGxvd3MgdGhl IG1lc2EgYmxvcnAKIAkgKiBvcmRlciAqLwotCU9VVF9CQVRDSChHNFhfUElQRUxJTkVfU0VMRUNU IHwgUElQRUxJTkVfU0VMRUNUXzNEKTsKLQotCWdlbjhfZW1pdF9zaXAoYmF0Y2gpOwotCi0JZ2Vu N19lbWl0X3B1c2hfY29uc3RhbnRzKGJhdGNoKTsKLQotCWdlbjhfZW1pdF9zdGF0ZV9iYXNlX2Fk ZHJlc3MoYmF0Y2gpOwotCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9WSUVXUE9SVF9TVEFURV9Q T0lOVEVSU19DQyk7Ci0JT1VUX0JBVENIKHZpZXdwb3J0LmNjX3N0YXRlKTsKLQlPVVRfQkFUQ0go R0VOOF8zRFNUQVRFX1ZJRVdQT1JUX1NUQVRFX1BPSU5URVJTX1NGX0NMSVApOwotCU9VVF9CQVRD SCh2aWV3cG9ydC5zZl9jbGlwX3N0YXRlKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHNFhfUElQRUxJ TkVfU0VMRUNUIHwgUElQRUxJTkVfU0VMRUNUXzNEKTsKIAotCWdlbjdfZW1pdF91cmIoYmF0Y2gp OworCWdlbjhfZW1pdF9zaXAoaWJiKTsKIAotCWdlbjhfZW1pdF9jYyhiYXRjaCk7CisJZ2VuN19l bWl0X3B1c2hfY29uc3RhbnRzKGliYik7CiAKLQlnZW44X2VtaXRfbXVsdGlzYW1wbGUoYmF0Y2gp OworCWdlbjhfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3MoaWJiKTsKIAotCWdlbjhfZW1pdF9udWxs X3N0YXRlKGJhdGNoKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfVklFV1BPUlRf U1RBVEVfUE9JTlRFUlNfQ0MpOworCWludGVsX2JiX291dChpYmIsIHZpZXdwb3J0LmNjX3N0YXRl KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU44XzNEU1RBVEVfVklFV1BPUlRfU1RBVEVfUE9JTlRF UlNfU0ZfQ0xJUCk7CisJaW50ZWxfYmJfb3V0KGliYiwgdmlld3BvcnQuc2ZfY2xpcF9zdGF0ZSk7 CiAKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX1NUUkVBTU9VVCB8ICg1LTIpKTsKLQlPVVRfQkFU Q0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7CisJ Z2VuN19lbWl0X3VyYihpYmIpOwogCi0JZ2VuN19lbWl0X2NsaXAoYmF0Y2gpOworCWdlbjhfZW1p dF9jYyhpYmIpOwogCi0JZ2VuOF9lbWl0X3NmKGJhdGNoKTsKKwlnZW44X2VtaXRfbXVsdGlzYW1w bGUoaWJiKTsKIAotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfQklORElOR19UQUJMRV9QT0lOVEVS U19QUyk7Ci0JT1VUX0JBVENIKHBzX2JpbmRpbmdfdGFibGUpOworCWdlbjhfZW1pdF9udWxsX3N0 YXRlKGliYik7CiAKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX1NBTVBMRVJfU1RBVEVfUE9JTlRF UlNfUFMpOwotCU9VVF9CQVRDSChwc19zYW1wbGVyX3N0YXRlKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCBHRU43XzNEU1RBVEVfU1RSRUFNT1VUIHwgKDUtMikpOworCWludGVsX2JiX291dChpYmIsIDAp OworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIDApOwogCi0JZ2VuOF9lbWl0X3BzKGJhdGNoLCBwc19rZXJuZWxfb2ZmKTsK KwlnZW43X2VtaXRfY2xpcChpYmIpOwogCi0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9TQ0lTU09S X1NUQVRFX1BPSU5URVJTKTsKLQlPVVRfQkFUQ0goc2Npc3Nvcl9zdGF0ZSk7CisJZ2VuOF9lbWl0 X3NmKGliYik7CiAKLQlnZW44X2VtaXRfZGVwdGgoYmF0Y2gpOworCWludGVsX2JiX291dChpYmIs IEdFTjdfM0RTVEFURV9CSU5ESU5HX1RBQkxFX1BPSU5URVJTX1BTKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCBwc19iaW5kaW5nX3RhYmxlKTsKIAotCWdlbjdfZW1pdF9jbGVhcihiYXRjaCk7CisJaW50 ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX1NBTVBMRVJfU1RBVEVfUE9JTlRFUlNfUFMpOwor CWludGVsX2JiX291dChpYmIsIHBzX3NhbXBsZXJfc3RhdGUpOwogCi0JZ2VuNl9lbWl0X2RyYXdp bmdfcmVjdGFuZ2xlKGJhdGNoLCBkc3QpOworCWdlbjhfZW1pdF9wcyhpYmIsIHBzX2tlcm5lbF9v ZmYpOwogCi0JZ2VuOF9lbWl0X3ZlcnRleF9idWZmZXIoYmF0Y2gsIHZlcnRleF9idWZmZXIpOwot CWdlbjZfZW1pdF92ZXJ0ZXhfZWxlbWVudHMoYmF0Y2gpOworCWludGVsX2JiX291dChpYmIsIEdF TjhfM0RTVEFURV9TQ0lTU09SX1NUQVRFX1BPSU5URVJTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBz Y2lzc29yX3N0YXRlKTsKIAotCWdlbjhfZW1pdF92Zl90b3BvbG9neShiYXRjaCk7Ci0JZ2VuOF9l bWl0X3ByaW1pdGl2ZShiYXRjaCwgdmVydGV4X2J1ZmZlcik7CisJZ2VuOF9lbWl0X2RlcHRoKGli Yik7CiAKLQlPVVRfQkFUQ0goTUlfQkFUQ0hfQlVGRkVSX0VORCk7CisJZ2VuN19lbWl0X2NsZWFy KGliYik7CiAKLQliYXRjaF9lbmQgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGlnbihiYXRjaCwgOCk7 Ci0JaWd0X2Fzc2VydChiYXRjaF9lbmQgPCBCQVRDSF9TVEFURV9TUExJVCk7Ci0JYW5ub3RhdGlv bl9hZGRfYmF0Y2goJmF1Yl9hbm5vdGF0aW9ucywgYmF0Y2hfZW5kKTsKKwlnZW42X2VtaXRfZHJh d2luZ19yZWN0YW5nbGUoaWJiLCBkc3QpOwogCi0JZHVtcF9iYXRjaChiYXRjaCk7CisJZ2VuOF9l bWl0X3ZlcnRleF9idWZmZXIoaWJiLCB2ZXJ0ZXhfYnVmZmVyKTsKKwlnZW42X2VtaXRfdmVydGV4 X2VsZW1lbnRzKGliYik7CiAKLQlhbm5vdGF0aW9uX2ZsdXNoKCZhdWJfYW5ub3RhdGlvbnMsIGJh dGNoKTsKKwlnZW44X2VtaXRfdmZfdG9wb2xvZ3koaWJiKTsKKwlnZW44X2VtaXRfcHJpbWl0aXZl KGliYiwgdmVydGV4X2J1ZmZlcik7CiAKLQlnZW42X3JlbmRlcl9mbHVzaChiYXRjaCwgY29udGV4 dCwgYmF0Y2hfZW5kKTsKLQlpbnRlbF9iYXRjaGJ1ZmZlcl9yZXNldChiYXRjaCk7CisJaW50ZWxf YmJfZW1pdF9iYmUoaWJiKTsKKwlpbnRlbF9iYl9leGVjX3dpdGhfY29udGV4dChpYmIsIGludGVs X2JiX29mZnNldChpYmIpLCBjdHgsCisJCQkJICAgSTkxNV9FWEVDX0RFRkFVTFQgfCBJOTE1X0VY RUNfTk9fUkVMT0MsCisJCQkJICAgZmFsc2UpOworCWR1bXBfYmF0Y2goaWJiKTsKKwlpbnRlbF9i Yl9yZXNldChpYmIsIGZhbHNlKTsKIH0KZGlmZiAtLWdpdCBhL2xpYi9yZW5kZXJjb3B5X2dlbjku YyBiL2xpYi9yZW5kZXJjb3B5X2dlbjkuYwppbmRleCA4NWFlNGNhYi4uNmJhZDdiYjYgMTAwNjQ0 Ci0tLSBhL2xpYi9yZW5kZXJjb3B5X2dlbjkuYworKysgYi9saWIvcmVuZGVyY29weV9nZW45LmMK QEAgLTE2LDcgKzE2LDcgQEAKIAogI2luY2x1ZGUgImRybXRlc3QuaCIKICNpbmNsdWRlICJpbnRl bF9hdXhfcGd0YWJsZS5oIgotI2luY2x1ZGUgImludGVsX2J1Zm1nci5oIgorI2luY2x1ZGUgImlu dGVsX2J1Zm9wcy5oIgogI2luY2x1ZGUgImludGVsX2JhdGNoYnVmZmVyLmgiCiAjaW5jbHVkZSAi aW50ZWxfaW8uaCIKICNpbmNsdWRlICJyZW5kZXJjb3B5LmgiCkBAIC0yNCwxNyArMjQsMTIgQEAK ICNpbmNsdWRlICJpbnRlbF9yZWcuaCIKICNpbmNsdWRlICJpZ3RfYXV4LmgiCiAKLSNpbmNsdWRl ICJpbnRlbF9hdWIuaCIKLQogI2RlZmluZSBWRVJURVhfU0laRSAoMyo0KQogCiAjaWYgREVCVUdf UkVOREVSQ1BZCi1zdGF0aWMgdm9pZCBkdW1wX2JhdGNoKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gpIHsKLQlpbnQgZmQgPSBvcGVuKCIvdG1wL2k5NjUtYmF0Y2hidWZmZXJzLmR1bXAi LCBPX1dST05MWSB8IE9fQ1JFQVQsICAwNjY2KTsKLQlpZiAoZmQgIT0gLTEpIHsKLQkJaWd0X2Fz c2VydF9lcSh3cml0ZShmZCwgYmF0Y2gtPmJ1ZmZlciwgNDA5NiksIDQwOTYpOwotCQlmZCA9IGNs b3NlKGZkKTsKLQl9CitzdGF0aWMgdm9pZCBkdW1wX2JhdGNoKHN0cnVjdCBpbnRlbF9iYiAqaWJi KQoreworCWludGVsX2JiX2R1bXAoaWJiLCAiL3RtcC9nZW45LWJhdGNoYnVmZmVycy5kdW1wIik7 CiB9CiAjZWxzZQogI2RlZmluZSBkdW1wX2JhdGNoKHgpIGRvIHsgfSB3aGlsZSgwKQpAQCAtMTIw LDg3ICsxMTUsMTYgQEAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGdlbjEyX3JlbmRlcl9jb3B5W11b NF0gPSB7CiAJeyAweDgwMDQwMTMxLCAweDAwMDAwMDA0LCAweDUwMDA3MTQ0LCAweDAwYzQwMDAw IH0sCiB9OwogCi0vKiBBVUIgYW5ub3RhdGlvbiBzdXBwb3J0ICovCi0jZGVmaW5lIE1BWF9BTk5P VEFUSU9OUwkzMwotc3RydWN0IGFubm90YXRpb25zX2NvbnRleHQgewotCWRybV9pbnRlbF9hdWJf YW5ub3RhdGlvbiBhbm5vdGF0aW9uc1tNQVhfQU5OT1RBVElPTlNdOwotCWludCBpbmRleDsKLQl1 aW50MzJfdCBvZmZzZXQ7Ci19IGF1Yl9hbm5vdGF0aW9uczsKLQotc3RhdGljIHZvaWQgYW5ub3Rh dGlvbl9pbml0KHN0cnVjdCBhbm5vdGF0aW9uc19jb250ZXh0ICpjdHgpCi17Ci0JLyogY3R4LT5h bm5vdGF0aW9ucyBpcyBhbiBhcnJheSBrZWVwaW5nIGEgbGlzdCBvZiBhbm5vdGF0aW9ucyBvZiB0 aGUKLQkgKiBiYXRjaCBidWZmZXIgb3JkZXJlZCBieSBvZmZzZXQuIGN0eC0+YW5ub3RhdGlvbnNb MF0gaXMgdGh1cyBsZWZ0Ci0JICogZm9yIHRoZSBjb21tYW5kIHN0cmVhbSBhbmQgd2lsbCBiZSBm aWxsZWQganVzdCBiZWZvcmUgZXhlY3V0aW5nCi0JICogdGhlIGJhdGNoIGJ1ZmZlciB3aXRoIGFu bm90YXRpb25zX2FkZF9iYXRjaCgpICovCi0JY3R4LT5pbmRleCA9IDE7Ci19Ci0KLXN0YXRpYyB2 b2lkIGFkZF9hbm5vdGF0aW9uKGRybV9pbnRlbF9hdWJfYW5ub3RhdGlvbiAqYSwKLQkJCSAgIHVp bnQzMl90IHR5cGUsIHVpbnQzMl90IHN1YnR5cGUsCi0JCQkgICB1aW50MzJfdCBlbmRpbmdfb2Zm c2V0KQotewotCWEtPnR5cGUgPSB0eXBlOwotCWEtPnN1YnR5cGUgPSBzdWJ0eXBlOwotCWEtPmVu ZGluZ19vZmZzZXQgPSBlbmRpbmdfb2Zmc2V0OwotfQotCi1zdGF0aWMgdm9pZCBhbm5vdGF0aW9u X2FkZF9iYXRjaChzdHJ1Y3QgYW5ub3RhdGlvbnNfY29udGV4dCAqY3R4LCBzaXplX3Qgc2l6ZSkK LXsKLQlhZGRfYW5ub3RhdGlvbigmY3R4LT5hbm5vdGF0aW9uc1swXSwgQVVCX1RSQUNFX1RZUEVf QkFUQ0gsIDAsIHNpemUpOwotfQotCi1zdGF0aWMgdm9pZCBhbm5vdGF0aW9uX2FkZF9zdGF0ZShz dHJ1Y3QgYW5ub3RhdGlvbnNfY29udGV4dCAqY3R4LAotCQkJCSB1aW50MzJfdCBzdGF0ZV90eXBl LAotCQkJCSB1aW50MzJfdCBzdGFydF9vZmZzZXQsCi0JCQkJIHNpemVfdCAgIHNpemUpCi17Ci0J YXNzZXJ0KGN0eC0+aW5kZXggPCBNQVhfQU5OT1RBVElPTlMpOwotCi0JYWRkX2Fubm90YXRpb24o JmN0eC0+YW5ub3RhdGlvbnNbY3R4LT5pbmRleCsrXSwKLQkJICAgICAgIEFVQl9UUkFDRV9UWVBF X05PVFlQRSwgMCwKLQkJICAgICAgIHN0YXJ0X29mZnNldCk7Ci0JYWRkX2Fubm90YXRpb24oJmN0 eC0+YW5ub3RhdGlvbnNbY3R4LT5pbmRleCsrXSwKLQkJICAgICAgIEFVQl9UUkFDRV9UWVBFKHN0 YXRlX3R5cGUpLAotCQkgICAgICAgQVVCX1RSQUNFX1NVQlRZUEUoc3RhdGVfdHlwZSksCi0JCSAg ICAgICBzdGFydF9vZmZzZXQgKyBzaXplKTsKLX0KLQotc3RhdGljIHZvaWQgYW5ub3RhdGlvbl9m bHVzaChzdHJ1Y3QgYW5ub3RhdGlvbnNfY29udGV4dCAqY3R4LAotCQkJICAgICBzdHJ1Y3QgaW50 ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQotewotCWlmICghaWd0X2F1Yl9kdW1wX2VuYWJsZWQoKSkK LQkJcmV0dXJuOwotCi0JZHJtX2ludGVsX2J1Zm1ncl9nZW1fc2V0X2F1Yl9hbm5vdGF0aW9ucyhi YXRjaC0+Ym8sCi0JCQkJCQkgY3R4LT5hbm5vdGF0aW9ucywKLQkJCQkJCSBjdHgtPmluZGV4KTsK LX0KLQotc3RhdGljIHZvaWQKLWdlbjZfcmVuZGVyX2ZsdXNoKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gsCi0JCSAgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQsIHVpbnQzMl90IGJh dGNoX2VuZCkKLXsKLQlpZ3RfYXNzZXJ0X2VxKGRybV9pbnRlbF9ib19zdWJkYXRhKGJhdGNoLT5i bywKLQkJCQkJICAgMCwgNDA5NiwgYmF0Y2gtPmJ1ZmZlciksCi0JCSAgICAgIDApOwotCWlndF9h c3NlcnRfZXEoZHJtX2ludGVsX2dlbV9ib19jb250ZXh0X2V4ZWMoYmF0Y2gtPmJvLAotCQkJCQkJ ICAgIGNvbnRleHQsIGJhdGNoX2VuZCwgMCksCi0JCSAgICAgIDApOwotfQotCiAvKiBNb3N0bHkg Y29weStwYXN0ZSBmcm9tIGdlbjYsIGV4Y2VwdCBoZWlnaHQsIHdpZHRoLCBwaXRjaCBtb3ZlZCAq Lwogc3RhdGljIHVpbnQzMl90Ci1nZW44X2JpbmRfYnVmKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gsIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpidWYsCi0JICAgICAgaW50IGlzX2RzdCkg eworZ2VuOF9iaW5kX2J1ZihzdHJ1Y3QgaW50ZWxfYmIgKmliYiwgY29uc3Qgc3RydWN0IGludGVs X2J1ZiAqYnVmLCBpbnQgaXNfZHN0KSB7CiAJc3RydWN0IGdlbjlfc3VyZmFjZV9zdGF0ZSAqc3M7 Ci0JdWludDMyX3Qgd3JpdGVfZG9tYWluLCByZWFkX2RvbWFpbiwgb2Zmc2V0OwotCWludCByZXQ7 CisJdWludDMyX3Qgd3JpdGVfZG9tYWluLCByZWFkX2RvbWFpbjsKKwl1aW50NjRfdCBhZGRyZXNz OwogCiAJaWd0X2Fzc2VydF9sdGUoYnVmLT5zdXJmYWNlWzBdLnN0cmlkZSwgMjU2KjEwMjQpOwot CWlndF9hc3NlcnRfbHRlKGlndF9idWZfd2lkdGgoYnVmKSwgMTYzODQpOwotCWlndF9hc3NlcnRf bHRlKGlndF9idWZfaGVpZ2h0KGJ1ZiksIDE2Mzg0KTsKKwlpZ3RfYXNzZXJ0X2x0ZShpbnRlbF9i dWZfd2lkdGgoYnVmKSwgMTYzODQpOworCWlndF9hc3NlcnRfbHRlKGludGVsX2J1Zl9oZWlnaHQo YnVmKSwgMTYzODQpOwogCiAJaWYgKGlzX2RzdCkgewogCQl3cml0ZV9kb21haW4gPSByZWFkX2Rv bWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7CkBAIC0yMDksMTAgKzEzMyw3IEBAIGdlbjhf YmluZF9idWYoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgY29uc3Qgc3RydWN0IGln dF9idWYgKmJ1ZiwKIAkJcmVhZF9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fU0FNUExFUjsKIAl9 CiAKLQlzcyA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigq c3MpLCA2NCk7Ci0Jb2Zmc2V0ID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0 Y2gsIHNzKTsKLQlhbm5vdGF0aW9uX2FkZF9zdGF0ZSgmYXViX2Fubm90YXRpb25zLCBBVUJfVFJB Q0VfU1VSRkFDRV9TVEFURSwKLQkJCSAgICAgb2Zmc2V0LCBzaXplb2YoKnNzKSk7CisJc3MgPSBp bnRlbF9iYl9wdHJfYWxpZ24oaWJiLCA2NCk7CiAKIAlzcy0+c3MwLnN1cmZhY2VfdHlwZSA9IFNV UkZBQ0VfMkQ7CiAJc3dpdGNoIChidWYtPmJwcCkgewpAQCAtMjM4LDE3ICsxNTksMTUgQEAgZ2Vu OF9iaW5kX2J1ZihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBjb25zdCBzdHJ1Y3Qg aWd0X2J1ZiAqYnVmLAogCQlzcy0+c3M1LnRybW9kZSA9IDI7CiAJc3MtPnNzNS5taXBfdGFpbF9z dGFydF9sb2QgPSAxOyAvKiBuZWVkZWQgd2l0aCB0cm1vZGUgKi8KIAotCXNzLT5zczguYmFzZV9h ZGRyID0gYnVmLT5iby0+b2Zmc2V0NjQ7Ci0Jc3MtPnNzOS5iYXNlX2FkZHJfaGkgPSBidWYtPmJv LT5vZmZzZXQ2NCA+PiAzMjsKKwlhZGRyZXNzID0gaW50ZWxfYmJfb2Zmc2V0X3JlbG9jKGliYiwg YnVmLT5oYW5kbGUsCisJCQkJCXJlYWRfZG9tYWluLCB3cml0ZV9kb21haW4sCisJCQkJCWludGVs X2JiX29mZnNldChpYmIpICsgNCAqIDgsCisJCQkJCWJ1Zi0+YWRkci5vZmZzZXQpOworCXNzLT5z czguYmFzZV9hZGRyID0gYWRkcmVzczsKKwlzcy0+c3M5LmJhc2VfYWRkcl9oaSA9IGFkZHJlc3Mg Pj4gMzI7CiAKLQlyZXQgPSBkcm1faW50ZWxfYm9fZW1pdF9yZWxvYyhiYXRjaC0+Ym8sCi0JCQkJ ICAgICAgaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsICZzcy0+c3M4KSwK LQkJCQkgICAgICBidWYtPmJvLCAwLAotCQkJCSAgICAgIHJlYWRfZG9tYWluLCB3cml0ZV9kb21h aW4pOwotCWFzc2VydChyZXQgPT0gMCk7Ci0KLQlzcy0+c3MyLmhlaWdodCA9IGlndF9idWZfaGVp Z2h0KGJ1ZikgLSAxOwotCXNzLT5zczIud2lkdGggID0gaWd0X2J1Zl93aWR0aChidWYpIC0gMTsK Kwlzcy0+c3MyLmhlaWdodCA9IGludGVsX2J1Zl9oZWlnaHQoYnVmKSAtIDE7CisJc3MtPnNzMi53 aWR0aCAgPSBpbnRlbF9idWZfd2lkdGgoYnVmKSAtIDE7CiAJc3MtPnNzMy5waXRjaCAgPSBidWYt PnN1cmZhY2VbMF0uc3RyaWRlIC0gMTsKIAogCXNzLT5zczcuc2tsLnNoYWRlcl9jaGFuZWxfc2Vs ZWN0X3IgPSA0OwpAQCAtMjY0LDYwICsxODMsNTIgQEAgZ2VuOF9iaW5kX2J1ZihzdHJ1Y3QgaW50 ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAogCQlzcy0+ c3M2LmF1eF9tb2RlID0gMHg1OyAvKiBBVVhfQ0NTX0UgKi8KIAkJc3MtPnNzNi5hdXhfcGl0Y2gg PSAoYnVmLT5jY3NbMF0uc3RyaWRlIC8gMTI4KSAtIDE7CiAKLQkJc3MtPnNzMTAuYXV4X2Jhc2Vf YWRkciA9IGJ1Zi0+Ym8tPm9mZnNldDY0ICsgYnVmLT5jY3NbMF0ub2Zmc2V0OwotCQlzcy0+c3Mx MS5hdXhfYmFzZV9hZGRyX2hpID0gKGJ1Zi0+Ym8tPm9mZnNldDY0ICsgYnVmLT5jY3NbMF0ub2Zm c2V0KSA+PiAzMjsKLQotCQlyZXQgPSBkcm1faW50ZWxfYm9fZW1pdF9yZWxvYyhiYXRjaC0+Ym8s Ci0JCQkJCSAgICAgIGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCAmc3Mt PnNzMTApLAotCQkJCQkgICAgICBidWYtPmJvLCBidWYtPmNjc1swXS5vZmZzZXQsCi0JCQkJCSAg ICAgIHJlYWRfZG9tYWluLCB3cml0ZV9kb21haW4pOwotCQlhc3NlcnQocmV0ID09IDApOworCQlh ZGRyZXNzID0gaW50ZWxfYmJfb2Zmc2V0X3JlbG9jX3dpdGhfZGVsdGEoaWJiLCBidWYtPmhhbmRs ZSwKKwkJCQkJCQkgICByZWFkX2RvbWFpbiwgd3JpdGVfZG9tYWluLAorCQkJCQkJCSAgIGJ1Zi0+ Y2NzWzBdLm9mZnNldCwKKwkJCQkJCQkgICBpbnRlbF9iYl9vZmZzZXQoaWJiKSArIDQgKiAxMCwK KwkJCQkJCQkgICBidWYtPmFkZHIub2Zmc2V0KTsKKwkJc3MtPnNzMTAuYXV4X2Jhc2VfYWRkciA9 IChhZGRyZXNzICsgYnVmLT5jY3NbMF0ub2Zmc2V0KTsKKwkJc3MtPnNzMTEuYXV4X2Jhc2VfYWRk cl9oaSA9IChhZGRyZXNzICsgYnVmLT5jY3NbMF0ub2Zmc2V0KSA+PiAzMjsKIAl9CiAKIAlpZiAo YnVmLT5jYy5vZmZzZXQpIHsKIAkJaWd0X2Fzc2VydChidWYtPmNvbXByZXNzaW9uID09IEk5MTVf Q09NUFJFU1NJT05fUkVOREVSKTsKIAotCQlzcy0+c3MxMi5jbGVhcl9hZGRyZXNzID0gYnVmLT5i by0+b2Zmc2V0NjQgKyBidWYtPmNjLm9mZnNldDsKLQkJc3MtPnNzMTMuY2xlYXJfYWRkcmVzc19o aSA9IChidWYtPmJvLT5vZmZzZXQ2NCArIGJ1Zi0+Y2Mub2Zmc2V0KSA+PiAzMjsKLQotCQlyZXQg PSBkcm1faW50ZWxfYm9fZW1pdF9yZWxvYyhiYXRjaC0+Ym8sCi0JCQkJCSAgICAgIGludGVsX2Jh dGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCAmc3MtPnNzMTIpLAotCQkJCQkgICAgICBi dWYtPmJvLCBidWYtPmNjLm9mZnNldCwKLQkJCQkJICAgICAgcmVhZF9kb21haW4sIHdyaXRlX2Rv bWFpbik7Ci0JCWFzc2VydChyZXQgPT0gMCk7CisJCWFkZHJlc3MgPSBpbnRlbF9iYl9vZmZzZXRf cmVsb2Nfd2l0aF9kZWx0YShpYmIsIGJ1Zi0+aGFuZGxlLAorCQkJCQkJCSAgIHJlYWRfZG9tYWlu LCB3cml0ZV9kb21haW4sCisJCQkJCQkJICAgYnVmLT5jYy5vZmZzZXQsCisJCQkJCQkJICAgaW50 ZWxfYmJfb2Zmc2V0KGliYikgKyA0ICogMTIsCisJCQkJCQkJICAgYnVmLT5hZGRyLm9mZnNldCk7 CisJCXNzLT5zczEyLmNsZWFyX2FkZHJlc3MgPSBhZGRyZXNzICsgYnVmLT5jYy5vZmZzZXQ7CisJ CXNzLT5zczEzLmNsZWFyX2FkZHJlc3NfaGkgPSAoYWRkcmVzcyArIGJ1Zi0+Y2Mub2Zmc2V0KSA+ PiAzMjsKIAl9CiAKLQlyZXR1cm4gb2Zmc2V0OworCXJldHVybiBpbnRlbF9iYl9wdHJfYWRkX3Jl dHVybl9wcmV2X29mZnNldChpYmIsIHNpemVvZigqc3MpKTsKIH0KIAogc3RhdGljIHVpbnQzMl90 Ci1nZW44X2JpbmRfc3VyZmFjZXMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJ ICAgY29uc3Qgc3RydWN0IGlndF9idWYgKnNyYywKLQkJICAgY29uc3Qgc3RydWN0IGlndF9idWYg KmRzdCkKK2dlbjhfYmluZF9zdXJmYWNlcyhzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKKwkJICAgY29u c3Qgc3RydWN0IGludGVsX2J1ZiAqc3JjLAorCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfYnVmICpk c3QpCiB7Ci0JdWludDMyX3QgKmJpbmRpbmdfdGFibGUsIG9mZnNldDsKKwl1aW50MzJfdCAqYmlu ZGluZ190YWJsZSwgYmluZGluZ190YWJsZV9vZmZzZXQ7CiAKLQliaW5kaW5nX3RhYmxlID0gaW50 ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwgOCwgMzIpOwotCW9mZnNldCA9IGlu dGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCBiaW5kaW5nX3RhYmxlKTsKLQlh bm5vdGF0aW9uX2FkZF9zdGF0ZSgmYXViX2Fubm90YXRpb25zLCBBVUJfVFJBQ0VfQklORElOR19U QUJMRSwKLQkJCSAgICAgb2Zmc2V0LCA4KTsKKwliaW5kaW5nX3RhYmxlID0gaW50ZWxfYmJfcHRy X2FsaWduKGliYiwgMzIpOworCWJpbmRpbmdfdGFibGVfb2Zmc2V0ID0gaW50ZWxfYmJfcHRyX2Fk ZF9yZXR1cm5fcHJldl9vZmZzZXQoaWJiLCAzMik7CiAKLQliaW5kaW5nX3RhYmxlWzBdID0gZ2Vu OF9iaW5kX2J1ZihiYXRjaCwgZHN0LCAxKTsKLQliaW5kaW5nX3RhYmxlWzFdID0gZ2VuOF9iaW5k X2J1ZihiYXRjaCwgc3JjLCAwKTsKKwliaW5kaW5nX3RhYmxlWzBdID0gZ2VuOF9iaW5kX2J1Zihp YmIsIGRzdCwgMSk7CisJYmluZGluZ190YWJsZVsxXSA9IGdlbjhfYmluZF9idWYoaWJiLCBzcmMs IDApOwogCi0JcmV0dXJuIG9mZnNldDsKKwlyZXR1cm4gYmluZGluZ190YWJsZV9vZmZzZXQ7CiB9 CiAKIC8qIE1vc3RseSBjb3B5K3Bhc3RlIGZyb20gZ2VuNiwgZXhjZXB0IHdyYXAgbW9kZXMgbW92 ZWQgKi8KIHN0YXRpYyB1aW50MzJfdAotZ2VuOF9jcmVhdGVfc2FtcGxlcihzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgKmJhdGNoKSB7CitnZW44X2NyZWF0ZV9zYW1wbGVyKHN0cnVjdCBpbnRlbF9i YiAqaWJiKSB7CiAJc3RydWN0IGdlbjhfc2FtcGxlcl9zdGF0ZSAqc3M7Ci0JdWludDMyX3Qgb2Zm c2V0OwogCi0Jc3MgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX2FsbG9jKGJhdGNoLCBzaXpl b2YoKnNzKSwgNjQpOwotCW9mZnNldCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0 KGJhdGNoLCBzcyk7Ci0JYW5ub3RhdGlvbl9hZGRfc3RhdGUoJmF1Yl9hbm5vdGF0aW9ucywgQVVC X1RSQUNFX1NBTVBMRVJfU1RBVEUsCi0JCQkgICAgIG9mZnNldCwgc2l6ZW9mKCpzcykpOworCXNz ID0gaW50ZWxfYmJfcHRyX2FsaWduKGliYiwgNjQpOwogCiAJc3MtPnNzMC5taW5fZmlsdGVyID0g R0VONF9NQVBGSUxURVJfTkVBUkVTVDsKIAlzcy0+c3MwLm1hZ19maWx0ZXIgPSBHRU40X01BUEZJ TFRFUl9ORUFSRVNUOwpAQCAtMzI5LDIxICsyNDAsMTUgQEAgZ2VuOF9jcmVhdGVfc2FtcGxlcihz dHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKSB7CiAJICogc2FtcGxlciBmZXRjaCwgYnV0 IGNvdWxkbid0IG1ha2UgaXQgd29yay4gKi8KIAlzcy0+c3MzLm5vbl9ub3JtYWxpemVkX2Nvb3Jk ID0gMDsKIAotCXJldHVybiBvZmZzZXQ7CisJcmV0dXJuIGludGVsX2JiX3B0cl9hZGRfcmV0dXJu X3ByZXZfb2Zmc2V0KGliYiwgc2l6ZW9mKCpzcykpOwogfQogCiBzdGF0aWMgdWludDMyX3QKLWdl bjhfZmlsbF9wcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorZ2VuOF9maWxsX3Bz KHN0cnVjdCBpbnRlbF9iYiAqaWJiLAogCSAgICAgY29uc3QgdWludDMyX3Qga2VybmVsW11bNF0s CiAJICAgICBzaXplX3Qgc2l6ZSkKIHsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0KLQlvZmZzZXQgPSBp bnRlbF9iYXRjaGJ1ZmZlcl9jb3B5X2RhdGEoYmF0Y2gsIGtlcm5lbCwgc2l6ZSwgNjQpOwotCWFu bm90YXRpb25fYWRkX3N0YXRlKCZhdWJfYW5ub3RhdGlvbnMsIEFVQl9UUkFDRV9LRVJORUxfSU5T VFJVQ1RJT05TLAotCQkJICAgICBvZmZzZXQsIHNpemUpOwotCi0JcmV0dXJuIG9mZnNldDsKKwly ZXR1cm4gaW50ZWxfYmJfY29weV9kYXRhKGliYiwga2VybmVsLCBzaXplLCA2NCk7CiB9CiAKIC8q CkBAIC0zNTcsMzMgKzI2MiwyOSBAQCBnZW44X2ZpbGxfcHMoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCwKICAqIHNlZSBnZW42X2VtaXRfdmVydGV4X2VsZW1lbnRzCiAgKi8KIHN0YXRp YyB1aW50MzJfdAotZ2VuN19maWxsX3ZlcnRleF9idWZmZXJfZGF0YShzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoLAotCQkJICAgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqc3JjLAorZ2Vu N19maWxsX3ZlcnRleF9idWZmZXJfZGF0YShzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKKwkJCSAgICAg Y29uc3Qgc3RydWN0IGludGVsX2J1ZiAqc3JjLAogCQkJICAgICB1aW50MzJfdCBzcmNfeCwgdWlu dDMyX3Qgc3JjX3ksCiAJCQkgICAgIHVpbnQzMl90IGRzdF94LCB1aW50MzJfdCBkc3RfeSwKIAkJ CSAgICAgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCkKIHsKLQl2b2lkICpzdGFydDsK IAl1aW50MzJfdCBvZmZzZXQ7CiAKLQlpbnRlbF9iYXRjaGJ1ZmZlcl9hbGlnbihiYXRjaCwgOCk7 Ci0Jc3RhcnQgPSBiYXRjaC0+cHRyOworCWludGVsX2JiX3B0cl9hbGlnbihpYmIsIDgpOworCW9m ZnNldCA9IGludGVsX2JiX29mZnNldChpYmIpOwogCi0JZW1pdF92ZXJ0ZXhfMnMoYmF0Y2gsIGRz dF94ICsgd2lkdGgsIGRzdF95ICsgaGVpZ2h0KTsKLQllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGJh dGNoLCBzcmNfeCArIHdpZHRoLCBpZ3RfYnVmX3dpZHRoKHNyYykpOwotCWVtaXRfdmVydGV4X25v cm1hbGl6ZWQoYmF0Y2gsIHNyY195ICsgaGVpZ2h0LCBpZ3RfYnVmX2hlaWdodChzcmMpKTsKKwll bWl0X3ZlcnRleF8ycyhpYmIsIGRzdF94ICsgd2lkdGgsIGRzdF95ICsgaGVpZ2h0KTsKKwllbWl0 X3ZlcnRleF9ub3JtYWxpemVkKGliYiwgc3JjX3ggKyB3aWR0aCwgaW50ZWxfYnVmX3dpZHRoKHNy YykpOworCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoaWJiLCBzcmNfeSArIGhlaWdodCwgaW50ZWxf YnVmX2hlaWdodChzcmMpKTsKIAotCWVtaXRfdmVydGV4XzJzKGJhdGNoLCBkc3RfeCwgZHN0X3kg KyBoZWlnaHQpOwotCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoYmF0Y2gsIHNyY194LCBpZ3RfYnVm X3dpZHRoKHNyYykpOwotCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoYmF0Y2gsIHNyY195ICsgaGVp Z2h0LCBpZ3RfYnVmX2hlaWdodChzcmMpKTsKKwllbWl0X3ZlcnRleF8ycyhpYmIsIGRzdF94LCBk c3RfeSArIGhlaWdodCk7CisJZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChpYmIsIHNyY194LCBpbnRl bF9idWZfd2lkdGgoc3JjKSk7CisJZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChpYmIsIHNyY195ICsg aGVpZ2h0LCBpbnRlbF9idWZfaGVpZ2h0KHNyYykpOwogCi0JZW1pdF92ZXJ0ZXhfMnMoYmF0Y2gs IGRzdF94LCBkc3RfeSk7Ci0JZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3gsIGln dF9idWZfd2lkdGgoc3JjKSk7Ci0JZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3ks IGlndF9idWZfaGVpZ2h0KHNyYykpOworCWVtaXRfdmVydGV4XzJzKGliYiwgZHN0X3gsIGRzdF95 KTsKKwllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGliYiwgc3JjX3gsIGludGVsX2J1Zl93aWR0aChz cmMpKTsKKwllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGliYiwgc3JjX3ksIGludGVsX2J1Zl9oZWln aHQoc3JjKSk7CiAKLQlvZmZzZXQgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChi YXRjaCwgc3RhcnQpOwotCWFubm90YXRpb25fYWRkX3N0YXRlKCZhdWJfYW5ub3RhdGlvbnMsIEFV Ql9UUkFDRV9WRVJURVhfQlVGRkVSLAotCQkJICAgICBvZmZzZXQsIDMgKiBWRVJURVhfU0laRSk7 CiAJcmV0dXJuIG9mZnNldDsKIH0KIApAQCAtMzk3LDI1ICsyOTgsMjUgQEAgZ2VuN19maWxsX3Zl cnRleF9idWZmZXJfZGF0YShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAogICogcGFj a2VkLgogICovCiBzdGF0aWMgdm9pZAotZ2VuNl9lbWl0X3ZlcnRleF9lbGVtZW50cyhzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKSB7CitnZW42X2VtaXRfdmVydGV4X2VsZW1lbnRzKHN0 cnVjdCBpbnRlbF9iYiAqaWJiKSB7CiAJLyoKIAkgKiBUaGUgVlVFIGxheW91dAogCSAqICAgIGR3 b3JkIDAtMzogcGFkICgwLCAwLCAwLiAwKQogCSAqICAgIGR3b3JkIDQtNzogcG9zaXRpb24gKHgs IHksIDAsIDEuMCksCiAJICogICAgZHdvcmQgOC0xMTogdGV4dHVyZSBjb29yZGluYXRlIDAgKHUw LCB2MCwgMCwgMS4wKQogCSAqLwotCU9VVF9CQVRDSChHRU40XzNEU1RBVEVfVkVSVEVYX0VMRU1F TlRTIHwgKDMgKiAyICsgMSAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40XzNEU1RBVEVf VkVSVEVYX0VMRU1FTlRTIHwgKDMgKiAyICsgMSAtIDIpKTsKIAogCS8qIEVsZW1lbnQgc3RhdGUg MC4gVGhlc2UgYXJlIDQgZHdvcmRzIG9mIDAgcmVxdWlyZWQgZm9yIHRoZSBWVUUgZm9ybWF0Lgog CSAqIFdlIGRvbid0IHJlYWxseSBrbm93IG9yIGNhcmUgd2hhdCB0aGV5IGRvLgogCSAqLwotCU9V VF9CQVRDSCgwIDw8IEdFTjZfVkUwX1ZFUlRFWF9CVUZGRVJfSU5ERVhfU0hJRlQgfCBHRU42X1ZF MF9WQUxJRCB8Ci0JCSAgU1VSRkFDRUZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQgPDwgVkUwX0ZP Uk1BVF9TSElGVCB8Ci0JCSAgMCA8PCBWRTBfT0ZGU0VUX1NISUZUKTsgLyogd2Ugc3BlY2lmeSAw LCBidXQgaXQncyByZWFsbHkgZG9lcyBub3QgZXhpc3QgKi8KLQlPVVRfQkFUQ0goR0VONF9WRkNP TVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8wX1NISUZUIHwKLQkJICBHRU40X1ZG Q09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAotCQkgIEdFTjRf VkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfMl9TSElGVCB8Ci0JCSAgR0VO NF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZUKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAwIDw8IEdFTjZfVkUwX1ZFUlRFWF9CVUZGRVJfSU5ERVhfU0hJRlQgfCBH RU42X1ZFMF9WQUxJRCB8CisJCSAgICAgU1VSRkFDRUZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQg PDwgVkUwX0ZPUk1BVF9TSElGVCB8CisJCSAgICAgMCA8PCBWRTBfT0ZGU0VUX1NISUZUKTsgLyog d2Ugc3BlY2lmeSAwLCBidXQgaXQncyByZWFsbHkgZG9lcyBub3QgZXhpc3QgKi8KKwlpbnRlbF9i Yl9vdXQoaWJiLCBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzBf U0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05F TlRfMV9TSElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNP TVBPTkVOVF8yX1NISUZUIHwKKwkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUx X1ZGQ09NUE9ORU5UXzNfU0hJRlQpOwogCiAJLyogRWxlbWVudCBzdGF0ZSAxIC0gT3VyICJkZXN0 aW5hdGlvbiIgdmVydGljZXMuIFRoZXNlIGFyZSBwYXNzZWQgZG93bgogCSAqIHRocm91Z2ggdGhl IHBpcGVsaW5lLCBhbmQgZXZlbnR1YWxseSBtYWtlIGl0IHRvIHRoZSBwaXhlbCBzaGFkZXIgYXMK QEAgLTQyMywyNSArMzI0LDI1IEBAIGdlbjZfZW1pdF92ZXJ0ZXhfZWxlbWVudHMoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCkgewogCSAqIHNpZ25lZC9zY2FsZWQgYmVjYXVzZSBvZiBn ZW42IHJlbmRlcmNvcHkuIEkgc2VlIG5vIHBhcnRpY3VsYXIgcmVhc29uCiAJICogZm9yIGRvaW5n IHRoaXMgdGhvdWdoLgogCSAqLwotCU9VVF9CQVRDSCgwIDw8IEdFTjZfVkUwX1ZFUlRFWF9CVUZG RVJfSU5ERVhfU0hJRlQgfCBHRU42X1ZFMF9WQUxJRCB8Ci0JCSAgU1VSRkFDRUZPUk1BVF9SMTZH MTZfU1NDQUxFRCA8PCBWRTBfRk9STUFUX1NISUZUIHwKLQkJICAwIDw8IFZFMF9PRkZTRVRfU0hJ RlQpOyAvKiBvZmZzZXRzIHZiIGluIGJ5dGVzICovCi0JT1VUX0JBVENIKEdFTjRfVkZDT01QT05F TlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBPTkVOVF8wX1NISUZUIHwKLQkJICBHRU40X1ZGQ09N UE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZDT01QT05FTlRfMV9TSElGVCB8Ci0JCSAgR0VONF9W RkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NISUZUIHwKLQkJICBHRU40 X1ZGQ09NUE9ORU5UX1NUT1JFXzFfRkxUIDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZUKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwIDw8IEdFTjZfVkUwX1ZFUlRFWF9CVUZGRVJfSU5ERVhfU0hJRlQg fCBHRU42X1ZFMF9WQUxJRCB8CisJCSAgICAgU1VSRkFDRUZPUk1BVF9SMTZHMTZfU1NDQUxFRCA8 PCBWRTBfRk9STUFUX1NISUZUIHwKKwkJICAgICAwIDw8IFZFMF9PRkZTRVRfU0hJRlQpOyAvKiBv ZmZzZXRzIHZiIGluIGJ5dGVzICovCisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF9WRkNPTVBPTkVO VF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzBfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZD T01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKKwkJICAgICBH RU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAorCQkg ICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMV9GTFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJ RlQpOwogCiAJLyogRWxlbWVudCBzdGF0ZSAyLiBMYXN0IGJ1dCBub3QgbGVhc3Qgd2Ugc3RvcmUg dGhlIFUsViBjb21wb25lbnRzIGFzCiAJICogbm9ybWFsaXplZCBmbG9hdHMuIFRoZXNlIHdpbGwg YmUgdXNlZCBpbiB0aGUgcGl4ZWwgc2hhZGVyIHRvIHNhbXBsZQogCSAqIGZyb20gdGhlIHNvdXJj ZSBidWZmZXIuCiAJICovCi0JT1VUX0JBVENIKDAgPDwgR0VONl9WRTBfVkVSVEVYX0JVRkZFUl9J TkRFWF9TSElGVCB8IEdFTjZfVkUwX1ZBTElEIHwKLQkJICBTVVJGQUNFRk9STUFUX1IzMkczMl9G TE9BVCA8PCBWRTBfRk9STUFUX1NISUZUIHwKLQkJICA0IDw8IFZFMF9PRkZTRVRfU0hJRlQpOwkv KiBvZmZzZXQgdmIgaW4gYnl0ZXMgKi8KLQlPVVRfQkFUQ0goR0VONF9WRkNPTVBPTkVOVF9TVE9S RV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzBfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05FTlRf U1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKLQkJICBHRU40X1ZGQ09NUE9O RU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01Q T05FTlRfU1RPUkVfMV9GTFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQpOworCWludGVsX2Ji X291dChpYmIsIDAgPDwgR0VONl9WRTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8IEdFTjZf VkUwX1ZBTElEIHwKKwkJICAgICBTVVJGQUNFRk9STUFUX1IzMkczMl9GTE9BVCA8PCBWRTBfRk9S TUFUX1NISUZUIHwKKwkJICAgICA0IDw8IFZFMF9PRkZTRVRfU0hJRlQpOwkvKiBvZmZzZXQgdmIg aW4gYnl0ZXMgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NS QyA8PCBWRTFfVkZDT01QT05FTlRfMF9TSElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9T VE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01Q T05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfMl9TSElGVCB8CisJCSAgICAgR0VONF9W RkNPTVBPTkVOVF9TVE9SRV8xX0ZMVCA8PCBWRTFfVkZDT01QT05FTlRfM19TSElGVCk7CiB9CiAK IC8qCkBAIC00NTAsNDIgKzM1MSwzNSBAQCBnZW42X2VtaXRfdmVydGV4X2VsZW1lbnRzKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpIHsKICAqIEBiYXRjaAogICogQG9mZnNldCAtIGJ5 dHcgb2Zmc2V0IHdpdGhpbiB0aGUgQGJhdGNoIHdoZXJlIHRoZSB2ZXJ0ZXggYnVmZmVyIHN0YXJ0 cy4KICAqLwotc3RhdGljIHZvaWQgZ2VuN19lbWl0X3ZlcnRleF9idWZmZXIoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCQkgICAgdWludDMyX3Qgb2Zmc2V0KSB7Ci0JT1VUX0JB VENIKEdFTjRfM0RTVEFURV9WRVJURVhfQlVGRkVSUyB8ICgxICsgKDQgKiAxKSAtIDIpKTsKLQlP VVRfQkFUQ0goMCA8PCBHRU42X1ZCMF9CVUZGRVJfSU5ERVhfU0hJRlQgfCAvKiBWQiAwdGggaW5k ZXggKi8KLQkJICBHRU44X1ZCMF9CVUZGRVJfQUREUl9NT0RfRU4gfCAvKiBBZGRyZXNzIE1vZGlm eSBFbmFibGUgKi8KLQkJICBWRVJURVhfU0laRSA8PCBWQjBfQlVGRkVSX1BJVENIX1NISUZUKTsK LQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fVkVSVEVYLCAwLCBvZmZzZXQp OwotCU9VVF9CQVRDSCgzICogVkVSVEVYX1NJWkUpOworc3RhdGljIHZvaWQgZ2VuN19lbWl0X3Zl cnRleF9idWZmZXIoc3RydWN0IGludGVsX2JiICppYmIsIHVpbnQzMl90IG9mZnNldCkKK3sKKwlp bnRlbF9iYl9vdXQoaWJiLCBHRU40XzNEU1RBVEVfVkVSVEVYX0JVRkZFUlMgfCAoMSArICg0ICog MSkgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCA8PCBHRU42X1ZCMF9CVUZGRVJfSU5ERVhf U0hJRlQgfCAvKiBWQiAwdGggaW5kZXggKi8KKwkJICAgICBHRU44X1ZCMF9CVUZGRVJfQUREUl9N T0RfRU4gfCAvKiBBZGRyZXNzIE1vZGlmeSBFbmFibGUgKi8KKwkJICAgICBWRVJURVhfU0laRSA8 PCBWQjBfQlVGRkVSX1BJVENIX1NISUZUKTsKKwlpbnRlbF9iYl9lbWl0X3JlbG9jKGliYiwgaWJi LT5oYW5kbGUsCisJCQkgICAgSTkxNV9HRU1fRE9NQUlOX1ZFUlRFWCwgMCwKKwkJCSAgICBvZmZz ZXQsIGliYi0+YmF0Y2hfb2Zmc2V0KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAzICogVkVSVEVYX1NJ WkUpOwogfQogCiBzdGF0aWMgdWludDMyX3QKLWdlbjZfY3JlYXRlX2NjX3N0YXRlKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW42X2NyZWF0ZV9jY19zdGF0ZShzdHJ1Y3QgaW50 ZWxfYmIgKmliYikKIHsKIAlzdHJ1Y3QgZ2VuNl9jb2xvcl9jYWxjX3N0YXRlICpjY19zdGF0ZTsK LQl1aW50MzJfdCBvZmZzZXQ7CiAKLQljY19zdGF0ZSA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRh dGFfYWxsb2MoYmF0Y2gsCi0JCQkJCQkgICBzaXplb2YoKmNjX3N0YXRlKSwgNjQpOwotCW9mZnNl dCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCBjY19zdGF0ZSk7Ci0J YW5ub3RhdGlvbl9hZGRfc3RhdGUoJmF1Yl9hbm5vdGF0aW9ucywgQVVCX1RSQUNFX0NDX1NUQVRF LAotCQkJICAgICBvZmZzZXQsIHNpemVvZigqY2Nfc3RhdGUpKTsKKwljY19zdGF0ZSA9IGludGVs X2JiX3B0cl9hbGlnbihpYmIsIDY0KTsKIAotCXJldHVybiBvZmZzZXQ7CisJcmV0dXJuIGludGVs X2JiX3B0cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgc2l6ZW9mKCpjY19zdGF0ZSkpOwog fQogCiBzdGF0aWMgdWludDMyX3QKLWdlbjhfY3JlYXRlX2JsZW5kX3N0YXRlKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW44X2NyZWF0ZV9ibGVuZF9zdGF0ZShzdHJ1Y3QgaW50 ZWxfYmIgKmliYikKIHsKIAlzdHJ1Y3QgZ2VuOF9ibGVuZF9zdGF0ZSAqYmxlbmQ7CiAJaW50IGk7 Ci0JdWludDMyX3Qgb2Zmc2V0OwogCi0JYmxlbmQgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRh X2FsbG9jKGJhdGNoLCBzaXplb2YoKmJsZW5kKSwgNjQpOwotCW9mZnNldCA9IGludGVsX2JhdGNo YnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCBibGVuZCk7Ci0JYW5ub3RhdGlvbl9hZGRfc3Rh dGUoJmF1Yl9hbm5vdGF0aW9ucywgQVVCX1RSQUNFX0JMRU5EX1NUQVRFLAotCQkJICAgICBvZmZz ZXQsIHNpemVvZigqYmxlbmQpKTsKKwlibGVuZCA9IGludGVsX2JiX3B0cl9hbGlnbihpYmIsIDY0 KTsKIAogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAJCWJsZW5kLT5ic1tpXS5kZXN0X2Js ZW5kX2ZhY3RvciA9IEdFTjZfQkxFTkRGQUNUT1JfWkVSTzsKQEAgLTQ5NSw0NjYgKzM4OSw0NTgg QEAgZ2VuOF9jcmVhdGVfYmxlbmRfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCkKIAkJYmxlbmQtPmJzW2ldLmNvbG9yX2J1ZmZlcl9ibGVuZCA9IDA7CiAJfQogCi0JcmV0dXJu IG9mZnNldDsKKwlyZXR1cm4gaW50ZWxfYmJfcHRyX2FkZF9yZXR1cm5fcHJldl9vZmZzZXQoaWJi LCBzaXplb2YoKmJsZW5kKSk7CiB9CiAKIHN0YXRpYyB1aW50MzJfdAotZ2VuNl9jcmVhdGVfY2Nf dmlld3BvcnQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjZfY3JlYXRlX2Nj X3ZpZXdwb3J0KHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewogCXN0cnVjdCBnZW40X2NjX3ZpZXdw b3J0ICp2cDsKLQl1aW50MzJfdCBvZmZzZXQ7CiAKLQl2cCA9IGludGVsX2JhdGNoYnVmZmVyX3N1 YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigqdnApLCAzMik7Ci0Jb2Zmc2V0ID0gaW50ZWxfYmF0 Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsIHZwKTsKLQlhbm5vdGF0aW9uX2FkZF9zdGF0 ZSgmYXViX2Fubm90YXRpb25zLCBBVUJfVFJBQ0VfQ0NfVlBfU1RBVEUsCi0JCQkgICAgIG9mZnNl dCwgc2l6ZW9mKCp2cCkpOworCXZwID0gaW50ZWxfYmJfcHRyX2FsaWduKGliYiwgMzIpOwogCiAJ LyogWFhYIEkgZG9uJ3QgdW5kZXJzdGFuZCB0aGlzICovCiAJdnAtPm1pbl9kZXB0aCA9IC0xLmUz NTsKIAl2cC0+bWF4X2RlcHRoID0gMS5lMzU7CiAKLQlyZXR1cm4gb2Zmc2V0OworCXJldHVybiBp bnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNldChpYmIsIHNpemVvZigqdnApKTsKIH0K IAogc3RhdGljIHVpbnQzMl90Ci1nZW43X2NyZWF0ZV9zZl9jbGlwX3ZpZXdwb3J0KHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpIHsKK2dlbjdfY3JlYXRlX3NmX2NsaXBfdmlld3BvcnQo c3RydWN0IGludGVsX2JiICppYmIpIHsKIAkvKiBYWFggdGhlc2UgYXJlIGxpa2VseSBub3QgbmVl ZGVkICovCiAJc3RydWN0IGdlbjdfc2ZfY2xpcF92aWV3cG9ydCAqc2N2X3N0YXRlOwotCXVpbnQz Ml90IG9mZnNldDsKIAotCXNjdl9zdGF0ZSA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxs b2MoYmF0Y2gsCi0JCQkJCQkgICAgc2l6ZW9mKCpzY3Zfc3RhdGUpLCA2NCk7Ci0Jb2Zmc2V0ID0g aW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsIHNjdl9zdGF0ZSk7Ci0JYW5u b3RhdGlvbl9hZGRfc3RhdGUoJmF1Yl9hbm5vdGF0aW9ucywgQVVCX1RSQUNFX0NMSVBfVlBfU1RB VEUsCi0JCQkgICAgIG9mZnNldCwgc2l6ZW9mKCpzY3Zfc3RhdGUpKTsKKwlzY3Zfc3RhdGUgPSBp bnRlbF9iYl9wdHJfYWxpZ24oaWJiLCA2NCk7CiAKIAlzY3Zfc3RhdGUtPmd1YXJkYmFuZC54bWlu ID0gMDsKIAlzY3Zfc3RhdGUtPmd1YXJkYmFuZC54bWF4ID0gMS4wZjsKIAlzY3Zfc3RhdGUtPmd1 YXJkYmFuZC55bWluID0gMDsKIAlzY3Zfc3RhdGUtPmd1YXJkYmFuZC55bWF4ID0gMS4wZjsKIAot CXJldHVybiBvZmZzZXQ7CisJcmV0dXJuIGludGVsX2JiX3B0cl9hZGRfcmV0dXJuX3ByZXZfb2Zm c2V0KGliYiwgc2l6ZW9mKCpzY3Zfc3RhdGUpKTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW42 X2NyZWF0ZV9zY2lzc29yX3JlY3Qoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dl bjZfY3JlYXRlX3NjaXNzb3JfcmVjdChzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKIAlzdHJ1Y3Qg Z2VuNl9zY2lzc29yX3JlY3QgKnNjaXNzb3I7Ci0JdWludDMyX3Qgb2Zmc2V0OwogCi0Jc2Npc3Nv ciA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigqc2Npc3Nv ciksIDY0KTsKLQlvZmZzZXQgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChiYXRj aCwgc2Npc3Nvcik7Ci0JYW5ub3RhdGlvbl9hZGRfc3RhdGUoJmF1Yl9hbm5vdGF0aW9ucywgQVVC X1RSQUNFX1NDSVNTT1JfU1RBVEUsCi0JCQkgICAgIG9mZnNldCwgc2l6ZW9mKCpzY2lzc29yKSk7 CisJc2Npc3NvciA9IGludGVsX2JiX3B0cl9hbGlnbihpYmIsIDY0KTsKIAotCXJldHVybiBvZmZz ZXQ7CisJcmV0dXJuIGludGVsX2JiX3B0cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgc2l6 ZW9mKCpzY2lzc29yKSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW44X2VtaXRfc2lwKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpIHsKLQlPVVRfQkFUQ0goR0VONF9TVEFURV9TSVAgfCAo MyAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOworZ2VuOF9lbWl0X3NpcChz dHJ1Y3QgaW50ZWxfYmIgKmliYikgeworCWludGVsX2JiX291dChpYmIsIEdFTjRfU1RBVEVfU0lQ IHwgKDMgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW43X2VtaXRfcHVzaF9jb25zdGFudHMoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCkgewotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfUFVTSF9D T05TVEFOVF9BTExPQ19WUyk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSChHRU44XzNEU1RB VEVfUFVTSF9DT05TVEFOVF9BTExPQ19IUyk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSChH RU44XzNEU1RBVEVfUFVTSF9DT05TVEFOVF9BTExPQ19EUyk7Ci0JT1VUX0JBVENIKDApOwotCU9V VF9CQVRDSChHRU44XzNEU1RBVEVfUFVTSF9DT05TVEFOVF9BTExPQ19HUyk7Ci0JT1VUX0JBVENI KDApOwotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfUFVTSF9DT05TVEFOVF9BTExPQ19QUyk7Ci0J T1VUX0JBVENIKDApOworZ2VuN19lbWl0X3B1c2hfY29uc3RhbnRzKHN0cnVjdCBpbnRlbF9iYiAq aWJiKSB7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX1BVU0hfQ09OU1RBTlRfQUxM T0NfVlMpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIEdFTjhf M0RTVEFURV9QVVNIX0NPTlNUQU5UX0FMTE9DX0hTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCBHRU44XzNEU1RBVEVfUFVTSF9DT05TVEFOVF9BTExPQ19EUyk7 CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNUQVRF X1BVU0hfQ09OU1RBTlRfQUxMT0NfR1MpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9QVVNIX0NPTlNUQU5UX0FMTE9DX1BTKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjlfZW1pdF9zdGF0ZV9iYXNl X2FkZHJlc3Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkgeworZ2VuOV9lbWl0X3N0 YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmIgKmliYikgewogCiAJLyogV2FCaW5kbGVz c1N1cmZhY2VTdGF0ZU1vZGlmeUVuYWJsZTpza2wsYnh0ICovCiAJLyogVGhlIGxlbmd0aCBoYXMg dG8gYmUgb25lIGxlc3MgaWYgd2UgZG9udCBtb2RpZnkKIAkgICBiaW5kbGVzcyBzdGF0ZSAqLwot CU9VVF9CQVRDSChHRU40X1NUQVRFX0JBU0VfQUREUkVTUyB8ICgxOSAtIDEgLSAyKSk7CisJaW50 ZWxfYmJfb3V0KGliYiwgR0VONF9TVEFURV9CQVNFX0FERFJFU1MgfCAoMTkgLSAxIC0gMikpOwog CiAJLyogZ2VuZXJhbCAqLwotCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0J T1VUX0JBVENIKDApOworCWludGVsX2JiX291dChpYmIsIDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZ KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIAogCS8qIHN0YXRlbGVzcyBkYXRhIHBvcnQgKi8K LQlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOworCWludGVsX2JiX291dChpYmIs IDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKIAogCS8qIHN1cmZhY2UgKi8KLQlPVVRfUkVMT0Mo YmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fU0FNUExFUiwgMCwgQkFTRV9BRERSRVNTX01PRElG WSk7CisJaW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIGliYi0+aGFuZGxlLAorCQkJICAgIEk5MTVf R0VNX0RPTUFJTl9TQU1QTEVSLCAwLAorCQkJICAgIEJBU0VfQUREUkVTU19NT0RJRlksIGliYi0+ YmF0Y2hfb2Zmc2V0KTsKIAogCS8qIGR5bmFtaWMgKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJ OTE1X0dFTV9ET01BSU5fUkVOREVSIHwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLAotCQkg IDAsIEJBU0VfQUREUkVTU19NT0RJRlkpOworCWludGVsX2JiX2VtaXRfcmVsb2MoaWJiLCBpYmIt PmhhbmRsZSwKKwkJCSAgICBJOTE1X0dFTV9ET01BSU5fUkVOREVSIHwgSTkxNV9HRU1fRE9NQUlO X0lOU1RSVUNUSU9OLCAwLAorCQkJICAgIEJBU0VfQUREUkVTU19NT0RJRlksIGliYi0+YmF0Y2hf b2Zmc2V0KTsKIAogCS8qIGluZGlyZWN0ICovCi0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgw KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIAogCS8q IGluc3RydWN0aW9uICovCi0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX0lO U1RSVUNUSU9OLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKwlpbnRlbF9iYl9lbWl0X3JlbG9j KGliYiwgaWJiLT5oYW5kbGUsCisJCQkgICAgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAw LAorCQkJICAgIEJBU0VfQUREUkVTU19NT0RJRlksIGliYi0+YmF0Y2hfb2Zmc2V0KTsKIAogCS8q IGdlbmVyYWwgc3RhdGUgYnVmZmVyIHNpemUgKi8KLQlPVVRfQkFUQ0goMHhmZmZmZjAwMCB8IDEp OworCWludGVsX2JiX291dChpYmIsIDB4ZmZmZmYwMDAgfCAxKTsKIAkvKiBkeW5hbWljIHN0YXRl IGJ1ZmZlciBzaXplICovCi0JT1VUX0JBVENIKDEgPDwgMTIgfCAxKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCAxIDw8IDEyIHwgMSk7CiAJLyogaW5kaXJlY3Qgb2JqZWN0IGJ1ZmZlciBzaXplICovCi0J T1VUX0JBVENIKDB4ZmZmZmYwMDAgfCAxKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAweGZmZmZmMDAw IHwgMSk7CiAJLyogaW50cnVjdGlvbiBidWZmZXIgc2l6ZSAqLwotCU9VVF9CQVRDSCgxIDw8IDEy IHwgMSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMSA8PCAxMiB8IDEpOwogCiAJLyogQmluZGxlc3Mg c3VyZmFjZSBzdGF0ZSBiYXNlIGFkZHJlc3MgKi8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENI KDApOwotCU9VVF9CQVRDSCgwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdl bjdfZW1pdF91cmIoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkgeworZ2VuN19lbWl0 X3VyYihzdHJ1Y3QgaW50ZWxfYmIgKmliYikgewogCS8qIFhYWDogTWluIHZhbGlkIHZhbHVlcyBm cm9tIG1lc2EgKi8KIAljb25zdCBpbnQgdnNfZW50cmllcyA9IDY0OwogCWNvbnN0IGludCB2c19z aXplID0gMjsKIAljb25zdCBpbnQgdnNfc3RhcnQgPSA0OwogCi0JT1VUX0JBVENIKEdFTjdfM0RT VEFURV9VUkJfVlMpOwotCU9VVF9CQVRDSCh2c19lbnRyaWVzIHwgKCh2c19zaXplIC0gMSkgPDwg MTYpIHwgKHZzX3N0YXJ0IDw8IDI1KSk7Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9VUkJfR1Mp OwotCU9VVF9CQVRDSCh2c19zdGFydCA8PCAyNSk7Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9V UkJfSFMpOwotCU9VVF9CQVRDSCh2c19zdGFydCA8PCAyNSk7Ci0JT1VUX0JBVENIKEdFTjdfM0RT VEFURV9VUkJfRFMpOwotCU9VVF9CQVRDSCh2c19zdGFydCA8PCAyNSk7CisJaW50ZWxfYmJfb3V0 KGliYiwgR0VON18zRFNUQVRFX1VSQl9WUyk7CisJaW50ZWxfYmJfb3V0KGliYiwgdnNfZW50cmll cyB8ICgodnNfc2l6ZSAtIDEpIDw8IDE2KSB8ICh2c19zdGFydCA8PCAyNSkpOworCWludGVsX2Ji X291dChpYmIsIEdFTjdfM0RTVEFURV9VUkJfR1MpOworCWludGVsX2JiX291dChpYmIsIHZzX3N0 YXJ0IDw8IDI1KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfVVJCX0hTKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCB2c19zdGFydCA8PCAyNSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VO N18zRFNUQVRFX1VSQl9EUyk7CisJaW50ZWxfYmJfb3V0KGliYiwgdnNfc3RhcnQgPDwgMjUpOwog fQogCiBzdGF0aWMgdm9pZAotZ2VuOF9lbWl0X2NjKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gpIHsKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX0JMRU5EX1NUQVRFX1BPSU5URVJTKTsK LQlPVVRfQkFUQ0goY2MuYmxlbmRfc3RhdGUgfCAxKTsKK2dlbjhfZW1pdF9jYyhzdHJ1Y3QgaW50 ZWxfYmIgKmliYikgeworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9CTEVORF9TVEFU RV9QT0lOVEVSUyk7CisJaW50ZWxfYmJfb3V0KGliYiwgY2MuYmxlbmRfc3RhdGUgfCAxKTsKIAot CU9VVF9CQVRDSChHRU42XzNEU1RBVEVfQ0NfU1RBVEVfUE9JTlRFUlMpOwotCU9VVF9CQVRDSChj Yy5jY19zdGF0ZSB8IDEpOworCWludGVsX2JiX291dChpYmIsIEdFTjZfM0RTVEFURV9DQ19TVEFU RV9QT0lOVEVSUyk7CisJaW50ZWxfYmJfb3V0KGliYiwgY2MuY2Nfc3RhdGUgfCAxKTsKIH0KIAog c3RhdGljIHZvaWQKLWdlbjhfZW1pdF9tdWx0aXNhbXBsZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoKSB7Ci0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9NVUxUSVNBTVBMRSB8IDApOwot CU9VVF9CQVRDSCgwKTsKK2dlbjhfZW1pdF9tdWx0aXNhbXBsZShzdHJ1Y3QgaW50ZWxfYmIgKmli YikgeworCWludGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9NVUxUSVNBTVBMRSB8IDApOwor CWludGVsX2JiX291dChpYmIsIDApOwogCi0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9TQU1QTEVf TUFTSyk7Ci0JT1VUX0JBVENIKDEpOworCWludGVsX2JiX291dChpYmIsIEdFTjZfM0RTVEFURV9T QU1QTEVfTUFTSyk7CisJaW50ZWxfYmJfb3V0KGliYiwgMSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1n ZW44X2VtaXRfdnMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkgewotCU9VVF9CQVRD SChHRU42XzNEU1RBVEVfQ09OU1RBTlRfVlMgfCAoMTEtMikpOwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0go MCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VU X0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfQklO RElOR19UQUJMRV9QT0lOVEVSU19WUyk7Ci0JT1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdF TjdfM0RTVEFURV9TQU1QTEVSX1NUQVRFX1BPSU5URVJTX1ZTKTsKLQlPVVRfQkFUQ0goMCk7Ci0K LQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX1ZTIHwgKDktMikpOwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0go MCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7CitnZW44 X2VtaXRfdnMoc3RydWN0IGludGVsX2JiICppYmIpIHsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42 XzNEU1RBVEVfQ09OU1RBTlRfVlMgfCAoMTEtMikpOworCWludGVsX2JiX291dChpYmIsIDApOwor CWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2Ji X291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIs IDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWlu dGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJf b3V0KGliYiwgR0VON18zRFNUQVRFX0JJTkRJTkdfVEFCTEVfUE9JTlRFUlNfVlMpOworCWludGVs X2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX1NBTVBM RVJfU1RBVEVfUE9JTlRFUlNfVlMpOworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxf YmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX1ZTIHwgKDktMikpOworCWludGVsX2JiX291dChpYmIs IDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWlu dGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291 dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDAp OwogfQogCiBzdGF0aWMgdm9pZAotZ2VuOF9lbWl0X2hzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gpIHsKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX0NPTlNUQU5UX0hTIHwgKDExLTIp KTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRf QkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7 Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQlPVVRf QkFUQ0goR0VON18zRFNUQVRFX0hTIHwgKDktMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFU Q0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0J T1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQlPVVRfQkFU Q0goR0VON18zRFNUQVRFX0JJTkRJTkdfVEFCTEVfUE9JTlRFUlNfSFMpOwotCU9VVF9CQVRDSCgw KTsKLQotCU9VVF9CQVRDSChHRU44XzNEU1RBVEVfU0FNUExFUl9TVEFURV9QT0lOVEVSU19IUyk7 Ci0JT1VUX0JBVENIKDApOworZ2VuOF9lbWl0X2hzKHN0cnVjdCBpbnRlbF9iYiAqaWJiKSB7CisJ aW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX0NPTlNUQU5UX0hTIHwgKDExLTIpKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCAwKTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9IUyB8ICg5LTIpKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9C SU5ESU5HX1RBQkxFX1BPSU5URVJTX0hTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKworCWlu dGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9TQU1QTEVSX1NUQVRFX1BPSU5URVJTX0hTKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjhfZW1pdF9ncyhz dHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKSB7Ci0JT1VUX0JBVENIKEdFTjZfM0RTVEFU RV9DT05TVEFOVF9HUyB8ICgxMS0yKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsK LQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFU Q0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0J T1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9HUyB8ICgxMC0yKSk7Ci0J T1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENI KDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9V VF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX0JJ TkRJTkdfVEFCTEVfUE9JTlRFUlNfR1MpOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChH RU43XzNEU1RBVEVfU0FNUExFUl9TVEFURV9QT0lOVEVSU19HUyk7Ci0JT1VUX0JBVENIKDApOwor Z2VuOF9lbWl0X2dzKHN0cnVjdCBpbnRlbF9iYiAqaWJiKSB7CisJaW50ZWxfYmJfb3V0KGliYiwg R0VONl8zRFNUQVRFX0NPTlNUQU5UX0dTIHwgKDExLTIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKworCWludGVs X2JiX291dChpYmIsIEdFTjZfM0RTVEFURV9HUyB8ICgxMC0yKSk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNE U1RBVEVfQklORElOR19UQUJMRV9QT0lOVEVSU19HUyk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7 CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfU0FNUExFUl9TVEFURV9QT0lOVEVS U19HUyk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW45X2Vt aXRfZHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkgewotCU9VVF9CQVRDSChHRU43 XzNEU1RBVEVfQ09OU1RBTlRfRFMgfCAoMTEtMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFU Q0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0J T1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENI KDApOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfRFMgfCAoMTEt MikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9V VF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgw KTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCU9V VF9CQVRDSChHRU43XzNEU1RBVEVfQklORElOR19UQUJMRV9QT0lOVEVSU19EUyk7Ci0JT1VUX0JB VENIKDApOwotCi0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9TQU1QTEVSX1NUQVRFX1BPSU5URVJT X0RTKTsKLQlPVVRfQkFUQ0goMCk7CitnZW45X2VtaXRfZHMoc3RydWN0IGludGVsX2JiICppYmIp IHsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfQ09OU1RBTlRfRFMgfCAoMTEtMikp OworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChp YmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwor CWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2Ji X291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX0RTIHwgKDEx LTIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9CSU5E SU5HX1RBQkxFX1BPSU5URVJTX0RTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKworCWludGVs X2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9TQU1QTEVSX1NUQVRFX1BPSU5URVJTX0RTKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0KIAogCiBzdGF0aWMgdm9pZAotZ2VuOF9lbWl0X3dtX2h6 X29wKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpIHsKLQlPVVRfQkFUQ0goR0VOOF8z RFNUQVRFX1dNX0haX09QIHwgKDUtMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7 Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKK2dlbjhfZW1pdF93bV9oel9vcChzdHJ1 Y3QgaW50ZWxfYmIgKmliYikgeworCWludGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9XTV9I Wl9PUCB8ICg1LTIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0K IAogc3RhdGljIHZvaWQKLWdlbjhfZW1pdF9udWxsX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gpIHsKLQlnZW44X2VtaXRfd21faHpfb3AoYmF0Y2gpOwotCWdlbjhfZW1pdF9o cyhiYXRjaCk7Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9URSB8ICg0LTIpKTsKLQlPVVRfQkFU Q0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlnZW44X2VtaXRfZ3MoYmF0 Y2gpOwotCWdlbjlfZW1pdF9kcyhiYXRjaCk7Ci0JZ2VuOF9lbWl0X3ZzKGJhdGNoKTsKK2dlbjhf ZW1pdF9udWxsX3N0YXRlKHN0cnVjdCBpbnRlbF9iYiAqaWJiKSB7CisJZ2VuOF9lbWl0X3dtX2h6 X29wKGliYik7CisJZ2VuOF9lbWl0X2hzKGliYik7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18z RFNUQVRFX1RFIHwgKDQtMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291 dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWdlbjhfZW1pdF9ncyhpYmIpOwor CWdlbjlfZW1pdF9kcyhpYmIpOworCWdlbjhfZW1pdF92cyhpYmIpOwogfQogCiBzdGF0aWMgdm9p ZAotZ2VuN19lbWl0X2NsaXAoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkgewotCU9V VF9CQVRDSChHRU42XzNEU1RBVEVfQ0xJUCB8ICg0IC0gMikpOwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goMCk7IC8qICBwYXNzLXRocm91Z2ggKi8KLQlPVVRfQkFUQ0goMCk7CitnZW43X2Vt aXRfY2xpcChzdHJ1Y3QgaW50ZWxfYmIgKmliYikgeworCWludGVsX2JiX291dChpYmIsIEdFTjZf M0RTVEFURV9DTElQIHwgKDQgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxf YmJfb3V0KGliYiwgMCk7IC8qICBwYXNzLXRocm91Z2ggKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjhfZW1pdF9zZihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoKQorZ2VuOF9lbWl0X3NmKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewogCWludCBp OwogCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9TQkUgfCAoNiAtIDIpKTsKLQlPVVRfQkFUQ0go MSA8PCBHRU43X1NCRV9OVU1fT1VUUFVUU19TSElGVCB8Ci0JCSAgR0VOOF9TQkVfRk9SQ0VfVVJC X0VOVFJZX1JFQURfTEVOR1RIIHwKLQkJICBHRU44X1NCRV9GT1JDRV9VUkJfRU5UUllfUkVBRF9P RkZTRVQgfAotCQkgIDEgPDwgR0VON19TQkVfVVJCX0VOVFJZX1JFQURfTEVOR1RIX1NISUZUIHwK LQkJICAxIDw8IEdFTjhfU0JFX1VSQl9FTlRSWV9SRUFEX09GRlNFVF9TSElGVCk7Ci0JT1VUX0JB VENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goR0VOOV9TQkVfQUNUSVZFX0NPTVBP TkVOVF9YWVpXIDw8IDApOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU44XzNEU1RB VEVfU0JFX1NXSVogfCAoMTEgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRF X1NCRSB8ICg2IC0gMikpOworCWludGVsX2JiX291dChpYmIsIDEgPDwgR0VON19TQkVfTlVNX09V VFBVVFNfU0hJRlQgfAorCQkgICAgIEdFTjhfU0JFX0ZPUkNFX1VSQl9FTlRSWV9SRUFEX0xFTkdU SCB8CisJCSAgICAgR0VOOF9TQkVfRk9SQ0VfVVJCX0VOVFJZX1JFQURfT0ZGU0VUIHwKKwkJICAg ICAxIDw8IEdFTjdfU0JFX1VSQl9FTlRSWV9SRUFEX0xFTkdUSF9TSElGVCB8CisJCSAgICAgMSA8 PCBHRU44X1NCRV9VUkJfRU5UUllfUkVBRF9PRkZTRVRfU0hJRlQpOworCWludGVsX2JiX291dChp YmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIEdFTjlf U0JFX0FDVElWRV9DT01QT05FTlRfWFlaVyA8PCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsK KworCWludGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9TQkVfU1dJWiB8ICgxMSAtIDIpKTsK IAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDAp OwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU44XzNEU1RBVEVfUkFTVEVSIHwgKDUg LSAyKSk7Ci0JT1VUX0JBVENIKEdFTjhfUkFTVEVSX0ZST05UX1dJTkRJTkdfQ0NXIHwgR0VOOF9S QVNURVJfQ1VMTF9OT05FKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9C QVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU42XzNEU1RBVEVfU0YgfCAoNCAtIDIpKTsKLQlPVVRf QkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKKwkJaW50ZWxfYmJfb3V0 KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7 CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU44XzNEU1RBVEVfUkFTVEVSIHwgKDUgLSAyKSk7CisJ aW50ZWxfYmJfb3V0KGliYiwgR0VOOF9SQVNURVJfRlJPTlRfV0lORElOR19DQ1cgfCBHRU44X1JB U1RFUl9DVUxMX05PTkUpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChp YmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VO Nl8zRFNUQVRFX1NGIHwgKDQgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxf YmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lk Ci1nZW44X2VtaXRfcHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qg a2VybmVsKSB7CitnZW44X2VtaXRfcHMoc3RydWN0IGludGVsX2JiICppYmIsIHVpbnQzMl90IGtl cm5lbCkgewogCWNvbnN0IGludCBtYXhfdGhyZWFkcyA9IDYzOwogCi0JT1VUX0JBVENIKEdFTjZf M0RTVEFURV9XTSB8ICgyIC0gMikpOwotCU9VVF9CQVRDSCgvKiBYWFg6IEkgZG9uJ3QgdW5kZXJz dGFuZCB0aGUgQkFSWUNFTlRSSUMgc3R1ZmYsIGJ1dCBpdAorCWludGVsX2JiX291dChpYmIsIEdF TjZfM0RTVEFURV9XTSB8ICgyIC0gMikpOworCWludGVsX2JiX291dChpYmIsIC8qIFhYWDogSSBk b24ndCB1bmRlcnN0YW5kIHRoZSBCQVJZQ0VOVFJJQyBzdHVmZiwgYnV0IGl0CiAJCSAgICogYXBw ZWFycyB3ZSBuZWVkIGl0IHRvIHB1dCBvdXIgc2V0dXAgZGF0YSBpbiB0aGUgcGxhY2Ugd2UKIAkJ ICAgKiBleHBlY3QgKGc2LCBzZWUgYmVsb3cpICovCi0JCSAgR0VOOF8zRFNUQVRFX1BTX1BFUlNQ RUNUSVZFX1BJWEVMX0JBUllDRU5UUklDKTsKLQotCU9VVF9CQVRDSChHRU42XzNEU1RBVEVfQ09O U1RBTlRfUFMgfCAoMTEtMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VU X0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDAp OwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9C QVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfUFMgfCAoMTItMikpOwotCU9VVF9C QVRDSChrZXJuZWwpOwotCU9VVF9CQVRDSCgwKTsgLyoga2VybmVsIGhpICovCi0JT1VUX0JBVENI KDEgPDwgR0VONl8zRFNUQVRFX1dNX1NBTVBMRVJfQ09VTlRfU0hJRlQgfAotCQkgIDIgPDwgR0VO Nl8zRFNUQVRFX1dNX0JJTkRJTkdfVEFCTEVfRU5UUllfQ09VTlRfU0hJRlQpOwotCU9VVF9CQVRD SCgwKTsgLyogc2NyYXRjaCBzcGFjZSBzdHVmZiAqLwotCU9VVF9CQVRDSCgwKTsgLyogc2NyYXRj aCBoaSAqLwotCU9VVF9CQVRDSCgobWF4X3RocmVhZHMgLSAxKSA8PCBHRU44XzNEU1RBVEVfUFNf TUFYX1RIUkVBRFNfU0hJRlQgfAotCQkgIEdFTjZfM0RTVEFURV9XTV8xNl9ESVNQQVRDSF9FTkFC TEUpOwotCU9VVF9CQVRDSCg2IDw8IEdFTjZfM0RTVEFURV9XTV9ESVNQQVRDSF9TVEFSVF9HUkZf MF9TSElGVCk7Ci0JT1VUX0JBVENIKDApOyAvLyBrZXJuZWwgMQotCU9VVF9CQVRDSCgwKTsgLyog a2VybmVsIDEgaGkgKi8KLQlPVVRfQkFUQ0goMCk7IC8vIGtlcm5lbCAyCi0JT1VUX0JBVENIKDAp OyAvKiBrZXJuZWwgMiBoaSAqLwotCi0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9QU19CTEVORCB8 ICgyIC0gMikpOwotCU9VVF9CQVRDSChHRU44X1BTX0JMRU5EX0hBU19XUklURUFCTEVfUlQpOwot Ci0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9QU19FWFRSQSB8ICgyIC0gMikpOwotCU9VVF9CQVRD SChHRU44X1BTWF9QSVhFTF9TSEFERVJfVkFMSUQgfCBHRU44X1BTWF9BVFRSSUJVVEVfRU5BQkxF KTsKKwkJICAgICBHRU44XzNEU1RBVEVfUFNfUEVSU1BFQ1RJVkVfUElYRUxfQkFSWUNFTlRSSUMp OworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX0NPTlNUQU5UX1BTIHwgKDExLTIp KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9QUyB8ICgx Mi0yKSk7CisJaW50ZWxfYmJfb3V0KGliYiwga2VybmVsKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsgLyoga2VybmVsIGhpICovCisJaW50ZWxfYmJfb3V0KGliYiwgMSA8PCBHRU42XzNEU1RBVEVf V01fU0FNUExFUl9DT1VOVF9TSElGVCB8CisJCSAgICAgMiA8PCBHRU42XzNEU1RBVEVfV01fQklO RElOR19UQUJMRV9FTlRSWV9DT1VOVF9TSElGVCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8q IHNjcmF0Y2ggc3BhY2Ugc3R1ZmYgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogc2NyYXRj aCBoaSAqLworCWludGVsX2JiX291dChpYmIsIChtYXhfdGhyZWFkcyAtIDEpIDw8IEdFTjhfM0RT VEFURV9QU19NQVhfVEhSRUFEU19TSElGVCB8CisJCSAgICAgR0VONl8zRFNUQVRFX1dNXzE2X0RJ U1BBVENIX0VOQUJMRSk7CisJaW50ZWxfYmJfb3V0KGliYiwgNiA8PCBHRU42XzNEU1RBVEVfV01f RElTUEFUQ0hfU1RBUlRfR1JGXzBfU0hJRlQpOworCWludGVsX2JiX291dChpYmIsIDApOyAvLyBr ZXJuZWwgMQorCWludGVsX2JiX291dChpYmIsIDApOyAvKiBrZXJuZWwgMSBoaSAqLworCWludGVs X2JiX291dChpYmIsIDApOyAvLyBrZXJuZWwgMgorCWludGVsX2JiX291dChpYmIsIDApOyAvKiBr ZXJuZWwgMiBoaSAqLworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNUQVRFX1BTX0JMRU5E IHwgKDIgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF9QU19CTEVORF9IQVNfV1JJVEVB QkxFX1JUKTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9QU19FWFRSQSB8ICgy IC0gMikpOworCWludGVsX2JiX291dChpYmIsIEdFTjhfUFNYX1BJWEVMX1NIQURFUl9WQUxJRCB8 IEdFTjhfUFNYX0FUVFJJQlVURV9FTkFCTEUpOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuOV9lbWl0 X2RlcHRoKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW45X2VtaXRfZGVwdGgo c3RydWN0IGludGVsX2JiICppYmIpCiB7Ci0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9XTV9ERVBU SF9TVEVOQ0lMIHwgKDQgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goMCk7Ci0KLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX0RFUFRIX0JVRkZFUiB8ICg4 LTIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0go MCk7Ci0KLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRFX0hJRVJfREVQVEhfQlVGRkVSIHwgKDUtMikp OwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9C QVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU44XzNEU1RBVEVfU1RFTkNJTF9CVUZGRVIgfCAoNS0y KSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VU X0JBVENIKDApOworCWludGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9XTV9ERVBUSF9TVEVO Q0lMIHwgKDQgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43 XzNEU1RBVEVfREVQVEhfQlVGRkVSIHwgKDgtMikpOworCWludGVsX2JiX291dChpYmIsIDApOwor CWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2Ji X291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIs IDApOworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF8z RFNUQVRFX0hJRVJfREVQVEhfQlVGRkVSIHwgKDUtMikpOworCWludGVsX2JiX291dChpYmIsIDAp OworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNUQVRFX1NURU5D SUxfQlVGRkVSIHwgKDUtMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291 dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDAp OwogfQogCiBzdGF0aWMgdm9pZAotZ2VuN19lbWl0X2NsZWFyKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gpIHsKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX0NMRUFSX1BBUkFNUyB8ICgz LTIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDEpOyAvLyBjbGVhciB2YWxpZAorZ2Vu N19lbWl0X2NsZWFyKHN0cnVjdCBpbnRlbF9iYiAqaWJiKSB7CisJaW50ZWxfYmJfb3V0KGliYiwg R0VON18zRFNUQVRFX0NMRUFSX1BBUkFNUyB8ICgzLTIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAxKTsgLy8gY2xlYXIgdmFsaWQKIH0KIAogc3RhdGljIHZv aWQKLWdlbjZfZW1pdF9kcmF3aW5nX3JlY3RhbmdsZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLCBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0KQorZ2VuNl9lbWl0X2RyYXdpbmdfcmVj dGFuZ2xlKHN0cnVjdCBpbnRlbF9iYiAqaWJiLCBjb25zdCBzdHJ1Y3QgaW50ZWxfYnVmICpkc3Qp CiB7Ci0JT1VUX0JBVENIKEdFTjRfM0RTVEFURV9EUkFXSU5HX1JFQ1RBTkdMRSB8ICg0IC0gMikp OwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goKGlndF9idWZfaGVpZ2h0KGRzdCkgLSAxKSA8 PCAxNiB8IChpZ3RfYnVmX3dpZHRoKGRzdCkgLSAxKSk7Ci0JT1VUX0JBVENIKDApOworCWludGVs X2JiX291dChpYmIsIEdFTjRfM0RTVEFURV9EUkFXSU5HX1JFQ1RBTkdMRSB8ICg0IC0gMikpOwor CWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIChpbnRlbF9idWZfaGVp Z2h0KGRzdCkgLSAxKSA8PCAxNiB8IChpbnRlbF9idWZfd2lkdGgoZHN0KSAtIDEpKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsKIH0KIAotc3RhdGljIHZvaWQgZ2VuOF9lbWl0X3ZmX3RvcG9sb2d5 KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitzdGF0aWMgdm9pZCBnZW44X2VtaXRf dmZfdG9wb2xvZ3koc3RydWN0IGludGVsX2JiICppYmIpCiB7Ci0JT1VUX0JBVENIKEdFTjhfM0RT VEFURV9WRl9UT1BPTE9HWSk7Ci0JT1VUX0JBVENIKF8zRFBSSU1fUkVDVExJU1QpOworCWludGVs X2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9WRl9UT1BPTE9HWSk7CisJaW50ZWxfYmJfb3V0KGli YiwgXzNEUFJJTV9SRUNUTElTVCk7CiB9CiAKIC8qIFZlcnRleCBlbGVtZW50cyBNVVNUIGJlIGRl ZmluZWQgYmVmb3JlIHRoaXMgYWNjb3JkaW5nIHRvIHNwZWMgKi8KLXN0YXRpYyB2b2lkIGdlbjhf ZW1pdF9wcmltaXRpdmUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qg b2Zmc2V0KQorc3RhdGljIHZvaWQgZ2VuOF9lbWl0X3ByaW1pdGl2ZShzdHJ1Y3QgaW50ZWxfYmIg KmliYiwgdWludDMyX3Qgb2Zmc2V0KQogewotCU9VVF9CQVRDSChHRU44XzNEU1RBVEVfVkYgfCAo MiAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRFX1ZGX0lO U1RBTkNJTkcgfCAoMyAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCi0J T1VUX0JBVENIKEdFTjRfM0RQUklNSVRJVkUgfCAoNy0yKSk7Ci0JT1VUX0JBVENIKDApOwkvKiBn ZW44KyBpZ25vcmUgdGhlIHRvcG9sb2d5IHR5cGUgZmllbGQgKi8KLQlPVVRfQkFUQ0goMyk7CS8q IHZlcnRleCBjb3VudCAqLwotCU9VVF9CQVRDSCgwKTsJLyogIFdlJ3JlIHNwZWNpZnlpbmcgdGhp cyBpbnN0ZWFkIHdpdGggb2Zmc2V0IGluIEdFTjZfM0RTVEFURV9WRVJURVhfQlVGRkVSUyAqLwot CU9VVF9CQVRDSCgxKTsJLyogc2luZ2xlIGluc3RhbmNlICovCi0JT1VUX0JBVENIKDApOwkvKiBz dGFydCBpbnN0YW5jZSBsb2NhdGlvbiAqLwotCU9VVF9CQVRDSCgwKTsJLyogaW5kZXggYnVmZmVy IG9mZnNldCwgaWdub3JlZCAqLworCWludGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9WRiB8 ICgyIC0gMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwg R0VOOF8zRFNUQVRFX1ZGX0lOU1RBTkNJTkcgfCAoMyAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjRf M0RQUklNSVRJVkUgfCAoNy0yKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CS8qIGdlbjgrIGln bm9yZSB0aGUgdG9wb2xvZ3kgdHlwZSBmaWVsZCAqLworCWludGVsX2JiX291dChpYmIsIDMpOwkv KiB2ZXJ0ZXggY291bnQgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsJLyogIFdlJ3JlIHNwZWNp ZnlpbmcgdGhpcyBpbnN0ZWFkIHdpdGggb2Zmc2V0IGluIEdFTjZfM0RTVEFURV9WRVJURVhfQlVG RkVSUyAqLworCWludGVsX2JiX291dChpYmIsIDEpOwkvKiBzaW5nbGUgaW5zdGFuY2UgKi8KKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsJLyogc3RhcnQgaW5zdGFuY2UgbG9jYXRpb24gKi8KKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsJLyogaW5kZXggYnVmZmVyIG9mZnNldCwgaWdub3JlZCAqLwogfQog CiAvKiBUaGUgZ2VuZXJhbCBydWxlIGlzIGlmIGl0J3MgbmFtZWQgZ2VuNiBpdCBpcyBkaXJlY3Rs eSBjb3BpZWQgZnJvbQpAQCAtOTkwLDE2NiArODc2LDE1OSBAQCBzdGF0aWMgdm9pZCBnZW44X2Vt aXRfcHJpbWl0aXZlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IG9m ZnNldAogI2RlZmluZSBCQVRDSF9TVEFURV9TUExJVCAyMDQ4CiAKIHN0YXRpYwotdm9pZCBfZ2Vu OV9yZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAg ZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQsCi0JCQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpz cmMsIHVuc2lnbmVkIHNyY194LAotCQkJICB1bnNpZ25lZCBzcmNfeSwgdW5zaWduZWQgd2lkdGgs IHVuc2lnbmVkIGhlaWdodCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCwgdW5zaWdu ZWQgZHN0X3gsCi0JCQkgIHVuc2lnbmVkIGRzdF95LAotCQkJICBkcm1faW50ZWxfYm8gKmF1eF9w Z3RhYmxlX2JvLAotCQkJICBjb25zdCB1aW50MzJfdCBwc19rZXJuZWxbXVs0XSwKLQkJCSAgdWlu dDMyX3QgcHNfa2VybmVsX3NpemUpCit2b2lkIF9nZW45X3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3Qg aW50ZWxfYmIgKmliYiwKKwkJCSAgIHVpbnQzMl90IGN0eCwKKwkJCSAgIHN0cnVjdCBpbnRlbF9i dWYgKnNyYywKKwkJCSAgIHVuc2lnbmVkIGludCBzcmNfeCwgdW5zaWduZWQgaW50IHNyY195LAor CQkJICAgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LAorCQkJICAgc3Ry dWN0IGludGVsX2J1ZiAqZHN0LAorCQkJICAgdW5zaWduZWQgaW50IGRzdF94LCB1bnNpZ25lZCBp bnQgZHN0X3ksCisJCQkgICBzdHJ1Y3QgaW50ZWxfYnVmICphdXhfcGd0YWJsZV9idWYsCisJCQkg ICBjb25zdCB1aW50MzJfdCBwc19rZXJuZWxbXVs0XSwKKwkJCSAgIHVpbnQzMl90IHBzX2tlcm5l bF9zaXplKQogewogCXVpbnQzMl90IHBzX3NhbXBsZXJfc3RhdGUsIHBzX2tlcm5lbF9vZmYsIHBz X2JpbmRpbmdfdGFibGU7CiAJdWludDMyX3Qgc2Npc3Nvcl9zdGF0ZTsKIAl1aW50MzJfdCB2ZXJ0 ZXhfYnVmZmVyOwotCXVpbnQzMl90IGJhdGNoX2VuZDsKIAl1aW50MzJfdCBhdXhfcGd0YWJsZV9z dGF0ZTsKIAogCWlndF9hc3NlcnQoc3JjLT5icHAgPT0gZHN0LT5icHApOwotCWludGVsX2JhdGNo YnVmZmVyX2ZsdXNoX3dpdGhfY29udGV4dChiYXRjaCwgY29udGV4dCk7CiAKLQlpbnRlbF9iYXRj aGJ1ZmZlcl9hbGlnbihiYXRjaCwgOCk7CisJaW50ZWxfYmJfZmx1c2hfcmVuZGVyX3dpdGhfY29u dGV4dChpYmIsIGN0eCk7CiAKLQliYXRjaC0+cHRyID0gJmJhdGNoLT5idWZmZXJbQkFUQ0hfU1RB VEVfU1BMSVRdOworCWludGVsX2JiX2FkZF9pbnRlbF9idWYoaWJiLCBkc3QsIHRydWUpOworCWlu dGVsX2JiX2FkZF9pbnRlbF9idWYoaWJiLCBzcmMsIGZhbHNlKTsKIAotCWFubm90YXRpb25faW5p dCgmYXViX2Fubm90YXRpb25zKTsKKwlpbnRlbF9iYl9wdHJfc2V0KGliYiwgQkFUQ0hfU1RBVEVf U1BMSVQpOwogCi0JcHNfYmluZGluZ190YWJsZSAgPSBnZW44X2JpbmRfc3VyZmFjZXMoYmF0Y2gs IHNyYywgZHN0KTsKLQlwc19zYW1wbGVyX3N0YXRlICA9IGdlbjhfY3JlYXRlX3NhbXBsZXIoYmF0 Y2gpOwotCXBzX2tlcm5lbF9vZmYgPSBnZW44X2ZpbGxfcHMoYmF0Y2gsIHBzX2tlcm5lbCwgcHNf a2VybmVsX3NpemUpOwotCXZlcnRleF9idWZmZXIgPSBnZW43X2ZpbGxfdmVydGV4X2J1ZmZlcl9k YXRhKGJhdGNoLCBzcmMsCisJcHNfYmluZGluZ190YWJsZSAgPSBnZW44X2JpbmRfc3VyZmFjZXMo aWJiLCBzcmMsIGRzdCk7CisJcHNfc2FtcGxlcl9zdGF0ZSAgPSBnZW44X2NyZWF0ZV9zYW1wbGVy KGliYik7CisJcHNfa2VybmVsX29mZiA9IGdlbjhfZmlsbF9wcyhpYmIsIHBzX2tlcm5lbCwgcHNf a2VybmVsX3NpemUpOworCXZlcnRleF9idWZmZXIgPSBnZW43X2ZpbGxfdmVydGV4X2J1ZmZlcl9k YXRhKGliYiwgc3JjLAogCQkJCQkJICAgICBzcmNfeCwgc3JjX3ksCiAJCQkJCQkgICAgIGRzdF94 LCBkc3RfeSwKIAkJCQkJCSAgICAgd2lkdGgsIGhlaWdodCk7Ci0JY2MuY2Nfc3RhdGUgPSBnZW42 X2NyZWF0ZV9jY19zdGF0ZShiYXRjaCk7Ci0JY2MuYmxlbmRfc3RhdGUgPSBnZW44X2NyZWF0ZV9i bGVuZF9zdGF0ZShiYXRjaCk7Ci0Jdmlld3BvcnQuY2Nfc3RhdGUgPSBnZW42X2NyZWF0ZV9jY192 aWV3cG9ydChiYXRjaCk7Ci0Jdmlld3BvcnQuc2ZfY2xpcF9zdGF0ZSA9IGdlbjdfY3JlYXRlX3Nm X2NsaXBfdmlld3BvcnQoYmF0Y2gpOwotCXNjaXNzb3Jfc3RhdGUgPSBnZW42X2NyZWF0ZV9zY2lz c29yX3JlY3QoYmF0Y2gpOwotCi0JYXV4X3BndGFibGVfc3RhdGUgPSBnZW4xMl9jcmVhdGVfYXV4 X3BndGFibGVfc3RhdGUoYmF0Y2gsCi0JCQkJCQkJICAgYXV4X3BndGFibGVfYm8pOwotCi0JLyog VE9ETzogdGhlcmVlIGlzIG90aGVyIHN0YXRlIHdoaWNoIGlzbid0IHNldHVwICovCisJY2MuY2Nf c3RhdGUgPSBnZW42X2NyZWF0ZV9jY19zdGF0ZShpYmIpOworCWNjLmJsZW5kX3N0YXRlID0gZ2Vu OF9jcmVhdGVfYmxlbmRfc3RhdGUoaWJiKTsKKwl2aWV3cG9ydC5jY19zdGF0ZSA9IGdlbjZfY3Jl YXRlX2NjX3ZpZXdwb3J0KGliYik7CisJdmlld3BvcnQuc2ZfY2xpcF9zdGF0ZSA9IGdlbjdfY3Jl YXRlX3NmX2NsaXBfdmlld3BvcnQoaWJiKTsKKwlzY2lzc29yX3N0YXRlID0gZ2VuNl9jcmVhdGVf c2Npc3Nvcl9yZWN0KGliYik7CisJYXV4X3BndGFibGVfc3RhdGUgPSBnZW4xMl9jcmVhdGVfYXV4 X3BndGFibGVfc3RhdGUoaWJiLCBhdXhfcGd0YWJsZV9idWYpOwogCi0JYXNzZXJ0KGJhdGNoLT5w dHIgPCAmYmF0Y2gtPmJ1ZmZlcls0MDk1XSk7Ci0KLQliYXRjaC0+cHRyID0gYmF0Y2gtPmJ1ZmZl cjsKKwkvKiBUT0RPOiB0aGVyZSBpcyBvdGhlciBzdGF0ZSB3aGljaCBpc24ndCBzZXR1cCAqLwor CWludGVsX2JiX3B0cl9zZXQoaWJiLCAwKTsKIAogCS8qIFN0YXJ0IGVtaXR0aW5nIHRoZSBjb21t YW5kcy4gVGhlIG9yZGVyIHJvdWdobHkgZm9sbG93cyB0aGUgbWVzYSBibG9ycAogCSAqIG9yZGVy ICovCi0JT1VUX0JBVENIKEc0WF9QSVBFTElORV9TRUxFQ1QgfCBQSVBFTElORV9TRUxFQ1RfM0Qg fAotCQkJCUdFTjlfUElQRUxJTkVfU0VMRUNUSU9OX01BU0spOwotCi0JZ2VuMTJfZW1pdF9hdXhf cGd0YWJsZV9zdGF0ZShiYXRjaCwgYXV4X3BndGFibGVfc3RhdGUsIHRydWUpOwotCi0JZ2VuOF9l bWl0X3NpcChiYXRjaCk7Ci0KLQlnZW43X2VtaXRfcHVzaF9jb25zdGFudHMoYmF0Y2gpOworCWlu dGVsX2JiX291dChpYmIsIEc0WF9QSVBFTElORV9TRUxFQ1QgfCBQSVBFTElORV9TRUxFQ1RfM0Qg fAorCQkgICAgIEdFTjlfUElQRUxJTkVfU0VMRUNUSU9OX01BU0spOwogCi0JZ2VuOV9lbWl0X3N0 YXRlX2Jhc2VfYWRkcmVzcyhiYXRjaCk7CisJZ2VuMTJfZW1pdF9hdXhfcGd0YWJsZV9zdGF0ZShp YmIsIGF1eF9wZ3RhYmxlX3N0YXRlLCB0cnVlKTsKIAotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVf VklFV1BPUlRfU1RBVEVfUE9JTlRFUlNfQ0MpOwotCU9VVF9CQVRDSCh2aWV3cG9ydC5jY19zdGF0 ZSk7Ci0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9WSUVXUE9SVF9TVEFURV9QT0lOVEVSU19TRl9D TElQKTsKLQlPVVRfQkFUQ0godmlld3BvcnQuc2ZfY2xpcF9zdGF0ZSk7CisJZ2VuOF9lbWl0X3Np cChpYmIpOwogCi0JZ2VuN19lbWl0X3VyYihiYXRjaCk7CisJZ2VuN19lbWl0X3B1c2hfY29uc3Rh bnRzKGliYik7CiAKLQlnZW44X2VtaXRfY2MoYmF0Y2gpOworCWdlbjlfZW1pdF9zdGF0ZV9iYXNl X2FkZHJlc3MoaWJiKTsKIAotCWdlbjhfZW1pdF9tdWx0aXNhbXBsZShiYXRjaCk7CisJaW50ZWxf YmJfb3V0KGliYiwgR0VON18zRFNUQVRFX1ZJRVdQT1JUX1NUQVRFX1BPSU5URVJTX0NDKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCB2aWV3cG9ydC5jY19zdGF0ZSk7CisJaW50ZWxfYmJfb3V0KGliYiwg R0VOOF8zRFNUQVRFX1ZJRVdQT1JUX1NUQVRFX1BPSU5URVJTX1NGX0NMSVApOworCWludGVsX2Ji X291dChpYmIsIHZpZXdwb3J0LnNmX2NsaXBfc3RhdGUpOwogCi0JZ2VuOF9lbWl0X251bGxfc3Rh dGUoYmF0Y2gpOworCWdlbjdfZW1pdF91cmIoaWJiKTsKIAotCU9VVF9CQVRDSChHRU43XzNEU1RB VEVfU1RSRUFNT1VUIHwgKDUgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsK LQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOworCWdlbjhfZW1pdF9jYyhpYmIpOwogCi0J Z2VuN19lbWl0X2NsaXAoYmF0Y2gpOworCWdlbjhfZW1pdF9tdWx0aXNhbXBsZShpYmIpOwogCi0J Z2VuOF9lbWl0X3NmKGJhdGNoKTsKKwlnZW44X2VtaXRfbnVsbF9zdGF0ZShpYmIpOwogCi0JZ2Vu OF9lbWl0X3BzKGJhdGNoLCBwc19rZXJuZWxfb2ZmKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43 XzNEU1RBVEVfU1RSRUFNT1VUIHwgKDUgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CiAKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX0JJTkRJTkdfVEFCTEVfUE9J TlRFUlNfUFMpOwotCU9VVF9CQVRDSChwc19iaW5kaW5nX3RhYmxlKTsKKwlnZW43X2VtaXRfY2xp cChpYmIpOwogCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9TQU1QTEVSX1NUQVRFX1BPSU5URVJT X1BTKTsKLQlPVVRfQkFUQ0gocHNfc2FtcGxlcl9zdGF0ZSk7CisJZ2VuOF9lbWl0X3NmKGliYik7 CiAKLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRFX1NDSVNTT1JfU1RBVEVfUE9JTlRFUlMpOwotCU9V VF9CQVRDSChzY2lzc29yX3N0YXRlKTsKKwlnZW44X2VtaXRfcHMoaWJiLCBwc19rZXJuZWxfb2Zm KTsKIAotCWdlbjlfZW1pdF9kZXB0aChiYXRjaCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18z RFNUQVRFX0JJTkRJTkdfVEFCTEVfUE9JTlRFUlNfUFMpOworCWludGVsX2JiX291dChpYmIsIHBz X2JpbmRpbmdfdGFibGUpOwogCi0JZ2VuN19lbWl0X2NsZWFyKGJhdGNoKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCBHRU43XzNEU1RBVEVfU0FNUExFUl9TVEFURV9QT0lOVEVSU19QUyk7CisJaW50ZWxf YmJfb3V0KGliYiwgcHNfc2FtcGxlcl9zdGF0ZSk7CiAKLQlnZW42X2VtaXRfZHJhd2luZ19yZWN0 YW5nbGUoYmF0Y2gsIGRzdCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNUQVRFX1NDSVNT T1JfU1RBVEVfUE9JTlRFUlMpOworCWludGVsX2JiX291dChpYmIsIHNjaXNzb3Jfc3RhdGUpOwog Ci0JZ2VuN19lbWl0X3ZlcnRleF9idWZmZXIoYmF0Y2gsIHZlcnRleF9idWZmZXIpOwotCWdlbjZf ZW1pdF92ZXJ0ZXhfZWxlbWVudHMoYmF0Y2gpOworCWdlbjlfZW1pdF9kZXB0aChpYmIpOwogCi0J Z2VuOF9lbWl0X3ZmX3RvcG9sb2d5KGJhdGNoKTsKLQlnZW44X2VtaXRfcHJpbWl0aXZlKGJhdGNo LCB2ZXJ0ZXhfYnVmZmVyKTsKKwlnZW43X2VtaXRfY2xlYXIoaWJiKTsKIAotCU9VVF9CQVRDSChN SV9CQVRDSF9CVUZGRVJfRU5EKTsKKwlnZW42X2VtaXRfZHJhd2luZ19yZWN0YW5nbGUoaWJiLCBk c3QpOwogCi0JYmF0Y2hfZW5kID0gaW50ZWxfYmF0Y2hidWZmZXJfYWxpZ24oYmF0Y2gsIDgpOwot CWFzc2VydChiYXRjaF9lbmQgPCBCQVRDSF9TVEFURV9TUExJVCk7Ci0JYW5ub3RhdGlvbl9hZGRf YmF0Y2goJmF1Yl9hbm5vdGF0aW9ucywgYmF0Y2hfZW5kKTsKKwlnZW43X2VtaXRfdmVydGV4X2J1 ZmZlcihpYmIsIHZlcnRleF9idWZmZXIpOworCWdlbjZfZW1pdF92ZXJ0ZXhfZWxlbWVudHMoaWJi KTsKIAotCWR1bXBfYmF0Y2goYmF0Y2gpOworCWdlbjhfZW1pdF92Zl90b3BvbG9neShpYmIpOwor CWdlbjhfZW1pdF9wcmltaXRpdmUoaWJiLCB2ZXJ0ZXhfYnVmZmVyKTsKIAotCWFubm90YXRpb25f Zmx1c2goJmF1Yl9hbm5vdGF0aW9ucywgYmF0Y2gpOwotCi0JZ2VuNl9yZW5kZXJfZmx1c2goYmF0 Y2gsIGNvbnRleHQsIGJhdGNoX2VuZCk7Ci0JaW50ZWxfYmF0Y2hidWZmZXJfcmVzZXQoYmF0Y2gp OworCWludGVsX2JiX2VtaXRfYmJlKGliYik7CisJaW50ZWxfYmJfZXhlY193aXRoX2NvbnRleHQo aWJiLCBpbnRlbF9iYl9vZmZzZXQoaWJiKSwgY3R4LAorCQkJCSAgIEk5MTVfRVhFQ19SRU5ERVIg fCBJOTE1X0VYRUNfTk9fUkVMT0MsCisJCQkJICAgZmFsc2UpOworCWR1bXBfYmF0Y2goaWJiKTsK KwlpbnRlbF9iYl9yZXNldChpYmIsIGZhbHNlKTsKIH0KIAotdm9pZCBnZW45X3JlbmRlcl9jb3B5 ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJICBkcm1faW50ZWxfY29u dGV4dCAqY29udGV4dCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKnNyYywgdW5zaWduZWQg c3JjX3gsIHVuc2lnbmVkIHNyY195LAotCQkJICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVp Z2h0LAotCQkJICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0LCB1bnNpZ25lZCBkc3RfeCwgdW5z aWduZWQgZHN0X3kpCit2b2lkIGdlbjlfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYiAq aWJiLAorCQkJICB1aW50MzJfdCBjdHgsCisJCQkgIHN0cnVjdCBpbnRlbF9idWYgKnNyYywKKwkJ CSAgdW5zaWduZWQgaW50IHNyY194LCB1bnNpZ25lZCBpbnQgc3JjX3ksCisJCQkgIHVuc2lnbmVk IGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCwKKwkJCSAgc3RydWN0IGludGVsX2J1ZiAq ZHN0LAorCQkJICB1bnNpZ25lZCBpbnQgZHN0X3gsIHVuc2lnbmVkIGludCBkc3RfeSkKIAogewot CV9nZW45X3JlbmRlcl9jb3B5ZnVuYyhiYXRjaCwgY29udGV4dCwgc3JjLCBzcmNfeCwgc3JjX3ks CisJX2dlbjlfcmVuZGVyX2NvcHlmdW5jKGliYiwgY3R4LCBzcmMsIHNyY194LCBzcmNfeSwKIAkJ CSAgd2lkdGgsIGhlaWdodCwgZHN0LCBkc3RfeCwgZHN0X3ksIE5VTEwsCiAJCQkgIHBzX2tlcm5l bF9nZW45LCBzaXplb2YocHNfa2VybmVsX2dlbjkpKTsKIH0KIAotdm9pZCBnZW4xMV9yZW5kZXJf Y29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgZHJtX2ludGVs X2NvbnRleHQgKmNvbnRleHQsCi0JCQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2ln bmVkIHNyY194LCB1bnNpZ25lZCBzcmNfeSwKLQkJCSAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVk IGhlaWdodCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCwgdW5zaWduZWQgZHN0X3gs IHVuc2lnbmVkIGRzdF95KQotCit2b2lkIGdlbjExX3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50 ZWxfYmIgKmliYiwKKwkJCSAgIHVpbnQzMl90IGN0eCwKKwkJCSAgIHN0cnVjdCBpbnRlbF9idWYg KnNyYywKKwkJCSAgIHVuc2lnbmVkIGludCBzcmNfeCwgdW5zaWduZWQgaW50IHNyY195LAorCQkJ ICAgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LAorCQkJICAgc3RydWN0 IGludGVsX2J1ZiAqZHN0LAorCQkJICAgdW5zaWduZWQgaW50IGRzdF94LCB1bnNpZ25lZCBpbnQg ZHN0X3kpCiB7Ci0JX2dlbjlfcmVuZGVyX2NvcHlmdW5jKGJhdGNoLCBjb250ZXh0LCBzcmMsIHNy Y194LCBzcmNfeSwKKwlfZ2VuOV9yZW5kZXJfY29weWZ1bmMoaWJiLCBjdHgsIHNyYywgc3JjX3gs IHNyY195LAogCQkJICB3aWR0aCwgaGVpZ2h0LCBkc3QsIGRzdF94LCBkc3RfeSwgTlVMTCwKIAkJ CSAgcHNfa2VybmVsX2dlbjExLCBzaXplb2YocHNfa2VybmVsX2dlbjExKSk7CiB9CiAKLXZvaWQg Z2VuMTJfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0J CQkgICBkcm1faW50ZWxfY29udGV4dCAqY29udGV4dCwKLQkJCSAgIGNvbnN0IHN0cnVjdCBpZ3Rf YnVmICpzcmMsIHVuc2lnbmVkIHNyY194LCB1bnNpZ25lZCBzcmNfeSwKLQkJCSAgIHVuc2lnbmVk IHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsCi0JCQkgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0 LCB1bnNpZ25lZCBkc3RfeCwgdW5zaWduZWQgZHN0X3kpCi0KK3ZvaWQgZ2VuMTJfcmVuZGVyX2Nv cHlmdW5jKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJICAgdWludDMyX3QgY3R4LAorCQkJICAg c3RydWN0IGludGVsX2J1ZiAqc3JjLAorCQkJICAgdW5zaWduZWQgaW50IHNyY194LCB1bnNpZ25l ZCBpbnQgc3JjX3ksCisJCQkgICB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWln aHQsCisJCQkgICBzdHJ1Y3QgaW50ZWxfYnVmICpkc3QsCisJCQkgICB1bnNpZ25lZCBpbnQgZHN0 X3gsIHVuc2lnbmVkIGludCBkc3RfeSkKIHsKIAlzdHJ1Y3QgYXV4X3BndGFibGVfaW5mbyBwZ3Rh YmxlX2luZm8gPSB7IH07CiAKLQlnZW4xMl9hdXhfcGd0YWJsZV9pbml0KCZwZ3RhYmxlX2luZm8s IGJhdGNoLT5idWZtZ3IsIHNyYywgZHN0KTsKKwlnZW4xMl9hdXhfcGd0YWJsZV9pbml0KCZwZ3Rh YmxlX2luZm8sIGliYiwgc3JjLCBkc3QpOwogCi0JX2dlbjlfcmVuZGVyX2NvcHlmdW5jKGJhdGNo LCBjb250ZXh0LCBzcmMsIHNyY194LCBzcmNfeSwKKwlfZ2VuOV9yZW5kZXJfY29weWZ1bmMoaWJi LCBjdHgsIHNyYywgc3JjX3gsIHNyY195LAogCQkJICB3aWR0aCwgaGVpZ2h0LCBkc3QsIGRzdF94 LCBkc3RfeSwKLQkJCSAgcGd0YWJsZV9pbmZvLnBndGFibGVfYm8sCisJCQkgIHBndGFibGVfaW5m by5wZ3RhYmxlX2J1ZiwKIAkJCSAgZ2VuMTJfcmVuZGVyX2NvcHksCiAJCQkgIHNpemVvZihnZW4x Ml9yZW5kZXJfY29weSkpOwogCi0JZ2VuMTJfYXV4X3BndGFibGVfY2xlYW51cCgmcGd0YWJsZV9p bmZvKTsKKwlnZW4xMl9hdXhfcGd0YWJsZV9jbGVhbnVwKGliYiwgJnBndGFibGVfaW5mbyk7CiB9 CmRpZmYgLS1naXQgYS9saWIvcmVuZGVyY29weV9pODMwLmMgYi9saWIvcmVuZGVyY29weV9pODMw LmMKaW5kZXggY2E4MTUxMjIuLmU3NTU3MDZlIDEwMDY0NAotLS0gYS9saWIvcmVuZGVyY29weV9p ODMwLmMKKysrIGIvbGliL3JlbmRlcmNvcHlfaTgzMC5jCkBAIC0xMSw3ICsxMSw3IEBACiAjaW5j bHVkZSAiZHJtLmgiCiAjaW5jbHVkZSAiaTkxNV9kcm0uaCIKICNpbmNsdWRlICJkcm10ZXN0Lmgi Ci0jaW5jbHVkZSAiaW50ZWxfYnVmbWdyLmgiCisjaW5jbHVkZSAiaW50ZWxfYnVmb3BzLmgiCiAj aW5jbHVkZSAiaW50ZWxfYmF0Y2hidWZmZXIuaCIKICNpbmNsdWRlICJpbnRlbF9pby5oIgogCkBA IC03Miw3NSArNzIsNzUgQEAKICNkZWZpbmUgVEIwQV9BUkcxX1NFTF9URVhFTDMJCSg5IDw8IDYp CiAKIAotc3RhdGljIHZvaWQgZ2VuMl9lbWl0X2ludmFyaWFudChzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoKQorc3RhdGljIHZvaWQgZ2VuMl9lbWl0X2ludmFyaWFudChzdHJ1Y3QgaW50 ZWxfYmIgKmliYikKIHsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJ T1VUX0JBVENIKF8zRFNUQVRFX01BUF9DVUJFIHwgTUFQX1VOSVQoaSkpOwotCQlPVVRfQkFUQ0go XzNEU1RBVEVfTUFQX1RFWF9TVFJFQU1fQ01EIHwgTUFQX1VOSVQoaSkgfAotCQkJICBESVNBQkxF X1RFWF9TVFJFQU1fQlVNUCB8Ci0JCQkgIEVOQUJMRV9URVhfU1RSRUFNX0NPT1JEX1NFVCB8IFRF WF9TVFJFQU1fQ09PUkRfU0VUKGkpIHwKLQkJCSAgRU5BQkxFX1RFWF9TVFJFQU1fTUFQX0lEWCB8 IFRFWF9TVFJFQU1fTUFQX0lEWChpKSk7Ci0JCU9VVF9CQVRDSChfM0RTVEFURV9NQVBfQ09PUkRf VFJBTlNGT1JNKTsKLQkJT1VUX0JBVENIKERJU0FCTEVfVEVYX1RSQU5TRk9STSB8IFRFWFRVUkVf U0VUKGkpKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgXzNEU1RBVEVfTUFQX0NVQkUgfCBNQVBfVU5J VChpKSk7CisJCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX01BUF9URVhfU1RSRUFNX0NNRCB8 IE1BUF9VTklUKGkpIHwKKwkJCSAgICAgRElTQUJMRV9URVhfU1RSRUFNX0JVTVAgfAorCQkJICAg ICBFTkFCTEVfVEVYX1NUUkVBTV9DT09SRF9TRVQgfCBURVhfU1RSRUFNX0NPT1JEX1NFVChpKSB8 CisJCQkgICAgIEVOQUJMRV9URVhfU1RSRUFNX01BUF9JRFggfCBURVhfU1RSRUFNX01BUF9JRFgo aSkpOworCQlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9NQVBfQ09PUkRfVFJBTlNGT1JNKTsK KwkJaW50ZWxfYmJfb3V0KGliYiwgRElTQUJMRV9URVhfVFJBTlNGT1JNIHwgVEVYVFVSRV9TRVQo aSkpOwogCX0KIAotCU9VVF9CQVRDSChfM0RTVEFURV9NQVBfQ09PUkRfU0VUQklORF9DTUQpOwot CU9VVF9CQVRDSChURVhCSU5EX1NFVDMoVEVYQ09PUkRTUkNfVlRYU0VUXzMpIHwKLQkJICBURVhC SU5EX1NFVDIoVEVYQ09PUkRTUkNfVlRYU0VUXzIpIHwKLQkJICBURVhCSU5EX1NFVDEoVEVYQ09P UkRTUkNfVlRYU0VUXzEpIHwKLQkJICBURVhCSU5EX1NFVDAoVEVYQ09PUkRTUkNfVlRYU0VUXzAp KTsKLQotCU9VVF9CQVRDSChfM0RTVEFURV9TQ0lTU09SX0VOQUJMRV9DTUQgfCBESVNBQkxFX1ND SVNTT1JfUkVDVCk7Ci0KLQlPVVRfQkFUQ0goXzNEU1RBVEVfVkVSVEVYX1RSQU5TRk9STSk7Ci0J T1VUX0JBVENIKERJU0FCTEVfVklFV1BPUlRfVFJBTlNGT1JNIHwgRElTQUJMRV9QRVJTUEVDVElW RV9ESVZJREUpOwotCi0JT1VUX0JBVENIKF8zRFNUQVRFX1dfU1RBVEVfQ01EKTsKLQlPVVRfQkFU Q0goTUFHSUNfV19TVEFURV9EV09SRDEpOwotCU9VVF9CQVRDSCgweDNmODAwMDAwIC8qIDEuMCBp biBJRUVFIGZsb2F0ICovICk7Ci0KLQlPVVRfQkFUQ0goXzNEU1RBVEVfSU5EUFRfQUxQSEFfQkxF TkRfQ01EIHwKLQkJICBESVNBQkxFX0lORFBUX0FMUEhBX0JMRU5EIHwKLQkJICBFTkFCTEVfQUxQ SEFfQkxFTkRGVU5DIHwgQUJMRU5ERlVOQ19BREQpOwotCi0JT1VUX0JBVENIKF8zRFNUQVRFX0NP TlNUX0JMRU5EX0NPTE9SX0NNRCk7Ci0JT1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKF8zRFNU QVRFX01PREVTXzFfQ01EIHwKLQkJICBFTkFCTEVfQ09MUl9CTE5EX0ZVTkMgfCBCTEVOREZVTkNf QUREIHwKLQkJICBFTkFCTEVfU1JDX0JMTkRfRkFDVE9SIHwgU1JDX0JMTkRfRkFDVChCTEVOREZB Q1RPUl9PTkUpIHwKLQkJICBFTkFCTEVfRFNUX0JMTkRfRkFDVE9SIHwgRFNUX0JMTkRfRkFDVChC TEVOREZBQ1RPUl9aRVJPKSk7Ci0KLQlPVVRfQkFUQ0goXzNEU1RBVEVfRU5BQkxFU18xX0NNRCB8 Ci0JCSAgRElTQUJMRV9MT0dJQ19PUCB8Ci0JCSAgRElTQUJMRV9TVEVOQ0lMX1RFU1QgfAotCQkg IERJU0FCTEVfREVQVEhfQklBUyB8Ci0JCSAgRElTQUJMRV9TUEVDX0FERCB8Ci0JCSAgRElTQUJM RV9GT0cgfAotCQkgIERJU0FCTEVfQUxQSEFfVEVTVCB8Ci0JCSAgRElTQUJMRV9ERVBUSF9URVNU IHwKLQkJICBFTkFCTEVfQ09MT1JfQkxFTkQpOwotCi0JT1VUX0JBVENIKF8zRFNUQVRFX0VOQUJM RVNfMl9DTUQgfAotCQkgIERJU0FCTEVfU1RFTkNJTF9XUklURSB8Ci0JCSAgRElTQUJMRV9ESVRI RVIgfAotCQkgIERJU0FCTEVfREVQVEhfV1JJVEUgfAotCQkgIEVOQUJMRV9DT0xPUl9NQVNLIHwK LQkJICBFTkFCTEVfQ09MT1JfV1JJVEUgfAotCQkgIEVOQUJMRV9URVhfQ0FDSEUpOworCWludGVs X2JiX291dChpYmIsIF8zRFNUQVRFX01BUF9DT09SRF9TRVRCSU5EX0NNRCk7CisJaW50ZWxfYmJf b3V0KGliYiwgVEVYQklORF9TRVQzKFRFWENPT1JEU1JDX1ZUWFNFVF8zKSB8CisJCSAgICAgVEVY QklORF9TRVQyKFRFWENPT1JEU1JDX1ZUWFNFVF8yKSB8CisJCSAgICAgVEVYQklORF9TRVQxKFRF WENPT1JEU1JDX1ZUWFNFVF8xKSB8CisJCSAgICAgVEVYQklORF9TRVQwKFRFWENPT1JEU1JDX1ZU WFNFVF8wKSk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9TQ0lTU09SX0VOQUJMRV9D TUQgfCBESVNBQkxFX1NDSVNTT1JfUkVDVCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFU RV9WRVJURVhfVFJBTlNGT1JNKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBESVNBQkxFX1ZJRVdQT1JU X1RSQU5TRk9STSB8IERJU0FCTEVfUEVSU1BFQ1RJVkVfRElWSURFKTsKKworCWludGVsX2JiX291 dChpYmIsIF8zRFNUQVRFX1dfU1RBVEVfQ01EKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBNQUdJQ19X X1NUQVRFX0RXT1JEMSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMHgzZjgwMDAwMCAvKiAxLjAgaW4g SUVFRSBmbG9hdCAqLyk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9JTkRQVF9BTFBI QV9CTEVORF9DTUQgfAorCQkgICAgIERJU0FCTEVfSU5EUFRfQUxQSEFfQkxFTkQgfAorCQkgICAg IEVOQUJMRV9BTFBIQV9CTEVOREZVTkMgfCBBQkxFTkRGVU5DX0FERCk7CisKKwlpbnRlbF9iYl9v dXQoaWJiLCBfM0RTVEFURV9DT05TVF9CTEVORF9DT0xPUl9DTUQpOworCWludGVsX2JiX291dChp YmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgXzNEU1RBVEVfTU9ERVNfMV9DTUQgfAorCQkg ICAgIEVOQUJMRV9DT0xSX0JMTkRfRlVOQyB8IEJMRU5ERlVOQ19BREQgfAorCQkgICAgIEVOQUJM RV9TUkNfQkxORF9GQUNUT1IgfCBTUkNfQkxORF9GQUNUKEJMRU5ERkFDVE9SX09ORSkgfAorCQkg ICAgIEVOQUJMRV9EU1RfQkxORF9GQUNUT1IgfCBEU1RfQkxORF9GQUNUKEJMRU5ERkFDVE9SX1pF Uk8pKTsKKworCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX0VOQUJMRVNfMV9DTUQgfAorCQkg ICAgIERJU0FCTEVfTE9HSUNfT1AgfAorCQkgICAgIERJU0FCTEVfU1RFTkNJTF9URVNUIHwKKwkJ ICAgICBESVNBQkxFX0RFUFRIX0JJQVMgfAorCQkgICAgIERJU0FCTEVfU1BFQ19BREQgfAorCQkg ICAgIERJU0FCTEVfRk9HIHwKKwkJICAgICBESVNBQkxFX0FMUEhBX1RFU1QgfAorCQkgICAgIERJ U0FCTEVfREVQVEhfVEVTVCB8CisJCSAgICAgRU5BQkxFX0NPTE9SX0JMRU5EKTsKKworCWludGVs X2JiX291dChpYmIsIF8zRFNUQVRFX0VOQUJMRVNfMl9DTUQgfAorCQkgICAgIERJU0FCTEVfU1RF TkNJTF9XUklURSB8CisJCSAgICAgRElTQUJMRV9ESVRIRVIgfAorCQkgICAgIERJU0FCTEVfREVQ VEhfV1JJVEUgfAorCQkgICAgIEVOQUJMRV9DT0xPUl9NQVNLIHwKKwkJICAgICBFTkFCTEVfQ09M T1JfV1JJVEUgfAorCQkgICAgIEVOQUJMRV9URVhfQ0FDSEUpOwogfQogCi1zdGF0aWMgdm9pZCBn ZW4yX2VtaXRfdGFyZ2V0KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQkgICAg IGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpkc3QpCitzdGF0aWMgdm9pZCBnZW4yX2VtaXRfdGFyZ2V0 KHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfYnVmICpk c3QpCiB7CiAJdWludDMyX3QgdGlsaW5nOwogCXVpbnQzMl90IGZvcm1hdDsKIAogCWlndF9hc3Nl cnRfbHRlKGRzdC0+c3VyZmFjZVswXS5zdHJpZGUsIDgxOTIpOwotCWlndF9hc3NlcnRfbHRlKGln dF9idWZfd2lkdGgoZHN0KSwgMjA0OCk7Ci0JaWd0X2Fzc2VydF9sdGUoaWd0X2J1Zl9oZWlnaHQo ZHN0KSwgMjA0OCk7CisJaWd0X2Fzc2VydF9sdGUoaW50ZWxfYnVmX3dpZHRoKGRzdCksIDIwNDgp OworCWlndF9hc3NlcnRfbHRlKGludGVsX2J1Zl9oZWlnaHQoZHN0KSwgMjA0OCk7CiAKIAlzd2l0 Y2ggKGRzdC0+YnBwKSB7CiAJCWNhc2UgODogZm9ybWF0ID0gQ09MUl9CVUZfOEJJVDsgYnJlYWs7 CkBAIC0xNTUsMzMgKzE1NSwzNSBAQCBzdGF0aWMgdm9pZCBnZW4yX2VtaXRfdGFyZ2V0KHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAJaWYgKGRzdC0+dGlsaW5nID09IEk5MTVfVElM SU5HX1kpCiAJCXRpbGluZyB8PSBCVUZfM0RfVElMRV9XQUxLX1k7CiAKLQlPVVRfQkFUQ0goXzNE U1RBVEVfQlVGX0lORk9fQ01EKTsKLQlPVVRfQkFUQ0goQlVGXzNEX0lEX0NPTE9SX0JBQ0sgfCB0 aWxpbmcgfCBCVUZfM0RfUElUQ0goZHN0LT5zdXJmYWNlWzBdLnN0cmlkZSkpOwotCU9VVF9SRUxP Qyhkc3QtPmJvLCBJOTE1X0dFTV9ET01BSU5fUkVOREVSLCBJOTE1X0dFTV9ET01BSU5fUkVOREVS LCAwKTsKLQotCU9VVF9CQVRDSChfM0RTVEFURV9EU1RfQlVGX1ZBUlNfQ01EKTsKLQlPVVRfQkFU Q0goZm9ybWF0IHwKLQkJICBEU1RPUkdfSE9SVF9CSUFTKDB4OCkgfAotCQkgIERTVE9SR19WRVJU X0JJQVMoMHg4KSk7Ci0KLQlPVVRfQkFUQ0goXzNEU1RBVEVfRFJBV19SRUNUX0NNRCk7Ci0JT1VU X0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsJCS8qIHltaW4sIHhtaW4gKi8KLQlPVVRfQkFUQ0go RFJBV19ZTUFYKGlndF9idWZfaGVpZ2h0KGRzdCkgLSAxKSB8Ci0JCSAgRFJBV19YTUFYKGlndF9i dWZfd2lkdGgoZHN0KSAtIDEpKTsKLQlPVVRfQkFUQ0goMCk7CQkvKiB5b3JpZywgeG9yaWcgKi8K KwlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9CVUZfSU5GT19DTUQpOworCWludGVsX2JiX291 dChpYmIsIEJVRl8zRF9JRF9DT0xPUl9CQUNLIHwgdGlsaW5nIHwKKwkJICAgICBCVUZfM0RfUElU Q0goZHN0LT5zdXJmYWNlWzBdLnN0cmlkZSkpOworCWludGVsX2JiX2VtaXRfcmVsb2MoaWJiLCBk c3QtPmhhbmRsZSwgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiwKKwkJCSAgICBJOTE1X0dFTV9ET01B SU5fUkVOREVSLCAwLCBkc3QtPmFkZHIub2Zmc2V0KTsKKworCWludGVsX2JiX291dChpYmIsIF8z RFNUQVRFX0RTVF9CVUZfVkFSU19DTUQpOworCWludGVsX2JiX291dChpYmIsIGZvcm1hdCB8CisJ CSAgICAgRFNUT1JHX0hPUlRfQklBUygweDgpIHwKKwkJICAgICBEU1RPUkdfVkVSVF9CSUFTKDB4 OCkpOworCisJaW50ZWxfYmJfb3V0KGliYiwgXzNEU1RBVEVfRFJBV19SRUNUX0NNRCk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CQkvKiB5bWluLCB4bWlu ICovCisJaW50ZWxfYmJfb3V0KGliYiwgRFJBV19ZTUFYKGludGVsX2J1Zl9oZWlnaHQoZHN0KSAt IDEpIHwKKwkJICAgICBEUkFXX1hNQVgoaW50ZWxfYnVmX3dpZHRoKGRzdCkgLSAxKSk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7CQkvKiB5b3JpZywgeG9yaWcgKi8KIH0KIAotc3RhdGljIHZvaWQg Z2VuMl9lbWl0X3RleHR1cmUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAg ICAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsCitzdGF0aWMgdm9pZCBnZW4yX2VtaXRfdGV4 dHVyZShzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9i dWYgKnNyYywKIAkJCSAgICAgIGludCB1bml0KQogewogCXVpbnQzMl90IHRpbGluZzsKIAl1aW50 MzJfdCBmb3JtYXQ7CiAKIAlpZ3RfYXNzZXJ0X2x0ZShzcmMtPnN1cmZhY2VbMF0uc3RyaWRlLCA4 MTkyKTsKLQlpZ3RfYXNzZXJ0X2x0ZShpZ3RfYnVmX3dpZHRoKHNyYyksIDIwNDgpOwotCWlndF9h c3NlcnRfbHRlKGlndF9idWZfaGVpZ2h0KHNyYyksIDIwNDgpOworCWlndF9hc3NlcnRfbHRlKGlu dGVsX2J1Zl93aWR0aChzcmMpLCAyMDQ4KTsKKwlpZ3RfYXNzZXJ0X2x0ZShpbnRlbF9idWZfaGVp Z2h0KHNyYyksIDIwNDgpOwogCiAJc3dpdGNoIChzcmMtPmJwcCkgewogCQljYXNlIDg6IGZvcm1h dCA9IE1BUFNVUkZfOEJJVCB8IE1UXzhCSVRfTDg7IGJyZWFrOwpAQCAtMTk2LDc4ICsxOTgsODQg QEAgc3RhdGljIHZvaWQgZ2VuMl9lbWl0X3RleHR1cmUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCwKIAlpZiAoc3JjLT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWSkKIAkJdGlsaW5nIHw9 IFRNMFMxX1RJTEVfV0FMSzsKIAotCU9VVF9CQVRDSChfM0RTVEFURV9MT0FEX1NUQVRFX0lNTUVE SUFURV8yIHwgTE9BRF9URVhUVVJFX01BUCh1bml0KSB8IDQpOwotCU9VVF9SRUxPQyhzcmMtPmJv LCBJOTE1X0dFTV9ET01BSU5fU0FNUExFUiwgMCwgMCk7Ci0JT1VUX0JBVENIKChpZ3RfYnVmX2hl aWdodChzcmMpIC0gMSkgPDwgVE0wUzFfSEVJR0hUX1NISUZUIHwKLQkJICAoaWd0X2J1Zl93aWR0 aChzcmMpIC0gMSkgPDwgVE0wUzFfV0lEVEhfU0hJRlQgfAotCQkgIGZvcm1hdCB8IHRpbGluZyk7 Ci0JT1VUX0JBVENIKChzcmMtPnN1cmZhY2VbMF0uc3RyaWRlIC8gNCAtIDEpIDw8IFRNMFMyX1BJ VENIX1NISUZUIHwgVE0wUzJfTUFQXzJEKTsKLQlPVVRfQkFUQ0goRklMVEVSX05FQVJFU1QgPDwg VE0wUzNfTUFHX0ZJTFRFUl9TSElGVCB8Ci0JCSAgRklMVEVSX05FQVJFU1QgPDwgVE0wUzNfTUlO X0ZJTFRFUl9TSElGVCB8Ci0JCSAgTUlQRklMVEVSX05PTkUgPDwgVE0wUzNfTUlQX0ZJTFRFUl9T SElGVCk7Ci0JT1VUX0JBVENIKDApOwkvKiBkZWZhdWx0IGNvbG9yICovCi0KLQlPVVRfQkFUQ0go XzNEU1RBVEVfTUFQX0NPT1JEX1NFVF9DTUQgfCBURVhDT09SRF9TRVQodW5pdCkgfAotCQkgIEVO QUJMRV9URVhDT09SRF9QQVJBTVMgfCBURVhDT09SRFNfQVJFX05PUk1BTCB8Ci0JCSAgVEVYQ09P UkRUWVBFX0NBUlRFU0lBTiB8Ci0JCSAgRU5BQkxFX0FERFJfVl9DTlRMIHwgVEVYQ09PUkRfQURE Ul9WX01PREUoVEVYQ09PUkRNT0RFX0NMQU1QX0JPUkRFUikgfAotCQkgIEVOQUJMRV9BRERSX1Vf Q05UTCB8IFRFWENPT1JEX0FERFJfVV9NT0RFKFRFWENPT1JETU9ERV9DTEFNUF9CT1JERVIpKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9MT0FEX1NUQVRFX0lNTUVESUFURV8yIHwgTE9B RF9URVhUVVJFX01BUCh1bml0KSB8IDQpOworCWludGVsX2JiX2VtaXRfcmVsb2MoaWJiLCBzcmMt PmhhbmRsZSwgSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIsIDAsIDAsCisJCQkgICAgc3JjLT5hZGRy Lm9mZnNldCk7CisJaW50ZWxfYmJfb3V0KGliYiwgKGludGVsX2J1Zl9oZWlnaHQoc3JjKSAtIDEp IDw8IFRNMFMxX0hFSUdIVF9TSElGVCB8CisJCSAgICAgKGludGVsX2J1Zl93aWR0aChzcmMpIC0g MSkgPDwgVE0wUzFfV0lEVEhfU0hJRlQgfAorCQkgICAgIGZvcm1hdCB8IHRpbGluZyk7CisJaW50 ZWxfYmJfb3V0KGliYiwgKHNyYy0+c3VyZmFjZVswXS5zdHJpZGUgLyA0IC0gMSkgPDwgVE0wUzJf UElUQ0hfU0hJRlQgfCBUTTBTMl9NQVBfMkQpOworCWludGVsX2JiX291dChpYmIsIEZJTFRFUl9O RUFSRVNUIDw8IFRNMFMzX01BR19GSUxURVJfU0hJRlQgfAorCQkgICAgIEZJTFRFUl9ORUFSRVNU IDw8IFRNMFMzX01JTl9GSUxURVJfU0hJRlQgfAorCQkgICAgIE1JUEZJTFRFUl9OT05FIDw8IFRN MFMzX01JUF9GSUxURVJfU0hJRlQpOworCWludGVsX2JiX291dChpYmIsIDApOwkvKiBkZWZhdWx0 IGNvbG9yICovCisKKwlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9NQVBfQ09PUkRfU0VUX0NN RCB8IFRFWENPT1JEX1NFVCh1bml0KSB8CisJCSAgICAgRU5BQkxFX1RFWENPT1JEX1BBUkFNUyB8 IFRFWENPT1JEU19BUkVfTk9STUFMIHwKKwkJICAgICBURVhDT09SRFRZUEVfQ0FSVEVTSUFOIHwK KwkJICAgICBFTkFCTEVfQUREUl9WX0NOVEwgfCBURVhDT09SRF9BRERSX1ZfTU9ERShURVhDT09S RE1PREVfQ0xBTVBfQk9SREVSKSB8CisJCSAgICAgRU5BQkxFX0FERFJfVV9DTlRMIHwgVEVYQ09P UkRfQUREUl9VX01PREUoVEVYQ09PUkRNT0RFX0NMQU1QX0JPUkRFUikpOwogfQogCi1zdGF0aWMg dm9pZCBnZW4yX2VtaXRfY29weV9waXBlbGluZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoKQorc3RhdGljIHZvaWQgZ2VuMl9lbWl0X2NvcHlfcGlwZWxpbmUoc3RydWN0IGludGVsX2Ji ICppYmIpCiB7Ci0JT1VUX0JBVENIKF8zRFNUQVRFX0lORFBUX0FMUEhBX0JMRU5EX0NNRCB8IERJ U0FCTEVfSU5EUFRfQUxQSEFfQkxFTkQpOwotCU9VVF9CQVRDSChfM0RTVEFURV9FTkFCTEVTXzFf Q01EIHwgRElTQUJMRV9MT0dJQ19PUCB8Ci0JCSAgRElTQUJMRV9TVEVOQ0lMX1RFU1QgfCBESVNB QkxFX0RFUFRIX0JJQVMgfAotCQkgIERJU0FCTEVfU1BFQ19BREQgfCBESVNBQkxFX0ZPRyB8IERJ U0FCTEVfQUxQSEFfVEVTVCB8Ci0JCSAgRElTQUJMRV9DT0xPUl9CTEVORCB8IERJU0FCTEVfREVQ VEhfVEVTVCk7Ci0KLQlPVVRfQkFUQ0goXzNEU1RBVEVfTE9BRF9TVEFURV9JTU1FRElBVEVfMiB8 Ci0JCSAgTE9BRF9URVhUVVJFX0JMRU5EX1NUQUdFKDApIHwgMSk7Ci0JT1VUX0JBVENIKFRCMENf TEFTVF9TVEFHRSB8IFRCMENfUkVTVUxUX1NDQUxFXzFYIHwKLQkJICBUQjBDX09VVFBVVF9XUklU RV9DVVJSRU5UIHwKLQkJICBUQjBDX09QX0FSRzEgfCBUQjBDX0FSRzFfU0VMX1RFWEVMMCk7Ci0J T1VUX0JBVENIKFRCMEFfUkVTVUxUX1NDQUxFXzFYIHwgVEIwQV9PVVRQVVRfV1JJVEVfQ1VSUkVO VCB8Ci0JCSAgVEIwQV9PUF9BUkcxIHwgVEIwQV9BUkcxX1NFTF9URVhFTDApOworCWludGVsX2Ji X291dChpYmIsIF8zRFNUQVRFX0lORFBUX0FMUEhBX0JMRU5EX0NNRCB8IERJU0FCTEVfSU5EUFRf QUxQSEFfQkxFTkQpOworCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX0VOQUJMRVNfMV9DTUQg fCBESVNBQkxFX0xPR0lDX09QIHwKKwkJICAgICBESVNBQkxFX1NURU5DSUxfVEVTVCB8IERJU0FC TEVfREVQVEhfQklBUyB8CisJCSAgICAgRElTQUJMRV9TUEVDX0FERCB8IERJU0FCTEVfRk9HIHwg RElTQUJMRV9BTFBIQV9URVNUIHwKKwkJICAgICBESVNBQkxFX0NPTE9SX0JMRU5EIHwgRElTQUJM RV9ERVBUSF9URVNUKTsKKworCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX0xPQURfU1RBVEVf SU1NRURJQVRFXzIgfAorCQkgICAgIExPQURfVEVYVFVSRV9CTEVORF9TVEFHRSgwKSB8IDEpOwor CWludGVsX2JiX291dChpYmIsIFRCMENfTEFTVF9TVEFHRSB8IFRCMENfUkVTVUxUX1NDQUxFXzFY IHwKKwkJICAgICBUQjBDX09VVFBVVF9XUklURV9DVVJSRU5UIHwKKwkJICAgICBUQjBDX09QX0FS RzEgfCBUQjBDX0FSRzFfU0VMX1RFWEVMMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgVEIwQV9SRVNV TFRfU0NBTEVfMVggfCBUQjBBX09VVFBVVF9XUklURV9DVVJSRU5UIHwKKwkJICAgICBUQjBBX09Q X0FSRzEgfCBUQjBBX0FSRzFfU0VMX1RFWEVMMCk7CiB9CiAKLXZvaWQgZ2VuMl9yZW5kZXJfY29w eWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgZHJtX2ludGVsX2Nv bnRleHQgKmNvbnRleHQsCi0JCQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2lnbmVk IHNyY194LCB1bnNpZ25lZCBzcmNfeSwKLQkJCSAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhl aWdodCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCwgdW5zaWduZWQgZHN0X3gsIHVu c2lnbmVkIGRzdF95KQordm9pZCBnZW4yX3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmIg KmliYiwKKwkJCSAgdWludDMyX3QgY3R4LAorCQkJICBzdHJ1Y3QgaW50ZWxfYnVmICpzcmMsCisJ CQkgIHVpbnQzMl90IHNyY194LCB1aW50MzJfdCBzcmNfeSwKKwkJCSAgdWludDMyX3Qgd2lkdGgs IHVpbnQzMl90IGhlaWdodCwKKwkJCSAgc3RydWN0IGludGVsX2J1ZiAqZHN0LAorCQkJICB1aW50 MzJfdCBkc3RfeCwgdWludDMyX3QgZHN0X3kpCiB7CiAJaWd0X2Fzc2VydChzcmMtPmJwcCA9PSBk c3QtPmJwcCk7CiAKLQlnZW4yX2VtaXRfaW52YXJpYW50KGJhdGNoKTsKLQlnZW4yX2VtaXRfY29w eV9waXBlbGluZShiYXRjaCk7CisJaW50ZWxfYmJfYWRkX2ludGVsX2J1ZihpYmIsIGRzdCwgdHJ1 ZSk7CisJaW50ZWxfYmJfYWRkX2ludGVsX2J1ZihpYmIsIHNyYywgZmFsc2UpOwogCi0JZ2VuMl9l bWl0X3RhcmdldChiYXRjaCwgZHN0KTsKLQlnZW4yX2VtaXRfdGV4dHVyZShiYXRjaCwgc3JjLCAw KTsKKwlnZW4yX2VtaXRfaW52YXJpYW50KGliYik7CisJZ2VuMl9lbWl0X2NvcHlfcGlwZWxpbmUo aWJiKTsKIAotCU9VVF9CQVRDSChfM0RTVEFURV9MT0FEX1NUQVRFX0lNTUVESUFURV8xIHwKLQkJ ICBJMV9MT0FEX1MoMikgfCBJMV9MT0FEX1MoMykgfCBJMV9MT0FEX1MoOCkgfCAyKTsKLQlPVVRf QkFUQ0goMTw8MTIpOwotCU9VVF9CQVRDSChTM19DVUxMTU9ERV9OT05FIHwgUzNfVkVSVEVYSEFT X1hZKTsKLQlPVVRfQkFUQ0goUzhfRU5BQkxFX0NPTE9SX0JVRkZFUl9XUklURSk7CisJZ2VuMl9l bWl0X3RhcmdldChpYmIsIGRzdCk7CisJZ2VuMl9lbWl0X3RleHR1cmUoaWJiLCBzcmMsIDApOwog Ci0JT1VUX0JBVENIKF8zRFNUQVRFX1ZFUlRFWF9GT1JNQVRfMl9DTUQgfCBURVhDT09SREZNVF8y RCA8PCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9MT0FEX1NUQVRFX0lNTUVESUFU RV8xIHwKKwkJICAgICBJMV9MT0FEX1MoMikgfCBJMV9MT0FEX1MoMykgfCBJMV9MT0FEX1MoOCkg fCAyKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAxPDwxMik7CisJaW50ZWxfYmJfb3V0KGliYiwgUzNf Q1VMTE1PREVfTk9ORSB8IFMzX1ZFUlRFWEhBU19YWSk7CisJaW50ZWxfYmJfb3V0KGliYiwgUzhf RU5BQkxFX0NPTE9SX0JVRkZFUl9XUklURSk7CiAKLQlPVVRfQkFUQ0goUFJJTTNEX0lOTElORSB8 IFBSSU0zRF9SRUNUTElTVCB8ICgzKjQgLTEpKTsKLQllbWl0X3ZlcnRleChiYXRjaCwgZHN0X3gg KyB3aWR0aCk7Ci0JZW1pdF92ZXJ0ZXgoYmF0Y2gsIGRzdF95ICsgaGVpZ2h0KTsKLQllbWl0X3Zl cnRleF9ub3JtYWxpemVkKGJhdGNoLCBzcmNfeCArIHdpZHRoLCBpZ3RfYnVmX3dpZHRoKHNyYykp OwotCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoYmF0Y2gsIHNyY195ICsgaGVpZ2h0LCBpZ3RfYnVm X2hlaWdodChzcmMpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9WRVJURVhfRk9STUFU XzJfQ01EIHwgVEVYQ09PUkRGTVRfMkQgPDwgMCk7CiAKLQllbWl0X3ZlcnRleChiYXRjaCwgZHN0 X3gpOwotCWVtaXRfdmVydGV4KGJhdGNoLCBkc3RfeSArIGhlaWdodCk7Ci0JZW1pdF92ZXJ0ZXhf bm9ybWFsaXplZChiYXRjaCwgc3JjX3gsIGlndF9idWZfd2lkdGgoc3JjKSk7Ci0JZW1pdF92ZXJ0 ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3kgKyBoZWlnaHQsIGlndF9idWZfaGVpZ2h0KHNyYykp OworCWludGVsX2JiX291dChpYmIsIFBSSU0zRF9JTkxJTkUgfCBQUklNM0RfUkVDVExJU1QgfCAo Myo0IC0gMSkpOworCWVtaXRfdmVydGV4KGliYiwgZHN0X3ggKyB3aWR0aCk7CisJZW1pdF92ZXJ0 ZXgoaWJiLCBkc3RfeSArIGhlaWdodCk7CisJZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChpYmIsIHNy Y194ICsgd2lkdGgsIGludGVsX2J1Zl93aWR0aChzcmMpKTsKKwllbWl0X3ZlcnRleF9ub3JtYWxp emVkKGliYiwgc3JjX3kgKyBoZWlnaHQsIGludGVsX2J1Zl9oZWlnaHQoc3JjKSk7CiAKLQllbWl0 X3ZlcnRleChiYXRjaCwgZHN0X3gpOwotCWVtaXRfdmVydGV4KGJhdGNoLCBkc3RfeSk7Ci0JZW1p dF92ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3gsIGlndF9idWZfd2lkdGgoc3JjKSk7Ci0J ZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3ksIGlndF9idWZfaGVpZ2h0KHNyYykp OworCWVtaXRfdmVydGV4KGliYiwgZHN0X3gpOworCWVtaXRfdmVydGV4KGliYiwgZHN0X3kgKyBo ZWlnaHQpOworCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoaWJiLCBzcmNfeCwgaW50ZWxfYnVmX3dp ZHRoKHNyYykpOworCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoaWJiLCBzcmNfeSArIGhlaWdodCwg aW50ZWxfYnVmX2hlaWdodChzcmMpKTsKIAotCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoKGJhdGNo KTsKKwllbWl0X3ZlcnRleChpYmIsIGRzdF94KTsKKwllbWl0X3ZlcnRleChpYmIsIGRzdF95KTsK KwllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGliYiwgc3JjX3gsIGludGVsX2J1Zl93aWR0aChzcmMp KTsKKwllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGliYiwgc3JjX3ksIGludGVsX2J1Zl9oZWlnaHQo c3JjKSk7CisKKwlpbnRlbF9iYl9mbHVzaF9ibGl0X3dpdGhfY29udGV4dChpYmIsIGN0eCk7CiB9 CmRpZmYgLS1naXQgYS9saWIvcmVuZGVyY29weV9pOTE1LmMgYi9saWIvcmVuZGVyY29weV9pOTE1 LmMKaW5kZXggNTZlMTg2M2UuLmIxNmQ0ZjEyIDEwMDY0NAotLS0gYS9saWIvcmVuZGVyY29weV9p OTE1LmMKKysrIGIvbGliL3JlbmRlcmNvcHlfaTkxNS5jCkBAIC0xMSw3ICsxMSw3IEBACiAjaW5j bHVkZSAiZHJtLmgiCiAjaW5jbHVkZSAiaTkxNV9kcm0uaCIKICNpbmNsdWRlICJkcm10ZXN0Lmgi Ci0jaW5jbHVkZSAiaW50ZWxfYnVmbWdyLmgiCisjaW5jbHVkZSAiaW50ZWxfYnVmb3BzLmgiCiAj aW5jbHVkZSAiaW50ZWxfYmF0Y2hidWZmZXIuaCIKICNpbmNsdWRlICJpbnRlbF9pby5oIgogCkBA IC0xOSw2OCArMTksNzMgQEAKICNpbmNsdWRlICJpOTE1XzNkLmgiCiAjaW5jbHVkZSAicmVuZGVy Y29weS5oIgogCi12b2lkIGdlbjNfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gsCi0JCQkgIGRybV9pbnRlbF9jb250ZXh0ICpjb250ZXh0LAotCQkJICBjb25z dCBzdHJ1Y3QgaWd0X2J1ZiAqc3JjLCB1bnNpZ25lZCBzcmNfeCwgdW5zaWduZWQgc3JjX3ksCi0J CQkgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsCi0JCQkgIGNvbnN0IHN0cnVjdCBp Z3RfYnVmICpkc3QsIHVuc2lnbmVkIGRzdF94LCB1bnNpZ25lZCBkc3RfeSkKK3ZvaWQgZ2VuM19y ZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JiICppYmIsCisJCQkgIHVpbnQzMl90IGN0eCwK KwkJCSAgc3RydWN0IGludGVsX2J1ZiAqc3JjLAorCQkJICB1aW50MzJfdCBzcmNfeCwgdWludDMy X3Qgc3JjX3ksCisJCQkgIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsCisJCQkgIHN0 cnVjdCBpbnRlbF9idWYgKmRzdCwKKwkJCSAgdWludDMyX3QgZHN0X3gsIHVpbnQzMl90IGRzdF95 KQogewogCWlndF9hc3NlcnQoc3JjLT5icHAgPT0gZHN0LT5icHApOwogCisJaW50ZWxfYmJfYWRk X2ludGVsX2J1ZihpYmIsIGRzdCwgdHJ1ZSk7CisJaW50ZWxfYmJfYWRkX2ludGVsX2J1ZihpYmIs IHNyYywgZmFsc2UpOworCiAJLyogaW52YXJpYW50IHN0YXRlICovCiAJewotCQlPVVRfQkFUQ0go XzNEU1RBVEVfQUFfQ01EIHwKLQkJCSAgQUFfTElORV9FQ0FBUl9XSURUSF9FTkFCTEUgfAotCQkJ ICBBQV9MSU5FX0VDQUFSX1dJRFRIXzFfMCB8Ci0JCQkgIEFBX0xJTkVfUkVHSU9OX1dJRFRIX0VO QUJMRSB8IEFBX0xJTkVfUkVHSU9OX1dJRFRIXzFfMCk7Ci0JCU9VVF9CQVRDSChfM0RTVEFURV9J TkRFUEVOREVOVF9BTFBIQV9CTEVORF9DTUQgfAotCQkJICBJQUJfTU9ESUZZX0VOQUJMRSB8Ci0J CQkgIElBQl9NT0RJRllfRlVOQyB8IChCTEVOREZVTkNfQUREIDw8IElBQl9GVU5DX1NISUZUKSB8 Ci0JCQkgIElBQl9NT0RJRllfU1JDX0ZBQ1RPUiB8IChCTEVOREZBQ1RfT05FIDw8Ci0JCQkJCQkg ICBJQUJfU1JDX0ZBQ1RPUl9TSElGVCkgfAotCQkJICBJQUJfTU9ESUZZX0RTVF9GQUNUT1IgfCAo QkxFTkRGQUNUX1pFUk8gPDwKLQkJCQkJCSAgIElBQl9EU1RfRkFDVE9SX1NISUZUKSk7Ci0JCU9V VF9CQVRDSChfM0RTVEFURV9ERkxUX0RJRkZVU0VfQ01EKTsKLQkJT1VUX0JBVENIKDApOwotCQlP VVRfQkFUQ0goXzNEU1RBVEVfREZMVF9TUEVDX0NNRCk7Ci0JCU9VVF9CQVRDSCgwKTsKLQkJT1VU X0JBVENIKF8zRFNUQVRFX0RGTFRfWl9DTUQpOwotCQlPVVRfQkFUQ0goMCk7Ci0JCU9VVF9CQVRD SChfM0RTVEFURV9DT09SRF9TRVRfQklORElOR1MgfAotCQkJICBDU0JfVENCKDAsIDApIHwKLQkJ CSAgQ1NCX1RDQigxLCAxKSB8Ci0JCQkgIENTQl9UQ0IoMiwgMikgfAotCQkJICBDU0JfVENCKDMs IDMpIHwKLQkJCSAgQ1NCX1RDQig0LCA0KSB8Ci0JCQkgIENTQl9UQ0IoNSwgNSkgfCBDU0JfVENC KDYsIDYpIHwgQ1NCX1RDQig3LCA3KSk7Ci0JCU9VVF9CQVRDSChfM0RTVEFURV9SQVNURVJfUlVM RVNfQ01EIHwKLQkJCSAgRU5BQkxFX1BPSU5UX1JBU1RFUl9SVUxFIHwKLQkJCSAgT0dMX1BPSU5U X1JBU1RFUl9SVUxFIHwKLQkJCSAgRU5BQkxFX0xJTkVfU1RSSVBfUFJPVk9LRV9WUlRYIHwKLQkJ CSAgRU5BQkxFX1RSSV9GQU5fUFJPVk9LRV9WUlRYIHwKLQkJCSAgTElORV9TVFJJUF9QUk9WT0tF X1ZSVFgoMSkgfAotCQkJICBUUklfRkFOX1BST1ZPS0VfVlJUWCgyKSB8IEVOQUJMRV9URVhLSUxM XzNEXzREIHwgVEVYS0lMTF80RCk7Ci0JCU9VVF9CQVRDSChfM0RTVEFURV9NT0RFU180X0NNRCB8 Ci0JCQkgIEVOQUJMRV9MT0dJQ19PUF9GVU5DIHwgTE9HSUNfT1BfRlVOQyhMT0dJQ09QX0NPUFkp IHwKLQkJCSAgRU5BQkxFX1NURU5DSUxfV1JJVEVfTUFTSyB8IFNURU5DSUxfV1JJVEVfTUFTSygw eGZmKSB8Ci0JCQkgIEVOQUJMRV9TVEVOQ0lMX1RFU1RfTUFTSyB8IFNURU5DSUxfVEVTVF9NQVNL KDB4ZmYpKTsKLQkJT1VUX0JBVENIKF8zRFNUQVRFX0xPQURfU1RBVEVfSU1NRURJQVRFXzEgfCBJ MV9MT0FEX1MoMykgfCBJMV9MT0FEX1MoNCkgfCBJMV9MT0FEX1MoNSkgfCAyKTsKLQkJT1VUX0JB VENIKDB4MDAwMDAwMDApOwkvKiBEaXNhYmxlIHRleHR1cmUgY29vcmRpbmF0ZSB3cmFwLXNob3J0 ZXN0ICovCi0JCU9VVF9CQVRDSCgoMSA8PCBTNF9QT0lOVF9XSURUSF9TSElGVCkgfAotCQkJICBT NF9MSU5FX1dJRFRIX09ORSB8Ci0JCQkgIFM0X0NVTExNT0RFX05PTkUgfAotCQkJICBTNF9WRk1U X1hZKTsKLQkJT1VUX0JBVENIKDB4MDAwMDAwMDApOwkvKiBTdGVuY2lsLiAqLwotCQlPVVRfQkFU Q0goXzNEU1RBVEVfU0NJU1NPUl9FTkFCTEVfQ01EIHwgRElTQUJMRV9TQ0lTU09SX1JFQ1QpOwot CQlPVVRfQkFUQ0goXzNEU1RBVEVfU0NJU1NPUl9SRUNUXzBfQ01EKTsKLQkJT1VUX0JBVENIKDAp OwotCQlPVVRfQkFUQ0goMCk7Ci0JCU9VVF9CQVRDSChfM0RTVEFURV9ERVBUSF9TVUJSRUNUX0RJ U0FCTEUpOwotCQlPVVRfQkFUQ0goXzNEU1RBVEVfTE9BRF9JTkRJUkVDVCB8IDApOwkvKiBkaXNh YmxlIGluZGlyZWN0IHN0YXRlICovCi0JCU9VVF9CQVRDSCgwKTsKLQkJT1VUX0JBVENIKF8zRFNU QVRFX1NUSVBQTEUpOwotCQlPVVRfQkFUQ0goMHgwMDAwMDAwMCk7Ci0JCU9VVF9CQVRDSChfM0RT VEFURV9CQUNLRkFDRV9TVEVOQ0lMX09QUyB8IEJGT19FTkFCTEVfU1RFTkNJTF9UV09fU0lERSB8 IDApOworCQlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9BQV9DTUQgfAorCQkJICAgICBBQV9M SU5FX0VDQUFSX1dJRFRIX0VOQUJMRSB8CisJCQkgICAgIEFBX0xJTkVfRUNBQVJfV0lEVEhfMV8w IHwKKwkJCSAgICAgQUFfTElORV9SRUdJT05fV0lEVEhfRU5BQkxFIHwgQUFfTElORV9SRUdJT05f V0lEVEhfMV8wKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgXzNEU1RBVEVfSU5ERVBFTkRFTlRfQUxQ SEFfQkxFTkRfQ01EIHwKKwkJCSAgICAgSUFCX01PRElGWV9FTkFCTEUgfAorCQkJICAgICBJQUJf TU9ESUZZX0ZVTkMgfCAoQkxFTkRGVU5DX0FERCA8PCBJQUJfRlVOQ19TSElGVCkgfAorCQkJICAg ICBJQUJfTU9ESUZZX1NSQ19GQUNUT1IgfCAoQkxFTkRGQUNUX09ORSA8PAorCQkJCQkJICAgICAg SUFCX1NSQ19GQUNUT1JfU0hJRlQpIHwKKwkJCSAgICAgSUFCX01PRElGWV9EU1RfRkFDVE9SIHwg KEJMRU5ERkFDVF9aRVJPIDw8CisJCQkJCQkgICAgICBJQUJfRFNUX0ZBQ1RPUl9TSElGVCkpOwor CQlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9ERkxUX0RJRkZVU0VfQ01EKTsKKwkJaW50ZWxf YmJfb3V0KGliYiwgMCk7CisJCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX0RGTFRfU1BFQ19D TUQpOworCQlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgXzNEU1RB VEVfREZMVF9aX0NNRCk7CisJCWludGVsX2JiX291dChpYmIsIDApOworCQlpbnRlbF9iYl9vdXQo aWJiLCBfM0RTVEFURV9DT09SRF9TRVRfQklORElOR1MgfAorCQkJICAgICBDU0JfVENCKDAsIDAp IHwKKwkJCSAgICAgQ1NCX1RDQigxLCAxKSB8CisJCQkgICAgIENTQl9UQ0IoMiwgMikgfAorCQkJ ICAgICBDU0JfVENCKDMsIDMpIHwKKwkJCSAgICAgQ1NCX1RDQig0LCA0KSB8CisJCQkgICAgIENT Ql9UQ0IoNSwgNSkgfCBDU0JfVENCKDYsIDYpIHwgQ1NCX1RDQig3LCA3KSk7CisJCWludGVsX2Ji X291dChpYmIsIF8zRFNUQVRFX1JBU1RFUl9SVUxFU19DTUQgfAorCQkJICAgICBFTkFCTEVfUE9J TlRfUkFTVEVSX1JVTEUgfAorCQkJICAgICBPR0xfUE9JTlRfUkFTVEVSX1JVTEUgfAorCQkJICAg ICBFTkFCTEVfTElORV9TVFJJUF9QUk9WT0tFX1ZSVFggfAorCQkJICAgICBFTkFCTEVfVFJJX0ZB Tl9QUk9WT0tFX1ZSVFggfAorCQkJICAgICBMSU5FX1NUUklQX1BST1ZPS0VfVlJUWCgxKSB8CisJ CQkgICAgIFRSSV9GQU5fUFJPVk9LRV9WUlRYKDIpIHwgRU5BQkxFX1RFWEtJTExfM0RfNEQgfCBU RVhLSUxMXzREKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgXzNEU1RBVEVfTU9ERVNfNF9DTUQgfAor CQkJICAgICBFTkFCTEVfTE9HSUNfT1BfRlVOQyB8IExPR0lDX09QX0ZVTkMoTE9HSUNPUF9DT1BZ KSB8CisJCQkgICAgIEVOQUJMRV9TVEVOQ0lMX1dSSVRFX01BU0sgfCBTVEVOQ0lMX1dSSVRFX01B U0soMHhmZikgfAorCQkJICAgICBFTkFCTEVfU1RFTkNJTF9URVNUX01BU0sgfCBTVEVOQ0lMX1RF U1RfTUFTSygweGZmKSk7CisJCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX0xPQURfU1RBVEVf SU1NRURJQVRFXzEgfCBJMV9MT0FEX1MoMykgfCBJMV9MT0FEX1MoNCkgfCBJMV9MT0FEX1MoNSkg fCAyKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgMHgwMDAwMDAwMCk7CS8qIERpc2FibGUgdGV4dHVy ZSBjb29yZGluYXRlIHdyYXAtc2hvcnRlc3QgKi8KKwkJaW50ZWxfYmJfb3V0KGliYiwgKDEgPDwg UzRfUE9JTlRfV0lEVEhfU0hJRlQpIHwKKwkJCSAgICAgUzRfTElORV9XSURUSF9PTkUgfAorCQkJ ICAgICBTNF9DVUxMTU9ERV9OT05FIHwKKwkJCSAgICAgUzRfVkZNVF9YWSk7CisJCWludGVsX2Ji X291dChpYmIsIDB4MDAwMDAwMDApOwkvKiBTdGVuY2lsLiAqLworCQlpbnRlbF9iYl9vdXQoaWJi LCBfM0RTVEFURV9TQ0lTU09SX0VOQUJMRV9DTUQgfCBESVNBQkxFX1NDSVNTT1JfUkVDVCk7CisJ CWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX1NDSVNTT1JfUkVDVF8wX0NNRCk7CisJCWludGVs X2JiX291dChpYmIsIDApOworCQlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwkJaW50ZWxfYmJfb3V0 KGliYiwgXzNEU1RBVEVfREVQVEhfU1VCUkVDVF9ESVNBQkxFKTsKKwkJaW50ZWxfYmJfb3V0KGli YiwgXzNEU1RBVEVfTE9BRF9JTkRJUkVDVCB8IDApOwkvKiBkaXNhYmxlIGluZGlyZWN0IHN0YXRl ICovCisJCWludGVsX2JiX291dChpYmIsIDApOworCQlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFU RV9TVElQUExFKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgMHgwMDAwMDAwMCk7CisJCWludGVsX2Ji X291dChpYmIsIF8zRFNUQVRFX0JBQ0tGQUNFX1NURU5DSUxfT1BTIHwgQkZPX0VOQUJMRV9TVEVO Q0lMX1RXT19TSURFIHwgMCk7CiAJfQogCiAJLyogc2FtbGVyIHN0YXRlICovCkBAIC04OSw4ICs5 NCw4IEBAIHZvaWQgZ2VuM19yZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCwKIAkJdWludDMyX3QgZm9ybWF0X2JpdHMsIHRpbGluZ19iaXRzID0gMDsKIAogCQlp Z3RfYXNzZXJ0X2x0ZShzcmMtPnN1cmZhY2VbMF0uc3RyaWRlLCA4MTkyKTsKLQkJaWd0X2Fzc2Vy dF9sdGUoaWd0X2J1Zl93aWR0aChzcmMpLCAyMDQ4KTsKLQkJaWd0X2Fzc2VydF9sdGUoaWd0X2J1 Zl9oZWlnaHQoc3JjKSwgMjA0OCk7CisJCWlndF9hc3NlcnRfbHRlKGludGVsX2J1Zl93aWR0aChz cmMpLCAyMDQ4KTsKKwkJaWd0X2Fzc2VydF9sdGUoaW50ZWxfYnVmX2hlaWdodChzcmMpLCAyMDQ4 KTsKIAogCQlpZiAoc3JjLT50aWxpbmcgIT0gSTkxNV9USUxJTkdfTk9ORSkKIAkJCXRpbGluZ19i aXRzID0gTVMzX1RJTEVEX1NVUkZBQ0U7CkBAIC0xMDQsMjMgKzEwOSwyNSBAQCB2b2lkIGdlbjNf cmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAJCQlkZWZh dWx0OiBpZ3RfYXNzZXJ0KDApOwogCQl9CiAKLQkJT1VUX0JBVENIKF8zRFNUQVRFX01BUF9TVEFU RSB8ICgzICogVEVYX0NPVU5UKSk7Ci0JCU9VVF9CQVRDSCgoMSA8PCBURVhfQ09VTlQpIC0gMSk7 Ci0JCU9VVF9SRUxPQyhzcmMtPmJvLCBJOTE1X0dFTV9ET01BSU5fU0FNUExFUiwgMCwgMCk7Ci0J CU9VVF9CQVRDSChmb3JtYXRfYml0cyB8IHRpbGluZ19iaXRzIHwKLQkJCSAgKGlndF9idWZfaGVp Z2h0KHNyYykgLSAxKSA8PCBNUzNfSEVJR0hUX1NISUZUIHwKLQkJCSAgKGlndF9idWZfd2lkdGgo c3JjKSAtIDEpIDw8IE1TM19XSURUSF9TSElGVCk7Ci0JCU9VVF9CQVRDSCgoc3JjLT5zdXJmYWNl WzBdLnN0cmlkZS80LTEpIDw8IE1TNF9QSVRDSF9TSElGVCk7Ci0KLQkJT1VUX0JBVENIKF8zRFNU QVRFX1NBTVBMRVJfU1RBVEUgfCAoMyAqIFRFWF9DT1VOVCkpOwotCQlPVVRfQkFUQ0goKDEgPDwg VEVYX0NPVU5UKSAtIDEpOwotCQlPVVRfQkFUQ0goTUlQRklMVEVSX05PTkUgPDwgU1MyX01JUF9G SUxURVJfU0hJRlQgfAotCQkJICBGSUxURVJfTkVBUkVTVCA8PCBTUzJfTUFHX0ZJTFRFUl9TSElG VCB8Ci0JCQkgIEZJTFRFUl9ORUFSRVNUIDw8IFNTMl9NSU5fRklMVEVSX1NISUZUKTsKLQkJT1VU X0JBVENIKFRFWENPT1JETU9ERV9XUkFQIDw8IFNTM19UQ1hfQUREUl9NT0RFX1NISUZUIHwKLQkJ CSAgVEVYQ09PUkRNT0RFX1dSQVAgPDwgU1MzX1RDWV9BRERSX01PREVfU0hJRlQgfAotCQkJICAw IDw8IFNTM19URVhUVVJFTUFQX0lOREVYX1NISUZUKTsKLQkJT1VUX0JBVENIKDB4MDAwMDAwMDAp OworCQlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9NQVBfU1RBVEUgfCAoMyAqIFRFWF9DT1VO VCkpOworCQlpbnRlbF9iYl9vdXQoaWJiLCAoMSA8PCBURVhfQ09VTlQpIC0gMSk7CisJCWludGVs X2JiX2VtaXRfcmVsb2MoaWJiLCBzcmMtPmhhbmRsZSwKKwkJCQkgICAgSTkxNV9HRU1fRE9NQUlO X1NBTVBMRVIsIDAsCisJCQkJICAgIDAsIHNyYy0+YWRkci5vZmZzZXQpOworCQlpbnRlbF9iYl9v dXQoaWJiLCBmb3JtYXRfYml0cyB8IHRpbGluZ19iaXRzIHwKKwkJCSAgICAgKGludGVsX2J1Zl9o ZWlnaHQoc3JjKSAtIDEpIDw8IE1TM19IRUlHSFRfU0hJRlQgfAorCQkJICAgICAoaW50ZWxfYnVm X3dpZHRoKHNyYykgLSAxKSA8PCBNUzNfV0lEVEhfU0hJRlQpOworCQlpbnRlbF9iYl9vdXQoaWJi LCAoc3JjLT5zdXJmYWNlWzBdLnN0cmlkZS80LTEpIDw8IE1TNF9QSVRDSF9TSElGVCk7CisKKwkJ aW50ZWxfYmJfb3V0KGliYiwgXzNEU1RBVEVfU0FNUExFUl9TVEFURSB8ICgzICogVEVYX0NPVU5U KSk7CisJCWludGVsX2JiX291dChpYmIsICgxIDw8IFRFWF9DT1VOVCkgLSAxKTsKKwkJaW50ZWxf YmJfb3V0KGliYiwgTUlQRklMVEVSX05PTkUgPDwgU1MyX01JUF9GSUxURVJfU0hJRlQgfAorCQkJ ICAgICBGSUxURVJfTkVBUkVTVCA8PCBTUzJfTUFHX0ZJTFRFUl9TSElGVCB8CisJCQkgICAgIEZJ TFRFUl9ORUFSRVNUIDw8IFNTMl9NSU5fRklMVEVSX1NISUZUKTsKKwkJaW50ZWxfYmJfb3V0KGli YiwgVEVYQ09PUkRNT0RFX1dSQVAgPDwgU1MzX1RDWF9BRERSX01PREVfU0hJRlQgfAorCQkJICAg ICBURVhDT09SRE1PREVfV1JBUCA8PCBTUzNfVENZX0FERFJfTU9ERV9TSElGVCB8CisJCQkgICAg IDAgPDwgU1MzX1RFWFRVUkVNQVBfSU5ERVhfU0hJRlQpOworCQlpbnRlbF9iYl9vdXQoaWJiLCAw eDAwMDAwMDAwKTsKIAl9CiAKIAkvKiByZW5kZXIgdGFyZ2V0IHN0YXRlICovCkBAIC0xMjksOCAr MTM2LDggQEAgdm9pZCBnZW4zX3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoLAogCQl1aW50MzJfdCBmb3JtYXRfYml0czsKIAogCQlpZ3RfYXNzZXJ0X2x0ZShk c3QtPnN1cmZhY2VbMF0uc3RyaWRlLCA4MTkyKTsKLQkJaWd0X2Fzc2VydF9sdGUoaWd0X2J1Zl93 aWR0aChkc3QpLCAyMDQ4KTsKLQkJaWd0X2Fzc2VydF9sdGUoaWd0X2J1Zl9oZWlnaHQoZHN0KSwg MjA0OCk7CisJCWlndF9hc3NlcnRfbHRlKGludGVsX2J1Zl93aWR0aChkc3QpLCAyMDQ4KTsKKwkJ aWd0X2Fzc2VydF9sdGUoaW50ZWxfYnVmX2hlaWdodChkc3QpLCAyMDQ4KTsKIAogCQlzd2l0Y2gg KGRzdC0+YnBwKSB7CiAJCQljYXNlIDg6IGZvcm1hdF9iaXRzID0gQ09MUl9CVUZfOEJJVDsgYnJl YWs7CkBAIC0xNDQsODEgKzE1MSw4MyBAQCB2b2lkIGdlbjNfcmVuZGVyX2NvcHlmdW5jKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAJCWlmIChkc3QtPnRpbGluZyA9PSBJOTE1X1RJ TElOR19ZKQogCQkJdGlsaW5nX2JpdHMgfD0gQlVGXzNEX1RJTEVfV0FMS19ZOwogCi0JCU9VVF9C QVRDSChfM0RTVEFURV9CVUZfSU5GT19DTUQpOwotCQlPVVRfQkFUQ0goQlVGXzNEX0lEX0NPTE9S X0JBQ0sgfCB0aWxpbmdfYml0cyB8Ci0JCQkgIEJVRl8zRF9QSVRDSChkc3QtPnN1cmZhY2VbMF0u c3RyaWRlKSk7Ci0JCU9VVF9SRUxPQyhkc3QtPmJvLCBJOTE1X0dFTV9ET01BSU5fUkVOREVSLCBJ OTE1X0dFTV9ET01BSU5fUkVOREVSLCAwKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgXzNEU1RBVEVf QlVGX0lORk9fQ01EKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgQlVGXzNEX0lEX0NPTE9SX0JBQ0sg fCB0aWxpbmdfYml0cyB8CisJCQkgICAgIEJVRl8zRF9QSVRDSChkc3QtPnN1cmZhY2VbMF0uc3Ry aWRlKSk7CisJCWludGVsX2JiX2VtaXRfcmVsb2MoaWJiLCBkc3QtPmhhbmRsZSwKKwkJCQkgICAg STkxNV9HRU1fRE9NQUlOX1JFTkRFUiwgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiwKKwkJCQkgICAg MCwgZHN0LT5hZGRyLm9mZnNldCk7CiAKLQkJT1VUX0JBVENIKF8zRFNUQVRFX0RTVF9CVUZfVkFS U19DTUQpOwotCQlPVVRfQkFUQ0goZm9ybWF0X2JpdHMgfAotCQkJICBEU1RPUkdfSE9SVF9CSUFT KDB4OCkgfAotCQkJICBEU1RPUkdfVkVSVF9CSUFTKDB4OCkpOworCQlpbnRlbF9iYl9vdXQoaWJi LCBfM0RTVEFURV9EU1RfQlVGX1ZBUlNfQ01EKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgZm9ybWF0 X2JpdHMgfAorCQkJICAgICBEU1RPUkdfSE9SVF9CSUFTKDB4OCkgfAorCQkJICAgICBEU1RPUkdf VkVSVF9CSUFTKDB4OCkpOwogCiAJCS8qIGRyYXcgcmVjdCBpcyB1bmNvbmRpdGlvbmFsICovCi0J CU9VVF9CQVRDSChfM0RTVEFURV9EUkFXX1JFQ1RfQ01EKTsKLQkJT1VUX0JBVENIKDB4MDAwMDAw MDApOwotCQlPVVRfQkFUQ0goMHgwMDAwMDAwMCk7CS8qIHltaW4sIHhtaW4gKi8KLQkJT1VUX0JB VENIKERSQVdfWU1BWChpZ3RfYnVmX2hlaWdodChkc3QpIC0gMSkgfAotCQkJICBEUkFXX1hNQVgo aWd0X2J1Zl93aWR0aChkc3QpIC0gMSkpOworCQlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9E UkFXX1JFQ1RfQ01EKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgMHgwMDAwMDAwMCk7CisJCWludGVs X2JiX291dChpYmIsIDB4MDAwMDAwMDApOwkvKiB5bWluLCB4bWluICovCisJCWludGVsX2JiX291 dChpYmIsIERSQVdfWU1BWChpbnRlbF9idWZfaGVpZ2h0KGRzdCkgLSAxKSB8CisJCQkgICAgIERS QVdfWE1BWChpbnRlbF9idWZfd2lkdGgoZHN0KSAtIDEpKTsKIAkJLyogeW9yaWcsIHhvcmlnIChy ZWxhdGUgdG8gY29sb3IgYnVmZmVyPykgKi8KLQkJT1VUX0JBVENIKDB4MDAwMDAwMDApOworCQlp bnRlbF9iYl9vdXQoaWJiLCAweDAwMDAwMDAwKTsKIAl9CiAKIAkvKiB0ZXhmbXQgKi8KIAl7Ci0J CU9VVF9CQVRDSChfM0RTVEFURV9MT0FEX1NUQVRFX0lNTUVESUFURV8xIHwKLQkJCSAgSTFfTE9B RF9TKDEpIHwgSTFfTE9BRF9TKDIpIHwgSTFfTE9BRF9TKDYpIHwgMik7Ci0JCU9VVF9CQVRDSCgo NCA8PCBTMV9WRVJURVhfV0lEVEhfU0hJRlQpIHwKLQkJCSAgKDQgPDwgUzFfVkVSVEVYX1BJVENI X1NISUZUKSk7Ci0JCU9VVF9CQVRDSCh+UzJfVEVYQ09PUkRfRk1UKDAsIFRFWENPT1JERk1UX05P VF9QUkVTRU5UKSB8IFMyX1RFWENPT1JEX0ZNVCgwLCBURVhDT09SREZNVF8yRCkpOwotCQlPVVRf QkFUQ0goUzZfQ0JVRl9CTEVORF9FTkFCTEUgfCBTNl9DT0xPUl9XUklURV9FTkFCTEUgfAotCQkJ ICBCTEVOREZVTkNfQUREIDw8IFM2X0NCVUZfQkxFTkRfRlVOQ19TSElGVCB8Ci0JCQkgIEJMRU5E RkFDVF9PTkUgPDwgUzZfQ0JVRl9TUkNfQkxFTkRfRkFDVF9TSElGVCB8Ci0JCQkgIEJMRU5ERkFD VF9aRVJPIDw8IFM2X0NCVUZfRFNUX0JMRU5EX0ZBQ1RfU0hJRlQpOworCQlpbnRlbF9iYl9vdXQo aWJiLCBfM0RTVEFURV9MT0FEX1NUQVRFX0lNTUVESUFURV8xIHwKKwkJCSAgICAgSTFfTE9BRF9T KDEpIHwgSTFfTE9BRF9TKDIpIHwgSTFfTE9BRF9TKDYpIHwgMik7CisJCWludGVsX2JiX291dChp YmIsICg0IDw8IFMxX1ZFUlRFWF9XSURUSF9TSElGVCkgfAorCQkJICAgICAoNCA8PCBTMV9WRVJU RVhfUElUQ0hfU0hJRlQpKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgflMyX1RFWENPT1JEX0ZNVCgw LCBURVhDT09SREZNVF9OT1RfUFJFU0VOVCkgfCBTMl9URVhDT09SRF9GTVQoMCwgVEVYQ09PUkRG TVRfMkQpKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgUzZfQ0JVRl9CTEVORF9FTkFCTEUgfCBTNl9D T0xPUl9XUklURV9FTkFCTEUgfAorCQkJICAgICBCTEVOREZVTkNfQUREIDw8IFM2X0NCVUZfQkxF TkRfRlVOQ19TSElGVCB8CisJCQkgICAgIEJMRU5ERkFDVF9PTkUgPDwgUzZfQ0JVRl9TUkNfQkxF TkRfRkFDVF9TSElGVCB8CisJCQkgICAgIEJMRU5ERkFDVF9aRVJPIDw8IFM2X0NCVUZfRFNUX0JM RU5EX0ZBQ1RfU0hJRlQpOwogCX0KIAogCS8qIGZyYWdlIHNoYWRlciAqLwogCXsKLQkJT1VUX0JB VENIKF8zRFNUQVRFX1BJWEVMX1NIQURFUl9QUk9HUkFNIHwgKDEgKyAzKjMgLSAyKSk7CisJCWlu dGVsX2JiX291dChpYmIsIF8zRFNUQVRFX1BJWEVMX1NIQURFUl9QUk9HUkFNIHwgKDEgKyAzKjMg LSAyKSk7CiAJCS8qIGRlY2wgRlNfVDAgKi8KLQkJT1VUX0JBVENIKEQwX0RDTCB8Ci0JCQkgIFJF R19UWVBFKEZTX1QwKSA8PCBEMF9UWVBFX1NISUZUIHwKLQkJCSAgUkVHX05SKEZTX1QwKSA8PCBE MF9OUl9TSElGVCB8Ci0JCQkgICgoUkVHX1RZUEUoRlNfVDApICE9IFJFR19UWVBFX1MpID8gRDBf Q0hBTk5FTF9BTEwgOiAwKSk7Ci0JCU9VVF9CQVRDSCgwKTsKLQkJT1VUX0JBVENIKDApOworCQlp bnRlbF9iYl9vdXQoaWJiLCBEMF9EQ0wgfAorCQkJICAgICBSRUdfVFlQRShGU19UMCkgPDwgRDBf VFlQRV9TSElGVCB8CisJCQkgICAgIFJFR19OUihGU19UMCkgPDwgRDBfTlJfU0hJRlQgfAorCQkJ ICAgICAoKFJFR19UWVBFKEZTX1QwKSAhPSBSRUdfVFlQRV9TKSA/IEQwX0NIQU5ORUxfQUxMIDog MCkpOworCQlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiAJ CS8qIGRlY2wgRlNfUzAgKi8KLQkJT1VUX0JBVENIKEQwX0RDTCB8Ci0JCQkgIChSRUdfVFlQRShG U19TMCkgPDwgRDBfVFlQRV9TSElGVCkgfAotCQkJICAoUkVHX05SKEZTX1MwKSA8PCBEMF9OUl9T SElGVCkgfAotCQkJICAoKFJFR19UWVBFKEZTX1MwKSAhPSBSRUdfVFlQRV9TKSA/IEQwX0NIQU5O RUxfQUxMIDogMCkpOwotCQlPVVRfQkFUQ0goMCk7Ci0JCU9VVF9CQVRDSCgwKTsKKwkJaW50ZWxf YmJfb3V0KGliYiwgRDBfRENMIHwKKwkJCSAgICAgKFJFR19UWVBFKEZTX1MwKSA8PCBEMF9UWVBF X1NISUZUKSB8CisJCQkgICAgIChSRUdfTlIoRlNfUzApIDw8IEQwX05SX1NISUZUKSB8CisJCQkg ICAgICgoUkVHX1RZUEUoRlNfUzApICE9IFJFR19UWVBFX1MpID8gRDBfQ0hBTk5FTF9BTEwgOiAw KSk7CisJCWludGVsX2JiX291dChpYmIsIDApOworCQlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIAkJ LyogdGV4bGQoRlNfT0MsIEZTX1MwLCBGU19UMCAqLwotCQlPVVRfQkFUQ0goVDBfVEVYTEQgfAot CQkJICAoUkVHX1RZUEUoRlNfT0MpIDw8IFQwX0RFU1RfVFlQRV9TSElGVCkgfAotCQkJICAoUkVH X05SKEZTX09DKSA8PCBUMF9ERVNUX05SX1NISUZUKSB8Ci0JCQkgIChSRUdfTlIoRlNfUzApIDw8 IFQwX1NBTVBMRVJfTlJfU0hJRlQpKTsKLQkJT1VUX0JBVENIKChSRUdfVFlQRShGU19UMCkgPDwg VDFfQUREUkVTU19SRUdfVFlQRV9TSElGVCkgfAotCQkJICAoUkVHX05SKEZTX1QwKSA8PCBUMV9B RERSRVNTX1JFR19OUl9TSElGVCkpOwotCQlPVVRfQkFUQ0goMCk7CisJCWludGVsX2JiX291dChp YmIsIFQwX1RFWExEIHwKKwkJCSAgICAgKFJFR19UWVBFKEZTX09DKSA8PCBUMF9ERVNUX1RZUEVf U0hJRlQpIHwKKwkJCSAgICAgKFJFR19OUihGU19PQykgPDwgVDBfREVTVF9OUl9TSElGVCkgfAor CQkJICAgICAoUkVHX05SKEZTX1MwKSA8PCBUMF9TQU1QTEVSX05SX1NISUZUKSk7CisJCWludGVs X2JiX291dChpYmIsIChSRUdfVFlQRShGU19UMCkgPDwgVDFfQUREUkVTU19SRUdfVFlQRV9TSElG VCkgfAorCQkJICAgICAoUkVHX05SKEZTX1QwKSA8PCBUMV9BRERSRVNTX1JFR19OUl9TSElGVCkp OworCQlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIAl9CiAKLQlPVVRfQkFUQ0goUFJJTTNEX1JFQ1RM SVNUIHwgKDMqNCAtIDEpKTsKLQllbWl0X3ZlcnRleChiYXRjaCwgZHN0X3ggKyB3aWR0aCk7Ci0J ZW1pdF92ZXJ0ZXgoYmF0Y2gsIGRzdF95ICsgaGVpZ2h0KTsKLQllbWl0X3ZlcnRleChiYXRjaCwg c3JjX3ggKyB3aWR0aCk7Ci0JZW1pdF92ZXJ0ZXgoYmF0Y2gsIHNyY195ICsgaGVpZ2h0KTsKKwlp bnRlbF9iYl9vdXQoaWJiLCBQUklNM0RfUkVDVExJU1QgfCAoMyo0IC0gMSkpOworCWVtaXRfdmVy dGV4KGliYiwgZHN0X3ggKyB3aWR0aCk7CisJZW1pdF92ZXJ0ZXgoaWJiLCBkc3RfeSArIGhlaWdo dCk7CisJZW1pdF92ZXJ0ZXgoaWJiLCBzcmNfeCArIHdpZHRoKTsKKwllbWl0X3ZlcnRleChpYmIs IHNyY195ICsgaGVpZ2h0KTsKIAotCWVtaXRfdmVydGV4KGJhdGNoLCBkc3RfeCk7Ci0JZW1pdF92 ZXJ0ZXgoYmF0Y2gsIGRzdF95ICsgaGVpZ2h0KTsKLQllbWl0X3ZlcnRleChiYXRjaCwgc3JjX3gp OwotCWVtaXRfdmVydGV4KGJhdGNoLCBzcmNfeSArIGhlaWdodCk7CisJZW1pdF92ZXJ0ZXgoaWJi LCBkc3RfeCk7CisJZW1pdF92ZXJ0ZXgoaWJiLCBkc3RfeSArIGhlaWdodCk7CisJZW1pdF92ZXJ0 ZXgoaWJiLCBzcmNfeCk7CisJZW1pdF92ZXJ0ZXgoaWJiLCBzcmNfeSArIGhlaWdodCk7CiAKLQll bWl0X3ZlcnRleChiYXRjaCwgZHN0X3gpOwotCWVtaXRfdmVydGV4KGJhdGNoLCBkc3RfeSk7Ci0J ZW1pdF92ZXJ0ZXgoYmF0Y2gsIHNyY194KTsKLQllbWl0X3ZlcnRleChiYXRjaCwgc3JjX3kpOwor CWVtaXRfdmVydGV4KGliYiwgZHN0X3gpOworCWVtaXRfdmVydGV4KGliYiwgZHN0X3kpOworCWVt aXRfdmVydGV4KGliYiwgc3JjX3gpOworCWVtaXRfdmVydGV4KGliYiwgc3JjX3kpOwogCi0JaW50 ZWxfYmF0Y2hidWZmZXJfZmx1c2goYmF0Y2gpOworCWludGVsX2JiX2ZsdXNoX2JsaXRfd2l0aF9j b250ZXh0KGliYiwgY3R4KTsKIH0KZGlmZiAtLWdpdCBhL2xpYi92ZWJveGNvcHkuaCBiL2xpYi92 ZWJveGNvcHkuaAppbmRleCA5NDlkODNiZi4uOTI1YjhmNTIgMTAwNjQ0Ci0tLSBhL2xpYi92ZWJv eGNvcHkuaAorKysgYi9saWIvdmVib3hjb3B5LmgKQEAgLTEsOSArMSw5IEBACiAjaWZuZGVmIF9f VkVCT1hDT1BZX0hfXwogI2RlZmluZSBfX1ZFQk9YQ09QWV9IX18KIAotdm9pZCBnZW4xMl92ZWJv eF9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJICBjb25zdCBz dHJ1Y3QgaWd0X2J1ZiAqc3JjLAotCQkJICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0 LAotCQkJICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0KTsKK3ZvaWQgZ2VuMTJfdmVib3hfY29w eWZ1bmMoc3RydWN0IGludGVsX2JiICppYmIsCisJCQkgIHN0cnVjdCBpbnRlbF9idWYgKnNyYywK KwkJCSAgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LAorCQkJICBzdHJ1 Y3QgaW50ZWxfYnVmICpkc3QpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi92ZWJveGNvcHlf Z2VuMTIuYyBiL2xpYi92ZWJveGNvcHlfZ2VuMTIuYwppbmRleCAyMzdjNDNmMi4uYTQ0ZTJiZmYg MTAwNjQ0Ci0tLSBhL2xpYi92ZWJveGNvcHlfZ2VuMTIuYworKysgYi9saWIvdmVib3hjb3B5X2dl bjEyLmMKQEAgLTE0NCw3ICsxNDQsNyBAQCBzdGF0aWMgYm9vbCBmb3JtYXRfaXNfaW50ZXJsZWF2 ZWRfeXV2KGludCBmb3JtYXQpCiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgdm9pZCBlbWl0 X3N1cmZhY2Vfc3RhdGVfY21kKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCitzdGF0 aWMgdm9pZCBlbWl0X3N1cmZhY2Vfc3RhdGVfY21kKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAogCQkJ CSAgIGludCBzdXJmYWNlX2lkLAogCQkJCSAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGJw cCwKIAkJCQkgICBpbnQgcGl0Y2gsIHVpbnQzMl90IHRpbGluZywgaW50IGZvcm1hdCwKQEAgLTE1 Miw3ICsxNTIsNyBAQCBzdGF0aWMgdm9pZCBlbWl0X3N1cmZhY2Vfc3RhdGVfY21kKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiB7CiAJc3RydWN0IHZlYm94X3N1cmZhY2Vfc3RhdGUg KnNzOwogCi0Jc3MgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX2FsbG9jKGJhdGNoLCBzaXpl b2YoKnNzKSwgNCk7CisJc3MgPSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCA0KTsKIAogCXNzLT5z czAuY21kX3R5cGUgPSAzOwogCXNzLT5zczAubWVkaWFfY21kX3BpcGVsaW5lID0gMjsKQEAgLTE3 NSwyMSArMTc1LDE5IEBAIHN0YXRpYyB2b2lkIGVtaXRfc3VyZmFjZV9zdGF0ZV9jbWQoc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAlzcy0+c3M0LnVfeV9vZmZzZXQgPSB1dl9vZmZz ZXQgLyBwaXRjaDsKIAogCXNzLT5zczcuZGVyaXZlZF9zdXJmYWNlX3BpdGNoID0gcGl0Y2ggLSAx OworCisJaW50ZWxfYmJfcHRyX2FkZChpYmIsIHNpemVvZigqc3MpKTsKIH0KIAotc3RhdGljIHZv aWQgZW1pdF90aWxpbmdfY29udmVydF9jbWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCwKLQkJCQkgICAgZHJtX2ludGVsX2JvICppbnB1dF9ibywKLQkJCQkgICAgdWludDMyX3QgaW5w dXRfdGlsaW5nLAotCQkJCSAgICB1aW50MzJfdCBpbnB1dF9jb21wcmVzc2lvbiwKLQkJCQkgICAg ZHJtX2ludGVsX2JvICpvdXRwdXRfYm8sCi0JCQkJICAgIHVpbnQzMl90IG91dHB1dF90aWxpbmcs Ci0JCQkJICAgIHVpbnQzMl90IG91dHB1dF9jb21wcmVzc2lvbikKK3N0YXRpYyB2b2lkIGVtaXRf dGlsaW5nX2NvbnZlcnRfY21kKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJCSAgICBzdHJ1Y3Qg aW50ZWxfYnVmICpzcmMsCisJCQkJICAgIHN0cnVjdCBpbnRlbF9idWYgKmRzdCkKIHsKLQl1aW50 MzJfdCByZWxvY19kZWx0YTsKKwl1aW50MzJfdCByZWxvY19kZWx0YSwgdGNfb2Zmc2V0LCBvZmZz ZXQ7CiAJc3RydWN0IHZlYm94X3RpbGluZ19jb252ZXJ0ICp0YzsKLQlpbnQgcmV0OwogCi0JdGMg PSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX2FsbG9jKGJhdGNoLCBzaXplb2YoKnRjKSwgOCk7 CisJdGMgPSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCA4KTsKKwl0Y19vZmZzZXQgPSBpbnRlbF9i Yl9vZmZzZXQoaWJiKTsKIAogCXRjLT50YzAuY21kX3R5cGUgPSAzOwogCXRjLT50YzAucGlwZWxp bmUgPSAyOwpAQCAtMTk4LDcxICsxOTYsNzAgQEAgc3RhdGljIHZvaWQgZW1pdF90aWxpbmdfY29u dmVydF9jbWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAogCXRjLT50YzAuZHdf Y291bnQgPSAzOwogCi0JaWYgKGlucHV0X2NvbXByZXNzaW9uICE9IEk5MTVfQ09NUFJFU1NJT05f Tk9ORSkgeworCWlmIChzcmMtPmNvbXByZXNzaW9uICE9IEk5MTVfQ09NUFJFU1NJT05fTk9ORSkg ewogCQl0Yy0+dGMxXzIuaW5wdXRfbWVtb3J5X2NvbXByZXNzaW9uX2VuYWJsZSA9IDE7CiAJCXRj LT50YzFfMi5pbnB1dF9jb21wcmVzc2lvbl90eXBlID0KLQkJCWlucHV0X2NvbXByZXNzaW9uID09 IEk5MTVfQ09NUFJFU1NJT05fUkVOREVSOworCQkJc3JjLT5jb21wcmVzc2lvbiA9PSBJOTE1X0NP TVBSRVNTSU9OX1JFTkRFUjsKIAl9Ci0JdGMtPnRjMV8yLmlucHV0X3RpbGVkX3Jlc291cmNlX21v ZGUgPSBpbnB1dF90aWxpbmcgPT0gSTkxNV9USUxJTkdfWWY7CisJdGMtPnRjMV8yLmlucHV0X3Rp bGVkX3Jlc291cmNlX21vZGUgPSBzcmMtPnRpbGluZyA9PSBJOTE1X1RJTElOR19ZZjsKIAlyZWxv Y19kZWx0YSA9IHRjLT50YzFfMl9sOwogCi0JaWd0X2Fzc2VydChpbnB1dF9iby0+b2Zmc2V0NjQg PT0gQUxJR04oaW5wdXRfYm8tPm9mZnNldDY0LCAweDEwMDApKTsKLQl0Yy0+dGMxXzIuaW5wdXRf YWRkcmVzcyA9IGlucHV0X2JvLT5vZmZzZXQ2NCA+PiAxMjsKKwlpZ3RfYXNzZXJ0KHNyYy0+YWRk ci5vZmZzZXQgPT0gQUxJR04oc3JjLT5hZGRyLm9mZnNldCwgMHgxMDAwKSk7CisJdGMtPnRjMV8y LmlucHV0X2FkZHJlc3MgPSBzcmMtPmFkZHIub2Zmc2V0ID4+IDEyOwogCWlndF9hc3NlcnQocmVs b2NfZGVsdGEgPD0gSU5UMzJfTUFYKTsKLQlyZXQgPSBkcm1faW50ZWxfYm9fZW1pdF9yZWxvYyhi YXRjaC0+Ym8sCi0JCQkJICAgICAgaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0 Y2gsIHRjKSArCi0JCQkJCW9mZnNldG9mKHR5cGVvZigqdGMpLCB0YzFfMiksCi0JCQkJICAgICAg aW5wdXRfYm8sIHJlbG9jX2RlbHRhLAotCQkJCSAgICAgIDAsIDApOwotCWlndF9hc3NlcnQocmV0 ID09IDApOwotCi0JaWYgKG91dHB1dF9jb21wcmVzc2lvbiAhPSBJOTE1X0NPTVBSRVNTSU9OX05P TkUpIHsKKworCW9mZnNldCA9IHRjX29mZnNldCArIG9mZnNldG9mKHR5cGVvZigqdGMpLCB0YzFf Mik7CisJaW50ZWxfYmJfb2Zmc2V0X3JlbG9jX3dpdGhfZGVsdGEoaWJiLCBzcmMtPmhhbmRsZSwg MCwgMCwKKwkJCQkJIHJlbG9jX2RlbHRhLCBvZmZzZXQsCisJCQkJCSBzcmMtPmFkZHIub2Zmc2V0 KTsKKworCWlmIChkc3QtPmNvbXByZXNzaW9uICE9IEk5MTVfQ09NUFJFU1NJT05fTk9ORSkgewog CQl0Yy0+dGMzXzQub3V0cHV0X21lbW9yeV9jb21wcmVzc2lvbl9lbmFibGUgPSAxOwogCQl0Yy0+ dGMzXzQub3V0cHV0X2NvbXByZXNzaW9uX3R5cGUgPQotCQkJb3V0cHV0X2NvbXByZXNzaW9uID09 IEk5MTVfQ09NUFJFU1NJT05fUkVOREVSOworCQkJZHN0LT5jb21wcmVzc2lvbiA9PSBJOTE1X0NP TVBSRVNTSU9OX1JFTkRFUjsKIAl9Ci0JdGMtPnRjM180Lm91dHB1dF90aWxlZF9yZXNvdXJjZV9t b2RlID0gb3V0cHV0X3RpbGluZyA9PSBJOTE1X1RJTElOR19ZZjsKKwl0Yy0+dGMzXzQub3V0cHV0 X3RpbGVkX3Jlc291cmNlX21vZGUgPSBkc3QtPnRpbGluZyA9PSBJOTE1X1RJTElOR19ZZjsKIAly ZWxvY19kZWx0YSA9IHRjLT50YzNfNF9sOwogCi0JaWd0X2Fzc2VydChvdXRwdXRfYm8tPm9mZnNl dDY0ID09IEFMSUdOKG91dHB1dF9iby0+b2Zmc2V0NjQsIDB4MTAwMCkpOwotCXRjLT50YzNfNC5v dXRwdXRfYWRkcmVzcyA9IG91dHB1dF9iby0+b2Zmc2V0NjQgPj4gMTI7CisJaWd0X2Fzc2VydChk c3QtPmFkZHIub2Zmc2V0ID09IEFMSUdOKGRzdC0+YWRkci5vZmZzZXQsIDB4MTAwMCkpOworCXRj LT50YzNfNC5vdXRwdXRfYWRkcmVzcyA9IGRzdC0+YWRkci5vZmZzZXQgPj4gMTI7CiAJaWd0X2Fz c2VydChyZWxvY19kZWx0YSA8PSBJTlQzMl9NQVgpOwotCXJldCA9IGRybV9pbnRlbF9ib19lbWl0 X3JlbG9jKGJhdGNoLT5ibywKLQkJCQkgICAgICBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29m ZnNldChiYXRjaCwgdGMpICsKLQkJCQkJb2Zmc2V0b2YodHlwZW9mKCp0YyksIHRjM180KSwKLQkJ CQkgICAgICBvdXRwdXRfYm8sIHJlbG9jX2RlbHRhLAotCQkJCSAgICAgIDAsIEk5MTVfR0VNX0RP TUFJTl9SRU5ERVIpOwotCWlndF9hc3NlcnQocmV0ID09IDApOwogCisJb2Zmc2V0ID0gdGNfb2Zm c2V0ICsgb2Zmc2V0b2YodHlwZW9mKCp0YyksIHRjM180KTsKKwlpbnRlbF9iYl9vZmZzZXRfcmVs b2Nfd2l0aF9kZWx0YShpYmIsIGRzdC0+aGFuZGxlLAorCQkJCQkgMCwgSTkxNV9HRU1fRE9NQUlO X1JFTkRFUiwKKwkJCQkJIHJlbG9jX2RlbHRhLCBvZmZzZXQsCisJCQkJCSBkc3QtPmFkZHIub2Zm c2V0KTsKKworCWludGVsX2JiX3B0cl9hZGQoaWJiLCBzaXplb2YoKnRjKSk7CiB9CiAKIC8qIEJv cnJvd2luZyB0aGUgaWRlYSBmcm9tIHRoZSByZW5kZXJjb3B5IHN0YXRlIHNldHVwLiAqLwogI2Rl ZmluZSBCQVRDSF9TVEFURV9TUExJVCAyMDQ4CiAKLXZvaWQgZ2VuMTJfdmVib3hfY29weWZ1bmMo c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9i dWYgKnNyYywKLQkJCSAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKLQkJCSAgY29u c3Qgc3RydWN0IGlndF9idWYgKmRzdCkKK3ZvaWQgZ2VuMTJfdmVib3hfY29weWZ1bmMoc3RydWN0 IGludGVsX2JiICppYmIsCisJCQkgIHN0cnVjdCBpbnRlbF9idWYgKnNyYywKKwkJCSAgdW5zaWdu ZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LAorCQkJICBzdHJ1Y3QgaW50ZWxfYnVm ICpkc3QpCiB7CiAJc3RydWN0IGF1eF9wZ3RhYmxlX2luZm8gYXV4X3BndGFibGVfaW5mbyA9IHsg fTsKIAl1aW50MzJfdCBhdXhfcGd0YWJsZV9zdGF0ZTsKIAlpbnQgZm9ybWF0OwogCi0JaW50ZWxf YmF0Y2hidWZmZXJfZmx1c2hfb25fcmluZyhiYXRjaCwgSTkxNV9FWEVDX1ZFQk9YKTsKKwlpZ3Rf YXNzZXJ0KHNyYy0+YnBwID09IGRzdC0+YnBwKTsKIAotCWludGVsX2JhdGNoYnVmZmVyX2FsaWdu KGJhdGNoLCA4KTsKKwlpbnRlbF9iYl9mbHVzaChpYmIsIGliYi0+Y3R4LCBJOTE1X0VYRUNfVkVC T1gpOwogCi0JYmF0Y2gtPnB0ciA9ICZiYXRjaC0+YnVmZmVyW0JBVENIX1NUQVRFX1NQTElUXTsK KwlpbnRlbF9iYl9hZGRfaW50ZWxfYnVmKGliYiwgZHN0LCB0cnVlKTsKKwlpbnRlbF9iYl9hZGRf aW50ZWxfYnVmKGliYiwgc3JjLCBmYWxzZSk7CiAKLQlnZW4xMl9hdXhfcGd0YWJsZV9pbml0KCZh dXhfcGd0YWJsZV9pbmZvLCBiYXRjaC0+YnVmbWdyLCBzcmMsIGRzdCk7CisJaW50ZWxfYmJfcHRy X3NldChpYmIsIEJBVENIX1NUQVRFX1NQTElUKTsKKwlnZW4xMl9hdXhfcGd0YWJsZV9pbml0KCZh dXhfcGd0YWJsZV9pbmZvLCBpYmIsIHNyYywgZHN0KTsKKwlhdXhfcGd0YWJsZV9zdGF0ZSA9IGdl bjEyX2NyZWF0ZV9hdXhfcGd0YWJsZV9zdGF0ZShpYmIsCisJCQkJCQkJICAgYXV4X3BndGFibGVf aW5mby5wZ3RhYmxlX2J1Zik7CiAKLQlhdXhfcGd0YWJsZV9zdGF0ZSA9IGdlbjEyX2NyZWF0ZV9h dXhfcGd0YWJsZV9zdGF0ZShiYXRjaCwKLQkJCQkJCQkgICBhdXhfcGd0YWJsZV9pbmZvLnBndGFi bGVfYm8pOwotCi0JYXNzZXJ0KGJhdGNoLT5wdHIgPCAmYmF0Y2gtPmJ1ZmZlcls0MDk1XSk7Ci0J YmF0Y2gtPnB0ciA9IGJhdGNoLT5idWZmZXI7Ci0KLQlnZW4xMl9lbWl0X2F1eF9wZ3RhYmxlX3N0 YXRlKGJhdGNoLCBhdXhfcGd0YWJsZV9zdGF0ZSwgZmFsc2UpOworCWludGVsX2JiX3B0cl9zZXQo aWJiLCAwKTsKKwlnZW4xMl9lbWl0X2F1eF9wZ3RhYmxlX3N0YXRlKGliYiwgYXV4X3BndGFibGVf c3RhdGUsIGZhbHNlKTsKIAogCS8qIFRoZSB0aWxpbmcgY29udmVydCBjb21tYW5kIGNhbid0IGNv bnZlcnQgZm9ybWF0cy4gKi8KIAlpZ3RfYXNzZXJ0X2VxKHNyYy0+Zm9ybWF0X2lzX3l1diwgZHN0 LT5mb3JtYXRfaXNfeXV2KTsKQEAgLTI5MiwyNCArMjg5LDI2IEBAIHZvaWQgZ2VuMTJfdmVib3hf Y29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAogCWlndF9hc3NlcnQo IXNyYy0+Zm9ybWF0X2lzX3l1dl9zZW1pcGxhbmFyIHx8CiAJCSAgIChzcmMtPnN1cmZhY2VbMV0u b2Zmc2V0ICYmIGRzdC0+c3VyZmFjZVsxXS5vZmZzZXQpKTsKLQllbWl0X3N1cmZhY2Vfc3RhdGVf Y21kKGJhdGNoLCBWRUJPWF9TVVJGQUNFX0lOUFVULAorCWVtaXRfc3VyZmFjZV9zdGF0ZV9jbWQo aWJiLCBWRUJPWF9TVVJGQUNFX0lOUFVULAogCQkJICAgICAgIHdpZHRoLCBoZWlnaHQsIHNyYy0+ YnBwLAogCQkJICAgICAgIHNyYy0+c3VyZmFjZVswXS5zdHJpZGUsCiAJCQkgICAgICAgc3JjLT50 aWxpbmcsIGZvcm1hdCwgc3JjLT5zdXJmYWNlWzFdLm9mZnNldCk7CiAKLQllbWl0X3N1cmZhY2Vf c3RhdGVfY21kKGJhdGNoLCBWRUJPWF9TVVJGQUNFX09VVFBVVCwKKwllbWl0X3N1cmZhY2Vfc3Rh dGVfY21kKGliYiwgVkVCT1hfU1VSRkFDRV9PVVRQVVQsCiAJCQkgICAgICAgd2lkdGgsIGhlaWdo dCwgZHN0LT5icHAsCiAJCQkgICAgICAgZHN0LT5zdXJmYWNlWzBdLnN0cmlkZSwKIAkJCSAgICAg ICBkc3QtPnRpbGluZywgZm9ybWF0LCBkc3QtPnN1cmZhY2VbMV0ub2Zmc2V0KTsKIAotCWVtaXRf dGlsaW5nX2NvbnZlcnRfY21kKGJhdGNoLAotCQkJCXNyYy0+Ym8sIHNyYy0+dGlsaW5nLCBzcmMt PmNvbXByZXNzaW9uLAotCQkJCWRzdC0+Ym8sIGRzdC0+dGlsaW5nLCBkc3QtPmNvbXByZXNzaW9u KTsKKwllbWl0X3RpbGluZ19jb252ZXJ0X2NtZChpYmIsIHNyYywgZHN0KTsKKworCWludGVsX2Ji X291dChpYmIsIE1JX0JBVENIX0JVRkZFUl9FTkQpOworCWludGVsX2JiX3B0cl9hbGlnbihpYmIs IDgpOwogCi0JT1VUX0JBVENIKE1JX0JBVENIX0JVRkZFUl9FTkQpOworCWludGVsX2JiX2V4ZWNf d2l0aF9jb250ZXh0KGliYiwgaW50ZWxfYmJfb2Zmc2V0KGliYiksIDAsCisJCQkJICAgSTkxNV9F WEVDX1ZFQk9YIHwgSTkxNV9FWEVDX05PX1JFTE9DLAorCQkJCSAgIGZhbHNlKTsKIAotCWludGVs X2JhdGNoYnVmZmVyX2ZsdXNoX29uX3JpbmcoYmF0Y2gsIEk5MTVfRVhFQ19WRUJPWCk7CisJaW50 ZWxfYmJfcmVzZXQoaWJiLCBmYWxzZSk7CiAKLQlnZW4xMl9hdXhfcGd0YWJsZV9jbGVhbnVwKCZh dXhfcGd0YWJsZV9pbmZvKTsKLQlpbnRlbF9iYXRjaGJ1ZmZlcl9yZXNldChiYXRjaCk7CisJZ2Vu MTJfYXV4X3BndGFibGVfY2xlYW51cChpYmIsICZhdXhfcGd0YWJsZV9pbmZvKTsKIH0KLS0gCjIu MjYuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0 LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2Cg==