From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: [PATCH i-g-t v2 14/14] tests/kms_atomic: Convert/rewrite tests to use igt_kms framework Date: Thu, 12 Oct 2017 13:54:35 +0200 Message-ID: <20171012115435.18880-15-maarten.lankhorst@linux.intel.com> References: <20171012115435.18880-1-maarten.lankhorst@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mblankhorst.nl (mblankhorst.nl [141.105.120.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9C4D86E80E for ; Thu, 12 Oct 2017 11:54:42 +0000 (UTC) In-Reply-To: <20171012115435.18880-1-maarten.lankhorst@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: Daniel Stone List-Id: intel-gfx@lists.freedesktop.org Tm93IHRoYXQgd2UgY2FuIHNldCBpbmRpdmlkdWFsIHByb3BlcnRpZXMgdGhyb3VnaCB0aGUgaWd0 X2ttcyBhcGksCndlIG5vIGxvbmdlciBuZWVkIHRvIGR1cGxpY2F0ZSBmdW5jdGlvbmFsaXR5IGZy b20gaWd0X2ttcy4gU2V0IGludmFsaWQKcHJvcGVydGllcyBkaXJlY3RseSwgYW5kIHJld3JpdGUg a21zX2F0b21pYy5jIHRvIHVzZSBpZ3RfZGlzcGxheS4KVGhpcyB3aWxsIGFsbG93IHVzIHRvIHJl bW92ZSBhIGxvdCBvZiBjb2RlIGluIGttc19hdG9taWMuYywKYW5kIGJlbmVmaXQgZnJvbSBob3cg aWd0X2ttcyBjYW4gc2V0IHVwIGEgdmFsaWQgY29uZmlndXJhdGlvbiwKaW5zdGVhZCBvZiBoYXZp bmcgdG8gaW5oZXJpdCBpdCBmcm9tIGZiY29uLgoKU2lnbmVkLW9mZi1ieTogTWFhcnRlbiBMYW5r aG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4LmludGVsLmNvbT4KQ2M6IERhbmllbCBTdG9u ZSA8ZGFuaWVsc0Bjb2xsYWJvcmEuY29tPgotLS0KIHRlc3RzL2ttc19hdG9taWMuYyB8IDE2Njgg KysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBm aWxlIGNoYW5nZWQsIDUxMCBpbnNlcnRpb25zKCspLCAxMTU4IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3Rlc3RzL2ttc19hdG9taWMuYyBiL3Rlc3RzL2ttc19hdG9taWMuYwppbmRleCAwNDJh N2MyNjNhYWIuLjMyYjkyMjVjYmE4OSAxMDA2NDQKLS0tIGEvdGVzdHMva21zX2F0b21pYy5jCisr KyBiL3Rlc3RzL2ttc19hdG9taWMuYwpAQCAtNDYsMTAgKzQ2LDYgQEAKICNpbmNsdWRlICJpZ3Rf YXV4LmgiCiAjaW5jbHVkZSAic3dfc3luYy5oIgogCi0jaWZuZGVmIERSTV9DTElFTlRfQ0FQX0FU T01JQwotI2RlZmluZSBEUk1fQ0xJRU5UX0NBUF9BVE9NSUMgMwotI2VuZGlmCi0KICNpZm5kZWYg RFJNX0NBUF9DVVJTT1JfV0lEVEgKICNkZWZpbmUgRFJNX0NBUF9DVVJTT1JfV0lEVEggMHg4CiAj ZW5kaWYKQEAgLTU4LDIzICs1NCw2IEBACiAjZGVmaW5lIERSTV9DQVBfQ1VSU09SX0hFSUdIVCAw eDkKICNlbmRpZgogCi0jaWZuZGVmIERSTV9NT0RFX0FUT01JQ19URVNUX09OTFkKLSNkZWZpbmUg RFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSAweDAxMDAKLSNkZWZpbmUgRFJNX01PREVfQVRPTUlD X05PTkJMT0NLIDB4MDIwMAotI2RlZmluZSBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCAw eDA0MDAKLQotc3RydWN0IGRybV9tb2RlX2F0b21pYyB7Ci0JX191MzIgZmxhZ3M7Ci0JX191MzIg Y291bnRfb2JqczsKLQlfX3U2NCBvYmpzX3B0cjsKLQlfX3U2NCBjb3VudF9wcm9wc19wdHI7Ci0J X191NjQgcHJvcHNfcHRyOwotCV9fdTY0IHByb3BfdmFsdWVzX3B0cjsKLQlfX3U2NCByZXNlcnZl ZDsKLQlfX3U2NCB1c2VyX2RhdGE7Ci19OwotI2VuZGlmCi0KIElHVF9URVNUX0RFU0NSSVBUSU9O KCJUZXN0IGF0b21pYyBtb2Rlc2V0dGluZyBBUEkiKTsKIAogZW51bSBrbXNfYXRvbWljX2NoZWNr X3JlbGF4IHsKQEAgLTgzLDEyNTkgKzYyLDY1MiBAQCBlbnVtIGttc19hdG9taWNfY2hlY2tfcmVs YXggewogCVBMQU5FX1JFTEFYX0ZCID0gKDEgPDwgMSkKIH07CiAKLS8qKgotICogS01TIHBsYW5l IHR5cGUgZW51bQotICoKLSAqIEtNUyBwbGFuZSB0eXBlcyBhcmUgcmVwcmVzZW50ZWQgYnkgZW51 bXMsIHdoaWNoIGRvIG5vdCBoYXZlIHN0YWJsZSBudW1lcmljCi0gKiB2YWx1ZXMsIGJ1dCBtdXN0 IGJlIGxvb2tlZCB1cCBieSB0aGVpciBzdHJpbmcgdmFsdWUgZWFjaCB0aW1lLgotICoKLSAqIFRv IG1ha2UgdGhlIGNvZGUgbW9yZSBzaW1wbGUsIHdlIGRlZmluZSBhIHBsYW5lX3R5cGUgZW51bSB3 aGljaCBtYXBzIHRvCi0gKiBlYWNoIEtNUyBlbnVtIHZhbHVlLiBUaGVzZSB2YWx1ZXMgbXVzdCBi ZSBsb29rZWQgdXAgdGhyb3VnaCB0aGUgbWFwLCBhbmQKLSAqIGNhbm5vdCBiZSBwYXNzZWQgZGly ZWN0bHkgdG8gS01TIGZ1bmN0aW9ucy4KLSAqLwotZW51bSBwbGFuZV90eXBlIHsKLQlQTEFORV9U WVBFX1BSSU1BUlkgPSAwLAotCVBMQU5FX1RZUEVfT1ZFUkxBWSwKLQlQTEFORV9UWVBFX0NVUlNP UiwKLQlOVU1fUExBTkVfVFlQRV9QUk9QUwotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKnBsYW5l X3R5cGVfcHJvcF9uYW1lc1tOVU1fUExBTkVfVFlQRV9QUk9QU10gPSB7Ci0JIlByaW1hcnkiLAot CSJPdmVybGF5IiwKLQkiQ3Vyc29yIgotfTsKLQotc3RydWN0IGttc19hdG9taWNfYmxvYiB7Ci0J dWludDMyX3QgaWQ7IC8qIDAgaWYgbm90IGFscmVhZHkgYWxsb2NhdGVkICovCi0Jc2l6ZV90IGxl bjsKLQl2b2lkICpkYXRhOwotfTsKLQotc3RydWN0IGttc19hdG9taWNfY29ubmVjdG9yX3N0YXRl IHsKLQlzdHJ1Y3Qga21zX2F0b21pY19zdGF0ZSAqc3RhdGU7Ci0JdWludDMyX3Qgb2JqOwotCXVp bnQzMl90IGNydGNfaWQ7Ci19OwotCi1zdHJ1Y3Qga21zX2F0b21pY19wbGFuZV9zdGF0ZSB7Ci0J c3RydWN0IGttc19hdG9taWNfc3RhdGUgKnN0YXRlOwotCXVpbnQzMl90IG9iajsKLQllbnVtIHBs YW5lX3R5cGUgdHlwZTsKLQl1aW50MzJfdCBjcnRjX21hc2s7Ci0JdWludDMyX3QgY3J0Y19pZDsg LyogMCB0byBkaXNhYmxlICovCi0JdWludDMyX3QgZmJfaWQ7IC8qIDAgdG8gZGlzYWJsZSAqLwot CXVpbnQzMl90IHNyY194LCBzcmNfeSwgc3JjX3csIHNyY19oOyAvKiAxNi4xNiBmaXhlZC1wb2lu dCAqLwotCXVpbnQzMl90IGNydGNfeCwgY3J0Y195LCBjcnRjX3csIGNydGNfaDsgLyogbm9ybWFs IGludGVnZXJzICovCi0JaW50MzJfdCBmZW5jZV9mZDsKLX07Ci0KLXN0cnVjdCBrbXNfYXRvbWlj X2NydGNfc3RhdGUgewotCXN0cnVjdCBrbXNfYXRvbWljX3N0YXRlICpzdGF0ZTsKLQl1aW50MzJf dCBvYmo7Ci0JaW50IGlkeDsKLQlib29sIGFjdGl2ZTsKLQlpbnQzMl90ICpvdXRfZmVuY2VfcHRy OwotCXN0cnVjdCBrbXNfYXRvbWljX2Jsb2IgbW9kZTsKLX07Ci0KLXN0cnVjdCBrbXNfYXRvbWlj X3N0YXRlIHsKLQlzdHJ1Y3Qga21zX2F0b21pY19jb25uZWN0b3Jfc3RhdGUgKmNvbm5lY3RvcnM7 Ci0JaW50IG51bV9jb25uZWN0b3JzOwotCXN0cnVjdCBrbXNfYXRvbWljX2NydGNfc3RhdGUgKmNy dGNzOwotCWludCBudW1fY3J0Y3M7Ci0Jc3RydWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUgKnBs YW5lczsKLQlpbnQgbnVtX3BsYW5lczsKLQlzdHJ1Y3Qga21zX2F0b21pY19kZXNjICpkZXNjOwot fTsKLQotc3RydWN0IGttc19hdG9taWNfZGVzYyB7Ci0JaW50IGZkOwotCXVpbnQzMl90IHByb3Bz X2Nvbm5lY3RvcltJR1RfTlVNX0NPTk5FQ1RPUl9QUk9QU107Ci0JdWludDMyX3QgcHJvcHNfY3J0 Y1tJR1RfTlVNX0NSVENfUFJPUFNdOwotCXVpbnQzMl90IHByb3BzX3BsYW5lW0lHVF9OVU1fUExB TkVfUFJPUFNdOwotCXVpbnQ2NF90IHByb3BzX3BsYW5lX3R5cGVbTlVNX1BMQU5FX1RZUEVfUFJP UFNdOwotfTsKLQotc3RhdGljIHVpbnQzMl90IGJsb2JfZHVwbGljYXRlKGludCBmZCwgdWludDMy X3QgaWRfb3JpZykKK3N0YXRpYyBib29sIHBsYW5lX2ZpbHRlcihlbnVtIGlndF9hdG9taWNfcGxh bmVfcHJvcGVydGllcyBwcm9wKQogewotCWRybU1vZGVQcm9wZXJ0eUJsb2JQdHIgb3JpZyA9IGRy bU1vZGVHZXRQcm9wZXJ0eUJsb2IoZmQsIGlkX29yaWcpOwotCXVpbnQzMl90IGlkX25ldzsKLQot CWlndF9hc3NlcnQob3JpZyk7Ci0JZG9fb3JfZGllKGRybU1vZGVDcmVhdGVQcm9wZXJ0eUJsb2Io ZmQsIG9yaWctPmRhdGEsIG9yaWctPmxlbmd0aCwKLQkJCQkJICAgICZpZF9uZXcpKTsKLQlkcm1N b2RlRnJlZVByb3BlcnR5QmxvYihvcmlnKTsKKwlpZiAoKDEgPDwgcHJvcCkgJiBJR1RfUExBTkVf Q09PUkRfQ0hBTkdFRF9NQVNLKQorCQlyZXR1cm4gZmFsc2U7CiAKLQlyZXR1cm4gaWRfbmV3Owot fQotCi0jZGVmaW5lIGNydGNfc2V0X3Byb3AocmVxLCBjcnRjLCBwcm9wLCB2YWx1ZSkgXAotCWln dF9hc3NlcnRfbHQoMCwgZHJtTW9kZUF0b21pY0FkZFByb3BlcnR5KHJlcSwgY3J0Yy0+b2JqLCBc Ci0JCQkJCQkgIGNydGMtPnN0YXRlLT5kZXNjLT5wcm9wc19jcnRjW3Byb3BdLCBcCi0JCQkJCQkg IHZhbHVlKSk7Ci0KLSNkZWZpbmUgcGxhbmVfc2V0X3Byb3AocmVxLCBwbGFuZSwgcHJvcCwgdmFs dWUpIFwKLQlpZ3RfYXNzZXJ0X2x0KDAsIGRybU1vZGVBdG9taWNBZGRQcm9wZXJ0eShyZXEsIHBs YW5lLT5vYmosIFwKLQkJCQkJCSAgcGxhbmUtPnN0YXRlLT5kZXNjLT5wcm9wc19wbGFuZVtwcm9w XSwgXAotCQkJCQkJICB2YWx1ZSkpOwotCi0jZGVmaW5lIGRvX2F0b21pY19jb21taXQoZmQsIHJl cSwgZmxhZ3MpIFwKLQlkb19vcl9kaWUoZHJtTW9kZUF0b21pY0NvbW1pdChmZCwgcmVxLCBmbGFn cywgTlVMTCkpOworCWlmIChwcm9wID09IElHVF9QTEFORV9DUlRDX0lEIHx8IHByb3AgPT0gSUdU X1BMQU5FX0ZCX0lEKQorCQlyZXR1cm4gZmFsc2U7CiAKLSNkZWZpbmUgZG9fYXRvbWljX2NvbW1p dF9lcnIoZmQsIHJlcSwgZmxhZ3MsIGVycikgeyBcCi0JaWd0X2Fzc2VydF9uZXEoZHJtTW9kZUF0 b21pY0NvbW1pdChmZCwgcmVxLCBmbGFncywgTlVMTCksIDApOyBcCi0JaWd0X2Fzc2VydF9lcShl cnJubywgZXJyKTsgXAotfQotCi0jZGVmaW5lIGNydGNfY29tbWl0X2F0b21pYyhjcnRjLCBwbGFu ZSwgcmVxLCByZWxheCwgZmxhZ3MpIHsgXAotCWRybU1vZGVBdG9taWNTZXRDdXJzb3IocmVxLCAw KTsgXAotCWNydGNfcG9wdWxhdGVfcmVxKGNydGMsIHJlcSk7IFwKLQlwbGFuZV9wb3B1bGF0ZV9y ZXEocGxhbmUsIHJlcSk7IFwKLQlkb19hdG9taWNfY29tbWl0KChjcnRjKS0+c3RhdGUtPmRlc2Mt PmZkLCByZXEsIGZsYWdzKTsgXAotCWlmICghKGZsYWdzICYgRFJNX01PREVfQVRPTUlDX1RFU1Rf T05MWSkpIHsgXAotCQljcnRjX2NoZWNrX2N1cnJlbnRfc3RhdGUoY3J0YywgcGxhbmUsIHJlbGF4 KTsgXAotCQlwbGFuZV9jaGVja19jdXJyZW50X3N0YXRlKHBsYW5lLCByZWxheCk7IFwKLQl9IFwK LX0KKwlpZiAocHJvcCA9PSBJR1RfUExBTkVfSU5fRkVOQ0VfRkQpCisJCXJldHVybiBmYWxzZTsK IAotI2RlZmluZSBjcnRjX2NvbW1pdF9hdG9taWNfZXJyKGNydGMsIHBsYW5lLCBjcnRjX29sZCwg cGxhbmVfb2xkLCByZXEsIGZsYWdzLCByZWxheCwgZSkgeyBcCi0JZHJtTW9kZUF0b21pY1NldEN1 cnNvcihyZXEsIDApOyBcCi0JY3J0Y19wb3B1bGF0ZV9yZXEoY3J0YywgcmVxKTsgXAotCXBsYW5l X3BvcHVsYXRlX3JlcShwbGFuZSwgcmVxKTsgXAotCWRvX2F0b21pY19jb21taXRfZXJyKChjcnRj KS0+c3RhdGUtPmRlc2MtPmZkLCByZXEsIGZsYWdzLCBlKTsgXAotCWNydGNfY2hlY2tfY3VycmVu dF9zdGF0ZShjcnRjX29sZCwgcGxhbmVfb2xkLCByZWxheCk7IFwKLQlwbGFuZV9jaGVja19jdXJy ZW50X3N0YXRlKHBsYW5lX29sZCwgcmVsYXgpOyBcCisJLyogRG9uJ3QgY2FyZSBhYm91dCBvdGhl ciBwcm9wZXJ0aWVzICovCisJcmV0dXJuIHRydWU7CiB9CiAKLSNkZWZpbmUgcGxhbmVfY29tbWl0 X2F0b21pYyhwbGFuZSwgcmVxLCByZWxheCkgeyBcCi0JZHJtTW9kZUF0b21pY1NldEN1cnNvcihy ZXEsIDApOyBcCi0JcGxhbmVfcG9wdWxhdGVfcmVxKHBsYW5lLCByZXEpOyBcCi0JZG9fYXRvbWlj X2NvbW1pdCgocGxhbmUpLT5zdGF0ZS0+ZGVzYy0+ZmQsIHJlcSwgMCk7IFwKLQlwbGFuZV9jaGVj a19jdXJyZW50X3N0YXRlKHBsYW5lLCByZWxheCk7IFwKLX0KLQotI2RlZmluZSBwbGFuZV9jb21t aXRfYXRvbWljX2VycihwbGFuZSwgcGxhbmVfb2xkLCByZXEsIHJlbGF4LCBlKSB7IFwKLQlkcm1N b2RlQXRvbWljU2V0Q3Vyc29yKHJlcSwgMCk7IFwKLQlwbGFuZV9wb3B1bGF0ZV9yZXEocGxhbmUs IHJlcSk7IFwKLQlkb19hdG9taWNfY29tbWl0X2VycigocGxhbmUpLT5zdGF0ZS0+ZGVzYy0+ZmQs IHJlcSwgMCwgZSk7IFwKLQlwbGFuZV9jaGVja19jdXJyZW50X3N0YXRlKHBsYW5lX29sZCwgcmVs YXgpOyBcCi19Ci0KLXN0YXRpYyB2b2lkCi1jb25uZWN0b3JfZ2V0X2N1cnJlbnRfc3RhdGUoc3Ry dWN0IGttc19hdG9taWNfY29ubmVjdG9yX3N0YXRlICpjb25uZWN0b3IpCi17Ci0JZHJtTW9kZU9i amVjdFByb3BlcnRpZXNQdHIgcHJvcHM7Ci0JaW50IGk7Ci0KLQlwcm9wcyA9IGRybU1vZGVPYmpl Y3RHZXRQcm9wZXJ0aWVzKGNvbm5lY3Rvci0+c3RhdGUtPmRlc2MtPmZkLAotCQkJCQkgICBjb25u ZWN0b3ItPm9iaiwKLQkJCQkJICAgRFJNX01PREVfT0JKRUNUX0NPTk5FQ1RPUik7Ci0JaWd0X2Fz c2VydChwcm9wcyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcHJvcHMtPmNvdW50X3Byb3BzOyBpKysp IHsKLQkJdWludDMyX3QgKnByb3BfaWRzID0gY29ubmVjdG9yLT5zdGF0ZS0+ZGVzYy0+cHJvcHNf Y29ubmVjdG9yOwotCi0JCWlmIChwcm9wcy0+cHJvcHNbaV0gPT0gcHJvcF9pZHNbSUdUX0NPTk5F Q1RPUl9DUlRDX0lEXSkKLQkJCWNvbm5lY3Rvci0+Y3J0Y19pZCA9IHByb3BzLT5wcm9wX3ZhbHVl c1tpXTsKLQl9Ci0JZHJtTW9kZUZyZWVPYmplY3RQcm9wZXJ0aWVzKHByb3BzKTsKLX0KLQotI2lm IDAKLS8qIFhYWDogQ2hlY2tpbmcgdGhpcyByZXBlYXRlZGx5IGFjdHVhbGx5IGhhbmdzIHRoZSBH UFUuIEkgaGF2ZSBsaXRlcmFsbHkgbm8KLSAqICAgICAgaWRlYSB3aHkuICovCi1zdGF0aWMgdm9p ZAotY29ubmVjdG9yX2NoZWNrX2N1cnJlbnRfc3RhdGUoc3RydWN0IGttc19hdG9taWNfY29ubmVj dG9yX3N0YXRlICpjb25uZWN0b3IpCi17Ci0Jc3RydWN0IGttc19hdG9taWNfY29ubmVjdG9yX3N0 YXRlIGNvbm5lY3Rvcl9rZXJuZWw7Ci0JZHJtTW9kZUNvbm5lY3RvclB0ciBsZWdhY3k7Ci0JdWlu dDMyX3QgY3J0Y19pZDsKLQotCWxlZ2FjeSA9IGRybU1vZGVHZXRDb25uZWN0b3JDdXJyZW50KGNv bm5lY3Rvci0+c3RhdGUtPmRlc2MtPmZkLAotCQkJCQkgICAgY29ubmVjdG9yLT5vYmopOwotCWln dF9hc3NlcnQobGVnYWN5KTsKLQotCWlmIChsZWdhY3ktPmVuY29kZXJfaWQpIHsKLQkJZHJtTW9k ZUVuY29kZXJQdHIgbGVnYWN5X2VuYzsKLQotCQlsZWdhY3lfZW5jID0gZHJtTW9kZUdldEVuY29k ZXIoY29ubmVjdG9yLT5zdGF0ZS0+ZGVzYy0+ZmQsCi0JCQkJCSAgICAgICBsZWdhY3ktPmVuY29k ZXJfaWQpOwotCQlpZ3RfYXNzZXJ0KGxlZ2FjeV9lbmMpOwotCi0JCWNydGNfaWQgPSBsZWdhY3lf ZW5jLT5jcnRjX2lkOwotCQlkcm1Nb2RlRnJlZUVuY29kZXIobGVnYWN5X2VuYyk7Ci0JfSBlbHNl IHsKLQkJY3J0Y19pZCA9IDA7Ci0JfQotCi0JaWd0X2Fzc2VydF9lcV91MzIoY3J0Y19pZCwgY29u bmVjdG9yLT5jcnRjX2lkKTsKLQotCW1lbWNweSgmY29ubmVjdG9yX2tlcm5lbCwgY29ubmVjdG9y LCBzaXplb2YoY29ubmVjdG9yX2tlcm5lbCkpOwotCWNvbm5lY3Rvcl9nZXRfY3VycmVudF9zdGF0 ZSgmY29ubmVjdG9yX2tlcm5lbCk7Ci0JZG9fb3JfZGllKG1lbWNtcCgmY29ubmVjdG9yX2tlcm5l bCwgY29ubmVjdG9yLAotCQkJIHNpemVvZihjb25uZWN0b3Jfa2VybmVsKSkpOwotCi0JZHJtTW9k ZUZyZWVDb25uZWN0b3IobGVnYWN5KTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IGttc19h dG9taWNfY29ubmVjdG9yX3N0YXRlICoKLWZpbmRfY29ubmVjdG9yKHN0cnVjdCBrbXNfYXRvbWlj X3N0YXRlICpzdGF0ZSwKLQkgICAgICAgc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0 YykKK3N0YXRpYyB2b2lkIHBsYW5lX2dldF9jdXJyZW50X3N0YXRlKGlndF9wbGFuZV90ICpwbGFu ZSwgdWludDY0X3QgKnZhbHVlcykKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBzdGF0 ZS0+bnVtX2Nvbm5lY3RvcnM7IGkrKykgewotCQlzdHJ1Y3Qga21zX2F0b21pY19jb25uZWN0b3Jf c3RhdGUgKmNvbm5lY3RvciA9Ci0JCQkmc3RhdGUtPmNvbm5lY3RvcnNbaV07Ci0KLQkJaWYgKCFj b25uZWN0b3ItPm9iaikKKwlmb3IgKGkgPSAwOyBpIDwgSUdUX05VTV9QTEFORV9QUk9QUzsgaSsr KSB7CisJCWlmIChwbGFuZV9maWx0ZXIoaSkpIHsKKwkJCXZhbHVlc1tpXSA9IDA7CiAJCQljb250 aW51ZTsKLQkJaWYgKGNydGMgJiYgY29ubmVjdG9yLT5jcnRjX2lkICE9IGNydGMtPm9iaikKLQkJ CWNvbnRpbnVlOwotCi0JCXJldHVybiBjb25uZWN0b3I7Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19 Ci0KLXN0YXRpYyB2b2lkIHBsYW5lX3BvcHVsYXRlX3JlcShzdHJ1Y3Qga21zX2F0b21pY19wbGFu ZV9zdGF0ZSAqcGxhbmUsCi0JCQkgICAgICAgZHJtTW9kZUF0b21pY1JlcSAqcmVxKQotewotCWlm IChwbGFuZS0+ZmVuY2VfZmQpCi0JCXBsYW5lX3NldF9wcm9wKHJlcSwgcGxhbmUsIElHVF9QTEFO RV9JTl9GRU5DRV9GRCwgcGxhbmUtPmZlbmNlX2ZkKTsKLQotCXBsYW5lX3NldF9wcm9wKHJlcSwg cGxhbmUsIElHVF9QTEFORV9DUlRDX0lELCBwbGFuZS0+Y3J0Y19pZCk7Ci0JcGxhbmVfc2V0X3By b3AocmVxLCBwbGFuZSwgSUdUX1BMQU5FX0ZCX0lELCBwbGFuZS0+ZmJfaWQpOwotCXBsYW5lX3Nl dF9wcm9wKHJlcSwgcGxhbmUsIElHVF9QTEFORV9TUkNfWCwgcGxhbmUtPnNyY194KTsKLQlwbGFu ZV9zZXRfcHJvcChyZXEsIHBsYW5lLCBJR1RfUExBTkVfU1JDX1ksIHBsYW5lLT5zcmNfeSk7Ci0J cGxhbmVfc2V0X3Byb3AocmVxLCBwbGFuZSwgSUdUX1BMQU5FX1NSQ19XLCBwbGFuZS0+c3JjX3cp OwotCXBsYW5lX3NldF9wcm9wKHJlcSwgcGxhbmUsIElHVF9QTEFORV9TUkNfSCwgcGxhbmUtPnNy Y19oKTsKLQlwbGFuZV9zZXRfcHJvcChyZXEsIHBsYW5lLCBJR1RfUExBTkVfQ1JUQ19YLCBwbGFu ZS0+Y3J0Y194KTsKLQlwbGFuZV9zZXRfcHJvcChyZXEsIHBsYW5lLCBJR1RfUExBTkVfQ1JUQ19Z LCBwbGFuZS0+Y3J0Y195KTsKLQlwbGFuZV9zZXRfcHJvcChyZXEsIHBsYW5lLCBJR1RfUExBTkVf Q1JUQ19XLCBwbGFuZS0+Y3J0Y193KTsKLQlwbGFuZV9zZXRfcHJvcChyZXEsIHBsYW5lLCBJR1Rf UExBTkVfQ1JUQ19ILCBwbGFuZS0+Y3J0Y19oKTsKLX0KLQotc3RhdGljIHZvaWQgcGxhbmVfZ2V0 X2N1cnJlbnRfc3RhdGUoc3RydWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUgKnBsYW5lKQotewot CXN0cnVjdCBrbXNfYXRvbWljX2Rlc2MgKmRlc2MgPSBwbGFuZS0+c3RhdGUtPmRlc2M7Ci0JZHJt TW9kZU9iamVjdFByb3BlcnRpZXNQdHIgcHJvcHM7Ci0JaW50IGk7Ci0KLQlwcm9wcyA9IGRybU1v ZGVPYmplY3RHZXRQcm9wZXJ0aWVzKGRlc2MtPmZkLCBwbGFuZS0+b2JqLAotCQkJCQkgICBEUk1f TU9ERV9PQkpFQ1RfUExBTkUpOwotCWlndF9hc3NlcnQocHJvcHMpOwotCi0JZm9yIChpID0gMDsg aSA8IHByb3BzLT5jb3VudF9wcm9wczsgaSsrKSB7Ci0JCXVpbnQzMl90ICpwcm9wX2lkcyA9IGRl c2MtPnByb3BzX3BsYW5lOwotCi0JCWlmIChwcm9wcy0+cHJvcHNbaV0gPT0gcHJvcF9pZHNbSUdU X1BMQU5FX0NSVENfSURdKQotCQkJcGxhbmUtPmNydGNfaWQgPSBwcm9wcy0+cHJvcF92YWx1ZXNb aV07Ci0JCWVsc2UgaWYgKHByb3BzLT5wcm9wc1tpXSA9PSBwcm9wX2lkc1tJR1RfUExBTkVfRkJf SURdKQotCQkJcGxhbmUtPmZiX2lkID0gcHJvcHMtPnByb3BfdmFsdWVzW2ldOwotCQllbHNlIGlm IChwcm9wcy0+cHJvcHNbaV0gPT0gcHJvcF9pZHNbSUdUX1BMQU5FX0NSVENfWF0pCi0JCQlwbGFu ZS0+Y3J0Y194ID0gcHJvcHMtPnByb3BfdmFsdWVzW2ldOwotCQllbHNlIGlmIChwcm9wcy0+cHJv cHNbaV0gPT0gcHJvcF9pZHNbSUdUX1BMQU5FX0NSVENfWV0pCi0JCQlwbGFuZS0+Y3J0Y195ID0g cHJvcHMtPnByb3BfdmFsdWVzW2ldOwotCQllbHNlIGlmIChwcm9wcy0+cHJvcHNbaV0gPT0gcHJv cF9pZHNbSUdUX1BMQU5FX0NSVENfV10pCi0JCQlwbGFuZS0+Y3J0Y193ID0gcHJvcHMtPnByb3Bf dmFsdWVzW2ldOwotCQllbHNlIGlmIChwcm9wcy0+cHJvcHNbaV0gPT0gcHJvcF9pZHNbSUdUX1BM QU5FX0NSVENfSF0pCi0JCQlwbGFuZS0+Y3J0Y19oID0gcHJvcHMtPnByb3BfdmFsdWVzW2ldOwot CQllbHNlIGlmIChwcm9wcy0+cHJvcHNbaV0gPT0gcHJvcF9pZHNbSUdUX1BMQU5FX1NSQ19YXSkK LQkJCXBsYW5lLT5zcmNfeCA9IHByb3BzLT5wcm9wX3ZhbHVlc1tpXTsKLQkJZWxzZSBpZiAocHJv cHMtPnByb3BzW2ldID09IHByb3BfaWRzW0lHVF9QTEFORV9TUkNfWV0pCi0JCQlwbGFuZS0+c3Jj X3kgPSBwcm9wcy0+cHJvcF92YWx1ZXNbaV07Ci0JCWVsc2UgaWYgKHByb3BzLT5wcm9wc1tpXSA9 PSBwcm9wX2lkc1tJR1RfUExBTkVfU1JDX1ddKQotCQkJcGxhbmUtPnNyY193ID0gcHJvcHMtPnBy b3BfdmFsdWVzW2ldOwotCQllbHNlIGlmIChwcm9wcy0+cHJvcHNbaV0gPT0gcHJvcF9pZHNbSUdU X1BMQU5FX1NSQ19IXSkKLQkJCXBsYW5lLT5zcmNfaCA9IHByb3BzLT5wcm9wX3ZhbHVlc1tpXTsK LQkJZWxzZSBpZiAocHJvcHMtPnByb3BzW2ldID09IHByb3BfaWRzW0lHVF9QTEFORV9UWVBFXSkg ewotCQkJaW50IGo7Ci0KLQkJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGRlc2MtPnByb3Bz X3BsYW5lX3R5cGUpOyBqKyspIHsKLQkJCQlpZiAocHJvcHMtPnByb3BfdmFsdWVzW2ldID09IGRl c2MtPnByb3BzX3BsYW5lX3R5cGVbal0pIHsKLQkJCQkJcGxhbmUtPnR5cGUgPSBqOwotCQkJCQli cmVhazsKLQkJCQl9Ci0JCQl9CiAJCX0KLQl9CiAKLQlkcm1Nb2RlRnJlZU9iamVjdFByb3BlcnRp ZXMocHJvcHMpOworCQl2YWx1ZXNbaV0gPSBpZ3RfcGxhbmVfZ2V0X3Byb3AocGxhbmUsIGkpOwor CX0KIH0KIAotc3RhdGljIHZvaWQgcGxhbmVfY2hlY2tfY3VycmVudF9zdGF0ZShzdHJ1Y3Qga21z X2F0b21pY19wbGFuZV9zdGF0ZSAqcGxhbmUsCitzdGF0aWMgdm9pZCBwbGFuZV9jaGVja19jdXJy ZW50X3N0YXRlKGlndF9wbGFuZV90ICpwbGFuZSwgY29uc3QgdWludDY0X3QgKnZhbHVlcywKIAkJ CQkgICAgICBlbnVtIGttc19hdG9taWNfY2hlY2tfcmVsYXggcmVsYXgpCiB7CiAJZHJtTW9kZVBs YW5lUHRyIGxlZ2FjeTsKLQlzdHJ1Y3Qga21zX2F0b21pY19wbGFuZV9zdGF0ZSBwbGFuZV9rZXJu ZWw7CisJdWludDY0X3QgY3VycmVudF92YWx1ZXNbSUdUX05VTV9QTEFORV9QUk9QU107CisJaW50 IGk7CiAKLQlsZWdhY3kgPSBkcm1Nb2RlR2V0UGxhbmUocGxhbmUtPnN0YXRlLT5kZXNjLT5mZCwg cGxhbmUtPm9iaik7CisJbGVnYWN5ID0gZHJtTW9kZUdldFBsYW5lKHBsYW5lLT5waXBlLT5kaXNw bGF5LT5kcm1fZmQsIHBsYW5lLT5kcm1fcGxhbmUtPnBsYW5lX2lkKTsKIAlpZ3RfYXNzZXJ0KGxl Z2FjeSk7CiAKLQlpZ3RfYXNzZXJ0X2VxX3UzMihsZWdhY3ktPmNydGNfaWQsIHBsYW5lLT5jcnRj X2lkKTsKKwlpZ3RfYXNzZXJ0X2VxX3UzMihsZWdhY3ktPmNydGNfaWQsIHZhbHVlc1tJR1RfUExB TkVfQ1JUQ19JRF0pOwogCiAJaWYgKCEocmVsYXggJiBQTEFORV9SRUxBWF9GQikpCi0JCWlndF9h c3NlcnRfZXFfdTMyKGxlZ2FjeS0+ZmJfaWQsIHBsYW5lLT5mYl9pZCk7CisJCWlndF9hc3NlcnRf ZXFfdTMyKGxlZ2FjeS0+ZmJfaWQsIHZhbHVlc1tJR1RfUExBTkVfRkJfSURdKTsKIAotCW1lbWNw eSgmcGxhbmVfa2VybmVsLCBwbGFuZSwgc2l6ZW9mKHBsYW5lX2tlcm5lbCkpOwotCXBsYW5lX2dl dF9jdXJyZW50X3N0YXRlKCZwbGFuZV9rZXJuZWwpOworCXBsYW5lX2dldF9jdXJyZW50X3N0YXRl KHBsYW5lLCBjdXJyZW50X3ZhbHVlcyk7CiAKIAkvKiBMZWdhY3kgY3Vyc29yIGlvY3RscyBjcmVh dGUgdGhlaXIgb3duLCB1bmtub3dhYmxlLCBpbnRlcm5hbAogCSAqIGZyYW1lYnVmZmVyIHdoaWNo IHdlIGNhbid0IHJlYXNvbiBhYm91dC4gKi8KIAlpZiAocmVsYXggJiBQTEFORV9SRUxBWF9GQikK LQkJcGxhbmVfa2VybmVsLmZiX2lkID0gcGxhbmUtPmZiX2lkOwotCWRvX29yX2RpZShtZW1jbXAo JnBsYW5lX2tlcm5lbCwgcGxhbmUsIHNpemVvZihwbGFuZV9rZXJuZWwpKSk7CisJCWN1cnJlbnRf dmFsdWVzW0lHVF9QTEFORV9GQl9JRF0gPSB2YWx1ZXNbSUdUX1BMQU5FX0ZCX0lEXTsKKworCWZv ciAoaSA9IDA7IGkgPCBJR1RfTlVNX1BMQU5FX1BST1BTOyBpKyspCisJCWlmICghcGxhbmVfZmls dGVyKGkpKQorCQkJaWd0X2Fzc2VydF9lcV91NjQoY3VycmVudF92YWx1ZXNbaV0sIHZhbHVlc1tp XSk7CiAKIAlkcm1Nb2RlRnJlZVBsYW5lKGxlZ2FjeSk7CiB9CiAKLXN0YXRpYyB2b2lkIHBsYW5l X2NvbW1pdF9sZWdhY3koc3RydWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUgKnBsYW5lLAorc3Rh dGljIHZvaWQgcGxhbmVfY29tbWl0KGlndF9wbGFuZV90ICpwbGFuZSwgZW51bSBpZ3RfY29tbWl0 X3N0eWxlIHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0ga21zX2F0b21p Y19jaGVja19yZWxheCByZWxheCkKIHsKLQlkb19vcl9kaWUoZHJtTW9kZVNldFBsYW5lKHBsYW5l LT5zdGF0ZS0+ZGVzYy0+ZmQsIHBsYW5lLT5vYmosCi0JCQkJICBwbGFuZS0+Y3J0Y19pZCwKLQkJ CQkgIHBsYW5lLT5mYl9pZCwgMCwKLQkJCQkgIHBsYW5lLT5jcnRjX3gsIHBsYW5lLT5jcnRjX3ks Ci0JCQkJICBwbGFuZS0+Y3J0Y193LCBwbGFuZS0+Y3J0Y19oLAotCQkJCSAgcGxhbmUtPnNyY194 LCBwbGFuZS0+c3JjX3ksCi0JCQkJICBwbGFuZS0+c3JjX3csIHBsYW5lLT5zcmNfaCkpOwotCXBs YW5lX2NoZWNrX2N1cnJlbnRfc3RhdGUocGxhbmUsIHJlbGF4KTsKKwlpZ3RfZGlzcGxheV9jb21t aXQyKHBsYW5lLT5waXBlLT5kaXNwbGF5LCBzKTsKKwlwbGFuZV9jaGVja19jdXJyZW50X3N0YXRl KHBsYW5lLCBwbGFuZS0+dmFsdWVzLCByZWxheCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qga21zX2F0 b21pY19wbGFuZV9zdGF0ZSAqCi1maW5kX3BsYW5lKHN0cnVjdCBrbXNfYXRvbWljX3N0YXRlICpz dGF0ZSwgZW51bSBwbGFuZV90eXBlIHR5cGUsCi0JICAgc3RydWN0IGttc19hdG9taWNfY3J0Y19z dGF0ZSAqY3J0YykKK3N0YXRpYyB2b2lkIHBsYW5lX2NvbW1pdF9hdG9taWNfZXJyKGlndF9wbGFu ZV90ICpwbGFuZSwKKwkJCQkgICAgZW51bSBrbXNfYXRvbWljX2NoZWNrX3JlbGF4IHJlbGF4LAor CQkJCSAgICBpbnQgZXJyKQogewotCXN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0YXRlICpyZXQg PSBOVUxMOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHN0YXRlLT5udW1fcGxhbmVzOyBp KyspIHsKLQkJc3RydWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUgKnBsYW5lID0gJnN0YXRlLT5w bGFuZXNbaV07Ci0KLQkJaWYgKCFwbGFuZS0+b2JqKQotCQkJY29udGludWU7Ci0JCWlmICh0eXBl ICE9IE5VTV9QTEFORV9UWVBFX1BST1BTICYmIHBsYW5lLT50eXBlICE9IHR5cGUpCi0JCQljb250 aW51ZTsKLQkJaWYgKGNydGMgJiYgIShwbGFuZS0+Y3J0Y19tYXNrICYgKDEgPDwgY3J0Yy0+aWR4 KSkpCi0JCQljb250aW51ZTsKKwl1aW50NjRfdCBjdXJyZW50X3ZhbHVlc1tJR1RfTlVNX1BMQU5F X1BST1BTXTsKIAotCQlwbGFuZV9nZXRfY3VycmVudF9zdGF0ZShwbGFuZSk7CisJcGxhbmVfZ2V0 X2N1cnJlbnRfc3RhdGUocGxhbmUsIGN1cnJlbnRfdmFsdWVzKTsKIAotCQkvKiBUcnkgdG8gZmlu ZCBhIHBsYW5lIHRoYXQncyBhbHJlYWR5IG9uIHRoaXMgQ1JUQy4gSW4KLQkJICogcGFydGljdWxh ciwgdGhpcyBlbnN1cmVzIHRoYXQgZm9yIHNwZWNpYWwgKHByaW1hcnkvY3Vyc29yKQotCQkgKiBw bGFuZXMgdGhhdCBjYW4gYmUgb24gbXVsdGlwbGUgQ1JUQ3MsIHdlIGZpbmQgdGhlIHNhbWUKLQkJ ICogb25lIHRoYXQgdGhlIGxlZ2FjeSBpb2N0bHMgd2lsbC4gKi8KLQkJaWYgKCFjcnRjIHx8IHBs YW5lLT5jcnRjX2lkID09IGNydGMtPm9iaikKLQkJCXJldHVybiBwbGFuZTsKLQotCQlyZXQgPSBw bGFuZTsKLQl9CisJaWd0X2Fzc2VydF9lcSgtZXJyLCBpZ3RfZGlzcGxheV90cnlfY29tbWl0Mihw bGFuZS0+cGlwZS0+ZGlzcGxheSwgQ09NTUlUX0FUT01JQykpOwogCi0JcmV0dXJuIHJldDsKKwlw bGFuZV9jaGVja19jdXJyZW50X3N0YXRlKHBsYW5lLCBjdXJyZW50X3ZhbHVlcywgcmVsYXgpOwog fQogCi1zdGF0aWMgdm9pZCBjcnRjX3BvcHVsYXRlX3JlcShzdHJ1Y3Qga21zX2F0b21pY19jcnRj X3N0YXRlICpjcnRjLAotCQkJICAgICAgZHJtTW9kZUF0b21pY1JlcSAqcmVxKQorc3RhdGljIGJv b2wgY3J0Y19maWx0ZXIoZW51bSBpZ3RfYXRvbWljX2NydGNfcHJvcGVydGllcyBwcm9wKQogewot CWlmIChjcnRjLT5vdXRfZmVuY2VfcHRyKQotCQljcnRjX3NldF9wcm9wKHJlcSwgY3J0YywgSUdU X0NSVENfT1VUX0ZFTkNFX1BUUiwKLQkJCSAgICAgIHRvX3VzZXJfcG9pbnRlcihjcnRjLT5vdXRf ZmVuY2VfcHRyKSk7CisJaWYgKHByb3AgPT0gSUdUX0NSVENfTU9ERV9JRCB8fCBwcm9wID09IElH VF9DUlRDX0FDVElWRSkKKwkJcmV0dXJuIGZhbHNlOwogCi0JY3J0Y19zZXRfcHJvcChyZXEsIGNy dGMsIElHVF9DUlRDX01PREVfSUQsIGNydGMtPm1vZGUuaWQpOwotCWNydGNfc2V0X3Byb3AocmVx LCBjcnRjLCBJR1RfQ1JUQ19BQ1RJVkUsIGNydGMtPmFjdGl2ZSk7CisJcmV0dXJuIHRydWU7CiB9 CiAKLXN0YXRpYyB2b2lkIGNydGNfZ2V0X2N1cnJlbnRfc3RhdGUoc3RydWN0IGttc19hdG9taWNf Y3J0Y19zdGF0ZSAqY3J0YykKK3N0YXRpYyB2b2lkIGNydGNfZ2V0X2N1cnJlbnRfc3RhdGUoaWd0 X3BpcGVfdCAqcGlwZSwgdWludDY0X3QgKnZhbHVlcykKIHsKLQlkcm1Nb2RlT2JqZWN0UHJvcGVy dGllc1B0ciBwcm9wczsKIAlpbnQgaTsKIAotCXByb3BzID0gZHJtTW9kZU9iamVjdEdldFByb3Bl cnRpZXMoY3J0Yy0+c3RhdGUtPmRlc2MtPmZkLCBjcnRjLT5vYmosCi0JCQkJCSAgIERSTV9NT0RF X09CSkVDVF9DUlRDKTsKLQlpZ3RfYXNzZXJ0KHByb3BzKTsKLQotCWZvciAoaSA9IDA7IGkgPCBw cm9wcy0+Y291bnRfcHJvcHM7IGkrKykgewotCQl1aW50MzJfdCAqcHJvcF9pZHMgPSBjcnRjLT5z dGF0ZS0+ZGVzYy0+cHJvcHNfY3J0YzsKLQotCQlpZiAocHJvcHMtPnByb3BzW2ldID09IHByb3Bf aWRzW0lHVF9DUlRDX01PREVfSURdKSB7Ci0JCQlkcm1Nb2RlUHJvcGVydHlCbG9iUHRyIGJsb2I7 Ci0KLQkJCWNydGMtPm1vZGUuaWQgPSBwcm9wcy0+cHJvcF92YWx1ZXNbaV07Ci0JCQlpZiAoIWNy dGMtPm1vZGUuaWQpIHsKLQkJCQljcnRjLT5tb2RlLmxlbiA9IDA7Ci0JCQkJY29udGludWU7Ci0J CQl9Ci0KLQkJCWJsb2IgPSBkcm1Nb2RlR2V0UHJvcGVydHlCbG9iKGNydGMtPnN0YXRlLT5kZXNj LT5mZCwKLQkJCQkJCSAgICAgIGNydGMtPm1vZGUuaWQpOwotCQkJaWd0X2Fzc2VydChibG9iKTsK LQkJCWlndF9hc3NlcnRfZXFfdTMyKGJsb2ItPmxlbmd0aCwKLQkJCQkJICBzaXplb2Yoc3RydWN0 IGRybV9tb2RlX21vZGVpbmZvKSk7Ci0KLQkJCWlmICghY3J0Yy0+bW9kZS5kYXRhIHx8Ci0JCQkg ICAgbWVtY21wKGNydGMtPm1vZGUuZGF0YSwgYmxvYi0+ZGF0YSwgYmxvYi0+bGVuZ3RoKSAhPSAw KQotCQkJCWNydGMtPm1vZGUuZGF0YSA9IGJsb2ItPmRhdGE7Ci0JCQljcnRjLT5tb2RlLmxlbiA9 IGJsb2ItPmxlbmd0aDsKLQkJfQotCQllbHNlIGlmIChwcm9wcy0+cHJvcHNbaV0gPT0gcHJvcF9p ZHNbSUdUX0NSVENfQUNUSVZFXSkgewotCQkJY3J0Yy0+YWN0aXZlID0gcHJvcHMtPnByb3BfdmFs dWVzW2ldOworCWZvciAoaSA9IDA7IGkgPCBJR1RfTlVNX0NSVENfUFJPUFM7IGkrKykgeworCQlp ZiAoY3J0Y19maWx0ZXIoaSkpIHsKKwkJCXZhbHVlc1tpXSA9IDA7CisJCQljb250aW51ZTsKIAkJ fQotCX0KIAotCWRybU1vZGVGcmVlT2JqZWN0UHJvcGVydGllcyhwcm9wcyk7CisJCXZhbHVlc1tp XSA9IGlndF9waXBlX29ial9nZXRfcHJvcChwaXBlLCBpKTsKKwl9CiB9CiAKLXN0YXRpYyB2b2lk IGNydGNfY2hlY2tfY3VycmVudF9zdGF0ZShzdHJ1Y3Qga21zX2F0b21pY19jcnRjX3N0YXRlICpj cnRjLAotCQkJCSAgICAgc3RydWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUgKnByaW1hcnksCitz dGF0aWMgdm9pZCBjcnRjX2NoZWNrX2N1cnJlbnRfc3RhdGUoaWd0X3BpcGVfdCAqcGlwZSwKKwkJ CQkgICAgIGNvbnN0IHVpbnQ2NF90ICpwaXBlX3ZhbHVlcywKKwkJCQkgICAgIGNvbnN0IHVpbnQ2 NF90ICpwcmltYXJ5X3ZhbHVlcywKIAkJCQkgICAgIGVudW0ga21zX2F0b21pY19jaGVja19yZWxh eCByZWxheCkKIHsKLQlzdHJ1Y3Qga21zX2F0b21pY19jcnRjX3N0YXRlIGNydGNfa2VybmVsOwor CXVpbnQ2NF90IGN1cnJlbnRfcGlwZV92YWx1ZXNbSUdUX05VTV9DUlRDX1BST1BTXTsKIAlkcm1N b2RlQ3J0Y1B0ciBsZWdhY3k7CisJZHJtTW9kZVByb3BlcnR5QmxvYlJlcyAqbW9kZV9wcm9wID0g TlVMTDsKKwlzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gKm1vZGUgPSBOVUxMOwogCi0JbGVnYWN5 ID0gZHJtTW9kZUdldENydGMoY3J0Yy0+c3RhdGUtPmRlc2MtPmZkLCBjcnRjLT5vYmopOwotCWln dF9hc3NlcnQobGVnYWN5KTsKLQotCWlndF9hc3NlcnRfZXFfdTMyKGxlZ2FjeS0+Y3J0Y19pZCwg Y3J0Yy0+b2JqKTsKLQlpZ3RfYXNzZXJ0X2VxX3UzMihsZWdhY3ktPngsIHByaW1hcnktPnNyY194 ID4+IDE2KTsKLQlpZ3RfYXNzZXJ0X2VxX3UzMihsZWdhY3ktPnksIHByaW1hcnktPnNyY195ID4+ IDE2KTsKLQotCWlmIChjcnRjLT5hY3RpdmUpCi0JCWlndF9hc3NlcnRfZXFfdTMyKGxlZ2FjeS0+ YnVmZmVyX2lkLCBwcmltYXJ5LT5mYl9pZCk7Ci0JZWxzZQotCQlpZ3RfYXNzZXJ0X2VxX3UzMihs ZWdhY3ktPmJ1ZmZlcl9pZCwgMCk7CisJaWYgKHBpcGVfdmFsdWVzW0lHVF9DUlRDX01PREVfSURd KSB7CisJCW1vZGVfcHJvcCA9IGRybU1vZGVHZXRQcm9wZXJ0eUJsb2IocGlwZS0+ZGlzcGxheS0+ ZHJtX2ZkLAorCQkJCQkJICAgcGlwZV92YWx1ZXNbSUdUX0NSVENfTU9ERV9JRF0pOwogCi0JaWYg KGxlZ2FjeS0+bW9kZV92YWxpZCkgewotCQlpZ3RfYXNzZXJ0X25lcShsZWdhY3ktPm1vZGVfdmFs aWQsIDApOwotCQlpZ3RfYXNzZXJ0X2VxKGNydGMtPm1vZGUubGVuLAotCQkgICAgICAgICAgICAg IHNpemVvZihzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8pKTsKLQkJZG9fb3JfZGllKG1lbWNtcCgm bGVnYWN5LT5tb2RlLCBjcnRjLT5tb2RlLmRhdGEsCi0JCSAgICAgICAgICAgICAgICAgY3J0Yy0+ bW9kZS5sZW4pKTsKLQkJaWd0X2Fzc2VydF9lcShsZWdhY3ktPndpZHRoLCBsZWdhY3ktPm1vZGUu aGRpc3BsYXkpOwotCQlpZ3RfYXNzZXJ0X2VxKGxlZ2FjeS0+aGVpZ2h0LCBsZWdhY3ktPm1vZGUu dmRpc3BsYXkpOwotCX0gZWxzZSB7Ci0JCWlndF9hc3NlcnRfZXEobGVnYWN5LT5tb2RlX3ZhbGlk LCAwKTsKLQl9CisJCWlndF9hc3NlcnQobW9kZV9wcm9wKTsKIAotCW1lbWNweSgmY3J0Y19rZXJu ZWwsIGNydGMsIHNpemVvZihjcnRjX2tlcm5lbCkpOwotCWNydGNfZ2V0X2N1cnJlbnRfc3RhdGUo JmNydGNfa2VybmVsKTsKLQotCWlmIChjcnRjX2tlcm5lbC5tb2RlLmlkICE9IDApCi0JCWlndF9h c3NlcnRfZXEoY3J0Y19rZXJuZWwubW9kZS5sZW4sCisJCWlndF9hc3NlcnRfZXEobW9kZV9wcm9w LT5sZW5ndGgsCiAJCSAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5m bykpOwotCi0JLyogT3B0aW9uYWxseSByZWxheCB0aGUgY2hlY2sgZm9yIE1PREVfSUQ6IHVzaW5n IHRoZSBsZWdhY3kgU2V0Q3J0YwotCSAqIEFQSSBjYW4gcG90ZW50aWFsbHkgY2hhbmdlIE1PREVf SUQgZXZlbiBpZiB0aGUgbW9kZSBpdHNlbGYgcmVtYWlucwotCSAqIHVuY2hhbmdlZC4gKi8KLQlp ZiAoKChyZWxheCAmIENSVENfUkVMQVhfTU9ERSkgJiYKLQkgICAgKGNydGNfa2VybmVsLm1vZGUu aWQgIT0gY3J0Yy0+bW9kZS5pZCAmJgotCSAgICAgY3J0Y19rZXJuZWwubW9kZS5pZCAhPSAwICYm IGNydGMtPm1vZGUuaWQgIT0gMCkpICYmCi0JICAgIG1lbWNtcChjcnRjX2tlcm5lbC5tb2RlLmRh dGEsIGNydGMtPm1vZGUuZGF0YSwKLQkJICAgc2l6ZW9mKHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5m bykpID09IDApIHsKLQkJY3J0Y19rZXJuZWwubW9kZS5pZCA9IGNydGMtPm1vZGUuaWQ7Ci0JCWNy dGNfa2VybmVsLm1vZGUuZGF0YSA9IGNydGMtPm1vZGUuZGF0YTsKLQl9Ci0KLQlkb19vcl9kaWUo bWVtY21wKCZjcnRjX2tlcm5lbCwgY3J0Yywgc2l6ZW9mKGNydGNfa2VybmVsKSkpOwotCi0JZHJt TW9kZUZyZWVDcnRjKGxlZ2FjeSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNydGNfY29tbWl0X2xlZ2Fj eShzdHJ1Y3Qga21zX2F0b21pY19jcnRjX3N0YXRlICpjcnRjLAotCQkJICAgICAgIHN0cnVjdCBr bXNfYXRvbWljX3BsYW5lX3N0YXRlICpwbGFuZSwKLQkJCSAgICAgICBlbnVtIGttc19hdG9taWNf Y2hlY2tfcmVsYXggcmVsYXgpCi17Ci0JZHJtTW9kZU9iamVjdFByb3BlcnRpZXNQdHIgcHJvcHM7 Ci0JdWludDMyX3QgKmNvbm5lY3RvcnM7Ci0JaW50IG51bV9jb25uZWN0b3JzID0gMDsKLQlpbnQg aTsKLQotCWlmICghY3J0Yy0+YWN0aXZlKSB7Ci0JCWRvX29yX2RpZShkcm1Nb2RlU2V0Q3J0Yyhj cnRjLT5zdGF0ZS0+ZGVzYy0+ZmQsCi0JCQkJCSBjcnRjLT5vYmosIDAsIDAsIDAsIE5VTEwsIDAs IE5VTEwpKTsKLQkJcmV0dXJuOwotCX0KLQotCWNvbm5lY3RvcnMgPSBjYWxsb2MoY3J0Yy0+c3Rh dGUtPm51bV9jb25uZWN0b3JzLAotCQkJICAgIHNpemVvZigqY29ubmVjdG9ycykpOwotCWlndF9h c3NlcnQoY29ubmVjdG9ycyk7Ci0KLQlpZ3RfYXNzZXJ0X25lcV91MzIoY3J0Yy0+bW9kZS5pZCwg MCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY3J0Yy0+c3RhdGUtPm51bV9jb25uZWN0b3JzOyBpKysp IHsKLQkJc3RydWN0IGttc19hdG9taWNfY29ubmVjdG9yX3N0YXRlICpjb25uZWN0b3IgPQotCQkJ JmNydGMtPnN0YXRlLT5jb25uZWN0b3JzW2ldOwotCi0JCWlmIChjb25uZWN0b3ItPmNydGNfaWQg IT0gY3J0Yy0+b2JqKQotCQkJY29udGludWU7Ci0KLQkJY29ubmVjdG9yc1tudW1fY29ubmVjdG9y cysrXSA9IGNvbm5lY3Rvci0+b2JqOworCQltb2RlID0gbW9kZV9wcm9wLT5kYXRhOwogCX0KIAot CWRvX29yX2RpZShkcm1Nb2RlU2V0Q3J0YyhjcnRjLT5zdGF0ZS0+ZGVzYy0+ZmQsIGNydGMtPm9i aiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgcGxhbmUtPmZiX2lkLAotCQkJCSBwbGFuZS0+ c3JjX3ggPj4gMTYsIHBsYW5lLT5zcmNfeSA+PiAxNiwKLQkJCQkgKG51bV9jb25uZWN0b3JzKSA/ IGNvbm5lY3RvcnMgOiBOVUxMLAotCQkJCSBudW1fY29ubmVjdG9ycywKLQkJCQkgY3J0Yy0+bW9k ZS5kYXRhKSk7Ci0JLyogV2hlbiBkb2luZyBhIGxlZ2FjeSBjb21taXQsIHRoZSBjb3JlIG1heSB1 cGRhdGUgTU9ERV9JRCB0byBiZSBhIG5ldwotCSAqIGJsb2IgaW1wbGljaXRseSBjcmVhdGVkIGJ5 IHRoZSBsZWdhY3kgcmVxdWVzdC4gSGVuY2Ugd2UgYmFja2ZpbGwKLQkgKiB0aGUgdmFsdWUgaW4g dGhlIHN0YXRlIG9iamVjdCB0byBlbnN1cmUgdGhleSBtYXRjaC4gKi8KLQlwcm9wcyA9IGRybU1v ZGVPYmplY3RHZXRQcm9wZXJ0aWVzKGNydGMtPnN0YXRlLT5kZXNjLT5mZCwgY3J0Yy0+b2JqLAot CQkJCQkgICBEUk1fTU9ERV9PQkpFQ1RfQ1JUQyk7Ci0JaWd0X2Fzc2VydChwcm9wcyk7Ci0KLQlm b3IgKGkgPSAwOyBpIDwgcHJvcHMtPmNvdW50X3Byb3BzOyBpKyspIHsKLQkJaWYgKHByb3BzLT5w cm9wc1tpXSAhPQotCQkgICAgY3J0Yy0+c3RhdGUtPmRlc2MtPnByb3BzX2NydGNbSUdUX0NSVENf TU9ERV9JRF0pCi0JCQljb250aW51ZTsKLQkJY3J0Yy0+bW9kZS5pZCA9IHByb3BzLT5wcm9wX3Zh bHVlc1tpXTsKLQkJYnJlYWs7Ci0JfQorCWxlZ2FjeSA9IGRybU1vZGVHZXRDcnRjKHBpcGUtPmRp c3BsYXktPmRybV9mZCwgcGlwZS0+Y3J0Y19pZCk7CisJaWd0X2Fzc2VydChsZWdhY3kpOwogCi0J ZHJtTW9kZUZyZWVPYmplY3RQcm9wZXJ0aWVzKHByb3BzKTsKKwlpZ3RfYXNzZXJ0X2VxX3UzMihs ZWdhY3ktPmNydGNfaWQsIHBpcGUtPmNydGNfaWQpOworCWlndF9hc3NlcnRfZXFfdTMyKGxlZ2Fj eS0+eCwgcHJpbWFyeV92YWx1ZXNbSUdUX1BMQU5FX1NSQ19YXSA+PiAxNik7CisJaWd0X2Fzc2Vy dF9lcV91MzIobGVnYWN5LT55LCBwcmltYXJ5X3ZhbHVlc1tJR1RfUExBTkVfU1JDX1ldID4+IDE2 KTsKIAotCWNydGNfY2hlY2tfY3VycmVudF9zdGF0ZShjcnRjLCBwbGFuZSwgcmVsYXgpOwotCXBs YW5lX2NoZWNrX2N1cnJlbnRfc3RhdGUocGxhbmUsIHJlbGF4KTsKLX0KKwlpZ3RfYXNzZXJ0X2Vx X3UzMihsZWdhY3ktPmJ1ZmZlcl9pZCwgcHJpbWFyeV92YWx1ZXNbSUdUX1BMQU5FX0ZCX0lEXSk7 CiAKLXN0YXRpYyBzdHJ1Y3Qga21zX2F0b21pY19jcnRjX3N0YXRlICpmaW5kX2NydGMoc3RydWN0 IGttc19hdG9taWNfc3RhdGUgKnN0YXRlLAotCQkJCQkgICAgICAgYm9vbCBtdXN0X2JlX2VuYWJs ZWQpCi17Ci0JaW50IGk7CisJaWYgKGxlZ2FjeS0+bW9kZV92YWxpZCkgeworCQlpZ3RfYXNzZXJ0 KG1vZGVfcHJvcCk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgc3RhdGUtPm51bV9jcnRjczsgaSsrKSB7 Ci0JCXN0cnVjdCBrbXNfYXRvbWljX2NydGNfc3RhdGUgKmNydGMgPSAmc3RhdGUtPmNydGNzW2ld OworCQlkb19vcl9kaWUobWVtY21wKCZsZWdhY3ktPm1vZGUsIG1vZGUsIHNpemVvZigqbW9kZSkp KTsKIAotCQlpZiAoIWNydGMtPm9iaikKLQkJCWNvbnRpbnVlOwotCQlpZiAobXVzdF9iZV9lbmFi bGVkICYmICFjcnRjLT5hY3RpdmUpCi0JCQljb250aW51ZTsKKwkJaWd0X2Fzc2VydF9lcShsZWdh Y3ktPndpZHRoLCBsZWdhY3ktPm1vZGUuaGRpc3BsYXkpOworCQlpZ3RfYXNzZXJ0X2VxKGxlZ2Fj eS0+aGVpZ2h0LCBsZWdhY3ktPm1vZGUudmRpc3BsYXkpOwogCi0JCWNydGNfZ2V0X2N1cnJlbnRf c3RhdGUoY3J0Yyk7Ci0JCXJldHVybiBjcnRjOworCQlpZ3RfYXNzZXJ0X25lcShwaXBlX3ZhbHVl c1tJR1RfQ1JUQ19NT0RFX0lEXSwgMCk7CisJfSBlbHNlIHsKKwkJaWd0X2Fzc2VydCghbW9kZV9w cm9wKTsKIAl9CiAKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgZmlsbF9vYmpfcHJv cHMoaW50IGZkLCB1aW50MzJfdCBpZCwgaW50IHR5cGUsIGludCBudW1fcHJvcHMsCi0JCQkgICBj b25zdCBjaGFyICoqcHJvcF9uYW1lcywgdWludDMyX3QgKnByb3BfaWRzKQotewotCWRybU1vZGVP YmplY3RQcm9wZXJ0aWVzUHRyIHByb3BzOwotCWludCBpLCBqOworCWNydGNfZ2V0X2N1cnJlbnRf c3RhdGUocGlwZSwgY3VycmVudF9waXBlX3ZhbHVlcyk7CiAKLQlwcm9wcyA9IGRybU1vZGVPYmpl Y3RHZXRQcm9wZXJ0aWVzKGZkLCBpZCwgdHlwZSk7Ci0JaWd0X2Fzc2VydChwcm9wcyk7CisJLyog T3B0aW9uYWxseSByZWxheCB0aGUgY2hlY2sgZm9yIE1PREVfSUQ6IHVzaW5nIHRoZSBsZWdhY3kg U2V0Q3J0YworCSAqIEFQSSBjYW4gcG90ZW50aWFsbHkgY2hhbmdlIE1PREVfSUQgZXZlbiBpZiB0 aGUgbW9kZSBpdHNlbGYgcmVtYWlucworCSAqIHVuY2hhbmdlZC4gKi8KKwlpZiAocmVsYXggJiBD UlRDX1JFTEFYX01PREUgJiYgbW9kZSAmJiBjdXJyZW50X3BpcGVfdmFsdWVzW0lHVF9DUlRDX01P REVfSURdICYmCisJICAgIGN1cnJlbnRfcGlwZV92YWx1ZXNbSUdUX0NSVENfTU9ERV9JRF0gIT0g cGlwZV92YWx1ZXNbSUdUX0NSVENfTU9ERV9JRF0pIHsKKwkJZHJtTW9kZVByb3BlcnR5QmxvYlJl cyAqY3VyX3Byb3AgPQorCQkJZHJtTW9kZUdldFByb3BlcnR5QmxvYihwaXBlLT5kaXNwbGF5LT5k cm1fZmQsCisJCQkJCSAgICAgICBjdXJyZW50X3BpcGVfdmFsdWVzW0lHVF9DUlRDX01PREVfSURd KTsKIAotCWZvciAoaSA9IDA7IGkgPCBwcm9wcy0+Y291bnRfcHJvcHM7IGkrKykgewotCQlkcm1N b2RlUHJvcGVydHlQdHIgcHJvcCA9Ci0JCQlkcm1Nb2RlR2V0UHJvcGVydHkoZmQsIHByb3BzLT5w cm9wc1tpXSk7CisJCWlndF9hc3NlcnQoY3VyX3Byb3ApOworCQlpZ3RfYXNzZXJ0X2VxKGN1cl9w cm9wLT5sZW5ndGgsIHNpemVvZihzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8pKTsKIAotCQlmb3Ig KGogPSAwOyBqIDwgbnVtX3Byb3BzOyBqKyspIHsKLQkJCWlmIChzdHJjbXAocHJvcC0+bmFtZSwg cHJvcF9uYW1lc1tqXSkgIT0gMCkKLQkJCQljb250aW51ZTsKLQkJCXByb3BfaWRzW2pdID0gcHJv cHMtPnByb3BzW2ldOwotCQkJYnJlYWs7Ci0JCX0KKwkJaWYgKCFtZW1jbXAoY3VyX3Byb3AtPmRh dGEsIG1vZGUsIHNpemVvZigqbW9kZSkpKQorCQkJY3VycmVudF9waXBlX3ZhbHVlc1tJR1RfQ1JU Q19NT0RFX0lEXSA9IHBpcGVfdmFsdWVzW0lHVF9DUlRDX01PREVfSURdOwogCi0JCWRybU1vZGVG cmVlUHJvcGVydHkocHJvcCk7CisJCWRybU1vZGVGcmVlUHJvcGVydHlCbG9iKGN1cl9wcm9wKTsK IAl9CiAKLQlkcm1Nb2RlRnJlZU9iamVjdFByb3BlcnRpZXMocHJvcHMpOwotfQotCi1zdGF0aWMg dm9pZCBmaWxsX29ial9wcm9wX21hcChpbnQgZmQsIHVpbnQzMl90IGlkLCBpbnQgdHlwZSwgY29u c3QgY2hhciAqbmFtZSwKLQkJCSAgICAgIGludCBudW1fZW51bXMsIGNvbnN0IGNoYXIgKiplbnVt X25hbWVzLAotCQkJICAgICAgdWludDY0X3QgKmVudW1faWRzKQotewotCWRybU1vZGVPYmplY3RQ cm9wZXJ0aWVzUHRyIHByb3BzOwotCWludCBpLCBqLCBrOwotCi0JcHJvcHMgPSBkcm1Nb2RlT2Jq ZWN0R2V0UHJvcGVydGllcyhmZCwgaWQsIHR5cGUpOwotCWlndF9hc3NlcnQocHJvcHMpOwotCi0J Zm9yIChpID0gMDsgaSA8IHByb3BzLT5jb3VudF9wcm9wczsgaSsrKSB7Ci0JCWRybU1vZGVQcm9w ZXJ0eVB0ciBwcm9wID0KLQkJCWRybU1vZGVHZXRQcm9wZXJ0eShmZCwgcHJvcHMtPnByb3BzW2ld KTsKLQotCQlpZ3RfYXNzZXJ0KHByb3ApOwotCi0JCWlmIChzdHJjbXAocHJvcC0+bmFtZSwgbmFt ZSkgIT0gMCkgewotCQkJZHJtTW9kZUZyZWVQcm9wZXJ0eShwcm9wKTsKLQkJCWNvbnRpbnVlOwot CQl9Ci0KLQkJZm9yIChqID0gMDsgaiA8IHByb3AtPmNvdW50X2VudW1zOyBqKyspIHsKLQkJCXN0 cnVjdCBkcm1fbW9kZV9wcm9wZXJ0eV9lbnVtICplID0gJnByb3AtPmVudW1zW2pdOwotCi0JCQlm b3IgKGsgPSAwOyBrIDwgbnVtX2VudW1zOyBrKyspIHsKLQkJCQlpZiAoc3RyY21wKGUtPm5hbWUs IGVudW1fbmFtZXNba10pICE9IDApCi0JCQkJCWNvbnRpbnVlOwotCi0JCQkJZW51bV9pZHNba10g PSBlLT52YWx1ZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQorCWRvX29yX2RpZShtZW1jbXAocGlw ZV92YWx1ZXMsIGN1cnJlbnRfcGlwZV92YWx1ZXMsIHNpemVvZihjdXJyZW50X3BpcGVfdmFsdWVz KSkpOwogCi0JCWRybU1vZGVGcmVlUHJvcGVydHkocHJvcCk7Ci0JfQorCWRybU1vZGVGcmVlQ3J0 YyhsZWdhY3kpOworCWRybU1vZGVGcmVlUHJvcGVydHlCbG9iKG1vZGVfcHJvcCk7CiB9CiAKLXN0 YXRpYyB2b2lkIGF0b21pY19zZXR1cChzdHJ1Y3Qga21zX2F0b21pY19zdGF0ZSAqc3RhdGUpCitz dGF0aWMgdm9pZCBjcnRjX2NvbW1pdChpZ3RfcGlwZV90ICpwaXBlLCBpZ3RfcGxhbmVfdCAqcGxh bmUsCisJCQllbnVtIGlndF9jb21taXRfc3R5bGUgcywKKwkJCWVudW0ga21zX2F0b21pY19jaGVj a19yZWxheCByZWxheCkKIHsKLQlzdHJ1Y3Qga21zX2F0b21pY19kZXNjICpkZXNjID0gc3RhdGUt PmRlc2M7Ci0JZHJtTW9kZVJlc1B0ciByZXM7Ci0JZHJtTW9kZVBsYW5lUmVzUHRyIHJlc19wbGFu ZTsKLQlpbnQgaTsKLQotCWRlc2MtPmZkID0gZHJtX29wZW5fZHJpdmVyX21hc3RlcihEUklWRVJf QU5ZKTsKLQlpZ3RfYXNzZXJ0X2ZkKGRlc2MtPmZkKTsKLQotCWlndF9za2lwX29uKGRybVNldENs aWVudENhcChkZXNjLT5mZCwgRFJNX0NMSUVOVF9DQVBfQVRPTUlDLCAxKSk7Ci0KLQlyZXMgPSBk cm1Nb2RlR2V0UmVzb3VyY2VzKGRlc2MtPmZkKTsKLQlyZXNfcGxhbmUgPSBkcm1Nb2RlR2V0UGxh bmVSZXNvdXJjZXMoZGVzYy0+ZmQpOwotCWlndF9hc3NlcnQocmVzKTsKLQlpZ3RfYXNzZXJ0KHJl c19wbGFuZSk7Ci0KLQlpZ3RfYXNzZXJ0X2x0KDAsIHJlcy0+Y291bnRfY3J0Y3MpOwotCXN0YXRl LT5udW1fY3J0Y3MgPSByZXMtPmNvdW50X2NydGNzOwotCXN0YXRlLT5jcnRjcyA9IGNhbGxvYyhz dGF0ZS0+bnVtX2NydGNzLCBzaXplb2YoKnN0YXRlLT5jcnRjcykpOwotCWlndF9hc3NlcnQoc3Rh dGUtPmNydGNzKTsKLQotCWlndF9hc3NlcnRfbHQoMCwgcmVzX3BsYW5lLT5jb3VudF9wbGFuZXMp OwotCXN0YXRlLT5udW1fcGxhbmVzID0gcmVzX3BsYW5lLT5jb3VudF9wbGFuZXM7Ci0Jc3RhdGUt PnBsYW5lcyA9IGNhbGxvYyhzdGF0ZS0+bnVtX3BsYW5lcywgc2l6ZW9mKCpzdGF0ZS0+cGxhbmVz KSk7Ci0JaWd0X2Fzc2VydChzdGF0ZS0+cGxhbmVzKTsKLQotCWlndF9hc3NlcnRfbHQoMCwgcmVz LT5jb3VudF9jb25uZWN0b3JzKTsKLQlzdGF0ZS0+bnVtX2Nvbm5lY3RvcnMgPSByZXMtPmNvdW50 X2Nvbm5lY3RvcnM7Ci0Jc3RhdGUtPmNvbm5lY3RvcnMgPSBjYWxsb2Moc3RhdGUtPm51bV9jb25u ZWN0b3JzLAotCQkJCSAgIHNpemVvZigqc3RhdGUtPmNvbm5lY3RvcnMpKTsKLQlpZ3RfYXNzZXJ0 KHN0YXRlLT5jb25uZWN0b3JzKTsKLQotCWZpbGxfb2JqX3Byb3BzKGRlc2MtPmZkLCByZXMtPmNy dGNzWzBdLAotCQkgICAgICAgRFJNX01PREVfT0JKRUNUX0NSVEMsIElHVF9OVU1fQ1JUQ19QUk9Q UywKLQkJICAgICAgIGlndF9jcnRjX3Byb3BfbmFtZXMsIGRlc2MtPnByb3BzX2NydGMpOwotCi0J ZmlsbF9vYmpfcHJvcHMoZGVzYy0+ZmQsIHJlc19wbGFuZS0+cGxhbmVzWzBdLAotCQkgICAgICAg RFJNX01PREVfT0JKRUNUX1BMQU5FLCBJR1RfTlVNX1BMQU5FX1BST1BTLAotCQkgICAgICAgaWd0 X3BsYW5lX3Byb3BfbmFtZXMsIGRlc2MtPnByb3BzX3BsYW5lKTsKLQlmaWxsX29ial9wcm9wX21h cChkZXNjLT5mZCwgcmVzX3BsYW5lLT5wbGFuZXNbMF0sCi0JCQkgIERSTV9NT0RFX09CSkVDVF9Q TEFORSwgInR5cGUiLAotCQkJICBOVU1fUExBTkVfVFlQRV9QUk9QUywgcGxhbmVfdHlwZV9wcm9w X25hbWVzLAotCQkJICBkZXNjLT5wcm9wc19wbGFuZV90eXBlKTsKLQotCWZpbGxfb2JqX3Byb3Bz KGRlc2MtPmZkLCByZXMtPmNvbm5lY3RvcnNbMF0sCi0JCSAgICAgICBEUk1fTU9ERV9PQkpFQ1Rf Q09OTkVDVE9SLCBJR1RfTlVNX0NPTk5FQ1RPUl9QUk9QUywKLQkJICAgICAgIGlndF9jb25uZWN0 b3JfcHJvcF9uYW1lcywgZGVzYy0+cHJvcHNfY29ubmVjdG9yKTsKLQotCWZvciAoaSA9IDA7IGkg PCBzdGF0ZS0+bnVtX2NydGNzOyBpKyspIHsKLQkJc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0 ZSAqY3J0YyA9ICZzdGF0ZS0+Y3J0Y3NbaV07Ci0KLQkJY3J0Yy0+c3RhdGUgPSBzdGF0ZTsKLQkJ Y3J0Yy0+b2JqID0gcmVzLT5jcnRjc1tpXTsKLQkJY3J0Yy0+aWR4ID0gaTsKLQkJY3J0Y19nZXRf Y3VycmVudF9zdGF0ZShjcnRjKTsKLQotCQkvKiBUaGUgYmxvYiBwb2ludGVkIHRvIGJ5IE1PREVf SUQgY291bGQgd2VsbCBiZSB0cmFuc2llbnQsCi0JCSAqIGFuZCBsb3NlIGl0cyBsYXN0IHJlZmVy ZW5jZSBhcyB3ZSBzd2l0Y2ggYXdheSBmcm9tIGl0LgotCQkgKiBEdXBsaWNhdGUgdGhlIGJsb2Ig aGVyZSBzbyB3ZSBoYXZlIGEgcmVmZXJlbmNlIHdlIGtub3cgd2UKLQkJICogb3duLiAqLwotCQlp ZiAoY3J0Yy0+bW9kZS5pZCAhPSAwKQotCQkgICAgY3J0Yy0+bW9kZS5pZCA9IGJsb2JfZHVwbGlj YXRlKGRlc2MtPmZkLCBjcnRjLT5tb2RlLmlkKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc3Rh dGUtPm51bV9wbGFuZXM7IGkrKykgewotCQlkcm1Nb2RlUGxhbmVQdHIgcGxhbmUgPQotCQkJZHJt TW9kZUdldFBsYW5lKGRlc2MtPmZkLCByZXNfcGxhbmUtPnBsYW5lc1tpXSk7Ci0JCWlndF9hc3Nl cnQocGxhbmUpOwotCi0JCXN0YXRlLT5wbGFuZXNbaV0uc3RhdGUgPSBzdGF0ZTsKLQkJc3RhdGUt PnBsYW5lc1tpXS5vYmogPSByZXNfcGxhbmUtPnBsYW5lc1tpXTsKLQkJc3RhdGUtPnBsYW5lc1tp XS5jcnRjX21hc2sgPSBwbGFuZS0+cG9zc2libGVfY3J0Y3M7Ci0JCXBsYW5lX2dldF9jdXJyZW50 X3N0YXRlKCZzdGF0ZS0+cGxhbmVzW2ldKTsKLQl9CisJaWd0X2Rpc3BsYXlfY29tbWl0MihwaXBl LT5kaXNwbGF5LCBzKTsKIAotCWZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+bnVtX2Nvbm5lY3RvcnM7 IGkrKykgewotCQlzdGF0ZS0+Y29ubmVjdG9yc1tpXS5zdGF0ZSA9IHN0YXRlOwotCQlzdGF0ZS0+ Y29ubmVjdG9yc1tpXS5vYmogPSByZXMtPmNvbm5lY3RvcnNbaV07Ci0JCWNvbm5lY3Rvcl9nZXRf Y3VycmVudF9zdGF0ZSgmc3RhdGUtPmNvbm5lY3RvcnNbaV0pOwotCX0KLQotCWRybU1vZGVGcmVl UGxhbmVSZXNvdXJjZXMocmVzX3BsYW5lKTsKLQlkcm1Nb2RlRnJlZVJlc291cmNlcyhyZXMpOwor CWNydGNfY2hlY2tfY3VycmVudF9zdGF0ZShwaXBlLCBwaXBlLT52YWx1ZXMsIHBsYW5lLT52YWx1 ZXMsIHJlbGF4KTsKKwlwbGFuZV9jaGVja19jdXJyZW50X3N0YXRlKHBsYW5lLCBwbGFuZS0+dmFs dWVzLCByZWxheCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qga21zX2F0b21pY19zdGF0ZSAqCi1hdG9t aWNfc3RhdGVfZHVwKGNvbnN0IHN0cnVjdCBrbXNfYXRvbWljX3N0YXRlICpzdGF0ZSkKK3N0YXRp YyB2b2lkIGNydGNfY29tbWl0X2F0b21pY19mbGFnc19lcnIoaWd0X3BpcGVfdCAqcGlwZSwgaWd0 X3BsYW5lX3QgKnBsYW5lLAorCQkJCQkgdW5zaWduZWQgZmxhZ3MsCisJCQkJCSBlbnVtIGttc19h dG9taWNfY2hlY2tfcmVsYXggcmVsYXgsCisJCQkJCSBpbnQgZXJyKQogewotCXN0cnVjdCBrbXNf YXRvbWljX3N0YXRlICpyZXQgPSBjYWxsb2MoMSwgc2l6ZW9mKCpyZXQpKTsKLQotCWlndF9hc3Nl cnQocmV0KTsKLQkqcmV0ID0gKnN0YXRlOwotCi0JcmV0LT5jcnRjcyA9IGNhbGxvYyhyZXQtPm51 bV9jcnRjcywgc2l6ZW9mKCpyZXQtPmNydGNzKSk7Ci0JaWd0X2Fzc2VydChyZXQtPmNydGNzKTsK LQltZW1jcHkocmV0LT5jcnRjcywgc3RhdGUtPmNydGNzLCByZXQtPm51bV9jcnRjcyAqIHNpemVv ZigqcmV0LT5jcnRjcykpOworCXVpbnQ2NF90IGN1cnJlbnRfcGlwZV92YWx1ZXNbSUdUX05VTV9D UlRDX1BST1BTXTsKKwl1aW50NjRfdCBjdXJyZW50X3BsYW5lX3ZhbHVlc1tJR1RfTlVNX1BMQU5F X1BST1BTXTsKIAotCXJldC0+cGxhbmVzID0gY2FsbG9jKHJldC0+bnVtX3BsYW5lcywgc2l6ZW9m KCpyZXQtPnBsYW5lcykpOwotCWlndF9hc3NlcnQocmV0LT5wbGFuZXMpOwotCW1lbWNweShyZXQt PnBsYW5lcywgc3RhdGUtPnBsYW5lcywKLQkgICAgICAgcmV0LT5udW1fcGxhbmVzICogc2l6ZW9m KCpyZXQtPnBsYW5lcykpOworCWNydGNfZ2V0X2N1cnJlbnRfc3RhdGUocGlwZSwgY3VycmVudF9w aXBlX3ZhbHVlcyk7CisJcGxhbmVfZ2V0X2N1cnJlbnRfc3RhdGUocGxhbmUsIGN1cnJlbnRfcGxh bmVfdmFsdWVzKTsKIAotCXJldC0+Y29ubmVjdG9ycyA9IGNhbGxvYyhyZXQtPm51bV9jb25uZWN0 b3JzLCBzaXplb2YoKnJldC0+Y29ubmVjdG9ycykpOwotCWlndF9hc3NlcnQocmV0LT5jb25uZWN0 b3JzKTsKLQltZW1jcHkocmV0LT5jb25uZWN0b3JzLCBzdGF0ZS0+Y29ubmVjdG9ycywKLQkgICAg ICAgcmV0LT5udW1fY29ubmVjdG9ycyAqIHNpemVvZigqcmV0LT5jb25uZWN0b3JzKSk7CisJaWd0 X2Fzc2VydF9lcSgtZXJyLCBpZ3RfZGlzcGxheV90cnlfY29tbWl0X2F0b21pYyhwaXBlLT5kaXNw bGF5LCBmbGFncywgTlVMTCkpOwogCi0JcmV0dXJuIHJldDsKKwljcnRjX2NoZWNrX2N1cnJlbnRf c3RhdGUocGlwZSwgY3VycmVudF9waXBlX3ZhbHVlcywgY3VycmVudF9wbGFuZV92YWx1ZXMsIHJl bGF4KTsKKwlwbGFuZV9jaGVja19jdXJyZW50X3N0YXRlKHBsYW5lLCBjdXJyZW50X3BsYW5lX3Zh bHVlcywgcmVsYXgpOwogfQogCi1zdGF0aWMgdm9pZCBhdG9taWNfc3RhdGVfZnJlZShzdHJ1Y3Qg a21zX2F0b21pY19zdGF0ZSAqc3RhdGUpCi17Ci0JZnJlZShzdGF0ZS0+Y3J0Y3MpOwotCWZyZWUo c3RhdGUtPnBsYW5lcyk7Ci0JZnJlZShzdGF0ZS0+Y29ubmVjdG9ycyk7Ci0JZnJlZShzdGF0ZSk7 Ci19CisjZGVmaW5lIGNydGNfY29tbWl0X2F0b21pY19lcnIocGlwZSwgcGxhbmUsIHJlbGF4LCBl cnIpIFwKKwljcnRjX2NvbW1pdF9hdG9taWNfZmxhZ3NfZXJyKHBpcGUsIHBsYW5lLCBEUk1fTU9E RV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgcmVsYXgsIGVycikKIAotc3RhdGljIHVpbnQzMl90IHBs YW5lX2dldF9pZ3RfZm9ybWF0KHN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0YXRlICpwbGFuZSkK K3N0YXRpYyB1aW50MzJfdCBwbGFuZV9nZXRfaWd0X2Zvcm1hdChpZ3RfcGxhbmVfdCAqcGxhbmUp CiB7CiAJZHJtTW9kZVBsYW5lUHRyIHBsYW5lX2ttczsKIAljb25zdCB1aW50MzJfdCAqaWd0X2Zv cm1hdHM7Ci0JdWludDMyX3QgcmV0ID0gMDsKIAlpbnQgbnVtX2lndF9mb3JtYXRzOwogCWludCBp OwogCi0JcGxhbmVfa21zID0gZHJtTW9kZUdldFBsYW5lKHBsYW5lLT5zdGF0ZS0+ZGVzYy0+ZmQs IHBsYW5lLT5vYmopOwotCWlndF9hc3NlcnQocGxhbmVfa21zKTsKKwlwbGFuZV9rbXMgPSBwbGFu ZS0+ZHJtX3BsYW5lOwogCiAJaWd0X2dldF9hbGxfY2Fpcm9fZm9ybWF0cygmaWd0X2Zvcm1hdHMs ICZudW1faWd0X2Zvcm1hdHMpOwogCWZvciAoaSA9IDA7IGkgPCBudW1faWd0X2Zvcm1hdHM7IGkr KykgewogCQlpbnQgajsKIAogCQlmb3IgKGogPSAwOyBqIDwgcGxhbmVfa21zLT5jb3VudF9mb3Jt YXRzOyBqKyspIHsKLQkJCWlmIChwbGFuZV9rbXMtPmZvcm1hdHNbal0gPT0gaWd0X2Zvcm1hdHNb aV0pIHsKLQkJCQlyZXQgPSBwbGFuZV9rbXMtPmZvcm1hdHNbal07Ci0JCQkJYnJlYWs7Ci0JCQl9 CisJCQlpZiAocGxhbmVfa21zLT5mb3JtYXRzW2pdID09IGlndF9mb3JtYXRzW2ldKQorCQkJCXJl dHVybiBwbGFuZV9rbXMtPmZvcm1hdHNbal07CiAJCX0KIAl9CiAKLQlkcm1Nb2RlRnJlZVBsYW5l KHBsYW5lX2ttcyk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQK LXNldF9kcG1zKGludCBmZCwgaW50IG1vZGUpCitzZXRfZHBtcyhpZ3Rfb3V0cHV0X3QgKm91dHB1 dCwgaW50IG1vZGUpCiB7Ci0JaW50IGk7Ci0JZHJtTW9kZUNvbm5lY3RvciAqY29ubmVjdG9yOwot CXVpbnQzMl90IGlkOwotCWRybU1vZGVSZXMgKnJlc291cmNlcyA9IGRybU1vZGVHZXRSZXNvdXJj ZXMoZmQpOwotCi0JZm9yIChpID0gMDsgaSA8IHJlc291cmNlcy0+Y291bnRfY29ubmVjdG9yczsg aSsrKSB7Ci0JCWlkID0gcmVzb3VyY2VzLT5jb25uZWN0b3JzW2ldOwotCi0JCWNvbm5lY3RvciA9 IGRybU1vZGVHZXRDb25uZWN0b3JDdXJyZW50KGZkLCBpZCk7Ci0KLQkJa21zdGVzdF9zZXRfY29u bmVjdG9yX2RwbXMoZmQsIGNvbm5lY3RvciwgbW9kZSk7Ci0KLQkJZHJtTW9kZUZyZWVDb25uZWN0 b3IoY29ubmVjdG9yKTsKLQl9CisJZG9fb3JfZGllKGRybU1vZGVDb25uZWN0b3JTZXRQcm9wZXJ0 eShvdXRwdXQtPmRpc3BsYXktPmRybV9mZCwgb3V0cHV0LT5pZCwKKwkJCQkJICAgICAgb3V0cHV0 LT5wcm9wc1tJR1RfQ09OTkVDVE9SX0RQTVNdLCBtb2RlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHBs YW5lX292ZXJsYXkoc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0YywKLQkJCSAgc3Ry dWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUgKnBsYW5lX29sZCkKK3N0YXRpYyB2b2lkIHBsYW5l X292ZXJsYXkoaWd0X3BpcGVfdCAqcGlwZSwgaWd0X291dHB1dF90ICpvdXRwdXQsIGlndF9wbGFu ZV90ICpwbGFuZSkKIHsKLQlzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gKm1vZGUgPSBjcnRjLT5t b2RlLmRhdGE7Ci0Jc3RydWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUgcGxhbmUgPSAqcGxhbmVf b2xkOwotCXVpbnQzMl90IGZvcm1hdCA9IHBsYW5lX2dldF9pZ3RfZm9ybWF0KCZwbGFuZSk7Ci0J ZHJtTW9kZUF0b21pY1JlcSAqcmVxID0gZHJtTW9kZUF0b21pY0FsbG9jKCk7CisJZHJtTW9kZU1v ZGVJbmZvICptb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOworCXVpbnQzMl90IGZv cm1hdCA9IHBsYW5lX2dldF9pZ3RfZm9ybWF0KHBsYW5lKTsKIAlzdHJ1Y3QgaWd0X2ZiIGZiOwor CXVpbnQzMl90IHcgPSBtb2RlLT5oZGlzcGxheSAvIDI7CisJdWludDMyX3QgaCA9IG1vZGUtPnZk aXNwbGF5IC8gMjsKIAotCWlndF9yZXF1aXJlKHJlcSk7CiAJaWd0X3JlcXVpcmUoZm9ybWF0ICE9 IDApOwogCi0JcGxhbmUuc3JjX3ggPSAwOwotCXBsYW5lLnNyY195ID0gMDsKLQlwbGFuZS5zcmNf dyA9IChtb2RlLT5oZGlzcGxheSAvIDIpIDw8IDE2OwotCXBsYW5lLnNyY19oID0gKG1vZGUtPnZk aXNwbGF5IC8gMikgPDwgMTY7Ci0JcGxhbmUuY3J0Y194ID0gbW9kZS0+aGRpc3BsYXkgLyA0Owot CXBsYW5lLmNydGNfeSA9IG1vZGUtPnZkaXNwbGF5IC8gNDsKLQlwbGFuZS5jcnRjX3cgPSBtb2Rl LT5oZGlzcGxheSAvIDI7Ci0JcGxhbmUuY3J0Y19oID0gbW9kZS0+dmRpc3BsYXkgLyAyOwotCXBs YW5lLmNydGNfaWQgPSBjcnRjLT5vYmo7Ci0JcGxhbmUuZmJfaWQgPSBpZ3RfY3JlYXRlX3BhdHRl cm5fZmIocGxhbmUuc3RhdGUtPmRlc2MtPmZkLAotCQkJCQkgICAgcGxhbmUuY3J0Y193LCBwbGFu ZS5jcnRjX2gsCi0JCQkJCSAgICBmb3JtYXQsIEk5MTVfVElMSU5HX05PTkUsICZmYik7CisJaWd0 X2NyZWF0ZV9wYXR0ZXJuX2ZiKHBpcGUtPmRpc3BsYXktPmRybV9mZCwgdywgaCwKKwkJCSAgICAg IGZvcm1hdCwgSTkxNV9USUxJTkdfTk9ORSwgJmZiKTsKKworCWlndF9wbGFuZV9zZXRfZmIocGxh bmUsICZmYik7CisJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZSwgdy8yLCBoLzIpOwogCiAJ LyogRW5hYmxlIHRoZSBvdmVybGF5IHBsYW5lIHVzaW5nIHRoZSBhdG9taWMgQVBJLCBhbmQgZG91 YmxlLWNoZWNrCiAJICogc3RhdGUgaXMgd2hhdCB3ZSB0aGluayBpdCBzaG91bGQgYmUuICovCi0J cGxhbmVfY29tbWl0X2F0b21pYygmcGxhbmUsIHJlcSwgQVRPTUlDX1JFTEFYX05PTkUpOworCXBs YW5lX2NvbW1pdChwbGFuZSwgQ09NTUlUX0FUT01JQywgQVRPTUlDX1JFTEFYX05PTkUpOwogCiAJ LyogRGlzYWJsZSB0aGUgcGxhbmUgYW5kIGNoZWNrIHRoZSBzdGF0ZSBtYXRjaGVzIHRoZSBvbGQu ICovCi0JcGxhbmVfY29tbWl0X2F0b21pYyhwbGFuZV9vbGQsIHJlcSwgQVRPTUlDX1JFTEFYX05P TkUpOworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIE5VTEwpOworCWlndF9wbGFuZV9zZXRfcG9z aXRpb24ocGxhbmUsIDAsIDApOworCXBsYW5lX2NvbW1pdChwbGFuZSwgQ09NTUlUX0FUT01JQywg QVRPTUlDX1JFTEFYX05PTkUpOwogCiAJLyogUmUtZW5hYmxlIHRoZSBwbGFuZSB0aHJvdWdoIHRo ZSBsZWdhY3kgcGxhbmUgQVBJLCBhbmQgdmVyaWZ5IHRocm91Z2gKIAkgKiBhdG9taWMuICovCi0J cGxhbmVfY29tbWl0X2xlZ2FjeSgmcGxhbmUsIEFUT01JQ19SRUxBWF9OT05FKTsKKwlpZ3RfcGxh bmVfc2V0X2ZiKHBsYW5lLCAmZmIpOworCWlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIHcv MiwgaC8yKTsKKwlwbGFuZV9jb21taXQocGxhbmUsIENPTU1JVF9MRUdBQ1ksIEFUT01JQ19SRUxB WF9OT05FKTsKIAogCS8qIFJlc3RvcmUgdGhlIHBsYW5lIHRvIGl0cyBvcmlnaW5hbCBzZXR0aW5n cyB0aHJvdWdoIHRoZSBsZWdhY3kgcGxhbmUKIAkgKiBBUEksIGFuZCB2ZXJpZnkgdGhyb3VnaCBh dG9taWMuICovCi0JcGxhbmVfY29tbWl0X2xlZ2FjeShwbGFuZV9vbGQsIEFUT01JQ19SRUxBWF9O T05FKTsKKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsKKwlpZ3RfcGxhbmVfc2V0X3Bv c2l0aW9uKHBsYW5lLCAwLCAwKTsKKwlwbGFuZV9jb21taXQocGxhbmUsIENPTU1JVF9MRUdBQ1ks IEFUT01JQ19SRUxBWF9OT05FKTsKIAotCWRybU1vZGVBdG9taWNGcmVlKHJlcSk7CisJaWd0X3Jl bW92ZV9mYihwaXBlLT5kaXNwbGF5LT5kcm1fZmQsICZmYik7CiB9CiAKLXN0YXRpYyB2b2lkIHBs YW5lX3ByaW1hcnkoc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0YywKLQkJCSAgc3Ry dWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUgKnBsYW5lX29sZCkKK3N0YXRpYyB2b2lkIHBsYW5l X3ByaW1hcnkoaWd0X3BpcGVfdCAqcGlwZSwgaWd0X3BsYW5lX3QgKnBsYW5lLCBzdHJ1Y3QgaWd0 X2ZiICpmYikKIHsKLQlzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gKm1vZGUgPSBjcnRjLT5tb2Rl LmRhdGE7Ci0Jc3RydWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUgcGxhbmUgPSAqcGxhbmVfb2xk OwotCXVpbnQzMl90IGZvcm1hdCA9IHBsYW5lX2dldF9pZ3RfZm9ybWF0KCZwbGFuZSk7Ci0JZHJt TW9kZUF0b21pY1JlcSAqcmVxID0gZHJtTW9kZUF0b21pY0FsbG9jKCk7Ci0Jc3RydWN0IGlndF9m YiBmYjsKLQl1aW50MzJfdCBmbGFncyA9IDA7Ci0JaW50IHJldDsKLQotCWlndF9yZXF1aXJlKGZv cm1hdCAhPSAwKTsKKwlzdHJ1Y3QgaWd0X2ZiIGZiMjsKIAotCXBsYW5lLnNyY194ID0gMDsKLQlw bGFuZS5zcmNfeSA9IDA7Ci0JcGxhbmUuc3JjX3cgPSBtb2RlLT5oZGlzcGxheSA8PCAxNjsKLQlw bGFuZS5zcmNfaCA9IG1vZGUtPnZkaXNwbGF5IDw8IDE2OwotCXBsYW5lLmNydGNfeCA9IDA7Ci0J cGxhbmUuY3J0Y195ID0gMDsKLQlwbGFuZS5jcnRjX3cgPSBtb2RlLT5oZGlzcGxheTsKLQlwbGFu ZS5jcnRjX2ggPSBtb2RlLT52ZGlzcGxheTsKLQlwbGFuZS5jcnRjX2lkID0gY3J0Yy0+b2JqOwot CXBsYW5lLmZiX2lkID0gaWd0X2NyZWF0ZV9wYXR0ZXJuX2ZiKHBsYW5lLnN0YXRlLT5kZXNjLT5m ZCwKLQkJCQkJICAgIHBsYW5lLmNydGNfdywgcGxhbmUuY3J0Y19oLAotCQkJCQkgICAgZm9ybWF0 LCBJOTE1X1RJTElOR19OT05FLCAmZmIpOwotCi0JZHJtTW9kZUF0b21pY1NldEN1cnNvcihyZXEs IDApOwotCWNydGNfcG9wdWxhdGVfcmVxKGNydGMsIHJlcSk7Ci0JcGxhbmVfcG9wdWxhdGVfcmVx KCZwbGFuZSwgcmVxKTsKLQlyZXQgPSBkcm1Nb2RlQXRvbWljQ29tbWl0KGNydGMtPnN0YXRlLT5k ZXNjLT5mZCwgcmVxLAotCQkJCSAgRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSwgTlVMTCk7Ci0J LyogVHJ5IGhhcmRlciBpbiBjYXNlIHRoZSBmYWlsdXJlIGlzIGNhdXNlZCBieSBkaXNhbGxvd2lu ZyBtb2Rlc2V0LiAqLwotCWlmIChyZXQgPT0gLUVJTlZBTCkKLQkJZmxhZ3MgfD0gRFJNX01PREVf QVRPTUlDX0FMTE9XX01PREVTRVQ7CisJaWd0X2NyZWF0ZV9jb2xvcl9wYXR0ZXJuX2ZiKHBpcGUt PmRpc3BsYXktPmRybV9mZCwKKwkJCQkgICAgZmItPndpZHRoLCBmYi0+aGVpZ2h0LAorCQkJCSAg ICBmYi0+ZHJtX2Zvcm1hdCwgSTkxNV9USUxJTkdfTk9ORSwKKwkJCQkgICAgMC4yLCAwLjIsIDAu MiwgJmZiMik7CiAKIAkvKiBGbGlwIHRoZSBwcmltYXJ5IHBsYW5lIHVzaW5nIHRoZSBhdG9taWMg QVBJLCBhbmQgZG91YmxlLWNoZWNrCiAJICogc3RhdGUgaXMgd2hhdCB3ZSB0aGluayBpdCBzaG91 bGQgYmUuICovCi0JY3J0Y19jb21taXRfYXRvbWljKGNydGMsICZwbGFuZSwgcmVxLCBBVE9NSUNf UkVMQVhfTk9ORSwgZmxhZ3MpOworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZmYjIpOworCWNy dGNfY29tbWl0KHBpcGUsIHBsYW5lLCBDT01NSVRfQVRPTUlDLCBBVE9NSUNfUkVMQVhfTk9ORSk7 CiAKIAkvKiBSZXN0b3JlIHRoZSBwcmltYXJ5IHBsYW5lIGFuZCBjaGVjayB0aGUgc3RhdGUgbWF0 Y2hlcyB0aGUgb2xkLiAqLwotCWNydGNfY29tbWl0X2F0b21pYyhjcnRjLCBwbGFuZV9vbGQsIHJl cSwgQVRPTUlDX1JFTEFYX05PTkUsIGZsYWdzKTsKKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBm Yik7CisJY3J0Y19jb21taXQocGlwZSwgcGxhbmUsIENPTU1JVF9BVE9NSUMsIEFUT01JQ19SRUxB WF9OT05FKTsKIAotCS8qIFJlLWVuYWJsZSB0aGUgcGxhbmUgdGhyb3VnaCB0aGUgbGVnYWN5IENS VEMvcHJpbWFyeS1wbGFuZSBBUEksIGFuZAorCS8qIFNldCB0aGUgcGxhbmUgdGhyb3VnaCB0aGUg bGVnYWN5IENSVEMvcHJpbWFyeS1wbGFuZSBBUEksIGFuZAogCSAqIHZlcmlmeSB0aHJvdWdoIGF0 b21pYy4gKi8KLQljcnRjX2NvbW1pdF9sZWdhY3koY3J0YywgJnBsYW5lLCBDUlRDX1JFTEFYX01P REUpOworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZmYjIpOworCWNydGNfY29tbWl0KHBpcGUs IHBsYW5lLCBDT01NSVRfTEVHQUNZLCBDUlRDX1JFTEFYX01PREUpOwogCiAJLyogUmVzdG9yZSB0 aGUgcGxhbmUgdG8gaXRzIG9yaWdpbmFsIHNldHRpbmdzIHRocm91Z2ggdGhlIGxlZ2FjeSBDUlRD CiAJICogQVBJLCBhbmQgdmVyaWZ5IHRocm91Z2ggYXRvbWljLiAqLwotCWNydGNfY29tbWl0X2xl Z2FjeShjcnRjLCBwbGFuZV9vbGQsIENSVENfUkVMQVhfTU9ERSk7CisJaWd0X3BsYW5lX3NldF9m YihwbGFuZSwgZmIpOworCWNydGNfY29tbWl0KHBpcGUsIHBsYW5lLCBDT01NSVRfTEVHQUNZLCBD UlRDX1JFTEFYX01PREUpOwogCi0JLyogRmluYWxseSwgcmVzdG9yZSB0byB0aGUgb3JpZ2luYWwg c3RhdGUuICovCi0JY3J0Y19jb21taXRfYXRvbWljKGNydGMsIHBsYW5lX29sZCwgcmVxLCBBVE9N SUNfUkVMQVhfTk9ORSwgZmxhZ3MpOwotCi0JZHJtTW9kZUF0b21pY0ZyZWUocmVxKTsKKwkvKiBT ZXQgdGhlIHBsYW5lIHRocm91Z2ggdGhlIHVuaXZlcnNhbCBzZXRwbGFuZSBBUEksIGFuZAorCSAq IHZlcmlmeSB0aHJvdWdoIGF0b21pYy4gKi8KKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZmIy KTsKKwlwbGFuZV9jb21taXQocGxhbmUsIENPTU1JVF9VTklWRVJTQUwsIEFUT01JQ19SRUxBWF9O T05FKTsKIH0KIAogLyogdGVzdCB0byBlbnN1cmUgdGhhdCBEUk1fTU9ERV9BVE9NSUNfVEVTVF9P TkxZIHJlYWxseSBvbmx5IHRvdWNoZXMgdGhlCiAgKiBmcmVlLXN0YW5kaW5nIHN0YXRlIG9iamVj dHMgYW5kIG5vdGhpbmcgZWxzZS4KICAqLwotc3RhdGljIHZvaWQgdGVzdF9vbmx5KHN0cnVjdCBr bXNfYXRvbWljX2NydGNfc3RhdGUgKmNydGMsCi0JCSAgICAgIHN0cnVjdCBrbXNfYXRvbWljX3Bs YW5lX3N0YXRlICpwbGFuZV9vbGQpCitzdGF0aWMgdm9pZCB0ZXN0X29ubHkoaWd0X3BpcGVfdCAq cGlwZV9vYmosCisJCSAgICAgIGlndF9wbGFuZV90ICpwcmltYXJ5LAorCQkgICAgICBpZ3Rfb3V0 cHV0X3QgKm91dHB1dCkKIHsKLQlzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gKm1vZGUgPSBjcnRj LT5tb2RlLmRhdGE7Ci0Jc3RydWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUgcGxhbmUgPSAqcGxh bmVfb2xkOwotCXVpbnQzMl90IGZvcm1hdCA9IHBsYW5lX2dldF9pZ3RfZm9ybWF0KCZwbGFuZSk7 Ci0JZHJtTW9kZUF0b21pY1JlcSAqcmVxID0gZHJtTW9kZUF0b21pY0FsbG9jKCk7CisJZHJtTW9k ZU1vZGVJbmZvICptb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOworCXVpbnQzMl90 IGZvcm1hdCA9IHBsYW5lX2dldF9pZ3RfZm9ybWF0KHByaW1hcnkpOwogCXN0cnVjdCBpZ3RfZmIg ZmI7Ci0JaW50IHJldDsKKwl1aW50NjRfdCBvbGRfcGxhbmVfdmFsdWVzW0lHVF9OVU1fUExBTkVf UFJPUFNdLCBvbGRfY3J0Y192YWx1ZXNbSUdUX05VTV9DUlRDX1BST1BTXTsKIAogCWlndF9yZXF1 aXJlKGZvcm1hdCAhPSAwKTsKIAotCXBsYW5lLnNyY194ID0gMDsKLQlwbGFuZS5zcmNfeSA9IDA7 Ci0JcGxhbmUuc3JjX3cgPSBtb2RlLT5oZGlzcGxheSA8PCAxNjsKLQlwbGFuZS5zcmNfaCA9IG1v ZGUtPnZkaXNwbGF5IDw8IDE2OwotCXBsYW5lLmNydGNfeCA9IDA7Ci0JcGxhbmUuY3J0Y195ID0g MDsKLQlwbGFuZS5jcnRjX3cgPSBtb2RlLT5oZGlzcGxheTsKLQlwbGFuZS5jcnRjX2ggPSBtb2Rl LT52ZGlzcGxheTsKLQlwbGFuZS5jcnRjX2lkID0gY3J0Yy0+b2JqOwotCXBsYW5lLmZiX2lkID0g aWd0X2NyZWF0ZV9wYXR0ZXJuX2ZiKHBsYW5lLnN0YXRlLT5kZXNjLT5mZCwKLQkJCQkJICAgIHBs YW5lLmNydGNfdywgcGxhbmUuY3J0Y19oLAotCQkJCQkgICAgZm9ybWF0LCBJOTE1X1RJTElOR19O T05FLCAmZmIpOwotCi0JZHJtTW9kZUF0b21pY1NldEN1cnNvcihyZXEsIDApOwotCWNydGNfcG9w dWxhdGVfcmVxKGNydGMsIHJlcSk7Ci0JcGxhbmVfcG9wdWxhdGVfcmVxKCZwbGFuZSwgcmVxKTsK LQlyZXQgPSBkcm1Nb2RlQXRvbWljQ29tbWl0KGNydGMtPnN0YXRlLT5kZXNjLT5mZCwgcmVxLAot CQkJCSAgRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSwgTlVMTCk7Ci0KLQlpZ3RfYXNzZXJ0X2Vx KHJldCwgMCk7Ci0KLQkvKiBnbyB0aHJvdWdoIGRwbXMgb2ZmL29uIGN5Y2xlICovCi0Jc2V0X2Rw bXMoY3J0Yy0+c3RhdGUtPmRlc2MtPmZkLCBEUk1fTU9ERV9EUE1TX09GRik7Ci0Jc2V0X2RwbXMo Y3J0Yy0+c3RhdGUtPmRlc2MtPmZkLCBEUk1fTU9ERV9EUE1TX09OKTsKLQotCS8qIGNoZWNrIHRo ZSBzdGF0ZSAqLwotCWNydGNfY2hlY2tfY3VycmVudF9zdGF0ZShjcnRjLCBwbGFuZV9vbGQsIEFU T01JQ19SRUxBWF9OT05FKTsKLQlwbGFuZV9jaGVja19jdXJyZW50X3N0YXRlKHBsYW5lX29sZCwg QVRPTUlDX1JFTEFYX05PTkUpOwotCi0JLyogUmUtZW5hYmxlIHRoZSBwbGFuZSB0aHJvdWdoIHRo ZSBsZWdhY3kgQ1JUQy9wcmltYXJ5LXBsYW5lIEFQSSwgYW5kCi0JICogdmVyaWZ5IHRocm91Z2gg YXRvbWljLiAqLwotCWNydGNfY29tbWl0X2xlZ2FjeShjcnRjLCBwbGFuZV9vbGQsIENSVENfUkVM QVhfTU9ERSk7CisJcGxhbmVfZ2V0X2N1cnJlbnRfc3RhdGUocHJpbWFyeSwgb2xkX3BsYW5lX3Zh bHVlcyk7CisJY3J0Y19nZXRfY3VycmVudF9zdGF0ZShwaXBlX29iaiwgb2xkX2NydGNfdmFsdWVz KTsKKworCWlndF9hc3NlcnQoIW9sZF9jcnRjX3ZhbHVlc1tJR1RfQ1JUQ19NT0RFX0lEXSk7CisK KwlpZ3RfY3JlYXRlX3BhdHRlcm5fZmIocGlwZV9vYmotPmRpc3BsYXktPmRybV9mZCwKKwkJCSAg ICAgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LAorCQkJICAgICBmb3JtYXQsIEk5MTVf VElMSU5HX05PTkUsICZmYik7CisJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCAmZmIpOworCWln dF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBwaXBlX29iai0+cGlwZSk7CisKKwlpZ3RfZGlzcGxh eV9jb21taXRfYXRvbWljKHBpcGVfb2JqLT5kaXNwbGF5LCBEUk1fTU9ERV9BVE9NSUNfVEVTVF9P TkxZIHwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQsIE5VTEwpOworCisJLyogY2hlY2sg dGhlIHN0YXRlLCBzaG91bGQgc3RpbGwgYmUgb2xkIHN0YXRlICovCisJY3J0Y19jaGVja19jdXJy ZW50X3N0YXRlKHBpcGVfb2JqLCBvbGRfY3J0Y192YWx1ZXMsIG9sZF9wbGFuZV92YWx1ZXMsIEFU T01JQ19SRUxBWF9OT05FKTsKKwlwbGFuZV9jaGVja19jdXJyZW50X3N0YXRlKHByaW1hcnksIG9s ZF9wbGFuZV92YWx1ZXMsIEFUT01JQ19SRUxBWF9OT05FKTsKKworCS8qCisJICogRW5hYmxlIHRo ZSBwbGFuZSB0aHJvdWdoIHRoZSBsZWdhY3kgQ1JUQy9wcmltYXJ5LXBsYW5lIEFQSSwgYW5kCisJ ICogdmVyaWZ5IHRocm91Z2ggYXRvbWljLgorCSAqLworCWNydGNfY29tbWl0KHBpcGVfb2JqLCBw cmltYXJ5LCBDT01NSVRfTEVHQUNZLCBDUlRDX1JFTEFYX01PREUpOworCisJLyogU2FtZSBmb3Ig ZGlzYWJsZS4uICovCisJcGxhbmVfZ2V0X2N1cnJlbnRfc3RhdGUocHJpbWFyeSwgb2xkX3BsYW5l X3ZhbHVlcyk7CisJY3J0Y19nZXRfY3VycmVudF9zdGF0ZShwaXBlX29iaiwgb2xkX2NydGNfdmFs dWVzKTsKKworCWlndF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgTlVMTCk7CisJaWd0X291dHB1dF9z ZXRfcGlwZShvdXRwdXQsIFBJUEVfTk9ORSk7CiAKLQlkcm1Nb2RlQXRvbWljRnJlZShyZXEpOwor CWlndF9kaXNwbGF5X2NvbW1pdF9hdG9taWMocGlwZV9vYmotPmRpc3BsYXksIERSTV9NT0RFX0FU T01JQ19URVNUX09OTFkgfCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgTlVMTCk7CisK KwkvKiBmb3IgZXh0cmEgc3RyZXNzLCBnbyB0aHJvdWdoIGRwbXMgb2ZmL29uIGN5Y2xlICovCisJ c2V0X2RwbXMob3V0cHV0LCBEUk1fTU9ERV9EUE1TX09GRik7CisJc2V0X2RwbXMob3V0cHV0LCBE Uk1fTU9ERV9EUE1TX09OKTsKKworCS8qIGNoZWNrIHRoZSBzdGF0ZSwgc2hvdWxkIHN0aWxsIGJl IG9sZCBzdGF0ZSAqLworCWNydGNfY2hlY2tfY3VycmVudF9zdGF0ZShwaXBlX29iaiwgb2xkX2Ny dGNfdmFsdWVzLCBvbGRfcGxhbmVfdmFsdWVzLCBBVE9NSUNfUkVMQVhfTk9ORSk7CisJcGxhbmVf Y2hlY2tfY3VycmVudF9zdGF0ZShwcmltYXJ5LCBvbGRfcGxhbmVfdmFsdWVzLCBBVE9NSUNfUkVM QVhfTk9ORSk7CisKKwkvKiBBbmQgZGlzYWJsZSB0aGUgcGlwZSBhbmQgcmVtb3ZlIGZiLCB0ZXN0 IGNvbXBsZXRlICovCisJY3J0Y19jb21taXQocGlwZV9vYmosIHByaW1hcnksIENPTU1JVF9BVE9N SUMsIEFUT01JQ19SRUxBWF9OT05FKTsKKwlpZ3RfcmVtb3ZlX2ZiKHBpcGVfb2JqLT5kaXNwbGF5 LT5kcm1fZmQsICZmYik7CiB9CiAKLXN0YXRpYyB2b2lkIHBsYW5lX2N1cnNvcihzdHJ1Y3Qga21z X2F0b21pY19jcnRjX3N0YXRlICpjcnRjLAotCQkJIHN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0 YXRlICpwbGFuZV9vbGQpCitzdGF0aWMgdm9pZCBwbGFuZV9jdXJzb3IoaWd0X3BpcGVfdCAqcGlw ZV9vYmosCisJCQkgaWd0X291dHB1dF90ICpvdXRwdXQsCisJCQkgaWd0X3BsYW5lX3QgKmN1cnNv cikKIHsKLQlzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gKm1vZGUgPSBjcnRjLT5tb2RlLmRhdGE7 Ci0Jc3RydWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUgcGxhbmUgPSAqcGxhbmVfb2xkOwotCWRy bU1vZGVBdG9taWNSZXEgKnJlcSA9IGRybU1vZGVBdG9taWNBbGxvYygpOworCWRybU1vZGVNb2Rl SW5mbyAqbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKIAlzdHJ1Y3QgaWd0X2Zi IGZiOwogCXVpbnQ2NF90IHdpZHRoLCBoZWlnaHQ7Ci0KLQlpZ3RfYXNzZXJ0KHJlcSk7CisJaW50 IHggPSBtb2RlLT5oZGlzcGxheSAvIDI7CisJaW50IHkgPSBtb2RlLT52ZGlzcGxheSAvIDI7CiAK IAkvKiBBbnkga2VybmVsIG5ldyBlbm91Z2ggZm9yIGF0b21pYywgYWxzbyBoYXMgdGhlIGN1cnNv ciBzaXplIGNhcHMuICovCi0JZG9fb3JfZGllKGRybUdldENhcChwbGFuZS5zdGF0ZS0+ZGVzYy0+ ZmQsCisJZG9fb3JfZGllKGRybUdldENhcChwaXBlX29iai0+ZGlzcGxheS0+ZHJtX2ZkLAogCSAg ICAgICAgICAgICAgICAgICAgRFJNX0NBUF9DVVJTT1JfV0lEVEgsICZ3aWR0aCkpOwotCWRvX29y X2RpZShkcm1HZXRDYXAocGxhbmUuc3RhdGUtPmRlc2MtPmZkLAorCWRvX29yX2RpZShkcm1HZXRD YXAocGlwZV9vYmotPmRpc3BsYXktPmRybV9mZCwKIAkgICAgICAgICAgICAgICAgICAgIERSTV9D QVBfQ1VSU09SX0hFSUdIVCwgJmhlaWdodCkpOwogCi0JcGxhbmUuc3JjX3ggPSAwOwotCXBsYW5l LnNyY195ID0gMDsKLQlwbGFuZS5zcmNfdyA9IHdpZHRoIDw8IDE2OwotCXBsYW5lLnNyY19oID0g aGVpZ2h0IDw8IDE2OwotCXBsYW5lLmNydGNfeCA9IG1vZGUtPmhkaXNwbGF5IC8gMjsKLQlwbGFu ZS5jcnRjX3kgPSBtb2RlLT52ZGlzcGxheSAvIDI7Ci0JcGxhbmUuY3J0Y193ID0gd2lkdGg7Ci0J cGxhbmUuY3J0Y19oID0gaGVpZ2h0OwotCXBsYW5lLmNydGNfaWQgPSBjcnRjLT5vYmo7Ci0JcGxh bmUuZmJfaWQgPSBpZ3RfY3JlYXRlX2NvbG9yX2ZiKHBsYW5lLnN0YXRlLT5kZXNjLT5mZCwKLQkJ CQkJICB3aWR0aCwgaGVpZ2h0LAotCQkJCQkgIERSTV9GT1JNQVRfQVJHQjg4ODgsCi0JCQkJCSAg TE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKLQkJCQkJICAwLjAsIDAuMCwgMC4wLAotCQkJCQkg ICZmYik7Ci0JaWd0X2Fzc2VydF9uZXFfdTMyKHBsYW5lLmZiX2lkLCAwKTsKKwlpZ3RfY3JlYXRl X2NvbG9yX2ZiKHBpcGVfb2JqLT5kaXNwbGF5LT5kcm1fZmQsCisJCQkgICAgd2lkdGgsIGhlaWdo dCwgRFJNX0ZPUk1BVF9BUkdCODg4OCwKKwkJCSAgICBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05F LAorCQkJICAgIDAuMCwgMC4wLCAwLjAsICZmYik7CiAKIAkvKiBGbGlwIHRoZSBjdXJzb3IgcGxh bmUgdXNpbmcgdGhlIGF0b21pYyBBUEksIGFuZCBkb3VibGUtY2hlY2sKIAkgKiBzdGF0ZSBpcyB3 aGF0IHdlIHRoaW5rIGl0IHNob3VsZCBiZS4gKi8KLQlwbGFuZV9jb21taXRfYXRvbWljKCZwbGFu ZSwgcmVxLCBBVE9NSUNfUkVMQVhfTk9ORSk7CisJaWd0X3BsYW5lX3NldF9mYihjdXJzb3IsICZm Yik7CisJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihjdXJzb3IsIHgsIHkpOworCXBsYW5lX2NvbW1p dChjdXJzb3IsIENPTU1JVF9BVE9NSUMsIEFUT01JQ19SRUxBWF9OT05FKTsKIAogCS8qIFJlc3Rv cmUgdGhlIGN1cnNvciBwbGFuZSBhbmQgY2hlY2sgdGhlIHN0YXRlIG1hdGNoZXMgdGhlIG9sZC4g Ki8KLQlwbGFuZV9jb21taXRfYXRvbWljKHBsYW5lX29sZCwgcmVxLCBBVE9NSUNfUkVMQVhfTk9O RSk7CisJaWd0X3BsYW5lX3NldF9mYihjdXJzb3IsIE5VTEwpOworCWlndF9wbGFuZV9zZXRfcG9z aXRpb24oY3Vyc29yLCAwLCAwKTsKKwlwbGFuZV9jb21taXQoY3Vyc29yLCBDT01NSVRfQVRPTUlD LCBBVE9NSUNfUkVMQVhfTk9ORSk7CiAKIAkvKiBSZS1lbmFibGUgdGhlIHBsYW5lIHRocm91Z2gg dGhlIGxlZ2FjeSBjdXJzb3IgQVBJLCBhbmQgdmVyaWZ5CiAJICogdGhyb3VnaCBhdG9taWMuICov Ci0JZG9fb3JfZGllKGRybU1vZGVNb3ZlQ3Vyc29yKHBsYW5lLnN0YXRlLT5kZXNjLT5mZCwgcGxh bmUuY3J0Y19pZCwKLQkJCQkgICAgcGxhbmUuY3J0Y194LCBwbGFuZS5jcnRjX3kpKTsKLQlkb19v cl9kaWUoZHJtTW9kZVNldEN1cnNvcihwbGFuZS5zdGF0ZS0+ZGVzYy0+ZmQsIHBsYW5lLmNydGNf aWQsCi0JCQkJICAgZmIuZ2VtX2hhbmRsZSwgd2lkdGgsIGhlaWdodCkpOwotCXBsYW5lX2NoZWNr X2N1cnJlbnRfc3RhdGUoJnBsYW5lLCBQTEFORV9SRUxBWF9GQik7CisJaWd0X3BsYW5lX3NldF9m YihjdXJzb3IsICZmYik7CisJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihjdXJzb3IsIHgsIHkpOwor CXBsYW5lX2NvbW1pdChjdXJzb3IsIENPTU1JVF9MRUdBQ1ksIFBMQU5FX1JFTEFYX0ZCKTsKIAog CS8qIFdpZ2dsZS4gKi8KLQlwbGFuZS5jcnRjX3ggLT0gMTY7Ci0JcGxhbmUuY3J0Y195IC09IDE2 OwotCWRvX29yX2RpZShkcm1Nb2RlTW92ZUN1cnNvcihwbGFuZS5zdGF0ZS0+ZGVzYy0+ZmQsIHBs YW5lLmNydGNfaWQsCi0JCQkJICAgIHBsYW5lLmNydGNfeCwgcGxhbmUuY3J0Y195KSk7Ci0JcGxh bmVfY2hlY2tfY3VycmVudF9zdGF0ZSgmcGxhbmUsIFBMQU5FX1JFTEFYX0ZCKTsKKwlpZ3RfcGxh bmVfc2V0X3Bvc2l0aW9uKGN1cnNvciwgeCAtIDE2LCB5IC0gMTYpOworCXBsYW5lX2NvbW1pdChj dXJzb3IsIENPTU1JVF9MRUdBQ1ksIFBMQU5FX1JFTEFYX0ZCKTsKIAogCS8qIFJlc3RvcmUgdGhl IHBsYW5lIHRvIGl0cyBvcmlnaW5hbCBzZXR0aW5ncyB0aHJvdWdoIHRoZSBsZWdhY3kgY3Vyc29y CiAJICogQVBJLCBhbmQgdmVyaWZ5IHRocm91Z2ggYXRvbWljLiAqLwotCWRvX29yX2RpZShkcm1N b2RlU2V0Q3Vyc29yMihwbGFuZS5zdGF0ZS0+ZGVzYy0+ZmQsIHBsYW5lLmNydGNfaWQsCi0JCQkJ ICAgIDAsIDAsIDAsIDAsIDApKTsKLQlwbGFuZV9jaGVja19jdXJyZW50X3N0YXRlKHBsYW5lX29s ZCwgQVRPTUlDX1JFTEFYX05PTkUpOwotCi0JLyogRmluYWxseSwgcmVzdG9yZSB0byB0aGUgb3Jp Z2luYWwgc3RhdGUuICovCi0JcGxhbmVfY29tbWl0X2F0b21pYyhwbGFuZV9vbGQsIHJlcSwgQVRP TUlDX1JFTEFYX05PTkUpOwotCi0JZHJtTW9kZUF0b21pY0ZyZWUocmVxKTsKKwlpZ3RfcGxhbmVf c2V0X2ZiKGN1cnNvciwgTlVMTCk7CisJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihjdXJzb3IsIDAs IDApOworCXBsYW5lX2NvbW1pdChjdXJzb3IsIENPTU1JVF9MRUdBQ1ksIEFUT01JQ19SRUxBWF9O T05FKTsKIH0KIAotc3RhdGljIHZvaWQgcGxhbmVfaW52YWxpZF9wYXJhbXMoc3RydWN0IGttc19h dG9taWNfY3J0Y19zdGF0ZSAqY3J0YywKLQkJCQkgc3RydWN0IGttc19hdG9taWNfcGxhbmVfc3Rh dGUgKnBsYW5lX29sZCwKLQkJCQkgc3RydWN0IGttc19hdG9taWNfY29ubmVjdG9yX3N0YXRlICpj b25uKQorc3RhdGljIHZvaWQgcGxhbmVfaW52YWxpZF9wYXJhbXMoaWd0X3BpcGVfdCAqcGlwZSwK KwkJCQkgaWd0X291dHB1dF90ICpvdXRwdXQsCisJCQkJIGlndF9wbGFuZV90ICpwbGFuZSwKKwkJ CQkgc3RydWN0IGlndF9mYiAqZmIpCiB7Ci0Jc3RydWN0IGRybV9tb2RlX21vZGVpbmZvICptb2Rl ID0gY3J0Yy0+bW9kZS5kYXRhOwotCXN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0YXRlIHBsYW5l ID0gKnBsYW5lX29sZDsKLQl1aW50MzJfdCBmb3JtYXQgPSBwbGFuZV9nZXRfaWd0X2Zvcm1hdCgm cGxhbmUpOwotCWRybU1vZGVBdG9taWNSZXEgKnJlcSA9IGRybU1vZGVBdG9taWNBbGxvYygpOwot CXN0cnVjdCBpZ3RfZmIgZmI7CisJc3RydWN0IGlndF9mYiBmYjI7CiAKIAkvKiBQYXNzIGEgc2Vy aWVzIG9mIGludmFsaWQgb2JqZWN0IElEcyBmb3IgdGhlIEZCIElELiAqLwotCXBsYW5lLmZiX2lk ID0gcGxhbmUub2JqOwotCXBsYW5lX2NvbW1pdF9hdG9taWNfZXJyKCZwbGFuZSwgcGxhbmVfb2xk LCByZXEsCi0JICAgICAgICAgICAgICAgICAgICAgICAgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZB TCk7CisJaWd0X3BsYW5lX3NldF9wcm9wX3ZhbHVlKHBsYW5lLCBJR1RfUExBTkVfRkJfSUQsIHBs YW5lLT5kcm1fcGxhbmUtPnBsYW5lX2lkKTsKKwlwbGFuZV9jb21taXRfYXRvbWljX2VycihwbGFu ZSwgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7CiAKLQlwbGFuZS5mYl9pZCA9IGNydGMtPm9i ajsKLQlwbGFuZV9jb21taXRfYXRvbWljX2VycigmcGxhbmUsIHBsYW5lX29sZCwgcmVxLAotCSAg ICAgICAgICAgICAgICAgICAgICAgIEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwpOworCWlndF9w bGFuZV9zZXRfcHJvcF92YWx1ZShwbGFuZSwgSUdUX1BMQU5FX0ZCX0lELCBwaXBlLT5jcnRjX2lk KTsKKwlwbGFuZV9jb21taXRfYXRvbWljX2VycihwbGFuZSwgQVRPTUlDX1JFTEFYX05PTkUsIEVJ TlZBTCk7CiAKLQlwbGFuZS5mYl9pZCA9IGNvbm4tPm9iajsKLQlwbGFuZV9jb21taXRfYXRvbWlj X2VycigmcGxhbmUsIHBsYW5lX29sZCwgcmVxLAotCSAgICAgICAgICAgICAgICAgICAgICAgIEFU T01JQ19SRUxBWF9OT05FLCBFSU5WQUwpOworCWlndF9wbGFuZV9zZXRfcHJvcF92YWx1ZShwbGFu ZSwgSUdUX1BMQU5FX0ZCX0lELCBvdXRwdXQtPmlkKTsKKwlwbGFuZV9jb21taXRfYXRvbWljX2Vy cihwbGFuZSwgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7CiAKLQlwbGFuZS5mYl9pZCA9IGNy dGMtPm1vZGUuaWQ7Ci0JcGxhbmVfY29tbWl0X2F0b21pY19lcnIoJnBsYW5lLCBwbGFuZV9vbGQs IHJlcSwKLQkgICAgICAgICAgICAgICAgICAgICAgICBBVE9NSUNfUkVMQVhfTk9ORSwgRUlOVkFM KTsKKwlpZ3RfcGxhbmVfc2V0X3Byb3BfdmFsdWUocGxhbmUsIElHVF9QTEFORV9GQl9JRCwgcGlw ZS0+dmFsdWVzW0lHVF9DUlRDX01PREVfSURdKTsKKwlwbGFuZV9jb21taXRfYXRvbWljX2Vycihw bGFuZSwgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7CiAKLQlwbGFuZS5mYl9pZCA9IHBsYW5l X29sZC0+ZmJfaWQ7Ci0JcGxhbmVfY29tbWl0X2F0b21pYygmcGxhbmUsIHJlcSwgQVRPTUlDX1JF TEFYX05PTkUpOworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIGZiKTsKKwlwbGFuZV9jb21taXQo cGxhbmUsIENPTU1JVF9BVE9NSUMsIEFUT01JQ19SRUxBWF9OT05FKTsKIAogCS8qIFBhc3MgYSBz ZXJpZXMgb2YgaW52YWxpZCBvYmplY3QgSURzIGZvciB0aGUgQ1JUQyBJRC4gKi8KLQlwbGFuZS5j cnRjX2lkID0gcGxhbmUub2JqOwotCXBsYW5lX2NvbW1pdF9hdG9taWNfZXJyKCZwbGFuZSwgcGxh bmVfb2xkLCByZXEsCi0JICAgICAgICAgICAgICAgICAgICAgICAgQVRPTUlDX1JFTEFYX05PTkUs IEVJTlZBTCk7CisJaWd0X3BsYW5lX3NldF9wcm9wX3ZhbHVlKHBsYW5lLCBJR1RfUExBTkVfQ1JU Q19JRCwgcGxhbmUtPmRybV9wbGFuZS0+cGxhbmVfaWQpOworCXBsYW5lX2NvbW1pdF9hdG9taWNf ZXJyKHBsYW5lLCBBVE9NSUNfUkVMQVhfTk9ORSwgRUlOVkFMKTsKIAotCXBsYW5lLmNydGNfaWQg PSBwbGFuZS5mYl9pZDsKLQlwbGFuZV9jb21taXRfYXRvbWljX2VycigmcGxhbmUsIHBsYW5lX29s ZCwgcmVxLAotCSAgICAgICAgICAgICAgICAgICAgICAgIEFUT01JQ19SRUxBWF9OT05FLCBFSU5W QUwpOworCWlndF9wbGFuZV9zZXRfcHJvcF92YWx1ZShwbGFuZSwgSUdUX1BMQU5FX0NSVENfSUQs IGZiLT5mYl9pZCk7CisJcGxhbmVfY29tbWl0X2F0b21pY19lcnIocGxhbmUsIEFUT01JQ19SRUxB WF9OT05FLCBFSU5WQUwpOwogCi0JcGxhbmUuY3J0Y19pZCA9IGNvbm4tPm9iajsKLQlwbGFuZV9j b21taXRfYXRvbWljX2VycigmcGxhbmUsIHBsYW5lX29sZCwgcmVxLAotCSAgICAgICAgICAgICAg ICAgICAgICAgIEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwpOworCWlndF9wbGFuZV9zZXRfcHJv cF92YWx1ZShwbGFuZSwgSUdUX1BMQU5FX0NSVENfSUQsIG91dHB1dC0+aWQpOworCXBsYW5lX2Nv bW1pdF9hdG9taWNfZXJyKHBsYW5lLCBBVE9NSUNfUkVMQVhfTk9ORSwgRUlOVkFMKTsKIAotCXBs YW5lLmNydGNfaWQgPSBjcnRjLT5tb2RlLmlkOwotCXBsYW5lX2NvbW1pdF9hdG9taWNfZXJyKCZw bGFuZSwgcGxhbmVfb2xkLCByZXEsCi0JICAgICAgICAgICAgICAgICAgICAgICAgQVRPTUlDX1JF TEFYX05PTkUsIEVJTlZBTCk7CisJaWd0X3BsYW5lX3NldF9wcm9wX3ZhbHVlKHBsYW5lLCBJR1Rf UExBTkVfQ1JUQ19JRCwgcGlwZS0+dmFsdWVzW0lHVF9DUlRDX01PREVfSURdKTsKKwlwbGFuZV9j b21taXRfYXRvbWljX2VycihwbGFuZSwgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7CiAKLQlw bGFuZS5jcnRjX2lkID0gcGxhbmVfb2xkLT5jcnRjX2lkOwotCXBsYW5lX2NvbW1pdF9hdG9taWMo JnBsYW5lLCByZXEsIEFUT01JQ19SRUxBWF9OT05FKTsKKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5l LCBmYik7CisJcGxhbmVfY29tbWl0KHBsYW5lLCBDT01NSVRfQVRPTUlDLCBBVE9NSUNfUkVMQVhf Tk9ORSk7CiAKIAkvKiBDcmVhdGUgYSBmcmFtZWJ1ZmZlciB0b28gc21hbGwgZm9yIHRoZSBwbGFu ZSBjb25maWd1cmF0aW9uLiAqLwotCWlndF9yZXF1aXJlKGZvcm1hdCAhPSAwKTsKKwlpZ3RfY3Jl YXRlX3BhdHRlcm5fZmIocGlwZS0+ZGlzcGxheS0+ZHJtX2ZkLAorCQkJICAgICAgZmItPndpZHRo IC0gMSwgZmItPmhlaWdodCAtIDEsCisJCQkgICAgICBmYi0+ZHJtX2Zvcm1hdCwgSTkxNV9USUxJ TkdfTk9ORSwgJmZiMik7CiAKLQlwbGFuZS5zcmNfeCA9IDA7Ci0JcGxhbmUuc3JjX3kgPSAwOwot CXBsYW5lLnNyY193ID0gbW9kZS0+aGRpc3BsYXkgPDwgMTY7Ci0JcGxhbmUuc3JjX2ggPSBtb2Rl LT52ZGlzcGxheSA8PCAxNjsKLQlwbGFuZS5jcnRjX3ggPSAwOwotCXBsYW5lLmNydGNfeSA9IDA7 Ci0JcGxhbmUuY3J0Y193ID0gbW9kZS0+aGRpc3BsYXk7Ci0JcGxhbmUuY3J0Y19oID0gbW9kZS0+ dmRpc3BsYXk7Ci0JcGxhbmUuY3J0Y19pZCA9IGNydGMtPm9iajsKLQlwbGFuZS5mYl9pZCA9IGln dF9jcmVhdGVfcGF0dGVybl9mYihwbGFuZS5zdGF0ZS0+ZGVzYy0+ZmQsCi0JCQkJCSAgICBwbGFu ZS5jcnRjX3cgLSAxLCBwbGFuZS5jcnRjX2ggLSAxLAotCQkJCQkgICAgZm9ybWF0LCBJOTE1X1RJ TElOR19OT05FLCAmZmIpOwotCi0JcGxhbmVfY29tbWl0X2F0b21pY19lcnIoJnBsYW5lLCBwbGFu ZV9vbGQsIHJlcSwKLQkgICAgICAgICAgICAgICAgICAgICAgICBBVE9NSUNfUkVMQVhfTk9ORSwg RU5PU1BDKTsKKwlpZ3RfcGxhbmVfc2V0X3Byb3BfdmFsdWUocGxhbmUsIElHVF9QTEFORV9GQl9J RCwgZmIyLmZiX2lkKTsKKwlwbGFuZV9jb21taXRfYXRvbWljX2VycihwbGFuZSwgQVRPTUlDX1JF TEFYX05PTkUsIEVOT1NQQyk7CiAKIAkvKiBSZXN0b3JlIHRoZSBwcmltYXJ5IHBsYW5lIGFuZCBj aGVjayB0aGUgc3RhdGUgbWF0Y2hlcyB0aGUgb2xkLiAqLwotCXBsYW5lX2NvbW1pdF9hdG9taWMo cGxhbmVfb2xkLCByZXEsIEFUT01JQ19SRUxBWF9OT05FKTsKLQotCWRybU1vZGVBdG9taWNGcmVl KHJlcSk7CisJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgZmIpOworCXBsYW5lX2NvbW1pdChwbGFu ZSwgQ09NTUlUX0FUT01JQywgQVRPTUlDX1JFTEFYX05PTkUpOwogfQogCi1zdGF0aWMgdm9pZCBw bGFuZV9pbnZhbGlkX3BhcmFtc19mZW5jZShzdHJ1Y3Qga21zX2F0b21pY19jcnRjX3N0YXRlICpj cnRjLAotCQkJCXN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0YXRlICpwbGFuZV9vbGQsCi0JCQkJ c3RydWN0IGttc19hdG9taWNfY29ubmVjdG9yX3N0YXRlICpjb25uKQorc3RhdGljIHZvaWQgcGxh bmVfaW52YWxpZF9wYXJhbXNfZmVuY2UoaWd0X3BpcGVfdCAqcGlwZSwKKwkJCQkgICAgICAgaWd0 X291dHB1dF90ICpvdXRwdXQsCisJCQkJICAgICAgIGlndF9wbGFuZV90ICpwbGFuZSkKIHsKLQlz dHJ1Y3Qga21zX2F0b21pY19wbGFuZV9zdGF0ZSBwbGFuZSA9ICpwbGFuZV9vbGQ7Ci0JZHJtTW9k ZUF0b21pY1JlcSAqcmVxID0gZHJtTW9kZUF0b21pY0FsbG9jKCk7CiAJaW50IHRpbWVsaW5lLCBm ZW5jZV9mZDsKIAogCWlndF9yZXF1aXJlX3N3X3N5bmMoKTsKIAorCXRpbWVsaW5lID0gc3dfc3lu Y190aW1lbGluZV9jcmVhdGUoKTsKKwogCS8qIGludmFsaWQgZmVuY2UgZmQgKi8KLQlwbGFuZS5m ZW5jZV9mZCA9IHBsYW5lLnN0YXRlLT5kZXNjLT5mZDsKLQlwbGFuZS5jcnRjX2lkID0gcGxhbmVf b2xkLT5jcnRjX2lkOwotCXBsYW5lX2NvbW1pdF9hdG9taWNfZXJyKCZwbGFuZSwgcGxhbmVfb2xk LCByZXEsCi0JICAgICAgICAgICAgICAgICAgICAgICAgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZB TCk7CisJaWd0X3BsYW5lX3NldF9mZW5jZV9mZChwbGFuZSwgcGlwZS0+ZGlzcGxheS0+ZHJtX2Zk KTsKKwlwbGFuZV9jb21taXRfYXRvbWljX2VycihwbGFuZSwgQVRPTUlDX1JFTEFYX05PTkUsIEVJ TlZBTCk7CiAKIAkvKiBWYWxpZCBmZW5jZV9mZCBidXQgaW52YWxpZCBDUlRDICovCi0JdGltZWxp bmUgPSBzd19zeW5jX3RpbWVsaW5lX2NyZWF0ZSgpOwotCWZlbmNlX2ZkID0gIHN3X3N5bmNfdGlt ZWxpbmVfY3JlYXRlX2ZlbmNlKHRpbWVsaW5lLCAxKTsKLQlwbGFuZS5mZW5jZV9mZCA9IGZlbmNl X2ZkOwotCXBsYW5lLmNydGNfaWQgPSB+MFU7Ci0JcGxhbmVfY29tbWl0X2F0b21pY19lcnIoJnBs YW5lLCBwbGFuZV9vbGQsIHJlcSwKLQkgICAgICAgICAgICAgICAgICAgICAgICBBVE9NSUNfUkVM QVhfTk9ORSwgRUlOVkFMKTsKKwlmZW5jZV9mZCA9IHN3X3N5bmNfdGltZWxpbmVfY3JlYXRlX2Zl bmNlKHRpbWVsaW5lLCAxKTsKKworCWlndF9wbGFuZV9zZXRfcHJvcF92YWx1ZShwbGFuZSwgSUdU X1BMQU5FX0NSVENfSUQsIH4wKTsKKwlpZ3RfcGxhbmVfc2V0X2ZlbmNlX2ZkKHBsYW5lLCBmZW5j ZV9mZCk7CisJcGxhbmVfY29tbWl0X2F0b21pY19lcnIocGxhbmUsIEFUT01JQ19SRUxBWF9OT05F LCBFSU5WQUwpOworCisJc3dfc3luY190aW1lbGluZV9pbmModGltZWxpbmUsIDEpOworCWlndF9w bGFuZV9zZXRfcHJvcF92YWx1ZShwbGFuZSwgSUdUX1BMQU5FX0NSVENfSUQsIHBpcGUtPmNydGNf aWQpOworCXBsYW5lX2NvbW1pdChwbGFuZSwgQ09NTUlUX0FUT01JQywgQVRPTUlDX1JFTEFYX05P TkUpOwogCi0JcGxhbmUuZmVuY2VfZmQgPSAtMTsKIAljbG9zZShmZW5jZV9mZCk7CiAJY2xvc2Uo dGltZWxpbmUpOwotCi0JZHJtTW9kZUF0b21pY0ZyZWUocmVxKTsKIH0KIAotc3RhdGljIHZvaWQg Y3J0Y19pbnZhbGlkX3BhcmFtcyhzdHJ1Y3Qga21zX2F0b21pY19jcnRjX3N0YXRlICpjcnRjX29s ZCwKLQkJCQlzdHJ1Y3Qga21zX2F0b21pY19wbGFuZV9zdGF0ZSAqcGxhbmUsCi0JCQkJc3RydWN0 IGttc19hdG9taWNfY29ubmVjdG9yX3N0YXRlICpjb25uKQorc3RhdGljIHZvaWQgY3J0Y19pbnZh bGlkX3BhcmFtcyhpZ3RfcGlwZV90ICpwaXBlLAorCQkJCWlndF9vdXRwdXRfdCAqb3V0cHV0LAor CQkJCWlndF9wbGFuZV90ICpwbGFuZSwKKwkJCQlzdHJ1Y3QgaWd0X2ZiICpmYikKIHsKLQlzdHJ1 Y3Qga21zX2F0b21pY19jcnRjX3N0YXRlIGNydGMgPSAqY3J0Y19vbGQ7Ci0JZHJtTW9kZUF0b21p Y1JlcSAqcmVxID0gZHJtTW9kZUF0b21pY0FsbG9jKCk7Ci0KLQlpZ3RfYXNzZXJ0KHJlcSk7CisJ dWludDY0X3Qgb2xkX21vZGVfaWQgPSBwaXBlLT52YWx1ZXNbSUdUX0NSVENfTU9ERV9JRF07CisJ ZHJtTW9kZU1vZGVJbmZvICptb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOwogCiAJ LyogUGFzcyBhIHNlcmllcyBvZiBpbnZhbGlkIG9iamVjdCBJRHMgZm9yIHRoZSBtb2RlIElELiAq LwotCWNydGMubW9kZS5pZCA9IHBsYW5lLT5vYmo7Ci0JY3J0Y19jb21taXRfYXRvbWljX2Vycigm Y3J0YywgcGxhbmUsIGNydGNfb2xkLCBwbGFuZSwgcmVxLCAwLAotCSAgICAgICAgICAgICAgICAg ICAgICAgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7CisJaWd0X3BpcGVfb2JqX3NldF9wcm9w X3ZhbHVlKHBpcGUsIElHVF9DUlRDX01PREVfSUQsIHBsYW5lLT5kcm1fcGxhbmUtPnBsYW5lX2lk KTsKKwljcnRjX2NvbW1pdF9hdG9taWNfZXJyKHBpcGUsIHBsYW5lLCBBVE9NSUNfUkVMQVhfTk9O RSwgRUlOVkFMKTsKIAotCWNydGMubW9kZS5pZCA9IGNydGMub2JqOwotCWNydGNfY29tbWl0X2F0 b21pY19lcnIoJmNydGMsIHBsYW5lLCBjcnRjX29sZCwgcGxhbmUsIHJlcSwgMCwKLQkgICAgICAg ICAgICAgICAgICAgICAgIEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwpOworCWlndF9waXBlX29i al9zZXRfcHJvcF92YWx1ZShwaXBlLCBJR1RfQ1JUQ19NT0RFX0lELCBwaXBlLT5jcnRjX2lkKTsK KwljcnRjX2NvbW1pdF9hdG9taWNfZXJyKHBpcGUsIHBsYW5lLCBBVE9NSUNfUkVMQVhfTk9ORSwg RUlOVkFMKTsKIAotCWNydGMubW9kZS5pZCA9IGNvbm4tPm9iajsKLQljcnRjX2NvbW1pdF9hdG9t aWNfZXJyKCZjcnRjLCBwbGFuZSwgY3J0Y19vbGQsIHBsYW5lLCByZXEsIDAsCi0JICAgICAgICAg ICAgICAgICAgICAgICBBVE9NSUNfUkVMQVhfTk9ORSwgRUlOVkFMKTsKKwlpZ3RfcGlwZV9vYmpf c2V0X3Byb3BfdmFsdWUocGlwZSwgSUdUX0NSVENfTU9ERV9JRCwgb3V0cHV0LT5pZCk7CisJY3J0 Y19jb21taXRfYXRvbWljX2VycihwaXBlLCBwbGFuZSwgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZB TCk7CiAKLQljcnRjLm1vZGUuaWQgPSBwbGFuZS0+ZmJfaWQ7Ci0JY3J0Y19jb21taXRfYXRvbWlj X2VycigmY3J0YywgcGxhbmUsIGNydGNfb2xkLCBwbGFuZSwgcmVxLCAwLAotCSAgICAgICAgICAg ICAgICAgICAgICAgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7CisJaWd0X3BpcGVfb2JqX3Nl dF9wcm9wX3ZhbHVlKHBpcGUsIElHVF9DUlRDX01PREVfSUQsIGZiLT5mYl9pZCk7CisJY3J0Y19j b21taXRfYXRvbWljX2VycihwaXBlLCBwbGFuZSwgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7 CiAKLQkvKiBzdWNjZXNzZnVsIFRFU1RfT05MWSB3aXRoIGZlbmNlcyBzZXQgKi8KLQljcnRjLm1v ZGUuaWQgPSBjcnRjX29sZC0+bW9kZS5pZDsKLQljcnRjX2NvbW1pdF9hdG9taWMoJmNydGMsIHBs YW5lLCByZXEsIEFUT01JQ19SRUxBWF9OT05FLAotCQkJICAgRFJNX01PREVfQVRPTUlDX1RFU1Rf T05MWSk7CisJLyogQ2FuIHdlIHJlc3RvcmUgbW9kZT8gKi8KKwlpZ3RfcGlwZV9vYmpfc2V0X3By b3BfdmFsdWUocGlwZSwgSUdUX0NSVENfTU9ERV9JRCwgb2xkX21vZGVfaWQpOworCWNydGNfY29t bWl0X2F0b21pY19mbGFnc19lcnIocGlwZSwgcGxhbmUsIERSTV9NT0RFX0FUT01JQ19URVNUX09O TFksIEFUT01JQ19SRUxBWF9OT05FLCAwKTsKIAogCS8qCiAJICogVEVTVF9PTkxZIGNhbm5vdCBi ZSBjb21iaW5lZCB3aXRoIERSTV9NT0RFX1BBR0VfRkxJUF9FVkVOVCwKIAkgKiBidXQgRFJNX01P REVfUEFHRV9GTElQX0VWRU5UIHdpbGwgYWx3YXlzIGdlbmVyYXRlIEVJTlZBTAogCSAqIHdpdGhv dXQgdmFsaWQgY3J0Yywgc28gdGVzdCBpdCBoZXJlLgogCSAqLwotCWNydGNfY29tbWl0X2F0b21p Y19lcnIoJmNydGMsIHBsYW5lLCBjcnRjX29sZCwgcGxhbmUsIHJlcSwKLQkJCSAgICAgICBEUk1f TU9ERV9BVE9NSUNfVEVTVF9PTkxZIHwgRFJNX01PREVfUEFHRV9GTElQX0VWRU5ULAotCQkJICAg ICAgIEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwpOworCWNydGNfY29tbWl0X2F0b21pY19mbGFn c19lcnIocGlwZSwgcGxhbmUsCisJCQkJICAgICBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZIHwg RFJNX01PREVfUEFHRV9GTElQX0VWRU5ULAorCQkJCSAgICAgQVRPTUlDX1JFTEFYX05PTkUsIEVJ TlZBTCk7CiAKIAkvKiBDcmVhdGUgYSBibG9iIHdoaWNoIGlzIHRoZSB3cm9uZyBzaXplIHRvIGJl IGEgdmFsaWQgbW9kZS4gKi8KLQlkb19vcl9kaWUoZHJtTW9kZUNyZWF0ZVByb3BlcnR5QmxvYihj cnRjLnN0YXRlLT5kZXNjLT5mZCwKLQkJCQkJICAgIGNydGMubW9kZS5kYXRhLAotCQkJCQkgICAg c2l6ZW9mKHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbykgLSAxLAotCQkJCQkgICAgJmNydGMubW9k ZS5pZCkpOwotCWNydGNfY29tbWl0X2F0b21pY19lcnIoJmNydGMsIHBsYW5lLCBjcnRjX29sZCwg cGxhbmUsIHJlcSwgMCwKLQkgICAgICAgICAgICAgICAgICAgICAgIEFUT01JQ19SRUxBWF9OT05F LCBFSU5WQUwpOwotCisJaWd0X3BpcGVfb2JqX3JlcGxhY2VfcHJvcF9ibG9iKHBpcGUsIElHVF9D UlRDX01PREVfSUQsIG1vZGUsIHNpemVvZigqbW9kZSkgLSAxKTsKKwljcnRjX2NvbW1pdF9hdG9t aWNfZXJyKHBpcGUsIHBsYW5lLCBBVE9NSUNfUkVMQVhfTk9ORSwgRUlOVkFMKTsKIAotCWRvX29y X2RpZShkcm1Nb2RlQ3JlYXRlUHJvcGVydHlCbG9iKGNydGMuc3RhdGUtPmRlc2MtPmZkLAotCQkJ CQkgICAgY3J0Yy5tb2RlLmRhdGEsCi0JCQkJCSAgICBzaXplb2Yoc3RydWN0IGRybV9tb2RlX21v ZGVpbmZvKSArIDEsCi0JCQkJCSAgICAmY3J0Yy5tb2RlLmlkKSk7Ci0JY3J0Y19jb21taXRfYXRv bWljX2VycigmY3J0YywgcGxhbmUsIGNydGNfb2xkLCBwbGFuZSwgcmVxLCAwLAotCSAgICAgICAg ICAgICAgICAgICAgICAgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7CisJaWd0X3BpcGVfb2Jq X3JlcGxhY2VfcHJvcF9ibG9iKHBpcGUsIElHVF9DUlRDX01PREVfSUQsIG1vZGUsIHNpemVvZigq bW9kZSkgKyAxKTsKKwljcnRjX2NvbW1pdF9hdG9taWNfZXJyKHBpcGUsIHBsYW5lLCBBVE9NSUNf UkVMQVhfTk9ORSwgRUlOVkFMKTsKIAogCiAJLyogUmVzdG9yZSB0aGUgQ1JUQyBhbmQgY2hlY2sg dGhlIHN0YXRlIG1hdGNoZXMgdGhlIG9sZC4gKi8KLQljcnRjX2NvbW1pdF9hdG9taWMoY3J0Y19v bGQsIHBsYW5lLCByZXEsIEFUT01JQ19SRUxBWF9OT05FLCAwKTsKLQotCWRybU1vZGVBdG9taWNG cmVlKHJlcSk7CisJaWd0X3BpcGVfb2JqX3JlcGxhY2VfcHJvcF9ibG9iKHBpcGUsIElHVF9DUlRD X01PREVfSUQsIG1vZGUsIHNpemVvZigqbW9kZSkpOworCWNydGNfY29tbWl0KHBpcGUsIHBsYW5l LCBDT01NSVRfQVRPTUlDLCBBVE9NSUNfUkVMQVhfTk9ORSk7CiB9CiAKLXN0YXRpYyB2b2lkIGNy dGNfaW52YWxpZF9wYXJhbXNfZmVuY2Uoc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0 Y19vbGQsCi0JCQkJc3RydWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUgKnBsYW5lLAotCQkJCXN0 cnVjdCBrbXNfYXRvbWljX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubikKK3N0YXRpYyB2b2lkIGNydGNf aW52YWxpZF9wYXJhbXNfZmVuY2UoaWd0X3BpcGVfdCAqcGlwZSwKKwkJCQkgICAgICBpZ3Rfb3V0 cHV0X3QgKm91dHB1dCwKKwkJCQkgICAgICBpZ3RfcGxhbmVfdCAqcGxhbmUsCisJCQkJICAgICAg c3RydWN0IGlndF9mYiAqZmIpCiB7Ci0Jc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSBjcnRj ID0gKmNydGNfb2xkOwotCWRybU1vZGVBdG9taWNSZXEgKnJlcSA9IGRybU1vZGVBdG9taWNBbGxv YygpOwotCWludCB0aW1lbGluZSwgZmVuY2VfZmQsICpvdXRfZmVuY2U7CisJaW50IHRpbWVsaW5l LCBmZW5jZV9mZDsKKwl2b2lkICptYXA7CisJY29uc3QgcHRyZGlmZl90IFBBR0VfU0laRSA9IHN5 c2NvbmYoX1NDX1BBR0VfU0laRSk7CisJdWludDY0X3Qgb2xkX21vZGVfaWQgPSBwaXBlLT52YWx1 ZXNbSUdUX0NSVENfTU9ERV9JRF07CiAKIAlpZ3RfcmVxdWlyZV9zd19zeW5jKCk7CiAKKwl0aW1l bGluZSA9IHN3X3N5bmNfdGltZWxpbmVfY3JlYXRlKCk7CisKKwkvKiBpbnZhbGlkIG91dF9mZW5j ZV9wdHIgKi8KKwltYXAgPSBtbWFwKE5VTEwsIFBBR0VfU0laRSwgUFJPVF9SRUFELCBNQVBfQU5P TllNT1VTIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTsKKwlpZ3RfYXNzZXJ0KG1hcCAhPSBNQVBfRkFJ TEVEKTsKKworCWlndF9waXBlX29ial9zZXRfcHJvcF92YWx1ZShwaXBlLCBJR1RfQ1JUQ19PVVRf RkVOQ0VfUFRSLCAocHRyZGlmZl90KW1hcCk7CisJY3J0Y19jb21taXRfYXRvbWljX2VycihwaXBl LCBwbGFuZSwgQVRPTUlDX1JFTEFYX05PTkUsIEVGQVVMVCk7CisJbXVubWFwKG1hcCwgUEFHRV9T SVpFKTsKKwogCS8qIGludmFsaWQgb3V0X2ZlbmNlX3B0ciAqLwotCWNydGMubW9kZS5pZCA9IGNy dGNfb2xkLT5tb2RlLmlkOwotCWNydGMub3V0X2ZlbmNlX3B0ciA9IChpbnQzMl90ICopIGNydGNf aW52YWxpZF9wYXJhbXM7Ci0JY3J0Y19jb21taXRfYXRvbWljX2VycigmY3J0YywgcGxhbmUsIGNy dGNfb2xkLCBwbGFuZSwgcmVxLCAwLAotCSAgICAgICAgICAgICAgICAgICAgICAgQVRPTUlDX1JF TEFYX05PTkUsIEVGQVVMVCk7CisJbWFwID0gbW1hcChOVUxMLCBQQUdFX1NJWkUsIFBST1RfRVhF QywgTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklWQVRFLCAtMSwgMCk7CisJaWd0X2Fzc2VydChtYXAg IT0gTUFQX0ZBSUxFRCk7CisKKwlpZ3RfcGlwZV9vYmpfc2V0X3Byb3BfdmFsdWUocGlwZSwgSUdU X0NSVENfT1VUX0ZFTkNFX1BUUiwgKHB0cmRpZmZfdCltYXApOworCWNydGNfY29tbWl0X2F0b21p Y19lcnIocGlwZSwgcGxhbmUsIEFUT01JQ19SRUxBWF9OT05FLCBFRkFVTFQpOworCW11bm1hcCht YXAsIFBBR0VfU0laRSk7CiAKIAkvKiBpbnZhbGlkIG91dF9mZW5jZV9wdHIgKi8KLQljcnRjLm1v ZGUuaWQgPSBjcnRjX29sZC0+bW9kZS5pZDsKLQljcnRjLm91dF9mZW5jZV9wdHIgPSAoaW50MzJf dCAqKSAweDg7Ci0JY3J0Y19jb21taXRfYXRvbWljX2VycigmY3J0YywgcGxhbmUsIGNydGNfb2xk LCBwbGFuZSwgcmVxLCAwLAotCSAgICAgICAgICAgICAgICAgICAgICAgQVRPTUlDX1JFTEFYX05P TkUsIEVGQVVMVCk7Ci0JY3J0Yy5vdXRfZmVuY2VfcHRyID0gKGludDMyX3QgKikgMDsKKwltYXAg PSBtbWFwKE5VTEwsIFBBR0VfU0laRSwgUFJPVF9OT05FLCBNQVBfQU5PTllNT1VTIHwgTUFQX1BS SVZBVEUsIC0xLCAwKTsKKwlpZ3RfYXNzZXJ0KG1hcCAhPSBNQVBfRkFJTEVEKTsKKworCWlndF9w aXBlX29ial9zZXRfcHJvcF92YWx1ZShwaXBlLCBJR1RfQ1JUQ19PVVRfRkVOQ0VfUFRSLCAocHRy ZGlmZl90KW1hcCk7CisJY3J0Y19jb21taXRfYXRvbWljX2VycihwaXBlLCBwbGFuZSwgQVRPTUlD X1JFTEFYX05PTkUsIEVGQVVMVCk7CisJbXVubWFwKG1hcCwgUEFHRV9TSVpFKTsKIAogCS8qIHZh bGlkIGluIGZlbmNlIGJ1dCBub3QgYWxsb3dlZCBwcm9wIG9uIGNydGMgKi8KLQl0aW1lbGluZSA9 IHN3X3N5bmNfdGltZWxpbmVfY3JlYXRlKCk7Ci0JZmVuY2VfZmQgPSAgc3dfc3luY190aW1lbGlu ZV9jcmVhdGVfZmVuY2UodGltZWxpbmUsIDEpOwotCXBsYW5lLT5mZW5jZV9mZCA9IGZlbmNlX2Zk OwotCWNydGMuYWN0aXZlID0gZmFsc2U7Ci0JY3J0Y19jb21taXRfYXRvbWljX2VycigmY3J0Yywg cGxhbmUsIGNydGNfb2xkLCBwbGFuZSwgcmVxLCAwLAotCQkJICAgICAgIEFUT01JQ19SRUxBWF9O T05FLCBFSU5WQUwpOworCWZlbmNlX2ZkID0gc3dfc3luY190aW1lbGluZV9jcmVhdGVfZmVuY2Uo dGltZWxpbmUsIDEpOworCWlndF9wbGFuZV9zZXRfZmVuY2VfZmQocGxhbmUsIGZlbmNlX2ZkKTsK IAotCW91dF9mZW5jZSA9IG1hbGxvYyhzaXplb2YodWludDY0X3QpKTsKLQlpZ3RfYXNzZXJ0KG91 dF9mZW5jZSk7CisJaWd0X3BpcGVfb2JqX3NldF9wcm9wX3ZhbHVlKHBpcGUsIElHVF9DUlRDX0FD VElWRSwgMCk7CisJaWd0X3BpcGVfb2JqX2NsZWFyX3Byb3BfY2hhbmdlZChwaXBlLCBJR1RfQ1JU Q19PVVRfRkVOQ0VfUFRSKTsKIAorCWNydGNfY29tbWl0X2F0b21pY19mbGFnc19lcnIocGlwZSwg cGxhbmUsIDAsIEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwpOwogCiAJLyogdmFsaWQgb3V0IGZl bmNlIHB0ciBhbmQgZmxpcCBldmVudCBidXQgbm90IGFsbG93ZWQgcHJvcCBvbiBjcnRjICovCi0J Y3J0Yy5vdXRfZmVuY2VfcHRyID0gKGludDMyX3QgKikgb3V0X2ZlbmNlOwotCWNydGNfY29tbWl0 X2F0b21pY19lcnIoJmNydGMsIHBsYW5lLCBjcnRjX29sZCwgcGxhbmUsIHJlcSwgMCwKLQkJCSAg ICAgICBBVE9NSUNfUkVMQVhfTk9ORSwgRUlOVkFMKTsKKwlpZ3RfcGlwZV9yZXF1ZXN0X291dF9m ZW5jZShwaXBlKTsKKwljcnRjX2NvbW1pdF9hdG9taWNfZmxhZ3NfZXJyKHBpcGUsIHBsYW5lLCBE Uk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQsCisJCQkJICAgICBBVE9NSUNfUkVMQVhfTk9ORSwgRUlO VkFMKTsKIAotCS8qIHZhbGlkIG91dCBmZW5jZSBwdHIgYW5kIGZsaXAgZXZlbnQgYnV0IG5vdCBh bGxvd2VkIHByb3Agb24gY3J0YyAqLwotCWNydGNfY29tbWl0X2F0b21pY19lcnIoJmNydGMsIHBs YW5lLCBjcnRjX29sZCwgcGxhbmUsIHJlcSwKLQkJCSAgICAgICBEUk1fTU9ERV9QQUdFX0ZMSVBf RVZFTlQsCi0JCQkgICAgICAgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7Ci0KLQkvKiB2YWxp ZCBwYWdlIGZsaXAgZXZlbnQgYnV0IG5vdCBhbGxvd2VkIHByb3Agb24gY3J0YyAqLwotCWNydGMu b3V0X2ZlbmNlX3B0ciA9IChpbnQzMl90ICopIDA7Ci0JY3J0Y19jb21taXRfYXRvbWljX2Vycigm Y3J0YywgcGxhbmUsIGNydGNfb2xkLCBwbGFuZSwgcmVxLAotCQkJICAgICAgIERSTV9NT0RFX1BB R0VfRkxJUF9FVkVOVCwKLQkJCSAgICAgICBBVE9NSUNfUkVMQVhfTk9ORSwgRUlOVkFMKTsKLQlj cnRjLmFjdGl2ZSA9IHRydWU7Ci0KLQkvKiB2YWxpZCBvdXQgZmVuY2UgIHB0ciBhbmQgZmxpcCBl dmVudCBidXQgaW52YWxpZCBwcm9wIG9uIGNydGMgKi8KLQljcnRjLm91dF9mZW5jZV9wdHIgPSAo aW50MzJfdCAqKSBvdXRfZmVuY2U7Ci0JY3J0Yy5tb2RlLmlkID0gcGxhbmUtPmZiX2lkOwotCWNy dGNfY29tbWl0X2F0b21pY19lcnIoJmNydGMsIHBsYW5lLCBjcnRjX29sZCwgcGxhbmUsIHJlcSwg MCwKLQkJCSAgICAgICBBVE9NSUNfUkVMQVhfTk9ORSwgRUlOVkFMKTsKKwkvKiB2YWxpZCBmbGlw IGV2ZW50IGJ1dCBub3QgYWxsb3dlZCBwcm9wIG9uIGNydGMgKi8KKwlpZ3RfcGlwZV9vYmpfY2xl YXJfcHJvcF9jaGFuZ2VkKHBpcGUsIElHVF9DUlRDX09VVF9GRU5DRV9QVFIpOworCWNydGNfY29t bWl0X2F0b21pY19mbGFnc19lcnIocGlwZSwgcGxhbmUsIERSTV9NT0RFX1BBR0VfRkxJUF9FVkVO VCwKKwkJCQkgICAgIEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwpOworCisJaWd0X3BpcGVfb2Jq X3NldF9wcm9wX3ZhbHVlKHBpcGUsIElHVF9DUlRDX0FDVElWRSwgMSk7CisKKwkvKiBDb25maWd1 cmF0aW9uIHNob3VsZCBiZSB2YWxpZCBhZ2FpbiAqLworCWNydGNfY29tbWl0X2F0b21pY19mbGFn c19lcnIocGlwZSwgcGxhbmUsIERSTV9NT0RFX0FUT01JQ19URVNUX09OTFksCisJCQkJICAgICBB VE9NSUNfUkVMQVhfTk9ORSwgMCk7CisKKwkvKiBTZXQgaW52YWxpZCBwcm9wICovCisJaWd0X3Bp cGVfb2JqX3NldF9wcm9wX3ZhbHVlKHBpcGUsIElHVF9DUlRDX01PREVfSUQsIGZiLT5mYl9pZCk7 CisKKwkvKiB2YWxpZCBvdXQgZmVuY2UgYnV0IGludmFsaWQgcHJvcCBvbiBjcnRjICovCisJaWd0 X3BpcGVfcmVxdWVzdF9vdXRfZmVuY2UocGlwZSk7CisJY3J0Y19jb21taXRfYXRvbWljX2ZsYWdz X2VycihwaXBlLCBwbGFuZSwgMCwKKwkJCQkgICAgIEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwp OwogCiAJLyogdmFsaWQgb3V0IGZlbmNlIHB0ciBhbmQgZmxpcCBldmVudCBidXQgaW52YWxpZCBw cm9wIG9uIGNydGMgKi8KLQljcnRjX2NvbW1pdF9hdG9taWNfZXJyKCZjcnRjLCBwbGFuZSwgY3J0 Y19vbGQsIHBsYW5lLCByZXEsCi0JCQkgICAgICAgRFJNX01PREVfUEFHRV9GTElQX0VWRU5ULAot CQkJICAgICAgIEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwpOworCWNydGNfY29tbWl0X2F0b21p Y19mbGFnc19lcnIocGlwZSwgcGxhbmUsIERSTV9NT0RFX1BBR0VfRkxJUF9FVkVOVCwKKwkJCQkg ICAgIEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwpOwogCiAJLyogdmFsaWQgcGFnZSBmbGlwIGV2 ZW50IGJ1dCBpbnZhbGlkIHByb3Agb24gY3J0YyAqLwotCWNydGMub3V0X2ZlbmNlX3B0ciA9IChp bnQzMl90ICopIDA7Ci0JY3J0Y19jb21taXRfYXRvbWljX2VycigmY3J0YywgcGxhbmUsIGNydGNf b2xkLCBwbGFuZSwgcmVxLAotCQkJICAgICAgIERSTV9NT0RFX1BBR0VfRkxJUF9FVkVOVCwKLQkJ CSAgICAgICBBVE9NSUNfUkVMQVhfTk9ORSwgRUlOVkFMKTsKKwljcnRjX2NvbW1pdF9hdG9taWNf ZmxhZ3NfZXJyKHBpcGUsIHBsYW5lLCBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQsCisJCQkJICAg ICBBVE9NSUNfUkVMQVhfTk9ORSwgRUlOVkFMKTsKIAogCS8qIHN1Y2Nlc3NmdWwgVEVTVF9PTkxZ IHdpdGggZmVuY2VzIHNldCAqLwotCXBsYW5lLT5mZW5jZV9mZCA9IGZlbmNlX2ZkOwotCWNydGMu bW9kZS5pZCA9IGNydGNfb2xkLT5tb2RlLmlkOwotCWNydGNfY29tbWl0X2F0b21pYygmY3J0Yywg cGxhbmUsIHJlcSwgQVRPTUlDX1JFTEFYX05PTkUsCi0JCQkgICBEUk1fTU9ERV9BVE9NSUNfVEVT VF9PTkxZKTsKLQlpZ3RfYXNzZXJ0KCpvdXRfZmVuY2UgPT0gLTEpOworCWlndF9waXBlX29ial9z ZXRfcHJvcF92YWx1ZShwaXBlLCBJR1RfQ1JUQ19NT0RFX0lELCBvbGRfbW9kZV9pZCk7CisJY3J0 Y19jb21taXRfYXRvbWljX2ZsYWdzX2VycihwaXBlLCBwbGFuZSwgRFJNX01PREVfQVRPTUlDX1RF U1RfT05MWSwKKwkJCQkgICAgIEFUT01JQ19SRUxBWF9OT05FLCAwKTsKKwlpZ3RfYXNzZXJ0KHBp cGUtPm91dF9mZW5jZV9mZCA9PSAtMSk7CiAJY2xvc2UoZmVuY2VfZmQpOwogCWNsb3NlKHRpbWVs aW5lKTsKIAogCS8qIHJlc2V0IGZlbmNlcyAqLwotCXBsYW5lLT5mZW5jZV9mZCA9IC0xOwotCWNy dGMub3V0X2ZlbmNlX3B0ciA9IChpbnQzMl90ICopIDA7Ci0JY3J0Y19jb21taXRfYXRvbWljKCZj cnRjLCBwbGFuZSwgcmVxLCBBVE9NSUNfUkVMQVhfTk9ORSwgMCk7CisJaWd0X3BsYW5lX3NldF9m ZW5jZV9mZChwbGFuZSwgLTEpOworCWlndF9waXBlX29ial9zZXRfcHJvcF92YWx1ZShwaXBlLCBJ R1RfQ1JUQ19PVVRfRkVOQ0VfUFRSLCAwKTsKKwlpZ3RfcGlwZV9vYmpfY2xlYXJfcHJvcF9jaGFu Z2VkKHBpcGUsIElHVF9DUlRDX09VVF9GRU5DRV9QVFIpOworCWNydGNfY29tbWl0KHBpcGUsIHBs YW5lLCBDT01NSVRfQVRPTUlDLCBBVE9NSUNfUkVMQVhfTk9ORSk7CiAKIAkvKiBvdXQgZmVuY2Ug cHRyIGJ1dCBub3QgcGFnZSBmbGlwIGV2ZW50ICovCi0JY3J0Yy5vdXRfZmVuY2VfcHRyID0gKGlu dDMyX3QgKikgb3V0X2ZlbmNlOwotCWNydGNfY29tbWl0X2F0b21pYyhjcnRjX29sZCwgcGxhbmUs IHJlcSwgQVRPTUlDX1JFTEFYX05PTkUsIDApOworCWlndF9waXBlX3JlcXVlc3Rfb3V0X2ZlbmNl KHBpcGUpOworCWNydGNfY29tbWl0KHBpcGUsIHBsYW5lLCBDT01NSVRfQVRPTUlDLCBBVE9NSUNf UkVMQVhfTk9ORSk7CiAKLQljbG9zZSgqb3V0X2ZlbmNlKTsKLQlmcmVlKG91dF9mZW5jZSk7Ci0J ZHJtTW9kZUF0b21pY0ZyZWUocmVxKTsKKwlpZ3RfYXNzZXJ0KHBpcGUtPm91dF9mZW5jZV9mZCAh PSAtMSk7CiB9CiAKIC8qIEFidXNlIHRoZSBhdG9taWMgaW9jdGwgZGlyZWN0bHkgaW4gb3JkZXIg dG8gdGVzdCB2YXJpb3VzIGludmFsaWQgY29uZGl0aW9ucywKICAqIHdoaWNoIHRoZSBsaWJkcm0g d3JhcHBlciB3b24ndCBhbGxvdyB1cyB0byBjcmVhdGUuICovCi1zdGF0aWMgdm9pZCBhdG9taWNf aW52YWxpZF9wYXJhbXMoc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0YywKLQkJCQkg IHN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0YXRlICpwbGFuZSwKLQkJCQkgIHN0cnVjdCBrbXNf YXRvbWljX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubmVjdG9yKQorc3RhdGljIHZvaWQgYXRvbWljX2lu dmFsaWRfcGFyYW1zKGlndF9waXBlX3QgKnBpcGUsCisJCQkJICBpZ3RfcGxhbmVfdCAqcGxhbmUs CisJCQkJICBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKKwkJCQkgIHN0cnVjdCBpZ3RfZmIgKmZiKQog ewotCXN0cnVjdCBrbXNfYXRvbWljX2Rlc2MgKmRlc2MgPSBjcnRjLT5zdGF0ZS0+ZGVzYzsKKwlp Z3RfZGlzcGxheV90ICpkaXNwbGF5ID0gcGlwZS0+ZGlzcGxheTsKIAlzdHJ1Y3QgZHJtX21vZGVf YXRvbWljIGlvYzsKIAl1aW50MzJfdCBvYmpfcmF3WzE2XTsgLyogYXJyYXkgb2Ygb2JqZWN0cyAo c2l6ZWQgYnkgY291bnRfb2JqcykgKi8KIAl1aW50MzJfdCBudW1fcHJvcHNfcmF3WzE2XTsgLyog YXJyYXkgb2YgbnVtIHByb3BzIHBlciBvYmogKGRpdHRvKSAqLwpAQCAtMTM0Niw3ICs3MTgsNyBA QCBzdGF0aWMgdm9pZCBhdG9taWNfaW52YWxpZF9wYXJhbXMoc3RydWN0IGttc19hdG9taWNfY3J0 Y19zdGF0ZSAqY3J0YywKIAltZW1zZXQoJmlvYywgMCwgc2l6ZW9mKGlvYykpOwogCiAJLyogQW4g ZW1wdHkgcmVxdWVzdCBzaG91bGQgZG8gbm90aGluZy4gKi8KLQlkb19pb2N0bChkZXNjLT5mZCwg RFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jKTsKKwlkb19pb2N0bChkaXNwbGF5LT5kcm1fZmQs IERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShvYmpfcmF3KTsgaSsrKQogCQlvYmpfcmF3W2ldID0gMDsKQEAgLTEzNjMsMjQ4ICs3MzUs MjI4IEBAIHN0YXRpYyB2b2lkIGF0b21pY19pbnZhbGlkX3BhcmFtcyhzdHJ1Y3Qga21zX2F0b21p Y19jcnRjX3N0YXRlICpjcnRjLAogCWlvYy5wcm9wX3ZhbHVlc19wdHIgPSAodWludHB0cl90KSB2 YWx1ZXNfcmF3OwogCiAJLyogVmFsaWQgcG9pbnRlcnMsIGJ1dCBzdGlsbCBzaG91bGQgY29weSBu b3RoaW5nLiAqLwotCWRvX2lvY3RsKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZp b2MpOworCWRvX2lvY3RsKGRpc3BsYXktPmRybV9mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAm aW9jKTsKIAogCS8qIFZhbGlkIG5vb3AsIGJ1dCB3aXRoIGV2ZW50IHNldCBzaG91bGQgZmFpbC4g Ki8KIAlpb2MuZmxhZ3MgPSBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQ7Ci0JZG9faW9jdGxfZXJy KGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MsIEVJTlZBTCk7CisJZG9faW9j dGxfZXJyKGRpc3BsYXktPmRybV9mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLCBFSU5W QUwpOwogCiAJLyogTm9uc2Vuc2UgZmxhZ3MuICovCiAJaW9jLmZsYWdzID0gMHhkZWFkYmVlZjsK LQlkb19pb2N0bF9lcnIoZGVzYy0+ZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYywgRUlO VkFMKTsKKwlkb19pb2N0bF9lcnIoZGlzcGxheS0+ZHJtX2ZkLCBEUk1fSU9DVExfTU9ERV9BVE9N SUMsICZpb2MsIEVJTlZBTCk7CiAKIAlpb2MuZmxhZ3MgPSAwOwogCS8qIFNhZmV0eSBjaGVjayB0 aGF0IGZsYWdzIGlzIHJlc2V0IHByb3Blcmx5LiAqLwotCWRvX2lvY3RsKGRlc2MtPmZkLCBEUk1f SU9DVExfTU9ERV9BVE9NSUMsICZpb2MpOworCWRvX2lvY3RsKGRpc3BsYXktPmRybV9mZCwgRFJN X0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jKTsKIAogCS8qIFJlc2VydmVkL01CWi4gKi8KIAlpb2Mu cmVzZXJ2ZWQgPSAxOwotCWRvX2lvY3RsX2VycihkZXNjLT5mZCwgRFJNX0lPQ1RMX01PREVfQVRP TUlDLCAmaW9jLCBFSU5WQUwpOworCWRvX2lvY3RsX2VycihkaXNwbGF5LT5kcm1fZmQsIERSTV9J T0NUTF9NT0RFX0FUT01JQywgJmlvYywgRUlOVkFMKTsKIAlpb2MucmVzZXJ2ZWQgPSAwOwotCWRv X2lvY3RsKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MpOworCWRvX2lvY3Rs KGRpc3BsYXktPmRybV9mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jKTsKIAogCS8qIFpl cm8gaXMgbm90IGEgdmFsaWQgb2JqZWN0IElELiAqLwogCWlvYy5jb3VudF9vYmpzID0gQVJSQVlf U0laRShvYmpfcmF3KTsKLQlkb19pb2N0bF9lcnIoZGVzYy0+ZmQsIERSTV9JT0NUTF9NT0RFX0FU T01JQywgJmlvYywgRU5PRU5UKTsKKwlkb19pb2N0bF9lcnIoZGlzcGxheS0+ZHJtX2ZkLCBEUk1f SU9DVExfTU9ERV9BVE9NSUMsICZpb2MsIEVOT0VOVCk7CiAKIAkvKiBJbnZhbGlkIG9iamVjdCB0 eXBlIChub3QgYSB0aGluZyB3ZSBjYW4gc2V0IHByb3BlcnRpZXMgb24pLiAqLwogCWlvYy5jb3Vu dF9vYmpzID0gMTsKLQlvYmpfcmF3WzBdID0gY3J0Yy0+bW9kZS5pZDsKLQlkb19pb2N0bF9lcnIo ZGVzYy0+ZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYywgRU5PRU5UKTsKLQlvYmpfcmF3 WzBdID0gcGxhbmUtPmZiX2lkOwotCWRvX2lvY3RsX2VycihkZXNjLT5mZCwgRFJNX0lPQ1RMX01P REVfQVRPTUlDLCAmaW9jLCBFTk9FTlQpOworCW9ial9yYXdbMF0gPSBwaXBlLT52YWx1ZXNbSUdU X0NSVENfTU9ERV9JRF07CisJZG9faW9jdGxfZXJyKGRpc3BsYXktPmRybV9mZCwgRFJNX0lPQ1RM X01PREVfQVRPTUlDLCAmaW9jLCBFTk9FTlQpOworCW9ial9yYXdbMF0gPSBmYi0+ZmJfaWQ7CisJ ZG9faW9jdGxfZXJyKGRpc3BsYXktPmRybV9mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9j LCBFTk9FTlQpOwogCiAJLyogRmlsbGVkIG9iamVjdCBidXQgd2l0aCBubyBwcm9wZXJ0aWVzOyBu by1vcC4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvYmpfcmF3KTsgaSsrKQotCQlv YmpfcmF3W2ldID0gY3J0Yy0+b2JqOwotCWRvX2lvY3RsKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9E RV9BVE9NSUMsICZpb2MpOworCQlvYmpfcmF3W2ldID0gcGlwZS0+Y3J0Y19pZDsKKwlkb19pb2N0 bChkaXNwbGF5LT5kcm1fZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYyk7CiAKIAkvKiBQ YXNzIGluIGFsbCBzb3J0cyBvZiB0aGluZ3Mgb3RoZXIgdGhhbiB0aGUgcHJvcGVydHkgSUQuICov CiAJbnVtX3Byb3BzX3Jhd1swXSA9IDE7Ci0JZG9faW9jdGxfZXJyKGRlc2MtPmZkLCBEUk1fSU9D VExfTU9ERV9BVE9NSUMsICZpb2MsIEVOT0VOVCk7Ci0JcHJvcHNfcmF3WzBdID0gY3J0Yy0+b2Jq OwotCWRvX2lvY3RsX2VycihkZXNjLT5mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLCBF Tk9FTlQpOwotCXByb3BzX3Jhd1swXSA9IHBsYW5lLT5vYmo7Ci0JZG9faW9jdGxfZXJyKGRlc2Mt PmZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MsIEVOT0VOVCk7Ci0JcHJvcHNfcmF3WzBd ID0gY29ubmVjdG9yLT5vYmo7Ci0JZG9faW9jdGxfZXJyKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9E RV9BVE9NSUMsICZpb2MsIEVOT0VOVCk7Ci0JcHJvcHNfcmF3WzBdID0gY3J0Yy0+bW9kZS5pZDsK LQlkb19pb2N0bF9lcnIoZGVzYy0+ZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYywgRU5P RU5UKTsKKwlkb19pb2N0bF9lcnIoZGlzcGxheS0+ZHJtX2ZkLCBEUk1fSU9DVExfTU9ERV9BVE9N SUMsICZpb2MsIEVOT0VOVCk7CisJcHJvcHNfcmF3WzBdID0gcGlwZS0+Y3J0Y19pZDsKKwlkb19p b2N0bF9lcnIoZGlzcGxheS0+ZHJtX2ZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MsIEVO T0VOVCk7CisJcHJvcHNfcmF3WzBdID0gcGxhbmUtPmRybV9wbGFuZS0+cGxhbmVfaWQ7CisJZG9f aW9jdGxfZXJyKGRpc3BsYXktPmRybV9mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLCBF Tk9FTlQpOworCXByb3BzX3Jhd1swXSA9IG91dHB1dC0+aWQ7CisJZG9faW9jdGxfZXJyKGRpc3Bs YXktPmRybV9mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLCBFTk9FTlQpOworCXByb3Bz X3Jhd1swXSA9IHBpcGUtPnZhbHVlc1tJR1RfQ1JUQ19NT0RFX0lEXTsKKwlkb19pb2N0bF9lcnIo ZGlzcGxheS0+ZHJtX2ZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MsIEVOT0VOVCk7CiAK IAkvKiBWYWxpZCBwcm9wZXJ0eSwgdmFsaWQgdmFsdWUuICovCiAJZm9yIChpID0gMDsgaSA8IEFS UkFZX1NJWkUocHJvcHNfcmF3KTsgaSsrKSB7Ci0JCXByb3BzX3Jhd1tpXSA9IGRlc2MtPnByb3Bz X2NydGNbSUdUX0NSVENfTU9ERV9JRF07Ci0JCXZhbHVlc19yYXdbaV0gPSBjcnRjLT5tb2RlLmlk OworCQlwcm9wc19yYXdbaV0gPSBwaXBlLT5wcm9wc1tJR1RfQ1JUQ19NT0RFX0lEXTsKKwkJdmFs dWVzX3Jhd1tpXSA9IHBpcGUtPnZhbHVlc1tJR1RfQ1JUQ19NT0RFX0lEXTsKIAl9Ci0JZG9faW9j dGwoZGVzYy0+ZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYyk7CisJZG9faW9jdGwoZGlz cGxheS0+ZHJtX2ZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MpOwogCiAJLyogU2V0dGlu ZyB0aGUgc2FtZSB0aGluZyBtdWx0aXBsZSB0aW1lcyBpcyBPSy4gKi8KIAlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShvYmpfcmF3KTsgaSsrKQogCQludW1fcHJvcHNfcmF3W2ldID0gQVJSQVlf U0laRShwcm9wc19yYXcpIC8gQVJSQVlfU0laRShvYmpfcmF3KTsKLQlkb19pb2N0bChkZXNjLT5m ZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jKTsKKwlkb19pb2N0bChkaXNwbGF5LT5kcm1f ZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYyk7CiAJaW9jLmNvdW50X29ianMgPSBBUlJB WV9TSVpFKG9ial9yYXcpOwotCWRvX2lvY3RsKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9BVE9N SUMsICZpb2MpOworCWRvX2lvY3RsKGRpc3BsYXktPmRybV9mZCwgRFJNX0lPQ1RMX01PREVfQVRP TUlDLCAmaW9jKTsKIAogCS8qIFBhc3MgYSBzZXJpZXMgb2Ygb3V0bGFuZGlzaCBhZGRyZXNzZXMu ICovCiAJaW9jLm9ianNfcHRyID0gMDsKLQlkb19pb2N0bF9lcnIoZGVzYy0+ZmQsIERSTV9JT0NU TF9NT0RFX0FUT01JQywgJmlvYywgRUZBVUxUKTsKKwlkb19pb2N0bF9lcnIoZGlzcGxheS0+ZHJt X2ZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MsIEVGQVVMVCk7CiAKIAlpb2Mub2Jqc19w dHIgPSAodWludHB0cl90KSBvYmpfcmF3OwogCWlvYy5jb3VudF9wcm9wc19wdHIgPSAwOwotCWRv X2lvY3RsX2VycihkZXNjLT5mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLCBFRkFVTFQp OworCWRvX2lvY3RsX2VycihkaXNwbGF5LT5kcm1fZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywg JmlvYywgRUZBVUxUKTsKIAogCWlvYy5jb3VudF9wcm9wc19wdHIgPSAodWludHB0cl90KSBudW1f cHJvcHNfcmF3OwogCWlvYy5wcm9wc19wdHIgPSAwOwotCWRvX2lvY3RsX2VycihkZXNjLT5mZCwg RFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLCBFRkFVTFQpOworCWRvX2lvY3RsX2VycihkaXNw bGF5LT5kcm1fZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYywgRUZBVUxUKTsKIAogCWlv Yy5wcm9wc19wdHIgPSAodWludHB0cl90KSBwcm9wc19yYXc7CiAJaW9jLnByb3BfdmFsdWVzX3B0 ciA9IDA7Ci0JZG9faW9jdGxfZXJyKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZp b2MsIEVGQVVMVCk7CisJZG9faW9jdGxfZXJyKGRpc3BsYXktPmRybV9mZCwgRFJNX0lPQ1RMX01P REVfQVRPTUlDLCAmaW9jLCBFRkFVTFQpOwogCiAJaW9jLnByb3BfdmFsdWVzX3B0ciA9ICh1aW50 cHRyX3QpIHZhbHVlc19yYXc7Ci0JZG9faW9jdGwoZGVzYy0+ZmQsIERSTV9JT0NUTF9NT0RFX0FU T01JQywgJmlvYyk7CisJZG9faW9jdGwoZGlzcGxheS0+ZHJtX2ZkLCBEUk1fSU9DVExfTU9ERV9B VE9NSUMsICZpb2MpOwogCiAJLyogQXR0ZW1wdCB0byBvdmVyZmxvdyBhbmQvb3IgdHJpcCB2YXJp b3VzIGJvdW5kYXJ5IGNvbmRpdGlvbnMuICovCiAJaW9jLmNvdW50X29ianMgPSBVSU5UMzJfTUFY IC8gc2l6ZW9mKHVpbnQzMl90KTsKLQlkb19pb2N0bF9lcnIoZGVzYy0+ZmQsIERSTV9JT0NUTF9N T0RFX0FUT01JQywgJmlvYywgRU5PRU5UKTsKKwlkb19pb2N0bF9lcnIoZGlzcGxheS0+ZHJtX2Zk LCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MsIEVOT0VOVCk7CiAKIAlpb2MuY291bnRfb2Jq cyA9IEFSUkFZX1NJWkUob2JqX3Jhdyk7CiAJaW9jLm9ianNfcHRyID0gVUlOVDY0X01BWCAtIHNp emVvZih1aW50MzJfdCk7Ci0JZG9faW9jdGxfZXJyKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9B VE9NSUMsICZpb2MsIEVGQVVMVCk7CisJZG9faW9jdGxfZXJyKGRpc3BsYXktPmRybV9mZCwgRFJN X0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLCBFRkFVTFQpOwogCWlvYy5jb3VudF9vYmpzID0gMTsK IAlpb2Mub2Jqc19wdHIgPSBVSU5UNjRfTUFYIC0gc2l6ZW9mKHVpbnQzMl90KTsKLQlkb19pb2N0 bF9lcnIoZGVzYy0+ZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYywgRUZBVUxUKTsKKwlk b19pb2N0bF9lcnIoZGlzcGxheS0+ZHJtX2ZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2Ms IEVGQVVMVCk7CiAKIAludW1fcHJvcHNfcmF3WzBdID0gVUlOVDMyX01BWCAvIHNpemVvZih1aW50 MzJfdCk7Ci0JZG9faW9jdGxfZXJyKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZp b2MsIEVGQVVMVCk7CisJZG9faW9jdGxfZXJyKGRpc3BsYXktPmRybV9mZCwgRFJNX0lPQ1RMX01P REVfQVRPTUlDLCAmaW9jLCBFRkFVTFQpOwogCW51bV9wcm9wc19yYXdbMF0gPSBVSU5UMzJfTUFY IC0gMTsKLQlkb19pb2N0bF9lcnIoZGVzYy0+ZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlv YywgRUZBVUxUKTsKKwlkb19pb2N0bF9lcnIoZGlzcGxheS0+ZHJtX2ZkLCBEUk1fSU9DVExfTU9E RV9BVE9NSUMsICZpb2MsIEVGQVVMVCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShv YmpfcmF3KTsgaSsrKQogCQludW1fcHJvcHNfcmF3W2ldID0gKFVJTlQzMl9NQVggLyBBUlJBWV9T SVpFKG9ial9yYXcpKSArIDE7Ci0JZG9faW9jdGxfZXJyKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9E RV9BVE9NSUMsICZpb2MsIEVGQVVMVCk7CisJZG9faW9jdGxfZXJyKGRpc3BsYXktPmRybV9mZCwg RFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLCBFRkFVTFQpOwogCWZvciAoaSA9IDA7IGkgPCBB UlJBWV9TSVpFKG9ial9yYXcpOyBpKyspCiAJCW51bV9wcm9wc19yYXdbaV0gPSBBUlJBWV9TSVpF KHByb3BzX3JhdykgLyBBUlJBWV9TSVpFKG9ial9yYXcpOwotCWRvX2lvY3RsX2VycihkZXNjLT5m ZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLCBFRkFVTFQpOworCWRvX2lvY3RsX2Vycihk aXNwbGF5LT5kcm1fZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYywgRUZBVUxUKTsKK30K Kworc3RhdGljIHZvaWQgYXRvbWljX3NldHVwKGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGVudW0g cGlwZSBwaXBlLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgaWd0X3BsYW5lX3QgKnByaW1hcnksIHN0 cnVjdCBpZ3RfZmIgKmZiKQoreworCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBwaXBlKTsK KwlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksIGZiKTsKKworCWNydGNfY29tbWl0KHByaW1hcnkt PnBpcGUsIHByaW1hcnksIENPTU1JVF9BVE9NSUMsIEFUT01JQ19SRUxBWF9OT05FKTsKK30KKwor c3RhdGljIHZvaWQgYXRvbWljX2NsZWFyKGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGVudW0gcGlw ZSBwaXBlLCBpZ3RfcGxhbmVfdCAqcHJpbWFyeSwgaWd0X291dHB1dF90ICpvdXRwdXQpCit7CisJ aWd0X3BsYW5lX3QgKnBsYW5lOworCisJZm9yX2VhY2hfcGxhbmVfb25fcGlwZShkaXNwbGF5LCBw aXBlLCBwbGFuZSkgeworCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsKKwkJaWd0X3Bs YW5lX3NldF9wb3NpdGlvbihwbGFuZSwgMCwgMCk7CisJfQorCisJaWd0X291dHB1dF9zZXRfcGlw ZShvdXRwdXQsIFBJUEVfTk9ORSk7CisJY3J0Y19jb21taXQocHJpbWFyeS0+cGlwZSwgcHJpbWFy eSwgQ09NTUlUX0FUT01JQywgQVRPTUlDX1JFTEFYX05PTkUpOwogfQogCiBpZ3RfbWFpbgogewot CXN0cnVjdCBrbXNfYXRvbWljX2Rlc2MgZGVzYzsKLQlzdHJ1Y3Qga21zX2F0b21pY19zdGF0ZSAq Y3VycmVudDsKKwlpZ3RfZGlzcGxheV90IGRpc3BsYXk7CisJZW51bSBwaXBlIHBpcGUgPSBQSVBF X05PTkU7CisJaWd0X3BpcGVfdCAqcGlwZV9vYmo7CisJaWd0X291dHB1dF90ICpvdXRwdXQgPSBO VUxMOworCWlndF9wbGFuZV90ICpwcmltYXJ5ID0gTlVMTDsKKwlkcm1Nb2RlTW9kZUluZm8gKm1v ZGU7CisJc3RydWN0IGlndF9mYiBmYjsKKworCWlndF9maXh0dXJlIHsKKwkJZGlzcGxheS5kcm1f ZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9BTlkpOworCisJCWttc3Rlc3Rfc2V0 X3Z0X2dyYXBoaWNzX21vZGUoKTsKKworCQlpZ3RfZGlzcGxheV9pbml0KCZkaXNwbGF5LCBkaXNw bGF5LmRybV9mZCk7CisKKwkJaWd0X3JlcXVpcmUoZGlzcGxheS5pc19hdG9taWMpOworCQlpZ3Rf ZGlzcGxheV9yZXF1aXJlX291dHB1dCgmZGlzcGxheSk7CiAKLQltZW1zZXQoJmRlc2MsIDAsIHNp emVvZihkZXNjKSk7CisJCWZvcl9lYWNoX3BpcGVfd2l0aF92YWxpZF9vdXRwdXQoJmRpc3BsYXks IHBpcGUsIG91dHB1dCkKKwkJCWJyZWFrOworCisJCXBpcGVfb2JqID0gJmRpc3BsYXkucGlwZXNb cGlwZV07CisJCXByaW1hcnkgPSBpZ3RfcGlwZV9nZXRfcGxhbmVfdHlwZShwaXBlX29iaiwgRFJN X1BMQU5FX1RZUEVfUFJJTUFSWSk7CiAKLQljdXJyZW50ID0gY2FsbG9jKDEsIHNpemVvZigqY3Vy cmVudCkpOwotCWlndF9hc3NlcnQoY3VycmVudCk7Ci0JY3VycmVudC0+ZGVzYyA9ICZkZXNjOwor CQltb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOwogCi0JaWd0X2ZpeHR1cmUKLQkJ YXRvbWljX3NldHVwKGN1cnJlbnQpOworCQlpZ3RfY3JlYXRlX3BhdHRlcm5fZmIoZGlzcGxheS5k cm1fZmQsCisJCQkJICAgICAgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LAorCQkJCSAg ICAgIHBsYW5lX2dldF9pZ3RfZm9ybWF0KHByaW1hcnkpLAorCQkJCSAgICAgIExPQ0FMX0RSTV9G T1JNQVRfTU9EX05PTkUsICZmYik7CisJfQogCiAJaWd0X3N1YnRlc3QoInBsYW5lX292ZXJsYXlf bGVnYWN5IikgewotCQlzdHJ1Y3Qga21zX2F0b21pY19zdGF0ZSAqc2NyYXRjaCA9IGF0b21pY19z dGF0ZV9kdXAoY3VycmVudCk7Ci0JCXN0cnVjdCBrbXNfYXRvbWljX2NydGNfc3RhdGUgKmNydGMg PSBmaW5kX2NydGMoc2NyYXRjaCwgdHJ1ZSk7Ci0JCXN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0 YXRlICpwbGFuZSA9Ci0JCQlmaW5kX3BsYW5lKHNjcmF0Y2gsIFBMQU5FX1RZUEVfT1ZFUkxBWSwg Y3J0Yyk7Ci0KLQkJaWd0X3JlcXVpcmUoY3J0Yyk7Ci0JCWlndF9yZXF1aXJlKHBsYW5lKTsKLQkJ cGxhbmVfb3ZlcmxheShjcnRjLCBwbGFuZSk7Ci0JCWF0b21pY19zdGF0ZV9mcmVlKHNjcmF0Y2gp OworCQlpZ3RfcGxhbmVfdCAqb3ZlcmxheSA9CisJCQlpZ3RfcGlwZV9nZXRfcGxhbmVfdHlwZShw aXBlX29iaiwgRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWSk7CisKKwkJaWd0X3JlcXVpcmUob3Zlcmxh eSk7CisKKwkJYXRvbWljX3NldHVwKCZkaXNwbGF5LCBwaXBlLCBvdXRwdXQsIHByaW1hcnksICZm Yik7CisJCXBsYW5lX292ZXJsYXkocGlwZV9vYmosIG91dHB1dCwgb3ZlcmxheSk7CiAJfQogCiAJ aWd0X3N1YnRlc3QoInBsYW5lX3ByaW1hcnlfbGVnYWN5IikgewotCQlzdHJ1Y3Qga21zX2F0b21p Y19zdGF0ZSAqc2NyYXRjaCA9IGF0b21pY19zdGF0ZV9kdXAoY3VycmVudCk7Ci0JCXN0cnVjdCBr bXNfYXRvbWljX2NydGNfc3RhdGUgKmNydGMgPSBmaW5kX2NydGMoc2NyYXRjaCwgdHJ1ZSk7Ci0J CXN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0YXRlICpwbGFuZSA9Ci0JCQlmaW5kX3BsYW5lKHNj cmF0Y2gsIFBMQU5FX1RZUEVfUFJJTUFSWSwgY3J0Yyk7Ci0KLQkJaWd0X3JlcXVpcmUoY3J0Yyk7 Ci0JCWlndF9yZXF1aXJlKHBsYW5lKTsKLQkJcGxhbmVfcHJpbWFyeShjcnRjLCBwbGFuZSk7Ci0J CWF0b21pY19zdGF0ZV9mcmVlKHNjcmF0Y2gpOworCQlhdG9taWNfc2V0dXAoJmRpc3BsYXksIHBp cGUsIG91dHB1dCwgcHJpbWFyeSwgJmZiKTsKKworCQlwbGFuZV9wcmltYXJ5KHBpcGVfb2JqLCBw cmltYXJ5LCAmZmIpOwogCX0KIAogCWlndF9zdWJ0ZXN0KCJ0ZXN0X29ubHkiKSB7Ci0JCXN0cnVj dCBrbXNfYXRvbWljX3N0YXRlICpzY3JhdGNoID0gYXRvbWljX3N0YXRlX2R1cChjdXJyZW50KTsK LQkJc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0YyA9IGZpbmRfY3J0YyhzY3JhdGNo LCB0cnVlKTsKLQkJc3RydWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUgKnBsYW5lID0KLQkJCWZp bmRfcGxhbmUoc2NyYXRjaCwgUExBTkVfVFlQRV9QUklNQVJZLCBjcnRjKTsKLQotCQlpZ3RfcmVx dWlyZShjcnRjKTsKLQkJaWd0X3JlcXVpcmUocGxhbmUpOwotCQl0ZXN0X29ubHkoY3J0YywgcGxh bmUpOwotCQlhdG9taWNfc3RhdGVfZnJlZShzY3JhdGNoKTsKLQl9CisJCWF0b21pY19jbGVhcigm ZGlzcGxheSwgcGlwZSwgcHJpbWFyeSwgb3V0cHV0KTsKIAorCQl0ZXN0X29ubHkocGlwZV9vYmos IHByaW1hcnksIG91dHB1dCk7CisJfQogCWlndF9zdWJ0ZXN0KCJwbGFuZV9jdXJzb3JfbGVnYWN5 IikgewotCQlzdHJ1Y3Qga21zX2F0b21pY19zdGF0ZSAqc2NyYXRjaCA9IGF0b21pY19zdGF0ZV9k dXAoY3VycmVudCk7Ci0JCXN0cnVjdCBrbXNfYXRvbWljX2NydGNfc3RhdGUgKmNydGMgPSBmaW5k X2NydGMoc2NyYXRjaCwgdHJ1ZSk7Ci0JCXN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0YXRlICpw bGFuZSA9Ci0JCQlmaW5kX3BsYW5lKHNjcmF0Y2gsIFBMQU5FX1RZUEVfQ1VSU09SLCBjcnRjKTsK LQotCQlpZ3RfcmVxdWlyZShjcnRjKTsKLQkJaWd0X3JlcXVpcmUocGxhbmUpOwotCQlwbGFuZV9j dXJzb3IoY3J0YywgcGxhbmUpOwotCQlhdG9taWNfc3RhdGVfZnJlZShzY3JhdGNoKTsKKwkJaWd0 X3BsYW5lX3QgKmN1cnNvciA9CisJCQlpZ3RfcGlwZV9nZXRfcGxhbmVfdHlwZShwaXBlX29iaiwg RFJNX1BMQU5FX1RZUEVfQ1VSU09SKTsKKworCQlpZ3RfcmVxdWlyZShjdXJzb3IpOworCisJCWF0 b21pY19zZXR1cCgmZGlzcGxheSwgcGlwZSwgb3V0cHV0LCBwcmltYXJ5LCAmZmIpOworCQlwbGFu ZV9jdXJzb3IocGlwZV9vYmosIG91dHB1dCwgY3Vyc29yKTsKIAl9CiAKIAlpZ3Rfc3VidGVzdCgi cGxhbmVfaW52YWxpZF9wYXJhbXMiKSB7Ci0JCXN0cnVjdCBrbXNfYXRvbWljX3N0YXRlICpzY3Jh dGNoID0gYXRvbWljX3N0YXRlX2R1cChjdXJyZW50KTsKLQkJc3RydWN0IGttc19hdG9taWNfY3J0 Y19zdGF0ZSAqY3J0YyA9IGZpbmRfY3J0YyhzY3JhdGNoLCB0cnVlKTsKLQkJc3RydWN0IGttc19h dG9taWNfcGxhbmVfc3RhdGUgKnBsYW5lID0KLQkJCWZpbmRfcGxhbmUoY3VycmVudCwgUExBTkVf VFlQRV9QUklNQVJZLCBjcnRjKTsKLQkJc3RydWN0IGttc19hdG9taWNfY29ubmVjdG9yX3N0YXRl ICpjb25uID0KLQkJCWZpbmRfY29ubmVjdG9yKHNjcmF0Y2gsIGNydGMpOwotCi0JCWlndF9yZXF1 aXJlKGNydGMpOwotCQlpZ3RfcmVxdWlyZShwbGFuZSk7Ci0JCXBsYW5lX2ludmFsaWRfcGFyYW1z KGNydGMsIHBsYW5lLCBjb25uKTsKLQkJYXRvbWljX3N0YXRlX2ZyZWUoc2NyYXRjaCk7CisJCWF0 b21pY19zZXR1cCgmZGlzcGxheSwgcGlwZSwgb3V0cHV0LCBwcmltYXJ5LCAmZmIpOworCisJCXBs YW5lX2ludmFsaWRfcGFyYW1zKHBpcGVfb2JqLCBvdXRwdXQsIHByaW1hcnksICZmYik7CiAJfQog CiAJaWd0X3N1YnRlc3QoInBsYW5lX2ludmFsaWRfcGFyYW1zX2ZlbmNlIikgewotCQlzdHJ1Y3Qg a21zX2F0b21pY19zdGF0ZSAqc2NyYXRjaCA9IGF0b21pY19zdGF0ZV9kdXAoY3VycmVudCk7Ci0J CXN0cnVjdCBrbXNfYXRvbWljX2NydGNfc3RhdGUgKmNydGMgPSBmaW5kX2NydGMoc2NyYXRjaCwg dHJ1ZSk7Ci0JCXN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0YXRlICpwbGFuZSA9Ci0JCQlmaW5k X3BsYW5lKGN1cnJlbnQsIFBMQU5FX1RZUEVfUFJJTUFSWSwgY3J0Yyk7Ci0JCXN0cnVjdCBrbXNf YXRvbWljX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubiA9Ci0JCQlmaW5kX2Nvbm5lY3RvcihzY3JhdGNo LCBjcnRjKTsKLQotCQlpZ3RfcmVxdWlyZShjcnRjKTsKLQkJaWd0X3JlcXVpcmUocGxhbmUpOwot CQlwbGFuZV9pbnZhbGlkX3BhcmFtc19mZW5jZShjcnRjLCBwbGFuZSwgY29ubik7Ci0JCWF0b21p Y19zdGF0ZV9mcmVlKHNjcmF0Y2gpOworCQlhdG9taWNfc2V0dXAoJmRpc3BsYXksIHBpcGUsIG91 dHB1dCwgcHJpbWFyeSwgJmZiKTsKKworCQlwbGFuZV9pbnZhbGlkX3BhcmFtc19mZW5jZShwaXBl X29iaiwgb3V0cHV0LCBwcmltYXJ5KTsKIAl9CiAKIAlpZ3Rfc3VidGVzdCgiY3J0Y19pbnZhbGlk X3BhcmFtcyIpIHsKLQkJc3RydWN0IGttc19hdG9taWNfc3RhdGUgKnNjcmF0Y2ggPSBhdG9taWNf c3RhdGVfZHVwKGN1cnJlbnQpOwotCQlzdHJ1Y3Qga21zX2F0b21pY19jcnRjX3N0YXRlICpjcnRj ID0gZmluZF9jcnRjKHNjcmF0Y2gsIHRydWUpOwotCQlzdHJ1Y3Qga21zX2F0b21pY19wbGFuZV9z dGF0ZSAqcGxhbmUgPQotCQkJZmluZF9wbGFuZShzY3JhdGNoLCBOVU1fUExBTkVfVFlQRV9QUk9Q UywgY3J0Yyk7Ci0JCXN0cnVjdCBrbXNfYXRvbWljX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubiA9Ci0J CQlmaW5kX2Nvbm5lY3RvcihzY3JhdGNoLCBjcnRjKTsKLQotCQlpZ3RfcmVxdWlyZShjcnRjKTsK LQkJaWd0X3JlcXVpcmUocGxhbmUpOwotCQlpZ3RfcmVxdWlyZShjb25uKTsKLQkJY3J0Y19pbnZh bGlkX3BhcmFtcyhjcnRjLCBwbGFuZSwgY29ubik7Ci0JCWF0b21pY19zdGF0ZV9mcmVlKHNjcmF0 Y2gpOworCQlhdG9taWNfc2V0dXAoJmRpc3BsYXksIHBpcGUsIG91dHB1dCwgcHJpbWFyeSwgJmZi KTsKKworCQljcnRjX2ludmFsaWRfcGFyYW1zKHBpcGVfb2JqLCBvdXRwdXQsIHByaW1hcnksICZm Yik7CiAJfQogCiAJaWd0X3N1YnRlc3QoImNydGNfaW52YWxpZF9wYXJhbXNfZmVuY2UiKSB7Ci0J CXN0cnVjdCBrbXNfYXRvbWljX3N0YXRlICpzY3JhdGNoID0gYXRvbWljX3N0YXRlX2R1cChjdXJy ZW50KTsKLQkJc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0YyA9IGZpbmRfY3J0Yyhz Y3JhdGNoLCB0cnVlKTsKLQkJc3RydWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUgKnBsYW5lID0K LQkJCWZpbmRfcGxhbmUoc2NyYXRjaCwgTlVNX1BMQU5FX1RZUEVfUFJPUFMsIGNydGMpOwotCQlz dHJ1Y3Qga21zX2F0b21pY19jb25uZWN0b3Jfc3RhdGUgKmNvbm4gPQotCQkJZmluZF9jb25uZWN0 b3Ioc2NyYXRjaCwgY3J0Yyk7Ci0KLQkJaWd0X3JlcXVpcmUoY3J0Yyk7Ci0JCWlndF9yZXF1aXJl KHBsYW5lKTsKLQkJaWd0X3JlcXVpcmUoY29ubik7Ci0JCWNydGNfaW52YWxpZF9wYXJhbXNfZmVu Y2UoY3J0YywgcGxhbmUsIGNvbm4pOwotCQlhdG9taWNfc3RhdGVfZnJlZShzY3JhdGNoKTsKLQl9 CisJCWF0b21pY19zZXR1cCgmZGlzcGxheSwgcGlwZSwgb3V0cHV0LCBwcmltYXJ5LCAmZmIpOwog Ci0JaWd0X3N1YnRlc3QoImF0b21pY19pbnZhbGlkX3BhcmFtcyIpIHsKLQkJc3RydWN0IGttc19h dG9taWNfc3RhdGUgKnNjcmF0Y2ggPSBhdG9taWNfc3RhdGVfZHVwKGN1cnJlbnQpOwotCQlzdHJ1 Y3Qga21zX2F0b21pY19jcnRjX3N0YXRlICpjcnRjID0gZmluZF9jcnRjKHNjcmF0Y2gsIHRydWUp OwotCQlzdHJ1Y3Qga21zX2F0b21pY19wbGFuZV9zdGF0ZSAqcGxhbmUgPQotCQkJZmluZF9wbGFu ZShzY3JhdGNoLCBOVU1fUExBTkVfVFlQRV9QUk9QUywgY3J0Yyk7Ci0JCXN0cnVjdCBrbXNfYXRv bWljX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubiA9Ci0JCQlmaW5kX2Nvbm5lY3RvcihzY3JhdGNoLCBj cnRjKTsKLQotCQlpZ3RfcmVxdWlyZShjcnRjKTsKLQkJaWd0X3JlcXVpcmUocGxhbmUpOwotCQlp Z3RfcmVxdWlyZShjb25uKTsKLQkJYXRvbWljX2ludmFsaWRfcGFyYW1zKGNydGMsIHBsYW5lLCBj b25uKTsKLQkJYXRvbWljX3N0YXRlX2ZyZWUoc2NyYXRjaCk7CisJCWNydGNfaW52YWxpZF9wYXJh bXNfZmVuY2UocGlwZV9vYmosIG91dHB1dCwgcHJpbWFyeSwgJmZiKTsKIAl9CiAKLQlhdG9taWNf c3RhdGVfZnJlZShjdXJyZW50KTsKKwlpZ3Rfc3VidGVzdCgiYXRvbWljX2ludmFsaWRfcGFyYW1z IikKKwkJYXRvbWljX2ludmFsaWRfcGFyYW1zKHBpcGVfb2JqLCBwcmltYXJ5LCBvdXRwdXQsICZm Yik7CiAKLQlpZ3RfZml4dHVyZQotCQljbG9zZShkZXNjLmZkKTsKKwlpZ3RfZml4dHVyZSB7CisJ CWF0b21pY19jbGVhcigmZGlzcGxheSwgcGlwZSwgcHJpbWFyeSwgb3V0cHV0KTsKKwkJaWd0X3Jl bW92ZV9mYihkaXNwbGF5LmRybV9mZCwgJmZiKTsKKworCQlpZ3RfZGlzcGxheV9maW5pKCZkaXNw bGF5KTsKKwl9CiB9Ci0tIAoyLjE0LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeAo=