ZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMgYi9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jCmluZGV4IGYwNzZjYzUuLmY3ODUxMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgTm9raWEgQ29ycG9yYXRpb24KICAqIEF1dGhvcjoJU2FtdWVsIE9ydGl6IDxzYW11ZWwub3J0aXpAbm9raWEuY29tPiBhbmQKLSAqCQlKdWhhIFlyavZs5CA8anVoYS55cmpvbGFAbm9raWEuY29tPgorICoJCUp1aGEgWXJq77+9bO+/vSA8anVoYS55cmpvbGFAbm9raWEuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTA4Nyw5MSArMTA4NywxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTggX19pbml0ZGF0YSBzcGkxX3J4ZG1hX2lkIFtdID0gewotCU9NQVAyNFhYX0RNQV9TUEkxX1JYMCwKLQlPTUFQMjRYWF9ETUFfU1BJMV9SWDEsCi0JT01BUDI0WFhfRE1BX1NQSTFfUlgyLAotCU9NQVAyNFhYX0RNQV9TUEkxX1JYMywKLX07Ci0KLXN0YXRpYyB1OCBfX2luaXRkYXRhIHNwaTFfdHhkbWFfaWQgW10gPSB7Ci0JT01BUDI0WFhfRE1BX1NQSTFfVFgwLAotCU9NQVAyNFhYX0RNQV9TUEkxX1RYMSwKLQlPTUFQMjRYWF9ETUFfU1BJMV9UWDIsCi0JT01BUDI0WFhfRE1BX1NQSTFfVFgzLAotfTsKLQotc3RhdGljIHU4IF9faW5pdGRhdGEgc3BpMl9yeGRtYV9pZFtdID0gewotCU9NQVAyNFhYX0RNQV9TUEkyX1JYMCwKLQlPTUFQMjRYWF9ETUFfU1BJMl9SWDEsCi19OwotCi1zdGF0aWMgdTggX19pbml0ZGF0YSBzcGkyX3R4ZG1hX2lkW10gPSB7Ci0JT01BUDI0WFhfRE1BX1NQSTJfVFgwLAotCU9NQVAyNFhYX0RNQV9TUEkyX1RYMSwKLX07Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIFwKLQl8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQotc3RhdGljIHU4IF9faW5pdGRhdGEgc3BpM19yeGRtYV9pZFtdID0gewotCU9NQVAyNFhYX0RNQV9TUEkzX1JYMCwKLQlPTUFQMjRYWF9ETUFfU1BJM19SWDEsCi19OwotCi1zdGF0aWMgdTggX19pbml0ZGF0YSBzcGkzX3R4ZG1hX2lkW10gPSB7Ci0JT01BUDI0WFhfRE1BX1NQSTNfVFgwLAotCU9NQVAyNFhYX0RNQV9TUEkzX1RYMSwKLX07Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCi1zdGF0aWMgdTggX19pbml0ZGF0YSBzcGk0X3J4ZG1hX2lkW10gPSB7Ci0JT01BUDM0WFhfRE1BX1NQSTRfUlgwLAotfTsKLQotc3RhdGljIHU4IF9faW5pdGRhdGEgc3BpNF90eGRtYV9pZFtdID0gewotCU9NQVAzNFhYX0RNQV9TUEk0X1RYMCwKLX07Ci0jZW5kaWYKIAogc3RhdGljIGludCBfX2luaXQgb21hcDJfbWNzcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc3BpX21hc3RlcgkqbWFzdGVyOworCXN0cnVjdCBvbWFwMl9tY3NwaV9wbGF0Zm9ybV9jb25maWcgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IG9tYXAyX21jc3BpCSptY3NwaTsKIAlzdHJ1Y3QgcmVzb3VyY2UJCSpyOwogCWludAkJCXN0YXR1cyA9IDAsIGk7Ci0JY29uc3QgdTgJCSpyeGRtYV9pZCwgKnR4ZG1hX2lkOwotCXVuc2lnbmVkCQludW1fY2hpcHNlbGVjdDsKLQotCXN3aXRjaCAocGRldi0+aWQpIHsKLQljYXNlIDE6Ci0JCXJ4ZG1hX2lkID0gc3BpMV9yeGRtYV9pZDsKLQkJdHhkbWFfaWQgPSBzcGkxX3R4ZG1hX2lkOwotCQludW1fY2hpcHNlbGVjdCA9IDQ7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJcnhkbWFfaWQgPSBzcGkyX3J4ZG1hX2lkOwotCQl0eGRtYV9pZCA9IHNwaTJfdHhkbWFfaWQ7Ci0JCW51bV9jaGlwc2VsZWN0ID0gMjsKLQkJYnJlYWs7Ci0jaWYgZGVmaW5lZChDT05GSUdfU09DX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSBcCi0JfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKLQljYXNlIDM6Ci0JCXJ4ZG1hX2lkID0gc3BpM19yeGRtYV9pZDsKLQkJdHhkbWFfaWQgPSBzcGkzX3R4ZG1hX2lkOwotCQludW1fY2hpcHNlbGVjdCA9IDI7Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKLQljYXNlIDQ6Ci0JCXJ4ZG1hX2lkID0gc3BpNF9yeGRtYV9pZDsKLQkJdHhkbWFfaWQgPSBzcGk0X3R4ZG1hX2lkOwotCQludW1fY2hpcHNlbGVjdCA9IDE7Ci0JCWJyZWFrOwotI2VuZGlmCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJbWFzdGVyID0gc3BpX2FsbG9jX21hc3RlcigmcGRldi0+ZGV2LCBzaXplb2YgKm1jc3BpKTsKIAlpZiAobWFzdGVyID09IE5VTEwpIHsKQEAgLTExODgsNyArMTExMSw3IEBACiAJbWFzdGVyLT5zZXR1cCA9IG9tYXAyX21jc3BpX3NldHVwOwogCW1hc3Rlci0+dHJhbnNmZXIgPSBvbWFwMl9tY3NwaV90cmFuc2ZlcjsKIAltYXN0ZXItPmNsZWFudXAgPSBvbWFwMl9tY3NwaV9jbGVhbnVwOwotCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSBudW1fY2hpcHNlbGVjdDsKKwltYXN0ZXItPm51bV9jaGlwc2VsZWN0ID0gcGRhdGEtPm51bV9jczsKIAogCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBtYXN0ZXIpOwogCkBAIC0xMjA2LDYgKzExMjksOCBAQAogCQlnb3RvIGVycjE7CiAJfQogCisJci0+c3RhcnQgKz0gcGRhdGEtPnJlZ3Nfb2Zmc2V0OworCXItPmVuZCArPSBwZGF0YS0+cmVnc19vZmZzZXQ7CiAJbWNzcGktPnBoeXMgPSByLT5zdGFydDsKIAltY3NwaS0+YmFzZSA9IGlvcmVtYXAoci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0ICsgMSk7CiAJaWYgKCFtY3NwaS0+YmFzZSkgewpAQCAtMTI0MCwxMSArMTE2NSwzMiBAQAogCWlmIChtY3NwaS0+ZG1hX2NoYW5uZWxzID09IE5VTEwpCiAJCWdvdG8gZXJyMzsKIAotCWZvciAoaSA9IDA7IGkgPCBudW1fY2hpcHNlbGVjdDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG1hc3Rlci0+bnVtX2NoaXBzZWxlY3Q7IGkrKykgeworCQljaGFyIGRtYV9jaF9uYW1lWzE0XTsKKwkJc3RydWN0IHJlc291cmNlICpkbWFfcmVzOworCisJCXNwcmludGYoZG1hX2NoX25hbWUsICJyeCVkIiwgaSk7CisJCWRtYV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfRE1BLAorCQkJCQkJCWRtYV9jaF9uYW1lKTsKKwkJaWYgKCFkbWFfcmVzKSB7CisJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjYW5ub3QgZ2V0IERNQSBSWCBjaGFubmVsXG4iKTsKKwkJCXN0YXR1cyA9IC1FTk9ERVY7CisJCQlicmVhazsKKwkJfQorCiAJCW1jc3BpLT5kbWFfY2hhbm5lbHNbaV0uZG1hX3J4X2NoYW5uZWwgPSAtMTsKLQkJbWNzcGktPmRtYV9jaGFubmVsc1tpXS5kbWFfcnhfc3luY19kZXYgPSByeGRtYV9pZFtpXTsKKwkJbWNzcGktPmRtYV9jaGFubmVsc1tpXS5kbWFfcnhfc3luY19kZXYgPSBkbWFfcmVzLT5zdGFydDsKKwkJc3ByaW50ZihkbWFfY2hfbmFtZSwgInR4JWQiLCBpKTsKKwkJZG1hX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9ETUEsCisJCQkJCQkJZG1hX2NoX25hbWUpOworCQlpZiAoIWRtYV9yZXMpIHsKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwgImNhbm5vdCBnZXQgRE1BIFRYIGNoYW5uZWxcbiIpOworCQkJc3RhdHVzID0gLUVOT0RFVjsKKwkJCWJyZWFrOworCQl9CisKIAkJbWNzcGktPmRtYV9jaGFubmVsc1tpXS5kbWFfdHhfY2hhbm5lbCA9IC0xOwotCQltY3NwaS0+ZG1hX2NoYW5uZWxzW2ldLmRtYV90eF9zeW5jX2RldiA9IHR4ZG1hX2lkW2ldOworCQltY3NwaS0+ZG1hX2NoYW5uZWxzW2ldLmRtYV90eF9zeW5jX2RldiA9IGRtYV9yZXMtPnN0YXJ0OwogCX0KIAogCWlmIChvbWFwMl9tY3NwaV9yZXNldChtY3NwaSkgPCAwKQo=