From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mblankhorst.nl (mblankhorst.nl [141.105.120.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8F85A6E5A4 for ; Tue, 24 Jul 2018 13:59:33 +0000 (UTC) From: Maarten Lankhorst Date: Tue, 24 Jul 2018 15:59:27 +0200 Message-Id: <20180724135927.7926-3-maarten.lankhorst@linux.intel.com> In-Reply-To: <20180724135927.7926-1-maarten.lankhorst@linux.intel.com> References: <20180724135927.7926-1-maarten.lankhorst@linux.intel.com> Subject: [igt-dev] [PATCH i-g-t 3/3] tests/kms_nv12: Add nv12 specific tests. List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org List-ID: QWRkIHRlc3RzIGV4Y2VyY2lzaW5nIHN3aXRjaGluZyBiZXR3ZWVuIHZhcmlvdXMgc2NhbGVkL3Vu c2NhbGVkCnRyYW5zaXRpb25zIHRvIGFuZCBmcm9tIE5WMTIsIHNpbmNlIHNvbWUgb2YgdGhlIHdv cmthcm91bmRzIG1lbnRpb24KdGhpcyBtYXkgZmFpbC4KCldlIGFsc28gYWRkIE5WMTIgc3BlY2lm aWMgY2xpcHBpbmcvc2NhbGluZyB0ZXN0cywgdG8gbWFrZSBzdXJlCnRoYXQgTlYxMiBzcmMgY29v cmRpbmF0ZXMgYXJlIGFsd2F5cyBwcm9ncmFtbWVkIGFzIGEgbXVsdGlwbGUgb2YgNApjb3JyZWN0 bHksIGFuZCB2ZXJpZnkgc2NhbGluZy9jbGlwcGluZyB3b3JrcyB3aXRoIENSQyB0ZXN0cy4KClNp Z25lZC1vZmYtYnk6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51eC5p bnRlbC5jb20+Ci0tLQogdGVzdHMvTWFrZWZpbGUuc291cmNlcyB8ICAgMSArCiB0ZXN0cy9rbXNf bnYxMi5jICAgICAgIHwgNzQzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiB0ZXN0cy9tZXNvbi5idWlsZCAgICAgIHwgICAxICsKIDMgZmlsZXMgY2hhbmdlZCwgNzQ1 IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9rbXNfbnYxMi5jCgpkaWZm IC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMK aW5kZXggYzg0OTMzZjFkOTcxLi5kYWI5MjYwZjU4NGQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL01ha2Vm aWxlLnNvdXJjZXMKKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwpAQCAtMTkwLDYgKzE5MCw3 IEBAIFRFU1RTX3Byb2dzID0gXAogCWttc19pbnZhbGlkX2RvdGNsb2NrIFwKIAlrbXNfbGVnYWN5 X2NvbG9ya2V5IFwKIAlrbXNfbW1hcF93cml0ZV9jcmMgXAorCWttc19udjEyIFwKIAlrbXNfcGFu ZWxfZml0dGluZyBcCiAJa21zX3BpcGVfYl9jX2l2YiBcCiAJa21zX3BpcGVfY3JjX2Jhc2ljIFwK ZGlmZiAtLWdpdCBhL3Rlc3RzL2ttc19udjEyLmMgYi90ZXN0cy9rbXNfbnYxMi5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMDVhZTgzZTUzZGRhCi0tLSAvZGV2L251 bGwKKysrIGIvdGVzdHMva21zX252MTIuYwpAQCAtMCwwICsxLDc0MyBAQAorLyoKKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hh bGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAq CisgKiBBdXRob3JzOgorICogICAgTWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0 QGxpbnV4LmludGVsLmNvbT4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi aWd0LmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUg PHN0ZGludC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisK K3R5cGVkZWYgc3RydWN0IHsKKwlpZ3RfZGlzcGxheV90IGRpc3BsYXk7CisKKwlpZ3RfcGlwZV9j cmNfdCAqcGlwZV9jcmM7CisJc3RydWN0IGlndF9mYiBmYls0XTsKK30gZGF0YV90OworCitzdGF0 aWMgYm9vbCBwbGFuZV9zdXBwb3J0c19mb3JtYXQoaWd0X3BsYW5lX3QgKnBsYW5lLCB1aW50MzJf dCBmb3JtYXQpCit7CisJaW50IGk7CisKKwlpZiAoIWlndF9mYl9zdXBwb3J0ZWRfZm9ybWF0KGZv cm1hdCkpCisJCXJldHVybiBmYWxzZTsKKworCWZvciAoaSA9IDA7IGkgPCBwbGFuZS0+ZHJtX3Bs YW5lLT5jb3VudF9mb3JtYXRzOyBpKyspCisJCWlmIChwbGFuZS0+ZHJtX3BsYW5lLT5mb3JtYXRz W2ldID09IGZvcm1hdCkKKwkJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitz dGF0aWMgYm9vbCBwaXBlX3N1cHBvcnRzX2Zvcm1hdChpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBl bnVtIHBpcGUgcGlwZSwgdWludDMyX3QgZm9ybWF0KQoreworCWlndF9wbGFuZV90ICpwbGFuZTsK KworCWZvcl9lYWNoX3BsYW5lX29uX3BpcGUoZGlzcGxheSwgcGlwZSwgcGxhbmUpCisJCWlmIChw bGFuZV9zdXBwb3J0c19mb3JtYXQocGxhbmUsIGZvcm1hdCkpCisJCQlyZXR1cm4gdHJ1ZTsKKwor CXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2ZicyhkYXRhX3QgKmRhdGEp Cit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYXRhLT5mYik7IGkr KykKKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5kaXNwbGF5LmRybV9mZCwgJmRhdGEtPmZiW2ldKTsK K30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9jcnRjKGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBp cGUsIGlndF9vdXRwdXRfdCAqb3V0cHV0KQoreworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAm ZGF0YS0+ZGlzcGxheTsKKworCXJlbW92ZV9mYnMoZGF0YSk7CisJaWd0X2Rpc3BsYXlfcmVzZXQo ZGlzcGxheSk7CisJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUpOworCWlndF9kaXNw bGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisKKwlpZ3RfcGlwZV9jcmNfZnJl ZShkYXRhLT5waXBlX2NyYyk7CisJZGF0YS0+cGlwZV9jcmMgPSBpZ3RfcGlwZV9jcmNfbmV3KGRp c3BsYXktPmRybV9mZCwgcGlwZSwgSU5URUxfUElQRV9DUkNfU09VUkNFX0FVVE8pOworfQorCitz dGF0aWMgdm9pZCBzZXRfZmIoaWd0X3BsYW5lX3QgKnBsYW5lLCBzdHJ1Y3QgaWd0X2ZiICpmYiwg Ym9vbCBzY2FsZWQpCit7CisJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgZmIpOworCisJaWYgKHNj YWxlZCAmJiBmYikKKwkJaWd0X2ZiX3NldF9zaXplKGZiLCBwbGFuZSwgZmItPndpZHRoLCAxNik7 CisKKwlpZiAoZmIgJiYgZmItPnRpbGluZyA9PSBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxF RCkgeworCQlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5lLCBJR1RfUk9UQVRJT05fOTApOwor CQlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIGZiLT5oZWlnaHQsIGZiLT53aWR0aCk7CisJfSBl bHNlCisJCWlndF9wbGFuZV9zZXRfcm90YXRpb24ocGxhbmUsIElHVF9ST1RBVElPTl8wKTsKK30K Kworc3RhdGljIHZvaWQgbnYxMl9yZ2Jfc3dpdGNoKGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBp cGUsIGlndF9vdXRwdXRfdCAqb3V0cHV0LCBib29sIHNjYWxlZCwgdW5zaWduZWQgZm9ybWF0KQor eworCWRybU1vZGVNb2RlSW5mbyAqbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsK KwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJaWd0X3BsYW5lX3Qg KnBsYW5lOworCWludCBpOworCWlndF9jcmNfdCByZWZfY3JjWzRdLCBjcmM7CisKKwlwcmVwYXJl X2NydGMoZGF0YSwgcGlwZSwgb3V0cHV0KTsKKworCWlndF9jcmVhdGVfcGF0dGVybl9mYihkaXNw bGF5LT5kcm1fZmQsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKKwkJCSAgICAgIGZv cm1hdCwgTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsCisJCQkgICAgICAmZGF0YS0+ZmJb MF0pOworCisJaWd0X2NyZWF0ZV9wYXR0ZXJuX2ZiKGRpc3BsYXktPmRybV9mZCwgbW9kZS0+dmRp c3BsYXksIG1vZGUtPmhkaXNwbGF5LAorCQkJICAgICAgZm9ybWF0LCBMT0NBTF9JOTE1X0ZPUk1B VF9NT0RfWV9USUxFRCwKKwkJCSAgICAgICZkYXRhLT5mYlsxXSk7CisKKwlpZ3RfY3JlYXRlX3Bh dHRlcm5fZmIoZGlzcGxheS0+ZHJtX2ZkLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXks CisJCQkgICAgICBEUk1fRk9STUFUX1hSR0I4ODg4LCBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWF9U SUxFRCwKKwkJCSAgICAgICZkYXRhLT5mYlsyXSk7CisKKwlpZ3RfY3JlYXRlX3BhdHRlcm5fZmIo ZGlzcGxheS0+ZHJtX2ZkLCBtb2RlLT52ZGlzcGxheSwgbW9kZS0+aGRpc3BsYXksCisJCQkgICAg ICBEUk1fRk9STUFUX1hSR0I4ODg4LCBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwKKwkJ CSAgICAgICZkYXRhLT5mYlszXSk7CisKKwlmb3JfZWFjaF9wbGFuZV9vbl9waXBlKGRpc3BsYXks IHBpcGUsIHBsYW5lKSB7CisJCWlmICghcGxhbmVfc3VwcG9ydHNfZm9ybWF0KHBsYW5lLCBEUk1f Rk9STUFUX1hSR0I4ODg4KSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFdlIG9ubHkgaGF2ZSBmZXcg c2NhbGVycywgZG9uJ3QgdXNlIDEgZm9yIHVudXNlZCBwbGFuZXMgKi8KKwkJaWYgKHBsYW5lLT50 eXBlICE9IERSTV9QTEFORV9UWVBFX0NVUlNPUiAmJiAhc2NhbGVkKQorCQkJc2V0X2ZiKHBsYW5l LCAmZGF0YS0+ZmJbM10sIGZhbHNlKTsKKwl9CisKKwlmb3JfZWFjaF9wbGFuZV9vbl9waXBlKGRp c3BsYXksIHBpcGUsIHBsYW5lKSB7CisJCWNvbnN0IGludCBzZXFbXSA9IHsKKwkJCTIsIDAsIDIs IDEsIDMsIDEsIDMKKwkJfTsKKworCQlpZiAoIXBsYW5lX3N1cHBvcnRzX2Zvcm1hdChwbGFuZSwg Zm9ybWF0KSkKKwkJCWNvbnRpbnVlOworCisJCS8qIENvbGxlY3QgcmVmZXJlbmNlIGNyYyB3aXRo IHRvZ2dsZSBpbiBiZXR3ZWVuLiAqLworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWZf Y3JjKTsgaSsrKSB7CisJCQlzZXRfZmIocGxhbmUsICZkYXRhLT5mYltpXSwgc2NhbGVkKTsKKwkJ CWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisKKwkJCWlndF9w aXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJnJlZl9jcmNbaV0pOworCisJCQlz ZXRfZmIocGxhbmUsIE5VTEwsIHNjYWxlZCk7CisJCQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3Bs YXksIENPTU1JVF9BVE9NSUMpOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo c2VxKTsgaSsrKSB7CisJCQlpbnQgaiA9IHNlcVtpXTsKKworCQkJc2V0X2ZiKHBsYW5lLCAmZGF0 YS0+ZmJbal0sIHNjYWxlZCk7CisJCQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1J VF9BVE9NSUMpOworCisJCQlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMs ICZjcmMpOworCQkJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJnJlZl9jcmNbal0sICZjcmMpOworCQl9 CisKKwkJLyogV2Ugb25seSBoYXZlIGZldyBzY2FsZXJzLCBkb24ndCB1c2UgMSBmb3IgdW51c2Vk IHBsYW5lcyAqLworCQlpZiAoc2NhbGVkKQorCQkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgTlVM TCk7CisJfQorfQorCisjZGVmaW5lIGFzc2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKHBpcGVfY3Jj LCBjcmMsIHJlZl9jcmMsIHJvdGF0aW9uKSBcCisJZG8geyBcCisJCWlndF9waXBlX2NyY19nZXRf Y3VycmVudChkaXNwbGF5LT5kcm1fZmQsIHBpcGVfY3JjLCBjcmMpOwlcCisJCWlndF93YXJuX29u X2YoIWlndF9jaGVja19jcmNfZXF1YWwocmVmX2NyYywgY3JjKSwgIm1pc21hdGNoIHdpdGggJXgg cm90YXRpb24hXG4iLCByb3RhdGlvbik7CVwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgdm9pZCBz ZXRfc3JjX2Nvb3JkcyhpZ3RfcGxhbmVfdCAqcGxhbmUsIHN0cnVjdCBpZ3RfZmIgKmZiLAorCQkJ ICAgaWd0X3JvdGF0aW9uX3Qgcm90LCBpbnQgdmlzLCBpbnQgaGlkZGVuKQoreworCXN3aXRjaCAo cm90KSB7CisJY2FzZSBJR1RfUk9UQVRJT05fMDoKKwkJaWd0X2ZiX3NldF9wb3NpdGlvbihmYiwg cGxhbmUsIGZiLT53aWR0aCAvIDIgLSB2aXMsIGZiLT5oZWlnaHQgLyAyIC0gdmlzKTsKKwkJYnJl YWs7CisJY2FzZSBJR1RfUk9UQVRJT05fOTA6CisJCWlndF9mYl9zZXRfcG9zaXRpb24oZmIsIHBs YW5lLCBmYi0+d2lkdGggLyAyIC0gaGlkZGVuLCBmYi0+aGVpZ2h0IC8gMiAtIHZpcyk7CisJCWJy ZWFrOworCWNhc2UgSUdUX1JPVEFUSU9OXzE4MDoKKwkJaWd0X2ZiX3NldF9wb3NpdGlvbihmYiwg cGxhbmUsIGZiLT53aWR0aCAvIDIgLSBoaWRkZW4sIGZiLT5oZWlnaHQgLyAyIC0gaGlkZGVuKTsK KwkJYnJlYWs7CisJY2FzZSBJR1RfUk9UQVRJT05fMjcwOgorCQlpZ3RfZmJfc2V0X3Bvc2l0aW9u KGZiLCBwbGFuZSwgZmItPndpZHRoIC8gMiAtIHZpcywgZmItPmhlaWdodCAvIDIgLSBoaWRkZW4p OworCQlicmVhazsKKwlkZWZhdWx0OiBpZ3RfYXNzZXJ0KDApOworCX0KKwlpZ3RfZmJfc2V0X3Np emUoZmIsIHBsYW5lLCB2aXMgKyBoaWRkZW4sIHZpcyArIGhpZGRlbik7Cit9CisKK3N0YXRpYyB2 b2lkIG52MTJfdmFsaWRfd2lkdGhfcGxhbmUoZGF0YV90ICpkYXRhLCBkcm1Nb2RlTW9kZUluZm8g Km1vZGUsCisJCQkJICAgaWd0X3BsYW5lX3QgKnBsYW5lLCBzdHJ1Y3QgaWd0X2ZiICpmYiwKKwkJ CQkgICBpZ3Rfcm90YXRpb25fdCByb3QsIGlndF9jcmNfdCAqcmVmX2NyYykKK3sKKwlpZ3RfZGlz cGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJaWd0X2NyY190IGNyYzsKKwlzdHJ1 Y3QgaWd0X2ZiICpjbGlwX2ZiID0gJmRhdGEtPmZiWzJdOworCWludCBpOworCisJaWd0X3BsYW5l X3NldF9mYihwbGFuZSwgZmIpOworCWlndF9wbGFuZV9zZXRfcm90YXRpb24ocGxhbmUsIHJvdCk7 CisJaWYgKHJvdCAmIChJR1RfUk9UQVRJT05fOTAgfCBJR1RfUk9UQVRJT05fMjcwKSkKKwkJaWd0 X3BsYW5lX3NldF9zaXplKHBsYW5lLCBmYi0+aGVpZ2h0LCBmYi0+d2lkdGgpOworCWlndF9kaXNw bGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisKKwkvKiBKdXN0IGNsaXBwaW5n Li4gKi8KKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBjbGlwX2ZiKTsKKwlpZiAocm90ICYgKElH VF9ST1RBVElPTl85MCB8IElHVF9ST1RBVElPTl8yNzApKQorCQlpZ3RfcGxhbmVfc2V0X3NpemUo cGxhbmUsIGNsaXBfZmItPmhlaWdodCwgY2xpcF9mYi0+d2lkdGgpOworCWlndF9wbGFuZV9zZXRf cG9zaXRpb24ocGxhbmUsIG1vZGUtPmhkaXNwbGF5IC0gY2xpcF9mYi0+d2lkdGggLyAyLCBtb2Rl LT52ZGlzcGxheSAtIGNsaXBfZmItPmhlaWdodCAvIDIpOworCWlndF9kaXNwbGF5X2NvbW1pdDIo ZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisJYXNzZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwoZGF0 YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMsIHJvdCk7CisKKwkvKiBDbGlwcGluZyBhbmQgc2Nh bGluZy4gKi8KKwlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGNsaXBfZmIsIHBsYW5lLCBjbGlwX2ZiLT53 aWR0aCAvIDIgLSAxNiwgY2xpcF9mYi0+aGVpZ2h0IC8gMiAtIDE2KTsKKwlpZ3RfZmJfc2V0X3Np emUoY2xpcF9mYiwgcGxhbmUsIDMyLCAzMik7CisJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5 LCBDT01NSVRfQVRPTUlDKTsKKwlhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBl X2NyYywgJmNyYywgcmVmX2NyYywgcm90KTsKKworCS8qIEludmFsaWQgPCAxNiBzcmMgdmlzaWJs ZS4gKi8KKwlzZXRfc3JjX2Nvb3JkcyhwbGFuZSwgY2xpcF9mYiwgcm90LCA4LCA4KTsKKwlpZ3Rf YXNzZXJ0X2VxKGlndF9kaXNwbGF5X3RyeV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMp LCAtRUlOVkFMKTsKKworCS8qIFRyeSBkaWZmZXJlbnQgYWxpZ25tZW50cyBmb3IgeC95IHRvIHNl ZSBpZiBhbnkgaGl0IHVuZGVycnVucyAqLworCWZvciAoaSA9IDE7IGkgPCA0OyBpKyspIHsKKwkJ c2V0X3NyY19jb29yZHMocGxhbmUsIGNsaXBfZmIsIHJvdCwgMTYgKyAyICogaSwgMTYgLSAyICog aSk7CisJCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisJCWFz c2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjLCBy b3QpOworCisJCS8qIEFuZCBhbHNvIHNob3cgbW9yZSBvZiB0aGUgc2NyZWVuICovCisJCXNldF9z cmNfY29vcmRzKHBsYW5lLCBjbGlwX2ZiLCByb3QsIDE2ICsgaSwgMTYgKyBpKTsKKwkJaWYgKHJv dCA9PSBJR1RfUk9UQVRJT05fMjcwIHx8IHJvdCA9PSAoSUdUX1JPVEFUSU9OXzkwIHwgSUdUX1JF RkxFQ1RfWCkpIHsKKwkJCWlndF9hc3NlcnRfZXEoaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdDIoZGlz cGxheSwgQ09NTUlUX0FUT01JQyksIC1FSU5WQUwpOworCQkJY29udGludWU7CisJCX0KKwkJaWd0 X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKwkJYXNzZXJ0X2NvbGxl Y3RlZF9jcmNfZXF1YWwoZGF0YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMsIHJvdCk7CisJfQor CisJLyoKKwkgKiBBcyBhIGZpbmFsIHRlc3QsIHRyeSB3aXRoIDE2IHNyYyB2aXNpYmxlLCBhbmQg dmFyaW91cyBpbnZpc2libGUKKwkgKiBjb21wb25lbnRzIHRvIGNoZWNrIGNsaXBwaW5nIGRvZXNu J3QgZHJvcCB0aGUgdmlzaWJsZSBzcmMgYmVsb3cgMTYuCisJICovCisJZm9yIChpID0gMDsgaSA8 IDE2OyBpICs9IDQpIHsKKwkJc2V0X3NyY19jb29yZHMocGxhbmUsIGNsaXBfZmIsIHJvdCwgMTYs IGkpOworCQlpZiAocm90ICYgKElHVF9ST1RBVElPTl85MCB8IElHVF9ST1RBVElPTl8yNzApKQor CQkJaWd0X3BsYW5lX3NldF9zaXplKHBsYW5lLCAoY2xpcF9mYi0+aGVpZ2h0IC8gMzIpICogKDE2 ICsgaSksCisJCQkJCSAgIChjbGlwX2ZiLT53aWR0aCAvIDMyKSAqICgxNiArIGkpKTsKKwkJZWxz ZQorCQkJaWd0X3BsYW5lX3NldF9zaXplKHBsYW5lLCAoY2xpcF9mYi0+d2lkdGggLyAzMikgKiAo MTYgKyBpKSwKKwkJCQkJICAgKGNsaXBfZmItPmhlaWdodCAvIDMyKSAqICgxNiArIGkpKTsKKwkJ aWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKwkJYXNzZXJ0X2Nv bGxlY3RlZF9jcmNfZXF1YWwoZGF0YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMsIHJvdCk7CisJ fQorfQorCitzdGF0aWMgdm9pZCBudjEyX3ZhbGlkX3dpZHRoKGRhdGFfdCAqZGF0YSwgZW51bSBw aXBlIHBpcGUsIGlndF9vdXRwdXRfdCAqb3V0cHV0LCB1bnNpZ25lZCBmb3JtYXQpCit7CisJZHJt TW9kZU1vZGVJbmZvICptb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOworCWlndF9k aXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKwlpZ3RfcGxhbmVfdCAqcGxhbmU7 CisJc3RydWN0IGlndF9mYiAqY2xpcF9mYiA9ICZkYXRhLT5mYlsyXTsKKwlzdHJ1Y3QgaWd0X2Zi ICpyZWZfZmIgPSAmZGF0YS0+ZmJbM107CisKKwlwcmVwYXJlX2NydGMoZGF0YSwgcGlwZSwgb3V0 cHV0KTsKKworCWlndF9jcmVhdGVfcGF0dGVybl9mYihkaXNwbGF5LT5kcm1fZmQsIG1vZGUtPmhk aXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKKwkJCSAgICAgIGZvcm1hdCwgTE9DQUxfSTkxNV9GT1JN QVRfTU9EX1hfVElMRUQsCisJCQkgICAgICAmZGF0YS0+ZmJbMF0pOworCisJaWd0X2NyZWF0ZV9w YXR0ZXJuX2ZiKGRpc3BsYXktPmRybV9mZCwgbW9kZS0+dmRpc3BsYXksIG1vZGUtPmhkaXNwbGF5 LAorCQkJICAgICAgZm9ybWF0LCBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwKKwkJCSAg ICAgICZkYXRhLT5mYlsxXSk7CisKKwlpZ3RfY3JlYXRlX2ZiKGRpc3BsYXktPmRybV9mZCwgNjQs IDY0LCBmb3JtYXQsCisJCSAgICAgIExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZX1RJTEVELCByZWZf ZmIpOworCisJaWd0X2NyZWF0ZV9mYihkaXNwbGF5LT5kcm1fZmQsIDIgKiByZWZfZmItPndpZHRo LAorCQkgICAgICAyICogcmVmX2ZiLT5oZWlnaHQsIGZvcm1hdCwKKwkJICAgICAgTE9DQUxfSTkx NV9GT1JNQVRfTU9EX1lfVElMRUQsIGNsaXBfZmIpOworCisJaWd0X3BpcGVfY3JjX3N0YXJ0KGRh dGEtPnBpcGVfY3JjKTsKKworCWZvcl9lYWNoX3BsYW5lX29uX3BpcGUoZGlzcGxheSwgcGlwZSwg cGxhbmUpIHsKKwkJaWd0X2NyY190IHJlZl9jcmNbNF07CisJCWNhaXJvX3QgKmNyOworCQlzdGF0 aWMgY29uc3QgZG91YmxlIGNvbG9yc1s0XVszXSA9IHsKKwkJCXsgMS4sIDAuLCAwLiB9LAorCQkJ eyAwLiwgMS4sIDAuIH0sCisJCQl7IDAuLCAwLiwgMS4gfSwKKwkJCXsgMS4sIDEuLCAxLiB9CisJ CX07CisJCWludCBpOworCisJCWlmICghcGxhbmVfc3VwcG9ydHNfZm9ybWF0KHBsYW5lLCBmb3Jt YXQpKQorCQkJY29udGludWU7CisKKwkJLyogRHJhdyB0aGUgRkIgdGhhdCB3aWxsIGJlIHVzZWQg Zm9yIGNsaXBwaW5nIHRlc3RzLiAqLworCQljciA9IGlndF9nZXRfY2Fpcm9fY3R4KGRpc3BsYXkt PmRybV9mZCwgY2xpcF9mYik7CisJCWlndF9wYWludF9jb2xvcihjciwgMCwgMCwgY2xpcF9mYi0+ d2lkdGggLyAyLCBjbGlwX2ZiLT5oZWlnaHQgLyAyLAorCQkJCWNvbG9yc1swXVswXSwgY29sb3Jz WzBdWzFdLCBjb2xvcnNbMF1bMl0pOworCisJCWlndF9wYWludF9jb2xvcihjciwgY2xpcF9mYi0+ d2lkdGggLyAyLCAwLAorCQkJCWNsaXBfZmItPndpZHRoIC8gMiwgY2xpcF9mYi0+aGVpZ2h0IC8g MiwKKwkJCQljb2xvcnNbMV1bMF0sIGNvbG9yc1sxXVsxXSwgY29sb3JzWzFdWzJdKTsKKworCQlp Z3RfcGFpbnRfY29sb3IoY3IsIGNsaXBfZmItPndpZHRoIC8gMiwgY2xpcF9mYi0+aGVpZ2h0IC8g MiwKKwkJCQljbGlwX2ZiLT53aWR0aCAvIDIsIGNsaXBfZmItPmhlaWdodCAvIDIsCisJCQkJY29s b3JzWzJdWzBdLCBjb2xvcnNbMl1bMV0sIGNvbG9yc1syXVsyXSk7CisKKwkJaWd0X3BhaW50X2Nv bG9yKGNyLCAwLCBjbGlwX2ZiLT5oZWlnaHQgLyAyLAorCQkJCWNsaXBfZmItPndpZHRoIC8gMiwg Y2xpcF9mYi0+aGVpZ2h0IC8gMiwKKwkJCQljb2xvcnNbM11bMF0sIGNvbG9yc1szXVsxXSwgY29s b3JzWzNdWzJdKTsKKworCQlpZ3RfcHV0X2NhaXJvX2N0eChkaXNwbGF5LT5kcm1fZmQsIGNsaXBf ZmIsIGNyKTsKKworCQkvKiBEcmF3IGFsbCByZWZlcmVuY2UgRkIncyB0byBjb2xsZWN0IHRoZSBD UkMuICovCisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCWNyID0gaWd0X2dldF9jYWly b19jdHgoZGlzcGxheS0+ZHJtX2ZkLCByZWZfZmIpOworCQkJaWd0X3BhaW50X2NvbG9yKGNyLCAw LCAwLCByZWZfZmItPndpZHRoLCByZWZfZmItPmhlaWdodCwKKwkJCQkJY29sb3JzW2ldWzBdLCBj b2xvcnNbaV1bMV0sIGNvbG9yc1tpXVsyXSk7CisJCQlpZ3RfcHV0X2NhaXJvX2N0eChkaXNwbGF5 LT5kcm1fZmQsICZkYXRhLT5mYlszXSwgY3IpOworCisJCQlpZiAoIWkpIHsKKwkJCQlpZ3RfcGxh bmVfc2V0X2ZiKHBsYW5lLCByZWZfZmIpOworCQkJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxh bmUsIG1vZGUtPmhkaXNwbGF5IC0gcmVmX2ZiLT53aWR0aCwgbW9kZS0+dmRpc3BsYXkgLSByZWZf ZmItPmhlaWdodCk7CisJCQkJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRP TUlDKTsKKwkJCX0gZWxzZSB7CisJCQkJaWd0X2RpcnR5X2ZiKGRpc3BsYXktPmRybV9mZCwgcmVm X2ZiKTsKKwkJCQlpZ3Rfd2FpdF9mb3JfdmJsYW5rKGRpc3BsYXktPmRybV9mZCwgcGlwZSk7CisJ CQl9CisKKwkJCWlndF9waXBlX2NyY19kcmFpbihkYXRhLT5waXBlX2NyYyk7CisJCQlpZ3RfcGlw ZV9jcmNfZ2V0X3NpbmdsZShkYXRhLT5waXBlX2NyYywgJnJlZl9jcmNbaV0pOworCQl9CisKKwkJ aWd0X3BsYW5lX3NldF9mYihwbGFuZSwgTlVMTCk7CisJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24o cGxhbmUsIDAsIDApOworCisJCW52MTJfdmFsaWRfd2lkdGhfcGxhbmUoZGF0YSwgbW9kZSwgcGxh bmUsICZkYXRhLT5mYlswXSwgSUdUX1JPVEFUSU9OXzAsICZyZWZfY3JjWzBdKTsKKwkJbnYxMl92 YWxpZF93aWR0aF9wbGFuZShkYXRhLCBtb2RlLCBwbGFuZSwgJmRhdGEtPmZiWzFdLCBJR1RfUk9U QVRJT05fOTAsICZyZWZfY3JjWzFdKTsKKwkJbnYxMl92YWxpZF93aWR0aF9wbGFuZShkYXRhLCBt b2RlLCBwbGFuZSwgJmRhdGEtPmZiWzBdLCBJR1RfUk9UQVRJT05fMTgwLCAmcmVmX2NyY1syXSk7 CisJCW52MTJfdmFsaWRfd2lkdGhfcGxhbmUoZGF0YSwgbW9kZSwgcGxhbmUsICZkYXRhLT5mYlsx XSwgSUdUX1JPVEFUSU9OXzI3MCwgJnJlZl9jcmNbM10pOworCisJCWlndF9wbGFuZV9zZXRfZmIo cGxhbmUsIE5VTEwpOworCX0KK30KKworc3RhdGljIGJvb2wgbnYxMl9jb21taXRfcm90YXRlZChp Z3RfZGlzcGxheV90ICpkaXNwbGF5LCBpZ3Rfcm90YXRpb25fdCByb3QpCit7CisJaWYgKGlndF9k aXNwbGF5X3RyeV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpIDwgMCkgeworCQlpZ3Rf YXNzZXJ0KHJvdCA9PSBJR1RfUk9UQVRJT05fMjcwIHx8IHJvdCA9PSAoSUdUX1JPVEFUSU9OXzkw IHwgSUdUX1JFRkxFQ1RfWCkpOworCQlpZ3RfZGVidWcoIlNraXBwaW5nIHJvdGF0ZWQgdGVzdCwg YWxpZ25tZW50IGlzIHdyb25nLlxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4g dHJ1ZTsKK30KKworc3RhdGljIHZvaWQgbnYxMl9jcm9wX3NjYWxlX2J1Z19wbGFuZShkYXRhX3Qg KmRhdGEsIGRybU1vZGVNb2RlSW5mbyAqbW9kZSwKKwkJCQkgICAgICBpZ3RfcGxhbmVfdCAqcGxh bmUsIHN0cnVjdCBpZ3RfZmIgKmZiLAorCQkJCSAgICAgIGlndF9yb3RhdGlvbl90IHJvdCwgaWd0 X2NyY190ICpyZWZfY3JjKQoreworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlz cGxheTsKKwlpZ3RfY3JjX3QgY3JjOworCisJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgZmIpOwor CWlndF9wbGFuZV9zZXRfcm90YXRpb24ocGxhbmUsIHJvdCk7CisJaWd0X2ZiX3NldF9wb3NpdGlv bihmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDQgKyAxLCBmYi0+aGVpZ2h0IC8gNCArIDEpOworCWln dF9mYl9zZXRfc2l6ZShmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDIgKyAyLCBmYi0+aGVpZ2h0IC8g MiArIDIpOworCisJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZSwgNjQsIDY0KTsKKwlpZ3Rf cGxhbmVfc2V0X3NpemUocGxhbmUsIDI1NiwgMjU2KTsKKworCWlmIChudjEyX2NvbW1pdF9yb3Rh dGVkKGRpc3BsYXksIHJvdCkpCisJCWFzc2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBp cGVfY3JjLCAmY3JjLCByZWZfY3JjLCByb3QpOworfQorCitzdGF0aWMgdm9pZCBudjEyX2Nyb3Bf c2NhbGVfYnVnKGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUsIGlndF9vdXRwdXRfdCAqb3V0 cHV0LCB1bnNpZ25lZCBmb3JtYXQpCit7CisJZHJtTW9kZU1vZGVJbmZvICptb2RlID0gaWd0X291 dHB1dF9nZXRfbW9kZShvdXRwdXQpOworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ ZGlzcGxheTsKKwlpZ3RfcGxhbmVfdCAqcGxhbmU7CisJc3RydWN0IGlndF9mYiAqY2xpcF9mYiA9 ICZkYXRhLT5mYlsyXTsKKwlzdHJ1Y3QgaWd0X2ZiICpyZWZfZmIgPSAmZGF0YS0+ZmJbM107CisK KwlwcmVwYXJlX2NydGMoZGF0YSwgcGlwZSwgb3V0cHV0KTsKKworCWlndF9jcmVhdGVfcGF0dGVy bl9mYihkaXNwbGF5LT5kcm1fZmQsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKKwkJ CSAgICAgIGZvcm1hdCwgTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsICZkYXRhLT5mYlsw XSk7CisKKwlpZ3RfY3JlYXRlX3BhdHRlcm5fZmIoZGlzcGxheS0+ZHJtX2ZkLCBtb2RlLT52ZGlz cGxheSwgbW9kZS0+aGRpc3BsYXksCisJCSAgICAgIGZvcm1hdCwgTE9DQUxfSTkxNV9GT1JNQVRf TU9EX1lfVElMRUQsICZkYXRhLT5mYlsxXSk7CisKKwlpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRpc3Bs YXktPmRybV9mZCwgMjU2LCAyNTYsIGZvcm1hdCwKKwkJCSAgICBMT0NBTF9JOTE1X0ZPUk1BVF9N T0RfWV9USUxFRCwgMS4sIDEuLCAxLiwgcmVmX2ZiKTsKKworCWlndF9jcmVhdGVfZmIoZGlzcGxh eS0+ZHJtX2ZkLCA4MCwgMTI4LCBmb3JtYXQsCisJCSAgICAgIExPQ0FMX0k5MTVfRk9STUFUX01P RF9ZX1RJTEVELCBjbGlwX2ZiKTsKKworCWlndF9waXBlX2NyY19zdGFydChkYXRhLT5waXBlX2Ny Yyk7CisKKwlmb3JfZWFjaF9wbGFuZV9vbl9waXBlKGRpc3BsYXksIHBpcGUsIHBsYW5lKSB7CisJ CWlndF9jcmNfdCByZWZfY3JjOworCQljYWlyb190ICpjcjsKKworCQlpZiAoIXBsYW5lX3N1cHBv cnRzX2Zvcm1hdChwbGFuZSwgZm9ybWF0KSkKKwkJCWNvbnRpbnVlOworCisJCS8qIERyYXcgdGhl IEZCIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBjbGlwcGluZyB0ZXN0cy4gKi8KKwkJY3IgPSBpZ3Rf Z2V0X2NhaXJvX2N0eChkaXNwbGF5LT5kcm1fZmQsIGNsaXBfZmIpOworCQlpZ3RfcGFpbnRfY29s b3IoY3IsIDAsIDAsIGNsaXBfZmItPndpZHRoLCBjbGlwX2ZiLT5oZWlnaHQsIC41LCAuNSwgLjUp OworCisJCWlndF9wYWludF9jb2xvcihjciwgY2xpcF9mYi0+d2lkdGggLyA0LCBjbGlwX2ZiLT5o ZWlnaHQgLyA0LAorCQkJCWNsaXBfZmItPndpZHRoIC8gMiwgY2xpcF9mYi0+aGVpZ2h0IC8gMiwg MS4sIDEuLCAxLik7CisKKwkJaWd0X3B1dF9jYWlyb19jdHgoZGlzcGxheS0+ZHJtX2ZkLCBjbGlw X2ZiLCBjcik7CisKKwkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgcmVmX2ZiKTsKKwkJaWd0X3Bs YW5lX3NldF9wb3NpdGlvbihwbGFuZSwgNjQsIDY0KTsKKwkJaWd0X2Rpc3BsYXlfY29tbWl0Mihk aXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKworCQlpZ3RfcGlwZV9jcmNfZHJhaW4oZGF0YS0+cGlw ZV9jcmMpOworCQlpZ3RfcGlwZV9jcmNfZ2V0X3NpbmdsZShkYXRhLT5waXBlX2NyYywgJnJlZl9j cmMpOworCisJCW52MTJfY3JvcF9zY2FsZV9idWdfcGxhbmUoZGF0YSwgbW9kZSwgcGxhbmUsIGNs aXBfZmIsIElHVF9ST1RBVElPTl8wLCAmcmVmX2NyYyk7CisJCW52MTJfY3JvcF9zY2FsZV9idWdf cGxhbmUoZGF0YSwgbW9kZSwgcGxhbmUsIGNsaXBfZmIsIElHVF9ST1RBVElPTl85MCwgJnJlZl9j cmMpOworCQludjEyX2Nyb3Bfc2NhbGVfYnVnX3BsYW5lKGRhdGEsIG1vZGUsIHBsYW5lLCBjbGlw X2ZiLCBJR1RfUk9UQVRJT05fMTgwLCAmcmVmX2NyYyk7CisJCW52MTJfY3JvcF9zY2FsZV9idWdf cGxhbmUoZGF0YSwgbW9kZSwgcGxhbmUsIGNsaXBfZmIsIElHVF9ST1RBVElPTl8yNzAsICZyZWZf Y3JjKTsKKworCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsKKwl9Cit9CisKK3N0YXRp YyB2b2lkIG52MTJfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfd2l0aF9jdXJzb3IoZGF0YV90 ICpkYXRhLAorCQkJCQkJCWlndF9wbGFuZV90ICpwbGFuZSwKKwkJCQkJCQlzdHJ1Y3QgaWd0X2Zi ICpjbGlwX2ZiLAorCQkJCQkJCWlndF9wbGFuZV90ICpjdXJzb3IsCisJCQkJCQkJc3RydWN0IGln dF9mYiAqY3Vyc29yX2ZiLAorCQkJCQkJCWlndF9jcmNfdCAqcmVmX2NyYywKKwkJCQkJCQlpbnQg Y3Vyc29yX3gsIGludCBjdXJzb3JfeSkKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRh dGEtPmRpc3BsYXk7CisKKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBjbGlwX2ZiKTsKKwlpZ3Rf cGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCA2NCwgNjQpOworCWlndF9wbGFuZV9zZXRfcm90YXRp b24ocGxhbmUsIElHVF9ST1RBVElPTl8wKTsKKworCWlndF9wbGFuZV9zZXRfZmIoY3Vyc29yLCBj dXJzb3JfZmIpOworCWlndF9wbGFuZV9zZXRfcG9zaXRpb24oY3Vyc29yLCBjdXJzb3JfeCwgY3Vy c29yX3kpOworCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisK KwlpZ3RfcGlwZV9jcmNfZHJhaW4oZGF0YS0+cGlwZV9jcmMpOworCWlndF9waXBlX2NyY19nZXRf c2luZ2xlKGRhdGEtPnBpcGVfY3JjLCByZWZfY3JjKTsKKworCWlndF9wbGFuZV9zZXRfZmIoY3Vy c29yLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgbnYxMl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9w bGFuZV9yaWdodChkYXRhX3QgKmRhdGEsCisJCQkJCQkgIGlndF9yb3RhdGlvbl90IHJvdGF0aW9u LAorCQkJCQkJICBpZ3RfcGxhbmVfdCAqcGxhbmUsCisJCQkJCQkgIHN0cnVjdCBpZ3RfZmIgKmNs aXBfZmIsCisJCQkJCQkgIGlndF9jcmNfdCAqcmVmX2NyYykKK3sKKwlpZ3RfZGlzcGxheV90ICpk aXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJaWd0X2NyY190IGNyYyA9IHt9OworCisJaWd0X3Bs YW5lX3NldF9mYihwbGFuZSwgY2xpcF9mYik7CisJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFu ZSwgNjQsIDY0KTsKKwlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5lLCByb3RhdGlvbik7CisJ aWd0X3BsYW5lX3NldF9zaXplKHBsYW5lLCBjbGlwX2ZiLT53aWR0aCAtIDEsIGNsaXBfZmItPmhl aWdodCk7CisKKwlzd2l0Y2ggKHJvdGF0aW9uKSB7CisJY2FzZSBJR1RfUk9UQVRJT05fMTgwOgor CQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGNsaXBfZmIsIHBsYW5lLCAxLCAwKTsKKwljYXNlIElHVF9S T1RBVElPTl8wOgorCQlpZ3RfZmJfc2V0X3NpemUoY2xpcF9mYiwgcGxhbmUsIGNsaXBfZmItPndp ZHRoIC0gMSwgY2xpcF9mYi0+aGVpZ2h0KTsKKwkJYnJlYWs7CisKKwljYXNlIElHVF9ST1RBVElP Tl8yNzA6CisJCWlndF9mYl9zZXRfcG9zaXRpb24oY2xpcF9mYiwgcGxhbmUsIDAsIDEpOworCWNh c2UgSUdUX1JPVEFUSU9OXzkwOgorCQlpZ3RfZmJfc2V0X3NpemUoY2xpcF9mYiwgcGxhbmUsIGNs aXBfZmItPndpZHRoLCBjbGlwX2ZiLT5oZWlnaHQgLSAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoK KwkJaWd0X2Fzc2VydF9mKDAsICJVbmhhbmRsZWQgcm90YXRpb24gJXhcbiIsIHJvdGF0aW9uKTsK Kwl9CisKKwlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCWFz c2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjLCBy b3RhdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkIG52MTJfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxh bmVfYm90dG9tKGRhdGFfdCAqZGF0YSwKKwkJCQkJCSAgIGlndF9yb3RhdGlvbl90IHJvdGF0aW9u LAorCQkJCQkJICAgaWd0X3BsYW5lX3QgKnBsYW5lLAorCQkJCQkJICAgc3RydWN0IGlndF9mYiAq Y2xpcF9mYiwKKwkJCQkJCSAgIGlndF9jcmNfdCAqcmVmX2NyYykKK3sKKwlpZ3RfZGlzcGxheV90 ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJaWd0X2NyY190IGNyYyA9IHt9OworCisJaWd0 X3BsYW5lX3NldF9mYihwbGFuZSwgY2xpcF9mYik7CisJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihw bGFuZSwgNjQsIDY0KTsKKwlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5lLCByb3RhdGlvbik7 CisJaWd0X3BsYW5lX3NldF9zaXplKHBsYW5lLCBjbGlwX2ZiLT53aWR0aCwgY2xpcF9mYi0+aGVp Z2h0IC0gMSk7CisKKwlzd2l0Y2ggKHJvdGF0aW9uKSB7CisJY2FzZSBJR1RfUk9UQVRJT05fMTgw OgorCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGNsaXBfZmIsIHBsYW5lLCAwLCAxKTsKKwljYXNlIElH VF9ST1RBVElPTl8wOgorCQlpZ3RfZmJfc2V0X3NpemUoY2xpcF9mYiwgcGxhbmUsIGNsaXBfZmIt PndpZHRoLCBjbGlwX2ZiLT5oZWlnaHQgLSAxKTsKKwkJYnJlYWs7CisKKwljYXNlIElHVF9ST1RB VElPTl8yNzA6CisJCWlndF9mYl9zZXRfcG9zaXRpb24oY2xpcF9mYiwgcGxhbmUsIDEsIDApOwor CWNhc2UgSUdUX1JPVEFUSU9OXzkwOgorCQlpZ3RfZmJfc2V0X3NpemUoY2xpcF9mYiwgcGxhbmUs IGNsaXBfZmItPndpZHRoIC0gMSwgY2xpcF9mYi0+aGVpZ2h0KTsKKwkJYnJlYWs7CisJZGVmYXVs dDoKKwkJaWd0X2Fzc2VydF9mKDAsICJVbmhhbmRsZWQgcm90YXRpb24gJXhcbiIsIHJvdGF0aW9u KTsKKwl9CisKKwlpZiAobnYxMl9jb21taXRfcm90YXRlZChkaXNwbGF5LCByb3RhdGlvbikpCisJ CWFzc2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3Jj LCByb3RhdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkIG52MTJfY2hyb21hX3N1YnBpeGVsX2NsaXBf cGxhbmVfbGVmdChkYXRhX3QgKmRhdGEsCisJCQkJCQkgaWd0X3JvdGF0aW9uX3Qgcm90YXRpb24s CisJCQkJCQkgaWd0X3BsYW5lX3QgKnBsYW5lLAorCQkJCQkJIHN0cnVjdCBpZ3RfZmIgKmNsaXBf ZmIsCisJCQkJCQkgaWd0X2NyY190ICpyZWZfY3JjKQoreworCWlndF9kaXNwbGF5X3QgKmRpc3Bs YXkgPSAmZGF0YS0+ZGlzcGxheTsKKwlpZ3RfY3JjX3QgY3JjID0ge307CisKKwlpZ3RfcGxhbmVf c2V0X2ZiKHBsYW5lLCBjbGlwX2ZiKTsKKwlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCA2 NSwgNjQpOworCWlndF9wbGFuZV9zZXRfcm90YXRpb24ocGxhbmUsIHJvdGF0aW9uKTsKKwlpZ3Rf cGxhbmVfc2V0X3NpemUocGxhbmUsIGNsaXBfZmItPndpZHRoIC0gMSwgY2xpcF9mYi0+aGVpZ2h0 KTsKKworCXN3aXRjaCAocm90YXRpb24pIHsKKwljYXNlIElHVF9ST1RBVElPTl8wOgorCQlpZ3Rf ZmJfc2V0X3Bvc2l0aW9uKGNsaXBfZmIsIHBsYW5lLCAxLCAwKTsKKwljYXNlIElHVF9ST1RBVElP Tl8xODA6CisJCWlndF9mYl9zZXRfc2l6ZShjbGlwX2ZiLCBwbGFuZSwgY2xpcF9mYi0+d2lkdGgg LSAxLCBjbGlwX2ZiLT5oZWlnaHQpOworCQlicmVhazsKKworCWNhc2UgSUdUX1JPVEFUSU9OXzkw OgorCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGNsaXBfZmIsIHBsYW5lLCAwLCAxKTsKKwljYXNlIElH VF9ST1RBVElPTl8yNzA6CisJCWlndF9mYl9zZXRfc2l6ZShjbGlwX2ZiLCBwbGFuZSwgY2xpcF9m Yi0+d2lkdGgsIGNsaXBfZmItPmhlaWdodCAtIDEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlp Z3RfYXNzZXJ0X2YoMCwgIlVuaGFuZGxlZCByb3RhdGlvbiAleFxuIiwgcm90YXRpb24pOworCX0K KworCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisJYXNzZXJ0 X2NvbGxlY3RlZF9jcmNfZXF1YWwoZGF0YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMsIHJvdGF0 aW9uKTsKK30KKworCitzdGF0aWMgdm9pZCBudjEyX2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5l X3RvcChkYXRhX3QgKmRhdGEsCisJCQkJCQlpZ3Rfcm90YXRpb25fdCByb3RhdGlvbiwKKwkJCQkJ CWlndF9wbGFuZV90ICpwbGFuZSwKKwkJCQkJCXN0cnVjdCBpZ3RfZmIgKmNsaXBfZmIsCisJCQkJ CQlpZ3RfY3JjX3QgKnJlZl9jcmMpCit7CisJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRh LT5kaXNwbGF5OworCWlndF9jcmNfdCBjcmMgPSB7fTsKKworCWlndF9wbGFuZV9zZXRfZmIocGxh bmUsIGNsaXBfZmIpOworCWlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIDY0LCA2NSk7CisJ aWd0X3BsYW5lX3NldF9yb3RhdGlvbihwbGFuZSwgcm90YXRpb24pOworCWlndF9wbGFuZV9zZXRf c2l6ZShwbGFuZSwgY2xpcF9mYi0+d2lkdGgsIGNsaXBfZmItPmhlaWdodCAtIDEpOworCisJc3dp dGNoIChyb3RhdGlvbikgeworCWNhc2UgSUdUX1JPVEFUSU9OXzA6CisJCWlndF9mYl9zZXRfcG9z aXRpb24oY2xpcF9mYiwgcGxhbmUsIDAsIDEpOworCWNhc2UgSUdUX1JPVEFUSU9OXzE4MDoKKwkJ aWd0X2ZiX3NldF9zaXplKGNsaXBfZmIsIHBsYW5lLCBjbGlwX2ZiLT53aWR0aCwgY2xpcF9mYi0+ aGVpZ2h0IC0gMSk7CisJCWJyZWFrOworCisJY2FzZSBJR1RfUk9UQVRJT05fOTA6CisJCWlndF9m Yl9zZXRfcG9zaXRpb24oY2xpcF9mYiwgcGxhbmUsIDEsIDApOworCWNhc2UgSUdUX1JPVEFUSU9O XzI3MDoKKwkJaWd0X2ZiX3NldF9zaXplKGNsaXBfZmIsIHBsYW5lLCBjbGlwX2ZiLT53aWR0aCAt IDEsIGNsaXBfZmItPmhlaWdodCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlndF9hc3NlcnRf ZigwLCAiVW5oYW5kbGVkIHJvdGF0aW9uICV4XG4iLCByb3RhdGlvbik7CisJfQorCisJaWYgKG52 MTJfY29tbWl0X3JvdGF0ZWQoZGlzcGxheSwgcm90YXRpb24pKQorCQlhc3NlcnRfY29sbGVjdGVk X2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2NyYywgcm90YXRpb24pOworfQor CitzdGF0aWMgdm9pZCBudjEyX2Nocm9tYV9zdWJwaXhlbF9jbGlwKGRhdGFfdCAqZGF0YSwgZW51 bSBwaXBlIHBpcGUsIGlndF9vdXRwdXRfdCAqb3V0cHV0LCB1bnNpZ25lZCBmb3JtYXQpCit7CisJ ZHJtTW9kZU1vZGVJbmZvICptb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOworCWln dF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKwlpZ3RfcGlwZV90ICpwaXBl X29iaiA9ICZkaXNwbGF5LT5waXBlc1twaXBlXTsKKwlzdHJ1Y3QgaWd0X2ZiICpiZ19mYiA9ICZk YXRhLT5mYlswXTsKKwlzdHJ1Y3QgaWd0X2ZiICpiZ19jdXJzb3JfZmIgPSAmZGF0YS0+ZmJbMV07 CisJc3RydWN0IGlndF9mYiAqYmxhY2tfY3Vyc29yX2ZiID0gJmRhdGEtPmZiWzJdOworCXN0cnVj dCBpZ3RfZmIgKmNsaXBfZmIgPSAmZGF0YS0+ZmJbM107CisJaWd0X3BsYW5lX3QgKnByaW1hcnkg PSBpZ3RfcGlwZV9nZXRfcGxhbmVfdHlwZShwaXBlX29iaiwgRFJNX1BMQU5FX1RZUEVfUFJJTUFS WSk7CisJaWd0X3BsYW5lX3QgKmN1cnNvciA9IGlndF9waXBlX2dldF9wbGFuZV90eXBlKHBpcGVf b2JqLCBEUk1fUExBTkVfVFlQRV9DVVJTT1IpOworCWlndF9wbGFuZV90ICpwbGFuZTsKKwljYWly b190ICpjcjsKKworCXByZXBhcmVfY3J0YyhkYXRhLCBwaXBlLCBvdXRwdXQpOworCisJaWd0X2Ny ZWF0ZV9jb2xvcl9mYihkaXNwbGF5LT5kcm1fZmQsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlz cGxheSwKKwkJCSAgICBEUk1fRk9STUFUX1hSR0I4ODg4LCBMT0NBTF9JOTE1X0ZPUk1BVF9NT0Rf WF9USUxFRCwKKwkJCSAgICAuMCwgLjAsIDEuLCBiZ19mYik7CisKKwlpZ3RfY3JlYXRlX2NvbG9y X2ZiKGRpc3BsYXktPmRybV9mZCwgMjU2LCAyNTYsCisJCSAgICAgICAgICAgIERSTV9GT1JNQVRf QVJHQjg4ODgsIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCisJCQkgICAgLjAsIC4wLCAxLiwg YmdfY3Vyc29yX2ZiKTsKKworCWlndF9jcmVhdGVfY29sb3JfZmIoZGlzcGxheS0+ZHJtX2ZkLCAy NTYsIDI1NiwKKwkJICAgICAgICAgICAgRFJNX0ZPUk1BVF9BUkdCODg4OCwgTE9DQUxfRFJNX0ZP Uk1BVF9NT0RfTk9ORSwKKwkJCSAgICAuMCwgLjAsIC4wLCBibGFja19jdXJzb3JfZmIpOworCisJ aWd0X2NyZWF0ZV9mYihkaXNwbGF5LT5kcm1fZmQsIDI1NiwgMjU2LAorCQkgICAgICBmb3JtYXQs IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZX1RJTEVELCBjbGlwX2ZiKTsKKworCS8qIERyYXcgdGhl IEZCIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBjbGlwcGluZyB0aGUgY2hyb21hIHN1YnBpeGVsIHRl c3QuICovCisJY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChkaXNwbGF5LT5kcm1fZmQsIGNsaXBfZmIp OworCisJaWd0X3BhaW50X2NvbG9yKGNyLCAwLCAwLCBjbGlwX2ZiLT53aWR0aCwgY2xpcF9mYi0+ aGVpZ2h0LCAxLiwgMC4sIDAuKTsKKwlpZ3RfcGFpbnRfY29sb3IoY3IsIDIsIDIsIGNsaXBfZmIt PndpZHRoIC0gNCwgY2xpcF9mYi0+aGVpZ2h0IC0gNCwgMC4sIDEuLCAxLik7CisJaWd0X3BhaW50 X2NvbG9yKGNyLCA0LCA0LCBjbGlwX2ZiLT53aWR0aCAtIDgsIGNsaXBfZmItPmhlaWdodCAtIDgs IC43NSwgLjc1LCAxLik7CisKKwkvKiBXaGl0ZSBkb3RzIGluIHRoZSBjb3JuZXJzLiAqLworCWln dF9wYWludF9jb2xvcihjciwgMCwgMCwgNiwgNiwgMS4sIDEuLCAxLik7CisJaWd0X3BhaW50X2Nv bG9yKGNyLCBjbGlwX2ZiLT53aWR0aCAtIDYsIDAsIDYsIDYsIDEuLCAxLiwgMS4pOworCWlndF9w YWludF9jb2xvcihjciwgMCwgY2xpcF9mYi0+aGVpZ2h0IC0gNiwgNiwgNiwgMS4sIDEuLCAxLik7 CisJaWd0X3BhaW50X2NvbG9yKGNyLCBjbGlwX2ZiLT53aWR0aCAtIDYsIGNsaXBfZmItPmhlaWdo dCAtIDYsIDYsIDYsIDEuLCAxLiwgMS4pOworCisJaWd0X3B1dF9jYWlyb19jdHgoZGlzcGxheS0+ ZHJtX2ZkLCBjbGlwX2ZiLCBjcik7CisKKwlpZ3RfcGlwZV9jcmNfc3RhcnQoZGF0YS0+cGlwZV9j cmMpOworCisJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCBiZ19mYik7CisJZm9yX2VhY2hfcGxh bmVfb25fcGlwZShkaXNwbGF5LCBwaXBlLCBwbGFuZSkgeworCQlzdHJ1Y3QgaWd0X2ZiICpjdXJz b3JfZmIgPSBwbGFuZSA9PSBwcmltYXJ5ID8gYmxhY2tfY3Vyc29yX2ZiIDogYmdfY3Vyc29yX2Zi OworCQlpZ3RfY3JjX3QgcmVmX2NyYzsKKworCQlpZiAoIXBsYW5lX3N1cHBvcnRzX2Zvcm1hdChw bGFuZSwgZm9ybWF0KSB8fCBwbGFuZSA9PSBjdXJzb3IpCisJCQljb250aW51ZTsKKworCQludjEy X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX3dpdGhfY3Vyc29yKGRhdGEsIHBsYW5lLCBjbGlw X2ZiLCBjdXJzb3IsIGN1cnNvcl9mYiwgJnJlZl9jcmMsIDYzICsgY2xpcF9mYi0+d2lkdGgsIDY0 KTsKKwkJbnYxMl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV9yaWdodChkYXRhLCBJR1RfUk9U QVRJT05fMCwgcGxhbmUsIGNsaXBfZmIsICZyZWZfY3JjKTsKKwkJbnYxMl9jaHJvbWFfc3VicGl4 ZWxfY2xpcF9wbGFuZV9yaWdodChkYXRhLCBJR1RfUk9UQVRJT05fOTAsIHBsYW5lLCBjbGlwX2Zi LCAmcmVmX2NyYyk7CisJCW52MTJfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfcmlnaHQoZGF0 YSwgSUdUX1JPVEFUSU9OXzE4MCwgcGxhbmUsIGNsaXBfZmIsICZyZWZfY3JjKTsKKwkJbnYxMl9j aHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV9yaWdodChkYXRhLCBJR1RfUk9UQVRJT05fMjcwLCBw bGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMpOworCisJCW52MTJfY2hyb21hX3N1YnBpeGVsX2NsaXBf cGxhbmVfd2l0aF9jdXJzb3IoZGF0YSwgcGxhbmUsIGNsaXBfZmIsIGN1cnNvciwgY3Vyc29yX2Zi LCAmcmVmX2NyYywgNjQsIDYzICsgY2xpcF9mYi0+aGVpZ2h0KTsKKwkJbnYxMl9jaHJvbWFfc3Vi cGl4ZWxfY2xpcF9wbGFuZV9ib3R0b20oZGF0YSwgSUdUX1JPVEFUSU9OXzAsIHBsYW5lLCBjbGlw X2ZiLCAmcmVmX2NyYyk7CisJCW52MTJfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfYm90dG9t KGRhdGEsIElHVF9ST1RBVElPTl85MCwgcGxhbmUsIGNsaXBfZmIsICZyZWZfY3JjKTsKKwkJbnYx Ml9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV9ib3R0b20oZGF0YSwgSUdUX1JPVEFUSU9OXzE4 MCwgcGxhbmUsIGNsaXBfZmIsICZyZWZfY3JjKTsKKwkJbnYxMl9jaHJvbWFfc3VicGl4ZWxfY2xp cF9wbGFuZV9ib3R0b20oZGF0YSwgSUdUX1JPVEFUSU9OXzI3MCwgcGxhbmUsIGNsaXBfZmIsICZy ZWZfY3JjKTsKKworCQludjEyX2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX3dpdGhfY3Vyc29y KGRhdGEsIHBsYW5lLCBjbGlwX2ZiLCBjdXJzb3IsIGN1cnNvcl9mYiwgJnJlZl9jcmMsIDY1IC0g Y3Vyc29yX2ZiLT53aWR0aCwgNjQpOworCQludjEyX2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5l X2xlZnQoZGF0YSwgSUdUX1JPVEFUSU9OXzAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7CisJ CW52MTJfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfbGVmdChkYXRhLCBJR1RfUk9UQVRJT05f OTAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7CisJCW52MTJfY2hyb21hX3N1YnBpeGVsX2Ns aXBfcGxhbmVfbGVmdChkYXRhLCBJR1RfUk9UQVRJT05fMTgwLCBwbGFuZSwgY2xpcF9mYiwgJnJl Zl9jcmMpOworCQludjEyX2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX2xlZnQoZGF0YSwgSUdU X1JPVEFUSU9OXzI3MCwgcGxhbmUsIGNsaXBfZmIsICZyZWZfY3JjKTsKKworCQludjEyX2Nocm9t YV9zdWJwaXhlbF9jbGlwX3BsYW5lX3dpdGhfY3Vyc29yKGRhdGEsIHBsYW5lLCBjbGlwX2ZiLCBj dXJzb3IsIGN1cnNvcl9mYiwgJnJlZl9jcmMsIDY0LCA2NSAtIGN1cnNvcl9mYi0+aGVpZ2h0KTsK KwkJbnYxMl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV90b3AoZGF0YSwgSUdUX1JPVEFUSU9O XzAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7CisJCW52MTJfY2hyb21hX3N1YnBpeGVsX2Ns aXBfcGxhbmVfdG9wKGRhdGEsIElHVF9ST1RBVElPTl85MCwgcGxhbmUsIGNsaXBfZmIsICZyZWZf Y3JjKTsKKwkJbnYxMl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV90b3AoZGF0YSwgSUdUX1JP VEFUSU9OXzE4MCwgcGxhbmUsIGNsaXBfZmIsICZyZWZfY3JjKTsKKwkJbnYxMl9jaHJvbWFfc3Vi cGl4ZWxfY2xpcF9wbGFuZV90b3AoZGF0YSwgSUdUX1JPVEFUSU9OXzI3MCwgcGxhbmUsIGNsaXBf ZmIsICZyZWZfY3JjKTsKKworCQkvKiBSZXNldCB0byBkZWZhdWx0cyAqLworCQlpZ3RfcGxhbmVf c2V0X3Bvc2l0aW9uKHBsYW5lLCAwLCAwKTsKKwkJaWd0X3BsYW5lX3NldF9yb3RhdGlvbihwbGFu ZSwgSUdUX1JPVEFUSU9OXzApOworCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBwbGFuZSA9PSBw cmltYXJ5ID8gYmdfZmIgOiBOVUxMKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl90ZXN0c19m b3JfcGlwZShkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlKQoreworCWlndF9vdXRwdXRfdCAq b3V0cHV0OworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKworCWln dF9maXh0dXJlIHsKKwkJaWd0X2Rpc3BsYXlfcmVxdWlyZV9vdXRwdXRfb25fcGlwZShkaXNwbGF5 LCBwaXBlKTsKKwkJaWd0X3JlcXVpcmUocGlwZV9zdXBwb3J0c19mb3JtYXQoZGlzcGxheSwgcGlw ZSwgRFJNX0ZPUk1BVF9OVjEyKSk7CisJfQorCisJaWd0X3N1YnRlc3RfZigicGlwZS0lcy1udjEy LXJnYi1zd2l0Y2giLCBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSkKKwkJZm9yX2VhY2hfdmFsaWRf b3V0cHV0X29uX3BpcGUoZGlzcGxheSwgcGlwZSwgb3V0cHV0KQorCQkJbnYxMl9yZ2Jfc3dpdGNo KGRhdGEsIHBpcGUsIG91dHB1dCwgZmFsc2UsIERSTV9GT1JNQVRfTlYxMik7CisKKwlpZ3Rfc3Vi dGVzdF9mKCJwaXBlLSVzLW52MTItcmdiLXNjYWxlZC1zd2l0Y2giLCBrbXN0ZXN0X3BpcGVfbmFt ZShwaXBlKSkKKwkJZm9yX2VhY2hfdmFsaWRfb3V0cHV0X29uX3BpcGUoZGlzcGxheSwgcGlwZSwg b3V0cHV0KQorCQkJbnYxMl9yZ2Jfc3dpdGNoKGRhdGEsIHBpcGUsIG91dHB1dCwgdHJ1ZSwgRFJN X0ZPUk1BVF9OVjEyKTsKKworCWlndF9zdWJ0ZXN0X2YoInBpcGUtJXMtbnYxMi12YWxpZC13aWR0 aCIsIGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpKQorCQlmb3JfZWFjaF92YWxpZF9vdXRwdXRfb25f cGlwZShkaXNwbGF5LCBwaXBlLCBvdXRwdXQpCisJCQludjEyX3ZhbGlkX3dpZHRoKGRhdGEsIHBp cGUsIG91dHB1dCwgRFJNX0ZPUk1BVF9OVjEyKTsKKworCWlndF9zdWJ0ZXN0X2YoInBpcGUtJXMt bnYxMi1jcm9wLXNjYWxlLWJ1ZyIsIGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpKQorCQlmb3JfZWFj aF92YWxpZF9vdXRwdXRfb25fcGlwZShkaXNwbGF5LCBwaXBlLCBvdXRwdXQpCisJCQludjEyX2Ny b3Bfc2NhbGVfYnVnKGRhdGEsIHBpcGUsIG91dHB1dCwgRFJNX0ZPUk1BVF9OVjEyKTsKKworCWln dF9zdWJ0ZXN0X2YoInBpcGUtJXMtbnYxMi1jaHJvbWEtc3VicGl4ZWwtY2xpcCIsIGttc3Rlc3Rf cGlwZV9uYW1lKHBpcGUpKQorCQlmb3JfZWFjaF92YWxpZF9vdXRwdXRfb25fcGlwZShkaXNwbGF5 LCBwaXBlLCBvdXRwdXQpCisJCQludjEyX2Nocm9tYV9zdWJwaXhlbF9jbGlwKGRhdGEsIHBpcGUs IG91dHB1dCwgRFJNX0ZPUk1BVF9OVjEyKTsKK30KKworaWd0X21haW4KK3sKKwlkYXRhX3QgZGF0 YSA9IHt9OworCWVudW0gcGlwZSBwaXBlOworCisJaWd0X3NraXBfb25fc2ltdWxhdGlvbigpOwor CisJaWd0X2ZpeHR1cmUgeworCQlkYXRhLmRpc3BsYXkuZHJtX2ZkID0gZHJtX29wZW5fZHJpdmVy X21hc3RlcihEUklWRVJfQU5ZKTsKKworCQlrbXN0ZXN0X3NldF92dF9ncmFwaGljc19tb2RlKCk7 CisJCWlndF9kaXNwbGF5X2luaXQoJmRhdGEuZGlzcGxheSwgZGF0YS5kaXNwbGF5LmRybV9mZCk7 CisJCWlndF9yZXF1aXJlKGRhdGEuZGlzcGxheS5pc19hdG9taWMpOworCQlpZ3RfcmVxdWlyZV9w aXBlX2NyYyhkYXRhLmRpc3BsYXkuZHJtX2ZkKTsKKwl9CisKKwlmb3JfZWFjaF9waXBlX3N0YXRp YyhwaXBlKQorCQlpZ3Rfc3VidGVzdF9ncm91cAorCQkJcnVuX3Rlc3RzX2Zvcl9waXBlKCZkYXRh LCBwaXBlKTsKKworCWlndF9maXh0dXJlIHsKKwkJaWd0X2Rpc3BsYXlfZmluaSgmZGF0YS5kaXNw bGF5KTsKKwkJY2xvc2UoZGF0YS5kaXNwbGF5LmRybV9mZCk7CisJfQorfQpkaWZmIC0tZ2l0IGEv dGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0cy9tZXNvbi5idWlsZAppbmRleCAzMmMyMTU2YzZmNGQu LmU1ZmFiMDZiYzJmMiAxMDA2NDQKLS0tIGEvdGVzdHMvbWVzb24uYnVpbGQKKysrIGIvdGVzdHMv bWVzb24uYnVpbGQKQEAgLTE2Niw2ICsxNjYsNyBAQCB0ZXN0X3Byb2dzID0gWwogCSdrbXNfaW52 YWxpZF9kb3RjbG9jaycsCiAJJ2ttc19sZWdhY3lfY29sb3JrZXknLAogCSdrbXNfbW1hcF93cml0 ZV9jcmMnLAorCSdrbXNfbnYxMicsCiAJJ2ttc19wYW5lbF9maXR0aW5nJywKIAkna21zX3BpcGVf Yl9jX2l2YicsCiAJJ2ttc19waXBlX2NyY19iYXNpYycsCi0tIAoyLjE4LjAKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0 CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo=