ZGlmZiAtLWdpdCBhL0FuZHJvaWRCb290Lm1rIGIvQW5kcm9pZEJvb3QubWsKaW5kZXggNDQ4N2QwYy4uZGFiZDkzYyAxMDA2NDQKLS0tIGEvQW5kcm9pZEJvb3QubWsKKysrIGIvQW5kcm9pZEJvb3QubWsKQEAgLTEsNiArMSw2IEBACiAjQW5kcm9pZCBtYWtlZmlsZSB0byBidWlsZCBsayBib290bG9hZGVyIGFzIGEgcGFydCBvZiBBbmRyb2lkIEJ1aWxkCiAKLVRBUkdFVF9CT09UTE9BREVSIDo9IG91dC90YXJnZXQvcHJvZHVjdC8kKFRBUkdFVF9QUk9EVUNUKS9hcHBzYm9vdC5tYm4KK1RBUkdFVF9CT09UTE9BREVSIDo9ICQoUFJPRFVDVF9PVVQpL2FwcHNib290Lm1ibgogQk9PVExPQURFUl9PVVQgOj0gJChUT1ApLyQoVEFSR0VUX09VVF9JTlRFUk1FRElBVEVTKS9CT09UTE9BREVSX09CSgogCiAjIFJlbW92ZSBib290bG9hZGVyIGJpbmFyeSB0byB0cmlnZ2VyIHJlY29tcGlsZSB3aGVuIHNvdXJjZSBjaGFuZ2VzCkBAIC0xMyw3ICsxMyw3IEBACiAKIAogaWZlcSAoJChUQVJHRVRfVVNFUklNQUdFU19VU0VfRVhUMiksdHJ1ZSkKLVRBUkdFVF9CT09UTE9BREVSX0VNTUMgOj0gb3V0L3RhcmdldC9wcm9kdWN0LyQoVEFSR0VUX1BST0RVQ1QpL2VtbWNfYXBwc2Jvb3QubWJuCitUQVJHRVRfQk9PVExPQURFUl9FTU1DIDo9ICQoUFJPRFVDVF9PVVQpL2VtbWNfYXBwc2Jvb3QubWJuCiBCT09UTE9BREVSX0VNTUNfT1VUIDo9ICQoVE9QKS8kKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFUykvQk9PVExPQURFUl9FTU1DX09CSgogCiBlbW1jX2FwcHNib290bGRyX2NsZWFuOgpkaWZmIC0tZ2l0IGEvYXBwL2Fib290L2Fib290LmMgYi9hcHAvYWJvb3QvYWJvb3QuYwppbmRleCAyYTY2ZmJiLi42YWJlMzIxIDEwMDc1NQotLS0gYS9hcHAvYWJvb3QvYWJvb3QuYworKysgYi9hcHAvYWJvb3QvYWJvb3QuYwpAQCAtNDgsNiArNDgsOSBAQAogI2RlZmluZSBERUZBVUxUX0NNRExJTkUgIm1lbT0xMDBNIGNvbnNvbGU9bnVsbCI7CiAKICNkZWZpbmUgRU1NQ19CT09UX0lNR19IRUFERVJfQUREUiAweEZGMDAwCisjZGVmaW5lIFJFQ09WRVJZX01PREUgICAweDc3NjY1NTAyCisjZGVmaW5lIEZBU1RCT09UX01PREUgICAweDc3NjY1NTAwCisKIHN0YXRpYyBjb25zdCBjaGFyICplbW1jX2NtZGxpbmUgPSAiIGFuZHJvaWRib290LmVtbWM9dHJ1ZSI7CiAKIHN0YXRpYyBzdHJ1Y3QgdWRjX2RldmljZSBzdXJmX3VkY19kZXZpY2UgPSB7CkBAIC02OSw3ICs3MiwxMSBAQAogdm9pZCBwbGF0Zm9ybV91bmluaXRfdGltZXIodm9pZCk7CiB1bnNpZ25lZCogdGFyZ2V0X2F0YWdfbWVtKHVuc2lnbmVkKiBwdHIpOwogdW5zaWduZWQgYm9hcmRfbWFjaHR5cGUodm9pZCk7Cit1bnNpZ25lZCBjaGVja19yZWJvb3RfbW9kZSh2b2lkKTsKIGludCB0YXJnZXRfaXNfZW1tY19ib290KHZvaWQpOwordm9pZCByZWJvb3RfZGV2aWNlKHVuc2lnbmVkKTsKKworc3RhdGljIGludCBib290X2ludG9fcmVjb3ZlcnkgPSAwOwogCiBzdGF0aWMgdm9pZCBwdGVudHJ5X3RvX3RhZyh1bnNpZ25lZCAqKnB0ciwgc3RydWN0IHB0ZW50cnkgKnB0bikKIHsKQEAgLTE4MSw2ICsxODgsNyBAQAogCXVuc2lnbmVkIG9mZnNldCA9IDA7CiAJY29uc3QgY2hhciAqY21kbGluZTsKIAorCiAJaWYgKHRhcmdldF9pc19lbW1jX2Jvb3QoKSkgewogCQloZHIgPSAoc3RydWN0IGJvb3RfaW1nX2hkciAqKUVNTUNfQk9PVF9JTUdfSEVBREVSX0FERFI7CiAJCWlmIChtZW1jbXAoaGRyLT5tYWdpYywgQk9PVF9NQUdJQywgQk9PVF9NQUdJQ19TSVpFKSkgewpAQCAtMTk2LDEwICsyMDQsMjEgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCXB0biA9IHB0YWJsZV9maW5kKHB0YWJsZSwgImJvb3QiKTsKLQlpZiAocHRuID09IE5VTEwpIHsKLQkJZHByaW50ZihDUklUSUNBTCwgIkVSUk9SOiBObyBib290IHBhcnRpdGlvbiBmb3VuZFxuIik7Ci0JCXJldHVybiAtMTsKKwlpZighYm9vdF9pbnRvX3JlY292ZXJ5KQorCXsKKwkgICAgICAgIHB0biA9IHB0YWJsZV9maW5kKHB0YWJsZSwgImJvb3QiKTsKKwkgICAgICAgIGlmIChwdG4gPT0gTlVMTCkgeworCQkgICAgICAgIGRwcmludGYoQ1JJVElDQUwsICJFUlJPUjogTm8gYm9vdCBwYXJ0aXRpb24gZm91bmRcbiIpOworCQkgICAgICAgIHJldHVybiAtMTsKKwkgICAgICAgIH0KKwl9CisJZWxzZQorCXsKKwkgICAgICAgIHB0biA9IHB0YWJsZV9maW5kKHB0YWJsZSwgInJlY292ZXJ5Iik7CisJICAgICAgICBpZiAocHRuID09IE5VTEwpIHsKKwkJICAgICAgICBkcHJpbnRmKENSSVRJQ0FMLCAiRVJST1I6IE5vIHJlY292ZXJ5IHBhcnRpdGlvbiBmb3VuZFxuIik7CisJCSAgICAgICAgcmV0dXJuIC0xOworCSAgICAgICAgfQogCX0KIAogCWlmIChmbGFzaF9yZWFkKHB0biwgb2Zmc2V0LCBidWYsIHBhZ2Vfc2l6ZSkpIHsKQEAgLTM2MiwxMiArMzgxLDM4IEBACiAJYm9vdF9saW51eF9mcm9tX2ZsYXNoKCk7CiB9CiAKK3ZvaWQgY21kX3JlYm9vdChjb25zdCBjaGFyICphcmcsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIHN6KQoreworICAgICAgICBkcHJpbnRmKElORk8sICJyZWJvb3RpbmcgdGhlIGRldmljZVxuIik7CisJZmFzdGJvb3Rfb2theSgiIik7CisJcmVib290X2RldmljZSgwKTsKK30KKwordm9pZCBjbWRfcmVib290X2Jvb3Rsb2FkZXIoY29uc3QgY2hhciAqYXJnLCB2b2lkICpkYXRhLCB1bnNpZ25lZCBzeikKK3sKKyAgICAgICAgZHByaW50ZihJTkZPLCAicmVib290aW5nIHRoZSBkZXZpY2VcbiIpOworCWZhc3Rib290X29rYXkoIiIpOworCXJlYm9vdF9kZXZpY2UoRkFTVEJPT1RfTU9ERSk7Cit9CisKIHZvaWQgYWJvb3RfaW5pdChjb25zdCBzdHJ1Y3QgYXBwX2Rlc2NyaXB0b3IgKmFwcCkKIHsKKyAgICAgICAgdW5zaWduZWQgcmVib290X21vZGUgPSAwOwogCXBhZ2Vfc2l6ZSA9IGZsYXNoX3BhZ2Vfc2l6ZSgpOwogCXBhZ2VfbWFzayA9IHBhZ2Vfc2l6ZSAtIDE7CisJaWYgKGtleXNfZ2V0X3N0YXRlKEtFWV9IT01FKSAhPSAwKQorCSAgICAgICAgYm9vdF9pbnRvX3JlY292ZXJ5ID0gMTsKIAlpZiAoa2V5c19nZXRfc3RhdGUoS0VZX0JBQ0spICE9IDApCiAJCWdvdG8gZmFzdGJvb3Q7CisJaWYgKGtleXNfZ2V0X3N0YXRlKEtFWV9DTEVBUikgIT0gMCkKKwkJZ290byBmYXN0Ym9vdDsKKworCXJlYm9vdF9tb2RlID0gY2hlY2tfcmVib290X21vZGUoKTsKKyAgICAgICAgaWYgKHJlYm9vdF9tb2RlID09IFJFQ09WRVJZX01PREUpeworCSAgICAgICAgYm9vdF9pbnRvX3JlY292ZXJ5ID0gMTsKKyAgICAgICAgfWVsc2UgaWYocmVib290X21vZGUgPT0gRkFTVEJPT1RfTU9ERSl7CisJICAgICAgICBnb3RvIGZhc3Rib290OworICAgICAgICB9CiAKIAlib290X2xpbnV4X2Zyb21fZmxhc2goKTsKIAlkcHJpbnRmKENSSVRJQ0FMLCAiRVJST1I6IENvdWxkIG5vdCBkbyBub3JtYWwgYm9vdC4gUmV2ZXJ0aW5nICIKQEAgLTM4Miw2ICs0MjcsOCBAQAogCWZhc3Rib290X3JlZ2lzdGVyKCJlcmFzZToiLCBjbWRfZXJhc2UpOwogCWZhc3Rib290X3JlZ2lzdGVyKCJmbGFzaDoiLCBjbWRfZmxhc2gpOwogCWZhc3Rib290X3JlZ2lzdGVyKCJjb250aW51ZSIsIGNtZF9jb250aW51ZSk7CisJZmFzdGJvb3RfcmVnaXN0ZXIoInJlYm9vdCIsIGNtZF9yZWJvb3QpOworCWZhc3Rib290X3JlZ2lzdGVyKCJyZWJvb3QtYm9vdGxvYWRlciIsIGNtZF9yZWJvb3RfYm9vdGxvYWRlcik7CiAJZmFzdGJvb3RfcHVibGlzaCgicHJvZHVjdCIsICJzd29yZGZpc2giKTsKIAlmYXN0Ym9vdF9wdWJsaXNoKCJrZXJuZWwiLCAibGsiKTsKIApkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vbXNtN3gzMC9pbmNsdWRlL3BsYXRmb3JtL2lvbWFwLmggYi9wbGF0Zm9ybS9tc203eDMwL2luY2x1ZGUvcGxhdGZvcm0vaW9tYXAuaAppbmRleCBhMGJkYjQzLi5mZDEwN2IzIDEwMDY0NAotLS0gYS9wbGF0Zm9ybS9tc203eDMwL2luY2x1ZGUvcGxhdGZvcm0vaW9tYXAuaAorKysgYi9wbGF0Zm9ybS9tc203eDMwL2luY2x1ZGUvcGxhdGZvcm0vaW9tYXAuaApAQCAtNDQsOCArNDQsOSBAQAogI2RlZmluZSBNU01fR0NDX0JBU0UgCTB4QzAxODIwMDAKIAogI2lmIGRlZmluZWQoUExBVEZPUk1fTVNNN1gzMCkKLSNkZWZpbmUgTVNNX1NIQVJFRF9CQVNFIDB4MDAxMDAwMDAKKyNkZWZpbmUgTVNNX1NIQVJFRF9CQVNFICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBIV19SRVZJU0lPTl9OVU1CRVIgICAweEFCQzAwMjcwCiAjZWxzZQotI2RlZmluZSBNU01fU0hBUkVEX0JBU0UgMHgwMUYwMDAwMAorI2RlZmluZSBNU01fU0hBUkVEX0JBU0UgICAgICAweDAxRjAwMDAwCiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vbXNtX3NoYXJlZC9wcm9jX2NvbW0uYyBiL3BsYXRmb3JtL21zbV9zaGFyZWQvcHJvY19jb21tLmMKaW5kZXggOWY5YmQ2My4uM2IzMjEwNyAxMDA2NDQKLS0tIGEvcGxhdGZvcm0vbXNtX3NoYXJlZC9wcm9jX2NvbW0uYworKysgYi9wbGF0Zm9ybS9tc21fc2hhcmVkL3Byb2NfY29tbS5jCkBAIC0yMzIsMyArMjMyLDkgQEAKIAljbG9ja19lbmFibGUoY2xvY2tfaWQpOwogCWNsb2NrX3NldF9yYXRlKGNsb2NrX2lkLCByYXRlKTsKIH0KKwordm9pZCByZWJvb3QodW5zaWduZWQgcmVib290X3JlYXNvbikKK3sKKyAgICAgICAgbXNtX3Byb2NfY29tbShQQ09NX1JFU0VUX0NISVAsICZyZWJvb3RfcmVhc29uLCAwKTsKKyAgICAgICAgZm9yICg7OykgOworfQpkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vbXNtX3NoYXJlZC9zbWVtLmggYi9wbGF0Zm9ybS9tc21fc2hhcmVkL3NtZW0uaAppbmRleCBhNTE0Zjk1Li44MzAwYjU1IDEwMDY0NAotLS0gYS9wbGF0Zm9ybS9tc21fc2hhcmVkL3NtZW0uaAorKysgYi9wbGF0Zm9ybS9tc21fc2hhcmVkL3NtZW0uaApAQCAtODAsNiArODAsOCBAQAogCiAJU01FTV9BQVJNX1BBUlRJVElPTl9UQUJMRSA9IDksCiAKKyAgICAgICAgU01FTV9BUFBTX0JPT1RfTU9ERSA9IDEwNiwKKwogICAgICAgICBTTUVNX0JPQVJEX0lORk9fTE9DQVRJT04gPSAxMzcsCiAKIAlTTUVNX0ZJUlNUX1ZBTElEX1RZUEUgPSBTTUVNX1NQSU5MT0NLX0FSUkFZLApkaWZmIC0tZ2l0IGEvcGxhdGZvcm0vbXNtX3NoYXJlZC90aW1lci5jIGIvcGxhdGZvcm0vbXNtX3NoYXJlZC90aW1lci5jCmluZGV4IDMxY2M2ZmYuLmIyNDliMjMgMTAwNjQ0Ci0tLSBhL3BsYXRmb3JtL21zbV9zaGFyZWQvdGltZXIuYworKysgYi9wbGF0Zm9ybS9tc21fc2hhcmVkL3RpbWVyLmMKQEAgLTYwLDYgKzYwLDcgQEAKICNkZWZpbmUgREdUX0VOQUJMRV9DTFJfT05fTUFUQ0hfRU4gICAgICAgIDIKICNkZWZpbmUgREdUX0VOQUJMRV9FTiAgICAgICAgICAgICAgICAgICAgIDEKICNkZWZpbmUgREdUX0NMRUFSICAgICAgICAgICAgREdUX1JFRygweDAwMEMpCisjZGVmaW5lIERHVF9DTEtfQ1RMICAgICAgICAgIERHVF9SRUcoMHgwMDEwKQogCiAjZWxzZQogI2RlZmluZSBHUFRfUkVHKG9mZikgKE1TTV9HUFRfQkFTRSArIChvZmYpKQpAQCAtOTgsNiArOTksMTQgQEAKIAlwbGF0Zm9ybV90aW1lcl9jYWxsYmFjayBjYWxsYmFjaywKIAl2b2lkICphcmcsIHRpbWVfdCBpbnRlcnZhbCkKIHsKKyNpZmRlZiBQTEFURk9STV9NU003WDMwCisgICAgICAgIHVuc2lnbmVkIHZhbCA9IDA7CisJdW5zaWduZWQgbWFzayA9ICgweDEgPDwgMjgpOworCS8vQ2hlY2sgZm9yIHRoZSBoYXJkd2FyZSByZXZpc2lvbgorCXZhbCA9IHJlYWRsKEhXX1JFVklTSU9OX05VTUJFUik7CisJaWYodmFsICYgbWFzaykKKwkgICAgd3JpdGVsKDEsIERHVF9DTEtfQ1RMKTsKKyNlbmRpZgogCWVudGVyX2NyaXRpY2FsX3NlY3Rpb24oKTsKIAogCXRpbWVyX2NhbGxiYWNrID0gY2FsbGJhY2s7CmRpZmYgLS1naXQgYS9wcm9qZWN0L21zbTc2MjVfZmZhLm1rIGIvcHJvamVjdC9tc203NjI1X2ZmYS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2U4MDRjCi0tLSAvZGV2L251bGwKKysrIGIvcHJvamVjdC9tc203NjI1X2ZmYS5tawpAQCAtMCwwICsxLDExIEBACisjIHRvcCBsZXZlbCBwcm9qZWN0IHJ1bGVzIGZvciB0aGUgbXNtNzYyNV9mZmEgcHJvamVjdAorIworTE9DQUxfRElSIDo9ICQoR0VUX0xPQ0FMX0RJUikKKworVEFSR0VUIDo9IG1zbTc2MjVfZmZhCisKK01PRFVMRVMgKz0gYXBwL2Fib290CisKKyNERUZJTkVTICs9IFdJVEhfREVCVUdfRENDPTEKKyNERUZJTkVTICs9IFdJVEhfREVCVUdfVUFSVD0xCisjREVGSU5FUyArPSBXSVRIX0RFQlVHX0ZCQ09OPTEKZGlmZiAtLWdpdCBhL3Byb2plY3QvbXNtNzYyNV9mZmFfbmFuZHdyaXRlLm1rIGIvcHJvamVjdC9tc203NjI1X2ZmYV9uYW5kd3JpdGUubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhlZWJmZgotLS0gL2Rldi9udWxsCisrKyBiL3Byb2plY3QvbXNtNzYyNV9mZmFfbmFuZHdyaXRlLm1rCkBAIC0wLDAgKzEsMTQgQEAKKyMgdG9wIGxldmVsIHByb2plY3QgcnVsZXMgZm9yIHRoZSBtc203NjI1X2ZmYV9uYW5kd3JpdGUgcHJvamVjdAorIworTE9DQUxfRElSIDo9ICQoR0VUX0xPQ0FMX0RJUikKKworVEFSR0VUIDo9IG1zbTc2MjVfZmZhCisKK01PRFVMRVMgKz0gYXBwL25hbmR3cml0ZQorCitERUZJTkVTICs9IFdJVEhfREVCVUdfSlRBRz0xCitERUZJTkVTICs9IEVOQUJMRV9OQU5EV1JJVEU9MQorI0RFRklORVMgKz0gV0lUSF9ERUJVR19EQ0M9MQorI0RFRklORVMgKz0gV0lUSF9ERUJVR19VQVJUPTEKKyNERUZJTkVTICs9IFdJVEhfREVCVUdfRkJDT049MQorCmRpZmYgLS1naXQgYS9wcm9qZWN0L21zbTc2MjVfc3VyZi5tayBiL3Byb2plY3QvbXNtNzYyNV9zdXJmLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NThhMGUKLS0tIC9kZXYvbnVsbAorKysgYi9wcm9qZWN0L21zbTc2MjVfc3VyZi5tawpAQCAtMCwwICsxLDExIEBACisjIHRvcCBsZXZlbCBwcm9qZWN0IHJ1bGVzIGZvciB0aGUgbXNtNzYyNV9zdXJmIHByb2plY3QKKyMKK0xPQ0FMX0RJUiA6PSAkKEdFVF9MT0NBTF9ESVIpCisKK1RBUkdFVCA6PSBtc203NjI1X3N1cmYKKworTU9EVUxFUyArPSBhcHAvYWJvb3QKKworI0RFRklORVMgKz0gV0lUSF9ERUJVR19EQ0M9MQorI0RFRklORVMgKz0gV0lUSF9ERUJVR19VQVJUPTEKKyNERUZJTkVTICs9IFdJVEhfREVCVUdfRkJDT049MQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Byb2plY3QvbXNtNzYyNV9zdXJmX25hbmR3cml0ZS5tayBiL3Byb2plY3QvbXNtNzYyNV9zdXJmX25hbmR3cml0ZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDFkMmM1Ci0tLSAvZGV2L251bGwKKysrIGIvcHJvamVjdC9tc203NjI1X3N1cmZfbmFuZHdyaXRlLm1rCkBAIC0wLDAgKzEsMTQgQEAKKyMgdG9wIGxldmVsIHByb2plY3QgcnVsZXMgZm9yIHRoZSBtc203NjI1X3N1cmZfbmFuZHdyaXRlIHByb2plY3QKKyMKK0xPQ0FMX0RJUiA6PSAkKEdFVF9MT0NBTF9ESVIpCisKK1RBUkdFVCA6PSBtc203NjI1X3N1cmYKKworTU9EVUxFUyArPSBhcHAvbmFuZHdyaXRlCisKK0RFRklORVMgKz0gV0lUSF9ERUJVR19KVEFHPTEKK0RFRklORVMgKz0gRU5BQkxFX05BTkRXUklURT0xCisjREVGSU5FUyArPSBXSVRIX0RFQlVHX0RDQz0xCisjREVGSU5FUyArPSBXSVRIX0RFQlVHX1VBUlQ9MQorI0RFRklORVMgKz0gV0lUSF9ERUJVR19GQkNPTj0xCisKZGlmZiAtLWdpdCBhL3RhcmdldC9pbml0LmMgYi90YXJnZXQvaW5pdC5jCmluZGV4IDE1NjI4NGQuLmU2ZjExNGMgMTAwNjQ0Ci0tLSBhL3RhcmdldC9pbml0LmMKKysrIGIvdGFyZ2V0L2luaXQuYwpAQCAtNDYsMyArNDYsMTIgQEAKICAgICByZXR1cm4gMDsKICNlbmRpZgogfQorCitfX1dFQUsgdW5zaWduZWQgY2hlY2tfcmVib290X21vZGUodm9pZCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworX19XRUFLIHZvaWQgcmVib290X2RldmljZSh1bnNpZ25lZCByZWJvb3RfcmVhc29uKQoreworfQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L21zbTc2MjVfZmZhL2F0YWdzLmMgYi90YXJnZXQvbXNtNzYyNV9mZmEvYXRhZ3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDI5YWQyCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L21zbTc2MjVfZmZhL2F0YWdzLmMKQEAgLTAsMCArMSwzMiBAQAorLyogQ29weXJpZ2h0IChjKSAyMDA5LCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBDb2RlIEF1cm9yYSBub3IKKyAqICAgICAgIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgKiAgICAgICBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT04tSU5GUklOR0VNRU5UIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsKKyAqIE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKKyAqIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCit1bnNpZ25lZCogdGFyZ2V0X2F0YWdfbWVtKHVuc2lnbmVkKiBwdHIpCit7CisgICAgcmV0dXJuIHB0cjsKK30KZGlmZiAtLWdpdCBhL3RhcmdldC9tc203NjI1X2ZmYS9pbml0LmMgYi90YXJnZXQvbXNtNzYyNV9mZmEvaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMzBlMmYKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvbXNtNzYyNV9mZmEvaW5pdC5jCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxkZWJ1Zy5oPgorI2luY2x1ZGUgPGRldi9rZXlzLmg+CisjaW5jbHVkZSA8ZGV2L2dwaW9fa2V5cGFkLmg+CisjaW5jbHVkZSA8bGliL3B0YWJsZS5oPgorI2luY2x1ZGUgPGRldi9mbGFzaC5oPgorI2luY2x1ZGUgPHNtZW0uaD4KKworI2RlZmluZSBMSU5VWF9NQUNIVFlQRSAgMTAwNzAwMworCitzdGF0aWMgc3RydWN0IHB0YWJsZSBmbGFzaF9wdGFibGU7CisKKy8qIGZvciB0aGVzZSBwYXJ0aXRpb25zLCBzdGFydCB3aWxsIGJlIG9mZnNldCBieSBlaXRoZXIgd2hhdCB3ZSBnZXQgZnJvbQorICogc21lbSwgb3IgZnJvbSB0aGUgYWJvdmUgb2Zmc2V0IGlmIHNtZW0gaXMgbm90IHVzZWZ1bC4gQWxzbywgd2Ugc2hvdWxkCisgKiBwcm9iYWJseSBoYXZlIHNtZW1fcHRhYmxlIGNvZGUgcG9wdWxhdGUgb3VyIGZsYXNoX3B0YWJsZS4KKyAqCisgKiBXaGVuIHNtZW0gcHJvdmlkZXMgdXMgd2l0aCBhIGZ1bGwgcGFydGl0aW9uIHRhYmxlLCB3ZSBjYW4gZ2V0IHJpZCBvZgorICogdGhpcyBhbHRvZ2V0aGVyLgorICoKKyAqLworc3RhdGljIHN0cnVjdCBwdGVudHJ5IGJvYXJkX3BhcnRfbGlzdFtdID0geworCXsKKwkJLnN0YXJ0ID0gMCwKKwkJLmxlbmd0aCA9IDQwLAorCQkubmFtZSA9ICJib290IiwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gNTYsCisJCS5sZW5ndGggPSA2MDggLyogNzZNQiAqLywKKwkJLm5hbWUgPSAic3lzdGVtIiwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gNjY0LAorCQkubGVuZ3RoID0gNDAgLyogNU1CICovLAorCQkubmFtZSA9ICJjYWNoZSIsCisJfSwKKwl7CisJCS5zdGFydCA9IDcwNCwKKwkJLmxlbmd0aCA9IDQwIC8qIDVNQiAqLywKKwkJLm5hbWUgPSAicmVjb3ZlcnkiLAorCX0sCisJeworCQkuc3RhcnQgPSA3NDQsCisJCS5sZW5ndGggPSA3MjAgLyogOTBNQiAqLywKKwkJLm5hbWUgPSAidXNlcmRhdGEiLAorCX0sCit9Oworc3RhdGljIGludCBudW1fcGFydHMgPSBzaXplb2YoYm9hcmRfcGFydF9saXN0KS9zaXplb2Yoc3RydWN0IHB0ZW50cnkpOworCit2b2lkIHNtZW1fcHRhYmxlX2luaXQodm9pZCk7Cit1bnNpZ25lZCBzbWVtX2dldF9hcHBzX2ZsYXNoX3N0YXJ0KHZvaWQpOworCit2b2lkIGtleXBhZF9pbml0KHZvaWQpOworCitpbnQgdGFyZ2V0X2lzX2VtbWNfYm9vdCh2b2lkKTsKKwordm9pZCB0YXJnZXRfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIG9mZnNldDsKKwlzdHJ1Y3QgZmxhc2hfaW5mbyAqZmxhc2hfaW5mbzsKKwlpbnQgaTsKKworCWRwcmludGYoSU5GTywgInRhcmdldF9pbml0KClcbiIpOworCisjaWYgKCFFTkFCTEVfTkFORFdSSVRFKQorCWtleXNfaW5pdCgpOworCWtleXBhZF9pbml0KCk7CisjZW5kaWYKKworCWlmICh0YXJnZXRfaXNfZW1tY19ib290KCkpCisJCXJldHVybjsKKworCXB0YWJsZV9pbml0KCZmbGFzaF9wdGFibGUpOworCXNtZW1fcHRhYmxlX2luaXQoKTsKKworCWZsYXNoX2luaXQoKTsKKwlmbGFzaF9pbmZvID0gZmxhc2hfZ2V0X2luZm8oKTsKKwlBU1NFUlQoZmxhc2hfaW5mbyk7CisKKwlvZmZzZXQgPSBzbWVtX2dldF9hcHBzX2ZsYXNoX3N0YXJ0KCk7CisJaWYgKG9mZnNldCA9PSAweGZmZmZmZmZmKQorCSAgICAgICAgd2hpbGUoMSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcnRzOyBpKyspIHsKKwkJc3RydWN0IHB0ZW50cnkgKnB0biA9ICZib2FyZF9wYXJ0X2xpc3RbaV07CisJCXVuc2lnbmVkIGxlbiA9IHB0bi0+bGVuZ3RoOworCisJCWlmICgobGVuID09IDApICYmIChpID09IG51bV9wYXJ0cyAtIDEpKQorCQkJbGVuID0gZmxhc2hfaW5mby0+bnVtX2Jsb2NrcyAtIG9mZnNldCAtIHB0bi0+c3RhcnQ7CisJCXB0YWJsZV9hZGQoJmZsYXNoX3B0YWJsZSwgcHRuLT5uYW1lLCBvZmZzZXQgKyBwdG4tPnN0YXJ0LAorCQkJICAgbGVuLCBwdG4tPmZsYWdzKTsKKwl9CisKKwlwdGFibGVfZHVtcCgmZmxhc2hfcHRhYmxlKTsKKwlmbGFzaF9zZXRfcHRhYmxlKCZmbGFzaF9wdGFibGUpOworfQorCit1bnNpZ25lZCBib2FyZF9tYWNodHlwZSh2b2lkKQoreworICAgIHJldHVybiBMSU5VWF9NQUNIVFlQRTsKK30KKwordm9pZCByZWJvb3RfZGV2aWNlKHVuc2lnbmVkIHJlYm9vdF9yZWFzb24pCit7CisgICAgcmVib290KHJlYm9vdF9yZWFzb24pOworfQorCit1bnNpZ25lZCBjaGVja19yZWJvb3RfbW9kZSh2b2lkKQoreworICAgIHVuc2lnbmVkIG1vZGVbMl0gPSB7MCwgMH07CisgICAgdW5zaWduZWQgaW50IG1vZGVfbGVuID0gc2l6ZW9mKG1vZGUpOworICAgIHVuc2lnbmVkIHNtZW1fc3RhdHVzOworCisgICAgc21lbV9zdGF0dXMgPSBzbWVtX3JlYWRfYWxsb2NfZW50cnkoU01FTV9BUFBTX0JPT1RfTU9ERSwKKwkJCQkJJm1vZGUsIG1vZGVfbGVuICk7CisgICAgaWYoc21lbV9zdGF0dXMpCisgICAgeworICAgICAgZHByaW50ZihDUklUSUNBTCwgIkVSUk9SOiB1bmFibGUgdG8gcmVhZCBzaGFyZWQgbWVtb3J5IGZvciByZWJvb3QgbW9kZVxuIik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG1vZGVbMF07Cit9CmRpZmYgLS1naXQgYS90YXJnZXQvbXNtNzYyNV9mZmEva2V5cGFkLmMgYi90YXJnZXQvbXNtNzYyNV9mZmEva2V5cGFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU1MGVkNQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9tc203NjI1X2ZmYS9rZXlwYWQuYwpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZGV2L2tleXMuaD4KKyNpbmNsdWRlIDxkZXYvZ3Bpb19rZXlwYWQuaD4KKworI2RlZmluZSBBUlJBWV9TSVpFKHgpIChzaXplb2YoeCkvc2l6ZW9mKCh4KVswXSkpCisKKy8qIGRvbid0IHR1cm4gdGhpcyBvbiB3aXRob3V0IHVwZGF0aW5nIHRoZSBmZmEgc3VwcG9ydCAqLworI2RlZmluZSBTQ0FOX0ZVTkNUSU9OX0tFWVMgMAorCitzdGF0aWMgdW5zaWduZWQgaW50IGhhbGlidXRfcm93X2dwaW9zW10gPSB7CisJMzEsIDMyLCAzMywgMzQsIDM1LCA0MQorI2lmIFNDQU5fRlVOQ1RJT05fS0VZUworCSwgNDIKKyNlbmRpZgorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBoYWxpYnV0X2NvbF9ncGlvc1tdID0geyAzNiwgMzcsIDM4LCAzOSwgNDAgfTsKKworI2RlZmluZSBLRVlNQVBfSU5ERVgocm93LCBjb2wpICgocm93KSpBUlJBWV9TSVpFKGhhbGlidXRfY29sX2dwaW9zKSArIChjb2wpKQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgaGFsaWJ1dF9rZXltYXBbQVJSQVlfU0laRShoYWxpYnV0X2NvbF9ncGlvcykgKiBBUlJBWV9TSVpFKGhhbGlidXRfcm93X2dwaW9zKV0gPSB7CisJLy9bS0VZTUFQX0lOREVYKDAsIDApXSA9IEtFWV81LAorCS8vW0tFWU1BUF9JTkRFWCgwLCAxKV0gPSBLRVlfOSwKKwlbS0VZTUFQX0lOREVYKDAsIDIpXSA9IEtFWV8xLAorCVtLRVlNQVBfSU5ERVgoMCwgMyldID0gS0VZX1NFTkQsCisJW0tFWU1BUF9JTkRFWCgwLCA0KV0gPSBLRVlfTEVGVCwKKworCVtLRVlNQVBfSU5ERVgoMSwgMCldID0gS0VZXzMsCisJW0tFWU1BUF9JTkRFWCgxLCAxKV0gPSBLRVlfUklHSFQsCisJW0tFWU1BUF9JTkRFWCgxLCAyKV0gPSBLRVlfVk9MVU1FVVAsCisJLy9bS0VZTUFQX0lOREVYKDEsIDMpXSA9IEtFWV9TSEFSUCwKKwlbS0VZTUFQX0lOREVYKDEsIDQpXSA9IEtFWV82LAorCisJW0tFWU1BUF9JTkRFWCgyLCAwKV0gPSBLRVlfSE9NRSwgICAgICAvKiBBICovCisJW0tFWU1BUF9JTkRFWCgyLCAxKV0gPSBLRVlfQkFDSywgICAgICAvKiBCICovCisJW0tFWU1BUF9JTkRFWCgyLCAyKV0gPSBLRVlfMCwKKwlbS0VZTUFQX0lOREVYKDIsIDMpXSA9IEtFWV9TSEFSUCwKKwlbS0VZTUFQX0lOREVYKDIsIDQpXSA9IEtFWV85LAorCisJW0tFWU1BUF9JTkRFWCgzLCAwKV0gPSBLRVlfVVAsCisJW0tFWU1BUF9JTkRFWCgzLCAxKV0gPSBLRVlfQ0VOVEVSLAorCVtLRVlNQVBfSU5ERVgoMywgMildID0gS0VZXzQsCisJLy9bS0VZTUFQX0lOREVYKDMsIDMpXSA9IEtFWV9NVVRFLCAgICAgIC8qIFNQS1IgKi8KKwlbS0VZTUFQX0lOREVYKDMsIDQpXSA9IEtFWV8yLAorCisJW0tFWU1BUF9JTkRFWCg0LCAwKV0gPSBLRVlfVk9MVU1FRE9XTiwKKwlbS0VZTUFQX0lOREVYKDQsIDEpXSA9IEtFWV9TT1VORCwKKwlbS0VZTUFQX0lOREVYKDQsIDIpXSA9IEtFWV9ET1dOLAorCVtLRVlNQVBfSU5ERVgoNCwgMyldID0gS0VZXzgsCisJW0tFWU1BUF9JTkRFWCg0LCA0KV0gPSBLRVlfNSwKKworCS8vW0tFWU1BUF9JTkRFWCg1LCAwKV0gPSBLRVlfVk9MVU1FRE9XTiwKKwlbS0VZTUFQX0lOREVYKDUsIDEpXSA9IEtFWV9TVEFSLAorCVtLRVlNQVBfSU5ERVgoNSwgMildID0gS0VZX1NPRlQyLAorCVtLRVlNQVBfSU5ERVgoNSwgMyldID0gS0VZX01FTlUsCisJW0tFWU1BUF9JTkRFWCg1LCA0KV0gPSBLRVlfNywKKworI2lmIFNDQU5fRlVOQ1RJT05fS0VZUworCVtLRVlNQVBfSU5ERVgoNiwgMCldID0gS0VZX0Y1LAorCVtLRVlNQVBfSU5ERVgoNiwgMSldID0gS0VZX0Y0LAorCVtLRVlNQVBfSU5ERVgoNiwgMildID0gS0VZX0YzLAorCVtLRVlNQVBfSU5ERVgoNiwgMyldID0gS0VZX0YyLAorCVtLRVlNQVBfSU5ERVgoNiwgNCldID0gS0VZX0YxCisjZW5kaWYKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlwYWRfaW5mbyBoYWxpYnV0X2tleXBhZF9pbmZvID0geworCS5rZXltYXAJCT0gaGFsaWJ1dF9rZXltYXAsCisJLm91dHB1dF9ncGlvcwk9IGhhbGlidXRfcm93X2dwaW9zLAorCS5pbnB1dF9ncGlvcwk9IGhhbGlidXRfY29sX2dwaW9zLAorCS5ub3V0cHV0cwk9IEFSUkFZX1NJWkUoaGFsaWJ1dF9yb3dfZ3Bpb3MpLAorCS5uaW5wdXRzCT0gQVJSQVlfU0laRShoYWxpYnV0X2NvbF9ncGlvcyksCisJLnNldHRsZV90aW1lCT0gNSAvKiBtc2VjICovLAorCS5wb2xsX3RpbWUJPSAyMCAvKiBtc2VjICovLAorCS5mbGFncwkJPSBHUElPS1BGX0RSSVZFX0lOQUNUSVZFLAorfTsKKwordm9pZCBrZXlwYWRfaW5pdCh2b2lkKQoreworCWdwaW9fa2V5cGFkX2luaXQoJmhhbGlidXRfa2V5cGFkX2luZm8pOworfQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L21zbTc2MjVfZmZhL3BhbmVsLmMgYi90YXJnZXQvbXNtNzYyNV9mZmEvcGFuZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmI1NmExCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L21zbTc2MjVfZmZhL3BhbmVsLmMKQEAgLTAsMCArMSw0NzEgQEAKKy8qIENvcHlyaWdodCAyMDA3LCBHb29nbGUgSW5jLiAqLworCisjaW5jbHVkZSA8ZGVidWcuaD4KKyNpbmNsdWRlIDxkZXYvZ3Bpby5oPgorI2luY2x1ZGUgPGtlcm5lbC90aHJlYWQuaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybS9tZGRpLmg+CisKKyNkZWZpbmUgTURESV9DTElFTlRfQ09SRV9CQVNFICAweDEwODAwMAorI2RlZmluZSBMQ0RfQ09OVFJPTF9CTE9DS19CQVNFIDB4MTEwMDAwCisjZGVmaW5lIFNQSV9CTE9DS19CQVNFICAgICAgICAgMHgxMjAwMDAKKyNkZWZpbmUgSTJDX0JMT0NLX0JBU0UgICAgICAgICAweDEzMDAwMAorI2RlZmluZSBQV01fQkxPQ0tfQkFTRSAgICAgICAgIDB4MTQwMDAwCisjZGVmaW5lIEdQSU9fQkxPQ0tfQkFTRSAgICAgICAgMHgxNTAwMDAKKyNkZWZpbmUgU1lTVEVNX0JMT0NLMV9CQVNFICAgICAweDE2MDAwMAorI2RlZmluZSBTWVNURU1fQkxPQ0syX0JBU0UgICAgIDB4MTcwMDAwCisKKworI2RlZmluZQlNRERJQ0FQMCAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MDApCisjZGVmaW5lCU1ERElDQVAxICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgwNCkKKyNkZWZpbmUJTURESUNBUDIgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDA4KQorI2RlZmluZQlNRERJQ0FQMyAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MEMpCisjZGVmaW5lCU1EQ0FQQ0hHICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgxMCkKKyNkZWZpbmUJTURDUkNFUkMgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDE0KQorI2RlZmluZQlUVEJVU1NFTCAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MTgpCisjZGVmaW5lCURQU0VUMCAgICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgxQykKKyNkZWZpbmUJRFBTRVQxICAgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDIwKQorI2RlZmluZQlEUFNVUyAgICAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MjQpCisjZGVmaW5lCURQUlVOICAgICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgyOCkKKyNkZWZpbmUJU1lTQ0tFTkEgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDJDKQorI2RlZmluZQlURVNUTU9ERSAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MzApCisjZGVmaW5lCUZJRk9NT05JICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgzNCkKKyNkZWZpbmUJSU5UTU9OSSAgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDM4KQorI2RlZmluZQlNRElPQklTVCAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4M0MpCisjZGVmaW5lCU1ESU9QU0VUICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHg0MCkKKyNkZWZpbmUJQklUTUFQMCAgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDQ0KQorI2RlZmluZQlCSVRNQVAxICAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4NDgpCisjZGVmaW5lCUJJVE1BUDIgICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHg0QykKKyNkZWZpbmUJQklUTUFQMyAgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDUwKQorI2RlZmluZQlCSVRNQVA0ICAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4NTQpCisKKworI2RlZmluZQlTUlNUICAgICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDAwKQorI2RlZmluZQlQT1JUX0VOQiAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDA0KQorI2RlZmluZQlTVEFSVCAgICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDA4KQorI2RlZmluZQlQT1JUICAgICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDBDKQorI2RlZmluZQlDTU4gICAgICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDEwKQorI2RlZmluZQlHQU1NQSAgICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDE0KQorI2RlZmluZQlJTlRGTEcgICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDE4KQorI2RlZmluZQlJTlRNU0sgICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDFDKQorI2RlZmluZQlNUExGQlVGICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDIwKQorI2RlZmluZQlIREVfTEVGVCAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDI0KQorI2RlZmluZQlWREVfVE9QICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDI4KQorCisjZGVmaW5lCVBYTCAgICAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4MzApCisjZGVmaW5lCUhDWUNMRSAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4MzQpCisjZGVmaW5lCUhTVyAgICAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4MzgpCisjZGVmaW5lCUhERV9TVEFSVCAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4M0MpCisjZGVmaW5lCUhERV9TSVpFICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NDApCisjZGVmaW5lCVZDWUNMRSAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NDQpCisjZGVmaW5lCVZTVyAgICAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NDgpCisjZGVmaW5lCVZERV9TVEFSVCAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NEMpCisjZGVmaW5lCVZERV9TSVpFICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NTApCisjZGVmaW5lCVdBS0VVUCAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NTQpCisjZGVmaW5lCVdTWU5fRExZICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NTgpCisjZGVmaW5lCVJFR0VOQiAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NUMpCisjZGVmaW5lCVZTWU5JRiAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NjApCisjZGVmaW5lCVdSU1RCICAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NjQpCisjZGVmaW5lCVJEU1RCICAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NjgpCisjZGVmaW5lCUFTWV9EQVRBICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NkMpCisjZGVmaW5lCUFTWV9EQVRCICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NzApCisjZGVmaW5lCUFTWV9EQVRDICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NzQpCisjZGVmaW5lCUFTWV9EQVREICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NzgpCisjZGVmaW5lCUFTWV9EQVRFICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4N0MpCisjZGVmaW5lCUFTWV9EQVRGICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4ODApCisjZGVmaW5lCUFTWV9EQVRHICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4ODQpCisjZGVmaW5lCUFTWV9EQVRIICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4ODgpCisjZGVmaW5lCUFTWV9DTURTRVQgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4OEMpCisKKyNkZWZpbmUJTU9OSSAgICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHhCMCkKKworI2RlZmluZQlDdXJyZW50ICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweEMwKQorI2RlZmluZQlMQ0QgICAgICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweEM0KQorI2RlZmluZQlDT01NQU5EICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweEM4KQorCisKKyNkZWZpbmUJU1NJQ1RMICAgICAgKFNQSV9CTE9DS19CQVNFfDB4MDApCisjZGVmaW5lCVNTSVRJTUUgICAgIChTUElfQkxPQ0tfQkFTRXwweDA0KQorI2RlZmluZQlTU0lUWCAgICAgICAoU1BJX0JMT0NLX0JBU0V8MHgwOCkKKyNkZWZpbmUJU1NJUlggICAgICAgKFNQSV9CTE9DS19CQVNFfDB4MEMpCisjZGVmaW5lCVNTSUlOVEMgICAgIChTUElfQkxPQ0tfQkFTRXwweDEwKQorI2RlZmluZQlTU0lJTlRTICAgICAoU1BJX0JMT0NLX0JBU0V8MHgxNCkKKyNkZWZpbmUJU1NJREJHMSAgICAgKFNQSV9CTE9DS19CQVNFfDB4MTgpCisjZGVmaW5lCVNTSURCRzIgICAgIChTUElfQkxPQ0tfQkFTRXwweDFDKQorI2RlZmluZQlTU0lJRCAgICAgICAoU1BJX0JMT0NLX0JBU0V8MHgyMCkKKworCisjZGVmaW5lCUkyQ1NFVFVQCShJMkNfQkxPQ0tfQkFTRXwweDAwKQorI2RlZmluZQlJMkNDVFJMCSAgICAoSTJDX0JMT0NLX0JBU0V8MHgwNCkKKworCisjZGVmaW5lCVRJTUVSMExPQUQJICAoUFdNX0JMT0NLX0JBU0V8MHgwMCkKKyNkZWZpbmUJVElNRVIwVkFMVUUJICAoUFdNX0JMT0NLX0JBU0V8MHgwNCkKKyNkZWZpbmUJVElNRVIwQ09OVFJPTCAoUFdNX0JMT0NLX0JBU0V8MHgwOCkKKyNkZWZpbmUJVElNRVIwSU5UQ0xSICAoUFdNX0JMT0NLX0JBU0V8MHgwQykKKyNkZWZpbmUJVElNRVIwUklTCSAgKFBXTV9CTE9DS19CQVNFfDB4MTApCisjZGVmaW5lCVRJTUVSME1JUwkgIChQV01fQkxPQ0tfQkFTRXwweDE0KQorI2RlZmluZQlUSU1FUjBCR0xPQUQgIChQV01fQkxPQ0tfQkFTRXwweDE4KQorI2RlZmluZQlQV00wT0ZGCSAgICAgIChQV01fQkxPQ0tfQkFTRXwweDFDKQorI2RlZmluZQlUSU1FUjFMT0FECSAgKFBXTV9CTE9DS19CQVNFfDB4MjApCisjZGVmaW5lCVRJTUVSMVZBTFVFCSAgKFBXTV9CTE9DS19CQVNFfDB4MjQpCisjZGVmaW5lCVRJTUVSMUNPTlRST0wgKFBXTV9CTE9DS19CQVNFfDB4MjgpCisjZGVmaW5lCVRJTUVSMUlOVENMUiAgKFBXTV9CTE9DS19CQVNFfDB4MkMpCisjZGVmaW5lCVRJTUVSMVJJUwkgIChQV01fQkxPQ0tfQkFTRXwweDMwKQorI2RlZmluZQlUSU1FUjFNSVMJICAoUFdNX0JMT0NLX0JBU0V8MHgzNCkKKyNkZWZpbmUJVElNRVIxQkdMT0FEICAoUFdNX0JMT0NLX0JBU0V8MHgzOCkKKyNkZWZpbmUJUFdNMU9GRgkgICAgICAoUFdNX0JMT0NLX0JBU0V8MHgzQykKKyNkZWZpbmUJVElNRVJJVENSCSAgKFBXTV9CTE9DS19CQVNFfDB4NjApCisjZGVmaW5lCVRJTUVSSVRPUAkgIChQV01fQkxPQ0tfQkFTRXwweDY0KQorI2RlZmluZQlQV01DUgkgICAgICAoUFdNX0JMT0NLX0JBU0V8MHg2OCkKKyNkZWZpbmUJUFdNSUQJICAgICAgKFBXTV9CTE9DS19CQVNFfDB4NkMpCisjZGVmaW5lCVBXTU1PTgkgICAgICAoUFdNX0JMT0NLX0JBU0V8MHg3MCkKKworCisjZGVmaW5lCUdQSU9EQVRBICAgIChHUElPX0JMT0NLX0JBU0V8MHgwMCkKKyNkZWZpbmUJR1BJT0RJUiAgICAgKEdQSU9fQkxPQ0tfQkFTRXwweDA0KQorI2RlZmluZQlHUElPSVMgICAgICAoR1BJT19CTE9DS19CQVNFfDB4MDgpCisjZGVmaW5lCUdQSU9JQkUgICAgIChHUElPX0JMT0NLX0JBU0V8MHgwQykKKyNkZWZpbmUJR1BJT0lFViAgICAgKEdQSU9fQkxPQ0tfQkFTRXwweDEwKQorI2RlZmluZQlHUElPSUUgICAgICAoR1BJT19CTE9DS19CQVNFfDB4MTQpCisjZGVmaW5lCUdQSU9SSVMgICAgIChHUElPX0JMT0NLX0JBU0V8MHgxOCkKKyNkZWZpbmUJR1BJT01JUyAgICAgKEdQSU9fQkxPQ0tfQkFTRXwweDFDKQorI2RlZmluZQlHUElPSUMgICAgICAoR1BJT19CTE9DS19CQVNFfDB4MjApCisjZGVmaW5lCUdQSU9PTVMgICAgIChHUElPX0JMT0NLX0JBU0V8MHgyNCkKKyNkZWZpbmUJR1BJT1BDICAgICAgKEdQSU9fQkxPQ0tfQkFTRXwweDI4KQorCisjZGVmaW5lCUdQSU9JRCAgICAgIChHUElPX0JMT0NLX0JBU0V8MHgzMCkKKworCisjZGVmaW5lCVdLUkVRICAgICAgIChTWVNURU1fQkxPQ0sxX0JBU0V8MHgwMCkKKyNkZWZpbmUJQ0xLRU5CICAgICAgKFNZU1RFTV9CTE9DSzFfQkFTRXwweDA0KQorI2RlZmluZQlEUkFNUFdSICAgICAoU1lTVEVNX0JMT0NLMV9CQVNFfDB4MDgpCisjZGVmaW5lCUlOVE1BU0sgICAgIChTWVNURU1fQkxPQ0sxX0JBU0V8MHgwQykKKyNkZWZpbmUJR1BJT1NFTCAgICAgKFNZU1RFTV9CTE9DSzJfQkFTRXwweDAwKQorCitzdHJ1Y3QgaW5pdF90YWJsZSB7CisgICAgdW5zaWduZWQgaW50IHJlZzsKKyAgICB1bnNpZ25lZCBpbnQgdmFsOworfTsKKworc3RhdGljIHN0cnVjdCBpbml0X3RhYmxlIHRvc2hpYmFfNDgweDY0MF9pbml0X3RhYmxlW10gPSB7CisJeyBEUFNFVDAsICAgICAgICAgICAgICAgMHg0QkVDMDA2NiB9LCAgLy8gIyBNREMuRFBTRVQwICAjIFNldHVwIERQTEwgcGFyYW1ldGVycworCXsgRFBTRVQxLCAgICAgICAgICAgICAgIDB4MDAwMDAxMTMgfSwgIC8vICAgIyBNREMuRFBTRVQxICAKKwl7IERQU1VTLCAgICAgICAgICAgICAgICAweDAwMDAwMDAwIH0sICAvLyAgICMgTURDLkRQU1VTICAjIFNldCBEUExMIG9zY2lsbGF0aW9uIGVuYWJsZQorCXsgRFBSVU4sICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgfSwgIC8vICAgIyBNREMuRFBSVU4gICMgUmVsZWFzZSByZXNldCBzaWduYWwgZm9yIERQTEwKKwl7IDAsICAgICAgICAgICAgICAgICAgICAxNCAgICAgICAgIH0sICAvLyB3YWl0X21zKDE0KTsKKwl7IFNZU0NLRU5BLCAgICAgICAgICAgICAweDAwMDAwMDAxIH0sICAvLyAgICMgTURDLlNZU0NLRU5BICAjIEVuYWJsZSBzeXN0ZW0gY2xvY2sgb3V0cHV0CisJeyBDTEtFTkIsICAgICAgICAgICAgICAgMHgwMDAwMDBFRiB9LCAgLy8gICAjIFNZUy5DTEtFTkIgICMgRW5hYmxlIGNsb2NrcyBmb3IgZWFjaCBtb2R1bGUgKHdpdGhvdXQgRENMSyAsIGkyY0NMSykKKwl7IEdQSU9fQkxPQ0tfQkFTRSwgICAgICAweDAzRkYwMDAwIH0sICAvLyAgICMgR1BJIC5HUElPREFUQSAgIyBHUElPMihSRVNFVF9MQ0RfTikgc2V0IHRvIDAgLCBHUElPMyhlRFJBTV9Qb3dlcikgc2V0IHRvIDAKKwl7IEdQSU9ESVIsICAgICAgICAgICAgICAweDAwMDAwMjREIH0sICAvLyAgICMgR1BJIC5HUElPRElSICAjIFNlbGVjdCBkaXJlY3Rpb24gb2YgR1BJTyBwb3J0ICgwLDIsMyw2LDkgb3V0cHV0KQorCXsgU1lTVEVNX0JMT0NLMl9CQVNFLCAgIDB4MDAwMDAxNzMgfSwgIC8vICAgIyBTWVMuR1BJT1NFTCAgIyBHUElPIHBvcnQgbXVsdGlwbGV4aW5nIGNvbnRyb2wKKwl7IEdQSU9QQywgICAgICAgICAgICAgICAweDAzQzMwMEMwIH0sICAvLyAgICMgR1BJIC5HUElPUEMgICMgR1BJTzIsMyBQRCBjdXQKKwl7IFNZU1RFTV9CTE9DSzFfQkFTRSwgICAweDAwMDAwMDAwIH0sICAvLyAgICMgU1lTLldLUkVRICAjIFdha2UtdXAgcmVxdWVzdCBldmVudCBpcyBWU1lOQyBhbGlnbm1lbnQKKwl7IEdQSU9JUywgICAgICAgICAgICAgICAweDAwMDAwMDAwIH0sICAvLyAgICMgR1BJIC5HUElPSVMgICMgU2V0IGludGVycnVwdCBzZW5zZSBvZiBHUElPCisJeyBHUElPSUVWLCAgICAgICAgICAgICAgMHgwMDAwMDAwMSB9LCAgLy8gICAjIEdQSSAuR1BJT0lFViAgIyBTZXQgaW50ZXJydXB0IGV2ZW50IG9mIEdQSU8KKwl7IEdQSU9JQywgICAgICAgICAgICAgICAweDAwMDAwM0ZGIH0sICAvLyAgICMgR1BJIC5HUElPSUMgICMgR1BJTyBpbnRlcnJ1cHQgY2xlYXIKKwl7IEdQSU9fQkxPQ0tfQkFTRSwgICAgICAweDAwMDYwMDA2IH0sICAvLyAgICMgR1BJIC5HUElPREFUQSAgIyBSZWxlYXNlIExDREQgcmVzZXQKKwl7IEdQSU9fQkxPQ0tfQkFTRSwgICAgICAweDAwMDgwMDA4IH0sICAvLyAgICMgR1BJIC5HUElPREFUQSAgIyBlRFJBTSBWRCBzdXBwbHkKKwl7IEdQSU9fQkxPQ0tfQkFTRSwgICAgICAweDAyMDAwMjAwIH0sICAvLyAgICMgR1BJIC5HUElPREFUQSAgIyBURVNUIExFRCBPTgorCXsgRFJBTVBXUiwgICAgICAgICAgICAgIDB4MDAwMDAwMDEgfSwgIC8vICAgIyBTWVMuRFJBTVBXUiAgIyBlRFJBTSBwb3dlciB1cAorCXsgVElNRVIwQ09OVFJPTCwgICAgICAgIDB4MDAwMDAwNjAgfSwgIC8vICAgIyBQV00uVGltZXIwQ29udHJvbCAgIyBQV00wIG91dHB1dCBzdG9wCisJeyBQV01fQkxPQ0tfQkFTRSwgICAgICAgMHgwMDAwMTM4OCB9LCAgLy8gICAjIFBXTS5UaW1lcjBMb2FkICAjIFBXTTAgMTBrSHogLCBEdXR5IDk5IChCYWNrTGlnaHQgT0ZGKQorCS8ve1BXTTBPRkYsICAgICAgICAgICAgICAgMHgwMDAwMDAwMSB9LCAgLy8gICAjIFBXTS5QV00wT0ZGICAKKyNpZiAwCisJeyBQV00wT0ZGLCAgICAgICAgICAgICAgMHgwMDAwMTM4NyB9LCAvLyBTVVJGIDEwMCUgYmFja2xpZ2h0CisJeyBQV00wT0ZGLCAgICAgICAgICAgICAgMHgwMDAwMDAwMCB9LCAvLyBGRkEgMTAwJSBiYWNrbGlnaHQKKyNlbmRpZgorCXsgUFdNME9GRiwgICAgICAgICAgICAgIDB4MDAwMDA5QzMgfSwgLy8gNTAlIEJMCisJeyBUSU1FUjFDT05UUk9MLCAgICAgICAgMHgwMDAwMDA2MCB9LCAgLy8gICAjIFBXTS5UaW1lcjFDb250cm9sICAjIFBXTTEgb3V0cHV0IHN0b3AKKwl7IFRJTUVSMUxPQUQsICAgICAgICAgICAweDAwMDAxMzg4IH0sICAvLyAgICMgUFdNLlRpbWVyMUxvYWQgICMgUFdNMSAxMGtIeiAsIER1dHkgOTkgKEJhY2tMaWdodCBPRkYpCisJLy97UFdNMU9GRiwgICAgICAgICAgICAgICAweDAwMDAwMDAxIH0sICAvLyAgICMgUFdNLlBXTTFPRkYgIAorCXsgUFdNMU9GRiwgICAgICAgICAgICAgIDB4MDAwMDEzODcgfSwKKwl7IFRJTUVSMENPTlRST0wsICAgICAgICAweDAwMDAwMEUwIH0sICAvLyAgICMgUFdNLlRpbWVyMENvbnRyb2wgICMgUFdNMCBvdXRwdXQgc3RhcnQKKwl7IFRJTUVSMUNPTlRST0wsICAgICAgICAweDAwMDAwMEUwIH0sICAvLyAgICMgUFdNLlRpbWVyMUNvbnRyb2wgICMgUFdNMSBvdXRwdXQgc3RhcnQKKwl7IFBXTUNSLCAgICAgICAgICAgICAgICAweDAwMDAwMDAzIH0sICAvLyAgICMgUFdNLlBXTUNSICAjIFBXTSBvdXRwdXQgZW5hYmxlCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMSk7ICAgICAgICAKKwl7IFNQSV9CTE9DS19CQVNFLCAgICAgICAweDAwMDAwNzk5IH0sICAvLyAgICMgU1BJIC5TU0lDVEwgICMgU1BJIG9wZXJhdGlvbiBtb2RlIHNldHRpbmcKKwl7IFNTSVRJTUUsICAgICAgICAgICAgICAweDAwMDAwMTAwIH0sICAvLyAgICMgU1BJIC5TU0lUSU1FICAjIFNQSSBzZXJpYWwgaW50ZXJmYWNlIHRpbWluZyBzZXR0aW5nCisJeyBTUElfQkxPQ0tfQkFTRSwgICAgICAgMHgwMDAwMDc5YiB9LCAgLy8gICAjIFNQSSAuU1NJQ1RMICAjIFNldCBTUEkgYWN0aXZlIG1vZGUKKworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwgIC8vICAgIyBTUEkuU1NJVFggICMgUmVsZWFzZSBmcm9tIERlZXAgU3RhbmJ5IG1vZGUKKwl7IDAsICAgICAgICAgICAgICAgICAgICAxICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygxKTsKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMDAwIH0sICAvLyAgICMgU1BJLlNTSVRYICAKKwl7IDAsICAgICAgICAgICAgICAgICAgICAxICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygxKTsKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMDAwIH0sICAvLyAgICMgU1BJLlNTSVRYICAKKwl7IDAsICAgICAgICAgICAgICAgICAgICAxICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygxKTsKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEJBIH0sICAvLyAgICMgU1BJLlNTSVRYICAgICAgICAgICpOT1RFIDEgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMTEgfSwgIC8vICAgICAjIERpc3BsYXkgbW9kZSBzZXR1cCgxKSA6IE5vcm1hbHkgQmxhY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMDM2IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwMCB9LCAgLy8gICAgICMgTWVtb3J5IGFjY2VzcyBjb250cm9sCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgIC8vICAgICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwQkIgfSwgIC8vICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwMCB9LCAgLy8gICAjIERpc3BsYXkgbW9kZSBzZXR1cCgyKQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwM0EgfSwgIC8vICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDE2MCB9LCAgLy8gICAjIFJHQiBJbnRlcmZhY2UgZGF0YSBmb3JtYXQKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBCRiB9LCAgLy8gICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTAwIH0sICAvLyAgICMgRHJpdm5pZyBtZXRob2QKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEIxIH0sICAvLyAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxNUQgfSwgIC8vICAgIyBCb29zdGVyIG9wZXJhdGlvbiBzZXR1cAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEIyIH0sICAvLyAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMzMgfSwgIC8vICAgIyBCb29zdGVyIG1vZGUgc2V0dXAKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEIzIH0sICAvLyAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMjIgfSwgIC8vICAgICAjIEJvb3N0ZXIgZnJlcXVlbmNpZXMgc2V0dXAKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBCNCB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMDIgfSwgIC8vICAgICAjIE9QLWFtcCBjYXBhYmlsaXR5L1N5c3RlbSBjbG9jayBmcmVxLiBkaXZpc2lvbiBzZXR1cAorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwQjUgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTFGIH0sICAvLyAgICAgIyBWQ1MgVm9sdGFnZSBhZGp1c3RtZW50ICAoMUMtPjFGIGZvciBSZXYgMikKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBCNiB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMjggfSwgIC8vICAgICAjIFZDT00gVm9sdGFnZSBhZGp1c3RtZW50CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBCNyB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMDMgfSwgIC8vICAgICAjIENvbmZpZ3VyZSBhbiBleHRlcm5hbCBkaXNwbGF5IHNpZ25hbAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEI5IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEyMCB9LCAgLy8gICAgICMgRENDSy9EQ0VWIHRpbWluZyBzZXR1cAorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwQkQgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTAyIH0sICAvLyAgICAgIyBBU1cgc2lnbmFsIGNvbnRyb2wKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBCRSB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAgfSwgIC8vICAgICAjIER1bW15IGRpc3BsYXkgKHdoaXRlL2JsYWNrKSBjb3VudCBzZXR1cCBmb3IgUVVBRCBEYXRhIG9wZXJhdGlvbgorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwQzAgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTExIH0sICAvLyAgICAgIyB3YWl0X21zKC1vdXQgRlIgY291bnQgc2V0dXAgKEEpCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwQzEgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTExIH0sICAvLyAgICAgIyB3YWl0X21zKC1vdXQgRlIgY291bnQgc2V0dXAgKEIpCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBDMiB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMTEgfSwgIC8vICAgICAjIHdhaXRfbXMoLW91dCBGUiBjb3VudCBzZXR1cCAoQykKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBDMyB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAxMEEgfSwgIC8vICAgICAjIHdhaXRfbXMoLWluIGxpbmUgY2xvY2sgY291bnQgc2V0dXAgKEQpCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwQSB9LCAgLy8gICAgIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEM0IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDE2MCB9LCAgLy8gICAgICMgU2VlcC1pbiBsaW5lIGNsb2NrIGNvdW50IHNldHVwIChFKQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxNjAgfSwgIC8vICAgICAKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBDNSB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAxNjAgfSwgIC8vICAgICAjIHdhaXRfbXMoLWluIGxpbmUgY2xvY2sgY291bnQgc2V0dXAgKEYpCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDE2MCB9LCAgLy8gICAgIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEM2IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDE2MCB9LCAgLy8gICAgICMgd2FpdF9tcygtaW4gbGluZSBjbG9jayBzZXR1cCAoRykKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTYwIH0sICAvLyAgICAgCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwQzcgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMTMzIH0sICAvLyAgICAgIyBHYW1tYSAxIGZpbmUgdHVuaW5nICgxKQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxNDMgfSwgIC8vICAgICAKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBDOCB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxNDQgfSwgIC8vICAgICAjIEdhbW1hIDEgZmluZSB0dW5pbmcgKDIpCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBDOSB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMzMgfSwgIC8vICAgICAjIEdhbW1hIDEgaW5jbGluYXRpb24gYWRqdXN0bWVudAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMENBIH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwMCB9LCAgLy8gICAgICMgR2FtbWEgMSBibHVlIG9mZnNldCBhZGp1c3RtZW50CisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwRUMgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMTAyIH0sICAvLyAgICAgIyBUb3RhbCBudW1iZXIgb2YgaG9yaXpvbnRhbCBjbG9jayBjeWNsZXMgKDEpIFtQQ0xLIFN5bmMuIFZHQSBzZXR0aW5nXQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMTggfSwgIC8vICAgICAKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBDRiB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMDEgfSwgIC8vICAgICAjIEJsYW5raW5nIHBlcmlvZCBjb250cm9sICgxKSBbUENMSyBTeW5jLiBUYWJsZTEgZm9yIFZHQV0KKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBEMCB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAxMTAgfSwgIC8vICAgICAjIEJsYW5raW5nIHBlcmlvZCBjb250cm9sICgyKSBbUENMSyBTeW5jLiBUYWJsZTEgZm9yIFZHQV0KKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTA0IH0sICAvLyAgICAgCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwRDEgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTAxIH0sICAvLyAgICAgIyBDS1YgdGltaW5nIGNvbnRyb2wgb24vb2ZmIFtQQ0xLIFN5bmMuIFRhYmxlMSBmb3IgVkdBXQorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEQyIH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDEwMCB9LCAgLy8gICAgICMgQ0tWMSwyIHRpbWluZyBjb250cm9sIFtQQ0xLIFN5bmMuIFRhYmxlMSBmb3IgVkdBXQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxM0EgfSwgIC8vICAgICAKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBEMyB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAxMDAgfSwgIC8vICAgICAjIE9FViB0aW1pbmcgY29udHJvbCBbUENMSyBTeW5jLiBUYWJsZTEgZm9yIFZHQV0KKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTNBIH0sICAvLyAgICAgCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwRDQgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMTI0IH0sICAvLyAgICAgIyBBU1cgdGltaW5nIGNvbnRyb2wgKDEpIFtQQ0xLIFN5bmMuIFRhYmxlMSBmb3IgVkdBXQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxNkUgfSwgIC8vICAgICAKKwl7IDAsICAgICAgICAgICAgICAgICAgICAxICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygxKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBENSB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMjQgfSwgIC8vICAgICAjIEFTVyB0aW1pbmcgY29udHJvbCAoMikgW1BDTEsgU3luYy4gVGFibGUxIGZvciBWR0FdCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwRUQgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMTAxIH0sICAvLyAgICAgIyBUb3RhbCBudW1iZXIgb2YgaG9yaXpvbnRhbCBjbG9jayBjeWNsZXMgKDIpIFtQQ0xLIFN5bmMuIFRhYmxlMSBmb3IgUVZHQSBdCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwQSB9LCAgLy8gICAgIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEQ2IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwMSB9LCAgLy8gICAgICMgQmxhbmtpbmcgcGVyaW9kIGNvbnRyb2wgKDEpIFtQQ0xLIFN5bmMuIFRhYmxlMiBmb3IgUVZHQV0KKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBENyB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAxMTAgfSwgIC8vICAgICAjIEJsYW5raW5nIHBlcmlvZCBjb250cm9sICgyKSBbUENMSyBTeW5jLiBUYWJsZTIgZm9yIFFWR0FdCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwQSB9LCAgLy8gICAgIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEQ4IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwMSB9LCAgLy8gICAgICMgQ0tWIHRpbWluZyBjb250cm9sIG9uL29mZiBbUENMSyBTeW5jLiBUYWJsZTIgZm9yIFFWR0FdCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwRDkgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMTAwIH0sICAvLyAgICAgIyBDS1YxLDIgdGltaW5nIGNvbnRyb2wgW1BDTEsgU3luYy4gVGFibGUyIGZvciBRVkdBXQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMTQgfSwgIC8vICAgICAKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBERSB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAxMDAgfSwgIC8vICAgICAjIE9FViB0aW1pbmcgY29udHJvbCBbUENMSyBTeW5jLiBUYWJsZTIgZm9yIFFWR0FdCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDExNCB9LCAgLy8gICAgIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMERGIH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDExMiB9LCAgLy8gICAgICMgQVNXIHRpbWluZyBjb250cm9sICgxKSBbUENMSyBTeW5jLiBUYWJsZTIgZm9yIFFWR0FdCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEzRiB9LCAgLy8gICAgIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEUwIH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwQiB9LCAgLy8gICAgICMgQVNXIHRpbWluZyBjb250cm9sICgyKSBbUENMSyBTeW5jLiBUYWJsZTIgZm9yIFFWR0FdCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBFMiB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMDEgfSwgIC8vICAgICAjIEJ1aWx0LWluIG9zY2lsbGF0b3IgZnJlcXVlbmN5IGRpdmlzaW9uIHNldHVwIFtGcmVxdWVuY3kgZGl2aXNpb24gcmF0aW8gOiAyICg2MEhxKQorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEUzIH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEzNiB9LCAgLy8gICAgICMgQnVpbHQtaW4gb3NjaWxsYXRvciBjbG9jayBjb3VudCBzZXR1cAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEU0IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDEwMCB9LCAgLy8gICAgICMgQ0tWIHRpbWluZyBjb250cm9sIGZvciB1c2luZyBidWlsZC1pbiBvc2MKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTAzIH0sICAvLyAgICAgCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwRTUgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMTAyIH0sICAvLyAgICAgIyBPRVYgdGltaW5nIGNvbnRyb2wgZm9yIHVzaW5nIGJ1aWxkLWluIG9zYworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMDQgfSwgIC8vICAgICAKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBFNiB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMDMgfSwgIC8vICAgICAjIERDRVYgdGltaW5nIGNvbnRyb2wgZm9yIHVzaW5nIGJ1aWxkLWluIG9zYworCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEU3IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDEwNCB9LCAgLy8gICAgICMgQVNXIHRpbWluZyBzZXR1cCBmb3IgdXNpbmcgYnVpbGQtaW4gb3NjKDEpCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwQSB9LCAgLy8gICAgIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEU4IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwNCB9LCAgLy8gICAgICMgQVNXIHRpbWluZyBzZXR1cCBmb3IgdXNpbmcgYnVpbGQtaW4gb3NjKDIpCisgICAgICAgICAgICAKKyAgICAgICAgICAgIAorCXsgQ0xLRU5CLCAgICAgICAgICAgICAgIDB4MDAwMDAxRUYgfSwgIC8vICAgIyBTWVMuQ0xLRU5CICAjIERDTEsgZW5hYmxlCisJeyBTVEFSVCwgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCB9LCAgLy8gICAjIExDRC5TVEFSVCAgIyBMQ0RDIHdhaXRfbXMoIG1vZGUKKwl7IFdSU1RCLCAgICAgICAgICAgICAgICAweDAwMDAwMDNGIH0sICAvLyAgICMgTENELldSU1RCICAjIHdyaXRlX2NsaWVudF9yZWcoIHN0cm9iZQorCXsgUkRTVEIsICAgICAgICAgICAgICAgIDB4MDAwMDA0MzIgfSwgIC8vICAgIyBMQ0QuUkRTVEIgICMgUmVhZCBzdHJvYmUKKwl7IFBPUlRfRU5CLCAgICAgICAgICAgICAweDAwMDAwMDAyIH0sICAvLyAgICMgTENELlBPUlRfRU5CICAjIEFzeW5jaHJvbm91cyBwb3J0IGVuYWJsZQorCXsgVlNZTklGLCAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwgIC8vICAgIyBMQ0QuVlNZTkNJRiAgIyBWU1lOQyBJL0YgbW9kZSBzZXQKKwl7IEFTWV9EQVRBLCAgICAgICAgICAgICAweDgwMDAwMDAwIH0sICAvLyAgICMgTENELkFTWV9EQVR4ICAjIEluZGV4IHNldHRpbmcgb2YgU1VCIExDREQKKwl7IEFTWV9EQVRCLCAgICAgICAgICAgICAweDAwMDAwMDAxIH0sICAvLyAgICAgIyBPc2NpbGxhdG9yIHN0YXJ0CisJeyBBU1lfQ01EU0VULCAgICAgICAgICAgMHgwMDAwMDAwNSB9LCAgLy8gICAjIExDRC5BU1lfQ01EU0VUICAjIERpcmVjdCBjb21tYW5kIHRyYW5zZmVyIGVuYWJsZQorCXsgQVNZX0NNRFNFVCwgICAgICAgICAgIDB4MDAwMDAwMDQgfSwgIC8vICAgIyBMQ0QuQVNZX0NNRFNFVCAgIyBEaXJlY3QgY29tbWFuZCB0cmFuc2ZlciBkaXNhYmxlCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMTAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMTApOworCXsgQVNZX0RBVEEsICAgICAgICAgICAgIDB4ODAwMDAwMDAgfSwgIC8vICAgIyBMQ0QuQVNZX0RBVHggICMgRFVNTVkgd3JpdGVfY2xpZW50X3JlZyiBQCpOT1RFMgorCXsgQVNZX0RBVEIsICAgICAgICAgICAgIDB4ODAwMDAwMDAgfSwgIC8vICAgICAKKwl7IEFTWV9EQVRDLCAgICAgICAgICAgICAweDgwMDAwMDAwIH0sICAvLyAgICAgCisJeyBBU1lfREFURCwgICAgICAgICAgICAgMHg4MDAwMDAwMCB9LCAgLy8gICAgIAorCXsgQVNZX0NNRFNFVCwgICAgICAgICAgIDB4MDAwMDAwMDkgfSwgIC8vICAgIyBMQ0QuQVNZX0NNRFNFVCAgCisJeyBBU1lfQ01EU0VULCAgICAgICAgICAgMHgwMDAwMDAwOCB9LCAgLy8gICAjIExDRC5BU1lfQ01EU0VUICAKKwl7IEFTWV9EQVRBLCAgICAgICAgICAgICAweDgwMDAwMDA3IH0sICAvLyAgICMgTENELkFTWV9EQVR4ICAjIEluZGV4IHNldHRpbmcgb2YgU1VCIExDREQKKwl7IEFTWV9EQVRCLCAgICAgICAgICAgICAweDAwMDA0MDA1IH0sICAvLyAgICAgIyBMQ0QgZHJpdmVyIGNvbnRyb2wKKwl7IEFTWV9DTURTRVQsICAgICAgICAgICAweDAwMDAwMDA1IH0sICAvLyAgICMgTENELkFTWV9DTURTRVQgICMgRGlyZWN0IGNvbW1hbmQgdHJhbnNmZXIgZW5hYmxlCisJeyBBU1lfQ01EU0VULCAgICAgICAgICAgMHgwMDAwMDAwNCB9LCAgLy8gICAjIExDRC5BU1lfQ01EU0VUICAjIERpcmVjdCBjb21tYW5kIHRyYW5zZmVyIGRpc2FibGUKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyMCAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyMCk7CisJeyBBU1lfREFUQSwgICAgICAgICAgICAgMHg4MDAwMDA1OSB9LCAgLy8gICAjIExDRC5BU1lfREFUeCAgIyBJbmRleCBzZXR0aW5nIG9mIFNVQiBMQ0RECisJeyBBU1lfREFUQiwgICAgICAgICAgICAgMHgwMDAwMDAwMCB9LCAgLy8gICAgICMgTFRQUyBJL0YgY29udHJvbAorCXsgQVNZX0NNRFNFVCwgICAgICAgICAgIDB4MDAwMDAwMDUgfSwgIC8vICAgIyBMQ0QuQVNZX0NNRFNFVCAgIyBEaXJlY3QgY29tbWFuZCB0cmFuc2ZlciBlbmFibGUKKwl7IEFTWV9DTURTRVQsICAgICAgICAgICAweDAwMDAwMDA0IH0sICAvLyAgICMgTENELkFTWV9DTURTRVQgICMgRGlyZWN0IGNvbW1hbmQgdHJhbnNmZXIgZGlzYWJsZQorCisJeyBWU1lOSUYsICAgICAgICAgICAgICAgMHgwMDAwMDAwMSB9LCAgLy8gICAjIExDRC5WU1lOQ0lGICAjIFZTWU5DIEkvRiBtb2RlIE9GRgorCXsgUE9SVF9FTkIsICAgICAgICAgICAgIDB4MDAwMDAwMDEgfSwgIC8vICAgIyBMQ0QuUE9SVF9FTkIgICMgU1lOQyBJL0YgIG91dHB1dCBzZWxlY3QKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwl7IFZTWU5JRiwgICAgICAgICAgICAgICAweDAwMDAwMDAxIH0sICAvLyBWU1lOQyBJL0YgbW9kZSBPRkYKKwl7IFBPUlRfRU5CLCAgICAgICAgICAgICAweDAwMDAwMDAxIH0sICAvLyBTWU5DIEkvRiBtb2RlIE9OCisKKwl7IEJJVE1BUDEsICAgICAgICAgICAgICAweDAxRTAwMEYwIH0sICAvLyBNREMuQklUTUFQMiAgKTsgLy8gU2V0dXAgb2YgUElUQ0ggc2l6ZSB0byBGcmFtZSBidWZmZXIxCisJeyBCSVRNQVAyLCAgICAgICAgICAgICAgMHgwMUUwMDBGMCB9LCAgLy8gTURDLkJJVE1BUDMgICk7IC8vIFNldHVwIG9mIFBJVENIIHNpemUgdG8gRnJhbWUgYnVmZmVyMgorCXsgQklUTUFQMywgICAgICAgICAgICAgIDB4MDFFMDAwRjAgfSwgIC8vIE1EQy5CSVRNQVA0ICApOyAvLyBTZXR1cCBvZiBQSVRDSCBzaXplIHRvIEZyYW1lIGJ1ZmZlcjMKKwl7IEJJVE1BUDQsICAgICAgICAgICAgICAweDAwREMwMEIwIH0sICAvLyBNREMuQklUTUFQNSAgKTsgLy8gU2V0dXAgb2YgUElUQ0ggc2l6ZSB0byBGcmFtZSBidWZmZXI0CisJeyBDTEtFTkIsICAgICAgICAgICAgICAgMHgwMDAwMDFFRiB9LCAgLy8gU1lTLkNMS0VOQiAgKTsgLy8gRENMSyBzdXBwbHkKKwl7IFBPUlRfRU5CLCAgICAgICAgICAgICAweDAwMDAwMDAxIH0sICAvLyBMQ0QuUE9SVF9FTkIgICk7IC8vIFN5bmNocm9ub3VzIHBvcnQgZW5hYmxlCisJeyBQT1JULCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNCB9LCAgLy8gTENELlBPUlQgICk7IC8vIFBvbGFyaXR5IG9mIERFIGlzIHNldCB0byBoaWdoIGFjdGl2ZQorCXsgUFhMLCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIgfSwgIC8vIExDRC5QWEwgICk7IC8vIEFDVE1PREUgMiBzZXQgKDFzdCBmcmFtZSBibGFjayBkYXRhIG91dHB1dCkKKwl7IE1QTEZCVUYsICAgICAgICAgICAgICAweDAwMDAwMDAwIH0sICAvLyBMQ0QuTVBMRkJVRiAgKTsgLy8gU2VsZWN0IHRoZSByZWFkaW5nIGJ1ZmZlcgorCXsgSENZQ0xFLCAgICAgICAgICAgICAgIDB4MDAwMDAxMGIgfSwgIC8vIExDRC5IQ1lDTEUgICk7IC8vIFNldHVwIHRvIFZHQSBzaXplCisJeyBIU1csICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMyB9LCAgLy8gTENELkhTVyAgCisJeyBIREVfU1RBUlQsICAgICAgICAgICAgMHgwMDAwMDAwNyB9LCAgLy8gTENELkhERV9TVEFSVCAgCisJeyBIREVfU0laRSwgICAgICAgICAgICAgMHgwMDAwMDBFRiB9LCAgLy8gTENELkhERV9TSVpFICAKKwl7IFZDWUNMRSwgICAgICAgICAgICAgICAweDAwMDAwMjg1IH0sICAvLyBMQ0QuVkNZQ0xFICAKKwl7IFZTVywgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIH0sICAvLyBMQ0QuVlNXICAKKwl7IFZERV9TVEFSVCwgICAgICAgICAgICAweDAwMDAwMDAzIH0sICAvLyBMQ0QuVkRFX1NUQVJUICAKKwl7IFZERV9TSVpFLCAgICAgICAgICAgICAweDAwMDAwMjdGIH0sICAvLyBMQ0QuVkRFX1NJWkUgIAorCisJeyBTVEFSVCwgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSB9LCAgLy8gTENELlNUQVJUICApOyAvLyBMQ0RDIC0gUGl4ZWwgZGF0YSB0cmFuc2ZlciBzdGFydAorCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMTAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoIDEwICApOworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwQkMgfSwgIC8vIFNQSS5TU0lUWCAgKTsgLy8gQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxODAgfSwgIC8vIERpc3BsYXkgZGF0YSBzZXR1cAorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwM0IgfSwgIC8vIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTAwIH0sICAvLyBRdWFkIERhdGEgY29uZmlndXJhdGlvbiAtIFZHQQorCXsgMCwgICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgfSwgIC8vICB3YWl0X21zKCAxICAgICAgICAgICk7IC8vICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBCMCB9LCAgLy8gQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMTYgfSwgIC8vIFBvd2VyIHN1cHBseSBPTi9PRkYgY29udHJvbAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgfSwgIC8vICB3YWl0X21zKCAxICAgICAgICAgICk7IC8vICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBCOCB9LCAgLy8gQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAxRkYgfSwgIC8vIE91dHB1dCBjb250cm9sCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDFGNSB9LCAgIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgfSwgIC8vICB3YWl0X21zKCAxKTsgICAgICAgICAvLyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEgfSwgIC8vIHdhaXRfbXMoLW91dCAoQ29tbWFuZCBvbmx5KQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAwMjkgfSwgIC8vIERpc3BsYXkgb24gKENvbW1hbmQgb25seSkKKworCXsgU1lTVEVNX0JMT0NLMV9CQVNFLCAgIDB4MDAwMDAwMDIgfSwgIC8vICAgICMgd2FrZVJFUSAtPiBHUElPCisKKwl7IDAsIDAgfQorfTsKKworc3RhdGljIHZvaWQgX3BhbmVsX2luaXQoc3RydWN0IGluaXRfdGFibGUgKmluaXRfdGFibGUpCit7CisJdW5zaWduZWQgbjsKKworCWRwcmludGYoSU5GTywgInBhbmVsX2luaXQoKVxuIik7CisKKwluID0gMDsKKwl3aGlsZSAoaW5pdF90YWJsZVtuXS5yZWcgIT0gMCB8fCBpbml0X3RhYmxlW25dLnZhbCAhPSAwKSB7CisJCWlmIChpbml0X3RhYmxlW25dLnJlZyAhPSAwKQorCQkJbWRkaV9yZW1vdGVfd3JpdGUoaW5pdF90YWJsZVtuXS52YWwsIGluaXRfdGFibGVbbl0ucmVnKTsKKwkJZWxzZQorCQkJdGhyZWFkX3NsZWVwKGluaXRfdGFibGVbbl0udmFsKTsvL21kZWxheShpbml0X3RhYmxlW25dLnZhbCk7CisJCW4rKzsKKwl9CisKKwlkcHJpbnRmKElORk8sICJwYW5lbF9pbml0KCkgZG9uZVxuIik7Cit9CisKK3ZvaWQgcGFuZWxfaW5pdChzdHJ1Y3QgbWRkaV9jbGllbnRfY2FwcyAqY2xpZW50X2NhcHMpCit7CisJc3dpdGNoKGNsaWVudF9jYXBzLT5tYW51ZmFjdHVyZXJfbmFtZSkgeworCWNhc2UgMHhkMjYzOiAvLyBUb3NoaWJhCisJCWRwcmludGYoSU5GTywgIkZvdW5kIFRvc2hpYmEgcGFuZWxcbiIpOworCQlfcGFuZWxfaW5pdCh0b3NoaWJhXzQ4MHg2NDBfaW5pdF90YWJsZSk7CisJCWJyZWFrOworCWNhc2UgMHg0NDc0OiAvLz8/CisJCWlmIChjbGllbnRfY2Fwcy0+cHJvZHVjdF9jb2RlID09IDB4YzA2NSkKKwkJCWRwcmludGYoSU5GTywgIkZvdW5kIFdWR0EgcGFuZWxcbiIpOworCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgcGFuZWxfcG93ZXJvbih2b2lkKQoreworCWdwaW9fc2V0KDg4LCAwKTsKKwlncGlvX2NvbmZpZyg4OCwgR1BJT19PVVRQVVQpOworCXRocmVhZF9zbGVlcCgxKTsgLy91ZGVsYXkoMTApOworCWdwaW9fc2V0KDg4LCAxKTsKKwl0aHJlYWRfc2xlZXAoMTApOyAvL21kZWxheSgxMCk7CisKKwkvL21kZWxheSgxMDAwKTsgLy8gdW5jb21tZW50IGZvciBzZWNvbmQgc3RhZ2UgYm9vdAorfQorCit2b2lkIHBhbmVsX2JhY2tsaWdodChpbnQgb24pCit7fQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L21zbTc2MjVfZmZhL3J1bGVzLm1rIGIvdGFyZ2V0L21zbTc2MjVfZmZhL3J1bGVzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM0NzNkMDYKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvbXNtNzYyNV9mZmEvcnVsZXMubWsKQEAgLTAsMCArMSwzOSBAQAorTE9DQUxfRElSIDo9ICQoR0VUX0xPQ0FMX0RJUikKKworSU5DTFVERVMgKz0gLUkkKExPQ0FMX0RJUikvaW5jbHVkZSAtSSQoTEtfVE9QX0RJUikvcGxhdGZvcm0vbXNtX3NoYXJlZAorCitQTEFURk9STSA6PSBtc203aworCitNRU1CQVNFIDo9IDB4MDAwMDAwMDAgIyBTTUkKK01FTVNJWkUgOj0gMHgwMDEwMDAwMCAjIDFNQgorCitCQVNFX0FERFIgICAgICAgIDo9IDB4MDAyMDAwMDAKKworVEFHU19BRERSICAgICAgICA6PSBCQVNFX0FERFIrMHgwMDAwMDEwMAorS0VSTkVMX0FERFIgICAgICA6PSBCQVNFX0FERFIrMHgwMDAwODAwMAorUkFNRElTS19BRERSICAgICA6PSBCQVNFX0FERFIrMHgwMTAwMDAwMAorU0NSQVRDSF9BRERSICAgICA6PSBCQVNFX0FERFIrMHgwMjAwODAwMAorCitLRVlTX1VTRV9HUElPX0tFWVBBRCA6PSAxCisKK0RFRklORVMgKz0gRElTUExBWV9UWVBFX01EREk9MAorCitNT0RVTEVTICs9IFwKKwlkZXYva2V5cyBcCisJbGliL3B0YWJsZQorCitERUZJTkVTICs9IFwKKwlTRFJBTV9TSVpFPSQoTUVNU0laRSkgXAorCU1FTUJBU0U9JChNRU1CQVNFKSBcCisJQkFTRV9BRERSPSQoQkFTRV9BRERSKSBcCisJVEFHU19BRERSPSQoVEFHU19BRERSKSBcCisJS0VSTkVMX0FERFI9JChLRVJORUxfQUREUikgXAorCVJBTURJU0tfQUREUj0kKFJBTURJU0tfQUREUikgXAorCVNDUkFUQ0hfQUREUj0kKFNDUkFUQ0hfQUREUikKKworCitPQkpTICs9IFwKKwkkKExPQ0FMX0RJUikvaW5pdC5vIFwKKwkkKExPQ0FMX0RJUikva2V5cGFkLm8gXAorCSQoTE9DQUxfRElSKS9hdGFncy5vIFwKKwkkKExPQ0FMX0RJUikvcGFuZWwubwpkaWZmIC0tZ2l0IGEvdGFyZ2V0L21zbTc2MjVfZmZhL3Rvb2xzL21ha2VmaWxlIGIvdGFyZ2V0L21zbTc2MjVfZmZhL3Rvb2xzL21ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YTRjMTQKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvbXNtNzYyNV9mZmEvdG9vbHMvbWFrZWZpbGUKQEAgLTAsMCArMSwzOCBAQAorI01ha2VmaWxlIHRvIGdlbmVyYXRlIGFwcHNib290Lm1ibgorCitpZmVxICgkKEJPT1RMT0FERVJfT1VUKSwuKQorQVBQU0JPT1RIRUFERVJfRElSICA6PSAkKEJVSUxERElSKQorZWxzZQorQVBQU0JPT1RIRUFERVJfRElSICA6PSAkKEJPT1RMT0FERVJfT1VUKS8uLi8uLi8KK2VuZGlmCisKK1NSQ19ESVIgIDo9IHRhcmdldC8kKFRBUkdFVCkvdG9vbHMKK0NPTVBJTEVSIDo9IGdjYworCitpZmVxICgkKEVNTUNfQk9PVCksIDEpCisgIEFQUFNCT09USERSX0ZJTEVTIDo9IGVtbWNfYXBwc2Jvb3QubWJuIGVtbWNfYXBwc2Jvb3RoZC5tYm4KK2Vsc2UKKyAgaWZlcSAoJChCVUlMRF9OQU5EV1JJVEUpLCAxKQorICAgIEFQUFNCT09USERSX0ZJTEVTIDo9CisgIGVsc2UKKyAgICBBUFBTQk9PVEhEUl9GSUxFUyA6PSBhcHBzYm9vdC5tYm4gYXBwc2Jvb3RoZC5tYm4KKyAgZW5kaWYKK2VuZGlmCisKK0FQUFNCT09USEVBREVSOiAkKEFQUFNCT09USERSX0ZJTEVTKQorCithcHBzYm9vdC5tYm46ICQoT1VUQklOKQorCWNwIC1mICQoT1VUQklOKSAkKEFQUFNCT09USEVBREVSX0RJUikvYXBwc2Jvb3QubWJuCisKK2FwcHNib290aGQubWJuOiBta2hlYWRlciAkKE9VVEJJTikKKwkkKFNSQ19ESVIpL21raGVhZGVyICQoT1VUQklOKSAkKEFQUFNCT09USEVBREVSX0RJUikvYXBwc2Jvb3RoZC5tYm4KKworZW1tY19hcHBzYm9vdC5tYm46ICQoT1VUQklOKQorCWNwIC1mICQoT1VUQklOKSAkKEFQUFNCT09USEVBREVSX0RJUikvZW1tY19hcHBzYm9vdC5tYm4KKworZW1tY19hcHBzYm9vdGhkLm1ibjogbWtoZWFkZXIgJChPVVRCSU4pCisJJChTUkNfRElSKS9ta2hlYWRlciAkKE9VVEJJTikgJChBUFBTQk9PVEhFQURFUl9ESVIpL2VtbWNfYXBwc2Jvb3RoZC5tYm4gdW5pZmllZC1ib290CisKK21raGVhZGVyOiAkKFNSQ19ESVIpL21raGVhZGVyLmMKKwkke0NPTVBJTEVSfSAkKFNSQ19ESVIpL21raGVhZGVyLmMgLW8gJChTUkNfRElSKS9ta2hlYWRlcgorCmRpZmYgLS1naXQgYS90YXJnZXQvbXNtNzYyNV9mZmEvdG9vbHMvbWtoZWFkZXIuYyBiL3RhcmdldC9tc203NjI1X2ZmYS90b29scy9ta2hlYWRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMDM5MDcKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvbXNtNzYyNV9mZmEvdG9vbHMvbWtoZWFkZXIuYwpAQCAtMCwwICsxLDg3IEBACisvKiBDb3B5cmlnaHQgMjAwNywgR29vZ2xlIEluYy4gKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3RydWN0IHN0YXQgczsKKwl1bnNpZ25lZCBzaXplLCBiYXNlOworCWludCB1bmlmaWVkX2Jvb3QgPSAwOworCXVuc2lnbmVkIHVuaWZpZWRfYm9vdF9tYWdpY1syMF07CisJdW5zaWduZWQgbm9uX3VuaWZpZWRfYm9vdF9tYWdpY1sxMF07CisJdW5zaWduZWQgbWFnaWNfbGVuID0gMDsKKwl1bnNpZ25lZCAqbWFnaWM7CisJaW50IGZkOworCisJaWYoYXJnYyA8IDMpIHsKKwkJZnByaW50ZihzdGRlcnIsInVzYWdlOiBta2hlYWRlciA8YmluPiA8aGRyPlxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoYXJnYyA9PSA0KSB7CisJCWlmKCFzdHJjbXAoInVuaWZpZWQtYm9vdCIsYXJndlszXSkpIHsKKwkJCXVuaWZpZWRfYm9vdCA9IDE7CisJCX0KKwl9CisKKwlpZihzdGF0KGFyZ3ZbMV0sICZzKSkgeworCQlwZXJyb3IoImNhbm5vdCBzdGF0IGJpbmFyeSIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYodW5pZmllZF9ib290KSB7CisJCW1hZ2ljID0gdW5pZmllZF9ib290X21hZ2ljOworCQltYWdpY19sZW4gPSBzaXplb2YodW5pZmllZF9ib290X21hZ2ljKTsKKwl9IGVsc2UgeworCQltYWdpYyA9IG5vbl91bmlmaWVkX2Jvb3RfbWFnaWM7CisJCW1hZ2ljX2xlbiA9IHNpemVvZihub25fdW5pZmllZF9ib290X21hZ2ljKTsKKwl9CisKKwlzaXplID0gcy5zdF9zaXplOworCWJhc2UgPSAwOworCisJbWFnaWNbMF0gPSAweDAwMDAwMDA1OyAvKiBhcHBzYmwgKi8KKwltYWdpY1sxXSA9IDB4MDAwMDAwMDI7IC8qIG5hbmQgKi8KKwltYWdpY1syXSA9IDB4MDAwMDAwMDA7CisJbWFnaWNbM10gPSBiYXNlOworCW1hZ2ljWzRdID0gc2l6ZTsKKwltYWdpY1s1XSA9IHNpemU7CisJbWFnaWNbNl0gPSBzaXplICsgYmFzZTsKKwltYWdpY1s3XSA9IDB4MDAwMDAwMDA7CisJbWFnaWNbOF0gPSBzaXplICsgYmFzZTsKKwltYWdpY1s5XSA9IDB4MDAwMDAwMDA7CisKKwlpZiAodW5pZmllZF9ib290ID09IDEpCisJeworCQltYWdpY1sxMF0gPSAweDMzODM2Njg1OyAvKiBjb29raWUgbWFnaWMgbnVtYmVyICovCisJCW1hZ2ljWzExXSA9IDB4MDAwMDAwMDE7IC8qIGNvb2tpZSB2ZXJzaW9uICovCisJCW1hZ2ljWzEyXSA9IDB4MDAwMDAwMDI7IC8qIGZpbGUgZm9ybWF0cyAqLworCQltYWdpY1sxM10gPSAweDAwMDAwMDAwOworCQltYWdpY1sxNF0gPSAweDAwNTAwMDAwOyAvKiA1TSBmb3IgYm9vdC5pbWcgKi8KKwkJbWFnaWNbMTVdID0gMHgwMDAwMDAwMDsKKwkJbWFnaWNbMTZdID0gMHgwMDAwMDAwMDsKKwkJbWFnaWNbMTddID0gMHgwMDAwMDAwMDsKKwkJbWFnaWNbMThdID0gMHgwMDAwMDAwMDsKKwkJbWFnaWNbMTldID0gMHgwMDAwMDAwMDsKKwl9CisKKwlmZCA9IG9wZW4oYXJndlsyXSwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgMDY0NCk7CisJaWYoZmQgPCAwKSB7CisJCXBlcnJvcigiY2Fubm90IG9wZW4gaGVhZGVyIGZvciB3cml0aW5nIik7CisJCXJldHVybiAtMTsKKwl9CisJaWYod3JpdGUoZmQsIG1hZ2ljLCBtYWdpY19sZW4pICE9IG1hZ2ljX2xlbikgeworCQlwZXJyb3IoImNhbm5vdCB3cml0ZSBoZWFkZXIiKTsKKwkJY2xvc2UoZmQpOworCQl1bmxpbmsoYXJndlsyXSk7CisJCXJldHVybiAtMTsKKwl9CisJY2xvc2UoZmQpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90YXJnZXQvbXNtNzYyNV9zdXJmL2F0YWdzLmMgYi90YXJnZXQvbXNtNzYyNV9zdXJmL2F0YWdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAyOWFkMgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9tc203NjI1X3N1cmYvYXRhZ3MuYwpAQCAtMCwwICsxLDMyIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMDksIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIENvZGUgQXVyb3JhIG5vcgorICogICAgICAgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgICAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KKyAqICAgICAgIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTi1JTkZSSU5HRU1FTlQgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOworICogT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgorICogT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKK3Vuc2lnbmVkKiB0YXJnZXRfYXRhZ19tZW0odW5zaWduZWQqIHB0cikKK3sKKyAgICByZXR1cm4gcHRyOworfQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L21zbTc2MjVfc3VyZi9pbml0LmMgYi90YXJnZXQvbXNtNzYyNV9zdXJmL2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGIyMTk3Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L21zbTc2MjVfc3VyZi9pbml0LmMKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGRlYnVnLmg+CisjaW5jbHVkZSA8ZGV2L2tleXMuaD4KKyNpbmNsdWRlIDxkZXYvZ3Bpb19rZXlwYWQuaD4KKyNpbmNsdWRlIDxsaWIvcHRhYmxlLmg+CisjaW5jbHVkZSA8ZGV2L2ZsYXNoLmg+CisjaW5jbHVkZSA8c21lbS5oPgorCisjZGVmaW5lIExJTlVYX01BQ0hUWVBFICAxMDA3MDAyCisKK3N0YXRpYyBzdHJ1Y3QgcHRhYmxlIGZsYXNoX3B0YWJsZTsKKworLyogZm9yIHRoZXNlIHBhcnRpdGlvbnMsIHN0YXJ0IHdpbGwgYmUgb2Zmc2V0IGJ5IGVpdGhlciB3aGF0IHdlIGdldCBmcm9tCisgKiBzbWVtLCBvciBmcm9tIHRoZSBhYm92ZSBvZmZzZXQgaWYgc21lbSBpcyBub3QgdXNlZnVsLiBBbHNvLCB3ZSBzaG91bGQKKyAqIHByb2JhYmx5IGhhdmUgc21lbV9wdGFibGUgY29kZSBwb3B1bGF0ZSBvdXIgZmxhc2hfcHRhYmxlLgorICoKKyAqIFdoZW4gc21lbSBwcm92aWRlcyB1cyB3aXRoIGEgZnVsbCBwYXJ0aXRpb24gdGFibGUsIHdlIGNhbiBnZXQgcmlkIG9mCisgKiB0aGlzIGFsdG9nZXRoZXIuCisgKgorICovCitzdGF0aWMgc3RydWN0IHB0ZW50cnkgYm9hcmRfcGFydF9saXN0W10gPSB7CisJeworCQkuc3RhcnQgPSAwLAorCQkubGVuZ3RoID0gNDAsCisJCS5uYW1lID0gImJvb3QiLAorCX0sCisJeworCQkuc3RhcnQgPSA1NiwKKwkJLmxlbmd0aCA9IDYwOCAvKiA3Nk1CICovLAorCQkubmFtZSA9ICJzeXN0ZW0iLAorCX0sCisJeworCQkuc3RhcnQgPSA2NjQsCisJCS5sZW5ndGggPSA0MCAgLyogNU1CICovLAorCQkubmFtZSA9ICJjYWNoZSIsCisJfSwKKwl7CisJCS5zdGFydCA9IDcwNCwKKwkJLmxlbmd0aCA9IDQwIC8qIDVNQiAqLywKKwkJLm5hbWUgPSAicmVjb3ZlcnkiLAorCX0sCisJeworCQkuc3RhcnQgPSA3NDQsCisJCS5sZW5ndGggPSA3MjAgLyogOTBNQiAqLywKKwkJLm5hbWUgPSAidXNlcmRhdGEiLAorCX0sCit9Oworc3RhdGljIGludCBudW1fcGFydHMgPSBzaXplb2YoYm9hcmRfcGFydF9saXN0KS9zaXplb2Yoc3RydWN0IHB0ZW50cnkpOworCit2b2lkIHNtZW1fcHRhYmxlX2luaXQodm9pZCk7Cit1bnNpZ25lZCBzbWVtX2dldF9hcHBzX2ZsYXNoX3N0YXJ0KHZvaWQpOworCit2b2lkIGtleXBhZF9pbml0KHZvaWQpOworCitpbnQgdGFyZ2V0X2lzX2VtbWNfYm9vdCh2b2lkKTsKKwordm9pZCB0YXJnZXRfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIG9mZnNldDsKKwlzdHJ1Y3QgZmxhc2hfaW5mbyAqZmxhc2hfaW5mbzsKKwlpbnQgaTsKKworCWRwcmludGYoSU5GTywgInRhcmdldF9pbml0KClcbiIpOworCisjaWYgKCFFTkFCTEVfTkFORFdSSVRFKQorCWtleXNfaW5pdCgpOworCWtleXBhZF9pbml0KCk7CisjZW5kaWYKKworCWlmICh0YXJnZXRfaXNfZW1tY19ib290KCkpCisJCXJldHVybjsKKworCXB0YWJsZV9pbml0KCZmbGFzaF9wdGFibGUpOworCXNtZW1fcHRhYmxlX2luaXQoKTsKKworCWZsYXNoX2luaXQoKTsKKwlmbGFzaF9pbmZvID0gZmxhc2hfZ2V0X2luZm8oKTsKKwlBU1NFUlQoZmxhc2hfaW5mbyk7CisKKwlvZmZzZXQgPSBzbWVtX2dldF9hcHBzX2ZsYXNoX3N0YXJ0KCk7CisJaWYgKG9mZnNldCA9PSAweGZmZmZmZmZmKQorCSAgICAgICAgd2hpbGUoMSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcnRzOyBpKyspIHsKKwkJc3RydWN0IHB0ZW50cnkgKnB0biA9ICZib2FyZF9wYXJ0X2xpc3RbaV07CisJCXVuc2lnbmVkIGxlbiA9IHB0bi0+bGVuZ3RoOworCisJCWlmICgobGVuID09IDApICYmIChpID09IG51bV9wYXJ0cyAtIDEpKQorCQkJbGVuID0gZmxhc2hfaW5mby0+bnVtX2Jsb2NrcyAtIG9mZnNldCAtIHB0bi0+c3RhcnQ7CisJCXB0YWJsZV9hZGQoJmZsYXNoX3B0YWJsZSwgcHRuLT5uYW1lLCBvZmZzZXQgKyBwdG4tPnN0YXJ0LAorCQkJICAgbGVuLCBwdG4tPmZsYWdzKTsKKwl9CisKKwlwdGFibGVfZHVtcCgmZmxhc2hfcHRhYmxlKTsKKwlmbGFzaF9zZXRfcHRhYmxlKCZmbGFzaF9wdGFibGUpOworfQorCit1bnNpZ25lZCBib2FyZF9tYWNodHlwZSh2b2lkKQoreworICAgIHJldHVybiBMSU5VWF9NQUNIVFlQRTsKK30KKwordm9pZCByZWJvb3RfZGV2aWNlKHVuc2lnbmVkIHJlYm9vdF9yZWFzb24pCit7CisgICAgcmVib290KHJlYm9vdF9yZWFzb24pOworfQorCit1bnNpZ25lZCBjaGVja19yZWJvb3RfbW9kZSh2b2lkKQoreworICAgIHVuc2lnbmVkIG1vZGVbMl0gPSB7MCwgMH07CisgICAgdW5zaWduZWQgaW50IG1vZGVfbGVuID0gc2l6ZW9mKG1vZGUpOworICAgIHVuc2lnbmVkIHNtZW1fc3RhdHVzOworCisgICAgc21lbV9zdGF0dXMgPSBzbWVtX3JlYWRfYWxsb2NfZW50cnkoU01FTV9BUFBTX0JPT1RfTU9ERSwKKwkJCQkJJm1vZGUsIG1vZGVfbGVuICk7CisgICAgaWYoc21lbV9zdGF0dXMpCisgICAgeworICAgICAgZHByaW50ZihDUklUSUNBTCwgIkVSUk9SOiB1bmFibGUgdG8gcmVhZCBzaGFyZWQgbWVtb3J5IGZvciByZWJvb3QgbW9kZVxuIik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG1vZGVbMF07Cit9CmRpZmYgLS1naXQgYS90YXJnZXQvbXNtNzYyNV9zdXJmL2tleXBhZC5jIGIvdGFyZ2V0L21zbTc2MjVfc3VyZi9rZXlwYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDRiMDZkCi0tLSAvZGV2L251bGwKKysrIGIvdGFyZ2V0L21zbTc2MjVfc3VyZi9rZXlwYWQuYwpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZGV2L2tleXMuaD4KKyNpbmNsdWRlIDxkZXYvZ3Bpb19rZXlwYWQuaD4KKworI2RlZmluZSBBUlJBWV9TSVpFKHgpIChzaXplb2YoeCkvc2l6ZW9mKCh4KVswXSkpCisKKy8qIGRvbid0IHR1cm4gdGhpcyBvbiB3aXRob3V0IHVwZGF0aW5nIHRoZSBmZmEgc3VwcG9ydCAqLworI2RlZmluZSBTQ0FOX0ZVTkNUSU9OX0tFWVMgMAorCitzdGF0aWMgdW5zaWduZWQgaW50IGhhbGlidXRfcm93X2dwaW9zW10gPSB7CisJMzEsIDMyLCAzMywgMzQsIDM1LCA0MQorI2lmIFNDQU5fRlVOQ1RJT05fS0VZUworCSwgNDIKKyNlbmRpZgorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBoYWxpYnV0X2NvbF9ncGlvc1tdID0geyAzNiwgMzcsIDM4LCAzOSwgNDAgfTsKKworI2RlZmluZSBLRVlNQVBfSU5ERVgocm93LCBjb2wpICgocm93KSpBUlJBWV9TSVpFKGhhbGlidXRfY29sX2dwaW9zKSArIChjb2wpKQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgaGFsaWJ1dF9rZXltYXBbQVJSQVlfU0laRShoYWxpYnV0X2NvbF9ncGlvcykgKiBBUlJBWV9TSVpFKGhhbGlidXRfcm93X2dwaW9zKV0gPSB7CisJW0tFWU1BUF9JTkRFWCgwLCAwKV0gPSBLRVlfNSwKKwlbS0VZTUFQX0lOREVYKDAsIDEpXSA9IEtFWV85LAorCVtLRVlNQVBfSU5ERVgoMCwgMildID0gS0VZX1NPRlQxLAorCVtLRVlNQVBfSU5ERVgoMCwgMyldID0gS0VZXzYsCisJW0tFWU1BUF9JTkRFWCgwLCA0KV0gPSBLRVlfTEVGVCwKKworCVtLRVlNQVBfSU5ERVgoMSwgMCldID0gS0VZXzAsCisJW0tFWU1BUF9JTkRFWCgxLCAxKV0gPSBLRVlfUklHSFQsCisJW0tFWU1BUF9JTkRFWCgxLCAyKV0gPSBLRVlfMSwKKwlbS0VZTUFQX0lOREVYKDEsIDMpXSA9IEtFWV9TSEFSUCwKKwlbS0VZTUFQX0lOREVYKDEsIDQpXSA9IEtFWV9TRU5ELAorCisJW0tFWU1BUF9JTkRFWCgyLCAwKV0gPSBLRVlfVk9MVU1FVVAsCisJW0tFWU1BUF9JTkRFWCgyLCAxKV0gPSBLRVlfSE9NRSwgICAgICAvKiBGQSAgICovCisJW0tFWU1BUF9JTkRFWCgyLCAyKV0gPSBLRVlfRjgsICAgICAgICAvKiBRQ0hUICovCisJW0tFWU1BUF9JTkRFWCgyLCAzKV0gPSBLRVlfRjYsICAgICAgICAvKiBSKyAgICovCisJW0tFWU1BUF9JTkRFWCgyLCA0KV0gPSBLRVlfRjcsICAgICAgICAvKiBSLSAgICovCisKKwlbS0VZTUFQX0lOREVYKDMsIDApXSA9IEtFWV9VUCwKKwlbS0VZTUFQX0lOREVYKDMsIDEpXSA9IEtFWV9DTEVBUiwKKwlbS0VZTUFQX0lOREVYKDMsIDIpXSA9IEtFWV80LAorCVtLRVlNQVBfSU5ERVgoMywgMyldID0gS0VZX01VVEUsICAgICAgLyogU1BLUiAqLworCVtLRVlNQVBfSU5ERVgoMywgNCldID0gS0VZXzIsCisKKwlbS0VZTUFQX0lOREVYKDQsIDApXSA9IEtFWV9TT0ZUMiwgICAgICAgICAgIC8qIFNPRlQyICovCisJW0tFWU1BUF9JTkRFWCg0LCAxKV0gPSBLRVlfQ0VOVEVSLCAgICAvKiBLRVlfQ0VOVEVSICovCisJW0tFWU1BUF9JTkRFWCg0LCAyKV0gPSBLRVlfRE9XTiwKKwlbS0VZTUFQX0lOREVYKDQsIDMpXSA9IEtFWV9CQUNLLCAgICAgIC8qIEZCICovCisJW0tFWU1BUF9JTkRFWCg0LCA0KV0gPSBLRVlfOCwKKworCVtLRVlNQVBfSU5ERVgoNSwgMCldID0gS0VZX1ZPTFVNRURPV04sCisJW0tFWU1BUF9JTkRFWCg1LCAxKV0gPSBLRVlfU1RBUiwgICAgICAvKiBLRVlfU1RBUiAqLworCVtLRVlNQVBfSU5ERVgoNSwgMildID0gS0VZX01BSUwsICAgICAgLyogTUVTRyAqLworCVtLRVlNQVBfSU5ERVgoNSwgMyldID0gS0VZXzMsCisJW0tFWU1BUF9JTkRFWCg1LCA0KV0gPSBLRVlfNywKKworI2lmIFNDQU5fRlVOQ1RJT05fS0VZUworCVtLRVlNQVBfSU5ERVgoNiwgMCldID0gS0VZX0Y1LAorCVtLRVlNQVBfSU5ERVgoNiwgMSldID0gS0VZX0Y0LAorCVtLRVlNQVBfSU5ERVgoNiwgMildID0gS0VZX0YzLAorCVtLRVlNQVBfSU5ERVgoNiwgMyldID0gS0VZX0YyLAorCVtLRVlNQVBfSU5ERVgoNiwgNCldID0gS0VZX0YxCisjZW5kaWYKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlwYWRfaW5mbyBoYWxpYnV0X2tleXBhZF9pbmZvID0geworCS5rZXltYXAJCT0gaGFsaWJ1dF9rZXltYXAsCisJLm91dHB1dF9ncGlvcwk9IGhhbGlidXRfcm93X2dwaW9zLAorCS5pbnB1dF9ncGlvcwk9IGhhbGlidXRfY29sX2dwaW9zLAorCS5ub3V0cHV0cwk9IEFSUkFZX1NJWkUoaGFsaWJ1dF9yb3dfZ3Bpb3MpLAorCS5uaW5wdXRzCT0gQVJSQVlfU0laRShoYWxpYnV0X2NvbF9ncGlvcyksCisJLnNldHRsZV90aW1lCT0gNSAvKiBtc2VjICovLAorCS5wb2xsX3RpbWUJPSAyMCAvKiBtc2VjICovLAorCS5mbGFncwkJPSBHUElPS1BGX0RSSVZFX0lOQUNUSVZFLAorfTsKKwordm9pZCBrZXlwYWRfaW5pdCh2b2lkKQoreworCWdwaW9fa2V5cGFkX2luaXQoJmhhbGlidXRfa2V5cGFkX2luZm8pOworfQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L21zbTc2MjVfc3VyZi9wYW5lbC5jIGIvdGFyZ2V0L21zbTc2MjVfc3VyZi9wYW5lbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYjU2YTEKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvbXNtNzYyNV9zdXJmL3BhbmVsLmMKQEAgLTAsMCArMSw0NzEgQEAKKy8qIENvcHlyaWdodCAyMDA3LCBHb29nbGUgSW5jLiAqLworCisjaW5jbHVkZSA8ZGVidWcuaD4KKyNpbmNsdWRlIDxkZXYvZ3Bpby5oPgorI2luY2x1ZGUgPGtlcm5lbC90aHJlYWQuaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybS9tZGRpLmg+CisKKyNkZWZpbmUgTURESV9DTElFTlRfQ09SRV9CQVNFICAweDEwODAwMAorI2RlZmluZSBMQ0RfQ09OVFJPTF9CTE9DS19CQVNFIDB4MTEwMDAwCisjZGVmaW5lIFNQSV9CTE9DS19CQVNFICAgICAgICAgMHgxMjAwMDAKKyNkZWZpbmUgSTJDX0JMT0NLX0JBU0UgICAgICAgICAweDEzMDAwMAorI2RlZmluZSBQV01fQkxPQ0tfQkFTRSAgICAgICAgIDB4MTQwMDAwCisjZGVmaW5lIEdQSU9fQkxPQ0tfQkFTRSAgICAgICAgMHgxNTAwMDAKKyNkZWZpbmUgU1lTVEVNX0JMT0NLMV9CQVNFICAgICAweDE2MDAwMAorI2RlZmluZSBTWVNURU1fQkxPQ0syX0JBU0UgICAgIDB4MTcwMDAwCisKKworI2RlZmluZQlNRERJQ0FQMCAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MDApCisjZGVmaW5lCU1ERElDQVAxICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgwNCkKKyNkZWZpbmUJTURESUNBUDIgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDA4KQorI2RlZmluZQlNRERJQ0FQMyAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MEMpCisjZGVmaW5lCU1EQ0FQQ0hHICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgxMCkKKyNkZWZpbmUJTURDUkNFUkMgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDE0KQorI2RlZmluZQlUVEJVU1NFTCAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MTgpCisjZGVmaW5lCURQU0VUMCAgICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgxQykKKyNkZWZpbmUJRFBTRVQxICAgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDIwKQorI2RlZmluZQlEUFNVUyAgICAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MjQpCisjZGVmaW5lCURQUlVOICAgICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgyOCkKKyNkZWZpbmUJU1lTQ0tFTkEgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDJDKQorI2RlZmluZQlURVNUTU9ERSAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MzApCisjZGVmaW5lCUZJRk9NT05JICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgzNCkKKyNkZWZpbmUJSU5UTU9OSSAgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDM4KQorI2RlZmluZQlNRElPQklTVCAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4M0MpCisjZGVmaW5lCU1ESU9QU0VUICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHg0MCkKKyNkZWZpbmUJQklUTUFQMCAgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDQ0KQorI2RlZmluZQlCSVRNQVAxICAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4NDgpCisjZGVmaW5lCUJJVE1BUDIgICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHg0QykKKyNkZWZpbmUJQklUTUFQMyAgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDUwKQorI2RlZmluZQlCSVRNQVA0ICAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4NTQpCisKKworI2RlZmluZQlTUlNUICAgICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDAwKQorI2RlZmluZQlQT1JUX0VOQiAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDA0KQorI2RlZmluZQlTVEFSVCAgICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDA4KQorI2RlZmluZQlQT1JUICAgICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDBDKQorI2RlZmluZQlDTU4gICAgICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDEwKQorI2RlZmluZQlHQU1NQSAgICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDE0KQorI2RlZmluZQlJTlRGTEcgICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDE4KQorI2RlZmluZQlJTlRNU0sgICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDFDKQorI2RlZmluZQlNUExGQlVGICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDIwKQorI2RlZmluZQlIREVfTEVGVCAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDI0KQorI2RlZmluZQlWREVfVE9QICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDI4KQorCisjZGVmaW5lCVBYTCAgICAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4MzApCisjZGVmaW5lCUhDWUNMRSAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4MzQpCisjZGVmaW5lCUhTVyAgICAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4MzgpCisjZGVmaW5lCUhERV9TVEFSVCAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4M0MpCisjZGVmaW5lCUhERV9TSVpFICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NDApCisjZGVmaW5lCVZDWUNMRSAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NDQpCisjZGVmaW5lCVZTVyAgICAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NDgpCisjZGVmaW5lCVZERV9TVEFSVCAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NEMpCisjZGVmaW5lCVZERV9TSVpFICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NTApCisjZGVmaW5lCVdBS0VVUCAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NTQpCisjZGVmaW5lCVdTWU5fRExZICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NTgpCisjZGVmaW5lCVJFR0VOQiAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NUMpCisjZGVmaW5lCVZTWU5JRiAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NjApCisjZGVmaW5lCVdSU1RCICAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NjQpCisjZGVmaW5lCVJEU1RCICAgICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NjgpCisjZGVmaW5lCUFTWV9EQVRBICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NkMpCisjZGVmaW5lCUFTWV9EQVRCICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NzApCisjZGVmaW5lCUFTWV9EQVRDICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NzQpCisjZGVmaW5lCUFTWV9EQVREICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NzgpCisjZGVmaW5lCUFTWV9EQVRFICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4N0MpCisjZGVmaW5lCUFTWV9EQVRGICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4ODApCisjZGVmaW5lCUFTWV9EQVRHICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4ODQpCisjZGVmaW5lCUFTWV9EQVRIICAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4ODgpCisjZGVmaW5lCUFTWV9DTURTRVQgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4OEMpCisKKyNkZWZpbmUJTU9OSSAgICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHhCMCkKKworI2RlZmluZQlDdXJyZW50ICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweEMwKQorI2RlZmluZQlMQ0QgICAgICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweEM0KQorI2RlZmluZQlDT01NQU5EICAgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweEM4KQorCisKKyNkZWZpbmUJU1NJQ1RMICAgICAgKFNQSV9CTE9DS19CQVNFfDB4MDApCisjZGVmaW5lCVNTSVRJTUUgICAgIChTUElfQkxPQ0tfQkFTRXwweDA0KQorI2RlZmluZQlTU0lUWCAgICAgICAoU1BJX0JMT0NLX0JBU0V8MHgwOCkKKyNkZWZpbmUJU1NJUlggICAgICAgKFNQSV9CTE9DS19CQVNFfDB4MEMpCisjZGVmaW5lCVNTSUlOVEMgICAgIChTUElfQkxPQ0tfQkFTRXwweDEwKQorI2RlZmluZQlTU0lJTlRTICAgICAoU1BJX0JMT0NLX0JBU0V8MHgxNCkKKyNkZWZpbmUJU1NJREJHMSAgICAgKFNQSV9CTE9DS19CQVNFfDB4MTgpCisjZGVmaW5lCVNTSURCRzIgICAgIChTUElfQkxPQ0tfQkFTRXwweDFDKQorI2RlZmluZQlTU0lJRCAgICAgICAoU1BJX0JMT0NLX0JBU0V8MHgyMCkKKworCisjZGVmaW5lCUkyQ1NFVFVQCShJMkNfQkxPQ0tfQkFTRXwweDAwKQorI2RlZmluZQlJMkNDVFJMCSAgICAoSTJDX0JMT0NLX0JBU0V8MHgwNCkKKworCisjZGVmaW5lCVRJTUVSMExPQUQJICAoUFdNX0JMT0NLX0JBU0V8MHgwMCkKKyNkZWZpbmUJVElNRVIwVkFMVUUJICAoUFdNX0JMT0NLX0JBU0V8MHgwNCkKKyNkZWZpbmUJVElNRVIwQ09OVFJPTCAoUFdNX0JMT0NLX0JBU0V8MHgwOCkKKyNkZWZpbmUJVElNRVIwSU5UQ0xSICAoUFdNX0JMT0NLX0JBU0V8MHgwQykKKyNkZWZpbmUJVElNRVIwUklTCSAgKFBXTV9CTE9DS19CQVNFfDB4MTApCisjZGVmaW5lCVRJTUVSME1JUwkgIChQV01fQkxPQ0tfQkFTRXwweDE0KQorI2RlZmluZQlUSU1FUjBCR0xPQUQgIChQV01fQkxPQ0tfQkFTRXwweDE4KQorI2RlZmluZQlQV00wT0ZGCSAgICAgIChQV01fQkxPQ0tfQkFTRXwweDFDKQorI2RlZmluZQlUSU1FUjFMT0FECSAgKFBXTV9CTE9DS19CQVNFfDB4MjApCisjZGVmaW5lCVRJTUVSMVZBTFVFCSAgKFBXTV9CTE9DS19CQVNFfDB4MjQpCisjZGVmaW5lCVRJTUVSMUNPTlRST0wgKFBXTV9CTE9DS19CQVNFfDB4MjgpCisjZGVmaW5lCVRJTUVSMUlOVENMUiAgKFBXTV9CTE9DS19CQVNFfDB4MkMpCisjZGVmaW5lCVRJTUVSMVJJUwkgIChQV01fQkxPQ0tfQkFTRXwweDMwKQorI2RlZmluZQlUSU1FUjFNSVMJICAoUFdNX0JMT0NLX0JBU0V8MHgzNCkKKyNkZWZpbmUJVElNRVIxQkdMT0FEICAoUFdNX0JMT0NLX0JBU0V8MHgzOCkKKyNkZWZpbmUJUFdNMU9GRgkgICAgICAoUFdNX0JMT0NLX0JBU0V8MHgzQykKKyNkZWZpbmUJVElNRVJJVENSCSAgKFBXTV9CTE9DS19CQVNFfDB4NjApCisjZGVmaW5lCVRJTUVSSVRPUAkgIChQV01fQkxPQ0tfQkFTRXwweDY0KQorI2RlZmluZQlQV01DUgkgICAgICAoUFdNX0JMT0NLX0JBU0V8MHg2OCkKKyNkZWZpbmUJUFdNSUQJICAgICAgKFBXTV9CTE9DS19CQVNFfDB4NkMpCisjZGVmaW5lCVBXTU1PTgkgICAgICAoUFdNX0JMT0NLX0JBU0V8MHg3MCkKKworCisjZGVmaW5lCUdQSU9EQVRBICAgIChHUElPX0JMT0NLX0JBU0V8MHgwMCkKKyNkZWZpbmUJR1BJT0RJUiAgICAgKEdQSU9fQkxPQ0tfQkFTRXwweDA0KQorI2RlZmluZQlHUElPSVMgICAgICAoR1BJT19CTE9DS19CQVNFfDB4MDgpCisjZGVmaW5lCUdQSU9JQkUgICAgIChHUElPX0JMT0NLX0JBU0V8MHgwQykKKyNkZWZpbmUJR1BJT0lFViAgICAgKEdQSU9fQkxPQ0tfQkFTRXwweDEwKQorI2RlZmluZQlHUElPSUUgICAgICAoR1BJT19CTE9DS19CQVNFfDB4MTQpCisjZGVmaW5lCUdQSU9SSVMgICAgIChHUElPX0JMT0NLX0JBU0V8MHgxOCkKKyNkZWZpbmUJR1BJT01JUyAgICAgKEdQSU9fQkxPQ0tfQkFTRXwweDFDKQorI2RlZmluZQlHUElPSUMgICAgICAoR1BJT19CTE9DS19CQVNFfDB4MjApCisjZGVmaW5lCUdQSU9PTVMgICAgIChHUElPX0JMT0NLX0JBU0V8MHgyNCkKKyNkZWZpbmUJR1BJT1BDICAgICAgKEdQSU9fQkxPQ0tfQkFTRXwweDI4KQorCisjZGVmaW5lCUdQSU9JRCAgICAgIChHUElPX0JMT0NLX0JBU0V8MHgzMCkKKworCisjZGVmaW5lCVdLUkVRICAgICAgIChTWVNURU1fQkxPQ0sxX0JBU0V8MHgwMCkKKyNkZWZpbmUJQ0xLRU5CICAgICAgKFNZU1RFTV9CTE9DSzFfQkFTRXwweDA0KQorI2RlZmluZQlEUkFNUFdSICAgICAoU1lTVEVNX0JMT0NLMV9CQVNFfDB4MDgpCisjZGVmaW5lCUlOVE1BU0sgICAgIChTWVNURU1fQkxPQ0sxX0JBU0V8MHgwQykKKyNkZWZpbmUJR1BJT1NFTCAgICAgKFNZU1RFTV9CTE9DSzJfQkFTRXwweDAwKQorCitzdHJ1Y3QgaW5pdF90YWJsZSB7CisgICAgdW5zaWduZWQgaW50IHJlZzsKKyAgICB1bnNpZ25lZCBpbnQgdmFsOworfTsKKworc3RhdGljIHN0cnVjdCBpbml0X3RhYmxlIHRvc2hpYmFfNDgweDY0MF9pbml0X3RhYmxlW10gPSB7CisJeyBEUFNFVDAsICAgICAgICAgICAgICAgMHg0QkVDMDA2NiB9LCAgLy8gIyBNREMuRFBTRVQwICAjIFNldHVwIERQTEwgcGFyYW1ldGVycworCXsgRFBTRVQxLCAgICAgICAgICAgICAgIDB4MDAwMDAxMTMgfSwgIC8vICAgIyBNREMuRFBTRVQxICAKKwl7IERQU1VTLCAgICAgICAgICAgICAgICAweDAwMDAwMDAwIH0sICAvLyAgICMgTURDLkRQU1VTICAjIFNldCBEUExMIG9zY2lsbGF0aW9uIGVuYWJsZQorCXsgRFBSVU4sICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgfSwgIC8vICAgIyBNREMuRFBSVU4gICMgUmVsZWFzZSByZXNldCBzaWduYWwgZm9yIERQTEwKKwl7IDAsICAgICAgICAgICAgICAgICAgICAxNCAgICAgICAgIH0sICAvLyB3YWl0X21zKDE0KTsKKwl7IFNZU0NLRU5BLCAgICAgICAgICAgICAweDAwMDAwMDAxIH0sICAvLyAgICMgTURDLlNZU0NLRU5BICAjIEVuYWJsZSBzeXN0ZW0gY2xvY2sgb3V0cHV0CisJeyBDTEtFTkIsICAgICAgICAgICAgICAgMHgwMDAwMDBFRiB9LCAgLy8gICAjIFNZUy5DTEtFTkIgICMgRW5hYmxlIGNsb2NrcyBmb3IgZWFjaCBtb2R1bGUgKHdpdGhvdXQgRENMSyAsIGkyY0NMSykKKwl7IEdQSU9fQkxPQ0tfQkFTRSwgICAgICAweDAzRkYwMDAwIH0sICAvLyAgICMgR1BJIC5HUElPREFUQSAgIyBHUElPMihSRVNFVF9MQ0RfTikgc2V0IHRvIDAgLCBHUElPMyhlRFJBTV9Qb3dlcikgc2V0IHRvIDAKKwl7IEdQSU9ESVIsICAgICAgICAgICAgICAweDAwMDAwMjREIH0sICAvLyAgICMgR1BJIC5HUElPRElSICAjIFNlbGVjdCBkaXJlY3Rpb24gb2YgR1BJTyBwb3J0ICgwLDIsMyw2LDkgb3V0cHV0KQorCXsgU1lTVEVNX0JMT0NLMl9CQVNFLCAgIDB4MDAwMDAxNzMgfSwgIC8vICAgIyBTWVMuR1BJT1NFTCAgIyBHUElPIHBvcnQgbXVsdGlwbGV4aW5nIGNvbnRyb2wKKwl7IEdQSU9QQywgICAgICAgICAgICAgICAweDAzQzMwMEMwIH0sICAvLyAgICMgR1BJIC5HUElPUEMgICMgR1BJTzIsMyBQRCBjdXQKKwl7IFNZU1RFTV9CTE9DSzFfQkFTRSwgICAweDAwMDAwMDAwIH0sICAvLyAgICMgU1lTLldLUkVRICAjIFdha2UtdXAgcmVxdWVzdCBldmVudCBpcyBWU1lOQyBhbGlnbm1lbnQKKwl7IEdQSU9JUywgICAgICAgICAgICAgICAweDAwMDAwMDAwIH0sICAvLyAgICMgR1BJIC5HUElPSVMgICMgU2V0IGludGVycnVwdCBzZW5zZSBvZiBHUElPCisJeyBHUElPSUVWLCAgICAgICAgICAgICAgMHgwMDAwMDAwMSB9LCAgLy8gICAjIEdQSSAuR1BJT0lFViAgIyBTZXQgaW50ZXJydXB0IGV2ZW50IG9mIEdQSU8KKwl7IEdQSU9JQywgICAgICAgICAgICAgICAweDAwMDAwM0ZGIH0sICAvLyAgICMgR1BJIC5HUElPSUMgICMgR1BJTyBpbnRlcnJ1cHQgY2xlYXIKKwl7IEdQSU9fQkxPQ0tfQkFTRSwgICAgICAweDAwMDYwMDA2IH0sICAvLyAgICMgR1BJIC5HUElPREFUQSAgIyBSZWxlYXNlIExDREQgcmVzZXQKKwl7IEdQSU9fQkxPQ0tfQkFTRSwgICAgICAweDAwMDgwMDA4IH0sICAvLyAgICMgR1BJIC5HUElPREFUQSAgIyBlRFJBTSBWRCBzdXBwbHkKKwl7IEdQSU9fQkxPQ0tfQkFTRSwgICAgICAweDAyMDAwMjAwIH0sICAvLyAgICMgR1BJIC5HUElPREFUQSAgIyBURVNUIExFRCBPTgorCXsgRFJBTVBXUiwgICAgICAgICAgICAgIDB4MDAwMDAwMDEgfSwgIC8vICAgIyBTWVMuRFJBTVBXUiAgIyBlRFJBTSBwb3dlciB1cAorCXsgVElNRVIwQ09OVFJPTCwgICAgICAgIDB4MDAwMDAwNjAgfSwgIC8vICAgIyBQV00uVGltZXIwQ29udHJvbCAgIyBQV00wIG91dHB1dCBzdG9wCisJeyBQV01fQkxPQ0tfQkFTRSwgICAgICAgMHgwMDAwMTM4OCB9LCAgLy8gICAjIFBXTS5UaW1lcjBMb2FkICAjIFBXTTAgMTBrSHogLCBEdXR5IDk5IChCYWNrTGlnaHQgT0ZGKQorCS8ve1BXTTBPRkYsICAgICAgICAgICAgICAgMHgwMDAwMDAwMSB9LCAgLy8gICAjIFBXTS5QV00wT0ZGICAKKyNpZiAwCisJeyBQV00wT0ZGLCAgICAgICAgICAgICAgMHgwMDAwMTM4NyB9LCAvLyBTVVJGIDEwMCUgYmFja2xpZ2h0CisJeyBQV00wT0ZGLCAgICAgICAgICAgICAgMHgwMDAwMDAwMCB9LCAvLyBGRkEgMTAwJSBiYWNrbGlnaHQKKyNlbmRpZgorCXsgUFdNME9GRiwgICAgICAgICAgICAgIDB4MDAwMDA5QzMgfSwgLy8gNTAlIEJMCisJeyBUSU1FUjFDT05UUk9MLCAgICAgICAgMHgwMDAwMDA2MCB9LCAgLy8gICAjIFBXTS5UaW1lcjFDb250cm9sICAjIFBXTTEgb3V0cHV0IHN0b3AKKwl7IFRJTUVSMUxPQUQsICAgICAgICAgICAweDAwMDAxMzg4IH0sICAvLyAgICMgUFdNLlRpbWVyMUxvYWQgICMgUFdNMSAxMGtIeiAsIER1dHkgOTkgKEJhY2tMaWdodCBPRkYpCisJLy97UFdNMU9GRiwgICAgICAgICAgICAgICAweDAwMDAwMDAxIH0sICAvLyAgICMgUFdNLlBXTTFPRkYgIAorCXsgUFdNMU9GRiwgICAgICAgICAgICAgIDB4MDAwMDEzODcgfSwKKwl7IFRJTUVSMENPTlRST0wsICAgICAgICAweDAwMDAwMEUwIH0sICAvLyAgICMgUFdNLlRpbWVyMENvbnRyb2wgICMgUFdNMCBvdXRwdXQgc3RhcnQKKwl7IFRJTUVSMUNPTlRST0wsICAgICAgICAweDAwMDAwMEUwIH0sICAvLyAgICMgUFdNLlRpbWVyMUNvbnRyb2wgICMgUFdNMSBvdXRwdXQgc3RhcnQKKwl7IFBXTUNSLCAgICAgICAgICAgICAgICAweDAwMDAwMDAzIH0sICAvLyAgICMgUFdNLlBXTUNSICAjIFBXTSBvdXRwdXQgZW5hYmxlCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMSk7ICAgICAgICAKKwl7IFNQSV9CTE9DS19CQVNFLCAgICAgICAweDAwMDAwNzk5IH0sICAvLyAgICMgU1BJIC5TU0lDVEwgICMgU1BJIG9wZXJhdGlvbiBtb2RlIHNldHRpbmcKKwl7IFNTSVRJTUUsICAgICAgICAgICAgICAweDAwMDAwMTAwIH0sICAvLyAgICMgU1BJIC5TU0lUSU1FICAjIFNQSSBzZXJpYWwgaW50ZXJmYWNlIHRpbWluZyBzZXR0aW5nCisJeyBTUElfQkxPQ0tfQkFTRSwgICAgICAgMHgwMDAwMDc5YiB9LCAgLy8gICAjIFNQSSAuU1NJQ1RMICAjIFNldCBTUEkgYWN0aXZlIG1vZGUKKworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwgIC8vICAgIyBTUEkuU1NJVFggICMgUmVsZWFzZSBmcm9tIERlZXAgU3RhbmJ5IG1vZGUKKwl7IDAsICAgICAgICAgICAgICAgICAgICAxICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygxKTsKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMDAwIH0sICAvLyAgICMgU1BJLlNTSVRYICAKKwl7IDAsICAgICAgICAgICAgICAgICAgICAxICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygxKTsKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMDAwIH0sICAvLyAgICMgU1BJLlNTSVRYICAKKwl7IDAsICAgICAgICAgICAgICAgICAgICAxICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygxKTsKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEJBIH0sICAvLyAgICMgU1BJLlNTSVRYICAgICAgICAgICpOT1RFIDEgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMTEgfSwgIC8vICAgICAjIERpc3BsYXkgbW9kZSBzZXR1cCgxKSA6IE5vcm1hbHkgQmxhY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMDM2IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwMCB9LCAgLy8gICAgICMgTWVtb3J5IGFjY2VzcyBjb250cm9sCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgIC8vICAgICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwQkIgfSwgIC8vICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwMCB9LCAgLy8gICAjIERpc3BsYXkgbW9kZSBzZXR1cCgyKQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwM0EgfSwgIC8vICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDE2MCB9LCAgLy8gICAjIFJHQiBJbnRlcmZhY2UgZGF0YSBmb3JtYXQKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBCRiB9LCAgLy8gICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTAwIH0sICAvLyAgICMgRHJpdm5pZyBtZXRob2QKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEIxIH0sICAvLyAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxNUQgfSwgIC8vICAgIyBCb29zdGVyIG9wZXJhdGlvbiBzZXR1cAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEIyIH0sICAvLyAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMzMgfSwgIC8vICAgIyBCb29zdGVyIG1vZGUgc2V0dXAKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEIzIH0sICAvLyAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMjIgfSwgIC8vICAgICAjIEJvb3N0ZXIgZnJlcXVlbmNpZXMgc2V0dXAKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBCNCB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMDIgfSwgIC8vICAgICAjIE9QLWFtcCBjYXBhYmlsaXR5L1N5c3RlbSBjbG9jayBmcmVxLiBkaXZpc2lvbiBzZXR1cAorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwQjUgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTFGIH0sICAvLyAgICAgIyBWQ1MgVm9sdGFnZSBhZGp1c3RtZW50ICAoMUMtPjFGIGZvciBSZXYgMikKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBCNiB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMjggfSwgIC8vICAgICAjIFZDT00gVm9sdGFnZSBhZGp1c3RtZW50CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBCNyB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMDMgfSwgIC8vICAgICAjIENvbmZpZ3VyZSBhbiBleHRlcm5hbCBkaXNwbGF5IHNpZ25hbAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEI5IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEyMCB9LCAgLy8gICAgICMgRENDSy9EQ0VWIHRpbWluZyBzZXR1cAorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwQkQgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTAyIH0sICAvLyAgICAgIyBBU1cgc2lnbmFsIGNvbnRyb2wKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBCRSB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAgfSwgIC8vICAgICAjIER1bW15IGRpc3BsYXkgKHdoaXRlL2JsYWNrKSBjb3VudCBzZXR1cCBmb3IgUVVBRCBEYXRhIG9wZXJhdGlvbgorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwQzAgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTExIH0sICAvLyAgICAgIyB3YWl0X21zKC1vdXQgRlIgY291bnQgc2V0dXAgKEEpCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwQzEgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTExIH0sICAvLyAgICAgIyB3YWl0X21zKC1vdXQgRlIgY291bnQgc2V0dXAgKEIpCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBDMiB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMTEgfSwgIC8vICAgICAjIHdhaXRfbXMoLW91dCBGUiBjb3VudCBzZXR1cCAoQykKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBDMyB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAxMEEgfSwgIC8vICAgICAjIHdhaXRfbXMoLWluIGxpbmUgY2xvY2sgY291bnQgc2V0dXAgKEQpCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwQSB9LCAgLy8gICAgIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEM0IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDE2MCB9LCAgLy8gICAgICMgU2VlcC1pbiBsaW5lIGNsb2NrIGNvdW50IHNldHVwIChFKQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxNjAgfSwgIC8vICAgICAKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBDNSB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAxNjAgfSwgIC8vICAgICAjIHdhaXRfbXMoLWluIGxpbmUgY2xvY2sgY291bnQgc2V0dXAgKEYpCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDE2MCB9LCAgLy8gICAgIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEM2IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDE2MCB9LCAgLy8gICAgICMgd2FpdF9tcygtaW4gbGluZSBjbG9jayBzZXR1cCAoRykKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTYwIH0sICAvLyAgICAgCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwQzcgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMTMzIH0sICAvLyAgICAgIyBHYW1tYSAxIGZpbmUgdHVuaW5nICgxKQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxNDMgfSwgIC8vICAgICAKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBDOCB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxNDQgfSwgIC8vICAgICAjIEdhbW1hIDEgZmluZSB0dW5pbmcgKDIpCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBDOSB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMzMgfSwgIC8vICAgICAjIEdhbW1hIDEgaW5jbGluYXRpb24gYWRqdXN0bWVudAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMENBIH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwMCB9LCAgLy8gICAgICMgR2FtbWEgMSBibHVlIG9mZnNldCBhZGp1c3RtZW50CisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwRUMgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMTAyIH0sICAvLyAgICAgIyBUb3RhbCBudW1iZXIgb2YgaG9yaXpvbnRhbCBjbG9jayBjeWNsZXMgKDEpIFtQQ0xLIFN5bmMuIFZHQSBzZXR0aW5nXQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMTggfSwgIC8vICAgICAKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBDRiB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMDEgfSwgIC8vICAgICAjIEJsYW5raW5nIHBlcmlvZCBjb250cm9sICgxKSBbUENMSyBTeW5jLiBUYWJsZTEgZm9yIFZHQV0KKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBEMCB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAxMTAgfSwgIC8vICAgICAjIEJsYW5raW5nIHBlcmlvZCBjb250cm9sICgyKSBbUENMSyBTeW5jLiBUYWJsZTEgZm9yIFZHQV0KKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTA0IH0sICAvLyAgICAgCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwRDEgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTAxIH0sICAvLyAgICAgIyBDS1YgdGltaW5nIGNvbnRyb2wgb24vb2ZmIFtQQ0xLIFN5bmMuIFRhYmxlMSBmb3IgVkdBXQorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEQyIH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDEwMCB9LCAgLy8gICAgICMgQ0tWMSwyIHRpbWluZyBjb250cm9sIFtQQ0xLIFN5bmMuIFRhYmxlMSBmb3IgVkdBXQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxM0EgfSwgIC8vICAgICAKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBEMyB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAxMDAgfSwgIC8vICAgICAjIE9FViB0aW1pbmcgY29udHJvbCBbUENMSyBTeW5jLiBUYWJsZTEgZm9yIFZHQV0KKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTNBIH0sICAvLyAgICAgCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwRDQgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMTI0IH0sICAvLyAgICAgIyBBU1cgdGltaW5nIGNvbnRyb2wgKDEpIFtQQ0xLIFN5bmMuIFRhYmxlMSBmb3IgVkdBXQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxNkUgfSwgIC8vICAgICAKKwl7IDAsICAgICAgICAgICAgICAgICAgICAxICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygxKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBENSB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMjQgfSwgIC8vICAgICAjIEFTVyB0aW1pbmcgY29udHJvbCAoMikgW1BDTEsgU3luYy4gVGFibGUxIGZvciBWR0FdCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwRUQgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMTAxIH0sICAvLyAgICAgIyBUb3RhbCBudW1iZXIgb2YgaG9yaXpvbnRhbCBjbG9jayBjeWNsZXMgKDIpIFtQQ0xLIFN5bmMuIFRhYmxlMSBmb3IgUVZHQSBdCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwQSB9LCAgLy8gICAgIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEQ2IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwMSB9LCAgLy8gICAgICMgQmxhbmtpbmcgcGVyaW9kIGNvbnRyb2wgKDEpIFtQQ0xLIFN5bmMuIFRhYmxlMiBmb3IgUVZHQV0KKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBENyB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAxMTAgfSwgIC8vICAgICAjIEJsYW5raW5nIHBlcmlvZCBjb250cm9sICgyKSBbUENMSyBTeW5jLiBUYWJsZTIgZm9yIFFWR0FdCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwQSB9LCAgLy8gICAgIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEQ4IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwMSB9LCAgLy8gICAgICMgQ0tWIHRpbWluZyBjb250cm9sIG9uL29mZiBbUENMSyBTeW5jLiBUYWJsZTIgZm9yIFFWR0FdCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwRDkgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMTAwIH0sICAvLyAgICAgIyBDS1YxLDIgdGltaW5nIGNvbnRyb2wgW1BDTEsgU3luYy4gVGFibGUyIGZvciBRVkdBXQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMTQgfSwgIC8vICAgICAKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBERSB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAxMDAgfSwgIC8vICAgICAjIE9FViB0aW1pbmcgY29udHJvbCBbUENMSyBTeW5jLiBUYWJsZTIgZm9yIFFWR0FdCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDExNCB9LCAgLy8gICAgIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMERGIH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDExMiB9LCAgLy8gICAgICMgQVNXIHRpbWluZyBjb250cm9sICgxKSBbUENMSyBTeW5jLiBUYWJsZTIgZm9yIFFWR0FdCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEzRiB9LCAgLy8gICAgIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEUwIH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwQiB9LCAgLy8gICAgICMgQVNXIHRpbWluZyBjb250cm9sICgyKSBbUENMSyBTeW5jLiBUYWJsZTIgZm9yIFFWR0FdCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBFMiB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMDEgfSwgIC8vICAgICAjIEJ1aWx0LWluIG9zY2lsbGF0b3IgZnJlcXVlbmN5IGRpdmlzaW9uIHNldHVwIFtGcmVxdWVuY3kgZGl2aXNpb24gcmF0aW8gOiAyICg2MEhxKQorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEUzIH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEzNiB9LCAgLy8gICAgICMgQnVpbHQtaW4gb3NjaWxsYXRvciBjbG9jayBjb3VudCBzZXR1cAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEU0IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDEwMCB9LCAgLy8gICAgICMgQ0tWIHRpbWluZyBjb250cm9sIGZvciB1c2luZyBidWlsZC1pbiBvc2MKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTAzIH0sICAvLyAgICAgCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMik7ICAgICAgLy8gICAgIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwRTUgfSwgIC8vICAgICAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMTAyIH0sICAvLyAgICAgIyBPRVYgdGltaW5nIGNvbnRyb2wgZm9yIHVzaW5nIGJ1aWxkLWluIG9zYworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMDQgfSwgIC8vICAgICAKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyKTsgICAgICAvLyAgICAjICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBFNiB9LCAgLy8gICAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMDMgfSwgIC8vICAgICAjIERDRVYgdGltaW5nIGNvbnRyb2wgZm9yIHVzaW5nIGJ1aWxkLWluIG9zYworCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEU3IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDEwNCB9LCAgLy8gICAgICMgQVNXIHRpbWluZyBzZXR1cCBmb3IgdXNpbmcgYnVpbGQtaW4gb3NjKDEpCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwQSB9LCAgLy8gICAgIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgfSwgIC8vICB3YWl0X21zKDIpOyAgICAgIC8vICAgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDgwMEU4IH0sICAvLyAgICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDEwNCB9LCAgLy8gICAgICMgQVNXIHRpbWluZyBzZXR1cCBmb3IgdXNpbmcgYnVpbGQtaW4gb3NjKDIpCisgICAgICAgICAgICAKKyAgICAgICAgICAgIAorCXsgQ0xLRU5CLCAgICAgICAgICAgICAgIDB4MDAwMDAxRUYgfSwgIC8vICAgIyBTWVMuQ0xLRU5CICAjIERDTEsgZW5hYmxlCisJeyBTVEFSVCwgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCB9LCAgLy8gICAjIExDRC5TVEFSVCAgIyBMQ0RDIHdhaXRfbXMoIG1vZGUKKwl7IFdSU1RCLCAgICAgICAgICAgICAgICAweDAwMDAwMDNGIH0sICAvLyAgICMgTENELldSU1RCICAjIHdyaXRlX2NsaWVudF9yZWcoIHN0cm9iZQorCXsgUkRTVEIsICAgICAgICAgICAgICAgIDB4MDAwMDA0MzIgfSwgIC8vICAgIyBMQ0QuUkRTVEIgICMgUmVhZCBzdHJvYmUKKwl7IFBPUlRfRU5CLCAgICAgICAgICAgICAweDAwMDAwMDAyIH0sICAvLyAgICMgTENELlBPUlRfRU5CICAjIEFzeW5jaHJvbm91cyBwb3J0IGVuYWJsZQorCXsgVlNZTklGLCAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgfSwgIC8vICAgIyBMQ0QuVlNZTkNJRiAgIyBWU1lOQyBJL0YgbW9kZSBzZXQKKwl7IEFTWV9EQVRBLCAgICAgICAgICAgICAweDgwMDAwMDAwIH0sICAvLyAgICMgTENELkFTWV9EQVR4ICAjIEluZGV4IHNldHRpbmcgb2YgU1VCIExDREQKKwl7IEFTWV9EQVRCLCAgICAgICAgICAgICAweDAwMDAwMDAxIH0sICAvLyAgICAgIyBPc2NpbGxhdG9yIHN0YXJ0CisJeyBBU1lfQ01EU0VULCAgICAgICAgICAgMHgwMDAwMDAwNSB9LCAgLy8gICAjIExDRC5BU1lfQ01EU0VUICAjIERpcmVjdCBjb21tYW5kIHRyYW5zZmVyIGVuYWJsZQorCXsgQVNZX0NNRFNFVCwgICAgICAgICAgIDB4MDAwMDAwMDQgfSwgIC8vICAgIyBMQ0QuQVNZX0NNRFNFVCAgIyBEaXJlY3QgY29tbWFuZCB0cmFuc2ZlciBkaXNhYmxlCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMTAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoMTApOworCXsgQVNZX0RBVEEsICAgICAgICAgICAgIDB4ODAwMDAwMDAgfSwgIC8vICAgIyBMQ0QuQVNZX0RBVHggICMgRFVNTVkgd3JpdGVfY2xpZW50X3JlZyiBQCpOT1RFMgorCXsgQVNZX0RBVEIsICAgICAgICAgICAgIDB4ODAwMDAwMDAgfSwgIC8vICAgICAKKwl7IEFTWV9EQVRDLCAgICAgICAgICAgICAweDgwMDAwMDAwIH0sICAvLyAgICAgCisJeyBBU1lfREFURCwgICAgICAgICAgICAgMHg4MDAwMDAwMCB9LCAgLy8gICAgIAorCXsgQVNZX0NNRFNFVCwgICAgICAgICAgIDB4MDAwMDAwMDkgfSwgIC8vICAgIyBMQ0QuQVNZX0NNRFNFVCAgCisJeyBBU1lfQ01EU0VULCAgICAgICAgICAgMHgwMDAwMDAwOCB9LCAgLy8gICAjIExDRC5BU1lfQ01EU0VUICAKKwl7IEFTWV9EQVRBLCAgICAgICAgICAgICAweDgwMDAwMDA3IH0sICAvLyAgICMgTENELkFTWV9EQVR4ICAjIEluZGV4IHNldHRpbmcgb2YgU1VCIExDREQKKwl7IEFTWV9EQVRCLCAgICAgICAgICAgICAweDAwMDA0MDA1IH0sICAvLyAgICAgIyBMQ0QgZHJpdmVyIGNvbnRyb2wKKwl7IEFTWV9DTURTRVQsICAgICAgICAgICAweDAwMDAwMDA1IH0sICAvLyAgICMgTENELkFTWV9DTURTRVQgICMgRGlyZWN0IGNvbW1hbmQgdHJhbnNmZXIgZW5hYmxlCisJeyBBU1lfQ01EU0VULCAgICAgICAgICAgMHgwMDAwMDAwNCB9LCAgLy8gICAjIExDRC5BU1lfQ01EU0VUICAjIERpcmVjdCBjb21tYW5kIHRyYW5zZmVyIGRpc2FibGUKKwl7IDAsICAgICAgICAgICAgICAgICAgICAyMCAgICAgICAgIH0sICAvLyAgd2FpdF9tcygyMCk7CisJeyBBU1lfREFUQSwgICAgICAgICAgICAgMHg4MDAwMDA1OSB9LCAgLy8gICAjIExDRC5BU1lfREFUeCAgIyBJbmRleCBzZXR0aW5nIG9mIFNVQiBMQ0RECisJeyBBU1lfREFUQiwgICAgICAgICAgICAgMHgwMDAwMDAwMCB9LCAgLy8gICAgICMgTFRQUyBJL0YgY29udHJvbAorCXsgQVNZX0NNRFNFVCwgICAgICAgICAgIDB4MDAwMDAwMDUgfSwgIC8vICAgIyBMQ0QuQVNZX0NNRFNFVCAgIyBEaXJlY3QgY29tbWFuZCB0cmFuc2ZlciBlbmFibGUKKwl7IEFTWV9DTURTRVQsICAgICAgICAgICAweDAwMDAwMDA0IH0sICAvLyAgICMgTENELkFTWV9DTURTRVQgICMgRGlyZWN0IGNvbW1hbmQgdHJhbnNmZXIgZGlzYWJsZQorCisJeyBWU1lOSUYsICAgICAgICAgICAgICAgMHgwMDAwMDAwMSB9LCAgLy8gICAjIExDRC5WU1lOQ0lGICAjIFZTWU5DIEkvRiBtb2RlIE9GRgorCXsgUE9SVF9FTkIsICAgICAgICAgICAgIDB4MDAwMDAwMDEgfSwgIC8vICAgIyBMQ0QuUE9SVF9FTkIgICMgU1lOQyBJL0YgIG91dHB1dCBzZWxlY3QKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwl7IFZTWU5JRiwgICAgICAgICAgICAgICAweDAwMDAwMDAxIH0sICAvLyBWU1lOQyBJL0YgbW9kZSBPRkYKKwl7IFBPUlRfRU5CLCAgICAgICAgICAgICAweDAwMDAwMDAxIH0sICAvLyBTWU5DIEkvRiBtb2RlIE9OCisKKwl7IEJJVE1BUDEsICAgICAgICAgICAgICAweDAxRTAwMEYwIH0sICAvLyBNREMuQklUTUFQMiAgKTsgLy8gU2V0dXAgb2YgUElUQ0ggc2l6ZSB0byBGcmFtZSBidWZmZXIxCisJeyBCSVRNQVAyLCAgICAgICAgICAgICAgMHgwMUUwMDBGMCB9LCAgLy8gTURDLkJJVE1BUDMgICk7IC8vIFNldHVwIG9mIFBJVENIIHNpemUgdG8gRnJhbWUgYnVmZmVyMgorCXsgQklUTUFQMywgICAgICAgICAgICAgIDB4MDFFMDAwRjAgfSwgIC8vIE1EQy5CSVRNQVA0ICApOyAvLyBTZXR1cCBvZiBQSVRDSCBzaXplIHRvIEZyYW1lIGJ1ZmZlcjMKKwl7IEJJVE1BUDQsICAgICAgICAgICAgICAweDAwREMwMEIwIH0sICAvLyBNREMuQklUTUFQNSAgKTsgLy8gU2V0dXAgb2YgUElUQ0ggc2l6ZSB0byBGcmFtZSBidWZmZXI0CisJeyBDTEtFTkIsICAgICAgICAgICAgICAgMHgwMDAwMDFFRiB9LCAgLy8gU1lTLkNMS0VOQiAgKTsgLy8gRENMSyBzdXBwbHkKKwl7IFBPUlRfRU5CLCAgICAgICAgICAgICAweDAwMDAwMDAxIH0sICAvLyBMQ0QuUE9SVF9FTkIgICk7IC8vIFN5bmNocm9ub3VzIHBvcnQgZW5hYmxlCisJeyBQT1JULCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNCB9LCAgLy8gTENELlBPUlQgICk7IC8vIFBvbGFyaXR5IG9mIERFIGlzIHNldCB0byBoaWdoIGFjdGl2ZQorCXsgUFhMLCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIgfSwgIC8vIExDRC5QWEwgICk7IC8vIEFDVE1PREUgMiBzZXQgKDFzdCBmcmFtZSBibGFjayBkYXRhIG91dHB1dCkKKwl7IE1QTEZCVUYsICAgICAgICAgICAgICAweDAwMDAwMDAwIH0sICAvLyBMQ0QuTVBMRkJVRiAgKTsgLy8gU2VsZWN0IHRoZSByZWFkaW5nIGJ1ZmZlcgorCXsgSENZQ0xFLCAgICAgICAgICAgICAgIDB4MDAwMDAxMGIgfSwgIC8vIExDRC5IQ1lDTEUgICk7IC8vIFNldHVwIHRvIFZHQSBzaXplCisJeyBIU1csICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMyB9LCAgLy8gTENELkhTVyAgCisJeyBIREVfU1RBUlQsICAgICAgICAgICAgMHgwMDAwMDAwNyB9LCAgLy8gTENELkhERV9TVEFSVCAgCisJeyBIREVfU0laRSwgICAgICAgICAgICAgMHgwMDAwMDBFRiB9LCAgLy8gTENELkhERV9TSVpFICAKKwl7IFZDWUNMRSwgICAgICAgICAgICAgICAweDAwMDAwMjg1IH0sICAvLyBMQ0QuVkNZQ0xFICAKKwl7IFZTVywgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIH0sICAvLyBMQ0QuVlNXICAKKwl7IFZERV9TVEFSVCwgICAgICAgICAgICAweDAwMDAwMDAzIH0sICAvLyBMQ0QuVkRFX1NUQVJUICAKKwl7IFZERV9TSVpFLCAgICAgICAgICAgICAweDAwMDAwMjdGIH0sICAvLyBMQ0QuVkRFX1NJWkUgIAorCisJeyBTVEFSVCwgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSB9LCAgLy8gTENELlNUQVJUICApOyAvLyBMQ0RDIC0gUGl4ZWwgZGF0YSB0cmFuc2ZlciBzdGFydAorCisJeyAwLCAgICAgICAgICAgICAgICAgICAgMTAgICAgICAgICB9LCAgLy8gIHdhaXRfbXMoIDEwICApOworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwQkMgfSwgIC8vIFNQSS5TU0lUWCAgKTsgLy8gQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxODAgfSwgIC8vIERpc3BsYXkgZGF0YSBzZXR1cAorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAwM0IgfSwgIC8vIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKKwl7IFNTSVRYLCAgICAgICAgICAgICAgICAweDAwMDAwMTAwIH0sICAvLyBRdWFkIERhdGEgY29uZmlndXJhdGlvbiAtIFZHQQorCXsgMCwgICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgfSwgIC8vICB3YWl0X21zKCAxICAgICAgICAgICk7IC8vICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBCMCB9LCAgLy8gQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAxMTYgfSwgIC8vIFBvd2VyIHN1cHBseSBPTi9PRkYgY29udHJvbAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgfSwgIC8vICB3YWl0X21zKCAxICAgICAgICAgICk7IC8vICBXYWl0IFNQSSBmaWZvIGVtcHR5CisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDA4MDBCOCB9LCAgLy8gQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jaworCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwODAxRkYgfSwgIC8vIE91dHB1dCBjb250cm9sCisJeyBTU0lUWCwgICAgICAgICAgICAgICAgMHgwMDAwMDFGNSB9LCAgIAorCXsgMCwgICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgfSwgIC8vICB3YWl0X21zKCAxKTsgICAgICAgICAvLyAgV2FpdCBTUEkgZmlmbyBlbXB0eQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAwMTEgfSwgIC8vIHdhaXRfbXMoLW91dCAoQ29tbWFuZCBvbmx5KQorCXsgU1NJVFgsICAgICAgICAgICAgICAgIDB4MDAwMDAwMjkgfSwgIC8vIERpc3BsYXkgb24gKENvbW1hbmQgb25seSkKKworCXsgU1lTVEVNX0JMT0NLMV9CQVNFLCAgIDB4MDAwMDAwMDIgfSwgIC8vICAgICMgd2FrZVJFUSAtPiBHUElPCisKKwl7IDAsIDAgfQorfTsKKworc3RhdGljIHZvaWQgX3BhbmVsX2luaXQoc3RydWN0IGluaXRfdGFibGUgKmluaXRfdGFibGUpCit7CisJdW5zaWduZWQgbjsKKworCWRwcmludGYoSU5GTywgInBhbmVsX2luaXQoKVxuIik7CisKKwluID0gMDsKKwl3aGlsZSAoaW5pdF90YWJsZVtuXS5yZWcgIT0gMCB8fCBpbml0X3RhYmxlW25dLnZhbCAhPSAwKSB7CisJCWlmIChpbml0X3RhYmxlW25dLnJlZyAhPSAwKQorCQkJbWRkaV9yZW1vdGVfd3JpdGUoaW5pdF90YWJsZVtuXS52YWwsIGluaXRfdGFibGVbbl0ucmVnKTsKKwkJZWxzZQorCQkJdGhyZWFkX3NsZWVwKGluaXRfdGFibGVbbl0udmFsKTsvL21kZWxheShpbml0X3RhYmxlW25dLnZhbCk7CisJCW4rKzsKKwl9CisKKwlkcHJpbnRmKElORk8sICJwYW5lbF9pbml0KCkgZG9uZVxuIik7Cit9CisKK3ZvaWQgcGFuZWxfaW5pdChzdHJ1Y3QgbWRkaV9jbGllbnRfY2FwcyAqY2xpZW50X2NhcHMpCit7CisJc3dpdGNoKGNsaWVudF9jYXBzLT5tYW51ZmFjdHVyZXJfbmFtZSkgeworCWNhc2UgMHhkMjYzOiAvLyBUb3NoaWJhCisJCWRwcmludGYoSU5GTywgIkZvdW5kIFRvc2hpYmEgcGFuZWxcbiIpOworCQlfcGFuZWxfaW5pdCh0b3NoaWJhXzQ4MHg2NDBfaW5pdF90YWJsZSk7CisJCWJyZWFrOworCWNhc2UgMHg0NDc0OiAvLz8/CisJCWlmIChjbGllbnRfY2Fwcy0+cHJvZHVjdF9jb2RlID09IDB4YzA2NSkKKwkJCWRwcmludGYoSU5GTywgIkZvdW5kIFdWR0EgcGFuZWxcbiIpOworCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgcGFuZWxfcG93ZXJvbih2b2lkKQoreworCWdwaW9fc2V0KDg4LCAwKTsKKwlncGlvX2NvbmZpZyg4OCwgR1BJT19PVVRQVVQpOworCXRocmVhZF9zbGVlcCgxKTsgLy91ZGVsYXkoMTApOworCWdwaW9fc2V0KDg4LCAxKTsKKwl0aHJlYWRfc2xlZXAoMTApOyAvL21kZWxheSgxMCk7CisKKwkvL21kZWxheSgxMDAwKTsgLy8gdW5jb21tZW50IGZvciBzZWNvbmQgc3RhZ2UgYm9vdAorfQorCit2b2lkIHBhbmVsX2JhY2tsaWdodChpbnQgb24pCit7fQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L21zbTc2MjVfc3VyZi9ydWxlcy5tayBiL3RhcmdldC9tc203NjI1X3N1cmYvcnVsZXMubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ3M2QwNgotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9tc203NjI1X3N1cmYvcnVsZXMubWsKQEAgLTAsMCArMSwzOSBAQAorTE9DQUxfRElSIDo9ICQoR0VUX0xPQ0FMX0RJUikKKworSU5DTFVERVMgKz0gLUkkKExPQ0FMX0RJUikvaW5jbHVkZSAtSSQoTEtfVE9QX0RJUikvcGxhdGZvcm0vbXNtX3NoYXJlZAorCitQTEFURk9STSA6PSBtc203aworCitNRU1CQVNFIDo9IDB4MDAwMDAwMDAgIyBTTUkKK01FTVNJWkUgOj0gMHgwMDEwMDAwMCAjIDFNQgorCitCQVNFX0FERFIgICAgICAgIDo9IDB4MDAyMDAwMDAKKworVEFHU19BRERSICAgICAgICA6PSBCQVNFX0FERFIrMHgwMDAwMDEwMAorS0VSTkVMX0FERFIgICAgICA6PSBCQVNFX0FERFIrMHgwMDAwODAwMAorUkFNRElTS19BRERSICAgICA6PSBCQVNFX0FERFIrMHgwMTAwMDAwMAorU0NSQVRDSF9BRERSICAgICA6PSBCQVNFX0FERFIrMHgwMjAwODAwMAorCitLRVlTX1VTRV9HUElPX0tFWVBBRCA6PSAxCisKK0RFRklORVMgKz0gRElTUExBWV9UWVBFX01EREk9MAorCitNT0RVTEVTICs9IFwKKwlkZXYva2V5cyBcCisJbGliL3B0YWJsZQorCitERUZJTkVTICs9IFwKKwlTRFJBTV9TSVpFPSQoTUVNU0laRSkgXAorCU1FTUJBU0U9JChNRU1CQVNFKSBcCisJQkFTRV9BRERSPSQoQkFTRV9BRERSKSBcCisJVEFHU19BRERSPSQoVEFHU19BRERSKSBcCisJS0VSTkVMX0FERFI9JChLRVJORUxfQUREUikgXAorCVJBTURJU0tfQUREUj0kKFJBTURJU0tfQUREUikgXAorCVNDUkFUQ0hfQUREUj0kKFNDUkFUQ0hfQUREUikKKworCitPQkpTICs9IFwKKwkkKExPQ0FMX0RJUikvaW5pdC5vIFwKKwkkKExPQ0FMX0RJUikva2V5cGFkLm8gXAorCSQoTE9DQUxfRElSKS9hdGFncy5vIFwKKwkkKExPQ0FMX0RJUikvcGFuZWwubwpkaWZmIC0tZ2l0IGEvdGFyZ2V0L21zbTc2MjVfc3VyZi90b29scy9tYWtlZmlsZSBiL3RhcmdldC9tc203NjI1X3N1cmYvdG9vbHMvbWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJjOGM2MQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9tc203NjI1X3N1cmYvdG9vbHMvbWFrZWZpbGUKQEAgLTAsMCArMSwzNyBAQAorI01ha2VmaWxlIHRvIGdlbmVyYXRlIGFwcHNib290Lm1ibgorCitpZmVxICgkKEJPT1RMT0FERVJfT1VUKSwuKQorQVBQU0JPT1RIRUFERVJfRElSICA6PSAkKEJVSUxERElSKQorZWxzZQorQVBQU0JPT1RIRUFERVJfRElSICA6PSAkKEJPT1RMT0FERVJfT1VUKS8uLi8uLi8KK2VuZGlmCisKK1NSQ19ESVIgIDo9IHRhcmdldC8kKFRBUkdFVCkvdG9vbHMKK0NPTVBJTEVSIDo9IGdjYworCitpZmVxICgkKEVNTUNfQk9PVCksIDEpCisgIEFQUFNCT09USERSX0ZJTEVTIDo9IGVtbWNfYXBwc2Jvb3QubWJuIGVtbWNfYXBwc2Jvb3RoZC5tYm4KK2Vsc2UKKyAgaWZlcSAoJChCVUlMRF9OQU5EV1JJVEUpLCAxKQorICAgIEFQUFNCT09USERSX0ZJTEVTIDo9CisgIGVsc2UKKyAgICBBUFBTQk9PVEhEUl9GSUxFUyA6PSBhcHBzYm9vdC5tYm4gYXBwc2Jvb3RoZC5tYm4KKyAgZW5kaWYKK2VuZGlmCisKK0FQUFNCT09USEVBREVSOiAkKEFQUFNCT09USERSX0ZJTEVTKQorCithcHBzYm9vdC5tYm46ICQoT1VUQklOKQorCWNwIC1mICQoT1VUQklOKSAkKEFQUFNCT09USEVBREVSX0RJUikvYXBwc2Jvb3QubWJuCisKK2FwcHNib290aGQubWJuOiBta2hlYWRlciAkKE9VVEJJTikKKwkkKFNSQ19ESVIpL21raGVhZGVyICQoT1VUQklOKSAkKEFQUFNCT09USEVBREVSX0RJUikvYXBwc2Jvb3RoZC5tYm4KKworZW1tY19hcHBzYm9vdC5tYm46ICQoT1VUQklOKQorCWNwIC1mICQoT1VUQklOKSAkKEFQUFNCT09USEVBREVSX0RJUikvZW1tY19hcHBzYm9vdC5tYm4KKworZW1tY19hcHBzYm9vdGhkLm1ibjogbWtoZWFkZXIgJChPVVRCSU4pCisJJChTUkNfRElSKS9ta2hlYWRlciAkKE9VVEJJTikgJChBUFBTQk9PVEhFQURFUl9ESVIpL2VtbWNfYXBwc2Jvb3RoZC5tYm4gdW5pZmllZC1ib290CisKK21raGVhZGVyOiAkKFNSQ19ESVIpL21raGVhZGVyLmMKKwkke0NPTVBJTEVSfSAkKFNSQ19ESVIpL21raGVhZGVyLmMgLW8gJChTUkNfRElSKS9ta2hlYWRlcgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L21zbTc2MjVfc3VyZi90b29scy9ta2hlYWRlci5jIGIvdGFyZ2V0L21zbTc2MjVfc3VyZi90b29scy9ta2hlYWRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMDM5MDcKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvbXNtNzYyNV9zdXJmL3Rvb2xzL21raGVhZGVyLmMKQEAgLTAsMCArMSw4NyBAQAorLyogQ29weXJpZ2h0IDIwMDcsIEdvb2dsZSBJbmMuICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXN0cnVjdCBzdGF0IHM7CisJdW5zaWduZWQgc2l6ZSwgYmFzZTsKKwlpbnQgdW5pZmllZF9ib290ID0gMDsKKwl1bnNpZ25lZCB1bmlmaWVkX2Jvb3RfbWFnaWNbMjBdOworCXVuc2lnbmVkIG5vbl91bmlmaWVkX2Jvb3RfbWFnaWNbMTBdOworCXVuc2lnbmVkIG1hZ2ljX2xlbiA9IDA7CisJdW5zaWduZWQgKm1hZ2ljOworCWludCBmZDsKKworCWlmKGFyZ2MgPCAzKSB7CisJCWZwcmludGYoc3RkZXJyLCJ1c2FnZTogbWtoZWFkZXIgPGJpbj4gPGhkcj5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGFyZ2MgPT0gNCkgeworCQlpZighc3RyY21wKCJ1bmlmaWVkLWJvb3QiLGFyZ3ZbM10pKSB7CisJCQl1bmlmaWVkX2Jvb3QgPSAxOworCQl9CisJfQorCisJaWYoc3RhdChhcmd2WzFdLCAmcykpIHsKKwkJcGVycm9yKCJjYW5ub3Qgc3RhdCBiaW5hcnkiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmKHVuaWZpZWRfYm9vdCkgeworCQltYWdpYyA9IHVuaWZpZWRfYm9vdF9tYWdpYzsKKwkJbWFnaWNfbGVuID0gc2l6ZW9mKHVuaWZpZWRfYm9vdF9tYWdpYyk7CisJfSBlbHNlIHsKKwkJbWFnaWMgPSBub25fdW5pZmllZF9ib290X21hZ2ljOworCQltYWdpY19sZW4gPSBzaXplb2Yobm9uX3VuaWZpZWRfYm9vdF9tYWdpYyk7CisJfQorCisJc2l6ZSA9IHMuc3Rfc2l6ZTsKKwliYXNlID0gMDsKKworCW1hZ2ljWzBdID0gMHgwMDAwMDAwNTsgLyogYXBwc2JsICovCisJbWFnaWNbMV0gPSAweDAwMDAwMDAyOyAvKiBuYW5kICovCisJbWFnaWNbMl0gPSAweDAwMDAwMDAwOworCW1hZ2ljWzNdID0gYmFzZTsKKwltYWdpY1s0XSA9IHNpemU7CisJbWFnaWNbNV0gPSBzaXplOworCW1hZ2ljWzZdID0gc2l6ZSArIGJhc2U7CisJbWFnaWNbN10gPSAweDAwMDAwMDAwOworCW1hZ2ljWzhdID0gc2l6ZSArIGJhc2U7CisJbWFnaWNbOV0gPSAweDAwMDAwMDAwOworCisJaWYgKHVuaWZpZWRfYm9vdCA9PSAxKQorCXsKKwkJbWFnaWNbMTBdID0gMHgzMzgzNjY4NTsgLyogY29va2llIG1hZ2ljIG51bWJlciAqLworCQltYWdpY1sxMV0gPSAweDAwMDAwMDAxOyAvKiBjb29raWUgdmVyc2lvbiAqLworCQltYWdpY1sxMl0gPSAweDAwMDAwMDAyOyAvKiBmaWxlIGZvcm1hdHMgKi8KKwkJbWFnaWNbMTNdID0gMHgwMDAwMDAwMDsKKwkJbWFnaWNbMTRdID0gMHgwMDUwMDAwMDsgLyogNU0gZm9yIGJvb3QuaW1nICovCisJCW1hZ2ljWzE1XSA9IDB4MDAwMDAwMDA7CisJCW1hZ2ljWzE2XSA9IDB4MDAwMDAwMDA7CisJCW1hZ2ljWzE3XSA9IDB4MDAwMDAwMDA7CisJCW1hZ2ljWzE4XSA9IDB4MDAwMDAwMDA7CisJCW1hZ2ljWzE5XSA9IDB4MDAwMDAwMDA7CisJfQorCisJZmQgPSBvcGVuKGFyZ3ZbMl0sIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2NDQpOworCWlmKGZkIDwgMCkgeworCQlwZXJyb3IoImNhbm5vdCBvcGVuIGhlYWRlciBmb3Igd3JpdGluZyIpOworCQlyZXR1cm4gLTE7CisJfQorCWlmKHdyaXRlKGZkLCBtYWdpYywgbWFnaWNfbGVuKSAhPSBtYWdpY19sZW4pIHsKKwkJcGVycm9yKCJjYW5ub3Qgd3JpdGUgaGVhZGVyIik7CisJCWNsb3NlKGZkKTsKKwkJdW5saW5rKGFyZ3ZbMl0pOworCQlyZXR1cm4gLTE7CisJfQorCWNsb3NlKGZkKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L21zbTc2MjdfZmZhL2luaXQuYyBiL3RhcmdldC9tc203NjI3X2ZmYS9pbml0LmMKaW5kZXggZDgyZmY1OS4uMmQ4YWMyNSAxMDA2NDQKLS0tIGEvdGFyZ2V0L21zbTc2MjdfZmZhL2luaXQuYworKysgYi90YXJnZXQvbXNtNzYyN19mZmEvaW5pdC5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8ZGV2L2dwaW9fa2V5cGFkLmg+CiAjaW5jbHVkZSA8bGliL3B0YWJsZS5oPgogI2luY2x1ZGUgPGRldi9mbGFzaC5oPgorI2luY2x1ZGUgPHNtZW0uaD4KIAogI2RlZmluZSBMSU5VWF9NQUNIVFlQRSAgMTAwNzAxNQogCkBAIC02Niw2ICs2NywxMSBAQAogCX0sCiAJewogCQkuc3RhcnQgPSA3MDQsCisJCS5sZW5ndGggPSA0MCAvKiA1TUIgKi8sCisJCS5uYW1lID0gInJlY292ZXJ5IiwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gNzQ0LAogCQkubGVuZ3RoID0gNzIwIC8qIDkwTUIgKi8sCiAJCS5uYW1lID0gInVzZXJkYXRhIiwKIAl9LApAQCAtMTI0LDMgKzEzMCwyNCBAQAogewogICAgIHJldHVybiBMSU5VWF9NQUNIVFlQRTsKIH0KKwordm9pZCByZWJvb3RfZGV2aWNlKHVuc2lnbmVkIHJlYm9vdF9yZWFzb24pCit7CisgICAgcmVib290KHJlYm9vdF9yZWFzb24pOworfQorCit1bnNpZ25lZCBjaGVja19yZWJvb3RfbW9kZSh2b2lkKQoreworICAgIHVuc2lnbmVkIG1vZGVbMl0gPSB7MCwgMH07CisgICAgdW5zaWduZWQgaW50IG1vZGVfbGVuID0gc2l6ZW9mKG1vZGUpOworICAgIHVuc2lnbmVkIHNtZW1fc3RhdHVzOworCisgICAgc21lbV9zdGF0dXMgPSBzbWVtX3JlYWRfYWxsb2NfZW50cnkoU01FTV9BUFBTX0JPT1RfTU9ERSwKKwkJCQkJJm1vZGUsIG1vZGVfbGVuICk7CisgICAgaWYoc21lbV9zdGF0dXMpCisgICAgeworICAgICAgZHByaW50ZihDUklUSUNBTCwgIkVSUk9SOiB1bmFibGUgdG8gcmVhZCBzaGFyZWQgbWVtb3J5IGZvciByZWJvb3QgbW9kZVxuIik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG1vZGVbMF07Cit9CmRpZmYgLS1naXQgYS90YXJnZXQvbXNtNzYyN19mZmEvcnVsZXMubWsgYi90YXJnZXQvbXNtNzYyN19mZmEvcnVsZXMubWsKaW5kZXggOTU1NDcxYy4uYzQ3M2QwNiAxMDA3NTUKLS0tIGEvdGFyZ2V0L21zbTc2MjdfZmZhL3J1bGVzLm1rCisrKyBiL3RhcmdldC9tc203NjI3X2ZmYS9ydWxlcy5tawpAQCAtMSwxMSArMSwxMSBAQAogTE9DQUxfRElSIDo9ICQoR0VUX0xPQ0FMX0RJUikKIAotSU5DTFVERVMgKz0gLUkkKExPQ0FMX0RJUikvaW5jbHVkZQorSU5DTFVERVMgKz0gLUkkKExPQ0FMX0RJUikvaW5jbHVkZSAtSSQoTEtfVE9QX0RJUikvcGxhdGZvcm0vbXNtX3NoYXJlZAogCiBQTEFURk9STSA6PSBtc203awogCiBNRU1CQVNFIDo9IDB4MDAwMDAwMDAgIyBTTUkKLU1FTVNJWkUgOj0gMHgwMDgwMDAwMCAjIDhNQgorTUVNU0laRSA6PSAweDAwMTAwMDAwICMgMU1CCiAKIEJBU0VfQUREUiAgICAgICAgOj0gMHgwMDIwMDAwMAogCmRpZmYgLS1naXQgYS90YXJnZXQvbXNtNzYyN19zdXJmL2luaXQuYyBiL3RhcmdldC9tc203NjI3X3N1cmYvaW5pdC5jCmluZGV4IDhhNTdkNTYuLmQxOThmZTMgMTAwNjQ0Ci0tLSBhL3RhcmdldC9tc203NjI3X3N1cmYvaW5pdC5jCisrKyBiL3RhcmdldC9tc203NjI3X3N1cmYvaW5pdC5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8ZGV2L2dwaW9fa2V5cGFkLmg+CiAjaW5jbHVkZSA8bGliL3B0YWJsZS5oPgogI2luY2x1ZGUgPGRldi9mbGFzaC5oPgorI2luY2x1ZGUgPHNtZW0uaD4KIAogI2RlZmluZSBMSU5VWF9NQUNIVFlQRSAgMTAwNzAxNAogCkBAIC02Niw2ICs2NywxMSBAQAogCX0sCiAJewogCQkuc3RhcnQgPSA3MDQsCisJCS5sZW5ndGggPSA0MCAvKiA1TUIgKi8sCisJCS5uYW1lID0gInJlY292ZXJ5IiwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gNzQ0LAogCQkubGVuZ3RoID0gNzIwIC8qIDkwTUIgKi8sCiAJCS5uYW1lID0gInVzZXJkYXRhIiwKIAl9LApAQCAtMTI0LDMgKzEzMCwyNCBAQAogewogICAgIHJldHVybiBMSU5VWF9NQUNIVFlQRTsKIH0KKwordm9pZCByZWJvb3RfZGV2aWNlKHVuc2lnbmVkIHJlYm9vdF9yZWFzb24pCit7CisgICAgcmVib290KHJlYm9vdF9yZWFzb24pOworfQorCit1bnNpZ25lZCBjaGVja19yZWJvb3RfbW9kZSh2b2lkKQoreworICAgIHVuc2lnbmVkIG1vZGVbMl0gPSB7MCwgMH07CisgICAgdW5zaWduZWQgaW50IG1vZGVfbGVuID0gc2l6ZW9mKG1vZGUpOworICAgIHVuc2lnbmVkIHNtZW1fc3RhdHVzOworCisgICAgc21lbV9zdGF0dXMgPSBzbWVtX3JlYWRfYWxsb2NfZW50cnkoU01FTV9BUFBTX0JPT1RfTU9ERSwKKwkJCQkJJm1vZGUsIG1vZGVfbGVuICk7CisgICAgaWYoc21lbV9zdGF0dXMpCisgICAgeworICAgICAgZHByaW50ZihDUklUSUNBTCwgIkVSUk9SOiB1bmFibGUgdG8gcmVhZCBzaGFyZWQgbWVtb3J5IGZvciByZWJvb3QgbW9kZVxuIik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG1vZGVbMF07Cit9CmRpZmYgLS1naXQgYS90YXJnZXQvbXNtNzYyN19zdXJmL3J1bGVzLm1rIGIvdGFyZ2V0L21zbTc2Mjdfc3VyZi9ydWxlcy5tawppbmRleCA5NTU0NzFjLi5jNDczZDA2IDEwMDY0NAotLS0gYS90YXJnZXQvbXNtNzYyN19zdXJmL3J1bGVzLm1rCisrKyBiL3RhcmdldC9tc203NjI3X3N1cmYvcnVsZXMubWsKQEAgLTEsMTEgKzEsMTEgQEAKIExPQ0FMX0RJUiA6PSAkKEdFVF9MT0NBTF9ESVIpCiAKLUlOQ0xVREVTICs9IC1JJChMT0NBTF9ESVIpL2luY2x1ZGUKK0lOQ0xVREVTICs9IC1JJChMT0NBTF9ESVIpL2luY2x1ZGUgLUkkKExLX1RPUF9ESVIpL3BsYXRmb3JtL21zbV9zaGFyZWQKIAogUExBVEZPUk0gOj0gbXNtN2sKIAogTUVNQkFTRSA6PSAweDAwMDAwMDAwICMgU01JCi1NRU1TSVpFIDo9IDB4MDA4MDAwMDAgIyA4TUIKK01FTVNJWkUgOj0gMHgwMDEwMDAwMCAjIDFNQgogCiBCQVNFX0FERFIgICAgICAgIDo9IDB4MDAyMDAwMDAKIApkaWZmIC0tZ2l0IGEvdGFyZ2V0L21zbTc2MzBfc3VyZi9pbml0LmMgYi90YXJnZXQvbXNtNzYzMF9zdXJmL2luaXQuYwppbmRleCA5MzMyNzE4Li4xZjExMzZjIDEwMDY0NAotLS0gYS90YXJnZXQvbXNtNzYzMF9zdXJmL2luaXQuYworKysgYi90YXJnZXQvbXNtNzYzMF9zdXJmL2luaXQuYwpAQCAtNjQsMjIgKzY0LDI3IEBACiBzdGF0aWMgc3RydWN0IHB0ZW50cnkgYm9hcmRfcGFydF9saXN0W10gPSB7CiAJewogCQkuc3RhcnQgPSAwLAotCQkubGVuZ3RoID0gNDAsCisJCS5sZW5ndGggPSAyMCAgLyogNU1CICovLAogCQkubmFtZSA9ICJib290IiwKIAl9LAogCXsKLQkJLnN0YXJ0ID0gNTYsCi0JCS5sZW5ndGggPSAzMTIgLyogNzZNQiAqLywKKwkJLnN0YXJ0ID0gMjAsCisJCS5sZW5ndGggPSAzMjAgLyogODBNQiAqLywKIAkJLm5hbWUgPSAic3lzdGVtIiwKIAl9LAogCXsKLQkJLnN0YXJ0ID0gMzcyLAotCQkubGVuZ3RoID0gMzA0IC8qIDc2TUIgKi8sCisJCS5zdGFydCA9IDM0MCwKKwkJLmxlbmd0aCA9IDIwIC8qIDVNQiAqLywKIAkJLm5hbWUgPSAiY2FjaGUiLAogCX0sCiAJewotCQkuc3RhcnQgPSA2ODAsCi0JCS5sZW5ndGggPSAzMDQgLyogNzZNQiAqLywKKwkJLnN0YXJ0ID0gMzYwLAorCQkubGVuZ3RoID0gMjAgLyogNU1CICovLAorCQkubmFtZSA9ICJyZWNvdmVyeSIsCisJfSwKKwl7CisJCS5zdGFydCA9IDM4MCwKKwkJLmxlbmd0aCA9IDQwMCAvKiAxMDBNQiAqLywKIAkJLm5hbWUgPSAidXNlcmRhdGEiLAogCX0sCiB9OwpAQCAtMTg3LDMgKzE5MiwyNCBAQAogCiAgICAgcmV0dXJuIGVtbWNfYm9vdDsKIH0KKwordm9pZCByZWJvb3RfZGV2aWNlKHVuc2lnbmVkIHJlYm9vdF9yZWFzb24pCit7CisgICAgcmVib290KHJlYm9vdF9yZWFzb24pOworfQorCit1bnNpZ25lZCBjaGVja19yZWJvb3RfbW9kZSh2b2lkKQoreworICAgIHVuc2lnbmVkIG1vZGVbMl0gPSB7MCwgMH07CisgICAgdW5zaWduZWQgaW50IG1vZGVfbGVuID0gc2l6ZW9mKG1vZGUpOworICAgIHVuc2lnbmVkIHNtZW1fc3RhdHVzOworCisgICAgc21lbV9zdGF0dXMgPSBzbWVtX3JlYWRfYWxsb2NfZW50cnkoU01FTV9BUFBTX0JPT1RfTU9ERSwKKwkJCQkJJm1vZGUsIG1vZGVfbGVuICk7CisgICAgaWYoc21lbV9zdGF0dXMpCisgICAgeworICAgICAgZHByaW50ZihDUklUSUNBTCwgIkVSUk9SOiB1bmFibGUgdG8gcmVhZCBzaGFyZWQgbWVtb3J5IGZvciByZWJvb3QgbW9kZVxuIik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG1vZGVbMF07Cit9CmRpZmYgLS1naXQgYS90YXJnZXQvbXNtNzYzMF9zdXJmL2tleXBhZC5jIGIvdGFyZ2V0L21zbTc2MzBfc3VyZi9rZXlwYWQuYwppbmRleCA0ZmE2OTEzLi41MTZlYWI2IDEwMDY0NAotLS0gYS90YXJnZXQvbXNtNzYzMF9zdXJmL2tleXBhZC5jCisrKyBiL3RhcmdldC9tc203NjMwX3N1cmYva2V5cGFkLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBxd2VydHlfa2V5bWFwW10gPSB7CiAgICAgW0tFWU1BUF9JTkRFWCg0LCAyKV0gPSBLRVlfQkFDSywgICAgICAgICAgLyogLUwgb24gU1VSRiAmIEZGQSAqLworICAgIFtLRVlNQVBfSU5ERVgoMSwgNCldID0gS0VZX0NMRUFSLCAgICAgICAgIC8qICctJyBvZiBsZWZ0IHNpZGUgc3dpdGNoIG9uIEZMVUlEICovCiB9OwogCiBzdGF0aWMgc3RydWN0IHF3ZXJ0eV9rZXlwYWRfaW5mbyBxd2VydHlfa2V5cGFkID0gewpkaWZmIC0tZ2l0IGEvdGFyZ2V0L21zbTc2MzBfc3VyZi9ydWxlcy5tayBiL3RhcmdldC9tc203NjMwX3N1cmYvcnVsZXMubWsKaW5kZXggOGJiYjBmNi4uOWNjMDE3ZCAxMDA2NDQKLS0tIGEvdGFyZ2V0L21zbTc2MzBfc3VyZi9ydWxlcy5taworKysgYi90YXJnZXQvbXNtNzYzMF9zdXJmL3J1bGVzLm1rCkBAIC01LDcgKzUsNyBAQAogUExBVEZPUk0gOj0gbXNtN3gzMAogCiBNRU1CQVNFIDo9IDB4MDAwMDAwMDAgIyBTTUkKLU1FTVNJWkUgOj0gMHgwMDgwMDAwMCAjIDhNQgorTUVNU0laRSA6PSAweDAwMTAwMDAwICMgMU1CCiAKIEJBU0VfQUREUiAgICAgICAgOj0gMHgwMDIwMDAwMAogCmRpZmYgLS1naXQgYS90YXJnZXQvcXNkODI1MF9mZmEvaW5pdC5jIGIvdGFyZ2V0L3FzZDgyNTBfZmZhL2luaXQuYwppbmRleCBhODZkZGM3Li5lY2I1Yjg5IDEwMDY0NAotLS0gYS90YXJnZXQvcXNkODI1MF9mZmEvaW5pdC5jCisrKyBiL3RhcmdldC9xc2Q4MjUwX2ZmYS9pbml0LmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxkZXYvZ3Bpb19rZXlwYWQuaD4KICNpbmNsdWRlIDxsaWIvcHRhYmxlLmg+CiAjaW5jbHVkZSA8ZGV2L2ZsYXNoLmg+CisjaW5jbHVkZSA8c21lbS5oPgogCiAjZGVmaW5lIExJTlVYX01BQ0hUWVBFICAxMDA4MDAyCiAKQEAgLTEyNCwzICsxMjUsMjQgQEAKIHsKICAgICByZXR1cm4gTElOVVhfTUFDSFRZUEU7CiB9CisKK3ZvaWQgcmVib290X2RldmljZSh1bnNpZ25lZCByZWJvb3RfcmVhc29uKQoreworICAgIHJlYm9vdChyZWJvb3RfcmVhc29uKTsKK30KKwordW5zaWduZWQgY2hlY2tfcmVib290X21vZGUodm9pZCkKK3sKKyAgICB1bnNpZ25lZCBtb2RlWzJdID0gezAsIDB9OworICAgIHVuc2lnbmVkIGludCBtb2RlX2xlbiA9IHNpemVvZihtb2RlKTsKKyAgICB1bnNpZ25lZCBzbWVtX3N0YXR1czsKKworICAgIHNtZW1fc3RhdHVzID0gc21lbV9yZWFkX2FsbG9jX2VudHJ5KFNNRU1fQVBQU19CT09UX01PREUsCisJCQkJCSZtb2RlLCBtb2RlX2xlbiApOworICAgIGlmKHNtZW1fc3RhdHVzKQorICAgIHsKKyAgICAgIGRwcmludGYoQ1JJVElDQUwsICJFUlJPUjogdW5hYmxlIHRvIHJlYWQgc2hhcmVkIG1lbW9yeSBmb3IgcmVib290IG1vZGVcbiIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBtb2RlWzBdOworfQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3FzZDgyNTBfZmZhL3J1bGVzLm1rIGIvdGFyZ2V0L3FzZDgyNTBfZmZhL3J1bGVzLm1rCmluZGV4IGZkM2Y5NzQuLjNlZDQ3NmYgMTAwNjQ0Ci0tLSBhL3RhcmdldC9xc2Q4MjUwX2ZmYS9ydWxlcy5taworKysgYi90YXJnZXQvcXNkODI1MF9mZmEvcnVsZXMubWsKQEAgLTEsMTEgKzEsMTEgQEAKIExPQ0FMX0RJUiA6PSAkKEdFVF9MT0NBTF9ESVIpCiAKLUlOQ0xVREVTICs9IC1JJChMT0NBTF9ESVIpL2luY2x1ZGUKK0lOQ0xVREVTICs9IC1JJChMT0NBTF9ESVIpL2luY2x1ZGUgLUkkKExLX1RPUF9ESVIpL3BsYXRmb3JtL21zbV9zaGFyZWQKIAogUExBVEZPUk0gOj0gcXNkOGsKIAogTUVNQkFTRSA6PSAweDAwMDAwMDAwICMgU01JCi1NRU1TSVpFIDo9IDB4MDA4MDAwMDAgIyA4TUIKK01FTVNJWkUgOj0gMHgwMDEwMDAwMCAjIDFNQgogCiBCQVNFX0FERFIgICAgICAgIDo9IDB4MjAwMDAwMDAKIApkaWZmIC0tZ2l0IGEvdGFyZ2V0L3FzZDgyNTBfc3VyZi9pbml0LmMgYi90YXJnZXQvcXNkODI1MF9zdXJmL2luaXQuYwppbmRleCBjYmZlZWFmLi5kZDkzN2EyIDEwMDY0NAotLS0gYS90YXJnZXQvcXNkODI1MF9zdXJmL2luaXQuYworKysgYi90YXJnZXQvcXNkODI1MF9zdXJmL2luaXQuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGRldi9ncGlvX2tleXBhZC5oPgogI2luY2x1ZGUgPGxpYi9wdGFibGUuaD4KICNpbmNsdWRlIDxkZXYvZmxhc2guaD4KKyNpbmNsdWRlIDxzbWVtLmg+CiAKICNkZWZpbmUgTElOVVhfTUFDSFRZUEUgIDEwMDgwMDAKIApAQCAtMTIzLDMgKzEyNCwyNCBAQAogewogICAgIHJldHVybiBMSU5VWF9NQUNIVFlQRTsKIH0KKwordm9pZCByZWJvb3RfZGV2aWNlKHVuc2lnbmVkIHJlYm9vdF9yZWFzb24pCit7CisgICAgcmVib290KHJlYm9vdF9yZWFzb24pOworfQorCit1bnNpZ25lZCBjaGVja19yZWJvb3RfbW9kZSh2b2lkKQoreworICAgIHVuc2lnbmVkIG1vZGVbMl0gPSB7MCwgMH07CisgICAgdW5zaWduZWQgaW50IG1vZGVfbGVuID0gc2l6ZW9mKG1vZGUpOworICAgIHVuc2lnbmVkIHNtZW1fc3RhdHVzOworCisgICAgc21lbV9zdGF0dXMgPSBzbWVtX3JlYWRfYWxsb2NfZW50cnkoU01FTV9BUFBTX0JPT1RfTU9ERSwKKwkJCQkJJm1vZGUsIG1vZGVfbGVuICk7CisgICAgaWYoc21lbV9zdGF0dXMpCisgICAgeworICAgICAgZHByaW50ZihDUklUSUNBTCwgIkVSUk9SOiB1bmFibGUgdG8gcmVhZCBzaGFyZWQgbWVtb3J5IGZvciByZWJvb3QgbW9kZVxuIik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG1vZGVbMF07Cit9CmRpZmYgLS1naXQgYS90YXJnZXQvcXNkODI1MF9zdXJmL3J1bGVzLm1rIGIvdGFyZ2V0L3FzZDgyNTBfc3VyZi9ydWxlcy5tawppbmRleCBmZDNmOTc0Li4zZWQ0NzZmIDEwMDY0NAotLS0gYS90YXJnZXQvcXNkODI1MF9zdXJmL3J1bGVzLm1rCisrKyBiL3RhcmdldC9xc2Q4MjUwX3N1cmYvcnVsZXMubWsKQEAgLTEsMTEgKzEsMTEgQEAKIExPQ0FMX0RJUiA6PSAkKEdFVF9MT0NBTF9ESVIpCiAKLUlOQ0xVREVTICs9IC1JJChMT0NBTF9ESVIpL2luY2x1ZGUKK0lOQ0xVREVTICs9IC1JJChMT0NBTF9ESVIpL2luY2x1ZGUgLUkkKExLX1RPUF9ESVIpL3BsYXRmb3JtL21zbV9zaGFyZWQKIAogUExBVEZPUk0gOj0gcXNkOGsKIAogTUVNQkFTRSA6PSAweDAwMDAwMDAwICMgU01JCi1NRU1TSVpFIDo9IDB4MDA4MDAwMDAgIyA4TUIKK01FTVNJWkUgOj0gMHgwMDEwMDAwMCAjIDFNQgogCiBCQVNFX0FERFIgICAgICAgIDo9IDB4MjAwMDAwMDAKIAo=