From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Anholt Subject: [PATCH 4/7] drm/vc4: Add support for branching in shader validation. Date: Mon, 4 Jul 2016 18:14:37 -0700 Message-ID: <1467681280-20317-5-git-send-email-eric@anholt.net> References: <1467681280-20317-1-git-send-email-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from anholt.net (anholt.net [50.246.234.109]) by gabe.freedesktop.org (Postfix) with ESMTP id ECA976E558 for ; Tue, 5 Jul 2016 01:14:45 +0000 (UTC) In-Reply-To: <1467681280-20317-1-git-send-email-eric@anholt.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: linux-kernel@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org V2UncmUgYWxyZWFkeSBjaGVja2luZyB0aGF0IGJyYW5jaCBpbnN0cnVjdGlvbnMgYXJlIGJldHdl ZW4gdGhlIHN0YXJ0Cm9mIHRoZSBzaGFkZXIgYW5kIHRoZSBwcm9wZXIgUFJPR19FTkQgc2VxdWVu Y2UuICBUaGUgb3RoZXIgdGhpbmcgd2UKbmVlZCB0byBtYWtlIGJyYW5jaGluZyBzYWZlIGlzIHRv IHZlcmlmeSB0aGF0IHRoZSBzaGFkZXIgZG9lc24ndCByZWFkCnBhc3QgdGhlIGVuZCBvZiB0aGUg dW5pZm9ybXMgc3RyZWFtLgoKVG8gZG8gdGhhdCwgd2UgcmVxdWlyZSB0aGF0IGF0IGFueSBiYXNp YyBibG9jayByZWFkaW5nIHVuaWZvcm1zIGhhdmUKdGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbnM6 Cgpsb2FkX2ltbSB0ZW1wLCA8bmV4dCBvZmZzZXQgd2l0aGluIHVuaWZvcm0gc3RyZWFtPgphZGQg dW5pZl9hZGRyLCB0ZW1wLCB1bmlmCgpUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBnZW5lcmF0ZWQgYnkg dXNlcnNwYWNlLCBhbmQgdGhlIGtlcm5lbCB2ZXJpZmllcwp0aGF0IHRoZSBsb2FkX2ltbSBpcyBv ZiB0aGUgZXhwZWN0ZWQgb2Zmc2V0LCBhbmQgdGhhdCB0aGUgYWRkIGFkZHMgaXQKdG8gYSB1bmlm b3JtLiAgV2UgdHJhY2sgd2hpY2ggdW5pZm9ybSBpbiB0aGUgc3RyZWFtIHRoYXQgaXMsIGFuZCBh dApkcmF3IGNhbGwgdGltZSBmaXggdXAgdGhlIHVuaWZvcm0gc3RyZWFtIHRvIGhhdmUgdGhlIGFk ZHJlc3Mgb2YgdGhlCnN0YXJ0IG9mIHRoZSBzaGFkZXIncyB1bmlmb3JtcyBhdCB0aGF0IGxvY2F0 aW9uLgoKU2lnbmVkLW9mZi1ieTogRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KLS0tCiBk cml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaCAgICAgICAgICAgICAgfCAgIDMgKwogZHJpdmVy cy9ncHUvZHJtL3ZjNC92YzRfcXB1X2RlZmluZXMuaCAgICAgIHwgICAzICsKIGRyaXZlcnMvZ3B1 L2RybS92YzQvdmM0X3ZhbGlkYXRlLmMgICAgICAgICB8ICAxMyArLQogZHJpdmVycy9ncHUvZHJt L3ZjNC92YzRfdmFsaWRhdGVfc2hhZGVycy5jIHwgMjgxICsrKysrKysrKysrKysrKysrKysrKysr KysrKy0tCiA0IGZpbGVzIGNoYW5nZWQsIDI4MyBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaCBiL2RyaXZlcnMv Z3B1L2RybS92YzQvdmM0X2Rydi5oCmluZGV4IDM3Y2FjNTk0MDFkNy4uZWZjNjFhMDkxNjJlIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vdmM0L3ZjNF9kcnYuaApAQCAtMzU1LDYgKzM1NSw5IEBAIHN0cnVjdCB2YzRfdmFsaWRh dGVkX3NoYWRlcl9pbmZvIHsKIAl1aW50MzJfdCB1bmlmb3Jtc19zcmNfc2l6ZTsKIAl1aW50MzJf dCBudW1fdGV4dHVyZV9zYW1wbGVzOwogCXN0cnVjdCB2YzRfdGV4dHVyZV9zYW1wbGVfaW5mbyAq dGV4dHVyZV9zYW1wbGVzOworCisJdWludDMyX3QgbnVtX3VuaWZvcm1fYWRkcl9vZmZzZXRzOwor CXVpbnQzMl90ICp1bmlmb3JtX2FkZHJfb2Zmc2V0czsKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcXB1X2RlZmluZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS92 YzQvdmM0X3FwdV9kZWZpbmVzLmgKaW5kZXggODJlZjBlNTI1ZDU1Li42ZDA3NDU3MjBhMTcgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3FwdV9kZWZpbmVzLmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL3ZjNC92YzRfcXB1X2RlZmluZXMuaApAQCAtMjcwLDYgKzI3MCw5IEBAIGVu dW0gcXB1X3VucGFja19yNCB7CiAjZGVmaW5lIFFQVV9PUF9BRERfU0hJRlQgICAgICAgICAgICAg ICAgMjQKICNkZWZpbmUgUVBVX09QX0FERF9NQVNLICAgICAgICAgICAgICAgICBRUFVfTUFTSygy OCwgMjQpCiAKKyNkZWZpbmUgUVBVX0xPQURfSU1NX1NISUZUICAgICAgICAgICAgICAwCisjZGVm aW5lIFFQVV9MT0FEX0lNTV9NQVNLICAgICAgICAgICAgICAgUVBVX01BU0soMzEsIDApCisKICNk ZWZpbmUgUVBVX0JSQU5DSF9UQVJHRVRfU0hJRlQgICAgICAgICAwCiAjZGVmaW5lIFFQVV9CUkFO Q0hfVEFSR0VUX01BU0sgICAgICAgICAgUVBVX01BU0soMzEsIDApCiAKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS92YzQvdmM0X3ZhbGlkYXRlLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3Zj NF92YWxpZGF0ZS5jCmluZGV4IDI0YzJjNzQ2ZThmMy4uOWNlMWQwYWRmODgyIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF92YWxpZGF0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS92YzQvdmM0X3ZhbGlkYXRlLmMKQEAgLTgwMiw3ICs4MDIsNyBAQCB2YWxpZGF0ZV9nbF9zaGFk ZXJfcmVjKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCXVpbnQzMl90IHNyY19vZmZzZXQgPSAq KHVpbnQzMl90ICopKHBrdF91ICsgbyk7CiAJCXVpbnQzMl90ICp0ZXh0dXJlX2hhbmRsZXNfdTsK IAkJdm9pZCAqdW5pZm9ybV9kYXRhX3U7Ci0JCXVpbnQzMl90IHRleDsKKwkJdWludDMyX3QgdGV4 LCB1bmk7CiAKIAkJKih1aW50MzJfdCAqKShwa3RfdiArIG8pID0gYm9baV0tPnBhZGRyICsgc3Jj X29mZnNldDsKIApAQCAtODQwLDYgKzg0MCwxNyBAQCB2YWxpZGF0ZV9nbF9zaGFkZXJfcmVjKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQl9CiAJCX0KIAorCQkvKiBGaWxsIGluIHRoZSB1bmlm b3JtIHNsb3RzIHRoYXQgbmVlZCB0aGlzIHNoYWRlcidzCisJCSAqIHN0YXJ0LW9mLXVuaWZvcm1z IGFkZHJlc3MgKHVzZWQgZm9yIHJlc2V0dGluZyB0aGUgdW5pZm9ybQorCQkgKiBzdHJlYW0gaW4g dGhlIHByZXNlbmNlIG9mIGNvbnRyb2wgZmxvdykuCisJCSAqLworCQlmb3IgKHVuaSA9IDA7CisJ CSAgICAgdW5pIDwgdmFsaWRhdGVkX3NoYWRlci0+bnVtX3VuaWZvcm1fYWRkcl9vZmZzZXRzOwor CQkgICAgIHVuaSsrKSB7CisJCQl1aW50MzJfdCBvID0gdmFsaWRhdGVkX3NoYWRlci0+dW5pZm9y bV9hZGRyX29mZnNldHNbdW5pXTsKKwkJCSgodWludDMyX3QgKilleGVjLT51bmlmb3Jtc192KVtv XSA9IGV4ZWMtPnVuaWZvcm1zX3A7CisJCX0KKwogCQkqKHVpbnQzMl90ICopKHBrdF92ICsgbyAr IDQpID0gZXhlYy0+dW5pZm9ybXNfcDsKIAogCQlleGVjLT51bmlmb3Jtc191ICs9IHZhbGlkYXRl ZF9zaGFkZXItPnVuaWZvcm1zX3NyY19zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3ZjNC92YzRfdmFsaWRhdGVfc2hhZGVycy5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfdmFs aWRhdGVfc2hhZGVycy5jCmluZGV4IGJjZjNjMzFiMjc2NS4uMzAyY2U2OGUyNGNkIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF92YWxpZGF0ZV9zaGFkZXJzLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL3ZjNC92YzRfdmFsaWRhdGVfc2hhZGVycy5jCkBAIC0zOSw2ICszOSw4IEBA CiAjaW5jbHVkZSAidmM0X2Rydi5oIgogI2luY2x1ZGUgInZjNF9xcHVfZGVmaW5lcy5oIgogCisj ZGVmaW5lIExJVkVfUkVHX0NPVU5UICgzMiArIDMyICsgNCkKKwogc3RydWN0IHZjNF9zaGFkZXJf dmFsaWRhdGlvbl9zdGF0ZSB7CiAJLyogQ3VycmVudCBJUCBiZWluZyB2YWxpZGF0ZWQuICovCiAJ dWludDMyX3QgaXA7CkBAIC01Nyw4ICs1OSw5IEBAIHN0cnVjdCB2YzRfc2hhZGVyX3ZhbGlkYXRp b25fc3RhdGUgewogCSAqCiAJICogVGhpcyBpcyB1c2VkIGZvciB0aGUgdmFsaWRhdGlvbiBvZiBk aXJlY3QgYWRkcmVzcyBtZW1vcnkgcmVhZHMuCiAJICovCi0JdWludDMyX3QgbGl2ZV9taW5fY2xh bXBfb2Zmc2V0c1szMiArIDMyICsgNF07Ci0JYm9vbCBsaXZlX21heF9jbGFtcF9yZWdzWzMyICsg MzIgKyA0XTsKKwl1aW50MzJfdCBsaXZlX21pbl9jbGFtcF9vZmZzZXRzW0xJVkVfUkVHX0NPVU5U XTsKKwlib29sIGxpdmVfbWF4X2NsYW1wX3JlZ3NbTElWRV9SRUdfQ09VTlRdOworCXVpbnQzMl90 IGxpdmVfaW1tZWRpYXRlc1tMSVZFX1JFR19DT1VOVF07CiAKIAkvKiBCaXRmaWVsZCBvZiB3aGlj aCBJUHMgYXJlIHVzZWQgYXMgYnJhbmNoIHRhcmdldHMuCiAJICoKQEAgLTY2LDYgKzY5LDIwIEBA IHN0cnVjdCB2YzRfc2hhZGVyX3ZhbGlkYXRpb25fc3RhdGUgewogCSAqIHBvaW50cyBhbmQgY2xl YXJpbmcgdGhlIHRleHR1cmluZy9jbGFtcGluZyBzdGF0ZS4KIAkgKi8KIAl1bnNpZ25lZCBsb25n ICpicmFuY2hfdGFyZ2V0czsKKworCS8qIFNldCB3aGVuIGVudGVyaW5nIGEgYmFzaWMgYmxvY2ss IGFuZCBjbGVhcmVkIHdoZW4gdGhlIHVuaWZvcm0KKwkgKiBhZGRyZXNzIHVwZGF0ZSBpcyBmb3Vu ZC4gIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkb24ndAorCSAqIHJlYWQgdW5p Zm9ybXMgd2hlbiB0aGUgYWRkcmVzcyBpcyB1bmRlZmluZWQuCisJICovCisJYm9vbCBuZWVkc191 bmlmb3JtX2FkZHJlc3NfdXBkYXRlOworCisJLyogU2V0IHdoZW4gd2UgZmluZCBhIGJhY2t3YXJk cyBicmFuY2guICBJZiB0aGUgYnJhbmNoIGlzIGJhY2t3YXJkcywKKwkgKiB0aGUgdGFyYWdldCBp cyBwcm9iYWJseSBkb2luZyBhbiBhZGRyZXNzIHJlc2V0IHRvIHJlYWQgdW5pZm9ybXMsCisJICog YW5kIHNvIHdlIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGEgdW5pZm9ybXMgYWRkcmVzcyBpcyBwcmVz ZW50IGluIHRoZQorCSAqIHN0cmVhbSwgZXZlbiBpZiB0aGUgc2hhZGVyIGRpZG4ndCBuZWVkIHRv IHJlYWQgdW5pZm9ybXMgaW4gbGF0ZXIKKwkgKiBiYXNpYyBibG9ja3MuCisJICovCisJYm9vbCBu ZWVkc191bmlmb3JtX2FkZHJlc3NfZm9yX2xvb3A7CiB9OwogCiBzdGF0aWMgdWludDMyX3QKQEAg LTIyNyw4ICsyNDQsMTQgQEAgY2hlY2tfdG11X3dyaXRlKHN0cnVjdCB2YzRfdmFsaWRhdGVkX3No YWRlcl9pbmZvICp2YWxpZGF0ZWRfc2hhZGVyLAogCS8qIFNpbmNlIGRpcmVjdCB1c2VzIGEgUkFE RFIgdW5pZm9ybSByZWZlcmVuY2UsIGl0IHdpbGwgZ2V0IGNvdW50ZWQgaW4KIAkgKiBjaGVja19p bnN0cnVjdGlvbl9yZWFkcygpCiAJICovCi0JaWYgKCFpc19kaXJlY3QpCisJaWYgKCFpc19kaXJl Y3QpIHsKKwkJaWYgKHZhbGlkYXRpb25fc3RhdGUtPm5lZWRzX3VuaWZvcm1fYWRkcmVzc191cGRh dGUpIHsKKwkJCURSTV9FUlJPUigiVGV4dHVyaW5nIHdpdGggdW5kZWZpbmVkIHVuaWZvcm0gYWRk cmVzc1xuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwogCQl2YWxpZGF0ZWRfc2hhZGVyLT51 bmlmb3Jtc19zaXplICs9IDQ7CisJfQogCiAJaWYgKHN1Ym1pdCkgewogCQlpZiAoIXJlY29yZF90 ZXh0dXJlX3NhbXBsZSh2YWxpZGF0ZWRfc2hhZGVyLApAQCAtMjQyLDYgKzI2NSw5OCBAQCBjaGVj a190bXVfd3JpdGUoc3RydWN0IHZjNF92YWxpZGF0ZWRfc2hhZGVyX2luZm8gKnZhbGlkYXRlZF9z aGFkZXIsCiAJcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyBib29sIHJlcXVpcmVfdW5pZm9ybV9h ZGRyZXNzX3VuaWZvcm0oc3RydWN0IHZjNF92YWxpZGF0ZWRfc2hhZGVyX2luZm8gKnZhbGlkYXRl ZF9zaGFkZXIpCit7CisJdWludDMyX3QgbyA9IHZhbGlkYXRlZF9zaGFkZXItPm51bV91bmlmb3Jt X2FkZHJfb2Zmc2V0czsKKwl1aW50MzJfdCBudW1fdW5pZm9ybXMgPSB2YWxpZGF0ZWRfc2hhZGVy LT51bmlmb3Jtc19zaXplIC8gNDsKKworCXZhbGlkYXRlZF9zaGFkZXItPnVuaWZvcm1fYWRkcl9v ZmZzZXRzID0KKwkJa3JlYWxsb2ModmFsaWRhdGVkX3NoYWRlci0+dW5pZm9ybV9hZGRyX29mZnNl dHMsCisJCQkgKG8gKyAxKSAqCisJCQkgc2l6ZW9mKCp2YWxpZGF0ZWRfc2hhZGVyLT51bmlmb3Jt X2FkZHJfb2Zmc2V0cyksCisJCQkgR0ZQX0tFUk5FTCk7CisJaWYgKCF2YWxpZGF0ZWRfc2hhZGVy LT51bmlmb3JtX2FkZHJfb2Zmc2V0cykKKwkJcmV0dXJuIGZhbHNlOworCisJdmFsaWRhdGVkX3No YWRlci0+dW5pZm9ybV9hZGRyX29mZnNldHNbb10gPSBudW1fdW5pZm9ybXM7CisJdmFsaWRhdGVk X3NoYWRlci0+bnVtX3VuaWZvcm1fYWRkcl9vZmZzZXRzKys7CisKKwlyZXR1cm4gdHJ1ZTsKK30K Kworc3RhdGljIGJvb2wKK3ZhbGlkYXRlX3VuaWZvcm1fYWRkcmVzc193cml0ZShzdHJ1Y3QgdmM0 X3ZhbGlkYXRlZF9zaGFkZXJfaW5mbyAqdmFsaWRhdGVkX3NoYWRlciwKKwkJCSAgICAgICBzdHJ1 Y3QgdmM0X3NoYWRlcl92YWxpZGF0aW9uX3N0YXRlICp2YWxpZGF0aW9uX3N0YXRlLAorCQkJICAg ICAgIGJvb2wgaXNfbXVsKQoreworCXVpbnQ2NF90IGluc3QgPSB2YWxpZGF0aW9uX3N0YXRlLT5z aGFkZXJbdmFsaWRhdGlvbl9zdGF0ZS0+aXBdOworCXUzMiBhZGRfYiA9IFFQVV9HRVRfRklFTEQo aW5zdCwgUVBVX0FERF9CKTsKKwl1MzIgcmFkZHJfYSA9IFFQVV9HRVRfRklFTEQoaW5zdCwgUVBV X1JBRERSX0EpOworCXUzMiByYWRkcl9iID0gUVBVX0dFVF9GSUVMRChpbnN0LCBRUFVfUkFERFJf Qik7CisJdTMyIGFkZF9scmkgPSByYWRkcl9hZGRfYV90b19saXZlX3JlZ19pbmRleChpbnN0KTsK KwkvKiBXZSB3YW50IG91ciByZXNldCB0byBiZSBwb2ludGluZyBhdCB3aGF0ZXZlciB1bmlmb3Jt IGZvbGxvd3MgdGhlCisJICogdW5pZm9ybXMgYmFzZSBhZGRyZXNzLgorCSAqLworCXUzMiBleHBl Y3RlZF9vZmZzZXQgPSB2YWxpZGF0ZWRfc2hhZGVyLT51bmlmb3Jtc19zaXplICsgNDsKKworCS8q IFdlIG9ubHkgc3VwcG9ydCBhYnNvbHV0ZSB1bmlmb3JtIGFkZHJlc3MgY2hhbmdlcywgYW5kIHdl CisJICogcmVxdWlyZSB0aGF0IHRoZXkgYmUgaW4gdGhlIGN1cnJlbnQgYmFzaWMgYmxvY2sgYmVm b3JlIGFueQorCSAqIG9mIGl0cyB1bmlmb3JtIHJlYWRzLgorCSAqCisJICogT25lIGNvdWxkIHBv dGVudGlhbGx5IGVtaXQgbW9yZSBlZmZpY2llbnQgUVBVIGNvZGUsIGJ5CisJICogbm90aWNpbmcg dGhhdCAoc2F5KSBhbiBpZiBzdGF0ZW1lbnQgZG9lcyB1bmlmb3JtIGNvbnRyb2wKKwkgKiBmbG93 IGZvciBhbGwgdGhyZWFkcyBhbmQgdGhhdCB0aGUgaWYgcmVhZHMgdGhlIHNhbWUgbnVtYmVyCisJ ICogb2YgdW5pZm9ybXMgb24gZWFjaCBzaWRlLiAgSG93ZXZlciwgdGhpcyBzY2hlbWUgaXMgZWFz eSB0bworCSAqIHZhbGlkYXRlIHNvIGl0J3MgYWxsIHdlIGFsbG93IGZvciBub3cuCisJICovCisK KwlpZiAoUVBVX0dFVF9GSUVMRChpbnN0LCBRUFVfU0lHKSAhPSBRUFVfU0lHX05PTkUpIHsKKwkJ RFJNX0VSUk9SKCJ1bmlmb3JtcyBhZGRyZXNzIGNoYW5nZSBtdXN0IGJlICIKKwkJCSAgIm5vcm1h bCBtYXRoXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChpc19tdWwgfHwgUVBVX0dF VF9GSUVMRChpbnN0LCBRUFVfT1BfQUREKSAhPSBRUFVfQV9BREQpIHsKKwkJRFJNX0VSUk9SKCJV bmlmb3JtIGFkZHJlc3MgcmVzZXQgbXVzdCBiZSBhbiBBREQuXG4iKTsKKwkJcmV0dXJuIGZhbHNl OworCX0KKworCWlmIChRUFVfR0VUX0ZJRUxEKGluc3QsIFFQVV9DT05EX0FERCkgIT0gUVBVX0NP TkRfQUxXQVlTKSB7CisJCURSTV9FUlJPUigiVW5pZm9ybSBhZGRyZXNzIHJlc2V0IG11c3QgYmUg dW5jb25kaXRpb25hbC5cbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKFFQVV9HRVRf RklFTEQoaW5zdCwgUVBVX1BBQ0spICE9IFFQVV9QQUNLX0FfTk9QICYmCisJICAgICEoaW5zdCAm IFFQVV9QTSkpIHsKKwkJRFJNX0VSUk9SKCJObyBwYWNraW5nIGFsbG93ZWQgb24gdW5pZm9ybXMg cmVzZXRcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKGFkZF9scmkgPT0gLTEpIHsK KwkJRFJNX0VSUk9SKCJGaXJzdCBhcmd1bWVudCBvZiB1bmlmb3JtIGFkZHJlc3Mgd3JpdGUgbXVz dCBiZSAiCisJCQkgICJhbiBpbW1lZGlhdGUgdmFsdWUuXG4iKTsKKwkJcmV0dXJuIGZhbHNlOwor CX0KKworCWlmICh2YWxpZGF0aW9uX3N0YXRlLT5saXZlX2ltbWVkaWF0ZXNbYWRkX2xyaV0gIT0g ZXhwZWN0ZWRfb2Zmc2V0KSB7CisJCURSTV9FUlJPUigiUmVzZXR0aW5nIHVuaWZvcm1zIHdpdGgg b2Zmc2V0ICVkYiBpbnN0ZWFkIG9mICVkYlxuIiwKKwkJCSAgdmFsaWRhdGlvbl9zdGF0ZS0+bGl2 ZV9pbW1lZGlhdGVzW2FkZF9scmldLAorCQkJICBleHBlY3RlZF9vZmZzZXQpOworCQlyZXR1cm4g ZmFsc2U7CisJfQorCisJaWYgKCEoYWRkX2IgPT0gUVBVX01VWF9BICYmIHJhZGRyX2EgPT0gUVBV X1JfVU5JRikgJiYKKwkgICAgIShhZGRfYiA9PSBRUFVfTVVYX0IgJiYgcmFkZHJfYiA9PSBRUFVf Ul9VTklGKSkgeworCQlEUk1fRVJST1IoIlNlY29uZCBhcmd1bWVudCBvZiB1bmlmb3JtIGFkZHJl c3Mgd3JpdGUgbXVzdCBiZSAiCisJCQkgICJhIHVuaWZvcm0uXG4iKTsKKwkJcmV0dXJuIGZhbHNl OworCX0KKworCXZhbGlkYXRpb25fc3RhdGUtPm5lZWRzX3VuaWZvcm1fYWRkcmVzc191cGRhdGUg PSBmYWxzZTsKKwl2YWxpZGF0aW9uX3N0YXRlLT5uZWVkc191bmlmb3JtX2FkZHJlc3NfZm9yX2xv b3AgPSBmYWxzZTsKKwlyZXR1cm4gcmVxdWlyZV91bmlmb3JtX2FkZHJlc3NfdW5pZm9ybSh2YWxp ZGF0ZWRfc2hhZGVyKTsKK30KKwogc3RhdGljIGJvb2wKIGNoZWNrX3JlZ193cml0ZShzdHJ1Y3Qg dmM0X3ZhbGlkYXRlZF9zaGFkZXJfaW5mbyAqdmFsaWRhdGVkX3NoYWRlciwKIAkJc3RydWN0IHZj NF9zaGFkZXJfdmFsaWRhdGlvbl9zdGF0ZSAqdmFsaWRhdGlvbl9zdGF0ZSwKQEAgLTI1MSwxNCAr MzY2LDM3IEBAIGNoZWNrX3JlZ193cml0ZShzdHJ1Y3QgdmM0X3ZhbGlkYXRlZF9zaGFkZXJfaW5m byAqdmFsaWRhdGVkX3NoYWRlciwKIAl1aW50MzJfdCB3YWRkciA9IChpc19tdWwgPwogCQkJICBR UFVfR0VUX0ZJRUxEKGluc3QsIFFQVV9XQUREUl9NVUwpIDoKIAkJCSAgUVBVX0dFVF9GSUVMRChp bnN0LCBRUFVfV0FERFJfQUREKSk7CisJdWludDMyX3Qgc2lnID0gUVBVX0dFVF9GSUVMRChpbnN0 LCBRUFVfU0lHKTsKKwlib29sIHdzID0gaW5zdCAmIFFQVV9XUzsKKwlib29sIGlzX2IgPSBpc19t dWwgXiB3czsKKwl1MzIgbHJpID0gd2FkZHJfdG9fbGl2ZV9yZWdfaW5kZXgod2FkZHIsIGlzX2Ip OworCisJaWYgKGxyaSAhPSAtMSkgeworCQl1aW50MzJfdCBjb25kX2FkZCA9IFFQVV9HRVRfRklF TEQoaW5zdCwgUVBVX0NPTkRfQUREKTsKKwkJdWludDMyX3QgY29uZF9tdWwgPSBRUFVfR0VUX0ZJ RUxEKGluc3QsIFFQVV9DT05EX01VTCk7CisKKwkJaWYgKHNpZyA9PSBRUFVfU0lHX0xPQURfSU1N ICYmCisJCSAgICBRUFVfR0VUX0ZJRUxEKGluc3QsIFFQVV9QQUNLKSA9PSBRUFVfUEFDS19BX05P UCAmJgorCQkgICAgKChpc19tdWwgJiYgY29uZF9tdWwgPT0gUVBVX0NPTkRfQUxXQVlTKSB8fAor CQkgICAgICghaXNfbXVsICYmIGNvbmRfYWRkID09IFFQVV9DT05EX0FMV0FZUykpKSB7CisJCQl2 YWxpZGF0aW9uX3N0YXRlLT5saXZlX2ltbWVkaWF0ZXNbbHJpXSA9CisJCQkJUVBVX0dFVF9GSUVM RChpbnN0LCBRUFVfTE9BRF9JTU0pOworCQl9IGVsc2UgeworCQkJdmFsaWRhdGlvbl9zdGF0ZS0+ bGl2ZV9pbW1lZGlhdGVzW2xyaV0gPSB+MDsKKwkJfQorCX0KIAogCXN3aXRjaCAod2FkZHIpIHsK IAljYXNlIFFQVV9XX1VOSUZPUk1TX0FERFJFU1M6Ci0JCS8qIFhYWDogV2UnbGwgcHJvYmFibHkg bmVlZCB0byBzdXBwb3J0IHRoaXMgZm9yIHJlbGFkZHIsIGJ1dAotCQkgKiBpdCdzIGRlZmluaXRl bHkgYSBzZWN1cml0eS1yZWxhdGVkIG9uZS4KLQkJICovCi0JCURSTV9FUlJPUigidW5pZm9ybXMg YWRkcmVzcyBsb2FkIHVuc3VwcG9ydGVkXG4iKTsKLQkJcmV0dXJuIGZhbHNlOworCQlpZiAoaXNf YikgeworCQkJRFJNX0VSUk9SKCJyZWxhdGl2ZSB1bmlmb3JtcyBhZGRyZXNzIGNoYW5nZSAiCisJ CQkJICAidW5zdXBwb3J0ZWRcbiIpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJcmV0dXJu IHZhbGlkYXRlX3VuaWZvcm1fYWRkcmVzc193cml0ZSh2YWxpZGF0ZWRfc2hhZGVyLAorCQkJCQkJ ICAgICAgdmFsaWRhdGlvbl9zdGF0ZSwKKwkJCQkJCSAgICAgIGlzX211bCk7CiAKIAljYXNlIFFQ VV9XX1RMQl9DT0xPUl9NUzoKIAljYXNlIFFQVV9XX1RMQl9DT0xPUl9BTEw6CkBAIC00MDYsOSAr NTQ0LDM1IEBAIGNoZWNrX2luc3RydWN0aW9uX3dyaXRlcyhzdHJ1Y3QgdmM0X3ZhbGlkYXRlZF9z aGFkZXJfaW5mbyAqdmFsaWRhdGVkX3NoYWRlciwKIH0KIAogc3RhdGljIGJvb2wKLWNoZWNrX2lu c3RydWN0aW9uX3JlYWRzKHVpbnQ2NF90IGluc3QsCi0JCQlzdHJ1Y3QgdmM0X3ZhbGlkYXRlZF9z aGFkZXJfaW5mbyAqdmFsaWRhdGVkX3NoYWRlcikKK2NoZWNrX2JyYW5jaCh1aW50NjRfdCBpbnN0 LAorCSAgICAgc3RydWN0IHZjNF92YWxpZGF0ZWRfc2hhZGVyX2luZm8gKnZhbGlkYXRlZF9zaGFk ZXIsCisJICAgICBzdHJ1Y3QgdmM0X3NoYWRlcl92YWxpZGF0aW9uX3N0YXRlICp2YWxpZGF0aW9u X3N0YXRlLAorCSAgICAgaW50IGlwKQoreworCWludDMyX3QgYnJhbmNoX2ltbSA9IFFQVV9HRVRf RklFTEQoaW5zdCwgUVBVX0JSQU5DSF9UQVJHRVQpOworCXVpbnQzMl90IHdhZGRyX2FkZCA9IFFQ VV9HRVRfRklFTEQoaW5zdCwgUVBVX1dBRERSX0FERCk7CisJdWludDMyX3Qgd2FkZHJfbXVsID0g UVBVX0dFVF9GSUVMRChpbnN0LCBRUFVfV0FERFJfTVVMKTsKKworCWlmICgoaW50KWJyYW5jaF9p bW0gPCAwKQorCQl2YWxpZGF0aW9uX3N0YXRlLT5uZWVkc191bmlmb3JtX2FkZHJlc3NfZm9yX2xv b3AgPSB0cnVlOworCisJLyogV2UgZG9uJ3Qgd2FudCB0byBoYXZlIHRvIHdvcnJ5IGFib3V0IHZh bGlkYXRpb24gb2YgdGhpcywgYW5kCisJICogdGhlcmUncyBubyBuZWVkIGZvciBpdC4KKwkgKi8K KwlpZiAod2FkZHJfYWRkICE9IFFQVV9XX05PUCB8fCB3YWRkcl9tdWwgIT0gUVBVX1dfTk9QKSB7 CisJCURSTV9FUlJPUigiYnJhbmNoIGluc3RydWN0aW9uIGF0ICVkIHdyb3RlIGEgcmVnaXN0ZXIu XG4iLAorCQkJICB2YWxpZGF0aW9uX3N0YXRlLT5pcCk7CisJCXJldHVybiBmYWxzZTsKKwl9CisK KwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wKK2NoZWNrX2luc3RydWN0aW9uX3JlYWRz KHN0cnVjdCB2YzRfdmFsaWRhdGVkX3NoYWRlcl9pbmZvICp2YWxpZGF0ZWRfc2hhZGVyLAorCQkJ c3RydWN0IHZjNF9zaGFkZXJfdmFsaWRhdGlvbl9zdGF0ZSAqdmFsaWRhdGlvbl9zdGF0ZSkKIHsK Kwl1aW50NjRfdCBpbnN0ID0gdmFsaWRhdGlvbl9zdGF0ZS0+c2hhZGVyW3ZhbGlkYXRpb25fc3Rh dGUtPmlwXTsKIAl1aW50MzJfdCByYWRkcl9hID0gUVBVX0dFVF9GSUVMRChpbnN0LCBRUFVfUkFE RFJfQSk7CiAJdWludDMyX3QgcmFkZHJfYiA9IFFQVV9HRVRfRklFTEQoaW5zdCwgUVBVX1JBRERS X0IpOwogCXVpbnQzMl90IHNpZyA9IFFQVV9HRVRfRklFTEQoaW5zdCwgUVBVX1NJRyk7CkBAIC00 MjAsNiArNTg0LDEyIEBAIGNoZWNrX2luc3RydWN0aW9uX3JlYWRzKHVpbnQ2NF90IGluc3QsCiAJ CSAqIGFscmVhZHkgYmUgT09NLgogCQkgKi8KIAkJdmFsaWRhdGVkX3NoYWRlci0+dW5pZm9ybXNf c2l6ZSArPSA0OworCisJCWlmICh2YWxpZGF0aW9uX3N0YXRlLT5uZWVkc191bmlmb3JtX2FkZHJl c3NfdXBkYXRlKSB7CisJCQlEUk1fRVJST1IoIlVuaWZvcm0gcmVhZCB3aXRoIHVuZGVmaW5lZCB1 bmlmb3JtICIKKwkJCQkgICJhZGRyZXNzXG4iKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQogCX0K IAogCXJldHVybiB0cnVlOwpAQCAtNTE2LDYgKzY4Niw2NSBAQCB2YzRfdmFsaWRhdGVfYnJhbmNo ZXMoc3RydWN0IHZjNF9zaGFkZXJfdmFsaWRhdGlvbl9zdGF0ZSAqdmFsaWRhdGlvbl9zdGF0ZSkK IAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyogUmVzZXRzIGFueSBrbm93biBzdGF0ZSBmb3IgdGhlIHNo YWRlciwgdXNlZCB3aGVuIHdlIG1heSBiZSBicmFuY2hlZCB0byBmcm9tCisgKiBtdWx0aXBsZSBs b2NhdGlvbnMgaW4gdGhlIHByb2dyYW0gKG9yIGF0IHNoYWRlciBzdGFydCkuCisgKi8KK3N0YXRp YyB2b2lkCityZXNldF92YWxpZGF0aW9uX3N0YXRlKHN0cnVjdCB2YzRfc2hhZGVyX3ZhbGlkYXRp b25fc3RhdGUgKnZhbGlkYXRpb25fc3RhdGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBp IDwgODsgaSsrKQorCQl2YWxpZGF0aW9uX3N0YXRlLT50bXVfc2V0dXBbaSAvIDRdLnBfb2Zmc2V0 W2kgJSA0XSA9IH4wOworCisJZm9yIChpID0gMDsgaSA8IExJVkVfUkVHX0NPVU5UOyBpKyspIHsK KwkJdmFsaWRhdGlvbl9zdGF0ZS0+bGl2ZV9taW5fY2xhbXBfb2Zmc2V0c1tpXSA9IH4wOworCQl2 YWxpZGF0aW9uX3N0YXRlLT5saXZlX21heF9jbGFtcF9yZWdzW2ldID0gZmFsc2U7CisJCXZhbGlk YXRpb25fc3RhdGUtPmxpdmVfaW1tZWRpYXRlc1tpXSA9IH4wOworCX0KK30KKworc3RhdGljIGJv b2wKK3RleHR1cmluZ19pbl9wcm9ncmVzcyhzdHJ1Y3QgdmM0X3NoYWRlcl92YWxpZGF0aW9uX3N0 YXRlICp2YWxpZGF0aW9uX3N0YXRlKQoreworCXJldHVybiAodmFsaWRhdGlvbl9zdGF0ZS0+dG11 X3dyaXRlX2NvdW50WzBdICE9IDAgfHwKKwkJdmFsaWRhdGlvbl9zdGF0ZS0+dG11X3dyaXRlX2Nv dW50WzFdICE9IDApOworfQorCitzdGF0aWMgYm9vbAordmM0X2hhbmRsZV9icmFuY2hfdGFyZ2V0 KHN0cnVjdCB2YzRfc2hhZGVyX3ZhbGlkYXRpb25fc3RhdGUgKnZhbGlkYXRpb25fc3RhdGUpCit7 CisJdWludDMyX3QgaXAgPSB2YWxpZGF0aW9uX3N0YXRlLT5pcDsKKworCWlmICghdGVzdF9iaXQo aXAsIHZhbGlkYXRpb25fc3RhdGUtPmJyYW5jaF90YXJnZXRzKSkKKwkJcmV0dXJuIHRydWU7CisK KwlpZiAodGV4dHVyaW5nX2luX3Byb2dyZXNzKHZhbGlkYXRpb25fc3RhdGUpKSB7CisJCURSTV9F UlJPUigiQnJhbmNoIHRhcmdldCBsYW5kZWQgZHVyaW5nIFRNVSBzZXR1cFxuIik7CisJCXJldHVy biBmYWxzZTsKKwl9CisKKwkvKiBSZXNldCBvdXIgbGl2ZSB2YWx1ZXMgdHJhY2tpbmcsIHNpbmNl IHRoaXMgaW5zdHJ1Y3Rpb24gbWF5IGhhdmUKKwkgKiBtdWx0aXBsZSBwcmVkZWNlc3NvcnMuCisJ ICoKKwkgKiBPbmUgY291bGQgcG90ZW50aWFsbHkgZG8gYW5hbHlzaXMgdG8gZGV0ZXJtaW5lIHRo YXQsIGZvcgorCSAqIGV4YW1wbGUsIGFsbCBwcmVkZWNlc3NvcnMgaGF2ZSBhIGxpdmUgbWF4IGNs YW1wIGluIHRoZSBzYW1lCisJICogcmVnaXN0ZXIsIGJ1dCB3ZSBkb24ndCBib3RoZXIgd2l0aCB0 aGF0LgorCSAqLworCXJlc2V0X3ZhbGlkYXRpb25fc3RhdGUodmFsaWRhdGlvbl9zdGF0ZSk7CisK KwkvKiBTaW5jZSB3ZSd2ZSBlbnRlcmVkIGEgYmFzaWMgYmxvY2sgZnJvbSBwb3RlbnRpYWxseSBt dWx0aXBsZQorCSAqIHByZWRlY2Vzc29ycywgd2UgbmVlZCB0aGUgdW5pZm9ybXMgYWRkcmVzcyB0 byBiZSB1cGRhdGVkIGJlZm9yZSBhbnkKKwkgKiB1bmZvcm1zIGFyZSByZWFkLiAgV2UgcmVxdWly ZSB0aGF0IGFmdGVyIGFueSBicmFuY2ggcG9pbnQsIHRoZSBuZXh0CisJICogdW5pZm9ybSB0byBi ZSBsb2FkZWQgaXMgYSB1bmlmb3JtIGFkZHJlc3Mgb2Zmc2V0LiAgVGhhdCB1bmlmb3JtJ3MKKwkg KiBvZmZzZXQgd2lsbCBiZSBtYXJrZWQgYnkgdGhlIHVuaWZvcm0gYWRkcmVzcyByZWdpc3RlciB3 cml0ZQorCSAqIHZhbGlkYXRpb24sIG9yIGEgb25lLW9mZiB0aGUgZW5kLW9mLXByb2dyYW0gY2hl Y2suCisJICovCisJdmFsaWRhdGlvbl9zdGF0ZS0+bmVlZHNfdW5pZm9ybV9hZGRyZXNzX3VwZGF0 ZSA9IHRydWU7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RydWN0IHZjNF92YWxpZGF0ZWRfc2hh ZGVyX2luZm8gKgogdmM0X3ZhbGlkYXRlX3NoYWRlcihzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0 ICpzaGFkZXJfb2JqKQogewpAQCAtNTI0LDE2ICs3NTMsMTIgQEAgdmM0X3ZhbGlkYXRlX3NoYWRl cihzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpzaGFkZXJfb2JqKQogCXVpbnQzMl90IGlwOwog CXN0cnVjdCB2YzRfdmFsaWRhdGVkX3NoYWRlcl9pbmZvICp2YWxpZGF0ZWRfc2hhZGVyID0gTlVM TDsKIAlzdHJ1Y3QgdmM0X3NoYWRlcl92YWxpZGF0aW9uX3N0YXRlIHZhbGlkYXRpb25fc3RhdGU7 Ci0JaW50IGk7CiAKIAltZW1zZXQoJnZhbGlkYXRpb25fc3RhdGUsIDAsIHNpemVvZih2YWxpZGF0 aW9uX3N0YXRlKSk7CiAJdmFsaWRhdGlvbl9zdGF0ZS5zaGFkZXIgPSBzaGFkZXJfb2JqLT52YWRk cjsKIAl2YWxpZGF0aW9uX3N0YXRlLm1heF9pcCA9IHNoYWRlcl9vYmotPmJhc2Uuc2l6ZSAvIHNp emVvZih1aW50NjRfdCk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQl2YWxpZGF0aW9u X3N0YXRlLnRtdV9zZXR1cFtpIC8gNF0ucF9vZmZzZXRbaSAlIDRdID0gfjA7Ci0JZm9yIChpID0g MDsgaSA8IEFSUkFZX1NJWkUodmFsaWRhdGlvbl9zdGF0ZS5saXZlX21pbl9jbGFtcF9vZmZzZXRz KTsgaSsrKQotCQl2YWxpZGF0aW9uX3N0YXRlLmxpdmVfbWluX2NsYW1wX29mZnNldHNbaV0gPSB+ MDsKKwlyZXNldF92YWxpZGF0aW9uX3N0YXRlKCZ2YWxpZGF0aW9uX3N0YXRlKTsKIAogCXZhbGlk YXRpb25fc3RhdGUuYnJhbmNoX3RhcmdldHMgPQogCQlrY2FsbG9jKEJJVFNfVE9fTE9OR1ModmFs aWRhdGlvbl9zdGF0ZS5tYXhfaXApLApAQCAtNTU0LDYgKzc3OSw5IEBAIHZjNF92YWxpZGF0ZV9z aGFkZXIoc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqc2hhZGVyX29iaikKIAogCQl2YWxpZGF0 aW9uX3N0YXRlLmlwID0gaXA7CiAKKwkJaWYgKCF2YzRfaGFuZGxlX2JyYW5jaF90YXJnZXQoJnZh bGlkYXRpb25fc3RhdGUpKQorCQkJZ290byBmYWlsOworCiAJCXN3aXRjaCAoc2lnKSB7CiAJCWNh c2UgUVBVX1NJR19OT05FOgogCQljYXNlIFFQVV9TSUdfV0FJVF9GT1JfU0NPUkVCT0FSRDoKQEAg LTU2OSw3ICs3OTcsOCBAQCB2YzRfdmFsaWRhdGVfc2hhZGVyKHN0cnVjdCBkcm1fZ2VtX2NtYV9v YmplY3QgKnNoYWRlcl9vYmopCiAJCQkJZ290byBmYWlsOwogCQkJfQogCi0JCQlpZiAoIWNoZWNr X2luc3RydWN0aW9uX3JlYWRzKGluc3QsIHZhbGlkYXRlZF9zaGFkZXIpKQorCQkJaWYgKCFjaGVj a19pbnN0cnVjdGlvbl9yZWFkcyh2YWxpZGF0ZWRfc2hhZGVyLAorCQkJCQkJICAgICAmdmFsaWRh dGlvbl9zdGF0ZSkpCiAJCQkJZ290byBmYWlsOwogCiAJCQlpZiAoc2lnID09IFFQVV9TSUdfUFJP R19FTkQpIHsKQEAgLTU4Nyw2ICs4MTYsMTEgQEAgdmM0X3ZhbGlkYXRlX3NoYWRlcihzdHJ1Y3Qg ZHJtX2dlbV9jbWFfb2JqZWN0ICpzaGFkZXJfb2JqKQogCQkJfQogCQkJYnJlYWs7CiAKKwkJY2Fz ZSBRUFVfU0lHX0JSQU5DSDoKKwkJCWlmICghY2hlY2tfYnJhbmNoKGluc3QsIHZhbGlkYXRlZF9z aGFkZXIsCisJCQkJCSAgJnZhbGlkYXRpb25fc3RhdGUsIGlwKSkKKwkJCQlnb3RvIGZhaWw7CisJ CQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCURSTV9FUlJPUigiVW5zdXBwb3J0ZWQgUVBVIHNpZ25h bCAlZCBhdCAiCiAJCQkJICAiaW5zdHJ1Y3Rpb24gJWRcbiIsIHNpZywgaXApOwpAQCAtNjA3LDYg Kzg0MSwyMSBAQCB2YzRfdmFsaWRhdGVfc2hhZGVyKHN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3Qg KnNoYWRlcl9vYmopCiAJCWdvdG8gZmFpbDsKIAl9CiAKKwkvKiBJZiB3ZSBkaWQgYSBiYWNrd2Fy ZHMgYnJhbmNoIGFuZCB3ZSBoYXZlbid0IGVtaXR0ZWQgYSB1bmlmb3JtcworCSAqIHJlc2V0IHNp bmNlIHRoZW4sIHdlIHN0aWxsIG5lZWQgdGhlIHVuaWZvcm1zIHN0cmVhbSB0byBoYXZlIHRoZQor CSAqIHVuaWZvcm1zIGFkZHJlc3MgYXZhaWxhYmxlIHNvIHRoYXQgdGhlIGJhY2t3YXJkcyBicmFu Y2ggY2FuIGRvIGl0cworCSAqIHVuaWZvcm1zIHJlc2V0LgorCSAqCisJICogV2UgY291bGQgcG90 ZW50aWFsbHkgcHJvdmUgdGhhdCB0aGUgYmFja3dhcmRzIGJyYW5jaCBkb2Vzbid0CisJICogY29u dGFpbiBhbnkgdXNlcyBvZiB1bmlmb3JtcyB1bnRpbCBwcm9ncmFtIGV4aXQsIGJ1dCB0aGF0IGRv ZXNuJ3QKKwkgKiBzZWVtIHRvIGJlIHdvcnRoIHRoZSB0cm91YmxlLgorCSAqLworCWlmICh2YWxp ZGF0aW9uX3N0YXRlLm5lZWRzX3VuaWZvcm1fYWRkcmVzc19mb3JfbG9vcCkgeworCQlpZiAoIXJl cXVpcmVfdW5pZm9ybV9hZGRyZXNzX3VuaWZvcm0odmFsaWRhdGVkX3NoYWRlcikpCisJCQlnb3Rv IGZhaWw7CisJCXZhbGlkYXRlZF9zaGFkZXItPnVuaWZvcm1zX3NpemUgKz0gNDsKKwl9CisKIAkv KiBBZ2Fpbiwgbm8gY2hhbmNlIG9mIGludGVnZXIgb3ZlcmZsb3cgaGVyZSBiZWNhdXNlIHRoZSB3 b3JzdCBjYXNlCiAJICogc2NlbmFyaW8gaXMgOCBieXRlcyBvZiB1bmlmb3JtcyBwbHVzIGhhbmRs ZXMgcGVyIDgtYnl0ZQogCSAqIGluc3RydWN0aW9uLgotLSAKMi44LjEKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QK ZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=