From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Hellstrom Subject: [PATCH 4/6] drm/vmwgfx: Major KMS refactoring / cleanup in preparation of screen targets Date: Mon, 9 Mar 2015 05:30:53 -0700 Message-ID: <1425904255-6539-5-git-send-email-thellstrom@vmware.com> References: <1425904255-6539-1-git-send-email-thellstrom@vmware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from smtp-outbound-1.vmware.com (smtp-outbound-1.vmware.com [208.91.2.12]) by gabe.freedesktop.org (Postfix) with ESMTP id 475676E2C6 for ; Mon, 9 Mar 2015 05:31:33 -0700 (PDT) Received: from sc9-mailhost1.vmware.com (sc9-mailhost1.vmware.com [10.113.161.71]) by smtp-outbound-1.vmware.com (Postfix) with ESMTP id 1931028222 for ; Mon, 9 Mar 2015 05:31:33 -0700 (PDT) Received: from EX13-CAS-012.vmware.com (EX13-CAS-012.vmware.com [10.113.191.64]) by sc9-mailhost1.vmware.com (Postfix) with ESMTP id 13E45181ED for ; Mon, 9 Mar 2015 05:31:33 -0700 (PDT) In-Reply-To: <1425904255-6539-1-git-send-email-thellstrom@vmware.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Thomas Hellstrom List-Id: dri-devel@lists.freedesktop.org RnJvbTogU2luY2xhaXIgWWVoIDxzeWVoQHZtd2FyZS5jb20+CgpTaWduZWQtb2ZmLWJ5OiBTaW5j bGFpciBZZWggPHN5ZWhAdm13YXJlLmNvbT4KU2lnbmVkLW9mZi1ieTogVGhvbWFzIEhlbGxzdHJv bSA8dGhlbGxzdHJvbUB2bXdhcmUuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13 Z2Z4X2Rydi5oICAgICB8ICAyMiArLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmlm by5jICAgIHwgICA0ICstCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuYyAgICAg fCA1NjMgKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS92 bXdnZngvdm13Z2Z4X2ttcy5oICAgICB8ICA4MSArKystLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC92bXdnZnhfbGR1LmMgICAgIHwgIDQ1ICsrLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdn Znhfb3ZlcmxheS5jIHwgICA2ICstCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9zY3Ju LmMgICAgfCA0MzMgKysrKysrKysrKysrKysrKysrKysrKy0tCiA3IGZpbGVzIGNoYW5nZWQsIDYw NyBpbnNlcnRpb25zKCspLCA1NDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dm eF9kcnYuaAppbmRleCA2OWY1MTBjLi45ZTAwZWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dm eF9kcnYuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHly aWdodCDCqSAyMDA5IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQorICogQ29weXJp Z2h0IMKpIDIwMDktMjAxNCBWTXdhcmUsIEluYy4sIFBhbG8gQWx0bywgQ0EuLCBVU0EKICAqIEFs bCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKQEAgLTMzMCw2ICszMzAs MTcgQEAgc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZSB7CiAJc3RydWN0IHZtd19jdHhfYmlu ZGluZyBzaGFkZXJzW1NWR0EzRF9TSEFERVJUWVBFX01BWF07CiB9OwogCisKKy8qCisgKiBlbnVt IHZtd19kaXNwbGF5X3VuaXRfdHlwZSAtIERlc2NyaWJlcyB0aGUgZGlzcGxheSB1bml0CisgKi8K K2VudW0gdm13X2Rpc3BsYXlfdW5pdF90eXBlIHsKKwl2bXdfZHVfaW52YWxpZCA9IDAsCisJdm13 X2R1X2xlZ2FjeSwKKwl2bXdfZHVfc2NyZWVuX29iamVjdAorfTsKKworCiBzdHJ1Y3Qgdm13X3N3 X2NvbnRleHR7CiAJc3RydWN0IGRybV9vcGVuX2hhc2ggcmVzX2h0OwogCWJvb2wgcmVzX2h0X2lu aXRpYWxpemVkOwpAQCAtNDIxLDYgKzQzMiw3IEBAIHN0cnVjdCB2bXdfcHJpdmF0ZSB7CiAJICov CiAKIAl2b2lkICpmYl9pbmZvOworCWVudW0gdm13X2Rpc3BsYXlfdW5pdF90eXBlIGFjdGl2ZV9k aXNwbGF5X3VuaXQ7CiAJc3RydWN0IHZtd19sZWdhY3lfZGlzcGxheSAqbGR1X3ByaXY7CiAJc3Ry dWN0IHZtd19zY3JlZW5fb2JqZWN0X2Rpc3BsYXkgKnNvdV9wcml2OwogCXN0cnVjdCB2bXdfb3Zl cmxheSAqb3ZlcmxheV9wcml2OwpAQCAtODM0LDggKzg0Niw4IEBAIGV4dGVybiB2b2lkIHZtd19l eGVjYnVmX2NvcHlfZmVuY2VfdXNlcihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCiBl eHRlcm4gaXJxcmV0dXJuX3Qgdm13X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZyk7CiBl eHRlcm4gaW50IHZtd193YWl0X3NlcW5vKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIGJv b2wgbGF6eSwKLQkJCSAgICAgdWludDMyX3Qgc2Vxbm8sIGJvb2wgaW50ZXJydXB0aWJsZSwKLQkJ CSAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKKwkJCSAgdWludDMyX3Qgc2Vxbm8sIGJvb2wg aW50ZXJydXB0aWJsZSwKKwkJCSAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKIGV4dGVybiB2b2lk IHZtd19pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQg dm13X2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lk IHZtd19pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwpAQCAtODYyLDkgKzg3 NCw5IEBAIGV4dGVybiB2b2lkIHZtd19nb2FsX3dhaXRlcl9yZW1vdmUoc3RydWN0IHZtd19wcml2 YXRlICpkZXZfcHJpdik7CiBleHRlcm4gdm9pZCB2bXdfbWFya2VyX3F1ZXVlX2luaXQoc3RydWN0 IHZtd19tYXJrZXJfcXVldWUgKnF1ZXVlKTsKIGV4dGVybiB2b2lkIHZtd19tYXJrZXJfcXVldWVf dGFrZWRvd24oc3RydWN0IHZtd19tYXJrZXJfcXVldWUgKnF1ZXVlKTsKIGV4dGVybiBpbnQgdm13 X21hcmtlcl9wdXNoKHN0cnVjdCB2bXdfbWFya2VyX3F1ZXVlICpxdWV1ZSwKLQkJCSAgdWludDMy X3Qgc2Vxbm8pOworCQkJICAgdWludDMyX3Qgc2Vxbm8pOwogZXh0ZXJuIGludCB2bXdfbWFya2Vy X3B1bGwoc3RydWN0IHZtd19tYXJrZXJfcXVldWUgKnF1ZXVlLAotCQkJICB1aW50MzJfdCBzaWdu YWxlZF9zZXFubyk7CisJCQkgICB1aW50MzJfdCBzaWduYWxlZF9zZXFubyk7CiBleHRlcm4gaW50 IHZtd193YWl0X2xhZyhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkJc3RydWN0IHZt d19tYXJrZXJfcXVldWUgKnF1ZXVlLCB1aW50MzJfdCB1cyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZpZm8uYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngv dm13Z2Z4X2ZpZm8uYwppbmRleCAzOWYyYjAzLi45YjllY2QzIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9maWZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC92bXdnZnhfZmlmby5jCkBAIC03MSw4ICs3MSw4IEBAIGJvb2wgdm13X2ZpZm9faGF2ZV8zZChz dHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQogCWlmIChod3ZlcnNpb24gPCBTVkdBM0RfSFdW RVJTSU9OX1dTOF9CMSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JLyogTm9uLVNjcmVlbiBPYmplY3Qg cGF0aCBkb2VzIG5vdCBzdXBwb3J0IHN1cmZhY2VzICovCi0JaWYgKCFkZXZfcHJpdi0+c291X3By aXYpCisJLyogTGVnYWN5IERpc3BsYXkgVW5pdCBkb2VzIG5vdCBzdXBwb3J0IHN1cmZhY2VzICov CisJaWYgKGRldl9wcml2LT5hY3RpdmVfZGlzcGxheV91bml0ID09IHZtd19kdV9sZWdhY3kpCiAJ CXJldHVybiBmYWxzZTsKIAogCXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9r bXMuYwppbmRleCA4NzI1Yjc5Li44MzQ0NTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v dm13Z2Z4L3Ztd2dmeF9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9r bXMuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdo dCDCqSAyMDA5IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQorICogQ29weXJpZ2h0 IMKpIDIwMDktMjAxNCBWTXdhcmUsIEluYy4sIFBhbG8gQWx0bywgQ0EuLCBVU0EKICAqIEFsbCBS aWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKQEAgLTMyLDE1ICszMiwxMiBA QAogI2RlZmluZSBWTVdHRlhfUFJFU0VOVF9SQVRFICgoSFogLyA2MCA+IDApID8gSFogLyA2MCA6 IDEpCiAKIAotc3RydWN0IHZtd19jbGlwX3JlY3QgewotCWludCB4MSwgeDIsIHkxLCB5MjsKLX07 CiAKIC8qKgogICogQ2xpcCBAbnVtX3JlY3RzIG51bWJlciBvZiBAcmVjdHMgYWdhaW5zdCBAY2xp cCBzdG9yaW5nIHRoZQogICogcmVzdWx0cyBpbiBAb3V0X3JlY3RzIGFuZCB0aGUgbnVtYmVyIG9m IHBhc3NlZCByZWN0cyBpbiBAb3V0X251bS4KICAqLwotc3RhdGljIHZvaWQgdm13X2NsaXBfY2xp cHJlY3RzKHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpyZWN0cywKK3ZvaWQgdm13X2NsaXBfY2xpcHJl Y3RzKHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpyZWN0cywKIAkJCWludCBudW1fcmVjdHMsCiAJCQlz dHJ1Y3Qgdm13X2NsaXBfcmVjdCBjbGlwLAogCQkJU1ZHQVNpZ25lZFJlY3QgKm91dF9yZWN0cywK QEAgLTY5LDcgKzY2LDcgQEAgc3RhdGljIHZvaWQgdm13X2NsaXBfY2xpcHJlY3RzKHN0cnVjdCBk cm1fY2xpcF9yZWN0ICpyZWN0cywKIAkqb3V0X251bSA9IGs7CiB9CiAKLXZvaWQgdm13X2Rpc3Bs YXlfdW5pdF9jbGVhbnVwKHN0cnVjdCB2bXdfZGlzcGxheV91bml0ICpkdSkKK3ZvaWQgdm13X2R1 X2NsZWFudXAoc3RydWN0IHZtd19kaXNwbGF5X3VuaXQgKmR1KQogewogCWlmIChkdS0+Y3Vyc29y X3N1cmZhY2UpCiAJCXZtd19zdXJmYWNlX3VucmVmZXJlbmNlKCZkdS0+Y3Vyc29yX3N1cmZhY2Up OwpAQCAtMzY3LDE1ICszNjQsNiBAQCB2b2lkIHZtd19rbXNfY3Vyc29yX3Nub29wKHN0cnVjdCB2 bXdfc3VyZmFjZSAqc3JmLAogCiAJc3JmLT5zbm9vcGVyLmFnZSsrOwogCi0JLyogd2UgY2FuJ3Qg Y2FsbCB0aGlzIGZ1bmN0aW9uIGZyb20gdGhpcyBmdW5jdGlvbiBzaW5jZSBleGVjYnVmIGhhcwot CSAqIHJlc2VydmVkIGZpZm8gc3BhY2UuCi0JICoKLQkgKiBpZiAoc3JmLT5zbm9vcGVyLmNydGMp Ci0JICoJdm13X2xkdV9jcnRjX2N1cnNvcl91cGRhdGVfaW1hZ2UoZGV2X3ByaXYsCi0JICoJCQkJ CSBzcmYtPnNub29wZXIuaW1hZ2UsIDY0LCA2NCwKLQkgKgkJCQkJIGR1LT5ob3RzcG90X3gsIGR1 LT5ob3RzcG90X3kpOwotCSAqLwotCiAJdHRtX2JvX2t1bm1hcCgmbWFwKTsKIGVycl91bnJlc2Vy dmU6CiAJdHRtX2JvX3VucmVzZXJ2ZShibyk7CkBAIC00MTEsMTggKzM5OSw2IEBAIHZvaWQgdm13 X2ttc19jdXJzb3JfcG9zdF9leGVjYnVmKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCiAv KgogICogU3VyZmFjZSBmcmFtZWJ1ZmZlciBjb2RlCiAgKi8KLQotI2RlZmluZSB2bXdfZnJhbWVi dWZmZXJfdG9fdmZicyh4KSBcCi0JY29udGFpbmVyX29mKHgsIHN0cnVjdCB2bXdfZnJhbWVidWZm ZXJfc3VyZmFjZSwgYmFzZS5iYXNlKQotCi1zdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyX3N1cmZhY2Ug ewotCXN0cnVjdCB2bXdfZnJhbWVidWZmZXIgYmFzZTsKLQlzdHJ1Y3Qgdm13X3N1cmZhY2UgKnN1 cmZhY2U7Ci0Jc3RydWN0IHZtd19kbWFfYnVmZmVyICpidWZmZXI7Ci0Jc3RydWN0IGxpc3RfaGVh ZCBoZWFkOwotCXN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXI7Ci19OwotCiBzdGF0aWMgdm9pZCB2 bXdfZnJhbWVidWZmZXJfc3VyZmFjZV9kZXN0cm95KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZy YW1lYnVmZmVyKQogewogCXN0cnVjdCB2bXdfZnJhbWVidWZmZXJfc3VyZmFjZSAqdmZicyA9CkBA IC00NDIsMTUzICs0MTgsNiBAQCBzdGF0aWMgdm9pZCB2bXdfZnJhbWVidWZmZXJfc3VyZmFjZV9k ZXN0cm95KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyKQogCWtmcmVlKHZmYnMp OwogfQogCi1zdGF0aWMgaW50IGRvX3N1cmZhY2VfZGlydHlfc291KHN0cnVjdCB2bXdfcHJpdmF0 ZSAqZGV2X3ByaXYsCi0JCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCi0JCQkJc3RydWN0 IHZtd19mcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsCi0JCQkJdW5zaWduZWQgZmxhZ3MsIHVuc2ln bmVkIGNvbG9yLAotCQkJCXN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywKLQkJCQl1bnNpZ25l ZCBudW1fY2xpcHMsIGludCBpbmMsCi0JCQkJc3RydWN0IHZtd19mZW5jZV9vYmogKipvdXRfZmVu Y2UpCi17Ci0Jc3RydWN0IHZtd19kaXNwbGF5X3VuaXQgKnVuaXRzW1ZNV0dGWF9OVU1fRElTUExB WV9VTklUU107Ci0Jc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXBzX3B0cjsKLQlzdHJ1Y3QgZHJt X2NsaXBfcmVjdCAqdG1wOwotCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKLQlzaXplX3QgZmlmb19z aXplOwotCWludCBpLCBudW1fdW5pdHM7Ci0JaW50IHJldCA9IDA7IC8qIHNpbGVuY2Ugd2Fybmlu ZyAqLwotCWludCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b207Ci0KLQlzdHJ1Y3QgewotCQlTVkdB M2RDbWRIZWFkZXIgaGVhZGVyOwotCQlTVkdBM2RDbWRCbGl0U3VyZmFjZVRvU2NyZWVuIGJvZHk7 Ci0JfSAqY21kOwotCVNWR0FTaWduZWRSZWN0ICpibGl0czsKLQotCW51bV91bml0cyA9IDA7Ci0J bGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2X3ByaXYtPmRldi0+bW9kZV9jb25maWcuY3J0 Y19saXN0LAotCQkJICAgIGhlYWQpIHsKLQkJaWYgKGNydGMtPnByaW1hcnktPmZiICE9ICZmcmFt ZWJ1ZmZlci0+YmFzZSkKLQkJCWNvbnRpbnVlOwotCQl1bml0c1tudW1fdW5pdHMrK10gPSB2bXdf Y3J0Y190b19kdShjcnRjKTsKLQl9Ci0KLQlCVUdfT04oIWNsaXBzIHx8ICFudW1fY2xpcHMpOwot Ci0JdG1wID0ga3phbGxvYyhzaXplb2YoKnRtcCkgKiBudW1fY2xpcHMsIEdGUF9LRVJORUwpOwot CWlmICh1bmxpa2VseSh0bXAgPT0gTlVMTCkpIHsKLQkJRFJNX0VSUk9SKCJUZW1wb3JhcnkgY2xp cHJlY3QgbWVtb3J5IGFsbG9jIGZhaWxlZC5cbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0K LQlmaWZvX3NpemUgPSBzaXplb2YoKmNtZCkgKyBzaXplb2YoU1ZHQVNpZ25lZFJlY3QpICogbnVt X2NsaXBzOwotCWNtZCA9IGt6YWxsb2MoZmlmb19zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAodW5s aWtlbHkoY21kID09IE5VTEwpKSB7Ci0JCURSTV9FUlJPUigiVGVtcG9yYXJ5IGZpZm8gbWVtb3J5 IGFsbG9jIGZhaWxlZC5cbiIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlX3Rt cDsKLQl9Ci0KLQkvKiBzZXR1cCBibGl0cyBwb2ludGVyICovCi0JYmxpdHMgPSAoU1ZHQVNpZ25l ZFJlY3QgKikmY21kWzFdOwotCi0JLyogaW5pdGlhbCBjbGlwIHJlZ2lvbiAqLwotCWxlZnQgPSBj bGlwcy0+eDE7Ci0JcmlnaHQgPSBjbGlwcy0+eDI7Ci0JdG9wID0gY2xpcHMtPnkxOwotCWJvdHRv bSA9IGNsaXBzLT55MjsKLQotCS8qIHNraXAgdGhlIGZpcnN0IGNsaXAgcmVjdCAqLwotCWZvciAo aSA9IDEsIGNsaXBzX3B0ciA9IGNsaXBzICsgaW5jOwotCSAgICAgaSA8IG51bV9jbGlwczsgaSsr LCBjbGlwc19wdHIgKz0gaW5jKSB7Ci0JCWxlZnQgPSBtaW5fdChpbnQsIGxlZnQsIChpbnQpY2xp cHNfcHRyLT54MSk7Ci0JCXJpZ2h0ID0gbWF4X3QoaW50LCByaWdodCwgKGludCljbGlwc19wdHIt PngyKTsKLQkJdG9wID0gbWluX3QoaW50LCB0b3AsIChpbnQpY2xpcHNfcHRyLT55MSk7Ci0JCWJv dHRvbSA9IG1heF90KGludCwgYm90dG9tLCAoaW50KWNsaXBzX3B0ci0+eTIpOwotCX0KLQotCS8q IG9ubHkgbmVlZCB0byBkbyB0aGlzIG9uY2UgKi8KLQljbWQtPmhlYWRlci5pZCA9IGNwdV90b19s ZTMyKFNWR0FfM0RfQ01EX0JMSVRfU1VSRkFDRV9UT19TQ1JFRU4pOwotCWNtZC0+aGVhZGVyLnNp emUgPSBjcHVfdG9fbGUzMihmaWZvX3NpemUgLSBzaXplb2YoY21kLT5oZWFkZXIpKTsKLQotCWNt ZC0+Ym9keS5zcmNSZWN0LmxlZnQgPSBsZWZ0OwotCWNtZC0+Ym9keS5zcmNSZWN0LnJpZ2h0ID0g cmlnaHQ7Ci0JY21kLT5ib2R5LnNyY1JlY3QudG9wID0gdG9wOwotCWNtZC0+Ym9keS5zcmNSZWN0 LmJvdHRvbSA9IGJvdHRvbTsKLQotCWNsaXBzX3B0ciA9IGNsaXBzOwotCWZvciAoaSA9IDA7IGkg PCBudW1fY2xpcHM7IGkrKywgY2xpcHNfcHRyICs9IGluYykgewotCQl0bXBbaV0ueDEgPSBjbGlw c19wdHItPngxIC0gbGVmdDsKLQkJdG1wW2ldLngyID0gY2xpcHNfcHRyLT54MiAtIGxlZnQ7Ci0J CXRtcFtpXS55MSA9IGNsaXBzX3B0ci0+eTEgLSB0b3A7Ci0JCXRtcFtpXS55MiA9IGNsaXBzX3B0 ci0+eTIgLSB0b3A7Ci0JfQotCi0JLyogZG8gcGVyIHVuaXQgd3JpdGluZywgcmV1c2UgZmlmbyBm b3IgZWFjaCAqLwotCWZvciAoaSA9IDA7IGkgPCBudW1fdW5pdHM7IGkrKykgewotCQlzdHJ1Y3Qg dm13X2Rpc3BsYXlfdW5pdCAqdW5pdCA9IHVuaXRzW2ldOwotCQlzdHJ1Y3Qgdm13X2NsaXBfcmVj dCBjbGlwOwotCQlpbnQgbnVtOwotCi0JCWNsaXAueDEgPSBsZWZ0IC0gdW5pdC0+Y3J0Yy54Owot CQljbGlwLnkxID0gdG9wIC0gdW5pdC0+Y3J0Yy55OwotCQljbGlwLngyID0gcmlnaHQgLSB1bml0 LT5jcnRjLng7Ci0JCWNsaXAueTIgPSBib3R0b20gLSB1bml0LT5jcnRjLnk7Ci0KLQkJLyogc2tp cCBhbnkgY3J0Y3MgdGhhdCBtaXNzZXMgdGhlIGNsaXAgcmVnaW9uICovCi0JCWlmIChjbGlwLngx ID49IHVuaXQtPmNydGMubW9kZS5oZGlzcGxheSB8fAotCQkgICAgY2xpcC55MSA+PSB1bml0LT5j cnRjLm1vZGUudmRpc3BsYXkgfHwKLQkJICAgIGNsaXAueDIgPD0gMCB8fCBjbGlwLnkyIDw9IDAp Ci0JCQljb250aW51ZTsKLQotCQkvKgotCQkgKiBJbiBvcmRlciBmb3IgdGhlIGNsaXAgcmVjdHMg dG8gYmUgY29ycmVjdGx5IHNjYWxlZAotCQkgKiB0aGUgc3JjIGFuZCBkZXN0IHJlY3RzIG5lZWRz IHRvIGJlIHRoZSBzYW1lIHNpemUuCi0JCSAqLwotCQljbWQtPmJvZHkuZGVzdFJlY3QubGVmdCA9 IGNsaXAueDE7Ci0JCWNtZC0+Ym9keS5kZXN0UmVjdC5yaWdodCA9IGNsaXAueDI7Ci0JCWNtZC0+ Ym9keS5kZXN0UmVjdC50b3AgPSBjbGlwLnkxOwotCQljbWQtPmJvZHkuZGVzdFJlY3QuYm90dG9t ID0gY2xpcC55MjsKLQotCQkvKiBjcmVhdGUgYSBjbGlwIHJlY3Qgb2YgdGhlIGNydGMgaW4gZGVz dCBjb29yZHMgKi8KLQkJY2xpcC54MiA9IHVuaXQtPmNydGMubW9kZS5oZGlzcGxheSAtIGNsaXAu eDE7Ci0JCWNsaXAueTIgPSB1bml0LT5jcnRjLm1vZGUudmRpc3BsYXkgLSBjbGlwLnkxOwotCQlj bGlwLngxID0gMCAtIGNsaXAueDE7Ci0JCWNsaXAueTEgPSAwIC0gY2xpcC55MTsKLQotCQkvKiBu ZWVkIHRvIHJlc2V0IHNpZCBhcyBpdCBpcyBjaGFuZ2VkIGJ5IGV4ZWNidWYgKi8KLQkJY21kLT5i b2R5LnNyY0ltYWdlLnNpZCA9IGNwdV90b19sZTMyKGZyYW1lYnVmZmVyLT51c2VyX2hhbmRsZSk7 Ci0JCWNtZC0+Ym9keS5kZXN0U2NyZWVuSWQgPSB1bml0LT51bml0OwotCi0JCS8qIGNsaXAgYW5k IHdyaXRlIGJsaXRzIHRvIGNtZCBzdHJlYW0gKi8KLQkJdm13X2NsaXBfY2xpcHJlY3RzKHRtcCwg bnVtX2NsaXBzLCBjbGlwLCBibGl0cywgJm51bSk7Ci0KLQkJLyogaWYgbm8gY2xpcHJlY3RzIGhp dCBza2lwIHRoaXMgKi8KLQkJaWYgKG51bSA9PSAwKQotCQkJY29udGludWU7Ci0KLQkJLyogb25s eSByZXR1cm4gdGhlIGxhc3QgZmVuY2UgKi8KLQkJaWYgKG91dF9mZW5jZSAmJiAqb3V0X2ZlbmNl KQotCQkJdm13X2ZlbmNlX29ial91bnJlZmVyZW5jZShvdXRfZmVuY2UpOwotCi0JCS8qIHJlY2Fs Y3VsYXRlIHBhY2thZ2UgbGVuZ3RoICovCi0JCWZpZm9fc2l6ZSA9IHNpemVvZigqY21kKSArIHNp emVvZihTVkdBU2lnbmVkUmVjdCkgKiBudW07Ci0JCWNtZC0+aGVhZGVyLnNpemUgPSBjcHVfdG9f bGUzMihmaWZvX3NpemUgLSBzaXplb2YoY21kLT5oZWFkZXIpKTsKLQkJcmV0ID0gdm13X2V4ZWNi dWZfcHJvY2VzcyhmaWxlX3ByaXYsIGRldl9wcml2LCBOVUxMLCBjbWQsCi0JCQkJCSAgZmlmb19z aXplLCAwLCBOVUxMLCBvdXRfZmVuY2UpOwotCi0JCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCi0J CQlicmVhazsKLQl9Ci0KLQotCWtmcmVlKGNtZCk7Ci1vdXRfZnJlZV90bXA6Ci0Ja2ZyZWUodG1w KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgdm13X2ZyYW1lYnVmZmVyX3N1cmZh Y2VfZGlydHkoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsCiAJCQkJICBzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAkJCQkgIHVuc2lnbmVkIGZsYWdzLCB1bnNpZ25lZCBj b2xvciwKQEAgLTYwNCw4ICs0MzMsOCBAQCBzdGF0aWMgaW50IHZtd19mcmFtZWJ1ZmZlcl9zdXJm YWNlX2RpcnR5KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLAogCWlmICh1bmxp a2VseSh2ZmJzLT5tYXN0ZXIgIT0gZmlsZV9wcml2LT5tYXN0ZXIpKQogCQlyZXR1cm4gLUVJTlZB TDsKIAotCS8qIFJlcXVpcmUgU2NyZWVuT2JqZWN0IHN1cHBvcnQgZm9yIDNEICovCi0JaWYgKCFk ZXZfcHJpdi0+c291X3ByaXYpCisJLyogTGVnYWN5IERpc3BsYXkgVW5pdCBkb2VzIG5vdCBzdXBw b3J0IDNEICovCisJaWYgKGRldl9wcml2LT5hY3RpdmVfZGlzcGxheV91bml0ID09IHZtd19kdV9s ZWdhY3kpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZHJtX21vZGVzZXRfbG9ja19hbGwoZGV2X3By aXYtPmRldik7CkBAIC02MjcsOSArNDU2LDEyIEBAIHN0YXRpYyBpbnQgdm13X2ZyYW1lYnVmZmVy X3N1cmZhY2VfZGlydHkoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsCiAJCWlu YyA9IDI7IC8qIHNraXAgc291cmNlIHJlY3RzICovCiAJfQogCi0JcmV0ID0gZG9fc3VyZmFjZV9k aXJ0eV9zb3UoZGV2X3ByaXYsIGZpbGVfcHJpdiwgJnZmYnMtPmJhc2UsCi0JCQkJICAgZmxhZ3Ms IGNvbG9yLAotCQkJCSAgIGNsaXBzLCBudW1fY2xpcHMsIGluYywgTlVMTCk7CisJaWYgKGRldl9w cml2LT5hY3RpdmVfZGlzcGxheV91bml0ID09IHZtd19kdV9zY3JlZW5fb2JqZWN0KQorCQlyZXQg PSB2bXdfa21zX3NvdV9kb19zdXJmYWNlX2RpcnR5KGRldl9wcml2LCBmaWxlX3ByaXYsCisJCQkJ CQkgICAmdmZicy0+YmFzZSwKKwkJCQkJCSAgIGZsYWdzLCBjb2xvciwKKwkJCQkJCSAgIGNsaXBz LCBudW1fY2xpcHMsCisJCQkJCQkgICBpbmMsIE5VTEwpOwogCiAJdHRtX3JlYWRfdW5sb2NrKCZk ZXZfcHJpdi0+cmVzZXJ2YXRpb25fc2VtKTsKIApAQCAtNjU3LDggKzQ4OSw4IEBAIHN0YXRpYyBp bnQgdm13X2ttc19uZXdfZnJhbWVidWZmZXJfc3VyZmFjZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRl dl9wcml2LAogCXN0cnVjdCB2bXdfbWFzdGVyICp2bWFzdGVyID0gdm13X21hc3RlcihmaWxlX3By aXYtPm1hc3Rlcik7CiAJaW50IHJldDsKIAotCS8qIDNEIGlzIG9ubHkgc3VwcG9ydGVkIG9uIEhX djggaG9zdHMgd2hpY2ggc3VwcG9ydHMgc2NyZWVuIG9iamVjdHMgKi8KLQlpZiAoIWRldl9wcml2 LT5zb3VfcHJpdikKKwkvKiAzRCBpcyBvbmx5IHN1cHBvcnRlZCBvbiBIV3Y4IGFuZCBuZXdlciBo b3N0cyAqLworCWlmIChkZXZfcHJpdi0+YWN0aXZlX2Rpc3BsYXlfdW5pdCA9PSB2bXdfZHVfbGVn YWN5KQogCQlyZXR1cm4gLUVOT1NZUzsKIAogCS8qCkBAIC02OTIsOSArNTI0LDYgQEAgc3RhdGlj IGludCB2bXdfa21zX25ld19mcmFtZWJ1ZmZlcl9zdXJmYWNlKHN0cnVjdCB2bXdfcHJpdmF0ZSAq ZGV2X3ByaXYsCiAJY2FzZSAxNToKIAkJZm9ybWF0ID0gU1ZHQTNEX0ExUjVHNUI1OwogCQlicmVh azsKLQljYXNlIDg6Ci0JCWZvcm1hdCA9IFNWR0EzRF9MVU1JTkFOQ0U4OwotCQlicmVhazsKIAlk ZWZhdWx0OgogCQlEUk1fRVJST1IoIkludmFsaWQgY29sb3IgZGVwdGg6ICVkXG4iLCBtb2RlX2Nt ZC0+ZGVwdGgpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTc1MiwxNCArNTgxLDYgQEAgb3V0X2Vy cjE6CiAgKiBEbWFidWYgZnJhbWVidWZmZXIgY29kZQogICovCiAKLSNkZWZpbmUgdm13X2ZyYW1l YnVmZmVyX3RvX3ZmYmQoeCkgXAotCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3Qgdm13X2ZyYW1lYnVm ZmVyX2RtYWJ1ZiwgYmFzZS5iYXNlKQotCi1zdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyX2RtYWJ1ZiB7 Ci0Jc3RydWN0IHZtd19mcmFtZWJ1ZmZlciBiYXNlOwotCXN0cnVjdCB2bXdfZG1hX2J1ZmZlciAq YnVmZmVyOwotfTsKLQogc3RhdGljIHZvaWQgdm13X2ZyYW1lYnVmZmVyX2RtYWJ1Zl9kZXN0cm95 KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyKQogewogCXN0cnVjdCB2bXdfZnJh bWVidWZmZXJfZG1hYnVmICp2ZmJkID0KQEAgLTc3MiwxODAgKzU5Myw2IEBAIHN0YXRpYyB2b2lk IHZtd19mcmFtZWJ1ZmZlcl9kbWFidWZfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm cmFtZWJ1ZmZlcikKIAlrZnJlZSh2ZmJkKTsKIH0KIAotc3RhdGljIGludCBkb19kbWFidWZfZGly dHlfbGR1KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkgICAgICAgc3RydWN0IHZt d19mcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsCi0JCQkgICAgICAgdW5zaWduZWQgZmxhZ3MsIHVu c2lnbmVkIGNvbG9yLAotCQkJICAgICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywKLQkJ CSAgICAgICB1bnNpZ25lZCBudW1fY2xpcHMsIGludCBpbmNyZW1lbnQpCi17Ci0Jc2l6ZV90IGZp Zm9fc2l6ZTsKLQlpbnQgaTsKLQotCXN0cnVjdCB7Ci0JCXVpbnQzMl90IGhlYWRlcjsKLQkJU1ZH QUZpZm9DbWRVcGRhdGUgYm9keTsKLQl9ICpjbWQ7Ci0KLQlmaWZvX3NpemUgPSBzaXplb2YoKmNt ZCkgKiBudW1fY2xpcHM7Ci0JY21kID0gdm13X2ZpZm9fcmVzZXJ2ZShkZXZfcHJpdiwgZmlmb19z aXplKTsKLQlpZiAodW5saWtlbHkoY21kID09IE5VTEwpKSB7Ci0JCURSTV9FUlJPUigiRmlmbyBy ZXNlcnZlIGZhaWxlZC5cbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQltZW1zZXQoY21k LCAwLCBmaWZvX3NpemUpOwotCWZvciAoaSA9IDA7IGkgPCBudW1fY2xpcHM7IGkrKywgY2xpcHMg Kz0gaW5jcmVtZW50KSB7Ci0JCWNtZFtpXS5oZWFkZXIgPSBjcHVfdG9fbGUzMihTVkdBX0NNRF9V UERBVEUpOwotCQljbWRbaV0uYm9keS54ID0gY3B1X3RvX2xlMzIoY2xpcHMtPngxKTsKLQkJY21k W2ldLmJvZHkueSA9IGNwdV90b19sZTMyKGNsaXBzLT55MSk7Ci0JCWNtZFtpXS5ib2R5LndpZHRo ID0gY3B1X3RvX2xlMzIoY2xpcHMtPngyIC0gY2xpcHMtPngxKTsKLQkJY21kW2ldLmJvZHkuaGVp Z2h0ID0gY3B1X3RvX2xlMzIoY2xpcHMtPnkyIC0gY2xpcHMtPnkxKTsKLQl9Ci0KLQl2bXdfZmlm b19jb21taXQoZGV2X3ByaXYsIGZpZm9fc2l6ZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQgZG9fZG1hYnVmX2RlZmluZV9nbXJmYihzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKLQkJ CQkgIHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJICBzdHJ1Y3Qgdm13X2ZyYW1l YnVmZmVyICpmcmFtZWJ1ZmZlcikKLXsKLQlpbnQgZGVwdGggPSBmcmFtZWJ1ZmZlci0+YmFzZS5k ZXB0aDsKLQlzaXplX3QgZmlmb19zaXplOwotCWludCByZXQ7Ci0KLQlzdHJ1Y3QgewotCQl1aW50 MzJfdCBoZWFkZXI7Ci0JCVNWR0FGaWZvQ21kRGVmaW5lR01SRkIgYm9keTsKLQl9ICpjbWQ7Ci0K LQkvKiBFbXVsYXRlIFJHQkEgc3VwcG9ydCwgY29udHJhcnkgdG8gc3ZnYV9yZWcuaCB0aGlzIGlz IG5vdAotCSAqIHN1cHBvcnRlZCBieSBob3N0cy4gVGhpcyBpcyBvbmx5IGEgcHJvYmxlbSBpZiB3 ZSBhcmUgcmVhZGluZwotCSAqIHRoaXMgdmFsdWUgbGF0ZXIgYW5kIGV4cGVjdGluZyB3aGF0IHdl IHVwbG9hZGVkIGJhY2suCi0JICovCi0JaWYgKGRlcHRoID09IDMyKQotCQlkZXB0aCA9IDI0Owot Ci0JZmlmb19zaXplID0gc2l6ZW9mKCpjbWQpOwotCWNtZCA9IGttYWxsb2MoZmlmb19zaXplLCBH RlBfS0VSTkVMKTsKLQlpZiAodW5saWtlbHkoY21kID09IE5VTEwpKSB7Ci0JCURSTV9FUlJPUigi RmFpbGVkIHRvIGFsbG9jYXRlIHRlbXBvcmFyeSBjbWQgYnVmZmVyLlxuIik7Ci0JCXJldHVybiAt RU5PTUVNOwotCX0KLQotCW1lbXNldChjbWQsIDAsIGZpZm9fc2l6ZSk7Ci0JY21kLT5oZWFkZXIg PSBTVkdBX0NNRF9ERUZJTkVfR01SRkI7Ci0JY21kLT5ib2R5LmZvcm1hdC5iaXRzUGVyUGl4ZWwg PSBmcmFtZWJ1ZmZlci0+YmFzZS5iaXRzX3Blcl9waXhlbDsKLQljbWQtPmJvZHkuZm9ybWF0LmNv bG9yRGVwdGggPSBkZXB0aDsKLQljbWQtPmJvZHkuZm9ybWF0LnJlc2VydmVkID0gMDsKLQljbWQt PmJvZHkuYnl0ZXNQZXJMaW5lID0gZnJhbWVidWZmZXItPmJhc2UucGl0Y2hlc1swXTsKLQljbWQt PmJvZHkucHRyLmdtcklkID0gZnJhbWVidWZmZXItPnVzZXJfaGFuZGxlOwotCWNtZC0+Ym9keS5w dHIub2Zmc2V0ID0gMDsKLQotCXJldCA9IHZtd19leGVjYnVmX3Byb2Nlc3MoZmlsZV9wcml2LCBk ZXZfcHJpdiwgTlVMTCwgY21kLAotCQkJCSAgZmlmb19zaXplLCAwLCBOVUxMLCBOVUxMKTsKLQot CWtmcmVlKGNtZCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGRvX2RtYWJ1Zl9k aXJ0eV9zb3Uoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCi0JCQkgICAgICAgc3RydWN0IHZt d19wcml2YXRlICpkZXZfcHJpdiwKLQkJCSAgICAgICBzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICpm cmFtZWJ1ZmZlciwKLQkJCSAgICAgICB1bnNpZ25lZCBmbGFncywgdW5zaWduZWQgY29sb3IsCi0J CQkgICAgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXBzLAotCQkJICAgICAgIHVuc2lnbmVk IG51bV9jbGlwcywgaW50IGluY3JlbWVudCwKLQkJCSAgICAgICBzdHJ1Y3Qgdm13X2ZlbmNlX29i aiAqKm91dF9mZW5jZSkKLXsKLQlzdHJ1Y3Qgdm13X2Rpc3BsYXlfdW5pdCAqdW5pdHNbVk1XR0ZY X05VTV9ESVNQTEFZX1VOSVRTXTsKLQlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHNfcHRyOwot CWludCBpLCBrLCBudW1fdW5pdHMsIHJldDsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0Jc2l6 ZV90IGZpZm9fc2l6ZTsKLQotCXN0cnVjdCB7Ci0JCXVpbnQzMl90IGhlYWRlcjsKLQkJU1ZHQUZp Zm9DbWRCbGl0R01SRkJUb1NjcmVlbiBib2R5OwotCX0gKmJsaXRzOwotCi0JcmV0ID0gZG9fZG1h YnVmX2RlZmluZV9nbXJmYihmaWxlX3ByaXYsIGRldl9wcml2LCBmcmFtZWJ1ZmZlcik7Ci0JaWYg KHVubGlrZWx5KHJldCAhPSAwKSkKLQkJcmV0dXJuIHJldDsgLyogZGVmaW5lX2dtcmZiIHByaW50 cyB3YXJuaW5ncyAqLwotCi0JZmlmb19zaXplID0gc2l6ZW9mKCpibGl0cykgKiBudW1fY2xpcHM7 Ci0JYmxpdHMgPSBrbWFsbG9jKGZpZm9fc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHVubGlrZWx5 KGJsaXRzID09IE5VTEwpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIHRlbXBv cmFyeSBjbWQgYnVmZmVyLlxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW51bV91bml0 cyA9IDA7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2X3ByaXYtPmRldi0+bW9kZV9j b25maWcuY3J0Y19saXN0LCBoZWFkKSB7Ci0JCWlmIChjcnRjLT5wcmltYXJ5LT5mYiAhPSAmZnJh bWVidWZmZXItPmJhc2UpCi0JCQljb250aW51ZTsKLQkJdW5pdHNbbnVtX3VuaXRzKytdID0gdm13 X2NydGNfdG9fZHUoY3J0Yyk7Ci0JfQotCi0JZm9yIChrID0gMDsgayA8IG51bV91bml0czsgaysr KSB7Ci0JCXN0cnVjdCB2bXdfZGlzcGxheV91bml0ICp1bml0ID0gdW5pdHNba107Ci0JCWludCBo aXRfbnVtID0gMDsKLQotCQljbGlwc19wdHIgPSBjbGlwczsKLQkJZm9yIChpID0gMDsgaSA8IG51 bV9jbGlwczsgaSsrLCBjbGlwc19wdHIgKz0gaW5jcmVtZW50KSB7Ci0JCQlpbnQgY2xpcF94MSA9 IGNsaXBzX3B0ci0+eDEgLSB1bml0LT5jcnRjLng7Ci0JCQlpbnQgY2xpcF95MSA9IGNsaXBzX3B0 ci0+eTEgLSB1bml0LT5jcnRjLnk7Ci0JCQlpbnQgY2xpcF94MiA9IGNsaXBzX3B0ci0+eDIgLSB1 bml0LT5jcnRjLng7Ci0JCQlpbnQgY2xpcF95MiA9IGNsaXBzX3B0ci0+eTIgLSB1bml0LT5jcnRj Lnk7Ci0JCQlpbnQgbW92ZV94LCBtb3ZlX3k7Ci0KLQkJCS8qIHNraXAgYW55IGNydGNzIHRoYXQg bWlzc2VzIHRoZSBjbGlwIHJlZ2lvbiAqLwotCQkJaWYgKGNsaXBfeDEgPj0gdW5pdC0+Y3J0Yy5t b2RlLmhkaXNwbGF5IHx8Ci0JCQkgICAgY2xpcF95MSA+PSB1bml0LT5jcnRjLm1vZGUudmRpc3Bs YXkgfHwKLQkJCSAgICBjbGlwX3gyIDw9IDAgfHwgY2xpcF95MiA8PSAwKQotCQkJCWNvbnRpbnVl OwotCi0JCQkvKiBjbGlwIHNpemUgdG8gY3J0YyBzaXplICovCi0JCQljbGlwX3gyID0gbWluX3Qo aW50LCBjbGlwX3gyLCB1bml0LT5jcnRjLm1vZGUuaGRpc3BsYXkpOwotCQkJY2xpcF95MiA9IG1p bl90KGludCwgY2xpcF95MiwgdW5pdC0+Y3J0Yy5tb2RlLnZkaXNwbGF5KTsKLQotCQkJLyogdHJh bnNsYXRlIGJvdGggc3JjIGFuZCBkZXN0IHRvIGJyaW5nIGNsaXAgaW50byBzY3JlZW4gKi8KLQkJ CW1vdmVfeCA9IG1pbl90KGludCwgY2xpcF94MSwgMCk7Ci0JCQltb3ZlX3kgPSBtaW5fdChpbnQs IGNsaXBfeTEsIDApOwotCi0JCQkvKiBhY3R1YWwgdHJhbnNsYXRlIGRvbmUgaGVyZSAqLwotCQkJ YmxpdHNbaGl0X251bV0uaGVhZGVyID0gU1ZHQV9DTURfQkxJVF9HTVJGQl9UT19TQ1JFRU47Ci0J CQlibGl0c1toaXRfbnVtXS5ib2R5LmRlc3RTY3JlZW5JZCA9IHVuaXQtPnVuaXQ7Ci0JCQlibGl0 c1toaXRfbnVtXS5ib2R5LnNyY09yaWdpbi54ID0gY2xpcHNfcHRyLT54MSAtIG1vdmVfeDsKLQkJ CWJsaXRzW2hpdF9udW1dLmJvZHkuc3JjT3JpZ2luLnkgPSBjbGlwc19wdHItPnkxIC0gbW92ZV95 OwotCQkJYmxpdHNbaGl0X251bV0uYm9keS5kZXN0UmVjdC5sZWZ0ID0gY2xpcF94MSAtIG1vdmVf eDsKLQkJCWJsaXRzW2hpdF9udW1dLmJvZHkuZGVzdFJlY3QudG9wID0gY2xpcF95MSAtIG1vdmVf eTsKLQkJCWJsaXRzW2hpdF9udW1dLmJvZHkuZGVzdFJlY3QucmlnaHQgPSBjbGlwX3gyOwotCQkJ YmxpdHNbaGl0X251bV0uYm9keS5kZXN0UmVjdC5ib3R0b20gPSBjbGlwX3kyOwotCQkJaGl0X251 bSsrOwotCQl9Ci0KLQkJLyogbm8gY2xpcHMgaGl0IHRoZSBjcnRjICovCi0JCWlmIChoaXRfbnVt ID09IDApCi0JCQljb250aW51ZTsKLQotCQkvKiBvbmx5IHJldHVybiB0aGUgbGFzdCBmZW5jZSAq LwotCQlpZiAob3V0X2ZlbmNlICYmICpvdXRfZmVuY2UpCi0JCQl2bXdfZmVuY2Vfb2JqX3VucmVm ZXJlbmNlKG91dF9mZW5jZSk7Ci0KLQkJZmlmb19zaXplID0gc2l6ZW9mKCpibGl0cykgKiBoaXRf bnVtOwotCQlyZXQgPSB2bXdfZXhlY2J1Zl9wcm9jZXNzKGZpbGVfcHJpdiwgZGV2X3ByaXYsIE5V TEwsIGJsaXRzLAotCQkJCQkgIGZpZm9fc2l6ZSwgMCwgTlVMTCwgb3V0X2ZlbmNlKTsKLQotCQlp ZiAodW5saWtlbHkocmV0ICE9IDApKQotCQkJYnJlYWs7Ci0JfQotCi0Ja2ZyZWUoYmxpdHMpOwot Ci0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGludCB2bXdfZnJhbWVidWZmZXJfZG1hYnVmX2Rp cnR5KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLAogCQkJCSBzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGVfcHJpdiwKIAkJCQkgdW5zaWduZWQgZmxhZ3MsIHVuc2lnbmVkIGNvbG9yLApA QCAtOTc4LDEzICs2MjUsMTUgQEAgc3RhdGljIGludCB2bXdfZnJhbWVidWZmZXJfZG1hYnVmX2Rp cnR5KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLAogCX0KIAogCWlmIChkZXZf cHJpdi0+bGR1X3ByaXYpIHsKLQkJcmV0ID0gZG9fZG1hYnVmX2RpcnR5X2xkdShkZXZfcHJpdiwg JnZmYmQtPmJhc2UsCi0JCQkJCSAgZmxhZ3MsIGNvbG9yLAotCQkJCQkgIGNsaXBzLCBudW1fY2xp cHMsIGluY3JlbWVudCk7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gZG9fZG1hYnVmX2RpcnR5X3NvdShm aWxlX3ByaXYsIGRldl9wcml2LCAmdmZiZC0+YmFzZSwKLQkJCQkJICBmbGFncywgY29sb3IsCi0J CQkJCSAgY2xpcHMsIG51bV9jbGlwcywgaW5jcmVtZW50LCBOVUxMKTsKKwkJcmV0ID0gdm13X2tt c19sZHVfZG9fZG1hYnVmX2RpcnR5KGRldl9wcml2LCAmdmZiZC0+YmFzZSwKKwkJCQkJCSAgZmxh Z3MsIGNvbG9yLAorCQkJCQkJICBjbGlwcywgbnVtX2NsaXBzLCBpbmNyZW1lbnQpOworCX0gZWxz ZSBpZiAoZGV2X3ByaXYtPmFjdGl2ZV9kaXNwbGF5X3VuaXQgPT0gdm13X2R1X3NjcmVlbl9vYmpl Y3QpIHsKKwkJcmV0ID0gdm13X2ttc19zb3VfZG9fZG1hYnVmX2RpcnR5KGZpbGVfcHJpdiwgZGV2 X3ByaXYsCisJCQkJCQkgICZ2ZmJkLT5iYXNlLAorCQkJCQkJICBmbGFncywgY29sb3IsCisJCQkJ CQkgIGNsaXBzLCBudW1fY2xpcHMsIGluY3JlbWVudCwKKwkJCQkJCSAgTlVMTCk7CiAJfQogCiAJ dHRtX3JlYWRfdW5sb2NrKCZkZXZfcHJpdi0+cmVzZXJ2YXRpb25fc2VtKTsKQEAgLTEwMDksOCAr NjU4LDggQEAgc3RhdGljIGludCB2bXdfZnJhbWVidWZmZXJfZG1hYnVmX3BpbihzdHJ1Y3Qgdm13 X2ZyYW1lYnVmZmVyICp2ZmIpCiAJCXZtd19mcmFtZWJ1ZmZlcl90b192ZmJkKCZ2ZmItPmJhc2Up OwogCWludCByZXQ7CiAKLQkvKiBUaGlzIGNvZGUgc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggc2Ny ZWVuIG9iamVjdHMgKi8KLQlCVUdfT04oZGV2X3ByaXYtPnNvdV9wcml2KTsKKwkvKiBUaGlzIGNv ZGUgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aXRoIExlZ2FjeSBEaXNwbGF5IFVuaXQgKi8KKwlCVUdf T04oZGV2X3ByaXYtPmFjdGl2ZV9kaXNwbGF5X3VuaXQgIT0gdm13X2R1X2xlZ2FjeSk7CiAKIAl2 bXdfb3ZlcmxheV9wYXVzZV9hbGwoZGV2X3ByaXYpOwogCkBAIC0xMDU3LDcgKzcwNiw3IEBAIHN0 YXRpYyBpbnQgdm13X2ttc19uZXdfZnJhbWVidWZmZXJfZG1hYnVmKHN0cnVjdCB2bXdfcHJpdmF0 ZSAqZGV2X3ByaXYsCiAJfQogCiAJLyogTGltaXRlZCBmcmFtZWJ1ZmZlciBjb2xvciBkZXB0aCBz dXBwb3J0IGZvciBzY3JlZW4gb2JqZWN0cyAqLwotCWlmIChkZXZfcHJpdi0+c291X3ByaXYpIHsK KwlpZiAoZGV2X3ByaXYtPmFjdGl2ZV9kaXNwbGF5X3VuaXQgPT0gdm13X2R1X3NjcmVlbl9vYmpl Y3QpIHsKIAkJc3dpdGNoIChtb2RlX2NtZC0+ZGVwdGgpIHsKIAkJY2FzZSAzMjoKIAkJY2FzZSAy NDoKQEAgLTExMDAsNyArNzQ5LDcgQEAgc3RhdGljIGludCB2bXdfa21zX25ld19mcmFtZWJ1ZmZl cl9kbWFidWYoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAl2ZmJkLT5iYXNlLmJhc2Uu ZGVwdGggPSBtb2RlX2NtZC0+ZGVwdGg7CiAJdmZiZC0+YmFzZS5iYXNlLndpZHRoID0gbW9kZV9j bWQtPndpZHRoOwogCXZmYmQtPmJhc2UuYmFzZS5oZWlnaHQgPSBtb2RlX2NtZC0+aGVpZ2h0Owot CWlmICghZGV2X3ByaXYtPnNvdV9wcml2KSB7CisJaWYgKGRldl9wcml2LT5hY3RpdmVfZGlzcGxh eV91bml0ID09IHZtd19kdV9sZWdhY3kpIHsKIAkJdmZiZC0+YmFzZS5waW4gPSB2bXdfZnJhbWVi dWZmZXJfZG1hYnVmX3BpbjsKIAkJdmZiZC0+YmFzZS51bnBpbiA9IHZtd19mcmFtZWJ1ZmZlcl9k bWFidWZfdW5waW47CiAJfQpAQCAtMTE1Nyw3ICs4MDYsNyBAQCBzdGF0aWMgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqdm13X2ttc19mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAlp ZiAoIXZtd19rbXNfdmFsaWRhdGVfbW9kZV92cmFtKGRldl9wcml2LAogCQkJCQltb2RlX2NtZC5w aXRjaCwKIAkJCQkJbW9kZV9jbWQuaGVpZ2h0KSkgewotCQlEUk1fRVJST1IoIlZSQU0gc2l6ZSBp cyB0b28gc21hbGwgZm9yIHJlcXVlc3RlZCBtb2RlLlxuIik7CisJCURSTV9FUlJPUigiUmVxdWVz dGVkIG1vZGUgZXhjZWVkcyBib3VuZGluZyBib3ggbGltaXQuXG4iKTsKIAkJcmV0dXJuIEVSUl9Q VFIoLUVOT01FTSk7CiAJfQogCkBAIC0xMjE4LDcgKzg2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIHZtd19rbXNfZnVuY3MgPSB7CiAJLmZiX2NyZWF0ZSA9 IHZtd19rbXNfZmJfY3JlYXRlLAogfTsKIAotaW50IHZtd19rbXNfcHJlc2VudChzdHJ1Y3Qgdm13 X3ByaXZhdGUgKmRldl9wcml2LAoraW50IHZtd19rbXNfZ2VuZXJpY19wcmVzZW50KHN0cnVjdCB2 bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwK IAkJICAgIHN0cnVjdCB2bXdfZnJhbWVidWZmZXIgKnZmYiwKIAkJICAgIHN0cnVjdCB2bXdfc3Vy ZmFjZSAqc3VyZmFjZSwKQEAgLTEzNTQsNiArMTAwMywxOSBAQCBvdXRfZnJlZV90bXA6CiAJcmV0 dXJuIHJldDsKIH0KIAoraW50IHZtd19rbXNfcHJlc2VudChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRl dl9wcml2LAorCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCSAgICBzdHJ1Y3Qg dm13X2ZyYW1lYnVmZmVyICp2ZmIsCisJCSAgICBzdHJ1Y3Qgdm13X3N1cmZhY2UgKnN1cmZhY2Us CisJCSAgICB1aW50MzJfdCBzaWQsCisJCSAgICBpbnQzMl90IGRlc3RYLCBpbnQzMl90IGRlc3RZ LAorCQkgICAgc3RydWN0IGRybV92bXdfcmVjdCAqY2xpcHMsCisJCSAgICB1aW50MzJfdCBudW1f Y2xpcHMpCit7CisJcmV0dXJuIHZtd19rbXNfZ2VuZXJpY19wcmVzZW50KGRldl9wcml2LCBmaWxl X3ByaXYsIHZmYiwgc3VyZmFjZSwgc2lkLAorCQkJCSAgICAgICBkZXN0WCwgZGVzdFksIGNsaXBz LCBudW1fY2xpcHMpOworfQorCiBpbnQgdm13X2ttc19yZWFkYmFjayhzdHJ1Y3Qgdm13X3ByaXZh dGUgKmRldl9wcml2LAogCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAogCQkgICAg IHN0cnVjdCB2bXdfZnJhbWVidWZmZXIgKnZmYiwKQEAgLTE0NzQsMjYgKzExMzYsMjkgQEAgaW50 IHZtd19rbXNfaW5pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQogCWRldi0+bW9kZV9j b25maWcubWF4X3dpZHRoID0gODE5MjsKIAlkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSA4 MTkyOwogCi0JcmV0ID0gdm13X2ttc19pbml0X3NjcmVlbl9vYmplY3RfZGlzcGxheShkZXZfcHJp dik7CisJcmV0ID0gdm13X2ttc19zb3VfaW5pdF9kaXNwbGF5KGRldl9wcml2KTsKIAlpZiAocmV0 KSAvKiBGYWxsYmFjayAqLwotCQkodm9pZCl2bXdfa21zX2luaXRfbGVnYWN5X2Rpc3BsYXlfc3lz dGVtKGRldl9wcml2KTsKKwkJcmV0ID0gdm13X2ttc19sZHVfaW5pdF9kaXNwbGF5KGRldl9wcml2 KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIGludCB2bXdfa21zX2Nsb3NlKHN0 cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CisJaW50IHJldDsKKwogCS8qCiAJICogRG9j cyBzYXlzIHdlIHNob3VsZCB0YWtlIHRoZSBsb2NrIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rp b24KIAkgKiBidXQgc2luY2UgaXQgZGVzdHJveXMgZW5jb2RlcnMgYW5kIG91ciBkZXN0cnVjdG9y IGNhbGxzCiAJICogZHJtX2VuY29kZXJfY2xlYW51cCB3aGljaCB0YWtlcyB0aGUgbG9jayB3ZSBk ZWFkbG9jay4KIAkgKi8KIAlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkZXZfcHJpdi0+ZGV2KTsK LQlpZiAoZGV2X3ByaXYtPnNvdV9wcml2KQotCQl2bXdfa21zX2Nsb3NlX3NjcmVlbl9vYmplY3Rf ZGlzcGxheShkZXZfcHJpdik7CisJaWYgKGRldl9wcml2LT5hY3RpdmVfZGlzcGxheV91bml0ID09 IHZtd19kdV9zY3JlZW5fb2JqZWN0KQorCQlyZXQgPSB2bXdfa21zX3NvdV9jbG9zZV9kaXNwbGF5 KGRldl9wcml2KTsKIAllbHNlCi0JCXZtd19rbXNfY2xvc2VfbGVnYWN5X2Rpc3BsYXlfc3lzdGVt KGRldl9wcml2KTsKLQlyZXR1cm4gMDsKKwkJcmV0ID0gdm13X2ttc19sZHVfY2xvc2VfZGlzcGxh eShkZXZfcHJpdik7CisKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgdm13X2ttc19jdXJzb3JfYnlw YXNzX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCkBAIC0xNTY5LDcg KzEyMzQsNyBAQCBpbnQgdm13X2ttc19zYXZlX3ZnYShzdHJ1Y3Qgdm13X3ByaXZhdGUgKnZtd19w cml2KQogCQkgIHZtd19yZWFkKHZtd19wcml2LCBTVkdBX1JFR19QSVRDSExPQ0spOwogCWVsc2Ug aWYgKHZtd19maWZvX2hhdmVfcGl0Y2hsb2NrKHZtd19wcml2KSkKIAkJdm13X3ByaXYtPnZnYV9w aXRjaGxvY2sgPSBpb3JlYWQzMih2bXdfcHJpdi0+bW1pb192aXJ0ICsKLQkJCQkJCSAgICAgICBT VkdBX0ZJRk9fUElUQ0hMT0NLKTsKKwkJCQkJCSAgIFNWR0FfRklGT19QSVRDSExPQ0spOwogCiAJ aWYgKCEodm13X3ByaXYtPmNhcGFiaWxpdGllcyAmIFNWR0FfQ0FQX0RJU1BMQVlfVE9QT0xPR1kp KQogCQlyZXR1cm4gMDsKQEAgLTE3MTUsNzUgKzEzODAsNiBAQCBzdGF0aWMgaW50IHZtd19kdV91 cGRhdGVfbGF5b3V0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIHVuc2lnbmVkIG51bSwK IAlyZXR1cm4gMDsKIH0KIAotaW50IHZtd19kdV9wYWdlX2ZsaXAoc3RydWN0IGRybV9jcnRjICpj cnRjLAotCQkgICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkgICAgIHN0cnVjdCBk cm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50LAotCQkgICAgIHVpbnQzMl90IHBhZ2VfZmxp cF9mbGFncykKLXsKLQlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gdm13X3ByaXYoY3J0 Yy0+ZGV2KTsKLQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmIgPSBjcnRjLT5wcmltYXJ5 LT5mYjsKLQlzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICp2ZmIgPSB2bXdfZnJhbWVidWZmZXJfdG9f dmZiKGZiKTsKLQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiA7Ci0Jc3RydWN0IHZtd19mZW5j ZV9vYmogKmZlbmNlID0gTlVMTDsKLQlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBjbGlwczsKLQlpbnQg cmV0OwotCi0JaWYgKGV2ZW50ID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogcmVx dWlyZSBTY3JlZW5PYmplY3Qgc3VwcG9ydCBmb3IgcGFnZSBmbGlwcGluZyAqLwotCWlmICghZGV2 X3ByaXYtPnNvdV9wcml2KQotCQlyZXR1cm4gLUVOT1NZUzsKLQotCWZpbGVfcHJpdiA9IGV2ZW50 LT5iYXNlLmZpbGVfcHJpdjsKLQlpZiAoIXZtd19rbXNfc2NyZWVuX29iamVjdF9mbGlwcGFibGUo ZGV2X3ByaXYsIGNydGMpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNydGMtPnByaW1hcnktPmZi ID0gZmI7Ci0KLQkvKiBkbyBhIGZ1bGwgc2NyZWVuIGRpcnR5IHVwZGF0ZSAqLwotCWNsaXBzLngx ID0gY2xpcHMueTEgPSAwOwotCWNsaXBzLngyID0gZmItPndpZHRoOwotCWNsaXBzLnkyID0gZmIt PmhlaWdodDsKLQotCWlmICh2ZmItPmRtYWJ1ZikKLQkJcmV0ID0gZG9fZG1hYnVmX2RpcnR5X3Nv dShmaWxlX3ByaXYsIGRldl9wcml2LCB2ZmIsCi0JCQkJCSAgMCwgMCwgJmNsaXBzLCAxLCAxLCAm ZmVuY2UpOwotCWVsc2UKLQkJcmV0ID0gZG9fc3VyZmFjZV9kaXJ0eV9zb3UoZGV2X3ByaXYsIGZp bGVfcHJpdiwgdmZiLAotCQkJCQkgICAwLCAwLCAmY2xpcHMsIDEsIDEsICZmZW5jZSk7Ci0KLQot CWlmIChyZXQgIT0gMCkKLQkJZ290byBvdXRfbm9fZmVuY2U7Ci0JaWYgKCFmZW5jZSkgewotCQly ZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dF9ub19mZW5jZTsKLQl9Ci0KLQlyZXQgPSB2bXdfZXZl bnRfZmVuY2VfYWN0aW9uX3F1ZXVlKGZpbGVfcHJpdiwgZmVuY2UsCi0JCQkJCSAgICZldmVudC0+ YmFzZSwKLQkJCQkJICAgJmV2ZW50LT5ldmVudC50dl9zZWMsCi0JCQkJCSAgICZldmVudC0+ZXZl bnQudHZfdXNlYywKLQkJCQkJICAgdHJ1ZSk7Ci0KLQkvKgotCSAqIE5vIG5lZWQgdG8gaG9sZCBv biB0byB0aGlzIG5vdy4gVGhlIG9ubHkgY2xlYW51cAotCSAqIHdlIG5lZWQgdG8gZG8gaWYgd2Ug ZmFpbCBpcyB1bnJlZiB0aGUgZmVuY2UuCi0JICovCi0Jdm13X2ZlbmNlX29ial91bnJlZmVyZW5j ZSgmZmVuY2UpOwotCi0JaWYgKHZtd19jcnRjX3RvX2R1KGNydGMpLT5pc19pbXBsaWNpdCkKLQkJ dm13X2ttc19zY3JlZW5fb2JqZWN0X3VwZGF0ZV9pbXBsaWNpdF9mYihkZXZfcHJpdiwgY3J0Yyk7 Ci0KLQlyZXR1cm4gcmV0OwotCi1vdXRfbm9fZmVuY2U6Ci0JY3J0Yy0+cHJpbWFyeS0+ZmIgPSBv bGRfZmI7Ci0JcmV0dXJuIHJldDsKLX0KLQotCiB2b2lkIHZtd19kdV9jcnRjX3NhdmUoc3RydWN0 IGRybV9jcnRjICpjcnRjKQogewogfQpAQCAtMTk1NCwzNiArMTU1MCwzNCBAQCBpbnQgdm13X2R1 X2Nvbm5lY3Rvcl9maWxsX21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJ ICogSWYgdXNpbmcgc2NyZWVuIG9iamVjdHMsIHRoZW4gYXNzdW1lIDMyLWJwcCBiZWNhdXNlIHRo YXQncyB3aGF0IHRoZQogCSAqIFNWR0EgZGV2aWNlIGlzIGFzc3VtaW5nCiAJICovCi0JaWYgKGRl dl9wcml2LT5zb3VfcHJpdikKKwlpZiAoZGV2X3ByaXYtPmFjdGl2ZV9kaXNwbGF5X3VuaXQgPT0g dm13X2R1X3NjcmVlbl9vYmplY3QpCiAJCWFzc3VtZWRfYnBwID0gNDsKIAogCS8qIEFkZCBwcmVm ZXJyZWQgbW9kZSAqLwotCXsKLQkJbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsICZwcmVm bW9kZSk7Ci0JCWlmICghbW9kZSkKLQkJCXJldHVybiAwOwotCQltb2RlLT5oZGlzcGxheSA9IGR1 LT5wcmVmX3dpZHRoOwotCQltb2RlLT52ZGlzcGxheSA9IGR1LT5wcmVmX2hlaWdodDsKLQkJdm13 X2d1ZXNzX21vZGVfdGltaW5nKG1vZGUpOwotCi0JCWlmICh2bXdfa21zX3ZhbGlkYXRlX21vZGVf dnJhbShkZXZfcHJpdiwKLQkJCQkJCW1vZGUtPmhkaXNwbGF5ICogYXNzdW1lZF9icHAsCi0JCQkJ CQltb2RlLT52ZGlzcGxheSkpIHsKLQkJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBt b2RlKTsKLQkJfSBlbHNlIHsKLQkJCWRybV9tb2RlX2Rlc3Ryb3koZGV2LCBtb2RlKTsKLQkJCW1v ZGUgPSBOVUxMOwotCQl9CisJbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsICZwcmVmbW9k ZSk7CisJaWYgKCFtb2RlKQorCQlyZXR1cm4gMDsKKwltb2RlLT5oZGlzcGxheSA9IGR1LT5wcmVm X3dpZHRoOworCW1vZGUtPnZkaXNwbGF5ID0gZHUtPnByZWZfaGVpZ2h0OworCXZtd19ndWVzc19t b2RlX3RpbWluZyhtb2RlKTsKIAotCQlpZiAoZHUtPnByZWZfbW9kZSkgewotCQkJbGlzdF9kZWxf aW5pdCgmZHUtPnByZWZfbW9kZS0+aGVhZCk7Ci0JCQlkcm1fbW9kZV9kZXN0cm95KGRldiwgZHUt PnByZWZfbW9kZSk7Ci0JCX0KKwlpZiAodm13X2ttc192YWxpZGF0ZV9tb2RlX3ZyYW0oZGV2X3By aXYsCisJCQkJCW1vZGUtPmhkaXNwbGF5ICogYXNzdW1lZF9icHAsCisJCQkJCW1vZGUtPnZkaXNw bGF5KSkgeworCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbW9kZSk7CisJfSBlbHNl IHsKKwkJZHJtX21vZGVfZGVzdHJveShkZXYsIG1vZGUpOworCQltb2RlID0gTlVMTDsKKwl9CiAK LQkJLyogbW9kZSBtaWdodCBiZSBudWxsIGhlcmUsIHRoaXMgaXMgaW50ZW5kZWQgKi8KLQkJZHUt PnByZWZfbW9kZSA9IG1vZGU7CisJaWYgKGR1LT5wcmVmX21vZGUpIHsKKwkJbGlzdF9kZWxfaW5p dCgmZHUtPnByZWZfbW9kZS0+aGVhZCk7CisJCWRybV9tb2RlX2Rlc3Ryb3koZGV2LCBkdS0+cHJl Zl9tb2RlKTsKIAl9CiAKKwkvKiBtb2RlIG1pZ2h0IGJlIG51bGwgaGVyZSwgdGhpcyBpcyBpbnRl bmRlZCAqLworCWR1LT5wcmVmX21vZGUgPSBtb2RlOworCiAJZm9yIChpID0gMDsgdm13X2ttc19j b25uZWN0b3JfYnVpbHRpbltpXS50eXBlICE9IDA7IGkrKykgewogCQlibW9kZSA9ICZ2bXdfa21z X2Nvbm5lY3Rvcl9idWlsdGluW2ldOwogCQlpZiAoYm1vZGUtPmhkaXNwbGF5ID4gbWF4X3dpZHRo IHx8CkBAIC0yMDMyLDYgKzE2MjYsNyBAQCBpbnQgdm13X2ttc191cGRhdGVfbGF5b3V0X2lvY3Rs KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJaW50IHJldDsKIAlpbnQgaTsK IAlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICptb2RlX2NvbmZpZyA9ICZkZXYtPm1vZGVfY29uZmln OworCXN0cnVjdCBkcm1fdm13X3JlY3QgYm91bmRpbmdfYm94ID0gezB9OwogCiAJcmV0ID0gdHRt X3JlYWRfbG9jaygmZGV2X3ByaXYtPnJlc2VydmF0aW9uX3NlbSwgdHJ1ZSk7CiAJaWYgKHVubGlr ZWx5KHJldCAhPSAwKSkKQEAgLTIwNjgsNiArMTY2MywxNiBAQCBpbnQgdm13X2ttc191cGRhdGVf bGF5b3V0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQlyZXQg PSAtRUlOVkFMOwogCQkJZ290byBvdXRfZnJlZTsKIAkJfQorCisJCS8qCisJCSAqIGJvdW5kaW5n X2JveC53IGFuZCBidW5kaW5nX2JveC5oIGFyZSB1c2VkIGFzCisJCSAqIGxvd2VyLXJpZ2h0IGNv b3JkaW5hdGVzCisJCSAqLworCQlpZiAocmVjdHNbaV0ueCArIHJlY3RzW2ldLncgPiBib3VuZGlu Z19ib3gudykKKwkJCWJvdW5kaW5nX2JveC53ID0gcmVjdHNbaV0ueCArIHJlY3RzW2ldLnc7CisK KwkJaWYgKHJlY3RzW2ldLnkgKyByZWN0c1tpXS5oID4gYm91bmRpbmdfYm94LmgpCisJCQlib3Vu ZGluZ19ib3guaCA9IHJlY3RzW2ldLnkgKyByZWN0c1tpXS5oOwogCX0KIAogCXZtd19kdV91cGRh dGVfbGF5b3V0KGRldl9wcml2LCBhcmctPm51bV9vdXRwdXRzLCByZWN0cyk7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuaCBiL2RyaXZlcnMvZ3B1L2RybS92 bXdnZngvdm13Z2Z4X2ttcy5oCmluZGV4IDhkMDM4YzMuLjE0Njk2ZmMgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92 bXdnZngvdm13Z2Z4X2ttcy5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAg KgotICogQ29weXJpZ2h0IMKpIDIwMDkgVk13YXJlLCBJbmMuLCBQYWxvIEFsdG8sIENBLiwgVVNB CisgKiBDb3B5cmlnaHQgwqkgMjAwOS0yMDE0IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4s IFVTQQogICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQpAQCAt MzIsMTEgKzMyLDE3IEBACiAjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgogI2luY2x1 ZGUgInZtd2dmeF9kcnYuaCIKIAorCisKICNkZWZpbmUgVk1XR0ZYX05VTV9ESVNQTEFZX1VOSVRT IDgKIAogCiAjZGVmaW5lIHZtd19mcmFtZWJ1ZmZlcl90b192ZmIoeCkgXAogCWNvbnRhaW5lcl9v Zih4LCBzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyLCBiYXNlKQorI2RlZmluZSB2bXdfZnJhbWVidWZm ZXJfdG9fdmZicyh4KSBcCisJY29udGFpbmVyX29mKHgsIHN0cnVjdCB2bXdfZnJhbWVidWZmZXJf c3VyZmFjZSwgYmFzZS5iYXNlKQorI2RlZmluZSB2bXdfZnJhbWVidWZmZXJfdG9fdmZiZCh4KSBc CisJY29udGFpbmVyX29mKHgsIHN0cnVjdCB2bXdfZnJhbWVidWZmZXJfZG1hYnVmLCBiYXNlLmJh c2UpCiAKIC8qKgogICogQmFzZSBjbGFzcyBmb3IgZnJhbWVidWZmZXJzCkBAIC01Myw5ICs1OSwz NyBAQCBzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyIHsKIAl1aW50MzJfdCB1c2VyX2hhbmRsZTsKIH07 CiAKKy8qCisgKiBDbGlwIHJlY3RhbmdsZQorICovCitzdHJ1Y3Qgdm13X2NsaXBfcmVjdCB7CisJ aW50IHgxLCB4MiwgeTEsIHkyOworfTsKKworc3RydWN0IHZtd19mcmFtZWJ1ZmZlcl9zdXJmYWNl IHsKKwlzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyIGJhc2U7CisJc3RydWN0IHZtd19zdXJmYWNlICpz dXJmYWNlOworCXN0cnVjdCB2bXdfZG1hX2J1ZmZlciAqYnVmZmVyOworCXN0cnVjdCBsaXN0X2hl YWQgaGVhZDsKKwlzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyOworfTsKKworCitzdHJ1Y3Qgdm13 X2ZyYW1lYnVmZmVyX2RtYWJ1ZiB7CisJc3RydWN0IHZtd19mcmFtZWJ1ZmZlciBiYXNlOworCXN0 cnVjdCB2bXdfZG1hX2J1ZmZlciAqYnVmZmVyOworfTsKKwogCi0jZGVmaW5lIHZtd19jcnRjX3Rv X2R1KHgpIFwKLQljb250YWluZXJfb2YoeCwgc3RydWN0IHZtd19kaXNwbGF5X3VuaXQsIGNydGMp CisKKy8qCisgKiBCYXNpYyBjbGlwIHJlY3QgbWFuaXB1bGF0aW9uCisgKi8KK3ZvaWQgdm13X2Ns aXBfY2xpcHJlY3RzKHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpyZWN0cywKKwkJCWludCBudW1fcmVj dHMsCisJCQlzdHJ1Y3Qgdm13X2NsaXBfcmVjdCBjbGlwLAorCQkJU1ZHQVNpZ25lZFJlY3QgKm91 dF9yZWN0cywKKwkJCWludCAqb3V0X251bSk7CiAKIC8qCiAgKiBCYXNpYyBjdXJzb3IgbWFuaXB1 bGF0aW9uCkBAIC0xMjAsMTEgKzE1NCw3IEBAIHN0cnVjdCB2bXdfZGlzcGxheV91bml0IHsKIC8q CiAgKiBTaGFyZWQgZGlzcGxheSB1bml0IGZ1bmN0aW9ucyAtIHZtd2dmeF9rbXMuYwogICovCi12 b2lkIHZtd19kaXNwbGF5X3VuaXRfY2xlYW51cChzdHJ1Y3Qgdm13X2Rpc3BsYXlfdW5pdCAqZHUp OwotaW50IHZtd19kdV9wYWdlX2ZsaXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAotCQkgICAgIHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAotCQkgICAgIHN0cnVjdCBkcm1fcGVuZGluZ192Ymxh bmtfZXZlbnQgKmV2ZW50LAotCQkgICAgIHVpbnQzMl90IHBhZ2VfZmxpcF9mbGFncyk7Cit2b2lk IHZtd19kdV9jbGVhbnVwKHN0cnVjdCB2bXdfZGlzcGxheV91bml0ICpkdSk7CiB2b2lkIHZtd19k dV9jcnRjX3NhdmUoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKIHZvaWQgdm13X2R1X2NydGNfcmVz dG9yZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwogdm9pZCB2bXdfZHVfY3J0Y19nYW1tYV9zZXQo c3RydWN0IGRybV9jcnRjICpjcnRjLApAQCAtMTQ4LDIwICsxNzgsMzEgQEAgaW50IHZtd19kdV9j b25uZWN0b3Jfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAv KgogICogTGVnYWN5IGRpc3BsYXkgdW5pdCBmdW5jdGlvbnMgLSB2bXdnZnhfbGR1LmMKICAqLwot aW50IHZtd19rbXNfaW5pdF9sZWdhY3lfZGlzcGxheV9zeXN0ZW0oc3RydWN0IHZtd19wcml2YXRl ICpkZXZfcHJpdik7Ci1pbnQgdm13X2ttc19jbG9zZV9sZWdhY3lfZGlzcGxheV9zeXN0ZW0oc3Ry dWN0IHZtd19wcml2YXRlICpkZXZfcHJpdik7CitpbnQgdm13X2ttc19sZHVfaW5pdF9kaXNwbGF5 KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpOworaW50IHZtd19rbXNfbGR1X2Nsb3NlX2Rp c3BsYXkoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdik7CitpbnQgdm13X2ttc19sZHVfZG9f ZG1hYnVmX2RpcnR5KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJc3RydWN0IHZt d19mcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsCisJCQkJdW5zaWduZWQgZmxhZ3MsIHVuc2lnbmVk IGNvbG9yLAorCQkJCXN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywKKwkJCQl1bnNpZ25lZCBu dW1fY2xpcHMsIGludCBpbmNyZW1lbnQpOwogCiAvKgogICogU2NyZWVuIE9iamVjdHMgZGlzcGxh eSBmdW5jdGlvbnMgLSB2bXdnZnhfc2Nybi5jCiAgKi8KLWludCB2bXdfa21zX2luaXRfc2NyZWVu X29iamVjdF9kaXNwbGF5KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpOwotaW50IHZtd19r bXNfY2xvc2Vfc2NyZWVuX29iamVjdF9kaXNwbGF5KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3By aXYpOwotaW50IHZtd19rbXNfc291X3VwZGF0ZV9sYXlvdXQoc3RydWN0IHZtd19wcml2YXRlICpk ZXZfcHJpdiwgdW5zaWduZWQgbnVtLAotCQkJICAgICAgc3RydWN0IGRybV92bXdfcmVjdCAqcmVj dHMpOwotYm9vbCB2bXdfa21zX3NjcmVlbl9vYmplY3RfZmxpcHBhYmxlKHN0cnVjdCB2bXdfcHJp dmF0ZSAqZGV2X3ByaXYsCi0JCQkJICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwotdm9pZCB2 bXdfa21zX3NjcmVlbl9vYmplY3RfdXBkYXRlX2ltcGxpY2l0X2ZiKHN0cnVjdCB2bXdfcHJpdmF0 ZSAqZGV2X3ByaXYsCi0JCQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Ci0KLQoraW50 IHZtd19rbXNfc291X2luaXRfZGlzcGxheShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KTsK K2ludCB2bXdfa21zX3NvdV9jbG9zZV9kaXNwbGF5KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3By aXYpOworaW50IHZtd19rbXNfc291X2RvX3N1cmZhY2VfZGlydHkoc3RydWN0IHZtd19wcml2YXRl ICpkZXZfcHJpdiwKKwkJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkJIHN0cnVj dCB2bXdfZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLAorCQkJCSB1bnNpZ25lZCBmbGFncywgdW5z aWduZWQgY29sb3IsCisJCQkJIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywKKwkJCQkgdW5z aWduZWQgbnVtX2NsaXBzLCBpbnQgaW5jLAorCQkJCSBzdHJ1Y3Qgdm13X2ZlbmNlX29iaiAqKm91 dF9mZW5jZSk7CitpbnQgdm13X2ttc19zb3VfZG9fZG1hYnVmX2RpcnR5KHN0cnVjdCBkcm1fZmls ZSAqZmlsZV9wcml2LAorCQkJCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJc3Ry dWN0IHZtd19mcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsCisJCQkJdW5zaWduZWQgZmxhZ3MsIHVu c2lnbmVkIGNvbG9yLAorCQkJCXN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywKKwkJCQl1bnNp Z25lZCBudW1fY2xpcHMsIGludCBpbmNyZW1lbnQsCisJCQkJc3RydWN0IHZtd19mZW5jZV9vYmog KipvdXRfZmVuY2UpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4 L3Ztd2dmeF9sZHUuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2xkdS5jCmluZGV4 IDVjMjg5ZjcuLjU3Mzc2ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13 Z2Z4X2xkdS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2xkdS5jCkBAIC01 Nyw3ICs1Nyw3IEBAIHN0cnVjdCB2bXdfbGVnYWN5X2Rpc3BsYXlfdW5pdCB7CiBzdGF0aWMgdm9p ZCB2bXdfbGR1X2Rlc3Ryb3koc3RydWN0IHZtd19sZWdhY3lfZGlzcGxheV91bml0ICpsZHUpCiB7 CiAJbGlzdF9kZWxfaW5pdCgmbGR1LT5hY3RpdmUpOwotCXZtd19kaXNwbGF5X3VuaXRfY2xlYW51 cCgmbGR1LT5iYXNlKTsKKwl2bXdfZHVfY2xlYW51cCgmbGR1LT5iYXNlKTsKIAlrZnJlZShsZHUp OwogfQogCkBAIC0zODUsNyArMzg1LDcgQEAgc3RhdGljIGludCB2bXdfbGR1X2luaXQoc3RydWN0 IHZtd19wcml2YXRlICpkZXZfcHJpdiwgdW5zaWduZWQgdW5pdCkKIAlyZXR1cm4gMDsKIH0KIAot aW50IHZtd19rbXNfaW5pdF9sZWdhY3lfZGlzcGxheV9zeXN0ZW0oc3RydWN0IHZtd19wcml2YXRl ICpkZXZfcHJpdikKK2ludCB2bXdfa21zX2xkdV9pbml0X2Rpc3BsYXkoc3RydWN0IHZtd19wcml2 YXRlICpkZXZfcHJpdikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRl djsKIAlpbnQgaSwgcmV0OwpAQCAtNDIyLDYgKzQyMiwxMCBAQCBpbnQgdm13X2ttc19pbml0X2xl Z2FjeV9kaXNwbGF5X3N5c3RlbShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQogCWVsc2UK IAkJdm13X2xkdV9pbml0KGRldl9wcml2LCAwKTsKIAorCWRldl9wcml2LT5hY3RpdmVfZGlzcGxh eV91bml0ID0gdm13X2R1X2xlZ2FjeTsKKworCURSTV9JTkZPKCJMZWdhY3kgRGlzcGxheSBVbml0 IGluaXRpYWxpemVkXG4iKTsKKwogCXJldHVybiAwOwogCiBlcnJfdmJsYW5rX2NsZWFudXA6CkBA IC00MzIsNyArNDM2LDcgQEAgZXJyX2ZyZWU6CiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHZtd19r bXNfY2xvc2VfbGVnYWN5X2Rpc3BsYXlfc3lzdGVtKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3By aXYpCitpbnQgdm13X2ttc19sZHVfY2xvc2VfZGlzcGxheShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRl dl9wcml2KQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OwogCkBA IC00NDcsMyArNDUxLDM4IEBAIGludCB2bXdfa21zX2Nsb3NlX2xlZ2FjeV9kaXNwbGF5X3N5c3Rl bShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQogCiAJcmV0dXJuIDA7CiB9CisKKworaW50 IHZtd19rbXNfbGR1X2RvX2RtYWJ1Zl9kaXJ0eShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2 LAorCQkJCXN0cnVjdCB2bXdfZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLAorCQkJCXVuc2lnbmVk IGZsYWdzLCB1bnNpZ25lZCBjb2xvciwKKwkJCQlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHMs CisJCQkJdW5zaWduZWQgbnVtX2NsaXBzLCBpbnQgaW5jcmVtZW50KQoreworCXNpemVfdCBmaWZv X3NpemU7CisJaW50IGk7CisKKwlzdHJ1Y3QgeworCQl1aW50MzJfdCBoZWFkZXI7CisJCVNWR0FG aWZvQ21kVXBkYXRlIGJvZHk7CisJfSAqY21kOworCisJZmlmb19zaXplID0gc2l6ZW9mKCpjbWQp ICogbnVtX2NsaXBzOworCWNtZCA9IHZtd19maWZvX3Jlc2VydmUoZGV2X3ByaXYsIGZpZm9fc2l6 ZSk7CisJaWYgKHVubGlrZWx5KGNtZCA9PSBOVUxMKSkgeworCQlEUk1fRVJST1IoIkZpZm8gcmVz ZXJ2ZSBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtc2V0KGNtZCwg MCwgZmlmb19zaXplKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NsaXBzOyBpKyssIGNsaXBzICs9 IGluY3JlbWVudCkgeworCQljbWRbaV0uaGVhZGVyID0gY3B1X3RvX2xlMzIoU1ZHQV9DTURfVVBE QVRFKTsKKwkJY21kW2ldLmJvZHkueCA9IGNwdV90b19sZTMyKGNsaXBzLT54MSk7CisJCWNtZFtp XS5ib2R5LnkgPSBjcHVfdG9fbGUzMihjbGlwcy0+eTEpOworCQljbWRbaV0uYm9keS53aWR0aCA9 IGNwdV90b19sZTMyKGNsaXBzLT54MiAtIGNsaXBzLT54MSk7CisJCWNtZFtpXS5ib2R5LmhlaWdo dCA9IGNwdV90b19sZTMyKGNsaXBzLT55MiAtIGNsaXBzLT55MSk7CisJfQorCisJdm13X2ZpZm9f Y29tbWl0KGRldl9wcml2LCBmaWZvX3NpemUpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfb3ZlcmxheS5jIGIvZHJpdmVycy9ncHUvZHJt L3Ztd2dmeC92bXdnZnhfb3ZlcmxheS5jCmluZGV4IDg3ZTM5ZjYuLjdmNGIyZjAgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X292ZXJsYXkuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9vdmVybGF5LmMKQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0 aWMgaW50IHZtd19vdmVybGF5X3NlbmRfcHV0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYs CiB7CiAJc3RydWN0IHZtd19lc2NhcGVfdmlkZW9fZmx1c2ggKmZsdXNoOwogCXNpemVfdCBmaWZv X3NpemU7Ci0JYm9vbCBoYXZlX3NvID0gZGV2X3ByaXYtPnNvdV9wcml2ID8gdHJ1ZSA6IGZhbHNl OworCWJvb2wgaGF2ZV9zbyA9IChkZXZfcHJpdi0+YWN0aXZlX2Rpc3BsYXlfdW5pdCA9PSB2bXdf ZHVfc2NyZWVuX29iamVjdCk7CiAJaW50IGksIG51bV9pdGVtczsKIAlTVkdBR3Vlc3RQdHIgcHRy OwogCkBAIC0yMzEsNyArMjMxLDcgQEAgc3RhdGljIGludCB2bXdfb3ZlcmxheV9tb3ZlX2J1ZmZl cihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCWlmICghcGluKQogCQlyZXR1cm4gdm13 X2RtYWJ1Zl91bnBpbihkZXZfcHJpdiwgYnVmLCBpbnRlcik7CiAKLQlpZiAoIWRldl9wcml2LT5z b3VfcHJpdikKKwlpZiAoZGV2X3ByaXYtPmFjdGl2ZV9kaXNwbGF5X3VuaXQgPT0gdm13X2R1X2xl Z2FjeSkKIAkJcmV0dXJuIHZtd19kbWFidWZfdG9fdnJhbShkZXZfcHJpdiwgYnVmLCB0cnVlLCBp bnRlcik7CiAKIAlyZXR1cm4gdm13X2RtYWJ1Zl90b192cmFtX29yX2dtcihkZXZfcHJpdiwgYnVm LCB0cnVlLCBpbnRlcik7CkBAIC00NTMsNyArNDUzLDcgQEAgaW50IHZtd19vdmVybGF5X3BhdXNl X2FsbChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQogCiBzdGF0aWMgYm9vbCB2bXdfb3Zl cmxheV9hdmFpbGFibGUoY29uc3Qgc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdikKIHsKLQly ZXR1cm4gKGRldl9wcml2LT5vdmVybGF5X3ByaXYgIT0gTlVMTCAmJiAKKwlyZXR1cm4gKGRldl9w cml2LT5vdmVybGF5X3ByaXYgIT0gTlVMTCAmJgogCQkoKGRldl9wcml2LT5maWZvLmNhcGFiaWxp dGllcyAmIFZNV19PVkVSTEFZX0NBUF9NQVNLKSA9PQogCQkgVk1XX09WRVJMQVlfQ0FQX01BU0sp KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Njcm4uYyBi L2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Njcm4uYwppbmRleCA3ZGM1OTFkLi41YTZm Mjk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9zY3JuLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc2Nybi5jCkBAIC0xLDYgKzEsNiBAQAog LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0IMKpIDIwMTEgVk13YXJlLCBJbmMu LCBQYWxvIEFsdG8sIENBLiwgVVNBCisgKiBDb3B5cmlnaHQgwqkgMjAxMS0yMDE0IFZNd2FyZSwg SW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQogICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAg KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYQpAQCAtNTcsNyArNTcsNyBAQCBzdHJ1Y3Qgdm13X3NjcmVlbl9vYmpl Y3RfdW5pdCB7CiAKIHN0YXRpYyB2b2lkIHZtd19zb3VfZGVzdHJveShzdHJ1Y3Qgdm13X3NjcmVl bl9vYmplY3RfdW5pdCAqc291KQogewotCXZtd19kaXNwbGF5X3VuaXRfY2xlYW51cCgmc291LT5i YXNlKTsKKwl2bXdfZHVfY2xlYW51cCgmc291LT5iYXNlKTsKIAlrZnJlZShzb3UpOwogfQogCkBA IC03Miw3ICs3Miw3IEBAIHN0YXRpYyB2b2lkIHZtd19zb3VfY3J0Y19kZXN0cm95KHN0cnVjdCBk cm1fY3J0YyAqY3J0YykKIH0KIAogc3RhdGljIHZvaWQgdm13X3NvdV9kZWxfYWN0aXZlKHN0cnVj dCB2bXdfcHJpdmF0ZSAqdm13X3ByaXYsCi0JCQkgICAgICBzdHJ1Y3Qgdm13X3NjcmVlbl9vYmpl Y3RfdW5pdCAqc291KQorCQkJICAgICAgIHN0cnVjdCB2bXdfc2NyZWVuX29iamVjdF91bml0ICpz b3UpCiB7CiAJc3RydWN0IHZtd19zY3JlZW5fb2JqZWN0X2Rpc3BsYXkgKmxkID0gdm13X3ByaXYt PnNvdV9wcml2OwogCkBAIC04NCw4ICs4NCw4IEBAIHN0YXRpYyB2b2lkIHZtd19zb3VfZGVsX2Fj dGl2ZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKnZtd19wcml2LAogfQogCiBzdGF0aWMgdm9pZCB2bXdf c291X2FkZF9hY3RpdmUoc3RydWN0IHZtd19wcml2YXRlICp2bXdfcHJpdiwKLQkJCSAgICAgIHN0 cnVjdCB2bXdfc2NyZWVuX29iamVjdF91bml0ICpzb3UsCi0JCQkgICAgICBzdHJ1Y3Qgdm13X2Zy YW1lYnVmZmVyICp2ZmIpCisJCQkgICAgICAgc3RydWN0IHZtd19zY3JlZW5fb2JqZWN0X3VuaXQg KnNvdSwKKwkJCSAgICAgICBzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICp2ZmIpCiB7CiAJc3RydWN0 IHZtd19zY3JlZW5fb2JqZWN0X2Rpc3BsYXkgKmxkID0gdm13X3ByaXYtPnNvdV9wcml2OwogCkBA IC0yNzQsMTMgKzI3NCwxMyBAQCBzdGF0aWMgaW50IHZtd19zb3VfY3J0Y19zZXRfY29uZmlnKHN0 cnVjdCBkcm1fbW9kZV9zZXQgKnNldCkKIAlkZXZfcHJpdiA9IHZtd19wcml2KGNydGMtPmRldik7 CiAKIAlpZiAoc2V0LT5udW1fY29ubmVjdG9ycyA+IDEpIHsKLQkJRFJNX0VSUk9SKCJ0byBtYW55 IGNvbm5lY3RvcnNcbiIpOworCQlEUk1fRVJST1IoIlRvbyBtYW55IGNvbm5lY3RvcnNcbiIpOwog CQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoc2V0LT5udW1fY29ubmVjdG9ycyA9PSAxICYm CiAJICAgIHNldC0+Y29ubmVjdG9yc1swXSAhPSAmc291LT5iYXNlLmNvbm5lY3RvcikgewotCQlE Uk1fRVJST1IoImNvbm5lY3RvciBkb2Vzbid0IG1hdGNoICVwICVwXG4iLAorCQlEUk1fRVJST1Io IkNvbm5lY3RvciBkb2Vzbid0IG1hdGNoICVwICVwXG4iLAogCQkJc2V0LT5jb25uZWN0b3JzWzBd LCAmc291LT5iYXNlLmNvbm5lY3Rvcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTM5MCw2 ICszOTAsMTA3IEBAIHN0YXRpYyBpbnQgdm13X3NvdV9jcnRjX3NldF9jb25maWcoc3RydWN0IGRy bV9tb2RlX3NldCAqc2V0KQogCXJldHVybiAwOwogfQogCisKKy8qKgorICogUmV0dXJucyBpZiB0 aGlzIHVuaXQgY2FuIGJlIHBhZ2UgZmxpcHBlZC4KKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhl IG1vZGVfY29uZmlnIG11dGV4IGhlbGQuCisgKi8KK3N0YXRpYyBib29sIHZtd19zb3Vfc2NyZWVu X29iamVjdF9mbGlwcGFibGUoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkJICAg IHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3Qgdm13X3NjcmVlbl9vYmplY3RfdW5p dCAqc291ID0gdm13X2NydGNfdG9fc291KGNydGMpOworCisJaWYgKCFzb3UtPmJhc2UuaXNfaW1w bGljaXQpCisJCXJldHVybiB0cnVlOworCisJaWYgKGRldl9wcml2LT5zb3VfcHJpdi0+bnVtX2lt cGxpY2l0ICE9IDEpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisKKy8q KgorICogVXBkYXRlIHRoZSBpbXBsaWNpdCBmYiB0byB0aGUgY3VycmVudCBmYiBvZiB0aGlzIGNy dGMuCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBtb2RlX2NvbmZpZyBtdXRleCBoZWxkLgor ICovCitzdGF0aWMgdm9pZCB2bXdfc291X3VwZGF0ZV9pbXBsaWNpdF9mYihzdHJ1Y3Qgdm13X3By aXZhdGUgKmRldl9wcml2LAorCQkJCSAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3Ry dWN0IHZtd19zY3JlZW5fb2JqZWN0X3VuaXQgKnNvdSA9IHZtd19jcnRjX3RvX3NvdShjcnRjKTsK KworCUJVR19PTighc291LT5iYXNlLmlzX2ltcGxpY2l0KTsKKworCWRldl9wcml2LT5zb3VfcHJp di0+aW1wbGljaXRfZmIgPQorCQl2bXdfZnJhbWVidWZmZXJfdG9fdmZiKHNvdS0+YmFzZS5jcnRj LnByaW1hcnktPmZiKTsKK30KKworCitzdGF0aWMgaW50IHZtd19zb3VfY3J0Y19wYWdlX2ZsaXAo c3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs CisJCQkJICBzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVudCwKKwkJCQkgIHVp bnQzMl90IHBhZ2VfZmxpcF9mbGFncykKK3sKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2 ID0gdm13X3ByaXYoY3J0Yy0+ZGV2KTsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmIg PSBjcnRjLT5wcmltYXJ5LT5mYjsKKwlzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICp2ZmIgPSB2bXdf ZnJhbWVidWZmZXJfdG9fdmZiKGZiKTsKKwlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiA9IGV2 ZW50LT5iYXNlLmZpbGVfcHJpdjsKKwlzdHJ1Y3Qgdm13X2ZlbmNlX29iaiAqZmVuY2UgPSBOVUxM OworCXN0cnVjdCBkcm1fY2xpcF9yZWN0IGNsaXBzOworCWludCByZXQ7CisKKwkvKiByZXF1aXJl IFNjcmVlbk9iamVjdCBzdXBwb3J0IGZvciBwYWdlIGZsaXBwaW5nICovCisJaWYgKCFkZXZfcHJp di0+c291X3ByaXYpCisJCXJldHVybiAtRU5PU1lTOworCisJaWYgKCF2bXdfc291X3NjcmVlbl9v YmplY3RfZmxpcHBhYmxlKGRldl9wcml2LCBjcnRjKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkg Y3J0Yy0+cHJpbWFyeS0+ZmIgPSBmYjsKKworCS8qIGRvIGEgZnVsbCBzY3JlZW4gZGlydHkgdXBk YXRlICovCisJY2xpcHMueDEgPSBjbGlwcy55MSA9IDA7CisJY2xpcHMueDIgPSBmYi0+d2lkdGg7 CisJY2xpcHMueTIgPSBmYi0+aGVpZ2h0OworCisJaWYgKHZmYi0+ZG1hYnVmKQorCQlyZXQgPSB2 bXdfa21zX3NvdV9kb19kbWFidWZfZGlydHkoZmlsZV9wcml2LCBkZXZfcHJpdiwgdmZiLAorCQkJ CQkJICAwLCAwLCAmY2xpcHMsIDEsIDEsICZmZW5jZSk7CisJZWxzZQorCQlyZXQgPSB2bXdfa21z X3NvdV9kb19zdXJmYWNlX2RpcnR5KGRldl9wcml2LCBmaWxlX3ByaXYsIHZmYiwKKwkJCQkJCSAg IDAsIDAsICZjbGlwcywgMSwgMSwgJmZlbmNlKTsKKworCisJaWYgKHJldCAhPSAwKQorCQlnb3Rv IG91dF9ub19mZW5jZTsKKwlpZiAoIWZlbmNlKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8g b3V0X25vX2ZlbmNlOworCX0KKworCXJldCA9IHZtd19ldmVudF9mZW5jZV9hY3Rpb25fcXVldWUo ZmlsZV9wcml2LCBmZW5jZSwKKwkJCQkJICAgJmV2ZW50LT5iYXNlLAorCQkJCQkgICAmZXZlbnQt PmV2ZW50LnR2X3NlYywKKwkJCQkJICAgJmV2ZW50LT5ldmVudC50dl91c2VjLAorCQkJCQkgICB0 cnVlKTsKKworCS8qCisJICogTm8gbmVlZCB0byBob2xkIG9uIHRvIHRoaXMgbm93LiBUaGUgb25s eSBjbGVhbnVwCisJICogd2UgbmVlZCB0byBkbyBpZiB3ZSBmYWlsIGlzIHVucmVmIHRoZSBmZW5j ZS4KKwkgKi8KKwl2bXdfZmVuY2Vfb2JqX3VucmVmZXJlbmNlKCZmZW5jZSk7CisKKwlpZiAodm13 X2NydGNfdG9fZHUoY3J0YyktPmlzX2ltcGxpY2l0KQorCQl2bXdfc291X3VwZGF0ZV9pbXBsaWNp dF9mYihkZXZfcHJpdiwgY3J0Yyk7CisKKwlyZXR1cm4gcmV0OworCitvdXRfbm9fZmVuY2U6CisJ Y3J0Yy0+cHJpbWFyeS0+ZmIgPSBvbGRfZmI7CisJcmV0dXJuIHJldDsKK30KKworCiBzdGF0aWMg c3RydWN0IGRybV9jcnRjX2Z1bmNzIHZtd19zY3JlZW5fb2JqZWN0X2NydGNfZnVuY3MgPSB7CiAJ LnNhdmUgPSB2bXdfZHVfY3J0Y19zYXZlLAogCS5yZXN0b3JlID0gdm13X2R1X2NydGNfcmVzdG9y ZSwKQEAgLTM5OCw3ICs0OTksNyBAQCBzdGF0aWMgc3RydWN0IGRybV9jcnRjX2Z1bmNzIHZtd19z Y3JlZW5fb2JqZWN0X2NydGNfZnVuY3MgPSB7CiAJLmdhbW1hX3NldCA9IHZtd19kdV9jcnRjX2dh bW1hX3NldCwKIAkuZGVzdHJveSA9IHZtd19zb3VfY3J0Y19kZXN0cm95LAogCS5zZXRfY29uZmln ID0gdm13X3NvdV9jcnRjX3NldF9jb25maWcsCi0JLnBhZ2VfZmxpcCA9IHZtd19kdV9wYWdlX2Zs aXAsCisJLnBhZ2VfZmxpcCA9IHZtd19zb3VfY3J0Y19wYWdlX2ZsaXAsCiB9OwogCiAvKgpAQCAt NDIzLDcgKzUyNCw3IEBAIHN0YXRpYyB2b2lkIHZtd19zb3VfY29ubmVjdG9yX2Rlc3Ryb3koc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIAl2bXdfc291X2Rlc3Ryb3kodm13X2Nvbm5l Y3Rvcl90b19zb3UoY29ubmVjdG9yKSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rv cl9mdW5jcyB2bXdfbGVnYWN5X2Nvbm5lY3Rvcl9mdW5jcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9mdW5jcyB2bXdfc291X2Nvbm5lY3Rvcl9mdW5jcyA9IHsKIAkuZHBtcyA9IHZt d19kdV9jb25uZWN0b3JfZHBtcywKIAkuc2F2ZSA9IHZtd19kdV9jb25uZWN0b3Jfc2F2ZSwKIAku cmVzdG9yZSA9IHZtd19kdV9jb25uZWN0b3JfcmVzdG9yZSwKQEAgLTQ1OCw3ICs1NTksNyBAQCBz dGF0aWMgaW50IHZtd19zb3VfaW5pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCB1bnNp Z25lZCB1bml0KQogCXNvdS0+YmFzZS5wcmVmX21vZGUgPSBOVUxMOwogCXNvdS0+YmFzZS5pc19p bXBsaWNpdCA9IHRydWU7CiAKLQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25uZWN0b3IsICZ2 bXdfbGVnYWN5X2Nvbm5lY3Rvcl9mdW5jcywKKwlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25u ZWN0b3IsICZ2bXdfc291X2Nvbm5lY3Rvcl9mdW5jcywKIAkJCSAgIERSTV9NT0RFX0NPTk5FQ1RP Ul9WSVJUVUFMKTsKIAljb25uZWN0b3ItPnN0YXR1cyA9IHZtd19kdV9jb25uZWN0b3JfZGV0ZWN0 KGNvbm5lY3RvciwgdHJ1ZSk7CiAKQEAgLTQ4MSw3ICs1ODIsNyBAQCBzdGF0aWMgaW50IHZtd19z b3VfaW5pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCB1bnNpZ25lZCB1bml0KQogCXJl dHVybiAwOwogfQogCi1pbnQgdm13X2ttc19pbml0X3NjcmVlbl9vYmplY3RfZGlzcGxheShzdHJ1 Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQoraW50IHZtd19rbXNfc291X2luaXRfZGlzcGxheShz dHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBkZXZfcHJpdi0+ZGV2OwogCWludCBpLCByZXQ7CkBAIC01MTYsNyArNjE3LDkgQEAgaW50IHZt d19rbXNfaW5pdF9zY3JlZW5fb2JqZWN0X2Rpc3BsYXkoc3RydWN0IHZtd19wcml2YXRlICpkZXZf cHJpdikKIAlmb3IgKGkgPSAwOyBpIDwgVk1XR0ZYX05VTV9ESVNQTEFZX1VOSVRTOyArK2kpCiAJ CXZtd19zb3VfaW5pdChkZXZfcHJpdiwgaSk7CiAKLQlEUk1fSU5GTygiU2NyZWVuIG9iamVjdHMg c3lzdGVtIGluaXRpYWxpemVkXG4iKTsKKwlkZXZfcHJpdi0+YWN0aXZlX2Rpc3BsYXlfdW5pdCA9 IHZtd19kdV9zY3JlZW5fb2JqZWN0OworCisJRFJNX0lORk8oIlNjcmVlbiBPYmplY3RzIERpc3Bs YXkgVW5pdCBpbml0aWFsaXplZFxuIik7CiAKIAlyZXR1cm4gMDsKIApAQCAtNTI5LDcgKzYzMiw3 IEBAIGVycl9ub19tZW06CiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHZtd19rbXNfY2xvc2Vfc2Ny ZWVuX29iamVjdF9kaXNwbGF5KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCitpbnQgdm13 X2ttc19zb3VfY2xvc2VfZGlzcGxheShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQogewog CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OwogCkBAIC01NDMsMzUgKzY0 NiwyOTUgQEAgaW50IHZtd19rbXNfY2xvc2Vfc2NyZWVuX29iamVjdF9kaXNwbGF5KHN0cnVjdCB2 bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJcmV0dXJuIDA7CiB9CiAKLS8qKgotICogUmV0dXJucyBp ZiB0aGlzIHVuaXQgY2FuIGJlIHBhZ2UgZmxpcHBlZC4KLSAqIE11c3QgYmUgY2FsbGVkIHdpdGgg dGhlIG1vZGVfY29uZmlnIG11dGV4IGhlbGQuCi0gKi8KLWJvb2wgdm13X2ttc19zY3JlZW5fb2Jq ZWN0X2ZsaXBwYWJsZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCSAgICAgc3Ry dWN0IGRybV9jcnRjICpjcnRjKQorCitzdGF0aWMgaW50IGRvX2RtYWJ1Zl9kZWZpbmVfZ21yZmIo c3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkJICBzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRl dl9wcml2LAorCQkJCSAgc3RydWN0IHZtd19mcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIpCiB7Ci0J c3RydWN0IHZtd19zY3JlZW5fb2JqZWN0X3VuaXQgKnNvdSA9IHZtd19jcnRjX3RvX3NvdShjcnRj KTsKKwlpbnQgZGVwdGggPSBmcmFtZWJ1ZmZlci0+YmFzZS5kZXB0aDsKKwlzaXplX3QgZmlmb19z aXplOworCWludCByZXQ7CiAKLQlpZiAoIXNvdS0+YmFzZS5pc19pbXBsaWNpdCkKLQkJcmV0dXJu IHRydWU7CisJc3RydWN0IHsKKwkJdWludDMyX3QgaGVhZGVyOworCQlTVkdBRmlmb0NtZERlZmlu ZUdNUkZCIGJvZHk7CisJfSAqY21kOwogCi0JaWYgKGRldl9wcml2LT5zb3VfcHJpdi0+bnVtX2lt cGxpY2l0ICE9IDEpCi0JCXJldHVybiBmYWxzZTsKKwkvKiBFbXVsYXRlIFJHQkEgc3VwcG9ydCwg Y29udHJhcnkgdG8gc3ZnYV9yZWcuaCB0aGlzIGlzIG5vdAorCSAqIHN1cHBvcnRlZCBieSBob3N0 cy4gVGhpcyBpcyBvbmx5IGEgcHJvYmxlbSBpZiB3ZSBhcmUgcmVhZGluZworCSAqIHRoaXMgdmFs dWUgbGF0ZXIgYW5kIGV4cGVjdGluZyB3aGF0IHdlIHVwbG9hZGVkIGJhY2suCisJICovCisJaWYg KGRlcHRoID09IDMyKQorCQlkZXB0aCA9IDI0OwogCi0JcmV0dXJuIHRydWU7CisJZmlmb19zaXpl ID0gc2l6ZW9mKCpjbWQpOworCWNtZCA9IGttYWxsb2MoZmlmb19zaXplLCBHRlBfS0VSTkVMKTsK KwlpZiAodW5saWtlbHkoY21kID09IE5VTEwpKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFs bG9jYXRlIHRlbXBvcmFyeSBjbWQgYnVmZmVyLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0K KworCW1lbXNldChjbWQsIDAsIGZpZm9fc2l6ZSk7CisJY21kLT5oZWFkZXIgPSBTVkdBX0NNRF9E RUZJTkVfR01SRkI7CisJY21kLT5ib2R5LmZvcm1hdC5iaXRzUGVyUGl4ZWwgPSBmcmFtZWJ1ZmZl ci0+YmFzZS5iaXRzX3Blcl9waXhlbDsKKwljbWQtPmJvZHkuZm9ybWF0LmNvbG9yRGVwdGggPSBk ZXB0aDsKKwljbWQtPmJvZHkuZm9ybWF0LnJlc2VydmVkID0gMDsKKwljbWQtPmJvZHkuYnl0ZXNQ ZXJMaW5lID0gZnJhbWVidWZmZXItPmJhc2UucGl0Y2hlc1swXTsKKwljbWQtPmJvZHkucHRyLmdt cklkID0gZnJhbWVidWZmZXItPnVzZXJfaGFuZGxlOworCWNtZC0+Ym9keS5wdHIub2Zmc2V0ID0g MDsKKworCXJldCA9IHZtd19leGVjYnVmX3Byb2Nlc3MoZmlsZV9wcml2LCBkZXZfcHJpdiwgTlVM TCwgY21kLAorCQkJCSAgZmlmb19zaXplLCAwLCBOVUxMLCBOVUxMKTsKKworCWtmcmVlKGNtZCk7 CisKKwlyZXR1cm4gcmV0OwogfQogCi0vKioKLSAqIFVwZGF0ZSB0aGUgaW1wbGljaXQgZmIgdG8g dGhlIGN1cnJlbnQgZmIgb2YgdGhpcyBjcnRjLgotICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUg bW9kZV9jb25maWcgbXV0ZXggaGVsZC4KLSAqLwotdm9pZCB2bXdfa21zX3NjcmVlbl9vYmplY3Rf dXBkYXRlX2ltcGxpY2l0X2ZiKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJCSAg ICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKKworaW50IHZtd19rbXNfc291X2RvX3N1cmZhY2Vf ZGlydHkoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYsCisJCQkJIHN0cnVjdCB2bXdfZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLAor CQkJCSB1bnNpZ25lZCBmbGFncywgdW5zaWduZWQgY29sb3IsCisJCQkJIHN0cnVjdCBkcm1fY2xp cF9yZWN0ICpjbGlwcywKKwkJCQkgdW5zaWduZWQgbnVtX2NsaXBzLCBpbnQgaW5jLAorCQkJCSBz dHJ1Y3Qgdm13X2ZlbmNlX29iaiAqKm91dF9mZW5jZSkKIHsKLQlzdHJ1Y3Qgdm13X3NjcmVlbl9v YmplY3RfdW5pdCAqc291ID0gdm13X2NydGNfdG9fc291KGNydGMpOworCXN0cnVjdCB2bXdfZGlz cGxheV91bml0ICp1bml0c1tWTVdHRlhfTlVNX0RJU1BMQVlfVU5JVFNdOworCXN0cnVjdCBkcm1f Y2xpcF9yZWN0ICpjbGlwc19wdHI7CisJc3RydWN0IGRybV9jbGlwX3JlY3QgKnRtcDsKKwlzdHJ1 Y3QgZHJtX2NydGMgKmNydGM7CisJc2l6ZV90IGZpZm9fc2l6ZTsKKwlpbnQgaSwgbnVtX3VuaXRz OworCWludCByZXQgPSAwOyAvKiBzaWxlbmNlIHdhcm5pbmcgKi8KKwlpbnQgbGVmdCwgcmlnaHQs IHRvcCwgYm90dG9tOwogCi0JQlVHX09OKCFzb3UtPmJhc2UuaXNfaW1wbGljaXQpOworCXN0cnVj dCB7CisJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7CisJCVNWR0EzZENtZEJsaXRTdXJmYWNlVG9T Y3JlZW4gYm9keTsKKwl9ICpjbWQ7CisJU1ZHQVNpZ25lZFJlY3QgKmJsaXRzOworCisJbnVtX3Vu aXRzID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXZfcHJpdi0+ZGV2LT5tb2Rl X2NvbmZpZy5jcnRjX2xpc3QsCisJCQkgICAgaGVhZCkgeworCQlpZiAoY3J0Yy0+cHJpbWFyeS0+ ZmIgIT0gJmZyYW1lYnVmZmVyLT5iYXNlKQorCQkJY29udGludWU7CisJCXVuaXRzW251bV91bml0 cysrXSA9IHZtd19jcnRjX3RvX2R1KGNydGMpOworCX0KIAotCWRldl9wcml2LT5zb3VfcHJpdi0+ aW1wbGljaXRfZmIgPQotCQl2bXdfZnJhbWVidWZmZXJfdG9fdmZiKHNvdS0+YmFzZS5jcnRjLnBy aW1hcnktPmZiKTsKKwlCVUdfT04oIWNsaXBzIHx8ICFudW1fY2xpcHMpOworCisJdG1wID0ga2Nh bGxvYyhudW1fY2xpcHMsIHNpemVvZigqdG1wKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5 KHRtcCA9PSBOVUxMKSkgeworCQlEUk1fRVJST1IoIlRlbXBvcmFyeSBjbGlwcmVjdCBtZW1vcnkg YWxsb2MgZmFpbGVkLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZpZm9fc2l6ZSA9 IHNpemVvZigqY21kKSArIHNpemVvZihTVkdBU2lnbmVkUmVjdCkgKiBudW1fY2xpcHM7CisJY21k ID0ga3phbGxvYyhmaWZvX3NpemUsIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseShjbWQgPT0g TlVMTCkpIHsKKwkJRFJNX0VSUk9SKCJUZW1wb3JhcnkgZmlmbyBtZW1vcnkgYWxsb2MgZmFpbGVk LlxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2ZyZWVfdG1wOworCX0KKworCS8q IHNldHVwIGJsaXRzIHBvaW50ZXIgKi8KKwlibGl0cyA9IChTVkdBU2lnbmVkUmVjdCAqKSZjbWRb MV07CisKKwkvKiBpbml0aWFsIGNsaXAgcmVnaW9uICovCisJbGVmdCA9IGNsaXBzLT54MTsKKwly aWdodCA9IGNsaXBzLT54MjsKKwl0b3AgPSBjbGlwcy0+eTE7CisJYm90dG9tID0gY2xpcHMtPnky OworCisJLyogc2tpcCB0aGUgZmlyc3QgY2xpcCByZWN0ICovCisJZm9yIChpID0gMSwgY2xpcHNf cHRyID0gY2xpcHMgKyBpbmM7CisJICAgICBpIDwgbnVtX2NsaXBzOyBpKyssIGNsaXBzX3B0ciAr PSBpbmMpIHsKKwkJbGVmdCA9IG1pbl90KGludCwgbGVmdCwgKGludCljbGlwc19wdHItPngxKTsK KwkJcmlnaHQgPSBtYXhfdChpbnQsIHJpZ2h0LCAoaW50KWNsaXBzX3B0ci0+eDIpOworCQl0b3Ag PSBtaW5fdChpbnQsIHRvcCwgKGludCljbGlwc19wdHItPnkxKTsKKwkJYm90dG9tID0gbWF4X3Qo aW50LCBib3R0b20sIChpbnQpY2xpcHNfcHRyLT55Mik7CisJfQorCisJLyogb25seSBuZWVkIHRv IGRvIHRoaXMgb25jZSAqLworCW1lbXNldChjbWQsIDAsIGZpZm9fc2l6ZSk7CisJY21kLT5oZWFk ZXIuaWQgPSBjcHVfdG9fbGUzMihTVkdBXzNEX0NNRF9CTElUX1NVUkZBQ0VfVE9fU0NSRUVOKTsK KwljbWQtPmhlYWRlci5zaXplID0gY3B1X3RvX2xlMzIoZmlmb19zaXplIC0gc2l6ZW9mKGNtZC0+ aGVhZGVyKSk7CisKKwljbWQtPmJvZHkuc3JjUmVjdC5sZWZ0ID0gbGVmdDsKKwljbWQtPmJvZHku c3JjUmVjdC5yaWdodCA9IHJpZ2h0OworCWNtZC0+Ym9keS5zcmNSZWN0LnRvcCA9IHRvcDsKKwlj bWQtPmJvZHkuc3JjUmVjdC5ib3R0b20gPSBib3R0b207CisKKwljbGlwc19wdHIgPSBjbGlwczsK Kwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NsaXBzOyBpKyssIGNsaXBzX3B0ciArPSBpbmMpIHsKKwkJ dG1wW2ldLngxID0gY2xpcHNfcHRyLT54MSAtIGxlZnQ7CisJCXRtcFtpXS54MiA9IGNsaXBzX3B0 ci0+eDIgLSBsZWZ0OworCQl0bXBbaV0ueTEgPSBjbGlwc19wdHItPnkxIC0gdG9wOworCQl0bXBb aV0ueTIgPSBjbGlwc19wdHItPnkyIC0gdG9wOworCX0KKworCS8qIGRvIHBlciB1bml0IHdyaXRp bmcsIHJldXNlIGZpZm8gZm9yIGVhY2ggKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3VuaXRzOyBp KyspIHsKKwkJc3RydWN0IHZtd19kaXNwbGF5X3VuaXQgKnVuaXQgPSB1bml0c1tpXTsKKwkJc3Ry dWN0IHZtd19jbGlwX3JlY3QgY2xpcDsKKwkJaW50IG51bTsKKworCQljbGlwLngxID0gbGVmdCAt IHVuaXQtPmNydGMueDsKKwkJY2xpcC55MSA9IHRvcCAtIHVuaXQtPmNydGMueTsKKwkJY2xpcC54 MiA9IHJpZ2h0IC0gdW5pdC0+Y3J0Yy54OworCQljbGlwLnkyID0gYm90dG9tIC0gdW5pdC0+Y3J0 Yy55OworCisJCS8qIHNraXAgYW55IGNydGNzIHRoYXQgbWlzc2VzIHRoZSBjbGlwIHJlZ2lvbiAq LworCQlpZiAoY2xpcC54MSA+PSB1bml0LT5jcnRjLm1vZGUuaGRpc3BsYXkgfHwKKwkJICAgIGNs aXAueTEgPj0gdW5pdC0+Y3J0Yy5tb2RlLnZkaXNwbGF5IHx8CisJCSAgICBjbGlwLngyIDw9IDAg fHwgY2xpcC55MiA8PSAwKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogSW4gb3JkZXIgZm9y IHRoZSBjbGlwIHJlY3RzIHRvIGJlIGNvcnJlY3RseSBzY2FsZWQKKwkJICogdGhlIHNyYyBhbmQg ZGVzdCByZWN0cyBuZWVkcyB0byBiZSB0aGUgc2FtZSBzaXplLgorCQkgKi8KKwkJY21kLT5ib2R5 LmRlc3RSZWN0LmxlZnQgPSBjbGlwLngxOworCQljbWQtPmJvZHkuZGVzdFJlY3QucmlnaHQgPSBj bGlwLngyOworCQljbWQtPmJvZHkuZGVzdFJlY3QudG9wID0gY2xpcC55MTsKKwkJY21kLT5ib2R5 LmRlc3RSZWN0LmJvdHRvbSA9IGNsaXAueTI7CisKKwkJLyogY3JlYXRlIGEgY2xpcCByZWN0IG9m IHRoZSBjcnRjIGluIGRlc3QgY29vcmRzICovCisJCWNsaXAueDIgPSB1bml0LT5jcnRjLm1vZGUu aGRpc3BsYXkgLSBjbGlwLngxOworCQljbGlwLnkyID0gdW5pdC0+Y3J0Yy5tb2RlLnZkaXNwbGF5 IC0gY2xpcC55MTsKKwkJY2xpcC54MSA9IDAgLSBjbGlwLngxOworCQljbGlwLnkxID0gMCAtIGNs aXAueTE7CisKKwkJLyogbmVlZCB0byByZXNldCBzaWQgYXMgaXQgaXMgY2hhbmdlZCBieSBleGVj YnVmICovCisJCWNtZC0+Ym9keS5zcmNJbWFnZS5zaWQgPSBjcHVfdG9fbGUzMihmcmFtZWJ1ZmZl ci0+dXNlcl9oYW5kbGUpOworCQljbWQtPmJvZHkuZGVzdFNjcmVlbklkID0gdW5pdC0+dW5pdDsK KworCQkvKiBjbGlwIGFuZCB3cml0ZSBibGl0cyB0byBjbWQgc3RyZWFtICovCisJCXZtd19jbGlw X2NsaXByZWN0cyh0bXAsIG51bV9jbGlwcywgY2xpcCwgYmxpdHMsICZudW0pOworCisJCS8qIGlm IG5vIGNsaXByZWN0cyBoaXQgc2tpcCB0aGlzICovCisJCWlmIChudW0gPT0gMCkKKwkJCWNvbnRp bnVlOworCisJCS8qIG9ubHkgcmV0dXJuIHRoZSBsYXN0IGZlbmNlICovCisJCWlmIChvdXRfZmVu Y2UgJiYgKm91dF9mZW5jZSkKKwkJCXZtd19mZW5jZV9vYmpfdW5yZWZlcmVuY2Uob3V0X2ZlbmNl KTsKKworCQkvKiByZWNhbGN1bGF0ZSBwYWNrYWdlIGxlbmd0aCAqLworCQlmaWZvX3NpemUgPSBz aXplb2YoKmNtZCkgKyBzaXplb2YoU1ZHQVNpZ25lZFJlY3QpICogbnVtOworCQljbWQtPmhlYWRl ci5zaXplID0gY3B1X3RvX2xlMzIoZmlmb19zaXplIC0gc2l6ZW9mKGNtZC0+aGVhZGVyKSk7CisJ CXJldCA9IHZtd19leGVjYnVmX3Byb2Nlc3MoZmlsZV9wcml2LCBkZXZfcHJpdiwgTlVMTCwgY21k LAorCQkJCQkgIGZpZm9fc2l6ZSwgMCwgTlVMTCwgb3V0X2ZlbmNlKTsKKworCQlpZiAodW5saWtl bHkocmV0ICE9IDApKQorCQkJYnJlYWs7CisJfQorCisKKwlrZnJlZShjbWQpOworb3V0X2ZyZWVf dG1wOgorCWtmcmVlKHRtcCk7CisKKwlyZXR1cm4gcmV0OworfQorCisKK2ludCB2bXdfa21zX3Nv dV9kb19kbWFidWZfZGlydHkoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkJc3RydWN0 IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQlzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICpmcmFt ZWJ1ZmZlciwKKwkJCQl1bnNpZ25lZCBmbGFncywgdW5zaWduZWQgY29sb3IsCisJCQkJc3RydWN0 IGRybV9jbGlwX3JlY3QgKmNsaXBzLAorCQkJCXVuc2lnbmVkIG51bV9jbGlwcywgaW50IGluY3Jl bWVudCwKKwkJCQlzdHJ1Y3Qgdm13X2ZlbmNlX29iaiAqKm91dF9mZW5jZSkKK3sKKwlzdHJ1Y3Qg dm13X2Rpc3BsYXlfdW5pdCAqdW5pdHNbVk1XR0ZYX05VTV9ESVNQTEFZX1VOSVRTXTsKKwlzdHJ1 Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHNfcHRyOworCWludCBpLCBrLCBudW1fdW5pdHMsIHJldDsK KwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc2l6ZV90IGZpZm9fc2l6ZTsKKworCXN0cnVjdCB7 CisJCXVpbnQzMl90IGhlYWRlcjsKKwkJU1ZHQUZpZm9DbWRCbGl0R01SRkJUb1NjcmVlbiBib2R5 OworCX0gKmJsaXRzOworCisJcmV0ID0gZG9fZG1hYnVmX2RlZmluZV9nbXJmYihmaWxlX3ByaXYs IGRldl9wcml2LCBmcmFtZWJ1ZmZlcik7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJcmV0 dXJuIHJldDsgLyogZGVmaW5lX2dtcmZiIHByaW50cyB3YXJuaW5ncyAqLworCisJZmlmb19zaXpl ID0gc2l6ZW9mKCpibGl0cykgKiBudW1fY2xpcHM7CisJYmxpdHMgPSBrbWFsbG9jKGZpZm9fc2l6 ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KGJsaXRzID09IE5VTEwpKSB7CisJCURSTV9F UlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIHRlbXBvcmFyeSBjbWQgYnVmZmVyLlxuIik7CisJCXJl dHVybiAtRU5PTUVNOworCX0KKworCW51bV91bml0cyA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRy eShjcnRjLCAmZGV2X3ByaXYtPmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CisJ CWlmIChjcnRjLT5wcmltYXJ5LT5mYiAhPSAmZnJhbWVidWZmZXItPmJhc2UpCisJCQljb250aW51 ZTsKKwkJdW5pdHNbbnVtX3VuaXRzKytdID0gdm13X2NydGNfdG9fZHUoY3J0Yyk7CisJfQorCisJ Zm9yIChrID0gMDsgayA8IG51bV91bml0czsgaysrKSB7CisJCXN0cnVjdCB2bXdfZGlzcGxheV91 bml0ICp1bml0ID0gdW5pdHNba107CisJCWludCBoaXRfbnVtID0gMDsKKworCQljbGlwc19wdHIg PSBjbGlwczsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9jbGlwczsgaSsrLCBjbGlwc19wdHIgKz0g aW5jcmVtZW50KSB7CisJCQlpbnQgY2xpcF94MSA9IGNsaXBzX3B0ci0+eDEgLSB1bml0LT5jcnRj Lng7CisJCQlpbnQgY2xpcF95MSA9IGNsaXBzX3B0ci0+eTEgLSB1bml0LT5jcnRjLnk7CisJCQlp bnQgY2xpcF94MiA9IGNsaXBzX3B0ci0+eDIgLSB1bml0LT5jcnRjLng7CisJCQlpbnQgY2xpcF95 MiA9IGNsaXBzX3B0ci0+eTIgLSB1bml0LT5jcnRjLnk7CisJCQlpbnQgbW92ZV94LCBtb3ZlX3k7 CisKKwkJCS8qIHNraXAgYW55IGNydGNzIHRoYXQgbWlzc2VzIHRoZSBjbGlwIHJlZ2lvbiAqLwor CQkJaWYgKGNsaXBfeDEgPj0gdW5pdC0+Y3J0Yy5tb2RlLmhkaXNwbGF5IHx8CisJCQkgICAgY2xp cF95MSA+PSB1bml0LT5jcnRjLm1vZGUudmRpc3BsYXkgfHwKKwkJCSAgICBjbGlwX3gyIDw9IDAg fHwgY2xpcF95MiA8PSAwKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBjbGlwIHNpemUgdG8gY3J0 YyBzaXplICovCisJCQljbGlwX3gyID0gbWluX3QoaW50LCBjbGlwX3gyLCB1bml0LT5jcnRjLm1v ZGUuaGRpc3BsYXkpOworCQkJY2xpcF95MiA9IG1pbl90KGludCwgY2xpcF95MiwgdW5pdC0+Y3J0 Yy5tb2RlLnZkaXNwbGF5KTsKKworCQkJLyogdHJhbnNsYXRlIHNyYyBhbmQgZGVzdCB0byBicmlu ZyBjbGlwIGludG8gc2NyZWVuICovCisJCQltb3ZlX3ggPSBtaW5fdChpbnQsIGNsaXBfeDEsIDAp OworCQkJbW92ZV95ID0gbWluX3QoaW50LCBjbGlwX3kxLCAwKTsKKworCQkJLyogYWN0dWFsIHRy YW5zbGF0ZSBkb25lIGhlcmUgKi8KKwkJCWJsaXRzW2hpdF9udW1dLmhlYWRlciA9IFNWR0FfQ01E X0JMSVRfR01SRkJfVE9fU0NSRUVOOworCQkJYmxpdHNbaGl0X251bV0uYm9keS5kZXN0U2NyZWVu SWQgPSB1bml0LT51bml0OworCQkJYmxpdHNbaGl0X251bV0uYm9keS5zcmNPcmlnaW4ueCA9CisJ CQkJY2xpcHNfcHRyLT54MSAtIG1vdmVfeDsKKwkJCWJsaXRzW2hpdF9udW1dLmJvZHkuc3JjT3Jp Z2luLnkgPQorCQkJCWNsaXBzX3B0ci0+eTEgLSBtb3ZlX3k7CisJCQlibGl0c1toaXRfbnVtXS5i b2R5LmRlc3RSZWN0LmxlZnQgPSBjbGlwX3gxIC0gbW92ZV94OworCQkJYmxpdHNbaGl0X251bV0u Ym9keS5kZXN0UmVjdC50b3AgPSBjbGlwX3kxIC0gbW92ZV95OworCQkJYmxpdHNbaGl0X251bV0u Ym9keS5kZXN0UmVjdC5yaWdodCA9IGNsaXBfeDI7CisJCQlibGl0c1toaXRfbnVtXS5ib2R5LmRl c3RSZWN0LmJvdHRvbSA9IGNsaXBfeTI7CisJCQloaXRfbnVtKys7CisJCX0KKworCQkvKiBubyBj bGlwcyBoaXQgdGhlIGNydGMgKi8KKwkJaWYgKGhpdF9udW0gPT0gMCkKKwkJCWNvbnRpbnVlOwor CisJCS8qIG9ubHkgcmV0dXJuIHRoZSBsYXN0IGZlbmNlICovCisJCWlmIChvdXRfZmVuY2UgJiYg Km91dF9mZW5jZSkKKwkJCXZtd19mZW5jZV9vYmpfdW5yZWZlcmVuY2Uob3V0X2ZlbmNlKTsKKwor CQlmaWZvX3NpemUgPSBzaXplb2YoKmJsaXRzKSAqIGhpdF9udW07CisJCXJldCA9IHZtd19leGVj YnVmX3Byb2Nlc3MoZmlsZV9wcml2LCBkZXZfcHJpdiwgTlVMTCwgYmxpdHMsCisJCQkJCSAgZmlm b19zaXplLCAwLCBOVUxMLCBvdXRfZmVuY2UpOworCisJCWlmICh1bmxpa2VseShyZXQgIT0gMCkp CisJCQlicmVhazsKKwl9CisKKwlrZnJlZShibGl0cyk7CisKKwlyZXR1cm4gcmV0OwogfQotLSAK Mi4xLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRy aS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==