ZGlmZiAtLWdpdCBhL2NyeXB0by9hcGkuYyBiL2NyeXB0by9hcGkuYwppbmRleCA0MGFlNDJlLi4yNzE1YWZkIDEwMDY0NAotLS0gYS9jcnlwdG8vYXBpLmMKKysrIGIvY3J5cHRvL2FwaS5jCkBAIC0zLDYgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoYykgMjAwMiBKYW1lcyBNb3JyaXMgPGptb3JyaXNAaW50ZXJjb2RlLmNvbS5hdT4KICAqIENvcHlyaWdodCAoYykgMjAwMiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgogICoKICAqIFBvcnRpb25zIGRlcml2ZWQgZnJvbSBDcnlwdG9hcGksIGJ5IEFsZXhhbmRlciBLamVsZGFhcyA8YXN0b3JAZmFzdC5ubz4KICAqIGFuZCBOZXR0bGUsIGJ5IE5pZWxzIE32bGxlci4KQEAgLTE4LDkgKzE5LDExIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIExJU1RfSEVBRChjcnlwdG9fYWxnX2xpc3QpOwpAQCAtMzksNiArNDIsNyBAQAogc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnICpjcnlwdG9fYWxnX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBjcnlwdG9fYWxnICpxLCAqYWxnID0gTlVMTDsKKwlpbnQgYmVzdCA9IC0xOwogCiAJaWYgKCFuYW1lKQogCQlyZXR1cm4gTlVMTDsKQEAgLTQ2LDExICs1MCwyMyBAQAogCWRvd25fcmVhZCgmY3J5cHRvX2FsZ19zZW0pOwogCQogCWxpc3RfZm9yX2VhY2hfZW50cnkocSwgJmNyeXB0b19hbGdfbGlzdCwgY3JhX2xpc3QpIHsKLQkJaWYgKCEoc3RyY21wKHEtPmNyYV9uYW1lLCBuYW1lKSkpIHsKLQkJCWlmIChjcnlwdG9fYWxnX2dldChxKSkKLQkJCQlhbGcgPSBxOworCQlpbnQgZXhhY3QsIGZ1enp5OworCisJCWV4YWN0ID0gIXN0cmNtcChxLT5jcmFfZHJpdmVyX25hbWUsIG5hbWUpOworCQlmdXp6eSA9ICFzdHJjbXAocS0+Y3JhX25hbWUsIG5hbWUpOworCQlpZiAoIWV4YWN0ICYmICEoZnV6enkgJiYgcS0+Y3JhX3ByaW9yaXR5ID4gYmVzdCkpCisJCQljb250aW51ZTsKKworCQlpZiAodW5saWtlbHkoIWNyeXB0b19hbGdfZ2V0KHEpKSkKKwkJCWNvbnRpbnVlOworCisJCWJlc3QgPSBxLT5jcmFfcHJpb3JpdHk7CisJCWlmIChhbGcpCisJCQljcnlwdG9fYWxnX3B1dChhbGcpOworCQlhbGcgPSBxOworCisJCWlmIChleGFjdCkKIAkJCWJyZWFrOwotCQl9CiAJfQogCQogCXVwX3JlYWQoJmNyeXB0b19hbGdfc2VtKTsKQEAgLTIwNyw5ICsyMjMsMjYgQEAKIAlrZnJlZSh0Zm0pOwogfQogCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fc2V0X2RyaXZlcl9uYW1lKHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgc3VmZml4W10gPSAiLWdlbmVyaWMiOworCWNoYXIgKmRyaXZlcl9uYW1lID0gKGNoYXIgKilhbGctPmNyYV9kcml2ZXJfbmFtZTsKKwlpbnQgbGVuOworCisJaWYgKCpkcml2ZXJfbmFtZSkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBzdHJsY3B5KGRyaXZlcl9uYW1lLCBhbGctPmNyYV9uYW1lLCBDUllQVE9fTUFYX0FMR19OQU1FKTsKKwlpZiAobGVuICsgc2l6ZW9mKHN1ZmZpeCkgPiBDUllQVE9fTUFYX0FMR19OQU1FKQorCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKKworCW1lbWNweShkcml2ZXJfbmFtZSArIGxlbiwgc3VmZml4LCBzaXplb2Yoc3VmZml4KSk7CisJcmV0dXJuIDA7Cit9CisKIGludCBjcnlwdG9fcmVnaXN0ZXJfYWxnKHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCiB7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldDsKIAlzdHJ1Y3QgY3J5cHRvX2FsZyAqcTsKIAogCWlmIChhbGctPmNyYV9hbGlnbm1hc2sgJiAoYWxnLT5jcmFfYWxpZ25tYXNrICsgMSkpCkBAIC0yMjAsMTEgKzI1MywxOCBAQAogCiAJaWYgKGFsZy0+Y3JhX2Jsb2Nrc2l6ZSA+IFBBR0VfU0laRSkKIAkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYWxnLT5jcmFfcHJpb3JpdHkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAkKKwlyZXQgPSBjcnlwdG9fc2V0X2RyaXZlcl9uYW1lKGFsZyk7CisJaWYgKHVubGlrZWx5KHJldCkpCisJCXJldHVybiByZXQ7CisKIAlkb3duX3dyaXRlKCZjcnlwdG9fYWxnX3NlbSk7CiAJCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShxLCAmY3J5cHRvX2FsZ19saXN0LCBjcmFfbGlzdCkgewotCQlpZiAoIShzdHJjbXAocS0+Y3JhX25hbWUsIGFsZy0+Y3JhX25hbWUpKSkgeworCQlpZiAoIXN0cmNtcChxLT5jcmFfZHJpdmVyX25hbWUsIGFsZy0+Y3JhX2RyaXZlcl9uYW1lKSkgewogCQkJcmV0ID0gLUVFWElTVDsKIAkJCWdvdG8gb3V0OwogCQl9CmRpZmYgLS1naXQgYS9jcnlwdG8vaW50ZXJuYWwuaCBiL2NyeXB0by9pbnRlcm5hbC5oCmluZGV4IDM3YWE2NTIuLjk1OWU2MDIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9pbnRlcm5hbC5oCisrKyBiL2NyeXB0by9pbnRlcm5hbC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ3J5cHRvZ3JhcGhpYyBBUEkuCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAyIEphbWVzIE1vcnJpcyA8am1vcnJpc0BpbnRlcmNvZGUuY29tLmF1PgorICogQ29weXJpZ2h0IChjKSAyMDA1IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKQEAgLTE2LDEwICsxNywxNSBAQAogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGFzbS9rbWFwX3R5cGVzLmg+CiAKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGNyeXB0b19hbGdfbGlzdDsKK2V4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIGNyeXB0b19hbGdfc2VtOworCiBleHRlcm4gZW51bSBrbV90eXBlIGNyeXB0b19rbV90eXBlc1tdOwogCiBzdGF0aWMgaW5saW5lIGVudW0ga21fdHlwZSBjcnlwdG9fa21hcF90eXBlKGludCBvdXQpCmRpZmYgLS1naXQgYS9jcnlwdG8vcHJvYy5jIGIvY3J5cHRvL3Byb2MuYwppbmRleCA2MzBiYTkxLi5jMGE1ZGQ3IDEwMDY0NAotLS0gYS9jcnlwdG8vcHJvYy5jCisrKyBiL2NyeXB0by9wcm9jLmMKQEAgLTQsNiArNCw3IEBACiAgKiBQcm9jZnMgaW5mb3JtYXRpb24uCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAyIEphbWVzIE1vcnJpcyA8am1vcnJpc0BpbnRlcmNvZGUuY29tLmF1PgorICogQ29weXJpZ2h0IChjKSAyMDA1IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKQEAgLTE4LDkgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKLWV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGNyeXB0b19hbGdfbGlzdDsKLWV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIGNyeXB0b19hbGdfc2VtOwotCiBzdGF0aWMgdm9pZCAqY19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnY7CkBAIC01Myw3ICs1MSw5IEBACiAJc3RydWN0IGNyeXB0b19hbGcgKmFsZyA9IChzdHJ1Y3QgY3J5cHRvX2FsZyAqKXA7CiAJCiAJc2VxX3ByaW50ZihtLCAibmFtZSAgICAgICAgIDogJXNcbiIsIGFsZy0+Y3JhX25hbWUpOworCXNlcV9wcmludGYobSwgImRyaXZlciAgICAgICA6ICVzXG4iLCBhbGctPmNyYV9kcml2ZXJfbmFtZSk7CiAJc2VxX3ByaW50ZihtLCAibW9kdWxlICAgICAgIDogJXNcbiIsIG1vZHVsZV9uYW1lKGFsZy0+Y3JhX21vZHVsZSkpOworCXNlcV9wcmludGYobSwgInByaW9yaXR5ICAgICA6ICVkXG4iLCBhbGctPmNyYV9wcmlvcml0eSk7CiAJCiAJc3dpdGNoIChhbGctPmNyYV9mbGFncyAmIENSWVBUT19BTEdfVFlQRV9NQVNLKSB7CiAJY2FzZSBDUllQVE9fQUxHX1RZUEVfQ0lQSEVSOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcnlwdG8uaCBiL2luY2x1ZGUvbGludXgvY3J5cHRvLmgKaW5kZXggM2M4OWRmNi4uZDg4YmY4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcnlwdG8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2NyeXB0by5oCkBAIC0zLDYgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoYykgMjAwMiBKYW1lcyBNb3JyaXMgPGptb3JyaXNAaW50ZXJjb2RlLmNvbS5hdT4KICAqIENvcHlyaWdodCAoYykgMjAwMiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgogICoKICAqIFBvcnRpb25zIGRlcml2ZWQgZnJvbSBDcnlwdG9hcGksIGJ5IEFsZXhhbmRlciBLamVsZGFhcyA8YXN0b3JAZmFzdC5ubz4KICAqIGFuZCBOZXR0bGUsIGJ5IE5pZWxzIE32bGxlci4KQEAgLTEyNiw3ICsxMjcsMTEgQEAKIAl1bnNpZ25lZCBpbnQgY3JhX2Jsb2Nrc2l6ZTsKIAl1bnNpZ25lZCBpbnQgY3JhX2N0eHNpemU7CiAJdW5zaWduZWQgaW50IGNyYV9hbGlnbm1hc2s7CisKKwlpbnQgY3JhX3ByaW9yaXR5OworCiAJY29uc3QgY2hhciBjcmFfbmFtZVtDUllQVE9fTUFYX0FMR19OQU1FXTsKKwljb25zdCBjaGFyIGNyYV9kcml2ZXJfbmFtZVtDUllQVE9fTUFYX0FMR19OQU1FXTsKIAogCXVuaW9uIHsKIAkJc3RydWN0IGNpcGhlcl9hbGcgY2lwaGVyOwo=