ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IGE3ZWE4ZTMuLmQ3ODM1OWYgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtNTE4LDYgKzUxOCwxNCBAQAogRTogemFiQHphYmJvLm5ldAogRDogbWFlc3RybyBwY2kgc291bmQKIAorTTogRGF2aWQgQnJvd25lbGwKK0Q6IEtlcm5lbCBlbmdpbmVlciwgbWVudG9yLCBhbmQgZnJpZW5kLiAgTWFpbnRhaW5lZCBVU0IgRUhDSSBhbmQKK0Q6IGdhZGdldCBsYXllcnMsIFNQSSBzdWJzeXN0ZW0sIEdQSU8gc3Vic3lzdGVtLCBhbmQgbW9yZSB0aGFuIGEgZmV3CitEOiBkZXZpY2UgZHJpdmVycy4gIEhpcyBlbmNvdXJhZ2VtZW50IGFsc28gaGVscGVkIG1hbnkgZW5naW5lZXJzIGdldAorRDogc3RhcnRlZCB3b3JraW5nIG9uIHRoZSBMaW51eCBrZXJuZWwuICBEYXZpZCBwYXNzZWQgYXdheSBpbiBlYXJseQorRDogMjAxMSwgYW5kIHdpbGwgYmUgZ3JlYXRseSBtaXNzZWQuCitXOiBodHRwczovL2xrbWwub3JnL2xrbWwvMjAxMS80LzUvMzYKKwogTjogR2FyeSBCcnViYWtlcgogRTogeGF2eWVyQGl4Lm5ldGNvbS5jb20KIEQ6IFVTQiBTZXJpYWwgRW1wZWcgRW1wZWctY2FyIE1hcmsgSS9JSSBEcml2ZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggZDlhMjAzYi4uZmQyNDhhMzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC0yNTk4LDYgKzI1OTgsOCBAQAogCQkJCQl1bmxvY2sgZWplY3RhYmxlIG1lZGlhKTsKIAkJCQltID0gTUFYX1NFQ1RPUlNfNjQgKGRvbid0IHRyYW5zZmVyIG1vcmUKIAkJCQkJdGhhbiA2NCBzZWN0b3JzID0gMzIgS0IgYXQgYSB0aW1lKTsKKwkJCQluID0gSU5JVElBTF9SRUFEMTAgKGZvcmNlIGEgcmV0cnkgb2YgdGhlCisJCQkJCWluaXRpYWwgUkVBRCgxMCkgY29tbWFuZCk7CiAJCQkJbyA9IENBUEFDSVRZX09LIChhY2NlcHQgdGhlIGNhcGFjaXR5CiAJCQkJCXJlcG9ydGVkIGJ5IHRoZSBkZXZpY2UpOwogCQkJCXIgPSBJR05PUkVfUkVTSURVRSAodGhlIGRldmljZSByZXBvcnRzCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDI5ODAxZjcuLmI1ZWE0ZDAgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC00MjUyLDggKzQyNTIsNyBAQAogRjoJaW5jbHVkZS9saW51eC9tbWMvCiAKIE1VTFRJTUVESUEgQ0FSRCAoTU1DKSBFVEMuIE9WRVIgU1BJCi1NOglEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLVM6CU9kZCBGaXhlcworUzoJT3JwaGFuCiBGOglkcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYwogRjoJaW5jbHVkZS9saW51eC9zcGkvbW1jX3NwaS5oCiAKQEAgLTQ2MDMsNyArNDYwMiw2IEBACiAKIE9NQVAgVVNCIFNVUFBPUlQKIE06CUZlbGlwZSBCYWxiaSA8YmFsYmlAdGkuY29tPgotTToJRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiBMOglsaW51eC11c2JAdmdlci5rZXJuZWwub3JnCiBMOglsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9iYWxiaS91c2IuZ2l0CkBAIC01OTg0LDcgKzU5ODIsNiBAQAogRjoJZHJpdmVycy9zdGFnaW5nL3R0eS9zcGVjaWFsaXgqCiAKIFNQSSBTVUJTWVNURU0KLU06CURhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogTToJR3JhbnQgTGlrZWx5IDxncmFudC5saWtlbHlAc2VjcmV0bGFiLmNhPgogTDoJc3BpLWRldmVsLWdlbmVyYWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBROglodHRwOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcHJvamVjdC9zcGktZGV2ZWwtZ2VuZXJhbC9saXN0LwpAQCAtNjQzMiw5ICs2NDI5LDggQEAKIEY6CWRyaXZlcnMvdXNiL21pc2MvcmlvNTAwKgogCiBVU0IgRUhDSSBEUklWRVIKLU06CURhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogTDoJbGludXgtdXNiQHZnZXIua2VybmVsLm9yZwotUzoJT2RkIEZpeGVzCitTOglPcnBoYW4KIEY6CURvY3VtZW50YXRpb24vdXNiL2VoY2kudHh0CiBGOglkcml2ZXJzL3VzYi9ob3N0L2VoY2kqCiAKQEAgLTY0NDgsOSArNjQ0NCwxMCBAQAogRjoJZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS8KIAogVVNCIEdBREdFVC9QRVJJUEhFUkFMIFNVQlNZU1RFTQotTToJRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitNOglGZWxpcGUgQmFsYmkgPGJhbGJpQHRpLmNvbT4KIEw6CWxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cubGludXgtdXNiLm9yZy9nYWRnZXQKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYmFsYmkvdXNiLmdpdAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy91c2IvZ2FkZ2V0LwogRjoJaW5jbHVkZS9saW51eC91c2IvZ2FkZ2V0KgpAQCAtNjQ5Miw5ICs2NDg5LDggQEAKIEY6CXNvdW5kL3VzYi9taWRpLioKIAogVVNCIE9IQ0kgRFJJVkVSCi1NOglEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIEw6CWxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKLVM6CU9kZCBGaXhlcworUzoJT3JwaGFuCiBGOglEb2N1bWVudGF0aW9uL3VzYi9vaGNpLnR4dAogRjoJZHJpdmVycy91c2IvaG9zdC9vaGNpKgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYwppbmRleCBkODU1OTM0Li5mNWE1MjIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvZG1hLmMKQEAgLTI4NCwxNCArMjg0LDE1IEBACiAJZG1hX2Jhc2UgPSBpb3JlbWFwKHJlc1swXS5zdGFydCwgcmVzb3VyY2Vfc2l6ZSgmcmVzWzBdKSk7CiAJaWYgKCFkbWFfYmFzZSkgewogCQlwcl9lcnIoIiVzOiBVbmFibGUgdG8gaW9yZW1hcFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBleGl0X2RldmljZV9wdXQ7CiAJfQogCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgcmVzLCBBUlJBWV9TSVpFKHJlcykpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IFVuYWJsZSB0byBhZGQgcmVzb3VyY2VzIGZvciAlcyVkXG4iLAogCQkJX19mdW5jX18sIHBkZXYtPm5hbWUsIHBkZXYtPmlkKTsKLQkJZ290byBleGl0X2RldmljZV9kZWw7CisJCWdvdG8gZXhpdF9kZXZpY2VfcHV0OwogCX0KIAogCXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb21hcF9zeXN0ZW1fZG1hX3BsYXRfaW5mbyksIEdGUF9LRVJORUwpOwpAQCAtMjk5LDcgKzMwMCw3IEBACiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiBVbmFibGUgdG8gYWxsb2NhdGUgJ3AnIGZvciAlc1xuIiwKIAkJCV9fZnVuY19fLCBwZGV2LT5uYW1lKTsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBleGl0X2RldmljZV9wdXQ7CisJCWdvdG8gZXhpdF9kZXZpY2VfZGVsOwogCX0KIAogCWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb21hcF9kbWFfZGV2X2F0dHIpLCBHRlBfS0VSTkVMKTsKQEAgLTM4MCwxMCArMzgxLDEwIEBACiAJa2ZyZWUoZCk7CiBleGl0X3JlbGVhc2VfcDoKIAlrZnJlZShwKTsKLWV4aXRfZGV2aWNlX3B1dDoKLQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOwogZXhpdF9kZXZpY2VfZGVsOgogCXBsYXRmb3JtX2RldmljZV9kZWwocGRldik7CitleGl0X2RldmljZV9wdXQ6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTI0MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jCmluZGV4IGQ1NDk2OWIuLjVkZTZlYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jCkBAIC0yNiwxMyArMjYsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAotI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPHBsYXQvYm9hcmQuaD4KICNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgogI2luY2x1ZGUgPHBsYXQvZ3BtYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYwppbmRleCBhZTI5NjNhLi41ZGFjOTc0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYwpAQCAtNjIyLDE5ICs2MjIsMTkgQEAKIAkJCSBPTUFQX01VWF9NT0RFMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwxX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwxX2RhdGEgX19pbml0ZGF0YSA9IHsKIAkuaWQJCT0gMCwKIAkucGFkcwkJPSBzZXJpYWwxX3BhZHMsCiAJLnBhZHNfY250CT0gQVJSQVlfU0laRShzZXJpYWwxX3BhZHMpLAogfTsKIAotc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgc2VyaWFsMl9kYXRhID0geworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgc2VyaWFsMl9kYXRhIF9faW5pdGRhdGEgPSB7CiAJLmlkCQk9IDEsCiAJLnBhZHMJCT0gc2VyaWFsMl9wYWRzLAogCS5wYWRzX2NudAk9IEFSUkFZX1NJWkUoc2VyaWFsMl9wYWRzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDNfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDNfZGF0YSBfX2luaXRkYXRhID0gewogCS5pZAkJPSAyLAogCS5wYWRzCQk9IHNlcmlhbDNfcGFkcywKIAkucGFkc19jbnQJPSBBUlJBWV9TSVpFKHNlcmlhbDNfcGFkcyksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCmluZGV4IDczZmE5MGIuLjYzZGUyZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCkBAIC0yNTgsNyArMjU4LDcgQEAKIAl7IEVUSF9LUzg4NTFfSVJRLAlHUElPRl9JTiwJCSJldGhfaXJxIgl9LAogfTsKIAotc3RhdGljIGludCBvbWFwX2V0aGVybmV0X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfZXRoZXJuZXRfaW5pdCh2b2lkKQogewogCWludCBzdGF0dXM7CiAKQEAgLTMyMiw2ICszMjIsNyBAQAogCQkuZ3Bpb193cAk9IC1FSU5WQUwsCiAJCS5ub25yZW1vdmFibGUgICA9IHRydWUsCiAJCS5vY3JfbWFzawk9IE1NQ19WRERfMjlfMzAsCisJCS5ub19vZmZfaW5pdAk9IHRydWUsCiAJfSwKIAl7CiAJCS5tbWMJCT0gMSwKQEAgLTY4MSwxOSArNjgyLDE5IEBACiAJCQkgT01BUF9QSU5fT1VUUFVUIHwgT01BUF9NVVhfTU9ERTApLAogfTsKIAotc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgc2VyaWFsMl9kYXRhID0geworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgc2VyaWFsMl9kYXRhIF9faW5pdGRhdGEgPSB7CiAJLmlkCQk9IDEsCiAJLnBhZHMJCT0gc2VyaWFsMl9wYWRzLAogCS5wYWRzX2NudAk9IEFSUkFZX1NJWkUoc2VyaWFsMl9wYWRzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDNfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDNfZGF0YSBfX2luaXRkYXRhID0gewogCS5pZAkJPSAyLAogCS5wYWRzCQk9IHNlcmlhbDNfcGFkcywKIAkucGFkc19jbnQJPSBBUlJBWV9TSVpFKHNlcmlhbDNfcGFkcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWw0X2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWw0X2RhdGEgX19pbml0ZGF0YSA9IHsKIAkuaWQJCT0gMywKIAkucGFkcwkJPSBzZXJpYWw0X3BhZHMsCiAJLnBhZHNfY250CT0gQVJSQVlfU0laRShzZXJpYWw0X3BhZHMpLApAQCAtNzI5LDcgKzczMCw3IEBACiAKIAlpZiAob21hcF9yZXYoKSA9PSBPTUFQNDQzMF9SRVZfRVMxXzApCiAJCXBhY2thZ2UgPSBPTUFQX1BBQ0tBR0VfQ0JMOwotCW9tYXA0X211eF9pbml0KGJvYXJkX211eCwgcGFja2FnZSk7CisJb21hcDRfbXV4X2luaXQoYm9hcmRfbXV4LCBOVUxMLCBwYWNrYWdlKTsKIAogCW9tYXBfYm9hcmRfY29uZmlnID0gc2RwNDQzMF9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoc2RwNDQzMF9jb25maWcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYwppbmRleCBmM2JlYjhlLi5iMTI0YmRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYwpAQCAtMjcsMTMgKzI3LDEzIEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxwbGF0L2xlZC5oPgogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1LmMKaW5kZXggYzYzMTE1Yi4uNzc0NTZkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNS5jCkBAIC02Myw4ICs2Myw2IEBACiAjZGVmaW5lIFNCX1QzNV9TTVNDOTExWF9DUwk0CiAjZGVmaW5lIFNCX1QzNV9TTVNDOTExWF9HUElPCTY1CiAKLSNkZWZpbmUgTkFORF9CTE9DS19TSVpFCQlTWl8xMjhLCi0KICNpZiBkZWZpbmVkKENPTkZJR19TTVNDOTExWCkgfHwgZGVmaW5lZChDT05GSUdfU01TQzkxMVhfTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+CiAjaW5jbHVkZSA8cGxhdC9ncG1jLXNtc2M5MTF4Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNTE3LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNTE3LmMKaW5kZXggMDhmMDhlOC4uYzNhOWZkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUxNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1MTcuYwpAQCAtNDgsNiArNDgsNyBAQAogCiAjaW5jbHVkZSAibXV4LmgiCiAjaW5jbHVkZSAiY29udHJvbC5oIgorI2luY2x1ZGUgImNvbW1vbi1ib2FyZC1kZXZpY2VzLmgiCiAKICNpZiBkZWZpbmVkKENPTkZJR19MRURTX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0xFRFNfR1BJT19NT0RVTEUpCiBzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGNtX3QzNTE3X2xlZHNbXSA9IHsKQEAgLTE3Nyw3ICsxNzgsNyBAQAogCS5yZXNldF9ncGlvX3BvcnRbMl0gID0gLUVJTlZBTCwKIH07CiAKLXN0YXRpYyBpbnQgY21fdDM1MTdfaW5pdF91c2JoKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBjbV90MzUxN19pbml0X3VzYmgodm9pZCkKIHsKIAlpbnQgZXJyOwogCkBAIC0yMDMsOCArMjA0LDYgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX05BTkRfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX01URF9OQU5EX09NQVAyX01PRFVMRSkKLSNkZWZpbmUgTkFORF9CTE9DS19TSVpFCQlTWl8xMjhLCi0KIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjbV90MzUxN19uYW5kX3BhcnRpdGlvbnNbXSA9IHsKIAl7CiAJCS5uYW1lICAgICAgICAgICA9ICJ4bG9hZGVyIiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZGV2a2l0ODAwMC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKaW5kZXggY2Y1MjBkNy4uMzQ5NTZlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKQEAgLTYxLDggKzYxLDYgQEAKICNpbmNsdWRlICJ0aW1lci1ncC5oIgogI2luY2x1ZGUgImNvbW1vbi1ib2FyZC1kZXZpY2VzLmgiCiAKLSNkZWZpbmUgTkFORF9CTE9DS19TSVpFCQlTWl8xMjhLCi0KICNkZWZpbmUgT01BUF9ETTkwMDBfR1BJT19JUlEJMjUKICNkZWZpbmUgT01BUDNfREVWS0lUX1RTX0dQSU8JMjcKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCmluZGV4IGJlNzE0MjYuLjdmMjFkMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKQEAgLTU0LDggKzU0LDYgQEAKICNpbmNsdWRlICJwbS5oIgogI2luY2x1ZGUgImNvbW1vbi1ib2FyZC1kZXZpY2VzLmgiCiAKLSNkZWZpbmUgTkFORF9CTE9DS19TSVpFCQlTWl8xMjhLCi0KIC8qCiAgKiBPTUFQMyBCZWFnbGUgcmV2aXNpb24KICAqIFJ1biB0aW1lIGRldGVjdGlvbiBvZiBCZWFnbGUgcmV2aXNpb24gaXMgZG9uZSBieSByZWFkaW5nIEdQSU8uCkBAIC0xMDYsNiArMTA0LDkgQEAKIAliZWFnbGVfcmV2ID0gZ3Bpb19nZXRfdmFsdWUoMTcxKSB8IChncGlvX2dldF92YWx1ZSgxNzIpIDw8IDEpCiAJCQl8IChncGlvX2dldF92YWx1ZSgxNzMpIDw8IDIpOwogCisJZ3Bpb19mcmVlX2FycmF5KG9tYXAzX2JlYWdsZV9yZXZfZ3Bpb3MsCisJCQlBUlJBWV9TSVpFKG9tYXAzX2JlYWdsZV9yZXZfZ3Bpb3MpKTsKKwogCXN3aXRjaCAoYmVhZ2xlX3JldikgewogCWNhc2UgNzoKIAkJcHJpbnRrKEtFUk5fSU5GTyAiT01BUDMgQmVhZ2xlIFJldjogQXgvQnhcbiIpOwpAQCAtNTc5LDYgKzU4MCw5IEBACiAJb21hcF9uYW5kX2ZsYXNoX2luaXQoTkFORF9CVVNXSURUSF8xNiwgb21hcDNiZWFnbGVfbmFuZF9wYXJ0aXRpb25zLAogCQkJICAgICBBUlJBWV9TSVpFKG9tYXAzYmVhZ2xlX25hbmRfcGFydGl0aW9ucykpOwogCisJLyogRW5zdXJlIG1zZWN1cmUgaXMgbXV4J2QgdG8gYmUgYWJsZSB0byBzZXQgdGhlIFJUQy4gKi8KKwlvbWFwX211eF9pbml0X3NpZ25hbCgic3lzX2RybV9tc2VjdXJlIiwgT01BUF9QSU5fT0ZGX09VVFBVVF9ISUdIKTsKKwogCS8qIEVuc3VyZSBTRFJDIHBpbnMgYXJlIG11eCdkIGZvciBzZWxmLXJlZnJlc2ggKi8KIAlvbWFwX211eF9pbml0X3NpZ25hbCgic2RyY19ja2UwIiwgT01BUF9QSU5fT1VUUFVUKTsKIAlvbWFwX211eF9pbml0X3NpZ25hbCgic2RyY19ja2UxIiwgT01BUF9QSU5fT1VUUFVUKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCmluZGV4IDFkMTA3MzYuLjJhMGJiNDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvY2FyZC5oPgpAQCAtNDEsNyArNDIsNiBAQAogCiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPHBsYXQvbWNzcGkuaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgpAQCAtNTcsOCArNTcsNiBAQAogI2RlZmluZSBQQU5ET1JBX1dJRklfTlJFU0VUX0dQSU8JMjMKICNkZWZpbmUgT01BUDNfUEFORE9SQV9UU19HUElPCQk5NAogCi0jZGVmaW5lIE5BTkRfQkxPQ0tfU0laRQkJCVNaXzEyOEsKLQogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG9tYXAzcGFuZG9yYV9uYW5kX3BhcnRpdGlvbnNbXSA9IHsKIAl7CiAJCS5uYW1lICAgICAgICAgICA9ICJ4bG9hZGVyIiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDN0b3VjaGJvb2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDN0b3VjaGJvb2suYwppbmRleCA4Mjg3MmQ3Li41ZjY0OWZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzdG91Y2hib29rLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3RvdWNoYm9vay5jCkBAIC01Niw4ICs1Niw2IEBACiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KIAotI2RlZmluZSBOQU5EX0JMT0NLX1NJWkUJCVNaXzEyOEsKLQogI2RlZmluZSBPTUFQM19BQ19HUElPCQkxMzYKICNkZWZpbmUgT01BUDNfVFNfR1BJTwkJMTYyCiAjZGVmaW5lIFRCX0JMX1BXTV9USU1FUgkJOQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwNHBhbmRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYwppbmRleCA5MDQ4NWZjLi4wY2ZlMjAwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYwpAQCAtNTI2LDE5ICs1MjYsMTkgQEAKIAkJCSBPTUFQX1BJTl9PVVRQVVQgfCBPTUFQX01VWF9NT0RFMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwyX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwyX2RhdGEgX19pbml0ZGF0YSA9IHsKIAkuaWQgICAgICAgICAgICAgPSAxLAogCS5wYWRzICAgICAgICAgICA9IHNlcmlhbDJfcGFkcywKIAkucGFkc19jbnQgICAgICAgPSBBUlJBWV9TSVpFKHNlcmlhbDJfcGFkcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwzX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwzX2RhdGEgX19pbml0ZGF0YSA9IHsKIAkuaWQgICAgICAgICAgICAgPSAyLAogCS5wYWRzICAgICAgICAgICA9IHNlcmlhbDNfcGFkcywKIAkucGFkc19jbnQgICAgICAgPSBBUlJBWV9TSVpFKHNlcmlhbDNfcGFkcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWw0X2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWw0X2RhdGEgX19pbml0ZGF0YSA9IHsKIAkuaWQgICAgICAgICAgICAgPSAzLAogCS5wYWRzICAgICAgICAgICA9IHNlcmlhbDRfcGFkcywKIAkucGFkc19jbnQgICAgICAgPSBBUlJBWV9TSVpFKHNlcmlhbDRfcGFkcyksCkBAIC02ODcsNyArNjg3LDcgQEAKIAogCWlmIChvbWFwX3JldigpID09IE9NQVA0NDMwX1JFVl9FUzFfMCkKIAkJcGFja2FnZSA9IE9NQVBfUEFDS0FHRV9DQkw7Ci0Jb21hcDRfbXV4X2luaXQoYm9hcmRfbXV4LCBwYWNrYWdlKTsKKwlvbWFwNF9tdXhfaW5pdChib2FyZF9tdXgsIE5VTEwsIHBhY2thZ2UpOwogCiAJaWYgKHdsMTJ4eF9zZXRfcGxhdGZvcm1fZGF0YSgmb21hcF9wYW5kYV93bGFuX2RhdGEpKQogCQlwcl9lcnIoImVycm9yIHNldHRpbmcgd2wxMnh4IGRhdGFcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jCmluZGV4IDE1NTU5MTguLjE3NWUxYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgpAQCAtNDUsNyArNDYsNiBAQAogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CiAjaW5jbHVkZSA8dmlkZW8vb21hcGRzcy5oPgogI2luY2x1ZGUgPHZpZGVvL29tYXAtcGFuZWwtZ2VuZXJpYy1kcGkuaD4KLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxwbGF0L2dwbWMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8cGxhdC9uYW5kLmg+CkBAIC02NSw4ICs2NSw2IEBACiAjZGVmaW5lIE9WRVJPX0dQSU9fVVNCSF9DUEVOCTE2OAogI2RlZmluZSBPVkVST19HUElPX1VTQkhfTlJFU0VUCTE4MwogCi0jZGVmaW5lIE5BTkRfQkxPQ0tfU0laRSBTWl8xMjhLCi0KICNkZWZpbmUgT1ZFUk9fU01TQzkxMVhfQ1MgICAgICA1CiAjZGVmaW5lIE9WRVJPX1NNU0M5MTFYX0dQSU8gICAgMTc2CiAjZGVmaW5lIE9WRVJPX1NNU0M5MTFYMl9DUyAgICAgNApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYwppbmRleCBmNjI0N2U3Li45OTAzNjY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYwpAQCAtNDg4LDYgKzQ4OCw3IEBACiAJCS5uYW1lCQkJPSAiVjI4X0EiLAogCQkubWluX3VWCQkJPSAyODAwMDAwLAogCQkubWF4X3VWCQkJPSAzMDAwMDAwLAorCQkuYWx3YXlzX29uCQk9IHRydWUsIC8qIGR1ZSBWSU8gbGVhayB0byBBSUMzNCBWRERzICovCiAJCS5hcHBseV91VgkJPSB0cnVlLAogCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAogCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCkBAIC01ODIsNyArNTgzLDcgQEAKIHsKIAkvKiBGSVhNRSB0aGlzIGdwaW8gc2V0dXAgaXMganVzdCBhIHBsYWNlaG9sZGVyIGZvciBub3cgKi8KIAlncGlvX3JlcXVlc3Rfb25lKGdwaW8gKyA2LCBHUElPRl9PVVRfSU5JVF9MT1csICJiYWNrbGlnaHRfcHdtIik7Ci0JZ3Bpb19yZXF1ZXN0X29uZShncGlvICsgNywgR1BJT0ZfT1VUX0lOSVRfSElHSCwgInNwZWFrZXJfZW4iKTsKKwlncGlvX3JlcXVlc3Rfb25lKGdwaW8gKyA3LCBHUElPRl9PVVRfSU5JVF9MT1csICJzcGVha2VyX2VuIik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbS1kaXNwbGF5LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20tZGlzcGxheS5jCmluZGV4IGM3YzZiZWIuLmQ0NjgzYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbS1kaXNwbGF5LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tLWRpc3BsYXkuYwpAQCAtMjYsNyArMjYsNyBAQAogCXsgTENEX1BBTkVMX1FWR0FfR1BJTywJR1BJT0ZfT1VUX0lOSVRfSElHSCwgImxjZCBxdmdhIgkgfSwKIH07CiAKLXN0YXRpYyB2b2lkIHpvb21fbGNkX3BhbmVsX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCB6b29tX2xjZF9wYW5lbF9pbml0KHZvaWQpCiB7CiAJem9vbV9sY2RfZ3Bpb3NbMF0uZ3BpbyA9IChvbWFwX3JldigpID4gT01BUDM0MzBfUkVWX0VTM18wKSA/CiAJCQlMQ0RfUEFORUxfUkVTRVRfR1BJT19QUk9EIDoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY29tbW9uLWJvYXJkLWRldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY29tbW9uLWJvYXJkLWRldmljZXMuYwppbmRleCBlOTQ5MDNiLi45NGNjZjQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbW1vbi1ib2FyZC1kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb21tb24tYm9hcmQtZGV2aWNlcy5jCkBAIC04NSwxOCArODUsMTggQEAKIAlzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKnNwaV9iaSA9ICZhZHM3ODQ2X3NwaV9ib2FyZF9pbmZvOwogCWludCBlcnI7CiAKLQllcnIgPSBncGlvX3JlcXVlc3QoZ3Bpb19wZW5kb3duLCAiVFMgUGVuRG93biIpOwotCWlmIChlcnIpIHsKLQkJcHJfZXJyKCJDb3VsZCBub3Qgb2J0YWluIGdwaW8gZm9yIFRTIFBlbkRvd246ICVkXG4iLCBlcnIpOwotCQlyZXR1cm47CisJaWYgKGJvYXJkX3BkYXRhICYmIGJvYXJkX3BkYXRhLT5nZXRfcGVuZG93bl9zdGF0ZSkgeworCQllcnIgPSBncGlvX3JlcXVlc3Rfb25lKGdwaW9fcGVuZG93biwgR1BJT0ZfSU4sICJUU1BlbkRvd24iKTsKKwkJaWYgKGVycikgeworCQkJcHJfZXJyKCJDb3VsZG4ndCBvYnRhaW4gZ3BpbyBmb3IgVFNQZW5Eb3duOiAlZFxuIiwgZXJyKTsKKwkJCXJldHVybjsKKwkJfQorCQlncGlvX2V4cG9ydChncGlvX3BlbmRvd24sIDApOworCisJCWlmIChncGlvX2RlYm91bmNlKQorCQkJZ3Bpb19zZXRfZGVib3VuY2UoZ3Bpb19wZW5kb3duLCBncGlvX2RlYm91bmNlKTsKIAl9CiAKLQlncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvX3BlbmRvd24pOwotCWdwaW9fZXhwb3J0KGdwaW9fcGVuZG93biwgMCk7Ci0KLQlpZiAoZ3Bpb19kZWJvdW5jZSkKLQkJZ3Bpb19zZXRfZGVib3VuY2UoZ3Bpb19wZW5kb3duLCBncGlvX2RlYm91bmNlKTsKLQogCWFkczc4NDZfY29uZmlnLmdwaW9fcGVuZG93biA9IGdwaW9fcGVuZG93bjsKIAogCXNwaV9iaS0+YnVzX251bQk9IGJ1c19udW07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbW1vbi1ib2FyZC1kZXZpY2VzLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbW1vbi1ib2FyZC1kZXZpY2VzLmgKaW5kZXggZWI4MGIzYi4uNjc5NzE5MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb21tb24tYm9hcmQtZGV2aWNlcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY29tbW9uLWJvYXJkLWRldmljZXMuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX19PTUFQX0NPTU1PTl9CT0FSRF9ERVZJQ0VTX18KICNkZWZpbmUgX19PTUFQX0NPTU1PTl9CT0FSRF9ERVZJQ0VTX18KIAorI2RlZmluZSBOQU5EX0JMT0NLX1NJWkUJU1pfMTI4SworCiBzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhOwogc3RydWN0IG10ZF9wYXJ0aXRpb247CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKaW5kZXggN2I4NTU4NS4uNWI4Y2E2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKQEAgLTk3LDcgKzk3LDcgQEAKIAogCVdBUk4oSVNfRVJSKG9kKSwgImNvdWxkIG5vdCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXNcbiIsIG9oX25hbWUpOwogCi0JcmV0dXJuIFBUUl9FUlIob2QpOworCXJldHVybiBJU19FUlIob2QpID8gUFRSX0VSUihvZCkgOiAwOwogfQogcG9zdGNvcmVfaW5pdGNhbGwob21hcDRfbDNfaW5pdCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuYwppbmRleCBiMmYzMGJlLi42Njg2OGM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5jCkBAIC0xNDUsNiArMTQ1LDcgQEAKIAkJCQkgaW50IHBvd2VyX29uLCBpbnQgdmRkKQogewogCXUzMiByZWc7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCiAJaWYgKHBvd2VyX29uKSB7CiAJCXJlZyA9IG9tYXA0X2N0cmxfcGFkX3JlYWRsKGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKQEAgLTE1Nyw5ICsxNTgsMTUgQEAKIAkJCU9NQVA0X01NQzFfUFdSRE5aX01BU0sgfAogCQkJT01BUDRfVVNCQzFfSUNVU0JfUFdSRE5aX01BU0spOwogCQlvbWFwNF9jdHJsX3BhZF93cml0ZWwocmVnLCBjb250cm9sX3BiaWFzX29mZnNldCk7Ci0JCS8qIDQgbWljcm9zZWMgZGVsYXkgZm9yIGNvbXBhcmF0b3IgdG8gZ2VuZXJhdGUgYW4gZXJyb3IqLwotCQl1ZGVsYXkoNCk7Ci0JCXJlZyA9IG9tYXA0X2N0cmxfcGFkX3JlYWRsKGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKKworCQl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNSk7CisJCWRvIHsKKwkJCXJlZyA9IG9tYXA0X2N0cmxfcGFkX3JlYWRsKGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKKwkJCWlmICghKHJlZyAmIE9NQVA0X01NQzFfUEJJQVNMSVRFX1ZNT0RFX0VSUk9SX01BU0spKQorCQkJCWJyZWFrOworCQkJdXNsZWVwX3JhbmdlKDEwMCwgMjAwKTsKKwkJfSB3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpOworCiAJCWlmIChyZWcgJiBPTUFQNF9NTUMxX1BCSUFTTElURV9WTU9ERV9FUlJPUl9NQVNLKSB7CiAJCQlwcl9lcnIoIlBiaWFzIFZvbHRhZ2UgaXMgbm90IHNhbWUgYXMgTERPXG4iKTsKIAkJCS8qIENhdXRpb24gOiBPbiBWTU9ERV9FUlJPUiBQb3dlciBEb3duIE1NQyBJTyAqLwpAQCAtMzMxLDYgKzMzOCw5IEBACiAJaWYgKGMtPm5vX29mZikKIAkJbW1jLT5zbG90c1swXS5ub19vZmYgPSAxOwogCisJaWYgKGMtPm5vX29mZl9pbml0KQorCQltbWMtPnNsb3RzWzBdLm5vX3JlZ3VsYXRvcl9vZmZfaW5pdCA9IGMtPm5vX29mZl9pbml0OworCiAJaWYgKGMtPnZjY19hdXhfZGlzYWJsZV9pc19zbGVlcCkKIAkJbW1jLT5zbG90c1swXS52Y2NfYXV4X2Rpc2FibGVfaXNfc2xlZXAgPSAxOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmgKaW5kZXggZjExOTM0OC4uZjc1N2U3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuaApAQCAtMTgsNiArMTgsNyBAQAogCWJvb2wJbm9ucmVtb3ZhYmxlOwkvKiBOb25yZW1vdmFibGUgZS5nLiBlTU1DICovCiAJYm9vbAlwb3dlcl9zYXZpbmc7CS8qIFRyeSB0byBzbGVlcCBvciBwb3dlciBvZmYgd2hlbiBwb3NzaWJsZSAqLwogCWJvb2wJbm9fb2ZmOwkJLyogcG93ZXJfc2F2aW5nIGFuZCBwb3dlciBpcyBub3QgdG8gZ28gb2ZmICovCisJYm9vbAlub19vZmZfaW5pdDsJLyogbm8gcG93ZXIgb2ZmIHdoZW4gbm90IGluIE1NQyBzbGVlcCBzdGF0ZSAqLwogCWJvb2wJdmNjX2F1eF9kaXNhYmxlX2lzX3NsZWVwOyAvKiBSZWd1bGF0b3Igb2ZmIHJlbWFwcGVkIHRvIHNsZWVwICovCiAJaW50CWdwaW9fY2Q7CS8qIG9yIC1FSU5WQUwgKi8KIAlpbnQJZ3Bpb193cDsJLyogb3IgLUVJTlZBTCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKaW5kZXggYTRhYjFlMy4uYzdmYjIyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCkBAIC04Myw2ICs4Myw5IEBACiB2b2lkIG9tYXBfbXV4X3dyaXRlX2FycmF5KHN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24gKnBhcnRpdGlvbiwKIAkJCQkgc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF9tdXgpCiB7CisJaWYgKCFib2FyZF9tdXgpCisJCXJldHVybjsKKwogCXdoaWxlIChib2FyZF9tdXgtPnJlZ19vZmZzZXQgIT0gT01BUF9NVVhfVEVSTUlOQVRPUikgewogCQlvbWFwX211eF93cml0ZShwYXJ0aXRpb24sIGJvYXJkX211eC0+dmFsdWUsCiAJCQkgICAgICAgYm9hcmRfbXV4LT5yZWdfb2Zmc2V0KTsKQEAgLTkwNiw3ICs5MDksNyBAQAogdTE2IG9tYXBfbXV4X2dldF9ncGlvKGludCBncGlvKQogewogCXN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24gKnBhcnRpdGlvbjsKLQlzdHJ1Y3Qgb21hcF9tdXggKm07CisJc3RydWN0IG9tYXBfbXV4ICptID0gTlVMTDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocGFydGl0aW9uLCAmbXV4X3BhcnRpdGlvbnMsIG5vZGUpIHsKIAkJbSA9IG9tYXBfbXV4X2dldF9ieV9ncGlvKHBhcnRpdGlvbiwgZ3Bpbyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguaAppbmRleCAxMzdmMzIxLi4yMTMyMzA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmgKQEAgLTMyMywxMCArMzIzLDEyIEBACiAKIC8qKgogICogb21hcDRfbXV4X2luaXQoKSAtIGluaXRpYWxpemUgbXV4IHN5c3RlbSB3aXRoIGJvYXJkIHNwZWNpZmljIHNldAotICogQGJvYXJkX211eDoJCUJvYXJkIHNwZWNpZmljIG11eCB0YWJsZQorICogQGJvYXJkX3N1YnNldDoJQm9hcmQgc3BlY2lmaWMgbXV4IHRhYmxlCisgKiBAYm9hcmRfd2t1cF9zdWJzZXQ6CUJvYXJkIHNwZWNpZmljIG11eCB0YWJsZSBmb3Igd2FrZXVwIGluc3RhbmNlCiAgKiBAZmxhZ3M6CQlPTUFQIHBhY2thZ2UgdHlwZSB1c2VkIGZvciB0aGUgYm9hcmQKICAqLwotaW50IG9tYXA0X211eF9pbml0KHN0cnVjdCBvbWFwX2JvYXJkX211eCAqYm9hcmRfbXV4LCBpbnQgZmxhZ3MpOworaW50IG9tYXA0X211eF9pbml0KHN0cnVjdCBvbWFwX2JvYXJkX211eCAqYm9hcmRfc3Vic2V0LAorCXN0cnVjdCBvbWFwX2JvYXJkX211eCAqYm9hcmRfd2t1cF9zdWJzZXQsIGludCBmbGFncyk7CiAKIC8qKgogICogb21hcF9tdXhfaW5pdCAtIHByaXZhdGUgbXV4IGluaXQgZnVuY3Rpb24sIGRvIG5vdCBjYWxsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eDQ0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4NDR4eC5jCmluZGV4IDlhNjY0NDUuLmY1YTc0ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4NDR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4NDR4eC5jCkBAIC0xMzA5LDcgKzEzMDksOCBAQAogI2RlZmluZSBvbWFwNF93a3VwX2NibF9jYnNfYmFsbCAgTlVMTAogI2VuZGlmCiAKLWludCBfX2luaXQgb21hcDRfbXV4X2luaXQoc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF9zdWJzZXQsIGludCBmbGFncykKK2ludCBfX2luaXQgb21hcDRfbXV4X2luaXQoc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF9zdWJzZXQsCisJc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF93a3VwX3N1YnNldCwgaW50IGZsYWdzKQogewogCXN0cnVjdCBvbWFwX2JhbGwgKnBhY2thZ2VfYmFsbHNfY29yZTsKIAlzdHJ1Y3Qgb21hcF9iYWxsICpwYWNrYWdlX2JhbGxzX3drdXAgPSBvbWFwNF93a3VwX2NibF9jYnNfYmFsbDsKQEAgLTEzNDcsNyArMTM0OCw3IEBACiAJCQkgICAgT01BUF9NVVhfR1BJT19JTl9NT0RFMywKIAkJCSAgICBPTUFQNF9DVFJMX01PRFVMRV9QQURfV0tVUF9NVVhfUEJBU0UsCiAJCQkgICAgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1dLVVBfTVVYX1NJWkUsCi0JCQkgICAgb21hcDRfd2t1cF9tdXhtb2RlcywgTlVMTCwgYm9hcmRfc3Vic2V0LAorCQkJICAgIG9tYXA0X3drdXBfbXV4bW9kZXMsIE5VTEwsIGJvYXJkX3drdXBfc3Vic2V0LAogCQkJICAgIHBhY2thZ2VfYmFsbHNfd2t1cCk7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYwppbmRleCBlMDM0Mjk0Li4yOTNmYTZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYwpAQCAtMTYyOCw3ICsxNjI4LDcgQEAKIAkJCXZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG9tYXBfaHdtb2QgKnRlbXBfb2g7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAogCWlmICghZm4pCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jCmluZGV4IGFiYzU0OGEuLmUxYzY5ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80NHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDR4eF9kYXRhLmMKQEAgLTUxMDksNyArNTEwOSw3IEBACiAJJm9tYXA0NHh4X2l2YV9zZXExX2h3bW9kLAogCiAJLyoga2JkIGNsYXNzICovCi0vKgkmb21hcDQ0eHhfa2JkX2h3bW9kLCAqLworCSZvbWFwNDR4eF9rYmRfaHdtb2QsCiAKIAkvKiBtYWlsYm94IGNsYXNzICovCiAJJm9tYXA0NHh4X21haWxib3hfaHdtb2QsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfcGh5X2ludGVybmFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfcGh5X2ludGVybmFsLmMKaW5kZXggZjQ3ODEzZS4uNTg3NzVlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX3BoeV9pbnRlcm5hbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9waHlfaW50ZXJuYWwuYwpAQCAtNTYsOCArNTYsMTAgQEAKIAkvKiBQb3dlciBkb3duIHRoZSBwaHkgKi8KIAlfX3Jhd193cml0ZWwoUEhZX1BELCBjdHJsX2Jhc2UgKyBDT05UUk9MX0RFVl9DT05GKTsKIAotCWlmICghZGV2KQorCWlmICghZGV2KSB7CisJCWlvdW5tYXAoY3RybF9iYXNlKTsKIAkJcmV0dXJuIDA7CisJfQogCiAJcGh5Y2xrID0gY2xrX2dldChkZXYsICJvY3Ayc2NwX3VzYl9waHlfaWNrIik7CiAJaWYgKElTX0VSUihwaHljbGspKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2ZsYXNoLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2ZsYXNoLmgKaW5kZXggMzA4MzE5NS4uMGQ4ODQ5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9mbGFzaC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZmxhc2guaApAQCAtMTEsNiArMTEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgogCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOwogZXh0ZXJuIHZvaWQgb21hcDFfc2V0X3ZwcChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgZW5hYmxlKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lvdm1tLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lvdm1tLmgKaW5kZXggMzJhMmY2Yy4uZTk5MmI5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pb3ZtbS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaW92bW0uaApAQCAtMjksOSArMjksNiBAQAogICogbG93ZXIgMTYgYml0IGlzIHVzZWQgZm9yIGgvdyBhbmQgdXBwZXIgMTYgYml0IGlzIGZvciBzL3cuCiAgKi8KICNkZWZpbmUgSU9WTUZfU1dfU0hJRlQJCTE2Ci0jZGVmaW5lIElPVk1GX0hXX1NJWkUJCSgxIDw8IElPVk1GX1NXX1NISUZUKQotI2RlZmluZSBJT1ZNRl9IV19NQVNLCQkoSU9WTUZfSFdfU0laRSAtIDEpCi0jZGVmaW5lIElPVk1GX1NXX01BU0sJCSh+SU9WTUZfSFdfTUFTSylVTAogCiAvKgogICogaW92bWE6IGgvdyBmbGFncyBkZXJpdmVkIGZyb20gY2FtIGFuZCByYW0gYXR0cmlidXRlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21tYy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tbWMuaAppbmRleCBmMzhmZWY5Li5jN2I4NzQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21tYy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbW1jLmgKQEAgLTEwMSw2ICsxMDEsOSBAQAogCQkvKiBJZiB1c2luZyBwb3dlcl9zYXZpbmcgYW5kIHRoZSBNTUMgcG93ZXIgaXMgbm90IHRvIGdvIG9mZiAqLwogCQl1bnNpZ25lZCBub19vZmY6MTsKIAorCQkvKiBlTU1DIGRvZXMgbm90IGhhbmRsZSBwb3dlciBvZmYgd2hlbiBub3QgaW4gc2xlZXAgc3RhdGUgKi8KKwkJdW5zaWduZWQgbm9fcmVndWxhdG9yX29mZl9pbml0OjE7CisKIAkJLyogUmVndWxhdG9yIG9mZiByZW1hcHBlZCB0byBzbGVlcCAqLwogCQl1bnNpZ25lZCB2Y2NfYXV4X2Rpc2FibGVfaXNfc2xlZXA6MTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvdm1tLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW92bW0uYwppbmRleCA1MWVmNDNlLi44M2EzN2M1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW92bW0uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW92bW0uYwpAQCAtNjQ4LDcgKzY0OCw2IEBACiAJCQlyZXR1cm4gUFRSX0VSUih2YSk7CiAJfQogCi0JZmxhZ3MgJj0gSU9WTUZfSFdfTUFTSzsKIAlmbGFncyB8PSBJT1ZNRl9ESVNDT05UOwogCWZsYWdzIHw9IElPVk1GX01NSU87CiAKQEAgLTcwNiw3ICs3MDUsNiBAQAogCWlmICghdmEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZmxhZ3MgJj0gSU9WTUZfSFdfTUFTSzsKIAlmbGFncyB8PSBJT1ZNRl9ESVNDT05UOwogCWZsYWdzIHw9IElPVk1GX0FMTE9DOwogCkBAIC03OTUsNyArNzkzLDYgQEAKIAlpZiAoIXZhKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWZsYWdzICY9IElPVk1GX0hXX01BU0s7CiAJZmxhZ3MgfD0gSU9WTUZfTElORUFSOwogCWZsYWdzIHw9IElPVk1GX01NSU87CiAKQEAgLTg1Myw3ICs4NTAsNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlwYSA9IHZpcnRfdG9fcGh5cyh2YSk7CiAKLQlmbGFncyAmPSBJT1ZNRl9IV19NQVNLOwogCWZsYWdzIHw9IElPVk1GX0xJTkVBUjsKIAlmbGFncyB8PSBJT1ZNRl9BTExPQzsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKaW5kZXggYTNmNTBiMy4uNmFmM2QwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCkBAIC0xNjYsNyArMTY2LDcgQEAKIAkJZWxzZSBpZiAoY3B1X2lzX29tYXAxNjExKCkpCiAJCQlvbWFwX3NyYW1fc2l6ZSA9IFNaXzI1Nks7CiAJCWVsc2UgewotCQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZGV0ZWN0IFNSQU0gc2l6ZVxuIik7CisJCQlwcl9lcnIoIkNvdWxkIG5vdCBkZXRlY3QgU1JBTSBzaXplXG4iKTsKIAkJCW9tYXBfc3JhbV9zaXplID0gMHg0MDAwOwogCQl9CiAJfQpAQCAtMjIxLDEwICsyMjEsMTAgQEAKIAlvbWFwX3NyYW1faW9fZGVzY1swXS5sZW5ndGggPSBST1VORF9ET1dOKG9tYXBfc3JhbV9zaXplLCBQQUdFX1NJWkUpOwogCWlvdGFibGVfaW5pdChvbWFwX3NyYW1faW9fZGVzYywgQVJSQVlfU0laRShvbWFwX3NyYW1faW9fZGVzYykpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiU1JBTTogTWFwcGVkIHBhIDB4JTA4bHggdG8gdmEgMHglMDhseCBzaXplOiAweCVseFxuIiwKLQlfX3Bmbl90b19waHlzKG9tYXBfc3JhbV9pb19kZXNjWzBdLnBmbiksCi0Jb21hcF9zcmFtX2lvX2Rlc2NbMF0udmlydHVhbCwKLQkgICAgICAgb21hcF9zcmFtX2lvX2Rlc2NbMF0ubGVuZ3RoKTsKKwlwcl9pbmZvKCJTUkFNOiBNYXBwZWQgcGEgMHglMDhsbHggdG8gdmEgMHglMDhseCBzaXplOiAweCVseFxuIiwKKwkJKGxvbmcgbG9uZykgX19wZm5fdG9fcGh5cyhvbWFwX3NyYW1faW9fZGVzY1swXS5wZm4pLAorCQlvbWFwX3NyYW1faW9fZGVzY1swXS52aXJ0dWFsLAorCQlvbWFwX3NyYW1faW9fZGVzY1swXS5sZW5ndGgpOwogCiAJLyoKIAkgKiBOb3JtYWxseSBkZXZpY2VtYXBzX2luaXQoKSB3b3VsZCBmbHVzaCBjYWNoZXMgYW5kIHRsYiBhZnRlcgpAQCAtMjUyLDcgKzI1Miw3IEBACiB2b2lkICpvbWFwX3NyYW1fcHVzaF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlpZiAoc2l6ZSA+IChvbWFwX3NyYW1fY2VpbCAtIChvbWFwX3NyYW1fYmFzZSArIFNSQU1fQk9PVExPQURFUl9TWikpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiTm90IGVub3VnaCBzcGFjZSBpbiBTUkFNXG4iKTsKKwkJcHJfZXJyKCJOb3QgZW5vdWdoIHNwYWNlIGluIFNSQU1cbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvdHJhcHMuYwppbmRleCBmMDNjYjI3Li5iZDNlNWU3IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC90cmFwcy5jCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgpAQCAtMTU2LDcgKzE1Niw3IEBACiAKIAljYXNlIEVYQ0VQX1RSQVA6CiAJY2FzZSBFWENFUF9VTklNUElOUzoKLQkJaWYgKGdldF91c2VyKG9wY29kZSwgKHVpbnQ4X3QgX191c2VyICopcmVncy0+cGMpICE9IDApCisJCWlmIChwcm9iZV9rZXJuZWxfcmVhZCgmb3Bjb2RlLCAodTggKilyZWdzLT5wYywgMSkgPCAwKQogCQkJYnJlYWs7CiAJCWlmIChvcGNvZGUgPT0gMHhmZikgewogCQkJaWYgKG5vdGlmeV9kaWUoRElFX0JSRUFLUE9JTlQsIHN0ciwgcmVncywgY29kZSwgMCwgMCkpCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL21uMTAzMDAva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNmY3MDJhNi4uMTNjNDgxNCAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNDQsNiArNDQsNyBAQAogICBST19EQVRBKFBBR0VfU0laRSkKIAogICAvKiB3cml0ZWFibGUgKi8KKyAgX3NkYXRhID0gLjsgICAgIC8qIFN0YXJ0IG9mIHJ3IGRhdGEgc2VjdGlvbiAqLwogICBSV19EQVRBX1NFQ1RJT04oMzIsIFBBR0VfU0laRSwgVEhSRUFEX1NJWkUpCiAgIF9lZGF0YSA9IC47CiAKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9tbS9jYWNoZS1kYmctZmx1c2gtYnktcmVnLlMgYi9hcmNoL21uMTAzMDAvbW0vY2FjaGUtZGJnLWZsdXNoLWJ5LXJlZy5TCmluZGV4IDY2NTkxOWYuLmE3NzVlYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9tbS9jYWNoZS1kYmctZmx1c2gtYnktcmVnLlMKKysrIGIvYXJjaC9tbjEwMzAwL21tL2NhY2hlLWRiZy1mbHVzaC1ieS1yZWcuUwpAQCAtMTIwLDE0ICsxMjAsMTQgQEAKIAkjIGNvbmRpdGlvbmFsbHkgcHVyZ2UgdGhpcyBsaW5lIGluIGFsbCB3YXlzCiAJbW92CWQxLChMMV9DQUNIRV9XQVlESVNQKjAsYTApCiAKLWRlYnVnZ2VyX2xvY2FsX2NhY2hlX2ZsdXNoaW52X25vX2RjYWNoZToKK2RlYnVnZ2VyX2xvY2FsX2NhY2hlX2ZsdXNoaW52X29uZV9ub19kY2FjaGU6CiAJIwogCSMgbm93IHRyeSB0byBmbHVzaCB0aGUgaWNhY2hlCiAJIwogCW1vdglDSENUUixhMAogCW1vdmh1CShhMCksZDAKIAlidHN0CUNIQ1RSX0lDRU4sZDAKLQliZXEJbW4xMDMwMF9sb2NhbF9pY2FjaGVfaW52X3JhbmdlX3JlZ19lbmQKKwliZXEJZGVidWdnZXJfbG9jYWxfY2FjaGVfZmx1c2hpbnZfb25lX2VuZAogCiAJTE9DQUxfQ0xJX1NBVkUoZDEpCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggOWZhYjJhYS4uOTBkNzdiZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTg5LDYgKzg5LDcgQEAKIAlzZWxlY3QgSEFWRV9HRVRfVVNFUl9QQUdFU19GQVNUCiAJc2VsZWN0IEhBVkVfQVJDSF9NVVRFWF9DUFVfUkVMQVgKIAlzZWxlY3QgSEFWRV9BUkNIX0pVTVBfTEFCRUwgaWYgIU1BUkNIX0c1CisJc2VsZWN0IEhBVkVfUkNVX1RBQkxFX0ZSRUUgaWYgU01QCiAJc2VsZWN0IEFSQ0hfSU5MSU5FX1NQSU5fVFJZTE9DSwogCXNlbGVjdCBBUkNIX0lOTElORV9TUElOX1RSWUxPQ0tfQkgKIAlzZWxlY3QgQVJDSF9JTkxJTkVfU1BJTl9MT0NLCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCBmNjMxNGFmLi4zOGU3MWViIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGdhbGxvYy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTE3LDE1ICsxNywxNSBAQAogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKLSNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkJZG8ge30gd2hpbGUgKDApCi0KIHVuc2lnbmVkIGxvbmcgKmNyc3RfdGFibGVfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqKTsKIHZvaWQgY3JzdF90YWJsZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyAqKTsKLXZvaWQgY3JzdF90YWJsZV9mcmVlX3JjdShzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcgKik7CiAKIHVuc2lnbmVkIGxvbmcgKnBhZ2VfdGFibGVfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqKTsKIHZvaWQgcGFnZV90YWJsZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyAqKTsKLXZvaWQgcGFnZV90YWJsZV9mcmVlX3JjdShzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcgKik7CisjaWZkZWYgQ09ORklHX0hBVkVfUkNVX1RBQkxFX0ZSRUUKK3ZvaWQgcGFnZV90YWJsZV9mcmVlX3JjdShzdHJ1Y3QgbW11X2dhdGhlciAqLCB1bnNpZ25lZCBsb25nICopOwordm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqX3RhYmxlKTsKKyNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfdGFibGUodW5zaWduZWQgbG9uZyAqcywgdW5zaWduZWQgbG9uZyB2YWwsIHNpemVfdCBuKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZTRlZmFjZi4uODAxZmJlMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0yOTMsMTkgKzI5Myw2IEBACiAgKiBzd2FwIHB0ZSBpcyAxMDExIGFuZCAwMDAxLCAwMDExLCAwMTAxLCAwMTExIGFyZSBpbnZhbGlkLgogICovCiAKLS8qIFBhZ2Ugc3RhdHVzIHRhYmxlIGJpdHMgZm9yIHZpcnR1YWxpemF0aW9uICovCi0jZGVmaW5lIFJDUF9BQ0NfQklUUwkweGYwMDAwMDAwMDAwMDAwMDBVTAotI2RlZmluZSBSQ1BfRlBfQklUCTB4MDgwMDAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFJDUF9QQ0xfQklUCTB4MDA4MDAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFJDUF9IUl9CSVQJMHgwMDQwMDAwMDAwMDAwMDAwVUwKLSNkZWZpbmUgUkNQX0hDX0JJVAkweDAwMjAwMDAwMDAwMDAwMDBVTAotI2RlZmluZSBSQ1BfR1JfQklUCTB4MDAwNDAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFJDUF9HQ19CSVQJMHgwMDAyMDAwMDAwMDAwMDAwVUwKLQotLyogVXNlciBkaXJ0eSAvIHJlZmVyZW5jZWQgYml0IGZvciBLVk0ncyBtaWdyYXRpb24gZmVhdHVyZSAqLwotI2RlZmluZSBLVk1fVVJfQklUCTB4MDAwMDgwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIEtWTV9VQ19CSVQJMHgwMDAwNDAwMDAwMDAwMDAwVUwKLQogI2lmbmRlZiBfX3MzOTB4X18KIAogLyogQml0cyBpbiB0aGUgc2VnbWVudCB0YWJsZSBhZGRyZXNzLXNwYWNlLWNvbnRyb2wtZWxlbWVudCAqLwpAQCAtMzI1LDYgKzMxMiwxOSBAQAogI2RlZmluZSBfU0VHTUVOVF9FTlRSWQkJKF9TRUdNRU5UX0VOVFJZX1BUTCkKICNkZWZpbmUgX1NFR01FTlRfRU5UUllfRU1QVFkJKF9TRUdNRU5UX0VOVFJZX0lOVikKIAorLyogUGFnZSBzdGF0dXMgdGFibGUgYml0cyBmb3IgdmlydHVhbGl6YXRpb24gKi8KKyNkZWZpbmUgUkNQX0FDQ19CSVRTCTB4ZjAwMDAwMDBVTAorI2RlZmluZSBSQ1BfRlBfQklUCTB4MDgwMDAwMDBVTAorI2RlZmluZSBSQ1BfUENMX0JJVAkweDAwODAwMDAwVUwKKyNkZWZpbmUgUkNQX0hSX0JJVAkweDAwNDAwMDAwVUwKKyNkZWZpbmUgUkNQX0hDX0JJVAkweDAwMjAwMDAwVUwKKyNkZWZpbmUgUkNQX0dSX0JJVAkweDAwMDQwMDAwVUwKKyNkZWZpbmUgUkNQX0dDX0JJVAkweDAwMDIwMDAwVUwKKworLyogVXNlciBkaXJ0eSAvIHJlZmVyZW5jZWQgYml0IGZvciBLVk0ncyBtaWdyYXRpb24gZmVhdHVyZSAqLworI2RlZmluZSBLVk1fVVJfQklUCTB4MDAwMDgwMDBVTAorI2RlZmluZSBLVk1fVUNfQklUCTB4MDAwMDQwMDBVTAorCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KIAogLyogQml0cyBpbiB0aGUgc2VnbWVudC9yZWdpb24gdGFibGUgYWRkcmVzcy1zcGFjZS1jb250cm9sLWVsZW1lbnQgKi8KQEAgLTM2Nyw2ICszNjcsMTkgQEAKICNkZWZpbmUgX1NFR01FTlRfRU5UUllfTEFSR0UJMHg0MDAJLyogU1RFLWZvcm1hdCBjb250cm9sLCBsYXJnZSBwYWdlICAgKi8KICNkZWZpbmUgX1NFR01FTlRfRU5UUllfQ08JMHgxMDAJLyogY2hhbmdlLXJlY29yZGluZyBvdmVycmlkZSAgICovCiAKKy8qIFBhZ2Ugc3RhdHVzIHRhYmxlIGJpdHMgZm9yIHZpcnR1YWxpemF0aW9uICovCisjZGVmaW5lIFJDUF9BQ0NfQklUUwkweGYwMDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBSQ1BfRlBfQklUCTB4MDgwMDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFJDUF9QQ0xfQklUCTB4MDA4MDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFJDUF9IUl9CSVQJMHgwMDQwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgUkNQX0hDX0JJVAkweDAwMjAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBSQ1BfR1JfQklUCTB4MDAwNDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFJDUF9HQ19CSVQJMHgwMDAyMDAwMDAwMDAwMDAwVUwKKworLyogVXNlciBkaXJ0eSAvIHJlZmVyZW5jZWQgYml0IGZvciBLVk0ncyBtaWdyYXRpb24gZmVhdHVyZSAqLworI2RlZmluZSBLVk1fVVJfQklUCTB4MDAwMDgwMDAwMDAwMDAwMFVMCisjZGVmaW5lIEtWTV9VQ19CSVQJMHgwMDAwNDAwMDAwMDAwMDAwVUwKKwogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmgKaW5kZXggMzUwZTdlZS4uMTVjOTc2MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcWRpby5oCkBAIC0xMzksMTEwICsxMzksNDcgQEAKIAlzdHJ1Y3Qgc2xpYmUgc2xpYmVbUURJT19NQVhfQlVGRkVSU19QRVJfUV07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQsIGFsaWduZWQoMjA0OCkpKTsKIAotLyoqCi0gKiBzdHJ1Y3Qgc2JhbF9mbGFncyAtIHN0b3JhZ2UgYmxvY2sgYWRkcmVzcyBsaXN0IGZsYWdzCi0gKiBAbGFzdDogbGFzdCBlbnRyeQotICogQGNvbnQ6IGNvbnRpZ3VvdXMgc3RvcmFnZQotICogQGZyYWc6IGZyYWdtZW50YXRpb24KLSAqLwotc3RydWN0IHNiYWxfZmxhZ3MgewotCXU4CTogMTsKLQl1OCBsYXN0IDogMTsKLQl1OCBjb250IDogMTsKLQl1OAk6IDE7Ci0JdTggZnJhZyA6IDI7Ci0JdTgJOiAyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisjZGVmaW5lIFNCQUxfRUZMQUdTX0xBU1RfRU5UUlkJCTB4NDAKKyNkZWZpbmUgU0JBTF9FRkxBR1NfQ09OVElHVU9VUwkJMHgyMAorI2RlZmluZSBTQkFMX0VGTEFHU19GSVJTVF9GUkFHCQkweDA0CisjZGVmaW5lIFNCQUxfRUZMQUdTX01JRERMRV9GUkFHCQkweDA4CisjZGVmaW5lIFNCQUxfRUZMQUdTX0xBU1RfRlJBRwkJMHgwYworI2RlZmluZSBTQkFMX0VGTEFHU19NQVNLCQkweDZmCiAKLSNkZWZpbmUgU0JBTF9GTEFHU19GSVJTVF9GUkFHCQkweDA0MDAwMDAwVUwKLSNkZWZpbmUgU0JBTF9GTEFHU19NSURETEVfRlJBRwkJMHgwODAwMDAwMFVMCi0jZGVmaW5lIFNCQUxfRkxBR1NfTEFTVF9GUkFHCQkweDBjMDAwMDAwVUwKLSNkZWZpbmUgU0JBTF9GTEFHU19MQVNUX0VOVFJZCQkweDQwMDAwMDAwVUwKLSNkZWZpbmUgU0JBTF9GTEFHU19DT05USUdVT1VTCQkweDIwMDAwMDAwVUwKLQotI2RlZmluZSBTQkFMX0ZMQUdTMF9EQVRBX0NPTlRJTlVBVElPTgkweDIwVUwKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX1BDSV9SRVEJCTB4NDAKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX0RBVEFfQ09OVElOVUFUSU9OCTB4MjAKIAogLyogQXdlc29tZSBPcGVuRkNQIGV4dGVuc2lvbnMgKi8KLSNkZWZpbmUgU0JBTF9GTEFHUzBfVFlQRV9TVEFUVVMJCTB4MDBVTAotI2RlZmluZSBTQkFMX0ZMQUdTMF9UWVBFX1dSSVRFCQkweDA4VUwKLSNkZWZpbmUgU0JBTF9GTEFHUzBfVFlQRV9SRUFECQkweDEwVUwKLSNkZWZpbmUgU0JBTF9GTEFHUzBfVFlQRV9XUklURV9SRUFECTB4MThVTAotI2RlZmluZSBTQkFMX0ZMQUdTMF9NT1JFX1NCQUxTCQkweDA0VUwKLSNkZWZpbmUgU0JBTF9GTEFHUzBfQ09NTUFORAkJMHgwMlVMCi0jZGVmaW5lIFNCQUxfRkxBR1MwX0xBU1RfU0JBTAkJMHgwMFVMCi0jZGVmaW5lIFNCQUxfRkxBR1MwX09OTFlfU0JBTAkJU0JBTF9GTEFHUzBfQ09NTUFORAotI2RlZmluZSBTQkFMX0ZMQUdTMF9NSURETEVfU0JBTAkJU0JBTF9GTEFHUzBfTU9SRV9TQkFMUwotI2RlZmluZSBTQkFMX0ZMQUdTMF9GSVJTVF9TQkFMIFNCQUxfRkxBR1MwX01PUkVfU0JBTFMgfCBTQkFMX0ZMQUdTMF9DT01NQU5ECi0jZGVmaW5lIFNCQUxfRkxBR1MwX1BDSQkJCTB4NDAKLQotLyoqCi0gKiBzdHJ1Y3Qgc2JhbF9zYmFsZl8wIC0gc2JhbCBmbGFncyBmb3Igc2JhbGUgMAotICogQHBjaTogUENJIGluZGljYXRvcgotICogQGNvbnQ6IGRhdGEgY29udGludWF0aW9uCi0gKiBAc2J0eXBlOiBzdG9yYWdlLWJsb2NrIHR5cGUgKEZDUCkKLSAqLwotc3RydWN0IHNiYWxfc2JhbGZfMCB7Ci0JdTgJICA6IDE7Ci0JdTggcGNpCSAgOiAxOwotCXU4IGNvbnQgICA6IDE7Ci0JdTggc2J0eXBlIDogMjsKLQl1OAkgIDogMzsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioKLSAqIHN0cnVjdCBzYmFsX3NiYWxmXzEgLSBzYmFsIGZsYWdzIGZvciBzYmFsZSAxCi0gKiBAa2V5OiBzdG9yYWdlIGtleQotICovCi1zdHJ1Y3Qgc2JhbF9zYmFsZl8xIHsKLQl1OCAgICAgOiA0OwotCXU4IGtleSA6IDQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqCi0gKiBzdHJ1Y3Qgc2JhbF9zYmFsZl8xNCAtIHNiYWwgZmxhZ3MgZm9yIHNiYWxlIDE0Ci0gKiBAZXJyaWR4OiBlcnJvciBpbmRleAotICovCi1zdHJ1Y3Qgc2JhbF9zYmFsZl8xNCB7Ci0JdTgJICA6IDQ7Ci0JdTggZXJyaWR4IDogNDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioKLSAqIHN0cnVjdCBzYmFsX3NiYWxmXzE1IC0gc2JhbCBmbGFncyBmb3Igc2JhbGUgMTUKLSAqIEByZWFzb246IHJlYXNvbiBmb3IgZXJyb3Igc3RhdGUKLSAqLwotc3RydWN0IHNiYWxfc2JhbGZfMTUgewotCXU4IHJlYXNvbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioKLSAqIHVuaW9uIHNiYWxfc2JhbGYgLSBzdG9yYWdlIGJsb2NrIGFkZHJlc3MgbGlzdCBmbGFncwotICogQGkwOiBzYmFsZjAKLSAqIEBpMTogc2JhbGYxCi0gKiBAaTE0OiBzYmFsZjE0Ci0gKiBAaTE1OiBzYmxhZjE1Ci0gKiBAdmFsdWU6IHJhdyB2YWx1ZQotICovCi11bmlvbiBzYmFsX3NiYWxmIHsKLQlzdHJ1Y3Qgc2JhbF9zYmFsZl8wICBpMDsKLQlzdHJ1Y3Qgc2JhbF9zYmFsZl8xICBpMTsKLQlzdHJ1Y3Qgc2JhbF9zYmFsZl8xNCBpMTQ7Ci0Jc3RydWN0IHNiYWxfc2JhbGZfMTUgaTE1OwotCXU4IHZhbHVlOwotfTsKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX1RZUEVfU1RBVFVTCTB4MDAKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX1RZUEVfV1JJVEUJCTB4MDgKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX1RZUEVfUkVBRAkJMHgxMAorI2RlZmluZSBTQkFMX1NGTEFHUzBfVFlQRV9XUklURV9SRUFECTB4MTgKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX01PUkVfU0JBTFMJCTB4MDQKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX0NPTU1BTkQJCTB4MDIKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX0xBU1RfU0JBTAkJMHgwMAorI2RlZmluZSBTQkFMX1NGTEFHUzBfT05MWV9TQkFMCQlTQkFMX1NGTEFHUzBfQ09NTUFORAorI2RlZmluZSBTQkFMX1NGTEFHUzBfTUlERExFX1NCQUwJU0JBTF9TRkxBR1MwX01PUkVfU0JBTFMKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX0ZJUlNUX1NCQUwgKFNCQUxfU0ZMQUdTMF9NT1JFX1NCQUxTIHwgU0JBTF9TRkxBR1MwX0NPTU1BTkQpCiAKIC8qKgogICogc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgLSBTQkFMIGVudHJ5Ci0gKiBAZmxhZ3M6IGZsYWdzCisgKiBAZWZsYWdzOiBTQkFMIGVudHJ5IGZsYWdzCisgKiBAc2NvdW50OiBTQkFMIGNvdW50CisgKiBAc2ZsYWdzOiB3aG9sZSBTQkFMIGZsYWdzCiAgKiBAbGVuZ3RoOiBsZW5ndGgKICAqIEBhZGRyOiBhZGRyZXNzCiAqLwogc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgewotCXUzMiBmbGFnczsKKwl1OCBlZmxhZ3M7CisJLyogcHJpdmF0ZTogKi8KKwl1OCByZXMxOworCS8qIHB1YmxpYzogKi8KKwl1OCBzY291bnQ7CisJdTggc2ZsYWdzOwogCXUzMiBsZW5ndGg7CiAjaWZkZWYgQ09ORklHXzMyQklUCiAJLyogcHJpdmF0ZTogKi8KLQl2b2lkICpyZXNlcnZlZDsKKwl2b2lkICpyZXMyOwogCS8qIHB1YmxpYzogKi8KICNlbmRpZgogCXZvaWQgKmFkZHI7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGxiLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGxiLmgKaW5kZXggNzdlZWU1NC4uYzY4N2EyYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RsYi5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGIuaApAQCAtMjYsNjcgKzI2LDYwIEBACiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgotI2luY2x1ZGUgPGFzbS9zbXAuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAogc3RydWN0IG1tdV9nYXRoZXIgewogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworI2lmZGVmIENPTkZJR19IQVZFX1JDVV9UQUJMRV9GUkVFCisJc3RydWN0IG1tdV90YWJsZV9iYXRjaCAqYmF0Y2g7CisjZW5kaWYKIAl1bnNpZ25lZCBpbnQgZnVsbG1tOwotCXVuc2lnbmVkIGludCBucl9wdGVzOwotCXVuc2lnbmVkIGludCBucl9weGRzOwotCXVuc2lnbmVkIGludCBtYXg7Ci0Jdm9pZCAqKmFycmF5OwotCXZvaWQgKmxvY2FsWzhdOworCXVuc2lnbmVkIGludCBuZWVkX2ZsdXNoOwogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX2FsbG9jX3BhZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9OT1dBSVQgfCBfX0dGUF9OT1dBUk4sIDApOworI2lmZGVmIENPTkZJR19IQVZFX1JDVV9UQUJMRV9GUkVFCitzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoIHsKKwlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKKwl1bnNpZ25lZCBpbnQJCW5yOworCXZvaWQJCQkqdGFibGVzWzBdOworfTsKIAotCWlmIChhZGRyKSB7Ci0JCXRsYi0+YXJyYXkgPSAodm9pZCAqKSBhZGRyOwotCQl0bGItPm1heCA9IFBBR0VfU0laRSAvIHNpemVvZih2b2lkICopOwotCX0KLX0KKyNkZWZpbmUgTUFYX1RBQkxFX0JBVENICQlcCisJKChQQUdFX1NJWkUgLSBzaXplb2Yoc3RydWN0IG1tdV90YWJsZV9iYXRjaCkpIC8gc2l6ZW9mKHZvaWQgKikpCisKK2V4dGVybiB2b2lkIHRsYl90YWJsZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKTsKK2V4dGVybiB2b2lkIHRsYl9yZW1vdmVfdGFibGUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgdm9pZCAqdGFibGUpOworI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfZ2F0aGVyX21tdShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLAogCQkJCSAgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkJICB1bnNpZ25lZCBpbnQgZnVsbF9tbV9mbHVzaCkKIHsKIAl0bGItPm1tID0gbW07Ci0JdGxiLT5tYXggPSBBUlJBWV9TSVpFKHRsYi0+bG9jYWwpOwotCXRsYi0+YXJyYXkgPSB0bGItPmxvY2FsOwogCXRsYi0+ZnVsbG1tID0gZnVsbF9tbV9mbHVzaDsKKwl0bGItPm5lZWRfZmx1c2ggPSAwOworI2lmZGVmIENPTkZJR19IQVZFX1JDVV9UQUJMRV9GUkVFCisJdGxiLT5iYXRjaCA9IE5VTEw7CisjZW5kaWYKIAlpZiAodGxiLT5mdWxsbW0pCiAJCV9fdGxiX2ZsdXNoX21tKG1tKTsKLQllbHNlCi0JCV9fdGxiX2FsbG9jX3BhZ2UodGxiKTsKLQl0bGItPm5yX3B0ZXMgPSAwOwotCXRsYi0+bnJfcHhkcyA9IHRsYi0+bWF4OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2ZsdXNoX21tdShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKQogewotCWlmICghdGxiLT5mdWxsbW0gJiYgKHRsYi0+bnJfcHRlcyA+IDAgfHwgdGxiLT5ucl9weGRzIDwgdGxiLT5tYXgpKQotCQlfX3RsYl9mbHVzaF9tbSh0bGItPm1tKTsKLQl3aGlsZSAodGxiLT5ucl9wdGVzID4gMCkKLQkJcGFnZV90YWJsZV9mcmVlX3JjdSh0bGItPm1tLCB0bGItPmFycmF5Wy0tdGxiLT5ucl9wdGVzXSk7Ci0Jd2hpbGUgKHRsYi0+bnJfcHhkcyA8IHRsYi0+bWF4KQotCQljcnN0X3RhYmxlX2ZyZWVfcmN1KHRsYi0+bW0sIHRsYi0+YXJyYXlbdGxiLT5ucl9weGRzKytdKTsKKwlpZiAoIXRsYi0+bmVlZF9mbHVzaCkKKwkJcmV0dXJuOworCXRsYi0+bmVlZF9mbHVzaCA9IDA7CisJX190bGJfZmx1c2hfbW0odGxiLT5tbSk7CisjaWZkZWYgQ09ORklHX0hBVkVfUkNVX1RBQkxFX0ZSRUUKKwl0bGJfdGFibGVfZmx1c2godGxiKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2ZpbmlzaF9tbXUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCXRsYl9mbHVzaF9tbXUodGxiKTsKLQotCXJjdV90YWJsZV9mcmVlbGlzdF9maW5pc2goKTsKLQotCS8qIGtlZXAgdGhlIHBhZ2UgdGFibGUgY2FjaGUgd2l0aGluIGJvdW5kcyAqLwotCWNoZWNrX3BndF9jYWNoZSgpOwotCi0JaWYgKHRsYi0+YXJyYXkgIT0gdGxiLT5sb2NhbCkKLQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgdGxiLT5hcnJheSwgMCk7CiB9CiAKIC8qCkBAIC0xMTIsMTIgKzEwNSwxMSBAQAogc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwZ3RhYmxlX3QgcHRlLAogCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlpZiAoIXRsYi0+ZnVsbG1tKSB7Ci0JCXRsYi0+YXJyYXlbdGxiLT5ucl9wdGVzKytdID0gcHRlOwotCQlpZiAodGxiLT5ucl9wdGVzID49IHRsYi0+bnJfcHhkcykKLQkJCXRsYl9mbHVzaF9tbXUodGxiKTsKLQl9IGVsc2UKLQkJcGFnZV90YWJsZV9mcmVlKHRsYi0+bW0sICh1bnNpZ25lZCBsb25nICopIHB0ZSk7CisjaWZkZWYgQ09ORklHX0hBVkVfUkNVX1RBQkxFX0ZSRUUKKwlpZiAoIXRsYi0+ZnVsbG1tKQorCQlyZXR1cm4gcGFnZV90YWJsZV9mcmVlX3JjdSh0bGIsICh1bnNpZ25lZCBsb25nICopIHB0ZSk7CisjZW5kaWYKKwlwYWdlX3RhYmxlX2ZyZWUodGxiLT5tbSwgKHVuc2lnbmVkIGxvbmcgKikgcHRlKTsKIH0KIAogLyoKQEAgLTEzMywxMiArMTI1LDExIEBACiAjaWZkZWYgX19zMzkweF9fCiAJaWYgKHRsYi0+bW0tPmNvbnRleHQuYXNjZV9saW1pdCA8PSAoMVVMIDw8IDMxKSkKIAkJcmV0dXJuOwotCWlmICghdGxiLT5mdWxsbW0pIHsKLQkJdGxiLT5hcnJheVstLXRsYi0+bnJfcHhkc10gPSBwbWQ7Ci0JCWlmICh0bGItPm5yX3B0ZXMgPj0gdGxiLT5ucl9weGRzKQotCQkJdGxiX2ZsdXNoX21tdSh0bGIpOwotCX0gZWxzZQotCQljcnN0X3RhYmxlX2ZyZWUodGxiLT5tbSwgKHVuc2lnbmVkIGxvbmcgKikgcG1kKTsKKyNpZmRlZiBDT05GSUdfSEFWRV9SQ1VfVEFCTEVfRlJFRQorCWlmICghdGxiLT5mdWxsbW0pCisJCXJldHVybiB0bGJfcmVtb3ZlX3RhYmxlKHRsYiwgcG1kKTsKKyNlbmRpZgorCWNyc3RfdGFibGVfZnJlZSh0bGItPm1tLCAodW5zaWduZWQgbG9uZyAqKSBwbWQpOwogI2VuZGlmCiB9CiAKQEAgLTE1NSwxMiArMTQ2LDExIEBACiAjaWZkZWYgX19zMzkweF9fCiAJaWYgKHRsYi0+bW0tPmNvbnRleHQuYXNjZV9saW1pdCA8PSAoMVVMIDw8IDQyKSkKIAkJcmV0dXJuOwotCWlmICghdGxiLT5mdWxsbW0pIHsKLQkJdGxiLT5hcnJheVstLXRsYi0+bnJfcHhkc10gPSBwdWQ7Ci0JCWlmICh0bGItPm5yX3B0ZXMgPj0gdGxiLT5ucl9weGRzKQotCQkJdGxiX2ZsdXNoX21tdSh0bGIpOwotCX0gZWxzZQotCQljcnN0X3RhYmxlX2ZyZWUodGxiLT5tbSwgKHVuc2lnbmVkIGxvbmcgKikgcHVkKTsKKyNpZmRlZiBDT05GSUdfSEFWRV9SQ1VfVEFCTEVfRlJFRQorCWlmICghdGxiLT5mdWxsbW0pCisJCXJldHVybiB0bGJfcmVtb3ZlX3RhYmxlKHRsYiwgcHVkKTsKKyNlbmRpZgorCWNyc3RfdGFibGVfZnJlZSh0bGItPm1tLCAodW5zaWduZWQgbG9uZyAqKSBwdWQpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwppbmRleCAzMGNhODVjLi42NzM0NWFlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCkBAIC03MzEsNiArNzMxLDcgQEAKIAl9CiAJbWVtY3B5KGZhY2lsaXRpZXMsIFMzOTBfbG93Y29yZS5zdGZsZV9mYWNfbGlzdCwgMTYpOwogCWZhY2lsaXRpZXNbMF0gJj0gMHhmZjAwZmZmM2Y0N2MwMDAwVUxMOworCWZhY2lsaXRpZXNbMV0gJj0gMHgyMDFjMDAwMDAwMDAwMDAwVUxMOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3NpZTY0YS5TIGIvYXJjaC9zMzkwL2t2bS9zaWU2NGEuUwppbmRleCBhYjBlMDQxLi41ZmFhMWIxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3NpZTY0YS5TCisrKyBiL2FyY2gvczM5MC9rdm0vc2llNjRhLlMKQEAgLTkzLDQgKzkzLDYgQEAKIAogCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCiAJLnF1YWQJc2llX2luc3Qsc2llX2VycgorCS5xdWFkCXNpZV9leGl0LHNpZV9lcnIKKwkucXVhZAlzaWVfcmVlbnRlcixzaWVfZXJyCiAJLnByZXZpb3VzCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jIGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwppbmRleCBiMDk3NjNmLi4zN2EyM2MyMiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL3BndGFibGUuYworKysgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCkBAIC0yNCw5NCArMjQsMTIgQEAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KIAotc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCB7Ci0Jc3RydWN0IHJjdV9oZWFkIHJjdTsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKLQl1bnNpZ25lZCBpbnQgcGd0X2luZGV4OwotCXVuc2lnbmVkIGludCBjcnN0X2luZGV4OwotCXVuc2lnbmVkIGxvbmcgKnRhYmxlWzBdOwotfTsKLQotI2RlZmluZSBSQ1VfRlJFRUxJU1RfU0laRSBcCi0JKChQQUdFX1NJWkUgLSBzaXplb2Yoc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCkpIFwKLQkgIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQotCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCAqLCByY3VfdGFibGVfZnJlZWxpc3QpOwotCi1zdGF0aWMgdm9pZCBfX3BhZ2VfdGFibGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyAqdGFibGUpOwotCi1zdGF0aWMgc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCAqcmN1X3RhYmxlX2ZyZWVsaXN0X2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlzdHJ1Y3QgcmN1X3RhYmxlX2ZyZWVsaXN0ICoqYmF0Y2hwID0gJl9fZ2V0X2NwdV92YXIocmN1X3RhYmxlX2ZyZWVsaXN0KTsKLQlzdHJ1Y3QgcmN1X3RhYmxlX2ZyZWVsaXN0ICpiYXRjaCA9ICpiYXRjaHA7Ci0KLQlpZiAoYmF0Y2gpCi0JCXJldHVybiBiYXRjaDsKLQliYXRjaCA9IChzdHJ1Y3QgcmN1X3RhYmxlX2ZyZWVsaXN0ICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfQVRPTUlDKTsKLQlpZiAoYmF0Y2gpIHsKLQkJYmF0Y2gtPm1tID0gbW07Ci0JCWJhdGNoLT5wZ3RfaW5kZXggPSAwOwotCQliYXRjaC0+Y3JzdF9pbmRleCA9IFJDVV9GUkVFTElTVF9TSVpFOwotCQkqYmF0Y2hwID0gYmF0Y2g7Ci0JfQotCXJldHVybiBiYXRjaDsKLX0KLQotc3RhdGljIHZvaWQgcmN1X3RhYmxlX2ZyZWVsaXN0X2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKLXsKLQlzdHJ1Y3QgcmN1X3RhYmxlX2ZyZWVsaXN0ICpiYXRjaCA9Ci0JCWNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgcmN1X3RhYmxlX2ZyZWVsaXN0LCByY3UpOwotCi0Jd2hpbGUgKGJhdGNoLT5wZ3RfaW5kZXggPiAwKQotCQlfX3BhZ2VfdGFibGVfZnJlZShiYXRjaC0+bW0sIGJhdGNoLT50YWJsZVstLWJhdGNoLT5wZ3RfaW5kZXhdKTsKLQl3aGlsZSAoYmF0Y2gtPmNyc3RfaW5kZXggPCBSQ1VfRlJFRUxJU1RfU0laRSkKLQkJY3JzdF90YWJsZV9mcmVlKGJhdGNoLT5tbSwgYmF0Y2gtPnRhYmxlW2JhdGNoLT5jcnN0X2luZGV4KytdKTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGJhdGNoKTsKLX0KLQotdm9pZCByY3VfdGFibGVfZnJlZWxpc3RfZmluaXNoKHZvaWQpCi17Ci0Jc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCAqKmJhdGNocCA9ICZnZXRfY3B1X3ZhcihyY3VfdGFibGVfZnJlZWxpc3QpOwotCXN0cnVjdCByY3VfdGFibGVfZnJlZWxpc3QgKmJhdGNoID0gKmJhdGNocDsKLQotCWlmICghYmF0Y2gpCi0JCWdvdG8gb3V0OwotCWNhbGxfcmN1KCZiYXRjaC0+cmN1LCByY3VfdGFibGVfZnJlZWxpc3RfY2FsbGJhY2spOwotCSpiYXRjaHAgPSBOVUxMOwotb3V0OgotCXB1dF9jcHVfdmFyKHJjdV90YWJsZV9mcmVlbGlzdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNtcF9zeW5jKHZvaWQgKmFyZykKLXsKLX0KLQogI2lmbmRlZiBDT05GSUdfNjRCSVQKICNkZWZpbmUgQUxMT0NfT1JERVIJMQotI2RlZmluZSBUQUJMRVNfUEVSX1BBR0UJNAotI2RlZmluZSBGUkFHX01BU0sJMTVVTAotI2RlZmluZSBTRUNPTkRfSEFMVkVTCTEwVUwKLQotdm9pZCBjbGVhcl90YWJsZV9wZ3N0ZXModW5zaWduZWQgbG9uZyAqdGFibGUpCi17Ci0JY2xlYXJfdGFibGUodGFibGUsIF9QQUdFX1RZUEVfRU1QVFksIFBBR0VfU0laRS80KTsKLQltZW1zZXQodGFibGUgKyAyNTYsIDAsIFBBR0VfU0laRS80KTsKLQljbGVhcl90YWJsZSh0YWJsZSArIDUxMiwgX1BBR0VfVFlQRV9FTVBUWSwgUEFHRV9TSVpFLzQpOwotCW1lbXNldCh0YWJsZSArIDc2OCwgMCwgUEFHRV9TSVpFLzQpOwotfQotCisjZGVmaW5lIEZSQUdfTUFTSwkweDBmCiAjZWxzZQogI2RlZmluZSBBTExPQ19PUkRFUgkyCi0jZGVmaW5lIFRBQkxFU19QRVJfUEFHRQkyCi0jZGVmaW5lIEZSQUdfTUFTSwkzVUwKLSNkZWZpbmUgU0VDT05EX0hBTFZFUwkyVUwKLQotdm9pZCBjbGVhcl90YWJsZV9wZ3N0ZXModW5zaWduZWQgbG9uZyAqdGFibGUpCi17Ci0JY2xlYXJfdGFibGUodGFibGUsIF9QQUdFX1RZUEVfRU1QVFksIFBBR0VfU0laRS8yKTsKLQltZW1zZXQodGFibGUgKyAyNTYsIDAsIFBBR0VfU0laRS8yKTsKLX0KLQorI2RlZmluZSBGUkFHX01BU0sJMHgwMwogI2VuZGlmCiAKIHVuc2lnbmVkIGxvbmcgVk1BTExPQ19TVEFSVCA9IFZNQUxMT0NfRU5EIC0gVk1BTExPQ19TSVpFOwpAQCAtMTQwLDI5ICs1OCw2IEBACiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgdGFibGUsIEFMTE9DX09SREVSKTsKIH0KIAotdm9pZCBjcnN0X3RhYmxlX2ZyZWVfcmN1KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nICp0YWJsZSkKLXsKLQlzdHJ1Y3QgcmN1X3RhYmxlX2ZyZWVsaXN0ICpiYXRjaDsKLQotCXByZWVtcHRfZGlzYWJsZSgpOwotCWlmIChhdG9taWNfcmVhZCgmbW0tPm1tX3VzZXJzKSA8IDIgJiYKLQkgICAgY3B1bWFza19lcXVhbChtbV9jcHVtYXNrKG1tKSwgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKSkgewotCQljcnN0X3RhYmxlX2ZyZWUobW0sIHRhYmxlKTsKLQkJZ290byBvdXQ7Ci0JfQotCWJhdGNoID0gcmN1X3RhYmxlX2ZyZWVsaXN0X2dldChtbSk7Ci0JaWYgKCFiYXRjaCkgewotCQlzbXBfY2FsbF9mdW5jdGlvbihzbXBfc3luYywgTlVMTCwgMSk7Ci0JCWNyc3RfdGFibGVfZnJlZShtbSwgdGFibGUpOwotCQlnb3RvIG91dDsKLQl9Ci0JYmF0Y2gtPnRhYmxlWy0tYmF0Y2gtPmNyc3RfaW5kZXhdID0gdGFibGU7Ci0JaWYgKGJhdGNoLT5wZ3RfaW5kZXggPj0gYmF0Y2gtPmNyc3RfaW5kZXgpCi0JCXJjdV90YWJsZV9mcmVlbGlzdF9maW5pc2goKTsKLW91dDoKLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCiAjaWZkZWYgQ09ORklHXzY0QklUCiBpbnQgY3JzdF90YWJsZV91cGdyYWRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGxpbWl0KQogewpAQCAtMjM4LDEyNCArMTMzLDE3NSBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGF0b21pY194b3JfYml0cyhhdG9taWNfdCAqdiwgdW5zaWduZWQgaW50IGJpdHMpCit7CisJdW5zaWduZWQgaW50IG9sZCwgbmV3OworCisJZG8geworCQlvbGQgPSBhdG9taWNfcmVhZCh2KTsKKwkJbmV3ID0gb2xkIF4gYml0czsKKwl9IHdoaWxlIChhdG9taWNfY21weGNoZyh2LCBvbGQsIG5ldykgIT0gb2xkKTsKKwlyZXR1cm4gbmV3OworfQorCiAvKgogICogcGFnZSB0YWJsZSBlbnRyeSBhbGxvY2F0aW9uL2ZyZWUgcm91dGluZXMuCiAgKi8KKyNpZmRlZiBDT05GSUdfUEdTVEUKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyAqcGFnZV90YWJsZV9hbGxvY19wZ3N0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1bnNpZ25lZCBsb25nICp0YWJsZTsKKworCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUx8X19HRlBfUkVQRUFUKTsKKwlpZiAoIXBhZ2UpCisJCXJldHVybiBOVUxMOworCXBndGFibGVfcGFnZV9jdG9yKHBhZ2UpOworCWF0b21pY19zZXQoJnBhZ2UtPl9tYXBjb3VudCwgMyk7CisJdGFibGUgPSAodW5zaWduZWQgbG9uZyAqKSBwYWdlX3RvX3BoeXMocGFnZSk7CisJY2xlYXJfdGFibGUodGFibGUsIF9QQUdFX1RZUEVfRU1QVFksIFBBR0VfU0laRS8yKTsKKwljbGVhcl90YWJsZSh0YWJsZSArIFBUUlNfUEVSX1BURSwgMCwgUEFHRV9TSVpFLzIpOworCXJldHVybiB0YWJsZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfZnJlZV9wZ3N0ZSh1bnNpZ25lZCBsb25nICp0YWJsZSkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCXBhZ2UgPSBwZm5fdG9fcGFnZShfX3BhKHRhYmxlKSA+PiBQQUdFX1NISUZUKTsKKwlwZ3RhYmxlX3BhZ2VfY3RvcihwYWdlKTsKKwlhdG9taWNfc2V0KCZwYWdlLT5fbWFwY291bnQsIC0xKTsKKwlfX2ZyZWVfcGFnZShwYWdlKTsKK30KKyNlbmRpZgorCiB1bnNpZ25lZCBsb25nICpwYWdlX3RhYmxlX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwogCXVuc2lnbmVkIGxvbmcgKnRhYmxlOwotCXVuc2lnbmVkIGxvbmcgYml0czsKKwl1bnNpZ25lZCBpbnQgbWFzaywgYml0OwogCi0JYml0cyA9IChtbS0+Y29udGV4dC5oYXNfcGdzdGUpID8gM1VMIDogMVVMOworI2lmZGVmIENPTkZJR19QR1NURQorCWlmIChtbV9oYXNfcGdzdGUobW0pKQorCQlyZXR1cm4gcGFnZV90YWJsZV9hbGxvY19wZ3N0ZShtbSk7CisjZW5kaWYKKwkvKiBBbGxvY2F0ZSBmcmFnbWVudHMgb2YgYSA0SyBwYWdlIGFzIDFLLzJLIHBhZ2UgdGFibGUgKi8KIAlzcGluX2xvY2tfYmgoJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7Ci0JcGFnZSA9IE5VTEw7CisJbWFzayA9IEZSQUdfTUFTSzsKIAlpZiAoIWxpc3RfZW1wdHkoJm1tLT5jb250ZXh0LnBndGFibGVfbGlzdCkpIHsKIAkJcGFnZSA9IGxpc3RfZmlyc3RfZW50cnkoJm1tLT5jb250ZXh0LnBndGFibGVfbGlzdCwKIAkJCQkJc3RydWN0IHBhZ2UsIGxydSk7Ci0JCWlmICgocGFnZS0+ZmxhZ3MgJiBGUkFHX01BU0spID09ICgoMVVMIDw8IFRBQkxFU19QRVJfUEFHRSkgLSAxKSkKLQkJCXBhZ2UgPSBOVUxMOworCQl0YWJsZSA9ICh1bnNpZ25lZCBsb25nICopIHBhZ2VfdG9fcGh5cyhwYWdlKTsKKwkJbWFzayA9IGF0b21pY19yZWFkKCZwYWdlLT5fbWFwY291bnQpOworCQltYXNrID0gbWFzayB8IChtYXNrID4+IDQpOwogCX0KLQlpZiAoIXBhZ2UpIHsKKwlpZiAoKG1hc2sgJiBGUkFHX01BU0spID09IEZSQUdfTUFTSykgewogCQlzcGluX3VubG9ja19iaCgmbW0tPmNvbnRleHQubGlzdF9sb2NrKTsKIAkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVQpOwogCQlpZiAoIXBhZ2UpCiAJCQlyZXR1cm4gTlVMTDsKIAkJcGd0YWJsZV9wYWdlX2N0b3IocGFnZSk7Ci0JCXBhZ2UtPmZsYWdzICY9IH5GUkFHX01BU0s7CisJCWF0b21pY19zZXQoJnBhZ2UtPl9tYXBjb3VudCwgMSk7CiAJCXRhYmxlID0gKHVuc2lnbmVkIGxvbmcgKikgcGFnZV90b19waHlzKHBhZ2UpOwotCQlpZiAobW0tPmNvbnRleHQuaGFzX3Bnc3RlKQotCQkJY2xlYXJfdGFibGVfcGdzdGVzKHRhYmxlKTsKLQkJZWxzZQotCQkJY2xlYXJfdGFibGUodGFibGUsIF9QQUdFX1RZUEVfRU1QVFksIFBBR0VfU0laRSk7CisJCWNsZWFyX3RhYmxlKHRhYmxlLCBfUEFHRV9UWVBFX0VNUFRZLCBQQUdFX1NJWkUpOwogCQlzcGluX2xvY2tfYmgoJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7CiAJCWxpc3RfYWRkKCZwYWdlLT5scnUsICZtbS0+Y29udGV4dC5wZ3RhYmxlX2xpc3QpOworCX0gZWxzZSB7CisJCWZvciAoYml0ID0gMTsgbWFzayAmIGJpdDsgYml0IDw8PSAxKQorCQkJdGFibGUgKz0gUFRSU19QRVJfUFRFOworCQltYXNrID0gYXRvbWljX3hvcl9iaXRzKCZwYWdlLT5fbWFwY291bnQsIGJpdCk7CisJCWlmICgobWFzayAmIEZSQUdfTUFTSykgPT0gRlJBR19NQVNLKQorCQkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7CiAJfQotCXRhYmxlID0gKHVuc2lnbmVkIGxvbmcgKikgcGFnZV90b19waHlzKHBhZ2UpOwotCXdoaWxlIChwYWdlLT5mbGFncyAmIGJpdHMpIHsKLQkJdGFibGUgKz0gMjU2OwotCQliaXRzIDw8PSAxOwotCX0KLQlwYWdlLT5mbGFncyB8PSBiaXRzOwotCWlmICgocGFnZS0+ZmxhZ3MgJiBGUkFHX01BU0spID09ICgoMVVMIDw8IFRBQkxFU19QRVJfUEFHRSkgLSAxKSkKLQkJbGlzdF9tb3ZlX3RhaWwoJnBhZ2UtPmxydSwgJm1tLT5jb250ZXh0LnBndGFibGVfbGlzdCk7CiAJc3Bpbl91bmxvY2tfYmgoJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7CiAJcmV0dXJuIHRhYmxlOwogfQogCi1zdGF0aWMgdm9pZCBfX3BhZ2VfdGFibGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyAqdGFibGUpCi17Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JdW5zaWduZWQgbG9uZyBiaXRzOwotCi0JYml0cyA9ICgodW5zaWduZWQgbG9uZykgdGFibGUpICYgMTU7Ci0JdGFibGUgPSAodW5zaWduZWQgbG9uZyAqKSgoKHVuc2lnbmVkIGxvbmcpIHRhYmxlKSBeIGJpdHMpOwotCXBhZ2UgPSBwZm5fdG9fcGFnZShfX3BhKHRhYmxlKSA+PiBQQUdFX1NISUZUKTsKLQlwYWdlLT5mbGFncyBePSBiaXRzOwotCWlmICghKHBhZ2UtPmZsYWdzICYgRlJBR19NQVNLKSkgewotCQlwZ3RhYmxlX3BhZ2VfZHRvcihwYWdlKTsKLQkJX19mcmVlX3BhZ2UocGFnZSk7Ci0JfQotfQotCiB2b2lkIHBhZ2VfdGFibGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyAqdGFibGUpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JdW5zaWduZWQgbG9uZyBiaXRzOworCXVuc2lnbmVkIGludCBiaXQsIG1hc2s7CiAKLQliaXRzID0gKG1tLT5jb250ZXh0Lmhhc19wZ3N0ZSkgPyAzVUwgOiAxVUw7Ci0JYml0cyA8PD0gKF9fcGEodGFibGUpICYgKFBBR0VfU0laRSAtIDEpKSAvIDI1NiAvIHNpemVvZih1bnNpZ25lZCBsb25nKTsKKyNpZmRlZiBDT05GSUdfUEdTVEUKKwlpZiAobW1faGFzX3Bnc3RlKG1tKSkKKwkJcmV0dXJuIHBhZ2VfdGFibGVfZnJlZV9wZ3N0ZSh0YWJsZSk7CisjZW5kaWYKKwkvKiBGcmVlIDFLLzJLIHBhZ2UgdGFibGUgZnJhZ21lbnQgb2YgYSA0SyBwYWdlICovCiAJcGFnZSA9IHBmbl90b19wYWdlKF9fcGEodGFibGUpID4+IFBBR0VfU0hJRlQpOworCWJpdCA9IDEgPDwgKChfX3BhKHRhYmxlKSAmIH5QQUdFX01BU0spLyhQVFJTX1BFUl9QVEUqc2l6ZW9mKHB0ZV90KSkpOwogCXNwaW5fbG9ja19iaCgmbW0tPmNvbnRleHQubGlzdF9sb2NrKTsKLQlwYWdlLT5mbGFncyBePSBiaXRzOwotCWlmIChwYWdlLT5mbGFncyAmIEZSQUdfTUFTSykgewotCQkvKiBQYWdlIG5vdyBoYXMgc29tZSBmcmVlIHBndGFibGUgZnJhZ21lbnRzLiAqLwotCQlpZiAoIWxpc3RfZW1wdHkoJnBhZ2UtPmxydSkpCi0JCQlsaXN0X21vdmUoJnBhZ2UtPmxydSwgJm1tLT5jb250ZXh0LnBndGFibGVfbGlzdCk7Ci0JCXBhZ2UgPSBOVUxMOwotCX0gZWxzZQotCQkvKiBBbGwgZnJhZ21lbnRzIG9mIHRoZSA0SyBwYWdlIGhhdmUgYmVlbiBmcmVlZC4gKi8KKwlpZiAoKGF0b21pY19yZWFkKCZwYWdlLT5fbWFwY291bnQpICYgRlJBR19NQVNLKSAhPSBGUkFHX01BU0spCiAJCWxpc3RfZGVsKCZwYWdlLT5scnUpOworCW1hc2sgPSBhdG9taWNfeG9yX2JpdHMoJnBhZ2UtPl9tYXBjb3VudCwgYml0KTsKKwlpZiAobWFzayAmIEZSQUdfTUFTSykKKwkJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJm1tLT5jb250ZXh0LnBndGFibGVfbGlzdCk7CiAJc3Bpbl91bmxvY2tfYmgoJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7Ci0JaWYgKHBhZ2UpIHsKKwlpZiAobWFzayA9PSAwKSB7CiAJCXBndGFibGVfcGFnZV9kdG9yKHBhZ2UpOworCQlhdG9taWNfc2V0KCZwYWdlLT5fbWFwY291bnQsIC0xKTsKIAkJX19mcmVlX3BhZ2UocGFnZSk7CiAJfQogfQogCi12b2lkIHBhZ2VfdGFibGVfZnJlZV9yY3Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgKnRhYmxlKQotewotCXN0cnVjdCByY3VfdGFibGVfZnJlZWxpc3QgKmJhdGNoOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCXVuc2lnbmVkIGxvbmcgYml0czsKKyNpZmRlZiBDT05GSUdfSEFWRV9SQ1VfVEFCTEVfRlJFRQogCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JaWYgKGF0b21pY19yZWFkKCZtbS0+bW1fdXNlcnMpIDwgMiAmJgotCSAgICBjcHVtYXNrX2VxdWFsKG1tX2NwdW1hc2sobW0pLCBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSkpKSB7Ci0JCXBhZ2VfdGFibGVfZnJlZShtbSwgdGFibGUpOwotCQlnb3RvIG91dDsKK3N0YXRpYyB2b2lkIF9fcGFnZV90YWJsZV9mcmVlX3JjdSh2b2lkICp0YWJsZSwgdW5zaWduZWQgYml0KQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCisjaWZkZWYgQ09ORklHX1BHU1RFCisJaWYgKGJpdCA9PSBGUkFHX01BU0spCisJCXJldHVybiBwYWdlX3RhYmxlX2ZyZWVfcGdzdGUodGFibGUpOworI2VuZGlmCisJLyogRnJlZSAxSy8ySyBwYWdlIHRhYmxlIGZyYWdtZW50IG9mIGEgNEsgcGFnZSAqLworCXBhZ2UgPSBwZm5fdG9fcGFnZShfX3BhKHRhYmxlKSA+PiBQQUdFX1NISUZUKTsKKwlpZiAoYXRvbWljX3hvcl9iaXRzKCZwYWdlLT5fbWFwY291bnQsIGJpdCkgPT0gMCkgeworCQlwZ3RhYmxlX3BhZ2VfZHRvcihwYWdlKTsKKwkJYXRvbWljX3NldCgmcGFnZS0+X21hcGNvdW50LCAtMSk7CisJCV9fZnJlZV9wYWdlKHBhZ2UpOwogCX0KLQliYXRjaCA9IHJjdV90YWJsZV9mcmVlbGlzdF9nZXQobW0pOwotCWlmICghYmF0Y2gpIHsKLQkJc21wX2NhbGxfZnVuY3Rpb24oc21wX3N5bmMsIE5VTEwsIDEpOwotCQlwYWdlX3RhYmxlX2ZyZWUobW0sIHRhYmxlKTsKLQkJZ290byBvdXQ7Cit9CisKK3ZvaWQgcGFnZV90YWJsZV9mcmVlX3JjdShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB1bnNpZ25lZCBsb25nICp0YWJsZSkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1bnNpZ25lZCBpbnQgYml0LCBtYXNrOworCisJbW0gPSB0bGItPm1tOworI2lmZGVmIENPTkZJR19QR1NURQorCWlmIChtbV9oYXNfcGdzdGUobW0pKSB7CisJCXRhYmxlID0gKHVuc2lnbmVkIGxvbmcgKikgKF9fcGEodGFibGUpIHwgRlJBR19NQVNLKTsKKwkJdGxiX3JlbW92ZV90YWJsZSh0bGIsIHRhYmxlKTsKKwkJcmV0dXJuOwogCX0KLQliaXRzID0gKG1tLT5jb250ZXh0Lmhhc19wZ3N0ZSkgPyAzVUwgOiAxVUw7Ci0JYml0cyA8PD0gKF9fcGEodGFibGUpICYgKFBBR0VfU0laRSAtIDEpKSAvIDI1NiAvIHNpemVvZih1bnNpZ25lZCBsb25nKTsKKyNlbmRpZgorCWJpdCA9IDEgPDwgKChfX3BhKHRhYmxlKSAmIH5QQUdFX01BU0spIC8gKFBUUlNfUEVSX1BURSpzaXplb2YocHRlX3QpKSk7CiAJcGFnZSA9IHBmbl90b19wYWdlKF9fcGEodGFibGUpID4+IFBBR0VfU0hJRlQpOwogCXNwaW5fbG9ja19iaCgmbW0tPmNvbnRleHQubGlzdF9sb2NrKTsKLQkvKiBEZWxheWVkIGZyZWVpbmcgd2l0aCByY3UgcHJldmVudHMgcmV1c2Ugb2YgcGd0YWJsZSBmcmFnbWVudHMgKi8KLQlsaXN0X2RlbF9pbml0KCZwYWdlLT5scnUpOworCWlmICgoYXRvbWljX3JlYWQoJnBhZ2UtPl9tYXBjb3VudCkgJiBGUkFHX01BU0spICE9IEZSQUdfTUFTSykKKwkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7CisJbWFzayA9IGF0b21pY194b3JfYml0cygmcGFnZS0+X21hcGNvdW50LCBiaXQgfCAoYml0IDw8IDQpKTsKKwlpZiAobWFzayAmIEZSQUdfTUFTSykKKwkJbGlzdF9hZGRfdGFpbCgmcGFnZS0+bHJ1LCAmbW0tPmNvbnRleHQucGd0YWJsZV9saXN0KTsKIAlzcGluX3VubG9ja19iaCgmbW0tPmNvbnRleHQubGlzdF9sb2NrKTsKLQl0YWJsZSA9ICh1bnNpZ25lZCBsb25nICopKCgodW5zaWduZWQgbG9uZykgdGFibGUpIHwgYml0cyk7Ci0JYmF0Y2gtPnRhYmxlW2JhdGNoLT5wZ3RfaW5kZXgrK10gPSB0YWJsZTsKLQlpZiAoYmF0Y2gtPnBndF9pbmRleCA+PSBiYXRjaC0+Y3JzdF9pbmRleCkKLQkJcmN1X3RhYmxlX2ZyZWVsaXN0X2ZpbmlzaCgpOwotb3V0OgotCXByZWVtcHRfZW5hYmxlKCk7CisJdGFibGUgPSAodW5zaWduZWQgbG9uZyAqKSAoX19wYSh0YWJsZSkgfCAoYml0IDw8IDQpKTsKKwl0bGJfcmVtb3ZlX3RhYmxlKHRsYiwgdGFibGUpOwogfQogCit2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICpfdGFibGUpCit7CisJdm9pZCAqdGFibGUgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZykgX3RhYmxlICYgUEFHRV9NQVNLKTsKKwl1bnNpZ25lZCB0eXBlID0gKHVuc2lnbmVkIGxvbmcpIF90YWJsZSAmIH5QQUdFX01BU0s7CisKKwlpZiAodHlwZSkKKwkJX19wYWdlX3RhYmxlX2ZyZWVfcmN1KHRhYmxlLCB0eXBlKTsKKwllbHNlCisJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpIHRhYmxlLCBBTExPQ19PUkRFUik7Cit9CisKKyNlbmRpZgorCiAvKgogICogc3dpdGNoIG9uIHBnc3RlcyBmb3IgaXRzIHVzZXJzcGFjZSBwcm9jZXNzIChmb3Iga3ZtKQogICovCkBAIC0zNjksNyArMzE1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBEbyB3ZSBoYXZlIHBnc3Rlcz8gaWYgeWVzLCB3ZSBhcmUgZG9uZSAqLwotCWlmICh0c2stPm1tLT5jb250ZXh0Lmhhc19wZ3N0ZSkKKwlpZiAobW1faGFzX3Bnc3RlKHRzay0+bW0pKQogCQlyZXR1cm4gMDsKIAogCS8qIGxldHMgY2hlY2sgaWYgd2UgYXJlIGFsbG93ZWQgdG8gcmVwbGFjZSB0aGUgbW0gKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYwppbmRleCBjZDhjYmViLi43YzNhOTVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CiAjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAjaW5jbHVkZSA8YXNtL2dhcnQuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2FtZF9pb21tdV9wcm90by5oPgogI2luY2x1ZGUgPGFzbS9hbWRfaW9tbXVfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vYW1kX2lvbW11Lmg+CkBAIC0xNTQsNiArMTU1LDEwIEBACiAJcGRldiA9IHBjaV9nZXRfYnVzX2FuZF9zbG90KFBDSV9CVVMoYWxpYXMpLCBhbGlhcyAmIDB4ZmYpOwogCWlmIChwZGV2KQogCQlkZXZfZGF0YS0+YWxpYXMgPSAmcGRldi0+ZGV2OworCWVsc2UgeworCQlrZnJlZShkZXZfZGF0YSk7CisJCXJldHVybiAtRU5PVFNVUFA7CisJfQogCiAJYXRvbWljX3NldCgmZGV2X2RhdGEtPmJpbmQsIDApOwogCkBAIC0xNjMsNiArMTY4LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGlvbW11X2lnbm9yZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXUxNiBkZXZpZCwgYWxpYXM7CisKKwlkZXZpZCA9IGdldF9kZXZpY2VfaWQoZGV2KTsKKwlhbGlhcyA9IGFtZF9pb21tdV9hbGlhc190YWJsZVtkZXZpZF07CisKKwltZW1zZXQoJmFtZF9pb21tdV9kZXZfdGFibGVbZGV2aWRdLCAwLCBzaXplb2Yoc3RydWN0IGRldl90YWJsZV9lbnRyeSkpOworCW1lbXNldCgmYW1kX2lvbW11X2Rldl90YWJsZVthbGlhc10sIDAsIHNpemVvZihzdHJ1Y3QgZGV2X3RhYmxlX2VudHJ5KSk7CisKKwlhbWRfaW9tbXVfcmxvb2t1cF90YWJsZVtkZXZpZF0gPSBOVUxMOworCWFtZF9pb21tdV9ybG9va3VwX3RhYmxlW2FsaWFzXSA9IE5VTEw7Cit9CisKIHN0YXRpYyB2b2lkIGlvbW11X3VuaW5pdF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQogewogCWtmcmVlKGRldi0+YXJjaGRhdGEuaW9tbXUpOwpAQCAtMTkyLDcgKzIxMSw5IEBACiAJCQljb250aW51ZTsKIAogCQlyZXQgPSBpb21tdV9pbml0X2RldmljZSgmcGRldi0+ZGV2KTsKLQkJaWYgKHJldCkKKwkJaWYgKHJldCA9PSAtRU5PVFNVUFApCisJCQlpb21tdV9pZ25vcmVfZGV2aWNlKCZwZGV2LT5kZXYpOworCQllbHNlIGlmIChyZXQpCiAJCQlnb3RvIG91dF9mcmVlOwogCX0KIApAQCAtMjM4Myw2ICsyNDA0LDIzIEBACiAJLmRtYV9zdXBwb3J0ZWQgPSBhbWRfaW9tbXVfZG1hX3N1cHBvcnRlZCwKIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBkZXZpY2VfZG1hX29wc19pbml0KHZvaWQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOworCXVuc2lnbmVkIHVuaGFuZGxlZCA9IDA7CisKKwlmb3JfZWFjaF9wY2lfZGV2KHBkZXYpIHsKKwkJaWYgKCFjaGVja19kZXZpY2UoJnBkZXYtPmRldikpIHsKKwkJCXVuaGFuZGxlZCArPSAxOworCQkJY29udGludWU7CisJCX0KKworCQlwZGV2LT5kZXYuYXJjaGRhdGEuZG1hX29wcyA9ICZhbWRfaW9tbXVfZG1hX29wczsKKwl9CisKKwlyZXR1cm4gdW5oYW5kbGVkOworfQorCiAvKgogICogVGhlIGZ1bmN0aW9uIHdoaWNoIGNsdWVzIHRoZSBBTUQgSU9NTVUgZHJpdmVyIGludG8gZG1hX29wcy4KICAqLwpAQCAtMjM5NSw3ICsyNDMzLDcgQEAKIGludCBfX2luaXQgYW1kX2lvbW11X2luaXRfZG1hX29wcyh2b2lkKQogewogCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11OwotCWludCByZXQ7CisJaW50IHJldCwgdW5oYW5kbGVkOwogCiAJLyoKIAkgKiBmaXJzdCBhbGxvY2F0ZSBhIGRlZmF1bHQgcHJvdGVjdGlvbiBkb21haW4gZm9yIGV2ZXJ5IElPTU1VIHdlCkBAIC0yNDIxLDcgKzI0NTksMTEgQEAKIAlzd2lvdGxiID0gMDsKIAogCS8qIE1ha2UgdGhlIGRyaXZlciBmaW5hbGx5IHZpc2libGUgdG8gdGhlIGRyaXZlcnMgKi8KLQlkbWFfb3BzID0gJmFtZF9pb21tdV9kbWFfb3BzOworCXVuaGFuZGxlZCA9IGRldmljZV9kbWFfb3BzX2luaXQoKTsKKwlpZiAodW5oYW5kbGVkICYmIG1heF9wZm4gPiBNQVhfRE1BMzJfUEZOKSB7CisJCS8qIFRoZXJlIGFyZSB1bmhhbmRsZWQgZGV2aWNlcyAtIGluaXRpYWxpemUgc3dpb3RsYiBmb3IgdGhlbSAqLworCQlzd2lvdGxiID0gMTsKKwl9CiAKIAlhbWRfaW9tbXVfc3RhdHNfaW5pdCgpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCmluZGV4IDkxNzljMjEuLmJmYzg0NTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCkBAIC03MzEsOCArNzMxLDggQEAKIHsKIAl1OCAqcCA9ICh1OCAqKWg7CiAJdTggKmVuZCA9IHAsIGZsYWdzID0gMDsKLQl1MTYgZGV2X2ksIGRldmlkID0gMCwgZGV2aWRfc3RhcnQgPSAwLCBkZXZpZF90byA9IDA7Ci0JdTMyIGV4dF9mbGFncyA9IDA7CisJdTE2IGRldmlkID0gMCwgZGV2aWRfc3RhcnQgPSAwLCBkZXZpZF90byA9IDA7CisJdTMyIGRldl9pLCBleHRfZmxhZ3MgPSAwOwogCWJvb2wgYWxpYXMgPSBmYWxzZTsKIAlzdHJ1Y3QgaXZoZF9lbnRyeSAqZTsKIApAQCAtODg3LDcgKzg4Nyw3IEBACiAvKiBJbml0aWFsaXplcyB0aGUgZGV2aWNlLT5pb21tdSBtYXBwaW5nIGZvciB0aGUgZHJpdmVyICovCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2lvbW11X2RldmljZXMoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUpCiB7Ci0JdTE2IGk7CisJdTMyIGk7CiAKIAlmb3IgKGkgPSBpb21tdS0+Zmlyc3RfZGV2aWNlOyBpIDw9IGlvbW11LT5sYXN0X2RldmljZTsgKytpKQogCQlzZXRfaW9tbXVfZm9yX2RldmljZShpb21tdSwgaSk7CkBAIC0xMTc3LDcgKzExNzcsNyBAQAogICovCiBzdGF0aWMgdm9pZCBpbml0X2RldmljZV90YWJsZSh2b2lkKQogewotCXUxNiBkZXZpZDsKKwl1MzIgZGV2aWQ7CiAKIAlmb3IgKGRldmlkID0gMDsgZGV2aWQgPD0gYW1kX2lvbW11X2xhc3RfYmRmOyArK2RldmlkKSB7CiAJCXNldF9kZXZfZW50cnlfYml0KGRldmlkLCBERVZfRU5UUllfVkFMSUQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYyBiL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMKaW5kZXggZDZlMjQ3Ny4uNmRmODhjNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYworKysgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jCkBAIC00NywzOCArNDcsNDAgQEAKICNkZWZpbmUgRHN0REkgICAgICAgKDU8PDEpCS8qIERlc3RpbmF0aW9uIGlzIGluIEVTOihFKURJICovCiAjZGVmaW5lIERzdE1lbTY0ICAgICg2PDwxKQkvKiA2NGJpdCBtZW1vcnkgb3BlcmFuZCAqLwogI2RlZmluZSBEc3RJbW1VQnl0ZSAoNzw8MSkJLyogOC1iaXQgdW5zaWduZWQgaW1tZWRpYXRlIG9wZXJhbmQgKi8KLSNkZWZpbmUgRHN0TWFzayAgICAgKDc8PDEpCisjZGVmaW5lIERzdERYICAgICAgICg4PDwxKQkvKiBEZXN0aW5hdGlvbiBpcyBpbiBEWCByZWdpc3RlciAqLworI2RlZmluZSBEc3RNYXNrICAgICAoMHhmPDwxKQogLyogU291cmNlIG9wZXJhbmQgdHlwZS4gKi8KLSNkZWZpbmUgU3JjTm9uZSAgICAgKDA8PDQpCS8qIE5vIHNvdXJjZSBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNSZWcgICAgICAoMTw8NCkJLyogUmVnaXN0ZXIgb3BlcmFuZC4gKi8KLSNkZWZpbmUgU3JjTWVtICAgICAgKDI8PDQpCS8qIE1lbW9yeSBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNNZW0xNiAgICAoMzw8NCkJLyogTWVtb3J5IG9wZXJhbmQgKDE2LWJpdCkuICovCi0jZGVmaW5lIFNyY01lbTMyICAgICg0PDw0KQkvKiBNZW1vcnkgb3BlcmFuZCAoMzItYml0KS4gKi8KLSNkZWZpbmUgU3JjSW1tICAgICAgKDU8PDQpCS8qIEltbWVkaWF0ZSBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNJbW1CeXRlICAoNjw8NCkJLyogOC1iaXQgc2lnbi1leHRlbmRlZCBpbW1lZGlhdGUgb3BlcmFuZC4gKi8KLSNkZWZpbmUgU3JjT25lICAgICAgKDc8PDQpCS8qIEltcGxpZWQgJzEnICovCi0jZGVmaW5lIFNyY0ltbVVCeXRlICg4PDw0KSAgICAgIC8qIDgtYml0IHVuc2lnbmVkIGltbWVkaWF0ZSBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNJbW1VICAgICAoOTw8NCkgICAgICAvKiBJbW1lZGlhdGUgb3BlcmFuZCwgdW5zaWduZWQgKi8KLSNkZWZpbmUgU3JjU0kgICAgICAgKDB4YTw8NCkJLyogU291cmNlIGlzIGluIHRoZSBEUzpSU0kgKi8KLSNkZWZpbmUgU3JjSW1tRkFkZHIgKDB4Yjw8NCkJLyogU291cmNlIGlzIGltbWVkaWF0ZSBmYXIgYWRkcmVzcyAqLwotI2RlZmluZSBTcmNNZW1GQWRkciAoMHhjPDw0KQkvKiBTb3VyY2UgaXMgZmFyIGFkZHJlc3MgaW4gbWVtb3J5ICovCi0jZGVmaW5lIFNyY0FjYyAgICAgICgweGQ8PDQpCS8qIFNvdXJjZSBBY2N1bXVsYXRvciAqLwotI2RlZmluZSBTcmNJbW1VMTYgICAoMHhlPDw0KSAgICAvKiBJbW1lZGlhdGUgb3BlcmFuZCwgdW5zaWduZWQsIDE2IGJpdHMgKi8KLSNkZWZpbmUgU3JjTWFzayAgICAgKDB4Zjw8NCkKKyNkZWZpbmUgU3JjTm9uZSAgICAgKDA8PDUpCS8qIE5vIHNvdXJjZSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNSZWcgICAgICAoMTw8NSkJLyogUmVnaXN0ZXIgb3BlcmFuZC4gKi8KKyNkZWZpbmUgU3JjTWVtICAgICAgKDI8PDUpCS8qIE1lbW9yeSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNNZW0xNiAgICAoMzw8NSkJLyogTWVtb3J5IG9wZXJhbmQgKDE2LWJpdCkuICovCisjZGVmaW5lIFNyY01lbTMyICAgICg0PDw1KQkvKiBNZW1vcnkgb3BlcmFuZCAoMzItYml0KS4gKi8KKyNkZWZpbmUgU3JjSW1tICAgICAgKDU8PDUpCS8qIEltbWVkaWF0ZSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNJbW1CeXRlICAoNjw8NSkJLyogOC1iaXQgc2lnbi1leHRlbmRlZCBpbW1lZGlhdGUgb3BlcmFuZC4gKi8KKyNkZWZpbmUgU3JjT25lICAgICAgKDc8PDUpCS8qIEltcGxpZWQgJzEnICovCisjZGVmaW5lIFNyY0ltbVVCeXRlICg4PDw1KSAgICAgIC8qIDgtYml0IHVuc2lnbmVkIGltbWVkaWF0ZSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNJbW1VICAgICAoOTw8NSkgICAgICAvKiBJbW1lZGlhdGUgb3BlcmFuZCwgdW5zaWduZWQgKi8KKyNkZWZpbmUgU3JjU0kgICAgICAgKDB4YTw8NSkJLyogU291cmNlIGlzIGluIHRoZSBEUzpSU0kgKi8KKyNkZWZpbmUgU3JjSW1tRkFkZHIgKDB4Yjw8NSkJLyogU291cmNlIGlzIGltbWVkaWF0ZSBmYXIgYWRkcmVzcyAqLworI2RlZmluZSBTcmNNZW1GQWRkciAoMHhjPDw1KQkvKiBTb3VyY2UgaXMgZmFyIGFkZHJlc3MgaW4gbWVtb3J5ICovCisjZGVmaW5lIFNyY0FjYyAgICAgICgweGQ8PDUpCS8qIFNvdXJjZSBBY2N1bXVsYXRvciAqLworI2RlZmluZSBTcmNJbW1VMTYgICAoMHhlPDw1KSAgICAvKiBJbW1lZGlhdGUgb3BlcmFuZCwgdW5zaWduZWQsIDE2IGJpdHMgKi8KKyNkZWZpbmUgU3JjRFggICAgICAgKDB4Zjw8NSkJLyogU291cmNlIGlzIGluIERYIHJlZ2lzdGVyICovCisjZGVmaW5lIFNyY01hc2sgICAgICgweGY8PDUpCiAvKiBHZW5lcmljIE1vZFJNIGRlY29kZS4gKi8KLSNkZWZpbmUgTW9kUk0gICAgICAgKDE8PDgpCisjZGVmaW5lIE1vZFJNICAgICAgICgxPDw5KQogLyogRGVzdGluYXRpb24gaXMgb25seSB3cml0dGVuOyBuZXZlciByZWFkLiAqLwotI2RlZmluZSBNb3YgICAgICAgICAoMTw8OSkKLSNkZWZpbmUgQml0T3AgICAgICAgKDE8PDEwKQotI2RlZmluZSBNZW1BYnMgICAgICAoMTw8MTEpICAgICAgLyogTWVtb3J5IG9wZXJhbmQgaXMgYWJzb2x1dGUgZGlzcGxhY2VtZW50ICovCi0jZGVmaW5lIFN0cmluZyAgICAgICgxPDwxMikgICAgIC8qIFN0cmluZyBpbnN0cnVjdGlvbiAocmVwIGNhcGFibGUpICovCi0jZGVmaW5lIFN0YWNrICAgICAgICgxPDwxMykgICAgIC8qIFN0YWNrIGluc3RydWN0aW9uIChwdXNoL3BvcCkgKi8KLSNkZWZpbmUgR3JvdXBNYXNrICAgKDc8PDE0KSAgICAgLyogT3Bjb2RlIHVzZXMgb25lIG9mIHRoZSBncm91cCBtZWNoYW5pc21zICovCi0jZGVmaW5lIEdyb3VwICAgICAgICgxPDwxNCkgICAgIC8qIEJpdHMgMzo1IG9mIG1vZHJtIGJ5dGUgZXh0ZW5kIG9wY29kZSAqLwotI2RlZmluZSBHcm91cER1YWwgICAoMjw8MTQpICAgICAvKiBBbHRlcm5hdGUgZGVjb2Rpbmcgb2YgbW9kID09IDMgKi8KLSNkZWZpbmUgUHJlZml4ICAgICAgKDM8PDE0KSAgICAgLyogSW5zdHJ1Y3Rpb24gdmFyaWVzIHdpdGggNjYvZjIvZjMgcHJlZml4ICovCi0jZGVmaW5lIFJNRXh0ICAgICAgICg0PDwxNCkgICAgIC8qIE9wY29kZSBleHRlbnNpb24gaW4gTW9kUk0gci9tIGlmIG1vZCA9PSAzICovCi0jZGVmaW5lIFNzZSAgICAgICAgICgxPDwxNykgICAgIC8qIFNTRSBWZWN0b3IgaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgTW92ICAgICAgICAgKDE8PDEwKQorI2RlZmluZSBCaXRPcCAgICAgICAoMTw8MTEpCisjZGVmaW5lIE1lbUFicyAgICAgICgxPDwxMikgICAgICAvKiBNZW1vcnkgb3BlcmFuZCBpcyBhYnNvbHV0ZSBkaXNwbGFjZW1lbnQgKi8KKyNkZWZpbmUgU3RyaW5nICAgICAgKDE8PDEzKSAgICAgLyogU3RyaW5nIGluc3RydWN0aW9uIChyZXAgY2FwYWJsZSkgKi8KKyNkZWZpbmUgU3RhY2sgICAgICAgKDE8PDE0KSAgICAgLyogU3RhY2sgaW5zdHJ1Y3Rpb24gKHB1c2gvcG9wKSAqLworI2RlZmluZSBHcm91cE1hc2sgICAoNzw8MTUpICAgICAvKiBPcGNvZGUgdXNlcyBvbmUgb2YgdGhlIGdyb3VwIG1lY2hhbmlzbXMgKi8KKyNkZWZpbmUgR3JvdXAgICAgICAgKDE8PDE1KSAgICAgLyogQml0cyAzOjUgb2YgbW9kcm0gYnl0ZSBleHRlbmQgb3Bjb2RlICovCisjZGVmaW5lIEdyb3VwRHVhbCAgICgyPDwxNSkgICAgIC8qIEFsdGVybmF0ZSBkZWNvZGluZyBvZiBtb2QgPT0gMyAqLworI2RlZmluZSBQcmVmaXggICAgICAoMzw8MTUpICAgICAvKiBJbnN0cnVjdGlvbiB2YXJpZXMgd2l0aCA2Ni9mMi9mMyBwcmVmaXggKi8KKyNkZWZpbmUgUk1FeHQgICAgICAgKDQ8PDE1KSAgICAgLyogT3Bjb2RlIGV4dGVuc2lvbiBpbiBNb2RSTSByL20gaWYgbW9kID09IDMgKi8KKyNkZWZpbmUgU3NlICAgICAgICAgKDE8PDE4KSAgICAgLyogU1NFIFZlY3RvciBpbnN0cnVjdGlvbiAqLwogLyogTWlzYyBmbGFncyAqLwogI2RlZmluZSBQcm90ICAgICAgICAoMTw8MjEpIC8qIGluc3RydWN0aW9uIGdlbmVyYXRlcyAjVUQgaWYgbm90IGluIHByb3QtbW9kZSAqLwogI2RlZmluZSBWZW5kb3JTcGVjaWZpYyAoMTw8MjIpIC8qIFZlbmRvciBzcGVjaWZpYyBpbnN0cnVjdGlvbiAqLwpAQCAtMzE1NCw4ICszMTU2LDggQEAKIAlJKERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgU3JjMkltbSwgZW1faW11bF8zb3ApLAogCUkoU3JjSW1tQnl0ZSB8IE1vdiB8IFN0YWNrLCBlbV9wdXNoKSwKIAlJKERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgU3JjMkltbUJ5dGUsIGVtX2ltdWxfM29wKSwKLQlEMmJ2SVAoRHN0REkgfCBNb3YgfCBTdHJpbmcsIGlucywgY2hlY2tfcGVybV9pbiksIC8qIGluc2IsIGluc3cvaW5zZCAqLwotCUQyYnZJUChTcmNTSSB8IEltcGxpY2l0T3BzIHwgU3RyaW5nLCBvdXRzLCBjaGVja19wZXJtX291dCksIC8qIG91dHNiLCBvdXRzdy9vdXRzZCAqLworCUQyYnZJUChEc3RESSB8IFNyY0RYIHwgTW92IHwgU3RyaW5nLCBpbnMsIGNoZWNrX3Blcm1faW4pLCAvKiBpbnNiLCBpbnN3L2luc2QgKi8KKwlEMmJ2SVAoU3JjU0kgfCBEc3REWCB8IFN0cmluZywgb3V0cywgY2hlY2tfcGVybV9vdXQpLCAvKiBvdXRzYiwgb3V0c3cvb3V0c2QgKi8KIAkvKiAweDcwIC0gMHg3RiAqLwogCVgxNihEKFNyY0ltbUJ5dGUpKSwKIAkvKiAweDgwIC0gMHg4NyAqLwpAQCAtMzIxMiw4ICszMjE0LDggQEAKIAkvKiAweEU4IC0gMHhFRiAqLwogCUQoU3JjSW1tIHwgU3RhY2spLCBEKFNyY0ltbSB8IEltcGxpY2l0T3BzKSwKIAlEKFNyY0ltbUZBZGRyIHwgTm82NCksIEQoU3JjSW1tQnl0ZSB8IEltcGxpY2l0T3BzKSwKLQlEMmJ2SVAoU3JjTm9uZSB8IERzdEFjYywgICAgIGluLCAgY2hlY2tfcGVybV9pbiksCi0JRDJidklQKFNyY0FjYyB8IEltcGxpY2l0T3BzLCBvdXQsIGNoZWNrX3Blcm1fb3V0KSwKKwlEMmJ2SVAoU3JjRFggfCBEc3RBY2MsIGluLCAgY2hlY2tfcGVybV9pbiksCisJRDJidklQKFNyY0FjYyB8IERzdERYLCBvdXQsIGNoZWNrX3Blcm1fb3V0KSwKIAkvKiAweEYwIC0gMHhGNyAqLwogCU4sIERJKEltcGxpY2l0T3BzLCBpY2VicCksIE4sIE4sCiAJREkoSW1wbGljaXRPcHMgfCBQcml2LCBobHQpLCBEKEltcGxpY2l0T3BzKSwKQEAgLTM2MTMsNiArMzYxNSwxMiBAQAogCQltZW1vcC5ieXRlcyA9IGMtPm9wX2J5dGVzICsgMjsKIAkJZ290byBzcmNtZW1fY29tbW9uOwogCQlicmVhazsKKwljYXNlIFNyY0RYOgorCQljLT5zcmMudHlwZSA9IE9QX1JFRzsKKwkJYy0+c3JjLmJ5dGVzID0gMjsKKwkJYy0+c3JjLmFkZHIucmVnID0gJmMtPnJlZ3NbVkNQVV9SRUdTX1JEWF07CisJCWZldGNoX3JlZ2lzdGVyX29wZXJhbmQoJmMtPnNyYyk7CisJCWJyZWFrOwogCX0KIAogCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQpAQCAtMzY4Miw2ICszNjkwLDEyIEBACiAJCWMtPmRzdC5hZGRyLm1lbS5zZWcgPSBWQ1BVX1NSRUdfRVM7CiAJCWMtPmRzdC52YWwgPSAwOwogCQlicmVhazsKKwljYXNlIERzdERYOgorCQljLT5kc3QudHlwZSA9IE9QX1JFRzsKKwkJYy0+ZHN0LmJ5dGVzID0gMjsKKwkJYy0+ZHN0LmFkZHIucmVnID0gJmMtPnJlZ3NbVkNQVV9SRUdTX1JEWF07CisJCWZldGNoX3JlZ2lzdGVyX29wZXJhbmQoJmMtPmRzdCk7CisJCWJyZWFrOwogCWNhc2UgSW1wbGljaXRPcHM6CiAJCS8qIFNwZWNpYWwgaW5zdHJ1Y3Rpb25zIGRvIHRoZWlyIG93biBvcGVyYW5kIGRlY29kaW5nLiAqLwogCWRlZmF1bHQ6CkBAIC00MDI3LDcgKzQwNDEsNiBAQAogCQlicmVhazsKIAljYXNlIDB4ZWM6IC8qIGluIGFsLGR4ICovCiAJY2FzZSAweGVkOiAvKiBpbiAoZS9yKWF4LGR4ICovCi0JCWMtPnNyYy52YWwgPSBjLT5yZWdzW1ZDUFVfUkVHU19SRFhdOwogCWRvX2lvX2luOgogCQlpZiAoIXBpb19pbl9lbXVsYXRlZChjdHh0LCBvcHMsIGMtPmRzdC5ieXRlcywgYy0+c3JjLnZhbCwKIAkJCQkgICAgICZjLT5kc3QudmFsKSkKQEAgLTQwMzUsNyArNDA0OCw2IEBACiAJCWJyZWFrOwogCWNhc2UgMHhlZTogLyogb3V0IGR4LGFsICovCiAJY2FzZSAweGVmOiAvKiBvdXQgZHgsKGUvcilheCAqLwotCQljLT5kc3QudmFsID0gYy0+cmVnc1tWQ1BVX1JFR1NfUkRYXTsKIAlkb19pb19vdXQ6CiAJCW9wcy0+cGlvX291dF9lbXVsYXRlZChjdHh0LCBjLT5zcmMuYnl0ZXMsIGMtPmRzdC52YWwsCiAJCQkJICAgICAgJmMtPnNyYy52YWwsIDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL211bHRpY2FsbHMuYyBiL2FyY2gveDg2L3hlbi9tdWx0aWNhbGxzLmMKaW5kZXggOGJmZjdlNy4uMWIyYjczZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL211bHRpY2FsbHMuYworKysgYi9hcmNoL3g4Ni94ZW4vbXVsdGljYWxscy5jCkBAIC0xODksMTAgKzE4OSwxMCBAQAogCXVuc2lnbmVkIGFyZ2lkeCA9IHJvdW5kdXAoYi0+YXJnaWR4LCBzaXplb2YodTY0KSk7CiAKIAlCVUdfT04ocHJlZW1wdGlibGUoKSk7Ci0JQlVHX09OKGItPmFyZ2lkeCA+IE1DX0FSR1MpOworCUJVR19PTihiLT5hcmdpZHggPj0gTUNfQVJHUyk7CiAKIAlpZiAoYi0+bWNpZHggPT0gTUNfQkFUQ0ggfHwKLQkgICAgKGFyZ2lkeCArIGFyZ3MpID4gTUNfQVJHUykgeworCSAgICAoYXJnaWR4ICsgYXJncykgPj0gTUNfQVJHUykgewogCQltY19zdGF0c19mbHVzaChiLT5tY2lkeCA9PSBNQ19CQVRDSCA/IEZMX1NMT1RTIDogRkxfQVJHUyk7CiAJCXhlbl9tY19mbHVzaCgpOwogCQlhcmdpZHggPSByb3VuZHVwKGItPmFyZ2lkeCwgc2l6ZW9mKHU2NCkpOwpAQCAtMjA2LDcgKzIwNiw3IEBACiAJcmV0LmFyZ3MgPSAmYi0+YXJnc1thcmdpZHhdOwogCWItPmFyZ2lkeCA9IGFyZ2lkeCArIGFyZ3M7CiAKLQlCVUdfT04oYi0+YXJnaWR4ID4gTUNfQVJHUyk7CisJQlVHX09OKGItPmFyZ2lkeCA+PSBNQ19BUkdTKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMTYsNyArMjE2LDcgQEAKIAlzdHJ1Y3QgbXVsdGljYWxsX3NwYWNlIHJldCA9IHsgTlVMTCwgTlVMTCB9OwogCiAJQlVHX09OKHByZWVtcHRpYmxlKCkpOwotCUJVR19PTihiLT5hcmdpZHggPiBNQ19BUkdTKTsKKwlCVUdfT04oYi0+YXJnaWR4ID49IE1DX0FSR1MpOwogCiAJaWYgKGItPm1jaWR4ID09IDApCiAJCXJldHVybiByZXQ7CkBAIC0yMjQsMTQgKzIyNCwxNCBAQAogCWlmIChiLT5lbnRyaWVzW2ItPm1jaWR4IC0gMV0ub3AgIT0gb3ApCiAJCXJldHVybiByZXQ7CiAKLQlpZiAoKGItPmFyZ2lkeCArIHNpemUpID4gTUNfQVJHUykKKwlpZiAoKGItPmFyZ2lkeCArIHNpemUpID49IE1DX0FSR1MpCiAJCXJldHVybiByZXQ7CiAKIAlyZXQubWMgPSAmYi0+ZW50cmllc1tiLT5tY2lkeCAtIDFdOwogCXJldC5hcmdzID0gJmItPmFyZ3NbYi0+YXJnaWR4XTsKIAliLT5hcmdpZHggKz0gc2l6ZTsKIAotCUJVR19PTihiLT5hcmdpZHggPiBNQ19BUkdTKTsKKwlCVUdfT04oYi0+YXJnaWR4ID49IE1DX0FSR1MpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9LY29uZmlnIGIvZHJpdmVycy9ncGlvL0tjb25maWcKaW5kZXggNGE3ZjYzMS4uMjk2NzAwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL0tjb25maWcKKysrIGIvZHJpdmVycy9ncGlvL0tjb25maWcKQEAgLTg3LDMyICs4NywyMCBAQAogCSAgU2F5IHllcyBoZXJlIHRvIHN1cHBvcnQgR1BJTyBmdW5jdGlvbmFsaXR5IG9mIElUODc2MUUgc3VwZXIgSS9PIGNoaXAuCiAKIGNvbmZpZyBHUElPX0VYWU5PUzQKLQlib29sICJTYW1zdW5nIEV4eW5vczQgR1BJTyBsaWJyYXJ5IHN1cHBvcnQiCi0JZGVmYXVsdCB5IGlmIENQVV9FWFlOT1M0MjEwCi0JZGVwZW5kcyBvbiBBUk0KLQloZWxwCi0JICBTYXkgeWVzIGhlcmUgdG8gc3VwcG9ydCBTYW1zdW5nIEV4eW5vczQgc2VyaWVzIFNvQ3MgR1BJTyBsaWJyYXJ5CisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gQ1BVX0VYWU5PUzQyMTAKIAogY29uZmlnIEdQSU9fUExBVF9TQU1TVU5HCi0JYm9vbCAiU2Ftc3VuZyBTb0NzIEdQSU8gbGlicmFyeSBzdXBwb3J0IgotCWRlZmF1bHQgeSBpZiBTQU1TVU5HX0dQSU9MSUJfNEJJVAotCWRlcGVuZHMgb24gQVJNCi0JaGVscAotCSAgU2F5IHllcyBoZXJlIHRvIHN1cHBvcnQgU2Ftc3VuZyBTb0NzIEdQSU8gbGlicmFyeQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIFNBTVNVTkdfR1BJT0xJQl80QklUCiAKIGNvbmZpZyBHUElPX1M1UEMxMDAKLQlib29sICJTYW1zdW5nIFM1UEMxMDAgR1BJTyBsaWJyYXJ5IHN1cHBvcnQiCi0JZGVmYXVsdCB5IGlmIENQVV9TNVBDMTAwCi0JZGVwZW5kcyBvbiBBUk0KLQloZWxwCi0JICBTYXkgeWVzIGhlcmUgdG8gc3VwcG9ydCBTYW1zdW5nIFM1UEMxMDAgU29DcyBHUElPIGxpYnJhcnkKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBDUFVfUzVQQzEwMAogCiBjb25maWcgR1BJT19TNVBWMjEwCi0JYm9vbCAiU2Ftc3VuZyBTNVBWMjEwL1M1UEMxMTAgR1BJTyBsaWJyYXJ5IHN1cHBvcnQiCi0JZGVmYXVsdCB5IGlmIENQVV9TNVBWMjEwCi0JZGVwZW5kcyBvbiBBUk0KLQloZWxwCi0JICBTYXkgeWVzIGhlcmUgdG8gc3VwcG9ydCBTYW1zdW5nIFM1UFYyMTAvUzVQQzExMCBTb0NzIEdQSU8gbGlicmFyeQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIENQVV9TNVBWMjEwCiAKIGNvbmZpZyBHUElPX1BMMDYxCiAJYm9vbCAiUHJpbWVDZWxsIFBMMDYxIEdQSU8gc3VwcG9ydCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLWV4eW5vczQuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLWV4eW5vczQuYwppbmRleCBkNTRjYTZhLi45MDI5ODM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby1leHlub3M0LmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tZXh5bm9zNC5jCkBAIC0yMSwxNiArMjEsMzcgQEAKICNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CiAjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy1oZWxwZXJzLmg+CiAKK2ludCBzM2NfZ3Bpb19zZXRwdWxsX2V4eW5vczQoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAsCisJCQkJdW5zaWduZWQgaW50IG9mZiwgczNjX2dwaW9fcHVsbF90IHB1bGwpCit7CisJaWYgKHB1bGwgPT0gUzNDX0dQSU9fUFVMTF9VUCkKKwkJcHVsbCA9IDM7CisKKwlyZXR1cm4gczNjX2dwaW9fc2V0cHVsbF91cGRvd24oY2hpcCwgb2ZmLCBwdWxsKTsKK30KKworczNjX2dwaW9fcHVsbF90IHMzY19ncGlvX2dldHB1bGxfZXh5bm9zNChzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCwKKwkJCQkJCXVuc2lnbmVkIGludCBvZmYpCit7CisJczNjX2dwaW9fcHVsbF90IHB1bGw7CisKKwlwdWxsID0gczNjX2dwaW9fZ2V0cHVsbF91cGRvd24oY2hpcCwgb2ZmKTsKKwlpZiAocHVsbCA9PSAzKQorCQlwdWxsID0gUzNDX0dQSU9fUFVMTF9VUDsKKworCXJldHVybiBwdWxsOworfQorCiBzdGF0aWMgc3RydWN0IHMzY19ncGlvX2NmZyBncGlvX2NmZyA9IHsKIAkuc2V0X2NvbmZpZwk9IHMzY19ncGlvX3NldGNmZ19zM2M2NHh4XzRiaXQsCi0JLnNldF9wdWxsCT0gczNjX2dwaW9fc2V0cHVsbF91cGRvd24sCi0JLmdldF9wdWxsCT0gczNjX2dwaW9fZ2V0cHVsbF91cGRvd24sCisJLnNldF9wdWxsCT0gczNjX2dwaW9fc2V0cHVsbF9leHlub3M0LAorCS5nZXRfcHVsbAk9IHMzY19ncGlvX2dldHB1bGxfZXh5bm9zNCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgczNjX2dwaW9fY2ZnIGdwaW9fY2ZnX25vaW50ID0gewogCS5zZXRfY29uZmlnCT0gczNjX2dwaW9fc2V0Y2ZnX3MzYzY0eHhfNGJpdCwKLQkuc2V0X3B1bGwJPSBzM2NfZ3Bpb19zZXRwdWxsX3VwZG93biwKLQkuZ2V0X3B1bGwJPSBzM2NfZ3Bpb19nZXRwdWxsX3VwZG93biwKKwkuc2V0X3B1bGwJPSBzM2NfZ3Bpb19zZXRwdWxsX2V4eW5vczQsCisJLmdldF9wdWxsCT0gczNjX2dwaW9fZ2V0cHVsbF9leHlub3M0LAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLW9tYXAuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLW9tYXAuYwppbmRleCA2YzUxMTkxLi4wMWY3NGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby1vbWFwLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tb21hcC5jCkBAIC00MzIsNyArNDMyLDYgQEAKIHsKIAl2b2lkIF9faW9tZW0gKmJhc2UgPSBiYW5rLT5iYXNlOwogCXUzMiBncGlvX2JpdCA9IDEgPDwgZ3BpbzsKLQl1MzIgdmFsOwogCiAJaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CiAJCU1PRF9SRUdfQklUKE9NQVA0X0dQSU9fTEVWRUxERVRFQ1QwLCBncGlvX2JpdCwKQEAgLTQ1NSwxNSArNDU0LDggQEAKIAl9CiAJaWYgKGxpa2VseSghKGJhbmstPm5vbl93YWtldXBfZ3Bpb3MgJiBncGlvX2JpdCkpKSB7CiAJCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkgewotCQkJaWYgKHRyaWdnZXIgIT0gMCkKLQkJCQlfX3Jhd193cml0ZWwoMSA8PCBncGlvLCBiYW5rLT5iYXNlKwotCQkJCQkJT01BUDRfR1BJT19JUlFXQUtFTjApOwotCQkJZWxzZSB7Ci0JCQkJdmFsID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZSArCi0JCQkJCQkJT01BUDRfR1BJT19JUlFXQUtFTjApOwotCQkJCV9fcmF3X3dyaXRlbCh2YWwgJiAofigxIDw8IGdwaW8pKSwgYmFuay0+YmFzZSArCi0JCQkJCQkJIE9NQVA0X0dQSU9fSVJRV0FLRU4wKTsKLQkJCX0KKwkJCU1PRF9SRUdfQklUKE9NQVA0X0dQSU9fSVJRV0FLRU4wLCBncGlvX2JpdCwKKwkJCQl0cmlnZ2VyICE9IDApOwogCQl9IGVsc2UgewogCQkJLyoKIAkJCSAqIEdQSU8gd2FrZXVwIHJlcXVlc3QgY2FuIG9ubHkgYmUgZ2VuZXJhdGVkIG9uIGVkZ2UKQEAgLTExMzQsOCArMTEyNiwxMSBAQAogewogCXVuc2lnbmVkIGludCBncGlvID0gZC0+aXJxIC0gSUhfR1BJT19CQVNFOwogCXN0cnVjdCBncGlvX2JhbmsgKmJhbmsgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIAlfcmVzZXRfZ3BpbyhiYW5rLCBncGlvKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGdwaW9fYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCkBAIC0xMTUwLDkgKzExNDUsMTIgQEAKIHsKIAl1bnNpZ25lZCBpbnQgZ3BpbyA9IGQtPmlycSAtIElIX0dQSU9fQkFTRTsKIAlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiAJX3NldF9ncGlvX2lycWVuYWJsZShiYW5rLCBncGlvLCAwKTsKIAlfc2V0X2dwaW9fdHJpZ2dlcmluZyhiYW5rLCBnZXRfZ3Bpb19pbmRleChncGlvKSwgSVJRX1RZUEVfTk9ORSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBncGlvX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQpAQCAtMTE2MSw3ICsxMTU5LDkgQEAKIAlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJdW5zaWduZWQgaW50IGlycV9tYXNrID0gMSA8PCBnZXRfZ3Bpb19pbmRleChncGlvKTsKIAl1MzIgdHJpZ2dlciA9IGlycWRfZ2V0X3RyaWdnZXJfdHlwZShkKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIAlpZiAodHJpZ2dlcikKIAkJX3NldF9ncGlvX3RyaWdnZXJpbmcoYmFuaywgZ2V0X2dwaW9faW5kZXgoZ3BpbyksIHRyaWdnZXIpOwogCkBAIC0xMTczLDYgKzExNzMsNyBAQAogCX0KIAogCV9zZXRfZ3Bpb19pcnFlbmFibGUoYmFuaywgZ3BpbywgMSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGdwaW9faXJxX2NoaXAgPSB7CkBAIC0xNTI0LDcgKzE1MjUsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZ3Bpb19jaGlwX2luaXQoc3RydWN0IGdwaW9fYmFuayAqYmFuaykKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBvbWFwX2dwaW9fY2hpcF9pbml0KHN0cnVjdCBncGlvX2JhbmsgKmJhbmspCiB7CiAJaW50IGo7CiAJc3RhdGljIGludCBncGlvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwppbmRleCA1MWMyMjU3Li40ZDQ2NDQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwpAQCAtNzc2LDcgKzc3Niw3IEBACiAJc2VxX3ByaW50ZihtLCAiICBJTlNUUE06IDB4JTA4eFxuIiwgZXJyb3ItPmluc3RwbSk7CiAJc2VxX3ByaW50ZihtLCAiICBzZXFubzogMHglMDh4XG4iLCBlcnJvci0+c2Vxbm8pOwogCi0JZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT5udW1fZmVuY2VfcmVnczsgaSsrKQogCQlzZXFfcHJpbnRmKG0sICIgIGZlbmNlWyVkXSA9ICUwOGxseFxuIiwgaSwgZXJyb3ItPmZlbmNlW2ldKTsKIAogCWlmIChlcnJvci0+YWN0aXZlX2JvKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggZWU2NjAzNS4uZjYzZWUxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC03MTYsNiArNzE2LDcgQEAKIAlzdHJ1Y3QgaW50ZWxfZmJkZXYgKmZiZGV2OwogCiAJc3RydWN0IGRybV9wcm9wZXJ0eSAqYnJvYWRjYXN0X3JnYl9wcm9wZXJ0eTsKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpmb3JjZV9hdWRpb19wcm9wZXJ0eTsKIAogCWF0b21pY190IGZvcmNld2FrZV9jb3VudDsKIH0gZHJtX2k5MTVfcHJpdmF0ZV90OwpAQCAtOTA5LDEzICs5MTAsNiBAQAogCX0gbW07CiB9OwogCi1lbnVtIGludGVsX2NoaXBfZmFtaWx5IHsKLQlDSElQX0k4WFggPSAweDAxLAotCUNISVBfSTlYWCA9IDB4MDIsCi0JQ0hJUF9JOTE1ID0gMHgwNCwKLQlDSElQX0k5NjUgPSAweDA4LAotfTsKLQogI2RlZmluZSBJTlRFTF9JTkZPKGRldikJKCgoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKikgKGRldiktPmRldl9wcml2YXRlKS0+aW5mbykKIAogI2RlZmluZSBJU19JODMwKGRldikJCSgoZGV2KS0+cGNpX2RldmljZSA9PSAweDM1NzcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCAwYjJlMTY3Li4xMmQzMjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTM1NCw3ICszNTQsNyBAQAogCQkgKiBwYWdlX29mZnNldCA9IG9mZnNldCB3aXRoaW4gcGFnZQogCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9yIHRoaXMgcGFnZQogCQkgKi8KLQkJcGFnZV9vZmZzZXQgPSBvZmZzZXQgJiAoUEFHRV9TSVpFLTEpOworCQlwYWdlX29mZnNldCA9IG9mZnNldF9pbl9wYWdlKG9mZnNldCk7CiAJCXBhZ2VfbGVuZ3RoID0gcmVtYWluOwogCQlpZiAoKHBhZ2Vfb2Zmc2V0ICsgcmVtYWluKSA+IFBBR0VfU0laRSkKIAkJCXBhZ2VfbGVuZ3RoID0gUEFHRV9TSVpFIC0gcGFnZV9vZmZzZXQ7CkBAIC00NTMsOSArNDUzLDkgQEAKIAkJICogZGF0YV9wYWdlX29mZnNldCA9IG9mZnNldCB3aXRoIGRhdGFfcGFnZV9pbmRleCBwYWdlLgogCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9yIHRoaXMgcGFnZQogCQkgKi8KLQkJc2htZW1fcGFnZV9vZmZzZXQgPSBvZmZzZXQgJiB+UEFHRV9NQVNLOworCQlzaG1lbV9wYWdlX29mZnNldCA9IG9mZnNldF9pbl9wYWdlKG9mZnNldCk7CiAJCWRhdGFfcGFnZV9pbmRleCA9IGRhdGFfcHRyIC8gUEFHRV9TSVpFIC0gZmlyc3RfZGF0YV9wYWdlOwotCQlkYXRhX3BhZ2Vfb2Zmc2V0ID0gZGF0YV9wdHIgJiB+UEFHRV9NQVNLOworCQlkYXRhX3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoZGF0YV9wdHIpOwogCiAJCXBhZ2VfbGVuZ3RoID0gcmVtYWluOwogCQlpZiAoKHNobWVtX3BhZ2Vfb2Zmc2V0ICsgcGFnZV9sZW5ndGgpID4gUEFHRV9TSVpFKQpAQCAtNjM4LDggKzYzOCw4IEBACiAJCSAqIHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0IHdpdGhpbiBwYWdlCiAJCSAqIHBhZ2VfbGVuZ3RoID0gYnl0ZXMgdG8gY29weSBmb3IgdGhpcyBwYWdlCiAJCSAqLwotCQlwYWdlX2Jhc2UgPSAob2Zmc2V0ICYgfihQQUdFX1NJWkUtMSkpOwotCQlwYWdlX29mZnNldCA9IG9mZnNldCAmIChQQUdFX1NJWkUtMSk7CisJCXBhZ2VfYmFzZSA9IG9mZnNldCAmIFBBR0VfTUFTSzsKKwkJcGFnZV9vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShvZmZzZXQpOwogCQlwYWdlX2xlbmd0aCA9IHJlbWFpbjsKIAkJaWYgKChwYWdlX29mZnNldCArIHJlbWFpbikgPiBQQUdFX1NJWkUpCiAJCQlwYWdlX2xlbmd0aCA9IFBBR0VfU0laRSAtIHBhZ2Vfb2Zmc2V0OwpAQCAtNjUwLDcgKzY1MCw2IEBACiAJCSAqLwogCQlpZiAoZmFzdF91c2VyX3dyaXRlKGRldl9wcml2LT5tbS5ndHRfbWFwcGluZywgcGFnZV9iYXNlLAogCQkJCSAgICBwYWdlX29mZnNldCwgdXNlcl9kYXRhLCBwYWdlX2xlbmd0aCkpCi0KIAkJCXJldHVybiAtRUZBVUxUOwogCiAJCXJlbWFpbiAtPSBwYWdlX2xlbmd0aDsKQEAgLTczMCw5ICs3MjksOSBAQAogCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9yIHRoaXMgcGFnZQogCQkgKi8KIAkJZ3R0X3BhZ2VfYmFzZSA9IG9mZnNldCAmIFBBR0VfTUFTSzsKLQkJZ3R0X3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0ICYgflBBR0VfTUFTSzsKKwkJZ3R0X3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTsKIAkJZGF0YV9wYWdlX2luZGV4ID0gZGF0YV9wdHIgLyBQQUdFX1NJWkUgLSBmaXJzdF9kYXRhX3BhZ2U7Ci0JCWRhdGFfcGFnZV9vZmZzZXQgPSBkYXRhX3B0ciAmIH5QQUdFX01BU0s7CisJCWRhdGFfcGFnZV9vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShkYXRhX3B0cik7CiAKIAkJcGFnZV9sZW5ndGggPSByZW1haW47CiAJCWlmICgoZ3R0X3BhZ2Vfb2Zmc2V0ICsgcGFnZV9sZW5ndGgpID4gUEFHRV9TSVpFKQpAQCAtNzkxLDcgKzc5MCw3IEBACiAJCSAqIHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0IHdpdGhpbiBwYWdlCiAJCSAqIHBhZ2VfbGVuZ3RoID0gYnl0ZXMgdG8gY29weSBmb3IgdGhpcyBwYWdlCiAJCSAqLwotCQlwYWdlX29mZnNldCA9IG9mZnNldCAmIChQQUdFX1NJWkUtMSk7CisJCXBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTsKIAkJcGFnZV9sZW5ndGggPSByZW1haW47CiAJCWlmICgocGFnZV9vZmZzZXQgKyByZW1haW4pID4gUEFHRV9TSVpFKQogCQkJcGFnZV9sZW5ndGggPSBQQUdFX1NJWkUgLSBwYWdlX29mZnNldDsKQEAgLTg5Niw5ICs4OTUsOSBAQAogCQkgKiBkYXRhX3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0IHdpdGggZGF0YV9wYWdlX2luZGV4IHBhZ2UuCiAJCSAqIHBhZ2VfbGVuZ3RoID0gYnl0ZXMgdG8gY29weSBmb3IgdGhpcyBwYWdlCiAJCSAqLwotCQlzaG1lbV9wYWdlX29mZnNldCA9IG9mZnNldCAmIH5QQUdFX01BU0s7CisJCXNobWVtX3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTsKIAkJZGF0YV9wYWdlX2luZGV4ID0gZGF0YV9wdHIgLyBQQUdFX1NJWkUgLSBmaXJzdF9kYXRhX3BhZ2U7Ci0JCWRhdGFfcGFnZV9vZmZzZXQgPSBkYXRhX3B0ciAmIH5QQUdFX01BU0s7CisJCWRhdGFfcGFnZV9vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShkYXRhX3B0cik7CiAKIAkJcGFnZV9sZW5ndGggPSByZW1haW47CiAJCWlmICgoc2htZW1fcGFnZV9vZmZzZXQgKyBwYWdlX2xlbmd0aCkgPiBQQUdFX1NJWkUpCkBAIC0xNDUwLDggKzE0NDksOSBAQAogCSAqIGVkZ2Ugb2YgYW4gZXZlbiB0aWxlIHJvdyAod2hlcmUgdGlsZSByb3dzIGFyZSBjb3VudGVkIGFzIGlmIHRoZSBibyBpcwogCSAqIHBsYWNlZCBpbiBhIGZlbmNlZCBndHQgcmVnaW9uKS4KIAkgKi8KLQlpZiAoSVNfR0VOMihkZXYpIHx8Ci0JICAgIChvYmotPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX1kgJiYgSEFTXzEyOF9CWVRFX1lfVElMSU5HKGRldikpKQorCWlmIChJU19HRU4yKGRldikpCisJCXRpbGVfaGVpZ2h0ID0gMTY7CisJZWxzZSBpZiAob2JqLT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19ZICYmIEhBU18xMjhfQllURV9ZX1RJTElORyhkZXYpKQogCQl0aWxlX2hlaWdodCA9IDMyOwogCWVsc2UKIAkJdGlsZV9oZWlnaHQgPSA4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKaW5kZXggYjc5NjE5YS4uYjlmYWZlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCkBAIC01MTcsNyArNTE3LDcgQEAKIAlpZiAoZGVfaWlyICYgREVfUElQRUFfVkJMQU5LX0lWQikKIAkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAwKTsKIAotCWlmIChkZV9paXIgJiBERV9QSVBFQl9WQkxBTktfSVZCKTsKKwlpZiAoZGVfaWlyICYgREVfUElQRUJfVkJMQU5LX0lWQikKIAkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAxKTsKIAogCS8qIGNoZWNrIGV2ZW50IGZyb20gUENIICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCmluZGV4IGU5M2Y5M2MuLjA5NzlkODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCkBAIC0yODgsNiArMjg4LDggQEAKIAkJICogVGhpcyBtYXkgYmUgYSBEVkktSSBjb25uZWN0b3Igd2l0aCBhIHNoYXJlZCBEREMKIAkJICogbGluayBiZXR3ZWVuIGFuYWxvZyBhbmQgZGlnaXRhbCBvdXRwdXRzLCBzbyB3ZQogCQkgKiBoYXZlIHRvIGNoZWNrIHRoZSBFRElEIGlucHV0IHNwZWMgb2YgdGhlIGF0dGFjaGVkIGRldmljZS4KKwkJICoKKwkJICogT24gdGhlIG90aGVyIGhhbmQsIHdoYXQgc2hvdWxkIHdlIGRvIGlmIGl0IGlzIGEgYnJva2VuIEVESUQ/CiAJCSAqLwogCQlpZiAoZWRpZCAhPSBOVUxMKSB7CiAJCQlpc19kaWdpdGFsID0gZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMOwpAQCAtMjk4LDYgKzMwMCw4IEBACiAJCWlmICghaXNfZGlnaXRhbCkgewogCQkJRFJNX0RFQlVHX0tNUygiQ1JUIGRldGVjdGVkIHZpYSBEREM6MHg1MCBbRURJRF1cbiIpOwogCQkJcmV0dXJuIHRydWU7CisJCX0gZWxzZSB7CisJCQlEUk1fREVCVUdfS01TKCJDUlQgbm90IGRldGVjdGVkIHZpYSBEREM6MHg1MCBbRURJRCByZXBvcnRzIGEgZGlnaXRhbCBwYW5lbF1cbiIpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggZjU1M2RkZmQuLjgxYTkwNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTM5ODMsNTQgKzM5ODMsNiBAQAogI2RlZmluZSBJTEtfTFAwX1BMQU5FX0xBVEVOQ1kJCTcwMAogI2RlZmluZSBJTEtfTFAwX0NVUlNPUl9MQVRFTkNZCQkxMzAwCiAKLXN0YXRpYyBib29sIGlyb25sYWtlX2NvbXB1dGVfd20wKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJIGludCBwaXBlLAotCQkJCSBjb25zdCBzdHJ1Y3QgaW50ZWxfd2F0ZXJtYXJrX3BhcmFtcyAqZGlzcGxheSwKLQkJCQkgaW50IGRpc3BsYXlfbGF0ZW5jeV9ucywKLQkJCQkgY29uc3Qgc3RydWN0IGludGVsX3dhdGVybWFya19wYXJhbXMgKmN1cnNvciwKLQkJCQkgaW50IGN1cnNvcl9sYXRlbmN5X25zLAotCQkJCSBpbnQgKnBsYW5lX3dtLAotCQkJCSBpbnQgKmN1cnNvcl93bSkKLXsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0JaW50IGh0b3RhbCwgaGRpc3BsYXksIGNsb2NrLCBwaXhlbF9zaXplOwotCWludCBsaW5lX3RpbWVfdXMsIGxpbmVfY291bnQ7Ci0JaW50IGVudHJpZXMsIHRsYl9taXNzOwotCi0JY3J0YyA9IGludGVsX2dldF9jcnRjX2Zvcl9waXBlKGRldiwgcGlwZSk7Ci0JaWYgKGNydGMtPmZiID09IE5VTEwgfHwgIWNydGMtPmVuYWJsZWQpCi0JCXJldHVybiBmYWxzZTsKLQotCWh0b3RhbCA9IGNydGMtPm1vZGUuaHRvdGFsOwotCWhkaXNwbGF5ID0gY3J0Yy0+bW9kZS5oZGlzcGxheTsKLQljbG9jayA9IGNydGMtPm1vZGUuY2xvY2s7Ci0JcGl4ZWxfc2l6ZSA9IGNydGMtPmZiLT5iaXRzX3Blcl9waXhlbCAvIDg7Ci0KLQkvKiBVc2UgdGhlIHNtYWxsIGJ1ZmZlciBtZXRob2QgdG8gY2FsY3VsYXRlIHBsYW5lIHdhdGVybWFyayAqLwotCWVudHJpZXMgPSAoKGNsb2NrICogcGl4ZWxfc2l6ZSAvIDEwMDApICogZGlzcGxheV9sYXRlbmN5X25zKSAvIDEwMDA7Ci0JdGxiX21pc3MgPSBkaXNwbGF5LT5maWZvX3NpemUqZGlzcGxheS0+Y2FjaGVsaW5lX3NpemUgLSBoZGlzcGxheSAqIDg7Ci0JaWYgKHRsYl9taXNzID4gMCkKLQkJZW50cmllcyArPSB0bGJfbWlzczsKLQllbnRyaWVzID0gRElWX1JPVU5EX1VQKGVudHJpZXMsIGRpc3BsYXktPmNhY2hlbGluZV9zaXplKTsKLQkqcGxhbmVfd20gPSBlbnRyaWVzICsgZGlzcGxheS0+Z3VhcmRfc2l6ZTsKLQlpZiAoKnBsYW5lX3dtID4gKGludClkaXNwbGF5LT5tYXhfd20pCi0JCSpwbGFuZV93bSA9IGRpc3BsYXktPm1heF93bTsKLQotCS8qIFVzZSB0aGUgbGFyZ2UgYnVmZmVyIG1ldGhvZCB0byBjYWxjdWxhdGUgY3Vyc29yIHdhdGVybWFyayAqLwotCWxpbmVfdGltZV91cyA9ICgoaHRvdGFsICogMTAwMCkgLyBjbG9jayk7Ci0JbGluZV9jb3VudCA9IChjdXJzb3JfbGF0ZW5jeV9ucyAvIGxpbmVfdGltZV91cyArIDEwMDApIC8gMTAwMDsKLQllbnRyaWVzID0gbGluZV9jb3VudCAqIDY0ICogcGl4ZWxfc2l6ZTsKLQl0bGJfbWlzcyA9IGN1cnNvci0+Zmlmb19zaXplKmN1cnNvci0+Y2FjaGVsaW5lX3NpemUgLSBoZGlzcGxheSAqIDg7Ci0JaWYgKHRsYl9taXNzID4gMCkKLQkJZW50cmllcyArPSB0bGJfbWlzczsKLQllbnRyaWVzID0gRElWX1JPVU5EX1VQKGVudHJpZXMsIGN1cnNvci0+Y2FjaGVsaW5lX3NpemUpOwotCSpjdXJzb3Jfd20gPSBlbnRyaWVzICsgY3Vyc29yLT5ndWFyZF9zaXplOwotCWlmICgqY3Vyc29yX3dtID4gKGludCljdXJzb3ItPm1heF93bSkKLQkJKmN1cnNvcl93bSA9IChpbnQpY3Vyc29yLT5tYXhfd207Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQogLyoKICAqIENoZWNrIHRoZSB3bSByZXN1bHQuCiAgKgpAQCAtNDEzOSwxMiArNDA5MSwxMiBAQAogCXVuc2lnbmVkIGludCBlbmFibGVkOwogCiAJZW5hYmxlZCA9IDA7Ci0JaWYgKGlyb25sYWtlX2NvbXB1dGVfd20wKGRldiwgMCwKLQkJCQkgJmlyb25sYWtlX2Rpc3BsYXlfd21faW5mbywKLQkJCQkgSUxLX0xQMF9QTEFORV9MQVRFTkNZLAotCQkJCSAmaXJvbmxha2VfY3Vyc29yX3dtX2luZm8sCi0JCQkJIElMS19MUDBfQ1VSU09SX0xBVEVOQ1ksCi0JCQkJICZwbGFuZV93bSwgJmN1cnNvcl93bSkpIHsKKwlpZiAoZzR4X2NvbXB1dGVfd20wKGRldiwgMCwKKwkJCSAgICAmaXJvbmxha2VfZGlzcGxheV93bV9pbmZvLAorCQkJICAgIElMS19MUDBfUExBTkVfTEFURU5DWSwKKwkJCSAgICAmaXJvbmxha2VfY3Vyc29yX3dtX2luZm8sCisJCQkgICAgSUxLX0xQMF9DVVJTT1JfTEFURU5DWSwKKwkJCSAgICAmcGxhbmVfd20sICZjdXJzb3Jfd20pKSB7CiAJCUk5MTVfV1JJVEUoV00wX1BJUEVBX0lMSywKIAkJCSAgIChwbGFuZV93bSA8PCBXTTBfUElQRV9QTEFORV9TSElGVCkgfCBjdXJzb3Jfd20pOwogCQlEUk1fREVCVUdfS01TKCJGSUZPIHdhdGVybWFya3MgRm9yIHBpcGUgQSAtIgpAQCAtNDE1MywxMiArNDEwNSwxMiBAQAogCQllbmFibGVkIHw9IDE7CiAJfQogCi0JaWYgKGlyb25sYWtlX2NvbXB1dGVfd20wKGRldiwgMSwKLQkJCQkgJmlyb25sYWtlX2Rpc3BsYXlfd21faW5mbywKLQkJCQkgSUxLX0xQMF9QTEFORV9MQVRFTkNZLAotCQkJCSAmaXJvbmxha2VfY3Vyc29yX3dtX2luZm8sCi0JCQkJIElMS19MUDBfQ1VSU09SX0xBVEVOQ1ksCi0JCQkJICZwbGFuZV93bSwgJmN1cnNvcl93bSkpIHsKKwlpZiAoZzR4X2NvbXB1dGVfd20wKGRldiwgMSwKKwkJCSAgICAmaXJvbmxha2VfZGlzcGxheV93bV9pbmZvLAorCQkJICAgIElMS19MUDBfUExBTkVfTEFURU5DWSwKKwkJCSAgICAmaXJvbmxha2VfY3Vyc29yX3dtX2luZm8sCisJCQkgICAgSUxLX0xQMF9DVVJTT1JfTEFURU5DWSwKKwkJCSAgICAmcGxhbmVfd20sICZjdXJzb3Jfd20pKSB7CiAJCUk5MTVfV1JJVEUoV00wX1BJUEVCX0lMSywKIAkJCSAgIChwbGFuZV93bSA8PCBXTTBfUElQRV9QTEFORV9TSElGVCkgfCBjdXJzb3Jfd20pOwogCQlEUk1fREVCVUdfS01TKCJGSUZPIHdhdGVybWFya3MgRm9yIHBpcGUgQiAtIgpAQCAtNDIyMywxMCArNDE3NSwxMCBAQAogCXVuc2lnbmVkIGludCBlbmFibGVkOwogCiAJZW5hYmxlZCA9IDA7Ci0JaWYgKGlyb25sYWtlX2NvbXB1dGVfd20wKGRldiwgMCwKLQkJCQkgJnNhbmR5YnJpZGdlX2Rpc3BsYXlfd21faW5mbywgbGF0ZW5jeSwKLQkJCQkgJnNhbmR5YnJpZGdlX2N1cnNvcl93bV9pbmZvLCBsYXRlbmN5LAotCQkJCSAmcGxhbmVfd20sICZjdXJzb3Jfd20pKSB7CisJaWYgKGc0eF9jb21wdXRlX3dtMChkZXYsIDAsCisJCQkgICAgJnNhbmR5YnJpZGdlX2Rpc3BsYXlfd21faW5mbywgbGF0ZW5jeSwKKwkJCSAgICAmc2FuZHlicmlkZ2VfY3Vyc29yX3dtX2luZm8sIGxhdGVuY3ksCisJCQkgICAgJnBsYW5lX3dtLCAmY3Vyc29yX3dtKSkgewogCQlJOTE1X1dSSVRFKFdNMF9QSVBFQV9JTEssCiAJCQkgICAocGxhbmVfd20gPDwgV00wX1BJUEVfUExBTkVfU0hJRlQpIHwgY3Vyc29yX3dtKTsKIAkJRFJNX0RFQlVHX0tNUygiRklGTyB3YXRlcm1hcmtzIEZvciBwaXBlIEEgLSIKQEAgLTQyMzUsMTAgKzQxODcsMTAgQEAKIAkJZW5hYmxlZCB8PSAxOwogCX0KIAotCWlmIChpcm9ubGFrZV9jb21wdXRlX3dtMChkZXYsIDEsCi0JCQkJICZzYW5keWJyaWRnZV9kaXNwbGF5X3dtX2luZm8sIGxhdGVuY3ksCi0JCQkJICZzYW5keWJyaWRnZV9jdXJzb3Jfd21faW5mbywgbGF0ZW5jeSwKLQkJCQkgJnBsYW5lX3dtLCAmY3Vyc29yX3dtKSkgeworCWlmIChnNHhfY29tcHV0ZV93bTAoZGV2LCAxLAorCQkJICAgICZzYW5keWJyaWRnZV9kaXNwbGF5X3dtX2luZm8sIGxhdGVuY3ksCisJCQkgICAgJnNhbmR5YnJpZGdlX2N1cnNvcl93bV9pbmZvLCBsYXRlbmN5LAorCQkJICAgICZwbGFuZV93bSwgJmN1cnNvcl93bSkpIHsKIAkJSTkxNV9XUklURShXTTBfUElQRUJfSUxLLAogCQkJICAgKHBsYW5lX3dtIDw8IFdNMF9QSVBFX1BMQU5FX1NISUZUKSB8IGN1cnNvcl93bSk7CiAJCURSTV9ERUJVR19LTVMoIkZJRk8gd2F0ZXJtYXJrcyBGb3IgcGlwZSBCIC0iCkBAIC03Njc1LDYgKzc2MjcsNyBAQAogCQkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3dtID0gTlVMTDsKIAkJfSBlbHNlCiAJCQlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfd20gPSBwaW5ldmlld191cGRhdGVfd207CisJCWRldl9wcml2LT5kaXNwbGF5LmluaXRfY2xvY2tfZ2F0aW5nID0gZ2VuM19pbml0X2Nsb2NrX2dhdGluZzsKIAl9IGVsc2UgaWYgKElTX0c0WChkZXYpKSB7CiAJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IGc0eF91cGRhdGVfd207CiAJCWRldl9wcml2LT5kaXNwbGF5LmluaXRfY2xvY2tfZ2F0aW5nID0gZzR4X2luaXRfY2xvY2tfZ2F0aW5nOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKaW5kZXggYTRkODAzMS4uMzkxYjU1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCkBAIC01OSw4ICs1OSw2IEBACiAJYm9vbCBpc19wY2hfZWRwOwogCXVpbnQ4X3QJdHJhaW5fc2V0WzRdOwogCXVpbnQ4X3QgbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV07Ci0KLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpmb3JjZV9hdWRpb19wcm9wZXJ0eTsKIH07CiAKIC8qKgpAQCAtMTcwMiw3ICsxNzAwLDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKHByb3BlcnR5ID09IGludGVsX2RwLT5mb3JjZV9hdWRpb19wcm9wZXJ0eSkgeworCWlmIChwcm9wZXJ0eSA9PSBkZXZfcHJpdi0+Zm9yY2VfYXVkaW9fcHJvcGVydHkpIHsKIAkJaW50IGkgPSB2YWw7CiAJCWJvb2wgaGFzX2F1ZGlvOwogCkBAIC0xODQxLDE2ICsxODM5LDcgQEAKIHN0YXRpYyB2b2lkCiBpbnRlbF9kcF9hZGRfcHJvcGVydGllcyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKLQotCWludGVsX2RwLT5mb3JjZV9hdWRpb19wcm9wZXJ0eSA9Ci0JCWRybV9wcm9wZXJ0eV9jcmVhdGUoZGV2LCBEUk1fTU9ERV9QUk9QX1JBTkdFLCAiZm9yY2VfYXVkaW8iLCAyKTsKLQlpZiAoaW50ZWxfZHAtPmZvcmNlX2F1ZGlvX3Byb3BlcnR5KSB7Ci0JCWludGVsX2RwLT5mb3JjZV9hdWRpb19wcm9wZXJ0eS0+dmFsdWVzWzBdID0gLTE7Ci0JCWludGVsX2RwLT5mb3JjZV9hdWRpb19wcm9wZXJ0eS0+dmFsdWVzWzFdID0gMTsKLQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoY29ubmVjdG9yLCBpbnRlbF9kcC0+Zm9yY2VfYXVkaW9fcHJvcGVydHksIDApOwotCX0KLQorCWludGVsX2F0dGFjaF9mb3JjZV9hdWRpb19wcm9wZXJ0eShjb25uZWN0b3IpOwogCWludGVsX2F0dGFjaF9icm9hZGNhc3RfcmdiX3Byb3BlcnR5KGNvbm5lY3Rvcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5kZXggODMxZDdhNC4uOWZmYTYxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKQEAgLTIzNiw2ICsyMzYsNyBAQAogaW50IGludGVsX2RkY19nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmMsIHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gYm9vbCBpbnRlbF9kZGNfcHJvYmUoc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29kZXIsIGludCBkZGNfYnVzKTsKIAorZXh0ZXJuIHZvaWQgaW50ZWxfYXR0YWNoX2ZvcmNlX2F1ZGlvX3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwogZXh0ZXJuIHZvaWQgaW50ZWxfYXR0YWNoX2Jyb2FkY2FzdF9yZ2JfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CiAKIGV4dGVybiB2b2lkIGludGVsX2NydF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCmluZGV4IGYyODliODYuLmFhMGE4ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKQEAgLTQ1LDcgKzQ1LDYgQEAKIAlib29sIGhhc19oZG1pX3Npbms7CiAJYm9vbCBoYXNfYXVkaW87CiAJaW50IGZvcmNlX2F1ZGlvOwotCXN0cnVjdCBkcm1fcHJvcGVydHkgKmZvcmNlX2F1ZGlvX3Byb3BlcnR5OwogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRlbF9oZG1pICplbmNfdG9faW50ZWxfaGRtaShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCkBAIC0xOTQsNyArMTkzLDcgQEAKIAlpZiAobW9kZS0+Y2xvY2sgPiAxNjUwMDApCiAJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CiAJaWYgKG1vZGUtPmNsb2NrIDwgMjAwMDApCi0JCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CisJCXJldHVybiBNT0RFX0NMT0NLX0xPVzsKIAogCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfREJMU0NBTikKIAkJcmV0dXJuIE1PREVfTk9fREJMRVNDQU47CkBAIC0yODcsNyArMjg2LDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKHByb3BlcnR5ID09IGludGVsX2hkbWktPmZvcmNlX2F1ZGlvX3Byb3BlcnR5KSB7CisJaWYgKHByb3BlcnR5ID09IGRldl9wcml2LT5mb3JjZV9hdWRpb19wcm9wZXJ0eSkgewogCQlpbnQgaSA9IHZhbDsKIAkJYm9vbCBoYXNfYXVkaW87CiAKQEAgLTM2NSwxNiArMzY0LDcgQEAKIHN0YXRpYyB2b2lkCiBpbnRlbF9oZG1pX2FkZF9wcm9wZXJ0aWVzKHN0cnVjdCBpbnRlbF9oZG1pICppbnRlbF9oZG1pLCBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKLQotCWludGVsX2hkbWktPmZvcmNlX2F1ZGlvX3Byb3BlcnR5ID0KLQkJZHJtX3Byb3BlcnR5X2NyZWF0ZShkZXYsIERSTV9NT0RFX1BST1BfUkFOR0UsICJmb3JjZV9hdWRpbyIsIDIpOwotCWlmIChpbnRlbF9oZG1pLT5mb3JjZV9hdWRpb19wcm9wZXJ0eSkgewotCQlpbnRlbF9oZG1pLT5mb3JjZV9hdWRpb19wcm9wZXJ0eS0+dmFsdWVzWzBdID0gLTE7Ci0JCWludGVsX2hkbWktPmZvcmNlX2F1ZGlvX3Byb3BlcnR5LT52YWx1ZXNbMV0gPSAxOwotCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eShjb25uZWN0b3IsIGludGVsX2hkbWktPmZvcmNlX2F1ZGlvX3Byb3BlcnR5LCAwKTsKLQl9Ci0KKwlpbnRlbF9hdHRhY2hfZm9yY2VfYXVkaW9fcHJvcGVydHkoY29ubmVjdG9yKTsKIAlpbnRlbF9hdHRhY2hfYnJvYWRjYXN0X3JnYl9wcm9wZXJ0eShjb25uZWN0b3IpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKaW5kZXggNjdjYjA3Ni4uYjI4ZjdiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYwpAQCAtNzI3LDYgKzcyNywxNCBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJVODAwIiksCiAJCX0sCiAJfSwKKwl7CisJCS5jYWxsYmFjayA9IGludGVsX25vX2x2ZHNfZG1pX2NhbGxiYWNrLAorCQkuaWRlbnQgPSAiQXN1cyBFZWVCb3ggUEMgRUIxMDA3IiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBU1VTVGVLIENvbXB1dGVyIElOQy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiRUIxMDA3IiksCisJCX0sCisJfSwKIAogCXsgfQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vZGVzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2Rlcy5jCmluZGV4IDkwMzRkZDhmLi4zYjI2YTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2Rlcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vZGVzLmMKQEAgLTgxLDYgKzgxLDM2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGNvbnN0IGNoYXIgKmZvcmNlX2F1ZGlvX25hbWVzW10gPSB7CisJIm9mZiIsCisJImF1dG8iLAorCSJvbiIsCit9OworCit2b2lkCitpbnRlbF9hdHRhY2hfZm9yY2VfYXVkaW9fcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wOworCWludCBpOworCisJcHJvcCA9IGRldl9wcml2LT5mb3JjZV9hdWRpb19wcm9wZXJ0eTsKKwlpZiAocHJvcCA9PSBOVUxMKSB7CisJCXByb3AgPSBkcm1fcHJvcGVydHlfY3JlYXRlKGRldiwgRFJNX01PREVfUFJPUF9FTlVNLAorCQkJCQkgICAiYXVkaW8iLAorCQkJCQkgICBBUlJBWV9TSVpFKGZvcmNlX2F1ZGlvX25hbWVzKSk7CisJCWlmIChwcm9wID09IE5VTEwpCisJCQlyZXR1cm47CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZm9yY2VfYXVkaW9fbmFtZXMpOyBpKyspCisJCQlkcm1fcHJvcGVydHlfYWRkX2VudW0ocHJvcCwgaSwgaS0xLCBmb3JjZV9hdWRpb19uYW1lc1tpXSk7CisKKwkJZGV2X3ByaXYtPmZvcmNlX2F1ZGlvX3Byb3BlcnR5ID0gcHJvcDsKKwl9CisJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoY29ubmVjdG9yLCBwcm9wLCAwKTsKK30KKwogc3RhdGljIGNvbnN0IGNoYXIgKmJyb2FkY2FzdF9yZ2JfbmFtZXNbXSA9IHsKIAkiRnVsbCIsCiAJIkxpbWl0ZWQgMTY6MjM1IiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYwppbmRleCA3NTQwODZmLi4zMGZlNTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCkBAIC0xNDgsOCArMTQ4LDYgQEAKIAlpbnQgICBmb3JtYXRfc3VwcG9ydGVkX251bTsKIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICp0dl9mb3JtYXQ7CiAKLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpmb3JjZV9hdWRpb19wcm9wZXJ0eTsKLQogCS8qIGFkZCB0aGUgcHJvcGVydHkgZm9yIHRoZSBTRFZPLVRWICovCiAJc3RydWN0IGRybV9wcm9wZXJ0eSAqbGVmdDsKIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpyaWdodDsKQEAgLTE3MTIsNyArMTcxMCw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChwcm9wZXJ0eSA9PSBpbnRlbF9zZHZvX2Nvbm5lY3Rvci0+Zm9yY2VfYXVkaW9fcHJvcGVydHkpIHsKKwlpZiAocHJvcGVydHkgPT0gZGV2X3ByaXYtPmZvcmNlX2F1ZGlvX3Byb3BlcnR5KSB7CiAJCWludCBpID0gdmFsOwogCQlib29sIGhhc19hdWRpbzsKIApAQCAtMjAzNywxNSArMjAzNSw3IEBACiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+YmFzZS5iYXNlLmRldjsKIAotCWNvbm5lY3Rvci0+Zm9yY2VfYXVkaW9fcHJvcGVydHkgPQotCQlkcm1fcHJvcGVydHlfY3JlYXRlKGRldiwgRFJNX01PREVfUFJPUF9SQU5HRSwgImZvcmNlX2F1ZGlvIiwgMik7Ci0JaWYgKGNvbm5lY3Rvci0+Zm9yY2VfYXVkaW9fcHJvcGVydHkpIHsKLQkJY29ubmVjdG9yLT5mb3JjZV9hdWRpb19wcm9wZXJ0eS0+dmFsdWVzWzBdID0gLTE7Ci0JCWNvbm5lY3Rvci0+Zm9yY2VfYXVkaW9fcHJvcGVydHktPnZhbHVlc1sxXSA9IDE7Ci0JCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZjb25uZWN0b3ItPmJhc2UuYmFzZSwKLQkJCQkJICAgICAgY29ubmVjdG9yLT5mb3JjZV9hdWRpb19wcm9wZXJ0eSwgMCk7Ci0JfQotCisJaW50ZWxfYXR0YWNoX2ZvcmNlX2F1ZGlvX3Byb3BlcnR5KCZjb25uZWN0b3ItPmJhc2UuYmFzZSk7CiAJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDQgJiYgSVNfTU9CSUxFKGRldikpCiAJCWludGVsX2F0dGFjaF9icm9hZGNhc3RfcmdiX3Byb3BlcnR5KCZjb25uZWN0b3ItPmJhc2UuYmFzZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2h3LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2h3LmMKaW5kZXggMDUzZWRmOS4uYmE4OTZlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ody5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaHcuYwpAQCAtOTAwLDYgKzkwMCw3IEBACiAJfQogCS8qIE5WMTEgYW5kIE5WMjAgZG9uJ3QgaGF2ZSB0aGlzLCB0aGV5IHN0b3AgYXQgMHg1Mi4gKi8KIAlpZiAobnZfZ2Y0X2Rpc3BfYXJjaChkZXYpKSB7CisJCXJkX2Npb19zdGF0ZShkZXYsIGhlYWQsIHJlZ3AsIE5WX0NJT19DUkVfNDIpOwogCQlyZF9jaW9fc3RhdGUoZGV2LCBoZWFkLCByZWdwLCBOVl9DSU9fQ1JFXzUzKTsKIAkJcmRfY2lvX3N0YXRlKGRldiwgaGVhZCwgcmVncCwgTlZfQ0lPX0NSRV81NCk7CiAKQEAgLTEwMDMsNiArMTAwNCw3IEBACiAJCQlub3V2ZWF1X3dhaXRfZXEoZGV2LCA2NTAwMDAwMDAsIE5WX1BSTUNJT19JTlAwX19DT0xPUiwgMHg4LCAweDApOwogCQl9CiAKKwkJd3JfY2lvX3N0YXRlKGRldiwgaGVhZCwgcmVncCwgTlZfQ0lPX0NSRV80Mik7CiAJCXdyX2Npb19zdGF0ZShkZXYsIGhlYWQsIHJlZ3AsIE5WX0NJT19DUkVfNTMpOwogCQl3cl9jaW9fc3RhdGUoZGV2LCBoZWFkLCByZWdwLCBOVl9DSU9fQ1JFXzU0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMKaW5kZXggMjk2MGY1OC4uNWVlMTRkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21lbS5jCkBAIC0zOTcsNyArMzk3LDcgQEAKIAkJaWYgKHBjaV9kbWFfc3VwcG9ydGVkKGRldi0+cGRldiwgRE1BX0JJVF9NQVNLKDQwKSkpCiAJCQlkbWFfYml0cyA9IDQwOwogCX0gZWxzZQotCWlmIChkcm1fcGNpX2RldmljZV9pc19wY2llKGRldikgJiYKKwlpZiAoMCAmJiBkcm1fcGNpX2RldmljZV9pc19wY2llKGRldikgJiYKIAkgICAgZGV2X3ByaXYtPmNoaXBzZXQgID4gMHg0MCAmJgogCSAgICBkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDQ1KSB7CiAJCWlmIChwY2lfZG1hX3N1cHBvcnRlZChkZXYtPnBkZXYsIERNQV9CSVRfTUFTSygzOSkpKQpAQCAtODY4LDcgKzg2OCw5IEBACiAJCW5vdXZlYXVfdm1fdW5tYXAoJm5vZGUtPnRtcF92bWEpOwogCQlub3V2ZWF1X3ZtX3B1dCgmbm9kZS0+dG1wX3ZtYSk7CiAJfQorCiAJbWVtLT5tbV9ub2RlID0gTlVMTDsKKwlrZnJlZShub2RlKTsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zZ2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zZ2RtYS5jCmluZGV4IGM3NzExMWUuLjgyZmFkOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc2dkbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3NnZG1hLmMKQEAgLTQ1OCw3ICs0NTgsNyBAQAogCQlkZXZfcHJpdi0+Z2FydF9pbmZvLnR5cGUgPSBOT1VWRUFVX0dBUlRfSFc7CiAJCWRldl9wcml2LT5nYXJ0X2luZm8uZnVuYyA9ICZudjUwX3NnZG1hX2JhY2tlbmQ7CiAJfSBlbHNlCi0JaWYgKGRybV9wY2lfZGV2aWNlX2lzX3BjaWUoZGV2KSAmJgorCWlmICgwICYmIGRybV9wY2lfZGV2aWNlX2lzX3BjaWUoZGV2KSAmJgogCSAgICBkZXZfcHJpdi0+Y2hpcHNldCA+IDB4NDAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgIT0gMHg0NSkgewogCQlpZiAobnY0NF9ncmFwaF9jbGFzcyhkZXYpKSB7CiAJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmZ1bmMgPSAmbnY0NF9zZ2RtYV9iYWNrZW5kOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jCmluZGV4IDM4ZWE2NjIuLjgwMjE4ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N0YXRlLmMKQEAgLTM3MSw2ICszNzEsNyBAQAogCQllbmdpbmUtPnZyYW0uZmxhZ3NfdmFsaWQJPSBudjUwX3ZyYW1fZmxhZ3NfdmFsaWQ7CiAJCWJyZWFrOwogCWNhc2UgMHhDMDoKKwljYXNlIDB4RDA6CiAJCWVuZ2luZS0+aW5zdG1lbS5pbml0CQk9IG52YzBfaW5zdG1lbV9pbml0OwogCQllbmdpbmUtPmluc3RtZW0udGFrZWRvd24JPSBudmMwX2luc3RtZW1fdGFrZWRvd247CiAJCWVuZ2luZS0+aW5zdG1lbS5zdXNwZW5kCQk9IG52YzBfaW5zdG1lbV9zdXNwZW5kOwpAQCAtNTYzLDY4ICs1NjQsNjggQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dF90aW1lcjsKIAotCXN3aXRjaCAoZGV2X3ByaXYtPmNhcmRfdHlwZSkgewotCWNhc2UgTlZfMDQ6Ci0JCW52MDRfZ3JhcGhfY3JlYXRlKGRldik7Ci0JCWJyZWFrOwotCWNhc2UgTlZfMTA6Ci0JCW52MTBfZ3JhcGhfY3JlYXRlKGRldik7Ci0JCWJyZWFrOwotCWNhc2UgTlZfMjA6Ci0JY2FzZSBOVl8zMDoKLQkJbnYyMF9ncmFwaF9jcmVhdGUoZGV2KTsKLQkJYnJlYWs7Ci0JY2FzZSBOVl80MDoKLQkJbnY0MF9ncmFwaF9jcmVhdGUoZGV2KTsKLQkJYnJlYWs7Ci0JY2FzZSBOVl81MDoKLQkJbnY1MF9ncmFwaF9jcmVhdGUoZGV2KTsKLQkJYnJlYWs7Ci0JY2FzZSBOVl9DMDoKLQkJbnZjMF9ncmFwaF9jcmVhdGUoZGV2KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0Jc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgewotCWNhc2UgMHg4NDoKLQljYXNlIDB4ODY6Ci0JY2FzZSAweDkyOgotCWNhc2UgMHg5NDoKLQljYXNlIDB4OTY6Ci0JY2FzZSAweGEwOgotCQludjg0X2NyeXB0X2NyZWF0ZShkZXYpOwotCQlicmVhazsKLQl9Ci0KLQlzd2l0Y2ggKGRldl9wcml2LT5jYXJkX3R5cGUpIHsKLQljYXNlIE5WXzUwOgotCQlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7Ci0JCWNhc2UgMHhhMzoKLQkJY2FzZSAweGE1OgotCQljYXNlIDB4YTg6Ci0JCWNhc2UgMHhhZjoKLQkJCW52YTNfY29weV9jcmVhdGUoZGV2KTsKKwlpZiAoIW5vdXZlYXVfbm9hY2NlbCkgeworCQlzd2l0Y2ggKGRldl9wcml2LT5jYXJkX3R5cGUpIHsKKwkJY2FzZSBOVl8wNDoKKwkJCW52MDRfZ3JhcGhfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJY2FzZSBOVl8xMDoKKwkJCW52MTBfZ3JhcGhfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJY2FzZSBOVl8yMDoKKwkJY2FzZSBOVl8zMDoKKwkJCW52MjBfZ3JhcGhfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJY2FzZSBOVl80MDoKKwkJCW52NDBfZ3JhcGhfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJY2FzZSBOVl81MDoKKwkJCW52NTBfZ3JhcGhfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJY2FzZSBOVl9DMDoKKwkJCW52YzBfZ3JhcGhfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9Ci0JCWJyZWFrOwotCWNhc2UgTlZfQzA6Ci0JCW52YzBfY29weV9jcmVhdGUoZGV2LCAwKTsKLQkJbnZjMF9jb3B5X2NyZWF0ZShkZXYsIDEpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9CiAKLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA9PSBOVl80MCkKLQkJbnY0MF9tcGVnX2NyZWF0ZShkZXYpOwotCWVsc2UKLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA9PSBOVl81MCAmJgotCSAgICAoZGV2X3ByaXYtPmNoaXBzZXQgPCAweDk4IHx8IGRldl9wcml2LT5jaGlwc2V0ID09IDB4YTApKQotCQludjUwX21wZWdfY3JlYXRlKGRldik7CisJCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwkJY2FzZSAweDg0OgorCQljYXNlIDB4ODY6CisJCWNhc2UgMHg5MjoKKwkJY2FzZSAweDk0OgorCQljYXNlIDB4OTY6CisJCWNhc2UgMHhhMDoKKwkJCW52ODRfY3J5cHRfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJfQogCi0JaWYgKCFub3V2ZWF1X25vYWNjZWwpIHsKKwkJc3dpdGNoIChkZXZfcHJpdi0+Y2FyZF90eXBlKSB7CisJCWNhc2UgTlZfNTA6CisJCQlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7CisJCQljYXNlIDB4YTM6CisJCQljYXNlIDB4YTU6CisJCQljYXNlIDB4YTg6CisJCQljYXNlIDB4YWY6CisJCQkJbnZhM19jb3B5X2NyZWF0ZShkZXYpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgTlZfQzA6CisJCQludmMwX2NvcHlfY3JlYXRlKGRldiwgMCk7CisJCQludmMwX2NvcHlfY3JlYXRlKGRldiwgMSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfNDApCisJCQludjQwX21wZWdfY3JlYXRlKGRldik7CisJCWVsc2UKKwkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfNTAgJiYKKwkJICAgIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4OTggfHwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHhhMCkpCisJCQludjUwX21wZWdfY3JlYXRlKGRldik7CisKIAkJZm9yIChlID0gMDsgZSA8IE5WT0JKX0VOR0lORV9OUjsgZSsrKSB7CiAJCQlpZiAoZGV2X3ByaXYtPmVuZ1tlXSkgewogCQkJCXJldCA9IGRldl9wcml2LT5lbmdbZV0tPmluaXQoZGV2LCBlKTsKQEAgLTkyMiw2ICs5MjMsNyBAQAogCQlkZXZfcHJpdi0+Y2FyZF90eXBlID0gTlZfNTA7CiAJCWJyZWFrOwogCWNhc2UgMHhjMDoKKwljYXNlIDB4ZDA6CiAJCWRldl9wcml2LT5jYXJkX3R5cGUgPSBOVl9DMDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdm0uYwppbmRleCAwMDU5ZTZmLi41MTlhNmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3ZtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV92bS5jCkBAIC01OCw2ICs1OCw3IEBACiAJCQludW0gLT0gbGVuOwogCQkJcHRlICs9IGxlbjsKIAkJCWlmICh1bmxpa2VseShlbmQgPj0gbWF4KSkgeworCQkJCXBoeXMgKz0gbGVuIDw8IChiaXRzICsgMTIpOwogCQkJCXBkZSsrOwogCQkJCXB0ZSA9IDA7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfY3J0Yy5jCmluZGV4IDNjNzhiYzguLmYxYTNhZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfY3J0Yy5jCkBAIC0zNzYsNyArMzc2LDEwIEBACiAJICovCiAKIAkvKiBmcmFtZWJ1ZmZlciBjYW4gYmUgbGFyZ2VyIHRoYW4gY3J0YyBzY2Fub3V0IGFyZWEuICovCi0JcmVncC0+Q1JUQ1tOVl9DSU9fQ1JFX1JQQzBfSU5ERVhdID0gWExBVEUoZmItPnBpdGNoIC8gOCwgOCwgTlZfQ0lPX0NSRV9SUEMwX09GRlNFVF8xMF84KTsKKwlyZWdwLT5DUlRDW05WX0NJT19DUkVfUlBDMF9JTkRFWF0gPQorCQlYTEFURShmYi0+cGl0Y2ggLyA4LCA4LCBOVl9DSU9fQ1JFX1JQQzBfT0ZGU0VUXzEwXzgpOworCXJlZ3AtPkNSVENbTlZfQ0lPX0NSRV80Ml0gPQorCQlYTEFURShmYi0+cGl0Y2ggLyA4LCAxMSwgTlZfQ0lPX0NSRV80Ml9PRkZTRVRfMTEpOwogCXJlZ3AtPkNSVENbTlZfQ0lPX0NSRV9SUEMxX0lOREVYXSA9IG1vZGUtPmNydGNfaGRpc3BsYXkgPCAxMjgwID8KIAkJCQkJICAgIE1BU0soTlZfQ0lPX0NSRV9SUEMxX0xBUkdFKSA6IDB4MDA7CiAJcmVncC0+Q1JUQ1tOVl9DSU9fQ1JFX0xTUl9JTkRFWF0gPSBYTEFURShob3JpekJsYW5rRW5kLCA2LCBOVl9DSU9fQ1JFX0xTUl9IQkVfNikgfApAQCAtODI0LDggKzgyNywxMSBAQAogCXJlZ3AtPkNSVENbTlZfQ0lPX0NSX09GRlNFVF9JTkRFWF0gPSBkcm1fZmItPnBpdGNoID4+IDM7CiAJcmVncC0+Q1JUQ1tOVl9DSU9fQ1JFX1JQQzBfSU5ERVhdID0KIAkJWExBVEUoZHJtX2ZiLT5waXRjaCA+PiAzLCA4LCBOVl9DSU9fQ1JFX1JQQzBfT0ZGU0VUXzEwXzgpOworCXJlZ3AtPkNSVENbTlZfQ0lPX0NSRV80Ml0gPQorCQlYTEFURShkcm1fZmItPnBpdGNoIC8gOCwgMTEsIE5WX0NJT19DUkVfNDJfT0ZGU0VUXzExKTsKIAljcnRjX3dyX2Npb19zdGF0ZShjcnRjLCByZWdwLCBOVl9DSU9fQ1JFX1JQQzBfSU5ERVgpOwogCWNydGNfd3JfY2lvX3N0YXRlKGNydGMsIHJlZ3AsIE5WX0NJT19DUl9PRkZTRVRfSU5ERVgpOworCWNydGNfd3JfY2lvX3N0YXRlKGNydGMsIHJlZ3AsIE5WX0NJT19DUkVfNDIpOwogCiAJLyogVXBkYXRlIHRoZSBmcmFtZWJ1ZmZlciBsb2NhdGlvbi4gKi8KIAlyZWdwLT5mYl9zdGFydCA9IG52X2NydGMtPmZiLm9mZnNldCAmIH4zOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZyZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252cmVnLmgKaW5kZXggZmUwZjI1My4uYmJmYjFhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZyZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udnJlZy5oCkBAIC0yNzcsNiArMjc3LDggQEAKICMJCWRlZmluZSBOVl9DSU9fQ1JFX0VCUl9WREVfMTEJCTI6MgogIwkJZGVmaW5lIE5WX0NJT19DUkVfRUJSX1ZSU18xMQkJNDo0CiAjCQlkZWZpbmUgTlZfQ0lPX0NSRV9FQlJfVkJTXzExCQk2OjYKKyMJZGVmaW5lIE5WX0NJT19DUkVfNDIJCQkweDQyCisjCQlkZWZpbmUgTlZfQ0lPX0NSRV80Ml9PRkZTRVRfMTEJCTY6NgogIwlkZWZpbmUgTlZfQ0lPX0NSRV80MwkJCTB4NDMKICMJZGVmaW5lIE5WX0NJT19DUkVfNDQJCQkweDQ0CS8qIGhlYWQgY29udHJvbCAqLwogIwlkZWZpbmUgTlZfQ0lPX0NSRV9DU0IJCQkweDQ1CS8qIGNvbG91ciBzYXR1cmF0aW9uIGJvb3N0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL0tjb25maWcKaW5kZXggOTc0NmZlZS4uZWE5MmJiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vS2NvbmZpZwpAQCAtMjgsMTEgKzI4LDQgQEAKIAkgIFRoZSBrZXJuZWwgd2lsbCBhbHNvIHBlcmZvcm0gc2VjdXJpdHkgY2hlY2sgb24gY29tbWFuZCBzdHJlYW0KIAkgIHByb3ZpZGVkIGJ5IHRoZSB1c2VyLCB3ZSB3YW50IHRvIGNhdGNoIGFuZCBmb3JiaWQgYW55IGlsbGVnYWwgdXNlCiAJICBvZiB0aGUgR1BVIHN1Y2ggYXMgRE1BIGludG8gcmFuZG9tIHN5c3RlbSBtZW1vcnkgb3IgaW50byBtZW1vcnkKLQkgIG5vdCBvd25lZCBieSB0aGUgcHJvY2VzcyBzdXBwbHlpbmcgdGhlIGNvbW1hbmQgc3RyZWFtLiBUaGlzIHBhcnQKLQkgIG9mIHRoZSBjb2RlIGlzIHN0aWxsIGluY29tcGxldGUgYW5kIHRoaXMgd2h5IHdlIHByb3Bvc2UgdGhhdCBwYXRjaAotCSAgYXMgYSBzdGFnaW5nIGRyaXZlciBhZGRpdGlvbiwgZnV0dXJlIHNlY3VyaXR5IG1pZ2h0IGZvcmJpZCBjdXJyZW50Ci0JICBleHBlcmltZW50YWwgdXNlcnNwYWNlIHRvIHJ1bi4KLQotCSAgVGhpcyBjb2RlIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBoYXJkd2FyZSA6IFIxWFgsUjJYWCxSM1hYLFI0WFgsUjVYWAotCSAgKHJhZGVvbiB1cCB0byBYMTk1MCkuIFdvcmtzIGlzIHVuZGVyd2F5IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgUjZYWCwKLQkgIFI3WFggYW5kIG5ld2VyIGhhcmR3YXJlIChyYWRlb24gZnJvbSBIRDJYWFggdG8gSEQ0WFhYKS4KKwkgIG5vdCBvd25lZCBieSB0aGUgcHJvY2VzcyBzdXBwbHlpbmcgdGhlIGNvbW1hbmQgc3RyZWFtLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYwppbmRleCBlYzg0ODc4Li44NGE2OWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYwpAQCAtMTA0NSw3ICsxMDQ1LDcgQEAKIAl1aW50NjRfdCBmYl9sb2NhdGlvbjsKIAl1aW50MzJfdCBmYl9mb3JtYXQsIGZiX3BpdGNoX3BpeGVscywgdGlsaW5nX2ZsYWdzOwogCXUzMiBmYl9zd2FwID0gRVZFUkdSRUVOX0dSUEhfRU5ESUFOX1NXQVAoRVZFUkdSRUVOX0dSUEhfRU5ESUFOX05PTkUpOwotCXUzMiB0bXA7CisJdTMyIHRtcCwgdmlld3BvcnRfdywgdmlld3BvcnRfaDsKIAlpbnQgcjsKIAogCS8qIG5vIGZiIGJvdW5kICovCkBAIC0xMTcxLDggKzExNzEsMTAgQEAKIAl5ICY9IH4xOwogCVdSRUczMihFVkVSR1JFRU5fVklFV1BPUlRfU1RBUlQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCiAJICAgICAgICh4IDw8IDE2KSB8IHkpOworCXZpZXdwb3J0X3cgPSBjcnRjLT5tb2RlLmhkaXNwbGF5OworCXZpZXdwb3J0X2ggPSAoY3J0Yy0+bW9kZS52ZGlzcGxheSArIDEpICYgfjE7CiAJV1JFRzMyKEVWRVJHUkVFTl9WSUVXUE9SVF9TSVpFICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAotCSAgICAgICAoY3J0Yy0+bW9kZS5oZGlzcGxheSA8PCAxNikgfCBjcnRjLT5tb2RlLnZkaXNwbGF5KTsKKwkgICAgICAgKHZpZXdwb3J0X3cgPDwgMTYpIHwgdmlld3BvcnRfaCk7CiAKIAkvKiBwYWdlZmxpcCBzZXR1cCAqLwogCS8qIG1ha2Ugc3VyZSBmbGlwIGlzIGF0IHZiIHJhdGhlciB0aGFuIGhiICovCkBAIC0xMjEzLDcgKzEyMTUsNyBAQAogCXVpbnQ2NF90IGZiX2xvY2F0aW9uOwogCXVpbnQzMl90IGZiX2Zvcm1hdCwgZmJfcGl0Y2hfcGl4ZWxzLCB0aWxpbmdfZmxhZ3M7CiAJdTMyIGZiX3N3YXAgPSBSNjAwX0QxR1JQSF9TV0FQX0VORElBTl9OT05FOwotCXUzMiB0bXA7CisJdTMyIHRtcCwgdmlld3BvcnRfdywgdmlld3BvcnRfaDsKIAlpbnQgcjsKIAogCS8qIG5vIGZiIGJvdW5kICovCkBAIC0xMzM4LDggKzEzNDAsMTAgQEAKIAl5ICY9IH4xOwogCVdSRUczMihBVklWT19EMU1PREVfVklFV1BPUlRfU1RBUlQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCiAJICAgICAgICh4IDw8IDE2KSB8IHkpOworCXZpZXdwb3J0X3cgPSBjcnRjLT5tb2RlLmhkaXNwbGF5OworCXZpZXdwb3J0X2ggPSAoY3J0Yy0+bW9kZS52ZGlzcGxheSArIDEpICYgfjE7CiAJV1JFRzMyKEFWSVZPX0QxTU9ERV9WSUVXUE9SVF9TSVpFICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAotCSAgICAgICAoY3J0Yy0+bW9kZS5oZGlzcGxheSA8PCAxNikgfCBjcnRjLT5tb2RlLnZkaXNwbGF5KTsKKwkgICAgICAgKHZpZXdwb3J0X3cgPDwgMTYpIHwgdmlld3BvcnRfaCk7CiAKIAkvKiBwYWdlZmxpcCBzZXR1cCAqLwogCS8qIG1ha2Ugc3VyZSBmbGlwIGlzIGF0IHZiIHJhdGhlciB0aGFuIGhiICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2NheW1hbl9ibGl0X3NoYWRlcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2F5bWFuX2JsaXRfc2hhZGVycy5jCmluZGV4IGUxNDhhYjAuLjdiNGVlYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2F5bWFuX2JsaXRfc2hhZGVycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2F5bWFuX2JsaXRfc2hhZGVycy5jCkBAIC0zOSwxNyArMzksMzM1IEBACiAKIGNvbnN0IHUzMiBjYXltYW5fZGVmYXVsdF9zdGF0ZVtdID0KIHsKLQkvKiBYWFggZmlsbCBpbiBhZGRpdGlvbmFsIGJsaXQgc3RhdGUgKi8KKwkweGMwMDY2OTAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDA2MCwgLyogREJfUkVOREVSX0NPTlRST0wgKi8KKwkweDAwMDAwMDAwLCAvKiBEQl9DT1VOVF9DT05UUk9MICovCisJMHgwMDAwMDAwMCwgLyogREJfREVQVEhfVklFVyAqLworCTB4MDAwMDAwMmEsIC8qIERCX1JFTkRFUl9PVkVSUklERSAqLworCTB4MDAwMDAwMDAsIC8qIERCX1JFTkRFUl9PVkVSUklERTIgKi8KKwkweDAwMDAwMDAwLCAvKiBEQl9IVElMRV9EQVRBX0JBU0UgKi8KIAogCTB4YzAwMjY5MDAsCi0JMHgwMDAwMDMxNiwKLQkweDAwMDAwMDBlLCAvKiBWR1RfVkVSVEVYX1JFVVNFX0JMT0NLX0NOVEwgKi8KLQkweDAwMDAwMDEwLCAvKiAgKi8KKwkweDAwMDAwMDBhLAorCTB4MDAwMDAwMDAsIC8qIERCX1NURU5DSUxfQ0xFQVIgKi8KKwkweDAwMDAwMDAwLCAvKiBEQl9ERVBUSF9DTEVBUiAqLworCisJMHhjMDAzNjkwMCwKKwkweDAwMDAwMDBmLAorCTB4MDAwMDAwMDAsIC8qIERCX0RFUFRIX0lORk8gKi8KKwkweDAwMDAwMDAwLCAvKiBEQl9aX0lORk8gKi8KKwkweDAwMDAwMDAwLCAvKiBEQl9TVEVOQ0lMX0lORk8gKi8KKworCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4MCwKKwkweDAwMDAwMDAwLCAvKiBQQV9TQ19XSU5ET1dfT0ZGU0VUICovCisKKwkweGMwMGQ2OTAwLAorCTB4MDAwMDAwODMsCisJMHgwMDAwZmZmZiwgLyogUEFfU0NfQ0xJUFJFQ1RfUlVMRSAqLworCTB4MDAwMDAwMDAsIC8qIFBBX1NDX0NMSVBSRUNUXzBfVEwgKi8KKwkweDIwMDAyMDAwLCAvKiBQQV9TQ19DTElQUkVDVF8wX0JSICovCisJMHgwMDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4MDAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDAwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHhhYWFhYWFhYSwgLyogUEFfU0NfRURHRVJVTEUgKi8KKwkweDAwMDAwMDAwLCAvKiBQQV9TVV9IQVJEV0FSRV9TQ1JFRU5fT0ZGU0VUICovCisJMHgwMDAwMDAwZiwgLyogQ0JfVEFSR0VUX01BU0sgKi8KKwkweDAwMDAwMDBmLCAvKiBDQl9TSEFERVJfTUFTSyAqLworCisJMHhjMDIyNjkwMCwKKwkweDAwMDAwMDk0LAorCTB4ODAwMDAwMDAsIC8qIFBBX1NDX1ZQT1JUX1NDSVNTT1JfMF9UTCAqLworCTB4MjAwMDIwMDAsIC8qIFBBX1NDX1ZQT1JUX1NDSVNTT1JfMF9CUiAqLworCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4MDAwMDAwMDAsIC8qIFBBX1NDX1ZQT1JUX1pNSU5fMCAqLworCTB4M2Y4MDAwMDAsIC8qIFBBX1NDX1ZQT1JUX1pNQVhfMCAqLworCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGQ0LAorCTB4MDAwMDAwMDAsIC8qIFNYX01JU0MgKi8KIAogCTB4YzAwMjY5MDAsCiAJMHgwMDAwMDBkOSwKIAkweDAwMDAwMDAwLCAvKiBDUF9SSU5HSUQgKi8KIAkweDAwMDAwMDAwLCAvKiBDUF9WTUlEICovCisKKwkweGMwMDk2OTAwLAorCTB4MDAwMDAxMDAsCisJMHgwMGZmZmZmZiwgLyogVkdUX01BWF9WVFhfSU5EWCAqLworCTB4MDAwMDAwMDAsIC8qIFZHVF9NSU5fVlRYX0lORFggKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfSU5EWF9PRkZTRVQgKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfTVVMVElfUFJJTV9JQl9SRVNFVF9JTkRYICovCisJMHgwMDAwMDAwMCwgLyogU1hfQUxQSEFfVEVTVF9DT05UUk9MICovCisJMHgwMDAwMDAwMCwgLyogQ0JfQkxFTkRfUkVEICovCisJMHgwMDAwMDAwMCwgLyogQ0JfQkxFTkRfR1JFRU4gKi8KKwkweDAwMDAwMDAwLCAvKiBDQl9CTEVORF9CTFVFICovCisJMHgwMDAwMDAwMCwgLyogQ0JfQkxFTkRfQUxQSEEgKi8KKworCTB4YzAwMTY5MDAsCisJMHgwMDAwMDE4NywKKwkweDAwMDAwMTAwLCAvKiBTUElfVlNfT1VUX0lEXzAgKi8KKworCTB4YzAwMjY5MDAsCisJMHgwMDAwMDE5MSwKKwkweDAwMDAwMTAwLCAvKiBTUElfUFNfSU5QVVRfQ05UTF8wICovCisJMHgwMDAwMDEwMSwgLyogU1BJX1BTX0lOUFVUX0NOVExfMSAqLworCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMWIxLAorCTB4MDAwMDAwMDAsIC8qIFNQSV9WU19PVVRfQ09ORklHICovCisKKwkweGMwMTA2OTAwLAorCTB4MDAwMDAxYjMsCisJMHgyMDAwMDAwMSwgLyogU1BJX1BTX0lOX0NPTlRST0xfMCAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9QU19JTl9DT05UUk9MXzEgKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfSU5URVJQX0NPTlRST0xfMCAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9JTlBVVF9aICovCisJMHgwMDAwMDAwMCwgLyogU1BJX0ZPR19DTlRMICovCisJMHgwMDEwMDAwMCwgLyogU1BJX0JBUllDX0NOVEwgKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfUFNfSU5fQ09OVFJPTF8yICovCisJMHgwMDAwMDAwMCwgLyogU1BJX0NPTVBVVEVfSU5QVVRfQ05UTCAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9DT01QVVRFX05VTV9USFJFQURfWCAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9DT01QVVRFX05VTV9USFJFQURfWSAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9DT01QVVRFX05VTV9USFJFQURfWiAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9HUFJfTUdNVCAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9MRFNfTUdNVCAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9TVEFDS19NR01UICovCisJMHgwMDAwMDAwMCwgLyogU1BJX1dBVkVfTUdNVF8xICovCisJMHgwMDAwMDAwMCwgLyogU1BJX1dBVkVfTUdNVF8yICovCisKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxZTAsCisJMHgwMDAwMDAwMCwgLyogQ0JfQkxFTkQwX0NPTlRST0wgKi8KKworCTB4YzAwZTY5MDAsCisJMHgwMDAwMDIwMCwKKwkweDAwMDAwMDAwLCAvKiBEQl9ERVBUSF9DT05UUk9MICovCisJMHgwMDAwMDAwMCwgLyogREJfRVFBQSAqLworCTB4MDBjYzAwMTAsIC8qIENCX0NPTE9SX0NPTlRST0wgKi8KKwkweDAwMDAwMjEwLCAvKiBEQl9TSEFERVJfQ09OVFJPTCAqLworCTB4MDAwMTAwMDAsIC8qIFBBX0NMX0NMSVBfQ05UTCAqLworCTB4MDAwMDAwMDQsIC8qIFBBX1NVX1NDX01PREVfQ05UTCAqLworCTB4MDAwMDAxMDAsIC8qIFBBX0NMX1ZURV9DTlRMICovCisJMHgwMDAwMDAwMCwgLyogUEFfQ0xfVlNfT1VUX0NOVEwgKi8KKwkweDAwMDAwMDAwLCAvKiBQQV9DTF9OQU5JTkZfQ05UTCAqLworCTB4MDAwMDAwMDAsIC8qIFBBX1NVX0xJTkVfU1RJUFBMRV9DTlRMICovCisJMHgwMDAwMDAwMCwgLyogUEFfU1VfTElORV9TVElQUExFX1NDQUxFICovCisJMHgwMDAwMDAwMCwgLyogUEFfU1VfUFJJTV9GSUxURVJfQ05UTCAqLworCTB4MDAwMDAwMDAsIC8qICAqLworCTB4MDAwMDAwMDAsIC8qICAqLworCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMjI5LAorCTB4MDAwMDAwMDAsIC8qIFNRX1BHTV9TVEFSVF9GUyAqLworCTB4MDAwMDAwMDAsCisKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyM2IsCisJMHgwMDAwMDAwMCwgLyogU1FfTERTX0FMTE9DX1BTICovCisKKwkweGMwMDY2OTAwLAorCTB4MDAwMDAyNDAsCisJMHgwMDAwMDAwMCwgLyogU1FfRVNHU19SSU5HX0lURU1TSVpFICovCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCisJMHhjMDA0NjkwMCwKKwkweDAwMDAwMjQ3LAorCTB4MDAwMDAwMDAsIC8qIFNRX0dTX1ZFUlRfSVRFTVNJWkUgKi8KKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKworCTB4YzAxMTY5MDAsCisJMHgwMDAwMDI4MCwKKwkweDAwMDAwMDAwLCAvKiBQQV9TVV9QT0lOVF9TSVpFICovCisJMHgwMDAwMDAwMCwgLyogUEFfU1VfUE9JTlRfTUlOTUFYICovCisJMHgwMDAwMDAwOCwgLyogUEFfU1VfTElORV9DTlRMICovCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfTElORV9TVElQUExFICovCisJMHgwMDAwMDAwMCwgLyogVkdUX09VVFBVVF9QQVRIX0NOVEwgKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfSE9TX0NOVEwgKi8KKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIC8qIFZHVF9HU19NT0RFICovCisKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAyOTIsCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfTU9ERV9DTlRMXzAgKi8KKwkweDAwMDAwMDAwLCAvKiBQQV9TQ19NT0RFX0NOVExfMSAqLworCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMmExLAorCTB4MDAwMDAwMDAsIC8qIFZHVF9QUklNSVRJVkVJRF9FTiAqLworCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMmE1LAorCTB4MDAwMDAwMDAsIC8qIFZHVF9NVUxUSV9QUklNX0lCX1JFU0VUX0VOICovCisKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAyYTgsCisJMHgwMDAwMDAwMCwgLyogVkdUX0lOU1RBTkNFX1NURVBfUkFURV8wICovCisJMHgwMDAwMDAwMCwKKworCTB4YzAwMjY5MDAsCisJMHgwMDAwMDJhZCwKKwkweDAwMDAwMDAwLCAvKiBWR1RfUkVVU0VfT0ZGICovCisJMHgwMDAwMDAwMCwKKworCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJkNSwKKwkweDAwMDAwMDAwLCAvKiBWR1RfU0hBREVSX1NUQUdFU19FTiAqLworCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMmRjLAorCTB4MDAwMGFhMDAsIC8qIERCX0FMUEhBX1RPX01BU0sgKi8KKworCTB4YzAwNjY5MDAsCisJMHgwMDAwMDJkZSwKKwkweDAwMDAwMDAwLCAvKiBQQV9TVV9QT0xZX09GRlNFVF9EQl9GTVRfQ05UTCAqLworCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKworCTB4YzAwMjY5MDAsCisJMHgwMDAwMDJlNSwKKwkweDAwMDAwMDAwLCAvKiBWR1RfU1RSTU9VVF9DT05GSUcgKi8KKwkweDAwMDAwMDAwLAorCisJMHhjMDFiNjkwMCwKKwkweDAwMDAwMmY1LAorCTB4NzY1NDMyMTAsIC8qIFBBX1NDX0NFTlRST0lEX1BSSU9SSVRZXzAgKi8KKwkweGZlZGNiYTk4LCAvKiBQQV9TQ19DRU5UUk9JRF9QUklPUklUWV8xICovCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfTElORV9DTlRMICovCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfQUFfQ09ORklHICovCisJMHgwMDAwMDAwNSwgLyogUEFfU1VfVlRYX0NOVEwgKi8KKwkweDNmODAwMDAwLCAvKiBQQV9DTF9HQl9WRVJUX0NMSVBfQURKICovCisJMHgzZjgwMDAwMCwgLyogUEFfQ0xfR0JfVkVSVF9ESVNDX0FESiAqLworCTB4M2Y4MDAwMDAsIC8qIFBBX0NMX0dCX0hPUlpfQ0xJUF9BREogKi8KKwkweDNmODAwMDAwLCAvKiBQQV9DTF9HQl9IT1JaX0RJU0NfQURKICovCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfQUFfU0FNUExFX0xPQ1NfUElYRUxfWDBZMF8wICovCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHhmZmZmZmZmZiwgLyogUEFfU0NfQUFfTUFTS19YMFkwX1gxWTAgKi8KKwkweGZmZmZmZmZmLAorCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMzE2LAorCTB4MDAwMDAwMGUsIC8qIFZHVF9WRVJURVhfUkVVU0VfQkxPQ0tfQ05UTCAqLworCTB4MDAwMDAwMTAsIC8qICAqLwogfTsKIAorY29uc3QgdTMyIGNheW1hbl92c1tdID0KK3sKKwkweDAwMDAwMDA0LAorCTB4ODA0MDA0MDAsCisJMHgwMDAwYTAzYywKKwkweDk1MDAwNjg4LAorCTB4MDAwMDQwMDAsCisJMHgxNTAwMDY4OCwKKwkweDAwMDAwMDAwLAorCTB4ODgwMDAwMDAsCisJMHgwNDAwMDAwMCwKKwkweDY3OTYxMDAxLAorI2lmZGVmIF9fQklHX0VORElBTgorCTB4MDAwMjAwMDAsCisjZWxzZQorCTB4MDAwMDAwMDAsCisjZW5kaWYKKwkweDAwMDAwMDAwLAorCTB4MDQwMDAwMDAsCisJMHg2Nzk2MTAwMCwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkweDAwMDIwMDA4LAorI2Vsc2UKKwkweDAwMDAwMDA4LAorI2VuZGlmCisJMHgwMDAwMDAwMCwKK307CisKK2NvbnN0IHUzMiBjYXltYW5fcHNbXSA9Cit7CisJMHgwMDAwMDAwNCwKKwkweGEwMGMwMDAwLAorCTB4MDAwMDAwMDgsCisJMHg4MDQwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4OTUwMDA2ODgsCisJMHgwMDAwMDAwMCwKKwkweDg4MDAwMDAwLAorCTB4MDAzODA0MDAsCisJMHgwMDE0NmIxMCwKKwkweDAwMzgwMDAwLAorCTB4MjAxNDZiMTAsCisJMHgwMDM4MDQwMCwKKwkweDQwMTQ2YjAwLAorCTB4ODAzODAwMDAsCisJMHg2MDE0NmIwMCwKKwkweDAwMDAwMDEwLAorCTB4MDAwZDEwMDAsCisJMHhiMDgwMDAwMCwKKwkweDAwMDAwMDAwLAorfTsKKworY29uc3QgdTMyIGNheW1hbl9wc19zaXplID0gQVJSQVlfU0laRShjYXltYW5fcHMpOworY29uc3QgdTMyIGNheW1hbl92c19zaXplID0gQVJSQVlfU0laRShjYXltYW5fdnMpOwogY29uc3QgdTMyIGNheW1hbl9kZWZhdWx0X3NpemUgPSBBUlJBWV9TSVpFKGNheW1hbl9kZWZhdWx0X3N0YXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2F5bWFuX2JsaXRfc2hhZGVycy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9jYXltYW5fYmxpdF9zaGFkZXJzLmgKaW5kZXggMzNiNzVlNWQuLmY1ZDBlOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2F5bWFuX2JsaXRfc2hhZGVycy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2F5bWFuX2JsaXRfc2hhZGVycy5oCkBAIC0yNSw4ICsyNSwxMSBAQAogI2lmbmRlZiBDQVlNQU5fQkxJVF9TSEFERVJTX0gKICNkZWZpbmUgQ0FZTUFOX0JMSVRfU0hBREVSU19ICiAKK2V4dGVybiBjb25zdCB1MzIgY2F5bWFuX3BzW107CitleHRlcm4gY29uc3QgdTMyIGNheW1hbl92c1tdOwogZXh0ZXJuIGNvbnN0IHUzMiBjYXltYW5fZGVmYXVsdF9zdGF0ZVtdOwogCitleHRlcm4gY29uc3QgdTMyIGNheW1hbl9wc19zaXplLCBjYXltYW5fdnNfc2l6ZTsKIGV4dGVybiBjb25zdCB1MzIgY2F5bWFuX2RlZmF1bHRfc2l6ZTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYwppbmRleCA3YzM3NjM4Li45OGVhNTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMKQEAgLTg4LDIxICs4OCwzOSBAQAogLyogZ2V0IHRlbXBlcmF0dXJlIGluIG1pbGxpZGVncmVlcyAqLwogaW50IGV2ZXJncmVlbl9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQl1MzIgdGVtcCA9IChSUkVHMzIoQ0dfTVVMVF9USEVSTUFMX1NUQVRVUykgJiBBU0lDX1RfTUFTSykgPj4KLQkJQVNJQ19UX1NISUZUOwotCXUzMiBhY3R1YWxfdGVtcCA9IDA7CisJdTMyIHRlbXAsIHRvZmZzZXQsIGFjdHVhbF90ZW1wID0gMDsKIAotCWlmICh0ZW1wICYgMHg0MDApCi0JCWFjdHVhbF90ZW1wID0gLTI1NjsKLQllbHNlIGlmICh0ZW1wICYgMHgyMDApCi0JCWFjdHVhbF90ZW1wID0gMjU1OwotCWVsc2UgaWYgKHRlbXAgJiAweDEwMCkgewotCQlhY3R1YWxfdGVtcCA9IHRlbXAgJiAweDFmZjsKLQkJYWN0dWFsX3RlbXAgfD0gfjB4MWZmOwotCX0gZWxzZQotCQlhY3R1YWxfdGVtcCA9IHRlbXAgJiAweGZmOworCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9KVU5JUEVSKSB7CisJCXRvZmZzZXQgPSAoUlJFRzMyKENHX1RIRVJNQUxfQ1RSTCkgJiBUT0ZGU0VUX01BU0spID4+CisJCQlUT0ZGU0VUX1NISUZUOworCQl0ZW1wID0gKFJSRUczMihDR19UUzBfU1RBVFVTKSAmIFRTMF9BRENfRE9VVF9NQVNLKSA+PgorCQkJVFMwX0FEQ19ET1VUX1NISUZUOwogCi0JcmV0dXJuIChhY3R1YWxfdGVtcCAqIDEwMDApIC8gMjsKKwkJaWYgKHRvZmZzZXQgJiAweDEwMCkKKwkJCWFjdHVhbF90ZW1wID0gdGVtcCAvIDIgLSAoMHgyMDAgLSB0b2Zmc2V0KTsKKwkJZWxzZQorCQkJYWN0dWFsX3RlbXAgPSB0ZW1wIC8gMiArIHRvZmZzZXQ7CisKKwkJYWN0dWFsX3RlbXAgPSBhY3R1YWxfdGVtcCAqIDEwMDA7CisKKwl9IGVsc2UgeworCQl0ZW1wID0gKFJSRUczMihDR19NVUxUX1RIRVJNQUxfU1RBVFVTKSAmIEFTSUNfVF9NQVNLKSA+PgorCQkJQVNJQ19UX1NISUZUOworCisJCWlmICh0ZW1wICYgMHg0MDApCisJCQlhY3R1YWxfdGVtcCA9IC0yNTY7CisJCWVsc2UgaWYgKHRlbXAgJiAweDIwMCkKKwkJCWFjdHVhbF90ZW1wID0gMjU1OworCQllbHNlIGlmICh0ZW1wICYgMHgxMDApIHsKKwkJCWFjdHVhbF90ZW1wID0gdGVtcCAmIDB4MWZmOworCQkJYWN0dWFsX3RlbXAgfD0gfjB4MWZmOworCQl9IGVsc2UKKwkJCWFjdHVhbF90ZW1wID0gdGVtcCAmIDB4ZmY7CisKKwkJYWN0dWFsX3RlbXAgPSAoYWN0dWFsX3RlbXAgKiAxMDAwKSAvIDI7CisJfQorCisJcmV0dXJuIGFjdHVhbF90ZW1wOwogfQogCiBpbnQgc3Vtb19nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKQEAgLTE0MTUsNiArMTQzMyw4IEBACiAJY2FzZSBDSElQX0NFREFSOgogCWNhc2UgQ0hJUF9SRURXT09EOgogCWNhc2UgQ0hJUF9QQUxNOgorCWNhc2UgQ0hJUF9TVU1POgorCWNhc2UgQ0hJUF9TVU1PMjoKIAljYXNlIENISVBfVFVSS1M6CiAJY2FzZSBDSElQX0NBSUNPUzoKIAkJZm9yY2Vfbm9fc3dpenpsZSA9IGZhbHNlOwpAQCAtMTU0NCw2ICsxNTY0LDggQEAKIAljYXNlIENISVBfUkVEV09PRDoKIAljYXNlIENISVBfQ0VEQVI6CiAJY2FzZSBDSElQX1BBTE06CisJY2FzZSBDSElQX1NVTU86CisJY2FzZSBDSElQX1NVTU8yOgogCWNhc2UgQ0hJUF9UVVJLUzoKIAljYXNlIENISVBfQ0FJQ09TOgogCWRlZmF1bHQ6CkBAIC0xNjg5LDYgKzE3MTEsNTQgQEAKIAkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19oaXpfdGlsZV9maWZvX3NpemUgPSAweDMwOwogCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNjX2Vhcmx5el90aWxlX2ZpZm9fc2l6ZSA9IDB4MTMwOwogCQlicmVhazsKKwljYXNlIENISVBfU1VNTzoKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5udW1fc2VzID0gMTsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfcGlwZXMgPSA0OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF90aWxlX3BpcGVzID0gMjsKKwkJaWYgKHJkZXYtPnBkZXYtPmRldmljZSA9PSAweDk2NDgpCisJCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9zaW1kcyA9IDM7CisJCWVsc2UgaWYgKChyZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg5NjQ3KSB8fAorCQkJIChyZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg5NjRhKSkKKwkJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3NpbWRzID0gNDsKKwkJZWxzZQorCQkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfc2ltZHMgPSA1OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9iYWNrZW5kcyA9IDIgKiByZGV2LT5jb25maWcuZXZlcmdyZWVuLm51bV9zZXM7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X2dwcnMgPSAyNTY7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3RocmVhZHMgPSAyNDg7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X2dzX3RocmVhZHMgPSAzMjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfc3RhY2tfZW50cmllcyA9IDI1NjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zeF9udW1fb2Zfc2V0cyA9IDQ7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbWF4X2V4cG9ydF9zaXplID0gMjU2OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X21heF9leHBvcnRfcG9zX3NpemUgPSA2NDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zeF9tYXhfZXhwb3J0X3NteF9zaXplID0gMTkyOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9od19jb250ZXh0cyA9IDg7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3FfbnVtX2NmX2luc3RzID0gMjsKKworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNjX3ByaW1fZmlmb19zaXplID0gMHg0MDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19oaXpfdGlsZV9maWZvX3NpemUgPSAweDMwOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNjX2Vhcmx5el90aWxlX2ZpZm9fc2l6ZSA9IDB4MTMwOworCQlicmVhazsKKwljYXNlIENISVBfU1VNTzI6CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubnVtX3NlcyA9IDE7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3BpcGVzID0gNDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfdGlsZV9waXBlcyA9IDQ7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3NpbWRzID0gMjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfYmFja2VuZHMgPSAxICogcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5udW1fc2VzOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9ncHJzID0gMjU2OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF90aHJlYWRzID0gMjQ4OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9nc190aHJlYWRzID0gMzI7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3N0YWNrX2VudHJpZXMgPSA1MTI7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbnVtX29mX3NldHMgPSA0OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X21heF9leHBvcnRfc2l6ZSA9IDI1NjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zeF9tYXhfZXhwb3J0X3Bvc19zaXplID0gNjQ7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSA9IDE5MjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfaHdfY29udGV4dHMgPSA4OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNxX251bV9jZl9pbnN0cyA9IDI7CisKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19wcmltX2ZpZm9fc2l6ZSA9IDB4NDA7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc2NfaGl6X3RpbGVfZmlmb19zaXplID0gMHgzMDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19lYXJseXpfdGlsZV9maWZvX3NpemUgPSAweDEzMDsKKwkJYnJlYWs7CiAJY2FzZSBDSElQX0JBUlRTOgogCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm51bV9zZXMgPSAyOwogCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9waXBlcyA9IDQ7CkBAIC0yMDM5LDYgKzIxMDksOCBAQAogCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CiAJY2FzZSBDSElQX0NFREFSOgogCWNhc2UgQ0hJUF9QQUxNOgorCWNhc2UgQ0hJUF9TVU1POgorCWNhc2UgQ0hJUF9TVU1PMjoKIAljYXNlIENISVBfQ0FJQ09TOgogCQkvKiBubyB2ZXJ0ZXggY2FjaGUgKi8KIAkJc3FfY29uZmlnICY9IH5WQ19FTkFCTEU7CkBAIC0yMDYwLDYgKzIxMzIsOCBAQAogCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CiAJY2FzZSBDSElQX0NFREFSOgogCWNhc2UgQ0hJUF9QQUxNOgorCWNhc2UgQ0hJUF9TVU1POgorCWNhc2UgQ0hJUF9TVU1PMjoKIAkJcHNfdGhyZWFkX2NvdW50ID0gOTY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0yMDk5LDYgKzIxNzMsOCBAQAogCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CiAJY2FzZSBDSElQX0NFREFSOgogCWNhc2UgQ0hJUF9QQUxNOgorCWNhc2UgQ0hJUF9TVU1POgorCWNhc2UgQ0hJUF9TVU1PMjoKIAljYXNlIENISVBfQ0FJQ09TOgogCQl2Z3RfY2FjaGVfaW52YWxpZGF0aW9uID0gQ0FDSEVfSU5WQUxJREFUSU9OKFRDX09OTFkpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX2JsaXRfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X2ttcy5jCmluZGV4IGJhMDZhNjkuLjU3ZjNiYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX2JsaXRfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fYmxpdF9rbXMuYwpAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAiZXZlcmdyZWVuZC5oIgogI2luY2x1ZGUgImV2ZXJncmVlbl9ibGl0X3NoYWRlcnMuaCIKKyNpbmNsdWRlICJjYXltYW5fYmxpdF9zaGFkZXJzLmgiCiAKICNkZWZpbmUgRElfUFRfUkVDVExJU1QgICAgICAgIDB4MTEKICNkZWZpbmUgRElfSU5ERVhfU0laRV8xNl9CSVQgIDB4MApAQCAtMTUyLDYgKzE1Myw4IEBACiAKIAlpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX0NFREFSKSB8fAogCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUEFMTSkgfHwKKwkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1NVTU8pIHx8CisJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9TVU1PMikgfHwKIAkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX0NBSUNPUykpCiAJCWNwX3NldF9zdXJmYWNlX3N5bmMocmRldiwKIAkJCQkgICAgUEFDS0VUM19UQ19BQ1RJT05fRU5BLCA0OCwgZ3B1X2FkZHIpOwpAQCAtMTk5LDYgKzIwMiwxNiBAQAogc2V0X3NjaXNzb3JzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgeDEsIGludCB5MSwKIAkgICAgIGludCB4MiwgaW50IHkyKQogeworCS8qIHdvcmthcm91bmQgc29tZSBodyBidWdzICovCisJaWYgKHgyID09IDApCisJCXgxID0gMTsKKwlpZiAoeTIgPT0gMCkKKwkJeTEgPSAxOworCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9DQVlNQU4pIHsKKwkJaWYgKCh4MiA9PSAxKSAmJiAoeTIgPT0gMSkpCisJCQl4MiA9IDI7CisJfQorCiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05URVhUX1JFRywgMikpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChQQV9TQ19TQ1JFRU5fU0NJU1NPUl9UTCAtIFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHX1NUQVJUKSA+PiAyKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoeDEgPDwgMCkgfCAoeTEgPDwgMTYpKTsKQEAgLTI1NSwyMzggKzI2OCwyODQgQEAKIAl1NjQgZ3B1X2FkZHI7CiAJaW50IGR3b3JkczsKIAotCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7Ci0JY2FzZSBDSElQX0NFREFSOgotCWRlZmF1bHQ6Ci0JCW51bV9wc19ncHJzID0gOTM7Ci0JCW51bV92c19ncHJzID0gNDY7Ci0JCW51bV90ZW1wX2dwcnMgPSA0OwotCQludW1fZ3NfZ3BycyA9IDMxOwotCQludW1fZXNfZ3BycyA9IDMxOwotCQludW1faHNfZ3BycyA9IDIzOwotCQludW1fbHNfZ3BycyA9IDIzOwotCQludW1fcHNfdGhyZWFkcyA9IDk2OwotCQludW1fdnNfdGhyZWFkcyA9IDE2OwotCQludW1fZ3NfdGhyZWFkcyA9IDE2OwotCQludW1fZXNfdGhyZWFkcyA9IDE2OwotCQludW1faHNfdGhyZWFkcyA9IDE2OwotCQludW1fbHNfdGhyZWFkcyA9IDE2OwotCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1faHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQlicmVhazsKLQljYXNlIENISVBfUkVEV09PRDoKLQkJbnVtX3BzX2dwcnMgPSA5MzsKLQkJbnVtX3ZzX2dwcnMgPSA0NjsKLQkJbnVtX3RlbXBfZ3BycyA9IDQ7Ci0JCW51bV9nc19ncHJzID0gMzE7Ci0JCW51bV9lc19ncHJzID0gMzE7Ci0JCW51bV9oc19ncHJzID0gMjM7Ci0JCW51bV9sc19ncHJzID0gMjM7Ci0JCW51bV9wc190aHJlYWRzID0gMTI4OwotCQludW1fdnNfdGhyZWFkcyA9IDIwOwotCQludW1fZ3NfdGhyZWFkcyA9IDIwOwotCQludW1fZXNfdGhyZWFkcyA9IDIwOwotCQludW1faHNfdGhyZWFkcyA9IDIwOwotCQludW1fbHNfdGhyZWFkcyA9IDIwOwotCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1faHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQlicmVhazsKLQljYXNlIENISVBfSlVOSVBFUjoKLQkJbnVtX3BzX2dwcnMgPSA5MzsKLQkJbnVtX3ZzX2dwcnMgPSA0NjsKLQkJbnVtX3RlbXBfZ3BycyA9IDQ7Ci0JCW51bV9nc19ncHJzID0gMzE7Ci0JCW51bV9lc19ncHJzID0gMzE7Ci0JCW51bV9oc19ncHJzID0gMjM7Ci0JCW51bV9sc19ncHJzID0gMjM7Ci0JCW51bV9wc190aHJlYWRzID0gMTI4OwotCQludW1fdnNfdGhyZWFkcyA9IDIwOwotCQludW1fZ3NfdGhyZWFkcyA9IDIwOwotCQludW1fZXNfdGhyZWFkcyA9IDIwOwotCQludW1faHNfdGhyZWFkcyA9IDIwOwotCQludW1fbHNfdGhyZWFkcyA9IDIwOwotCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1faHNfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDg1OwotCQlicmVhazsKLQljYXNlIENISVBfQ1lQUkVTUzoKLQljYXNlIENISVBfSEVNTE9DSzoKLQkJbnVtX3BzX2dwcnMgPSA5MzsKLQkJbnVtX3ZzX2dwcnMgPSA0NjsKLQkJbnVtX3RlbXBfZ3BycyA9IDQ7Ci0JCW51bV9nc19ncHJzID0gMzE7Ci0JCW51bV9lc19ncHJzID0gMzE7Ci0JCW51bV9oc19ncHJzID0gMjM7Ci0JCW51bV9sc19ncHJzID0gMjM7Ci0JCW51bV9wc190aHJlYWRzID0gMTI4OwotCQludW1fdnNfdGhyZWFkcyA9IDIwOwotCQludW1fZ3NfdGhyZWFkcyA9IDIwOwotCQludW1fZXNfdGhyZWFkcyA9IDIwOwotCQludW1faHNfdGhyZWFkcyA9IDIwOwotCQludW1fbHNfdGhyZWFkcyA9IDIwOwotCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1faHNfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDg1OwotCQlicmVhazsKLQljYXNlIENISVBfUEFMTToKLQkJbnVtX3BzX2dwcnMgPSA5MzsKLQkJbnVtX3ZzX2dwcnMgPSA0NjsKLQkJbnVtX3RlbXBfZ3BycyA9IDQ7Ci0JCW51bV9nc19ncHJzID0gMzE7Ci0JCW51bV9lc19ncHJzID0gMzE7Ci0JCW51bV9oc19ncHJzID0gMjM7Ci0JCW51bV9sc19ncHJzID0gMjM7Ci0JCW51bV9wc190aHJlYWRzID0gOTY7Ci0JCW51bV92c190aHJlYWRzID0gMTY7Ci0JCW51bV9nc190aHJlYWRzID0gMTY7Ci0JCW51bV9lc190aHJlYWRzID0gMTY7Ci0JCW51bV9oc190aHJlYWRzID0gMTY7Ci0JCW51bV9sc190aHJlYWRzID0gMTY7Ci0JCW51bV9wc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV92c19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV9nc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV9lc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV9oc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV9sc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCWJyZWFrOwotCWNhc2UgQ0hJUF9CQVJUUzoKLQkJbnVtX3BzX2dwcnMgPSA5MzsKLQkJbnVtX3ZzX2dwcnMgPSA0NjsKLQkJbnVtX3RlbXBfZ3BycyA9IDQ7Ci0JCW51bV9nc19ncHJzID0gMzE7Ci0JCW51bV9lc19ncHJzID0gMzE7Ci0JCW51bV9oc19ncHJzID0gMjM7Ci0JCW51bV9sc19ncHJzID0gMjM7Ci0JCW51bV9wc190aHJlYWRzID0gMTI4OwotCQludW1fdnNfdGhyZWFkcyA9IDIwOwotCQludW1fZ3NfdGhyZWFkcyA9IDIwOwotCQludW1fZXNfdGhyZWFkcyA9IDIwOwotCQludW1faHNfdGhyZWFkcyA9IDIwOwotCQludW1fbHNfdGhyZWFkcyA9IDIwOwotCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1faHNfc3RhY2tfZW50cmllcyA9IDg1OwotCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDg1OwotCQlicmVhazsKLQljYXNlIENISVBfVFVSS1M6Ci0JCW51bV9wc19ncHJzID0gOTM7Ci0JCW51bV92c19ncHJzID0gNDY7Ci0JCW51bV90ZW1wX2dwcnMgPSA0OwotCQludW1fZ3NfZ3BycyA9IDMxOwotCQludW1fZXNfZ3BycyA9IDMxOwotCQludW1faHNfZ3BycyA9IDIzOwotCQludW1fbHNfZ3BycyA9IDIzOwotCQludW1fcHNfdGhyZWFkcyA9IDEyODsKLQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2dzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2VzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2xzX3RocmVhZHMgPSAyMDsKLQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJYnJlYWs7Ci0JY2FzZSBDSElQX0NBSUNPUzoKLQkJbnVtX3BzX2dwcnMgPSA5MzsKLQkJbnVtX3ZzX2dwcnMgPSA0NjsKLQkJbnVtX3RlbXBfZ3BycyA9IDQ7Ci0JCW51bV9nc19ncHJzID0gMzE7Ci0JCW51bV9lc19ncHJzID0gMzE7Ci0JCW51bV9oc19ncHJzID0gMjM7Ci0JCW51bV9sc19ncHJzID0gMjM7Ci0JCW51bV9wc190aHJlYWRzID0gMTI4OwotCQludW1fdnNfdGhyZWFkcyA9IDEwOwotCQludW1fZ3NfdGhyZWFkcyA9IDEwOwotCQludW1fZXNfdGhyZWFkcyA9IDEwOwotCQludW1faHNfdGhyZWFkcyA9IDEwOwotCQludW1fbHNfdGhyZWFkcyA9IDEwOwotCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1faHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQlicmVhazsKLQl9Ci0KLQlpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX0NFREFSKSB8fAotCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUEFMTSkgfHwKLQkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX0NBSUNPUykpCi0JCXNxX2NvbmZpZyA9IDA7Ci0JZWxzZQotCQlzcV9jb25maWcgPSBWQ19FTkFCTEU7Ci0KLQlzcV9jb25maWcgfD0gKEVYUE9SVF9TUkNfQyB8Ci0JCSAgICAgIENTX1BSSU8oMCkgfAotCQkgICAgICBMU19QUklPKDApIHwKLQkJICAgICAgSFNfUFJJTygwKSB8Ci0JCSAgICAgIFBTX1BSSU8oMCkgfAotCQkgICAgICBWU19QUklPKDEpIHwKLQkJICAgICAgR1NfUFJJTygyKSB8Ci0JCSAgICAgIEVTX1BSSU8oMykpOwotCi0Jc3FfZ3ByX3Jlc291cmNlX21nbXRfMSA9IChOVU1fUFNfR1BSUyhudW1fcHNfZ3BycykgfAotCQkJCSAgTlVNX1ZTX0dQUlMobnVtX3ZzX2dwcnMpIHwKLQkJCQkgIE5VTV9DTEFVU0VfVEVNUF9HUFJTKG51bV90ZW1wX2dwcnMpKTsKLQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8yID0gKE5VTV9HU19HUFJTKG51bV9nc19ncHJzKSB8Ci0JCQkJICBOVU1fRVNfR1BSUyhudW1fZXNfZ3BycykpOwotCXNxX2dwcl9yZXNvdXJjZV9tZ210XzMgPSAoTlVNX0hTX0dQUlMobnVtX2hzX2dwcnMpIHwKLQkJCQkgIE5VTV9MU19HUFJTKG51bV9sc19ncHJzKSk7Ci0Jc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgPSAoTlVNX1BTX1RIUkVBRFMobnVtX3BzX3RocmVhZHMpIHwKLQkJCQkgICBOVU1fVlNfVEhSRUFEUyhudW1fdnNfdGhyZWFkcykgfAotCQkJCSAgIE5VTV9HU19USFJFQURTKG51bV9nc190aHJlYWRzKSB8Ci0JCQkJICAgTlVNX0VTX1RIUkVBRFMobnVtX2VzX3RocmVhZHMpKTsKLQlzcV90aHJlYWRfcmVzb3VyY2VfbWdtdF8yID0gKE5VTV9IU19USFJFQURTKG51bV9oc190aHJlYWRzKSB8Ci0JCQkJICAgICBOVU1fTFNfVEhSRUFEUyhudW1fbHNfdGhyZWFkcykpOwotCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSA9IChOVU1fUFNfU1RBQ0tfRU5UUklFUyhudW1fcHNfc3RhY2tfZW50cmllcykgfAotCQkJCSAgICBOVU1fVlNfU1RBQ0tfRU5UUklFUyhudW1fdnNfc3RhY2tfZW50cmllcykpOwotCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMiA9IChOVU1fR1NfU1RBQ0tfRU5UUklFUyhudW1fZ3Nfc3RhY2tfZW50cmllcykgfAotCQkJCSAgICBOVU1fRVNfU1RBQ0tfRU5UUklFUyhudW1fZXNfc3RhY2tfZW50cmllcykpOwotCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMyA9IChOVU1fSFNfU1RBQ0tfRU5UUklFUyhudW1faHNfc3RhY2tfZW50cmllcykgfAotCQkJCSAgICBOVU1fTFNfU1RBQ0tfRU5UUklFUyhudW1fbHNfc3RhY2tfZW50cmllcykpOwotCiAJLyogc2V0IGNsZWFyIGNvbnRleHQgc3RhdGUgKi8KIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfQ0xFQVJfU1RBVEUsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKIAotCS8qIGRpc2FibGUgZHluIGdwcnMgKi8KLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTkZJR19SRUcsIDEpKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoU1FfRFlOX0dQUl9DTlRMX1BTX0ZMVVNIX1JFUSAtIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfU1RBUlQpID4+IDIpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDApOworCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX0NBWU1BTikgeworCQlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgeworCQljYXNlIENISVBfQ0VEQVI6CisJCWRlZmF1bHQ6CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gOTY7CisJCQludW1fdnNfdGhyZWFkcyA9IDE2OworCQkJbnVtX2dzX3RocmVhZHMgPSAxNjsKKwkJCW51bV9lc190aHJlYWRzID0gMTY7CisJCQludW1faHNfdGhyZWFkcyA9IDE2OworCQkJbnVtX2xzX3RocmVhZHMgPSAxNjsKKwkJCW51bV9wc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9lc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1faHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCWJyZWFrOworCQljYXNlIENISVBfUkVEV09PRDoKKwkJCW51bV9wc19ncHJzID0gOTM7CisJCQludW1fdnNfZ3BycyA9IDQ2OworCQkJbnVtX3RlbXBfZ3BycyA9IDQ7CisJCQludW1fZ3NfZ3BycyA9IDMxOworCQkJbnVtX2VzX2dwcnMgPSAzMTsKKwkJCW51bV9oc19ncHJzID0gMjM7CisJCQludW1fbHNfZ3BycyA9IDIzOworCQkJbnVtX3BzX3RocmVhZHMgPSAxMjg7CisJCQludW1fdnNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2dzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9lc190aHJlYWRzID0gMjA7CisJCQludW1faHNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2xzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9wc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9lc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1faHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCWJyZWFrOworCQljYXNlIENISVBfSlVOSVBFUjoKKwkJCW51bV9wc19ncHJzID0gOTM7CisJCQludW1fdnNfZ3BycyA9IDQ2OworCQkJbnVtX3RlbXBfZ3BycyA9IDQ7CisJCQludW1fZ3NfZ3BycyA9IDMxOworCQkJbnVtX2VzX2dwcnMgPSAzMTsKKwkJCW51bV9oc19ncHJzID0gMjM7CisJCQludW1fbHNfZ3BycyA9IDIzOworCQkJbnVtX3BzX3RocmVhZHMgPSAxMjg7CisJCQludW1fdnNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2dzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9lc190aHJlYWRzID0gMjA7CisJCQludW1faHNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2xzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9wc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9lc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1faHNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCWJyZWFrOworCQljYXNlIENISVBfQ1lQUkVTUzoKKwkJY2FzZSBDSElQX0hFTUxPQ0s6CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gMTI4OworCQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9nc190aHJlYWRzID0gMjA7CisJCQludW1fZXNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9sc190aHJlYWRzID0gMjA7CisJCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9nc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9sc19zdGFja19lbnRyaWVzID0gODU7CisJCQlicmVhazsKKwkJY2FzZSBDSElQX1BBTE06CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gOTY7CisJCQludW1fdnNfdGhyZWFkcyA9IDE2OworCQkJbnVtX2dzX3RocmVhZHMgPSAxNjsKKwkJCW51bV9lc190aHJlYWRzID0gMTY7CisJCQludW1faHNfdGhyZWFkcyA9IDE2OworCQkJbnVtX2xzX3RocmVhZHMgPSAxNjsKKwkJCW51bV9wc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9lc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1faHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCWJyZWFrOworCQljYXNlIENISVBfU1VNTzoKKwkJCW51bV9wc19ncHJzID0gOTM7CisJCQludW1fdnNfZ3BycyA9IDQ2OworCQkJbnVtX3RlbXBfZ3BycyA9IDQ7CisJCQludW1fZ3NfZ3BycyA9IDMxOworCQkJbnVtX2VzX2dwcnMgPSAzMTsKKwkJCW51bV9oc19ncHJzID0gMjM7CisJCQludW1fbHNfZ3BycyA9IDIzOworCQkJbnVtX3BzX3RocmVhZHMgPSA5NjsKKwkJCW51bV92c190aHJlYWRzID0gMjU7CisJCQludW1fZ3NfdGhyZWFkcyA9IDI1OworCQkJbnVtX2VzX3RocmVhZHMgPSAyNTsKKwkJCW51bV9oc190aHJlYWRzID0gMjU7CisJCQludW1fbHNfdGhyZWFkcyA9IDI1OworCQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV92c19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9oc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJYnJlYWs7CisJCWNhc2UgQ0hJUF9TVU1PMjoKKwkJCW51bV9wc19ncHJzID0gOTM7CisJCQludW1fdnNfZ3BycyA9IDQ2OworCQkJbnVtX3RlbXBfZ3BycyA9IDQ7CisJCQludW1fZ3NfZ3BycyA9IDMxOworCQkJbnVtX2VzX2dwcnMgPSAzMTsKKwkJCW51bV9oc19ncHJzID0gMjM7CisJCQludW1fbHNfZ3BycyA9IDIzOworCQkJbnVtX3BzX3RocmVhZHMgPSA5NjsKKwkJCW51bV92c190aHJlYWRzID0gMjU7CisJCQludW1fZ3NfdGhyZWFkcyA9IDI1OworCQkJbnVtX2VzX3RocmVhZHMgPSAyNTsKKwkJCW51bV9oc190aHJlYWRzID0gMjU7CisJCQludW1fbHNfdGhyZWFkcyA9IDI1OworCQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV92c19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9oc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJYnJlYWs7CisJCWNhc2UgQ0hJUF9CQVJUUzoKKwkJCW51bV9wc19ncHJzID0gOTM7CisJCQludW1fdnNfZ3BycyA9IDQ2OworCQkJbnVtX3RlbXBfZ3BycyA9IDQ7CisJCQludW1fZ3NfZ3BycyA9IDMxOworCQkJbnVtX2VzX2dwcnMgPSAzMTsKKwkJCW51bV9oc19ncHJzID0gMjM7CisJCQludW1fbHNfZ3BycyA9IDIzOworCQkJbnVtX3BzX3RocmVhZHMgPSAxMjg7CisJCQludW1fdnNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2dzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9lc190aHJlYWRzID0gMjA7CisJCQludW1faHNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2xzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9wc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9lc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1faHNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCWJyZWFrOworCQljYXNlIENISVBfVFVSS1M6CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gMTI4OworCQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9nc190aHJlYWRzID0gMjA7CisJCQludW1fZXNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9sc190aHJlYWRzID0gMjA7CisJCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9nc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9sc19zdGFja19lbnRyaWVzID0gNDI7CisJCQlicmVhazsKKwkJY2FzZSBDSElQX0NBSUNPUzoKKwkJCW51bV9wc19ncHJzID0gOTM7CisJCQludW1fdnNfZ3BycyA9IDQ2OworCQkJbnVtX3RlbXBfZ3BycyA9IDQ7CisJCQludW1fZ3NfZ3BycyA9IDMxOworCQkJbnVtX2VzX2dwcnMgPSAzMTsKKwkJCW51bV9oc19ncHJzID0gMjM7CisJCQludW1fbHNfZ3BycyA9IDIzOworCQkJbnVtX3BzX3RocmVhZHMgPSAxMjg7CisJCQludW1fdnNfdGhyZWFkcyA9IDEwOworCQkJbnVtX2dzX3RocmVhZHMgPSAxMDsKKwkJCW51bV9lc190aHJlYWRzID0gMTA7CisJCQludW1faHNfdGhyZWFkcyA9IDEwOworCQkJbnVtX2xzX3RocmVhZHMgPSAxMDsKKwkJCW51bV9wc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9lc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1faHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCWJyZWFrOworCQl9CiAKLQkvKiBTUSBjb25maWcgKi8KLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTkZJR19SRUcsIDExKSk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKFNRX0NPTkZJRyAtIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfU1RBUlQpID4+IDIpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX2NvbmZpZyk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3FfZ3ByX3Jlc291cmNlX21nbXRfMSk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3FfZ3ByX3Jlc291cmNlX21nbXRfMik7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3FfZ3ByX3Jlc291cmNlX21nbXRfMyk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3FfdGhyZWFkX3Jlc291cmNlX21nbXQpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3RocmVhZF9yZXNvdXJjZV9tZ210XzIpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV9zdGFja19yZXNvdXJjZV9tZ210XzMpOworCQlpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX0NFREFSKSB8fAorCQkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1BBTE0pIHx8CisJCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfU1VNTykgfHwKKwkJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9TVU1PMikgfHwKKwkJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9DQUlDT1MpKQorCQkJc3FfY29uZmlnID0gMDsKKwkJZWxzZQorCQkJc3FfY29uZmlnID0gVkNfRU5BQkxFOworCisJCXNxX2NvbmZpZyB8PSAoRVhQT1JUX1NSQ19DIHwKKwkJCSAgICAgIENTX1BSSU8oMCkgfAorCQkJICAgICAgTFNfUFJJTygwKSB8CisJCQkgICAgICBIU19QUklPKDApIHwKKwkJCSAgICAgIFBTX1BSSU8oMCkgfAorCQkJICAgICAgVlNfUFJJTygxKSB8CisJCQkgICAgICBHU19QUklPKDIpIHwKKwkJCSAgICAgIEVTX1BSSU8oMykpOworCisJCXNxX2dwcl9yZXNvdXJjZV9tZ210XzEgPSAoTlVNX1BTX0dQUlMobnVtX3BzX2dwcnMpIHwKKwkJCQkJICBOVU1fVlNfR1BSUyhudW1fdnNfZ3BycykgfAorCQkJCQkgIE5VTV9DTEFVU0VfVEVNUF9HUFJTKG51bV90ZW1wX2dwcnMpKTsKKwkJc3FfZ3ByX3Jlc291cmNlX21nbXRfMiA9IChOVU1fR1NfR1BSUyhudW1fZ3NfZ3BycykgfAorCQkJCQkgIE5VTV9FU19HUFJTKG51bV9lc19ncHJzKSk7CisJCXNxX2dwcl9yZXNvdXJjZV9tZ210XzMgPSAoTlVNX0hTX0dQUlMobnVtX2hzX2dwcnMpIHwKKwkJCQkJICBOVU1fTFNfR1BSUyhudW1fbHNfZ3BycykpOworCQlzcV90aHJlYWRfcmVzb3VyY2VfbWdtdCA9IChOVU1fUFNfVEhSRUFEUyhudW1fcHNfdGhyZWFkcykgfAorCQkJCQkgICBOVU1fVlNfVEhSRUFEUyhudW1fdnNfdGhyZWFkcykgfAorCQkJCQkgICBOVU1fR1NfVEhSRUFEUyhudW1fZ3NfdGhyZWFkcykgfAorCQkJCQkgICBOVU1fRVNfVEhSRUFEUyhudW1fZXNfdGhyZWFkcykpOworCQlzcV90aHJlYWRfcmVzb3VyY2VfbWdtdF8yID0gKE5VTV9IU19USFJFQURTKG51bV9oc190aHJlYWRzKSB8CisJCQkJCSAgICAgTlVNX0xTX1RIUkVBRFMobnVtX2xzX3RocmVhZHMpKTsKKwkJc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8xID0gKE5VTV9QU19TVEFDS19FTlRSSUVTKG51bV9wc19zdGFja19lbnRyaWVzKSB8CisJCQkJCSAgICBOVU1fVlNfU1RBQ0tfRU5UUklFUyhudW1fdnNfc3RhY2tfZW50cmllcykpOworCQlzcV9zdGFja19yZXNvdXJjZV9tZ210XzIgPSAoTlVNX0dTX1NUQUNLX0VOVFJJRVMobnVtX2dzX3N0YWNrX2VudHJpZXMpIHwKKwkJCQkJICAgIE5VTV9FU19TVEFDS19FTlRSSUVTKG51bV9lc19zdGFja19lbnRyaWVzKSk7CisJCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMyA9IChOVU1fSFNfU1RBQ0tfRU5UUklFUyhudW1faHNfc3RhY2tfZW50cmllcykgfAorCQkJCQkgICAgTlVNX0xTX1NUQUNLX0VOVFJJRVMobnVtX2xzX3N0YWNrX2VudHJpZXMpKTsKKworCQkvKiBkaXNhYmxlIGR5biBncHJzICovCisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09ORklHX1JFRywgMSkpOworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoU1FfRFlOX0dQUl9DTlRMX1BTX0ZMVVNIX1JFUSAtIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfU1RBUlQpID4+IDIpOworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKKworCQkvKiBTUSBjb25maWcgKi8KKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05GSUdfUkVHLCAxMSkpOworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoU1FfQ09ORklHIC0gUEFDS0VUM19TRVRfQ09ORklHX1JFR19TVEFSVCkgPj4gMik7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX2NvbmZpZyk7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX2dwcl9yZXNvdXJjZV9tZ210XzEpOworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV9ncHJfcmVzb3VyY2VfbWdtdF8yKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3FfZ3ByX3Jlc291cmNlX21nbXRfMyk7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDApOworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3FfdGhyZWFkX3Jlc291cmNlX21nbXQpOworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV90aHJlYWRfcmVzb3VyY2VfbWdtdF8yKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8xKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8zKTsKKwl9CiAKIAkvKiBDT05URVhUX0NPTlRST0wgKi8KIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweGMwMDEyODAwKTsKQEAgLTU2MCw3ICs2MTksMTAgQEAKIAltdXRleF9pbml0KCZyZGV2LT5yNjAwX2JsaXQubXV0ZXgpOwogCXJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9vZmZzZXQgPSAwOwogCi0JcmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiA9IGV2ZXJncmVlbl9kZWZhdWx0X3NpemU7CisJaWYgKHJkZXYtPmZhbWlseSA8IENISVBfQ0FZTUFOKQorCQlyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuID0gZXZlcmdyZWVuX2RlZmF1bHRfc2l6ZTsKKwllbHNlCisJCXJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gPSBjYXltYW5fZGVmYXVsdF9zaXplOwogCiAJZHdvcmRzID0gcmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbjsKIAl3aGlsZSAoZHdvcmRzICYgMHhmKSB7CkBAIC01NzIsMTEgKzYzNCwxNyBAQAogCW9ial9zaXplID0gQUxJR04ob2JqX3NpemUsIDI1Nik7CiAKIAlyZGV2LT5yNjAwX2JsaXQudnNfb2Zmc2V0ID0gb2JqX3NpemU7Ci0Jb2JqX3NpemUgKz0gZXZlcmdyZWVuX3ZzX3NpemUgKiA0OworCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX0NBWU1BTikKKwkJb2JqX3NpemUgKz0gZXZlcmdyZWVuX3ZzX3NpemUgKiA0OworCWVsc2UKKwkJb2JqX3NpemUgKz0gY2F5bWFuX3ZzX3NpemUgKiA0OwogCW9ial9zaXplID0gQUxJR04ob2JqX3NpemUsIDI1Nik7CiAKIAlyZGV2LT5yNjAwX2JsaXQucHNfb2Zmc2V0ID0gb2JqX3NpemU7Ci0Jb2JqX3NpemUgKz0gZXZlcmdyZWVuX3BzX3NpemUgKiA0OworCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX0NBWU1BTikKKwkJb2JqX3NpemUgKz0gZXZlcmdyZWVuX3BzX3NpemUgKiA0OworCWVsc2UKKwkJb2JqX3NpemUgKz0gY2F5bWFuX3BzX3NpemUgKiA0OwogCW9ial9zaXplID0gQUxJR04ob2JqX3NpemUsIDI1Nik7CiAKIAlyID0gcmFkZW9uX2JvX2NyZWF0ZShyZGV2LCBvYmpfc2l6ZSwgUEFHRV9TSVpFLCB0cnVlLCBSQURFT05fR0VNX0RPTUFJTl9WUkFNLApAQCAtNTk5LDE2ICs2NjcsMjkgQEAKIAkJcmV0dXJuIHI7CiAJfQogCi0JbWVtY3B5X3RvaW8ocHRyICsgcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldCwKLQkJICAgIGV2ZXJncmVlbl9kZWZhdWx0X3N0YXRlLCByZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuICogNCk7CisJaWYgKHJkZXYtPmZhbWlseSA8IENISVBfQ0FZTUFOKSB7CisJCW1lbWNweV90b2lvKHB0ciArIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9vZmZzZXQsCisJCQkgICAgZXZlcmdyZWVuX2RlZmF1bHRfc3RhdGUsIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gKiA0KTsKIAotCWlmIChudW1fcGFja2V0MnMpCi0JCW1lbWNweV90b2lvKHB0ciArIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9vZmZzZXQgKyAocmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiAqIDQpLAotCQkJICAgIHBhY2tldDJzLCBudW1fcGFja2V0MnMgKiA0KTsKLQlmb3IgKGkgPSAwOyBpIDwgZXZlcmdyZWVuX3ZzX3NpemU7IGkrKykKLQkJKih1MzIgKikoKHVuc2lnbmVkIGxvbmcpcHRyICsgcmRldi0+cjYwMF9ibGl0LnZzX29mZnNldCArIGkgKiA0KSA9IGNwdV90b19sZTMyKGV2ZXJncmVlbl92c1tpXSk7Ci0JZm9yIChpID0gMDsgaSA8IGV2ZXJncmVlbl9wc19zaXplOyBpKyspCi0JCSoodTMyICopKCh1bnNpZ25lZCBsb25nKXB0ciArIHJkZXYtPnI2MDBfYmxpdC5wc19vZmZzZXQgKyBpICogNCkgPSBjcHVfdG9fbGUzMihldmVyZ3JlZW5fcHNbaV0pOworCQlpZiAobnVtX3BhY2tldDJzKQorCQkJbWVtY3B5X3RvaW8ocHRyICsgcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldCArIChyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuICogNCksCisJCQkJICAgIHBhY2tldDJzLCBudW1fcGFja2V0MnMgKiA0KTsKKwkJZm9yIChpID0gMDsgaSA8IGV2ZXJncmVlbl92c19zaXplOyBpKyspCisJCQkqKHUzMiAqKSgodW5zaWduZWQgbG9uZylwdHIgKyByZGV2LT5yNjAwX2JsaXQudnNfb2Zmc2V0ICsgaSAqIDQpID0gY3B1X3RvX2xlMzIoZXZlcmdyZWVuX3ZzW2ldKTsKKwkJZm9yIChpID0gMDsgaSA8IGV2ZXJncmVlbl9wc19zaXplOyBpKyspCisJCQkqKHUzMiAqKSgodW5zaWduZWQgbG9uZylwdHIgKyByZGV2LT5yNjAwX2JsaXQucHNfb2Zmc2V0ICsgaSAqIDQpID0gY3B1X3RvX2xlMzIoZXZlcmdyZWVuX3BzW2ldKTsKKwl9IGVsc2UgeworCQltZW1jcHlfdG9pbyhwdHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0LAorCQkJICAgIGNheW1hbl9kZWZhdWx0X3N0YXRlLCByZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuICogNCk7CisKKwkJaWYgKG51bV9wYWNrZXQycykKKwkJCW1lbWNweV90b2lvKHB0ciArIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9vZmZzZXQgKyAocmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiAqIDQpLAorCQkJCSAgICBwYWNrZXQycywgbnVtX3BhY2tldDJzICogNCk7CisJCWZvciAoaSA9IDA7IGkgPCBjYXltYW5fdnNfc2l6ZTsgaSsrKQorCQkJKih1MzIgKikoKHVuc2lnbmVkIGxvbmcpcHRyICsgcmRldi0+cjYwMF9ibGl0LnZzX29mZnNldCArIGkgKiA0KSA9IGNwdV90b19sZTMyKGNheW1hbl92c1tpXSk7CisJCWZvciAoaSA9IDA7IGkgPCBjYXltYW5fcHNfc2l6ZTsgaSsrKQorCQkJKih1MzIgKikoKHVuc2lnbmVkIGxvbmcpcHRyICsgcmRldi0+cjYwMF9ibGl0LnBzX29mZnNldCArIGkgKiA0KSA9IGNwdV90b19sZTMyKGNheW1hbl9wc1tpXSk7CisJfQogCXJhZGVvbl9ib19rdW5tYXAocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopOwogCXJhZGVvbl9ib191bnJlc2VydmUocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbmQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oCmluZGV4IGYzN2U5MWUuLjE2MzZlMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oCkBAIC0xNjgsMTAgKzE2OCwxNiBAQAogI2RlZmluZQkJU0VfREJfQlVTWQkJCQkJKDEgPDwgMzApCiAjZGVmaW5lCQlTRV9DQl9CVVNZCQkJCQkoMSA8PCAzMSkKIC8qIGV2ZXJncmVlbiAqLworI2RlZmluZQlDR19USEVSTUFMX0NUUkwJCQkJCTB4NzJjCisjZGVmaW5lCQlUT0ZGU0VUX01BU0sJCQkgICAgICAgIDB4MDAwMDNGRTAKKyNkZWZpbmUJCVRPRkZTRVRfU0hJRlQJCQkgICAgICAgIDUKICNkZWZpbmUJQ0dfTVVMVF9USEVSTUFMX1NUQVRVUwkJCQkweDc0MAogI2RlZmluZQkJQVNJQ19UKHgpCQkJICAgICAgICAoKHgpIDw8IDE2KQotI2RlZmluZQkJQVNJQ19UX01BU0sJCQkgICAgICAgIDB4N0ZGMDAwMAorI2RlZmluZQkJQVNJQ19UX01BU0sJCQkgICAgICAgIDB4MDdGRjAwMDAKICNkZWZpbmUJCUFTSUNfVF9TSElGVAkJCSAgICAgICAgMTYKKyNkZWZpbmUJQ0dfVFMwX1NUQVRVUwkJCQkJMHg3NjAKKyNkZWZpbmUJCVRTMF9BRENfRE9VVF9NQVNLCQkJMHgwMDAwMDNGRgorI2RlZmluZQkJVFMwX0FEQ19ET1VUX1NISUZUCQkJMAogLyogQVBVICovCiAjZGVmaW5lCUNHX1RIRVJNQUxfU1RBVFVTCQkJICAgICAgICAweDY3OAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pLmMKaW5kZXggYjIwNWJhMS4uMTZjYWFmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbmkuYwpAQCAtMTM4NywxNCArMTM4NywxMiBAQAogCQlyZXR1cm4gcjsKIAljYXltYW5fZ3B1X2luaXQocmRldik7CiAKLSNpZiAwCi0JciA9IGNheW1hbl9ibGl0X2luaXQocmRldik7CisJciA9IGV2ZXJncmVlbl9ibGl0X2luaXQocmRldik7CiAJaWYgKHIpIHsKLQkJY2F5bWFuX2JsaXRfZmluaShyZGV2KTsKKwkJZXZlcmdyZWVuX2JsaXRfZmluaShyZGV2KTsKIAkJcmRldi0+YXNpYy0+Y29weSA9IE5VTEw7CiAJCWRldl93YXJuKHJkZXYtPmRldiwgImZhaWxlZCBibGl0dGVyICglZCkgZmFsbGluZyBiYWNrIHRvIG1lbWNweVxuIiwgcik7CiAJfQotI2VuZGlmCiAKIAkvKiBhbGxvY2F0ZSB3YiBidWZmZXIgKi8KIAlyID0gcmFkZW9uX3diX2luaXQocmRldik7CkBAIC0xNDUyLDcgKzE0NTAsNyBAQAogCiBpbnQgY2F5bWFuX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JLyogaW50IHI7ICovCisJaW50IHI7CiAKIAkvKiBGSVhNRTogd2Ugc2hvdWxkIHdhaXQgZm9yIHJpbmcgdG8gYmUgZW1wdHkgKi8KIAljYXltYW5fY3BfZW5hYmxlKHJkZXYsIGZhbHNlKTsKQEAgLTE0NjEsMTQgKzE0NTksMTMgQEAKIAlyYWRlb25fd2JfZGlzYWJsZShyZGV2KTsKIAljYXltYW5fcGNpZV9nYXJ0X2Rpc2FibGUocmRldik7CiAKLSNpZiAwCiAJLyogdW5waW4gc2hhZGVycyBibyAqLwogCXIgPSByYWRlb25fYm9fcmVzZXJ2ZShyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgZmFsc2UpOwogCWlmIChsaWtlbHkociA9PSAwKSkgewogCQlyYWRlb25fYm9fdW5waW4ocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopOwogCQlyYWRlb25fYm9fdW5yZXNlcnZlKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIAl9Ci0jZW5kaWYKKwogCXJldHVybiAwOwogfQogCkBAIC0xNTgwLDcgKzE1NzcsNyBAQAogCiB2b2lkIGNheW1hbl9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCS8qIGNheW1hbl9ibGl0X2ZpbmkocmRldik7ICovCisJZXZlcmdyZWVuX2JsaXRfZmluaShyZGV2KTsKIAljYXltYW5fY3BfZmluaShyZGV2KTsKIAlyNjAwX2lycV9maW5pKHJkZXYpOwogCXJhZGVvbl93Yl9maW5pKHJkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwppbmRleCA2ZjI3NTkzLi5kNzRkNGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwpAQCAtODcsNiArODcsMTAgQEAKIE1PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1BBTE1fcGZwLmJpbiIpOwogTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vUEFMTV9tZS5iaW4iKTsKIE1PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1NVTU9fcmxjLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vU1VNT19wZnAuYmluIik7CitNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9TVU1PX21lLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vU1VNTzJfcGZwLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vU1VNTzJfbWUuYmluIik7CiAKIGludCByNjAwX2RlYnVnZnNfbWNfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIApAQCAtMjAyNCw2ICsyMDI4LDE0IEBACiAJCWNoaXBfbmFtZSA9ICJQQUxNIjsKIAkJcmxjX2NoaXBfbmFtZSA9ICJTVU1PIjsKIAkJYnJlYWs7CisJY2FzZSBDSElQX1NVTU86CisJCWNoaXBfbmFtZSA9ICJTVU1PIjsKKwkJcmxjX2NoaXBfbmFtZSA9ICJTVU1PIjsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1NVTU8yOgorCQljaGlwX25hbWUgPSAiU1VNTzIiOworCQlybGNfY2hpcF9uYW1lID0gIlNVTU8iOworCQlicmVhazsKIAlkZWZhdWx0OiBCVUcoKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMKaW5kZXggZmQxOGJlOS4uOTA5YmRhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMKQEAgLTcxLDIwICs3MSwyMSBAQAogCXU2NAkJCWRiX2JvX21jOwogfTsKIAotI2RlZmluZSBGTVRfOF9CSVQoZm10LCB2YykgW2ZtdF0gPSB7IDEsIDEsIDEsIHZjIH0KLSNkZWZpbmUgRk1UXzE2X0JJVChmbXQsIHZjKSBbZm10XSA9IHsgMSwgMSwgMiwgdmMgfQotI2RlZmluZSBGTVRfMjRfQklUKGZtdCkgW2ZtdF0gPSB7IDEsIDEsIDMsIDAgfQotI2RlZmluZSBGTVRfMzJfQklUKGZtdCwgdmMpIFtmbXRdID0geyAxLCAxLCA0LCB2YyB9Ci0jZGVmaW5lIEZNVF80OF9CSVQoZm10KSBbZm10XSA9IHsgMSwgMSwgNiwgMCB9Ci0jZGVmaW5lIEZNVF82NF9CSVQoZm10LCB2YykgW2ZtdF0gPSB7IDEsIDEsIDgsIHZjIH0KLSNkZWZpbmUgRk1UXzk2X0JJVChmbXQpIFtmbXRdID0geyAxLCAxLCAxMiwgMCB9Ci0jZGVmaW5lIEZNVF8xMjhfQklUKGZtdCwgdmMpIFtmbXRdID0geyAxLCAxLCAxNiwgdmMgfQorI2RlZmluZSBGTVRfOF9CSVQoZm10LCB2YykgICBbZm10XSA9IHsgMSwgMSwgMSwgdmMsIENISVBfUjYwMCB9CisjZGVmaW5lIEZNVF8xNl9CSVQoZm10LCB2YykgIFtmbXRdID0geyAxLCAxLCAyLCB2YywgQ0hJUF9SNjAwIH0KKyNkZWZpbmUgRk1UXzI0X0JJVChmbXQpICAgICAgW2ZtdF0gPSB7IDEsIDEsIDMsICAwLCBDSElQX1I2MDAgfQorI2RlZmluZSBGTVRfMzJfQklUKGZtdCwgdmMpICBbZm10XSA9IHsgMSwgMSwgNCwgdmMsIENISVBfUjYwMCB9CisjZGVmaW5lIEZNVF80OF9CSVQoZm10KSAgICAgIFtmbXRdID0geyAxLCAxLCA2LCAgMCwgQ0hJUF9SNjAwIH0KKyNkZWZpbmUgRk1UXzY0X0JJVChmbXQsIHZjKSAgW2ZtdF0gPSB7IDEsIDEsIDgsIHZjLCBDSElQX1I2MDAgfQorI2RlZmluZSBGTVRfOTZfQklUKGZtdCkgICAgICBbZm10XSA9IHsgMSwgMSwgMTIsIDAsIENISVBfUjYwMCB9CisjZGVmaW5lIEZNVF8xMjhfQklUKGZtdCwgdmMpIFtmbXRdID0geyAxLCAxLCAxNix2YywgQ0hJUF9SNjAwIH0KIAogc3RydWN0IGdwdV9mb3JtYXRzIHsKIAl1bnNpZ25lZCBibG9ja3dpZHRoOwogCXVuc2lnbmVkIGJsb2NraGVpZ2h0OwogCXVuc2lnbmVkIGJsb2Nrc2l6ZTsKIAl1bnNpZ25lZCB2YWxpZF9jb2xvcjsKKwllbnVtIHJhZGVvbl9mYW1pbHkgbWluX2ZhbWlseTsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3B1X2Zvcm1hdHMgY29sb3JfZm9ybWF0c190YWJsZVtdID0gewpAQCAtMTU0LDcgKzE1NSwxMSBAQAogCVtWXzAzODAwNF9GTVRfQkMzXSA9IHsgNCwgNCwgMTYsIDAgfSwKIAlbVl8wMzgwMDRfRk1UX0JDNF0gPSB7IDQsIDQsIDgsIDAgfSwKIAlbVl8wMzgwMDRfRk1UX0JDNV0gPSB7IDQsIDQsIDE2LCAwfSwKKwlbVl8wMzgwMDRfRk1UX0JDNl0gPSB7IDQsIDQsIDE2LCAwLCBDSElQX0NFREFSfSwgLyogRXZlcmdyZWVuLW9ubHkgKi8KKwlbVl8wMzgwMDRfRk1UX0JDN10gPSB7IDQsIDQsIDE2LCAwLCBDSElQX0NFREFSfSwgLyogRXZlcmdyZWVuLW9ubHkgKi8KIAorCS8qIFRoZSBvdGhlciBFdmVyZ3JlZW4gZm9ybWF0cyAqLworCVtWXzAzODAwNF9GTVRfMzJfQVNfMzJfMzJfMzJfMzJdID0geyAxLCAxLCA0LCAwLCBDSElQX0NFREFSfSwKIH07CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBmbXRfaXNfdmFsaWRfY29sb3IodTMyIGZvcm1hdCkKQEAgLTE2OCwxMSArMTczLDE0IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgZm10X2lzX3ZhbGlkX3RleHR1cmUodTMyIGZvcm1hdCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBmbXRfaXNfdmFsaWRfdGV4dHVyZSh1MzIgZm9ybWF0LCBlbnVtIHJhZGVvbl9mYW1pbHkgZmFtaWx5KQogewogCWlmIChmb3JtYXQgPj0gQVJSQVlfU0laRShjb2xvcl9mb3JtYXRzX3RhYmxlKSkKIAkJcmV0dXJuIGZhbHNlOwogCQorCWlmIChmYW1pbHkgPCBjb2xvcl9mb3JtYXRzX3RhYmxlW2Zvcm1hdF0ubWluX2ZhbWlseSkKKwkJcmV0dXJuIGZhbHNlOworCiAJaWYgKGNvbG9yX2Zvcm1hdHNfdGFibGVbZm9ybWF0XS5ibG9ja3dpZHRoID4gMCkKIAkJcmV0dXJuIHRydWU7CiAKQEAgLTEzMjUsNyArMTMzMyw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlmb3JtYXQgPSBHXzAzODAwNF9EQVRBX0ZPUk1BVCh3b3JkMSk7Ci0JaWYgKCFmbXRfaXNfdmFsaWRfdGV4dHVyZShmb3JtYXQpKSB7CisJaWYgKCFmbXRfaXNfdmFsaWRfdGV4dHVyZShmb3JtYXQsIHAtPmZhbWlseSkpIHsKIAkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgdGV4dHVyZSBpbnZhbGlkIGZvcm1hdCAlZFxuIiwKIAkJCSBfX2Z1bmNfXywgX19MSU5FX18sIGZvcm1hdCk7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oCmluZGV4IGIyYjk0NGIuLmYxNDBhMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBkLmgKQEAgLTEzMDksNiArMTMwOSw5IEBACiAjZGVmaW5lICAgICBWXzAzODAwNF9GTVRfQkMzICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzMwogI2RlZmluZSAgICAgVl8wMzgwMDRfRk1UX0JDNCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKICNkZWZpbmUgICAgIFZfMDM4MDA0X0ZNVF9CQzUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM1CisjZGVmaW5lICAgICBWXzAzODAwNF9GTVRfQkM2ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNgorI2RlZmluZSAgICAgVl8wMzgwMDRfRk1UX0JDNyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0ZNVF8zMl9BU18zMl8zMl8zMl8zMiAgICAgICAgICAgICAweDAwMDAwMDM4CiAjZGVmaW5lIFJfMDM4MDEwX1NRX1RFWF9SRVNPVVJDRV9XT1JENF8wICAgICAgICAgICAgIDB4MDM4MDEwCiAjZGVmaW5lICAgU18wMzgwMTBfRk9STUFUX0NPTVBfWCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDApCiAjZGVmaW5lICAgR18wMzgwMTBfRk9STUFUX0NPTVBfWCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmMKaW5kZXggZDk0ODI2NS4uOWJkMTYyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYwpAQCAtOTA2LDkgKzkwNiw5IEBACiAJLmdldF92YmxhbmtfY291bnRlciA9ICZldmVyZ3JlZW5fZ2V0X3ZibGFua19jb3VudGVyLAogCS5mZW5jZV9yaW5nX2VtaXQgPSAmcjYwMF9mZW5jZV9yaW5nX2VtaXQsCiAJLmNzX3BhcnNlID0gJmV2ZXJncmVlbl9jc19wYXJzZSwKLQkuY29weV9ibGl0ID0gTlVMTCwKLQkuY29weV9kbWEgPSBOVUxMLAotCS5jb3B5ID0gTlVMTCwKKwkuY29weV9ibGl0ID0gJmV2ZXJncmVlbl9jb3B5X2JsaXQsCisJLmNvcHlfZG1hID0gJmV2ZXJncmVlbl9jb3B5X2JsaXQsCisJLmNvcHkgPSAmZXZlcmdyZWVuX2NvcHlfYmxpdCwKIAkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrLAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2ssCiAJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jaywKQEAgLTEwMjAsNiArMTAyMCw4IEBACiAJCXJkZXYtPmFzaWMgPSAmZXZlcmdyZWVuX2FzaWM7CiAJCWJyZWFrOwogCWNhc2UgQ0hJUF9QQUxNOgorCWNhc2UgQ0hJUF9TVU1POgorCWNhc2UgQ0hJUF9TVU1PMjoKIAkJcmRldi0+YXNpYyA9ICZzdW1vX2FzaWM7CiAJCWJyZWFrOwogCWNhc2UgQ0hJUF9CQVJUUzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jCmluZGV4IDhjMTkxNjkuLmZhZTAwYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYwpAQCAtMjI4LDYgKzIyOCw3IEBACiAJcGFyc2VyLmZpbHAgPSBmaWxwOwogCXBhcnNlci5yZGV2ID0gcmRldjsKIAlwYXJzZXIuZGV2ID0gcmRldi0+ZGV2OworCXBhcnNlci5mYW1pbHkgPSByZGV2LT5mYW1pbHk7CiAJciA9IHJhZGVvbl9jc19wYXJzZXJfaW5pdCgmcGFyc2VyLCBkYXRhKTsKIAlpZiAocikgewogCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXplIHBhcnNlciAhXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKaW5kZXggNWI2MTM2NC4uZTY4MDUwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKQEAgLTgyLDYgKzgyLDggQEAKIAkiQ1lQUkVTUyIsCiAJIkhFTUxPQ0siLAogCSJQQUxNIiwKKwkiU1VNTyIsCisJIlNVTU8yIiwKIAkiQkFSVFMiLAogCSJUVVJLUyIsCiAJIkNBSUNPUyIsCkBAIC03NTIsNiArNzU0LDcgQEAKIAlkbWFfYml0cyA9IHJkZXYtPm5lZWRfZG1hMzIgPyAzMiA6IDQwOwogCXIgPSBwY2lfc2V0X2RtYV9tYXNrKHJkZXYtPnBkZXYsIERNQV9CSVRfTUFTSyhkbWFfYml0cykpOwogCWlmIChyKSB7CisJCXJkZXYtPm5lZWRfZG1hMzIgPSB0cnVlOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJyYWRlb246IE5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGUuXG4iKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYwppbmRleCBhZTI0N2VlLi4yOTJmNzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCkBAIC0yNjQsNiArMjY0LDggQEAKIAkJcmFkZW9uX2JvX3VucmVzZXJ2ZSh3b3JrLT5vbGRfcmJvKTsKIAl9IGVsc2UKIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcmVzZXJ2ZSBidWZmZXIgYWZ0ZXIgZmxpcFxuIik7CisKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmd29yay0+b2xkX3Jiby0+Z2VtX2Jhc2UpOwogCWtmcmVlKHdvcmspOwogfQogCkBAIC0zNzEsNiArMzczLDggQEAKIAluZXdfcmFkZW9uX2ZiID0gdG9fcmFkZW9uX2ZyYW1lYnVmZmVyKGZiKTsKIAkvKiBzY2hlZHVsZSB1bnBpbiBvZiB0aGUgb2xkIGJ1ZmZlciAqLwogCW9iaiA9IG9sZF9yYWRlb25fZmItPm9iajsKKwkvKiB0YWtlIGEgcmVmZXJlbmNlIHRvIHRoZSBvbGQgb2JqZWN0ICovCisJZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKG9iaik7CiAJcmJvID0gZ2VtX3RvX3JhZGVvbl9ibyhvYmopOwogCXdvcmstPm9sZF9yYm8gPSByYm87CiAJSU5JVF9XT1JLKCZ3b3JrLT53b3JrLCByYWRlb25fdW5waW5fd29ya19mdW5jKTsKQEAgLTM3OCwxMiArMzgyLDkgQEAKIAkvKiBXZSBib3Jyb3cgdGhlIGV2ZW50IHNwaW4gbG9jayBmb3IgcHJvdGVjdGluZyB1bnBpbl93b3JrICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwogCWlmIChyYWRlb25fY3J0Yy0+dW5waW5fd29yaykgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKLQkJa2ZyZWUod29yayk7Ci0JCXJhZGVvbl9mZW5jZV91bnJlZigmZmVuY2UpOwotCiAJCURSTV9ERUJVR19EUklWRVIoImZsaXAgcXVldWU6IGNydGMgYWxyZWFkeSBidXN5XG4iKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwkJciA9IC1FQlVTWTsKKwkJZ290byB1bmxvY2tfZnJlZTsKIAl9CiAJcmFkZW9uX2NydGMtPnVucGluX3dvcmsgPSB3b3JrOwogCXJhZGVvbl9jcnRjLT5kZWZlcnJlZF9mbGlwX2NvbXBsZXRpb24gPSAwOwpAQCAtNDk3LDYgKzQ5OCw4IEBACiBwZmxpcF9jbGVhbnVwOgogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKIAlyYWRlb25fY3J0Yy0+dW5waW5fd29yayA9IE5VTEw7Cit1bmxvY2tfZnJlZToKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvbGRfcmFkZW9uX2ZiLT5vYmopOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwogCXJhZGVvbl9mZW5jZV91bnJlZigmZmVuY2UpOwogCWtmcmVlKHdvcmspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwppbmRleCAxZDMzMDYwLi43M2RmYmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwpAQCAtMTEzLDcgKzExMyw3IEBACiBpbnQgcmFkZW9uX3Rlc3RpbmcgPSAwOwogaW50IHJhZGVvbl9jb25uZWN0b3JfdGFibGUgPSAwOwogaW50IHJhZGVvbl90diA9IDE7Ci1pbnQgcmFkZW9uX2F1ZGlvID0gMTsKK2ludCByYWRlb25fYXVkaW8gPSAwOwogaW50IHJhZGVvbl9kaXNwX3ByaW9yaXR5ID0gMDsKIGludCByYWRlb25faHdfaTJjID0gMDsKIGludCByYWRlb25fcGNpZV9nZW4yID0gMDsKQEAgLTE1MSw3ICsxNTEsNyBAQAogTU9EVUxFX1BBUk1fREVTQyh0diwgIlRWIGVuYWJsZSAoMCA9IGRpc2FibGUpIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQodHYsIHJhZGVvbl90diwgaW50LCAwNDQ0KTsKIAotTU9EVUxFX1BBUk1fREVTQyhhdWRpbywgIkF1ZGlvIGVuYWJsZSAoMCA9IGRpc2FibGUpIik7CitNT0RVTEVfUEFSTV9ERVNDKGF1ZGlvLCAiQXVkaW8gZW5hYmxlICgxID0gZW5hYmxlKSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKGF1ZGlvLCByYWRlb25fYXVkaW8sIGludCwgMDQ0NCk7CiAKIE1PRFVMRV9QQVJNX0RFU0MoZGlzcF9wcmlvcml0eSwgIkRpc3BsYXkgUHJpb3JpdHkgKDAgPSBhdXRvLCAxID0gbm9ybWFsLCAyID0gaGlnaCkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCmluZGV4IDFiNTU3NTUuLjAzZjEyNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwpAQCAtOTU0LDEwICs5NTQsMTUgQEAKIAlpbnQgZHBfbGFuZV9jb3VudCA9IDA7CiAJaW50IGNvbm5lY3Rvcl9vYmplY3RfaWQgPSAwOwogCWludCBpZ3BfbGFuZV9pbmZvID0gMDsKKwlpbnQgZGlnX2VuY29kZXIgPSBkaWctPmRpZ19lbmNvZGVyOwogCi0JaWYgKGFjdGlvbiA9PSBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9JTklUKQorCWlmIChhY3Rpb24gPT0gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fSU5JVCkgewogCQljb25uZWN0b3IgPSByYWRlb25fZ2V0X2Nvbm5lY3Rvcl9mb3JfZW5jb2Rlcl9pbml0KGVuY29kZXIpOwotCWVsc2UKKwkJLyoganVzdCBuZWVkZWQgdG8gYXZvaWQgYmFpbGluZyBpbiB0aGUgZW5jb2RlciBjaGVjay4gIHRoZSBlbmNvZGVyCisJCSAqIGlzbid0IHVzZWQgZm9yIGluaXQKKwkJICovCisJCWRpZ19lbmNvZGVyID0gMDsKKwl9IGVsc2UKIAkJY29ubmVjdG9yID0gcmFkZW9uX2dldF9jb25uZWN0b3JfZm9yX2VuY29kZXIoZW5jb2Rlcik7CiAKIAlpZiAoY29ubmVjdG9yKSB7CkBAIC05NzMsNyArOTc4LDcgQEAKIAl9CiAKIAkvKiBubyBkaWcgZW5jb2RlciBhc3NpZ25lZCAqLwotCWlmIChkaWctPmRpZ19lbmNvZGVyID09IC0xKQorCWlmIChkaWdfZW5jb2RlciA9PSAtMSkKIAkJcmV0dXJuOwogCiAJaWYgKGF0b21iaW9zX2dldF9lbmNvZGVyX21vZGUoZW5jb2RlcikgPT0gQVRPTV9FTkNPREVSX01PREVfRFApCkBAIC0xMDIzLDcgKzEwMjgsNyBAQAogCiAJCWlmIChkaWctPmxpbmtiKQogCQkJYXJncy52My5hY0NvbmZpZy51Y0xpbmtTZWwgPSAxOwotCQlpZiAoZGlnLT5kaWdfZW5jb2RlciAmIDEpCisJCWlmIChkaWdfZW5jb2RlciAmIDEpCiAJCQlhcmdzLnYzLmFjQ29uZmlnLnVjRW5jb2RlclNlbCA9IDE7CiAKIAkJLyogU2VsZWN0IHRoZSBQTEwgZm9yIHRoZSBQSFkKQEAgLTEwNzMsNyArMTA3OCw3IEBACiAJCQkJYXJncy52My5hY0NvbmZpZy5mRHVhbExpbmtDb25uZWN0b3IgPSAxOwogCQl9CiAJfSBlbHNlIGlmIChBU0lDX0lTX0RDRTMyKHJkZXYpKSB7Ci0JCWFyZ3MudjIuYWNDb25maWcudWNFbmNvZGVyU2VsID0gZGlnLT5kaWdfZW5jb2RlcjsKKwkJYXJncy52Mi5hY0NvbmZpZy51Y0VuY29kZXJTZWwgPSBkaWdfZW5jb2RlcjsKIAkJaWYgKGRpZy0+bGlua2IpCiAJCQlhcmdzLnYyLmFjQ29uZmlnLnVjTGlua1NlbCA9IDE7CiAKQEAgLTExMDAsNyArMTEwNSw3IEBACiAJfSBlbHNlIHsKIAkJYXJncy52MS51Y0NvbmZpZyA9IEFUT01fVFJBTlNNSVRURVJfQ09ORklHX0NMS1NSQ19QUExMOwogCi0JCWlmIChkaWctPmRpZ19lbmNvZGVyKQorCQlpZiAoZGlnX2VuY29kZXIpCiAJCQlhcmdzLnYxLnVjQ29uZmlnIHw9IEFUT01fVFJBTlNNSVRURVJfQ09ORklHX0RJRzJfRU5DT0RFUjsKIAkJZWxzZQogCQkJYXJncy52MS51Y0NvbmZpZyB8PSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19ESUcxX0VOQ09ERVI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYW1pbHkuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZhbWlseS5oCmluZGV4IDZmMWQ5ZTUuLmVjMmYxZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZhbWlseS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZhbWlseS5oCkBAIC04MSw2ICs4MSw4IEBACiAJQ0hJUF9DWVBSRVNTLAogCUNISVBfSEVNTE9DSywKIAlDSElQX1BBTE0sCisJQ0hJUF9TVU1PLAorCUNISVBfU1VNTzIsCiAJQ0hJUF9CQVJUUywKIAlDSElQX1RVUktTLAogCUNISVBfQ0FJQ09TLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKaW5kZXggODZlZGExZS4uYWFhMTlkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jCkBAIC00ODcsNiArNDg3LDcgQEAKIAljYXNlIFRIRVJNQUxfVFlQRV9SVjZYWDoKIAljYXNlIFRIRVJNQUxfVFlQRV9SVjc3MDoKIAljYXNlIFRIRVJNQUxfVFlQRV9FVkVSR1JFRU46CisJY2FzZSBUSEVSTUFMX1RZUEVfTkk6CiAJY2FzZSBUSEVSTUFMX1RZUEVfU1VNTzoKIAkJcmRldi0+cG0uaW50X2h3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcihyZGV2LT5kZXYpOwogCQlpZiAoSVNfRVJSKHJkZXYtPnBtLmludF9od21vbl9kZXYpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I2MDAgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I2MDAKaW5kZXggOTJmMTkwMC4uZWE0OTc1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNjAwCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjYwMApAQCAtNzU4LDYgKzc1OCw1IEBACiAweDAwMDA5NzE0IFZDX0VOSEFOQ0UKIDB4MDAwMDk4MzAgREJfREVCVUcKIDB4MDAwMDk4MzggREJfV0FURVJNQVJLUwotMHgwMDAyOEQyOCBEQl9TUkVTVUxUU19DT01QQVJFX1NUQVRFMAogMHgwMDAyOEQ0NCBEQl9BTFBIQV9UT19NQVNLCiAweDAwMDA5NzAwIFZDX0NOVEwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYW55c2VlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5jCmluZGV4IDRkYzFjYTMuLjdjMzI3YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYW55c2VlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hbnlzZWUuYwpAQCAtNjAsOCArNjAsNiBAQAogCWludCBhY3RfbGVuLCByZXQ7CiAJdTggYnVmWzY0XTsKIAotCWlmIChzbGVuID4gc2l6ZW9mKGJ1ZikpCi0JCXNsZW4gPSBzaXplb2YoYnVmKTsKIAltZW1jcHkoJmJ1ZlswXSwgc2J1Ziwgc2xlbik7CiAJYnVmWzYwXSA9IHN0YXRlLT5zZXErKzsKIApAQCAtMTgwLDMwICsxNzgsMzcgQEAKIHsKIAlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOwogCWludCByZXQgPSAwLCBpbmMsIGkgPSAwOworCXU4IGJ1Zls1Ml07IC8qIDQgKyA0OCAoSTJDIFdSIFVTQiBjb21tYW5kIGhlYWRlciArIEkyQyBXUiBtYXgpICovCiAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkLT5pMmNfbXV0ZXgpIDwgMCkKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAl3aGlsZSAoaSA8IG51bSkgewogCQlpZiAobnVtID4gaSArIDEgJiYgKG1zZ1tpKzFdLmZsYWdzICYgSTJDX01fUkQpKSB7Ci0JCQl1OCBidWZbNl07CisJCQlpZiAobXNnW2ldLmxlbiA+IDIgfHwgbXNnW2krMV0ubGVuID4gNjApIHsKKwkJCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJCQlicmVhazsKKwkJCX0KIAkJCWJ1ZlswXSA9IENNRF9JMkNfUkVBRDsKIAkJCWJ1ZlsxXSA9IChtc2dbaV0uYWRkciA8PCAxKSB8IDB4MDE7CiAJCQlidWZbMl0gPSBtc2dbaV0uYnVmWzBdOwogCQkJYnVmWzNdID0gbXNnW2ldLmJ1ZlsxXTsKIAkJCWJ1Zls0XSA9IG1zZ1tpXS5sZW4tMTsKIAkJCWJ1Zls1XSA9IG1zZ1tpKzFdLmxlbjsKLQkJCXJldCA9IGFueXNlZV9jdHJsX21zZyhkLCBidWYsIHNpemVvZihidWYpLCBtc2dbaSsxXS5idWYsCisJCQlyZXQgPSBhbnlzZWVfY3RybF9tc2coZCwgYnVmLCA2LCBtc2dbaSsxXS5idWYsCiAJCQkJbXNnW2krMV0ubGVuKTsKIAkJCWluYyA9IDI7CiAJCX0gZWxzZSB7Ci0JCQl1OCBidWZbNCttc2dbaV0ubGVuXTsKKwkJCWlmIChtc2dbaV0ubGVuID4gNDgpIHsKKwkJCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJCQlicmVhazsKKwkJCX0KIAkJCWJ1ZlswXSA9IENNRF9JMkNfV1JJVEU7CiAJCQlidWZbMV0gPSAobXNnW2ldLmFkZHIgPDwgMSk7CiAJCQlidWZbMl0gPSBtc2dbaV0ubGVuOwogCQkJYnVmWzNdID0gMHgwMTsKIAkJCW1lbWNweSgmYnVmWzRdLCBtc2dbaV0uYnVmLCBtc2dbaV0ubGVuKTsKLQkJCXJldCA9IGFueXNlZV9jdHJsX21zZyhkLCBidWYsIHNpemVvZihidWYpLCBOVUxMLCAwKTsKKwkJCXJldCA9IGFueXNlZV9jdHJsX21zZyhkLCBidWYsIDQgKyBtc2dbaV0ubGVuLCBOVUxMLCAwKTsKIAkJCWluYyA9IDE7CiAJCX0KIAkJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvbWVkaWEtZGV2bm9kZS5jIGIvZHJpdmVycy9tZWRpYS9tZWRpYS1kZXZub2RlLmMKaW5kZXggYWY1MjYzYy4uN2I0MmFjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9tZWRpYS1kZXZub2RlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9tZWRpYS1kZXZub2RlLmMKQEAgLTIxMywxNCArMjEzLDE0IEBACiAKIAkvKiBQYXJ0IDE6IEZpbmQgYSBmcmVlIG1pbm9yIG51bWJlciAqLwogCW11dGV4X2xvY2soJm1lZGlhX2Rldm5vZGVfbG9jayk7Ci0JbWlub3IgPSBmaW5kX25leHRfemVyb19iaXQobWVkaWFfZGV2bm9kZV9udW1zLCAwLCBNRURJQV9OVU1fREVWSUNFUyk7CisJbWlub3IgPSBmaW5kX25leHRfemVyb19iaXQobWVkaWFfZGV2bm9kZV9udW1zLCBNRURJQV9OVU1fREVWSUNFUywgMCk7CiAJaWYgKG1pbm9yID09IE1FRElBX05VTV9ERVZJQ0VTKSB7CiAJCW11dGV4X3VubG9jaygmbWVkaWFfZGV2bm9kZV9sb2NrKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJjb3VsZCBub3QgZ2V0IGEgZnJlZSBtaW5vclxuIik7CiAJCXJldHVybiAtRU5GSUxFOwogCX0KIAotCXNldF9iaXQobWRldi0+bWlub3IsIG1lZGlhX2Rldm5vZGVfbnVtcyk7CisJc2V0X2JpdChtaW5vciwgbWVkaWFfZGV2bm9kZV9udW1zKTsKIAltdXRleF91bmxvY2soJm1lZGlhX2Rldm5vZGVfbG9jayk7CiAKIAltZGV2LT5taW5vciA9IG1pbm9yOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb2Fyc2VfZXhwb19hdXRvZ2Fpbi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb2Fyc2VfZXhwb19hdXRvZ2Fpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2I5ZDk0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29hcnNlX2V4cG9fYXV0b2dhaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0vKgotICogQXV0byBnYWluIGFsZ29yaXRobSBmb3IgY2FtZXJhJ3Mgd2l0aCBhIGNvYXJzZSBleHBvc3VyZSBjb250cm9sCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLS8qIEF1dG9nYWluICsgZXhwb3N1cmUgYWxnb3JpdGhtIGZvciBjYW1lcmFzIHdpdGggYSBjb2Fyc2UgZXhwb3N1cmUgY29udHJvbAotICAgKHVzdWFsbHkgdGhpcyBtZWFucyB3ZSBjYW4gb25seSBjb250cm9sIHRoZSBjbG9ja2RpdiB0byBjaGFuZ2UgZXhwb3N1cmUpCi0gICBBcyBjaGFuZ2luZyB0aGUgY2xvY2tkaXYgc28gdGhhdCB0aGUgZnBzIGRyb3BzIGZyb20gMzAgdG8gMTUgZnBzIGZvcgotICAgZXhhbXBsZSwgd2lsbCBsZWFkIHRvIGEgaHVnZSBleHBvc3VyZSBjaGFuZ2UgKGl0IGVmZmVjdGl2ZWx5IGRvdWJsZXMpLAotICAgdGhpcyBhbGdvcml0aG0gbm9ybWFsbHkgdHJpZXMgdG8gb25seSBhZGp1c3QgdGhlIGdhaW4gKGJldHdlZW4gNDAgYW5kCi0gICA4MCAlKSBhbmQgaWYgdGhhdCBkb2VzIG5vdCBoZWxwLCBvbmx5IHRoZW4gY2hhbmdlcyBleHBvc3VyZS4gVGhpcyBsZWFkcwotICAgdG8gYSBtdWNoIG1vcmUgc3RhYmxlIGltYWdlIHRoZW4gdXNpbmcgdGhlIGtuZWUgYWxnb3JpdGhtIHdoaWNoIGF0Ci0gICBjZXJ0YWluIHBvaW50cyBvZiB0aGUga25lZSBncmFwaCB3aWxsIG9ubHkgdHJ5IHRvIGFkanVzdCBleHBvc3VyZSwKLSAgIHdoaWNoIGxlYWRzIHRvIG9zY2lsYXRpbmcgYXMgb25lIGV4cG9zdXJlIHN0ZXAgaXMgaHVnZS4KLQotICAgTm90ZSB0aGlzIGFzc3VtZXMgdGhhdCB0aGUgc2Qgc3RydWN0IGZvciB0aGUgY2FtIGluIHF1ZXN0aW9uIGhhcwotICAgZXhwX3Rvb19oaWdoX2NudCBhbmQgZXhwX3Rvb19oaWdoX2NudCBpbnQgbWVtYmVycyBmb3IgdXNlIGJ5IHRoaXMgZnVuY3Rpb24uCi0KLSAgIFJldHVybnMgMCBpZiBubyBjaGFuZ2VzIHdlcmUgbWFkZSwgMSBpZiB0aGUgZ2FpbiBhbmQgb3IgZXhwb3N1cmUgc2V0dGluZ3MKLSAgIHdoZXJlIGNoYW5nZWQuICovCi1zdGF0aWMgaW50IGdzcGNhX2NvYXJzZV9ncmFpbmVkX2V4cG9fYXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCWludCBhdmdfbHVtLCBpbnQgZGVzaXJlZF9hdmdfbHVtLCBpbnQgZGVhZHpvbmUpCi17Ci0JaW50IGksIHN0ZXBzLCBnYWluLCBvcmlnX2dhaW4sIGV4cG9zdXJlLCBvcmlnX2V4cG9zdXJlOwotCWludCBnYWluX2xvdywgZ2Fpbl9oaWdoOwotCWNvbnN0IHN0cnVjdCBjdHJsICpnYWluX2N0cmwgPSBOVUxMOwotCWNvbnN0IHN0cnVjdCBjdHJsICpleHBvc3VyZV9jdHJsID0gTlVMTDsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZ3NwY2FfZGV2LT5zZF9kZXNjLT5uY3RybHM7IGkrKykgewotCQlpZiAoZ3NwY2FfZGV2LT5jdHJsX2RpcyAmICgxIDw8IGkpKQotCQkJY29udGludWU7Ci0JCWlmIChnc3BjYV9kZXYtPnNkX2Rlc2MtPmN0cmxzW2ldLnFjdHJsLmlkID09IFY0TDJfQ0lEX0dBSU4pCi0JCQlnYWluX2N0cmwgPSAmZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsc1tpXTsKLQkJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+Y3RybHNbaV0ucWN0cmwuaWQgPT0gVjRMMl9DSURfRVhQT1NVUkUpCi0JCQlleHBvc3VyZV9jdHJsID0gJmdzcGNhX2Rldi0+c2RfZGVzYy0+Y3RybHNbaV07Ci0JfQotCWlmICghZ2Fpbl9jdHJsIHx8ICFleHBvc3VyZV9jdHJsKSB7Ci0JCVBERUJVRyhEX0VSUiwgIkVycm9yOiBnc3BjYV9jb2Fyc2VfZ3JhaW5lZF9leHBvX2F1dG9nYWluICIKLQkJCSJjYWxsZWQgb24gY2FtIHdpdGhvdXQgZ2FpbiBvciBleHBvc3VyZSIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoZ2Fpbl9jdHJsLT5nZXQoZ3NwY2FfZGV2LCAmZ2FpbikgfHwKLQkgICAgZXhwb3N1cmVfY3RybC0+Z2V0KGdzcGNhX2RldiwgJmV4cG9zdXJlKSkKLQkJcmV0dXJuIDA7Ci0KLQlvcmlnX2dhaW4gPSBnYWluOwotCW9yaWdfZXhwb3N1cmUgPSBleHBvc3VyZTsKLQlnYWluX2xvdyA9Ci0JCShnYWluX2N0cmwtPnFjdHJsLm1heGltdW0gLSBnYWluX2N0cmwtPnFjdHJsLm1pbmltdW0pIC8gNSAqIDI7Ci0JZ2Fpbl9sb3cgKz0gZ2Fpbl9jdHJsLT5xY3RybC5taW5pbXVtOwotCWdhaW5faGlnaCA9Ci0JCShnYWluX2N0cmwtPnFjdHJsLm1heGltdW0gLSBnYWluX2N0cmwtPnFjdHJsLm1pbmltdW0pIC8gNSAqIDQ7Ci0JZ2Fpbl9oaWdoICs9IGdhaW5fY3RybC0+cWN0cmwubWluaW11bTsKLQotCS8qIElmIHdlIGFyZSBvZiBhIG11bHRpcGxlIG9mIGRlYWR6b25lLCBkbyBtdWx0aXBsZSBzdGVwcyB0byByZWFjaCB0aGUKLQkgICBkZXNpcmVkIGx1bWluYXRpb24gZmFzdCAod2l0aCB0aGUgcmlzYyBvZiBhIHNsaWdodCBvdmVyc2hvb3QpICovCi0Jc3RlcHMgPSAoZGVzaXJlZF9hdmdfbHVtIC0gYXZnX2x1bSkgLyBkZWFkem9uZTsKLQotCVBERUJVRyhEX0ZSQU0sICJhdXRvZ2FpbjogbHVtOiAlZCwgZGVzaXJlZDogJWQsIHN0ZXBzOiAlZCIsCi0JCWF2Z19sdW0sIGRlc2lyZWRfYXZnX2x1bSwgc3RlcHMpOwotCi0JaWYgKChnYWluICsgc3RlcHMpID4gZ2Fpbl9oaWdoICYmCi0JICAgIHNkLT5leHBvc3VyZSA8IGV4cG9zdXJlX2N0cmwtPnFjdHJsLm1heGltdW0pIHsKLQkJZ2FpbiA9IGdhaW5faGlnaDsKLQkJc2QtPmV4cF90b29fbG93X2NudCsrOwotCX0gZWxzZSBpZiAoKGdhaW4gKyBzdGVwcykgPCBnYWluX2xvdyAmJgotCQkgICBzZC0+ZXhwb3N1cmUgPiBleHBvc3VyZV9jdHJsLT5xY3RybC5taW5pbXVtKSB7Ci0JCWdhaW4gPSBnYWluX2xvdzsKLQkJc2QtPmV4cF90b29faGlnaF9jbnQrKzsKLQl9IGVsc2UgewotCQlnYWluICs9IHN0ZXBzOwotCQlpZiAoZ2FpbiA+IGdhaW5fY3RybC0+cWN0cmwubWF4aW11bSkKLQkJCWdhaW4gPSBnYWluX2N0cmwtPnFjdHJsLm1heGltdW07Ci0JCWVsc2UgaWYgKGdhaW4gPCBnYWluX2N0cmwtPnFjdHJsLm1pbmltdW0pCi0JCQlnYWluID0gZ2Fpbl9jdHJsLT5xY3RybC5taW5pbXVtOwotCQlzZC0+ZXhwX3Rvb19oaWdoX2NudCA9IDA7Ci0JCXNkLT5leHBfdG9vX2xvd19jbnQgPSAwOwotCX0KLQotCWlmIChzZC0+ZXhwX3Rvb19oaWdoX2NudCA+IDMpIHsKLQkJZXhwb3N1cmUtLTsKLQkJc2QtPmV4cF90b29faGlnaF9jbnQgPSAwOwotCX0gZWxzZSBpZiAoc2QtPmV4cF90b29fbG93X2NudCA+IDMpIHsKLQkJZXhwb3N1cmUrKzsKLQkJc2QtPmV4cF90b29fbG93X2NudCA9IDA7Ci0JfQotCi0JaWYgKGdhaW4gIT0gb3JpZ19nYWluKSB7Ci0JCWdhaW5fY3RybC0+c2V0KGdzcGNhX2RldiwgZ2Fpbik7Ci0JCXJldHZhbCA9IDE7Ci0JfQotCWlmIChleHBvc3VyZSAhPSBvcmlnX2V4cG9zdXJlKSB7Ci0JCWV4cG9zdXJlX2N0cmwtPnNldChnc3BjYV9kZXYsIGV4cG9zdXJlKTsKLQkJcmV0dmFsID0gMTsKLQl9Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCmluZGV4IDM2YTQ2ZmMuLjA1N2UyODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKQEAgLTYwOSw3ICs2MDksNyBAQAogICogYnVmZmVycywgdGhlcmUgYXJlIHNvbWUgcHJldHR5IHN0cmljdCByZWFsIHRpbWUgY29uc3RyYWludHMgZm9yCiAgKiBpc29jaHJvbm91cyB0cmFuc2ZlciBmb3IgbGFyZ2VyIGZyYW1lIHNpemVzKS4KICAqLwotLypqZm06IHRoaXMgdmFsdWUgd29ya3Mgd2VsbCBmb3IgMTYwMHgxMjAwLCBidXQgbm90IDgwMHg2MDAgLSBzZWUgaXNvY19pbml0ICovCisvKmpmbTogdGhpcyB2YWx1ZSBkb2VzIG5vdCB3b3JrIGZvciA4MDB4NjAwIC0gc2VlIGlzb2NfaW5pdCAqLwogI2RlZmluZSBPVkZYMl9CVUxLX1NJWkUgKDEzICogNDA5NikKIAogLyogSTJDIHJlZ2lzdGVycyAqLwpAQCAtMzMwNyw2ICszMzA3LDcgQEAKIAogCWdzcGNhX2Rldi0+Y2FtLmN0cmxzID0gc2QtPmN0cmxzOwogCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9ERUY7CisJc2QtPmZyYW1lX3JhdGUgPSAxNTsKIAogCXJldHVybiAwOwogfQpAQCAtMzQ2OSw3ICszNDcwLDYgQEAKIAkJCQlBUlJBWV9TSVpFKGluaXRfNTE5X292NzY2MCkpOwogCQl3cml0ZV9pMmNfcmVndmFscyhzZCwgbm9ybV83NjYwLCBBUlJBWV9TSVpFKG5vcm1fNzY2MCkpOwogCQlzZC0+Z3NwY2FfZGV2LmN1cnJfbW9kZSA9IDE7CS8qIDY0MHg0ODAgKi8KLQkJc2QtPmZyYW1lX3JhdGUgPSAxNTsKIAkJb3Y1MTlfc2V0X21vZGUoc2QpOwogCQlvdjUxOV9zZXRfZnIoc2QpOwogCQlzZC0+Y3RybHNbQ09MT1JTXS5tYXggPSA0OwkvKiAwLi40ICovCkBAIC0zNTExLDcgKzM1MTEsNyBAQAogCiAJc3dpdGNoIChzZC0+YnJpZGdlKSB7CiAJY2FzZSBCUklER0VfT1ZGWDI6Ci0JCWlmIChnc3BjYV9kZXYtPndpZHRoID09IDE2MDApCisJCWlmIChnc3BjYV9kZXYtPndpZHRoICE9IDgwMCkKIAkJCWdzcGNhX2Rldi0+Y2FtLmJ1bGtfc2l6ZSA9IE9WRlgyX0JVTEtfU0laRTsKIAkJZWxzZQogCQkJZ3NwY2FfZGV2LT5jYW0uYnVsa19zaXplID0gNyAqIDQwOTY7CkBAIC00NDc4LDcgKzQ0NzgsNyBAQAogCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZGF0YSwgbGVuKTsKIAogCS8qIEEgc2hvcnQgcmVhZCBzaWduYWxzIEVPRiAqLwotCWlmIChsZW4gPCBPVkZYMl9CVUxLX1NJWkUpIHsKKwlpZiAobGVuIDwgZ3NwY2FfZGV2LT5jYW0uYnVsa19zaXplKSB7CiAJCS8qIElmIHRoZSBmcmFtZSBpcyBzaG9ydCwgYW5kIGl0IGlzIG9uZSBvZiB0aGUgZmlyc3Qgb25lcwogCQkgICB0aGUgc2Vuc29yIGFuZCBicmlkZ2UgYXJlIHN0aWxsIHN5bmNpbmcsIHNvIGRyb3AgaXQuICovCiAJCWlmIChzZC0+Zmlyc3RfZnJhbWUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jCmluZGV4IDY0MTVhZmYuLjgxYjhhNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYwpAQCAtNjAsNyArNjAsNyBAQAogCiAJdTMyIHBrdHN6OwkJCS8qICh1c2VkIGJ5IHBrdF9zY2FuKSAqLwogCXUxNiBucGt0OwotCXU4IG5jaGc7CisJczggbmNoZzsKIAlzOCBzaG9ydF9tYXJrOwogCiAJdTggcXVhbGl0eTsJCQkvKiBpbWFnZSBxdWFsaXR5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmgKaW5kZXggYjUzOGRjZS4uYTE0YTg0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuaApAQCAtMTI1LDcgKzEyNSw3IEBACiAjZGVmaW5lIEhEQ1NfU0xFRVBfTU9ERQkJKDEgPDwgMSkKIAogI2RlZmluZSBIRENTX0RFRkFVTFRfRVhQT1NVUkUJNDgKLSNkZWZpbmUgSERDU19ERUZBVUxUX0dBSU4JMTI4CisjZGVmaW5lIEhEQ1NfREVGQVVMVF9HQUlOCTUwCiAKIHN0YXRpYyBpbnQgaGRjc19wcm9iZV8xeDAwKHN0cnVjdCBzZCAqc2QpOwogc3RhdGljIGludCBoZGNzX3Byb2JlXzEwMjAoc3RydWN0IHNkICpzZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCmluZGV4IGE0ZTRkZmQuLjBmYjc1NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCkBAIC0xMzI4LDYgKzEzMjgsOCBAQAogCWlmICghaXR2LT5oYXNfY3gyMzQxNSkKIAkJd3JpdGVfcmVnX3N5bmMoMHgwMywgSVZUVl9SRUdfRE1BQ09OVFJPTCk7CiAKKwlpdnR2X3Nfc3RkX2VuYyhpdHYsICZpdHYtPnR1bmVyX3N0ZCk7CisKIAkvKiBEZWZhdWx0IGludGVycnVwdHMgZW5hYmxlZC4gRm9yIHRoZSBQVlIzNTAgdGhpcyBpbmNsdWRlcyB0aGUKIAkgICBkZWNvZGVyIFZTWU5DIGludGVycnVwdCwgd2hpY2ggaXMgYWx3YXlzIG9uLiBJdCBpcyBub3Qgb25seSB1c2VkCiAJICAgZHVyaW5nIGRlY29kaW5nIGJ1dCBhbHNvIGJ5IHRoZSBPU0QuCkBAIC0xMzM2LDEyICsxMzM4LDEwIEBACiAJaWYgKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpIHsKIAkJaXZ0dl9jbGVhcl9pcnFfbWFzayhpdHYsIElWVFZfSVJRX01BU0tfSU5JVCB8IElWVFZfSVJRX0RFQ19WU1lOQyk7CiAJCWl2dHZfc2V0X29zZF9hbHBoYShpdHYpOwotCX0KLQllbHNlCisJCWl2dHZfc19zdGRfZGVjKGl0diwgJml0di0+dHVuZXJfc3RkKTsKKwl9IGVsc2UgewogCQlpdnR2X2NsZWFyX2lycV9tYXNrKGl0diwgSVZUVl9JUlFfTUFTS19JTklUKTsKLQotCS8qIEZvciBjYXJkcyB3aXRoIHZpZGVvIG91dCwgdGhpcyBjYWxsIG5lZWRzIGludGVycnVwdHMgZW5hYmxlZCAqLwotCWl2dHZfc19zdGQoTlVMTCwgJmZoLCAmaXR2LT50dW5lcl9zdGQpOworCX0KIAogCS8qIFNldHVwIGluaXRpYWwgY29udHJvbHMgKi8KIAljeDIzNDF4X2hhbmRsZXJfc2V0dXAoJml0di0+Y3hoZGwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMKaW5kZXggMTRhMWNlYS4uMDJjNWFkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jCkBAIC0yODAsOCArMjgwLDYgQEAKIHsKIAlpbnQgcmMgPSAwOwogCXY0bDJfc3RkX2lkIHN0ZDsKLQlzdHJ1Y3QgaXZ0dl9vcGVuX2lkIGZoOwotCWZoLml0diA9IGl0djsKIAogCWlmIChpdHYtPnY0bDJfY2FwICYgVjRMMl9DQVBfVklERU9fT1VUUFVUKQogCQkvKiBEaXNwbGF5IHRlc3QgaW1hZ2UgZHVyaW5nIHJlc3RhcnQgKi8KQEAgLTMwMSwxNCArMjk5LDE5IEBACiAJLyogQWxsb3cgc2V0dGluZ3MgdG8gcmVsb2FkICovCiAJaXZ0dl9tYWlsYm94X2NhY2hlX2ludmFsaWRhdGUoaXR2KTsKIAotCS8qIFJlc3RvcmUgdmlkZW8gc3RhbmRhcmQgKi8KKwkvKiBSZXN0b3JlIGVuY29kZXIgdmlkZW8gc3RhbmRhcmQgKi8KIAlzdGQgPSBpdHYtPnN0ZDsKIAlpdHYtPnN0ZCA9IDA7Ci0JaXZ0dl9zX3N0ZChOVUxMLCAmZmgsICZzdGQpOworCWl2dHZfc19zdGRfZW5jKGl0diwgJnN0ZCk7CiAKIAlpZiAoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkgewogCQlpdnR2X2luaXRfbXBlZ19kZWNvZGVyKGl0dik7CiAKKwkJLyogUmVzdG9yZSBkZWNvZGVyIHZpZGVvIHN0YW5kYXJkICovCisJCXN0ZCA9IGl0di0+c3RkX291dDsKKwkJaXR2LT5zdGRfb3V0ID0gMDsKKwkJaXZ0dl9zX3N0ZF9kZWMoaXR2LCAmc3RkKTsKKwogCQkvKiBSZXN0b3JlIGZyYW1lYnVmZmVyIGlmIGFjdGl2ZSAqLwogCQlpZiAoaXR2LT5pdnR2ZmJfcmVzdG9yZSkKIAkJCWl0di0+aXZ0dmZiX3Jlc3RvcmUoaXR2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jCmluZGV4IDE2ODk3ODMuLmY5ZTM0N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuYwpAQCAtMTA3MSwyOCArMTA3MSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBpdnR2X3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdjRsMl9zdGRfaWQgKnN0ZCkKK3ZvaWQgaXZ0dl9zX3N0ZF9lbmMoc3RydWN0IGl2dHYgKml0diwgdjRsMl9zdGRfaWQgKnN0ZCkKIHsKLQlERUZJTkVfV0FJVCh3YWl0KTsKLQlzdHJ1Y3QgaXZ0diAqaXR2ID0gZmgyaWQoZmgpLT5pdHY7Ci0Jc3RydWN0IHl1dl9wbGF5YmFja19pbmZvICp5aSA9ICZpdHYtPnl1dl9pbmZvOwotCWludCBmOwotCi0JaWYgKCgqc3RkICYgVjRMMl9TVERfQUxMKSA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICgqc3RkID09IGl0di0+c3RkKQotCQlyZXR1cm4gMDsKLQotCWlmICh0ZXN0X2JpdChJVlRWX0ZfSV9SQURJT19VU0VSLCAmaXR2LT5pX2ZsYWdzKSB8fAotCSAgICBhdG9taWNfcmVhZCgmaXR2LT5jYXB0dXJpbmcpID4gMCB8fAotCSAgICBhdG9taWNfcmVhZCgmaXR2LT5kZWNvZGluZykgPiAwKSB7Ci0JCS8qIFN3aXRjaGluZyBzdGFuZGFyZCB3b3VsZCB0dXJuIG9mZiB0aGUgcmFkaW8gb3IgbWVzcwotCQkgICB3aXRoIGFscmVhZHkgcnVubmluZyBzdHJlYW1zLCBwcmV2ZW50IHRoYXQgYnkKLQkJICAgcmV0dXJuaW5nIEVCVVNZLiAqLwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQogCWl0di0+c3RkID0gKnN0ZDsKIAlpdHYtPmlzXzYwaHogPSAoKnN0ZCAmIFY0TDJfU1REXzUyNV82MCkgPyAxIDogMDsKIAlpdHYtPmlzXzUwaHogPSAhaXR2LT5pc182MGh6OwpAQCAtMTEwNiw0OCArMTA4Niw3OSBAQAogCWlmIChpdHYtPmh3X2ZsYWdzICYgSVZUVl9IV19DWDI1ODQwKQogCQlpdHYtPnZiaS5zbGljZWRfZGVjb2Rlcl9saW5lX3NpemUgPSBpdHYtPmlzXzYwaHogPyAyNzIgOiAyODQ7CiAKLQlJVlRWX0RFQlVHX0lORk8oIlN3aXRjaGluZyBzdGFuZGFyZCB0byAlbGx4LlxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylpdHYtPnN0ZCk7Ci0KIAkvKiBUdW5lciAqLwogCWl2dHZfY2FsbF9hbGwoaXR2LCBjb3JlLCBzX3N0ZCwgaXR2LT5zdGQpOworfQogCi0JaWYgKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpIHsKLQkJLyogc2V0IGRpc3BsYXkgc3RhbmRhcmQgKi8KLQkJaXR2LT5zdGRfb3V0ID0gKnN0ZDsKLQkJaXR2LT5pc19vdXRfNjBoeiA9IGl0di0+aXNfNjBoejsKLQkJaXR2LT5pc19vdXRfNTBoeiA9IGl0di0+aXNfNTBoejsKLQkJaXZ0dl9jYWxsX2FsbChpdHYsIHZpZGVvLCBzX3N0ZF9vdXRwdXQsIGl0di0+c3RkX291dCk7Cit2b2lkIGl2dHZfc19zdGRfZGVjKHN0cnVjdCBpdnR2ICppdHYsIHY0bDJfc3RkX2lkICpzdGQpCit7CisJc3RydWN0IHl1dl9wbGF5YmFja19pbmZvICp5aSA9ICZpdHYtPnl1dl9pbmZvOworCURFRklORV9XQUlUKHdhaXQpOworCWludCBmOwogCi0JCS8qCi0JCSAqIFRoZSBuZXh0IGZpcm13YXJlIGNhbGwgaXMgdGltZSBzZW5zaXRpdmUuIFRpbWUgaXQgdG8KLQkJICogYXZvaWQgcmlzayBvZiBhIGhhcmQgbG9jaywgYnkgdHJ5aW5nIHRvIGVuc3VyZSB0aGUgY2FsbAotCQkgKiBoYXBwZW5zIHdpdGhpbiB0aGUgZmlyc3QgMTAwIGxpbmVzIG9mIHRoZSB0b3AgZmllbGQuCi0JCSAqIE1ha2UgNCBhdHRlbXB0cyB0byBzeW5jIHRvIHRoZSBkZWNvZGVyIGJlZm9yZSBnaXZpbmcgdXAuCi0JCSAqLwotCQlmb3IgKGYgPSAwOyBmIDwgNDsgZisrKSB7Ci0JCQlwcmVwYXJlX3RvX3dhaXQoJml0di0+dnN5bmNfd2FpdHEsICZ3YWl0LAotCQkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCQlpZiAoKHJlYWRfcmVnKElWVFZfUkVHX0RFQ19MSU5FX0ZJRUxEKSA+PiAxNikgPCAxMDApCi0JCQkJYnJlYWs7Ci0JCQlzY2hlZHVsZV90aW1lb3V0KG1zZWNzX3RvX2ppZmZpZXMoMjUpKTsKLQkJfQotCQlmaW5pc2hfd2FpdCgmaXR2LT52c3luY193YWl0cSwgJndhaXQpOworCS8qIHNldCBkaXNwbGF5IHN0YW5kYXJkICovCisJaXR2LT5zdGRfb3V0ID0gKnN0ZDsKKwlpdHYtPmlzX291dF82MGh6ID0gKCpzdGQgJiBWNEwyX1NURF81MjVfNjApID8gMSA6IDA7CisJaXR2LT5pc19vdXRfNTBoeiA9ICFpdHYtPmlzX291dF82MGh6OworCWl2dHZfY2FsbF9hbGwoaXR2LCB2aWRlbywgc19zdGRfb3V0cHV0LCBpdHYtPnN0ZF9vdXQpOwogCi0JCWlmIChmID09IDQpCi0JCQlJVlRWX1dBUk4oIk1vZGUgY2hhbmdlIGZhaWxlZCB0byBzeW5jIHRvIGRlY29kZXJcbiIpOwotCi0JCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfREVDX1NFVF9TVEFOREFSRCwgMSwgaXR2LT5pc19vdXRfNTBoeik7Ci0JCWl0di0+bWFpbl9yZWN0LmxlZnQgPSBpdHYtPm1haW5fcmVjdC50b3AgPSAwOwotCQlpdHYtPm1haW5fcmVjdC53aWR0aCA9IDcyMDsKLQkJaXR2LT5tYWluX3JlY3QuaGVpZ2h0ID0gaXR2LT5jeGhkbC5oZWlnaHQ7Ci0JCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfT1NEX1NFVF9GUkFNRUJVRkZFUl9XSU5ET1csIDQsCi0JCQk3MjAsIGl0di0+bWFpbl9yZWN0LmhlaWdodCwgMCwgMCk7Ci0JCXlpLT5tYWluX3JlY3QgPSBpdHYtPm1haW5fcmVjdDsKLQkJaWYgKCFpdHYtPm9zZF9pbmZvKSB7Ci0JCQl5aS0+b3NkX2Z1bGxfdyA9IDcyMDsKLQkJCXlpLT5vc2RfZnVsbF9oID0gaXR2LT5pc19vdXRfNTBoeiA/IDU3NiA6IDQ4MDsKLQkJfQorCS8qCisJICogVGhlIG5leHQgZmlybXdhcmUgY2FsbCBpcyB0aW1lIHNlbnNpdGl2ZS4gVGltZSBpdCB0bworCSAqIGF2b2lkIHJpc2sgb2YgYSBoYXJkIGxvY2ssIGJ5IHRyeWluZyB0byBlbnN1cmUgdGhlIGNhbGwKKwkgKiBoYXBwZW5zIHdpdGhpbiB0aGUgZmlyc3QgMTAwIGxpbmVzIG9mIHRoZSB0b3AgZmllbGQuCisJICogTWFrZSA0IGF0dGVtcHRzIHRvIHN5bmMgdG8gdGhlIGRlY29kZXIgYmVmb3JlIGdpdmluZyB1cC4KKwkgKi8KKwlmb3IgKGYgPSAwOyBmIDwgNDsgZisrKSB7CisJCXByZXBhcmVfdG9fd2FpdCgmaXR2LT52c3luY193YWl0cSwgJndhaXQsCisJCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOworCQlpZiAoKHJlYWRfcmVnKElWVFZfUkVHX0RFQ19MSU5FX0ZJRUxEKSA+PiAxNikgPCAxMDApCisJCQlicmVhazsKKwkJc2NoZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKDI1KSk7CiAJfQorCWZpbmlzaF93YWl0KCZpdHYtPnZzeW5jX3dhaXRxLCAmd2FpdCk7CisKKwlpZiAoZiA9PSA0KQorCQlJVlRWX1dBUk4oIk1vZGUgY2hhbmdlIGZhaWxlZCB0byBzeW5jIHRvIGRlY29kZXJcbiIpOworCisJaXZ0dl92YXBpKGl0diwgQ1gyMzQxWF9ERUNfU0VUX1NUQU5EQVJELCAxLCBpdHYtPmlzX291dF81MGh6KTsKKwlpdHYtPm1haW5fcmVjdC5sZWZ0ID0gMDsKKwlpdHYtPm1haW5fcmVjdC50b3AgPSAwOworCWl0di0+bWFpbl9yZWN0LndpZHRoID0gNzIwOworCWl0di0+bWFpbl9yZWN0LmhlaWdodCA9IGl0di0+aXNfb3V0XzUwaHogPyA1NzYgOiA0ODA7CisJaXZ0dl92YXBpKGl0diwgQ1gyMzQxWF9PU0RfU0VUX0ZSQU1FQlVGRkVSX1dJTkRPVywgNCwKKwkJNzIwLCBpdHYtPm1haW5fcmVjdC5oZWlnaHQsIDAsIDApOworCXlpLT5tYWluX3JlY3QgPSBpdHYtPm1haW5fcmVjdDsKKwlpZiAoIWl0di0+b3NkX2luZm8pIHsKKwkJeWktPm9zZF9mdWxsX3cgPSA3MjA7CisJCXlpLT5vc2RfZnVsbF9oID0gaXR2LT5pc19vdXRfNTBoeiA/IDU3NiA6IDQ4MDsKKwl9Cit9CisKK2ludCBpdnR2X3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdjRsMl9zdGRfaWQgKnN0ZCkKK3sKKwlzdHJ1Y3QgaXZ0diAqaXR2ID0gZmgyaWQoZmgpLT5pdHY7CisKKwlpZiAoKCpzdGQgJiBWNEwyX1NURF9BTEwpID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCpzdGQgPT0gaXR2LT5zdGQpCisJCXJldHVybiAwOworCisJaWYgKHRlc3RfYml0KElWVFZfRl9JX1JBRElPX1VTRVIsICZpdHYtPmlfZmxhZ3MpIHx8CisJICAgIGF0b21pY19yZWFkKCZpdHYtPmNhcHR1cmluZykgPiAwIHx8CisJICAgIGF0b21pY19yZWFkKCZpdHYtPmRlY29kaW5nKSA+IDApIHsKKwkJLyogU3dpdGNoaW5nIHN0YW5kYXJkIHdvdWxkIG1lc3Mgd2l0aCBhbHJlYWR5IHJ1bm5pbmcKKwkJICAgc3RyZWFtcywgcHJldmVudCB0aGF0IGJ5IHJldHVybmluZyBFQlVTWS4gKi8KKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlJVlRWX0RFQlVHX0lORk8oIlN3aXRjaGluZyBzdGFuZGFyZCB0byAlbGx4LlxuIiwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylpdHYtPnN0ZCk7CisKKwlpdnR2X3Nfc3RkX2VuYyhpdHYsIHN0ZCk7CisJaWYgKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpCisJCWl2dHZfc19zdGRfZGVjKGl0diwgc3RkKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuaAppbmRleCA1OGYwMDM0Li44OTE4NWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmgKQEAgLTI3LDcgKzI3LDggQEAKIHZvaWQgaXZ0dl9zZXRfb3NkX2FscGhhKHN0cnVjdCBpdnR2ICppdHYpOwogaW50IGl2dHZfc2V0X3NwZWVkKHN0cnVjdCBpdnR2ICppdHYsIGludCBzcGVlZCk7CiB2b2lkIGl2dHZfc2V0X2Z1bmNzKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpOwotaW50IGl2dHZfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB2NGwyX3N0ZF9pZCAqc3RkKTsKK3ZvaWQgaXZ0dl9zX3N0ZF9lbmMoc3RydWN0IGl2dHYgKml0diwgdjRsMl9zdGRfaWQgKnN0ZCk7Cit2b2lkIGl2dHZfc19zdGRfZGVjKHN0cnVjdCBpdnR2ICppdHYsIHY0bDJfc3RkX2lkICpzdGQpOwogaW50IGl2dHZfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKnZmKTsKIGludCBpdnR2X3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgaW5wKTsKIGxvbmcgaXZ0dl92NGwyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMKaW5kZXggOTQyNjgzMy4uZTc3OTRkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYwpAQCAtNTg5LDcgKzU4OSw3IEBACiAJCXY0bDJfc3ViZGV2X2NhbGwoaXR2LT5zZF9hdWRpbywgYXVkaW8sIHNfc3RyZWFtLCAxKTsKIAkJLyogQXZvaWQgdW5wcmVkaWN0YWJsZSBQQ0kgYnVzIGhhbmcgLSBkaXNhYmxlIHZpZGVvIGNsb2NrcyAqLwogCQl2NGwyX3N1YmRldl9jYWxsKGl0di0+c2RfdmlkZW8sIHZpZGVvLCBzX3N0cmVhbSwgMCk7Ci0JCWl2dHZfbXNsZWVwX3RpbWVvdXQoMzAwLCAxKTsKKwkJaXZ0dl9tc2xlZXBfdGltZW91dCgzMDAsIDApOwogCQlpdnR2X3ZhcGkoaXR2LCBDWDIzNDFYX0VOQ19JTklUSUFMSVpFX0lOUFVULCAwKTsKIAkJdjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX3ZpZGVvLCB2aWRlbywgc19zdHJlYW0sIDEpOwogCX0KQEAgLTgzNCw3ICs4MzQsNyBAQAogCQl9CiAKIAkJLyogSGFuZGxlIGFueSBwZW5kaW5nIGludGVycnVwdHMgKi8KLQkJaXZ0dl9tc2xlZXBfdGltZW91dCgxMDAsIDEpOworCQlpdnR2X21zbGVlcF90aW1lb3V0KDEwMCwgMCk7CiAJfQogCiAJYXRvbWljX2RlYygmaXR2LT5jYXB0dXJpbmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdmJpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di12YmkuYwppbmRleCBiNmViNTFjLi4yOTNkYjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di12YmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di12YmkuYwpAQCAtNzEsNyArNzEsNyBAQAogCSAgIFR1cm5pbmcgdGhpcyBzaWduYWwgb24gYW5kIG9mZiBjYW4gY29uZnVzZSBjZXJ0YWluCiAJICAgVFZzLiBBcyBmYXIgYXMgSSBjYW4gdGVsbCB0aGVyZSBpcyBubyByZWFzb24gbm90IHRvCiAJICAgdHJhbnNtaXQgdGhpcyBzaWduYWwuICovCi0JaWYgKChpdHYtPnN0ZCAmIFY0TDJfU1REXzYyNV81MCkgJiYgIWVuYWJsZWQpIHsKKwlpZiAoKGl0di0+c3RkX291dCAmIFY0TDJfU1REXzYyNV81MCkgJiYgIWVuYWJsZWQpIHsKIAkJZW5hYmxlZCA9IDE7CiAJCW1vZGUgPSAweDA4OyAgLyogNHgzIGZ1bGwgZm9ybWF0ICovCiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHZmYi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHZmYi5jCmluZGV4IDE3MjQ3NDUuLjZiN2M5YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2ZmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0dmZiLmMKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCiBzdGF0aWMgaW50IGl2dHZmYl9zZXRfZGlzcGxheV93aW5kb3coc3RydWN0IGl2dHYgKml0diwgc3RydWN0IHY0bDJfcmVjdCAqaXZ0dl93aW5kb3cpCiB7Ci0JaW50IG9zZF9oZWlnaHRfbGltaXQgPSBpdHYtPmlzXzUwaHogPyA1NzYgOiA0ODA7CisJaW50IG9zZF9oZWlnaHRfbGltaXQgPSBpdHYtPmlzX291dF81MGh6ID8gNTc2IDogNDgwOwogCiAJLyogT25seSBmYWlsIGlmIHJlc29sdXRpb24gdG9vIGhpZ2gsIG90aGVyd2lzZSBmdWRnZSB0aGUgc3RhcnQgY29vcmRzLiAqLwogCWlmICgoaXZ0dl93aW5kb3ctPmhlaWdodCA+IG9zZF9oZWlnaHRfbGltaXQpIHx8IChpdnR2X3dpbmRvdy0+d2lkdGggPiBJVlRWX09TRF9NQVhfV0lEVEgpKQpAQCAtNDcxLDkgKzQ3MSw5IEBACiAJCQl2YmxhbmsuZmxhZ3MgPSBGQl9WQkxBTktfSEFWRV9DT1VOVCB8RkJfVkJMQU5LX0hBVkVfVkNPVU5UIHwKIAkJCQkJRkJfVkJMQU5LX0hBVkVfVlNZTkM7CiAJCQl0cmFjZSA9IHJlYWRfcmVnKElWVFZfUkVHX0RFQ19MSU5FX0ZJRUxEKSA+PiAxNjsKLQkJCWlmIChpdHYtPmlzXzUwaHogJiYgdHJhY2UgPiAzMTIpCisJCQlpZiAoaXR2LT5pc19vdXRfNTBoeiAmJiB0cmFjZSA+IDMxMikKIAkJCQl0cmFjZSAtPSAzMTI7Ci0JCQllbHNlIGlmIChpdHYtPmlzXzYwaHogJiYgdHJhY2UgPiAyNjIpCisJCQllbHNlIGlmIChpdHYtPmlzX291dF82MGh6ICYmIHRyYWNlID4gMjYyKQogCQkJCXRyYWNlIC09IDI2MjsKIAkJCWlmICh0cmFjZSA9PSAxKQogCQkJCXZibGFuay5mbGFncyB8PSBGQl9WQkxBTktfVlNZTkNJTkc7CkBAIC02NTYsNyArNjU2LDcgQEAKIAlJVlRWRkJfREVCVUdfSU5GTygiaXZ0dmZiX2NoZWNrX3ZhclxuIik7CiAKIAkvKiBTZXQgYmFzZSByZWZlcmVuY2VzIGZvciBtb2RlIGNhbGNzLiAqLwotCWlmIChpdHYtPmlzXzUwaHopIHsKKwlpZiAoaXR2LT5pc19vdXRfNTBoeikgewogCQlwaXhjbG9jayA9IDg0MzE2OwogCQlobGltaXQgPSA3NzY7CiAJCXZsaW1pdCA9IDU5MTsKQEAgLTc4NCwxMiArNzg0LDEyIEBACiAJICAgSWYgdGhlIG1hcmdpbnMgYXJlIHRvbyBsYXJnZSwganVzdCBjZW50ZXIgdGhlIHNjcmVlbgogCSAgIChlbmZvcmNpbmcgbWFyZ2lucyBjYXVzZXMgdG9vIG1hbnkgcHJvYmxlbXMpICovCiAKLQlpZiAodmFyLT5sZWZ0X21hcmdpbiArIHZhci0+eHJlcyA+IElWVFZfT1NEX01BWF9XSURUSCArIDEpIHsKKwlpZiAodmFyLT5sZWZ0X21hcmdpbiArIHZhci0+eHJlcyA+IElWVFZfT1NEX01BWF9XSURUSCArIDEpCiAJCXZhci0+bGVmdF9tYXJnaW4gPSAxICsgKChJVlRWX09TRF9NQVhfV0lEVEggLSB2YXItPnhyZXMpIC8gMik7Ci0JfQotCWlmICh2YXItPnVwcGVyX21hcmdpbiArIHZhci0+eXJlcyA+IChpdHYtPmlzXzUwaHogPyA1NzcgOiA0ODEpKSB7Ci0JCXZhci0+dXBwZXJfbWFyZ2luID0gMSArICgoKGl0di0+aXNfNTBoeiA/IDU3NiA6IDQ4MCkgLSB2YXItPnlyZXMpIC8gMik7Ci0JfQorCisJaWYgKHZhci0+dXBwZXJfbWFyZ2luICsgdmFyLT55cmVzID4gKGl0di0+aXNfb3V0XzUwaHogPyA1NzcgOiA0ODEpKQorCQl2YXItPnVwcGVyX21hcmdpbiA9IDEgKyAoKChpdHYtPmlzX291dF81MGh6ID8gNTc2IDogNDgwKSAtCisJCQl2YXItPnlyZXMpIC8gMik7CiAKIAkvKiBNYWludGFpbiBvdmVyYWxsICdzaXplJyBmb3IgYSBjb25zdGFudCByZWZyZXNoIHJhdGUgKi8KIAl2YXItPnJpZ2h0X21hcmdpbiA9IGhsaW1pdCAtIHZhci0+bGVmdF9tYXJnaW4gLSB2YXItPnhyZXM7CkBAIC04MzYsNyArODM2LDEyIEBACiAJdTMyIG9zZF9wYW5faW5kZXg7CiAJc3RydWN0IGl2dHYgKml0diA9IChzdHJ1Y3QgaXZ0diAqKSBpbmZvLT5wYXI7CiAKLQlvc2RfcGFuX2luZGV4ID0gKHZhci0+eG9mZnNldCArICh2YXItPnlvZmZzZXQgKiB2YXItPnhyZXNfdmlydHVhbCkpKnZhci0+Yml0c19wZXJfcGl4ZWwvODsKKwlpZiAodmFyLT55b2Zmc2V0ICsgaW5mby0+dmFyLnlyZXMgPiBpbmZvLT52YXIueXJlc192aXJ0dWFsIHx8CisJICAgIHZhci0+eG9mZnNldCArIGluZm8tPnZhci54cmVzID4gaW5mby0+dmFyLnhyZXNfdmlydHVhbCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlvc2RfcGFuX2luZGV4ID0gdmFyLT55b2Zmc2V0ICogaW5mby0+Zml4LmxpbmVfbGVuZ3RoCisJCSAgICAgICsgdmFyLT54b2Zmc2V0ICogaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsIC8gODsKIAl3cml0ZV9yZWcob3NkX3Bhbl9pbmRleCwgMHgwMkEwQyk7CiAKIAkvKiBQYXNzIHRoaXMgaW5mbyBiYWNrIHRoZSB5dXYgaGFuZGxlciAqLwpAQCAtMTAwMywxOSArMTAwOCwyMSBAQAogCS8qIEhhcmR3YXJlIGNvb3JkcyBzdGFydCBhdCAwLCB1c2VyIGNvb3JkcyBzdGFydCBhdCAxLiAqLwogCW9zZF9sZWZ0LS07CiAKLQlzdGFydF93aW5kb3cubGVmdCA9IG9zZF9sZWZ0ID49IDAgPyBvc2RfbGVmdCA6ICgoSVZUVl9PU0RfTUFYX1dJRFRIIC0gc3RhcnRfd2luZG93LndpZHRoKSAvIDIpOworCXN0YXJ0X3dpbmRvdy5sZWZ0ID0gb3NkX2xlZnQgPj0gMCA/CisJCSBvc2RfbGVmdCA6ICgoSVZUVl9PU0RfTUFYX1dJRFRIIC0gc3RhcnRfd2luZG93LndpZHRoKSAvIDIpOwogCiAJb2ktPmRpc3BsYXlfYnl0ZV9zdHJpZGUgPQogCQkJc3RhcnRfd2luZG93LndpZHRoICogb2ktPmJ5dGVzX3Blcl9waXhlbDsKIAogCS8qIFZlcnRpY2FsIHNpemUgJiBwb3NpdGlvbiAqLwogCi0JbWF4X2hlaWdodCA9IGl0di0+aXNfNTBoeiA/IDU3NiA6IDQ4MDsKKwltYXhfaGVpZ2h0ID0gaXR2LT5pc19vdXRfNTBoeiA/IDU3NiA6IDQ4MDsKIAogCWlmIChvc2RfeXJlcyA+IG1heF9oZWlnaHQpCiAJCW9zZF95cmVzID0gbWF4X2hlaWdodDsKIAotCXN0YXJ0X3dpbmRvdy5oZWlnaHQgPSBvc2RfeXJlcyA/IG9zZF95cmVzIDogaXR2LT5pc181MGh6ID8gNDgwIDogNDAwOworCXN0YXJ0X3dpbmRvdy5oZWlnaHQgPSBvc2RfeXJlcyA/CisJCW9zZF95cmVzIDogaXR2LT5pc19vdXRfNTBoeiA/IDQ4MCA6IDQwMDsKIAogCS8qIENoZWNrIHZlcnRpY2FsIHN0YXJ0IChvc2RfdXBwZXIpLiAqLwogCWlmIChvc2RfdXBwZXIgKyBzdGFydF93aW5kb3cuaGVpZ2h0ID4gbWF4X2hlaWdodCArIDEpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcC5jCmluZGV4IDQ3MmE2OTMuLmM5ZmQwNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3AuYwpAQCAtMzkxLDcgKzM5MSw3IEBACiAJfTsKIAlpbnQgaTsKIAotCWRldl9kYmcoaXNwLT5kZXYsICIiKTsKKwlkZXZfZGJnKGlzcC0+ZGV2LCAiSVNQIElSUTogIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShuYW1lKTsgaSsrKSB7CiAJCWlmICgoMSA8PCBpKSAmIGlycXN0YXR1cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKaW5kZXggMzk4ODY0My4uNGU0ZDQxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKQEAgLTE1MTIsNyArMTUxMiw3IEBACiAgKi8KIHN0YXRpYyBpbnQgc29jX2NhbWVyYV92aWRlb19zdGFydChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKLQlzdHJ1Y3QgZGV2aWNlX3R5cGUgKnR5cGUgPSBpY2QtPnZkZXYtPmRldi50eXBlOworCWNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSAqdHlwZSA9IGljZC0+dmRldi0+ZGV2LnR5cGU7CiAJaW50IHJldDsKIAogCWlmICghaWNkLT5kZXYucGFyZW50KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2VudGl0eS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2VudGl0eS5jCmluZGV4IGVkZTc4NTIuLmMzYWIwYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19lbnRpdHkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZW50aXR5LmMKQEAgLTMwLDcgKzMwLDcgQEAKIAlzdHJ1Y3QgdXZjX2VudGl0eSAqcmVtb3RlOwogCXVuc2lnbmVkIGludCBpOwogCXU4IHJlbW90ZV9wYWQ7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBlbnRpdHktPm51bV9wYWRzOyArK2kpIHsKIAkJc3RydWN0IG1lZGlhX2VudGl0eSAqc291cmNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYwppbmRleCAyNTllY2UwLi41YjJlMjE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYwpAQCAtNDM1LDYgKzQzNSw5IEBACiAJCXJlZyA9IHJlZ3VsYXRvcl9nZXQoaG9zdC0+ZGV2LCAidm1tY19hdXgiKTsKIAkJaG9zdC0+dmNjX2F1eCA9IElTX0VSUihyZWcpID8gTlVMTCA6IHJlZzsKIAorCQkvKiBGb3IgZU1NQyBkbyBub3QgcG93ZXIgb2ZmIHdoZW4gbm90IGluIHNsZWVwIHN0YXRlICovCisJCWlmIChtbWNfc2xvdChob3N0KS5ub19yZWd1bGF0b3Jfb2ZmX2luaXQpCisJCQlyZXR1cm4gMDsKIAkJLyoKIAkJKiBVR0xZIEhBQ0s6ICB3b3JrYXJvdW5kIHJlZ3VsYXRvciBmcmFtZXdvcmsgYnVncy4KIAkJKiBXaGVuIHRoZSBib290bG9hZGVyIGxlYXZlcyBhIHN1cHBseSBhY3RpdmUsIGl0J3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDF0OTMuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0OTMuYwppbmRleCAxYTg0YjNlLi43MzE3ZDNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDkzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00MXQ5My5jCkBAIC0xODksNyArMTg5LDcgQEAKIAogc3RhdGljIGludCBfX2RldmV4aXQgbTQxdDkzX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewotCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShzcGkpOworCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKIAogCWlmIChydGMpCiAJCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKaW5kZXggNTVlOGY3Mi4uNTcwZDRkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCkBAIC00MTYsNyArNDE2LDcgQEAKIAogCS8qIHNwZWNpYWwgaGFuZGxpbmcgZm9yIG5vIHRhcmdldCBidWZmZXIgZW1wdHkgKi8KIAlpZiAoKCFxLT5pc19pbnB1dF9xICYmCi0JICAgIChxLT5zYmFsW3EtPmZpcnN0X3RvX2NoZWNrXS0+ZWxlbWVudFsxNV0uZmxhZ3MgJiAweGZmKSA9PSAweDEwKSkgeworCSAgICAocS0+c2JhbFtxLT5maXJzdF90b19jaGVja10tPmVsZW1lbnRbMTVdLnNmbGFncykgPT0gMHgxMCkpIHsKIAkJcXBlcmZfaW5jKHEsIHRhcmdldF9mdWxsKTsKIAkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgIk9VVEZVTEwgRlRDOiUwMngiLAogCQkJICAgICAgcS0+Zmlyc3RfdG9fY2hlY2spOwpAQCAtNDI3LDggKzQyNyw4IEBACiAJREJGX0VSUk9SKChxLT5pc19pbnB1dF9xKSA/ICJJTjolMmQiIDogIk9VVDolMmQiLCBxLT5ucik7CiAJREJGX0VSUk9SKCJGVEM6JTNkIEM6JTNkIiwgcS0+Zmlyc3RfdG9fY2hlY2ssIGNvdW50KTsKIAlEQkZfRVJST1IoIkYxNDolMnggRjE1OiUyeCIsCi0JCSAgcS0+c2JhbFtxLT5maXJzdF90b19jaGVja10tPmVsZW1lbnRbMTRdLmZsYWdzICYgMHhmZiwKLQkJICBxLT5zYmFsW3EtPmZpcnN0X3RvX2NoZWNrXS0+ZWxlbWVudFsxNV0uZmxhZ3MgJiAweGZmKTsKKwkJICBxLT5zYmFsW3EtPmZpcnN0X3RvX2NoZWNrXS0+ZWxlbWVudFsxNF0uc2ZsYWdzLAorCQkgIHEtPnNiYWxbcS0+Zmlyc3RfdG9fY2hlY2tdLT5lbGVtZW50WzE1XS5zZmxhZ3MpOwogCiAJLyoKIAkgKiBJbnRlcnJ1cHRzIG1heSBiZSBhdm9pZGVkIGFzIGxvbmcgYXMgdGhlIGVycm9yIGlzIHByZXNlbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oCmluZGV4IDU1YzZhYTEuLmQzY2VlMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaApAQCAtMzYxLDcgKzM2MSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IHFldGhfaXNfbGFzdF9zYmFsZShzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGUpCiB7Ci0JcmV0dXJuIChzYmFsZS0+ZmxhZ3MgJiBTQkFMX0ZMQUdTX0xBU1RfRU5UUlkpOworCXJldHVybiAoc2JhbGUtPmVmbGFncyAmIFNCQUxfRUZMQUdTX0xBU1RfRU5UUlkpOwogfQogCiBlbnVtIHFldGhfcWRpb19idWZmZXJfc3RhdGVzIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwppbmRleCA1MDM2NzhhLi5kZDA4ZjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCkBAIC04OTAsNyArODkwLDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJLyogaXMgUENJIGZsYWcgc2V0IG9uIGJ1ZmZlcj8gKi8KLQlpZiAoYnVmLT5idWZmZXItPmVsZW1lbnRbMF0uZmxhZ3MgJiAweDQwKQorCWlmIChidWYtPmJ1ZmZlci0+ZWxlbWVudFswXS5zZmxhZ3MgJiBTQkFMX1NGTEFHUzBfUENJX1JFUSkKIAkJYXRvbWljX2RlYygmcXVldWUtPnNldF9wY2lfZmxhZ3NfY291bnQpOwogCiAJc2tiID0gc2tiX2RlcXVldWUoJmJ1Zi0+c2tiX2xpc3QpOwpAQCAtOTA2LDkgKzkwNiwxMSBAQAogCQlidWYtPmlzX2hlYWRlcltpXSA9IDA7CiAJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLmxlbmd0aCA9IDA7CiAJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLmFkZHIgPSBOVUxMOwotCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtpXS5mbGFncyA9IDA7CisJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLmVmbGFncyA9IDA7CisJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLnNmbGFncyA9IDA7CiAJfQotCWJ1Zi0+YnVmZmVyLT5lbGVtZW50WzE1XS5mbGFncyA9IDA7CisJYnVmLT5idWZmZXItPmVsZW1lbnRbMTVdLmVmbGFncyA9IDA7CisJYnVmLT5idWZmZXItPmVsZW1lbnRbMTVdLnNmbGFncyA9IDA7CiAJYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCA9IDA7CiAJYXRvbWljX3NldCgmYnVmLT5zdGF0ZSwgUUVUSF9RRElPX0JVRl9FTVBUWSk7CiB9CkBAIC0yMzY4LDkgKzIzNzAsMTAgQEAKIAkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0ubGVuZ3RoID0gUEFHRV9TSVpFOwogCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtpXS5hZGRyID0gIHBvb2xfZW50cnktPmVsZW1lbnRzW2ldOwogCQlpZiAoaSA9PSBRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMoY2FyZCkgLSAxKQotCQkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uZmxhZ3MgPSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CisJCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtpXS5lZmxhZ3MgPSBTQkFMX0VGTEFHU19MQVNUX0VOVFJZOwogCQllbHNlCi0JCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtpXS5mbGFncyA9IDA7CisJCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtpXS5lZmxhZ3MgPSAwOworCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtpXS5zZmxhZ3MgPSAwOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTI3MTgsMTEgKzI3MjEsMTEgQEAKIAlpZiAocWRpb19lcnJvcikgewogCQlRRVRIX0NBUkRfVEVYVChjYXJkLCAyLCBkYmZ0ZXh0KTsKIAkJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDIsICIgRjE1PSUwMlgiLAotCQkJICAgICAgIGJ1Zi0+ZWxlbWVudFsxNV0uZmxhZ3MgJiAweGZmKTsKKwkJCSAgICAgICBidWYtPmVsZW1lbnRbMTVdLnNmbGFncyk7CiAJCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCAyLCAiIEYxND0lMDJYIiwKLQkJCSAgICAgICBidWYtPmVsZW1lbnRbMTRdLmZsYWdzICYgMHhmZik7CisJCQkgICAgICAgYnVmLT5lbGVtZW50WzE0XS5zZmxhZ3MpOwogCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgMiwgIiBxZXJyPSVYIiwgcWRpb19lcnJvcik7Ci0JCWlmICgoYnVmLT5lbGVtZW50WzE1XS5mbGFncyAmIDB4ZmYpID09IDB4MTIpIHsKKwkJaWYgKChidWYtPmVsZW1lbnRbMTVdLnNmbGFncykgPT0gMHgxMikgewogCQkJY2FyZC0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJcmV0dXJuIDA7CiAJCX0gZWxzZQpAQCAtMjc5OCw3ICsyODAxLDcgQEAKIHN0YXRpYyBpbnQgcWV0aF9oYW5kbGVfc2VuZF9lcnJvcihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAogCQlzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IHFkaW9fZXJyKQogewotCWludCBzYmFsZjE1ID0gYnVmZmVyLT5idWZmZXItPmVsZW1lbnRbMTVdLmZsYWdzICYgMHhmZjsKKwlpbnQgc2JhbGYxNSA9IGJ1ZmZlci0+YnVmZmVyLT5lbGVtZW50WzE1XS5zZmxhZ3M7CiAKIAlRRVRIX0NBUkRfVEVYVChjYXJkLCA2LCAiaGRzbmRlcnIiKTsKIAlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkgewpAQCAtMjkwNyw4ICsyOTEwLDggQEAKIAogCWZvciAoaSA9IGluZGV4OyBpIDwgaW5kZXggKyBjb3VudDsgKytpKSB7CiAJCWJ1ZiA9ICZxdWV1ZS0+YnVmc1tpICUgUURJT19NQVhfQlVGRkVSU19QRVJfUV07Ci0JCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2J1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwgLSAxXS5mbGFncyB8PQotCQkJCVNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKKwkJYnVmLT5idWZmZXItPmVsZW1lbnRbYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCAtIDFdLmVmbGFncyB8PQorCQkJCVNCQUxfRUZMQUdTX0xBU1RfRU5UUlk7CiAKIAkJaWYgKHF1ZXVlLT5jYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKQogCQkJY29udGludWU7CkBAIC0yOTIxLDcgKzI5MjQsNyBAQAogCQkJCS8qIGl0J3MgbGlrZWx5IHRoYXQgd2UnbGwgZ28gdG8gcGFja2luZwogCQkJCSAqIG1vZGUgc29vbiAqLwogCQkJCWF0b21pY19pbmMoJnF1ZXVlLT5zZXRfcGNpX2ZsYWdzX2NvdW50KTsKLQkJCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFswXS5mbGFncyB8PSAweDQwOworCQkJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50WzBdLnNmbGFncyB8PSBTQkFMX1NGTEFHUzBfUENJX1JFUTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWlmICghYXRvbWljX3JlYWQoJnF1ZXVlLT5zZXRfcGNpX2ZsYWdzX2NvdW50KSkgewpAQCAtMjkzNCw3ICsyOTM3LDcgQEAKIAkJCQkgKiBmdXJ0aGVyIHNlbmQgd2FzIHJlcXVlc3RlZCBieSB0aGUgc3RhY2sKIAkJCQkgKi8KIAkJCQlhdG9taWNfaW5jKCZxdWV1ZS0+c2V0X3BjaV9mbGFnc19jb3VudCk7Ci0JCQkJYnVmLT5idWZmZXItPmVsZW1lbnRbMF0uZmxhZ3MgfD0gMHg0MDsKKwkJCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFswXS5zZmxhZ3MgfD0gU0JBTF9TRkxBR1MwX1BDSV9SRVE7CiAJCQl9CiAJCX0KIAl9CkBAIC0zMTgwLDIwICszMTgzLDIwIEBACiAJCWlmICghbGVuZ3RoKSB7CiAJCQlpZiAoZmlyc3RfbGFwKQogCQkJCWlmIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKQotCQkJCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPQotCQkJCQkJU0JBTF9GTEFHU19GSVJTVF9GUkFHOworCQkJCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZWZsYWdzID0KKwkJCQkJCVNCQUxfRUZMQUdTX0ZJUlNUX0ZSQUc7CiAJCQkJZWxzZQotCQkJCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPSAwOworCQkJCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZWZsYWdzID0gMDsKIAkJCWVsc2UKLQkJCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPQotCQkJCSAgICBTQkFMX0ZMQUdTX01JRERMRV9GUkFHOworCQkJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5lZmxhZ3MgPQorCQkJCSAgICBTQkFMX0VGTEFHU19NSURETEVfRlJBRzsKIAkJfSBlbHNlIHsKIAkJCWlmIChmaXJzdF9sYXApCi0JCQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmZsYWdzID0KLQkJCQkgICAgU0JBTF9GTEFHU19GSVJTVF9GUkFHOworCQkJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5lZmxhZ3MgPQorCQkJCSAgICBTQkFMX0VGTEFHU19GSVJTVF9GUkFHOwogCQkJZWxzZQotCQkJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5mbGFncyA9Ci0JCQkJICAgIFNCQUxfRkxBR1NfTUlERExFX0ZSQUc7CisJCQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmVmbGFncyA9CisJCQkJICAgIFNCQUxfRUZMQUdTX01JRERMRV9GUkFHOwogCQl9CiAJCWRhdGEgKz0gbGVuZ3RoX2hlcmU7CiAJCWVsZW1lbnQrKzsKQEAgLTMyMDUsMTIgKzMyMDgsMTIgQEAKIAkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmFkZHIgPSAoY2hhciAqKXBhZ2VfdG9fcGh5cyhmcmFnLT5wYWdlKQogCQkJKyBmcmFnLT5wYWdlX29mZnNldDsKIAkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmxlbmd0aCA9IGZyYWctPnNpemU7Ci0JCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5mbGFncyA9IFNCQUxfRkxBR1NfTUlERExFX0ZSQUc7CisJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5lZmxhZ3MgPSBTQkFMX0VGTEFHU19NSURETEVfRlJBRzsKIAkJZWxlbWVudCsrOwogCX0KIAotCWlmIChidWZmZXItPmVsZW1lbnRbZWxlbWVudCAtIDFdLmZsYWdzKQotCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudCAtIDFdLmZsYWdzID0gU0JBTF9GTEFHU19MQVNUX0ZSQUc7CisJaWYgKGJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50IC0gMV0uZWZsYWdzKQorCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudCAtIDFdLmVmbGFncyA9IFNCQUxfRUZMQUdTX0xBU1RfRlJBRzsKIAkqbmV4dF9lbGVtZW50X3RvX2ZpbGwgPSBlbGVtZW50OwogfQogCkBAIC0zMjM0LDcgKzMyMzcsNyBAQAogCQkvKmZpbGwgZmlyc3QgYnVmZmVyIGVudHJ5IG9ubHkgd2l0aCBoZWFkZXIgaW5mb3JtYXRpb24gKi8KIAkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmFkZHIgPSBza2ItPmRhdGE7CiAJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5sZW5ndGggPSBoZHJfbGVuOwotCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPSBTQkFMX0ZMQUdTX0ZJUlNUX0ZSQUc7CisJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5lZmxhZ3MgPSBTQkFMX0VGTEFHU19GSVJTVF9GUkFHOwogCQlidWYtPm5leHRfZWxlbWVudF90b19maWxsKys7CiAJCXNrYi0+ZGF0YSArPSBoZHJfbGVuOwogCQlza2ItPmxlbiAgLT0gaGRyX2xlbjsKQEAgLTMyNDYsNyArMzI0OSw3IEBACiAJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5hZGRyID0gaGRyOwogCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0ubGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikgKwogCQkJCQkJCWhkX2xlbjsKLQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmZsYWdzID0gU0JBTF9GTEFHU19GSVJTVF9GUkFHOworCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZWZsYWdzID0gU0JBTF9FRkxBR1NfRklSU1RfRlJBRzsKIAkJYnVmLT5pc19oZWFkZXJbZWxlbWVudF0gPSAxOwogCQlidWYtPm5leHRfZWxlbWVudF90b19maWxsKys7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKaW5kZXggODUxMmI1Yy4uMDIyZmI2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCkBAIC02NDAsNyArNjQwLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnpmY3BfZnNmX3JlcV9jcmVhdGUoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywKLQkJCQkJCXUzMiBmc2ZfY21kLCB1MzIgc2J0eXBlLAorCQkJCQkJdTMyIGZzZl9jbWQsIHU4IHNidHlwZSwKIAkJCQkJCW1lbXBvb2xfdCAqcG9vbCkKIHsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcWRpby0+YWRhcHRlcjsKQEAgLTg0MSw3ICs4NDEsNyBAQAogCWlmICh6ZmNwX3FkaW9fc2JhbF9nZXQocWRpbykpCiAJCWdvdG8gb3V0OwogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfQUJPUlRfRkNQX0NNTkQsCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQsCisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9SRUFELAogCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5zY3NpX2Fib3J0KTsKIAlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJcmVxID0gTlVMTDsKQEAgLTEwMTIsNyArMTAxMiw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9TRU5EX0dFTkVSSUMsCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1dSSVRFX1JFQUQsIHBvb2wpOworCQkJCSAgU0JBTF9TRkxBR1MwX1RZUEVfV1JJVEVfUkVBRCwgcG9vbCk7CiAKIAlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJcmV0ID0gUFRSX0VSUihyZXEpOwpAQCAtMTExMCw3ICsxMTEwLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX1NFTkRfRUxTLAotCQkJCSAgU0JBTF9GTEFHUzBfVFlQRV9XUklURV9SRUFELCBOVUxMKTsKKwkJCQkgIFNCQUxfU0ZMQUdTMF9UWVBFX1dSSVRFX1JFQUQsIE5VTEwpOwogCiAJaWYgKElTX0VSUihyZXEpKSB7CiAJCXJldCA9IFBUUl9FUlIocmVxKTsKQEAgLTExNTYsNyArMTE1Niw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9FWENIQU5HRV9DT05GSUdfREFUQSwKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfUkVBRCwKKwkJCQkgIFNCQUxfU0ZMQUdTMF9UWVBFX1JFQUQsCiAJCQkJICBxZGlvLT5hZGFwdGVyLT5wb29sLmVycF9yZXEpOwogCiAJaWYgKElTX0VSUihyZXEpKSB7CkBAIC0xMTk4LDcgKzExOTgsNyBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0VYQ0hBTkdFX0NPTkZJR19EQVRBLAotCQkJCSAgU0JBTF9GTEFHUzBfVFlQRV9SRUFELCBOVUxMKTsKKwkJCQkgIFNCQUxfU0ZMQUdTMF9UWVBFX1JFQUQsIE5VTEwpOwogCiAJaWYgKElTX0VSUihyZXEpKSB7CiAJCXJldHZhbCA9IFBUUl9FUlIocmVxKTsKQEAgLTEyNTAsNyArMTI1MCw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9FWENIQU5HRV9QT1JUX0RBVEEsCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQsCisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9SRUFELAogCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKIAogCWlmIChJU19FUlIocmVxKSkgewpAQCAtMTI5Niw3ICsxMjk2LDcgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9FWENIQU5HRV9QT1JUX0RBVEEsCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQsIE5VTEwpOworCQkJCSAgU0JBTF9TRkxBR1MwX1RZUEVfUkVBRCwgTlVMTCk7CiAKIAlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJcmV0dmFsID0gUFRSX0VSUihyZXEpOwpAQCAtMTQxMiw3ICsxNDEyLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX09QRU5fUE9SVF9XSVRIX0RJRCwKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfUkVBRCwKKwkJCQkgIFNCQUxfU0ZMQUdTMF9UWVBFX1JFQUQsCiAJCQkJICBxZGlvLT5hZGFwdGVyLT5wb29sLmVycF9yZXEpOwogCiAJaWYgKElTX0VSUihyZXEpKSB7CkBAIC0xNDc4LDcgKzE0NzgsNyBAQAogCQlnb3RvIG91dDsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfQ0xPU0VfUE9SVCwKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfUkVBRCwKKwkJCQkgIFNCQUxfU0ZMQUdTMF9UWVBFX1JFQUQsCiAJCQkJICBxZGlvLT5hZGFwdGVyLT5wb29sLmVycF9yZXEpOwogCiAJaWYgKElTX0VSUihyZXEpKSB7CkBAIC0xNTUzLDcgKzE1NTMsNyBAQAogCQlnb3RvIG91dDsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfT1BFTl9QT1JUX1dJVEhfRElELAotCQkJCSAgU0JBTF9GTEFHUzBfVFlQRV9SRUFELAorCQkJCSAgU0JBTF9TRkxBR1MwX1RZUEVfUkVBRCwKIAkJCQkgIHFkaW8tPmFkYXB0ZXItPnBvb2wuZXJwX3JlcSk7CiAKIAlpZiAoSVNfRVJSKHJlcSkpIHsKQEAgLTE2MDYsNyArMTYwNiw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9DTE9TRV9QT1JULAotCQkJCSAgU0JBTF9GTEFHUzBfVFlQRV9SRUFELAorCQkJCSAgU0JBTF9TRkxBR1MwX1RZUEVfUkVBRCwKIAkJCQkgIHFkaW8tPmFkYXB0ZXItPnBvb2wuZXJwX3JlcSk7CiAKIAlpZiAoSVNfRVJSKHJlcSkpIHsKQEAgLTE2OTgsNyArMTY5OCw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9DTE9TRV9QSFlTSUNBTF9QT1JULAotCQkJCSAgU0JBTF9GTEFHUzBfVFlQRV9SRUFELAorCQkJCSAgU0JBTF9TRkxBR1MwX1RZUEVfUkVBRCwKIAkJCQkgIHFkaW8tPmFkYXB0ZXItPnBvb2wuZXJwX3JlcSk7CiAKIAlpZiAoSVNfRVJSKHJlcSkpIHsKQEAgLTE4MTIsNyArMTgxMiw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9PUEVOX0xVTiwKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfUkVBRCwKKwkJCQkgIFNCQUxfU0ZMQUdTMF9UWVBFX1JFQUQsCiAJCQkJICBhZGFwdGVyLT5wb29sLmVycF9yZXEpOwogCiAJaWYgKElTX0VSUihyZXEpKSB7CkBAIC0xOTAxLDcgKzE5MDEsNyBAQAogCQlnb3RvIG91dDsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfQ0xPU0VfTFVOLAotCQkJCSAgU0JBTF9GTEFHUzBfVFlQRV9SRUFELAorCQkJCSAgU0JBTF9TRkxBR1MwX1RZUEVfUkVBRCwKIAkJCQkgIHFkaW8tPmFkYXB0ZXItPnBvb2wuZXJwX3JlcSk7CiAKIAlpZiAoSVNfRVJSKHJlcSkpIHsKQEAgLTIxNjEsNyArMjE2MSw3IEBACiB7CiAJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxOwogCXN0cnVjdCBmY3BfY21uZCAqZmNwX2NtbmQ7Ci0JdW5zaWduZWQgaW50IHNidHlwZSA9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKKwl1OCBzYnR5cGUgPSBTQkFMX1NGTEFHUzBfVFlQRV9SRUFEOwogCWludCByZWFsX2J5dGVzLCByZXR2YWwgPSAtRUlPLCBkaXhfYnl0ZXMgPSAwOwogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHNjc2lfY21uZC0+ZGV2aWNlOwogCXN0cnVjdCB6ZmNwX3Njc2lfZGV2ICp6ZmNwX3NkZXYgPSBzZGV2X3RvX3pmY3Aoc2Rldik7CkBAIC0yMTgxLDcgKzIxODEsNyBAQAogCX0KIAogCWlmIChzY3NpX2NtbmQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCi0JCXNidHlwZSA9IFNCQUxfRkxBR1MwX1RZUEVfV1JJVEU7CisJCXNidHlwZSA9IFNCQUxfU0ZMQUdTMF9UWVBFX1dSSVRFOwogCiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9GQ1BfQ01ORCwKIAkJCQkgIHNidHlwZSwgYWRhcHRlci0+cG9vbC5zY3NpX3JlcSk7CkBAIC0yMjgwLDcgKzIyODAsNyBAQAogCQlnb3RvIG91dDsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfRkNQX0NNTkQsCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1dSSVRFLAorCQkJCSAgU0JBTF9TRkxBR1MwX1RZUEVfV1JJVEUsCiAJCQkJICBxZGlvLT5hZGFwdGVyLT5wb29sLnNjc2lfcmVxKTsKIAogCWlmIChJU19FUlIocmVxKSkgewpAQCAtMjMyOCwxNyArMjMyOCwxOCBAQAogCXN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8gPSBhZGFwdGVyLT5xZGlvOwogCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSA9IE5VTEw7CiAJc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9zdXBwb3J0ICpib3R0b207Ci0JaW50IGRpcmVjdGlvbiwgcmV0dmFsID0gLUVJTywgYnl0ZXM7CisJaW50IHJldHZhbCA9IC1FSU8sIGJ5dGVzOworCXU4IGRpcmVjdGlvbjsKIAogCWlmICghKGFkYXB0ZXItPmFkYXB0ZXJfZmVhdHVyZXMgJiBGU0ZfRkVBVFVSRV9DRkRDKSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApOwogCiAJc3dpdGNoIChmc2ZfY2ZkYy0+Y29tbWFuZCkgewogCWNhc2UgRlNGX1FUQ0JfRE9XTkxPQURfQ09OVFJPTF9GSUxFOgotCQlkaXJlY3Rpb24gPSBTQkFMX0ZMQUdTMF9UWVBFX1dSSVRFOworCQlkaXJlY3Rpb24gPSBTQkFMX1NGTEFHUzBfVFlQRV9XUklURTsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfUVRDQl9VUExPQURfQ09OVFJPTF9GSUxFOgotCQlkaXJlY3Rpb24gPSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CisJCWRpcmVjdGlvbiA9IFNCQUxfU0ZMQUdTMF9UWVBFX1JFQUQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwpAQCAtMjQxMyw3ICsyNDE0LDcgQEAKIAkJZnNmX3JlcS0+cWRpb19yZXEuc2JhbF9yZXNwb25zZSA9IHNiYWxfaWR4OwogCQl6ZmNwX2ZzZl9yZXFfY29tcGxldGUoZnNmX3JlcSk7CiAKLQkJaWYgKGxpa2VseShzYmFsZS0+ZmxhZ3MgJiBTQkFMX0ZMQUdTX0xBU1RfRU5UUlkpKQorCQlpZiAobGlrZWx5KHNiYWxlLT5lZmxhZ3MgJiBTQkFMX0VGTEFHU19MQVNUX0VOVFJZKSkKIAkJCWJyZWFrOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKaW5kZXggOThlOTdkOS4uZDljNDBlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogCiAJLyogc2V0IGxhc3QgZW50cnkgZmxhZyBpbiBjdXJyZW50IFNCQUxFIG9mIGN1cnJlbnQgU0JBTCAqLwogCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX2N1cnIocWRpbywgcV9yZXEpOwotCXNiYWxlLT5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CisJc2JhbGUtPmVmbGFncyB8PSBTQkFMX0VGTEFHU19MQVNUX0VOVFJZOwogCiAJLyogZG9uJ3QgZXhjZWVkIGxhc3QgYWxsb3dlZCBTQkFMICovCiAJaWYgKHFfcmVxLT5zYmFsX2xhc3QgPT0gcV9yZXEtPnNiYWxfbGltaXQpCkBAIC0xMzIsNyArMTMyLDcgQEAKIAogCS8qIHNldCBjaGFpbmluZyBmbGFnIGluIGZpcnN0IFNCQUxFIG9mIGN1cnJlbnQgU0JBTCAqLwogCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCBxX3JlcSk7Ci0Jc2JhbGUtPmZsYWdzIHw9IFNCQUxfRkxBR1MwX01PUkVfU0JBTFM7CisJc2JhbGUtPnNmbGFncyB8PSBTQkFMX1NGTEFHUzBfTU9SRV9TQkFMUzsKIAogCS8qIGNhbGN1bGF0ZSBpbmRleCBvZiBuZXh0IFNCQUwgKi8KIAlxX3JlcS0+c2JhbF9sYXN0Kys7CkBAIC0xNDcsNyArMTQ3LDcgQEAKIAogCS8qIHNldCBzdG9yYWdlLWJsb2NrIHR5cGUgZm9yIG5ldyBTQkFMICovCiAJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfY3VycihxZGlvLCBxX3JlcSk7Ci0Jc2JhbGUtPmZsYWdzIHw9IHFfcmVxLT5zYnR5cGU7CisJc2JhbGUtPnNmbGFncyB8PSBxX3JlcS0+c2J0eXBlOwogCiAJcmV0dXJuIHNiYWxlOwogfQpAQCAtMTc3LDcgKzE3Nyw3IEBACiAKIAkvKiBzZXQgc3RvcmFnZS1ibG9jayB0eXBlIGZvciB0aGlzIHJlcXVlc3QgKi8KIAlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgcV9yZXEpOwotCXNiYWxlLT5mbGFncyB8PSBxX3JlcS0+c2J0eXBlOworCXNiYWxlLT5zZmxhZ3MgfD0gcV9yZXEtPnNidHlwZTsKIAogCWZvciAoOyBzZzsgc2cgPSBzZ19uZXh0KHNnKSkgewogCQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9uZXh0KHFkaW8sIHFfcmVxKTsKQEAgLTM4NCw3ICszODQsOCBAQAogCWZvciAoY2MgPSAwOyBjYyA8IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7IGNjKyspIHsKIAkJc2JhbGUgPSAmKHFkaW8tPnJlc19xW2NjXS0+ZWxlbWVudFswXSk7CiAJCXNiYWxlLT5sZW5ndGggPSAwOwotCQlzYmFsZS0+ZmxhZ3MgPSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CisJCXNiYWxlLT5lZmxhZ3MgPSBTQkFMX0VGTEFHU19MQVNUX0VOVFJZOworCQlzYmFsZS0+c2ZsYWdzID0gMDsKIAkJc2JhbGUtPmFkZHIgPSBOVUxMOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uaAppbmRleCAyMjk3ZDhkLi41NGUyMmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uaApAQCAtNjcsNyArNjcsNyBAQAogICogQHFkaW9fb3V0Yl91c2FnZTogdXNhZ2Ugb2Ygb3V0Ym91bmQgcXVldWUKICAqLwogc3RydWN0IHpmY3BfcWRpb19yZXEgewotCXUzMglzYnR5cGU7CisJdTgJc2J0eXBlOwogCXU4CXNiYWxfbnVtYmVyOwogCXU4CXNiYWxfZmlyc3Q7CiAJdTgJc2JhbF9sYXN0OwpAQCAtMTE2LDcgKzExNiw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUKIHZvaWQgemZjcF9xZGlvX3JlcV9pbml0KHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sIHN0cnVjdCB6ZmNwX3FkaW9fcmVxICpxX3JlcSwKLQkJCXVuc2lnbmVkIGxvbmcgcmVxX2lkLCB1MzIgc2J0eXBlLCB2b2lkICpkYXRhLCB1MzIgbGVuKQorCQkJdW5zaWduZWQgbG9uZyByZXFfaWQsIHU4IHNidHlwZSwgdm9pZCAqZGF0YSwgdTMyIGxlbikKIHsKIAlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7CiAJaW50IGNvdW50ID0gbWluKGF0b21pY19yZWFkKCZxZGlvLT5yZXFfcV9mcmVlKSwKQEAgLTEzMSw3ICsxMzEsOCBAQAogCiAJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sIHFfcmVxKTsKIAlzYmFsZS0+YWRkciA9ICh2b2lkICopIHJlcV9pZDsKLQlzYmFsZS0+ZmxhZ3MgPSBTQkFMX0ZMQUdTMF9DT01NQU5EIHwgc2J0eXBlOworCXNiYWxlLT5lZmxhZ3MgPSAwOworCXNiYWxlLT5zZmxhZ3MgPSBTQkFMX1NGTEFHUzBfQ09NTUFORCB8IHNidHlwZTsKIAogCWlmICh1bmxpa2VseSghZGF0YSkpCiAJCXJldHVybjsKQEAgLTE3Myw3ICsxNzQsNyBAQAogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKIAogCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX2N1cnIocWRpbywgcV9yZXEpOwotCXNiYWxlLT5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CisJc2JhbGUtPmVmbGFncyB8PSBTQkFMX0VGTEFHU19MQVNUX0VOVFJZOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMgYi9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jCmluZGV4IDZmODZiYTAuLjk2OWNkZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYwpAQCAtMjk4LDcgKzI5OCw3IEBACiAJdW5zaWduZWQgaW50CQljb3VudCwgYzsKIAl1bnNpZ25lZCBsb25nCQliYXNlLCB0eF9yZWcsIHJ4X3JlZzsKIAlpbnQJCQl3b3JkX2xlbiwgZGF0YV90eXBlLCBlbGVtZW50X2NvdW50OwotCWludAkJCWVsZW1lbnRzOworCWludAkJCWVsZW1lbnRzID0gMDsKIAl1MzIJCQlsOwogCXU4CQkJKiByeDsKIAljb25zdCB1OAkJKiB0eDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3R0eV9idWZmZXIuYyBiL2RyaXZlcnMvdHR5L3R0eV9idWZmZXIuYwppbmRleCBmMWE3OTE4Li42YzliN2NkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS90dHlfYnVmZmVyLmMKKysrIGIvZHJpdmVycy90dHkvdHR5X2J1ZmZlci5jCkBAIC00MTMsOCArNDEzLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOwogCiAJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFRUWV9GTFVTSElORywgJnR0eS0+ZmxhZ3MpKSB7Ci0JCXN0cnVjdCB0dHlfYnVmZmVyICpoZWFkLCAqdGFpbCA9IHR0eS0+YnVmLnRhaWw7Ci0JCWludCBzZWVuX3RhaWwgPSAwOworCQlzdHJ1Y3QgdHR5X2J1ZmZlciAqaGVhZDsKIAkJd2hpbGUgKChoZWFkID0gdHR5LT5idWYuaGVhZCkgIT0gTlVMTCkgewogCQkJaW50IGNvdW50OwogCQkJY2hhciAqY2hhcl9idWY7CkBAIC00MjQsMTUgKzQyMyw2IEBACiAJCQlpZiAoIWNvdW50KSB7CiAJCQkJaWYgKGhlYWQtPm5leHQgPT0gTlVMTCkKIAkJCQkJYnJlYWs7Ci0JCQkJLyoKLQkJCQkgIFRoZXJlJ3MgYSBwb3NzaWJpbGl0eSB0dHkgbWlnaHQgZ2V0IG5ldyBidWZmZXIKLQkJCQkgIGFkZGVkIGR1cmluZyB0aGUgdW5sb2NrIHdpbmRvdyBiZWxvdy4gV2UgY291bGQKLQkJCQkgIGVuZCB1cCBzcGlubmluZyBpbiBoZXJlIGZvcmV2ZXIgaG9nZ2luZyB0aGUgQ1BVCi0JCQkJICBjb21wbGV0ZWx5LiBUbyBhdm9pZCB0aGlzIGxldCdzIGhhdmUgYSByZXN0IGVhY2gKLQkJCQkgIHRpbWUgd2UgcHJvY2Vzc2VkIHRoZSB0YWlsIGJ1ZmZlci4KLQkJCQkqLwotCQkJCWlmICh0YWlsID09IGhlYWQpCi0JCQkJCXNlZW5fdGFpbCA9IDE7CiAJCQkJdHR5LT5idWYuaGVhZCA9IGhlYWQtPm5leHQ7CiAJCQkJdHR5X2J1ZmZlcl9mcmVlKHR0eSwgaGVhZCk7CiAJCQkJY29udGludWU7CkBAIC00NDIsNyArNDMyLDcgQEAKIAkJCSAgIGxpbmUgZGlzY2lwbGluZSBhcyB3ZSB3YW50IHRvIGVtcHR5IHRoZSBxdWV1ZSAqLwogCQkJaWYgKHRlc3RfYml0KFRUWV9GTFVTSFBFTkRJTkcsICZ0dHktPmZsYWdzKSkKIAkJCQlicmVhazsKLQkJCWlmICghdHR5LT5yZWNlaXZlX3Jvb20gfHwgc2Vlbl90YWlsKQorCQkJaWYgKCF0dHktPnJlY2VpdmVfcm9vbSkKIAkJCQlicmVhazsKIAkJCWlmIChjb3VudCA+IHR0eS0+cmVjZWl2ZV9yb29tKQogCQkJCWNvdW50ID0gdHR5LT5yZWNlaXZlX3Jvb207CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKaW5kZXggMzk1YTM0Ny4uZGFjNzY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwpAQCAtMTUzMCw2ICsxNTMwLDggQEAKIAl7IE5PS0lBX1BDU1VJVEVfQUNNX0lORk8oMHgwNGNlKSwgfSwgLyogTm9raWEgRTkwICovCiAJeyBOT0tJQV9QQ1NVSVRFX0FDTV9JTkZPKDB4MDFkNCksIH0sIC8qIE5va2lhIEU1NSAqLwogCXsgTk9LSUFfUENTVUlURV9BQ01fSU5GTygweDAzMDIpLCB9LCAvKiBOb2tpYSBOOCAqLworCXsgTk9LSUFfUENTVUlURV9BQ01fSU5GTygweDAzMzUpLCB9LCAvKiBOb2tpYSBFNyAqLworCXsgTk9LSUFfUENTVUlURV9BQ01fSU5GTygweDAzY2QpLCB9LCAvKiBOb2tpYSBDNyAqLwogCXsgU0FNU1VOR19QQ1NVSVRFX0FDTV9JTkZPKDB4NjY1MSksIH0sIC8qIFNhbXN1bmcgR1RpODUxMCAoSU5OT1Y4KSAqLwogCiAJLyogTk9URTogbm9uLU5va2lhIENPTU0vQUNNLzB4ZmYgaXMgbGlrZWx5IE1TRlQgUk5ESVMuLi4gTk9UIGEgbW9kZW0hICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCA3OWE1OGMzLi45MGFlMTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTMzOSw3ICszMzksOCBAQAogewogCWludCBpLCBzdGF0dXMgPSAtRVRJTUVET1VUOwogCi0JZm9yIChpID0gMDsgaSA8IFVTQl9TVFNfUkVUUklFUyAmJiBzdGF0dXMgPT0gLUVUSU1FRE9VVDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IFVTQl9TVFNfUkVUUklFUyAmJgorCQkJKHN0YXR1cyA9PSAtRVRJTUVET1VUIHx8IHN0YXR1cyA9PSAtRVBJUEUpOyBpKyspIHsKIAkJc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnKGhkZXYsIHVzYl9yY3ZjdHJscGlwZShoZGV2LCAwKSwKIAkJCVVTQl9SRVFfR0VUX1NUQVRVUywgVVNCX0RJUl9JTiB8IFVTQl9SVF9IVUIsIDAsIDAsCiAJCQlkYXRhLCBzaXplb2YoKmRhdGEpLCBVU0JfU1RTX1RJTUVPVVQpOwpAQCAtMzU1LDcgKzM1Niw4IEBACiB7CiAJaW50IGksIHN0YXR1cyA9IC1FVElNRURPVVQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgVVNCX1NUU19SRVRSSUVTICYmIHN0YXR1cyA9PSAtRVRJTUVET1VUOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgVVNCX1NUU19SRVRSSUVTICYmCisJCQkoc3RhdHVzID09IC1FVElNRURPVVQgfHwgc3RhdHVzID09IC1FUElQRSk7IGkrKykgewogCQlzdGF0dXMgPSB1c2JfY29udHJvbF9tc2coaGRldiwgdXNiX3JjdmN0cmxwaXBlKGhkZXYsIDApLAogCQkJVVNCX1JFUV9HRVRfU1RBVFVTLCBVU0JfRElSX0lOIHwgVVNCX1JUX1BPUlQsIDAsIHBvcnQxLAogCQkJZGF0YSwgc2l6ZW9mKCpkYXRhKSwgVVNCX1NUU19USU1FT1VUKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYwppbmRleCAxYjEyNWMyLi4yMjc4ZGFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jCkBAIC0zODksNyArMzg5LDYgQEAKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlpZiAoIWVycm9yKQogCQlkX2RlbGV0ZShkZW50cnkpOwotCWRwdXQoZGVudHJ5KTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKaW5kZXggNTg0NTZkMS4uMDI5ZTI4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKQEAgLTYzMiwxMyArNjMyLDEwIEBACiAKIGVuZGNob2ljZQogCisjIFNlbGVjdGVkIGJ5IFVEQyBkcml2ZXJzIHRoYXQgc3VwcG9ydCBoaWdoLXNwZWVkIG9wZXJhdGlvbi4KIGNvbmZpZyBVU0JfR0FER0VUX0RVQUxTUEVFRAogCWJvb2wKIAlkZXBlbmRzIG9uIFVTQl9HQURHRVQKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBNZWFucyB0aGF0IGdhZGdldCBkcml2ZXJzIHNob3VsZCBpbmNsdWRlIGV4dHJhIGRlc2NyaXB0b3JzCi0JICBhbmQgY29kZSB0byBoYW5kbGUgZHVhbC1zcGVlZCBjb250cm9sbGVycy4KIAogIwogIyBVU0IgR2FkZ2V0IERyaXZlcnMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jCmluZGV4IDZlNDJhYWIuLjk1ZTgxMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYwpAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCmluZGV4IDQxZGMwOTMuLmY0NjkwZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2NoOS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9nYWRnZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwppbmRleCA2MWZmOTI3Li5kM2RjYWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCkBAIC0xOTA2LDYgKzE5MDYsNyBAQAogCWlmICghaGNkKQogCQlyZXR1cm4gLUVOT01FTTsKIAl0aGVfY29udHJvbGxlciA9IGhjZF90b19kdW1teSAoaGNkKTsKKwloY2QtPmhhc190dCA9IDE7CiAKIAlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIDAsIDApOwogCWlmIChyZXR2YWwgIT0gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYwppbmRleCBhMDEzODNmLi5hNTY4NzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYwpAQCAtNDMxLDggKzQzMSwxMCBAQAogCiAJLyogaGFsdCBhbnkgZW5kcG9pbnQgYnkgZG9pbmcgYSAid3JvbmcgZGlyZWN0aW9uIiBpL28gY2FsbCAqLwogCWlmICghdXNiX2VuZHBvaW50X2Rpcl9pbigmZGF0YS0+ZGVzYykpIHsKLQkJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoJmRhdGEtPmRlc2MpKQorCQlpZiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYygmZGF0YS0+ZGVzYykpIHsKKwkJCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCQlEQkcgKGRhdGEtPmRldiwgIiVzIGhhbHRcbiIsIGRhdGEtPm5hbWUpOwogCQlzcGluX2xvY2tfaXJxICgmZGF0YS0+ZGV2LT5sb2NrKTsKIAkJaWYgKGxpa2VseSAoZGF0YS0+ZXAgIT0gTlVMTCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbXZfdWRjX2NvcmUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9tdl91ZGNfY29yZS5jCmluZGV4IGI2MmIyNjQuLmIxYTgxNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9tdl91ZGNfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9tdl91ZGNfY29yZS5jCkBAIC0yMDgzLDcgKzIwODMsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IG12X3VkY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9kZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgbXZfdWRjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqX2RldikKIHsKIAlzdHJ1Y3QgbXZfdWRjICp1ZGMgPSB0aGVfY29udHJvbGxlcjsKIApAQCAtMjA5Miw3ICsyMDkyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtdl91ZGNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IG12X3VkY19yZXN1bWUoc3RydWN0IGRldmljZSAqX2RldikKIHsKIAlzdHJ1Y3QgbXZfdWRjICp1ZGMgPSB0aGVfY29udHJvbGxlcjsKIAlpbnQgcmV0dmFsOwpAQCAtMjEwMCw3ICsyMTAwLDcgQEAKIAlyZXR2YWwgPSBtdl91ZGNfcGh5X2luaXQodWRjLT5waHlfcmVncyk7CiAJaWYgKHJldHZhbCkgewogCQlkZXZfZXJyKF9kZXYsICJwaHkgaW5pdGlhbGl6YXRpb24gZXJyb3IgJWRcbiIsIHJldHZhbCk7Ci0JCWdvdG8gZXJyb3I7CisJCXJldHVybiByZXR2YWw7CiAJfQogCXVkY19yZXNldCh1ZGMpOwogCWVwMF9yZXNldCh1ZGMpOwpAQCAtMjEyMiw3ICsyMTIyLDcgQEAKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJCS5uYW1lCT0gInB4YS11Mm8iLAogI2lmZGVmIENPTkZJR19QTQotCQkucG0JPSBtdl91ZGNfcG1fb3BzLAorCQkucG0JPSAmbXZfdWRjX3BtX29wcywKICNlbmRpZgogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKaW5kZXggMjQ2OTZmNy4uNDc2ZDg4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCkBAIC02Myw2ICs2Myw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2NoOS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9nYWRnZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI1eF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyNXhfdWRjLmMKaW5kZXggMzY1YzAyZi4uNzc0NTQ1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI1eF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjV4X3VkYy5jCkBAIC0yMjE2LDcgKzIyMTYsNiBAQAogCQlpZiAocmV0dmFsICE9IDApIHsKIAkJCXByX2VycigiJXM6IGNhbid0IGdldCBpcnEgJWksIGVyciAlZFxuIiwKIAkJCQlkcml2ZXJfbmFtZSwgTFVCQk9DS19VU0JfRElTQ19JUlEsIHJldHZhbCk7Ci1sdWJib2NrX2ZhaWwwOgogCQkJZ290byBlcnJfaXJxX2x1YjsKIAkJfQogCQlyZXR2YWwgPSByZXF1ZXN0X2lycShMVUJCT0NLX1VTQl9JUlEsCkBAIC0yMjI2LDcgKzIyMjUsNiBAQAogCQlpZiAocmV0dmFsICE9IDApIHsKIAkJCXByX2VycigiJXM6IGNhbid0IGdldCBpcnEgJWksIGVyciAlZFxuIiwKIAkJCQlkcml2ZXJfbmFtZSwgTFVCQk9DS19VU0JfSVJRLCByZXR2YWwpOwotCQkJZnJlZV9pcnEoTFVCQk9DS19VU0JfRElTQ19JUlEsIGRldik7CiAJCQlnb3RvIGx1YmJvY2tfZmFpbDA7CiAJCX0KIAl9IGVsc2UKQEAgLTIyMzYsMTAgKzIyMzQsMTEgQEAKIAlyZXR1cm4gMDsKIAogI2lmZGVmCUNPTkZJR19BUkNIX0xVQkJPQ0sKK2x1YmJvY2tfZmFpbDA6CiAJZnJlZV9pcnEoTFVCQk9DS19VU0JfRElTQ19JUlEsIGRldik7CiAgZXJyX2lycV9sdWI6Ci0jZW5kaWYKIAlmcmVlX2lycShpcnEsIGRldik7CisjZW5kaWYKICBlcnJfaXJxMToKIAlpZiAoZ3Bpb19pc192YWxpZChkZXYtPm1hY2gtPmdwaW9fcHVsbHVwKSkKIAkJZ3Bpb19mcmVlKGRldi0+bWFjaC0+Z3Bpb19wdWxsdXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jCmluZGV4IGFjYjljYzQuLjBkZmVlMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHNvdGcuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzb3RnLmMKQEAgLTI2ODAsOSArMjY4MCw5IEBACiAKIAl3cml0ZWwoMCwgaHNvdGctPnJlZ3MgKyBTM0NfREFJTlRNU0spOwogCi0JZGV2X2luZm8oaHNvdGctPmRldiwgIkVQMDogRElFUENUTDA9MHglMDh4LCBET0VQQ1RMMD0weCUwOHhcbiIsCi0JCSByZWFkbChoc290Zy0+cmVncyArIFMzQ19ESUVQQ1RMMCksCi0JCSByZWFkbChoc290Zy0+cmVncyArIFMzQ19ET0VQQ1RMMCkpOworCWRldl9kYmcoaHNvdGctPmRldiwgIkVQMDogRElFUENUTDA9MHglMDh4LCBET0VQQ1RMMD0weCUwOHhcbiIsCisJCXJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0RJRVBDVEwwKSwKKwkJcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfRE9FUENUTDApKTsKIAogCS8qIGVuYWJsZSBpbiBhbmQgb3V0IGVuZHBvaW50IGludGVycnVwdHMgKi8KIAlzM2NfaHNvdGdfZW5fZ3NpbnQoaHNvdGcsIFMzQ19HSU5UU1RTX09FUEludCB8IFMzQ19HSU5UU1RTX0lFUEludCk7CkBAIC0yNzAxLDcgKzI3MDEsNyBAQAogCXVkZWxheSgxMCk7ICAvKiBzZWUgb3Blbmlib290ICovCiAJX19iaWMzMihoc290Zy0+cmVncyArIFMzQ19EQ1RMLCBTM0NfRENUTF9QV1JPblByZ0RvbmUpOwogCi0JZGV2X2luZm8oaHNvdGctPmRldiwgIkRDVEw9MHglMDh4XG4iLCByZWFkbChoc290Zy0+cmVncyArIFMzQ19EQ1RMKSk7CisJZGV2X2RiZyhoc290Zy0+ZGV2LCAiRENUTD0weCUwOHhcbiIsIHJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0RDVEwpKTsKIAogCS8qIFMzQ19EeEVQQ1RMX1VTQkFjdEVwIHNheXMgUk8gaW4gbWFudWFsLCBidXQgc2VlbXMgdG8gYmUgc2V0IGJ5CiAJICAgd3JpdGluZyB0byB0aGUgRVBDVEwgcmVnaXN0ZXIuLiAqLwpAQCAtMjcyMSw5ICsyNzIxLDkgQEAKIAogCXMzY19oc290Z19lbnF1ZXVlX3NldHVwKGhzb3RnKTsKIAotCWRldl9pbmZvKGhzb3RnLT5kZXYsICJFUDA6IERJRVBDVEwwPTB4JTA4eCwgRE9FUENUTDA9MHglMDh4XG4iLAotCQkgcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfRElFUENUTDApLAotCQkgcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfRE9FUENUTDApKTsKKwlkZXZfZGJnKGhzb3RnLT5kZXYsICJFUDA6IERJRVBDVEwwPTB4JTA4eCwgRE9FUENUTDA9MHglMDh4XG4iLAorCQlyZWFkbChoc290Zy0+cmVncyArIFMzQ19ESUVQQ1RMMCksCisJCXJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0RPRVBDVEwwKSk7CiAKIAkvKiBjbGVhciBnbG9iYWwgTkFLcyAqLwogCXdyaXRlbChTM0NfRENUTF9DR09VVE5hayB8IFMzQ19EQ1RMX0NHTlBJbk5BSywKQEAgLTI5MjEsOSArMjkyMSw5IEBACiAKIAkvKiBzZXR1cCBmaWZvcyAqLwogCi0JZGV2X2luZm8oaHNvdGctPmRldiwgIkdSWEZTSVo9MHglMDh4LCBHTlBUWEZTSVo9MHglMDh4XG4iLAotCQkgcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfR1JYRlNJWiksCi0JCSByZWFkbChoc290Zy0+cmVncyArIFMzQ19HTlBUWEZTSVopKTsKKwlkZXZfZGJnKGhzb3RnLT5kZXYsICJHUlhGU0laPTB4JTA4eCwgR05QVFhGU0laPTB4JTA4eFxuIiwKKwkJcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfR1JYRlNJWiksCisJCXJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0dOUFRYRlNJWikpOwogCiAJczNjX2hzb3RnX2luaXRfZmlmbyhoc290Zyk7CiAKQEAgLTI5NDUsNiArMjk0NSw3IEBACiAKIHN0YXRpYyB2b2lkIHMzY19oc290Z19kdW1wKHN0cnVjdCBzM2NfaHNvdGcgKmhzb3RnKQogeworI2lmZGVmIERFQlVHCiAJc3RydWN0IGRldmljZSAqZGV2ID0gaHNvdGctPmRldjsKIAl2b2lkIF9faW9tZW0gKnJlZ3MgPSBoc290Zy0+cmVnczsKIAl1MzIgdmFsOwpAQCAtMjk4Nyw2ICsyOTg4LDcgQEAKIAogCWRldl9pbmZvKGRldiwgIkRWQlVTRElTPTB4JTA4eCwgRFZCVVNQVUxTRT0lMDh4XG4iLAogCQkgcmVhZGwocmVncyArIFMzQ19EVkJVU0RJUyksIHJlYWRsKHJlZ3MgKyBTM0NfRFZCVVNQVUxTRSkpOworI2VuZGlmCiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc3VkYy5jCmluZGV4IGNmZTNjZjUuLmQ1ZTNlMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHN1ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzdWRjLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2dhZGdldC5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtczNjMjQ0My1jbG9jay5oPgogI2luY2x1ZGUgPHBsYXQvdWRjLmg+CkBAIC0xMzAxLDcgKzEzMDIsOCBAQAogCWhzdWRjLT51Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAidXNiLWRldmljZSIpOwogCWlmIChJU19FUlIoaHN1ZGMtPnVjbGspKSB7CiAJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGZpbmQgdXNiLWRldmljZSBjbG9jayBzb3VyY2VcbiIpOwotCQlyZXR1cm4gUFRSX0VSUihoc3VkYy0+dWNsayk7CisJCXJldCA9IFBUUl9FUlIoaHN1ZGMtPnVjbGspOworCQlnb3RvIGVycl9jbGs7CiAJfQogCWNsa19lbmFibGUoaHN1ZGMtPnVjbGspOwogCkBAIC0xMzEwLDcgKzEzMTIsOCBAQAogCWRpc2FibGVfaXJxKGhzdWRjLT5pcnEpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAlyZXR1cm4gMDsKLQorZXJyX2NsazoKKwlmcmVlX2lycShoc3VkYy0+aXJxLCBoc3VkYyk7CiBlcnJfaXJxOgogCWlvdW5tYXAoaHN1ZGMtPnJlZ3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvczNjMjQxMF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MyNDEwX3VkYy5jCmluZGV4IDZkOGIwNDAuLjEwMGYyNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MyNDEwX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MyNDEwX3VkYy5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwppbmRleCBhZmVmN2IwLi44MGJlNTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCkBAIC0zMTIsOCArMzEyLDEwIEBACiAJCXJldHVybiBQVFJfRVJSKHVzYl9jbGspOwogCiAJaGNkID0gdXNiX2NyZWF0ZV9oY2QgKGRyaXZlciwgJnBkZXYtPmRldiwgInB4YTI3eCIpOwotCWlmICghaGNkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoIWhjZCkgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycjA7CisJfQogCiAJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyKSB7CkBAIC0zNjgsNiArMzcwLDcgQEAKIAlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKICBlcnIxOgogCXVzYl9wdXRfaGNkKGhjZCk7CisgZXJyMDoKIAljbGtfcHV0KHVzYl9jbGspOwogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZGJnLmMKaW5kZXggMmUwNDg2MS4uMWY1MGI0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWRiZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1kYmcuYwpAQCAtNDM4LDEzICs0MzgsMTMgQEAKIAlzdHJ1Y3QgeGhjaV9zbG90X2N0eCAqc2xvdF9jdHggPSB4aGNpX2dldF9zbG90X2N0eCh4aGNpLCBjdHgpOwogCiAJc3dpdGNoIChHRVRfU0xPVF9TVEFURShsZTMyX3RvX2NwdShzbG90X2N0eC0+ZGV2X3N0YXRlKSkpIHsKLQljYXNlIDA6CisJY2FzZSBTTE9UX1NUQVRFX0VOQUJMRUQ6CiAJCXJldHVybiAiZW5hYmxlZC9kaXNhYmxlZCI7Ci0JY2FzZSAxOgorCWNhc2UgU0xPVF9TVEFURV9ERUZBVUxUOgogCQlyZXR1cm4gImRlZmF1bHQiOwotCWNhc2UgMjoKKwljYXNlIFNMT1RfU1RBVEVfQUREUkVTU0VEOgogCQlyZXR1cm4gImFkZHJlc3NlZCI7Ci0JY2FzZSAzOgorCWNhc2UgU0xPVF9TVEFURV9DT05GSUdVUkVEOgogCQlyZXR1cm4gImNvbmZpZ3VyZWQiOwogCWRlZmF1bHQ6CiAJCXJldHVybiAicmVzZXJ2ZWQiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jCmluZGV4IDI2Y2FiYTQuLjBmOGUxZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMKQEAgLTk4NSw5ICs5ODUsMTkgQEAKIAlpbnRlcnZhbCA9IGNsYW1wX3ZhbChlcC0+ZGVzYy5iSW50ZXJ2YWwsIDEsIDE2KSAtIDE7CiAJaWYgKGludGVydmFsICE9IGVwLT5kZXNjLmJJbnRlcnZhbCAtIDEpCiAJCWRldl93YXJuKCZ1ZGV2LT5kZXYsCi0JCQkgImVwICUjeCAtIHJvdW5kaW5nIGludGVydmFsIHRvICVkIG1pY3JvZnJhbWVzXG4iLAorCQkJICJlcCAlI3ggLSByb3VuZGluZyBpbnRlcnZhbCB0byAlZCAlc2ZyYW1lc1xuIiwKIAkJCSBlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLAotCQkJIDEgPDwgaW50ZXJ2YWwpOworCQkJIDEgPDwgaW50ZXJ2YWwsCisJCQkgdWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwgPyAiIiA6ICJtaWNybyIpOworCisJaWYgKHVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9GVUxMKSB7CisJCS8qCisJCSAqIEZ1bGwgc3BlZWQgaXNvYyBlbmRwb2ludHMgc3BlY2lmeSBpbnRlcnZhbCBpbiBmcmFtZXMsCisJCSAqIG5vdCBtaWNyb2ZyYW1lcy4gV2UgYXJlIHVzaW5nIG1pY3JvZnJhbWVzIGV2ZXJ5d2hlcmUsCisJCSAqIHNvIGFkanVzdCBhY2NvcmRpbmdseS4KKwkJICovCisJCWludGVydmFsICs9IDM7CS8qIDEgZnJhbWUgPSAyXjMgdWZyYW1lcyAqLworCX0KIAogCXJldHVybiBpbnRlcnZhbDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wY2kuYwppbmRleCBjNDA4ZTlmLi4xNzU0MWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXBjaS5jCkBAIC0xMDYsMTIgKzEwNiwyMiBAQAogCiAJLyogTG9vayBmb3IgdmVuZG9yLXNwZWNpZmljIHF1aXJrcyAqLwogCWlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9GUkVTQ09fTE9HSUMgJiYKLQkJCXBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0ZSRVNDT19MT0dJQ19QREsgJiYKLQkJCXBkZXYtPnJldmlzaW9uID09IDB4MCkgeworCQkJcGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfRlJFU0NPX0xPR0lDX1BESykgeworCQlpZiAocGRldi0+cmV2aXNpb24gPT0gMHgwKSB7CiAJCQl4aGNpLT5xdWlya3MgfD0gWEhDSV9SRVNFVF9FUF9RVUlSSzsKIAkJCXhoY2lfZGJnKHhoY2ksICJRVUlSSzogRnJlc2NvIExvZ2ljIHhIQyBuZWVkcyBjb25maWd1cmUiCiAJCQkJCSIgZW5kcG9pbnQgY21kIGFmdGVyIHJlc2V0IGVuZHBvaW50XG4iKTsKKwkJfQorCQkvKiBGcmVzY28gTG9naWMgY29uZmlybXM6IGFsbCByZXZpc2lvbnMgb2YgdGhpcyBjaGlwIGRvIG5vdAorCQkgKiBzdXBwb3J0IE1TSSwgZXZlbiB0aG91Z2ggc29tZSBvZiB0aGVtIGNsYWltIHRvIGluIHRoZWlyIFBDSQorCQkgKiBjYXBhYmlsaXRpZXMuCisJCSAqLworCQl4aGNpLT5xdWlya3MgfD0gWEhDSV9CUk9LRU5fTVNJOworCQl4aGNpX2RiZyh4aGNpLCAiUVVJUks6IEZyZXNjbyBMb2dpYyByZXZpc2lvbiAldSAiCisJCQkJImhhcyBicm9rZW4gTVNJIGltcGxlbWVudGF0aW9uXG4iLAorCQkJCXBkZXYtPnJldmlzaW9uKTsKIAl9CisKIAlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfTkVDKQogCQl4aGNpLT5xdWlya3MgfD0gWEhDSV9ORUNfSE9TVDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKaW5kZXggY2MxNDg1Yi4uODAwZjQxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCkBAIC0xNzgyLDcgKzE3ODIsNyBAQAogCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICpmcmFtZTsKIAlpbnQgaWR4OwogCi0JZXBfcmluZyA9IHhoY2lfZG1hX3RvX3RyYW5zZmVyX3JpbmcoZXAsIGV2ZW50LT5idWZmZXIpOworCWVwX3JpbmcgPSB4aGNpX2RtYV90b190cmFuc2Zlcl9yaW5nKGVwLCBsZTY0X3RvX2NwdShldmVudC0+YnVmZmVyKSk7CiAJdXJiX3ByaXYgPSB0ZC0+dXJiLT5oY3ByaXY7CiAJaWR4ID0gdXJiX3ByaXYtPnRkX2NudDsKIAlmcmFtZSA9ICZ0ZC0+dXJiLT5pc29fZnJhbWVfZGVzY1tpZHhdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwppbmRleCBkOTY2MGViLi4wNmU3MDIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwpAQCAtNDMwLDEyICs0MzAsMTkgQEAKIAkJZnJlZV9pcnEoaGNkLT5pcnEsIGhjZCk7CiAJaGNkLT5pcnEgPSAtMTsKIAorCS8qIFNvbWUgRnJlc2NvIExvZ2ljIGhvc3QgY29udHJvbGxlcnMgYWR2ZXJ0aXNlIE1TSSwgYnV0IGZhaWwgdG8KKwkgKiBnZW5lcmF0ZSBpbnRlcnJ1cHRzLiAgRG9uJ3QgZXZlbiB0cnkgdG8gZW5hYmxlIE1TSS4KKwkgKi8KKwlpZiAoeGhjaS0+cXVpcmtzICYgWEhDSV9CUk9LRU5fTVNJKQorCQlnb3RvIGxlZ2FjeV9pcnE7CisKIAlyZXQgPSB4aGNpX3NldHVwX21zaXgoeGhjaSk7CiAJaWYgKHJldCkKIAkJLyogZmFsbCBiYWNrIHRvIG1zaSovCiAJCXJldCA9IHhoY2lfc2V0dXBfbXNpKHhoY2kpOwogCiAJaWYgKHJldCkgeworbGVnYWN5X2lycToKIAkJLyogZmFsbCBiYWNrIHRvIGxlZ2FjeSBpbnRlcnJ1cHQqLwogCQlyZXQgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsICZ1c2JfaGNkX2lycSwgSVJRRl9TSEFSRUQsCiAJCQkJCWhjZC0+aXJxX2Rlc2NyLCBoY2QpOwpAQCAtMTg0OSw4ICsxODU2LDggQEAKIAogCS8qIEZyZWUgYW55IHJpbmdzIHRoYXQgd2VyZSBkcm9wcGVkLCBidXQgbm90IGNoYW5nZWQuICovCiAJZm9yIChpID0gMTsgaSA8IDMxOyArK2kpIHsKLQkJaWYgKChjdHJsX2N0eC0+ZHJvcF9mbGFncyAmICgxIDw8IChpICsgMSkpKSAmJgotCQkJCSEoY3RybF9jdHgtPmFkZF9mbGFncyAmICgxIDw8IChpICsgMSkpKSkKKwkJaWYgKChsZTMyX3RvX2NwdShjdHJsX2N0eC0+ZHJvcF9mbGFncykgJiAoMSA8PCAoaSArIDEpKSkgJiYKKwkJICAgICEobGUzMl90b19jcHUoY3RybF9jdHgtPmFkZF9mbGFncykgJiAoMSA8PCAoaSArIDEpKSkpCiAJCQl4aGNpX2ZyZWVfb3JfY2FjaGVfZW5kcG9pbnRfcmluZyh4aGNpLCB2aXJ0X2RldiwgaSk7CiAJfQogCXhoY2lfemVyb19pbl9jdHgoeGhjaSwgdmlydF9kZXYpOwpAQCAtMjQ2Nyw2ICsyNDc0LDcgQEAKIAlzdHJ1Y3QgeGhjaV9jb21tYW5kICpyZXNldF9kZXZpY2VfY21kOwogCWludCB0aW1lbGVmdDsKIAlpbnQgbGFzdF9mcmVlZF9lbmRwb2ludDsKKwlzdHJ1Y3QgeGhjaV9zbG90X2N0eCAqc2xvdF9jdHg7CiAKIAlyZXQgPSB4aGNpX2NoZWNrX2FyZ3MoaGNkLCB1ZGV2LCBOVUxMLCAwLCBmYWxzZSwgX19mdW5jX18pOwogCWlmIChyZXQgPD0gMCkKQEAgLTI0OTksNiArMjUwNywxMiBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyogSWYgZGV2aWNlIGlzIG5vdCBzZXR1cCwgdGhlcmUgaXMgbm8gcG9pbnQgaW4gcmVzZXR0aW5nIGl0ICovCisJc2xvdF9jdHggPSB4aGNpX2dldF9zbG90X2N0eCh4aGNpLCB2aXJ0X2Rldi0+b3V0X2N0eCk7CisJaWYgKEdFVF9TTE9UX1NUQVRFKGxlMzJfdG9fY3B1KHNsb3RfY3R4LT5kZXZfc3RhdGUpKSA9PQorCQkJCQkJU0xPVF9TVEFURV9ESVNBQkxFRCkKKwkJcmV0dXJuIDA7CisKIAl4aGNpX2RiZyh4aGNpLCAiUmVzZXR0aW5nIGRldmljZSB3aXRoIHNsb3QgSUQgJXVcbiIsIHNsb3RfaWQpOwogCS8qIEFsbG9jYXRlIHRoZSBjb21tYW5kIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHRoZSBzdHJ1Y3QgY29tcGxldGlvbi4KIAkgKiBBc3N1bWUgd2UncmUgaW4gcHJvY2VzcyBjb250ZXh0LCBzaW5jZSB0aGUgbm9ybWFsIGRldmljZSByZXNldApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaAppbmRleCBhYzAxOTZlLi43ZDFlYTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaApAQCAtNTYwLDYgKzU2MCwxMSBAQAogI2RlZmluZSBTTE9UX1NUQVRFCSgweDFmIDw8IDI3KQogI2RlZmluZSBHRVRfU0xPVF9TVEFURShwKQkoKChwKSAmICgweDFmIDw8IDI3KSkgPj4gMjcpCiAKKyNkZWZpbmUgU0xPVF9TVEFURV9ESVNBQkxFRAkwCisjZGVmaW5lIFNMT1RfU1RBVEVfRU5BQkxFRAlTTE9UX1NUQVRFX0RJU0FCTEVECisjZGVmaW5lIFNMT1RfU1RBVEVfREVGQVVMVAkxCisjZGVmaW5lIFNMT1RfU1RBVEVfQUREUkVTU0VECTIKKyNkZWZpbmUgU0xPVF9TVEFURV9DT05GSUdVUkVECTMKIAogLyoqCiAgKiBzdHJ1Y3QgeGhjaV9lcF9jdHgKQEAgLTEzMDIsNiArMTMwNyw3IEBACiAgKiBjb21tYW5kcy4KICAqLwogI2RlZmluZSBYSENJX0VQX0xJTUlUX1FVSVJLCSgxIDw8IDUpCisjZGVmaW5lIFhIQ0lfQlJPS0VOX01TSQkJKDEgPDwgNikKIAl1bnNpZ25lZCBpbnQJCW51bV9hY3RpdmVfZXBzOwogCXVuc2lnbmVkIGludAkJbGltaXRfYWN0aXZlX2VwczsKIAkvKiBUaGVyZSBhcmUgdHdvIHJvb3RodWJzIHRvIGtlZXAgdHJhY2sgb2YgYnVzIHN1c3BlbmQgaW5mbyBmb3IgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCmluZGV4IGFiOGUxMDAuLmM3MWIwMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwpAQCAtOTYsNiArOTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvcmVuZXNhc191c2Jocy9tb2RfZ2FkZ2V0LmMgYi9kcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL21vZF9nYWRnZXQuYwppbmRleCAyMDZjZmFiLi41NDc0ODZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL21vZF9nYWRnZXQuYworKysgYi9kcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL21vZF9nYWRnZXQuYwpAQCAtMTM4MCw1ICsxMzgwLDYgQEAKIHsKIAlzdHJ1Y3QgdXNiaHNnX2dwcml2ICpncHJpdiA9IHVzYmhzZ19wcml2X3RvX2dwcml2KHByaXYpOwogCisJa2ZyZWUoZ3ByaXYtPnVlcCk7CiAJa2ZyZWUoZ3ByaXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCBlOGRiZGU1Li4xNjI3Mjg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtNjQ3LDYgKzY0Nyw3IEBACiAJeyBVU0JfREVWSUNFKEZURElfVklELCBFVkVSX0VDT19QUk9fQ0RTKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV80Tl9HQUxBWFlfREVfMV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJXzROX0dBTEFYWV9ERV8yX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfNE5fR0FMQVhZX0RFXzNfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgWFNFTlNfQ09OVkVSVEVSXzBfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgWFNFTlNfQ09OVkVSVEVSXzFfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgWFNFTlNfQ09OVkVSVEVSXzJfUElEKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCmluZGV4IDFkOTQ2Y2QuLmFiMWZjZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKQEAgLTM1MSw2ICszNTEsNyBAQAogICovCiAjZGVmaW5lIEZURElfNE5fR0FMQVhZX0RFXzFfUElECTB4RjNDMAogI2RlZmluZSBGVERJXzROX0dBTEFYWV9ERV8yX1BJRAkweEYzQzEKKyNkZWZpbmUgRlRESV80Tl9HQUxBWFlfREVfM19QSUQJMHhGM0MyCiAKIC8qCiAgKiBMaW54IFRlY2hub2xvZ2llcyBwcm9kdWN0IGlkcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCmluZGV4IDMxOGRkMDAuLjYwYjI1ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKQEAgLTMxMSwxMCArMzExLDYgQEAKICNkZWZpbmUgWlRFX1BST0RVQ1RfQUMyNzI2CQkJMHhmZmY1CiAjZGVmaW5lIFpURV9QUk9EVUNUX0FDODcxMFQJCQkweGZmZmYKIAotLyogWlRFIFBST0RVQ1RTIC0tIGFsdGVybmF0ZSB2ZW5kb3IgSUQgKi8KLSNkZWZpbmUgWlRFX1ZFTkRPUl9JRDIJCQkJMHgxZDZiCi0jZGVmaW5lIFpURV9QUk9EVUNUX01GXzMzMAkJCTB4MDAwMgotCiAjZGVmaW5lIEJFTlFfVkVORE9SX0lECQkJCTB4MDRhNQogI2RlZmluZSBCRU5RX1BST0RVQ1RfSDEwCQkJMHg0MDY4CiAKQEAgLTM0MCwxMSArMzM2LDEyIEBACiAjZGVmaW5lIFRPU0hJQkFfUFJPRFVDVF9HNDUwCQkJMHgwZDQ1CiAKICNkZWZpbmUgQUxJTktfVkVORE9SX0lECQkJCTB4MWUwZQorI2RlZmluZSBBTElOS19QUk9EVUNUX1BIMzAwCQkJMHg5MTAwCiAjZGVmaW5lIEFMSU5LX1BST0RVQ1RfM0dVCQkJMHg5MjAwCiAKIC8qIEFMQ0FURUwgUFJPRFVDVFMgKi8KICNkZWZpbmUgQUxDQVRFTF9WRU5ET1JfSUQJCQkweDFiYmIKLSNkZWZpbmUgQUxDQVRFTF9QUk9EVUNUX1gwNjBTCQkJMHgwMDAwCisjZGVmaW5lIEFMQ0FURUxfUFJPRFVDVF9YMDYwU19YMjAwCQkweDAwMDAKIAogI2RlZmluZSBQSVJFTExJX1ZFTkRPUl9JRAkJCTB4MTI2NgogI2RlZmluZSBQSVJFTExJX1BST0RVQ1RfQzEwMF8xCQkJMHgxMDAyCkBAIC0zNzksNiArMzc2LDkgQEAKICAqIEl0IHNlZW1zIHRvIGNvbnRhaW4gYSBRdWFsY29tbSBRU0M2MjQwLzYyOTAgY2hpcHNldCAgICAgICAgICAgICovCiAjZGVmaW5lIEZPVVJfR19TWVNURU1TX1BST0RVQ1RfVzE0CQkweDk2MDMKIAorLyogWm9vbSAqLworI2RlZmluZSBaT09NX1BST0RVQ1RfNDU5NwkJCTB4OTYwNworCiAvKiBIYWllciBwcm9kdWN0cyAqLwogI2RlZmluZSBIQUlFUl9WRU5ET1JfSUQJCQkJMHgyMDFlCiAjZGVmaW5lIEhBSUVSX1BST0RVQ1RfQ0UxMDAJCQkweDIwMDkKQEAgLTQzMiw2ICs0MzIsMjAgQEAKIAkucmVhc29uID0gT1BUSU9OX0JMQUNLTElTVF9TRU5EU0VUVVAKIH07CiAKK3N0YXRpYyBjb25zdCB1OCBhbGNhdGVsX3gyMDBfbm9fc2VuZHNldHVwW10gPSB7IDAsIDEgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uX2JsYWNrbGlzdF9pbmZvIGFsY2F0ZWxfeDIwMF9ibGFja2xpc3QgPSB7CisJLmluZm9sZW4gPSBBUlJBWV9TSVpFKGFsY2F0ZWxfeDIwMF9ub19zZW5kc2V0dXApLAorCS5pZmFjZWluZm8gPSBhbGNhdGVsX3gyMDBfbm9fc2VuZHNldHVwLAorCS5yZWFzb24gPSBPUFRJT05fQkxBQ0tMSVNUX1NFTkRTRVRVUAorfTsKKworc3RhdGljIGNvbnN0IHU4IHp0ZV9rMzc2NV96X25vX3NlbmRzZXR1cFtdID0geyAwLCAxLCAyIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbl9ibGFja2xpc3RfaW5mbyB6dGVfazM3NjVfel9ibGFja2xpc3QgPSB7CisJLmluZm9sZW4gPSBBUlJBWV9TSVpFKHp0ZV9rMzc2NV96X25vX3NlbmRzZXR1cCksCisJLmlmYWNlaW5mbyA9IHp0ZV9rMzc2NV96X25vX3NlbmRzZXR1cCwKKwkucmVhc29uID0gT1BUSU9OX0JMQUNLTElTVF9TRU5EU0VUVVAKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBvcHRpb25faWRzW10gPSB7CiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0NPTFQpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX1JJQ09MQSkgfSwKQEAgLTkxNiwxMyArOTMwLDEzIEBACiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCAweDAwNzMsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCAweDAxMzAsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCAweDAxNDEsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCi0JeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCAweDIwMDIsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCAweDIwMDIsIDB4ZmYsCisJICAweGZmLCAweGZmKSwgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZ6dGVfazM3NjVfel9ibGFja2xpc3QgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIDB4MjAwMywgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX0NETUFfVEVDSCwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX0FDODcxMCwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX0FDMjcyNiwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX0FDODcxMFQsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCi0JeyBVU0JfREVWSUNFKFpURV9WRU5ET1JfSUQyLCBaVEVfUFJPRFVDVF9NRl8zMzApIH0sCiAJeyBVU0JfREVWSUNFKEJFTlFfVkVORE9SX0lELCBCRU5RX1BST0RVQ1RfSDEwKSB9LAogCXsgVVNCX0RFVklDRShETElOS19WRU5ET1JfSUQsIERMSU5LX1BST0RVQ1RfRFdNXzY1MikgfSwKIAl7IFVTQl9ERVZJQ0UoQUxJTktfVkVORE9SX0lELCBETElOS19QUk9EVUNUX0RXTV82NTJfVTUpIH0sIC8qIFllcywgQUxJTktfVkVORE9SX0lEICovCkBAIC05MzUsMTMgKzk0OSwxNyBAQAogCXsgVVNCX0RFVklDRShUT1NISUJBX1ZFTkRPUl9JRCwgVE9TSElCQV9QUk9EVUNUX0c0NTApIH0sCiAJeyBVU0JfREVWSUNFKFRPU0hJQkFfVkVORE9SX0lELCBUT1NISUJBX1BST0RVQ1RfSFNEUEFfTUlOSUNBUkQgKSB9LCAvKiBUb3NoaWJhIDNHIEhTRFBBID09IE5vdmF0ZWwgRXhwZWRpdGUgRVU4NzBEIE1pbmlDYXJkICovCiAJeyBVU0JfREVWSUNFKEFMSU5LX1ZFTkRPUl9JRCwgMHg5MDAwKSB9LAorCXsgVVNCX0RFVklDRShBTElOS19WRU5ET1JfSUQsIEFMSU5LX1BST0RVQ1RfUEgzMDApIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhBTElOS19WRU5ET1JfSUQsIEFMSU5LX1BST0RVQ1RfM0dVLCAweGZmLCAweGZmLCAweGZmKSB9LAotCXsgVVNCX0RFVklDRShBTENBVEVMX1ZFTkRPUl9JRCwgQUxDQVRFTF9QUk9EVUNUX1gwNjBTKSB9LAorCXsgVVNCX0RFVklDRShBTENBVEVMX1ZFTkRPUl9JRCwgQUxDQVRFTF9QUk9EVUNUX1gwNjBTX1gyMDApLAorCSAgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZhbGNhdGVsX3gyMDBfYmxhY2tsaXN0CisJfSwKIAl7IFVTQl9ERVZJQ0UoQUlSUExVU19WRU5ET1JfSUQsIEFJUlBMVVNfUFJPRFVDVF9NQ0Q2NTApIH0sCiAJeyBVU0JfREVWSUNFKFRMQVlURUNIX1ZFTkRPUl9JRCwgVExBWVRFQ0hfUFJPRFVDVF9URVU4MDApIH0sCiAJeyBVU0JfREVWSUNFKExPTkdDSEVFUl9WRU5ET1JfSUQsIEZPVVJfR19TWVNURU1TX1BST0RVQ1RfVzE0KSwKICAgCSAgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZmb3VyX2dfdzE0X2JsYWNrbGlzdAogICAJfSwKKwl7IFVTQl9ERVZJQ0UoTE9OR0NIRUVSX1ZFTkRPUl9JRCwgWk9PTV9QUk9EVUNUXzQ1OTcpIH0sCiAJeyBVU0JfREVWSUNFKEhBSUVSX1ZFTkRPUl9JRCwgSEFJRVJfUFJPRFVDVF9DRTEwMCkgfSwKIAkvKiBQaXJlbGxpICAqLwogCXsgVVNCX0RFVklDRShQSVJFTExJX1ZFTkRPUl9JRCwgUElSRUxMSV9QUk9EVUNUX0MxMDBfMSl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKaW5kZXggMDA0MTg5OS4uZThhZTIxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCkBAIC04MTksNiArODE5LDM1IEBACiAJCX0KIAl9CiAKKwkvKgorCSAqIFNvbWUgZGV2aWNlcyBkb24ndCB3b3JrIG9yIHJldHVybiBpbmNvcnJlY3QgZGF0YSB0aGUgZmlyc3QKKwkgKiB0aW1lIHRoZXkgZ2V0IGEgUkVBRCgxMCkgY29tbWFuZCwgb3IgZm9yIHRoZSBmaXJzdCBSRUFEKDEwKQorCSAqIGFmdGVyIGEgbWVkaWEgY2hhbmdlLiAgSWYgdGhlIElOSVRJQUxfUkVBRDEwIGZsYWcgaXMgc2V0LAorCSAqIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBSRUFEKDEwKSBjb21tYW5kcyBzdWNjZWVkLiAgSWYgdGhlCisJICogcHJldmlvdXMgb25lIHN1Y2NlZWRlZCBhbmQgdGhpcyBvbmUgZmFpbGVkLCBzZXQgdGhlIFJFRE9fUkVBRDEwCisJICogZmxhZyB0byBmb3JjZSBhIHJldHJ5LgorCSAqLworCWlmICh1bmxpa2VseSgodXMtPmZmbGFncyAmIFVTX0ZMX0lOSVRJQUxfUkVBRDEwKSAmJgorCQkJc3JiLT5jbW5kWzBdID09IFJFQURfMTApKSB7CisJCWlmIChzcmItPnJlc3VsdCA9PSBTQU1fU1RBVF9HT09EKSB7CisJCQlzZXRfYml0KFVTX0ZMSURYX1JFQUQxMF9XT1JLRUQsICZ1cy0+ZGZsYWdzKTsKKwkJfSBlbHNlIGlmICh0ZXN0X2JpdChVU19GTElEWF9SRUFEMTBfV09SS0VELCAmdXMtPmRmbGFncykpIHsKKwkJCWNsZWFyX2JpdChVU19GTElEWF9SRUFEMTBfV09SS0VELCAmdXMtPmRmbGFncyk7CisJCQlzZXRfYml0KFVTX0ZMSURYX1JFRE9fUkVBRDEwLCAmdXMtPmRmbGFncyk7CisJCX0KKworCQkvKgorCQkgKiBOZXh0LCBpZiB0aGUgUkVET19SRUFEMTAgZmxhZyBpcyBzZXQsIHJldHVybiBhIHJlc3VsdAorCQkgKiBjb2RlIHRoYXQgd2lsbCBjYXVzZSB0aGUgU0NTSSBjb3JlIHRvIHJldHJ5IHRoZSBSRUFEKDEwKQorCQkgKiBjb21tYW5kIGltbWVkaWF0ZWx5LgorCQkgKi8KKwkJaWYgKHRlc3RfYml0KFVTX0ZMSURYX1JFRE9fUkVBRDEwLCAmdXMtPmRmbGFncykpIHsKKwkJCWNsZWFyX2JpdChVU19GTElEWF9SRURPX1JFQUQxMCwgJnVzLT5kZmxhZ3MpOworCQkJc3JiLT5yZXN1bHQgPSBESURfSU1NX1JFVFJZIDw8IDE2OworCQkJc3JiLT5zZW5zZV9idWZmZXJbMF0gPSAwOworCQl9CisJfQorCiAJLyogRGlkIHdlIHRyYW5zZmVyIGxlc3MgdGhhbiB0aGUgbWluaW11bSBhbW91bnQgcmVxdWlyZWQ/ICovCiAJaWYgKChzcmItPnJlc3VsdCA9PSBTQU1fU1RBVF9HT09EIHx8IHNyYi0+c2Vuc2VfYnVmZmVyWzJdID09IDApICYmCiAJCQlzY3NpX2J1ZmZsZW4oc3JiKSAtIHNjc2lfZ2V0X3Jlc2lkKHNyYikgPCBzcmItPnVuZGVyZmxvdykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCmluZGV4IGMxNjAyYjguLmNjZmYzNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaApAQCAtMTExNCw2ICsxMTE0LDE2IEBACiAJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSApLAogCisvKiBSZXBvcnRlZCBieSBQYXVsIEhhcnRtYW4gPHBhdWwuaGFydG1hbitsaW51eEBnbWFpbC5jb20+CisgKiBUaGlzIGNhcmQgcmVhZGVyIHJldHVybnMgIklsbGVnYWwgUmVxdWVzdCwgTG9naWNhbCBCbG9jayBBZGRyZXNzCisgKiBPdXQgb2YgUmFuZ2UiIGZvciB0aGUgZmlyc3QgUkVBRCgxMCkgYWZ0ZXIgYSBuZXcgY2FyZCBpcyBpbnNlcnRlZC4KKyAqLworVU5VU1VBTF9ERVYoICAweDA5MGMsIDB4NjAwMCwgMHgwMTAwLCAweDAxMDAsCisJCSJGZWl5YSIsCisJCSJTRC9TREhDIENhcmQgUmVhZGVyIiwKKwkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfSU5JVElBTF9SRUFEMTAgKSwKKwogLyogVGhpcyBQZW50YXggc3RpbGwgY2FtZXJhIGlzIG5vdCBjb25mb3JtYW50CiAgKiB0byB0aGUgVVNCIHN0b3JhZ2Ugc3BlY2lmaWNhdGlvbjogLQogICogLSBJdCBkb2VzIG5vdCBsaWtlIHRoZSBJTlFVSVJZIGNvbW1hbmQuIFNvIHdlIG11c3QgaGFuZGxlIHRoaXMgY29tbWFuZApAQCAtMTg4OCw2ICsxODk4LDE1IEBACiAJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX05PX1JFQURfRElTQ19JTkZPICksCiAKKy8qIFJlcG9ydGVkIGJ5IFN2ZW4gR2VnZ3VzIDxzdmVuLXVzYnN0QGdlZ2d1cy5uZXQ+CisgKiBUaGlzIGVuY3J5cHRlZCBwZW4gZHJpdmUgcmV0dXJucyBib2d1cyBkYXRhIGZvciB0aGUgaW5pdGlhbCBSRUFEKDEwKS4KKyAqLworVU5VU1VBTF9ERVYoICAweDFiMWMsIDB4MWFiNSwgMHgwMjAwLCAweDAyMDAsCisJCSJDb3JzYWlyIiwKKwkJIlBhZGxvY2sgdjIiLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JTklUSUFMX1JFQUQxMCApLAorCiAvKiBQYXRjaCBieSBSaWNoYXJkIFNjaPx0eiA8ci5zY2h0ekB0LW9ubGluZS5kZT4KICAqIFRoaXMgZXh0ZXJuYWwgaGFyZCBkcml2ZSBlbmNsb3N1cmUgdXNlcyBhIEpNaWNyb24gY2hpcCB3aGljaAogICogbmVlZHMgdGhlIFVTX0ZMX0lHTk9SRV9SRVNJRFVFIGZsYWcgdG8gd29yayBwcm9wZXJseS4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCmluZGV4IDVlZTdhYzQuLjBjYTA5NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYwpAQCAtNDQwLDcgKzQ0MCw4IEBACiAJCQlVU19GTF9OT1RfTE9DS0FCTEUgfCBVU19GTF9NQVhfU0VDVE9SU182NCB8CiAJCQlVU19GTF9DQVBBQ0lUWV9PSyB8IFVTX0ZMX0lHTk9SRV9SRVNJRFVFIHwKIAkJCVVTX0ZMX1NJTkdMRV9MVU4gfCBVU19GTF9OT19XUF9ERVRFQ1QgfAotCQkJVVNfRkxfTk9fUkVBRF9ESVNDX0lORk8gfCBVU19GTF9OT19SRUFEX0NBUEFDSVRZXzE2KTsKKwkJCVVTX0ZMX05PX1JFQURfRElTQ19JTkZPIHwgVVNfRkxfTk9fUkVBRF9DQVBBQ0lUWV8xNiB8CisJCQlVU19GTF9JTklUSUFMX1JFQUQxMCk7CiAKIAlwID0gcXVpcmtzOwogCXdoaWxlICgqcCkgewpAQCAtNDkwLDYgKzQ5MSw5IEBACiAJCWNhc2UgJ20nOgogCQkJZiB8PSBVU19GTF9NQVhfU0VDVE9SU182NDsKIAkJCWJyZWFrOworCQljYXNlICduJzoKKwkJCWYgfD0gVVNfRkxfSU5JVElBTF9SRUFEMTA7CisJCQlicmVhazsKIAkJY2FzZSAnbyc6CiAJCQlmIHw9IFVTX0ZMX0NBUEFDSVRZX09LOwogCQkJYnJlYWs7CkBAIC05NTMsNiArOTU3LDEzIEBACiAJaWYgKHJlc3VsdCkKIAkJZ290byBCYWREZXZpY2U7CiAKKwkvKgorCSAqIElmIHRoZSBkZXZpY2UgcmV0dXJucyBpbnZhbGlkIGRhdGEgZm9yIHRoZSBmaXJzdCBSRUFEKDEwKQorCSAqIGNvbW1hbmQsIGluZGljYXRlIHRoZSBjb21tYW5kIHNob3VsZCBiZSByZXRyaWVkLgorCSAqLworCWlmICh1cy0+ZmZsYWdzICYgVVNfRkxfSU5JVElBTF9SRUFEMTApCisJCXNldF9iaXQoVVNfRkxJRFhfUkVET19SRUFEMTAsICZ1cy0+ZGZsYWdzKTsKKwogCS8qIEFjcXVpcmUgYWxsIHRoZSBvdGhlciByZXNvdXJjZXMgYW5kIGFkZCB0aGUgaG9zdCAqLwogCXJlc3VsdCA9IHVzYl9zdG9yX2FjcXVpcmVfcmVzb3VyY2VzKHVzKTsKIAlpZiAocmVzdWx0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmgKaW5kZXggODlkM2JmZi4uN2IwZjIxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oCkBAIC03Myw2ICs3Myw4IEBACiAjZGVmaW5lIFVTX0ZMSURYX1JFU0VUVElORwk0CS8qIGRldmljZSByZXNldCBpbiBwcm9ncmVzcyAqLwogI2RlZmluZSBVU19GTElEWF9USU1FRF9PVVQJNQkvKiBTQ1NJIG1pZGxheWVyIHRpbWVkIG91dCAgKi8KICNkZWZpbmUgVVNfRkxJRFhfRE9OVF9TQ0FOCTYJLyogZG9uJ3Qgc2NhbiAoZGlzY29ubmVjdCkgICovCisjZGVmaW5lIFVTX0ZMSURYX1JFRE9fUkVBRDEwCTcJLyogcmVkbyBSRUFEKDEwKSBjb21tYW5kICAgICovCisjZGVmaW5lIFVTX0ZMSURYX1JFQUQxMF9XT1JLRUQJOAkvKiBwcmV2aW91cyBSRUFEKDEwKSBzdWNjZWVkZWQgKi8KIAogI2RlZmluZSBVU0JfU1RPUl9TVFJJTkdfTEVOIDMyCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXJjZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXJjZmIuYwppbmRleCAzZWM0OTIzLi5jMjJlOGQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2FyY2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hcmNmYi5jCkBAIC01MTUsMTEgKzUxNSwxMCBAQAogCiAJLyogV2UgbmVlZCBhIGZsYXQgYmFja2luZyBzdG9yZSBmb3IgdGhlIEFyYydzCiAJICAgbGVzcy1mbGF0IGFjdHVhbCBwYWdlZCBmcmFtZWJ1ZmZlciAqLwotCWlmICghKHZpZGVvbWVtb3J5ID0gdm1hbGxvYyh2aWRlb21lbW9yeXNpemUpKSkKKwl2aWRlb21lbW9yeSA9IHZ6YWxsb2ModmlkZW9tZW1vcnlzaXplKTsKKwlpZiAoIXZpZGVvbWVtb3J5KQogCQlyZXR1cm4gcmV0dmFsOwogCi0JbWVtc2V0KHZpZGVvbWVtb3J5LCAwLCB2aWRlb21lbW9yeXNpemUpOwotCiAJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgYXJjZmJfcGFyKSwgJmRldi0+ZGV2KTsKIAlpZiAoIWluZm8pCiAJCWdvdG8gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iZjUzNy1scTAzNS5jIGIvZHJpdmVycy92aWRlby9iZjUzNy1scTAzNS5jCmluZGV4IDQ3YzIxZmIuLmJlYTUzYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmY1MzctbHEwMzUuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JmNTM3LWxxMDM1LmMKQEAgLTc4OSw2ICs3ODksNyBAQAogCWkyY19hZGRfZHJpdmVyKCZhZDUyODBfZHJpdmVyKTsKIAogCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihwcm9wcykpOworCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOwogCXByb3BzLm1heF9icmlnaHRuZXNzID0gTUFYX0JSSUdIRU5FU1M7CiAJYmxfZGV2ID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigiYmY1MzctYmwiLCBOVUxMLCBOVUxMLAogCQkJCQkgICAmYmZpbl9scTAzNWZiX2JsX29wcywgJnByb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYnJvYWRzaGVldGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2Jyb2Fkc2hlZXRmYi5jCmluZGV4IGViZGE2ODcuLjM3N2RkZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYnJvYWRzaGVldGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9icm9hZHNoZWV0ZmIuYwpAQCAtMTEwMSwxMiArMTEwMSwxMCBAQAogCiAJdmlkZW9tZW1vcnlzaXplID0gcm91bmR1cCgoZHB5dypkcHloKSwgUEFHRV9TSVpFKTsKIAotCXZpZGVvbWVtb3J5ID0gdm1hbGxvYyh2aWRlb21lbW9yeXNpemUpOworCXZpZGVvbWVtb3J5ID0gdnphbGxvYyh2aWRlb21lbW9yeXNpemUpOwogCWlmICghdmlkZW9tZW1vcnkpCiAJCWdvdG8gZXJyX2ZiX3JlbDsKIAotCW1lbXNldCh2aWRlb21lbW9yeSwgMCwgdmlkZW9tZW1vcnlzaXplKTsKLQogCWluZm8tPnNjcmVlbl9iYXNlID0gKGNoYXIgKil2aWRlb21lbW9yeTsKIAlpbmZvLT5mYm9wcyA9ICZicm9hZHNoZWV0ZmJfb3BzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2VmaWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2VmaWZiLmMKaW5kZXggZmIyMDU4NC4uNjljNDlkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9lZmlmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZWZpZmIuYwpAQCAtMTYsNiArMTYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPHZpZGVvL3ZnYS5oPgogCitzdGF0aWMgYm9vbCByZXF1ZXN0X21lbV9zdWNjZWVkZWQgPSBmYWxzZTsKKwogc3RhdGljIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyBlZmlmYl9kZWZpbmVkIF9fZGV2aW5pdGRhdGEgPSB7CiAJLmFjdGl2YXRlCQk9IEZCX0FDVElWQVRFX05PVywKIAkuaGVpZ2h0CQkJPSAtMSwKQEAgLTI4MSw3ICsyODMsOSBAQAogewogCWlmIChpbmZvLT5zY3JlZW5fYmFzZSkKIAkJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKGluZm8tPmFwZXJ0dXJlcy0+cmFuZ2VzWzBdLmJhc2UsIGluZm8tPmFwZXJ0dXJlcy0+cmFuZ2VzWzBdLnNpemUpOworCWlmIChyZXF1ZXN0X21lbV9zdWNjZWVkZWQpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihpbmZvLT5hcGVydHVyZXMtPnJhbmdlc1swXS5iYXNlLAorCQkJCSAgIGluZm8tPmFwZXJ0dXJlcy0+cmFuZ2VzWzBdLnNpemUpOwogCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiB9CiAKQEAgLTMyNiwxNCArMzMwLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGVmaWZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IGVmaWZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGludCBzaXplX3Ztb2RlOwogCXVuc2lnbmVkIGludCBzaXplX3JlbWFwOwogCXVuc2lnbmVkIGludCBzaXplX3RvdGFsOwotCWludCByZXF1ZXN0X3N1Y2NlZWRlZCA9IDA7CiAKIAlpZiAoIXNjcmVlbl9pbmZvLmxmYl9kZXB0aCkKIAkJc2NyZWVuX2luZm8ubGZiX2RlcHRoID0gMzI7CkBAIC0zODcsNyArMzkwLDcgQEAKIAllZmlmYl9maXguc21lbV9sZW4gPSBzaXplX3JlbWFwOwogCiAJaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihlZmlmYl9maXguc21lbV9zdGFydCwgc2l6ZV9yZW1hcCwgImVmaWZiIikpIHsKLQkJcmVxdWVzdF9zdWNjZWVkZWQgPSAxOworCQlyZXF1ZXN0X21lbV9zdWNjZWVkZWQgPSB0cnVlOwogCX0gZWxzZSB7CiAJCS8qIFdlIGNhbm5vdCBtYWtlIHRoaXMgZmF0YWwuIFNvbWV0aW1lcyB0aGlzIGNvbWVzIGZyb20gbWFnaWMKIAkJICAgc3BhY2VzIG91ciByZXNvdXJjZSBoYW5kbGVycyBzaW1wbHkgZG9uJ3Qga25vdyBhYm91dCAqLwpAQCAtNDEzLDcgKzQxNiw3IEBACiAJaW5mby0+YXBlcnR1cmVzLT5yYW5nZXNbMF0uYmFzZSA9IGVmaWZiX2ZpeC5zbWVtX3N0YXJ0OwogCWluZm8tPmFwZXJ0dXJlcy0+cmFuZ2VzWzBdLnNpemUgPSBzaXplX3JlbWFwOwogCi0JaW5mby0+c2NyZWVuX2Jhc2UgPSBpb3JlbWFwKGVmaWZiX2ZpeC5zbWVtX3N0YXJ0LCBlZmlmYl9maXguc21lbV9sZW4pOworCWluZm8tPnNjcmVlbl9iYXNlID0gaW9yZW1hcF93YyhlZmlmYl9maXguc21lbV9zdGFydCwgZWZpZmJfZml4LnNtZW1fbGVuKTsKIAlpZiAoIWluZm8tPnNjcmVlbl9iYXNlKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZWZpZmI6IGFib3J0LCBjYW5ub3QgaW9yZW1hcCB2aWRlbyBtZW1vcnkgIgogCQkJCSIweCV4IEAgMHglbHhcbiIsCkBAIC00OTEsMTMgKzQ5NCwxMiBAQAogZXJyX3JlbGVhc2VfZmI6CiAJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKIGVycl9yZWxlYXNlX21lbToKLQlpZiAocmVxdWVzdF9zdWNjZWVkZWQpCisJaWYgKHJlcXVlc3RfbWVtX3N1Y2NlZWRlZCkKIAkJcmVsZWFzZV9tZW1fcmVnaW9uKGVmaWZiX2ZpeC5zbWVtX3N0YXJ0LCBzaXplX3RvdGFsKTsKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBlZmlmYl9kcml2ZXIgPSB7Ci0JLnByb2JlCT0gZWZpZmJfcHJvYmUsCiAJLmRyaXZlcgk9IHsKIAkJLm5hbWUJPSAiZWZpZmIiLAogCX0sCkBAIC01MjgsMTMgKzUzMCwyMSBAQAogCWlmICghc2NyZWVuX2luZm8ubGZiX2xpbmVsZW5ndGgpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZlZmlmYl9kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZWZpZmJfZGV2aWNlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCi0JaWYgKCFyZXQpIHsKLQkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlZmlmYl9kZXZpY2UpOwotCQlpZiAocmV0KQotCQkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmVmaWZiX2RyaXZlcik7CisJLyoKKwkgKiBUaGlzIGlzIG5vdCBqdXN0IGFuIG9wdGltaXphdGlvbi4gIFdlIHdpbGwgaW50ZXJmZXJlCisJICogd2l0aCBhIHJlYWwgZHJpdmVyIGlmIHdlIGdldCByZXByb2JlZCwgc28gZG9uJ3QgYWxsb3cKKwkgKiBpdC4KKwkgKi8KKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmVmaWZiX2RyaXZlciwgZWZpZmJfcHJvYmUpOworCWlmIChyZXQpIHsKKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJmVmaWZiX2RyaXZlcik7CisJCXJldHVybiByZXQ7CiAJfQorCiAJcmV0dXJuIHJldDsKIH0KIG1vZHVsZV9pbml0KGVmaWZiX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9oZWN1YmFmYi5jIGIvZHJpdmVycy92aWRlby9oZWN1YmFmYi5jCmluZGV4IDFiOTQ2NDMuLmZiZWYxNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaGVjdWJhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2hlY3ViYWZiLmMKQEAgLTIzMSwxMSArMjMxLDEwIEBACiAKIAl2aWRlb21lbW9yeXNpemUgPSAoRFBZX1cqRFBZX0gpLzg7CiAKLQlpZiAoISh2aWRlb21lbW9yeSA9IHZtYWxsb2ModmlkZW9tZW1vcnlzaXplKSkpCisJdmlkZW9tZW1vcnkgPSB2emFsbG9jKHZpZGVvbWVtb3J5c2l6ZSk7CisJaWYgKCF2aWRlb21lbW9yeSkKIAkJcmV0dXJuIHJldHZhbDsKIAotCW1lbXNldCh2aWRlb21lbW9yeSwgMCwgdmlkZW9tZW1vcnlzaXplKTsKLQogCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IGhlY3ViYWZiX3BhciksICZkZXYtPmRldik7CiAJaWYgKCFpbmZvKQogCQlnb3RvIGVycl9mYmFsbG9jOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbXhmYi5jIGIvZHJpdmVycy92aWRlby9pbXhmYi5jCmluZGV4IGQyY2NmZDYuLmYxMzVkYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW14ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKQEAgLTg1NiwxMCArODU2LDEwIEBACiAJCWRtYV9mcmVlX3dyaXRlY29tYmluZSgmcGRldi0+ZGV2LGZiaS0+bWFwX3NpemUsZmJpLT5tYXBfY3B1LAogCQkJZmJpLT5tYXBfZG1hKTsKIGZhaWxlZF9tYXA6Ci0JY2xrX3B1dChmYmktPmNsayk7Ci1mYWlsZWRfZ2V0Y2xvY2s6CiAJaW91bm1hcChmYmktPnJlZ3MpOwogZmFpbGVkX2lvcmVtYXA6CisJY2xrX3B1dChmYmktPmNsayk7CitmYWlsZWRfZ2V0Y2xvY2s6CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiBmYWlsZWRfcmVxOgogCWtmcmVlKGluZm8tPnBzZXVkb19wYWxldHRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWV0cm9ub21lZmIuYyBiL2RyaXZlcnMvdmlkZW8vbWV0cm9ub21lZmIuYwppbmRleCBlZDY0ZWRmLi45N2Q0NWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21ldHJvbm9tZWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9tZXRyb25vbWVmYi5jCkBAIC02MjgsMTIgKzYyOCwxMCBAQAogCS8qIHdlIG5lZWQgdG8gYWRkIGEgc3BhcmUgcGFnZSBiZWNhdXNlIG91ciBjc3VtIGNhY2hpbmcgc2NoZW1lIHdhbGtzCiAJICogdG8gdGhlIGVuZCBvZiB0aGUgcGFnZSAqLwogCXZpZGVvbWVtb3J5c2l6ZSA9IFBBR0VfU0laRSArIChmdyAqIGZoKTsKLQl2aWRlb21lbW9yeSA9IHZtYWxsb2ModmlkZW9tZW1vcnlzaXplKTsKKwl2aWRlb21lbW9yeSA9IHZ6YWxsb2ModmlkZW9tZW1vcnlzaXplKTsKIAlpZiAoIXZpZGVvbWVtb3J5KQogCQlnb3RvIGVycl9mYl9yZWw7CiAKLQltZW1zZXQodmlkZW9tZW1vcnksIDAsIHZpZGVvbWVtb3J5c2l6ZSk7Ci0KIAlpbmZvLT5zY3JlZW5fYmFzZSA9IChjaGFyIF9fZm9yY2UgX19pb21lbSAqKXZpZGVvbWVtb3J5OwogCWluZm8tPmZib3BzID0gJm1ldHJvbm9tZWZiX29wczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tb2RlZGIuYyBiL2RyaXZlcnMvdmlkZW8vbW9kZWRiLmMKaW5kZXggNDhjM2VhOC4uY2IxNzVmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tb2RlZGIuYworKysgYi9kcml2ZXJzL3ZpZGVvL21vZGVkYi5jCkBAIC0xMTI4LDMgKzExMjgsNCBAQAogRVhQT1JUX1NZTUJPTChmYl9maW5kX25lYXJlc3RfbW9kZSk7CiBFWFBPUlRfU1lNQk9MKGZiX3ZpZGVvbW9kZV90b19tb2RlbGlzdCk7CiBFWFBPUlRfU1lNQk9MKGZiX2ZpbmRfbW9kZSk7CitFWFBPUlRfU1lNQk9MKGZiX2ZpbmRfbW9kZV9jdnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9weGExNjhmYi5jIGIvZHJpdmVycy92aWRlby9weGExNjhmYi5jCmluZGV4IDM1ZjYxZGQuLmJiOTVlYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcHhhMTY4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3B4YTE2OGZiLmMKQEAgLTYyMywxOSArNjIzLDIxIEBACiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAocmVzID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gSU8gbWVtb3J5IGRlZmluZWRcbiIpOwotCQlyZXR1cm4gLUVOT0VOVDsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBmYWlsZWRfcHV0X2NsazsKIAl9CiAKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCWlmIChpcnEgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIElSUSBkZWZpbmVkXG4iKTsKLQkJcmV0dXJuIC1FTk9FTlQ7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZmFpbGVkX3B1dF9jbGs7CiAJfQogCiAJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgcHhhMTY4ZmJfaW5mbyksICZwZGV2LT5kZXYpOwogCWlmIChpbmZvID09IE5VTEwpIHsKLQkJY2xrX3B1dChjbGspOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsZWRfcHV0X2NsazsKIAl9CiAKIAkvKiBJbml0aWFsaXplIHByaXZhdGUgZGF0YSAqLwpAQCAtNjcxLDcgKzY3Myw3IEBACiAJZmJpLT5yZWdfYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCWlmIChmYmktPnJlZ19iYXNlID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBmYWlsZWQ7CisJCWdvdG8gZmFpbGVkX2ZyZWVfaW5mbzsKIAl9CiAKIAkvKgpAQCAtNjgzLDcgKzY4NSw3IEBACiAJCQkJCQkmZmJpLT5mYl9zdGFydF9kbWEsIEdGUF9LRVJORUwpOwogCWlmIChpbmZvLT5zY3JlZW5fYmFzZSA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbGVkOworCQlnb3RvIGZhaWxlZF9mcmVlX2luZm87CiAJfQogCiAJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSAodW5zaWduZWQgbG9uZylmYmktPmZiX3N0YXJ0X2RtYTsKQEAgLTc3Miw4ICs3NzQsOSBAQAogZmFpbGVkX2ZyZWVfZmJtZW06CiAJZG1hX2ZyZWVfY29oZXJlbnQoZmJpLT5kZXYsIGluZm8tPmZpeC5zbWVtX2xlbiwKIAkJCWluZm8tPnNjcmVlbl9iYXNlLCBmYmktPmZiX3N0YXJ0X2RtYSk7Ci1mYWlsZWQ6CitmYWlsZWRfZnJlZV9pbmZvOgogCWtmcmVlKGluZm8pOworZmFpbGVkX3B1dF9jbGs6CiAJY2xrX3B1dChjbGspOwogCiAJZGV2X2VycigmcGRldi0+ZGV2LCAiZnJhbWUgYnVmZmVyIGRldmljZSBpbml0IGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYwppbmRleCAzYjdmMmY1Li40ZGU1NDFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYwpAQCAtMjIzNyw2ICsyMjM3LDIyIEBACiAJCQkJICZpbmZvLT5tb2RlbGlzdCk7CiAjZW5kaWYKIAlpbmZvLT52YXIgPSBzYXZhZ2VmYl92YXI4MDB4NjAweDg7CisJLyogaWYgYSBwYW5lbCB3YXMgZGV0ZWN0ZWQsIGRlZmF1bHQgdG8gYSBDVlQgbW9kZSBpbnN0ZWFkICovCisJaWYgKHBhci0+U2F2YWdlUGFuZWxXaWR0aCkgeworCQlzdHJ1Y3QgZmJfdmlkZW9tb2RlIGN2dF9tb2RlOworCisJCW1lbXNldCgmY3Z0X21vZGUsIDAsIHNpemVvZihjdnRfbW9kZSkpOworCQljdnRfbW9kZS54cmVzID0gcGFyLT5TYXZhZ2VQYW5lbFdpZHRoOworCQljdnRfbW9kZS55cmVzID0gcGFyLT5TYXZhZ2VQYW5lbEhlaWdodDsKKwkJY3Z0X21vZGUucmVmcmVzaCA9IDYwOworCQkvKiBGSVhNRTogaWYgd2Uga25vdyB0aGVyZSBpcyBvbmx5IHRoZSBwYW5lbAorCQkgKiB3ZSBjYW4gZW5hYmxlIHJlZHVjZWQgYmxhbmtpbmcgYXMgd2VsbCAqLworCQlpZiAoZmJfZmluZF9tb2RlX2N2dCgmY3Z0X21vZGUsIDAsIDApKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gQ1ZUIG1vZGUgZm91bmQgZm9yIHBhbmVsXG4iKTsKKwkJZWxzZSBpZiAoZmJfZmluZF9tb2RlKCZpbmZvLT52YXIsIGluZm8sIE5VTEwsIE5VTEwsIDAsCisJCQkJICAgICAgJmN2dF9tb2RlLCAwKSAhPSAzKQorCQkJaW5mby0+dmFyID0gc2F2YWdlZmJfdmFyODAweDYwMHg4OworCX0KIAogCWlmIChtb2RlX29wdGlvbikgewogCQlmYl9maW5kX21vZGUoJmluZm8tPnZhciwgaW5mbywgbW9kZV9vcHRpb24sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCmluZGV4IDQwNGMwM2IuLjAxOWRiZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCkBAIC00NzAsNyArNDcwLDcgQEAKIAl1bnNpZ25lZCBsb25nIHRtcDsKIAlpbnQgYnBwID0gMDsKIAl1bnNpZ25lZCBsb25nIGxkZGRzcjsKLQlpbnQgaywgbTsKKwlpbnQgaywgbSwgcmV0OwogCiAJLyogZW5hYmxlIGNsb2NrcyBiZWZvcmUgYWNjZXNzaW5nIHRoZSBoYXJkd2FyZSAqLwogCWZvciAoayA9IDA7IGsgPCBBUlJBWV9TSVpFKHByaXYtPmNoKTsgaysrKSB7CkBAIC01NDAsNyArNTQwLDcgQEAKIAogCQlib2FyZF9jZmcgPSAmY2gtPmNmZy5ib2FyZF9jZmc7CiAJCWlmIChib2FyZF9jZmctPnNldHVwX3N5cykgewotCQkJaW50IHJldCA9IGJvYXJkX2NmZy0+c2V0dXBfc3lzKGJvYXJkX2NmZy0+Ym9hcmRfZGF0YSwKKwkJCXJldCA9IGJvYXJkX2NmZy0+c2V0dXBfc3lzKGJvYXJkX2NmZy0+Ym9hcmRfZGF0YSwKIAkJCQkJCWNoLCAmc2hfbW9iaWxlX2xjZGNfc3lzX2J1c19vcHMpOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92Z2ExNmZiLmMgYi9kcml2ZXJzL3ZpZGVvL3ZnYTE2ZmIuYwppbmRleCA1M2IyYzVhLi4zMDVjOTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZnYTE2ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZnYTE2ZmIuYwpAQCAtMTI2NSw5ICsxMjY1LDExIEBACiAKIHN0YXRpYyB2b2lkIHZnYTE2ZmJfZGVzdHJveShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoaW5mby0+ZGV2aWNlLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOwogCWlvdW5tYXAoaW5mby0+c2NyZWVuX2Jhc2UpOwogCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CiAJLyogWFhYIHVuc2hhcmUgVkdBIHJlZ2lvbnMgKi8KKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8veGVuLWZiZnJvbnQuYyBiL2RyaXZlcnMvdmlkZW8veGVuLWZiZnJvbnQuYwppbmRleCBhMjAyMThjLi5iZWFjNTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3hlbi1mYmZyb250LmMKKysrIGIvZHJpdmVycy92aWRlby94ZW4tZmJmcm9udC5jCkBAIC0zOTUsMTAgKzM5NSw5IEBACiAJc3Bpbl9sb2NrX2luaXQoJmluZm8tPmRpcnR5X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZpbmZvLT5yZXNpemVfbG9jayk7CiAKLQlpbmZvLT5mYiA9IHZtYWxsb2MoZmJfc2l6ZSk7CisJaW5mby0+ZmIgPSB2emFsbG9jKGZiX3NpemUpOwogCWlmIChpbmZvLT5mYiA9PSBOVUxMKQogCQlnb3RvIGVycm9yX25vbWVtOwotCW1lbXNldChpbmZvLT5mYiwgMCwgZmJfc2l6ZSk7CiAKIAlpbmZvLT5ucl9wYWdlcyA9IChmYl9zaXplICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vZXZlbnRzLmMgYi9kcml2ZXJzL3hlbi9ldmVudHMuYwppbmRleCAzZmY4MjJiLi41NTNkYTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9ldmVudHMuYworKysgYi9kcml2ZXJzL3hlbi9ldmVudHMuYwpAQCAtNjI2LDYgKzYyNiw5IEBACiAgKgogICogTm90ZTogV2UgZG9uJ3QgYXNzaWduIGFuIGV2ZW50IGNoYW5uZWwgdW50aWwgdGhlIGlycSBhY3R1YWxseSBzdGFydGVkCiAgKiB1cC4gIFJldHVybiBhbiBleGlzdGluZyBpcnEgaWYgd2UndmUgYWxyZWFkeSBnb3Qgb25lIGZvciB0aGUgZ3NpLgorICoKKyAqIFNoYXJlYWJsZSBpbXBsaWVzIGxldmVsIHRyaWdnZXJlZCwgbm90IHNoYXJlYWJsZSBpbXBsaWVzIGVkZ2UKKyAqIHRyaWdnZXJlZCBoZXJlLgogICovCiBpbnQgeGVuX2JpbmRfcGlycV9nc2lfdG9faXJxKHVuc2lnbmVkIGdzaSwKIAkJCSAgICAgdW5zaWduZWQgcGlycSwgaW50IHNoYXJlYWJsZSwgY2hhciAqbmFtZSkKQEAgLTY2NCwxNiArNjY3LDEzIEBACiAKIAlwaXJxX3F1ZXJ5X3VubWFzayhpcnEpOwogCS8qIFdlIHRyeSB0byB1c2UgdGhlIGhhbmRsZXIgd2l0aCB0aGUgYXBwcm9wcmlhdGUgc2VtYW50aWMgZm9yIHRoZQotCSAqIHR5cGUgb2YgaW50ZXJydXB0OiBpZiB0aGUgaW50ZXJydXB0IGRvZXNuJ3QgbmVlZCBhbiBlb2kKLQkgKiAocGlycV9uZWVkc19lb2kgcmV0dXJucyBmYWxzZSksIHdlIHRyZWF0IGl0IGxpa2UgYW4gZWRnZQotCSAqIHRyaWdnZXJlZCBpbnRlcnJ1cHQgc28gd2UgdXNlIGhhbmRsZV9lZGdlX2lycS4KLQkgKiBBcyBhIG1hdHRlciBvZiBmYWN0IHRoaXMgb25seSBoYXBwZW5zIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcKLQkgKiBwaHlzaWNhbCBpbnRlcnJ1cHQgaXMgZWRnZSB0cmlnZ2VyZWQgb3IgYW4gbXNpLgorCSAqIHR5cGUgb2YgaW50ZXJydXB0OiBpZiB0aGUgaW50ZXJydXB0IGlzIGFuIGVkZ2UgdHJpZ2dlcmVkCisJICogaW50ZXJydXB0IHdlIHVzZSBoYW5kbGVfZWRnZV9pcnEuCiAJICoKLQkgKiBPbiB0aGUgb3RoZXIgaGFuZCBpZiB0aGUgaW50ZXJydXB0IG5lZWRzIGFuIGVvaSAocGlycV9uZWVkc19lb2kKLQkgKiByZXR1cm5zIHRydWUpIHdlIHRyZWF0IGl0IGxpa2UgYSBsZXZlbCB0cmlnZ2VyZWQgaW50ZXJydXB0IHNvIHdlCi0JICogdXNlIGhhbmRsZV9mYXN0ZW9pX2lycSBsaWtlIHRoZSBuYXRpdmUgY29kZSBkb2VzIGZvciB0aGlzIGtpbmQgb2YKKwkgKiBPbiB0aGUgb3RoZXIgaGFuZCBpZiB0aGUgaW50ZXJydXB0IGlzIGxldmVsIHRyaWdnZXJlZCB3ZSB1c2UKKwkgKiBoYW5kbGVfZmFzdGVvaV9pcnEgbGlrZSB0aGUgbmF0aXZlIGNvZGUgZG9lcyBmb3IgdGhpcyBraW5kIG9mCiAJICogaW50ZXJydXB0cy4KKwkgKgogCSAqIERlcGVuZGluZyBvbiB0aGUgWGVuIHZlcnNpb24sIHBpcnFfbmVlZHNfZW9pIG1pZ2h0IHJldHVybiB0cnVlCiAJICogbm90IG9ubHkgZm9yIGxldmVsIHRyaWdnZXJlZCBpbnRlcnJ1cHRzIGJ1dCBmb3IgZWRnZSB0cmlnZ2VyZWQKIAkgKiBpbnRlcnJ1cHRzIHRvby4gSW4gYW55IGNhc2UgWGVuIGFsd2F5cyBob25vcnMgdGhlIGVvaSBtZWNoYW5pc20sCkBAIC02ODEsNyArNjgxLDcgQEAKIAkgKiBoYXNuJ3QgcmVjZWl2ZWQgYW4gZW9pIHlldC4gVGhlcmVmb3JlIHVzaW5nIHRoZSBmYXN0ZW9pIGhhbmRsZXIKIAkgKiBpcyB0aGUgcmlnaHQgY2hvaWNlIGVpdGhlciB3YXkuCiAJICovCi0JaWYgKHBpcnFfbmVlZHNfZW9pKGlycSkpCisJaWYgKHNoYXJlYWJsZSkKIAkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmeGVuX3BpcnFfY2hpcCwKIAkJCQloYW5kbGVfZmFzdGVvaV9pcnEsIG5hbWUpOwogCWVsc2UKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3N1cGVyLmMgYi9mcy9idHJmcy9zdXBlci5jCmluZGV4IDExN2U3NGUuLjBiYjRlYmIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3N1cGVyLmMKKysrIGIvZnMvYnRyZnMvc3VwZXIuYwpAQCAtODI1LDcgKzgyNSw3IEBACiAJfSBlbHNlIHsKIAkJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCi0JCXMtPnNfZmxhZ3MgPSBmbGFnczsKKwkJcy0+c19mbGFncyA9IGZsYWdzIHwgTVNfTk9TRUM7CiAJCXN0cmxjcHkocy0+c19pZCwgYmRldm5hbWUoYmRldiwgYiksIHNpemVvZihzLT5zX2lkKSk7CiAJCWVycm9yID0gYnRyZnNfZmlsbF9zdXBlcihzLCBmc19kZXZpY2VzLCBkYXRhLAogCQkJCQkgZmxhZ3MgJiBNU19TSUxFTlQgPyAxIDogMCk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL0tjb25maWcgYi9mcy9jaWZzL0tjb25maWcKaW5kZXggMWNkNGMzYS4uNTNlZDFhZCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9LY29uZmlnCisrKyBiL2ZzL2NpZnMvS2NvbmZpZwpAQCAtNyw2ICs3LDcgQEAKIAlzZWxlY3QgQ1JZUFRPX01ENQogCXNlbGVjdCBDUllQVE9fSE1BQwogCXNlbGVjdCBDUllQVE9fQVJDNAorCXNlbGVjdCBDUllQVE9fRUNCCiAJc2VsZWN0IENSWVBUT19ERVMKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBjbGllbnQgVkZTIG1vZHVsZSBmb3IgdGhlIENvbW1vbiBJbnRlcm5ldCBGaWxlIFN5c3RlbQpAQCAtMTQ4LDcgKzE0OSw3IEBACiAKIGNvbmZpZyBDSUZTX0FDTAogCSAgYm9vbCAiUHJvdmlkZSBDSUZTIEFDTCBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCSAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgQ0lGU19YQVRUUgorCSAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgQ0lGU19YQVRUUiAmJiBLRVlTCiAJICBoZWxwCiAJICAgIEFsbG93cyB0byBmZXRjaCBDSUZTL05URlMgQUNMIGZyb20gdGhlIHNlcnZlci4gIFRoZSBEQUNMIGJsb2IKIAkgICAgaXMgaGFuZGVkIG92ZXIgdG8gdGhlIGFwcGxpY2F0aW9uL2NhbGxlci4KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYyBiL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYwppbmRleCBkZmJkOWYxLi41YTBlZTdmIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNlbmNyeXB0LmMKKysrIGIvZnMvY2lmcy9jaWZzZW5jcnlwdC5jCkBAIC0xODQsNyArMTg0LDcgQEAKIAlpZiAoY2lmc19wZHUgPT0gTlVMTCB8fCBzZXJ2ZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoY2lmc19wZHUtPkNvbW1hbmQgPT0gU01CX0NPTV9ORUdPVElBVEUpCisJaWYgKCFzZXJ2ZXItPnNlc3Npb25fZXN0YWIpCiAJCXJldHVybiAwOwogCiAJaWYgKGNpZnNfcGR1LT5Db21tYW5kID09IFNNQl9DT01fTE9DS0lOR19BTkRYKSB7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2Nvbm5lY3QuYyBiL2ZzL2NpZnMvY29ubmVjdC5jCmluZGV4IDZkODhiODIuLmJiNjU5ZWIgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY29ubmVjdC5jCisrKyBiL2ZzL2NpZnMvY29ubmVjdC5jCkBAIC03ODQsNyArNzg0LDcgQEAKIAkJCSBzdHJ1Y3Qgc21iX3ZvbCAqdm9sKQogewogCWNoYXIgKnZhbHVlLCAqZGF0YSwgKmVuZDsKLQljaGFyICptb3VudGRhdGFfY29weSwgKm9wdGlvbnM7CisJY2hhciAqbW91bnRkYXRhX2NvcHkgPSBOVUxMLCAqb3B0aW9uczsKIAl1bnNpZ25lZCBpbnQgIHRlbXBfbGVuLCBpLCBqOwogCWNoYXIgc2VwYXJhdG9yWzJdOwogCXNob3J0IGludCBvdmVycmlkZV91aWQgPSAtMTsKQEAgLTEzOTEsNyArMTM5MSw3IEBACiAJCQkJIi9wcm9jL2ZzL2NpZnMvTG9va3VwQ2FjaGVFbmFibGVkIHRvIDBcbiIpOwogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJmc2MiLCAzKSA9PSAwKSB7CiAjaWZuZGVmIENPTkZJR19DSUZTX0ZTQ0FDSEUKLQkJCWNFUlJPUigxLCAiRlMtQ2FjaGUgc3VwcG9ydCBuZWVkcyBDT05GSUdfQ0lGU19GU0NBQ0hFIgorCQkJY0VSUk9SKDEsICJGUy1DYWNoZSBzdXBwb3J0IG5lZWRzIENPTkZJR19DSUZTX0ZTQ0FDSEUgIgogCQkJCSAgImtlcm5lbCBjb25maWcgb3B0aW9uIHNldCIpOwogCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKICNlbmRpZgpAQCAtMTk3Niw3ICsxOTc2LDcgQEAKIAkJd2FybmVkX29uX250bG0gPSB0cnVlOwogCQljRVJST1IoMSwgImRlZmF1bHQgc2VjdXJpdHkgbWVjaGFuaXNtIHJlcXVlc3RlZC4gIFRoZSBkZWZhdWx0ICIKIAkJCSJzZWN1cml0eSBtZWNoYW5pc20gd2lsbCBiZSB1cGdyYWRlZCBmcm9tIG50bG0gdG8gIgotCQkJIm50bG12MiBpbiBrZXJuZWwgcmVsZWFzZSAyLjYuNDEiKTsKKwkJCSJudGxtdjIgaW4ga2VybmVsIHJlbGVhc2UgMy4xIik7CiAJfQogCXNlcy0+b3ZlcnJpZGVTZWNGbGcgPSB2b2x1bWVfaW5mby0+c2VjRmxnOwogCmRpZmYgLS1naXQgYS9mcy9mYXQvZmlsZS5jIGIvZnMvZmF0L2ZpbGUuYwppbmRleCA3MjU3NzUyLi43MDE4ZTFkIDEwMDY0NAotLS0gYS9mcy9mYXQvZmlsZS5jCisrKyBiL2ZzL2ZhdC9maWxlLmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogCQlpZiAoYXR0ciAmIEFUVFJfU1lTKQogCQkJaW5vZGUtPmlfZmxhZ3MgfD0gU19JTU1VVEFCTEU7CiAJCWVsc2UKLQkJCWlub2RlLT5pX2ZsYWdzICY9IFNfSU1NVVRBQkxFOworCQkJaW5vZGUtPmlfZmxhZ3MgJj0gflNfSU1NVVRBQkxFOwogCX0KIAogCWZhdF9zYXZlX2F0dHJzKGlub2RlLCBhdHRyKTsKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvaW5vZGUuYyBiL2ZzL2Z1c2UvaW5vZGUuYwppbmRleCBjYzZlYzRiLi4zOGY4NGNkIDEwMDY0NAotLS0gYS9mcy9mdXNlL2lub2RlLmMKKysrIGIvZnMvZnVzZS9pbm9kZS5jCkBAIC05MjEsNiArOTIxLDggQEAKIAlpZiAoc2ItPnNfZmxhZ3MgJiBNU19NQU5ETE9DSykKIAkJZ290byBlcnI7CiAKKwlzYi0+c19mbGFncyAmPSB+TVNfTk9TRUM7CisKIAlpZiAoIXBhcnNlX2Z1c2Vfb3B0KChjaGFyICopIGRhdGEsICZkLCBpc19iZGV2KSkKIAkJZ290byBlcnI7CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZ2xvY2suYyBiL2ZzL2dmczIvZ2xvY2suYwppbmRleCAyNzkyYTc5Li4xYzEzMzZlIDEwMDY0NAotLS0gYS9mcy9nZnMyL2dsb2NrLmMKKysrIGIvZnMvZ2ZzMi9nbG9jay5jCkBAIC02NjMsMTQgKzY2MywxOSBAQAogCQlkcm9wX3JlZiA9IDE7CiAJfQogCXNwaW5fbG9jaygmZ2wtPmdsX3NwaW4pOwotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoR0xGX1BFTkRJTkdfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKSAmJgorCWlmICh0ZXN0X2JpdChHTEZfUEVORElOR19ERU1PVEUsICZnbC0+Z2xfZmxhZ3MpICYmCiAJICAgIGdsLT5nbF9zdGF0ZSAhPSBMTV9TVF9VTkxPQ0tFRCAmJgogCSAgICBnbC0+Z2xfZGVtb3RlX3N0YXRlICE9IExNX1NUX0VYQ0xVU0lWRSkgewogCQl1bnNpZ25lZCBsb25nIGhvbGR0aW1lLCBub3cgPSBqaWZmaWVzOworCiAJCWhvbGR0aW1lID0gZ2wtPmdsX3RjaGFuZ2UgKyBnbC0+Z2xfb3BzLT5nb19taW5faG9sZF90aW1lOwogCQlpZiAodGltZV9iZWZvcmUobm93LCBob2xkdGltZSkpCiAJCQlkZWxheSA9IGhvbGR0aW1lIC0gbm93OwotCQlzZXRfYml0KGRlbGF5ID8gR0xGX1BFTkRJTkdfREVNT1RFIDogR0xGX0RFTU9URSwgJmdsLT5nbF9mbGFncyk7CisKKwkJaWYgKCFkZWxheSkgeworCQkJY2xlYXJfYml0KEdMRl9QRU5ESU5HX0RFTU9URSwgJmdsLT5nbF9mbGFncyk7CisJCQlzZXRfYml0KEdMRl9ERU1PVEUsICZnbC0+Z2xfZmxhZ3MpOworCQl9CiAJfQogCXJ1bl9xdWV1ZShnbCwgMCk7CiAJc3Bpbl91bmxvY2soJmdsLT5nbF9zcGluKTsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfbG9nbWdyLmMgYi9mcy9qZnMvamZzX2xvZ21nci5jCmluZGV4IDI3OGUzZmIuLjU4MzYzNmYgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfbG9nbWdyLmMKKysrIGIvZnMvamZzL2pmc19sb2dtZ3IuYwpAQCAtMTEyMyw3ICsxMTIzLDcgQEAKIAliZGV2ID0gYmxrZGV2X2dldF9ieV9kZXYoc2JpLT5sb2dkZXYsIEZNT0RFX1JFQUR8Rk1PREVfV1JJVEV8Rk1PREVfRVhDTCwKIAkJCQkgbG9nKTsKIAlpZiAoSVNfRVJSKGJkZXYpKSB7Ci0JCXJjID0gLVBUUl9FUlIoYmRldik7CisJCXJjID0gUFRSX0VSUihiZGV2KTsKIAkJZ290byBmcmVlOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggZTJlNGU4ZC4uOTgwMjM0NSAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC0yNjI0LDYgKzI2MjQsMTAgQEAKIAllcnJvciA9IFBUUl9FUlIoZGVudHJ5KTsKIAlpZiAoSVNfRVJSKGRlbnRyeSkpCiAJCWdvdG8gZXhpdDI7CisJaWYgKCFkZW50cnktPmRfaW5vZGUpIHsKKwkJZXJyb3IgPSAtRU5PRU5UOworCQlnb3RvIGV4aXQzOworCX0KIAllcnJvciA9IG1udF93YW50X3dyaXRlKG5kLnBhdGgubW50KTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZXhpdDM7CkBAIC0yNzA5LDExICsyNzEzLDEwIEBACiAJZXJyb3IgPSBQVFJfRVJSKGRlbnRyeSk7CiAJaWYgKCFJU19FUlIoZGVudHJ5KSkgewogCQkvKiBXaHkgbm90IGJlZm9yZT8gQmVjYXVzZSB3ZSB3YW50IGNvcnJlY3QgZXJyb3IgdmFsdWUgKi8KLQkJaWYgKG5kLmxhc3QubmFtZVtuZC5sYXN0Lmxlbl0pCi0JCQlnb3RvIHNsYXNoZXM7CiAJCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCQlpZiAoaW5vZGUpCi0JCQlpaG9sZChpbm9kZSk7CisJCWlmIChuZC5sYXN0Lm5hbWVbbmQubGFzdC5sZW5dIHx8ICFpbm9kZSkKKwkJCWdvdG8gc2xhc2hlczsKKwkJaWhvbGQoaW5vZGUpOwogCQllcnJvciA9IG1udF93YW50X3dyaXRlKG5kLnBhdGgubW50KTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBleGl0MjsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1cGVyLmMgYi9mcy9vY2ZzMi9zdXBlci5jCmluZGV4IGNkYmFmNWUuLjU2ZjYxMDIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1cGVyLmMKKysrIGIvZnMvb2NmczIvc3VwZXIuYwpAQCAtMTA3Miw3ICsxMDcyLDcgQEAKIAogCXNiLT5zX21hZ2ljID0gT0NGUzJfU1VQRVJfTUFHSUM7CiAKLQlzYi0+c19mbGFncyA9IChzYi0+c19mbGFncyAmIH5NU19QT1NJWEFDTCkgfAorCXNiLT5zX2ZsYWdzID0gKHNiLT5zX2ZsYWdzICYgfihNU19QT1NJWEFDTCB8IE1TX05PU0VDKSkgfAogCQkoKG9zYi0+c19tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpID8gTVNfUE9TSVhBQ0wgOiAwKTsKIAogCS8qIEhhcmQgcmVhZG9ubHkgbW9kZSBvbmx5IGlmOiBiZGV2X3JlYWRfb25seSwgTVNfUkRPTkxZLApkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggYzc1NTkzOS4uYWIzZDY3MiAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYworKysgYi9mcy9zdXBlci5jCkBAIC04MjIsNyArODIyLDcgQEAKIAl9IGVsc2UgewogCQljaGFyIGJbQkRFVk5BTUVfU0laRV07CiAKLQkJcy0+c19mbGFncyA9IGZsYWdzOworCQlzLT5zX2ZsYWdzID0gZmxhZ3MgfCBNU19OT1NFQzsKIAkJcy0+c19tb2RlID0gbW9kZTsKIAkJc3RybGNweShzLT5zX2lkLCBiZGV2bmFtZShiZGV2LCBiKSwgc2l6ZW9mKHMtPnNfaWQpKTsKIAkJc2Jfc2V0X2Jsb2Nrc2l6ZShzLCBibG9ja19zaXplKGJkZXYpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaCBiL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaAppbmRleCBmMDRiMmEzLi5lMDhmMzQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCkBAIC00NjcsNiArNDY3LDE3IEBACiAJezB4MTAwMiwgMHg5NjE0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzgwfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCiAJezB4MTAwMiwgMHg5NjE1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzgwfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCiAJezB4MTAwMiwgMHg5NjE2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzgwfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCisJezB4MTAwMiwgMHg5NjQwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1NVTU98UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKKwl7MHgxMDAyLCAweDk2NDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfU1VNT3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKKwl7MHgxMDAyLCAweDk2NDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfU1VNTzJ8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKKwl7MHgxMDAyLCAweDk2NDMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfU1VNTzJ8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCisJezB4MTAwMiwgMHg5NjQ0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1NVTU8yfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCisJezB4MTAwMiwgMHg5NjQ1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1NVTU8yfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAorCXsweDEwMDIsIDB4OTY0NywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9TVU1PfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSxcCisJezB4MTAwMiwgMHg5NjQ4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1NVTU98UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LFwKKwl7MHgxMDAyLCAweDk2NGEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfU1VNT3xSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAorCXsweDEwMDIsIDB4OTY0ZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9TVU1PfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSxcCisJezB4MTAwMiwgMHg5NjRmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1NVTU98UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LFwKIAl7MHgxMDAyLCAweDk3MTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM4ODB8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKIAl7MHgxMDAyLCAweDk3MTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM4ODB8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKIAl7MHgxMDAyLCAweDk3MTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM4ODB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggYzU1ZDZiNy4uMWM3Nzc4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMjA4LDYgKzIwOCw3IEBACiAjZGVmaW5lIE1TX0tFUk5NT1VOVAkoMTw8MjIpIC8qIHRoaXMgaXMgYSBrZXJuX21vdW50IGNhbGwgKi8KICNkZWZpbmUgTVNfSV9WRVJTSU9OCSgxPDwyMykgLyogVXBkYXRlIGlub2RlIElfdmVyc2lvbiBmaWVsZCAqLwogI2RlZmluZSBNU19TVFJJQ1RBVElNRQkoMTw8MjQpIC8qIEFsd2F5cyBwZXJmb3JtIGF0aW1lIHVwZGF0ZXMgKi8KKyNkZWZpbmUgTVNfTk9TRUMJKDE8PDI4KQogI2RlZmluZSBNU19CT1JOCQkoMTw8MjkpCiAjZGVmaW5lIE1TX0FDVElWRQkoMTw8MzApCiAjZGVmaW5lIE1TX05PVVNFUgkoMTw8MzEpCkBAIC03NDMsOSArNzQ0LDEzIEBACiAKIAlzcGlubG9ja190CQlpX2xvY2s7CS8qIGlfYmxvY2tzLCBpX2J5dGVzLCBtYXliZSBpX3NpemUgKi8KIAl1bnNpZ25lZCBpbnQJCWlfZmxhZ3M7CisJdW5zaWduZWQgaW50CQlpX3N0YXRlOworI2lmZGVmIENPTkZJR19TRUNVUklUWQorCXZvaWQJCQkqaV9zZWN1cml0eTsKKyNlbmRpZgogCXN0cnVjdCBtdXRleAkJaV9tdXRleDsKIAotCXVuc2lnbmVkIGxvbmcJCWlfc3RhdGU7CisKIAl1bnNpZ25lZCBsb25nCQlkaXJ0aWVkX3doZW47CS8qIGppZmZpZXMgb2YgZmlyc3QgZGlydHlpbmcgKi8KIAogCXN0cnVjdCBobGlzdF9ub2RlCWlfaGFzaDsKQEAgLTc5Nyw5ICs4MDIsNiBAQAogCWF0b21pY190CQlpX3JlYWRjb3VudDsgLyogc3RydWN0IGZpbGVzIG9wZW4gUk8gKi8KICNlbmRpZgogCWF0b21pY190CQlpX3dyaXRlY291bnQ7Ci0jaWZkZWYgQ09ORklHX1NFQ1VSSVRZCi0Jdm9pZAkJCSppX3NlY3VyaXR5OwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX0ZTX1BPU0lYX0FDTAogCXN0cnVjdCBwb3NpeF9hY2wJKmlfYWNsOwogCXN0cnVjdCBwb3NpeF9hY2wJKmlfZGVmYXVsdF9hY2w7CkBAIC0yNTkxLDcgKzI1OTMsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5vZGVfaGFzX25vX3hhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JaWYgKCFpc19zeGlkKGlub2RlLT5pX21vZGUpKQorCWlmICghaXNfc3hpZChpbm9kZS0+aV9tb2RlKSAmJiAoaW5vZGUtPmlfc2ItPnNfZmxhZ3MgJiBNU19OT1NFQykpCiAJCWlub2RlLT5pX2ZsYWdzIHw9IFNfTk9TRUM7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxcmV0dXJuLmggYi9pbmNsdWRlL2xpbnV4L2lycXJldHVybi5oCmluZGV4IDgxOWFjYWEuLjcxNGJhMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxcmV0dXJuLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcnFyZXR1cm4uaApAQCAtOCw5ICs4LDkgQEAKICAqIEBJUlFfV0FLRV9USFJFQUQJaGFuZGxlciByZXF1ZXN0cyB0byB3YWtlIHRoZSBoYW5kbGVyIHRocmVhZAogICovCiBlbnVtIGlycXJldHVybiB7Ci0JSVJRX05PTkUsCi0JSVJRX0hBTkRMRUQsCi0JSVJRX1dBS0VfVEhSRUFELAorCUlSUV9OT05FCQk9ICgwIDw8IDApLAorCUlSUV9IQU5ETEVECQk9ICgxIDw8IDApLAorCUlSUV9XQUtFX1RIUkVBRAkJPSAoMSA8PCAxKSwKIH07CiAKIHR5cGVkZWYgZW51bSBpcnFyZXR1cm4gaXJxcmV0dXJuX3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCmluZGV4IDM0MTI2ODQuLmUwNzg2ZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCkBAIC0xMzcsMTQgKzEzNywxNCBAQAogICoKICAqIHN0cnVjdCByZWFkX2Zvcm1hdCB7CiAgKgl7IHU2NAkJdmFsdWU7Ci0gKgkgIHsgdTY0CQl0aW1lX2VuYWJsZWQ7IH0gJiYgUEVSRl9GT1JNQVRfRU5BQkxFRAotICoJICB7IHU2NAkJdGltZV9ydW5uaW5nOyB9ICYmIFBFUkZfRk9STUFUX1JVTk5JTkcKKyAqCSAgeyB1NjQJCXRpbWVfZW5hYmxlZDsgfSAmJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX0VOQUJMRUQKKyAqCSAgeyB1NjQJCXRpbWVfcnVubmluZzsgfSAmJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkcKICAqCSAgeyB1NjQJCWlkOyAgICAgICAgICAgfSAmJiBQRVJGX0ZPUk1BVF9JRAogICoJfSAmJiAhUEVSRl9GT1JNQVRfR1JPVVAKICAqCiAgKgl7IHU2NAkJbnI7Ci0gKgkgIHsgdTY0CQl0aW1lX2VuYWJsZWQ7IH0gJiYgUEVSRl9GT1JNQVRfRU5BQkxFRAotICoJICB7IHU2NAkJdGltZV9ydW5uaW5nOyB9ICYmIFBFUkZfRk9STUFUX1JVTk5JTkcKKyAqCSAgeyB1NjQJCXRpbWVfZW5hYmxlZDsgfSAmJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX0VOQUJMRUQKKyAqCSAgeyB1NjQJCXRpbWVfcnVubmluZzsgfSAmJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkcKICAqCSAgeyB1NjQJCXZhbHVlOwogICoJICAgIHsgdTY0CWlkOyAgICAgICAgICAgfSAmJiBQRVJGX0ZPUk1BVF9JRAogICoJICB9CQljbnRyW25yXTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCAyYTg2MjFjLi5hODM3YjIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC0xMDYzLDYgKzEwNjMsNyBAQAogICovCiAjZGVmaW5lIFdGX1NZTkMJCTB4MDEJCS8qIHdha2VyIGdvZXMgdG8gc2xlZXAgYWZ0ZXIgd2FrdXAgKi8KICNkZWZpbmUgV0ZfRk9SSwkJMHgwMgkJLyogY2hpbGQgd2FrZXVwIGFmdGVyIGZvcmsgKi8KKyNkZWZpbmUgV0ZfTUlHUkFURUQJMHgwNAkJLyogaW50ZXJuYWwgdXNlLCB0YXNrIGdvdCBtaWdyYXRlZCAqLwogCiAjZGVmaW5lIEVOUVVFVUVfV0FLRVVQCQkxCiAjZGVmaW5lIEVOUVVFVUVfSEVBRAkJMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaCBiL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmgKaW5kZXggNzE2OTNkNC4uMTdkZjM2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYl91c3VhbC5oCkBAIC02Miw3ICs2Miw5IEBACiAJVVNfRkxBRyhOT19SRUFEX0RJU0NfSU5GTywJMHgwMDA0MDAwMCkJCVwKIAkJLyogY2Fubm90IGhhbmRsZSBSRUFEX0RJU0NfSU5GTyAqLwkJXAogCVVTX0ZMQUcoTk9fUkVBRF9DQVBBQ0lUWV8xNiwJMHgwMDA4MDAwMCkJCVwKLQkJLyogY2Fubm90IGhhbmRsZSBSRUFEX0NBUEFDSVRZXzE2ICovCisJCS8qIGNhbm5vdCBoYW5kbGUgUkVBRF9DQVBBQ0lUWV8xNiAqLwkJXAorCVVTX0ZMQUcoSU5JVElBTF9SRUFEMTAsCTB4MDAxMDAwMDApCQkJXAorCQkvKiBJbml0aWFsIFJFQUQoMTApIChhbmQgb3RoZXJzKSBtdXN0IGJlIHJldHJpZWQgKi8KIAogI2RlZmluZSBVU19GTEFHKG5hbWUsIHZhbHVlKQlVU19GTF8jI25hbWUgPSB2YWx1ZSAsCiBlbnVtIHsgVVNfRE9fQUxMX0ZMQUdTIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmggYi9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmgKaW5kZXggOTNlOTZmYi4uYzdjNDBmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaApAQCAtMTI4LDggKzEyOCw4IEBACiAJc3RydWN0IG11dGV4ICpsb2NrOwogfTsKIAotI2RlZmluZSBtZWRpYV9lbnRpdHlfdG9fdmlkZW9fZGV2aWNlKGVudGl0eSkgXAotCWNvbnRhaW5lcl9vZihlbnRpdHksIHN0cnVjdCB2aWRlb19kZXZpY2UsIGVudGl0eSkKKyNkZWZpbmUgbWVkaWFfZW50aXR5X3RvX3ZpZGVvX2RldmljZShfX2UpIFwKKwljb250YWluZXJfb2YoX19lLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCBlbnRpdHkpCiAvKiBkZXYgdG8gdmlkZW8tZGV2aWNlICovCiAjZGVmaW5lIHRvX3ZpZGVvX2RldmljZShjZCkgY29udGFpbmVyX29mKGNkLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCBkZXYpCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9ldmVudHMvY29yZS5jIGIva2VybmVsL2V2ZW50cy9jb3JlLmMKaW5kZXggZDg2M2IzYy4uOWVmZTcxMCAxMDA2NDQKLS0tIGEva2VybmVsL2V2ZW50cy9jb3JlLmMKKysrIGIva2VybmVsL2V2ZW50cy9jb3JlLmMKQEAgLTc0MDIsMjYgKzc0MDIsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcGVyZl9jZ3JvdXBfbW92ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCitzdGF0aWMgdm9pZAorcGVyZl9jZ3JvdXBfYXR0YWNoX3Rhc2soc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewogCXRhc2tfZnVuY3Rpb25fY2FsbCh0YXNrLCBfX3BlcmZfY2dyb3VwX21vdmUsIHRhc2spOwogfQogCi1zdGF0aWMgdm9pZCBwZXJmX2Nncm91cF9hdHRhY2goc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwLAotCQlzdHJ1Y3QgY2dyb3VwICpvbGRfY2dycCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAotCQlib29sIHRocmVhZGdyb3VwKQotewotCXBlcmZfY2dyb3VwX21vdmUodGFzayk7Ci0JaWYgKHRocmVhZGdyb3VwKSB7Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqYzsKLQkJcmN1X3JlYWRfbG9jaygpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjLCAmdGFzay0+dGhyZWFkX2dyb3VwLCB0aHJlYWRfZ3JvdXApIHsKLQkJCXBlcmZfY2dyb3VwX21vdmUoYyk7Ci0JCX0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBwZXJmX2Nncm91cF9leGl0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY2dycCwKIAkJc3RydWN0IGNncm91cCAqb2xkX2NncnAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKQEAgLTc0MzMsNyArNzQxOSw3IEBACiAJaWYgKCEodGFzay0+ZmxhZ3MgJiBQRl9FWElUSU5HKSkKIAkJcmV0dXJuOwogCi0JcGVyZl9jZ3JvdXBfbW92ZSh0YXNrKTsKKwlwZXJmX2Nncm91cF9hdHRhY2hfdGFzayhjZ3JwLCB0YXNrKTsKIH0KIAogc3RydWN0IGNncm91cF9zdWJzeXMgcGVyZl9zdWJzeXMgPSB7CkBAIC03NDQyLDYgKzc0MjgsNiBAQAogCS5jcmVhdGUJCT0gcGVyZl9jZ3JvdXBfY3JlYXRlLAogCS5kZXN0cm95CT0gcGVyZl9jZ3JvdXBfZGVzdHJveSwKIAkuZXhpdAkJPSBwZXJmX2Nncm91cF9leGl0LAotCS5hdHRhY2gJCT0gcGVyZl9jZ3JvdXBfYXR0YWNoLAorCS5hdHRhY2hfdGFzawk9IHBlcmZfY2dyb3VwX2F0dGFjaF90YXNrLAogfTsKICNlbmRpZiAvKiBDT05GSUdfQ0dST1VQX1BFUkYgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaGFuZGxlLmMgYi9rZXJuZWwvaXJxL2hhbmRsZS5jCmluZGV4IDkwY2I1NWYuLjQ3MGQwOGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaGFuZGxlLmMKKysrIGIva2VybmVsL2lycS9oYW5kbGUuYwpAQCAtMTMzLDEyICsxMzMsNiBAQAogCQlzd2l0Y2ggKHJlcykgewogCQljYXNlIElSUV9XQUtFX1RIUkVBRDoKIAkJCS8qCi0JCQkgKiBTZXQgcmVzdWx0IHRvIGhhbmRsZWQgc28gdGhlIHNwdXJpb3VzIGNoZWNrCi0JCQkgKiBkb2VzIG5vdCB0cmlnZ2VyLgotCQkJICovCi0JCQlyZXMgPSBJUlFfSEFORExFRDsKLQotCQkJLyoKIAkJCSAqIENhdGNoIGRyaXZlcnMgd2hpY2ggcmV0dXJuIFdBS0VfVEhSRUFEIGJ1dAogCQkJICogZGlkIG5vdCBzZXQgdXAgYSB0aHJlYWQgZnVuY3Rpb24KIAkJCSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9pcnFkZXNjLmMgYi9rZXJuZWwvaXJxL2lycWRlc2MuYwppbmRleCA4ODZlODAzLi40YzYwYTUwIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2lycWRlc2MuYworKysgYi9rZXJuZWwvaXJxL2lycWRlc2MuYwpAQCAtMjU3LDEzICsyNTcsMTEgQEAKIAljb3VudCA9IEFSUkFZX1NJWkUoaXJxX2Rlc2MpOwogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJZGVzY1tpXS5pcnFfZGF0YS5pcnEgPSBpOwotCQlkZXNjW2ldLmlycV9kYXRhLmNoaXAgPSAmbm9faXJxX2NoaXA7CiAJCWRlc2NbaV0ua3N0YXRfaXJxcyA9IGFsbG9jX3BlcmNwdSh1bnNpZ25lZCBpbnQpOwotCQlpcnFfc2V0dGluZ3NfY2xyX2FuZF9zZXQoZGVzYywgfjAsIF9JUlFfREVGQVVMVF9JTklUX0ZMQUdTKTsKLQkJYWxsb2NfbWFza3MoZGVzYyArIGksIEdGUF9LRVJORUwsIG5vZGUpOwotCQlkZXNjX3NtcF9pbml0KGRlc2MgKyBpLCBub2RlKTsKKwkJYWxsb2NfbWFza3MoJmRlc2NbaV0sIEdGUF9LRVJORUwsIG5vZGUpOworCQlyYXdfc3Bpbl9sb2NrX2luaXQoJmRlc2NbaV0ubG9jayk7CiAJCWxvY2tkZXBfc2V0X2NsYXNzKCZkZXNjW2ldLmxvY2ssICZpcnFfZGVzY19sb2NrX2NsYXNzKTsKKwkJZGVzY19zZXRfZGVmYXVsdHMoaSwgJmRlc2NbaV0sIG5vZGUpOwogCX0KIAlyZXR1cm4gYXJjaF9lYXJseV9pcnFfaW5pdCgpOwogfQpAQCAtMzQ2LDYgKzM0NCwxMiBAQAogCWlmICghY250KQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmIChpcnEgPj0gMCkgeworCQlpZiAoZnJvbSA+IGlycSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlmcm9tID0gaXJxOworCX0KKwogCW11dGV4X2xvY2soJnNwYXJzZV9pcnFfbG9jayk7CiAKIAlzdGFydCA9IGJpdG1hcF9maW5kX25leHRfemVyb19hcmVhKGFsbG9jYXRlZF9pcnFzLCBJUlFfQklUTUFQX0JJVFMsCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL21hbmFnZS5jIGIva2VybmVsL2lycS9tYW5hZ2UuYwppbmRleCBmN2NlMDAyLi5kNjRiYWZiIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL21hbmFnZS5jCisrKyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKQEAgLTcyMywxMyArNzIzLDE2IEBACiAgKiBjb250ZXh0LiBTbyB3ZSBuZWVkIHRvIGRpc2FibGUgYmggaGVyZSB0byBhdm9pZCBkZWFkbG9ja3MgYW5kIG90aGVyCiAgKiBzaWRlIGVmZmVjdHMuCiAgKi8KLXN0YXRpYyB2b2lkCitzdGF0aWMgaXJxcmV0dXJuX3QKIGlycV9mb3JjZWRfdGhyZWFkX2ZuKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKQogeworCWlycXJldHVybl90IHJldDsKKwogCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlhY3Rpb24tPnRocmVhZF9mbihhY3Rpb24tPmlycSwgYWN0aW9uLT5kZXZfaWQpOworCXJldCA9IGFjdGlvbi0+dGhyZWFkX2ZuKGFjdGlvbi0+aXJxLCBhY3Rpb24tPmRldl9pZCk7CiAJaXJxX2ZpbmFsaXplX29uZXNob3QoZGVzYywgYWN0aW9uLCBmYWxzZSk7CiAJbG9jYWxfYmhfZW5hYmxlKCk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTczNywxMCArNzQwLDE0IEBACiAgKiBwcmVlbXRpYmxlIC0gbWFueSBvZiB0aGVtIG5lZWQgdG8gc2xlZXAgYW5kIHdhaXQgZm9yIHNsb3cgYnVzc2VzIHRvCiAgKiBjb21wbGV0ZS4KICAqLwotc3RhdGljIHZvaWQgaXJxX3RocmVhZF9mbihzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbikKK3N0YXRpYyBpcnFyZXR1cm5fdCBpcnFfdGhyZWFkX2ZuKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKKwkJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKQogewotCWFjdGlvbi0+dGhyZWFkX2ZuKGFjdGlvbi0+aXJxLCBhY3Rpb24tPmRldl9pZCk7CisJaXJxcmV0dXJuX3QgcmV0OworCisJcmV0ID0gYWN0aW9uLT50aHJlYWRfZm4oYWN0aW9uLT5pcnEsIGFjdGlvbi0+ZGV2X2lkKTsKIAlpcnFfZmluYWxpemVfb25lc2hvdChkZXNjLCBhY3Rpb24sIGZhbHNlKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKgpAQCAtNzUzLDcgKzc2MCw4IEBACiAJfTsKIAlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24gPSBkYXRhOwogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGFjdGlvbi0+aXJxKTsKLQl2b2lkICgqaGFuZGxlcl9mbikoc3RydWN0IGlycV9kZXNjICpkZXNjLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24pOworCWlycXJldHVybl90ICgqaGFuZGxlcl9mbikoc3RydWN0IGlycV9kZXNjICpkZXNjLAorCQkJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKTsKIAlpbnQgd2FrZTsKIAogCWlmIChmb3JjZV9pcnF0aHJlYWRzICYgdGVzdF9iaXQoSVJRVEZfRk9SQ0VEX1RIUkVBRCwKQEAgLTc4Myw4ICs3OTEsMTIgQEAKIAkJCWRlc2MtPmlzdGF0ZSB8PSBJUlFTX1BFTkRJTkc7CiAJCQlyYXdfc3Bpbl91bmxvY2tfaXJxKCZkZXNjLT5sb2NrKTsKIAkJfSBlbHNlIHsKKwkJCWlycXJldHVybl90IGFjdGlvbl9yZXQ7CisKIAkJCXJhd19zcGluX3VubG9ja19pcnEoJmRlc2MtPmxvY2spOwotCQkJaGFuZGxlcl9mbihkZXNjLCBhY3Rpb24pOworCQkJYWN0aW9uX3JldCA9IGhhbmRsZXJfZm4oZGVzYywgYWN0aW9uKTsKKwkJCWlmICghbm9pcnFkZWJ1ZykKKwkJCQlub3RlX2ludGVycnVwdChhY3Rpb24tPmlycSwgZGVzYywgYWN0aW9uX3JldCk7CiAJCX0KIAogCQl3YWtlID0gYXRvbWljX2RlY19hbmRfdGVzdCgmZGVzYy0+dGhyZWFkc19hY3RpdmUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9zcHVyaW91cy5jIGIva2VybmVsL2lycS9zcHVyaW91cy5jCmluZGV4IGRmYmQ1NTAuLmFhNTdkNWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvc3B1cmlvdXMuYworKysgYi9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKQEAgLTE2Nyw2ICsxNjcsMTMgQEAKIAkJICBqaWZmaWVzICsgUE9MTF9TUFVSSU9VU19JUlFfSU5URVJWQUwpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBiYWRfYWN0aW9uX3JldChpcnFyZXR1cm5fdCBhY3Rpb25fcmV0KQoreworCWlmIChsaWtlbHkoYWN0aW9uX3JldCA8PSAoSVJRX0hBTkRMRUQgfCBJUlFfV0FLRV9USFJFQUQpKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKIC8qCiAgKiBJZiA5OSw5MDAgb2YgdGhlIHByZXZpb3VzIDEwMCwwMDAgaW50ZXJydXB0cyBoYXZlIG5vdCBiZWVuIGhhbmRsZWQKICAqIHRoZW4gYXNzdW1lIHRoYXQgdGhlIElSUSBpcyBzdHVjayBpbiBzb21lIG1hbm5lci4gRHJvcCBhIGRpYWdub3N0aWMKQEAgLTE4Miw3ICsxODksNyBAQAogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGFjdGlvbl9yZXQgIT0gSVJRX0hBTkRMRUQgJiYgYWN0aW9uX3JldCAhPSBJUlFfTk9ORSkgeworCWlmIChiYWRfYWN0aW9uX3JldChhY3Rpb25fcmV0KSkgewogCQlwcmludGsoS0VSTl9FUlIgImlycSBldmVudCAlZDogYm9ndXMgcmV0dXJuIHZhbHVlICV4XG4iLAogCQkJCWlycSwgYWN0aW9uX3JldCk7CiAJfSBlbHNlIHsKQEAgLTIwMSwxMCArMjA4LDExIEBACiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJYWN0aW9uID0gZGVzYy0+YWN0aW9uOwogCXdoaWxlIChhY3Rpb24pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJbPCVwPl0iLCBhY3Rpb24tPmhhbmRsZXIpOwotCQlwcmludF9zeW1ib2woIiAoJXMpIiwKLQkJCSh1bnNpZ25lZCBsb25nKWFjdGlvbi0+aGFuZGxlcik7Ci0JCXByaW50aygiXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJbPCVwPl0gJXBmIiwgYWN0aW9uLT5oYW5kbGVyLCBhY3Rpb24tPmhhbmRsZXIpOworCQlpZiAoYWN0aW9uLT50aHJlYWRfZm4pCisJCQlwcmludGsoS0VSTl9DT05UICIgdGhyZWFkZWQgWzwlcD5dICVwZiIsCisJCQkJCWFjdGlvbi0+dGhyZWFkX2ZuLCBhY3Rpb24tPnRocmVhZF9mbik7CisJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CiAJCWFjdGlvbiA9IGFjdGlvbi0+bmV4dDsKIAl9CiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKQEAgLTI2Miw3ICsyNzAsMTYgQEAKIAlpZiAoZGVzYy0+aXN0YXRlICYgSVJRU19QT0xMX0lOUFJPR1JFU1MpCiAJCXJldHVybjsKIAotCWlmICh1bmxpa2VseShhY3Rpb25fcmV0ICE9IElSUV9IQU5ETEVEKSkgeworCS8qIHdlIGdldCBoZXJlIGFnYWluIHZpYSB0aGUgdGhyZWFkZWQgaGFuZGxlciAqLworCWlmIChhY3Rpb25fcmV0ID09IElSUV9XQUtFX1RIUkVBRCkKKwkJcmV0dXJuOworCisJaWYgKGJhZF9hY3Rpb25fcmV0KGFjdGlvbl9yZXQpKSB7CisJCXJlcG9ydF9iYWRfaXJxKGlycSwgZGVzYywgYWN0aW9uX3JldCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAodW5saWtlbHkoYWN0aW9uX3JldCA9PSBJUlFfTk9ORSkpIHsKIAkJLyoKIAkJICogSWYgd2UgYXJlIHNlZWluZyBvbmx5IHRoZSBvZGQgc3B1cmlvdXMgSVJRIGNhdXNlZCBieQogCQkgKiBidXMgYXN5bmNocm9uaWNpdHkgdGhlbiBkb24ndCBldmVudHVhbGx5IHRyaWdnZXIgYW4gZXJyb3IsCkBAIC0yNzQsOCArMjkxLDYgQEAKIAkJZWxzZQogCQkJZGVzYy0+aXJxc191bmhhbmRsZWQrKzsKIAkJZGVzYy0+bGFzdF91bmhhbmRsZWQgPSBqaWZmaWVzOwotCQlpZiAodW5saWtlbHkoYWN0aW9uX3JldCAhPSBJUlFfTk9ORSkpCi0JCQlyZXBvcnRfYmFkX2lycShpcnEsIGRlc2MsIGFjdGlvbl9yZXQpOwogCX0KIAogCWlmICh1bmxpa2VseSh0cnlfbWlzcm91dGVkX2lycShpcnEsIGRlc2MsIGFjdGlvbl9yZXQpKSkgewpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NrZGVwLmMKaW5kZXggNjM0MzdkMC4uMjk4YzkyNyAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tkZXAuYworKysgYi9rZXJuZWwvbG9ja2RlcC5jCkBAIC0zNDI2LDcgKzM0MjYsNyBAQAogCWludCByZXQgPSAwOwogCiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmxvY2tkZXBfcmVjdXJzaW9uKSkKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIDE7IC8qIGF2b2lkIGZhbHNlIG5lZ2F0aXZlIGxvY2tkZXBfYXNzZXJ0X2hlbGQoKSAqLwogCiAJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAljaGVja19mbGFncyhmbGFncyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IGNiYjNhMGUuLjNmMmU1MDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC02MDUsMTAgKzYwNSwxMCBAQAogLyoKICAqIFJldHVybiB0aGUgZ3JvdXAgdG8gd2hpY2ggdGhpcyB0YXNrcyBiZWxvbmdzLgogICoKLSAqIFdlIHVzZSB0YXNrX3N1YnN5c19zdGF0ZV9jaGVjaygpIGFuZCBleHRlbmQgdGhlIFJDVSB2ZXJpZmljYXRpb24KLSAqIHdpdGggbG9ja2RlcF9pc19oZWxkKCZwLT5waV9sb2NrKSBiZWNhdXNlIGNwdV9jZ3JvdXBfYXR0YWNoKCkKLSAqIGhvbGRzIHRoYXQgbG9jayBmb3IgZWFjaCB0YXNrIGl0IG1vdmVzIGludG8gdGhlIGNncm91cC4gVGhlcmVmb3JlCi0gKiBieSBob2xkaW5nIHRoYXQgbG9jaywgd2UgcGluIHRoZSB0YXNrIHRvIHRoZSBjdXJyZW50IGNncm91cC4KKyAqIFdlIHVzZSB0YXNrX3N1YnN5c19zdGF0ZV9jaGVjaygpIGFuZCBleHRlbmQgdGhlIFJDVSB2ZXJpZmljYXRpb24gd2l0aAorICogcGktPmxvY2sgYW5kIHJxLT5sb2NrIGJlY2F1c2UgY3B1X2Nncm91cF9hdHRhY2goKSBob2xkcyB0aG9zZSBsb2NrcyBmb3IgZWFjaAorICogdGFzayBpdCBtb3ZlcyBpbnRvIHRoZSBjZ3JvdXAuIFRoZXJlZm9yZSBieSBob2xkaW5nIGVpdGhlciBvZiB0aG9zZSBsb2NrcywKKyAqIHdlIHBpbiB0aGUgdGFzayB0byB0aGUgY3VycmVudCBjZ3JvdXAuCiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfZ3JvdXAgKnRhc2tfZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewpAQCAtNjE2LDcgKzYxNiw4IEBACiAJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzczsKIAogCWNzcyA9IHRhc2tfc3Vic3lzX3N0YXRlX2NoZWNrKHAsIGNwdV9jZ3JvdXBfc3Vic3lzX2lkLAotCQkJbG9ja2RlcF9pc19oZWxkKCZwLT5waV9sb2NrKSk7CisJCQlsb2NrZGVwX2lzX2hlbGQoJnAtPnBpX2xvY2spIHx8CisJCQlsb2NrZGVwX2lzX2hlbGQoJnRhc2tfcnEocCktPmxvY2spKTsKIAl0ZyA9IGNvbnRhaW5lcl9vZihjc3MsIHN0cnVjdCB0YXNrX2dyb3VwLCBjc3MpOwogCiAJcmV0dXJuIGF1dG9ncm91cF90YXNrX2dyb3VwKHAsIHRnKTsKQEAgLTIyMDAsNiArMjIwMSwxNiBAQAogCQkJISh0YXNrX3RocmVhZF9pbmZvKHApLT5wcmVlbXB0X2NvdW50ICYgUFJFRU1QVF9BQ1RJVkUpKTsKIAogI2lmZGVmIENPTkZJR19MT0NLREVQCisJLyoKKwkgKiBUaGUgY2FsbGVyIHNob3VsZCBob2xkIGVpdGhlciBwLT5waV9sb2NrIG9yIHJxLT5sb2NrLCB3aGVuIGNoYW5naW5nCisJICogYSB0YXNrJ3MgQ1BVLiAtPnBpX2xvY2sgZm9yIHdha2luZyB0YXNrcywgcnEtPmxvY2sgZm9yIHJ1bm5hYmxlIHRhc2tzLgorCSAqCisJICogc2NoZWRfbW92ZV90YXNrKCkgaG9sZHMgYm90aCBhbmQgdGh1cyBob2xkaW5nIGVpdGhlciBwaW5zIHRoZSBjZ3JvdXAsCisJICogc2VlIHNldF90YXNrX3JxKCkuCisJICoKKwkgKiBGdXJ0aGVybW9yZSwgYWxsIHRhc2tfcnEgdXNlcnMgc2hvdWxkIGFjcXVpcmUgYm90aCBsb2Nrcywgc2VlCisJICogdGFza19ycV9sb2NrKCkuCisJICovCiAJV0FSTl9PTl9PTkNFKGRlYnVnX2xvY2tzICYmICEobG9ja2RlcF9pc19oZWxkKCZwLT5waV9sb2NrKSB8fAogCQkJCSAgICAgIGxvY2tkZXBfaXNfaGVsZCgmdGFza19ycShwKS0+bG9jaykpKTsKICNlbmRpZgpAQCAtMjQ0Nyw2ICsyNDU4LDEwIEBACiAJCX0KIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQorCisJaWYgKHdha2VfZmxhZ3MgJiBXRl9NSUdSQVRFRCkKKwkJc2NoZWRzdGF0X2luYyhwLCBzZS5zdGF0aXN0aWNzLm5yX3dha2V1cHNfbWlncmF0ZSk7CisKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIAlzY2hlZHN0YXRfaW5jKHJxLCB0dHd1X2NvdW50KTsKQEAgLTI0NTUsOSArMjQ3MCw2IEBACiAJaWYgKHdha2VfZmxhZ3MgJiBXRl9TWU5DKQogCQlzY2hlZHN0YXRfaW5jKHAsIHNlLnN0YXRpc3RpY3MubnJfd2FrZXVwc19zeW5jKTsKIAotCWlmIChjcHUgIT0gdGFza19jcHUocCkpCi0JCXNjaGVkc3RhdF9pbmMocCwgc2Uuc3RhdGlzdGljcy5ucl93YWtldXBzX21pZ3JhdGUpOwotCiAjZW5kaWYgLyogQ09ORklHX1NDSEVEU1RBVFMgKi8KIH0KIApAQCAtMjYwMCw2ICsyNjEyLDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkKIAlpZiAoc2NoZWRfZmVhdChUVFdVX1FVRVVFKSAmJiBjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSB7CisJCXNjaGVkX2Nsb2NrX2NwdShjcHUpOyAvKiBzeW5jIGNsb2NrcyB4LWNwdSAqLwogCQl0dHd1X3F1ZXVlX3JlbW90ZShwLCBjcHUpOwogCQlyZXR1cm47CiAJfQpAQCAtMjY3NCw4ICsyNjg3LDEwIEBACiAJCXAtPnNjaGVkX2NsYXNzLT50YXNrX3dha2luZyhwKTsKIAogCWNwdSA9IHNlbGVjdF90YXNrX3JxKHAsIFNEX0JBTEFOQ0VfV0FLRSwgd2FrZV9mbGFncyk7Ci0JaWYgKHRhc2tfY3B1KHApICE9IGNwdSkKKwlpZiAodGFza19jcHUocCkgIT0gY3B1KSB7CisJCXdha2VfZmxhZ3MgfD0gV0ZfTUlHUkFURUQ7CiAJCXNldF90YXNrX2NwdShwLCBjcHUpOworCX0KICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIAl0dHd1X3F1ZXVlKHAsIGNwdSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzY3RsLmMgYi9rZXJuZWwvc3lzY3RsLmMKaW5kZXggNGZjOTI0NC4uZjE3NWQ5OCAxMDA2NDQKLS0tIGEva2VybmVsL3N5c2N0bC5jCisrKyBiL2tlcm5lbC9zeXNjdGwuYwpAQCAtOTM4LDYgKzkzOCwxMiBAQAogCX0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKKwkvKgorCSAqIFVzZXItc3BhY2Ugc2NyaXB0cyByZWx5IG9uIHRoZSBleGlzdGVuY2Ugb2YgdGhpcyBmaWxlCisJICogYXMgYSBmZWF0dXJlIGNoZWNrIGZvciBwZXJmX2V2ZW50cyBiZWluZyBlbmFibGVkLgorCSAqCisJICogU28gaXQncyBhbiBBQkksIGRvIG5vdCByZW1vdmUhCisJICovCiAJewogCQkucHJvY25hbWUJPSAicGVyZl9ldmVudF9wYXJhbm9pZCIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfcGVyZl9ldmVudF9wYXJhbm9pZCwKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMgYi9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jCmluZGV4IGMwMjdkNGYuLmU0YzY5OWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMKKysrIGIva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYwpAQCAtMTgyLDcgKzE4MiwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlCVUdfT04oZGV2LT5tb2RlICE9IENMT0NLX0VWVF9NT0RFX1VOVVNFRCk7Ci0JQlVHX09OKCFkZXYtPmNwdW1hc2spOworCWlmICghZGV2LT5jcHVtYXNrKSB7CisJCVdBUk5fT04obnVtX3Bvc3NpYmxlX2NwdXMoKSA+IDEpOworCQlkZXYtPmNwdW1hc2sgPSBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJfQogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2V2ZW50c19sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lci5jIGIva2VybmVsL3RpbWVyLmMKaW5kZXggZmQ2MTk4Ni4uOGNmZjM2MSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWVyLmMKKysrIGIva2VybmVsL3RpbWVyLmMKQEAgLTc0OSwxNiArNzQ5LDE1IEBACiAJdW5zaWduZWQgbG9uZyBleHBpcmVzX2xpbWl0LCBtYXNrOwogCWludCBiaXQ7CiAKLQlleHBpcmVzX2xpbWl0ID0gZXhwaXJlczsKLQogCWlmICh0aW1lci0+c2xhY2sgPj0gMCkgewogCQlleHBpcmVzX2xpbWl0ID0gZXhwaXJlcyArIHRpbWVyLT5zbGFjazsKIAl9IGVsc2UgewotCQl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CisJCWxvbmcgZGVsdGEgPSBleHBpcmVzIC0gamlmZmllczsKIAotCQkvKiBObyBzbGFjaywgaWYgYWxyZWFkeSBleHBpcmVkIGVsc2UgYXV0byBzbGFjayAwLjQlICovCi0JCWlmICh0aW1lX2FmdGVyKGV4cGlyZXMsIG5vdykpCi0JCQlleHBpcmVzX2xpbWl0ID0gZXhwaXJlcyArIChleHBpcmVzIC0gbm93KS8yNTY7CisJCWlmIChkZWx0YSA8IDI1NikKKwkJCXJldHVybiBleHBpcmVzOworCisJCWV4cGlyZXNfbGltaXQgPSBleHBpcmVzICsgZGVsdGEgLyAyNTY7CiAJfQogCW1hc2sgPSBleHBpcmVzIF4gZXhwaXJlc19saW1pdDsKIAlpZiAobWFzayA9PSAwKQpAQCAtNzk1LDYgKzc5NCw4IEBACiAgKi8KIGludCBtb2RfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpCiB7CisJZXhwaXJlcyA9IGFwcGx5X3NsYWNrKHRpbWVyLCBleHBpcmVzKTsKKwogCS8qCiAJICogVGhpcyBpcyBhIGNvbW1vbiBvcHRpbWl6YXRpb24gdHJpZ2dlcmVkIGJ5IHRoZQogCSAqIG5ldHdvcmtpbmcgY29kZSAtIGlmIHRoZSB0aW1lciBpcyByZS1tb2RpZmllZApAQCAtODAzLDggKzgwNCw2IEBACiAJaWYgKHRpbWVyX3BlbmRpbmcodGltZXIpICYmIHRpbWVyLT5leHBpcmVzID09IGV4cGlyZXMpCiAJCXJldHVybiAxOwogCi0JZXhwaXJlcyA9IGFwcGx5X3NsYWNrKHRpbWVyLCBleHBpcmVzKTsKLQogCXJldHVybiBfX21vZF90aW1lcih0aW1lciwgZXhwaXJlcywgZmFsc2UsIFRJTUVSX05PVF9QSU5ORUQpOwogfQogRVhQT1JUX1NZTUJPTChtb2RfdGltZXIpOwpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IGQ3YjEwNTcuLmE4MjUxYTggMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYworKysgYi9tbS9maWxlbWFwLmMKQEAgLTIwMDAsNyArMjAwMCw3IEBACiAJCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfa2lsbHByaXYoZGVudHJ5KTsKIAlpZiAoIWVycm9yICYmIGtpbGxzdWlkKQogCQllcnJvciA9IF9fcmVtb3ZlX3N1aWQoZGVudHJ5LCBraWxsc3VpZCk7Ci0JaWYgKCFlcnJvcikKKwlpZiAoIWVycm9yICYmIChpbm9kZS0+aV9zYi0+c19mbGFncyAmIE1TX05PU0VDKSkKIAkJaW5vZGUtPmlfZmxhZ3MgfD0gU19OT1NFQzsKIAogCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCBhMGQzODQ1Li4yMDIxOWVmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC0xNDc2LDcgKzE0NzYsNiBAQAogCQkJICB1bnNpZ25lZCBmbGFncykKIHsKIAlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICppc2VjOwotCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDsKIAl1MzIgc2lkOwogCiAJdmFsaWRhdGVfY3JlZHMoY3JlZCk7CkBAIC0xNDg3LDE1ICsxNDg2LDIxIEBACiAJc2lkID0gY3JlZF9zaWQoY3JlZCk7CiAJaXNlYyA9IGlub2RlLT5pX3NlY3VyaXR5OwogCi0JaWYgKCFhZHApIHsKLQkJYWRwID0gJmFkOwotCQlDT01NT05fQVVESVRfREFUQV9JTklUKCZhZCwgSU5PREUpOwotCQlhZC51Lmlub2RlID0gaW5vZGU7Ci0JfQotCiAJcmV0dXJuIGF2Y19oYXNfcGVybV9mbGFncyhzaWQsIGlzZWMtPnNpZCwgaXNlYy0+c2NsYXNzLCBwZXJtcywgYWRwLCBmbGFncyk7CiB9CiAKK3N0YXRpYyBpbnQgaW5vZGVfaGFzX3Blcm1fbm9hZHAoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCisJCQkJc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQl1MzIgcGVybXMsCisJCQkJdW5zaWduZWQgZmxhZ3MpCit7CisJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIGFkOworCisJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIElOT0RFKTsKKwlhZC51Lmlub2RlID0gaW5vZGU7CisJcmV0dXJuIGlub2RlX2hhc19wZXJtKGNyZWQsIGlub2RlLCBwZXJtcywgJmFkLCBmbGFncyk7Cit9CisKIC8qIFNhbWUgYXMgaW5vZGVfaGFzX3Blcm0sIGJ1dCBwYXNzIGV4cGxpY2l0IGF1ZGl0IGRhdGEgY29udGFpbmluZwogICAgdGhlIGRlbnRyeSB0byBoZWxwIHRoZSBhdWRpdGluZyBjb2RlIHRvIG1vcmUgZWFzaWx5IGdlbmVyYXRlIHRoZQogICAgcGF0aG5hbWUgaWYgbmVlZGVkLiAqLwpAQCAtMjEyMiw4ICsyMTI3LDggQEAKIAkJCQkJCXN0cnVjdCB0dHlfZmlsZV9wcml2YXRlLCBsaXN0KTsKIAkJCWZpbGUgPSBmaWxlX3ByaXYtPmZpbGU7CiAJCQlpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0JCQlpZiAoaW5vZGVfaGFzX3Blcm0oY3JlZCwgaW5vZGUsCi0JCQkJCSAgIEZJTEVfX1JFQUQgfCBGSUxFX19XUklURSwgTlVMTCwgMCkpIHsKKwkJCWlmIChpbm9kZV9oYXNfcGVybV9ub2FkcChjcmVkLCBpbm9kZSwKKwkJCQkJICAgRklMRV9fUkVBRCB8IEZJTEVfX1dSSVRFLCAwKSkgewogCQkJCWRyb3BfdHR5ID0gMTsKIAkJCX0KIAkJfQpAQCAtMzIyOCw3ICszMjMzLDcgQEAKIAkgKiBuZXcgaW5vZGUgbGFiZWwgb3IgbmV3IHBvbGljeS4KIAkgKiBUaGlzIGNoZWNrIGlzIG5vdCByZWR1bmRhbnQgLSBkbyBub3QgcmVtb3ZlLgogCSAqLwotCXJldHVybiBpbm9kZV9oYXNfcGVybShjcmVkLCBpbm9kZSwgb3Blbl9maWxlX3RvX2F2KGZpbGUpLCBOVUxMLCAwKTsKKwlyZXR1cm4gaW5vZGVfaGFzX3Blcm1fbm9hZHAoY3JlZCwgaW5vZGUsIG9wZW5fZmlsZV90b19hdihmaWxlKSwgMCk7CiB9CiAKIC8qIHRhc2sgc2VjdXJpdHkgb3BlcmF0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10ZXN0LmMKaW5kZXggYjY3MTg2Mi4uMmRhOTE2MiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdGVzdC5jCkBAIC00NzQsNyArNDc0LDcgQEAKIAl1bnNpZ25lZCBpbnQgbnJfZXZlbnRzW25zeXNjYWxsc10sCiAJCSAgICAgZXhwZWN0ZWRfbnJfZXZlbnRzW25zeXNjYWxsc10sIGksIGo7CiAJc3RydWN0IHBlcmZfZXZzZWwgKmV2c2Vsc1tuc3lzY2FsbHNdLCAqZXZzZWw7Ci0JaW50IHNhbXBsZV9zaXplID0gcGVyZl9zYW1wbGVfc2l6ZShhdHRyLnNhbXBsZV90eXBlKTsKKwlpbnQgc2FtcGxlX3NpemUgPSBfX3BlcmZfZXZzZWxfX3NhbXBsZV9zaXplKGF0dHIuc2FtcGxlX3R5cGUpOwogCiAJZm9yIChpID0gMDsgaSA8IG5zeXNjYWxsczsgKytpKSB7CiAJCWNoYXIgbmFtZVs2NF07CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZlbnQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jCmluZGV4IDBmZTlhZGYuLjNjMWI4YTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jCkBAIC0zNSwyMiArMzUsNiBAQAogCXJldHVybiBwZXJmX2V2ZW50X19uYW1lc1tpZF07CiB9CiAKLWludCBwZXJmX3NhbXBsZV9zaXplKHU2NCBzYW1wbGVfdHlwZSkKLXsKLQl1NjQgbWFzayA9IHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfTUFTSzsKLQlpbnQgc2l6ZSA9IDA7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewotCQlpZiAobWFzayAmICgxVUxMIDw8IGkpKQotCQkJc2l6ZSsrOwotCX0KLQotCXNpemUgKj0gc2l6ZW9mKHU2NCk7Ci0KLQlyZXR1cm4gc2l6ZTsKLX0KLQogc3RhdGljIHN0cnVjdCBwZXJmX3NhbXBsZSBzeW50aF9zYW1wbGUgPSB7CiAJLnBpZAkgICA9IC0xLAogCS50aWQJICAgPSAtMSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKaW5kZXggYzA4MzMyOC4uMWQ3ZjY2NCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKQEAgLTgyLDggKzgyLDYgQEAKIAlzdHJ1Y3QgaXBfY2FsbGNoYWluICpjYWxsY2hhaW47CiB9OwogCi1pbnQgcGVyZl9zYW1wbGVfc2l6ZSh1NjQgc2FtcGxlX3R5cGUpOwotCiAjZGVmaW5lIEJVSUxEX0lEX1NJWkUgMjAKIAogc3RydWN0IGJ1aWxkX2lkX2V2ZW50IHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuYyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuYwppbmRleCA1MGFhMzQ4Li5iMDIxZWE5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZsaXN0LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5jCkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSAiZXZsaXN0LmgiCiAjaW5jbHVkZSAiZXZzZWwuaCIKICNpbmNsdWRlICJ1dGlsLmgiCi0jaW5jbHVkZSAiZGVidWcuaCIKIAogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAKQEAgLTI1NywxOSArMjU2LDE1IEBACiAJcmV0dXJuIGV2bGlzdC0+bW1hcCAhPSBOVUxMID8gMCA6IC1FTk9NRU07CiB9CiAKLXN0YXRpYyBpbnQgX19wZXJmX2V2bGlzdF9fbW1hcChzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAorc3RhdGljIGludCBfX3BlcmZfZXZsaXN0X19tbWFwKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0LAogCQkJICAgICAgIGludCBpZHgsIGludCBwcm90LCBpbnQgbWFzaywgaW50IGZkKQogewogCWV2bGlzdC0+bW1hcFtpZHhdLnByZXYgPSAwOwogCWV2bGlzdC0+bW1hcFtpZHhdLm1hc2sgPSBtYXNrOwogCWV2bGlzdC0+bW1hcFtpZHhdLmJhc2UgPSBtbWFwKE5VTEwsIGV2bGlzdC0+bW1hcF9sZW4sIHByb3QsCiAJCQkJICAgICAgTUFQX1NIQVJFRCwgZmQsIDApOwotCWlmIChldmxpc3QtPm1tYXBbaWR4XS5iYXNlID09IE1BUF9GQUlMRUQpIHsKLQkJaWYgKGV2bGlzdC0+Y3B1cy0+bWFwW2lkeF0gPT0gLTEgJiYgZXZzZWwtPmF0dHIuaW5oZXJpdCkKLQkJCXVpX193YXJuaW5nKCJJbmhlcml0IGlzIG5vdCBhbGxvd2VkIG9uIHBlci10YXNrICIKLQkJCQkgICAgImV2ZW50cyB1c2luZyBtbWFwLlxuIik7CisJaWYgKGV2bGlzdC0+bW1hcFtpZHhdLmJhc2UgPT0gTUFQX0ZBSUxFRCkKIAkJcmV0dXJuIC0xOwotCX0KIAogCXBlcmZfZXZsaXN0X19hZGRfcG9sbGZkKGV2bGlzdCwgZmQpOwogCXJldHVybiAwOwpAQCAtMjg5LDcgKzI4NCw3IEBACiAKIAkJCQlpZiAob3V0cHV0ID09IC0xKSB7CiAJCQkJCW91dHB1dCA9IGZkOwotCQkJCQlpZiAoX19wZXJmX2V2bGlzdF9fbW1hcChldmxpc3QsIGV2c2VsLCBjcHUsCisJCQkJCWlmIChfX3BlcmZfZXZsaXN0X19tbWFwKGV2bGlzdCwgY3B1LAogCQkJCQkJCQlwcm90LCBtYXNrLCBvdXRwdXQpIDwgMCkKIAkJCQkJCWdvdG8gb3V0X3VubWFwOwogCQkJCX0gZWxzZSB7CkBAIC0zMjksNyArMzI0LDcgQEAKIAogCQkJaWYgKG91dHB1dCA9PSAtMSkgewogCQkJCW91dHB1dCA9IGZkOwotCQkJCWlmIChfX3BlcmZfZXZsaXN0X19tbWFwKGV2bGlzdCwgZXZzZWwsIHRocmVhZCwKKwkJCQlpZiAoX19wZXJmX2V2bGlzdF9fbW1hcChldmxpc3QsIHRocmVhZCwKIAkJCQkJCQlwcm90LCBtYXNrLCBvdXRwdXQpIDwgMCkKIAkJCQkJZ290byBvdXRfdW5tYXA7CiAJCQl9IGVsc2UgewpAQCAtNDYwLDMzICs0NTUsNDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotdTY0IHBlcmZfZXZsaXN0X19zYW1wbGVfdHlwZShzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCkKK2Jvb2wgcGVyZl9ldmxpc3RfX3ZhbGlkX3NhbXBsZV90eXBlKGNvbnN0IHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KQogewotCXN0cnVjdCBwZXJmX2V2c2VsICpwb3M7Ci0JdTY0IHR5cGUgPSAwOworCXN0cnVjdCBwZXJmX2V2c2VsICpwb3MsICpmaXJzdDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmZXZsaXN0LT5lbnRyaWVzLCBub2RlKSB7Ci0JCWlmICghdHlwZSkKLQkJCXR5cGUgPSBwb3MtPmF0dHIuc2FtcGxlX3R5cGU7Ci0JCWVsc2UgaWYgKHR5cGUgIT0gcG9zLT5hdHRyLnNhbXBsZV90eXBlKQotCQkJZGllKCJub24gbWF0Y2hpbmcgc2FtcGxlX3R5cGUiKTsKKwlwb3MgPSBmaXJzdCA9IGxpc3RfZW50cnkoZXZsaXN0LT5lbnRyaWVzLm5leHQsIHN0cnVjdCBwZXJmX2V2c2VsLCBub2RlKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUocG9zLCAmZXZsaXN0LT5lbnRyaWVzLCBub2RlKSB7CisJCWlmIChmaXJzdC0+YXR0ci5zYW1wbGVfdHlwZSAhPSBwb3MtPmF0dHIuc2FtcGxlX3R5cGUpCisJCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JcmV0dXJuIHR5cGU7CisJcmV0dXJuIHRydWU7Cit9CisKK3U2NCBwZXJmX2V2bGlzdF9fc2FtcGxlX3R5cGUoY29uc3Qgc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpCit7CisJc3RydWN0IHBlcmZfZXZzZWwgKmZpcnN0OworCisJZmlyc3QgPSBsaXN0X2VudHJ5KGV2bGlzdC0+ZW50cmllcy5uZXh0LCBzdHJ1Y3QgcGVyZl9ldnNlbCwgbm9kZSk7CisJcmV0dXJuIGZpcnN0LT5hdHRyLnNhbXBsZV90eXBlOworfQorCitib29sIHBlcmZfZXZsaXN0X192YWxpZF9zYW1wbGVfaWRfYWxsKGNvbnN0IHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KQoreworCXN0cnVjdCBwZXJmX2V2c2VsICpwb3MsICpmaXJzdDsKKworCXBvcyA9IGZpcnN0ID0gbGlzdF9lbnRyeShldmxpc3QtPmVudHJpZXMubmV4dCwgc3RydWN0IHBlcmZfZXZzZWwsIG5vZGUpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShwb3MsICZldmxpc3QtPmVudHJpZXMsIG5vZGUpIHsKKwkJaWYgKGZpcnN0LT5hdHRyLnNhbXBsZV9pZF9hbGwgIT0gcG9zLT5hdHRyLnNhbXBsZV9pZF9hbGwpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgcGVyZl9ldmxpc3RfX3NhbXBsZV9pZF9hbGwoY29uc3Qgc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpCiB7Ci0JYm9vbCB2YWx1ZSA9IGZhbHNlLCBmaXJzdCA9IHRydWU7Ci0Jc3RydWN0IHBlcmZfZXZzZWwgKnBvczsKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqZmlyc3Q7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmV2bGlzdC0+ZW50cmllcywgbm9kZSkgewotCQlpZiAoZmlyc3QpIHsKLQkJCXZhbHVlID0gcG9zLT5hdHRyLnNhbXBsZV9pZF9hbGw7Ci0JCQlmaXJzdCA9IGZhbHNlOwotCQl9IGVsc2UgaWYgKHZhbHVlICE9IHBvcy0+YXR0ci5zYW1wbGVfaWRfYWxsKQotCQkJZGllKCJub24gbWF0Y2hpbmcgc2FtcGxlX2lkX2FsbCIpOwotCX0KLQotCXJldHVybiB2YWx1ZTsKKwlmaXJzdCA9IGxpc3RfZW50cnkoZXZsaXN0LT5lbnRyaWVzLm5leHQsIHN0cnVjdCBwZXJmX2V2c2VsLCBub2RlKTsKKwlyZXR1cm4gZmlyc3QtPmF0dHIuc2FtcGxlX2lkX2FsbDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuaCBiL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuaAppbmRleCAwYTFlZjFmLi5iMmI4NjIzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZsaXN0LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5oCkBAIC02Niw3ICs2Niw5IEBACiB2b2lkIHBlcmZfZXZsaXN0X19kZWxldGVfbWFwcyhzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCk7CiBpbnQgcGVyZl9ldmxpc3RfX3NldF9maWx0ZXJzKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KTsKIAotdTY0IHBlcmZfZXZsaXN0X19zYW1wbGVfdHlwZShzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCk7Ci1ib29sIHBlcmZfZXZsaXN0X19zYW1wbGVfaWRfYWxsKGNvbnN0IHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KTsKK3U2NCBwZXJmX2V2bGlzdF9fc2FtcGxlX3R5cGUoY29uc3Qgc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpOworYm9vbCBwZXJmX2V2bGlzdF9fc2FtcGxlX2lkX2FsbChjb25zdCBjb25zdCBzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCk7CiAKK2Jvb2wgcGVyZl9ldmxpc3RfX3ZhbGlkX3NhbXBsZV90eXBlKGNvbnN0IHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KTsKK2Jvb2wgcGVyZl9ldmxpc3RfX3ZhbGlkX3NhbXBsZV9pZF9hbGwoY29uc3Qgc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpOwogI2VuZGlmIC8qIF9fUEVSRl9FVkxJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMgYi90b29scy9wZXJmL3V0aWwvZXZzZWwuYwppbmRleCBjY2EyOWVkLi4wMjM5ZWI4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZzZWwuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZzZWwuYwpAQCAtMTUsNiArMTUsMjIgQEAKIAogI2RlZmluZSBGRChlLCB4LCB5KSAoKihpbnQgKil4eWFycmF5X19lbnRyeShlLT5mZCwgeCwgeSkpCiAKK2ludCBfX3BlcmZfZXZzZWxfX3NhbXBsZV9zaXplKHU2NCBzYW1wbGVfdHlwZSkKK3sKKwl1NjQgbWFzayA9IHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfTUFTSzsKKwlpbnQgc2l6ZSA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgeworCQlpZiAobWFzayAmICgxVUxMIDw8IGkpKQorCQkJc2l6ZSsrOworCX0KKworCXNpemUgKj0gc2l6ZW9mKHU2NCk7CisKKwlyZXR1cm4gc2l6ZTsKK30KKwogdm9pZCBwZXJmX2V2c2VsX19pbml0KHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKIAkJICAgICAgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciwgaW50IGlkeCkKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5oIGIvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmgKaW5kZXggZjc5YmIyYy4uN2U5MzY2ZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmgKQEAgLTE0OSw0ICsxNDksMTEgQEAKIAlyZXR1cm4gX19wZXJmX2V2c2VsX19yZWFkKGV2c2VsLCBuY3B1cywgbnRocmVhZHMsIHRydWUpOwogfQogCitpbnQgX19wZXJmX2V2c2VsX19zYW1wbGVfc2l6ZSh1NjQgc2FtcGxlX3R5cGUpOworCitzdGF0aWMgaW5saW5lIGludCBwZXJmX2V2c2VsX19zYW1wbGVfc2l6ZShzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwpCit7CisJcmV0dXJuIF9fcGVyZl9ldnNlbF9fc2FtcGxlX3NpemUoZXZzZWwtPmF0dHIuc2FtcGxlX3R5cGUpOworfQorCiAjZW5kaWYgLyogX19QRVJGX0VWU0VMX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9weXRob24uYyBiL3Rvb2xzL3BlcmYvdXRpbC9weXRob24uYwppbmRleCA2OTQzNmIzLi5hOWFjMDUwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcHl0aG9uLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3B5dGhvbi5jCkBAIC02NzQsNyArNjc0LDcgQEAKIAlzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCA9ICZwZXZsaXN0LT5ldmxpc3Q7CiAJdW5pb24gcGVyZl9ldmVudCAqZXZlbnQ7CiAJaW50IHNhbXBsZV9pZF9hbGwgPSAxLCBjcHU7Ci0Jc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJzYW1wbGVfaWRfYWxsIiwgTlVMTCwgTlVMTH07CisJc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJjcHUiLCAic2FtcGxlX2lkX2FsbCIsIE5VTEwsIE5VTEx9OwogCWludCBlcnI7CiAKIAlpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJpfGkiLCBrd2xpc3QsCkBAIC02OTIsMTYgKzY5MiwxNCBAQAogCiAJCWZpcnN0ID0gbGlzdF9lbnRyeShldmxpc3QtPmVudHJpZXMubmV4dCwgc3RydWN0IHBlcmZfZXZzZWwsIG5vZGUpOwogCQllcnIgPSBwZXJmX2V2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnQsIGZpcnN0LT5hdHRyLnNhbXBsZV90eXBlLAotCQkJCQkgICAgICAgcGVyZl9zYW1wbGVfc2l6ZShmaXJzdC0+YXR0ci5zYW1wbGVfdHlwZSksCisJCQkJCSAgICAgICBwZXJmX2V2c2VsX19zYW1wbGVfc2l6ZShmaXJzdCksCiAJCQkJCSAgICAgICBzYW1wbGVfaWRfYWxsLCAmcGV2ZW50LT5zYW1wbGUpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcl9lcnIoIkNhbid0IHBhcnNlIHNhbXBsZSwgZXJyID0gJWRcbiIsIGVycik7Ci0JCQlnb3RvIGVuZDsKLQkJfQotCisJCWlmIChlcnIpCisJCQlyZXR1cm4gUHlFcnJfRm9ybWF0KFB5RXhjX09TRXJyb3IsCisJCQkJCSAgICAicGVyZjogY2FuJ3QgcGFyc2Ugc2FtcGxlLCBlcnI9JWQiLCBlcnIpOwogCQlyZXR1cm4gcHlldmVudDsKIAl9Ci1lbmQ6CisKIAlQeV9JTkNSRUYoUHlfTm9uZSk7CiAJcmV0dXJuIFB5X05vbmU7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYwppbmRleCA2NDUwMGZjLi5mNWE4ZmJkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKQEAgLTU4LDYgKzU4LDE2IEBACiAJCWdvdG8gb3V0X2Nsb3NlOwogCX0KIAorCWlmICghcGVyZl9ldmxpc3RfX3ZhbGlkX3NhbXBsZV90eXBlKHNlbGYtPmV2bGlzdCkpIHsKKwkJcHJfZXJyKCJub24gbWF0Y2hpbmcgc2FtcGxlX3R5cGUiKTsKKwkJZ290byBvdXRfY2xvc2U7CisJfQorCisJaWYgKCFwZXJmX2V2bGlzdF9fdmFsaWRfc2FtcGxlX2lkX2FsbChzZWxmLT5ldmxpc3QpKSB7CisJCXByX2Vycigibm9uIG1hdGNoaW5nIHNhbXBsZV9pZF9hbGwiKTsKKwkJZ290byBvdXRfY2xvc2U7CisJfQorCiAJc2VsZi0+c2l6ZSA9IGlucHV0X3N0YXQuc3Rfc2l6ZTsKIAlyZXR1cm4gMDsKIApAQCAtOTcsNyArMTA3LDcgQEAKIHZvaWQgcGVyZl9zZXNzaW9uX191cGRhdGVfc2FtcGxlX3R5cGUoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZikKIHsKIAlzZWxmLT5zYW1wbGVfdHlwZSA9IHBlcmZfZXZsaXN0X19zYW1wbGVfdHlwZShzZWxmLT5ldmxpc3QpOwotCXNlbGYtPnNhbXBsZV9zaXplID0gcGVyZl9zYW1wbGVfc2l6ZShzZWxmLT5zYW1wbGVfdHlwZSk7CisJc2VsZi0+c2FtcGxlX3NpemUgPSBfX3BlcmZfZXZzZWxfX3NhbXBsZV9zaXplKHNlbGYtPnNhbXBsZV90eXBlKTsKIAlzZWxmLT5zYW1wbGVfaWRfYWxsID0gcGVyZl9ldmxpc3RfX3NhbXBsZV9pZF9hbGwoc2VsZi0+ZXZsaXN0KTsKIAlwZXJmX3Nlc3Npb25fX2lkX2hlYWRlcl9zaXplKHNlbGYpOwogfQpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggMjJjZGI5Ni4uOTZlYmMwNiAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYworKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC00NjcsMTIgKzQ2Nyw4IEBACiAJCWlmICgha3ZtLT5idXNlc1tpXSkKIAkJCWdvdG8gb3V0X2VycjsKIAl9CisKIAlzcGluX2xvY2tfaW5pdCgma3ZtLT5tbXVfbG9jayk7Ci0KLQlyID0ga3ZtX2luaXRfbW11X25vdGlmaWVyKGt2bSk7Ci0JaWYgKHIpCi0JCWdvdG8gb3V0X2VycjsKLQogCWt2bS0+bW0gPSBjdXJyZW50LT5tbTsKIAlhdG9taWNfaW5jKCZrdm0tPm1tLT5tbV9jb3VudCk7CiAJa3ZtX2V2ZW50ZmRfaW5pdChrdm0pOwpAQCAtNDgwLDYgKzQ3NiwxMSBAQAogCW11dGV4X2luaXQoJmt2bS0+aXJxX2xvY2spOwogCW11dGV4X2luaXQoJmt2bS0+c2xvdHNfbG9jayk7CiAJYXRvbWljX3NldCgma3ZtLT51c2Vyc19jb3VudCwgMSk7CisKKwlyID0ga3ZtX2luaXRfbW11X25vdGlmaWVyKGt2bSk7CisJaWYgKHIpCisJCWdvdG8gb3V0X2VycjsKKwogCXJhd19zcGluX2xvY2soJmt2bV9sb2NrKTsKIAlsaXN0X2FkZCgma3ZtLT52bV9saXN0LCAmdm1fbGlzdCk7CiAJcmF3X3NwaW5fdW5sb2NrKCZrdm1fbG9jayk7CkBAIC02NTEsNyArNjUyLDkgQEAKIAkvKiBXZSBjYW4gcmVhZCB0aGUgZ3Vlc3QgbWVtb3J5IHdpdGggX194eHhfdXNlcigpIGxhdGVyIG9uLiAqLwogCWlmICh1c2VyX2FsbG9jICYmCiAJICAgICgobWVtLT51c2Vyc3BhY2VfYWRkciAmIChQQUdFX1NJWkUgLSAxKSkgfHwKLQkgICAgICFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBtZW0tPnVzZXJzcGFjZV9hZGRyLCBtZW0tPm1lbW9yeV9zaXplKSkpCisJICAgICAhYWNjZXNzX29rKFZFUklGWV9XUklURSwKKwkJCSh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKW1lbS0+dXNlcnNwYWNlX2FkZHIsCisJCQltZW0tPm1lbW9yeV9zaXplKSkpCiAJCWdvdG8gb3V0OwogCWlmIChtZW0tPnNsb3QgPj0gS1ZNX01FTU9SWV9TTE9UUyArIEtWTV9QUklWQVRFX01FTV9TTE9UUykKIAkJZ290byBvdXQ7Cg==