From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 22/39] drm/i915: Move shmem object setup to its own file Date: Wed, 13 Mar 2019 14:43:44 +0000 Message-ID: <20190313144401.17735-22-chris@chris-wilson.co.uk> References: <20190313144401.17735-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9D6A86E0E4 for ; Wed, 13 Mar 2019 14:45:06 +0000 (UTC) In-Reply-To: <20190313144401.17735-1-chris@chris-wilson.co.uk> 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 Cc: Matthew Auld List-Id: intel-gfx@lists.freedesktop.org U3BsaXQgdGhlIHBsYWluIG9sZCBzaG1lbSBvYmplY3QgaW50byBpdHMgb3duIGZpbGUgdG8gc3Rh cnQgZGVjbHV0dGVyaW5nCmk5MTVfZ2VtLmMKCnYyOiBMb3NlIHRoZSBjb25mdXNpbmcsIGh5c3Rl cmljYWwgcmFpc2lucywgc3VmZml4IG9mIF9ndHQuCgpTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxz b24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KUmV2aWV3ZWQtYnk6IE1hdHRoZXcgQXVsZCA8 bWF0dGhldy5hdWxkQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZSAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVf Z2VtX29iamVjdC5jICAgIHwgMjk4ICsrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV9vYmplY3QuaCAgICB8ICAzOSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkx NV9nZW1fc2htZW0uYyAgICAgfCA0OTQgKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2d2dC9jbWRfcGFyc2VyLmMgICAgICAgICB8ICAgOCArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaCAgICAgICAgICAgICAgIHwgIDEwIC0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtLmMgICAgICAgICAgICAgICB8IDgxMSArLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jICAgICAgICAgICAgICB8ICAgMiArLQogZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYuYyAgICAgICAgICAgIHwgICAyICstCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9ndWMuYyAgICAgICAgICAgICAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2xyYy5jICAgICAgICAgICAgICB8ICAgNCArLQogZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jICAgICAgIHwgICAyICstCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF91Y19mdy5jICAgICAgICAgICAgfCAgIDMgKy0KIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L3NlbGZ0ZXN0cy9odWdlX3BhZ2VzLmMgICB8ICAgNiArLQogLi4uL2dwdS9kcm0vaTkx NS9zZWxmdGVzdHMvaTkxNV9nZW1fZG1hYnVmLmMgIHwgICA4ICstCiAuLi4vZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3QuYyAgfCAgIDQgKy0KIDE2IGZpbGVzIGNoYW5nZWQs IDg1OSBpbnNlcnRpb25zKCspLCA4MzUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMKCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2Vm aWxlCmluZGV4IGQyNzBmMDFlMTA5MS4uNTQ0MThjZTVmYWFjIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZQpAQCAtNzIsNiArNzIsNyBAQCBpOTE1LSQoQ09ORklHX0RSTV9JOTE1X1dFUlJPUikgKz0gXAog IyBHRU0gY29kZQogaTkxNS15ICs9IFwKIAkgIGdlbS9pOTE1X2dlbV9vYmplY3QubyBcCisJICBn ZW0vaTkxNV9nZW1fc2htZW0ubyBcCiAJICBpOTE1X2FjdGl2ZS5vIFwKIAkgIGk5MTVfY21kX3Bh cnNlci5vIFwKIAkgIGk5MTVfZ2VtX2JhdGNoX3Bvb2wubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fb2JqZWN0LmMKaW5kZXggODE3OTI1MmJiMzliLi4wNWVmY2U4ODU5NjEg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmMKQEAgLTI2LDYg KzI2LDcgQEAKIAogI2luY2x1ZGUgIi4uL2k5MTVfZHJ2LmgiCiAjaW5jbHVkZSAiLi4vaTkxNV9n bG9iYWxzLmgiCisjaW5jbHVkZSAiLi4vaW50ZWxfZnJvbnRidWZmZXIuaCIKIAogc3RhdGljIHN0 cnVjdCBpOTE1X2dsb2JhbF9vYmplY3QgewogCXN0cnVjdCBpOTE1X2dsb2JhbCBiYXNlOwpAQCAt NDIsNiArNDMsNjQgQEAgdm9pZCBpOTE1X2dlbV9vYmplY3RfZnJlZShzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqKQogCXJldHVybiBrbWVtX2NhY2hlX2ZyZWUoZ2xvYmFsLnNsYWJfb2Jq ZWN0cywgb2JqKTsKIH0KIAorLyogc29tZSBib29ra2VlcGluZyAqLworc3RhdGljIHZvaWQgaTkx NV9nZW1faW5mb19hZGRfb2JqKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAorCQkJCSAg dTY0IHNpemUpCit7CisJc3Bpbl9sb2NrKCZpOTE1LT5tbS5vYmplY3Rfc3RhdF9sb2NrKTsKKwlp OTE1LT5tbS5vYmplY3RfY291bnQrKzsKKwlpOTE1LT5tbS5vYmplY3RfbWVtb3J5ICs9IHNpemU7 CisJc3Bpbl91bmxvY2soJmk5MTUtPm1tLm9iamVjdF9zdGF0X2xvY2spOworfQorCitzdGF0aWMg dm9pZCBpOTE1X2dlbV9pbmZvX3JlbW92ZV9vYmooc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUsCisJCQkJICAgICB1NjQgc2l6ZSkKK3sKKwlzcGluX2xvY2soJmk5MTUtPm1tLm9iamVjdF9z dGF0X2xvY2spOworCWk5MTUtPm1tLm9iamVjdF9jb3VudC0tOworCWk5MTUtPm1tLm9iamVjdF9t ZW1vcnkgLT0gc2l6ZTsKKwlzcGluX3VubG9jaygmaTkxNS0+bW0ub2JqZWN0X3N0YXRfbG9jayk7 Cit9CisKK3N0YXRpYyB2b2lkCitmcm9udGJ1ZmZlcl9yZXRpcmUoc3RydWN0IGk5MTVfYWN0aXZl X3JlcXVlc3QgKmFjdGl2ZSwKKwkJICAgc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCkKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0KKwkJY29udGFpbmVyX29mKGFjdGl2 ZSwgdHlwZW9mKCpvYmopLCBmcm9udGJ1ZmZlcl93cml0ZSk7CisKKwlpbnRlbF9mYl9vYmpfZmx1 c2gob2JqLCBPUklHSU5fQ1MpOworfQorCit2b2lkIGk5MTVfZ2VtX29iamVjdF9pbml0KHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkgIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0X29wcyAqb3BzKQoreworCW11dGV4X2luaXQoJm9iai0+bW0ubG9jayk7CisKKwlz cGluX2xvY2tfaW5pdCgmb2JqLT52bWEubG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJm9iai0+dm1h Lmxpc3QpOworCisJSU5JVF9MSVNUX0hFQUQoJm9iai0+bHV0X2xpc3QpOworCUlOSVRfTElTVF9I RUFEKCZvYmotPmJhdGNoX3Bvb2xfbGluayk7CisKKwlpbml0X3JjdV9oZWFkKCZvYmotPnJjdSk7 CisKKwlvYmotPm9wcyA9IG9wczsKKworCXJlc2VydmF0aW9uX29iamVjdF9pbml0KCZvYmotPl9f YnVpbHRpbl9yZXN2KTsKKwlvYmotPnJlc3YgPSAmb2JqLT5fX2J1aWx0aW5fcmVzdjsKKworCW9i ai0+ZnJvbnRidWZmZXJfZ2d0dF9vcmlnaW4gPSBPUklHSU5fR1RUOworCWk5MTVfYWN0aXZlX3Jl cXVlc3RfaW5pdCgmb2JqLT5mcm9udGJ1ZmZlcl93cml0ZSwKKwkJCQkgTlVMTCwgZnJvbnRidWZm ZXJfcmV0aXJlKTsKKworCW9iai0+bW0ubWFkdiA9IEk5MTVfTUFEVl9XSUxMTkVFRDsKKwlJTklU X1JBRElYX1RSRUUoJm9iai0+bW0uZ2V0X3BhZ2UucmFkaXgsIEdGUF9LRVJORUwgfCBfX0dGUF9O T1dBUk4pOworCW11dGV4X2luaXQoJm9iai0+bW0uZ2V0X3BhZ2UubG9jayk7CisKKwlpOTE1X2dl bV9pbmZvX2FkZF9vYmoodG9faTkxNShvYmotPmJhc2UuZGV2KSwgb2JqLT5iYXNlLnNpemUpOwor fQorCiAvKioKICAqIE1hcmsgdXAgdGhlIG9iamVjdCdzIGNvaGVyZW5jeSBsZXZlbHMgZm9yIGEg Z2l2ZW4gY2FjaGVfbGV2ZWwKICAqIEBvYmo6ICNkcm1faTkxNV9nZW1fb2JqZWN0CkBAIC02NCw2 ICsxMjMsMjQ1IEBAIHZvaWQgaTkxNV9nZW1fb2JqZWN0X3NldF9jYWNoZV9jb2hlcmVuY3koc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJIShvYmotPmNhY2hlX2NvaGVyZW50ICYg STkxNV9CT19DQUNIRV9DT0hFUkVOVF9GT1JfV1JJVEUpOwogfQogCit2b2lkIGk5MTVfZ2VtX2Ns b3NlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbSwgc3RydWN0IGRybV9maWxlICpm aWxlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShnZW0tPmRl dik7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHRvX2ludGVsX2JvKGdlbSk7 CisJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZnByaXYgPSBmaWxlLT5kcml2ZXJfcHJp djsKKwlzdHJ1Y3QgaTkxNV9sdXRfaGFuZGxlICpsdXQsICpsbjsKKworCW11dGV4X2xvY2soJmk5 MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGx1dCwg bG4sICZvYmotPmx1dF9saXN0LCBvYmpfbGluaykgeworCQlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4 dCAqY3R4ID0gbHV0LT5jdHg7CisJCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOworCisJCUdFTV9CVUdf T04oY3R4LT5maWxlX3ByaXYgPT0gRVJSX1BUUigtRUJBREYpKTsKKwkJaWYgKGN0eC0+ZmlsZV9w cml2ICE9IGZwcml2KQorCQkJY29udGludWU7CisKKwkJdm1hID0gcmFkaXhfdHJlZV9kZWxldGUo JmN0eC0+aGFuZGxlc192bWEsIGx1dC0+aGFuZGxlKTsKKwkJR0VNX0JVR19PTih2bWEtPm9iaiAh PSBvYmopOworCisJCS8qIFdlIGFsbG93IHRoZSBwcm9jZXNzIHRvIGhhdmUgbXVsdGlwbGUgaGFu ZGxlcyB0byB0aGUgc2FtZQorCQkgKiB2bWEsIGluIHRoZSBzYW1lIGZkIG5hbWVzcGFjZSwgYnkg dmlydHVlIG9mIGZsaW5rL29wZW4uCisJCSAqLworCQlHRU1fQlVHX09OKCF2bWEtPm9wZW5fY291 bnQpOworCQlpZiAoIS0tdm1hLT5vcGVuX2NvdW50ICYmICFpOTE1X3ZtYV9pc19nZ3R0KHZtYSkp CisJCQlpOTE1X3ZtYV9jbG9zZSh2bWEpOworCisJCWxpc3RfZGVsKCZsdXQtPm9ial9saW5rKTsK KwkJbGlzdF9kZWwoJmx1dC0+Y3R4X2xpbmspOworCisJCWk5MTVfbHV0X2hhbmRsZV9mcmVlKGx1 dCk7CisJCV9faTkxNV9nZW1fb2JqZWN0X3JlbGVhc2VfdW5sZXNzX2FjdGl2ZShvYmopOworCX0K KworCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cit9CisKK3N0YXRpYyBi b29sIGRpc2NhcmRfYmFja2luZ19zdG9yYWdlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmopCit7CisJLyogSWYgd2UgYXJlIHRoZSBsYXN0IHVzZXIgb2YgdGhlIGJhY2tpbmcgc3RvcmFn ZSAoYmUgaXQgc2htZW1mcworCSAqIHBhZ2VzIG9yIHN0b2xlbiBldGMpLCB3ZSBrbm93IHRoYXQg dGhlIHBhZ2VzIGFyZSBnb2luZyB0byBiZQorCSAqIGltbWVkaWF0ZWx5IHJlbGVhc2VkLiBJbiB0 aGlzIGNhc2UsIHdlIGNhbiB0aGVuIHNraXAgY29weWluZworCSAqIGJhY2sgdGhlIGNvbnRlbnRz IGZyb20gdGhlIEdQVS4KKwkgKi8KKworCWlmIChvYmotPm1tLm1hZHYgIT0gSTkxNV9NQURWX1dJ TExORUVEKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIW9iai0+YmFzZS5maWxwKQorCQlyZXR1 cm4gdHJ1ZTsKKworCS8qIEF0IGZpcnN0IGdsYW5jZSwgdGhpcyBsb29rcyByYWN5LCBidXQgdGhl biBhZ2FpbiBzbyB3b3VsZCBiZQorCSAqIHVzZXJzcGFjZSByYWNpbmcgbW1hcCBhZ2FpbnN0IGNs b3NlLiBIb3dldmVyLCB0aGUgZmlyc3QgZXh0ZXJuYWwKKwkgKiByZWZlcmVuY2UgdG8gdGhlIGZp bHAgY2FuIG9ubHkgYmUgb2J0YWluZWQgdGhyb3VnaCB0aGUKKwkgKiBpOTE1X2dlbV9tbWFwX2lv Y3RsKCkgd2hpY2ggc2FmZWd1YXJkcyB1cyBhZ2FpbnN0IHRoZSB1c2VyCisJICogYWNxdWlyaW5n IHN1Y2ggYSByZWZlcmVuY2Ugd2hpbHN0IHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mCisJICogZnJl ZWluZyB0aGUgb2JqZWN0LgorCSAqLworCXJldHVybiBhdG9taWNfbG9uZ19yZWFkKCZvYmotPmJh c2UuZmlscC0+Zl9jb3VudCkgPT0gMTsKK30KKworc3RhdGljIHZvaWQgX19pOTE1X2dlbV9mcmVl X29iamVjdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCisJCQkJICAgIHN0cnVjdCBs bGlzdF9ub2RlICpmcmVlZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCAq b247CisJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7CisKKwl3YWtlcmVmID0gaW50ZWxfcnVudGlt ZV9wbV9nZXQoaTkxNSk7CisJbGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvYmosIG9uLCBmcmVl ZCwgZnJlZWQpIHsKKwkJc3RydWN0IGk5MTVfdm1hICp2bWEsICp2bjsKKworCQl0cmFjZV9pOTE1 X2dlbV9vYmplY3RfZGVzdHJveShvYmopOworCisJCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1 Y3RfbXV0ZXgpOworCisJCUdFTV9CVUdfT04oaTkxNV9nZW1fb2JqZWN0X2lzX2FjdGl2ZShvYmop KTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZtYSwgdm4sICZvYmotPnZtYS5saXN0LCBv YmpfbGluaykgeworCQkJR0VNX0JVR19PTihpOTE1X3ZtYV9pc19hY3RpdmUodm1hKSk7CisJCQl2 bWEtPmZsYWdzICY9IH5JOTE1X1ZNQV9QSU5fTUFTSzsKKwkJCWk5MTVfdm1hX2Rlc3Ryb3kodm1h KTsKKwkJfQorCQlHRU1fQlVHX09OKCFsaXN0X2VtcHR5KCZvYmotPnZtYS5saXN0KSk7CisJCUdF TV9CVUdfT04oIVJCX0VNUFRZX1JPT1QoJm9iai0+dm1hLnRyZWUpKTsKKworCQkvKiBUaGlzIHNl cmlhbGl6ZXMgZnJlZWluZyB3aXRoIHRoZSBzaHJpbmtlci4gU2luY2UgdGhlIGZyZWUKKwkJICog aXMgZGVsYXllZCwgZmlyc3QgYnkgUkNVIHRoZW4gYnkgdGhlIHdvcmtxdWV1ZSwgd2Ugd2FudCB0 aGUKKwkJICogc2hyaW5rZXIgdG8gYmUgYWJsZSB0byBmcmVlIHBhZ2VzIG9mIHVucmVmZXJlbmNl ZCBvYmplY3RzLAorCQkgKiBvciBlbHNlIHdlIG1heSBvb20gd2hpbHN0IHRoZXJlIGFyZSBwbGVu dHkgb2YgZGVmZXJyZWQKKwkJICogZnJlZWQgb2JqZWN0cy4KKwkJICovCisJCWlmIChpOTE1X2dl bV9vYmplY3RfaGFzX3BhZ2VzKG9iaikpIHsKKwkJCXNwaW5fbG9jaygmaTkxNS0+bW0ub2JqX2xv Y2spOworCQkJbGlzdF9kZWxfaW5pdCgmb2JqLT5tbS5saW5rKTsKKwkJCXNwaW5fdW5sb2NrKCZp OTE1LT5tbS5vYmpfbG9jayk7CisJCX0KKworCQltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1 Y3RfbXV0ZXgpOworCisJCUdFTV9CVUdfT04ob2JqLT5iaW5kX2NvdW50KTsKKwkJR0VNX0JVR19P TihvYmotPnVzZXJmYXVsdF9jb3VudCk7CisJCUdFTV9CVUdfT04oYXRvbWljX3JlYWQoJm9iai0+ ZnJvbnRidWZmZXJfYml0cykpOworCQlHRU1fQlVHX09OKCFsaXN0X2VtcHR5KCZvYmotPmx1dF9s aXN0KSk7CisKKwkJaWYgKG9iai0+b3BzLT5yZWxlYXNlKQorCQkJb2JqLT5vcHMtPnJlbGVhc2Uo b2JqKTsKKworCQlpZiAoV0FSTl9PTihpOTE1X2dlbV9vYmplY3RfaGFzX3Bpbm5lZF9wYWdlcyhv YmopKSkKKwkJCWF0b21pY19zZXQoJm9iai0+bW0ucGFnZXNfcGluX2NvdW50LCAwKTsKKwkJX19p OTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKG9iaiwgSTkxNV9NTV9OT1JNQUwpOworCQlHRU1fQlVH X09OKGk5MTVfZ2VtX29iamVjdF9oYXNfcGFnZXMob2JqKSk7CisKKwkJaWYgKG9iai0+YmFzZS5p bXBvcnRfYXR0YWNoKQorCQkJZHJtX3ByaW1lX2dlbV9kZXN0cm95KCZvYmotPmJhc2UsIE5VTEwp OworCisJCXJlc2VydmF0aW9uX29iamVjdF9maW5pKCZvYmotPl9fYnVpbHRpbl9yZXN2KTsKKwkJ ZHJtX2dlbV9vYmplY3RfcmVsZWFzZSgmb2JqLT5iYXNlKTsKKwkJaTkxNV9nZW1faW5mb19yZW1v dmVfb2JqKGk5MTUsIG9iai0+YmFzZS5zaXplKTsKKworCQlrZnJlZShvYmotPmJpdF8xNyk7CisJ CWk5MTVfZ2VtX29iamVjdF9mcmVlKG9iaik7CisKKwkJR0VNX0JVR19PTighYXRvbWljX3JlYWQo Jmk5MTUtPm1tLmZyZWVfY291bnQpKTsKKwkJYXRvbWljX2RlYygmaTkxNS0+bW0uZnJlZV9jb3Vu dCk7CisKKwkJaWYgKG9uKQorCQkJY29uZF9yZXNjaGVkKCk7CisJfQorCWludGVsX3J1bnRpbWVf cG1fcHV0KGk5MTUsIHdha2VyZWYpOworfQorCit2b2lkIGk5MTVfZ2VtX2ZsdXNoX2ZyZWVfb2Jq ZWN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKK3sKKwlzdHJ1Y3QgbGxpc3Rfbm9k ZSAqZnJlZWQ7CisKKwkvKiBGcmVlIHRoZSBvbGRlc3QsIG1vc3Qgc3RhbGUgb2JqZWN0IHRvIGtl ZXAgdGhlIGZyZWVfbGlzdCBzaG9ydCAqLworCWZyZWVkID0gTlVMTDsKKwlpZiAoIWxsaXN0X2Vt cHR5KCZpOTE1LT5tbS5mcmVlX2xpc3QpKSB7IC8qIHF1aWNrIHRlc3QgZm9yIGhvdHBhdGggKi8K KwkJLyogT25seSBvbmUgY29uc3VtZXIgb2YgbGxpc3RfZGVsX2ZpcnN0KCkgYWxsb3dlZCAqLwor CQlzcGluX2xvY2soJmk5MTUtPm1tLmZyZWVfbG9jayk7CisJCWZyZWVkID0gbGxpc3RfZGVsX2Zp cnN0KCZpOTE1LT5tbS5mcmVlX2xpc3QpOworCQlzcGluX3VubG9jaygmaTkxNS0+bW0uZnJlZV9s b2NrKTsKKwl9CisJaWYgKHVubGlrZWx5KGZyZWVkKSkgeworCQlmcmVlZC0+bmV4dCA9IE5VTEw7 CisJCV9faTkxNV9nZW1fZnJlZV9vYmplY3RzKGk5MTUsIGZyZWVkKTsKKwl9Cit9CisKK3N0YXRp YyB2b2lkIF9faTkxNV9nZW1fZnJlZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSwgbW0uZnJlZV93b3JrKTsKKwlzdHJ1Y3QgbGxpc3Rfbm9k ZSAqZnJlZWQ7CisKKwkvKgorCSAqIEFsbCBmaWxlLW93bmVkIFZNQSBzaG91bGQgaGF2ZSBiZWVu IHJlbGVhc2VkIGJ5IHRoaXMgcG9pbnQgdGhyb3VnaAorCSAqIGk5MTVfZ2VtX2Nsb3NlX29iamVj dCgpLCBvciBlYXJsaWVyIGJ5IGk5MTVfZ2VtX2NvbnRleHRfY2xvc2UoKS4KKwkgKiBIb3dldmVy LCB0aGUgb2JqZWN0IG1heSBhbHNvIGJlIGJvdW5kIGludG8gdGhlIGdsb2JhbCBHVFQgKGUuZy4K KwkgKiBvbGRlciBHUFVzIHdpdGhvdXQgcGVyLXByb2Nlc3Mgc3VwcG9ydCwgb3IgZm9yIGRpcmVj dCBhY2Nlc3MgdGhyb3VnaAorCSAqIHRoZSBHVFQgZWl0aGVyIGZvciB0aGUgdXNlciBvciBmb3Ig c2Nhbm91dCkuIFRob3NlIFZNQSBzdGlsbCBuZWVkIHRvCisJICogdW5ib3VuZCBub3cuCisJICov CisKKwlzcGluX2xvY2soJmk5MTUtPm1tLmZyZWVfbG9jayk7CisJd2hpbGUgKChmcmVlZCA9IGxs aXN0X2RlbF9hbGwoJmk5MTUtPm1tLmZyZWVfbGlzdCkpKSB7CisJCXNwaW5fdW5sb2NrKCZpOTE1 LT5tbS5mcmVlX2xvY2spOworCisJCV9faTkxNV9nZW1fZnJlZV9vYmplY3RzKGk5MTUsIGZyZWVk KTsKKwkJaWYgKG5lZWRfcmVzY2hlZCgpKQorCQkJcmV0dXJuOworCisJCXNwaW5fbG9jaygmaTkx NS0+bW0uZnJlZV9sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2soJmk5MTUtPm1tLmZyZWVfbG9jayk7 Cit9CisKK3N0YXRpYyB2b2lkIF9faTkxNV9nZW1fZnJlZV9vYmplY3RfcmN1KHN0cnVjdCByY3Vf aGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0KKwkJY29u dGFpbmVyX29mKGhlYWQsIHR5cGVvZigqb2JqKSwgcmN1KTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSA9IHRvX2k5MTUob2JqLT5iYXNlLmRldik7CisKKwkvKgorCSAqIFdlIHJldXNl IG9iai0+cmN1IGZvciB0aGUgZnJlZWQgbGlzdCwgc28gd2UgaGFkIGJldHRlciBub3QgdHJlYXQK KwkgKiBpdCBsaWtlIGEgcmN1X2hlYWQgZnJvbSB0aGlzIHBvaW50IGZvcndhcmRzLiBBbmQgd2Ug ZXhwZWN0IGFsbAorCSAqIG9iamVjdHMgdG8gYmUgZnJlZWQgdmlhIHRoaXMgcGF0aC4KKwkgKi8K KwlkZXN0cm95X3JjdV9oZWFkKCZvYmotPnJjdSk7CisKKwkvKgorCSAqIFNpbmNlIHdlIHJlcXVp cmUgYmxvY2tpbmcgb24gc3RydWN0X211dGV4IHRvIHVuYmluZCB0aGUgZnJlZWQKKwkgKiBvYmpl Y3QgZnJvbSB0aGUgR1BVIGJlZm9yZSByZWxlYXNpbmcgcmVzb3VyY2VzIGJhY2sgdG8gdGhlCisJ ICogc3lzdGVtLCB3ZSBjYW4gbm90IGRvIHRoYXQgZGlyZWN0bHkgZnJvbSB0aGUgUkNVIGNhbGxi YWNrICh3aGljaCBtYXkKKwkgKiBiZSBhIHNvZnRpcnEgY29udGV4dCksIGJ1dCBtdXN0IGluc3Rl YWQgdGhlbiBkZWZlciB0aGF0IHdvcmsgb250byBhCisJICoga3RocmVhZC4gV2UgdXNlIHRoZSBS Q1UgY2FsbGJhY2sgcmF0aGVyIHRoYW4gbW92ZSB0aGUgZnJlZWQgb2JqZWN0CisJICogZGlyZWN0 bHkgb250byB0aGUgd29yayBxdWV1ZSBzbyB0aGF0IHdlIGNhbiBtaXggYmV0d2VlbiB1c2luZyB0 aGUKKwkgKiB3b3JrZXIgYW5kIHBlcmZvcm1pbmcgZnJlZXMgZGlyZWN0bHkgZnJvbSBzdWJzZXF1 ZW50IGFsbG9jYXRpb25zIGZvcgorCSAqIGNydWRlIGJ1dCBlZmZlY3RpdmUgbWVtb3J5IHRocm90 dGxpbmcuCisJICovCisJaWYgKGxsaXN0X2FkZCgmb2JqLT5mcmVlZCwgJmk5MTUtPm1tLmZyZWVf bGlzdCkpCisJCXF1ZXVlX3dvcmsoaTkxNS0+d3EsICZpOTE1LT5tbS5mcmVlX3dvcmspOworfQor Cit2b2lkIGk5MTVfZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29i aikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gdG9faW50ZWxfYm8oZ2Vt X29iaik7CisKKwlpZiAob2JqLT5tbS5xdWlya2VkKQorCQlfX2k5MTVfZ2VtX29iamVjdF91bnBp bl9wYWdlcyhvYmopOworCisJaWYgKGRpc2NhcmRfYmFja2luZ19zdG9yYWdlKG9iaikpCisJCW9i ai0+bW0ubWFkdiA9IEk5MTVfTUFEVl9ET05UTkVFRDsKKworCS8qCisJICogQmVmb3JlIHdlIGZy ZWUgdGhlIG9iamVjdCwgbWFrZSBzdXJlIGFueSBwdXJlIFJDVS1vbmx5CisJICogcmVhZC1zaWRl IGNyaXRpY2FsIHNlY3Rpb25zIGFyZSBjb21wbGV0ZSwgZS5nLgorCSAqIGk5MTVfZ2VtX2J1c3lf aW9jdGwoKS4gRm9yIHRoZSBjb3JyZXNwb25kaW5nIHN5bmNocm9uaXplZAorCSAqIGxvb2t1cCBz ZWUgaTkxNV9nZW1fb2JqZWN0X2xvb2t1cF9yY3UoKS4KKwkgKi8KKwlhdG9taWNfaW5jKCZ0b19p OTE1KG9iai0+YmFzZS5kZXYpLT5tbS5mcmVlX2NvdW50KTsKKwljYWxsX3JjdSgmb2JqLT5yY3Us IF9faTkxNV9nZW1fZnJlZV9vYmplY3RfcmN1KTsKK30KKwordm9pZCBfX2k5MTVfZ2VtX29iamVj dF9yZWxlYXNlX3VubGVzc19hY3RpdmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikK K3sKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZvYmotPmJhc2UuZGV2LT5zdHJ1Y3RfbXV0ZXgpOwor CisJaWYgKCFpOTE1X2dlbV9vYmplY3RfaGFzX2FjdGl2ZV9yZWZlcmVuY2Uob2JqKSAmJgorCSAg ICBpOTE1X2dlbV9vYmplY3RfaXNfYWN0aXZlKG9iaikpCisJCWk5MTVfZ2VtX29iamVjdF9zZXRf YWN0aXZlX3JlZmVyZW5jZShvYmopOworCWVsc2UKKwkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmop OworfQorCit2b2lkIGk5MTVfZ2VtX2luaXRfX29iamVjdHMoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUpCit7CisJSU5JVF9XT1JLKCZpOTE1LT5tbS5mcmVlX3dvcmssIF9faTkxNV9nZW1f ZnJlZV93b3JrKTsKK30KKwogc3RhdGljIHZvaWQgaTkxNV9nbG9iYWxfb2JqZWN0c19zaHJpbmso dm9pZCkKIHsKIAlrbWVtX2NhY2hlX3NocmluayhnbG9iYWwuc2xhYl9vYmplY3RzKTsKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaCBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaAppbmRleCA4MGQ4NjZkZTM0YTgu LjA1YmJiM2YzMzkwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVf Z2VtX29iamVjdC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmpl Y3QuaApAQCAtMTUsOSArMTUsMjkgQEAKIAogI2luY2x1ZGUgImk5MTVfZ2VtX29iamVjdF90eXBl cy5oIgogCit2b2lkIGk5MTVfZ2VtX2luaXRfX29iamVjdHMoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUpOworCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqaTkxNV9nZW1fb2JqZWN0 X2FsbG9jKHZvaWQpOwogdm9pZCBpOTE1X2dlbV9vYmplY3RfZnJlZShzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqKTsKIAordm9pZCBpOTE1X2dlbV9vYmplY3RfaW5pdChzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJICBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdF9vcHMgKm9wcyk7CitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqCitpOTE1X2dlbV9v YmplY3RfY3JlYXRlX3NobWVtKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCB1NjQgc2l6 ZSk7CitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqCitpOTE1X2dlbV9vYmplY3RfY3JlYXRl X3NobWVtX2Zyb21fZGF0YShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKKwkJCQkgICAg ICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpOworCitleHRlcm4gY29uc3Qgc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3Rfb3BzIGk5MTVfZ2VtX3NobWVtX29wczsKK3ZvaWQgX19pOTE1 X2dlbV9vYmplY3RfcmVsZWFzZV9zaG1lbShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq LAorCQkJCSAgICAgc3RydWN0IHNnX3RhYmxlICpwYWdlcywKKwkJCQkgICAgIGJvb2wgbmVlZHNf Y2xmbHVzaCk7CisKK3ZvaWQgaTkxNV9nZW1fY2xvc2Vfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqZ2VtLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwordm9pZCBpOTE1X2dlbV9mcmVlX29i amVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CisKK3ZvaWQgaTkxNV9nZW1fZmx1c2hf ZnJlZV9vYmplY3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKKwogLyoqCiAgKiBp OTE1X2dlbV9vYmplY3RfbG9va3VwX3JjdSAtIGxvb2sgdXAgYSB0ZW1wb3JhcnkgR0VNIG9iamVj dCBmcm9tIGl0cyBoYW5kbGUKICAqIEBmaWxwOiBEUk0gZmlsZSBwcml2YXRlIGRhdGUKQEAgLTMz MCw0ICszNTAsMjMgQEAgdm9pZCBpOTE1X2dlbV9vYmplY3Rfc2V0X2NhY2hlX2NvaGVyZW5jeShz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCQkJCQkgdW5zaWduZWQgaW50IGNhY2hl X2xldmVsKTsKIHZvaWQgaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2lmX2Rpc3BsYXkoc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaik7CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBjcHVfd3JpdGVf bmVlZHNfY2xmbHVzaChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQoreworCWlmIChv YmotPmNhY2hlX2RpcnR5KQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIShvYmotPmNhY2hlX2Nv aGVyZW50ICYgSTkxNV9CT19DQUNIRV9DT0hFUkVOVF9GT1JfV1JJVEUpKQorCQlyZXR1cm4gdHJ1 ZTsKKworCXJldHVybiBvYmotPnBpbl9nbG9iYWw7IC8qIGN1cnJlbnRseSBpbiB1c2UgYnkgSFcs IGtlZXAgZmx1c2hlZCAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19zdGFydF9jcHVfd3Jp dGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwlvYmotPnJlYWRfZG9tYWlu cyA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7CisJb2JqLT53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9E T01BSU5fQ1BVOworCWlmIChjcHVfd3JpdGVfbmVlZHNfY2xmbHVzaChvYmopKQorCQlvYmotPmNh Y2hlX2RpcnR5ID0gdHJ1ZTsKK30KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fc2htZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV9zaG1lbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u YWE4YjhlYjA5OGZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2Vt L2k5MTVfZ2VtX3NobWVtLmMKQEAgLTAsMCArMSw0OTQgQEAKKy8qCisgKiBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogTUlUCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTQtMjAxNiBJbnRlbCBDb3Jw b3JhdGlvbgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CisjaW5jbHVkZSA8bGlu dXgvc3dhcC5oPgorCisjaW5jbHVkZSAiaTkxNV9nZW1fb2JqZWN0LmgiCisKKyNpbmNsdWRlICIu Li9pOTE1X2Rydi5oIgorCisvKgorICogTW92ZSBwYWdlcyB0byBhcHByb3ByaWF0ZSBscnUgYW5k IHJlbGVhc2UgdGhlIHBhZ2V2ZWMsIGRlY3JlbWVudGluZyB0aGUKKyAqIHJlZiBjb3VudCBvZiB0 aG9zZSBwYWdlcy4KKyAqLworc3RhdGljIHZvaWQgY2hlY2tfcmVsZWFzZV9wYWdldmVjKHN0cnVj dCBwYWdldmVjICpwdmVjKQoreworCWNoZWNrX21vdmVfdW5ldmljdGFibGVfcGFnZXMocHZlYyk7 CisJX19wYWdldmVjX3JlbGVhc2UocHZlYyk7CisJY29uZF9yZXNjaGVkKCk7Cit9CisKK3N0YXRp YyBpbnQgc2htZW1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCit7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KG9iai0+YmFzZS5kZXYp OworCWNvbnN0IHVuc2lnbmVkIGxvbmcgcGFnZV9jb3VudCA9IG9iai0+YmFzZS5zaXplIC8gUEFH RV9TSVpFOworCXVuc2lnbmVkIGxvbmcgaTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGlu ZzsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnN0OworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJc3Ry dWN0IHNndF9pdGVyIHNndF9pdGVyOworCXN0cnVjdCBwYWdlICpwYWdlOworCXVuc2lnbmVkIGxv bmcgbGFzdF9wZm4gPSAwOwkvKiBzdXBwcmVzcyBnY2Mgd2FybmluZyAqLworCXVuc2lnbmVkIGlu dCBtYXhfc2VnbWVudCA9IGk5MTVfc2dfc2VnbWVudF9zaXplKCk7CisJdW5zaWduZWQgaW50IHNn X3BhZ2Vfc2l6ZXM7CisJc3RydWN0IHBhZ2V2ZWMgcHZlYzsKKwlnZnBfdCBub3JlY2xhaW07CisJ aW50IHJldDsKKworCS8qCisJICogQXNzZXJ0IHRoYXQgdGhlIG9iamVjdCBpcyBub3QgY3VycmVu dGx5IGluIGFueSBHUFUgZG9tYWluLiBBcyBpdAorCSAqIHdhc24ndCBpbiB0aGUgR1RULCB0aGVy ZSBzaG91bGRuJ3QgYmUgYW55IHdheSBpdCBjb3VsZCBoYXZlIGJlZW4gaW4KKwkgKiBhIEdQVSBj YWNoZQorCSAqLworCUdFTV9CVUdfT04ob2JqLT5yZWFkX2RvbWFpbnMgJiBJOTE1X0dFTV9HUFVf RE9NQUlOUyk7CisJR0VNX0JVR19PTihvYmotPndyaXRlX2RvbWFpbiAmIEk5MTVfR0VNX0dQVV9E T01BSU5TKTsKKworCS8qCisJICogSWYgdGhlcmUncyBubyBjaGFuY2Ugb2YgYWxsb2NhdGluZyBl bm91Z2ggcGFnZXMgZm9yIHRoZSB3aG9sZQorCSAqIG9iamVjdCwgYmFpbCBlYXJseS4KKwkgKi8K KwlpZiAocGFnZV9jb3VudCA+IHRvdGFscmFtX3BhZ2VzKCkpCisJCXJldHVybiAtRU5PTUVNOwor CisJc3QgPSBrbWFsbG9jKHNpemVvZigqc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0KQorCQly ZXR1cm4gLUVOT01FTTsKKworcmVidWlsZF9zdDoKKwlpZiAoc2dfYWxsb2NfdGFibGUoc3QsIHBh Z2VfY291bnQsIEdGUF9LRVJORUwpKSB7CisJCWtmcmVlKHN0KTsKKwkJcmV0dXJuIC1FTk9NRU07 CisJfQorCisJLyoKKwkgKiBHZXQgdGhlIGxpc3Qgb2YgcGFnZXMgb3V0IG9mIG91ciBzdHJ1Y3Qg ZmlsZS4gIFRoZXknbGwgYmUgcGlubmVkCisJICogYXQgdGhpcyBwb2ludCB1bnRpbCB3ZSByZWxl YXNlIHRoZW0uCisJICoKKwkgKiBGYWlsIHNpbGVudGx5IHdpdGhvdXQgc3RhcnRpbmcgdGhlIHNo cmlua2VyCisJICovCisJbWFwcGluZyA9IG9iai0+YmFzZS5maWxwLT5mX21hcHBpbmc7CisJbWFw cGluZ19zZXRfdW5ldmljdGFibGUobWFwcGluZyk7CisJbm9yZWNsYWltID0gbWFwcGluZ19nZnBf Y29uc3RyYWludChtYXBwaW5nLCB+X19HRlBfUkVDTEFJTSk7CisJbm9yZWNsYWltIHw9IF9fR0ZQ X05PUkVUUlkgfCBfX0dGUF9OT1dBUk47CisKKwlzZyA9IHN0LT5zZ2w7CisJc3QtPm5lbnRzID0g MDsKKwlzZ19wYWdlX3NpemVzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgcGFnZV9jb3VudDsgaSsr KSB7CisJCWNvbnN0IHVuc2lnbmVkIGludCBzaHJpbmtbXSA9IHsKKwkJCShJOTE1X1NIUklOS19C T1VORCB8CisJCQkgSTkxNV9TSFJJTktfVU5CT1VORCB8CisJCQkgSTkxNV9TSFJJTktfUFVSR0VB QkxFKSwKKwkJCTAsCisJCX0sICpzID0gc2hyaW5rOworCQlnZnBfdCBnZnAgPSBub3JlY2xhaW07 CisKKwkJZG8geworCQkJY29uZF9yZXNjaGVkKCk7CisJCQlwYWdlID0gc2htZW1fcmVhZF9tYXBw aW5nX3BhZ2VfZ2ZwKG1hcHBpbmcsIGksIGdmcCk7CisJCQlpZiAoIUlTX0VSUihwYWdlKSkKKwkJ CQlicmVhazsKKworCQkJaWYgKCEqcykgeworCQkJCXJldCA9IFBUUl9FUlIocGFnZSk7CisJCQkJ Z290byBlcnJfc2c7CisJCQl9CisKKwkJCWk5MTVfZ2VtX3NocmluayhpOTE1LCAyICogcGFnZV9j b3VudCwgTlVMTCwgKnMrKyk7CisKKwkJCS8qCisJCQkgKiBXZSd2ZSB0cmllZCBoYXJkIHRvIGFs bG9jYXRlIHRoZSBtZW1vcnkgYnkgcmVhcGluZworCQkJICogb3VyIG93biBidWZmZXIsIG5vdyBs ZXQgdGhlIHJlYWwgVk0gZG8gaXRzIGpvYiBhbmQKKwkJCSAqIGdvIGRvd24gaW4gZmxhbWVzIGlm IHRydWx5IE9PTS4KKwkJCSAqCisJCQkgKiBIb3dldmVyLCBzaW5jZSBncmFwaGljcyB0ZW5kIHRv IGJlIGRpc3Bvc2FibGUsCisJCQkgKiBkZWZlciB0aGUgb29tIGhlcmUgYnkgcmVwb3J0aW5nIHRo ZSBFTk9NRU0gYmFjaworCQkJICogdG8gdXNlcnNwYWNlLgorCQkJICovCisJCQlpZiAoISpzKSB7 CisJCQkJLyogcmVjbGFpbSBhbmQgd2FybiwgYnV0IG5vIG9vbSAqLworCQkJCWdmcCA9IG1hcHBp bmdfZ2ZwX21hc2sobWFwcGluZyk7CisKKwkJCQkvKgorCQkJCSAqIE91ciBibyBhcmUgYWx3YXlz IGRpcnR5IGFuZCBzbyB3ZSByZXF1aXJlCisJCQkJICoga3N3YXBkIHRvIHJlY2xhaW0gb3VyIHBh Z2VzIChkaXJlY3QgcmVjbGFpbQorCQkJCSAqIGRvZXMgbm90IGVmZmVjdGl2ZWx5IGJlZ2luIHBh Z2VvdXQgb2Ygb3VyCisJCQkJICogYnVmZmVycyBvbiBpdHMgb3duKS4gSG93ZXZlciwgZGlyZWN0 IHJlY2xhaW0KKwkJCQkgKiBvbmx5IHdhaXRzIGZvciBrc3dhcGQgd2hlbiB1bmRlciBhbGxvY2F0 aW9uCisJCQkJICogY29uZ2VzdGlvbi4gU28gYXMgYSByZXN1bHQgX19HRlBfUkVDTEFJTSBpcwor CQkJCSAqIHVucmVsaWFibGUgYW5kIGZhaWxzIHRvIGFjdHVhbGx5IHJlY2xhaW0gb3VyCisJCQkJ ICogZGlydHkgcGFnZXMgLS0gdW5sZXNzIHlvdSB0cnkgb3ZlciBhbmQgb3ZlcgorCQkJCSAqIGFn YWluIHdpdGggIV9fR0ZQX05PUkVUUlkuIEhvd2V2ZXIsIHdlIHN0aWxsCisJCQkJICogd2FudCB0 byBmYWlsIHRoaXMgYWxsb2NhdGlvbiByYXRoZXIgdGhhbgorCQkJCSAqIHRyaWdnZXIgdGhlIG91 dC1vZi1tZW1vcnkga2lsbGVyIGFuZCBmb3IKKwkJCQkgKiB0aGlzIHdlIHdhbnQgX19HRlBfUkVU UllfTUFZRkFJTC4KKwkJCQkgKi8KKwkJCQlnZnAgfD0gX19HRlBfUkVUUllfTUFZRkFJTDsKKwkJ CX0KKwkJfSB3aGlsZSAoMSk7CisKKwkJaWYgKCFpIHx8CisJCSAgICBzZy0+bGVuZ3RoID49IG1h eF9zZWdtZW50IHx8CisJCSAgICBwYWdlX3RvX3BmbihwYWdlKSAhPSBsYXN0X3BmbiArIDEpIHsK KwkJCWlmIChpKSB7CisJCQkJc2dfcGFnZV9zaXplcyB8PSBzZy0+bGVuZ3RoOworCQkJCXNnID0g c2dfbmV4dChzZyk7CisJCQl9CisJCQlzdC0+bmVudHMrKzsKKwkJCXNnX3NldF9wYWdlKHNnLCBw YWdlLCBQQUdFX1NJWkUsIDApOworCQl9IGVsc2UgeworCQkJc2ctPmxlbmd0aCArPSBQQUdFX1NJ WkU7CisJCX0KKwkJbGFzdF9wZm4gPSBwYWdlX3RvX3BmbihwYWdlKTsKKworCQkvKiBDaGVjayB0 aGF0IHRoZSBpOTY1Zy9nbSB3b3JrYXJvdW5kIHdvcmtzLiAqLworCQlXQVJOX09OKChnZnAgJiBf X0dGUF9ETUEzMikgJiYgKGxhc3RfcGZuID49IDB4MDAxMDAwMDBVTCkpOworCX0KKwlpZiAoc2cp IHsgLyogbG9vcCB0ZXJtaW5hdGVkIGVhcmx5OyBzaG9ydCBzZyB0YWJsZSAqLworCQlzZ19wYWdl X3NpemVzIHw9IHNnLT5sZW5ndGg7CisJCXNnX21hcmtfZW5kKHNnKTsKKwl9CisKKwkvKiBUcmlt IHVudXNlZCBzZyBlbnRyaWVzIHRvIGF2b2lkIHdhc3RpbmcgbWVtb3J5LiAqLworCWk5MTVfc2df dHJpbShzdCk7CisKKwlyZXQgPSBpOTE1X2dlbV9ndHRfcHJlcGFyZV9wYWdlcyhvYmosIHN0KTsK KwlpZiAocmV0KSB7CisJCS8qCisJCSAqIERNQSByZW1hcHBpbmcgZmFpbGVkPyBPbmUgcG9zc2li bGUgY2F1c2UgaXMgdGhhdAorCQkgKiBpdCBjb3VsZCBub3QgcmVzZXJ2ZSBlbm91Z2ggbGFyZ2Ug ZW50cmllcywgYXNraW5nCisJCSAqIGZvciBQQUdFX1NJWkUgY2h1bmtzIGluc3RlYWQgbWF5IGJl IGhlbHBmdWwuCisJCSAqLworCQlpZiAobWF4X3NlZ21lbnQgPiBQQUdFX1NJWkUpIHsKKwkJCWZv cl9lYWNoX3NndF9wYWdlKHBhZ2UsIHNndF9pdGVyLCBzdCkKKwkJCQlwdXRfcGFnZShwYWdlKTsK KwkJCXNnX2ZyZWVfdGFibGUoc3QpOworCisJCQltYXhfc2VnbWVudCA9IFBBR0VfU0laRTsKKwkJ CWdvdG8gcmVidWlsZF9zdDsKKwkJfSBlbHNlIHsKKwkJCWRldl93YXJuKCZpOTE1LT5kcm0ucGRl di0+ZGV2LAorCQkJCSAiRmFpbGVkIHRvIERNQSByZW1hcCAlbHUgcGFnZXNcbiIsCisJCQkJIHBh Z2VfY291bnQpOworCQkJZ290byBlcnJfcGFnZXM7CisJCX0KKwl9CisKKwlpZiAoaTkxNV9nZW1f b2JqZWN0X25lZWRzX2JpdDE3X3N3aXp6bGUob2JqKSkKKwkJaTkxNV9nZW1fb2JqZWN0X2RvX2Jp dF8xN19zd2l6emxlKG9iaiwgc3QpOworCisJX19pOTE1X2dlbV9vYmplY3Rfc2V0X3BhZ2VzKG9i aiwgc3QsIHNnX3BhZ2Vfc2l6ZXMpOworCisJcmV0dXJuIDA7CisKK2Vycl9zZzoKKwlzZ19tYXJr X2VuZChzZyk7CitlcnJfcGFnZXM6CisJbWFwcGluZ19jbGVhcl91bmV2aWN0YWJsZShtYXBwaW5n KTsKKwlwYWdldmVjX2luaXQoJnB2ZWMpOworCWZvcl9lYWNoX3NndF9wYWdlKHBhZ2UsIHNndF9p dGVyLCBzdCkgeworCQlpZiAoIXBhZ2V2ZWNfYWRkKCZwdmVjLCBwYWdlKSkKKwkJCWNoZWNrX3Jl bGVhc2VfcGFnZXZlYygmcHZlYyk7CisJfQorCWlmIChwYWdldmVjX2NvdW50KCZwdmVjKSkKKwkJ Y2hlY2tfcmVsZWFzZV9wYWdldmVjKCZwdmVjKTsKKwlzZ19mcmVlX3RhYmxlKHN0KTsKKwlrZnJl ZShzdCk7CisKKwkvKgorCSAqIHNobWVtZnMgZmlyc3QgY2hlY2tzIGlmIHRoZXJlIGlzIGVub3Vn aCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlIHBhZ2UKKwkgKiBhbmQgcmVwb3J0cyBFTk9TUEMgc2hv dWxkIHRoZXJlIGJlIGluc3VmZmljaWVudCwgYWxvbmcgd2l0aCB0aGUgdXN1YWwKKwkgKiBFTk9N RU0gZm9yIGEgZ2VudWluZSBhbGxvY2F0aW9uIGZhaWx1cmUuCisJICoKKwkgKiBXZSB1c2UgRU5P U1BDIGluIG91ciBkcml2ZXIgdG8gbWVhbiB0aGF0IHdlIGhhdmUgcnVuIG91dCBvZiBhcGVydHVy ZQorCSAqIHNwYWNlIGFuZCBzbyB3YW50IHRvIHRyYW5zbGF0ZSB0aGUgZXJyb3IgZnJvbSBzaG1l bWZzIGJhY2sgdG8gb3VyCisJICogdXN1YWwgdW5kZXJzdGFuZGluZyBvZiBFTk9NRU0uCisJICov CisJaWYgKHJldCA9PSAtRU5PU1BDKQorCQlyZXQgPSAtRU5PTUVNOworCisJcmV0dXJuIHJldDsK K30KKwordm9pZAorX19pOTE1X2dlbV9vYmplY3RfcmVsZWFzZV9zaG1lbShzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJCXN0cnVjdCBzZ190YWJsZSAqcGFnZXMsCisJCQkJYm9v bCBuZWVkc19jbGZsdXNoKQoreworCUdFTV9CVUdfT04ob2JqLT5tbS5tYWR2ID09IF9fSTkxNV9N QURWX1BVUkdFRCk7CisKKwlpZiAob2JqLT5tbS5tYWR2ID09IEk5MTVfTUFEVl9ET05UTkVFRCkK KwkJb2JqLT5tbS5kaXJ0eSA9IGZhbHNlOworCisJaWYgKG5lZWRzX2NsZmx1c2ggJiYKKwkgICAg KG9iai0+cmVhZF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkgPT0gMCAmJgorCSAgICAh KG9iai0+Y2FjaGVfY29oZXJlbnQgJiBJOTE1X0JPX0NBQ0hFX0NPSEVSRU5UX0ZPUl9SRUFEKSkK KwkJZHJtX2NsZmx1c2hfc2cocGFnZXMpOworCisJX19zdGFydF9jcHVfd3JpdGUob2JqKTsKK30K Kworc3RhdGljIHZvaWQKK3NobWVtX3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqLCBzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzKQoreworCXN0cnVjdCBzZ3RfaXRlciBzZ3Rf aXRlcjsKKwlzdHJ1Y3QgcGFnZXZlYyBwdmVjOworCXN0cnVjdCBwYWdlICpwYWdlOworCisJX19p OTE1X2dlbV9vYmplY3RfcmVsZWFzZV9zaG1lbShvYmosIHBhZ2VzLCB0cnVlKTsKKworCWk5MTVf Z2VtX2d0dF9maW5pc2hfcGFnZXMob2JqLCBwYWdlcyk7CisKKwlpZiAoaTkxNV9nZW1fb2JqZWN0 X25lZWRzX2JpdDE3X3N3aXp6bGUob2JqKSkKKwkJaTkxNV9nZW1fb2JqZWN0X3NhdmVfYml0XzE3 X3N3aXp6bGUob2JqLCBwYWdlcyk7CisKKwltYXBwaW5nX2NsZWFyX3VuZXZpY3RhYmxlKGZpbGVf aW5vZGUob2JqLT5iYXNlLmZpbHApLT5pX21hcHBpbmcpOworCisJcGFnZXZlY19pbml0KCZwdmVj KTsKKwlmb3JfZWFjaF9zZ3RfcGFnZShwYWdlLCBzZ3RfaXRlciwgcGFnZXMpIHsKKwkJaWYgKG9i ai0+bW0uZGlydHkpCisJCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKKworCQlpZiAob2JqLT5tbS5t YWR2ID09IEk5MTVfTUFEVl9XSUxMTkVFRCkKKwkJCW1hcmtfcGFnZV9hY2Nlc3NlZChwYWdlKTsK KworCQlpZiAoIXBhZ2V2ZWNfYWRkKCZwdmVjLCBwYWdlKSkKKwkJCWNoZWNrX3JlbGVhc2VfcGFn ZXZlYygmcHZlYyk7CisJfQorCWlmIChwYWdldmVjX2NvdW50KCZwdmVjKSkKKwkJY2hlY2tfcmVs ZWFzZV9wYWdldmVjKCZwdmVjKTsKKwlvYmotPm1tLmRpcnR5ID0gZmFsc2U7CisKKwlzZ19mcmVl X3RhYmxlKHBhZ2VzKTsKKwlrZnJlZShwYWdlcyk7Cit9CisKK3N0YXRpYyBpbnQKK3NobWVtX3B3 cml0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCSAgICAgY29uc3Qgc3RydWN0 IGRybV9pOTE1X2dlbV9wd3JpdGUgKmFyZykKK3sKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFw cGluZyA9IG9iai0+YmFzZS5maWxwLT5mX21hcHBpbmc7CisJY2hhciBfX3VzZXIgKnVzZXJfZGF0 YSA9IHU2NF90b191c2VyX3B0cihhcmctPmRhdGFfcHRyKTsKKwl1NjQgcmVtYWluLCBvZmZzZXQ7 CisJdW5zaWduZWQgaW50IHBnOworCisJLyogQmVmb3JlIHdlIGluc3RhbnRpYXRlL3BpbiB0aGUg YmFja2luZyBzdG9yZSBmb3Igb3VyIHVzZSwgd2UKKwkgKiBjYW4gcHJlcG9wdWxhdGUgdGhlIHNo bWVtZnMgZmlscCBlZmZpY2llbnRseSB1c2luZyBhIHdyaXRlIGludG8KKwkgKiB0aGUgcGFnZWNh Y2hlLiBXZSBhdm9pZCB0aGUgcGVuYWx0eSBvZiBpbnN0YW50aWF0aW5nIGFsbCB0aGUKKwkgKiBw YWdlcywgaW1wb3J0YW50IGlmIHRoZSB1c2VyIGlzIGp1c3Qgd3JpdGluZyB0byBhIGZldyBhbmQg bmV2ZXIKKwkgKiB1c2VzIHRoZSBvYmplY3Qgb24gdGhlIEdQVSwgYW5kIHVzaW5nIGEgZGlyZWN0 IHdyaXRlIGludG8gc2htZW1mcworCSAqIGFsbG93cyBpdCB0byBhdm9pZCB0aGUgY29zdCBvZiBy ZXRyaWV2aW5nIGEgcGFnZSAoZWl0aGVyIHN3YXBpbgorCSAqIG9yIGNsZWFyaW5nLWJlZm9yZS11 c2UpIGJlZm9yZSBpdCBpcyBvdmVyd3JpdHRlbi4KKwkgKi8KKwlpZiAoaTkxNV9nZW1fb2JqZWN0 X2hhc19wYWdlcyhvYmopKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChvYmotPm1tLm1hZHYg IT0gSTkxNV9NQURWX1dJTExORUVEKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIEJlZm9yZSB0 aGUgcGFnZXMgYXJlIGluc3RhbnRpYXRlZCB0aGUgb2JqZWN0IGlzIHRyZWF0ZWQgYXMgYmVpbmcK KwkgKiBpbiB0aGUgQ1BVIGRvbWFpbi4gVGhlIHBhZ2VzIHdpbGwgYmUgY2xmbHVzaGVkIGFzIHJl cXVpcmVkIGJlZm9yZQorCSAqIHVzZSwgYW5kIHdlIGNhbiBmcmVlbHkgd3JpdGUgaW50byB0aGUg cGFnZXMgZGlyZWN0bHkuIElmIHVzZXJzcGFjZQorCSAqIHJhY2VzIHB3cml0ZSB3aXRoIGFueSBv dGhlciBvcGVyYXRpb247IGNvcnJ1cHRpb24gd2lsbCBlbnN1ZSAtCisJICogdGhhdCBpcyB1c2Vy c3BhY2UncyBwcmVyb2dhdGl2ZSEKKwkgKi8KKworCXJlbWFpbiA9IGFyZy0+c2l6ZTsKKwlvZmZz ZXQgPSBhcmctPm9mZnNldDsKKwlwZyA9IG9mZnNldF9pbl9wYWdlKG9mZnNldCk7CisKKwlkbyB7 CisJCXVuc2lnbmVkIGludCBsZW4sIHVud3JpdHRlbjsKKwkJc3RydWN0IHBhZ2UgKnBhZ2U7CisJ CXZvaWQgKmRhdGEsICp2YWRkcjsKKwkJaW50IGVycjsKKworCQlsZW4gPSBQQUdFX1NJWkUgLSBw ZzsKKwkJaWYgKGxlbiA+IHJlbWFpbikKKwkJCWxlbiA9IHJlbWFpbjsKKworCQllcnIgPSBwYWdl Y2FjaGVfd3JpdGVfYmVnaW4ob2JqLT5iYXNlLmZpbHAsIG1hcHBpbmcsCisJCQkJCSAgICBvZmZz ZXQsIGxlbiwgMCwKKwkJCQkJICAgICZwYWdlLCAmZGF0YSk7CisJCWlmIChlcnIgPCAwKQorCQkJ cmV0dXJuIGVycjsKKworCQl2YWRkciA9IGttYXAocGFnZSk7CisJCXVud3JpdHRlbiA9IGNvcHlf ZnJvbV91c2VyKHZhZGRyICsgcGcsIHVzZXJfZGF0YSwgbGVuKTsKKwkJa3VubWFwKHBhZ2UpOwor CisJCWVyciA9IHBhZ2VjYWNoZV93cml0ZV9lbmQob2JqLT5iYXNlLmZpbHAsIG1hcHBpbmcsCisJ CQkJCSAgb2Zmc2V0LCBsZW4sIGxlbiAtIHVud3JpdHRlbiwKKwkJCQkJICBwYWdlLCBkYXRhKTsK KwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCisJCWlmICh1bndyaXR0ZW4pCisJCQly ZXR1cm4gLUVGQVVMVDsKKworCQlyZW1haW4gLT0gbGVuOworCQl1c2VyX2RhdGEgKz0gbGVuOwor CQlvZmZzZXQgKz0gbGVuOworCQlwZyA9IDA7CisJfSB3aGlsZSAocmVtYWluKTsKKworCXJldHVy biAwOworfQorCitjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgaTkxNV9nZW1f c2htZW1fb3BzID0geworCS5mbGFncyA9IEk5MTVfR0VNX09CSkVDVF9IQVNfU1RSVUNUX1BBR0Ug fAorCQkgSTkxNV9HRU1fT0JKRUNUX0lTX1NIUklOS0FCTEUsCisKKwkuZ2V0X3BhZ2VzID0gc2ht ZW1fZ2V0X3BhZ2VzLAorCS5wdXRfcGFnZXMgPSBzaG1lbV9wdXRfcGFnZXMsCisKKwkucHdyaXRl ID0gc2htZW1fcHdyaXRlLAorfTsKKworc3RhdGljIGludCBjcmVhdGVfc2htZW0oc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUsCisJCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJ CXNpemVfdCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBWTV9OT1JFU0VSVkU7CisJ c3RydWN0IGZpbGUgKmZpbHA7CisKKwlkcm1fZ2VtX3ByaXZhdGVfb2JqZWN0X2luaXQoJmk5MTUt PmRybSwgb2JqLCBzaXplKTsKKworCWlmIChpOTE1LT5tbS5nZW1mcykKKwkJZmlscCA9IHNobWVt X2ZpbGVfc2V0dXBfd2l0aF9tbnQoaTkxNS0+bW0uZ2VtZnMsICJpOTE1Iiwgc2l6ZSwKKwkJCQkJ CSBmbGFncyk7CisJZWxzZQorCQlmaWxwID0gc2htZW1fZmlsZV9zZXR1cCgiaTkxNSIsIHNpemUs IGZsYWdzKTsKKwlpZiAoSVNfRVJSKGZpbHApKQorCQlyZXR1cm4gUFRSX0VSUihmaWxwKTsKKwor CW9iai0+ZmlscCA9IGZpbHA7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICoKK2k5MTVfZ2VtX29iamVjdF9jcmVhdGVfc2htZW0oc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUsIHU2NCBzaXplKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv Ymo7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CisJdW5zaWduZWQgaW50IGNhY2hl X2xldmVsOworCWdmcF90IG1hc2s7CisJaW50IHJldDsKKworCS8qIFRoZXJlIGlzIGEgcHJldmFs ZW5jZSBvZiB0aGUgYXNzdW1wdGlvbiB0aGF0IHdlIGZpdCB0aGUgb2JqZWN0J3MKKwkgKiBwYWdl IGNvdW50IGluc2lkZSBhIDMyYml0IF9zaWduZWRfIHZhcmlhYmxlLiBMZXQncyBkb2N1bWVudCB0 aGlzIGFuZAorCSAqIGNhdGNoIGlmIHdlIGV2ZXIgbmVlZCB0byBmaXggaXQuIEluIHRoZSBtZWFu dGltZSwgaWYgeW91IGRvIHNwb3QKKwkgKiBzdWNoIGEgbG9jYWwgdmFyaWFibGUsIHBsZWFzZSBj b25zaWRlciBmaXhpbmchCisJICovCisJaWYgKHNpemUgPj4gUEFHRV9TSElGVCA+IElOVF9NQVgp CisJCXJldHVybiBFUlJfUFRSKC1FMkJJRyk7CisKKwlpZiAob3ZlcmZsb3dzX3R5cGUoc2l6ZSwg b2JqLT5iYXNlLnNpemUpKQorCQlyZXR1cm4gRVJSX1BUUigtRTJCSUcpOworCisJb2JqID0gaTkx NV9nZW1fb2JqZWN0X2FsbG9jKCk7CisJaWYgKCFvYmopCisJCXJldHVybiBFUlJfUFRSKC1FTk9N RU0pOworCisJcmV0ID0gY3JlYXRlX3NobWVtKGk5MTUsICZvYmotPmJhc2UsIHNpemUpOworCWlm IChyZXQpCisJCWdvdG8gZmFpbDsKKworCW1hc2sgPSBHRlBfSElHSFVTRVIgfCBfX0dGUF9SRUNM QUlNQUJMRTsKKwlpZiAoSVNfSTk2NUdNKGk5MTUpIHx8IElTX0k5NjVHKGk5MTUpKSB7CisJCS8q IDk2NWdtIGNhbm5vdCByZWxvY2F0ZSBvYmplY3RzIGFib3ZlIDRHaUIuICovCisJCW1hc2sgJj0g fl9fR0ZQX0hJR0hNRU07CisJCW1hc2sgfD0gX19HRlBfRE1BMzI7CisJfQorCisJbWFwcGluZyA9 IG9iai0+YmFzZS5maWxwLT5mX21hcHBpbmc7CisJbWFwcGluZ19zZXRfZ2ZwX21hc2sobWFwcGlu ZywgbWFzayk7CisJR0VNX0JVR19PTighKG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykgJiBfX0dG UF9SRUNMQUlNKSk7CisKKwlpOTE1X2dlbV9vYmplY3RfaW5pdChvYmosICZpOTE1X2dlbV9zaG1l bV9vcHMpOworCisJb2JqLT53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fQ1BVOworCW9i ai0+cmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0NQVTsKKworCWlmIChIQVNfTExDKGk5 MTUpKQorCQkvKiBPbiBzb21lIGRldmljZXMsIHdlIGNhbiBoYXZlIHRoZSBHUFUgdXNlIHRoZSBM TEMgKHRoZSBDUFUKKwkJICogY2FjaGUpIGZvciBhYm91dCBhIDEwJSBwZXJmb3JtYW5jZSBpbXBy b3ZlbWVudAorCQkgKiBjb21wYXJlZCB0byB1bmNhY2hlZC4gIEdyYXBoaWNzIHJlcXVlc3RzIG90 aGVyIHRoYW4KKwkJICogZGlzcGxheSBzY2Fub3V0IGFyZSBjb2hlcmVudCB3aXRoIHRoZSBDUFUg aW4KKwkJICogYWNjZXNzaW5nIHRoaXMgY2FjaGUuICBUaGlzIG1lYW5zIGluIHRoaXMgbW9kZSB3 ZQorCQkgKiBkb24ndCBuZWVkIHRvIGNsZmx1c2ggb24gdGhlIENQVSBzaWRlLCBhbmQgb24gdGhl CisJCSAqIEdQVSBzaWRlIHdlIG9ubHkgbmVlZCB0byBmbHVzaCBpbnRlcm5hbCBjYWNoZXMgdG8K KwkJICogZ2V0IGRhdGEgdmlzaWJsZSB0byB0aGUgQ1BVLgorCQkgKgorCQkgKiBIb3dldmVyLCB3 ZSBtYWludGFpbiB0aGUgZGlzcGxheSBwbGFuZXMgYXMgVUMsIGFuZCBzbworCQkgKiBuZWVkIHRv IHJlYmluZCB3aGVuIGZpcnN0IHVzZWQgYXMgc3VjaC4KKwkJICovCisJCWNhY2hlX2xldmVsID0g STkxNV9DQUNIRV9MTEM7CisJZWxzZQorCQljYWNoZV9sZXZlbCA9IEk5MTVfQ0FDSEVfTk9ORTsK KworCWk5MTVfZ2VtX29iamVjdF9zZXRfY2FjaGVfY29oZXJlbmN5KG9iaiwgY2FjaGVfbGV2ZWwp OworCisJdHJhY2VfaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZShvYmopOworCisJcmV0dXJuIG9iajsK KworZmFpbDoKKwlpOTE1X2dlbV9vYmplY3RfZnJlZShvYmopOworCXJldHVybiBFUlJfUFRSKHJl dCk7Cit9CisKKy8qIEFsbG9jYXRlIGEgbmV3IEdFTSBvYmplY3QgYW5kIGZpbGwgaXQgd2l0aCB0 aGUgc3VwcGxpZWQgZGF0YSAqLworc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKgoraTkxNV9n ZW1fb2JqZWN0X2NyZWF0ZV9zaG1lbV9mcm9tX2RhdGEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAorCQkJCSAgICAgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBmaWxlICpmaWxlOwor CXNpemVfdCBvZmZzZXQ7CisJaW50IGVycjsKKworCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVh dGVfc2htZW0oZGV2X3ByaXYsIHJvdW5kX3VwKHNpemUsIFBBR0VfU0laRSkpOworCWlmIChJU19F UlIob2JqKSkKKwkJcmV0dXJuIG9iajsKKworCUdFTV9CVUdfT04ob2JqLT53cml0ZV9kb21haW4g IT0gSTkxNV9HRU1fRE9NQUlOX0NQVSk7CisKKwlmaWxlID0gb2JqLT5iYXNlLmZpbHA7CisJb2Zm c2V0ID0gMDsKKwlkbyB7CisJCXVuc2lnbmVkIGludCBsZW4gPSBtaW5fdCh0eXBlb2Yoc2l6ZSks IHNpemUsIFBBR0VfU0laRSk7CisJCXN0cnVjdCBwYWdlICpwYWdlOworCQl2b2lkICpwZ2RhdGEs ICp2YWRkcjsKKworCQllcnIgPSBwYWdlY2FjaGVfd3JpdGVfYmVnaW4oZmlsZSwgZmlsZS0+Zl9t YXBwaW5nLAorCQkJCQkgICAgb2Zmc2V0LCBsZW4sIDAsCisJCQkJCSAgICAmcGFnZSwgJnBnZGF0 YSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBmYWlsOworCisJCXZhZGRyID0ga21hcChwYWdl KTsKKwkJbWVtY3B5KHZhZGRyLCBkYXRhLCBsZW4pOworCQlrdW5tYXAocGFnZSk7CisKKwkJZXJy ID0gcGFnZWNhY2hlX3dyaXRlX2VuZChmaWxlLCBmaWxlLT5mX21hcHBpbmcsCisJCQkJCSAgb2Zm c2V0LCBsZW4sIGxlbiwKKwkJCQkJICBwYWdlLCBwZ2RhdGEpOworCQlpZiAoZXJyIDwgMCkKKwkJ CWdvdG8gZmFpbDsKKworCQlzaXplIC09IGxlbjsKKwkJZGF0YSArPSBsZW47CisJCW9mZnNldCAr PSBsZW47CisJfSB3aGlsZSAoc2l6ZSk7CisKKwlyZXR1cm4gb2JqOworCitmYWlsOgorCWk5MTVf Z2VtX29iamVjdF9wdXQob2JqKTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2NtZF9wYXJzZXIuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d2dC9jbWRfcGFyc2VyLmMKaW5kZXggY2Y0YTFlY2Y2ODUzLi4wNWQwNTRlMGJmZTcg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9jbWRfcGFyc2VyLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2NtZF9wYXJzZXIuYwpAQCAtMTcyNiw3ICsxNzI2LDcg QEAgc3RhdGljIGludCBwZXJmb3JtX2JiX3NoYWRvdyhzdHJ1Y3QgcGFyc2VyX2V4ZWNfc3RhdGUg KnMpCiAJaWYgKGJiLT5wcGd0dCkKIAkJZ21hX3N0YXJ0X29mZnNldCA9IGdtYSAmIH5JOTE1X0dU VF9QQUdFX01BU0s7CiAKLQliYi0+b2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZShzLT52Z3B1 LT5ndnQtPmRldl9wcml2LAorCWJiLT5vYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVt KHMtPnZncHUtPmd2dC0+ZGV2X3ByaXYsCiAJCQkgcm91bmR1cChiYl9zaXplICsgZ21hX3N0YXJ0 X29mZnNldCwgUEFHRV9TSVpFKSk7CiAJaWYgKElTX0VSUihiYi0+b2JqKSkgewogCQlyZXQgPSBQ VFJfRVJSKGJiLT5vYmopOwpAQCAtMjc5OSw5ICsyNzk5LDkgQEAgc3RhdGljIGludCBzaGFkb3df aW5kaXJlY3RfY3R4KHN0cnVjdCBpbnRlbF9zaGFkb3dfd2FfY3R4ICp3YV9jdHgpCiAJaW50IHJl dCA9IDA7CiAJdm9pZCAqbWFwOwogCi0Jb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZSh3b3Jr bG9hZC0+dmdwdS0+Z3Z0LT5kZXZfcHJpdiwKLQkJCQkgICAgIHJvdW5kdXAoY3R4X3NpemUgKyBD QUNIRUxJTkVfQllURVMsCi0JCQkJCSAgICAgUEFHRV9TSVpFKSk7CisJb2JqID0gaTkxNV9nZW1f b2JqZWN0X2NyZWF0ZV9zaG1lbSh3b3JrbG9hZC0+dmdwdS0+Z3Z0LT5kZXZfcHJpdiwKKwkJCQkJ ICAgcm91bmR1cChjdHhfc2l6ZSArIENBQ0hFTElORV9CWVRFUywKKwkJCQkJCSAgIFBBR0VfU0la RSkpOwogCWlmIChJU19FUlIob2JqKSkKIAkJcmV0dXJuIFBUUl9FUlIob2JqKTsKIApkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKaW5kZXggNTg4Zjk2ZDBmODY2Li4xNWQ4MWVmZWQ5NzIgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaApAQCAtMjc0OCwxNiArMjc0OCw2IEBAIHZvaWQgaTkxNV9nZW1fbG9h ZF9pbml0X2ZlbmNlcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogaW50IGk5 MTVfZ2VtX2ZyZWV6ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogaW50IGk5 MTVfZ2VtX2ZyZWV6ZV9sYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiAK LXZvaWQgaTkxNV9nZW1fb2JqZWN0X2luaXQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiwKLQkJCSBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgKm9wcyk7Ci1zdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqCi1pOTE1X2dlbV9vYmplY3RfY3JlYXRlKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTY0IHNpemUpOwotc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKgotaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9mcm9tX2RhdGEoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCSBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6 ZSk7Ci12b2lkIGk5MTVfZ2VtX2Nsb3NlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdl bSwgc3RydWN0IGRybV9maWxlICpmaWxlKTsKLXZvaWQgaTkxNV9nZW1fZnJlZV9vYmplY3Qoc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwotCiBzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9nZW1f ZHJhaW5fZnJlZWRfb2JqZWN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKIHsKIAlp ZiAoIWF0b21pY19yZWFkKCZpOTE1LT5tbS5mcmVlX2NvdW50KSkKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bS5jCmluZGV4IDkxNWE2Y2RjZTY1ZS4uNWMzNDlhMmRhMzgxIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtLmMKQEAgLTU0LDE5ICs1NCw2IEBACiAjaW5jbHVkZSAiaW50ZWxfbW9jcy5oIgogI2luY2x1 ZGUgImludGVsX3dvcmthcm91bmRzLmgiCiAKLXN0YXRpYyB2b2lkIGk5MTVfZ2VtX2ZsdXNoX2Zy ZWVfb2JqZWN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7Ci0KLXN0YXRpYyBib29s IGNwdV93cml0ZV9uZWVkc19jbGZsdXNoKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmop Ci17Ci0JaWYgKG9iai0+Y2FjaGVfZGlydHkpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmICghKG9i ai0+Y2FjaGVfY29oZXJlbnQgJiBJOTE1X0JPX0NBQ0hFX0NPSEVSRU5UX0ZPUl9XUklURSkpCi0J CXJldHVybiB0cnVlOwotCi0JcmV0dXJuIG9iai0+cGluX2dsb2JhbDsgLyogY3VycmVudGx5IGlu IHVzZSBieSBIVywga2VlcCBmbHVzaGVkICovCi19Ci0KIHN0YXRpYyBpbnQKIGluc2VydF9tYXBw YWJsZV9ub2RlKHN0cnVjdCBpOTE1X2dndHQgKmdndHQsCiAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUsIHUzMiBzaXplKQpAQCAtODQsMjUgKzcxLDYgQEAgcmVt b3ZlX21hcHBhYmxlX25vZGUoc3RydWN0IGRybV9tbV9ub2RlICpub2RlKQogCWRybV9tbV9yZW1v dmVfbm9kZShub2RlKTsKIH0KIAotLyogc29tZSBib29ra2VlcGluZyAqLwotc3RhdGljIHZvaWQg aTkxNV9nZW1faW5mb19hZGRfb2JqKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK LQkJCQkgIHU2NCBzaXplKQotewotCXNwaW5fbG9jaygmZGV2X3ByaXYtPm1tLm9iamVjdF9zdGF0 X2xvY2spOwotCWRldl9wcml2LT5tbS5vYmplY3RfY291bnQrKzsKLQlkZXZfcHJpdi0+bW0ub2Jq ZWN0X21lbW9yeSArPSBzaXplOwotCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+bW0ub2JqZWN0X3N0 YXRfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGk5MTVfZ2VtX2luZm9fcmVtb3ZlX29iaihzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJICAgICB1NjQgc2l6ZSkKLXsKLQlz cGluX2xvY2soJmRldl9wcml2LT5tbS5vYmplY3Rfc3RhdF9sb2NrKTsKLQlkZXZfcHJpdi0+bW0u b2JqZWN0X2NvdW50LS07Ci0JZGV2X3ByaXYtPm1tLm9iamVjdF9tZW1vcnkgLT0gc2l6ZTsKLQlz cGluX3VubG9jaygmZGV2X3ByaXYtPm1tLm9iamVjdF9zdGF0X2xvY2spOwotfQotCiBzdGF0aWMg dm9pZCBfX2k5MTVfZ2VtX3Bhcmsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCiB7CiAJ aW50ZWxfd2FrZXJlZl90IHdha2VyZWY7CkBAIC0zMDIsMzIgKzI3MCw2IEBAIHN0YXRpYyBpbnQg aTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlc19waHlzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmopCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgX19zdGFydF9jcHVfd3JpdGUo c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKLXsKLQlvYmotPnJlYWRfZG9tYWlucyA9 IEk5MTVfR0VNX0RPTUFJTl9DUFU7Ci0Jb2JqLT53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9ET01B SU5fQ1BVOwotCWlmIChjcHVfd3JpdGVfbmVlZHNfY2xmbHVzaChvYmopKQotCQlvYmotPmNhY2hl X2RpcnR5ID0gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQKLV9faTkxNV9nZW1fb2JqZWN0X3JlbGVh c2Vfc2htZW0oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKLQkJCQlzdHJ1Y3Qgc2df dGFibGUgKnBhZ2VzLAotCQkJCWJvb2wgbmVlZHNfY2xmbHVzaCkKLXsKLQlHRU1fQlVHX09OKG9i ai0+bW0ubWFkdiA9PSBfX0k5MTVfTUFEVl9QVVJHRUQpOwotCi0JaWYgKG9iai0+bW0ubWFkdiA9 PSBJOTE1X01BRFZfRE9OVE5FRUQpCi0JCW9iai0+bW0uZGlydHkgPSBmYWxzZTsKLQotCWlmIChu ZWVkc19jbGZsdXNoICYmCi0JICAgIChvYmotPnJlYWRfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJ Tl9DUFUpID09IDAgJiYKLQkgICAgIShvYmotPmNhY2hlX2NvaGVyZW50ICYgSTkxNV9CT19DQUNI RV9DT0hFUkVOVF9GT1JfUkVBRCkpCi0JCWRybV9jbGZsdXNoX3NnKHBhZ2VzKTsKLQotCV9fc3Rh cnRfY3B1X3dyaXRlKG9iaik7Ci19Ci0KIHN0YXRpYyB2b2lkCiBpOTE1X2dlbV9vYmplY3RfcHV0 X3BhZ2VzX3BoeXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCSAgICAgICBz dHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzKQpAQCAtMzc5LDggKzMyMSw2IEBAIHN0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgaTkxNV9nZW1fcGh5c19vcHMgPSB7CiAJLnJl bGVhc2UgPSBpOTE1X2dlbV9vYmplY3RfcmVsZWFzZV9waHlzLAogfTsKIAotc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyBpOTE1X2dlbV9vYmplY3Rfb3BzOwotCiBp bnQgaTkxNV9nZW1fb2JqZWN0X3VuYmluZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq KQogewogCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwpAQCAtNjMxLDEyICs1NzEsMTIgQEAgaTkxNV9n ZW1fY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKIAlpbnQgcmV0OwogCXUzMiBoYW5kbGU7 CiAKLQlzaXplID0gcm91bmR1cChzaXplLCBQQUdFX1NJWkUpOworCXNpemUgPSByb3VuZF91cChz aXplLCBQQUdFX1NJWkUpOwogCWlmIChzaXplID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJ LyogQWxsb2NhdGUgdGhlIG5ldyBvYmplY3QgKi8KLQlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3Jl YXRlKGRldl9wcml2LCBzaXplKTsKKwlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVt KGRldl9wcml2LCBzaXplKTsKIAlpZiAoSVNfRVJSKG9iaikpCiAJCXJldHVybiBQVFJfRVJSKG9i aik7CiAKQEAgLTIxNzEsNTMgKzIxMTEsNiBAQCB2b2lkIF9faTkxNV9nZW1fb2JqZWN0X2ludmFs aWRhdGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIAlpbnZhbGlkYXRlX21hcHBp bmdfcGFnZXMobWFwcGluZywgMCwgKGxvZmZfdCktMSk7CiB9CiAKLS8qCi0gKiBNb3ZlIHBhZ2Vz IHRvIGFwcHJvcHJpYXRlIGxydSBhbmQgcmVsZWFzZSB0aGUgcGFnZXZlYywgZGVjcmVtZW50aW5n IHRoZQotICogcmVmIGNvdW50IG9mIHRob3NlIHBhZ2VzLgotICovCi1zdGF0aWMgdm9pZCBjaGVj a19yZWxlYXNlX3BhZ2V2ZWMoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpCi17Ci0JY2hlY2tfbW92ZV91 bmV2aWN0YWJsZV9wYWdlcyhwdmVjKTsKLQlfX3BhZ2V2ZWNfcmVsZWFzZShwdmVjKTsKLQljb25k X3Jlc2NoZWQoKTsKLX0KLQotc3RhdGljIHZvaWQKLWk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXNf Z3R0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCi0JCQkgICAgICBzdHJ1Y3Qgc2df dGFibGUgKnBhZ2VzKQotewotCXN0cnVjdCBzZ3RfaXRlciBzZ3RfaXRlcjsKLQlzdHJ1Y3QgcGFn ZXZlYyBwdmVjOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JX19pOTE1X2dlbV9vYmplY3RfcmVs ZWFzZV9zaG1lbShvYmosIHBhZ2VzLCB0cnVlKTsKLQotCWk5MTVfZ2VtX2d0dF9maW5pc2hfcGFn ZXMob2JqLCBwYWdlcyk7Ci0KLQlpZiAoaTkxNV9nZW1fb2JqZWN0X25lZWRzX2JpdDE3X3N3aXp6 bGUob2JqKSkKLQkJaTkxNV9nZW1fb2JqZWN0X3NhdmVfYml0XzE3X3N3aXp6bGUob2JqLCBwYWdl cyk7Ci0KLQltYXBwaW5nX2NsZWFyX3VuZXZpY3RhYmxlKGZpbGVfaW5vZGUob2JqLT5iYXNlLmZp bHApLT5pX21hcHBpbmcpOwotCi0JcGFnZXZlY19pbml0KCZwdmVjKTsKLQlmb3JfZWFjaF9zZ3Rf cGFnZShwYWdlLCBzZ3RfaXRlciwgcGFnZXMpIHsKLQkJaWYgKG9iai0+bW0uZGlydHkpCi0JCQlz ZXRfcGFnZV9kaXJ0eShwYWdlKTsKLQotCQlpZiAob2JqLT5tbS5tYWR2ID09IEk5MTVfTUFEVl9X SUxMTkVFRCkKLQkJCW1hcmtfcGFnZV9hY2Nlc3NlZChwYWdlKTsKLQotCQlpZiAoIXBhZ2V2ZWNf YWRkKCZwdmVjLCBwYWdlKSkKLQkJCWNoZWNrX3JlbGVhc2VfcGFnZXZlYygmcHZlYyk7Ci0JfQot CWlmIChwYWdldmVjX2NvdW50KCZwdmVjKSkKLQkJY2hlY2tfcmVsZWFzZV9wYWdldmVjKCZwdmVj KTsKLQlvYmotPm1tLmRpcnR5ID0gZmFsc2U7Ci0KLQlzZ19mcmVlX3RhYmxlKHBhZ2VzKTsKLQlr ZnJlZShwYWdlcyk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9faTkxNV9nZW1fb2JqZWN0X3Jlc2V0X3Bh Z2VfaXRlcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogewogCXN0cnVjdCByYWRp eF90cmVlX2l0ZXIgaXRlcjsKQEAgLTIzMzMsMTk2ICsyMjI2LDYgQEAgYm9vbCBpOTE1X3NnX3Ry aW0oc3RydWN0IHNnX3RhYmxlICpvcmlnX3N0KQogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMg aW50IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNfZ3R0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmopCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShvYmotPmJhc2UuZGV2KTsKLQljb25zdCB1bnNpZ25lZCBsb25nIHBhZ2VfY291bnQgPSBvYmot PmJhc2Uuc2l6ZSAvIFBBR0VfU0laRTsKLQl1bnNpZ25lZCBsb25nIGk7Ci0Jc3RydWN0IGFkZHJl c3Nfc3BhY2UgKm1hcHBpbmc7Ci0Jc3RydWN0IHNnX3RhYmxlICpzdDsKLQlzdHJ1Y3Qgc2NhdHRl cmxpc3QgKnNnOwotCXN0cnVjdCBzZ3RfaXRlciBzZ3RfaXRlcjsKLQlzdHJ1Y3QgcGFnZSAqcGFn ZTsKLQl1bnNpZ25lZCBsb25nIGxhc3RfcGZuID0gMDsJLyogc3VwcHJlc3MgZ2NjIHdhcm5pbmcg Ki8KLQl1bnNpZ25lZCBpbnQgbWF4X3NlZ21lbnQgPSBpOTE1X3NnX3NlZ21lbnRfc2l6ZSgpOwot CXVuc2lnbmVkIGludCBzZ19wYWdlX3NpemVzOwotCXN0cnVjdCBwYWdldmVjIHB2ZWM7Ci0JZ2Zw X3Qgbm9yZWNsYWltOwotCWludCByZXQ7Ci0KLQkvKgotCSAqIEFzc2VydCB0aGF0IHRoZSBvYmpl Y3QgaXMgbm90IGN1cnJlbnRseSBpbiBhbnkgR1BVIGRvbWFpbi4gQXMgaXQKLQkgKiB3YXNuJ3Qg aW4gdGhlIEdUVCwgdGhlcmUgc2hvdWxkbid0IGJlIGFueSB3YXkgaXQgY291bGQgaGF2ZSBiZWVu IGluCi0JICogYSBHUFUgY2FjaGUKLQkgKi8KLQlHRU1fQlVHX09OKG9iai0+cmVhZF9kb21haW5z ICYgSTkxNV9HRU1fR1BVX0RPTUFJTlMpOwotCUdFTV9CVUdfT04ob2JqLT53cml0ZV9kb21haW4g JiBJOTE1X0dFTV9HUFVfRE9NQUlOUyk7Ci0KLQkvKgotCSAqIElmIHRoZXJlJ3Mgbm8gY2hhbmNl IG9mIGFsbG9jYXRpbmcgZW5vdWdoIHBhZ2VzIGZvciB0aGUgd2hvbGUKLQkgKiBvYmplY3QsIGJh aWwgZWFybHkuCi0JICovCi0JaWYgKHBhZ2VfY291bnQgPiB0b3RhbHJhbV9wYWdlcygpKQotCQly ZXR1cm4gLUVOT01FTTsKLQotCXN0ID0ga21hbGxvYyhzaXplb2YoKnN0KSwgR0ZQX0tFUk5FTCk7 Ci0JaWYgKHN0ID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi1yZWJ1aWxkX3N0OgotCWlm IChzZ19hbGxvY190YWJsZShzdCwgcGFnZV9jb3VudCwgR0ZQX0tFUk5FTCkpIHsKLQkJa2ZyZWUo c3QpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKgotCSAqIEdldCB0aGUgbGlzdCBvZiBw YWdlcyBvdXQgb2Ygb3VyIHN0cnVjdCBmaWxlLiAgVGhleSdsbCBiZSBwaW5uZWQKLQkgKiBhdCB0 aGlzIHBvaW50IHVudGlsIHdlIHJlbGVhc2UgdGhlbS4KLQkgKgotCSAqIEZhaWwgc2lsZW50bHkg d2l0aG91dCBzdGFydGluZyB0aGUgc2hyaW5rZXIKLQkgKi8KLQltYXBwaW5nID0gb2JqLT5iYXNl LmZpbHAtPmZfbWFwcGluZzsKLQltYXBwaW5nX3NldF91bmV2aWN0YWJsZShtYXBwaW5nKTsKLQlu b3JlY2xhaW0gPSBtYXBwaW5nX2dmcF9jb25zdHJhaW50KG1hcHBpbmcsIH5fX0dGUF9SRUNMQUlN KTsKLQlub3JlY2xhaW0gfD0gX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PV0FSTjsKLQotCXNnID0g c3QtPnNnbDsKLQlzdC0+bmVudHMgPSAwOwotCXNnX3BhZ2Vfc2l6ZXMgPSAwOwotCWZvciAoaSA9 IDA7IGkgPCBwYWdlX2NvdW50OyBpKyspIHsKLQkJY29uc3QgdW5zaWduZWQgaW50IHNocmlua1td ID0gewotCQkJSTkxNV9TSFJJTktfQk9VTkQgfCBJOTE1X1NIUklOS19VTkJPVU5EIHwgSTkxNV9T SFJJTktfUFVSR0VBQkxFLAotCQkJMCwKLQkJfSwgKnMgPSBzaHJpbms7Ci0JCWdmcF90IGdmcCA9 IG5vcmVjbGFpbTsKLQotCQlkbyB7Ci0JCQljb25kX3Jlc2NoZWQoKTsKLQkJCXBhZ2UgPSBzaG1l bV9yZWFkX21hcHBpbmdfcGFnZV9nZnAobWFwcGluZywgaSwgZ2ZwKTsKLQkJCWlmICghSVNfRVJS KHBhZ2UpKQotCQkJCWJyZWFrOwotCi0JCQlpZiAoISpzKSB7Ci0JCQkJcmV0ID0gUFRSX0VSUihw YWdlKTsKLQkJCQlnb3RvIGVycl9zZzsKLQkJCX0KLQotCQkJaTkxNV9nZW1fc2hyaW5rKGRldl9w cml2LCAyICogcGFnZV9jb3VudCwgTlVMTCwgKnMrKyk7Ci0KLQkJCS8qCi0JCQkgKiBXZSd2ZSB0 cmllZCBoYXJkIHRvIGFsbG9jYXRlIHRoZSBtZW1vcnkgYnkgcmVhcGluZwotCQkJICogb3VyIG93 biBidWZmZXIsIG5vdyBsZXQgdGhlIHJlYWwgVk0gZG8gaXRzIGpvYiBhbmQKLQkJCSAqIGdvIGRv d24gaW4gZmxhbWVzIGlmIHRydWx5IE9PTS4KLQkJCSAqCi0JCQkgKiBIb3dldmVyLCBzaW5jZSBn cmFwaGljcyB0ZW5kIHRvIGJlIGRpc3Bvc2FibGUsCi0JCQkgKiBkZWZlciB0aGUgb29tIGhlcmUg YnkgcmVwb3J0aW5nIHRoZSBFTk9NRU0gYmFjawotCQkJICogdG8gdXNlcnNwYWNlLgotCQkJICov Ci0JCQlpZiAoISpzKSB7Ci0JCQkJLyogcmVjbGFpbSBhbmQgd2FybiwgYnV0IG5vIG9vbSAqLwot CQkJCWdmcCA9IG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZyk7Ci0KLQkJCQkvKgotCQkJCSAqIE91 ciBibyBhcmUgYWx3YXlzIGRpcnR5IGFuZCBzbyB3ZSByZXF1aXJlCi0JCQkJICoga3N3YXBkIHRv IHJlY2xhaW0gb3VyIHBhZ2VzIChkaXJlY3QgcmVjbGFpbQotCQkJCSAqIGRvZXMgbm90IGVmZmVj dGl2ZWx5IGJlZ2luIHBhZ2VvdXQgb2Ygb3VyCi0JCQkJICogYnVmZmVycyBvbiBpdHMgb3duKS4g SG93ZXZlciwgZGlyZWN0IHJlY2xhaW0KLQkJCQkgKiBvbmx5IHdhaXRzIGZvciBrc3dhcGQgd2hl biB1bmRlciBhbGxvY2F0aW9uCi0JCQkJICogY29uZ2VzdGlvbi4gU28gYXMgYSByZXN1bHQgX19H RlBfUkVDTEFJTSBpcwotCQkJCSAqIHVucmVsaWFibGUgYW5kIGZhaWxzIHRvIGFjdHVhbGx5IHJl Y2xhaW0gb3VyCi0JCQkJICogZGlydHkgcGFnZXMgLS0gdW5sZXNzIHlvdSB0cnkgb3ZlciBhbmQg b3ZlcgotCQkJCSAqIGFnYWluIHdpdGggIV9fR0ZQX05PUkVUUlkuIEhvd2V2ZXIsIHdlIHN0aWxs Ci0JCQkJICogd2FudCB0byBmYWlsIHRoaXMgYWxsb2NhdGlvbiByYXRoZXIgdGhhbgotCQkJCSAq IHRyaWdnZXIgdGhlIG91dC1vZi1tZW1vcnkga2lsbGVyIGFuZCBmb3IKLQkJCQkgKiB0aGlzIHdl IHdhbnQgX19HRlBfUkVUUllfTUFZRkFJTC4KLQkJCQkgKi8KLQkJCQlnZnAgfD0gX19HRlBfUkVU UllfTUFZRkFJTDsKLQkJCX0KLQkJfSB3aGlsZSAoMSk7Ci0KLQkJaWYgKCFpIHx8Ci0JCSAgICBz Zy0+bGVuZ3RoID49IG1heF9zZWdtZW50IHx8Ci0JCSAgICBwYWdlX3RvX3BmbihwYWdlKSAhPSBs YXN0X3BmbiArIDEpIHsKLQkJCWlmIChpKSB7Ci0JCQkJc2dfcGFnZV9zaXplcyB8PSBzZy0+bGVu Z3RoOwotCQkJCXNnID0gc2dfbmV4dChzZyk7Ci0JCQl9Ci0JCQlzdC0+bmVudHMrKzsKLQkJCXNn X3NldF9wYWdlKHNnLCBwYWdlLCBQQUdFX1NJWkUsIDApOwotCQl9IGVsc2UgewotCQkJc2ctPmxl bmd0aCArPSBQQUdFX1NJWkU7Ci0JCX0KLQkJbGFzdF9wZm4gPSBwYWdlX3RvX3BmbihwYWdlKTsK LQotCQkvKiBDaGVjayB0aGF0IHRoZSBpOTY1Zy9nbSB3b3JrYXJvdW5kIHdvcmtzLiAqLwotCQlX QVJOX09OKChnZnAgJiBfX0dGUF9ETUEzMikgJiYgKGxhc3RfcGZuID49IDB4MDAxMDAwMDBVTCkp OwotCX0KLQlpZiAoc2cpIHsgLyogbG9vcCB0ZXJtaW5hdGVkIGVhcmx5OyBzaG9ydCBzZyB0YWJs ZSAqLwotCQlzZ19wYWdlX3NpemVzIHw9IHNnLT5sZW5ndGg7Ci0JCXNnX21hcmtfZW5kKHNnKTsK LQl9Ci0KLQkvKiBUcmltIHVudXNlZCBzZyBlbnRyaWVzIHRvIGF2b2lkIHdhc3RpbmcgbWVtb3J5 LiAqLwotCWk5MTVfc2dfdHJpbShzdCk7Ci0KLQlyZXQgPSBpOTE1X2dlbV9ndHRfcHJlcGFyZV9w YWdlcyhvYmosIHN0KTsKLQlpZiAocmV0KSB7Ci0JCS8qCi0JCSAqIERNQSByZW1hcHBpbmcgZmFp bGVkPyBPbmUgcG9zc2libGUgY2F1c2UgaXMgdGhhdAotCQkgKiBpdCBjb3VsZCBub3QgcmVzZXJ2 ZSBlbm91Z2ggbGFyZ2UgZW50cmllcywgYXNraW5nCi0JCSAqIGZvciBQQUdFX1NJWkUgY2h1bmtz IGluc3RlYWQgbWF5IGJlIGhlbHBmdWwuCi0JCSAqLwotCQlpZiAobWF4X3NlZ21lbnQgPiBQQUdF X1NJWkUpIHsKLQkJCWZvcl9lYWNoX3NndF9wYWdlKHBhZ2UsIHNndF9pdGVyLCBzdCkKLQkJCQlw dXRfcGFnZShwYWdlKTsKLQkJCXNnX2ZyZWVfdGFibGUoc3QpOwotCi0JCQltYXhfc2VnbWVudCA9 IFBBR0VfU0laRTsKLQkJCWdvdG8gcmVidWlsZF9zdDsKLQkJfSBlbHNlIHsKLQkJCWRldl93YXJu KCZkZXZfcHJpdi0+ZHJtLnBkZXYtPmRldiwKLQkJCQkgIkZhaWxlZCB0byBETUEgcmVtYXAgJWx1 IHBhZ2VzXG4iLAotCQkJCSBwYWdlX2NvdW50KTsKLQkJCWdvdG8gZXJyX3BhZ2VzOwotCQl9Ci0J fQotCi0JaWYgKGk5MTVfZ2VtX29iamVjdF9uZWVkc19iaXQxN19zd2l6emxlKG9iaikpCi0JCWk5 MTVfZ2VtX29iamVjdF9kb19iaXRfMTdfc3dpenpsZShvYmosIHN0KTsKLQotCV9faTkxNV9nZW1f b2JqZWN0X3NldF9wYWdlcyhvYmosIHN0LCBzZ19wYWdlX3NpemVzKTsKLQotCXJldHVybiAwOwot Ci1lcnJfc2c6Ci0Jc2dfbWFya19lbmQoc2cpOwotZXJyX3BhZ2VzOgotCW1hcHBpbmdfY2xlYXJf dW5ldmljdGFibGUobWFwcGluZyk7Ci0JcGFnZXZlY19pbml0KCZwdmVjKTsKLQlmb3JfZWFjaF9z Z3RfcGFnZShwYWdlLCBzZ3RfaXRlciwgc3QpIHsKLQkJaWYgKCFwYWdldmVjX2FkZCgmcHZlYywg cGFnZSkpCi0JCQljaGVja19yZWxlYXNlX3BhZ2V2ZWMoJnB2ZWMpOwotCX0KLQlpZiAocGFnZXZl Y19jb3VudCgmcHZlYykpCi0JCWNoZWNrX3JlbGVhc2VfcGFnZXZlYygmcHZlYyk7Ci0Jc2dfZnJl ZV90YWJsZShzdCk7Ci0Ja2ZyZWUoc3QpOwotCi0JLyoKLQkgKiBzaG1lbWZzIGZpcnN0IGNoZWNr cyBpZiB0aGVyZSBpcyBlbm91Z2ggbWVtb3J5IHRvIGFsbG9jYXRlIHRoZSBwYWdlCi0JICogYW5k IHJlcG9ydHMgRU5PU1BDIHNob3VsZCB0aGVyZSBiZSBpbnN1ZmZpY2llbnQsIGFsb25nIHdpdGgg dGhlIHVzdWFsCi0JICogRU5PTUVNIGZvciBhIGdlbnVpbmUgYWxsb2NhdGlvbiBmYWlsdXJlLgot CSAqCi0JICogV2UgdXNlIEVOT1NQQyBpbiBvdXIgZHJpdmVyIHRvIG1lYW4gdGhhdCB3ZSBoYXZl IHJ1biBvdXQgb2YgYXBlcnR1cmUKLQkgKiBzcGFjZSBhbmQgc28gd2FudCB0byB0cmFuc2xhdGUg dGhlIGVycm9yIGZyb20gc2htZW1mcyBiYWNrIHRvIG91cgotCSAqIHVzdWFsIHVuZGVyc3RhbmRp bmcgb2YgRU5PTUVNLgotCSAqLwotCWlmIChyZXQgPT0gLUVOT1NQQykKLQkJcmV0ID0gLUVOT01F TTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHZvaWQgX19pOTE1X2dlbV9vYmplY3Rfc2V0X3BhZ2Vz KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkJIHN0cnVjdCBzZ190YWJsZSAq cGFnZXMsCiAJCQkJIHVuc2lnbmVkIGludCBzZ19wYWdlX3NpemVzKQpAQCAtMjczNCw3OCArMjQz Nyw2IEBAIHZvaWQgKmk5MTVfZ2VtX29iamVjdF9waW5fbWFwKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmosCiAJZ290byBvdXRfdW5sb2NrOwogfQogCi1zdGF0aWMgaW50Ci1pOTE1X2dl bV9vYmplY3RfcHdyaXRlX2d0dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAotCQkJ ICAgY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9wd3JpdGUgKmFyZykKLXsKLQlzdHJ1Y3QgYWRk cmVzc19zcGFjZSAqbWFwcGluZyA9IG9iai0+YmFzZS5maWxwLT5mX21hcHBpbmc7Ci0JY2hhciBf X3VzZXIgKnVzZXJfZGF0YSA9IHU2NF90b191c2VyX3B0cihhcmctPmRhdGFfcHRyKTsKLQl1NjQg cmVtYWluLCBvZmZzZXQ7Ci0JdW5zaWduZWQgaW50IHBnOwotCi0JLyogQmVmb3JlIHdlIGluc3Rh bnRpYXRlL3BpbiB0aGUgYmFja2luZyBzdG9yZSBmb3Igb3VyIHVzZSwgd2UKLQkgKiBjYW4gcHJl cG9wdWxhdGUgdGhlIHNobWVtZnMgZmlscCBlZmZpY2llbnRseSB1c2luZyBhIHdyaXRlIGludG8K LQkgKiB0aGUgcGFnZWNhY2hlLiBXZSBhdm9pZCB0aGUgcGVuYWx0eSBvZiBpbnN0YW50aWF0aW5n IGFsbCB0aGUKLQkgKiBwYWdlcywgaW1wb3J0YW50IGlmIHRoZSB1c2VyIGlzIGp1c3Qgd3JpdGlu ZyB0byBhIGZldyBhbmQgbmV2ZXIKLQkgKiB1c2VzIHRoZSBvYmplY3Qgb24gdGhlIEdQVSwgYW5k IHVzaW5nIGEgZGlyZWN0IHdyaXRlIGludG8gc2htZW1mcwotCSAqIGFsbG93cyBpdCB0byBhdm9p ZCB0aGUgY29zdCBvZiByZXRyaWV2aW5nIGEgcGFnZSAoZWl0aGVyIHN3YXBpbgotCSAqIG9yIGNs ZWFyaW5nLWJlZm9yZS11c2UpIGJlZm9yZSBpdCBpcyBvdmVyd3JpdHRlbi4KLQkgKi8KLQlpZiAo aTkxNV9nZW1fb2JqZWN0X2hhc19wYWdlcyhvYmopKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlm IChvYmotPm1tLm1hZHYgIT0gSTkxNV9NQURWX1dJTExORUVEKQotCQlyZXR1cm4gLUVGQVVMVDsK LQotCS8qIEJlZm9yZSB0aGUgcGFnZXMgYXJlIGluc3RhbnRpYXRlZCB0aGUgb2JqZWN0IGlzIHRy ZWF0ZWQgYXMgYmVpbmcKLQkgKiBpbiB0aGUgQ1BVIGRvbWFpbi4gVGhlIHBhZ2VzIHdpbGwgYmUg Y2xmbHVzaGVkIGFzIHJlcXVpcmVkIGJlZm9yZQotCSAqIHVzZSwgYW5kIHdlIGNhbiBmcmVlbHkg d3JpdGUgaW50byB0aGUgcGFnZXMgZGlyZWN0bHkuIElmIHVzZXJzcGFjZQotCSAqIHJhY2VzIHB3 cml0ZSB3aXRoIGFueSBvdGhlciBvcGVyYXRpb247IGNvcnJ1cHRpb24gd2lsbCBlbnN1ZSAtCi0J ICogdGhhdCBpcyB1c2Vyc3BhY2UncyBwcmVyb2dhdGl2ZSEKLQkgKi8KLQotCXJlbWFpbiA9IGFy Zy0+c2l6ZTsKLQlvZmZzZXQgPSBhcmctPm9mZnNldDsKLQlwZyA9IG9mZnNldF9pbl9wYWdlKG9m ZnNldCk7Ci0KLQlkbyB7Ci0JCXVuc2lnbmVkIGludCBsZW4sIHVud3JpdHRlbjsKLQkJc3RydWN0 IHBhZ2UgKnBhZ2U7Ci0JCXZvaWQgKmRhdGEsICp2YWRkcjsKLQkJaW50IGVycjsKLQotCQlsZW4g PSBQQUdFX1NJWkUgLSBwZzsKLQkJaWYgKGxlbiA+IHJlbWFpbikKLQkJCWxlbiA9IHJlbWFpbjsK LQotCQllcnIgPSBwYWdlY2FjaGVfd3JpdGVfYmVnaW4ob2JqLT5iYXNlLmZpbHAsIG1hcHBpbmcs Ci0JCQkJCSAgICBvZmZzZXQsIGxlbiwgMCwKLQkJCQkJICAgICZwYWdlLCAmZGF0YSk7Ci0JCWlm IChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQotCQl2YWRkciA9IGttYXAocGFnZSk7Ci0JCXVu d3JpdHRlbiA9IGNvcHlfZnJvbV91c2VyKHZhZGRyICsgcGcsIHVzZXJfZGF0YSwgbGVuKTsKLQkJ a3VubWFwKHBhZ2UpOwotCi0JCWVyciA9IHBhZ2VjYWNoZV93cml0ZV9lbmQob2JqLT5iYXNlLmZp bHAsIG1hcHBpbmcsCi0JCQkJCSAgb2Zmc2V0LCBsZW4sIGxlbiAtIHVud3JpdHRlbiwKLQkJCQkJ ICBwYWdlLCBkYXRhKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCi0JCWlmICh1 bndyaXR0ZW4pCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQlyZW1haW4gLT0gbGVuOwotCQl1c2Vy X2RhdGEgKz0gbGVuOwotCQlvZmZzZXQgKz0gbGVuOwotCQlwZyA9IDA7Ci0JfSB3aGlsZSAocmVt YWluKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZAogaTkxNV9nZW1fcmV0aXJlX3dv cmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CkBAIC0yOTMyLDQzICsyNTYz LDYgQEAgaTkxNV9nZW1faWRsZV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3Jr KQogCX0KIH0KIAotdm9pZCBpOTE1X2dlbV9jbG9zZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpnZW0sIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSA9IHRvX2k5MTUoZ2VtLT5kZXYpOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmogPSB0b19pbnRlbF9ibyhnZW0pOwotCXN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZh dGUgKmZwcml2ID0gZmlsZS0+ZHJpdmVyX3ByaXY7Ci0Jc3RydWN0IGk5MTVfbHV0X2hhbmRsZSAq bHV0LCAqbG47Ci0KLQltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKLQotCWxp c3RfZm9yX2VhY2hfZW50cnlfc2FmZShsdXQsIGxuLCAmb2JqLT5sdXRfbGlzdCwgb2JqX2xpbmsp IHsKLQkJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCA9IGx1dC0+Y3R4OwotCQlzdHJ1Y3Qg aTkxNV92bWEgKnZtYTsKLQotCQlHRU1fQlVHX09OKGN0eC0+ZmlsZV9wcml2ID09IEVSUl9QVFIo LUVCQURGKSk7Ci0JCWlmIChjdHgtPmZpbGVfcHJpdiAhPSBmcHJpdikKLQkJCWNvbnRpbnVlOwot Ci0JCXZtYSA9IHJhZGl4X3RyZWVfZGVsZXRlKCZjdHgtPmhhbmRsZXNfdm1hLCBsdXQtPmhhbmRs ZSk7Ci0JCUdFTV9CVUdfT04odm1hLT5vYmogIT0gb2JqKTsKLQotCQkvKiBXZSBhbGxvdyB0aGUg cHJvY2VzcyB0byBoYXZlIG11bHRpcGxlIGhhbmRsZXMgdG8gdGhlIHNhbWUKLQkJICogdm1hLCBp biB0aGUgc2FtZSBmZCBuYW1lc3BhY2UsIGJ5IHZpcnR1ZSBvZiBmbGluay9vcGVuLgotCQkgKi8K LQkJR0VNX0JVR19PTighdm1hLT5vcGVuX2NvdW50KTsKLQkJaWYgKCEtLXZtYS0+b3Blbl9jb3Vu dCAmJiAhaTkxNV92bWFfaXNfZ2d0dCh2bWEpKQotCQkJaTkxNV92bWFfY2xvc2Uodm1hKTsKLQot CQlsaXN0X2RlbCgmbHV0LT5vYmpfbGluayk7Ci0JCWxpc3RfZGVsKCZsdXQtPmN0eF9saW5rKTsK LQotCQlpOTE1X2x1dF9oYW5kbGVfZnJlZShsdXQpOwotCQlfX2k5MTVfZ2VtX29iamVjdF9yZWxl YXNlX3VubGVzc19hY3RpdmUob2JqKTsKLQl9Ci0KLQltdXRleF91bmxvY2soJmk5MTUtPmRybS5z dHJ1Y3RfbXV0ZXgpOwotfQotCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB0b193YWl0X3RpbWVvdXQo czY0IHRpbWVvdXRfbnMpCiB7CiAJaWYgKHRpbWVvdXRfbnMgPCAwKQpAQCAtMzk2OCwzNDggKzM1 NjIsNiBAQCBpOTE1X2dlbV9tYWR2aXNlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZv aWQgKmRhdGEsCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQKLWZyb250YnVmZmVyX3Jl dGlyZShzdHJ1Y3QgaTkxNV9hY3RpdmVfcmVxdWVzdCAqYWN0aXZlLAotCQkgICBzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpyZXF1ZXN0KQotewotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmog PQotCQljb250YWluZXJfb2YoYWN0aXZlLCB0eXBlb2YoKm9iaiksIGZyb250YnVmZmVyX3dyaXRl KTsKLQotCWludGVsX2ZiX29ial9mbHVzaChvYmosIE9SSUdJTl9DUyk7Ci19Ci0KLXZvaWQgaTkx NV9nZW1fb2JqZWN0X2luaXQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKLQkJCSAg Y29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Rfb3BzICpvcHMpCi17Ci0JbXV0ZXhfaW5p dCgmb2JqLT5tbS5sb2NrKTsKLQotCXNwaW5fbG9ja19pbml0KCZvYmotPnZtYS5sb2NrKTsKLQlJ TklUX0xJU1RfSEVBRCgmb2JqLT52bWEubGlzdCk7Ci0KLQlJTklUX0xJU1RfSEVBRCgmb2JqLT5s dXRfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJm9iai0+YmF0Y2hfcG9vbF9saW5rKTsKLQotCWlu aXRfcmN1X2hlYWQoJm9iai0+cmN1KTsKLQotCW9iai0+b3BzID0gb3BzOwotCi0JcmVzZXJ2YXRp b25fb2JqZWN0X2luaXQoJm9iai0+X19idWlsdGluX3Jlc3YpOwotCW9iai0+cmVzdiA9ICZvYmot Pl9fYnVpbHRpbl9yZXN2OwotCi0Jb2JqLT5mcm9udGJ1ZmZlcl9nZ3R0X29yaWdpbiA9IE9SSUdJ Tl9HVFQ7Ci0JaTkxNV9hY3RpdmVfcmVxdWVzdF9pbml0KCZvYmotPmZyb250YnVmZmVyX3dyaXRl LAotCQkJCSBOVUxMLCBmcm9udGJ1ZmZlcl9yZXRpcmUpOwotCi0Jb2JqLT5tbS5tYWR2ID0gSTkx NV9NQURWX1dJTExORUVEOwotCUlOSVRfUkFESVhfVFJFRSgmb2JqLT5tbS5nZXRfcGFnZS5yYWRp eCwgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7Ci0JbXV0ZXhfaW5pdCgmb2JqLT5tbS5nZXRf cGFnZS5sb2NrKTsKLQotCWk5MTVfZ2VtX2luZm9fYWRkX29iaih0b19pOTE1KG9iai0+YmFzZS5k ZXYpLCBvYmotPmJhc2Uuc2l6ZSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdF9vcHMgaTkxNV9nZW1fb2JqZWN0X29wcyA9IHsKLQkuZmxhZ3MgPSBJOTE1X0dF TV9PQkpFQ1RfSEFTX1NUUlVDVF9QQUdFIHwKLQkJIEk5MTVfR0VNX09CSkVDVF9JU19TSFJJTktB QkxFLAotCi0JLmdldF9wYWdlcyA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNfZ3R0LAotCS5w dXRfcGFnZXMgPSBpOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzX2d0dCwKLQotCS5wd3JpdGUgPSBp OTE1X2dlbV9vYmplY3RfcHdyaXRlX2d0dCwKLX07Ci0KLXN0YXRpYyBpbnQgaTkxNV9nZW1fb2Jq ZWN0X2NyZWF0ZV9zaG1lbShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCQlzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKm9iaiwKLQkJCQkJc2l6ZV90IHNpemUpCi17Ci0Jc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IFZN X05PUkVTRVJWRTsKLQlzdHJ1Y3QgZmlsZSAqZmlscDsKLQotCWRybV9nZW1fcHJpdmF0ZV9vYmpl Y3RfaW5pdChkZXYsIG9iaiwgc2l6ZSk7Ci0KLQlpZiAoaTkxNS0+bW0uZ2VtZnMpCi0JCWZpbHAg PSBzaG1lbV9maWxlX3NldHVwX3dpdGhfbW50KGk5MTUtPm1tLmdlbWZzLCAiaTkxNSIsIHNpemUs Ci0JCQkJCQkgZmxhZ3MpOwotCWVsc2UKLQkJZmlscCA9IHNobWVtX2ZpbGVfc2V0dXAoImk5MTUi LCBzaXplLCBmbGFncyk7Ci0KLQlpZiAoSVNfRVJSKGZpbHApKQotCQlyZXR1cm4gUFRSX0VSUihm aWxwKTsKLQotCW9iai0+ZmlscCA9IGZpbHA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKgotaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHU2NCBzaXplKQotewotCXN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmo7Ci0Jc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7Ci0JdW5zaWduZWQg aW50IGNhY2hlX2xldmVsOwotCWdmcF90IG1hc2s7Ci0JaW50IHJldDsKLQotCS8qIFRoZXJlIGlz IGEgcHJldmFsZW5jZSBvZiB0aGUgYXNzdW1wdGlvbiB0aGF0IHdlIGZpdCB0aGUgb2JqZWN0J3MK LQkgKiBwYWdlIGNvdW50IGluc2lkZSBhIDMyYml0IF9zaWduZWRfIHZhcmlhYmxlLiBMZXQncyBk b2N1bWVudCB0aGlzIGFuZAotCSAqIGNhdGNoIGlmIHdlIGV2ZXIgbmVlZCB0byBmaXggaXQuIElu IHRoZSBtZWFudGltZSwgaWYgeW91IGRvIHNwb3QKLQkgKiBzdWNoIGEgbG9jYWwgdmFyaWFibGUs IHBsZWFzZSBjb25zaWRlciBmaXhpbmchCi0JICovCi0JaWYgKHNpemUgPj4gUEFHRV9TSElGVCA+ IElOVF9NQVgpCi0JCXJldHVybiBFUlJfUFRSKC1FMkJJRyk7Ci0KLQlpZiAob3ZlcmZsb3dzX3R5 cGUoc2l6ZSwgb2JqLT5iYXNlLnNpemUpKQotCQlyZXR1cm4gRVJSX1BUUigtRTJCSUcpOwotCi0J b2JqID0gaTkxNV9nZW1fb2JqZWN0X2FsbG9jKCk7Ci0JaWYgKG9iaiA9PSBOVUxMKQotCQlyZXR1 cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCXJldCA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc2ht ZW0oJmRldl9wcml2LT5kcm0sICZvYmotPmJhc2UsIHNpemUpOwotCWlmIChyZXQpCi0JCWdvdG8g ZmFpbDsKLQotCW1hc2sgPSBHRlBfSElHSFVTRVIgfCBfX0dGUF9SRUNMQUlNQUJMRTsKLQlpZiAo SVNfSTk2NUdNKGRldl9wcml2KSB8fCBJU19JOTY1RyhkZXZfcHJpdikpIHsKLQkJLyogOTY1Z20g Y2Fubm90IHJlbG9jYXRlIG9iamVjdHMgYWJvdmUgNEdpQi4gKi8KLQkJbWFzayAmPSB+X19HRlBf SElHSE1FTTsKLQkJbWFzayB8PSBfX0dGUF9ETUEzMjsKLQl9Ci0KLQltYXBwaW5nID0gb2JqLT5i YXNlLmZpbHAtPmZfbWFwcGluZzsKLQltYXBwaW5nX3NldF9nZnBfbWFzayhtYXBwaW5nLCBtYXNr KTsKLQlHRU1fQlVHX09OKCEobWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSAmIF9fR0ZQX1JFQ0xB SU0pKTsKLQotCWk5MTVfZ2VtX29iamVjdF9pbml0KG9iaiwgJmk5MTVfZ2VtX29iamVjdF9vcHMp OwotCi0Jb2JqLT53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fQ1BVOwotCW9iai0+cmVh ZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0NQVTsKLQotCWlmIChIQVNfTExDKGRldl9wcml2 KSkKLQkJLyogT24gc29tZSBkZXZpY2VzLCB3ZSBjYW4gaGF2ZSB0aGUgR1BVIHVzZSB0aGUgTExD ICh0aGUgQ1BVCi0JCSAqIGNhY2hlKSBmb3IgYWJvdXQgYSAxMCUgcGVyZm9ybWFuY2UgaW1wcm92 ZW1lbnQKLQkJICogY29tcGFyZWQgdG8gdW5jYWNoZWQuICBHcmFwaGljcyByZXF1ZXN0cyBvdGhl ciB0aGFuCi0JCSAqIGRpc3BsYXkgc2Nhbm91dCBhcmUgY29oZXJlbnQgd2l0aCB0aGUgQ1BVIGlu Ci0JCSAqIGFjY2Vzc2luZyB0aGlzIGNhY2hlLiAgVGhpcyBtZWFucyBpbiB0aGlzIG1vZGUgd2UK LQkJICogZG9uJ3QgbmVlZCB0byBjbGZsdXNoIG9uIHRoZSBDUFUgc2lkZSwgYW5kIG9uIHRoZQot CQkgKiBHUFUgc2lkZSB3ZSBvbmx5IG5lZWQgdG8gZmx1c2ggaW50ZXJuYWwgY2FjaGVzIHRvCi0J CSAqIGdldCBkYXRhIHZpc2libGUgdG8gdGhlIENQVS4KLQkJICoKLQkJICogSG93ZXZlciwgd2Ug bWFpbnRhaW4gdGhlIGRpc3BsYXkgcGxhbmVzIGFzIFVDLCBhbmQgc28KLQkJICogbmVlZCB0byBy ZWJpbmQgd2hlbiBmaXJzdCB1c2VkIGFzIHN1Y2guCi0JCSAqLwotCQljYWNoZV9sZXZlbCA9IEk5 MTVfQ0FDSEVfTExDOwotCWVsc2UKLQkJY2FjaGVfbGV2ZWwgPSBJOTE1X0NBQ0hFX05PTkU7Ci0K LQlpOTE1X2dlbV9vYmplY3Rfc2V0X2NhY2hlX2NvaGVyZW5jeShvYmosIGNhY2hlX2xldmVsKTsK LQotCXRyYWNlX2k5MTVfZ2VtX29iamVjdF9jcmVhdGUob2JqKTsKLQotCXJldHVybiBvYmo7Ci0K LWZhaWw6Ci0JaTkxNV9nZW1fb2JqZWN0X2ZyZWUob2JqKTsKLQlyZXR1cm4gRVJSX1BUUihyZXQp OwotfQotCi1zdGF0aWMgYm9vbCBkaXNjYXJkX2JhY2tpbmdfc3RvcmFnZShzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqKQotewotCS8qIElmIHdlIGFyZSB0aGUgbGFzdCB1c2VyIG9mIHRo ZSBiYWNraW5nIHN0b3JhZ2UgKGJlIGl0IHNobWVtZnMKLQkgKiBwYWdlcyBvciBzdG9sZW4gZXRj KSwgd2Uga25vdyB0aGF0IHRoZSBwYWdlcyBhcmUgZ29pbmcgdG8gYmUKLQkgKiBpbW1lZGlhdGVs eSByZWxlYXNlZC4gSW4gdGhpcyBjYXNlLCB3ZSBjYW4gdGhlbiBza2lwIGNvcHlpbmcKLQkgKiBi YWNrIHRoZSBjb250ZW50cyBmcm9tIHRoZSBHUFUuCi0JICovCi0KLQlpZiAob2JqLT5tbS5tYWR2 ICE9IEk5MTVfTUFEVl9XSUxMTkVFRCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKG9iai0+YmFz ZS5maWxwID09IE5VTEwpCi0JCXJldHVybiB0cnVlOwotCi0JLyogQXQgZmlyc3QgZ2xhbmNlLCB0 aGlzIGxvb2tzIHJhY3ksIGJ1dCB0aGVuIGFnYWluIHNvIHdvdWxkIGJlCi0JICogdXNlcnNwYWNl IHJhY2luZyBtbWFwIGFnYWluc3QgY2xvc2UuIEhvd2V2ZXIsIHRoZSBmaXJzdCBleHRlcm5hbAot CSAqIHJlZmVyZW5jZSB0byB0aGUgZmlscCBjYW4gb25seSBiZSBvYnRhaW5lZCB0aHJvdWdoIHRo ZQotCSAqIGk5MTVfZ2VtX21tYXBfaW9jdGwoKSB3aGljaCBzYWZlZ3VhcmRzIHVzIGFnYWluc3Qg dGhlIHVzZXIKLQkgKiBhY3F1aXJpbmcgc3VjaCBhIHJlZmVyZW5jZSB3aGlsc3Qgd2UgYXJlIGlu IHRoZSBtaWRkbGUgb2YKLQkgKiBmcmVlaW5nIHRoZSBvYmplY3QuCi0JICovCi0JcmV0dXJuIGF0 b21pY19sb25nX3JlYWQoJm9iai0+YmFzZS5maWxwLT5mX2NvdW50KSA9PSAxOwotfQotCi1zdGF0 aWMgdm9pZCBfX2k5MTVfZ2VtX2ZyZWVfb2JqZWN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSwKLQkJCQkgICAgc3RydWN0IGxsaXN0X25vZGUgKmZyZWVkKQotewotCXN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmosICpvbjsKLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKLQot CXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldChpOTE1KTsKLQlsbGlzdF9mb3JfZWFjaF9l bnRyeV9zYWZlKG9iaiwgb24sIGZyZWVkLCBmcmVlZCkgewotCQlzdHJ1Y3QgaTkxNV92bWEgKnZt YSwgKnZuOwotCi0JCXRyYWNlX2k5MTVfZ2VtX29iamVjdF9kZXN0cm95KG9iaik7Ci0KLQkJbXV0 ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Ci0KLQkJR0VNX0JVR19PTihpOTE1X2dl bV9vYmplY3RfaXNfYWN0aXZlKG9iaikpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodm1h LCB2biwgJm9iai0+dm1hLmxpc3QsIG9ial9saW5rKSB7Ci0JCQlHRU1fQlVHX09OKGk5MTVfdm1h X2lzX2FjdGl2ZSh2bWEpKTsKLQkJCXZtYS0+ZmxhZ3MgJj0gfkk5MTVfVk1BX1BJTl9NQVNLOwot CQkJaTkxNV92bWFfZGVzdHJveSh2bWEpOwotCQl9Ci0JCUdFTV9CVUdfT04oIWxpc3RfZW1wdHko Jm9iai0+dm1hLmxpc3QpKTsKLQkJR0VNX0JVR19PTighUkJfRU1QVFlfUk9PVCgmb2JqLT52bWEu dHJlZSkpOwotCi0JCS8qIFRoaXMgc2VyaWFsaXplcyBmcmVlaW5nIHdpdGggdGhlIHNocmlua2Vy LiBTaW5jZSB0aGUgZnJlZQotCQkgKiBpcyBkZWxheWVkLCBmaXJzdCBieSBSQ1UgdGhlbiBieSB0 aGUgd29ya3F1ZXVlLCB3ZSB3YW50IHRoZQotCQkgKiBzaHJpbmtlciB0byBiZSBhYmxlIHRvIGZy ZWUgcGFnZXMgb2YgdW5yZWZlcmVuY2VkIG9iamVjdHMsCi0JCSAqIG9yIGVsc2Ugd2UgbWF5IG9v bSB3aGlsc3QgdGhlcmUgYXJlIHBsZW50eSBvZiBkZWZlcnJlZAotCQkgKiBmcmVlZCBvYmplY3Rz LgotCQkgKi8KLQkJaWYgKGk5MTVfZ2VtX29iamVjdF9oYXNfcGFnZXMob2JqKSkgewotCQkJc3Bp bl9sb2NrKCZpOTE1LT5tbS5vYmpfbG9jayk7Ci0JCQlsaXN0X2RlbF9pbml0KCZvYmotPm1tLmxp bmspOwotCQkJc3Bpbl91bmxvY2soJmk5MTUtPm1tLm9ial9sb2NrKTsKLQkJfQotCi0JCW11dGV4 X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Ci0KLQkJR0VNX0JVR19PTihvYmotPmJp bmRfY291bnQpOwotCQlHRU1fQlVHX09OKG9iai0+dXNlcmZhdWx0X2NvdW50KTsKLQkJR0VNX0JV R19PTihhdG9taWNfcmVhZCgmb2JqLT5mcm9udGJ1ZmZlcl9iaXRzKSk7Ci0JCUdFTV9CVUdfT04o IWxpc3RfZW1wdHkoJm9iai0+bHV0X2xpc3QpKTsKLQotCQlpZiAob2JqLT5vcHMtPnJlbGVhc2Up Ci0JCQlvYmotPm9wcy0+cmVsZWFzZShvYmopOwotCi0JCWlmIChXQVJOX09OKGk5MTVfZ2VtX29i amVjdF9oYXNfcGlubmVkX3BhZ2VzKG9iaikpKQotCQkJYXRvbWljX3NldCgmb2JqLT5tbS5wYWdl c19waW5fY291bnQsIDApOwotCQlfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMob2JqLCBJOTE1 X01NX05PUk1BTCk7Ci0JCUdFTV9CVUdfT04oaTkxNV9nZW1fb2JqZWN0X2hhc19wYWdlcyhvYmop KTsKLQotCQlpZiAob2JqLT5iYXNlLmltcG9ydF9hdHRhY2gpCi0JCQlkcm1fcHJpbWVfZ2VtX2Rl c3Ryb3koJm9iai0+YmFzZSwgTlVMTCk7Ci0KLQkJcmVzZXJ2YXRpb25fb2JqZWN0X2ZpbmkoJm9i ai0+X19idWlsdGluX3Jlc3YpOwotCQlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKCZvYmotPmJhc2Up OwotCQlpOTE1X2dlbV9pbmZvX3JlbW92ZV9vYmooaTkxNSwgb2JqLT5iYXNlLnNpemUpOwotCi0J CWtmcmVlKG9iai0+Yml0XzE3KTsKLQkJaTkxNV9nZW1fb2JqZWN0X2ZyZWUob2JqKTsKLQotCQlH RU1fQlVHX09OKCFhdG9taWNfcmVhZCgmaTkxNS0+bW0uZnJlZV9jb3VudCkpOwotCQlhdG9taWNf ZGVjKCZpOTE1LT5tbS5mcmVlX2NvdW50KTsKLQotCQlpZiAob24pCi0JCQljb25kX3Jlc2NoZWQo KTsKLQl9Ci0JaW50ZWxfcnVudGltZV9wbV9wdXQoaTkxNSwgd2FrZXJlZik7Ci19Ci0KLXN0YXRp YyB2b2lkIGk5MTVfZ2VtX2ZsdXNoX2ZyZWVfb2JqZWN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSkKLXsKLQlzdHJ1Y3QgbGxpc3Rfbm9kZSAqZnJlZWQ7Ci0KLQkvKiBGcmVlIHRoZSBv bGRlc3QsIG1vc3Qgc3RhbGUgb2JqZWN0IHRvIGtlZXAgdGhlIGZyZWVfbGlzdCBzaG9ydCAqLwot CWZyZWVkID0gTlVMTDsKLQlpZiAoIWxsaXN0X2VtcHR5KCZpOTE1LT5tbS5mcmVlX2xpc3QpKSB7 IC8qIHF1aWNrIHRlc3QgZm9yIGhvdHBhdGggKi8KLQkJLyogT25seSBvbmUgY29uc3VtZXIgb2Yg bGxpc3RfZGVsX2ZpcnN0KCkgYWxsb3dlZCAqLwotCQlzcGluX2xvY2soJmk5MTUtPm1tLmZyZWVf bG9jayk7Ci0JCWZyZWVkID0gbGxpc3RfZGVsX2ZpcnN0KCZpOTE1LT5tbS5mcmVlX2xpc3QpOwot CQlzcGluX3VubG9jaygmaTkxNS0+bW0uZnJlZV9sb2NrKTsKLQl9Ci0JaWYgKHVubGlrZWx5KGZy ZWVkKSkgewotCQlmcmVlZC0+bmV4dCA9IE5VTEw7Ci0JCV9faTkxNV9nZW1fZnJlZV9vYmplY3Rz KGk5MTUsIGZyZWVkKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIF9faTkxNV9nZW1fZnJlZV93b3Jr KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSwgbW0u ZnJlZV93b3JrKTsKLQlzdHJ1Y3QgbGxpc3Rfbm9kZSAqZnJlZWQ7Ci0KLQkvKgotCSAqIEFsbCBm aWxlLW93bmVkIFZNQSBzaG91bGQgaGF2ZSBiZWVuIHJlbGVhc2VkIGJ5IHRoaXMgcG9pbnQgdGhy b3VnaAotCSAqIGk5MTVfZ2VtX2Nsb3NlX29iamVjdCgpLCBvciBlYXJsaWVyIGJ5IGk5MTVfZ2Vt X2NvbnRleHRfY2xvc2UoKS4KLQkgKiBIb3dldmVyLCB0aGUgb2JqZWN0IG1heSBhbHNvIGJlIGJv dW5kIGludG8gdGhlIGdsb2JhbCBHVFQgKGUuZy4KLQkgKiBvbGRlciBHUFVzIHdpdGhvdXQgcGVy LXByb2Nlc3Mgc3VwcG9ydCwgb3IgZm9yIGRpcmVjdCBhY2Nlc3MgdGhyb3VnaAotCSAqIHRoZSBH VFQgZWl0aGVyIGZvciB0aGUgdXNlciBvciBmb3Igc2Nhbm91dCkuIFRob3NlIFZNQSBzdGlsbCBu ZWVkIHRvCi0JICogdW5ib3VuZCBub3cuCi0JICovCi0KLQlzcGluX2xvY2soJmk5MTUtPm1tLmZy ZWVfbG9jayk7Ci0Jd2hpbGUgKChmcmVlZCA9IGxsaXN0X2RlbF9hbGwoJmk5MTUtPm1tLmZyZWVf bGlzdCkpKSB7Ci0JCXNwaW5fdW5sb2NrKCZpOTE1LT5tbS5mcmVlX2xvY2spOwotCi0JCV9faTkx NV9nZW1fZnJlZV9vYmplY3RzKGk5MTUsIGZyZWVkKTsKLQkJaWYgKG5lZWRfcmVzY2hlZCgpKQot CQkJcmV0dXJuOwotCi0JCXNwaW5fbG9jaygmaTkxNS0+bW0uZnJlZV9sb2NrKTsKLQl9Ci0Jc3Bp bl91bmxvY2soJmk5MTUtPm1tLmZyZWVfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faTkxNV9n ZW1fZnJlZV9vYmplY3RfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKLXsKLQlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqID0KLQkJY29udGFpbmVyX29mKGhlYWQsIHR5cGVvZigqb2Jq KSwgcmN1KTsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUob2JqLT5i YXNlLmRldik7Ci0KLQkvKgotCSAqIFdlIHJldXNlIG9iai0+cmN1IGZvciB0aGUgZnJlZWQgbGlz dCwgc28gd2UgaGFkIGJldHRlciBub3QgdHJlYXQKLQkgKiBpdCBsaWtlIGEgcmN1X2hlYWQgZnJv bSB0aGlzIHBvaW50IGZvcndhcmRzLiBBbmQgd2UgZXhwZWN0IGFsbAotCSAqIG9iamVjdHMgdG8g YmUgZnJlZWQgdmlhIHRoaXMgcGF0aC4KLQkgKi8KLQlkZXN0cm95X3JjdV9oZWFkKCZvYmotPnJj dSk7Ci0KLQkvKgotCSAqIFNpbmNlIHdlIHJlcXVpcmUgYmxvY2tpbmcgb24gc3RydWN0X211dGV4 IHRvIHVuYmluZCB0aGUgZnJlZWQKLQkgKiBvYmplY3QgZnJvbSB0aGUgR1BVIGJlZm9yZSByZWxl YXNpbmcgcmVzb3VyY2VzIGJhY2sgdG8gdGhlCi0JICogc3lzdGVtLCB3ZSBjYW4gbm90IGRvIHRo YXQgZGlyZWN0bHkgZnJvbSB0aGUgUkNVIGNhbGxiYWNrICh3aGljaCBtYXkKLQkgKiBiZSBhIHNv ZnRpcnEgY29udGV4dCksIGJ1dCBtdXN0IGluc3RlYWQgdGhlbiBkZWZlciB0aGF0IHdvcmsgb250 byBhCi0JICoga3RocmVhZC4gV2UgdXNlIHRoZSBSQ1UgY2FsbGJhY2sgcmF0aGVyIHRoYW4gbW92 ZSB0aGUgZnJlZWQgb2JqZWN0Ci0JICogZGlyZWN0bHkgb250byB0aGUgd29yayBxdWV1ZSBzbyB0 aGF0IHdlIGNhbiBtaXggYmV0d2VlbiB1c2luZyB0aGUKLQkgKiB3b3JrZXIgYW5kIHBlcmZvcm1p bmcgZnJlZXMgZGlyZWN0bHkgZnJvbSBzdWJzZXF1ZW50IGFsbG9jYXRpb25zIGZvcgotCSAqIGNy dWRlIGJ1dCBlZmZlY3RpdmUgbWVtb3J5IHRocm90dGxpbmcuCi0JICovCi0JaWYgKGxsaXN0X2Fk ZCgmb2JqLT5mcmVlZCwgJmk5MTUtPm1tLmZyZWVfbGlzdCkpCi0JCXF1ZXVlX3dvcmsoaTkxNS0+ d3EsICZpOTE1LT5tbS5mcmVlX3dvcmspOwotfQotCi12b2lkIGk5MTVfZ2VtX2ZyZWVfb2JqZWN0 KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iaikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqID0gdG9faW50ZWxfYm8oZ2VtX29iaik7Ci0KLQlpZiAob2JqLT5tbS5xdWly a2VkKQotCQlfX2k5MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcyhvYmopOwotCi0JaWYgKGRpc2Nh cmRfYmFja2luZ19zdG9yYWdlKG9iaikpCi0JCW9iai0+bW0ubWFkdiA9IEk5MTVfTUFEVl9ET05U TkVFRDsKLQotCS8qCi0JICogQmVmb3JlIHdlIGZyZWUgdGhlIG9iamVjdCwgbWFrZSBzdXJlIGFu eSBwdXJlIFJDVS1vbmx5Ci0JICogcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIGFyZSBjb21w bGV0ZSwgZS5nLgotCSAqIGk5MTVfZ2VtX2J1c3lfaW9jdGwoKS4gRm9yIHRoZSBjb3JyZXNwb25k aW5nIHN5bmNocm9uaXplZAotCSAqIGxvb2t1cCBzZWUgaTkxNV9nZW1fb2JqZWN0X2xvb2t1cF9y Y3UoKS4KLQkgKi8KLQlhdG9taWNfaW5jKCZ0b19pOTE1KG9iai0+YmFzZS5kZXYpLT5tbS5mcmVl X2NvdW50KTsKLQljYWxsX3JjdSgmb2JqLT5yY3UsIF9faTkxNV9nZW1fZnJlZV9vYmplY3RfcmN1 KTsKLX0KLQotdm9pZCBfX2k5MTVfZ2VtX29iamVjdF9yZWxlYXNlX3VubGVzc19hY3RpdmUoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKLXsKLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZv YmotPmJhc2UuZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCi0JaWYgKCFpOTE1X2dlbV9vYmplY3RfaGFz X2FjdGl2ZV9yZWZlcmVuY2Uob2JqKSAmJgotCSAgICBpOTE1X2dlbV9vYmplY3RfaXNfYWN0aXZl KG9iaikpCi0JCWk5MTVfZ2VtX29iamVjdF9zZXRfYWN0aXZlX3JlZmVyZW5jZShvYmopOwotCWVs c2UKLQkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwotfQotCiB2b2lkIGk5MTVfZ2VtX3Nhbml0 aXplKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogewogCWludGVsX3dha2VyZWZfdCB3 YWtlcmVmOwpAQCAtNTAzOCw3ICs0MjkwLDcgQEAgc3RhdGljIHZvaWQgaTkxNV9nZW1faW5pdF9f bW0oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCiAJSU5JVF9MSVNUX0hFQUQoJmk5MTUt Pm1tLmZlbmNlX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZpOTE1LT5tbS51c2VyZmF1bHRfbGlz dCk7CiAKLQlJTklUX1dPUksoJmk5MTUtPm1tLmZyZWVfd29yaywgX19pOTE1X2dlbV9mcmVlX3dv cmspOworCWk5MTVfZ2VtX2luaXRfX29iamVjdHMoaTkxNSk7CiB9CiAKIGludCBpOTE1X2dlbV9p bml0X2Vhcmx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKQEAgLTUyMDUsNTcg KzQ0NTcsNiBAQCB2b2lkIGk5MTVfZ2VtX3RyYWNrX2ZiKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvbGQsCiAJfQogfQogCi0vKiBBbGxvY2F0ZSBhIG5ldyBHRU0gb2JqZWN0IGFuZCBmaWxs IGl0IHdpdGggdGhlIHN1cHBsaWVkIGRhdGEgKi8KLXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICoKLWk5MTVfZ2VtX29iamVjdF9jcmVhdGVfZnJvbV9kYXRhKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKLQkJCSAgICAgICAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXpl KQotewotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Ci0Jc3RydWN0IGZpbGUgKmZp bGU7Ci0Jc2l6ZV90IG9mZnNldDsKLQlpbnQgZXJyOwotCi0Jb2JqID0gaTkxNV9nZW1fb2JqZWN0 X2NyZWF0ZShkZXZfcHJpdiwgcm91bmRfdXAoc2l6ZSwgUEFHRV9TSVpFKSk7Ci0JaWYgKElTX0VS UihvYmopKQotCQlyZXR1cm4gb2JqOwotCi0JR0VNX0JVR19PTihvYmotPndyaXRlX2RvbWFpbiAh PSBJOTE1X0dFTV9ET01BSU5fQ1BVKTsKLQotCWZpbGUgPSBvYmotPmJhc2UuZmlscDsKLQlvZmZz ZXQgPSAwOwotCWRvIHsKLQkJdW5zaWduZWQgaW50IGxlbiA9IG1pbl90KHR5cGVvZihzaXplKSwg c2l6ZSwgUEFHRV9TSVpFKTsKLQkJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JCXZvaWQgKnBnZGF0YSwg KnZhZGRyOwotCi0JCWVyciA9IHBhZ2VjYWNoZV93cml0ZV9iZWdpbihmaWxlLCBmaWxlLT5mX21h cHBpbmcsCi0JCQkJCSAgICBvZmZzZXQsIGxlbiwgMCwKLQkJCQkJICAgICZwYWdlLCAmcGdkYXRh KTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIGZhaWw7Ci0KLQkJdmFkZHIgPSBrbWFwKHBhZ2Up OwotCQltZW1jcHkodmFkZHIsIGRhdGEsIGxlbik7Ci0JCWt1bm1hcChwYWdlKTsKLQotCQllcnIg PSBwYWdlY2FjaGVfd3JpdGVfZW5kKGZpbGUsIGZpbGUtPmZfbWFwcGluZywKLQkJCQkJICBvZmZz ZXQsIGxlbiwgbGVuLAotCQkJCQkgIHBhZ2UsIHBnZGF0YSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJ Z290byBmYWlsOwotCi0JCXNpemUgLT0gbGVuOwotCQlkYXRhICs9IGxlbjsKLQkJb2Zmc2V0ICs9 IGxlbjsKLQl9IHdoaWxlIChzaXplKTsKLQotCXJldHVybiBvYmo7Ci0KLWZhaWw6Ci0JaTkxNV9n ZW1fb2JqZWN0X3B1dChvYmopOwotCXJldHVybiBFUlJfUFRSKGVycik7Ci19Ci0KIHN0cnVjdCBz Y2F0dGVybGlzdCAqCiBpOTE1X2dlbV9vYmplY3RfZ2V0X3NnKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmosCiAJCSAgICAgICB1bnNpZ25lZCBpbnQgbiwKQEAgLTU0MTcsNyArNDYxOCw3 IEBAIGludCBpOTE1X2dlbV9vYmplY3RfYXR0YWNoX3BoeXMoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaiwgaW50IGFsaWduKQogCWlmIChvYmotPm9wcyA9PSAmaTkxNV9nZW1fcGh5c19v cHMpCiAJCXJldHVybiAwOwogCi0JaWYgKG9iai0+b3BzICE9ICZpOTE1X2dlbV9vYmplY3Rfb3Bz KQorCWlmIChvYmotPm9wcyAhPSAmaTkxNV9nZW1fc2htZW1fb3BzKQogCQlyZXR1cm4gLUVJTlZB TDsKIAogCWVyciA9IGk5MTVfZ2VtX29iamVjdF91bmJpbmQob2JqKTsKQEAgLTU0NTMsMTIgKzQ2 NTQsMTIgQEAgaW50IGk5MTVfZ2VtX29iamVjdF9hdHRhY2hfcGh5cyhzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqLCBpbnQgYWxpZ24pCiAJX19pOTE1X2dlbV9vYmplY3RfcGluX3BhZ2Vz KG9iaik7CiAKIAlpZiAoIUlTX0VSUl9PUl9OVUxMKHBhZ2VzKSkKLQkJaTkxNV9nZW1fb2JqZWN0 X29wcy5wdXRfcGFnZXMob2JqLCBwYWdlcyk7CisJCWk5MTVfZ2VtX3NobWVtX29wcy5wdXRfcGFn ZXMob2JqLCBwYWdlcyk7CiAJbXV0ZXhfdW5sb2NrKCZvYmotPm1tLmxvY2spOwogCXJldHVybiAw OwogCiBlcnJfeGZlcjoKLQlvYmotPm9wcyA9ICZpOTE1X2dlbV9vYmplY3Rfb3BzOworCW9iai0+ b3BzID0gJmk5MTVfZ2VtX3NobWVtX29wczsKIAlpZiAoIUlTX0VSUl9PUl9OVUxMKHBhZ2VzKSkg ewogCQl1bnNpZ25lZCBpbnQgc2dfcGFnZV9zaXplcyA9IGk5MTVfc2dfcGFnZV9zaXplcyhwYWdl cy0+c2dsKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYuYwppbmRleCBlMTlhODllNGRmNjQuLjNj NGY1MDE3Y2YyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMKQEAgLTE1MDIsNyArMTUwMiw3 IEBAIHN0YXRpYyBpbnQgYWxsb2Nfb2FfYnVmZmVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKIAlCVUlMRF9CVUdfT05fTk9UX1BPV0VSX09GXzIoT0FfQlVGRkVSX1NJWkUpOwog CUJVSUxEX0JVR19PTihPQV9CVUZGRVJfU0laRSA8IFNaXzEyOEsgfHwgT0FfQlVGRkVSX1NJWkUg PiBTWl8xNk0pOwogCi0JYm8gPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlKGRldl9wcml2LCBPQV9C VUZGRVJfU0laRSk7CisJYm8gPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtKGRldl9wcml2 LCBPQV9CVUZGRVJfU0laRSk7CiAJaWYgKElTX0VSUihibykpIHsKIAkJRFJNX0VSUk9SKCJGYWls ZWQgdG8gYWxsb2NhdGUgT0EgYnVmZmVyXG4iKTsKIAkJcmV0ID0gUFRSX0VSUihibyk7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRldi5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZmJkZXYuYwppbmRleCBlOGY2OTRiNTdiOGEuLjI1OTk5NTczZGZlMiAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRldi5jCkBAIC0xNDMsNyArMTQzLDcgQEAgc3RhdGlj IGludCBpbnRlbGZiX2FsbG9jKHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIsCiAJaWYgKHNp emUgKiAyIDwgZGV2X3ByaXYtPnN0b2xlbl91c2FibGVfc2l6ZSkKIAkJb2JqID0gaTkxNV9nZW1f b2JqZWN0X2NyZWF0ZV9zdG9sZW4oZGV2X3ByaXYsIHNpemUpOwogCWlmIChvYmogPT0gTlVMTCkK LQkJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZShkZXZfcHJpdiwgc2l6ZSk7CisJCW9iaiA9 IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc2htZW0oZGV2X3ByaXYsIHNpemUpOwogCWlmIChJU19F UlIob2JqKSkgewogCQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBmcmFtZWJ1ZmZlclxu Iik7CiAJCXJldCA9IFBUUl9FUlIob2JqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2d1Yy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmMKaW5kZXgg OGVjYjQ3MDg3NDU3Li40YmIxMDFhZGJjMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2d1Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5jCkBA IC02NzQsNyArNjc0LDcgQEAgc3RydWN0IGk5MTVfdm1hICppbnRlbF9ndWNfYWxsb2NhdGVfdm1h KHN0cnVjdCBpbnRlbF9ndWMgKmd1YywgdTMyIHNpemUpCiAJdTY0IGZsYWdzOwogCWludCByZXQ7 CiAKLQlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlKGRldl9wcml2LCBzaXplKTsKKwlvYmog PSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtKGRldl9wcml2LCBzaXplKTsKIAlpZiAoSVNf RVJSKG9iaikpCiAJCXJldHVybiBFUlJfQ0FTVChvYmopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xy Yy5jCmluZGV4IDE5YWYxNGJhYjM4ZS4uMTQ3ZjUwNjU3NDYwIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9scmMuYwpAQCAtMTk3NCw3ICsxOTc0LDcgQEAgc3RhdGljIGludCBscmNfc2V0dXBfd2FfY3R4 KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsK IAlpbnQgZXJyOwogCi0Jb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZShlbmdpbmUtPmk5MTUs IENUWF9XQV9CQl9PQkpfU0laRSk7CisJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9zaG1l bShlbmdpbmUtPmk5MTUsIENUWF9XQV9CQl9PQkpfU0laRSk7CiAJaWYgKElTX0VSUihvYmopKQog CQlyZXR1cm4gUFRSX0VSUihvYmopOwogCkBAIC0zMDg2LDcgKzMwODYsNyBAQCBzdGF0aWMgaW50 IGV4ZWNsaXN0c19jb250ZXh0X2RlZmVycmVkX2FsbG9jKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpj ZSwKIAkgKi8KIAljb250ZXh0X3NpemUgKz0gTFJDX0hFQURFUl9QQUdFUyAqIFBBR0VfU0laRTsK IAotCWN0eF9vYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlKGVuZ2luZS0+aTkxNSwgY29udGV4 dF9zaXplKTsKKwljdHhfb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9zaG1lbShlbmdpbmUt Pmk5MTUsIGNvbnRleHRfc2l6ZSk7CiAJaWYgKElTX0VSUihjdHhfb2JqKSkKIAkJcmV0dXJuIFBU Ul9FUlIoY3R4X29iaik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3JpbmdidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwpp bmRleCA5ZTdhZDE3YjUyNTAuLjI0YTNhYmFlNzAzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3JpbmdidWZmZXIuYwpAQCAtMTQ0Miw3ICsxNDQyLDcgQEAgYWxsb2NfY29udGV4dF92bWEo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwog CWludCBlcnI7CiAKLQlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlKGk5MTUsIGVuZ2luZS0+ Y29udGV4dF9zaXplKTsKKwlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtKGk5MTUs IGVuZ2luZS0+Y29udGV4dF9zaXplKTsKIAlpZiAoSVNfRVJSKG9iaikpCiAJCXJldHVybiBFUlJf Q0FTVChvYmopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Y19m dy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWNfZncuYwppbmRleCBiZWNmMDVlYmFl NGQuLmUzMWZhM2FjODQ1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf dWNfZncuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Y19mdy5jCkBAIC0xNTks NyArMTU5LDggQEAgdm9pZCBpbnRlbF91Y19md19mZXRjaChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCiAJCWdvdG8gZmFpbDsKIAl9CiAKLQlvYmogPSBpOTE1X2dlbV9vYmplY3Rf Y3JlYXRlX2Zyb21fZGF0YShkZXZfcHJpdiwgZnctPmRhdGEsIGZ3LT5zaXplKTsKKwlvYmogPSBp OTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtX2Zyb21fZGF0YShkZXZfcHJpdiwKKwkJCQkJCSAg ICAgZnctPmRhdGEsIGZ3LT5zaXplKTsKIAlpZiAoSVNfRVJSKG9iaikpIHsKIAkJZXJyID0gUFRS X0VSUihvYmopOwogCQlEUk1fREVCVUdfRFJJVkVSKCIlcyBmdyBvYmplY3RfY3JlYXRlIGVycj0l ZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9odWdlX3Bh Z2VzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jCmluZGV4 IDBiNzc0MGRjMThjYi4uNjgwNjBlNWFjNzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3Nl bGZ0ZXN0cy9odWdlX3BhZ2VzLmMKQEAgLTEzOTMsNyArMTM5Myw3IEBAIHN0YXRpYyBpbnQgaWd0 X3BwZ3R0X2dlbWZzX2h1Z2Uodm9pZCAqYXJnKQogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpF KHNpemVzKTsgKytpKSB7CiAJCXVuc2lnbmVkIGludCBzaXplID0gc2l6ZXNbaV07CiAKLQkJb2Jq ID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZShpOTE1LCBzaXplKTsKKwkJb2JqID0gaTkxNV9nZW1f b2JqZWN0X2NyZWF0ZV9zaG1lbShpOTE1LCBzaXplKTsKIAkJaWYgKElTX0VSUihvYmopKQogCQkJ cmV0dXJuIFBUUl9FUlIob2JqKTsKIApAQCAtMTU3MSw3ICsxNTcxLDcgQEAgc3RhdGljIGludCBp Z3RfdG1wZnNfZmFsbGJhY2sodm9pZCAqYXJnKQogCiAJaTkxNS0+bW0uZ2VtZnMgPSBOVUxMOwog Ci0Jb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZShpOTE1LCBQQUdFX1NJWkUpOworCW9iaiA9 IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc2htZW0oaTkxNSwgUEFHRV9TSVpFKTsKIAlpZiAoSVNf RVJSKG9iaikpIHsKIAkJZXJyID0gUFRSX0VSUihvYmopOwogCQlnb3RvIG91dF9yZXN0b3JlOwpA QCAtMTYzMCw3ICsxNjMwLDcgQEAgc3RhdGljIGludCBpZ3Rfc2hyaW5rX3RocCh2b2lkICphcmcp CiAJCXJldHVybiAwOwogCX0KIAotCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGUoaTkxNSwg U1pfMk0pOworCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc2htZW0oaTkxNSwgU1pfMk0p OwogCWlmIChJU19FUlIob2JqKSkKIAkJcmV0dXJuIFBUUl9FUlIob2JqKTsKIApkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2RtYWJ1Zi5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2RtYWJ1Zi5jCmluZGV4IGE3MDU1 YjEyZTUzYy4uMzdkYzIyNjk5ZjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvaTkxNV9nZW1fZG1hYnVmLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2Vs ZnRlc3RzL2k5MTVfZ2VtX2RtYWJ1Zi5jCkBAIC0zMyw3ICszMyw3IEBAIHN0YXRpYyBpbnQgaWd0 X2RtYWJ1Zl9leHBvcnQodm9pZCAqYXJnKQogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv Ymo7CiAJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZjsKIAotCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9j cmVhdGUoaTkxNSwgUEFHRV9TSVpFKTsKKwlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3No bWVtKGk5MTUsIFBBR0VfU0laRSk7CiAJaWYgKElTX0VSUihvYmopKQogCQlyZXR1cm4gUFRSX0VS UihvYmopOwogCkBAIC01Nyw3ICs1Nyw3IEBAIHN0YXRpYyBpbnQgaWd0X2RtYWJ1Zl9pbXBvcnRf c2VsZih2b2lkICphcmcpCiAJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZjsKIAlpbnQgZXJyOwogCi0J b2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZShpOTE1LCBQQUdFX1NJWkUpOworCW9iaiA9IGk5 MTVfZ2VtX29iamVjdF9jcmVhdGVfc2htZW0oaTkxNSwgUEFHRV9TSVpFKTsKIAlpZiAoSVNfRVJS KG9iaikpCiAJCXJldHVybiBQVFJfRVJSKG9iaik7CiAKQEAgLTIzMiw3ICsyMzIsNyBAQCBzdGF0 aWMgaW50IGlndF9kbWFidWZfZXhwb3J0X3ZtYXAodm9pZCAqYXJnKQogCXZvaWQgKnB0cjsKIAlp bnQgZXJyOwogCi0Jb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZShpOTE1LCBQQUdFX1NJWkUp OworCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc2htZW0oaTkxNSwgUEFHRV9TSVpFKTsK IAlpZiAoSVNfRVJSKG9iaikpCiAJCXJldHVybiBQVFJfRVJSKG9iaik7CiAKQEAgLTI3OSw3ICsy NzksNyBAQCBzdGF0aWMgaW50IGlndF9kbWFidWZfZXhwb3J0X2ttYXAodm9pZCAqYXJnKQogCXZv aWQgKnB0cjsKIAlpbnQgZXJyOwogCi0Jb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZShpOTE1 LCAyKlBBR0VfU0laRSk7CisJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9zaG1lbShpOTE1 LCAyICogUEFHRV9TSVpFKTsKIAlpZiAoSVNfRVJSKG9iaikpCiAJCXJldHVybiBQVFJfRVJSKG9i aik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dl bV9vYmplY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9vYmpl Y3QuYwppbmRleCA5NzExNDhmYmU2ZjUuLmQ1YmQzM2M4NjdjMCAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX29iamVjdC5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3QuYwpAQCAtMzUsNyArMzUsNyBA QCBzdGF0aWMgaW50IGlndF9nZW1fb2JqZWN0KHZvaWQgKmFyZykKIAogCS8qIEJhc2ljIHRlc3Qg dG8gZW5zdXJlIHdlIGNhbiBjcmVhdGUgYW4gb2JqZWN0ICovCiAKLQlvYmogPSBpOTE1X2dlbV9v YmplY3RfY3JlYXRlKGk5MTUsIFBBR0VfU0laRSk7CisJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2Ny ZWF0ZV9zaG1lbShpOTE1LCBQQUdFX1NJWkUpOwogCWlmIChJU19FUlIob2JqKSkgewogCQllcnIg PSBQVFJfRVJSKG9iaik7CiAJCXByX2VycigiaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZSBmYWlsZWQs IGVycj0lZFxuIiwgZXJyKTsKQEAgLTU4LDcgKzU4LDcgQEAgc3RhdGljIGludCBpZ3RfcGh5c19v YmplY3Qodm9pZCAqYXJnKQogCSAqIGkuZS4gZXhlcmNpc2UgdGhlIGk5MTVfZ2VtX29iamVjdF9w aHlzIEFQSS4KIAkgKi8KIAotCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGUoaTkxNSwgUEFH RV9TSVpFKTsKKwlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtKGk5MTUsIFBBR0Vf U0laRSk7CiAJaWYgKElTX0VSUihvYmopKSB7CiAJCWVyciA9IFBUUl9FUlIob2JqKTsKIAkJcHJf ZXJyKCJpOTE1X2dlbV9vYmplY3RfY3JlYXRlIGZhaWxlZCwgZXJyPSVkXG4iLCBlcnIpOwotLSAK Mi4yMC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJ bnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=