From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville Syrjala Subject: [PATCH v3 6/8] drm/i915: Overcome display engine stride limits via GTT remapping Date: Tue, 25 Sep 2018 22:37:12 +0300 Message-ID: <20180925193714.25280-7-ville.syrjala@linux.intel.com> References: <20180925193714.25280-1-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3C75F89956 for ; Tue, 25 Sep 2018 19:37:34 +0000 (UTC) In-Reply-To: <20180925193714.25280-1-ville.syrjala@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 List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KClRo ZSBkaXNwbGF5IGVuZ2luZSBzdHJpZGUgbGltaXRzIGFyZSBnZXR0aW5nIGluIG91ciB3YXkuIE9u IFNLTCsKd2UgYXJlIGxpbWl0ZWQgdG8gOGsgcGl4ZWxzLCB3aGljaCBpcyBlYXNpbHkgZXhjZWVk ZWQgd2l0aCB0aHJlZQo0ayBkaXNwbGF5cy4gVG8gb3ZlcmNvbWUgdGhpcyBsaW1pdGF0aW9uIHdl IGNhbiByZW1hcCB0aGUgcGFnZXMKaW4gdGhlIEdUVCB0byBwcm92aWRlIHRoZSBkaXNwbGF5IGVu Z2luZSB3aXRoIGEgdmlldyBvZiBtZW1vcnkKd2l0aCBhIHNtYWxsZXIgc3RyaWRlLgoKVGhlIGNv ZGUgaXMgbW9zdGx5IGFscmVhZHkgdGhlcmUgYXMgV2UgYWxyZWFkeSBwbGF5IHRyaWNrcyB3aXRo CnRoZSBwbGFuZSBzdXJmYWNlIGFkZHJlc3MgYW5kIHgveSBvZmZzZXRzLgoKQSBmZXcgY2F2ZWF0 cyBhcHBseToKKiBsaW5lYXIgYnVmZmVycyBuZWVkIHRoZSBmYiBzdHJpZGUgdG8gYmUgcGFnZSBh bGlnbmVkLCBhcwogIG90aGVyd2lzZSB0aGUgcmVtYXBwZWQgbGluZXMgd291bGRuJ3Qgc3RhcnQg YXQgdGhlIHNhbWUKICBzcG90CiogY29tcHJlc3NlZCBidWZmZXJzIGNhbid0IGJlIHJlbWFwcGVk IGR1ZSB0byB0aGUgbmV3CiAgY2NzIGhhc2ggbW9kZSBjYXVzaW5nIHRoZSB2aXJ0dWFsIGFkZHJl c3Mgb2YgdGhlIHBhZ2VzCiAgdG8gYWZmZWN0IHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgY29t cHJlc3NlZCBkYXRhLiBJSVJDCiAgdGhlIG9sZCBoYXNoIHdhcyBsaW1pdGVkIHRvIHRoZSBsb3cg MTIgYml0cyBzbyBpZiB3ZSB3ZXJlCiAgdXNpbmcgdGhhdCBtb2RlIHdlIGNvdWxkIHJlbWFwLiBB cyBpdCBzdGFuZHMgd2UganVzdCByZWZ1c2UKICB0byByZW1hcHAgd2l0aCBjb21wcmVzc2VkIGZi cy4KKiBubyByZW1hcHBpbmcgZ2VuMi8zIGFzIHdlJ2QgbmVlZCBhIGZlbmNlIGZvciB0aGUgcmVt YXBwZWQKICB2bWEsIHdoaWNoIHdlIGN1cnJlbnRseSBkb24ndCBoYXZlLiBOZWVkIHRvIGRlYWwg d2l0aCB0aGUKICBmZW5jZSBQT1QgcmVxdWlyZW1lbnRzLCBhbmQgZG8gc29tZXRoaW5nIGFib3V0 IHRoZSBnZW4yCiAgZ3R0IHBhZ2Ugc2l6ZSB2cyB0aWxlIHNpemUgZGlmZmVyZW5jZQoKdjI6IFJl YmFzZSBkdWUgdG8gaXNfY2NzX21vZGlmaWVyKCkKICAgIEZpeCB1cCB0aGUgc2tsKyBzdHJpZGVf bXVsdCBtZXNzCiAgICBtZW1zZXQoKSB0aGUgZ3R0X3ZpZXcgYmVjYXVzZSBvdGhlcndpc2Ugd2Ug Y291bGQgbGVhdmUKICAgIGp1bmsgaW4gcGxhbmVbMV0gd2hlbiBnb2luZyBmcm9tIDIgcGxhbmUg dG8gMSBwbGFuZSBmb3JtYXQKdjM6IGludGVsX2NoZWNrX3BsYW5lX3N0cmlkZSgpIHdhcyBzcGxp dCBvdXQKClNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51 eC5pbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIHwg MzQ3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwg MjcwIGluc2VydGlvbnMoKyksIDc3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rpc3BsYXkuYwppbmRleCA0ZjlmNTE5Y2NkNDYuLmVjYTg3MzY1M2ZlYSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAtMTkyNCw3ICsxOTI0LDcgQEAgaW50ZWxfdGlsZV93 aWR0aF9ieXRlcyhjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNvbG9yX3Bs YW5lKQogCiAJc3dpdGNoIChmYi0+bW9kaWZpZXIpIHsKIAljYXNlIERSTV9GT1JNQVRfTU9EX0xJ TkVBUjoKLQkJcmV0dXJuIGNwcDsKKwkJcmV0dXJuIGludGVsX3RpbGVfc2l6ZShkZXZfcHJpdik7 CiAJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDoKIAkJaWYgKElTX0dFTjIoZGV2X3ByaXYp KQogCQkJcmV0dXJuIDEyODsKQEAgLTE5NjcsMTEgKzE5NjcsOCBAQCBpbnRlbF90aWxlX3dpZHRo X2J5dGVzKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUp CiBzdGF0aWMgdW5zaWduZWQgaW50CiBpbnRlbF90aWxlX2hlaWdodChjb25zdCBzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpmYiwgaW50IGNvbG9yX3BsYW5lKQogewotCWlmIChmYi0+bW9kaWZpZXIg PT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSKQotCQlyZXR1cm4gMTsKLQllbHNlCi0JCXJldHVybiBp bnRlbF90aWxlX3NpemUodG9faTkxNShmYi0+ZGV2KSkgLwotCQkJaW50ZWxfdGlsZV93aWR0aF9i eXRlcyhmYiwgY29sb3JfcGxhbmUpOworCXJldHVybiBpbnRlbF90aWxlX3NpemUodG9faTkxNShm Yi0+ZGV2KSkgLworCQlpbnRlbF90aWxlX3dpZHRoX2J5dGVzKGZiLCBjb2xvcl9wbGFuZSk7CiB9 CiAKIC8qIFJldHVybiB0aGUgdGlsZSBkaW1lbnNpb25zIGluIHBpeGVsIHVuaXRzICovCkBAIC0y MjI2LDE2ICsyMjIzLDggQEAgdm9pZCBpbnRlbF9hZGRfZmJfb2Zmc2V0cyhpbnQgKngsIGludCAq eSwKIAkJCSAgaW50IGNvbG9yX3BsYW5lKQogCiB7Ci0JY29uc3Qgc3RydWN0IGludGVsX2ZyYW1l YnVmZmVyICppbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKHN0YXRlLT5iYXNlLmZiKTsK LQl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBzdGF0ZS0+YmFzZS5yb3RhdGlvbjsKLQotCWlmIChk cm1fcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSkgewotCQkqeCArPSBpbnRlbF9mYi0+cm90 YXRlZFtjb2xvcl9wbGFuZV0ueDsKLQkJKnkgKz0gaW50ZWxfZmItPnJvdGF0ZWRbY29sb3JfcGxh bmVdLnk7Ci0JfSBlbHNlIHsKLQkJKnggKz0gaW50ZWxfZmItPm5vcm1hbFtjb2xvcl9wbGFuZV0u eDsKLQkJKnkgKz0gaW50ZWxfZmItPm5vcm1hbFtjb2xvcl9wbGFuZV0ueTsKLQl9CisJKnggKz0g c3RhdGUtPmNvbG9yX3BsYW5lW2NvbG9yX3BsYW5lXS54OworCSp5ICs9IHN0YXRlLT5jb2xvcl9w bGFuZVtjb2xvcl9wbGFuZV0ueTsKIH0KIAogc3RhdGljIHUzMiBpbnRlbF9hZGp1c3RfdGlsZV9v ZmZzZXQoaW50ICp4LCBpbnQgKnksCkBAIC0yNTExLDYgKzI1MDAsODIgQEAgYm9vbCBpc19jY3Nf bW9kaWZpZXIodTY0IG1vZGlmaWVyKQogCSAgICAgICBtb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9N T0RfWWZfVElMRURfQ0NTOwogfQogCitzdGF0aWMKK3UzMiBpbnRlbF9wbGFuZV9mYl9tYXhfc3Ry aWRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgICAgIHUzMiBwaXhl bF9mb3JtYXQsIHU2NCBtb2RpZmllcikKK3sKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsKKwlz dHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lOworCisJLyoKKwkgKiBXZSBhc3N1bWUgdGhlIHByaW1h cnkgcGxhbmUgZm9yIHBpcGUgQSBoYXMKKwkgKiB0aGUgaGlnaGVzdCBzdHJpZGUgbGltaXRzIG9m IHRoZW0gYWxsLgorCSAqLworCWNydGMgPSBpbnRlbF9nZXRfY3J0Y19mb3JfcGlwZShkZXZfcHJp diwgUElQRV9BKTsKKwlwbGFuZSA9IHRvX2ludGVsX3BsYW5lKGNydGMtPmJhc2UucHJpbWFyeSk7 CisKKwlyZXR1cm4gcGxhbmUtPm1heF9zdHJpZGUocGxhbmUsIHBpeGVsX2Zvcm1hdCwgbW9kaWZp ZXIsCisJCQkJIERSTV9NT0RFX1JPVEFURV8wKTsKK30KKworc3RhdGljCit1MzIgaW50ZWxfZmJf bWF4X3N0cmlkZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQl1MzIgcGl4 ZWxfZm9ybWF0LCB1NjQgbW9kaWZpZXIpCit7CisJcmV0dXJuIGludGVsX3BsYW5lX2ZiX21heF9z dHJpZGUoZGV2X3ByaXYsIHBpeGVsX2Zvcm1hdCwgbW9kaWZpZXIpOworfQorCitzdGF0aWMgdTMy CitpbnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiLCBpbnQgY29sb3JfcGxhbmUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShmYi0+ZGV2KTsKKworCWlmIChmYi0+bW9kaWZpZXIgPT0gRFJNX0ZPUk1B VF9NT0RfTElORUFSKSB7CisJCXUzMiBtYXhfc3RyaWRlID0gaW50ZWxfcGxhbmVfZmJfbWF4X3N0 cmlkZShkZXZfcHJpdiwKKwkJCQkJCQkgICBmYi0+Zm9ybWF0LT5mb3JtYXQsCisJCQkJCQkJICAg ZmItPm1vZGlmaWVyKTsKKworCQkvKgorCQkgKiBUbyBtYWtlIHJlbWFwcGluZyB3aXRoIGxpbmVh ciBnZW5lcmFsbHkgZmVhc2libGUKKwkJICogd2UgbmVlZCB0aGUgc3RyaWRlIHRvIGJlIHBhZ2Ug YWxpZ25lZC4KKwkJICovCisJCWlmIChmYi0+cGl0Y2hlc1tjb2xvcl9wbGFuZV0gPiBtYXhfc3Ry aWRlKQorCQkJcmV0dXJuIGludGVsX3RpbGVfc2l6ZShkZXZfcHJpdik7CisJCWVsc2UKKwkJCXJl dHVybiA2NDsKKwl9IGVsc2UgeworCQlyZXR1cm4gaW50ZWxfdGlsZV93aWR0aF9ieXRlcyhmYiwg Y29sb3JfcGxhbmUpOworCX0KK30KKworc3RhdGljIGJvb2wgaW50ZWxfcGxhbmVfbmVlZHNfcmVt YXAoY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1 Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPmJhc2Uu cGxhbmUpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxh bmUtPmJhc2UuZGV2KTsKKwljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5l X3N0YXRlLT5iYXNlLmZiOworCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5i YXNlLnJvdGF0aW9uOworCXUzMiBzdHJpZGUsIG1heF9zdHJpZGU7CisKKwkvKiBXZSBkb24ndCB3 YW50IHRvIGRlYWwgd2l0aCByZW1hcHBpbmcgd2l0aCBjdXJzb3JzICovCisJaWYgKHBsYW5lLT5p ZCA9PSBQTEFORV9DVVJTT1IpCisJCXJldHVybiBmYWxzZTsKKworCS8qIE5vIGZlbmNlIGZvciB0 aGUgcmVtYXBwZWQgdm1hICovCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA0KQorCQlyZXR1 cm4gZmFsc2U7CisKKwkvKiBOZXcgQ0NTIGhhc2ggbW9kZSBtYWtlcyByZW1hcHBpbmcgaW1wb3Nz aWJsZSAqLworCWlmIChpc19jY3NfbW9kaWZpZXIoZmItPm1vZGlmaWVyKSkKKwkJcmV0dXJuIGZh bHNlOworCisJLyogRklYTUUgb3RoZXIgY29sb3IgcGxhbmVzPyAqLworCXN0cmlkZSA9IGludGVs X2ZiX3BpdGNoKGZiLCAwLCByb3RhdGlvbik7CisJbWF4X3N0cmlkZSA9IHBsYW5lLT5tYXhfc3Ry aWRlKHBsYW5lLCBmYi0+Zm9ybWF0LT5mb3JtYXQsCisJCQkJICAgICAgIGZiLT5tb2RpZmllciwg cm90YXRpb24pOworCisJcmV0dXJuIHN0cmlkZSA+IG1heF9zdHJpZGU7Cit9CisKIHN0YXRpYyBp bnQKIGludGVsX2ZpbGxfZmJfaW5mbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs CiAJCSAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQpAQCAtMjY3Niw2ICsyNzQxLDE4MiBA QCBpbnRlbF9maWxsX2ZiX2luZm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAog CXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZAoraW50ZWxfcGxhbmVfcmVtYXBfZ3R0KHN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0KKwkJdG9faTkxNShwbGFuZV9zdGF0ZS0+YmFzZS5wbGFuZS0+ZGV2 KTsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOwor CXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZl cihmYik7CisJc3RydWN0IGludGVsX3JvdGF0aW9uX2luZm8gKmluZm8gPSAmcGxhbmVfc3RhdGUt PnZpZXcucm90YXRlZDsKKwl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+YmFz ZS5yb3RhdGlvbjsKKwlpbnQgaSwgbnVtX3BsYW5lcyA9IGZiLT5mb3JtYXQtPm51bV9wbGFuZXM7 CisJdW5zaWduZWQgaW50IHRpbGVfc2l6ZSA9IGludGVsX3RpbGVfc2l6ZShkZXZfcHJpdik7CisJ dW5zaWduZWQgaW50IHRpbGVfd2lkdGgsIHRpbGVfaGVpZ2h0OworCXVuc2lnbmVkIGludCBhbGln bmVkX3gsIGFsaWduZWRfeTsKKwl1bnNpZ25lZCBpbnQgYWxpZ25lZF93LCBhbGlnbmVkX2g7CisJ dW5zaWduZWQgaW50IHNyY194LCBzcmNfeTsKKwl1bnNpZ25lZCBpbnQgc3JjX3csIHNyY19oOwor CXVuc2lnbmVkIGludCB4LCB5OworCXUzMiBndHRfb2Zmc2V0ID0gMDsKKworCW1lbXNldCgmcGxh bmVfc3RhdGUtPnZpZXcsIDAsIHNpemVvZihwbGFuZV9zdGF0ZS0+dmlldykpOworCXBsYW5lX3N0 YXRlLT52aWV3LnR5cGUgPSBkcm1fcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSA/CisJCUk5 MTVfR0dUVF9WSUVXX1JPVEFURUQgOiBJOTE1X0dHVFRfVklFV19SRU1BUFBFRDsKKworCXNyY194 ID0gcGxhbmVfc3RhdGUtPmJhc2Uuc3JjLngxID4+IDE2OworCXNyY195ID0gcGxhbmVfc3RhdGUt PmJhc2Uuc3JjLnkxID4+IDE2OworCXNyY193ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRl LT5iYXNlLnNyYykgPj4gMTY7CisJc3JjX2ggPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRl LT5iYXNlLnNyYykgPj4gMTY7CisKKwlXQVJOX09OKGlzX2Njc19tb2RpZmllcihmYi0+bW9kaWZp ZXIpKTsKKworCS8qIEFsaWduIG91ciB2aWV3cG9ydCBzdGFydCB0byB0aWxlIGJvdW5kYXJ5ICov CisJaW50ZWxfdGlsZV9kaW1zKGZiLCAwLCAmdGlsZV93aWR0aCwgJnRpbGVfaGVpZ2h0KTsKKwor CXggPSBzcmNfeCAmICh0aWxlX3dpZHRoIC0gMSk7CisJeSA9IHNyY195ICYgKHRpbGVfaGVpZ2h0 IC0gMSk7CisKKwlhbGlnbmVkX3ggPSBzcmNfeCAtIHg7CisJYWxpZ25lZF95ID0gc3JjX3kgLSB5 OworCisJYWxpZ25lZF93ID0geCArIHNyY193OworCWFsaWduZWRfaCA9IHkgKyBzcmNfaDsKKwor CS8qIE1ha2Ugc3JjIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSBhbGlnbmVkIHZpZXdwb3J0 ICovCisJZHJtX3JlY3RfdHJhbnNsYXRlKCZwbGFuZV9zdGF0ZS0+YmFzZS5zcmMsCisJCQkgICAt KGFsaWduZWRfeCA8PCAxNiksIC0oYWxpZ25lZF95IDw8IDE2KSk7CisKKwkvKiBSb3RhdGUgc3Jj IGNvb3JkaW5hdGVzIHRvIG1hdGNoIHJvdGF0ZWQgR1RUIHZpZXcgKi8KKwlpZiAoZHJtX3JvdGF0 aW9uXzkwX29yXzI3MChyb3RhdGlvbikpCisJCWRybV9yZWN0X3JvdGF0ZSgmcGxhbmVfc3RhdGUt PmJhc2Uuc3JjLAorCQkJCWFsaWduZWRfdyA8PCAxNiwgYWxpZ25lZF9oIDw8IDE2LAorCQkJCURS TV9NT0RFX1JPVEFURV8yNzApOworCisJZm9yIChpID0gMDsgaSA8IG51bV9wbGFuZXM7IGkrKykg eworCQl1bnNpZ25lZCBpbnQgaHN1YiA9IGkgPyBmYi0+Zm9ybWF0LT5oc3ViIDogMTsKKwkJdW5z aWduZWQgaW50IHZzdWIgPSBpID8gZmItPmZvcm1hdC0+dnN1YiA6IDE7CisJCXVuc2lnbmVkIGlu dCBjcHAgPSBmYi0+Zm9ybWF0LT5jcHBbaV07CisJCXVuc2lnbmVkIGludCB3aWR0aCwgaGVpZ2h0 OworCQl1bnNpZ25lZCBpbnQgcGl0Y2hfdGlsZXM7CisJCXVuc2lnbmVkIGludCB4LCB5OworCQl1 MzIgb2Zmc2V0OworCisJCWludGVsX3RpbGVfZGltcyhmYiwgaSwgJnRpbGVfd2lkdGgsICZ0aWxl X2hlaWdodCk7CisKKwkJeCA9IGFsaWduZWRfeCAvIGhzdWI7CisJCXkgPSBhbGlnbmVkX3kgLyB2 c3ViOworCQl3aWR0aCA9IGFsaWduZWRfdyAvIGhzdWI7CisJCWhlaWdodCA9IGFsaWduZWRfaCAv IHZzdWI7CisKKwkJLyoKKwkJICogRmlyc3QgcGl4ZWwgb2YgdGhlIGFsaWduZWQgc3JjIHZpZXdw b3J0CisJCSAqIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBub3JtYWwgZ3R0IG1hcHBpbmcuCisJCSAq LworCQl4ICs9IGludGVsX2ZiLT5ub3JtYWxbaV0ueDsKKwkJeSArPSBpbnRlbF9mYi0+bm9ybWFs W2ldLnk7CisKKwkJb2Zmc2V0ID0gaW50ZWxfY29tcHV0ZV9hbGlnbmVkX29mZnNldChkZXZfcHJp diwgJngsICZ5LAorCQkJCQkJICAgICAgZmIsIGksIGZiLT5waXRjaGVzW2ldLAorCQkJCQkJICAg ICAgRFJNX01PREVfUk9UQVRFXzAsIHRpbGVfc2l6ZSk7CisJCW9mZnNldCAvPSB0aWxlX3NpemU7 CisKKwkJaW5mby0+cGxhbmVbaV0ub2Zmc2V0ID0gb2Zmc2V0OworCQlpbmZvLT5wbGFuZVtpXS5z dHJpZGUgPSBESVZfUk9VTkRfVVAoZmItPnBpdGNoZXNbaV0sCisJCQkJCQkgICAgIHRpbGVfd2lk dGggKiBjcHApOworCQlpbmZvLT5wbGFuZVtpXS53aWR0aCA9IERJVl9ST1VORF9VUCh4ICsgd2lk dGgsIHRpbGVfd2lkdGgpOworCQlpbmZvLT5wbGFuZVtpXS5oZWlnaHQgPSBESVZfUk9VTkRfVVAo eSArIGhlaWdodCwgdGlsZV9oZWlnaHQpOworCisJCWlmIChkcm1fcm90YXRpb25fOTBfb3JfMjcw KHJvdGF0aW9uKSkgeworCQkJc3RydWN0IGRybV9yZWN0IHI7CisKKwkJCS8qIHJvdGF0ZSB0aGUg eC95IG9mZnNldHMgdG8gbWF0Y2ggdGhlIEdUVCB2aWV3ICovCisJCQlyLngxID0geDsKKwkJCXIu eTEgPSB5OworCQkJci54MiA9IHggKyB3aWR0aDsKKwkJCXIueTIgPSB5ICsgaGVpZ2h0OworCQkJ ZHJtX3JlY3Rfcm90YXRlKCZyLAorCQkJCQlpbmZvLT5wbGFuZVtpXS53aWR0aCAqIHRpbGVfd2lk dGgsCisJCQkJCWluZm8tPnBsYW5lW2ldLmhlaWdodCAqIHRpbGVfaGVpZ2h0LAorCQkJCQlEUk1f TU9ERV9ST1RBVEVfMjcwKTsKKwkJCXggPSByLngxOworCQkJeSA9IHIueTE7CisKKwkJCXBpdGNo X3RpbGVzID0gaW5mby0+cGxhbmVbaV0uaGVpZ2h0OworCQkJcGxhbmVfc3RhdGUtPmNvbG9yX3Bs YW5lW2ldLnN0cmlkZSA9IHBpdGNoX3RpbGVzICogdGlsZV9oZWlnaHQ7CisKKwkJCS8qIHJvdGF0 ZSB0aGUgdGlsZSBkaW1lbnNpb25zIHRvIG1hdGNoIHRoZSBHVFQgdmlldyAqLworCQkJc3dhcCh0 aWxlX3dpZHRoLCB0aWxlX2hlaWdodCk7CisJCX0gZWxzZSB7CisJCQlwaXRjaF90aWxlcyA9IGlu Zm8tPnBsYW5lW2ldLndpZHRoOworCQkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2ldLnN0cmlk ZSA9IHBpdGNoX3RpbGVzICogdGlsZV93aWR0aCAqIGNwcDsKKwkJfQorCisJCS8qCisJCSAqIFdl IG9ubHkga2VlcCB0aGUgeC95IG9mZnNldHMsIHNvIHB1c2ggYWxsIG9mIHRoZQorCQkgKiBndHQg b2Zmc2V0IGludG8gdGhlIHgveSBvZmZzZXRzLgorCQkgKi8KKwkJaW50ZWxfYWRqdXN0X3RpbGVf b2Zmc2V0KCZ4LCAmeSwKKwkJCQkJIHRpbGVfd2lkdGgsIHRpbGVfaGVpZ2h0LAorCQkJCQkgdGls ZV9zaXplLCBwaXRjaF90aWxlcywKKwkJCQkJIGd0dF9vZmZzZXQgKiB0aWxlX3NpemUsIDApOwor CisJCWd0dF9vZmZzZXQgKz0gaW5mby0+cGxhbmVbaV0ud2lkdGggKiBpbmZvLT5wbGFuZVtpXS5o ZWlnaHQ7CisKKwkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lW2ldLm9mZnNldCA9IDA7CisJCXBs YW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtpXS54ID0geDsKKwkJcGxhbmVfc3RhdGUtPmNvbG9yX3Bs YW5lW2ldLnkgPSB5OworCX0KK30KKworc3RhdGljIGludAoraW50ZWxfcGxhbmVfY29tcHV0ZV9n dHQoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwljb25zdCBzdHJ1 Y3QgaW50ZWxfZnJhbWVidWZmZXIgKmZiID0KKwkJdG9faW50ZWxfZnJhbWVidWZmZXIocGxhbmVf c3RhdGUtPmJhc2UuZmIpOworCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5i YXNlLnJvdGF0aW9uOworCWludCBpLCBudW1fcGxhbmVzID0gZmItPmJhc2UuZm9ybWF0LT5udW1f cGxhbmVzOworCWludCByZXQ7CisKKwlpZiAoaW50ZWxfcGxhbmVfbmVlZHNfcmVtYXAocGxhbmVf c3RhdGUpKSB7CisJCWludGVsX3BsYW5lX3JlbWFwX2d0dChwbGFuZV9zdGF0ZSk7CisKKwkJLyog UmVtYXBwaW5nIHNob3VsZCB0YWtlIGNhcmUgb2YgdGhpcyBhbHdheXMgKi8KKwkJcmV0ID0gaW50 ZWxfcGxhbmVfY2hlY2tfc3RyaWRlKHBsYW5lX3N0YXRlKTsKKwkJaWYgKFdBUk5fT04ocmV0KSkK KwkJCXJldHVybiByZXQ7CisKKwkJcmV0dXJuIDA7CisJfQorCisJaW50ZWxfZmlsbF9mYl9nZ3R0 X3ZpZXcoJnBsYW5lX3N0YXRlLT52aWV3LCAmZmItPmJhc2UsIHJvdGF0aW9uKTsKKworCWZvciAo aSA9IDA7IGkgPCBudW1fcGxhbmVzOyBpKyspIHsKKwkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5l W2ldLnN0cmlkZSA9IGludGVsX2ZiX3BpdGNoKCZmYi0+YmFzZSwgaSwgcm90YXRpb24pOworCQlw bGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbaV0ub2Zmc2V0ID0gMDsKKworCQlpZiAoZHJtX3JvdGF0 aW9uXzkwX29yXzI3MChyb3RhdGlvbikpIHsKKwkJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtp XS54ID0gZmItPnJvdGF0ZWRbaV0ueDsKKwkJCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVtpXS55 ID0gZmItPnJvdGF0ZWRbaV0ueTsKKwkJfSBlbHNlIHsKKwkJCXBsYW5lX3N0YXRlLT5jb2xvcl9w bGFuZVtpXS54ID0gZmItPm5vcm1hbFtpXS54OworCQkJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5l W2ldLnkgPSBmYi0+bm9ybWFsW2ldLnk7CisJCX0KKwl9CisKKwkvKiBSb3RhdGUgc3JjIGNvb3Jk aW5hdGVzIHRvIG1hdGNoIHJvdGF0ZWQgR1RUIHZpZXcgKi8KKwlpZiAoZHJtX3JvdGF0aW9uXzkw X29yXzI3MChyb3RhdGlvbikpCisJCWRybV9yZWN0X3JvdGF0ZSgmcGxhbmVfc3RhdGUtPmJhc2Uu c3JjLAorCQkJCWZiLT5iYXNlLndpZHRoIDw8IDE2LCBmYi0+YmFzZS5oZWlnaHQgPDwgMTYsCisJ CQkJRFJNX01PREVfUk9UQVRFXzI3MCk7CisKKwlyZXQgPSBpbnRlbF9wbGFuZV9jaGVja19zdHJp ZGUocGxhbmVfc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsK K30KKwogc3RhdGljIGludCBpOXh4X2Zvcm1hdF90b19mb3VyY2MoaW50IGZvcm1hdCkKIHsKIAlz d2l0Y2ggKGZvcm1hdCkgewpAQCAtMzE3MSwyNiArMzQxMiwxMiBAQCBzdGF0aWMgaW50IHNrbF9j aGVja19jY3NfYXV4X3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZSkKIGludCBza2xfY2hlY2tfcGxhbmVfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlKQogewogCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxh bmVfc3RhdGUtPmJhc2UuZmI7Ci0JdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUt PmJhc2Uucm90YXRpb247CiAJaW50IHJldDsKIAotCWludGVsX2ZpbGxfZmJfZ2d0dF92aWV3KCZw bGFuZV9zdGF0ZS0+dmlldywgZmIsIHJvdGF0aW9uKTsKLQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxh bmVbMF0uc3RyaWRlID0gaW50ZWxfZmJfcGl0Y2goZmIsIDAsIHJvdGF0aW9uKTsKLQlwbGFuZV9z dGF0ZS0+Y29sb3JfcGxhbmVbMV0uc3RyaWRlID0gaW50ZWxfZmJfcGl0Y2goZmIsIDEsIHJvdGF0 aW9uKTsKLQotCXJldCA9IGludGVsX3BsYW5lX2NoZWNrX3N0cmlkZShwbGFuZV9zdGF0ZSk7CisJ cmV0ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9ndHQocGxhbmVfc3RhdGUpOwogCWlmIChyZXQpCiAJ CXJldHVybiByZXQ7CiAKLQlpZiAoIXBsYW5lX3N0YXRlLT5iYXNlLnZpc2libGUpCi0JCXJldHVy biAwOwotCi0JLyogUm90YXRlIHNyYyBjb29yZGluYXRlcyB0byBtYXRjaCByb3RhdGVkIEdUVCB2 aWV3ICovCi0JaWYgKGRybV9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRpb24pKQotCQlkcm1fcmVj dF9yb3RhdGUoJnBsYW5lX3N0YXRlLT5iYXNlLnNyYywKLQkJCQlmYi0+d2lkdGggPDwgMTYsIGZi LT5oZWlnaHQgPDwgMTYsCi0JCQkJRFJNX01PREVfUk9UQVRFXzI3MCk7Ci0KIAkvKgogCSAqIEhh bmRsZSB0aGUgQVVYIHN1cmZhY2UgZmlyc3Qgc2luY2UKIAkgKiB0aGUgbWFpbiBzdXJmYWNlIHNl dHVwIGRlcGVuZHMgb24gaXQuCkBAIC0zMzEyLDIwICszNTM5LDE3IEBAIGludCBpOXh4X2NoZWNr X3BsYW5lX3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKIHsK IAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQogCQl0b19pOTE1KHBsYW5lX3N0 YXRlLT5iYXNlLnBsYW5lLT5kZXYpOwotCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi ID0gcGxhbmVfc3RhdGUtPmJhc2UuZmI7Ci0JdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVf c3RhdGUtPmJhc2Uucm90YXRpb247Ci0JaW50IHNyY194ID0gcGxhbmVfc3RhdGUtPmJhc2Uuc3Jj LngxID4+IDE2OwotCWludCBzcmNfeSA9IHBsYW5lX3N0YXRlLT5iYXNlLnNyYy55MSA+PiAxNjsK KwlpbnQgc3JjX3gsIHNyY195OwogCXUzMiBvZmZzZXQ7CiAJaW50IHJldDsKIAotCWludGVsX2Zp bGxfZmJfZ2d0dF92aWV3KCZwbGFuZV9zdGF0ZS0+dmlldywgZmIsIHJvdGF0aW9uKTsKLQlwbGFu ZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRlID0gaW50ZWxfZmJfcGl0Y2goZmIsIDAsIHJv dGF0aW9uKTsKLQotCXJldCA9IGludGVsX3BsYW5lX2NoZWNrX3N0cmlkZShwbGFuZV9zdGF0ZSk7 CisJcmV0ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9ndHQocGxhbmVfc3RhdGUpOwogCWlmIChyZXQp CiAJCXJldHVybiByZXQ7CiAKKwlzcmNfeCA9IHBsYW5lX3N0YXRlLT5iYXNlLnNyYy54MSA+PiAx NjsKKwlzcmNfeSA9IHBsYW5lX3N0YXRlLT5iYXNlLnNyYy55MSA+PiAxNjsKKwogCWludGVsX2Fk ZF9mYl9vZmZzZXRzKCZzcmNfeCwgJnNyY195LCBwbGFuZV9zdGF0ZSwgMCk7CiAKIAlpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA+PSA0KQpAQCAtMzMzNiw2ICszNTYwLDcgQEAgaW50IGk5eHhfY2hl Y2tfcGxhbmVfc3VyZmFjZShzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQog CiAJLyogSFNXL0JEVyBkbyB0aGlzIGF1dG9tYWdpY2FsbHkgaW4gaGFyZHdhcmUgKi8KIAlpZiAo IUlTX0hBU1dFTEwoZGV2X3ByaXYpICYmICFJU19CUk9BRFdFTEwoZGV2X3ByaXYpKSB7CisJCXVu c2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0aW9uOwogCQlpbnQg c3JjX3cgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPmJhc2Uuc3JjKSA+PiAxNjsKIAkJ aW50IHNyY19oID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+YmFzZS5zcmMpID4+IDE2 OwogCkBAIC0zNTAzLDE1ICszNzI4LDYgQEAgc3RhdGljIGJvb2wgaTl4eF9wbGFuZV9nZXRfaHdf c3RhdGUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0 aWMgdTMyCi1pbnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50KGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiLCBpbnQgY29sb3JfcGxhbmUpCi17Ci0JaWYgKGZiLT5tb2RpZmllciA9PSBEUk1f Rk9STUFUX01PRF9MSU5FQVIpCi0JCXJldHVybiA2NDsKLQllbHNlCi0JCXJldHVybiBpbnRlbF90 aWxlX3dpZHRoX2J5dGVzKGZiLCBjb2xvcl9wbGFuZSk7Ci19Ci0KIHN0YXRpYyB2b2lkIHNrbF9k ZXRhY2hfc2NhbGVyKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLCBpbnQgaWQpCiB7CiAJ c3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2NydGMtPmJhc2UuZGV2OwpAQCAtOTcyMCwx NiArOTkzNiwxMSBAQCBzdGF0aWMgYm9vbCBpbnRlbF9jdXJzb3Jfc2l6ZV9vayhjb25zdCBzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQogCiBzdGF0aWMgaW50IGludGVsX2N1 cnNvcl9jaGVja19zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUp CiB7Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFz ZS5mYjsKLQl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlv bjsKIAlpbnQgc3JjX3gsIHNyY195OwogCXUzMiBvZmZzZXQ7CiAJaW50IHJldDsKIAotCWludGVs X2ZpbGxfZmJfZ2d0dF92aWV3KCZwbGFuZV9zdGF0ZS0+dmlldywgZmIsIHJvdGF0aW9uKTsKLQlw bGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRlID0gaW50ZWxfZmJfcGl0Y2goZmIsIDAs IHJvdGF0aW9uKTsKLQotCXJldCA9IGludGVsX3BsYW5lX2NoZWNrX3N0cmlkZShwbGFuZV9zdGF0 ZSk7CisJcmV0ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9ndHQocGxhbmVfc3RhdGUpOwogCWlmIChy ZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTE0NDczLDI0ICsxNDY4NCw2IEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyX2Z1bmNzIGludGVsX2ZiX2Z1bmNzID0gewogCS5kaXJ0 eSA9IGludGVsX3VzZXJfZnJhbWVidWZmZXJfZGlydHksCiB9OwogCi1zdGF0aWMKLXUzMiBpbnRl bF9mYl9waXRjaF9saW1pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkg dWludDY0X3QgZmJfbW9kaWZpZXIsIHVpbnQzMl90IHBpeGVsX2Zvcm1hdCkKLXsKLQlzdHJ1Y3Qg aW50ZWxfY3J0YyAqY3J0YzsKLQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lOwotCi0JLyoKLQkg KiBXZSBhc3N1bWUgdGhlIHByaW1hcnkgcGxhbmUgZm9yIHBpcGUgQSBoYXMKLQkgKiB0aGUgaGln aGVzdCBzdHJpZGUgbGltaXRzIG9mIHRoZW0gYWxsLgotCSAqLwotCWNydGMgPSBpbnRlbF9nZXRf Y3J0Y19mb3JfcGlwZShkZXZfcHJpdiwgUElQRV9BKTsKLQlwbGFuZSA9IHRvX2ludGVsX3BsYW5l KGNydGMtPmJhc2UucHJpbWFyeSk7Ci0KLQlyZXR1cm4gcGxhbmUtPm1heF9zdHJpZGUocGxhbmUs IHBpeGVsX2Zvcm1hdCwgZmJfbW9kaWZpZXIsCi0JCQkJIERSTV9NT0RFX1JPVEFURV8wKTsKLX0K LQogc3RhdGljIGludCBpbnRlbF9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBpbnRlbF9mcmFtZWJ1 ZmZlciAqaW50ZWxfZmIsCiAJCQkJICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAog CQkJCSAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21kKQpAQCAtMTQ0OTgsNyArMTQ2 OTEsNyBAQCBzdGF0aWMgaW50IGludGVsX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGludGVsX2Zy YW1lYnVmZmVyICppbnRlbF9mYiwKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KG9iai0+YmFzZS5kZXYpOwogCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0g JmludGVsX2ZiLT5iYXNlOwogCXN0cnVjdCBkcm1fZm9ybWF0X25hbWVfYnVmIGZvcm1hdF9uYW1l OwotCXUzMiBwaXRjaF9saW1pdDsKKwl1MzIgbWF4X3N0cmlkZTsKIAl1bnNpZ25lZCBpbnQgdGls aW5nLCBzdHJpZGU7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAJaW50IGk7CkBAIC0xNDU2OSwxMyAr MTQ3NjIsMTMgQEAgc3RhdGljIGludCBpbnRlbF9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBpbnRl bF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmIsCiAJCWdvdG8gZXJyOwogCX0KIAotCXBpdGNoX2xpbWl0 ID0gaW50ZWxfZmJfcGl0Y2hfbGltaXQoZGV2X3ByaXYsIG1vZGVfY21kLT5tb2RpZmllclswXSwK LQkJCQkJICAgbW9kZV9jbWQtPnBpeGVsX2Zvcm1hdCk7Ci0JaWYgKG1vZGVfY21kLT5waXRjaGVz WzBdID4gcGl0Y2hfbGltaXQpIHsKKwltYXhfc3RyaWRlID0gaW50ZWxfZmJfbWF4X3N0cmlkZShk ZXZfcHJpdiwgbW9kZV9jbWQtPm1vZGlmaWVyWzBdLAorCQkJCQkgbW9kZV9jbWQtPnBpeGVsX2Zv cm1hdCk7CisJaWYgKG1vZGVfY21kLT5waXRjaGVzWzBdID4gbWF4X3N0cmlkZSkgewogCQlEUk1f REVCVUdfS01TKCIlcyBwaXRjaCAoJXUpIG11c3QgYmUgYXQgbW9zdCAlZFxuIiwKIAkJCSAgICAg IG1vZGVfY21kLT5tb2RpZmllclswXSAhPSBEUk1fRk9STUFUX01PRF9MSU5FQVIgPwogCQkJICAg ICAgInRpbGVkIiA6ICJsaW5lYXIiLAotCQkJICAgICAgbW9kZV9jbWQtPnBpdGNoZXNbMF0sIHBp dGNoX2xpbWl0KTsKKwkJCSAgICAgIG1vZGVfY21kLT5waXRjaGVzWzBdLCBtYXhfc3RyaWRlKTsK IAkJZ290byBlcnI7CiAJfQogCi0tIAoyLjE2LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeAo=