ZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3MzOTAvbmV0L01ha2VmaWxlCmluZGV4IDkwZDRkMGUuLjY3NzVhODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zMzkwL25ldC9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgUy8zOTAgbmV0d29yayBkZXZpY2VzCiAjCiAKLWN0Yy1vYmpzIDo9IGN0Y21haW4ubyBjdGN0dHkubyBjdGNkYnVnLm8KK2N0Yy1vYmpzIDo9IGN0Y21haW4ubyBjdGNkYnVnLm8KIAogb2JqLSQoQ09ORklHX0lVQ1YpICs9IGl1Y3Yubwogb2JqLSQoQ09ORklHX05FVElVQ1YpICs9IG5ldGl1Y3YubyBmc20ubwpAQCAtMTAsNiArMTAsNyBAQAogb2JqLSQoQ09ORklHX0NUQykgKz0gY3RjLm8gZnNtLm8gY3UzMDg4Lm8KIG9iai0kKENPTkZJR19MQ1MpICs9IGxjcy5vIGN1MzA4OC5vCiBvYmotJChDT05GSUdfQ0xBVykgKz0gY2xhdy5vIGN1MzA4OC5vCitvYmotJChDT05GSUdfTVBDKSArPSBjdGNtcGMubyBmc20ubyBjdTMwODgubwogcWV0aC15IDo9IHFldGhfbWFpbi5vIHFldGhfbXBjLm8gcWV0aF9zeXMubyBxZXRoX2VkZHAubyAKIHFldGgtJChDT05GSUdfUFJPQ19GUykgKz0gcWV0aF9wcm9jLm8KIG9iai0kKENPTkZJR19RRVRIKSArPSBxZXRoLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtYWluLmMKaW5kZXggYWY5ZjIxMi4uZTJjY2FmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGNtYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtYWluLmMKQEAgLTYsNyArNiw3IEBACiAgKiBGaXhlcyBieSA6IEpvY2hlbiBS9mhyaWcgKHJvZWhyaWdAZGUuaWJtLmNvbSkKICAqICAgICAgICAgICAgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+CiAJICAgICAgUGV0ZXIgVGllZGVtYW5uIChwdGllZGVtQGRlLmlibS5jb20pCi0gKiBEcml2ZXIgTW9kZWwgc3R1ZmYgYnkgOiBDb3JuZWxpYSBIdWNrIDxodWNrY0BkZS5pYm0uY29tPgorICogRHJpdmVyIE1vZGVsIHN0dWZmIGJ5IDogQ29ybmVsaWEgSHVjayA8Y29ybmVsaWEuaHVja0BkZS5pYm0uY29tPgogICoKICAqIERvY3VtZW50YXRpb24gdXNlZDoKICAqICAtIFByaW5jaXBsZXMgb2YgT3BlcmF0aW9uIChJQk0gZG9jIzogU0EyMi03MjAxLTA2KQpAQCAtNjUsNyArNjUsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2lkYWxzLmg+CiAKLSNpbmNsdWRlICJjdGN0dHkuaCIKICNpbmNsdWRlICJmc20uaCIKICNpbmNsdWRlICJjdTMwODguaCIKIApAQCAtNDc5LDEwICs0NzgsNyBAQAogCQlza2ItPmRldiA9IHBza2ItPmRldjsKIAkJc2tiLT5wcm90b2NvbCA9IHBza2ItPnByb3RvY29sOwogCQlwc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQkJaWYgKGNoLT5wcm90b2NvbCA9PSBDVENfUFJPVE9fTElOVVhfVFRZKQotCQkJY3RjX3R0eV9uZXRpZl9yeChza2IpOwotCQllbHNlCi0JCQluZXRpZl9yeF9uaShza2IpOworCQluZXRpZl9yeF9uaShza2IpOwogCQkvKioKIAkJICogU3VjY2Vzc2Z1bCByeDsgcmVzZXQgbG9nZmxhZ3MKIAkJICovCkBAIC01NTcsOCArNTUzLDcgQEAKIAlEQkZfVEVYVCh0cmFjZSwgNSwgX19GVU5DVElPTl9fKTsKIAlpZiAoc2Vuc2UgJiBTTlMwX0lOVEVSVkVOVElPTl9SRVEpIHsKIAkJaWYgKHNlbnNlICYgMHgwMSkgewotCQkJaWYgKGNoLT5wcm90b2NvbCAhPSBDVENfUFJPVE9fTElOVVhfVFRZKQotCQkJCWN0Y19wcl9kZWJ1ZygiJXM6IEludGVyZmFjZSBkaXNjLiBvciBTZWwuIHJlc2V0ICIKKwkJCWN0Y19wcl9kZWJ1ZygiJXM6IEludGVyZmFjZSBkaXNjLiBvciBTZWwuIHJlc2V0ICIKIAkJCQkJIihyZW1vdGUpXG4iLCBjaC0+aWQpOwogCQkJZnNtX2V2ZW50KGNoLT5mc20sIENIX0VWRU5UX1VDX1JDUkVTRVQsIGNoKTsKIAkJfSBlbHNlIHsKQEAgLTIwMzQsNyArMjAyOSw2IEBACiBkZXZfYWN0aW9uX2NodXAoZnNtX2luc3RhbmNlICogZmksIGludCBldmVudCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgYXJnOwotCXN0cnVjdCBjdGNfcHJpdiAqcHJpdnB0ciA9IGRldi0+cHJpdjsKIAogCURCRl9URVhUKHRyYWNlLCAzLCBfX0ZVTkNUSU9OX18pOwogCXN3aXRjaCAoZnNtX2dldHN0YXRlKGZpKSkgewpAQCAtMjA0OSw4ICsyMDQzLDYgQEAKIAkJCQlmc21fbmV3c3RhdGUoZmksIERFVl9TVEFURV9SVU5OSU5HKTsKIAkJCQljdGNfcHJfaW5mbygiJXM6IGNvbm5lY3RlZCB3aXRoIHJlbW90ZSBzaWRlXG4iLAogCQkJCQkgICAgZGV2LT5uYW1lKTsKLQkJCQlpZiAocHJpdnB0ci0+cHJvdG9jb2wgPT0gQ1RDX1BST1RPX0xJTlVYX1RUWSkKLQkJCQkJY3RjX3R0eV9zZXRjYXJyaWVyKGRldiwgMSk7CiAJCQkJY3RjX2NsZWFyX2J1c3koZGV2KTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMjA1OSw4ICsyMDUxLDYgQEAKIAkJCQlmc21fbmV3c3RhdGUoZmksIERFVl9TVEFURV9SVU5OSU5HKTsKIAkJCQljdGNfcHJfaW5mbygiJXM6IGNvbm5lY3RlZCB3aXRoIHJlbW90ZSBzaWRlXG4iLAogCQkJCQkgICAgZGV2LT5uYW1lKTsKLQkJCQlpZiAocHJpdnB0ci0+cHJvdG9jb2wgPT0gQ1RDX1BST1RPX0xJTlVYX1RUWSkKLQkJCQkJY3RjX3R0eV9zZXRjYXJyaWVyKGRldiwgMSk7CiAJCQkJY3RjX2NsZWFyX2J1c3koZGV2KTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMjA4NiwxNCArMjA3NiwxMCBAQAogc3RhdGljIHZvaWQKIGRldl9hY3Rpb25fY2hkb3duKGZzbV9pbnN0YW5jZSAqIGZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGFyZzsKLQlzdHJ1Y3QgY3RjX3ByaXYgKnByaXZwdHIgPSBkZXYtPnByaXY7CiAKIAlEQkZfVEVYVCh0cmFjZSwgMywgX19GVU5DVElPTl9fKTsKIAlzd2l0Y2ggKGZzbV9nZXRzdGF0ZShmaSkpIHsKIAkJY2FzZSBERVZfU1RBVEVfUlVOTklORzoKLQkJCWlmIChwcml2cHRyLT5wcm90b2NvbCA9PSBDVENfUFJPVE9fTElOVVhfVFRZKQotCQkJCWN0Y190dHlfc2V0Y2FycmllcihkZXYsIDApOwogCQkJaWYgKGV2ZW50ID09IERFVl9FVkVOVF9UWERPV04pCiAJCQkJZnNtX25ld3N0YXRlKGZpLCBERVZfU1RBVEVfU1RBUlRXQUlUX1RYKTsKIAkJCWVsc2UKQEAgLTIzOTcsOCArMjM4Myw2IEBACiAJICovCiAJaWYgKGZzbV9nZXRzdGF0ZShwcml2cHRyLT5mc20pICE9IERFVl9TVEFURV9SVU5OSU5HKSB7CiAJCWZzbV9ldmVudChwcml2cHRyLT5mc20sIERFVl9FVkVOVF9TVEFSVCwgZGV2KTsKLQkJaWYgKHByaXZwdHItPnByb3RvY29sID09IENUQ19QUk9UT19MSU5VWF9UVFkpCi0JCQlyZXR1cm4gLUVCVVNZOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXByaXZwdHItPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJcHJpdnB0ci0+c3RhdHMudHhfZXJyb3JzKys7CkBAIC0yNjA4LDIwICsyNTkyLDEzIEBACiAJaWYgKCFkZXYpCiAJCXJldHVybjsKIAlwcml2cHRyID0gKHN0cnVjdCBjdGNfcHJpdiAqKSBkZXYtPnByaXY7Ci0JaWYgKHByaXZwdHItPnByb3RvY29sICE9IENUQ19QUk9UT19MSU5VWF9UVFkpCi0JCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JZWxzZQotCQljdGNfdHR5X3VucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIH0KIAogc3RhdGljIGludAogY3RjX25ldGRldl9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKIHsKLQlzdHJ1Y3QgY3RjX3ByaXYgKnByaXZwdHIgPSAoc3RydWN0IGN0Y19wcml2ICopIGRldi0+cHJpdjsKLQlpZiAocHJpdnB0ci0+cHJvdG9jb2wgIT0gQ1RDX1BST1RPX0xJTlVYX1RUWSkKLQkJcmV0dXJuIHJlZ2lzdGVyX25ldGRldihkZXYpOwotCWVsc2UKLQkJcmV0dXJuIGN0Y190dHlfcmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJcmV0dXJuIHJlZ2lzdGVyX25ldGRldihkZXYpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjY2Nyw3ICsyNjQ0LDkgQEAKIAlpZiAoIXByaXYpCiAJCXJldHVybiAtRU5PREVWOwogCXNzY2FuZihidWYsICIldSIsICZ2YWx1ZSk7Ci0JaWYgKCh2YWx1ZSA8IDApIHx8ICh2YWx1ZSA+IENUQ19QUk9UT19NQVgpKQorCWlmICghKCh2YWx1ZSA9PSBDVENfUFJPVE9fUzM5MCkgIHx8CisJICAgICAgKHZhbHVlID09IENUQ19QUk9UT19MSU5VWCkgfHwKKwkgICAgICAodmFsdWUgPT0gQ1RDX1BST1RPX09TMzkwKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCXByaXYtPnByb3RvY29sID0gdmFsdWU7CiAKQEAgLTI4OTcsMTAgKzI4NzYsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAocHJpdnB0ci0+cHJvdG9jb2wgPT0gQ1RDX1BST1RPX0xJTlVYX1RUWSkKLQkJc3RybGNweShkZXYtPm5hbWUsICJjdGN0dHklZCIsIElGTkFNU0laKTsKLQllbHNlCi0JCXN0cmxjcHkoZGV2LT5uYW1lLCAiY3RjJWQiLCBJRk5BTVNJWik7CisJc3RybGNweShkZXYtPm5hbWUsICJjdGMlZCIsIElGTkFNU0laKTsKIAogCWZvciAoZGlyZWN0aW9uID0gUkVBRDsgZGlyZWN0aW9uIDw9IFdSSVRFOyBkaXJlY3Rpb24rKykgewogCQlwcml2cHRyLT5jaGFubmVsW2RpcmVjdGlvbl0gPQpAQCAtMzA0Niw3ICszMDIyLDYgQEAKIHsKIAlEQkZfVEVYVChzZXR1cCwgMywgX19GVU5DVElPTl9fKTsKIAl1bnJlZ2lzdGVyX2N1MzA4OF9kaXNjaXBsaW5lKCZjdGNfZ3JvdXBfZHJpdmVyKTsKLQljdGNfdHR5X2NsZWFudXAoKTsKIAljdGNfdW5yZWdpc3Rlcl9kYmZfdmlld3MoKTsKIAljdGNfcHJfaW5mbygiQ1RDIGRyaXZlciB1bmxvYWRlZFxuIik7CiB9CkBAIC0zMDczLDEwICszMDQ4LDggQEAKIAkJY3RjX3ByX2NyaXQoImN0Y19pbml0IGZhaWxlZCB3aXRoIGN0Y19yZWdpc3Rlcl9kYmZfdmlld3MgcmMgPSAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JY3RjX3R0eV9pbml0KCk7CiAJcmV0ID0gcmVnaXN0ZXJfY3UzMDg4X2Rpc2NpcGxpbmUoJmN0Y19ncm91cF9kcml2ZXIpOwogCWlmIChyZXQpIHsKLQkJY3RjX3R0eV9jbGVhbnVwKCk7CiAJCWN0Y191bnJlZ2lzdGVyX2RiZl92aWV3cygpOwogCX0KIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGNtYWluLmggYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21haW4uaAppbmRleCBkMmU4MzVjLi43ZjMwNWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21haW4uaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21haW4uaApAQCAtMzUsNyArMzUsOSBAQAogI2luY2x1ZGUgPGFzbS9jY3dkZXYuaD4KICNpbmNsdWRlIDxhc20vY2N3Z3JvdXAuaD4KIAotI2luY2x1ZGUgImN0Y3R0eS5oIgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorCiAjaW5jbHVkZSAiZnNtLmgiCiAjaW5jbHVkZSAiY3UzMDg4LmgiCiAKQEAgLTUwLDkgKzUyLDcgQEAKIAogI2RlZmluZSBDVENfUFJPVE9fUzM5MCAgICAgICAgICAwCiAjZGVmaW5lIENUQ19QUk9UT19MSU5VWCAgICAgICAgIDEKLSNkZWZpbmUgQ1RDX1BST1RPX0xJTlVYX1RUWSAgICAgMgogI2RlZmluZSBDVENfUFJPVE9fT1MzOTAgICAgICAgICAzCi0jZGVmaW5lIENUQ19QUk9UT19NQVggICAgICAgICAgIDMKIAogI2RlZmluZSBDVENfQlVGU0laRV9MSU1JVCAgICAgICA2NTUzNQogI2RlZmluZSBDVENfQlVGU0laRV9ERUZBVUxUICAgICAzMjc2OApAQCAtMjU3LDE1ICsyNTcsMTMgQEAKIGN0Y19jbGVhcl9idXN5KHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KQogewogCWNsZWFyX2JpdCgwLCAmKCgoc3RydWN0IGN0Y19wcml2ICopIGRldi0+cHJpdiktPnRidXN5KSk7Ci0JaWYgKCgoc3RydWN0IGN0Y19wcml2ICopZGV2LT5wcml2KS0+cHJvdG9jb2wgIT0gQ1RDX1BST1RPX0xJTlVYX1RUWSkKLQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KIAogc3RhdGljIF9faW5saW5lX18gaW50CiBjdGNfdGVzdF9hbmRfc2V0X2J1c3koc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpCiB7Ci0JaWYgKCgoc3RydWN0IGN0Y19wcml2ICopZGV2LT5wcml2KS0+cHJvdG9jb2wgIT0gQ1RDX1BST1RPX0xJTlVYX1RUWSkKLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmKChzdHJ1Y3QgY3RjX3ByaXYgKikgZGV2LT5wcml2KS0+dGJ1c3kpOwogfQogCg==