From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: [PATCH v2 12/27] drm/i915: Split plane updates of crtc->atomic into a helper, v2. Date: Thu, 4 Jun 2015 14:47:42 +0200 Message-ID: <1433422077-14907-13-git-send-email-maarten.lankhorst@linux.intel.com> References: <1433422077-14907-1-git-send-email-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 ESMTP id 6AAA16EB2F for ; Thu, 4 Jun 2015 05:48:12 -0700 (PDT) In-Reply-To: <1433422077-14907-1-git-send-email-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 List-Id: intel-gfx@lists.freedesktop.org VGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gdmVyaWZ5IHRoYXQgbm8gY2hhbmdlcyBhcmUgZG9uZSB3 aGVuCmNhbGxpbmcgdGhpcyBmcm9tIGNydGMgaW5zdGVhZC4KCkNoYW5nZXMgc2luY2UgdjE6CiAt IE1ha2UgaW50ZWxfd21fbmVlZF91cGRhdGUgc3RhdGljIGFuZCBhbHdheXMgY2hlY2sgaXQuCgpT aWduZWQtb2ZmLWJ5OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXgu aW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pY19wbGFuZS5j IHwgIDIxICstLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jICAgICAgfCAy NzUgKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kcnYuaCAgICAgICAgICB8ICAgOCArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf c3ByaXRlLmMgICAgICAgfCAgMzIgKy0tLQogNCBmaWxlcyBjaGFuZ2VkLCAxNzYgaW5zZXJ0aW9u cygrKSwgMTYwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2F0b21pY19wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWlj X3BsYW5lLmMKaW5kZXggODZiYTRiMmMzYTY1Li5hYTIxMjgzNjlhMGEgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pY19wbGFuZS5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2F0b21pY19wbGFuZS5jCkBAIC0xMTQsNiArMTE0LDcgQEAgc3RhdGlj IGludCBpbnRlbF9wbGFuZV9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJ c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7CiAJc3RydWN0IGludGVsX3BsYW5l ICppbnRlbF9wbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lKTsKIAlzdHJ1Y3QgaW50ZWxfcGxh bmVfc3RhdGUgKmludGVsX3N0YXRlID0gdG9faW50ZWxfcGxhbmVfc3RhdGUoc3RhdGUpOworCWlu dCByZXQ7CiAKIAljcnRjID0gY3J0YyA/IGNydGMgOiBwbGFuZS0+Y3J0YzsKIAlpbnRlbF9jcnRj ID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKQEAgLTE2MCwyMCArMTYxLDYgQEAgc3RhdGljIGludCBp bnRlbF9wbGFuZV9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJaW50ZWxf c3RhdGUtPmNsaXAueTIgPQogCQljcnRjX3N0YXRlLT5iYXNlLmFjdGl2ZSA/IGNydGNfc3RhdGUt PnBpcGVfc3JjX2ggOiAwOwogCi0JLyoKLQkgKiBEaXNhYmxpbmcgYSBwbGFuZSBpcyBhbHdheXMg b2theTsgd2UganVzdCBuZWVkIHRvIHVwZGF0ZQotCSAqIGZiIHRyYWNraW5nIGluIGEgc3BlY2lh bCB3YXkgc2luY2UgY2xlYW51cF9mYigpIHdvbid0Ci0JICogZ2V0IGNhbGxlZCBieSB0aGUgcGxh bmUgaGVscGVycy4KLQkgKi8KLQlpZiAoc3RhdGUtPmZiID09IE5VTEwgJiYgcGxhbmUtPnN0YXRl LT5mYiAhPSBOVUxMKSB7Ci0JCS8qCi0JCSAqICdwcmVwYXJlJyBpcyBuZXZlciBjYWxsZWQgd2hl biBwbGFuZSBpcyBiZWluZyBkaXNhYmxlZCwgc28KLQkJICogd2UgbmVlZCB0byBoYW5kbGUgZnJv bnRidWZmZXIgdHJhY2tpbmcgYXMgYSBzcGVjaWFsIGNhc2UKLQkJICovCi0JCWludGVsX2NydGMt PmF0b21pYy5kaXNhYmxlZF9wbGFuZXMgfD0KLQkJCSgxIDw8IGRybV9wbGFuZV9pbmRleChwbGFu ZSkpOwotCX0KLQogCWlmIChzdGF0ZS0+ZmIgJiYgaW50ZWxfcm90YXRpb25fOTBfb3JfMjcwKHN0 YXRlLT5yb3RhdGlvbikpIHsKIAkJaWYgKCEoc3RhdGUtPmZiLT5tb2RpZmllclswXSA9PSBJOTE1 X0ZPUk1BVF9NT0RfWV9USUxFRCB8fAogCQkJc3RhdGUtPmZiLT5tb2RpZmllclswXSA9PSBJOTE1 X0ZPUk1BVF9NT0RfWWZfVElMRUQpKSB7CkBAIC0xOTgsNyArMTg1LDExIEBAIHN0YXRpYyBpbnQg aW50ZWxfcGxhbmVfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQl9CiAJ fQogCi0JcmV0dXJuIGludGVsX3BsYW5lLT5jaGVja19wbGFuZShwbGFuZSwgaW50ZWxfc3RhdGUp OworCXJldCA9IGludGVsX3BsYW5lLT5jaGVja19wbGFuZShwbGFuZSwgaW50ZWxfc3RhdGUpOwor CWlmIChyZXQgfHwgIXN0YXRlLT5zdGF0ZSkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBpbnRl bF9wbGFuZV9hdG9taWNfY2FsY19jaGFuZ2VzKCZjcnRjX3N0YXRlLT5iYXNlLCBzdGF0ZSk7CiB9 CiAKIHN0YXRpYyB2b2lkIGludGVsX3BsYW5lX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5 LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggMzEwYjk4MjI2 ZDgyLi41MTdhMWJkMzAyZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAg LTQzODgsMTggKzQzODgsMTggQEAgaW50IHNrbF91cGRhdGVfc2NhbGVyX2NydGMoc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKnN0YXRlLCBpbnQgZm9yY2VfZGV0YWNoKQogICogc2tsX3VwZGF0ZV9z Y2FsZXJfcGxhbmUgLSBTdGFnZXMgdXBkYXRlIHRvIHNjYWxlciBzdGF0ZSBmb3IgYSBnaXZlbiBw bGFuZS4KICAqCiAgKiBAc3RhdGU6IGNydGMncyBzY2FsZXIgc3RhdGUKLSAqIEBpbnRlbF9wbGFu ZTogYWZmZWN0ZWQgcGxhbmUKICAqIEBwbGFuZV9zdGF0ZTogYXRvbWljIHBsYW5lIHN0YXRlIHRv IHVwZGF0ZQogICoKICAqIFJldHVybgogICogICAgIDAgLSBzY2FsZXJfdXNhZ2UgdXBkYXRlZCBz dWNjZXNzZnVsbHkKICAqICAgIGVycm9yIC0gcmVxdWVzdGVkIHNjYWxpbmcgY2Fubm90IGJlIHN1 cHBvcnRlZCBvciBvdGhlciBlcnJvciBjb25kaXRpb24KICAqLwotaW50IHNrbF91cGRhdGVfc2Nh bGVyX3BsYW5lKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJICAgIHN0 cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmUsCi0JCQkgICAgc3RydWN0IGludGVsX3BsYW5l X3N0YXRlICpwbGFuZV9zdGF0ZSkKK3N0YXRpYyBpbnQgc2tsX3VwZGF0ZV9zY2FsZXJfcGxhbmUo c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkJICAgc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKIHsKIAorCXN0cnVjdCBpbnRlbF9wbGFuZSAqaW50 ZWxfcGxhbmUgPQorCQl0b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0ZS0+YmFzZS5wbGFuZSk7CiAJ c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFzZS5mYjsKIAlpbnQg cmV0OwogCkBAIC0xMTQyNSw2ICsxMTQyNSwxNjEgQEAgb3V0X2hhbmc6CiAJcmV0dXJuIHJldDsK IH0KIAorCisvKioKKyAqIGludGVsX3dtX25lZWRfdXBkYXRlIC0gQ2hlY2sgd2hldGhlciB3YXRl cm1hcmtzIG5lZWQgdXBkYXRpbmcKKyAqIEBwbGFuZTogZHJtIHBsYW5lCisgKiBAc3RhdGU6IG5l dyBwbGFuZSBzdGF0ZQorICoKKyAqIENoZWNrIGN1cnJlbnQgcGxhbmUgc3RhdGUgdmVyc3VzIHRo ZSBuZXcgb25lIHRvIGRldGVybWluZSB3aGV0aGVyCisgKiB3YXRlcm1hcmtzIG5lZWQgdG8gYmUg cmVjYWxjdWxhdGVkLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvciBmYWxzZS4KKyAqLworc3RhdGlj IGJvb2wgaW50ZWxfd21fbmVlZF91cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJ IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCS8qIFVwZGF0ZSB3YXRlcm1hcmtz IG9uIHRpbGluZyBjaGFuZ2VzLiAqLworCWlmICghcGxhbmUtPnN0YXRlLT5mYiB8fCAhc3RhdGUt PmZiIHx8CisJICAgIHBsYW5lLT5zdGF0ZS0+ZmItPm1vZGlmaWVyWzBdICE9IHN0YXRlLT5mYi0+ bW9kaWZpZXJbMF0gfHwKKwkgICAgcGxhbmUtPnN0YXRlLT5yb3RhdGlvbiAhPSBzdGF0ZS0+cm90 YXRpb24pCisJCXJldHVybiB0cnVlOworCisJaWYgKHBsYW5lLT5zdGF0ZS0+Y3J0Y193ICE9IHN0 YXRlLT5jcnRjX3cpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitpbnQg aW50ZWxfcGxhbmVfYXRvbWljX2NhbGNfY2hhbmdlcyhzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUsCisJCQkJICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQor eworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGNydGNfc3RhdGUtPmNydGM7CisJc3RydWN0IGlu dGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCXN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lID0gcGxhbmVfc3RhdGUtPnBsYW5lOworCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2 LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKm9sZF9wbGFuZV9zdGF0 ZSA9CisJCXRvX2ludGVsX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJaW50IGlkeCA9IGlu dGVsX2NydGMtPmJhc2UuYmFzZS5pZCwgcmV0OworCWludCBpID0gZHJtX3BsYW5lX2luZGV4KHBs YW5lKTsKKwlib29sIG1vZGVfY2hhbmdlZCA9IG5lZWRzX21vZGVzZXQoY3J0Y19zdGF0ZSk7CisJ Ym9vbCB3YXNfY3J0Y19lbmFibGVkID0gY3J0Yy0+c3RhdGUtPmFjdGl2ZTsKKwlib29sIGlzX2Ny dGNfZW5hYmxlZCA9IGNydGNfc3RhdGUtPmFjdGl2ZTsKKworCWJvb2wgdHVybl9vZmYsIHR1cm5f b24sIHZpc2libGUsIHdhc192aXNpYmxlOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0g cGxhbmVfc3RhdGUtPmZiOworCisJaWYgKGNydGNfc3RhdGUgJiYgSU5URUxfSU5GTyhkZXYpLT5n ZW4gPj0gOSAmJgorCSAgICBwbGFuZS0+dHlwZSAhPSBEUk1fUExBTkVfVFlQRV9DVVJTT1IpIHsK KwkJcmV0ID0gc2tsX3VwZGF0ZV9zY2FsZXJfcGxhbmUoCisJCQl0b19pbnRlbF9jcnRjX3N0YXRl KGNydGNfc3RhdGUpLAorCQkJdG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmVfc3RhdGUpKTsKKwkJ aWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJLyoKKwkgKiBEaXNhYmxpbmcgYSBwbGFu ZSBpcyBhbHdheXMgb2theTsgd2UganVzdCBuZWVkIHRvIHVwZGF0ZQorCSAqIGZiIHRyYWNraW5n IGluIGEgc3BlY2lhbCB3YXkgc2luY2UgY2xlYW51cF9mYigpIHdvbid0CisJICogZ2V0IGNhbGxl ZCBieSB0aGUgcGxhbmUgaGVscGVycy4KKwkgKi8KKwlpZiAob2xkX3BsYW5lX3N0YXRlLT5iYXNl LmZiICYmICFmYikKKwkJaW50ZWxfY3J0Yy0+YXRvbWljLmRpc2FibGVkX3BsYW5lcyB8PSAxIDw8 IGk7CisKKwkvKiBkb24ndCBydW4gcmVzdCBkdXJpbmcgbW9kZXNldCB5ZXQgKi8KKwlpZiAoIWlu dGVsX2NydGMtPmFjdGl2ZSB8fCBtb2RlX2NoYW5nZWQpCisJCXJldHVybiAwOworCisJd2FzX3Zp c2libGUgPSBvbGRfcGxhbmVfc3RhdGUtPnZpc2libGU7CisJdmlzaWJsZSA9IHRvX2ludGVsX3Bs YW5lX3N0YXRlKHBsYW5lX3N0YXRlKS0+dmlzaWJsZTsKKworCWlmICghd2FzX2NydGNfZW5hYmxl ZCAmJiBXQVJOX09OKHdhc192aXNpYmxlKSkKKwkJd2FzX3Zpc2libGUgPSBmYWxzZTsKKworCWlm ICghaXNfY3J0Y19lbmFibGVkICYmIFdBUk5fT04odmlzaWJsZSkpCisJCXZpc2libGUgPSBmYWxz ZTsKKworCWlmICghd2FzX3Zpc2libGUgJiYgIXZpc2libGUpCisJCXJldHVybiAwOworCisJdHVy bl9vZmYgPSB3YXNfdmlzaWJsZSAmJiAoIXZpc2libGUgfHwgbW9kZV9jaGFuZ2VkKTsKKwl0dXJu X29uID0gdmlzaWJsZSAmJiAoIXdhc192aXNpYmxlIHx8IG1vZGVfY2hhbmdlZCk7CisKKwlEUk1f REVCVUdfQVRPTUlDKCJbQ1JUQzolaV0gaGFzIFtQTEFORTolaV0gd2l0aCBmYiAlaVxuIiwgaWR4 LAorCQkJIHBsYW5lLT5iYXNlLmlkLCBmYiA/IGZiLT5iYXNlLmlkIDogLTEpOworCisJRFJNX0RF QlVHX0FUT01JQygiW1BMQU5FOiVpXSB2aXNpYmxlICVpIC0+ICVpLCBvZmYgJWksIG9uICVpLCBt cyAlaVxuIiwKKwkJCSBwbGFuZS0+YmFzZS5pZCwgd2FzX3Zpc2libGUsIHZpc2libGUsCisJCQkg dHVybl9vZmYsIHR1cm5fb24sIG1vZGVfY2hhbmdlZCk7CisKKwlpZiAoaW50ZWxfd21fbmVlZF91 cGRhdGUocGxhbmUsIHBsYW5lX3N0YXRlKSkKKwkJaW50ZWxfY3J0Yy0+YXRvbWljLnVwZGF0ZV93 bSA9IHRydWU7CisKKwlzd2l0Y2ggKHBsYW5lLT50eXBlKSB7CisJY2FzZSBEUk1fUExBTkVfVFlQ RV9QUklNQVJZOgorCQlpZiAodmlzaWJsZSkKKwkJCWludGVsX2NydGMtPmF0b21pYy5mYl9iaXRz IHw9CisJCQkgICAgSU5URUxfRlJPTlRCVUZGRVJfUFJJTUFSWShpbnRlbF9jcnRjLT5waXBlKTsK KworCQlpbnRlbF9jcnRjLT5hdG9taWMud2FpdF9mb3JfZmxpcHMgPSB0cnVlOworCQlpbnRlbF9j cnRjLT5hdG9taWMucHJlX2Rpc2FibGVfcHJpbWFyeSA9IHR1cm5fb2ZmOworCQlpbnRlbF9jcnRj LT5hdG9taWMucG9zdF9lbmFibGVfcHJpbWFyeSA9IHR1cm5fb247CisKKwkJaWYgKHR1cm5fb2Zm KQorCQkJaW50ZWxfY3J0Yy0+YXRvbWljLmRpc2FibGVfZmJjID0gdHJ1ZTsKKworCQkvKgorCQkg KiBGQkMgZG9lcyBub3Qgd29yayBvbiBzb21lIHBsYXRmb3JtcyBmb3Igcm90YXRlZAorCQkgKiBw bGFuZXMsIHNvIGRpc2FibGUgaXQgd2hlbiByb3RhdGlvbiBpcyBub3QgMCBhbmQKKwkJICogdXBk YXRlIGl0IHdoZW4gcm90YXRpb24gaXMgc2V0IGJhY2sgdG8gMC4KKwkJICoKKwkJICogRklYTUU6 IFRoaXMgaXMgcmVkdW5kYW50IHdpdGggdGhlIGZiYyB1cGRhdGUgZG9uZSBpbgorCQkgKiB0aGUg cHJpbWFyeSBwbGFuZSBlbmFibGUgZnVuY3Rpb24gZXhjZXB0IHRoYXQgdGhhdAorCQkgKiBvbmUg aXMgZG9uZSB0b28gbGF0ZS4gV2UgZXZlbnR1YWxseSBuZWVkIHRvIHVuaWZ5CisJCSAqIHRoaXMu CisJCSAqLworCisJCWlmICh2aXNpYmxlICYmCisJCSAgICBJTlRFTF9JTkZPKGRldiktPmdlbiA8 PSA0ICYmICFJU19HNFgoZGV2KSAmJgorCQkgICAgZGV2X3ByaXYtPmZiYy5jcnRjID09IGludGVs X2NydGMgJiYKKwkJICAgIHBsYW5lX3N0YXRlLT5yb3RhdGlvbiAhPSBCSVQoRFJNX1JPVEFURV8w KSkKKwkJCWludGVsX2NydGMtPmF0b21pYy5kaXNhYmxlX2ZiYyA9IHRydWU7CisKKwkJLyoKKwkJ ICogQkRXIHNpZ25hbHMgZmxpcCBkb25lIGltbWVkaWF0ZWx5IGlmIHRoZSBwbGFuZQorCQkgKiBp cyBkaXNhYmxlZCwgZXZlbiBpZiB0aGUgcGxhbmUgZW5hYmxlIGlzIGFscmVhZHkKKwkJICogYXJt ZWQgdG8gb2NjdXIgYXQgdGhlIG5leHQgdmJsYW5rIDooCisJCSAqLworCQlpZiAodHVybl9vbiAm JiBJU19CUk9BRFdFTEwoZGV2KSkKKwkJCWludGVsX2NydGMtPmF0b21pYy53YWl0X3ZibGFuayA9 IHRydWU7CisKKwkJaW50ZWxfY3J0Yy0+YXRvbWljLnVwZGF0ZV9mYmMgfD0gdmlzaWJsZSB8fCBt b2RlX2NoYW5nZWQ7CisJCWJyZWFrOworCWNhc2UgRFJNX1BMQU5FX1RZUEVfQ1VSU09SOgorCQlp ZiAodmlzaWJsZSkKKwkJCWludGVsX2NydGMtPmF0b21pYy5mYl9iaXRzIHw9CisJCQkgICAgSU5U RUxfRlJPTlRCVUZGRVJfQ1VSU09SKGludGVsX2NydGMtPnBpcGUpOworCQlicmVhazsKKwljYXNl IERSTV9QTEFORV9UWVBFX09WRVJMQVk6CisJCS8qCisJCSAqICdwcmVwYXJlJyBpcyBuZXZlciBj YWxsZWQgd2hlbiBwbGFuZSBpcyBiZWluZyBkaXNhYmxlZCwgc28KKwkJICogd2UgbmVlZCB0byBo YW5kbGUgZnJvbnRidWZmZXIgdHJhY2tpbmcgYXMgYSBzcGVjaWFsIGNhc2UKKwkJICovCisJCWlm ICh2aXNpYmxlKQorCQkJaW50ZWxfY3J0Yy0+YXRvbWljLmZiX2JpdHMgfD0KKwkJCSAgICBJTlRF TF9GUk9OVEJVRkZFUl9TUFJJVEUoaW50ZWxfY3J0Yy0+cGlwZSk7CisKKwkJaWYgKHR1cm5fb2Zm ICYmIGlzX2NydGNfZW5hYmxlZCkgeworCQkJaW50ZWxfY3J0Yy0+YXRvbWljLndhaXRfdmJsYW5r ID0gdHJ1ZTsKKwkJCWludGVsX2NydGMtPmF0b21pYy51cGRhdGVfc3ByaXRlX3dhdGVybWFya3Mg fD0KKwkJCQkxIDw8IGk7CisJCX0KKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0 aWMgYm9vbCBlbmNvZGVyc19jbG9uZWFibGUoY29uc3Qgc3RydWN0IGludGVsX2VuY29kZXIgKmEs CiAJCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2VuY29kZXIgKmIpCiB7CkBAIC0xMzExOCwy OCArMTMyNzMsNiBAQCBzdGF0aWMgdm9pZCBpbnRlbF9zaGFyZWRfZHBsbF9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCiB9CiAKIC8qKgotICogaW50ZWxfd21fbmVlZF91cGRhdGUgLSBDaGVj ayB3aGV0aGVyIHdhdGVybWFya3MgbmVlZCB1cGRhdGluZwotICogQHBsYW5lOiBkcm0gcGxhbmUK LSAqIEBzdGF0ZTogbmV3IHBsYW5lIHN0YXRlCi0gKgotICogQ2hlY2sgY3VycmVudCBwbGFuZSBz dGF0ZSB2ZXJzdXMgdGhlIG5ldyBvbmUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIKLSAqIHdhdGVybWFy a3MgbmVlZCB0byBiZSByZWNhbGN1bGF0ZWQuCi0gKgotICogUmV0dXJucyB0cnVlIG9yIGZhbHNl LgotICovCi1ib29sIGludGVsX3dtX25lZWRfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LAotCQkJICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKLXsKLQkvKiBVcGRhdGUgd2F0 ZXJtYXJrcyBvbiB0aWxpbmcgY2hhbmdlcy4gKi8KLQlpZiAoIXBsYW5lLT5zdGF0ZS0+ZmIgfHwg IXN0YXRlLT5mYiB8fAotCSAgICBwbGFuZS0+c3RhdGUtPmZiLT5tb2RpZmllclswXSAhPSBzdGF0 ZS0+ZmItPm1vZGlmaWVyWzBdIHx8Ci0JICAgIHBsYW5lLT5zdGF0ZS0+cm90YXRpb24gIT0gc3Rh dGUtPnJvdGF0aW9uKQotCQlyZXR1cm4gdHJ1ZTsKLQotCXJldHVybiBmYWxzZTsKLX0KLQotLyoq CiAgKiBpbnRlbF9wcmVwYXJlX3BsYW5lX2ZiIC0gUHJlcGFyZSBmYiBmb3IgdXNhZ2Ugb24gcGxh bmUKICAqIEBwbGFuZTogZHJtIHBsYW5lIHRvIHByZXBhcmUgZm9yCiAgKiBAZmI6IGZyYW1lYnVm ZmVyIHRvIHByZXBhcmUgZm9yIHByZXNlbnRhdGlvbgpAQCAtMTMyNjAsNyArMTMzOTMsNiBAQCBp bnRlbF9jaGVja19wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQkJICBz dHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnN0YXRlKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBwbGFuZS0+ZGV2OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRl di0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjID0gc3RhdGUtPmJhc2UuY3J0 YzsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YzsKIAlzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZTsKQEAgLTEzMjcxLDcgKzEzNDAzLDYgQEAgaW50ZWxfY2hlY2tfcHJp bWFyeV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAlib29sIGNhbl9wb3NpdGlvbiA9 IGZhbHNlOwogCWludCBtYXhfc2NhbGUgPSBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkc7CiAJ aW50IG1pbl9zY2FsZSA9IERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORzsKLQlpbnQgcmV0Owog CiAJY3J0YyA9IGNydGMgPyBjcnRjIDogcGxhbmUtPmNydGM7CiAJaW50ZWxfY3J0YyA9IHRvX2lu dGVsX2NydGMoY3J0Yyk7CkBAIC0xMzI4Nyw3MyArMTM0MTgsMTEgQEAgaW50ZWxfY2hlY2tfcHJp bWFyeV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJY2FuX3Bvc2l0aW9uID0gdHJ1 ZTsKIAl9CiAKLQlyZXQgPSBkcm1fcGxhbmVfaGVscGVyX2NoZWNrX3VwZGF0ZShwbGFuZSwgY3J0 YywgZmIsCi0JCQkJCSAgICBzcmMsIGRlc3QsIGNsaXAsCi0JCQkJCSAgICBtaW5fc2NhbGUsCi0J CQkJCSAgICBtYXhfc2NhbGUsCi0JCQkJCSAgICBjYW5fcG9zaXRpb24sIHRydWUsCi0JCQkJCSAg ICAmc3RhdGUtPnZpc2libGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAoaW50 ZWxfY3J0Yy0+YWN0aXZlKSB7Ci0JCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRl ID0KLQkJCXRvX2ludGVsX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7Ci0KLQkJaW50ZWxfY3J0 Yy0+YXRvbWljLndhaXRfZm9yX2ZsaXBzID0gdHJ1ZTsKLQotCQkvKgotCQkgKiBGQkMgZG9lcyBu b3Qgd29yayBvbiBzb21lIHBsYXRmb3JtcyBmb3Igcm90YXRlZAotCQkgKiBwbGFuZXMsIHNvIGRp c2FibGUgaXQgd2hlbiByb3RhdGlvbiBpcyBub3QgMCBhbmQKLQkJICogdXBkYXRlIGl0IHdoZW4g cm90YXRpb24gaXMgc2V0IGJhY2sgdG8gMC4KLQkJICoKLQkJICogRklYTUU6IFRoaXMgaXMgcmVk dW5kYW50IHdpdGggdGhlIGZiYyB1cGRhdGUgZG9uZSBpbgotCQkgKiB0aGUgcHJpbWFyeSBwbGFu ZSBlbmFibGUgZnVuY3Rpb24gZXhjZXB0IHRoYXQgdGhhdAotCQkgKiBvbmUgaXMgZG9uZSB0b28g bGF0ZS4gV2UgZXZlbnR1YWxseSBuZWVkIHRvIHVuaWZ5Ci0JCSAqIHRoaXMuCi0JCSAqLwotCQlp ZiAoc3RhdGUtPnZpc2libGUgJiYKLQkJICAgIElOVEVMX0lORk8oZGV2KS0+Z2VuIDw9IDQgJiYg IUlTX0c0WChkZXYpICYmCi0JCSAgICBkZXZfcHJpdi0+ZmJjLmNydGMgPT0gaW50ZWxfY3J0YyAm JgotCQkgICAgc3RhdGUtPmJhc2Uucm90YXRpb24gIT0gQklUKERSTV9ST1RBVEVfMCkpIHsKLQkJ CWludGVsX2NydGMtPmF0b21pYy5kaXNhYmxlX2ZiYyA9IHRydWU7Ci0JCX0KLQotCQlpZiAoc3Rh dGUtPnZpc2libGUgJiYgIW9sZF9zdGF0ZS0+dmlzaWJsZSkgewotCQkJLyoKLQkJCSAqIEJEVyBz aWduYWxzIGZsaXAgZG9uZSBpbW1lZGlhdGVseSBpZiB0aGUgcGxhbmUKLQkJCSAqIGlzIGRpc2Fi bGVkLCBldmVuIGlmIHRoZSBwbGFuZSBlbmFibGUgaXMgYWxyZWFkeQotCQkJICogYXJtZWQgdG8g b2NjdXIgYXQgdGhlIG5leHQgdmJsYW5rIDooCi0JCQkgKi8KLQkJCWlmIChJU19CUk9BRFdFTEwo ZGV2KSkKLQkJCQlpbnRlbF9jcnRjLT5hdG9taWMud2FpdF92YmxhbmsgPSB0cnVlOwotCi0JCQlp ZiAoY3J0Y19zdGF0ZSAmJiAhbmVlZHNfbW9kZXNldCgmY3J0Y19zdGF0ZS0+YmFzZSkpCi0JCQkJ aW50ZWxfY3J0Yy0+YXRvbWljLnBvc3RfZW5hYmxlX3ByaW1hcnkgPSB0cnVlOwotCQl9Ci0KLQkJ aWYgKCFzdGF0ZS0+dmlzaWJsZSAmJiBvbGRfc3RhdGUtPnZpc2libGUgJiYKLQkJICAgIGNydGNf c3RhdGUgJiYgIW5lZWRzX21vZGVzZXQoJmNydGNfc3RhdGUtPmJhc2UpKQotCQkJaW50ZWxfY3J0 Yy0+YXRvbWljLnByZV9kaXNhYmxlX3ByaW1hcnkgPSB0cnVlOwotCi0JCWludGVsX2NydGMtPmF0 b21pYy5mYl9iaXRzIHw9Ci0JCQlJTlRFTF9GUk9OVEJVRkZFUl9QUklNQVJZKGludGVsX2NydGMt PnBpcGUpOwotCi0JCWludGVsX2NydGMtPmF0b21pYy51cGRhdGVfZmJjID0gdHJ1ZTsKLQotCQlp ZiAoaW50ZWxfd21fbmVlZF91cGRhdGUocGxhbmUsICZzdGF0ZS0+YmFzZSkpCi0JCQlpbnRlbF9j cnRjLT5hdG9taWMudXBkYXRlX3dtID0gdHJ1ZTsKLQl9Ci0KLQlpZiAoSU5URUxfSU5GTyhkZXYp LT5nZW4gPj0gOSkgewotCQlyZXQgPSBza2xfdXBkYXRlX3NjYWxlcl9wbGFuZShjcnRjX3N0YXRl LAotCQkJCQkgICAgICB0b19pbnRlbF9wbGFuZShwbGFuZSksCi0JCQkJCSAgICAgIHN0YXRlKTsK LQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGRy bV9wbGFuZV9oZWxwZXJfY2hlY2tfdXBkYXRlKHBsYW5lLCBjcnRjLCBmYiwKKwkJCQkJICAgICBz cmMsIGRlc3QsIGNsaXAsCisJCQkJCSAgICAgbWluX3NjYWxlLCBtYXhfc2NhbGUsCisJCQkJCSAg ICAgY2FuX3Bvc2l0aW9uLCB0cnVlLAorCQkJCQkgICAgICZzdGF0ZS0+dmlzaWJsZSk7CiB9CiAK IHN0YXRpYyB2b2lkCkBAIC0xMzYxMywxMCArMTM2ODIsOSBAQCBpbnRlbF9jaGVja19jdXJzb3Jf cGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsK IAotCiAJLyogaWYgd2Ugd2FudCB0byB0dXJuIG9mZiB0aGUgY3Vyc29yIGlnbm9yZSB3aWR0aCBh bmQgaGVpZ2h0ICovCiAJaWYgKCFvYmopCi0JCWdvdG8gZmluaXNoOworCQlyZXR1cm4gMDsKIAog CS8qIENoZWNrIGZvciB3aGljaCBjdXJzb3IgdHlwZXMgd2Ugc3VwcG9ydCAqLwogCWlmICghY3Vy c29yX3NpemVfb2soZGV2LCBzdGF0ZS0+YmFzZS5jcnRjX3csIHN0YXRlLT5iYXNlLmNydGNfaCkp IHsKQEAgLTEzNjMzLDE5ICsxMzcwMSwxMCBAQCBpbnRlbF9jaGVja19jdXJzb3JfcGxhbmUoc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUsCiAKIAlpZiAoZmItPm1vZGlmaWVyWzBdICE9IERSTV9GT1JN QVRfTU9EX05PTkUpIHsKIAkJRFJNX0RFQlVHX0tNUygiY3Vyc29yIGNhbm5vdCBiZSB0aWxlZFxu Iik7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JfQotCi1maW5pc2g6Ci0JaWYgKGludGVsX2NydGMtPmFj dGl2ZSkgewotCQlpZiAocGxhbmUtPnN0YXRlLT5jcnRjX3cgIT0gc3RhdGUtPmJhc2UuY3J0Y193 KQotCQkJaW50ZWxfY3J0Yy0+YXRvbWljLnVwZGF0ZV93bSA9IHRydWU7Ci0KLQkJaW50ZWxfY3J0 Yy0+YXRvbWljLmZiX2JpdHMgfD0KLQkJCUlOVEVMX0ZST05UQlVGRkVSX0NVUlNPUihpbnRlbF9j cnRjLT5waXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmV0dXJuIHJldDsKKwlyZXR1 cm4gMDsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5kZXggZTEx NmE1ZjYzNDZlLi44MDJmM2U5OWM4NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCkBAIC0x MDU1LDYgKzEwNTUsOCBAQCBpbnQgaW50ZWxfcGxhbmVfYXRvbWljX3NldF9wcm9wZXJ0eShzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJCQkgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3Rh dGUsCiAJCQkJICAgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAogCQkJCSAgICB1aW50 NjRfdCB2YWwpOworaW50IGludGVsX3BsYW5lX2F0b21pY19jYWxjX2NoYW5nZXMoc3RydWN0IGRy bV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJCSAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl ICpwbGFuZV9zdGF0ZSk7CiAKIHVuc2lnbmVkIGludAogaW50ZWxfdGlsZV9oZWlnaHQoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgdWludDMyX3QgcGl4ZWxfZm9ybWF0LApAQCAtMTA2OSw5ICsxMDcx LDYgQEAgaW50ZWxfcm90YXRpb25fOTBfb3JfMjcwKHVuc2lnbmVkIGludCByb3RhdGlvbikKIHZv aWQgaW50ZWxfY3JlYXRlX3JvdGF0aW9uX3Byb3BlcnR5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs CiAJCQkJCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUpOwogCi1ib29sIGludGVsX3dtX25lZWRf dXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAotCQkJICBzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlICpzdGF0ZSk7Ci0KIC8qIHNoYXJlZCBkcGxsIGZ1bmN0aW9ucyAqLwogc3RydWN0IGludGVs X3NoYXJlZF9kcGxsICppbnRlbF9jcnRjX3RvX3NoYXJlZF9kcGxsKHN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjKTsKIHZvaWQgYXNzZXJ0X3NoYXJlZF9kcGxsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwKQEAgLTExMzYsOSArMTEzNSw2IEBAIHZvaWQgaW50ZWxfbW9kZV9mcm9tX3Bp cGVfY29uZmlnKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAogdm9pZCBpbnRlbF9jcnRj X3dhaXRfZm9yX3BlbmRpbmdfZmxpcHMoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKIHZvaWQgaW50 ZWxfbW9kZXNldF9wcmVjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGUpOwogdm9pZCBza2xfZGV0YWNoX3NjYWxlcnMoc3RydWN0IGludGVsX2NydGMgKmlu dGVsX2NydGMpOwotaW50IHNrbF91cGRhdGVfc2NhbGVyX3BsYW5lKHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlLAotCQkJICAgIHN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxh bmUsCi0JCQkgICAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSk7CiAKIGlu dCBza2xfdXBkYXRlX3NjYWxlcl9jcnRjKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlLCBpbnQgZm9yY2VfZGV0YWNoKTsKIGludCBza2xfbWF4X3NjYWxlKHN0cnVjdCBpbnRlbF9j cnRjICpjcnRjLCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3Nwcml0ZS5jCmluZGV4IGZlOTVmMjVmMDE5YS4uZjU5MjFiNjUyYjkwIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYwpAQCAtNzU2LDcgKzc1Niw2IEBAIGludGVs X2NoZWNrX3Nwcml0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAlpbnQgbWF4X3Nj YWxlLCBtaW5fc2NhbGU7CiAJYm9vbCBjYW5fc2NhbGU7CiAJaW50IHBpeGVsX3NpemU7Ci0JaW50 IHJldDsKIAogCWludGVsX2NydGMgPSBpbnRlbF9jcnRjID8gaW50ZWxfY3J0YyA6IHRvX2ludGVs X2NydGMocGxhbmUtPmNydGMpOwogCWNydGNfc3RhdGUgPSBzdGF0ZS0+YmFzZS5zdGF0ZSA/CkBA IC03NjQsNyArNzYzLDcgQEAgaW50ZWxfY2hlY2tfc3ByaXRlX3BsYW5lKHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lLAogCiAJaWYgKCFmYikgewogCQlzdGF0ZS0+dmlzaWJsZSA9IGZhbHNlOwotCQln b3RvIGZpbmlzaDsKKwkJcmV0dXJuIDA7CiAJfQogCiAJLyogRG9uJ3QgbW9kaWZ5IGFub3RoZXIg cGlwZSdzIHBsYW5lICovCkBAIC05MTcsMzUgKzkxNiw2IEBAIGludGVsX2NoZWNrX3Nwcml0ZV9w bGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAlkc3QtPnkxID0gY3J0Y195OwogCWRzdC0+ eTIgPSBjcnRjX3kgKyBjcnRjX2g7CiAKLWZpbmlzaDoKLQkvKgotCSAqIElmIHRoZSBzcHJpdGUg aXMgY29tcGxldGVseSBjb3ZlcmluZyB0aGUgcHJpbWFyeSBwbGFuZSwKLQkgKiB3ZSBjYW4gZGlz YWJsZSB0aGUgcHJpbWFyeSBhbmQgc2F2ZSBwb3dlci4KLQkgKi8KLQlpZiAoaW50ZWxfY3J0Yy0+ YWN0aXZlKSB7Ci0JCWludGVsX2NydGMtPmF0b21pYy5mYl9iaXRzIHw9Ci0JCQlJTlRFTF9GUk9O VEJVRkZFUl9TUFJJVEUoaW50ZWxfY3J0Yy0+cGlwZSk7Ci0KLQkJaWYgKGludGVsX3dtX25lZWRf dXBkYXRlKHBsYW5lLCAmc3RhdGUtPmJhc2UpKQotCQkJaW50ZWxfY3J0Yy0+YXRvbWljLnVwZGF0 ZV93bSA9IHRydWU7Ci0KLQkJaWYgKCFzdGF0ZS0+dmlzaWJsZSkgewotCQkJLyoKLQkJCSAqIEF2 b2lkIHVuZGVycnVucyB3aGVuIGRpc2FibGluZyB0aGUgc3ByaXRlLgotCQkJICogRklYTUUgcmVt b3ZlIG9uY2Ugd2F0ZXJtYXJrIHVwZGF0ZXMgYXJlIGRvbmUgcHJvcGVybHkuCi0JCQkgKi8KLQkJ CWludGVsX2NydGMtPmF0b21pYy53YWl0X3ZibGFuayA9IHRydWU7Ci0JCQlpbnRlbF9jcnRjLT5h dG9taWMudXBkYXRlX3Nwcml0ZV93YXRlcm1hcmtzIHw9Ci0JCQkJKDEgPDwgZHJtX3BsYW5lX2lu ZGV4KHBsYW5lKSk7Ci0JCX0KLQl9Ci0KLQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gOSkg ewotCQlyZXQgPSBza2xfdXBkYXRlX3NjYWxlcl9wbGFuZShjcnRjX3N0YXRlLCBpbnRlbF9wbGFu ZSwgc3RhdGUpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KIAlyZXR1cm4gMDsK IH0KIAotLSAKMi4xLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwt Z2Z4Cg==