From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: [PATCH 16/21] drm/i915/selftests: huge page tests Date: Mon, 3 Jul 2017 15:14:58 +0100 Message-ID: <20170703141503.12609-17-matthew.auld@intel.com> References: <20170703141503.12609-1-matthew.auld@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4D28F6E296 for ; Mon, 3 Jul 2017 14:15:28 +0000 (UTC) In-Reply-To: <20170703141503.12609-1-matthew.auld@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 djI6IG1vY2sgdGVzdCBwYWdlIHN1cHBvcnQgY29uZmlndXJhdGlvbnMgYW5kIGFkZCBNSV9TVE9S RV9EV09SRCB0ZXN0Cgp2MzogcnVuIGFsbCBtb2NrYWJsZSBodWdlIHBhZ2UgdGVzdHMgb24gYWxs IHBsYXRmb3JtcyB2aWEgdGhlIG1vY2tfZGV2aWNlCgpTaWduZWQtb2ZmLWJ5OiBNYXR0aGV3IEF1 bGQgPG1hdHRoZXcuYXVsZEBpbnRlbC5jb20+CkNjOiBKb29uYXMgTGFodGluZW4gPGpvb25hcy5s YWh0aW5lbkBsaW51eC5pbnRlbC5jb20+CkNjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdp bHNvbi5jby51az4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAg ICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaHVnZV9w YWdlcy5jICAgICAgICB8IDkzMSArKysrKysrKysrKysrKysrKysrKysKIC4uLi9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL2k5MTVfbGl2ZV9zZWxmdGVzdHMuaCAgIHwgICAxICsKIC4uLi9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaCAgIHwgICAxICsKIDQgZmlsZXMg Y2hhbmdlZCwgOTM0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vaTkxNS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMK aW5kZXggMDlkYTQ2MTc4YzMxLi4xODM2NTdmOWIwOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0u YwpAQCAtNTM3Nyw2ICs1Mzc3LDcgQEAgaTkxNV9nZW1fb2JqZWN0X2dldF9kbWFfYWRkcmVzcyhz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogI2luY2x1ZGUgInNlbGZ0ZXN0cy9zY2F0 dGVybGlzdC5jIgogI2luY2x1ZGUgInNlbGZ0ZXN0cy9tb2NrX2dlbV9kZXZpY2UuYyIKICNpbmNs dWRlICJzZWxmdGVzdHMvaHVnZV9nZW1fb2JqZWN0LmMiCisjaW5jbHVkZSAic2VsZnRlc3RzL2h1 Z2VfcGFnZXMuYyIKICNpbmNsdWRlICJzZWxmdGVzdHMvaTkxNV9nZW1fb2JqZWN0LmMiCiAjaW5j bHVkZSAic2VsZnRlc3RzL2k5MTVfZ2VtX2NvaGVyZW5jeS5jIgogI2VuZGlmCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvc2VsZnRlc3RzL2h1Z2VfcGFnZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLjE1OWU4MjEzYTc2NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9odWdlX3BhZ2VzLmMKQEAgLTAsMCArMSw5MzEgQEAK Ky8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGlu Y2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwg Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgor ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNI QUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI RVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgIi4u L2k5MTVfc2VsZnRlc3QuaCIKKworI2luY2x1ZGUgPGxpbnV4L3ByaW1lX251bWJlcnMuaD4KKwor I2luY2x1ZGUgIm1vY2tfZHJtLmgiCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcGFnZV9z aXplc1tdID0geworCUk5MTVfR1RUX1BBR0VfU0laRV8xRywKKwlJOTE1X0dUVF9QQUdFX1NJWkVf Mk0sCisJSTkxNV9HVFRfUEFHRV9TSVpFXzY0SywKKwlJOTE1X0dUVF9QQUdFX1NJWkVfNEssCit9 OworCitzdGF0aWMgdW5zaWduZWQgaW50IGdldF9sYXJnZXN0X3BhZ2Vfc2l6ZShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSwKKwkJCQkJICBzaXplX3QgcmVtKQoreworCWludCBpOworCisJ Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGFnZV9zaXplcyk7ICsraSkgeworCQl1bnNpZ25l ZCBpbnQgcGFnZV9zaXplID0gcGFnZV9zaXplc1tpXTsKKworCQlpZiAoSEFTX1BBR0VfU0laRShp OTE1LCBwYWdlX3NpemUpICYmIHJlbSA+PSBwYWdlX3NpemUpCisJCQlyZXR1cm4gcGFnZV9zaXpl OworCX0KKworCUdFTV9CVUdfT04oMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2dfdGFibGUgKgor ZmFrZV9nZXRfaHVnZV9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkg ICAgdW5zaWduZWQgaW50ICpzZ19tYXNrKQoreworI2RlZmluZSBHRlAgKEdGUF9LRVJORUwgfCBf X0dGUF9OT1dBUk4gfCBfX0dGUF9OT1JFVFJZKQorCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1ID0gdG9faTkxNShvYmotPmJhc2UuZGV2KTsKKwljb25zdCB1bnNpZ25lZCBsb25nIG1heCA9 IG9iai0+YmFzZS5zaXplID4+IFBBR0VfU0hJRlQ7CisJc3RydWN0IHNnX3RhYmxlICpzdDsKKwlz dHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXNpemVfdCByZW07CisKKwlzdCA9IGttYWxsb2Moc2l6 ZW9mKCpzdCksIEdGUCk7CisJaWYgKCFzdCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisK KwlpZiAoc2dfYWxsb2NfdGFibGUoc3QsIG1heCwgR0ZQKSkgeworCQlrZnJlZShzdCk7CisJCXJl dHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKworCS8qIFVzZSBvcHRpbWFsIHBhZ2Ugc2l6ZWQg Y2h1bmtzIHRvIGZpbGwgaW4gdGhlIHNnIHRhYmxlICovCisJcmVtID0gb2JqLT5iYXNlLnNpemU7 CisJc2cgPSBzdC0+c2dsOworCXN0LT5uZW50cyA9IDA7CisJZG8geworCQl1bnNpZ25lZCBpbnQg cGFnZV9zaXplID0gZ2V0X2xhcmdlc3RfcGFnZV9zaXplKGk5MTUsIHJlbSk7CisJCXVuc2lnbmVk IGludCBsZW4gPSBwYWdlX3NpemUgKiAocmVtIC8gcGFnZV9zaXplKTsKKworCQlzZy0+b2Zmc2V0 ID0gMDsKKwkJc2ctPmxlbmd0aCA9IGxlbjsKKwkJc2dfZG1hX2xlbihzZykgPSBsZW47CisJCXNn X2RtYV9hZGRyZXNzKHNnKSA9IHBhZ2Vfc2l6ZTsKKworCQkqc2dfbWFzayB8PSBsZW47CisKKwkJ c3QtPm5lbnRzKys7CisKKwkJcmVtIC09IGxlbjsKKwkJaWYgKCFyZW0pIHsKKwkJCXNnX21hcmtf ZW5kKHNnKTsKKwkJCWJyZWFrOworCQl9CisKKwkJc2cgPSBzZ19uZXh0KHNnKTsKKwl9IHdoaWxl ICgxKTsKKworCW9iai0+bW0ubWFkdiA9IEk5MTVfTUFEVl9ET05UTkVFRDsKKworCXJldHVybiBz dDsKKyN1bmRlZiBHRlAKK30KKworc3RhdGljIHZvaWQgZmFrZV9mcmVlX2h1Z2VfcGFnZXMoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgc3RydWN0IHNnX3RhYmxlICpwYWdl cykKK3sKKwlzZ19mcmVlX3RhYmxlKHBhZ2VzKTsKKwlrZnJlZShwYWdlcyk7Cit9CisKK3N0YXRp YyB2b2lkIGZha2VfcHV0X2h1Z2VfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiwKKwkJCQlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzKQoreworCWZha2VfZnJlZV9odWdlX3BhZ2Vz KG9iaiwgcGFnZXMpOworCW9iai0+bW0uZGlydHkgPSBmYWxzZTsKKwlvYmotPm1tLm1hZHYgPSBJ OTE1X01BRFZfV0lMTE5FRUQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdF9vcHMgZmFrZV9vcHMgPSB7CisJLmZsYWdzID0gSTkxNV9HRU1fT0JKRUNUX0lTX1NI UklOS0FCTEUsCisJLmdldF9wYWdlcyA9IGZha2VfZ2V0X2h1Z2VfcGFnZXMsCisJLnB1dF9wYWdl cyA9IGZha2VfcHV0X2h1Z2VfcGFnZXMsCit9OworCitzdGF0aWMgc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKgorZmFrZV9odWdlX3BhZ2VzX29iamVjdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSwgdTY0IHNpemUpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsK KworCUdFTV9CVUdfT04oIXNpemUpOworCUdFTV9CVUdfT04oIUlTX0FMSUdORUQoc2l6ZSwgSTkx NV9HVFRfUEFHRV9TSVpFKSk7CisKKwlpZiAob3ZlcmZsb3dzX3R5cGUoc2l6ZSwgb2JqLT5iYXNl LnNpemUpKQorCQlyZXR1cm4gRVJSX1BUUigtRTJCSUcpOworCisJb2JqID0gaTkxNV9nZW1fb2Jq ZWN0X2FsbG9jKGk5MTUpOworCWlmICghb2JqKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsK KworCWRybV9nZW1fcHJpdmF0ZV9vYmplY3RfaW5pdCgmaTkxNS0+ZHJtLCAmb2JqLT5iYXNlLCBz aXplKTsKKwlpOTE1X2dlbV9vYmplY3RfaW5pdChvYmosICZmYWtlX29wcyk7CisKKwlvYmotPmJh c2Uud3JpdGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX0NQVTsKKwlvYmotPmJhc2UucmVhZF9k b21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0NQVTsKKwlvYmotPmNhY2hlX2xldmVsID0gSTkxNV9D QUNIRV9OT05FOworCisJcmV0dXJuIG9iajsKK30KKworc3RhdGljIGludCBpZ3RfbW9ja19wcGd0 dF9odWdlX2ZpbGwodm9pZCAqYXJnKQoreworCXN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCA9 IGFyZzsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHBwZ3R0LT5iYXNlLmk5MTU7 CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKwl1bnNpZ25lZCBsb25nIG1heF9w YWdlcyA9IHBwZ3R0LT5iYXNlLnRvdGFsID4+IFBBR0VfU0hJRlQ7CisJdW5zaWduZWQgbG9uZyBw YWdlX251bTsKKwlJR1RfVElNRU9VVChlbmRfdGltZSk7CisJaW50IGVycjsKKworCWZvcl9lYWNo X3ByaW1lX251bWJlcl9mcm9tKHBhZ2VfbnVtLCAxLCBtYXhfcGFnZXMpIHsKKwkJdW5zaWduZWQg aW50IGV4cGVjdGVkX2d0dCA9IDA7CisJCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOworCQlzaXplX3Qg c2l6ZSA9IHBhZ2VfbnVtIDw8IFBBR0VfU0hJRlQ7CisJCWludCBpOworCisJCW9iaiA9IGZha2Vf aHVnZV9wYWdlc19vYmplY3QoaTkxNSwgc2l6ZSk7CisJCWlmIChJU19FUlIob2JqKSkKKwkJCXJl dHVybiBQVFJfRVJSKG9iaik7CisKKwkJR0VNX0JVR19PTihvYmotPmJhc2Uuc2l6ZSAhPSBzaXpl KTsKKworCQllcnIgPSBpOTE1X2dlbV9vYmplY3RfcGluX3BhZ2VzKG9iaik7CisJCWlmIChlcnIp CisJCQlnb3RvIG91dF9wdXQ7CisKKwkJR0VNX0JVR19PTighb2JqLT5tbS5wYWdlX3NpemVzLnNn KTsKKworCQl2bWEgPSBpOTE1X3ZtYV9pbnN0YW5jZShvYmosICZwcGd0dC0+YmFzZSwgTlVMTCk7 CisJCWlmIChJU19FUlIodm1hKSkgeworCQkJZXJyID0gUFRSX0VSUih2bWEpOworCQkJZ290byBv dXRfdW5waW47CisJCX0KKworCQllcnIgPSBpOTE1X3ZtYV9waW4odm1hLCAwLCAwLCBQSU5fVVNF Uik7CisJCWlmIChlcnIpIHsKKwkJCWk5MTVfdm1hX2Nsb3NlKHZtYSk7CisJCQlnb3RvIG91dF91 bnBpbjsKKwkJfQorCisJCUdFTV9CVUdfT04ob2JqLT5tbS5wYWdlX3NpemVzLmd0dCk7CisJCUdF TV9CVUdfT04oIXZtYS0+cGFnZV9zaXplcy5zZyk7CisJCUdFTV9CVUdfT04oIXZtYS0+cGFnZV9z aXplcy5waHlzKTsKKworCQkvKiBGaWd1cmUgb3V0IHRoZSBleHBlY3RlZCBndHQgcGFnZSBzaXpl IGtub3dpbmcgdGhhdCB3ZSBnbyBmcm9tCisJCSAqIGxhcmdlc3QgdG8gc21hbGxlc3QgcGFnZSBz aXplIHNnIGNodW5rcywgYW5kIHRoYXQgd2UgYWxpZ24gdG8KKwkJICogdGhlIGxhcmdlc3QgcGFn ZSBzaXplLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGFnZV9zaXplcyk7 ICsraSkgeworCQkJdW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IHBhZ2Vfc2l6ZXNbaV07CisKKwkJ CWlmIChIQVNfUEFHRV9TSVpFKGk5MTUsIHBhZ2Vfc2l6ZSkgJiYgc2l6ZSA+PSBwYWdlX3NpemUp IHsKKwkJCQlleHBlY3RlZF9ndHQgfD0gcGFnZV9zaXplOworCQkJCXNpemUgJj0gcGFnZV9zaXpl LTE7CisJCQl9CisJCX0KKworCQlHRU1fQlVHX09OKCFleHBlY3RlZF9ndHQpOworCQlHRU1fQlVH X09OKHNpemUpOworCisJCWlmIChleHBlY3RlZF9ndHQgJiBJOTE1X0dUVF9QQUdFX1NJWkVfNEsp CisJCQlleHBlY3RlZF9ndHQgJj0gfkk5MTVfR1RUX1BBR0VfU0laRV82NEs7CisKKwkJR0VNX0JV R19PTih2bWEtPnBhZ2Vfc2l6ZXMuZ3R0ICE9IGV4cGVjdGVkX2d0dCk7CisKKwkJaWYgKHZtYS0+ cGFnZV9zaXplcy5zZyAmIEk5MTVfR1RUX1BBR0VfU0laRV82NEspIHsKKwkJCUdFTV9CVUdfT04o IUlTX0FMSUdORUQodm1hLT5ub2RlLnN0YXJ0LAorCQkJCQkgICAgICAgSTkxNV9HVFRfUEFHRV9T SVpFXzJNKSk7CisJCQlHRU1fQlVHX09OKCFJU19BTElHTkVEKHZtYS0+bm9kZS5zaXplLAorCQkJ CQkgICAgICAgSTkxNV9HVFRfUEFHRV9TSVpFXzJNKSk7CisJCX0KKworCQlpOTE1X3ZtYV91bnBp bih2bWEpOworCQlpOTE1X3ZtYV9jbG9zZSh2bWEpOworCisJCWk5MTVfZ2VtX29iamVjdF91bnBp bl9wYWdlcyhvYmopOworCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CisKKwkJaWYgKGlndF90 aW1lb3V0KGVuZF90aW1lLAorCQkJCSIlcyB0aW1lZCBvdXQgYXQgc2l6ZSAlbHhcbiIsCisJCQkJ X19mdW5jX18sIG9iai0+YmFzZS5zaXplKSkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiAwOwor CitvdXRfdW5waW46CisJaTkxNV9nZW1fb2JqZWN0X3VucGluX3BhZ2VzKG9iaik7CitvdXRfcHV0 OgorCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRp YyBpbnQgaWd0X21vY2tfcHBndHRfbWlzYWxpZ25lZF9kbWEodm9pZCAqYXJnKQoreworCXN0cnVj dCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCA9IGFyZzsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSA9IHBwZ3R0LT5iYXNlLmk5MTU7CisJdW5zaWduZWQgbG9uZyBzdXBwb3J0ZWQgPSBJTlRF TF9JTkZPKGk5MTUpLT5wYWdlX3NpemVfbWFzazsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqOworCWludCBlcnI7CisJaW50IGJpdDsKKworCS8qIFNhbml0eSBjaGVjayBkbWEgbWlz YWxpZ25tZW50IGZvciBodWdlIHBhZ2VzIC0tIHRoZSBkbWEgYWRkcmVzc2VzIHdlCisJICogaW5z ZXJ0IGludG8gdGhlIHBhZ2luZyBzdHJ1Y3R1cmVzIG5lZWQgdG8gYWx3YXlzIHJlc3BlY3QgdGhl IHBhZ2UKKwkgKiBzaXplIGFsaWdubWVudC4KKwkgKi8KKworCWJpdCA9IGlsb2cyKEk5MTVfR1RU X1BBR0VfU0laRV82NEspOworCisJZm9yX2VhY2hfc2V0X2JpdF9mcm9tKGJpdCwgJnN1cHBvcnRl ZCwgQklUU19QRVJfTE9ORykgeworCQlJR1RfVElNRU9VVChlbmRfdGltZSk7CisJCXVuc2lnbmVk IGludCBwYWdlX3NpemUgPSBCSVQoYml0KTsKKwkJdW5zaWduZWQgaW50IGZsYWdzID0gUElOX1VT RVIgfCBQSU5fT0ZGU0VUX0ZJWEVEOworCQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKKwkJdW5zaWdu ZWQgaW50IG9mZnNldDsKKwkJdW5zaWduZWQgaW50IHNpemUgPQorCQkJcm91bmRfdXAocGFnZV9z aXplLCBJOTE1X0dUVF9QQUdFX1NJWkVfMk0pIDw8IDE7CisKKwkJb2JqID0gZmFrZV9odWdlX3Bh Z2VzX29iamVjdChpOTE1LCBzaXplKTsKKwkJaWYgKElTX0VSUihvYmopKQorCQkJcmV0dXJuIFBU Ul9FUlIob2JqKTsKKworCQlHRU1fQlVHX09OKG9iai0+YmFzZS5zaXplICE9IHNpemUpOworCisJ CWVyciA9IGk5MTVfZ2VtX29iamVjdF9waW5fcGFnZXMob2JqKTsKKwkJaWYgKGVycikKKwkJCWdv dG8gb3V0X3B1dDsKKworCQlHRU1fQlVHX09OKCEob2JqLT5tbS5wYWdlX3NpemVzLnNnICYgcGFn ZV9zaXplKSk7CisKKwkJLyogRm9yY2UgdGhlIHBhZ2Ugc2l6ZSBmb3IgdGhpcyBvYmplY3QgKi8K KwkJb2JqLT5tbS5wYWdlX3NpemVzLnNnID0gcGFnZV9zaXplOworCisJCXZtYSA9IGk5MTVfdm1h X2luc3RhbmNlKG9iaiwgJnBwZ3R0LT5iYXNlLCBOVUxMKTsKKwkJaWYgKElTX0VSUih2bWEpKSB7 CisJCQllcnIgPSBQVFJfRVJSKHZtYSk7CisJCQlnb3RvIG91dF91bnBpbjsKKwkJfQorCisJCWVy ciA9IGk5MTVfdm1hX3Bpbih2bWEsIDAsIDAsIGZsYWdzKTsKKwkJaWYgKGVycikgeworCQkJaTkx NV92bWFfY2xvc2Uodm1hKTsKKwkJCWdvdG8gb3V0X3VucGluOworCQl9CisKKwkJR0VNX0JVR19P Tih2bWEtPnBhZ2Vfc2l6ZXMuZ3R0ICE9IHBhZ2Vfc2l6ZSk7CisKKwkJaTkxNV92bWFfdW5waW4o dm1hKTsKKwkJZXJyID0gaTkxNV92bWFfdW5iaW5kKHZtYSk7CisJCWlmIChlcnIpIHsKKwkJCWk5 MTVfdm1hX2Nsb3NlKHZtYSk7CisJCQlnb3RvIG91dF91bnBpbjsKKwkJfQorCisJCS8qIFRyeSBh bGwgdGhlIG90aGVyIHZhbGlkIG9mZnNldHMgdW50aWwgdGhlIG5leHQgYm91bmRhcnkgLS0KKwkJ ICogc2hvdWxkIGFsd2F5cyBmYWxsIGJhY2sgdG8gdXNpbmcgNEsgcGFnZXMuCisJCSAqLworCQlm b3IgKG9mZnNldCA9IDQwOTY7IG9mZnNldCA8IHBhZ2Vfc2l6ZTsgb2Zmc2V0ICs9IDQwOTYpIHsK KwkJCWVyciA9IGk5MTVfdm1hX3Bpbih2bWEsIDAsIDAsIGZsYWdzIHwgb2Zmc2V0KTsKKwkJCWlm IChlcnIpIHsKKwkJCQlpOTE1X3ZtYV9jbG9zZSh2bWEpOworCQkJCWdvdG8gb3V0X3VucGluOwor CQkJfQorCisJCQlHRU1fQlVHX09OKHZtYS0+cGFnZV9zaXplcy5ndHQgIT0gSTkxNV9HVFRfUEFH RV9TSVpFXzRLKTsKKworCQkJaTkxNV92bWFfdW5waW4odm1hKTsKKwkJCWVyciA9IGk5MTVfdm1h X3VuYmluZCh2bWEpOworCQkJaWYgKGVycikgeworCQkJCWk5MTVfdm1hX2Nsb3NlKHZtYSk7CisJ CQkJZ290byBvdXRfdW5waW47CisJCQl9CisKKwkJCWlmIChpZ3RfdGltZW91dChlbmRfdGltZSwK KwkJCQkJIiVzIHRpbWVkIG91dCBhdCBvZmZzZXQgJXggd2l0aCBwYWdlLXNpemUgJXhcbiIsCisJ CQkJCV9fZnVuY19fLCBvZmZzZXQsIHBhZ2Vfc2l6ZSkpCisJCQkJYnJlYWs7CisJCX0KKworCQlp OTE1X3ZtYV9jbG9zZSh2bWEpOworCisJCWk5MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcyhvYmop OworCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CisJfQorCisJcmV0dXJuIDA7CisKK291dF91 bnBpbjoKKwlpOTE1X2dlbV9vYmplY3RfdW5waW5fcGFnZXMob2JqKTsKK291dF9wdXQ6CisJaTkx NV9nZW1fb2JqZWN0X3B1dChvYmopOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBp Z3RfbW9ja19wcGd0dF82NEsodm9pZCAqYXJnKQoreworCXN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpw cGd0dCA9IGFyZzsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHBwZ3R0LT5iYXNl Lmk5MTU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKwljb25zdCBzdHJ1Y3Qg b2JqZWN0X2luZm8geworCQl1bnNpZ25lZCBpbnQgc2l6ZTsKKwkJdW5zaWduZWQgaW50IGd0dDsK KwkJdW5zaWduZWQgaW50IG9mZnNldDsKKwl9IG9iamVjdHNbXSA9IHsKKwkJLyogQ2FzZXMgd2l0 aCBmb3JjZWQgcGFkZGluZy9hbGlnbm1lbnQgKi8KKwkJeworCQkJLnNpemUgPSBTWl82NEssCisJ CQkuZ3R0ID0gSTkxNV9HVFRfUEFHRV9TSVpFXzY0SywKKwkJCS5vZmZzZXQgPSAwLAorCQl9LAor CQl7CisJCQkuc2l6ZSA9IFNaXzY0SyArIFNaXzRLLAorCQkJLmd0dCA9IEk5MTVfR1RUX1BBR0Vf U0laRV80SywKKwkJCS5vZmZzZXQgPSAwLgorCQl9LAorCQl7CisJCQkuc2l6ZSA9IFNaXzJNIC0g U1pfNEssCisJCQkuZ3R0ID0gSTkxNV9HVFRfUEFHRV9TSVpFXzRLLAorCQkJLm9mZnNldCA9IDAs CisJCX0sCisJCXsKKwkJCS5zaXplID0gU1pfMk0gKyBTWl82NEssCisJCQkuZ3R0ID0gSTkxNV9H VFRfUEFHRV9TSVpFXzY0SywKKwkJCS5vZmZzZXQgPSAwLAorCQl9LAorCQl7CisJCQkuc2l6ZSA9 IFNaXzJNICsgU1pfNEssCisJCQkuZ3R0ID0gSTkxNV9HVFRfUEFHRV9TSVpFXzY0SyB8IEk5MTVf R1RUX1BBR0VfU0laRV80SywKKwkJCS5vZmZzZXQgPSAwLAorCQl9LAorCQkvKiBUcnkgd2l0aG91 dCBhbnkgZm9yY2VkIHBhZGRpbmcvYWxpZ25tZW50ICovCisJCXsKKwkJCS5zaXplID0gU1pfNjRL LAorCQkJLm9mZnNldCA9IFNaXzJNLAorCQkJLmd0dCA9IEk5MTVfR1RUX1BBR0VfU0laRV80SywK KwkJfSwKKwkJeworCQkJLnNpemUgPSBTWl8xMjhLLAorCQkJLm9mZnNldCA9IFNaXzJNIC0gU1pf NjRLLAorCQkJLmd0dCA9IEk5MTVfR1RUX1BBR0VfU0laRV80SywKKwkJfSwKKwl9OworCWludCBp OworCWludCBlcnI7CisKKwlpZiAoIUhBU19QQUdFX1NJWkUoaTkxNSwgSTkxNV9HVFRfUEFHRV9T SVpFXzY0SykpCisJCXJldHVybiAwOworCisJLyogU2FuaXR5IGNoZWNrIHNvbWUgb2YgdGhlIHRy aWNraW5lc3Mgd2l0aCA2NEsgcGFnZXMgLS0gZWl0aGVyIHdlIGNhbgorCSAqIHNhZmVseSBtYXJr IHRoZSB3aG9sZSBwYWdlLXRhYmxlKDJNIGJsb2NrKSBhcyA2NEssIG9yIHdlIGhhdmUgdG8KKwkg KiBhbHdheXMgZmFsbGJhY2sgdG8gNEsuCisJICovCisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShvYmplY3RzKTsgKytpKSB7CisJCXVuc2lnbmVkIGludCBzaXplID0gb2JqZWN0c1tpXS5z aXplOworCQl1bnNpZ25lZCBpbnQgZXhwZWN0ZWRfZ3R0ID0gb2JqZWN0c1tpXS5ndHQ7CisJCXVu c2lnbmVkIGludCBvZmZzZXQgPSBvYmplY3RzW2ldLm9mZnNldDsKKwkJc3RydWN0IGk5MTVfdm1h ICp2bWE7CisJCWludCBmbGFncyA9IFBJTl9VU0VSOworCisJCW9iaiA9IGZha2VfaHVnZV9wYWdl c19vYmplY3QoaTkxNSwgc2l6ZSk7CisJCWlmIChJU19FUlIob2JqKSkKKwkJCXJldHVybiBQVFJf RVJSKG9iaik7CisKKwkJZXJyID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdlcyhvYmopOworCQlp ZiAoZXJyKQorCQkJZ290byBvdXRfcHV0OworCisJCUdFTV9CVUdfT04oIW9iai0+bW0ucGFnZV9z aXplcy5zZyk7CisKKwkJLyogRGlzYWJsZSAyTSBwYWdlcyAtLSBXZSBvbmx5IHdhbnQgdG8gdXNl IDY0Sy80SyBwYWdlcyBmb3IKKwkJICogdGhpcyB0ZXN0LgorCQkgKi8KKwkJb2JqLT5tbS5wYWdl X3NpemVzLnNnICY9IH5JOTE1X0dUVF9QQUdFX1NJWkVfMk07CisKKwkJdm1hID0gaTkxNV92bWFf aW5zdGFuY2Uob2JqLCAmcHBndHQtPmJhc2UsIE5VTEwpOworCQlpZiAoSVNfRVJSKHZtYSkpIHsK KwkJCWVyciA9IFBUUl9FUlIodm1hKTsKKwkJCWdvdG8gb3V0X3VucGluOworCQl9CisKKwkJaWYg KG9mZnNldCkKKwkJCWZsYWdzIHw9IFBJTl9PRkZTRVRfRklYRUQgfCBvZmZzZXQ7CisKKwkJZXJy ID0gaTkxNV92bWFfcGluKHZtYSwgMCwgMCwgZmxhZ3MpOworCQlpZiAoZXJyKSB7CisJCQlpOTE1 X3ZtYV9jbG9zZSh2bWEpOworCQkJZ290byBvdXRfdW5waW47CisJCX0KKworCQlHRU1fQlVHX09O KG9iai0+bW0ucGFnZV9zaXplcy5ndHQpOworCQlHRU1fQlVHX09OKCF2bWEtPnBhZ2Vfc2l6ZXMu c2cpOworCQlHRU1fQlVHX09OKCF2bWEtPnBhZ2Vfc2l6ZXMucGh5cyk7CisKKwkJR0VNX0JVR19P Tih2bWEtPnBhZ2Vfc2l6ZXMuZ3R0ICE9IGV4cGVjdGVkX2d0dCk7CisKKwkJaWYgKCFvZmZzZXQg JiYgdm1hLT5wYWdlX3NpemVzLnNnICYgSTkxNV9HVFRfUEFHRV9TSVpFXzY0SykgeworCQkJR0VN X0JVR19PTighSVNfQUxJR05FRCh2bWEtPm5vZGUuc3RhcnQsCisJCQkJCSAgICAgICBJOTE1X0dU VF9QQUdFX1NJWkVfMk0pKTsKKwkJCUdFTV9CVUdfT04oIUlTX0FMSUdORUQodm1hLT5ub2RlLnNp emUsCisJCQkJCSAgICAgICBJOTE1X0dUVF9QQUdFX1NJWkVfMk0pKTsKKwkJfQorCisJCWk5MTVf dm1hX3VucGluKHZtYSk7CisJCWk5MTVfdm1hX2Nsb3NlKHZtYSk7CisKKwkJaTkxNV9nZW1fb2Jq ZWN0X3VucGluX3BhZ2VzKG9iaik7CisJCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKKwl9CisK KwlyZXR1cm4gMDsKKworb3V0X3VucGluOgorCWk5MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcyhv YmopOworb3V0X3B1dDoKKwlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CisKKwlyZXR1cm4gZXJy OworfQorCitzdGF0aWMgaW50IGlndF9tb2NrX2V4aGF1c3RfZGV2aWNlX3N1cHBvcnRlZF9wYWdl cyh2b2lkICphcmcpCit7CisJc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0ID0gYXJnOworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcHBndHQtPmJhc2UuaTkxNTsKKwl1bnNpZ25l ZCBpbnQgc2F2ZWRfbWFzayA9IElOVEVMX0lORk8oaTkxNSktPnBhZ2Vfc2l6ZV9tYXNrOworCXN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CisJaW50IGksIGo7CisJaW50IGVycjsKKwor CS8qIFNhbml0eSBjaGVjayBjcmVhdGluZyBvYmplY3RzIHdpdGggZXZlcnkgdmFsaWQgcGFnZSBz dXBwb3J0CisJICogY29tYmluYXRpb24gZm9yIG91ciBtb2NrIGRldmljZS4KKwkgKi8KKworCWZv ciAoaSA9IDE7IGkgPCBCSVQoQVJSQVlfU0laRShwYWdlX3NpemVzKSk7IGkrKykgeworCQl1bnNp Z25lZCBpbnQgY29tYmluYXRpb24gPSAwOworCQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKKworCQlm b3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShwYWdlX3NpemVzKTsgaisrKSB7CisJCQlpZiAoaSAm IEJJVChqKSkKKwkJCQljb21iaW5hdGlvbiB8PSBwYWdlX3NpemVzW2pdOworCQl9CisKKwkJbWt3 cml0ZV9kZXZpY2VfaW5mbyhpOTE1KS0+cGFnZV9zaXplX21hc2sgPSBjb21iaW5hdGlvbjsKKwor CQlvYmogPSBmYWtlX2h1Z2VfcGFnZXNfb2JqZWN0KGk5MTUsIGNvbWJpbmF0aW9uKTsKKwkJaWYg KElTX0VSUihvYmopKSB7CisJCQllcnIgPSBQVFJfRVJSKG9iaik7CisJCQlnb3RvIG91dF9kZXZp Y2U7CisJCX0KKworCQlHRU1fQlVHX09OKG9iai0+YmFzZS5zaXplICE9IGNvbWJpbmF0aW9uKTsK KworCQllcnIgPSBpOTE1X2dlbV9vYmplY3RfcGluX3BhZ2VzKG9iaik7CisJCWlmIChlcnIpCisJ CQlnb3RvIG91dF9wdXQ7CisKKwkJR0VNX0JVR19PTihvYmotPm1tLnBhZ2Vfc2l6ZXMuc2cgIT0g Y29tYmluYXRpb24pOworCisJCXZtYSA9IGk5MTVfdm1hX2luc3RhbmNlKG9iaiwgJnBwZ3R0LT5i YXNlLCBOVUxMKTsKKwkJaWYgKElTX0VSUih2bWEpKSB7CisJCQllcnIgPSBQVFJfRVJSKHZtYSk7 CisJCQlnb3RvIG91dF91bnBpbjsKKwkJfQorCisJCWVyciA9IGk5MTVfdm1hX3Bpbih2bWEsIDAs IDAsIFBJTl9VU0VSKTsKKwkJaWYgKGVycikgeworCQkJaTkxNV92bWFfY2xvc2Uodm1hKTsKKwkJ CWdvdG8gb3V0X3VucGluOworCQl9CisKKwkJR0VNX0JVR19PTihvYmotPm1tLnBhZ2Vfc2l6ZXMu Z3R0KTsKKwkJR0VNX0JVR19PTighdm1hLT5wYWdlX3NpemVzLnNnKTsKKwkJR0VNX0JVR19PTigh dm1hLT5wYWdlX3NpemVzLnBoeXMpOworCisJCUdFTV9CVUdfT04odm1hLT5wYWdlX3NpemVzLmd0 dCAmIH5jb21iaW5hdGlvbik7CisKKwkJaTkxNV92bWFfdW5waW4odm1hKTsKKwkJaTkxNV92bWFf Y2xvc2Uodm1hKTsKKworCQlpOTE1X2dlbV9vYmplY3RfdW5waW5fcGFnZXMob2JqKTsKKwkJaTkx NV9nZW1fb2JqZWN0X3B1dChvYmopOworCX0KKworCWdvdG8gb3V0X2RldmljZTsKKworb3V0X3Vu cGluOgorCWk5MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcyhvYmopOworb3V0X3B1dDoKKwlpOTE1 X2dlbV9vYmplY3RfcHV0KG9iaik7CitvdXRfZGV2aWNlOgorCW1rd3JpdGVfZGV2aWNlX2luZm8o aTkxNSktPnBhZ2Vfc2l6ZV9tYXNrID0gc2F2ZWRfbWFzazsKKworCXJldHVybiBlcnI7Cit9CisK K3N0YXRpYyBzdHJ1Y3QgaTkxNV92bWEgKgorZ3B1X3dyaXRlX2R3KHN0cnVjdCBpOTE1X3ZtYSAq dm1hLCB1NjQgb2Zmc2V0LCB1MzIgdmFsdWUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUgPSB0b19pOTE1KHZtYS0+b2JqLT5iYXNlLmRldik7CisJc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgaTkxNV92bWEgKmJhdGNoOworCXVuc2lnbmVkIGludCBz aXplOworCXUzMiAqY21kOworCWludCBlcnI7CisKKwlHRU1fQlVHX09OKElOVEVMX0dFTihpOTE1 KSA8IDgpOworCisJc2l6ZSA9IDUgKiBzaXplb2YodTMyKTsKKwlzaXplID0gcm91bmRfdXAoc2l6 ZSwgUEFHRV9TSVpFKTsKKwlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX2ludGVybmFsKGk5 MTUsIHNpemUpOworCWlmIChJU19FUlIob2JqKSkKKwkJcmV0dXJuIEVSUl9DQVNUKG9iaik7CisK KwljbWQgPSBpOTE1X2dlbV9vYmplY3RfcGluX21hcChvYmosIEk5MTVfTUFQX1dCKTsKKwlpZiAo SVNfRVJSKGNtZCkpIHsKKwkJZXJyID0gUFRSX0VSUihjbWQpOworCQlnb3RvIGVycjsKKwl9CisK KwlvZmZzZXQgKz0gdm1hLT5ub2RlLnN0YXJ0OworCisJKmNtZCsrID0gTUlfU1RPUkVfRFdPUkRf SU1NX0dFTjQ7CisJKmNtZCsrID0gbG93ZXJfMzJfYml0cyhvZmZzZXQpOworCSpjbWQrKyA9IHVw cGVyXzMyX2JpdHMob2Zmc2V0KTsKKwkqY21kKysgPSB2YWx1ZTsKKworCSpjbWQgPSBNSV9CQVRD SF9CVUZGRVJfRU5EOworCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAob2JqKTsKKworCWVyciA9 IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihvYmosIGZhbHNlKTsKKwlpZiAoZXJy KQorCQlnb3RvIGVycjsKKworCWJhdGNoID0gaTkxNV92bWFfaW5zdGFuY2Uob2JqLCB2bWEtPnZt LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGJhdGNoKSkgeworCQllcnIgPSBQVFJfRVJSKGJhdGNoKTsK KwkJZ290byBlcnI7CisJfQorCisJZXJyID0gaTkxNV92bWFfcGluKGJhdGNoLCAwLCAwLCBQSU5f VVNFUik7CisJaWYgKGVycikKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gYmF0Y2g7CisKK2VycjoK KwlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CisKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQor CitzdGF0aWMgaW50IGdwdV93cml0ZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKKwkJICAgICBzdHJ1 Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAorCQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAor CQkgICAgIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRv X2k5MTUodm1hLT5vYmotPmJhc2UuZGV2KTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qg KnJxOworCXN0cnVjdCBpOTE1X3ZtYSAqYmF0Y2g7CisJaW50IGZsYWdzID0gMDsKKwlpbnQgZXJy OworCisJYmF0Y2ggPSBncHVfd3JpdGVfZHcodm1hLCBvZmZzZXQsIHZhbHVlKTsKKwlpZiAoSVNf RVJSKGJhdGNoKSkKKwkJcmV0dXJuIFBUUl9FUlIoYmF0Y2gpOworCisJcnEgPSBpOTE1X2dlbV9y ZXF1ZXN0X2FsbG9jKGk5MTUtPmVuZ2luZVtSQ1NdLCBjdHgpOworCWlmIChJU19FUlIocnEpKSB7 CisJCWVyciA9IFBUUl9FUlIocnEpOworCQlnb3RvIGVycl9iYXRjaDsKKwl9CisKKwllcnIgPSBy cS0+ZW5naW5lLT5lbWl0X2ZsdXNoKHJxLCBFTUlUX0lOVkFMSURBVEUpOworCWlmIChlcnIpCisJ CWdvdG8gZXJyX3JlcXVlc3Q7CisKKwllcnIgPSBpOTE1X3N3aXRjaF9jb250ZXh0KHJxKTsKKwlp ZiAoZXJyKQorCQlnb3RvIGVycl9yZXF1ZXN0OworCisJZXJyID0gcnEtPmVuZ2luZS0+ZW1pdF9i Yl9zdGFydChycSwKKwkJCWJhdGNoLT5ub2RlLnN0YXJ0LCBiYXRjaC0+bm9kZS5zaXplLAorCQkJ ZmxhZ3MpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3JlcXVlc3Q7CisKKwlpOTE1X3ZtYV9tb3Zl X3RvX2FjdGl2ZShiYXRjaCwgcnEsIDApOworCWk5MTVfZ2VtX29iamVjdF9zZXRfYWN0aXZlX3Jl ZmVyZW5jZShiYXRjaC0+b2JqKTsKKwlpOTE1X3ZtYV91bnBpbihiYXRjaCk7CisJaTkxNV92bWFf Y2xvc2UoYmF0Y2gpOworCisJaTkxNV92bWFfbW92ZV90b19hY3RpdmUodm1hLCBycSwgMCk7CisK KwlyZXNlcnZhdGlvbl9vYmplY3RfbG9jayh2bWEtPm9iai0+cmVzdiwgTlVMTCk7CisJcmVzZXJ2 YXRpb25fb2JqZWN0X2FkZF9leGNsX2ZlbmNlKHZtYS0+b2JqLT5yZXN2LCAmcnEtPmZlbmNlKTsK KwlyZXNlcnZhdGlvbl9vYmplY3RfdW5sb2NrKHZtYS0+b2JqLT5yZXN2KTsKKworCV9faTkxNV9h ZGRfcmVxdWVzdChycSwgdHJ1ZSk7CisKKwlyZXR1cm4gMDsKKworZXJyX3JlcXVlc3Q6CisJX19p OTE1X2FkZF9yZXF1ZXN0KHJxLCBmYWxzZSk7CitlcnJfYmF0Y2g6CisJaTkxNV92bWFfdW5waW4o YmF0Y2gpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlubGluZSBpbnQgaWd0X2Nhbl9h bGxvY2F0ZV90aHAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCit7CisJcmV0dXJuIEhB U19QQUdFX1NJWkUoaTkxNSwgSTkxNV9HVFRfUEFHRV9TSVpFXzJNKSAmJgorCQloYXNfdHJhbnNw YXJlbnRfaHVnZXBhZ2UoKTsKK30KKworc3RhdGljIGludCBpZ3RfcHBndHRfd3JpdGVfaHVnZSh2 b2lkICphcmcpCit7CisJc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0ID0gYXJnOworCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcHBndHQtPmJhc2UuaTkxNTsKKwlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqOworCWNvbnN0IHVuc2lnbmVkIGludCBwYWdlX3NpemVzW10g PSB7CisJCUk5MTVfR1RUX1BBR0VfU0laRV82NEssCisJCUk5MTVfR1RUX1BBR0VfU0laRV8yTSwK Kwl9OworCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOworCWludCBlcnIgPSAwOworCWludCBpOworCisJ aWYgKCFpZ3RfY2FuX2FsbG9jYXRlX3RocChpOTE1KSkKKwkJcmV0dXJuIDA7CisKKwkvKiBTYW5p dHkgY2hlY2sgdGhhdCB0aGUgSFcgdXNlcyBodWdlLXBhZ2VzIGNvcnJlY3RseSAqLworCisJcHBn dHQgPSBpOTE1LT5rZXJuZWxfY29udGV4dC0+cHBndHQ7CisKKwlvYmogPSBpOTE1X2dlbV9vYmpl Y3RfY3JlYXRlKGk5MTUsIEk5MTVfR1RUX1BBR0VfU0laRV8yTSk7CisJaWYgKElTX0VSUihvYmop KQorCQlyZXR1cm4gUFRSX0VSUihvYmopOworCisJZXJyID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9w YWdlcyhvYmopOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3B1dDsKKworCUdFTV9CVUdfT04oIW9i ai0+bW0ucGFnZV9zaXplcy5zZyk7CisKKwlpZiAob2JqLT5tbS5wYWdlX3NpemVzLnNnIDwgSTkx NV9HVFRfUEFHRV9TSVpFXzJNKSB7CisJCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIGh1Z2Ug cGFnZXNcbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dF91bnBpbjsKKwl9CisKKwl2 bWEgPSBpOTE1X3ZtYV9pbnN0YW5jZShvYmosICZwcGd0dC0+YmFzZSwgTlVMTCk7CisJaWYgKElT X0VSUih2bWEpKSB7CisJCWVyciA9IFBUUl9FUlIodm1hKTsKKwkJZ290byBvdXRfdW5waW47CisJ fQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGFnZV9zaXplcyk7ICsraSkgeworCQl1 bnNpZ25lZCBpbnQgcGFnZV9zaXplID0gcGFnZV9zaXplc1tpXTsKKwkJdTMyICptYXA7CisKKwkJ aWYgKCFIQVNfUEFHRV9TSVpFKGk5MTUsIHBhZ2Vfc2l6ZSkpCisJCQljb250aW51ZTsKKworCQkv KiBGb3JjZSB0aGUgcGFnZSBzaXplICovCisJCW9iai0+bW0ucGFnZV9zaXplcy5zZyA9IHBhZ2Vf c2l6ZTsKKworCQllcnIgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2d0dF9kb21haW4ob2JqLCB0 cnVlKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X2Nsb3NlOworCisJCWVyciA9IGk5MTVfdm1h X3Bpbih2bWEsIDAsIDAsIFBJTl9VU0VSKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X2Nsb3Nl OworCisJCUdFTV9CVUdfT04ob2JqLT5tbS5wYWdlX3NpemVzLmd0dCk7CisJCUdFTV9CVUdfT04o dm1hLT5wYWdlX3NpemVzLnNnICE9IHBhZ2Vfc2l6ZSk7CisJCUdFTV9CVUdfT04oIXZtYS0+cGFn ZV9zaXplcy5waHlzKTsKKworCQlHRU1fQlVHX09OKHZtYS0+cGFnZV9zaXplcy5ndHQgIT0gcGFn ZV9zaXplKTsKKwkJR0VNX0JVR19PTighSVNfQUxJR05FRCh2bWEtPm5vZGUuc3RhcnQsIEk5MTVf R1RUX1BBR0VfU0laRV8yTSkpOworCQlHRU1fQlVHX09OKCFJU19BTElHTkVEKHZtYS0+bm9kZS5z aXplLCBJOTE1X0dUVF9QQUdFX1NJWkVfMk0pKTsKKworCQllcnIgPSBncHVfd3JpdGUodm1hLCBp OTE1LT5rZXJuZWxfY29udGV4dCwgMCwgcGFnZV9zaXplKTsKKwkJaWYgKGVycikgeworCQkJaTkx NV92bWFfdW5waW4odm1hKTsKKwkJCWdvdG8gb3V0X2Nsb3NlOworCQl9CisKKwkJZXJyID0gaTkx NV9nZW1fb2JqZWN0X3NldF90b19jcHVfZG9tYWluKG9iaiwgZmFsc2UpOworCQlpZiAoZXJyKSB7 CisJCQlpOTE1X3ZtYV91bnBpbih2bWEpOworCQkJZ290byBvdXRfY2xvc2U7CisJCX0KKworCQlp OTE1X3ZtYV91bnBpbih2bWEpOworCQllcnIgPSBpOTE1X3ZtYV91bmJpbmQodm1hKTsKKwkJaWYg KGVycikKKwkJCWdvdG8gb3V0X2Nsb3NlOworCisJCW1hcCA9IGk5MTVfZ2VtX29iamVjdF9waW5f bWFwKG9iaiwgSTkxNV9NQVBfV0IpOworCQlpZiAoSVNfRVJSKG1hcCkpIHsKKwkJCWVyciA9IFBU Ul9FUlIobWFwKTsKKwkJCWdvdG8gb3V0X2Nsb3NlOworCQl9CisKKwkJR0VNX0JVR19PTihtYXBb MF0gIT0gcGFnZV9zaXplKTsKKworCQlpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKG9iaik7CisJ fQorCitvdXRfY2xvc2U6CisJaTkxNV92bWFfY2xvc2Uodm1hKTsKK291dF91bnBpbjoKKwlpOTE1 X2dlbV9vYmplY3RfdW5waW5fcGFnZXMob2JqKTsKK291dF9wdXQ6CisJaTkxNV9nZW1fb2JqZWN0 X3B1dChvYmopOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBpZ3RfcHBndHRfZ2Vt ZnNfaHVnZSh2b2lkICphcmcpCit7CisJc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0ID0gYXJn OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcHBndHQtPmJhc2UuaTkxNTsKKwlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCWNvbnN0IHVuc2lnbmVkIGludCBvYmpl Y3Rfc2l6ZXNbXSA9IHsKKwkJSTkxNV9HVFRfUEFHRV9TSVpFXzJNLAorCQlJOTE1X0dUVF9QQUdF X1NJWkVfMk0gKyBJOTE1X0dUVF9QQUdFX1NJWkVfNEssCisJfTsKKwlpbnQgZXJyOworCWludCBp OworCisJaWYgKCFpZ3RfY2FuX2FsbG9jYXRlX3RocChpOTE1KSkKKwkJcmV0dXJuIDA7CisKKwkv KiBTYW5pdHkgY2hlY2sgVEhQIHRocm91Z2ggZ2VtZnMgKi8KKworCWZvciAoaSA9IDA7IGkgPCBB UlJBWV9TSVpFKG9iamVjdF9zaXplcyk7ICsraSkgeworCQl1bnNpZ25lZCBpbnQgc2l6ZSA9IG9i amVjdF9zaXplc1tpXTsKKwkJc3RydWN0IGk5MTVfdm1hICp2bWE7CisKKwkJb2JqID0gaTkxNV9n ZW1fb2JqZWN0X2NyZWF0ZShpOTE1LCBzaXplKTsKKwkJaWYgKElTX0VSUihvYmopKQorCQkJcmV0 dXJuIFBUUl9FUlIob2JqKTsKKworCQllcnIgPSBpOTE1X2dlbV9vYmplY3RfcGluX3BhZ2VzKG9i aik7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dF9wdXQ7CisKKwkJR0VNX0JVR19PTighb2JqLT5t bS5wYWdlX3NpemVzLnNnKTsKKworCQlpZiAob2JqLT5tbS5wYWdlX3NpemVzLnNnIDwgc2l6ZSkg eworCQkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgaHVnZSBwYWdlc1xuIik7CisJCQllcnIg PSAtRUlOVkFMOworCQkJZ290byBvdXRfdW5waW47CisJCX0KKworCQl2bWEgPSBpOTE1X3ZtYV9p bnN0YW5jZShvYmosICZwcGd0dC0+YmFzZSwgTlVMTCk7CisJCWlmIChJU19FUlIodm1hKSkgewor CQkJZXJyID0gUFRSX0VSUih2bWEpOworCQkJZ290byBvdXRfdW5waW47CisJCX0KKworCQllcnIg PSBpOTE1X3ZtYV9waW4odm1hLCAwLCAwLCBQSU5fVVNFUik7CisJCWlmIChlcnIpIHsKKwkJCWk5 MTVfdm1hX2Nsb3NlKHZtYSk7CisJCQlnb3RvIG91dF91bnBpbjsKKwkJfQorCisJCUdFTV9CVUdf T04ob2JqLT5tbS5wYWdlX3NpemVzLmd0dCk7CisJCUdFTV9CVUdfT04oIXZtYS0+cGFnZV9zaXpl cy5zZyk7CisJCUdFTV9CVUdfT04oIXZtYS0+cGFnZV9zaXplcy5waHlzKTsKKworCQlHRU1fQlVH X09OKHZtYS0+cGFnZV9zaXplcy5ndHQgIT0gc2l6ZSk7CisJCUdFTV9CVUdfT04oIUlTX0FMSUdO RUQodm1hLT5ub2RlLnN0YXJ0LCBJOTE1X0dUVF9QQUdFX1NJWkVfMk0pKTsKKworCQlpZiAodm1h LT5wYWdlX3NpemVzLnNnICYgSTkxNV9HVFRfUEFHRV9TSVpFXzY0SykgeworCQkJR0VNX0JVR19P TighSVNfQUxJR05FRCh2bWEtPm5vZGUuc2l6ZSwKKwkJCQkJICAgICAgIEk5MTVfR1RUX1BBR0Vf U0laRV8yTSkpOworCQl9CisKKwkJaTkxNV92bWFfdW5waW4odm1hKTsKKwkJaTkxNV92bWFfY2xv c2Uodm1hKTsKKworCQlpOTE1X2dlbV9vYmplY3RfdW5waW5fcGFnZXMob2JqKTsKKwkJaTkxNV9n ZW1fb2JqZWN0X3B1dChvYmopOworCX0KKworCXJldHVybiAwOworCitvdXRfdW5waW46CisJaTkx NV9nZW1fb2JqZWN0X3VucGluX3BhZ2VzKG9iaik7CitvdXRfcHV0OgorCWk5MTVfZ2VtX29iamVj dF9wdXQob2JqKTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBpOTE1X2dlbV9odWdlX3BhZ2Vf bW9ja19zZWxmdGVzdHModm9pZCkKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfc3VidGVz dCB0ZXN0c1tdID0geworCQlTVUJURVNUKGlndF9tb2NrX3BwZ3R0X2h1Z2VfZmlsbCksCisJCVNV QlRFU1QoaWd0X21vY2tfcHBndHRfbWlzYWxpZ25lZF9kbWEpLAorCQlTVUJURVNUKGlndF9tb2Nr X3BwZ3R0XzY0SyksCisJCVNVQlRFU1QoaWd0X21vY2tfZXhoYXVzdF9kZXZpY2Vfc3VwcG9ydGVk X3BhZ2VzKSwKKwl9OworCWludCBzYXZlZF9wcGd0dCA9IGk5MTUuZW5hYmxlX3BwZ3R0OworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdjsKKwlzdHJ1Y3QgaTkxNV9od19wcGd0dCAq cHBndHQ7CisJaW50IGVycjsKKworCWRldl9wcml2ID0gbW9ja19nZW1fZGV2aWNlKCk7CisJaWYg KCFkZXZfcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBQcmV0ZW5kIHRvIGJlIGEgZGV2 aWNlIHdoaWNoIHN1cHBvcnRzIHRoZSA0OGIgUFBHVFQgKi8KKwlpOTE1LmVuYWJsZV9wcGd0dCA9 IDM7CisKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7CisJcHBndHQg PSBpOTE1X3BwZ3R0X2NyZWF0ZShkZXZfcHJpdiwgTlVMTCwgIm1vY2siKTsKKwlpZiAoSVNfRVJS KHBwZ3R0KSkgeworCQllcnIgPSBQVFJfRVJSKHBwZ3R0KTsKKwkJZ290byBvdXRfdW5sb2NrOwor CX0KKworCUdFTV9CVUdfT04oIWk5MTVfdm1faXNfNDhiaXQoJnBwZ3R0LT5iYXNlKSk7CisKKwll cnIgPSBpOTE1X3N1YnRlc3RzKHRlc3RzLCBwcGd0dCk7CisKKwlpOTE1X3BwZ3R0X2Nsb3NlKCZw cGd0dC0+YmFzZSk7CisJaTkxNV9wcGd0dF9wdXQocHBndHQpOworCitvdXRfdW5sb2NrOgorCW11 dGV4X3VubG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCisJaTkxNS5lbmFibGVf cHBndHQgPSBzYXZlZF9wcGd0dDsKKworCWRybV9kZXZfdW5yZWYoJmRldl9wcml2LT5kcm0pOwor CisJcmV0dXJuIGVycjsKK30KKworaW50IGk5MTVfZ2VtX2h1Z2VfcGFnZV9saXZlX3NlbGZ0ZXN0 cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJc3RhdGljIGNvbnN0IHN0 cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9IHsKKwkJU1VCVEVTVChpZ3RfcHBndHRfZ2VtZnNf aHVnZSksCisJCVNVQlRFU1QoaWd0X3BwZ3R0X3dyaXRlX2h1Z2UpLAorCX07CisJc3RydWN0IGk5 MTVfaHdfcHBndHQgKnBwZ3R0OworCXN0cnVjdCBkcm1fZmlsZSAqZmlsZTsKKwlpbnQgZXJyOwor CisJaWYgKCFVU0VTX0ZVTExfNDhCSVRfUFBHVFQoZGV2X3ByaXYpKQorCQlyZXR1cm4gMDsKKwor CWZpbGUgPSBtb2NrX2ZpbGUoZGV2X3ByaXYpOworCWlmIChJU19FUlIoZmlsZSkpCisJCXJldHVy biBQVFJfRVJSKGZpbGUpOworCisJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0 ZXgpOworCXBwZ3R0ID0gaTkxNV9wcGd0dF9jcmVhdGUoZGV2X3ByaXYsIGZpbGUtPmRyaXZlcl9w cml2LCAibGl2ZSIpOworCWlmIChJU19FUlIocHBndHQpKSB7CisJCWVyciA9IFBUUl9FUlIocHBn dHQpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJZXJyID0gaTkxNV9zdWJ0ZXN0cyh0ZXN0 cywgcHBndHQpOworCisJaTkxNV9wcGd0dF9jbG9zZSgmcHBndHQtPmJhc2UpOworCWk5MTVfcHBn dHRfcHV0KHBwZ3R0KTsKKworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJmRldl9wcml2LT5k cm0uc3RydWN0X211dGV4KTsKKworCW1vY2tfZmlsZV9mcmVlKGRldl9wcml2LCBmaWxlKTsKKwor CXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVz dHMvaTkxNV9saXZlX3NlbGZ0ZXN0cy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3Rz L2k5MTVfbGl2ZV9zZWxmdGVzdHMuaAppbmRleCAxOGIxNzRkODU1Y2EuLjY0YWNkN2VjY2M1YyAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbGl2ZV9zZWxm dGVzdHMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9saXZlX3Nl bGZ0ZXN0cy5oCkBAIC0xNSw1ICsxNSw2IEBAIHNlbGZ0ZXN0KG9iamVjdHMsIGk5MTVfZ2VtX29i amVjdF9saXZlX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KGRtYWJ1ZiwgaTkxNV9nZW1fZG1hYnVmX2xp dmVfc2VsZnRlc3RzKQogc2VsZnRlc3QoY29oZXJlbmN5LCBpOTE1X2dlbV9jb2hlcmVuY3lfbGl2 ZV9zZWxmdGVzdHMpCiBzZWxmdGVzdChndHQsIGk5MTVfZ2VtX2d0dF9saXZlX3NlbGZ0ZXN0cykK K3NlbGZ0ZXN0KGh1Z2VwYWdlcywgaTkxNV9nZW1faHVnZV9wYWdlX2xpdmVfc2VsZnRlc3RzKQog c2VsZnRlc3QoY29udGV4dHMsIGk5MTVfZ2VtX2NvbnRleHRfbGl2ZV9zZWxmdGVzdHMpCiBzZWxm dGVzdChoYW5nY2hlY2ssIGludGVsX2hhbmdjaGVja19saXZlX3NlbGZ0ZXN0cykKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oCmlu ZGV4IGZjNzQ2ODc1MDFiYS4uOTk2MWI0NGY3NmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmgKQEAgLTIxLDMgKzIxLDQg QEAgc2VsZnRlc3QoZG1hYnVmLCBpOTE1X2dlbV9kbWFidWZfbW9ja19zZWxmdGVzdHMpCiBzZWxm dGVzdCh2bWEsIGk5MTVfdm1hX21vY2tfc2VsZnRlc3RzKQogc2VsZnRlc3QoZXZpY3QsIGk5MTVf Z2VtX2V2aWN0X21vY2tfc2VsZnRlc3RzKQogc2VsZnRlc3QoZ3R0LCBpOTE1X2dlbV9ndHRfbW9j a19zZWxmdGVzdHMpCitzZWxmdGVzdChodWdlcGFnZXMsIGk5MTVfZ2VtX2h1Z2VfcGFnZV9tb2Nr X3NlbGZ0ZXN0cykKLS0gCjIuOS40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pbnRlbC1nZngK