From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Deucher Subject: [PATCH 11/51] drm/amd/powerplay: add hardware manager sub-component Date: Thu, 12 Nov 2015 01:18:01 -0500 Message-ID: <1447309121-2480-12-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-f170.google.com (mail-qk0-f170.google.com [209.85.220.170]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1DBCC7A088 for ; Wed, 11 Nov 2015 22:19:07 -0800 (PST) Received: by qkfo3 with SMTP id o3so20084005qkf.1 for ; Wed, 11 Nov 2015 22:19:06 -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 RnJvbTogSmFtbXkgWmhvdSA8SmFtbXkuWmhvdUBhbWQuY29tPgoKVGhlIGh3bWdyIGhhbmRsZXMg YWxsIGhhcmR3YXJlIHJlbGF0ZWQgY2FsbHMsIGluY2x1ZGluZyBjbG9jay9wb3dlcgpnYXRpbmcg Y29udHJvbCwgRFBNLCByZWFkIGFuZCBwYXJzZSBQUFRhYmxlLCBldGMuCgp2NTogc3F1YXNoIGlu IGZpeGVzCnY0OiBpbXBsZW1lbnQgYWNwaSdzIGF0Y3MgZnVuY3Rpb24gdXNlIGNncyBpbnRlcmZh Y2UKdjM6IGZpeCBjb2RlIHN0eWxlIGVycm9yIGFuZCBhZGQgYmlnLWVuZGlhbiBtb2RlIHN1cHBv cnQuCnYyOiB1c2UgY2dzIGludGVyZmFjZSBkaXJlY3RseSBpbiBod21nciBzdWItbW9kdWxlCgpT aWduZWQtb2ZmLWJ5OiBSZXggWmh1IDxSZXguWmh1QGFtZC5jb20+ClNpZ25lZC1vZmYtYnk6IEph bW15IFpob3UgPEphbW15Llpob3VAYW1kLmNvbT4KUmV2aWV3ZWQtYnk6IEFsZXggRGV1Y2hlciA8 YWxleGFuZGVyLmRldWNoZXJAYW1kLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2Vy cGxheS9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9hbWQv cG93ZXJwbGF5L2FtZF9wb3dlcnBsYXkuYyAgICAgIHwgICA1NSArLQogZHJpdmVycy9ncHUvZHJt L2FtZC9wb3dlcnBsYXkvaHdtZ3IvTWFrZWZpbGUgICAgICAgfCAgIDEwICsKIC4uLi9ncHUvZHJt L2FtZC9wb3dlcnBsYXkvaHdtZ3IvZnVuY3Rpb250YWJsZXMuYyAgIHwgIDE1NCArKwogLi4uL2dw dS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9oYXJkd2FyZW1hbmFnZXIuYyAgfCAgIDg0ICsKIGRy aXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL2h3bWdyLmMgICAgICAgIHwgIDIwMSAr KysKIGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3BwX2FjcGkuYyAgICAgIHwg ICA3NiArCiAuLi4vZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3Byb2Nlc3NwcHRhYmxlcy5j ICB8IDE2NjEgKysrKysrKysrKysrKysrKysrKysKIC4uLi9ncHUvZHJtL2FtZC9wb3dlcnBsYXkv aHdtZ3IvcHJvY2Vzc3BwdGFibGVzLmggIHwgICA0NyArCiBkcml2ZXJzL2dwdS9kcm0vYW1kL3Bv d2VycGxheS9pbmMvYW1kX3Bvd2VycGxheS5oICB8ICAgIDEgLQogLi4uL2dwdS9kcm0vYW1kL3Bv d2VycGxheS9pbmMvaGFyZHdhcmVtYW5hZ2VyLmggICAgfCAgMjgwICsrKysKIGRyaXZlcnMvZ3B1 L2RybS9hbWQvcG93ZXJwbGF5L2luYy9od21nci5oICAgICAgICAgIHwgIDYwNyArKysrKysrCiBk cml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9pbmMvcG93ZXJfc3RhdGUuaCAgICB8ICAyMDAg KysrCiBkcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9pbmMvcHBfYWNwaS5oICAgICAgICB8 ICAgMjggKwogZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaW5jL3BwX2luc3RhbmNlLmgg ICAgfCAgICAzICstCiAuLi4vZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2luYy9wcF9wb3dlcl9zb3Vy Y2UuaCAgICB8ICAgMzYgKwogMTYgZmlsZXMgY2hhbmdlZCwgMzQzOSBpbnNlcnRpb25zKCspLCA2 IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93 ZXJwbGF5L2h3bWdyL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2FtZC9wb3dlcnBsYXkvaHdtZ3IvZnVuY3Rpb250YWJsZXMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL2hhcmR3YXJlbWFuYWdlci5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvaHdt Z3IuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3 bWdyL3BwX2FjcGkuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93 ZXJwbGF5L2h3bWdyL3Byb2Nlc3NwcHRhYmxlcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvcHJvY2Vzc3BwdGFibGVzLmgKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9pbmMvaGFyZHdhcmVtYW5h Z2VyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9p bmMvaHdtZ3IuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJw bGF5L2luYy9wb3dlcl9zdGF0ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2FtZC9wb3dlcnBsYXkvaW5jL3BwX2FjcGkuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9hbWQvcG93ZXJwbGF5L2luYy9wcF9wb3dlcl9zb3VyY2UuaAoKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9wb3dlcnBsYXkvTWFrZWZpbGUKaW5kZXggNjBjNjY1NC4uNjM1OWM2NyAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9n cHUvZHJtL2FtZC9wb3dlcnBsYXkvTWFrZWZpbGUKQEAgLTYsNyArNiw3IEBAIHN1YmRpci1jY2Zs YWdzLXkgKz0gLUlpbmNsdWRlL2RybSAgXAogCiBBTURfUFBfUEFUSCA9IC4uL3Bvd2VycGxheQog Ci1QUF9MSUJTID0gc211bWdyCitQUF9MSUJTID0gc211bWdyIGh3bWdyCiAKIEFNRF9QT1dFUlBM QVkgPSAkKGFkZHN1ZmZpeCAvTWFrZWZpbGUsJChhZGRwcmVmaXggZHJpdmVycy9ncHUvZHJtL2Ft ZC9wb3dlcnBsYXkvLCQoUFBfTElCUykpKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v YW1kL3Bvd2VycGxheS9hbWRfcG93ZXJwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2Vy cGxheS9hbWRfcG93ZXJwbGF5LmMKaW5kZXggZWE3ODUyNS4uODhmZGIwNCAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvYW1kX3Bvd2VycGxheS5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2FtZF9wb3dlcnBsYXkuYwpAQCAtMzUsMTIgKzM1LDQ2 IEBAIHN0YXRpYyBpbnQgcHBfZWFybHlfaW5pdCh2b2lkICpoYW5kbGUpCiAKIHN0YXRpYyBpbnQg cHBfc3dfaW5pdCh2b2lkICpoYW5kbGUpCiB7Ci0JcmV0dXJuIDA7CisJc3RydWN0IHBwX2luc3Rh bmNlICpwcF9oYW5kbGU7CisJc3RydWN0IHBwX2h3bWdyICAqaHdtZ3I7CisJaW50IHJldCA9IDA7 CisKKwlpZiAoaGFuZGxlID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJcHBfaGFuZGxl ID0gKHN0cnVjdCBwcF9pbnN0YW5jZSAqKWhhbmRsZTsKKwlod21nciA9IHBwX2hhbmRsZS0+aHdt Z3I7CisKKwlpZiAoaHdtZ3IgPT0gTlVMTCB8fCBod21nci0+cHB0YWJsZV9mdW5jID09IE5VTEwg fHwKKwkgICAgaHdtZ3ItPmh3bWdyX2Z1bmMgPT0gTlVMTCB8fAorCSAgICBod21nci0+cHB0YWJs ZV9mdW5jLT5wcHRhYmxlX2luaXQgPT0gTlVMTCB8fAorCSAgICBod21nci0+aHdtZ3JfZnVuYy0+ YmFja2VuZF9pbml0ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gaHdtZ3It PnBwdGFibGVfZnVuYy0+cHB0YWJsZV9pbml0KGh3bWdyKTsKKwlpZiAocmV0ID09IDApCisJCXJl dCA9IGh3bWdyLT5od21ncl9mdW5jLT5iYWNrZW5kX2luaXQoaHdtZ3IpOworCisJcmV0dXJuIHJl dDsKIH0KIAogc3RhdGljIGludCBwcF9zd19maW5pKHZvaWQgKmhhbmRsZSkKIHsKLQlyZXR1cm4g MDsKKwlzdHJ1Y3QgcHBfaW5zdGFuY2UgKnBwX2hhbmRsZTsKKwlzdHJ1Y3QgcHBfaHdtZ3IgICpo d21ncjsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChoYW5kbGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwlwcF9oYW5kbGUgPSAoc3RydWN0IHBwX2luc3RhbmNlICopaGFuZGxlOworCWh3 bWdyID0gcHBfaGFuZGxlLT5od21ncjsKKworCWlmIChod21nciAhPSBOVUxMIHx8IGh3bWdyLT5o d21ncl9mdW5jICE9IE5VTEwgfHwKKwkgICAgaHdtZ3ItPmh3bWdyX2Z1bmMtPmJhY2tlbmRfZmlu aSAhPSBOVUxMKQorCQlyZXQgPSBod21nci0+aHdtZ3JfZnVuYy0+YmFja2VuZF9maW5pKGh3bWdy KTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcHBfaHdfaW5pdCh2b2lkICpoYW5k bGUpCkBAIC03Miw2ICsxMDYsOCBAQCBzdGF0aWMgaW50IHBwX2h3X2luaXQodm9pZCAqaGFuZGxl KQogCQlzbXVtZ3ItPnNtdW1ncl9mdW5jcy0+c211X2Zpbmkoc211bWdyKTsKIAkJcmV0dXJuIHJl dDsKIAl9CisJaHdfaW5pdF9wb3dlcl9zdGF0ZV90YWJsZShwcF9oYW5kbGUtPmh3bWdyKTsKKwog CXJldHVybiAwOwogfQogCkBAIC0yMDMsNiArMjM5LDcgQEAgcHBfZGVidWdmc19wcmludF9jdXJy ZW50X3BlcmZvcm1hbmNlX2xldmVsKHZvaWQgKmhhbmRsZSwKIHsKIAlyZXR1cm47CiB9CisKIGNv bnN0IHN0cnVjdCBhbWRfcG93ZXJwbGF5X2Z1bmNzIHBwX2RwbV9mdW5jcyA9IHsKIAkuZ2V0X3Rl bXBlcmF0dXJlID0gTlVMTCwKIAkubG9hZF9maXJtd2FyZSA9IHBwX2RwbV9sb2FkX2Z3LApAQCAt MjMwLDEwICsyNjcsMjAgQEAgc3RhdGljIGludCBhbWRfcHBfaW5zdGFuY2VfaW5pdChzdHJ1Y3Qg YW1kX3BwX2luaXQgKnBwX2luaXQsCiAKIAlyZXQgPSBzbXVtX2luaXQocHBfaW5pdCwgaGFuZGxl KTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCQlnb3RvIGZhaWxfc211bTsKKworCXJldCA9 IGh3bWdyX2luaXQocHBfaW5pdCwgaGFuZGxlKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxfaHdt Z3I7CiAKIAlhbWRfcHAtPnBwX2hhbmRsZSA9IGhhbmRsZTsKIAlyZXR1cm4gMDsKKworZmFpbF9o d21ncjoKKwlzbXVtX2ZpbmkoaGFuZGxlLT5zbXVfbWdyKTsKK2ZhaWxfc211bToKKwlrZnJlZSho YW5kbGUpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYW1kX3BwX2luc3RhbmNlX2Zp bmkodm9pZCAqaGFuZGxlKQpAQCAtMjQyLDYgKzI4OSw4IEBAIHN0YXRpYyBpbnQgYW1kX3BwX2lu c3RhbmNlX2Zpbmkodm9pZCAqaGFuZGxlKQogCWlmIChpbnN0YW5jZSA9PSBOVUxMKQogCQlyZXR1 cm4gLUVJTlZBTDsKIAorCWh3bWdyX2ZpbmkoaW5zdGFuY2UtPmh3bWdyKTsKKwogCXNtdW1fZmlu aShpbnN0YW5jZS0+c211X21ncik7CiAKIAlrZnJlZShoYW5kbGUpOwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9k cm0vYW1kL3Bvd2VycGxheS9od21nci9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5lZjUyOWUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9wb3dlcnBsYXkvaHdtZ3IvTWFrZWZpbGUKQEAgLTAsMCArMSwxMCBAQAorIworIyBNYWtlZmls ZSBmb3IgdGhlICdodyBtYW5hZ2VyJyBzdWItY29tcG9uZW50IG9mIHBvd2VycGxheS4KKyMgSXQg cHJvdmlkZXMgdGhlIGhhcmR3YXJlIG1hbmFnZW1lbnQgc2VydmljZXMgZm9yIHRoZSBkcml2ZXIu CisKK0hBUkRXQVJFX01HUiA9IGh3bWdyLm8gcHJvY2Vzc3BwdGFibGVzLm8gZnVuY3Rpb250YWJs ZXMubyBcCisJICAgICAgIGhhcmR3YXJlbWFuYWdlci5vIHBwX2FjcGkubworCitBTURfUFBfSFdN R1IgPSAkKGFkZHByZWZpeCAkKEFNRF9QUF9QQVRIKS9od21nci8sJChIQVJEV0FSRV9NR1IpKQor CitBTURfUE9XRVJQTEFZX0ZJTEVTICs9ICQoQU1EX1BQX0hXTUdSKQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvZnVuY3Rpb250YWJsZXMuYyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL2Z1bmN0aW9udGFibGVzLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFiZGU4ZgotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL2Z1bmN0aW9udGFibGVzLmMKQEAgLTAs MCArMSwxNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNSBBZHZhbmNlZCBNaWNybyBEZXZpY2Vz LCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF U1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09Q WVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFM SU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4K KyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5j bHVkZSAiaHdtZ3IuaCIKKworc3RhdGljIGludCBwaG1fcnVuX3RhYmxlKHN0cnVjdCBwcF9od21n ciAqaHdtZ3IsCisJCQkgc3RydWN0IHBobV9ydW50aW1lX3RhYmxlX2hlYWRlciAqcnRfdGFibGUs CisJCQkgdm9pZCAqaW5wdXQsCisJCQkgdm9pZCAqb3V0cHV0LAorCQkJIHZvaWQgKnRlbXBfc3Rv cmFnZSkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlwaG1fdGFibGVfZnVuY3Rpb24gKmZ1bmN0aW9u OworCisJZm9yIChmdW5jdGlvbiA9IHJ0X3RhYmxlLT5mdW5jdGlvbl9saXN0OyBOVUxMICE9ICpm dW5jdGlvbjsgZnVuY3Rpb24rKykgeworCQlpbnQgdG1wID0gKCpmdW5jdGlvbikoaHdtZ3IsIGlu cHV0LCBvdXRwdXQsIHRlbXBfc3RvcmFnZSwgcmVzdWx0KTsKKworCQlpZiAodG1wID09IFBQX1Jl c3VsdF9UYWJsZUltbWVkaWF0ZUV4aXQpCisJCQlicmVhazsKKwkJaWYgKHRtcCkgeworCQkJaWYg KDAgPT0gcmVzdWx0KQorCQkJCXJlc3VsdCA9IHRtcDsKKwkJCWlmIChydF90YWJsZS0+ZXhpdF9l cnJvcikKKwkJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKK2ludCBw aG1fZGlzcGF0Y2hfdGFibGUoc3RydWN0IHBwX2h3bWdyICpod21nciwKKwkJICAgICAgIHN0cnVj dCBwaG1fcnVudGltZV90YWJsZV9oZWFkZXIgKnJ0X3RhYmxlLAorCQkgICAgICAgdm9pZCAqaW5w dXQsIHZvaWQgKm91dHB1dCkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwl2b2lkICp0ZW1wX3N0b3Jh Z2UgPSBOVUxMOworCisJaWYgKGh3bWdyID09IE5VTEwgfHwgcnRfdGFibGUgPT0gTlVMTCB8fCBy dF90YWJsZS0+ZnVuY3Rpb25fbGlzdCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiWyBw b3dlcnBsYXkgXSBJbnZhbGlkIFBhcmFtZXRlciFcbiIpOworCQlyZXR1cm4gMDsgLyp0ZW1wIHJl dHVybiB0dXJlIGJlY2F1c2Ugc29tZSBmdW5jdGlvbiBub3QgaW1wbGVtZW50IG9uIHNvbWUgYXNp YyAqLworCX0KKworCWlmICgwICE9IHJ0X3RhYmxlLT5zdG9yYWdlX3NpemUpIHsKKwkJdGVtcF9z dG9yYWdlID0ga3phbGxvYyhydF90YWJsZS0+c3RvcmFnZV9zaXplLCBHRlBfS0VSTkVMKTsKKwkJ aWYgKHRlbXBfc3RvcmFnZSA9PSBOVUxMKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlsgcG93ZXJw bGF5IF0gQ291bGQgbm90IGFsbG9jYXRlIHRhYmxlIHRlbXBvcmFyeSBzdG9yYWdlXG4iKTsKKwkJ CXJldHVybiAtMTsKKwkJfQorCX0KKworCXJlc3VsdCA9IHBobV9ydW5fdGFibGUoaHdtZ3IsIHJ0 X3RhYmxlLCBpbnB1dCwgb3V0cHV0LCB0ZW1wX3N0b3JhZ2UpOworCisJaWYgKE5VTEwgIT0gdGVt cF9zdG9yYWdlKQorCQlrZnJlZSh0ZW1wX3N0b3JhZ2UpOworCisJcmV0dXJuIHJlc3VsdDsKK30K KworaW50IHBobV9jb25zdHJ1Y3RfdGFibGUoc3RydWN0IHBwX2h3bWdyICpod21nciwKKwkJCXN0 cnVjdCBwaG1fbWFzdGVyX3RhYmxlX2hlYWRlciAqbWFzdGVyX3RhYmxlLAorCQkJc3RydWN0IHBo bV9ydW50aW1lX3RhYmxlX2hlYWRlciAqcnRfdGFibGUpCit7CisJdWludDMyX3QgZnVuY3Rpb25f Y291bnQgPSAwOworCWNvbnN0IHN0cnVjdCBwaG1fbWFzdGVyX3RhYmxlX2l0ZW0gKnRhYmxlX2l0 ZW07CisJdWludDMyX3Qgc2l6ZTsKKwlwaG1fdGFibGVfZnVuY3Rpb24gKnJ1bl90aW1lX2xpc3Q7 CisJcGhtX3RhYmxlX2Z1bmN0aW9uICpydGY7CisKKwlpZiAoaHdtZ3IgPT0gTlVMTCB8fCBtYXN0 ZXJfdGFibGUgPT0gTlVMTCB8fCBydF90YWJsZSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VS UiAiWyBwb3dlcnBsYXkgXSBJbnZhbGlkIFBhcmFtZXRlciFcbiIpOworCQlyZXR1cm4gLTE7CisJ fQorCisJZm9yICh0YWJsZV9pdGVtID0gbWFzdGVyX3RhYmxlLT5tYXN0ZXJfbGlzdDsKKwkJTlVM TCAhPSB0YWJsZV9pdGVtLT50YWJsZUZ1bmN0aW9uOyB0YWJsZV9pdGVtKyspIHsKKwkJaWYgKChO VUxMID09IHRhYmxlX2l0ZW0tPmlzRnVuY3Rpb25OZWVkZWRJblJ1bnRpbWVUYWJsZSkgfHwKKwkJ ICAgICh0YWJsZV9pdGVtLT5pc0Z1bmN0aW9uTmVlZGVkSW5SdW50aW1lVGFibGUoaHdtZ3IpKSkK KwkJCWZ1bmN0aW9uX2NvdW50Kys7CisJfQorCisJc2l6ZSA9IChmdW5jdGlvbl9jb3VudCArIDEp ICogc2l6ZW9mKHBobV90YWJsZV9mdW5jdGlvbik7CisJcnVuX3RpbWVfbGlzdCA9IGt6YWxsb2Mo c2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKE5VTEwgPT0gcnVuX3RpbWVfbGlzdCkKKwkJcmV0dXJu IC0xOworCisJcnRmID0gcnVuX3RpbWVfbGlzdDsKKwlmb3IgKHRhYmxlX2l0ZW0gPSBtYXN0ZXJf dGFibGUtPm1hc3Rlcl9saXN0OworCQlOVUxMICE9IHRhYmxlX2l0ZW0tPnRhYmxlRnVuY3Rpb247 IHRhYmxlX2l0ZW0rKykgeworCQlpZiAoKHJ0ZiAtIHJ1bl90aW1lX2xpc3QpID4gZnVuY3Rpb25f Y291bnQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiWyBwb3dlcnBsYXkgXSBDaGVjayBmdW5jdGlv biByZXN1bHRzIGhhdmUgY2hhbmdlZFxuIik7CisJCQlrZnJlZShydW5fdGltZV9saXN0KTsKKwkJ CXJldHVybiAtMTsKKwkJfQorCisJCWlmICgoTlVMTCA9PSB0YWJsZV9pdGVtLT5pc0Z1bmN0aW9u TmVlZGVkSW5SdW50aW1lVGFibGUpIHx8CisJCSAgICAgKHRhYmxlX2l0ZW0tPmlzRnVuY3Rpb25O ZWVkZWRJblJ1bnRpbWVUYWJsZShod21ncikpKSB7CisJCQkqKHJ0ZisrKSA9IHRhYmxlX2l0ZW0t PnRhYmxlRnVuY3Rpb247CisJCX0KKwl9CisKKwlpZiAoKHJ0ZiAtIHJ1bl90aW1lX2xpc3QpID4g ZnVuY3Rpb25fY291bnQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJbIHBvd2VycGxheSBdIENoZWNr IGZ1bmN0aW9uIHJlc3VsdHMgaGF2ZSBjaGFuZ2VkXG4iKTsKKwkJa2ZyZWUocnVuX3RpbWVfbGlz dCk7CisJCXJldHVybiAtMTsKKwl9CisKKwkqcnRmID0gTlVMTDsKKwlydF90YWJsZS0+ZnVuY3Rp b25fbGlzdCA9IHJ1bl90aW1lX2xpc3Q7CisJcnRfdGFibGUtPmV4aXRfZXJyb3IgPSAoMCAhPSAo bWFzdGVyX3RhYmxlLT5mbGFncyAmIFBITV9NYXN0ZXJUYWJsZUZsYWdfRXhpdE9uRXJyb3IpKTsK KwlydF90YWJsZS0+c3RvcmFnZV9zaXplID0gbWFzdGVyX3RhYmxlLT5zdG9yYWdlX3NpemU7CisJ cmV0dXJuIDA7Cit9CisKK2ludCBwaG1fZGVzdHJveV90YWJsZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3 bWdyLAorCQkgICAgICBzdHJ1Y3QgcGhtX3J1bnRpbWVfdGFibGVfaGVhZGVyICpydF90YWJsZSkK K3sKKwlpZiAoaHdtZ3IgPT0gTlVMTCB8fCBydF90YWJsZSA9PSBOVUxMKSB7CisJCXByaW50ayhL RVJOX0VSUiAiWyBwb3dlcnBsYXkgXSBJbnZhbGlkIFBhcmFtZXRlclxuIik7CisJCXJldHVybiAt MTsKKwl9CisKKwlpZiAoTlVMTCA9PSBydF90YWJsZS0+ZnVuY3Rpb25fbGlzdCkKKwkJcmV0dXJu IDA7CisKKwlrZnJlZShydF90YWJsZS0+ZnVuY3Rpb25fbGlzdCk7CisKKwlydF90YWJsZS0+ZnVu Y3Rpb25fbGlzdCA9IE5VTEw7CisJcnRfdGFibGUtPnN0b3JhZ2Vfc2l6ZSA9IDA7CisJcnRfdGFi bGUtPmV4aXRfZXJyb3IgPSBmYWxzZTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvaGFyZHdhcmVtYW5hZ2VyLmMgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9oYXJkd2FyZW1hbmFnZXIuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzE3ZTQzCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvaGFyZHdhcmVtYW5hZ2VyLmMKQEAg LTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE1IEFkdmFuY2VkIE1pY3JvIERldmlj ZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisg KiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdB UkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQ UkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBD T1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERF QUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5o PgorI2luY2x1ZGUgImh3bWdyLmgiCisjaW5jbHVkZSAiaGFyZHdhcmVtYW5hZ2VyLmgiCisjaW5j bHVkZSAicHBfYWNwaS5oIgorI2luY2x1ZGUgImFtZF9hY3BpLmgiCisKK3ZvaWQgcGhtX2luaXRf ZHluYW1pY19jYXBzKHN0cnVjdCBwcF9od21nciAqaHdtZ3IpCit7CisJcGhtX2NhcF91bnNldCho d21nci0+cGxhdGZvcm1fZGVzY3JpcHRvci5wbGF0Zm9ybUNhcHMsIFBITV9QbGF0Zm9ybUNhcHNf RGlzYWJsZVZvbHRhZ2VUcmFuc2l0aW9uKTsKKwlwaG1fY2FwX3Vuc2V0KGh3bWdyLT5wbGF0Zm9y bV9kZXNjcmlwdG9yLnBsYXRmb3JtQ2FwcywgUEhNX1BsYXRmb3JtQ2Fwc19EaXNhYmxlRW5naW5l VHJhbnNpdGlvbik7CisJcGhtX2NhcF91bnNldChod21nci0+cGxhdGZvcm1fZGVzY3JpcHRvci5w bGF0Zm9ybUNhcHMsIFBITV9QbGF0Zm9ybUNhcHNfRGlzYWJsZU1lbW9yeVRyYW5zaXRpb24pOwor CXBobV9jYXBfdW5zZXQoaHdtZ3ItPnBsYXRmb3JtX2Rlc2NyaXB0b3IucGxhdGZvcm1DYXBzLCBQ SE1fUGxhdGZvcm1DYXBzX0Rpc2FibGVNR0Nsb2NrR2F0aW5nKTsKKwlwaG1fY2FwX3Vuc2V0KGh3 bWdyLT5wbGF0Zm9ybV9kZXNjcmlwdG9yLnBsYXRmb3JtQ2FwcywgUEhNX1BsYXRmb3JtQ2Fwc19E aXNhYmxlTUdDR1RTU00pOworCXBobV9jYXBfdW5zZXQoaHdtZ3ItPnBsYXRmb3JtX2Rlc2NyaXB0 b3IucGxhdGZvcm1DYXBzLCBQSE1fUGxhdGZvcm1DYXBzX0Rpc2FibGVMU0Nsb2NrR2F0aW5nKTsK KwlwaG1fY2FwX3Vuc2V0KGh3bWdyLT5wbGF0Zm9ybV9kZXNjcmlwdG9yLnBsYXRmb3JtQ2Fwcywg UEhNX1BsYXRmb3JtQ2Fwc19Gb3JjZTNEQ2xvY2tTdXBwb3J0KTsKKwlwaG1fY2FwX3Vuc2V0KGh3 bWdyLT5wbGF0Zm9ybV9kZXNjcmlwdG9yLnBsYXRmb3JtQ2FwcywgUEhNX1BsYXRmb3JtQ2Fwc19E aXNhYmxlTGlnaHRTbGVlcCk7CisJcGhtX2NhcF91bnNldChod21nci0+cGxhdGZvcm1fZGVzY3Jp cHRvci5wbGF0Zm9ybUNhcHMsIFBITV9QbGF0Zm9ybUNhcHNfRGlzYWJsZU1DTFMpOworCXBobV9j YXBfc2V0KGh3bWdyLT5wbGF0Zm9ybV9kZXNjcmlwdG9yLnBsYXRmb3JtQ2FwcywgUEhNX1BsYXRm b3JtQ2Fwc19EaXNhYmxlUG93ZXJHYXRpbmcpOworCisJcGhtX2NhcF91bnNldChod21nci0+cGxh dGZvcm1fZGVzY3JpcHRvci5wbGF0Zm9ybUNhcHMsIFBITV9QbGF0Zm9ybUNhcHNfRGlzYWJsZURQ TSk7CisJcGhtX2NhcF91bnNldChod21nci0+cGxhdGZvcm1fZGVzY3JpcHRvci5wbGF0Zm9ybUNh cHMsIFBITV9QbGF0Zm9ybUNhcHNfRGlzYWJsZVNNVVVWREhhbmRzaGFrZSk7CisJcGhtX2NhcF91 bnNldChod21nci0+cGxhdGZvcm1fZGVzY3JpcHRvci5wbGF0Zm9ybUNhcHMsIFBITV9QbGF0Zm9y bUNhcHNfVGhlcm1hbEF1dG9UaHJvdHRsaW5nKTsKKworCXBobV9jYXBfdW5zZXQoaHdtZ3ItPnBs YXRmb3JtX2Rlc2NyaXB0b3IucGxhdGZvcm1DYXBzLCBQSE1fUGxhdGZvcm1DYXBzX1BDSUVQZXJm b3JtYW5jZVJlcXVlc3QpOworCisJcGhtX2NhcF91bnNldChod21nci0+cGxhdGZvcm1fZGVzY3Jp cHRvci5wbGF0Zm9ybUNhcHMsIFBITV9QbGF0Zm9ybUNhcHNfTm9PRDVTdXBwb3J0KTsKKwlwaG1f Y2FwX3Vuc2V0KGh3bWdyLT5wbGF0Zm9ybV9kZXNjcmlwdG9yLnBsYXRmb3JtQ2FwcywgUEhNX1Bs YXRmb3JtQ2Fwc19Vc2VyTWF4Q2xvY2tGb3JNdWx0aURpc3BsYXlzKTsKKworCXBobV9jYXBfdW5z ZXQoaHdtZ3ItPnBsYXRmb3JtX2Rlc2NyaXB0b3IucGxhdGZvcm1DYXBzLCBQSE1fUGxhdGZvcm1D YXBzX1ZwdVJlY292ZXJ5SW5Qcm9ncmVzcyk7CisKKwlpZiAoYWNwaV9hdGNzX2Z1bmN0aW9uc19z dXBwb3J0ZWQoaHdtZ3ItPmRldmljZSwgQVRDU19GVU5DVElPTl9QQ0lFX1BFUkZPUk1BTkNFX1JF UVVFU1QpICYmCisJCWFjcGlfYXRjc19mdW5jdGlvbnNfc3VwcG9ydGVkKGh3bWdyLT5kZXZpY2Us IEFUQ1NfRlVOQ1RJT05fUENJRV9ERVZJQ0VfUkVBRFlfTk9USUZJQ0FUSU9OKSkKKwkJcGhtX2Nh cF9zZXQoaHdtZ3ItPnBsYXRmb3JtX2Rlc2NyaXB0b3IucGxhdGZvcm1DYXBzLCBQSE1fUGxhdGZv cm1DYXBzX1BDSUVQZXJmb3JtYW5jZVJlcXVlc3QpOworfQorCitpbnQgcGhtX3NldHVwX2FzaWMo c3RydWN0IHBwX2h3bWdyICpod21ncikKK3sKKwlpZiAocGhtX2NhcF9lbmFibGVkKGh3bWdyLT5w bGF0Zm9ybV9kZXNjcmlwdG9yLnBsYXRmb3JtQ2FwcywKKwkJUEhNX1BsYXRmb3JtQ2Fwc19UYWJs ZWxlc3NIYXJkd2FyZUludGVyZmFjZSkpIHsKKwkJaWYgKE5VTEwgIT0gaHdtZ3ItPmh3bWdyX2Z1 bmMtPmFzaWNfc2V0dXApCisJCQlyZXR1cm4gaHdtZ3ItPmh3bWdyX2Z1bmMtPmFzaWNfc2V0dXAo aHdtZ3IpOworCX0gZWxzZSB7CisJCXJldHVybiBwaG1fZGlzcGF0Y2hfdGFibGUgKGh3bWdyLCAm KGh3bWdyLT5zZXR1cF9hc2ljKSwKKwkJCQkJICBOVUxMLCBOVUxMKTsKKwl9CisKKwlyZXR1cm4g MDsKK30KKworaW50IHBobV9lbmFibGVfZHluYW1pY19zdGF0ZV9tYW5hZ2VtZW50KHN0cnVjdCBw cF9od21nciAqaHdtZ3IpCit7CisJaWYgKHBobV9jYXBfZW5hYmxlZChod21nci0+cGxhdGZvcm1f ZGVzY3JpcHRvci5wbGF0Zm9ybUNhcHMsCisJCVBITV9QbGF0Zm9ybUNhcHNfVGFibGVsZXNzSGFy ZHdhcmVJbnRlcmZhY2UpKSB7CisJCWlmIChOVUxMICE9IGh3bWdyLT5od21ncl9mdW5jLT5keW5h bWljX3N0YXRlX21hbmFnZW1lbnRfZW5hYmxlKQorCQkJcmV0dXJuIGh3bWdyLT5od21ncl9mdW5j LT5keW5hbWljX3N0YXRlX21hbmFnZW1lbnRfZW5hYmxlKGh3bWdyKTsKKwl9IGVsc2UgeworCQly ZXR1cm4gcGhtX2Rpc3BhdGNoX3RhYmxlIChod21nciwKKwkJCQkmKGh3bWdyLT5lbmFibGVfZHlu YW1pY19zdGF0ZV9tYW5hZ2VtZW50KSwKKwkJCQlOVUxMLCBOVUxMKTsKKwl9CisJcmV0dXJuIDA7 Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9od21n ci5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvaHdtZ3IuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmIxMTUzCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvaHdtZ3IuYwpAQCAtMCwwICsxLDIw MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE1IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4K KyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwg aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp bWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgor ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQg SE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElO IFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlICJsaW51eC9kZWxheS5oIgorI2luY2x1 ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8 bGludXgvc2xhYi5oPgorI2luY2x1ZGUgImNnc19jb21tb24uaCIKKyNpbmNsdWRlICJwb3dlcl9z dGF0ZS5oIgorI2luY2x1ZGUgImh3bWdyLmgiCisKKworCitpbnQgaHdtZ3JfaW5pdChzdHJ1Y3Qg YW1kX3BwX2luaXQgKnBwX2luaXQsIHN0cnVjdCBwcF9pbnN0YW5jZSAqaGFuZGxlKQoreworCXN0 cnVjdCBwcF9od21nciAqaHdtZ3I7CisKKwlpZiAoKGhhbmRsZSA9PSBOVUxMKSB8fCAocHBfaW5p dCA9PSBOVUxMKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlod21nciA9IGt6YWxsb2Moc2l6ZW9m KHN0cnVjdCBwcF9od21nciksIEdGUF9LRVJORUwpOworCWlmIChod21nciA9PSBOVUxMKQorCQly ZXR1cm4gLUVOT01FTTsKKworCWhhbmRsZS0+aHdtZ3IgPSBod21ncjsKKwlod21nci0+c211bWdy ID0gaGFuZGxlLT5zbXVfbWdyOworCWh3bWdyLT5kZXZpY2UgPSBwcF9pbml0LT5kZXZpY2U7CisJ aHdtZ3ItPmNoaXBfZmFtaWx5ID0gcHBfaW5pdC0+Y2hpcF9mYW1pbHk7CisJaHdtZ3ItPmNoaXBf aWQgPSBwcF9pbml0LT5jaGlwX2lkOworCWh3bWdyLT5od19yZXZpc2lvbiA9IHBwX2luaXQtPnJl dl9pZDsKKwlod21nci0+dXNlY190aW1lb3V0ID0gQU1EX01BWF9VU0VDX1RJTUVPVVQ7CisJaHdt Z3ItPnBvd2VyX3NvdXJjZSA9IFBQX1Bvd2VyU291cmNlX0FDOworCisJc3dpdGNoIChod21nci0+ Y2hpcF9mYW1pbHkpIHsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwaG1f aW5pdF9keW5hbWljX2NhcHMoaHdtZ3IpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBod21ncl9m aW5pKHN0cnVjdCBwcF9od21nciAqaHdtZ3IpCit7CisJaWYgKGh3bWdyID09IE5VTEwgfHwgaHdt Z3ItPnBzID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJa2ZyZWUoaHdtZ3ItPnBzKTsK KwlrZnJlZShod21ncik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBod19pbml0X3Bvd2VyX3N0YXRl X3RhYmxlKHN0cnVjdCBwcF9od21nciAqaHdtZ3IpCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25l ZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgdGFibGVfZW50cmllczsKKwlzdHJ1Y3QgcHBfcG93ZXJf c3RhdGUgKnN0YXRlOworCWludCBzaXplOworCisJaWYgKGh3bWdyLT5od21ncl9mdW5jLT5nZXRf bnVtX29mX3BwX3RhYmxlX2VudHJpZXMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlp ZiAoaHdtZ3ItPmh3bWdyX2Z1bmMtPmdldF9wb3dlcl9zdGF0ZV9zaXplID09IE5VTEwpCisJCXJl dHVybiAtRUlOVkFMOworCisJaHdtZ3ItPm51bV9wcyA9IHRhYmxlX2VudHJpZXMgPSBod21nci0+ aHdtZ3JfZnVuYy0+Z2V0X251bV9vZl9wcF90YWJsZV9lbnRyaWVzKGh3bWdyKTsKKworCWh3bWdy LT5wc19zaXplID0gc2l6ZSA9IGh3bWdyLT5od21ncl9mdW5jLT5nZXRfcG93ZXJfc3RhdGVfc2l6 ZShod21ncikgKworCQkJCQkgIHNpemVvZihzdHJ1Y3QgcHBfcG93ZXJfc3RhdGUpOworCisJaHdt Z3ItPnBzID0ga3phbGxvYyhzaXplICogdGFibGVfZW50cmllcywgR0ZQX0tFUk5FTCk7CisKKwlz dGF0ZSA9IGh3bWdyLT5wczsKKworCWZvciAoaSA9IDA7IGkgPCB0YWJsZV9lbnRyaWVzOyBpKysp IHsKKwkJcmVzdWx0ID0gaHdtZ3ItPmh3bWdyX2Z1bmMtPmdldF9wcF90YWJsZV9lbnRyeShod21n ciwgaSwgc3RhdGUpOworCQlpZiAoc3RhdGUtPmNsYXNzaWZpY2F0aW9uLmZsYWdzICYgUFBfU3Rh dGVDbGFzc2lmaWNhdGlvbkZsYWdfQm9vdCkgeworCQkJaHdtZ3ItPmJvb3RfcHMgPSBzdGF0ZTsK KwkJCWh3bWdyLT5jdXJyZW50X3BzID0gaHdtZ3ItPnJlcXVlc3RfcHMgPSBzdGF0ZTsKKwkJfQor CisJCXN0YXRlLT5pZCA9IGkgKyAxOyAvKiBhc3NpZ25lZCB1bmlxdWUgbnVtIGZvciBldmVyeSBw b3dlciBzdGF0ZSBpZCAqLworCisJCWlmIChzdGF0ZS0+Y2xhc3NpZmljYXRpb24uZmxhZ3MgJiBQ UF9TdGF0ZUNsYXNzaWZpY2F0aW9uRmxhZ19VdmQpCisJCQlod21nci0+dXZkX3BzID0gc3RhdGU7 CisJCXN0YXRlID0gKHN0cnVjdCBwcF9wb3dlcl9zdGF0ZSAqKSgodWludDY0X3Qpc3RhdGUgKyBz aXplKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIFJldHVybnMgb25jZSB0aGUg cGFydCBvZiB0aGUgcmVnaXN0ZXIgaW5kaWNhdGVkIGJ5IHRoZSBtYXNrIGhhcworICogcmVhY2hl ZCB0aGUgZ2l2ZW4gdmFsdWUuCisgKi8KK2ludCBwaG1fd2FpdF9vbl9yZWdpc3RlcihzdHJ1Y3Qg cHBfaHdtZ3IgKmh3bWdyLCB1aW50MzJfdCBpbmRleCwKKwkJCSB1aW50MzJfdCB2YWx1ZSwgdWlu dDMyX3QgbWFzaykKK3sKKwl1aW50MzJfdCBpOworCXVpbnQzMl90IGN1cl92YWx1ZTsKKworCWlm IChod21nciA9PSBOVUxMIHx8IGh3bWdyLT5kZXZpY2UgPT0gTlVMTCkgeworCQlwcmludGsoS0VS Tl9FUlIgIlsgcG93ZXJwbGF5IF0gSW52YWxpZCBIYXJkd2FyZSBNYW5hZ2VyISIpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgaHdtZ3ItPnVzZWNfdGltZW91dDsg aSsrKSB7CisJCWN1cl92YWx1ZSA9IGNnc19yZWFkX3JlZ2lzdGVyKGh3bWdyLT5kZXZpY2UsIGlu ZGV4KTsKKwkJaWYgKChjdXJfdmFsdWUgJiBtYXNrKSA9PSAodmFsdWUgJiBtYXNrKSkKKwkJCWJy ZWFrOworCQl1ZGVsYXkoMSk7CisJfQorCisJLyogdGltZW91dCBtZWFucyB3cm9uZyBsb2dpYyov CisJaWYgKGkgPT0gaHdtZ3ItPnVzZWNfdGltZW91dCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAw OworfQorCitpbnQgcGhtX3dhaXRfZm9yX3JlZ2lzdGVyX3VuZXF1YWwoc3RydWN0IHBwX2h3bWdy ICpod21nciwKKwkJCQl1aW50MzJfdCBpbmRleCwgdWludDMyX3QgdmFsdWUsIHVpbnQzMl90IG1h c2spCit7CisJdWludDMyX3QgaTsKKwl1aW50MzJfdCBjdXJfdmFsdWU7CisKKwlpZiAoaHdtZ3Ig PT0gTlVMTCB8fCBod21nci0+ZGV2aWNlID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJb IHBvd2VycGxheSBdIEludmFsaWQgSGFyZHdhcmUgTWFuYWdlciEiKTsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGh3bWdyLT51c2VjX3RpbWVvdXQ7IGkrKykgewor CQljdXJfdmFsdWUgPSBjZ3NfcmVhZF9yZWdpc3Rlcihod21nci0+ZGV2aWNlLCBpbmRleCk7CisJ CWlmICgoY3VyX3ZhbHVlICYgbWFzaykgIT0gKHZhbHVlICYgbWFzaykpCisJCQlicmVhazsKKwkJ dWRlbGF5KDEpOworCX0KKworCS8qIHRpbWVvdXQgbWVhbnMgd3JvbmcgbG9naWMqLworCWlmIChp ID09IGh3bWdyLT51c2VjX3RpbWVvdXQpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKwor CisvKioKKyAqIFJldHVybnMgb25jZSB0aGUgcGFydCBvZiB0aGUgcmVnaXN0ZXIgaW5kaWNhdGVk IGJ5IHRoZSBtYXNrIGhhcworICogcmVhY2hlZCB0aGUgZ2l2ZW4gdmFsdWUuVGhlIGluZGlyZWN0 IHNwYWNlIGlzIGRlc2NyaWJlZCBieSBnaXZpbmcKKyAqIHRoZSBtZW1vcnktbWFwcGVkIGluZGV4 IG9mIHRoZSBpbmRpcmVjdCBpbmRleCByZWdpc3Rlci4KKyAqLwordm9pZCBwaG1fd2FpdF9vbl9p bmRpcmVjdF9yZWdpc3RlcihzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAorCQkJCXVpbnQzMl90IGlu ZGlyZWN0X3BvcnQsCisJCQkJdWludDMyX3QgaW5kZXgsCisJCQkJdWludDMyX3QgdmFsdWUsCisJ CQkJdWludDMyX3QgbWFzaykKK3sKKwlpZiAoaHdtZ3IgPT0gTlVMTCB8fCBod21nci0+ZGV2aWNl ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJbIHBvd2VycGxheSBdIEludmFsaWQgSGFy ZHdhcmUgTWFuYWdlciEiKTsKKwkJcmV0dXJuOworCX0KKworCWNnc193cml0ZV9yZWdpc3Rlciho d21nci0+ZGV2aWNlLCBpbmRpcmVjdF9wb3J0LCBpbmRleCk7CisJcGhtX3dhaXRfb25fcmVnaXN0 ZXIoaHdtZ3IsIGluZGlyZWN0X3BvcnQgKyAxLCBtYXNrLCB2YWx1ZSk7Cit9CisKK3ZvaWQgcGht X3dhaXRfZm9yX2luZGlyZWN0X3JlZ2lzdGVyX3VuZXF1YWwoc3RydWN0IHBwX2h3bWdyICpod21n ciwKKwkJCQkJdWludDMyX3QgaW5kaXJlY3RfcG9ydCwKKwkJCQkJdWludDMyX3QgaW5kZXgsCisJ CQkJCXVpbnQzMl90IHZhbHVlLAorCQkJCQl1aW50MzJfdCBtYXNrKQoreworCWlmIChod21nciA9 PSBOVUxMIHx8IGh3bWdyLT5kZXZpY2UgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIlsg cG93ZXJwbGF5IF0gSW52YWxpZCBIYXJkd2FyZSBNYW5hZ2VyISIpOworCQlyZXR1cm47CisJfQor CisJY2dzX3dyaXRlX3JlZ2lzdGVyKGh3bWdyLT5kZXZpY2UsIGluZGlyZWN0X3BvcnQsIGluZGV4 KTsKKwlwaG1fd2FpdF9mb3JfcmVnaXN0ZXJfdW5lcXVhbChod21nciwgaW5kaXJlY3RfcG9ydCAr IDEsCisJCQkJICAgICAgdmFsdWUsIG1hc2spOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvcHBfYWNwaS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9w b3dlcnBsYXkvaHdtZ3IvcHBfYWNwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjdiMmQ1MDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2Vy cGxheS9od21nci9wcF9hY3BpLmMKQEAgLTAsMCArMSw3NiBAQAorI2luY2x1ZGUgPGxpbnV4L2Vy cm5vLmg+CisjaW5jbHVkZSAibGludXgvZGVsYXkuaCIKKyNpbmNsdWRlICJod21nci5oIgorI2lu Y2x1ZGUgImFtZF9hY3BpLmgiCisKK2Jvb2wgYWNwaV9hdGNzX2Z1bmN0aW9uc19zdXBwb3J0ZWQo dm9pZCAqZGV2aWNlLCB1aW50MzJfdCBpbmRleCkKK3sKKwlpbnQzMl90IHJlc3VsdDsKKwlzdHJ1 Y3QgYXRjc192ZXJpZnlfaW50ZXJmYWNlIG91dHB1dF9idWYgPSB7MH07CisKKwlpbnQzMl90IHRl bXBfYnVmZmVyID0gMTsKKworCXJlc3VsdCA9IGNnc19jYWxsX2FjcGlfbWV0aG9kKGRldmljZSwg Q0dTX0FDUElfTUVUSE9EX0FUQ1MsCisJCQkJCQlBVENTX0ZVTkNUSU9OX1ZFUklGWV9JTlRFUkZB Q0UsCisJCQkJCQkmdGVtcF9idWZmZXIsCisJCQkJCQkmb3V0cHV0X2J1ZiwKKwkJCQkJCTEsCisJ CQkJCQlzaXplb2YodGVtcF9idWZmZXIpLAorCQkJCQkJc2l6ZW9mKG91dHB1dF9idWYpKTsKKwor CXJldHVybiByZXN1bHQgPT0gMCA/IChvdXRwdXRfYnVmLmZ1bmN0aW9uX2JpdHMgJiAoMSA8PCAo aW5kZXggLSAxKSkpICE9IDAgOiBmYWxzZTsKK30KKworaW50IGFjcGlfcGNpZV9wZXJmX3JlcXVl c3Qodm9pZCAqZGV2aWNlLCB1aW50OF90IHBlcmZfcmVxLCBib29sIGFkdmVydGlzZSkKK3sKKwlz dHJ1Y3QgYXRjc19wcmVmX3JlcV9pbnB1dCBhdGNzX2lucHV0OworCXN0cnVjdCBhdGNzX3ByZWZf cmVxX291dHB1dCBhdGNzX291dHB1dDsKKwl1MzIgcmV0cnkgPSAzOworCWludCByZXN1bHQ7CisJ c3RydWN0IGNnc19zeXN0ZW1faW5mbyBpbmZvID0gezB9OworCisJaWYgKCFhY3BpX2F0Y3NfZnVu Y3Rpb25zX3N1cHBvcnRlZChkZXZpY2UsIEFUQ1NfRlVOQ1RJT05fUENJRV9QRVJGT1JNQU5DRV9S RVFVRVNUKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbmZvLnNpemUgPSBzaXplb2Yoc3RydWN0 IGNnc19zeXN0ZW1faW5mbyk7CisJaW5mby5pbmZvX2lkID0gQ0dTX1NZU1RFTV9JTkZPX0FEQVBU RVJfQkRGX0lEOworCXJlc3VsdCA9IGNnc19xdWVyeV9zeXN0ZW1faW5mbyhkZXZpY2UsICZpbmZv KTsKKwlpZiAocmVzdWx0ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCWF0Y3NfaW5wdXQuY2xp ZW50X2lkID0gKHVpbnQxNl90KWluZm8udmFsdWU7CisJYXRjc19pbnB1dC5zaXplID0gc2l6ZW9m KHN0cnVjdCBhdGNzX3ByZWZfcmVxX2lucHV0KTsKKwlhdGNzX2lucHV0LnZhbGlkX2ZsYWdzX21h c2sgPSBBVENTX1ZBTElEX0ZMQUdTX01BU0s7CisJYXRjc19pbnB1dC5mbGFncyA9IEFUQ1NfV0FJ VF9GT1JfQ09NUExFVElPTjsKKwlpZiAoYWR2ZXJ0aXNlKQorCQlhdGNzX2lucHV0LmZsYWdzIHw9 IEFUQ1NfQURWRVJUSVNFX0NBUFM7CisJYXRjc19pbnB1dC5yZXFfdHlwZSA9IEFUQ1NfUENJRV9M SU5LX1NQRUVEOworCWF0Y3NfaW5wdXQucGVyZl9yZXEgPSBwZXJmX3JlcTsKKworCWF0Y3Nfb3V0 cHV0LnNpemUgPSBzaXplb2Yoc3RydWN0IGF0Y3NfcHJlZl9yZXFfaW5wdXQpOworCisJd2hpbGUg KHJldHJ5LS0pIHsKKwkJcmVzdWx0ID0gY2dzX2NhbGxfYWNwaV9tZXRob2QoZGV2aWNlLAorCQkJ CQkJQ0dTX0FDUElfTUVUSE9EX0FUQ1MsCisJCQkJCQlBVENTX0ZVTkNUSU9OX1BDSUVfUEVSRk9S TUFOQ0VfUkVRVUVTVCwKKwkJCQkJCSZhdGNzX2lucHV0LAorCQkJCQkJJmF0Y3Nfb3V0cHV0LAor CQkJCQkJMCwKKwkJCQkJCXNpemVvZihhdGNzX2lucHV0KSwKKwkJCQkJCXNpemVvZihhdGNzX291 dHB1dCkpOworCQlpZiAocmVzdWx0ICE9IDApCisJCQlyZXR1cm4gLUVJTzsKKworCQlzd2l0Y2gg KGF0Y3Nfb3V0cHV0LnJldF92YWwpIHsKKwkJY2FzZSBBVENTX1JFUVVFU1RfUkVGVVNFRDoKKwkJ ZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQljYXNlIEFUQ1NfUkVRVUVTVF9DT01QTEVU RToKKwkJCXJldHVybiAwOworCQljYXNlIEFUQ1NfUkVRVUVTVF9JTl9QUk9HUkVTUzoKKwkJCXVk ZWxheSgxMCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvcHJvY2Vzc3BwdGFibGVzLmMg Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9wcm9jZXNzcHB0YWJsZXMuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzFkM2QyCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvcHJvY2Vzc3BwdGFibGVz LmMKQEAgLTAsMCArMSwxNjYxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTUgQWR2YW5jZWQgTWlj cm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy ZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j bHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1v ZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Ig c2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hv bSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBj b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAor ICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICog T1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4 L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xh Yi5oPgorCisjaW5jbHVkZSAicHJvY2Vzc3BwdGFibGVzLmgiCisjaW5jbHVkZSA8YXRvbS10eXBl cy5oPgorI2luY2x1ZGUgPGF0b21iaW9zLmg+CisjaW5jbHVkZSAicHB0YWJsZS5oIgorI2luY2x1 ZGUgInBvd2VyX3N0YXRlLmgiCisjaW5jbHVkZSAiaHdtZ3IuaCIKKyNpbmNsdWRlICJoYXJkd2Fy ZW1hbmFnZXIuaCIKKworCisjZGVmaW5lIFNJWkVfT0ZfQVRPTV9QUExJQl9FWFRFTkRFREhFQURF Ul9WMiAxMgorI2RlZmluZSBTSVpFX09GX0FUT01fUFBMSUJfRVhURU5ERURIRUFERVJfVjMgMTQK KyNkZWZpbmUgU0laRV9PRl9BVE9NX1BQTElCX0VYVEVOREVESEVBREVSX1Y0IDE2CisjZGVmaW5l IFNJWkVfT0ZfQVRPTV9QUExJQl9FWFRFTkRFREhFQURFUl9WNSAxOAorI2RlZmluZSBTSVpFX09G X0FUT01fUFBMSUJfRVhURU5ERURIRUFERVJfVjYgMjAKKyNkZWZpbmUgU0laRV9PRl9BVE9NX1BQ TElCX0VYVEVOREVESEVBREVSX1Y3IDIyCisjZGVmaW5lIFNJWkVfT0ZfQVRPTV9QUExJQl9FWFRF TkRFREhFQURFUl9WOCAyNAorI2RlZmluZSBTSVpFX09GX0FUT01fUFBMSUJfRVhURU5ERURIRUFE RVJfVjkgMjYKKworI2RlZmluZSBOVU1fQklUU19DTE9DS19JTkZPX0FSUkFZX0lOREVYIDYKKwor c3RhdGljIHVpbnQxNl90IGdldF92Y2VfdGFibGVfb2Zmc2V0KHN0cnVjdCBwcF9od21nciAqaHdt Z3IsCisJCQljb25zdCBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFICpwb3dlcnBsYXlfdGFibGUp Cit7CisJdWludDE2X3QgdmNlX3RhYmxlX29mZnNldCA9IDA7CisKKwlpZiAobGUxNl90b19jcHUo cG93ZXJwbGF5X3RhYmxlLT51c1RhYmxlU2l6ZSkgPj0KKwkgICBzaXplb2YoQVRPTV9QUExJQl9Q T1dFUlBMQVlUQUJMRTMpKSB7CisJCWNvbnN0IEFUT01fUFBMSUJfUE9XRVJQTEFZVEFCTEUzICpw b3dlcnBsYXlfdGFibGUzID0KKwkJCShjb25zdCBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFMyAq KXBvd2VycGxheV90YWJsZTsKKworCQlpZiAocG93ZXJwbGF5X3RhYmxlMy0+dXNFeHRlbmRlbmRl ZEhlYWRlck9mZnNldCA+IDApIHsKKwkJCWNvbnN0IEFUT01fUFBMSUJfRVhURU5ERURIRUFERVIg ICpleHRlbmRlZF9oZWFkZXIgPQorCQkJCQkJKGNvbnN0IEFUT01fUFBMSUJfRVhURU5ERURIRUFE RVIgKikKKwkJCQkJCSgoKHVuc2lnbmVkIGxvbmcpcG93ZXJwbGF5X3RhYmxlMykgKworCQkJCQkJ bGUxNl90b19jcHUocG93ZXJwbGF5X3RhYmxlMy0+dXNFeHRlbmRlbmRlZEhlYWRlck9mZnNldCkp OworCQkJaWYgKGxlMTZfdG9fY3B1KGV4dGVuZGVkX2hlYWRlci0+dXNTaXplKSA+PQorCQkJICAg U0laRV9PRl9BVE9NX1BQTElCX0VYVEVOREVESEVBREVSX1YyKQorCQkJCXZjZV90YWJsZV9vZmZz ZXQgPSBsZTE2X3RvX2NwdShleHRlbmRlZF9oZWFkZXItPnVzVkNFVGFibGVPZmZzZXQpOworCQl9 CisJfQorCisJcmV0dXJuIHZjZV90YWJsZV9vZmZzZXQ7Cit9CisKK3N0YXRpYyB1aW50MTZfdCBn ZXRfdmNlX2Nsb2NrX2luZm9fYXJyYXlfb2Zmc2V0KHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCisJ CQljb25zdCBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFICpwb3dlcnBsYXlfdGFibGUpCit7CisJ dWludDE2X3QgdGFibGVfb2Zmc2V0ID0gZ2V0X3ZjZV90YWJsZV9vZmZzZXQoaHdtZ3IsCisJCQkJ CQlwb3dlcnBsYXlfdGFibGUpOworCisJaWYgKHRhYmxlX29mZnNldCA+IDApCisJCXJldHVybiB0 YWJsZV9vZmZzZXQgKyAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1aW50MTZfdCBnZXRf dmNlX2Nsb2NrX2luZm9fYXJyYXlfc2l6ZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAorCQkJY29u c3QgQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRSAqcG93ZXJwbGF5X3RhYmxlKQoreworCXVpbnQx Nl90IHRhYmxlX29mZnNldCA9IGdldF92Y2VfY2xvY2tfaW5mb19hcnJheV9vZmZzZXQoaHdtZ3Is CisJCQkJCQkJcG93ZXJwbGF5X3RhYmxlKTsKKwl1aW50MTZfdCB0YWJsZV9zaXplID0gMDsKKwor CWlmICh0YWJsZV9vZmZzZXQgPiAwKSB7CisJCWNvbnN0IFZDRUNsb2NrSW5mb0FycmF5ICpwID0g KGNvbnN0IFZDRUNsb2NrSW5mb0FycmF5ICopCisJCQkoKCh1bnNpZ25lZCBsb25nKSBwb3dlcnBs YXlfdGFibGUpICsgdGFibGVfb2Zmc2V0KTsKKwkJdGFibGVfc2l6ZSA9IHNpemVvZih1aW50OF90 KSArIHAtPnVjTnVtRW50cmllcyAqIHNpemVvZihWQ0VDbG9ja0luZm8pOworCX0KKworCXJldHVy biB0YWJsZV9zaXplOworfQorCitzdGF0aWMgdWludDE2X3QgZ2V0X3ZjZV9jbG9ja192b2x0YWdl X2xpbWl0X3RhYmxlX29mZnNldChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAorCQkJCWNvbnN0IEFU T01fUFBMSUJfUE9XRVJQTEFZVEFCTEUgKnBvd2VycGxheV90YWJsZSkKK3sKKwl1aW50MTZfdCB0 YWJsZV9vZmZzZXQgPSBnZXRfdmNlX2Nsb2NrX2luZm9fYXJyYXlfb2Zmc2V0KGh3bWdyLAorCQkJ CQkJCXBvd2VycGxheV90YWJsZSk7CisKKwlpZiAodGFibGVfb2Zmc2V0ID4gMCkKKwkJcmV0dXJu IHRhYmxlX29mZnNldCArIGdldF92Y2VfY2xvY2tfaW5mb19hcnJheV9zaXplKGh3bWdyLAorCQkJ CQkJCXBvd2VycGxheV90YWJsZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVpbnQxNl90 IGdldF92Y2VfY2xvY2tfdm9sdGFnZV9saW1pdF90YWJsZV9zaXplKHN0cnVjdCBwcF9od21nciAq aHdtZ3IsCisJCQkJCQkJY29uc3QgQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRSAqcG93ZXJwbGF5 X3RhYmxlKQoreworCXVpbnQxNl90IHRhYmxlX29mZnNldCA9IGdldF92Y2VfY2xvY2tfdm9sdGFn ZV9saW1pdF90YWJsZV9vZmZzZXQoaHdtZ3IsIHBvd2VycGxheV90YWJsZSk7CisJdWludDE2X3Qg dGFibGVfc2l6ZSA9IDA7CisKKwlpZiAodGFibGVfb2Zmc2V0ID4gMCkgeworCQljb25zdCBBVE9N X1BQTElCX1ZDRV9DbG9ja19Wb2x0YWdlX0xpbWl0X1RhYmxlICpwdGFibGUgPQorCQkJKGNvbnN0 IEFUT01fUFBMSUJfVkNFX0Nsb2NrX1ZvbHRhZ2VfTGltaXRfVGFibGUgKikoKCh1bnNpZ25lZCBs b25nKSBwb3dlcnBsYXlfdGFibGUpICsgdGFibGVfb2Zmc2V0KTsKKworCQl0YWJsZV9zaXplID0g c2l6ZW9mKHVpbnQ4X3QpICsgcHRhYmxlLT5udW1FbnRyaWVzICogc2l6ZW9mKEFUT01fUFBMSUJf VkNFX0Nsb2NrX1ZvbHRhZ2VfTGltaXRfUmVjb3JkKTsKKwl9CisJcmV0dXJuIHRhYmxlX3NpemU7 Cit9CisKK3N0YXRpYyB1aW50MTZfdCBnZXRfdmNlX3N0YXRlX3RhYmxlX29mZnNldChzdHJ1Y3Qg cHBfaHdtZ3IgKmh3bWdyLCBjb25zdCBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFICpwb3dlcnBs YXlfdGFibGUpCit7CisJdWludDE2X3QgdGFibGVfb2Zmc2V0ID0gZ2V0X3ZjZV9jbG9ja192b2x0 YWdlX2xpbWl0X3RhYmxlX29mZnNldChod21nciwgcG93ZXJwbGF5X3RhYmxlKTsKKworCWlmICh0 YWJsZV9vZmZzZXQgPiAwKQorCQlyZXR1cm4gdGFibGVfb2Zmc2V0ICsgZ2V0X3ZjZV9jbG9ja192 b2x0YWdlX2xpbWl0X3RhYmxlX3NpemUoaHdtZ3IsIHBvd2VycGxheV90YWJsZSk7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGNvbnN0IEFUT01fUFBMSUJfVkNFX1N0YXRlX1RhYmxlICpnZXRf dmNlX3N0YXRlX3RhYmxlKAorCQkJCQkJc3RydWN0IHBwX2h3bWdyICpod21nciwKKwkJCQkJCWNv bnN0IEFUT01fUFBMSUJfUE9XRVJQTEFZVEFCTEUgKnBvd2VycGxheV90YWJsZSkKK3sKKwl1aW50 MTZfdCB0YWJsZV9vZmZzZXQgPSBnZXRfdmNlX3N0YXRlX3RhYmxlX29mZnNldChod21nciwgcG93 ZXJwbGF5X3RhYmxlKTsKKworCWlmICh0YWJsZV9vZmZzZXQgPiAwKQorCQlyZXR1cm4gKGNvbnN0 IEFUT01fUFBMSUJfVkNFX1N0YXRlX1RhYmxlICopKCgodW5zaWduZWQgbG9uZykgcG93ZXJwbGF5 X3RhYmxlKSArIHRhYmxlX29mZnNldCk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHVp bnQxNl90IGdldF91dmRfdGFibGVfb2Zmc2V0KHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCisJCQlj b25zdCBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFICpwb3dlcnBsYXlfdGFibGUpCit7CisJdWlu dDE2X3QgdXZkX3RhYmxlX29mZnNldCA9IDA7CisKKwlpZiAobGUxNl90b19jcHUocG93ZXJwbGF5 X3RhYmxlLT51c1RhYmxlU2l6ZSkgPj0KKwkgICAgc2l6ZW9mKEFUT01fUFBMSUJfUE9XRVJQTEFZ VEFCTEUzKSkgeworCQljb25zdCBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFMyAqcG93ZXJwbGF5 X3RhYmxlMyA9CisJCQkoY29uc3QgQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRTMgKilwb3dlcnBs YXlfdGFibGU7CisJCWlmIChwb3dlcnBsYXlfdGFibGUzLT51c0V4dGVuZGVuZGVkSGVhZGVyT2Zm c2V0ID4gMCkgeworCQkJY29uc3QgQVRPTV9QUExJQl9FWFRFTkRFREhFQURFUiAgKmV4dGVuZGVk X2hlYWRlciA9CisJCQkJCShjb25zdCBBVE9NX1BQTElCX0VYVEVOREVESEVBREVSICopCisJCQkJ CSgoKHVuc2lnbmVkIGxvbmcpcG93ZXJwbGF5X3RhYmxlMykgKworCQkJCWxlMTZfdG9fY3B1KHBv d2VycGxheV90YWJsZTMtPnVzRXh0ZW5kZW5kZWRIZWFkZXJPZmZzZXQpKTsKKwkJCWlmIChsZTE2 X3RvX2NwdShleHRlbmRlZF9oZWFkZXItPnVzU2l6ZSkgPj0KKwkJCSAgICBTSVpFX09GX0FUT01f UFBMSUJfRVhURU5ERURIRUFERVJfVjMpCisJCQkJdXZkX3RhYmxlX29mZnNldCA9IGxlMTZfdG9f Y3B1KGV4dGVuZGVkX2hlYWRlci0+dXNVVkRUYWJsZU9mZnNldCk7CisJCX0KKwl9CisJcmV0dXJu IHV2ZF90YWJsZV9vZmZzZXQ7Cit9CisKK3N0YXRpYyB1aW50MTZfdCBnZXRfdXZkX2Nsb2NrX2lu Zm9fYXJyYXlfb2Zmc2V0KHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCisJCQkgY29uc3QgQVRPTV9Q UExJQl9QT1dFUlBMQVlUQUJMRSAqcG93ZXJwbGF5X3RhYmxlKQoreworCXVpbnQxNl90IHRhYmxl X29mZnNldCA9IGdldF91dmRfdGFibGVfb2Zmc2V0KGh3bWdyLAorCQkJCQkJICAgIHBvd2VycGxh eV90YWJsZSk7CisKKwlpZiAodGFibGVfb2Zmc2V0ID4gMCkKKwkJcmV0dXJuIHRhYmxlX29mZnNl dCArIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1aW50MTZfdCBnZXRfdXZkX2Nsb2NrX2lu Zm9fYXJyYXlfc2l6ZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAorCQkJY29uc3QgQVRPTV9QUExJ Ql9QT1dFUlBMQVlUQUJMRSAqcG93ZXJwbGF5X3RhYmxlKQoreworCXVpbnQxNl90IHRhYmxlX29m ZnNldCA9IGdldF91dmRfY2xvY2tfaW5mb19hcnJheV9vZmZzZXQoaHdtZ3IsCisJCQkJCQkgICAg cG93ZXJwbGF5X3RhYmxlKTsKKwl1aW50MTZfdCB0YWJsZV9zaXplID0gMDsKKworCWlmICh0YWJs ZV9vZmZzZXQgPiAwKSB7CisJCWNvbnN0IFVWRENsb2NrSW5mb0FycmF5ICpwID0gKGNvbnN0IFVW RENsb2NrSW5mb0FycmF5ICopCisJCQkJCSgoKHVuc2lnbmVkIGxvbmcpIHBvd2VycGxheV90YWJs ZSkKKwkJCQkJKyB0YWJsZV9vZmZzZXQpOworCQl0YWJsZV9zaXplID0gc2l6ZW9mKFVDSEFSKSAr CisJCQkgICAgIHAtPnVjTnVtRW50cmllcyAqIHNpemVvZihVVkRDbG9ja0luZm8pOworCX0KKwor CXJldHVybiB0YWJsZV9zaXplOworfQorCitzdGF0aWMgdWludDE2X3QgZ2V0X3V2ZF9jbG9ja192 b2x0YWdlX2xpbWl0X3RhYmxlX29mZnNldCgKKwkJCXN0cnVjdCBwcF9od21nciAqaHdtZ3IsCisJ CQljb25zdCBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFICpwb3dlcnBsYXlfdGFibGUpCit7CisJ dWludDE2X3QgdGFibGVfb2Zmc2V0ID0gZ2V0X3V2ZF9jbG9ja19pbmZvX2FycmF5X29mZnNldCho d21nciwKKwkJCQkJCSAgICAgcG93ZXJwbGF5X3RhYmxlKTsKKworCWlmICh0YWJsZV9vZmZzZXQg PiAwKQorCQlyZXR1cm4gdGFibGVfb2Zmc2V0ICsKKwkJCWdldF91dmRfY2xvY2tfaW5mb19hcnJh eV9zaXplKGh3bWdyLCBwb3dlcnBsYXlfdGFibGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyB1aW50MTZfdCBnZXRfc2FtdV90YWJsZV9vZmZzZXQoc3RydWN0IHBwX2h3bWdyICpod21nciwK KwkJCWNvbnN0IEFUT01fUFBMSUJfUE9XRVJQTEFZVEFCTEUgKnBvd2VycGxheV90YWJsZSkKK3sK Kwl1aW50MTZfdCBzYW11X3RhYmxlX29mZnNldCA9IDA7CisKKwlpZiAobGUxNl90b19jcHUocG93 ZXJwbGF5X3RhYmxlLT51c1RhYmxlU2l6ZSkgPj0KKwkgICAgc2l6ZW9mKEFUT01fUFBMSUJfUE9X RVJQTEFZVEFCTEUzKSkgeworCQljb25zdCBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFMyAqcG93 ZXJwbGF5X3RhYmxlMyA9CisJCQkoY29uc3QgQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRTMgKilw b3dlcnBsYXlfdGFibGU7CisJCWlmIChwb3dlcnBsYXlfdGFibGUzLT51c0V4dGVuZGVuZGVkSGVh ZGVyT2Zmc2V0ID4gMCkgeworCQkJY29uc3QgQVRPTV9QUExJQl9FWFRFTkRFREhFQURFUiAgKmV4 dGVuZGVkX2hlYWRlciA9CisJCQkJKGNvbnN0IEFUT01fUFBMSUJfRVhURU5ERURIRUFERVIgKikK KwkJCQkoKCh1bnNpZ25lZCBsb25nKXBvd2VycGxheV90YWJsZTMpICsKKwkJCQlsZTE2X3RvX2Nw dShwb3dlcnBsYXlfdGFibGUzLT51c0V4dGVuZGVuZGVkSGVhZGVyT2Zmc2V0KSk7CisJCQlpZiAo bGUxNl90b19jcHUoZXh0ZW5kZWRfaGVhZGVyLT51c1NpemUpID49CisJCQkgICAgU0laRV9PRl9B VE9NX1BQTElCX0VYVEVOREVESEVBREVSX1Y0KQorCQkJCXNhbXVfdGFibGVfb2Zmc2V0ID0gbGUx Nl90b19jcHUoZXh0ZW5kZWRfaGVhZGVyLT51c1NBTVVUYWJsZU9mZnNldCk7CisJCX0KKwl9CisK KwlyZXR1cm4gc2FtdV90YWJsZV9vZmZzZXQ7Cit9CisKK3N0YXRpYyB1aW50MTZfdCBnZXRfc2Ft dV9jbG9ja192b2x0YWdlX2xpbWl0X3RhYmxlX29mZnNldCgKKwkJCXN0cnVjdCBwcF9od21nciAq aHdtZ3IsCisJCQljb25zdCBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFICpwb3dlcnBsYXlfdGFi bGUpCit7CisJdWludDE2X3QgdGFibGVfb2Zmc2V0ID0gZ2V0X3NhbXVfdGFibGVfb2Zmc2V0KGh3 bWdyLAorCQkJCQkgICAgcG93ZXJwbGF5X3RhYmxlKTsKKworCWlmICh0YWJsZV9vZmZzZXQgPiAw KQorCQlyZXR1cm4gdGFibGVfb2Zmc2V0ICsgMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg dWludDE2X3QgZ2V0X2FjcF90YWJsZV9vZmZzZXQoc3RydWN0IHBwX2h3bWdyICpod21nciwKKwkJ CQljb25zdCBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFICpwb3dlcnBsYXlfdGFibGUpCit7CisJ dWludDE2X3QgYWNwX3RhYmxlX29mZnNldCA9IDA7CisKKwlpZiAobGUxNl90b19jcHUocG93ZXJw bGF5X3RhYmxlLT51c1RhYmxlU2l6ZSkgPj0KKwkgICAgc2l6ZW9mKEFUT01fUFBMSUJfUE9XRVJQ TEFZVEFCTEUzKSkgeworCQljb25zdCBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFMyAqcG93ZXJw bGF5X3RhYmxlMyA9CisJCQkoY29uc3QgQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRTMgKilwb3dl cnBsYXlfdGFibGU7CisJCWlmIChwb3dlcnBsYXlfdGFibGUzLT51c0V4dGVuZGVuZGVkSGVhZGVy T2Zmc2V0ID4gMCkgeworCQkJY29uc3QgQVRPTV9QUExJQl9FWFRFTkRFREhFQURFUiAgKnBFeHRl bmRlZEhlYWRlciA9CisJCQkJKGNvbnN0IEFUT01fUFBMSUJfRVhURU5ERURIRUFERVIgKikKKwkJ CQkoKCh1bnNpZ25lZCBsb25nKXBvd2VycGxheV90YWJsZTMpICsKKwkJCQlsZTE2X3RvX2NwdShw b3dlcnBsYXlfdGFibGUzLT51c0V4dGVuZGVuZGVkSGVhZGVyT2Zmc2V0KSk7CisJCQlpZiAobGUx Nl90b19jcHUocEV4dGVuZGVkSGVhZGVyLT51c1NpemUpID49CisJCQkgICAgU0laRV9PRl9BVE9N X1BQTElCX0VYVEVOREVESEVBREVSX1Y2KQorCQkJCWFjcF90YWJsZV9vZmZzZXQgPSBsZTE2X3Rv X2NwdShwRXh0ZW5kZWRIZWFkZXItPnVzQUNQVGFibGVPZmZzZXQpOworCQl9CisJfQorCisJcmV0 dXJuIGFjcF90YWJsZV9vZmZzZXQ7Cit9CisKK3N0YXRpYyB1aW50MTZfdCBnZXRfYWNwX2Nsb2Nr X3ZvbHRhZ2VfbGltaXRfdGFibGVfb2Zmc2V0KAorCQkJCXN0cnVjdCBwcF9od21nciAqaHdtZ3Is CisJCQkJY29uc3QgQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRSAqcG93ZXJwbGF5X3RhYmxlKQor eworCXVpbnQxNl90IHRhYmxlT2Zmc2V0ID0gZ2V0X2FjcF90YWJsZV9vZmZzZXQoaHdtZ3IsIHBv d2VycGxheV90YWJsZSk7CisKKwlpZiAodGFibGVPZmZzZXQgPiAwKQorCQlyZXR1cm4gdGFibGVP ZmZzZXQgKyAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1aW50MTZfdCBnZXRfY2FjcF90 ZHBfdGFibGVfb2Zmc2V0KAorCQkJCXN0cnVjdCBwcF9od21nciAqaHdtZ3IsCisJCQkJY29uc3Qg QVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRSAqcG93ZXJwbGF5X3RhYmxlKQoreworCXVpbnQxNl90 IGNhY1RkcFRhYmxlT2Zmc2V0ID0gMDsKKworCWlmIChsZTE2X3RvX2NwdShwb3dlcnBsYXlfdGFi bGUtPnVzVGFibGVTaXplKSA+PQorCSAgICBzaXplb2YoQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJM RTMpKSB7CisJCWNvbnN0IEFUT01fUFBMSUJfUE9XRVJQTEFZVEFCTEUzICpwb3dlcnBsYXlfdGFi bGUzID0KKwkJCQkoY29uc3QgQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRTMgKilwb3dlcnBsYXlf dGFibGU7CisJCWlmIChwb3dlcnBsYXlfdGFibGUzLT51c0V4dGVuZGVuZGVkSGVhZGVyT2Zmc2V0 ID4gMCkgeworCQkJY29uc3QgQVRPTV9QUExJQl9FWFRFTkRFREhFQURFUiAgKnBFeHRlbmRlZEhl YWRlciA9CisJCQkJCShjb25zdCBBVE9NX1BQTElCX0VYVEVOREVESEVBREVSICopCisJCQkJCSgo KHVuc2lnbmVkIGxvbmcpcG93ZXJwbGF5X3RhYmxlMykgKworCQkJCWxlMTZfdG9fY3B1KHBvd2Vy cGxheV90YWJsZTMtPnVzRXh0ZW5kZW5kZWRIZWFkZXJPZmZzZXQpKTsKKwkJCWlmIChsZTE2X3Rv X2NwdShwRXh0ZW5kZWRIZWFkZXItPnVzU2l6ZSkgPj0KKwkJCSAgICBTSVpFX09GX0FUT01fUFBM SUJfRVhURU5ERURIRUFERVJfVjcpCisJCQkJY2FjVGRwVGFibGVPZmZzZXQgPSBsZTE2X3RvX2Nw dShwRXh0ZW5kZWRIZWFkZXItPnVzUG93ZXJUdW5lVGFibGVPZmZzZXQpOworCQl9CisJfQorCisJ cmV0dXJuIGNhY1RkcFRhYmxlT2Zmc2V0OworfQorCitzdGF0aWMgaW50IGdldF9jYWNfdGRwX3Rh YmxlKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCisJCQkJc3RydWN0IHBobV9jYWNfdGRwX3RhYmxl ICoqcHRhYmxlLAorCQkJCWNvbnN0IEFUT01fUG93ZXJUdW5lX1RhYmxlICp0YWJsZSwKKwkJCQl1 aW50MTZfdCB1c19tYXhpbXVtX3Bvd2VyX2RlbGl2ZXJ5X2xpbWl0KQoreworCXVuc2lnbmVkIGxv bmcgdGFibGVfc2l6ZTsKKwlzdHJ1Y3QgcGhtX2NhY190ZHBfdGFibGUgKnRkcF90YWJsZTsKKwor CXRhYmxlX3NpemUgPSBzaXplb2YodW5zaWduZWQgbG9uZykgKyBzaXplb2Yoc3RydWN0IHBobV9j YWNfdGRwX3RhYmxlKTsKKworCXRkcF90YWJsZSA9IGt6YWxsb2ModGFibGVfc2l6ZSwgR0ZQX0tF Uk5FTCk7CisJaWYgKE5VTEwgPT0gdGRwX3RhYmxlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRk cF90YWJsZS0+dXNURFAgPSBsZTE2X3RvX2NwdSh0YWJsZS0+dXNURFApOworCXRkcF90YWJsZS0+ dXNDb25maWd1cmFibGVURFAgPSBsZTE2X3RvX2NwdSh0YWJsZS0+dXNDb25maWd1cmFibGVURFAp OworCXRkcF90YWJsZS0+dXNUREMgPSBsZTE2X3RvX2NwdSh0YWJsZS0+dXNUREMpOworCXRkcF90 YWJsZS0+dXNCYXR0ZXJ5UG93ZXJMaW1pdCA9IGxlMTZfdG9fY3B1KHRhYmxlLT51c0JhdHRlcnlQ b3dlckxpbWl0KTsKKwl0ZHBfdGFibGUtPnVzU21hbGxQb3dlckxpbWl0ID0gbGUxNl90b19jcHUo dGFibGUtPnVzU21hbGxQb3dlckxpbWl0KTsKKwl0ZHBfdGFibGUtPnVzTG93Q0FDTGVha2FnZSA9 IGxlMTZfdG9fY3B1KHRhYmxlLT51c0xvd0NBQ0xlYWthZ2UpOworCXRkcF90YWJsZS0+dXNIaWdo Q0FDTGVha2FnZSA9IGxlMTZfdG9fY3B1KHRhYmxlLT51c0hpZ2hDQUNMZWFrYWdlKTsKKwl0ZHBf dGFibGUtPnVzTWF4aW11bVBvd2VyRGVsaXZlcnlMaW1pdCA9IHVzX21heGltdW1fcG93ZXJfZGVs aXZlcnlfbGltaXQ7CisKKwkqcHRhYmxlID0gdGRwX3RhYmxlOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB1aW50MTZfdCBnZXRfc2Nsa192ZGRfZ2Z4X3RhYmxlX29mZnNldChzdHJ1Y3QgcHBf aHdtZ3IgKmh3bWdyLAorCQkJY29uc3QgQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRSAqcG93ZXJw bGF5X3RhYmxlKQoreworCXVpbnQxNl90IHNjbGtfdmRkX2dmeF90YWJsZV9vZmZzZXQgPSAwOwor CisJaWYgKGxlMTZfdG9fY3B1KHBvd2VycGxheV90YWJsZS0+dXNUYWJsZVNpemUpID49CisJICAg IHNpemVvZihBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFMykpIHsKKwkJY29uc3QgQVRPTV9QUExJ Ql9QT1dFUlBMQVlUQUJMRTMgKnBvd2VycGxheV90YWJsZTMgPQorCQkJCShjb25zdCBBVE9NX1BQ TElCX1BPV0VSUExBWVRBQkxFMyAqKXBvd2VycGxheV90YWJsZTsKKwkJaWYgKHBvd2VycGxheV90 YWJsZTMtPnVzRXh0ZW5kZW5kZWRIZWFkZXJPZmZzZXQgPiAwKSB7CisJCQljb25zdCBBVE9NX1BQ TElCX0VYVEVOREVESEVBREVSICAqcEV4dGVuZGVkSGVhZGVyID0KKwkJCQkoY29uc3QgQVRPTV9Q UExJQl9FWFRFTkRFREhFQURFUiAqKQorCQkJCSgoKHVuc2lnbmVkIGxvbmcpcG93ZXJwbGF5X3Rh YmxlMykgKworCQkJCWxlMTZfdG9fY3B1KHBvd2VycGxheV90YWJsZTMtPnVzRXh0ZW5kZW5kZWRI ZWFkZXJPZmZzZXQpKTsKKwkJCWlmIChsZTE2X3RvX2NwdShwRXh0ZW5kZWRIZWFkZXItPnVzU2l6 ZSkgPj0KKwkJCSAgICBTSVpFX09GX0FUT01fUFBMSUJfRVhURU5ERURIRUFERVJfVjgpCisJCQkJ c2Nsa192ZGRfZ2Z4X3RhYmxlX29mZnNldCA9CisJCQkJCWxlMTZfdG9fY3B1KHBFeHRlbmRlZEhl YWRlci0+dXNTY2xrVmRkZ2Z4VGFibGVPZmZzZXQpOworCQl9CisJfQorCisJcmV0dXJuIHNjbGtf dmRkX2dmeF90YWJsZV9vZmZzZXQ7Cit9CisKK3N0YXRpYyB1aW50MTZfdCBnZXRfc2Nsa192ZGRf Z2Z4X2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZV9vZmZzZXQoCisJCQlzdHJ1Y3QgcHBf aHdtZ3IgKmh3bWdyLAorCQkJY29uc3QgQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRSAqcG93ZXJw bGF5X3RhYmxlKQoreworCXVpbnQxNl90IHRhYmxlT2Zmc2V0ID0gZ2V0X3NjbGtfdmRkX2dmeF90 YWJsZV9vZmZzZXQoaHdtZ3IsIHBvd2VycGxheV90YWJsZSk7CisKKwlpZiAodGFibGVPZmZzZXQg PiAwKQorCQlyZXR1cm4gdGFibGVPZmZzZXQ7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMg aW50IGdldF9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUoc3RydWN0IHBwX2h3bWdyICpo d21nciwKKwkJc3RydWN0IHBobV9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUgKipwdGFi bGUsCisJCWNvbnN0IEFUT01fUFBMSUJfQ2xvY2tfVm9sdGFnZV9EZXBlbmRlbmN5X1RhYmxlICp0 YWJsZSkKK3sKKworCXVuc2lnbmVkIGxvbmcgdGFibGVfc2l6ZSwgaTsKKwlzdHJ1Y3QgcGhtX2Ns b2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZSAqZGVwX3RhYmxlOworCisJdGFibGVfc2l6ZSA9 IHNpemVvZih1bnNpZ25lZCBsb25nKSArCisJCXNpemVvZihzdHJ1Y3QgcGhtX2Nsb2NrX3ZvbHRh Z2VfZGVwZW5kZW5jeV90YWJsZSkKKwkJKiB0YWJsZS0+dWNOdW1FbnRyaWVzOworCisJZGVwX3Rh YmxlID0ga3phbGxvYyh0YWJsZV9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoTlVMTCA9PSBkZXBf dGFibGUpCisJCXJldHVybiAtRU5PTUVNOworCisJZGVwX3RhYmxlLT5jb3VudCA9ICh1bnNpZ25l ZCBsb25nKXRhYmxlLT51Y051bUVudHJpZXM7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGVwX3RhYmxl LT5jb3VudDsgaSsrKSB7CisJCWRlcF90YWJsZS0+ZW50cmllc1tpXS5jbGsgPQorCQkJKCh1bnNp Z25lZCBsb25nKXRhYmxlLT5lbnRyaWVzW2ldLnVjQ2xvY2tIaWdoIDw8IDE2KSB8CisJCQlsZTE2 X3RvX2NwdSh0YWJsZS0+ZW50cmllc1tpXS51c0Nsb2NrTG93KTsKKwkJCWRlcF90YWJsZS0+ZW50 cmllc1tpXS52ID0KKwkJCQkodW5zaWduZWQgbG9uZylsZTE2X3RvX2NwdSh0YWJsZS0+ZW50cmll c1tpXS51c1ZvbHRhZ2UpOworCX0KKworCSpwdGFibGUgPSBkZXBfdGFibGU7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBnZXRfdmFsaWRfY2xrKHN0cnVjdCBwcF9od21nciAqaHdtZ3Is CisJCQlzdHJ1Y3QgcGhtX2Nsb2NrX2FycmF5ICoqcHRhYmxlLAorCQkJY29uc3Qgc3RydWN0IHBo bV9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUgKnRhYmxlKQoreworCXVuc2lnbmVkIGxv bmcgdGFibGVfc2l6ZSwgaTsKKwlzdHJ1Y3QgcGhtX2Nsb2NrX2FycmF5ICpjbG9ja190YWJsZTsK KworCXRhYmxlX3NpemUgPSBzaXplb2YodW5zaWduZWQgbG9uZykgKyBzaXplb2YodW5zaWduZWQg bG9uZykgKiB0YWJsZS0+Y291bnQ7CisJY2xvY2tfdGFibGUgPSBremFsbG9jKHRhYmxlX3NpemUs IEdGUF9LRVJORUwpOworCWlmIChOVUxMID09IGNsb2NrX3RhYmxlKQorCQlyZXR1cm4gLUVOT01F TTsKKworCWNsb2NrX3RhYmxlLT5jb3VudCA9ICh1bnNpZ25lZCBsb25nKXRhYmxlLT5jb3VudDsK KworCWZvciAoaSA9IDA7IGkgPCBjbG9ja190YWJsZS0+Y291bnQ7IGkrKykKKwkJY2xvY2tfdGFi bGUtPnZhbHVlc1tpXSA9ICh1bnNpZ25lZCBsb25nKXRhYmxlLT5lbnRyaWVzW2ldLmNsazsKKwor CSpwdGFibGUgPSBjbG9ja190YWJsZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdl dF9jbG9ja192b2x0YWdlX2xpbWl0KHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCisJCQlzdHJ1Y3Qg cGhtX2Nsb2NrX2FuZF92b2x0YWdlX2xpbWl0cyAqbGltaXRzLAorCQkJY29uc3QgQVRPTV9QUExJ Ql9DbG9ja19Wb2x0YWdlX0xpbWl0X1RhYmxlICp0YWJsZSkKK3sKKwlsaW1pdHMtPnNjbGsgPSAo KHVuc2lnbmVkIGxvbmcpdGFibGUtPmVudHJpZXNbMF0udWNTY2xrSGlnaCA8PCAxNikgfAorCQkJ bGUxNl90b19jcHUodGFibGUtPmVudHJpZXNbMF0udXNTY2xrTG93KTsKKwlsaW1pdHMtPm1jbGsg PSAoKHVuc2lnbmVkIGxvbmcpdGFibGUtPmVudHJpZXNbMF0udWNNY2xrSGlnaCA8PCAxNikgfAor CQkJbGUxNl90b19jcHUodGFibGUtPmVudHJpZXNbMF0udXNNY2xrTG93KTsKKwlsaW1pdHMtPnZk ZGMgPSAodW5zaWduZWQgbG9uZylsZTE2X3RvX2NwdSh0YWJsZS0+ZW50cmllc1swXS51c1ZkZGMp OworCWxpbWl0cy0+dmRkY2kgPSAodW5zaWduZWQgbG9uZylsZTE2X3RvX2NwdSh0YWJsZS0+ZW50 cmllc1swXS51c1ZkZGNpKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHNldF9o d19jYXAoc3RydWN0IHBwX2h3bWdyICpod21nciwgYm9vbCBlbmFibGUsCisJCSAgICAgICBlbnVt IHBobV9wbGF0Zm9ybV9jYXBzIGNhcCkKK3sKKwlpZiAoZW5hYmxlKQorCQlwaG1fY2FwX3NldCho d21nci0+cGxhdGZvcm1fZGVzY3JpcHRvci5wbGF0Zm9ybUNhcHMsIGNhcCk7CisJZWxzZQorCQlw aG1fY2FwX3Vuc2V0KGh3bWdyLT5wbGF0Zm9ybV9kZXNjcmlwdG9yLnBsYXRmb3JtQ2FwcywgY2Fw KTsKK30KKworc3RhdGljIGludCBzZXRfcGxhdGZvcm1fY2FwcyhzdHJ1Y3QgcHBfaHdtZ3IgKmh3 bWdyLAorCQkJdW5zaWduZWQgbG9uZyBwb3dlcnBsYXlfY2FwcykKK3sKKwlzZXRfaHdfY2FwKAor CQlod21nciwKKwkJMCAhPSAocG93ZXJwbGF5X2NhcHMgJiBBVE9NX1BQX1BMQVRGT1JNX0NBUF9Q T1dFUlBMQVkpLAorCQlQSE1fUGxhdGZvcm1DYXBzX1Bvd2VyUGxheVN1cHBvcnQKKwkpOworCisJ c2V0X2h3X2NhcCgKKwkJaHdtZ3IsCisJCTAgIT0gKHBvd2VycGxheV9jYXBzICYgQVRPTV9QUF9Q TEFURk9STV9DQVBfU0JJT1NQT1dFUlNPVVJDRSksCisJCVBITV9QbGF0Zm9ybUNhcHNfQmlvc1Bv d2VyU291cmNlQ29udHJvbAorCSk7CisKKwlzZXRfaHdfY2FwKAorCQlod21nciwKKwkJMCAhPSAo cG93ZXJwbGF5X2NhcHMgJiBBVE9NX1BQX1BMQVRGT1JNX0NBUF9BU1BNX0wwcyksCisJCVBITV9Q bGF0Zm9ybUNhcHNfRW5hYmxlQVNQTUwwcworCSk7CisKKwlzZXRfaHdfY2FwKAorCQlod21nciwK KwkJMCAhPSAocG93ZXJwbGF5X2NhcHMgJiBBVE9NX1BQX1BMQVRGT1JNX0NBUF9BU1BNX0wxKSwK KwkJUEhNX1BsYXRmb3JtQ2Fwc19FbmFibGVBU1BNTDEKKwkpOworCisJc2V0X2h3X2NhcCgKKwkJ aHdtZ3IsCisJCTAgIT0gKHBvd2VycGxheV9jYXBzICYgQVRPTV9QUF9QTEFURk9STV9DQVBfQkFD S0JJQVMpLAorCQlQSE1fUGxhdGZvcm1DYXBzX0VuYWJsZUJhY2tiaWFzCisJKTsKKworCXNldF9o d19jYXAoCisJCWh3bWdyLAorCQkwICE9IChwb3dlcnBsYXlfY2FwcyAmIEFUT01fUFBfUExBVEZP Uk1fQ0FQX0hBUkRXQVJFREMpLAorCQlQSE1fUGxhdGZvcm1DYXBzX0F1dG9tYXRpY0RDVHJhbnNp dGlvbgorCSk7CisKKwlzZXRfaHdfY2FwKAorCQlod21nciwKKwkJMCAhPSAocG93ZXJwbGF5X2Nh cHMgJiBBVE9NX1BQX1BMQVRGT1JNX0NBUF9HRU1JTklQUklNQVJZKSwKKwkJUEhNX1BsYXRmb3Jt Q2Fwc19HZW1pbmlQcmltYXJ5CisJKTsKKworCXNldF9od19jYXAoCisJCWh3bWdyLAorCQkwICE9 IChwb3dlcnBsYXlfY2FwcyAmIEFUT01fUFBfUExBVEZPUk1fQ0FQX1NURVBWRERDKSwKKwkJUEhN X1BsYXRmb3JtQ2Fwc19TdGVwVmRkYworCSk7CisKKwlzZXRfaHdfY2FwKAorCQlod21nciwKKwkJ MCAhPSAocG93ZXJwbGF5X2NhcHMgJiBBVE9NX1BQX1BMQVRGT1JNX0NBUF9WT0xUQUdFQ09OVFJP TCksCisJCVBITV9QbGF0Zm9ybUNhcHNfRW5hYmxlVm9sdGFnZUNvbnRyb2wKKwkpOworCisJc2V0 X2h3X2NhcCgKKwkJaHdtZ3IsCisJCTAgIT0gKHBvd2VycGxheV9jYXBzICYgQVRPTV9QUF9QTEFU Rk9STV9DQVBfU0lERVBPUlRDT05UUk9MKSwKKwkJUEhNX1BsYXRmb3JtQ2Fwc19FbmFibGVTaWRl cG9ydENvbnRyb2wKKwkpOworCisJc2V0X2h3X2NhcCgKKwkJaHdtZ3IsCisJCTAgIT0gKHBvd2Vy cGxheV9jYXBzICYgQVRPTV9QUF9QTEFURk9STV9DQVBfVFVSTk9GRlBMTF9BU1BNTDEpLAorCQlQ SE1fUGxhdGZvcm1DYXBzX1R1cm5PZmZQbGxfQVNQTUwxCisJKTsKKworCXNldF9od19jYXAoCisJ CWh3bWdyLAorCQkwICE9IChwb3dlcnBsYXlfY2FwcyAmIEFUT01fUFBfUExBVEZPUk1fQ0FQX0hU TElOS0NPTlRST0wpLAorCQlQSE1fUGxhdGZvcm1DYXBzX0VuYWJsZUhUTGlua0NvbnRyb2wKKwkp OworCisJc2V0X2h3X2NhcCgKKwkJaHdtZ3IsCisJCTAgIT0gKHBvd2VycGxheV9jYXBzICYgQVRP TV9QUF9QTEFURk9STV9DQVBfTVZERENPTlRST0wpLAorCQlQSE1fUGxhdGZvcm1DYXBzX0VuYWJs ZU1WRERDb250cm9sCisJKTsKKworCXNldF9od19jYXAoCisJCWh3bWdyLAorCQkwICE9IChwb3dl cnBsYXlfY2FwcyAmIEFUT01fUFBfUExBVEZPUk1fQ0FQX1ZERENJX0NPTlRST0wpLAorCQlQSE1f UGxhdGZvcm1DYXBzX0NvbnRyb2xWRERDSQorCSk7CisKKwlzZXRfaHdfY2FwKAorCQlod21nciwK KwkJMCAhPSAocG93ZXJwbGF5X2NhcHMgJiBBVE9NX1BQX1BMQVRGT1JNX0NBUF9SRUdVTEFUT1Jf SE9UKSwKKwkJUEhNX1BsYXRmb3JtQ2Fwc19SZWd1bGF0b3JIb3QKKwkpOworCisJc2V0X2h3X2Nh cCgKKwkJaHdtZ3IsCisJCTAgIT0gKHBvd2VycGxheV9jYXBzICYgQVRPTV9QUF9QTEFURk9STV9D QVBfR09UT19CT09UX09OX0FMRVJUKSwKKwkJUEhNX1BsYXRmb3JtQ2Fwc19Cb290U3RhdGVPbkFs ZXJ0CisJKTsKKworCXNldF9od19jYXAoCisJCWh3bWdyLAorCQkwICE9IChwb3dlcnBsYXlfY2Fw cyAmIEFUT01fUFBfUExBVEZPUk1fQ0FQX0RPTlRfV0FJVF9GT1JfVkJMQU5LX09OX0FMRVJUKSwK KwkJUEhNX1BsYXRmb3JtQ2Fwc19Eb250V2FpdEZvclZCbGFua09uQWxlcnQKKwkpOworCisJc2V0 X2h3X2NhcCgKKwkJaHdtZ3IsCisJCTAgIT0gKHBvd2VycGxheV9jYXBzICYgQVRPTV9QUF9QTEFU Rk9STV9DQVBfQkFDTyksCisJCVBITV9QbGF0Zm9ybUNhcHNfQkFDTworCSk7CisKKwlzZXRfaHdf Y2FwKAorCQlod21nciwKKwkJMCAhPSAocG93ZXJwbGF5X2NhcHMgJiBBVE9NX1BQX1BMQVRGT1JN X0NBUF9ORVdfQ0FDX1ZPTFRBR0UpLAorCQlQSE1fUGxhdGZvcm1DYXBzX05ld0NBQ1ZvbHRhZ2UK KwkpOworCisJc2V0X2h3X2NhcCgKKwkJaHdtZ3IsCisJCTAgIT0gKHBvd2VycGxheV9jYXBzICYg QVRPTV9QUF9QTEFURk9STV9DQVBfUkVWRVJUX0dQSU81X1BPTEFSSVRZKSwKKwkJUEhNX1BsYXRm b3JtQ2Fwc19SZXZlcnRHUElPNVBvbGFyaXR5CisJKTsKKworCXNldF9od19jYXAoCisJCWh3bWdy LAorCQkwICE9IChwb3dlcnBsYXlfY2FwcyAmIEFUT01fUFBfUExBVEZPUk1fQ0FQX09VVFBVVF9U SEVSTUFMMkdQSU8xNyksCisJCVBITV9QbGF0Zm9ybUNhcHNfVGhlcm1hbDJHUElPMTcKKwkpOwor CisJc2V0X2h3X2NhcCgKKwkJaHdtZ3IsCisJCTAgIT0gKHBvd2VycGxheV9jYXBzICYgQVRPTV9Q UF9QTEFURk9STV9DQVBfVlJIT1RfR1BJT19DT05GSUdVUkFCTEUpLAorCQlQSE1fUGxhdGZvcm1D YXBzX1ZSSG90R1BJT0NvbmZpZ3VyYWJsZQorCSk7CisKKwlzZXRfaHdfY2FwKAorCQlod21nciwK KwkJMCAhPSAocG93ZXJwbGF5X2NhcHMgJiBBVE9NX1BQX1BMQVRGT1JNX0NBUF9URU1QX0lOVkVS U0lPTiksCisJCVBITV9QbGF0Zm9ybUNhcHNfVGVtcEludmVyc2lvbgorCSk7CisKKwlzZXRfaHdf Y2FwKAorCQlod21nciwKKwkJMCAhPSAocG93ZXJwbGF5X2NhcHMgJiBBVE9NX1BQX1BMQVRGT1JN X0NBUF9FVlYpLAorCQlQSE1fUGxhdGZvcm1DYXBzX0VWVgorCSk7CisKKwlzZXRfaHdfY2FwKAor CQlod21nciwKKwkJMCAhPSAocG93ZXJwbGF5X2NhcHMgJiBBVE9NX1BQX1BMQVRGT1JNX0NPTUJJ TkVfUENDX1dJVEhfVEhFUk1BTF9TSUdOQUwpLAorCQlQSE1fUGxhdGZvcm1DYXBzX0NvbWJpbmVQ Q0NXaXRoVGhlcm1hbFNpZ25hbAorCSk7CisKKwlzZXRfaHdfY2FwKAorCQlod21nciwKKwkJMCAh PSAocG93ZXJwbGF5X2NhcHMgJiBBVE9NX1BQX1BMQVRGT1JNX0xPQURfUE9TVF9QUk9EVUNUSU9O X0ZJUk1XQVJFKSwKKwkJUEhNX1BsYXRmb3JtQ2Fwc19Mb2FkUG9zdFByb2R1Y3Rpb25GaXJtd2Fy ZQorCSk7CisKKwlzZXRfaHdfY2FwKAorCQlod21nciwKKwkJMCAhPSAocG93ZXJwbGF5X2NhcHMg JiBBVE9NX1BQX1BMQVRGT1JNX0NBUF9ESVNBQkxFX1VTSU5HX0FDVFVBTF9URU1QRVJBVFVSRV9G T1JfUE9XRVJfQ0FMQyksCisJCVBITV9QbGF0Zm9ybUNhcHNfRGlzYWJsZVVzaW5nQWN0dWFsVGVt cGVyYXR1cmVGb3JQb3dlckNhbGMKKwkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQUF9T dGF0ZUNsYXNzaWZpY2F0aW9uRmxhZ3MgbWFrZV9jbGFzc2lmaWNhdGlvbl9mbGFncygKKwkJCQkJ CSAgIHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCisJCQkJCQkgICAgVVNIT1JUIGNsYXNzaWZpY2F0 aW9uLAorCQkJCQkJICAgVVNIT1JUIGNsYXNzaWZpY2F0aW9uMikKK3sKKwlQUF9TdGF0ZUNsYXNz aWZpY2F0aW9uRmxhZ3MgcmVzdWx0ID0gMDsKKworCWlmIChjbGFzc2lmaWNhdGlvbiAmIEFUT01f UFBMSUJfQ0xBU1NJRklDQVRJT05fQk9PVCkKKwkJcmVzdWx0IHw9IFBQX1N0YXRlQ2xhc3NpZmlj YXRpb25GbGFnX0Jvb3Q7CisKKwlpZiAoY2xhc3NpZmljYXRpb24gJiBBVE9NX1BQTElCX0NMQVNT SUZJQ0FUSU9OX1RIRVJNQUwpCisJCXJlc3VsdCB8PSBQUF9TdGF0ZUNsYXNzaWZpY2F0aW9uRmxh Z19UaGVybWFsOworCisJaWYgKGNsYXNzaWZpY2F0aW9uICYKKwkJCUFUT01fUFBMSUJfQ0xBU1NJ RklDQVRJT05fTElNSVRFRFBPV0VSU09VUkNFKQorCQlyZXN1bHQgfD0gUFBfU3RhdGVDbGFzc2lm aWNhdGlvbkZsYWdfTGltaXRlZFBvd2VyU291cmNlOworCisJaWYgKGNsYXNzaWZpY2F0aW9uICYg QVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9SRVNUKQorCQlyZXN1bHQgfD0gUFBfU3RhdGVDbGFz c2lmaWNhdGlvbkZsYWdfUmVzdDsKKworCWlmIChjbGFzc2lmaWNhdGlvbiAmIEFUT01fUFBMSUJf Q0xBU1NJRklDQVRJT05fRk9SQ0VEKQorCQlyZXN1bHQgfD0gUFBfU3RhdGVDbGFzc2lmaWNhdGlv bkZsYWdfRm9yY2VkOworCisJaWYgKGNsYXNzaWZpY2F0aW9uICYgQVRPTV9QUExJQl9DTEFTU0lG SUNBVElPTl8zRFBFUkZPUk1BTkNFKQorCQlyZXN1bHQgfD0gUFBfU3RhdGVDbGFzc2lmaWNhdGlv bkZsYWdfM0RQZXJmb3JtYW5jZTsKKworCisJaWYgKGNsYXNzaWZpY2F0aW9uICYgQVRPTV9QUExJ Ql9DTEFTU0lGSUNBVElPTl9PVkVSRFJJVkVURU1QTEFURSkKKwkJcmVzdWx0IHw9IFBQX1N0YXRl Q2xhc3NpZmljYXRpb25GbGFnX0FDT3ZlcmRyaXZlVGVtcGxhdGU7CisKKwlpZiAoY2xhc3NpZmlj YXRpb24gJiBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX1VWRFNUQVRFKQorCQlyZXN1bHQgfD0g UFBfU3RhdGVDbGFzc2lmaWNhdGlvbkZsYWdfVXZkOworCisJaWYgKGNsYXNzaWZpY2F0aW9uICYg QVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9IRFNUQVRFKQorCQlyZXN1bHQgfD0gUFBfU3RhdGVD bGFzc2lmaWNhdGlvbkZsYWdfVXZkSEQ7CisKKwlpZiAoY2xhc3NpZmljYXRpb24gJiBBVE9NX1BQ TElCX0NMQVNTSUZJQ0FUSU9OX1NEU1RBVEUpCisJCXJlc3VsdCB8PSBQUF9TdGF0ZUNsYXNzaWZp Y2F0aW9uRmxhZ19VdmRTRDsKKworCWlmIChjbGFzc2lmaWNhdGlvbiAmIEFUT01fUFBMSUJfQ0xB U1NJRklDQVRJT05fSEQyU1RBVEUpCisJCXJlc3VsdCB8PSBQUF9TdGF0ZUNsYXNzaWZpY2F0aW9u RmxhZ19IRDI7CisKKwlpZiAoY2xhc3NpZmljYXRpb24gJiBBVE9NX1BQTElCX0NMQVNTSUZJQ0FU SU9OX0FDUEkpCisJCXJlc3VsdCB8PSBQUF9TdGF0ZUNsYXNzaWZpY2F0aW9uRmxhZ19BQ1BJOwor CisJaWYgKGNsYXNzaWZpY2F0aW9uMiAmIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT04yX0xJTUlU RURQT1dFUlNPVVJDRV8yKQorCQlyZXN1bHQgfD0gUFBfU3RhdGVDbGFzc2lmaWNhdGlvbkZsYWdf TGltaXRlZFBvd2VyU291cmNlXzI7CisKKworCWlmIChjbGFzc2lmaWNhdGlvbjIgJiBBVE9NX1BQ TElCX0NMQVNTSUZJQ0FUSU9OMl9VTFYpCisJCXJlc3VsdCB8PSBQUF9TdGF0ZUNsYXNzaWZpY2F0 aW9uRmxhZ19VTFY7CisKKwlpZiAoY2xhc3NpZmljYXRpb24yICYgQVRPTV9QUExJQl9DTEFTU0lG SUNBVElPTjJfTVZDKQorCQlyZXN1bHQgfD0gUFBfU3RhdGVDbGFzc2lmaWNhdGlvbkZsYWdfVXZk TVZDOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBpbml0X25vbl9jbG9ja19m aWVsZHMoc3RydWN0IHBwX2h3bWdyICpod21nciwKKwkJCQkJCXN0cnVjdCBwcF9wb3dlcl9zdGF0 ZSAqcHMsCisJCQkJCQkJICAgIHVpbnQ4X3QgdmVyc2lvbiwKKwkJCSBjb25zdCBBVE9NX1BQTElC X05PTkNMT0NLX0lORk8gKnBub25fY2xvY2tfaW5mbykgeworCXVuc2lnbmVkIGxvbmcgcnJyX2lu ZGV4OworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJcHMtPmNsYXNzaWZpY2F0aW9uLnVpX2xhYmVs ID0gKGxlMTZfdG9fY3B1KHBub25fY2xvY2tfaW5mby0+dXNDbGFzc2lmaWNhdGlvbikgJgorCQkJ CQlBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX1VJX01BU0spID4+IEFUT01fUFBMSUJfQ0xBU1NJ RklDQVRJT05fVUlfU0hJRlQ7CisJcHMtPmNsYXNzaWZpY2F0aW9uLmZsYWdzID0gbWFrZV9jbGFz c2lmaWNhdGlvbl9mbGFncyhod21nciwKKwkJCQlsZTE2X3RvX2NwdShwbm9uX2Nsb2NrX2luZm8t PnVzQ2xhc3NpZmljYXRpb24pLAorCQkJCWxlMTZfdG9fY3B1KHBub25fY2xvY2tfaW5mby0+dXND bGFzc2lmaWNhdGlvbjIpKTsKKworCXBzLT5jbGFzc2lmaWNhdGlvbi50ZW1wb3Jhcnlfc3RhdGUg PSBmYWxzZTsKKwlwcy0+Y2xhc3NpZmljYXRpb24udG9fYmVfZGVsZXRlZCA9IGZhbHNlOworCXRt cCA9IGxlMzJfdG9fY3B1KHBub25fY2xvY2tfaW5mby0+dWxDYXBzQW5kU2V0dGluZ3MpICYKKwkJ QVRPTV9QUExJQl9TSU5HTEVfRElTUExBWV9PTkxZOworCisJcHMtPnZhbGlkYXRpb24uc2luZ2xl RGlzcGxheU9ubHkgPSAoMCAhPSB0bXApOworCisJdG1wID0gbGUzMl90b19jcHUocG5vbl9jbG9j a19pbmZvLT51bENhcHNBbmRTZXR0aW5ncykgJgorCQlBVE9NX1BQTElCX0RJU0FMTE9XX09OX0RD OworCisJcHMtPnZhbGlkYXRpb24uZGlzYWxsb3dPbkRDID0gKDAgIT0gdG1wKTsKKworCXBzLT5w Y2llLmxhbmVzID0gKChsZTMyX3RvX2NwdShwbm9uX2Nsb2NrX2luZm8tPnVsQ2Fwc0FuZFNldHRp bmdzKSAmCisJCQkJQVRPTV9QUExJQl9QQ0lFX0xJTktfV0lEVEhfTUFTSykgPj4KKwkJCQlBVE9N X1BQTElCX1BDSUVfTElOS19XSURUSF9TSElGVCkgKyAxOworCisJcHMtPnBjaWUubGFuZXMgPSAw OworCisJcHMtPmRpc3BsYXkuZGlzYWJsZUZyYW1lTW9kdWxhdGlvbiA9IGZhbHNlOworCisJcnJy X2luZGV4ID0gKGxlMzJfdG9fY3B1KHBub25fY2xvY2tfaW5mby0+dWxDYXBzQW5kU2V0dGluZ3Mp ICYKKwkJCUFUT01fUFBMSUJfTElNSVRFRF9SRUZSRVNIUkFURV9WQUxVRV9NQVNLKSA+PgorCQkJ QVRPTV9QUExJQl9MSU1JVEVEX1JFRlJFU0hSQVRFX1ZBTFVFX1NISUZUOworCisJaWYgKHJycl9p bmRleCAhPSBBVE9NX1BQTElCX0xJTUlURURfUkVGUkVTSFJBVEVfVU5MSU1JVEVEKSB7CisJCXN0 YXRpYyBjb25zdCB1aW50OF90IGxvb2tfdXBbKEFUT01fUFBMSUJfTElNSVRFRF9SRUZSRVNIUkFU RV9WQUxVRV9NQVNLID4+IEFUT01fUFBMSUJfTElNSVRFRF9SRUZSRVNIUkFURV9WQUxVRV9TSElG VCkgKyAxXSA9IFwKKwkJCQkJCQkJeyAwLCA1MCwgMCB9OworCisJCXBzLT5kaXNwbGF5LnJlZnJl c2hyYXRlU291cmNlID0gUFBfUmVmcmVzaHJhdGVTb3VyY2VfRXhwbGljaXQ7CisJCXBzLT5kaXNw bGF5LmV4cGxpY2l0UmVmcmVzaHJhdGUgPSBsb29rX3VwW3Jycl9pbmRleF07CisJCXBzLT5kaXNw bGF5LmxpbWl0UmVmcmVzaHJhdGUgPSB0cnVlOworCisJCWlmIChwcy0+ZGlzcGxheS5leHBsaWNp dFJlZnJlc2hyYXRlID09IDApCisJCQlwcy0+ZGlzcGxheS5saW1pdFJlZnJlc2hyYXRlID0gZmFs c2U7CisJfSBlbHNlCisJCXBzLT5kaXNwbGF5LmxpbWl0UmVmcmVzaHJhdGUgPSBmYWxzZTsKKwor CXRtcCA9IGxlMzJfdG9fY3B1KHBub25fY2xvY2tfaW5mby0+dWxDYXBzQW5kU2V0dGluZ3MpICYK KwkJQVRPTV9QUExJQl9FTkFCTEVfVkFSSUJSSUdIVDsKKworCXBzLT5kaXNwbGF5LmVuYWJsZVZh cmlCcmlnaHQgPSAoMCAhPSB0bXApOworCisJdG1wID0gbGUzMl90b19jcHUocG5vbl9jbG9ja19p bmZvLT51bENhcHNBbmRTZXR0aW5ncykgJgorCQlBVE9NX1BQTElCX1NXU1RBVEVfTUVNT1JZX0RM TF9PRkY7CisKKwlwcy0+bWVtb3J5LmRsbE9mZiA9ICgwICE9IHRtcCk7CisKKwlwcy0+bWVtb3J5 Lm0zYXJiID0gKHVpbnQ4X3QpKGxlMzJfdG9fY3B1KHBub25fY2xvY2tfaW5mby0+dWxDYXBzQW5k U2V0dGluZ3MpICYKKwkJCQkJCUFUT01fUFBMSUJfTTNBUkJfTUFTSykgPj4gQVRPTV9QUExJQl9N M0FSQl9TSElGVDsKKworCXBzLT50ZW1wZXJhdHVyZXMubWluID0gUFBfVEVNUEVSQVRVUkVfVU5J VFNfUEVSX0NFTlRJR1JBREVTICoKKwkJCQkgICAgIHBub25fY2xvY2tfaW5mby0+dWNNaW5UZW1w ZXJhdHVyZTsKKworCXBzLT50ZW1wZXJhdHVyZXMubWF4ID0gUFBfVEVNUEVSQVRVUkVfVU5JVFNf UEVSX0NFTlRJR1JBREVTICoKKwkJCQkgICAgIHBub25fY2xvY2tfaW5mby0+dWNNYXhUZW1wZXJh dHVyZTsKKworCXRtcCA9IGxlMzJfdG9fY3B1KHBub25fY2xvY2tfaW5mby0+dWxDYXBzQW5kU2V0 dGluZ3MpICYKKwkJQVRPTV9QUExJQl9TT0ZUV0FSRV9ESVNBQkxFX0xPQURCQUxBTkNJTkc7CisK Kwlwcy0+c29mdHdhcmUuZGlzYWJsZUxvYWRCYWxhbmNpbmcgPSB0bXA7CisKKwl0bXAgPSBsZTMy X3RvX2NwdShwbm9uX2Nsb2NrX2luZm8tPnVsQ2Fwc0FuZFNldHRpbmdzKSAmCisJCUFUT01fUFBM SUJfU09GVFdBUkVfRU5BQkxFX1NMRUVQX0ZPUl9USU1FU1RBTVBTOworCisJcHMtPnNvZnR3YXJl LmVuYWJsZVNsZWVwRm9yVGltZXN0YW1wcyA9ICgwICE9IHRtcCk7CisKKwlwcy0+dmFsaWRhdGlv bi5zdXBwb3J0ZWRQb3dlckxldmVscyA9IHBub25fY2xvY2tfaW5mby0+dWNSZXF1aXJlZFBvd2Vy OworCisJaWYgKEFUT01fUFBMSUJfTk9OQ0xPQ0tJTkZPX1ZFUjEgPCB2ZXJzaW9uKSB7CisJCXBz LT51dmRfY2xvY2tzLlZDTEsgPSBwbm9uX2Nsb2NrX2luZm8tPnVsVkNMSzsKKwkJcHMtPnV2ZF9j bG9ja3MuRENMSyA9IHBub25fY2xvY2tfaW5mby0+dWxEQ0xLOworCX0gZWxzZSB7CisJCXBzLT51 dmRfY2xvY2tzLlZDTEsgPSAwOworCQlwcy0+dXZkX2Nsb2Nrcy5EQ0xLID0gMDsKKwl9CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIFVMT05HIHNpemVfb2ZfZW50cnlfdjIoVUxPTkcgbnVtX2Rw bV9sZXZlbHMpCit7CisJcmV0dXJuIChzaXplb2YoVUNIQVIpICsgc2l6ZW9mKFVDSEFSKSArCisJ CQkobnVtX2RwbV9sZXZlbHMgKiBzaXplb2YoVUNIQVIpKSk7Cit9CisKK3N0YXRpYyBjb25zdCBB VE9NX1BQTElCX1NUQVRFX1YyICpnZXRfc3RhdGVfZW50cnlfdjIoCisJCQkJCWNvbnN0IFN0YXRl QXJyYXkgKiBwc3RhdGVfYXJyYXlzLAorCQkJCQkJCSBVTE9ORyBlbnRyeV9pbmRleCkKK3sKKwlV TE9ORyBpOworCWNvbnN0IEFUT01fUFBMSUJfU1RBVEVfVjIgKnBzdGF0ZTsKKworCXBzdGF0ZSA9 IHBzdGF0ZV9hcnJheXMtPnN0YXRlczsKKwlpZiAoZW50cnlfaW5kZXggPD0gcHN0YXRlX2FycmF5 cy0+dWNOdW1FbnRyaWVzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBlbnRyeV9pbmRleDsgaSsrKQor CQkJcHN0YXRlID0gKEFUT01fUFBMSUJfU1RBVEVfVjIgKikoCisJCQkJCQkgICh1bnNpZ25lZCBs b25nKXBzdGF0ZSArCisJCQkgICAgIHNpemVfb2ZfZW50cnlfdjIocHN0YXRlLT51Y051bURQTUxl dmVscykpOworCX0KKwlyZXR1cm4gcHN0YXRlOworfQorCisKK3N0YXRpYyBjb25zdCBBVE9NX1BQ TElCX1BPV0VSUExBWVRBQkxFICpnZXRfcG93ZXJwbGF5X3RhYmxlKAorCQkJCSAgICAgc3RydWN0 IHBwX2h3bWdyICpod21ncikKK3sKKwljb25zdCB2b2lkICp0YWJsZV9hZGRyID0gTlVMTDsKKwl1 aW50OF90IGZyZXYsIGNyZXY7CisJdWludDE2X3Qgc2l6ZTsKKworCXRhYmxlX2FkZHIgPSBjZ3Nf YXRvbV9nZXRfZGF0YV90YWJsZShod21nci0+ZGV2aWNlLAorCQkJR2V0SW5kZXhJbnRvTWFzdGVy VGFibGUoREFUQSwgUG93ZXJQbGF5SW5mbyksCisJCQkmc2l6ZSwgJmZyZXYsICZjcmV2KTsKKwor CWh3bWdyLT5zb2Z0X3BwX3RhYmxlID0gdGFibGVfYWRkcjsKKworCXJldHVybiAoY29uc3QgQVRP TV9QUExJQl9QT1dFUlBMQVlUQUJMRSAqKXRhYmxlX2FkZHI7Cit9CisKKworaW50IHBwX3RhYmxl c19nZXRfbnVtX29mX2VudHJpZXMoc3RydWN0IHBwX2h3bWdyICpod21nciwKKwkJCQkgICAgIHVu c2lnbmVkIGxvbmcgKm51bV9vZl9lbnRyaWVzKQoreworCWNvbnN0IFN0YXRlQXJyYXkgKnBzdGF0 ZV9hcnJheXM7CisJY29uc3QgQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRSAqcG93ZXJwbGF5X3Rh YmxlID0gZ2V0X3Bvd2VycGxheV90YWJsZShod21ncik7CisKKwlpZiAocG93ZXJwbGF5X3RhYmxl ID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCWlmIChwb3dlcnBsYXlfdGFibGUtPnNIZWFkZXIu dWNUYWJsZUZvcm1hdFJldmlzaW9uID49IDYpIHsKKwkJcHN0YXRlX2FycmF5cyA9IChTdGF0ZUFy cmF5ICopKCgodW5zaWduZWQgbG9uZylwb3dlcnBsYXlfdGFibGUpICsKKwkJCQkJbGUxNl90b19j cHUocG93ZXJwbGF5X3RhYmxlLT51c1N0YXRlQXJyYXlPZmZzZXQpKTsKKworCQkqbnVtX29mX2Vu dHJpZXMgPSAodW5zaWduZWQgbG9uZykocHN0YXRlX2FycmF5cy0+dWNOdW1FbnRyaWVzKTsKKwl9 IGVsc2UKKwkJKm51bV9vZl9lbnRyaWVzID0gKHVuc2lnbmVkIGxvbmcpKHBvd2VycGxheV90YWJs ZS0+dWNOdW1TdGF0ZXMpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBwcF90YWJsZXNfZ2V0X2Vu dHJ5KHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCisJCQkJdW5zaWduZWQgbG9uZyBlbnRyeV9pbmRl eCwKKwkJCQlzdHJ1Y3QgcHBfcG93ZXJfc3RhdGUgKnBzLAorCQkJIHBwX3RhYmxlc19od19jbG9j a19pbmZvX2NhbGxiYWNrIGZ1bmMpCit7CisJaW50IGk7CisJY29uc3QgU3RhdGVBcnJheSAqcHN0 YXRlX2FycmF5czsKKwljb25zdCBBVE9NX1BQTElCX1NUQVRFX1YyICpwc3RhdGVfZW50cnlfdjI7 CisJY29uc3QgQVRPTV9QUExJQl9OT05DTE9DS19JTkZPICpwbm9uX2Nsb2NrX2luZm87CisJY29u c3QgQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRSAqcG93ZXJwbGF5X3RhYmxlID0gZ2V0X3Bvd2Vy cGxheV90YWJsZShod21ncik7CisJaW50IHJlc3VsdCA9IDA7CisJaW50IHJlcyA9IDA7CisKKwlj b25zdCBDbG9ja0luZm9BcnJheSAqcGNsb2NrX2FycmF5czsKKworCWNvbnN0IE5vbkNsb2NrSW5m b0FycmF5ICpwbm9uX2Nsb2NrX2FycmF5czsKKworCWNvbnN0IEFUT01fUFBMSUJfU1RBVEUgKnBz dGF0ZV9lbnRyeTsKKworCWlmIChwb3dlcnBsYXlfdGFibGUgPT0gTlVMTCkKKwkJcmV0dXJuIC0x OworCisJcHMtPmNsYXNzaWZpY2F0aW9uLmJpb3NfaW5kZXggPSBlbnRyeV9pbmRleDsKKworCWlm IChwb3dlcnBsYXlfdGFibGUtPnNIZWFkZXIudWNUYWJsZUZvcm1hdFJldmlzaW9uID49IDYpIHsK KwkJcHN0YXRlX2FycmF5cyA9IChTdGF0ZUFycmF5ICopKCgodW5zaWduZWQgbG9uZylwb3dlcnBs YXlfdGFibGUpICsKKwkJCQkJbGUxNl90b19jcHUocG93ZXJwbGF5X3RhYmxlLT51c1N0YXRlQXJy YXlPZmZzZXQpKTsKKworCQlpZiAoZW50cnlfaW5kZXggPiBwc3RhdGVfYXJyYXlzLT51Y051bUVu dHJpZXMpCisJCQlyZXR1cm4gLTE7CisKKwkJcHN0YXRlX2VudHJ5X3YyID0gZ2V0X3N0YXRlX2Vu dHJ5X3YyKHBzdGF0ZV9hcnJheXMsIGVudHJ5X2luZGV4KTsKKwkJcGNsb2NrX2FycmF5cyA9IChD bG9ja0luZm9BcnJheSAqKSgoKHVuc2lnbmVkIGxvbmcpcG93ZXJwbGF5X3RhYmxlKSArCisJCQkJ CWxlMTZfdG9fY3B1KHBvd2VycGxheV90YWJsZS0+dXNDbG9ja0luZm9BcnJheU9mZnNldCkpOwor CisJCXBub25fY2xvY2tfYXJyYXlzID0gKE5vbkNsb2NrSW5mb0FycmF5ICopKCgodW5zaWduZWQg bG9uZylwb3dlcnBsYXlfdGFibGUpICsKKwkJCQkJCWxlMTZfdG9fY3B1KHBvd2VycGxheV90YWJs ZS0+dXNOb25DbG9ja0luZm9BcnJheU9mZnNldCkpOworCisJCXBub25fY2xvY2tfaW5mbyA9IChB VE9NX1BQTElCX05PTkNMT0NLX0lORk8gKikoKHVuc2lnbmVkIGxvbmcpKHBub25fY2xvY2tfYXJy YXlzLT5ub25DbG9ja0luZm8pICsKKwkJCQkJKHBzdGF0ZV9lbnRyeV92Mi0+bm9uQ2xvY2tJbmZv SW5kZXggKiBwbm9uX2Nsb2NrX2FycmF5cy0+dWNFbnRyeVNpemUpKTsKKworCQlyZXN1bHQgPSBp bml0X25vbl9jbG9ja19maWVsZHMoaHdtZ3IsIHBzLCBwbm9uX2Nsb2NrX2FycmF5cy0+dWNFbnRy eVNpemUsIHBub25fY2xvY2tfaW5mbyk7CisKKwkJZm9yIChpID0gMDsgaSA8IHBzdGF0ZV9lbnRy eV92Mi0+dWNOdW1EUE1MZXZlbHM7IGkrKykgeworCQkJY29uc3Qgdm9pZCAqcGNsb2NrX2luZm8g PSAoY29uc3Qgdm9pZCAqKSgKKwkJCQkJCQkodW5zaWduZWQgbG9uZykocGNsb2NrX2FycmF5cy0+ Y2xvY2tJbmZvKSArCisJCQkJCQkJKHBzdGF0ZV9lbnRyeV92Mi0+Y2xvY2tJbmZvSW5kZXhbaV0g KiBwY2xvY2tfYXJyYXlzLT51Y0VudHJ5U2l6ZSkpOworCQkJcmVzID0gZnVuYyhod21nciwgJnBz LT5oYXJkd2FyZSwgaSwgcGNsb2NrX2luZm8pOworCQkJaWYgKCgwID09IHJlc3VsdCkgJiYgKDAg IT0gcmVzKSkKKwkJCQlyZXN1bHQgPSByZXM7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoZW50cnlf aW5kZXggPiBwb3dlcnBsYXlfdGFibGUtPnVjTnVtU3RhdGVzKQorCQkJcmV0dXJuIC0xOworCisJ CXBzdGF0ZV9lbnRyeSA9IChBVE9NX1BQTElCX1NUQVRFICopKCh1bnNpZ25lZCBsb25nKXBvd2Vy cGxheV90YWJsZSArIHBvd2VycGxheV90YWJsZS0+dXNTdGF0ZUFycmF5T2Zmc2V0ICsKKwkJCQll bnRyeV9pbmRleCAqIHBvd2VycGxheV90YWJsZS0+dWNTdGF0ZUVudHJ5U2l6ZSk7CisKKwkJcG5v bl9jbG9ja19pbmZvID0gKEFUT01fUFBMSUJfTk9OQ0xPQ0tfSU5GTyAqKSgodW5zaWduZWQgbG9u Zylwb3dlcnBsYXlfdGFibGUgKworCQkJCQkJbGUxNl90b19jcHUocG93ZXJwbGF5X3RhYmxlLT51 c05vbkNsb2NrSW5mb0FycmF5T2Zmc2V0KSArCisJCQkJCQlwc3RhdGVfZW50cnktPnVjTm9uQ2xv Y2tTdGF0ZUluZGV4ICoKKwkJCQkJCXBvd2VycGxheV90YWJsZS0+dWNOb25DbG9ja1NpemUpOwor CisJCXJlc3VsdCA9IGluaXRfbm9uX2Nsb2NrX2ZpZWxkcyhod21nciwgcHMsCisJCQkJCQkJcG93 ZXJwbGF5X3RhYmxlLT51Y05vbkNsb2NrU2l6ZSwKKwkJCQkJCQlwbm9uX2Nsb2NrX2luZm8pOwor CisJCWZvciAoaSA9IDA7IGkgPCBwb3dlcnBsYXlfdGFibGUtPnVjU3RhdGVFbnRyeVNpemUtMTsg aSsrKSB7CisJCQljb25zdCB2b2lkICpwY2xvY2tfaW5mbyA9IChjb25zdCB2b2lkICopKCh1bnNp Z25lZCBsb25nKXBvd2VycGxheV90YWJsZSArCisJCQkJCQlsZTE2X3RvX2NwdShwb3dlcnBsYXlf dGFibGUtPnVzQ2xvY2tJbmZvQXJyYXlPZmZzZXQpICsKKwkJCQkJCXBzdGF0ZV9lbnRyeS0+dWND bG9ja1N0YXRlSW5kaWNlc1tpXSAqCisJCQkJCQlwb3dlcnBsYXlfdGFibGUtPnVjQ2xvY2tJbmZv U2l6ZSk7CisKKwkJCWludCByZXMgPSBmdW5jKGh3bWdyLCAmcHMtPmhhcmR3YXJlLCBpLCBwY2xv Y2tfaW5mbyk7CisKKwkJCWlmICgoMCA9PSByZXN1bHQpICYmICgwICE9IHJlcykpCisJCQkJCXJl c3VsdCA9IHJlczsKKwkJfQorCX0KKworCWlmICgoMCA9PSByZXN1bHQpICYmCisJCSgwICE9IChw cy0+Y2xhc3NpZmljYXRpb24uZmxhZ3MgJiBQUF9TdGF0ZUNsYXNzaWZpY2F0aW9uRmxhZ19Cb290 KSkpCisJCXJlc3VsdCA9IGh3bWdyLT5od21ncl9mdW5jLT5wYXRjaF9ib290X3N0YXRlKGh3bWdy LCAmKHBzLT5oYXJkd2FyZSkpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworCisKK3N0YXRpYyBp bnQgaW5pdF9wb3dlcnBsYXlfdGFibGVzKAorCQkJc3RydWN0IHBwX2h3bWdyICpod21nciwKKwkJ CWNvbnN0IEFUT01fUFBMSUJfUE9XRVJQTEFZVEFCTEUgKnBvd2VycGxheV90YWJsZQorKQorewor CXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgaW5pdF90aGVybWFsX2NvbnRyb2xsZXIoCisJ CQlzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAorCQkJY29uc3QgQVRPTV9QUExJQl9QT1dFUlBMQVlU QUJMRSAqcG93ZXJwbGF5X3RhYmxlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlu aXRfb3ZlcmRyaXZlX2xpbWl0c19WMV80KHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCisJCQljb25z dCBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFICpwb3dlcnBsYXlfdGFibGUsCisJCQljb25zdCBB VE9NX0ZJUk1XQVJFX0lORk9fVjFfNCAqZndfaW5mbykKK3sKKwlod21nci0+cGxhdGZvcm1fZGVz Y3JpcHRvci5vdmVyZHJpdmVMaW1pdC5lbmdpbmVDbG9jayA9CisJCQkJbGUzMl90b19jcHUoZndf aW5mby0+dWxBU0lDTWF4RW5naW5lQ2xvY2spOworCisJaHdtZ3ItPnBsYXRmb3JtX2Rlc2NyaXB0 b3Iub3ZlcmRyaXZlTGltaXQubWVtb3J5Q2xvY2sgPQorCQkJCWxlMzJfdG9fY3B1KGZ3X2luZm8t PnVsQVNJQ01heE1lbW9yeUNsb2NrKTsKKworCWh3bWdyLT5wbGF0Zm9ybV9kZXNjcmlwdG9yLm1h eE92ZXJkcml2ZVZEREMgPQorCQlsZTMyX3RvX2NwdShmd19pbmZvLT51bDNEQWNjZWxlcmF0aW9u RW5naW5lQ2xvY2spICYgMHg3RkY7CisKKwlod21nci0+cGxhdGZvcm1fZGVzY3JpcHRvci5taW5P dmVyZHJpdmVWRERDID0KKwkJCSAgIGxlMTZfdG9fY3B1KGZ3X2luZm8tPnVzQm9vdFVwVkREQ1Zv bHRhZ2UpOworCisJaHdtZ3ItPnBsYXRmb3JtX2Rlc2NyaXB0b3IubWF4T3ZlcmRyaXZlVkREQyA9 CisJCQkgICBsZTE2X3RvX2NwdShmd19pbmZvLT51c0Jvb3RVcFZERENWb2x0YWdlKTsKKworCWh3 bWdyLT5wbGF0Zm9ybV9kZXNjcmlwdG9yLm92ZXJkcml2ZVZERENTdGVwID0gMDsKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBpbml0X292ZXJkcml2ZV9saW1pdHNfVjJfMShzdHJ1Y3QgcHBf aHdtZ3IgKmh3bWdyLAorCQkJY29uc3QgQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRSAqcG93ZXJw bGF5X3RhYmxlLAorCQkJY29uc3QgQVRPTV9GSVJNV0FSRV9JTkZPX1YyXzEgKmZ3X2luZm8pCit7 CisJY29uc3QgQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRTMgKnBvd2VycGxheV90YWJsZTM7CisJ Y29uc3QgQVRPTV9QUExJQl9FWFRFTkRFREhFQURFUiAqaGVhZGVyOworCisJaWYgKGxlMTZfdG9f Y3B1KHBvd2VycGxheV90YWJsZS0+dXNUYWJsZVNpemUpIDwKKwkgICAgc2l6ZW9mKEFUT01fUFBM SUJfUE9XRVJQTEFZVEFCTEUzKSkKKwkJcmV0dXJuIDA7CisKKwlwb3dlcnBsYXlfdGFibGUzID0g KGNvbnN0IEFUT01fUFBMSUJfUE9XRVJQTEFZVEFCTEUzICopcG93ZXJwbGF5X3RhYmxlOworCisJ aWYgKDAgPT0gcG93ZXJwbGF5X3RhYmxlMy0+dXNFeHRlbmRlbmRlZEhlYWRlck9mZnNldCkKKwkJ cmV0dXJuIDA7CisKKwloZWFkZXIgPSAoQVRPTV9QUExJQl9FWFRFTkRFREhFQURFUiAqKSgoKHVu c2lnbmVkIGxvbmcpIHBvd2VycGxheV90YWJsZSkgKworCQkJbGUxNl90b19jcHUocG93ZXJwbGF5 X3RhYmxlMy0+dXNFeHRlbmRlbmRlZEhlYWRlck9mZnNldCkpOworCisJaHdtZ3ItPnBsYXRmb3Jt X2Rlc2NyaXB0b3Iub3ZlcmRyaXZlTGltaXQuZW5naW5lQ2xvY2sgPSBsZTMyX3RvX2NwdShoZWFk ZXItPnVsTWF4RW5naW5lQ2xvY2spOworCWh3bWdyLT5wbGF0Zm9ybV9kZXNjcmlwdG9yLm92ZXJk cml2ZUxpbWl0Lm1lbW9yeUNsb2NrID0gbGUzMl90b19jcHUoaGVhZGVyLT51bE1heE1lbW9yeUNs b2NrKTsKKworCisJaHdtZ3ItPnBsYXRmb3JtX2Rlc2NyaXB0b3IubWluT3ZlcmRyaXZlVkREQyA9 IDA7CisJaHdtZ3ItPnBsYXRmb3JtX2Rlc2NyaXB0b3IubWF4T3ZlcmRyaXZlVkREQyA9IDA7CisJ aHdtZ3ItPnBsYXRmb3JtX2Rlc2NyaXB0b3Iub3ZlcmRyaXZlVkREQ1N0ZXAgPSAwOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9vdmVyZHJpdmVfbGltaXRzKHN0cnVjdCBwcF9o d21nciAqaHdtZ3IsCisJCQljb25zdCBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFICpwb3dlcnBs YXlfdGFibGUpCit7CisJaW50IHJlc3VsdDsKKwl1aW50OF90IGZyZXYsIGNyZXY7CisJdWludDE2 X3Qgc2l6ZTsKKworCWNvbnN0IEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiAqZndfaW5mbyA9IE5V TEw7CisKKwlod21nci0+cGxhdGZvcm1fZGVzY3JpcHRvci5vdmVyZHJpdmVMaW1pdC5lbmdpbmVD bG9jayA9IDA7CisJaHdtZ3ItPnBsYXRmb3JtX2Rlc2NyaXB0b3Iub3ZlcmRyaXZlTGltaXQubWVt b3J5Q2xvY2sgPSAwOworCWh3bWdyLT5wbGF0Zm9ybV9kZXNjcmlwdG9yLm1pbk92ZXJkcml2ZVZE REMgPSAwOworCWh3bWdyLT5wbGF0Zm9ybV9kZXNjcmlwdG9yLm1heE92ZXJkcml2ZVZEREMgPSAw OworCisJLyogV2UgYXNzdW1lIGhlcmUgdGhhdCBmd19pbmZvIGlzIHVuY2hhbmdlZCBpZiB0aGlz IGNhbGwgZmFpbHMuKi8KKwlmd19pbmZvID0gY2dzX2F0b21fZ2V0X2RhdGFfdGFibGUoaHdtZ3It PmRldmljZSwKKwkJCSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShEQVRBLCBGaXJtd2FyZUluZm8p LAorCQkJICZzaXplLCAmZnJldiwgJmNyZXYpOworCisJaWYgKChmd19pbmZvLT51Y1RhYmxlRm9y bWF0UmV2aXNpb24gPT0gMSkKKwkJJiYgKGZ3X2luZm8tPnVzU3RydWN0dXJlU2l6ZSA+PSBzaXpl b2YoQVRPTV9GSVJNV0FSRV9JTkZPX1YxXzQpKSkKKwkJcmVzdWx0ID0gaW5pdF9vdmVyZHJpdmVf bGltaXRzX1YxXzQoaHdtZ3IsCisJCQkJcG93ZXJwbGF5X3RhYmxlLAorCQkJCShjb25zdCBBVE9N X0ZJUk1XQVJFX0lORk9fVjFfNCAqKWZ3X2luZm8pOworCisJZWxzZSBpZiAoKGZ3X2luZm8tPnVj VGFibGVGb3JtYXRSZXZpc2lvbiA9PSAyKQorCQkmJiAoZndfaW5mby0+dXNTdHJ1Y3R1cmVTaXpl ID49IHNpemVvZihBVE9NX0ZJUk1XQVJFX0lORk9fVjJfMSkpKQorCQlyZXN1bHQgPSBpbml0X292 ZXJkcml2ZV9saW1pdHNfVjJfMShod21nciwKKwkJCQlwb3dlcnBsYXlfdGFibGUsCisJCQkJKGNv bnN0IEFUT01fRklSTVdBUkVfSU5GT19WMl8xICopZndfaW5mbyk7CisKKwlpZiAoaHdtZ3ItPnBs YXRmb3JtX2Rlc2NyaXB0b3Iub3ZlcmRyaXZlTGltaXQuZW5naW5lQ2xvY2sgPiAwCisJCSYmIGh3 bWdyLT5wbGF0Zm9ybV9kZXNjcmlwdG9yLm92ZXJkcml2ZUxpbWl0Lm1lbW9yeUNsb2NrID4gMAor CQkmJiAhcGhtX2NhcF9lbmFibGVkKGh3bWdyLT5wbGF0Zm9ybV9kZXNjcmlwdG9yLnBsYXRmb3Jt Q2FwcywKKwkJCVBITV9QbGF0Zm9ybUNhcHNfT3ZlcmRyaXZlRGlzYWJsZWRCeVBvd2VyQnVkZ2V0 KSkKKwkJcGhtX2NhcF9zZXQoaHdtZ3ItPnBsYXRmb3JtX2Rlc2NyaXB0b3IucGxhdGZvcm1DYXBz LAorCQkJCVBITV9QbGF0Zm9ybUNhcHNfQUNPdmVyZHJpdmVTdXBwb3J0KTsKKworCXJldHVybiBy ZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3V2ZF9jbG9ja192b2x0YWdlX2xpbWl0X3RhYmxl KHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCisJCXN0cnVjdCBwaG1fdXZkX2Nsb2NrX3ZvbHRhZ2Vf ZGVwZW5kZW5jeV90YWJsZSAqKnB0YWJsZSwKKwkJY29uc3QgQVRPTV9QUExJQl9VVkRfQ2xvY2tf Vm9sdGFnZV9MaW1pdF9UYWJsZSAqdGFibGUsCisJCWNvbnN0IFVWRENsb2NrSW5mb0FycmF5ICph cnJheSkKK3sKKwl1bnNpZ25lZCBsb25nIHRhYmxlX3NpemUsIGk7CisJc3RydWN0IHBobV91dmRf Y2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlICp1dmRfdGFibGU7CisKKwl0YWJsZV9zaXpl ID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICsKKwkJIHNpemVvZihzdHJ1Y3QgcGhtX3V2ZF9jbG9j a192b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUpICoKKwkJIHRhYmxlLT5udW1FbnRyaWVzOworCisJ dXZkX3RhYmxlID0ga3phbGxvYyh0YWJsZV9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoTlVMTCA9 PSB1dmRfdGFibGUpCisJCXJldHVybiAtRU5PTUVNOworCisJdXZkX3RhYmxlLT5jb3VudCA9IHRh YmxlLT5udW1FbnRyaWVzOworCisJZm9yIChpID0gMDsgaSA8IHRhYmxlLT5udW1FbnRyaWVzOyBp KyspIHsKKwkJY29uc3QgVVZEQ2xvY2tJbmZvICplbnRyeSA9CisJCQkmYXJyYXktPmVudHJpZXNb dGFibGUtPmVudHJpZXNbaV0udWNVVkRDbG9ja0luZm9JbmRleF07CisJCXV2ZF90YWJsZS0+ZW50 cmllc1tpXS52ID0gKHVuc2lnbmVkIGxvbmcpbGUxNl90b19jcHUodGFibGUtPmVudHJpZXNbaV0u dXNWb2x0YWdlKTsKKwkJdXZkX3RhYmxlLT5lbnRyaWVzW2ldLnZjbGsgPSAoKHVuc2lnbmVkIGxv bmcpZW50cnktPnVjVkNsa0hpZ2ggPDwgMTYpCisJCQkJCSB8IGxlMTZfdG9fY3B1KGVudHJ5LT51 c1ZDbGtMb3cpOworCQl1dmRfdGFibGUtPmVudHJpZXNbaV0uZGNsayA9ICgodW5zaWduZWQgbG9u ZyllbnRyeS0+dWNEQ2xrSGlnaCA8PCAxNikKKwkJCQkJIHwgbGUxNl90b19jcHUoZW50cnktPnVz RENsa0xvdyk7CisJfQorCisJKnB0YWJsZSA9IHV2ZF90YWJsZTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IGdldF92Y2VfY2xvY2tfdm9sdGFnZV9saW1pdF90YWJsZShzdHJ1Y3QgcHBf aHdtZ3IgKmh3bWdyLAorCQlzdHJ1Y3QgcGhtX3ZjZV9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lf dGFibGUgKipwdGFibGUsCisJCWNvbnN0IEFUT01fUFBMSUJfVkNFX0Nsb2NrX1ZvbHRhZ2VfTGlt aXRfVGFibGUgKnRhYmxlLAorCQljb25zdCBWQ0VDbG9ja0luZm9BcnJheSAgICAqYXJyYXkpCit7 CisJdW5zaWduZWQgbG9uZyB0YWJsZV9zaXplLCBpOworCXN0cnVjdCBwaG1fdmNlX2Nsb2NrX3Zv bHRhZ2VfZGVwZW5kZW5jeV90YWJsZSAqdmNlX3RhYmxlID0gTlVMTDsKKworCXRhYmxlX3NpemUg PSBzaXplb2YodW5zaWduZWQgbG9uZykgKworCQkJc2l6ZW9mKHN0cnVjdCBwaG1fdmNlX2Nsb2Nr X3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZSkKKwkJCSogdGFibGUtPm51bUVudHJpZXM7CisKKwl2 Y2VfdGFibGUgPSBremFsbG9jKHRhYmxlX3NpemUsIEdGUF9LRVJORUwpOworCWlmIChOVUxMID09 IHZjZV90YWJsZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl2Y2VfdGFibGUtPmNvdW50ID0gdGFi bGUtPm51bUVudHJpZXM7CisJZm9yIChpID0gMDsgaSA8IHRhYmxlLT5udW1FbnRyaWVzOyBpKysp IHsKKwkJY29uc3QgVkNFQ2xvY2tJbmZvICplbnRyeSA9ICZhcnJheS0+ZW50cmllc1t0YWJsZS0+ ZW50cmllc1tpXS51Y1ZDRUNsb2NrSW5mb0luZGV4XTsKKworCQl2Y2VfdGFibGUtPmVudHJpZXNb aV0udiA9ICh1bnNpZ25lZCBsb25nKWxlMTZfdG9fY3B1KHRhYmxlLT5lbnRyaWVzW2ldLnVzVm9s dGFnZSk7CisJCXZjZV90YWJsZS0+ZW50cmllc1tpXS5ldmNsayA9ICgodW5zaWduZWQgbG9uZyll bnRyeS0+dWNFVkNsa0hpZ2ggPDwgMTYpCisJCQkJCXwgbGUxNl90b19jcHUoZW50cnktPnVzRVZD bGtMb3cpOworCQl2Y2VfdGFibGUtPmVudHJpZXNbaV0uZWNjbGsgPSAoKHVuc2lnbmVkIGxvbmcp ZW50cnktPnVjRUNDbGtIaWdoIDw8IDE2KQorCQkJCQl8IGxlMTZfdG9fY3B1KGVudHJ5LT51c0VD Q2xrTG93KTsKKwl9CisKKwkqcHRhYmxlID0gdmNlX3RhYmxlOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgZ2V0X3NhbXVfY2xvY2tfdm9sdGFnZV9saW1pdF90YWJsZShzdHJ1Y3QgcHBf aHdtZ3IgKmh3bWdyLAorCQkgc3RydWN0IHBobV9zYW11X2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5j eV90YWJsZSAqKnB0YWJsZSwKKwkJIGNvbnN0IEFUT01fUFBMSUJfU0FNQ2xrX1ZvbHRhZ2VfTGlt aXRfVGFibGUgKnRhYmxlKQoreworCXVuc2lnbmVkIGxvbmcgdGFibGVfc2l6ZSwgaTsKKwlzdHJ1 Y3QgcGhtX3NhbXVfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlICpzYW11X3RhYmxlOwor CisJdGFibGVfc2l6ZSA9IHNpemVvZih1bnNpZ25lZCBsb25nKSArCisJCXNpemVvZihzdHJ1Y3Qg cGhtX3NhbXVfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlKSAqCisJCXRhYmxlLT5udW1F bnRyaWVzOworCisJc2FtdV90YWJsZSA9IGt6YWxsb2ModGFibGVfc2l6ZSwgR0ZQX0tFUk5FTCk7 CisJaWYgKE5VTEwgPT0gc2FtdV90YWJsZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzYW11X3Rh YmxlLT5jb3VudCA9IHRhYmxlLT5udW1FbnRyaWVzOworCisJZm9yIChpID0gMDsgaSA8IHRhYmxl LT5udW1FbnRyaWVzOyBpKyspIHsKKwkJc2FtdV90YWJsZS0+ZW50cmllc1tpXS52ID0gKHVuc2ln bmVkIGxvbmcpbGUxNl90b19jcHUodGFibGUtPmVudHJpZXNbaV0udXNWb2x0YWdlKTsKKwkJc2Ft dV90YWJsZS0+ZW50cmllc1tpXS5zYW1jbGsgPSAoKHVuc2lnbmVkIGxvbmcpdGFibGUtPmVudHJp ZXNbaV0udWNTQU1DbG9ja0hpZ2ggPDwgMTYpCisJCQkJCSB8IGxlMTZfdG9fY3B1KHRhYmxlLT5l bnRyaWVzW2ldLnVzU0FNQ2xvY2tMb3cpOworCX0KKworCSpwdGFibGUgPSBzYW11X3RhYmxlOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2FjcF9jbG9ja192b2x0YWdlX2xpbWl0 X3RhYmxlKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCisJCXN0cnVjdCBwaG1fYWNwX2Nsb2NrX3Zv bHRhZ2VfZGVwZW5kZW5jeV90YWJsZSAqKnB0YWJsZSwKKwkJY29uc3QgQVRPTV9QUExJQl9BQ1BD bGtfVm9sdGFnZV9MaW1pdF9UYWJsZSAqdGFibGUpCit7CisJdW5zaWduZWQgdGFibGVfc2l6ZSwg aTsKKwlzdHJ1Y3QgcGhtX2FjcF9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUgKmFjcF90 YWJsZTsKKworCXRhYmxlX3NpemUgPSBzaXplb2YodW5zaWduZWQgbG9uZykgKworCQlzaXplb2Yo c3RydWN0IHBobV9hY3BfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlKSAqCisJCXRhYmxl LT5udW1FbnRyaWVzOworCisJYWNwX3RhYmxlID0ga3phbGxvYyh0YWJsZV9zaXplLCBHRlBfS0VS TkVMKTsKKwlpZiAoTlVMTCA9PSBhY3BfdGFibGUpCisJCXJldHVybiAtRU5PTUVNOworCisJYWNw X3RhYmxlLT5jb3VudCA9ICh1bnNpZ25lZCBsb25nKXRhYmxlLT5udW1FbnRyaWVzOworCisJZm9y IChpID0gMDsgaSA8IHRhYmxlLT5udW1FbnRyaWVzOyBpKyspIHsKKwkJYWNwX3RhYmxlLT5lbnRy aWVzW2ldLnYgPSAodW5zaWduZWQgbG9uZylsZTE2X3RvX2NwdSh0YWJsZS0+ZW50cmllc1tpXS51 c1ZvbHRhZ2UpOworCQlhY3BfdGFibGUtPmVudHJpZXNbaV0uYWNwY2xrID0gKCh1bnNpZ25lZCBs b25nKXRhYmxlLT5lbnRyaWVzW2ldLnVjQUNQQ2xvY2tIaWdoIDw8IDE2KQorCQkJCQkgfCBsZTE2 X3RvX2NwdSh0YWJsZS0+ZW50cmllc1tpXS51c0FDUENsb2NrTG93KTsKKwl9CisKKwkqcHRhYmxl ID0gYWNwX3RhYmxlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9jbG9ja192 b2x0YWdlX2RlcGVuZGVuY3koc3RydWN0IHBwX2h3bWdyICpod21nciwKKwkJCWNvbnN0IEFUT01f UFBMSUJfUE9XRVJQTEFZVEFCTEUgKnBvd2VycGxheV90YWJsZSkKK3sKKwlBVE9NX1BQTElCX0Ns b2NrX1ZvbHRhZ2VfRGVwZW5kZW5jeV9UYWJsZSAqdGFibGU7CisJQVRPTV9QUExJQl9DbG9ja19W b2x0YWdlX0xpbWl0X1RhYmxlICpsaW1pdF90YWJsZTsKKwlpbnQgcmVzdWx0ID0gMDsKKworCXVp bnQxNl90IHZjZV9jbG9ja19pbmZvX2FycmF5X29mZnNldDsKKwl1aW50MTZfdCB1dmRfY2xvY2tf aW5mb19hcnJheV9vZmZzZXQ7CisJdWludDE2X3QgdGFibGVfb2Zmc2V0OworCisJaHdtZ3ItPmR5 bl9zdGF0ZS52ZGRjX2RlcGVuZGVuY3lfb25fc2NsayA9IE5VTEw7CisJaHdtZ3ItPmR5bl9zdGF0 ZS52ZGRjaV9kZXBlbmRlbmN5X29uX21jbGsgPSBOVUxMOworCWh3bWdyLT5keW5fc3RhdGUudmRk Y19kZXBlbmRlbmN5X29uX21jbGsgPSBOVUxMOworCWh3bWdyLT5keW5fc3RhdGUudmRkY19kZXBf b25fZGFsX3B3cmwgPSBOVUxMOworCWh3bWdyLT5keW5fc3RhdGUubXZkZF9kZXBlbmRlbmN5X29u X21jbGsgPSBOVUxMOworCWh3bWdyLT5keW5fc3RhdGUudmNlX2Nsb2NsX3ZvbHRhZ2VfZGVwZW5k ZW5jeV90YWJsZSA9IE5VTEw7CisJaHdtZ3ItPmR5bl9zdGF0ZS51dmRfY2xvY2xfdm9sdGFnZV9k ZXBlbmRlbmN5X3RhYmxlID0gTlVMTDsKKwlod21nci0+ZHluX3N0YXRlLnNhbXVfY2xvY2tfdm9s dGFnZV9kZXBlbmRlbmN5X3RhYmxlID0gTlVMTDsKKwlod21nci0+ZHluX3N0YXRlLmFjcF9jbG9j a192b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUgPSBOVUxMOworCWh3bWdyLT5keW5fc3RhdGUucHBt X3BhcmFtZXRlcl90YWJsZSA9IE5VTEw7CisJaHdtZ3ItPmR5bl9zdGF0ZS52ZGRfZ2Z4X2RlcGVu ZGVuY3lfb25fc2NsayA9IE5VTEw7CisKKwl2Y2VfY2xvY2tfaW5mb19hcnJheV9vZmZzZXQgPSBn ZXRfdmNlX2Nsb2NrX2luZm9fYXJyYXlfb2Zmc2V0KAorCQkJCQkJaHdtZ3IsIHBvd2VycGxheV90 YWJsZSk7CisJdGFibGVfb2Zmc2V0ID0gZ2V0X3ZjZV9jbG9ja192b2x0YWdlX2xpbWl0X3RhYmxl X29mZnNldChod21nciwKKwkJCQkJCXBvd2VycGxheV90YWJsZSk7CisJaWYgKHZjZV9jbG9ja19p bmZvX2FycmF5X29mZnNldCA+IDAgJiYgdGFibGVfb2Zmc2V0ID4gMCkgeworCQljb25zdCBWQ0VD bG9ja0luZm9BcnJheSAqYXJyYXkgPSAoY29uc3QgVkNFQ2xvY2tJbmZvQXJyYXkgKikKKwkJCQko KCh1bnNpZ25lZCBsb25nKSBwb3dlcnBsYXlfdGFibGUpICsKKwkJCQl2Y2VfY2xvY2tfaW5mb19h cnJheV9vZmZzZXQpOworCQljb25zdCBBVE9NX1BQTElCX1ZDRV9DbG9ja19Wb2x0YWdlX0xpbWl0 X1RhYmxlICp0YWJsZSA9CisJCQkJKGNvbnN0IEFUT01fUFBMSUJfVkNFX0Nsb2NrX1ZvbHRhZ2Vf TGltaXRfVGFibGUgKikKKwkJCQkoKCh1bnNpZ25lZCBsb25nKSBwb3dlcnBsYXlfdGFibGUpICsg dGFibGVfb2Zmc2V0KTsKKwkJcmVzdWx0ID0gZ2V0X3ZjZV9jbG9ja192b2x0YWdlX2xpbWl0X3Rh YmxlKGh3bWdyLAorCQkJCSZod21nci0+ZHluX3N0YXRlLnZjZV9jbG9jbF92b2x0YWdlX2RlcGVu ZGVuY3lfdGFibGUsCisJCQkJdGFibGUsIGFycmF5KTsKKwl9CisKKwl1dmRfY2xvY2tfaW5mb19h cnJheV9vZmZzZXQgPSBnZXRfdXZkX2Nsb2NrX2luZm9fYXJyYXlfb2Zmc2V0KGh3bWdyLCBwb3dl cnBsYXlfdGFibGUpOworCXRhYmxlX29mZnNldCA9IGdldF91dmRfY2xvY2tfdm9sdGFnZV9saW1p dF90YWJsZV9vZmZzZXQoaHdtZ3IsIHBvd2VycGxheV90YWJsZSk7CisKKwlpZiAodXZkX2Nsb2Nr X2luZm9fYXJyYXlfb2Zmc2V0ID4gMCAmJiB0YWJsZV9vZmZzZXQgPiAwKSB7CisJCWNvbnN0IFVW RENsb2NrSW5mb0FycmF5ICphcnJheSA9IChjb25zdCBVVkRDbG9ja0luZm9BcnJheSAqKQorCQkJ CSgoKHVuc2lnbmVkIGxvbmcpIHBvd2VycGxheV90YWJsZSkgKworCQkJCXV2ZF9jbG9ja19pbmZv X2FycmF5X29mZnNldCk7CisJCWNvbnN0IEFUT01fUFBMSUJfVVZEX0Nsb2NrX1ZvbHRhZ2VfTGlt aXRfVGFibGUgKnB0YWJsZSA9CisJCQkJKGNvbnN0IEFUT01fUFBMSUJfVVZEX0Nsb2NrX1ZvbHRh Z2VfTGltaXRfVGFibGUgKikKKwkJCQkoKCh1bnNpZ25lZCBsb25nKSBwb3dlcnBsYXlfdGFibGUp ICsgdGFibGVfb2Zmc2V0KTsKKwkJcmVzdWx0ID0gZ2V0X3V2ZF9jbG9ja192b2x0YWdlX2xpbWl0 X3RhYmxlKGh3bWdyLAorCQkJCSZod21nci0+ZHluX3N0YXRlLnV2ZF9jbG9jbF92b2x0YWdlX2Rl cGVuZGVuY3lfdGFibGUsIHB0YWJsZSwgYXJyYXkpOworCX0KKworCXRhYmxlX29mZnNldCA9IGdl dF9zYW11X2Nsb2NrX3ZvbHRhZ2VfbGltaXRfdGFibGVfb2Zmc2V0KGh3bWdyLAorCQkJCQkJCSAg ICBwb3dlcnBsYXlfdGFibGUpOworCisJaWYgKHRhYmxlX29mZnNldCA+IDApIHsKKwkJY29uc3Qg QVRPTV9QUExJQl9TQU1DbGtfVm9sdGFnZV9MaW1pdF9UYWJsZSAqcHRhYmxlID0KKwkJCQkoY29u c3QgQVRPTV9QUExJQl9TQU1DbGtfVm9sdGFnZV9MaW1pdF9UYWJsZSAqKQorCQkJCSgoKHVuc2ln bmVkIGxvbmcpIHBvd2VycGxheV90YWJsZSkgKyB0YWJsZV9vZmZzZXQpOworCQlyZXN1bHQgPSBn ZXRfc2FtdV9jbG9ja192b2x0YWdlX2xpbWl0X3RhYmxlKGh3bWdyLAorCQkJCSZod21nci0+ZHlu X3N0YXRlLnNhbXVfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlLCBwdGFibGUpOworCX0K KworCXRhYmxlX29mZnNldCA9IGdldF9hY3BfY2xvY2tfdm9sdGFnZV9saW1pdF90YWJsZV9vZmZz ZXQoaHdtZ3IsCisJCQkJCQkJICAgICBwb3dlcnBsYXlfdGFibGUpOworCisJaWYgKHRhYmxlX29m ZnNldCA+IDApIHsKKwkJY29uc3QgQVRPTV9QUExJQl9BQ1BDbGtfVm9sdGFnZV9MaW1pdF9UYWJs ZSAqcHRhYmxlID0KKwkJCQkoY29uc3QgQVRPTV9QUExJQl9BQ1BDbGtfVm9sdGFnZV9MaW1pdF9U YWJsZSAqKQorCQkJCSgoKHVuc2lnbmVkIGxvbmcpIHBvd2VycGxheV90YWJsZSkgKyB0YWJsZV9v ZmZzZXQpOworCQlyZXN1bHQgPSBnZXRfYWNwX2Nsb2NrX3ZvbHRhZ2VfbGltaXRfdGFibGUoaHdt Z3IsCisJCQkJJmh3bWdyLT5keW5fc3RhdGUuYWNwX2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90 YWJsZSwgcHRhYmxlKTsKKwl9CisKKwl0YWJsZV9vZmZzZXQgPSBnZXRfY2FjcF90ZHBfdGFibGVf b2Zmc2V0KGh3bWdyLCBwb3dlcnBsYXlfdGFibGUpOworCWlmICh0YWJsZV9vZmZzZXQgPiAwKSB7 CisJCVVDSEFSIHJldl9pZCA9ICooVUNIQVIgKikoKCh1bnNpZ25lZCBsb25nKXBvd2VycGxheV90 YWJsZSkgKyB0YWJsZV9vZmZzZXQpOworCisJCWlmIChyZXZfaWQgPiAwKSB7CisJCQljb25zdCBB VE9NX1BQTElCX1BPV0VSVFVORV9UYWJsZV9WMSAqdHVuZV90YWJsZSA9CisJCQkJKGNvbnN0IEFU T01fUFBMSUJfUE9XRVJUVU5FX1RhYmxlX1YxICopCisJCQkJKCgodW5zaWduZWQgbG9uZykgcG93 ZXJwbGF5X3RhYmxlKSArIHRhYmxlX29mZnNldCk7CisJCQlyZXN1bHQgPSBnZXRfY2FjX3RkcF90 YWJsZShod21nciwgJmh3bWdyLT5keW5fc3RhdGUuY2FjX2R0cF90YWJsZSwKKwkJCQkmdHVuZV90 YWJsZS0+cG93ZXJfdHVuZV90YWJsZSwKKwkJCQlsZTE2X3RvX2NwdSh0dW5lX3RhYmxlLT51c01h eGltdW1Qb3dlckRlbGl2ZXJ5TGltaXQpKTsKKwkJCWh3bWdyLT5keW5fc3RhdGUuY2FjX2R0cF90 YWJsZS0+dXNEZWZhdWx0VGFyZ2V0T3BlcmF0aW5nVGVtcCA9CisJCQkJbGUxNl90b19jcHUodHVu ZV90YWJsZS0+dXNUak1heCk7CisJCX0gZWxzZSB7CisJCQljb25zdCBBVE9NX1BQTElCX1BPV0VS VFVORV9UYWJsZSAqdHVuZV90YWJsZSA9CisJCQkJKGNvbnN0IEFUT01fUFBMSUJfUE9XRVJUVU5F X1RhYmxlICopCisJCQkJKCgodW5zaWduZWQgbG9uZykgcG93ZXJwbGF5X3RhYmxlKSArIHRhYmxl X29mZnNldCk7CisJCQlyZXN1bHQgPSBnZXRfY2FjX3RkcF90YWJsZShod21nciwKKwkJCQkmaHdt Z3ItPmR5bl9zdGF0ZS5jYWNfZHRwX3RhYmxlLAorCQkJCSZ0dW5lX3RhYmxlLT5wb3dlcl90dW5l X3RhYmxlLCAyNTUpOworCQl9CisJfQorCisJaWYgKGxlMTZfdG9fY3B1KHBvd2VycGxheV90YWJs ZS0+dXNUYWJsZVNpemUpID49CisJCXNpemVvZihBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFNCkp IHsKKwkJY29uc3QgQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRTQgKnBvd2VycGxheV90YWJsZTQg PQorCQkJCShjb25zdCBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFNCAqKXBvd2VycGxheV90YWJs ZTsKKwkJaWYgKDAgIT0gcG93ZXJwbGF5X3RhYmxlNC0+dXNWZGRjRGVwZW5kZW5jeU9uU0NMS09m ZnNldCkgeworCQkJdGFibGUgPSAoQVRPTV9QUExJQl9DbG9ja19Wb2x0YWdlX0RlcGVuZGVuY3lf VGFibGUgKikKKwkJCQkoKCh1bnNpZ25lZCBsb25nKSBwb3dlcnBsYXlfdGFibGU0KSArCisJCQkJ cG93ZXJwbGF5X3RhYmxlNC0+dXNWZGRjRGVwZW5kZW5jeU9uU0NMS09mZnNldCk7CisJCQlyZXN1 bHQgPSBnZXRfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlKGh3bWdyLAorCQkJCSZod21n ci0+ZHluX3N0YXRlLnZkZGNfZGVwZW5kZW5jeV9vbl9zY2xrLCB0YWJsZSk7CisJCX0KKworCQlp ZiAocmVzdWx0ID09IDAgJiYgKDAgIT0gcG93ZXJwbGF5X3RhYmxlNC0+dXNWZGRjaURlcGVuZGVu Y3lPbk1DTEtPZmZzZXQpKSB7CisJCQl0YWJsZSA9IChBVE9NX1BQTElCX0Nsb2NrX1ZvbHRhZ2Vf RGVwZW5kZW5jeV9UYWJsZSAqKQorCQkJCSgoKHVuc2lnbmVkIGxvbmcpIHBvd2VycGxheV90YWJs ZTQpICsKKwkJCQlwb3dlcnBsYXlfdGFibGU0LT51c1ZkZGNpRGVwZW5kZW5jeU9uTUNMS09mZnNl dCk7CisJCQlyZXN1bHQgPSBnZXRfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlKGh3bWdy LAorCQkJCSZod21nci0+ZHluX3N0YXRlLnZkZGNpX2RlcGVuZGVuY3lfb25fbWNsaywgdGFibGUp OworCQl9CisKKwkJaWYgKHJlc3VsdCA9PSAwICYmICgwICE9IHBvd2VycGxheV90YWJsZTQtPnVz VmRkY0RlcGVuZGVuY3lPbk1DTEtPZmZzZXQpKSB7CisJCQl0YWJsZSA9IChBVE9NX1BQTElCX0Ns b2NrX1ZvbHRhZ2VfRGVwZW5kZW5jeV9UYWJsZSAqKQorCQkJCSgoKHVuc2lnbmVkIGxvbmcpIHBv d2VycGxheV90YWJsZTQpICsKKwkJCQlwb3dlcnBsYXlfdGFibGU0LT51c1ZkZGNEZXBlbmRlbmN5 T25NQ0xLT2Zmc2V0KTsKKwkJCXJlc3VsdCA9IGdldF9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lf dGFibGUoaHdtZ3IsCisJCQkJJmh3bWdyLT5keW5fc3RhdGUudmRkY19kZXBlbmRlbmN5X29uX21j bGssIHRhYmxlKTsKKwkJfQorCisJCWlmIChyZXN1bHQgPT0gMCAmJiAoMCAhPSBwb3dlcnBsYXlf dGFibGU0LT51c01heENsb2NrVm9sdGFnZU9uRENPZmZzZXQpKSB7CisJCQlsaW1pdF90YWJsZSA9 IChBVE9NX1BQTElCX0Nsb2NrX1ZvbHRhZ2VfTGltaXRfVGFibGUgKikKKwkJCQkoKCh1bnNpZ25l ZCBsb25nKSBwb3dlcnBsYXlfdGFibGU0KSArCisJCQkJcG93ZXJwbGF5X3RhYmxlNC0+dXNNYXhD bG9ja1ZvbHRhZ2VPbkRDT2Zmc2V0KTsKKwkJCXJlc3VsdCA9IGdldF9jbG9ja192b2x0YWdlX2xp bWl0KGh3bWdyLAorCQkJCSZod21nci0+ZHluX3N0YXRlLm1heF9jbG9ja192b2x0YWdlX29uX2Rj LCBsaW1pdF90YWJsZSk7CisJCX0KKworCQlpZiAocmVzdWx0ID09IDAgJiYgKE5VTEwgIT0gaHdt Z3ItPmR5bl9zdGF0ZS52ZGRjX2RlcGVuZGVuY3lfb25fbWNsaykgJiYKKwkJCSgwICE9IGh3bWdy LT5keW5fc3RhdGUudmRkY19kZXBlbmRlbmN5X29uX21jbGstPmNvdW50KSkKKwkJCXJlc3VsdCA9 IGdldF92YWxpZF9jbGsoaHdtZ3IsICZod21nci0+ZHluX3N0YXRlLnZhbGlkX21jbGtfdmFsdWVz LAorCQkJCQlod21nci0+ZHluX3N0YXRlLnZkZGNfZGVwZW5kZW5jeV9vbl9tY2xrKTsKKworCQlp ZihyZXN1bHQgPT0gMCAmJiAoTlVMTCAhPSBod21nci0+ZHluX3N0YXRlLnZkZGNfZGVwZW5kZW5j eV9vbl9zY2xrKSAmJgorCQkJKDAgIT0gaHdtZ3ItPmR5bl9zdGF0ZS52ZGRjX2RlcGVuZGVuY3lf b25fc2Nsay0+Y291bnQpKQorCQkJcmVzdWx0ID0gZ2V0X3ZhbGlkX2Nsayhod21nciwKKwkJCQkm aHdtZ3ItPmR5bl9zdGF0ZS52YWxpZF9zY2xrX3ZhbHVlcywKKwkJCQlod21nci0+ZHluX3N0YXRl LnZkZGNfZGVwZW5kZW5jeV9vbl9zY2xrKTsKKworCQlpZiAocmVzdWx0ID09IDAgJiYgKDAgIT0g cG93ZXJwbGF5X3RhYmxlNC0+dXNNdmRkRGVwZW5kZW5jeU9uTUNMS09mZnNldCkpIHsKKwkJCXRh YmxlID0gKEFUT01fUFBMSUJfQ2xvY2tfVm9sdGFnZV9EZXBlbmRlbmN5X1RhYmxlICopCisJCQkJ KCgodW5zaWduZWQgbG9uZykgcG93ZXJwbGF5X3RhYmxlNCkgKworCQkJCXBvd2VycGxheV90YWJs ZTQtPnVzTXZkZERlcGVuZGVuY3lPbk1DTEtPZmZzZXQpOworCQkJcmVzdWx0ID0gZ2V0X2Nsb2Nr X3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZShod21nciwKKwkJCQkmaHdtZ3ItPmR5bl9zdGF0ZS5t dmRkX2RlcGVuZGVuY3lfb25fbWNsaywgdGFibGUpOworCQl9CisJfQorCisJdGFibGVfb2Zmc2V0 ID0gZ2V0X3NjbGtfdmRkX2dmeF9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lfdGFibGVfb2Zmc2V0 KGh3bWdyLAorCQkJCQkJCQlwb3dlcnBsYXlfdGFibGUpOworCisJaWYgKHRhYmxlX29mZnNldCA+ IDApIHsKKwkJdGFibGUgPSAoQVRPTV9QUExJQl9DbG9ja19Wb2x0YWdlX0RlcGVuZGVuY3lfVGFi bGUgKikKKwkJCSgoKHVuc2lnbmVkIGxvbmcpIHBvd2VycGxheV90YWJsZSkgKyB0YWJsZV9vZmZz ZXQpOworCQlyZXN1bHQgPSBnZXRfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlKGh3bWdy LAorCQkJJmh3bWdyLT5keW5fc3RhdGUudmRkX2dmeF9kZXBlbmRlbmN5X29uX3NjbGssIHRhYmxl KTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGdldF9jYWNfbGVha2Fn ZV90YWJsZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAorCQkJCSBzdHJ1Y3QgcGhtX2NhY19sZWFr YWdlX3RhYmxlICoqcHRhYmxlLAorCQkJCWNvbnN0IEFUT01fUFBMSUJfQ0FDX0xlYWthZ2VfVGFi bGUgKnRhYmxlKQoreworCXN0cnVjdCBwaG1fY2FjX2xlYWthZ2VfdGFibGUgICpjYWNfbGVha2Fn ZV90YWJsZTsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgICAgdGFibGVfc2l6ZSwgaTsKKworCXRh YmxlX3NpemUgPSBzaXplb2YoVUxPTkcpICsKKwkJKHNpemVvZihzdHJ1Y3QgcGhtX2NhY19sZWFr YWdlX3RhYmxlKSAqIHRhYmxlLT51Y051bUVudHJpZXMpOworCisJY2FjX2xlYWthZ2VfdGFibGUg PSBremFsbG9jKHRhYmxlX3NpemUsIEdGUF9LRVJORUwpOworCisJY2FjX2xlYWthZ2VfdGFibGUt PmNvdW50ID0gKFVMT05HKXRhYmxlLT51Y051bUVudHJpZXM7CisKKwlmb3IgKGkgPSAwOyBpIDwg Y2FjX2xlYWthZ2VfdGFibGUtPmNvdW50OyBpKyspIHsKKwkJaWYgKHBobV9jYXBfZW5hYmxlZCho d21nci0+cGxhdGZvcm1fZGVzY3JpcHRvci5wbGF0Zm9ybUNhcHMsCisJCQkJUEhNX1BsYXRmb3Jt Q2Fwc19FVlYpKSB7CisJCQljYWNfbGVha2FnZV90YWJsZS0+ZW50cmllc1tpXS5WZGRjMSA9IGxl MTZfdG9fY3B1KHRhYmxlLT5lbnRyaWVzW2ldLnVzVmRkYzEpOworCQkJY2FjX2xlYWthZ2VfdGFi bGUtPmVudHJpZXNbaV0uVmRkYzIgPSBsZTE2X3RvX2NwdSh0YWJsZS0+ZW50cmllc1tpXS51c1Zk ZGMyKTsKKwkJCWNhY19sZWFrYWdlX3RhYmxlLT5lbnRyaWVzW2ldLlZkZGMzID0gbGUxNl90b19j cHUodGFibGUtPmVudHJpZXNbaV0udXNWZGRjMyk7CisJCX0gZWxzZSB7CisJCQljYWNfbGVha2Fn ZV90YWJsZS0+ZW50cmllc1tpXS5WZGRjICAgID0gbGUxNl90b19jcHUodGFibGUtPmVudHJpZXNb aV0udXNWZGRjKTsKKwkJCWNhY19sZWFrYWdlX3RhYmxlLT5lbnRyaWVzW2ldLkxlYWthZ2UgPSBs ZTMyX3RvX2NwdSh0YWJsZS0+ZW50cmllc1tpXS51bExlYWthZ2VWYWx1ZSk7CisJCX0KKwl9CisK KwkqcHRhYmxlID0gY2FjX2xlYWthZ2VfdGFibGU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBnZXRfcGxhdGZvcm1fcG93ZXJfbWFuYWdlbWVudF90YWJsZShzdHJ1Y3QgcHBfaHdtZ3Ig Kmh3bWdyLAorCQkJQVRPTV9QUExJQl9QUE1fVGFibGUgKmF0b21fcHBtX3RhYmxlKQoreworCXN0 cnVjdCBwaG1fcHBtX3RhYmxlICpwdHIgPSBremFsbG9jKHNpemVvZihBVE9NX1BQTElCX1BQTV9U YWJsZSksIEdGUF9LRVJORUwpOworCisJaWYgKE5VTEwgPT0gcHRyKQorCQlyZXR1cm4gLUVOT01F TTsKKworCXB0ci0+cHBtX2Rlc2lnbiAgICAgICAgICAgID0gYXRvbV9wcG1fdGFibGUtPnVjUHBt RGVzaWduOworCXB0ci0+Y3B1X2NvcmVfbnVtYmVyICAgICAgICA9IGxlMTZfdG9fY3B1KGF0b21f cHBtX3RhYmxlLT51c0NwdUNvcmVOdW1iZXIpOworCXB0ci0+cGxhdGZvcm1fdGRwICAgICAgICAg ID0gbGUzMl90b19jcHUoYXRvbV9wcG1fdGFibGUtPnVsUGxhdGZvcm1URFApOworCXB0ci0+c21h bGxfYWNfcGxhdGZvcm1fdGRwICAgPSBsZTMyX3RvX2NwdShhdG9tX3BwbV90YWJsZS0+dWxTbWFs bEFDUGxhdGZvcm1URFApOworCXB0ci0+cGxhdGZvcm1fdGRjICAgICAgICAgID0gbGUzMl90b19j cHUoYXRvbV9wcG1fdGFibGUtPnVsUGxhdGZvcm1UREMpOworCXB0ci0+c21hbGxfYWNfcGxhdGZv cm1fdGRjICAgPSBsZTMyX3RvX2NwdShhdG9tX3BwbV90YWJsZS0+dWxTbWFsbEFDUGxhdGZvcm1U REMpOworCXB0ci0+YXB1X3RkcCAgICAgICAgICAgICAgID0gbGUzMl90b19jcHUoYXRvbV9wcG1f dGFibGUtPnVsQXB1VERQKTsKKwlwdHItPmRncHVfdGRwICAgICAgICAgICAgICA9IGxlMzJfdG9f Y3B1KGF0b21fcHBtX3RhYmxlLT51bERHcHVURFApOworCXB0ci0+ZGdwdV91bHZfcG93ZXIgICAg ICAgICA9IGxlMzJfdG9fY3B1KGF0b21fcHBtX3RhYmxlLT51bERHcHVVbHZQb3dlcik7CisJcHRy LT50al9tYXggICAgICAgICAgICAgICAgPSBsZTMyX3RvX2NwdShhdG9tX3BwbV90YWJsZS0+dWxU am1heCk7CisJaHdtZ3ItPmR5bl9zdGF0ZS5wcG1fcGFyYW1ldGVyX3RhYmxlID0gcHRyOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9kcG0yX3BhcmFtZXRlcnMoc3RydWN0IHBw X2h3bWdyICpod21nciwKKwkJCWNvbnN0IEFUT01fUFBMSUJfUE9XRVJQTEFZVEFCTEUgKnBvd2Vy cGxheV90YWJsZSkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKworCWlmIChsZTE2X3RvX2NwdShwb3dl cnBsYXlfdGFibGUtPnVzVGFibGVTaXplKSA+PQorCSAgICBzaXplb2YoQVRPTV9QUExJQl9QT1dF UlBMQVlUQUJMRTUpKSB7CisJCWNvbnN0ICBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFNSAqcHRh YmxlNSA9CisJCQkJKGNvbnN0IEFUT01fUFBMSUJfUE9XRVJQTEFZVEFCTEU1ICopcG93ZXJwbGF5 X3RhYmxlOworCQljb25zdCAgQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRTQgKnB0YWJsZTQgPQor CQkJCShjb25zdCBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFNCAqKQorCQkJCSgmcHRhYmxlNS0+ YmFzaWNUYWJsZTQpOworCQljb25zdCAgQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRTMgKnB0YWJs ZTMgPQorCQkJCShjb25zdCBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFMyAqKQorCQkJCSgmcHRh YmxlNC0+YmFzaWNUYWJsZTMpOworCQljb25zdCAgQVRPTV9QUExJQl9FWFRFTkRFREhFQURFUiAg KmV4dGVuZGVkX2hlYWRlcjsKKwkJdWludDE2X3QgdGFibGVfb2Zmc2V0OworCQlBVE9NX1BQTElC X1BQTV9UYWJsZSAqYXRvbV9wcG1fdGFibGU7CisKKwkJaHdtZ3ItPnBsYXRmb3JtX2Rlc2NyaXB0 b3IuVERQTGltaXQgICAgID0gbGUzMl90b19jcHUocHRhYmxlNS0+dWxURFBMaW1pdCk7CisJCWh3 bWdyLT5wbGF0Zm9ybV9kZXNjcmlwdG9yLm5lYXJURFBMaW1pdCA9IGxlMzJfdG9fY3B1KHB0YWJs ZTUtPnVsTmVhclREUExpbWl0KTsKKworCQlod21nci0+cGxhdGZvcm1fZGVzY3JpcHRvci5URFBP RExpbWl0ICAgPSBsZTE2X3RvX2NwdShwdGFibGU1LT51c1REUE9ETGltaXQpOworCQlod21nci0+ cGxhdGZvcm1fZGVzY3JpcHRvci5URFBBZGp1c3RtZW50ID0gMDsKKworCQlod21nci0+cGxhdGZv cm1fZGVzY3JpcHRvci5WaWRBZGp1c3RtZW50ID0gMDsKKwkJaHdtZ3ItPnBsYXRmb3JtX2Rlc2Ny aXB0b3IuVmlkQWRqdXN0bWVudFBvbGFyaXR5ID0gMDsKKwkJaHdtZ3ItPnBsYXRmb3JtX2Rlc2Ny aXB0b3IuVmlkTWluTGltaXQgICAgID0gMDsKKwkJaHdtZ3ItPnBsYXRmb3JtX2Rlc2NyaXB0b3Iu VmlkTWF4TGltaXQgICAgID0gMTUwMDAwMDsKKwkJaHdtZ3ItPnBsYXRmb3JtX2Rlc2NyaXB0b3Iu VmlkU3RlcCAgICAgICAgID0gNjI1MDsKKworCQlod21nci0+cGxhdGZvcm1fZGVzY3JpcHRvci5u ZWFyVERQTGltaXRBZGp1c3RlZCA9IGxlMzJfdG9fY3B1KHB0YWJsZTUtPnVsTmVhclREUExpbWl0 KTsKKworCQlpZiAoaHdtZ3ItPnBsYXRmb3JtX2Rlc2NyaXB0b3IuVERQT0RMaW1pdCAhPSAwKQor CQkJcGhtX2NhcF9zZXQoaHdtZ3ItPnBsYXRmb3JtX2Rlc2NyaXB0b3IucGxhdGZvcm1DYXBzLAor CQkJCQlQSE1fUGxhdGZvcm1DYXBzX1Bvd2VyQ29udHJvbCk7CisKKwkJaHdtZ3ItPnBsYXRmb3Jt X2Rlc2NyaXB0b3IuU1FSYW1waW5nVGhyZXNob2xkID0gbGUzMl90b19jcHUocHRhYmxlNS0+dWxT UVJhbXBpbmdUaHJlc2hvbGQpOworCisJCWh3bWdyLT5wbGF0Zm9ybV9kZXNjcmlwdG9yLkNBQ0xl YWthZ2UgPSBsZTMyX3RvX2NwdShwdGFibGU1LT51bENBQ0xlYWthZ2UpOworCisJCWh3bWdyLT5k eW5fc3RhdGUuY2FjX2xlYWthZ2VfdGFibGUgPSBOVUxMOworCisJCWlmICgwICE9IHB0YWJsZTUt PnVzQ0FDTGVha2FnZVRhYmxlT2Zmc2V0KSB7CisJCQljb25zdCBBVE9NX1BQTElCX0NBQ19MZWFr YWdlX1RhYmxlICpwQ0FDX2xlYWthZ2VfdGFibGUgPQorCQkJCShBVE9NX1BQTElCX0NBQ19MZWFr YWdlX1RhYmxlICopKCgodW5zaWduZWQgbG9uZylwdGFibGU1KSArCisJCQkJbGUxNl90b19jcHUo cHRhYmxlNS0+dXNDQUNMZWFrYWdlVGFibGVPZmZzZXQpKTsKKwkJCXJlc3VsdCA9IGdldF9jYWNf bGVha2FnZV90YWJsZShod21nciwKKwkJCQkmaHdtZ3ItPmR5bl9zdGF0ZS5jYWNfbGVha2FnZV90 YWJsZSwgcENBQ19sZWFrYWdlX3RhYmxlKTsKKwkJfQorCisJCWh3bWdyLT5wbGF0Zm9ybV9kZXNj cmlwdG9yLkxvYWRMaW5lU2xvcGUgPSBsZTE2X3RvX2NwdShwdGFibGU1LT51c0xvYWRMaW5lU2xv cGUpOworCisJCWh3bWdyLT5keW5fc3RhdGUucHBtX3BhcmFtZXRlcl90YWJsZSA9IE5VTEw7CisK KwkJaWYgKDAgIT0gcHRhYmxlMy0+dXNFeHRlbmRlbmRlZEhlYWRlck9mZnNldCkgeworCQkJZXh0 ZW5kZWRfaGVhZGVyID0gKGNvbnN0IEFUT01fUFBMSUJfRVhURU5ERURIRUFERVIgKikKKwkJCQkJ KCgodW5zaWduZWQgbG9uZylwb3dlcnBsYXlfdGFibGUpICsKKwkJCQkJbGUxNl90b19jcHUocHRh YmxlMy0+dXNFeHRlbmRlbmRlZEhlYWRlck9mZnNldCkpOworCQkJaWYgKChleHRlbmRlZF9oZWFk ZXItPnVzUFBNVGFibGVPZmZzZXQgPiAwKSAmJgorCQkJCWxlMTZfdG9fY3B1KGV4dGVuZGVkX2hl YWRlci0+dXNTaXplKSA+PQorCQkJCSAgICBTSVpFX09GX0FUT01fUFBMSUJfRVhURU5ERURIRUFE RVJfVjUpIHsKKwkJCQl0YWJsZV9vZmZzZXQgPSBsZTE2X3RvX2NwdShleHRlbmRlZF9oZWFkZXIt PnVzUFBNVGFibGVPZmZzZXQpOworCQkJCWF0b21fcHBtX3RhYmxlID0gKEFUT01fUFBMSUJfUFBN X1RhYmxlICopCisJCQkJCSgoKHVuc2lnbmVkIGxvbmcpcG93ZXJwbGF5X3RhYmxlKSArIHRhYmxl X29mZnNldCk7CisJCQkJaWYgKDAgPT0gZ2V0X3BsYXRmb3JtX3Bvd2VyX21hbmFnZW1lbnRfdGFi bGUoaHdtZ3IsIGF0b21fcHBtX3RhYmxlKSkKKwkJCQkJcGhtX2NhcF9zZXQoaHdtZ3ItPnBsYXRm b3JtX2Rlc2NyaXB0b3IucGxhdGZvcm1DYXBzLAorCQkJCQkJUEhNX1BsYXRmb3JtQ2Fwc19FbmFi bGVQbGF0Zm9ybVBvd2VyTWFuYWdlbWVudCk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHJlc3Vs dDsKK30KKworc3RhdGljIGludCBpbml0X3BoYXNlX3NoZWRkaW5nX3RhYmxlKHN0cnVjdCBwcF9o d21nciAqaHdtZ3IsCisJCWNvbnN0IEFUT01fUFBMSUJfUE9XRVJQTEFZVEFCTEUgKnBvd2VycGxh eV90YWJsZSkKK3sKKwlpZiAobGUxNl90b19jcHUocG93ZXJwbGF5X3RhYmxlLT51c1RhYmxlU2l6 ZSkgPj0KKwkgICAgc2l6ZW9mKEFUT01fUFBMSUJfUE9XRVJQTEFZVEFCTEU0KSkgeworCQljb25z dCBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFNCAqcG93ZXJwbGF5X3RhYmxlNCA9CisJCQkJKGNv bnN0IEFUT01fUFBMSUJfUE9XRVJQTEFZVEFCTEU0ICopcG93ZXJwbGF5X3RhYmxlOworCisJCWlm ICgwICE9IHBvd2VycGxheV90YWJsZTQtPnVzVmRkY1BoYXNlU2hlZExpbWl0c1RhYmxlT2Zmc2V0 KSB7CisJCQljb25zdCBBVE9NX1BQTElCX1BoYXNlU2hlZGRpbmdMaW1pdHNfVGFibGUgKnB0YWJs ZSA9CisJCQkJKEFUT01fUFBMSUJfUGhhc2VTaGVkZGluZ0xpbWl0c19UYWJsZSAqKQorCQkJCSgo KHVuc2lnbmVkIGxvbmcpcG93ZXJwbGF5X3RhYmxlNCkgKworCQkJCWxlMTZfdG9fY3B1KHBvd2Vy cGxheV90YWJsZTQtPnVzVmRkY1BoYXNlU2hlZExpbWl0c1RhYmxlT2Zmc2V0KSk7CisJCQlzdHJ1 Y3QgcGhtX3BoYXNlX3NoZWRkaW5nX2xpbWl0c190YWJsZSAqdGFibGU7CisJCQl1bnNpZ25lZCBs b25nIHNpemUsIGk7CisKKworCQkJc2l6ZSA9IHNpemVvZih1bnNpZ25lZCBsb25nKSArCisJCQkJ KHNpemVvZihzdHJ1Y3QgcGhtX3BoYXNlX3NoZWRkaW5nX2xpbWl0c190YWJsZSkgKgorCQkJCXB0 YWJsZS0+dWNOdW1FbnRyaWVzKTsKKworCQkJdGFibGUgPSBremFsbG9jKHNpemUsIEdGUF9LRVJO RUwpOworCisJCQl0YWJsZS0+Y291bnQgPSAodW5zaWduZWQgbG9uZylwdGFibGUtPnVjTnVtRW50 cmllczsKKworCQkJZm9yIChpID0gMDsgaSA8IHRhYmxlLT5jb3VudDsgaSsrKSB7CisJCQkJdGFi bGUtPmVudHJpZXNbaV0uVm9sdGFnZSA9ICh1bnNpZ25lZCBsb25nKWxlMTZfdG9fY3B1KHB0YWJs ZS0+ZW50cmllc1tpXS51c1ZvbHRhZ2UpOworCQkJCXRhYmxlLT5lbnRyaWVzW2ldLlNjbGsgICAg PSAoKHVuc2lnbmVkIGxvbmcpcHRhYmxlLT5lbnRyaWVzW2ldLnVjU2Nsa0hpZ2ggPDwgMTYpCisJ CQkJCQkJfCBsZTE2X3RvX2NwdShwdGFibGUtPmVudHJpZXNbaV0udXNTY2xrTG93KTsKKwkJCQl0 YWJsZS0+ZW50cmllc1tpXS5NY2xrICAgID0gKCh1bnNpZ25lZCBsb25nKXB0YWJsZS0+ZW50cmll c1tpXS51Y01jbGtIaWdoIDw8IDE2KQorCQkJCQkJCXwgbGUxNl90b19jcHUocHRhYmxlLT5lbnRy aWVzW2ldLnVzTWNsa0xvdyk7CisJCQl9CisJCQlod21nci0+ZHluX3N0YXRlLnZkZGNfcGhhc2Vf c2hlZF9saW1pdHNfdGFibGUgPSB0YWJsZTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitp bnQgZ2V0X251bWJlcl9vZl92Y2Vfc3RhdGVfdGFibGVfZW50cmllcygKKwkJCQkJCSAgc3RydWN0 IHBwX2h3bWdyICpod21ncikKK3sKKwljb25zdCBBVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFICp0 YWJsZSA9CisJCQkJCSAgICAgZ2V0X3Bvd2VycGxheV90YWJsZShod21ncik7CisJY29uc3QgQVRP TV9QUExJQl9WQ0VfU3RhdGVfVGFibGUgKnZjZV90YWJsZSA9CisJCQkJICAgIGdldF92Y2Vfc3Rh dGVfdGFibGUoaHdtZ3IsIHRhYmxlKTsKKworCWlmICh2Y2VfdGFibGUgPiAwKQorCQlyZXR1cm4g dmNlX3RhYmxlLT5udW1FbnRyaWVzOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBnZXRfdmNlX3N0 YXRlX3RhYmxlX2VudHJ5KHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCisJCQkJCQkJdW5zaWduZWQg bG9uZyBpLAorCQkJCQkJCXN0cnVjdCBQUF9WQ0VTdGF0ZSAqdmNlX3N0YXRlLAorCQkJCQkJCXZv aWQgKipjbG9ja19pbmZvLAorCQkJCQkJCXVuc2lnbmVkIGxvbmcgKmZsYWcpCit7CisJY29uc3Qg QVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRSAqcG93ZXJwbGF5X3RhYmxlID0gZ2V0X3Bvd2VycGxh eV90YWJsZShod21ncik7CisKKwljb25zdCBBVE9NX1BQTElCX1ZDRV9TdGF0ZV9UYWJsZSAqdmNl X3N0YXRlX3RhYmxlID0gZ2V0X3ZjZV9zdGF0ZV90YWJsZShod21nciwgcG93ZXJwbGF5X3RhYmxl KTsKKworCXVuc2lnbmVkIHNob3J0IHZjZV9jbG9ja19pbmZvX2FycmF5X29mZnNldCA9IGdldF92 Y2VfY2xvY2tfaW5mb19hcnJheV9vZmZzZXQoaHdtZ3IsIHBvd2VycGxheV90YWJsZSk7CisKKwlj b25zdCBWQ0VDbG9ja0luZm9BcnJheSAqdmNlX2Nsb2NrX2luZm9fYXJyYXkgPSAoY29uc3QgVkNF Q2xvY2tJbmZvQXJyYXkgKikoKCh1bnNpZ25lZCBsb25nKSBwb3dlcnBsYXlfdGFibGUpICsgdmNl X2Nsb2NrX2luZm9fYXJyYXlfb2Zmc2V0KTsKKworCWNvbnN0IENsb2NrSW5mb0FycmF5ICpjbG9j a19hcnJheXMgPSAoQ2xvY2tJbmZvQXJyYXkgKikoKCh1bnNpZ25lZCBsb25nKXBvd2VycGxheV90 YWJsZSkgKyBwb3dlcnBsYXlfdGFibGUtPnVzQ2xvY2tJbmZvQXJyYXlPZmZzZXQpOworCisJY29u c3QgQVRPTV9QUExJQl9WQ0VfU3RhdGVfUmVjb3JkICpyZWNvcmQgPSAmdmNlX3N0YXRlX3RhYmxl LT5lbnRyaWVzW2ldOworCisJY29uc3QgVkNFQ2xvY2tJbmZvICp2Y2VfY2xvY2tfaW5mbyA9ICZ2 Y2VfY2xvY2tfaW5mb19hcnJheS0+ZW50cmllc1tyZWNvcmQtPnVjVkNFQ2xvY2tJbmZvSW5kZXhd OworCisJdW5zaWduZWQgbG9uZyBjbG9ja0luZm9JbmRleCA9IHJlY29yZC0+dWNDbG9ja0luZm9J bmRleCAmIDB4M0Y7CisKKwkqZmxhZyA9IChyZWNvcmQtPnVjQ2xvY2tJbmZvSW5kZXggPj4gTlVN X0JJVFNfQ0xPQ0tfSU5GT19BUlJBWV9JTkRFWCk7CisKKwl2Y2Vfc3RhdGUtPmV2Y2xrID0gKCh1 aW50MzJfdCl2Y2VfY2xvY2tfaW5mby0+dWNFVkNsa0hpZ2ggPDwgMTYpIHwgdmNlX2Nsb2NrX2lu Zm8tPnVzRVZDbGtMb3c7CisJdmNlX3N0YXRlLT5lY2NsayA9ICgodWludDMyX3QpdmNlX2Nsb2Nr X2luZm8tPnVjRUNDbGtIaWdoIDw8IDE2KSB8IHZjZV9jbG9ja19pbmZvLT51c0VDQ2xrTG93Owor CisJKmNsb2NrX2luZm8gPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZykoY2xvY2tfYXJyYXlzLT5j bG9ja0luZm8pICsgKGNsb2NrSW5mb0luZGV4ICogY2xvY2tfYXJyYXlzLT51Y0VudHJ5U2l6ZSkp OworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBwcF90YWJsZXNfaW5pdGlhbGl6ZShz dHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQoreworCWludCByZXN1bHQ7CisJY29uc3QgQVRPTV9QUExJ Ql9QT1dFUlBMQVlUQUJMRSAqcG93ZXJwbGF5X3RhYmxlOworCisJcG93ZXJwbGF5X3RhYmxlID0g Z2V0X3Bvd2VycGxheV90YWJsZShod21ncik7CisKKwlyZXN1bHQgPSBpbml0X3Bvd2VycGxheV90 YWJsZXMoaHdtZ3IsIHBvd2VycGxheV90YWJsZSk7CisKKwlpZiAoMCA9PSByZXN1bHQpCisJCXJl c3VsdCA9IHNldF9wbGF0Zm9ybV9jYXBzKGh3bWdyLAorCQkJCWxlMzJfdG9fY3B1KHBvd2VycGxh eV90YWJsZS0+dWxQbGF0Zm9ybUNhcHMpKTsKKworCWlmICgwID09IHJlc3VsdCkKKwkJcmVzdWx0 ID0gaW5pdF90aGVybWFsX2NvbnRyb2xsZXIoaHdtZ3IsIHBvd2VycGxheV90YWJsZSk7CisKKwlp ZiAoMCA9PSByZXN1bHQpCisJCXJlc3VsdCA9IGluaXRfb3ZlcmRyaXZlX2xpbWl0cyhod21nciwg cG93ZXJwbGF5X3RhYmxlKTsKKworCWlmICgwID09IHJlc3VsdCkKKwkJcmVzdWx0ID0gaW5pdF9j bG9ja192b2x0YWdlX2RlcGVuZGVuY3koaHdtZ3IsCisJCQkJCQlwb3dlcnBsYXlfdGFibGUpOwor CisJaWYgKDAgPT0gcmVzdWx0KQorCQlyZXN1bHQgPSBpbml0X2RwbTJfcGFyYW1ldGVycyhod21n ciwgcG93ZXJwbGF5X3RhYmxlKTsKKworCWlmICgwID09IHJlc3VsdCkKKwkJcmVzdWx0ID0gaW5p dF9waGFzZV9zaGVkZGluZ190YWJsZShod21nciwgcG93ZXJwbGF5X3RhYmxlKTsKKworCXJldHVy biByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgcHBfdGFibGVzX3VuaW5pdGlhbGl6ZShzdHJ1Y3Qg cHBfaHdtZ3IgKmh3bWdyKQoreworCWlmIChOVUxMICE9IGh3bWdyLT5zb2Z0X3BwX3RhYmxlKSB7 CisJCWtmcmVlKGh3bWdyLT5zb2Z0X3BwX3RhYmxlKTsKKwkJaHdtZ3ItPnNvZnRfcHBfdGFibGUg PSBOVUxMOworCX0KKworCWlmIChOVUxMICE9IGh3bWdyLT5keW5fc3RhdGUudmRkY19kZXBlbmRl bmN5X29uX3NjbGspIHsKKwkJa2ZyZWUoaHdtZ3ItPmR5bl9zdGF0ZS52ZGRjX2RlcGVuZGVuY3lf b25fc2Nsayk7CisJCWh3bWdyLT5keW5fc3RhdGUudmRkY19kZXBlbmRlbmN5X29uX3NjbGsgPSBO VUxMOworCX0KKworCWlmIChOVUxMICE9IGh3bWdyLT5keW5fc3RhdGUudmRkY2lfZGVwZW5kZW5j eV9vbl9tY2xrKSB7CisJCWtmcmVlKGh3bWdyLT5keW5fc3RhdGUudmRkY2lfZGVwZW5kZW5jeV9v bl9tY2xrKTsKKwkJaHdtZ3ItPmR5bl9zdGF0ZS52ZGRjaV9kZXBlbmRlbmN5X29uX21jbGsgPSBO VUxMOworCX0KKworCWlmIChOVUxMICE9IGh3bWdyLT5keW5fc3RhdGUudmRkY19kZXBlbmRlbmN5 X29uX21jbGspIHsKKwkJa2ZyZWUoaHdtZ3ItPmR5bl9zdGF0ZS52ZGRjX2RlcGVuZGVuY3lfb25f bWNsayk7CisJCWh3bWdyLT5keW5fc3RhdGUudmRkY19kZXBlbmRlbmN5X29uX21jbGsgPSBOVUxM OworCX0KKworCWlmIChOVUxMICE9IGh3bWdyLT5keW5fc3RhdGUubXZkZF9kZXBlbmRlbmN5X29u X21jbGspIHsKKwkJa2ZyZWUoaHdtZ3ItPmR5bl9zdGF0ZS5tdmRkX2RlcGVuZGVuY3lfb25fbWNs ayk7CisJCWh3bWdyLT5keW5fc3RhdGUubXZkZF9kZXBlbmRlbmN5X29uX21jbGsgPSBOVUxMOwor CX0KKworCWlmIChOVUxMICE9IGh3bWdyLT5keW5fc3RhdGUudmFsaWRfbWNsa192YWx1ZXMpIHsK KwkJa2ZyZWUoaHdtZ3ItPmR5bl9zdGF0ZS52YWxpZF9tY2xrX3ZhbHVlcyk7CisJCWh3bWdyLT5k eW5fc3RhdGUudmFsaWRfbWNsa192YWx1ZXMgPSBOVUxMOworCX0KKworCWlmIChOVUxMICE9IGh3 bWdyLT5keW5fc3RhdGUudmFsaWRfc2Nsa192YWx1ZXMpIHsKKwkJa2ZyZWUoaHdtZ3ItPmR5bl9z dGF0ZS52YWxpZF9zY2xrX3ZhbHVlcyk7CisJCWh3bWdyLT5keW5fc3RhdGUudmFsaWRfc2Nsa192 YWx1ZXMgPSBOVUxMOworCX0KKworCWlmIChOVUxMICE9IGh3bWdyLT5keW5fc3RhdGUuY2FjX2xl YWthZ2VfdGFibGUpIHsKKwkJa2ZyZWUoaHdtZ3ItPmR5bl9zdGF0ZS5jYWNfbGVha2FnZV90YWJs ZSk7CisJCWh3bWdyLT5keW5fc3RhdGUuY2FjX2xlYWthZ2VfdGFibGUgPSBOVUxMOworCX0KKwor CWlmIChOVUxMICE9IGh3bWdyLT5keW5fc3RhdGUudmRkY19waGFzZV9zaGVkX2xpbWl0c190YWJs ZSkgeworCQlrZnJlZShod21nci0+ZHluX3N0YXRlLnZkZGNfcGhhc2Vfc2hlZF9saW1pdHNfdGFi bGUpOworCQlod21nci0+ZHluX3N0YXRlLnZkZGNfcGhhc2Vfc2hlZF9saW1pdHNfdGFibGUgPSBO VUxMOworCX0KKworCWlmIChOVUxMICE9IGh3bWdyLT5keW5fc3RhdGUudmNlX2Nsb2NsX3ZvbHRh Z2VfZGVwZW5kZW5jeV90YWJsZSkgeworCQlrZnJlZShod21nci0+ZHluX3N0YXRlLnZjZV9jbG9j bF92b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUpOworCQlod21nci0+ZHluX3N0YXRlLnZjZV9jbG9j bF92b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUgPSBOVUxMOworCX0KKworCWlmIChOVUxMICE9IGh3 bWdyLT5keW5fc3RhdGUudXZkX2Nsb2NsX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZSkgeworCQlr ZnJlZShod21nci0+ZHluX3N0YXRlLnV2ZF9jbG9jbF92b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUp OworCQlod21nci0+ZHluX3N0YXRlLnV2ZF9jbG9jbF92b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUg PSBOVUxMOworCX0KKworCWlmIChOVUxMICE9IGh3bWdyLT5keW5fc3RhdGUuc2FtdV9jbG9ja192 b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUpIHsKKwkJa2ZyZWUoaHdtZ3ItPmR5bl9zdGF0ZS5zYW11 X2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZSk7CisJCWh3bWdyLT5keW5fc3RhdGUuc2Ft dV9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUgPSBOVUxMOworCX0KKworCWlmIChOVUxM ICE9IGh3bWdyLT5keW5fc3RhdGUuYWNwX2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZSkg eworCQlrZnJlZShod21nci0+ZHluX3N0YXRlLmFjcF9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lf dGFibGUpOworCQlod21nci0+ZHluX3N0YXRlLmFjcF9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lf dGFibGUgPSBOVUxMOworCX0KKworCWlmIChOVUxMICE9IGh3bWdyLT5keW5fc3RhdGUuY2FjX2R0 cF90YWJsZSkgeworCQlrZnJlZShod21nci0+ZHluX3N0YXRlLmNhY19kdHBfdGFibGUpOworCQlo d21nci0+ZHluX3N0YXRlLmNhY19kdHBfdGFibGUgPSBOVUxMOworCX0KKworCWlmIChOVUxMICE9 IGh3bWdyLT5keW5fc3RhdGUucHBtX3BhcmFtZXRlcl90YWJsZSkgeworCQlrZnJlZShod21nci0+ ZHluX3N0YXRlLnBwbV9wYXJhbWV0ZXJfdGFibGUpOworCQlod21nci0+ZHluX3N0YXRlLnBwbV9w YXJhbWV0ZXJfdGFibGUgPSBOVUxMOworCX0KKworCWlmIChOVUxMICE9IGh3bWdyLT5keW5fc3Rh dGUudmRkX2dmeF9kZXBlbmRlbmN5X29uX3NjbGspIHsKKwkJa2ZyZWUoaHdtZ3ItPmR5bl9zdGF0 ZS52ZGRfZ2Z4X2RlcGVuZGVuY3lfb25fc2Nsayk7CisJCWh3bWdyLT5keW5fc3RhdGUudmRkX2dm eF9kZXBlbmRlbmN5X29uX3NjbGsgPSBOVUxMOworCX0KKworCWlmIChOVUxMICE9IGh3bWdyLT5k eW5fc3RhdGUudnFfYnVkZ2V0aW5nX3RhYmxlKSB7CisJCWtmcmVlKGh3bWdyLT5keW5fc3RhdGUu dnFfYnVkZ2V0aW5nX3RhYmxlKTsKKwkJaHdtZ3ItPmR5bl9zdGF0ZS52cV9idWRnZXRpbmdfdGFi bGUgPSBOVUxMOworCX0KKworCXJldHVybiAwOworfQorCitjb25zdCBzdHJ1Y3QgcHBfdGFibGVf ZnVuYyBwcHRhYmxlX2Z1bmNzID0geworCS5wcHRhYmxlX2luaXQgPSBwcF90YWJsZXNfaW5pdGlh bGl6ZSwKKwkucHB0YWJsZV9maW5pID0gcHBfdGFibGVzX3VuaW5pdGlhbGl6ZSwKKwkucHB0YWJs ZV9nZXRfbnVtYmVyX29mX3ZjZV9zdGF0ZV90YWJsZV9lbnRyaWVzID0KKwkJCQlnZXRfbnVtYmVy X29mX3ZjZV9zdGF0ZV90YWJsZV9lbnRyaWVzLAorCS5wcHRhYmxlX2dldF92Y2Vfc3RhdGVfdGFi bGVfZW50cnkgPQorCQkJCQkJZ2V0X3ZjZV9zdGF0ZV90YWJsZV9lbnRyeSwKK307CisKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3Byb2Nlc3NwcHRhYmxl cy5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvcHJvY2Vzc3BwdGFibGVz LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0MzQ4MAotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3Byb2Nlc3NwcHRh Ymxlcy5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNSBBZHZhbmNlZCBN aWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxs IGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM CisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisg KiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKiBJbnRlcmZhY2UgRnVuY3Rpb25z IHJlbGF0ZWQgdG8gdGhlIEJJT1MgUG93ZXJQbGF5IFRhYmxlcy4KKyAqCisgKi8KKworI2lmbmRl ZiBQUk9DRVNTUFBUQUJMRVNfSAorI2RlZmluZSBQUk9DRVNTUFBUQUJMRVNfSAorCitzdHJ1Y3Qg cHBfaHdtZ3I7CitzdHJ1Y3QgcHBfcG93ZXJfc3RhdGU7CitzdHJ1Y3QgcHBfaHdfcG93ZXJfc3Rh dGU7CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcHBfdGFibGVfZnVuYyBwcHRhYmxlX2Z1bmNzOwor Cit0eXBlZGVmIGludCAoKnBwX3RhYmxlc19od19jbG9ja19pbmZvX2NhbGxiYWNrKShzdHJ1Y3Qg cHBfaHdtZ3IgKmh3bWdyLAorCQkJCQlzdHJ1Y3QgcHBfaHdfcG93ZXJfc3RhdGUgKmh3X3BzLAor CQkJCQkJCXVuc2lnbmVkIGludCBpbmRleCwKKwkJCQkJCSBjb25zdCB2b2lkICpjbG9ja19pbmZv KTsKKworaW50IHBwX3RhYmxlc19nZXRfbnVtX29mX2VudHJpZXMoc3RydWN0IHBwX2h3bWdyICpo d21nciwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgKm51bV9vZl9lbnRyaWVzKTsKKworaW50IHBw X3RhYmxlc19nZXRfZW50cnkoc3RydWN0IHBwX2h3bWdyICpod21nciwKKwkJCQkJCXVuc2lnbmVk IGxvbmcgZW50cnlfaW5kZXgsCisJCQkJCQlzdHJ1Y3QgcHBfcG93ZXJfc3RhdGUgKnBzLAorCQkJ CXBwX3RhYmxlc19od19jbG9ja19pbmZvX2NhbGxiYWNrIGZ1bmMpOworCisjZW5kaWYKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2luYy9hbWRfcG93ZXJwbGF5Lmgg Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9pbmMvYW1kX3Bvd2VycGxheS5oCmluZGV4 IDA5ZDlkNWEuLjIyODFkODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJw bGF5L2luYy9hbWRfcG93ZXJwbGF5LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBs YXkvaW5jL2FtZF9wb3dlcnBsYXkuaApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgImFtZF9z aGFyZWQuaCIKICNpbmNsdWRlICJjZ3NfY29tbW9uLmgiCiAKLQogZW51bSBhbWRfcHBfZXZlbnQg ewogCUFNRF9QUF9FVkVOVF9JTklUSUFMSVpFID0gMCwKIAlBTURfUFBfRVZFTlRfVU5JTklUSUFM SVpFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaW5jL2hhcmR3 YXJlbWFuYWdlci5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaW5jL2hhcmR3YXJl bWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZTEyNTYKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9pbmMvaGFyZHdh cmVtYW5hZ2VyLmgKQEAgLTAsMCArMSwyODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNSBBZHZh bmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh bnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkg b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUg IlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0 aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAq IGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29u cyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0 IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0 IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgor ICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisg KgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg T0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5U IFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBG Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisjaWZuZGVm IF9IQVJEV0FSRV9NQU5BR0VSX0hfCisjZGVmaW5lIF9IQVJEV0FSRV9NQU5BR0VSX0hfCisKK3N0 cnVjdCBwcF9od21ncjsKKworLyogQXV0b21hdGljIFBvd2VyIFN0YXRlIFRocm90dGxpbmcgKi8K K2VudW0gUEhNX0F1dG9UaHJvdHRsZVNvdXJjZQoreworICAgIFBITV9BdXRvVGhyb3R0bGVTb3Vy Y2VfVGhlcm1hbCwKKyAgICBQSE1fQXV0b1Rocm90dGxlU291cmNlX0V4dGVybmFsCit9OworCit0 eXBlZGVmIGVudW0gUEhNX0F1dG9UaHJvdHRsZVNvdXJjZSBQSE1fQXV0b1Rocm90dGxlU291cmNl OworCitlbnVtIHBobV9wbGF0Zm9ybV9jYXBzIHsKKwlQSE1fUGxhdGZvcm1DYXBzX0F0b21CaW9z UHBWMSA9IDAsCisJUEhNX1BsYXRmb3JtQ2Fwc19Qb3dlclBsYXlTdXBwb3J0LAorCVBITV9QbGF0 Zm9ybUNhcHNfQUNPdmVyZHJpdmVTdXBwb3J0LAorCVBITV9QbGF0Zm9ybUNhcHNfQmFja2xpZ2h0 U3VwcG9ydCwKKwlQSE1fUGxhdGZvcm1DYXBzX1RoZXJtYWxDb250cm9sbGVyLAorCVBITV9QbGF0 Zm9ybUNhcHNfQmlvc1Bvd2VyU291cmNlQ29udHJvbCwKKwlQSE1fUGxhdGZvcm1DYXBzX0Rpc2Fi bGVWb2x0YWdlVHJhbnNpdGlvbiwKKwlQSE1fUGxhdGZvcm1DYXBzX0Rpc2FibGVFbmdpbmVUcmFu c2l0aW9uLAorCVBITV9QbGF0Zm9ybUNhcHNfRGlzYWJsZU1lbW9yeVRyYW5zaXRpb24sCisJUEhN X1BsYXRmb3JtQ2Fwc19EeW5hbWljUG93ZXJNYW5hZ2VtZW50LAorCVBITV9QbGF0Zm9ybUNhcHNf RW5hYmxlQVNQTUwwcywKKwlQSE1fUGxhdGZvcm1DYXBzX0VuYWJsZUFTUE1MMSwKKwlQSE1fUGxh dGZvcm1DYXBzX09ENWluQUNTdXBwb3J0LAorCVBITV9QbGF0Zm9ybUNhcHNfT0Q1aW5EQ1N1cHBv cnQsCisJUEhNX1BsYXRmb3JtQ2Fwc19Tb2Z0U3RhdGVPRDUsCisJUEhNX1BsYXRmb3JtQ2Fwc19O b09ENVN1cHBvcnQsCisJUEhNX1BsYXRmb3JtQ2Fwc19Db250aW51b3VzSGFyZHdhcmVQZXJmb3Jt YW5jZVJhbmdlLAorCVBITV9QbGF0Zm9ybUNhcHNfQWN0aXZpdHlSZXBvcnRpbmcsCisJUEhNX1Bs YXRmb3JtQ2Fwc19FbmFibGVCYWNrYmlhcywKKwlQSE1fUGxhdGZvcm1DYXBzX092ZXJkcml2ZURp c2FibGVkQnlQb3dlckJ1ZGdldCwKKwlQSE1fUGxhdGZvcm1DYXBzX1Nob3dQb3dlckJ1ZGdldFdh cm5pbmcsCisJUEhNX1BsYXRmb3JtQ2Fwc19Qb3dlckJ1ZGdldFdhaXZlckF2YWlsYWJsZSwKKwlQ SE1fUGxhdGZvcm1DYXBzX0dGWENsb2NrR2F0aW5nU3VwcG9ydCwKKwlQSE1fUGxhdGZvcm1DYXBz X01NQ2xvY2tHYXRpbmdTdXBwb3J0LAorCVBITV9QbGF0Zm9ybUNhcHNfQXV0b21hdGljRENUcmFu c2l0aW9uLAorCVBITV9QbGF0Zm9ybUNhcHNfR2VtaW5pUHJpbWFyeSwKKwlQSE1fUGxhdGZvcm1D YXBzX01lbW9yeVNwcmVhZFNwZWN0cnVtU3VwcG9ydCwKKwlQSE1fUGxhdGZvcm1DYXBzX0VuZ2lu ZVNwcmVhZFNwZWN0cnVtU3VwcG9ydCwKKwlQSE1fUGxhdGZvcm1DYXBzX1N0ZXBWZGRjLAorCVBI TV9QbGF0Zm9ybUNhcHNfRHluYW1pY1BDSUVHZW4yU3VwcG9ydCwKKwlQSE1fUGxhdGZvcm1DYXBz X1NNQywKKwlQSE1fUGxhdGZvcm1DYXBzX0ZhdWx0eUludGVybmFsVGhlcm1hbFJlYWRpbmcsICAg ICAgICAgIC8qIEludGVybmFsIHRoZXJtYWwgY29udHJvbGxlciByZXBvcnRzIGZhdWx0eSB0ZW1w ZXJhdHVyZSB2YWx1ZSB3aGVuIERBQzIgaXMgYWN0aXZlICovCisJUEhNX1BsYXRmb3JtQ2Fwc19F bmFibGVWb2x0YWdlQ29udHJvbCwgICAgICAgICAgICAgICAgICAvKiBpbmRpY2F0ZXMgdm9sdGFn ZSBjYW4gYmUgY29udHJvbGxlZCAqLworCVBITV9QbGF0Zm9ybUNhcHNfRW5hYmxlU2lkZXBvcnRD b250cm9sLCAgICAgICAgICAgICAgICAgLyogaW5kaWNhdGVzIFNpZGVwb3J0IGNhbiBiZSBjb250 cm9sbGVkICovCisJUEhNX1BsYXRmb3JtQ2Fwc19WaWRlb1BsYXliYWNrRUVVTm90aWZpY2F0aW9u LCAgICAgICAgICAvKiBpbmRpY2F0ZXMgRUVVIG5vdGlmaWNhdGlvbiBvZiB2aWRlbyBzdGFydC9z dG9wIGlzIHJlcXVpcmVkICovCisJUEhNX1BsYXRmb3JtQ2Fwc19UdXJuT2ZmUGxsX0FTUE1MMSwg ICAgICAgICAgICAgICAgICAgICAvKiBQQ0lFIFR1cm4gT2ZmIFBMTCBpbiBBU1BNIEwxICovCisJ UEhNX1BsYXRmb3JtQ2Fwc19FbmFibGVIVExpbmtDb250cm9sLCAgICAgICAgICAgICAgICAgICAv KiBpbmRpY2F0ZXMgSFQgTGluayBjYW4gYmUgY29udHJvbGxlZCBieSBBQ1BJIG9yIENMTUMgb3Zl cnJpZGVkL2F1dG9tYXRlZCBtb2RlLiAqLworCVBITV9QbGF0Zm9ybUNhcHNfUGVyZm9ybWFuY2VT dGF0ZU9ubHksICAgICAgICAgICAgICAgICAgLyogaW5kaWNhdGVzIG9ubHkgcGVyZm9ybWFuY2Ug cG93ZXIgc3RhdGUgdG8gYmUgdXNlZCBvbiBjdXJyZW50IHN5c3RlbS4gKi8KKwlQSE1fUGxhdGZv cm1DYXBzX0V4Y2x1c2l2ZU1vZGVBbHdheXNIaWdoLCAgICAgICAgICAgICAgIC8qIEluIEV4Y2x1 c2l2ZSAoM0QpIG1vZGUgYWx3YXlzIHN0YXkgaW4gSGlnaCBzdGF0ZS4gKi8KKwlQSE1fUGxhdGZv cm1DYXBzX0Rpc2FibGVNR0Nsb2NrR2F0aW5nLCAgICAgICAgICAgICAgICAgIC8qIHRvIGRpc2Fi bGUgTWVkaXVtIEdyYWluIENsb2NrIEdhdGluZyBvciBub3QgKi8KKwlQSE1fUGxhdGZvcm1DYXBz X0Rpc2FibGVNR0NHVFNTTSwgICAgICAgICAgICAgICAgICAgICAgIC8qIFRPIGRpc2FibGUgTWVk aXVtIEdyYWluIENsb2NrIEdhdGluZyBTaGFkZXIgQ29tcGxleCBjb250cm9sICovCisJUEhNX1Bs YXRmb3JtQ2Fwc19VVkRBbHdheXNIaWdoLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbiBV VkQgbW9kZSBhbHdheXMgc3RheSBpbiBIaWdoIHN0YXRlICovCisJUEhNX1BsYXRmb3JtQ2Fwc19E aXNhYmxlUG93ZXJHYXRpbmcsICAgICAgICAgICAgICAgICAgICAvKiB0byBkaXNhYmxlIHBvd2Vy IGdhdGluZyAqLworCVBITV9QbGF0Zm9ybUNhcHNfQ3VzdG9tVGhlcm1hbFBvbGljeSwgICAgICAg ICAgICAgICAgICAgLyogaW5kaWNhdGVzIG9ubHkgcGVyZm9ybWFuY2UgcG93ZXIgc3RhdGUgdG8g YmUgdXNlZCBvbiBjdXJyZW50IHN5c3RlbS4gKi8KKwlQSE1fUGxhdGZvcm1DYXBzX1N0YXlJbkJv b3RTdGF0ZSwgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXkgaW4gQm9vdCBTdGF0ZSwgZG8g bm90IGRvIGNsb2NrL3ZvbHRhZ2Ugb3IgUENJZSBMYW5lIGFuZCBHZW4gc3dpdGNoaW5nIChSVjd4 eCBhbmQgdXApLiAqLworCVBITV9QbGF0Zm9ybUNhcHNfU01DQWxsb3dTZXBhcmF0ZVNXVGhlcm1h bFN0YXRlLCAgICAgICAgLyogU01DIHVzZSBzZXBhcmF0ZSBTVyB0aGVybWFsIHN0YXRlLCBpbnN0 ZWFkIG9mIHRoZSBkZWZhdWx0IFNNQyB0aGVybWFsIHBvbGljeS4gKi8KKwlQSE1fUGxhdGZvcm1D YXBzX011bHRpVVZEU3RhdGVTdXBwb3J0LCAgICAgICAgICAgICAgICAgIC8qIFBvd2VycGxheSBz dGF0ZSB0YWJsZSBzdXBwb3J0cyBtdWx0aSBVVkQgc3RhdGVzLiAqLworCVBITV9QbGF0Zm9ybUNh cHNfRW5hYmxlU0NMS0RlZXBTbGVlcEZvclVWRCwgICAgICAgICAgICAgLyogV2l0aCBIVyBFQ09z LCB3ZSBkb24ndCBuZWVkIHRvIGRpc2FibGUgU0NMSyBEZWVwIFNsZWVwIGZvciBVVkQgc3RhdGUu ICovCisJUEhNX1BsYXRmb3JtQ2Fwc19FbmFibGVNQ1VIVExpbmtDb250cm9sLCAgICAgICAgICAg ICAgICAvKiBFbmFibGUgSFQgbGluayBjb250cm9sIGJ5IE1DVSAqLworCVBITV9QbGF0Zm9ybUNh cHNfQUJNLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQUJNIHN1cHBvcnQu Ki8KKwlQSE1fUGxhdGZvcm1DYXBzX0tvbmdUaGVybWFsUG9saWN5LCAgICAgICAgICAgICAgICAg ICAgIC8qIEEgdGhlcm1hbCBwb2xpY3kgc3BlY2lmaWMgZm9yIEtvbmcgKi8KKwlQSE1fUGxhdGZv cm1DYXBzX1N3aXRjaFZERE5CLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlmIHRoZSB1 c2VycyB3YW50IHRvIHN3aXRjaCBWREROQiAqLworCVBITV9QbGF0Zm9ybUNhcHNfVUxQUywgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3VwcG9ydCBVTFBTIG1vZGUgZWl0aGVy IHRocm91Z2ggQUNQSSBzdGF0ZSBvciBVTFBTIHN0YXRlICovCisJUEhNX1BsYXRmb3JtQ2Fwc19O YXRpdmVVTFBTLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBoYXJkd2FyZSBjYXBhYmxl IG9mIFVMUFMgc3RhdGUgKG90aGVyIHRoYW4gdGhyb3VnaCB0aGUgQUNQSSBzdGF0ZSkgKi8KKwlQ SE1fUGxhdGZvcm1DYXBzX0VuYWJsZU1WRERDb250cm9sLCAgICAgICAgICAgICAgICAgICAgIC8q IGluZGljYXRlcyB0aGF0IG1lbW9yeSB2b2x0YWdlIGNhbiBiZSBjb250cm9sbGVkICovCisJUEhN X1BsYXRmb3JtQ2Fwc19Db250cm9sVkREQ0ksICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBD b250cm9sIFZERENJIHNlcGFyYXRlbHkgZnJvbSBWRERDLiAqLworCVBITV9QbGF0Zm9ybUNhcHNf RGlzYWJsZURDT0RULCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5kaWNhdGVzIGlmIERD IE9EVCBhcHBseSBvciBub3QgKi8KKwlQSE1fUGxhdGZvcm1DYXBzX0R5bmFtaWNBQ1RpbWluZywg ICAgICAgICAgICAgICAgICAgICAgIC8qIGlmIHRoZSBTTUMgZHluYW1pY2FsbHkgcmUtcHJvZ3Jh bXMgTUMgU0VRIHJlZ2lzdGVyIHZhbHVlcyAqLworCVBITV9QbGF0Zm9ybUNhcHNfRW5hYmxlVGhl cm1hbEludEJ5R1BJTywgICAgICAgICAgICAgICAgLyogZW5hYmxlIHRocm90dGxlIGNvbnRyb2wg dGhyb3VnaCBHUElPICovCisJUEhNX1BsYXRmb3JtQ2Fwc19Cb290U3RhdGVPbkFsZXJ0LCAgICAg ICAgICAgICAgICAgICAgICAvKiBHbyB0byBib290IHN0YXRlIG9uIGFsZXJ0cywgZS5nLiBvbiBh biBBQy0+REMgdHJhbnNpdGlvbi4gKi8KKwlQSE1fUGxhdGZvcm1DYXBzX0RvbnRXYWl0Rm9yVkJs YW5rT25BbGVydCwgICAgICAgICAgICAgIC8qIERvIE5PVCB3YWl0IGZvciBWQkxBTksgZHVyaW5n IGFuIGFsZXJ0IChlLmcuIEFDLT5EQyB0cmFuc2l0aW9uKS4gKi8KKwlQSE1fUGxhdGZvcm1DYXBz X0ZvcmNlM0RDbG9ja1N1cHBvcnQsICAgICAgICAgICAgICAgICAgIC8qIGluZGljYXRlcyBpZiB0 aGUgcGxhdGZvcm0gc3VwcG9ydHMgZm9yY2UgM0QgY2xvY2suICovCisJUEhNX1BsYXRmb3JtQ2Fw c19NaWNyb2NvZGVGYW5Db250cm9sLCAgICAgICAgICAgICAgICAgICAvKiBGYW4gaXMgY29udHJv bGxlZCBieSB0aGUgU01DIG1pY3JvY29kZS4gKi8KKwlQSE1fUGxhdGZvcm1DYXBzX0FkanVzdFVW RFByaW9yaXR5Rm9yU1AsCisJUEhNX1BsYXRmb3JtQ2Fwc19EaXNhYmxlTGlnaHRTbGVlcCwgICAg ICAgICAgICAgICAgICAgICAvKiBMaWdodCBzbGVlcCBmb3IgZXZlcmdyZWVuIGZhbWlseS4gKi8K KwlQSE1fUGxhdGZvcm1DYXBzX0Rpc2FibGVNQ0xTLCAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIE1DIExpZ2h0IHNsZWVwICovCisJUEhNX1BsYXRmb3JtQ2Fwc19SZWd1bGF0b3JIb3QsICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmFibGUgdGhyb3R0bGluZyBvbiAncmVndWxhdG9y IGhvdCcgZXZlbnRzLiAqLworCVBITV9QbGF0Zm9ybUNhcHNfQkFDTywgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogU3VwcG9ydCBCdXMgQWxpdmUgQ2hpcCBPZmYgbW9kZSAqLwor CVBITV9QbGF0Zm9ybUNhcHNfRGlzYWJsZURQTSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogRGlzYWJsZSBEUE0sIHN1cHBvcnRlZCBmcm9tIExsYW5vICovCisJUEhNX1BsYXRmb3JtQ2Fw c19EeW5hbWljTTNBcmJpdGVyLCAgICAgICAgICAgICAgICAgICAgICAvKiBzdXBwb3J0IGR5bmFt aWNhbGx5IGNoYW5nZSBtMyBhcmJpdG9yIHBhcmFtZXRlcnMgKi8KKwlQSE1fUGxhdGZvcm1DYXBz X1NjbGtEZWVwU2xlZXAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN1cHBvcnQgc2NsayBk ZWVwIHNsZWVwICovCisJUEhNX1BsYXRmb3JtQ2Fwc19EeW5hbWljUGF0Y2hQb3dlclN0YXRlLCAg ICAgICAgICAgICAgICAvKiB0aGlzIEFTSUMgc3VwcG9ydHMgdG8gcGF0Y2ggcG93ZXIgc3RhdGUg ZHluYW1pY2FsbHkgKi8KKwlQSE1fUGxhdGZvcm1DYXBzX1RoZXJtYWxBdXRvVGhyb3R0bGluZywg ICAgICAgICAgICAgICAgIC8qIGVuYWJsaW5nIGF1dG8gdGhlcm1hbCB0aHJvdHRsaW5nLCAqLwor CVBITV9QbGF0Zm9ybUNhcHNfU3Vtb1RoZXJtYWxQb2xpY3ksICAgICAgICAgICAgICAgICAgICAg LyogQSB0aGVybWFsIHBvbGljeSBzcGVjaWZpYyBmb3IgU3VtbyAqLworCVBITV9QbGF0Zm9ybUNh cHNfUENJRVBlcmZvcm1hbmNlUmVxdWVzdCwgICAgICAgICAgICAgICAgLyogc3VwcG9ydCB0byBj aGFuZ2UgUkMgdm9sdGFnZSAqLworCVBITV9QbGF0Zm9ybUNhcHNfQkxDb250cm9sbGVkQnlHUFUs ICAgICAgICAgICAgICAgICAgICAgLyogc3VwcG9ydCB2YXJpYnJpZ2h0ICovCisJUEhNX1BsYXRm b3JtQ2Fwc19Qb3dlckNvbnRhaW5tZW50LCAgICAgICAgICAgICAgICAgICAgICAvKiBzdXBwb3J0 IERQTTIgcG93ZXIgY29udGFpbm1lbnQgKEFLQSBURFAgY2xhbXBpbmcpICovCisJUEhNX1BsYXRm b3JtQ2Fwc19TUVJhbXBpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdXBwb3J0 IERQTTIgU1EgcG93ZXIgdGhyb3R0bGUgKi8KKwlQSE1fUGxhdGZvcm1DYXBzX0NBQywgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN1cHBvcnQgQ2FwYWNpdGFuY2UgKiBBY3Rp dml0eSBwb3dlciBlc3RpbWF0aW9uICovCisJUEhNX1BsYXRmb3JtQ2Fwc19OSUNoaXBzZXRzLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3J0aGVybiBJc2xhbmQgYW5kIGJleW9uZCBj aGlwc2V0cyAqLworCVBITV9QbGF0Zm9ybUNhcHNfVHJpbml0eUNoaXBzZXRzLCAgICAgICAgICAg ICAgICAgICAgICAgLyogVHJpbml0eSBjaGlwc2V0ICovCisJUEhNX1BsYXRmb3JtQ2Fwc19FdmVy Z3JlZW5DaGlwc2V0cywgICAgICAgICAgICAgICAgICAgICAvKiBFdmVyZ3JlZW4gZmFtaWx5IGNo aXBzZXQgKi8KKwlQSE1fUGxhdGZvcm1DYXBzX1Bvd2VyQ29udHJvbCwgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIENheW1hbiBhbmQgYmV5b25kIGNoaXBzZXRzICovCisJUEhNX1BsYXRmb3Jt Q2Fwc19EaXNhYmxlTFNDbG9ja0dhdGluZywgICAgICAgICAgICAgICAgICAvKiB0byBkaXNhYmxl IExpZ2h0IFNsZWVwIGNvbnRyb2wgZm9yIEhEUCBtZW1vcmllcyAqLworCVBITV9QbGF0Zm9ybUNh cHNfQm9vc3RTdGF0ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhpcyBBU0lDIHN1 cHBvcnRzIGJvb3N0IHN0YXRlICovCisJUEhNX1BsYXRmb3JtQ2Fwc19Vc2VyTWF4Q2xvY2tGb3JN dWx0aURpc3BsYXlzLCAgICAgICAgICAvKiBpbmRpY2F0ZXMgaWYgbWF4IG1lbW9yeSBjbG9jayBp cyB1c2VkIGZvciBhbGwgc3RhdHVzIHdoZW4gbXVsdGlwbGUgZGlzcGxheXMgYXJlIGNvbm5lY3Rl ZCAqLworCVBITV9QbGF0Zm9ybUNhcHNfUmVnV3JpdGVEZWxheSwgICAgICAgICAgICAgICAgICAg ICAgICAgLyogaW5kaWNhdGVzIGlmIGJhY2sgdG8gYmFjayByZWcgd3JpdGUgZGVsYXkgaXMgcmVx dWlyZWQgKi8KKwlQSE1fUGxhdGZvcm1DYXBzX05vbkFCTVN1cHBvcnRJblBQTGliLCAgICAgICAg ICAgICAgICAgIC8qIEFCTSBpcyBub3Qgc3VwcG9ydGVkIGluIFBQTElCLCAobW92ZWQgZnJvbSBQ UExJQiB0byBEQUwpICovCisJUEhNX1BsYXRmb3JtQ2Fwc19HRlhEeW5hbWljTUdQb3dlckdhdGlu ZywgICAgICAgICAgICAgICAvKiBFbmFibGUgRHluYW1pYyBNRyBQb3dlckdhdGluZyBvbiBUcmlu aXR5ICovCisJUEhNX1BsYXRmb3JtQ2Fwc19EaXNhYmxlU01VVVZESGFuZHNoYWtlLCAgICAgICAg ICAgICAgICAvKiBEaXNhYmxlIFNNVSBVVkQgSGFuZHNoYWtlICovCisJUEhNX1BsYXRmb3JtQ2Fw c19EVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdXBwb3J0IERpZ2l0 YWwgVGVtcGVyYXR1cmUgRXN0aW1hdGlvbiAqLworCVBITV9QbGF0Zm9ybUNhcHNfVzUxMDBTcGVj aWZjX1NtdVNraXBNc2dEVEUsICAgICAgICAgICAgLyogVGhpcyBpcyBmb3IgdGhlIGZlYXR1cmUg cmVxdWVzdGVkIGJ5IERhdmlkIEIuLCBhbmQgVG9ubnkgVy4qLworCVBITV9QbGF0Zm9ybUNhcHNf VVZEUG93ZXJHYXRpbmcsICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5hYmxlIFVWRCBwb3dl ciBnYXRpbmcsIHN1cHBvcnRlZCBmcm9tIExsYW5vICovCisJUEhNX1BsYXRmb3JtQ2Fwc19VVkRE eW5hbWljUG93ZXJHYXRpbmcsICAgICAgICAgICAgICAgICAvKiBlbmFibGUgVVZEIER5bmFtaWMg cG93ZXIgZ2F0aW5nLCBzdXBwb3J0ZWQgZnJvbSBVVkQ1ICovCisJUEhNX1BsYXRmb3JtQ2Fwc19W Q0VQb3dlckdhdGluZywgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmFibGUgVkNFIHBvd2Vy IGdhdGluZywgc3VwcG9ydGVkIGZvciBUTiBhbmQgbGF0ZXIgQVNJQ3MgKi8KKwlQSE1fUGxhdGZv cm1DYXBzX1NhbXVQb3dlckdhdGluZywgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuYWJsZSBT QU1VIHBvd2VyIGdhdGluZywgc3VwcG9ydGVkIGZvciBLViBhbmQgbGF0ZXIgQVNJQ3MgKi8KKwlQ SE1fUGxhdGZvcm1DYXBzX1VWRERQTSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFVWRCBjbG9jayBEUE0gKi8KKwlQSE1fUGxhdGZvcm1DYXBzX1ZDRURQTSwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFZDRSBjbG9jayBEUE0gKi8KKwlQSE1fUGxhdGZvcm1DYXBz X1NhbXVEUE0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNBTVUgY2xvY2sgRFBN ICovCisJUEhNX1BsYXRmb3JtQ2Fwc19BY3BEUE0sICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBBQ1AgY2xvY2sgRFBNICovCisJUEhNX1BsYXRmb3JtQ2Fwc19TY2xrRGVlcFNsZWVw QWJvdmVMb3csICAgICAgICAgICAgICAgICAvKiBFbmFibGUgU0NMSyBEZWVwIFNsZWVwIG9uIGFs bCBEUE0gc3RhdGVzICovCisJUEhNX1BsYXRmb3JtQ2Fwc19EeW5hbWljVVZEU3RhdGUsICAgICAg ICAgICAgICAgICAgICAgICAvKiBEeW5hbWljIFVWRCBTdGF0ZSAqLworCVBITV9QbGF0Zm9ybUNh cHNfV2FudFNBTUNsa1dpdGhEdW1teUJhY2tFbmQsICAgICAgICAgICAgLyogU2V0IFNBTSBDbGsg V2l0aCBEdW1teSBCYWNrIEVuZCAqLworCVBITV9QbGF0Zm9ybUNhcHNfV2FudFVWRENsa1dpdGhE dW1teUJhY2tFbmQsICAgICAgICAgICAgLyogU2V0IFVWRCBDbGsgV2l0aCBEdW1teSBCYWNrIEVu ZCAqLworCVBITV9QbGF0Zm9ybUNhcHNfV2FudFZDRUNsa1dpdGhEdW1teUJhY2tFbmQsICAgICAg ICAgICAgLyogU2V0IFZDRSBDbGsgV2l0aCBEdW1teSBCYWNrIEVuZCAqLworCVBITV9QbGF0Zm9y bUNhcHNfV2FudEFDUENsa1dpdGhEdW1teUJhY2tFbmQsICAgICAgICAgICAgLyogU2V0IFNBTSBD bGsgV2l0aCBEdW1teSBCYWNrIEVuZCAqLworCVBITV9QbGF0Zm9ybUNhcHNfT0Q2aW5BQ1N1cHBv cnQsICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5kaWNhdGVzIHRoYXQgdGhlIEFTSUMvYmFj ayBlbmQgc3VwcG9ydHMgT0Q2ICovCisJUEhNX1BsYXRmb3JtQ2Fwc19PRDZpbkRDU3VwcG9ydCwg ICAgICAgICAgICAgICAgICAgICAgICAvKiBpbmRpY2F0ZXMgdGhhdCB0aGUgQVNJQy9iYWNrIGVu ZCBzdXBwb3J0cyBPRDYgaW4gREMgKi8KKwlQSE1fUGxhdGZvcm1DYXBzX0VuYWJsZVBsYXRmb3Jt UG93ZXJNYW5hZ2VtZW50LCAgICAgICAgIC8qIGluZGljYXRlcyB0aGF0IFBsYXRmb3JtIFBvd2Vy IE1hbmFnZW1lbnQgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgKi8KKwlQSE1fUGxhdGZvcm1DYXBzX1N1 cnByaXNlUmVtb3ZhbCwgICAgICAgICAgICAgICAgICAgICAgIC8qIGluZGljYXRlcyB0aGF0IHN1 cnByaXNlIHJlbW92YWwgZmVhdHVyZSBpcyByZXF1ZXN0ZWQgKi8KKwlQSE1fUGxhdGZvcm1DYXBz X05ld0NBQ1ZvbHRhZ2UsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluZGljYXRlcyBuZXcg Q0FDIHZvbHRhZ2UgdGFibGUgc3VwcG9ydCAqLworCVBITV9QbGF0Zm9ybUNhcHNfREJSYW1waW5n LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIGRJL2RUIGZlYXR1cmUgKi8KKwlQ SE1fUGxhdGZvcm1DYXBzX1REUmFtcGluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGZvciBkSS9kVCBmZWF0dXJlICovCisJUEhNX1BsYXRmb3JtQ2Fwc19UQ1BSYW1waW5nLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgZEkvZFQgZmVhdHVyZSAqLworCVBITV9QbGF0 Zm9ybUNhcHNfRW5hYmxlU01VN1RoZXJtYWxNYW5hZ2VtZW50LCAgICAgICAgICAgLyogU01DIHdp bGwgbWFuYWdlIHRoZXJtYWwgZXZlbnRzICovCisJUEhNX1BsYXRmb3JtQ2Fwc19GUFMsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGUFMgc3VwcG9ydCAqLworCVBITV9QbGF0 Zm9ybUNhcHNfQUNQLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQUNQIHN1 cHBvcnQgKi8KKwlQSE1fUGxhdGZvcm1DYXBzX1NjbGtUaHJvdHRsZUxvd05vdGlmaWNhdGlvbiwg ICAgICAgICAgIC8qIFNDTEsgVGhyb3R0bGUgTG93IE5vdGlmaWNhdGlvbiAqLworCVBITV9QbGF0 Zm9ybUNhcHNfWERNQUVuYWJsZWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogWERNQSBl bmdpbmUgaXMgZW5hYmxlZCAqLworCVBITV9QbGF0Zm9ybUNhcHNfVXNlRHVtbXlCYWNrRW5kLCAg ICAgICAgICAgICAgICAgICAgICAgLyogdXNlIGR1bW15IGJhY2sgZW5kICovCisJUEhNX1BsYXRm b3JtQ2Fwc19FbmFibGVERlNCeXBhc3MsICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmFibGUg REZTIGJ5cGFzcyAqLworCVBITV9QbGF0Zm9ybUNhcHNfVmRkTkJEaXJlY3RSZXF1ZXN0LAorCVBI TV9QbGF0Zm9ybUNhcHNfUGF1c2VNTVNlc3Npb25zLAorCVBITV9QbGF0Zm9ybUNhcHNfVW5UYWJs ZWRIYXJkd2FyZUludGVyZmFjZSwgICAgICAgICAgICAgLyogVGFibGVsZXNzL2RpcmVjdCBjYWxs IGhhcmR3YXJlIGludGVyZmFjZSBmb3IgQ0kgYW5kIG5ld2VyIEFTSUNzICovCisJUEhNX1BsYXRm b3JtQ2Fwc19TTVU3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbmRpY2F0 ZXMgdGhhdCB2cHVSZWNvdmVyeUJlZ2luIHdpdGhvdXQgU01VIHNodXRkb3duICovCisJUEhNX1Bs YXRmb3JtQ2Fwc19SZXZlcnRHUElPNVBvbGFyaXR5LCAgICAgICAgICAgICAgICAgICAvKiBpbmRp Y2F0ZXMgcmV2ZXJ0IEdQSU81IHBsYXJpdHkgdGFibGUgc3VwcG9ydCAqLworCVBITV9QbGF0Zm9y bUNhcHNfVGhlcm1hbDJHUElPMTcsICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5kaWNhdGVz IHRoZXJtYWwyR1BJTzE3IHRhYmxlIHN1cHBvcnQgKi8KKwlQSE1fUGxhdGZvcm1DYXBzX1RoZXJt YWxPdXRHUElPLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluZGljYXRlcyBUaGVybWFsT3V0 R1BJTyBzdXBwb3J0LCBwaW4gbnVtYmVyIGlzIGFzc2lnbmVkIGJ5IFZCSU9TICovCisJUEhNX1Bs YXRmb3JtQ2Fwc19EaXNhYmxlTWNsa1N3aXRjaGluZ0ZvckZyYW1lTG9jaywgICAgICAvKiBEaXNh YmxlIG1lbW9yeSBjbG9jayBzd2l0Y2ggZHVyaW5nIEZyYW1lbG9jayAqLworCVBITV9QbGF0Zm9y bUNhcHNfVlJIb3RHUElPQ29uZmlndXJhYmxlLCAgICAgICAgICAgICAgICAgLyogaW5kaWNhdGVz IFZSX0hPVCBHUElPIGNvbmZpZ3VyYWJsZSAqLworCVBITV9QbGF0Zm9ybUNhcHNfVGVtcEludmVy c2lvbiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5hYmxlIFRlbXAgSW52ZXJzaW9uIGZl YXR1cmUgKi8KKwlQSE1fUGxhdGZvcm1DYXBzX0lPSUMzLAorCVBITV9QbGF0Zm9ybUNhcHNfQ29u bmVjdGVkU3RhbmRieSwKKwlQSE1fUGxhdGZvcm1DYXBzX0VWViwKKwlQSE1fUGxhdGZvcm1DYXBz X0VuYWJsZUxvbmdJZGxlQkFDT1N1cHBvcnQsCisJUEhNX1BsYXRmb3JtQ2Fwc19Db21iaW5lUEND V2l0aFRoZXJtYWxTaWduYWwsCisJUEhNX1BsYXRmb3JtQ2Fwc19EaXNhYmxlVXNpbmdBY3R1YWxU ZW1wZXJhdHVyZUZvclBvd2VyQ2FsYywKKwlQSE1fUGxhdGZvcm1DYXBzX1N0YWJsZVBTdGF0ZSwK KwlQSE1fUGxhdGZvcm1DYXBzX09ENlBsdXNpbkFDU3VwcG9ydCwKKwlQSE1fUGxhdGZvcm1DYXBz X09ENlBsdXNpbkRDU3VwcG9ydCwKKwlQSE1fUGxhdGZvcm1DYXBzX09EVGhlcm1hbExpbWl0VW5s b2NrLAorCVBITV9QbGF0Zm9ybUNhcHNfUmVkdWNlUG93ZXJMaW1pdCwKKwlQSE1fUGxhdGZvcm1D YXBzX09ERnV6enlGYW5Db250cm9sU3VwcG9ydCwKKwlQSE1fUGxhdGZvcm1DYXBzX0dlbWluaVJl Z3VsYXRvckZhbkNvbnRyb2xTdXBwb3J0LAorCVBITV9QbGF0Zm9ybUNhcHNfQ29udHJvbFZEREdG WCwKKwlQSE1fUGxhdGZvcm1DYXBzX0JCQlN1cHBvcnRlZCwKKwlQSE1fUGxhdGZvcm1DYXBzX0Rp c2FibGVWb2x0YWdlSXNsYW5kLAorCVBITV9QbGF0Zm9ybUNhcHNfRmFuU3BlZWRJblRhYmxlSXNS UE0sCisJUEhNX1BsYXRmb3JtQ2Fwc19HRlhDbG9ja0dhdGluZ01hbmFnZWRJbkNBSUwsCisJUEhN X1BsYXRmb3JtQ2Fwc19JY2VsYW5kVUxQU1NXV29ya0Fyb3VuZCwKKwlQSE1fUGxhdGZvcm1DYXBz X0ZQU0VuaGFuY2VtZW50LAorCVBITV9QbGF0Zm9ybUNhcHNfTG9hZFBvc3RQcm9kdWN0aW9uRmly bXdhcmUsCisJUEhNX1BsYXRmb3JtQ2Fwc19WcHVSZWNvdmVyeUluUHJvZ3Jlc3MsCisJUEhNX1Bs YXRmb3JtQ2Fwc19GYWxjb25fUXVpY2tUcmFuc2l0aW9uLAorCVBITV9QbGF0Zm9ybUNhcHNfQVZG UywKKwlQSE1fUGxhdGZvcm1DYXBzX0Nsb2NrU3RyZXRjaGVyLAorCVBITV9QbGF0Zm9ybUNhcHNf VGFibGVsZXNzSGFyZHdhcmVJbnRlcmZhY2UsCisJUEhNX1BsYXRmb3JtQ2Fwc19FbmFibGVEcml2 ZXJFVlYsCisJUEhNX1BsYXRmb3JtQ2Fwc19NYXgKK307CisKKyNkZWZpbmUgUEhNX01BWF9OVU1f Q0FQU19CSVRTX1BFUl9GSUVMRCAoc2l6ZW9mKHVpbnQzMl90KSo4KQorCisvKiBOdW1iZXIgb2Yg dWludDMyX3QgZW50cmllcyB1c2VkIGJ5IENBUFMgdGFibGUgKi8KKyNkZWZpbmUgUEhNX01BWF9O VU1fQ0FQU19VTE9OR19FTlRSSUVTIFwKKwkoKFBITV9QbGF0Zm9ybUNhcHNfTWF4ICsgKChQSE1f TUFYX05VTV9DQVBTX0JJVFNfUEVSX0ZJRUxEKSAtIDEpKSAvIChQSE1fTUFYX05VTV9DQVBTX0JJ VFNfUEVSX0ZJRUxEKSkKKworc3RydWN0IHBwX2h3X2Rlc2NyaXB0b3IgeworCXVpbnQzMl90IGh3 X2NhcHNbUEhNX01BWF9OVU1fQ0FQU19VTE9OR19FTlRSSUVTXTsKK307CisKKy8qIEZ1bmN0aW9u IGZvciBzZXR0aW5nIGEgcGxhdGZvcm0gY2FwICovCitzdGF0aWMgaW5saW5lIHZvaWQgcGhtX2Nh cF9zZXQodWludDMyX3QgKmNhcHMsCisJCQllbnVtIHBobV9wbGF0Zm9ybV9jYXBzIGMpCit7CisJ Y2Fwc1tjIC8gUEhNX01BWF9OVU1fQ0FQU19CSVRTX1BFUl9GSUVMRF0gfD0gKDFVTCA8PAorCQkJ ICAgICAoYyAmIChQSE1fTUFYX05VTV9DQVBTX0JJVFNfUEVSX0ZJRUxEIC0gMSkpKTsKK30KKwor c3RhdGljIGlubGluZSB2b2lkIHBobV9jYXBfdW5zZXQodWludDMyX3QgKmNhcHMsCisJCQllbnVt IHBobV9wbGF0Zm9ybV9jYXBzIGMpCit7CisJY2Fwc1tjIC8gUEhNX01BWF9OVU1fQ0FQU19CSVRT X1BFUl9GSUVMRF0gJj0gfigxVUwgPDwgKGMgJiAoUEhNX01BWF9OVU1fQ0FQU19CSVRTX1BFUl9G SUVMRCAtIDEpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBwaG1fY2FwX2VuYWJsZWQoY29u c3QgdWludDMyX3QgKmNhcHMsIGVudW0gcGhtX3BsYXRmb3JtX2NhcHMgYykKK3sKKwlyZXR1cm4g KDAgIT0gKGNhcHNbYyAvIFBITV9NQVhfTlVNX0NBUFNfQklUU19QRVJfRklFTERdICYKKwkJICAo MVVMIDw8IChjICYgKFBITV9NQVhfTlVNX0NBUFNfQklUU19QRVJfRklFTEQgLSAxKSkpKSk7Cit9 CisKK2VudW0gcGhtX2Nsb2NrX1R5cGUgeworCVBITV9EaXNwQ2xvY2sgPSAxLAorCVBITV9TQ2xv Y2ssCisJUEhNX01lbUNsb2NrCit9OworCisjZGVmaW5lIE1BWF9OVU1fQ0xPQ0tTIDE2CisKK3N0 cnVjdCBQUF9DbG9ja3MgeworCXVpbnQzMl90IGVuZ2luZUNsb2NrOworCXVpbnQzMl90IG1lbW9y eUNsb2NrOworCXVpbnQzMl90IEJ1c0JhbmR3aWR0aDsKKwl1aW50MzJfdCBlbmdpbmVDbG9ja0lu U1I7Cit9OworCitzdHJ1Y3QgcGhtX3BsYXRmb3JtX2Rlc2NyaXB0b3IgeworCXVpbnQzMl90IHBs YXRmb3JtQ2Fwc1tQSE1fTUFYX05VTV9DQVBTX1VMT05HX0VOVFJJRVNdOworCXVpbnQzMl90IHZi aW9zSW50ZXJydXB0SWQ7CisJc3RydWN0IFBQX0Nsb2NrcyBvdmVyZHJpdmVMaW1pdDsKKwlzdHJ1 Y3QgUFBfQ2xvY2tzIGNsb2NrU3RlcDsKKwl1aW50MzJfdCBoYXJkd2FyZUFjdGl2aXR5UGVyZm9y bWFuY2VMZXZlbHM7CisJdWludDMyX3QgbWluaW11bUNsb2Nrc1JlZHVjdGlvblBlcmNlbnRhZ2U7 CisJdWludDMyX3QgbWluT3ZlcmRyaXZlVkREQzsKKwl1aW50MzJfdCBtYXhPdmVyZHJpdmVWRERD OworCXVpbnQzMl90IG92ZXJkcml2ZVZERENTdGVwOworCXVpbnQzMl90IGhhcmR3YXJlUGVyZm9y bWFuY2VMZXZlbHM7CisJdWludDE2X3QgcG93ZXJCdWRnZXQ7CisJdWludDMyX3QgVERQTGltaXQ7 CisJdWludDMyX3QgbmVhclREUExpbWl0OworCXVpbnQzMl90IG5lYXJURFBMaW1pdEFkanVzdGVk OworCXVpbnQzMl90IFNRUmFtcGluZ1RocmVzaG9sZDsKKwl1aW50MzJfdCBDQUNMZWFrYWdlOwor CXVpbnQxNl90IFREUE9ETGltaXQ7CisJdWludDMyX3QgVERQQWRqdXN0bWVudDsKKwlib29sIFRE UEFkanVzdG1lbnRQb2xhcml0eTsKKwl1aW50MTZfdCBMb2FkTGluZVNsb3BlOworCXVpbnQzMl90 ICBWaWRNaW5MaW1pdDsKKwl1aW50MzJfdCAgVmlkTWF4TGltaXQ7CisJdWludDMyX3QgIFZpZFN0 ZXA7CisJdWludDMyX3QgIFZpZEFkanVzdG1lbnQ7CisJYm9vbCBWaWRBZGp1c3RtZW50UG9sYXJp dHk7Cit9OworCitzdHJ1Y3QgcGhtX2Nsb2NrcyB7CisJdWludDMyX3QgbnVtX29mX2VudHJpZXM7 CisJdWludDMyX3QgY2xvY2tbTUFYX05VTV9DTE9DS1NdOworfTsKKworZXh0ZXJuIGludCBwaG1f c2V0dXBfYXNpYyhzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKTsKK2V4dGVybiBpbnQgcGhtX2VuYWJs ZV9keW5hbWljX3N0YXRlX21hbmFnZW1lbnQoc3RydWN0IHBwX2h3bWdyICpod21ncik7CitleHRl cm4gdm9pZCBwaG1faW5pdF9keW5hbWljX2NhcHMoc3RydWN0IHBwX2h3bWdyICpod21ncik7Cisj ZW5kaWYgLyogX0hBUkRXQVJFX01BTkFHRVJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvcG93ZXJwbGF5L2luYy9od21nci5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dl cnBsYXkvaW5jL2h3bWdyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdm YmE0MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2lu Yy9od21nci5oCkBAIC0wLDAgKzEsNjA3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTUgQWR2YW5j ZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAq IGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoK KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBT SEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBG T1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworI2lmbmRlZiBf SFdNR1JfSF8KKyNkZWZpbmUgX0hXTUdSX0hfCisKKyNpbmNsdWRlICJhbWRfcG93ZXJwbGF5Lmgi CisjaW5jbHVkZSAicHBfaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJoYXJkd2FyZW1hbmFnZXIuaCIK KyNpbmNsdWRlICJwcF9wb3dlcl9zb3VyY2UuaCIKKworc3RydWN0IHBwX2luc3RhbmNlOworc3Ry dWN0IHBwX2h3bWdyOworc3RydWN0IHBwX2h3X3Bvd2VyX3N0YXRlOworc3RydWN0IHBwX3Bvd2Vy X3N0YXRlOworc3RydWN0IFBQX1ZDRVN0YXRlOworCitlbnVtIFBQX1Jlc3VsdCB7CisJUFBfUmVz dWx0X1RhYmxlSW1tZWRpYXRlRXhpdCA9IDB4MTMsCit9OworCisjZGVmaW5lIFBDSUVfUEVSRl9S RVFfUkVNT1ZFX1JFR0lTVFJZICAgMAorI2RlZmluZSBQQ0lFX1BFUkZfUkVRX0ZPUkNFX0xPV1BP V0VSICAgIDEKKyNkZWZpbmUgUENJRV9QRVJGX1JFUV9HRU4xICAgICAgICAgMgorI2RlZmluZSBQ Q0lFX1BFUkZfUkVRX0dFTjIgICAgICAgICAzCisjZGVmaW5lIFBDSUVfUEVSRl9SRVFfR0VOMyAg ICAgICAgIDQKKworZW51bSBQSE1fQmFja0VuZF9NYWdpYyB7CisJUEhNX0R1bW15X01hZ2ljICAg ICAgID0gMHhBQTU1NTVBQSwKKwlQSE1fUlY3NzBfTWFnaWMgICAgICAgPSAweERDQkFBQkNELAor CVBITV9Lb25nX01hZ2ljICAgICAgICA9IDB4MjM5NDc4REYsCisJUEhNX05Jc2xhbmRzX01hZ2lj ICAgID0gMHg3MzZDNDk0RSwKKwlQSE1fU3Vtb19NYWdpYyAgICAgICAgPSAweDgzMzlGQTExLAor CVBITV9TSXNsYW5kc19NYWdpYyAgICA9IDB4MzY5NDMxQUMsCisJUEhNX1RyaW5pdHlfTWFnaWMg ICAgID0gMHg5Njc1MTg3MywKKwlQSE1fQ0lzbGFuZHNfTWFnaWMgICAgPSAweDM4QUM3OEIwLAor CVBITV9Ldl9NYWdpYyAgICAgICAgICA9IDB4RENCQkFCQzAsCisJUEhNX1ZJc2xhbmRzX01hZ2lj ICAgID0gMHgyMDEzMDMwNywKKwlQSE1fQ3pfTWFnaWMgICAgICAgICAgPSAweDY3RENCQTI1Cit9 OworCitlbnVtIFBQX0RBTF9QT1dFUkxFVkVMIHsKKwlQUF9EQUxfUE9XRVJMRVZFTF9JTlZBTElE ID0gMCwKKwlQUF9EQUxfUE9XRVJMRVZFTF9VTFRSQUxPVywKKwlQUF9EQUxfUE9XRVJMRVZFTF9M T1csCisJUFBfREFMX1BPV0VSTEVWRUxfTk9NSU5BTCwKKwlQUF9EQUxfUE9XRVJMRVZFTF9QRVJG T1JNQU5DRSwKKworCVBQX0RBTF9QT1dFUkxFVkVMXzAgPSBQUF9EQUxfUE9XRVJMRVZFTF9VTFRS QUxPVywKKwlQUF9EQUxfUE9XRVJMRVZFTF8xID0gUFBfREFMX1BPV0VSTEVWRUxfTE9XLAorCVBQ X0RBTF9QT1dFUkxFVkVMXzIgPSBQUF9EQUxfUE9XRVJMRVZFTF9OT01JTkFMLAorCVBQX0RBTF9Q T1dFUkxFVkVMXzMgPSBQUF9EQUxfUE9XRVJMRVZFTF9QRVJGT1JNQU5DRSwKKwlQUF9EQUxfUE9X RVJMRVZFTF80ID0gUFBfREFMX1BPV0VSTEVWRUxfMysxLAorCVBQX0RBTF9QT1dFUkxFVkVMXzUg PSBQUF9EQUxfUE9XRVJMRVZFTF80KzEsCisJUFBfREFMX1BPV0VSTEVWRUxfNiA9IFBQX0RBTF9Q T1dFUkxFVkVMXzUrMSwKKwlQUF9EQUxfUE9XRVJMRVZFTF83ID0gUFBfREFMX1BPV0VSTEVWRUxf NisxLAorfTsKKworI2RlZmluZSBQSE1fUENJRV9QT1dFUkdBVElOR19UQVJHRVRfR0ZYICAgICAg ICAgICAgMAorI2RlZmluZSBQSE1fUENJRV9QT1dFUkdBVElOR19UQVJHRVRfRERJICAgICAgICAg ICAgMQorI2RlZmluZSBQSE1fUENJRV9QT1dFUkdBVElOR19UQVJHRVRfUExMQ0FTQ0FERSAgICAg MgorI2RlZmluZSBQSE1fUENJRV9QT1dFUkdBVElOR19UQVJHRVRfUEhZICAgICAgICAgICAgMwor Cit0eXBlZGVmIGludCAoKnBobV90YWJsZV9mdW5jdGlvbikoc3RydWN0IHBwX2h3bWdyICpod21n ciwgdm9pZCAqaW5wdXQsCisJCQkJICB2b2lkICpvdXRwdXQsIHZvaWQgKnN0b3JhZ2UsIGludCBy ZXN1bHQpOworCit0eXBlZGVmIGJvb2wgKCpwaG1fY2hlY2tfZnVuY3Rpb24pKHN0cnVjdCBwcF9o d21nciAqaHdtZ3IpOworCitzdHJ1Y3QgcGhtX2FjcF9hcmJpdGVyIHsKKwl1aW50MzJfdCBhY3Bj bGs7Cit9OworCitzdHJ1Y3QgcGhtX3V2ZF9hcmJpdGVyIHsKKwl1aW50MzJfdCB2Y2xrOworCXVp bnQzMl90IGRjbGs7CisJdWludDMyX3QgdmNsa19jZWlsaW5nOworCXVpbnQzMl90IGRjbGtfY2Vp bGluZzsKK307CisKK3N0cnVjdCBwaG1fdmNlX2FyYml0ZXIgeworCXVpbnQzMl90ICAgZXZjbGs7 CisJdWludDMyX3QgICBlY2NsazsKK307CisKK3N0cnVjdCBwaG1fZ2Z4X2FyYml0ZXIgeworCXVp bnQzMl90IHNjbGs7CisJdWludDMyX3QgbWNsazsKKwl1aW50MzJfdCBzY2xrX292ZXJfZHJpdmU7 CisJdWludDMyX3QgbWNsa19vdmVyX2RyaXZlOworCXVpbnQzMl90IHNjbGtfdGhyZXNob2xkOwor CXVpbnQzMl90IG51bV9jdXM7Cit9OworCisvKiBFbnRyaWVzIGluIHRoZSBtYXN0ZXIgdGFibGVz ICovCitzdHJ1Y3QgcGhtX21hc3Rlcl90YWJsZV9pdGVtIHsKKwlwaG1fY2hlY2tfZnVuY3Rpb24g aXNGdW5jdGlvbk5lZWRlZEluUnVudGltZVRhYmxlOworCXBobV90YWJsZV9mdW5jdGlvbiB0YWJs ZUZ1bmN0aW9uOworfTsKKworZW51bSBwaG1fbWFzdGVyX3RhYmxlX2ZsYWcgeworCVBITV9NYXN0 ZXJUYWJsZUZsYWdfTm9uZSAgICAgICAgID0gMCwKKwlQSE1fTWFzdGVyVGFibGVGbGFnX0V4aXRP bkVycm9yICA9IDEsCit9OworCisvKiBUaGUgaGVhZGVyIG9mIHRoZSBtYXN0ZXIgdGFibGVzICov CitzdHJ1Y3QgcGhtX21hc3Rlcl90YWJsZV9oZWFkZXIgeworCXVpbnQzMl90IHN0b3JhZ2Vfc2l6 ZTsKKwl1aW50MzJfdCBmbGFnczsKKwlzdHJ1Y3QgcGhtX21hc3Rlcl90YWJsZV9pdGVtICptYXN0 ZXJfbGlzdDsKK307CisKK3N0cnVjdCBwaG1fcnVudGltZV90YWJsZV9oZWFkZXIgeworCXVpbnQz Ml90IHN0b3JhZ2Vfc2l6ZTsKKwlib29sIGV4aXRfZXJyb3I7CisJcGhtX3RhYmxlX2Z1bmN0aW9u ICpmdW5jdGlvbl9saXN0OworfTsKKworc3RydWN0IHBobV9jbG9ja19hcnJheSB7CisJdWludDMy X3QgY291bnQ7CisJdWludDMyX3QgdmFsdWVzWzFdOworfTsKKworc3RydWN0IHBobV9jbG9ja192 b2x0YWdlX2RlcGVuZGVuY3lfcmVjb3JkIHsKKwl1aW50MzJfdCBjbGs7CisJdWludDMyX3QgdjsK K307CisKK3N0cnVjdCBwaG1fdmNlY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3JlY29yZCB7CisJ dWludDMyX3QgZWNjbGs7CisJdWludDMyX3QgZXZjbGs7CisJdWludDMyX3QgdjsKK307CisKK3N0 cnVjdCBwaG1fdXZkY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3JlY29yZCB7CisJdWludDMyX3Qg dmNsazsKKwl1aW50MzJfdCBkY2xrOworCXVpbnQzMl90IHY7Cit9OworCitzdHJ1Y3QgcGhtX3Nh bXVjbG9ja192b2x0YWdlX2RlcGVuZGVuY3lfcmVjb3JkIHsKKwl1aW50MzJfdCBzYW1jbGs7CisJ dWludDMyX3QgdjsKK307CisKK3N0cnVjdCBwaG1fYWNwY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5 X3JlY29yZCB7CisJdWludDMyX3QgYWNwY2xrOworCXVpbnQzMl90IHY7Cit9OworCitzdHJ1Y3Qg cGhtX2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZSB7CisJdWludDMyX3QgY291bnQ7CQkJ CQkJCQkJCS8qIE51bWJlciBvZiBlbnRyaWVzLiAqLworCXN0cnVjdCBwaG1fY2xvY2tfdm9sdGFn ZV9kZXBlbmRlbmN5X3JlY29yZCBlbnRyaWVzWzFdOwkJLyogRHluYW1pY2FsbHkgYWxsb2NhdGUg Y291bnQgZW50cmllcy4gKi8KK307CisKK3N0cnVjdCBwaG1fcGhhc2Vfc2hlZGRpbmdfbGltaXRz X3JlY29yZCB7CisJdWludDMyX3QgIFZvbHRhZ2U7CisJdWludDMyX3QgICAgU2NsazsKKwl1aW50 MzJfdCAgICBNY2xrOworfTsKKworCitleHRlcm4gaW50IHBobV9kaXNwYXRjaF90YWJsZShzdHJ1 Y3QgcHBfaHdtZ3IgKmh3bWdyLAorCQkJICAgICAgc3RydWN0IHBobV9ydW50aW1lX3RhYmxlX2hl YWRlciAqcnRfdGFibGUsCisJCQkgICAgICB2b2lkICppbnB1dCwgdm9pZCAqb3V0cHV0KTsKKwor ZXh0ZXJuIGludCBwaG1fY29uc3RydWN0X3RhYmxlKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCisJ CQkgICAgICAgc3RydWN0IHBobV9tYXN0ZXJfdGFibGVfaGVhZGVyICptYXN0ZXJfdGFibGUsCisJ CQkgICAgICAgc3RydWN0IHBobV9ydW50aW1lX3RhYmxlX2hlYWRlciAqcnRfdGFibGUpOworCitl eHRlcm4gaW50IHBobV9kZXN0cm95X3RhYmxlKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCisJCQkg ICAgIHN0cnVjdCBwaG1fcnVudGltZV90YWJsZV9oZWFkZXIgKnJ0X3RhYmxlKTsKKworCitzdHJ1 Y3QgcGhtX3V2ZF9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lfcmVjb3JkIHsKKwl1aW50MzJfdCB2 Y2xrOworCXVpbnQzMl90IGRjbGs7CisJdWludDMyX3QgdjsKK307CisKK3N0cnVjdCBwaG1fdXZk X2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZSB7CisJdWludDhfdCBjb3VudDsKKwlzdHJ1 Y3QgcGhtX3V2ZF9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lfcmVjb3JkIGVudHJpZXNbMV07Cit9 OworCitzdHJ1Y3QgcGhtX2FjcF9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lfcmVjb3JkIHsKKwl1 aW50MzJfdCBhY3BjbGs7CisJdWludDMyX3QgdjsKK307CisKK3N0cnVjdCBwaG1fYWNwX2Nsb2Nr X3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZSB7CisJdWludDMyX3QgY291bnQ7CisJc3RydWN0IHBo bV9hY3BfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3JlY29yZCBlbnRyaWVzWzFdOworfTsKKwor c3RydWN0IHBobV92Y2VfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3JlY29yZCB7CisJdWludDMy X3QgZWNjbGs7CisJdWludDMyX3QgZXZjbGs7CisJdWludDMyX3QgdjsKK307CisKK3N0cnVjdCBw aG1fcGhhc2Vfc2hlZGRpbmdfbGltaXRzX3RhYmxlIHsKKwl1aW50MzJfdCAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvdW50OworCXN0cnVjdCBwaG1fcGhhc2Vfc2hlZGRpbmdfbGltaXRzX3Jl Y29yZCAgZW50cmllc1sxXTsKK307CisKK3N0cnVjdCBwaG1fdmNlY2xvY2tfdm9sdGFnZV9kZXBl bmRlbmN5X3RhYmxlIHsKKwl1aW50OF90IGNvdW50OyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE51bWJlciBvZiBlbnRyaWVzLiAqLworCXN0cnVjdCBwaG1fdmNlY2xvY2tf dm9sdGFnZV9kZXBlbmRlbmN5X3JlY29yZCBlbnRyaWVzWzFdOyAvKiBEeW5hbWljYWxseSBhbGxv Y2F0ZSBjb3VudCBlbnRyaWVzLiAqLworfTsKKworc3RydWN0IHBobV91dmRjbG9ja192b2x0YWdl X2RlcGVuZGVuY3lfdGFibGUgeworCXVpbnQ4X3QgY291bnQ7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIGVudHJpZXMuICovCisJc3RydWN0IHBobV91dmRj bG9ja192b2x0YWdlX2RlcGVuZGVuY3lfcmVjb3JkIGVudHJpZXNbMV07IC8qIER5bmFtaWNhbGx5 IGFsbG9jYXRlIGNvdW50IGVudHJpZXMuICovCit9OworCitzdHJ1Y3QgcGhtX3NhbXVjbG9ja192 b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUgeworCXVpbnQ4X3QgY291bnQ7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIGVudHJpZXMuICovCisJc3RydWN0IHBo bV9zYW11Y2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3JlY29yZCBlbnRyaWVzWzFdOyAvKiBEeW5h bWljYWxseSBhbGxvY2F0ZSBjb3VudCBlbnRyaWVzLiAqLworfTsKKworc3RydWN0IHBobV9hY3Bj bG9ja192b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUgeworCXVpbnQzMl90IGNvdW50OyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBlbnRyaWVzLiAqLworCXN0 cnVjdCBwaG1fYWNwY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3JlY29yZCBlbnRyaWVzWzFdOyAv KiBEeW5hbWljYWxseSBhbGxvY2F0ZSBjb3VudCBlbnRyaWVzLiAqLworfTsKKworc3RydWN0IHBo bV92Y2VfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlIHsKKwl1aW50OF90IGNvdW50Owor CXN0cnVjdCBwaG1fdmNlX2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV9yZWNvcmQgZW50cmllc1sx XTsKK307CisKK3N0cnVjdCBwcF9od21ncl9mdW5jIHsKKwlpbnQgKCpiYWNrZW5kX2luaXQpKHN0 cnVjdCBwcF9od21nciAqaHdfbWdyKTsKKwlpbnQgKCpiYWNrZW5kX2ZpbmkpKHN0cnVjdCBwcF9o d21nciAqaHdfbWdyKTsKKwlpbnQgKCphc2ljX3NldHVwKShzdHJ1Y3QgcHBfaHdtZ3IgKmh3X21n cik7CisJaW50ICgqZ2V0X3Bvd2VyX3N0YXRlX3NpemUpKHN0cnVjdCBwcF9od21nciAqaHdfbWdy KTsKKwlpbnQgKCpmb3JjZV9kcG1fbGV2ZWwpKHN0cnVjdCBwcF9od21nciAqaHdfbWdyLCBlbnVt IGFtZF9kcG1fZm9yY2VkX2xldmVsIGxldmVsKTsKKwlpbnQgKCpkeW5hbWljX3N0YXRlX21hbmFn ZW1lbnRfZW5hYmxlKShzdHJ1Y3QgcHBfaHdtZ3IgKmh3X21ncik7CisJaW50ICgqcGF0Y2hfYm9v dF9zdGF0ZSkoc3RydWN0IHBwX2h3bWdyICpod21nciwgc3RydWN0IHBwX2h3X3Bvd2VyX3N0YXRl ICpod19wcyk7CisJaW50ICgqZ2V0X3BwX3RhYmxlX2VudHJ5KShzdHJ1Y3QgcHBfaHdtZ3IgKmh3 bWdyLCB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgcHBfcG93ZXJfc3RhdGUgKik7CisJaW50ICgqZ2V0 X251bV9vZl9wcF90YWJsZV9lbnRyaWVzKShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKTsKK307CisK K3N0cnVjdCBwcF90YWJsZV9mdW5jIHsKKwlpbnQgKCpwcHRhYmxlX2luaXQpKHN0cnVjdCBwcF9o d21nciAqaHdfbWdyKTsKKwlpbnQgKCpwcHRhYmxlX2ZpbmkpKHN0cnVjdCBwcF9od21nciAqaHdf bWdyKTsKKwlpbnQgKCpwcHRhYmxlX2dldF9udW1iZXJfb2ZfdmNlX3N0YXRlX3RhYmxlX2VudHJp ZXMpKHN0cnVjdCBwcF9od21nciAqaHdfbWdyKTsKKwlpbnQgKCpwcHRhYmxlX2dldF92Y2Vfc3Rh dGVfdGFibGVfZW50cnkpKAorCQkJCQkJc3RydWN0IHBwX2h3bWdyICpod21nciwKKwkJCQkJCXVu c2lnbmVkIGxvbmcgaSwKKwkJCQkJCXN0cnVjdCBQUF9WQ0VTdGF0ZSAqdmNlX3N0YXRlLAorCQkJ CQkJdm9pZCAqKmNsb2NrX2luZm8sCisJCQkJCQl1bnNpZ25lZCBsb25nICpmbGFnKTsKK307CisK K3VuaW9uIHBobV9jYWNfbGVha2FnZV9yZWNvcmQgeworCXN0cnVjdCB7CisJCXVpbnQxNl90IFZk ZGM7ICAgICAgICAgIC8qIGluIENJLCB3ZSB1c2UgaXQgZm9yIFN0ZFZvbHRhZ2VIaVNpZGQgKi8K KwkJdWludDMyX3QgTGVha2FnZTsgICAgICAgLyogaW4gQ0ksIHdlIHVzZSBpdCBmb3IgU3RkVm9s dGFnZUxvU2lkZCAqLworCX07CisJc3RydWN0IHsKKwkJdWludDE2X3QgVmRkYzE7CisJCXVpbnQx Nl90IFZkZGMyOworCQl1aW50MTZfdCBWZGRjMzsKKwl9OworfTsKKworc3RydWN0IHBobV9jYWNf bGVha2FnZV90YWJsZSB7CisJdWludDMyX3QgY291bnQ7CisJdW5pb24gcGhtX2NhY19sZWFrYWdl X3JlY29yZCBlbnRyaWVzWzFdOworfTsKKworc3RydWN0IHBobV9zYW11X2Nsb2NrX3ZvbHRhZ2Vf ZGVwZW5kZW5jeV9yZWNvcmQgeworCXVpbnQzMl90IHNhbWNsazsKKwl1aW50MzJfdCB2OworfTsK KworCitzdHJ1Y3QgcGhtX3NhbXVfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlIHsKKwl1 aW50OF90IGNvdW50OworCXN0cnVjdCBwaG1fc2FtdV9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lf cmVjb3JkIGVudHJpZXNbMV07Cit9OworCitzdHJ1Y3QgcGhtX2NhY190ZHBfdGFibGUgeworCXVp bnQxNl90IHVzVERQOworCXVpbnQxNl90IHVzQ29uZmlndXJhYmxlVERQOworCXVpbnQxNl90IHVz VERDOworCXVpbnQxNl90IHVzQmF0dGVyeVBvd2VyTGltaXQ7CisJdWludDE2X3QgdXNTbWFsbFBv d2VyTGltaXQ7CisJdWludDE2X3QgdXNMb3dDQUNMZWFrYWdlOworCXVpbnQxNl90IHVzSGlnaENB Q0xlYWthZ2U7CisJdWludDE2X3QgdXNNYXhpbXVtUG93ZXJEZWxpdmVyeUxpbWl0OworCXVpbnQx Nl90IHVzT3BlcmF0aW5nVGVtcE1pbkxpbWl0OworCXVpbnQxNl90IHVzT3BlcmF0aW5nVGVtcE1h eExpbWl0OworCXVpbnQxNl90IHVzT3BlcmF0aW5nVGVtcFN0ZXA7CisJdWludDE2X3QgdXNPcGVy YXRpbmdUZW1wSHlzdDsKKwl1aW50MTZfdCB1c0RlZmF1bHRUYXJnZXRPcGVyYXRpbmdUZW1wOwor CXVpbnQxNl90IHVzVGFyZ2V0T3BlcmF0aW5nVGVtcDsKKwl1aW50MTZfdCB1c1Bvd2VyVHVuZURh dGFTZXRJRDsKKwl1aW50MTZfdCB1c1NvZnR3YXJlU2h1dGRvd25UZW1wOworCXVpbnQxNl90IHVz Q2xvY2tTdHJldGNoQW1vdW50OworCXVpbnQxNl90IHVzVGVtcGVyYXR1cmVMaW1pdEhvdHNwb3Q7 CisJdWludDE2X3QgdXNUZW1wZXJhdHVyZUxpbWl0TGlxdWlkMTsKKwl1aW50MTZfdCB1c1RlbXBl cmF0dXJlTGltaXRMaXF1aWQyOworCXVpbnQxNl90IHVzVGVtcGVyYXR1cmVMaW1pdFZyVmRkYzsK Kwl1aW50MTZfdCB1c1RlbXBlcmF0dXJlTGltaXRWck12ZGQ7CisJdWludDE2X3QgdXNUZW1wZXJh dHVyZUxpbWl0UGx4OworCXVpbnQ4X3QgIHVjTGlxdWlkMV9JMkNfYWRkcmVzczsKKwl1aW50OF90 ICB1Y0xpcXVpZDJfSTJDX2FkZHJlc3M7CisJdWludDhfdCAgdWNMaXF1aWRfSTJDX0xpbmU7CisJ dWludDhfdCAgdWNWcl9JMkNfYWRkcmVzczsKKwl1aW50OF90ICB1Y1ZyX0kyQ19MaW5lOworCXVp bnQ4X3QgIHVjUGx4X0kyQ19hZGRyZXNzOworCXVpbnQ4X3QgIHVjUGx4X0kyQ19MaW5lOworfTsK Kworc3RydWN0IHBobV9wcG1fdGFibGUgeworCXVpbnQ4X3QgICBwcG1fZGVzaWduOworCXVpbnQx Nl90ICBjcHVfY29yZV9udW1iZXI7CisJdWludDMyX3QgIHBsYXRmb3JtX3RkcDsKKwl1aW50MzJf dCAgc21hbGxfYWNfcGxhdGZvcm1fdGRwOworCXVpbnQzMl90ICBwbGF0Zm9ybV90ZGM7CisJdWlu dDMyX3QgIHNtYWxsX2FjX3BsYXRmb3JtX3RkYzsKKwl1aW50MzJfdCAgYXB1X3RkcDsKKwl1aW50 MzJfdCAgZGdwdV90ZHA7CisJdWludDMyX3QgIGRncHVfdWx2X3Bvd2VyOworCXVpbnQzMl90ICB0 al9tYXg7Cit9OworCitzdHJ1Y3QgcGhtX3ZxX2J1ZGdldGluZ19yZWNvcmQgeworCXVpbnQzMl90 IHVsQ1VzOworCXVpbnQzMl90IHVsU3VzdGFpbmFibGVTT0NQb3dlckxpbWl0TG93OworCXVpbnQz Ml90IHVsU3VzdGFpbmFibGVTT0NQb3dlckxpbWl0SGlnaDsKKwl1aW50MzJfdCB1bE1pblNjbGtM b3c7CisJdWludDMyX3QgdWxNaW5TY2xrSGlnaDsKKwl1aW50OF90ICB1Y0Rpc3BDb25maWc7CisJ dWludDMyX3QgdWxEQ2xrOworCXVpbnQzMl90IHVsRUNsazsKKwl1aW50MzJfdCB1bFN1c3RhaW5h YmxlU2NsazsKKwl1aW50MzJfdCB1bFN1c3RhaW5hYmxlQ1VzOworfTsKKworc3RydWN0IHBobV92 cV9idWRnZXRpbmdfdGFibGUgeworCXVpbnQ4X3QgbnVtRW50cmllczsKKwlzdHJ1Y3QgcGhtX3Zx X2J1ZGdldGluZ19yZWNvcmQgZW50cmllc1sxXTsKK307CisKK3N0cnVjdCBwaG1fY2xvY2tfYW5k X3ZvbHRhZ2VfbGltaXRzIHsKKwl1aW50MzJfdCBzY2xrOworCXVpbnQzMl90IG1jbGs7CisJdWlu dDE2X3QgdmRkYzsKKwl1aW50MTZfdCB2ZGRjaTsKKwl1aW50MTZfdCB2ZGRnZng7Cit9OworCisK Kworc3RydWN0IHBobV9keW5hbWljX3N0YXRlX2luZm8geworCXN0cnVjdCBwaG1fY2xvY2tfdm9s dGFnZV9kZXBlbmRlbmN5X3RhYmxlICp2ZGRjX2RlcGVuZGVuY3lfb25fc2NsazsKKwlzdHJ1Y3Qg cGhtX2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZSAqdmRkY2lfZGVwZW5kZW5jeV9vbl9t Y2xrOworCXN0cnVjdCBwaG1fY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlICp2ZGRjX2Rl cGVuZGVuY3lfb25fbWNsazsKKwlzdHJ1Y3QgcGhtX2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90 YWJsZSAqbXZkZF9kZXBlbmRlbmN5X29uX21jbGs7CisJc3RydWN0IHBobV9jbG9ja192b2x0YWdl X2RlcGVuZGVuY3lfdGFibGUgKnZkZGNfZGVwX29uX2RhbF9wd3JsOworCXN0cnVjdCBwaG1fY2xv Y2tfYXJyYXkgICAgICAgICAgICAgICAgICAgICp2YWxpZF9zY2xrX3ZhbHVlczsKKwlzdHJ1Y3Qg cGhtX2Nsb2NrX2FycmF5ICAgICAgICAgICAgICAgICAgICAqdmFsaWRfbWNsa192YWx1ZXM7CisJ c3RydWN0IHBobV9jbG9ja19hbmRfdm9sdGFnZV9saW1pdHMgICAgICAgbWF4X2Nsb2NrX3ZvbHRh Z2Vfb25fZGM7CisJc3RydWN0IHBobV9jbG9ja19hbmRfdm9sdGFnZV9saW1pdHMgICAgICAgbWF4 X2Nsb2NrX3ZvbHRhZ2Vfb25fYWM7CisJdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWNsa19zY2xrX3JhdGlvOworCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNjbGtfbWNsa19kZWx0YTsKKwl1aW50MzJfdCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2ZGRjX3ZkZGNpX2RlbHRhOworCXVpbnQzMl90ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1pbl92ZGRjX2Zvcl9wY2llX2dlbjI7CisJc3RydWN0IHBo bV9jYWNfbGVha2FnZV90YWJsZSAgICAgICAgICAgICAgKmNhY19sZWFrYWdlX3RhYmxlOworCXN0 cnVjdCBwaG1fcGhhc2Vfc2hlZGRpbmdfbGltaXRzX3RhYmxlCSAgKnZkZGNfcGhhc2Vfc2hlZF9s aW1pdHNfdGFibGU7CisKKwlzdHJ1Y3QgcGhtX3ZjZV9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lf dGFibGUKKwkJCQkJICAgICp2Y2VfY2xvY2xfdm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlOworCXN0 cnVjdCBwaG1fdXZkX2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZQorCQkJCQkgICAgKnV2 ZF9jbG9jbF92b2x0YWdlX2RlcGVuZGVuY3lfdGFibGU7CisJc3RydWN0IHBobV9hY3BfY2xvY2tf dm9sdGFnZV9kZXBlbmRlbmN5X3RhYmxlCisJCQkJCSAgICAqYWNwX2Nsb2NrX3ZvbHRhZ2VfZGVw ZW5kZW5jeV90YWJsZTsKKwlzdHJ1Y3QgcGhtX3NhbXVfY2xvY2tfdm9sdGFnZV9kZXBlbmRlbmN5 X3RhYmxlCisJCQkJCSAgICpzYW11X2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZTsKKwor CXN0cnVjdCBwaG1fcHBtX3RhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAqcHBtX3BhcmFt ZXRlcl90YWJsZTsKKwlzdHJ1Y3QgcGhtX2NhY190ZHBfdGFibGUgICAgICAgICAgICAgICAgICAg ICAgKmNhY19kdHBfdGFibGU7CisJc3RydWN0IHBobV9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lf dGFibGUJICAqdmRkX2dmeF9kZXBlbmRlbmN5X29uX3NjbGs7CisJc3RydWN0IHBobV92cV9idWRn ZXRpbmdfdGFibGUJCSAgCQkgICp2cV9idWRnZXRpbmdfdGFibGU7Cit9OworCitzdHJ1Y3QgcHBf aHdtZ3IgeworCXVpbnQzMl90IGNoaXBfZmFtaWx5OworCXVpbnQzMl90IGNoaXBfaWQ7CisJdWlu dDMyX3QgaHdfcmV2aXNpb247CisJdWludDMyX3Qgc3ViX3N5c19pZDsKKwl1aW50MzJfdCBzdWJf dmVuZG9yX2lkOworCisJdm9pZCAqZGV2aWNlOworCXN0cnVjdCBwcF9zbXVtZ3IgKnNtdW1ncjsK Kwljb25zdCB2b2lkICpzb2Z0X3BwX3RhYmxlOworCWVudW0gYW1kX2RwbV9mb3JjZWRfbGV2ZWwg ZHBtX2xldmVsOworCisJc3RydWN0IHBobV9nZnhfYXJiaXRlciBnZnhfYXJiaXRlcjsKKwlzdHJ1 Y3QgcGhtX2FjcF9hcmJpdGVyIGFjcF9hcmJpdGVyOworCXN0cnVjdCBwaG1fdXZkX2FyYml0ZXIg dXZkX2FyYml0ZXI7CisJc3RydWN0IHBobV92Y2VfYXJiaXRlciB2Y2VfYXJiaXRlcjsKKwl1aW50 MzJfdCB1c2VjX3RpbWVvdXQ7CisJdm9pZCAqcHB0YWJsZTsKKwlzdHJ1Y3QgcGhtX3BsYXRmb3Jt X2Rlc2NyaXB0b3IgcGxhdGZvcm1fZGVzY3JpcHRvcjsKKwl2b2lkICpiYWNrZW5kOworCWVudW0g UFBfREFMX1BPV0VSTEVWRUwJZGFsX3Bvd2VyX2xldmVsOworCXN0cnVjdCBwaG1fZHluYW1pY19z dGF0ZV9pbmZvIGR5bl9zdGF0ZTsKKwlzdHJ1Y3QgcGhtX3J1bnRpbWVfdGFibGVfaGVhZGVyIHNl dHVwX2FzaWM7CisJc3RydWN0IHBobV9ydW50aW1lX3RhYmxlX2hlYWRlciBkaXNhYmxlX2R5bmFt aWNfc3RhdGVfbWFuYWdlbWVudDsKKwlzdHJ1Y3QgcGhtX3J1bnRpbWVfdGFibGVfaGVhZGVyIGVu YWJsZV9keW5hbWljX3N0YXRlX21hbmFnZW1lbnQ7CisJY29uc3Qgc3RydWN0IHBwX2h3bWdyX2Z1 bmMgKmh3bWdyX2Z1bmM7CisJY29uc3Qgc3RydWN0IHBwX3RhYmxlX2Z1bmMgKnBwdGFibGVfZnVu YzsKKwlzdHJ1Y3QgcHBfcG93ZXJfc3RhdGUgICAgKnBzOworICAgICAgICBlbnVtIHBwX3Bvd2Vy X3NvdXJjZSAgcG93ZXJfc291cmNlOworCXVpbnQzMl90IG51bV9wczsKKwl1aW50MzJfdCBwc19z aXplOworCXN0cnVjdCBwcF9wb3dlcl9zdGF0ZSAgICAqY3VycmVudF9wczsKKwlzdHJ1Y3QgcHBf cG93ZXJfc3RhdGUgICAgKnJlcXVlc3RfcHM7CisJc3RydWN0IHBwX3Bvd2VyX3N0YXRlICAgICpi b290X3BzOworCXN0cnVjdCBwcF9wb3dlcl9zdGF0ZSAgICAqdXZkX3BzOworfTsKKworCitleHRl cm4gaW50IGh3bWdyX2luaXQoc3RydWN0IGFtZF9wcF9pbml0ICpwcF9pbml0LAorCQkgICAgICBz dHJ1Y3QgcHBfaW5zdGFuY2UgKmhhbmRsZSk7CisKK2V4dGVybiBpbnQgaHdtZ3JfZmluaShzdHJ1 Y3QgcHBfaHdtZ3IgKmh3bWdyKTsKKworZXh0ZXJuIGludCBod19pbml0X3Bvd2VyX3N0YXRlX3Rh YmxlKHN0cnVjdCBwcF9od21nciAqaHdtZ3IpOworCitleHRlcm4gaW50IHBobV93YWl0X29uX3Jl Z2lzdGVyKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIHVpbnQzMl90IGluZGV4LAorCQkJCXVpbnQz Ml90IHZhbHVlLCB1aW50MzJfdCBtYXNrKTsKKworZXh0ZXJuIGludCBwaG1fd2FpdF9mb3JfcmVn aXN0ZXJfdW5lcXVhbChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAorCQkJCXVpbnQzMl90IGluZGV4 LCB1aW50MzJfdCB2YWx1ZSwgdWludDMyX3QgbWFzayk7CisKKworCitleHRlcm4gdm9pZCBwaG1f d2FpdF9vbl9pbmRpcmVjdF9yZWdpc3RlcihzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAorCQkJCXVp bnQzMl90IGluZGlyZWN0X3BvcnQsCisJCQkJdWludDMyX3QgaW5kZXgsCisJCQkJdWludDMyX3Qg dmFsdWUsCisJCQkJdWludDMyX3QgbWFzayk7CisKK2V4dGVybiB2b2lkIHBobV93YWl0X2Zvcl9p bmRpcmVjdF9yZWdpc3Rlcl91bmVxdWFsKAorCQkJCXN0cnVjdCBwcF9od21nciAqaHdtZ3IsCisJ CQkJdWludDMyX3QgaW5kaXJlY3RfcG9ydCwKKwkJCQl1aW50MzJfdCBpbmRleCwKKwkJCQl1aW50 MzJfdCB2YWx1ZSwKKwkJCQl1aW50MzJfdCBtYXNrKTsKKworI2RlZmluZSBQSE1fRklFTERfU0hJ RlQocmVnLCBmaWVsZCkgcmVnIyNfXyMjZmllbGQjI19fU0hJRlQKKyNkZWZpbmUgUEhNX0ZJRUxE X01BU0socmVnLCBmaWVsZCkgcmVnIyNfXyMjZmllbGQjI19NQVNLCisKKyNkZWZpbmUgUEhNX1NF VF9GSUVMRChvcmlndmFsLCByZWcsIGZpZWxkLCBmaWVsZHZhbCkJXAorCSgoKG9yaWd2YWwpICYg flBITV9GSUVMRF9NQVNLKHJlZywgZmllbGQpKSB8CVwKKwkgKFBITV9GSUVMRF9NQVNLKHJlZywg ZmllbGQpICYgKChmaWVsZHZhbCkgPDwgUEhNX0ZJRUxEX1NISUZUKHJlZywgZmllbGQpKSkpCisK KyNkZWZpbmUgUEhNX0dFVF9GSUVMRCh2YWx1ZSwgcmVnLCBmaWVsZCkJXAorCSgoKHZhbHVlKSAm IFBITV9GSUVMRF9NQVNLKHJlZywgZmllbGQpKSA+PglcCisJIFBITV9GSUVMRF9TSElGVChyZWcs IGZpZWxkKSkKKworCisjZGVmaW5lIFBITV9XQUlUX1JFR0lTVEVSX0dJVkVOX0lOREVYKGh3bWdy LCBpbmRleCwgdmFsdWUsIG1hc2spCVwKKwlwaG1fd2FpdF9vbl9yZWdpc3Rlcihod21nciwgaW5k ZXgsIHZhbHVlLCBtYXNrKQorCisjZGVmaW5lIFBITV9XQUlUX1JFR0lTVEVSX1VORVFVQUxfR0lW RU5fSU5ERVgoaHdtZ3IsIGluZGV4LCB2YWx1ZSwgbWFzaykJXAorCXBobV93YWl0X2Zvcl9yZWdp c3Rlcl91bmVxdWFsKGh3bWdyLCBpbmRleCwgdmFsdWUsIG1hc2spCisKKyNkZWZpbmUgUEhNX1dB SVRfSU5ESVJFQ1RfUkVHSVNURVJfR0lWRU5fSU5ERVgoaHdtZ3IsIHBvcnQsIGluZGV4LCB2YWx1 ZSwgbWFzaykJXAorCXBobV93YWl0X29uX2luZGlyZWN0X3JlZ2lzdGVyKGh3bWdyLCBtbSMjcG9y dCMjX0lOREVYLCBpbmRleCwgdmFsdWUsIG1hc2spCisKKyNkZWZpbmUgUEhNX1dBSVRfSU5ESVJF Q1RfUkVHSVNURVJfVU5FUVVBTF9HSVZFTl9JTkRFWChod21nciwgcG9ydCwgaW5kZXgsIHZhbHVl LCBtYXNrKQlcCisJcGhtX3dhaXRfZm9yX2luZGlyZWN0X3JlZ2lzdGVyX3VuZXF1YWwoaHdtZ3Is IG1tIyNwb3J0IyNfSU5ERVgsIGluZGV4LCB2YWx1ZSwgbWFzaykKKworI2RlZmluZSBQSE1fV0FJ VF9WRlBGX0lORElSRUNUX1JFR0lTVEVSX0dJVkVOX0lOREVYKGh3bWdyLCBwb3J0LCBpbmRleCwg dmFsdWUsIG1hc2spCVwKKwlwaG1fd2FpdF9vbl9pbmRpcmVjdF9yZWdpc3Rlcihod21nciwgbW0j I3BvcnQjI19JTkRFWF8wLCBpbmRleCwgdmFsdWUsIG1hc2spCisKKyNkZWZpbmUgUEhNX1dBSVRf VkZQRl9JTkRJUkVDVF9SRUdJU1RFUl9VTkVRVUFMX0dJVkVOX0lOREVYKGh3bWdyLCBwb3J0LCBp bmRleCwgdmFsdWUsIG1hc2spCVwKKwlwaG1fd2FpdF9mb3JfaW5kaXJlY3RfcmVnaXN0ZXJfdW5l cXVhbChod21nciwgbW0jI3BvcnQjI19JTkRFWF8wLCBpbmRleCwgdmFsdWUsIG1hc2spCisKKy8q IE9wZXJhdGlvbnMgb24gbmFtZWQgcmVnaXN0ZXJzLiAqLworCisjZGVmaW5lIFBITV9XQUlUX1JF R0lTVEVSKGh3bWdyLCByZWcsIHZhbHVlLCBtYXNrKQlcCisJUEhNX1dBSVRfUkVHSVNURVJfR0lW RU5fSU5ERVgoaHdtZ3IsIG1tIyNyZWcsIHZhbHVlLCBtYXNrKQorCisjZGVmaW5lIFBITV9XQUlU X1JFR0lTVEVSX1VORVFVQUwoaHdtZ3IsIHJlZywgdmFsdWUsIG1hc2spCVwKKwlQSE1fV0FJVF9S RUdJU1RFUl9VTkVRVUFMX0dJVkVOX0lOREVYKGh3bWdyLCBtbSMjcmVnLCB2YWx1ZSwgbWFzaykK KworI2RlZmluZSBQSE1fV0FJVF9JTkRJUkVDVF9SRUdJU1RFUihod21nciwgcG9ydCwgcmVnLCB2 YWx1ZSwgbWFzaykJXAorCVBITV9XQUlUX0lORElSRUNUX1JFR0lTVEVSX0dJVkVOX0lOREVYKGh3 bWdyLCBwb3J0LCBpeCMjcmVnLCB2YWx1ZSwgbWFzaykKKworI2RlZmluZSBQSE1fV0FJVF9JTkRJ UkVDVF9SRUdJU1RFUl9VTkVRVUFMKGh3bWdyLCBwb3J0LCByZWcsIHZhbHVlLCBtYXNrKQlcCisJ UEhNX1dBSVRfSU5ESVJFQ1RfUkVHSVNURVJfVU5FUVVBTF9HSVZFTl9JTkRFWChod21nciwgcG9y dCwgaXgjI3JlZywgdmFsdWUsIG1hc2spCisKKyNkZWZpbmUgUEhNX1dBSVRfVkZQRl9JTkRJUkVD VF9SRUdJU1RFUihod21nciwgcG9ydCwgcmVnLCB2YWx1ZSwgbWFzaykJXAorCVBITV9XQUlUX1ZG UEZfSU5ESVJFQ1RfUkVHSVNURVJfR0lWRU5fSU5ERVgoaHdtZ3IsIHBvcnQsIGl4IyNyZWcsIHZh bHVlLCBtYXNrKQorCisjZGVmaW5lIFBITV9XQUlUX1ZGUEZfSU5ESVJFQ1RfUkVHSVNURVJfVU5F UVVBTChod21nciwgcG9ydCwgcmVnLCB2YWx1ZSwgbWFzaykJXAorCVBITV9XQUlUX1ZGUEZfSU5E SVJFQ1RfUkVHSVNURVJfVU5FUVVBTF9HSVZFTl9JTkRFWChod21nciwgcG9ydCwgaXgjI3JlZywg dmFsdWUsIG1hc2spCisKKy8qIE9wZXJhdGlvbnMgb24gbmFtZWQgZmllbGRzLiAqLworCisjZGVm aW5lIFBITV9SRUFEX0ZJRUxEKGRldmljZSwgcmVnLCBmaWVsZCkJXAorCVBITV9HRVRfRklFTEQo Y2dzX3JlYWRfcmVnaXN0ZXIoZGV2aWNlLCBtbSMjcmVnKSwgcmVnLCBmaWVsZCkKKworI2RlZmlu ZSBQSE1fUkVBRF9JTkRJUkVDVF9GSUVMRChkZXZpY2UsIHBvcnQsIHJlZywgZmllbGQpCVwKKwlQ SE1fR0VUX0ZJRUxEKGNnc19yZWFkX2luZF9yZWdpc3RlcihkZXZpY2UsIHBvcnQsIGl4IyNyZWcp LAlcCisJCQlyZWcsIGZpZWxkKQorCisjZGVmaW5lIFBITV9SRUFEX1ZGUEZfSU5ESVJFQ1RfRklF TEQoZGV2aWNlLCBwb3J0LCByZWcsIGZpZWxkKQlcCisJUEhNX0dFVF9GSUVMRChjZ3NfcmVhZF9p bmRfcmVnaXN0ZXIoZGV2aWNlLCBwb3J0LCBpeCMjcmVnKSwJXAorCQkJcmVnLCBmaWVsZCkKKwor I2RlZmluZSBQSE1fV1JJVEVfRklFTEQoZGV2aWNlLCByZWcsIGZpZWxkLCBmaWVsZHZhbCkJXAor CWNnc193cml0ZV9yZWdpc3RlcihkZXZpY2UsIG1tIyNyZWcsIFBITV9TRVRfRklFTEQoCVwKKwkJ CQljZ3NfcmVhZF9yZWdpc3RlcihkZXZpY2UsIG1tIyNyZWcpLCByZWcsIGZpZWxkLCBmaWVsZHZh bCkpCisKKyNkZWZpbmUgUEhNX1dSSVRFX0lORElSRUNUX0ZJRUxEKGRldmljZSwgcG9ydCwgcmVn LCBmaWVsZCwgZmllbGR2YWwpCVwKKwljZ3Nfd3JpdGVfaW5kX3JlZ2lzdGVyKGRldmljZSwgcG9y dCwgaXgjI3JlZywJXAorCQkJUEhNX1NFVF9GSUVMRChjZ3NfcmVhZF9pbmRfcmVnaXN0ZXIoZGV2 aWNlLCBwb3J0LCBpeCMjcmVnKSwJXAorCQkJCXJlZywgZmllbGQsIGZpZWxkdmFsKSkKKworI2Rl ZmluZSBQSE1fV1JJVEVfVkZQRl9JTkRJUkVDVF9GSUVMRChkZXZpY2UsIHBvcnQsIHJlZywgZmll bGQsIGZpZWxkdmFsKQlcCisJY2dzX3dyaXRlX2luZF9yZWdpc3RlcihkZXZpY2UsIHBvcnQsIGl4 IyNyZWcsCVwKKwkJCVBITV9TRVRfRklFTEQoY2dzX3JlYWRfaW5kX3JlZ2lzdGVyKGRldmljZSwg cG9ydCwgaXgjI3JlZyksCVwKKwkJCQlyZWcsIGZpZWxkLCBmaWVsZHZhbCkpCisKKyNkZWZpbmUg UEhNX1dBSVRfRklFTEQoaHdtZ3IsIHJlZywgZmllbGQsIGZpZWxkdmFsKQlcCisJUEhNX1dBSVRf UkVHSVNURVIoaHdtZ3IsIHJlZywgKGZpZWxkdmFsKQlcCisJCQk8PCBQSE1fRklFTERfU0hJRlQo cmVnLCBmaWVsZCksIFBITV9GSUVMRF9NQVNLKHJlZywgZmllbGQpKQorCisjZGVmaW5lIFBITV9X QUlUX0lORElSRUNUX0ZJRUxEKGh3bWdyLCBwb3J0LCByZWcsIGZpZWxkLCBmaWVsZHZhbCkJXAor CVBITV9XQUlUX0lORElSRUNUX1JFR0lTVEVSKGh3bWdyLCBwb3J0LCByZWcsIChmaWVsZHZhbCkJ XAorCQkJPDwgUEhNX0ZJRUxEX1NISUZUKHJlZywgZmllbGQpLCBQSE1fRklFTERfTUFTSyhyZWcs IGZpZWxkKSkKKworI2RlZmluZSBQSE1fV0FJVF9WRlBGX0lORElSRUNUX0ZJRUxEKGh3bWdyLCBw b3J0LCByZWcsIGZpZWxkLCBmaWVsZHZhbCkJXAorCVBITV9XQUlUX1ZGUEZfSU5ESVJFQ1RfUkVH SVNURVIoaHdtZ3IsIHBvcnQsIHJlZywgKGZpZWxkdmFsKQlcCisJCQk8PCBQSE1fRklFTERfU0hJ RlQocmVnLCBmaWVsZCksIFBITV9GSUVMRF9NQVNLKHJlZywgZmllbGQpKQorCisjZGVmaW5lIFBI TV9XQUlUX0ZJRUxEX1VORVFVQUwoaHdtZ3IsIHJlZywgZmllbGQsIGZpZWxkdmFsKQlcCisJUEhN X1dBSVRfUkVHSVNURVJfVU5FUVVBTChod21nciwgcmVnLCAoZmllbGR2YWwpCVwKKwkJCTw8IFBI TV9GSUVMRF9TSElGVChyZWcsIGZpZWxkKSwgUEhNX0ZJRUxEX01BU0socmVnLCBmaWVsZCkpCisK KyNkZWZpbmUgUEhNX1dBSVRfSU5ESVJFQ1RfRklFTERfVU5FUVVBTChod21nciwgcG9ydCwgcmVn LCBmaWVsZCwgZmllbGR2YWwpCVwKKwlQSE1fV0FJVF9JTkRJUkVDVF9SRUdJU1RFUl9VTkVRVUFM KGh3bWdyLCBwb3J0LCByZWcsIChmaWVsZHZhbCkJXAorCQkJPDwgUEhNX0ZJRUxEX1NISUZUKHJl ZywgZmllbGQpLCBQSE1fRklFTERfTUFTSyhyZWcsIGZpZWxkKSkKKworI2RlZmluZSBQSE1fV0FJ VF9WRlBGX0lORElSRUNUX0ZJRUxEX1VORVFVQUwoaHdtZ3IsIHBvcnQsIHJlZywgZmllbGQsIGZp ZWxkdmFsKQlcCisJUEhNX1dBSVRfVkZQRl9JTkRJUkVDVF9SRUdJU1RFUl9VTkVRVUFMKGh3bWdy LCBwb3J0LCByZWcsIChmaWVsZHZhbCkJXAorCQkJPDwgUEhNX0ZJRUxEX1NISUZUKHJlZywgZmll bGQpLCBQSE1fRklFTERfTUFTSyhyZWcsIGZpZWxkKSkKKworLyogT3BlcmF0aW9ucyBvbiBhcnJh eXMgb2YgcmVnaXN0ZXJzICYgZmllbGRzLiAqLworCisjZGVmaW5lIFBITV9SRUFEX0FSUkFZX1JF R0lTVEVSKGRldmljZSwgcmVnLCBvZmZzZXQpCVwKKwljZ3NfcmVhZF9yZWdpc3RlcihkZXZpY2Us IG1tIyNyZWcgKyAob2Zmc2V0KSkKKworI2RlZmluZSBQSE1fV1JJVEVfQVJSQVlfUkVHSVNURVIo ZGV2aWNlLCByZWcsIG9mZnNldCwgdmFsdWUpCVwKKwljZ3Nfd3JpdGVfcmVnaXN0ZXIoZGV2aWNl LCBtbSMjcmVnICsgKG9mZnNldCksIHZhbHVlKQorCisjZGVmaW5lIFBITV9XQUlUX0FSUkFZX1JF R0lTVEVSKGh3bWdyLCByZWcsIG9mZnNldCwgdmFsdWUsIG1hc2spCVwKKwlQSE1fV0FJVF9SRUdJ U1RFUl9HSVZFTl9JTkRFWChod21nciwgbW0jI3JlZyArIChvZmZzZXQpLCB2YWx1ZSwgbWFzaykK KworI2RlZmluZSBQSE1fV0FJVF9BUlJBWV9SRUdJU1RFUl9VTkVRVUFMKGh3bWdyLCByZWcsIG9m ZnNldCwgdmFsdWUsIG1hc2spCVwKKwlQSE1fV0FJVF9SRUdJU1RFUl9VTkVRVUFMX0dJVkVOX0lO REVYKGh3bWdyLCBtbSMjcmVnICsgKG9mZnNldCksIHZhbHVlLCBtYXNrKQorCisjZGVmaW5lIFBI TV9SRUFEX0FSUkFZX0ZJRUxEKGh3bWdyLCByZWcsIG9mZnNldCwgZmllbGQpIFwKKwlQSE1fR0VU X0ZJRUxEKFBITV9SRUFEX0FSUkFZX1JFR0lTVEVSKGh3bWdyLT5kZXZpY2UsIHJlZywgb2Zmc2V0 KSwgcmVnLCBmaWVsZCkKKworI2RlZmluZSBQSE1fV1JJVEVfQVJSQVlfRklFTEQoaHdtZ3IsIHJl Zywgb2Zmc2V0LCBmaWVsZCwgZmllbGR2YWx1ZSkJXAorCVBITV9XUklURV9BUlJBWV9SRUdJU1RF Uihod21nci0+ZGV2aWNlLCByZWcsIG9mZnNldCwJXAorCQkJUEhNX1NFVF9GSUVMRChQSE1fUkVB RF9BUlJBWV9SRUdJU1RFUihod21nci0+ZGV2aWNlLCByZWcsIG9mZnNldCksCVwKKwkJCQlyZWcs IGZpZWxkLCBmaWVsZHZhbHVlKSkKKworI2RlZmluZSBQSE1fV0FJVF9BUlJBWV9GSUVMRChod21n ciwgcmVnLCBvZmZzZXQsIGZpZWxkLCBmaWVsZHZhbHVlKQlcCisJUEhNX1dBSVRfUkVHSVNURVJf R0lWRU5fSU5ERVgoaHdtZ3IsIG1tIyNyZWcgKyAob2Zmc2V0KSwJXAorCQkJKGZpZWxkdmFsdWUp IDw8IFBITV9GSUVMRF9TSElGVChyZWcsIGZpZWxkKSwJXAorCQkJUEhNX0ZJRUxEX01BU0socmVn LCBmaWVsZCkpCisKKyNkZWZpbmUgUEhNX1dBSVRfQVJSQVlfRklFTERfVU5FUVVBTChod21nciwg cmVnLCBvZmZzZXQsIGZpZWxkLCBmaWVsZHZhbHVlKQlcCisJUEhNX1dBSVRfUkVHSVNURVJfVU5F UVVBTF9HSVZFTl9JTkRFWChod21nciwgbW0jI3JlZyArIChvZmZzZXQpLAlcCisJCQkoZmllbGR2 YWx1ZSkgPDwgUEhNX0ZJRUxEX1NISUZUKHJlZywgZmllbGQpLAlcCisJCQlQSE1fRklFTERfTUFT SyhyZWcsIGZpZWxkKSkKKworI2VuZGlmIC8qIF9IV01HUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaW5jL3Bvd2VyX3N0YXRlLmggYi9kcml2ZXJzL2dw dS9kcm0vYW1kL3Bvd2VycGxheS9pbmMvcG93ZXJfc3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5jNjNiY2M3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9wb3dlcnBsYXkvaW5jL3Bvd2VyX3N0YXRlLmgKQEAgLTAsMCArMSwyMDAgQEAKKy8q CisgKiBDb3B5cmlnaHQgMjAxNSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICog UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz b24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBk b2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBT b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9u CisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlz dHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdh cmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVy bmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAq CisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO RlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihT KSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9U SEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig T1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09G VFdBUkUuCisgKgorICovCisjaWZuZGVmIFBQX1BPV0VSU1RBVEVfSAorI2RlZmluZSBQUF9QT1dF UlNUQVRFX0gKKworc3RydWN0IHBwX2h3X3Bvd2VyX3N0YXRlIHsKKwl1bnNpZ25lZCBpbnQgbWFn aWM7Cit9OworCitzdHJ1Y3QgcHBfcG93ZXJfc3RhdGU7CisKKworI2RlZmluZSBQUF9JTlZBTElE X1BPV0VSX1NUQVRFX0lEICgwKQorCisKKy8qCisgKiBBbiBpdGVtIG9mIGEgbGlzdCBjb250YWlu aW5nIFBvd2VyIFN0YXRlcy4KKyAqLworCitzdHJ1Y3QgUFBfU3RhdGVMaW5rZWRMaXN0IHsKKwlz dHJ1Y3QgcHBfcG93ZXJfc3RhdGUgKm5leHQ7CisJc3RydWN0IHBwX3Bvd2VyX3N0YXRlICpwcmV2 OworfTsKKworCitlbnVtIFBQX1N0YXRlVUlMYWJlbCB7CisJUFBfU3RhdGVVSUxhYmVsX05vbmUs CisJUFBfU3RhdGVVSUxhYmVsX0JhdHRlcnksCisJUFBfU3RhdGVVSUxhYmVsX01pZGRsZUxvdywK KwlQUF9TdGF0ZVVJTGFiZWxfQmFsYW5jZWQsCisJUFBfU3RhdGVVSUxhYmVsX01pZGRsZUhpZ2gs CisJUFBfU3RhdGVVSUxhYmVsX1BlcmZvcm1hbmNlLAorCVBQX1N0YXRlVUlMYWJlbF9CQUNPCit9 OworCitlbnVtIFBQX1N0YXRlQ2xhc3NpZmljYXRpb25GbGFnIHsKKwlQUF9TdGF0ZUNsYXNzaWZp Y2F0aW9uRmxhZ19Cb290ICAgICAgICAgICAgICAgID0gMHgwMDAxLAorCVBQX1N0YXRlQ2xhc3Np ZmljYXRpb25GbGFnX1RoZXJtYWwgICAgICAgICAgICAgPSAweDAwMDIsCisJUFBfU3RhdGVDbGFz c2lmaWNhdGlvbkZsYWdfTGltaXRlZFBvd2VyU291cmNlICA9IDB4MDAwNCwKKwlQUF9TdGF0ZUNs YXNzaWZpY2F0aW9uRmxhZ19SZXN0ICAgICAgICAgICAgICAgID0gMHgwMDA4LAorCVBQX1N0YXRl Q2xhc3NpZmljYXRpb25GbGFnX0ZvcmNlZCAgICAgICAgICAgICAgPSAweDAwMTAsCisJUFBfU3Rh dGVDbGFzc2lmaWNhdGlvbkZsYWdfVXNlcjNEUGVyZm9ybWFuY2UgICA9IDB4MDAyMCwKKwlQUF9T dGF0ZUNsYXNzaWZpY2F0aW9uRmxhZ19Vc2VyMkRQZXJmb3JtYW5jZSAgID0gMHgwMDQwLAorCVBQ X1N0YXRlQ2xhc3NpZmljYXRpb25GbGFnXzNEUGVyZm9ybWFuY2UgICAgICAgPSAweDAwODAsCisJ UFBfU3RhdGVDbGFzc2lmaWNhdGlvbkZsYWdfQUNPdmVyZHJpdmVUZW1wbGF0ZSAgID0gMHgwMTAw LAorCVBQX1N0YXRlQ2xhc3NpZmljYXRpb25GbGFnX1V2ZCAgICAgICAgICAgICAgICAgPSAweDAy MDAsCisJUFBfU3RhdGVDbGFzc2lmaWNhdGlvbkZsYWdfM0RQZXJmb3JtYW5jZUxvdyAgICA9IDB4 MDQwMCwKKwlQUF9TdGF0ZUNsYXNzaWZpY2F0aW9uRmxhZ19BQ1BJICAgICAgICAgICAgICAgID0g MHgwODAwLAorCVBQX1N0YXRlQ2xhc3NpZmljYXRpb25GbGFnX0hEMiAgICAgICAgICAgICAgICAg PSAweDEwMDAsCisJUFBfU3RhdGVDbGFzc2lmaWNhdGlvbkZsYWdfVXZkSEQgICAgICAgICAgICAg ICA9IDB4MjAwMCwKKwlQUF9TdGF0ZUNsYXNzaWZpY2F0aW9uRmxhZ19VdmRTRCAgICAgICAgICAg ICAgID0gMHg0MDAwLAorCVBQX1N0YXRlQ2xhc3NpZmljYXRpb25GbGFnX1VzZXJEQ1BlcmZvcm1h bmNlICAgID0gMHg4MDAwLAorCVBQX1N0YXRlQ2xhc3NpZmljYXRpb25GbGFnX0RDT3ZlcmRyaXZl VGVtcGxhdGUgICA9IDB4MTAwMDAsCisJUFBfU3RhdGVDbGFzc2lmaWNhdGlvbkZsYWdfQkFDTyAg ICAgICAgICAgICAgICAgID0gMHgyMDAwMCwKKwlQUF9TdGF0ZUNsYXNzaWZpY2F0aW9uRmxhZ19M aW1pdGVkUG93ZXJTb3VyY2VfMiAgPSAweDQwMDAwLAorCVBQX1N0YXRlQ2xhc3NpZmljYXRpb25G bGFnX1VMViAgICAgICAgICAgICAgICAgICA9IDB4ODAwMDAsCisJUFBfU3RhdGVDbGFzc2lmaWNh dGlvbkZsYWdfVXZkTVZDICAgICAgICAgICAgICAgPSAweDEwMDAwMCwKK307CisKK3R5cGVkZWYg dW5zaWduZWQgaW50IFBQX1N0YXRlQ2xhc3NpZmljYXRpb25GbGFnczsKKworc3RydWN0IFBQX1N0 YXRlQ2xhc3NpZmljYXRpb25CbG9jayB7CisJZW51bSBQUF9TdGF0ZVVJTGFiZWwgICAgICAgICB1 aV9sYWJlbDsKKwllbnVtIFBQX1N0YXRlQ2xhc3NpZmljYXRpb25GbGFnICBmbGFnczsKKwlpbnQg ICAgICAgICAgICAgICAgICAgICAgICAgIGJpb3NfaW5kZXg7CisJYm9vbCAgICAgICAgICAgICAg ICAgICAgICB0ZW1wb3Jhcnlfc3RhdGU7CisJYm9vbCAgICAgICAgICAgICAgICAgICAgICB0b19i ZV9kZWxldGVkOworfTsKKworc3RydWN0IFBQX1N0YXRlUGNpZUJsb2NrIHsKKwl1bnNpZ25lZCBp bnQgbGFuZXM7Cit9OworCitlbnVtIFBQX1JlZnJlc2hyYXRlU291cmNlIHsKKwlQUF9SZWZyZXNo cmF0ZVNvdXJjZV9FRElELAorCVBQX1JlZnJlc2hyYXRlU291cmNlX0V4cGxpY2l0Cit9OworCitz dHJ1Y3QgUFBfU3RhdGVEaXNwbGF5QmxvY2sgeworCWJvb2wgICAgICAgICAgICAgIGRpc2FibGVG cmFtZU1vZHVsYXRpb247CisJYm9vbCAgICAgICAgICAgICAgbGltaXRSZWZyZXNocmF0ZTsKKwll bnVtIFBQX1JlZnJlc2hyYXRlU291cmNlIHJlZnJlc2hyYXRlU291cmNlOworCWludCAgICAgICAg ICAgICAgICAgIGV4cGxpY2l0UmVmcmVzaHJhdGU7CisJaW50ICAgICAgICAgICAgICAgICAgZWRp ZFJlZnJlc2hyYXRlSW5kZXg7CisJYm9vbCAgICAgICAgICAgICAgZW5hYmxlVmFyaUJyaWdodDsK K307CisKK3N0cnVjdCBQUF9TdGF0ZU1lbXJveUJsb2NrIHsKKwlib29sICAgICAgICAgICAgICBk bGxPZmY7CisJdWludDhfdCAgICAgICAgICAgICAgICAgbTNhcmI7CisJdWludDhfdCAgICAgICAg ICAgICAgICAgdW51c2VkWzNdOworfTsKKworc3RydWN0IFBQX1N0YXRlU29mdHdhcmVBbGdvcml0 aG1CbG9jayB7CisJYm9vbCBkaXNhYmxlTG9hZEJhbGFuY2luZzsKKwlib29sIGVuYWJsZVNsZWVw Rm9yVGltZXN0YW1wczsKK307CisKKyNkZWZpbmUgUFBfVEVNUEVSQVRVUkVfVU5JVFNfUEVSX0NF TlRJR1JBREVTIDEwMDAKKworLyoqCisgKiBUeXBlIHRvIGhvbGQgYSB0ZW1wZXJhdHVyZSByYW5n ZS4KKyAqLworc3RydWN0IFBQX1RlbXBlcmF0dXJlUmFuZ2UgeworCXVpbnQxNl90IG1pbjsKKwl1 aW50MTZfdCBtYXg7Cit9OworCitzdHJ1Y3QgUFBfU3RhdGVWYWxpZGF0aW9uQmxvY2sgeworCWJv b2wgc2luZ2xlRGlzcGxheU9ubHk7CisJYm9vbCBkaXNhbGxvd09uREM7CisJdWludDhfdCBzdXBw b3J0ZWRQb3dlckxldmVsczsKK307CisKK3N0cnVjdCBQUF9VVkRfQ0xPQ0tTIHsKKwl1aW50MzJf dCBWQ0xLOworCXVpbnQzMl90IERDTEs7Cit9OworCisvKioKKyogU3RydWN0dXJlIHRvIGhvbGQg YSBQb3dlclBsYXkgUG93ZXIgU3RhdGUuCisqLworc3RydWN0IHBwX3Bvd2VyX3N0YXRlIHsKKwl1 aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDsKKwlzdHJ1Y3QgUFBfU3RhdGVM aW5rZWRMaXN0ICAgICAgICAgICAgICAgICAgb3JkZXJlZExpc3Q7CisJc3RydWN0IFBQX1N0YXRl TGlua2VkTGlzdCAgICAgICAgICAgICAgICAgIGFsbFN0YXRlc0xpc3Q7CisKKwlzdHJ1Y3QgUFBf U3RhdGVDbGFzc2lmaWNhdGlvbkJsb2NrICAgICAgICAgY2xhc3NpZmljYXRpb247CisJc3RydWN0 IFBQX1N0YXRlVmFsaWRhdGlvbkJsb2NrICAgICAgICAgICAgIHZhbGlkYXRpb247CisJc3RydWN0 IFBQX1N0YXRlUGNpZUJsb2NrICAgICAgICAgICAgICAgICAgIHBjaWU7CisJc3RydWN0IFBQX1N0 YXRlRGlzcGxheUJsb2NrICAgICAgICAgICAgICAgIGRpc3BsYXk7CisJc3RydWN0IFBQX1N0YXRl TWVtcm95QmxvY2sgICAgICAgICAgICAgICAgIG1lbW9yeTsKKwlzdHJ1Y3QgUFBfVGVtcGVyYXR1 cmVSYW5nZSAgICAgICAgICAgICAgICAgdGVtcGVyYXR1cmVzOworCXN0cnVjdCBQUF9TdGF0ZVNv ZnR3YXJlQWxnb3JpdGhtQmxvY2sgICAgICBzb2Z0d2FyZTsKKwlzdHJ1Y3QgUFBfVVZEX0NMT0NL UyAgICAgICAgICAgICAgICAgICAgICAgdXZkX2Nsb2NrczsKKwlzdHJ1Y3QgcHBfaHdfcG93ZXJf c3RhdGUgIGhhcmR3YXJlOworfTsKKworCisvKlN0cnVjdHVyZSB0byBob2xkIGEgVkNFIHN0YXRl IGVudHJ5Ki8KK3N0cnVjdCBQUF9WQ0VTdGF0ZSB7CisJdWludDMyX3QgZXZjbGs7CisJdWludDMy X3QgZWNjbGs7CisJdWludDMyX3Qgc2NsazsKKwl1aW50MzJfdCBtY2xrOworfTsKKworZW51bSBQ UF9NTVByb2ZpbGluZ1N0YXRlIHsKKwlQUF9NTVByb2ZpbGluZ1N0YXRlX05BID0gMCwKKwlQUF9N TVByb2ZpbGluZ1N0YXRlX1N0YXJ0ZWQsCisJUFBfTU1Qcm9maWxpbmdTdGF0ZV9TdG9wcGVkCit9 OworCitzdHJ1Y3QgUFBfQ2xvY2tfRW5naW5lX1JlcXVlc3QgeworCXVuc2lnbmVkIGxvbmcgY2xp ZW50VHlwZTsKKwl1bnNpZ25lZCBsb25nIGN0eGlkOworCXVpbnQ2NF90ICBjb250ZXh0X2hhbmRs ZTsKKwl1bnNpZ25lZCBsb25nIHNjbGs7CisJdW5zaWduZWQgbG9uZyBzY2xrSGFyZE1pbjsKKwl1 bnNpZ25lZCBsb25nIG1jbGs7CisJdW5zaWduZWQgbG9uZyBpY2xrOworCXVuc2lnbmVkIGxvbmcg ZXZjbGs7CisJdW5zaWduZWQgbG9uZyBlY2NsazsKKwl1bnNpZ25lZCBsb25nIGVjY2xrSGFyZE1p bjsKKwl1bnNpZ25lZCBsb25nIHZjbGs7CisJdW5zaWduZWQgbG9uZyBkY2xrOworCXVuc2lnbmVk IGxvbmcgc2FtY2xrOworCXVuc2lnbmVkIGxvbmcgYWNwY2xrOworCXVuc2lnbmVkIGxvbmcgc2Ns a092ZXJkcml2ZTsKKwl1bnNpZ25lZCBsb25nIG1jbGtPdmVyZHJpdmU7CisJdW5zaWduZWQgbG9u ZyBzY2xrX3RocmVzaG9sZDsKKwl1bnNpZ25lZCBsb25nIGZsYWc7CisJdW5zaWduZWQgbG9uZyB2 Y2xrX2NlaWxpbmc7CisJdW5zaWduZWQgbG9uZyBkY2xrX2NlaWxpbmc7CisJdW5zaWduZWQgbG9u ZyBudW1fY3VzOworCXVuc2lnbmVkIGxvbmcgcG1mbGFnOworCWVudW0gUFBfTU1Qcm9maWxpbmdT dGF0ZSBNTVByb2ZpbGluZ1N0YXRlOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vYW1kL3Bvd2VycGxheS9pbmMvcHBfYWNwaS5oIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9wb3dlcnBsYXkvaW5jL3BwX2FjcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi4zYmQ1ZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dl cnBsYXkvaW5jL3BwX2FjcGkuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IDIw MTUgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisg KiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCBy ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0 byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu c2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywg c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNv cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVk ZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3 YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBO TyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJF IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFS SVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLwor CitleHRlcm4gYm9vbCBhY3BpX2F0Y3NfZnVuY3Rpb25zX3N1cHBvcnRlZCh2b2lkICpkZXZpY2Us CisJCQkJCQkJdWludDMyX3QgaW5kZXgpOworZXh0ZXJuIGludCBhY3BpX3BjaWVfcGVyZl9yZXF1 ZXN0KHZvaWQgKmRldmljZSwKKwkJCQkJCXVpbnQ4X3QgcGVyZl9yZXEsCisJCQkJCQlib29sIGFk dmVydGlzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9pbmMv cHBfaW5zdGFuY2UuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2luYy9wcF9pbnN0 YW5jZS5oCmluZGV4IDMxOGY4MjcuLjM1ZGZjZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvcG93ZXJwbGF5L2luYy9wcF9pbnN0YW5jZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvcG93ZXJwbGF5L2luYy9wcF9pbnN0YW5jZS5oCkBAIC0yNCwxMCArMjQsMTEgQEAKICNkZWZp bmUgX1BQX0lOU1RBTkNFX0hfCiAKICNpbmNsdWRlICJzbXVtZ3IuaCIKLQorI2luY2x1ZGUgImh3 bWdyLmgiCiAKIHN0cnVjdCBwcF9pbnN0YW5jZSB7CiAJc3RydWN0IHBwX3NtdW1nciAqc211X21n cjsKKwlzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9pbmMvcHBfcG93ZXJfc291cmNlLmggYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9pbmMvcHBfcG93ZXJfc291cmNlLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQzMzE1YwotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2luYy9wcF9wb3dlcl9zb3VyY2UuaApAQCAtMCww ICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTUgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywg SW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8g ZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv dXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2Us IHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNv ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlS SUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElO R1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaWZuZGVmIFBQX1BPV0VSU09VUkNFX0gK KyNkZWZpbmUgUFBfUE9XRVJTT1VSQ0VfSAorCitlbnVtIHBwX3Bvd2VyX3NvdXJjZSB7CisJUFBf UG93ZXJTb3VyY2VfQUMgPSAwLAorCVBQX1Bvd2VyU291cmNlX0RDLAorCVBQX1Bvd2VyU291cmNl X0xpbWl0ZWRQb3dlciwKKwlQUF9Qb3dlclNvdXJjZV9MaW1pdGVkUG93ZXJfMiwKKwlQUF9Qb3dl clNvdXJjZV9NYXgKK307CisKKworI2VuZGlmCi0tIAoxLjguMy4xCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=