ZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2NsaWVudC5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY2xpZW50LmMKaW5kZXggOTVjZjEyMy4uYTRjMWM5NSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY2xpZW50LmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY2xpZW50LmMKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAKKyAqCiAgKiBGaWxlbmFtZTogICAgICBpcmxhbl9jbGllbnQuYwogICogVmVyc2lvbjogICAgICAgMC45CiAgKiBEZXNjcmlwdGlvbjogICBJckRBIExBTiBBY2Nlc3MgUHJvdG9jb2wgKElyTEFOKSBDbGllbnQKQEAgLTExLDE3ICsxMSwxNyBAQAogICogU291cmNlczogICAgICAgc2tlbGV0b24uYyBieSBEb25hbGQgQmVja2VyIDxiZWNrZXJAQ0VTRElTLmdzZmMubmFzYS5nb3Y+CiAgKiAgICAgICAgICAgICAgICBzbGlwLmMgYnkgTGF1cmVuY2UgQ3VsaGFuZSwgPGxvekBob2xtZXMuZGVtb24uY28udWs+CiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHV3YWx0Lm5sLm11Z25ldC5vcmc+Ci0gKiAKLSAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTgtMTk5OSBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+LCAKKyAqCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTE5OTkgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPiwKICAqICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogICAgIAotICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCi0gKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCi0gKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisgKgorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKLSAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKKyAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcwogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC01NCwzNSArNTQsMzUgQEAKIAogI3VuZGVmIENPTkZJR19JUkxBTl9HUkFUVUlUT1VTX0FSUAogCi1zdGF0aWMgdm9pZCBpcmxhbl9jbGllbnRfY3RybF9kaXNjb25uZWN0X2luZGljYXRpb24odm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwgCi0JCQkJCQkgICAgTE1fUkVBU09OIHJlYXNvbiwgCitzdGF0aWMgdm9pZCBpcmxhbl9jbGllbnRfY3RybF9kaXNjb25uZWN0X2luZGljYXRpb24odm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwKKwkJCQkJCSAgICBMTV9SRUFTT04gcmVhc29uLAogCQkJCQkJICAgIHN0cnVjdCBza19idWZmICopOwotc3RhdGljIGludCBpcmxhbl9jbGllbnRfY3RybF9kYXRhX2luZGljYXRpb24odm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwgCitzdGF0aWMgaW50IGlybGFuX2NsaWVudF9jdHJsX2RhdGFfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLAogCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIHZvaWQgaXJsYW5fY2xpZW50X2N0cmxfY29ubmVjdF9jb25maXJtKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsIAotCQkJCQkgICAgICBzdHJ1Y3QgcW9zX2luZm8gKnFvcywgCitzdGF0aWMgdm9pZCBpcmxhbl9jbGllbnRfY3RybF9jb25uZWN0X2NvbmZpcm0odm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwKKwkJCQkJICAgICAgc3RydWN0IHFvc19pbmZvICpxb3MsCiAJCQkJCSAgICAgIF9fdTMyIG1heF9zZHVfc2l6ZSwKIAkJCQkJICAgICAgX191OCBtYXhfaGVhZGVyX3NpemUsCiAJCQkJCSAgICAgIHN0cnVjdCBza19idWZmICopOwotc3RhdGljIHZvaWQgaXJsYW5fY2hlY2tfcmVzcG9uc2VfcGFyYW0oc3RydWN0IGlybGFuX2NiICpzZWxmLCBjaGFyICpwYXJhbSwgCitzdGF0aWMgdm9pZCBpcmxhbl9jaGVja19yZXNwb25zZV9wYXJhbShzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIGNoYXIgKnBhcmFtLAogCQkJCSAgICAgICBjaGFyICp2YWx1ZSwgaW50IHZhbF9sZW4pOwogc3RhdGljIHZvaWQgaXJsYW5fY2xpZW50X29wZW5fY3RybF90c2FwKHN0cnVjdCBpcmxhbl9jYiAqc2VsZik7CiAKIHN0YXRpYyB2b2lkIGlybGFuX2NsaWVudF9raWNrX3RpbWVyX2V4cGlyZWQodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYgPSAoc3RydWN0IGlybGFuX2NiICopIGRhdGE7Ci0JCisKIAlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIHJldHVybjspOwotCQotCS8qICAKKworCS8qCiAJICogSWYgd2UgYXJlIGluIHBlZXIgbW9kZSwgdGhlIGNsaWVudCBtYXkgbm90IGhhdmUgZ290IHRoZSBkaXNjb3ZlcnkKLQkgKiBpbmRpY2F0aW9uIGl0IG5lZWRzIHRvIG1ha2UgcHJvZ3Jlc3MuIElmIHRoZSBjbGllbnQgaXMgc3RpbGwgaW4gCisJICogaW5kaWNhdGlvbiBpdCBuZWVkcyB0byBtYWtlIHByb2dyZXNzLiBJZiB0aGUgY2xpZW50IGlzIHN0aWxsIGluCiAJICogSURMRSBzdGF0ZSwgd2UgbXVzdCBraWNrIGl0IHRvLCBidXQgb25seSBpZiB0aGUgcHJvdmlkZXIgaXMgbm90IElETEUKLSAJICovCi0JaWYgKChzZWxmLT5wcm92aWRlci5hY2Nlc3NfdHlwZSA9PSBBQ0NFU1NfUEVFUikgJiYgCisJICovCisJaWYgKChzZWxmLT5wcm92aWRlci5hY2Nlc3NfdHlwZSA9PSBBQ0NFU1NfUEVFUikgJiYKIAkgICAgKHNlbGYtPmNsaWVudC5zdGF0ZSA9PSBJUkxBTl9JRExFKSAmJgogCSAgICAoc2VsZi0+cHJvdmlkZXIuc3RhdGUgIT0gSVJMQU5fSURMRSkpIHsKIAkJaXJsYW5fY2xpZW50X3dha2V1cChzZWxmLCBzZWxmLT5zYWRkciwgc2VsZi0+ZGFkZHIpOwpAQCAtOTIsOCArOTIsOCBAQAogc3RhdGljIHZvaWQgaXJsYW5fY2xpZW50X3N0YXJ0X2tpY2tfdGltZXIoc3RydWN0IGlybGFuX2NiICpzZWxmLCBpbnQgdGltZW91dCkKIHsKIAlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKLQkKLQlpcmRhX3N0YXJ0X3RpbWVyKCZzZWxmLT5jbGllbnQua2lja190aW1lciwgdGltZW91dCwgKHZvaWQgKikgc2VsZiwgCisKKwlpcmRhX3N0YXJ0X3RpbWVyKCZzZWxmLT5jbGllbnQua2lja190aW1lciwgdGltZW91dCwgKHZvaWQgKikgc2VsZiwKIAkJCSBpcmxhbl9jbGllbnRfa2lja190aW1lcl9leHBpcmVkKTsKIH0KIApAQCAtMTEwLDExICsxMTAsMTEgQEAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSTEFOX01BR0lDLCByZXR1cm47KTsKIAotCS8qIAorCS8qCiAJICogQ2hlY2sgaWYgd2UgYXJlIGFscmVhZHkgYXdha2UsIG9yIGlmIHdlIGFyZSBhIHByb3ZpZGVyIGluIGRpcmVjdAogCSAqIG1vZGUgKGluIHRoYXQgY2FzZSB3ZSBtdXN0IGxlYXZlIHRoZSBjbGllbnQgaWRsZQogCSAqLwotCWlmICgoc2VsZi0+Y2xpZW50LnN0YXRlICE9IElSTEFOX0lETEUpIHx8IAorCWlmICgoc2VsZi0+Y2xpZW50LnN0YXRlICE9IElSTEFOX0lETEUpIHx8CiAJICAgIChzZWxmLT5wcm92aWRlci5hY2Nlc3NfdHlwZSA9PSBBQ0NFU1NfRElSRUNUKSkKIAl7CiAJCQlJUkRBX0RFQlVHKDAsICIlcygpLCBhbHJlYWR5IGF3YWtlIVxuIiwgX19GVU5DVElPTl9fICk7CkBAIC0xMzUsNyArMTM1LDcgQEAKIAlpcmxhbl9vcGVuX2RhdGFfdHNhcChzZWxmKTsKIAogCWlybGFuX2RvX2NsaWVudF9ldmVudChzZWxmLCBJUkxBTl9ESVNDT1ZFUllfSU5ESUNBVElPTiwgTlVMTCk7Ci0JCisKIAkvKiBTdGFydCBraWNrIHRpbWVyICovCiAJaXJsYW5fY2xpZW50X3N0YXJ0X2tpY2tfdGltZXIoc2VsZiwgMipIWik7CiB9CkBAIC0xNDgsMTEgKzE0OCwxMSBAQAogICovCiB2b2lkIGlybGFuX2NsaWVudF9kaXNjb3ZlcnlfaW5kaWNhdGlvbihkaXNjaW5mb190ICpkaXNjb3ZlcnksCiAJCQkJICAgICAgIERJU0NPVkVSWV9NT0RFIG1vZGUsCi0JCQkJICAgICAgIHZvaWQgKnByaXYpIAorCQkJCSAgICAgICB2b2lkICpwcml2KQogewogCXN0cnVjdCBpcmxhbl9jYiAqc2VsZjsKIAlfX3UzMiBzYWRkciwgZGFkZHI7Ci0JCisKIAlJUkRBX0RFQlVHKDEsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18gKTsKIAogCUlSREFfQVNTRVJUKGRpc2NvdmVyeSAhPSBOVUxMLCByZXR1cm47KTsKQEAgLTE3NywzNSArMTc3LDM1IEBACiAKIAkJSVJEQV9ERUJVRygxLCAiJXMoKSwgRm91bmQgaW5zdGFuY2UgKCUwOHgpIVxuIiwgX19GVU5DVElPTl9fICwKIAkJICAgICAgZGFkZHIpOwotCQkKKwogCQlpcmxhbl9jbGllbnRfd2FrZXVwKHNlbGYsIHNhZGRyLCBkYWRkcik7CiAJfQogSVJEQV9BU1NFUlRfTEFCRUwob3V0OikKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KLQkKKwogLyoKICAqIEZ1bmN0aW9uIGlybGFuX2NsaWVudF9kYXRhX2luZGljYXRpb24gKGhhbmRsZSwgc2tiKQogICoKICAqICAgIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgZGF0YSB0aGF0IGlzIHJlY2VpdmVkIG9uIHRoZSBjb250cm9sIGNoYW5uZWwKICAqCiAgKi8KLXN0YXRpYyBpbnQgaXJsYW5fY2xpZW50X2N0cmxfZGF0YV9pbmRpY2F0aW9uKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsIAorc3RhdGljIGludCBpcmxhbl9jbGllbnRfY3RybF9kYXRhX2luZGljYXRpb24odm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwKIAkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpcmxhbl9jYiAqc2VsZjsKLQkKKwogCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOwotCQorCiAJc2VsZiA9IChzdHJ1Y3QgaXJsYW5fY2IgKikgaW5zdGFuY2U7Ci0JCisKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSTEFOX01BR0lDLCByZXR1cm4gLTE7KTsKIAlJUkRBX0FTU0VSVChza2IgIT0gTlVMTCwgcmV0dXJuIC0xOyk7Ci0JCi0JaXJsYW5fZG9fY2xpZW50X2V2ZW50KHNlbGYsIElSTEFOX0RBVEFfSU5ESUNBVElPTiwgc2tiKTsgCiAKLQkvKiBSZWFkeSBmb3IgYSBuZXcgY29tbWFuZCAqLwkKKwlpcmxhbl9kb19jbGllbnRfZXZlbnQoc2VsZiwgSVJMQU5fREFUQV9JTkRJQ0FUSU9OLCBza2IpOworCisJLyogUmVhZHkgZm9yIGEgbmV3IGNvbW1hbmQgKi8KIAlJUkRBX0RFQlVHKDIsICIlcygpLCBjbGVhcmluZyB0eF9idXN5XG4iLCBfX0ZVTkNUSU9OX18gKTsKIAlzZWxmLT5jbGllbnQudHhfYnVzeSA9IEZBTFNFOwogCkBAIC0yMTUsMjcgKzIxNSwyNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpcmxhbl9jbGllbnRfY3RybF9kaXNjb25uZWN0X2luZGljYXRpb24odm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwgCi0JCQkJCQkgICAgTE1fUkVBU09OIHJlYXNvbiwgCi0JCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnVzZXJkYXRhKSAKK3N0YXRpYyB2b2lkIGlybGFuX2NsaWVudF9jdHJsX2Rpc2Nvbm5lY3RfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLAorCQkJCQkJICAgIExNX1JFQVNPTiByZWFzb24sCisJCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnVzZXJkYXRhKQogewogCXN0cnVjdCBpcmxhbl9jYiAqc2VsZjsKIAlzdHJ1Y3QgdHNhcF9jYiAqdHNhcDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJSVJEQV9ERUJVRyg0LCAiJXMoKSwgcmVhc29uPSVkXG4iLCBfX0ZVTkNUSU9OX18gLCByZWFzb24pOwotCQorCiAJc2VsZiA9IChzdHJ1Y3QgaXJsYW5fY2IgKikgaW5zdGFuY2U7CiAJdHNhcCA9IChzdHJ1Y3QgdHNhcF9jYiAqKSBzYXA7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwotCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSTEFOX01BR0lDLCByZXR1cm47KTsJCisJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHRzYXAgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQodHNhcC0+bWFnaWMgPT0gVFRQX1RTQVBfTUFHSUMsIHJldHVybjspOwotCQorCiAJSVJEQV9BU1NFUlQodHNhcCA9PSBzZWxmLT5jbGllbnQudHNhcF9jdHJsLCByZXR1cm47KTsKIAotICAgICAgIAkvKiBSZW1vdmUgZnJhbWVzIHF1ZXVlZCBvbiB0aGUgY29udHJvbCBjaGFubmVsICovCisJLyogUmVtb3ZlIGZyYW1lcyBxdWV1ZWQgb24gdGhlIGNvbnRyb2wgY2hhbm5lbCAqLwogCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnNlbGYtPmNsaWVudC50eHEpKSAhPSBOVUxMKSB7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAl9CkBAIC0yNzIsNyArMjcyLDcgQEAKIAlub3RpZnkuZGlzY29ubmVjdF9pbmRpY2F0aW9uID0gaXJsYW5fY2xpZW50X2N0cmxfZGlzY29ubmVjdF9pbmRpY2F0aW9uOwogCW5vdGlmeS5pbnN0YW5jZSA9IHNlbGY7CiAJc3RybGNweShub3RpZnkubmFtZSwgIklyTEFOIGN0cmwgKGMpIiwgc2l6ZW9mKG5vdGlmeS5uYW1lKSk7Ci0JCisKIAl0c2FwID0gaXJ0dHBfb3Blbl90c2FwKExTQVBfQU5ZLCBERUZBVUxUX0lOSVRJQUxfQ1JFRElULCAmbm90aWZ5KTsKIAlpZiAoIXRzYXApIHsKIAkJSVJEQV9ERUJVRygyLCAiJXMoKSwgR290IG5vIHRzYXAhXG4iLCBfX0ZVTkNUSU9OX18gKTsKQEAgLTI4NywxMSArMjg3LDExIEBACiAgKiAgICBDb25uZWN0aW9uIHRvIHBlZXIgSXJMQU4gbGF5ZSBjb25maXJtZWQKICAqCiAgKi8KLXN0YXRpYyB2b2lkIGlybGFuX2NsaWVudF9jdHJsX2Nvbm5lY3RfY29uZmlybSh2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLCAKLQkJCQkJICAgICAgc3RydWN0IHFvc19pbmZvICpxb3MsIAorc3RhdGljIHZvaWQgaXJsYW5fY2xpZW50X2N0cmxfY29ubmVjdF9jb25maXJtKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAsCisJCQkJCSAgICAgIHN0cnVjdCBxb3NfaW5mbyAqcW9zLAogCQkJCQkgICAgICBfX3UzMiBtYXhfc2R1X3NpemUsCiAJCQkJCSAgICAgIF9fdTggbWF4X2hlYWRlcl9zaXplLAotCQkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSAKKwkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXJsYW5fY2IgKnNlbGY7CiAKQEAgLTMxNiw3ICszMTYsNyBAQAogICogICAgUHJpbnQgcmV0dXJuIGNvZGUgb2YgcmVxdWVzdCB0byBwZWVyIElyTEFOIGxheWVyLgogICoKICAqLwotc3RhdGljIHZvaWQgcHJpbnRfcmV0X2NvZGUoX191OCBjb2RlKSAKK3N0YXRpYyB2b2lkIHByaW50X3JldF9jb2RlKF9fdTggY29kZSkKIHsKIAlzd2l0Y2goY29kZSkgewogCWNhc2UgMDoKQEAgLTM1OCw3ICszNTgsNyBAQAogLyoKICAqIEZ1bmN0aW9uIGlybGFuX2NsaWVudF9wYXJzZV9yZXNwb25zZSAoc2VsZiwgc2tiKQogICoKLSAqICAgIEV4dHJhY3QgYWxsIHBhcmFtZXRlcnMgZnJvbSByZWNlaXZlZCBidWZmZXIsIHRoZW4gZmVlZCB0aGVtIHRvIAorICogICAgRXh0cmFjdCBhbGwgcGFyYW1ldGVycyBmcm9tIHJlY2VpdmVkIGJ1ZmZlciwgdGhlbiBmZWVkIHRoZW0gdG8KICAqICAgIGNoZWNrX3BhcmFtcyBmb3IgcGFyc2luZwogICovCiB2b2lkIGlybGFuX2NsaWVudF9wYXJzZV9yZXNwb25zZShzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIHN0cnVjdCBza19idWZmICpza2IpCkBAIC0zNjksMzAgKzM2OSwzMCBAQAogCWludCByZXQ7CiAJX191MTYgdmFsX2xlbjsKIAlpbnQgaTsKLSAgICAgICAgY2hhciAqbmFtZTsKLSAgICAgICAgY2hhciAqdmFsdWU7CisJY2hhciAqbmFtZTsKKwljaGFyICp2YWx1ZTsKIAotCUlSREFfQVNTRVJUKHNrYiAhPSBOVUxMLCByZXR1cm47KTsJCi0JCisJSVJEQV9BU1NFUlQoc2tiICE9IE5VTEwsIHJldHVybjspOworCiAJSVJEQV9ERUJVRyg0LCAiJXMoKSBza2ItPmxlbj0lZFxuIiwgX19GVU5DVElPTl9fICwgKGludCkgc2tiLT5sZW4pOwotCQorCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkxBTl9NQUdJQywgcmV0dXJuOyk7Ci0JCisKIAlpZiAoIXNrYikgewogCQlJUkRBX0VSUk9SKCIlcygpLCBHb3QgTlVMTCBza2IhXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm47CiAJfQogCWZyYW1lID0gc2tiLT5kYXRhOwotCQotCS8qIAotCSAqICBDaGVjayByZXR1cm4gY29kZSBhbmQgcHJpbnQgaXQgaWYgbm90IHN1Y2Nlc3MgCisKKwkvKgorCSAqICBDaGVjayByZXR1cm4gY29kZSBhbmQgcHJpbnQgaXQgaWYgbm90IHN1Y2Nlc3MKIAkgKi8KIAlpZiAoZnJhbWVbMF0pIHsKIAkJcHJpbnRfcmV0X2NvZGUoZnJhbWVbMF0pOwogCQlyZXR1cm47CiAJfQotCQorCiAJbmFtZSA9IGttYWxsb2MoMjU1LCBHRlBfQVRPTUlDKTsKIAlpZiAoIW5hbWUpCiAJCXJldHVybjsKQEAgLTQwNiwxMSArNDA2LDExIEBACiAJY291bnQgPSBmcmFtZVsxXTsKIAogCUlSREFfREVCVUcoNCwgIiVzKCksIGdvdCAlZCBwYXJhbWV0ZXJzXG4iLCBfX0ZVTkNUSU9OX18gLCBjb3VudCk7Ci0JCisKIAlwdHIgPSBmcmFtZSsyOwogCiAJLyogRm9yIGFsbCBwYXJhbWV0ZXJzICovCi0gCWZvciAoaT0wOyBpPGNvdW50O2krKykgeworCWZvciAoaT0wOyBpPGNvdW50O2krKykgewogCQlyZXQgPSBpcmxhbl9leHRyYWN0X3BhcmFtKHB0ciwgbmFtZSwgdmFsdWUsICZ2YWxfbGVuKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCUlSREFfREVCVUcoMiwgIiVzKCksIElyTEFOLCBFcnJvciFcbiIsIF9fRlVOQ1RJT05fXyApOwpAQCAtNDE4LDcgKzQxOCw3IEBACiAJCX0KIAkJcHRyICs9IHJldDsKIAkJaXJsYW5fY2hlY2tfcmVzcG9uc2VfcGFyYW0oc2VsZiwgbmFtZSwgdmFsdWUsIHZhbF9sZW4pOwotIAl9CisJfQogCS8qIENsZWFudXAgKi8KIAlrZnJlZShuYW1lKTsKIAlrZnJlZSh2YWx1ZSk7CkBAIC00MzAsOCArNDMwLDggQEAKICAqICAgICBDaGVjayB3aGljaCBwYXJhbWV0ZXIgaXMgcmVjZWl2ZWQgYW5kIHVwZGF0ZSBsb2NhbCB2YXJpYWJsZXMKICAqCiAgKi8KLXN0YXRpYyB2b2lkIGlybGFuX2NoZWNrX3Jlc3BvbnNlX3BhcmFtKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgY2hhciAqcGFyYW0sIAotCQkJCSAgICAgICBjaGFyICp2YWx1ZSwgaW50IHZhbF9sZW4pIAorc3RhdGljIHZvaWQgaXJsYW5fY2hlY2tfcmVzcG9uc2VfcGFyYW0oc3RydWN0IGlybGFuX2NiICpzZWxmLCBjaGFyICpwYXJhbSwKKwkJCQkgICAgICAgY2hhciAqdmFsdWUsIGludCB2YWxfbGVuKQogewogCV9fdTE2IHRtcF9jcHU7IC8qIFRlbXBvcmFyeSB2YWx1ZSBpbiBob3N0IG9yZGVyICovCiAJX191OCAqYnl0ZXM7CkBAIC00NjUsNyArNDY1LDcgQEAKIAkJCXNlbGYtPmNsaWVudC5maWx0ZXJfdHlwZSB8PSBJUkxBTl9CUk9BRENBU1Q7CiAJCWVsc2UgaWYgKHN0cmNtcCh2YWx1ZSwgIklQWF9TT0NLRVQiKSA9PSAwKQogCQkJc2VsZi0+Y2xpZW50LmZpbHRlcl90eXBlIHw9IElSTEFOX0lQWF9TT0NLRVQ7Ci0JCQorCiAJfQogCWlmIChzdHJjbXAocGFyYW0sICJBQ0NFU1NfVFlQRSIpID09IDApIHsKIAkJaWYgKHN0cmNtcCh2YWx1ZSwgIkRJUkVDVCIpID09IDApCkBAIC00ODAsNyArNDgwLDcgQEAKIAl9CiAJLyogSVJMQU4gdmVyc2lvbiAqLwogCWlmIChzdHJjbXAocGFyYW0sICJJUkxBTl9WRVIiKSA9PSAwKSB7Ci0JCUlSREFfREVCVUcoNCwgIklyTEFOIHZlcnNpb24gJWQuJWRcbiIsIChfX3U4KSB2YWx1ZVswXSwgCisJCUlSREFfREVCVUcoNCwgIklyTEFOIHZlcnNpb24gJWQuJWRcbiIsIChfX3U4KSB2YWx1ZVswXSwKIAkJICAgICAgKF9fdTgpIHZhbHVlWzFdKTsKIAogCQlzZWxmLT52ZXJzaW9uWzBdID0gdmFsdWVbMF07CkBAIC00OTcsMTcgKzQ5NywxNyBAQAogCQltZW1jcHkoJnRtcF9jcHUsIHZhbHVlLCAyKTsgLyogQWxpZ24gdmFsdWUgKi8KIAkJbGUxNl90b19jcHVzKCZ0bXBfY3B1KTsgICAgIC8qIENvbnZlcnQgdG8gaG9zdCBvcmRlciAqLwogCQlzZWxmLT5jbGllbnQucmVjdl9hcmJfdmFsID0gdG1wX2NwdTsKLQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgcmVjZWl2ZSBhcmIgdmFsPSVkXG4iLCBfX0ZVTkNUSU9OX18gLCAKKwkJSVJEQV9ERUJVRygyLCAiJXMoKSwgcmVjZWl2ZSBhcmIgdmFsPSVkXG4iLCBfX0ZVTkNUSU9OX18gLAogCQkJICAgc2VsZi0+Y2xpZW50LnJlY3ZfYXJiX3ZhbCk7CiAJfQogCWlmIChzdHJjbXAocGFyYW0sICJNQVhfRlJBTUUiKSA9PSAwKSB7CiAJCW1lbWNweSgmdG1wX2NwdSwgdmFsdWUsIDIpOyAvKiBBbGlnbiB2YWx1ZSAqLwogCQlsZTE2X3RvX2NwdXMoJnRtcF9jcHUpOyAgICAgLyogQ29udmVydCB0byBob3N0IG9yZGVyICovCiAJCXNlbGYtPmNsaWVudC5tYXhfZnJhbWUgPSB0bXBfY3B1OwotCQlJUkRBX0RFQlVHKDQsICIlcygpLCBtYXggZnJhbWU9JWRcbiIsIF9fRlVOQ1RJT05fXyAsIAorCQlJUkRBX0RFQlVHKDQsICIlcygpLCBtYXggZnJhbWU9JWRcbiIsIF9fRlVOQ1RJT05fXyAsCiAJCQkgICBzZWxmLT5jbGllbnQubWF4X2ZyYW1lKTsKIAl9Ci0JIAorCiAJLyogUkVDT05ORUNUX0tFWSwgaW4gY2FzZSB0aGUgbGluayBnb2VzIGRvd24hICovCiAJaWYgKHN0cmNtcChwYXJhbSwgIlJFQ09OTkVDVF9LRVkiKSA9PSAwKSB7CiAJCUlSREFfREVCVUcoNCwgIkdvdCByZWNvbm5lY3Qga2V5OiAiKTsKQEAgLTUyMSw5ICs1MjEsOSBAQAogCWlmIChzdHJjbXAocGFyYW0sICJGSUxURVJfRU5UUlkiKSA9PSAwKSB7CiAJCWJ5dGVzID0gdmFsdWU7CiAJCUlSREFfREVCVUcoNCwgIkV0aGVybmV0IGFkZHJlc3MgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkJICAgICAgYnl0ZXNbMF0sIGJ5dGVzWzFdLCBieXRlc1syXSwgYnl0ZXNbM10sIGJ5dGVzWzRdLCAKKwkJICAgICAgYnl0ZXNbMF0sIGJ5dGVzWzFdLCBieXRlc1syXSwgYnl0ZXNbM10sIGJ5dGVzWzRdLAogCQkgICAgICBieXRlc1s1XSk7Ci0JCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIAorCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogCQkJc2VsZi0+ZGV2LT5kZXZfYWRkcltpXSA9IGJ5dGVzW2ldOwogCX0KIH0KQEAgLTUzNCwxMSArNTM0LDExIEBACiAgKiAgICBHb3QgcmVzdWx0cyBmcm9tIHJlbW90ZSBMTS1JQVMKICAqCiAgKi8KLXZvaWQgaXJsYW5fY2xpZW50X2dldF92YWx1ZV9jb25maXJtKGludCByZXN1bHQsIF9fdTE2IG9ial9pZCwgCi0JCQkJICAgIHN0cnVjdCBpYXNfdmFsdWUgKnZhbHVlLCB2b2lkICpwcml2KSAKK3ZvaWQgaXJsYW5fY2xpZW50X2dldF92YWx1ZV9jb25maXJtKGludCByZXN1bHQsIF9fdTE2IG9ial9pZCwKKwkJCQkgICAgc3RydWN0IGlhc192YWx1ZSAqdmFsdWUsIHZvaWQgKnByaXYpCiB7CiAJc3RydWN0IGlybGFuX2NiICpzZWxmOwotCQorCiAJSVJEQV9ERUJVRyg0LCAiJXMoKVxuIiwgX19GVU5DVElPTl9fICk7CiAKIAlJUkRBX0FTU0VSVChwcml2ICE9IE5VTEwsIHJldHVybjspOwpAQCAtNTUzLDcgKzU1Myw3IEBACiAJLyogQ2hlY2sgaWYgcmVxdWVzdCBzdWNjZWVkZWQgKi8KIAlpZiAocmVzdWx0ICE9IElBU19TVUNDRVNTKSB7CiAJCUlSREFfREVCVUcoMiwgIiVzKCksIGdvdCBOVUxMIHZhbHVlIVxuIiwgX19GVU5DVElPTl9fICk7Ci0JCWlybGFuX2RvX2NsaWVudF9ldmVudChzZWxmLCBJUkxBTl9JQVNfUFJPVklERVJfTk9UX0FWQUlMLCAKKwkJaXJsYW5fZG9fY2xpZW50X2V2ZW50KHNlbGYsIElSTEFOX0lBU19QUk9WSURFUl9OT1RfQVZBSUwsCiAJCQkJICAgICAgTlVMTCk7CiAJCXJldHVybjsKIAl9Cg==