From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Deucher Subject: [PATCH 13/51] drm/amd/powerplay: add Carrizo dpm support Date: Thu, 12 Nov 2015 01:18:03 -0500 Message-ID: <1447309121-2480-14-git-send-email-alexander.deucher@amd.com> References: <1447309121-2480-1-git-send-email-alexander.deucher@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qk0-f179.google.com (mail-qk0-f179.google.com [209.85.220.179]) by gabe.freedesktop.org (Postfix) with ESMTPS id 86BD87A089 for ; Wed, 11 Nov 2015 22:19:08 -0800 (PST) Received: by qkcl124 with SMTP id l124so20252470qkc.3 for ; Wed, 11 Nov 2015 22:19:07 -0800 (PST) In-Reply-To: <1447309121-2480-1-git-send-email-alexander.deucher@amd.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: Rex Zhu List-Id: dri-devel@lists.freedesktop.org RnJvbTogSmFtbXkgWmhvdSA8SmFtbXkuWmhvdUBhbWQuY29tPgoKVGhpcyBwYXRjaCBlbmFibGVz IGJhc2ljIERQTSBzdXBwb3J0IGZvciBDYXJyaXpvLgpEUE0gaGFuZGxlcyBkeW5hbWljIGNsb2Nr IGFuZCB2b2x0YWdlIHNjYWxpbmcuCgp2MzogZGVsZXRlIHBlY2kgc3ViLW1vZHVsZQp2MjogdXNl IGNncyBpbnRlcmZhY2UgZGlyZWN0bHkKICAgIGNvcnJlY3QgZGVmaW5lIFNNVV9FbmFibGVkRmVh dHVyZVNjb3JlYm9hcmRfU2Nsa0RwbU9uCgpTaWduZWQtb2ZmLWJ5OiBSZXggWmh1IDxSZXguWmh1 QGFtZC5jb20+ClNpZ25lZC1vZmYtYnk6IEphbW15IFpob3UgPEphbW15Llpob3VAYW1kLmNvbT4K UmV2aWV3ZWQtYnk6IEFsZXggRGV1Y2hlciA8YWxleGFuZGVyLmRldWNoZXJAYW1kLmNvbT4KLS0t CiBkcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9NYWtlZmlsZSAgIHwgICAyICst CiBkcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9jel9od21nci5jIHwgODk4ICsr KysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3 bWdyL2N6X2h3bWdyLmggfCAzMDkgKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2Vy cGxheS9od21nci9od21nci5jICAgIHwgICA2ICstCiA0IGZpbGVzIGNoYW5nZWQsIDEyMTIgaW5z ZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9jel9od21nci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvY3pfaHdtZ3IuaAoKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvTWFrZWZpbGUKaW5kZXggZWY1MjllMC4uMjJk MzgzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvTWFr ZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvTWFrZWZpbGUK QEAgLTMsNyArMyw3IEBACiAjIEl0IHByb3ZpZGVzIHRoZSBoYXJkd2FyZSBtYW5hZ2VtZW50IHNl cnZpY2VzIGZvciB0aGUgZHJpdmVyLgogCiBIQVJEV0FSRV9NR1IgPSBod21nci5vIHByb2Nlc3Nw cHRhYmxlcy5vIGZ1bmN0aW9udGFibGVzLm8gXAotCSAgICAgICBoYXJkd2FyZW1hbmFnZXIubyBw cF9hY3BpLm8KKwkgICAgICAgaGFyZHdhcmVtYW5hZ2VyLm8gcHBfYWNwaS5vIGN6X2h3bWdyLm8K IAogQU1EX1BQX0hXTUdSID0gJChhZGRwcmVmaXggJChBTURfUFBfUEFUSCkvaHdtZ3IvLCQoSEFS RFdBUkVfTUdSKSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkv aHdtZ3IvY3pfaHdtZ3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL2N6 X2h3bWdyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM0OTUwNQotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL2N6X2h3 bWdyLmMKQEAgLTAsMCArMSw4OTggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNSBBZHZhbmNlZCBN aWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxs IGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM CisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisg KiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGlu dXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9z bGFiLmg+CisjaW5jbHVkZSAiYXRvbS10eXBlcy5oIgorI2luY2x1ZGUgImF0b21iaW9zLmgiCisj aW5jbHVkZSAicHJvY2Vzc3BwdGFibGVzLmgiCisjaW5jbHVkZSAiY2dzX2NvbW1vbi5oIgorI2lu Y2x1ZGUgInNtdS9zbXVfOF8wX2QuaCIKKyNpbmNsdWRlICJzbXVtZ3IuaCIKKyNpbmNsdWRlICJo d21nci5oIgorI2luY2x1ZGUgImhhcmR3YXJlbWFuYWdlci5oIgorI2luY2x1ZGUgImN6X3Bwc21j LmgiCisjaW5jbHVkZSAiY3pfaHdtZ3IuaCIKKyNpbmNsdWRlICJwb3dlcl9zdGF0ZS5oIgorCitz dGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBQaHdDel9NYWdpYyA9ICh1bnNpZ25lZCBsb25nKSBQ SE1fQ3pfTWFnaWM7CisKK3N0YXRpYyBzdHJ1Y3QgY3pfcG93ZXJfc3RhdGUgKmNhc3RfUGh3Q3pQ b3dlclN0YXRlKHN0cnVjdCBwcF9od19wb3dlcl9zdGF0ZSAqaHdfcHMpCit7CisJaWYgKFBod0N6 X01hZ2ljICE9IGh3X3BzLT5tYWdpYykKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gKHN0cnVj dCBjel9wb3dlcl9zdGF0ZSAqKWh3X3BzOworfQorCitzdGF0aWMgdWludDMyX3QgY3pfZ2V0X3Nj bGtfbGV2ZWwoc3RydWN0IHBwX2h3bWdyICpod21nciwKKwkJCQl1aW50MzJfdCBjbG9jaywgdWlu dDMyX3QgbXNnKQoreworCWludCBpID0gMDsKKwlzdHJ1Y3QgcGhtX2Nsb2NrX3ZvbHRhZ2VfZGVw ZW5kZW5jeV90YWJsZSAqdGFibGUgPQorCQkJCWh3bWdyLT5keW5fc3RhdGUudmRkY19kZXBlbmRl bmN5X29uX3NjbGs7CisKKwlzd2l0Y2ggKG1zZykgeworCWNhc2UgUFBTTUNfTVNHX1NldFNjbGtT b2Z0TWluOgorCWNhc2UgUFBTTUNfTVNHX1NldFNjbGtIYXJkTWluOgorCQlmb3IgKGkgPSAwOyBp IDwgKGludCl0YWJsZS0+Y291bnQ7IGkrKykgeworCQkJaWYgKGNsb2NrIDw9IHRhYmxlLT5lbnRy aWVzW2ldLmNsaykKKwkJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUFBTTUNfTVNH X1NldFNjbGtTb2Z0TWF4OgorCWNhc2UgUFBTTUNfTVNHX1NldFNjbGtIYXJkTWF4OgorCQlmb3Ig KGkgPSB0YWJsZS0+Y291bnQgLSAxOyBpID49IDA7IGktLSkgeworCQkJaWYgKGNsb2NrID49IHRh YmxlLT5lbnRyaWVzW2ldLmNsaykKKwkJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWRlZmF1 bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gaTsKK30KKworc3RhdGljIHVpbnQzMl90IGN6X2dl dF9tYXhfc2Nsa19sZXZlbChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQoreworCXN0cnVjdCBjel9o d21nciAqY3pfaHdtZ3IgPSAoc3RydWN0IGN6X2h3bWdyICopKGh3bWdyLT5iYWNrZW5kKTsKKwor CWlmIChjel9od21nci0+bWF4X3NjbGtfbGV2ZWwgPT0gMCkgeworCQlzbXVtX3NlbmRfbXNnX3Rv X3NtYyhod21nci0+c211bWdyLCBQUFNNQ19NU0dfR2V0TWF4U2Nsa0xldmVsKTsKKwkJY3pfaHdt Z3ItPm1heF9zY2xrX2xldmVsID0gc211bV9nZXRfYXJndW1lbnQoaHdtZ3ItPnNtdW1ncikgKyAx OworCX0KKworCXJldHVybiBjel9od21nci0+bWF4X3NjbGtfbGV2ZWw7Cit9CisKK3N0YXRpYyBp bnQgY3pfaW5pdGlhbGl6ZV9kcG1fZGVmYXVsdHMoc3RydWN0IHBwX2h3bWdyICpod21ncikKK3sK KwlzdHJ1Y3QgY3pfaHdtZ3IgKmN6X2h3bWdyID0gKHN0cnVjdCBjel9od21nciAqKShod21nci0+ YmFja2VuZCk7CisJdWludDMyX3QgaTsKKworCWN6X2h3bWdyLT5nZnhfcmFtcF9zdGVwID0gMjU2 KjI1LzEwMDsKKworCWN6X2h3bWdyLT5nZnhfcmFtcF9kZWxheSA9IDE7IC8qIGJ5IGRlZmF1bHQs IHdlIGRlbGF5IDF1cyAqLworCisJZm9yIChpID0gMDsgaSA8IENaX01BWF9IQVJEV0FSRV9QT1dF UkxFVkVMUzsgaSsrKQorCQljel9od21nci0+YWN0aXZpdHlfdGFyZ2V0W2ldID0gQ1pfQVRfREZM VDsKKworCWN6X2h3bWdyLT5tZ2NnX2NndHRfbG9jYWwwID0gMHgwMDAwMDAwMDsKKwljel9od21n ci0+bWdjZ19jZ3R0X2xvY2FsMSA9IDB4MDAwMDAwMDA7CisKKwljel9od21nci0+Y2xvY2tfc2xv d19kb3duX2ZyZXEgPSAyNTAwMDsKKworCWN6X2h3bWdyLT5za2lwX2Nsb2NrX3Nsb3dfZG93biA9 IDE7CisKKwljel9od21nci0+ZW5hYmxlX25iX3BzX3BvbGljeSA9IDE7IC8qIGRpc2FibGUgdW50 aWwgVU5CIGlzIHJlYWR5LCBFbmFibGVkICovCisKKwljel9od21nci0+dm9sdGFnZV9kcm9wX2lu X2RjZV9wb3dlcl9nYXRpbmcgPSAwOyAvKiBkaXNhYmxlIHVudGlsIGZ1bGx5IHZlcmlmaWVkICov CisKKwljel9od21nci0+dm90aW5nX3JpZ2h0c19jbGllbnRzID0gMHgwMEMwMDAzMzsKKworCWN6 X2h3bWdyLT5zdGF0aWNfc2NyZWVuX3RocmVzaG9sZCA9IDg7CisKKwljel9od21nci0+ZGRpX3Bv d2VyX2dhdGluZ19kaXNhYmxlZCA9IDA7CisKKwljel9od21nci0+YmFwbV9lbmFibGVkID0gMTsK KworCWN6X2h3bWdyLT52b2x0YWdlX2Ryb3BfdGhyZXNob2xkID0gMDsKKworCWN6X2h3bWdyLT5n ZnhfcG93ZXJfZ2F0aW5nX3RocmVzaG9sZCA9IDUwMDsKKworCWN6X2h3bWdyLT52Y2Vfc2xvd19z Y2xrX3RocmVzaG9sZCA9IDIwMDAwOworCisJY3pfaHdtZ3ItPmRjZV9zbG93X3NjbGtfdGhyZXNo b2xkID0gMzAwMDA7CisKKwljel9od21nci0+ZGlzYWJsZV9kcml2ZXJfdGhlcm1hbF9wb2xpY3kg PSAxOworCisJY3pfaHdtZ3ItPmRpc2FibGVfbmJfcHMzX2luX2JhdHRlcnkgPSAwOworCisJcGht X2NhcF91bnNldChod21nci0+cGxhdGZvcm1fZGVzY3JpcHRvci5wbGF0Zm9ybUNhcHMsCisJCQkJ CQkJUEhNX1BsYXRmb3JtQ2Fwc19BQk0pOworCisJcGhtX2NhcF9zZXQoaHdtZ3ItPnBsYXRmb3Jt X2Rlc2NyaXB0b3IucGxhdGZvcm1DYXBzLAorCQkJCSAgICBQSE1fUGxhdGZvcm1DYXBzX05vbkFC TVN1cHBvcnRJblBQTGliKTsKKworCXBobV9jYXBfc2V0KGh3bWdyLT5wbGF0Zm9ybV9kZXNjcmlw dG9yLnBsYXRmb3JtQ2FwcywKKwkJCQkJICAgUEhNX1BsYXRmb3JtQ2Fwc19TY2xrRGVlcFNsZWVw KTsKKworCXBobV9jYXBfdW5zZXQoaHdtZ3ItPnBsYXRmb3JtX2Rlc2NyaXB0b3IucGxhdGZvcm1D YXBzLAorCQkJCQlQSE1fUGxhdGZvcm1DYXBzX0R5bmFtaWNNM0FyYml0ZXIpOworCisJY3pfaHdt Z3ItPm92ZXJyaWRlX2R5bmFtaWNfbWdwZyA9IDE7CisKKwlwaG1fY2FwX3NldChod21nci0+cGxh dGZvcm1fZGVzY3JpcHRvci5wbGF0Zm9ybUNhcHMsCisJCQkJICBQSE1fUGxhdGZvcm1DYXBzX0R5 bmFtaWNQYXRjaFBvd2VyU3RhdGUpOworCisJY3pfaHdtZ3ItPnRoZXJtYWxfYXV0b190aHJvdHRs aW5nX3RyZXNob2xkID0gMDsKKworCWN6X2h3bWdyLT50ZHJfY2xvY2sgPSAwOworCisJY3pfaHdt Z3ItPmRpc2FibGVfZ2Z4X3Bvd2VyX2dhdGluZ19pbl91dmQgPSAwOworCisJcGhtX2NhcF9zZXQo aHdtZ3ItPnBsYXRmb3JtX2Rlc2NyaXB0b3IucGxhdGZvcm1DYXBzLAorCQkJCQlQSE1fUGxhdGZv cm1DYXBzX0R5bmFtaWNVVkRTdGF0ZSk7CisKKwljel9od21nci0+aXNfbmJfZHBtX2VuYWJsZWRf YnlfZHJpdmVyID0gMTsKKworCXBobV9jYXBfc2V0KGh3bWdyLT5wbGF0Zm9ybV9kZXNjcmlwdG9y LnBsYXRmb3JtQ2FwcywKKwkJCQkgICBQSE1fUGxhdGZvcm1DYXBzX0Rpc2FibGVWb2x0YWdlSXNs YW5kKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdWludDMyX3QgY3pfY29udmVydF84Qml0 X2luZGV4X3RvX3ZvbHRhZ2UoCisJCQlzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB1aW50MTZfdCB2 b2x0YWdlKQoreworCXJldHVybiA2MjAwIC0gKHZvbHRhZ2UgKiAyNSk7Cit9CisKK3N0YXRpYyBp bnQgY3pfY29uc3RydWN0X21heF9wb3dlcl9saW1pdHNfdGFibGUoc3RydWN0IHBwX2h3bWdyICpo d21nciwKKwkJCXN0cnVjdCBwaG1fY2xvY2tfYW5kX3ZvbHRhZ2VfbGltaXRzICp0YWJsZSkKK3sK KwlzdHJ1Y3QgY3pfaHdtZ3IgKmN6X2h3bWdyID0gKHN0cnVjdCBjel9od21nciAqKWh3bWdyLT5i YWNrZW5kOworCXN0cnVjdCBjel9zeXNfaW5mbyAqc3lzX2luZm8gPSAmY3pfaHdtZ3ItPnN5c19p bmZvOworCXN0cnVjdCBwaG1fY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlICpkZXBfdGFi bGUgPQorCQkJCWh3bWdyLT5keW5fc3RhdGUudmRkY19kZXBlbmRlbmN5X29uX3NjbGs7CisKKwlp ZiAoZGVwX3RhYmxlLT5jb3VudCA+IDApIHsKKwkJdGFibGUtPnNjbGsgPSBkZXBfdGFibGUtPmVu dHJpZXNbZGVwX3RhYmxlLT5jb3VudC0xXS5jbGs7CisJCXRhYmxlLT52ZGRjID0gY3pfY29udmVy dF84Qml0X2luZGV4X3RvX3ZvbHRhZ2UoaHdtZ3IsCisJCSAgICh1aW50MTZfdClkZXBfdGFibGUt PmVudHJpZXNbZGVwX3RhYmxlLT5jb3VudC0xXS52KTsKKwl9CisJdGFibGUtPm1jbGsgPSBzeXNf aW5mby0+bmJwX21lbW9yeV9jbG9ja1swXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBj el9pbml0X2R5bmFtaWNfc3RhdGVfYWRqdXN0bWVudF9ydWxlX3NldHRpbmdzKAorCQkJc3RydWN0 IHBwX2h3bWdyICpod21nciwKKwkJCUFUT01fQ0xLX1ZPTFRfQ0FQQUJJTElUWSAqZGlzcF92b2x0 YWdlX3RhYmxlKQoreworCXVpbnQzMl90IHRhYmxlX3NpemUgPQorCQlzaXplb2Yoc3RydWN0IHBo bV9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUpICsKKwkJKDcgKiBzaXplb2Yoc3RydWN0 IHBobV9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lfcmVjb3JkKSk7CisKKwlzdHJ1Y3QgcGhtX2Ns b2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZSAqdGFibGVfY2xrX3ZsdCA9CisJCQkJCWt6YWxs b2ModGFibGVfc2l6ZSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoTlVMTCA9PSB0YWJsZV9jbGtfdmx0 KSB7CisJCXByaW50ayhLRVJOX0VSUiAiWyBwb3dlcnBsYXkgXSBDYW4gbm90IGFsbG9jYXRlIG1l bW9yeSFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl0YWJsZV9jbGtfdmx0LT5jb3Vu dCA9IDg7CisJdGFibGVfY2xrX3ZsdC0+ZW50cmllc1swXS5jbGsgPSBQUF9EQUxfUE9XRVJMRVZF TF8wOworCXRhYmxlX2Nsa192bHQtPmVudHJpZXNbMF0udiA9IDA7CisJdGFibGVfY2xrX3ZsdC0+ ZW50cmllc1sxXS5jbGsgPSBQUF9EQUxfUE9XRVJMRVZFTF8xOworCXRhYmxlX2Nsa192bHQtPmVu dHJpZXNbMV0udiA9IDE7CisJdGFibGVfY2xrX3ZsdC0+ZW50cmllc1syXS5jbGsgPSBQUF9EQUxf UE9XRVJMRVZFTF8yOworCXRhYmxlX2Nsa192bHQtPmVudHJpZXNbMl0udiA9IDI7CisJdGFibGVf Y2xrX3ZsdC0+ZW50cmllc1szXS5jbGsgPSBQUF9EQUxfUE9XRVJMRVZFTF8zOworCXRhYmxlX2Ns a192bHQtPmVudHJpZXNbM10udiA9IDM7CisJdGFibGVfY2xrX3ZsdC0+ZW50cmllc1s0XS5jbGsg PSBQUF9EQUxfUE9XRVJMRVZFTF80OworCXRhYmxlX2Nsa192bHQtPmVudHJpZXNbNF0udiA9IDQ7 CisJdGFibGVfY2xrX3ZsdC0+ZW50cmllc1s1XS5jbGsgPSBQUF9EQUxfUE9XRVJMRVZFTF81Owor CXRhYmxlX2Nsa192bHQtPmVudHJpZXNbNV0udiA9IDU7CisJdGFibGVfY2xrX3ZsdC0+ZW50cmll c1s2XS5jbGsgPSBQUF9EQUxfUE9XRVJMRVZFTF82OworCXRhYmxlX2Nsa192bHQtPmVudHJpZXNb Nl0udiA9IDY7CisJdGFibGVfY2xrX3ZsdC0+ZW50cmllc1s3XS5jbGsgPSBQUF9EQUxfUE9XRVJM RVZFTF83OworCXRhYmxlX2Nsa192bHQtPmVudHJpZXNbN10udiA9IDc7CisJaHdtZ3ItPmR5bl9z dGF0ZS52ZGRjX2RlcF9vbl9kYWxfcHdybCA9IHRhYmxlX2Nsa192bHQ7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBjel9nZXRfc3lzdGVtX2luZm9fZGF0YShzdHJ1Y3QgcHBfaHdtZ3Ig Kmh3bWdyKQoreworCXN0cnVjdCBjel9od21nciAqY3pfaHdtZ3IgPSAoc3RydWN0IGN6X2h3bWdy ICopaHdtZ3ItPmJhY2tlbmQ7CisJQVRPTV9JTlRFR1JBVEVEX1NZU1RFTV9JTkZPX1YxXzkgKmlu Zm8gPSBOVUxMOworCXVpbnQzMl90IGk7CisJaW50IHJlc3VsdCA9IDA7CisJdWludDhfdCBmcmV2 LCBjcmV2OworCXVpbnQxNl90IHNpemU7CisKKwlpbmZvID0gKEFUT01fSU5URUdSQVRFRF9TWVNU RU1fSU5GT19WMV85ICopIGNnc19hdG9tX2dldF9kYXRhX3RhYmxlKAorCQkJaHdtZ3ItPmRldmlj ZSwKKwkJCUdldEluZGV4SW50b01hc3RlclRhYmxlKERBVEEsIEludGVncmF0ZWRTeXN0ZW1JbmZv KSwKKwkJCSZzaXplLCAmZnJldiwgJmNyZXYpOworCisJaWYgKGNyZXYgIT0gOSkgeworCQlwcmlu dGsoS0VSTl9FUlIgIlsgcG93ZXJwbGF5IF0gVW5zdXBwb3J0ZWQgSUdQIHRhYmxlOiAlZCAlZFxu IiwgZnJldiwgY3Jldik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChpbmZvID09IE5V TEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJbIHBvd2VycGxheSBdIENvdWxkIG5vdCByZXRyaWV2 ZSB0aGUgSW50ZWdyYXRlZCBTeXN0ZW0gSW5mbyBUYWJsZSFcbiIpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwljel9od21nci0+c3lzX2luZm8uYm9vdHVwX3VtYV9jbG9jayA9CisJCQkJICAg bGUzMl90b19jcHUoaW5mby0+dWxCb290VXBVTUFDbG9jayk7CisKKwljel9od21nci0+c3lzX2lu Zm8uYm9vdHVwX2VuZ2luZV9jbG9jayA9CisJCQkJbGUzMl90b19jcHUoaW5mby0+dWxCb290VXBF bmdpbmVDbG9jayk7CisKKwljel9od21nci0+c3lzX2luZm8uZGVudGlzdF92Y29fZnJlcSA9CisJ CQkJICAgbGUzMl90b19jcHUoaW5mby0+dWxEZW50aXN0VkNPRnJlcSk7CisKKwljel9od21nci0+ c3lzX2luZm8uc3lzdGVtX2NvbmZpZyA9CisJCQkJICAgICBsZTMyX3RvX2NwdShpbmZvLT51bFN5 c3RlbUNvbmZpZyk7CisKKwljel9od21nci0+c3lzX2luZm8uYm9vdHVwX25iX3ZvbHRhZ2VfaW5k ZXggPQorCQkJCSAgbGUxNl90b19jcHUoaW5mby0+dXNCb290VXBOQlZvbHRhZ2UpOworCisJY3pf aHdtZ3ItPnN5c19pbmZvLmh0Y19oeXN0X2xtdCA9CisJCQkoaW5mby0+dWNIdGNIeXN0TG10ID09 IDApID8gNSA6IGluZm8tPnVjSHRjSHlzdExtdDsKKworCWN6X2h3bWdyLT5zeXNfaW5mby5odGNf dG1wX2xtdCA9CisJCQkoaW5mby0+dWNIdGNUbXBMbXQgPT0gMCkgPyAyMDMgOiBpbmZvLT51Y0h0 Y1RtcExtdDsKKworCWlmIChjel9od21nci0+c3lzX2luZm8uaHRjX3RtcF9sbXQgPD0KKwkJCWN6 X2h3bWdyLT5zeXNfaW5mby5odGNfaHlzdF9sbXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJbIHBv d2VycGxheSBdIFRoZSBodGNUbXBMbXQgc2hvdWxkIGJlIGxhcmdlciB0aGFuIGh0Y0h5c3RMbXQu XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY3pfaHdtZ3ItPnN5c19pbmZvLm5iX2Rw bV9lbmFibGUgPQorCQkJCWN6X2h3bWdyLT5lbmFibGVfbmJfcHNfcG9saWN5ICYmCisJCQkJKGxl MzJfdG9fY3B1KGluZm8tPnVsU3lzdGVtQ29uZmlnKSA+PiAzICYgMHgxKTsKKworCWZvciAoaSA9 IDA7IGkgPCBDWl9OVU1fTkJQU1RBVEVTOyBpKyspIHsKKwkJaWYgKGkgPCBDWl9OVU1fTkJQTUVN T1JZQ0xPQ0spIHsKKwkJCWN6X2h3bWdyLT5zeXNfaW5mby5uYnBfbWVtb3J5X2Nsb2NrW2ldID0K KwkJCSAgbGUzMl90b19jcHUoaW5mby0+dWxOYnBTdGF0ZU1lbWNsa0ZyZXFbaV0pOworCQl9CisJ CWN6X2h3bWdyLT5zeXNfaW5mby5uYnBfbl9jbG9ja1tpXSA9CisJCQkgICAgbGUzMl90b19jcHUo aW5mby0+dWxOYnBTdGF0ZU5DbGtGcmVxW2ldKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFY X0RJU1BMQVlfQ0xPQ0tfTEVWRUw7IGkrKykgeworCQljel9od21nci0+c3lzX2luZm8uZGlzcGxh eV9jbG9ja1tpXSA9CisJCQkJCWxlMzJfdG9fY3B1KGluZm8tPnNEaXNwQ2xrVm9sdGFnZU1hcHBp bmdbaV0udWxNYXhpbXVtU3VwcG9ydGVkQ0xLKTsKKwl9CisKKwkvKiBIZXJlIHVzZSA0IGxldmVs cywgbWFrZSBzdXJlIG5vdCBleGNlZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQ1pfTlVNX05CUFNU QVRFUzsgaSsrKSB7CisJCWN6X2h3bWdyLT5zeXNfaW5mby5uYnBfdm9sdGFnZV9pbmRleFtpXSA9 CisJCQkgICAgIGxlMTZfdG9fY3B1KGluZm8tPnVzTkJQU3RhdGVWb2x0YWdlW2ldKTsKKwl9CisK KwlpZiAoIWN6X2h3bWdyLT5zeXNfaW5mby5uYl9kcG1fZW5hYmxlKSB7CisJCWZvciAoaSA9IDE7 IGkgPCBDWl9OVU1fTkJQU1RBVEVTOyBpKyspIHsKKwkJCWlmIChpIDwgQ1pfTlVNX05CUE1FTU9S WUNMT0NLKSB7CisJCQkJY3pfaHdtZ3ItPnN5c19pbmZvLm5icF9tZW1vcnlfY2xvY2tbaV0gPQor CQkJCSAgICBjel9od21nci0+c3lzX2luZm8ubmJwX21lbW9yeV9jbG9ja1swXTsKKwkJCX0KKwkJ CWN6X2h3bWdyLT5zeXNfaW5mby5uYnBfbl9jbG9ja1tpXSA9CisJCQkJICAgIGN6X2h3bWdyLT5z eXNfaW5mby5uYnBfbl9jbG9ja1swXTsKKwkJCWN6X2h3bWdyLT5zeXNfaW5mby5uYnBfdm9sdGFn ZV9pbmRleFtpXSA9CisJCQkJICAgIGN6X2h3bWdyLT5zeXNfaW5mby5uYnBfdm9sdGFnZV9pbmRl eFswXTsKKwkJfQorCX0KKworCWlmIChsZTMyX3RvX2NwdShpbmZvLT51bEdQVUNhcEluZm8pICYK KwkJU1lTX0lORk9fR1BVQ0FQU19fRU5BQkVMX0RGU19CWVBBU1MpIHsKKwkJcGhtX2NhcF9zZXQo aHdtZ3ItPnBsYXRmb3JtX2Rlc2NyaXB0b3IucGxhdGZvcm1DYXBzLAorCQkJCSAgICBQSE1fUGxh dGZvcm1DYXBzX0VuYWJsZURGU0J5cGFzcyk7CisJfQorCisJY3pfaHdtZ3ItPnN5c19pbmZvLnVt YV9jaGFubmVsX251bWJlciA9IGluZm8tPnVjVU1BQ2hhbm5lbE51bWJlcjsKKworCWN6X2NvbnN0 cnVjdF9tYXhfcG93ZXJfbGltaXRzX3RhYmxlIChod21nciwKKwkJCQkgICAgJmh3bWdyLT5keW5f c3RhdGUubWF4X2Nsb2NrX3ZvbHRhZ2Vfb25fYWMpOworCisJY3pfaW5pdF9keW5hbWljX3N0YXRl X2FkanVzdG1lbnRfcnVsZV9zZXR0aW5ncyhod21nciwKKwkJCQkgICAgJmluZm8tPnNESVNQQ0xL X1ZvbHRhZ2VbMF0pOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBjel9jb25z dHJ1Y3RfYm9vdF9zdGF0ZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQoreworCXN0cnVjdCBjel9o d21nciAqY3pfaHdtZ3IgPSAoc3RydWN0IGN6X2h3bWdyICopKGh3bWdyLT5iYWNrZW5kKTsKKwor CWN6X2h3bWdyLT5ib290X3Bvd2VyX2xldmVsLmVuZ2luZUNsb2NrID0KKwkJCQljel9od21nci0+ c3lzX2luZm8uYm9vdHVwX2VuZ2luZV9jbG9jazsKKworCWN6X2h3bWdyLT5ib290X3Bvd2VyX2xl dmVsLnZkZGNJbmRleCA9CisJCQkodWludDhfdCljel9od21nci0+c3lzX2luZm8uYm9vdHVwX25i X3ZvbHRhZ2VfaW5kZXg7CisKKwljel9od21nci0+Ym9vdF9wb3dlcl9sZXZlbC5kc0RpdmlkZXJJ bmRleCA9IDA7CisKKwljel9od21nci0+Ym9vdF9wb3dlcl9sZXZlbC5zc0RpdmlkZXJJbmRleCA9 IDA7CisKKwljel9od21nci0+Ym9vdF9wb3dlcl9sZXZlbC5hbGxvd0duYlNsb3cgPSAxOworCisJ Y3pfaHdtZ3ItPmJvb3RfcG93ZXJfbGV2ZWwuZm9yY2VOQlBzdGF0ZSA9IDA7CisKKwljel9od21n ci0+Ym9vdF9wb3dlcl9sZXZlbC5oeXN0ZXJlc2lzX3VwID0gMDsKKworCWN6X2h3bWdyLT5ib290 X3Bvd2VyX2xldmVsLm51bVNJTURUb1Bvd2VyRG93biA9IDA7CisKKwljel9od21nci0+Ym9vdF9w b3dlcl9sZXZlbC5kaXNwbGF5X3dtID0gMDsKKworCWN6X2h3bWdyLT5ib290X3Bvd2VyX2xldmVs LnZjZV93bSA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjel90Zl9yZXNldF9h Y3RpdmVfcHJvY2Vzc19tYXNrKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIHZvaWQgKmlucHV0LAor CQkJCQl2b2lkICpvdXRwdXQsIHZvaWQgKnN0b3JhZ2UsIGludCByZXN1bHQpCit7CisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgY3pfdGZfdXBsb2FkX3BwdGFibGVfdG9fc211KHN0cnVjdCBw cF9od21nciAqaHdtZ3IsIHZvaWQgKmlucHV0LAorCQkJCQl2b2lkICpvdXRwdXQsIHZvaWQgKnN0 b3JhZ2UsIGludCByZXN1bHQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3pfdGZf aW5pdF9zY2xrX2xpbWl0KHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIHZvaWQgKmlucHV0LAorCQkJ CSB2b2lkICpvdXRwdXQsIHZvaWQgKnN0b3JhZ2UsIGludCByZXN1bHQpCit7CisJc3RydWN0IGN6 X2h3bWdyICpjel9od21nciA9IChzdHJ1Y3QgY3pfaHdtZ3IgKikoaHdtZ3ItPmJhY2tlbmQpOwor CXN0cnVjdCBwaG1fY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlICp0YWJsZSA9CisJCQkJ CWh3bWdyLT5keW5fc3RhdGUudmRkY19kZXBlbmRlbmN5X29uX3NjbGs7CisJdW5zaWduZWQgbG9u ZyBjbG9jayA9IDAsIGxldmVsOworCisJaWYgKE5VTEwgPT0gdGFibGUgJiYgdGFibGUtPmNvdW50 IDw9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJY3pfaHdtZ3ItPnNjbGtfZHBtLnNvZnRfbWlu X2NsayA9IHRhYmxlLT5lbnRyaWVzWzBdLmNsazsKKwljel9od21nci0+c2Nsa19kcG0uaGFyZF9t aW5fY2xrID0gdGFibGUtPmVudHJpZXNbMF0uY2xrOworCisJbGV2ZWwgPSBjel9nZXRfbWF4X3Nj bGtfbGV2ZWwoaHdtZ3IpIC0gMTsKKworCWlmIChsZXZlbCA8IHRhYmxlLT5jb3VudCkKKwkJY2xv Y2sgPSB0YWJsZS0+ZW50cmllc1tsZXZlbF0uY2xrOworCWVsc2UKKwkJY2xvY2sgPSB0YWJsZS0+ ZW50cmllc1t0YWJsZS0+Y291bnQgLSAxXS5jbGs7CisKKwljel9od21nci0+c2Nsa19kcG0uc29m dF9tYXhfY2xrID0gY2xvY2s7CisJY3pfaHdtZ3ItPnNjbGtfZHBtLmhhcmRfbWF4X2NsayA9IGNs b2NrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3pfdGZfaW5pdF91dmRfbGltaXQo c3RydWN0IHBwX2h3bWdyICpod21nciwgdm9pZCAqaW5wdXQsCisJCQkJdm9pZCAqb3V0cHV0LCB2 b2lkICpzdG9yYWdlLCBpbnQgcmVzdWx0KQoreworCXN0cnVjdCBjel9od21nciAqY3pfaHdtZ3Ig PSAoc3RydWN0IGN6X2h3bWdyICopKGh3bWdyLT5iYWNrZW5kKTsKKwlzdHJ1Y3QgcGhtX3V2ZF9j bG9ja192b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUgKnRhYmxlID0KKwkJCQlod21nci0+ZHluX3N0 YXRlLnV2ZF9jbG9jbF92b2x0YWdlX2RlcGVuZGVuY3lfdGFibGU7CisJdW5zaWduZWQgbG9uZyBj bG9jayA9IDAsIGxldmVsOworCisJaWYgKE5VTEwgPT0gdGFibGUgJiYgdGFibGUtPmNvdW50IDw9 IDApCisJCXJldHVybiAtRUlOVkFMOworCisJY3pfaHdtZ3ItPnV2ZF9kcG0uc29mdF9taW5fY2xr ID0gMDsKKwljel9od21nci0+dXZkX2RwbS5oYXJkX21pbl9jbGsgPSAwOworCisJc211bV9zZW5k X21zZ190b19zbWMoaHdtZ3ItPnNtdW1nciwgUFBTTUNfTVNHX0dldE1heFV2ZExldmVsKTsKKwls ZXZlbCA9IHNtdW1fZ2V0X2FyZ3VtZW50KGh3bWdyLT5zbXVtZ3IpOworCisJaWYgKGxldmVsIDwg dGFibGUtPmNvdW50KQorCQljbG9jayA9IHRhYmxlLT5lbnRyaWVzW2xldmVsXS52Y2xrOworCWVs c2UKKwkJY2xvY2sgPSB0YWJsZS0+ZW50cmllc1t0YWJsZS0+Y291bnQgLSAxXS52Y2xrOworCisJ Y3pfaHdtZ3ItPnV2ZF9kcG0uc29mdF9tYXhfY2xrID0gY2xvY2s7CisJY3pfaHdtZ3ItPnV2ZF9k cG0uaGFyZF9tYXhfY2xrID0gY2xvY2s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBj el90Zl9pbml0X3ZjZV9saW1pdChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB2b2lkICppbnB1dCwK KwkJCQl2b2lkICpvdXRwdXQsIHZvaWQgKnN0b3JhZ2UsIGludCByZXN1bHQpCit7CisJc3RydWN0 IGN6X2h3bWdyICpjel9od21nciA9IChzdHJ1Y3QgY3pfaHdtZ3IgKikoaHdtZ3ItPmJhY2tlbmQp OworCXN0cnVjdCBwaG1fdmNlX2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZSAqdGFibGUg PQorCQkJCWh3bWdyLT5keW5fc3RhdGUudmNlX2Nsb2NsX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJs ZTsKKwl1bnNpZ25lZCBsb25nIGNsb2NrID0gMCwgbGV2ZWw7CisKKwlpZiAoTlVMTCA9PSB0YWJs ZSAmJiB0YWJsZS0+Y291bnQgPD0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljel9od21nci0+ dmNlX2RwbS5zb2Z0X21pbl9jbGsgPSAwOworCWN6X2h3bWdyLT52Y2VfZHBtLmhhcmRfbWluX2Ns ayA9IDA7CisKKwlzbXVtX3NlbmRfbXNnX3RvX3NtYyhod21nci0+c211bWdyLCBQUFNNQ19NU0df R2V0TWF4RWNsa0xldmVsKTsKKwlsZXZlbCA9IHNtdW1fZ2V0X2FyZ3VtZW50KGh3bWdyLT5zbXVt Z3IpOworCisJaWYgKGxldmVsIDwgdGFibGUtPmNvdW50KQorCQljbG9jayA9IHRhYmxlLT5lbnRy aWVzW2xldmVsXS5lY2NsazsKKwllbHNlCisJCWNsb2NrID0gdGFibGUtPmVudHJpZXNbdGFibGUt PmNvdW50IC0gMV0uZWNjbGs7CisKKwljel9od21nci0+dmNlX2RwbS5zb2Z0X21heF9jbGsgPSBj bG9jazsKKwljel9od21nci0+dmNlX2RwbS5oYXJkX21heF9jbGsgPSBjbG9jazsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IGN6X3RmX2luaXRfYWNwX2xpbWl0KHN0cnVjdCBwcF9od21n ciAqaHdtZ3IsIHZvaWQgKmlucHV0LAorCQkJCXZvaWQgKm91dHB1dCwgdm9pZCAqc3RvcmFnZSwg aW50IHJlc3VsdCkKK3sKKwlzdHJ1Y3QgY3pfaHdtZ3IgKmN6X2h3bWdyID0gKHN0cnVjdCBjel9o d21nciAqKShod21nci0+YmFja2VuZCk7CisJc3RydWN0IHBobV9hY3BfY2xvY2tfdm9sdGFnZV9k ZXBlbmRlbmN5X3RhYmxlICp0YWJsZSA9CisJCQkJaHdtZ3ItPmR5bl9zdGF0ZS5hY3BfY2xvY2tf dm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlOworCXVuc2lnbmVkIGxvbmcgY2xvY2sgPSAwLCBsZXZl bDsKKworCWlmIChOVUxMID09IHRhYmxlICYmIHRhYmxlLT5jb3VudCA8PSAwKQorCQlyZXR1cm4g LUVJTlZBTDsKKworCWN6X2h3bWdyLT5hY3BfZHBtLnNvZnRfbWluX2NsayA9IDA7CisJY3pfaHdt Z3ItPmFjcF9kcG0uaGFyZF9taW5fY2xrID0gMDsKKworCXNtdW1fc2VuZF9tc2dfdG9fc21jKGh3 bWdyLT5zbXVtZ3IsIFBQU01DX01TR19HZXRNYXhBY2xrTGV2ZWwpOworCWxldmVsID0gc211bV9n ZXRfYXJndW1lbnQoaHdtZ3ItPnNtdW1ncik7CisKKwlpZiAobGV2ZWwgPCB0YWJsZS0+Y291bnQp CisJCWNsb2NrID0gdGFibGUtPmVudHJpZXNbbGV2ZWxdLmFjcGNsazsKKwllbHNlCisJCWNsb2Nr ID0gdGFibGUtPmVudHJpZXNbdGFibGUtPmNvdW50IC0gMV0uYWNwY2xrOworCisJY3pfaHdtZ3It PmFjcF9kcG0uc29mdF9tYXhfY2xrID0gY2xvY2s7CisJY3pfaHdtZ3ItPmFjcF9kcG0uaGFyZF9t YXhfY2xrID0gY2xvY2s7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3pfdGZfaW5pdF9w b3dlcl9nYXRlX3N0YXRlKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIHZvaWQgKmlucHV0LAorCQkJ CXZvaWQgKm91dHB1dCwgdm9pZCAqc3RvcmFnZSwgaW50IHJlc3VsdCkKK3sKKwlzdHJ1Y3QgY3pf aHdtZ3IgKmN6X2h3bWdyID0gKHN0cnVjdCBjel9od21nciAqKShod21nci0+YmFja2VuZCk7CisK Kwljel9od21nci0+dXZkX3Bvd2VyX2dhdGVkID0gZmFsc2U7CisJY3pfaHdtZ3ItPnZjZV9wb3dl cl9nYXRlZCA9IGZhbHNlOworCWN6X2h3bWdyLT5zYW11X3Bvd2VyX2dhdGVkID0gZmFsc2U7CisJ Y3pfaHdtZ3ItPmFjcF9wb3dlcl9nYXRlZCA9IGZhbHNlOworCWN6X2h3bWdyLT5wZ2FjcGluaXQg PSB0cnVlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3pfdGZfaW5pdF9zY2xrX3Ro cmVzaG9sZChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB2b2lkICppbnB1dCwKKwkJCQl2b2lkICpv dXRwdXQsIHZvaWQgKnN0b3JhZ2UsIGludCByZXN1bHQpCit7CisJc3RydWN0IGN6X2h3bWdyICpj el9od21nciA9IChzdHJ1Y3QgY3pfaHdtZ3IgKikoaHdtZ3ItPmJhY2tlbmQpOworCisJY3pfaHdt Z3ItPmxvd19zY2xrX2ludGVycnVwdF90aHJlc2hvbGQgPSAwOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBzdHJ1Y3QgcGhtX21hc3Rlcl90YWJsZV9pdGVtIGN6X3NldHVwX2FzaWNfbGlzdFtd ID0geworCXtOVUxMLCBjel90Zl9yZXNldF9hY3RpdmVfcHJvY2Vzc19tYXNrfSwKKwl7TlVMTCwg Y3pfdGZfdXBsb2FkX3BwdGFibGVfdG9fc211fSwKKwl7TlVMTCwgY3pfdGZfaW5pdF9zY2xrX2xp bWl0fSwKKwl7TlVMTCwgY3pfdGZfaW5pdF91dmRfbGltaXR9LAorCXtOVUxMLCBjel90Zl9pbml0 X3ZjZV9saW1pdH0sCisJe05VTEwsIGN6X3RmX2luaXRfYWNwX2xpbWl0fSwKKwl7TlVMTCwgY3pf dGZfaW5pdF9wb3dlcl9nYXRlX3N0YXRlfSwKKwl7TlVMTCwgY3pfdGZfaW5pdF9zY2xrX3RocmVz aG9sZH0sCisJe05VTEwsIE5VTEx9Cit9OworCitzdGF0aWMgc3RydWN0IHBobV9tYXN0ZXJfdGFi bGVfaGVhZGVyIGN6X3NldHVwX2FzaWNfbWFzdGVyID0geworCTAsCisJUEhNX01hc3RlclRhYmxl RmxhZ19Ob25lLAorCWN6X3NldHVwX2FzaWNfbGlzdAorfTsKKworc3RhdGljIGludCBjel90Zl9w cm9ncmFtX3ZvdGluZ19jbGllbnRzKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIHZvaWQgKmlucHV0 LAorCQkJCXZvaWQgKm91dHB1dCwgdm9pZCAqc3RvcmFnZSwgaW50IHJlc3VsdCkKK3sKKwlQSE1D Wl9XUklURV9TTUNfUkVHSVNURVIoaHdtZ3ItPmRldmljZSwgQ0dfRlJFUV9UUkFOX1ZPVElOR18w LAorCQkJCVBQQ1pfVk9USU5HUklHSFRTQ0xJRU5UU19ERkxUMCk7CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgY3pfdGZfc3RhcnRfZHBtKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIHZvaWQg KmlucHV0LCB2b2lkICpvdXRwdXQsCisJCQkgICB2b2lkICpzdG9yYWdlLCBpbnQgcmVzdWx0KQor eworCWludCByZXMgPSAweGZmOworCXN0cnVjdCBjel9od21nciAqY3pfaHdtZ3IgPSAoc3RydWN0 IGN6X2h3bWdyICopKGh3bWdyLT5iYWNrZW5kKTsKKwl1bnNpZ25lZCBsb25nIGRwbV9mZWF0dXJl cyA9IDA7CisKKwljel9od21nci0+ZHBtX2ZsYWdzIHw9IERQTUZsYWdzX1NDTEtfRW5hYmxlZDsK KwlkcG1fZmVhdHVyZXMgfD0gU0NMS19EUE1fTUFTSzsKKworCXJlcyA9IHNtdW1fc2VuZF9tc2df dG9fc21jX3dpdGhfcGFyYW1ldGVyKGh3bWdyLT5zbXVtZ3IsCisJCQkJUFBTTUNfTVNHX0VuYWJs ZUFsbFNtdUZlYXR1cmVzLAorCQkJCWRwbV9mZWF0dXJlcyk7CisKKwlyZXR1cm4gcmVzOworfQor CitzdGF0aWMgaW50IGN6X3RmX3Byb2dyYW1fYm9vdHVwX3N0YXRlKHN0cnVjdCBwcF9od21nciAq aHdtZ3IsIHZvaWQgKmlucHV0LAorCQkJCXZvaWQgKm91dHB1dCwgdm9pZCAqc3RvcmFnZSwgaW50 IHJlc3VsdCkKK3sKKwlzdHJ1Y3QgY3pfaHdtZ3IgKmN6X2h3bWdyID0gKHN0cnVjdCBjel9od21n ciAqKShod21nci0+YmFja2VuZCk7CisKKwljel9od21nci0+c2Nsa19kcG0uc29mdF9taW5fY2xr ID0gY3pfaHdtZ3ItPnN5c19pbmZvLmJvb3R1cF9lbmdpbmVfY2xvY2s7CisJY3pfaHdtZ3ItPnNj bGtfZHBtLnNvZnRfbWF4X2NsayA9IGN6X2h3bWdyLT5zeXNfaW5mby5ib290dXBfZW5naW5lX2Ns b2NrOworCisJc211bV9zZW5kX21zZ190b19zbWNfd2l0aF9wYXJhbWV0ZXIoaHdtZ3ItPnNtdW1n ciwKKwkJCQlQUFNNQ19NU0dfU2V0U2Nsa1NvZnRNaW4sCisJCQkJY3pfZ2V0X3NjbGtfbGV2ZWwo aHdtZ3IsCisJCQkJY3pfaHdtZ3ItPnNjbGtfZHBtLnNvZnRfbWluX2NsaywKKwkJCQlQUFNNQ19N U0dfU2V0U2Nsa1NvZnRNaW4pKTsKKworCXNtdW1fc2VuZF9tc2dfdG9fc21jX3dpdGhfcGFyYW1l dGVyKGh3bWdyLT5zbXVtZ3IsCisJCQkJUFBTTUNfTVNHX1NldFNjbGtTb2Z0TWF4LAorCQkJCWN6 X2dldF9zY2xrX2xldmVsKGh3bWdyLAorCQkJCWN6X2h3bWdyLT5zY2xrX2RwbS5zb2Z0X21heF9j bGssCisJCQkJUFBTTUNfTVNHX1NldFNjbGtTb2Z0TWF4KSk7CisKKwlyZXR1cm4gMDsKK30KKwor aW50IGN6X3RmX3Jlc2V0X2FjcF9ib290X2xldmVsKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIHZv aWQgKmlucHV0LAorCQkJCXZvaWQgKm91dHB1dCwgdm9pZCAqc3RvcmFnZSwgaW50IHJlc3VsdCkK K3sKKwlzdHJ1Y3QgY3pfaHdtZ3IgKmN6X2h3bWdyID0gKHN0cnVjdCBjel9od21nciAqKShod21n ci0+YmFja2VuZCk7CisKKwljel9od21nci0+YWNwX2Jvb3RfbGV2ZWwgPSAweGZmOworCXJldHVy biAwOworfQorCitzdGF0aWMgYm9vbCBjel9kcG1fY2hlY2tfc211X2ZlYXR1cmVzKHN0cnVjdCBw cF9od21nciAqaHdtZ3IsCisJCQkJdW5zaWduZWQgbG9uZyBjaGVja19mZWF0dXJlKQoreworCWlu dCByZXN1bHQ7CisJdW5zaWduZWQgbG9uZyBmZWF0dXJlczsKKworCXJlc3VsdCA9IHNtdW1fc2Vu ZF9tc2dfdG9fc21jX3dpdGhfcGFyYW1ldGVyKGh3bWdyLT5zbXVtZ3IsIFBQU01DX01TR19HZXRG ZWF0dXJlU3RhdHVzLCAwKTsKKwlpZiAocmVzdWx0ID09IDApIHsKKwkJZmVhdHVyZXMgPSBzbXVt X2dldF9hcmd1bWVudChod21nci0+c211bWdyKTsKKwkJaWYgKGZlYXR1cmVzICYgY2hlY2tfZmVh dHVyZSkKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRp YyBpbnQgY3pfdGZfY2hlY2tfZm9yX2RwbV9kaXNhYmxlZChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdy LCB2b2lkICppbnB1dCwKKwkJCQl2b2lkICpvdXRwdXQsIHZvaWQgKnN0b3JhZ2UsIGludCByZXN1 bHQpCit7CisJaWYgKGN6X2RwbV9jaGVja19zbXVfZmVhdHVyZXMoaHdtZ3IsIFNNVV9FbmFibGVk RmVhdHVyZVNjb3JlYm9hcmRfU2Nsa0RwbU9uKSkKKwkJcmV0dXJuIFBQX1Jlc3VsdF9UYWJsZUlt bWVkaWF0ZUV4aXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3pfdGZfZW5hYmxlX2Rp ZHQoc3RydWN0IHBwX2h3bWdyICpod21nciwgdm9pZCAqaW5wdXQsCisJCQkJdm9pZCAqb3V0cHV0 LCB2b2lkICpzdG9yYWdlLCBpbnQgcmVzdWx0KQoreworCS8qIFRPIERPICovCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgY3pfdGZfY2hlY2tfZm9yX2RwbV9lbmFibGVkKHN0cnVjdCBwcF9o d21nciAqaHdtZ3IsCisJCQkJCQl2b2lkICppbnB1dCwgdm9pZCAqb3V0cHV0LAorCQkJCQkJdm9p ZCAqc3RvcmFnZSwgaW50IHJlc3VsdCkKK3sKKwlpZiAoIWN6X2RwbV9jaGVja19zbXVfZmVhdHVy ZXMoaHdtZ3IsCisJCQkgICAgIFNNVV9FbmFibGVkRmVhdHVyZVNjb3JlYm9hcmRfU2Nsa0RwbU9u KSkKKwkJcmV0dXJuIFBQX1Jlc3VsdF9UYWJsZUltbWVkaWF0ZUV4aXQ7CisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBzdHJ1Y3QgcGhtX21hc3Rlcl90YWJsZV9pdGVtIGN6X2Rpc2FibGVfZHBtX2xp c3RbXSA9IHsKKwl7IE5VTEwsIGN6X3RmX2NoZWNrX2Zvcl9kcG1fZW5hYmxlZH0sCisJe05VTEws IE5VTEx9LAorfTsKKworCitzdGF0aWMgc3RydWN0IHBobV9tYXN0ZXJfdGFibGVfaGVhZGVyIGN6 X2Rpc2FibGVfZHBtX21hc3RlciA9IHsKKwkwLAorCVBITV9NYXN0ZXJUYWJsZUZsYWdfTm9uZSwK Kwljel9kaXNhYmxlX2RwbV9saXN0Cit9OworCitzdGF0aWMgc3RydWN0IHBobV9tYXN0ZXJfdGFi bGVfaXRlbSBjel9lbmFibGVfZHBtX2xpc3RbXSA9IHsKKwl7IE5VTEwsIGN6X3RmX2NoZWNrX2Zv cl9kcG1fZGlzYWJsZWQgfSwKKwl7IE5VTEwsIGN6X3RmX3Byb2dyYW1fdm90aW5nX2NsaWVudHMg fSwKKwl7IE5VTEwsIGN6X3RmX3N0YXJ0X2RwbX0sCisJeyBOVUxMLCBjel90Zl9wcm9ncmFtX2Jv b3R1cF9zdGF0ZX0sCisJeyBOVUxMLCBjel90Zl9lbmFibGVfZGlkdCB9LAorCXsgTlVMTCwgY3pf dGZfcmVzZXRfYWNwX2Jvb3RfbGV2ZWwgfSwKKwl7TlVMTCwgTlVMTH0sCit9OworCitzdGF0aWMg c3RydWN0IHBobV9tYXN0ZXJfdGFibGVfaGVhZGVyIGN6X2VuYWJsZV9kcG1fbWFzdGVyID0gewor CTAsCisJUEhNX01hc3RlclRhYmxlRmxhZ19Ob25lLAorCWN6X2VuYWJsZV9kcG1fbGlzdAorfTsK Kworc3RhdGljIGludCBjel9od21ncl9iYWNrZW5kX2luaXQoc3RydWN0IHBwX2h3bWdyICpod21n cikKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKworCXJlc3VsdCA9IGN6X2luaXRpYWxpemVfZHBtX2Rl ZmF1bHRzKGh3bWdyKTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJb IHBvd2VycGxheSBdIGN6X2luaXRpYWxpemVfZHBtX2RlZmF1bHRzIGZhaWxlZFxuIik7CisJCXJl dHVybiByZXN1bHQ7CisJfQorCisJcmVzdWx0ID0gY3pfZ2V0X3N5c3RlbV9pbmZvX2RhdGEoaHdt Z3IpOworCWlmIChyZXN1bHQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIlsgcG93ZXJwbGF5 IF0gY3pfZ2V0X3N5c3RlbV9pbmZvX2RhdGEgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJlc3VsdDsK Kwl9CisKKwljel9jb25zdHJ1Y3RfYm9vdF9zdGF0ZShod21ncik7CisKKwlyZXN1bHQgPSBwaG1f Y29uc3RydWN0X3RhYmxlKGh3bWdyLCAmY3pfc2V0dXBfYXNpY19tYXN0ZXIsCisJCQkJJihod21n ci0+c2V0dXBfYXNpYykpOworCWlmIChyZXN1bHQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIg IlsgcG93ZXJwbGF5IF0gRmFpbCB0byBjb25zdHJ1Y3Qgc2V0dXAgQVNJQ1xuIik7CisJCXJldHVy biByZXN1bHQ7CisJfQorCisJcmVzdWx0ID0gcGhtX2NvbnN0cnVjdF90YWJsZShod21nciwgJmN6 X2Rpc2FibGVfZHBtX21hc3RlciwKKwkJCQkmKGh3bWdyLT5kaXNhYmxlX2R5bmFtaWNfc3RhdGVf bWFuYWdlbWVudCkpOworCisJcmVzdWx0ID0gcGhtX2NvbnN0cnVjdF90YWJsZShod21nciwgJmN6 X2VuYWJsZV9kcG1fbWFzdGVyLAorCQkJCSYoaHdtZ3ItPmVuYWJsZV9keW5hbWljX3N0YXRlX21h bmFnZW1lbnQpKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgY3pfaHdtZ3Jf YmFja2VuZF9maW5pKHN0cnVjdCBwcF9od21nciAqaHdtZ3IpCit7CisJaWYgKGh3bWdyICE9IE5V TEwgfHwgaHdtZ3ItPmJhY2tlbmQgIT0gTlVMTCkgeworCQlrZnJlZShod21nci0+YmFja2VuZCk7 CisJCWtmcmVlKGh3bWdyKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBjel9waG1fZm9yY2Vf ZHBtX2hpZ2hlc3Qoc3RydWN0IHBwX2h3bWdyICpod21ncikKK3sKKwlzdHJ1Y3QgY3pfaHdtZ3Ig KmN6X2h3bWdyID0gKHN0cnVjdCBjel9od21nciAqKShod21nci0+YmFja2VuZCk7CisKKwlpZiAo Y3pfaHdtZ3ItPnNjbGtfZHBtLnNvZnRfbWluX2NsayAhPQorCQkJCWN6X2h3bWdyLT5zY2xrX2Rw bS5zb2Z0X21heF9jbGspCisJCXNtdW1fc2VuZF9tc2dfdG9fc21jX3dpdGhfcGFyYW1ldGVyKGh3 bWdyLT5zbXVtZ3IsCisJCQkJCQlQUFNNQ19NU0dfU2V0U2Nsa1NvZnRNaW4sCisJCQkJCQljel9n ZXRfc2Nsa19sZXZlbChod21nciwKKwkJCQkJCWN6X2h3bWdyLT5zY2xrX2RwbS5zb2Z0X21heF9j bGssCisJCQkJCQlQUFNNQ19NU0dfU2V0U2Nsa1NvZnRNaW4pKTsKKwlyZXR1cm4gMDsKK30KKwor aW50IGN6X3BobV91bmZvcmNlX2RwbV9sZXZlbHMoc3RydWN0IHBwX2h3bWdyICpod21ncikKK3sK KwlzdHJ1Y3QgY3pfaHdtZ3IgKmN6X2h3bWdyID0gKHN0cnVjdCBjel9od21nciAqKShod21nci0+ YmFja2VuZCk7CisJc3RydWN0IHBobV9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUgKnRh YmxlID0KKwkJCQlod21nci0+ZHluX3N0YXRlLnZkZGNfZGVwZW5kZW5jeV9vbl9zY2xrOworCXVu c2lnbmVkIGxvbmcgY2xvY2sgPSAwLCBsZXZlbDsKKworCWlmIChOVUxMID09IHRhYmxlICYmIHRh YmxlLT5jb3VudCA8PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWN6X2h3bWdyLT5zY2xrX2Rw bS5zb2Z0X21pbl9jbGsgPSB0YWJsZS0+ZW50cmllc1swXS5jbGs7CisJY3pfaHdtZ3ItPnNjbGtf ZHBtLmhhcmRfbWluX2NsayA9IHRhYmxlLT5lbnRyaWVzWzBdLmNsazsKKworCWxldmVsID0gY3pf Z2V0X21heF9zY2xrX2xldmVsKGh3bWdyKSAtIDE7CisKKwlpZiAobGV2ZWwgPCB0YWJsZS0+Y291 bnQpCisJCWNsb2NrID0gdGFibGUtPmVudHJpZXNbbGV2ZWxdLmNsazsKKwllbHNlCisJCWNsb2Nr ID0gdGFibGUtPmVudHJpZXNbdGFibGUtPmNvdW50IC0gMV0uY2xrOworCisJY3pfaHdtZ3ItPnNj bGtfZHBtLnNvZnRfbWF4X2NsayA9IGNsb2NrOworCWN6X2h3bWdyLT5zY2xrX2RwbS5oYXJkX21h eF9jbGsgPSBjbG9jazsKKworCXNtdW1fc2VuZF9tc2dfdG9fc21jX3dpdGhfcGFyYW1ldGVyKGh3 bWdyLT5zbXVtZ3IsCisJCQkJUFBTTUNfTVNHX1NldFNjbGtTb2Z0TWluLAorCQkJCWN6X2dldF9z Y2xrX2xldmVsKGh3bWdyLAorCQkJCWN6X2h3bWdyLT5zY2xrX2RwbS5zb2Z0X21pbl9jbGssCisJ CQkJUFBTTUNfTVNHX1NldFNjbGtTb2Z0TWluKSk7CisKKwlzbXVtX3NlbmRfbXNnX3RvX3NtY193 aXRoX3BhcmFtZXRlcihod21nci0+c211bWdyLAorCQkJCVBQU01DX01TR19TZXRTY2xrU29mdE1h eCwKKwkJCQljel9nZXRfc2Nsa19sZXZlbChod21nciwKKwkJCQljel9od21nci0+c2Nsa19kcG0u c29mdF9tYXhfY2xrLAorCQkJCVBQU01DX01TR19TZXRTY2xrU29mdE1heCkpOworCisJcmV0dXJu IDA7Cit9CisKK2ludCBjel9waG1fZm9yY2VfZHBtX2xvd2VzdChzdHJ1Y3QgcHBfaHdtZ3IgKmh3 bWdyKQoreworCXN0cnVjdCBjel9od21nciAqY3pfaHdtZ3IgPSAoc3RydWN0IGN6X2h3bWdyICop KGh3bWdyLT5iYWNrZW5kKTsKKworCWlmIChjel9od21nci0+c2Nsa19kcG0uc29mdF9taW5fY2xr ICE9CisJCQkJY3pfaHdtZ3ItPnNjbGtfZHBtLnNvZnRfbWF4X2NsaykgeworCQljel9od21nci0+ c2Nsa19kcG0uc29mdF9tYXhfY2xrID0KKwkJCWN6X2h3bWdyLT5zY2xrX2RwbS5zb2Z0X21pbl9j bGs7CisKKwkJc211bV9zZW5kX21zZ190b19zbWNfd2l0aF9wYXJhbWV0ZXIoaHdtZ3ItPnNtdW1n ciwKKwkJCQlQUFNNQ19NU0dfU2V0U2Nsa1NvZnRNYXgsCisJCQkJY3pfZ2V0X3NjbGtfbGV2ZWwo aHdtZ3IsCisJCQkJY3pfaHdtZ3ItPnNjbGtfZHBtLnNvZnRfbWF4X2NsaywKKwkJCQlQUFNNQ19N U0dfU2V0U2Nsa1NvZnRNYXgpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBj el9kcG1fZm9yY2VfZHBtX2xldmVsKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCisJCQkJZW51bSBh bWRfZHBtX2ZvcmNlZF9sZXZlbCBsZXZlbCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAo bGV2ZWwpIHsKKwljYXNlIEFNRF9EUE1fRk9SQ0VEX0xFVkVMX0hJR0g6CisJCXJldCA9IGN6X3Bo bV9mb3JjZV9kcG1faGlnaGVzdChod21ncik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0Owor CQlicmVhazsKKwljYXNlIEFNRF9EUE1fRk9SQ0VEX0xFVkVMX0xPVzoKKwkJcmV0ID0gY3pfcGht X2ZvcmNlX2RwbV9sb3dlc3QoaHdtZ3IpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJ YnJlYWs7CisJY2FzZSBBTURfRFBNX0ZPUkNFRF9MRVZFTF9BVVRPOgorCQlyZXQgPSBjel9waG1f dW5mb3JjZV9kcG1fbGV2ZWxzKGh3bWdyKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJ CWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWh3bWdyLT5kcG1fbGV2ZWwgPSBs ZXZlbDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY3pfZHBtX3BhdGNoX2Jvb3Rf c3RhdGUoc3RydWN0IHBwX2h3bWdyICpod21nciwKKwkJCQkJc3RydWN0IHBwX2h3X3Bvd2VyX3N0 YXRlICpod19wcykKK3sKKwlzdHJ1Y3QgY3pfaHdtZ3IgKmN6X2h3bWdyID0gKHN0cnVjdCBjel9o d21nciAqKShod21nci0+YmFja2VuZCk7CisJc3RydWN0IGN6X3Bvd2VyX3N0YXRlICpjel9wcyA9 IGNhc3RfUGh3Q3pQb3dlclN0YXRlKGh3X3BzKTsKKworCWN6X3BzLT5sZXZlbCA9IDE7CisJY3pf cHMtPm5icHNfZmxhZ3MgPSAwOworCWN6X3BzLT5iYXBtX2ZsYWdzID0gMDsKKwljel9wcy0+bGV2 ZWxzWzBdID0gY3pfaHdtZ3ItPmJvb3RfcG93ZXJfbGV2ZWw7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBjel9kcG1fZ2V0X3BwX3RhYmxlX2VudHJ5X2NhbGxiYWNrKAorCQkJCQkJICAg ICBzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAorCQkJCQkgICBzdHJ1Y3QgcHBfaHdfcG93ZXJfc3Rh dGUgKmh3X3BzLAorCQkJCQkJCSAgdW5zaWduZWQgaW50IGluZGV4LAorCQkJCQkJICAgICBjb25z dCB2b2lkICpjbG9ja19pbmZvKQoreworCXN0cnVjdCBjel9wb3dlcl9zdGF0ZSAqY3pfcHMgPSBj YXN0X1Bod0N6UG93ZXJTdGF0ZShod19wcyk7CisKKwljb25zdCBBVE9NX1BQTElCX0NaX0NMT0NL X0lORk8gKmN6X2Nsb2NrX2luZm8gPSBjbG9ja19pbmZvOworCisJc3RydWN0IHBobV9jbG9ja192 b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUgKnRhYmxlID0KKwkJCQkgICAgaHdtZ3ItPmR5bl9zdGF0 ZS52ZGRjX2RlcGVuZGVuY3lfb25fc2NsazsKKwl1aW50OF90IGNsb2NrX2luZm9faW5kZXggPSBj el9jbG9ja19pbmZvLT5pbmRleDsKKworCWlmIChjbG9ja19pbmZvX2luZGV4ID4gKHVpbnQ4X3Qp KGh3bWdyLT5wbGF0Zm9ybV9kZXNjcmlwdG9yLmhhcmR3YXJlQWN0aXZpdHlQZXJmb3JtYW5jZUxl dmVscyAtIDEpKQorCQljbG9ja19pbmZvX2luZGV4ID0gKHVpbnQ4X3QpKGh3bWdyLT5wbGF0Zm9y bV9kZXNjcmlwdG9yLmhhcmR3YXJlQWN0aXZpdHlQZXJmb3JtYW5jZUxldmVscyAtIDEpOworCisJ Y3pfcHMtPmxldmVsc1tpbmRleF0uZW5naW5lQ2xvY2sgPSB0YWJsZS0+ZW50cmllc1tjbG9ja19p bmZvX2luZGV4XS5jbGs7CisJY3pfcHMtPmxldmVsc1tpbmRleF0udmRkY0luZGV4ID0gKHVpbnQ4 X3QpdGFibGUtPmVudHJpZXNbY2xvY2tfaW5mb19pbmRleF0udjsKKworCWN6X3BzLT5sZXZlbCA9 IGluZGV4ICsgMTsKKworCWlmIChwaG1fY2FwX2VuYWJsZWQoaHdtZ3ItPnBsYXRmb3JtX2Rlc2Ny aXB0b3IucGxhdGZvcm1DYXBzLCBQSE1fUGxhdGZvcm1DYXBzX1NjbGtEZWVwU2xlZXApKSB7CisJ CWN6X3BzLT5sZXZlbHNbaW5kZXhdLmRzRGl2aWRlckluZGV4ID0gNTsKKwkJY3pfcHMtPmxldmVs c1tpbmRleF0uc3NEaXZpZGVySW5kZXggPSA1OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGN6X2RwbV9nZXRfbnVtX29mX3BwX3RhYmxlX2VudHJpZXMoc3RydWN0IHBwX2h3bWdy ICpod21ncikKK3sKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgcmV0ID0gMDsKKworCXJl c3VsdCA9IHBwX3RhYmxlc19nZXRfbnVtX29mX2VudHJpZXMoaHdtZ3IsICZyZXQpOworCisJcmV0 dXJuIHJlc3VsdCA/IDAgOiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY3pfZHBtX2dldF9wcF90YWJs ZV9lbnRyeShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAorCQkgICAgdW5zaWduZWQgbG9uZyBlbnRy eSwgc3RydWN0IHBwX3Bvd2VyX3N0YXRlICpwcykKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBj el9wb3dlcl9zdGF0ZSAqY3pfcHM7CisKKwlwcy0+aGFyZHdhcmUubWFnaWMgPSBQaHdDel9NYWdp YzsKKworCWN6X3BzID0gY2FzdF9QaHdDelBvd2VyU3RhdGUoJihwcy0+aGFyZHdhcmUpKTsKKwor CXJlc3VsdCA9IHBwX3RhYmxlc19nZXRfZW50cnkoaHdtZ3IsIGVudHJ5LCBwcywKKwkJCWN6X2Rw bV9nZXRfcHBfdGFibGVfZW50cnlfY2FsbGJhY2spOworCisJY3pfcHMtPnV2ZF9jbG9ja3MudmNs ayA9IHBzLT51dmRfY2xvY2tzLlZDTEs7CisJY3pfcHMtPnV2ZF9jbG9ja3MuZGNsayA9IHBzLT51 dmRfY2xvY2tzLkRDTEs7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitpbnQgY3pfZ2V0X3Bvd2Vy X3N0YXRlX3NpemUoc3RydWN0IHBwX2h3bWdyICpod21ncikKK3sKKwlyZXR1cm4gc2l6ZW9mKHN0 cnVjdCBjel9wb3dlcl9zdGF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHBfaHdtZ3Jf ZnVuYyBjel9od21ncl9mdW5jcyA9IHsKKwkuYmFja2VuZF9pbml0ID0gY3pfaHdtZ3JfYmFja2Vu ZF9pbml0LAorCS5iYWNrZW5kX2ZpbmkgPSBjel9od21ncl9iYWNrZW5kX2ZpbmksCisJLmFzaWNf c2V0dXAgPSBOVUxMLAorCS5mb3JjZV9kcG1fbGV2ZWwgPSBjel9kcG1fZm9yY2VfZHBtX2xldmVs LAorCS5nZXRfcG93ZXJfc3RhdGVfc2l6ZSA9IGN6X2dldF9wb3dlcl9zdGF0ZV9zaXplLAorCS5w YXRjaF9ib290X3N0YXRlID0gY3pfZHBtX3BhdGNoX2Jvb3Rfc3RhdGUsCisJLmdldF9wcF90YWJs ZV9lbnRyeSA9IGN6X2RwbV9nZXRfcHBfdGFibGVfZW50cnksCisJLmdldF9udW1fb2ZfcHBfdGFi bGVfZW50cmllcyA9IGN6X2RwbV9nZXRfbnVtX29mX3BwX3RhYmxlX2VudHJpZXMsCit9OworCitp bnQgY3pfaHdtZ3JfaW5pdChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQoreworCXN0cnVjdCBjel9o d21nciAqY3pfaHdtZ3I7CisJaW50IHJldCA9IDA7CisKKwljel9od21nciA9IGt6YWxsb2Moc2l6 ZW9mKHN0cnVjdCBjel9od21nciksIEdGUF9LRVJORUwpOworCWlmIChjel9od21nciA9PSBOVUxM KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWh3bWdyLT5iYWNrZW5kID0gY3pfaHdtZ3I7CisJaHdt Z3ItPmh3bWdyX2Z1bmMgPSAmY3pfaHdtZ3JfZnVuY3M7CisJaHdtZ3ItPnBwdGFibGVfZnVuYyA9 ICZwcHRhYmxlX2Z1bmNzOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9jel9od21nci5oIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9wb3dlcnBsYXkvaHdtZ3IvY3pfaHdtZ3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4wNTg0OWZkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9w b3dlcnBsYXkvaHdtZ3IvY3pfaHdtZ3IuaApAQCAtMCwwICsxLDMwOSBAQAorLyoKKyAqIENvcHly aWdodCAyMDE1IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJl IGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lU SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVE SU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFks CisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5U LiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhP UihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us CisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAq CisgKi8KKworI2lmbmRlZiBfQ1pfSFdNR1JfSF8KKyNkZWZpbmUgX0NaX0hXTUdSX0hfCisKKyNp bmNsdWRlICJjZ3NfY29tbW9uLmgiCisKKyNkZWZpbmUgQ1pfTlVNX05CUFNUQVRFUyAgICAgICAg ICAgICAgIDQKKyNkZWZpbmUgQ1pfTlVNX05CUE1FTU9SWUNMT0NLICAgICAgICAgIDIKKyNkZWZp bmUgTUFYX0RJU1BMQVlfQ0xPQ0tfTEVWRUwgICAgICAgIDgKKyNkZWZpbmUgQ1pfQVRfREZMVCAg ICAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIENaX01BWF9IQVJEV0FSRV9QT1dFUkxFVkVM UyAgICA4CisjZGVmaW5lIFBQQ1pfVk9USU5HUklHSFRTQ0xJRU5UU19ERkxUMCAgIDB4M0ZGRkMx MDIKKworLyogQ2Fycml6byBkZXZpY2UgSURzICovCisjZGVmaW5lIERFVklDRV9JRF9DWl85ODcw ICAgICAgICAgICAgIDB4OTg3MAorI2RlZmluZSBERVZJQ0VfSURfQ1pfOTg3NCAgICAgICAgICAg ICAweDk4NzQKKyNkZWZpbmUgREVWSUNFX0lEX0NaXzk4NzUgICAgICAgICAgICAgMHg5ODc1Cisj ZGVmaW5lIERFVklDRV9JRF9DWl85ODc2ICAgICAgICAgICAgIDB4OTg3NgorI2RlZmluZSBERVZJ Q0VfSURfQ1pfOTg3NyAgICAgICAgICAgICAweDk4NzcKKworI2RlZmluZSBQSE1DWl9XUklURV9T TUNfUkVHSVNURVIoZGV2aWNlLCByZWcsIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisJCWNnc193cml0ZV9pbmRfcmVnaXN0ZXIoZGV2aWNlLCBDR1NfSU5EX1JFR19fU01DLCBp eCMjcmVnLCB2YWx1ZSkKKworc3RydWN0IGN6X2RwbV9lbnRyeSB7CisJdWludDMyX3Qgc29mdF9t aW5fY2xrOworCXVpbnQzMl90IGhhcmRfbWluX2NsazsKKwl1aW50MzJfdCBzb2Z0X21heF9jbGs7 CisJdWludDMyX3QgaGFyZF9tYXhfY2xrOworfTsKKworc3RydWN0IGN6X3N5c19pbmZvIHsKKwl1 aW50MzJfdCBib290dXBfdW1hX2Nsb2NrOworCXVpbnQzMl90IGJvb3R1cF9lbmdpbmVfY2xvY2s7 CisJdWludDMyX3QgZGVudGlzdF92Y29fZnJlcTsKKwl1aW50MzJfdCBuYl9kcG1fZW5hYmxlOwor CXVpbnQzMl90IG5icF9tZW1vcnlfY2xvY2tbQ1pfTlVNX05CUE1FTU9SWUNMT0NLXTsKKwl1aW50 MzJfdCBuYnBfbl9jbG9ja1tDWl9OVU1fTkJQU1RBVEVTXTsKKwl1aW50MTZfdCBuYnBfdm9sdGFn ZV9pbmRleFtDWl9OVU1fTkJQU1RBVEVTXTsKKwl1aW50MzJfdCBkaXNwbGF5X2Nsb2NrW01BWF9E SVNQTEFZX0NMT0NLX0xFVkVMXTsKKwl1aW50MTZfdCBib290dXBfbmJfdm9sdGFnZV9pbmRleDsK Kwl1aW50OF90IGh0Y190bXBfbG10OworCXVpbnQ4X3QgaHRjX2h5c3RfbG10OworCXVpbnQzMl90 IHN5c3RlbV9jb25maWc7CisJdWludDMyX3QgdW1hX2NoYW5uZWxfbnVtYmVyOworfTsKKworI2Rl ZmluZSBNQVhfRElTUExBWVBIWV9JRFMJCQkweDgKKyNkZWZpbmUgRElTUExBWVBIWV9MQU5FTUFT SwkJCTB4RgorI2RlZmluZSBVTktOT1dOX1RSQU5TTUlUVEVSX1BIWV9JRAkJKC0xKQorCisjZGVm aW5lIERJU1BMQVlQSFlfUEhZSURfU0hJRlQJCQkyNAorI2RlZmluZSBESVNQTEFZUEhZX0xBTkVT RUxFQ1RfU0hJRlQJCTE2CisKKyNkZWZpbmUgRElTUExBWVBIWV9SWF9TRUxFQ1QJCQkweDEKKyNk ZWZpbmUgRElTUExBWVBIWV9UWF9TRUxFQ1QJCQkweDIKKyNkZWZpbmUgRElTUExBWVBIWV9DT1JF X1NFTEVDVAkJCTB4NAorCisjZGVmaW5lIERESV9QT1dFUkdBVElOR19BUkcocGh5SUQsIGxhbmVt YXNrLCByeCwgdHgsIGNvcmUpIFwKKwkJKCgodWludDMyX3QpKHBoeUlEKSk8PERJU1BMQVlQSFlf UEhZSURfU0hJRlQgfCBcCisJCSgodWludDMyX3QpKGxhbmVtYXNrKSk8PERJU1BMQVlQSFlfTEFO RVNFTEVDVF9TSElGVCB8IFwKKwkJKChyeCkgPyBESVNQTEFZUEhZX1JYX1NFTEVDVCA6IDApIHwg XAorCQkoKHR4KSA/IERJU1BMQVlQSFlfVFhfU0VMRUNUIDogMCkgfCBcCisJCSgoY29yZSkgPyBE SVNQTEFZUEhZX0NPUkVfU0VMRUNUIDogMCkpCisKK3N0cnVjdCBjel9kaXNwbGF5X3BoeV9pbmZv X2VudHJ5IHsKKwl1aW50OF90IHBoeV9wcmVzZW50OworCXVpbnQ4X3QgYWN0aXZlX2xhbmVfbWFw cGluZzsKKwl1aW50OF90IGRpc3BsYXlfY29uZmlnX3R5cGU7CisJdWludDhfdCBhY3RpdmVfbnVt YmVyX29mX2xhbmVzOworfTsKKworI2RlZmluZSBDWl9NQVhfRElTUExBWVBIWV9JRFMJCQkxMAor CitzdHJ1Y3QgY3pfZGlzcGxheV9waHlfaW5mbyB7CisJYm9vbCBkaXNwbGF5X3BoeV9hY2Nlc3Nf aW5pdGlhbGl6ZWQ7CisJc3RydWN0IGN6X2Rpc3BsYXlfcGh5X2luZm9fZW50cnkgZW50cmllc1tD Wl9NQVhfRElTUExBWVBIWV9JRFNdOworfTsKKworc3RydWN0IGN6X3Bvd2VyX2xldmVsIHsKKwl1 aW50MzJfdCBlbmdpbmVDbG9jazsKKwl1aW50OF90IHZkZGNJbmRleDsKKwl1aW50OF90IGRzRGl2 aWRlckluZGV4OworCXVpbnQ4X3Qgc3NEaXZpZGVySW5kZXg7CisJdWludDhfdCBhbGxvd0duYlNs b3c7CisJdWludDhfdCBmb3JjZU5CUHN0YXRlOworCXVpbnQ4X3QgZGlzcGxheV93bTsKKwl1aW50 OF90IHZjZV93bTsKKwl1aW50OF90IG51bVNJTURUb1Bvd2VyRG93bjsKKwl1aW50OF90IGh5c3Rl cmVzaXNfdXA7CisJdWludDhfdCByc3ZbM107Cit9OworCitzdHJ1Y3QgY3pfdXZkX2Nsb2NrcyB7 CisJdWludDMyX3QgdmNsazsKKwl1aW50MzJfdCBkY2xrOworCXVpbnQzMl90IHZjbGtfbG93X2Rp dmlkZXI7CisJdWludDMyX3QgdmNsa19oaWdoX2RpdmlkZXI7CisJdWludDMyX3QgZGNsa19sb3df ZGl2aWRlcjsKKwl1aW50MzJfdCBkY2xrX2hpZ2hfZGl2aWRlcjsKK307CisKK2VudW0gY3pfcHN0 YXRlX3ByZXZpb3VzX2FjdGlvbiB7CisJRE9fTk9USElORyA9IDEsCisJRk9SQ0VfSElHSCwKKwlD QU5DRUxfRk9SQ0VfSElHSAorfTsKKworc3RydWN0IHBwX2Rpc2FibGVfbmJfcHNfZmxhZ3Mgewor CXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IGVudHJ5IDogMTsKKwkJCXVpbnQzMl90 IGRpc3BsYXkgOiAxOworCQkJdWludDMyX3QgZHJpdmVyOiAxOworCQkJdWludDMyX3QgdmNlIDog MTsKKwkJCXVpbnQzMl90IHV2ZCA6IDE7CisJCQl1aW50MzJfdCBhY3AgOiAxOworCQkJdWludDMy X3QgcmVzZXJ2ZWQ6IDI2OworCQl9IGJpdHM7CisJCXVpbnQzMl90IHUzMkFsbDsKKwl9OworfTsK Kworc3RydWN0IGN6X3Bvd2VyX3N0YXRlIHsKKwl1bnNpZ25lZCBpbnQgbWFnaWM7CisJdWludDMy X3QgbGV2ZWw7CisJc3RydWN0IGN6X3V2ZF9jbG9ja3MgdXZkX2Nsb2NrczsKKwl1aW50MzJfdCBl dmNsazsKKwl1aW50MzJfdCBlY2NsazsKKwl1aW50MzJfdCBzYW1jbGs7CisJdWludDMyX3QgYWNw Y2xrOworCWJvb2wgbmVlZF9kZnNfYnlwYXNzOworCXVpbnQzMl90IG5icHNfZmxhZ3M7CisJdWlu dDMyX3QgYmFwbV9mbGFnczsKKwl1aW50OF90IGRwbV8wX3BnX25iX3BzX2xvdzsKKwl1aW50OF90 IGRwbV8wX3BnX25iX3BzX2hpZ2g7CisJdWludDhfdCBkcG1feF9uYl9wc19sb3c7CisJdWludDhf dCBkcG1feF9uYl9wc19oaWdoOworCWVudW0gY3pfcHN0YXRlX3ByZXZpb3VzX2FjdGlvbiBhY3Rp b247CisJc3RydWN0IGN6X3Bvd2VyX2xldmVsIGxldmVsc1tDWl9NQVhfSEFSRFdBUkVfUE9XRVJM RVZFTFNdOworCXN0cnVjdCBwcF9kaXNhYmxlX25iX3BzX2ZsYWdzIGRpc2FibGVfbmJfcHNfZmxh ZzsKK307CisKKyNkZWZpbmUgRFBNRmxhZ3NfU0NMS19FbmFibGVkCQkJMHgwMDAwMDAwMQorI2Rl ZmluZSBEUE1GbGFnc19VVkRfRW5hYmxlZAkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgRFBNRmxhZ3Nf VkNFX0VuYWJsZWQJCQkweDAwMDAwMDA0CisjZGVmaW5lIERQTUZsYWdzX0FDUF9FbmFibGVkCQkJ MHgwMDAwMDAwOAorI2RlZmluZSBEUE1GbGFnc19Gb3JjZUhpZ2hlc3RWYWxpZAkJMHg0MDAwMDAw MAorI2RlZmluZSBEUE1GbGFnc19EZWJ1ZwkJCQkweDgwMDAwMDAwCisKKyNkZWZpbmUgU01VX0Vu YWJsZWRGZWF0dXJlU2NvcmVib2FyZF9BY3BEcG1PbiAgIDB4MDAwMDAwMDEgLyogYml0IDAgKi8K KyNkZWZpbmUgU01VX0VuYWJsZWRGZWF0dXJlU2NvcmVib2FyZF9TY2xrRHBtT24gICAgMHgwMDIw MDAwMAorI2RlZmluZSBTTVVfRW5hYmxlZEZlYXR1cmVTY29yZWJvYXJkX1V2ZERwbU9uICAgMHgw MDgwMDAwMCAvKiBiaXQgMjMgKi8KKyNkZWZpbmUgU01VX0VuYWJsZWRGZWF0dXJlU2NvcmVib2Fy ZF9WY2VEcG1PbiAgIDB4MDEwMDAwMDAgLyogYml0IDI0ICovCisKK3N0cnVjdCBjel9od21nciB7 CisJdWludDMyX3QgYWN0aXZpdHlfdGFyZ2V0W0NaX01BWF9IQVJEV0FSRV9QT1dFUkxFVkVMU107 CisJdWludDMyX3QgZHBtX2ludGVydmFsOworCisJdWludDMyX3Qgdm9sdGFnZV9kcm9wX3RocmVz aG9sZDsKKworCXVpbnQzMl90IHZvdGluZ19yaWdodHNfY2xpZW50czsKKworCXVpbnQzMl90IGRp c2FibGVfZHJpdmVyX3RoZXJtYWxfcG9saWN5OworCisJdWludDMyX3Qgc3RhdGljX3NjcmVlbl90 aHJlc2hvbGQ7CisKKwl1aW50MzJfdCBnZnhfcG93ZXJfZ2F0aW5nX3RocmVzaG9sZDsKKworCXVp bnQzMl90IGFjdGl2aXR5X2h5c3RlcmVzaXM7CisJdWludDMyX3QgYm9vdHVwX3NjbGtfZGl2aWRl cjsKKwl1aW50MzJfdCBnZnhfcmFtcF9zdGVwOworCXVpbnQzMl90IGdmeF9yYW1wX2RlbGF5OyAv KiBpbiBtaWNyby1zZWNvbmRzICovCisKKwl1aW50MzJfdCB0aGVybWFsX2F1dG9fdGhyb3R0bGlu Z190cmVzaG9sZDsKKworCXN0cnVjdCBjel9zeXNfaW5mbyBzeXNfaW5mbzsKKworCXN0cnVjdCBj el9wb3dlcl9sZXZlbCBib290X3Bvd2VyX2xldmVsOworCXVpbnQzMl90IG1nY2dfY2d0dF9sb2Nh bDA7CisJdWludDMyX3QgbWdjZ19jZ3R0X2xvY2FsMTsKKworCXVpbnQzMl90IHRkcl9jbG9jazsg LyogaW4gMTBraHogdW5pdCAqLworCisJdWludDMyX3QgZGRpX3Bvd2VyX2dhdGluZ19kaXNhYmxl ZDsKKwl1aW50MzJfdCBkaXNhYmxlX2dmeF9wb3dlcl9nYXRpbmdfaW5fdXZkOworCXVpbnQzMl90 IGRpc2FibGVfbmJfcHMzX2luX2JhdHRlcnk7CisKKwl1aW50MzJfdCBsb2NrX25iX3BzX2luX3V2 ZF9wbGF5X2JhY2s7CisKKwlzdHJ1Y3QgY3pfZGlzcGxheV9waHlfaW5mbyBkaXNwbGF5X3BoeV9p bmZvOworCXVpbnQzMl90IHZjZV9zbG93X3NjbGtfdGhyZXNob2xkOyAvKiBkZWZhdWx0IDIwMG1o eiAqLworCXVpbnQzMl90IGRjZV9zbG93X3NjbGtfdGhyZXNob2xkOyAvKiBkZWZhdWx0IDMwMG1o eiAqLworCXVpbnQzMl90IG1pbl9zY2xrX2RpZDsgIC8qIG1pbmltdW0gc2NsayBkaXZpZGVyICov CisKKwlib29sIGRpc3BfY2xrX2J5cGFzczsKKwlib29sIGRpc3BfY2xrX2J5cGFzc19wZW5kaW5n OworCXVpbnQzMl90IGJhcG1fZW5hYmxlZDsKKwl1aW50MzJfdCBjbG9ja19zbG93X2Rvd25fZnJl cTsKKwl1aW50MzJfdCBza2lwX2Nsb2NrX3Nsb3dfZG93bjsKKwl1aW50MzJfdCBlbmFibGVfbmJf cHNfcG9saWN5OworCXVpbnQzMl90IHZvbHRhZ2VfZHJvcF9pbl9kY2VfcG93ZXJfZ2F0aW5nOwor CXVpbnQzMl90IHV2ZF9kcG1faW50ZXJ2YWw7CisJdWludDMyX3Qgb3ZlcnJpZGVfZHluYW1pY19t Z3BnOworCXVpbnQzMl90IGxjbGtfZGVlcF9lbmFibGVkOworCisJdWludDMyX3QgdXZkX3BlcmZv cm1hbmNlOworCisJYm9vbCB2aWRlb19zdGFydDsKKwlib29sIGJhdHRlcnlfc3RhdGU7CisJdWlu dDMyX3QgbG93ZXN0X3ZhbGlkOworCXVpbnQzMl90IGhpZ2hlc3RfdmFsaWQ7CisJdWludDMyX3Qg aGlnaF92b2x0YWdlX3RocmVzaG9sZDsKKwl1aW50MzJfdCBpc19uYl9kcG1fZW5hYmxlZDsKKwl1 aW50MzJfdCBpc19uYl9kcG1fZW5hYmxlZF9ieV9kcml2ZXI7CisJdWludDMyX3QgaXNfdm9sdGFn ZV9pc2xhbmRfZW5hYmxlZDsKKworCWJvb2wgcGdhY3Bpbml0OworCisJdWludDhfdCBkaXNwX2Nv bmZpZzsKKworCS8qIFBvd2VyVHVuZSAqLworCXVpbnQzMl90IHBvd2VyX2NvbnRhaW5tZW50X2Zl YXR1cmVzOworCWJvb2wgY2FjX2VuYWJsZWQ7CisJYm9vbCBkaXNhYmxlX3V2ZF9wb3dlcl90dW5l X2ZlYXR1cmU7CisJYm9vbCBlbmFibGVfYmFfcG1fZmVhdHVyZTsKKwlib29sIGVuYWJsZV90ZGNf bGltaXRfZmVhdHVyZTsKKworCXVpbnQzMl90IHNyYW1fZW5kOworCXVpbnQzMl90IGRwbV90YWJs ZV9zdGFydDsKKwl1aW50MzJfdCBzb2Z0X3JlZ3Nfc3RhcnQ7CisKKwl1aW50OF90IHV2ZF9sZXZl bF9jb3VudDsKKwl1aW50OF90IHZjZV9sZXZlbF9jb3VudDsKKworCXVpbnQ4X3QgYWNwX2xldmVs X2NvdW50OworCXVpbnQ4X3Qgc2FtdV9sZXZlbF9jb3VudDsKKwl1aW50MzJfdCBmcHNfaGlnaF90 aHJlc2hvbGQ7CisJdWludDMyX3QgZnBzX2xvd190aHJlc2hvbGQ7CisKKwl1aW50MzJfdCBkcG1f ZmxhZ3M7CisJc3RydWN0IGN6X2RwbV9lbnRyeSBzY2xrX2RwbTsKKwlzdHJ1Y3QgY3pfZHBtX2Vu dHJ5IHV2ZF9kcG07CisJc3RydWN0IGN6X2RwbV9lbnRyeSB2Y2VfZHBtOworCXN0cnVjdCBjel9k cG1fZW50cnkgYWNwX2RwbTsKKworCXVpbnQ4X3QgdXZkX2Jvb3RfbGV2ZWw7CisJdWludDhfdCB2 Y2VfYm9vdF9sZXZlbDsKKwl1aW50OF90IGFjcF9ib290X2xldmVsOworCXVpbnQ4X3Qgc2FtdV9i b290X2xldmVsOworCXVpbnQ4X3QgdXZkX2ludGVydmFsOworCXVpbnQ4X3QgdmNlX2ludGVydmFs OworCXVpbnQ4X3QgYWNwX2ludGVydmFsOworCXVpbnQ4X3Qgc2FtdV9pbnRlcnZhbDsKKworCXVp bnQ4X3QgZ3JhcGhpY3NfaW50ZXJ2YWw7CisJdWludDhfdCBncmFwaGljc190aGVybV90aHJvdHRs ZV9lbmFibGU7CisJdWludDhfdCBncmFwaGljc192b2x0YWdlX2NoYW5nZV9lbmFibGU7CisKKwl1 aW50OF90IGdyYXBoaWNzX2Nsa19zbG93X2VuYWJsZTsKKwl1aW50OF90IGdyYXBoaWNzX2Nsa19z bG93X2RpdmlkZXI7CisKKwl1aW50MzJfdCBkaXNwbGF5X2NhYzsKKwl1aW50MzJfdCBsb3dfc2Ns a19pbnRlcnJ1cHRfdGhyZXNob2xkOworCisJdWludDMyX3QgZHJhbV9sb2dfYWRkcl9oOworCXVp bnQzMl90IGRyYW1fbG9nX2FkZHJfbDsKKwl1aW50MzJfdCBkcmFtX2xvZ19waHlfYWRkcl9oOwor CXVpbnQzMl90IGRyYW1fbG9nX3BoeV9hZGRyX2w7CisJdWludDMyX3QgZHJhbV9sb2dfYnVmZl9z aXplOworCisJYm9vbCB1dmRfcG93ZXJfZ2F0ZWQ7CisJYm9vbCB2Y2VfcG93ZXJfZ2F0ZWQ7CisJ Ym9vbCBzYW11X3Bvd2VyX2dhdGVkOworCWJvb2wgYWNwX3Bvd2VyX2dhdGVkOworCWJvb2wgYWNw X3Bvd2VyX3VwX25vX2RzcDsKKwl1aW50MzJfdCBhY3RpdmVfcHJvY2Vzc19tYXNrOworCisJdWlu dDMyX3QgbWF4X3NjbGtfbGV2ZWw7CisJdWludDMyX3QgbnVtX29mX2Nsa19lbnRyaWVzOworCXN0 cnVjdCBjel9wb3dlcl9zdGF0ZSAqY3pfcHM7Cit9OworCitzdHJ1Y3QgcHBfaHdtZ3I7CisKK2lu dCBjel9od21ncl9pbml0KHN0cnVjdCBwcF9od21nciAqaHdtZ3IpOworCisjZW5kaWYgLyogX0Na X0hXTUdSX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9o d21nci9od21nci5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvaHdtZ3Iu YwppbmRleCBmNmIxMTUzLi5lMjZkZjkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1k L3Bvd2VycGxheS9od21nci9od21nci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJw bGF5L2h3bWdyL2h3bWdyLmMKQEAgLTI3LDggKzI3LDcgQEAKICNpbmNsdWRlICJjZ3NfY29tbW9u LmgiCiAjaW5jbHVkZSAicG93ZXJfc3RhdGUuaCIKICNpbmNsdWRlICJod21nci5oIgotCi0KKyNp bmNsdWRlICJjel9od21nci5oIgogCiBpbnQgaHdtZ3JfaW5pdChzdHJ1Y3QgYW1kX3BwX2luaXQg KnBwX2luaXQsIHN0cnVjdCBwcF9pbnN0YW5jZSAqaGFuZGxlKQogewpAQCAtNTEsNiArNTAsOSBA QCBpbnQgaHdtZ3JfaW5pdChzdHJ1Y3QgYW1kX3BwX2luaXQgKnBwX2luaXQsIHN0cnVjdCBwcF9p bnN0YW5jZSAqaGFuZGxlKQogCWh3bWdyLT5wb3dlcl9zb3VyY2UgPSBQUF9Qb3dlclNvdXJjZV9B QzsKIAogCXN3aXRjaCAoaHdtZ3ItPmNoaXBfZmFtaWx5KSB7CisJY2FzZSBBTURfRkFNSUxZX0Na OgorCQljel9od21ncl9pbml0KGh3bWdyKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJu IC1FSU5WQUw7CiAJfQotLSAKMS44LjMuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwK