ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZQppbmRleCAzNDUyNjE3Li45YmE3MjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L01ha2VmaWxlCkBAIC0zLDYgKzMsNyBAQAogIwogY2NmbGFncy0kKENPTkZJR19VU0JfR0FER0VUX0RFQlVHKSA6PSAtRERFQlVHCiAKK29iai0kKENPTkZJR19VU0JfR0FER0VUKQkrPSB1ZGMtY29yZS5vCiBvYmotJChDT05GSUdfVVNCX0RVTU1ZX0hDRCkJKz0gZHVtbXlfaGNkLm8KIG9iai0kKENPTkZJR19VU0JfTkVUMjI3MikJKz0gbmV0MjI3Mi5vCiBvYmotJChDT05GSUdfVVNCX05FVDIyODApCSs9IG5ldDIyODAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMKaW5kZXggOTVlODEzOC4uNzBmMmIzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jCkBAIC0xNDM4LDEwICsxNDM4LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYW1kNTUzNl9zdGFydChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlciwKKwkJaW50ICgqYmluZCkoc3RydWN0IHVzYl9nYWRnZXQgKikpOworc3RhdGljIGludCBhbWQ1NTM2X3N0b3Aoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpOwogLyogZ2FkZ2V0IG9wZXJhdGlvbnMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2dhZGdldF9vcHMgdWRjX29wcyA9IHsKIAkud2FrZXVwCQk9IHVkY193YWtldXAsCiAJLmdldF9mcmFtZQk9IHVkY19nZXRfZnJhbWUsCisJLnN0YXJ0CQk9IGFtZDU1MzZfc3RhcnQsCisJLnN0b3AJCT0gYW1kNTUzNl9zdG9wLAogfTsKIAogLyogU2V0dXBzIGVuZHBvaW50IHBhcmFtZXRlcnMsIGFkZHMgZW5kcG9pbnRzIHRvIGxpbmtlZCBsaXN0ICovCkBAIC0xOTU1LDcgKzE5NjAsNyBAQAogfQogCiAvKiBDYWxsZWQgYnkgZ2FkZ2V0IGRyaXZlciB0byByZWdpc3RlciBpdHNlbGYgKi8KLWludCB1c2JfZ2FkZ2V0X3Byb2JlX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlciwKK3N0YXRpYyBpbnQgYW1kNTUzNl9zdGFydChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlciwKIAkJaW50ICgqYmluZCkoc3RydWN0IHVzYl9nYWRnZXQgKikpCiB7CiAJc3RydWN0IHVkYwkJKmRldiA9IHVkYzsKQEAgLTIwMDIsNyArMjAwNyw2IEBACiAKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF9wcm9iZV9kcml2ZXIpOwogCiAvKiBzaHV0ZG93biByZXF1ZXN0cyBhbmQgZGlzY29ubmVjdCBmcm9tIGdhZGdldCAqLwogc3RhdGljIHZvaWQKQEAgLTIwMjcsNyArMjAzMSw3IEBACiB9CiAKIC8qIENhbGxlZCBieSBnYWRnZXQgZHJpdmVyIHRvIHVucmVnaXN0ZXIgaXRzZWxmICovCi1pbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3N0YXRpYyBpbnQgYW1kNTUzNl9zdG9wKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQogewogCXN0cnVjdCB1ZGMJKmRldiA9IHVkYzsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwpAQCAtMjA1Nyw4ICsyMDYxLDYgQEAKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTsKLQogCiAvKiBDbGVhciBwZW5kaW5nIE5BSyBiaXRzICovCiBzdGF0aWMgdm9pZCB1ZGNfcHJvY2Vzc19jbmFrX3F1ZXVlKHN0cnVjdCB1ZGMgKmRldikKQEAgLTMxMzQsNiArMzEzNiw3IEBACiAKIAlkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKKwl1c2JfZGVsX2dhZGdldF91ZGMoJnVkYy0+Z2FkZ2V0KTsKIAkvKiBnYWRnZXQgZHJpdmVyIG11c3Qgbm90IGJlIHJlZ2lzdGVyZWQgKi8KIAlCVUdfT04oZGV2LT5kcml2ZXIgIT0gTlVMTCk7CiAKQEAgLTMzODIsOCArMzM4NSwxMyBAQAogCQkiZHJpdmVyIHZlcnNpb246ICVzKGZvciBHZW9kZTU1MzYgQjEpXG4iLCB0bXApOwogCXVkYyA9IGRldjsKIAorCXJldHZhbCA9IHVzYl9hZGRfZ2FkZ2V0X3VkYygmdWRjLT5wZGV2LT5kZXYsICZkZXYtPmdhZGdldCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmaW5pc2hlZDsKKwogCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcigmZGV2LT5nYWRnZXQuZGV2KTsKIAlpZiAocmV0dmFsKSB7CisJCXVzYl9kZWxfZ2FkZ2V0X3VkYygmZGV2LT5nYWRnZXQpOwogCQlwdXRfZGV2aWNlKCZkZXYtPmdhZGdldC5kZXYpOwogCQlnb3RvIGZpbmlzaGVkOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKaW5kZXggZjQ2OTBmZi4uOThjYmMwNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCkBAIC05ODUsMTIgKzk4NSwxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGF0OTFfc3RhcnQoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCisJCWludCAoKmJpbmQpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopKTsKK3N0YXRpYyBpbnQgYXQ5MV9zdG9wKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZ2FkZ2V0X29wcyBhdDkxX3VkY19vcHMgPSB7CiAJLmdldF9mcmFtZQkJPSBhdDkxX2dldF9mcmFtZSwKIAkud2FrZXVwCQkJPSBhdDkxX3dha2V1cCwKIAkuc2V0X3NlbGZwb3dlcmVkCT0gYXQ5MV9zZXRfc2VsZnBvd2VyZWQsCiAJLnZidXNfc2Vzc2lvbgkJPSBhdDkxX3ZidXNfc2Vzc2lvbiwKIAkucHVsbHVwCQkJPSBhdDkxX3B1bGx1cCwKKwkuc3RhcnQJCQk9IGF0OTFfc3RhcnQsCisJLnN0b3AJCQk9IGF0OTFfc3RvcCwKIAogCS8qCiAJICogVkJVUy1wb3dlcmVkIGRldmljZXMgbWF5IGFsc28gYWxzbyB3YW50IHRvIHN1cHBvcnQgYmlnZ2VyCkBAIC0xNjI4LDcgKzE2MzQsNyBAQAogCQlzY2hlZHVsZV93b3JrKCZ1ZGMtPnZidXNfdGltZXJfd29yayk7CiB9CiAKLWludCB1c2JfZ2FkZ2V0X3Byb2JlX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlciwKK3N0YXRpYyBpbnQgYXQ5MV9zdGFydChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlciwKIAkJaW50ICgqYmluZCkoc3RydWN0IHVzYl9nYWRnZXQgKikpCiB7CiAJc3RydWN0IGF0OTFfdWRjCSp1ZGMgPSAmY29udHJvbGxlcjsKQEAgLTE2NzIsOSArMTY3OCw4IEBACiAJREJHKCJib3VuZCB0byAlc1xuIiwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKTsKIAotaW50IHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIgKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQorc3RhdGljIGludCBhdDkxX3N0b3Aoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCiB7CiAJc3RydWN0IGF0OTFfdWRjICp1ZGMgPSAmY29udHJvbGxlcjsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwpAQCAtMTY5Niw3ICsxNzAxLDYgQEAKIAlEQkcoInVuYm91bmQgZnJvbSAlc1xuIiwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MICh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTg1NCwxMyArMTg1OCwxOCBAQAogCQlEQkcoIm5vIFZCVVMgZGV0ZWN0aW9uLCBhc3N1bWluZyBhbHdheXMtb25cbiIpOwogCQl1ZGMtPnZidXMgPSAxOwogCX0KKwlyZXR2YWwgPSB1c2JfYWRkX2dhZGdldF91ZGMoZGV2LCAmdWRjLT5nYWRnZXQpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbDQ7CiAJZGV2X3NldF9kcnZkYXRhKGRldiwgdWRjKTsKIAlkZXZpY2VfaW5pdF93YWtldXAoZGV2LCAxKTsKIAljcmVhdGVfZGVidWdfZmlsZSh1ZGMpOwogCiAJSU5GTygiJXMgdmVyc2lvbiAlc1xuIiwgZHJpdmVyX25hbWUsIERSSVZFUl9WRVJTSU9OKTsKIAlyZXR1cm4gMDsKLQorZmFpbDQ6CisJaWYgKHVkYy0+Ym9hcmQudmJ1c19waW4gPiAwICYmICF1ZGMtPmJvYXJkLnZidXNfcG9sbGVkKQorCQlmcmVlX2lycSh1ZGMtPmJvYXJkLnZidXNfcGluLCB1ZGMpOwogZmFpbDM6CiAJaWYgKHVkYy0+Ym9hcmQudmJ1c19waW4gPiAwKQogCQlncGlvX2ZyZWUodWRjLT5ib2FyZC52YnVzX3Bpbik7CkBAIC0xODg3LDYgKzE4OTYsNyBAQAogCiAJREJHKCJyZW1vdmVcbiIpOwogCisJdXNiX2RlbF9nYWRnZXRfdWRjKCZ1ZGMtPmdhZGdldCk7CiAJaWYgKHVkYy0+ZHJpdmVyKQogCQlyZXR1cm4gLUVCVVNZOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXRtZWxfdXNiYV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jCmluZGV4IGRiMWE2NTkuLmU2Yjk3MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jCkBAIC0xMDA3LDEwICsxMDA3LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYXRtZWxfdXNiYV9zdGFydChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlciwKKwkJaW50ICgqYmluZCkoc3RydWN0IHVzYl9nYWRnZXQgKikpOworc3RhdGljIGludCBhdG1lbF91c2JhX3N0b3Aoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9nYWRnZXRfb3BzIHVzYmFfdWRjX29wcyA9IHsKIAkuZ2V0X2ZyYW1lCQk9IHVzYmFfdWRjX2dldF9mcmFtZSwKIAkud2FrZXVwCQkJPSB1c2JhX3VkY193YWtldXAsCiAJLnNldF9zZWxmcG93ZXJlZAk9IHVzYmFfdWRjX3NldF9zZWxmcG93ZXJlZCwKKwkuc3RhcnQJCQk9IGF0bWVsX3VzYmFfc3RhcnQsCisJLnN0b3AJCQk9IGF0bWVsX3VzYmFfc3RvcCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgdXNiYV9lcDBfZGVzYyA9IHsKQEAgLTE3ODksNyArMTc5NSw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1pbnQgdXNiX2dhZGdldF9wcm9iZV9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCitzdGF0aWMgaW50IGF0bWVsX3VzYmFfc3RhcnQoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCiAJCWludCAoKmJpbmQpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopKQogewogCXN0cnVjdCB1c2JhX3VkYyAqdWRjID0gJnRoZV91ZGM7CkBAIC0xODQyLDkgKzE4NDgsOCBAQAogCXVkYy0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOwogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKTsKIAotaW50IHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCitzdGF0aWMgaW50IGF0bWVsX3VzYmFfc3RvcChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKIHsKIAlzdHJ1Y3QgdXNiYV91ZGMgKnVkYyA9ICZ0aGVfdWRjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xODgwLDcgKzE4ODUsNiBAQAogCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIpOwogCiBzdGF0aWMgaW50IF9faW5pdCB1c2JhX3VkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewpAQCAtMjAyMSwxMiArMjAyNSwyNCBAQAogCQl9CiAJfQogCisJcmV0ID0gdXNiX2FkZF9nYWRnZXRfdWRjKCZwZGV2LT5kZXYsICZ1ZGMtPmdhZGdldCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfYWRkX3VkYzsKKwogCXVzYmFfaW5pdF9kZWJ1Z2ZzKHVkYyk7CiAJZm9yIChpID0gMTsgaSA8IHBkYXRhLT5udW1fZXA7IGkrKykKIAkJdXNiYV9lcF9pbml0X2RlYnVnZnModWRjLCAmdXNiYV9lcFtpXSk7CiAKIAlyZXR1cm4gMDsKIAorZXJyX2FkZF91ZGM6CisJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPnZidXNfcGluKSkgeworCQlmcmVlX2lycShncGlvX3RvX2lycSh1ZGMtPnZidXNfcGluKSwgdWRjKTsKKwkJZ3Bpb19mcmVlKHVkYy0+dmJ1c19waW4pOworCX0KKworCWRldmljZV91bnJlZ2lzdGVyKCZ1ZGMtPmdhZGdldC5kZXYpOworCiBlcnJfZGV2aWNlX2FkZDoKIAlmcmVlX2lycShpcnEsIHVkYyk7CiBlcnJfcmVxdWVzdF9pcnE6CkBAIC0yMDUzLDYgKzIwNjksOCBAQAogCiAJdWRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKKwl1c2JfZGVsX2dhZGdldF91ZGMoJnVkYy0+Z2FkZ2V0KTsKKwogCWZvciAoaSA9IDE7IGkgPCBwZGF0YS0+bnVtX2VwOyBpKyspCiAJCXVzYmFfZXBfY2xlYW51cF9kZWJ1Z2ZzKCZ1c2JhX2VwW2ldKTsKIAl1c2JhX2NsZWFudXBfZGVidWdmcyh1ZGMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuYwppbmRleCBiYWFmODdlLi45MDliYzQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuYwpAQCAtODU3LDcgKzg1Nyw3IEBACiAJc3RhbXAgPSBzdGFtcCAqIDEwMDAwMDAgKyB0dmFsLnR2X3VzZWM7CiAKIAlzY25wcmludGYoZGJnX2RhdGEuYnVmW2RiZ19kYXRhLmlkeF0sIERCR19EQVRBX01TRywKLQkJICAiJTA0WFx0uyAlMDJYICUtNy43cyAlNGkgq1x0JXNcbiIsCisJCSAgIiUwNFhcdD8gJTAyWCAlLTcuN3MgJTRpID9cdCVzXG4iLAogCQkgIHN0YW1wLCBhZGRyLCBuYW1lLCBzdGF0dXMsIGV4dHJhKTsKIAogCWRiZ19pbmMoJmRiZ19kYXRhLmlkeCk7CkBAIC04NjUsNyArODY1LDcgQEAKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGJnX2RhdGEubGNrLCBmbGFncyk7CiAKIAlpZiAoZGJnX2RhdGEudHR5ICE9IDApCi0JCXByX25vdGljZSgiJTA0WFx0uyAlMDJYICUtNy43cyAlNGkgq1x0JXNcbiIsCisJCXByX25vdGljZSgiJTA0WFx0PyAlMDJYICUtNy43cyAlNGkgP1x0JXNcbiIsCiAJCQkgIHN0YW1wLCBhZGRyLCBuYW1lLCBzdGF0dXMsIGV4dHJhKTsKIH0KIApAQCAtMTAyNSwxNSArMTAyNSwxNSBAQAogCiAJbiArPSBzY25wcmludGYoYnVmICsgbiwgUEFHRV9TSVpFIC0gbiwgIip0ZXN0ID0gJWRcbiIsCiAJCSAgICAgICBpc3Jfc3RhdGlzdGljcy50ZXN0KTsKLQluICs9IHNjbnByaW50ZihidWYgKyBuLCBQQUdFX1NJWkUgLSBuLCAiuyB1aSAgPSAlZFxuIiwKKwluICs9IHNjbnByaW50ZihidWYgKyBuLCBQQUdFX1NJWkUgLSBuLCAiPyB1aSAgPSAlZFxuIiwKIAkJICAgICAgIGlzcl9zdGF0aXN0aWNzLnVpKTsKLQluICs9IHNjbnByaW50ZihidWYgKyBuLCBQQUdFX1NJWkUgLSBuLCAiuyB1ZWkgPSAlZFxuIiwKKwluICs9IHNjbnByaW50ZihidWYgKyBuLCBQQUdFX1NJWkUgLSBuLCAiPyB1ZWkgPSAlZFxuIiwKIAkJICAgICAgIGlzcl9zdGF0aXN0aWNzLnVlaSk7Ci0JbiArPSBzY25wcmludGYoYnVmICsgbiwgUEFHRV9TSVpFIC0gbiwgIrsgcGNpID0gJWRcbiIsCisJbiArPSBzY25wcmludGYoYnVmICsgbiwgUEFHRV9TSVpFIC0gbiwgIj8gcGNpID0gJWRcbiIsCiAJCSAgICAgICBpc3Jfc3RhdGlzdGljcy5wY2kpOwotCW4gKz0gc2NucHJpbnRmKGJ1ZiArIG4sIFBBR0VfU0laRSAtIG4sICK7IHVyaSA9ICVkXG4iLAorCW4gKz0gc2NucHJpbnRmKGJ1ZiArIG4sIFBBR0VfU0laRSAtIG4sICI/IHVyaSA9ICVkXG4iLAogCQkgICAgICAgaXNyX3N0YXRpc3RpY3MudXJpKTsKLQluICs9IHNjbnByaW50ZihidWYgKyBuLCBQQUdFX1NJWkUgLSBuLCAiuyBzbGkgPSAlZFxuIiwKKwluICs9IHNjbnByaW50ZihidWYgKyBuLCBQQUdFX1NJWkUgLSBuLCAiPyBzbGkgPSAlZFxuIiwKIAkJICAgICAgIGlzcl9zdGF0aXN0aWNzLnNsaSk7CiAJbiArPSBzY25wcmludGYoYnVmICsgbiwgUEFHRV9TSVpFIC0gbiwgIipub25lID0gJWRcbiIsCiAJCSAgICAgICBpc3Jfc3RhdGlzdGljcy5ub25lKTsKQEAgLTI1MTUsNiArMjUxNSw5IEBACiAJcmV0dXJuIC1FTk9UU1VQUDsKIH0KIAorc3RhdGljIGludCBjaTEzeHh4X3N0YXJ0KHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyLAorCQlpbnQgKCpiaW5kKShzdHJ1Y3QgdXNiX2dhZGdldCAqKSk7CitzdGF0aWMgaW50IGNpMTN4eHhfc3RvcChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcik7CiAvKioKICAqIERldmljZSBvcGVyYXRpb25zIHBhcnQgb2YgdGhlIEFQSSB0byB0aGUgVVNCIGNvbnRyb2xsZXIgaGFyZHdhcmUsCiAgKiB3aGljaCBkb24ndCBpbnZvbHZlIGVuZHBvaW50cyAob3IgaS9vKQpAQCAtMjUyNCwxNyArMjUyNywxOSBAQAogCS52YnVzX3Nlc3Npb24JPSBjaTEzeHh4X3ZidXNfc2Vzc2lvbiwKIAkud2FrZXVwCQk9IGNpMTN4eHhfd2FrZXVwLAogCS52YnVzX2RyYXcJPSBjaTEzeHh4X3ZidXNfZHJhdywKKwkuc3RhcnQJCT0gY2kxM3h4eF9zdGFydCwKKwkuc3RvcAkJPSBjaTEzeHh4X3N0b3AsCiB9OwogCiAvKioKLSAqIHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyOiByZWdpc3RlciBhIGdhZGdldCBkcml2ZXIKKyAqIGNpMTN4eHhfc3RhcnQ6IHJlZ2lzdGVyIGEgZ2FkZ2V0IGRyaXZlcgogICogQGRyaXZlcjogdGhlIGRyaXZlciBiZWluZyByZWdpc3RlcmVkCiAgKiBAYmluZDogdGhlIGRyaXZlcidzIGJpbmQgY2FsbGJhY2sKICAqCi0gKiBDaGVjayB1c2JfZ2FkZ2V0X3Byb2JlX2RyaXZlcigpIGF0IDxsaW51eC91c2IvZ2FkZ2V0Lmg+IGZvciBkZXRhaWxzLgorICogQ2hlY2sgY2kxM3h4eF9zdGFydCgpIGF0IDxsaW51eC91c2IvZ2FkZ2V0Lmg+IGZvciBkZXRhaWxzLgogICogSW50ZXJydXB0cyBhcmUgZW5hYmxlZCBoZXJlLgogICovCi1pbnQgdXNiX2dhZGdldF9wcm9iZV9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCitzdGF0aWMgaW50IGNpMTN4eHhfc3RhcnQoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCiAJCWludCAoKmJpbmQpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopKQogewogCXN0cnVjdCBjaTEzeHh4ICp1ZGMgPSBfdWRjOwpAQCAtMjY1NywxNCArMjY2MiwxMyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodWRjLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldHZhbDsKIH0KLUVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF9wcm9iZV9kcml2ZXIpOwogCiAvKioKLSAqIHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXI6IHVucmVnaXN0ZXIgYSBnYWRnZXQgZHJpdmVyCisgKiBjaTEzeHh4X3N0b3A6IHVucmVnaXN0ZXIgYSBnYWRnZXQgZHJpdmVyCiAgKgogICogQ2hlY2sgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcigpIGF0ICJ1c2JfZ2FkZ2V0LmgiIGZvciBkZXRhaWxzCiAgKi8KLWludCB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQorc3RhdGljIGludCBjaTEzeHh4X3N0b3Aoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCiB7CiAJc3RydWN0IGNpMTN4eHggKnVkYyA9IF91ZGM7CiAJdW5zaWduZWQgbG9uZyBpLCBmbGFnczsKQEAgLTI3MjYsNyArMjczMCw2IEBACiAKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEJVUyBibG9jawpAQCAtMjkwMSwxMiArMjkwNCwyMyBAQAogCQlpZiAocmV0dmFsKQogCQkJZ290byByZW1vdmVfZGJnOwogCX0KKworCXJldHZhbCA9IHVzYl9hZGRfZ2FkZ2V0X3VkYyhkZXYsICZ1ZGMtPmdhZGdldCk7CisJaWYgKHJldHZhbCkKKwkJZ290byByZW1vdmVfdHJhbnM7CisKIAlwbV9ydW50aW1lX25vX2NhbGxiYWNrcygmdWRjLT5nYWRnZXQuZGV2KTsKIAlwbV9ydW50aW1lX2VuYWJsZSgmdWRjLT5nYWRnZXQuZGV2KTsKIAogCV91ZGMgPSB1ZGM7CiAJcmV0dXJuIHJldHZhbDsKIAorcmVtb3ZlX3RyYW5zOgorCWlmICh1ZGMtPnRyYW5zY2VpdmVyKSB7CisJCW90Z19zZXRfcGVyaXBoZXJhbCh1ZGMtPnRyYW5zY2VpdmVyLCAmdWRjLT5nYWRnZXQpOworCQlvdGdfcHV0X3RyYW5zY2VpdmVyKHVkYy0+dHJhbnNjZWl2ZXIpOworCX0KKwogCWVycigiZXJyb3IgPSAlaSIsIHJldHZhbCk7CiByZW1vdmVfZGJnOgogI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTCkBAIC0yOTM2LDYgKzI5NTAsNyBAQAogCQllcnIoIkVJTlZBTCIpOwogCQlyZXR1cm47CiAJfQorCXVzYl9kZWxfZ2FkZ2V0X3VkYygmdWRjLT5nYWRnZXQpOwogCiAJaWYgKHVkYy0+dHJhbnNjZWl2ZXIpIHsKIAkJb3RnX3NldF9wZXJpcGhlcmFsKHVkYy0+dHJhbnNjZWl2ZXIsICZ1ZGMtPmdhZGdldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKaW5kZXggZDNkY2FiYy4uZDQ3YTU2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwpAQCAtNzEwLDExICs3MTAsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBkdW1teV91ZGNfc3RhcnQoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCisJCWludCAoKmJpbmQpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopKTsKK3N0YXRpYyBpbnQgZHVtbXlfdWRjX3N0b3Aoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9nYWRnZXRfb3BzIGR1bW15X29wcyA9IHsKIAkuZ2V0X2ZyYW1lCT0gZHVtbXlfZ19nZXRfZnJhbWUsCiAJLndha2V1cAkJPSBkdW1teV93YWtldXAsCiAJLnNldF9zZWxmcG93ZXJlZCA9IGR1bW15X3NldF9zZWxmcG93ZXJlZCwKIAkucHVsbHVwCQk9IGR1bW15X3B1bGx1cCwKKwkuc3RhcnQJCT0gZHVtbXlfdWRjX3N0YXJ0LAorCS5zdG9wCQk9IGR1bW15X3VkY19zdG9wLAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTc0Nyw4ICs3NTMsNyBAQAogICogZm9yIGVhY2ggZHJpdmVyIHRoYXQgcmVnaXN0ZXJzOiAganVzdCBhZGQgdG8gYSBiaWcgcm9vdCBodWIuCiAgKi8KIAotaW50Ci11c2JfZ2FkZ2V0X3Byb2JlX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlciwKK3N0YXRpYyBpbnQgZHVtbXlfdWRjX3N0YXJ0KHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyLAogCQlpbnQgKCpiaW5kKShzdHJ1Y3QgdXNiX2dhZGdldCAqKSkKIHsKIAlzdHJ1Y3QgZHVtbXkJKmR1bSA9IHRoZV9jb250cm9sbGVyOwpAQCAtODEyLDEwICs4MTcsOCBAQAogCXVzYl9oY2RfcG9sbF9yaF9zdGF0dXMgKGR1bW15X3RvX2hjZCAoZHVtKSk7CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKTsKIAotaW50Ci11c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyIChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3N0YXRpYyBpbnQgZHVtbXlfdWRjX3N0b3Aoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCiB7CiAJc3RydWN0IGR1bW15CSpkdW0gPSB0aGVfY29udHJvbGxlcjsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwpAQCAtODQ1LDcgKzg0OCw2IEBACiAJdXNiX2hjZF9wb2xsX3JoX3N0YXR1cyAoZHVtbXlfdG9faGNkIChkdW0pKTsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0wgKHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIpOwogCiAjdW5kZWYgaXNfZW5hYmxlZAogCkBAIC04OTIsMTEgKzg5NCwyMCBAQAogCQlyZXR1cm4gcmM7CiAJfQogCisJcmMgPSB1c2JfYWRkX2dhZGdldF91ZGMoJnBkZXYtPmRldiwgJmR1bS0+Z2FkZ2V0KTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGVycl91ZGM7CisKIAlyYyA9IGRldmljZV9jcmVhdGVfZmlsZSAoJmR1bS0+Z2FkZ2V0LmRldiwgJmRldl9hdHRyX2Z1bmN0aW9uKTsKIAlpZiAocmMgPCAwKQotCQlkZXZpY2VfdW5yZWdpc3RlciAoJmR1bS0+Z2FkZ2V0LmRldik7Ci0JZWxzZQotCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkdW0pOworCQlnb3RvIGVycl9kZXY7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHVtKTsKKwlyZXR1cm4gcmM7CisKK2Vycl9kZXY6CisJdXNiX2RlbF9nYWRnZXRfdWRjKCZkdW0tPmdhZGdldCk7CitlcnJfdWRjOgorCWRldmljZV91bnJlZ2lzdGVyKCZkdW0tPmdhZGdldC5kZXYpOwogCXJldHVybiByYzsKIH0KIApAQCAtOTA0LDYgKzkxNSw3IEBACiB7CiAJc3RydWN0IGR1bW15CSpkdW0gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSAocGRldik7CiAKKwl1c2JfZGVsX2dhZGdldF91ZGMoJmR1bS0+Z2FkZ2V0KTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YSAocGRldiwgTlVMTCk7CiAJZGV2aWNlX3JlbW92ZV9maWxlICgmZHVtLT5nYWRnZXQuZGV2LCAmZGV2X2F0dHJfZnVuY3Rpb24pOwogCWRldmljZV91bnJlZ2lzdGVyICgmZHVtLT5nYWRnZXQuZGV2KTsKQEAgLTE4NjMsNyArMTg3NSw2IEBACiAJZHVtID0gaGNkX3RvX2R1bW15IChoY2QpOwogCiAJZGV2aWNlX3JlbW92ZV9maWxlIChkdW1teV9kZXYoZHVtKSwgJmRldl9hdHRyX3VyYnMpOwotCXVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIgKGR1bS0+ZHJpdmVyKTsKIAlkZXZfaW5mbyAoZHVtbXlfZGV2KGR1bSksICJzdG9wcGVkXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmMKaW5kZXggM2E2OGUwOS4uM2JmODcyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5jCkBAIC0xOTI3LDYgKzE5MjcsMTAgQEAKIAlyZXR1cm4gLUVOT1RTVVBQOwogfQogCitzdGF0aWMgaW50IGZzbF9xZV9zdGFydChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlciwKKwkJaW50ICgqYmluZCkoc3RydWN0IHVzYl9nYWRnZXQgKikpOworc3RhdGljIGludCBmc2xfcWVfc3RvcChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcik7CisKIC8qIGRlZmluZWQgaW4gdXNiX2dhZGdldC5oICovCiBzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfb3BzIHFlX2dhZGdldF9vcHMgPSB7CiAJLmdldF9mcmFtZSA9IHFlX2dldF9mcmFtZSwKQEAgLTE5MzUsNiArMTkzOSw4IEBACiAJLnZidXNfc2Vzc2lvbiA9IHFlX3ZidXNfc2Vzc2lvbiwKIAkudmJ1c19kcmF3ID0gcWVfdmJ1c19kcmF3LAogCS5wdWxsdXAgPSBxZV9wdWxsdXAsCisJLnN0YXJ0ID0gZnNsX3FlX3N0YXJ0LAorCS5zdG9wID0gZnNsX3FlX3N0b3AsCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIzMjAsNyArMjMyNiw3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAlHYWRnZXQgZHJpdmVyIHByb2JlIGFuZCB1bnJlZ2lzdGVyLgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludCB1c2JfZ2FkZ2V0X3Byb2JlX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlciwKK3N0YXRpYyBpbnQgZnNsX3FlX3N0YXJ0KHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyLAogCQlpbnQgKCpiaW5kKShzdHJ1Y3QgdXNiX2dhZGdldCAqKSkKIHsKIAlpbnQgcmV0dmFsOwpAQCAtMjM2OSw5ICsyMzc1LDggQEAKIAkJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5uYW1lLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF9wcm9iZV9kcml2ZXIpOwogCi1pbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3N0YXRpYyBpbnQgZnNsX3FlX3N0b3Aoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCiB7CiAJc3RydWN0IHFlX2VwICpsb29wX2VwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yNDExLDcgKzI0MTYsNiBAQAogCQkJZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIpOwogCiAvKiB1ZGMgc3RydWN0dXJlJ3MgYWxsb2MgYW5kIHNldHVwLCBpbmNsdWRlIGVwLXBhcmFtIGFsbG9jICovCiBzdGF0aWMgc3RydWN0IHFlX3VkYyBfX2RldmluaXQgKnFlX3VkY19jb25maWcoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpCkBAIC0yNjYyLDExICsyNjY2LDE3IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnI2OwogCisJcmV0ID0gdXNiX2FkZF9nYWRnZXRfdWRjKCZvZmRldi0+ZGV2LCAmdWRjX2NvbnRyb2xsZXItPmdhZGdldCk7CisJaWYgKHJldCkKKwkJZ290byBlcnI3OworCiAJZGV2X2luZm8odWRjX2NvbnRyb2xsZXItPmRldiwKIAkJCSIlcyBVU0IgY29udHJvbGxlciBpbml0aWFsaXplZCBhcyBkZXZpY2VcbiIsCiAJCQkodWRjX2NvbnRyb2xsZXItPnNvY190eXBlID09IFBPUlRfUUUpID8gIlFFIiA6ICJDUE0iKTsKIAlyZXR1cm4gMDsKIAorZXJyNzoKKwlkZXZpY2VfdW5yZWdpc3RlcigmdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYpOwogZXJyNjoKIAlmcmVlX2lycSh1ZGNfY29udHJvbGxlci0+dXNiX2lycSwgdWRjX2NvbnRyb2xsZXIpOwogZXJyNToKQEAgLTI3MjEsNiArMjczMSw4IEBACiAJaWYgKCF1ZGNfY29udHJvbGxlcikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwl1c2JfZGVsX2dhZGdldF91ZGMoJnVkY19jb250cm9sbGVyLT5nYWRnZXQpOworCiAJdWRjX2NvbnRyb2xsZXItPmRvbmUgPSAmZG9uZTsKIAl0YXNrbGV0X2Rpc2FibGUoJnVkY19jb250cm9sbGVyLT5yeF90YXNrbGV0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91ZGNfY29yZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91ZGNfY29yZS5jCmluZGV4IDJjZDlhNjAuLjVlM2RiZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdWRjX2NvcmUuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VkY19jb3JlLmMKQEAgLTEyMzIsNiArMTIzMiw5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZnNsX3N0YXJ0KHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyLAorCQlpbnQgKCpiaW5kKShzdHJ1Y3QgdXNiX2dhZGdldCAqKSk7CitzdGF0aWMgaW50IGZzbF9zdG9wKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKTsKIC8qIGRlZmluZWQgaW4gZ2FkZ2V0LmggKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9vcHMgZnNsX2dhZGdldF9vcHMgPSB7CiAJLmdldF9mcmFtZSA9IGZzbF9nZXRfZnJhbWUsCkBAIC0xMjQwLDYgKzEyNDMsOCBAQAogCS52YnVzX3Nlc3Npb24gPSBmc2xfdmJ1c19zZXNzaW9uLAogCS52YnVzX2RyYXcgPSBmc2xfdmJ1c19kcmF3LAogCS5wdWxsdXAgPSBmc2xfcHVsbHVwLAorCS5zdGFydCA9IGZzbF9zdGFydCwKKwkuc3RvcCA9IGZzbF9zdG9wLAogfTsKIAogLyogU2V0IHByb3RvY29sIHN0YWxsIG9uIGVwMCwgcHJvdG9jb2wgc3RhbGwgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGNsZWFyZWQKQEAgLTE5MDgsNyArMTkxMyw3IEBACiAgKiBIb29rIHRvIGdhZGdldCBkcml2ZXJzCiAgKiBDYWxsZWQgYnkgaW5pdGlhbGl6YXRpb24gY29kZSBvZiBnYWRnZXQgZHJpdmVycwogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotaW50IHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyLAorc3RhdGljIGludCBmc2xfc3RhcnQoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCiAJCWludCAoKmJpbmQpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopKQogewogCWludCByZXR2YWwgPSAtRU5PREVWOwpAQCAtMTk3NiwxMCArMTk4MSw5IEBACiAJCSAgICAgICByZXR2YWwpOwogCXJldHVybiByZXR2YWw7CiB9Ci1FWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKTsKIAogLyogRGlzY29ubmVjdCBmcm9tIGdhZGdldCBkcml2ZXIgKi8KLWludCB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQorc3RhdGljIGludCBmc2xfc3RvcChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKIHsKIAlzdHJ1Y3QgZnNsX2VwICpsb29wX2VwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yMDIyLDcgKzIwMjYsNiBAQAogCSAgICAgICBkcml2ZXItPmRyaXZlci5uYW1lKTsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCQlQUk9DIEZpbGUgU3lzdGVtIFN1cHBvcnQKQEAgLTI1NzgsOSArMjU4MSwxNiBAQAogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycl91bnJlZ2lzdGVyOwogCX0KKworCXJldCA9IHVzYl9hZGRfZ2FkZ2V0X3VkYygmcGRldi0+ZGV2LCAmdWRjX2NvbnRyb2xsZXItPmdhZGdldCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZGVsX3VkYzsKKwogCWNyZWF0ZV9wcm9jX2ZpbGUoKTsKIAlyZXR1cm4gMDsKIAorZXJyX2RlbF91ZGM6CisJZG1hX3Bvb2xfZGVzdHJveSh1ZGNfY29udHJvbGxlci0+dGRfcG9vbCk7CiBlcnJfdW5yZWdpc3RlcjoKIAlkZXZpY2VfdW5yZWdpc3RlcigmdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYpOwogZXJyX2ZyZWVfaXJxOgpAQCAtMjYxMiw2ICsyNjIyLDggQEAKIAogCWlmICghdWRjX2NvbnRyb2xsZXIpCiAJCXJldHVybiAtRU5PREVWOworCisJdXNiX2RlbF9nYWRnZXRfdWRjKCZ1ZGNfY29udHJvbGxlci0+Z2FkZ2V0KTsKIAl1ZGNfY29udHJvbGxlci0+ZG9uZSA9ICZkb25lOwogCiAJZnNsX3VkY19jbGtfcmVsZWFzZSgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1c2IzMDBfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVzYjMwMF91ZGMuYwppbmRleCBiODJhMTE0Li4wNjM1M2U3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVzYjMwMF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVzYjMwMF91ZGMuYwpAQCAtMTQ5NSw3ICsxNDk1LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyBzdHJ1Y3QgZnVzYjMwMCAqdGhlX2NvbnRyb2xsZXI7CiAKLWludCB1c2JfZ2FkZ2V0X3Byb2JlX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlciwKK3N0YXRpYyBpbnQgZnVzYjMwMF91ZGNfc3RhcnQoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCiAJCWludCAoKmJpbmQpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopKQogewogCXN0cnVjdCBmdXNiMzAwICpmdXNiMzAwID0gdGhlX2NvbnRyb2xsZXI7CkBAIC0xNTM5LDkgKzE1MzksOCBAQAogCiAJcmV0dXJuIHJldHZhbDsKIH0KLUVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF9wcm9iZV9kcml2ZXIpOwogCi1pbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3N0YXRpYyBpbnQgZnVzYjMwMF91ZGNfc3RvcChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKIHsKIAlzdHJ1Y3QgZnVzYjMwMCAqZnVzYjMwMCA9IHRoZV9jb250cm9sbGVyOwogCkBAIC0xNTU3LDcgKzE1NTYsNiBAQAogCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIpOwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBpbnQgZnVzYjMwMF91ZGNfcHVsbHVwKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0LCBpbnQgaXNfYWN0aXZlKQpAQCAtMTU2NywxMiArMTU2NSwxNSBAQAogCiBzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfb3BzIGZ1c2IzMDBfZ2FkZ2V0X29wcyA9IHsKIAkucHVsbHVwCQk9IGZ1c2IzMDBfdWRjX3B1bGx1cCwKKwkuc3RhcnQJCT0gZnVzYjMwMF91ZGNfc3RhcnQsCisJLnN0b3AJCT0gZnVzYjMwMF91ZGNfc3RvcCwKIH07CiAKIHN0YXRpYyBpbnQgX19leGl0IGZ1c2IzMDBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGZ1c2IzMDAgKmZ1c2IzMDAgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CiAKKwl1c2JfZGVsX2dhZGdldF91ZGMoJmZ1c2IzMDAtPmdhZGdldCk7CiAJaW91bm1hcChmdXNiMzAwLT5yZWcpOwogCWZyZWVfaXJxKHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCksIGZ1c2IzMDApOwogCkBAIC0xNjk3LDkgKzE2OTgsMTUgQEAKIAkJZ290byBjbGVhbl91cDM7CiAKIAlpbml0X2NvbnRyb2xsZXIoZnVzYjMwMCk7CisJcmV0ID0gdXNiX2FkZF9nYWRnZXRfdWRjKCZwZGV2LT5kZXYsICZmdXNiMzAwLT5nYWRnZXQpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2FkZF91ZGM7CisKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAidmVyc2lvbiAlc1xuIiwgRFJJVkVSX1ZFUlNJT04pOwogCiAJcmV0dXJuIDA7CitlcnJfYWRkX3VkYzoKKwlmdXNiMzAwX2ZyZWVfcmVxdWVzdCgmZnVzYjMwMC0+ZXBbMF0tPmVwLCBmdXNiMzAwLT5lcDBfcmVxKTsKIAogY2xlYW5fdXAzOgogCWZyZWVfaXJxKGlyZXMtPnN0YXJ0LCBmdXNiMzAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMKaW5kZXggYmY2ZTExYy4uN2Y4NzgwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMKQEAgLTk5Niw4ICs5OTYsMTQgQEAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKK3N0YXRpYyBpbnQgZ29rdV9zdGFydChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlciwKKwkJaW50ICgqYmluZCkoc3RydWN0IHVzYl9nYWRnZXQgKikpOworc3RhdGljIGludCBnb2t1X3N0b3Aoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9nYWRnZXRfb3BzIGdva3Vfb3BzID0gewogCS5nZXRfZnJhbWUJPSBnb2t1X2dldF9mcmFtZSwKKwkuc3RhcnQJCT0gZ29rdV9zdGFydCwKKwkuc3RvcAkJPSBnb2t1X3N0b3AsCiAJLy8gbm8gcmVtb3RlIHdha2V1cAogCS8vIG5vdCBzZWxmcG93ZXJlZAogfTsKQEAgLTEzNDQsNyArMTM1MCw3IEBACiAgKiBkaXNjb25uZWN0IGlzIHJlcG9ydGVkLiAgdGhlbiBhIGhvc3QgbWF5IGNvbm5lY3QgYWdhaW4sIG9yCiAgKiB0aGUgZHJpdmVyIG1pZ2h0IGdldCB1bmJvdW5kLgogICovCi1pbnQgdXNiX2dhZGdldF9wcm9iZV9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCitzdGF0aWMgaW50IGdva3Vfc3RhcnQoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCiAJCWludCAoKmJpbmQpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopKQogewogCXN0cnVjdCBnb2t1X3VkYwkqZGV2ID0gdGhlX2NvbnRyb2xsZXI7CkBAIC0xMzgyLDcgKzEzODgsNiBAQAogCURCRyhkZXYsICJyZWdpc3RlcmVkIGdhZGdldCBkcml2ZXIgJyVzJ1xuIiwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKTsKIAogc3RhdGljIHZvaWQKIHN0b3BfYWN0aXZpdHkoc3RydWN0IGdva3VfdWRjICpkZXYsIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQpAQCAtMTQwOCw3ICsxNDEzLDcgQEAKIAkJdWRjX2VuYWJsZShkZXYpOwogfQogCi1pbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3N0YXRpYyBpbnQgZ29rdV9zdG9wKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQogewogCXN0cnVjdCBnb2t1X3VkYwkqZGV2ID0gdGhlX2NvbnRyb2xsZXI7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKQEAgLTE0MjksOCArMTQzNCw2IEBACiAJREJHKGRldiwgInVucmVnaXN0ZXJlZCBkcml2ZXIgJyVzJ1xuIiwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIpOwotCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTE3MzAsNiArMTczMyw4IEBACiAKIAlEQkcoZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKIAorCXVzYl9kZWxfZ2FkZ2V0X3VkYygmZGV2LT5nYWRnZXQpOworCiAJQlVHX09OKGRldi0+ZHJpdmVyKTsKIAogI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTCkBAIC0xODU0LDYgKzE4NTksMTAgQEAKIAkJZ290byBlcnI7CiAJfQogCWRldi0+cmVnaXN0ZXJlZCA9IDE7CisJcmV0dmFsID0gdXNiX2FkZF9nYWRnZXRfdWRjKCZwZGV2LT5kZXYsICZkZXYtPmdhZGdldCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnI7CisKIAlyZXR1cm4gMDsKIAogZXJyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmMKaW5kZXggYWRlNDAwNi4uNjkyZmQ5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5jCkBAIC0xMjM3LDkgKzEyMzcsMTQgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KIAorc3RhdGljIGludCBpbXhfdWRjX3N0YXJ0KHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyLAorCQlpbnQgKCpiaW5kKShzdHJ1Y3QgdXNiX2dhZGdldCAqKSk7CitzdGF0aWMgaW50IGlteF91ZGNfc3RvcChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcik7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9nYWRnZXRfb3BzIGlteF91ZGNfb3BzID0gewogCS5nZXRfZnJhbWUJID0gaW14X3VkY19nZXRfZnJhbWUsCiAJLndha2V1cAkJID0gaW14X3VkY193YWtldXAsCisJLnN0YXJ0CQk9IGlteF91ZGNfc3RhcnQsCisJLnN0b3AJCT0gaW14X3VkY19zdG9wLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbXhfdWRjX3N0cnVjdCBjb250cm9sbGVyID0gewpAQCAtMTMyNCw3ICsxMzI5LDcgQEAKICAqIFVTQiBnYWRnZXQgZHJpdmVyIGZ1bmN0aW9ucwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwotaW50IHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyLAorc3RhdGljIGludCBpbXhfdWRjX3N0YXJ0KHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyLAogCQlpbnQgKCpiaW5kKShzdHJ1Y3QgdXNiX2dhZGdldCAqKSkKIHsKIAlzdHJ1Y3QgaW14X3VkY19zdHJ1Y3QgKmlteF91c2IgPSAmY29udHJvbGxlcjsKQEAgLTEzNjgsOSArMTM3Myw4IEBACiAJaW14X3VzYi0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOwogCXJldHVybiByZXR2YWw7CiB9Ci1FWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKTsKIAotaW50IHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCitzdGF0aWMgaW50IGlteF91ZGNfc3RvcChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKIHsKIAlzdHJ1Y3QgaW14X3VkY19zdHJ1Y3QgKmlteF91c2IgPSAmY29udHJvbGxlcjsKIApAQCAtMTM5NCw3ICsxMzk4LDYgQEAKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIE1vZHVsZSBmdW5jdGlvbnMKQEAgLTE1MDQsOCArMTUwNywxNCBAQAogCWlteF91c2ItPnRpbWVyLmZ1bmN0aW9uID0gaGFuZGxlX2NvbmZpZzsKIAlpbXhfdXNiLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaW14X3VzYjsKIAotCXJldHVybiAwOworCXJldCA9IHVzYl9hZGRfZ2FkZ2V0X3VkYygmcGRldi0+ZGV2LCAmaW14X3VzYi0+Z2FkZ2V0KTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw0OwogCisJcmV0dXJuIDA7CitmYWlsNDoKKwlmb3IgKGkgPSAwOyBpIDwgSU1YX1VTQl9OQl9FUCArIDE7IGkrKykKKwkJZnJlZV9pcnEoaW14X3VzYi0+dXNiZF9pbnRbaV0sIGlteF91c2IpOwogZmFpbDM6CiAJY2xrX3B1dChjbGspOwogCWNsa19kaXNhYmxlKGNsayk7CkBAIC0xNTI1LDYgKzE1MzQsNyBAQAogCXN0cnVjdCBpbXh1c2JfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgaTsKIAorCXVzYl9kZWxfZ2FkZ2V0X3VkYygmaW14X3VzYi0+Z2FkZ2V0KTsKIAlpbXhfdWRjX2Rpc2FibGUoaW14X3VzYik7CiAJZGVsX3RpbWVyKCZpbXhfdXNiLT50aW1lcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9sYW5nd2VsbF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sYW5nd2VsbF91ZGMuYwppbmRleCA5Y2VlODhhLi5kODQwM2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGFuZ3dlbGxfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xhbmd3ZWxsX3VkYy5jCkBAIC0xMzIxLDcgKzEzMjEsOSBAQAogCXJldHVybiAwOwogfQogCi0KK3N0YXRpYyBpbnQgbGFuZ3dlbGxfc3RhcnQoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCisJCWludCAoKmJpbmQpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopKTsKK3N0YXRpYyBpbnQgbGFuZ3dlbGxfc3RvcChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcik7CiAvKiBkZXZpY2UgY29udHJvbGxlciB1c2JfZ2FkZ2V0X29wcyBzdHJ1Y3R1cmUgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2dhZGdldF9vcHMgbGFuZ3dlbGxfb3BzID0gewogCkBAIC0xMzQyLDYgKzEzNDQsOSBAQAogCiAJLyogRCsgcHVsbHVwLCBzb2Z0d2FyZS1jb250cm9sbGVkIGNvbm5lY3QvZGlzY29ubmVjdCB0byBVU0IgaG9zdCAqLwogCS5wdWxsdXAJCT0gbGFuZ3dlbGxfcHVsbHVwLAorCisJLnN0YXJ0CQk9IGxhbmd3ZWxsX3N0YXJ0LAorCS5zdG9wCQk9IGxhbmd3ZWxsX3N0b3AsCiB9OwogCiAKQEAgLTE4NTIsNyArMTg1Nyw3IEBACiAgKiB0aGUgZHJpdmVyIG1pZ2h0IGdldCB1bmJvdW5kLgogICovCiAKLWludCB1c2JfZ2FkZ2V0X3Byb2JlX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlciwKK3N0YXRpYyBpbnQgbGFuZ3dlbGxfc3RhcnQoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCiAJCWludCAoKmJpbmQpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopKQogewogCXN0cnVjdCBsYW5nd2VsbF91ZGMJKmRldiA9IHRoZV9jb250cm9sbGVyOwpAQCAtMTkxNCwxMSArMTkxOSw5IEBACiAJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICI8LS0tICVzKClcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gcmV0dmFsOwogfQotRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3Byb2JlX2RyaXZlcik7Ci0KIAogLyogdW5yZWdpc3RlciBnYWRnZXQgZHJpdmVyICovCi1pbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3N0YXRpYyBpbnQgbGFuZ3dlbGxfc3RvcChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKIHsKIAlzdHJ1Y3QgbGFuZ3dlbGxfdWRjCSpkZXYgPSB0aGVfY29udHJvbGxlcjsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKQEAgLTE5NjUsOCArMTk2OCw2IEBACiAJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICI8LS0tICVzKClcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7Ci0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMzM3Myw2ICszMzc0LDEwIEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBlcnJvcjsKIAorCXJldHZhbCA9IHVzYl9hZGRfZ2FkZ2V0X3VkYygmcGRldi0+ZGV2LCAmZGV2LT5nYWRnZXQpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3I7CisKIAlyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2xhbmd3ZWxsX3VkYyk7CiAJaWYgKHJldHZhbCkKIAkJZ290byBlcnJvcjsKQEAgLTM0MDMsNiArMzQwOCw3IEBACiAKIAlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgIi0tLT4gJXMoKVxuIiwgX19mdW5jX18pOwogCisJdXNiX2RlbF9nYWRnZXRfdWRjKCZkZXYtPmdhZGdldCk7CiAJLyogZGlzYWJsZSBpbnRlcnJ1cHQgYW5kIHNldCBjb250cm9sbGVyIHRvIHN0b3Agc3RhdGUgKi8KIAlsYW5nd2VsbF91ZGNfc3RvcChkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbTY2NTkyLXVkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L202NjU5Mi11ZGMuYwppbmRleCAwODRhYTA4Li4xMWQzNzgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbTY2NTkyLXVkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9tNjY1OTItdWRjLmMKQEAgLTE0NTQsNyArMTQ1NCw3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIHN0cnVjdCBtNjY1OTIgKnRoZV9jb250cm9sbGVyOwogCi1pbnQgdXNiX2dhZGdldF9wcm9iZV9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCitzdGF0aWMgaW50IG02NjU5Ml9zdGFydChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlciwKIAkJaW50ICgqYmluZCkoc3RydWN0IHVzYl9nYWRnZXQgKikpCiB7CiAJc3RydWN0IG02NjU5MiAqbTY2NTkyID0gdGhlX2NvbnRyb2xsZXI7CkBAIC0xNTA2LDkgKzE1MDYsOCBAQAogCiAJcmV0dXJuIHJldHZhbDsKIH0KLUVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF9wcm9iZV9kcml2ZXIpOwogCi1pbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3N0YXRpYyBpbnQgbTY2NTkyX3N0b3Aoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCiB7CiAJc3RydWN0IG02NjU5MiAqbTY2NTkyID0gdGhlX2NvbnRyb2xsZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE1MzMsNyArMTUzMiw2IEBACiAJbTY2NTkyLT5kcml2ZXIgPSBOVUxMOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyBpbnQgbTY2NTkyX2dldF9mcmFtZShzdHJ1Y3QgdXNiX2dhZGdldCAqX2dhZGdldCkKQEAgLTE1NDQsMTIgKzE1NDIsMTYgQEAKIAogc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X29wcyBtNjY1OTJfZ2FkZ2V0X29wcyA9IHsKIAkuZ2V0X2ZyYW1lCQk9IG02NjU5Ml9nZXRfZnJhbWUsCisJLnN0YXJ0CQkJPSBtNjY1OTJfc3RhcnQsCisJLnN0b3AJCQk9IG02NjU5Ml9zdG9wLAogfTsKIAogc3RhdGljIGludCBfX2V4aXQgbTY2NTkyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBtNjY1OTIJCSptNjY1OTIgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CiAKKwl1c2JfZGVsX2dhZGdldF91ZGMoJm02NjU5Mi0+Z2FkZ2V0KTsKKwogCWRlbF90aW1lcl9zeW5jKCZtNjY1OTItPnRpbWVyKTsKIAlpb3VubWFwKG02NjU5Mi0+cmVnKTsKIAlmcmVlX2lycShwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApLCBtNjY1OTIpOwpAQCAtMTY5MSw5ICsxNjkzLDE2IEBACiAKIAlpbml0X2NvbnRyb2xsZXIobTY2NTkyKTsKIAorCXJldCA9IHVzYl9hZGRfZ2FkZ2V0X3VkYygmcGRldi0+ZGV2LCAmbTY2NTkyLT5nYWRnZXQpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2FkZF91ZGM7CisKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAidmVyc2lvbiAlc1xuIiwgRFJJVkVSX1ZFUlNJT04pOwogCXJldHVybiAwOwogCitlcnJfYWRkX3VkYzoKKwltNjY1OTJfZnJlZV9yZXF1ZXN0KCZtNjY1OTItPmVwWzBdLmVwLCBtNjY1OTItPmVwMF9yZXEpOworCiBjbGVhbl91cDM6CiAjaWZkZWYgQ09ORklHX0hBVkVfQ0xLCiAJaWYgKG02NjU5Mi0+cGRhdGEtPm9uX2NoaXApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9tdl91ZGNfY29yZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L212X3VkY19jb3JlLmMKaW5kZXggYjFhODE0Ni4uNmFkZjM4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L212X3VkY19jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L212X3VkY19jb3JlLmMKQEAgLTExMjgsNiArMTEyOCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbXZfdWRjX3N0YXJ0KHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyLAorCQlpbnQgKCpiaW5kKShzdHJ1Y3QgdXNiX2dhZGdldCAqKSk7CitzdGF0aWMgaW50IG12X3VkY19zdG9wKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKTsKIC8qIGRldmljZSBjb250cm9sbGVyIHVzYl9nYWRnZXRfb3BzIHN0cnVjdHVyZSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZ2FkZ2V0X29wcyBtdl9vcHMgPSB7CiAKQEAgLTExMzksNiArMTE0Miw4IEBACiAKIAkvKiBEKyBwdWxsdXAsIHNvZnR3YXJlLWNvbnRyb2xsZWQgY29ubmVjdC9kaXNjb25uZWN0IHRvIFVTQiBob3N0ICovCiAJLnB1bGx1cAkJPSBtdl91ZGNfcHVsbHVwLAorCS5zdGFydAkJPSBtdl91ZGNfc3RhcnQsCisJLnN0b3AJCT0gbXZfdWRjX3N0b3AsCiB9OwogCiBzdGF0aWMgdm9pZCBtdl91ZGNfdGVzdG1vZGUoc3RydWN0IG12X3VkYyAqdWRjLCB1MTYgaW5kZXgsIGJvb2wgZW50ZXIpCkBAIC0xMjMwLDcgKzEyMzUsNyBAQAogCX0KIH0KIAotaW50IHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyLAorc3RhdGljIGludCBtdl91ZGNfc3RhcnQoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCiAJCWludCAoKmJpbmQpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopKQogewogCXN0cnVjdCBtdl91ZGMgKnVkYyA9IHRoZV9jb250cm9sbGVyOwpAQCAtMTI3MCw5ICsxMjc1LDggQEAKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3Byb2JlX2RyaXZlcik7CiAKLWludCB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQorc3RhdGljIGludCBtdl91ZGNfc3RvcChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKIHsKIAlzdHJ1Y3QgbXZfdWRjICp1ZGMgPSB0aGVfY29udHJvbGxlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTI5Niw3ICsxMzAwLDYgQEAKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTsKIAogc3RhdGljIGludAogdWRjX3ByaW1lX3N0YXR1cyhzdHJ1Y3QgbXZfdWRjICp1ZGMsIHU4IGRpcmVjdGlvbiwgdTE2IHN0YXR1cywgYm9vbCBlbXB0eSkKQEAgLTE4ODAsOSArMTg4MywxMCBAQAogc3RhdGljIGludCBtdl91ZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbXZfdWRjICp1ZGMgPSB0aGVfY29udHJvbGxlcjsKLQogCURFQ0xBUkVfQ09NUExFVElPTihkb25lKTsKIAorCXVzYl9kZWxfZ2FkZ2V0X3VkYygmdWRjLT5nYWRnZXQpOworCiAJdWRjLT5kb25lID0gJmRvbmU7CiAKIAkvKiBmcmVlIG1lbW9yeSBhbGxvY2F0ZWQgaW4gcHJvYmUgKi8KQEAgLTIwNzQsMTEgKzIwNzgsMTIgQEAKIAogCXRoZV9jb250cm9sbGVyID0gdWRjOwogCi0JZ290byBvdXQ7CisJcmV0dmFsID0gdXNiX2FkZF9nYWRnZXRfdWRjKCZkZXYtPmRldiwgJnVkYy0+Z2FkZ2V0KTsKKwlpZiAoIXJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKIGVycm9yOgogCWlmICh1ZGMpCiAJCW12X3VkY19yZW1vdmUodWRjLT5kZXYpOwotb3V0OgogCXJldHVybiByZXR2YWw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjcyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI3Mi5jCmluZGV4IDI5MTUxYzQuLjdmMTIxOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjcyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyNzIuYwpAQCAtMTE3MiwxMSArMTE3MiwxNyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG5ldDIyNzJfc3RhcnQoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCisJCWludCAoKmJpbmQpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopKTsKK3N0YXRpYyBpbnQgbmV0MjI3Ml9zdG9wKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZ2FkZ2V0X29wcyBuZXQyMjcyX29wcyA9IHsKIAkuZ2V0X2ZyYW1lICAgICAgID0gbmV0MjI3Ml9nZXRfZnJhbWUsCiAJLndha2V1cCAgICAgICAgICA9IG5ldDIyNzJfd2FrZXVwLAogCS5zZXRfc2VsZnBvd2VyZWQgPSBuZXQyMjcyX3NldF9zZWxmcG93ZXJlZCwKLQkucHVsbHVwICAgICAgICAgID0gbmV0MjI3Ml9wdWxsdXAKKwkucHVsbHVwCQkJPSBuZXQyMjcyX3B1bGx1cCwKKwkuc3RhcnQJCQk9IG5ldDIyNzJfc3RhcnQsCisJLnN0b3AJCQk9IG5ldDIyNzJfc3RvcCwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTE0NDcsNyArMTQ1Myw3IEBACiAgKiBkaXNjb25uZWN0IGlzIHJlcG9ydGVkLiAgdGhlbiBhIGhvc3QgbWF5IGNvbm5lY3QgYWdhaW4sIG9yCiAgKiB0aGUgZHJpdmVyIG1pZ2h0IGdldCB1bmJvdW5kLgogICovCi1pbnQgdXNiX2dhZGdldF9wcm9iZV9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCitzdGF0aWMgaW50IG5ldDIyNzJfc3RhcnQoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCiAJaW50ICgqYmluZCkoc3RydWN0IHVzYl9nYWRnZXQgKikpCiB7CiAJc3RydWN0IG5ldDIyNzIgKmRldiA9IHRoZV9jb250cm9sbGVyOwpAQCAtMTQ4Nyw3ICsxNDkzLDYgQEAKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3Byb2JlX2RyaXZlcik7CiAKIHN0YXRpYyB2b2lkCiBzdG9wX2FjdGl2aXR5KHN0cnVjdCBuZXQyMjcyICpkZXYsIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQpAQCAtMTUxNSw3ICsxNTIwLDcgQEAKIAluZXQyMjcyX3VzYl9yZWluaXQoZGV2KTsKIH0KIAotaW50IHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCitzdGF0aWMgaW50IG5ldDIyNzJfc3RvcChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKIHsKIAlzdHJ1Y3QgbmV0MjI3MiAqZGV2ID0gdGhlX2NvbnRyb2xsZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE1MzgsNyArMTU0Myw2IEBACiAJZGV2X2RiZyhkZXYtPmRldiwgInVucmVnaXN0ZXJlZCBkcml2ZXIgJyVzJ1xuIiwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBoYW5kbGUgZXAtYS9lcC1iIGRtYSBjb21wbGV0aW9ucyAqLwpAQCAtMjIxNyw2ICsyMjIxLDggQEAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdAogbmV0MjI3Ml9yZW1vdmUoc3RydWN0IG5ldDIyNzIgKmRldikKIHsKKwl1c2JfZGVsX2dhZGdldF91ZGMoJmRldi0+Z2FkZ2V0KTsKKwogCS8qIHN0YXJ0IHdpdGggdGhlIGRyaXZlciBhYm92ZSB1cyAqLwogCWlmIChkZXYtPmRyaXZlcikgewogCQkvKiBzaG91bGQgaGF2ZSBiZWVuIGRvbmUgYWxyZWFkeSBieSBkcml2ZXIgbW9kZWwgY29yZSAqLwpAQCAtMjMxMCw4ICsyMzE2LDE0IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfZGV2X3JlZzsKIAorCXJldCA9IHVzYl9hZGRfZ2FkZ2V0X3VkYyhkZXYtPmRldiwgJmRldi0+Z2FkZ2V0KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9hZGRfdWRjOworCiAJcmV0dXJuIDA7CiAKK2Vycl9hZGRfdWRjOgorCWRldmljZV9yZW1vdmVfZmlsZShkZXYtPmRldiwgJmRldl9hdHRyX3JlZ2lzdGVycyk7CiAgZXJyX2Rldl9yZWc6CiAJZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+Z2FkZ2V0LmRldik7CiAgZXJyX2lycToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCmluZGV4IDQ3NmQ4OGUuLjFlNmVhNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYwpAQCAtMTQxMCwxMSArMTQxMCwxNyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG5ldDIyODBfc3RhcnQoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCisJCWludCAoKmJpbmQpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopKTsKK3N0YXRpYyBpbnQgbmV0MjI4MF9zdG9wKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZ2FkZ2V0X29wcyBuZXQyMjgwX29wcyA9IHsKIAkuZ2V0X2ZyYW1lCT0gbmV0MjI4MF9nZXRfZnJhbWUsCiAJLndha2V1cAkJPSBuZXQyMjgwX3dha2V1cCwKIAkuc2V0X3NlbGZwb3dlcmVkID0gbmV0MjI4MF9zZXRfc2VsZnBvd2VyZWQsCiAJLnB1bGx1cAkJPSBuZXQyMjgwX3B1bGx1cCwKKwkuc3RhcnQJCT0gbmV0MjI4MF9zdGFydCwKKwkuc3RvcAkJPSBuZXQyMjgwX3N0b3AsCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTkzMCw3ICsxOTM2LDcgQEAKICAqIGRpc2Nvbm5lY3QgaXMgcmVwb3J0ZWQuICB0aGVuIGEgaG9zdCBtYXkgY29ubmVjdCBhZ2Fpbiwgb3IKICAqIHRoZSBkcml2ZXIgbWlnaHQgZ2V0IHVuYm91bmQuCiAgKi8KLWludCB1c2JfZ2FkZ2V0X3Byb2JlX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlciwKK3N0YXRpYyBpbnQgbmV0MjI4MF9zdGFydChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlciwKIAkJaW50ICgqYmluZCkoc3RydWN0IHVzYl9nYWRnZXQgKikpCiB7CiAJc3RydWN0IG5ldDIyODAJCSpkZXYgPSB0aGVfY29udHJvbGxlcjsKQEAgLTE5OTQsNyArMjAwMCw2IEBACiAJZGV2LT5kcml2ZXIgPSBOVUxMOwogCXJldHVybiByZXR2YWw7CiB9Ci1FWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKTsKIAogc3RhdGljIHZvaWQKIHN0b3BfYWN0aXZpdHkgKHN0cnVjdCBuZXQyMjgwICpkZXYsIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQpAQCAtMjAyMiw3ICsyMDI3LDcgQEAKIAl1c2JfcmVpbml0IChkZXYpOwogfQogCi1pbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciAoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCitzdGF0aWMgaW50IG5ldDIyODBfc3RvcChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKIHsKIAlzdHJ1Y3QgbmV0MjI4MAkqZGV2ID0gdGhlX2NvbnRyb2xsZXI7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKQEAgLTIwNDksOCArMjA1NCw2IEBACiAJREVCVUcgKGRldiwgInVucmVnaXN0ZXJlZCBkcml2ZXIgJyVzJ1xuIiwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MICh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTsKLQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0yNzMyLDYgKzI3MzUsOCBAQAogewogCXN0cnVjdCBuZXQyMjgwCQkqZGV2ID0gcGNpX2dldF9kcnZkYXRhIChwZGV2KTsKIAorCXVzYl9kZWxfZ2FkZ2V0X3VkYygmZGV2LT5nYWRnZXQpOworCiAJQlVHX09OKGRldi0+ZHJpdmVyKTsKIAogCS8qIHRoZW4gY2xlYW4gdXAgdGhlIHJlc291cmNlcyB3ZSBhbGxvY2F0ZWQgZHVyaW5nIHByb2JlKCkgKi8KQEAgLTI5MTYsNiArMjkyMSw5IEBACiAJcmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlICgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfcmVnaXN0ZXJzKTsKIAlpZiAocmV0dmFsKSBnb3RvIGRvbmU7CiAKKwlyZXR2YWwgPSB1c2JfYWRkX2dhZGdldF91ZGMoJnBkZXYtPmRldiwgJmRldi0+Z2FkZ2V0KTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGRvbmU7CiAJcmV0dXJuIDA7CiAKIGRvbmU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCmluZGV4IDgyZmQyNDkuLjc0MGM3ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCkBAIC0xMzc1LDYgKzEzNzUsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBvbWFwX3VkY19zdGFydChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlciwKKwkJaW50ICgqYmluZCkoc3RydWN0IHVzYl9nYWRnZXQgKikpOworc3RhdGljIGludCBvbWFwX3VkY19zdG9wKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKTsKKwogc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X29wcyBvbWFwX2dhZGdldF9vcHMgPSB7CiAJLmdldF9mcmFtZQkJPSBvbWFwX2dldF9mcmFtZSwKIAkud2FrZXVwCQkJPSBvbWFwX3dha2V1cCwKQEAgLTEzODIsNiArMTM4Niw4IEBACiAJLnZidXNfc2Vzc2lvbgkJPSBvbWFwX3ZidXNfc2Vzc2lvbiwKIAkudmJ1c19kcmF3CQk9IG9tYXBfdmJ1c19kcmF3LAogCS5wdWxsdXAJCQk9IG9tYXBfcHVsbHVwLAorCS5zdGFydAkJCT0gb21hcF91ZGNfc3RhcnQsCisJLnN0b3AJCQk9IG9tYXBfdWRjX3N0b3AsCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMjEwMiw3ICsyMTA4LDcgQEAKIAkJKTsKIH0KIAotaW50IHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyLAorc3RhdGljIGludCBvbWFwX3VkY19zdGFydChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlciwKIAkJaW50ICgqYmluZCkoc3RydWN0IHVzYl9nYWRnZXQgKikpCiB7CiAJaW50CQlzdGF0dXMgPSAtRU5PREVWOwpAQCAtMjE4Niw5ICsyMTkyLDggQEAKIAkJb21hcF91ZGNfZW5hYmxlX2Nsb2NrKDApOwogCXJldHVybiBzdGF0dXM7CiB9Ci1FWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKTsKIAotaW50IHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIgKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQorc3RhdGljIGludCBvbWFwX3VkY19zdG9wKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQogewogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAJaW50CQlzdGF0dXMgPSAtRU5PREVWOwpAQCAtMjIyMiw4ICsyMjI3LDYgQEAKIAlEQkcoInVucmVnaXN0ZXJlZCBkcml2ZXIgJyVzJ1xuIiwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAJcmV0dXJuIHN0YXR1czsKIH0KLUVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7Ci0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMjk5MSw5ICsyOTk0LDE2IEBACiAKIAljcmVhdGVfcHJvY19maWxlKCk7CiAJc3RhdHVzID0gZGV2aWNlX2FkZCgmdWRjLT5nYWRnZXQuZGV2KTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGNsZWFudXA0OworCisJc3RhdHVzID0gdXNiX2FkZF9nYWRnZXRfdWRjKCZwZGV2LT5kZXYsICZ1ZGMtPmdhZGdldCk7CiAJaWYgKCFzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7CiAJLyogSWYgZmFpbCwgZmFsbCB0aHJvdWdoICovCitjbGVhbnVwNDoKKwlyZW1vdmVfcHJvY19maWxlKCk7CisKICNpZmRlZglVU0VfSVNPCiBjbGVhbnVwMzoKIAlmcmVlX2lycShwZGV2LT5yZXNvdXJjZVsyXS5zdGFydCwgdWRjKTsKQEAgLTMwMjksNiArMzAzOSw4IEBACiAKIAlpZiAoIXVkYykKIAkJcmV0dXJuIC1FTk9ERVY7CisKKwl1c2JfZGVsX2dhZGdldF91ZGMoJnVkYy0+Z2FkZ2V0KTsKIAlpZiAodWRjLT5kcml2ZXIpCiAJCXJldHVybiAtRUJVU1k7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9wY2hfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcGNoX3VkYy5jCmluZGV4IDY4ZGJjYzMuLmY5NjYxNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9wY2hfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3BjaF91ZGMuYwpAQCAtMTE3Niw2ICsxMTc2LDkgQEAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKK3N0YXRpYyBpbnQgcGNoX3VkY19zdGFydChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlciwKKwlpbnQgKCpiaW5kKShzdHJ1Y3QgdXNiX2dhZGdldCAqKSk7CitzdGF0aWMgaW50IHBjaF91ZGNfc3RvcChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcik7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9nYWRnZXRfb3BzIHBjaF91ZGNfb3BzID0gewogCS5nZXRfZnJhbWUgPSBwY2hfdWRjX3BjZF9nZXRfZnJhbWUsCiAJLndha2V1cCA9IHBjaF91ZGNfcGNkX3dha2V1cCwKQEAgLTExODMsNiArMTE4Niw4IEBACiAJLnB1bGx1cCA9IHBjaF91ZGNfcGNkX3B1bGx1cCwKIAkudmJ1c19zZXNzaW9uID0gcGNoX3VkY19wY2RfdmJ1c19zZXNzaW9uLAogCS52YnVzX2RyYXcgPSBwY2hfdWRjX3BjZF92YnVzX2RyYXcsCisJLnN0YXJ0CT0gcGNoX3VkY19zdGFydCwKKwkuc3RvcAk9IHBjaF91ZGNfc3RvcCwKIH07CiAKIC8qKgpAQCAtMjY5MCw3ICsyNjk1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyLAorc3RhdGljIGludCBwY2hfdWRjX3N0YXJ0KHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyLAogCWludCAoKmJpbmQpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopKQogewogCXN0cnVjdCBwY2hfdWRjX2RldgkqZGV2ID0gcGNoX3VkYzsKQEAgLTI3MzMsOSArMjczOCw4IEBACiAJZGV2LT5jb25uZWN0ZWQgPSAxOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3Byb2JlX2RyaXZlcik7CiAKLWludCB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQorc3RhdGljIGludCBwY2hfdWRjX3N0b3Aoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCiB7CiAJc3RydWN0IHBjaF91ZGNfZGV2CSpkZXYgPSBwY2hfdWRjOwogCkBAIC0yNzYxLDcgKzI3NjUsNiBAQAogCXBjaF91ZGNfc2V0X2Rpc2Nvbm5lY3QoZGV2KTsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7CiAKIHN0YXRpYyB2b2lkIHBjaF91ZGNfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CkBAIC0yNzc4LDYgKzI3ODEsOCBAQAogewogCXN0cnVjdCBwY2hfdWRjX2RldgkqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCisJdXNiX2RlbF9nYWRnZXRfdWRjKCZkZXYtPmdhZGdldCk7CisKIAkvKiBnYWRnZXQgZHJpdmVyIG11c3Qgbm90IGJlIHJlZ2lzdGVyZWQgKi8KIAlpZiAoZGV2LT5kcml2ZXIpCiAJCWRldl9lcnIoJnBkZXYtPmRldiwKQEAgLTI5NTMsNiArMjk1OCw5IEBACiAKIAkvKiBQdXQgdGhlIGRldmljZSBpbiBkaXNjb25uZWN0ZWQgc3RhdGUgdGlsbCBhIGRyaXZlciBpcyBib3VuZCAqLwogCXBjaF91ZGNfc2V0X2Rpc2Nvbm5lY3QoZGV2KTsKKwlyZXR2YWwgPSB1c2JfYWRkX2dhZGdldF91ZGMoJnBkZXYtPmRldiwgJmRldi0+Z2FkZ2V0KTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZpbmlzaGVkOwogCXJldHVybiAwOwogCiBmaW5pc2hlZDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyNXhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjV4X3VkYy5jCmluZGV4IDc3NDU0NTQuLmU0ZTU5YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyNXhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI1eF91ZGMuYwpAQCAtMTAxMSwxMiArMTAxMSwxOCBAQAogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAorc3RhdGljIGludCBweGEyNXhfc3RhcnQoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCisJCWludCAoKmJpbmQpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopKTsKK3N0YXRpYyBpbnQgcHhhMjV4X3N0b3Aoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9nYWRnZXRfb3BzIHB4YTI1eF91ZGNfb3BzID0gewogCS5nZXRfZnJhbWUJPSBweGEyNXhfdWRjX2dldF9mcmFtZSwKIAkud2FrZXVwCQk9IHB4YTI1eF91ZGNfd2FrZXVwLAogCS52YnVzX3Nlc3Npb24JPSBweGEyNXhfdWRjX3ZidXNfc2Vzc2lvbiwKIAkucHVsbHVwCQk9IHB4YTI1eF91ZGNfcHVsbHVwLAogCS52YnVzX2RyYXcJPSBweGEyNXhfdWRjX3ZidXNfZHJhdywKKwkuc3RhcnQJCT0gcHhhMjV4X3N0YXJ0LAorCS5zdG9wCQk9IHB4YTI1eF9zdG9wLAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTEyNjMsNyArMTI2OSw3IEBACiAgKiBkaXNjb25uZWN0IGlzIHJlcG9ydGVkLiAgdGhlbiBhIGhvc3QgbWF5IGNvbm5lY3QgYWdhaW4sIG9yCiAgKiB0aGUgZHJpdmVyIG1pZ2h0IGdldCB1bmJvdW5kLgogICovCi1pbnQgdXNiX2dhZGdldF9wcm9iZV9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCitzdGF0aWMgaW50IHB4YTI1eF9zdGFydChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlciwKIAkJaW50ICgqYmluZCkoc3RydWN0IHVzYl9nYWRnZXQgKikpCiB7CiAJc3RydWN0IHB4YTI1eF91ZGMJKmRldiA9IHRoZV9jb250cm9sbGVyOwpAQCAtMTMyMiw3ICsxMzI4LDYgQEAKIGJpbmRfZmFpbDoKIAlyZXR1cm4gcmV0dmFsOwogfQotRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3Byb2JlX2RyaXZlcik7CiAKIHN0YXRpYyB2b2lkCiBzdG9wX2FjdGl2aXR5KHN0cnVjdCBweGEyNXhfdWRjICpkZXYsIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQpAQCAtMTM1MSw3ICsxMzU2LDcgQEAKIAl1ZGNfcmVpbml0KGRldik7CiB9CiAKLWludCB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQorc3RhdGljIGludCBweGEyNXhfc3RvcChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKIHsKIAlzdHJ1Y3QgcHhhMjV4X3VkYwkqZGV2ID0gdGhlX2NvbnRyb2xsZXI7CiAKQEAgLTEzNzksOCArMTM4NCw2IEBACiAJZHVtcF9zdGF0ZShkZXYpOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTsKLQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0yMjMxLDggKzIyMzQsMTEgQEAKICNlbmRpZgogCWNyZWF0ZV9kZWJ1Z19maWxlcyhkZXYpOwogCi0JcmV0dXJuIDA7CisJcmV0dmFsID0gdXNiX2FkZF9nYWRnZXRfdWRjKCZwZGV2LT5kZXYsICZkZXYtPmdhZGdldCk7CisJaWYgKCFyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CiAKKwlyZW1vdmVfZGVidWdfZmlsZXMoZGV2KTsKICNpZmRlZglDT05GSUdfQVJDSF9MVUJCT0NLCiBsdWJib2NrX2ZhaWwwOgogCWZyZWVfaXJxKExVQkJPQ0tfVVNCX0RJU0NfSVJRLCBkZXYpOwpAQCAtMjI2MSw2ICsyMjY3LDcgQEAKIHsKIAlzdHJ1Y3QgcHhhMjV4X3VkYyAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKKwl1c2JfZGVsX2dhZGdldF91ZGMoJmRldi0+Z2FkZ2V0KTsKIAlpZiAoZGV2LT5kcml2ZXIpCiAJCXJldHVybiAtRUJVU1k7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jCmluZGV4IDU3NjA3NjkuLjg1YjY4YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYwpAQCAtMTY4MCwxMiArMTY4MCwxOCBAQAogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAorc3RhdGljIGludCBweGEyN3hfdWRjX3N0YXJ0KHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyLAorCQlpbnQgKCpiaW5kKShzdHJ1Y3QgdXNiX2dhZGdldCAqKSk7CitzdGF0aWMgaW50IHB4YTI3eF91ZGNfc3RvcChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcik7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2dhZGdldF9vcHMgcHhhX3VkY19vcHMgPSB7CiAJLmdldF9mcmFtZQk9IHB4YV91ZGNfZ2V0X2ZyYW1lLAogCS53YWtldXAJCT0gcHhhX3VkY193YWtldXAsCiAJLnB1bGx1cAkJPSBweGFfdWRjX3B1bGx1cCwKIAkudmJ1c19zZXNzaW9uCT0gcHhhX3VkY192YnVzX3Nlc3Npb24sCiAJLnZidXNfZHJhdwk9IHB4YV91ZGNfdmJ1c19kcmF3LAorCS5zdGFydAkJPSBweGEyN3hfdWRjX3N0YXJ0LAorCS5zdG9wCQk9IHB4YTI3eF91ZGNfc3RvcCwKIH07CiAKIC8qKgpAQCAtMTc5MSw3ICsxNzk3LDcgQEAKIH0KIAogLyoqCi0gKiB1c2JfZ2FkZ2V0X3Byb2JlX2RyaXZlciAtIFJlZ2lzdGVyIGdhZGdldCBkcml2ZXIKKyAqIHB4YTI3eF9zdGFydCAtIFJlZ2lzdGVyIGdhZGdldCBkcml2ZXIKICAqIEBkcml2ZXI6IGdhZGdldCBkcml2ZXIKICAqIEBiaW5kOiBiaW5kIGZ1bmN0aW9uCiAgKgpAQCAtMTgwNSw3ICsxODExLDcgQEAKICAqCiAgKiBSZXR1cm5zIDAgaWYgbm8gZXJyb3IsIC1FSU5WQUwsIC1FTk9ERVYsIC1FQlVTWSBvdGhlcndpc2UKICAqLwotaW50IHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyLAorc3RhdGljIGludCBweGEyN3hfdWRjX3N0YXJ0KHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyLAogCQlpbnQgKCpiaW5kKShzdHJ1Y3QgdXNiX2dhZGdldCAqKSkKIHsKIAlzdHJ1Y3QgcHhhX3VkYyAqdWRjID0gdGhlX2NvbnRyb2xsZXI7CkBAIC0xODYwLDggKzE4NjYsNiBAQAogCXVkYy0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOwogCXJldHVybiByZXR2YWw7CiB9Ci1FWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKTsKLQogCiAvKioKICAqIHN0b3BfYWN0aXZpdHkgLSBTdG9wcyB1ZGMgZW5kcG9pbnRzCkBAIC0xODg4LDEyICsxODkyLDEyIEBACiB9CiAKIC8qKgotICogdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciAtIFVucmVnaXN0ZXIgdGhlIGdhZGdldCBkcml2ZXIKKyAqIHB4YTI3eF91ZGNfc3RvcCAtIFVucmVnaXN0ZXIgdGhlIGdhZGdldCBkcml2ZXIKICAqIEBkcml2ZXI6IGdhZGdldCBkcml2ZXIKICAqCiAgKiBSZXR1cm5zIDAgaWYgbm8gZXJyb3IsIC1FTk9ERVYsIC1FSU5WQUwgb3RoZXJ3aXNlCiAgKi8KLWludCB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQorc3RhdGljIGludCBweGEyN3hfdWRjX3N0b3Aoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCiB7CiAJc3RydWN0IHB4YV91ZGMgKnVkYyA9IHRoZV9jb250cm9sbGVyOwogCkBAIC0xOTE3LDcgKzE5MjEsNiBAQAogCQlyZXR1cm4gb3RnX3NldF9wZXJpcGhlcmFsKHVkYy0+dHJhbnNjZWl2ZXIsIE5VTEwpOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTsKIAogLyoqCiAgKiBoYW5kbGVfZXAwX2N0cmxfcmVxIC0gaGFuZGxlIGNvbnRyb2wgZW5kcG9pbnQgY29udHJvbCByZXF1ZXN0CkBAIC0yNTE2LDkgKzI1MTksMTQgQEAKIAkJCWRyaXZlcl9uYW1lLCBJUlFfVVNCLCByZXR2YWwpOwogCQlnb3RvIGVycl9pcnE7CiAJfQorCXJldHZhbCA9IHVzYl9hZGRfZ2FkZ2V0X3VkYygmcGRldi0+ZGV2LCAmdWRjLT5nYWRnZXQpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyX2FkZF91ZGM7CiAKIAlweGFfaW5pdF9kZWJ1Z2ZzKHVkYyk7CiAJcmV0dXJuIDA7CitlcnJfYWRkX3VkYzoKKwlmcmVlX2lycSh1ZGMtPmlycSwgdWRjKTsKIGVycl9pcnE6CiAJaW91bm1hcCh1ZGMtPnJlZ3MpOwogZXJyX21hcDoKQEAgLTI1MzcsNiArMjU0NSw3IEBACiAJc3RydWN0IHB4YV91ZGMgKnVkYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKF9kZXYpOwogCWludCBncGlvID0gdWRjLT5tYWNoLT5ncGlvX3B1bGx1cDsKIAorCXVzYl9kZWxfZ2FkZ2V0X3VkYygmdWRjLT5nYWRnZXQpOwogCXVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIodWRjLT5kcml2ZXIpOwogCWZyZWVfaXJxKHVkYy0+aXJxLCB1ZGMpOwogCXB4YV9jbGVhbnVwX2RlYnVnZnModWRjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9yOGE2NjU5Ny11ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9yOGE2NjU5Ny11ZGMuYwppbmRleCA2ZGNjMWY2Li41MWI2NTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcjhhNjY1OTctdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3I4YTY2NTk3LXVkYy5jCkBAIC0xNDEwLDcgKzE0MTAsNyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyBzdHJ1Y3QgcjhhNjY1OTcgKnRoZV9jb250cm9sbGVyOwogCi1pbnQgdXNiX2dhZGdldF9wcm9iZV9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCitzdGF0aWMgaW50IHI4YTY2NTk3X3N0YXJ0KHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyLAogCQlpbnQgKCpiaW5kKShzdHJ1Y3QgdXNiX2dhZGdldCAqKSkKIHsKIAlzdHJ1Y3QgcjhhNjY1OTcgKnI4YTY2NTk3ID0gdGhlX2NvbnRyb2xsZXI7CkBAIC0xNDYyLDkgKzE0NjIsOCBAQAogCiAJcmV0dXJuIHJldHZhbDsKIH0KLUVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF9wcm9iZV9kcml2ZXIpOwogCi1pbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3N0YXRpYyBpbnQgcjhhNjY1OTdfc3RvcChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKIHsKIAlzdHJ1Y3QgcjhhNjY1OTcgKnI4YTY2NTk3ID0gdGhlX2NvbnRyb2xsZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE0ODgsNyArMTQ4Nyw2IEBACiAJcjhhNjY1OTctPmRyaXZlciA9IE5VTEw7CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIGludCByOGE2NjU5N19nZXRfZnJhbWUoc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQpCkBAIC0xNDk5LDEyICsxNDk3LDE1IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9vcHMgcjhhNjY1OTdfZ2FkZ2V0X29wcyA9IHsKIAkuZ2V0X2ZyYW1lCQk9IHI4YTY2NTk3X2dldF9mcmFtZSwKKwkuc3RhcnQJCQk9IHI4YTY2NTk3X3N0YXJ0LAorCS5zdG9wCQkJPSByOGE2NjU5N19zdG9wLAogfTsKIAogc3RhdGljIGludCBfX2V4aXQgcjhhNjY1OTdfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHI4YTY2NTk3CQkqcjhhNjY1OTcgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CiAKKwl1c2JfZGVsX2dhZGdldF91ZGMoJnI4YTY2NTk3LT5nYWRnZXQpOwogCWRlbF90aW1lcl9zeW5jKCZyOGE2NjU5Ny0+dGltZXIpOwogCWlvdW5tYXAocjhhNjY1OTctPnJlZyk7CiAJZnJlZV9pcnEocGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKSwgcjhhNjY1OTcpOwpAQCAtMTY0Nyw5ICsxNjQ4LDE1IEBACiAKIAlpbml0X2NvbnRyb2xsZXIocjhhNjY1OTcpOwogCisJcmV0ID0gdXNiX2FkZF9nYWRnZXRfdWRjKCZwZGV2LT5kZXYsICZyOGE2NjU5Ny0+Z2FkZ2V0KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9hZGRfdWRjOworCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgInZlcnNpb24gJXNcbiIsIERSSVZFUl9WRVJTSU9OKTsKIAlyZXR1cm4gMDsKIAorZXJyX2FkZF91ZGM6CisJcjhhNjY1OTdfZnJlZV9yZXF1ZXN0KCZyOGE2NjU5Ny0+ZXBbMF0uZXAsIHI4YTY2NTk3LT5lcDBfcmVxKTsKIGNsZWFuX3VwMzoKIAlmcmVlX2lycShpcnEsIHI4YTY2NTk3KTsKIGNsZWFuX3VwMjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHNvdGcuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHNvdGcuYwppbmRleCAwZGZlZTI4Li44YmRlZTY3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHNvdGcuYwpAQCAtMjU3NCw3ICsyNTc0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyLAorc3RhdGljIGludCBzM2NfaHNvdGdfc3RhcnQoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCiAJCWludCAoKmJpbmQpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopKQogewogCXN0cnVjdCBzM2NfaHNvdGcgKmhzb3RnID0gb3VyX2hzb3RnOwpAQCAtMjc0NSw5ICsyNzQ1LDggQEAKIAloc290Zy0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOwogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKTsKIAotaW50IHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCitzdGF0aWMgaW50IHMzY19oc290Z19zdG9wKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQogewogCXN0cnVjdCBzM2NfaHNvdGcgKmhzb3RnID0gb3VyX2hzb3RnOwogCWludCBlcDsKQEAgLTI3NzUsNyArMjc3NCw2IEBACiAKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7CiAKIHN0YXRpYyBpbnQgczNjX2hzb3RnX2dhZGdldF9nZXRmcmFtZShzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQogewpAQCAtMjc4NCw2ICsyNzgyLDggQEAKIAogc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X29wcyBzM2NfaHNvdGdfZ2FkZ2V0X29wcyA9IHsKIAkuZ2V0X2ZyYW1lCT0gczNjX2hzb3RnX2dhZGdldF9nZXRmcmFtZSwKKwkuc3RhcnQJCT0gczNjX2hzb3RnX3N0YXJ0LAorCS5zdG9wCQk9IHMzY19oc290Z19zdG9wLAogfTsKIAogLyoqCkBAIC0zNDAzLDYgKzM0MDMsMTAgQEAKIAlmb3IgKGVwbnVtID0gMDsgZXBudW0gPCBTM0NfSFNPVEdfRVBTOyBlcG51bSsrKQogCQlzM2NfaHNvdGdfaW5pdGVwKGhzb3RnLCAmaHNvdGctPmVwc1tlcG51bV0sIGVwbnVtKTsKIAorCXJldCA9IHVzYl9hZGRfZ2FkZ2V0X3VkYygmcGRldi0+ZGV2LCAmaHNvdGctPmdhZGdldCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfYWRkX3VkYzsKKwogCXMzY19oc290Z19jcmVhdGVfZGVidWcoaHNvdGcpOwogCiAJczNjX2hzb3RnX2R1bXAoaHNvdGcpOwpAQCAtMzQxMCw2ICszNDE0LDExIEBACiAJb3VyX2hzb3RnID0gaHNvdGc7CiAJcmV0dXJuIDA7CiAKK2Vycl9hZGRfdWRjOgorCXMzY19oc290Z19nYXRlKHBkZXYsIGZhbHNlKTsKKwljbGtfZGlzYWJsZShoc290Zy0+Y2xrKTsKKwljbGtfcHV0KGhzb3RnLT5jbGspOworCiBlcnJfcmVnczoKIAlpb3VubWFwKGhzb3RnLT5yZWdzKTsKIApAQCAtMzQyNyw2ICszNDM2LDggQEAKIHsKIAlzdHJ1Y3QgczNjX2hzb3RnICpoc290ZyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCisJdXNiX2RlbF9nYWRnZXRfdWRjKCZoc290Zy0+Z2FkZ2V0KTsKKwogCXMzY19oc290Z19kZWxldGVfZGVidWcoaHNvdGcpOwogCiAJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihoc290Zy0+ZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHN1ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHN1ZGMuYwppbmRleCBkNWUzZTFlLi5kYzlmNDI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc3VkYy5jCkBAIC0xMTMzLDcgKzExMzMsNyBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotaW50IHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyLAorc3RhdGljIGludCBzM2NfaHN1ZGNfc3RhcnQoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCiAJCWludCAoKmJpbmQpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopKQogewogCXN0cnVjdCBzM2NfaHN1ZGMgKmhzdWRjID0gdGhlX2NvbnRyb2xsZXI7CkBAIC0xMTgxLDkgKzExODEsOCBAQAogCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKTsKIAotaW50IHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCitzdGF0aWMgaW50IHMzY19oc3VkY19zdG9wKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQogewogCXN0cnVjdCBzM2NfaHN1ZGMgKmhzdWRjID0gdGhlX2NvbnRyb2xsZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEyMTAsNyArMTIwOSw2IEBACiAJCQlkcml2ZXItPmRyaXZlci5uYW1lKTsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7CiAKIHN0YXRpYyBpbmxpbmUgdTMyIHMzY19oc3VkY19yZWFkX2ZyYW1lbm8oc3RydWN0IHMzY19oc3VkYyAqaHN1ZGMpCiB7CkBAIC0xMjI0LDYgKzEyMjIsOCBAQAogCiBzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfb3BzIHMzY19oc3VkY19nYWRnZXRfb3BzID0gewogCS5nZXRfZnJhbWUJPSBzM2NfaHN1ZGNfZ2FkZ2V0X2dldGZyYW1lLAorCS5zdGFydAkJPSBzM2NfaHN1ZGNfc3RhcnQsCisJLnN0b3AJCT0gczNjX2hzdWRjX3N0b3AsCiB9OwogCiBzdGF0aWMgaW50IHMzY19oc3VkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtMTMxMSw3ICsxMzExLDE1IEBACiAKIAlkaXNhYmxlX2lycShoc3VkYy0+aXJxKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKwlyZXQgPSB1c2JfYWRkX2dhZGdldF91ZGMoJnBkZXYtPmRldiwgJmhzdWRjLT5nYWRnZXQpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2FkZF91ZGM7CisKIAlyZXR1cm4gMDsKK2Vycl9hZGRfdWRjOgorCWNsa19kaXNhYmxlKGhzdWRjLT51Y2xrKTsKKwljbGtfcHV0KGhzdWRjLT51Y2xrKTsKIGVycl9jbGs6CiAJZnJlZV9pcnEoaHN1ZGMtPmlycSwgaHN1ZGMpOwogZXJyX2lycToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MyNDEwX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmMKaW5kZXggMTAwZjI2My4uMWMxOWNkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmMKQEAgLTE1NTIsNiArMTU1MiwxMCBAQAogCXJldHVybiAtRU5PVFNVUFA7CiB9CiAKK3N0YXRpYyBpbnQgczNjMjQxMF91ZGNfc3RhcnQoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCisJCWludCAoKmJpbmQpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopKTsKK3N0YXRpYyBpbnQgczNjMjQxMF91ZGNfc3RvcChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcik7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2dhZGdldF9vcHMgczNjMjQxMF9vcHMgPSB7CiAJLmdldF9mcmFtZQkJPSBzM2MyNDEwX3VkY19nZXRfZnJhbWUsCiAJLndha2V1cAkJCT0gczNjMjQxMF91ZGNfd2FrZXVwLApAQCAtMTU1OSw2ICsxNTYzLDggQEAKIAkucHVsbHVwCQkJPSBzM2MyNDEwX3VkY19wdWxsdXAsCiAJLnZidXNfc2Vzc2lvbgkJPSBzM2MyNDEwX3VkY192YnVzX3Nlc3Npb24sCiAJLnZidXNfZHJhdwkJPSBzM2MyNDEwX3ZidXNfZHJhdywKKwkuc3RhcnQJCQk9IHMzYzI0MTBfdWRjX3N0YXJ0LAorCS5zdG9wCQkJPSBzM2MyNDEwX3VkY19zdG9wLAogfTsKIAogc3RhdGljIHZvaWQgczNjMjQxMF91ZGNfY29tbWFuZChlbnVtIHMzYzI0MTBfdWRjX2NtZF9lIGNtZCkKQEAgLTE2NzIsMTAgKzE2NzgsNyBAQAogCXMzYzI0MTBfdWRjX2NvbW1hbmQoUzNDMjQxMF9VRENfUF9FTkFCTEUpOwogfQogCi0vKgotICoJdXNiX2dhZGdldF9wcm9iZV9kcml2ZXIKLSAqLwotaW50IHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyLAorc3RhdGljIGludCBzM2MyNDEwX3VkY19zdGFydChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlciwKIAkJaW50ICgqYmluZCkoc3RydWN0IHVzYl9nYWRnZXQgKikpCiB7CiAJc3RydWN0IHMzYzI0MTBfdWRjICp1ZGMgPSB0aGVfY29udHJvbGxlcjsKQEAgLTE3MzAsMTIgKzE3MzMsOCBAQAogCXVkYy0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOwogCXJldHVybiByZXR2YWw7CiB9Ci1FWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKTsKIAotLyoKLSAqCXVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIKLSAqLwotaW50IHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCitzdGF0aWMgaW50IHMzYzI0MTBfdWRjX3N0b3Aoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCiB7CiAJc3RydWN0IHMzYzI0MTBfdWRjICp1ZGMgPSB0aGVfY29udHJvbGxlcjsKIApAQCAtMTk1NSw2ICsxOTU0LDEwIEBACiAJCQlnb3RvIGVycl92YnVzX2lycTsKIAl9CiAKKwlyZXR2YWwgPSB1c2JfYWRkX2dhZGdldF91ZGMoJnBkZXYtPmRldiwgJnVkYy0+Z2FkZ2V0KTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycl9hZGRfdWRjOworCiAJaWYgKHMzYzI0MTBfdWRjX2RlYnVnZnNfcm9vdCkgewogCQl1ZGMtPnJlZ3NfaW5mbyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlZ2lzdGVycyIsIFNfSVJVR08sCiAJCQkJczNjMjQxMF91ZGNfZGVidWdmc19yb290LApAQCAtMTk2Nyw2ICsxOTcwLDEwIEBACiAKIAlyZXR1cm4gMDsKIAorZXJyX2FkZF91ZGM6CisJaWYgKHVkY19pbmZvICYmICF1ZGNfaW5mby0+dWRjX2NvbW1hbmQgJiYKKwkJCWdwaW9faXNfdmFsaWQodWRjX2luZm8tPnB1bGx1cF9waW4pKQorCQlncGlvX2ZyZWUodWRjX2luZm8tPnB1bGx1cF9waW4pOwogZXJyX3ZidXNfaXJxOgogCWlmICh1ZGNfaW5mbyAmJiB1ZGNfaW5mby0+dmJ1c19waW4gPiAwKQogCQlmcmVlX2lycShncGlvX3RvX2lycSh1ZGNfaW5mby0+dmJ1c19waW4pLCB1ZGMpOwpAQCAtMTk5Miw2ICsxOTk5LDggQEAKIAl1bnNpZ25lZCBpbnQgaXJxOwogCiAJZGV2X2RiZygmcGRldi0+ZGV2LCAiJXMoKVxuIiwgX19mdW5jX18pOworCisJdXNiX2RlbF9nYWRnZXRfdWRjKCZ1ZGMtPmdhZGdldCk7CiAJaWYgKHVkYy0+ZHJpdmVyKQogCQlyZXR1cm4gLUVCVVNZOwogCkBAIC0yMTA1LDggKzIxMTQsNiBAQAogCWRlYnVnZnNfcmVtb3ZlKHMzYzI0MTBfdWRjX2RlYnVnZnNfcm9vdCk7CiB9CiAKLUVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7Ci0KIG1vZHVsZV9pbml0KHVkY19pbml0KTsKIG1vZHVsZV9leGl0KHVkY19leGl0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jCmluZGV4IDBhNTBhMzUuLjcyODU3MmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jCkBAIC0xNzA0LDYgKzE3MDQsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBtdXNiX2dhZGdldF9zdGFydChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlciwKKwkJaW50ICgqYmluZCkoc3RydWN0IHVzYl9nYWRnZXQgKikpOworc3RhdGljIGludCBtdXNiX2dhZGdldF9zdG9wKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZ2FkZ2V0X29wcyBtdXNiX2dhZGdldF9vcGVyYXRpb25zID0gewogCS5nZXRfZnJhbWUJCT0gbXVzYl9nYWRnZXRfZ2V0X2ZyYW1lLAogCS53YWtldXAJCQk9IG11c2JfZ2FkZ2V0X3dha2V1cCwKQEAgLTE3MTEsNiArMTcxNSw4IEBACiAJLyogLnZidXNfc2Vzc2lvbgkJPSBtdXNiX2dhZGdldF92YnVzX3Nlc3Npb24sICovCiAJLnZidXNfZHJhdwkJPSBtdXNiX2dhZGdldF92YnVzX2RyYXcsCiAJLnB1bGx1cAkJCT0gbXVzYl9nYWRnZXRfcHVsbHVwLAorCS5zdGFydAkJCT0gbXVzYl9nYWRnZXRfc3RhcnQsCisJLnN0b3AJCQk9IG11c2JfZ2FkZ2V0X3N0b3AsCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTgzNSw3ICsxODQxLDE2IEBACiAJaWYgKHN0YXR1cyAhPSAwKSB7CiAJCXB1dF9kZXZpY2UoJm11c2ItPmcuZGV2KTsKIAkJdGhlX2dhZGdldCA9IE5VTEw7CisJCXJldHVybiBzdGF0dXM7CiAJfQorCXN0YXR1cyA9IHVzYl9hZGRfZ2FkZ2V0X3VkYyhtdXNiLT5jb250cm9sbGVyLCAmbXVzYi0+Zyk7CisJaWYgKHN0YXR1cykKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gMDsKK2VycjoKKwlkZXZpY2VfdW5yZWdpc3RlcigmbXVzYi0+Zy5kZXYpOworCXRoZV9nYWRnZXQgPSBOVUxMOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTE4NDQsNiArMTg1OSw3IEBACiAJaWYgKG11c2IgIT0gdGhlX2dhZGdldCkKIAkJcmV0dXJuOwogCisJdXNiX2RlbF9nYWRnZXRfdWRjKCZtdXNiLT5nKTsKIAlkZXZpY2VfdW5yZWdpc3RlcigmbXVzYi0+Zy5kZXYpOwogCXRoZV9nYWRnZXQgPSBOVUxMOwogfQpAQCAtMTg2MCw3ICsxODc2LDcgQEAKICAqIEBwYXJhbSBiaW5kIHRoZSBkcml2ZXIncyBiaW5kIGZ1bmN0aW9uCiAgKiBAcmV0dXJuIDwwIGlmIGVycm9yLCAwIGlmIGV2ZXJ5dGhpbmcgaXMgZmluZQogICovCi1pbnQgdXNiX2dhZGdldF9wcm9iZV9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCitzdGF0aWMgaW50IG11c2JfZ2FkZ2V0X3N0YXJ0KHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyLAogCQlpbnQgKCpiaW5kKShzdHJ1Y3QgdXNiX2dhZGdldCAqKSkKIHsKIAlzdHJ1Y3QgbXVzYgkJKm11c2IgPSB0aGVfZ2FkZ2V0OwpAQCAtMTk2Miw3ICsxOTc4LDYgQEAKIGVycjA6CiAJcmV0dXJuIHJldHZhbDsKIH0KLUVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF9wcm9iZV9kcml2ZXIpOwogCiBzdGF0aWMgdm9pZCBzdG9wX2FjdGl2aXR5KHN0cnVjdCBtdXNiICptdXNiLCBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKIHsKQEAgLTIwMTIsNyArMjAyNyw3IEBACiAgKgogICogQHBhcmFtIGRyaXZlciB0aGUgZ2FkZ2V0IGRyaXZlciB0byB1bnJlZ2lzdGVyCiAgKi8KLWludCB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQorc3RhdGljIGludCBtdXNiX2dhZGdldF9zdG9wKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQogewogCXN0cnVjdCBtdXNiCSptdXNiID0gdGhlX2dhZGdldDsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwpAQCAtMjA3MSw4ICsyMDg2LDYgQEAKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTsKLQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL21vZF9nYWRnZXQuYyBiL2RyaXZlcnMvdXNiL3JlbmVzYXNfdXNiaHMvbW9kX2dhZGdldC5jCmluZGV4IGFhNTkxYjYuLmM5YzU2ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3JlbmVzYXNfdXNiaHMvbW9kX2dhZGdldC5jCisrKyBiL2RyaXZlcnMvdXNiL3JlbmVzYXNfdXNiaHMvbW9kX2dhZGdldC5jCkBAIC03MjUsNyArNzI1LDcgQEAKICAqCiAgKi8KIHN0cnVjdCB1c2Joc2dfZ3ByaXYgKnRoZV9jb250cm9sbGVyOwotaW50IHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyLAorc3RhdGljIGludCB1c2Joc2dfZ2FkZ2V0X3N0YXJ0KHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyLAogCQkJICAgIGludCAoKmJpbmQpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopKQogewogCXN0cnVjdCB1c2Joc2dfZ3ByaXYgKmdwcml2ID0gdGhlX2NvbnRyb2xsZXI7CkBAIC03NzUsOSArNzc1LDggQEAKIAogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKTsKIAotaW50IHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCitzdGF0aWMgaW50IHVzYmhzZ19nYWRnZXRfc3RvcChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKIHsKIAlzdHJ1Y3QgdXNiaHNnX2dwcml2ICpncHJpdiA9IHRoZV9jb250cm9sbGVyOwogCXN0cnVjdCB1c2Joc19wcml2ICpwcml2OwpAQCAtODA2LDcgKzgwNSw2IEBACiAKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7CiAKIC8qCiAgKgkJdXNiIGdhZGdldCBvcHMKQEAgLTgyMSw2ICs4MTksOCBAQAogCiBzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfb3BzIHVzYmhzZ19nYWRnZXRfb3BzID0gewogCS5nZXRfZnJhbWUJCT0gdXNiaHNnX2dldF9mcmFtZSwKKwkuc3RhcnQJCQk9IHVzYmhzZ19nYWRnZXRfc3RhcnQsCisJLnN0b3AJCQk9IHVzYmhzZ19nYWRnZXRfc3RvcCwKIH07CiAKIHN0YXRpYyBpbnQgdXNiaHNnX3N0YXJ0KHN0cnVjdCB1c2Joc19wcml2ICpwcml2KQpAQCAtODQwLDYgKzg0MCw3IEBACiAJc3RydWN0IGRldmljZSAqZGV2ID0gdXNiaHNfcHJpdl90b19kZXYocHJpdik7CiAJaW50IHBpcGVfc2l6ZSA9IHVzYmhzX2dldF9kcGFyYW0ocHJpdiwgcGlwZV9zaXplKTsKIAlpbnQgaTsKKwlpbnQgcmV0OwogCiAJZ3ByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiaHNnX2dwcml2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFncHJpdikgewpAQCAtODUwLDYgKzg1MSw3IEBACiAJdWVwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVzYmhzZ191ZXApICogcGlwZV9zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXVlcCkgewogCQlkZXZfZXJyKGRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBlcFxuIik7CisJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gdXNiaHNfbW9kX2dhZGdldF9wcm9iZV9lcnJfZ3ByaXY7CiAJfQogCkBAIC05MTEsMjAgKzkxMywyOCBAQAogCiAJdGhlX2NvbnRyb2xsZXIgPSBncHJpdjsKIAorCXJldCA9IHVzYl9hZGRfZ2FkZ2V0X3VkYyhkZXYsICZncHJpdi0+Z2FkZ2V0KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9hZGRfdWRjOworCisKIAlkZXZfaW5mbyhkZXYsICJnYWRnZXQgcHJvYmVkXG4iKTsKIAogCXJldHVybiAwOworZXJyX2FkZF91ZGM6CisJa2ZyZWUoZ3ByaXYtPnVlcCk7CiAKIHVzYmhzX21vZF9nYWRnZXRfcHJvYmVfZXJyX2dwcml2OgogCWtmcmVlKGdwcml2KTsKIAotCXJldHVybiAtRU5PTUVNOworCXJldHVybiByZXQ7CiB9CiAKIHZvaWQgX19kZXZleGl0IHVzYmhzX21vZF9nYWRnZXRfcmVtb3ZlKHN0cnVjdCB1c2Joc19wcml2ICpwcml2KQogewogCXN0cnVjdCB1c2Joc2dfZ3ByaXYgKmdwcml2ID0gdXNiaHNnX3ByaXZfdG9fZ3ByaXYocHJpdik7CiAKKwl1c2JfZGVsX2dhZGdldF91ZGMoJmdwcml2LT5nYWRnZXQpOwogCWtmcmVlKGdwcml2LT51ZXApOwogCWtmcmVlKGdwcml2KTsKIH0K