From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 13/17] drm/i915: Eliminate lots of iterations over the execobjects array Date: Mon, 22 Aug 2016 09:03:46 +0100 Message-ID: <20160822080350.4964-14-chris@chris-wilson.co.uk> References: <20160822080350.4964-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-wm0-x241.google.com (mail-wm0-x241.google.com [IPv6:2a00:1450:400c:c09::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id 85BA56E2CD for ; Mon, 22 Aug 2016 08:04:13 +0000 (UTC) Received: by mail-wm0-x241.google.com with SMTP id i138so12191514wmf.3 for ; Mon, 22 Aug 2016 01:04:13 -0700 (PDT) In-Reply-To: <20160822080350.4964-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 aGF0IGFyZSBub3QgY2hhbmdlZC4KClNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNA Y2hyaXMtd2lsc29uLmNvLnVrPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2Lmgg ICAgICAgICAgICB8ICAgIDMgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAg ICAgICAgICB8ICAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V2aWN0LmMg ICAgICB8ICAgNjQgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIu YyB8IDE1NTUgKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fZ3R0LmggICAgICAgIHwgICAgNCArLQogNSBmaWxlcyBjaGFuZ2VkLCA4NzQg aW5zZXJ0aW9ucygrKSwgNzU0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmlu ZGV4IDg5OWZlOTgzZTYyMy4uYTkyYzE0YWQzMGViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgK QEAgLTMxMTEsNiArMzExMSw3IEBAIGludCBpOTE1X2dlbV9mcmVlemVfbGF0ZShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogCiB2b2lkICppOTE1X2dlbV9vYmplY3RfYWxsb2Mo c3RydWN0IGRybV9kZXZpY2UgKmRldik7CiB2b2lkIGk5MTVfZ2VtX29iamVjdF9mcmVlKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOworYm9vbCBpOTE1X2dlbV9vYmplY3RfZmx1c2hf YWN0aXZlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOwogdm9pZCBpOTE1X2dlbV9v YmplY3RfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCQkJIGNvbnN0IHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyAqb3BzKTsKIHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICppOTE1X2dlbV9vYmplY3RfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCkBA IC0zNTAyLDcgKzM1MDMsNyBAQCBpbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX2V2aWN0X3NvbWV0 aGluZyhzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAkJCQkJICB1bnNpZ25lZCBmbGFn cyk7CiBpbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX2V2aWN0X2Zvcl92bWEoc3RydWN0IGk5MTVf dm1hICp2bWEsCiAJCQkJCXVuc2lnbmVkIGludCBmbGFncyk7Ci1pbnQgaTkxNV9nZW1fZXZpY3Rf dm0oc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sIGJvb2wgZG9faWRsZSk7CitpbnQgaTkx NV9nZW1fZXZpY3Rfdm0oc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pOwogCiAvKiBiZWxv bmdzIGluIGk5MTVfZ2VtX2d0dC5oICovCiBzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9nZW1fY2hp cHNldF9mbHVzaChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW0uYwppbmRleCA3OGZhYWMyYjc4MGMuLjFmMzVkZDYyMTljYiAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbS5jCkBAIC0zMDM0LDcgKzMwMzQsNyBAQCBpOTE1X3ZtYV9pbnNlcnQoc3RydWN0 IGk5MTVfdm1hICp2bWEsIHU2NCBzaXplLCB1NjQgYWxpZ25tZW50LCB1NjQgZmxhZ3MpCiAJCQkg IHNpemUsIG9iai0+YmFzZS5zaXplLAogCQkJICBmbGFncyAmIFBJTl9NQVBQQUJMRSA/ICJtYXBw YWJsZSIgOiAidG90YWwiLAogCQkJICBlbmQpOwotCQlyZXR1cm4gLUUyQklHOworCQlyZXR1cm4g LUVOT1NQQzsKIAl9CiAKIAlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKG9iaik7CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ldmljdC5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXZpY3QuYwppbmRleCA3OWNlODczYjQ4OTEuLmQ1OWIw ODVkZTQ4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXZpY3Qu YworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ldmljdC5jCkBAIC01NSw3ICs1 NSw3IEBAIG1hcmtfZnJlZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwgdW5zaWduZWQgaW50IGZsYWdz LCBzdHJ1Y3QgbGlzdF9oZWFkICp1bndpbmQpCiAJaWYgKGZsYWdzICYgUElOX05PTkZBVUxUICYm IHZtYS0+b2JqLT5mYXVsdF9tYXBwYWJsZSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JbGlzdF9hZGQo JnZtYS0+ZXhlY19saXN0LCB1bndpbmQpOworCWxpc3RfYWRkKCZ2bWEtPmV2aWN0X2xpbmssIHVu d2luZCk7CiAJcmV0dXJuIGRybV9tbV9zY2FuX2FkZF9ibG9jaygmdm1hLT5ub2RlKTsKIH0KIApA QCAtMTM0LDcgKzEzNCw3IEBAIHNlYXJjaF9hZ2FpbjoKIAl9IHdoaWxlICgqKytwaGFzZSk7CiAK IAkvKiBOb3RoaW5nIGZvdW5kLCBjbGVhbiB1cCBhbmQgYmFpbCBvdXQhICovCi0JbGlzdF9mb3Jf ZWFjaF9lbnRyeV9zYWZlKHZtYSwgbmV4dCwgJmV2aWN0aW9uX2xpc3QsIGV4ZWNfbGlzdCkgewor CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bWEsIG5leHQsICZldmljdGlvbl9saXN0LCBldmlj dF9saW5rKSB7CiAJCXJldCA9IGRybV9tbV9zY2FuX3JlbW92ZV9ibG9jaygmdm1hLT5ub2RlKTsK IAkJQlVHX09OKHJldCk7CiAJfQpAQCAtMTc5LDE2ICsxNzksMTYgQEAgZm91bmQ6CiAJICogY2Fs bGluZyB1bmJpbmQgKHdoaWNoIG1heSByZW1vdmUgdGhlIGFjdGl2ZSByZWZlcmVuY2UKIAkgKiBv ZiBhbnkgb2Ygb3VyIG9iamVjdHMsIHRodXMgY29ycnVwdGluZyB0aGUgbGlzdCkuCiAJICovCi0J bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZtYSwgbmV4dCwgJmV2aWN0aW9uX2xpc3QsIGV4ZWNf bGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bWEsIG5leHQsICZldmljdGlvbl9s aXN0LCBldmljdF9saW5rKSB7CiAJCWlmIChkcm1fbW1fc2Nhbl9yZW1vdmVfYmxvY2soJnZtYS0+ bm9kZSkpCiAJCQlfX2k5MTVfdm1hX3Bpbih2bWEpOwogCQllbHNlCi0JCQlsaXN0X2RlbCgmdm1h LT5leGVjX2xpc3QpOworCQkJbGlzdF9kZWwoJnZtYS0+ZXZpY3RfbGluayk7CiAJfQogCiAJLyog VW5iaW5kaW5nIHdpbGwgZW1pdCBhbnkgcmVxdWlyZWQgZmx1c2hlcyAqLwogCXJldCA9IDA7Ci0J bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZtYSwgbmV4dCwgJmV2aWN0aW9uX2xpc3QsIGV4ZWNf bGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bWEsIG5leHQsICZldmljdGlvbl9s aXN0LCBldmljdF9saW5rKSB7CiAJCV9faTkxNV92bWFfdW5waW4odm1hKTsKIAkJaWYgKHJldCA9 PSAwKQogCQkJcmV0ID0gaTkxNV92bWFfdW5iaW5kKHZtYSk7CkBAIC0yNjAsMTAgKzI2MCwxMCBA QCBpbnQgaTkxNV9nZW1fZXZpY3RfZm9yX3ZtYShzdHJ1Y3QgaTkxNV92bWEgKnRhcmdldCwgdW5z aWduZWQgaW50IGZsYWdzKQogCQl9CiAKIAkJX19pOTE1X3ZtYV9waW4odm1hKTsKLQkJbGlzdF9h ZGQoJnZtYS0+ZXhlY19saXN0LCAmZXZpY3Rpb25fbGlzdCk7CisJCWxpc3RfYWRkKCZ2bWEtPmV2 aWN0X2xpbmssICZldmljdGlvbl9saXN0KTsKIAl9CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmUodm1hLCBuZXh0LCAmZXZpY3Rpb25fbGlzdCwgZXhlY19saXN0KSB7CisJbGlzdF9mb3JfZWFj aF9lbnRyeV9zYWZlKHZtYSwgbmV4dCwgJmV2aWN0aW9uX2xpc3QsIGV2aWN0X2xpbmspIHsKIAkJ X19pOTE1X3ZtYV91bnBpbih2bWEpOwogCQlpZiAocmV0ID09IDApCiAJCQlyZXQgPSBpOTE1X3Zt YV91bmJpbmQodm1hKTsKQEAgLTI4NiwzNCArMjg2LDQ4IEBAIGludCBpOTE1X2dlbV9ldmljdF9m b3Jfdm1hKHN0cnVjdCBpOTE1X3ZtYSAqdGFyZ2V0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiAgKiBU byBjbGFyaWZ5OiBUaGlzIGlzIGZvciBmcmVlaW5nIHVwIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSwg bm90IGZvciBmcmVlaW5nCiAgKiBtZW1vcnkgaW4gZS5nLiB0aGUgc2hyaW5rZXIuCiAgKi8KLWlu dCBpOTE1X2dlbV9ldmljdF92bShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwgYm9vbCBk b19pZGxlKQoraW50IGk5MTVfZ2VtX2V2aWN0X3ZtKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2Ug KnZtKQogeworCXN0cnVjdCBsaXN0X2hlYWQgKnBoYXNlc1tdID0geworCQkmdm0tPmluYWN0aXZl X2xpc3QsCisJCSZ2bS0+YWN0aXZlX2xpc3QsCisJCU5VTEwKKwl9LCAqKnBoYXNlOworCXN0cnVj dCBsaXN0X2hlYWQgZXZpY3Rpb25fbGlzdDsKIAlzdHJ1Y3QgaTkxNV92bWEgKnZtYSwgKm5leHQ7 CiAJaW50IHJldDsKIAogCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmdm0tPmRldi0+c3RydWN0 X211dGV4KSk7CiAJdHJhY2VfaTkxNV9nZW1fZXZpY3Rfdm0odm0pOwogCi0JaWYgKGRvX2lkbGUp IHsKLQkJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNSh2bS0+ZGV2 KTsKLQotCQlpZiAoaTkxNV9pc19nZ3R0KHZtKSkgewotCQkJcmV0ID0gaTkxNV9nZW1fc3dpdGNo X3RvX2tlcm5lbF9jb250ZXh0KGRldl9wcml2KTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0dXJuIHJl dDsKLQkJfQotCi0JCXJldCA9IGk5MTVfZ2VtX3dhaXRfZm9yX2lkbGUoZGV2X3ByaXYsIHRydWUp OworCS8qIFN3aXRjaCBiYWNrIHRvIHRoZSBkZWZhdWx0IGNvbnRleHQgaW4gb3JkZXIgdG8gdW5w aW4KKwkgKiB0aGUgZXhpc3RpbmcgY29udGV4dCBvYmplY3RzLiBIb3dldmVyLCBzdWNoIG9iamVj dHMgb25seQorCSAqIHBpbiB0aGVtc2VsdmVzIGluc2lkZSB0aGUgZ2xvYmFsIEdUVCBhbmQgcGVy Zm9ybWluZyB0aGUKKwkgKiBzd2l0Y2ggb3RoZXJ3aXNlIGlzIGluZWZmZWN0aXZlLgorCSAqLwor CWlmIChpOTE1X2lzX2dndHQodm0pKSB7CisJCXJldCA9IGk5MTVfZ2VtX3N3aXRjaF90b19rZXJu ZWxfY29udGV4dCh0b19pOTE1KHZtLT5kZXYpKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7 Ci0KLQkJaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKGRldl9wcml2KTsKLQkJV0FSTl9PTighbGlz dF9lbXB0eSgmdm0tPmFjdGl2ZV9saXN0KSk7CiAJfQogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9z YWZlKHZtYSwgbmV4dCwgJnZtLT5pbmFjdGl2ZV9saXN0LCB2bV9saW5rKQotCQlpZiAoIWk5MTVf dm1hX2lzX3Bpbm5lZCh2bWEpKQotCQkJV0FSTl9PTihpOTE1X3ZtYV91bmJpbmQodm1hKSk7CisJ SU5JVF9MSVNUX0hFQUQoJmV2aWN0aW9uX2xpc3QpOworCXBoYXNlID0gcGhhc2VzOworCWRvIHsK KwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICpwaGFzZSwgdm1fbGluaykgeworCQkJaWYgKGk5 MTVfdm1hX2lzX3Bpbm5lZCh2bWEpKQorCQkJCWNvbnRpbnVlOworCisJCQlfX2k5MTVfdm1hX3Bp bih2bWEpOworCQkJbGlzdF9hZGQoJnZtYS0+ZXZpY3RfbGluaywgJmV2aWN0aW9uX2xpc3QpOwor CQl9CisJfSB3aGlsZSAoKisrcGhhc2UpOwogCi0JcmV0dXJuIDA7CisJcmV0ID0gMDsKKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5X3NhZmUodm1hLCBuZXh0LCAmZXZpY3Rpb25fbGlzdCwgZXZpY3RfbGlu aykgeworCQlfX2k5MTVfdm1hX3VucGluKHZtYSk7CisJCWlmIChyZXQgPT0gMCkKKwkJCXJldCA9 IGk5MTVfdm1hX3VuYmluZCh2bWEpOworCX0KKwlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCmluZGV4IGU5YWM1OTFmM2E3OS4uNzFiMThm Y2JkOGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVm ZmVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCkBA IC00MSwxMSArNDEsMTYgQEAKIAogI2RlZmluZSBEQkdfVVNFX0NQVV9SRUxPQyAwIC8qIC0xIGZv cmNlIEdUVCByZWxvY3M7IDEgZm9yY2UgQ1BVIHJlbG9jcyAqLwogCi0jZGVmaW5lICBfX0VYRUNf T0JKRUNUX0hBU19QSU4JCSgxPDwzMSkKLSNkZWZpbmUgIF9fRVhFQ19PQkpFQ1RfSEFTX0ZFTkNF CSgxPDwzMCkKLSNkZWZpbmUgIF9fRVhFQ19PQkpFQ1RfTkVFRFNfTUFQCSgxPDwyOSkKLSNkZWZp bmUgIF9fRVhFQ19PQkpFQ1RfTkVFRFNfQklBUwkoMTw8MjgpCisjZGVmaW5lICBfX0VYRUNfT0JK RUNUX0hBU19QSU4JCUJJVCgzMSkKKyNkZWZpbmUgIF9fRVhFQ19PQkpFQ1RfSEFTX0ZFTkNFCUJJ VCgzMCkKKyNkZWZpbmUgIF9fRVhFQ19PQkpFQ1RfTkVFRFNfTUFQCUJJVCgyOSkKKyNkZWZpbmUg IF9fRVhFQ19PQkpFQ1RfTkVFRFNfQklBUwlCSVQoMjgpCiAjZGVmaW5lICBfX0VYRUNfT0JKRUNU X0lOVEVSTkFMX0ZMQUdTICgweGY8PDI4KSAvKiBhbGwgb2YgdGhlIGFib3ZlICovCisjZGVmaW5l IF9fRUJfUkVTRVJWRUQgKF9fRVhFQ19PQkpFQ1RfSEFTX1BJTiB8IF9fRVhFQ19PQkpFQ1RfSEFT X0ZFTkNFKQorCisjZGVmaW5lIF9fRVhFQ19IQVNfUkVMT0MJQklUKDMxKQorI2RlZmluZSBfX0VY RUNfVkFMSURBVEVECUJJVCgzMCkKKyNkZWZpbmUgVVBEQVRFCQkJUElOX09GRlNFVF9GSVhFRAog CiAjZGVmaW5lIEJBVENIX09GRlNFVF9CSUFTICgyNTYqMTAyNCkKIApAQCAtNTksMjEgKzY0LDQz IEBAIHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgewogCXN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2Ug KnZtOwogCXN0cnVjdCBpOTE1X3ZtYSAqYmF0Y2g7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1 ZXN0ICpyZXF1ZXN0OwotCXUzMiBiYXRjaF9zdGFydF9vZmZzZXQ7Ci0JdW5zaWduZWQgaW50IGRp c3BhdGNoX2ZsYWdzOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIHNoYWRvd19l eGVjX2VudHJ5OwotCWJvb2wgbmVlZF9yZWxvY3M7Ci0Jc3RydWN0IGxpc3RfaGVhZCB2bWFzOwor CXN0cnVjdCBsaXN0X2hlYWQgdW5ib3VuZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJlbG9jczsKIAlz dHJ1Y3QgcmVsb2NfY2FjaGUgewogCQlzdHJ1Y3QgZHJtX21tX25vZGUgbm9kZTsKIAkJdW5zaWdu ZWQgbG9uZyB2YWRkcjsKIAkJdW5zaWduZWQgaW50IHBhZ2U7CiAJCWJvb2wgdXNlXzY0Yml0X3Jl bG9jOworCQlib29sIGhhc19sbGM7CisJCWJvb2wgaGFzX2ZlbmNlOwogCX0gcmVsb2NfY2FjaGU7 CisJdTY0IGludmFsaWRfZmxhZ3M7CisJdTMyIGNvbnRleHRfZmxhZ3M7CisJdTMyIGRpc3BhdGNo X2ZsYWdzOwogCWludCBsdXRfbWFzazsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqYnVja2V0czsKIH07 CiAKKyNkZWZpbmUgdG9fcHRyKFQsIHgpICgoVCAqKSh1aW50cHRyX3QpKHgpKQorCisvKiBVc2Vk IHRvIGNvbnZlcnQgYW55IGFkZHJlc3MgdG8gY2Fub25pY2FsIGZvcm0uCisgKiBTdGFydGluZyBm cm9tIGdlbjgsIHNvbWUgY29tbWFuZHMgKGUuZy4gU1RBVEVfQkFTRV9BRERSRVNTLAorICogTUlf TE9BRF9SRUdJU1RFUl9NRU0gYW5kIG90aGVycywgc2VlIEJyb2Fkd2VsbCBQUk0gVm9sMmEpIHJl cXVpcmUgdGhlCisgKiBhZGRyZXNzZXMgdG8gYmUgaW4gYSBjYW5vbmljYWwgZm9ybToKKyAqICJH cmFwaGljc0FkZHJlc3NbNjM6NDhdIGFyZSBpZ25vcmVkIGJ5IHRoZSBIVyBhbmQgYXNzdW1lZCB0 byBiZSBpbiBjb3JyZWN0CisgKiBjYW5vbmljYWwgZm9ybSBbNjM6NDhdID09IFs0N10uIgorICov CisjZGVmaW5lIEdFTjhfSElHSF9BRERSRVNTX0JJVCA0Nworc3RhdGljIGlubGluZSB1NjQgZ2Vu OF9jYW5vbmljYWxfYWRkcih1NjQgYWRkcmVzcykKK3sKKwlyZXR1cm4gc2lnbl9leHRlbmQ2NChh ZGRyZXNzLCBHRU44X0hJR0hfQUREUkVTU19CSVQpOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBn ZW44X25vbmNhbm9uaWNhbF9hZGRyKHU2NCBhZGRyZXNzKQoreworCXJldHVybiBhZGRyZXNzICYg KCgxVUxMIDw8IChHRU44X0hJR0hfQUREUkVTU19CSVQgKyAxKSkgLSAxKTsKK30KKwogc3RhdGlj IGludAogZWJfY3JlYXRlKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQogewpAQCAtMTAxLDgw ICsxMjgsMzQwIEBAIGViX2NyZWF0ZShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikKIAlyZXR1 cm4gMDsKIH0KIAorc3RhdGljIGJvb2wKK2ViX3ZtYV9taXNwbGFjZWQoY29uc3Qgc3RydWN0IGRy bV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmVudHJ5LAorCQkgY29uc3Qgc3RydWN0IGk5MTVfdm1h ICp2bWEpCit7CisJaWYgKChlbnRyeS0+ZmxhZ3MgJiBfX0VYRUNfT0JKRUNUX0hBU19QSU4pID09 IDApCisJCXJldHVybiB0cnVlOworCisJaWYgKHZtYS0+bm9kZS5zaXplIDwgZW50cnktPnBhZF90 b19zaXplKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChlbnRyeS0+YWxpZ25tZW50ICYmIHZtYS0+ bm9kZS5zdGFydCAmIChlbnRyeS0+YWxpZ25tZW50IC0gMSkpCisJCXJldHVybiB0cnVlOworCisJ aWYgKGVudHJ5LT5mbGFncyAmIEVYRUNfT0JKRUNUX1BJTk5FRCAmJgorCSAgICB2bWEtPm5vZGUu c3RhcnQgIT0gZW50cnktPm9mZnNldCkKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAoZW50cnktPmZs YWdzICYgX19FWEVDX09CSkVDVF9ORUVEU19CSUFTICYmCisJICAgIHZtYS0+bm9kZS5zdGFydCA8 IEJBVENIX09GRlNFVF9CSUFTKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmICgoZW50cnktPmZsYWdz ICYgRVhFQ19PQkpFQ1RfU1VQUE9SVFNfNDhCX0FERFJFU1MpID09IDAgJiYKKwkgICAgKHZtYS0+ bm9kZS5zdGFydCArIHZtYS0+bm9kZS5zaXplIC0gMSkgPj4gMzIpCisJCXJldHVybiB0cnVlOwor CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZAorZWJfcGluX3ZtYShzdHJ1Y3QgaTkx NV9leGVjYnVmZmVyICplYiwKKwkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAq ZW50cnksCisJICAgc3RydWN0IGk5MTVfdm1hICp2bWEpCit7CisJdTY0IGZsYWdzOworCisJZmxh Z3MgPSB2bWEtPm5vZGUuc3RhcnQ7CisJZmxhZ3MgfD0gUElOX1VTRVIgfCBQSU5fTk9OQkxPQ0sg fCBQSU5fT0ZGU0VUX0ZJWEVEOworCWlmICh1bmxpa2VseShlbnRyeS0+ZmxhZ3MgJiBFWEVDX09C SkVDVF9ORUVEU19HVFQpKQorCQlmbGFncyB8PSBQSU5fR0xPQkFMOworCWlmICh1bmxpa2VseShp OTE1X3ZtYV9waW4odm1hLCAwLCAwLCBmbGFncykpKQorCQlyZXR1cm47CisKKwlpZiAoZW50cnkt PmZsYWdzICYgRVhFQ19PQkpFQ1RfTkVFRFNfRkVOQ0UpIHsKKwkJaWYgKHVubGlrZWx5KGk5MTVf dm1hX2dldF9mZW5jZSh2bWEpKSkgeworCQkJaTkxNV92bWFfdW5waW4odm1hKTsKKwkJCXJldHVy bjsKKwkJfQorCisJCWlmIChpOTE1X3ZtYV9waW5fZmVuY2Uodm1hKSkKKwkJCWVudHJ5LT5mbGFn cyB8PSBfX0VYRUNfT0JKRUNUX0hBU19GRU5DRTsKKwl9CisKKwllbnRyeS0+ZmxhZ3MgfD0gX19F WEVDX09CSkVDVF9IQVNfUElOOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQKIF9fZWJfdW5yZXNl cnZlX3ZtYShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKIAkJICAgY29uc3Qgc3RydWN0IGRybV9pOTE1 X2dlbV9leGVjX29iamVjdDIgKmVudHJ5KQogeworCUdFTV9CVUdfT04oKGVudHJ5LT5mbGFncyAm IF9fRVhFQ19PQkpFQ1RfSEFTX1BJTikgPT0gMCk7CisKIAlpZiAodW5saWtlbHkoZW50cnktPmZs YWdzICYgX19FWEVDX09CSkVDVF9IQVNfRkVOQ0UpKQogCQlpOTE1X3ZtYV91bnBpbl9mZW5jZSh2 bWEpOwogCi0JaWYgKGVudHJ5LT5mbGFncyAmIF9fRVhFQ19PQkpFQ1RfSEFTX1BJTikKLQkJX19p OTE1X3ZtYV91bnBpbih2bWEpOworCV9faTkxNV92bWFfdW5waW4odm1hKTsKIH0KIAotc3RhdGlj IHZvaWQKLWViX3VucmVzZXJ2ZV92bWEoc3RydWN0IGk5MTVfdm1hICp2bWEpCitzdGF0aWMgaW5s aW5lIHZvaWQKK2ViX3VucmVzZXJ2ZV92bWEoc3RydWN0IGk5MTVfdm1hICp2bWEsCisJCSBzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZW50cnkpCiB7Ci0Jc3RydWN0IGRybV9pOTE1 X2dlbV9leGVjX29iamVjdDIgKmVudHJ5ID0gdm1hLT5leGVjX2VudHJ5OwotCi0JX19lYl91bnJl c2VydmVfdm1hKHZtYSwgZW50cnkpOwotCWVudHJ5LT5mbGFncyAmPSB+KF9fRVhFQ19PQkpFQ1Rf SEFTX0ZFTkNFIHwgX19FWEVDX09CSkVDVF9IQVNfUElOKTsKKwlpZiAoZW50cnktPmZsYWdzICYg X19FWEVDX09CSkVDVF9IQVNfUElOKSB7CisJCV9fZWJfdW5yZXNlcnZlX3ZtYSh2bWEsIGVudHJ5 KTsKKwkJZW50cnktPmZsYWdzICY9IH5fX0VCX1JFU0VSVkVEOworCX0KIH0KIAotc3RhdGljIHZv aWQKLWViX3Jlc2V0KHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQorc3RhdGljIGludAorZWJf YWRkX3ZtYShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwKKwkgICBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2V4ZWNfb2JqZWN0MiAqZW50cnksCisJICAgc3RydWN0IGk5MTVfdm1hICp2bWEpCiB7Ci0J c3RydWN0IGk5MTVfdm1hICp2bWE7CisJaW50IHJldDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnko dm1hLCAmZWItPnZtYXMsIGV4ZWNfbGlzdCkgewotCQllYl91bnJlc2VydmVfdm1hKHZtYSk7Ci0J CXZtYS0+ZXhlY19lbnRyeSA9IE5VTEw7Ci0JfQorCUdFTV9CVUdfT04oaTkxNV92bWFfaXNfY2xv c2VkKHZtYSkpOwogCi0JaWYgKGViLT5sdXRfbWFzayA+PSAwKQotCQltZW1zZXQoZWItPmJ1Y2tl dHMsIDAsCi0JCSAgICAgICAoMTw8ZWItPmx1dF9tYXNrKSpzaXplb2Yoc3RydWN0IGhsaXN0X2hl YWQpKTsKLX0KKwlpZiAoKGViLT5hcmdzLT5mbGFncyAmIF9fRVhFQ19WQUxJREFURUQpID09IDAp IHsKKwkJaWYgKHVubGlrZWx5KGVudHJ5LT5mbGFncyAmIGViLT5pbnZhbGlkX2ZsYWdzKSkKKwkJ CXJldHVybiAtRUlOVkFMOwogCi0jZGVmaW5lIHRvX3B0cihULCB4KSAoKFQgKikodWludHB0cl90 KSh4KSkKKwkJaWYgKHVubGlrZWx5KGVudHJ5LT5hbGlnbm1lbnQgJiYgIWlzX3Bvd2VyX29mXzIo ZW50cnktPmFsaWdubWVudCkpKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAKLXN0YXRpYyBib29sCi1l Yl9hZGRfdm1hKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViLCBzdHJ1Y3QgaTkxNV92bWEgKnZt YSwgaW50IGkpCi17Ci0JaWYgKHVubGlrZWx5KHZtYS0+ZXhlY19lbnRyeSkpIHsKLQkJRFJNX0RF QlVHKCJPYmplY3QgW2hhbmRsZSAlZCwgaW5kZXggJWRdIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2Ug aW4gb2JqZWN0IGxpc3RcbiIsCi0JCQkgIGViLT5leGVjW2ldLmhhbmRsZSwgaSk7Ci0JCXJldHVy biBmYWxzZTsKKwkJLyogT2Zmc2V0IGNhbiBiZSB1c2VkIGFzIGlucHV0IChFWEVDX09CSkVDVF9Q SU5ORUQpLCByZWplY3QKKwkJICogYW55IG5vbi1wYWdlLWFsaWduZWQgb3Igbm9uLWNhbm9uaWNh bCBhZGRyZXNzZXMuCisJCSAqLworCQlpZiAoZW50cnktPmZsYWdzICYgRVhFQ19PQkpFQ1RfUElO TkVEKSB7CisJCQlpZiAodW5saWtlbHkoZW50cnktPm9mZnNldCAhPQorCQkJCSAgICAgZ2VuOF9j YW5vbmljYWxfYWRkcihlbnRyeS0+b2Zmc2V0ICYgUEFHRV9NQVNLKSkpCisJCQkJcmV0dXJuIC1F SU5WQUw7CisJCX0KKworCQkvKiBGcm9tIGRybV9tbSBwZXJzcGVjdGl2ZSBhZGRyZXNzIHNwYWNl IGlzIGNvbnRpbnVvdXMsCisJCSAqIHNvIGZyb20gdGhpcyBwb2ludCB3ZSdyZSBhbHdheXMgdXNp bmcgbm9uLWNhbm9uaWNhbAorCQkgKiBmb3JtIGludGVybmFsbHkuCisJCSAqLworCQllbnRyeS0+ b2Zmc2V0ID0gZ2VuOF9ub25jYW5vbmljYWxfYWRkcihlbnRyeS0+b2Zmc2V0KTsKKworCQkvKiBw YWRfdG9fc2l6ZSB3YXMgb25jZSBhIHJlc2VydmVkIGZpZWxkLCBzbyBzYW5pdGl6ZSBpdCAqLwor CQlpZiAoZW50cnktPmZsYWdzICYgRVhFQ19PQkpFQ1RfUEFEX1RPX1NJWkUpIHsKKwkJCWlmICh1 bmxpa2VseShvZmZzZXRfaW5fcGFnZShlbnRyeS0+cGFkX3RvX3NpemUpKSkKKwkJCQlyZXR1cm4g LUVJTlZBTDsKKwkJfSBlbHNlIHsKKwkJCWVudHJ5LT5wYWRfdG9fc2l6ZSA9IDA7CisJCX0KKwor CQlpZiAodW5saWtlbHkodm1hLT5leGVjX2VudHJ5KSkgeworCQkJRFJNX0RFQlVHKCJPYmplY3Qg W2hhbmRsZSAlZCwgaW5kZXggJWRdIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gb2JqZWN0IGxp c3RcbiIsCisJCQkJICBlbnRyeS0+aGFuZGxlLCAoaW50KShlbnRyeSAtIGViLT5leGVjKSk7CisJ CQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCX0KLQlsaXN0X2FkZF90YWlsKCZ2bWEtPmV4ZWNfbGlz dCwgJmViLT52bWFzKTsKIAotCXZtYS0+ZXhlY19lbnRyeSA9ICZlYi0+ZXhlY1tpXTsKKwl2bWEt PmV4ZWNfZW50cnkgPSBlbnRyeTsKKwllbnRyeS0+cnN2ZDIgPSAodWludHB0cl90KXZtYTsKKwog CWlmIChlYi0+bHV0X21hc2sgPj0gMCkgewotCQl2bWEtPmV4ZWNfaGFuZGxlID0gZWItPmV4ZWNb aV0uaGFuZGxlOworCQl2bWEtPmV4ZWNfaGFuZGxlID0gZW50cnktPmhhbmRsZTsKIAkJaGxpc3Rf YWRkX2hlYWQoJnZtYS0+ZXhlY19ub2RlLAotCQkJICAgICAgICZlYi0+YnVja2V0c1toYXNoXzMy KHZtYS0+ZXhlY19oYW5kbGUsCisJCQkgICAgICAgJmViLT5idWNrZXRzW2hhc2hfMzIoZW50cnkt PmhhbmRsZSwKIAkJCQkJCSAgICBlYi0+bHV0X21hc2spXSk7CiAJfQogCi0JZWItPmV4ZWNbaV0u cnN2ZDIgPSAodWludHB0cl90KXZtYTsKLQlyZXR1cm4gdHJ1ZTsKKwlpZiAoZW50cnktPnJlbG9j YXRpb25fY291bnQpCisJCWxpc3RfYWRkX3RhaWwoJnZtYS0+cmVsb2NfbGluaywgJmViLT5yZWxv Y3MpOworCisJaWYgKCFlYi0+cmVsb2NfY2FjaGUuaGFzX2ZlbmNlKSB7CisJCWVudHJ5LT5mbGFn cyAmPSB+RVhFQ19PQkpFQ1RfTkVFRFNfRkVOQ0U7CisJfSBlbHNlIHsKKwkJaWYgKGVudHJ5LT5m bGFncyAmIEVYRUNfT0JKRUNUX05FRURTX0ZFTkNFICYmCisJCSAgICBpOTE1X2dlbV9vYmplY3Rf aXNfdGlsZWQodm1hLT5vYmopKQorCQkJZW50cnktPmZsYWdzIHw9IEVYRUNfT0JKRUNUX05FRURT X0dUVCB8IF9fRVhFQ19PQkpFQ1RfTkVFRFNfTUFQOworCX0KKworCWlmICgoZW50cnktPmZsYWdz ICYgRVhFQ19PQkpFQ1RfUElOTkVEKSA9PSAwKQorCQllbnRyeS0+ZmxhZ3MgfD0gZWItPmNvbnRl eHRfZmxhZ3M7CisKKwlyZXQgPSAwOworCWlmICh2bWEtPm5vZGUuc2l6ZSkKKwkJZWJfcGluX3Zt YShlYiwgZW50cnksIHZtYSk7CisJaWYgKGViX3ZtYV9taXNwbGFjZWQoZW50cnksIHZtYSkpIHsK KwkJZWJfdW5yZXNlcnZlX3ZtYSh2bWEsIGVudHJ5KTsKKworCQlsaXN0X2FkZF90YWlsKCZ2bWEt PmV4ZWNfbGluaywgJmViLT51bmJvdW5kKTsKKwkJaWYgKGRybV9tbV9ub2RlX2FsbG9jYXRlZCgm dm1hLT5ub2RlKSkKKwkJCXJldCA9IGk5MTVfdm1hX3VuYmluZCh2bWEpOworCX0gZWxzZSB7CisJ CWlmIChlbnRyeS0+b2Zmc2V0ICE9IHZtYS0+bm9kZS5zdGFydCkgeworCQkJZW50cnktPm9mZnNl dCA9IHZtYS0+bm9kZS5zdGFydCB8IFVQREFURTsKKwkJCWViLT5hcmdzLT5mbGFncyB8PSBfX0VY RUNfSEFTX1JFTE9DOworCQl9CisJfQorCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUg c3RydWN0IGhsaXN0X2hlYWQgKmh0X2hlYWQoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwK LQkJCQkJIHUzMiBoYW5kbGUpCitzdGF0aWMgaW5saW5lIGludCB1c2VfY3B1X3JlbG9jKGNvbnN0 IHN0cnVjdCByZWxvY19jYWNoZSAqY2FjaGUsCisJCQkJY29uc3Qgc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaikKK3sKKwlpZiAoIWk5MTVfZ2VtX29iamVjdF9oYXNfc3RydWN0X3BhZ2Uo b2JqKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKERCR19VU0VfQ1BVX1JFTE9DKQorCQlyZXR1 cm4gREJHX1VTRV9DUFVfUkVMT0MgPiAwOworCisJcmV0dXJuIChjYWNoZS0+aGFzX2xsYyB8fAor CQlvYmotPmJhc2Uud3JpdGVfZG9tYWluID09IEk5MTVfR0VNX0RPTUFJTl9DUFUgfHwKKwkJb2Jq LT5jYWNoZV9sZXZlbCAhPSBJOTE1X0NBQ0hFX05PTkUpOworfQorCitzdGF0aWMgaW50CitlYl9y ZXNlcnZlX3ZtYShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwgc3RydWN0IGk5MTVfdm1hICp2 bWEpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmVudHJ5ID0gdm1hLT5l eGVjX2VudHJ5OworCXU2NCBmbGFnczsKKwlpbnQgcmV0OworCisJZmxhZ3MgPSBQSU5fVVNFUiB8 IFBJTl9OT05CTE9DSzsKKwlpZiAoZW50cnktPmZsYWdzICYgRVhFQ19PQkpFQ1RfTkVFRFNfR1RU KQorCQlmbGFncyB8PSBQSU5fR0xPQkFMOworCisJaWYgKCFkcm1fbW1fbm9kZV9hbGxvY2F0ZWQo JnZtYS0+bm9kZSkpIHsKKwkJLyogV2EzMmJpdEdlbmVyYWxTdGF0ZU9mZnNldCAmIFdhMzJiaXRJ bnN0cnVjdGlvbkJhc2VPZmZzZXQsCisJCSAqIGxpbWl0IGFkZHJlc3MgdG8gdGhlIGZpcnN0IDRH QnMgZm9yIHVuZmxhZ2dlZCBvYmplY3RzLgorCQkgKi8KKwkJaWYgKChlbnRyeS0+ZmxhZ3MgJiBF WEVDX09CSkVDVF9TVVBQT1JUU180OEJfQUREUkVTUykgPT0gMCkKKwkJCWZsYWdzIHw9IFBJTl9a T05FXzRHOworCisJCWlmIChlbnRyeS0+ZmxhZ3MgJiBfX0VYRUNfT0JKRUNUX05FRURTX01BUCkK KwkJCWZsYWdzIHw9IFBJTl9NQVBQQUJMRTsKKworCQlpZiAoZW50cnktPmZsYWdzICYgRVhFQ19P QkpFQ1RfUElOTkVEKSB7CisJCQlmbGFncyB8PSBlbnRyeS0+b2Zmc2V0IHwgUElOX09GRlNFVF9G SVhFRDsKKwkJCS8qIGZvcmNlIG92ZXJsYXBwaW5nIFBJTk5FRCBjaGVja3MgKi8KKwkJCWZsYWdz ICY9IH5QSU5fTk9OQkxPQ0s7CisJCX0gZWxzZSBpZiAoZW50cnktPmZsYWdzICYgX19FWEVDX09C SkVDVF9ORUVEU19CSUFTKQorCQkJZmxhZ3MgfD0gQkFUQ0hfT0ZGU0VUX0JJQVMgfCBQSU5fT0ZG U0VUX0JJQVM7CisJfQorCisJcmV0ID0gaTkxNV92bWFfcGluKHZtYSwgZW50cnktPnBhZF90b19z aXplLCBlbnRyeS0+YWxpZ25tZW50LCBmbGFncyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCWlmIChlbnRyeS0+b2Zmc2V0ICE9IHZtYS0+bm9kZS5zdGFydCkgeworCQllbnRyeS0+b2Zm c2V0ID0gdm1hLT5ub2RlLnN0YXJ0IHwgVVBEQVRFOworCQllYi0+YXJncy0+ZmxhZ3MgfD0gX19F WEVDX0hBU19SRUxPQzsKKwl9CisJZW50cnktPmZsYWdzIHw9IF9fRVhFQ19PQkpFQ1RfSEFTX1BJ TjsKKworCWlmIChlbnRyeS0+ZmxhZ3MgJiBFWEVDX09CSkVDVF9ORUVEU19GRU5DRSkgeworCQly ZXQgPSBpOTE1X3ZtYV9nZXRfZmVuY2Uodm1hKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7 CisKKwkJaWYgKGk5MTVfdm1hX3Bpbl9mZW5jZSh2bWEpKQorCQkJZW50cnktPmZsYWdzIHw9IF9f RVhFQ19PQkpFQ1RfSEFTX0ZFTkNFOworCX0KKworCUdFTV9CVUdfT04oZWJfdm1hX21pc3BsYWNl ZChlbnRyeSwgdm1hKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZWJfcmVzZXJ2ZShz dHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikKK3sKKwljb25zdCB1bnNpZ25lZCBpbnQgY291bnQg PSBlYi0+YXJncy0+YnVmZmVyX2NvdW50OworCXN0cnVjdCBsaXN0X2hlYWQgbGFzdDsKKwlzdHJ1 Y3QgaTkxNV92bWEgKnZtYTsKKwl1bnNpZ25lZCBpbnQgaSwgcGFzczsKKwlpbnQgcmV0OworCisJ LyogQXR0ZW1wdCB0byBwaW4gYWxsIG9mIHRoZSBidWZmZXJzIGludG8gdGhlIEdUVC4KKwkgKiBU aGlzIGlzIGRvbmUgaW4gMyBwaGFzZXM6CisJICoKKwkgKiAxYS4gVW5iaW5kIGFsbCBvYmplY3Rz IHRoYXQgZG8gbm90IG1hdGNoIHRoZSBHVFQgY29uc3RyYWludHMgZm9yCisJICogICAgIHRoZSBl eGVjYnVmZmVyIChmZW5jZWFibGUsIG1hcHBhYmxlLCBhbGlnbm1lbnQgZXRjKS4KKwkgKiAxYi4g SW5jcmVtZW50IHBpbiBjb3VudCBmb3IgYWxyZWFkeSBib3VuZCBvYmplY3RzLgorCSAqIDIuICBC aW5kIG5ldyBvYmplY3RzLgorCSAqIDMuICBEZWNyZW1lbnQgcGluIGNvdW50LgorCSAqCisJICog VGhpcyBhdm9pZCB1bm5lY2Vzc2FyeSB1bmJpbmRpbmcgb2YgbGF0ZXIgb2JqZWN0cyBpbiBvcmRl ciB0byBtYWtlCisJICogcm9vbSBmb3IgdGhlIGVhcmxpZXIgb2JqZWN0cyAqdW5sZXNzKiB3ZSBu ZWVkIHRvIGRlZnJhZ21lbnQuCisJICovCisKKwlwYXNzID0gMDsKKwlyZXQgPSAwOworCWRvIHsK KwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZlYi0+dW5ib3VuZCwgZXhlY19saW5rKSB7CisJ CQlyZXQgPSBlYl9yZXNlcnZlX3ZtYShlYiwgdm1hKTsKKwkJCWlmIChyZXQpCisJCQkJYnJlYWs7 CisJCX0KKwkJaWYgKHJldCAhPSAtRU5PU1BDIHx8IHBhc3MrKykKKwkJCXJldHVybiByZXQ7CisK KwkJLyogUmVzb3J0ICphbGwqIHRoZSBvYmplY3RzIGludG8gcHJpb3JpdHkgb3JkZXIgKi8KKwkJ SU5JVF9MSVNUX0hFQUQoJmViLT51bmJvdW5kKTsKKwkJSU5JVF9MSVNUX0hFQUQoJmxhc3QpOwor CQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQkJc3RydWN0IGRybV9pOTE1X2dlbV9l eGVjX29iamVjdDIgKmVudHJ5ID0gJmViLT5leGVjW2ldOworCisJCQl2bWEgPSB0b19wdHIoc3Ry dWN0IGk5MTVfdm1hLCBlbnRyeS0+cnN2ZDIpOworCQkJZWJfdW5yZXNlcnZlX3ZtYSh2bWEsIGVu dHJ5KTsKKworCQkJaWYgKGVudHJ5LT5mbGFncyAmIEVYRUNfT0JKRUNUX1BJTk5FRCkKKwkJCQls aXN0X2FkZCgmdm1hLT5leGVjX2xpbmssICZlYi0+dW5ib3VuZCk7CisJCQllbHNlIGlmIChlbnRy eS0+ZmxhZ3MgJiBfX0VYRUNfT0JKRUNUX05FRURTX01BUCkKKwkJCQlsaXN0X2FkZF90YWlsKCZ2 bWEtPmV4ZWNfbGluaywgJmViLT51bmJvdW5kKTsKKwkJCWVsc2UKKwkJCQlsaXN0X2FkZF90YWls KCZ2bWEtPmV4ZWNfbGluaywgJmxhc3QpOworCQl9CisJCWxpc3Rfc3BsaWNlX3RhaWwoJmxhc3Qs ICZlYi0+dW5ib3VuZCk7CisKKwkJLyogVG9vIGZyYWdtZW50ZWQsIHVuYmluZCBldmVyeXRoaW5n IGFuZCByZXRyeSAqLworCQlyZXQgPSBpOTE1X2dlbV9ldmljdF92bShlYi0+dm0pOworCQlpZiAo cmV0KQorCQkJcmV0dXJuIHJldDsKKwl9IHdoaWxlICgxKTsKK30KKworc3RhdGljIGlubGluZSBz dHJ1Y3QgaGxpc3RfaGVhZCAqCitodF9oZWFkKGNvbnN0IHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0 ICpjdHgsIHUzMiBoYW5kbGUpCiB7CiAJcmV0dXJuICZjdHgtPnZtYS5odFtoYXNoXzMyKGhhbmRs ZSwgY3R4LT52bWEuaHRfYml0cyldOwogfQogCitzdGF0aWMgaW50IGViX2JhdGNoX2luZGV4KGNv bnN0IHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQoreworCXJldHVybiBlYi0+YXJncy0+YnVm ZmVyX2NvdW50IC0gMTsKK30KKworc3RhdGljIGludCBlYl9zZWxlY3RfY29udGV4dChzdHJ1Y3Qg aTkxNV9leGVjYnVmZmVyICplYikKK3sKKwlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4Owor CisJY3R4ID0gaTkxNV9nZW1fY29udGV4dF9sb29rdXAoZWItPmZpbGUtPmRyaXZlcl9wcml2LCBl Yi0+YXJncy0+cnN2ZDEpOworCWlmICh1bmxpa2VseShJU19FUlIoY3R4KSkpCisJCXJldHVybiBQ VFJfRVJSKGN0eCk7CisKKwlpZiAodW5saWtlbHkoY3R4LT5oYW5nX3N0YXRzLmJhbm5lZCkpIHsK KwkJRFJNX0RFQlVHKCJDb250ZXh0ICV1IHRyaWVkIHRvIHN1Ym1pdCB3aGlsZSBiYW5uZWRcbiIs CisJCQkgIGN0eC0+dXNlcl9oYW5kbGUpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwllYi0+Y3R4 ID0gaTkxNV9nZW1fY29udGV4dF9nZXQoY3R4KTsKKwllYi0+dm0gPSBjdHgtPnBwZ3R0ID8gJmN0 eC0+cHBndHQtPmJhc2UgOiAmZWItPmk5MTUtPmdndHQuYmFzZTsKKworCWViLT5jb250ZXh0X2Zs YWdzID0gMDsKKwlpZiAoY3R4LT5mbGFncyAmIENPTlRFWFRfTk9fWkVST01BUCkKKwkJZWItPmNv bnRleHRfZmxhZ3MgfD0gX19FWEVDX09CSkVDVF9ORUVEU19CSUFTOworCisJcmV0dXJuIDA7Cit9 CisKIHN0YXRpYyBpbnQKIGViX2xvb2t1cF92bWFzKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmVi KQogewogCWNvbnN0IGludCBjb3VudCA9IGViLT5hcmdzLT5idWZmZXJfY291bnQ7CiAJc3RydWN0 IGk5MTVfdm1hICp2bWE7CisJc3RydWN0IGlkciAqaWRyOwogCWludCBzbG93X3Bhc3MgPSAtMTsK LQlpbnQgaTsKKwlpbnQgaSwgcmV0OwogCi0JSU5JVF9MSVNUX0hFQUQoJmViLT52bWFzKTsKKwlJ TklUX0xJU1RfSEVBRCgmZWItPnJlbG9jcyk7CisJSU5JVF9MSVNUX0hFQUQoJmViLT51bmJvdW5k KTsKIAogCWlmICh1bmxpa2VseShlYi0+Y3R4LT52bWEuaHRfc2l6ZSAmIDEpKQogCQlmbHVzaF93 b3JrKCZlYi0+Y3R4LT52bWEucmVzaXplKTsKQEAgLTE4Nyw4ICs0NzQsOSBAQCBlYl9sb29rdXBf dm1hcyhzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikKIAkJCWlmICh2bWEtPmN0eF9oYW5kbGUg IT0gZWItPmV4ZWNbaV0uaGFuZGxlKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoIWViX2FkZF92 bWEoZWIsIHZtYSwgaSkpCi0JCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlyZXQgPSBlYl9hZGRfdm1h KGViLCAmZWItPmV4ZWNbaV0sIHZtYSk7CisJCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCQlyZXR1 cm4gcmV0OwogCiAJCQlnb3RvIG5leHRfdm1hOwogCQl9CkBAIC0xOTksMjQgKzQ4NywyNSBAQCBu ZXh0X3ZtYTogOwogCX0KIAogCWlmIChzbG93X3Bhc3MgPCAwKQotCQlyZXR1cm4gMDsKKwkJZ290 byBvdXQ7CiAKIAlzcGluX2xvY2soJmViLT5maWxlLT50YWJsZV9sb2NrKTsKIAkvKiBHcmFiIGEg cmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgYW5kIHJlbGVhc2UgdGhlIGxvY2sgc28gd2UgY2FuIGxv b2t1cAogCSAqIG9yIGNyZWF0ZSB0aGUgVk1BIHdpdGhvdXQgdXNpbmcgR0ZQX0FUT01JQyAqLwor CWlkciA9ICZlYi0+ZmlsZS0+b2JqZWN0X2lkcjsKIAlmb3IgKGkgPSBzbG93X3Bhc3M7IGkgPCBj b3VudDsgaSsrKSB7CiAJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAKIAkJaWYg KGViLT5leGVjW2ldLnJzdmQyKQogCQkJY29udGludWU7CiAKLQkJb2JqID0gdG9faW50ZWxfYm8o aWRyX2ZpbmQoJmViLT5maWxlLT5vYmplY3RfaWRyLAotCQkJCQkgICBlYi0+ZXhlY1tpXS5oYW5k bGUpKTsKKwkJb2JqID0gdG9faW50ZWxfYm8oaWRyX2ZpbmQoaWRyLCBlYi0+ZXhlY1tpXS5oYW5k bGUpKTsKIAkJaWYgKHVubGlrZWx5KCFvYmopKSB7CiAJCQlzcGluX3VubG9jaygmZWItPmZpbGUt PnRhYmxlX2xvY2spOwogCQkJRFJNX0RFQlVHKCJJbnZhbGlkIG9iamVjdCBoYW5kbGUgJWQgYXQg aW5kZXggJWRcbiIsCiAJCQkJICBlYi0+ZXhlY1tpXS5oYW5kbGUsIGkpOwotCQkJcmV0dXJuIC1F Tk9FTlQ7CisJCQlyZXQgPSAtRU5PRU5UOworCQkJZ290byBlcnI7CiAJCX0KIAogCQllYi0+ZXhl Y1tpXS5yc3ZkMiA9IDEgfCAodWludHB0cl90KW9iajsKQEAgLTIzNywxMSArNTI2LDEyIEBAIG5l eHRfdm1hOiA7CiAJCSAqIGZyb20gdGhlIChvYmosIHZtKSB3ZSBkb24ndCBydW4gdGhlIHJpc2sg b2YgY3JlYXRpbmcKIAkJICogZHVwbGljYXRlZCB2bWFzIGZvciB0aGUgc2FtZSB2bS4KIAkJICov Ci0JCW9iaiA9IHRvX3B0cihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwgZWItPmV4ZWNbaV0u cnN2ZDIgJiB+MSk7CisJCW9iaiA9IHRvX3B0cih0eXBlb2YoKm9iaiksIGViLT5leGVjW2ldLnJz dmQyICYgfjEpOwogCQl2bWEgPSBpOTE1X2dlbV9vYmpfbG9va3VwX29yX2NyZWF0ZV92bWEob2Jq LCBlYi0+dm0sIE5VTEwpOwogCQlpZiAodW5saWtlbHkoSVNfRVJSKHZtYSkpKSB7CiAJCQlEUk1f REVCVUcoIkZhaWxlZCB0byBsb29rdXAgVk1BXG4iKTsKLQkJCXJldHVybiBQVFJfRVJSKHZtYSk7 CisJCQlyZXQgPSBQVFJfRVJSKHZtYSk7CisJCQlnb3RvIGVycjsKIAkJfQogCiAJCS8qIEZpcnN0 IGNvbWUsIGZpcnN0IHNlcnZlZCAqLwpAQCAtMjU3LDggKzU0Nyw5IEBAIG5leHRfdm1hOiA7CiAJ CQl9CiAJCX0KIAotCQlpZiAoIWViX2FkZF92bWEoZWIsIHZtYSwgaSkpCi0JCQlyZXR1cm4gLUVJ TlZBTDsKKwkJcmV0ID0gZWJfYWRkX3ZtYShlYiwgJmViLT5leGVjW2ldLCB2bWEpOworCQlpZiAo dW5saWtlbHkocmV0KSkKKwkJCWdvdG8gZXJyOwogCX0KIAlpZiAoNCplYi0+Y3R4LT52bWEuaHRf Y291bnQgPiAzKmViLT5jdHgtPnZtYS5odF9zaXplIHx8CiAJICAgIDQqZWItPmN0eC0+dm1hLmh0 X2NvdW50IDwgZWItPmN0eC0+dm1hLmh0X3NpemUpIHsKQEAgLTI2NiwxNSArNTU3LDEwIEBAIG5l eHRfdm1hOiA7CiAJCXF1ZXVlX3dvcmsoc3lzdGVtX2hpZ2hwcmlfd3EsICZlYi0+Y3R4LT52bWEu cmVzaXplKTsKIAl9CiAKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBpOTE1X3ZtYSAq Ci1lYl9nZXRfYmF0Y2goc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCi17Ci0Jc3RydWN0IGk5 MTVfdm1hICp2bWE7Ci0KLQl2bWEgPSB0b19wdHIoc3RydWN0IGk5MTVfdm1hLCBlYi0+ZXhlY1tl Yi0+YXJncy0+YnVmZmVyX2NvdW50LTFdLnJzdmQyKTsKK291dDoKKwkvKiB0YWtlIG5vdGUgb2Yg dGhlIGJhdGNoIGJ1ZmZlciBiZWZvcmUgd2UgbWlnaHQgcmVvcmRlciB0aGUgbGlzdHMgKi8KKwlp ID0gZWJfYmF0Y2hfaW5kZXgoZWIpOworCWViLT5iYXRjaCA9IHRvX3B0cihzdHJ1Y3QgaTkxNV92 bWEsIGViLT5leGVjW2ldLnJzdmQyKTsKIAogCS8qCiAJICogU05BIGlzIGRvaW5nIGZhbmN5IHRy aWNrcyB3aXRoIGNvbXByZXNzaW5nIGJhdGNoIGJ1ZmZlcnMsIHdoaWNoIGxlYWRzCkBAIC0yODUs MTQgKzU3MSwyNCBAQCBlYl9nZXRfYmF0Y2goc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCiAJ ICogTm90ZSB0aGF0IGFjdHVhbCBoYW5ncyBoYXZlIG9ubHkgYmVlbiBvYnNlcnZlZCBvbiBnZW43 LCBidXQgZm9yCiAJICogcGFyYW5vaWEgZG8gaXQgZXZlcnl3aGVyZS4KIAkgKi8KLQlpZiAoKHZt YS0+ZXhlY19lbnRyeS0+ZmxhZ3MgJiBFWEVDX09CSkVDVF9QSU5ORUQpID09IDApCi0JCXZtYS0+ ZXhlY19lbnRyeS0+ZmxhZ3MgfD0gX19FWEVDX09CSkVDVF9ORUVEU19CSUFTOworCWlmICgoZWIt PmV4ZWNbaV0uZmxhZ3MgJiBFWEVDX09CSkVDVF9QSU5ORUQpID09IDApCisJCWViLT5leGVjW2ld LmZsYWdzIHw9IF9fRVhFQ19PQkpFQ1RfTkVFRFNfQklBUzsKKwlpZiAoZWItPnJlbG9jX2NhY2hl Lmhhc19mZW5jZSkKKwkJZWItPmV4ZWNbaV0uZmxhZ3MgfD0gRVhFQ19PQkpFQ1RfTkVFRFNfRkVO Q0U7CiAKLQlyZXR1cm4gdm1hOworCWViLT5hcmdzLT5mbGFncyB8PSBfX0VYRUNfVkFMSURBVEVE OworCXJldHVybiBlYl9yZXNlcnZlKGViKTsKKworZXJyOgorCWZvciAoaSA9IHNsb3dfcGFzczsg aSA8IGNvdW50OyBpKyspIHsKKwkJaWYgKGViLT5leGVjW2ldLnJzdmQyICYgMSkKKwkJCWViLT5l eGVjW2ldLnJzdmQyID0gMDsKKwl9CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHN0cnVjdCBp OTE1X3ZtYSAqCi1lYl9nZXRfdm1hKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViLCB1bnNpZ25l ZCBsb25nIGhhbmRsZSkKK2ViX2dldF92bWEoY29uc3Qgc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAq ZWIsIHVuc2lnbmVkIGxvbmcgaGFuZGxlKQogewogCWlmIChlYi0+bHV0X21hc2sgPCAwKSB7CiAJ CWlmIChoYW5kbGUgPj0gLWViLT5sdXRfbWFzaykKQEAgLTMxMSw2MCArNjA3LDU4IEBAIGViX2dl dF92bWEoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIsIHVuc2lnbmVkIGxvbmcgaGFuZGxlKQog CX0KIH0KIAotc3RhdGljIHZvaWQgZWJfZGVzdHJveShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICpl YikKK3N0YXRpYyB2b2lkCitlYl9yZXNldChjb25zdCBzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICpl YikKIHsKLQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKKwljb25zdCB1bnNpZ25lZCBpbnQgY291bnQg PSBlYi0+YXJncy0+YnVmZmVyX2NvdW50OworCXVuc2lnbmVkIGludCBpOwogCi0JbGlzdF9mb3Jf ZWFjaF9lbnRyeSh2bWEsICZlYi0+dm1hcywgZXhlY19saXN0KSB7Ci0JCWlmICghdm1hLT5leGVj X2VudHJ5KQotCQkJY29udGludWU7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJ c3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmVudHJ5ID0gJmViLT5leGVjW2ldOwor CQlzdHJ1Y3QgaTkxNV92bWEgKnZtYSA9IHRvX3B0cihzdHJ1Y3QgaTkxNV92bWEsIGVudHJ5LT5y c3ZkMik7CiAKLQkJX19lYl91bnJlc2VydmVfdm1hKHZtYSwgdm1hLT5leGVjX2VudHJ5KTsKKwkJ ZWJfdW5yZXNlcnZlX3ZtYSh2bWEsIGVudHJ5KTsKIAkJdm1hLT5leGVjX2VudHJ5ID0gTlVMTDsK IAl9CiAKLQlpOTE1X2dlbV9jb250ZXh0X3B1dChlYi0+Y3R4KTsKLQogCWlmIChlYi0+bHV0X21h c2sgPj0gMCkKLQkJa2ZyZWUoZWItPmJ1Y2tldHMpOworCQltZW1zZXQoZWItPmJ1Y2tldHMsIDAs CisJCSAgICAgICAoMTw8ZWItPmx1dF9tYXNrKSpzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpKTsK IH0KIAotc3RhdGljIGlubGluZSBpbnQgdXNlX2NwdV9yZWxvYyhzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqKQorc3RhdGljIHZvaWQgZWJfcmVsZWFzZV92bWEoY29uc3Qgc3RydWN0IGk5 MTVfZXhlY2J1ZmZlciAqZWIpCiB7Ci0JaWYgKCFpOTE1X2dlbV9vYmplY3RfaGFzX3N0cnVjdF9w YWdlKG9iaikpCi0JCXJldHVybiBmYWxzZTsKKwljb25zdCB1bnNpZ25lZCBpbnQgY291bnQgPSBl Yi0+YXJncy0+YnVmZmVyX2NvdW50OworCXVuc2lnbmVkIGludCBpOwogCi0JaWYgKERCR19VU0Vf Q1BVX1JFTE9DKQotCQlyZXR1cm4gREJHX1VTRV9DUFVfUkVMT0MgPiAwOworCWlmICghZWItPmV4 ZWMpCisJCXJldHVybjsKIAotCXJldHVybiAoSEFTX0xMQyhvYmotPmJhc2UuZGV2KSB8fAotCQlv YmotPmJhc2Uud3JpdGVfZG9tYWluID09IEk5MTVfR0VNX0RPTUFJTl9DUFUgfHwKLQkJb2JqLT5j YWNoZV9sZXZlbCAhPSBJOTE1X0NBQ0hFX05PTkUpOwotfQorCWZvciAoaSA9IDA7IGkgPCBjb3Vu dDsgaSsrKSB7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICplbnRyeSA9ICZl Yi0+ZXhlY1tpXTsKKwkJc3RydWN0IGk5MTVfdm1hICp2bWEgPSB0b19wdHIoc3RydWN0IGk5MTVf dm1hLCBlbnRyeS0+cnN2ZDIpOwogCi0vKiBVc2VkIHRvIGNvbnZlcnQgYW55IGFkZHJlc3MgdG8g Y2Fub25pY2FsIGZvcm0uCi0gKiBTdGFydGluZyBmcm9tIGdlbjgsIHNvbWUgY29tbWFuZHMgKGUu Zy4gU1RBVEVfQkFTRV9BRERSRVNTLAotICogTUlfTE9BRF9SRUdJU1RFUl9NRU0gYW5kIG90aGVy cywgc2VlIEJyb2Fkd2VsbCBQUk0gVm9sMmEpIHJlcXVpcmUgdGhlCi0gKiBhZGRyZXNzZXMgdG8g YmUgaW4gYSBjYW5vbmljYWwgZm9ybToKLSAqICJHcmFwaGljc0FkZHJlc3NbNjM6NDhdIGFyZSBp Z25vcmVkIGJ5IHRoZSBIVyBhbmQgYXNzdW1lZCB0byBiZSBpbiBjb3JyZWN0Ci0gKiBjYW5vbmlj YWwgZm9ybSBbNjM6NDhdID09IFs0N10uIgotICovCi0jZGVmaW5lIEdFTjhfSElHSF9BRERSRVNT X0JJVCA0Nwotc3RhdGljIGlubGluZSB1aW50NjRfdCBnZW44X2Nhbm9uaWNhbF9hZGRyKHVpbnQ2 NF90IGFkZHJlc3MpCi17Ci0JcmV0dXJuIHNpZ25fZXh0ZW5kNjQoYWRkcmVzcywgR0VOOF9ISUdI X0FERFJFU1NfQklUKTsKKwkJaWYgKCF2bWEgfHwgIXZtYS0+ZXhlY19lbnRyeSkKKwkJCWNvbnRp bnVlOworCisJCUdFTV9CVUdfT04odm1hLT5leGVjX2VudHJ5ICE9IGVudHJ5KTsKKwkJaWYgKGVu dHJ5LT5mbGFncyAmIF9fRVhFQ19PQkpFQ1RfSEFTX1BJTikKKwkJCV9fZWJfdW5yZXNlcnZlX3Zt YSh2bWEsIGVudHJ5KTsKKwkJdm1hLT5leGVjX2VudHJ5ID0gTlVMTDsKKwl9CiB9CiAKLXN0YXRp YyBpbmxpbmUgdWludDY0X3QgZ2VuOF9ub25jYW5vbmljYWxfYWRkcih1aW50NjRfdCBhZGRyZXNz KQorc3RhdGljIHZvaWQgZWJfZGVzdHJveShjb25zdCBzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICpl YikKIHsKLQlyZXR1cm4gYWRkcmVzcyAmICgoMVVMTCA8PCAoR0VOOF9ISUdIX0FERFJFU1NfQklU ICsgMSkpIC0gMSk7CisJaWYgKGViLT5sdXRfbWFzayA+PSAwKQorCQlrZnJlZShlYi0+YnVja2V0 cyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdWludDY0X3QKK3N0YXRpYyBpbmxpbmUgdTY0CiByZWxv Y2F0aW9uX3RhcmdldChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkg KnJlbG9jLAotCQkgIHVpbnQ2NF90IHRhcmdldF9vZmZzZXQpCisJCSAgY29uc3Qgc3RydWN0IGk5 MTVfdm1hICp0YXJnZXQpCiB7Ci0JcmV0dXJuIGdlbjhfY2Fub25pY2FsX2FkZHIoKGludClyZWxv Yy0+ZGVsdGEgKyB0YXJnZXRfb2Zmc2V0KTsKKwlyZXR1cm4gZ2VuOF9jYW5vbmljYWxfYWRkcigo aW50KXJlbG9jLT5kZWx0YSArIHRhcmdldC0+bm9kZS5zdGFydCk7CiB9CiAKIHN0YXRpYyB2b2lk IHJlbG9jX2NhY2hlX2luaXQoc3RydWN0IHJlbG9jX2NhY2hlICpjYWNoZSwKQEAgLTM3Miw2ICs2 NjYsOCBAQCBzdGF0aWMgdm9pZCByZWxvY19jYWNoZV9pbml0KHN0cnVjdCByZWxvY19jYWNoZSAq Y2FjaGUsCiB7CiAJY2FjaGUtPnBhZ2UgPSAtMTsKIAljYWNoZS0+dmFkZHIgPSAwOworCWNhY2hl LT5oYXNfbGxjID0gSEFTX0xMQyhpOTE1KTsKKwljYWNoZS0+aGFzX2ZlbmNlID0gSU5URUxfR0VO KGk5MTUpIDwgNDsKIAljYWNoZS0+dXNlXzY0Yml0X3JlbG9jID0gSU5URUxfR0VOKGk5MTUpID49 IDg7CiAJY2FjaGUtPm5vZGUuYWxsb2NhdGVkID0gZmFsc2U7CiB9CkBAIC00ODQsNyArNzgwLDcg QEAgc3RhdGljIHZvaWQgKnJlbG9jX2lvbWFwKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmosCiAJCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwogCQlpbnQgcmV0OwogCi0JCWlmICh1c2VfY3B1 X3JlbG9jKG9iaikpCisJCWlmICh1c2VfY3B1X3JlbG9jKGNhY2hlLCBvYmopKQogCQkJcmV0dXJu IE5VTEw7CiAKIAkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKG9iaiwg dHJ1ZSk7CkBAIC01NzIsMTcgKzg2OCwxNyBAQCBzdGF0aWMgdm9pZCBjbGZsdXNoX3dyaXRlMzIo dTMyICphZGRyLCB1MzIgdmFsdWUsIHVuc2lnbmVkIGludCBmbHVzaGVzKQogCQkqYWRkciA9IHZh bHVlOwogfQogCi1zdGF0aWMgaW50CitzdGF0aWMgdTY0CiByZWxvY2F0ZV9lbnRyeShzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCSAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jLAogCSAgICAgICBzdHJ1Y3QgcmVsb2NfY2FjaGUg KmNhY2hlLAotCSAgICAgICB1NjQgdGFyZ2V0X29mZnNldCkKKwkgICAgICAgY29uc3Qgc3RydWN0 IGk5MTVfdm1hICp0YXJnZXQpCiB7CiAJdTY0IG9mZnNldCA9IHJlbG9jLT5vZmZzZXQ7CisJdTY0 IHRhcmdldF9vZmZzZXQgPSByZWxvY2F0aW9uX3RhcmdldChyZWxvYywgdGFyZ2V0KTsKIAlib29s IHdpZGUgPSBjYWNoZS0+dXNlXzY0Yml0X3JlbG9jOwogCXZvaWQgKnZhZGRyOwogCi0JdGFyZ2V0 X29mZnNldCA9IHJlbG9jYXRpb25fdGFyZ2V0KHJlbG9jLCB0YXJnZXRfb2Zmc2V0KTsKIHJlcGVh dDoKIAl2YWRkciA9IHJlbG9jX3ZhZGRyKG9iaiwgY2FjaGUsIG9mZnNldCA+PiBQQUdFX1NISUZU KTsKIAlpZiAoSVNfRVJSKHZhZGRyKSkKQEAgLTU5OSw3ICs4OTUsNyBAQCByZXBlYXQ6CiAJCWdv dG8gcmVwZWF0OwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBnZW44X2Nhbm9uaWNhbF9hZGRy KHRhcmdldC0+bm9kZS5zdGFydCkgfCAxOwogfQogCiBzdGF0aWMgYm9vbCBvYmplY3RfaXNfaWRs ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQpAQCAtNjE2LDEzICs5MTIsMTIgQEAg c3RhdGljIGJvb2wgb2JqZWN0X2lzX2lkbGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGludAotZWJfcmVsb2NhdGVfZW50cnkoc3Ry dWN0IGk5MTVfdm1hICp2bWEsCi0JCSAgc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIsCi0JCSAg c3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICpyZWxvYykKK3N0YXRpYyB1NjQK K2ViX3JlbG9jYXRlX2VudHJ5KHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViLAorCQkgIGNvbnN0 IHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAorCQkgIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fcmVs b2NhdGlvbl9lbnRyeSAqcmVsb2MpCiB7CiAJc3RydWN0IGk5MTVfdm1hICp0YXJnZXQ7Ci0JdTY0 IHRhcmdldF9vZmZzZXQ7CiAJaW50IHJldDsKIAogCS8qIHdlJ3ZlIGFscmVhZHkgaG9sZCBhIHJl ZmVyZW5jZSB0byBhbGwgdmFsaWQgb2JqZWN0cyAqLwpAQCAtNjUzLDI2ICs5NDgsMjggQEAgZWJf cmVsb2NhdGVfZW50cnkoc3RydWN0IGk5MTVfdm1hICp2bWEsCiAJCXJldHVybiAtRUlOVkFMOwog CX0KIAotCWlmIChyZWxvYy0+d3JpdGVfZG9tYWluKQorCWlmIChyZWxvYy0+d3JpdGVfZG9tYWlu KSB7CiAJCXRhcmdldC0+ZXhlY19lbnRyeS0+ZmxhZ3MgfD0gRVhFQ19PQkpFQ1RfV1JJVEU7CiAK LQkvKiBTYW5keWJyaWRnZSBQUEdUVCBlcnJhdGE6IFdlIG5lZWQgYSBnbG9iYWwgZ3R0IG1hcHBp bmcgZm9yIE1JIGFuZAotCSAqIHBpcGVfY29udHJvbCB3cml0ZXMgYmVjYXVzZSB0aGUgZ3B1IGRv ZXNuJ3QgcHJvcGVybHkgcmVkaXJlY3QgdGhlbQotCSAqIHRocm91Z2ggdGhlIHBwZ3R0IGZvciBu b25fc2VjdXJlIGJhdGNoYnVmZmVycy4KLQkgKi8KLQlpZiAodW5saWtlbHkoSVNfR0VONihlYi0+ aTkxNSkgJiYKLQkJICAgICByZWxvYy0+d3JpdGVfZG9tYWluID09IEk5MTVfR0VNX0RPTUFJTl9J TlNUUlVDVElPTikpIHsKLQkJcmV0ID0gaTkxNV92bWFfYmluZCh0YXJnZXQsIHRhcmdldC0+b2Jq LT5jYWNoZV9sZXZlbCwKLQkJCQkgICAgUElOX0dMT0JBTCk7Ci0JCWlmIChXQVJOX09OQ0UocmV0 LCAiVW5leHBlY3RlZCBmYWlsdXJlIHRvIGJpbmQgdGFyZ2V0IFZNQSEiKSkKLQkJCXJldHVybiBy ZXQ7CisJCS8qIFNhbmR5YnJpZGdlIFBQR1RUIGVycmF0YTogV2UgbmVlZCBhIGdsb2JhbCBndHQg bWFwcGluZworCQkgKiBmb3IgTUkgYW5kIHBpcGVfY29udHJvbCB3cml0ZXMgYmVjYXVzZSB0aGUg Z3B1IGRvZXNuJ3QKKwkJICogcHJvcGVybHkgcmVkaXJlY3QgdGhlbSB0aHJvdWdoIHRoZSBwcGd0 dCBmb3Igbm9uX3NlY3VyZQorCQkgKiBiYXRjaGJ1ZmZlcnMuCisJCSAqLworCQlpZiAocmVsb2Mt PndyaXRlX2RvbWFpbiA9PSBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04gJiYKKwkJICAgIElT X0dFTjYoZWItPmk5MTUpKSB7CisJCQlyZXQgPSBpOTE1X3ZtYV9iaW5kKHRhcmdldCwgdGFyZ2V0 LT5vYmotPmNhY2hlX2xldmVsLAorCQkJCQkgICAgUElOX0dMT0JBTCk7CisJCQlpZiAoV0FSTl9P TkNFKHJldCwKKwkJCQkgICAgICAiVW5leHBlY3RlZCBmYWlsdXJlIHRvIGJpbmQgdGFyZ2V0IFZN QSEiKSkKKwkJCQlyZXR1cm4gcmV0OworCQl9CiAJfQogCiAJLyogSWYgdGhlIHJlbG9jYXRpb24g YWxyZWFkeSBoYXMgdGhlIHJpZ2h0IHZhbHVlIGluIGl0LCBubwogCSAqIG1vcmUgd29yayBuZWVk cyB0byBiZSBkb25lLgogCSAqLwotCXRhcmdldF9vZmZzZXQgPSBnZW44X2Nhbm9uaWNhbF9hZGRy KHRhcmdldC0+bm9kZS5zdGFydCk7Ci0JaWYgKHRhcmdldF9vZmZzZXQgPT0gcmVsb2MtPnByZXN1 bWVkX29mZnNldCkKKwlpZiAoZ2VuOF9jYW5vbmljYWxfYWRkcih0YXJnZXQtPm5vZGUuc3RhcnQp ID09IHJlbG9jLT5wcmVzdW1lZF9vZmZzZXQpCiAJCXJldHVybiAwOwogCiAJLyogQ2hlY2sgdGhh dCB0aGUgcmVsb2NhdGlvbiBhZGRyZXNzIGlzIHZhbGlkLi4uICovCkBAIC02OTUsODUgKzk5Miw5 MCBAQCBlYl9yZWxvY2F0ZV9lbnRyeShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKIAogCS8qIFdlIGNh bid0IHdhaXQgZm9yIHJlbmRlcmluZyB3aXRoIHBhZ2VmYXVsdHMgZGlzYWJsZWQgKi8KIAlpZiAo cGFnZWZhdWx0X2Rpc2FibGVkKCkgJiYgIW9iamVjdF9pc19pZGxlKHZtYS0+b2JqKSkKLQkJcmV0 dXJuIC1FRkFVTFQ7Ci0KLQlyZXQgPSByZWxvY2F0ZV9lbnRyeSh2bWEtPm9iaiwgcmVsb2MsICZl Yi0+cmVsb2NfY2FjaGUsIHRhcmdldF9vZmZzZXQpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7 CisJCXJldHVybiAtRUJVU1k7CiAKIAkvKiBhbmQgdXBkYXRlIHRoZSB1c2VyJ3MgcmVsb2NhdGlv biBlbnRyeSAqLwotCXJlbG9jLT5wcmVzdW1lZF9vZmZzZXQgPSB0YXJnZXRfb2Zmc2V0OwotCXJl dHVybiAwOworCXJldHVybiByZWxvY2F0ZV9lbnRyeSh2bWEtPm9iaiwgcmVsb2MsICZlYi0+cmVs b2NfY2FjaGUsIHRhcmdldCk7CiB9CiAKLXN0YXRpYyBpbnQgZWJfcmVsb2NhdGVfdm1hKHN0cnVj dCBpOTE1X3ZtYSAqdm1hLCBzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikKK3N0YXRpYyBpbnQg ZWJfcmVsb2NhdGVfdm1hKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViLAorCQkJICAgY29uc3Qg c3RydWN0IGk5MTVfdm1hICp2bWEpCiB7CiAjZGVmaW5lIE5fUkVMT0MoeCkgKCh4KSAvIHNpemVv ZihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkpKQotCXN0cnVjdCBkcm1faTkx NV9nZW1fcmVsb2NhdGlvbl9lbnRyeSBzdGFja19yZWxvY1tOX1JFTE9DKDUxMildOwotCXN0cnVj dCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSBfX3VzZXIgKnVzZXJfcmVsb2NzOwotCXN0 cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICplbnRyeSA9IHZtYS0+ZXhlY19lbnRyeTsK LQlpbnQgcmVtYWluLCByZXQgPSAwOwotCi0JdXNlcl9yZWxvY3MgPSB1NjRfdG9fdXNlcl9wdHIo ZW50cnktPnJlbG9jc19wdHIpOworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRy eSBzdGFja1tOX1JFTE9DKDUxMildOworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9l bnRyeSBfX3VzZXIgKnVyZWxvY3M7CisJY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29i amVjdDIgKmVudHJ5ID0gdm1hLT5leGVjX2VudHJ5OworCXVuc2lnbmVkIGludCByZW1haW47CiAK Kwl1cmVsb2NzID0gdTY0X3RvX3VzZXJfcHRyKGVudHJ5LT5yZWxvY3NfcHRyKTsKIAlyZW1haW4g PSBlbnRyeS0+cmVsb2NhdGlvbl9jb3VudDsKLQl3aGlsZSAocmVtYWluKSB7Ci0JCXN0cnVjdCBk cm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqciA9IHN0YWNrX3JlbG9jOwotCQlpbnQgY291 bnQgPSByZW1haW47Ci0JCWlmIChjb3VudCA+IEFSUkFZX1NJWkUoc3RhY2tfcmVsb2MpKQotCQkJ Y291bnQgPSBBUlJBWV9TSVpFKHN0YWNrX3JlbG9jKTsKLQkJcmVtYWluIC09IGNvdW50OworCWlm ICh1bmxpa2VseShyZW1haW4gPiBVTE9OR19NQVggLyBzaXplb2YoKnVyZWxvY3MpKSkKKwkJcmV0 dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIFdlIG11c3QgY2hlY2sgdGhhdCB0aGUgZW50aXJlIHJl bG9jYXRpb24gYXJyYXkgaXMgc2FmZQorCSAqIHRvIHJlYWQuIEhvd2V2ZXIsIGlmIHRoZSBhcnJh eSBpcyBub3Qgd3JpdGFibGUgdGhlIHVzZXIgbG9zZXMKKwkgKiB0aGUgdXBkYXRlZCByZWxvY2F0 aW9uIHZhbHVlcy4KKwkgKi8KIAotCQlpZiAoX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyhyLCB1 c2VyX3JlbG9jcywgY291bnQqc2l6ZW9mKHJbMF0pKSkgewotCQkJcmV0ID0gLUVGQVVMVDsKKwlk byB7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqciA9IHN0YWNrOwor CQl1bnNpZ25lZCBpbnQgY291bnQgPQorCQkJbWluX3QodW5zaWduZWQgaW50LCByZW1haW4sIEFS UkFZX1NJWkUoc3RhY2spKTsKKworCQlpZiAoX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyhyLCB1 cmVsb2NzLCBjb3VudCpzaXplb2YoclswXSkpKSB7CisJCQlyZW1haW4gPSAtRUZBVUxUOwogCQkJ Z290byBvdXQ7CiAJCX0KIAorCQlyZW1haW4gLT0gY291bnQ7CiAJCWRvIHsKLQkJCXU2NCBvZmZz ZXQgPSByLT5wcmVzdW1lZF9vZmZzZXQ7CisJCQl1NjQgb2Zmc2V0ID0gZWJfcmVsb2NhdGVfZW50 cnkoZWIsIHZtYSwgcik7CiAKLQkJCXJldCA9IGViX3JlbG9jYXRlX2VudHJ5KHZtYSwgZWIsIHIp OwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIG91dDsKLQotCQkJaWYgKHItPnByZXN1bWVkX29mZnNl dCAhPSBvZmZzZXQgJiYKLQkJCSAgICBfX3B1dF91c2VyKHItPnByZXN1bWVkX29mZnNldCwKLQkJ CQkgICAgICAgJnVzZXJfcmVsb2NzLT5wcmVzdW1lZF9vZmZzZXQpKSB7Ci0JCQkJcmV0ID0gLUVG QVVMVDsKKwkJCWlmIChvZmZzZXQgPT0gMCkgeworCQkJfSBlbHNlIGlmICgoczY0KW9mZnNldCA8 IDApIHsKKwkJCQlyZW1haW4gPSAoczY0KW9mZnNldDsKIAkJCQlnb3RvIG91dDsKKwkJCX0gZWxz ZSB7CisJCQkJX19wdXRfdXNlcihvZmZzZXQgJiB+MSwKKwkJCQkJICAgJnVyZWxvY3Nbci1zdGFj a10ucHJlc3VtZWRfb2Zmc2V0KTsKIAkJCX0KLQotCQkJdXNlcl9yZWxvY3MrKzsKLQkJCXIrKzsK LQkJfSB3aGlsZSAoLS1jb3VudCk7Ci0JfQotCisJCX0gd2hpbGUgKHIrKywgLS1jb3VudCk7CisJ CXVyZWxvY3MgKz0gQVJSQVlfU0laRShzdGFjayk7CisJfSB3aGlsZSAocmVtYWluKTsKIG91dDoK IAlyZWxvY19jYWNoZV9yZXNldCgmZWItPnJlbG9jX2NhY2hlKTsKLQlyZXR1cm4gcmV0OworCXJl dHVybiByZW1haW47CiAjdW5kZWYgTl9SRUxPQwogfQogCiBzdGF0aWMgaW50Ci1lYl9yZWxvY2F0 ZV92bWFfc2xvdyhzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKLQkJICAgICBzdHJ1Y3QgaTkxNV9leGVj YnVmZmVyICplYiwKLQkJICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkg KnJlbG9jcykKK2ViX3JlbG9jYXRlX3ZtYV9zbG93KHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmVi LAorCQkgICAgIGNvbnN0IHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQogewogCWNvbnN0IHN0cnVjdCBk cm1faTkxNV9nZW1fZXhlY19vYmplY3QyICplbnRyeSA9IHZtYS0+ZXhlY19lbnRyeTsKLQlpbnQg aSwgcmV0ID0gMDsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9j cyA9CisJCXRvX3B0cih0eXBlb2YoKnJlbG9jcyksIGVudHJ5LT5yZWxvY3NfcHRyKTsKKwl1bnNp Z25lZCBpbnQgaTsKKwlpbnQgcmV0OwogCiAJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5yZWxvY2F0 aW9uX2NvdW50OyBpKyspIHsKLQkJcmV0ID0gZWJfcmVsb2NhdGVfZW50cnkodm1hLCBlYiwgJnJl bG9jc1tpXSk7Ci0JCWlmIChyZXQpCi0JCQlicmVhazsKKwkJdTY0IG9mZnNldCA9IGViX3JlbG9j YXRlX2VudHJ5KGViLCB2bWEsICZyZWxvY3NbaV0pOworCisJCWlmICgoczY0KW9mZnNldCA8IDAp IHsKKwkJCXJldCA9IChzNjQpb2Zmc2V0OworCQkJZ290byBlcnI7CisJCX0KIAl9CisJcmV0ID0g MDsKK2VycjoKIAlyZWxvY19jYWNoZV9yZXNldCgmZWItPnJlbG9jX2NhY2hlKTsKIAlyZXR1cm4g cmV0OwogfQogCiBzdGF0aWMgaW50IGViX3JlbG9jYXRlKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIg KmViKQogewotCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOworCWNvbnN0IHN0cnVjdCBpOTE1X3ZtYSAq dm1hOwogCWludCByZXQgPSAwOwogCiAJLyogVGhpcyBpcyB0aGUgZmFzdCBwYXRoIGFuZCB3ZSBj YW5ub3QgaGFuZGxlIGEgcGFnZWZhdWx0IHdoaWxzdApAQCAtNzg0LDI5MyArMTA4NiwxNzUgQEAg c3RhdGljIGludCBlYl9yZWxvY2F0ZShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikKIAkgKiBs b2NrZGVwIGNvbXBsYWlucyB2ZWhlbWVudGx5LgogCSAqLwogCXBhZ2VmYXVsdF9kaXNhYmxlKCk7 Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZlYi0+dm1hcywgZXhlY19saXN0KSB7Ci0JCXJl dCA9IGViX3JlbG9jYXRlX3ZtYSh2bWEsIGViKTsKLQkJaWYgKHJldCkKLQkJCWJyZWFrOworCWxp c3RfZm9yX2VhY2hfZW50cnkodm1hLCAmZWItPnJlbG9jcywgcmVsb2NfbGluaykgeworcmV0cnk6 CisJCXJldCA9IGViX3JlbG9jYXRlX3ZtYShlYiwgdm1hKTsKKwkJaWYgKHJldCA9PSAwKQorCQkJ Y29udGludWU7CisKKwkJaWYgKHJldCA9PSAtRUJVU1kpIHsKKwkJCXBhZ2VmYXVsdF9lbmFibGUo KTsKKwkJCXJldCA9IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyh2bWEtPm9iaiwgZmFs c2UpOworCQkJcGFnZWZhdWx0X2Rpc2FibGUoKTsKKwkJCWlmIChyZXQgPT0gMCkKKwkJCQlnb3Rv IHJldHJ5OworCQl9CisJCWJyZWFrOwogCX0KIAlwYWdlZmF1bHRfZW5hYmxlKCk7CiAKIAlyZXR1 cm4gcmV0OwogfQogCi1zdGF0aWMgYm9vbCBvbmx5X21hcHBhYmxlX2Zvcl9yZWxvYyh1bnNpZ25l ZCBpbnQgZmxhZ3MpCitzdGF0aWMgaW50IGNoZWNrX3JlbG9jYXRpb25zKGNvbnN0IHN0cnVjdCBk cm1faTkxNV9nZW1fZXhlY19vYmplY3QyICplbnRyeSkKIHsKLQlyZXR1cm4gKGZsYWdzICYgKEVY RUNfT0JKRUNUX05FRURTX0ZFTkNFIHwgX19FWEVDX09CSkVDVF9ORUVEU19NQVApKSA9PQotCQlf X0VYRUNfT0JKRUNUX05FRURTX01BUDsKLX0KLQotc3RhdGljIGludAotZWJfcmVzZXJ2ZV92bWEo c3RydWN0IGk5MTVfdm1hICp2bWEsCi0JICAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwKLQkgICAgICAgYm9vbCAqbmVlZF9yZWxvYykKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2V4ZWNfb2JqZWN0MiAqZW50cnkgPSB2bWEtPmV4ZWNfZW50cnk7Ci0JdWludDY0X3QgZmxhZ3M7 Ci0JaW50IHJldDsKLQotCWZsYWdzID0gUElOX1VTRVI7Ci0JaWYgKGVudHJ5LT5mbGFncyAmIEVY RUNfT0JKRUNUX05FRURTX0dUVCkKLQkJZmxhZ3MgfD0gUElOX0dMT0JBTDsKKwljb25zdCB1bnNp Z25lZCBsb25nIHJlbG9jc19tYXggPQorCQlVTE9OR19NQVggLyBzaXplb2Yoc3RydWN0IGRybV9p OTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5KTsKKwljb25zdCBjaGFyIF9fdXNlciAqYWRkciwgKmVu ZDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdW5zaWduZWQgaW50IG5yZWxvYzsKKwljaGFyIGM7 CisKKwlucmVsb2MgPSBlbnRyeS0+cmVsb2NhdGlvbl9jb3VudDsKKwlpZiAobnJlbG9jID09IDAp CisJCXJldHVybiAwOwogCi0JaWYgKCFkcm1fbW1fbm9kZV9hbGxvY2F0ZWQoJnZtYS0+bm9kZSkp IHsKLQkJLyogV2EzMmJpdEdlbmVyYWxTdGF0ZU9mZnNldCAmIFdhMzJiaXRJbnN0cnVjdGlvbkJh c2VPZmZzZXQsCi0JCSAqIGxpbWl0IGFkZHJlc3MgdG8gdGhlIGZpcnN0IDRHQnMgZm9yIHVuZmxh Z2dlZCBvYmplY3RzLgotCQkgKi8KLQkJaWYgKChlbnRyeS0+ZmxhZ3MgJiBFWEVDX09CSkVDVF9T VVBQT1JUU180OEJfQUREUkVTUykgPT0gMCkKLQkJCWZsYWdzIHw9IFBJTl9aT05FXzRHOwotCQlp ZiAoZW50cnktPmZsYWdzICYgX19FWEVDX09CSkVDVF9ORUVEU19NQVApCi0JCQlmbGFncyB8PSBQ SU5fR0xPQkFMIHwgUElOX01BUFBBQkxFOwotCQlpZiAoZW50cnktPmZsYWdzICYgX19FWEVDX09C SkVDVF9ORUVEU19CSUFTKQotCQkJZmxhZ3MgfD0gQkFUQ0hfT0ZGU0VUX0JJQVMgfCBQSU5fT0ZG U0VUX0JJQVM7Ci0JCWlmIChlbnRyeS0+ZmxhZ3MgJiBFWEVDX09CSkVDVF9QSU5ORUQpCi0JCQlm bGFncyB8PSBlbnRyeS0+b2Zmc2V0IHwgUElOX09GRlNFVF9GSVhFRDsKLQkJaWYgKChmbGFncyAm IFBJTl9NQVBQQUJMRSkgPT0gMCkKLQkJCWZsYWdzIHw9IFBJTl9ISUdIOwotCX0KLQotCXJldCA9 IGk5MTVfdm1hX3Bpbih2bWEsCi0JCQkgICBlbnRyeS0+cGFkX3RvX3NpemUsCi0JCQkgICBlbnRy eS0+YWxpZ25tZW50LAotCQkJICAgZmxhZ3MpOwotCWlmICgocmV0ID09IC1FTk9TUEMgfHwgcmV0 ID09IC1FMkJJRykgJiYKLQkgICAgb25seV9tYXBwYWJsZV9mb3JfcmVsb2MoZW50cnktPmZsYWdz KSkKLQkJcmV0ID0gaTkxNV92bWFfcGluKHZtYSwKLQkJCQkgICBlbnRyeS0+cGFkX3RvX3NpemUs Ci0JCQkJICAgZW50cnktPmFsaWdubWVudCwKLQkJCQkgICBmbGFncyAmIH5QSU5fTUFQUEFCTEUp OwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJaWYgKG5yZWxvYyA+IHJlbG9jc19tYXgpCisJ CXJldHVybiAtRUlOVkFMOwogCi0JZW50cnktPmZsYWdzIHw9IF9fRVhFQ19PQkpFQ1RfSEFTX1BJ TjsKKwlhZGRyID0gdTY0X3RvX3VzZXJfcHRyKGVudHJ5LT5yZWxvY3NfcHRyKTsKKwlzaXplID0g bnJlbG9jICogc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSk7CisJ aWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBhZGRyLCBzaXplKSkKKwkJcmV0dXJuIC1FRkFV TFQ7CiAKLQlpZiAoZW50cnktPmZsYWdzICYgRVhFQ19PQkpFQ1RfTkVFRFNfRkVOQ0UpIHsKLQkJ cmV0ID0gaTkxNV92bWFfZ2V0X2ZlbmNlKHZtYSk7CisJZW5kID0gYWRkciArIHNpemU7CisJZm9y ICg7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CisJCWludCByZXQgPSBfX2dldF91 c2VyKGMsIGFkZHIpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKLQotCQlpZiAoaTkxNV92 bWFfcGluX2ZlbmNlKHZtYSkpCi0JCQllbnRyeS0+ZmxhZ3MgfD0gX19FWEVDX09CSkVDVF9IQVNf RkVOQ0U7CiAJfQotCi0JaWYgKGVudHJ5LT5vZmZzZXQgIT0gdm1hLT5ub2RlLnN0YXJ0KSB7Ci0J CWVudHJ5LT5vZmZzZXQgPSB2bWEtPm5vZGUuc3RhcnQ7Ci0JCSpuZWVkX3JlbG9jID0gdHJ1ZTsK LQl9Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gX19nZXRfdXNlcihjLCBlbmQgLSAxKTsKIH0KIAot c3RhdGljIGJvb2wKLW5lZWRfcmVsb2NfbWFwcGFibGUoc3RydWN0IGk5MTVfdm1hICp2bWEpCitz dGF0aWMgaW50CitlYl9jb3B5X3JlbG9jYXRpb25zKGNvbnN0IHN0cnVjdCBpOTE1X2V4ZWNidWZm ZXIgKmViKQogewotCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICplbnRyeSA9IHZt YS0+ZXhlY19lbnRyeTsKLQotCWlmIChlbnRyeS0+cmVsb2NhdGlvbl9jb3VudCA9PSAwKQotCQly ZXR1cm4gZmFsc2U7Ci0KLQlpZiAoIWk5MTVfdm1hX2lzX2dndHQodm1hKSkKLQkJcmV0dXJuIGZh bHNlOworCWNvbnN0IHVuc2lnbmVkIGludCBjb3VudCA9IGViLT5hcmdzLT5idWZmZXJfY291bnQ7 CisJdW5zaWduZWQgaW50IGk7CisJaW50IHJldDsKIAotCS8qIFNlZSBhbHNvIHVzZV9jcHVfcmVs b2MoKSAqLwotCWlmIChIQVNfTExDKHZtYS0+b2JqLT5iYXNlLmRldikpCi0JCXJldHVybiBmYWxz ZTsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X3JlbG9jYXRpb25fZW50cnkgX191c2VyICp1cmVsb2NzOworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X3JlbG9jYXRpb25fZW50cnkgKnJlbG9jczsKKwkJdW5zaWduZWQgaW50IG5yZWxvYyA9IGViLT5l eGVjW2ldLnJlbG9jYXRpb25fY291bnQsIGo7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAotCWlm ICh2bWEtPm9iai0+YmFzZS53cml0ZV9kb21haW4gPT0gSTkxNV9HRU1fRE9NQUlOX0NQVSkKLQkJ cmV0dXJuIGZhbHNlOworCQlpZiAobnJlbG9jID09IDApCisJCQljb250aW51ZTsKIAotCXJldHVy biB0cnVlOwotfQorCQlyZXQgPSBjaGVja19yZWxvY2F0aW9ucygmZWItPmV4ZWNbaV0pOworCQlp ZiAocmV0KQorCQkJZ290byBlcnI7CiAKLXN0YXRpYyBib29sCi1lYl92bWFfbWlzcGxhY2VkKHN0 cnVjdCBpOTE1X3ZtYSAqdm1hKQotewotCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3Qy ICplbnRyeSA9IHZtYS0+ZXhlY19lbnRyeTsKKwkJdXJlbG9jcyA9IHU2NF90b191c2VyX3B0cihl Yi0+ZXhlY1tpXS5yZWxvY3NfcHRyKTsKKwkJc2l6ZSA9IG5yZWxvYyAqIHNpemVvZigqcmVsb2Nz KTsKIAotCVdBUk5fT04oZW50cnktPmZsYWdzICYgX19FWEVDX09CSkVDVF9ORUVEU19NQVAgJiYK LQkJIWk5MTVfdm1hX2lzX2dndHQodm1hKSk7CisJCXJlbG9jcyA9IGRybV9tYWxsb2NfZ2ZwKHNp emUsIDEsIEdGUF9URU1QT1JBUlkpOworCQlpZiAoIXJlbG9jcykgeworCQkJcmV0ID0gLUVOT01F TTsKKwkJCWdvdG8gZXJyOworCQl9CiAKLQlpZiAoZW50cnktPmFsaWdubWVudCAmJgotCSAgICB2 bWEtPm5vZGUuc3RhcnQgJiAoZW50cnktPmFsaWdubWVudCAtIDEpKQotCQlyZXR1cm4gdHJ1ZTsK KwkJLyogY29weV9mcm9tX3VzZXIgaXMgbGltaXRlZCB0byA0R2lCICovCisJCWogPSAwOworCQlk byB7CisJCQl1MzIgbGVuID0gbWluX3QodTY0LCAxdWxsPDwzMSwgc2l6ZSk7CiAKLQlpZiAodm1h LT5ub2RlLnNpemUgPCBlbnRyeS0+cGFkX3RvX3NpemUpCi0JCXJldHVybiB0cnVlOworCQkJaWYg KF9fY29weV9mcm9tX3VzZXIocmVsb2NzICsgaiwgdXJlbG9jcyArIGosIGxlbikpIHsKKwkJCQly ZXQgPSAtRUZBVUxUOworCQkJCWdvdG8gZXJyOworCQkJfQogCi0JaWYgKGVudHJ5LT5mbGFncyAm IEVYRUNfT0JKRUNUX1BJTk5FRCAmJgotCSAgICB2bWEtPm5vZGUuc3RhcnQgIT0gZW50cnktPm9m ZnNldCkKLQkJcmV0dXJuIHRydWU7CisJCQlzaXplIC09IGxlbjsKKwkJCUJVSUxEX0JVR19PTl9O T1RfUE9XRVJfT0ZfMihzaXplb2YoKnJlbG9jcykpOworCQkJaiArPSBsZW4gLyBzaXplb2YoKnJl bG9jcyk7CisJCX0gd2hpbGUgKHNpemUpOwogCi0JaWYgKGVudHJ5LT5mbGFncyAmIF9fRVhFQ19P QkpFQ1RfTkVFRFNfQklBUyAmJgotCSAgICB2bWEtPm5vZGUuc3RhcnQgPCBCQVRDSF9PRkZTRVRf QklBUykKLQkJcmV0dXJuIHRydWU7CisJCS8qIEFzIHdlIGRvIG5vdCB1cGRhdGUgdGhlIGtub3du IHJlbG9jYXRpb24gb2Zmc2V0cyBhZnRlcgorCQkgKiByZWxvY2F0aW5nIChkdWUgdG8gdGhlIGNv bXBsZXhpdGllcyBpbiBsb2NrIGhhbmRsaW5nKSwKKwkJICogd2UgbmVlZCB0byBtYXJrIHRoZW0g YXMgaW52YWxpZCBub3cgc28gdGhhdCB3ZSBmb3JjZSB0aGUKKwkJICogcmVsb2NhdGlvbiBwcm9j ZXNzaW5nIG5leHQgdGltZS4gSnVzdCBpbiBjYXNlIHRoZSB0YXJnZXQKKwkJICogb2JqZWN0IGlz IGV2aWN0ZWQgYW5kIHRoZW4gcmVib3VuZCBpbnRvIGl0cyBvbGQKKwkJICogcHJlc3VtZWRfb2Zm c2V0IGJlZm9yZSB0aGUgbmV4dCBleGVjYnVmZmVyIC0gaWYgdGhhdAorCQkgKiBoYXBwZW5lZCB3 ZSB3b3VsZCBtYWtlIHRoZSBtaXN0YWtlIG9mIGFzc3VtaW5nIHRoYXQgdGhlCisJCSAqIHJlbG9j YXRpb25zIHdlcmUgdmFsaWQuCisJCSAqLworCQl1c2VyX2FjY2Vzc19iZWdpbigpOworCQlmb3Ig KGogPSAwOyBqIDwgbnJlbG9jOyBqKyspCisJCQl1bnNhZmVfcHV0X3VzZXIoLTEsCisJCQkJCSZ1 cmVsb2NzW2pdLnByZXN1bWVkX29mZnNldCwKKwkJCQkJZW5kX3VzZXIpOworZW5kX3VzZXI6CisJ CXVzZXJfYWNjZXNzX2VuZCgpOwogCi0JLyogYXZvaWQgY29zdGx5IHBpbmctcG9uZyBvbmNlIGEg YmF0Y2ggYm8gZW5kZWQgdXAgbm9uLW1hcHBhYmxlICovCi0JaWYgKGVudHJ5LT5mbGFncyAmIF9f RVhFQ19PQkpFQ1RfTkVFRFNfTUFQICYmCi0JICAgICFpOTE1X3ZtYV9pc19tYXBfYW5kX2ZlbmNl YWJsZSh2bWEpKQotCQlyZXR1cm4gIW9ubHlfbWFwcGFibGVfZm9yX3JlbG9jKGVudHJ5LT5mbGFn cyk7CisJCWViLT5leGVjW2ldLnJlbG9jc19wdHIgPSAodWludHB0cl90KXJlbG9jczsKKwl9CiAK LQlpZiAoKGVudHJ5LT5mbGFncyAmIEVYRUNfT0JKRUNUX1NVUFBPUlRTXzQ4Ql9BRERSRVNTKSA9 PSAwICYmCi0JICAgICh2bWEtPm5vZGUuc3RhcnQgKyB2bWEtPm5vZGUuc2l6ZSAtIDEpID4+IDMy KQotCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMDsKIAotCXJldHVybiBmYWxzZTsKK2VycjoKKwl3 aGlsZSAoaS0tKSB7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVs b2NzID0KKwkJCXRvX3B0cih0eXBlb2YoKnJlbG9jcyksIGViLT5leGVjW2ldLnJlbG9jc19wdHIp OworCQlpZiAoZWItPmV4ZWNbaV0ucmVsb2NhdGlvbl9jb3VudCkKKwkJCWRybV9mcmVlX2xhcmdl KHJlbG9jcyk7CisJfQorCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZWJfcmVzZXJ2ZShz dHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikKK3N0YXRpYyBpbnQgZWJfcHJlZmF1bHRfcmVsb2Nh dGlvbnMoY29uc3Qgc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCiB7Ci0JY29uc3QgYm9vbCBo YXNfZmVuY2VkX2dwdV9hY2Nlc3MgPSBJTlRFTF9HRU4oZWItPmk5MTUpIDwgNDsKLQlzdHJ1Y3Qg aTkxNV92bWEgKnZtYTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG9yZGVyZWRfdm1hczsKLQlzdHJ1Y3Qg bGlzdF9oZWFkIHBpbm5lZF92bWFzOwotCWludCByZXRyeTsKLQotCUlOSVRfTElTVF9IRUFEKCZv cmRlcmVkX3ZtYXMpOwotCUlOSVRfTElTVF9IRUFEKCZwaW5uZWRfdm1hcyk7Ci0Jd2hpbGUgKCFs aXN0X2VtcHR5KCZlYi0+dm1hcykpIHsKLQkJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVj dDIgKmVudHJ5OwotCQlib29sIG5lZWRfZmVuY2UsIG5lZWRfbWFwcGFibGU7Ci0KLQkJdm1hID0g bGlzdF9maXJzdF9lbnRyeSgmZWItPnZtYXMsIHN0cnVjdCBpOTE1X3ZtYSwgZXhlY19saXN0KTsK LQkJZW50cnkgPSB2bWEtPmV4ZWNfZW50cnk7Ci0KLQkJaWYgKGViLT5jdHgtPmZsYWdzICYgQ09O VEVYVF9OT19aRVJPTUFQKQotCQkJZW50cnktPmZsYWdzIHw9IF9fRVhFQ19PQkpFQ1RfTkVFRFNf QklBUzsKLQotCQlpZiAoIWhhc19mZW5jZWRfZ3B1X2FjY2VzcykKLQkJCWVudHJ5LT5mbGFncyAm PSB+RVhFQ19PQkpFQ1RfTkVFRFNfRkVOQ0U7Ci0JCW5lZWRfZmVuY2UgPQotCQkJZW50cnktPmZs YWdzICYgRVhFQ19PQkpFQ1RfTkVFRFNfRkVOQ0UgJiYKLQkJCWk5MTVfZ2VtX29iamVjdF9pc190 aWxlZCh2bWEtPm9iaik7Ci0JCW5lZWRfbWFwcGFibGUgPSBuZWVkX2ZlbmNlIHx8IG5lZWRfcmVs b2NfbWFwcGFibGUodm1hKTsKLQotCQlpZiAoZW50cnktPmZsYWdzICYgRVhFQ19PQkpFQ1RfUElO TkVEKQotCQkJbGlzdF9tb3ZlX3RhaWwoJnZtYS0+ZXhlY19saXN0LCAmcGlubmVkX3ZtYXMpOwot CQllbHNlIGlmIChuZWVkX21hcHBhYmxlKSB7Ci0JCQllbnRyeS0+ZmxhZ3MgfD0gX19FWEVDX09C SkVDVF9ORUVEU19NQVA7Ci0JCQlsaXN0X21vdmUoJnZtYS0+ZXhlY19saXN0LCAmb3JkZXJlZF92 bWFzKTsKLQkJfSBlbHNlCi0JCQlsaXN0X21vdmVfdGFpbCgmdm1hLT5leGVjX2xpc3QsICZvcmRl cmVkX3ZtYXMpOwotCX0KLQlsaXN0X3NwbGljZSgmb3JkZXJlZF92bWFzLCAmZWItPnZtYXMpOwot CWxpc3Rfc3BsaWNlKCZwaW5uZWRfdm1hcywgJmViLT52bWFzKTsKLQotCS8qIEF0dGVtcHQgdG8g cGluIGFsbCBvZiB0aGUgYnVmZmVycyBpbnRvIHRoZSBHVFQuCi0JICogVGhpcyBpcyBkb25lIGlu IDMgcGhhc2VzOgotCSAqCi0JICogMWEuIFVuYmluZCBhbGwgb2JqZWN0cyB0aGF0IGRvIG5vdCBt YXRjaCB0aGUgR1RUIGNvbnN0cmFpbnRzIGZvcgotCSAqICAgICB0aGUgZXhlY2J1ZmZlciAoZmVu Y2VhYmxlLCBtYXBwYWJsZSwgYWxpZ25tZW50IGV0YykuCi0JICogMWIuIEluY3JlbWVudCBwaW4g Y291bnQgZm9yIGFscmVhZHkgYm91bmQgb2JqZWN0cy4KLQkgKiAyLiAgQmluZCBuZXcgb2JqZWN0 cy4KLQkgKiAzLiAgRGVjcmVtZW50IHBpbiBjb3VudC4KLQkgKgotCSAqIFRoaXMgYXZvaWQgdW5u ZWNlc3NhcnkgdW5iaW5kaW5nIG9mIGxhdGVyIG9iamVjdHMgaW4gb3JkZXIgdG8gbWFrZQotCSAq IHJvb20gZm9yIHRoZSBlYXJsaWVyIG9iamVjdHMgKnVubGVzcyogd2UgbmVlZCB0byBkZWZyYWdt ZW50LgotCSAqLwotCXJldHJ5ID0gMDsKLQlkbyB7Ci0JCWludCByZXQgPSAwOwotCi0JCS8qIFVu YmluZCBhbnkgaWxsLWZpdHRpbmcgb2JqZWN0cyBvciBwaW4uICovCi0JCWxpc3RfZm9yX2VhY2hf ZW50cnkodm1hLCAmZWItPnZtYXMsIGV4ZWNfbGlzdCkgewotCQkJaWYgKCFkcm1fbW1fbm9kZV9h bGxvY2F0ZWQoJnZtYS0+bm9kZSkpCi0JCQkJY29udGludWU7Ci0KLQkJCWlmIChlYl92bWFfbWlz cGxhY2VkKHZtYSkpCi0JCQkJcmV0ID0gaTkxNV92bWFfdW5iaW5kKHZtYSk7Ci0JCQllbHNlCi0J CQkJcmV0ID0gZWJfcmVzZXJ2ZV92bWEodm1hLCBlYi0+ZW5naW5lLCAmZWItPm5lZWRfcmVsb2Nz KTsKLQkJCWlmIChyZXQpCi0JCQkJZ290byBlcnI7Ci0JCX0KLQotCQkvKiBCaW5kIGZyZXNoIG9i amVjdHMgKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZlYi0+dm1hcywgZXhlY19saXN0 KSB7Ci0JCQlpZiAoZHJtX21tX25vZGVfYWxsb2NhdGVkKCZ2bWEtPm5vZGUpKQotCQkJCWNvbnRp bnVlOwotCi0JCQlyZXQgPSBlYl9yZXNlcnZlX3ZtYSh2bWEsIGViLT5lbmdpbmUsICZlYi0+bmVl ZF9yZWxvY3MpOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIGVycjsKLQkJfQotCi1lcnI6Ci0JCWlm IChyZXQgIT0gLUVOT1NQQyB8fCByZXRyeSsrKQotCQkJcmV0dXJuIHJldDsKKwljb25zdCB1bnNp Z25lZCBpbnQgY291bnQgPSBlYi0+YXJncy0+YnVmZmVyX2NvdW50OworCXVuc2lnbmVkIGludCBp OwogCi0JCS8qIERlY3JlbWVudCBwaW4gY291bnQgZm9yIGJvdW5kIG9iamVjdHMgKi8KLQkJbGlz dF9mb3JfZWFjaF9lbnRyeSh2bWEsICZlYi0+dm1hcywgZXhlY19saXN0KQotCQkJZWJfdW5yZXNl cnZlX3ZtYSh2bWEpOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWludCByZXQ7 CiAKLQkJcmV0ID0gaTkxNV9nZW1fZXZpY3Rfdm0oZWItPnZtLCB0cnVlKTsKKwkJcmV0ID0gY2hl Y2tfcmVsb2NhdGlvbnMoJmViLT5leGVjW2ldKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7 Ci0JfSB3aGlsZSAoMSk7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWViX3Jl bG9jYXRlX3Nsb3coc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCitzdGF0aWMgaW50IGViX3Jl bG9jYXRlX3Nsb3coc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCiB7Ci0JY29uc3QgdW5zaWdu ZWQgaW50IGNvdW50ID0gZWItPmFyZ3MtPmJ1ZmZlcl9jb3VudDsKIAlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gJmViLT5pOTE1LT5kcm07Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9u X2VudHJ5ICpyZWxvYzsKLQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKLQlpbnQgKnJlbG9jX29mZnNl dDsKLQlpbnQgaSwgdG90YWwsIHJldDsKLQotCS8qIFdlIG1heSBwcm9jZXNzIGFub3RoZXIgZXhl Y2J1ZmZlciBkdXJpbmcgdGhlIHVubG9jay4uLiAqLwotCWViX3Jlc2V0KGViKTsKLQltdXRleF91 bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQotCXRvdGFsID0gMDsKLQlmb3IgKGkgPSAwOyBp IDwgY291bnQ7IGkrKykKLQkJdG90YWwgKz0gZWItPmV4ZWNbaV0ucmVsb2NhdGlvbl9jb3VudDsK LQotCXJlbG9jX29mZnNldCA9IGRybV9tYWxsb2NfYWIoY291bnQsIHNpemVvZigqcmVsb2Nfb2Zm c2V0KSk7Ci0JcmVsb2MgPSBkcm1fbWFsbG9jX2FiKHRvdGFsLCBzaXplb2YoKnJlbG9jKSk7Ci0J aWYgKHJlbG9jID09IE5VTEwgfHwgcmVsb2Nfb2Zmc2V0ID09IE5VTEwpIHsKLQkJZHJtX2ZyZWVf bGFyZ2UocmVsb2MpOwotCQlkcm1fZnJlZV9sYXJnZShyZWxvY19vZmZzZXQpOwotCQltdXRleF9s b2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXRvdGFs ID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlbG9jYXRpb25fZW50cnkgX191c2VyICp1c2VyX3JlbG9jczsKLQkJdTY0IGludmFsaWRf b2Zmc2V0ID0gKHU2NCktMTsKLQkJaW50IGo7Ci0KLQkJdXNlcl9yZWxvY3MgPSB1NjRfdG9fdXNl cl9wdHIoZWItPmV4ZWNbaV0ucmVsb2NzX3B0cik7Ci0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKHJl bG9jK3RvdGFsLCB1c2VyX3JlbG9jcywKLQkJCQkgICBlYi0+ZXhlY1tpXS5yZWxvY2F0aW9uX2Nv dW50ICogc2l6ZW9mKCpyZWxvYykpKSB7Ci0JCQlyZXQgPSAtRUZBVUxUOwotCQkJbXV0ZXhfbG9j aygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCQkJZ290byBlcnI7Ci0JCX0KKwlib29sIGhhdmVfY29w eSA9IGZhbHNlOworCWNvbnN0IHN0cnVjdCBpOTE1X3ZtYSAqdm1hOworCWludCByZXQgPSAwOwog Ci0JCS8qIEFzIHdlIGRvIG5vdCB1cGRhdGUgdGhlIGtub3duIHJlbG9jYXRpb24gb2Zmc2V0cyBh ZnRlcgotCQkgKiByZWxvY2F0aW5nIChkdWUgdG8gdGhlIGNvbXBsZXhpdGllcyBpbiBsb2NrIGhh bmRsaW5nKSwKLQkJICogd2UgbmVlZCB0byBtYXJrIHRoZW0gYXMgaW52YWxpZCBub3cgc28gdGhh dCB3ZSBmb3JjZSB0aGUKLQkJICogcmVsb2NhdGlvbiBwcm9jZXNzaW5nIG5leHQgdGltZS4gSnVz dCBpbiBjYXNlIHRoZSB0YXJnZXQKLQkJICogb2JqZWN0IGlzIGV2aWN0ZWQgYW5kIHRoZW4gcmVi b3VuZCBpbnRvIGl0cyBvbGQKLQkJICogcHJlc3VtZWRfb2Zmc2V0IGJlZm9yZSB0aGUgbmV4dCBl eGVjYnVmZmVyIC0gaWYgdGhhdAotCQkgKiBoYXBwZW5lZCB3ZSB3b3VsZCBtYWtlIHRoZSBtaXN0 YWtlIG9mIGFzc3VtaW5nIHRoYXQgdGhlCi0JCSAqIHJlbG9jYXRpb25zIHdlcmUgdmFsaWQuCi0J CSAqLwotCQlmb3IgKGogPSAwOyBqIDwgZWItPmV4ZWNbaV0ucmVsb2NhdGlvbl9jb3VudDsgaisr KSB7Ci0JCQlpZiAoX19jb3B5X3RvX3VzZXIoJnVzZXJfcmVsb2NzW2pdLnByZXN1bWVkX29mZnNl dCwKLQkJCQkJICAgJmludmFsaWRfb2Zmc2V0LAotCQkJCQkgICBzaXplb2YoaW52YWxpZF9vZmZz ZXQpKSkgewotCQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3Rf bXV0ZXgpOwotCQkJCWdvdG8gZXJyOwotCQkJfQotCQl9CityZXBlYXQ6CisJaWYgKHNpZ25hbF9w ZW5kaW5nKGN1cnJlbnQpKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCi0JCXJlbG9jX29mZnNl dFtpXSA9IHRvdGFsOwotCQl0b3RhbCArPSBlYi0+ZXhlY1tpXS5yZWxvY2F0aW9uX2NvdW50Owor CS8qIFdlIG1heSBwcm9jZXNzIGFub3RoZXIgZXhlY2J1ZmZlciBkdXJpbmcgdGhlIHVubG9jay4u LiAqLworCWViX3Jlc2V0KGViKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsK KworCWlmIChyZXQgPT0gMCAmJiBsaWtlbHkoIWk5MTUucHJlZmF1bHRfZGlzYWJsZSkpIHsKKwkJ cmV0ID0gZWJfcHJlZmF1bHRfcmVsb2NhdGlvbnMoZWIpOworCX0gZWxzZSBpZiAoIWhhdmVfY29w eSkgeworCQlyZXQgPSBlYl9jb3B5X3JlbG9jYXRpb25zKGViKTsKKwkJaGF2ZV9jb3B5ID0gdHJ1 ZTsKKwl9IGVsc2UgeworCQljb25kX3Jlc2NoZWQoKTsKKwkJcmV0ID0gMDsKKwl9CisJaWYgKHJl dCkgeworCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiByZXQ7CiAJ fQogCiAJcmV0ID0gaTkxNV9tdXRleF9sb2NrX2ludGVycnVwdGlibGUoZGV2KTsKQEAgLTEwODQs MTYgKzEyNjgsMTggQEAgZWJfcmVsb2NhdGVfc2xvdyhzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICpl YikKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAotCXJldCA9IGViX3Jlc2VydmUoZWIpOwotCWlm IChyZXQpCi0JCWdvdG8gZXJyOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZlYi0+dm1h cywgZXhlY19saXN0KSB7Ci0JCWludCBpZHggPSB2bWEtPmV4ZWNfZW50cnkgLSBlYi0+ZXhlYzsK LQotCQlyZXQgPSBlYl9yZWxvY2F0ZV92bWFfc2xvdyh2bWEsIGViLCByZWxvYyArIHJlbG9jX29m ZnNldFtpZHhdKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZXJyOworCWxpc3RfZm9yX2VhY2hfZW50 cnkodm1hLCAmZWItPnJlbG9jcywgcmVsb2NfbGluaykgeworCQlpZiAoIWhhdmVfY29weSkgewor CQkJcGFnZWZhdWx0X2Rpc2FibGUoKTsKKwkJCXJldCA9IGViX3JlbG9jYXRlX3ZtYShlYiwgdm1h KTsKKwkJCXBhZ2VmYXVsdF9lbmFibGUoKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byByZXBlYXQ7 CisJCX0gZWxzZSB7CisJCQlyZXQgPSBlYl9yZWxvY2F0ZV92bWFfc2xvdyhlYiwgdm1hKTsKKwkJ CWlmIChyZXQpCisJCQkJZ290byBlcnI7CisJCX0KIAl9CiAKIAkvKiBMZWF2ZSB0aGUgdXNlciBy ZWxvY2F0aW9ucyBhcyBhcmUsIHRoaXMgaXMgdGhlIHBhaW5mdWxseSBzbG93IHBhdGgsCkBAIC0x MTAzLDExICsxMjg5LDUxIEBAIGViX3JlbG9jYXRlX3Nsb3coc3RydWN0IGk5MTVfZXhlY2J1ZmZl ciAqZWIpCiAJICovCiAKIGVycjoKLQlkcm1fZnJlZV9sYXJnZShyZWxvYyk7Ci0JZHJtX2ZyZWVf bGFyZ2UocmVsb2Nfb2Zmc2V0KTsKKwlpZiAocmV0ID09IC1FQUdBSU4pCisJCWdvdG8gcmVwZWF0 OworCisJaWYgKGhhdmVfY29weSkgeworCQljb25zdCB1bnNpZ25lZCBpbnQgY291bnQgPSBlYi0+ YXJncy0+YnVmZmVyX2NvdW50OworCQl1bnNpZ25lZCBpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBp IDwgY291bnQ7IGkrKykgeworCQkJY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVj dDIgKmVudHJ5ID0KKwkJCQkmZWItPmV4ZWNbaV07CisJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl bG9jYXRpb25fZW50cnkgKnJlbG9jczsKKworCQkJaWYgKGVudHJ5LT5yZWxvY2F0aW9uX2NvdW50 ID09IDApCisJCQkJY29udGludWU7CisKKwkJCXJlbG9jcyA9IHRvX3B0cih0eXBlb2YoKnJlbG9j cyksIGVudHJ5LT5yZWxvY3NfcHRyKTsKKwkJCWRybV9mcmVlX2xhcmdlKHJlbG9jcyk7CisJCX0K Kwl9CisKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBlYl9leHBvcnRfZmVuY2Uoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X3JlcXVlc3QgKnJlcSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHJl c2VydmF0aW9uX29iamVjdCAqcmVzdjsKKworCXJlc3YgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X2Rt YWJ1Zl9yZXN2KG9iaik7CisJaWYgKCFyZXN2KQorCQlyZXR1cm47CisKKwkvKiBJZ25vcmUgZXJy b3JzIGZyb20gZmFpbGluZyB0byBhbGxvY2F0ZSB0aGUgbmV3IGZlbmNlLCB3ZSBjYW4ndAorCSAq IGhhbmRsZSBhbiBlcnJvciByaWdodCBub3cuIFdvcnN0IGNhc2Ugc2hvdWxkIGJlIG1pc3NlZAor CSAqIHN5bmNocm9uaXNhdGlvbiBsZWFkaW5nIHRvIHJlbmRlcmluZyBjb3JydXB0aW9uLgorCSAq LworCXd3X211dGV4X2xvY2soJnJlc3YtPmxvY2ssIE5VTEwpOworCWlmIChmbGFncyAmIEVYRUNf T0JKRUNUX1dSSVRFKQorCQlyZXNlcnZhdGlvbl9vYmplY3RfYWRkX2V4Y2xfZmVuY2UocmVzdiwg JnJlcS0+ZmVuY2UpOworCWVsc2UgaWYgKHJlc2VydmF0aW9uX29iamVjdF9yZXNlcnZlX3NoYXJl ZChyZXN2KSA9PSAwKQorCQlyZXNlcnZhdGlvbl9vYmplY3RfYWRkX3NoYXJlZF9mZW5jZShyZXN2 LCAmcmVxLT5mZW5jZSk7CisJd3dfbXV0ZXhfdW5sb2NrKCZyZXN2LT5sb2NrKTsKK30KKwogc3Rh dGljIHVuc2lnbmVkIGludCBlYl9vdGhlcl9lbmdpbmVzKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIg KmViKQogewogCXVuc2lnbmVkIGludCBtYXNrOwpAQCAtMTEyMiwyMyArMTM0OCw0MCBAQCBzdGF0 aWMgaW50CiBlYl9tb3ZlX3RvX2dwdShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikKIHsKIAlj b25zdCB1bnNpZ25lZCBpbnQgb3RoZXJfcmluZ3MgPSBlYl9vdGhlcl9lbmdpbmVzKGViKTsKLQlz dHJ1Y3QgaTkxNV92bWEgKnZtYTsKKwljb25zdCB1bnNpZ25lZCBpbnQgY291bnQgPSBlYi0+YXJn cy0+YnVmZmVyX2NvdW50OworCXVuc2lnbmVkIGludCBpOwogCWludCByZXQ7CiAKLQlsaXN0X2Zv cl9lYWNoX2VudHJ5KHZtYSwgJmViLT52bWFzLCBleGVjX2xpc3QpIHsKKwlmb3IgKGkgPSAwOyBp IDwgY291bnQ7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0 MiAqZW50cnkgPSAmZWItPmV4ZWNbaV07CisJCXN0cnVjdCBpOTE1X3ZtYSAqdm1hID0gdG9fcHRy KHN0cnVjdCBpOTE1X3ZtYSwgZW50cnktPnJzdmQyKTsKIAkJc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaiA9IHZtYS0+b2JqOwogCiAJCWlmIChvYmotPmZsYWdzICYgb3RoZXJfcmluZ3Mp IHsKLQkJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zeW5jKG9iaiwKLQkJCQkJCSAgIGViLT5yZXF1 ZXN0LAotCQkJCQkJICAgdm1hLT5leGVjX2VudHJ5LT5mbGFncyAmIEVYRUNfT0JKRUNUX1dSSVRF KTsKKwkJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zeW5jKG9iaiwgZWItPnJlcXVlc3QsCisJCQkJ CQkgICBlbnRyeS0+ZmxhZ3MgJiBFWEVDX09CSkVDVF9XUklURSk7CiAJCQlpZiAocmV0KQogCQkJ CXJldHVybiByZXQ7CiAJCX0KIAotCQlpZiAob2JqLT5iYXNlLndyaXRlX2RvbWFpbiAmIEk5MTVf R0VNX0RPTUFJTl9DUFUpCi0JCQlpOTE1X2dlbV9jbGZsdXNoX29iamVjdChvYmosIGZhbHNlKTsK KwkJaWYgKG9iai0+YmFzZS53cml0ZV9kb21haW4pIHsKKwkJCWlmIChvYmotPmJhc2Uud3JpdGVf ZG9tYWluICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkKKwkJCQlpOTE1X2dlbV9jbGZsdXNoX29iamVj dChvYmosIGZhbHNlKTsKKworCQkJb2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9IDA7CisJCX0KKwor CQlpZiAoZW50cnktPmZsYWdzICYgRVhFQ19PQkpFQ1RfV1JJVEUpCisJCQlvYmotPmJhc2UucmVh ZF9kb21haW5zID0gMDsKKwkJb2JqLT5iYXNlLnJlYWRfZG9tYWlucyB8PSBJOTE1X0dFTV9HUFVf RE9NQUlOUzsKKworCQlpOTE1X3ZtYV9tb3ZlX3RvX2FjdGl2ZSh2bWEsIGViLT5yZXF1ZXN0LCBl bnRyeS0+ZmxhZ3MpOworCQllYl9leHBvcnRfZmVuY2Uob2JqLCBlYi0+cmVxdWVzdCwgZW50cnkt PmZsYWdzKTsKKworCQlfX2ViX3VucmVzZXJ2ZV92bWEodm1hLCBlbnRyeSk7CisJCXZtYS0+ZXhl Y19lbnRyeSA9IE5VTEw7CiAJfQorCWViLT5leGVjID0gTlVMTDsKIAogCS8qIFVuY29uZGl0aW9u YWxseSBmbHVzaCBhbnkgY2hpcHNldCBjYWNoZXMgKGZvciBzdHJlYW1pbmcgd3JpdGVzKS4gKi8K IAlpOTE1X2dlbV9jaGlwc2V0X2ZsdXNoKGViLT5pOTE1KTsKQEAgLTExNzAsMTA0ICsxNDEzLDYg QEAgaTkxNV9nZW1fY2hlY2tfZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZm ZXIyICpleGVjKQogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW50Ci12YWxpZGF0ZV9leGVj X2xpc3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJICAgc3RydWN0IGRybV9pOTE1X2dlbV9l eGVjX29iamVjdDIgKmV4ZWMsCi0JCSAgIGludCBjb3VudCkKLXsKLQl1bnNpZ25lZCByZWxvY3Nf dG90YWwgPSAwOwotCXVuc2lnbmVkIHJlbG9jc19tYXggPSBVSU5UX01BWCAvIHNpemVvZihzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkpOwotCXVuc2lnbmVkIGludmFsaWRfZmxh Z3M7Ci0JaW50IGk7Ci0KLQkvKiBJTlRFUk5BTCBmbGFncyBtdXN0IG5vdCBvdmVybGFwIHdpdGgg ZXh0ZXJuYWwgb25lcyAqLwotCUJVSUxEX0JVR19PTihfX0VYRUNfT0JKRUNUX0lOVEVSTkFMX0ZM QUdTICYgfl9fRVhFQ19PQkpFQ1RfVU5LTk9XTl9GTEFHUyk7Ci0KLQlpbnZhbGlkX2ZsYWdzID0g X19FWEVDX09CSkVDVF9VTktOT1dOX0ZMQUdTOwotCWlmIChVU0VTX0ZVTExfUFBHVFQoZGV2KSkK LQkJaW52YWxpZF9mbGFncyB8PSBFWEVDX09CSkVDVF9ORUVEU19HVFQ7Ci0KLQlmb3IgKGkgPSAw OyBpIDwgY291bnQ7IGkrKykgewotCQljaGFyIF9fdXNlciAqcHRyID0gdTY0X3RvX3VzZXJfcHRy KGV4ZWNbaV0ucmVsb2NzX3B0cik7Ci0JCWludCBsZW5ndGg7IC8qIGxpbWl0ZWQgYnkgZmF1bHRf aW5fcGFnZXNfcmVhZGFibGUoKSAqLwotCi0JCWlmIChleGVjW2ldLmZsYWdzICYgaW52YWxpZF9m bGFncykKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCS8qIE9mZnNldCBjYW4gYmUgdXNlZCBhcyBp bnB1dCAoRVhFQ19PQkpFQ1RfUElOTkVEKSwgcmVqZWN0Ci0JCSAqIGFueSBub24tcGFnZS1hbGln bmVkIG9yIG5vbi1jYW5vbmljYWwgYWRkcmVzc2VzLgotCQkgKi8KLQkJaWYgKGV4ZWNbaV0uZmxh Z3MgJiBFWEVDX09CSkVDVF9QSU5ORUQpIHsKLQkJCWlmIChleGVjW2ldLm9mZnNldCAhPQotCQkJ ICAgIGdlbjhfY2Fub25pY2FsX2FkZHIoZXhlY1tpXS5vZmZzZXQgJiBQQUdFX01BU0spKQotCQkJ CXJldHVybiAtRUlOVkFMOwotCi0JCQkvKiBGcm9tIGRybV9tbSBwZXJzcGVjdGl2ZSBhZGRyZXNz IHNwYWNlIGlzIGNvbnRpbnVvdXMsCi0JCQkgKiBzbyBmcm9tIHRoaXMgcG9pbnQgd2UncmUgYWx3 YXlzIHVzaW5nIG5vbi1jYW5vbmljYWwKLQkJCSAqIGZvcm0gaW50ZXJuYWxseS4KLQkJCSAqLwot CQkJZXhlY1tpXS5vZmZzZXQgPSBnZW44X25vbmNhbm9uaWNhbF9hZGRyKGV4ZWNbaV0ub2Zmc2V0 KTsKLQkJfQotCi0JCWlmIChleGVjW2ldLmFsaWdubWVudCAmJiAhaXNfcG93ZXJfb2ZfMihleGVj W2ldLmFsaWdubWVudCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkvKiBwYWRfdG9fc2l6ZSB3 YXMgb25jZSBhIHJlc2VydmVkIGZpZWxkLCBzbyBzYW5pdGl6ZSBpdCAqLwotCQlpZiAoZXhlY1tp XS5mbGFncyAmIEVYRUNfT0JKRUNUX1BBRF9UT19TSVpFKSB7Ci0JCQlpZiAob2Zmc2V0X2luX3Bh Z2UoZXhlY1tpXS5wYWRfdG9fc2l6ZSkpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0gZWxzZSB7 Ci0JCQlleGVjW2ldLnBhZF90b19zaXplID0gMDsKLQkJfQotCi0JCS8qIEZpcnN0IGNoZWNrIGZv ciBtYWxpY2lvdXMgaW5wdXQgY2F1c2luZyBvdmVyZmxvdyBpbgotCQkgKiB0aGUgd29yc3QgY2Fz ZSB3aGVyZSB3ZSBuZWVkIHRvIGFsbG9jYXRlIHRoZSBlbnRpcmUKLQkJICogcmVsb2NhdGlvbiB0 cmVlIGFzIGEgc2luZ2xlIGFycmF5LgotCQkgKi8KLQkJaWYgKGV4ZWNbaV0ucmVsb2NhdGlvbl9j b3VudCA+IHJlbG9jc19tYXggLSByZWxvY3NfdG90YWwpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJ cmVsb2NzX3RvdGFsICs9IGV4ZWNbaV0ucmVsb2NhdGlvbl9jb3VudDsKLQotCQlsZW5ndGggPSBl eGVjW2ldLnJlbG9jYXRpb25fY291bnQgKgotCQkJc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9nZW1f cmVsb2NhdGlvbl9lbnRyeSk7Ci0JCS8qCi0JCSAqIFdlIG11c3QgY2hlY2sgdGhhdCB0aGUgZW50 aXJlIHJlbG9jYXRpb24gYXJyYXkgaXMgc2FmZQotCQkgKiB0byByZWFkLCBidXQgc2luY2Ugd2Ug bWF5IG5lZWQgdG8gdXBkYXRlIHRoZSBwcmVzdW1lZAotCQkgKiBvZmZzZXRzIGR1cmluZyBleGVj dXRpb24sIGNoZWNrIGZvciBmdWxsIHdyaXRlIGFjY2Vzcy4KLQkJICovCi0JCWlmICghYWNjZXNz X29rKFZFUklGWV9XUklURSwgcHRyLCBsZW5ndGgpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJ aWYgKGxpa2VseSghaTkxNS5wcmVmYXVsdF9kaXNhYmxlKSkgewotCQkJaWYgKGZhdWx0X2luX211 bHRpcGFnZXNfcmVhZGFibGUocHRyLCBsZW5ndGgpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQl9 Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZWJfc2VsZWN0X2NvbnRleHQoc3Ry dWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCi17Ci0Jc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0 eDsKLQl1bnNpZ25lZCBpbnQgY3R4X2lkOwotCi0JY3R4X2lkID0gaTkxNV9leGVjYnVmZmVyMl9n ZXRfY29udGV4dF9pZCgqZWItPmFyZ3MpOwotCWN0eCA9IGk5MTVfZ2VtX2NvbnRleHRfbG9va3Vw KGViLT5maWxlLT5kcml2ZXJfcHJpdiwgY3R4X2lkKTsKLQlpZiAodW5saWtlbHkoSVNfRVJSKGN0 eCkpKQotCQlyZXR1cm4gUFRSX0VSUihjdHgpOwotCi0JaWYgKHVubGlrZWx5KGN0eC0+aGFuZ19z dGF0cy5iYW5uZWQpKSB7Ci0JCURSTV9ERUJVRygiQ29udGV4dCAldSB0cmllZCB0byBzdWJtaXQg d2hpbGUgYmFubmVkXG4iLCBjdHhfaWQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQllYi0+Y3R4 ID0gaTkxNV9nZW1fY29udGV4dF9nZXQoY3R4KTsKLQllYi0+dm0gPSBjdHgtPnBwZ3R0ID8gJmN0 eC0+cHBndHQtPmJhc2UgOiAmZWItPmk5MTUtPmdndHQuYmFzZTsKLQotCXJldHVybiAwOwotfQot CiB2b2lkIGk5MTVfdm1hX21vdmVfdG9fYWN0aXZlKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAogCQkJ ICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKIAkJCSAgICAgdW5zaWduZWQg aW50IGZsYWdzKQpAQCAtMTI4OSwxMSArMTQzNCw3IEBAIHZvaWQgaTkxNV92bWFfbW92ZV90b19h Y3RpdmUoc3RydWN0IGk5MTVfdm1hICp2bWEsCiAKIAlpZiAoZmxhZ3MgJiBFWEVDX09CSkVDVF9X UklURSkgewogCQlpOTE1X2dlbV9hY3RpdmVfc2V0KCZvYmotPmxhc3Rfd3JpdGUsIHJlcSk7Ci0K IAkJaW50ZWxfZmJfb2JqX2ludmFsaWRhdGUob2JqLCBPUklHSU5fQ1MpOwotCi0JCS8qIHVwZGF0 ZSBmb3IgdGhlIGltcGxpY2l0IGZsdXNoIGFmdGVyIGEgYmF0Y2ggKi8KLQkJb2JqLT5iYXNlLndy aXRlX2RvbWFpbiAmPSB+STkxNV9HRU1fR1BVX0RPTUFJTlM7CiAJfQogCiAJaWYgKGZsYWdzICYg RVhFQ19PQkpFQ1RfTkVFRFNfRkVOQ0UpCkBAIC0xMzA0LDQ5ICsxNDQ1LDYgQEAgdm9pZCBpOTE1 X3ZtYV9tb3ZlX3RvX2FjdGl2ZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKIAlsaXN0X21vdmVfdGFp bCgmdm1hLT52bV9saW5rLCAmdm1hLT52bS0+YWN0aXZlX2xpc3QpOwogfQogCi1zdGF0aWMgdm9p ZCBlYl9leHBvcnRfZmVuY2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKLQkJCSAg ICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKLQkJCSAgICB1bnNpZ25lZCBpbnQg ZmxhZ3MpCi17Ci0Jc3RydWN0IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdjsKLQotCXJlc3YgPSBp OTE1X2dlbV9vYmplY3RfZ2V0X2RtYWJ1Zl9yZXN2KG9iaik7Ci0JaWYgKCFyZXN2KQotCQlyZXR1 cm47Ci0KLQkvKiBJZ25vcmUgZXJyb3JzIGZyb20gZmFpbGluZyB0byBhbGxvY2F0ZSB0aGUgbmV3 IGZlbmNlLCB3ZSBjYW4ndAotCSAqIGhhbmRsZSBhbiBlcnJvciByaWdodCBub3cuIFdvcnN0IGNh c2Ugc2hvdWxkIGJlIG1pc3NlZAotCSAqIHN5bmNocm9uaXNhdGlvbiBsZWFkaW5nIHRvIHJlbmRl cmluZyBjb3JydXB0aW9uLgotCSAqLwotCXd3X211dGV4X2xvY2soJnJlc3YtPmxvY2ssIE5VTEwp OwotCWlmIChmbGFncyAmIEVYRUNfT0JKRUNUX1dSSVRFKQotCQlyZXNlcnZhdGlvbl9vYmplY3Rf YWRkX2V4Y2xfZmVuY2UocmVzdiwgJnJlcS0+ZmVuY2UpOwotCWVsc2UgaWYgKHJlc2VydmF0aW9u X29iamVjdF9yZXNlcnZlX3NoYXJlZChyZXN2KSA9PSAwKQotCQlyZXNlcnZhdGlvbl9vYmplY3Rf YWRkX3NoYXJlZF9mZW5jZShyZXN2LCAmcmVxLT5mZW5jZSk7Ci0Jd3dfbXV0ZXhfdW5sb2NrKCZy ZXN2LT5sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQKLWViX21vdmVfdG9fYWN0aXZlKHN0cnVjdCBp OTE1X2V4ZWNidWZmZXIgKmViKQotewotCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwotCi0JbGlzdF9m b3JfZWFjaF9lbnRyeSh2bWEsICZlYi0+dm1hcywgZXhlY19saXN0KSB7Ci0JCXN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmogPSB2bWEtPm9iajsKLQkJdTMyIG9sZF9yZWFkID0gb2JqLT5i YXNlLnJlYWRfZG9tYWluczsKLQkJdTMyIG9sZF93cml0ZSA9IG9iai0+YmFzZS53cml0ZV9kb21h aW47Ci0KLQkJb2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9IDA7Ci0JCWlmICh2bWEtPmV4ZWNfZW50 cnktPmZsYWdzICYgRVhFQ19PQkpFQ1RfV1JJVEUpCi0JCQlvYmotPmJhc2UucmVhZF9kb21haW5z ID0gMDsKLQkJb2JqLT5iYXNlLnJlYWRfZG9tYWlucyB8PSBJOTE1X0dFTV9HUFVfRE9NQUlOUzsK LQotCQlpOTE1X3ZtYV9tb3ZlX3RvX2FjdGl2ZSh2bWEsIGViLT5yZXF1ZXN0LCB2bWEtPmV4ZWNf ZW50cnktPmZsYWdzKTsKLQkJZWJfZXhwb3J0X2ZlbmNlKG9iaiwgZWItPnJlcXVlc3QsIHZtYS0+ ZXhlY19lbnRyeS0+ZmxhZ3MpOwotCQl0cmFjZV9pOTE1X2dlbV9vYmplY3RfY2hhbmdlX2RvbWFp bihvYmosIG9sZF9yZWFkLCBvbGRfd3JpdGUpOwotCX0KLX0KLQogc3RhdGljIGludAogaTkxNV9y ZXNldF9nZW43X3NvbF9vZmZzZXRzKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQog ewpAQCAtMTM1OCwxNiArMTQ1NiwxNiBAQCBpOTE1X3Jlc2V0X2dlbjdfc29sX29mZnNldHMoc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAot CXJldCA9IGludGVsX3JpbmdfYmVnaW4ocmVxLCA0ICogMyk7CisJcmV0ID0gaW50ZWxfcmluZ19i ZWdpbihyZXEsIDQgKiAyICsgMik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCWludGVs X3JpbmdfZW1pdChyaW5nLCBNSV9MT0FEX1JFR0lTVEVSX0lNTSg0KSk7CiAJZm9yIChpID0gMDsg aSA8IDQ7IGkrKykgewotCQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfTE9BRF9SRUdJU1RFUl9J TU0oMSkpOwogCQlpbnRlbF9yaW5nX2VtaXRfcmVnKHJpbmcsIEdFTjdfU09fV1JJVEVfT0ZGU0VU KGkpKTsKIAkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIDApOwogCX0KLQorCWludGVsX3JpbmdfZW1p dChyaW5nLCBNSV9OT09QKTsKIAlpbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7CiAKIAlyZXR1cm4g MDsKQEAgLTE0MDMsOSArMTUwMSwxMCBAQCBzdGF0aWMgc3RydWN0IGk5MTVfdm1hICplYl9wYXJz ZShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwgYm9vbCBpc19tYXN0ZXIpCiAJCWdvdG8gb3V0 OwogCiAJdm1hLT5leGVjX2VudHJ5ID0KLQkJbWVtc2V0KCZlYi0+c2hhZG93X2V4ZWNfZW50cnks IDAsIHNpemVvZigqdm1hLT5leGVjX2VudHJ5KSk7CisJCW1lbXNldCgmZWItPmV4ZWNbZWItPmFy Z3MtPmJ1ZmZlcl9jb3VudCsrXSwKKwkJICAgICAgIDAsIHNpemVvZigqdm1hLT5leGVjX2VudHJ5 KSk7CiAJdm1hLT5leGVjX2VudHJ5LT5mbGFncyA9IF9fRVhFQ19PQkpFQ1RfSEFTX1BJTjsKLQls aXN0X2FkZF90YWlsKCZ2bWEtPmV4ZWNfbGlzdCwgJmViLT52bWFzKTsKKwl2bWEtPmV4ZWNfZW50 cnktPnJzdmQyID0gKHVpbnRwdHJfdCl2bWE7CiAKIG91dDoKIAlpOTE1X2dlbV9vYmplY3RfdW5w aW5fcGFnZXMoc2hhZG93X2JhdGNoX29iaik7CkBAIC0xNDIxLDcwICsxNTIwLDgxIEBAIGFkZF90 b19jbGllbnQoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCiB9CiAKIHN0YXRpYyBp bnQKLWV4ZWNidWZfc3VibWl0KHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQorZWJfc2V0X2Nv bnN0YW50c19vZmZzZXQoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIpCiB7Ci0JaW50IGluc3Rw X21vZGU7Ci0JdTMyIGluc3RwX21hc2s7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gZWItPmk5MTU7CisJc3RydWN0IGludGVsX3JpbmcgKnJpbmc7CisJdTMyIG1vZGUsIG1h c2s7CiAJaW50IHJldDsKIAotCXJldCA9IGViX21vdmVfdG9fZ3B1KGViKTsKLQlpZiAocmV0KQot CQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gaTkxNV9zd2l0Y2hfY29udGV4dChlYi0+cmVxdWVzdCk7 Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWluc3RwX21vZGUgPSBlYi0+YXJncy0+Zmxh Z3MgJiBJOTE1X0VYRUNfQ09OU1RBTlRTX01BU0s7Ci0JaW5zdHBfbWFzayA9IEk5MTVfRVhFQ19D T05TVEFOVFNfTUFTSzsKLQlzd2l0Y2ggKGluc3RwX21vZGUpIHsKKwltb2RlID0gZWItPmFyZ3Mt PmZsYWdzICYgSTkxNV9FWEVDX0NPTlNUQU5UU19NQVNLOworCXN3aXRjaCAobW9kZSkgewogCWNh c2UgSTkxNV9FWEVDX0NPTlNUQU5UU19SRUxfR0VORVJBTDoKIAljYXNlIEk5MTVfRVhFQ19DT05T VEFOVFNfQUJTT0xVVEU6CiAJY2FzZSBJOTE1X0VYRUNfQ09OU1RBTlRTX1JFTF9TVVJGQUNFOgot CQlpZiAoaW5zdHBfbW9kZSAhPSAwICYmIGViLT5lbmdpbmUtPmlkICE9IFJDUykgewotCQkJRFJN X0RFQlVHKCJub24tMCByZWwgY29uc3RhbnRzIG1vZGUgb24gbm9uLVJDU1xuIik7Ci0JCQlyZXR1 cm4gLUVJTlZBTDsKLQkJfQotCi0JCWlmIChpbnN0cF9tb2RlICE9IGViLT5pOTE1LT5yZWxhdGl2 ZV9jb25zdGFudHNfbW9kZSkgewotCQkJaWYgKElOVEVMX0lORk8oZWItPmk5MTUpLT5nZW4gPCA0 KSB7Ci0JCQkJRFJNX0RFQlVHKCJubyByZWwgY29uc3RhbnRzIG9uIHByZS1nZW40XG4iKTsKLQkJ CQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJaWYgKElOVEVMX0lORk8oZWItPmk5MTUpLT5n ZW4gPiA1ICYmCi0JCQkgICAgaW5zdHBfbW9kZSA9PSBJOTE1X0VYRUNfQ09OU1RBTlRTX1JFTF9T VVJGQUNFKSB7Ci0JCQkJRFJNX0RFQlVHKCJyZWwgc3VyZmFjZSBjb25zdGFudHMgbW9kZSBpbnZh bGlkIG9uIGdlbjUrXG4iKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJLyogVGhl IEhXIGNoYW5nZWQgdGhlIG1lYW5pbmcgb24gdGhpcyBiaXQgb24gZ2VuNiAqLwotCQkJaWYgKElO VEVMX0lORk8oZWItPmk5MTUpLT5nZW4gPj0gNikKLQkJCQlpbnN0cF9tYXNrICY9IH5JOTE1X0VY RUNfQ09OU1RBTlRTX1JFTF9TVVJGQUNFOwotCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCURS TV9ERUJVRygiZXhlY2J1ZiB3aXRoIHVua25vd24gY29uc3RhbnRzOiAlZFxuIiwgaW5zdHBfbW9k ZSk7CisJCURSTV9ERUJVRygiZXhlY2J1ZiB3aXRoIHVua25vd24gY29uc3RhbnRzOiAlZFxuIiwg bW9kZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChlYi0+ZW5naW5lLT5pZCA9PSBS Q1MgJiYKLQkgICAgaW5zdHBfbW9kZSAhPSBlYi0+aTkxNS0+cmVsYXRpdmVfY29uc3RhbnRzX21v ZGUpIHsKLQkJc3RydWN0IGludGVsX3JpbmcgKnJpbmcgPSBlYi0+cmVxdWVzdC0+cmluZzsKKwlp ZiAobW9kZSA9PSBkZXZfcHJpdi0+cmVsYXRpdmVfY29uc3RhbnRzX21vZGUpCisJCXJldHVybiAw OwogCi0JCXJldCA9IGludGVsX3JpbmdfYmVnaW4oZWItPnJlcXVlc3QsIDQpOwotCQlpZiAocmV0 KQotCQkJcmV0dXJuIHJldDsKKwlpZiAoZWItPmVuZ2luZS0+aWQgIT0gUkNTKSB7CisJCURSTV9E RUJVRygibm9uLTAgcmVsIGNvbnN0YW50cyBtb2RlIG9uIG5vbi1SQ1NcbiIpOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CiAKLQkJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX05PT1ApOwotCQlpbnRl bF9yaW5nX2VtaXQocmluZywgTUlfTE9BRF9SRUdJU1RFUl9JTU0oMSkpOwotCQlpbnRlbF9yaW5n X2VtaXRfcmVnKHJpbmcsIElOU1RQTSk7Ci0JCWludGVsX3JpbmdfZW1pdChyaW5nLCBpbnN0cF9t YXNrIDw8IDE2IHwgaW5zdHBfbW9kZSk7Ci0JCWludGVsX3JpbmdfYWR2YW5jZShyaW5nKTsKKwlp ZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDQpIHsKKwkJRFJNX0RFQlVHKCJubyByZWwgY29uc3Rh bnRzIG9uIHByZS1nZW40XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCi0JCWViLT5pOTE1 LT5yZWxhdGl2ZV9jb25zdGFudHNfbW9kZSA9IGluc3RwX21vZGU7CisJaWYgKElOVEVMX0dFTihk ZXZfcHJpdikgPiA1ICYmCisJICAgIG1vZGUgPT0gSTkxNV9FWEVDX0NPTlNUQU5UU19SRUxfU1VS RkFDRSkgeworCQlEUk1fREVCVUcoInJlbCBzdXJmYWNlIGNvbnN0YW50cyBtb2RlIGludmFsaWQg b24gZ2VuNStcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwkvKiBUaGUgSFcgY2hhbmdl ZCB0aGUgbWVhbmluZyBvbiB0aGlzIGJpdCBvbiBnZW42ICovCisJbWFzayA9IEk5MTVfRVhFQ19D T05TVEFOVFNfTUFTSzsKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA2KQorCQltYXNrICY9 IH5JOTE1X0VYRUNfQ09OU1RBTlRTX1JFTF9TVVJGQUNFOworCisJcmV0ID0gaW50ZWxfcmluZ19i ZWdpbihlYi0+cmVxdWVzdCwgNCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJpbmcg PSBlYi0+cmVxdWVzdC0+cmluZzsKKwlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfTk9PUCk7CisJ aW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX0xPQURfUkVHSVNURVJfSU1NKDEpKTsKKwlpbnRlbF9y aW5nX2VtaXRfcmVnKHJpbmcsIElOU1RQTSk7CisJaW50ZWxfcmluZ19lbWl0KHJpbmcsIG1hc2sg PDwgMTYgfCBtb2RlKTsKKwlpbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7CisKKwlkZXZfcHJpdi0+ cmVsYXRpdmVfY29uc3RhbnRzX21vZGUgPSBtb2RlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQKK2ViX3N1Ym1pdChzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikKK3sKKwlpbnQgcmV0 OworCisJcmV0ID0gZWJfbW92ZV90b19ncHUoZWIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKKwlyZXQgPSBpOTE1X3N3aXRjaF9jb250ZXh0KGViLT5yZXF1ZXN0KTsKKwlpZiAocmV0KQor CQlyZXR1cm4gcmV0OworCisJcmV0ID0gZWJfc2V0X2NvbnN0YW50c19vZmZzZXQoZWIpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKIAlpZiAoZWItPmFyZ3MtPmZsYWdzICYgSTkxNV9FWEVD X0dFTjdfU09MX1JFU0VUKSB7CiAJCXJldCA9IGk5MTVfcmVzZXRfZ2VuN19zb2xfb2Zmc2V0cyhl Yi0+cmVxdWVzdCk7CiAJCWlmIChyZXQpCkBAIC0xNDkzLDE1ICsxNjAzLDEzIEBAIGV4ZWNidWZf c3VibWl0KHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViKQogCiAJcmV0ID0gZWItPmVuZ2luZS0+ ZW1pdF9iYl9zdGFydChlYi0+cmVxdWVzdCwKIAkJCQkJZWItPmJhdGNoLT5ub2RlLnN0YXJ0ICsK LQkJCQkJZWItPmJhdGNoX3N0YXJ0X29mZnNldCwKKwkJCQkJZWItPmFyZ3MtPmJhdGNoX3N0YXJ0 X29mZnNldCwKIAkJCQkJZWItPmFyZ3MtPmJhdGNoX2xlbiwKIAkJCQkJZWItPmRpc3BhdGNoX2Zs YWdzKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJdHJhY2VfaTkxNV9nZW1fcmluZ19k aXNwYXRjaChlYi0+cmVxdWVzdCwgZWItPmRpc3BhdGNoX2ZsYWdzKTsKLQotCWViX21vdmVfdG9f YWN0aXZlKGViKTsKIAlhZGRfdG9fY2xpZW50KGViLT5yZXF1ZXN0LCBlYi0+ZmlsZSk7CiAKIAly ZXR1cm4gMDsKQEAgLTE1OTYsMTggKzE3MDQsMjEgQEAgaTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCXN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgZWI7CiAJaW50 IHJldDsKIAorCUJVSUxEX0JVR19PTihfX0VYRUNfT0JKRUNUX0lOVEVSTkFMX0ZMQUdTICYgfl9f RVhFQ19PQkpFQ1RfVU5LTk9XTl9GTEFHUyk7CisKIAlpZiAoIWk5MTVfZ2VtX2NoZWNrX2V4ZWNi dWZmZXIoYXJncykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gdmFsaWRhdGVfZXhlY19s aXN0KGRldiwgZXhlYywgYXJncy0+YnVmZmVyX2NvdW50KTsKLQlpZiAocmV0KQotCQlyZXR1cm4g cmV0OwotCiAJZWIuaTkxNSA9IHRvX2k5MTUoZGV2KTsKIAllYi5maWxlID0gZmlsZTsKIAllYi5h cmdzID0gYXJnczsKLQllYi5leGVjID0gZXhlYzsKLQllYi5uZWVkX3JlbG9jcyA9IChhcmdzLT5m bGFncyAmIEk5MTVfRVhFQ19OT19SRUxPQykgPT0gMDsKKwlpZiAoKGFyZ3MtPmZsYWdzICYgSTkx NV9FWEVDX05PX1JFTE9DKSA9PSAwKQorCQlhcmdzLT5mbGFncyB8PSBfX0VYRUNfSEFTX1JFTE9D OworCWViLmV4ZWMgPSBOVUxMOworCWViLmN0eCA9IE5VTEw7CisJZWIuaW52YWxpZF9mbGFncyA9 IF9fRVhFQ19PQkpFQ1RfVU5LTk9XTl9GTEFHUzsKKwlpZiAoVVNFU19GVUxMX1BQR1RUKGViLmk5 MTUpKQorCQllYi5pbnZhbGlkX2ZsYWdzIHw9IEVYRUNfT0JKRUNUX05FRURTX0dUVDsKIAlyZWxv Y19jYWNoZV9pbml0KCZlYi5yZWxvY19jYWNoZSwgZWIuaTkxNSk7CiAKIAllYi5kaXNwYXRjaF9m bGFncyA9IDA7CkBAIC0xNjM4LDYgKzE3NDksOSBAQCBpOTE1X2dlbV9kb19leGVjYnVmZmVyKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCWViLmRpc3BhdGNoX2ZsYWdzIHw9IEk5MTVfRElTUEFU Q0hfUlM7CiAJfQogCisJaWYgKGViX2NyZWF0ZSgmZWIpKQorCQlyZXR1cm4gLUVOT01FTTsKKwog CS8qIFRha2UgYSBsb2NhbCB3YWtlcmVmIGZvciBwcmVwYXJpbmcgdG8gZGlzcGF0Y2ggdGhlIGV4 ZWNidWYgYXMKIAkgKiB3ZSBleHBlY3QgdG8gYWNjZXNzIHRoZSBoYXJkd2FyZSBmYWlybHkgZnJl cXVlbnRseSBpbiB0aGUKIAkgKiBwcm9jZXNzLiBVcG9uIGZpcnN0IGRpc3BhdGNoLCB3ZSBhY3F1 aXJlIGFub3RoZXIgcHJvbG9uZ2VkCkBAIC0xNjQ1LDcwICsxNzU5LDU3IEBAIGk5MTVfZ2VtX2Rv X2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkgKiAxMDBtcy4KIAkgKi8KIAlp bnRlbF9ydW50aW1lX3BtX2dldChlYi5pOTE1KTsKLQogCXJldCA9IGk5MTVfbXV0ZXhfbG9ja19p bnRlcnJ1cHRpYmxlKGRldik7CiAJaWYgKHJldCkKLQkJZ290byBwcmVfbXV0ZXhfZXJyOworCQln b3RvIGVycl9ycG07CiAKIAlyZXQgPSBlYl9zZWxlY3RfY29udGV4dCgmZWIpOwotCWlmIChyZXQp IHsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JCWdvdG8gcHJlX211dGV4 X2VycjsKLQl9CisJaWYgKHVubGlrZWx5KHJldCkpCisJCWdvdG8gZXJyX3VubG9jazsKIAotCWlm IChlYl9jcmVhdGUoJmViKSkgewotCQlpOTE1X2dlbV9jb250ZXh0X3B1dChlYi5jdHgpOwotCQlt dXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290 byBwcmVfbXV0ZXhfZXJyOwotCX0KLQotCS8qIExvb2sgdXAgb2JqZWN0IGhhbmRsZXMgKi8KKwll Yi5leGVjID0gZXhlYzsKIAlyZXQgPSBlYl9sb29rdXBfdm1hcygmZWIpOwotCWlmIChyZXQpCi0J CWdvdG8gZXJyOwotCi0JLyogdGFrZSBub3RlIG9mIHRoZSBiYXRjaCBidWZmZXIgYmVmb3JlIHdl IG1pZ2h0IHJlb3JkZXIgdGhlIGxpc3RzICovCi0JZWIuYmF0Y2ggPSBlYl9nZXRfYmF0Y2goJmVi KTsKLQotCS8qIE1vdmUgdGhlIG9iamVjdHMgZW4tbWFzc2UgaW50byB0aGUgR1RULCBldmljdGlu ZyBpZiBuZWNlc3NhcnkuICovCi0JcmV0ID0gZWJfcmVzZXJ2ZSgmZWIpOwotCWlmIChyZXQpCi0J CWdvdG8gZXJyOworCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIGVycl9jb250ZXh0OwogCiAJ LyogVGhlIG9iamVjdHMgYXJlIGluIHRoZWlyIGZpbmFsIGxvY2F0aW9ucywgYXBwbHkgdGhlIHJl bG9jYXRpb25zLiAqLwotCWlmIChlYi5uZWVkX3JlbG9jcykKKwlpZiAoYXJncy0+ZmxhZ3MgJiBf X0VYRUNfSEFTX1JFTE9DICYmICFsaXN0X2VtcHR5KCZlYi5yZWxvY3MpKSB7CiAJCXJldCA9IGVi X3JlbG9jYXRlKCZlYik7Ci0JaWYgKHJldCkgewotCQlpZiAocmV0ID09IC1FRkFVTFQpIHsKKwkJ aWYgKHJldCA9PSAtRUFHQUlOIHx8IHJldCA9PSAtRUZBVUxUKQogCQkJcmV0ID0gZWJfcmVsb2Nh dGVfc2xvdygmZWIpOwotCQkJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmRldi0+c3RydWN0X211 dGV4KSk7CisJCWlmIChyZXQpIHsKKwkJCS8qIElmIHRoZSB1c2VyIGV4cGVjdHMgdGhlIGV4ZWNv YmplY3Qub2Zmc2V0IGFuZAorCQkJICogcmVsb2MucHJlc3VtZWRfb2Zmc2V0IHRvIGJlIGFuIGV4 YWN0IG1hdGNoLAorCQkJICogYXMgZm9yIHVzaW5nIE5PX1JFTE9DLCB0aGVuIHdlIGNhbm5vdCB1 cGRhdGUKKwkJCSAqIHRoZSBleGVjb2JqZWN0Lm9mZnNldCB1bnRpbCB3ZSBoYXZlIGNvbXBsZXRl ZAorCQkJICogcmVsb2NhdGlvbi4KKwkJCSAqLworCQkJaWYgKGFyZ3MtPmZsYWdzICYgSTkxNV9F WEVDX05PX1JFTE9DKQorCQkJCWFyZ3MtPmZsYWdzICY9IH5fX0VYRUNfSEFTX1JFTE9DOworCQkJ Z290byBlcnJfdm1hOwogCQl9Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGVycjsKIAl9CiAKIAkvKiBT ZXQgdGhlIHBlbmRpbmcgcmVhZCBkb21haW5zIGZvciB0aGUgYmF0Y2ggYnVmZmVyIHRvIENPTU1B TkQgKi8KLQlpZiAoZWIuYmF0Y2gtPmV4ZWNfZW50cnktPmZsYWdzICYgRVhFQ19PQkpFQ1RfV1JJ VEUpIHsKKwlpZiAodW5saWtlbHkoZWIuYmF0Y2gtPmV4ZWNfZW50cnktPmZsYWdzICYgRVhFQ19P QkpFQ1RfV1JJVEUpKSB7CiAJCURSTV9ERUJVRygiQXR0ZW1wdGluZyB0byB1c2Ugc2VsZi1tb2Rp ZnlpbmcgYmF0Y2ggYnVmZmVyXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBlcnI7CisJ CWdvdG8gZXJyX3ZtYTsKIAl9CiAJaWYgKGFyZ3MtPmJhdGNoX3N0YXJ0X29mZnNldCA+IGViLmJh dGNoLT5zaXplIHx8CiAJICAgIGFyZ3MtPmJhdGNoX2xlbiA+IGViLmJhdGNoLT5zaXplIC0gYXJn cy0+YmF0Y2hfc3RhcnRfb2Zmc2V0KSB7CiAJCURSTV9ERUJVRygiQXR0ZW1wdGluZyB0byB1c2Ug b3V0LW9mLWJvdW5kcyBiYXRjaFxuIik7CiAJCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyOwor CQlnb3RvIGVycl92bWE7CiAJfQogCi0JZWIuYmF0Y2hfc3RhcnRfb2Zmc2V0ID0gYXJncy0+YmF0 Y2hfc3RhcnRfb2Zmc2V0OwogCWlmIChpbnRlbF9lbmdpbmVfbmVlZHNfY21kX3BhcnNlcihlYi5l bmdpbmUpICYmIGFyZ3MtPmJhdGNoX2xlbikgewogCQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKIAog CQl2bWEgPSBlYl9wYXJzZSgmZWIsIGRybV9pc19jdXJyZW50X21hc3RlcihmaWxlKSk7CiAJCWlm IChJU19FUlIodm1hKSkgewogCQkJcmV0ID0gUFRSX0VSUih2bWEpOwotCQkJZ290byBlcnI7CisJ CQlnb3RvIGVycl92bWE7CiAJCX0KIAogCQlpZiAodm1hKSB7CkBAIC0xNzIyLDcgKzE4MjMsNyBA QCBpOTE1X2dlbV9kb19leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkgKiBj b21tYW5kIHBhcnNlciBoYXMgYWNjZXB0ZWQuCiAJCQkgKi8KIAkJCWViLmRpc3BhdGNoX2ZsYWdz IHw9IEk5MTVfRElTUEFUQ0hfU0VDVVJFOwotCQkJZWIuYmF0Y2hfc3RhcnRfb2Zmc2V0ID0gMDsK KwkJCWViLmFyZ3MtPmJhdGNoX3N0YXJ0X29mZnNldCA9IDA7CiAJCQllYi5iYXRjaCA9IHZtYTsK IAkJfQogCX0KQEAgLTE3MzEsNyArMTgzMiw2IEBAIGk5MTVfZ2VtX2RvX2V4ZWNidWZmZXIoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKIAkgKiBiYXRjaCIgYml0LiBIZW5jZSB3ZSBuZWVkIHRvIHBp biBzZWN1cmUgYmF0Y2hlcyBpbnRvIHRoZSBnbG9iYWwgZ3R0LgogCSAqIGhzdyBzaG91bGQgaGF2 ZSB0aGlzIGZpeGVkLCBidXQgYmR3IG11Y2tzIGl0IHVwIGFnYWluLiAqLwogCWlmIChlYi5kaXNw YXRjaF9mbGFncyAmIEk5MTVfRElTUEFUQ0hfU0VDVVJFKSB7Ci0JCXN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmogPSBlYi5iYXRjaC0+b2JqOwogCQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsK IAogCQkvKgpAQCAtMTc0NCwxNyArMTg0NCwxOCBAQCBpOTE1X2dlbV9kb19leGVjYnVmZmVyKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCSAqICAgZml0dGluZyBkdWUgdG8gZnJhZ21lbnRhdGlv bi4KIAkJICogU28gdGhpcyBpcyBhY3R1YWxseSBzYWZlLgogCQkgKi8KLQkJdm1hID0gaTkxNV9n ZW1fb2JqZWN0X2dndHRfcGluKG9iaiwgTlVMTCwgMCwgMCwgMCk7CisJCXZtYSA9IGk5MTVfZ2Vt X29iamVjdF9nZ3R0X3BpbihlYi5iYXRjaC0+b2JqLCBOVUxMLAorCQkJCQkgICAgICAgMCwgMCwg MCk7CiAJCWlmIChJU19FUlIodm1hKSkgewogCQkJcmV0ID0gUFRSX0VSUih2bWEpOwotCQkJZ290 byBlcnI7CisJCQlnb3RvIGVycl92bWE7CiAJCX0KIAogCQllYi5iYXRjaCA9IHZtYTsKIAl9CiAK IAlpZiAoYXJncy0+YmF0Y2hfbGVuID09IDApCi0JCWFyZ3MtPmJhdGNoX2xlbiA9IGViLmJhdGNo LT5zaXplIC0gZWIuYmF0Y2hfc3RhcnRfb2Zmc2V0OworCQlhcmdzLT5iYXRjaF9sZW4gPSBlYi5i YXRjaC0+c2l6ZSAtIGViLmFyZ3MtPmJhdGNoX3N0YXJ0X29mZnNldDsKIAogCS8qIEFsbG9jYXRl IGEgcmVxdWVzdCBmb3IgdGhpcyBiYXRjaCBidWZmZXIgbmljZSBhbmQgZWFybHkuICovCiAJZWIu cmVxdWVzdCA9IGk5MTVfZ2VtX3JlcXVlc3RfYWxsb2MoZWIuZW5naW5lLCBlYi5jdHgpOwpAQCAt MTc3MSw3ICsxODcyLDcgQEAgaTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAogCSAqLwogCWViLnJlcXVlc3QtPmJhdGNoID0gZWIuYmF0Y2g7CiAKLQlyZXQgPSBl eGVjYnVmX3N1Ym1pdCgmZWIpOworCXJldCA9IGViX3N1Ym1pdCgmZWIpOwogCV9faTkxNV9hZGRf cmVxdWVzdChlYi5yZXF1ZXN0LCByZXQgPT0gMCk7CiAKIGVycl9iYXRjaF91bnBpbjoKQEAgLTE3 ODMsMTUgKzE4ODQsMTggQEAgZXJyX2JhdGNoX3VucGluOgogCSAqLwogCWlmIChlYi5kaXNwYXRj aF9mbGFncyAmIEk5MTVfRElTUEFUQ0hfU0VDVVJFKQogCQlpOTE1X3ZtYV91bnBpbihlYi5iYXRj aCk7Ci1lcnI6CiAJLyogdGhlIHJlcXVlc3Qgb3ducyB0aGUgcmVmIG5vdyAqLwotCWViX2Rlc3Ry b3koJmViKTsKK2Vycl92bWE6CisJZWJfcmVsZWFzZV92bWEoJmViKTsKK2Vycl9jb250ZXh0Ogor CWk5MTVfZ2VtX2NvbnRleHRfcHV0KGViLmN0eCk7CitlcnJfdW5sb2NrOgogCW11dGV4X3VubG9j aygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCi1wcmVfbXV0ZXhfZXJyOgorZXJyX3JwbToKIAkvKiBp bnRlbF9ncHVfYnVzeSBzaG91bGQgYWxzbyBnZXQgYSByZWYsIHNvIGl0IHdpbGwgZnJlZSB3aGVu IHRoZSBkZXZpY2UKIAkgKiBpcyByZWFsbHkgaWRsZS4gKi8KIAlpbnRlbF9ydW50aW1lX3BtX3B1 dChlYi5pOTE1KTsKKwllYl9kZXN0cm95KCZlYik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTgx NSw4ICsxOTE5LDEyIEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdm9pZCAqZGF0YSwKIAl9CiAKIAkvKiBDb3B5IGluIHRoZSBleGVjIGxpc3QgZnJvbSB1c2Vy bGFuZCAqLwotCWV4ZWNfbGlzdCA9IGRybV9tYWxsb2NfYWIoc2l6ZW9mKCpleGVjX2xpc3QpLCBh cmdzLT5idWZmZXJfY291bnQpOwotCWV4ZWMyX2xpc3QgPSBkcm1fbWFsbG9jX2FiKHNpemVvZigq ZXhlYzJfbGlzdCksIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7CisJZXhlY19saXN0ID0gZHJtX21hbGxv Y19nZnAoYXJncy0+YnVmZmVyX2NvdW50LAorCQkJCSAgIHNpemVvZigqZXhlY19saXN0KSwKKwkJ CQkgICBfX0dGUF9OT1dBUk4gfCBHRlBfVEVNUE9SQVJZKTsKKwlleGVjMl9saXN0ID0gZHJtX21h bGxvY19nZnAoYXJncy0+YnVmZmVyX2NvdW50ICsgMSwKKwkJCQkgICAgc2l6ZW9mKCpleGVjMl9s aXN0KSwKKwkJCQkgICAgX19HRlBfTk9XQVJOIHwgR0ZQX1RFTVBPUkFSWSk7CiAJaWYgKGV4ZWNf bGlzdCA9PSBOVUxMIHx8IGV4ZWMyX2xpc3QgPT0gTlVMTCkgewogCQlEUk1fREVCVUcoIkZhaWxl ZCB0byBhbGxvY2F0ZSBleGVjIGxpc3QgZm9yICVkIGJ1ZmZlcnNcbiIsCiAJCQkgIGFyZ3MtPmJ1 ZmZlcl9jb3VudCk7CkBAIC0xODQxLDcgKzE5NDksNyBAQCBpOTE1X2dlbV9leGVjYnVmZmVyKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCWV4ZWMyX2xpc3RbaV0ucmVsb2Nz X3B0ciA9IGV4ZWNfbGlzdFtpXS5yZWxvY3NfcHRyOwogCQlleGVjMl9saXN0W2ldLmFsaWdubWVu dCA9IGV4ZWNfbGlzdFtpXS5hbGlnbm1lbnQ7CiAJCWV4ZWMyX2xpc3RbaV0ub2Zmc2V0ID0gZXhl Y19saXN0W2ldLm9mZnNldDsKLQkJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuIDwgNCkKKwkJaWYg KElOVEVMX0dFTihkZXYpIDwgNCkKIAkJCWV4ZWMyX2xpc3RbaV0uZmxhZ3MgPSBFWEVDX09CSkVD VF9ORUVEU19GRU5DRTsKIAkJZWxzZQogCQkJZXhlYzJfbGlzdFtpXS5mbGFncyA9IDA7CkBAIC0x ODU5LDI0ICsxOTY3LDIyIEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgdm9pZCAqZGF0YSwKIAlpOTE1X2V4ZWNidWZmZXIyX3NldF9jb250ZXh0X2lkKGV4ZWMy LCAwKTsKIAogCXJldCA9IGk5MTVfZ2VtX2RvX2V4ZWNidWZmZXIoZGV2LCBmaWxlLCAmZXhlYzIs IGV4ZWMyX2xpc3QpOwotCWlmICghcmV0KSB7CisJaWYgKGV4ZWMyLmZsYWdzICYgX19FWEVDX0hB U19SRUxPQykgewogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0IF9fdXNlciAqdXNl cl9leGVjX2xpc3QgPQogCQkJdTY0X3RvX3VzZXJfcHRyKGFyZ3MtPmJ1ZmZlcnNfcHRyKTsKIAog CQkvKiBDb3B5IHRoZSBuZXcgYnVmZmVyIG9mZnNldHMgYmFjayB0byB0aGUgdXNlcidzIGV4ZWMg bGlzdC4gKi8KIAkJZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKSB7CisJ CQlpZiAoKGV4ZWMyX2xpc3RbaV0ub2Zmc2V0ICYgVVBEQVRFKSA9PSAwKQorCQkJCWNvbnRpbnVl OworCiAJCQlleGVjMl9saXN0W2ldLm9mZnNldCA9Ci0JCQkJZ2VuOF9jYW5vbmljYWxfYWRkcihl eGVjMl9saXN0W2ldLm9mZnNldCk7Ci0JCQlyZXQgPSBfX2NvcHlfdG9fdXNlcigmdXNlcl9leGVj X2xpc3RbaV0ub2Zmc2V0LAotCQkJCQkgICAgICZleGVjMl9saXN0W2ldLm9mZnNldCwKLQkJCQkJ ICAgICBzaXplb2YodXNlcl9leGVjX2xpc3RbaV0ub2Zmc2V0KSk7Ci0JCQlpZiAocmV0KSB7Ci0J CQkJcmV0ID0gLUVGQVVMVDsKLQkJCQlEUk1fREVCVUcoImZhaWxlZCB0byBjb3B5ICVkIGV4ZWMg ZW50cmllcyAiCi0JCQkJCSAgImJhY2sgdG8gdXNlciAoJWQpXG4iLAotCQkJCQkgIGFyZ3MtPmJ1 ZmZlcl9jb3VudCwgcmV0KTsKKwkJCQlnZW44X2Nhbm9uaWNhbF9hZGRyKGV4ZWMyX2xpc3RbaV0u b2Zmc2V0ICYgUElOX09GRlNFVF9NQVNLKTsKKwkJCWV4ZWMyX2xpc3RbaV0ub2Zmc2V0ICY9IFBJ Tl9PRkZTRVRfTUFTSzsKKwkJCWlmIChfX2NvcHlfdG9fdXNlcigmdXNlcl9leGVjX2xpc3RbaV0u b2Zmc2V0LAorCQkJCQkgICAmZXhlYzJfbGlzdFtpXS5vZmZzZXQsCisJCQkJCSAgIHNpemVvZih1 c2VyX2V4ZWNfbGlzdFtpXS5vZmZzZXQpKSkKIAkJCQlicmVhazsKLQkJCX0KIAkJfQogCX0KIApA QCAtMTg5MCwxMSArMTk5NiwxMSBAQCBpOTE1X2dlbV9leGVjYnVmZmVyMihzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKIHsK IAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyICphcmdzID0gZGF0YTsKLQlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZXhlYzJfbGlzdCA9IE5VTEw7CisJc3RydWN0IGRy bV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmV4ZWMyX2xpc3Q7CiAJaW50IHJldDsKIAogCWlmIChh cmdzLT5idWZmZXJfY291bnQgPCAxIHx8Ci0JICAgIGFyZ3MtPmJ1ZmZlcl9jb3VudCA+IFVJTlRf TUFYIC8gc2l6ZW9mKCpleGVjMl9saXN0KSkgeworCSAgICBhcmdzLT5idWZmZXJfY291bnQgPj0g VUlOVF9NQVggLyBzaXplb2YoKmV4ZWMyX2xpc3QpKSB7CiAJCURSTV9ERUJVRygiZXhlY2J1ZjIg d2l0aCAlZCBidWZmZXJzXG4iLCBhcmdzLT5idWZmZXJfY291bnQpOwogCQlyZXR1cm4gLUVJTlZB TDsKIAl9CkBAIC0xOTA0LDQ1ICsyMDEwLDQyIEBAIGk5MTVfZ2VtX2V4ZWNidWZmZXIyKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAot CWV4ZWMyX2xpc3QgPSBkcm1fbWFsbG9jX2dmcChhcmdzLT5idWZmZXJfY291bnQsCisJZXhlYzJf bGlzdCA9IGRybV9tYWxsb2NfZ2ZwKGFyZ3MtPmJ1ZmZlcl9jb3VudCArIDEsCiAJCQkJICAgIHNp emVvZigqZXhlYzJfbGlzdCksCi0JCQkJICAgIEdGUF9URU1QT1JBUlkpOworCQkJCSAgICBfX0dG UF9OT1dBUk4gfCBHRlBfVEVNUE9SQVJZKTsKIAlpZiAoZXhlYzJfbGlzdCA9PSBOVUxMKSB7CiAJ CURSTV9ERUJVRygiRmFpbGVkIHRvIGFsbG9jYXRlIGV4ZWMgbGlzdCBmb3IgJWQgYnVmZmVyc1xu IiwKIAkJCSAgYXJncy0+YnVmZmVyX2NvdW50KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCXJl dCA9IGNvcHlfZnJvbV91c2VyKGV4ZWMyX2xpc3QsCi0JCQkgICAgIHU2NF90b191c2VyX3B0cihh cmdzLT5idWZmZXJzX3B0ciksCi0JCQkgICAgIHNpemVvZigqZXhlYzJfbGlzdCkgKiBhcmdzLT5i dWZmZXJfY291bnQpOwotCWlmIChyZXQgIT0gMCkgewotCQlEUk1fREVCVUcoImNvcHkgJWQgZXhl YyBlbnRyaWVzIGZhaWxlZCAlZFxuIiwKLQkJCSAgYXJncy0+YnVmZmVyX2NvdW50LCByZXQpOwor CWlmIChjb3B5X2Zyb21fdXNlcihleGVjMl9saXN0LAorCQkJICAgdTY0X3RvX3VzZXJfcHRyKGFy Z3MtPmJ1ZmZlcnNfcHRyKSwKKwkJCSAgIHNpemVvZigqZXhlYzJfbGlzdCkgKiBhcmdzLT5idWZm ZXJfY291bnQpKSB7CisJCURSTV9ERUJVRygiY29weSAlZCBleGVjIGVudHJpZXMgZmFpbGVkXG4i LCBhcmdzLT5idWZmZXJfY291bnQpOwogCQlkcm1fZnJlZV9sYXJnZShleGVjMl9saXN0KTsKIAkJ cmV0dXJuIC1FRkFVTFQ7CiAJfQogCiAJcmV0ID0gaTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihkZXYs IGZpbGUsIGFyZ3MsIGV4ZWMyX2xpc3QpOwotCWlmICghcmV0KSB7CisJaWYgKGFyZ3MtPmZsYWdz ICYgX19FWEVDX0hBU19SRUxPQykgewogCQkvKiBDb3B5IHRoZSBuZXcgYnVmZmVyIG9mZnNldHMg YmFjayB0byB0aGUgdXNlcidzIGV4ZWMgbGlzdC4gKi8KIAkJc3RydWN0IGRybV9pOTE1X2dlbV9l eGVjX29iamVjdDIgX191c2VyICp1c2VyX2V4ZWNfbGlzdCA9Ci0JCQkJICAgdTY0X3RvX3VzZXJf cHRyKGFyZ3MtPmJ1ZmZlcnNfcHRyKTsKKwkJCXU2NF90b191c2VyX3B0cihhcmdzLT5idWZmZXJz X3B0cik7CiAJCWludCBpOwogCisJCXVzZXJfYWNjZXNzX2JlZ2luKCk7CiAJCWZvciAoaSA9IDA7 IGkgPCBhcmdzLT5idWZmZXJfY291bnQ7IGkrKykgeworCQkJaWYgKChleGVjMl9saXN0W2ldLm9m ZnNldCAmIFVQREFURSkgPT0gMCkKKwkJCQljb250aW51ZTsKKwogCQkJZXhlYzJfbGlzdFtpXS5v ZmZzZXQgPQotCQkJCWdlbjhfY2Fub25pY2FsX2FkZHIoZXhlYzJfbGlzdFtpXS5vZmZzZXQpOwot CQkJcmV0ID0gX19jb3B5X3RvX3VzZXIoJnVzZXJfZXhlY19saXN0W2ldLm9mZnNldCwKLQkJCQkJ ICAgICAmZXhlYzJfbGlzdFtpXS5vZmZzZXQsCi0JCQkJCSAgICAgc2l6ZW9mKHVzZXJfZXhlY19s aXN0W2ldLm9mZnNldCkpOwotCQkJaWYgKHJldCkgewotCQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQkJ RFJNX0RFQlVHKCJmYWlsZWQgdG8gY29weSAlZCBleGVjIGVudHJpZXMgIgotCQkJCQkgICJiYWNr IHRvIHVzZXJcbiIsCi0JCQkJCSAgYXJncy0+YnVmZmVyX2NvdW50KTsKLQkJCQlicmVhazsKLQkJ CX0KKwkJCQlnZW44X2Nhbm9uaWNhbF9hZGRyKGV4ZWMyX2xpc3RbaV0ub2Zmc2V0ICYgUElOX09G RlNFVF9NQVNLKTsKKwkJCXVuc2FmZV9wdXRfdXNlcihleGVjMl9saXN0W2ldLm9mZnNldCwKKwkJ CQkJJnVzZXJfZXhlY19saXN0W2ldLm9mZnNldCwKKwkJCQkJZW5kX3VzZXIpOwogCQl9CitlbmRf dXNlcjoKKwkJdXNlcl9hY2Nlc3NfZW5kKCk7CiAJfQogCiAJZHJtX2ZyZWVfbGFyZ2UoZXhlYzJf bGlzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCmluZGV4IGY5NTQwNjgzZDJjMC4u YmEwNGIwYmY3ZmUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9n dHQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaApAQCAtMjMwLDcg KzIzMCw5IEBAIHN0cnVjdCBpOTE1X3ZtYSB7CiAJc3RydWN0IGhsaXN0X25vZGUgb2JqX25vZGU7 CiAKIAkvKiogVGhpcyB2bWEncyBwbGFjZSBpbiB0aGUgYmF0Y2hidWZmZXIgb3Igb24gdGhlIGV2 aWN0aW9uIGxpc3QgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGV4ZWNfbGlzdDsKKwlzdHJ1Y3QgbGlz dF9oZWFkIGV4ZWNfbGluazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJlbG9jX2xpbms7CisJc3RydWN0 IGxpc3RfaGVhZCBldmljdF9saW5rOwogCiAJLyoqCiAJICogVXNlZCBmb3IgcGVyZm9ybWluZyBy ZWxvY2F0aW9ucyBkdXJpbmcgZXhlY2J1ZmZlciBpbnNlcnRpb24uCi0tIAoyLjkuMwoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxp bmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==