From owner-freebsd-wireless@FreeBSD.ORG Sun Feb 17 00:46:25 2013 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id C29A210D for ; Sun, 17 Feb 2013 00:46:25 +0000 (UTC) (envelope-from adrian.chadd@gmail.com) Received: from mail-wg0-f54.google.com (mail-wg0-f54.google.com [74.125.82.54]) by mx1.freebsd.org (Postfix) with ESMTP id 429CC21A for ; Sun, 17 Feb 2013 00:46:24 +0000 (UTC) Received: by mail-wg0-f54.google.com with SMTP id fm10so3661361wgb.21 for ; Sat, 16 Feb 2013 16:46:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-received:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; bh=+OaJOaBjGvgpmLCco5EDDlfkUQALE0xSVjdaYHsqWTE=; b=Ay6O02QSsVSPulCU+0+jOeWguWRfb9SOohIDesYjqQBecStbthORPRhSx4xsY2Kx95 bG0nmUHa7ezzOIfq3bJ9Ou8NDUMLEI1XMunImMLk9B+3KdA71UmE/OAMQhVZL1Yygpzh oRJq5xAa/XjeOIS3W5hyMsgyunrRyJ7jtqCVKW2MEJKHPF/LuYycyuasbDLe/QzGJHk1 TKZY+J+vwEppcBvyd69wpxwyiHt5ficEZBHTx1YThyxN5JD2GI6W6G0EyqYMi3/6B6Ee Jlawy+ewpy7ztDXK9BAJ55BUlLmDUC0/CrIskvK5cpOk8z9JA0egpUvlxlpJvb7pNp2W a5Dw== MIME-Version: 1.0 X-Received: by 10.180.84.165 with SMTP id a5mr13089438wiz.6.1361061978550; Sat, 16 Feb 2013 16:46:18 -0800 (PST) Sender: adrian.chadd@gmail.com Received: by 10.216.236.88 with HTTP; Sat, 16 Feb 2013 16:46:18 -0800 (PST) In-Reply-To: References: Date: Sat, 16 Feb 2013 16:46:18 -0800 X-Google-Sender-Auth: JLp8LHA4h38ehiqmCpmkrVzpSNE Message-ID: Subject: Re: [RFC] serialising net80211 TX From: Adrian Chadd To: PseudoCylon Content-Type: multipart/mixed; boundary=f46d0418270ebfb28004d5e0ef7b Cc: freebsd-wireless@freebsd.org X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Discussions of 802.11 stack, tools device driver development." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Feb 2013 00:46:25 -0000 --f46d0418270ebfb28004d5e0ef7b Content-Type: text/plain; charset=ISO-8859-1 Here's version two of the patch: it includes the rest of the TX paths locked as well as some extra assertions about the state of the TX lock requirements. I've only lightly tested this in STA mode. I haven't yet really tested this in hostap mode. I gather it's going to panic all the things. Thus, please only run this on a test device. :-) Adrian --f46d0418270ebfb28004d5e0ef7b Content-Type: application/octet-stream; name="20130216-net80211-tx-lock-2.diff" Content-Disposition: attachment; filename="20130216-net80211-tx-lock-2.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hd9h5ktw0 SW5kZXg6IHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfaHdtcC5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9u ZXQ4MDIxMS9pZWVlODAyMTFfaHdtcC5jCShyZXZpc2lvbiAyNDY4MTgpCisrKyBzeXMvbmV0ODAy MTEvaWVlZTgwMjExX2h3bXAuYwkod29ya2luZyBjb3B5KQpAQCAtNTkyLDYgKzU5Miw3IEBACiAJ c3RydWN0IGllZWU4MDIxMV9icGZfcGFyYW1zIHBhcmFtczsKIAlzdHJ1Y3QgbWJ1ZiAqbTsKIAl1 aW50OF90ICpmcm07CisJaW50IHJldDsKIAogCWlmIChJRUVFODAyMTFfSVNfTVVMVElDQVNUKGRh KSkgewogCQluaSA9IGllZWU4MDIxMV9yZWZfbm9kZSh2YXAtPml2X2Jzcyk7CkBAIC02NjksNyAr NjcwLDEwIEBACiAJZWxzZQogCQlwYXJhbXMuaWJwX3RyeTAgPSBuaS0+bmlfdHhwYXJtcy0+bWF4 cmV0cnk7CiAJcGFyYW1zLmlicF9wb3dlciA9IG5pLT5uaV90eHBvd2VyOwotCXJldHVybiBpYy0+ aWNfcmF3X3htaXQobmksIG0sICZwYXJhbXMpOworCUlFRUU4MDIxMV9WQVBfVFhfTE9DSyh2YXAp OworCXJldCA9IGljLT5pY19yYXdfeG1pdChuaSwgbSwgJnBhcmFtcyk7CisJSUVFRTgwMjExX1ZB UF9UWF9VTkxPQ0sodmFwKTsKKwlyZXR1cm4gKHJldCk7CiB9CiAKICNkZWZpbmUgQUREU0hPUlQo ZnJtLCB2KSBkbyB7CQlcCkluZGV4OiBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX2h0LmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gc3lzL25ldDgwMjExL2llZWU4MDIxMV9odC5jCShyZXZpc2lvbiAyNDY4MTgpCisr KyBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX2h0LmMJKHdvcmtpbmcgY29weSkKQEAgLTIzOTIsNyAr MjM5Miw5IEBACiAJICogaWNfcmF3X3htaXQgd2lsbCBmcmVlIHRoZSBub2RlIHJlZmVyZW5jZQog CSAqIHJlZ2FyZGxlc3Mgb2YgcXVldWUvVFggc3VjY2VzcyBvciBmYWlsdXJlLgogCSAqLworCUlF RUU4MDIxMV9WQVBfVFhfTE9DSyh2YXApOwogCXJldCA9IGljLT5pY19yYXdfeG1pdChuaSwgbSwg TlVMTCk7CisJSUVFRTgwMjExX1ZBUF9UWF9VTkxPQ0sodmFwKTsKIAlpZiAocmV0ICE9IDApIHsK IAkJSUVFRTgwMjExX05PVEUodmFwLCBJRUVFODAyMTFfTVNHX0RFQlVHIHwgSUVFRTgwMjExX01T R18xMU4sCiAJCSAgICBuaSwgInNlbmQgQkFSOiBmYWlsZWQ6IChyZXQgPSAlZClcbiIsCkluZGV4 OiBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX21lc2guYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvbmV0ODAy MTEvaWVlZTgwMjExX21lc2guYwkocmV2aXNpb24gMjQ2ODYxKQorKysgc3lzL25ldDgwMjExL2ll ZWU4MDIxMV9tZXNoLmMJKHdvcmtpbmcgY29weSkKQEAgLTEwNDYsNiArMTA0Niw4IEBACiAJc3Ry dWN0IGV0aGVyX2hlYWRlciAqZWg7CiAJaW50IGVycm9yOwogCisJSUVFRTgwMjExX1ZBUF9UWF9V TkxPQ0tfQVNTRVJUKHZhcCk7CisKIAllaCA9IG10b2QobSwgc3RydWN0IGV0aGVyX2hlYWRlciAq KTsKIAluaSA9IGllZWU4MDIxMV9tZXNoX2ZpbmRfdHhub2RlKHZhcCwgcnRfZ2F0ZS0+cnRfZGVz dCk7CiAJaWYgKG5pID09IE5VTEwpIHsKQEAgLTExMzIsNiArMTEzNCw3IEBACiAJCX0KIAl9CiAj ZW5kaWYgLyogSUVFRTgwMjExX1NVUFBPUlRfU1VQRVJHICovCisJSUVFRTgwMjExX1ZBUF9UWF9M T0NLKHZhcCk7CiAJaWYgKF9fcHJlZGljdF90cnVlKCh2YXAtPml2X2NhcHMgJiBJRUVFODAyMTFf Q184MDIzRU5DQVApID09IDApKSB7CiAJCS8qCiAJCSAqIEVuY2Fwc3VsYXRlIHRoZSBwYWNrZXQg aW4gcHJlcCBmb3IgdHJhbnNtaXNzaW9uLgpAQCAtMTEzOSwxMSArMTE0MiwxMyBAQAogCQltID0g aWVlZTgwMjExX2VuY2FwKHZhcCwgbmksIG0pOwogCQlpZiAobSA9PSBOVUxMKSB7CiAJCQkvKiBO Qjogc3RhdCttc2cgaGFuZGxlZCBpbiBpZWVlODAyMTFfZW5jYXAgKi8KKwkJCUlFRUU4MDIxMV9W QVBfVFhfVU5MT0NLKHZhcCk7CiAJCQlpZWVlODAyMTFfZnJlZV9ub2RlKG5pKTsKIAkJCXJldHVy bjsKIAkJfQogCX0KIAllcnJvciA9IHBhcmVudC0+aWZfdHJhbnNtaXQocGFyZW50LCBtKTsKKwlJ RUVFODAyMTFfVkFQX1RYX1VOTE9DSyh2YXApOwogCWlmIChlcnJvciAhPSAwKSB7CiAJCW1fZnJl ZW0obSk7CiAJCWllZWU4MDIxMV9mcmVlX25vZGUobmkpOwpAQCAtMTE3NCw2ICsxMTc5LDggQEAK IAlLQVNTRVJUKCBydF9kZXN0LT5ydF9mbGFncyA9PSBJRUVFODAyMTFfTUVTSFJUX0ZMQUdTX0RJ U0NPVkVSLAogCSAgICAoIlJvdXRlIGlzIG5vdCBtYXJrZWQgd2l0aCBJRUVFODAyMTFfTUVTSFJU X0ZMQUdTX0RJU0NPVkVSIikpOwogCisJSUVFRTgwMjExX1ZBUF9UWF9VTkxPQ0tfQVNTRVJUKHZh cCk7CisKIAkvKiBYWFg6IHNlbmQgdG8gbW9yZSB0aGFuIG9uZSB2YWxpZCBtYXNoIGdhdGUgKi8K IAlNRVNIX1JUX0xPQ0sobXMpOwogCkBAIC0yNzQzLDYgKzI3NTAsNyBAQAogCXN0cnVjdCBpZWVl ODAyMTFjb20gKmljID0gbmktPm5pX2ljOwogCXN0cnVjdCBpZWVlODAyMTFfYnBmX3BhcmFtcyBw YXJhbXM7CiAJc3RydWN0IGllZWU4MDIxMV9mcmFtZSAqd2g7CisJaW50IHJldDsKIAogCUtBU1NF UlQobmkgIT0gTlVMTCwgKCJudWxsIG5vZGUiKSk7CiAKQEAgLTI3NzgsNyArMjc4NiwxMCBAQAog CiAJSUVFRTgwMjExX05PREVfU1RBVChuaSwgdHhfbWdtdCk7CiAKLQlyZXR1cm4gaWMtPmljX3Jh d194bWl0KG5pLCBtLCAmcGFyYW1zKTsKKwlJRUVFODAyMTFfVkFQX1RYX0xPQ0sodmFwKTsKKwly ZXQgPSBpYy0+aWNfcmF3X3htaXQobmksIG0sICZwYXJhbXMpOworCUlFRUU4MDIxMV9WQVBfVFhf VU5MT0NLKHZhcCk7CisJcmV0dXJuIChyZXQpOwogfQogCiAjZGVmaW5lCUFERFNIT1JUKGZybSwg dikgZG8gewkJCVwKSW5kZXg6IHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfd2RzLmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gc3lzL25ldDgwMjExL2llZWU4MDIxMV93ZHMuYwkocmV2aXNpb24gMjQ2ODE4KQorKysg c3lzL25ldDgwMjExL2llZWU4MDIxMV93ZHMuYwkod29ya2luZyBjb3B5KQpAQCAtMjU0LDYgKzI1 NCwxMCBAQAogCQlpZiAoaWZwID09IG0tPm1fcGt0aGRyLnJjdmlmKQogCQkJY29udGludWU7CiAJ CS8qCisJCSAqIE1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIHRoZSBWQVAgVFggbG9jayBoZWxkIGhl cmUuCisJCSAqLworCQlJRUVFODAyMTFfVkFQX1RYX1VOTE9DS19BU1NFUlQodmFwKTsKKwkJLyoK IAkJICogRHVwbGljYXRlIHRoZSBmcmFtZSBhbmQgc2VuZCBpdC4KIAkJICovCiAJCW1jb3B5ID0g bV9jb3B5cGFja2V0KG0sIE1fTk9XQUlUKTsKQEAgLTI4NywxNiArMjkxLDIzIEBACiAJCS8qCiAJ CSAqIEVuY2Fwc3VsYXRlIHRoZSBwYWNrZXQgaW4gcHJlcCBmb3IgdHJhbnNtaXNzaW9uLgogCQkg Ki8KKwkJSUVFRTgwMjExX1ZBUF9UWF9MT0NLKHZhcCk7CiAJCW1jb3B5ID0gaWVlZTgwMjExX2Vu Y2FwKHZhcCwgbmksIG1jb3B5KTsKIAkJaWYgKG1jb3B5ID09IE5VTEwpIHsKIAkJCS8qIE5COiBz dGF0K21zZyBoYW5kbGVkIGluIGllZWU4MDIxMV9lbmNhcCAqLwogCQkJaWVlZTgwMjExX2ZyZWVf bm9kZShuaSk7CisJCQlJRUVFODAyMTFfVkFQX1RYX1VOTE9DSyh2YXApOwogCQkJY29udGludWU7 CiAJCX0KIAkJbWNvcHktPm1fZmxhZ3MgfD0gTV9NQ0FTVDsKIAkJbWNvcHktPm1fcGt0aGRyLnJj dmlmID0gKHZvaWQgKikgbmk7CiAKKwkJLyoKKwkJICogU2VyaWFsaXNlIHRoZSBlbmNhcHN1bGF0 aW9uIGFuZCB0cmFuc21pdAorCQkgKiB3aXRoIHRoZSBWQVAgVFggbG9jay4KKwkJICovCiAJCWVy ciA9IHBhcmVudC0+aWZfdHJhbnNtaXQocGFyZW50LCBtY29weSk7CisJCUlFRUU4MDIxMV9WQVBf VFhfVU5MT0NLKHZhcCk7CiAJCWlmIChlcnIpIHsKIAkJCS8qIE5COiBJRlFfSEFORE9GRiByZWNs YWltcyBtYnVmICovCiAJCQlpZnAtPmlmX29lcnJvcnMrKzsKSW5kZXg6IHN5cy9uZXQ4MDIxMS9p ZWVlODAyMTFfb3V0cHV0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL25ldDgwMjExL2llZWU4MDIxMV9v dXRwdXQuYwkocmV2aXNpb24gMjQ2ODE4KQorKysgc3lzL25ldDgwMjExL2llZWU4MDIxMV9vdXRw dXQuYwkod29ya2luZyBjb3B5KQpAQCAtMTEwLDYgKzExMCwyNTIgQEAKICNlbmRpZgogCiAvKgor ICogU2VuZCB0aGUgZ2l2ZW4gbWJ1ZiB0aHJvdWdoIHRoZSBnaXZlbiB2YXAuCisgKgorICogVGhp cyBjb25zdW1lcyB0aGUgbWJ1ZiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHRyYW5zbWl0Cisg KiB3YXMgc3VjY2Vzc2Z1bCBvciBub3QuCisgKgorICogVGhpcyBkb2VzIG5vbmUgb2YgdGhlIGlu aXRpYWwgY2hlY2tzIHRoYXQgaWVlZTgwMjExX3N0YXJ0KCkKKyAqIGRvZXMgKGVnIENBQyB0aW1l b3V0LCBpbnRlcmZhY2Ugd2FrZXVwKSAtIHRoZSBjYWxsZXIgbXVzdAorICogZG8gdGhpcyBmaXJz dC4KKyAqLworc3RhdGljIGludAoraWVlZTgwMjExX3N0YXJ0X3BrdChzdHJ1Y3QgaWVlZTgwMjEx dmFwICp2YXAsIHN0cnVjdCBtYnVmICptKQoreworI2RlZmluZQlJU19EV0RTKHZhcCkgXAorCSh2 YXAtPml2X29wbW9kZSA9PSBJRUVFODAyMTFfTV9XRFMgJiYgXAorCSAodmFwLT5pdl9mbGFnc19l eHQgJiBJRUVFODAyMTFfRkVYVF9XRFNMRUdBQ1kpID09IDApCisJc3RydWN0IGllZWU4MDIxMWNv bSAqaWMgPSB2YXAtPml2X2ljOworCXN0cnVjdCBpZm5ldCAqcGFyZW50ID0gaWMtPmljX2lmcDsK KwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IHZhcC0+aXZfaWZwOworCXN0cnVjdCBpZWVlODAyMTFfbm9k ZSAqbmk7CisJc3RydWN0IGV0aGVyX2hlYWRlciAqZWg7CisJaW50IGVycm9yOworCisJLyoKKwkg KiBTYW5pdGl6ZSBtYnVmIGZsYWdzIGZvciBuZXQ4MDIxMSB1c2UuICBXZSBjYW5ub3QKKwkgKiBj bGVhciBNX1BXUl9TQVYgb3IgTV9NT1JFX0RBVEEgYmVjYXVzZSB0aGVzZSBtYXkKKwkgKiBiZSBz ZXQgZm9yIGZyYW1lcyB0aGF0IGFyZSByZS1zdWJtaXR0ZWQgZnJvbSB0aGUKKwkgKiBwb3dlciBz YXZlIHF1ZXVlLgorCSAqCisJICogTkI6IFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBpZWVlODAy MTFfY2xhc3NpZnkgYXMKKwkgKiAgICAgaXQgbWFya3MgRUFQT0wgaW4gZnJhbWVzIHdpdGggTV9F QVBPTC4KKwkgKi8KKwltLT5tX2ZsYWdzICY9IH4oTV84MDIxMV9UWCAtIE1fUFdSX1NBViAtIE1f TU9SRV9EQVRBKTsKKwkvKgorCSAqIENhbmNlbCBhbnkgYmFja2dyb3VuZCBzY2FuLgorCSAqLwor CWlmIChpYy0+aWNfZmxhZ3MgJiBJRUVFODAyMTFfRl9TQ0FOKQorCQlpZWVlODAyMTFfY2FuY2Vs X2FueXNjYW4odmFwKTsKKwkvKiAKKwkgKiBGaW5kIHRoZSBub2RlIGZvciB0aGUgZGVzdGluYXRp b24gc28gd2UgY2FuIGRvCisJICogdGhpbmdzIGxpa2UgcG93ZXIgc2F2ZSBhbmQgZmFzdCBmcmFt ZXMgYWdncmVnYXRpb24uCisJICoKKwkgKiBOQjogcGFzdCB0aGlzIHBvaW50IHZhcmlvdXMgY29k ZSBhc3N1bWVzIHRoZSBmaXJzdAorCSAqICAgICBtYnVmIGhhcyB0aGUgODAyLjMgaGVhZGVyIHBy ZXNlbnQgKGFuZCBjb250aWd1b3VzKS4KKwkgKi8KKwluaSA9IE5VTEw7CisJaWYgKG0tPm1fbGVu IDwgc2l6ZW9mKHN0cnVjdCBldGhlcl9oZWFkZXIpICYmCisJICAgKG0gPSBtX3B1bGx1cChtLCBz aXplb2Yoc3RydWN0IGV0aGVyX2hlYWRlcikpKSA9PSBOVUxMKSB7CisJCUlFRUU4MDIxMV9EUFJJ TlRGKHZhcCwgSUVFRTgwMjExX01TR19PVVRQVVQsCisJCSAgICAiZGlzY2FyZCBmcmFtZSwgJXNc biIsICJtX3B1bGx1cCBmYWlsZWQiKTsKKwkJdmFwLT5pdl9zdGF0cy5pc190eF9ub2J1ZisrOwkv KiBYWFggKi8KKwkJaWZwLT5pZl9vZXJyb3JzKys7CisJCXJldHVybiAoRU5PQlVGUyk7CisJfQor CWVoID0gbXRvZChtLCBzdHJ1Y3QgZXRoZXJfaGVhZGVyICopOworCWlmIChFVEhFUl9JU19NVUxU SUNBU1QoZWgtPmV0aGVyX2Rob3N0KSkgeworCQlpZiAoSVNfRFdEUyh2YXApKSB7CisJCQkvKgor CQkJICogT25seSB1bmljYXN0IGZyYW1lcyBmcm9tIHRoZSBhYm92ZSBnbyBvdXQKKwkJCSAqIERX RFMgdmFwczsgbXVsdGljYXN0IGZyYW1lcyBhcmUgaGFuZGxlZCBieQorCQkJICogZGlzcGF0Y2hp bmcgdGhlIGZyYW1lIGFzIGl0IGNvbWVzIHRocm91Z2gKKwkJCSAqIHRoZSBBUCB2YXAgKHNlZSBi ZWxvdykuCisJCQkgKi8KKwkJCUlFRUU4MDIxMV9ESVNDQVJEX01BQyh2YXAsIElFRUU4MDIxMV9N U0dfV0RTLAorCQkJICAgIGVoLT5ldGhlcl9kaG9zdCwgIm1jYXN0IiwgIiVzIiwgIm9uIERXRFMi KTsKKwkJCXZhcC0+aXZfc3RhdHMuaXNfZHdkc19tY2FzdCsrOworCQkJbV9mcmVlbShtKTsKKwkJ CS8qIFhYWCBiZXR0ZXIgc3RhdHVzPyAqLworCQkJcmV0dXJuIChFTk9CVUZTKTsKKwkJfQorCQlp ZiAodmFwLT5pdl9vcG1vZGUgPT0gSUVFRTgwMjExX01fSE9TVEFQKSB7CisJCQkvKgorCQkJICog U3BhbSBEV0RTIHZhcCdzIHcvIG11bHRpY2FzdCB0cmFmZmljLgorCQkJICovCisJCQkvKiBYWFgg b25seSBpZiBkd2RzIGluIHVzZT8gKi8KKwkJCWllZWU4MDIxMV9kd2RzX21jYXN0KHZhcCwgbSk7 CisJCX0KKwl9CisjaWZkZWYgSUVFRTgwMjExX1NVUFBPUlRfTUVTSAorCWlmICh2YXAtPml2X29w bW9kZSAhPSBJRUVFODAyMTFfTV9NQlNTKSB7CisjZW5kaWYKKwkJbmkgPSBpZWVlODAyMTFfZmlu ZF90eG5vZGUodmFwLCBlaC0+ZXRoZXJfZGhvc3QpOworCQlpZiAobmkgPT0gTlVMTCkgeworCQkJ LyogTkI6IGllZWU4MDIxMV9maW5kX3R4bm9kZSBkb2VzIHN0YXQrbXNnICovCisJCQlpZnAtPmlm X29lcnJvcnMrKzsKKwkJCW1fZnJlZW0obSk7CisJCQkvKiBYWFggYmV0dGVyIHN0YXR1cz8gKi8K KwkJCXJldHVybiAoRU5PQlVGUyk7CisJCX0KKwkJaWYgKG5pLT5uaV9hc3NvY2lkID09IDAgJiYK KwkJICAgIChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9BU1NPQ0lEKSkgeworCQkJSUVF RTgwMjExX0RJU0NBUkRfTUFDKHZhcCwgSUVFRTgwMjExX01TR19PVVRQVVQsCisJCQkgICAgZWgt PmV0aGVyX2Rob3N0LCBOVUxMLAorCQkJICAgICJzdGEgbm90IGFzc29jaWF0ZWQgKHR5cGUgMHgl MDR4KSIsCisJCQkgICAgaHRvbnMoZWgtPmV0aGVyX3R5cGUpKTsKKwkJCXZhcC0+aXZfc3RhdHMu aXNfdHhfbm90YXNzb2MrKzsKKwkJCWlmcC0+aWZfb2Vycm9ycysrOworCQkJbV9mcmVlbShtKTsK KwkJCWllZWU4MDIxMV9mcmVlX25vZGUobmkpOworCQkJLyogWFhYIGJldHRlciBzdGF0dXM/ICov CisJCQlyZXR1cm4gKEVOT0JVRlMpOworCQl9CisjaWZkZWYgSUVFRTgwMjExX1NVUFBPUlRfTUVT SAorCX0gZWxzZSB7CisJCWlmICghSUVFRTgwMjExX0FERFJfRVEoZWgtPmV0aGVyX3Nob3N0LCB2 YXAtPml2X215YWRkcikpIHsKKwkJCS8qCisJCQkgKiBQcm94eSBzdGF0aW9uIG9ubHkgaWYgY29u ZmlndXJlZC4KKwkJCSAqLworCQkJaWYgKCFpZWVlODAyMTFfbWVzaF9pc3Byb3h5ZW5hKHZhcCkp IHsKKwkJCQlJRUVFODAyMTFfRElTQ0FSRF9NQUModmFwLAorCQkJCSAgICBJRUVFODAyMTFfTVNH X09VVFBVVCB8CisJCQkJICAgIElFRUU4MDIxMV9NU0dfTUVTSCwKKwkJCQkgICAgZWgtPmV0aGVy X2Rob3N0LCBOVUxMLAorCQkJCSAgICAiJXMiLCAicHJveHkgbm90IGVuYWJsZWQiKTsKKwkJCQl2 YXAtPml2X3N0YXRzLmlzX21lc2hfbm90cHJveHkrKzsKKwkJCQlpZnAtPmlmX29lcnJvcnMrKzsK KwkJCQltX2ZyZWVtKG0pOworCQkJCS8qIFhYWCBiZXR0ZXIgc3RhdHVzPyAqLworCQkJCXJldHVy biAoRU5PQlVGUyk7CisJCQl9CisJCQlJRUVFODAyMTFfRFBSSU5URih2YXAsIElFRUU4MDIxMV9N U0dfT1VUUFVULAorCQkJICAgICJmb3J3YXJkIGZyYW1lIGZyb20gRFMgU0EoJTZEKSwgREEoJTZE KVxuIiwKKwkJCSAgICBlaC0+ZXRoZXJfc2hvc3QsICI6IiwKKwkJCSAgICBlaC0+ZXRoZXJfZGhv c3QsICI6Iik7CisJCQlpZWVlODAyMTFfbWVzaF9wcm94eV9jaGVjayh2YXAsIGVoLT5ldGhlcl9z aG9zdCk7CisJCX0KKwkJbmkgPSBpZWVlODAyMTFfbWVzaF9kaXNjb3Zlcih2YXAsIGVoLT5ldGhl cl9kaG9zdCwgbSk7CisJCWlmIChuaSA9PSBOVUxMKSB7CisJCQkvKgorCQkJICogTkI6IGllZWU4 MDIxMV9tZXNoX2Rpc2NvdmVyIGhvbGRzL2Rpc3Bvc2VzCisJCQkgKiBmcmFtZSAoZS5nLiBxdWV1 ZWluZyBvbiBwYXRoIGRpc2NvdmVyeSkuCisJCQkgKi8KKwkJCWlmcC0+aWZfb2Vycm9ycysrOwor CQkJLyogWFhYIGJldHRlciBzdGF0dXM/ICovCisJCQlyZXR1cm4gKEVOT0JVRlMpOworCQl9CisJ fQorI2VuZGlmCisJaWYgKChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9QV1JfTUdUKSAm JgorCSAgICAobS0+bV9mbGFncyAmIE1fUFdSX1NBVikgPT0gMCkgeworCQkvKgorCQkgKiBTdGF0 aW9uIGluIHBvd2VyIHNhdmUgbW9kZTsgcGFzcyB0aGUgZnJhbWUKKwkJICogdG8gdGhlIDgwMi4x MSBsYXllciBhbmQgY29udGludWUuICBXZSdsbCBnZXQKKwkJICogdGhlIGZyYW1lIGJhY2sgd2hl biB0aGUgdGltZSBpcyByaWdodC4KKwkJICogWFhYIGxvc2UgV0RTIHZhcCBsaW5rYWdlPworCQkg Ki8KKwkJKHZvaWQpIGllZWU4MDIxMV9wd3JzYXZlKG5pLCBtKTsKKwkJaWVlZTgwMjExX2ZyZWVf bm9kZShuaSk7CisJCS8qIFhYWCBiZXR0ZXIgc3RhdHVzPyAqLworCQlyZXR1cm4gKEVOT0JVRlMp OworCX0KKwkvKiBjYWxjdWxhdGUgcHJpb3JpdHkgc28gZHJpdmVycyBjYW4gZmluZCB0aGUgdHgg cXVldWUgKi8KKwlpZiAoaWVlZTgwMjExX2NsYXNzaWZ5KG5pLCBtKSkgeworCQlJRUVFODAyMTFf RElTQ0FSRF9NQUModmFwLCBJRUVFODAyMTFfTVNHX09VVFBVVCwKKwkJICAgIGVoLT5ldGhlcl9k aG9zdCwgTlVMTCwKKwkJICAgICIlcyIsICJjbGFzc2lmaWNhdGlvbiBmYWlsdXJlIik7CisJCXZh cC0+aXZfc3RhdHMuaXNfdHhfY2xhc3NpZnkrKzsKKwkJaWZwLT5pZl9vZXJyb3JzKys7CisJCW1f ZnJlZW0obSk7CisJCWllZWU4MDIxMV9mcmVlX25vZGUobmkpOworCQkvKiBYWFggYmV0dGVyIHN0 YXR1cz8gKi8KKwkJcmV0dXJuIChFTk9CVUZTKTsKKwl9CisJLyoKKwkgKiBTdGFzaCB0aGUgbm9k ZSBwb2ludGVyLiAgTm90ZSB0aGF0IHdlIGRvIHRoaXMgYWZ0ZXIKKwkgKiBhbnkgY2FsbCB0byBp ZWVlODAyMTFfZHdkc19tY2FzdCBiZWNhdXNlIHRoYXQgY29kZQorCSAqIHVzZXMgYW55IGV4aXN0 aW5nIHZhbHVlIGZvciByY3ZpZiB0byBpZGVudGlmeSB0aGUKKwkgKiBpbnRlcmZhY2UgaXQgKG1p Z2h0IGhhdmUgYmVlbikgcmVjZWl2ZWQgb24uCisJICovCisJbS0+bV9wa3RoZHIucmN2aWYgPSAo dm9pZCAqKW5pOworCisJQlBGX01UQVAoaWZwLCBtKTsJCS8qIDgwMi4zIHR4ICovCisKKwkvKgor CSAqIENoZWNrIGlmIEEtTVBEVSB0eCBhZ2dyZWdhdGlvbiBpcyBzZXR1cCBvciBpZiB3ZQorCSAq IHNob3VsZCB0cnkgdG8gZW5hYmxlIGl0LiAgVGhlIHN0YSBtdXN0IGJlIGFzc29jaWF0ZWQKKwkg KiB3aXRoIEhUIGFuZCBBLU1QRFUgZW5hYmxlZCBmb3IgdXNlLiAgV2hlbiB0aGUgcG9saWN5CisJ ICogcm91dGluZSBkZWNpZGVzIHdlIHNob3VsZCBlbmFibGUgQS1NUERVIHdlIGlzc3VlIGFuCisJ ICogQUREQkEgcmVxdWVzdCBhbmQgd2FpdCBmb3IgYSByZXBseS4gIFRoZSBmcmFtZSBiZWluZwor CSAqIGVuY2Fwc3VsYXRlZCB3aWxsIGdvIG91dCB3L28gdXNpbmcgQS1NUERVLCBvciBwb3NzaWJs eQorCSAqIGl0IG1pZ2h0IGJlIGNvbGxlY3RlZCBieSB0aGUgZHJpdmVyIGFuZCBoZWxkL3JldHJh bnNtaXQuCisJICogVGhlIGRlZmF1bHQgaWNfYW1wZHVfZW5hYmxlIHJvdXRpbmUgaGFuZGxlcyBz dGFnZ2VyaW5nCisJICogQUREQkEgcmVxdWVzdHMgaW4gY2FzZSB0aGUgcmVjZWl2ZXIgTkFLJ3Mg dXMgb3Igd2UgYXJlCisJICogb3RoZXJ3aXNlIHVuYWJsZSB0byBlc3RhYmxpc2ggYSBCQSBzdHJl YW0uCisJICovCisJaWYgKChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9BTVBEVV9UWCkg JiYKKwkgICAgKHZhcC0+aXZfZmxhZ3NfaHQgJiBJRUVFODAyMTFfRkhUX0FNUERVX1RYKSAmJgor CSAgICAobS0+bV9mbGFncyAmIE1fRUFQT0wpID09IDApIHsKKwkJaW50IHRpZCA9IFdNRV9BQ19U T19USUQoTV9XTUVfR0VUQUMobSkpOworCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2FtcGR1ICp0YXAg PSAmbmktPm5pX3R4X2FtcGR1W3RpZF07CisKKwkJaWVlZTgwMjExX3R4YW1wZHVfY291bnRfcGFj a2V0KHRhcCk7CisJCWlmIChJRUVFODAyMTFfQU1QRFVfUlVOTklORyh0YXApKSB7CisJCQkvKgor CQkJICogT3BlcmF0aW9uYWwsIG1hcmsgZnJhbWUgZm9yIGFnZ3JlZ2F0aW9uLgorCQkJICoKKwkJ CSAqIFhYWCBkbyB0eCBhZ2dyZWdhdGlvbiBoZXJlCisJCQkgKi8KKwkJCW0tPm1fZmxhZ3MgfD0g TV9BTVBEVV9NUERVOworCQl9IGVsc2UgaWYgKCFJRUVFODAyMTFfQU1QRFVfUkVRVUVTVEVEKHRh cCkgJiYKKwkJICAgIGljLT5pY19hbXBkdV9lbmFibGUobmksIHRhcCkpIHsKKwkJCS8qCisJCQkg KiBOb3QgbmVnb3RpYXRlZCB5ZXQsIHJlcXVlc3Qgc2VydmljZS4KKwkJCSAqLworCQkJaWVlZTgw MjExX2FtcGR1X3JlcXVlc3QobmksIHRhcCk7CisJCQkvKiBYWFggaG9sZCBmcmFtZSBmb3IgcmVw bHk/ICovCisJCX0KKwl9CisjaWZkZWYgSUVFRTgwMjExX1NVUFBPUlRfU1VQRVJHCisJZWxzZSBp ZiAoSUVFRTgwMjExX0FUSF9DQVAodmFwLCBuaSwgSUVFRTgwMjExX05PREVfRkYpKSB7CisJCW0g PSBpZWVlODAyMTFfZmZfY2hlY2sobmksIG0pOworCQlpZiAobSA9PSBOVUxMKSB7CisJCQkvKiBO QjogYW55IG5pIHJlZiBoZWxkIG9uIHN0YWdlcSAqLworCQkJLyogWFhYIGJldHRlciBzdGF0dXM/ ICovCisJCQlyZXR1cm4gKEVOT0JVRlMpOworCQl9CisJfQorI2VuZGlmIC8qIElFRUU4MDIxMV9T VVBQT1JUX1NVUEVSRyAqLworCUlFRUU4MDIxMV9WQVBfVFhfTE9DSyh2YXApOworCWlmIChfX3By ZWRpY3RfdHJ1ZSgodmFwLT5pdl9jYXBzICYgSUVFRTgwMjExX0NfODAyM0VOQ0FQKSA9PSAwKSkg eworCQkvKgorCQkgKiBFbmNhcHN1bGF0ZSB0aGUgcGFja2V0IGluIHByZXAgZm9yIHRyYW5zbWlz c2lvbi4KKwkJICovCisJCW0gPSBpZWVlODAyMTFfZW5jYXAodmFwLCBuaSwgbSk7CisJCWlmICht ID09IE5VTEwpIHsKKwkJCS8qIE5COiBzdGF0K21zZyBoYW5kbGVkIGluIGllZWU4MDIxMV9lbmNh cCAqLworCQkJSUVFRTgwMjExX1ZBUF9UWF9VTkxPQ0sodmFwKTsKKwkJCWllZWU4MDIxMV9mcmVl X25vZGUobmkpOworCQkJLyogWFhYIGJldHRlciBzdGF0dXM/ICovCisJCQlyZXR1cm4gKEVOT0JV RlMpOworCQl9CisJfQorCWVycm9yID0gcGFyZW50LT5pZl90cmFuc21pdChwYXJlbnQsIG0pOwor CUlFRUU4MDIxMV9WQVBfVFhfVU5MT0NLKHZhcCk7CisJaWYgKGVycm9yICE9IDApIHsKKwkJLyog TkI6IElGUV9IQU5ET0ZGIHJlY2xhaW1zIG1idWYgKi8KKwkJaWVlZTgwMjExX2ZyZWVfbm9kZShu aSk7CisJfSBlbHNlIHsKKwkJaWZwLT5pZl9vcGFja2V0cysrOworCX0KKwlpYy0+aWNfbGFzdGRh dGEgPSB0aWNrczsKKworCXJldHVybiAoMCk7CisjdW5kZWYJSVNfRFdEUworfQorCisvKgogICog U3RhcnQgbWV0aG9kIGZvciB2YXAncy4gIEFsbCBwYWNrZXRzIGZyb20gdGhlIHN0YWNrIGNvbWUK ICAqIHRocm91Z2ggaGVyZS4gIFdlIGhhbmRsZSBjb21tb24gcHJvY2Vzc2luZyBvZiB0aGUgcGFj a2V0cwogICogYmVmb3JlIGRpc3BhdGNoaW5nIHRoZW0gdG8gdGhlIHVuZGVybHlpbmcgZGV2aWNl LgpAQCAtMTE3LDE2ICszNjMsMTAgQEAKIHZvaWQKIGllZWU4MDIxMV9zdGFydChzdHJ1Y3QgaWZu ZXQgKmlmcCkKIHsKLSNkZWZpbmUJSVNfRFdEUyh2YXApIFwKLQkodmFwLT5pdl9vcG1vZGUgPT0g SUVFRTgwMjExX01fV0RTICYmIFwKLQkgKHZhcC0+aXZfZmxhZ3NfZXh0ICYgSUVFRTgwMjExX0ZF WFRfV0RTTEVHQUNZKSA9PSAwKQogCXN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IGlmcC0+aWZf c29mdGM7CiAJc3RydWN0IGllZWU4MDIxMWNvbSAqaWMgPSB2YXAtPml2X2ljOwogCXN0cnVjdCBp Zm5ldCAqcGFyZW50ID0gaWMtPmljX2lmcDsKLQlzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pOwog CXN0cnVjdCBtYnVmICptOwotCXN0cnVjdCBldGhlcl9oZWFkZXIgKmVoOwotCWludCBlcnJvcjsK IAogCS8qIE5COiBwYXJlbnQgbXVzdCBiZSB1cCBhbmQgcnVubmluZyAqLwogCWlmICghSUZORVRf SVNfVVBfUlVOTklORyhwYXJlbnQpKSB7CkBAIC0xNjUsMjE4ICs0MDUsMTQgQEAKIAkJfQogCQlJ RUVFODAyMTFfVU5MT0NLKGljKTsKIAl9CisKIAlmb3IgKDs7KSB7CiAJCUlGUV9ERVFVRVVFKCZp ZnAtPmlmX3NuZCwgbSk7CiAJCWlmIChtID09IE5VTEwpCiAJCQlicmVhazsKLQkJLyoKLQkJICog U2FuaXRpemUgbWJ1ZiBmbGFncyBmb3IgbmV0ODAyMTEgdXNlLiAgV2UgY2Fubm90Ci0JCSAqIGNs ZWFyIE1fUFdSX1NBViBvciBNX01PUkVfREFUQSBiZWNhdXNlIHRoZXNlIG1heQotCQkgKiBiZSBz ZXQgZm9yIGZyYW1lcyB0aGF0IGFyZSByZS1zdWJtaXR0ZWQgZnJvbSB0aGUKLQkJICogcG93ZXIg c2F2ZSBxdWV1ZS4KLQkJICoKLQkJICogTkI6IFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBpZWVl ODAyMTFfY2xhc3NpZnkgYXMKLQkJICogICAgIGl0IG1hcmtzIEVBUE9MIGluIGZyYW1lcyB3aXRo IE1fRUFQT0wuCi0JCSAqLwotCQltLT5tX2ZsYWdzICY9IH4oTV84MDIxMV9UWCAtIE1fUFdSX1NB ViAtIE1fTU9SRV9EQVRBKTsKLQkJLyoKLQkJICogQ2FuY2VsIGFueSBiYWNrZ3JvdW5kIHNjYW4u Ci0JCSAqLwotCQlpZiAoaWMtPmljX2ZsYWdzICYgSUVFRTgwMjExX0ZfU0NBTikKLQkJCWllZWU4 MDIxMV9jYW5jZWxfYW55c2Nhbih2YXApOwotCQkvKiAKLQkJICogRmluZCB0aGUgbm9kZSBmb3Ig dGhlIGRlc3RpbmF0aW9uIHNvIHdlIGNhbiBkbwotCQkgKiB0aGluZ3MgbGlrZSBwb3dlciBzYXZl IGFuZCBmYXN0IGZyYW1lcyBhZ2dyZWdhdGlvbi4KLQkJICoKLQkJICogTkI6IHBhc3QgdGhpcyBw b2ludCB2YXJpb3VzIGNvZGUgYXNzdW1lcyB0aGUgZmlyc3QKLQkJICogICAgIG1idWYgaGFzIHRo ZSA4MDIuMyBoZWFkZXIgcHJlc2VudCAoYW5kIGNvbnRpZ3VvdXMpLgotCQkgKi8KLQkJbmkgPSBO VUxMOwotCQlpZiAobS0+bV9sZW4gPCBzaXplb2Yoc3RydWN0IGV0aGVyX2hlYWRlcikgJiYKLQkJ ICAgKG0gPSBtX3B1bGx1cChtLCBzaXplb2Yoc3RydWN0IGV0aGVyX2hlYWRlcikpKSA9PSBOVUxM KSB7Ci0JCQlJRUVFODAyMTFfRFBSSU5URih2YXAsIElFRUU4MDIxMV9NU0dfT1VUUFVULAotCQkJ ICAgICJkaXNjYXJkIGZyYW1lLCAlc1xuIiwgIm1fcHVsbHVwIGZhaWxlZCIpOwotCQkJdmFwLT5p dl9zdGF0cy5pc190eF9ub2J1ZisrOwkvKiBYWFggKi8KLQkJCWlmcC0+aWZfb2Vycm9ycysrOwot CQkJY29udGludWU7Ci0JCX0KLQkJZWggPSBtdG9kKG0sIHN0cnVjdCBldGhlcl9oZWFkZXIgKik7 Ci0JCWlmIChFVEhFUl9JU19NVUxUSUNBU1QoZWgtPmV0aGVyX2Rob3N0KSkgewotCQkJaWYgKElT X0RXRFModmFwKSkgewotCQkJCS8qCi0JCQkJICogT25seSB1bmljYXN0IGZyYW1lcyBmcm9tIHRo ZSBhYm92ZSBnbyBvdXQKLQkJCQkgKiBEV0RTIHZhcHM7IG11bHRpY2FzdCBmcmFtZXMgYXJlIGhh bmRsZWQgYnkKLQkJCQkgKiBkaXNwYXRjaGluZyB0aGUgZnJhbWUgYXMgaXQgY29tZXMgdGhyb3Vn aAotCQkJCSAqIHRoZSBBUCB2YXAgKHNlZSBiZWxvdykuCi0JCQkJICovCi0JCQkJSUVFRTgwMjEx X0RJU0NBUkRfTUFDKHZhcCwgSUVFRTgwMjExX01TR19XRFMsCi0JCQkJICAgIGVoLT5ldGhlcl9k aG9zdCwgIm1jYXN0IiwgIiVzIiwgIm9uIERXRFMiKTsKLQkJCQl2YXAtPml2X3N0YXRzLmlzX2R3 ZHNfbWNhc3QrKzsKLQkJCQltX2ZyZWVtKG0pOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYg KHZhcC0+aXZfb3Btb2RlID09IElFRUU4MDIxMV9NX0hPU1RBUCkgewotCQkJCS8qCi0JCQkJICog U3BhbSBEV0RTIHZhcCdzIHcvIG11bHRpY2FzdCB0cmFmZmljLgotCQkJCSAqLwotCQkJCS8qIFhY WCBvbmx5IGlmIGR3ZHMgaW4gdXNlPyAqLwotCQkJCWllZWU4MDIxMV9kd2RzX21jYXN0KHZhcCwg bSk7Ci0JCQl9Ci0JCX0KLSNpZmRlZiBJRUVFODAyMTFfU1VQUE9SVF9NRVNICi0JCWlmICh2YXAt Pml2X29wbW9kZSAhPSBJRUVFODAyMTFfTV9NQlNTKSB7Ci0jZW5kaWYKLQkJCW5pID0gaWVlZTgw MjExX2ZpbmRfdHhub2RlKHZhcCwgZWgtPmV0aGVyX2Rob3N0KTsKLQkJCWlmIChuaSA9PSBOVUxM KSB7Ci0JCQkJLyogTkI6IGllZWU4MDIxMV9maW5kX3R4bm9kZSBkb2VzIHN0YXQrbXNnICovCi0J CQkJaWZwLT5pZl9vZXJyb3JzKys7Ci0JCQkJbV9mcmVlbShtKTsKLQkJCQljb250aW51ZTsKLQkJ CX0KLQkJCWlmIChuaS0+bmlfYXNzb2NpZCA9PSAwICYmCi0JCQkgICAgKG5pLT5uaV9mbGFncyAm IElFRUU4MDIxMV9OT0RFX0FTU09DSUQpKSB7Ci0JCQkJSUVFRTgwMjExX0RJU0NBUkRfTUFDKHZh cCwgSUVFRTgwMjExX01TR19PVVRQVVQsCi0JCQkJICAgIGVoLT5ldGhlcl9kaG9zdCwgTlVMTCwK LQkJCQkgICAgInN0YSBub3QgYXNzb2NpYXRlZCAodHlwZSAweCUwNHgpIiwKLQkJCQkgICAgaHRv bnMoZWgtPmV0aGVyX3R5cGUpKTsKLQkJCQl2YXAtPml2X3N0YXRzLmlzX3R4X25vdGFzc29jKys7 Ci0JCQkJaWZwLT5pZl9vZXJyb3JzKys7Ci0JCQkJbV9mcmVlbShtKTsKLQkJCQlpZWVlODAyMTFf ZnJlZV9ub2RlKG5pKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLSNpZmRlZiBJRUVFODAyMTFfU1VQ UE9SVF9NRVNICi0JCX0gZWxzZSB7Ci0JCQlpZiAoIUlFRUU4MDIxMV9BRERSX0VRKGVoLT5ldGhl cl9zaG9zdCwgdmFwLT5pdl9teWFkZHIpKSB7Ci0JCQkJLyoKLQkJCQkgKiBQcm94eSBzdGF0aW9u IG9ubHkgaWYgY29uZmlndXJlZC4KLQkJCQkgKi8KLQkJCQlpZiAoIWllZWU4MDIxMV9tZXNoX2lz cHJveHllbmEodmFwKSkgewotCQkJCQlJRUVFODAyMTFfRElTQ0FSRF9NQUModmFwLAotCQkJCQkg ICAgSUVFRTgwMjExX01TR19PVVRQVVQgfAotCQkJCQkgICAgSUVFRTgwMjExX01TR19NRVNILAot CQkJCQkgICAgZWgtPmV0aGVyX2Rob3N0LCBOVUxMLAotCQkJCQkgICAgIiVzIiwgInByb3h5IG5v dCBlbmFibGVkIik7Ci0JCQkJCXZhcC0+aXZfc3RhdHMuaXNfbWVzaF9ub3Rwcm94eSsrOwotCQkJ CQlpZnAtPmlmX29lcnJvcnMrKzsKLQkJCQkJbV9mcmVlbShtKTsKLQkJCQkJY29udGludWU7Ci0J CQkJfQotCQkJCUlFRUU4MDIxMV9EUFJJTlRGKHZhcCwgSUVFRTgwMjExX01TR19PVVRQVVQsCi0J CQkJICAgICJmb3J3YXJkIGZyYW1lIGZyb20gRFMgU0EoJTZEKSwgREEoJTZEKVxuIiwKLQkJCQkg ICAgZWgtPmV0aGVyX3Nob3N0LCAiOiIsCi0JCQkJICAgIGVoLT5ldGhlcl9kaG9zdCwgIjoiKTsK LQkJCQlpZWVlODAyMTFfbWVzaF9wcm94eV9jaGVjayh2YXAsIGVoLT5ldGhlcl9zaG9zdCk7Ci0J CQl9Ci0JCQluaSA9IGllZWU4MDIxMV9tZXNoX2Rpc2NvdmVyKHZhcCwgZWgtPmV0aGVyX2Rob3N0 LCBtKTsKLQkJCWlmIChuaSA9PSBOVUxMKSB7Ci0JCQkJLyoKLQkJCQkgKiBOQjogaWVlZTgwMjEx X21lc2hfZGlzY292ZXIgaG9sZHMvZGlzcG9zZXMKLQkJCQkgKiBmcmFtZSAoZS5nLiBxdWV1ZWlu ZyBvbiBwYXRoIGRpc2NvdmVyeSkuCi0JCQkJICovCi0JCQkJaWZwLT5pZl9vZXJyb3JzKys7Ci0J CQkJY29udGludWU7Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCQlpZiAoKG5pLT5uaV9mbGFncyAmIElF RUU4MDIxMV9OT0RFX1BXUl9NR1QpICYmCi0JCSAgICAobS0+bV9mbGFncyAmIE1fUFdSX1NBVikg PT0gMCkgewotCQkJLyoKLQkJCSAqIFN0YXRpb24gaW4gcG93ZXIgc2F2ZSBtb2RlOyBwYXNzIHRo ZSBmcmFtZQotCQkJICogdG8gdGhlIDgwMi4xMSBsYXllciBhbmQgY29udGludWUuICBXZSdsbCBn ZXQKLQkJCSAqIHRoZSBmcmFtZSBiYWNrIHdoZW4gdGhlIHRpbWUgaXMgcmlnaHQuCi0JCQkgKiBY WFggbG9zZSBXRFMgdmFwIGxpbmthZ2U/Ci0JCQkgKi8KLQkJCSh2b2lkKSBpZWVlODAyMTFfcHdy c2F2ZShuaSwgbSk7Ci0JCQlpZWVlODAyMTFfZnJlZV9ub2RlKG5pKTsKLQkJCWNvbnRpbnVlOwot CQl9Ci0JCS8qIGNhbGN1bGF0ZSBwcmlvcml0eSBzbyBkcml2ZXJzIGNhbiBmaW5kIHRoZSB0eCBx dWV1ZSAqLwotCQlpZiAoaWVlZTgwMjExX2NsYXNzaWZ5KG5pLCBtKSkgewotCQkJSUVFRTgwMjEx X0RJU0NBUkRfTUFDKHZhcCwgSUVFRTgwMjExX01TR19PVVRQVVQsCi0JCQkgICAgZWgtPmV0aGVy X2Rob3N0LCBOVUxMLAotCQkJICAgICIlcyIsICJjbGFzc2lmaWNhdGlvbiBmYWlsdXJlIik7Ci0J CQl2YXAtPml2X3N0YXRzLmlzX3R4X2NsYXNzaWZ5Kys7Ci0JCQlpZnAtPmlmX29lcnJvcnMrKzsK LQkJCW1fZnJlZW0obSk7Ci0JCQlpZWVlODAyMTFfZnJlZV9ub2RlKG5pKTsKLQkJCWNvbnRpbnVl OwotCQl9Ci0JCS8qCi0JCSAqIFN0YXNoIHRoZSBub2RlIHBvaW50ZXIuICBOb3RlIHRoYXQgd2Ug ZG8gdGhpcyBhZnRlcgotCQkgKiBhbnkgY2FsbCB0byBpZWVlODAyMTFfZHdkc19tY2FzdCBiZWNh dXNlIHRoYXQgY29kZQotCQkgKiB1c2VzIGFueSBleGlzdGluZyB2YWx1ZSBmb3IgcmN2aWYgdG8g aWRlbnRpZnkgdGhlCi0JCSAqIGludGVyZmFjZSBpdCAobWlnaHQgaGF2ZSBiZWVuKSByZWNlaXZl ZCBvbi4KLQkJICovCi0JCW0tPm1fcGt0aGRyLnJjdmlmID0gKHZvaWQgKiluaTsKLQotCQlCUEZf TVRBUChpZnAsIG0pOwkJLyogODAyLjMgdHggKi8KLSAKLQkJLyoKLQkJICogQ2hlY2sgaWYgQS1N UERVIHR4IGFnZ3JlZ2F0aW9uIGlzIHNldHVwIG9yIGlmIHdlCi0JCSAqIHNob3VsZCB0cnkgdG8g ZW5hYmxlIGl0LiAgVGhlIHN0YSBtdXN0IGJlIGFzc29jaWF0ZWQKLQkJICogd2l0aCBIVCBhbmQg QS1NUERVIGVuYWJsZWQgZm9yIHVzZS4gIFdoZW4gdGhlIHBvbGljeQotCQkgKiByb3V0aW5lIGRl Y2lkZXMgd2Ugc2hvdWxkIGVuYWJsZSBBLU1QRFUgd2UgaXNzdWUgYW4KLQkJICogQUREQkEgcmVx dWVzdCBhbmQgd2FpdCBmb3IgYSByZXBseS4gIFRoZSBmcmFtZSBiZWluZwotCQkgKiBlbmNhcHN1 bGF0ZWQgd2lsbCBnbyBvdXQgdy9vIHVzaW5nIEEtTVBEVSwgb3IgcG9zc2libHkKLQkJICogaXQg bWlnaHQgYmUgY29sbGVjdGVkIGJ5IHRoZSBkcml2ZXIgYW5kIGhlbGQvcmV0cmFuc21pdC4KLQkJ ICogVGhlIGRlZmF1bHQgaWNfYW1wZHVfZW5hYmxlIHJvdXRpbmUgaGFuZGxlcyBzdGFnZ2VyaW5n Ci0JCSAqIEFEREJBIHJlcXVlc3RzIGluIGNhc2UgdGhlIHJlY2VpdmVyIE5BSydzIHVzIG9yIHdl IGFyZQotCQkgKiBvdGhlcndpc2UgdW5hYmxlIHRvIGVzdGFibGlzaCBhIEJBIHN0cmVhbS4KLQkJ ICovCi0JCWlmICgobmktPm5pX2ZsYWdzICYgSUVFRTgwMjExX05PREVfQU1QRFVfVFgpICYmCi0J CSAgICAodmFwLT5pdl9mbGFnc19odCAmIElFRUU4MDIxMV9GSFRfQU1QRFVfVFgpICYmCi0JCSAg ICAobS0+bV9mbGFncyAmIE1fRUFQT0wpID09IDApIHsKLQkJCWludCB0aWQgPSBXTUVfQUNfVE9f VElEKE1fV01FX0dFVEFDKG0pKTsKLQkJCXN0cnVjdCBpZWVlODAyMTFfdHhfYW1wZHUgKnRhcCA9 ICZuaS0+bmlfdHhfYW1wZHVbdGlkXTsKLQotCQkJaWVlZTgwMjExX3R4YW1wZHVfY291bnRfcGFj a2V0KHRhcCk7Ci0JCQlpZiAoSUVFRTgwMjExX0FNUERVX1JVTk5JTkcodGFwKSkgewotCQkJCS8q Ci0JCQkJICogT3BlcmF0aW9uYWwsIG1hcmsgZnJhbWUgZm9yIGFnZ3JlZ2F0aW9uLgotCQkJCSAq Ci0JCQkJICogWFhYIGRvIHR4IGFnZ3JlZ2F0aW9uIGhlcmUKLQkJCQkgKi8KLQkJCQltLT5tX2Zs YWdzIHw9IE1fQU1QRFVfTVBEVTsKLQkJCX0gZWxzZSBpZiAoIUlFRUU4MDIxMV9BTVBEVV9SRVFV RVNURUQodGFwKSAmJgotCQkJICAgIGljLT5pY19hbXBkdV9lbmFibGUobmksIHRhcCkpIHsKLQkJ CQkvKgotCQkJCSAqIE5vdCBuZWdvdGlhdGVkIHlldCwgcmVxdWVzdCBzZXJ2aWNlLgotCQkJCSAq LwotCQkJCWllZWU4MDIxMV9hbXBkdV9yZXF1ZXN0KG5pLCB0YXApOwotCQkJCS8qIFhYWCBob2xk IGZyYW1lIGZvciByZXBseT8gKi8KLQkJCX0KLQkJfQotI2lmZGVmIElFRUU4MDIxMV9TVVBQT1JU X1NVUEVSRwotCQllbHNlIGlmIChJRUVFODAyMTFfQVRIX0NBUCh2YXAsIG5pLCBJRUVFODAyMTFf Tk9ERV9GRikpIHsKLQkJCW0gPSBpZWVlODAyMTFfZmZfY2hlY2sobmksIG0pOwotCQkJaWYgKG0g PT0gTlVMTCkgewotCQkJCS8qIE5COiBhbnkgbmkgcmVmIGhlbGQgb24gc3RhZ2VxICovCi0JCQkJ Y29udGludWU7Ci0JCQl9Ci0JCX0KLSNlbmRpZiAvKiBJRUVFODAyMTFfU1VQUE9SVF9TVVBFUkcg Ki8KLQkJaWYgKF9fcHJlZGljdF90cnVlKCh2YXAtPml2X2NhcHMgJiBJRUVFODAyMTFfQ184MDIz RU5DQVApID09IDApKSB7Ci0JCQkvKgotCQkJICogRW5jYXBzdWxhdGUgdGhlIHBhY2tldCBpbiBw cmVwIGZvciB0cmFuc21pc3Npb24uCi0JCQkgKi8KLQkJCW0gPSBpZWVlODAyMTFfZW5jYXAodmFw LCBuaSwgbSk7Ci0JCQlpZiAobSA9PSBOVUxMKSB7Ci0JCQkJLyogTkI6IHN0YXQrbXNnIGhhbmRs ZWQgaW4gaWVlZTgwMjExX2VuY2FwICovCi0JCQkJaWVlZTgwMjExX2ZyZWVfbm9kZShuaSk7Ci0J CQkJY29udGludWU7Ci0JCQl9Ci0JCX0KLQkJZXJyb3IgPSBwYXJlbnQtPmlmX3RyYW5zbWl0KHBh cmVudCwgbSk7Ci0JCWlmIChlcnJvciAhPSAwKSB7Ci0JCQkvKiBOQjogSUZRX0hBTkRPRkYgcmVj bGFpbXMgbWJ1ZiAqLwotCQkJaWVlZTgwMjExX2ZyZWVfbm9kZShuaSk7Ci0JCX0gZWxzZSB7Ci0J CQlpZnAtPmlmX29wYWNrZXRzKys7Ci0JCX0KLQkJaWMtPmljX2xhc3RkYXRhID0gdGlja3M7CisJ CSh2b2lkKSBpZWVlODAyMTFfc3RhcnRfcGt0KHZhcCwgbSk7CisJCS8qIG1idWYgaXMgY29uc3Vt ZWQgaGVyZSAqLwogCX0KLSN1bmRlZiBJU19EV0RTCiB9CiAKIC8qCkBAIC0zOTMsNiArNDI5LDcg QEAKIAlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXA7CiAJc3RydWN0IGllZWU4MDIxMV9mcmFtZSAq d2g7CiAJaW50IGVycm9yOworCWludCByZXQ7CiAKIAlJRlFfTE9DSygmaWZwLT5pZl9zbmQpOwog CWlmIChpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfT0FDVElWRSkgewpAQCAtNDkwLDE0ICs1 MjcsMjQgQEAKIAlJRUVFODAyMTFfTk9ERV9TVEFUX0FERChuaSwgdHhfYnl0ZXMsIG0tPm1fcGt0 aGRyLmxlbik7CiAKIAkvKgorCSAqIFNlcmlhbGlzZSB0aGUgb3JkZXIgb2YgcmF3IGZyYW1lcyB3 aXRoIHRoZSByZXN0IG9mCisJICogdGhlIG5vcm1hbCBzdGFjaywgc28gdGhpbmdzIHN1Y2ggYXMg c2VxdWVuY2UgYW5kCisJICogY3J5cHRvIHN0YXRlIGFzc2lnbm1lbnQgYXJlIGRvbmUgaW4gdGhl IHNhbWUgb3JkZXIKKwkgKiBhcyBhcmUgcGFzc2VkIHRvIHRoZSBkcml2ZXIgKGVpdGhlciBieSBp Zl90cmFuc21pdCgpCisJICogb3IgaWNfcmF3X3htaXQoKSkuCisJICovCisJSUVFRTgwMjExX1ZB UF9UWF9MT0NLKHZhcCk7CisJLyoKIAkgKiBOQjogRExUX0lFRUU4MDJfMTFfUkFESU8gaWRlbnRp ZmllcyB0aGUgcGFyYW1ldGVycyBhcmUKIAkgKiBwcmVzZW50IGJ5IHNldHRpbmcgdGhlIHNhX2xl biBmaWVsZCBvZiB0aGUgc29ja2FkZHIgKHllcywKIAkgKiB0aGlzIGlzIGEgaGFjaykuCiAJICog TkI6IHdlIGFzc3VtZSBzYV9kYXRhIGlzIHN1aXRhYmx5IGFsaWduZWQgdG8gY2FzdC4KIAkgKi8K LQlyZXR1cm4gdmFwLT5pdl9pYy0+aWNfcmF3X3htaXQobmksIG0sCisJcmV0ID0gdmFwLT5pdl9p Yy0+aWNfcmF3X3htaXQobmksIG0sCiAJICAgIChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2JwZl9w YXJhbXMgKikoZHN0LT5zYV9sZW4gPwogCQlkc3QtPnNhX2RhdGEgOiBOVUxMKSk7CisJSUVFRTgw MjExX1ZBUF9UWF9VTkxPQ0sodmFwKTsKKwlyZXR1cm4gKHJldCk7CiBiYWQ6CiAJaWYgKG0gIT0g TlVMTCkKIAkJbV9mcmVlbShtKTsKQEAgLTYyMSw2ICs2NjgsNyBAQAogCXN0cnVjdCBpZWVlODAy MTF2YXAgKnZhcCA9IG5pLT5uaV92YXA7CiAJc3RydWN0IGllZWU4MDIxMWNvbSAqaWMgPSBuaS0+ bmlfaWM7CiAJc3RydWN0IGllZWU4MDIxMV9mcmFtZSAqd2g7CisJaW50IHJldDsKIAogCUtBU1NF UlQobmkgIT0gTlVMTCwgKCJudWxsIG5vZGUiKSk7CiAKQEAgLTY3MCw3ICs3MTgsMTEgQEAKICNl bmRpZgogCUlFRUU4MDIxMV9OT0RFX1NUQVQobmksIHR4X21nbXQpOwogCi0JcmV0dXJuIGljLT5p Y19yYXdfeG1pdChuaSwgbSwgcGFyYW1zKTsKKwlJRUVFODAyMTFfVkFQX1RYX0xPQ0sodmFwKTsK KwlyZXQgPSBpYy0+aWNfcmF3X3htaXQobmksIG0sIHBhcmFtcyk7CisJSUVFRTgwMjExX1ZBUF9U WF9VTkxPQ0sodmFwKTsKKworCXJldHVybiAocmV0KTsKIH0KIAogLyoKQEAgLTY5NCw2ICs3NDYs NyBAQAogCXN0cnVjdCBpZWVlODAyMTFfZnJhbWUgKndoOwogCWludCBoZHJsZW47CiAJdWludDhf dCAqZnJtOworCWludCByZXQ7CiAKIAlpZiAodmFwLT5pdl9zdGF0ZSA9PSBJRUVFODAyMTFfU19D QUMpIHsKIAkJSUVFRTgwMjExX05PVEUodmFwLCBJRUVFODAyMTFfTVNHX09VVFBVVCB8IElFRUU4 MDIxMV9NU0dfRE9USCwKQEAgLTc3MSw3ICs4MjQsMTAgQEAKIAkgICAgaWVlZTgwMjExX2NoYW4y aWVlZShpYywgaWMtPmljX2N1cmNoYW4pLAogCSAgICB3aC0+aV9mY1sxXSAmIElFRUU4MDIxMV9G QzFfUFdSX01HVCA/ICJlbmEiIDogImRpcyIpOwogCi0JcmV0dXJuIGljLT5pY19yYXdfeG1pdChu aSwgbSwgTlVMTCk7CisJSUVFRTgwMjExX1ZBUF9UWF9MT0NLKHZhcCk7CisJcmV0ID0gaWMtPmlj X3Jhd194bWl0KG5pLCBtLCBOVUxMKTsKKwlJRUVFODAyMTFfVkFQX1RYX1VOTE9DSyh2YXApOwor CXJldHVybiAocmV0KTsKIH0KIAogLyogCkBAIC0xMDM1LDYgKzEwOTEsOCBAQAogCWludCBtZXNo aGRyc2l6ZSwgbWVzaGFlOwogCXVpbnQ4X3QgKnFvczsKIAorCUlFRUU4MDIxMV9WQVBfVFhfTE9D S19BU1NFUlQodmFwKTsKKwogCS8qCiAJICogQ29weSBleGlzdGluZyBFdGhlcm5ldCBoZWFkZXIg dG8gYSBzYWZlIHBsYWNlLiAgVGhlCiAJICogcmVzdCBvZiB0aGUgY29kZSBhc3N1bWVzIGl0J3Mg b2sgdG8gc3RyaXAgaXQgd2hlbgpAQCAtMTgwNiw2ICsxODY0LDcgQEAKIAljb25zdCBzdHJ1Y3Qg aWVlZTgwMjExX3JhdGVzZXQgKnJzOwogCXN0cnVjdCBtYnVmICptOwogCXVpbnQ4X3QgKmZybTsK KwlpbnQgcmV0OwogCiAJaWYgKHZhcC0+aXZfc3RhdGUgPT0gSUVFRTgwMjExX1NfQ0FDKSB7CiAJ CUlFRUU4MDIxMV9OT1RFKHZhcCwgSUVFRTgwMjExX01TR19PVVRQVVQsIG5pLApAQCAtMTkwNSw3 ICsxOTY0LDEwIEBACiAJfSBlbHNlCiAJCXBhcmFtcy5pYnBfdHJ5MCA9IHRwLT5tYXhyZXRyeTsK IAlwYXJhbXMuaWJwX3Bvd2VyID0gbmktPm5pX3R4cG93ZXI7Ci0JcmV0dXJuIGljLT5pY19yYXdf eG1pdChuaSwgbSwgJnBhcmFtcyk7CisJSUVFRTgwMjExX1ZBUF9UWF9MT0NLKHZhcCk7CisJcmV0 ID0gaWMtPmljX3Jhd194bWl0KG5pLCBtLCAmcGFyYW1zKTsKKwlJRUVFODAyMTFfVkFQX1RYX1VO TE9DSyh2YXApOworCXJldHVybiAocmV0KTsKIH0KIAogLyoKQEAgLTI0NzQsNiArMjUzNiw3IEBA CiAJc3RydWN0IGllZWU4MDIxMWNvbSAqaWMgPSB2YXAtPml2X2ljOwogCXN0cnVjdCBpZWVlODAy MTFfZnJhbWUgKndoOwogCXN0cnVjdCBtYnVmICptOworCWludCByZXQ7CiAKIAlpZiAodmFwLT5p dl9zdGF0ZSA9PSBJRUVFODAyMTFfU19DQUMpIHsKIAkJSUVFRTgwMjExX05PVEUodmFwLCBJRUVF ODAyMTFfTVNHX09VVFBVVCwgYnNzLApAQCAtMjUxNyw3ICsyNTgwLDEwIEBACiAJICAgIGxlZ2Fj eSA/ICIgPGxlZ2FjeT4iIDogIiIpOwogCUlFRUU4MDIxMV9OT0RFX1NUQVQoYnNzLCB0eF9tZ210 KTsKIAotCXJldHVybiBpYy0+aWNfcmF3X3htaXQoYnNzLCBtLCBOVUxMKTsKKwlJRUVFODAyMTFf VkFQX1RYX0xPQ0sodmFwKTsKKwlyZXQgPSBpYy0+aWNfcmF3X3htaXQoYnNzLCBtLCBOVUxMKTsK KwlJRUVFODAyMTFfVkFQX1RYX1VOTE9DSyh2YXApOworCXJldHVybiAocmV0KTsKIH0KIAogLyoK SW5kZXg6IHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfc3VwZXJnLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lz L25ldDgwMjExL2llZWU4MDIxMV9zdXBlcmcuYwkocmV2aXNpb24gMjQ2ODE4KQorKysgc3lzL25l dDgwMjExL2llZWU4MDIxMV9zdXBlcmcuYwkod29ya2luZyBjb3B5KQpAQCAtMzgyLDYgKzM4Miwx MiBAQAogCXN0cnVjdCBtYnVmICptOwogCWludCBwYWQ7CiAKKwkvKgorCSAqIFRoaXMgaXMgY2Fs bGVkIGZyb20gaWVlZTgwMjExX2VuY2FwKCkgLSBzbyB0aGUgVFggbG9jaworCSAqIGlzIHJlcXVp cmVkLgorCSAqLworCUlFRUU4MDIxMV9WQVBfVFhfTE9DS19BU1NFUlQodmFwKTsKKwogCW0yID0g bTEtPm1fbmV4dHBrdDsKIAlpZiAobTIgPT0gTlVMTCkgewogCQlJRUVFODAyMTFfRFBSSU5URih2 YXAsIElFRUU4MDIxMV9NU0dfU1VQRVJHLApAQCAtNTAzLDIxICs1MDksMjcgQEAKIAlzdHJ1Y3Qg aWVlZTgwMjExdmFwICp2YXAgPSBuaS0+bmlfdmFwOwogCWludCBlcnJvcjsKIAorCUlFRUU4MDIx MV9WQVBfVFhfVU5MT0NLX0FTU0VSVCh2YXApOworCiAJLyogZW5jYXAgYW5kIHhtaXQgKi8KKwlJ RUVFODAyMTFfVkFQX1RYX0xPQ0sodmFwKTsKIAltID0gaWVlZTgwMjExX2VuY2FwKHZhcCwgbmks IG0pOwogCWlmIChtICE9IE5VTEwpIHsKIAkJc3RydWN0IGlmbmV0ICppZnAgPSB2YXAtPml2X2lm cDsKIAkJc3RydWN0IGlmbmV0ICpwYXJlbnQgPSBuaS0+bmlfaWMtPmljX2lmcDsKIAogCQllcnJv ciA9IHBhcmVudC0+aWZfdHJhbnNtaXQocGFyZW50LCBtKTsKKwkJSUVFRTgwMjExX1ZBUF9UWF9V TkxPQ0sodmFwKTsKIAkJaWYgKGVycm9yICE9IDApIHsKIAkJCS8qIE5COiBJRlFfSEFORE9GRiBy ZWNsYWltcyBtYnVmICovCiAJCQlpZWVlODAyMTFfZnJlZV9ub2RlKG5pKTsKIAkJfSBlbHNlIHsK IAkJCWlmcC0+aWZfb3BhY2tldHMrKzsKIAkJfQotCX0gZWxzZQorCX0gZWxzZSB7CisJCUlFRUU4 MDIxMV9WQVBfVFhfVU5MT0NLKHZhcCk7CiAJCWllZWU4MDIxMV9mcmVlX25vZGUobmkpOworCX0K IH0KIAogLyoKQEAgLTY3OSw2ICs2OTEsOCBAQAogCXN0cnVjdCBtYnVmICptc3RhZ2VkOwogCXVp bnQzMl90IHR4dGltZSwgbGltaXQ7CiAKKwlJRUVFODAyMTFfVkFQX1RYX1VOTE9DS19BU1NFUlQo dmFwKTsKKwogCS8qCiAJICogQ2hlY2sgaWYgdGhlIHN1cHBsaWVkIGZyYW1lIGNhbiBiZSBhZ2dy ZWdhdGVkLgogCSAqCkluZGV4OiBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX2ZyZWVic2QuaAo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX2ZyZWVic2QuaAkocmV2aXNpb24gMjQ2 ODE4KQorKysgc3lzL25ldDgwMjExL2llZWU4MDIxMV9mcmVlYnNkLmgJKHdvcmtpbmcgY29weSkK QEAgLTE2MCw2ICsxNjAsMzIgQEAKICNkZWZpbmUJSUVFRTgwMjExX1NDQU5fVEFCTEVfVU5MT0NL KF9zdCkJbXR4X3VubG9jaygmKF9zdCktPnN0X2xvY2spCiAKIC8qCisgKiBWQVAgdHJhbnNtaXQg c3RhdGUgbG9jayBkZWZpbml0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisJY2hhcgkJbmFt ZVsxNl07CQkvKiBlLmcuICJ3bGFuMF90eF9sb2NrIiAqLworCXN0cnVjdCBtdHgJbXR4OworfSBp ZWVlODAyMTFfdmFwX3R4X2xvY2tfdDsKKyNkZWZpbmUJSUVFRTgwMjExX1ZBUF9UWF9MT0NLX0lO SVQoX3ZhcCwgX25hbWUpIGRvIHsJCQlcCisJaWVlZTgwMjExX3ZhcF90eF9sb2NrX3QgKnR4bCA9 ICYoX3ZhcCktPml2X3R4X2xvY2s7CQlcCisJc25wcmludGYodHhsLT5uYW1lLCBzaXplb2YodHhs LT5uYW1lKSwgIiVzX3R4X2xvY2siLCBfbmFtZSk7CVwKKwltdHhfaW5pdCgmdHhsLT5tdHgsIHR4 bC0+bmFtZSwgTlVMTCwgTVRYX0RFRik7CQkJXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUJSUVFRTgw MjExX1ZBUF9UWF9MT0NLX09CSihfdHhsKQkoJihfdHhsKS0+aXZfdHhfbG9jay5tdHgpCisjZGVm aW5lCUlFRUU4MDIxMV9WQVBfVFhfTE9DS19ERVNUUk9ZKF90eGwpIFwKKwltdHhfZGVzdHJveShJ RUVFODAyMTFfVkFQX1RYX0xPQ0tfT0JKKF90eGwpKQorI2RlZmluZQlJRUVFODAyMTFfVkFQX1RY X0xPQ0soX3R4bCkgXAorCW10eF9sb2NrKElFRUU4MDIxMV9WQVBfVFhfTE9DS19PQkooX3R4bCkp CisjZGVmaW5lCUlFRUU4MDIxMV9WQVBfVFhfSVNfTE9DS0VEKF90eGwpIFwKKwltdHhfb3duZWQo SUVFRTgwMjExX1ZBUF9UWF9MT0NLX09CSihfdHhsKSkKKyNkZWZpbmUJSUVFRTgwMjExX1ZBUF9U WF9VTkxPQ0soX3R4bCkgXAorCW10eF91bmxvY2soSUVFRTgwMjExX1ZBUF9UWF9MT0NLX09CSihf dHhsKSkKKyNkZWZpbmUJSUVFRTgwMjExX1ZBUF9UWF9MT0NLX0FTU0VSVChfdHhsKQlcCisJbXR4 X2Fzc2VydChJRUVFODAyMTFfVkFQX1RYX0xPQ0tfT0JKKF90eGwpLCBNQV9PV05FRCkKKyNkZWZp bmUJSUVFRTgwMjExX1ZBUF9UWF9VTkxPQ0tfQVNTRVJUKF90eGwpCVwKKwltdHhfYXNzZXJ0KElF RUU4MDIxMV9WQVBfVFhfTE9DS19PQkooX3R4bCksIE1BX05PVE9XTkVEKQorCisvKgogICogTm9k ZSByZWZlcmVuY2UgY291bnRpbmcgZGVmaW5pdGlvbnMuCiAgKgogICogaWVlZTgwMjExX25vZGVf aW5pdHJlZglpbml0aWFsaXplIHRoZSByZWZlcmVuY2UgY291bnQgdG8gMQpJbmRleDogc3lzL25l dDgwMjExL2llZWU4MDIxMV9wb3dlci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9uZXQ4MDIxMS9pZWVl ODAyMTFfcG93ZXIuYwkocmV2aXNpb24gMjQ2ODE4KQorKysgc3lzL25ldDgwMjExL2llZWU4MDIx MV9wb3dlci5jCSh3b3JraW5nIGNvcHkpCkBAIC00MTgsMTAgKzQxOCwxMyBAQAogCXN0cnVjdCBp Zm5ldCAqcGFyZW50LCAqaWZwOwogCXN0cnVjdCBtYnVmICpwYXJlbnRfcSA9IE5VTEwsICppZnBf cSA9IE5VTEw7CiAJc3RydWN0IG1idWYgKm07CisJaW50IHJldDsKIAogCUlFRUU4MDIxMV9OT1RF KHZhcCwgSUVFRTgwMjExX01TR19QT1dFUiwgbmksCiAJICAgICJmbHVzaCBwcyBxdWV1ZSwgJXUg cGFja2V0cyBxdWV1ZWQiLCBwc3EtPnBzcV9sZW4pOwogCisJSUVFRTgwMjExX1ZBUF9UWF9VTkxP Q0tfQVNTRVJUKHZhcCk7CisKIAlJRUVFODAyMTFfUFNRX0xPQ0socHNxKTsKIAlxaGVhZCA9ICZw c3EtPnBzcV9oZWFkWzBdOwkvKiA4MDIuMTEgZnJhbWVzICovCiAJaWYgKHFoZWFkLT5oZWFkICE9 IE5VTEwpIHsKQEAgLTQ2Myw3ICs0NjYsMTAgQEAKIAkJCSAqIEZvciBlbmNhcGVkIGZyYW1lcywg d2UgbmVlZCB0byBmcmVlIHRoZSBub2RlCiAJCQkgKiByZWZlcmVuY2UgdXBvbiBmYWlsdXJlLgog CQkJICovCi0JCQlpZiAocGFyZW50LT5pZl90cmFuc21pdChwYXJlbnQsIG0pICE9IDApCisJCQlJ RUVFODAyMTFfVkFQX1RYX0xPQ0sodmFwKTsKKwkJCXJldCA9IHBhcmVudC0+aWZfdHJhbnNtaXQo cGFyZW50LCBtKTsKKwkJCUlFRUU4MDIxMV9WQVBfVFhfVU5MT0NLKHZhcCk7CisJCQlpZiAocmV0 ICE9IDApCiAJCQkJaWVlZTgwMjExX2ZyZWVfbm9kZShuaSk7CiAJCX0KIAl9CkluZGV4OiBzeXMv bmV0ODAyMTEvaWVlZTgwMjExX3Zhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9uZXQ4MDIxMS9pZWVl ODAyMTFfdmFyLmgJKHJldmlzaW9uIDI0NjgxOCkKKysrIHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFf dmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0Miw2ICszNDIsOCBAQAogCXN0cnVjdCBzeXNjdGxf Y3R4X2xpc3QJKml2X3N5c2N0bDsJLyogZHluYW1pYyBzeXNjdGwgY29udGV4dCAqLwogCXN0cnVj dCBzeXNjdGxfb2lkCSppdl9vaWQ7CS8qIG5ldC53bGFuLlggc3lzY3RsIG9pZCAqLwogCisJaWVl ZTgwMjExX3ZhcF90eF9sb2NrX3QJaXZfdHhfbG9jazsJLyogcGVyLVZBUCBUWCBzZXJpYWxpc2F0 aW9uICovCisKIAlUQUlMUV9FTlRSWShpZWVlODAyMTF2YXApIGl2X25leHQ7CS8qIGxpc3Qgb2Yg dmFwIGluc3RhbmNlcyAqLwogCXN0cnVjdCBpZWVlODAyMTFjb20JKml2X2ljOwkJLyogYmFjayBw dHIgdG8gY29tbW9uIHN0YXRlICovCiAJdWludDMyX3QJCWl2X2RlYnVnOwkvKiBkZWJ1ZyBtc2cg ZmxhZ3MgKi8KQEAgLTQ5Nyw2ICs0OTksNyBAQAogCS8qIDgwMi4zIG91dHB1dCBtZXRob2QgZm9y IHJhdyBmcmFtZSB4bWl0ICovCiAJaW50CQkJKCppdl9vdXRwdXQpKHN0cnVjdCBpZm5ldCAqLCBz dHJ1Y3QgbWJ1ZiAqLAogCQkJCSAgICBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHJvdXRlICop OworCiAJdWludDY0X3QJCWl2X3NwYXJlWzZdOwogfTsKIE1BTExPQ19ERUNMQVJFKE1fODAyMTFf VkFQKTsKSW5kZXg6IHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfaG9zdGFwLmMKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gc3lzL25ldDgwMjExL2llZWU4MDIxMV9ob3N0YXAuYwkocmV2aXNpb24gMjQ2ODE4KQorKysg c3lzL25ldDgwMjExL2llZWU4MDIxMV9ob3N0YXAuYwkod29ya2luZyBjb3B5KQpAQCAtMzU0LDYg KzM1NCw4IEBACiAJc3RydWN0IGV0aGVyX2hlYWRlciAqZWggPSBtdG9kKG0sIHN0cnVjdCBldGhl cl9oZWFkZXIgKik7CiAJc3RydWN0IGlmbmV0ICppZnAgPSB2YXAtPml2X2lmcDsKIAorCUlFRUU4 MDIxMV9WQVBfVFhfVU5MT0NLX0FTU0VSVCh2YXApOworCiAJLyogY2xlYXIgZHJpdmVyL25ldDgw MjExIGZsYWdzIGJlZm9yZSBwYXNzaW5nIHVwICovCiAJbS0+bV9mbGFncyAmPSB+KE1fODAyMTFf UlggfCBNX01DQVNUIHwgTV9CQ0FTVCk7CiAKQEAgLTQxMiw2ICs0MTQsNyBAQAogCQlpZiAobWNv cHkgIT0gTlVMTCkgewogCQkJaW50IGxlbiwgZXJyOwogCQkJbGVuID0gbWNvcHktPm1fcGt0aGRy LmxlbjsKKwkJCS8qIFZBUCB0cmFuc21pdCAqLwogCQkJZXJyID0gaWZwLT5pZl90cmFuc21pdChp ZnAsIG1jb3B5KTsKIAkJCWlmIChlcnIpIHsKIAkJCQkvKiBOQjogSUZRX0hBTkRPRkYgcmVjbGFp bXMgbWNvcHkgKi8KQEAgLTQzNyw2ICs0NDAsNyBAQAogCQkJbS0+bV9wa3RoZHIuZXRoZXJfdnRh ZyA9IG5pLT5uaV92bGFuOwogCQkJbS0+bV9mbGFncyB8PSBNX1ZMQU5UQUc7CiAJCX0KKwkJLyog VkFQIHRyYW5zbWl0ICovCiAJCWlmcC0+aWZfaW5wdXQoaWZwLCBtKTsKIAl9CiB9CkluZGV4OiBz eXMvbmV0ODAyMTEvaWVlZTgwMjExLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL25ldDgwMjExL2llZWU4 MDIxMS5jCShyZXZpc2lvbiAyNDY4MTgpCisrKyBzeXMvbmV0ODAyMTEvaWVlZTgwMjExLmMJKHdv cmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsOCBAQAogCiAJSUVFRTgwMjExX0FERFJfQ09QWSh2 YXAtPml2X215YWRkciwgbWFjYWRkcik7CiAKKwlJRUVFODAyMTFfVkFQX1RYX0xPQ0tfSU5JVCh2 YXAsIGlmX25hbWUodmFwLT5pdl9pZnApKTsKKwogCWllZWU4MDIxMV9zeXNjdGxfdmF0dGFjaCh2 YXApOwogCWllZWU4MDIxMV9jcnlwdG9fdmF0dGFjaCh2YXApOwogCWllZWU4MDIxMV9ub2RlX3Zh dHRhY2godmFwKTsKQEAgLTY1Nyw2ICs2NTksOCBAQAogCWllZWU4MDIxMV9ub2RlX3ZkZXRhY2go dmFwKTsKIAlpZWVlODAyMTFfc3lzY3RsX3ZkZXRhY2godmFwKTsKIAorCUlFRUU4MDIxMV9WQVBf VFhfTE9DS19ERVNUUk9ZKHZhcCk7CisKIAlpZl9mcmVlKGlmcCk7CiAKIAlDVVJWTkVUX1JFU1RP UkUoKTsK --f46d0418270ebfb28004d5e0ef7b--