From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 09/15] drm/i915: Eliminate lots of iterations over the execobjects array Date: Thu, 16 Mar 2017 13:20:00 +0000 Message-ID: <20170316132006.7976-10-chris@chris-wilson.co.uk> References: <20170316132006.7976-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 mail-wr0-x22a.google.com (mail-wr0-x22a.google.com [IPv6:2a00:1450:400c:c0c::22a]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2C6866EAE9 for ; Thu, 16 Mar 2017 13:20:24 +0000 (UTC) Received: by mail-wr0-x22a.google.com with SMTP id u108so31799851wrb.3 for ; Thu, 16 Mar 2017 06:20:24 -0700 (PDT) In-Reply-To: <20170316132006.7976-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 List-Id: intel-gfx@lists.freedesktop.org VGhlIG1ham9yIHNjYWxpbmcgYm90dGxlbmVjayBpbiBleGVjYnVmZmVyIGlzIHRoZSBwcm9jZXNz aW5nIG9mIHRoZQpleGVjb2JqZWN0cy4gQ3JlYXRpbmcgYW4gYXV4aWxpYXJ5IGxpc3QgaXMgaW5l ZmZpY2llbnQgd2hlbiBjb21wYXJlZCB0bwp1c2luZyB0aGUgZXhlY29iamVjdCBhcnJheSB3ZSBh bHJlYWR5IGhhdmUgYWxsb2NhdGVkLgoKUmVzZXJ2YXRpb24gaXMgdGhlbiBzcGxpdCBpbnRvIHBo YXNlcy4gQXMgd2UgbG9va3VwIHVwIHRoZSBWTUEsIHdlCnRyeSBhbmQgYmluZCBpdCBiYWNrIGlu dG8gYWN0aXZlIGxvY2F0aW9uLiBPbmx5IGlmIHRoYXQgZmFpbHMsIGRvIHdlIGFkZAppdCB0byB0 aGUgdW5ib3VuZCBsaXN0IGZvciBwaGFzZSAyLiBJbiBwaGFzZSAyLCB3ZSB0cnkgYW5kIGFkZCBh bGwgdGhvc2UKb2JqZWN0cyB0aGF0IGNvdWxkIG5vdCBmaXQgaW50byB0aGVpciBwcmV2aW91cyBs b2NhdGlvbiwgd2l0aCBmYWxsYmFjawp0byByZXRyeWluZyBhbGwgb2JqZWN0cyBhbmQgZXZpY3Rp bmcgdGhlIFZNIGluIGNhc2Ugb2Ygc2V2ZXJlCmZyYWdtZW50YXRpb24uIChUaGlzIGlzIHRoZSBz YW1lIGFzIGJlZm9yZSwgZXhjZXB0IHRoYXQgcGhhc2UgMSBpcyBub3cKZG9uZSBpbmxpbmUgd2l0 aCBsb29raW5nIHVwIHRoZSBWTUEgdG8gYXZvaWQgYW4gaXRlcmF0aW9uIG92ZXIgdGhlCmV4ZWNv YmplY3QgYXJyYXkuIEluIHRoZSBpZGVhbCBjYXNlLCB3ZSBlbGltaW5hdGUgdGhlIHNlcGFyYXRl IHJlc2VydmF0aW9uCnBoYXNlKS4gRHVyaW5nIHRoZSByZXNlcnZhdGlvbiBwaGFzZSwgd2Ugb25s eSBldmljdCBmcm9tIHRoZSBWTSBiZXR3ZWVuCnBhc3NlcyAocmF0aGVyIHRoYW4gY3VycmVudGx5 IGFzIHdlIHRyeSB0byBmaXQgZXZlcnkgbmV3IFZNQSkuIEluCnRlc3Rpbmcgd2l0aCBVbnJlYWwg RW5naW5lJ3MgQXRsYW50aXMgZGVtbyB3aGljaCBzdHJlc3NlcyB0aGUgZXZpY3Rpb24KbG9naWMg b24gZ2VuNyBjbGFzcyBoYXJkd2FyZSwgdGhpcyBzcGVlZCB1cCB0aGUgZnJhbWVyYXRlIGJ5IGEg ZmFjdG9yIG9mCjIuCgpUaGUgc2Vjb25kIGxvb3AgYW1hbGdhbWF0aW9uIGlzIGJldHdlZW4gbW92 ZV90b19ncHUgYW5kIG1vdmVfdG9fYWN0aXZlLgpBcyB3ZSBhbHdheXMgc3VibWl0IHRoZSByZXF1 ZXN0LCBldmVuIGlmIGluY29tcGxldGUsIHdlIGNhbiB1c2UgdGhlCmN1cnJlbnQgcmVxdWVzdCB0 byB0cmFjayBhY3RpdmUgVk1BIGFzIHdlIHBlcmZvcm0gdGhlIGZsdXNoZXMgYW5kCnN5bmNocm9u aXNhdGlvbiByZXF1aXJlZC4KClRoZSBuZXh0IGJpZyBhZHZhbmNlbWVudCBpcyB0byBhdm9pZCBj b3B5aW5nIGJhY2sgdG8gdGhlIHVzZXIgYW55CmV4ZWNvYmplY3RzIGFuZCByZWxvY2F0aW9ucyB0 aGF0IGFyZSBub3QgY2hhbmdlZC4KCnYyOiBBZGQgYSBUaGVvcnkgb2YgT3BlcmF0aW9uIHNwaWVs Lgp2MzogRmFsbCBiYWNrIHRvIHNsb3cgcmVsb2NhdGlvbnMgaW4gcHJlcGFyYXRpb24gZm9yIGZs dXNoaW5nIHVzZXJwdHJzLgoKU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJp cy13aWxzb24uY28udWs+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAg ICAgICAgICAgICAgfCAgICAyICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ldmlj dC5jICAgICAgICAgICB8ICAgOTUgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4 ZWNidWZmZXIuYyAgICAgIHwgMTY4MyArKysrKysrKysrKysrLS0tLS0tLS0tLQogZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV92bWEuYyAgICAgICAgICAgICAgICAgfCAgICAyICstCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5oICAgICAgICAgICAgICAgICB8ICAgIDEgKwogZHJpdmVy cy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2V2aWN0LmMgfCAgICA0ICstCiA2IGZp bGVzIGNoYW5nZWQsIDEwMTkgaW5zZXJ0aW9ucygrKSwgNzY4IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oCmluZGV4IGJhZTI1MTgwNmZiNi4uNGJiMzk3ZDg0OTIzIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTM1MzQsNyArMzUzNCw3IEBAIGludCBfX211c3RfY2hlY2sg aTkxNV9nZW1fZXZpY3Rfc29tZXRoaW5nKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAog aW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9ldmljdF9mb3Jfbm9kZShzdHJ1Y3QgaTkxNV9hZGRy ZXNzX3NwYWNlICp2bSwKIAkJCQkJIHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSwKIAkJCQkJIHVu c2lnbmVkIGludCBmbGFncyk7Ci1pbnQgaTkxNV9nZW1fZXZpY3Rfdm0oc3RydWN0IGk5MTVfYWRk cmVzc19zcGFjZSAqdm0sIGJvb2wgZG9faWRsZSk7CitpbnQgaTkxNV9nZW1fZXZpY3Rfdm0oc3Ry dWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pOwogCiAvKiBiZWxvbmdzIGluIGk5MTVfZ2VtX2d0 dC5oICovCiBzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9nZW1fY2hpcHNldF9mbHVzaChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9ldmljdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXZp Y3QuYwppbmRleCBmZDVjNzU1MTcxNDMuLmM0NWQ1OGU4YTUzZCAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXZpY3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9ldmljdC5jCkBAIC01MCw2ICs1MCwzMCBAQCBzdGF0aWMgYm9vbCBnZ3R0X2lz X2lkbGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCXJldHVybiB0cnVlOwog fQogCitzdGF0aWMgaW50IGdndHRfZmx1c2goc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUp Cit7CisJaW50IGVycjsKKworCS8qIE5vdCBldmVyeXRoaW5nIGluIHRoZSBHR1RUIGlzIHRyYWNr ZWQgdmlhIHZtYSAob3RoZXJ3aXNlIHdlCisJICogY291bGQgZXZpY3QgYXMgcmVxdWlyZWQgd2l0 aCBtaW5pbWFsIHN0YWxsaW5nKSBzbyB3ZSBhcmUgZm9yY2VkCisJICogdG8gaWRsZSB0aGUgR1BV IGFuZCBleHBsaWNpdGx5IHJldGlyZSBvdXRzdGFuZGluZyByZXF1ZXN0cyBpbgorCSAqIHRoZSBo b3BlcyB0aGF0IHdlIGNhbiB0aGVuIHJlbW92ZSBjb250ZXh0cyBhbmQgdGhlIGxpa2Ugb25seQor CSAqIGJvdW5kIGJ5IHRoZWlyIGFjdGl2ZSByZWZlcmVuY2UuCisJICovCisJZXJyID0gaTkxNV9n ZW1fc3dpdGNoX3RvX2tlcm5lbF9jb250ZXh0KGk5MTUpOworCWlmIChlcnIpCisJCXJldHVybiBl cnI7CisKKwllcnIgPSBpOTE1X2dlbV93YWl0X2Zvcl9pZGxlKGk5MTUsCisJCQkJICAgICBJOTE1 X1dBSVRfSU5URVJSVVBUSUJMRSB8CisJCQkJICAgICBJOTE1X1dBSVRfTE9DS0VEKTsKKwlpZiAo ZXJyKQorCQlyZXR1cm4gZXJyOworCisJaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKGk5MTUpOwor CXJldHVybiAwOworfQorCiBzdGF0aWMgYm9vbAogbWFya19mcmVlKHN0cnVjdCBkcm1fbW1fc2Nh biAqc2NhbiwKIAkgIHN0cnVjdCBpOTE1X3ZtYSAqdm1hLApAQCAtMTc1LDIzICsxOTksMTAgQEAg aTkxNV9nZW1fZXZpY3Rfc29tZXRoaW5nKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAog CQlyZXR1cm4gaW50ZWxfaGFzX3BlbmRpbmdfZmJfdW5waW4oZGV2X3ByaXYpID8gLUVBR0FJTiA6 IC1FTk9TUEM7CiAJfQogCi0JLyogTm90IGV2ZXJ5dGhpbmcgaW4gdGhlIEdHVFQgaXMgdHJhY2tl ZCB2aWEgdm1hIChvdGhlcndpc2Ugd2UKLQkgKiBjb3VsZCBldmljdCBhcyByZXF1aXJlZCB3aXRo IG1pbmltYWwgc3RhbGxpbmcpIHNvIHdlIGFyZSBmb3JjZWQKLQkgKiB0byBpZGxlIHRoZSBHUFUg YW5kIGV4cGxpY2l0bHkgcmV0aXJlIG91dHN0YW5kaW5nIHJlcXVlc3RzIGluCi0JICogdGhlIGhv cGVzIHRoYXQgd2UgY2FuIHRoZW4gcmVtb3ZlIGNvbnRleHRzIGFuZCB0aGUgbGlrZSBvbmx5Ci0J ICogYm91bmQgYnkgdGhlaXIgYWN0aXZlIHJlZmVyZW5jZS4KLQkgKi8KLQlyZXQgPSBpOTE1X2dl bV9zd2l0Y2hfdG9fa2VybmVsX2NvbnRleHQoZGV2X3ByaXYpOwotCWlmIChyZXQpCi0JCXJldHVy biByZXQ7Ci0KLQlyZXQgPSBpOTE1X2dlbV93YWl0X2Zvcl9pZGxlKGRldl9wcml2LAotCQkJCSAg ICAgSTkxNV9XQUlUX0lOVEVSUlVQVElCTEUgfAotCQkJCSAgICAgSTkxNV9XQUlUX0xPQ0tFRCk7 CisJcmV0ID0gZ2d0dF9mbHVzaChkZXZfcHJpdik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsK IAotCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhkZXZfcHJpdik7CiAJZ290byBzZWFyY2hfYWdh aW47CiAKIGZvdW5kOgpAQCAtMzM4LDEwICszNDksOCBAQCBpbnQgaTkxNV9nZW1fZXZpY3RfZm9y X25vZGUoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCiAvKioKICAqIGk5MTVfZ2VtX2V2 aWN0X3ZtIC0gRXZpY3QgYWxsIGlkbGUgdm1hcyBmcm9tIGEgdm0KICAqIEB2bTogQWRkcmVzcyBz cGFjZSB0byBjbGVhbnNlCi0gKiBAZG9faWRsZTogQm9vbGVhbiBkaXJlY3Rpbmcgd2hldGhlciB0 byBpZGxlIGZpcnN0LgogICoKLSAqIFRoaXMgZnVuY3Rpb24gZXZpY3RzIGFsbCBpZGxlcyB2bWFz IGZyb20gYSB2bS4gSWYgYWxsIHVucGlubmVkIHZtYXMgc2hvdWxkIGJlCi0gKiBldmljdGVkIHRo ZSBAZG9faWRsZSBuZWVkcyB0byBiZSBzZXQgdG8gdHJ1ZS4KKyAqIFRoaXMgZnVuY3Rpb24gZXZp Y3RzIGFsbCB2bWFzIGZyb20gYSB2bS4KICAqCiAgKiBUaGlzIGlzIHVzZWQgYnkgdGhlIGV4ZWNi dWYgY29kZSBhcyBhIGxhc3QtZGl0Y2ggZWZmb3J0IHRvIGRlZnJhZ21lbnQgdGhlCiAgKiBhZGRy ZXNzIHNwYWNlLgpAQCAtMzQ5LDM4ICszNTgsNTAgQEAgaW50IGk5MTVfZ2VtX2V2aWN0X2Zvcl9u b2RlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAogICogVG8gY2xhcmlmeTogVGhpcyBp cyBmb3IgZnJlZWluZyB1cCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UsIG5vdCBmb3IgZnJlZWluZwog ICogbWVtb3J5IGluIGUuZy4gdGhlIHNocmlua2VyLgogICovCi1pbnQgaTkxNV9nZW1fZXZpY3Rf dm0oc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sIGJvb2wgZG9faWRsZSkKK2ludCBpOTE1 X2dlbV9ldmljdF92bShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKIHsKKwlzdHJ1Y3Qg bGlzdF9oZWFkICpwaGFzZXNbXSA9IHsKKwkJJnZtLT5pbmFjdGl2ZV9saXN0LAorCQkmdm0tPmFj dGl2ZV9saXN0LAorCQlOVUxMCisJfSwgKipwaGFzZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGV2aWN0 aW9uX2xpc3Q7CiAJc3RydWN0IGk5MTVfdm1hICp2bWEsICpuZXh0OwogCWludCByZXQ7CiAKIAls b2NrZGVwX2Fzc2VydF9oZWxkKCZ2bS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CiAJdHJhY2Vf aTkxNV9nZW1fZXZpY3Rfdm0odm0pOwogCi0JaWYgKGRvX2lkbGUpIHsKLQkJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdm0tPmk5MTU7Ci0KLQkJaWYgKGk5MTVfaXNfZ2d0dCh2 bSkpIHsKLQkJCXJldCA9IGk5MTVfZ2VtX3N3aXRjaF90b19rZXJuZWxfY29udGV4dChkZXZfcHJp dik7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQlyZXQgPSBpOTE1X2dl bV93YWl0X2Zvcl9pZGxlKGRldl9wcml2LAotCQkJCQkgICAgIEk5MTVfV0FJVF9JTlRFUlJVUFRJ QkxFIHwKLQkJCQkJICAgICBJOTE1X1dBSVRfTE9DS0VEKTsKKwkvKiBTd2l0Y2ggYmFjayB0byB0 aGUgZGVmYXVsdCBjb250ZXh0IGluIG9yZGVyIHRvIHVucGluCisJICogdGhlIGV4aXN0aW5nIGNv bnRleHQgb2JqZWN0cy4gSG93ZXZlciwgc3VjaCBvYmplY3RzIG9ubHkKKwkgKiBwaW4gdGhlbXNl bHZlcyBpbnNpZGUgdGhlIGdsb2JhbCBHVFQgYW5kIHBlcmZvcm1pbmcgdGhlCisJICogc3dpdGNo IG90aGVyd2lzZSBpcyBpbmVmZmVjdGl2ZS4KKwkgKi8KKwlpZiAoaTkxNV9pc19nZ3R0KHZtKSkg eworCQlyZXQgPSBnZ3R0X2ZsdXNoKHZtLT5pOTE1KTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiBy ZXQ7Ci0KLQkJaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKGRldl9wcml2KTsKLQkJV0FSTl9PTigh bGlzdF9lbXB0eSgmdm0tPmFjdGl2ZV9saXN0KSk7CiAJfQogCi0JbGlzdF9mb3JfZWFjaF9lbnRy eV9zYWZlKHZtYSwgbmV4dCwgJnZtLT5pbmFjdGl2ZV9saXN0LCB2bV9saW5rKQotCQlpZiAoIWk5 MTVfdm1hX2lzX3Bpbm5lZCh2bWEpKQotCQkJV0FSTl9PTihpOTE1X3ZtYV91bmJpbmQodm1hKSk7 CisJSU5JVF9MSVNUX0hFQUQoJmV2aWN0aW9uX2xpc3QpOworCXBoYXNlID0gcGhhc2VzOworCWRv IHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICpwaGFzZSwgdm1fbGluaykgeworCQkJaWYg KGk5MTVfdm1hX2lzX3Bpbm5lZCh2bWEpKQorCQkJCWNvbnRpbnVlOworCisJCQlfX2k5MTVfdm1h X3Bpbih2bWEpOworCQkJbGlzdF9hZGQoJnZtYS0+ZXZpY3RfbGluaywgJmV2aWN0aW9uX2xpc3Qp OworCQl9CisJfSB3aGlsZSAoKisrcGhhc2UpOwogCi0JcmV0dXJuIDA7CisJcmV0ID0gMDsKKwls aXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodm1hLCBuZXh0LCAmZXZpY3Rpb25fbGlzdCwgZXZpY3Rf bGluaykgeworCQlfX2k5MTVfdm1hX3VucGluKHZtYSk7CisJCWlmIChyZXQgPT0gMCkKKwkJCXJl dCA9IGk5MTVfdm1hX3VuYmluZCh2bWEpOworCX0KKwlyZXR1cm4gcmV0OwogfQogCiAjaWYgSVNf RU5BQkxFRChDT05GSUdfRFJNX0k5MTVfU0VMRlRFU1QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbV9leGVjYnVmZmVyLmMKaW5kZXggM2NmYWQ2OGZjNDUyLi41Y2U0ZjJlNDdlYjkgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKQEAgLTQyLDE3ICs0 MiwxMzQgQEAKIAogI2RlZmluZSBEQkdfVVNFX0NQVV9SRUxPQyAwIC8qIC0xIGZvcmNlIEdUVCBy ZWxvY3M7IDEgZm9yY2UgQ1BVIHJlbG9jcyAqLwogCi0jZGVmaW5lICBfX0VYRUNfT0JKRUNUX0hB U19QSU4JCSgxPDwzMSkKLSNkZWZpbmUgIF9fRVhFQ19PQkpFQ1RfSEFTX0ZFTkNFCSgxPDwzMCkK LSNkZWZpbmUgIF9fRVhFQ19PQkpFQ1RfTkVFRFNfTUFQCSgxPDwyOSkKLSNkZWZpbmUgIF9fRVhF Q19PQkpFQ1RfTkVFRFNfQklBUwkoMTw8MjgpCisjZGVmaW5lICBfX0VYRUNfT0JKRUNUX0hBU19Q SU4JCUJJVCgzMSkKKyNkZWZpbmUgIF9fRVhFQ19PQkpFQ1RfSEFTX0ZFTkNFCUJJVCgzMCkKKyNk ZWZpbmUgIF9fRVhFQ19PQkpFQ1RfTkVFRFNfTUFQCUJJVCgyOSkKKyNkZWZpbmUgIF9fRVhFQ19P QkpFQ1RfTkVFRFNfQklBUwlCSVQoMjgpCiAjZGVmaW5lICBfX0VYRUNfT0JKRUNUX0lOVEVSTkFM X0ZMQUdTICgweGY8PDI4KSAvKiBhbGwgb2YgdGhlIGFib3ZlICovCisjZGVmaW5lIF9fRUJfUkVT RVJWRUQgKF9fRVhFQ19PQkpFQ1RfSEFTX1BJTiB8IF9fRVhFQ19PQkpFQ1RfSEFTX0ZFTkNFKQor CisjZGVmaW5lIF9fRVhFQ19IQVNfUkVMT0MJQklUKDMxKQorI2RlZmluZSBfX0VYRUNfVkFMSURB VEVECUJJVCgzMCkKKyNkZWZpbmUgVVBEQVRFCQkJUElOX09GRlNFVF9GSVhFRAogCiAjZGVmaW5l IEJBVENIX09GRlNFVF9CSUFTICgyNTYqMTAyNCkKIAogI2RlZmluZSBfX0k5MTVfRVhFQ19JTExF R0FMX0ZMQUdTIFwKIAkoX19JOTE1X0VYRUNfVU5LTk9XTl9GTEFHUyB8IEk5MTVfRVhFQ19DT05T VEFOVFNfTUFTSykKIAorLyoqCisgKiBET0M6IFVzZXIgY29tbWFuZCBleGVjdXRpb24KKyAqCisg KiBVc2Vyc3BhY2Ugc3VibWl0cyBjb21tYW5kcyB0byBiZSBleGVjdXRlZCBvbiB0aGUgR1BVIGFz IGFuIGluc3RydWN0aW9uCisgKiBzdHJlYW0gd2l0aGluIGEgR0VNIG9iamVjdCB3ZSBjYWxsIGEg YmF0Y2hidWZmZXIuIFRoaXMgaW5zdHJ1Y3Rpb25zIG1heQorICogcmVmZXIgdG8gb3RoZXIgR0VN IG9iamVjdHMgY29udGFpbmluZyBhdXhpbGlhcnkgc3RhdGUgc3VjaCBhcyBrZXJuZWxzLAorICog c2FtcGxlcnMsIHJlbmRlciB0YXJnZXRzIGFuZCBldmVuIHNlY29uZGFyeSBiYXRjaGJ1ZmZlcnMu IFVzZXJzcGFjZSBkb2VzCisgKiBub3Qga25vdyB3aGVyZSBpbiB0aGUgR1BVIG1lbW9yeSB0aGVz ZSBvYmplY3RzIHJlc2lkZSBhbmQgc28gYmVmb3JlIHRoZQorICogYmF0Y2hidWZmZXIgaXMgcGFz c2VkIHRvIHRoZSBHUFUgZm9yIGV4ZWN1dGlvbiwgdGhvc2UgYWRkcmVzc2VzIGluIHRoZQorICog YmF0Y2hidWZmZXIgYW5kIGF1eGlsaWFyeSBvYmplY3RzIGFyZSB1cGRhdGVkLiBUaGlzIGlzIGtu b3duIGFzIHJlbG9jYXRpb24sCisgKiBvciBwYXRjaGluZy4gVG8gdHJ5IGFuZCBhdm9pZCBoYXZp bmcgdG8gcmVsb2NhdGUgZWFjaCBvYmplY3Qgb24gdGhlIG5leHQKKyAqIGV4ZWN1dGlvbiwgdXNl cnNwYWNlIGlzIHRvbGQgdGhlIGxvY2F0aW9uIG9mIHRob3NlIG9iamVjdHMgaW4gdGhpcyBwYXNz LAorICogYnV0IHRoaXMgcmVtYWlucyBqdXN0IGEgaGludCBhcyB0aGUga2VybmVsIG1heSBjaG9v c2UgYSBuZXcgbG9jYXRpb24gZm9yCisgKiBhbnkgb2JqZWN0IGluIHRoZSBmdXR1cmUuCisgKgor ICogUHJvY2Vzc2luZyBhbiBleGVjYnVmIGlvY3RsIGlzIGNvbmNlcHR1YWxseSBzcGxpdCB1cCBp bnRvIGEgZmV3IHBoYXNlcy4KKyAqCisgKiAxLiBWYWxpZGF0aW9uIC0gRW5zdXJlIGFsbCB0aGUg cG9pbnRlcnMsIGhhbmRsZXMgYW5kIGZsYWdzIGFyZSB2YWxpZC4KKyAqIDIuIFJlc2VydmF0aW9u IC0gQXNzaWduIEdQVSBhZGRyZXNzIHNwYWNlIGZvciBldmVyeSBvYmplY3QKKyAqIDMuIFJlbG9j YXRpb24gLSBVcGRhdGUgYW55IGFkZHJlc3NlcyB0byBwb2ludCB0byB0aGUgZmluYWwgbG9jYXRp b25zCisgKiA0LiBTZXJpYWxpc2F0aW9uIC0gT3JkZXIgdGhlIHJlcXVlc3Qgd2l0aCByZXNwZWN0 IHRvIGl0cyBkZXBlbmRlbmNpZXMKKyAqIDUuIENvbnN0cnVjdGlvbiAtIENvbnN0cnVjdCBhIHJl cXVlc3QgdG8gZXhlY3V0ZSB0aGUgYmF0Y2hidWZmZXIKKyAqIDYuIFN1Ym1pc3Npb24gKGF0IHNv bWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSBleGVjdXRpb24pCisgKgorICogUmVzZXJ2aW5nIHJlc291 cmNlcyBmb3IgdGhlIGV4ZWNidWYgaXMgdGhlIG1vc3QgY29tcGxpY2F0ZWQgcGhhc2UuIFdlCisg KiBuZWl0aGVyIHdhbnQgdG8gaGF2ZSB0byBtaWdyYXRlIHRoZSBvYmplY3QgaW4gdGhlIGFkZHJl c3Mgc3BhY2UsIG5vciBkbworICogd2Ugd2FudCB0byBoYXZlIHRvIHVwZGF0ZSBhbnkgcmVsb2Nh dGlvbnMgcG9pbnRpbmcgdG8gdGhpcyBvYmplY3QuIElkZWFsbHksCisgKiB3ZSB3YW50IHRvIGxl YXZlIHRoZSBvYmplY3Qgd2hlcmUgaXQgaXMgYW5kIGZvciBhbGwgdGhlIGV4aXN0aW5nIHJlbG9j YXRpb25zCisgKiB0byBtYXRjaC4gSWYgdGhlIG9iamVjdCBpcyBnaXZlbiBhIG5ldyBhZGRyZXNz LCBvciBpZiB1c2Vyc3BhY2UgdGhpbmtzIHRoZQorICogb2JqZWN0IGlzIGVsc2V3aGVyZSwgd2Ug aGF2ZSB0byBwYXJzZSBhbGwgdGhlIHJlbG9jYXRpb24gZW50cmllcyBhbmQgdXBkYXRlCisgKiB0 aGUgYWRkcmVzc2VzLiBVc2Vyc3BhY2UgY2FuIHNldCB0aGUgSTkxNV9FWEVDX05PUkVMT0MgZmxh ZyB0byBoaW50IHRoYXQKKyAqIGFsbCB0aGUgdGFyZ2V0IGFkZHJlc3NlcyBpbiBhbGwgb2YgaXRz IG9iamVjdHMgbWF0Y2ggdGhlIHZhbHVlIGluIHRoZQorICogcmVsb2NhdGlvbiBlbnRyaWVzIGFu ZCB0aGF0IHRoZXkgYWxsIG1hdGNoIHRoZSBwcmVzdW1lZCBvZmZzZXRzIGdpdmVuIGJ5IHRoZQor ICogbGlzdCBvZiBleGVjYnVmZmVyIG9iamVjdHMuIFVzaW5nIHRoaXMga25vd2xlZGdlLCB3ZSBr bm93IHRoYXQgaWYgd2UgaGF2ZW4ndAorICogbW92ZWQgYW55IGJ1ZmZlcnMsIGFsbCB0aGUgcmVs b2NhdGlvbiBlbnRyaWVzIGFyZSB2YWxpZCBhbmQgd2UgY2FuIHNraXAKKyAqIHRoZSB1cGRhdGUu IChJZiB1c2Vyc3BhY2UgaXMgd3JvbmcsIHRoZSBsaWtlbHkgb3V0Y29tZSBpcyBhbiBpbXByb21w dHUgR1BVCisgKiBoYW5nLikKKyAqCisgKiBUaGUgcmVzZXJ2YXRpb24gaXMgZG9uZSBpcyBtdWx0 aXBsZSBwaGFzZXMuIEZpcnN0IHdlIHRyeSBhbmQga2VlcCBhbnkKKyAqIG9iamVjdCBhbHJlYWR5 IGJvdW5kIGluIGl0cyBjdXJyZW50IGxvY2F0aW9uIC0gc28gYXMgbG9uZyBhcyBtZWV0cyB0aGUK KyAqIGNvbnN0cmFpbnRzIGltcG9zZWQgYnkgdGhlIG5ldyBleGVjYnVmZmVyLiBBbnkgb2JqZWN0 IGxlZnQgdW5ib3VuZCBhZnRlciB0aGUKKyAqIGZpcnN0IHBhc3MgaXMgdGhlbiBmaXR0ZWQgaW50 byBhbnkgYXZhaWxhYmxlIGlkbGUgc3BhY2UuIElmIGFuIG9iamVjdCBkb2VzCisgKiBub3QgZml0 LCBhbGwgb2JqZWN0cyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSByZXNlcnZhdGlvbiBhbmQgdGhlIHBy b2Nlc3MgcmVydW4KKyAqIGFmdGVyIHNvcnRpbmcgdGhlIG9iamVjdHMgaW50byBhIHByaW9yaXR5 IG9yZGVyIChtb3JlIGRpZmZpY3VsdCB0byBmaXQKKyAqIG9iamVjdHMgYXJlIHRyaWVkIGZpcnN0 KS4gRmFpbGluZyB0aGF0LCB0aGUgZW50aXJlIFZNIGlzIGNsZWFyZWQgYW5kIHdlIHRyeQorICog dG8gZml0IHRoZSBleGVjYnVmIG9uY2UgbGFzdCB0aW1lIGJlZm9yZSBjb25jbHVkaW5nIHRoYXQg aXQgc2ltcGx5IHdpbGwgbm90CisgKiBmaXQuCisgKgorICogQSBzbWFsbCBjb21wbGljYXRpb24g dG8gYWxsIG9mIHRoaXMgaXMgdGhhdCB3ZSBhbGxvdyB1c2Vyc3BhY2Ugbm90IG9ubHkgdG8KKyAq IHNwZWNpZnkgYW4gYWxpZ25tZW50IGFuZCBhIHNpemUgZm9yIHRoZSBvYmplY3QgaW4gdGhlIGFk ZHJlc3Mgc3BhY2UsIGJ1dAorICogd2UgYWxzbyBhbGxvdyB1c2Vyc3BhY2UgdG8gc3BlY2lmeSB0 aGUgZXhhY3Qgb2Zmc2V0LiBUaGlzIG9iamVjdHMgYXJlCisgKiBzaW1wbGVyIHRvIHBsYWNlICh0 aGUgbG9jYXRpb24gaXMga25vd24gYSBwcmlvcmkpIGFsbCB3ZSBoYXZlIHRvIGRvIGlzIG1ha2UK KyAqIHN1cmUgdGhlIHNwYWNlIGlzIGF2YWlsYWJsZS4KKyAqCisgKiBPbmNlIGFsbCB0aGUgb2Jq ZWN0cyBhcmUgaW4gcGxhY2UsIHBhdGNoaW5nIHVwIHRoZSBidXJpZWQgcG9pbnRlcnMgdG8gcG9p bnQKKyAqIHRvIHRoZSBmaW5hbCBsb2NhdGlvbnMgaXMgYSBmYWlybHkgc2ltcGxlIGpvYiBvZiB3 YWxraW5nIG92ZXIgdGhlIHJlbG9jYXRpb24KKyAqIGVudHJ5IGFycmF5cywgbG9va2luZyB1cCB0 aGUgcmlnaHQgYWRkcmVzcyBhbmQgcmV3cml0aW5nIHRoZSB2YWx1ZSBpbnRvCisgKiB0aGUgb2Jq ZWN0LiBTaW1wbGUhIC4uLiBUaGUgcmVsb2NhdGlvbiBlbnRyaWVzIGFyZSBzdG9yZWQgaW4gdXNl ciBtZW1vcnkKKyAqIGFuZCBzbyB0byBhY2Nlc3MgdGhlbSB3ZSBoYXZlIHRvIGNvcHkgdGhlbSBp bnRvIGEgbG9jYWwgYnVmZmVyLiBUaGF0IGNvcHkKKyAqIGhhcyB0byBhdm9pZCB0YWtpbmcgYW55 IHBhZ2VmYXVsdHMgYXMgdGhleSBtYXkgbGVhZCBiYWNrIHRvIGEgR0VNIG9iamVjdAorICogcmVx dWlyaW5nIHRoZSBzdHJ1Y3RfbXV0ZXggKGkuZS4gcmVjdXJzaXZlIGRlYWRsb2NrKS4gU28gb25j ZSBhZ2FpbiB3ZSBzcGxpdAorICogdGhlIHJlbG9jYXRpb24gaW50byBtdWx0aXBsZSBwYXNzZXMu IEZpcnN0IHdlIHRyeSB0byBkbyBldmVyeXRoaW5nIHdpdGhpbiBhbgorICogYXRvbWljIGNvbnRl eHQgKGF2b2lkIHRoZSBwYWdlZmF1bHRzKSB3aGljaCByZXF1aXJlcyB0aGF0IHdlIG5ldmVyIHdh aXQuIElmCisgKiB3ZSBkZXRlY3QgdGhhdCB3ZSBtYXkgd2FpdCwgb3IgaWYgd2UgbmVlZCB0byBm YXVsdCwgdGhlbiB3ZSBoYXZlIHRvIGZhbGxiYWNrCisgKiB0byBhIHNsb3dlciBwYXRoLiBUaGUg c2xvd3BhdGggaGFzIHRvIGRyb3AgdGhlIG11dGV4LiAoQ2FuIHlvdSBoZWFyIGFsYXJtCisgKiBi ZWxscyB5ZXQ/KSBEcm9wcGluZyB0aGUgbXV0ZXggbWVhbnMgdGhhdCB3ZSBsb3NlIGFsbCB0aGUg c3RhdGUgd2UgaGF2ZQorICogYnVpbHQgdXAgc28gZmFyIGZvciB0aGUgZXhlY2J1ZiBhbmQgd2Ug bXVzdCByZXNldCBhbnkgZ2xvYmFsIGRhdGEuIEhvd2V2ZXIsCisgKiB3ZSBkbyBsZWF2ZSB0aGUg b2JqZWN0cyBwaW5uZWQgaW4gdGhlaXIgZmluYWwgbG9jYXRpb25zIC0gd2hpY2ggaXMgYQorICog cG90ZW50aWFsIGlzc3VlIGZvciBjb25jdXJyZW50IGV4ZWNidWZzLiBPbmNlIHdlIGhhdmUgbGVm dCB0aGUgbXV0ZXgsIHdlIGNhbgorICogYWxsb2NhdGUgYW5kIGNvcHkgYWxsIHRoZSByZWxvY2F0 aW9uIGVudHJpZXMgaW50byBhIGxhcmdlIGFycmF5IGF0IG91cgorICogbGVpc3VyZSwgcmVhY3F1 aXJlIHRoZSBtdXRleCwgcmVjbGFpbSBhbGwgdGhlIG9iamVjdHMgYW5kIG90aGVyIHN0YXRlIGFu ZAorICogdGhlbiBwcm9jZWVkIHRvIHVwZGF0ZSBhbnkgaW5jb3JyZWN0IGFkZHJlc3NlcyB3aXRo IHRoZSBvYmplY3RzLgorICoKKyAqIEFzIHdlIHByb2Nlc3MgdGhlIHJlbG9jYXRpb24gZW50cmll cywgd2UgbWFpbnRhaW4gYSByZWNvcmQgb2Ygd2hldGhlciB0aGUKKyAqIG9iamVjdCBpcyBiZWlu ZyB3cml0dGVuIHRvLiBVc2luZyBOT1JFTE9DLCB3ZSBleHBlY3QgdXNlcnNwYWNlIHRvIHByb3Zp ZGUKKyAqIHRoaXMgaW5mb3JtYXRpb24gaW5zdGVhZC4gV2UgYWxzbyBjaGVjayB3aGV0aGVyIHdl IGNhbiBza2lwIHRoZSByZWxvY2F0aW9uCisgKiBieSBjb21wYXJpbmcgdGhlIGV4cGVjdGVkIHZh bHVlIGluc2lkZSB0aGUgcmVsb2NhdGlvbiBlbnRyeSB3aXRoIHRoZSB0YXJnZXQncworICogZmlu YWwgYWRkcmVzcy4gSWYgdGhleSBkaWZmZXIsIHdlIGhhdmUgdG8gbWFwIHRoZSBjdXJyZW50IG9i amVjdCBhbmQgcmV3cml0ZQorICogdGhlIDQgb3IgOCBieXRlIHBvaW50ZXIgd2l0aGluLgorICoK KyAqIFNlcmlhbGlzaW5nIGFuIGV4ZWNidWYgaXMgcXVpdGUgc2ltcGxlIGFjY29yZGluZyB0byB0 aGUgcnVsZXMgb2YgdGhlIEdFTQorICogQUJJLiBFeGVjdXRpb24gd2l0aGluIGVhY2ggY29udGV4 dCBpcyBvcmRlcmVkIGJ5IHRoZSBvcmRlciBvZiBzdWJtaXNzaW9uLgorICogV3JpdGVzIHRvIGFu eSBHRU0gb2JqZWN0IGFyZSBpbiBvcmRlciBvZiBzdWJtaXNzaW9uIGFuZCBhcmUgZXhjbHVzaXZl LiBSZWFkcworICogZnJvbSBhIEdFTSBvYmplY3QgYXJlIHVub3JkZXJlZCB3aXRoIHJlc3BlY3Qg dG8gb3RoZXIgcmVhZHMsIGJ1dCBvcmRlcmVkIGJ5CisgKiB3cml0ZXMuIEEgd3JpdGUgc3VibWl0 dGVkIGFmdGVyIGEgcmVhZCBjYW5ub3Qgb2NjdXIgYmVmb3JlIHRoZSByZWFkLCBhbmQKKyAqIHNp bWlsYXJseSBhbnkgcmVhZCBzdWJtaXR0ZWQgYWZ0ZXIgYSB3cml0ZSBjYW5ub3Qgb2NjdXIgYmVm b3JlIHRoZSB3cml0ZS4KKyAqIFdyaXRlcyBhcmUgb3JkZXJlZCBiZXR3ZWVuIGVuZ2luZXMgc3Vj aCB0aGF0IG9ubHkgb25lIHdyaXRlIG9jY3VycyBhdCBhbnkKKyAqIHRpbWUgKGNvbXBsZXRpbmcg YW55IHJlYWRzIGJlZm9yZWhhbmQpIC0gdXNpbmcgc2VtYXBob3JlcyB3aGVyZSBhdmFpbGFibGUK KyAqIGFuZCBDUFUgc2VyaWFsaXNhdGlvbiBvdGhlcndpc2UuIE90aGVyIEdFTSBhY2Nlc3Mgb2Jl eSB0aGUgc2FtZSBydWxlcywgYW55CisgKiB3cml0ZSAoZWl0aGVyIHZpYSBtbWFwcyB1c2luZyBz ZXQtZG9tYWluLCBvciB2aWEgcHdyaXRlKSBtdXN0IGZsdXNoIGFsbCBHUFUKKyAqIHJlYWRzIGJl Zm9yZSBzdGFydGluZywgYW5kIGFueSByZWFkIChlaXRoZXIgdXNpbmcgc2V0LWRvbWFpbiBvciBw cmVhZCkgbXVzdAorICogZmx1c2ggYWxsIEdQVSB3cml0ZXMgYmVmb3JlIHN0YXJ0aW5nLiAoTm90 ZSB3ZSBvbmx5IGVtcGxveSBhIGJhcnJpZXIgYmVmb3JlLAorICogd2UgY3VycmVudGx5IHJlbHkg b24gdXNlcnNwYWNlIG5vdCBjb25jdXJyZW50bHkgc3RhcnRpbmcgYSBuZXcgZXhlY3V0aW9uCisg KiB3aGlsc3QgcmVhZGluZyBvciB3cml0aW5nIHRvIGFuIG9iamVjdC4gVGhpcyBtYXkgYmUgYW4g YWR2YW50YWdlIG9yIG5vdAorICogZGVwZW5kaW5nIG9uIGhvdyBtdWNoIHlvdSB0cnVzdCB1c2Vy c3BhY2Ugbm90IHRvIHNob290IHRoZW1zZWx2ZXMgaW4gdGhlCisgKiBmb290LikgU2VyaWFsaXNh dGlvbiBtYXkganVzdCByZXN1bHQgaW4gdGhlIHJlcXVlc3QgYmVpbmcgaW5zZXJ0ZWQgaW50bwor ICogYSBEQUcgYXdhaXRpbmcgaXRzIHR1cm4sIGJ1dCBtb3N0IHNpbXBsZSBpcyB0byB3YWl0IG9u IHRoZSBDUFUgdW50aWwKKyAqIGFsbCBkZXBlbmRlbmNpZXMgYXJlIHJlc29sdmVkLgorICoKKyAq IEFmdGVyIGFsbCBvZiB0aGF0LCBpcyBqdXN0IGEgbWF0dGVyIG9mIGNsb3NpbmcgdGhlIHJlcXVl c3QgYW5kIGhhbmRpbmcgaXQgdG8KKyAqIHRoZSBoYXJkd2FyZSAod2VsbCwgbGVhdmluZyBpdCBp biBhIHF1ZXVlIHRvIGJlIGV4ZWN1dGVkKS4gSG93ZXZlciwgd2UgYWxzbworICogb2ZmZXIgdGhl IGFiaWxpdHkgZm9yIGJhdGNoYnVmZmVycyB0byBiZSBydW4gd2l0aCBlbGV2YXRlZCBwcml2aWxl Z2VzIHNvCisgKiB0aGF0IHRoZXkgYWNjZXNzIG90aGVyd2lzZSBoaWRkZW4gcmVnaXN0ZXJzLiAo VXNlZCB0byBhZGp1c3QgTDMgY2FjaGUgZXRjLikKKyAqIEJlZm9yZSBhbnkgYmF0Y2ggaXMgZ2l2 ZW4gZXh0cmEgcHJpdmlsZWdlcyB3ZSBmaXJzdCBtdXN0IGNoZWNrIHRoYXQgaXQKKyAqIGNvbnRh aW5zIG5vIG5lZmFyaW91cyBpbnN0cnVjdGlvbnMsIHdlIGNoZWNrIHRoYXQgZWFjaCBpbnN0cnVj dGlvbiBpcyBmcm9tCisgKiBvdXIgd2hpdGVsaXN0IGFuZCBhbGwgcmVnaXN0ZXJzIGFyZSBhbHNv IGZyb20gYW4gYWxsb3dlZCBsaXN0LiBXZSBmaXJzdAorICogY29weSB0aGUgdXNlcidzIGJhdGNo YnVmZmVyIHRvIGEgc2hhZG93IChzbyB0aGF0IHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZQorICogYWNj ZXNzIHRvIGl0LCBlaXRoZXIgYnkgdGhlIENQVSBvciBHUFUgYXMgd2Ugc2NhbiBpdCkgYW5kIHRo ZW4gcGFyc2UgZWFjaAorICogaW5zdHJ1Y3Rpb24uIElmIGV2ZXJ5dGhpbmcgaXMgb2ssIHdlIHNl dCBhIGZsYWcgdGVsbGluZyB0aGUgaGFyZHdhcmUgdG8gcnVuCisgKiB0aGUgYmF0Y2hidWZmZXIg aW4gdHJ1c3RlZCBtb2RlLCBvdGhlcndpc2UgdGhlIGlvY3RsIGlzIHJlamVjdGVkLgorICovCisK IHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 OwogCXN0cnVjdCBkcm1fZmlsZSAqZmlsZTsKQEAgLTYzLDI4ICsxODAsNjIgQEAgc3RydWN0IGk5 MTVfZXhlY2J1ZmZlciB7CiAJc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm07CiAJc3RydWN0 IGk5MTVfdm1hICpiYXRjaDsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3Q7 Ci0JdTMyIGJhdGNoX3N0YXJ0X29mZnNldDsKLQl1MzIgYmF0Y2hfbGVuOwotCXVuc2lnbmVkIGlu dCBkaXNwYXRjaF9mbGFnczsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBzaGFk b3dfZXhlY19lbnRyeTsKLQlib29sIG5lZWRfcmVsb2NzOwotCXN0cnVjdCBsaXN0X2hlYWQgdm1h czsKKwl1bnNpZ25lZCBpbnQgYnVmZmVyX2NvdW50OworCXN0cnVjdCBsaXN0X2hlYWQgdW5ib3Vu ZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJlbG9jczsKIAlzdHJ1Y3QgcmVsb2NfY2FjaGUgewogCQlz dHJ1Y3QgZHJtX21tX25vZGUgbm9kZTsKIAkJdW5zaWduZWQgbG9uZyB2YWRkcjsKIAkJdW5zaWdu ZWQgaW50IHBhZ2U7CiAJCWJvb2wgdXNlXzY0Yml0X3JlbG9jOworCQlib29sIGhhc19sbGM7CisJ CWJvb2wgaGFzX2ZlbmNlOwogCX0gcmVsb2NfY2FjaGU7Ci0JaW50IGx1dF9tYXNrOworCXU2NCBp bnZhbGlkX2ZsYWdzOworCXUzMiBjb250ZXh0X2ZsYWdzOworCXUzMiBkaXNwYXRjaF9mbGFnczsK Kwl1MzIgYmF0Y2hfc3RhcnRfb2Zmc2V0OworCXUzMiBiYXRjaF9sZW47CisJaW50IGx1dF9zaXpl OwogCXN0cnVjdCBobGlzdF9oZWFkICpidWNrZXRzOwogfTsKIAorI2RlZmluZSB0b19wdHIoVCwg eCkgKChUICopKHVpbnRwdHJfdCkoeCkpCisKKy8qIFVzZWQgdG8gY29udmVydCBhbnkgYWRkcmVz cyB0byBjYW5vbmljYWwgZm9ybS4KKyAqIFN0YXJ0aW5nIGZyb20gZ2VuOCwgc29tZSBjb21tYW5k cyAoZS5nLiBTVEFURV9CQVNFX0FERFJFU1MsCisgKiBNSV9MT0FEX1JFR0lTVEVSX01FTSBhbmQg b3RoZXJzLCBzZWUgQnJvYWR3ZWxsIFBSTSBWb2wyYSkgcmVxdWlyZSB0aGUKKyAqIGFkZHJlc3Nl cyB0byBiZSBpbiBhIGNhbm9uaWNhbCBmb3JtOgorICogIkdyYXBoaWNzQWRkcmVzc1s2Mzo0OF0g YXJlIGlnbm9yZWQgYnkgdGhlIEhXIGFuZCBhc3N1bWVkIHRvIGJlIGluIGNvcnJlY3QKKyAqIGNh bm9uaWNhbCBmb3JtIFs2Mzo0OF0gPT0gWzQ3XS4iCisgKi8KKyNkZWZpbmUgR0VOOF9ISUdIX0FE RFJFU1NfQklUIDQ3CitzdGF0aWMgaW5saW5lIHU2NCBnZW44X2Nhbm9uaWNhbF9hZGRyKHU2NCBh ZGRyZXNzKQoreworCXJldHVybiBzaWduX2V4dGVuZDY0KGFkZHJlc3MsIEdFTjhfSElHSF9BRERS RVNTX0JJVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IGdlbjhfbm9uY2Fub25pY2FsX2FkZHIo dTY0IGFkZHJlc3MpCit7CisJcmV0dXJuIGFkZHJlc3MgJiAoKDFVTEwgPDwgKEdFTjhfSElHSF9B RERSRVNTX0JJVCArIDEpKSAtIDEpOworfQorCiBzdGF0aWMgaW50CiBlYl9jcmVhdGUoc3RydWN0 IGk5MTVfZXhlY2J1ZmZlciAqZWIpCiB7CiAJaWYgKChlYi0+YXJncy0+ZmxhZ3MgJiBJOTE1X0VY RUNfSEFORExFX0xVVCkgPT0gMCkgewotCQl1bnNpZ25lZCBpbnQgc2l6ZSA9IDEgKyBpbG9nMihl Yi0+YXJncy0+YnVmZmVyX2NvdW50KTsKLQorCQl1bnNpZ25lZCBpbnQgc2l6ZSA9IDEgKyBpbG9n MihlYi0+YnVmZmVyX2NvdW50KTsKKworCQkvKiBXaXRob3V0IGEgMToxIGFzc29jaWF0aW9uIGJl dHdlZW4gcmVsb2NhdGlvbiBoYW5kbGVzIGFuZAorCQkgKiB0aGUgZXhlY29iamVjdFtdIGluZGV4 LCB3ZSBpbnN0ZWFkIGNyZWF0ZSBhIGhhc2h0YWJsZS4KKwkJICogV2Ugc2l6ZSBpdCBkeW5hbWlj YWxseSBiYXNlZCBvbiBhdmFpbGFibGUgbWVtb3J5LCBzdGFydGluZworCQkgKiBmaXJzdCB3aXRo IDE6MSBhc3NvY2F0aXZlIGhhc2ggYW5kIHNjYWxpbmcgYmFjayB1bnRpbAorCQkgKiB0aGUgYWxs b2NhdGlvbiBzdWNjZWVkcy4KKwkJICoKKwkJICogTGF0ZXIgb24gd2UgdXNlIGEgcG9zaXRpdmUg bHV0X3NpemUgdG8gaW5kaWNhdGUgd2UgYXJlCisJCSAqIHVzaW5nIHRoaXMgaGFzaHRhYmxlLCBh bmQgYSBuZWdhdGl2ZSB2YWx1ZSB0byBpbmRpY2F0ZSBhCisJCSAqIGRpcmVjdCBsb29rdXAuCisJ CSAqLwogCQlkbyB7CiAJCQllYi0+YnVja2V0cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBobGlz dF9oZWFkKSA8PCBzaXplLAogCQkJCQkgICAgIEdGUF9URU1QT1JBUlkgfCBfX0dGUF9OT1dBUk4g fCBfX0dGUF9OT1JFVFJZKTsKQEAgLTk5LDkwICsyNTAsMzQ5IEBAIGViX2NyZWF0ZShzdHJ1Y3Qg aTkxNV9leGVjYnVmZmVyICplYikKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCi0JCWViLT5s dXRfbWFzayA9IHNpemU7CisJCWViLT5sdXRfc2l6ZSA9IHNpemU7CiAJfSBlbHNlIHsKLQkJZWIt Pmx1dF9tYXNrID0gLWViLT5hcmdzLT5idWZmZXJfY291bnQ7CisJCWViLT5sdXRfc2l6ZSA9IC1l Yi0+YnVmZmVyX2NvdW50OwogCX0KIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgYm9vbAorZWJf dm1hX21pc3BsYWNlZChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZW50 cnksCisJCSBjb25zdCBzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKK3sKKwlpZiAoKGVudHJ5LT5mbGFn cyAmIF9fRVhFQ19PQkpFQ1RfSEFTX1BJTikgPT0gMCkKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAo dm1hLT5ub2RlLnNpemUgPCBlbnRyeS0+cGFkX3RvX3NpemUpCisJCXJldHVybiB0cnVlOworCisJ aWYgKGVudHJ5LT5hbGlnbm1lbnQgJiYgIUlTX0FMSUdORUQodm1hLT5ub2RlLnN0YXJ0LCBlbnRy eS0+YWxpZ25tZW50KSkKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAoZW50cnktPmZsYWdzICYgRVhF Q19PQkpFQ1RfUElOTkVEICYmCisJICAgIHZtYS0+bm9kZS5zdGFydCAhPSBlbnRyeS0+b2Zmc2V0 KQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChlbnRyeS0+ZmxhZ3MgJiBfX0VYRUNfT0JKRUNUX05F RURTX0JJQVMgJiYKKwkgICAgdm1hLT5ub2RlLnN0YXJ0IDwgQkFUQ0hfT0ZGU0VUX0JJQVMpCisJ CXJldHVybiB0cnVlOworCisJaWYgKChlbnRyeS0+ZmxhZ3MgJiBFWEVDX09CSkVDVF9TVVBQT1JU U180OEJfQUREUkVTUykgPT0gMCAmJgorCSAgICAodm1hLT5ub2RlLnN0YXJ0ICsgdm1hLT5ub2Rl LnNpemUgLSAxKSA+PiAzMikKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisK K3N0YXRpYyB2b2lkCitlYl9waW5fdm1hKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViLAorCSAg IHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICplbnRyeSwKKwkgICBzdHJ1Y3QgaTkx NV92bWEgKnZtYSkKK3sKKwl1NjQgZmxhZ3M7CisKKwlmbGFncyA9IHZtYS0+bm9kZS5zdGFydDsK KwlmbGFncyB8PSBQSU5fVVNFUiB8IFBJTl9OT05CTE9DSyB8IFBJTl9PRkZTRVRfRklYRUQ7CisJ aWYgKHVubGlrZWx5KGVudHJ5LT5mbGFncyAmIEVYRUNfT0JKRUNUX05FRURTX0dUVCkpCisJCWZs YWdzIHw9IFBJTl9HTE9CQUw7CisJaWYgKHVubGlrZWx5KGk5MTVfdm1hX3Bpbih2bWEsIDAsIDAs IGZsYWdzKSkpCisJCXJldHVybjsKKworCWlmIChlbnRyeS0+ZmxhZ3MgJiBFWEVDX09CSkVDVF9O RUVEU19GRU5DRSkgeworCQlpZiAodW5saWtlbHkoaTkxNV92bWFfZ2V0X2ZlbmNlKHZtYSkpKSB7 CisJCQlpOTE1X3ZtYV91bnBpbih2bWEpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKGk5MTVf dm1hX3Bpbl9mZW5jZSh2bWEpKQorCQkJZW50cnktPmZsYWdzIHw9IF9fRVhFQ19PQkpFQ1RfSEFT X0ZFTkNFOworCX0KKworCWVudHJ5LT5mbGFncyB8PSBfX0VYRUNfT0JKRUNUX0hBU19QSU47Cit9 CisKIHN0YXRpYyBpbmxpbmUgdm9pZAogX19lYl91bnJlc2VydmVfdm1hKHN0cnVjdCBpOTE1X3Zt YSAqdm1hLAogCQkgICBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZW50 cnkpCiB7CisJR0VNX0JVR19PTigoZW50cnktPmZsYWdzICYgX19FWEVDX09CSkVDVF9IQVNfUElO KSA9PSAwKTsKKwogCWlmICh1bmxpa2VseShlbnRyeS0+ZmxhZ3MgJiBfX0VYRUNfT0JKRUNUX0hB U19GRU5DRSkpCiAJCWk5MTVfdm1hX3VucGluX2ZlbmNlKHZtYSk7CiAKLQlpZiAoZW50cnktPmZs YWdzICYgX19FWEVDX09CSkVDVF9IQVNfUElOKQotCQlfX2k5MTVfdm1hX3VucGluKHZtYSk7CisJ X19pOTE1X3ZtYV91bnBpbih2bWEpOwogfQogCi1zdGF0aWMgdm9pZAotZWJfdW5yZXNlcnZlX3Zt YShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKK3N0YXRpYyBpbmxpbmUgdm9pZAorZWJfdW5yZXNlcnZl X3ZtYShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKKwkJIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19v YmplY3QyICplbnRyeSkKIHsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZW50 cnkgPSB2bWEtPmV4ZWNfZW50cnk7Ci0KLQlfX2ViX3VucmVzZXJ2ZV92bWEodm1hLCBlbnRyeSk7 Ci0JZW50cnktPmZsYWdzICY9IH4oX19FWEVDX09CSkVDVF9IQVNfRkVOQ0UgfCBfX0VYRUNfT0JK RUNUX0hBU19QSU4pOworCWlmIChlbnRyeS0+ZmxhZ3MgJiBfX0VYRUNfT0JKRUNUX0hBU19QSU4p IHsKKwkJX19lYl91bnJlc2VydmVfdm1hKHZtYSwgZW50cnkpOworCQllbnRyeS0+ZmxhZ3MgJj0g fl9fRUJfUkVTRVJWRUQ7CisJfQogfQogCi1zdGF0aWMgdm9pZAotZWJfcmVzZXQoc3RydWN0IGk5 MTVfZXhlY2J1ZmZlciAqZWIpCitzdGF0aWMgaW50CitlYl9hZGRfdm1hKHN0cnVjdCBpOTE1X2V4 ZWNidWZmZXIgKmViLAorCSAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICplbnRy eSwKKwkgICBzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKIHsKLQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsK KwlpbnQgcmV0OwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZlYi0+dm1hcywgZXhlY19s aW5rKSB7Ci0JCWViX3VucmVzZXJ2ZV92bWEodm1hKTsKLQkJaTkxNV92bWFfcHV0KHZtYSk7Ci0J CXZtYS0+ZXhlY19lbnRyeSA9IE5VTEw7CisJR0VNX0JVR19PTihpOTE1X3ZtYV9pc19jbG9zZWQo dm1hKSk7CisKKwlpZiAoKGViLT5hcmdzLT5mbGFncyAmIF9fRVhFQ19WQUxJREFURUQpID09IDAp IHsKKwkJaWYgKHVubGlrZWx5KGVudHJ5LT5mbGFncyAmIGViLT5pbnZhbGlkX2ZsYWdzKSkKKwkJ CXJldHVybiAtRUlOVkFMOworCisJCWlmICh1bmxpa2VseShlbnRyeS0+YWxpZ25tZW50ICYmICFp c19wb3dlcl9vZl8yKGVudHJ5LT5hbGlnbm1lbnQpKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJ CS8qIE9mZnNldCBjYW4gYmUgdXNlZCBhcyBpbnB1dCAoRVhFQ19PQkpFQ1RfUElOTkVEKSwgcmVq ZWN0CisJCSAqIGFueSBub24tcGFnZS1hbGlnbmVkIG9yIG5vbi1jYW5vbmljYWwgYWRkcmVzc2Vz LgorCQkgKi8KKwkJaWYgKGVudHJ5LT5mbGFncyAmIEVYRUNfT0JKRUNUX1BJTk5FRCkgeworCQkJ aWYgKHVubGlrZWx5KGVudHJ5LT5vZmZzZXQgIT0KKwkJCQkgICAgIGdlbjhfY2Fub25pY2FsX2Fk ZHIoZW50cnktPm9mZnNldCAmIFBBR0VfTUFTSykpKQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9 CisKKwkJLyogRnJvbSBkcm1fbW0gcGVyc3BlY3RpdmUgYWRkcmVzcyBzcGFjZSBpcyBjb250aW51 b3VzLAorCQkgKiBzbyBmcm9tIHRoaXMgcG9pbnQgd2UncmUgYWx3YXlzIHVzaW5nIG5vbi1jYW5v bmljYWwKKwkJICogZm9ybSBpbnRlcm5hbGx5LgorCQkgKi8KKwkJZW50cnktPm9mZnNldCA9IGdl bjhfbm9uY2Fub25pY2FsX2FkZHIoZW50cnktPm9mZnNldCk7CisKKwkJLyogcGFkX3RvX3NpemUg d2FzIG9uY2UgYSByZXNlcnZlZCBmaWVsZCwgc28gc2FuaXRpemUgaXQgKi8KKwkJaWYgKGVudHJ5 LT5mbGFncyAmIEVYRUNfT0JKRUNUX1BBRF9UT19TSVpFKSB7CisJCQlpZiAodW5saWtlbHkob2Zm c2V0X2luX3BhZ2UoZW50cnktPnBhZF90b19zaXplKSkpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJ CX0gZWxzZSB7CisJCQllbnRyeS0+cGFkX3RvX3NpemUgPSAwOworCQl9CisKKwkJaWYgKHVubGlr ZWx5KHZtYS0+ZXhlY19lbnRyeSkpIHsKKwkJCURSTV9ERUJVRygiT2JqZWN0IFtoYW5kbGUgJWQs IGluZGV4ICVkXSBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlIGluIG9iamVjdCBsaXN0XG4iLAorCQkJ CSAgZW50cnktPmhhbmRsZSwgKGludCkoZW50cnkgLSBlYi0+ZXhlYykpOworCQkJcmV0dXJuIC1F SU5WQUw7CisJCX0KIAl9CiAKLQlpZiAoZWItPmx1dF9tYXNrID49IDApCi0JCW1lbXNldChlYi0+ YnVja2V0cywgMCwKLQkJICAgICAgICgxPDxlYi0+bHV0X21hc2spKnNpemVvZihzdHJ1Y3QgaGxp c3RfaGVhZCkpOwotfQorCXZtYS0+ZXhlY19lbnRyeSA9IGVudHJ5OworCWVudHJ5LT5yc3ZkMiA9 ICh1aW50cHRyX3Qpdm1hOworCWk5MTVfdm1hX2dldCh2bWEpOwogCi0jZGVmaW5lIHRvX3B0cihU LCB4KSAoKFQgKikodWludHB0cl90KSh4KSkKKwlpZiAoZWItPmx1dF9zaXplID49IDApIHsKKwkJ dm1hLT5leGVjX2hhbmRsZSA9IGVudHJ5LT5oYW5kbGU7CisJCWhsaXN0X2FkZF9oZWFkKCZ2bWEt PmV4ZWNfbm9kZSwKKwkJCSAgICAgICAmZWItPmJ1Y2tldHNbaGFzaF8zMihlbnRyeS0+aGFuZGxl LAorCQkJCQkJICAgIGViLT5sdXRfc2l6ZSldKTsKKwl9CiAKLXN0YXRpYyBib29sCi1lYl9hZGRf dm1hKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViLCBzdHJ1Y3QgaTkxNV92bWEgKnZtYSwgaW50 IGkpCisJaWYgKGVudHJ5LT5yZWxvY2F0aW9uX2NvdW50KQorCQlsaXN0X2FkZF90YWlsKCZ2bWEt PnJlbG9jX2xpbmssICZlYi0+cmVsb2NzKTsKKworCWlmICghZWItPnJlbG9jX2NhY2hlLmhhc19m ZW5jZSkgeworCQllbnRyeS0+ZmxhZ3MgJj0gfkVYRUNfT0JKRUNUX05FRURTX0ZFTkNFOworCX0g ZWxzZSB7CisJCWlmIChlbnRyeS0+ZmxhZ3MgJiBFWEVDX09CSkVDVF9ORUVEU19GRU5DRSAmJgor CQkgICAgaTkxNV9nZW1fb2JqZWN0X2lzX3RpbGVkKHZtYS0+b2JqKSkKKwkJCWVudHJ5LT5mbGFn cyB8PSBFWEVDX09CSkVDVF9ORUVEU19HVFQgfCBfX0VYRUNfT0JKRUNUX05FRURTX01BUDsKKwl9 CisKKwlpZiAoKGVudHJ5LT5mbGFncyAmIEVYRUNfT0JKRUNUX1BJTk5FRCkgPT0gMCkKKwkJZW50 cnktPmZsYWdzIHw9IGViLT5jb250ZXh0X2ZsYWdzOworCisJcmV0ID0gMDsKKwlpZiAodm1hLT5u b2RlLnNpemUpCisJCWViX3Bpbl92bWEoZWIsIGVudHJ5LCB2bWEpOworCWlmIChlYl92bWFfbWlz cGxhY2VkKGVudHJ5LCB2bWEpKSB7CisJCWViX3VucmVzZXJ2ZV92bWEodm1hLCBlbnRyeSk7CisK KwkJbGlzdF9hZGRfdGFpbCgmdm1hLT5leGVjX2xpbmssICZlYi0+dW5ib3VuZCk7CisJCWlmIChk cm1fbW1fbm9kZV9hbGxvY2F0ZWQoJnZtYS0+bm9kZSkpCisJCQlyZXQgPSBpOTE1X3ZtYV91bmJp bmQodm1hKTsKKwl9IGVsc2UgeworCQlpZiAoZW50cnktPm9mZnNldCAhPSB2bWEtPm5vZGUuc3Rh cnQpIHsKKwkJCWVudHJ5LT5vZmZzZXQgPSB2bWEtPm5vZGUuc3RhcnQgfCBVUERBVEU7CisJCQll Yi0+YXJncy0+ZmxhZ3MgfD0gX19FWEVDX0hBU19SRUxPQzsKKwkJfQorCX0KKwlyZXR1cm4gcmV0 OworfQorCitzdGF0aWMgaW5saW5lIGludCB1c2VfY3B1X3JlbG9jKGNvbnN0IHN0cnVjdCByZWxv Y19jYWNoZSAqY2FjaGUsCisJCQkJY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aikKIHsKLQlpZiAodW5saWtlbHkodm1hLT5leGVjX2VudHJ5KSkgewotCQlEUk1fREVCVUcoIk9i amVjdCBbaGFuZGxlICVkLCBpbmRleCAlZF0gYXBwZWFycyBtb3JlIHRoYW4gb25jZSBpbiBvYmpl Y3QgbGlzdFxuIiwKLQkJCSAgZWItPmV4ZWNbaV0uaGFuZGxlLCBpKTsKKwlpZiAoIWk5MTVfZ2Vt X29iamVjdF9oYXNfc3RydWN0X3BhZ2Uob2JqKSkKIAkJcmV0dXJuIGZhbHNlOworCisJaWYgKERC R19VU0VfQ1BVX1JFTE9DKQorCQlyZXR1cm4gREJHX1VTRV9DUFVfUkVMT0MgPiAwOworCisJcmV0 dXJuIChjYWNoZS0+aGFzX2xsYyB8fAorCQlvYmotPmJhc2Uud3JpdGVfZG9tYWluID09IEk5MTVf R0VNX0RPTUFJTl9DUFUgfHwKKwkJb2JqLT5jYWNoZV9sZXZlbCAhPSBJOTE1X0NBQ0hFX05PTkUp OworfQorCitzdGF0aWMgaW50CitlYl9yZXNlcnZlX3ZtYShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVy ICplYiwgc3RydWN0IGk5MTVfdm1hICp2bWEpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVj X29iamVjdDIgKmVudHJ5ID0gdm1hLT5leGVjX2VudHJ5OworCXU2NCBmbGFnczsKKwlpbnQgcmV0 OworCisJZmxhZ3MgPSBQSU5fVVNFUiB8IFBJTl9OT05CTE9DSzsKKwlpZiAoZW50cnktPmZsYWdz ICYgRVhFQ19PQkpFQ1RfTkVFRFNfR1RUKQorCQlmbGFncyB8PSBQSU5fR0xPQkFMOworCisJaWYg KCFkcm1fbW1fbm9kZV9hbGxvY2F0ZWQoJnZtYS0+bm9kZSkpIHsKKwkJLyogV2EzMmJpdEdlbmVy YWxTdGF0ZU9mZnNldCAmIFdhMzJiaXRJbnN0cnVjdGlvbkJhc2VPZmZzZXQsCisJCSAqIGxpbWl0 IGFkZHJlc3MgdG8gdGhlIGZpcnN0IDRHQnMgZm9yIHVuZmxhZ2dlZCBvYmplY3RzLgorCQkgKi8K KwkJaWYgKChlbnRyeS0+ZmxhZ3MgJiBFWEVDX09CSkVDVF9TVVBQT1JUU180OEJfQUREUkVTUykg PT0gMCkKKwkJCWZsYWdzIHw9IFBJTl9aT05FXzRHOworCisJCWlmIChlbnRyeS0+ZmxhZ3MgJiBf X0VYRUNfT0JKRUNUX05FRURTX01BUCkKKwkJCWZsYWdzIHw9IFBJTl9NQVBQQUJMRTsKKworCQlp ZiAoZW50cnktPmZsYWdzICYgRVhFQ19PQkpFQ1RfUElOTkVEKSB7CisJCQlmbGFncyB8PSBlbnRy eS0+b2Zmc2V0IHwgUElOX09GRlNFVF9GSVhFRDsKKwkJCS8qIGZvcmNlIG92ZXJsYXBwaW5nIFBJ Tk5FRCBjaGVja3MgKi8KKwkJCWZsYWdzICY9IH5QSU5fTk9OQkxPQ0s7CisJCX0gZWxzZSBpZiAo ZW50cnktPmZsYWdzICYgX19FWEVDX09CSkVDVF9ORUVEU19CSUFTKQorCQkJZmxhZ3MgfD0gQkFU Q0hfT0ZGU0VUX0JJQVMgfCBQSU5fT0ZGU0VUX0JJQVM7CiAJfQotCWxpc3RfYWRkX3RhaWwoJnZt YS0+ZXhlY19saW5rLCAmZWItPnZtYXMpOwogCi0Jdm1hLT5leGVjX2VudHJ5ID0gJmViLT5leGVj W2ldOwotCWlmIChlYi0+bHV0X21hc2sgPj0gMCkgewotCQl2bWEtPmV4ZWNfaGFuZGxlID0gZWIt PmV4ZWNbaV0uaGFuZGxlOwotCQlobGlzdF9hZGRfaGVhZCgmdm1hLT5leGVjX25vZGUsCi0JCQkg ICAgICAgJmViLT5idWNrZXRzW2hhc2hfMzIodm1hLT5leGVjX2hhbmRsZSwKLQkJCQkJCSAgICBl Yi0+bHV0X21hc2spXSk7CisJcmV0ID0gaTkxNV92bWFfcGluKHZtYSwgZW50cnktPnBhZF90b19z aXplLCBlbnRyeS0+YWxpZ25tZW50LCBmbGFncyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCWlmIChlbnRyeS0+b2Zmc2V0ICE9IHZtYS0+bm9kZS5zdGFydCkgeworCQllbnRyeS0+b2Zm c2V0ID0gdm1hLT5ub2RlLnN0YXJ0IHwgVVBEQVRFOworCQllYi0+YXJncy0+ZmxhZ3MgfD0gX19F WEVDX0hBU19SRUxPQzsKIAl9CisJZW50cnktPmZsYWdzIHw9IF9fRVhFQ19PQkpFQ1RfSEFTX1BJ TjsKIAotCWk5MTVfdm1hX2dldCh2bWEpOwotCWViLT5leGVjW2ldLnJzdmQyID0gKHVpbnRwdHJf dCl2bWE7Ci0JcmV0dXJuIHRydWU7CisJaWYgKGVudHJ5LT5mbGFncyAmIEVYRUNfT0JKRUNUX05F RURTX0ZFTkNFKSB7CisJCXJldCA9IGk5MTVfdm1hX2dldF9mZW5jZSh2bWEpOworCQlpZiAocmV0 KQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAoaTkxNV92bWFfcGluX2ZlbmNlKHZtYSkpCisJCQll bnRyeS0+ZmxhZ3MgfD0gX19FWEVDX09CSkVDVF9IQVNfRkVOQ0U7CisJfQorCisJR0VNX0JVR19P TihlYl92bWFfbWlzcGxhY2VkKGVudHJ5LCB2bWEpKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGlj IGlubGluZSBzdHJ1Y3QgaGxpc3RfaGVhZCAqaHRfaGVhZChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4 dCAqY3R4LAotCQkJCQkgdTMyIGhhbmRsZSkKK3N0YXRpYyBpbnQgZWJfcmVzZXJ2ZShzdHJ1Y3Qg aTkxNV9leGVjYnVmZmVyICplYikKK3sKKwljb25zdCB1bnNpZ25lZCBpbnQgY291bnQgPSBlYi0+ YnVmZmVyX2NvdW50OworCXN0cnVjdCBsaXN0X2hlYWQgbGFzdDsKKwlzdHJ1Y3QgaTkxNV92bWEg KnZtYTsKKwl1bnNpZ25lZCBpbnQgaSwgcGFzczsKKwlpbnQgcmV0OworCisJLyogQXR0ZW1wdCB0 byBwaW4gYWxsIG9mIHRoZSBidWZmZXJzIGludG8gdGhlIEdUVC4KKwkgKiBUaGlzIGlzIGRvbmUg aW4gMyBwaGFzZXM6CisJICoKKwkgKiAxYS4gVW5iaW5kIGFsbCBvYmplY3RzIHRoYXQgZG8gbm90 IG1hdGNoIHRoZSBHVFQgY29uc3RyYWludHMgZm9yCisJICogICAgIHRoZSBleGVjYnVmZmVyIChm ZW5jZWFibGUsIG1hcHBhYmxlLCBhbGlnbm1lbnQgZXRjKS4KKwkgKiAxYi4gSW5jcmVtZW50IHBp biBjb3VudCBmb3IgYWxyZWFkeSBib3VuZCBvYmplY3RzLgorCSAqIDIuICBCaW5kIG5ldyBvYmpl Y3RzLgorCSAqIDMuICBEZWNyZW1lbnQgcGluIGNvdW50LgorCSAqCisJICogVGhpcyBhdm9pZCB1 bm5lY2Vzc2FyeSB1bmJpbmRpbmcgb2YgbGF0ZXIgb2JqZWN0cyBpbiBvcmRlciB0byBtYWtlCisJ ICogcm9vbSBmb3IgdGhlIGVhcmxpZXIgb2JqZWN0cyAqdW5sZXNzKiB3ZSBuZWVkIHRvIGRlZnJh Z21lbnQuCisJICovCisKKwlwYXNzID0gMDsKKwlyZXQgPSAwOworCWRvIHsKKwkJbGlzdF9mb3Jf ZWFjaF9lbnRyeSh2bWEsICZlYi0+dW5ib3VuZCwgZXhlY19saW5rKSB7CisJCQlyZXQgPSBlYl9y ZXNlcnZlX3ZtYShlYiwgdm1hKTsKKwkJCWlmIChyZXQpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYg KHJldCAhPSAtRU5PU1BDIHx8IHBhc3MrKykKKwkJCXJldHVybiByZXQ7CisKKwkJLyogUmVzb3J0 ICphbGwqIHRoZSBvYmplY3RzIGludG8gcHJpb3JpdHkgb3JkZXIgKi8KKwkJSU5JVF9MSVNUX0hF QUQoJmViLT51bmJvdW5kKTsKKwkJSU5JVF9MSVNUX0hFQUQoJmxhc3QpOworCQlmb3IgKGkgPSAw OyBpIDwgY291bnQ7IGkrKykgeworCQkJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIg KmVudHJ5ID0gJmViLT5leGVjW2ldOworCisJCQl2bWEgPSB0b19wdHIoc3RydWN0IGk5MTVfdm1h LCBlbnRyeS0+cnN2ZDIpOworCQkJZWJfdW5yZXNlcnZlX3ZtYSh2bWEsIGVudHJ5KTsKKworCQkJ aWYgKGVudHJ5LT5mbGFncyAmIEVYRUNfT0JKRUNUX1BJTk5FRCkKKwkJCQlsaXN0X2FkZCgmdm1h LT5leGVjX2xpbmssICZlYi0+dW5ib3VuZCk7CisJCQllbHNlIGlmIChlbnRyeS0+ZmxhZ3MgJiBf X0VYRUNfT0JKRUNUX05FRURTX01BUCkKKwkJCQlsaXN0X2FkZF90YWlsKCZ2bWEtPmV4ZWNfbGlu aywgJmViLT51bmJvdW5kKTsKKwkJCWVsc2UKKwkJCQlsaXN0X2FkZF90YWlsKCZ2bWEtPmV4ZWNf bGluaywgJmxhc3QpOworCQl9CisJCWxpc3Rfc3BsaWNlX3RhaWwoJmxhc3QsICZlYi0+dW5ib3Vu ZCk7CisKKwkJLyogVG9vIGZyYWdtZW50ZWQsIHVuYmluZCBldmVyeXRoaW5nIGFuZCByZXRyeSAq LworCQlyZXQgPSBpOTE1X2dlbV9ldmljdF92bShlYi0+dm0pOworCQlpZiAocmV0KQorCQkJcmV0 dXJuIHJldDsKKwl9IHdoaWxlICgxKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaGxpc3Rf aGVhZCAqCitodF9oZWFkKGNvbnN0IHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsIHUzMiBo YW5kbGUpCiB7CiAJcmV0dXJuICZjdHgtPnZtYS5odFtoYXNoXzMyKGhhbmRsZSwgY3R4LT52bWEu aHRfYml0cyldOwogfQogCitzdGF0aWMgaW50IGViX2JhdGNoX2luZGV4KGNvbnN0IHN0cnVjdCBp OTE1X2V4ZWNidWZmZXIgKmViKQoreworCXJldHVybiBlYi0+YnVmZmVyX2NvdW50IC0gMTsKK30K Kworc3RhdGljIGludCBlYl9zZWxlY3RfY29udGV4dChzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICpl YikKK3sKKwlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4OworCisJY3R4ID0gaTkxNV9nZW1f Y29udGV4dF9sb29rdXAoZWItPmZpbGUtPmRyaXZlcl9wcml2LCBlYi0+YXJncy0+cnN2ZDEpOwor CWlmICh1bmxpa2VseShJU19FUlIoY3R4KSkpCisJCXJldHVybiBQVFJfRVJSKGN0eCk7CisKKwlp ZiAodW5saWtlbHkoaTkxNV9nZW1fY29udGV4dF9pc19iYW5uZWQoY3R4KSkpIHsKKwkJRFJNX0RF QlVHKCJDb250ZXh0ICV1IHRyaWVkIHRvIHN1Ym1pdCB3aGlsZSBiYW5uZWRcbiIsCisJCQkgIGN0 eC0+dXNlcl9oYW5kbGUpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwllYi0+Y3R4ID0gaTkxNV9n ZW1fY29udGV4dF9nZXQoY3R4KTsKKwllYi0+dm0gPSBjdHgtPnBwZ3R0ID8gJmN0eC0+cHBndHQt PmJhc2UgOiAmZWItPmk5MTUtPmdndHQuYmFzZTsKKworCWViLT5jb250ZXh0X2ZsYWdzID0gMDsK KwlpZiAoY3R4LT5mbGFncyAmIENPTlRFWFRfTk9fWkVST01BUCkKKwkJZWItPmNvbnRleHRfZmxh Z3MgfD0gX19FWEVDX09CSkVDVF9ORUVEU19CSUFTOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRp YyBpbnQKIGViX2xvb2t1cF92bWFzKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQogewotCWNv bnN0IGludCBjb3VudCA9IGViLT5hcmdzLT5idWZmZXJfY291bnQ7CisJY29uc3QgaW50IGNvdW50 ID0gZWItPmJ1ZmZlcl9jb3VudDsKIAlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKKwlzdHJ1Y3QgaWRy ICppZHI7CiAJaW50IHNsb3dfcGFzcyA9IC0xOwotCWludCBpOworCWludCBpLCByZXQ7CiAKLQlJ TklUX0xJU1RfSEVBRCgmZWItPnZtYXMpOworCUlOSVRfTElTVF9IRUFEKCZlYi0+cmVsb2NzKTsK KwlJTklUX0xJU1RfSEVBRCgmZWItPnVuYm91bmQpOwogCiAJaWYgKHVubGlrZWx5KGViLT5jdHgt PnZtYS5odF9zaXplICYgMSkpCiAJCWZsdXNoX3dvcmsoJmViLT5jdHgtPnZtYS5yZXNpemUpOwpA QCAtMTk1LDggKzYwNSw5IEBAIGViX2xvb2t1cF92bWFzKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIg KmViKQogCQkJaWYgKHZtYS0+Y3R4X2hhbmRsZSAhPSBlYi0+ZXhlY1tpXS5oYW5kbGUpCiAJCQkJ Y29udGludWU7CiAKLQkJCWlmICghZWJfYWRkX3ZtYShlYiwgdm1hLCBpKSkKLQkJCQlyZXR1cm4g LUVJTlZBTDsKKwkJCXJldCA9IGViX2FkZF92bWEoZWIsICZlYi0+ZXhlY1tpXSwgdm1hKTsKKwkJ CWlmICh1bmxpa2VseShyZXQpKQorCQkJCXJldHVybiByZXQ7CiAKIAkJCWdvdG8gbmV4dF92bWE7 CiAJCX0KQEAgLTIwNywyNCArNjE4LDI1IEBAIG5leHRfdm1hOiA7CiAJfQogCiAJaWYgKHNsb3df cGFzcyA8IDApCi0JCXJldHVybiAwOworCQlnb3RvIG91dDsKIAogCXNwaW5fbG9jaygmZWItPmZp bGUtPnRhYmxlX2xvY2spOwogCS8qIEdyYWIgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBhbmQg cmVsZWFzZSB0aGUgbG9jayBzbyB3ZSBjYW4gbG9va3VwCiAJICogb3IgY3JlYXRlIHRoZSBWTUEg d2l0aG91dCB1c2luZyBHRlBfQVRPTUlDICovCisJaWRyID0gJmViLT5maWxlLT5vYmplY3RfaWRy OwogCWZvciAoaSA9IHNsb3dfcGFzczsgaSA8IGNvdW50OyBpKyspIHsKIAkJc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iajsKIAogCQlpZiAoZWItPmV4ZWNbaV0ucnN2ZDIpCiAJCQljb250 aW51ZTsKIAotCQlvYmogPSB0b19pbnRlbF9ibyhpZHJfZmluZCgmZWItPmZpbGUtPm9iamVjdF9p ZHIsCi0JCQkJCSAgIGViLT5leGVjW2ldLmhhbmRsZSkpOworCQlvYmogPSB0b19pbnRlbF9ibyhp ZHJfZmluZChpZHIsIGViLT5leGVjW2ldLmhhbmRsZSkpOwogCQlpZiAodW5saWtlbHkoIW9iaikp IHsKIAkJCXNwaW5fdW5sb2NrKCZlYi0+ZmlsZS0+dGFibGVfbG9jayk7CiAJCQlEUk1fREVCVUco IkludmFsaWQgb2JqZWN0IGhhbmRsZSAlZCBhdCBpbmRleCAlZFxuIiwKIAkJCQkgIGViLT5leGVj W2ldLmhhbmRsZSwgaSk7Ci0JCQlyZXR1cm4gLUVOT0VOVDsKKwkJCXJldCA9IC1FTk9FTlQ7CisJ CQlnb3RvIGVycjsKIAkJfQogCiAJCWViLT5leGVjW2ldLnJzdmQyID0gMSB8ICh1aW50cHRyX3Qp b2JqOwpAQCAtMjQ1LDExICs2NTcsMTIgQEAgbmV4dF92bWE6IDsKIAkJICogZnJvbSB0aGUgKG9i aiwgdm0pIHdlIGRvbid0IHJ1biB0aGUgcmlzayBvZiBjcmVhdGluZwogCQkgKiBkdXBsaWNhdGVk IHZtYXMgZm9yIHRoZSBzYW1lIHZtLgogCQkgKi8KLQkJb2JqID0gdG9fcHRyKHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0LCBlYi0+ZXhlY1tpXS5yc3ZkMiAmIH4xKTsKKwkJb2JqID0gdG9fcHRy KHR5cGVvZigqb2JqKSwgZWItPmV4ZWNbaV0ucnN2ZDIgJiB+MSk7CiAJCXZtYSA9IGk5MTVfdm1h X2luc3RhbmNlKG9iaiwgZWItPnZtLCBOVUxMKTsKIAkJaWYgKHVubGlrZWx5KElTX0VSUih2bWEp KSkgewogCQkJRFJNX0RFQlVHKCJGYWlsZWQgdG8gbG9va3VwIFZNQVxuIik7Ci0JCQlyZXR1cm4g UFRSX0VSUih2bWEpOworCQkJcmV0ID0gUFRSX0VSUih2bWEpOworCQkJZ290byBlcnI7CiAJCX0K IAogCQkvKiBGaXJzdCBjb21lLCBmaXJzdCBzZXJ2ZWQgKi8KQEAgLTI2NSw4ICs2NzgsOSBAQCBu ZXh0X3ZtYTogOwogCQkJfQogCQl9CiAKLQkJaWYgKCFlYl9hZGRfdm1hKGViLCB2bWEsIGkpKQot CQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IGViX2FkZF92bWEoZWIsICZlYi0+ZXhlY1tpXSwg dm1hKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpCisJCQlnb3RvIGVycjsKIAl9CiAJaWYgKDQqZWIt PmN0eC0+dm1hLmh0X2NvdW50ID4gMyplYi0+Y3R4LT52bWEuaHRfc2l6ZSB8fAogCSAgICA0KmVi LT5jdHgtPnZtYS5odF9jb3VudCA8IGViLT5jdHgtPnZtYS5odF9zaXplKSB7CkBAIC0yNzQsMTUg KzY4OCwxMCBAQCBuZXh0X3ZtYTogOwogCQlxdWV1ZV93b3JrKHN5c3RlbV9oaWdocHJpX3dxLCAm ZWItPmN0eC0+dm1hLnJlc2l6ZSk7CiAJfQogCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1 Y3QgaTkxNV92bWEgKgotZWJfZ2V0X2JhdGNoKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQot ewotCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwotCi0Jdm1hID0gdG9fcHRyKHN0cnVjdCBpOTE1X3Zt YSwgZWItPmV4ZWNbZWItPmFyZ3MtPmJ1ZmZlcl9jb3VudC0xXS5yc3ZkMik7CitvdXQ6CisJLyog dGFrZSBub3RlIG9mIHRoZSBiYXRjaCBidWZmZXIgYmVmb3JlIHdlIG1pZ2h0IHJlb3JkZXIgdGhl IGxpc3RzICovCisJaSA9IGViX2JhdGNoX2luZGV4KGViKTsKKwllYi0+YmF0Y2ggPSB0b19wdHIo c3RydWN0IGk5MTVfdm1hLCBlYi0+ZXhlY1tpXS5yc3ZkMik7CiAKIAkvKgogCSAqIFNOQSBpcyBk b2luZyBmYW5jeSB0cmlja3Mgd2l0aCBjb21wcmVzc2luZyBiYXRjaCBidWZmZXJzLCB3aGljaCBs ZWFkcwpAQCAtMjkzLDI0ICs3MDIsMzQgQEAgZWJfZ2V0X2JhdGNoKHN0cnVjdCBpOTE1X2V4ZWNi dWZmZXIgKmViKQogCSAqIE5vdGUgdGhhdCBhY3R1YWwgaGFuZ3MgaGF2ZSBvbmx5IGJlZW4gb2Jz ZXJ2ZWQgb24gZ2VuNywgYnV0IGZvcgogCSAqIHBhcmFub2lhIGRvIGl0IGV2ZXJ5d2hlcmUuCiAJ ICovCi0JaWYgKCh2bWEtPmV4ZWNfZW50cnktPmZsYWdzICYgRVhFQ19PQkpFQ1RfUElOTkVEKSA9 PSAwKQotCQl2bWEtPmV4ZWNfZW50cnktPmZsYWdzIHw9IF9fRVhFQ19PQkpFQ1RfTkVFRFNfQklB UzsKKwlpZiAoKGViLT5leGVjW2ldLmZsYWdzICYgRVhFQ19PQkpFQ1RfUElOTkVEKSA9PSAwKQor CQllYi0+ZXhlY1tpXS5mbGFncyB8PSBfX0VYRUNfT0JKRUNUX05FRURTX0JJQVM7CisJaWYgKGVi LT5yZWxvY19jYWNoZS5oYXNfZmVuY2UpCisJCWViLT5leGVjW2ldLmZsYWdzIHw9IEVYRUNfT0JK RUNUX05FRURTX0ZFTkNFOwogCi0JcmV0dXJuIHZtYTsKKwllYi0+YXJncy0+ZmxhZ3MgfD0gX19F WEVDX1ZBTElEQVRFRDsKKwlyZXR1cm4gZWJfcmVzZXJ2ZShlYik7CisKK2VycjoKKwlmb3IgKGkg PSBzbG93X3Bhc3M7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmIChlYi0+ZXhlY1tpXS5yc3ZkMiAm IDEpCisJCQllYi0+ZXhlY1tpXS5yc3ZkMiA9IDA7CisJfQorCXJldHVybiByZXQ7CiB9CiAKIHN0 YXRpYyBzdHJ1Y3QgaTkxNV92bWEgKgotZWJfZ2V0X3ZtYShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVy ICplYiwgdW5zaWduZWQgbG9uZyBoYW5kbGUpCitlYl9nZXRfdm1hKGNvbnN0IHN0cnVjdCBpOTE1 X2V4ZWNidWZmZXIgKmViLCB1bnNpZ25lZCBsb25nIGhhbmRsZSkKIHsKLQlpZiAoZWItPmx1dF9t YXNrIDwgMCkgewotCQlpZiAoaGFuZGxlID49IC1lYi0+bHV0X21hc2spCisJaWYgKGViLT5sdXRf c2l6ZSA8IDApIHsKKwkJaWYgKGhhbmRsZSA+PSAtZWItPmx1dF9zaXplKQogCQkJcmV0dXJuIE5V TEw7CiAJCXJldHVybiB0b19wdHIoc3RydWN0IGk5MTVfdm1hLCBlYi0+ZXhlY1toYW5kbGVdLnJz dmQyKTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKIAkJc3RydWN0IGk5 MTVfdm1hICp2bWE7CiAKLQkJaGVhZCA9ICZlYi0+YnVja2V0c1toYXNoXzMyKGhhbmRsZSwgZWIt Pmx1dF9tYXNrKV07CisJCWhlYWQgPSAmZWItPmJ1Y2tldHNbaGFzaF8zMihoYW5kbGUsIGViLT5s dXRfc2l6ZSldOwogCQlobGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsIGhlYWQsIGV4ZWNfbm9kZSkg ewogCQkJaWYgKHZtYS0+ZXhlY19oYW5kbGUgPT0gaGFuZGxlKQogCQkJCXJldHVybiB2bWE7CkBA IC0zMTksNjEgKzczOCw2MCBAQCBlYl9nZXRfdm1hKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmVi LCB1bnNpZ25lZCBsb25nIGhhbmRsZSkKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGViX2Rlc3Ryb3ko c3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCitzdGF0aWMgdm9pZAorZWJfcmVzZXQoY29uc3Qg c3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCiB7Ci0Jc3RydWN0IGk5MTVfdm1hICp2bWE7CisJ Y29uc3QgdW5zaWduZWQgaW50IGNvdW50ID0gZWItPmJ1ZmZlcl9jb3VudDsKKwl1bnNpZ25lZCBp bnQgaTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmZWItPnZtYXMsIGV4ZWNfbGluaykg ewotCQlpZiAoIXZtYS0+ZXhlY19lbnRyeSkKLQkJCWNvbnRpbnVlOworCWZvciAoaSA9IDA7IGkg PCBjb3VudDsgaSsrKSB7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICplbnRy eSA9ICZlYi0+ZXhlY1tpXTsKKwkJc3RydWN0IGk5MTVfdm1hICp2bWEgPSB0b19wdHIoc3RydWN0 IGk5MTVfdm1hLCBlbnRyeS0+cnN2ZDIpOwogCi0JCV9fZWJfdW5yZXNlcnZlX3ZtYSh2bWEsIHZt YS0+ZXhlY19lbnRyeSk7CisJCWViX3VucmVzZXJ2ZV92bWEodm1hLCBlbnRyeSk7CiAJCXZtYS0+ ZXhlY19lbnRyeSA9IE5VTEw7CiAJCWk5MTVfdm1hX3B1dCh2bWEpOwogCX0KIAotCWk5MTVfZ2Vt X2NvbnRleHRfcHV0KGViLT5jdHgpOwotCi0JaWYgKGViLT5sdXRfbWFzayA+PSAwKQotCQlrZnJl ZShlYi0+YnVja2V0cyk7CisJaWYgKGViLT5sdXRfc2l6ZSA+PSAwKQorCQltZW1zZXQoZWItPmJ1 Y2tldHMsIDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpIDw8IGViLT5sdXRf c2l6ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHVzZV9jcHVfcmVsb2Moc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaikKK3N0YXRpYyB2b2lkIGViX3JlbGVhc2Vfdm1hKGNvbnN0IHN0 cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQogewotCWlmICghaTkxNV9nZW1fb2JqZWN0X2hhc19z dHJ1Y3RfcGFnZShvYmopKQotCQlyZXR1cm4gZmFsc2U7CisJY29uc3QgdW5zaWduZWQgaW50IGNv dW50ID0gZWItPmJ1ZmZlcl9jb3VudDsKKwl1bnNpZ25lZCBpbnQgaTsKIAotCWlmIChEQkdfVVNF X0NQVV9SRUxPQykKLQkJcmV0dXJuIERCR19VU0VfQ1BVX1JFTE9DID4gMDsKKwlpZiAoIWViLT5l eGVjKQorCQlyZXR1cm47CiAKLQlyZXR1cm4gKEhBU19MTEModG9faTkxNShvYmotPmJhc2UuZGV2 KSkgfHwKLQkJb2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9PSBJOTE1X0dFTV9ET01BSU5fQ1BVIHx8 Ci0JCW9iai0+Y2FjaGVfbGV2ZWwgIT0gSTkxNV9DQUNIRV9OT05FKTsKLX0KKwlmb3IgKGkgPSAw OyBpIDwgY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAq ZW50cnkgPSAmZWItPmV4ZWNbaV07CisJCXN0cnVjdCBpOTE1X3ZtYSAqdm1hID0gdG9fcHRyKHN0 cnVjdCBpOTE1X3ZtYSwgZW50cnktPnJzdmQyKTsKIAotLyogVXNlZCB0byBjb252ZXJ0IGFueSBh ZGRyZXNzIHRvIGNhbm9uaWNhbCBmb3JtLgotICogU3RhcnRpbmcgZnJvbSBnZW44LCBzb21lIGNv bW1hbmRzIChlLmcuIFNUQVRFX0JBU0VfQUREUkVTUywKLSAqIE1JX0xPQURfUkVHSVNURVJfTUVN IGFuZCBvdGhlcnMsIHNlZSBCcm9hZHdlbGwgUFJNIFZvbDJhKSByZXF1aXJlIHRoZQotICogYWRk cmVzc2VzIHRvIGJlIGluIGEgY2Fub25pY2FsIGZvcm06Ci0gKiAiR3JhcGhpY3NBZGRyZXNzWzYz OjQ4XSBhcmUgaWdub3JlZCBieSB0aGUgSFcgYW5kIGFzc3VtZWQgdG8gYmUgaW4gY29ycmVjdAot ICogY2Fub25pY2FsIGZvcm0gWzYzOjQ4XSA9PSBbNDddLiIKLSAqLwotI2RlZmluZSBHRU44X0hJ R0hfQUREUkVTU19CSVQgNDcKLXN0YXRpYyBpbmxpbmUgdWludDY0X3QgZ2VuOF9jYW5vbmljYWxf YWRkcih1aW50NjRfdCBhZGRyZXNzKQotewotCXJldHVybiBzaWduX2V4dGVuZDY0KGFkZHJlc3Ms IEdFTjhfSElHSF9BRERSRVNTX0JJVCk7CisJCWlmICghdm1hIHx8ICF2bWEtPmV4ZWNfZW50cnkp CisJCQljb250aW51ZTsKKworCQlHRU1fQlVHX09OKHZtYS0+ZXhlY19lbnRyeSAhPSBlbnRyeSk7 CisJCWlmIChlbnRyeS0+ZmxhZ3MgJiBfX0VYRUNfT0JKRUNUX0hBU19QSU4pCisJCQlfX2ViX3Vu cmVzZXJ2ZV92bWEodm1hLCBlbnRyeSk7CisJCXZtYS0+ZXhlY19lbnRyeSA9IE5VTEw7CisJCWk5 MTVfdm1hX3B1dCh2bWEpOworCX0KIH0KIAotc3RhdGljIGlubGluZSB1aW50NjRfdCBnZW44X25v bmNhbm9uaWNhbF9hZGRyKHVpbnQ2NF90IGFkZHJlc3MpCitzdGF0aWMgdm9pZCBlYl9kZXN0cm95 KGNvbnN0IHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQogewotCXJldHVybiBhZGRyZXNzICYg KCgxVUxMIDw8IChHRU44X0hJR0hfQUREUkVTU19CSVQgKyAxKSkgLSAxKTsKKwlpZiAoZWItPmx1 dF9zaXplID49IDApCisJCWtmcmVlKGViLT5idWNrZXRzKTsKIH0KIAotc3RhdGljIGlubGluZSB1 aW50NjRfdAorc3RhdGljIGlubGluZSB1NjQKIHJlbG9jYXRpb25fdGFyZ2V0KGNvbnN0IHN0cnVj dCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVsb2MsCi0JCSAgdWludDY0X3QgdGFy Z2V0X29mZnNldCkKKwkJICBjb25zdCBzdHJ1Y3QgaTkxNV92bWEgKnRhcmdldCkKIHsKLQlyZXR1 cm4gZ2VuOF9jYW5vbmljYWxfYWRkcigoaW50KXJlbG9jLT5kZWx0YSArIHRhcmdldF9vZmZzZXQp OworCXJldHVybiBnZW44X2Nhbm9uaWNhbF9hZGRyKChpbnQpcmVsb2MtPmRlbHRhICsgdGFyZ2V0 LT5ub2RlLnN0YXJ0KTsKIH0KIAogc3RhdGljIHZvaWQgcmVsb2NfY2FjaGVfaW5pdChzdHJ1Y3Qg cmVsb2NfY2FjaGUgKmNhY2hlLApAQCAtMzgyLDYgKzgwMCw4IEBAIHN0YXRpYyB2b2lkIHJlbG9j X2NhY2hlX2luaXQoc3RydWN0IHJlbG9jX2NhY2hlICpjYWNoZSwKIAljYWNoZS0+cGFnZSA9IC0x OwogCWNhY2hlLT52YWRkciA9IDA7CiAJLyogTXVzdCBiZSBhIHZhcmlhYmxlIGluIHRoZSBzdHJ1 Y3QgdG8gYWxsb3cgR0NDIHRvIHVucm9sbC4gKi8KKwljYWNoZS0+aGFzX2xsYyA9IEhBU19MTEMo aTkxNSk7CisJY2FjaGUtPmhhc19mZW5jZSA9IElOVEVMX0dFTihpOTE1KSA8IDQ7CiAJY2FjaGUt PnVzZV82NGJpdF9yZWxvYyA9IEhBU182NEJJVF9SRUxPQyhpOTE1KTsKIAljYWNoZS0+bm9kZS5h bGxvY2F0ZWQgPSBmYWxzZTsKIH0KQEAgLTQ4NCw3ICs5MDQsNyBAQCBzdGF0aWMgdm9pZCAqcmVs b2NfaW9tYXAoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJc3RydWN0IGk5MTVf dm1hICp2bWE7CiAJCWludCByZXQ7CiAKLQkJaWYgKHVzZV9jcHVfcmVsb2Mob2JqKSkKKwkJaWYg KHVzZV9jcHVfcmVsb2MoY2FjaGUsIG9iaikpCiAJCQlyZXR1cm4gTlVMTDsKIAogCQlyZXQgPSBp OTE1X2dlbV9vYmplY3Rfc2V0X3RvX2d0dF9kb21haW4ob2JqLCB0cnVlKTsKQEAgLTU3MywyNSAr OTkzLDI2IEBAIHN0YXRpYyB2b2lkIGNsZmx1c2hfd3JpdGUzMih1MzIgKmFkZHIsIHUzMiB2YWx1 ZSwgdW5zaWduZWQgaW50IGZsdXNoZXMpCiAJCSphZGRyID0gdmFsdWU7CiB9CiAKLXN0YXRpYyBp bnQKLXJlbG9jYXRlX2VudHJ5KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCitzdGF0 aWMgdTY0CityZWxvY2F0ZV9lbnRyeShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKIAkgICAgICAgY29u c3Qgc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICpyZWxvYywKLQkgICAgICAg c3RydWN0IHJlbG9jX2NhY2hlICpjYWNoZSwKLQkgICAgICAgdTY0IHRhcmdldF9vZmZzZXQpCisJ ICAgICAgIHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViLAorCSAgICAgICBjb25zdCBzdHJ1Y3Qg aTkxNV92bWEgKnRhcmdldCkKIHsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0g dm1hLT5vYmo7CiAJdTY0IG9mZnNldCA9IHJlbG9jLT5vZmZzZXQ7Ci0JYm9vbCB3aWRlID0gY2Fj aGUtPnVzZV82NGJpdF9yZWxvYzsKKwl1NjQgdGFyZ2V0X29mZnNldCA9IHJlbG9jYXRpb25fdGFy Z2V0KHJlbG9jLCB0YXJnZXQpOworCWJvb2wgd2lkZSA9IGViLT5yZWxvY19jYWNoZS51c2VfNjRi aXRfcmVsb2M7CiAJdm9pZCAqdmFkZHI7CiAKLQl0YXJnZXRfb2Zmc2V0ID0gcmVsb2NhdGlvbl90 YXJnZXQocmVsb2MsIHRhcmdldF9vZmZzZXQpOwogcmVwZWF0OgotCXZhZGRyID0gcmVsb2NfdmFk ZHIob2JqLCBjYWNoZSwgb2Zmc2V0ID4+IFBBR0VfU0hJRlQpOworCXZhZGRyID0gcmVsb2NfdmFk ZHIob2JqLCAmZWItPnJlbG9jX2NhY2hlLCBvZmZzZXQgPj4gUEFHRV9TSElGVCk7CiAJaWYgKElT X0VSUih2YWRkcikpCiAJCXJldHVybiBQVFJfRVJSKHZhZGRyKTsKIAogCWNsZmx1c2hfd3JpdGUz Mih2YWRkciArIG9mZnNldF9pbl9wYWdlKG9mZnNldCksCiAJCQlsb3dlcl8zMl9iaXRzKHRhcmdl dF9vZmZzZXQpLAotCQkJY2FjaGUtPnZhZGRyKTsKKwkJCWViLT5yZWxvY19jYWNoZS52YWRkcik7 CiAKIAlpZiAod2lkZSkgewogCQlvZmZzZXQgKz0gc2l6ZW9mKHUzMik7CkBAIC02MDAsMTYgKzEw MjEsMTUgQEAgcmVsb2NhdGVfZW50cnkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwK IAkJZ290byByZXBlYXQ7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGdlbjhfY2Fub25pY2Fs X2FkZHIodGFyZ2V0LT5ub2RlLnN0YXJ0KSB8IDE7CiB9CiAKLXN0YXRpYyBpbnQKLWViX3JlbG9j YXRlX2VudHJ5KHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAotCQkgIHN0cnVjdCBpOTE1X2V4ZWNidWZm ZXIgKmViLAotCQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVsb2Mp CitzdGF0aWMgdTY0CitlYl9yZWxvY2F0ZV9lbnRyeShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICpl YiwKKwkJICBzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKKwkJICBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jKQogewogCXN0cnVjdCBpOTE1X3ZtYSAqdGFyZ2V0 OwotCXU2NCB0YXJnZXRfb2Zmc2V0OwogCWludCByZXQ7CiAKIAkvKiB3ZSd2ZSBhbHJlYWR5IGhv bGQgYSByZWZlcmVuY2UgdG8gYWxsIHZhbGlkIG9iamVjdHMgKi8KQEAgLTY0MCwyNiArMTA2MCwy OCBAQCBlYl9yZWxvY2F0ZV9lbnRyeShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKIAkJcmV0dXJuIC1F SU5WQUw7CiAJfQogCi0JaWYgKHJlbG9jLT53cml0ZV9kb21haW4pCisJaWYgKHJlbG9jLT53cml0 ZV9kb21haW4pIHsKIAkJdGFyZ2V0LT5leGVjX2VudHJ5LT5mbGFncyB8PSBFWEVDX09CSkVDVF9X UklURTsKIAotCS8qIFNhbmR5YnJpZGdlIFBQR1RUIGVycmF0YTogV2UgbmVlZCBhIGdsb2JhbCBn dHQgbWFwcGluZyBmb3IgTUkgYW5kCi0JICogcGlwZV9jb250cm9sIHdyaXRlcyBiZWNhdXNlIHRo ZSBncHUgZG9lc24ndCBwcm9wZXJseSByZWRpcmVjdCB0aGVtCi0JICogdGhyb3VnaCB0aGUgcHBn dHQgZm9yIG5vbl9zZWN1cmUgYmF0Y2hidWZmZXJzLgotCSAqLwotCWlmICh1bmxpa2VseShJU19H RU42KGViLT5pOTE1KSAmJgotCQkgICAgIHJlbG9jLT53cml0ZV9kb21haW4gPT0gSTkxNV9HRU1f RE9NQUlOX0lOU1RSVUNUSU9OKSkgewotCQlyZXQgPSBpOTE1X3ZtYV9iaW5kKHRhcmdldCwgdGFy Z2V0LT5vYmotPmNhY2hlX2xldmVsLAotCQkJCSAgICBQSU5fR0xPQkFMKTsKLQkJaWYgKFdBUk5f T05DRShyZXQsICJVbmV4cGVjdGVkIGZhaWx1cmUgdG8gYmluZCB0YXJnZXQgVk1BISIpKQotCQkJ cmV0dXJuIHJldDsKKwkJLyogU2FuZHlicmlkZ2UgUFBHVFQgZXJyYXRhOiBXZSBuZWVkIGEgZ2xv YmFsIGd0dCBtYXBwaW5nCisJCSAqIGZvciBNSSBhbmQgcGlwZV9jb250cm9sIHdyaXRlcyBiZWNh dXNlIHRoZSBncHUgZG9lc24ndAorCQkgKiBwcm9wZXJseSByZWRpcmVjdCB0aGVtIHRocm91Z2gg dGhlIHBwZ3R0IGZvciBub25fc2VjdXJlCisJCSAqIGJhdGNoYnVmZmVycy4KKwkJICovCisJCWlm IChyZWxvYy0+d3JpdGVfZG9tYWluID09IEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiAmJgor CQkgICAgSVNfR0VONihlYi0+aTkxNSkpIHsKKwkJCXJldCA9IGk5MTVfdm1hX2JpbmQodGFyZ2V0 LCB0YXJnZXQtPm9iai0+Y2FjaGVfbGV2ZWwsCisJCQkJCSAgICBQSU5fR0xPQkFMKTsKKwkJCWlm IChXQVJOX09OQ0UocmV0LAorCQkJCSAgICAgICJVbmV4cGVjdGVkIGZhaWx1cmUgdG8gYmluZCB0 YXJnZXQgVk1BISIpKQorCQkJCXJldHVybiByZXQ7CisJCX0KIAl9CiAKIAkvKiBJZiB0aGUgcmVs b2NhdGlvbiBhbHJlYWR5IGhhcyB0aGUgcmlnaHQgdmFsdWUgaW4gaXQsIG5vCiAJICogbW9yZSB3 b3JrIG5lZWRzIHRvIGJlIGRvbmUuCiAJICovCi0JdGFyZ2V0X29mZnNldCA9IGdlbjhfY2Fub25p Y2FsX2FkZHIodGFyZ2V0LT5ub2RlLnN0YXJ0KTsKLQlpZiAodGFyZ2V0X29mZnNldCA9PSByZWxv Yy0+cHJlc3VtZWRfb2Zmc2V0KQorCWlmIChnZW44X2Nhbm9uaWNhbF9hZGRyKHRhcmdldC0+bm9k ZS5zdGFydCkgPT0gcmVsb2MtPnByZXN1bWVkX29mZnNldCkKIAkJcmV0dXJuIDA7CiAKIAkvKiBD aGVjayB0aGF0IHRoZSByZWxvY2F0aW9uIGFkZHJlc3MgaXMgdmFsaWQuLi4gKi8KQEAgLTY4MCwz NCArMTEwMiwzMyBAQCBlYl9yZWxvY2F0ZV9lbnRyeShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKIAkJ cmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmV0ID0gcmVsb2NhdGVfZW50cnkodm1hLT5vYmosIHJl bG9jLCAmZWItPnJlbG9jX2NhY2hlLCB0YXJnZXRfb2Zmc2V0KTsKLQlpZiAocmV0KQotCQlyZXR1 cm4gcmV0OwotCiAJLyogYW5kIHVwZGF0ZSB0aGUgdXNlcidzIHJlbG9jYXRpb24gZW50cnkgKi8K LQlyZWxvYy0+cHJlc3VtZWRfb2Zmc2V0ID0gdGFyZ2V0X29mZnNldDsKLQlyZXR1cm4gMDsKKwly ZXR1cm4gcmVsb2NhdGVfZW50cnkodm1hLCByZWxvYywgZWIsIHRhcmdldCk7CiB9CiAKLXN0YXRp YyBpbnQgZWJfcmVsb2NhdGVfdm1hKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLCBzdHJ1Y3QgaTkxNV9l eGVjYnVmZmVyICplYikKK3N0YXRpYyBpbnQgZWJfcmVsb2NhdGVfdm1hKHN0cnVjdCBpOTE1X2V4 ZWNidWZmZXIgKmViLCBzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKIHsKICNkZWZpbmUgTl9SRUxPQyh4 KSAoKHgpIC8gc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSkpCi0J c3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHN0YWNrX3JlbG9jW05fUkVMT0Mo NTEyKV07Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqdXNl cl9yZWxvY3M7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmVudHJ5ID0gdm1h LT5leGVjX2VudHJ5OwotCWludCByZW1haW4sIHJldCA9IDA7Ci0KLQl1c2VyX3JlbG9jcyA9IHU2 NF90b191c2VyX3B0cihlbnRyeS0+cmVsb2NzX3B0cik7CisJc3RydWN0IGRybV9pOTE1X2dlbV9y ZWxvY2F0aW9uX2VudHJ5IHN0YWNrW05fUkVMT0MoNTEyKV07CisJc3RydWN0IGRybV9pOTE1X2dl bV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqdXJlbG9jczsKKwljb25zdCBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZW50cnkgPSB2bWEtPmV4ZWNfZW50cnk7CisJdW5zaWduZWQg aW50IHJlbWFpbjsKIAorCXVyZWxvY3MgPSB1NjRfdG9fdXNlcl9wdHIoZW50cnktPnJlbG9jc19w dHIpOwogCXJlbWFpbiA9IGVudHJ5LT5yZWxvY2F0aW9uX2NvdW50OwotCXdoaWxlIChyZW1haW4p IHsKLQkJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICpyID0gc3RhY2tfcmVs b2M7Ci0JCXVuc2lnbmVkIGxvbmcgdW53cml0dGVuOwotCQl1bnNpZ25lZCBpbnQgY291bnQ7CisJ aWYgKHVubGlrZWx5KHJlbWFpbiA+IFVMT05HX01BWCAvIHNpemVvZigqdXJlbG9jcykpKQorCQly ZXR1cm4gLUVJTlZBTDsKIAotCQljb3VudCA9IG1pbl90KHVuc2lnbmVkIGludCwgcmVtYWluLCBB UlJBWV9TSVpFKHN0YWNrX3JlbG9jKSk7Ci0JCXJlbWFpbiAtPSBjb3VudDsKKwkvKgorCSAqIFdl IG11c3QgY2hlY2sgdGhhdCB0aGUgZW50aXJlIHJlbG9jYXRpb24gYXJyYXkgaXMgc2FmZQorCSAq IHRvIHJlYWQuIEhvd2V2ZXIsIGlmIHRoZSBhcnJheSBpcyBub3Qgd3JpdGFibGUgdGhlIHVzZXIg bG9zZXMKKwkgKiB0aGUgdXBkYXRlZCByZWxvY2F0aW9uIHZhbHVlcy4KKwkgKi8KIAorCWRvIHsK KwkJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICpyID0gc3RhY2s7CisJCXVu c2lnbmVkIGludCBjb3VudCA9CisJCQltaW5fdCh1bnNpZ25lZCBpbnQsIHJlbWFpbiwgQVJSQVlf U0laRShzdGFjaykpOwogCQkvKiBUaGlzIGlzIHRoZSBmYXN0IHBhdGggYW5kIHdlIGNhbm5vdCBo YW5kbGUgYSBwYWdlZmF1bHQKIAkJICogd2hpbHN0IGhvbGRpbmcgdGhlIHN0cnVjdCBtdXRleCBs ZXN0IHRoZSB1c2VyIHBhc3MgaW4gdGhlCiAJCSAqIHJlbG9jYXRpb25zIGNvbnRhaW5lZCB3aXRo aW4gYSBtbWFwZWQgYm8uIEZvciBpbiBzdWNoIGEgY2FzZQpAQCAtNzE2LDY2ICsxMTM3LDY2IEBA IHN0YXRpYyBpbnQgZWJfcmVsb2NhdGVfdm1hKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLCBzdHJ1Y3Qg aTkxNV9leGVjYnVmZmVyICplYikKIAkJICogdGhpcyBpcyBiYWQgYW5kIHNvIGxvY2tkZXAgY29t cGxhaW5zIHZlaGVtZW50bHkuCiAJCSAqLwogCQlwYWdlZmF1bHRfZGlzYWJsZSgpOwotCQl1bndy aXR0ZW4gPSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKHIsIHVzZXJfcmVsb2NzLCBjb3VudCpz aXplb2YoclswXSkpOwotCQlwYWdlZmF1bHRfZW5hYmxlKCk7Ci0JCWlmICh1bmxpa2VseSh1bndy aXR0ZW4pKSB7Ci0JCQlyZXQgPSAtRUZBVUxUOworCQlpZiAoX19jb3B5X2Zyb21fdXNlcl9pbmF0 b21pYyhyLCB1cmVsb2NzLCBjb3VudCpzaXplb2YoclswXSkpKSB7CisJCQlwYWdlZmF1bHRfZW5h YmxlKCk7CisJCQlyZW1haW4gPSAtRUZBVUxUOwogCQkJZ290byBvdXQ7CiAJCX0KKwkJcGFnZWZh dWx0X2VuYWJsZSgpOwogCisJCXJlbWFpbiAtPSBjb3VudDsKIAkJZG8gewotCQkJdTY0IG9mZnNl dCA9IHItPnByZXN1bWVkX29mZnNldDsKKwkJCXU2NCBvZmZzZXQgPSBlYl9yZWxvY2F0ZV9lbnRy eShlYiwgdm1hLCByKTsKIAotCQkJcmV0ID0gZWJfcmVsb2NhdGVfZW50cnkodm1hLCBlYiwgcik7 Ci0JCQlpZiAocmV0KQorCQkJaWYgKGxpa2VseShvZmZzZXQgPT0gMCkpIHsKKwkJCX0gZWxzZSBp ZiAoKHM2NClvZmZzZXQgPCAwKSB7CisJCQkJcmVtYWluID0gKHM2NClvZmZzZXQ7CiAJCQkJZ290 byBvdXQ7Ci0KLQkJCWlmIChyLT5wcmVzdW1lZF9vZmZzZXQgIT0gb2Zmc2V0KSB7CisJCQl9IGVs c2UgeworCQkJCS8qIE5vdGUgdGhhdCByZXBvcnRpbmcgYW4gZXJyb3Igbm93CisJCQkJICogbGVh dmVzIGV2ZXJ5dGhpbmcgaW4gYW4gaW5jb25zaXN0ZW50CisJCQkJICogc3RhdGUgYXMgd2UgaGF2 ZSAqYWxyZWFkeSogY2hhbmdlZAorCQkJCSAqIHRoZSByZWxvY2F0aW9uIHZhbHVlIGluc2lkZSB0 aGUKKwkJCQkgKiBvYmplY3QuIEFzIHdlIGhhdmUgbm90IGNoYW5nZWQgdGhlCisJCQkJICogcmVs b2MucHJlc3VtZWRfb2Zmc2V0IG9yIHdpbGwgbm90CisJCQkJICogY2hhbmdlIHRoZSBleGVjb2Jq ZWN0Lm9mZnNldCwgb24gdGhlCisJCQkJICogY2FsbCB3ZSBtYXkgbm90IHJld3JpdGUgdGhlIHZh bHVlCisJCQkJICogaW5zaWRlIHRoZSBvYmplY3QsIGxlYXZpbmcgaXQKKwkJCQkgKiBkYW5nbGlu ZyBhbmQgY2F1c2luZyBhIEdQVSBoYW5nLgorCQkJCSAqLwogCQkJCXBhZ2VmYXVsdF9kaXNhYmxl KCk7Ci0JCQkJdW53cml0dGVuID0gX19wdXRfdXNlcihyLT5wcmVzdW1lZF9vZmZzZXQsCi0JCQkJ CQkgICAgICAgJnVzZXJfcmVsb2NzLT5wcmVzdW1lZF9vZmZzZXQpOworCQkJCV9fcHV0X3VzZXIo b2Zmc2V0ICYgfjEsCisJCQkJCSAgICZ1cmVsb2NzW3Itc3RhY2tdLnByZXN1bWVkX29mZnNldCk7 CiAJCQkJcGFnZWZhdWx0X2VuYWJsZSgpOwotCQkJCWlmICh1bmxpa2VseSh1bndyaXR0ZW4pKSB7 Ci0JCQkJCS8qIE5vdGUgdGhhdCByZXBvcnRpbmcgYW4gZXJyb3Igbm93Ci0JCQkJCSAqIGxlYXZl cyBldmVyeXRoaW5nIGluIGFuIGluY29uc2lzdGVudAotCQkJCQkgKiBzdGF0ZSBhcyB3ZSBoYXZl ICphbHJlYWR5KiBjaGFuZ2VkCi0JCQkJCSAqIHRoZSByZWxvY2F0aW9uIHZhbHVlIGluc2lkZSB0 aGUKLQkJCQkJICogb2JqZWN0LiBBcyB3ZSBoYXZlIG5vdCBjaGFuZ2VkIHRoZQotCQkJCQkgKiBy ZWxvYy5wcmVzdW1lZF9vZmZzZXQgb3Igd2lsbCBub3QKLQkJCQkJICogY2hhbmdlIHRoZSBleGVj b2JqZWN0Lm9mZnNldCwgb24gdGhlCi0JCQkJCSAqIGNhbGwgd2UgbWF5IG5vdCByZXdyaXRlIHRo ZSB2YWx1ZQotCQkJCQkgKiBpbnNpZGUgdGhlIG9iamVjdCwgbGVhdmluZyBpdAotCQkJCQkgKiBk YW5nbGluZyBhbmQgY2F1c2luZyBhIEdQVSBoYW5nLgotCQkJCQkgKi8KLQkJCQkJcmV0ID0gLUVG QVVMVDsKLQkJCQkJZ290byBvdXQ7Ci0JCQkJfQogCQkJfQotCi0JCQl1c2VyX3JlbG9jcysrOwot CQkJcisrOwotCQl9IHdoaWxlICgtLWNvdW50KTsKLQl9Ci0KKwkJfSB3aGlsZSAocisrLCAtLWNv dW50KTsKKwkJdXJlbG9jcyArPSBBUlJBWV9TSVpFKHN0YWNrKTsKKwl9IHdoaWxlIChyZW1haW4p Owogb3V0OgogCXJlbG9jX2NhY2hlX3Jlc2V0KCZlYi0+cmVsb2NfY2FjaGUpOwotCXJldHVybiBy ZXQ7CisJcmV0dXJuIHJlbWFpbjsKICN1bmRlZiBOX1JFTE9DCiB9CiAKIHN0YXRpYyBpbnQKLWVi X3JlbG9jYXRlX3ZtYV9zbG93KHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAotCQkgICAgIHN0cnVjdCBp OTE1X2V4ZWNidWZmZXIgKmViLAotCQkgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlv bl9lbnRyeSAqcmVsb2NzKQorZWJfcmVsb2NhdGVfdm1hX3Nsb3coc3RydWN0IGk5MTVfZXhlY2J1 ZmZlciAqZWIsIHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQogewogCWNvbnN0IHN0cnVjdCBkcm1faTkx NV9nZW1fZXhlY19vYmplY3QyICplbnRyeSA9IHZtYS0+ZXhlY19lbnRyeTsKLQlpbnQgaSwgcmV0 ID0gMDsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jcyA9CisJ CXRvX3B0cih0eXBlb2YoKnJlbG9jcyksIGVudHJ5LT5yZWxvY3NfcHRyKTsKKwl1bnNpZ25lZCBp bnQgaTsKKwlpbnQgcmV0OwogCiAJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5yZWxvY2F0aW9uX2Nv dW50OyBpKyspIHsKLQkJcmV0ID0gZWJfcmVsb2NhdGVfZW50cnkodm1hLCBlYiwgJnJlbG9jc1tp XSk7Ci0JCWlmIChyZXQpCi0JCQlicmVhazsKKwkJdTY0IG9mZnNldCA9IGViX3JlbG9jYXRlX2Vu dHJ5KGViLCB2bWEsICZyZWxvY3NbaV0pOworCisJCWlmICgoczY0KW9mZnNldCA8IDApIHsKKwkJ CXJldCA9IChzNjQpb2Zmc2V0OworCQkJZ290byBlcnI7CisJCX0KIAl9CisJcmV0ID0gMDsKK2Vy cjoKIAlyZWxvY19jYWNoZV9yZXNldCgmZWItPnJlbG9jX2NhY2hlKTsKIAlyZXR1cm4gcmV0Owog fQpAQCAtNzgzLDI5OSArMTIwNCwxODggQEAgZWJfcmVsb2NhdGVfdm1hX3Nsb3coc3RydWN0IGk5 MTVfdm1hICp2bWEsCiBzdGF0aWMgaW50IGViX3JlbG9jYXRlKHN0cnVjdCBpOTE1X2V4ZWNidWZm ZXIgKmViKQogewogCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwotCWludCByZXQgPSAwOwogCi0JbGlz dF9mb3JfZWFjaF9lbnRyeSh2bWEsICZlYi0+dm1hcywgZXhlY19saW5rKSB7Ci0JCXJldCA9IGVi X3JlbG9jYXRlX3ZtYSh2bWEsIGViKTsKKwkvKiBUaGUgb2JqZWN0cyBhcmUgaW4gdGhlaXIgZmlu YWwgbG9jYXRpb25zLCBhcHBseSB0aGUgcmVsb2NhdGlvbnMuICovCisJbGlzdF9mb3JfZWFjaF9l bnRyeSh2bWEsICZlYi0+cmVsb2NzLCByZWxvY19saW5rKSB7CisJCWludCByZXQgPSBlYl9yZWxv Y2F0ZV92bWEoZWIsIHZtYSk7CiAJCWlmIChyZXQpCi0JCQlicmVhazsKKwkJCXJldHVybiByZXQ7 CiAJfQogCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGJvb2wgb25seV9tYXBwYWJsZV9mb3Jf cmVsb2ModW5zaWduZWQgaW50IGZsYWdzKQotewotCXJldHVybiAoZmxhZ3MgJiAoRVhFQ19PQkpF Q1RfTkVFRFNfRkVOQ0UgfCBfX0VYRUNfT0JKRUNUX05FRURTX01BUCkpID09Ci0JCV9fRVhFQ19P QkpFQ1RfTkVFRFNfTUFQOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1lYl9yZXNlcnZl X3ZtYShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKLQkgICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lLAotCSAgICAgICBib29sICpuZWVkX3JlbG9jKQorc3RhdGljIGludCBjaGVja19y ZWxvY2F0aW9ucyhjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZW50cnkp CiB7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmVudHJ5ID0gdm1hLT5leGVj X2VudHJ5OwotCXVpbnQ2NF90IGZsYWdzOwotCWludCByZXQ7Ci0KLQlmbGFncyA9IFBJTl9VU0VS OwotCWlmIChlbnRyeS0+ZmxhZ3MgJiBFWEVDX09CSkVDVF9ORUVEU19HVFQpCi0JCWZsYWdzIHw9 IFBJTl9HTE9CQUw7CisJY29uc3QgdW5zaWduZWQgbG9uZyByZWxvY3NfbWF4ID0KKwkJVUxPTkdf TUFYIC8gc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSk7CisJY29u c3QgY2hhciBfX3VzZXIgKmFkZHIsICplbmQ7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWNoYXIg X19tYXliZV91bnVzZWQgYzsKKworCXNpemUgPSBlbnRyeS0+cmVsb2NhdGlvbl9jb3VudDsKKwlp ZiAoc2l6ZSA9PSAwKQorCQlyZXR1cm4gMDsKIAotCWlmICghZHJtX21tX25vZGVfYWxsb2NhdGVk KCZ2bWEtPm5vZGUpKSB7Ci0JCS8qIFdhMzJiaXRHZW5lcmFsU3RhdGVPZmZzZXQgJiBXYTMyYml0 SW5zdHJ1Y3Rpb25CYXNlT2Zmc2V0LAotCQkgKiBsaW1pdCBhZGRyZXNzIHRvIHRoZSBmaXJzdCA0 R0JzIGZvciB1bmZsYWdnZWQgb2JqZWN0cy4KLQkJICovCi0JCWlmICgoZW50cnktPmZsYWdzICYg RVhFQ19PQkpFQ1RfU1VQUE9SVFNfNDhCX0FERFJFU1MpID09IDApCi0JCQlmbGFncyB8PSBQSU5f Wk9ORV80RzsKLQkJaWYgKGVudHJ5LT5mbGFncyAmIF9fRVhFQ19PQkpFQ1RfTkVFRFNfTUFQKQot CQkJZmxhZ3MgfD0gUElOX0dMT0JBTCB8IFBJTl9NQVBQQUJMRTsKLQkJaWYgKGVudHJ5LT5mbGFn cyAmIF9fRVhFQ19PQkpFQ1RfTkVFRFNfQklBUykKLQkJCWZsYWdzIHw9IEJBVENIX09GRlNFVF9C SUFTIHwgUElOX09GRlNFVF9CSUFTOwotCQlpZiAoZW50cnktPmZsYWdzICYgRVhFQ19PQkpFQ1Rf UElOTkVEKQotCQkJZmxhZ3MgfD0gZW50cnktPm9mZnNldCB8IFBJTl9PRkZTRVRfRklYRUQ7Ci0J CWlmICgoZmxhZ3MgJiBQSU5fTUFQUEFCTEUpID09IDApCi0JCQlmbGFncyB8PSBQSU5fSElHSDsK LQl9Ci0KLQlyZXQgPSBpOTE1X3ZtYV9waW4odm1hLAotCQkJICAgZW50cnktPnBhZF90b19zaXpl LAotCQkJICAgZW50cnktPmFsaWdubWVudCwKLQkJCSAgIGZsYWdzKTsKLQlpZiAoKHJldCA9PSAt RU5PU1BDIHx8IHJldCA9PSAtRTJCSUcpICYmCi0JICAgIG9ubHlfbWFwcGFibGVfZm9yX3JlbG9j KGVudHJ5LT5mbGFncykpCi0JCXJldCA9IGk5MTVfdm1hX3Bpbih2bWEsCi0JCQkJICAgZW50cnkt PnBhZF90b19zaXplLAotCQkJCSAgIGVudHJ5LT5hbGlnbm1lbnQsCi0JCQkJICAgZmxhZ3MgJiB+ UElOX01BUFBBQkxFKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCWlmIChzaXplID4gcmVs b2NzX21heCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQllbnRyeS0+ZmxhZ3MgfD0gX19FWEVDX09C SkVDVF9IQVNfUElOOworCWFkZHIgPSB1NjRfdG9fdXNlcl9wdHIoZW50cnktPnJlbG9jc19wdHIp OworCXNpemUgKj0gc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSk7 CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBhZGRyLCBzaXplKSkKKwkJcmV0dXJuIC1F RkFVTFQ7CiAKLQlpZiAoZW50cnktPmZsYWdzICYgRVhFQ19PQkpFQ1RfTkVFRFNfRkVOQ0UpIHsK LQkJcmV0ID0gaTkxNV92bWFfZ2V0X2ZlbmNlKHZtYSk7CisJZW5kID0gYWRkciArIHNpemU7CisJ Zm9yICg7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CisJCWludCByZXQgPSBfX2dl dF91c2VyKGMsIGFkZHIpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKLQotCQlpZiAoaTkx NV92bWFfcGluX2ZlbmNlKHZtYSkpCi0JCQllbnRyeS0+ZmxhZ3MgfD0gX19FWEVDX09CSkVDVF9I QVNfRkVOQ0U7CiAJfQotCi0JaWYgKGVudHJ5LT5vZmZzZXQgIT0gdm1hLT5ub2RlLnN0YXJ0KSB7 Ci0JCWVudHJ5LT5vZmZzZXQgPSB2bWEtPm5vZGUuc3RhcnQ7Ci0JCSpuZWVkX3JlbG9jID0gdHJ1 ZTsKLQl9Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gX19nZXRfdXNlcihjLCBlbmQgLSAxKTsKIH0K IAotc3RhdGljIGJvb2wKLW5lZWRfcmVsb2NfbWFwcGFibGUoc3RydWN0IGk5MTVfdm1hICp2bWEp CitzdGF0aWMgaW50CitlYl9jb3B5X3JlbG9jYXRpb25zKGNvbnN0IHN0cnVjdCBpOTE1X2V4ZWNi dWZmZXIgKmViKQogewotCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICplbnRyeSA9 IHZtYS0+ZXhlY19lbnRyeTsKLQotCWlmIChlbnRyeS0+cmVsb2NhdGlvbl9jb3VudCA9PSAwKQot CQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoIWk5MTVfdm1hX2lzX2dndHQodm1hKSkKLQkJcmV0dXJu IGZhbHNlOworCWNvbnN0IHVuc2lnbmVkIGludCBjb3VudCA9IGViLT5idWZmZXJfY291bnQ7CisJ dW5zaWduZWQgaW50IGk7CisJaW50IHJldDsKIAotCS8qIFNlZSBhbHNvIHVzZV9jcHVfcmVsb2Mo KSAqLwotCWlmIChIQVNfTExDKHRvX2k5MTUodm1hLT5vYmotPmJhc2UuZGV2KSkpCi0JCXJldHVy biBmYWxzZTsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgX191c2VyICp1cmVsb2NzOworCQlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jczsKKwkJdW5zaWduZWQgaW50IG5yZWxvYyA9 IGViLT5leGVjW2ldLnJlbG9jYXRpb25fY291bnQsIGo7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsK IAotCWlmICh2bWEtPm9iai0+YmFzZS53cml0ZV9kb21haW4gPT0gSTkxNV9HRU1fRE9NQUlOX0NQ VSkKLQkJcmV0dXJuIGZhbHNlOworCQlpZiAobnJlbG9jID09IDApCisJCQljb250aW51ZTsKIAot CXJldHVybiB0cnVlOwotfQorCQlyZXQgPSBjaGVja19yZWxvY2F0aW9ucygmZWItPmV4ZWNbaV0p OworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CiAKLXN0YXRpYyBib29sCi1lYl92bWFfbWlzcGxh Y2VkKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQotewotCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19v YmplY3QyICplbnRyeSA9IHZtYS0+ZXhlY19lbnRyeTsKKwkJdXJlbG9jcyA9IHU2NF90b191c2Vy X3B0cihlYi0+ZXhlY1tpXS5yZWxvY3NfcHRyKTsKKwkJc2l6ZSA9IG5yZWxvYyAqIHNpemVvZigq cmVsb2NzKTsKIAotCVdBUk5fT04oZW50cnktPmZsYWdzICYgX19FWEVDX09CSkVDVF9ORUVEU19N QVAgJiYKLQkJIWk5MTVfdm1hX2lzX2dndHQodm1hKSk7CisJCXJlbG9jcyA9IGRybV9tYWxsb2Nf Z2ZwKHNpemUsIDEsIEdGUF9URU1QT1JBUlkpOworCQlpZiAoIXJlbG9jcykgeworCQkJcmV0ID0g LUVOT01FTTsKKwkJCWdvdG8gZXJyOworCQl9CiAKLQlpZiAoZW50cnktPmFsaWdubWVudCAmJiAh SVNfQUxJR05FRCh2bWEtPm5vZGUuc3RhcnQsIGVudHJ5LT5hbGlnbm1lbnQpKQotCQlyZXR1cm4g dHJ1ZTsKKwkJLyogY29weV9mcm9tX3VzZXIgaXMgbGltaXRlZCB0byA0R2lCICovCisJCWogPSAw OworCQlkbyB7CisJCQl1MzIgbGVuID0gbWluX3QodTY0LCAxdWxsPDwzMSwgc2l6ZSk7CiAKLQlp ZiAodm1hLT5ub2RlLnNpemUgPCBlbnRyeS0+cGFkX3RvX3NpemUpCi0JCXJldHVybiB0cnVlOwor CQkJaWYgKF9fY29weV9mcm9tX3VzZXIocmVsb2NzICsgaiwgdXJlbG9jcyArIGosIGxlbikpIHsK KwkJCQlyZXQgPSAtRUZBVUxUOworCQkJCWdvdG8gZXJyOworCQkJfQogCi0JaWYgKGVudHJ5LT5m bGFncyAmIEVYRUNfT0JKRUNUX1BJTk5FRCAmJgotCSAgICB2bWEtPm5vZGUuc3RhcnQgIT0gZW50 cnktPm9mZnNldCkKLQkJcmV0dXJuIHRydWU7CisJCQlzaXplIC09IGxlbjsKKwkJCUJVSUxEX0JV R19PTl9OT1RfUE9XRVJfT0ZfMihzaXplb2YoKnJlbG9jcykpOworCQkJaiArPSBsZW4gLyBzaXpl b2YoKnJlbG9jcyk7CisJCX0gd2hpbGUgKHNpemUpOwogCi0JaWYgKGVudHJ5LT5mbGFncyAmIF9f RVhFQ19PQkpFQ1RfTkVFRFNfQklBUyAmJgotCSAgICB2bWEtPm5vZGUuc3RhcnQgPCBCQVRDSF9P RkZTRVRfQklBUykKLQkJcmV0dXJuIHRydWU7CisJCS8qIEFzIHdlIGRvIG5vdCB1cGRhdGUgdGhl IGtub3duIHJlbG9jYXRpb24gb2Zmc2V0cyBhZnRlcgorCQkgKiByZWxvY2F0aW5nIChkdWUgdG8g dGhlIGNvbXBsZXhpdGllcyBpbiBsb2NrIGhhbmRsaW5nKSwKKwkJICogd2UgbmVlZCB0byBtYXJr IHRoZW0gYXMgaW52YWxpZCBub3cgc28gdGhhdCB3ZSBmb3JjZSB0aGUKKwkJICogcmVsb2NhdGlv biBwcm9jZXNzaW5nIG5leHQgdGltZS4gSnVzdCBpbiBjYXNlIHRoZSB0YXJnZXQKKwkJICogb2Jq ZWN0IGlzIGV2aWN0ZWQgYW5kIHRoZW4gcmVib3VuZCBpbnRvIGl0cyBvbGQKKwkJICogcHJlc3Vt ZWRfb2Zmc2V0IGJlZm9yZSB0aGUgbmV4dCBleGVjYnVmZmVyIC0gaWYgdGhhdAorCQkgKiBoYXBw ZW5lZCB3ZSB3b3VsZCBtYWtlIHRoZSBtaXN0YWtlIG9mIGFzc3VtaW5nIHRoYXQgdGhlCisJCSAq IHJlbG9jYXRpb25zIHdlcmUgdmFsaWQuCisJCSAqLworCQl1c2VyX2FjY2Vzc19iZWdpbigpOwor CQlmb3IgKGogPSAwOyBqIDwgbnJlbG9jOyBqKyspCisJCQl1bnNhZmVfcHV0X3VzZXIoLTEsCisJ CQkJCSZ1cmVsb2NzW2pdLnByZXN1bWVkX29mZnNldCwKKwkJCQkJZW5kX3VzZXIpOworZW5kX3Vz ZXI6CisJCXVzZXJfYWNjZXNzX2VuZCgpOwogCi0JLyogYXZvaWQgY29zdGx5IHBpbmctcG9uZyBv bmNlIGEgYmF0Y2ggYm8gZW5kZWQgdXAgbm9uLW1hcHBhYmxlICovCi0JaWYgKGVudHJ5LT5mbGFn cyAmIF9fRVhFQ19PQkpFQ1RfTkVFRFNfTUFQICYmCi0JICAgICFpOTE1X3ZtYV9pc19tYXBfYW5k X2ZlbmNlYWJsZSh2bWEpKQotCQlyZXR1cm4gIW9ubHlfbWFwcGFibGVfZm9yX3JlbG9jKGVudHJ5 LT5mbGFncyk7CisJCWViLT5leGVjW2ldLnJlbG9jc19wdHIgPSAodWludHB0cl90KXJlbG9jczsK Kwl9CiAKLQlpZiAoKGVudHJ5LT5mbGFncyAmIEVYRUNfT0JKRUNUX1NVUFBPUlRTXzQ4Ql9BRERS RVNTKSA9PSAwICYmCi0JICAgICh2bWEtPm5vZGUuc3RhcnQgKyB2bWEtPm5vZGUuc2l6ZSAtIDEp ID4+IDMyKQotCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMDsKIAotCXJldHVybiBmYWxzZTsKK2Vy cjoKKwl3aGlsZSAoaS0tKSB7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRy eSAqcmVsb2NzID0KKwkJCXRvX3B0cih0eXBlb2YoKnJlbG9jcyksIGViLT5leGVjW2ldLnJlbG9j c19wdHIpOworCQlpZiAoZWItPmV4ZWNbaV0ucmVsb2NhdGlvbl9jb3VudCkKKwkJCWRybV9mcmVl X2xhcmdlKHJlbG9jcyk7CisJfQorCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZWJfcmVz ZXJ2ZShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikKK3N0YXRpYyBpbnQgZWJfcHJlZmF1bHRf cmVsb2NhdGlvbnMoY29uc3Qgc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCiB7Ci0JY29uc3Qg Ym9vbCBoYXNfZmVuY2VkX2dwdV9hY2Nlc3MgPSBJTlRFTF9HRU4oZWItPmk5MTUpIDwgNDsKLQlz dHJ1Y3QgaTkxNV92bWEgKnZtYTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG9yZGVyZWRfdm1hczsKLQlz dHJ1Y3QgbGlzdF9oZWFkIHBpbm5lZF92bWFzOwotCWludCByZXRyeTsKLQotCUlOSVRfTElTVF9I RUFEKCZvcmRlcmVkX3ZtYXMpOwotCUlOSVRfTElTVF9IRUFEKCZwaW5uZWRfdm1hcyk7Ci0Jd2hp bGUgKCFsaXN0X2VtcHR5KCZlYi0+dm1hcykpIHsKLQkJc3RydWN0IGRybV9pOTE1X2dlbV9leGVj X29iamVjdDIgKmVudHJ5OwotCQlib29sIG5lZWRfZmVuY2UsIG5lZWRfbWFwcGFibGU7Ci0KLQkJ dm1hID0gbGlzdF9maXJzdF9lbnRyeSgmZWItPnZtYXMsIHN0cnVjdCBpOTE1X3ZtYSwgZXhlY19s aW5rKTsKLQkJZW50cnkgPSB2bWEtPmV4ZWNfZW50cnk7Ci0KLQkJaWYgKGViLT5jdHgtPmZsYWdz ICYgQ09OVEVYVF9OT19aRVJPTUFQKQotCQkJZW50cnktPmZsYWdzIHw9IF9fRVhFQ19PQkpFQ1Rf TkVFRFNfQklBUzsKLQotCQlpZiAoIWhhc19mZW5jZWRfZ3B1X2FjY2VzcykKLQkJCWVudHJ5LT5m bGFncyAmPSB+RVhFQ19PQkpFQ1RfTkVFRFNfRkVOQ0U7Ci0JCW5lZWRfZmVuY2UgPQotCQkJZW50 cnktPmZsYWdzICYgRVhFQ19PQkpFQ1RfTkVFRFNfRkVOQ0UgJiYKLQkJCWk5MTVfZ2VtX29iamVj dF9pc190aWxlZCh2bWEtPm9iaik7Ci0JCW5lZWRfbWFwcGFibGUgPSBuZWVkX2ZlbmNlIHx8IG5l ZWRfcmVsb2NfbWFwcGFibGUodm1hKTsKLQotCQlpZiAoZW50cnktPmZsYWdzICYgRVhFQ19PQkpF Q1RfUElOTkVEKQotCQkJbGlzdF9tb3ZlX3RhaWwoJnZtYS0+ZXhlY19saW5rLCAmcGlubmVkX3Zt YXMpOwotCQllbHNlIGlmIChuZWVkX21hcHBhYmxlKSB7Ci0JCQllbnRyeS0+ZmxhZ3MgfD0gX19F WEVDX09CSkVDVF9ORUVEU19NQVA7Ci0JCQlsaXN0X21vdmUoJnZtYS0+ZXhlY19saW5rLCAmb3Jk ZXJlZF92bWFzKTsKLQkJfSBlbHNlCi0JCQlsaXN0X21vdmVfdGFpbCgmdm1hLT5leGVjX2xpbmss ICZvcmRlcmVkX3ZtYXMpOwotCX0KLQlsaXN0X3NwbGljZSgmb3JkZXJlZF92bWFzLCAmZWItPnZt YXMpOwotCWxpc3Rfc3BsaWNlKCZwaW5uZWRfdm1hcywgJmViLT52bWFzKTsKKwljb25zdCB1bnNp Z25lZCBpbnQgY291bnQgPSBlYi0+YnVmZmVyX2NvdW50OworCXVuc2lnbmVkIGludCBpOwogCi0J LyogQXR0ZW1wdCB0byBwaW4gYWxsIG9mIHRoZSBidWZmZXJzIGludG8gdGhlIEdUVC4KLQkgKiBU aGlzIGlzIGRvbmUgaW4gMyBwaGFzZXM6Ci0JICoKLQkgKiAxYS4gVW5iaW5kIGFsbCBvYmplY3Rz IHRoYXQgZG8gbm90IG1hdGNoIHRoZSBHVFQgY29uc3RyYWludHMgZm9yCi0JICogICAgIHRoZSBl eGVjYnVmZmVyIChmZW5jZWFibGUsIG1hcHBhYmxlLCBhbGlnbm1lbnQgZXRjKS4KLQkgKiAxYi4g SW5jcmVtZW50IHBpbiBjb3VudCBmb3IgYWxyZWFkeSBib3VuZCBvYmplY3RzLgotCSAqIDIuICBC aW5kIG5ldyBvYmplY3RzLgotCSAqIDMuICBEZWNyZW1lbnQgcGluIGNvdW50LgotCSAqCi0JICog VGhpcyBhdm9pZCB1bm5lY2Vzc2FyeSB1bmJpbmRpbmcgb2YgbGF0ZXIgb2JqZWN0cyBpbiBvcmRl ciB0byBtYWtlCi0JICogcm9vbSBmb3IgdGhlIGVhcmxpZXIgb2JqZWN0cyAqdW5sZXNzKiB3ZSBu ZWVkIHRvIGRlZnJhZ21lbnQuCi0JICovCi0JcmV0cnkgPSAwOwotCWRvIHsKLQkJaW50IHJldCA9 IDA7Ci0KLQkJLyogVW5iaW5kIGFueSBpbGwtZml0dGluZyBvYmplY3RzIG9yIHBpbi4gKi8KLQkJ bGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZlYi0+dm1hcywgZXhlY19saW5rKSB7Ci0JCQlpZiAo IWRybV9tbV9ub2RlX2FsbG9jYXRlZCgmdm1hLT5ub2RlKSkKLQkJCQljb250aW51ZTsKLQotCQkJ aWYgKGViX3ZtYV9taXNwbGFjZWQodm1hKSkKLQkJCQlyZXQgPSBpOTE1X3ZtYV91bmJpbmQodm1h KTsKLQkJCWVsc2UKLQkJCQlyZXQgPSBlYl9yZXNlcnZlX3ZtYSh2bWEsIGViLT5lbmdpbmUsICZl Yi0+bmVlZF9yZWxvY3MpOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIGVycjsKLQkJfQotCi0JCS8q IEJpbmQgZnJlc2ggb2JqZWN0cyAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJmViLT52 bWFzLCBleGVjX2xpbmspIHsKLQkJCWlmIChkcm1fbW1fbm9kZV9hbGxvY2F0ZWQoJnZtYS0+bm9k ZSkpCi0JCQkJY29udGludWU7Ci0KLQkJCXJldCA9IGViX3Jlc2VydmVfdm1hKHZtYSwgZWItPmVu Z2luZSwgJmViLT5uZWVkX3JlbG9jcyk7Ci0JCQlpZiAocmV0KQotCQkJCWdvdG8gZXJyOwotCQl9 Ci0KLWVycjoKLQkJaWYgKHJldCAhPSAtRU5PU1BDIHx8IHJldHJ5KyspCi0JCQlyZXR1cm4gcmV0 OworCWlmICh1bmxpa2VseShpOTE1LnByZWZhdWx0X2Rpc2FibGUpKQorCQlyZXR1cm4gMDsKIAot CQkvKiBEZWNyZW1lbnQgcGluIGNvdW50IGZvciBib3VuZCBvYmplY3RzICovCi0JCWxpc3RfZm9y X2VhY2hfZW50cnkodm1hLCAmZWItPnZtYXMsIGV4ZWNfbGluaykKLQkJCWViX3VucmVzZXJ2ZV92 bWEodm1hKTsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpbnQgcmV0OwogCi0J CXJldCA9IGk5MTVfZ2VtX2V2aWN0X3ZtKGViLT52bSwgdHJ1ZSk7CisJCXJldCA9IGNoZWNrX3Jl bG9jYXRpb25zKCZlYi0+ZXhlY1tpXSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCX0g d2hpbGUgKDEpOworCX0KKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1lYl9yZWxvY2F0 ZV9zbG93KHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQorc3RhdGljIGludCBlYl9yZWxvY2F0 ZV9zbG93KHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQogewotCWNvbnN0IHVuc2lnbmVkIGlu dCBjb3VudCA9IGViLT5hcmdzLT5idWZmZXJfY291bnQ7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRl diA9ICZlYi0+aTkxNS0+ZHJtOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRy eSAqcmVsb2M7CisJYm9vbCBoYXZlX2NvcHkgPSBmYWxzZTsKIAlzdHJ1Y3QgaTkxNV92bWEgKnZt YTsKLQlpbnQgKnJlbG9jX29mZnNldDsKLQlpbnQgaSwgdG90YWwsIHJldDsKKwlpbnQgcmV0ID0g MDsKKworcmVwZWF0OgorCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQlyZXQgPSAt RVJFU1RBUlRTWVM7CisJCWdvdG8gb3V0OworCX0KIAogCS8qIFdlIG1heSBwcm9jZXNzIGFub3Ro ZXIgZXhlY2J1ZmZlciBkdXJpbmcgdGhlIHVubG9jay4uLiAqLwogCWViX3Jlc2V0KGViKTsKIAlt dXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAotCXRvdGFsID0gMDsKLQlmb3IgKGkg PSAwOyBpIDwgY291bnQ7IGkrKykKLQkJdG90YWwgKz0gZWItPmV4ZWNbaV0ucmVsb2NhdGlvbl9j b3VudDsKLQotCXJlbG9jX29mZnNldCA9IGRybV9tYWxsb2NfYWIoY291bnQsIHNpemVvZigqcmVs b2Nfb2Zmc2V0KSk7Ci0JcmVsb2MgPSBkcm1fbWFsbG9jX2FiKHRvdGFsLCBzaXplb2YoKnJlbG9j KSk7Ci0JaWYgKHJlbG9jID09IE5VTEwgfHwgcmVsb2Nfb2Zmc2V0ID09IE5VTEwpIHsKLQkJZHJt X2ZyZWVfbGFyZ2UocmVsb2MpOwotCQlkcm1fZnJlZV9sYXJnZShyZWxvY19vZmZzZXQpOwotCQlt dXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQot CXRvdGFsID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgX191c2VyICp1c2VyX3JlbG9jczsKLQkJdTY0IGlu dmFsaWRfb2Zmc2V0ID0gKHU2NCktMTsKLQkJaW50IGo7Ci0KLQkJdXNlcl9yZWxvY3MgPSB1NjRf dG9fdXNlcl9wdHIoZWItPmV4ZWNbaV0ucmVsb2NzX3B0cik7Ci0KLQkJaWYgKGNvcHlfZnJvbV91 c2VyKHJlbG9jK3RvdGFsLCB1c2VyX3JlbG9jcywKLQkJCQkgICBlYi0+ZXhlY1tpXS5yZWxvY2F0 aW9uX2NvdW50ICogc2l6ZW9mKCpyZWxvYykpKSB7Ci0JCQlyZXQgPSAtRUZBVUxUOwotCQkJbXV0 ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCQkJZ290byBlcnI7Ci0JCX0KLQotCQkvKiBB cyB3ZSBkbyBub3QgdXBkYXRlIHRoZSBrbm93biByZWxvY2F0aW9uIG9mZnNldHMgYWZ0ZXIKLQkJ ICogcmVsb2NhdGluZyAoZHVlIHRvIHRoZSBjb21wbGV4aXRpZXMgaW4gbG9jayBoYW5kbGluZyks Ci0JCSAqIHdlIG5lZWQgdG8gbWFyayB0aGVtIGFzIGludmFsaWQgbm93IHNvIHRoYXQgd2UgZm9y Y2UgdGhlCi0JCSAqIHJlbG9jYXRpb24gcHJvY2Vzc2luZyBuZXh0IHRpbWUuIEp1c3QgaW4gY2Fz ZSB0aGUgdGFyZ2V0Ci0JCSAqIG9iamVjdCBpcyBldmljdGVkIGFuZCB0aGVuIHJlYm91bmQgaW50 byBpdHMgb2xkCi0JCSAqIHByZXN1bWVkX29mZnNldCBiZWZvcmUgdGhlIG5leHQgZXhlY2J1ZmZl ciAtIGlmIHRoYXQKLQkJICogaGFwcGVuZWQgd2Ugd291bGQgbWFrZSB0aGUgbWlzdGFrZSBvZiBh c3N1bWluZyB0aGF0IHRoZQotCQkgKiByZWxvY2F0aW9ucyB3ZXJlIHZhbGlkLgotCQkgKi8KLQkJ Zm9yIChqID0gMDsgaiA8IGViLT5leGVjW2ldLnJlbG9jYXRpb25fY291bnQ7IGorKykgewotCQkJ aWYgKF9fY29weV90b191c2VyKCZ1c2VyX3JlbG9jc1tqXS5wcmVzdW1lZF9vZmZzZXQsCi0JCQkJ CSAgICZpbnZhbGlkX29mZnNldCwKLQkJCQkJICAgc2l6ZW9mKGludmFsaWRfb2Zmc2V0KSkpIHsK LQkJCQlyZXQgPSAtRUZBVUxUOwotCQkJCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsK LQkJCQlnb3RvIGVycjsKLQkJCX0KLQkJfQotCi0JCXJlbG9jX29mZnNldFtpXSA9IHRvdGFsOwot CQl0b3RhbCArPSBlYi0+ZXhlY1tpXS5yZWxvY2F0aW9uX2NvdW50OworCS8qIFdlIHRha2UgMyBw YXNzZXMgdGhyb3VnaCB0aGUgc2xvd3BhdGNoLgorCSAqCisJICogMSAtIHdlIHRyeSB0byBqdXN0 IHByZWZhdWx0IGFsbCB0aGUgdXNlciByZWxvY2F0aW9uIGVudHJpZXMgYW5kCisJICogdGhlbiBh dHRlbXB0IHRvIHJldXNlIHRoZSBhdG9taWMgcGFnZWZhdWx0IGRpc2FibGVkIGZhc3QgcGF0aCBh Z2Fpbi4KKwkgKgorCSAqIDIgLSB3ZSBjb3B5IHRoZSB1c2VyIGVudHJpZXMgdG8gYSBsb2NhbCBi dWZmZXIgaGVyZSBvdXRzaWRlIG9mIHRoZQorCSAqIGxvY2FsIGFuZCBhbGxvdyBvdXJzZWx2ZXMg dG8gd2FpdCB1cG9uIGFueSByZW5kZXJpbmcgYmVmb3JlCisJICogcmVsb2NhdGlvbnMKKwkgKgor CSAqIDMgLSB3ZSBhbHJlYWR5IGhhdmUgYSBsb2NhbCBjb3B5IG9mIHRoZSByZWxvY2F0aW9uIGVu dHJpZXMsIGJ1dAorCSAqIHdlcmUgaW50ZXJydXB0ZWQgKEVBR0FJTikgd2hpbHN0IHdhaXRpbmcg Zm9yIHRoZSBvYmplY3RzLCB0cnkgYWdhaW4uCisJICovCisJaWYgKHJldCA9PSAwKSB7CisJCXJl dCA9IGViX3ByZWZhdWx0X3JlbG9jYXRpb25zKGViKTsKKwl9IGVsc2UgaWYgKCFoYXZlX2NvcHkp IHsKKwkJcmV0ID0gZWJfY29weV9yZWxvY2F0aW9ucyhlYik7CisJCWhhdmVfY29weSA9IHJldCA9 PSAwOworCX0gZWxzZSB7CisJCWNvbmRfcmVzY2hlZCgpOworCQlyZXQgPSAwOworCX0KKwlpZiAo cmV0KSB7CisJCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJZ290byBvdXQ7CiAJ fQogCiAJcmV0ID0gaTkxNV9tdXRleF9sb2NrX2ludGVycnVwdGlibGUoZGV2KTsKIAlpZiAocmV0 KSB7CiAJCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQkJZ290byBlcnI7CisJCWdv dG8gb3V0OwogCX0KIAogCS8qIHJlYWNxdWlyZSB0aGUgb2JqZWN0cyAqLwpAQCAtMTA4MywxNiAr MTM5MywxOCBAQCBlYl9yZWxvY2F0ZV9zbG93KHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQog CWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCi0JcmV0ID0gZWJfcmVzZXJ2ZShlYik7Ci0JaWYgKHJl dCkKLQkJZ290byBlcnI7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJmViLT52bWFzLCBl eGVjX2xpbmspIHsKLQkJaW50IGlkeCA9IHZtYS0+ZXhlY19lbnRyeSAtIGViLT5leGVjOwotCi0J CXJldCA9IGViX3JlbG9jYXRlX3ZtYV9zbG93KHZtYSwgZWIsIHJlbG9jICsgcmVsb2Nfb2Zmc2V0 W2lkeF0pOwotCQlpZiAocmV0KQotCQkJZ290byBlcnI7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh2 bWEsICZlYi0+cmVsb2NzLCByZWxvY19saW5rKSB7CisJCWlmICghaGF2ZV9jb3B5KSB7CisJCQlw YWdlZmF1bHRfZGlzYWJsZSgpOworCQkJcmV0ID0gZWJfcmVsb2NhdGVfdm1hKGViLCB2bWEpOwor CQkJcGFnZWZhdWx0X2VuYWJsZSgpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIHJlcGVhdDsKKwkJ fSBlbHNlIHsKKwkJCXJldCA9IGViX3JlbG9jYXRlX3ZtYV9zbG93KGViLCB2bWEpOworCQkJaWYg KHJldCkKKwkJCQlnb3RvIGVycjsKKwkJfQogCX0KIAogCS8qIExlYXZlIHRoZSB1c2VyIHJlbG9j YXRpb25zIGFzIGFyZSwgdGhpcyBpcyB0aGUgcGFpbmZ1bGx5IHNsb3cgcGF0aCwKQEAgLTExMDIs MjEgKzE0MTQsNjcgQEAgZWJfcmVsb2NhdGVfc2xvdyhzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICpl YikKIAkgKi8KIAogZXJyOgotCWRybV9mcmVlX2xhcmdlKHJlbG9jKTsKLQlkcm1fZnJlZV9sYXJn ZShyZWxvY19vZmZzZXQpOwotCXJldHVybiByZXQ7CisJaWYgKHJldCA9PSAtRUFHQUlOKQorCQln b3RvIHJlcGVhdDsKKworb3V0OgorCWlmIChoYXZlX2NvcHkpIHsKKwkJY29uc3QgdW5zaWduZWQg aW50IGNvdW50ID0gZWItPmJ1ZmZlcl9jb3VudDsKKwkJdW5zaWduZWQgaW50IGk7CisKKwkJZm9y IChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY19vYmplY3QyICplbnRyeSA9CisJCQkJJmViLT5leGVjW2ldOworCQkJc3RydWN0IGRybV9p OTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICpyZWxvY3M7CisKKwkJCWlmIChlbnRyeS0+cmVsb2Nh dGlvbl9jb3VudCA9PSAwKQorCQkJCWNvbnRpbnVlOworCisJCQlyZWxvY3MgPSB0b19wdHIodHlw ZW9mKCpyZWxvY3MpLCBlbnRyeS0+cmVsb2NzX3B0cik7CisJCQlkcm1fZnJlZV9sYXJnZShyZWxv Y3MpOworCQl9CisJfQorCisJcmV0dXJuIHJldCA/OiBoYXZlX2NvcHk7Cit9CisKK3N0YXRpYyB2 b2lkIGViX2V4cG9ydF9mZW5jZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJ ICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAorCQkJICAgIHVuc2lnbmVkIGlu dCBmbGFncykKK3sKKwlzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpyZXN2ID0gb2JqLT5yZXN2 OworCisJLyogSWdub3JlIGVycm9ycyBmcm9tIGZhaWxpbmcgdG8gYWxsb2NhdGUgdGhlIG5ldyBm ZW5jZSwgd2UgY2FuJ3QKKwkgKiBoYW5kbGUgYW4gZXJyb3IgcmlnaHQgbm93LiBXb3JzdCBjYXNl IHNob3VsZCBiZSBtaXNzZWQKKwkgKiBzeW5jaHJvbmlzYXRpb24gbGVhZGluZyB0byByZW5kZXJp bmcgY29ycnVwdGlvbi4KKwkgKi8KKwlyZXNlcnZhdGlvbl9vYmplY3RfbG9jayhyZXN2LCBOVUxM KTsKKwlpZiAoZmxhZ3MgJiBFWEVDX09CSkVDVF9XUklURSkKKwkJcmVzZXJ2YXRpb25fb2JqZWN0 X2FkZF9leGNsX2ZlbmNlKHJlc3YsICZyZXEtPmZlbmNlKTsKKwllbHNlIGlmIChyZXNlcnZhdGlv bl9vYmplY3RfcmVzZXJ2ZV9zaGFyZWQocmVzdikgPT0gMCkKKwkJcmVzZXJ2YXRpb25fb2JqZWN0 X2FkZF9zaGFyZWRfZmVuY2UocmVzdiwgJnJlcS0+ZmVuY2UpOworCXJlc2VydmF0aW9uX29iamVj dF91bmxvY2socmVzdik7Cit9CisKK3N0YXRpYyBib29sIGdwdV93cml0ZV9uZWVkc19jbGZsdXNo KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCit7CisJcmV0dXJuICEob2JqLT5jYWNo ZV9sZXZlbCA9PSBJOTE1X0NBQ0hFX05PTkUgfHwKKwkJIG9iai0+Y2FjaGVfbGV2ZWwgPT0gSTkx NV9DQUNIRV9XVCk7CiB9CiAKIHN0YXRpYyBpbnQKIGViX21vdmVfdG9fZ3B1KHN0cnVjdCBpOTE1 X2V4ZWNidWZmZXIgKmViKQogewotCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOworCWNvbnN0IHVuc2ln bmVkIGludCBjb3VudCA9IGViLT5idWZmZXJfY291bnQ7CisJdW5zaWduZWQgaW50IGk7CiAJaW50 IHJldDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmZWItPnZtYXMsIGV4ZWNfbGluaykg eworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBkcm1faTkx NV9nZW1fZXhlY19vYmplY3QyICplbnRyeSA9ICZlYi0+ZXhlY1tpXTsKKwkJc3RydWN0IGk5MTVf dm1hICp2bWEgPSB0b19wdHIoc3RydWN0IGk5MTVfdm1hLCBlbnRyeS0+cnN2ZDIpOwogCQlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gdm1hLT5vYmo7CiAKLQkJaWYgKHZtYS0+ZXhl Y19lbnRyeS0+ZmxhZ3MgJiBFWEVDX09CSkVDVF9DQVBUVVJFKSB7CisJCWlmIChlbnRyeS0+Zmxh Z3MgJiBFWEVDX09CSkVDVF9DQVBUVVJFKSB7CiAJCQlzdHJ1Y3QgaTkxNV9nZW1fY2FwdHVyZV9s aXN0ICpjYXB0dXJlOwogCiAJCQljYXB0dXJlID0ga21hbGxvYyhzaXplb2YoKmNhcHR1cmUpLCBH RlBfS0VSTkVMKTsKQEAgLTExMjgsOCArMTQ4Niw4IEBAIGViX21vdmVfdG9fZ3B1KHN0cnVjdCBp OTE1X2V4ZWNidWZmZXIgKmViKQogCQkJZWItPnJlcXVlc3QtPmNhcHR1cmVfbGlzdCA9IGNhcHR1 cmU7CiAJCX0KIAotCQlpZiAodm1hLT5leGVjX2VudHJ5LT5mbGFncyAmIEVYRUNfT0JKRUNUX0FT WU5DKQotCQkJY29udGludWU7CisJCWlmIChlbnRyeS0+ZmxhZ3MgJiBFWEVDX09CSkVDVF9BU1lO QykKKwkJCWdvdG8gc2tpcF9mbHVzaGVzOwogCiAJCWlmIChvYmotPmJhc2Uud3JpdGVfZG9tYWlu ICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkgewogCQkJaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qob2Jq LCAwKTsKQEAgLTExMzcsMTAgKzE0OTUsMzMgQEAgZWJfbW92ZV90b19ncHUoc3RydWN0IGk5MTVf ZXhlY2J1ZmZlciAqZWIpCiAJCX0KIAogCQlyZXQgPSBpOTE1X2dlbV9yZXF1ZXN0X2F3YWl0X29i amVjdAotCQkJKGViLT5yZXF1ZXN0LCBvYmosIHZtYS0+ZXhlY19lbnRyeS0+ZmxhZ3MgJiBFWEVD X09CSkVDVF9XUklURSk7CisJCQkoZWItPnJlcXVlc3QsIG9iaiwgZW50cnktPmZsYWdzICYgRVhF Q19PQkpFQ1RfV1JJVEUpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKKworc2tpcF9mbHVz aGVzOgorCQlvYmotPmJhc2Uud3JpdGVfZG9tYWluID0gMDsKKwkJaWYgKGVudHJ5LT5mbGFncyAm IEVYRUNfT0JKRUNUX1dSSVRFKSB7CisJCQlvYmotPmJhc2UucmVhZF9kb21haW5zID0gMDsKKwkJ CWlmICghb2JqLT5jYWNoZV9kaXJ0eSAmJiBncHVfd3JpdGVfbmVlZHNfY2xmbHVzaChvYmopKQor CQkJCW9iai0+Y2FjaGVfZGlydHkgPSB0cnVlOworCQkJaW50ZWxfZmJfb2JqX2ludmFsaWRhdGUo b2JqLCBPUklHSU5fQ1MpOworCQl9CisJCW9iai0+YmFzZS5yZWFkX2RvbWFpbnMgfD0gSTkxNV9H RU1fR1BVX0RPTUFJTlM7CisKKwkJaTkxNV92bWFfbW92ZV90b19hY3RpdmUodm1hLCBlYi0+cmVx dWVzdCwgZW50cnktPmZsYWdzKTsKKwkJX19lYl91bnJlc2VydmVfdm1hKHZtYSwgZW50cnkpOwor CQl2bWEtPmV4ZWNfZW50cnkgPSBOVUxMOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsg aSsrKSB7CisJCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICplbnRyeSA9 ICZlYi0+ZXhlY1tpXTsKKwkJc3RydWN0IGk5MTVfdm1hICp2bWEgPSB0b19wdHIoc3RydWN0IGk5 MTVfdm1hLCBlbnRyeS0+cnN2ZDIpOworCisJCWViX2V4cG9ydF9mZW5jZSh2bWEtPm9iaiwgZWIt PnJlcXVlc3QsIGVudHJ5LT5mbGFncyk7CisJCWk5MTVfdm1hX3B1dCh2bWEpOwogCX0KKwllYi0+ ZXhlYyA9IE5VTEw7CiAKIAkvKiBVbmNvbmRpdGlvbmFsbHkgZmx1c2ggYW55IGNoaXBzZXQgY2Fj aGVzIChmb3Igc3RyZWFtaW5nIHdyaXRlcykuICovCiAJaTkxNV9nZW1fY2hpcHNldF9mbHVzaChl Yi0+aTkxNSk7CkBAIC0xMTcyLDExNCArMTU1MywxMCBAQCBpOTE1X2dlbV9jaGVja19leGVjYnVm ZmVyKHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgKmV4ZWMpCiAJcmV0dXJuIHRydWU7 CiB9CiAKLXN0YXRpYyBpbnQKLXZhbGlkYXRlX2V4ZWNfbGlzdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAotCQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZXhlYywKLQkJICAg aW50IGNvdW50KQotewotCXVuc2lnbmVkIHJlbG9jc190b3RhbCA9IDA7Ci0JdW5zaWduZWQgcmVs b2NzX21heCA9IFVJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlv bl9lbnRyeSk7Ci0JdW5zaWduZWQgaW52YWxpZF9mbGFnczsKLQlpbnQgaTsKLQotCS8qIElOVEVS TkFMIGZsYWdzIG11c3Qgbm90IG92ZXJsYXAgd2l0aCBleHRlcm5hbCBvbmVzICovCi0JQlVJTERf QlVHX09OKF9fRVhFQ19PQkpFQ1RfSU5URVJOQUxfRkxBR1MgJiB+X19FWEVDX09CSkVDVF9VTktO T1dOX0ZMQUdTKTsKLQotCWludmFsaWRfZmxhZ3MgPSBfX0VYRUNfT0JKRUNUX1VOS05PV05fRkxB R1M7Ci0JaWYgKFVTRVNfRlVMTF9QUEdUVChkZXYpKQotCQlpbnZhbGlkX2ZsYWdzIHw9IEVYRUNf T0JKRUNUX05FRURTX0dUVDsKLQotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCWNo YXIgX191c2VyICpwdHIgPSB1NjRfdG9fdXNlcl9wdHIoZXhlY1tpXS5yZWxvY3NfcHRyKTsKLQkJ aW50IGxlbmd0aDsgLyogbGltaXRlZCBieSBmYXVsdF9pbl9wYWdlc19yZWFkYWJsZSgpICovCi0K LQkJaWYgKGV4ZWNbaV0uZmxhZ3MgJiBpbnZhbGlkX2ZsYWdzKQotCQkJcmV0dXJuIC1FSU5WQUw7 Ci0KLQkJLyogT2Zmc2V0IGNhbiBiZSB1c2VkIGFzIGlucHV0IChFWEVDX09CSkVDVF9QSU5ORUQp LCByZWplY3QKLQkJICogYW55IG5vbi1wYWdlLWFsaWduZWQgb3Igbm9uLWNhbm9uaWNhbCBhZGRy ZXNzZXMuCi0JCSAqLwotCQlpZiAoZXhlY1tpXS5mbGFncyAmIEVYRUNfT0JKRUNUX1BJTk5FRCkg ewotCQkJaWYgKGV4ZWNbaV0ub2Zmc2V0ICE9Ci0JCQkgICAgZ2VuOF9jYW5vbmljYWxfYWRkcihl eGVjW2ldLm9mZnNldCAmIFBBR0VfTUFTSykpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQot CQkvKiBGcm9tIGRybV9tbSBwZXJzcGVjdGl2ZSBhZGRyZXNzIHNwYWNlIGlzIGNvbnRpbnVvdXMs Ci0JCSAqIHNvIGZyb20gdGhpcyBwb2ludCB3ZSdyZSBhbHdheXMgdXNpbmcgbm9uLWNhbm9uaWNh bAotCQkgKiBmb3JtIGludGVybmFsbHkuCi0JCSAqLwotCQlleGVjW2ldLm9mZnNldCA9IGdlbjhf bm9uY2Fub25pY2FsX2FkZHIoZXhlY1tpXS5vZmZzZXQpOwotCi0JCWlmIChleGVjW2ldLmFsaWdu bWVudCAmJiAhaXNfcG93ZXJfb2ZfMihleGVjW2ldLmFsaWdubWVudCkpCi0JCQlyZXR1cm4gLUVJ TlZBTDsKLQotCQkvKiBwYWRfdG9fc2l6ZSB3YXMgb25jZSBhIHJlc2VydmVkIGZpZWxkLCBzbyBz YW5pdGl6ZSBpdCAqLwotCQlpZiAoZXhlY1tpXS5mbGFncyAmIEVYRUNfT0JKRUNUX1BBRF9UT19T SVpFKSB7Ci0JCQlpZiAob2Zmc2V0X2luX3BhZ2UoZXhlY1tpXS5wYWRfdG9fc2l6ZSkpCi0JCQkJ cmV0dXJuIC1FSU5WQUw7Ci0JCX0gZWxzZSB7Ci0JCQlleGVjW2ldLnBhZF90b19zaXplID0gMDsK LQkJfQotCi0JCS8qIEZpcnN0IGNoZWNrIGZvciBtYWxpY2lvdXMgaW5wdXQgY2F1c2luZyBvdmVy ZmxvdyBpbgotCQkgKiB0aGUgd29yc3QgY2FzZSB3aGVyZSB3ZSBuZWVkIHRvIGFsbG9jYXRlIHRo ZSBlbnRpcmUKLQkJICogcmVsb2NhdGlvbiB0cmVlIGFzIGEgc2luZ2xlIGFycmF5LgotCQkgKi8K LQkJaWYgKGV4ZWNbaV0ucmVsb2NhdGlvbl9jb3VudCA+IHJlbG9jc19tYXggLSByZWxvY3NfdG90 YWwpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmVsb2NzX3RvdGFsICs9IGV4ZWNbaV0ucmVsb2Nh dGlvbl9jb3VudDsKLQotCQlsZW5ndGggPSBleGVjW2ldLnJlbG9jYXRpb25fY291bnQgKgotCQkJ c2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSk7Ci0JCS8qCi0JCSAq IFdlIG11c3QgY2hlY2sgdGhhdCB0aGUgZW50aXJlIHJlbG9jYXRpb24gYXJyYXkgaXMgc2FmZQot CQkgKiB0byByZWFkLCBidXQgc2luY2Ugd2UgbWF5IG5lZWQgdG8gdXBkYXRlIHRoZSBwcmVzdW1l ZAotCQkgKiBvZmZzZXRzIGR1cmluZyBleGVjdXRpb24sIGNoZWNrIGZvciBmdWxsIHdyaXRlIGFj Y2Vzcy4KLQkJICovCi0JCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgcHRyLCBsZW5ndGgp KQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJaWYgKGxpa2VseSghaTkxNS5wcmVmYXVsdF9kaXNh YmxlKSkgewotCQkJaWYgKGZhdWx0X2luX3BhZ2VzX3JlYWRhYmxlKHB0ciwgbGVuZ3RoKSkKLQkJ CQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50 IGViX3NlbGVjdF9jb250ZXh0KHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQotewotCXVuc2ln bmVkIGludCBjdHhfaWQgPSBpOTE1X2V4ZWNidWZmZXIyX2dldF9jb250ZXh0X2lkKCplYi0+YXJn cyk7Ci0Jc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsKLQotCWN0eCA9IGk5MTVfZ2VtX2Nv bnRleHRfbG9va3VwKGViLT5maWxlLT5kcml2ZXJfcHJpdiwgY3R4X2lkKTsKLQlpZiAodW5saWtl bHkoSVNfRVJSKGN0eCkpKQotCQlyZXR1cm4gUFRSX0VSUihjdHgpOwotCi0JaWYgKHVubGlrZWx5 KGk5MTVfZ2VtX2NvbnRleHRfaXNfYmFubmVkKGN0eCkpKSB7Ci0JCURSTV9ERUJVRygiQ29udGV4 dCAldSB0cmllZCB0byBzdWJtaXQgd2hpbGUgYmFubmVkXG4iLCBjdHhfaWQpOwotCQlyZXR1cm4g LUVJTzsKLQl9Ci0KLQllYi0+Y3R4ID0gaTkxNV9nZW1fY29udGV4dF9nZXQoY3R4KTsKLQllYi0+ dm0gPSBjdHgtPnBwZ3R0ID8gJmN0eC0+cHBndHQtPmJhc2UgOiAmZWItPmk5MTUtPmdndHQuYmFz ZTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgYm9vbCBncHVfd3JpdGVfbmVlZHNfY2xmbHVz aChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQotewotCXJldHVybiAhKG9iai0+Y2Fj aGVfbGV2ZWwgPT0gSTkxNV9DQUNIRV9OT05FIHx8Ci0JCSBvYmotPmNhY2hlX2xldmVsID09IEk5 MTVfQ0FDSEVfV1QpOwotfQotCiB2b2lkIGk5MTVfdm1hX21vdmVfdG9fYWN0aXZlKHN0cnVjdCBp OTE1X3ZtYSAqdm1hLAogCQkJICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwK IAkJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKQogewotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmogPSB2bWEtPm9iajsKIAljb25zdCB1bnNpZ25lZCBpbnQgaWR4ID0gcmVxLT5lbmdp bmUtPmlkOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcmVxLT5pOTE1LT5kcm0uc3RydWN0X211 dGV4KTsKQEAgLTEyOTMsMTcgKzE1NzAsMTcgQEAgdm9pZCBpOTE1X3ZtYV9tb3ZlX3RvX2FjdGl2 ZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKIAkgKiAqbGFzdCouCiAJICovCiAJaWYgKCFpOTE1X3Zt YV9pc19hY3RpdmUodm1hKSkKLQkJb2JqLT5hY3RpdmVfY291bnQrKzsKKwkJdm1hLT5vYmotPmFj dGl2ZV9jb3VudCsrOwogCWk5MTVfdm1hX3NldF9hY3RpdmUodm1hLCBpZHgpOwogCWk5MTVfZ2Vt X2FjdGl2ZV9zZXQoJnZtYS0+bGFzdF9yZWFkW2lkeF0sIHJlcSk7CiAJbGlzdF9tb3ZlX3RhaWwo JnZtYS0+dm1fbGluaywgJnZtYS0+dm0tPmFjdGl2ZV9saXN0KTsKIAogCWlmIChmbGFncyAmIEVY RUNfT0JKRUNUX1dSSVRFKSB7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSB2 bWEtPm9iajsKKwogCQlpZiAoaW50ZWxfZmJfb2JqX2ludmFsaWRhdGUob2JqLCBPUklHSU5fQ1Mp KQogCQkJaTkxNV9nZW1fYWN0aXZlX3NldCgmb2JqLT5mcm9udGJ1ZmZlcl93cml0ZSwgcmVxKTsK IAotCQkvKiB1cGRhdGUgZm9yIHRoZSBpbXBsaWNpdCBmbHVzaCBhZnRlciBhIGJhdGNoICovCi0J CW9iai0+YmFzZS53cml0ZV9kb21haW4gJj0gfkk5MTVfR0VNX0dQVV9ET01BSU5TOwogCQlpZiAo IW9iai0+Y2FjaGVfZGlydHkgJiYgZ3B1X3dyaXRlX25lZWRzX2NsZmx1c2gob2JqKSkKIAkJCW9i ai0+Y2FjaGVfZGlydHkgPSB0cnVlOwogCX0KQEAgLTEzMTIsNDIgKzE1ODksNiBAQCB2b2lkIGk5 MTVfdm1hX21vdmVfdG9fYWN0aXZlKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAogCQlpOTE1X2dlbV9h Y3RpdmVfc2V0KCZ2bWEtPmxhc3RfZmVuY2UsIHJlcSk7CiB9CiAKLXN0YXRpYyB2b2lkIGViX2V4 cG9ydF9mZW5jZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAotCQkJICAgIHN0cnVj dCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAotCQkJICAgIHVuc2lnbmVkIGludCBmbGFncykK LXsKLQlzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpyZXN2ID0gb2JqLT5yZXN2OwotCi0JLyog SWdub3JlIGVycm9ycyBmcm9tIGZhaWxpbmcgdG8gYWxsb2NhdGUgdGhlIG5ldyBmZW5jZSwgd2Ug Y2FuJ3QKLQkgKiBoYW5kbGUgYW4gZXJyb3IgcmlnaHQgbm93LiBXb3JzdCBjYXNlIHNob3VsZCBi ZSBtaXNzZWQKLQkgKiBzeW5jaHJvbmlzYXRpb24gbGVhZGluZyB0byByZW5kZXJpbmcgY29ycnVw dGlvbi4KLQkgKi8KLQlyZXNlcnZhdGlvbl9vYmplY3RfbG9jayhyZXN2LCBOVUxMKTsKLQlpZiAo ZmxhZ3MgJiBFWEVDX09CSkVDVF9XUklURSkKLQkJcmVzZXJ2YXRpb25fb2JqZWN0X2FkZF9leGNs X2ZlbmNlKHJlc3YsICZyZXEtPmZlbmNlKTsKLQllbHNlIGlmIChyZXNlcnZhdGlvbl9vYmplY3Rf cmVzZXJ2ZV9zaGFyZWQocmVzdikgPT0gMCkKLQkJcmVzZXJ2YXRpb25fb2JqZWN0X2FkZF9zaGFy ZWRfZmVuY2UocmVzdiwgJnJlcS0+ZmVuY2UpOwotCXJlc2VydmF0aW9uX29iamVjdF91bmxvY2so cmVzdik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1lYl9tb3ZlX3RvX2FjdGl2ZShzdHJ1Y3QgaTkxNV9l eGVjYnVmZmVyICplYikKLXsKLQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKLQotCWxpc3RfZm9yX2Vh Y2hfZW50cnkodm1hLCAmZWItPnZtYXMsIGV4ZWNfbGluaykgewotCQlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqID0gdm1hLT5vYmo7Ci0KLQkJb2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9 IDA7Ci0JCWlmICh2bWEtPmV4ZWNfZW50cnktPmZsYWdzICYgRVhFQ19PQkpFQ1RfV1JJVEUpCi0J CQlvYmotPmJhc2UucmVhZF9kb21haW5zID0gMDsKLQkJb2JqLT5iYXNlLnJlYWRfZG9tYWlucyB8 PSBJOTE1X0dFTV9HUFVfRE9NQUlOUzsKLQotCQlpOTE1X3ZtYV9tb3ZlX3RvX2FjdGl2ZSh2bWEs IGViLT5yZXF1ZXN0LCB2bWEtPmV4ZWNfZW50cnktPmZsYWdzKTsKLQkJZWJfZXhwb3J0X2ZlbmNl KG9iaiwgZWItPnJlcXVlc3QsIHZtYS0+ZXhlY19lbnRyeS0+ZmxhZ3MpOwotCX0KLX0KLQogc3Rh dGljIGludAogaTkxNV9yZXNldF9nZW43X3NvbF9vZmZzZXRzKHN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqcmVxKQogewpAQCAtMTM1OSwxNiArMTYwMCwxNiBAQCBpOTE1X3Jlc2V0X2dlbjdf c29sX29mZnNldHMoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCiAJCXJldHVybiAt RUlOVkFMOwogCX0KIAotCWNzID0gaW50ZWxfcmluZ19iZWdpbihyZXEsIDQgKiAzKTsKKwljcyA9 IGludGVsX3JpbmdfYmVnaW4ocmVxLCA0ICogMiArIDIpOwogCWlmIChJU19FUlIoY3MpKQogCQly ZXR1cm4gUFRSX0VSUihjcyk7CiAKKwkqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKDQpOwog CWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lN TSgxKTsKIAkJKmNzKysgPSBpOTE1X21taW9fcmVnX29mZnNldChHRU43X1NPX1dSSVRFX09GRlNF VChpKSk7CiAJCSpjcysrID0gMDsKIAl9Ci0KKwkqY3MrKyA9IE1JX05PT1A7CiAJaW50ZWxfcmlu Z19hZHZhbmNlKHJlcSwgY3MpOwogCiAJcmV0dXJuIDA7CkBAIC0xNDA0LDEwICsxNjQ1LDExIEBA IHN0YXRpYyBzdHJ1Y3QgaTkxNV92bWEgKmViX3BhcnNlKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIg KmViLCBib29sIGlzX21hc3RlcikKIAkJZ290byBvdXQ7CiAKIAl2bWEtPmV4ZWNfZW50cnkgPQot CQltZW1zZXQoJmViLT5zaGFkb3dfZXhlY19lbnRyeSwgMCwgc2l6ZW9mKCp2bWEtPmV4ZWNfZW50 cnkpKTsKKwkJbWVtc2V0KCZlYi0+ZXhlY1tlYi0+YnVmZmVyX2NvdW50KytdLAorCQkgICAgICAg MCwgc2l6ZW9mKCp2bWEtPmV4ZWNfZW50cnkpKTsKIAl2bWEtPmV4ZWNfZW50cnktPmZsYWdzID0g X19FWEVDX09CSkVDVF9IQVNfUElOOwotCWk5MTVfZ2VtX29iamVjdF9nZXQoc2hhZG93X2JhdGNo X29iaik7Ci0JbGlzdF9hZGRfdGFpbCgmdm1hLT5leGVjX2xpbmssICZlYi0+dm1hcyk7CisJdm1h LT5leGVjX2VudHJ5LT5yc3ZkMiA9ICh1aW50cHRyX3Qpdm1hOworCWk5MTVfdm1hX2dldCh2bWEp OwogCiBvdXQ6CiAJaTkxNV9nZW1fb2JqZWN0X3VucGluX3BhZ2VzKHNoYWRvd19iYXRjaF9vYmop OwpAQCAtMTQyMyw3ICsxNjY1LDcgQEAgYWRkX3RvX2NsaWVudChzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X3JlcXVlc3QgKnJlcSwKIH0KIAogc3RhdGljIGludAotZXhlY2J1Zl9zdWJtaXQoc3RydWN0IGk5 MTVfZXhlY2J1ZmZlciAqZWIpCitlYl9zdWJtaXQoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIp CiB7CiAJaW50IHJldDsKIApAQCAtMTQ0OSw4ICsxNjkxLDYgQEAgZXhlY2J1Zl9zdWJtaXQoc3Ry dWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWVi X21vdmVfdG9fYWN0aXZlKGViKTsKLQogCXJldHVybiAwOwogfQogCkBAIC0xNTQyLDIwICsxNzgy LDIxIEBAIGk5MTVfZ2VtX2RvX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAlp bnQgb3V0X2ZlbmNlX2ZkID0gLTE7CiAJaW50IHJldDsKIAotCWlmICghaTkxNV9nZW1fY2hlY2tf ZXhlY2J1ZmZlcihhcmdzKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXQgPSB2YWxpZGF0ZV9l eGVjX2xpc3QoZGV2LCBleGVjLCBhcmdzLT5idWZmZXJfY291bnQpOwotCWlmIChyZXQpCi0JCXJl dHVybiByZXQ7CisJQlVJTERfQlVHX09OKF9fRVhFQ19PQkpFQ1RfSU5URVJOQUxfRkxBR1MgJiB+ X19FWEVDX09CSkVDVF9VTktOT1dOX0ZMQUdTKTsKIAogCWViLmk5MTUgPSB0b19pOTE1KGRldik7 CiAJZWIuZmlsZSA9IGZpbGU7CiAJZWIuYXJncyA9IGFyZ3M7CisJaWYgKChhcmdzLT5mbGFncyAm IEk5MTVfRVhFQ19OT19SRUxPQykgPT0gMCkKKwkJYXJncy0+ZmxhZ3MgfD0gX19FWEVDX0hBU19S RUxPQzsKIAllYi5leGVjID0gZXhlYzsKLQllYi5uZWVkX3JlbG9jcyA9IChhcmdzLT5mbGFncyAm IEk5MTVfRVhFQ19OT19SRUxPQykgPT0gMDsKKwllYi5jdHggPSBOVUxMOworCWViLmludmFsaWRf ZmxhZ3MgPSBfX0VYRUNfT0JKRUNUX1VOS05PV05fRkxBR1M7CisJaWYgKFVTRVNfRlVMTF9QUEdU VChlYi5pOTE1KSkKKwkJZWIuaW52YWxpZF9mbGFncyB8PSBFWEVDX09CSkVDVF9ORUVEU19HVFQ7 CiAJcmVsb2NfY2FjaGVfaW5pdCgmZWIucmVsb2NfY2FjaGUsIGViLmk5MTUpOwogCisJZWIuYnVm ZmVyX2NvdW50ID0gYXJncy0+YnVmZmVyX2NvdW50OwogCWViLmJhdGNoX3N0YXJ0X29mZnNldCA9 IGFyZ3MtPmJhdGNoX3N0YXJ0X29mZnNldDsKIAllYi5iYXRjaF9sZW4gPSBhcmdzLT5iYXRjaF9s ZW47CiAKQEAgLTE2MDEsNiArMTg0Miw5IEBAIGk5MTVfZ2VtX2RvX2V4ZWNidWZmZXIoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKIAkJfQogCX0KIAorCWlmIChlYl9jcmVhdGUoJmViKSkKKwkJcmV0 dXJuIC1FTk9NRU07CisKIAkvKiBUYWtlIGEgbG9jYWwgd2FrZXJlZiBmb3IgcHJlcGFyaW5nIHRv IGRpc3BhdGNoIHRoZSBleGVjYnVmIGFzCiAJICogd2UgZXhwZWN0IHRvIGFjY2VzcyB0aGUgaGFy ZHdhcmUgZmFpcmx5IGZyZXF1ZW50bHkgaW4gdGhlCiAJICogcHJvY2Vzcy4gVXBvbiBmaXJzdCBk aXNwYXRjaCwgd2UgYWNxdWlyZSBhbm90aGVyIHByb2xvbmdlZApAQCAtMTYwOCw2MCArMTg1Miw0 MSBAQCBpOTE1X2dlbV9kb19leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJICog MTAwbXMuCiAJICovCiAJaW50ZWxfcnVudGltZV9wbV9nZXQoZWIuaTkxNSk7Ci0KIAlyZXQgPSBp OTE1X211dGV4X2xvY2tfaW50ZXJydXB0aWJsZShkZXYpOwogCWlmIChyZXQpCi0JCWdvdG8gcHJl X211dGV4X2VycjsKKwkJZ290byBlcnJfcnBtOwogCiAJcmV0ID0gZWJfc2VsZWN0X2NvbnRleHQo JmViKTsKLQlpZiAocmV0KSB7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwot CQlnb3RvIHByZV9tdXRleF9lcnI7Ci0JfQorCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIGVy cl91bmxvY2s7CiAKLQlpZiAoZWJfY3JlYXRlKCZlYikpIHsKLQkJaTkxNV9nZW1fY29udGV4dF9w dXQoZWIuY3R4KTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JCXJldCA9 IC1FTk9NRU07Ci0JCWdvdG8gcHJlX211dGV4X2VycjsKLQl9Ci0KLQkvKiBMb29rIHVwIG9iamVj dCBoYW5kbGVzICovCiAJcmV0ID0gZWJfbG9va3VwX3ZtYXMoJmViKTsKLQlpZiAocmV0KQotCQln b3RvIGVycjsKLQotCS8qIHRha2Ugbm90ZSBvZiB0aGUgYmF0Y2ggYnVmZmVyIGJlZm9yZSB3ZSBt aWdodCByZW9yZGVyIHRoZSBsaXN0cyAqLwotCWViLmJhdGNoID0gZWJfZ2V0X2JhdGNoKCZlYik7 Ci0KLQkvKiBNb3ZlIHRoZSBvYmplY3RzIGVuLW1hc3NlIGludG8gdGhlIEdUVCwgZXZpY3Rpbmcg aWYgbmVjZXNzYXJ5LiAqLwotCXJldCA9IGViX3Jlc2VydmUoJmViKTsKLQlpZiAocmV0KQotCQln b3RvIGVycjsKLQotCS8qIFRoZSBvYmplY3RzIGFyZSBpbiB0aGVpciBmaW5hbCBsb2NhdGlvbnMs IGFwcGx5IHRoZSByZWxvY2F0aW9ucy4gKi8KLQlpZiAoZWIubmVlZF9yZWxvY3MpCisJaWYgKGxp a2VseSghcmV0ICYmIGFyZ3MtPmZsYWdzICYgX19FWEVDX0hBU19SRUxPQykpCiAJCXJldCA9IGVi X3JlbG9jYXRlKCZlYik7Ci0JaWYgKHJldCkgewotCQlpZiAocmV0ID09IC1FRkFVTFQpIHsKLQkJ CXJldCA9IGViX3JlbG9jYXRlX3Nsb3coJmViKTsKLQkJCUJVR19PTighbXV0ZXhfaXNfbG9ja2Vk KCZkZXYtPnN0cnVjdF9tdXRleCkpOwotCQl9Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGVycjsKLQl9 CisJaWYgKHJldCA9PSAtRUFHQUlOIHx8IHJldCA9PSAtRUZBVUxUKQorCQlyZXQgPSBlYl9yZWxv Y2F0ZV9zbG93KCZlYik7CisJaWYgKHJldCAmJiBhcmdzLT5mbGFncyAmIEk5MTVfRVhFQ19OT19S RUxPQykKKwkJLyogSWYgdGhlIHVzZXIgZXhwZWN0cyB0aGUgZXhlY29iamVjdC5vZmZzZXQgYW5k CisJCSAqIHJlbG9jLnByZXN1bWVkX29mZnNldCB0byBiZSBhbiBleGFjdCBtYXRjaCwKKwkJICog YXMgZm9yIHVzaW5nIE5PX1JFTE9DLCB0aGVuIHdlIGNhbm5vdCB1cGRhdGUKKwkJICogdGhlIGV4 ZWNvYmplY3Qub2Zmc2V0IHVudGlsIHdlIGhhdmUgY29tcGxldGVkCisJCSAqIHJlbG9jYXRpb24u CisJCSAqLworCQlhcmdzLT5mbGFncyAmPSB+X19FWEVDX0hBU19SRUxPQzsKKwlpZiAocmV0IDwg MCkKKwkJZ290byBlcnJfdm1hOwogCiAJLyogU2V0IHRoZSBwZW5kaW5nIHJlYWQgZG9tYWlucyBm b3IgdGhlIGJhdGNoIGJ1ZmZlciB0byBDT01NQU5EICovCi0JaWYgKGViLmJhdGNoLT5leGVjX2Vu dHJ5LT5mbGFncyAmIEVYRUNfT0JKRUNUX1dSSVRFKSB7CisJaWYgKHVubGlrZWx5KGViLmJhdGNo LT5leGVjX2VudHJ5LT5mbGFncyAmIEVYRUNfT0JKRUNUX1dSSVRFKSkgewogCQlEUk1fREVCVUco IkF0dGVtcHRpbmcgdG8gdXNlIHNlbGYtbW9kaWZ5aW5nIGJhdGNoIGJ1ZmZlclxuIik7CiAJCXJl dCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyOworCQlnb3RvIGVycl92bWE7CiAJfQogCWlmIChlYi5i YXRjaF9zdGFydF9vZmZzZXQgPiBlYi5iYXRjaC0+c2l6ZSB8fAogCSAgICBlYi5iYXRjaF9sZW4g PiBlYi5iYXRjaC0+c2l6ZSAtIGViLmJhdGNoX3N0YXJ0X29mZnNldCkgewogCQlEUk1fREVCVUco IkF0dGVtcHRpbmcgdG8gdXNlIG91dC1vZi1ib3VuZHMgYmF0Y2hcbiIpOwogCQlyZXQgPSAtRUlO VkFMOwotCQlnb3RvIGVycjsKKwkJZ290byBlcnJfdm1hOwogCX0KIAogCWlmIChlYi5lbmdpbmUt Pm5lZWRzX2NtZF9wYXJzZXIgJiYgZWIuYmF0Y2hfbGVuKSB7CkBAIC0xNjcwLDcgKzE4OTUsNyBA QCBpOTE1X2dlbV9kb19leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCXZtYSA9 IGViX3BhcnNlKCZlYiwgZHJtX2lzX2N1cnJlbnRfbWFzdGVyKGZpbGUpKTsKIAkJaWYgKElTX0VS Uih2bWEpKSB7CiAJCQlyZXQgPSBQVFJfRVJSKHZtYSk7Ci0JCQlnb3RvIGVycjsKKwkJCWdvdG8g ZXJyX3ZtYTsKIAkJfQogCiAJCWlmICh2bWEpIHsKQEAgLTE2OTYsNyArMTkyMSw2IEBAIGk5MTVf Z2VtX2RvX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkgKiBiYXRjaCIgYml0 LiBIZW5jZSB3ZSBuZWVkIHRvIHBpbiBzZWN1cmUgYmF0Y2hlcyBpbnRvIHRoZSBnbG9iYWwgZ3R0 LgogCSAqIGhzdyBzaG91bGQgaGF2ZSB0aGlzIGZpeGVkLCBidXQgYmR3IG11Y2tzIGl0IHVwIGFn YWluLiAqLwogCWlmIChlYi5kaXNwYXRjaF9mbGFncyAmIEk5MTVfRElTUEFUQ0hfU0VDVVJFKSB7 Ci0JCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBlYi5iYXRjaC0+b2JqOwogCQlz dHJ1Y3QgaTkxNV92bWEgKnZtYTsKIAogCQkvKgpAQCAtMTcwOSwxMCArMTkzMywxMCBAQCBpOTE1 X2dlbV9kb19leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCSAqICAgZml0dGlu ZyBkdWUgdG8gZnJhZ21lbnRhdGlvbi4KIAkJICogU28gdGhpcyBpcyBhY3R1YWxseSBzYWZlLgog CQkgKi8KLQkJdm1hID0gaTkxNV9nZW1fb2JqZWN0X2dndHRfcGluKG9iaiwgTlVMTCwgMCwgMCwg MCk7CisJCXZtYSA9IGk5MTVfZ2VtX29iamVjdF9nZ3R0X3BpbihlYi5iYXRjaC0+b2JqLCBOVUxM LCAwLCAwLCAwKTsKIAkJaWYgKElTX0VSUih2bWEpKSB7CiAJCQlyZXQgPSBQVFJfRVJSKHZtYSk7 Ci0JCQlnb3RvIGVycjsKKwkJCWdvdG8gZXJyX3ZtYTsKIAkJfQogCiAJCWViLmJhdGNoID0gdm1h OwpAQCAtMTc0OCw3ICsxOTcyLDcgQEAgaTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAogCWViLnJlcXVlc3QtPmJhdGNoID0gZWIuYmF0Y2g7CiAKIAl0cmFjZV9p OTE1X2dlbV9yZXF1ZXN0X3F1ZXVlKGViLnJlcXVlc3QsIGViLmRpc3BhdGNoX2ZsYWdzKTsKLQly ZXQgPSBleGVjYnVmX3N1Ym1pdCgmZWIpOworCXJldCA9IGViX3N1Ym1pdCgmZWIpOwogZXJyX3Jl cXVlc3Q6CiAJX19pOTE1X2FkZF9yZXF1ZXN0KGViLnJlcXVlc3QsIHJldCA9PSAwKTsKIAlhZGRf dG9fY2xpZW50KGViLnJlcXVlc3QsIGZpbGUpOwpAQCAtMTc2NSwyMyArMTk4OSwxNiBAQCBpOTE1 X2dlbV9kb19leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJfQogCiBlcnJfYmF0 Y2hfdW5waW46Ci0JLyoKLQkgKiBGSVhNRTogV2UgY3J1Y2lhbGx5IHJlbHkgdXBvbiB0aGUgYWN0 aXZlIHRyYWNraW5nIGZvciB0aGUgKHBwZ3R0KQotCSAqIGJhdGNoIHZtYSBmb3IgY29ycmVjdG5l c3MuIEZvciBsZXNzIHVnbHkgYW5kIGxlc3MgZnJhZ2lsaXR5IHRoaXMKLQkgKiBuZWVkcyB0byBi ZSBhZGp1c3RlZCB0byBhbHNvIHRyYWNrIHRoZSBnZ3R0IGJhdGNoIHZtYSBwcm9wZXJseSBhcwot CSAqIGFjdGl2ZS4KLQkgKi8KIAlpZiAoZWIuZGlzcGF0Y2hfZmxhZ3MgJiBJOTE1X0RJU1BBVENI X1NFQ1VSRSkKIAkJaTkxNV92bWFfdW5waW4oZWIuYmF0Y2gpOwotZXJyOgotCS8qIHRoZSByZXF1 ZXN0IG93bnMgdGhlIHJlZiBub3cgKi8KLQllYl9kZXN0cm95KCZlYik7CitlcnJfdm1hOgorCWVi X3JlbGVhc2Vfdm1hKCZlYik7CisJaTkxNV9nZW1fY29udGV4dF9wdXQoZWIuY3R4KTsKK2Vycl91 bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0KLXByZV9tdXRleF9l cnI6Ci0JLyogaW50ZWxfZ3B1X2J1c3kgc2hvdWxkIGFsc28gZ2V0IGEgcmVmLCBzbyBpdCB3aWxs IGZyZWUgd2hlbiB0aGUgZGV2aWNlCi0JICogaXMgcmVhbGx5IGlkbGUuICovCitlcnJfcnBtOgog CWludGVsX3J1bnRpbWVfcG1fcHV0KGViLmk5MTUpOworCWViX2Rlc3Ryb3koJmViKTsKIAlpZiAo b3V0X2ZlbmNlX2ZkICE9IC0xKQogCQlwdXRfdW51c2VkX2ZkKG91dF9mZW5jZV9mZCk7CiBlcnJf aW5fZmVuY2U6CkBAIC0xODA4LDkgKzIwMjUsMjcgQEAgaTkxNV9nZW1fZXhlY2J1ZmZlcihzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAK KwlleGVjMi5idWZmZXJzX3B0ciA9IGFyZ3MtPmJ1ZmZlcnNfcHRyOworCWV4ZWMyLmJ1ZmZlcl9j b3VudCA9IGFyZ3MtPmJ1ZmZlcl9jb3VudDsKKwlleGVjMi5iYXRjaF9zdGFydF9vZmZzZXQgPSBh cmdzLT5iYXRjaF9zdGFydF9vZmZzZXQ7CisJZXhlYzIuYmF0Y2hfbGVuID0gYXJncy0+YmF0Y2hf bGVuOworCWV4ZWMyLkRSMSA9IGFyZ3MtPkRSMTsKKwlleGVjMi5EUjQgPSBhcmdzLT5EUjQ7CisJ ZXhlYzIubnVtX2NsaXByZWN0cyA9IGFyZ3MtPm51bV9jbGlwcmVjdHM7CisJZXhlYzIuY2xpcHJl Y3RzX3B0ciA9IGFyZ3MtPmNsaXByZWN0c19wdHI7CisJZXhlYzIuZmxhZ3MgPSBJOTE1X0VYRUNf UkVOREVSOworCWk5MTVfZXhlY2J1ZmZlcjJfc2V0X2NvbnRleHRfaWQoZXhlYzIsIDApOworCisJ aWYgKCFpOTE1X2dlbV9jaGVja19leGVjYnVmZmVyKCZleGVjMikpCisJCXJldHVybiAtRUlOVkFM OworCiAJLyogQ29weSBpbiB0aGUgZXhlYyBsaXN0IGZyb20gdXNlcmxhbmQgKi8KLQlleGVjX2xp c3QgPSBkcm1fbWFsbG9jX2FiKHNpemVvZigqZXhlY19saXN0KSwgYXJncy0+YnVmZmVyX2NvdW50 KTsKLQlleGVjMl9saXN0ID0gZHJtX21hbGxvY19hYihzaXplb2YoKmV4ZWMyX2xpc3QpLCBhcmdz LT5idWZmZXJfY291bnQpOworCWV4ZWNfbGlzdCA9IGRybV9tYWxsb2NfZ2ZwKGFyZ3MtPmJ1ZmZl cl9jb3VudCwKKwkJCQkgICBzaXplb2YoKmV4ZWNfbGlzdCksCisJCQkJICAgX19HRlBfTk9XQVJO IHwgR0ZQX1RFTVBPUkFSWSk7CisJZXhlYzJfbGlzdCA9IGRybV9tYWxsb2NfZ2ZwKGFyZ3MtPmJ1 ZmZlcl9jb3VudCArIDEsCisJCQkJICAgIHNpemVvZigqZXhlYzJfbGlzdCksCisJCQkJICAgIF9f R0ZQX05PV0FSTiB8IEdGUF9URU1QT1JBUlkpOwogCWlmIChleGVjX2xpc3QgPT0gTlVMTCB8fCBl eGVjMl9saXN0ID09IE5VTEwpIHsKIAkJRFJNX0RFQlVHKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXhl YyBsaXN0IGZvciAlZCBidWZmZXJzXG4iLAogCQkJICBhcmdzLT5idWZmZXJfY291bnQpOwpAQCAt MTg0MSwzNiArMjA3NiwyMyBAQCBpOTE1X2dlbV9leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHZvaWQgKmRhdGEsCiAJCQlleGVjMl9saXN0W2ldLmZsYWdzID0gMDsKIAl9CiAKLQll eGVjMi5idWZmZXJzX3B0ciA9IGFyZ3MtPmJ1ZmZlcnNfcHRyOwotCWV4ZWMyLmJ1ZmZlcl9jb3Vu dCA9IGFyZ3MtPmJ1ZmZlcl9jb3VudDsKLQlleGVjMi5iYXRjaF9zdGFydF9vZmZzZXQgPSBhcmdz LT5iYXRjaF9zdGFydF9vZmZzZXQ7Ci0JZXhlYzIuYmF0Y2hfbGVuID0gYXJncy0+YmF0Y2hfbGVu OwotCWV4ZWMyLkRSMSA9IGFyZ3MtPkRSMTsKLQlleGVjMi5EUjQgPSBhcmdzLT5EUjQ7Ci0JZXhl YzIubnVtX2NsaXByZWN0cyA9IGFyZ3MtPm51bV9jbGlwcmVjdHM7Ci0JZXhlYzIuY2xpcHJlY3Rz X3B0ciA9IGFyZ3MtPmNsaXByZWN0c19wdHI7Ci0JZXhlYzIuZmxhZ3MgPSBJOTE1X0VYRUNfUkVO REVSOwotCWk5MTVfZXhlY2J1ZmZlcjJfc2V0X2NvbnRleHRfaWQoZXhlYzIsIDApOwotCiAJcmV0 ID0gaTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihkZXYsIGZpbGUsICZleGVjMiwgZXhlYzJfbGlzdCk7 Ci0JaWYgKCFyZXQpIHsKKwlpZiAoZXhlYzIuZmxhZ3MgJiBfX0VYRUNfSEFTX1JFTE9DKSB7CiAJ CXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QgX191c2VyICp1c2VyX2V4ZWNfbGlzdCA9 CiAJCQl1NjRfdG9fdXNlcl9wdHIoYXJncy0+YnVmZmVyc19wdHIpOwogCiAJCS8qIENvcHkgdGhl IG5ldyBidWZmZXIgb2Zmc2V0cyBiYWNrIHRvIHRoZSB1c2VyJ3MgZXhlYyBsaXN0LiAqLwogCQlm b3IgKGkgPSAwOyBpIDwgYXJncy0+YnVmZmVyX2NvdW50OyBpKyspIHsKKwkJCWlmICgoZXhlYzJf bGlzdFtpXS5vZmZzZXQgJiBVUERBVEUpID09IDApCisJCQkJY29udGludWU7CisKIAkJCWV4ZWMy X2xpc3RbaV0ub2Zmc2V0ID0KLQkJCQlnZW44X2Nhbm9uaWNhbF9hZGRyKGV4ZWMyX2xpc3RbaV0u b2Zmc2V0KTsKLQkJCXJldCA9IF9fY29weV90b191c2VyKCZ1c2VyX2V4ZWNfbGlzdFtpXS5vZmZz ZXQsCi0JCQkJCSAgICAgJmV4ZWMyX2xpc3RbaV0ub2Zmc2V0LAotCQkJCQkgICAgIHNpemVvZih1 c2VyX2V4ZWNfbGlzdFtpXS5vZmZzZXQpKTsKLQkJCWlmIChyZXQpIHsKLQkJCQlyZXQgPSAtRUZB VUxUOwotCQkJCURSTV9ERUJVRygiZmFpbGVkIHRvIGNvcHkgJWQgZXhlYyBlbnRyaWVzICIKLQkJ CQkJICAiYmFjayB0byB1c2VyICglZClcbiIsCi0JCQkJCSAgYXJncy0+YnVmZmVyX2NvdW50LCBy ZXQpOworCQkJCWdlbjhfY2Fub25pY2FsX2FkZHIoZXhlYzJfbGlzdFtpXS5vZmZzZXQgJiBQSU5f T0ZGU0VUX01BU0spOworCQkJZXhlYzJfbGlzdFtpXS5vZmZzZXQgJj0gUElOX09GRlNFVF9NQVNL OworCQkJaWYgKF9fY29weV90b191c2VyKCZ1c2VyX2V4ZWNfbGlzdFtpXS5vZmZzZXQsCisJCQkJ CSAgICZleGVjMl9saXN0W2ldLm9mZnNldCwKKwkJCQkJICAgc2l6ZW9mKHVzZXJfZXhlY19saXN0 W2ldLm9mZnNldCkpKQogCQkJCWJyZWFrOwotCQkJfQogCQl9CiAJfQogCkBAIC0xODg0LDU2ICsy MTA2LDYzIEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXIyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZv aWQgKmRhdGEsCiAJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlKQogewogCXN0cnVjdCBkcm1f aTkxNV9nZW1fZXhlY2J1ZmZlcjIgKmFyZ3MgPSBkYXRhOwotCXN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY19vYmplY3QyICpleGVjMl9saXN0ID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4 ZWNfb2JqZWN0MiAqZXhlYzJfbGlzdDsKIAlpbnQgcmV0OwogCiAJaWYgKGFyZ3MtPmJ1ZmZlcl9j b3VudCA8IDEgfHwKLQkgICAgYXJncy0+YnVmZmVyX2NvdW50ID4gVUlOVF9NQVggLyBzaXplb2Yo KmV4ZWMyX2xpc3QpKSB7CisJICAgIGFyZ3MtPmJ1ZmZlcl9jb3VudCA+PSBVSU5UX01BWCAvIHNp emVvZigqZXhlYzJfbGlzdCkgLSAxKSB7CiAJCURSTV9ERUJVRygiZXhlY2J1ZjIgd2l0aCAlZCBi dWZmZXJzXG4iLCBhcmdzLT5idWZmZXJfY291bnQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAK LQlleGVjMl9saXN0ID0gZHJtX21hbGxvY19nZnAoYXJncy0+YnVmZmVyX2NvdW50LAorCWlmICgh aTkxNV9nZW1fY2hlY2tfZXhlY2J1ZmZlcihhcmdzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwll eGVjMl9saXN0ID0gZHJtX21hbGxvY19nZnAoYXJncy0+YnVmZmVyX2NvdW50ICsgMSwKIAkJCQkg ICAgc2l6ZW9mKCpleGVjMl9saXN0KSwKLQkJCQkgICAgR0ZQX1RFTVBPUkFSWSk7CisJCQkJICAg IF9fR0ZQX05PV0FSTiB8IEdGUF9URU1QT1JBUlkpOwogCWlmIChleGVjMl9saXN0ID09IE5VTEwp IHsKIAkJRFJNX0RFQlVHKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXhlYyBsaXN0IGZvciAlZCBidWZm ZXJzXG4iLAogCQkJICBhcmdzLT5idWZmZXJfY291bnQpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9 Ci0JcmV0ID0gY29weV9mcm9tX3VzZXIoZXhlYzJfbGlzdCwKLQkJCSAgICAgdTY0X3RvX3VzZXJf cHRyKGFyZ3MtPmJ1ZmZlcnNfcHRyKSwKLQkJCSAgICAgc2l6ZW9mKCpleGVjMl9saXN0KSAqIGFy Z3MtPmJ1ZmZlcl9jb3VudCk7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCURSTV9ERUJVRygiY29weSAl ZCBleGVjIGVudHJpZXMgZmFpbGVkICVkXG4iLAotCQkJICBhcmdzLT5idWZmZXJfY291bnQsIHJl dCk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGV4ZWMyX2xpc3QsCisJCQkgICB1NjRfdG9fdXNlcl9w dHIoYXJncy0+YnVmZmVyc19wdHIpLAorCQkJICAgc2l6ZW9mKCpleGVjMl9saXN0KSAqIGFyZ3Mt PmJ1ZmZlcl9jb3VudCkpIHsKKwkJRFJNX0RFQlVHKCJjb3B5ICVkIGV4ZWMgZW50cmllcyBmYWls ZWRcbiIsIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7CiAJCWRybV9mcmVlX2xhcmdlKGV4ZWMyX2xpc3Qp OwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKIAlyZXQgPSBpOTE1X2dlbV9kb19leGVjYnVmZmVy KGRldiwgZmlsZSwgYXJncywgZXhlYzJfbGlzdCk7Ci0JaWYgKCFyZXQpIHsKLQkJLyogQ29weSB0 aGUgbmV3IGJ1ZmZlciBvZmZzZXRzIGJhY2sgdG8gdGhlIHVzZXIncyBleGVjIGxpc3QuICovCisK KwkvKiBOb3cgdGhhdCB3ZSBoYXZlIGJlZ3VuIGV4ZWN1dGlvbiBvZiB0aGUgYmF0Y2hidWZmZXIs IHdlIGlnbm9yZQorCSAqIGFueSBuZXcgZXJyb3IgYWZ0ZXIgdGhpcyBwb2ludC4gQWxzbyBnaXZl biB0aGF0IHdlIGhhdmUgYWxyZWFkeQorCSAqIHVwZGF0ZWQgdGhlIGFzc29jaWF0ZWQgcmVsb2Nh dGlvbnMsIHdlIHRyeSB0byB3cml0ZSBvdXQgdGhlIGN1cnJlbnQKKwkgKiBvYmplY3QgbG9jYXRp b25zIGlycmVzcGVjdGl2ZSBvZiBhbnkgZXJyb3IuCisJICovCisJaWYgKGFyZ3MtPmZsYWdzICYg X19FWEVDX0hBU19SRUxPQykgewogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBf X3VzZXIgKnVzZXJfZXhlY19saXN0ID0KLQkJCQkgICB1NjRfdG9fdXNlcl9wdHIoYXJncy0+YnVm ZmVyc19wdHIpOworCQkJdTY0X3RvX3VzZXJfcHRyKGFyZ3MtPmJ1ZmZlcnNfcHRyKTsKIAkJaW50 IGk7CiAKKwkJLyogQ29weSB0aGUgbmV3IGJ1ZmZlciBvZmZzZXRzIGJhY2sgdG8gdGhlIHVzZXIn cyBleGVjIGxpc3QuICovCisJCXVzZXJfYWNjZXNzX2JlZ2luKCk7CiAJCWZvciAoaSA9IDA7IGkg PCBhcmdzLT5idWZmZXJfY291bnQ7IGkrKykgeworCQkJaWYgKChleGVjMl9saXN0W2ldLm9mZnNl dCAmIFVQREFURSkgPT0gMCkKKwkJCQljb250aW51ZTsKKwogCQkJZXhlYzJfbGlzdFtpXS5vZmZz ZXQgPQotCQkJCWdlbjhfY2Fub25pY2FsX2FkZHIoZXhlYzJfbGlzdFtpXS5vZmZzZXQpOwotCQkJ cmV0ID0gX19jb3B5X3RvX3VzZXIoJnVzZXJfZXhlY19saXN0W2ldLm9mZnNldCwKLQkJCQkJICAg ICAmZXhlYzJfbGlzdFtpXS5vZmZzZXQsCi0JCQkJCSAgICAgc2l6ZW9mKHVzZXJfZXhlY19saXN0 W2ldLm9mZnNldCkpOwotCQkJaWYgKHJldCkgewotCQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQkJRFJN X0RFQlVHKCJmYWlsZWQgdG8gY29weSAlZCBleGVjIGVudHJpZXMgIgotCQkJCQkgICJiYWNrIHRv IHVzZXJcbiIsCi0JCQkJCSAgYXJncy0+YnVmZmVyX2NvdW50KTsKLQkJCQlicmVhazsKLQkJCX0K KwkJCQlnZW44X2Nhbm9uaWNhbF9hZGRyKGV4ZWMyX2xpc3RbaV0ub2Zmc2V0ICYgUElOX09GRlNF VF9NQVNLKTsKKwkJCXVuc2FmZV9wdXRfdXNlcihleGVjMl9saXN0W2ldLm9mZnNldCwKKwkJCQkJ JnVzZXJfZXhlY19saXN0W2ldLm9mZnNldCwKKwkJCQkJZW5kX3VzZXIpOwogCQl9CitlbmRfdXNl cjoKKwkJdXNlcl9hY2Nlc3NfZW5kKCk7CiAJfQogCisJYXJncy0+ZmxhZ3MgJj0gfl9fSTkxNV9F WEVDX1VOS05PV05fRkxBR1M7CiAJZHJtX2ZyZWVfbGFyZ2UoZXhlYzJfbGlzdCk7CiAJcmV0dXJu IHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5jCmluZGV4IDUwNzQ2M2YxNDRjOS4uNTA5N2Rj YzM5ODdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmMKQEAgLTQ2Myw3ICs0NjMsNyBAQCBpOTE1 X3ZtYV9pbnNlcnQoc3RydWN0IGk5MTVfdm1hICp2bWEsIHU2NCBzaXplLCB1NjQgYWxpZ25tZW50 LCB1NjQgZmxhZ3MpCiAJCQkgIHNpemUsIG9iai0+YmFzZS5zaXplLAogCQkJICBmbGFncyAmIFBJ Tl9NQVBQQUJMRSA/ICJtYXBwYWJsZSIgOiAidG90YWwiLAogCQkJICBlbmQpOwotCQlyZXR1cm4g LUUyQklHOworCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAKIAlyZXQgPSBpOTE1X2dlbV9vYmplY3Rf cGluX3BhZ2VzKG9iaik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Zt YS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuaAppbmRleCA4ODU0M2ZhZmNmZmMu LjA2MmFkZGZlZTZlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEu aAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5oCkBAIC0xMDMsNiArMTAzLDcg QEAgc3RydWN0IGk5MTVfdm1hIHsKIAogCS8qKiBUaGlzIHZtYSdzIHBsYWNlIGluIHRoZSBleGVj YnVmIHJlc2VydmF0aW9uIGxpc3QgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGV4ZWNfbGluazsKKwlz dHJ1Y3QgbGlzdF9oZWFkIHJlbG9jX2xpbms7CiAKIAkvKiogVGhpcyB2bWEncyBwbGFjZSBpbiB0 aGUgZXZpY3Rpb24gbGlzdCAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZXZpY3RfbGluazsKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9ldmljdC5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2V2aWN0LmMKaW5kZXggMTRl OWMyZmJjNGU2Li41ZWEzNzMyMjFmNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9pOTE1X2dlbV9ldmljdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3Nl bGZ0ZXN0cy9pOTE1X2dlbV9ldmljdC5jCkBAIC0zMDQsNyArMzA0LDcgQEAgc3RhdGljIGludCBp Z3RfZXZpY3Rfdm0odm9pZCAqYXJnKQogCQlnb3RvIGNsZWFudXA7CiAKIAkvKiBFdmVyeXRoaW5n IGlzIHBpbm5lZCwgbm90aGluZyBzaG91bGQgaGFwcGVuICovCi0JZXJyID0gaTkxNV9nZW1fZXZp Y3Rfdm0oJmdndHQtPmJhc2UsIGZhbHNlKTsKKwllcnIgPSBpOTE1X2dlbV9ldmljdF92bSgmZ2d0 dC0+YmFzZSk7CiAJaWYgKGVycikgewogCQlwcl9lcnIoImk5MTVfZ2VtX2V2aWN0X3ZtIG9uIGEg ZnVsbCBHR1RUIHJldHVybmVkIGVycj0lZF1cbiIsCiAJCSAgICAgICBlcnIpOwpAQCAtMzEzLDcg KzMxMyw3IEBAIHN0YXRpYyBpbnQgaWd0X2V2aWN0X3ZtKHZvaWQgKmFyZykKIAogCXVucGluX2dn dHQoaTkxNSk7CiAKLQllcnIgPSBpOTE1X2dlbV9ldmljdF92bSgmZ2d0dC0+YmFzZSwgZmFsc2Up OworCWVyciA9IGk5MTVfZ2VtX2V2aWN0X3ZtKCZnZ3R0LT5iYXNlKTsKIAlpZiAoZXJyKSB7CiAJ CXByX2VycigiaTkxNV9nZW1fZXZpY3Rfdm0gb24gYSBmdWxsIEdHVFQgcmV0dXJuZWQgZXJyPSVk XVxuIiwKIAkJICAgICAgIGVycik7Ci0tIAoyLjExLjAKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=