ZGlmZiAtLWdpdCBhL2Jsb2NrL2JzZy5jIGIvYmxvY2svYnNnLmMKaW5kZXggZjUxMTcyZS4uMjNlYTRmZCAxMDA2NDQKLS0tIGEvYmxvY2svYnNnLmMKKysrIGIvYmxvY2svYnNnLmMKQEAgLTY5OSwxNCArNjk5LDI2IEBACiAJcmV0dXJuIGJkOwogfQogCitzdGF0aWMgdm9pZCBic2dfa3JlZl9yZWxlYXNlX2Z1bmN0aW9uKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBic2dfY2xhc3NfZGV2aWNlICpiY2QgPQorCQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGJzZ19jbGFzc19kZXZpY2UsIHJlZik7CisKKwlpZiAoYmNkLT5yZWxlYXNlKQorCQliY2QtPnJlbGVhc2UoYmNkLT5wYXJlbnQpOworCisJcHV0X2RldmljZShiY2QtPnBhcmVudCk7Cit9CisKIHN0YXRpYyBpbnQgYnNnX3B1dF9kZXZpY2Uoc3RydWN0IGJzZ19kZXZpY2UgKmJkKQogewotCWludCByZXQgPSAwOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGJkLT5xdWV1ZS0+YnNnX2Rldi5kZXY7CisJaW50IHJldCA9IDAsIGRvX2ZyZWU7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBiZC0+cXVldWU7CiAKIAltdXRleF9sb2NrKCZic2dfbXV0ZXgpOwogCi0JaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZiZC0+cmVmX2NvdW50KSkKKwlkb19mcmVlID0gYXRvbWljX2RlY19hbmRfdGVzdCgmYmQtPnJlZl9jb3VudCk7CisJaWYgKCFkb19mcmVlKQogCQlnb3RvIG91dDsKIAogCWRwcmludGsoIiVzOiB0ZWFyaW5nIGRvd25cbiIsIGJkLT5uYW1lKTsKQEAgLTcyMywxMiArNzM1LDEzIEBACiAJICovCiAJcmV0ID0gYnNnX2NvbXBsZXRlX2FsbF9jb21tYW5kcyhiZCk7CiAKLQlibGtfcHV0X3F1ZXVlKGJkLT5xdWV1ZSk7CiAJaGxpc3RfZGVsKCZiZC0+ZGV2X2xpc3QpOwogCWtmcmVlKGJkKTsKIG91dDoKIAltdXRleF91bmxvY2soJmJzZ19tdXRleCk7Ci0JcHV0X2RldmljZShkZXYpOworCWtyZWZfcHV0KCZxLT5ic2dfZGV2LnJlZiwgYnNnX2tyZWZfcmVsZWFzZV9mdW5jdGlvbik7CisJaWYgKGRvX2ZyZWUpCisJCWJsa19wdXRfcXVldWUocSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNzk2LDcgKzgwOSw3IEBACiAJbXV0ZXhfbG9jaygmYnNnX211dGV4KTsKIAliY2QgPSBpZHJfZmluZCgmYnNnX21pbm9yX2lkciwgaW1pbm9yKGlub2RlKSk7CiAJaWYgKGJjZCkKLQkJZ2V0X2RldmljZShiY2QtPmRldik7CisJCWtyZWZfZ2V0KCZiY2QtPnJlZik7CiAJbXV0ZXhfdW5sb2NrKCZic2dfbXV0ZXgpOwogCiAJaWYgKCFiY2QpCkBAIC04MDgsNyArODIxLDcgQEAKIAogCWJkID0gYnNnX2FkZF9kZXZpY2UoaW5vZGUsIGJjZC0+cXVldWUsIGZpbGUpOwogCWlmIChJU19FUlIoYmQpKQotCQlwdXRfZGV2aWNlKGJjZC0+ZGV2KTsKKwkJa3JlZl9wdXQoJmJjZC0+cmVmLCBic2dfa3JlZl9yZWxlYXNlX2Z1bmN0aW9uKTsKIAogCXJldHVybiBiZDsKIH0KQEAgLTk0NywxNCArOTYwLDE0IEBACiAJaWRyX3JlbW92ZSgmYnNnX21pbm9yX2lkciwgYmNkLT5taW5vcik7CiAJc3lzZnNfcmVtb3ZlX2xpbmsoJnEtPmtvYmosICJic2ciKTsKIAlkZXZpY2VfdW5yZWdpc3RlcihiY2QtPmNsYXNzX2Rldik7Ci0JcHV0X2RldmljZShiY2QtPmRldik7CiAJYmNkLT5jbGFzc19kZXYgPSBOVUxMOworCWtyZWZfcHV0KCZiY2QtPnJlZiwgYnNnX2tyZWZfcmVsZWFzZV9mdW5jdGlvbik7CiAJbXV0ZXhfdW5sb2NrKCZic2dfbXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYnNnX3VucmVnaXN0ZXJfcXVldWUpOwogCi1pbnQgYnNnX3JlZ2lzdGVyX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgZGV2aWNlICpnZGV2LAotCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSkKK2ludCBic2dfcmVnaXN0ZXJfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCwKKwkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgZGV2aWNlICopKQogewogCXN0cnVjdCBic2dfY2xhc3NfZGV2aWNlICpiY2Q7CiAJZGV2X3QgZGV2OwpAQCAtOTY1LDcgKzk3OCw3IEBACiAJaWYgKG5hbWUpCiAJCWRldm5hbWUgPSBuYW1lOwogCWVsc2UKLQkJZGV2bmFtZSA9IGdkZXYtPmJ1c19pZDsKKwkJZGV2bmFtZSA9IHBhcmVudC0+YnVzX2lkOwogCiAJLyoKIAkgKiB3ZSBuZWVkIGEgcHJvcGVyIHRyYW5zcG9ydCB0byBzZW5kIGNvbW1hbmRzLCBub3QgYSBzdGFja2VkIGRldmljZQpAQCAtOTk2LDkgKzEwMDksMTEgQEAKIAogCWJjZC0+bWlub3IgPSBtaW5vcjsKIAliY2QtPnF1ZXVlID0gcTsKLQliY2QtPmRldiA9IGdldF9kZXZpY2UoZ2Rldik7CisJYmNkLT5wYXJlbnQgPSBnZXRfZGV2aWNlKHBhcmVudCk7CisJYmNkLT5yZWxlYXNlID0gcmVsZWFzZTsKKwlrcmVmX2luaXQoJmJjZC0+cmVmKTsKIAlkZXYgPSBNS0RFVihic2dfbWFqb3IsIGJjZC0+bWlub3IpOwotCWNsYXNzX2RldiA9IGRldmljZV9jcmVhdGUoYnNnX2NsYXNzLCBnZGV2LCBkZXYsICIlcyIsIGRldm5hbWUpOworCWNsYXNzX2RldiA9IGRldmljZV9jcmVhdGUoYnNnX2NsYXNzLCBwYXJlbnQsIGRldiwgIiVzIiwgZGV2bmFtZSk7CiAJaWYgKElTX0VSUihjbGFzc19kZXYpKSB7CiAJCXJldCA9IFBUUl9FUlIoY2xhc3NfZGV2KTsKIAkJZ290byBwdXRfZGV2OwpAQCAtMTAxNyw3ICsxMDMyLDcgQEAKIHVucmVnaXN0ZXJfY2xhc3NfZGV2OgogCWRldmljZV91bnJlZ2lzdGVyKGNsYXNzX2Rldik7CiBwdXRfZGV2OgotCXB1dF9kZXZpY2UoZ2Rldik7CisJcHV0X2RldmljZShwYXJlbnQpOwogcmVtb3ZlX2lkcjoKIAlpZHJfcmVtb3ZlKCZic2dfbWlub3JfaWRyLCBtaW5vcik7CiB1bmxvY2s6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvZW5jbG9zdXJlLmMgYi9kcml2ZXJzL21pc2MvZW5jbG9zdXJlLmMKaW5kZXggZmFmYjU3Zi4uMDczNmNmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2VuY2xvc3VyZS5jCisrKyBiL2RyaXZlcnMvbWlzYy9lbmNsb3N1cmUuYwpAQCAtMzEsNyArMzEsNiBAQAogc3RhdGljIExJU1RfSEVBRChjb250YWluZXJfbGlzdCk7CiBzdGF0aWMgREVGSU5FX01VVEVYKGNvbnRhaW5lcl9saXN0X2xvY2spOwogc3RhdGljIHN0cnVjdCBjbGFzcyBlbmNsb3N1cmVfY2xhc3M7Ci1zdGF0aWMgc3RydWN0IGNsYXNzIGVuY2xvc3VyZV9jb21wb25lbnRfY2xhc3M7CiAKIC8qKgogICogZW5jbG9zdXJlX2ZpbmQgLSBmaW5kIGFuIGVuY2xvc3VyZSBnaXZlbiBhIGRldmljZQpAQCAtMTY2LDYgKzE2NSw0MCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZW5jbG9zdXJlX3VucmVnaXN0ZXIpOwogCisjZGVmaW5lIEVOQ0xPU1VSRV9OQU1FX1NJWkUJNjQKKworc3RhdGljIHZvaWQgZW5jbG9zdXJlX2xpbmtfbmFtZShzdHJ1Y3QgZW5jbG9zdXJlX2NvbXBvbmVudCAqY2RldiwgY2hhciAqbmFtZSkKK3sKKwlzdHJjcHkobmFtZSwgImVuY2xvc3VyZV9kZXZpY2U6Iik7CisJc3RyY2F0KG5hbWUsIGNkZXYtPmNkZXYuYnVzX2lkKTsKK30KKworc3RhdGljIHZvaWQgZW5jbG9zdXJlX3JlbW92ZV9saW5rcyhzdHJ1Y3QgZW5jbG9zdXJlX2NvbXBvbmVudCAqY2RldikKK3sKKwljaGFyIG5hbWVbRU5DTE9TVVJFX05BTUVfU0laRV07CisKKwllbmNsb3N1cmVfbGlua19uYW1lKGNkZXYsIG5hbWUpOworCXN5c2ZzX3JlbW92ZV9saW5rKCZjZGV2LT5kZXYtPmtvYmosIG5hbWUpOworCXN5c2ZzX3JlbW92ZV9saW5rKCZjZGV2LT5jZGV2LmtvYmosICJkZXZpY2UiKTsKK30KKworc3RhdGljIGludCBlbmNsb3N1cmVfYWRkX2xpbmtzKHN0cnVjdCBlbmNsb3N1cmVfY29tcG9uZW50ICpjZGV2KQoreworCWludCBlcnJvcjsKKwljaGFyIG5hbWVbRU5DTE9TVVJFX05BTUVfU0laRV07CisKKwllcnJvciA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZjZGV2LT5jZGV2LmtvYmosICZjZGV2LT5kZXYtPmtvYmosICJkZXZpY2UiKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWVuY2xvc3VyZV9saW5rX25hbWUoY2RldiwgbmFtZSk7CisJZXJyb3IgPSBzeXNmc19jcmVhdGVfbGluaygmY2Rldi0+ZGV2LT5rb2JqLCAmY2Rldi0+Y2Rldi5rb2JqLCBuYW1lKTsKKwlpZiAoZXJyb3IpCisJCXN5c2ZzX3JlbW92ZV9saW5rKCZjZGV2LT5jZGV2LmtvYmosICJkZXZpY2UiKTsKKworCXJldHVybiBlcnJvcjsKK30KKwogc3RhdGljIHZvaWQgZW5jbG9zdXJlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqY2RldikKIHsKIAlzdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSAqZWRldiA9IHRvX2VuY2xvc3VyZV9kZXZpY2UoY2Rldik7CkBAIC0xNzgsMTAgKzIxMSwxNSBAQAogewogCXN0cnVjdCBlbmNsb3N1cmVfY29tcG9uZW50ICpjZGV2ID0gdG9fZW5jbG9zdXJlX2NvbXBvbmVudChkZXYpOwogCi0JcHV0X2RldmljZShjZGV2LT5kZXYpOworCWlmIChjZGV2LT5kZXYpIHsKKwkJZW5jbG9zdXJlX3JlbW92ZV9saW5rcyhjZGV2KTsKKwkJcHV0X2RldmljZShjZGV2LT5kZXYpOworCX0KIAlwdXRfZGV2aWNlKGRldi0+cGFyZW50KTsKIH0KIAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmVuY2xvc3VyZV9ncm91cHNbXTsKKwogLyoqCiAgKiBlbmNsb3N1cmVfY29tcG9uZW50X3JlZ2lzdGVyIC0gYWRkIGEgcGFydGljdWxhciBjb21wb25lbnQgdG8gYW4gZW5jbG9zdXJlCiAgKiBAZWRldjoJdGhlIGVuY2xvc3VyZSB0byBhZGQgdGhlIGNvbXBvbmVudApAQCAtMjE3LDEyICsyNTUsMTQgQEAKIAllY29tcC0+bnVtYmVyID0gbnVtYmVyOwogCWNkZXYgPSAmZWNvbXAtPmNkZXY7CiAJY2Rldi0+cGFyZW50ID0gZ2V0X2RldmljZSgmZWRldi0+ZWRldik7Ci0JY2Rldi0+Y2xhc3MgPSAmZW5jbG9zdXJlX2NvbXBvbmVudF9jbGFzczsKIAlpZiAobmFtZSkKIAkJc25wcmludGYoY2Rldi0+YnVzX2lkLCBCVVNfSURfU0laRSwgIiVzIiwgbmFtZSk7CiAJZWxzZQogCQlzbnByaW50ZihjZGV2LT5idXNfaWQsIEJVU19JRF9TSVpFLCAiJXUiLCBudW1iZXIpOwogCisJY2Rldi0+cmVsZWFzZSA9IGVuY2xvc3VyZV9jb21wb25lbnRfcmVsZWFzZTsKKwljZGV2LT5ncm91cHMgPSBlbmNsb3N1cmVfZ3JvdXBzOworCiAJZXJyID0gZGV2aWNlX3JlZ2lzdGVyKGNkZXYpOwogCWlmIChlcnIpCiAJCUVSUl9QVFIoZXJyKTsKQEAgLTI1NSwxMCArMjk1LDEyIEBACiAKIAljZGV2ID0gJmVkZXYtPmNvbXBvbmVudFtjb21wb25lbnRdOwogCi0JZGV2aWNlX2RlbCgmY2Rldi0+Y2Rldik7CisJaWYgKGNkZXYtPmRldikKKwkJZW5jbG9zdXJlX3JlbW92ZV9saW5rcyhjZGV2KTsKKwogCXB1dF9kZXZpY2UoY2Rldi0+ZGV2KTsKIAljZGV2LT5kZXYgPSBnZXRfZGV2aWNlKGRldik7Ci0JcmV0dXJuIGRldmljZV9hZGQoJmNkZXYtPmNkZXYpOworCXJldHVybiBlbmNsb3N1cmVfYWRkX2xpbmtzKGNkZXYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZW5jbG9zdXJlX2FkZF9kZXZpY2UpOwogCkBAIC00NDIsMjQgKzQ4NCwzMiBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBlbmNsb3N1cmVfY29tcG9uZW50X2F0dHJzW10gPSB7Ci0JX19BVFRSKGZhdWx0LCBTX0lSVUdPIHwgU19JV1VTUiwgZ2V0X2NvbXBvbmVudF9mYXVsdCwKLQkgICAgICAgc2V0X2NvbXBvbmVudF9mYXVsdCksCi0JX19BVFRSKHN0YXR1cywgU19JUlVHTyB8IFNfSVdVU1IsIGdldF9jb21wb25lbnRfc3RhdHVzLAotCSAgICAgICBzZXRfY29tcG9uZW50X3N0YXR1cyksCi0JX19BVFRSKGFjdGl2ZSwgU19JUlVHTyB8IFNfSVdVU1IsIGdldF9jb21wb25lbnRfYWN0aXZlLAotCSAgICAgICBzZXRfY29tcG9uZW50X2FjdGl2ZSksCi0JX19BVFRSKGxvY2F0ZSwgU19JUlVHTyB8IFNfSVdVU1IsIGdldF9jb21wb25lbnRfbG9jYXRlLAotCSAgICAgICBzZXRfY29tcG9uZW50X2xvY2F0ZSksCi0JX19BVFRSKHR5cGUsIFNfSVJVR08sIGdldF9jb21wb25lbnRfdHlwZSwgTlVMTCksCi0JX19BVFRSX05VTEwKK3N0YXRpYyBERVZJQ0VfQVRUUihmYXVsdCwgU19JUlVHTyB8IFNfSVdVU1IsIGdldF9jb21wb25lbnRfZmF1bHQsCisJCSAgICBzZXRfY29tcG9uZW50X2ZhdWx0KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihzdGF0dXMsIFNfSVJVR08gfCBTX0lXVVNSLCBnZXRfY29tcG9uZW50X3N0YXR1cywKKwkJICAgc2V0X2NvbXBvbmVudF9zdGF0dXMpOworc3RhdGljIERFVklDRV9BVFRSKGFjdGl2ZSwgU19JUlVHTyB8IFNfSVdVU1IsIGdldF9jb21wb25lbnRfYWN0aXZlLAorCQkgICBzZXRfY29tcG9uZW50X2FjdGl2ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIobG9jYXRlLCBTX0lSVUdPIHwgU19JV1VTUiwgZ2V0X2NvbXBvbmVudF9sb2NhdGUsCisJCSAgIHNldF9jb21wb25lbnRfbG9jYXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0eXBlLCBTX0lSVUdPLCBnZXRfY29tcG9uZW50X3R5cGUsIE5VTEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZW5jbG9zdXJlX2NvbXBvbmVudF9hdHRyc1tdID0geworCSZkZXZfYXR0cl9mYXVsdC5hdHRyLAorCSZkZXZfYXR0cl9zdGF0dXMuYXR0ciwKKwkmZGV2X2F0dHJfYWN0aXZlLmF0dHIsCisJJmRldl9hdHRyX2xvY2F0ZS5hdHRyLAorCSZkZXZfYXR0cl90eXBlLmF0dHIsCisJTlVMTAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGFzcyBlbmNsb3N1cmVfY29tcG9uZW50X2NsYXNzID0gIHsKLQkubmFtZQkJCT0gImVuY2xvc3VyZV9jb21wb25lbnQiLAotCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCi0JLmRldl9hdHRycwk9IGVuY2xvc3VyZV9jb21wb25lbnRfYXR0cnMsCi0JLmRldl9yZWxlYXNlCQk9IGVuY2xvc3VyZV9jb21wb25lbnRfcmVsZWFzZSwKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGVuY2xvc3VyZV9ncm91cCA9IHsKKwkuYXR0cnMgPSBlbmNsb3N1cmVfY29tcG9uZW50X2F0dHJzLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmVuY2xvc3VyZV9ncm91cHNbXSA9IHsKKwkmZW5jbG9zdXJlX2dyb3VwLAorCU5VTEwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGVuY2xvc3VyZV9pbml0KHZvaWQpCkBAIC00NjksMjAgKzUxOSwxMiBAQAogCWVyciA9IGNsYXNzX3JlZ2lzdGVyKCZlbmNsb3N1cmVfY2xhc3MpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JZXJyID0gY2xhc3NfcmVnaXN0ZXIoJmVuY2xvc3VyZV9jb21wb25lbnRfY2xhc3MpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dDsKIAogCXJldHVybiAwOwotIGVycl9vdXQ6Ci0JY2xhc3NfdW5yZWdpc3RlcigmZW5jbG9zdXJlX2NsYXNzKTsKLQotCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBlbmNsb3N1cmVfZXhpdCh2b2lkKQogewotCWNsYXNzX3VucmVnaXN0ZXIoJmVuY2xvc3VyZV9jb21wb25lbnRfY2xhc3MpOwogCWNsYXNzX3VucmVnaXN0ZXIoJmVuY2xvc3VyZV9jbGFzcyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCmluZGV4IDdjM2YwMjguLjlhZjIzMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwpAQCAtMTkyNyw3ICsxOTI3LDggQEAKIAogCS8qIHNldHVwIG5ldyBGU0YgcmVxdWVzdCAqLwogCXJldHZhbCA9IHpmY3BfZnNmX3JlcV9jcmVhdGUoYWRhcHRlciwgRlNGX1FUQ0JfRVhDSEFOR0VfQ09ORklHX0RBVEEsCi0JCQkJICAgICAwLCBOVUxMLCAmbG9ja19mbGFncywgJmZzZl9yZXEpOworCQkJCSAgICAgWkZDUF9XQUlUX0ZPUl9TQkFMLCBOVUxMLCAmbG9ja19mbGFncywKKwkJCQkgICAgICZmc2ZfcmVxKTsKIAlpZiAocmV0dmFsKSB7CiAJCVpGQ1BfTE9HX0lORk8oImVycm9yOiBDb3VsZCBub3QgY3JlYXRlIGV4Y2hhbmdlIGNvbmZpZ3VyYXRpb24gIgogCQkJICAgICAgImRhdGEgcmVxdWVzdCBmb3IgYWRhcHRlciAlcy5cbiIsCkBAIC0yMDM1LDIxICsyMDM2LDIxIEBACiAJCSAgICAgICBtaW4oRkNfU0VSSUFMX05VTUJFUl9TSVpFLCAxNykpOwogCX0KIAotCVpGQ1BfTE9HX05PUk1BTCgiVGhlIGFkYXB0ZXIgJXMgcmVwb3J0ZWQgdGhlIGZvbGxvd2luZyAiCi0JCQkiY2hhcmFjdGVyaXN0aWNzOlxuIgotCQkJIldXTk4gMHglMDE2THgsICIKLQkJCSJXV1BOIDB4JTAxNkx4LCAiCi0JCQkiU19JRCAweCUwNngsXG4iCi0JCQkiYWRhcHRlciB2ZXJzaW9uIDB4JXgsICIKLQkJCSJMSUMgdmVyc2lvbiAweCV4LCAiCi0JCQkiRkMgbGluayBzcGVlZCAlZCBHYi9zXG4iLAotCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSwKLQkJCSh3d25fdCkgZmNfaG9zdF9ub2RlX25hbWUoc2hvc3QpLAotCQkJKHd3bl90KSBmY19ob3N0X3BvcnRfbmFtZShzaG9zdCksCi0JCQlmY19ob3N0X3BvcnRfaWQoc2hvc3QpLAotCQkJYWRhcHRlci0+aHlkcmFfdmVyc2lvbiwKLQkJCWFkYXB0ZXItPmZzZl9saWNfdmVyc2lvbiwKLQkJCWZjX2hvc3Rfc3BlZWQoc2hvc3QpKTsKKwlpZiAoZnNmX3JlcS0+ZXJwX2FjdGlvbikKKwkJWkZDUF9MT0dfTk9STUFMKCJUaGUgYWRhcHRlciAlcyByZXBvcnRlZCB0aGUgZm9sbG93aW5nICIKKwkJCQkiY2hhcmFjdGVyaXN0aWNzOlxuIgorCQkJCSJXV05OIDB4JTAxNkx4LCBXV1BOIDB4JTAxNkx4LCAiCisJCQkJIlNfSUQgMHglMDZ4LFxuIgorCQkJCSJhZGFwdGVyIHZlcnNpb24gMHgleCwgIgorCQkJCSJMSUMgdmVyc2lvbiAweCV4LCAiCisJCQkJIkZDIGxpbmsgc3BlZWQgJWQgR2Ivc1xuIiwKKwkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpLAorCQkJCSh3d25fdCkgZmNfaG9zdF9ub2RlX25hbWUoc2hvc3QpLAorCQkJCSh3d25fdCkgZmNfaG9zdF9wb3J0X25hbWUoc2hvc3QpLAorCQkJCWZjX2hvc3RfcG9ydF9pZChzaG9zdCksCisJCQkJYWRhcHRlci0+aHlkcmFfdmVyc2lvbiwKKwkJCQlhZGFwdGVyLT5mc2ZfbGljX3ZlcnNpb24sCisJCQkJZmNfaG9zdF9zcGVlZChzaG9zdCkpOwogCWlmIChaRkNQX1FUQ0JfVkVSU0lPTiA8IGJvdHRvbS0+bG93X3F0Y2JfdmVyc2lvbikgewogCQlaRkNQX0xPR19OT1JNQUwoImVycm9yOiB0aGUgYWRhcHRlciAlcyAiCiAJCQkJIm9ubHkgc3VwcG9ydHMgbmV3ZXIgY29udHJvbCBibG9jayAiCkBAIC0yMTE0LDggKzIxMTUsMTAgQEAKIAkJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgMTI3LCBmc2ZfcmVxKTsKIAkJCXJldHVybiAtRUlPOwogCQljYXNlIEZDX1BPUlRUWVBFX05QT1JUOgotCQkJWkZDUF9MT0dfTk9STUFMKCJTd2l0Y2hlZCBmYWJyaWMgZmlicmVjaGFubmVsICIKLQkJCQkJIm5ldHdvcmsgZGV0ZWN0ZWQgYXQgYWRhcHRlciAlcy5cbiIsCisJCQlpZiAoZnNmX3JlcS0+ZXJwX2FjdGlvbikKKwkJCQlaRkNQX0xPR19OT1JNQUwoIlN3aXRjaGVkIGZhYnJpYyBmaWJyZWNoYW5uZWwgIgorCQkJCQkJIm5ldHdvcmsgZGV0ZWN0ZWQgYXQgYWRhcHRlciAiCisJCQkJCQkiJXMuXG4iLAogCQkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmgKaW5kZXggOGNjZTVjYy4uMDk5OTcwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5oCkBAIC0yMTMsNiArMjEzLDcgQEAKICNkZWZpbmUgRlNGX0ZFQVRVUkVfSEJBQVBJX01BTkFHRU1FTlQgICAgICAgICAgIDB4MDAwMDAwMTAKICNkZWZpbmUgRlNGX0ZFQVRVUkVfRUxTX0NUX0NIQUlORURfU0JBTFMgICAgICAgIDB4MDAwMDAwMjAKICNkZWZpbmUgRlNGX0ZFQVRVUkVfVVBEQVRFX0FMRVJUCQkweDAwMDAwMTAwCisjZGVmaW5lIEZTRl9GRUFUVVJFX01FQVNVUkVNRU5UX0RBVEEJCTB4MDAwMDAyMDAKIAogLyogaG9zdCBjb25uZWN0aW9uIGZlYXR1cmVzICovCiAjZGVmaW5lIEZTRl9GRUFUVVJFX05QSVZfTU9ERQkJCTB4MDAwMDAwMDEKQEAgLTM0MCw2ICszNDEsMTUgQEAKIAl1OCAgcmVzMVsyMF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IGZzZl9zdGF0aXN0aWNzX2luZm8geworCXU2NCBpbnB1dF9yZXE7CisJdTY0IG91dHB1dF9yZXE7CisJdTY0IGNvbnRyb2xfcmVxOworCXU2NCBpbnB1dF9tYjsKKwl1NjQgb3V0cHV0X21iOworCXU2NCBzZWNvbmRzX2FjdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiB1bmlvbiBmc2Zfc3RhdHVzX3F1YWwgewogCXU4ICBieXRlW0ZTRl9TVEFUVVNfUVVBTElGSUVSX1NJWkVdOwogCXUxNiBoYWxmd29yZFtGU0ZfU1RBVFVTX1FVQUxJRklFUl9TSVpFIC8gc2l6ZW9mICh1MTYpXTsKQEAgLTQzNiw3ICs0NDYsOCBAQAogCXUzMiBoYXJkd2FyZV92ZXJzaW9uOwogCXU4IHNlcmlhbF9udW1iZXJbMzJdOwogCXN0cnVjdCBmc2ZfbnBvcnRfc2Vydl9wYXJhbSBwbG9naV9wYXlsb2FkOwotCXU4IHJlczRbMTYwXTsKKwlzdHJ1Y3QgZnNmX3N0YXRpc3RpY3NfaW5mbyBzdGF0X2luZm87CisJdTggcmVzNFsxMTJdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBmc2ZfcXRjYl9ib3R0b21fcG9ydCB7CkBAIC00NjksNyArNDgwLDEwIEBACiAJdTY0IGNvbnRyb2xfcmVxdWVzdHM7CiAJdTY0IGlucHV0X21iOwkJLyogd2hlcmUgMSBNQnl0ZSA9PSAxLjAwMC4wMDAgQnl0ZXMgKi8KIAl1NjQgb3V0cHV0X21iOwkJLyogd2hlcmUgMSBNQnl0ZSA9PSAxLjAwMC4wMDAgQnl0ZXMgKi8KLQl1OCByZXMyWzI1Nl07CisJdTggY3BfdXRpbDsKKwl1OCBjYl91dGlsOworCXU4IGFfdXRpbDsKKwl1OCByZXMyWzI1M107CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogdW5pb24gZnNmX3F0Y2JfYm90dG9tIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc2NzaS5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKaW5kZXggZjgxODUwNi4uMDE2ODc1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKQEAgLTQwLDYgKzQwLDcgQEAKIAkJCQkJICB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqemZjcF9zeXNmc19zZGV2X2F0dHJzW107CitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKnpmY3BfYV9zdGF0c19hdHRyc1tdOwogCiBzdHJ1Y3QgemZjcF9kYXRhIHpmY3BfZGF0YSA9IHsKIAkuc2NzaV9ob3N0X3RlbXBsYXRlID0gewpAQCAtNjEsNiArNjIsNyBAQAogCQkudXNlX2NsdXN0ZXJpbmcJCT0gMSwKIAkJLnNkZXZfYXR0cnMJCT0gemZjcF9zeXNmc19zZGV2X2F0dHJzLAogCQkubWF4X3NlY3RvcnMJCT0gWkZDUF9NQVhfU0VDVE9SUywKKwkJLnNob3N0X2F0dHJzCQk9IHpmY3BfYV9zdGF0c19hdHRycywKIAl9LAogCS5kcml2ZXJfdmVyc2lvbiA9IFpGQ1BfVkVSU0lPTiwKIH07CkBAIC04MDksNCArODExLDExNiBAQAogCU5VTEwKIH07CiAKK3N0YXRpYyBzc2l6ZV90IHpmY3Bfc3lzZnNfYWRhcHRlcl91dGlsX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgICBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2NzaV9ob3N0ID0gZGV2X3RvX3Nob3N0KGRldik7CisJc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9wb3J0ICpxdGNiX3BvcnQ7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyOworCisJYWRhcHRlciA9IChzdHJ1Y3QgemZjcF9hZGFwdGVyICopIHNjc2lfaG9zdC0+aG9zdGRhdGFbMF07CisJaWYgKCEoYWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX01FQVNVUkVNRU5UX0RBVEEpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlxdGNiX3BvcnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZnNmX3F0Y2JfYm90dG9tX3BvcnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXF0Y2JfcG9ydCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR2YWwgPSB6ZmNwX2ZzZl9leGNoYW5nZV9wb3J0X2RhdGFfc3luYyhhZGFwdGVyLCBxdGNiX3BvcnQpOworCWlmICghcmV0dmFsKQorCQlyZXR2YWwgPSBzcHJpbnRmKGJ1ZiwgIiV1ICV1ICV1XG4iLCBxdGNiX3BvcnQtPmNwX3V0aWwsCisJCQkJIHF0Y2JfcG9ydC0+Y2JfdXRpbCwgcXRjYl9wb3J0LT5hX3V0aWwpOworCWtmcmVlKHF0Y2JfcG9ydCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCB6ZmNwX3N5c2ZzX2FkYXB0ZXJfZXhfY29uZmlnKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGZzZl9zdGF0aXN0aWNzX2luZm8gKnN0YXRfaW5mKQoreworCWludCByZXR2YWw7CisJc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9jb25maWcgKnF0Y2JfY29uZmlnOworCXN0cnVjdCBTY3NpX0hvc3QgKnNjc2lfaG9zdCA9IGRldl90b19zaG9zdChkZXYpOworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXI7CisKKwlhZGFwdGVyID0gKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKikgc2NzaV9ob3N0LT5ob3N0ZGF0YVswXTsKKwlpZiAoIShhZGFwdGVyLT5hZGFwdGVyX2ZlYXR1cmVzICYgRlNGX0ZFQVRVUkVfTUVBU1VSRU1FTlRfREFUQSkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXF0Y2JfY29uZmlnID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9jb25maWcpLAorCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICghcXRjYl9jb25maWcpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dmFsID0gemZjcF9mc2ZfZXhjaGFuZ2VfY29uZmlnX2RhdGFfc3luYyhhZGFwdGVyLCBxdGNiX2NvbmZpZyk7CisJaWYgKCFyZXR2YWwpCisJCSpzdGF0X2luZiA9IHF0Y2JfY29uZmlnLT5zdGF0X2luZm87CisKKwlrZnJlZShxdGNiX2NvbmZpZyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHNzaXplX3QgemZjcF9zeXNmc19hZGFwdGVyX3JlcXVlc3Rfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZnNmX3N0YXRpc3RpY3NfaW5mbyBzdGF0X2luZm87CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHpmY3Bfc3lzZnNfYWRhcHRlcl9leF9jb25maWcoZGV2LCAmc3RhdF9pbmZvKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxsdSAlbGx1ICVsbHVcbiIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdGF0X2luZm8uaW5wdXRfcmVxLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhdF9pbmZvLm91dHB1dF9yZXEsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdGF0X2luZm8uY29udHJvbF9yZXEpOworfQorCitzdGF0aWMgc3NpemVfdCB6ZmNwX3N5c2ZzX2FkYXB0ZXJfbWJfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgY2hhciAqYnVmKQoreworCXN0cnVjdCBmc2Zfc3RhdGlzdGljc19pbmZvIHN0YXRfaW5mbzsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gemZjcF9zeXNmc19hZGFwdGVyX2V4X2NvbmZpZyhkZXYsICZzdGF0X2luZm8pOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbGx1ICVsbHVcbiIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdGF0X2luZm8uaW5wdXRfbWIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdGF0X2luZm8ub3V0cHV0X21iKTsKK30KKworc3RhdGljIHNzaXplX3QgemZjcF9zeXNmc19hZGFwdGVyX3NlY19hY3RpdmVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkJICBjaGFyICpidWYpCit7CisJc3RydWN0IGZzZl9zdGF0aXN0aWNzX2luZm8gc3RhdF9pbmZvOworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSB6ZmNwX3N5c2ZzX2FkYXB0ZXJfZXhfY29uZmlnKGRldiwgJnN0YXRfaW5mbyk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsbHVcbiIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdGF0X2luZm8uc2Vjb25kc19hY3QpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIodXRpbGl6YXRpb24sIFNfSVJVR08sIHpmY3Bfc3lzZnNfYWRhcHRlcl91dGlsX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHJlcXVlc3RzLCBTX0lSVUdPLCB6ZmNwX3N5c2ZzX2FkYXB0ZXJfcmVxdWVzdF9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtZWdhYnl0ZXMsIFNfSVJVR08sIHpmY3Bfc3lzZnNfYWRhcHRlcl9tYl9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihzZWNvbmRzX2FjdGl2ZSwgU19JUlVHTywKKwkJICAgemZjcF9zeXNmc19hZGFwdGVyX3NlY19hY3RpdmVfc2hvdywgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqemZjcF9hX3N0YXRzX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX3V0aWxpemF0aW9uLAorCSZkZXZfYXR0cl9yZXF1ZXN0cywKKwkmZGV2X2F0dHJfbWVnYWJ5dGVzLAorCSZkZXZfYXR0cl9zZWNvbmRzX2FjdGl2ZSwKKwlOVUxMCit9OworCiAjdW5kZWYgWkZDUF9MT0dfQVJFQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL0ZsYXNoUG9pbnQuYyBiL2RyaXZlcnMvc2NzaS9GbGFzaFBvaW50LmMKaW5kZXggYjM3NGU0NS4uYjg5OGQzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL0ZsYXNoUG9pbnQuYworKysgYi9kcml2ZXJzL3Njc2kvRmxhc2hQb2ludC5jCkBAIC0xNDk5LDcgKzE0OTksNyBAQAogCXRoaXNDYXJkID0gKChzdHJ1Y3Qgc2NjYl9jYXJkICopcEN1cnJDYXJkKS0+Y2FyZEluZGV4OwogCWlvcG9ydCA9ICgoc3RydWN0IHNjY2JfY2FyZCAqKXBDdXJyQ2FyZCktPmlvUG9ydDsKIAotCWlmICgocF9TY2NiLT5UYXJnSUQgPiBNQVhfU0NTSV9UQVIpIHx8IChwX1NjY2ItPkx1biA+IE1BWF9MVU4pKSB7CisJaWYgKChwX1NjY2ItPlRhcmdJRCA+PSBNQVhfU0NTSV9UQVIpIHx8IChwX1NjY2ItPkx1biA+PSBNQVhfTFVOKSkgewogCiAJCXBfU2NjYi0+SG9zdFN0YXR1cyA9IFNDQ0JfQ09NUExFVEU7CiAJCXBfU2NjYi0+U2NjYlN0YXR1cyA9IFNDQ0JfRVJST1I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCmluZGV4IDdmNzhlM2UuLjk5YzU3YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCkBAIC0xNjc3LDYgKzE2NzcsMTYgQEAKIAkgIFNDU0ktSE9XVE8sIGF2YWlsYWJsZSBmcm9tCiAJICA8aHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG8+LgogCitjb25maWcgU0NTSV9NQUNfRVNQCisJdHJpc3RhdGUgIk1hY2ludG9zaCBOQ1I1M2M5WzQ2XSBTQ1NJIgorCWRlcGVuZHMgb24gTUFDICYmIFNDU0kKKwloZWxwCisJICBUaGlzIGlzIHRoZSBOQ1IgNTNjOXggU0NTSSBjb250cm9sbGVyIGZvdW5kIG9uIG1vc3Qgb2YgdGhlIDY4MDQwCisJICBiYXNlZCBNYWNpbnRvc2hlcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgbWFjX2VzcC4KKwogY29uZmlnIE1WTUUxNDdfU0NTSQogCWJvb2wgIldEMzNDOTMgU0NTSSBkcml2ZXIgZm9yIE1WTUUxNDciCiAJZGVwZW5kcyBvbiBNVk1FMTQ3ICYmIFNDU0k9eQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL01ha2VmaWxlIGIvZHJpdmVycy9zY3NpL01ha2VmaWxlCmluZGV4IDIzZTZlY2IuLjZjNzc1ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKQEAgLTQ2LDYgKzQ2LDcgQEAKIG9iai0kKENPTkZJR19TR0lXRDkzX1NDU0kpCSs9IHNnaXdkOTMubwl3ZDMzYzkzLm8KIG9iai0kKENPTkZJR19BVEFSSV9TQ1NJKQkrPSBhdGFyaV9zY3NpLm8KIG9iai0kKENPTkZJR19NQUNfU0NTSSkJCSs9IG1hY19zY3NpLm8KK29iai0kKENPTkZJR19TQ1NJX01BQ19FU1ApCSs9IGVzcF9zY3NpLm8JbWFjX2VzcC5vCiBvYmotJChDT05GSUdfU1VOM19TQ1NJKQkJKz0gc3VuM19zY3NpLm8gIHN1bjNfc2NzaV92bWUubwogb2JqLSQoQ09ORklHX01WTUUxNnhfU0NTSSkJKz0gNTNjNzAwLm8JbXZtZTE2eF9zY3NpLm8KIG9iai0kKENPTkZJR19CVk1FNjAwMF9TQ1NJKQkrPSA1M2M3MDAubwlidm1lNjAwMF9zY3NpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haGExNTJ4LmMgYi9kcml2ZXJzL3Njc2kvYWhhMTUyeC5jCmluZGV4IDZjY2RjOTZjLi5hMDliMmQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWhhMTUyeC5jCisrKyBiL2RyaXZlcnMvc2NzaS9haGExNTJ4LmMKQEAgLTE0MzIsMTUgKzE0MzIsMTAgQEAKICAqLwogc3RhdGljIGlycXJldHVybl90IGludHIoaW50IGlycW5vLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hwbnQgPSAoc3RydWN0IFNjc2lfSG9zdCAqKWRldl9pZDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCA9IGRldl9pZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGNoYXIgcmV2LCBkbWFjbnRybDA7CiAKLQlpZiAoIXNocG50KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYWhhMTUyeDogY2F0Y2hlZCBpbnRlcnJ1cHQgJWQgZm9yIHVua25vd24gY29udHJvbGxlci5cbiIsIGlycW5vKTsKLQkJcmV0dXJuIElSUV9OT05FOwotCX0KLQogCS8qCiAJICogUmVhZCBhIGNvdXBsZSBvZiByZWdpc3RlcnMgdGhhdCBhcmUga25vd24gdG8gbm90IGJlIGFsbCAxJ3MuIElmCiAJICogd2UgcmVhZCBhbGwgMSdzICgtMSksIHRoYXQgbWVhbnMgdGhhdCBlaXRoZXI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWhhMTU0Mi5jIGIvZHJpdmVycy9zY3NpL2FoYTE1NDIuYwppbmRleCA1YTE0NzFjLi44MDU5NDk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWhhMTU0Mi5jCisrKyBiL2RyaXZlcnMvc2NzaS9haGExNTQyLmMKQEAgLTE1Myw4ICsxNTMsNiBAQAogCiAjZGVmaW5lIEhPU1REQVRBKGhvc3QpICgoc3RydWN0IGFoYTE1NDJfaG9zdGRhdGEgKikgJmhvc3QtPmhvc3RkYXRhKQogCi1zdGF0aWMgc3RydWN0IFNjc2lfSG9zdCAqYWhhX2hvc3RbN107CS8qIE9uZSBmb3IgZWFjaCBJUlEgbGV2ZWwgKDktMTUpICovCi0KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYWhhMTU0Ml9sb2NrKTsKIAogCkBAIC0xNjMsOCArMTYxLDcgQEAKIAogc3RhdGljIHZvaWQgc2V0dXBfbWFpbGJveGVzKGludCBiYXNlX2lvLCBzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCk7CiBzdGF0aWMgaW50IGFoYTE1NDJfcmVzdGFydChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCk7Ci1zdGF0aWMgdm9pZCBhaGExNTQyX2ludHJfaGFuZGxlKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCB2b2lkICpkZXZfaWQpOwotc3RhdGljIGlycXJldHVybl90IGRvX2FoYTE1NDJfaW50cl9oYW5kbGUoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKK3N0YXRpYyB2b2lkIGFoYTE1NDJfaW50cl9oYW5kbGUoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpOwogCiAjZGVmaW5lIGFoYTE1NDJfaW50cl9yZXNldChiYXNlKSAgb3V0YihJUlNULCBDT05UUk9MKGJhc2UpKQogCkBAIC00MDQsMjMgKzQwMSwxOSBAQAogfQogCiAvKiBBIHF1aWNrIHdyYXBwZXIgZm9yIGRvX2FoYTE1NDJfaW50cl9oYW5kbGUgdG8gZ3JhYiB0aGUgc3BpbiBsb2NrICovCi1zdGF0aWMgaXJxcmV0dXJuX3QgZG9fYWhhMTU0Ml9pbnRyX2hhbmRsZShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgZG9fYWhhMTU0Ml9pbnRyX2hhbmRsZShpbnQgZHVtbXksIHZvaWQgKmRldl9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OwotCi0Jc2hvc3QgPSBhaGFfaG9zdFtpcnEgLSA5XTsKLQlpZiAoIXNob3N0KQotCQlwYW5pYygiU3BsdW5nZSEiKTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl9pZDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQlhaGExNTQyX2ludHJfaGFuZGxlKHNob3N0LCBkZXZfaWQpOworCWFoYTE1NDJfaW50cl9oYW5kbGUoc2hvc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogLyogQSAiaGlnaCIgbGV2ZWwgaW50ZXJydXB0IGhhbmRsZXIgKi8KLXN0YXRpYyB2b2lkIGFoYTE1NDJfaW50cl9oYW5kbGUoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyB2b2lkIGFoYTE1NDJfaW50cl9oYW5kbGUoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7CiAJdm9pZCAoKm15X2RvbmUpIChTY3NpX0NtbmQgKikgPSBOVUxMOwogCWludCBlcnJzdGF0dXMsIG1iaSwgbWJvLCBtYmlzdGF0dXM7CkBAIC0xMTk3LDcgKzExOTAsOCBAQAogCiAJCQlERUIocHJpbnRrKCJhaGExNTQyX2RldGVjdDogZW5hYmxlIGludGVycnVwdCBjaGFubmVsICVkXG4iLCBpcnFfbGV2ZWwpKTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZhaGExNTQyX2xvY2ssIGZsYWdzKTsKLQkJCWlmIChyZXF1ZXN0X2lycShpcnFfbGV2ZWwsIGRvX2FoYTE1NDJfaW50cl9oYW5kbGUsIDAsICJhaGExNTQyIiwgTlVMTCkpIHsKKwkJCWlmIChyZXF1ZXN0X2lycShpcnFfbGV2ZWwsIGRvX2FoYTE1NDJfaW50cl9oYW5kbGUsIDAsCisJCQkJCSJhaGExNTQyIiwgc2hwbnQpKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWxsb2NhdGUgSVJRIGZvciBhZGFwdGVjIGNvbnRyb2xsZXIuXG4iKTsKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhaGExNTQyX2xvY2ssIGZsYWdzKTsKIAkJCQlnb3RvIHVucmVnaXN0ZXI7CkBAIC0xMjA1LDcgKzExOTksNyBAQAogCQkJaWYgKGRtYV9jaGFuICE9IDB4RkYpIHsKIAkJCQlpZiAocmVxdWVzdF9kbWEoZG1hX2NoYW4sICJhaGExNTQyIikpIHsKIAkJCQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWxsb2NhdGUgRE1BIGNoYW5uZWwgZm9yIEFkYXB0ZWMuXG4iKTsKLQkJCQkJZnJlZV9pcnEoaXJxX2xldmVsLCBOVUxMKTsKKwkJCQkJZnJlZV9pcnEoaXJxX2xldmVsLCBzaHBudCk7CiAJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFoYTE1NDJfbG9jaywgZmxhZ3MpOwogCQkJCQlnb3RvIHVucmVnaXN0ZXI7CiAJCQkJfQpAQCAtMTIxNCw3ICsxMjA4LDcgQEAKIAkJCQkJZW5hYmxlX2RtYShkbWFfY2hhbik7CiAJCQkJfQogCQkJfQotCQkJYWhhX2hvc3RbaXJxX2xldmVsIC0gOV0gPSBzaHBudDsKKwogCQkJc2hwbnQtPnRoaXNfaWQgPSBzY3NpX2lkOwogCQkJc2hwbnQtPnVuaXF1ZV9pZCA9IGJhc2VfaW87CiAJCQlzaHBudC0+aW9fcG9ydCA9IGJhc2VfaW87CkBAIC0xMjc2LDcgKzEyNzAsNyBAQAogc3RhdGljIGludCBhaGExNTQyX3JlbGVhc2Uoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7CiAJaWYgKHNob3N0LT5pcnEpCi0JCWZyZWVfaXJxKHNob3N0LT5pcnEsIE5VTEwpOworCQlmcmVlX2lycShzaG9zdC0+aXJxLCBzaG9zdCk7CiAJaWYgKHNob3N0LT5kbWFfY2hhbm5lbCAhPSAweGZmKQogCQlmcmVlX2RtYShzaG9zdC0+ZG1hX2NoYW5uZWwpOwogCWlmIChzaG9zdC0+aW9fcG9ydCAmJiBzaG9zdC0+bl9pb19wb3J0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eC5oIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eC5oCmluZGV4IDJmMDA0NjcuLmJlNTU1OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHguaAorKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4LmgKQEAgLTgxNSw3ICs4MTUsNyBAQAogc3RydWN0IGFoZF9waGFzZV90YWJsZV9lbnRyeSB7CiAgICAgICAgIHVpbnQ4X3QgcGhhc2U7CiAgICAgICAgIHVpbnQ4X3QgbWVzZ19vdXQ7IC8qIE1lc3NhZ2UgcmVzcG9uc2UgdG8gcGFyaXR5IGVycm9ycyAqLwotCWNoYXIgKnBoYXNlbXNnOworCWNvbnN0IGNoYXIgKnBoYXNlbXNnOwogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqIFNlcmlhbCBFRVBST00gRm9ybWF0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTEzMTQsNyArMTMxNCw3IEBACiBzdHJ1Y3QgYWhkX3BjaV9pZGVudGl0eSB7CiAJdWludDY0X3QJCSBmdWxsX2lkOwogCXVpbnQ2NF90CQkgaWRfbWFzazsKLQljaGFyCQkJKm5hbWU7CisJY29uc3QgY2hhcgkJKm5hbWU7CiAJYWhkX2RldmljZV9zZXR1cF90CSpzZXR1cDsKIH07CiAKQEAgLTEzMjIsNyArMTMyMiw3IEBACiBzdHJ1Y3QgYWljNzc3MF9pZGVudGl0eSB7CiAJdWludDMyX3QJCSBmdWxsX2lkOwogCXVpbnQzMl90CQkgaWRfbWFzazsKLQljaGFyCQkJKm5hbWU7CisJY29uc3QgY2hhcgkJKm5hbWU7CiAJYWhkX2RldmljZV9zZXR1cF90CSpzZXR1cDsKIH07CiBleHRlcm4gc3RydWN0IGFpYzc3NzBfaWRlbnRpdHkgYWljNzc3MF9pZGVudF90YWJsZSBbXTsKQEAgLTEzMzMsMTIgKzEzMzMsMTEgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkCQkJYWhkX3Jlc2V0X2NtZHNfcGVuZGluZyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogUENJIEZyb250IEVuZCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdHJ1Y3QJYWhkX3BjaV9pZGVudGl0eSAqYWhkX2ZpbmRfcGNpX2RldmljZShhaGRfZGV2X3NvZnRjX3QpOworY29uc3Qgc3RydWN0CWFoZF9wY2lfaWRlbnRpdHkgKmFoZF9maW5kX3BjaV9kZXZpY2UoYWhkX2Rldl9zb2Z0Y190KTsKIGludAkJCSAgYWhkX3BjaV9jb25maWcoc3RydWN0IGFoZF9zb2Z0YyAqLAotCQkJCQkgc3RydWN0IGFoZF9wY2lfaWRlbnRpdHkgKik7CisJCQkJCSBjb25zdCBzdHJ1Y3QgYWhkX3BjaV9pZGVudGl0eSAqKTsKIGludAlhaGRfcGNpX3Rlc3RfcmVnaXN0ZXJfYWNjZXNzKHN0cnVjdCBhaGRfc29mdGMgKik7CiAjaWZkZWYgQ09ORklHX1BNCiB2b2lkCWFoZF9wY2lfc3VzcGVuZChzdHJ1Y3QgYWhkX3NvZnRjICopOwpAQCAtMTM3NiwxNiArMTM3NSw2IEBACiBpbnQJCQkgYWhkX3JlYWRfZmxleHBvcnQoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCBhZGRyLAogCQkJCQkgICB1aW50OF90ICp2YWx1ZSk7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKiogSW50ZXJydXB0IFNlcnZpY2VzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkCQkJYWhkX3J1bl9xb3V0ZmlmbyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQpOwotI2lmZGVmIEFIRF9UQVJHRVRfTU9ERQotdm9pZAkJCWFoZF9ydW5fdHFpbmZpZm8oc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCBpbnQgcGF1c2VkKTsKLSNlbmRpZgotdm9pZAkJCWFoZF9oYW5kbGVfaHdlcnJpbnQoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKLXZvaWQJCQlhaGRfaGFuZGxlX3NlcWludChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IGludHN0YXQpOwotdm9pZAkJCWFoZF9oYW5kbGVfc2NzaWludChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsCi0JCQkJCSAgIHVfaW50IGludHN0YXQpOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogRXJyb3IgUmVjb3ZlcnkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdHlwZWRlZiBlbnVtIHsKIAlTRUFSQ0hfQ09NUExFVEUsCkBAIC0xNDc5LDcgKzE0NjgsNyBAQAogdm9pZAkJCWFoZF9wcmludF9kZXZpbmZvKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwKIAkJCQkJICBzdHJ1Y3QgYWhkX2RldmluZm8gKmRldmluZm8pOwogdm9pZAkJCWFoZF9kdW1wX2NhcmRfc3RhdGUoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKLWludAkJCWFoZF9wcmludF9yZWdpc3RlcihhaGRfcmVnX3BhcnNlX2VudHJ5X3QgKnRhYmxlLAoraW50CQkJYWhkX3ByaW50X3JlZ2lzdGVyKGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCAqdGFibGUsCiAJCQkJCSAgIHVfaW50IG51bV9lbnRyaWVzLAogCQkJCQkgICBjb25zdCBjaGFyICpuYW1lLAogCQkJCQkgICB1X2ludCBhZGRyZXNzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eC5yZWcgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4LnJlZwppbmRleCBiZTE0ZTJlLi5jY2ExNmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4LnJlZworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4LnJlZwpAQCAtMTk4LDYgKzE5OCw3IEBACiByZWdpc3RlciBDTFJJTlQgewogCWFkZHJlc3MJCQkweDAwMwogCWFjY2Vzc19tb2RlCVdPCisJY291bnQJCTE5CiAJZmllbGQJQ0xSSFdFUlJJTlQJMHg4MCAvKiBSZXYgQiBvciBncmVhdGVyICovCiAJZmllbGQJQ0xSQlJLQURSSU5UCTB4NDAKIAlmaWVsZAlDTFJTV1RNSU5UCTB4MjAKQEAgLTI0NSw2ICsyNDYsNyBAQAogcmVnaXN0ZXIgSENOVFJMIHsKIAlhZGRyZXNzCQkJMHgwMDUKIAlhY2Nlc3NfbW9kZQlSVworCWNvdW50CQkxMgogCWZpZWxkCVNFUV9SRVNFVAkweDgwIC8qIFJldiBCIG9yIGdyZWF0ZXIgKi8KIAlmaWVsZAlQT1dSRE4JCTB4NDAKIAlmaWVsZAlTV0lOVAkJMHgxMApAQCAtMjYyLDYgKzI2NCw3IEBACiAJYWRkcmVzcwkJCTB4MDA2CiAJYWNjZXNzX21vZGUJUlcKIAlzaXplCQkyCisJY291bnQJCTIKIH0KIAogLyoKQEAgLTI3MCw2ICsyNzMsNyBAQAogcmVnaXN0ZXIgSEVTQ0JfUU9GRiB7CiAJYWRkcmVzcwkJCTB4MDA4CiAJYWNjZXNzX21vZGUJUlcKKwljb3VudAkJMgogfQogCiAvKgpAQCAtMjg3LDYgKzI5MSw3IEBACiAgKi8KIHJlZ2lzdGVyIFNFUUlOVFNUQVQgewogCWFkZHJlc3MJCQkweDAwQworCWNvdW50CQkxCiAJYWNjZXNzX21vZGUJUk8KIAlmaWVsZAlTRVFfU1dUTVJUTwkweDEwCiAJZmllbGQJU0VRX1NFUUlOVAkweDA4CkBAIC0zMzIsNiArMzM3LDcgQEAKICAqLwogcmVnaXN0ZXIgU0VTQ0JfUU9GRiB7CiAJYWRkcmVzcwkJCTB4MDEyCisJY291bnQJCTIKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX0NDSEFOCiB9CkBAIC0zOTcsNiArNDAzLDcgQEAKIAlhZGRyZXNzCQkJMHgwMTkKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX0RGRjAsIE1fREZGMQorCWNvdW50CQkxMQogCWZpZWxkCVBSRUxPQURFTgkweDgwCiAJZmllbGQJU0NTSUVOV1JESVMJMHg0MAkvKiBSZXYgQiBvbmx5LiAqLwogCWZpZWxkCVNDU0lFTgkJMHgyMApAQCAtNDE1LDYgKzQyMiw3IEBACiAgKi8KIHJlZ2lzdGVyIERTQ09NTUFORDAgewogCWFkZHJlc3MJCQkweDAxOQorCWNvdW50CQkxCiAJYWNjZXNzX21vZGUJUlcKIAltb2RlcwkJTV9DRkcKIAlmaWVsZAlDQUNIRVRIRU4JMHg4MAkvKiBDYWNoZSBUaHJlc2hvbGQgZW5hYmxlICovCkBAIC01ODAsNiArNTg4LDcgQEAKIAlhZGRyZXNzCQkJMHgwODgKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX0NGRworCWNvdW50CQkxCiAJZmllbGQJV1JfREZUSFJTSAkweDcwIHsKIAkJV1JfREZUSFJTSF9NSU4sCiAJCVdSX0RGVEhSU0hfMjUsCkBAIC04MDAsNiArODA5LDcgQEAKIAlhZGRyZXNzCQkJMHgwOTMKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX0NGRworCWNvdW50CQkxCiAJZmllbGQJU0VSUlBVTFNFCTB4ODAKIAlmaWVsZAlVTkVYUFNDSUVOCTB4MjAKIAlmaWVsZAlTUExUU01BRElTCTB4MTAKQEAgLTg0NCw2ICs4NTQsNyBAQAogCWFkZHJlc3MJCQkweDA5NgogCWFjY2Vzc19tb2RlCVJXCiAJbW9kZXMJCU1fREZGMCwgTV9ERkYxCisJY291bnQJCTIKIAlmaWVsZAlTVEFFVEVSTQkweDgwCiAJZmllbGQJU0NCQ0VSUgkJMHg0MAogCWZpZWxkCVNDQURFUlIJCTB4MjAKQEAgLTg5NSw2ICs5MDYsNyBAQAogCWFkZHJlc3MJCQkweDA5NwogCWFjY2Vzc19tb2RlCVJXCiAJbW9kZXMJCU1fREZGMCwgTV9ERkYxCisJY291bnQJCTIKIAlmaWVsZAlSWERBVEFCVUNLRVQJMHgwMQogfQogCkBAIC0xMDQ4LDYgKzEwNjAsNyBAQAogCWFkZHJlc3MJCQkweDA5RQogCWFjY2Vzc19tb2RlCVJXCiAJbW9kZXMJCU1fREZGMCwgTV9ERkYxCisJY291bnQJCTIKIAlmaWVsZAlTVEFFVEVSTQkweDgwCiAJZmllbGQJU0NCQ0VSUgkJMHg0MAogCWZpZWxkCVNDQURFUlIJCTB4MjAKQEAgLTEwNjUsNiArMTA3OCw3IEBACiAJYWRkcmVzcwkJCTB4MDlGCiAJYWNjZXNzX21vZGUJUlcKIAltb2RlcwkJTV9ERkYwLCBNX0RGRjEKKwljb3VudAkJMgogCWZpZWxkCVJYREFUQUJVQ0tFVAkweDAxCiB9CiAKQEAgLTEwODYsNiArMTEwMCw3IEBACiAJYWRkcmVzcwkJCTB4MEEwCiAJYWNjZXNzX21vZGUJUlcKIAltb2RlcwkJTV9DRkcKKwljb3VudAkJMQogCWZpZWxkCURQRQkJMHg4MAogCWZpZWxkCVNTRQkJMHg0MAogCWZpZWxkCVJNQQkJMHgyMApAQCAtMTE4NCw2ICsxMTk5LDcgQEAKIAlhZGRyZXNzCQkJMHgwQTcKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX0NGRworCWNvdW50CQk1CiAJZmllbGQJRFBFCQkweDgwCiAJZmllbGQJU1NFCQkweDQwCiAJZmllbGQJU1RBCQkweDA4CkBAIC0xMTk4LDYgKzEyMTQsNyBAQAogCWFkZHJlc3MJCQkweDAyMAogCWFjY2Vzc19tb2RlCVJXCiAJc2l6ZQkJMjAKKwljb3VudAkJMgogCW1vZGVzCQlNX0RGRjAsIE1fREZGMSwgTV9TQ1NJCiB9CiAKQEAgLTEyMjksNiArMTI0Niw3IEBACiAJYWRkcmVzcwkJCTB4MDIyCiAJYWNjZXNzX21vZGUJUlcKIAltb2RlcwkJTV9DRkcKKwljb3VudAkJMgogfQogCiAvKgpAQCAtMTI1OSw2ICsxMjc3LDcgQEAKIAlhZGRyZXNzCQkJMHgwMjUKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX0NGRworCWNvdW50CQkxCiB9CiAKIC8qCkBAIC0xMjcwLDYgKzEyODksNyBAQAogCWFkZHJlc3MJCQkweDAyNgogCWFjY2Vzc19tb2RlCVJXCiAJbW9kZXMJCU1fQ0ZHCisJY291bnQJCTEKIH0KIAogLyoKQEAgLTEyODEsNiArMTMwMSw3IEBACiAJYWRkcmVzcwkJCTB4MDI3CiAJYWNjZXNzX21vZGUJUlcKIAltb2RlcwkJTV9DRkcKKwljb3VudAkJMQogfQogCiAvKgpAQCAtMTI5MSw2ICsxMzEyLDcgQEAKIAlhZGRyZXNzCQkJMHgwMjgKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX0NGRworCWNvdW50CQkxCiB9CiAKIC8qCkBAIC0xMzAxLDYgKzEzMjMsNyBAQAogCWFkZHJlc3MJCQkweDAyOQogCWFjY2Vzc19tb2RlCVJXCiAJbW9kZXMJCU1fQ0ZHCisJY291bnQJCTEKIH0KIAogLyoKQEAgLTEzMjMsNiArMTM0Niw3IEBACiAJYWRkcmVzcwkJCTB4MDJCCiAJYWNjZXNzX21vZGUJUlcKIAltb2RlcwkJTV9DRkcKKwljb3VudAkJMQogfQogCiAvKgpAQCAtMTMzMyw2ICsxMzU3LDcgQEAKIAlhZGRyZXNzCQkJMHgwMkMKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX0NGRworCWNvdW50CQkxCiB9CiAKIC8qCkBAIC0xMzcwLDYgKzEzOTUsNyBAQAogCWFkZHJlc3MJCQkweDAzMAogCWFjY2Vzc19tb2RlCVJXCiAJbW9kZXMJCU1fQ0ZHCisJY291bnQJCTIKIAltYXNrCQlJTFVOTEVOCTB4MEYKIAltYXNrCQlUTFVOTEVOCTB4RjAKIH0KQEAgLTEzODMsNiArMTQwOSw3IEBACiAJYWRkcmVzcwkJCTB4MDMxCiAJYWNjZXNzX21vZGUJUlcKIAltb2RlcwkJTV9DRkcKKwljb3VudAkJMQogfQogCiAvKgpAQCAtMTM5NCw2ICsxNDIxLDcgQEAKIAlhZGRyZXNzCQkJMHgwMzIKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX0NGRworCWNvdW50CQk5CiB9CiAKIC8qCkBAIC0xNDU4LDYgKzE0ODYsNyBAQAogCWFkZHJlc3MJCQkweDAzOAogCWFjY2Vzc19tb2RlCVJXCiAJbW9kZXMJCU1fREZGMCwgTV9ERkYxLCBNX1NDU0kKKwljb3VudAkJMgogCWZpZWxkCVBDSTJQQ0kJCTB4MDQKIAlmaWVsZAlTSU5HTEVDTUQJMHgwMgogCWZpZWxkCUFCT1JUUEVORElORwkweDAxCkBAIC0xNDcwLDYgKzE0OTksNyBAQAogCWFkZHJlc3MJCQkweDAzOQogCWFjY2Vzc19tb2RlCVJXCiAJbW9kZXMJCU1fREZGMCwgTV9ERkYxLCBNX1NDU0kKKwljb3VudAkJNQogCWZpZWxkCUxRSVJFVFJZCTB4ODAKIAlmaWVsZAlMUUlDT05USU5VRQkweDQwCiAJZmllbGQJTFFJVE9JRExFCTB4MjAKQEAgLTE1MjgsNiArMTU1OCw3IEBACiAJYWRkcmVzcwkJCTB4MDNCCiAJYWNjZXNzX21vZGUJUlcKIAltb2RlcwkJTV9ERkYwLCBNX0RGRjEsIE1fU0NTSQorCWNvdW50CQk4CiAJZmllbGQJTUFOVUFMQ1RMCTB4NDAKIAlmaWVsZAlFTlNFTEkJCTB4MjAKIAlmaWVsZAlFTlJTRUxJCQkweDEwCkBAIC0xNjY3LDYgKzE2OTgsOSBAQAogCX0KIH0KIAorLyoKKyAqIFNDU0kgQ29udHJvbCBTaWduYWwgSW4KKyAqLwogcmVnaXN0ZXIgU0NTSVNJR0kgewogCWFkZHJlc3MJCQkweDA0MQogCWFjY2Vzc19tb2RlCVJPCkBAIC0xNzAzLDYgKzE3MzcsNyBAQAogCWFjY2Vzc19tb2RlCVJXCiAJbW9kZXMJCU1fQ0ZHCiAJc2l6ZQkJMgorCWNvdW50CQkyCiB9CiAKIC8qCkBAIC0xNzU4LDYgKzE3OTMsNyBAQAogCWFkZHJlc3MJCQkweDA0OAogCWFjY2Vzc19tb2RlCVJPCiAJbW9kZXMJCU1fREZGMCwgTV9ERkYxLCBNX1NDU0kKKwljb3VudAkJMgogCWZpZWxkCUNMS09VVAkJMHg4MAogCWZpZWxkCVRBUkdJRAkJMHgwRgogfQpAQCAtMTc5OCw2ICsxODM0LDcgQEAKIAlhZGRyZXNzCQkJMHgwNEEKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX0NGRworCWNvdW50CQk0CiAJZmllbGQJQklPU0NBTkNUTAkJMHg4MAogCWZpZWxkCUFVVE9BQ0tFTgkJMHg0MAogCWZpZWxkCUJJQVNDQU5DVEwJCTB4MjAKQEAgLTE4NTAsNiArMTg4Nyw3IEBACiAJYWRkcmVzcwkJCTB4MDRCCiAJYWNjZXNzX21vZGUJUlcKIAltb2RlcwkJTV9DRkcKKwljb3VudAkJOAogCWZpZWxkCUVOU0VMRE8JCTB4NDAKIAlmaWVsZAlFTlNFTERJCQkweDIwCiAJZmllbGQJRU5TRUxJTkdPCTB4MTAKQEAgLTE5NDUsNiArMTk4Myw3IEBACiAJYWRkcmVzcwkJCTB4MDRFCiAJYWNjZXNzX21vZGUJUk8KIAltb2RlcwkJTV9ERkYwLCBNX0RGRjEsIE1fU0NTSQorCWNvdW50CQkzCiAJZmllbGQJSElaRVJPCQkweDgwCiAJZmllbGQJSElQRVJSCQkweDQwCiAJZmllbGQJUFJFVlBIQVNFCTB4MjAKQEAgLTE5NjIsNiArMjAwMSw3IEBACiAJYWRkcmVzcwkJCTB4MDRFCiAJYWNjZXNzX21vZGUJUk8KIAltb2RlcwkJTV9DRkcKKwljb3VudAkJNgogfQogCiAvKgpAQCAtMTk3MSw2ICsyMDExLDcgQEAKIAlhZGRyZXNzCQkJMHgwNEYKIAlhY2Nlc3NfbW9kZQlSTwogCW1vZGVzCQlNX0RGRjAsIE1fREZGMSwgTV9TQ1NJCisJY291bnQJCTEKIH0KIAogLyoKQEAgLTE5ODAsNiArMjAyMSw3IEBACiAJYWRkcmVzcwkJCTB4MDRGCiAJYWNjZXNzX21vZGUJUk8KIAltb2RlcwkJTV9DRkcKKwljb3VudAkJMgogfQogCiAvKgpAQCAtMTk4OSw2ICsyMDMxLDcgQEAKIAlhZGRyZXNzCQkJMHgwNTAKIAlhY2Nlc3NfbW9kZQlSTwogCW1vZGVzCQlNX0RGRjAsIE1fREZGMSwgTV9TQ1NJCisJY291bnQJCTIKIAlmaWVsZAlMUUlBVE5RQVMJMHgyMAogCWZpZWxkCUxRSUNSQ1QxCTB4MTAKIAlmaWVsZAlMUUlDUkNUMgkweDA4CkBAIC0yMDA0LDYgKzIwNDcsNyBAQAogCWFkZHJlc3MJCQkweDA1MAogCWFjY2Vzc19tb2RlCVdPCiAJbW9kZXMJCU1fREZGMCwgTV9ERkYxLCBNX1NDU0kKKwljb3VudAkJMQogCWZpZWxkCUNMUkxRSUFUTlFBUwkweDIwCiAJZmllbGQJQ0xSTFFJQ1JDVDEJMHgxMAogCWZpZWxkCUNMUkxRSUNSQ1QyCTB4MDgKQEAgLTIwMTksNiArMjA2Myw3IEBACiAJYWRkcmVzcwkJCTB4MDUwCiAJYWNjZXNzX21vZGUJUlcKIAltb2RlcwkJTV9DRkcKKwljb3VudAkJMwogCWZpZWxkCUVOTFFJQVROUUFTSwkweDIwCiAJZmllbGQJRU5MUUlDUkNUMQkweDEwCiAJZmllbGQJRU5MUUlDUkNUMgkweDA4CkBAIC0yMDM0LDYgKzIwNzksNyBAQAogCWFkZHJlc3MJCQkweDA1MQogCWFjY2Vzc19tb2RlCVJPCiAJbW9kZXMJCU1fREZGMCwgTV9ERkYxLCBNX1NDU0kKKwljb3VudAkJMwogCWZpZWxkCUxRSVBIQVNFX0xRCTB4ODAKIAlmaWVsZAlMUUlQSEFTRV9OTFEJMHg0MAogCWZpZWxkCUxRSUFCT1JUCTB4MjAKQEAgLTIwNTEsNiArMjA5Nyw3IEBACiAJYWRkcmVzcwkJCTB4MDUxCiAJYWNjZXNzX21vZGUJV08KIAltb2RlcwkJTV9ERkYwLCBNX0RGRjEsIE1fU0NTSQorCWNvdW50CQk0CiAJZmllbGQJQ0xSTFFJUEhBU0VfTFEJMHg4MAogCWZpZWxkCUNMUkxRSVBIQVNFX05MUQkweDQwCiAJZmllbGQJQ0xSTElRQUJPUlQJMHgyMApAQCAtMjA2OCw2ICsyMTE1LDcgQEAKIAlhZGRyZXNzCQkJMHgwNTEKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX0NGRworCWNvdW50CQk0CiAJZmllbGQJRU5MUUlQSEFTRV9MUQkweDgwCS8qIExRSVBIQVNFMSAqLwogCWZpZWxkCUVOTFFJUEhBU0VfTkxRCTB4NDAJLyogTFFJUEhBU0UyICovCiAJZmllbGQJRU5MSVFBQk9SVAkweDIwCkBAIC0yMTAyLDYgKzIxNTAsNyBAQAogCWFkZHJlc3MJCQkweDA1MwogCWFjY2Vzc19tb2RlCVJPCiAJbW9kZXMJCU1fREZGMCwgTV9ERkYxLCBNX1NDU0kKKwljb3VudAkJMwogCWZpZWxkCU5UUkFNUEVSUgkweDAyCiAJZmllbGQJT1NSQU1QRVJSCTB4MDEKIH0KQEAgLTIxMTMsNiArMjE2Miw3IEBACiAJYWRkcmVzcwkJCTB4MDUzCiAJYWNjZXNzX21vZGUJV08KIAltb2RlcwkJTV9ERkYwLCBNX0RGRjEsIE1fU0NTSQorCWNvdW50CQkzCiAJZmllbGQJQ0xSTlRSQU1QRVJSCTB4MDIKIAlmaWVsZAlDTFJPU1JBTVBFUlIJMHgwMQogfQpAQCAtMjEyNCw2ICsyMTc0LDcgQEAKIAlhZGRyZXNzCQkJMHgwNTMKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX0NGRworCWNvdW50CQk0CiAJZmllbGQJRU5OVFJBTVBFUlIJMHgwMgogCWZpZWxkCUVOT1NSQU1QRVJSCTB4MDEKIH0KQEAgLTIxMzUsNiArMjE4Niw3IEBACiAJYWRkcmVzcwkJCTB4MDU0CiAJYWNjZXNzX21vZGUJUk8KIAltb2RlcwkJTV9ERkYwLCBNX0RGRjEsIE1fU0NTSQorCWNvdW50CQkyCiAJZmllbGQJTFFPVEFSR1NDQlBFUlIJMHgxMAogCWZpZWxkCUxRT1NUT1BUMgkweDA4CiAJZmllbGQJTFFPQVROTFEJMHgwNApAQCAtMjE0OSw2ICsyMjAxLDcgQEAKIAlhZGRyZXNzCQkJMHgwNTQKIAlhY2Nlc3NfbW9kZQlXTwogCW1vZGVzCQlNX0RGRjAsIE1fREZGMSwgTV9TQ1NJCisJY291bnQJCTMKIAlmaWVsZAlDTFJMUU9UQVJHU0NCUEVSUgkweDEwCiAJZmllbGQJQ0xSTFFPU1RPUFQyCQkweDA4CiAJZmllbGQJQ0xSTFFPQVROTFEJCTB4MDQKQEAgLTIxNjMsNiArMjIxNiw3IEBACiAJYWRkcmVzcwkJCTB4MDU0CiAJYWNjZXNzX21vZGUJUlcKIAltb2RlcwkJTV9DRkcKKwljb3VudAkJNAogCWZpZWxkCUVOTFFPVEFSR1NDQlBFUlIJMHgxMAogCWZpZWxkCUVOTFFPU1RPUFQyCQkweDA4CiAJZmllbGQJRU5MUU9BVE5MUQkJMHgwNApAQCAtMjE5MSw2ICsyMjQ1LDcgQEAKIAlhZGRyZXNzCQkJMHgwNTUKIAlhY2Nlc3NfbW9kZQlXTwogCW1vZGVzCQlNX0RGRjAsIE1fREZGMSwgTV9TQ1NJCisJY291bnQJCTcKIAlmaWVsZAlDTFJMUU9JTklUU0NCUEVSUgkweDEwCiAJZmllbGQJQ0xSTFFPU1RPUEkyCQkweDA4CiAJZmllbGQJQ0xSTFFPQkFEUUFTCQkweDA0CkBAIC0yMjA1LDYgKzIyNjAsNyBAQAogCWFkZHJlc3MJCQkweDA1NQogCWFjY2Vzc19tb2RlCVJXCiAJbW9kZXMJCU1fQ0ZHCisJY291bnQJCTQKIAlmaWVsZAlFTkxRT0lOSVRTQ0JQRVJSCTB4MTAKIAlmaWVsZAlFTkxRT1NUT1BJMgkJMHgwOAogCWZpZWxkCUVOTFFPQkFEUUFTCQkweDA0CkBAIC0yMjMyLDYgKzIyODgsNyBAQAogCWFkZHJlc3MJCQkweDA1NgogCWFjY2Vzc19tb2RlCVJPCiAJbW9kZXMJCU1fQ0ZHCisJY291bnQJCTIKIH0KIAogLyoKQEAgLTIyODYsMTMgKzIzNDMsMTkgQEAKIAltb2RlcwkJTV9TQ1NJCiB9CiAKLS8qIFJldiBCIG9ubHkuICovCisvKgorICogTFFPIFNDU0kgQ29udHJvbAorICogKFJldiBCIG9ubHkuKQorICovCiByZWdpc3RlciBMUU9TQ1NDVEwgewogCWFkZHJlc3MJCQkweDA1QQogCWFjY2Vzc19tb2RlCVJXCiAJc2l6ZQkJMQogCW1vZGVzCQlNX0NGRworCWNvdW50CQkxCiAJZmllbGQJCUxRT0gyQV9WRVJTSU9OCTB4ODAKKwlmaWVsZAkJTFFPQlVTRVRETFkJMHg0MAorCWZpZWxkCQlMUU9OT0hPTERMQUNLCTB4MDIKIAlmaWVsZAkJTFFPTk9DSEtPVkVSCTB4MDEKIH0KIApAQCAtMjQ1OSw2ICsyNTIyLDcgQEAKIAlhZGRyZXNzCQkJMHgwNjEKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX1NDU0kKKwljb3VudAkJMQogfQogCiAvKgpAQCAtMjQ3OCw2ICsyNTQyLDcgQEAKIAlhZGRyZXNzCQkJMHgwNjIKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX1NDU0kKKwljb3VudAkJMQogfQogCiAvKgpAQCAtMjQ4Nyw2ICsyNTUyLDcgQEAKIAlhZGRyZXNzCQkJMHgwNjMKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX1NDU0kKKwljb3VudAkJMQogCWZpZWxkCVBQUk9QVF9QQUNFCTB4MDgKIAlmaWVsZAlQUFJPUFRfUUFTCTB4MDQKIAlmaWVsZAlQUFJPUFRfRFQJMHgwMgpAQCAtMjUxNiwxMiArMjU4MiwxOSBAQAogCWFkZHJlc3MJCQkweDA2NQogCWFjY2Vzc19tb2RlCVJXCiAJbW9kZXMJCU1fU0NTSQorCWNvdW50CQk3CiB9CiAKKy8qCisgKiBTQ1NJIENoZWNrCisgKiAoUmV2LiBCIG9ubHkpCisgKi8KIHJlZ2lzdGVyIFNDU0NIS04gewogCWFkZHJlc3MJCQkweDA2NgogCWFjY2Vzc19tb2RlCVJXCiAJbW9kZXMJCU1fQ0ZHCisJY291bnQJCTEKKwlmaWVsZAlCSURJQ0hLRElTCTB4ODAKIAlmaWVsZAlTVFNFTFNLSURESVMJMHg0MAogCWZpZWxkCUNVUlJGSUZPREVGCTB4MjAKIAlmaWVsZAlXSURFUkVTRU4JMHgxMApAQCAtMjU2MSw2ICsyNjM0LDcgQEAKIAlhZGRyZXNzCQkJMHgwNjYKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX1NDU0kKKwljb3VudAkJMwogfQogCiAvKgpAQCAtMjU5Niw2ICsyNjcwLDcgQEAKIAlhZGRyZXNzCQkJMHgwNjkKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX1NDU0kKKwljb3VudAkJMgogfQogCiAvKgpAQCAtMjczNyw2ICsyODEyLDcgQEAKIAlhZGRyZXNzCQkJMHgwQUIKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX0NGRworCWNvdW50CQkxCiAJZmllbGQJQVVTQ0JQVFJfRU4JMHg4MAogCWZpZWxkCVNDQlBUUl9BRERSCTB4MzgKIAlmaWVsZAlTQ0JQVFJfT0ZGCTB4MDcKQEAgLTI4ODEsNiArMjk1Nyw3IEBACiAJYWRkcmVzcwkJCTB4MEI4CiAJYWNjZXNzX21vZGUJUlcKIAltb2RlcwkJTV9TQ1NJCisJY291bnQJCTIKIH0KIAogLyoKQEAgLTI4OTAsNiArMjk2Nyw3IEBACiAJYWRkcmVzcwkJCTB4MEI5CiAJYWNjZXNzX21vZGUJUlcKIAltb2RlcwkJTV9TQ1NJCisJY291bnQJCTcKIAlmaWVsZAlGTFhBUkJBQ0sJMHg4MAogCWZpZWxkCUZMWEFSQlJFUQkweDQwCiAJZmllbGQJQlJEQUREUgkJMHgzOApAQCAtMjkwNSw2ICsyOTgzLDcgQEAKIAlhZGRyZXNzCQkJMHgwQkEKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX1NDU0kKKwljb3VudAkJNAogfQogCiAvKgpAQCAtMjkxNSw2ICsyOTk0LDcgQEAKIAlhY2Nlc3NfbW9kZQlSVwogCXNpemUJCTIKIAltb2RlcwkJTV9TQ1NJCisJY291bnQJCTQKIH0KIAogLyoKQEAgLTI5MjQsNiArMzAwNCw3IEBACiAJYWRkcmVzcwkJCTB4MEJFCiAJYWNjZXNzX21vZGUJUk8KIAltb2RlcwkJTV9TQ1NJCisJY291bnQJCTEKIAlmaWVsZAlJTklUX0RPTkUJMHg4MAogCWZpZWxkCVNFRU9QQ09ERQkweDcwCiAJZmllbGQJTERBTFRJRF9MCTB4MDgKQEAgLTI5MzksNiArMzAyMCw3IEBACiAJYWRkcmVzcwkJCTB4MEJFCiAJYWNjZXNzX21vZGUJUlcKIAltb2RlcwkJTV9TQ1NJCisJY291bnQJCTQKIAlmaWVsZAlTRUVPUENPREUJMHg3MCB7CiAJCVNFRU9QX0VSQVNFCTB4NzAsCiAJCVNFRU9QX1JFQUQJMHg2MCwKQEAgLTMwMDAsNiArMzA4Miw3IEBACiAJYWRkcmVzcwkJCTB4MEMxCiAJYWNjZXNzX21vZGUJUlcKIAltb2RlcwkJTV9DRkcKKwljb3VudAkJMwogCWZpZWxkCUJZUEFTU0VOQUIJMHg4MAogCWZpZWxkCURFU1FESVMJCTB4MTAKIAlmaWVsZAlSQ1ZST0ZGU1RESVMJMHgwNApAQCAtMzA1OCw2ICszMTQxLDcgQEAKIAlhZGRyZXNzCQkJMHgwQzQKIAlhY2Nlc3NfbW9kZQlSVwogCW1vZGVzCQlNX0NGRworCWNvdW50CQkxCiAJZmllbGQJQVVUT0lOQ0VOCTB4ODAKIAlmaWVsZAlEU1BTRUwJCTB4MUYKIH0KQEAgLTMwNzEsNiArMzE1NSw3IEBACiAJYWRkcmVzcwkJCTB4MEM1CiAJYWNjZXNzX21vZGUJV08KIAltb2RlcwkJTV9DRkcKKwljb3VudAkJMwogCWZpZWxkCUFVVE9YQkNESVMJMHg4MAogCWZpZWxkCVhNSVRNQU5WQUwJMHgzRgogfQpAQCAtMzE5Niw3ICszMjgxLDggQEAKICAqLwogcmVnaXN0ZXIgU0VRQ1RMMCB7CiAJYWRkcmVzcwkJCTB4MEQ2Ci0JYWNjZXNzX21vZGUgUlcKKwlhY2Nlc3NfbW9kZQlSVworCWNvdW50CQkxMQogCWZpZWxkCVBFUlJPUkRJUwkweDgwCiAJZmllbGQJUEFVU0VESVMJMHg0MAogCWZpZWxkCUZBSUxESVMJCTB4MjAKQEAgLTMyMjYsNyArMzMxMiw4IEBACiAgKi8KIHJlZ2lzdGVyIEZMQUdTIHsKIAlhZGRyZXNzCQkJMHgwRDgKLQlhY2Nlc3NfbW9kZSBSTworCWFjY2Vzc19tb2RlIAlSTworCWNvdW50CQkyMwogCWZpZWxkCVpFUk8JCTB4MDIKIAlmaWVsZAlDQVJSWQkJMHgwMQogfQpAQCAtMzI1NSw3ICszMzQyLDggQEAKICAqLwogcmVnaXN0ZXIgU0VRUkFNIHsKIAlhZGRyZXNzCQkJMHgwREEKLQlhY2Nlc3NfbW9kZSBSVworCWFjY2Vzc19tb2RlIAlSVworCWNvdW50CQkyCiB9CiAKIC8qCkBAIC0zMjY2LDYgKzMzNTQsNyBAQAogCWFkZHJlc3MJCQkweDBERQogCWFjY2Vzc19tb2RlCVJXCiAJc2l6ZQkJMgorCWNvdW50CQk1CiB9CiAKIC8qCkBAIC0zMjczLDcgKzMzNjIsNyBAQAogICovCiByZWdpc3RlciBBQ0NVTSB7CiAJYWRkcmVzcwkJCTB4MEUwCi0JYWNjZXNzX21vZGUgUlcKKwlhY2Nlc3NfbW9kZSAJUlcKIAlhY2N1bXVsYXRvcgogfQogCkBAIC0zNDAxLDYgKzM0OTAsNyBAQAogCWFjY2Vzc19tb2RlCVJXCiAJc2l6ZQkJMgogCW1vZGVzCQlNX0NGRworCWNvdW50CQkxCiB9CiAKIC8qCkBAIC0zNDEyLDYgKzM1MDIsNyBAQAogCWFjY2Vzc19tb2RlCVJXCiAJc2l6ZQkJMgogCW1vZGVzCQlNX1NDU0kKKwljb3VudAkJMgogfQogCiAvKgpAQCAtMzQyMyw2ICszNTE0LDcgQEAKIAlhY2Nlc3NfbW9kZQlSVwogCXNpemUJCTIKIAltb2RlcwkJTV9DRkcKKwljb3VudAkJMQogfQogCiAvKgpAQCAtMzU3OSw2ICszNjcxLDcgQEAKIAkvKiBQYXJhbWV0ZXJzIGZvciBETUEgTG9naWMgKi8KIAlETUFQQVJBTVMgewogCQlzaXplCQkxCisJCWNvdW50CQk4CiAJCWZpZWxkCVBSRUxPQURFTgkweDgwCiAJCWZpZWxkCVdJREVPREQJCTB4NDAKIAkJZmllbGQJU0NTSUVOCQkweDIwCkBAIC0zNjQ4LDkgKzM3NDEsMTEgQEAKIAkgKi8KIAlLRVJORUxfVFFJTlBPUyB7CiAJCXNpemUJCTEKKwkJY291bnQJCTEKIAl9Ci0JVFFJTlBPUyB7ICAgICAgICAgICAgICAgIAorCVRRSU5QT1MgewogCQlzaXplCQkxCisJCWNvdW50CQk4CiAJfQogCS8qCiAJICogQmFzZSBhZGRyZXNzIG9mIG91ciBzaGFyZWQgZGF0YSB3aXRoIHRoZSBrZXJuZWwgZHJpdmVyIGluIGhvc3QKQEAgLTM2ODEsNiArMzc3Niw3IEBACiAJfQogCUFSR18yIHsKIAkJc2l6ZQkJMQorCQljb3VudAkJMQogCQlhbGlhcwlSRVRVUk5fMgogCX0KIApAQCAtMzY5OCw2ICszNzk0LDcgQEAKIAkgKi8KIAlTQ1NJU0VRX1RFTVBMQVRFIHsKIAkJc2l6ZQkJMQorCQljb3VudAkJNwogCQlmaWVsZAlNQU5VQUxDVEwJMHg0MAogCQlmaWVsZAlFTlNFTEkJCTB4MjAKIAkJZmllbGQJRU5SU0VMSQkJMHgxMApAQCAtMzcxMSw2ICszODA4LDcgQEAKIAkgKi8KIAlJTklUSUFUT1JfVEFHIHsKIAkJc2l6ZQkJMQorCQljb3VudAkJMQogCX0KIAogCVNFUV9GTEFHUzIgewpAQCAtMzc3Nyw2ICszODc1LDcgQEAKIAkgKi8KIAlDTURTSVpFX1RBQkxFIHsKIAkJc2l6ZQkJOAorCQljb3VudAkJOAogCX0KIAkvKgogCSAqIFdoZW4gYW4gU0NCIHdpdGggdGhlIE1LX01FU1NBR0UgZmxhZyBpcwpAQCAtMzgwMyw4ICszOTAyLDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqIEhhcmR3YXJlIFNDQiBEZWZpbml0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzY2IgewogCWFkZHJlc3MJCQkweDE4MAotCXNpemUJNjQKLQltb2RlcwkwLCAxLCAyLCAzCisJc2l6ZQkJNjQKKwltb2RlcwkJMCwgMSwgMiwgMwogCVNDQl9SRVNJRFVBTF9EQVRBQ05UIHsKIAkJc2l6ZQk0CiAJCWFsaWFzCVNDQl9DREJfU1RPUkUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfY29yZS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9jb3JlLmMKaW5kZXggYWRlMGZiOC4uNTU1MDhiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9jb3JlLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9jb3JlLmMKQEAgLTUyLDcgKzUyLDcgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogTG9va3VwIFRhYmxlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGNoYXIgKmFoZF9jaGlwX25hbWVzW10gPQorc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGFoZF9jaGlwX25hbWVzW10gPQogewogCSJOT05FIiwKIAkiYWljNzkwMSIsCkBAIC02NiwxMCArNjYsMTAgQEAKICAqLwogc3RydWN0IGFoZF9oYXJkX2Vycm9yX2VudHJ5IHsKICAgICAgICAgdWludDhfdCBlcnJubzsKLQljaGFyICplcnJtZXNnOworCWNvbnN0IGNoYXIgKmVycm1lc2c7CiB9OwogCi1zdGF0aWMgc3RydWN0IGFoZF9oYXJkX2Vycm9yX2VudHJ5IGFoZF9oYXJkX2Vycm9yc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhaGRfaGFyZF9lcnJvcl9lbnRyeSBhaGRfaGFyZF9lcnJvcnNbXSA9IHsKIAl7IERTQ1RNT1VULAkiRGlzY2FyZCBUaW1lciBoYXMgdGltZWQgb3V0IiB9LAogCXsgSUxMT1BDT0RFLAkiSWxsZWdhbCBPcGNvZGUgaW4gc2VxdWVuY2VyIHByb2dyYW0iIH0sCiAJeyBTUVBBUkVSUiwJIlNlcXVlbmNlciBQYXJpdHkgRXJyb3IiIH0sCkBAIC03OSw3ICs3OSw3IEBACiB9Owogc3RhdGljIGNvbnN0IHVfaW50IG51bV9lcnJvcnMgPSBBUlJBWV9TSVpFKGFoZF9oYXJkX2Vycm9ycyk7CiAKLXN0YXRpYyBzdHJ1Y3QgYWhkX3BoYXNlX3RhYmxlX2VudHJ5IGFoZF9waGFzZV90YWJsZVtdID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWhkX3BoYXNlX3RhYmxlX2VudHJ5IGFoZF9waGFzZV90YWJsZVtdID0KIHsKIAl7IFBfREFUQU9VVCwJTVNHX05PT1AsCQkiaW4gRGF0YS1vdXQgcGhhc2UiCX0sCiAJeyBQX0RBVEFJTiwJTVNHX0lOSVRJQVRPUl9ERVRfRVJSLAkiaW4gRGF0YS1pbiBwaGFzZSIJfSwKQEAgLTIxMyw3ICsyMTMsNyBAQAogI2VuZGlmCiBzdGF0aWMgdm9pZAkJYWhkX2xvYWRzZXEoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKIHN0YXRpYyBpbnQJCWFoZF9jaGVja19wYXRjaChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsCi0JCQkJCXN0cnVjdCBwYXRjaCAqKnN0YXJ0X3BhdGNoLAorCQkJCQljb25zdCBzdHJ1Y3QgcGF0Y2ggKipzdGFydF9wYXRjaCwKIAkJCQkJdV9pbnQgc3RhcnRfaW5zdHIsIHVfaW50ICpza2lwX2FkZHIpOwogc3RhdGljIHVfaW50CQlhaGRfcmVzb2x2ZV9zZXFhZGRyKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwKIAkJCQkJICAgIHVfaW50IGFkZHJlc3MpOwpAQCAtMjU0LDcgKzI1NCw3IEBACiAJCQkJCXN0cnVjdCBzY2IgKnNjYik7CiBzdGF0aWMgdm9pZAkJYWhkX2hhbmRsZV9zY2Jfc3RhdHVzKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwKIAkJCQkJICAgICAgc3RydWN0IHNjYiAqc2NiKTsKLXN0YXRpYyBzdHJ1Y3QgYWhkX3BoYXNlX3RhYmxlX2VudHJ5KiBhaGRfbG9va3VwX3BoYXNlX2VudHJ5KGludCBwaGFzZSk7CitzdGF0aWMgY29uc3Qgc3RydWN0IGFoZF9waGFzZV90YWJsZV9lbnRyeSogYWhkX2xvb2t1cF9waGFzZV9lbnRyeShpbnQgcGhhc2UpOwogc3RhdGljIHZvaWQJCWFoZF9zaHV0ZG93bih2b2lkICphcmcpOwogc3RhdGljIHZvaWQJCWFoZF91cGRhdGVfY29hbGVzY2luZ192YWx1ZXMoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLAogCQkJCQkJICAgICB1X2ludCB0aW1lciwKQEAgLTI2Niw4ICsyNjYsNzc0IEBACiAJCQkJICAgICAgaW50IHRhcmdldCwgY2hhciBjaGFubmVsLCBpbnQgbHVuLAogCQkJCSAgICAgIHVfaW50IHRhZywgcm9sZV90IHJvbGUpOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogUHJpdmF0ZSBJbmxpbmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQJCWFoZF9yZXNldF9jbWRzX3BlbmRpbmcoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiBJbnRlcnJ1cHQgU2VydmljZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkCQlhaGRfcnVuX3FvdXRmaWZvKHN0cnVjdCBhaGRfc29mdGMgKmFoZCk7CisjaWZkZWYgQUhEX1RBUkdFVF9NT0RFCitzdGF0aWMgdm9pZAkJYWhkX3J1bl90cWluZmlmbyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIGludCBwYXVzZWQpOworI2VuZGlmCitzdGF0aWMgdm9pZAkJYWhkX2hhbmRsZV9od2VycmludChzdHJ1Y3QgYWhkX3NvZnRjICphaGQpOworc3RhdGljIHZvaWQJCWFoZF9oYW5kbGVfc2VxaW50KHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgaW50c3RhdCk7CitzdGF0aWMgdm9pZAkJYWhkX2hhbmRsZV9zY3NpaW50KHN0cnVjdCBhaGRfc29mdGMgKmFoZCwKKwkJCQkgICAgICAgICAgIHVfaW50IGludHN0YXQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqIFNlcXVlbmNlciBFeGVjdXRpb24gQ29udHJvbCAqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZAorYWhkX3NldF9tb2RlcyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIGFoZF9tb2RlIHNyYywgYWhkX21vZGUgZHN0KQoreworCWlmIChhaGQtPnNyY19tb2RlID09IHNyYyAmJiBhaGQtPmRzdF9tb2RlID09IGRzdCkKKwkJcmV0dXJuOworI2lmZGVmIEFIRF9ERUJVRworCWlmIChhaGQtPnNyY19tb2RlID09IEFIRF9NT0RFX1VOS05PV04KKwkgfHwgYWhkLT5kc3RfbW9kZSA9PSBBSERfTU9ERV9VTktOT1dOKQorCQlwYW5pYygiU2V0dGluZyBtb2RlIHByaW9yIHRvIHNhdmluZyBpdC5cbiIpOworCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfTU9ERVBUUikgIT0gMCkKKwkJcHJpbnRmKCIlczogU2V0dGluZyBtb2RlIDB4JXhcbiIsIGFoZF9uYW1lKGFoZCksCisJCSAgICAgICBhaGRfYnVpbGRfbW9kZV9zdGF0ZShhaGQsIHNyYywgZHN0KSk7CisjZW5kaWYKKwlhaGRfb3V0YihhaGQsIE1PREVfUFRSLCBhaGRfYnVpbGRfbW9kZV9zdGF0ZShhaGQsIHNyYywgZHN0KSk7CisJYWhkLT5zcmNfbW9kZSA9IHNyYzsKKwlhaGQtPmRzdF9tb2RlID0gZHN0OworfQorCitzdGF0aWMgdm9pZAorYWhkX3VwZGF0ZV9tb2RlcyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQpCit7CisJYWhkX21vZGVfc3RhdGUgbW9kZV9wdHI7CisJYWhkX21vZGUgc3JjOworCWFoZF9tb2RlIGRzdDsKKworCW1vZGVfcHRyID0gYWhkX2luYihhaGQsIE1PREVfUFRSKTsKKyNpZmRlZiBBSERfREVCVUcKKwlpZiAoKGFoZF9kZWJ1ZyAmIEFIRF9TSE9XX01PREVQVFIpICE9IDApCisJCXByaW50ZigiUmVhZGluZyBtb2RlIDB4JXhcbiIsIG1vZGVfcHRyKTsKKyNlbmRpZgorCWFoZF9leHRyYWN0X21vZGVfc3RhdGUoYWhkLCBtb2RlX3B0ciwgJnNyYywgJmRzdCk7CisJYWhkX2tub3duX21vZGVzKGFoZCwgc3JjLCBkc3QpOworfQorCitzdGF0aWMgdm9pZAorYWhkX2Fzc2VydF9tb2RlcyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIGFoZF9tb2RlIHNyY21vZGUsCisJCSBhaGRfbW9kZSBkc3Rtb2RlLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkKK3sKKyNpZmRlZiBBSERfREVCVUcKKwlpZiAoKHNyY21vZGUgJiBBSERfTUtfTVNLKGFoZC0+c3JjX21vZGUpKSA9PSAwCisJIHx8IChkc3Rtb2RlICYgQUhEX01LX01TSyhhaGQtPmRzdF9tb2RlKSkgPT0gMCkgeworCQlwYW5pYygiJXM6JXM6JWQ6IE1vZGUgYXNzZXJ0aW9uIGZhaWxlZC5cbiIsCisJCSAgICAgICBhaGRfbmFtZShhaGQpLCBmaWxlLCBsaW5lKTsKKwl9CisjZW5kaWYKK30KKworI2RlZmluZSBBSERfQVNTRVJUX01PREVTKGFoZCwgc291cmNlLCBkZXN0KSBcCisJYWhkX2Fzc2VydF9tb2RlcyhhaGQsIHNvdXJjZSwgZGVzdCwgX19GSUxFX18sIF9fTElORV9fKTsKKworYWhkX21vZGVfc3RhdGUKK2FoZF9zYXZlX21vZGVzKHN0cnVjdCBhaGRfc29mdGMgKmFoZCkKK3sKKwlpZiAoYWhkLT5zcmNfbW9kZSA9PSBBSERfTU9ERV9VTktOT1dOCisJIHx8IGFoZC0+ZHN0X21vZGUgPT0gQUhEX01PREVfVU5LTk9XTikKKwkJYWhkX3VwZGF0ZV9tb2RlcyhhaGQpOworCisJcmV0dXJuIChhaGRfYnVpbGRfbW9kZV9zdGF0ZShhaGQsIGFoZC0+c3JjX21vZGUsIGFoZC0+ZHN0X21vZGUpKTsKK30KKwordm9pZAorYWhkX3Jlc3RvcmVfbW9kZXMoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCBhaGRfbW9kZV9zdGF0ZSBzdGF0ZSkKK3sKKwlhaGRfbW9kZSBzcmM7CisJYWhkX21vZGUgZHN0OworCisJYWhkX2V4dHJhY3RfbW9kZV9zdGF0ZShhaGQsIHN0YXRlLCAmc3JjLCAmZHN0KTsKKwlhaGRfc2V0X21vZGVzKGFoZCwgc3JjLCBkc3QpOworfQorCisvKgorICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNlcXVlbmNlciBoYXMgaGFsdGVkIGNvZGUgZXhlY3V0aW9uLgorICogUmV0dXJucyBub24temVybyBzdGF0dXMgaWYgdGhlIHNlcXVlbmNlciBpcyBzdG9wcGVkLgorICovCitpbnQKK2FoZF9pc19wYXVzZWQoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKQoreworCXJldHVybiAoKGFoZF9pbmIoYWhkLCBIQ05UUkwpICYgUEFVU0UpICE9IDApOworfQorCisvKgorICogUmVxdWVzdCB0aGF0IHRoZSBzZXF1ZW5jZXIgc3RvcCBhbmQgd2FpdCwgaW5kZWZpbml0ZWx5LCBmb3IgaXQKKyAqIHRvIHN0b3AuICBUaGUgc2VxdWVuY2VyIHdpbGwgb25seSBhY2tub3dsZWRnZSB0aGF0IGl0IGlzIHBhdXNlZAorICogb25jZSBpdCBoYXMgcmVhY2hlZCBhbiBpbnN0cnVjdGlvbiBib3VuZGFyeSBhbmQgUEFVU0VESVMgaXMKKyAqIGNsZWFyZWQgaW4gdGhlIFNFUUNUTCByZWdpc3Rlci4gIFRoZSBzZXF1ZW5jZXIgbWF5IHVzZSBQQVVTRURJUworICogZm9yIGNyaXRpY2FsIHNlY3Rpb25zLgorICovCit2b2lkCithaGRfcGF1c2Uoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKQoreworCWFoZF9vdXRiKGFoZCwgSENOVFJMLCBhaGQtPnBhdXNlKTsKKworCS8qCisJICogU2luY2UgdGhlIHNlcXVlbmNlciBjYW4gZGlzYWJsZSBwYXVzaW5nIGluIGEgY3JpdGljYWwgc2VjdGlvbiwgd2UKKwkgKiBtdXN0IGxvb3AgdW50aWwgaXQgYWN0dWFsbHkgc3RvcHMuCisJICovCisJd2hpbGUgKGFoZF9pc19wYXVzZWQoYWhkKSA9PSAwKQorCQk7Cit9CisKKy8qCisgKiBBbGxvdyB0aGUgc2VxdWVuY2VyIHRvIGNvbnRpbnVlIHByb2dyYW0gZXhlY3V0aW9uLgorICogV2UgY2hlY2sgaGVyZSB0byBlbnN1cmUgdGhhdCBubyBhZGRpdGlvbmFsIGludGVycnVwdAorICogc291cmNlcyB0aGF0IHdvdWxkIGNhdXNlIHRoZSBzZXF1ZW5jZXIgdG8gaGFsdCBoYXZlIGJlZW4KKyAqIGFzc2VydGVkLiAgSWYsIGZvciBleGFtcGxlLCBhIFNDU0kgYnVzIHJlc2V0IGlzIGRldGVjdGVkCisgKiB3aGlsZSB3ZSBhcmUgZmllbGRpbmcgYSBkaWZmZXJlbnQsIHBhdXNpbmcsIGludGVycnVwdCB0eXBlLAorICogd2UgZG9uJ3Qgd2FudCB0byByZWxlYXNlIHRoZSBzZXF1ZW5jZXIgYmVmb3JlIGdvaW5nIGJhY2sKKyAqIGludG8gb3VyIGludGVycnVwdCBoYW5kbGVyIGFuZCBkZWFsaW5nIHdpdGggdGhpcyBuZXcKKyAqIGNvbmRpdGlvbi4KKyAqLwordm9pZAorYWhkX3VucGF1c2Uoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKQoreworCS8qCisJICogQXV0b21hdGljYWxseSByZXN0b3JlIG91ciBtb2RlcyB0byB0aG9zZSBzYXZlZAorCSAqIHByaW9yIHRvIHRoZSBmaXJzdCBjaGFuZ2Ugb2YgdGhlIG1vZGUuCisJICovCisJaWYgKGFoZC0+c2F2ZWRfc3JjX21vZGUgIT0gQUhEX01PREVfVU5LTk9XTgorCSAmJiBhaGQtPnNhdmVkX2RzdF9tb2RlICE9IEFIRF9NT0RFX1VOS05PV04pIHsKKwkJaWYgKChhaGQtPmZsYWdzICYgQUhEX1VQREFURV9QRU5EX0NNRFMpICE9IDApCisJCQlhaGRfcmVzZXRfY21kc19wZW5kaW5nKGFoZCk7CisJCWFoZF9zZXRfbW9kZXMoYWhkLCBhaGQtPnNhdmVkX3NyY19tb2RlLCBhaGQtPnNhdmVkX2RzdF9tb2RlKTsKKwl9CisKKwlpZiAoKGFoZF9pbmIoYWhkLCBJTlRTVEFUKSAmIH5DTURDTVBMVCkgPT0gMCkKKwkJYWhkX291dGIoYWhkLCBIQ05UUkwsIGFoZC0+dW5wYXVzZSk7CisKKwlhaGRfa25vd25fbW9kZXMoYWhkLCBBSERfTU9ERV9VTktOT1dOLCBBSERfTU9ERV9VTktOT1dOKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqIFNjYXR0ZXIgR2F0aGVyIExpc3QgSGFuZGxpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgKgorYWhkX3NnX3NldHVwKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgc3RydWN0IHNjYiAqc2NiLAorCSAgICAgdm9pZCAqc2dwdHIsIGRtYV9hZGRyX3QgYWRkciwgYnVzX3NpemVfdCBsZW4sIGludCBsYXN0KQoreworCXNjYi0+c2dfY291bnQrKzsKKwlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID4gNAorCSAmJiAoYWhkLT5mbGFncyAmIEFIRF82NEJJVF9BRERSRVNTSU5HKSAhPSAwKSB7CisJCXN0cnVjdCBhaGRfZG1hNjRfc2VnICpzZzsKKworCQlzZyA9IChzdHJ1Y3QgYWhkX2RtYTY0X3NlZyAqKXNncHRyOworCQlzZy0+YWRkciA9IGFoZF9odG9sZTY0KGFkZHIpOworCQlzZy0+bGVuID0gYWhkX2h0b2xlMzIobGVuIHwgKGxhc3QgPyBBSERfRE1BX0xBU1RfU0VHIDogMCkpOworCQlyZXR1cm4gKHNnICsgMSk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGFoZF9kbWFfc2VnICpzZzsKKworCQlzZyA9IChzdHJ1Y3QgYWhkX2RtYV9zZWcgKilzZ3B0cjsKKwkJc2ctPmFkZHIgPSBhaGRfaHRvbGUzMihhZGRyICYgMHhGRkZGRkZGRik7CisJCXNnLT5sZW4gPSBhaGRfaHRvbGUzMihsZW4gfCAoKGFkZHIgPj4gOCkgJiAweDdGMDAwMDAwKQorCQkJCSAgICB8IChsYXN0ID8gQUhEX0RNQV9MQVNUX1NFRyA6IDApKTsKKwkJcmV0dXJuIChzZyArIDEpOworCX0KK30KKworc3RhdGljIHZvaWQKK2FoZF9zZXR1cF9zY2JfY29tbW9uKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgc3RydWN0IHNjYiAqc2NiKQoreworCS8qIFhYWCBIYW5kbGUgdGFyZ2V0IG1vZGUgU0NCcy4gKi8KKwlzY2ItPmNyY19yZXRyeV9jb3VudCA9IDA7CisJaWYgKChzY2ItPmZsYWdzICYgU0NCX1BBQ0tFVElaRUQpICE9IDApIHsKKwkJLyogWFhYIHdoYXQgYWJvdXQgQUNBPz8gIEl0IGlzIHR5cGUgNCwgYnV0IFRBR19UWVBFID09IDB4My4gKi8KKwkJc2NiLT5oc2NiLT50YXNrX2F0dHJpYnV0ZSA9IHNjYi0+aHNjYi0+Y29udHJvbCAmIFNDQl9UQUdfVFlQRTsKKwl9IGVsc2UgeworCQlpZiAoYWhkX2dldF90cmFuc2Zlcl9sZW5ndGgoc2NiKSAmIDB4MDEpCisJCQlzY2ItPmhzY2ItPnRhc2tfYXR0cmlidXRlID0gU0NCX1hGRVJMRU5fT0REOworCQllbHNlCisJCQlzY2ItPmhzY2ItPnRhc2tfYXR0cmlidXRlID0gMDsKKwl9CisKKwlpZiAoc2NiLT5oc2NiLT5jZGJfbGVuIDw9IE1BWF9DREJfTEVOX1dJVEhfU0VOU0VfQUREUgorCSB8fCAoc2NiLT5oc2NiLT5jZGJfbGVuICYgU0NCX0NEQl9MRU5fUFRSKSAhPSAwKQorCQlzY2ItPmhzY2ItPnNoYXJlZF9kYXRhLmlkYXRhLmNkYl9wbHVzX3NhZGRyLnNlbnNlX2FkZHIgPQorCQkgICAgYWhkX2h0b2xlMzIoc2NiLT5zZW5zZV9idXNhZGRyKTsKK30KKworc3RhdGljIHZvaWQKK2FoZF9zZXR1cF9kYXRhX3NjYihzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHN0cnVjdCBzY2IgKnNjYikKK3sKKwkvKgorCSAqIENvcHkgdGhlIGZpcnN0IFNHIGludG8gdGhlICJjdXJyZW50IiBkYXRhIHBvbnRlciBhcmVhLgorCSAqLworCWlmICgoYWhkLT5mbGFncyAmIEFIRF82NEJJVF9BRERSRVNTSU5HKSAhPSAwKSB7CisJCXN0cnVjdCBhaGRfZG1hNjRfc2VnICpzZzsKKworCQlzZyA9IChzdHJ1Y3QgYWhkX2RtYTY0X3NlZyAqKXNjYi0+c2dfbGlzdDsKKwkJc2NiLT5oc2NiLT5kYXRhcHRyID0gc2ctPmFkZHI7CisJCXNjYi0+aHNjYi0+ZGF0YWNudCA9IHNnLT5sZW47CisJfSBlbHNlIHsKKwkJc3RydWN0IGFoZF9kbWFfc2VnICpzZzsKKwkJdWludDMyX3QgKmRhdGFwdHJfd29yZHM7CisKKwkJc2cgPSAoc3RydWN0IGFoZF9kbWFfc2VnICopc2NiLT5zZ19saXN0OworCQlkYXRhcHRyX3dvcmRzID0gKHVpbnQzMl90Kikmc2NiLT5oc2NiLT5kYXRhcHRyOworCQlkYXRhcHRyX3dvcmRzWzBdID0gc2ctPmFkZHI7CisJCWRhdGFwdHJfd29yZHNbMV0gPSAwOworCQlpZiAoKGFoZC0+ZmxhZ3MgJiBBSERfMzlCSVRfQUREUkVTU0lORykgIT0gMCkgeworCQkJdWludDY0X3QgaGlnaF9hZGRyOworCisJCQloaWdoX2FkZHIgPSBhaGRfbGUzMnRvaChzZy0+bGVuKSAmIDB4N0YwMDAwMDA7CisJCQlzY2ItPmhzY2ItPmRhdGFwdHIgfD0gYWhkX2h0b2xlNjQoaGlnaF9hZGRyIDw8IDgpOworCQl9CisJCXNjYi0+aHNjYi0+ZGF0YWNudCA9IHNnLT5sZW47CisJfQorCS8qCisJICogTm90ZSB3aGVyZSB0byBmaW5kIHRoZSBTRyBlbnRyaWVzIGluIGJ1cyBzcGFjZS4KKwkgKiBXZSBhbHNvIHNldCB0aGUgZnVsbCByZXNpZHVhbCBmbGFnIHdoaWNoIHRoZQorCSAqIHNlcXVlbmNlciB3aWxsIGNsZWFyIGFzIHNvb24gYXMgYSBkYXRhIHRyYW5zZmVyCisJICogb2NjdXJzLgorCSAqLworCXNjYi0+aHNjYi0+c2dwdHIgPSBhaGRfaHRvbGUzMihzY2ItPnNnX2xpc3RfYnVzYWRkcnxTR19GVUxMX1JFU0lEKTsKK30KKworc3RhdGljIHZvaWQKK2FoZF9zZXR1cF9ub3hmZXJfc2NiKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgc3RydWN0IHNjYiAqc2NiKQoreworCXNjYi0+aHNjYi0+c2dwdHIgPSBhaGRfaHRvbGUzMihTR19MSVNUX05VTEwpOworCXNjYi0+aHNjYi0+ZGF0YXB0ciA9IDA7CisJc2NiLT5oc2NiLT5kYXRhY250ID0gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqIE1lbW9yeSBtYXBwaW5nIHJvdXRpbmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkICoKK2FoZF9zZ19idXNfdG9fdmlydChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHN0cnVjdCBzY2IgKnNjYiwgdWludDMyX3Qgc2dfYnVzYWRkcikKK3sKKwlkbWFfYWRkcl90IHNnX29mZnNldDsKKworCS8qIHNnX2xpc3RfcGh5cyBwb2ludHMgdG8gZW50cnkgMSwgbm90IDAgKi8KKwlzZ19vZmZzZXQgPSBzZ19idXNhZGRyIC0gKHNjYi0+c2dfbGlzdF9idXNhZGRyIC0gYWhkX3NnX3NpemUoYWhkKSk7CisJcmV0dXJuICgodWludDhfdCAqKXNjYi0+c2dfbGlzdCArIHNnX29mZnNldCk7Cit9CisKK3N0YXRpYyB1aW50MzJfdAorYWhkX3NnX3ZpcnRfdG9fYnVzKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgc3RydWN0IHNjYiAqc2NiLCB2b2lkICpzZykKK3sKKwlkbWFfYWRkcl90IHNnX29mZnNldDsKKworCS8qIHNnX2xpc3RfcGh5cyBwb2ludHMgdG8gZW50cnkgMSwgbm90IDAgKi8KKwlzZ19vZmZzZXQgPSAoKHVpbnQ4X3QgKilzZyAtICh1aW50OF90ICopc2NiLT5zZ19saXN0KQorCQkgIC0gYWhkX3NnX3NpemUoYWhkKTsKKworCXJldHVybiAoc2NiLT5zZ19saXN0X2J1c2FkZHIgKyBzZ19vZmZzZXQpOworfQorCitzdGF0aWMgdm9pZAorYWhkX3N5bmNfc2NiKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgc3RydWN0IHNjYiAqc2NiLCBpbnQgb3ApCit7CisJYWhkX2RtYW1hcF9zeW5jKGFoZCwgYWhkLT5zY2JfZGF0YS5oc2NiX2RtYXQsCisJCQlzY2ItPmhzY2JfbWFwLT5kbWFtYXAsCisJCQkvKm9mZnNldCovKHVpbnQ4X3QqKXNjYi0+aHNjYiAtIHNjYi0+aHNjYl9tYXAtPnZhZGRyLAorCQkJLypsZW4qL3NpemVvZigqc2NiLT5oc2NiKSwgb3ApOworfQorCit2b2lkCithaGRfc3luY19zZ2xpc3Qoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCBzdHJ1Y3Qgc2NiICpzY2IsIGludCBvcCkKK3sKKwlpZiAoc2NiLT5zZ19jb3VudCA9PSAwKQorCQlyZXR1cm47CisKKwlhaGRfZG1hbWFwX3N5bmMoYWhkLCBhaGQtPnNjYl9kYXRhLnNnX2RtYXQsCisJCQlzY2ItPnNnX21hcC0+ZG1hbWFwLAorCQkJLypvZmZzZXQqL3NjYi0+c2dfbGlzdF9idXNhZGRyIC0gYWhkX3NnX3NpemUoYWhkKSwKKwkJCS8qbGVuKi9haGRfc2dfc2l6ZShhaGQpICogc2NiLT5zZ19jb3VudCwgb3ApOworfQorCitzdGF0aWMgdm9pZAorYWhkX3N5bmNfc2Vuc2Uoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCBzdHJ1Y3Qgc2NiICpzY2IsIGludCBvcCkKK3sKKwlhaGRfZG1hbWFwX3N5bmMoYWhkLCBhaGQtPnNjYl9kYXRhLnNlbnNlX2RtYXQsCisJCQlzY2ItPnNlbnNlX21hcC0+ZG1hbWFwLAorCQkJLypvZmZzZXQqL3NjYi0+c2Vuc2VfYnVzYWRkciwKKwkJCS8qbGVuKi9BSERfU0VOU0VfQlVGU0laRSwgb3ApOworfQorCisjaWZkZWYgQUhEX1RBUkdFVF9NT0RFCitzdGF0aWMgdWludDMyX3QKK2FoZF90YXJnZXRjbWRfb2Zmc2V0KHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgaW5kZXgpCit7CisJcmV0dXJuICgoKHVpbnQ4X3QgKikmYWhkLT50YXJnZXRjbWRzW2luZGV4XSkKKwkgICAgICAgLSAodWludDhfdCAqKWFoZC0+cW91dGZpZm8pOworfQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKiBNaXNjZWxhbmVvdXMgU3VwcG9ydCBGdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogUmV0dXJuIHBvaW50ZXJzIHRvIHRoZSB0cmFuc2ZlciBuZWdvdGlhdGlvbiBpbmZvcm1hdGlvbgorICogZm9yIHRoZSBzcGVjaWZpZWQgb3VyX2lkL3JlbW90ZV9pZCBwYWlyLgorICovCitzdHJ1Y3QgYWhkX2luaXRpYXRvcl90aW5mbyAqCithaGRfZmV0Y2hfdHJhbnNpbmZvKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgY2hhciBjaGFubmVsLCB1X2ludCBvdXJfaWQsCisJCSAgICB1X2ludCByZW1vdGVfaWQsIHN0cnVjdCBhaGRfdG1vZGVfdHN0YXRlICoqdHN0YXRlKQoreworCS8qCisJICogVHJhbnNmZXIgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBzdG9yZWQgZnJvbSB0aGUgcGVyc3BlY3RpdmUKKwkgKiBvZiB0aGUgdGFyZ2V0IHJvbGUuICBTaW5jZSB0aGUgcGFyYW1ldGVycyBmb3IgYSBjb25uZWN0aW9uCisJICogaW4gdGhlIGluaXRpYXRvciByb2xlIHRvIGEgZ2l2ZW4gdGFyZ2V0IGFyZSB0aGUgc2FtZSBhcworCSAqIHdoZW4gdGhlIHJvbGVzIGFyZSByZXZlcnNlZCwgd2UgcHJldGVuZCB3ZSBhcmUgdGhlIHRhcmdldC4KKwkgKi8KKwlpZiAoY2hhbm5lbCA9PSAnQicpCisJCW91cl9pZCArPSA4OworCSp0c3RhdGUgPSBhaGQtPmVuYWJsZWRfdGFyZ2V0c1tvdXJfaWRdOworCXJldHVybiAoJigqdHN0YXRlKS0+dHJhbnNpbmZvW3JlbW90ZV9pZF0pOworfQorCit1aW50MTZfdAorYWhkX2ludyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IHBvcnQpCit7CisJLyoKKwkgKiBSZWFkIGhpZ2ggYnl0ZSBmaXJzdCBhcyBzb21lIHJlZ2lzdGVycyBpbmNyZW1lbnQKKwkgKiBvciBoYXZlIG90aGVyIHNpZGUgZWZmZWN0cyB3aGVuIHRoZSBsb3cgYnl0ZSBpcworCSAqIHJlYWQuCisJICovCisJdWludDE2X3QgciA9IGFoZF9pbmIoYWhkLCBwb3J0KzEpIDw8IDg7CisJcmV0dXJuIHIgfCBhaGRfaW5iKGFoZCwgcG9ydCk7Cit9CisKK3ZvaWQKK2FoZF9vdXR3KHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgcG9ydCwgdV9pbnQgdmFsdWUpCit7CisJLyoKKwkgKiBXcml0ZSBsb3cgYnl0ZSBmaXJzdCB0byBhY2NvbW9kYXRlIHJlZ2lzdGVycworCSAqIHN1Y2ggYXMgUFJHTUNOVCB3aGVyZSB0aGUgb3JkZXIgbWF0ZXJzLgorCSAqLworCWFoZF9vdXRiKGFoZCwgcG9ydCwgdmFsdWUgJiAweEZGKTsKKwlhaGRfb3V0YihhaGQsIHBvcnQrMSwgKHZhbHVlID4+IDgpICYgMHhGRik7Cit9CisKK3VpbnQzMl90CithaGRfaW5sKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgcG9ydCkKK3sKKwlyZXR1cm4gKChhaGRfaW5iKGFoZCwgcG9ydCkpCisJICAgICAgfCAoYWhkX2luYihhaGQsIHBvcnQrMSkgPDwgOCkKKwkgICAgICB8IChhaGRfaW5iKGFoZCwgcG9ydCsyKSA8PCAxNikKKwkgICAgICB8IChhaGRfaW5iKGFoZCwgcG9ydCszKSA8PCAyNCkpOworfQorCit2b2lkCithaGRfb3V0bChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IHBvcnQsIHVpbnQzMl90IHZhbHVlKQoreworCWFoZF9vdXRiKGFoZCwgcG9ydCwgKHZhbHVlKSAmIDB4RkYpOworCWFoZF9vdXRiKGFoZCwgcG9ydCsxLCAoKHZhbHVlKSA+PiA4KSAmIDB4RkYpOworCWFoZF9vdXRiKGFoZCwgcG9ydCsyLCAoKHZhbHVlKSA+PiAxNikgJiAweEZGKTsKKwlhaGRfb3V0YihhaGQsIHBvcnQrMywgKCh2YWx1ZSkgPj4gMjQpICYgMHhGRik7Cit9CisKK3VpbnQ2NF90CithaGRfaW5xKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgcG9ydCkKK3sKKwlyZXR1cm4gKChhaGRfaW5iKGFoZCwgcG9ydCkpCisJICAgICAgfCAoYWhkX2luYihhaGQsIHBvcnQrMSkgPDwgOCkKKwkgICAgICB8IChhaGRfaW5iKGFoZCwgcG9ydCsyKSA8PCAxNikKKwkgICAgICB8IChhaGRfaW5iKGFoZCwgcG9ydCszKSA8PCAyNCkKKwkgICAgICB8ICgoKHVpbnQ2NF90KWFoZF9pbmIoYWhkLCBwb3J0KzQpKSA8PCAzMikKKwkgICAgICB8ICgoKHVpbnQ2NF90KWFoZF9pbmIoYWhkLCBwb3J0KzUpKSA8PCA0MCkKKwkgICAgICB8ICgoKHVpbnQ2NF90KWFoZF9pbmIoYWhkLCBwb3J0KzYpKSA8PCA0OCkKKwkgICAgICB8ICgoKHVpbnQ2NF90KWFoZF9pbmIoYWhkLCBwb3J0KzcpKSA8PCA1NikpOworfQorCit2b2lkCithaGRfb3V0cShzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IHBvcnQsIHVpbnQ2NF90IHZhbHVlKQoreworCWFoZF9vdXRiKGFoZCwgcG9ydCwgdmFsdWUgJiAweEZGKTsKKwlhaGRfb3V0YihhaGQsIHBvcnQrMSwgKHZhbHVlID4+IDgpICYgMHhGRik7CisJYWhkX291dGIoYWhkLCBwb3J0KzIsICh2YWx1ZSA+PiAxNikgJiAweEZGKTsKKwlhaGRfb3V0YihhaGQsIHBvcnQrMywgKHZhbHVlID4+IDI0KSAmIDB4RkYpOworCWFoZF9vdXRiKGFoZCwgcG9ydCs0LCAodmFsdWUgPj4gMzIpICYgMHhGRik7CisJYWhkX291dGIoYWhkLCBwb3J0KzUsICh2YWx1ZSA+PiA0MCkgJiAweEZGKTsKKwlhaGRfb3V0YihhaGQsIHBvcnQrNiwgKHZhbHVlID4+IDQ4KSAmIDB4RkYpOworCWFoZF9vdXRiKGFoZCwgcG9ydCs3LCAodmFsdWUgPj4gNTYpICYgMHhGRik7Cit9CisKK3VfaW50CithaGRfZ2V0X3NjYnB0cihzdHJ1Y3QgYWhkX3NvZnRjICphaGQpCit7CisJQUhEX0FTU0VSVF9NT0RFUyhhaGQsIH4oQUhEX01PREVfVU5LTk9XTl9NU0t8QUhEX01PREVfQ0ZHX01TSyksCisJCQkgfihBSERfTU9ERV9VTktOT1dOX01TS3xBSERfTU9ERV9DRkdfTVNLKSk7CisJcmV0dXJuIChhaGRfaW5iKGFoZCwgU0NCUFRSKSB8IChhaGRfaW5iKGFoZCwgU0NCUFRSICsgMSkgPDwgOCkpOworfQorCit2b2lkCithaGRfc2V0X3NjYnB0cihzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IHNjYnB0cikKK3sKKwlBSERfQVNTRVJUX01PREVTKGFoZCwgfihBSERfTU9ERV9VTktOT1dOX01TS3xBSERfTU9ERV9DRkdfTVNLKSwKKwkJCSB+KEFIRF9NT0RFX1VOS05PV05fTVNLfEFIRF9NT0RFX0NGR19NU0spKTsKKwlhaGRfb3V0YihhaGQsIFNDQlBUUiwgc2NicHRyICYgMHhGRik7CisJYWhkX291dGIoYWhkLCBTQ0JQVFIrMSwgKHNjYnB0ciA+PiA4KSAmIDB4RkYpOworfQorCisjaWYgMCAvKiB1bnVzZWQgKi8KK3N0YXRpYyB1X2ludAorYWhkX2dldF9obnNjYl9xb2ZmKHN0cnVjdCBhaGRfc29mdGMgKmFoZCkKK3sKKwlyZXR1cm4gKGFoZF9pbndfYXRvbWljKGFoZCwgSE5TQ0JfUU9GRikpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkCithaGRfc2V0X2huc2NiX3FvZmYoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCB2YWx1ZSkKK3sKKwlhaGRfb3V0d19hdG9taWMoYWhkLCBITlNDQl9RT0ZGLCB2YWx1ZSk7Cit9CisKKyNpZiAwIC8qIHVudXNlZCAqLworc3RhdGljIHVfaW50CithaGRfZ2V0X2hlc2NiX3FvZmYoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKQoreworCXJldHVybiAoYWhkX2luYihhaGQsIEhFU0NCX1FPRkYpKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZAorYWhkX3NldF9oZXNjYl9xb2ZmKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgdmFsdWUpCit7CisJYWhkX291dGIoYWhkLCBIRVNDQl9RT0ZGLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB1X2ludAorYWhkX2dldF9zbnNjYl9xb2ZmKHN0cnVjdCBhaGRfc29mdGMgKmFoZCkKK3sKKwl1X2ludCBvbGR2YWx1ZTsKKworCUFIRF9BU1NFUlRfTU9ERVMoYWhkLCBBSERfTU9ERV9DQ0hBTl9NU0ssIEFIRF9NT0RFX0NDSEFOX01TSyk7CisJb2xkdmFsdWUgPSBhaGRfaW53KGFoZCwgU05TQ0JfUU9GRik7CisJYWhkX291dHcoYWhkLCBTTlNDQl9RT0ZGLCBvbGR2YWx1ZSk7CisJcmV0dXJuIChvbGR2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkCithaGRfc2V0X3Nuc2NiX3FvZmYoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCB2YWx1ZSkKK3sKKwlBSERfQVNTRVJUX01PREVTKGFoZCwgQUhEX01PREVfQ0NIQU5fTVNLLCBBSERfTU9ERV9DQ0hBTl9NU0spOworCWFoZF9vdXR3KGFoZCwgU05TQ0JfUU9GRiwgdmFsdWUpOworfQorCisjaWYgMCAvKiB1bnVzZWQgKi8KK3N0YXRpYyB1X2ludAorYWhkX2dldF9zZXNjYl9xb2ZmKHN0cnVjdCBhaGRfc29mdGMgKmFoZCkKK3sKKwlBSERfQVNTRVJUX01PREVTKGFoZCwgQUhEX01PREVfQ0NIQU5fTVNLLCBBSERfTU9ERV9DQ0hBTl9NU0spOworCXJldHVybiAoYWhkX2luYihhaGQsIFNFU0NCX1FPRkYpKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZAorYWhkX3NldF9zZXNjYl9xb2ZmKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgdmFsdWUpCit7CisJQUhEX0FTU0VSVF9NT0RFUyhhaGQsIEFIRF9NT0RFX0NDSEFOX01TSywgQUhEX01PREVfQ0NIQU5fTVNLKTsKKwlhaGRfb3V0YihhaGQsIFNFU0NCX1FPRkYsIHZhbHVlKTsKK30KKworI2lmIDAgLyogdW51c2VkICovCitzdGF0aWMgdV9pbnQKK2FoZF9nZXRfc2RzY2JfcW9mZihzdHJ1Y3QgYWhkX3NvZnRjICphaGQpCit7CisJQUhEX0FTU0VSVF9NT0RFUyhhaGQsIEFIRF9NT0RFX0NDSEFOX01TSywgQUhEX01PREVfQ0NIQU5fTVNLKTsKKwlyZXR1cm4gKGFoZF9pbmIoYWhkLCBTRFNDQl9RT0ZGKSB8IChhaGRfaW5iKGFoZCwgU0RTQ0JfUU9GRiArIDEpIDw8IDgpKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZAorYWhkX3NldF9zZHNjYl9xb2ZmKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgdmFsdWUpCit7CisJQUhEX0FTU0VSVF9NT0RFUyhhaGQsIEFIRF9NT0RFX0NDSEFOX01TSywgQUhEX01PREVfQ0NIQU5fTVNLKTsKKwlhaGRfb3V0YihhaGQsIFNEU0NCX1FPRkYsIHZhbHVlICYgMHhGRik7CisJYWhkX291dGIoYWhkLCBTRFNDQl9RT0ZGKzEsICh2YWx1ZSA+PiA4KSAmIDB4RkYpOworfQorCit1X2ludAorYWhkX2luYl9zY2JyYW0oc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCBvZmZzZXQpCit7CisJdV9pbnQgdmFsdWU7CisKKwkvKgorCSAqIFdvcmthcm91bmQgUENJLVggUmV2IEEuIGhhcmR3YXJlIGJ1Zy4KKwkgKiBBZnRlciBhIGhvc3QgcmVhZCBvZiBTQ0IgbWVtb3J5LCB0aGUgY2hpcAorCSAqIG1heSBiZWNvbWUgY29uZnVzZWQgaW50byB0aGlua2luZyBwcmVmZXRjaAorCSAqIHdhcyByZXF1aXJlZC4gIFRoaXMgc3RhcnRzIHRoZSBkaXNjYXJkIHRpbWVyCisJICogcnVubmluZyBhbmQgY2FuIGNhdXNlIGFuIHVuZXhwZWN0ZWQgZGlzY2FyZAorCSAqIHRpbWVyIGludGVycnVwdC4gIFRoZSB3b3JrIGFyb3VuZCBpcyB0byByZWFkCisJICogYSBub3JtYWwgcmVnaXN0ZXIgcHJpb3IgdG8gdGhlIGV4aGF1c3Rpb24gb2YKKwkgKiB0aGUgZGlzY2FyZCB0aW1lci4gIFRoZSBtb2RlIHBvaW50ZXIgcmVnaXN0ZXIKKwkgKiBoYXMgbm8gc2lkZSBlZmZlY3RzIGFuZCBzbyBzZXJ2ZXMgd2VsbCBmb3IKKwkgKiB0aGlzIHB1cnBvc2UuCisJICoKKwkgKiBSYXpvciAjNTI4CisJICovCisJdmFsdWUgPSBhaGRfaW5iKGFoZCwgb2Zmc2V0KTsKKwlpZiAoKGFoZC0+YnVncyAmIEFIRF9QQ0lYX1NDQlJBTV9SRF9CVUcpICE9IDApCisJCWFoZF9pbmIoYWhkLCBNT0RFX1BUUik7CisJcmV0dXJuICh2YWx1ZSk7Cit9CisKK3VfaW50CithaGRfaW53X3NjYnJhbShzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IG9mZnNldCkKK3sKKwlyZXR1cm4gKGFoZF9pbmJfc2NicmFtKGFoZCwgb2Zmc2V0KQorCSAgICAgIHwgKGFoZF9pbmJfc2NicmFtKGFoZCwgb2Zmc2V0KzEpIDw8IDgpKTsKK30KKworc3RhdGljIHVpbnQzMl90CithaGRfaW5sX3NjYnJhbShzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IG9mZnNldCkKK3sKKwlyZXR1cm4gKGFoZF9pbndfc2NicmFtKGFoZCwgb2Zmc2V0KQorCSAgICAgIHwgKGFoZF9pbndfc2NicmFtKGFoZCwgb2Zmc2V0KzIpIDw8IDE2KSk7Cit9CisKK3N0YXRpYyB1aW50NjRfdAorYWhkX2lucV9zY2JyYW0oc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCBvZmZzZXQpCit7CisJcmV0dXJuIChhaGRfaW5sX3NjYnJhbShhaGQsIG9mZnNldCkKKwkgICAgICB8ICgodWludDY0X3QpYWhkX2lubF9zY2JyYW0oYWhkLCBvZmZzZXQrNCkpIDw8IDMyKTsKK30KKworc3RydWN0IHNjYiAqCithaGRfbG9va3VwX3NjYihzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IHRhZykKK3sKKwlzdHJ1Y3Qgc2NiKiBzY2I7CisKKwlpZiAodGFnID49IEFIRF9TQ0JfTUFYKQorCQlyZXR1cm4gKE5VTEwpOworCXNjYiA9IGFoZC0+c2NiX2RhdGEuc2NiaW5kZXhbdGFnXTsKKwlpZiAoc2NiICE9IE5VTEwpCisJCWFoZF9zeW5jX3NjYihhaGQsIHNjYiwKKwkJCSAgICAgQlVTX0RNQVNZTkNfUE9TVFJFQUR8QlVTX0RNQVNZTkNfUE9TVFdSSVRFKTsKKwlyZXR1cm4gKHNjYik7Cit9CisKK3N0YXRpYyB2b2lkCithaGRfc3dhcF93aXRoX25leHRfaHNjYihzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHN0cnVjdCBzY2IgKnNjYikKK3sKKwlzdHJ1Y3QJIGhhcmR3YXJlX3NjYiAqcV9oc2NiOworCXN0cnVjdAkgbWFwX25vZGUgKnFfaHNjYl9tYXA7CisJdWludDMyX3Qgc2F2ZWRfaHNjYl9idXNhZGRyOworCisJLyoKKwkgKiBPdXIgcXVldWluZyBtZXRob2QgaXMgYSBiaXQgdHJpY2t5LiAgVGhlIGNhcmQKKwkgKiBrbm93cyBpbiBhZHZhbmNlIHdoaWNoIEhTQ0IgKGJ5IGFkZHJlc3MpIHRvIGRvd25sb2FkLAorCSAqIGFuZCB3ZSBjYW4ndCBkaXNhcHBvaW50IGl0LiAgVG8gYWNoaWV2ZSB0aGlzLCB0aGUgbmV4dAorCSAqIEhTQ0IgdG8gZG93bmxvYWQgaXMgc2F2ZWQgb2ZmIGluIGFoZC0+bmV4dF9xdWV1ZWRfaHNjYi4KKwkgKiBXaGVuIHdlIGFyZSBjYWxsZWQgdG8gcXVldWUgImFuIGFyYml0cmFyeSBzY2IiLAorCSAqIHdlIGNvcHkgdGhlIGNvbnRlbnRzIG9mIHRoZSBpbmNvbWluZyBIU0NCIHRvIHRoZSBvbmUKKwkgKiB0aGUgc2VxdWVuY2VyIGtub3dzIGFib3V0LCBzd2FwIEhTQ0IgcG9pbnRlcnMgYW5kCisJICogZmluYWxseSBhc3NpZ24gdGhlIFNDQiB0byB0aGUgdGFnIGluZGV4ZWQgbG9jYXRpb24KKwkgKiBpbiB0aGUgc2NiX2FycmF5LiAgVGhpcyBtYWtlcyBzdXJlIHRoYXQgd2UgY2FuIHN0aWxsCisJICogbG9jYXRlIHRoZSBjb3JyZWN0IFNDQiBieSBTQ0JfVEFHLgorCSAqLworCXFfaHNjYiA9IGFoZC0+bmV4dF9xdWV1ZWRfaHNjYjsKKwlxX2hzY2JfbWFwID0gYWhkLT5uZXh0X3F1ZXVlZF9oc2NiX21hcDsKKwlzYXZlZF9oc2NiX2J1c2FkZHIgPSBxX2hzY2ItPmhzY2JfYnVzYWRkcjsKKwltZW1jcHkocV9oc2NiLCBzY2ItPmhzY2IsIHNpemVvZigqc2NiLT5oc2NiKSk7CisJcV9oc2NiLT5oc2NiX2J1c2FkZHIgPSBzYXZlZF9oc2NiX2J1c2FkZHI7CisJcV9oc2NiLT5uZXh0X2hzY2JfYnVzYWRkciA9IHNjYi0+aHNjYi0+aHNjYl9idXNhZGRyOworCisJLyogTm93IHN3YXAgSFNDQiBwb2ludGVycy4gKi8KKwlhaGQtPm5leHRfcXVldWVkX2hzY2IgPSBzY2ItPmhzY2I7CisJYWhkLT5uZXh0X3F1ZXVlZF9oc2NiX21hcCA9IHNjYi0+aHNjYl9tYXA7CisJc2NiLT5oc2NiID0gcV9oc2NiOworCXNjYi0+aHNjYl9tYXAgPSBxX2hzY2JfbWFwOworCisJLyogTm93IGRlZmluZSB0aGUgbWFwcGluZyBmcm9tIHRhZyB0byBTQ0IgaW4gdGhlIHNjYmluZGV4ICovCisJYWhkLT5zY2JfZGF0YS5zY2JpbmRleFtTQ0JfR0VUX1RBRyhzY2IpXSA9IHNjYjsKK30KKworLyoKKyAqIFRlbGwgdGhlIHNlcXVlbmNlciBhYm91dCBhIG5ldyB0cmFuc2FjdGlvbiB0byBleGVjdXRlLgorICovCit2b2lkCithaGRfcXVldWVfc2NiKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgc3RydWN0IHNjYiAqc2NiKQoreworCWFoZF9zd2FwX3dpdGhfbmV4dF9oc2NiKGFoZCwgc2NiKTsKKworCWlmIChTQ0JJRF9JU19OVUxMKFNDQl9HRVRfVEFHKHNjYikpKQorCQlwYW5pYygiQXR0ZW1wdCB0byBxdWV1ZSBpbnZhbGlkIFNDQiB0YWcgJXhcbiIsCisJCSAgICAgIFNDQl9HRVRfVEFHKHNjYikpOworCisJLyoKKwkgKiBLZWVwIGEgaGlzdG9yeSBvZiBTQ0JzIHdlJ3ZlIGRvd25sb2FkZWQgaW4gdGhlIHFpbmZpZm8uCisJICovCisJYWhkLT5xaW5maWZvW0FIRF9RSU5fV1JBUChhaGQtPnFpbmZpZm9uZXh0KV0gPSBTQ0JfR0VUX1RBRyhzY2IpOworCWFoZC0+cWluZmlmb25leHQrKzsKKworCWlmIChzY2ItPnNnX2NvdW50ICE9IDApCisJCWFoZF9zZXR1cF9kYXRhX3NjYihhaGQsIHNjYik7CisJZWxzZQorCQlhaGRfc2V0dXBfbm94ZmVyX3NjYihhaGQsIHNjYik7CisJYWhkX3NldHVwX3NjYl9jb21tb24oYWhkLCBzY2IpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgb3VyIGRhdGEgaXMgY29uc2lzdGVudCBmcm9tIHRoZQorCSAqIHBlcnNwZWN0aXZlIG9mIHRoZSBhZGFwdGVyLgorCSAqLworCWFoZF9zeW5jX3NjYihhaGQsIHNjYiwgQlVTX0RNQVNZTkNfUFJFUkVBRHxCVVNfRE1BU1lOQ19QUkVXUklURSk7CisKKyNpZmRlZiBBSERfREVCVUcKKwlpZiAoKGFoZF9kZWJ1ZyAmIEFIRF9TSE9XX1FVRVVFKSAhPSAwKSB7CisJCXVpbnQ2NF90IGhvc3RfZGF0YXB0cjsKKworCQlob3N0X2RhdGFwdHIgPSBhaGRfbGU2NHRvaChzY2ItPmhzY2ItPmRhdGFwdHIpOworCQlwcmludGYoIiVzOiBRdWV1ZWluZyBTQ0IgJWQ6MHgleCBidXMgYWRkciAweCV4IC0gMHgleCV4LzB4JXhcbiIsCisJCSAgICAgICBhaGRfbmFtZShhaGQpLAorCQkgICAgICAgU0NCX0dFVF9UQUcoc2NiKSwgc2NiLT5oc2NiLT5zY3NpaWQsCisJCSAgICAgICBhaGRfbGUzMnRvaChzY2ItPmhzY2ItPmhzY2JfYnVzYWRkciksCisJCSAgICAgICAodV9pbnQpKChob3N0X2RhdGFwdHIgPj4gMzIpICYgMHhGRkZGRkZGRiksCisJCSAgICAgICAodV9pbnQpKGhvc3RfZGF0YXB0ciAmIDB4RkZGRkZGRkYpLAorCQkgICAgICAgYWhkX2xlMzJ0b2goc2NiLT5oc2NiLT5kYXRhY250KSk7CisJfQorI2VuZGlmCisJLyogVGVsbCB0aGUgYWRhcHRlciBhYm91dCB0aGUgbmV3bHkgcXVldWVkIFNDQiAqLworCWFoZF9zZXRfaG5zY2JfcW9mZihhaGQsIGFoZC0+cWluZmlmb25leHQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKiogSW50ZXJydXB0IFByb2Nlc3NpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQKK2FoZF9zeW5jX3FvdXRmaWZvKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgaW50IG9wKQoreworCWFoZF9kbWFtYXBfc3luYyhhaGQsIGFoZC0+c2hhcmVkX2RhdGFfZG1hdCwgYWhkLT5zaGFyZWRfZGF0YV9tYXAuZG1hbWFwLAorCQkJLypvZmZzZXQqLzAsCisJCQkvKmxlbiovQUhEX1NDQl9NQVggKiBzaXplb2Yoc3RydWN0IGFoZF9jb21wbGV0aW9uKSwgb3ApOworfQorCitzdGF0aWMgdm9pZAorYWhkX3N5bmNfdHFpbmZpZm8oc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCBpbnQgb3ApCit7CisjaWZkZWYgQUhEX1RBUkdFVF9NT0RFCisJaWYgKChhaGQtPmZsYWdzICYgQUhEX1RBUkdFVFJPTEUpICE9IDApIHsKKwkJYWhkX2RtYW1hcF9zeW5jKGFoZCwgYWhkLT5zaGFyZWRfZGF0YV9kbWF0LAorCQkJCWFoZC0+c2hhcmVkX2RhdGFfbWFwLmRtYW1hcCwKKwkJCQlhaGRfdGFyZ2V0Y21kX29mZnNldChhaGQsIDApLAorCQkJCXNpemVvZihzdHJ1Y3QgdGFyZ2V0X2NtZCkgKiBBSERfVE1PREVfQ01EUywKKwkJCQlvcCk7CisJfQorI2VuZGlmCit9CisKKy8qCisgKiBTZWUgaWYgdGhlIGZpcm13YXJlIGhhcyBwb3N0ZWQgYW55IGNvbXBsZXRlZCBjb21tYW5kcworICogaW50byBvdXIgaW4tY29yZSBjb21tYW5kIGNvbXBsZXRlIGZpZm9zLgorICovCisjZGVmaW5lIEFIRF9SVU5fUU9VVEZJRk8gMHgxCisjZGVmaW5lIEFIRF9SVU5fVFFJTkZJRk8gMHgyCitzdGF0aWMgdV9pbnQKK2FoZF9jaGVja19jbWRjbXBsdHF1ZXVlcyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQpCit7CisJdV9pbnQgcmV0dmFsOworCisJcmV0dmFsID0gMDsKKwlhaGRfZG1hbWFwX3N5bmMoYWhkLCBhaGQtPnNoYXJlZF9kYXRhX2RtYXQsIGFoZC0+c2hhcmVkX2RhdGFfbWFwLmRtYW1hcCwKKwkJCS8qb2Zmc2V0Ki9haGQtPnFvdXRmaWZvbmV4dCAqIHNpemVvZigqYWhkLT5xb3V0ZmlmbyksCisJCQkvKmxlbiovc2l6ZW9mKCphaGQtPnFvdXRmaWZvKSwgQlVTX0RNQVNZTkNfUE9TVFJFQUQpOworCWlmIChhaGQtPnFvdXRmaWZvW2FoZC0+cW91dGZpZm9uZXh0XS52YWxpZF90YWcKKwkgID09IGFoZC0+cW91dGZpZm9uZXh0X3ZhbGlkX3RhZykKKwkJcmV0dmFsIHw9IEFIRF9SVU5fUU9VVEZJRk87CisjaWZkZWYgQUhEX1RBUkdFVF9NT0RFCisJaWYgKChhaGQtPmZsYWdzICYgQUhEX1RBUkdFVFJPTEUpICE9IDAKKwkgJiYgKGFoZC0+ZmxhZ3MgJiBBSERfVFFJTkZJRk9fQkxPQ0tFRCkgPT0gMCkgeworCQlhaGRfZG1hbWFwX3N5bmMoYWhkLCBhaGQtPnNoYXJlZF9kYXRhX2RtYXQsCisJCQkJYWhkLT5zaGFyZWRfZGF0YV9tYXAuZG1hbWFwLAorCQkJCWFoZF90YXJnZXRjbWRfb2Zmc2V0KGFoZCwgYWhkLT50cWluZmlmb2ZuZXh0KSwKKwkJCQkvKmxlbiovc2l6ZW9mKHN0cnVjdCB0YXJnZXRfY21kKSwKKwkJCQlCVVNfRE1BU1lOQ19QT1NUUkVBRCk7CisJCWlmIChhaGQtPnRhcmdldGNtZHNbYWhkLT50cWluZmlmb25leHRdLmNtZF92YWxpZCAhPSAwKQorCQkJcmV0dmFsIHw9IEFIRF9SVU5fVFFJTkZJRk87CisJfQorI2VuZGlmCisJcmV0dXJuIChyZXR2YWwpOworfQorCisvKgorICogQ2F0Y2ggYW4gaW50ZXJydXB0IGZyb20gdGhlIGFkYXB0ZXIKKyAqLworaW50CithaGRfaW50cihzdHJ1Y3QgYWhkX3NvZnRjICphaGQpCit7CisJdV9pbnQJaW50c3RhdDsKKworCWlmICgoYWhkLT5wYXVzZSAmIElOVEVOKSA9PSAwKSB7CisJCS8qCisJCSAqIE91ciBpbnRlcnJ1cHQgaXMgbm90IGVuYWJsZWQgb24gdGhlIGNoaXAKKwkJICogYW5kIG1heSBiZSBkaXNhYmxlZCBmb3IgcmUtZW50cmFuY3kgcmVhc29ucywKKwkJICogc28ganVzdCByZXR1cm4uICBUaGlzIGlzIGxpa2VseSBqdXN0IGEgc2hhcmVkCisJCSAqIGludGVycnVwdC4KKwkJICovCisJCXJldHVybiAoMCk7CisJfQorCisJLyoKKwkgKiBJbnN0ZWFkIG9mIGRpcmVjdGx5IHJlYWRpbmcgdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIsCisJICogaW5mZXIgdGhlIGNhdXNlIG9mIHRoZSBpbnRlcnJ1cHQgYnkgY2hlY2tpbmcgb3VyIGluLWNvcmUKKwkgKiBjb21wbGV0aW9uIHF1ZXVlcy4gIFRoaXMgYXZvaWRzIGEgY29zdGx5IFBDSSBidXMgcmVhZCBpbgorCSAqIG1vc3QgY2FzZXMuCisJICovCisJaWYgKChhaGQtPmZsYWdzICYgQUhEX0FMTF9JTlRFUlJVUFRTKSA9PSAwCisJICYmIChhaGRfY2hlY2tfY21kY21wbHRxdWV1ZXMoYWhkKSAhPSAwKSkKKwkJaW50c3RhdCA9IENNRENNUExUOworCWVsc2UKKwkJaW50c3RhdCA9IGFoZF9pbmIoYWhkLCBJTlRTVEFUKTsKKworCWlmICgoaW50c3RhdCAmIElOVF9QRU5EKSA9PSAwKQorCQlyZXR1cm4gKDApOworCisJaWYgKGludHN0YXQgJiBDTURDTVBMVCkgeworCQlhaGRfb3V0YihhaGQsIENMUklOVCwgQ0xSQ01ESU5UKTsKKworCQkvKgorCQkgKiBFbnN1cmUgdGhhdCB0aGUgY2hpcCBzZWVzIHRoYXQgd2UndmUgY2xlYXJlZAorCQkgKiB0aGlzIGludGVycnVwdCBiZWZvcmUgd2Ugd2FsayB0aGUgb3V0cHV0IGZpZm8uCisJCSAqIE90aGVyd2lzZSwgd2UgbWF5LCBkdWUgdG8gcG9zdGVkIGJ1cyB3cml0ZXMsCisJCSAqIGNsZWFyIHRoZSBpbnRlcnJ1cHQgYWZ0ZXIgd2UgZmluaXNoIHRoZSBzY2FuLAorCQkgKiBhbmQgYWZ0ZXIgdGhlIHNlcXVlbmNlciBoYXMgYWRkZWQgbmV3IGVudHJpZXMKKwkJICogYW5kIGFzc2VydGVkIHRoZSBpbnRlcnJ1cHQgYWdhaW4uCisJCSAqLworCQlpZiAoKGFoZC0+YnVncyAmIEFIRF9JTlRDT0xMSVNJT05fQlVHKSAhPSAwKSB7CisJCQlpZiAoYWhkX2lzX3BhdXNlZChhaGQpKSB7CisJCQkJLyoKKwkJCQkgKiBQb3RlbnRpYWxseSBsb3N0IFNFUUlOVC4KKwkJCQkgKiBJZiBTRVFJTlRDT0RFIGlzIG5vbi16ZXJvLAorCQkJCSAqIHNpbXVsYXRlIHRoZSBTRVFJTlQuCisJCQkJICovCisJCQkJaWYgKGFoZF9pbmIoYWhkLCBTRVFJTlRDT0RFKSAhPSBOT19TRVFJTlQpCisJCQkJCWludHN0YXQgfD0gU0VRSU5UOworCQkJfQorCQl9IGVsc2UgeworCQkJYWhkX2ZsdXNoX2RldmljZV93cml0ZXMoYWhkKTsKKwkJfQorCQlhaGRfcnVuX3FvdXRmaWZvKGFoZCk7CisJCWFoZC0+Y21kY21wbHRfY291bnRzW2FoZC0+Y21kY21wbHRfYnVja2V0XSsrOworCQlhaGQtPmNtZGNtcGx0X3RvdGFsKys7CisjaWZkZWYgQUhEX1RBUkdFVF9NT0RFCisJCWlmICgoYWhkLT5mbGFncyAmIEFIRF9UQVJHRVRST0xFKSAhPSAwKQorCQkJYWhkX3J1bl90cWluZmlmbyhhaGQsIC8qcGF1c2VkKi9GQUxTRSk7CisjZW5kaWYKKwl9CisKKwkvKgorCSAqIEhhbmRsZSBzdGF0dXNlcyB0aGF0IG1heSBpbnZhbGlkYXRlIG91ciBjYWNoZWQKKwkgKiBjb3B5IG9mIElOVFNUQVQgc2VwYXJhdGVseS4KKwkgKi8KKwlpZiAoaW50c3RhdCA9PSAweEZGICYmIChhaGQtPmZlYXR1cmVzICYgQUhEX1JFTU9WQUJMRSkgIT0gMCkgeworCQkvKiBIb3QgZWplY3QuICBEbyBub3RoaW5nICovCisJfSBlbHNlIGlmIChpbnRzdGF0ICYgSFdFUlJJTlQpIHsKKwkJYWhkX2hhbmRsZV9od2VycmludChhaGQpOworCX0gZWxzZSBpZiAoKGludHN0YXQgJiAoUENJSU5UfFNQTFRJTlQpKSAhPSAwKSB7CisJCWFoZC0+YnVzX2ludHIoYWhkKTsKKwl9IGVsc2UgeworCisJCWlmICgoaW50c3RhdCAmIFNFUUlOVCkgIT0gMCkKKwkJCWFoZF9oYW5kbGVfc2VxaW50KGFoZCwgaW50c3RhdCk7CisKKwkJaWYgKChpbnRzdGF0ICYgU0NTSUlOVCkgIT0gMCkKKwkJCWFoZF9oYW5kbGVfc2NzaWludChhaGQsIGludHN0YXQpOworCX0KKwlyZXR1cm4gKDEpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogUHJpdmF0ZSBJbmxpbmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIF9faW5saW5lIHZvaWQKIGFoZF9hc3NlcnRfYXRuKHN0cnVjdCBhaGRfc29mdGMgKmFoZCkKIHsKQEAgLTI4MCw3ICsxMDQ2LDcgQEAKICAqIGFyZSBjdXJyZW50bHkgaW4gYSBwYWNrZXRpemVkIHRyYW5zZmVyLiAgV2UgY291bGQKICAqIGp1c3QgYXMgZWFzaWx5IGJlIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgbWVzc2FnZS4KICAqLwotc3RhdGljIF9faW5saW5lIGludAorc3RhdGljIGludAogYWhkX2N1cnJlbnRseV9wYWNrZXRpemVkKHN0cnVjdCBhaGRfc29mdGMgKmFoZCkKIHsKIAlhaGRfbW9kZV9zdGF0ZQkgc2F2ZWRfbW9kZXM7CkBAIC04OTYsNyArMTY2Miw3IEBACiAgKiBhIGNvcHkgb2YgdGhlIGZpcnN0IGJ5dGUgKGxpdHRsZSBlbmRpYW4pIG9mIHRoZSBzZ3B0cgogICogaHNjYiBmaWVsZC4KICAqLwotdm9pZAorc3RhdGljIHZvaWQKIGFoZF9ydW5fcW91dGZpZm8oc3RydWN0IGFoZF9zb2Z0YyAqYWhkKQogewogCXN0cnVjdCBhaGRfY29tcGxldGlvbiAqY29tcGxldGlvbjsKQEAgLTkzNSw3ICsxNzAxLDcgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKiogSW50ZXJydXB0IEhhbmRsaW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQKK3N0YXRpYyB2b2lkCiBhaGRfaGFuZGxlX2h3ZXJyaW50KHN0cnVjdCBhaGRfc29mdGMgKmFoZCkKIHsKIAkvKgpAQCAtMTAwOSw3ICsxNzc1LDcgQEAKIH0KICNlbmRpZiAgLyogIEFIRF9ERUJVRyAgKi8KIAotdm9pZAorc3RhdGljIHZvaWQKIGFoZF9oYW5kbGVfc2VxaW50KHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgaW50c3RhdCkKIHsKIAl1X2ludCBzZXFpbnRjb2RlOwpAQCAtMTYyMSw3ICsyMzg3LDcgQEAKIAlhaGRfdW5wYXVzZShhaGQpOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogYWhkX2hhbmRsZV9zY3NpaW50KHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgaW50c3RhdCkKIHsKIAlzdHJ1Y3Qgc2NiCSpzY2I7CkBAIC0zNTcxLDExICs0MzM3LDExIEBACiAJICAgICAgIGRldmluZm8tPnRhcmdldCwgZGV2aW5mby0+bHVuKTsKIH0KIAotc3RhdGljIHN0cnVjdCBhaGRfcGhhc2VfdGFibGVfZW50cnkqCitzdGF0aWMgY29uc3Qgc3RydWN0IGFoZF9waGFzZV90YWJsZV9lbnRyeSoKIGFoZF9sb29rdXBfcGhhc2VfZW50cnkoaW50IHBoYXNlKQogewotCXN0cnVjdCBhaGRfcGhhc2VfdGFibGVfZW50cnkgKmVudHJ5OwotCXN0cnVjdCBhaGRfcGhhc2VfdGFibGVfZW50cnkgKmxhc3RfZW50cnk7CisJY29uc3Qgc3RydWN0IGFoZF9waGFzZV90YWJsZV9lbnRyeSAqZW50cnk7CisJY29uc3Qgc3RydWN0IGFoZF9waGFzZV90YWJsZV9lbnRyeSAqbGFzdF9lbnRyeTsKIAogCS8qCiAJICogbnVtX3BoYXNlcyBkb2Vzbid0IGluY2x1ZGUgdGhlIGRlZmF1bHQgZW50cnkgd2hpY2gKQEAgLTM5NDEsNyArNDcwNyw3IEBACiAgKi8KIHN0YXRpYyB2b2lkCiBhaGRfaGFuZGxlX21lc3NhZ2VfcGhhc2Uoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKQoteyAKK3sKIAlzdHJ1Y3QJYWhkX2RldmluZm8gZGV2aW5mbzsKIAl1X2ludAlidXNfcGhhc2U7CiAJaW50CWVuZF9zZXNzaW9uOwpAQCAtNTk4Myw4ICs2NzQ5LDcgQEAKICAqLwogdm9pZAogYWhkX2ZyZWVfc2NiKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgc3RydWN0IHNjYiAqc2NiKQoteyAgICAgICAKLQorewogCS8qIENsZWFuIHVwIGZvciB0aGUgbmV4dCB1c2VyICovCiAJc2NiLT5mbGFncyA9IFNDQl9GTEFHX05PTkU7CiAJc2NiLT5oc2NiLT5jb250cm9sID0gMDsKQEAgLTYyNzIsNiArNzAzNywyNCBAQAogCSJOb3QgQ29uZmlndXJlZCIKIH07CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBUaW1lciBGYWNpbGl0aWVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIGFoZF90aW1lcl9pbml0IGluaXRfdGltZXIKKyNkZWZpbmUgYWhkX3RpbWVyX3N0b3AgZGVsX3RpbWVyX3N5bmMKK3R5cGVkZWYgdm9pZCBhaGRfbGludXhfY2FsbGJhY2tfdCAodV9sb25nKTsKKworc3RhdGljIHZvaWQKK2FoZF90aW1lcl9yZXNldChhaGRfdGltZXJfdCAqdGltZXIsIGludCB1c2VjLCBhaGRfY2FsbGJhY2tfdCAqZnVuYywgdm9pZCAqYXJnKQoreworCXN0cnVjdCBhaGRfc29mdGMgKmFoZDsKKworCWFoZCA9IChzdHJ1Y3QgYWhkX3NvZnRjICopYXJnOworCWRlbF90aW1lcih0aW1lcik7CisJdGltZXItPmRhdGEgPSAodV9sb25nKWFyZzsKKwl0aW1lci0+ZXhwaXJlcyA9IGppZmZpZXMgKyAodXNlYyAqIEhaKS8xMDAwMDAwOworCXRpbWVyLT5mdW5jdGlvbiA9IChhaGRfbGludXhfY2FsbGJhY2tfdCopZnVuYzsKKwlhZGRfdGltZXIodGltZXIpOworfQorCiAvKgogICogU3RhcnQgdGhlIGJvYXJkLCByZWFkeSBmb3Igbm9ybWFsIG9wZXJhdGlvbgogICovCkBAIC03MzcwLDcgKzgxNTMsNyBAQAogCQkgICAgICArIEFSUkFZX1NJWkUoYWhkLT5xaW5maWZvKSAtIHdyYXBfcWlucG9zKTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGFoZF9yZXNldF9jbWRzX3BlbmRpbmcoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKQogewogCXN0cnVjdAkJc2NiICpzY2I7CkBAIC04NTcxLDcgKzkzNTQsNyBAQAogCXN0cnVjdAljcyBjc190YWJsZVtudW1fY3JpdGljYWxfc2VjdGlvbnNdOwogCXVfaW50CWJlZ2luX3NldFtudW1fY3JpdGljYWxfc2VjdGlvbnNdOwogCXVfaW50CWVuZF9zZXRbbnVtX2NyaXRpY2FsX3NlY3Rpb25zXTsKLQlzdHJ1Y3QJcGF0Y2ggKmN1cl9wYXRjaDsKKwljb25zdCBzdHJ1Y3QgcGF0Y2ggKmN1cl9wYXRjaDsKIAl1X2ludAljc19jb3VudDsKIAl1X2ludAljdXJfY3M7CiAJdV9pbnQJaTsKQEAgLTg3MjYsMTEgKzk1MDksMTEgQEAKIH0KIAogc3RhdGljIGludAotYWhkX2NoZWNrX3BhdGNoKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgc3RydWN0IHBhdGNoICoqc3RhcnRfcGF0Y2gsCithaGRfY2hlY2tfcGF0Y2goc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCBjb25zdCBzdHJ1Y3QgcGF0Y2ggKipzdGFydF9wYXRjaCwKIAkJdV9pbnQgc3RhcnRfaW5zdHIsIHVfaW50ICpza2lwX2FkZHIpCiB7Ci0Jc3RydWN0CXBhdGNoICpjdXJfcGF0Y2g7Ci0Jc3RydWN0CXBhdGNoICpsYXN0X3BhdGNoOworCWNvbnN0IHN0cnVjdCBwYXRjaCAqY3VyX3BhdGNoOworCWNvbnN0IHN0cnVjdCBwYXRjaCAqbGFzdF9wYXRjaDsKIAl1X2ludAludW1fcGF0Y2hlczsKIAogCW51bV9wYXRjaGVzID0gQVJSQVlfU0laRShwYXRjaGVzKTsKQEAgLTg3NjQsNyArOTU0Nyw3IEBACiBzdGF0aWMgdV9pbnQKIGFoZF9yZXNvbHZlX3NlcWFkZHIoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCBhZGRyZXNzKQogewotCXN0cnVjdCBwYXRjaCAqY3VyX3BhdGNoOworCWNvbnN0IHN0cnVjdCBwYXRjaCAqY3VyX3BhdGNoOwogCWludCBhZGRyZXNzX29mZnNldDsKIAl1X2ludCBza2lwX2FkZHI7CiAJdV9pbnQgaTsKQEAgLTg4OTUsNyArOTY3OCw3IEBACiB9CiAKIGludAotYWhkX3ByaW50X3JlZ2lzdGVyKGFoZF9yZWdfcGFyc2VfZW50cnlfdCAqdGFibGUsIHVfaW50IG51bV9lbnRyaWVzLAorYWhkX3ByaW50X3JlZ2lzdGVyKGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCAqdGFibGUsIHVfaW50IG51bV9lbnRyaWVzLAogCQkgICBjb25zdCBjaGFyICpuYW1lLCB1X2ludCBhZGRyZXNzLCB1X2ludCB2YWx1ZSwKIAkJICAgdV9pbnQgKmN1cl9jb2x1bW4sIHVfaW50IHdyYXBfcG9pbnQpCiB7CkBAIC05ODg2LDcgKzEwNjY5LDcgQEAKICNlbmRpZgogfQogCi12b2lkCitzdGF0aWMgdm9pZAogYWhkX3J1bl90cWluZmlmbyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIGludCBwYXVzZWQpCiB7CiAJc3RydWN0IHRhcmdldF9jbWQgKmNtZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfaW5saW5lLmggYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X2lubGluZS5oCmluZGV4IDQ1ZTU1NTcuLjVmMTJjZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfaW5saW5lLmgKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9pbmxpbmUuaApAQCAtNjMsMTggKzYzLDE1IEBACiBzdGF0aWMgX19pbmxpbmUgdm9pZCBhaGRfZXh0cmFjdF9tb2RlX3N0YXRlKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwKIAkJCQkJICAgIGFoZF9tb2RlX3N0YXRlIHN0YXRlLAogCQkJCQkgICAgYWhkX21vZGUgKnNyYywgYWhkX21vZGUgKmRzdCk7Ci1zdGF0aWMgX19pbmxpbmUgdm9pZCBhaGRfc2V0X21vZGVzKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgYWhkX21vZGUgc3JjLAotCQkJCSAgIGFoZF9tb2RlIGRzdCk7Ci1zdGF0aWMgX19pbmxpbmUgdm9pZCBhaGRfdXBkYXRlX21vZGVzKHN0cnVjdCBhaGRfc29mdGMgKmFoZCk7Ci1zdGF0aWMgX19pbmxpbmUgdm9pZCBhaGRfYXNzZXJ0X21vZGVzKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgYWhkX21vZGUgc3JjbW9kZSwKLQkJCQkgICAgICBhaGRfbW9kZSBkc3Rtb2RlLCBjb25zdCBjaGFyICpmaWxlLAotCQkJCSAgICAgIGludCBsaW5lKTsKLXN0YXRpYyBfX2lubGluZSBhaGRfbW9kZV9zdGF0ZSBhaGRfc2F2ZV9tb2RlcyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQpOwotc3RhdGljIF9faW5saW5lIHZvaWQgYWhkX3Jlc3RvcmVfbW9kZXMoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLAotCQkJCSAgICAgICBhaGRfbW9kZV9zdGF0ZSBzdGF0ZSk7Ci1zdGF0aWMgX19pbmxpbmUgaW50ICBhaGRfaXNfcGF1c2VkKHN0cnVjdCBhaGRfc29mdGMgKmFoZCk7Ci1zdGF0aWMgX19pbmxpbmUgdm9pZCBhaGRfcGF1c2Uoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKLXN0YXRpYyBfX2lubGluZSB2b2lkIGFoZF91bnBhdXNlKHN0cnVjdCBhaGRfc29mdGMgKmFoZCk7CisKK3ZvaWQgYWhkX3NldF9tb2RlcyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIGFoZF9tb2RlIHNyYywKKwkJICAgYWhkX21vZGUgZHN0KTsKK2FoZF9tb2RlX3N0YXRlIGFoZF9zYXZlX21vZGVzKHN0cnVjdCBhaGRfc29mdGMgKmFoZCk7Cit2b2lkIGFoZF9yZXN0b3JlX21vZGVzKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwKKwkJICAgICAgIGFoZF9tb2RlX3N0YXRlIHN0YXRlKTsKK2ludCAgYWhkX2lzX3BhdXNlZChzdHJ1Y3QgYWhkX3NvZnRjICphaGQpOwordm9pZCBhaGRfcGF1c2Uoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKK3ZvaWQgYWhkX3VucGF1c2Uoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKIAogc3RhdGljIF9faW5saW5lIHZvaWQKIGFoZF9rbm93bl9tb2RlcyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIGFoZF9tb2RlIHNyYywgYWhkX21vZGUgZHN0KQpAQCAtOTksMjU2ICs5NiwxNiBAQAogCSpkc3QgPSAoc3RhdGUgJiBEU1RfTU9ERSkgPj4gRFNUX01PREVfU0hJRlQ7CiB9CiAKLXN0YXRpYyBfX2lubGluZSB2b2lkCi1haGRfc2V0X21vZGVzKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgYWhkX21vZGUgc3JjLCBhaGRfbW9kZSBkc3QpCi17Ci0JaWYgKGFoZC0+c3JjX21vZGUgPT0gc3JjICYmIGFoZC0+ZHN0X21vZGUgPT0gZHN0KQotCQlyZXR1cm47Ci0jaWZkZWYgQUhEX0RFQlVHCi0JaWYgKGFoZC0+c3JjX21vZGUgPT0gQUhEX01PREVfVU5LTk9XTgotCSB8fCBhaGQtPmRzdF9tb2RlID09IEFIRF9NT0RFX1VOS05PV04pCi0JCXBhbmljKCJTZXR0aW5nIG1vZGUgcHJpb3IgdG8gc2F2aW5nIGl0LlxuIik7Ci0JaWYgKChhaGRfZGVidWcgJiBBSERfU0hPV19NT0RFUFRSKSAhPSAwKQotCQlwcmludGYoIiVzOiBTZXR0aW5nIG1vZGUgMHgleFxuIiwgYWhkX25hbWUoYWhkKSwKLQkJICAgICAgIGFoZF9idWlsZF9tb2RlX3N0YXRlKGFoZCwgc3JjLCBkc3QpKTsKLSNlbmRpZgotCWFoZF9vdXRiKGFoZCwgTU9ERV9QVFIsIGFoZF9idWlsZF9tb2RlX3N0YXRlKGFoZCwgc3JjLCBkc3QpKTsKLQlhaGQtPnNyY19tb2RlID0gc3JjOwotCWFoZC0+ZHN0X21vZGUgPSBkc3Q7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB2b2lkCi1haGRfdXBkYXRlX21vZGVzKHN0cnVjdCBhaGRfc29mdGMgKmFoZCkKLXsKLQlhaGRfbW9kZV9zdGF0ZSBtb2RlX3B0cjsKLQlhaGRfbW9kZSBzcmM7Ci0JYWhkX21vZGUgZHN0OwotCi0JbW9kZV9wdHIgPSBhaGRfaW5iKGFoZCwgTU9ERV9QVFIpOwotI2lmZGVmIEFIRF9ERUJVRwotCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfTU9ERVBUUikgIT0gMCkKLQkJcHJpbnRmKCJSZWFkaW5nIG1vZGUgMHgleFxuIiwgbW9kZV9wdHIpOwotI2VuZGlmCi0JYWhkX2V4dHJhY3RfbW9kZV9zdGF0ZShhaGQsIG1vZGVfcHRyLCAmc3JjLCAmZHN0KTsKLQlhaGRfa25vd25fbW9kZXMoYWhkLCBzcmMsIGRzdCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB2b2lkCi1haGRfYXNzZXJ0X21vZGVzKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgYWhkX21vZGUgc3JjbW9kZSwKLQkJIGFoZF9tb2RlIGRzdG1vZGUsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKQotewotI2lmZGVmIEFIRF9ERUJVRwotCWlmICgoc3JjbW9kZSAmIEFIRF9NS19NU0soYWhkLT5zcmNfbW9kZSkpID09IDAKLQkgfHwgKGRzdG1vZGUgJiBBSERfTUtfTVNLKGFoZC0+ZHN0X21vZGUpKSA9PSAwKSB7Ci0JCXBhbmljKCIlczolczolZDogTW9kZSBhc3NlcnRpb24gZmFpbGVkLlxuIiwKLQkJICAgICAgIGFoZF9uYW1lKGFoZCksIGZpbGUsIGxpbmUpOwotCX0KLSNlbmRpZgotfQotCi1zdGF0aWMgX19pbmxpbmUgYWhkX21vZGVfc3RhdGUKLWFoZF9zYXZlX21vZGVzKHN0cnVjdCBhaGRfc29mdGMgKmFoZCkKLXsKLQlpZiAoYWhkLT5zcmNfbW9kZSA9PSBBSERfTU9ERV9VTktOT1dOCi0JIHx8IGFoZC0+ZHN0X21vZGUgPT0gQUhEX01PREVfVU5LTk9XTikKLQkJYWhkX3VwZGF0ZV9tb2RlcyhhaGQpOwotCi0JcmV0dXJuIChhaGRfYnVpbGRfbW9kZV9zdGF0ZShhaGQsIGFoZC0+c3JjX21vZGUsIGFoZC0+ZHN0X21vZGUpKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHZvaWQKLWFoZF9yZXN0b3JlX21vZGVzKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgYWhkX21vZGVfc3RhdGUgc3RhdGUpCi17Ci0JYWhkX21vZGUgc3JjOwotCWFoZF9tb2RlIGRzdDsKLQotCWFoZF9leHRyYWN0X21vZGVfc3RhdGUoYWhkLCBzdGF0ZSwgJnNyYywgJmRzdCk7Ci0JYWhkX3NldF9tb2RlcyhhaGQsIHNyYywgZHN0KTsKLX0KLQotI2RlZmluZSBBSERfQVNTRVJUX01PREVTKGFoZCwgc291cmNlLCBkZXN0KSBcCi0JYWhkX2Fzc2VydF9tb2RlcyhhaGQsIHNvdXJjZSwgZGVzdCwgX19GSUxFX18sIF9fTElORV9fKTsKLQotLyoKLSAqIERldGVybWluZSB3aGV0aGVyIHRoZSBzZXF1ZW5jZXIgaGFzIGhhbHRlZCBjb2RlIGV4ZWN1dGlvbi4KLSAqIFJldHVybnMgbm9uLXplcm8gc3RhdHVzIGlmIHRoZSBzZXF1ZW5jZXIgaXMgc3RvcHBlZC4KLSAqLwotc3RhdGljIF9faW5saW5lIGludAotYWhkX2lzX3BhdXNlZChzdHJ1Y3QgYWhkX3NvZnRjICphaGQpCi17Ci0JcmV0dXJuICgoYWhkX2luYihhaGQsIEhDTlRSTCkgJiBQQVVTRSkgIT0gMCk7Ci19Ci0KLS8qCi0gKiBSZXF1ZXN0IHRoYXQgdGhlIHNlcXVlbmNlciBzdG9wIGFuZCB3YWl0LCBpbmRlZmluaXRlbHksIGZvciBpdAotICogdG8gc3RvcC4gIFRoZSBzZXF1ZW5jZXIgd2lsbCBvbmx5IGFja25vd2xlZGdlIHRoYXQgaXQgaXMgcGF1c2VkCi0gKiBvbmNlIGl0IGhhcyByZWFjaGVkIGFuIGluc3RydWN0aW9uIGJvdW5kYXJ5IGFuZCBQQVVTRURJUyBpcwotICogY2xlYXJlZCBpbiB0aGUgU0VRQ1RMIHJlZ2lzdGVyLiAgVGhlIHNlcXVlbmNlciBtYXkgdXNlIFBBVVNFRElTCi0gKiBmb3IgY3JpdGljYWwgc2VjdGlvbnMuCi0gKi8KLXN0YXRpYyBfX2lubGluZSB2b2lkCi1haGRfcGF1c2Uoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKQotewotCWFoZF9vdXRiKGFoZCwgSENOVFJMLCBhaGQtPnBhdXNlKTsKLQotCS8qCi0JICogU2luY2UgdGhlIHNlcXVlbmNlciBjYW4gZGlzYWJsZSBwYXVzaW5nIGluIGEgY3JpdGljYWwgc2VjdGlvbiwgd2UKLQkgKiBtdXN0IGxvb3AgdW50aWwgaXQgYWN0dWFsbHkgc3RvcHMuCi0JICovCi0Jd2hpbGUgKGFoZF9pc19wYXVzZWQoYWhkKSA9PSAwKQotCQk7Ci19Ci0KLS8qCi0gKiBBbGxvdyB0aGUgc2VxdWVuY2VyIHRvIGNvbnRpbnVlIHByb2dyYW0gZXhlY3V0aW9uLgotICogV2UgY2hlY2sgaGVyZSB0byBlbnN1cmUgdGhhdCBubyBhZGRpdGlvbmFsIGludGVycnVwdAotICogc291cmNlcyB0aGF0IHdvdWxkIGNhdXNlIHRoZSBzZXF1ZW5jZXIgdG8gaGFsdCBoYXZlIGJlZW4KLSAqIGFzc2VydGVkLiAgSWYsIGZvciBleGFtcGxlLCBhIFNDU0kgYnVzIHJlc2V0IGlzIGRldGVjdGVkCi0gKiB3aGlsZSB3ZSBhcmUgZmllbGRpbmcgYSBkaWZmZXJlbnQsIHBhdXNpbmcsIGludGVycnVwdCB0eXBlLAotICogd2UgZG9uJ3Qgd2FudCB0byByZWxlYXNlIHRoZSBzZXF1ZW5jZXIgYmVmb3JlIGdvaW5nIGJhY2sKLSAqIGludG8gb3VyIGludGVycnVwdCBoYW5kbGVyIGFuZCBkZWFsaW5nIHdpdGggdGhpcyBuZXcKLSAqIGNvbmRpdGlvbi4KLSAqLwotc3RhdGljIF9faW5saW5lIHZvaWQKLWFoZF91bnBhdXNlKHN0cnVjdCBhaGRfc29mdGMgKmFoZCkKLXsKLQkvKgotCSAqIEF1dG9tYXRpY2FsbHkgcmVzdG9yZSBvdXIgbW9kZXMgdG8gdGhvc2Ugc2F2ZWQKLQkgKiBwcmlvciB0byB0aGUgZmlyc3QgY2hhbmdlIG9mIHRoZSBtb2RlLgotCSAqLwotCWlmIChhaGQtPnNhdmVkX3NyY19tb2RlICE9IEFIRF9NT0RFX1VOS05PV04KLQkgJiYgYWhkLT5zYXZlZF9kc3RfbW9kZSAhPSBBSERfTU9ERV9VTktOT1dOKSB7Ci0JCWlmICgoYWhkLT5mbGFncyAmIEFIRF9VUERBVEVfUEVORF9DTURTKSAhPSAwKQotCQkJYWhkX3Jlc2V0X2NtZHNfcGVuZGluZyhhaGQpOwotCQlhaGRfc2V0X21vZGVzKGFoZCwgYWhkLT5zYXZlZF9zcmNfbW9kZSwgYWhkLT5zYXZlZF9kc3RfbW9kZSk7Ci0JfQotCi0JaWYgKChhaGRfaW5iKGFoZCwgSU5UU1RBVCkgJiB+Q01EQ01QTFQpID09IDApCi0JCWFoZF9vdXRiKGFoZCwgSENOVFJMLCBhaGQtPnVucGF1c2UpOwotCi0JYWhkX2tub3duX21vZGVzKGFoZCwgQUhEX01PREVfVU5LTk9XTiwgQUhEX01PREVfVU5LTk9XTik7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKiBTY2F0dGVyIEdhdGhlciBMaXN0IEhhbmRsaW5nICoqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgX19pbmxpbmUgdm9pZAkqYWhkX3NnX3NldHVwKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgc3RydWN0IHNjYiAqc2NiLAotCQkJCSAgICAgIHZvaWQgKnNncHRyLCBkbWFfYWRkcl90IGFkZHIsCi0JCQkJICAgICAgYnVzX3NpemVfdCBsZW4sIGludCBsYXN0KTsKLXN0YXRpYyBfX2lubGluZSB2b2lkCSBhaGRfc2V0dXBfc2NiX2NvbW1vbihzdHJ1Y3QgYWhkX3NvZnRjICphaGQsCi0JCQkJCSAgICAgIHN0cnVjdCBzY2IgKnNjYik7Ci1zdGF0aWMgX19pbmxpbmUgdm9pZAkgYWhkX3NldHVwX2RhdGFfc2NiKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwKLQkJCQkJICAgIHN0cnVjdCBzY2IgKnNjYik7Ci1zdGF0aWMgX19pbmxpbmUgdm9pZAkgYWhkX3NldHVwX25veGZlcl9zY2Ioc3RydWN0IGFoZF9zb2Z0YyAqYWhkLAotCQkJCQkgICAgICBzdHJ1Y3Qgc2NiICpzY2IpOwotCi1zdGF0aWMgX19pbmxpbmUgdm9pZCAqCi1haGRfc2dfc2V0dXAoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCBzdHJ1Y3Qgc2NiICpzY2IsCi0JICAgICB2b2lkICpzZ3B0ciwgZG1hX2FkZHJfdCBhZGRyLCBidXNfc2l6ZV90IGxlbiwgaW50IGxhc3QpCi17Ci0Jc2NiLT5zZ19jb3VudCsrOwotCWlmIChzaXplb2YoZG1hX2FkZHJfdCkgPiA0Ci0JICYmIChhaGQtPmZsYWdzICYgQUhEXzY0QklUX0FERFJFU1NJTkcpICE9IDApIHsKLQkJc3RydWN0IGFoZF9kbWE2NF9zZWcgKnNnOwotCi0JCXNnID0gKHN0cnVjdCBhaGRfZG1hNjRfc2VnICopc2dwdHI7Ci0JCXNnLT5hZGRyID0gYWhkX2h0b2xlNjQoYWRkcik7Ci0JCXNnLT5sZW4gPSBhaGRfaHRvbGUzMihsZW4gfCAobGFzdCA/IEFIRF9ETUFfTEFTVF9TRUcgOiAwKSk7Ci0JCXJldHVybiAoc2cgKyAxKTsKLQl9IGVsc2UgewotCQlzdHJ1Y3QgYWhkX2RtYV9zZWcgKnNnOwotCi0JCXNnID0gKHN0cnVjdCBhaGRfZG1hX3NlZyAqKXNncHRyOwotCQlzZy0+YWRkciA9IGFoZF9odG9sZTMyKGFkZHIgJiAweEZGRkZGRkZGKTsKLQkJc2ctPmxlbiA9IGFoZF9odG9sZTMyKGxlbiB8ICgoYWRkciA+PiA4KSAmIDB4N0YwMDAwMDApCi0JCQkJICAgIHwgKGxhc3QgPyBBSERfRE1BX0xBU1RfU0VHIDogMCkpOwotCQlyZXR1cm4gKHNnICsgMSk7Ci0JfQotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotYWhkX3NldHVwX3NjYl9jb21tb24oc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCBzdHJ1Y3Qgc2NiICpzY2IpCi17Ci0JLyogWFhYIEhhbmRsZSB0YXJnZXQgbW9kZSBTQ0JzLiAqLwotCXNjYi0+Y3JjX3JldHJ5X2NvdW50ID0gMDsKLQlpZiAoKHNjYi0+ZmxhZ3MgJiBTQ0JfUEFDS0VUSVpFRCkgIT0gMCkgewotCQkvKiBYWFggd2hhdCBhYm91dCBBQ0E/PyAgSXQgaXMgdHlwZSA0LCBidXQgVEFHX1RZUEUgPT0gMHgzLiAqLwotCQlzY2ItPmhzY2ItPnRhc2tfYXR0cmlidXRlID0gc2NiLT5oc2NiLT5jb250cm9sICYgU0NCX1RBR19UWVBFOwotCX0gZWxzZSB7Ci0JCWlmIChhaGRfZ2V0X3RyYW5zZmVyX2xlbmd0aChzY2IpICYgMHgwMSkKLQkJCXNjYi0+aHNjYi0+dGFza19hdHRyaWJ1dGUgPSBTQ0JfWEZFUkxFTl9PREQ7Ci0JCWVsc2UKLQkJCXNjYi0+aHNjYi0+dGFza19hdHRyaWJ1dGUgPSAwOwotCX0KLQotCWlmIChzY2ItPmhzY2ItPmNkYl9sZW4gPD0gTUFYX0NEQl9MRU5fV0lUSF9TRU5TRV9BRERSCi0JIHx8IChzY2ItPmhzY2ItPmNkYl9sZW4gJiBTQ0JfQ0RCX0xFTl9QVFIpICE9IDApCi0JCXNjYi0+aHNjYi0+c2hhcmVkX2RhdGEuaWRhdGEuY2RiX3BsdXNfc2FkZHIuc2Vuc2VfYWRkciA9Ci0JCSAgICBhaGRfaHRvbGUzMihzY2ItPnNlbnNlX2J1c2FkZHIpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotYWhkX3NldHVwX2RhdGFfc2NiKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgc3RydWN0IHNjYiAqc2NiKQotewotCS8qCi0JICogQ29weSB0aGUgZmlyc3QgU0cgaW50byB0aGUgImN1cnJlbnQiIGRhdGEgcG9udGVyIGFyZWEuCi0JICovCi0JaWYgKChhaGQtPmZsYWdzICYgQUhEXzY0QklUX0FERFJFU1NJTkcpICE9IDApIHsKLQkJc3RydWN0IGFoZF9kbWE2NF9zZWcgKnNnOwotCi0JCXNnID0gKHN0cnVjdCBhaGRfZG1hNjRfc2VnICopc2NiLT5zZ19saXN0OwotCQlzY2ItPmhzY2ItPmRhdGFwdHIgPSBzZy0+YWRkcjsKLQkJc2NiLT5oc2NiLT5kYXRhY250ID0gc2ctPmxlbjsKLQl9IGVsc2UgewotCQlzdHJ1Y3QgYWhkX2RtYV9zZWcgKnNnOwotCQl1aW50MzJfdCAqZGF0YXB0cl93b3JkczsKLQotCQlzZyA9IChzdHJ1Y3QgYWhkX2RtYV9zZWcgKilzY2ItPnNnX2xpc3Q7Ci0JCWRhdGFwdHJfd29yZHMgPSAodWludDMyX3QqKSZzY2ItPmhzY2ItPmRhdGFwdHI7Ci0JCWRhdGFwdHJfd29yZHNbMF0gPSBzZy0+YWRkcjsKLQkJZGF0YXB0cl93b3Jkc1sxXSA9IDA7Ci0JCWlmICgoYWhkLT5mbGFncyAmIEFIRF8zOUJJVF9BRERSRVNTSU5HKSAhPSAwKSB7Ci0JCQl1aW50NjRfdCBoaWdoX2FkZHI7Ci0KLQkJCWhpZ2hfYWRkciA9IGFoZF9sZTMydG9oKHNnLT5sZW4pICYgMHg3RjAwMDAwMDsKLQkJCXNjYi0+aHNjYi0+ZGF0YXB0ciB8PSBhaGRfaHRvbGU2NChoaWdoX2FkZHIgPDwgOCk7Ci0JCX0KLQkJc2NiLT5oc2NiLT5kYXRhY250ID0gc2ctPmxlbjsKLQl9Ci0JLyoKLQkgKiBOb3RlIHdoZXJlIHRvIGZpbmQgdGhlIFNHIGVudHJpZXMgaW4gYnVzIHNwYWNlLgotCSAqIFdlIGFsc28gc2V0IHRoZSBmdWxsIHJlc2lkdWFsIGZsYWcgd2hpY2ggdGhlIAotCSAqIHNlcXVlbmNlciB3aWxsIGNsZWFyIGFzIHNvb24gYXMgYSBkYXRhIHRyYW5zZmVyCi0JICogb2NjdXJzLgotCSAqLwotCXNjYi0+aHNjYi0+c2dwdHIgPSBhaGRfaHRvbGUzMihzY2ItPnNnX2xpc3RfYnVzYWRkcnxTR19GVUxMX1JFU0lEKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHZvaWQKLWFoZF9zZXR1cF9ub3hmZXJfc2NiKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgc3RydWN0IHNjYiAqc2NiKQotewotCXNjYi0+aHNjYi0+c2dwdHIgPSBhaGRfaHRvbGUzMihTR19MSVNUX05VTEwpOwotCXNjYi0+aHNjYi0+ZGF0YXB0ciA9IDA7Ci0Jc2NiLT5oc2NiLT5kYXRhY250ID0gMDsKLX0KK3ZvaWQJKmFoZF9zZ19zZXR1cChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHN0cnVjdCBzY2IgKnNjYiwKKwkJICAgICAgdm9pZCAqc2dwdHIsIGRtYV9hZGRyX3QgYWRkciwKKwkJICAgICAgYnVzX3NpemVfdCBsZW4sIGludCBsYXN0KTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqIE1lbW9yeSBtYXBwaW5nIHJvdXRpbmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBfX2lubGluZSBzaXplX3QJYWhkX3NnX3NpemUoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKLXN0YXRpYyBfX2lubGluZSB2b2lkICoKLQkJCWFoZF9zZ19idXNfdG9fdmlydChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsCi0JCQkJCSAgIHN0cnVjdCBzY2IgKnNjYiwKLQkJCQkJICAgdWludDMyX3Qgc2dfYnVzYWRkcik7Ci1zdGF0aWMgX19pbmxpbmUgdWludDMyX3QKLQkJCWFoZF9zZ192aXJ0X3RvX2J1cyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsCi0JCQkJCSAgIHN0cnVjdCBzY2IgKnNjYiwKLQkJCQkJICAgdm9pZCAqc2cpOwotc3RhdGljIF9faW5saW5lIHZvaWQJYWhkX3N5bmNfc2NiKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwKLQkJCQkgICAgIHN0cnVjdCBzY2IgKnNjYiwgaW50IG9wKTsKLXN0YXRpYyBfX2lubGluZSB2b2lkCWFoZF9zeW5jX3NnbGlzdChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsCi0JCQkJCXN0cnVjdCBzY2IgKnNjYiwgaW50IG9wKTsKLXN0YXRpYyBfX2lubGluZSB2b2lkCWFoZF9zeW5jX3NlbnNlKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwKLQkJCQkgICAgICAgc3RydWN0IHNjYiAqc2NiLCBpbnQgb3ApOwotc3RhdGljIF9faW5saW5lIHVpbnQzMl90Ci0JCQlhaGRfdGFyZ2V0Y21kX29mZnNldChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsCi0JCQkJCSAgICAgdV9pbnQgaW5kZXgpOworCit2b2lkCWFoZF9zeW5jX3NnbGlzdChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsCisJCQlzdHJ1Y3Qgc2NiICpzY2IsIGludCBvcCk7CiAKIHN0YXRpYyBfX2lubGluZSBzaXplX3QKIGFoZF9zZ19zaXplKHN0cnVjdCBhaGRfc29mdGMgKmFoZCkKQEAgLTM1OCwxMDQgKzExNSwzMiBAQAogCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBhaGRfZG1hX3NlZykpOwogfQogCi1zdGF0aWMgX19pbmxpbmUgdm9pZCAqCi1haGRfc2dfYnVzX3RvX3ZpcnQoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCBzdHJ1Y3Qgc2NiICpzY2IsIHVpbnQzMl90IHNnX2J1c2FkZHIpCi17Ci0JZG1hX2FkZHJfdCBzZ19vZmZzZXQ7Ci0KLQkvKiBzZ19saXN0X3BoeXMgcG9pbnRzIHRvIGVudHJ5IDEsIG5vdCAwICovCi0Jc2dfb2Zmc2V0ID0gc2dfYnVzYWRkciAtIChzY2ItPnNnX2xpc3RfYnVzYWRkciAtIGFoZF9zZ19zaXplKGFoZCkpOwotCXJldHVybiAoKHVpbnQ4X3QgKilzY2ItPnNnX2xpc3QgKyBzZ19vZmZzZXQpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdWludDMyX3QKLWFoZF9zZ192aXJ0X3RvX2J1cyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHN0cnVjdCBzY2IgKnNjYiwgdm9pZCAqc2cpCi17Ci0JZG1hX2FkZHJfdCBzZ19vZmZzZXQ7Ci0KLQkvKiBzZ19saXN0X3BoeXMgcG9pbnRzIHRvIGVudHJ5IDEsIG5vdCAwICovCi0Jc2dfb2Zmc2V0ID0gKCh1aW50OF90ICopc2cgLSAodWludDhfdCAqKXNjYi0+c2dfbGlzdCkKLQkJICAtIGFoZF9zZ19zaXplKGFoZCk7Ci0KLQlyZXR1cm4gKHNjYi0+c2dfbGlzdF9idXNhZGRyICsgc2dfb2Zmc2V0KTsKLX0KLQotc3RhdGljIF9faW5saW5lIHZvaWQKLWFoZF9zeW5jX3NjYihzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHN0cnVjdCBzY2IgKnNjYiwgaW50IG9wKQotewotCWFoZF9kbWFtYXBfc3luYyhhaGQsIGFoZC0+c2NiX2RhdGEuaHNjYl9kbWF0LAotCQkJc2NiLT5oc2NiX21hcC0+ZG1hbWFwLAotCQkJLypvZmZzZXQqLyh1aW50OF90KilzY2ItPmhzY2IgLSBzY2ItPmhzY2JfbWFwLT52YWRkciwKLQkJCS8qbGVuKi9zaXplb2YoKnNjYi0+aHNjYiksIG9wKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHZvaWQKLWFoZF9zeW5jX3NnbGlzdChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHN0cnVjdCBzY2IgKnNjYiwgaW50IG9wKQotewotCWlmIChzY2ItPnNnX2NvdW50ID09IDApCi0JCXJldHVybjsKLQotCWFoZF9kbWFtYXBfc3luYyhhaGQsIGFoZC0+c2NiX2RhdGEuc2dfZG1hdCwKLQkJCXNjYi0+c2dfbWFwLT5kbWFtYXAsCi0JCQkvKm9mZnNldCovc2NiLT5zZ19saXN0X2J1c2FkZHIgLSBhaGRfc2dfc2l6ZShhaGQpLAotCQkJLypsZW4qL2FoZF9zZ19zaXplKGFoZCkgKiBzY2ItPnNnX2NvdW50LCBvcCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB2b2lkCi1haGRfc3luY19zZW5zZShzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHN0cnVjdCBzY2IgKnNjYiwgaW50IG9wKQotewotCWFoZF9kbWFtYXBfc3luYyhhaGQsIGFoZC0+c2NiX2RhdGEuc2Vuc2VfZG1hdCwKLQkJCXNjYi0+c2Vuc2VfbWFwLT5kbWFtYXAsCi0JCQkvKm9mZnNldCovc2NiLT5zZW5zZV9idXNhZGRyLAotCQkJLypsZW4qL0FIRF9TRU5TRV9CVUZTSVpFLCBvcCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB1aW50MzJfdAotYWhkX3RhcmdldGNtZF9vZmZzZXQoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCBpbmRleCkKLXsKLQlyZXR1cm4gKCgodWludDhfdCAqKSZhaGQtPnRhcmdldGNtZHNbaW5kZXhdKQotCSAgICAgICAtICh1aW50OF90ICopYWhkLT5xb3V0Zmlmbyk7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKiBNaXNjZWxsYW5lb3VzIFN1cHBvcnQgRnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIF9faW5saW5lIHN0cnVjdCBhaGRfaW5pdGlhdG9yX3RpbmZvICoKLQkJCWFoZF9mZXRjaF90cmFuc2luZm8oc3RydWN0IGFoZF9zb2Z0YyAqYWhkLAotCQkJCQkgICAgY2hhciBjaGFubmVsLCB1X2ludCBvdXJfaWQsCi0JCQkJCSAgICB1X2ludCByZW1vdGVfaWQsCi0JCQkJCSAgICBzdHJ1Y3QgYWhkX3Rtb2RlX3RzdGF0ZSAqKnRzdGF0ZSk7Ci1zdGF0aWMgX19pbmxpbmUgdWludDE2X3QKLQkJCWFoZF9pbncoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCBwb3J0KTsKLXN0YXRpYyBfX2lubGluZSB2b2lkCWFoZF9vdXR3KHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgcG9ydCwKLQkJCQkgdV9pbnQgdmFsdWUpOwotc3RhdGljIF9faW5saW5lIHVpbnQzMl90Ci0JCQlhaGRfaW5sKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgcG9ydCk7Ci1zdGF0aWMgX19pbmxpbmUgdm9pZAlhaGRfb3V0bChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IHBvcnQsCi0JCQkJIHVpbnQzMl90IHZhbHVlKTsKLXN0YXRpYyBfX2lubGluZSB1aW50NjRfdAotCQkJYWhkX2lucShzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IHBvcnQpOwotc3RhdGljIF9faW5saW5lIHZvaWQJYWhkX291dHEoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCBwb3J0LAotCQkJCSB1aW50NjRfdCB2YWx1ZSk7Ci1zdGF0aWMgX19pbmxpbmUgdV9pbnQJYWhkX2dldF9zY2JwdHIoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKLXN0YXRpYyBfX2lubGluZSB2b2lkCWFoZF9zZXRfc2NicHRyKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgc2NicHRyKTsKLXN0YXRpYyBfX2lubGluZSB1X2ludAlhaGRfZ2V0X2huc2NiX3FvZmYoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKLXN0YXRpYyBfX2lubGluZSB2b2lkCWFoZF9zZXRfaG5zY2JfcW9mZihzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IHZhbHVlKTsKLXN0YXRpYyBfX2lubGluZSB1X2ludAlhaGRfZ2V0X2hlc2NiX3FvZmYoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKLXN0YXRpYyBfX2lubGluZSB2b2lkCWFoZF9zZXRfaGVzY2JfcW9mZihzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IHZhbHVlKTsKLXN0YXRpYyBfX2lubGluZSB1X2ludAlhaGRfZ2V0X3Nuc2NiX3FvZmYoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKLXN0YXRpYyBfX2lubGluZSB2b2lkCWFoZF9zZXRfc25zY2JfcW9mZihzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IHZhbHVlKTsKLXN0YXRpYyBfX2lubGluZSB1X2ludAlhaGRfZ2V0X3Nlc2NiX3FvZmYoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKLXN0YXRpYyBfX2lubGluZSB2b2lkCWFoZF9zZXRfc2VzY2JfcW9mZihzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IHZhbHVlKTsKLXN0YXRpYyBfX2lubGluZSB1X2ludAlhaGRfZ2V0X3Nkc2NiX3FvZmYoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKLXN0YXRpYyBfX2lubGluZSB2b2lkCWFoZF9zZXRfc2RzY2JfcW9mZihzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IHZhbHVlKTsKLXN0YXRpYyBfX2lubGluZSB1X2ludAlhaGRfaW5iX3NjYnJhbShzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IG9mZnNldCk7Ci1zdGF0aWMgX19pbmxpbmUgdV9pbnQJYWhkX2lud19zY2JyYW0oc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCBvZmZzZXQpOwotc3RhdGljIF9faW5saW5lIHVpbnQzMl90Ci0JCQlhaGRfaW5sX3NjYnJhbShzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IG9mZnNldCk7Ci1zdGF0aWMgX19pbmxpbmUgdWludDY0X3QKLQkJCWFoZF9pbnFfc2NicmFtKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgb2Zmc2V0KTsKLXN0YXRpYyBfX2lubGluZSB2b2lkCWFoZF9zd2FwX3dpdGhfbmV4dF9oc2NiKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwKLQkJCQkJCXN0cnVjdCBzY2IgKnNjYik7Ci1zdGF0aWMgX19pbmxpbmUgdm9pZAlhaGRfcXVldWVfc2NiKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgc3RydWN0IHNjYiAqc2NiKTsKK3N0cnVjdCBhaGRfaW5pdGlhdG9yX3RpbmZvICoKKwlhaGRfZmV0Y2hfdHJhbnNpbmZvKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwKKwkJCSAgICBjaGFyIGNoYW5uZWwsIHVfaW50IG91cl9pZCwKKwkJCSAgICB1X2ludCByZW1vdGVfaWQsCisJCQkgICAgc3RydWN0IGFoZF90bW9kZV90c3RhdGUgKip0c3RhdGUpOwordWludDE2X3QKKwlhaGRfaW53KHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgcG9ydCk7Cit2b2lkCWFoZF9vdXR3KHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgcG9ydCwKKwkJIHVfaW50IHZhbHVlKTsKK3VpbnQzMl90CisJYWhkX2lubChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IHBvcnQpOwordm9pZAlhaGRfb3V0bChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IHBvcnQsCisJCSB1aW50MzJfdCB2YWx1ZSk7Cit1aW50NjRfdAorCWFoZF9pbnEoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCBwb3J0KTsKK3ZvaWQJYWhkX291dHEoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCBwb3J0LAorCQkgdWludDY0X3QgdmFsdWUpOwordV9pbnQJYWhkX2dldF9zY2JwdHIoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKK3ZvaWQJYWhkX3NldF9zY2JwdHIoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCBzY2JwdHIpOwordV9pbnQJYWhkX2luYl9zY2JyYW0oc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCBvZmZzZXQpOwordV9pbnQJYWhkX2lud19zY2JyYW0oc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCBvZmZzZXQpOworc3RydWN0IHNjYiAqCisJYWhkX2xvb2t1cF9zY2Ioc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCB0YWcpOwordm9pZAlhaGRfcXVldWVfc2NiKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgc3RydWN0IHNjYiAqc2NiKTsKKwogc3RhdGljIF9faW5saW5lIHVpbnQ4X3QgKgogCQkJYWhkX2dldF9zZW5zZV9idWYoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLAogCQkJCQkgIHN0cnVjdCBzY2IgKnNjYik7CkBAIC00NjMsMjUgKzE0OCw3IEBACiAJCQlhaGRfZ2V0X3NlbnNlX2J1ZmFkZHIoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLAogCQkJCQkgICAgICBzdHJ1Y3Qgc2NiICpzY2IpOwogCi0vKgotICogUmV0dXJuIHBvaW50ZXJzIHRvIHRoZSB0cmFuc2ZlciBuZWdvdGlhdGlvbiBpbmZvcm1hdGlvbgotICogZm9yIHRoZSBzcGVjaWZpZWQgb3VyX2lkL3JlbW90ZV9pZCBwYWlyLgotICovCi1zdGF0aWMgX19pbmxpbmUgc3RydWN0IGFoZF9pbml0aWF0b3JfdGluZm8gKgotYWhkX2ZldGNoX3RyYW5zaW5mbyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIGNoYXIgY2hhbm5lbCwgdV9pbnQgb3VyX2lkLAotCQkgICAgdV9pbnQgcmVtb3RlX2lkLCBzdHJ1Y3QgYWhkX3Rtb2RlX3RzdGF0ZSAqKnRzdGF0ZSkKLXsKLQkvKgotCSAqIFRyYW5zZmVyIGRhdGEgc3RydWN0dXJlcyBhcmUgc3RvcmVkIGZyb20gdGhlIHBlcnNwZWN0aXZlCi0JICogb2YgdGhlIHRhcmdldCByb2xlLiAgU2luY2UgdGhlIHBhcmFtZXRlcnMgZm9yIGEgY29ubmVjdGlvbgotCSAqIGluIHRoZSBpbml0aWF0b3Igcm9sZSB0byBhIGdpdmVuIHRhcmdldCBhcmUgdGhlIHNhbWUgYXMKLQkgKiB3aGVuIHRoZSByb2xlcyBhcmUgcmV2ZXJzZWQsIHdlIHByZXRlbmQgd2UgYXJlIHRoZSB0YXJnZXQuCi0JICovCi0JaWYgKGNoYW5uZWwgPT0gJ0InKQotCQlvdXJfaWQgKz0gODsKLQkqdHN0YXRlID0gYWhkLT5lbmFibGVkX3RhcmdldHNbb3VyX2lkXTsKLQlyZXR1cm4gKCYoKnRzdGF0ZSktPnRyYW5zaW5mb1tyZW1vdGVfaWRdKTsKLX0KKyNpZiAwIC8qIHVudXNlZCAqLwogCiAjZGVmaW5lIEFIRF9DT1BZX0NPTF9JRFgoZHN0LCBzcmMpCQkJCVwKIGRvIHsJCQkJCQkJCVwKQEAgLTQ4OSwzMDQgKzE1Niw3IEBACiAJZHN0LT5oc2NiLT5sdW4gPSBzcmMtPmhzY2ItPmx1bjsJCQlcCiB9IHdoaWxlICgwKQogCi1zdGF0aWMgX19pbmxpbmUgdWludDE2X3QKLWFoZF9pbncoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCBwb3J0KQotewotCS8qCi0JICogUmVhZCBoaWdoIGJ5dGUgZmlyc3QgYXMgc29tZSByZWdpc3RlcnMgaW5jcmVtZW50Ci0JICogb3IgaGF2ZSBvdGhlciBzaWRlIGVmZmVjdHMgd2hlbiB0aGUgbG93IGJ5dGUgaXMKLQkgKiByZWFkLgotCSAqLwotCXVpbnQxNl90IHIgPSBhaGRfaW5iKGFoZCwgcG9ydCsxKSA8PCA4OwotCXJldHVybiByIHwgYWhkX2luYihhaGQsIHBvcnQpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotYWhkX291dHcoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCBwb3J0LCB1X2ludCB2YWx1ZSkKLXsKLQkvKgotCSAqIFdyaXRlIGxvdyBieXRlIGZpcnN0IHRvIGFjY29tb2RhdGUgcmVnaXN0ZXJzCi0JICogc3VjaCBhcyBQUkdNQ05UIHdoZXJlIHRoZSBvcmRlciBtYXRlcnMuCi0JICovCi0JYWhkX291dGIoYWhkLCBwb3J0LCB2YWx1ZSAmIDB4RkYpOwotCWFoZF9vdXRiKGFoZCwgcG9ydCsxLCAodmFsdWUgPj4gOCkgJiAweEZGKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHVpbnQzMl90Ci1haGRfaW5sKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgcG9ydCkKLXsKLQlyZXR1cm4gKChhaGRfaW5iKGFoZCwgcG9ydCkpCi0JICAgICAgfCAoYWhkX2luYihhaGQsIHBvcnQrMSkgPDwgOCkKLQkgICAgICB8IChhaGRfaW5iKGFoZCwgcG9ydCsyKSA8PCAxNikKLQkgICAgICB8IChhaGRfaW5iKGFoZCwgcG9ydCszKSA8PCAyNCkpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotYWhkX291dGwoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCBwb3J0LCB1aW50MzJfdCB2YWx1ZSkKLXsKLQlhaGRfb3V0YihhaGQsIHBvcnQsICh2YWx1ZSkgJiAweEZGKTsKLQlhaGRfb3V0YihhaGQsIHBvcnQrMSwgKCh2YWx1ZSkgPj4gOCkgJiAweEZGKTsKLQlhaGRfb3V0YihhaGQsIHBvcnQrMiwgKCh2YWx1ZSkgPj4gMTYpICYgMHhGRik7Ci0JYWhkX291dGIoYWhkLCBwb3J0KzMsICgodmFsdWUpID4+IDI0KSAmIDB4RkYpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdWludDY0X3QKLWFoZF9pbnEoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCBwb3J0KQotewotCXJldHVybiAoKGFoZF9pbmIoYWhkLCBwb3J0KSkKLQkgICAgICB8IChhaGRfaW5iKGFoZCwgcG9ydCsxKSA8PCA4KQotCSAgICAgIHwgKGFoZF9pbmIoYWhkLCBwb3J0KzIpIDw8IDE2KQotCSAgICAgIHwgKGFoZF9pbmIoYWhkLCBwb3J0KzMpIDw8IDI0KQotCSAgICAgIHwgKCgodWludDY0X3QpYWhkX2luYihhaGQsIHBvcnQrNCkpIDw8IDMyKQotCSAgICAgIHwgKCgodWludDY0X3QpYWhkX2luYihhaGQsIHBvcnQrNSkpIDw8IDQwKQotCSAgICAgIHwgKCgodWludDY0X3QpYWhkX2luYihhaGQsIHBvcnQrNikpIDw8IDQ4KQotCSAgICAgIHwgKCgodWludDY0X3QpYWhkX2luYihhaGQsIHBvcnQrNykpIDw8IDU2KSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB2b2lkCi1haGRfb3V0cShzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IHBvcnQsIHVpbnQ2NF90IHZhbHVlKQotewotCWFoZF9vdXRiKGFoZCwgcG9ydCwgdmFsdWUgJiAweEZGKTsKLQlhaGRfb3V0YihhaGQsIHBvcnQrMSwgKHZhbHVlID4+IDgpICYgMHhGRik7Ci0JYWhkX291dGIoYWhkLCBwb3J0KzIsICh2YWx1ZSA+PiAxNikgJiAweEZGKTsKLQlhaGRfb3V0YihhaGQsIHBvcnQrMywgKHZhbHVlID4+IDI0KSAmIDB4RkYpOwotCWFoZF9vdXRiKGFoZCwgcG9ydCs0LCAodmFsdWUgPj4gMzIpICYgMHhGRik7Ci0JYWhkX291dGIoYWhkLCBwb3J0KzUsICh2YWx1ZSA+PiA0MCkgJiAweEZGKTsKLQlhaGRfb3V0YihhaGQsIHBvcnQrNiwgKHZhbHVlID4+IDQ4KSAmIDB4RkYpOwotCWFoZF9vdXRiKGFoZCwgcG9ydCs3LCAodmFsdWUgPj4gNTYpICYgMHhGRik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB1X2ludAotYWhkX2dldF9zY2JwdHIoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKQotewotCUFIRF9BU1NFUlRfTU9ERVMoYWhkLCB+KEFIRF9NT0RFX1VOS05PV05fTVNLfEFIRF9NT0RFX0NGR19NU0spLAotCQkJIH4oQUhEX01PREVfVU5LTk9XTl9NU0t8QUhEX01PREVfQ0ZHX01TSykpOwotCXJldHVybiAoYWhkX2luYihhaGQsIFNDQlBUUikgfCAoYWhkX2luYihhaGQsIFNDQlBUUiArIDEpIDw8IDgpKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHZvaWQKLWFoZF9zZXRfc2NicHRyKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgc2NicHRyKQotewotCUFIRF9BU1NFUlRfTU9ERVMoYWhkLCB+KEFIRF9NT0RFX1VOS05PV05fTVNLfEFIRF9NT0RFX0NGR19NU0spLAotCQkJIH4oQUhEX01PREVfVU5LTk9XTl9NU0t8QUhEX01PREVfQ0ZHX01TSykpOwotCWFoZF9vdXRiKGFoZCwgU0NCUFRSLCBzY2JwdHIgJiAweEZGKTsKLQlhaGRfb3V0YihhaGQsIFNDQlBUUisxLCAoc2NicHRyID4+IDgpICYgMHhGRik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB1X2ludAotYWhkX2dldF9obnNjYl9xb2ZmKHN0cnVjdCBhaGRfc29mdGMgKmFoZCkKLXsKLQlyZXR1cm4gKGFoZF9pbndfYXRvbWljKGFoZCwgSE5TQ0JfUU9GRikpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotYWhkX3NldF9obnNjYl9xb2ZmKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgdmFsdWUpCi17Ci0JYWhkX291dHdfYXRvbWljKGFoZCwgSE5TQ0JfUU9GRiwgdmFsdWUpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdV9pbnQKLWFoZF9nZXRfaGVzY2JfcW9mZihzdHJ1Y3QgYWhkX3NvZnRjICphaGQpCi17Ci0JcmV0dXJuIChhaGRfaW5iKGFoZCwgSEVTQ0JfUU9GRikpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotYWhkX3NldF9oZXNjYl9xb2ZmKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgdmFsdWUpCi17Ci0JYWhkX291dGIoYWhkLCBIRVNDQl9RT0ZGLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB1X2ludAotYWhkX2dldF9zbnNjYl9xb2ZmKHN0cnVjdCBhaGRfc29mdGMgKmFoZCkKLXsKLQl1X2ludCBvbGR2YWx1ZTsKLQotCUFIRF9BU1NFUlRfTU9ERVMoYWhkLCBBSERfTU9ERV9DQ0hBTl9NU0ssIEFIRF9NT0RFX0NDSEFOX01TSyk7Ci0Jb2xkdmFsdWUgPSBhaGRfaW53KGFoZCwgU05TQ0JfUU9GRik7Ci0JYWhkX291dHcoYWhkLCBTTlNDQl9RT0ZGLCBvbGR2YWx1ZSk7Ci0JcmV0dXJuIChvbGR2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB2b2lkCi1haGRfc2V0X3Nuc2NiX3FvZmYoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCB2YWx1ZSkKLXsKLQlBSERfQVNTRVJUX01PREVTKGFoZCwgQUhEX01PREVfQ0NIQU5fTVNLLCBBSERfTU9ERV9DQ0hBTl9NU0spOwotCWFoZF9vdXR3KGFoZCwgU05TQ0JfUU9GRiwgdmFsdWUpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdV9pbnQKLWFoZF9nZXRfc2VzY2JfcW9mZihzdHJ1Y3QgYWhkX3NvZnRjICphaGQpCi17Ci0JQUhEX0FTU0VSVF9NT0RFUyhhaGQsIEFIRF9NT0RFX0NDSEFOX01TSywgQUhEX01PREVfQ0NIQU5fTVNLKTsKLQlyZXR1cm4gKGFoZF9pbmIoYWhkLCBTRVNDQl9RT0ZGKSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB2b2lkCi1haGRfc2V0X3Nlc2NiX3FvZmYoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCB2YWx1ZSkKLXsKLQlBSERfQVNTRVJUX01PREVTKGFoZCwgQUhEX01PREVfQ0NIQU5fTVNLLCBBSERfTU9ERV9DQ0hBTl9NU0spOwotCWFoZF9vdXRiKGFoZCwgU0VTQ0JfUU9GRiwgdmFsdWUpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdV9pbnQKLWFoZF9nZXRfc2RzY2JfcW9mZihzdHJ1Y3QgYWhkX3NvZnRjICphaGQpCi17Ci0JQUhEX0FTU0VSVF9NT0RFUyhhaGQsIEFIRF9NT0RFX0NDSEFOX01TSywgQUhEX01PREVfQ0NIQU5fTVNLKTsKLQlyZXR1cm4gKGFoZF9pbmIoYWhkLCBTRFNDQl9RT0ZGKSB8IChhaGRfaW5iKGFoZCwgU0RTQ0JfUU9GRiArIDEpIDw8IDgpKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHZvaWQKLWFoZF9zZXRfc2RzY2JfcW9mZihzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IHZhbHVlKQotewotCUFIRF9BU1NFUlRfTU9ERVMoYWhkLCBBSERfTU9ERV9DQ0hBTl9NU0ssIEFIRF9NT0RFX0NDSEFOX01TSyk7Ci0JYWhkX291dGIoYWhkLCBTRFNDQl9RT0ZGLCB2YWx1ZSAmIDB4RkYpOwotCWFoZF9vdXRiKGFoZCwgU0RTQ0JfUU9GRisxLCAodmFsdWUgPj4gOCkgJiAweEZGKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHVfaW50Ci1haGRfaW5iX3NjYnJhbShzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IG9mZnNldCkKLXsKLQl1X2ludCB2YWx1ZTsKLQotCS8qCi0JICogV29ya2Fyb3VuZCBQQ0ktWCBSZXYgQS4gaGFyZHdhcmUgYnVnLgotCSAqIEFmdGVyIGEgaG9zdCByZWFkIG9mIFNDQiBtZW1vcnksIHRoZSBjaGlwCi0JICogbWF5IGJlY29tZSBjb25mdXNlZCBpbnRvIHRoaW5raW5nIHByZWZldGNoCi0JICogd2FzIHJlcXVpcmVkLiAgVGhpcyBzdGFydHMgdGhlIGRpc2NhcmQgdGltZXIKLQkgKiBydW5uaW5nIGFuZCBjYW4gY2F1c2UgYW4gdW5leHBlY3RlZCBkaXNjYXJkCi0JICogdGltZXIgaW50ZXJydXB0LiAgVGhlIHdvcmsgYXJvdW5kIGlzIHRvIHJlYWQKLQkgKiBhIG5vcm1hbCByZWdpc3RlciBwcmlvciB0byB0aGUgZXhoYXVzdGlvbiBvZgotCSAqIHRoZSBkaXNjYXJkIHRpbWVyLiAgVGhlIG1vZGUgcG9pbnRlciByZWdpc3RlcgotCSAqIGhhcyBubyBzaWRlIGVmZmVjdHMgYW5kIHNvIHNlcnZlcyB3ZWxsIGZvcgotCSAqIHRoaXMgcHVycG9zZS4KLQkgKgotCSAqIFJhem9yICM1MjgKLQkgKi8KLQl2YWx1ZSA9IGFoZF9pbmIoYWhkLCBvZmZzZXQpOwotCWlmICgoYWhkLT5idWdzICYgQUhEX1BDSVhfU0NCUkFNX1JEX0JVRykgIT0gMCkKLQkJYWhkX2luYihhaGQsIE1PREVfUFRSKTsKLQlyZXR1cm4gKHZhbHVlKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHVfaW50Ci1haGRfaW53X3NjYnJhbShzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IG9mZnNldCkKLXsKLQlyZXR1cm4gKGFoZF9pbmJfc2NicmFtKGFoZCwgb2Zmc2V0KQotCSAgICAgIHwgKGFoZF9pbmJfc2NicmFtKGFoZCwgb2Zmc2V0KzEpIDw8IDgpKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHVpbnQzMl90Ci1haGRfaW5sX3NjYnJhbShzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IG9mZnNldCkKLXsKLQlyZXR1cm4gKGFoZF9pbndfc2NicmFtKGFoZCwgb2Zmc2V0KQotCSAgICAgIHwgKGFoZF9pbndfc2NicmFtKGFoZCwgb2Zmc2V0KzIpIDw8IDE2KSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB1aW50NjRfdAotYWhkX2lucV9zY2JyYW0oc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCBvZmZzZXQpCi17Ci0JcmV0dXJuIChhaGRfaW5sX3NjYnJhbShhaGQsIG9mZnNldCkKLQkgICAgICB8ICgodWludDY0X3QpYWhkX2lubF9zY2JyYW0oYWhkLCBvZmZzZXQrNCkpIDw8IDMyKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHN0cnVjdCBzY2IgKgotYWhkX2xvb2t1cF9zY2Ioc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCB1X2ludCB0YWcpCi17Ci0Jc3RydWN0IHNjYiogc2NiOwotCi0JaWYgKHRhZyA+PSBBSERfU0NCX01BWCkKLQkJcmV0dXJuIChOVUxMKTsKLQlzY2IgPSBhaGQtPnNjYl9kYXRhLnNjYmluZGV4W3RhZ107Ci0JaWYgKHNjYiAhPSBOVUxMKQotCQlhaGRfc3luY19zY2IoYWhkLCBzY2IsCi0JCQkgICAgIEJVU19ETUFTWU5DX1BPU1RSRUFEfEJVU19ETUFTWU5DX1BPU1RXUklURSk7Ci0JcmV0dXJuIChzY2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotYWhkX3N3YXBfd2l0aF9uZXh0X2hzY2Ioc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCBzdHJ1Y3Qgc2NiICpzY2IpCi17Ci0Jc3RydWN0CSBoYXJkd2FyZV9zY2IgKnFfaHNjYjsKLQlzdHJ1Y3QJIG1hcF9ub2RlICpxX2hzY2JfbWFwOwotCXVpbnQzMl90IHNhdmVkX2hzY2JfYnVzYWRkcjsKLQotCS8qCi0JICogT3VyIHF1ZXVpbmcgbWV0aG9kIGlzIGEgYml0IHRyaWNreS4gIFRoZSBjYXJkCi0JICoga25vd3MgaW4gYWR2YW5jZSB3aGljaCBIU0NCIChieSBhZGRyZXNzKSB0byBkb3dubG9hZCwKLQkgKiBhbmQgd2UgY2FuJ3QgZGlzYXBwb2ludCBpdC4gIFRvIGFjaGlldmUgdGhpcywgdGhlIG5leHQKLQkgKiBIU0NCIHRvIGRvd25sb2FkIGlzIHNhdmVkIG9mZiBpbiBhaGQtPm5leHRfcXVldWVkX2hzY2IuCi0JICogV2hlbiB3ZSBhcmUgY2FsbGVkIHRvIHF1ZXVlICJhbiBhcmJpdHJhcnkgc2NiIiwKLQkgKiB3ZSBjb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgaW5jb21pbmcgSFNDQiB0byB0aGUgb25lCi0JICogdGhlIHNlcXVlbmNlciBrbm93cyBhYm91dCwgc3dhcCBIU0NCIHBvaW50ZXJzIGFuZAotCSAqIGZpbmFsbHkgYXNzaWduIHRoZSBTQ0IgdG8gdGhlIHRhZyBpbmRleGVkIGxvY2F0aW9uCi0JICogaW4gdGhlIHNjYl9hcnJheS4gIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHdlIGNhbiBzdGlsbAotCSAqIGxvY2F0ZSB0aGUgY29ycmVjdCBTQ0IgYnkgU0NCX1RBRy4KLQkgKi8KLQlxX2hzY2IgPSBhaGQtPm5leHRfcXVldWVkX2hzY2I7Ci0JcV9oc2NiX21hcCA9IGFoZC0+bmV4dF9xdWV1ZWRfaHNjYl9tYXA7Ci0Jc2F2ZWRfaHNjYl9idXNhZGRyID0gcV9oc2NiLT5oc2NiX2J1c2FkZHI7Ci0JbWVtY3B5KHFfaHNjYiwgc2NiLT5oc2NiLCBzaXplb2YoKnNjYi0+aHNjYikpOwotCXFfaHNjYi0+aHNjYl9idXNhZGRyID0gc2F2ZWRfaHNjYl9idXNhZGRyOwotCXFfaHNjYi0+bmV4dF9oc2NiX2J1c2FkZHIgPSBzY2ItPmhzY2ItPmhzY2JfYnVzYWRkcjsKLQotCS8qIE5vdyBzd2FwIEhTQ0IgcG9pbnRlcnMuICovCi0JYWhkLT5uZXh0X3F1ZXVlZF9oc2NiID0gc2NiLT5oc2NiOwotCWFoZC0+bmV4dF9xdWV1ZWRfaHNjYl9tYXAgPSBzY2ItPmhzY2JfbWFwOwotCXNjYi0+aHNjYiA9IHFfaHNjYjsKLQlzY2ItPmhzY2JfbWFwID0gcV9oc2NiX21hcDsKLQotCS8qIE5vdyBkZWZpbmUgdGhlIG1hcHBpbmcgZnJvbSB0YWcgdG8gU0NCIGluIHRoZSBzY2JpbmRleCAqLwotCWFoZC0+c2NiX2RhdGEuc2NiaW5kZXhbU0NCX0dFVF9UQUcoc2NiKV0gPSBzY2I7Ci19Ci0KLS8qCi0gKiBUZWxsIHRoZSBzZXF1ZW5jZXIgYWJvdXQgYSBuZXcgdHJhbnNhY3Rpb24gdG8gZXhlY3V0ZS4KLSAqLwotc3RhdGljIF9faW5saW5lIHZvaWQKLWFoZF9xdWV1ZV9zY2Ioc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCBzdHJ1Y3Qgc2NiICpzY2IpCi17Ci0JYWhkX3N3YXBfd2l0aF9uZXh0X2hzY2IoYWhkLCBzY2IpOwotCi0JaWYgKFNDQklEX0lTX05VTEwoU0NCX0dFVF9UQUcoc2NiKSkpCi0JCXBhbmljKCJBdHRlbXB0IHRvIHF1ZXVlIGludmFsaWQgU0NCIHRhZyAleFxuIiwKLQkJICAgICAgU0NCX0dFVF9UQUcoc2NiKSk7Ci0KLQkvKgotCSAqIEtlZXAgYSBoaXN0b3J5IG9mIFNDQnMgd2UndmUgZG93bmxvYWRlZCBpbiB0aGUgcWluZmlmby4KLQkgKi8KLQlhaGQtPnFpbmZpZm9bQUhEX1FJTl9XUkFQKGFoZC0+cWluZmlmb25leHQpXSA9IFNDQl9HRVRfVEFHKHNjYik7Ci0JYWhkLT5xaW5maWZvbmV4dCsrOwotCi0JaWYgKHNjYi0+c2dfY291bnQgIT0gMCkKLQkJYWhkX3NldHVwX2RhdGFfc2NiKGFoZCwgc2NiKTsKLQllbHNlCi0JCWFoZF9zZXR1cF9ub3hmZXJfc2NiKGFoZCwgc2NiKTsKLQlhaGRfc2V0dXBfc2NiX2NvbW1vbihhaGQsIHNjYik7Ci0KLQkvKgotCSAqIE1ha2Ugc3VyZSBvdXIgZGF0YSBpcyBjb25zaXN0ZW50IGZyb20gdGhlCi0JICogcGVyc3BlY3RpdmUgb2YgdGhlIGFkYXB0ZXIuCi0JICovCi0JYWhkX3N5bmNfc2NiKGFoZCwgc2NiLCBCVVNfRE1BU1lOQ19QUkVSRUFEfEJVU19ETUFTWU5DX1BSRVdSSVRFKTsKLQotI2lmZGVmIEFIRF9ERUJVRwotCWlmICgoYWhkX2RlYnVnICYgQUhEX1NIT1dfUVVFVUUpICE9IDApIHsKLQkJdWludDY0X3QgaG9zdF9kYXRhcHRyOwotCi0JCWhvc3RfZGF0YXB0ciA9IGFoZF9sZTY0dG9oKHNjYi0+aHNjYi0+ZGF0YXB0cik7Ci0JCXByaW50ZigiJXM6IFF1ZXVlaW5nIFNDQiAlZDoweCV4IGJ1cyBhZGRyIDB4JXggLSAweCV4JXgvMHgleFxuIiwKLQkJICAgICAgIGFoZF9uYW1lKGFoZCksCi0JCSAgICAgICBTQ0JfR0VUX1RBRyhzY2IpLCBzY2ItPmhzY2ItPnNjc2lpZCwKLQkJICAgICAgIGFoZF9sZTMydG9oKHNjYi0+aHNjYi0+aHNjYl9idXNhZGRyKSwKLQkJICAgICAgICh1X2ludCkoKGhvc3RfZGF0YXB0ciA+PiAzMikgJiAweEZGRkZGRkZGKSwKLQkJICAgICAgICh1X2ludCkoaG9zdF9kYXRhcHRyICYgMHhGRkZGRkZGRiksCi0JCSAgICAgICBhaGRfbGUzMnRvaChzY2ItPmhzY2ItPmRhdGFjbnQpKTsKLQl9CiAjZW5kaWYKLQkvKiBUZWxsIHRoZSBhZGFwdGVyIGFib3V0IHRoZSBuZXdseSBxdWV1ZWQgU0NCICovCi0JYWhkX3NldF9obnNjYl9xb2ZmKGFoZCwgYWhkLT5xaW5maWZvbmV4dCk7Ci19CiAKIHN0YXRpYyBfX2lubGluZSB1aW50OF90ICoKIGFoZF9nZXRfc2Vuc2VfYnVmKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgc3RydWN0IHNjYiAqc2NiKQpAQCAtODAxLDE1MSArMTcxLDYgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqIEludGVycnVwdCBQcm9jZXNzaW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBfX2lubGluZSB2b2lkCWFoZF9zeW5jX3FvdXRmaWZvKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgaW50IG9wKTsKLXN0YXRpYyBfX2lubGluZSB2b2lkCWFoZF9zeW5jX3RxaW5maWZvKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgaW50IG9wKTsKLXN0YXRpYyBfX2lubGluZSB1X2ludAlhaGRfY2hlY2tfY21kY21wbHRxdWV1ZXMoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKLXN0YXRpYyBfX2lubGluZSBpbnQJYWhkX2ludHIoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKLQotc3RhdGljIF9faW5saW5lIHZvaWQKLWFoZF9zeW5jX3FvdXRmaWZvKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgaW50IG9wKQotewotCWFoZF9kbWFtYXBfc3luYyhhaGQsIGFoZC0+c2hhcmVkX2RhdGFfZG1hdCwgYWhkLT5zaGFyZWRfZGF0YV9tYXAuZG1hbWFwLAotCQkJLypvZmZzZXQqLzAsCi0JCQkvKmxlbiovQUhEX1NDQl9NQVggKiBzaXplb2Yoc3RydWN0IGFoZF9jb21wbGV0aW9uKSwgb3ApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotYWhkX3N5bmNfdHFpbmZpZm8oc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCBpbnQgb3ApCi17Ci0jaWZkZWYgQUhEX1RBUkdFVF9NT0RFCi0JaWYgKChhaGQtPmZsYWdzICYgQUhEX1RBUkdFVFJPTEUpICE9IDApIHsKLQkJYWhkX2RtYW1hcF9zeW5jKGFoZCwgYWhkLT5zaGFyZWRfZGF0YV9kbWF0LAotCQkJCWFoZC0+c2hhcmVkX2RhdGFfbWFwLmRtYW1hcCwKLQkJCQlhaGRfdGFyZ2V0Y21kX29mZnNldChhaGQsIDApLAotCQkJCXNpemVvZihzdHJ1Y3QgdGFyZ2V0X2NtZCkgKiBBSERfVE1PREVfQ01EUywKLQkJCQlvcCk7Ci0JfQotI2VuZGlmCi19Ci0KLS8qCi0gKiBTZWUgaWYgdGhlIGZpcm13YXJlIGhhcyBwb3N0ZWQgYW55IGNvbXBsZXRlZCBjb21tYW5kcwotICogaW50byBvdXIgaW4tY29yZSBjb21tYW5kIGNvbXBsZXRlIGZpZm9zLgotICovCi0jZGVmaW5lIEFIRF9SVU5fUU9VVEZJRk8gMHgxCi0jZGVmaW5lIEFIRF9SVU5fVFFJTkZJRk8gMHgyCi1zdGF0aWMgX19pbmxpbmUgdV9pbnQKLWFoZF9jaGVja19jbWRjbXBsdHF1ZXVlcyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQpCi17Ci0JdV9pbnQgcmV0dmFsOwotCi0JcmV0dmFsID0gMDsKLQlhaGRfZG1hbWFwX3N5bmMoYWhkLCBhaGQtPnNoYXJlZF9kYXRhX2RtYXQsIGFoZC0+c2hhcmVkX2RhdGFfbWFwLmRtYW1hcCwKLQkJCS8qb2Zmc2V0Ki9haGQtPnFvdXRmaWZvbmV4dCAqIHNpemVvZigqYWhkLT5xb3V0ZmlmbyksCi0JCQkvKmxlbiovc2l6ZW9mKCphaGQtPnFvdXRmaWZvKSwgQlVTX0RNQVNZTkNfUE9TVFJFQUQpOwotCWlmIChhaGQtPnFvdXRmaWZvW2FoZC0+cW91dGZpZm9uZXh0XS52YWxpZF90YWcKLQkgID09IGFoZC0+cW91dGZpZm9uZXh0X3ZhbGlkX3RhZykKLQkJcmV0dmFsIHw9IEFIRF9SVU5fUU9VVEZJRk87Ci0jaWZkZWYgQUhEX1RBUkdFVF9NT0RFCi0JaWYgKChhaGQtPmZsYWdzICYgQUhEX1RBUkdFVFJPTEUpICE9IDAKLQkgJiYgKGFoZC0+ZmxhZ3MgJiBBSERfVFFJTkZJRk9fQkxPQ0tFRCkgPT0gMCkgewotCQlhaGRfZG1hbWFwX3N5bmMoYWhkLCBhaGQtPnNoYXJlZF9kYXRhX2RtYXQsCi0JCQkJYWhkLT5zaGFyZWRfZGF0YV9tYXAuZG1hbWFwLAotCQkJCWFoZF90YXJnZXRjbWRfb2Zmc2V0KGFoZCwgYWhkLT50cWluZmlmb2ZuZXh0KSwKLQkJCQkvKmxlbiovc2l6ZW9mKHN0cnVjdCB0YXJnZXRfY21kKSwKLQkJCQlCVVNfRE1BU1lOQ19QT1NUUkVBRCk7Ci0JCWlmIChhaGQtPnRhcmdldGNtZHNbYWhkLT50cWluZmlmb25leHRdLmNtZF92YWxpZCAhPSAwKQotCQkJcmV0dmFsIHw9IEFIRF9SVU5fVFFJTkZJRk87Ci0JfQotI2VuZGlmCi0JcmV0dXJuIChyZXR2YWwpOwotfQotCi0vKgotICogQ2F0Y2ggYW4gaW50ZXJydXB0IGZyb20gdGhlIGFkYXB0ZXIKLSAqLwotc3RhdGljIF9faW5saW5lIGludAotYWhkX2ludHIoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKQotewotCXVfaW50CWludHN0YXQ7Ci0KLQlpZiAoKGFoZC0+cGF1c2UgJiBJTlRFTikgPT0gMCkgewotCQkvKgotCQkgKiBPdXIgaW50ZXJydXB0IGlzIG5vdCBlbmFibGVkIG9uIHRoZSBjaGlwCi0JCSAqIGFuZCBtYXkgYmUgZGlzYWJsZWQgZm9yIHJlLWVudHJhbmN5IHJlYXNvbnMsCi0JCSAqIHNvIGp1c3QgcmV0dXJuLiAgVGhpcyBpcyBsaWtlbHkganVzdCBhIHNoYXJlZAotCQkgKiBpbnRlcnJ1cHQuCi0JCSAqLwotCQlyZXR1cm4gKDApOwotCX0KLQotCS8qCi0JICogSW5zdGVhZCBvZiBkaXJlY3RseSByZWFkaW5nIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyLAotCSAqIGluZmVyIHRoZSBjYXVzZSBvZiB0aGUgaW50ZXJydXB0IGJ5IGNoZWNraW5nIG91ciBpbi1jb3JlCi0JICogY29tcGxldGlvbiBxdWV1ZXMuICBUaGlzIGF2b2lkcyBhIGNvc3RseSBQQ0kgYnVzIHJlYWQgaW4KLQkgKiBtb3N0IGNhc2VzLgotCSAqLwotCWlmICgoYWhkLT5mbGFncyAmIEFIRF9BTExfSU5URVJSVVBUUykgPT0gMAotCSAmJiAoYWhkX2NoZWNrX2NtZGNtcGx0cXVldWVzKGFoZCkgIT0gMCkpCi0JCWludHN0YXQgPSBDTURDTVBMVDsKLQllbHNlCi0JCWludHN0YXQgPSBhaGRfaW5iKGFoZCwgSU5UU1RBVCk7Ci0KLQlpZiAoKGludHN0YXQgJiBJTlRfUEVORCkgPT0gMCkKLQkJcmV0dXJuICgwKTsKLQotCWlmIChpbnRzdGF0ICYgQ01EQ01QTFQpIHsKLQkJYWhkX291dGIoYWhkLCBDTFJJTlQsIENMUkNNRElOVCk7Ci0KLQkJLyoKLQkJICogRW5zdXJlIHRoYXQgdGhlIGNoaXAgc2VlcyB0aGF0IHdlJ3ZlIGNsZWFyZWQKLQkJICogdGhpcyBpbnRlcnJ1cHQgYmVmb3JlIHdlIHdhbGsgdGhlIG91dHB1dCBmaWZvLgotCQkgKiBPdGhlcndpc2UsIHdlIG1heSwgZHVlIHRvIHBvc3RlZCBidXMgd3JpdGVzLAotCQkgKiBjbGVhciB0aGUgaW50ZXJydXB0IGFmdGVyIHdlIGZpbmlzaCB0aGUgc2NhbiwKLQkJICogYW5kIGFmdGVyIHRoZSBzZXF1ZW5jZXIgaGFzIGFkZGVkIG5ldyBlbnRyaWVzCi0JCSAqIGFuZCBhc3NlcnRlZCB0aGUgaW50ZXJydXB0IGFnYWluLgotCQkgKi8KLQkJaWYgKChhaGQtPmJ1Z3MgJiBBSERfSU5UQ09MTElTSU9OX0JVRykgIT0gMCkgewotCQkJaWYgKGFoZF9pc19wYXVzZWQoYWhkKSkgewotCQkJCS8qCi0JCQkJICogUG90ZW50aWFsbHkgbG9zdCBTRVFJTlQuCi0JCQkJICogSWYgU0VRSU5UQ09ERSBpcyBub24temVybywKLQkJCQkgKiBzaW11bGF0ZSB0aGUgU0VRSU5ULgotCQkJCSAqLwotCQkJCWlmIChhaGRfaW5iKGFoZCwgU0VRSU5UQ09ERSkgIT0gTk9fU0VRSU5UKQotCQkJCQlpbnRzdGF0IHw9IFNFUUlOVDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWFoZF9mbHVzaF9kZXZpY2Vfd3JpdGVzKGFoZCk7Ci0JCX0KLQkJYWhkX3J1bl9xb3V0ZmlmbyhhaGQpOwotCQlhaGQtPmNtZGNtcGx0X2NvdW50c1thaGQtPmNtZGNtcGx0X2J1Y2tldF0rKzsKLQkJYWhkLT5jbWRjbXBsdF90b3RhbCsrOwotI2lmZGVmIEFIRF9UQVJHRVRfTU9ERQotCQlpZiAoKGFoZC0+ZmxhZ3MgJiBBSERfVEFSR0VUUk9MRSkgIT0gMCkKLQkJCWFoZF9ydW5fdHFpbmZpZm8oYWhkLCAvKnBhdXNlZCovRkFMU0UpOwotI2VuZGlmCi0JfQotCi0JLyoKLQkgKiBIYW5kbGUgc3RhdHVzZXMgdGhhdCBtYXkgaW52YWxpZGF0ZSBvdXIgY2FjaGVkCi0JICogY29weSBvZiBJTlRTVEFUIHNlcGFyYXRlbHkuCi0JICovCi0JaWYgKGludHN0YXQgPT0gMHhGRiAmJiAoYWhkLT5mZWF0dXJlcyAmIEFIRF9SRU1PVkFCTEUpICE9IDApIHsKLQkJLyogSG90IGVqZWN0LiAgRG8gbm90aGluZyAqLwotCX0gZWxzZSBpZiAoaW50c3RhdCAmIEhXRVJSSU5UKSB7Ci0JCWFoZF9oYW5kbGVfaHdlcnJpbnQoYWhkKTsKLQl9IGVsc2UgaWYgKChpbnRzdGF0ICYgKFBDSUlOVHxTUExUSU5UKSkgIT0gMCkgewotCQlhaGQtPmJ1c19pbnRyKGFoZCk7Ci0JfSBlbHNlIHsKLQotCQlpZiAoKGludHN0YXQgJiBTRVFJTlQpICE9IDApCi0JCQlhaGRfaGFuZGxlX3NlcWludChhaGQsIGludHN0YXQpOwotCi0JCWlmICgoaW50c3RhdCAmIFNDU0lJTlQpICE9IDApCi0JCQlhaGRfaGFuZGxlX3Njc2lpbnQoYWhkLCBpbnRzdGF0KTsKLQl9Ci0JcmV0dXJuICgxKTsKLX0KK2ludAlhaGRfaW50cihzdHJ1Y3QgYWhkX3NvZnRjICphaGQpOwogCiAjZW5kaWYgIC8qIF9BSUM3OVhYX0lOTElORV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmMKaW5kZXggMDA4MWFhMy4uMGY4MjliMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jCkBAIC0xOTMsNyArMTkzLDcgQEAKICNkZWZpbmUgQUlDNzlYWF9QUkVDT01QX0lOREVYCTAKICNkZWZpbmUgQUlDNzlYWF9TTEVXUkFURV9JTkRFWAkxCiAjZGVmaW5lIEFJQzc5WFhfQU1QTElUVURFX0lOREVYCTIKLXN0YXRpYyBzdHJ1Y3QgYWhkX2xpbnV4X2lvY2VsbF9vcHRzIGFpYzc5eHhfaW9jZWxsX2luZm9bXSA9CitzdGF0aWMgY29uc3Qgc3RydWN0IGFoZF9saW51eF9pb2NlbGxfb3B0cyBhaWM3OXh4X2lvY2VsbF9pbmZvW10gPQogewogCUFJQzc5WFhfREVGQVVMVF9JT09QVFMsCiAJQUlDNzlYWF9ERUZBVUxUX0lPT1BUUywKQEAgLTM2OSwxMCArMzY5LDE2NyBAQAogc3RhdGljIGludCBhaGRfbGludXhfdW5pdDsKIAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIElubGluZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIF9faW5saW5lIHZvaWQgYWhkX2xpbnV4X3VubWFwX3NjYihzdHJ1Y3QgYWhkX3NvZnRjKiwgc3RydWN0IHNjYiopOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqIE9TIFV0aWxpdHkgV3JhcHBlcnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgYWhkX2RlbGF5KGxvbmcpOwordm9pZAorYWhkX2RlbGF5KGxvbmcgdXNlYykKK3sKKwkvKgorCSAqIHVkZWxheSBvbiBMaW51eCBjYW4gaGF2ZSBwcm9ibGVtcyBmb3IKKwkgKiBtdWx0aS1taWxsaXNlY29uZCB3YWl0cy4gIFdhaXQgYXQgbW9zdAorCSAqIDEwMjR1cyBwZXIgY2FsbC4KKwkgKi8KKwl3aGlsZSAodXNlYyA+IDApIHsKKwkJdWRlbGF5KHVzZWMgJSAxMDI0KTsKKwkJdXNlYyAtPSAxMDI0OworCX0KK30KIAotc3RhdGljIF9faW5saW5lIHZvaWQKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIExvdyBMZXZlbCBJL08gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3VpbnQ4X3QgYWhkX2luYihzdHJ1Y3QgYWhkX3NvZnRjICogYWhkLCBsb25nIHBvcnQpOwordm9pZCBhaGRfb3V0YihzdHJ1Y3QgYWhkX3NvZnRjICogYWhkLCBsb25nIHBvcnQsIHVpbnQ4X3QgdmFsKTsKK3ZvaWQgYWhkX291dHdfYXRvbWljKHN0cnVjdCBhaGRfc29mdGMgKiBhaGQsCisJCQkJICAgICBsb25nIHBvcnQsIHVpbnQxNl90IHZhbCk7Cit2b2lkIGFoZF9vdXRzYihzdHJ1Y3QgYWhkX3NvZnRjICogYWhkLCBsb25nIHBvcnQsCisJCQkgICAgICAgdWludDhfdCAqLCBpbnQgY291bnQpOwordm9pZCBhaGRfaW5zYihzdHJ1Y3QgYWhkX3NvZnRjICogYWhkLCBsb25nIHBvcnQsCisJCQkgICAgICAgdWludDhfdCAqLCBpbnQgY291bnQpOworCit1aW50OF90CithaGRfaW5iKHN0cnVjdCBhaGRfc29mdGMgKiBhaGQsIGxvbmcgcG9ydCkKK3sKKwl1aW50OF90IHg7CisKKwlpZiAoYWhkLT50YWdzWzBdID09IEJVU19TUEFDRV9NRU1JTykgeworCQl4ID0gcmVhZGIoYWhkLT5ic2hzWzBdLm1hZGRyICsgcG9ydCk7CisJfSBlbHNlIHsKKwkJeCA9IGluYihhaGQtPmJzaHNbKHBvcnQpID4+IDhdLmlvcG9ydCArICgocG9ydCkgJiAweEZGKSk7CisJfQorCW1iKCk7CisJcmV0dXJuICh4KTsKK30KKworI2lmIDAgLyogdW51c2VkICovCitzdGF0aWMgdWludDE2X3QKK2FoZF9pbndfYXRvbWljKHN0cnVjdCBhaGRfc29mdGMgKiBhaGQsIGxvbmcgcG9ydCkKK3sKKwl1aW50OF90IHg7CisKKwlpZiAoYWhkLT50YWdzWzBdID09IEJVU19TUEFDRV9NRU1JTykgeworCQl4ID0gcmVhZHcoYWhkLT5ic2hzWzBdLm1hZGRyICsgcG9ydCk7CisJfSBlbHNlIHsKKwkJeCA9IGludyhhaGQtPmJzaHNbKHBvcnQpID4+IDhdLmlvcG9ydCArICgocG9ydCkgJiAweEZGKSk7CisJfQorCW1iKCk7CisJcmV0dXJuICh4KTsKK30KKyNlbmRpZgorCit2b2lkCithaGRfb3V0YihzdHJ1Y3QgYWhkX3NvZnRjICogYWhkLCBsb25nIHBvcnQsIHVpbnQ4X3QgdmFsKQoreworCWlmIChhaGQtPnRhZ3NbMF0gPT0gQlVTX1NQQUNFX01FTUlPKSB7CisJCXdyaXRlYih2YWwsIGFoZC0+YnNoc1swXS5tYWRkciArIHBvcnQpOworCX0gZWxzZSB7CisJCW91dGIodmFsLCBhaGQtPmJzaHNbKHBvcnQpID4+IDhdLmlvcG9ydCArIChwb3J0ICYgMHhGRikpOworCX0KKwltYigpOworfQorCit2b2lkCithaGRfb3V0d19hdG9taWMoc3RydWN0IGFoZF9zb2Z0YyAqIGFoZCwgbG9uZyBwb3J0LCB1aW50MTZfdCB2YWwpCit7CisJaWYgKGFoZC0+dGFnc1swXSA9PSBCVVNfU1BBQ0VfTUVNSU8pIHsKKwkJd3JpdGV3KHZhbCwgYWhkLT5ic2hzWzBdLm1hZGRyICsgcG9ydCk7CisJfSBlbHNlIHsKKwkJb3V0dyh2YWwsIGFoZC0+YnNoc1socG9ydCkgPj4gOF0uaW9wb3J0ICsgKHBvcnQgJiAweEZGKSk7CisJfQorCW1iKCk7Cit9CisKK3ZvaWQKK2FoZF9vdXRzYihzdHJ1Y3QgYWhkX3NvZnRjICogYWhkLCBsb25nIHBvcnQsIHVpbnQ4X3QgKmFycmF5LCBpbnQgY291bnQpCit7CisJaW50IGk7CisKKwkvKgorCSAqIFRoZXJlIGlzIHByb2JhYmx5IGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIGRvIHRoaXMgb24gTGludXgKKwkgKiBidXQgd2UgZG9uJ3QgdXNlIHRoaXMgZm9yIGFueXRoaW5nIHNwZWVkIGNyaXRpY2FsIGFuZCB0aGlzCisJICogc2hvdWxkIHdvcmsuCisJICovCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisJCWFoZF9vdXRiKGFoZCwgcG9ydCwgKmFycmF5KyspOworfQorCit2b2lkCithaGRfaW5zYihzdHJ1Y3QgYWhkX3NvZnRjICogYWhkLCBsb25nIHBvcnQsIHVpbnQ4X3QgKmFycmF5LCBpbnQgY291bnQpCit7CisJaW50IGk7CisKKwkvKgorCSAqIFRoZXJlIGlzIHByb2JhYmx5IGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIGRvIHRoaXMgb24gTGludXgKKwkgKiBidXQgd2UgZG9uJ3QgdXNlIHRoaXMgZm9yIGFueXRoaW5nIHNwZWVkIGNyaXRpY2FsIGFuZCB0aGlzCisJICogc2hvdWxkIHdvcmsuCisJICovCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisJCSphcnJheSsrID0gYWhkX2luYihhaGQsIHBvcnQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBQQ0kgUm91dGluZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordWludDMyX3QKK2FoZF9wY2lfcmVhZF9jb25maWcoYWhkX2Rldl9zb2Z0Y190IHBjaSwgaW50IHJlZywgaW50IHdpZHRoKQoreworCXN3aXRjaCAod2lkdGgpIHsKKwljYXNlIDE6CisJeworCQl1aW50OF90IHJldHZhbDsKKworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwY2ksIHJlZywgJnJldHZhbCk7CisJCXJldHVybiAocmV0dmFsKTsKKwl9CisJY2FzZSAyOgorCXsKKwkJdWludDE2X3QgcmV0dmFsOworCQlwY2lfcmVhZF9jb25maWdfd29yZChwY2ksIHJlZywgJnJldHZhbCk7CisJCXJldHVybiAocmV0dmFsKTsKKwl9CisJY2FzZSA0OgorCXsKKwkJdWludDMyX3QgcmV0dmFsOworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGNpLCByZWcsICZyZXR2YWwpOworCQlyZXR1cm4gKHJldHZhbCk7CisJfQorCWRlZmF1bHQ6CisJCXBhbmljKCJhaGRfcGNpX3JlYWRfY29uZmlnOiBSZWFkIHNpemUgdG9vIGJpZyIpOworCQkvKiBOT1RSRUFDSEVEICovCisJCXJldHVybiAoMCk7CisJfQorfQorCit2b2lkCithaGRfcGNpX3dyaXRlX2NvbmZpZyhhaGRfZGV2X3NvZnRjX3QgcGNpLCBpbnQgcmVnLCB1aW50MzJfdCB2YWx1ZSwgaW50IHdpZHRoKQoreworCXN3aXRjaCAod2lkdGgpIHsKKwljYXNlIDE6CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwY2ksIHJlZywgdmFsdWUpOworCQlicmVhazsKKwljYXNlIDI6CisJCXBjaV93cml0ZV9jb25maWdfd29yZChwY2ksIHJlZywgdmFsdWUpOworCQlicmVhazsKKwljYXNlIDQ6CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGNpLCByZWcsIHZhbHVlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcGFuaWMoImFoZF9wY2lfd3JpdGVfY29uZmlnOiBXcml0ZSBzaXplIHRvbyBiaWciKTsKKwkJLyogTk9UUkVBQ0hFRCAqLworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBJbmxpbmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGFoZF9saW51eF91bm1hcF9zY2Ioc3RydWN0IGFoZF9zb2Z0YyosIHN0cnVjdCBzY2IqKTsKKworc3RhdGljIHZvaWQKIGFoZF9saW51eF91bm1hcF9zY2Ioc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCBzdHJ1Y3Qgc2NiICpzY2IpCiB7CiAJc3RydWN0IHNjc2lfY21uZCAqY21kOwpAQCAtNDAwLDEzICs1NTcsMTEgQEAKIAlicCA9ICZidWZmZXJbMF07CiAJYWhkID0gKihzdHJ1Y3QgYWhkX3NvZnRjICoqKWhvc3QtPmhvc3RkYXRhOwogCW1lbXNldChicCwgMCwgc2l6ZW9mKGJ1ZmZlcikpOwotCXN0cmNweShicCwgIkFkYXB0ZWMgQUlDNzlYWCBQQ0ktWCBTQ1NJIEhCQSBEUklWRVIsIFJldiAiKTsKLQlzdHJjYXQoYnAsIEFJQzc5WFhfRFJJVkVSX1ZFUlNJT04pOwotCXN0cmNhdChicCwgIlxuIik7Ci0Jc3RyY2F0KGJwLCAiICAgICAgICA8Iik7CisJc3RyY3B5KGJwLCAiQWRhcHRlYyBBSUM3OVhYIFBDSS1YIFNDU0kgSEJBIERSSVZFUiwgUmV2ICIgQUlDNzlYWF9EUklWRVJfVkVSU0lPTiAiXG4iCisJCQkiICAgICAgICA8Iik7CiAJc3RyY2F0KGJwLCBhaGQtPmRlc2NyaXB0aW9uKTsKLQlzdHJjYXQoYnAsICI+XG4iKTsKLQlzdHJjYXQoYnAsICIgICAgICAgICIpOworCXN0cmNhdChicCwgIj5cbiIKKwkJCSIgICAgICAgICIpOwogCWFoZF9jb250cm9sbGVyX2luZm8oYWhkLCBhaGRfaW5mbyk7CiAJc3RyY2F0KGJwLCBhaGRfaW5mbyk7CiAKQEAgLTQzMiw3ICs1ODcsNyBAQAogCXJldHVybiBydG47CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNjc2lfdGFyZ2V0ICoqCitzdGF0aWMgc3RydWN0IHNjc2lfdGFyZ2V0ICoqCiBhaGRfbGludXhfdGFyZ2V0X2luX3NvZnRjKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKIHsKIAlzdHJ1Y3QJYWhkX3NvZnRjICphaGQgPQpAQCAtOTkxLDcgKzExNDYsNyBAQAogCWNoYXIgICAqcDsKIAljaGFyICAgKmVuZDsKIAotCXN0YXRpYyBzdHJ1Y3QgeworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCQljb25zdCBjaGFyICpuYW1lOwogCQl1aW50MzJfdCAqZmxhZzsKIAl9IG9wdGlvbnNbXSA9IHsKQEAgLTEyMjMsNyArMTM3OCw3IEBACiAJICogTG9va3VwIGFuZCBjb21taXQgYW55IG1vZGlmaWVkIElPIENlbGwgb3B0aW9ucy4KIAkgKi8KIAlpZiAoYWhkLT51bml0IDwgQVJSQVlfU0laRShhaWM3OXh4X2lvY2VsbF9pbmZvKSkgewotCQlzdHJ1Y3QgYWhkX2xpbnV4X2lvY2VsbF9vcHRzICppb2NlbGxfb3B0czsKKwkJY29uc3Qgc3RydWN0IGFoZF9saW51eF9pb2NlbGxfb3B0cyAqaW9jZWxsX29wdHM7CiAKIAkJaW9jZWxsX29wdHMgPSAmYWljNzl4eF9pb2NlbGxfaW5mb1thaGQtPnVuaXRdOwogCQlpZiAoaW9jZWxsX29wdHMtPnByZWNvbXAgIT0gQUlDNzlYWF9ERUZBVUxUX1BSRUNPTVApCkBAIC0yNjEzLDcgKzI3NjgsNyBAQAogCQl1aW50OF90IHByZWNvbXA7CiAKIAkJaWYgKGFoZC0+dW5pdCA8IEFSUkFZX1NJWkUoYWljNzl4eF9pb2NlbGxfaW5mbykpIHsKLQkJCXN0cnVjdCBhaGRfbGludXhfaW9jZWxsX29wdHMgKmlvY2VsbF9vcHRzOworCQkJY29uc3Qgc3RydWN0IGFoZF9saW51eF9pb2NlbGxfb3B0cyAqaW9jZWxsX29wdHM7CiAKIAkJCWlvY2VsbF9vcHRzID0gJmFpYzc5eHhfaW9jZWxsX2luZm9bYWhkLT51bml0XTsKIAkJCXByZWNvbXAgPSBpb2NlbGxfb3B0cy0+cHJlY29tcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmggYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5oCmluZGV4IDg1Mzk5OGIuLjhkNjYxMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmgKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uaApAQCAtMjIyLDIyICsyMjIsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFRpbWVyIEZhY2lsaXRpZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNkZWZpbmUgYWhkX3RpbWVyX2luaXQgaW5pdF90aW1lcgogI2RlZmluZSBhaGRfdGltZXJfc3RvcCBkZWxfdGltZXJfc3luYwotdHlwZWRlZiB2b2lkIGFoZF9saW51eF9jYWxsYmFja190ICh1X2xvbmcpOyAgCi1zdGF0aWMgX19pbmxpbmUgdm9pZCBhaGRfdGltZXJfcmVzZXQoYWhkX3RpbWVyX3QgKnRpbWVyLCBpbnQgdXNlYywKLQkJCQkgICAgIGFoZF9jYWxsYmFja190ICpmdW5jLCB2b2lkICphcmcpOwotCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotYWhkX3RpbWVyX3Jlc2V0KGFoZF90aW1lcl90ICp0aW1lciwgaW50IHVzZWMsIGFoZF9jYWxsYmFja190ICpmdW5jLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IGFoZF9zb2Z0YyAqYWhkOwotCi0JYWhkID0gKHN0cnVjdCBhaGRfc29mdGMgKilhcmc7Ci0JZGVsX3RpbWVyKHRpbWVyKTsKLQl0aW1lci0+ZGF0YSA9ICh1X2xvbmcpYXJnOwotCXRpbWVyLT5leHBpcmVzID0gamlmZmllcyArICh1c2VjICogSFopLzEwMDAwMDA7Ci0JdGltZXItPmZ1bmN0aW9uID0gKGFoZF9saW51eF9jYWxsYmFja190KilmdW5jOwotCWFkZF90aW1lcih0aW1lcik7Ci19CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBTTVAgc3VwcG9ydCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KQEAgLTM3Niw3ICszNjAsNyBAQAogI2RlZmluZSBBSERfTElOVVhfTk9JUlEJKCh1aW50MzJfdCl+MCkKIAl1aW50MzJfdAkJIGlycTsJCS8qIElSUSBmb3IgdGhpcyBhZGFwdGVyICovCiAJdWludDMyX3QJCSBiaW9zX2FkZHJlc3M7Ci0JdWludDMyX3QJCSBtZW1fYnVzYWRkcjsJLyogTWVtIEJhc2UgQWRkciAqLworCXJlc291cmNlX3NpemVfdAkJIG1lbV9idXNhZGRyOwkvKiBNZW0gQmFzZSBBZGRyICovCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKiogT1MgVXRpbGl0eSBXcmFwcGVycyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzg2LDExMSArMzcwLDE4IEBACiAjZGVmaW5lIG1hbGxvYyhzaXplLCB0eXBlLCBmbGFncykga21hbGxvYyhzaXplLCBmbGFncykKICNkZWZpbmUgZnJlZShwdHIsIHR5cGUpIGtmcmVlKHB0cikKIAotc3RhdGljIF9faW5saW5lIHZvaWQgYWhkX2RlbGF5KGxvbmcpOwotc3RhdGljIF9faW5saW5lIHZvaWQKLWFoZF9kZWxheShsb25nIHVzZWMpCi17Ci0JLyoKLQkgKiB1ZGVsYXkgb24gTGludXggY2FuIGhhdmUgcHJvYmxlbXMgZm9yCi0JICogbXVsdGktbWlsbGlzZWNvbmQgd2FpdHMuICBXYWl0IGF0IG1vc3QKLQkgKiAxMDI0dXMgcGVyIGNhbGwuCi0JICovCi0Jd2hpbGUgKHVzZWMgPiAwKSB7Ci0JCXVkZWxheSh1c2VjICUgMTAyNCk7Ci0JCXVzZWMgLT0gMTAyNDsKLQl9Ci19Ci0KK3ZvaWQgYWhkX2RlbGF5KGxvbmcpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogTG93IExldmVsIEkvTyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIF9faW5saW5lIHVpbnQ4X3QgYWhkX2luYihzdHJ1Y3QgYWhkX3NvZnRjICogYWhkLCBsb25nIHBvcnQpOwotc3RhdGljIF9faW5saW5lIHVpbnQxNl90IGFoZF9pbndfYXRvbWljKHN0cnVjdCBhaGRfc29mdGMgKiBhaGQsIGxvbmcgcG9ydCk7Ci1zdGF0aWMgX19pbmxpbmUgdm9pZCBhaGRfb3V0YihzdHJ1Y3QgYWhkX3NvZnRjICogYWhkLCBsb25nIHBvcnQsIHVpbnQ4X3QgdmFsKTsKLXN0YXRpYyBfX2lubGluZSB2b2lkIGFoZF9vdXR3X2F0b21pYyhzdHJ1Y3QgYWhkX3NvZnRjICogYWhkLAordWludDhfdCBhaGRfaW5iKHN0cnVjdCBhaGRfc29mdGMgKiBhaGQsIGxvbmcgcG9ydCk7Cit2b2lkIGFoZF9vdXRiKHN0cnVjdCBhaGRfc29mdGMgKiBhaGQsIGxvbmcgcG9ydCwgdWludDhfdCB2YWwpOwordm9pZCBhaGRfb3V0d19hdG9taWMoc3RydWN0IGFoZF9zb2Z0YyAqIGFoZCwKIAkJCQkgICAgIGxvbmcgcG9ydCwgdWludDE2X3QgdmFsKTsKLXN0YXRpYyBfX2lubGluZSB2b2lkIGFoZF9vdXRzYihzdHJ1Y3QgYWhkX3NvZnRjICogYWhkLCBsb25nIHBvcnQsCit2b2lkIGFoZF9vdXRzYihzdHJ1Y3QgYWhkX3NvZnRjICogYWhkLCBsb25nIHBvcnQsCiAJCQkgICAgICAgdWludDhfdCAqLCBpbnQgY291bnQpOwotc3RhdGljIF9faW5saW5lIHZvaWQgYWhkX2luc2Ioc3RydWN0IGFoZF9zb2Z0YyAqIGFoZCwgbG9uZyBwb3J0LAordm9pZCBhaGRfaW5zYihzdHJ1Y3QgYWhkX3NvZnRjICogYWhkLCBsb25nIHBvcnQsCiAJCQkgICAgICAgdWludDhfdCAqLCBpbnQgY291bnQpOwogCi1zdGF0aWMgX19pbmxpbmUgdWludDhfdAotYWhkX2luYihzdHJ1Y3QgYWhkX3NvZnRjICogYWhkLCBsb25nIHBvcnQpCi17Ci0JdWludDhfdCB4OwotCi0JaWYgKGFoZC0+dGFnc1swXSA9PSBCVVNfU1BBQ0VfTUVNSU8pIHsKLQkJeCA9IHJlYWRiKGFoZC0+YnNoc1swXS5tYWRkciArIHBvcnQpOwotCX0gZWxzZSB7Ci0JCXggPSBpbmIoYWhkLT5ic2hzWyhwb3J0KSA+PiA4XS5pb3BvcnQgKyAoKHBvcnQpICYgMHhGRikpOwotCX0KLQltYigpOwotCXJldHVybiAoeCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB1aW50MTZfdAotYWhkX2lud19hdG9taWMoc3RydWN0IGFoZF9zb2Z0YyAqIGFoZCwgbG9uZyBwb3J0KQotewotCXVpbnQ4X3QgeDsKLQotCWlmIChhaGQtPnRhZ3NbMF0gPT0gQlVTX1NQQUNFX01FTUlPKSB7Ci0JCXggPSByZWFkdyhhaGQtPmJzaHNbMF0ubWFkZHIgKyBwb3J0KTsKLQl9IGVsc2UgewotCQl4ID0gaW53KGFoZC0+YnNoc1socG9ydCkgPj4gOF0uaW9wb3J0ICsgKChwb3J0KSAmIDB4RkYpKTsKLQl9Ci0JbWIoKTsKLQlyZXR1cm4gKHgpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotYWhkX291dGIoc3RydWN0IGFoZF9zb2Z0YyAqIGFoZCwgbG9uZyBwb3J0LCB1aW50OF90IHZhbCkKLXsKLQlpZiAoYWhkLT50YWdzWzBdID09IEJVU19TUEFDRV9NRU1JTykgewotCQl3cml0ZWIodmFsLCBhaGQtPmJzaHNbMF0ubWFkZHIgKyBwb3J0KTsKLQl9IGVsc2UgewotCQlvdXRiKHZhbCwgYWhkLT5ic2hzWyhwb3J0KSA+PiA4XS5pb3BvcnQgKyAocG9ydCAmIDB4RkYpKTsKLQl9Ci0JbWIoKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHZvaWQKLWFoZF9vdXR3X2F0b21pYyhzdHJ1Y3QgYWhkX3NvZnRjICogYWhkLCBsb25nIHBvcnQsIHVpbnQxNl90IHZhbCkKLXsKLQlpZiAoYWhkLT50YWdzWzBdID09IEJVU19TUEFDRV9NRU1JTykgewotCQl3cml0ZXcodmFsLCBhaGQtPmJzaHNbMF0ubWFkZHIgKyBwb3J0KTsKLQl9IGVsc2UgewotCQlvdXR3KHZhbCwgYWhkLT5ic2hzWyhwb3J0KSA+PiA4XS5pb3BvcnQgKyAocG9ydCAmIDB4RkYpKTsKLQl9Ci0JbWIoKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHZvaWQKLWFoZF9vdXRzYihzdHJ1Y3QgYWhkX3NvZnRjICogYWhkLCBsb25nIHBvcnQsIHVpbnQ4X3QgKmFycmF5LCBpbnQgY291bnQpCi17Ci0JaW50IGk7Ci0KLQkvKgotCSAqIFRoZXJlIGlzIHByb2JhYmx5IGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIGRvIHRoaXMgb24gTGludXgKLQkgKiBidXQgd2UgZG9uJ3QgdXNlIHRoaXMgZm9yIGFueXRoaW5nIHNwZWVkIGNyaXRpY2FsIGFuZCB0aGlzCi0JICogc2hvdWxkIHdvcmsuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCi0JCWFoZF9vdXRiKGFoZCwgcG9ydCwgKmFycmF5KyspOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotYWhkX2luc2Ioc3RydWN0IGFoZF9zb2Z0YyAqIGFoZCwgbG9uZyBwb3J0LCB1aW50OF90ICphcnJheSwgaW50IGNvdW50KQotewotCWludCBpOwotCi0JLyoKLQkgKiBUaGVyZSBpcyBwcm9iYWJseSBhIG1vcmUgZWZmaWNpZW50IHdheSB0byBkbyB0aGlzIG9uIExpbnV4Ci0JICogYnV0IHdlIGRvbid0IHVzZSB0aGlzIGZvciBhbnl0aGluZyBzcGVlZCBjcml0aWNhbCBhbmQgdGhpcwotCSAqIHNob3VsZCB3b3JrLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotCQkqYXJyYXkrKyA9IGFoZF9pbmIoYWhkLCBwb3J0KTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiogSW5pdGlhbGl6YXRpb24gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGludAkJYWhkX2xpbnV4X3JlZ2lzdGVyX2hvc3Qoc3RydWN0IGFoZF9zb2Z0YyAqLAogCQkJCQlzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICopOwpAQCAtNTkzLDYyICs0ODQsMTIgQEAKIGludAkJCSBhaGRfcGNpX21hcF9yZWdpc3RlcnMoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKIGludAkJCSBhaGRfcGNpX21hcF9pbnQoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKIAotc3RhdGljIF9faW5saW5lIHVpbnQzMl90IGFoZF9wY2lfcmVhZF9jb25maWcoYWhkX2Rldl9zb2Z0Y190IHBjaSwKK3VpbnQzMl90CQkgYWhkX3BjaV9yZWFkX2NvbmZpZyhhaGRfZGV2X3NvZnRjX3QgcGNpLAogCQkJCQkgICAgIGludCByZWcsIGludCB3aWR0aCk7Ci0KLXN0YXRpYyBfX2lubGluZSB1aW50MzJfdAotYWhkX3BjaV9yZWFkX2NvbmZpZyhhaGRfZGV2X3NvZnRjX3QgcGNpLCBpbnQgcmVnLCBpbnQgd2lkdGgpCi17Ci0Jc3dpdGNoICh3aWR0aCkgewotCWNhc2UgMToKLQl7Ci0JCXVpbnQ4X3QgcmV0dmFsOwotCi0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaSwgcmVnLCAmcmV0dmFsKTsKLQkJcmV0dXJuIChyZXR2YWwpOwotCX0KLQljYXNlIDI6Ci0JewotCQl1aW50MTZfdCByZXR2YWw7Ci0JCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBjaSwgcmVnLCAmcmV0dmFsKTsKLQkJcmV0dXJuIChyZXR2YWwpOwotCX0KLQljYXNlIDQ6Ci0JewotCQl1aW50MzJfdCByZXR2YWw7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwY2ksIHJlZywgJnJldHZhbCk7Ci0JCXJldHVybiAocmV0dmFsKTsKLQl9Ci0JZGVmYXVsdDoKLQkJcGFuaWMoImFoZF9wY2lfcmVhZF9jb25maWc6IFJlYWQgc2l6ZSB0b28gYmlnIik7Ci0JCS8qIE5PVFJFQUNIRUQgKi8KLQkJcmV0dXJuICgwKTsKLQl9Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB2b2lkIGFoZF9wY2lfd3JpdGVfY29uZmlnKGFoZF9kZXZfc29mdGNfdCBwY2ksCit2b2lkCQkJIGFoZF9wY2lfd3JpdGVfY29uZmlnKGFoZF9kZXZfc29mdGNfdCBwY2ksCiAJCQkJCSAgaW50IHJlZywgdWludDMyX3QgdmFsdWUsCiAJCQkJCSAgaW50IHdpZHRoKTsKIAotc3RhdGljIF9faW5saW5lIHZvaWQKLWFoZF9wY2lfd3JpdGVfY29uZmlnKGFoZF9kZXZfc29mdGNfdCBwY2ksIGludCByZWcsIHVpbnQzMl90IHZhbHVlLCBpbnQgd2lkdGgpCi17Ci0Jc3dpdGNoICh3aWR0aCkgewotCWNhc2UgMToKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBjaSwgcmVnLCB2YWx1ZSk7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBjaSwgcmVnLCB2YWx1ZSk7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwY2ksIHJlZywgdmFsdWUpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwYW5pYygiYWhkX3BjaV93cml0ZV9jb25maWc6IFdyaXRlIHNpemUgdG9vIGJpZyIpOwotCQkvKiBOT1RSRUFDSEVEICovCi0JfQotfQotCiBzdGF0aWMgX19pbmxpbmUgaW50IGFoZF9nZXRfcGNpX2Z1bmN0aW9uKGFoZF9kZXZfc29mdGNfdCk7CiBzdGF0aWMgX19pbmxpbmUgaW50CiBhaGRfZ2V0X3BjaV9mdW5jdGlvbihhaGRfZGV2X3NvZnRjX3QgcGNpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc21fcGNpLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbV9wY2kuYwppbmRleCBkZmFhYWU1Li42NTkzMDU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbV9wY2kuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbV9wY2kuYwpAQCAtNDksNyArNDksNyBAQAogCUlEMkMoeCksICAgICAgICAgXAogCUlEMkMoSURJUk9DKHgpKQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWhkX2xpbnV4X3BjaV9pZF90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFoZF9saW51eF9wY2lfaWRfdGFibGVbXSA9IHsKIAkvKiBhaWM3OTAxIGJhc2VkIGNvbnRyb2xsZXJzICovCiAJSUQoSURfQUhBXzI5MzIwQSksCiAJSUQoSURfQUhBXzI5MzIwQUxQKSwKQEAgLTE1OSw3ICsxNTksNyBAQAogCWNoYXIJCSBidWZbODBdOwogCXN0cnVjdAkJIGFoZF9zb2Z0YyAqYWhkOwogCWFoZF9kZXZfc29mdGNfdAkgcGNpOwotCXN0cnVjdAkJIGFoZF9wY2lfaWRlbnRpdHkgKmVudHJ5OworCWNvbnN0IHN0cnVjdCBhaGRfcGNpX2lkZW50aXR5ICplbnRyeTsKIAljaGFyCQkqbmFtZTsKIAlpbnQJCSBlcnJvcjsKIAlzdHJ1Y3QgZGV2aWNlCSpkZXYgPSAmcGRldi0+ZGV2OwpAQCAtMjQ5LDggKzI0OSw4IEBACiB9CiAKIHN0YXRpYyBpbnQKLWFoZF9saW51eF9wY2lfcmVzZXJ2ZV9pb19yZWdpb25zKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9sb25nICpiYXNlLAotCQkJCSB1X2xvbmcgKmJhc2UyKQorYWhkX2xpbnV4X3BjaV9yZXNlcnZlX2lvX3JlZ2lvbnMoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCByZXNvdXJjZV9zaXplX3QgKmJhc2UsCisJCQkJIHJlc291cmNlX3NpemVfdCAqYmFzZTIpCiB7CiAJKmJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoYWhkLT5kZXZfc29mdGMsIDApOwogCS8qCkBAIC0yNzIsMTEgKzI3MiwxMSBAQAogCiBzdGF0aWMgaW50CiBhaGRfbGludXhfcGNpX3Jlc2VydmVfbWVtX3JlZ2lvbihzdHJ1Y3QgYWhkX3NvZnRjICphaGQsCi0JCQkJIHVfbG9uZyAqYnVzX2FkZHIsCisJCQkJIHJlc291cmNlX3NpemVfdCAqYnVzX2FkZHIsCiAJCQkJIHVpbnQ4X3QgX19pb21lbSAqKm1hZGRyKQogewotCXVfbG9uZwlzdGFydDsKLQl1X2xvbmcJYmFzZV9wYWdlOworCXJlc291cmNlX3NpemVfdAlzdGFydDsKKwlyZXNvdXJjZV9zaXplX3QJYmFzZV9wYWdlOwogCXVfbG9uZwliYXNlX29mZnNldDsKIAlpbnQJZXJyb3IgPSAwOwogCkBAIC0zMTAsNyArMzEwLDcgQEAKIGFoZF9wY2lfbWFwX3JlZ2lzdGVycyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQpCiB7CiAJdWludDMyX3QgY29tbWFuZDsKLQl1X2xvbmcJIGJhc2U7CisJcmVzb3VyY2Vfc2l6ZV90IGJhc2U7CiAJdWludDhfdAlfX2lvbWVtICptYWRkcjsKIAlpbnQJIGVycm9yOwogCkBAIC0zNDYsMzEgKzM0NiwzMiBAQAogCQl9IGVsc2UKIAkJCWNvbW1hbmQgfD0gUENJTV9DTURfTUVNRU47CiAJfSBlbHNlIGlmIChib290dmVyYm9zZSkgewotCQlwcmludGYoImFpYzc5eHg6IFBDSSVkOiVkOiVkIE1FTSByZWdpb24gMHglbHggIgorCQlwcmludGYoImFpYzc5eHg6IFBDSSVkOiVkOiVkIE1FTSByZWdpb24gMHglbGx4ICIKIAkJICAgICAgICJ1bmF2YWlsYWJsZS4gQ2Fubm90IG1lbW9yeSBtYXAgZGV2aWNlLlxuIiwKIAkJICAgICAgIGFoZF9nZXRfcGNpX2J1cyhhaGQtPmRldl9zb2Z0YyksCiAJCSAgICAgICBhaGRfZ2V0X3BjaV9zbG90KGFoZC0+ZGV2X3NvZnRjKSwKIAkJICAgICAgIGFoZF9nZXRfcGNpX2Z1bmN0aW9uKGFoZC0+ZGV2X3NvZnRjKSwKLQkJICAgICAgIGJhc2UpOworCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliYXNlKTsKIAl9CiAKIAlpZiAobWFkZHIgPT0gTlVMTCkgewotCQl1X2xvbmcJIGJhc2UyOworCQlyZXNvdXJjZV9zaXplX3QgYmFzZTI7CiAKIAkJZXJyb3IgPSBhaGRfbGludXhfcGNpX3Jlc2VydmVfaW9fcmVnaW9ucyhhaGQsICZiYXNlLCAmYmFzZTIpOwogCQlpZiAoZXJyb3IgPT0gMCkgewogCQkJYWhkLT50YWdzWzBdID0gQlVTX1NQQUNFX1BJTzsKIAkJCWFoZC0+dGFnc1sxXSA9IEJVU19TUEFDRV9QSU87Ci0JCQlhaGQtPmJzaHNbMF0uaW9wb3J0ID0gYmFzZTsKLQkJCWFoZC0+YnNoc1sxXS5pb3BvcnQgPSBiYXNlMjsKKwkJCWFoZC0+YnNoc1swXS5pb3BvcnQgPSAodV9sb25nKWJhc2U7CisJCQlhaGQtPmJzaHNbMV0uaW9wb3J0ID0gKHVfbG9uZyliYXNlMjsKIAkJCWNvbW1hbmQgfD0gUENJTV9DTURfUE9SVEVOOwogCQl9IGVsc2UgewotCQkJcHJpbnRmKCJhaWM3OXh4OiBQQ0klZDolZDolZCBJTyByZWdpb25zIDB4JWx4IGFuZCAweCVseCIKLQkJCSAgICAgICAidW5hdmFpbGFibGUuIENhbm5vdCBtYXAgZGV2aWNlLlxuIiwKKwkJCXByaW50ZigiYWljNzl4eDogUENJJWQ6JWQ6JWQgSU8gcmVnaW9ucyAweCVsbHggYW5kICIKKwkJCSAgICAgICAiMHglbGx4IHVuYXZhaWxhYmxlLiBDYW5ub3QgbWFwIGRldmljZS5cbiIsCiAJCQkgICAgICAgYWhkX2dldF9wY2lfYnVzKGFoZC0+ZGV2X3NvZnRjKSwKIAkJCSAgICAgICBhaGRfZ2V0X3BjaV9zbG90KGFoZC0+ZGV2X3NvZnRjKSwKIAkJCSAgICAgICBhaGRfZ2V0X3BjaV9mdW5jdGlvbihhaGQtPmRldl9zb2Z0YyksCi0JCQkgICAgICAgYmFzZSwgYmFzZTIpOworCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmFzZSwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJhc2UyKTsKIAkJfQogCX0KIAlhaGRfcGNpX3dyaXRlX2NvbmZpZyhhaGQtPmRldl9zb2Z0YywgUENJUl9DT01NQU5ELCBjb21tYW5kLCA0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfcGNpLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X3BjaS5jCmluZGV4IGM5Zjc5ZmQuLmMyNWI2YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfcGNpLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9wY2kuYwpAQCAtOTcsNyArOTcsNyBAQAogc3RhdGljIGFoZF9kZXZpY2Vfc2V0dXBfdCBhaGRfYWljNzkwMl9zZXR1cDsKIHN0YXRpYyBhaGRfZGV2aWNlX3NldHVwX3QgYWhkX2FpYzc5MFhfc2V0dXA7CiAKLXN0YXRpYyBzdHJ1Y3QgYWhkX3BjaV9pZGVudGl0eSBhaGRfcGNpX2lkZW50X3RhYmxlIFtdID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWhkX3BjaV9pZGVudGl0eSBhaGRfcGNpX2lkZW50X3RhYmxlW10gPQogewogCS8qIGFpYzc5MDEgYmFzZWQgY29udHJvbGxlcnMgKi8KIAl7CkBAIC0yNTMsNyArMjUzLDcgQEAKIHN0YXRpYyB2b2lkCWFoZF9wY2lfc3BsaXRfaW50cihzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIHVfaW50IGludHN0YXQpOwogc3RhdGljIHZvaWQJYWhkX3BjaV9pbnRyKHN0cnVjdCBhaGRfc29mdGMgKmFoZCk7CiAKLXN0cnVjdCBhaGRfcGNpX2lkZW50aXR5ICoKK2NvbnN0IHN0cnVjdCBhaGRfcGNpX2lkZW50aXR5ICoKIGFoZF9maW5kX3BjaV9kZXZpY2UoYWhkX2Rldl9zb2Z0Y190IHBjaSkKIHsKIAl1aW50NjRfdCAgZnVsbF9pZDsKQEAgLTI2MSw3ICsyNjEsNyBAQAogCXVpbnQxNl90ICB2ZW5kb3I7CiAJdWludDE2X3QgIHN1YmRldmljZTsKIAl1aW50MTZfdCAgc3VidmVuZG9yOwotCXN0cnVjdAkgIGFoZF9wY2lfaWRlbnRpdHkgKmVudHJ5OworCWNvbnN0IHN0cnVjdCBhaGRfcGNpX2lkZW50aXR5ICplbnRyeTsKIAl1X2ludAkgIGk7CiAKIAl2ZW5kb3IgPSBhaGRfcGNpX3JlYWRfY29uZmlnKHBjaSwgUENJUl9ERVZWRU5ET1IsIC8qYnl0ZXMqLzIpOwpAQCAtMjkyLDcgKzI5Miw3IEBACiB9CiAKIGludAotYWhkX3BjaV9jb25maWcoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCBzdHJ1Y3QgYWhkX3BjaV9pZGVudGl0eSAqZW50cnkpCithaGRfcGNpX2NvbmZpZyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIGNvbnN0IHN0cnVjdCBhaGRfcGNpX2lkZW50aXR5ICplbnRyeSkKIHsKIAlzdHJ1Y3Qgc2NiX2RhdGEgKnNoYXJlZF9zY2JfZGF0YTsKIAl1X2ludAkJIGNvbW1hbmQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X3Byb2MuYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfcHJvYy5jCmluZGV4IDZiMjhiZWIuLjAxNGJlZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfcHJvYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfcHJvYy5jCkBAIC01Nyw3ICs1Nyw3IEBACiAgKiBUYWJsZSBvZiBzeW5jcmF0ZXMgdGhhdCBkb24ndCBmb2xsb3cgdGhlICJkaXZpc2libGUgYnkgNCIKICAqIHJ1bGUuIFRoaXMgdGFibGUgd2lsbCBiZSBleHBhbmRlZCBpbiBmdXR1cmUgU0NTSSBzcGVjcy4KICAqLwotc3RhdGljIHN0cnVjdCB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAl1X2ludCBwZXJpb2RfZmFjdG9yOwogCXVfaW50IHBlcmlvZDsJLyogaW4gMTAwdGhzIG9mIG5zICovCiB9IHNjc2lfc3luY3JhdGVzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X3JlZy5oX3NoaXBwZWQgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X3JlZy5oX3NoaXBwZWQKaW5kZXggMjA2OGUwMC4uYzIxY2VhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9yZWcuaF9zaGlwcGVkCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfcmVnLmhfc2hpcHBlZApAQCAtNDgsMTMgKzQ4LDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9jbHJlcnJfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfY2xyZXJyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDTFJFUlIiLCAweDA0LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9oY250cmxfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfaGNudHJsX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC0xNjcsMTMgKzE2MCw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfYXJiY3RsX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2FyYmN0bF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQVJCQ1RMIiwgMHgxYiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfc2dfY2FjaGVfcHJlX3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhkX3NnX2NhY2hlX3ByZV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtMTg4LDIwICsxNzQsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX3R5cGVwdHJfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfdHlwZXB0cl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiVFlQRVBUUiIsIDB4MjAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX3RhZ3B0cl9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF90YWdwdHJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlRBR1BUUiIsIDB4MjEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX2x1bnB0cl9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9sdW5wdHJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTIwOSwyMCArMTgxLDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9kYXRhbGVucHRyX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2RhdGFsZW5wdHJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkRBVEFMRU5QVFIiLCAweDIzLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zdGF0bGVucHRyX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX3N0YXRsZW5wdHJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNUQVRMRU5QVFIiLCAweDI0LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9jbWRsZW5wdHJfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfY21kbGVucHRyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC0yNTgsMTMgKzIxNiw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfaWRwdHJfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfaWRwdHJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIklEUFRSIiwgMHgyYSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfYWJydGJ5dGVwdHJfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfYWJydGJ5dGVwdHJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTI3OSwyNyArMjMwLDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9tYXhjbWRieXRlc19wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9tYXhjbWRieXRlc19wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiTUFYQ01EQllURVMiLCAweDJkLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9tYXhjbWQycmN2X3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX21heGNtZDJyY3ZfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIk1BWENNRDJSQ1YiLCAweDJlLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zaG9ydHRocmVzaF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9zaG9ydHRocmVzaF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0hPUlRUSFJFU0giLCAweDJmLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9sdW5sZW5fcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfbHVubGVuX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC0zMjgsNDEgKzI1OCw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfbHFyc3ZkMDFfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfbHFyc3ZkMDFfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkxRUlNWRDAxIiwgMHgzNCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfbHFyc3ZkMTZfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfbHFyc3ZkMTZfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkxRUlNWRDE2IiwgMHgzNSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfbHFyc3ZkMTdfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfbHFyc3ZkMTdfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkxRUlNWRDE3IiwgMHgzNiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfY21kcnN2ZDBfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfY21kcnN2ZDBfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkNNRFJTVkQwIiwgMHgzNywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfbHFjdGwwX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2xxY3RsMF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiTFFDVEwwIiwgMHgzOCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfbHFjdGwxX3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhkX2xxY3RsMV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtMzcwLDEzICsyNjUsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX3Njc2Jpc3QwX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX3Njc2Jpc3QwX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ1NCSVNUMCIsIDB4MzksIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX2xxY3RsMl9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9scWN0bDJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTM4NCwxMyArMjcyLDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zY3NiaXN0MV9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9zY3NiaXN0MV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NTQklTVDEiLCAweDNhLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9zY3Npc2VxMF9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9zY3Npc2VxMF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtNDEyLDIwICsyOTMsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX2RsY291bnRfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfZGxjb3VudF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiRExDT1VOVCIsIDB4M2MsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX2J1c2luaXRpZF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9idXNpbml0aWRfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkJVU0lOSVRJRCIsIDB4M2MsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX3N4ZnJjdGwxX3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhkX3N4ZnJjdGwxX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC00MzMsMjAgKzMwMCw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfYnVzdGFyZ2lkX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2J1c3RhcmdpZF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQlVTVEFSR0lEIiwgMHgzZSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfc3hmcmN0bDJfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfc3hmcmN0bDJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNYRlJDVEwyIiwgMHgzZSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfZGZmc3RhdF9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9kZmZzdGF0X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC00NTQsMTMgKzMwNyw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfc2NzaXNpZ29fcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfc2NzaXNpZ29fcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDU0lTSUdPIiwgMHg0MCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfbXVsdGFyZ2lkX3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhkX211bHRhcmdpZF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtNDY4LDYgKzMxNCwxMyBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCithaGRfcmVnX3ByaW50X3QgYWhkX3Njc2lzaWdvX3ByaW50OworI2Vsc2UKKyNkZWZpbmUgYWhkX3Njc2lzaWdvX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCisgICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ1NJU0lHTyIsIDB4NDAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQorI2VuZGlmCisKKyNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX3Njc2lzaWdpX3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhkX3Njc2lzaWdpX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC00ODIsMTMgKzMzNSw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfc2NzaWRhdDBfaW1nX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX3Njc2lkYXQwX2ltZ19wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NTSURBVDBfSU1HIiwgMHg0MywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfc2NzaWRhdF9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9zY3NpZGF0X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC01MzEsMTMgKzM3Nyw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfY2xyc2ludDBfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfY2xyc2ludDBfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkNMUlNJTlQwIiwgMHg0YiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfc3N0YXQwX3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhkX3NzdGF0MF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtNTUyLDEwICszOTEsMTAgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9jbHJzaW50MV9wcmludDsKK2FoZF9yZWdfcHJpbnRfdCBhaGRfY2xyc2ludDBfcHJpbnQ7CiAjZWxzZQotI2RlZmluZSBhaGRfY2xyc2ludDFfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkNMUlNJTlQxIiwgMHg0YywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCisjZGVmaW5lIGFoZF9jbHJzaW50MF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAorICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ0xSU0lOVDAiLCAweDRiLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwpAQCAtNTY2LDYgKzQwNSwxMyBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCithaGRfcmVnX3ByaW50X3QgYWhkX2NscnNpbnQxX3ByaW50OworI2Vsc2UKKyNkZWZpbmUgYWhkX2NscnNpbnQxX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCisgICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDTFJTSU5UMSIsIDB4NGMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQorI2VuZGlmCisKKyNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX3NzdGF0Ml9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9zc3RhdDJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTU3MywxMyArNDE5LDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zaW1vZGUyX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX3NpbW9kZTJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNJTU9ERTIiLCAweDRkLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9jbHJzaW50Ml9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9jbHJzaW50Ml9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtNjIyLDEzICs0NjEsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX2NscmxxaWludDBfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfY2xybHFpaW50MF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ0xSTFFJSU5UMCIsIDB4NTAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX2xxaW1vZGUwX3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhkX2xxaW1vZGUwX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC02MzYsNiArNDY4LDEzIEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKK2FoZF9yZWdfcHJpbnRfdCBhaGRfY2xybHFpaW50MF9wcmludDsKKyNlbHNlCisjZGVmaW5lIGFoZF9jbHJscWlpbnQwX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCisgICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDTFJMUUlJTlQwIiwgMHg1MCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCisjZW5kaWYKKworI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfbHFpbW9kZTFfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfbHFpbW9kZTFfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTc5MCwxMyArNjI5LDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9jdXJyc2NiX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2N1cnJzY2JfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkNVUlJTQ0IiLCAweDVjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9zZXFpbW9kZV9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9zZXFpbW9kZV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtODA0LDYgKzYzNiwxMyBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCithaGRfcmVnX3ByaW50X3QgYWhkX2N1cnJzY2JfcHJpbnQ7CisjZWxzZQorI2RlZmluZSBhaGRfY3VycnNjYl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAorICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ1VSUlNDQiIsIDB4NWMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQorI2VuZGlmCisKKyNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX21kZmZzdGF0X3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhkX21kZmZzdGF0X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC04MTEsMjAgKzY1MCw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfY3JjY29udHJvbF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9jcmNjb250cm9sX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDUkNDT05UUk9MIiwgMHg1ZCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfZGZmdGFnX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2RmZnRhZ19wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiREZGVEFHIiwgMHg1ZSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfbGFzdHNjYl9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9sYXN0c2NiX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC04MzIsMjAgKzY1Nyw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfc2NzaXRlc3RfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfc2NzaXRlc3RfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDU0lURVNUIiwgMHg1ZSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfaW9wZG5jdGxfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfaW9wZG5jdGxfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIklPUEROQ1RMIiwgMHg1ZiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfc2hhZGRyX3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhkX3NoYWRkcl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtODYwLDEzICs2NzEsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX2RncnBjcmNpX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2RncnBjcmNpX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJER1JQQ1JDSSIsIDB4NjAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX25lZ3BlcmlvZF9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9uZWdwZXJpb2RfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTg3NCwxMyArNjc4LDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9wYWNrY3JjaV9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9wYWNrY3JjaV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiUEFDS0NSQ0kiLCAweDYyLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9uZWdvZmZzZXRfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfbmVnb2Zmc2V0X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC05MzAsMTMgKzcyNyw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfcGxsOTYwY3RsMF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9wbGw5NjBjdGwwX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJQTEw5NjBDVEwwIiwgMHg2OCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfc2hjbnRfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfc2hjbnRfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTk1MSwyNyArNzQxLDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9wbGw5NjBjdGwxX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX3BsbDk2MGN0bDFfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlBMTDk2MENUTDEiLCAweDY5LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9wbGw5NjBjbnQwX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX3BsbDk2MGNudDBfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlBMTDk2MENOVDAiLCAweDZhLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF94c2lnX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX3hzaWdfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlhTSUciLCAweDZhLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9zZWxvaWRfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfc2Vsb2lkX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC05NzksNDEgKzc0OCw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfcGxsNDAwY3RsMF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9wbGw0MDBjdGwwX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJQTEw0MDBDVEwwIiwgMHg2YywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfZmFpcm5lc3NfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfZmFpcm5lc3NfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkZBSVJORVNTIiwgMHg2YywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfcGxsNDAwY3RsMV9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9wbGw0MDBjdGwxX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJQTEw0MDBDVEwxIiwgMHg2ZCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfdW5mYWlybmVzc19wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF91bmZhaXJuZXNzX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJVTkZBSVJORVNTIiwgMHg2ZSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfcGxsNDAwY250MF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9wbGw0MDBjbnQwX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJQTEw0MDBDTlQwIiwgMHg2ZSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfaGFkZHJfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfaGFkZHJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTEwMjEsMjcgKzc1NSw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfcGxsZGVsYXlfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfcGxsZGVsYXlfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlBMTERFTEFZIiwgMHg3MCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfaG9kbWFhZHJfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfaG9kbWFhZHJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkhPRE1BQURSIiwgMHg3MCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfaG9kbWFjbnRfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfaG9kbWFjbnRfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkhPRE1BQ05UIiwgMHg3OCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfaGNudF9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9oY250X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC0xMDQ5LDIwICs3NjIsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX2hvZG1hZW5fcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfaG9kbWFlbl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiSE9ETUFFTiIsIDB4N2EsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX3NjYmhhZGRyX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX3NjYmhhZGRyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JIQUREUiIsIDB4N2MsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX3NnaGFkZHJfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfc2doYWRkcl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtMTA3MCwxMCArNzY5LDEwIEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfc2NiaGNudF9wcmludDsKK2FoZF9yZWdfcHJpbnRfdCBhaGRfc2NiaGFkZHJfcHJpbnQ7CiAjZWxzZQotI2RlZmluZSBhaGRfc2NiaGNudF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCSENOVCIsIDB4ODQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQorI2RlZmluZSBhaGRfc2NiaGFkZHJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKKyAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDQkhBRERSIiwgMHg3YywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKQEAgLTEwODQsNiArNzgzLDEzIEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKK2FoZF9yZWdfcHJpbnRfdCBhaGRfc2NiaGNudF9wcmludDsKKyNlbHNlCisjZGVmaW5lIGFoZF9zY2JoY250X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCisgICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JIQ05UIiwgMHg4NCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCisjZW5kaWYKKworI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfZGZmX3RocnNoX3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhkX2RmZl90aHJzaF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtMTA5MSwxMzIgKzc5Nyw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfcm9tYWRkcl9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9yb21hZGRyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJST01BRERSIiwgMHg4YSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfcm9tY250cmxfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfcm9tY250cmxfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlJPTUNOVFJMIiwgMHg4ZCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfcm9tZGF0YV9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9yb21kYXRhX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJST01EQVRBIiwgMHg4ZSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfY21jcnhtc2cwX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2NtY3J4bXNnMF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ01DUlhNU0cwIiwgMHg5MCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfcm9lbmFibGVfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfcm9lbmFibGVfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlJPRU5BQkxFIiwgMHg5MCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfb3ZseXJ4bXNnMF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9vdmx5cnhtc2cwX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJPVkxZUlhNU0cwIiwgMHg5MCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfZGNocnhtc2cwX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2RjaHJ4bXNnMF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiRENIUlhNU0cwIiwgMHg5MCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfb3ZseXJ4bXNnMV9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9vdmx5cnhtc2cxX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJPVkxZUlhNU0cxIiwgMHg5MSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfbnNlbmFibGVfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfbnNlbmFibGVfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIk5TRU5BQkxFIiwgMHg5MSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfY21jcnhtc2cxX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2NtY3J4bXNnMV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ01DUlhNU0cxIiwgMHg5MSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfZGNocnhtc2cxX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2RjaHJ4bXNnMV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiRENIUlhNU0cxIiwgMHg5MSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfZGNocnhtc2cyX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2RjaHJ4bXNnMl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiRENIUlhNU0cyIiwgMHg5MiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfY21jcnhtc2cyX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2NtY3J4bXNnMl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ01DUlhNU0cyIiwgMHg5MiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfb3N0X3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX29zdF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiT1NUIiwgMHg5MiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfb3ZseXJ4bXNnMl9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9vdmx5cnhtc2cyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJPVkxZUlhNU0cyIiwgMHg5MiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfZGNocnhtc2czX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2RjaHJ4bXNnM19wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiRENIUlhNU0czIiwgMHg5MywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfb3ZseXJ4bXNnM19wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9vdmx5cnhtc2czX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJPVkxZUlhNU0czIiwgMHg5MywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfY21jcnhtc2czX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2NtY3J4bXNnM19wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ01DUlhNU0czIiwgMHg5MywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfcGNpeGN0bF9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9wY2l4Y3RsX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC0xMjI0LDM0ICs4MDQsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX292bHlzZXFiY250X3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX292bHlzZXFiY250X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJPVkxZU0VRQkNOVCIsIDB4OTQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX2RjaHNlcWJjbnRfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfZGNoc2VxYmNudF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiRENIU0VRQkNOVCIsIDB4OTQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX2NtY3NlcWJjbnRfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfY21jc2VxYmNudF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ01DU0VRQkNOVCIsIDB4OTQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX2NtY3NwbHRzdGF0MF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9jbWNzcGx0c3RhdDBfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkNNQ1NQTFRTVEFUMCIsIDB4OTYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX2RjaHNwbHRzdGF0MF9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9kY2hzcGx0c3RhdDBfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTEyNTksMjcgKzgxMSw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfb3ZseXNwbHRzdGF0MF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9vdmx5c3BsdHN0YXQwX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJPVkxZU1BMVFNUQVQwIiwgMHg5NiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfY21jc3BsdHN0YXQxX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2NtY3NwbHRzdGF0MV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ01DU1BMVFNUQVQxIiwgMHg5NywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfb3ZseXNwbHRzdGF0MV9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9vdmx5c3BsdHN0YXQxX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJPVkxZU1BMVFNUQVQxIiwgMHg5NywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfZGNoc3BsdHN0YXQxX3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhkX2RjaHNwbHRzdGF0MV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtMTI4Nyw5MCArODE4LDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zZ3J4bXNnMF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9zZ3J4bXNnMF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0dSWE1TRzAiLCAweDk4LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zbHZzcGx0b3V0YWRyMF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9zbHZzcGx0b3V0YWRyMF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0xWU1BMVE9VVEFEUjAiLCAweDk4LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zZ3J4bXNnMV9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9zZ3J4bXNnMV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0dSWE1TRzEiLCAweDk5LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zbHZzcGx0b3V0YWRyMV9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9zbHZzcGx0b3V0YWRyMV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0xWU1BMVE9VVEFEUjEiLCAweDk5LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zZ3J4bXNnMl9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9zZ3J4bXNnMl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0dSWE1TRzIiLCAweDlhLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zbHZzcGx0b3V0YWRyMl9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9zbHZzcGx0b3V0YWRyMl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0xWU1BMVE9VVEFEUjIiLCAweDlhLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zZ3J4bXNnM19wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9zZ3J4bXNnM19wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0dSWE1TRzMiLCAweDliLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zbHZzcGx0b3V0YWRyM19wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9zbHZzcGx0b3V0YWRyM19wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0xWU1BMVE9VVEFEUjMiLCAweDliLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zZ3NlcWJjbnRfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfc2dzZXFiY250X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTR1NFUUJDTlQiLCAweDljLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zbHZzcGx0b3V0YXR0cjBfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfc2x2c3BsdG91dGF0dHIwX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTTFZTUExUT1VUQVRUUjAiLCAweDljLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zbHZzcGx0b3V0YXR0cjFfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfc2x2c3BsdG91dGF0dHIxX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTTFZTUExUT1VUQVRUUjEiLCAweDlkLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zbHZzcGx0b3V0YXR0cjJfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfc2x2c3BsdG91dGF0dHIyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTTFZTUExUT1VUQVRUUjIiLCAweDllLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9zZ3NwbHRzdGF0MF9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9zZ3NwbHRzdGF0MF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtMTM4NSwxMyArODMyLDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zZnVuY3RfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfc2Z1bmN0X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTRlVOQ1QiLCAweDlmLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9kZjBwY2lzdGF0X3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhkX2RmMHBjaXN0YXRfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTE0MDYsNDEgKzg0Niw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfZGYxcGNpc3RhdF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9kZjFwY2lzdGF0X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJERjFQQ0lTVEFUIiwgMHhhMSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfc2dwY2lzdGF0X3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX3NncGNpc3RhdF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0dQQ0lTVEFUIiwgMHhhMiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfcmVnMV9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9yZWcxX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJSRUcxIiwgMHhhMiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfY21jcGNpc3RhdF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9jbWNwY2lzdGF0X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDTUNQQ0lTVEFUIiwgMHhhMywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfb3ZseXBjaXN0YXRfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfb3ZseXBjaXN0YXRfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIk9WTFlQQ0lTVEFUIiwgMHhhNCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfcmVnX2lzcl9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9yZWdfaXNyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC0xNDU1LDEzICs4NjAsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX21zaXBjaXN0YXRfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfbXNpcGNpc3RhdF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiTVNJUENJU1RBVCIsIDB4YTYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX3RhcmdwY2lzdGF0X3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhkX3RhcmdwY2lzdGF0X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC0xNDY5LDEzICs4NjcsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX2RhdGFfY291bnRfb2RkX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2RhdGFfY291bnRfb2RkX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJEQVRBX0NPVU5UX09ERCIsIDB4YTcsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX3NjYnB0cl9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9zY2JwdHJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTE0ODMsMTMgKzg3NCw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfY2NzY2JhY250X3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2Njc2NiYWNudF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ0NTQ0JBQ05UIiwgMHhhYiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfc2NiYXV0b3B0cl9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9zY2JhdXRvcHRyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC0xNTA0LDEzICs4ODgsNiBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX2Njc2NiYWRyX2JrX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2Njc2NiYWRyX2JrX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDQ1NDQkFEUl9CSyIsIDB4YWMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX2Njc2NiYWRkcl9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9jY3NjYmFkZHJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTE1MTgsMTMgKzg5NSw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfY21jX3JhbWJpc3RfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfY21jX3JhbWJpc3RfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkNNQ19SQU1CSVNUIiwgMHhhZCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfY2NzY2JjdGxfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfY2NzY2JjdGxfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTE1NDYsMTMgKzkxNiw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfZmxleGFkcl9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9mbGV4YWRyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJGTEVYQURSIiwgMHhiMCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfY2NzY2JyYW1fcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfY2NzY2JyYW1fcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTE1NjAsMjcgKzkyMyw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfZmxleGNudF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9mbGV4Y250X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJGTEVYQ05UIiwgMHhiMywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfZmxleGRtYXN0YXRfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfZmxleGRtYXN0YXRfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkZMRVhETUFTVEFUIiwgMHhiNSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfZmxleGRhdGFfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfZmxleGRhdGFfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkZMRVhEQVRBIiwgMHhiNiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfYnJkZGF0X3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhkX2JyZGRhdF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtMTYyMywyNyArOTY1LDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zY2JjbnRfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfc2NiY250X3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JDTlQiLCAweGJmLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9kZndhZGRyX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2Rmd2FkZHJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkRGV0FERFIiLCAweGMwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9kc3BmbHRyY3RsX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2RzcGZsdHJjdGxfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkRTUEZMVFJDVEwiLCAweGMwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9kc3BkYXRhY3RsX3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhkX2RzcGRhdGFjdGxfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTE2NTEsMjcgKzk3Miw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfZGZyYWRkcl9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9kZnJhZGRyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJERlJBRERSIiwgMHhjMiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfZHNwcmVxY3RsX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2RzcHJlcWN0bF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiRFNQUkVRQ1RMIiwgMHhjMiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfZHNwYWNrY3RsX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2RzcGFja2N0bF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiRFNQQUNLQ1RMIiwgMHhjMywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfZGZkYXRfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfZGZkYXRfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTE2OTMsNzYgKzk5Myw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfcmN2cmJpb3NjdGxfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfcmN2cmJpb3NjdGxfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlJDVlJCSU9TQ1RMIiwgMHhjNiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfd3J0Ymlhc2NhbGNfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfd3J0Ymlhc2NhbGNfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIldSVEJJQVNDQUxDIiwgMHhjNywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfcmN2cmJpYXNjYWxjX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX3JjdnJiaWFzY2FsY19wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiUkNWUkJJQVNDQUxDIiwgMHhjOCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfZGZwdHJzX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2RmcHRyc19wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiREZQVFJTIiwgMHhjOCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfc2tld2NhbGNfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfc2tld2NhbGNfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNLRVdDQUxDIiwgMHhjOSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfZGZia3B0cl9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9kZmJrcHRyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJERkJLUFRSIiwgMHhjOSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfZGZkYmN0bF9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9kZmRiY3RsX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJERkRCQ1RMIiwgMHhjYiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfZGZzY250X3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2Rmc2NudF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiREZTQ05UIiwgMHhjYywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfZGZiY250X3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX2RmYmNudF9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiREZCQ05UIiwgMHhjZSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfb3ZseWFkZHJfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfb3ZseWFkZHJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIk9WTFlBRERSIiwgMHhkNCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfc2VxY3RsMF9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9zZXFjdGwwX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC0xNzcwLDEzICsxMDAwLDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zZXFjdGwxX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX3NlcWN0bDFfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNFUUNUTDEiLCAweGQ3LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9mbGFnc19wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9mbGFnc19wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtMTgyNiwyMCArMTA0OSw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfYnJrYWRkcjBfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfYnJrYWRkcjBfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkJSS0FERFIwIiwgMHhlNiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfYnJrYWRkcjFfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfYnJrYWRkcjFfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkJSS0FERFIxIiwgMHhlNiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfYWxsb25lc19wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9hbGxvbmVzX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC0xODc1LDEzICsxMDg0LDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9mdW5jdGlvbjFfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfZnVuY3Rpb24xX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJGVU5DVElPTjEiLCAweGYwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9zdGFja19wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9zdGFja19wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtMTkwMywxMyArMTEwNSw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfbGFzdGFkZHJfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfbGFzdGFkZHJfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkxBU1RBRERSIiwgMHhmNiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfaW50dmVjMl9hZGRyX3ByaW50OwogI2Vsc2UKICNkZWZpbmUgYWhkX2ludHZlYzJfYWRkcl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtMTkzMSwyMCArMTEyNiw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfd2FpdGluZ19zY2JfdGFpbHNfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfd2FpdGluZ19zY2JfdGFpbHNfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIldBSVRJTkdfU0NCX1RBSUxTIiwgMHgxMDAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX2FoZF9wY2lfY29uZmlnX2Jhc2VfcHJpbnQ7Ci0jZWxzZQotI2RlZmluZSBhaGRfYWhkX3BjaV9jb25maWdfYmFzZV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQUhEX1BDSV9DT05GSUdfQkFTRSIsIDB4MTAwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9zcmFtX2Jhc2VfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfc3JhbV9iYXNlX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC0xOTUyLDYgKzExMzMsMTMgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUworYWhkX3JlZ19wcmludF90IGFoZF93YWl0aW5nX3NjYl90YWlsc19wcmludDsKKyNlbHNlCisjZGVmaW5lIGFoZF93YWl0aW5nX3NjYl90YWlsc19wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAorICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiV0FJVElOR19TQ0JfVEFJTFMiLCAweDEwMCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCisjZW5kaWYKKworI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfd2FpdGluZ190aWRfaGVhZF9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF93YWl0aW5nX3RpZF9oZWFkX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC0yMjE4LDEzICsxNDA2LDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zY2JfYmFzZV9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9zY2JfYmFzZV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCX0JBU0UiLCAweDE4MCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKIGFoZF9yZWdfcHJpbnRfdCBhaGRfc2NiX3Jlc2lkdWFsX2RhdGFjbnRfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfc2NiX3Jlc2lkdWFsX2RhdGFjbnRfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKQEAgLTIyMzIsNiArMTQxMywxMyBAQAogI2VuZGlmCiAKICNpZiBBSUNfREVCVUdfUkVHSVNURVJTCithaGRfcmVnX3ByaW50X3QgYWhkX3NjYl9iYXNlX3ByaW50OworI2Vsc2UKKyNkZWZpbmUgYWhkX3NjYl9iYXNlX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCisgICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JfQkFTRSIsIDB4MTgwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKKyNlbmRpZgorCisjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9zY2JfcmVzaWR1YWxfc2dwdHJfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfc2NiX3Jlc2lkdWFsX3NncHRyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCkBAIC0yMjQ2LDI3ICsxNDM0LDYgQEAKICNlbmRpZgogCiAjaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwotYWhkX3JlZ19wcmludF90IGFoZF9zY2JfdGFyZ2V0X3BoYXNlc19wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9zY2JfdGFyZ2V0X3BoYXNlc19wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCX1RBUkdFVF9QSEFTRVMiLCAweDE4OSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApCi0jZW5kaWYKLQotI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfc2NiX3RhcmdldF9kYXRhX2Rpcl9wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9zY2JfdGFyZ2V0X2RhdGFfZGlyX3ByaW50KHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSBcCi0gICAgYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JfVEFSR0VUX0RBVEFfRElSIiwgMHgxOGEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCi1haGRfcmVnX3ByaW50X3QgYWhkX3NjYl90YXJnZXRfaXRhZ19wcmludDsKLSNlbHNlCi0jZGVmaW5lIGFoZF9zY2JfdGFyZ2V0X2l0YWdfcHJpbnQocmVndmFsdWUsIGN1cl9jb2wsIHdyYXApIFwKLSAgICBhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDQl9UQVJHRVRfSVRBRyIsIDB4MThiLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkKLSNlbmRpZgotCi0jaWYgQUlDX0RFQlVHX1JFR0lTVEVSUwogYWhkX3JlZ19wcmludF90IGFoZF9zY2Jfc2Vuc2VfYnVzYWRkcl9wcmludDsKICNlbHNlCiAjZGVmaW5lIGFoZF9zY2Jfc2Vuc2VfYnVzYWRkcl9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtMjM2NSwxMyArMTUzMiw2IEBACiAjZW5kaWYKIAogI2lmIEFJQ19ERUJVR19SRUdJU1RFUlMKLWFoZF9yZWdfcHJpbnRfdCBhaGRfc2NiX3NwYXJlX3ByaW50OwotI2Vsc2UKLSNkZWZpbmUgYWhkX3NjYl9zcGFyZV9wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXAotICAgIGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCX1NQQVJFIiwgMHgxYjAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKQotI2VuZGlmCi0KLSNpZiBBSUNfREVCVUdfUkVHSVNURVJTCiBhaGRfcmVnX3ByaW50X3QgYWhkX3NjYl9kaXNjb25uZWN0ZWRfbGlzdHNfcHJpbnQ7CiAjZWxzZQogI2RlZmluZSBhaGRfc2NiX2Rpc2Nvbm5lY3RlZF9saXN0c19wcmludChyZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkgXApAQCAtMjU1NywxMCArMTcxNywxMCBAQAogCiAjZGVmaW5lCVNHX0NBQ0hFX1BSRSAgICAJCTB4MWIKIAotI2RlZmluZQlMUUlOICAgICAgICAgICAgCQkweDIwCi0KICNkZWZpbmUJVFlQRVBUUiAgICAgICAgIAkJMHgyMAogCisjZGVmaW5lCUxRSU4gICAgICAgICAgICAJCTB4MjAKKwogI2RlZmluZQlUQUdQVFIgICAgICAgICAgCQkweDIxCiAKICNkZWZpbmUJTFVOUFRSICAgICAgICAgIAkJMHgyMgpAQCAtMjYyMCwxNCArMTc4MCw2IEBACiAjZGVmaW5lCQlTSU5HTEVDTUQgICAgICAgCTB4MDIKICNkZWZpbmUJCUFCT1JUUEVORElORyAgICAJMHgwMQogCi0jZGVmaW5lCVNDU0JJU1QwICAgICAgICAJCTB4MzkKLSNkZWZpbmUJCUdTQklTVEVSUiAgICAgICAJMHg0MAotI2RlZmluZQkJR1NCSVNURE9ORSAgICAgIAkweDIwCi0jZGVmaW5lCQlHU0JJU1RSVU4gICAgICAgCTB4MTAKLSNkZWZpbmUJCU9TQklTVEVSUiAgICAgICAJMHgwNAotI2RlZmluZQkJT1NCSVNURE9ORSAgICAgIAkweDAyCi0jZGVmaW5lCQlPU0JJU1RSVU4gICAgICAgCTB4MDEKLQogI2RlZmluZQlMUUNUTDIgICAgICAgICAgCQkweDM5CiAjZGVmaW5lCQlMUUlSRVRSWSAgICAgICAgCTB4ODAKICNkZWZpbmUJCUxRSUNPTlRJTlVFICAgICAJMHg0MApAQCAtMjYzOCwxMCArMTc5MCwxMyBAQAogI2RlZmluZQkJTFFPVE9JRExFICAgICAgIAkweDAyCiAjZGVmaW5lCQlMUU9QQVVTRSAgICAgICAgCTB4MDEKIAotI2RlZmluZQlTQ1NCSVNUMSAgICAgICAgCQkweDNhCi0jZGVmaW5lCQlOVEJJU1RFUlIgICAgICAgCTB4MDQKLSNkZWZpbmUJCU5UQklTVERPTkUgICAgICAJMHgwMgotI2RlZmluZQkJTlRCSVNUUlVOICAgICAgIAkweDAxCisjZGVmaW5lCVNDU0JJU1QwICAgICAgICAJCTB4MzkKKyNkZWZpbmUJCUdTQklTVEVSUiAgICAgICAJMHg0MAorI2RlZmluZQkJR1NCSVNURE9ORSAgICAgIAkweDIwCisjZGVmaW5lCQlHU0JJU1RSVU4gICAgICAgCTB4MTAKKyNkZWZpbmUJCU9TQklTVEVSUiAgICAgICAJMHgwNAorI2RlZmluZQkJT1NCSVNURE9ORSAgICAgIAkweDAyCisjZGVmaW5lCQlPU0JJU1RSVU4gICAgICAgCTB4MDEKIAogI2RlZmluZQlTQ1NJU0VRMCAgICAgICAgCQkweDNhCiAjZGVmaW5lCQlURU1PREVPICAgICAgICAgCTB4ODAKQEAgLTI2NTAsOCArMTgwNSwxNSBAQAogI2RlZmluZQkJRk9SQ0VCVVNGUkVFICAgIAkweDEwCiAjZGVmaW5lCQlTQ1NJUlNUTyAgICAgICAgCTB4MDEKIAorI2RlZmluZQlTQ1NCSVNUMSAgICAgICAgCQkweDNhCisjZGVmaW5lCQlOVEJJU1RFUlIgICAgICAgCTB4MDQKKyNkZWZpbmUJCU5UQklTVERPTkUgICAgICAJMHgwMgorI2RlZmluZQkJTlRCSVNUUlVOICAgICAgIAkweDAxCisKICNkZWZpbmUJU0NTSVNFUTEgICAgICAgIAkJMHgzYgogCisjZGVmaW5lCUJVU0lOSVRJRCAgICAgICAJCTB4M2MKKwogI2RlZmluZQlTWEZSQ1RMMCAgICAgICAgCQkweDNjCiAjZGVmaW5lCQlERk9OICAgICAgICAgICAgCTB4ODAKICNkZWZpbmUJCURGUEVYUCAgICAgICAgICAJMHg0MApAQCAtMjY2MCw4ICsxODIyLDYgQEAKIAogI2RlZmluZQlETENPVU5UICAgICAgICAgCQkweDNjCiAKLSNkZWZpbmUJQlVTSU5JVElEICAgICAgIAkJMHgzYwotCiAjZGVmaW5lCVNYRlJDVEwxICAgICAgICAJCTB4M2QKICNkZWZpbmUJCUJJVEJVQ0tFVCAgICAgICAJMHg4MAogI2RlZmluZQkJRU5TQUNISyAgICAgICAgIAkweDQwCkBAIC0yNjg2LDYgKzE4NDYsOCBAQAogI2RlZmluZQkJQ1VSUkZJRk9fMSAgICAgIAkweDAxCiAjZGVmaW5lCQlDVVJSRklGT18wICAgICAgCTB4MDAKIAorI2RlZmluZQlNVUxUQVJHSUQgICAgICAgCQkweDQwCisKICNkZWZpbmUJU0NTSVNJR08gICAgICAgIAkJMHg0MAogI2RlZmluZQkJQ0RPICAgICAgICAgICAgIAkweDgwCiAjZGVmaW5lCQlJT08gICAgICAgICAgICAgCTB4NDAKQEAgLTI2OTYsOCArMTg1OCw2IEBACiAjZGVmaW5lCQlSRVFPICAgICAgICAgICAgCTB4MDIKICNkZWZpbmUJCUFDS08gICAgICAgICAgICAJMHgwMQogCi0jZGVmaW5lCU1VTFRBUkdJRCAgICAgICAJCTB4NDAKLQogI2RlZmluZQlTQ1NJU0lHSSAgICAgICAgCQkweDQxCiAjZGVmaW5lCQlBVE5JICAgICAgICAgICAgCTB4MTAKICNkZWZpbmUJCVNFTEkgICAgICAgICAgICAJMHgwOApAQCAtMjc0NCwxNSArMTkwNCw2IEBACiAjZGVmaW5lCQlFTkFCMjAgICAgICAgICAgCTB4MDQKICNkZWZpbmUJCVNFTFdJREUgICAgICAgICAJMHgwMgogCi0jZGVmaW5lCUNMUlNJTlQwICAgICAgICAJCTB4NGIKLSNkZWZpbmUJCUNMUlNFTERPICAgICAgICAJMHg0MAotI2RlZmluZQkJQ0xSU0VMREkgICAgICAgIAkweDIwCi0jZGVmaW5lCQlDTFJTRUxJTkdPICAgICAgCTB4MTAKLSNkZWZpbmUJCUNMUklPRVJSICAgICAgICAJMHgwOAotI2RlZmluZQkJQ0xST1ZFUlJVTiAgICAgIAkweDA0Ci0jZGVmaW5lCQlDTFJTUElPUkRZICAgICAgCTB4MDIKLSNkZWZpbmUJCUNMUkFSQkRPICAgICAgICAJMHgwMQotCiAjZGVmaW5lCVNTVEFUMCAgICAgICAgICAJCTB4NGIKICNkZWZpbmUJCVRBUkdFVCAgICAgICAgICAJMHg4MAogI2RlZmluZQkJU0VMRE8gICAgICAgICAgIAkweDQwCkBAIC0yNzcyLDE0ICsxOTIzLDE0IEBACiAjZGVmaW5lCQlFTlNQSU9SRFkgICAgICAgCTB4MDIKICNkZWZpbmUJCUVOQVJCRE8gICAgICAgICAJMHgwMQogCi0jZGVmaW5lCUNMUlNJTlQxICAgICAgICAJCTB4NGMKLSNkZWZpbmUJCUNMUlNFTFRJTUVPICAgICAJMHg4MAotI2RlZmluZQkJQ0xSQVROTyAgICAgICAgIAkweDQwCi0jZGVmaW5lCQlDTFJTQ1NJUlNUSSAgICAgCTB4MjAKLSNkZWZpbmUJCUNMUkJVU0ZSRUUgICAgICAJMHgwOAotI2RlZmluZQkJQ0xSU0NTSVBFUlIgICAgIAkweDA0Ci0jZGVmaW5lCQlDTFJTVFJCMkZBU1QgICAgCTB4MDIKLSNkZWZpbmUJCUNMUlJFUUlOSVQgICAgICAJMHgwMQorI2RlZmluZQlDTFJTSU5UMCAgICAgICAgCQkweDRiCisjZGVmaW5lCQlDTFJTRUxETyAgICAgICAgCTB4NDAKKyNkZWZpbmUJCUNMUlNFTERJICAgICAgICAJMHgyMAorI2RlZmluZQkJQ0xSU0VMSU5HTyAgICAgIAkweDEwCisjZGVmaW5lCQlDTFJJT0VSUiAgICAgICAgCTB4MDgKKyNkZWZpbmUJCUNMUk9WRVJSVU4gICAgICAJMHgwNAorI2RlZmluZQkJQ0xSU1BJT1JEWSAgICAgIAkweDAyCisjZGVmaW5lCQlDTFJBUkJETyAgICAgICAgCTB4MDEKIAogI2RlZmluZQlTU1RBVDEgICAgICAgICAgCQkweDRjCiAjZGVmaW5lCQlTRUxUTyAgICAgICAgICAgCTB4ODAKQEAgLTI3OTEsNiArMTk0MiwxNSBAQAogI2RlZmluZQkJU1RSQjJGQVNUICAgICAgIAkweDAyCiAjZGVmaW5lCQlSRVFJTklUICAgICAgICAgCTB4MDEKIAorI2RlZmluZQlDTFJTSU5UMSAgICAgICAgCQkweDRjCisjZGVmaW5lCQlDTFJTRUxUSU1FTyAgICAgCTB4ODAKKyNkZWZpbmUJCUNMUkFUTk8gICAgICAgICAJMHg0MAorI2RlZmluZQkJQ0xSU0NTSVJTVEkgICAgIAkweDIwCisjZGVmaW5lCQlDTFJCVVNGUkVFICAgICAgCTB4MDgKKyNkZWZpbmUJCUNMUlNDU0lQRVJSICAgICAJMHgwNAorI2RlZmluZQkJQ0xSU1RSQjJGQVNUICAgIAkweDAyCisjZGVmaW5lCQlDTFJSRVFJTklUICAgICAgCTB4MDEKKwogI2RlZmluZQlTU1RBVDIgICAgICAgICAgCQkweDRkCiAjZGVmaW5lCQlCVVNGUkVFVElNRSAgICAgCTB4YzAKICNkZWZpbmUJCU5PTlBBQ0tSRVEgICAgICAJMHgyMApAQCAtMjgzOCwxNCArMTk5OCw2IEBACiAjZGVmaW5lCQlMUUlBVE5MUSAgICAgICAgCTB4MDIKICNkZWZpbmUJCUxRSUFUTkNNRCAgICAgICAJMHgwMQogCi0jZGVmaW5lCUNMUkxRSUlOVDAgICAgICAJCTB4NTAKLSNkZWZpbmUJCUNMUkxRSUFUTlFBUyAgICAJMHgyMAotI2RlZmluZQkJQ0xSTFFJQ1JDVDEgICAgIAkweDEwCi0jZGVmaW5lCQlDTFJMUUlDUkNUMiAgICAgCTB4MDgKLSNkZWZpbmUJCUNMUkxRSUJBRExRVCAgICAJMHgwNAotI2RlZmluZQkJQ0xSTFFJQVROTFEgICAgIAkweDAyCi0jZGVmaW5lCQlDTFJMUUlBVE5DTUQgICAgCTB4MDEKLQogI2RlZmluZQlMUUlNT0RFMCAgICAgICAgCQkweDUwCiAjZGVmaW5lCQlFTkxRSUFUTlFBU0sgICAgCTB4MjAKICNkZWZpbmUJCUVOTFFJQ1JDVDEgICAgICAJMHgxMApAQCAtMjg1NCw2ICsyMDA2LDE0IEBACiAjZGVmaW5lCQlFTkxRSUFUTkxRICAgICAgCTB4MDIKICNkZWZpbmUJCUVOTFFJQVROQ01EICAgICAJMHgwMQogCisjZGVmaW5lCUNMUkxRSUlOVDAgICAgICAJCTB4NTAKKyNkZWZpbmUJCUNMUkxRSUFUTlFBUyAgICAJMHgyMAorI2RlZmluZQkJQ0xSTFFJQ1JDVDEgICAgIAkweDEwCisjZGVmaW5lCQlDTFJMUUlDUkNUMiAgICAgCTB4MDgKKyNkZWZpbmUJCUNMUkxRSUJBRExRVCAgICAJMHgwNAorI2RlZmluZQkJQ0xSTFFJQVROTFEgICAgIAkweDAyCisjZGVmaW5lCQlDTFJMUUlBVE5DTUQgICAgCTB4MDEKKwogI2RlZmluZQlMUUlNT0RFMSAgICAgICAgCQkweDUxCiAjZGVmaW5lCQlFTkxRSVBIQVNFX0xRICAgCTB4ODAKICNkZWZpbmUJCUVOTFFJUEhBU0VfTkxRICAJMHg0MApAQCAtMjk3Niw2ICsyMTM2LDggQEAKIAogI2RlZmluZQlMUU9TQ1NDVEwgICAgICAgCQkweDVhCiAjZGVmaW5lCQlMUU9IMkFfVkVSU0lPTiAgCTB4ODAKKyNkZWZpbmUJCUxRT0JVU0VURExZICAgICAJMHg0MAorI2RlZmluZQkJTFFPTk9IT0xETEFDSyAgIAkweDAyCiAjZGVmaW5lCQlMUU9OT0NIS09WRVIgICAgCTB4MDEKIAogI2RlZmluZQlORVhUU0NCICAgICAgICAgCQkweDVhCkBAIC0yOTk4LDggKzIxNjAsNiBAQAogI2RlZmluZQkJQ0ZHNElDTUQgICAgICAgIAkweDAyCiAjZGVmaW5lCQlDRkc0VENNRCAgICAgICAgCTB4MDEKIAotI2RlZmluZQlDVVJSU0NCICAgICAgICAgCQkweDVjCi0KICNkZWZpbmUJU0VRSU1PREUgICAgICAgIAkJMHg1YwogI2RlZmluZQkJRU5DVFhURE9ORSAgICAgIAkweDQwCiAjZGVmaW5lCQlFTlNBVkVQVFJTICAgICAgCTB4MjAKQEAgLTMwMDksNiArMjE2OSw4IEBACiAjZGVmaW5lCQlFTkNGRzRJQ01EICAgICAgCTB4MDIKICNkZWZpbmUJCUVOQ0ZHNFRDTUQgICAgICAJMHgwMQogCisjZGVmaW5lCUNVUlJTQ0IgICAgICAgICAJCTB4NWMKKwogI2RlZmluZQlNREZGU1RBVCAgICAgICAgCQkweDVkCiAjZGVmaW5lCQlTSENOVE5FR0FUSVZFICAgCTB4NDAKICNkZWZpbmUJCVNIQ05UTUlOVVMxICAgICAJMHgyMApAQCAtMzAyMywyOSArMjE4NSwyOSBAQAogCiAjZGVmaW5lCURGRlRBRyAgICAgICAgICAJCTB4NWUKIAotI2RlZmluZQlMQVNUU0NCICAgICAgICAgCQkweDVlCi0KICNkZWZpbmUJU0NTSVRFU1QgICAgICAgIAkJMHg1ZQogI2RlZmluZQkJQ05UUlRFU1QgICAgICAgIAkweDA4CiAjZGVmaW5lCQlTRUxfVFhQTExfREVCVUcgCTB4MDQKIAorI2RlZmluZQlMQVNUU0NCICAgICAgICAgCQkweDVlCisKICNkZWZpbmUJSU9QRE5DVEwgICAgICAgIAkJMHg1ZgogI2RlZmluZQkJRElTQUJMRV9PRSAgICAgIAkweDgwCiAjZGVmaW5lCQlQRE5fSURJU1QgICAgICAgCTB4MDQKICNkZWZpbmUJCVBETl9ESUZGU0VOU0UgICAJMHgwMQogCisjZGVmaW5lCURHUlBDUkNJICAgICAgICAJCTB4NjAKKwogI2RlZmluZQlTSEFERFIgICAgICAgICAgCQkweDYwCiAKICNkZWZpbmUJTkVHT0FERFIgICAgICAgIAkJMHg2MAogCi0jZGVmaW5lCURHUlBDUkNJICAgICAgICAJCTB4NjAKLQogI2RlZmluZQlORUdQRVJJT0QgICAgICAgCQkweDYxCiAKLSNkZWZpbmUJUEFDS0NSQ0kgICAgICAgIAkJMHg2MgotCiAjZGVmaW5lCU5FR09GRlNFVCAgICAgICAJCTB4NjIKIAorI2RlZmluZQlQQUNLQ1JDSSAgICAgICAgCQkweDYyCisKICNkZWZpbmUJTkVHUFBST1BUUyAgICAgIAkJMHg2MwogI2RlZmluZQkJUFBST1BUX1BBQ0UgICAgIAkweDA4CiAjZGVmaW5lCQlQUFJPUFRfUUFTICAgICAgCTB4MDQKQEAgLTMwNjYsNiArMjIyOCw3IEBACiAjZGVmaW5lCUFOTkVYREFUICAgICAgICAJCTB4NjYKIAogI2RlZmluZQlTQ1NDSEtOICAgICAgICAgCQkweDY2CisjZGVmaW5lCQlCSURJQ0hLRElTICAgICAgCTB4ODAKICNkZWZpbmUJCVNUU0VMU0tJRERJUyAgICAJMHg0MAogI2RlZmluZQkJQ1VSUkZJRk9ERUYgICAgIAkweDIwCiAjZGVmaW5lCQlXSURFUkVTRU4gICAgICAgCTB4MTAKQEAgLTMwOTAsNiArMjI1Myw4IEBACiAKICNkZWZpbmUJU0VMT0lEICAgICAgICAgIAkJMHg2YgogCisjZGVmaW5lCUZBSVJORVNTICAgICAgICAJCTB4NmMKKwogI2RlZmluZQlQTEw0MDBDVEwwICAgICAgCQkweDZjCiAjZGVmaW5lCQlQTExfVkNPU0VMICAgICAgCTB4ODAKICNkZWZpbmUJCVBMTF9QV0ROICAgICAgICAJMHg0MApAQCAtMzA5OSw4ICsyMjY0LDYgQEAKICNkZWZpbmUJCVBMTF9ETFBGICAgICAgICAJMHgwMgogI2RlZmluZQkJUExMX0VORkJNICAgICAgIAkweDAxCiAKLSNkZWZpbmUJRkFJUk5FU1MgICAgICAgIAkJMHg2YwotCiAjZGVmaW5lCVBMTDQwMENUTDEgICAgICAJCTB4NmQKICNkZWZpbmUJCVBMTF9DTlRFTiAgICAgICAJMHg4MAogI2RlZmluZQkJUExMX0NOVENMUiAgICAgIAkweDQwCkBAIC0zMTEyLDI1ICsyMjc1LDI1IEBACiAKICNkZWZpbmUJSEFERFIgICAgICAgICAgIAkJMHg3MAogCisjZGVmaW5lCUhPRE1BQURSICAgICAgICAJCTB4NzAKKwogI2RlZmluZQlQTExERUxBWSAgICAgICAgCQkweDcwCiAjZGVmaW5lCQlTUExJVF9EUk9QX1JFUSAgCTB4ODAKIAotI2RlZmluZQlIT0RNQUFEUiAgICAgICAgCQkweDcwCisjZGVmaW5lCUhDTlQgICAgICAgICAgICAJCTB4NzgKIAogI2RlZmluZQlIT0RNQUNOVCAgICAgICAgCQkweDc4CiAKLSNkZWZpbmUJSENOVCAgICAgICAgICAgIAkJMHg3OAotCiAjZGVmaW5lCUhPRE1BRU4gICAgICAgICAJCTB4N2EKIAotI2RlZmluZQlTQ0JIQUREUiAgICAgICAgCQkweDdjCi0KICNkZWZpbmUJU0dIQUREUiAgICAgICAgIAkJMHg3YwogCi0jZGVmaW5lCVNDQkhDTlQgICAgICAgICAJCTB4ODQKKyNkZWZpbmUJU0NCSEFERFIgICAgICAgIAkJMHg3YwogCiAjZGVmaW5lCVNHSENOVCAgICAgICAgICAJCTB4ODQKIAorI2RlZmluZQlTQ0JIQ05UICAgICAgICAgCQkweDg0CisKICNkZWZpbmUJREZGX1RIUlNIICAgICAgIAkJMHg4OAogI2RlZmluZQkJV1JfREZUSFJTSCAgICAgIAkweDcwCiAjZGVmaW5lCQlSRF9ERlRIUlNIICAgICAgCTB4MDcKQEAgLTMxNjMsNiArMjMyNiwxMCBAQAogCiAjZGVmaW5lCUNNQ1JYTVNHMCAgICAgICAJCTB4OTAKIAorI2RlZmluZQlPVkxZUlhNU0cwICAgICAgCQkweDkwCisKKyNkZWZpbmUJRENIUlhNU0cwICAgICAgIAkJMHg5MAorCiAjZGVmaW5lCVJPRU5BQkxFICAgICAgICAJCTB4OTAKICNkZWZpbmUJCU1TSVJPRU4gICAgICAgICAJMHgyMAogI2RlZmluZQkJT1ZMWVJPRU4gICAgICAgIAkweDEwCkBAIC0zMTcxLDEyICsyMzM4LDEyIEBACiAjZGVmaW5lCQlEQ0gxUk9FTiAgICAgICAgCTB4MDIKICNkZWZpbmUJCURDSDBST0VOICAgICAgICAJMHgwMQogCi0jZGVmaW5lCU9WTFlSWE1TRzAgICAgICAJCTB4OTAKLQotI2RlZmluZQlEQ0hSWE1TRzAgICAgICAgCQkweDkwCi0KICNkZWZpbmUJT1ZMWVJYTVNHMSAgICAgIAkJMHg5MQogCisjZGVmaW5lCUNNQ1JYTVNHMSAgICAgICAJCTB4OTEKKworI2RlZmluZQlEQ0hSWE1TRzEgICAgICAgCQkweDkxCisKICNkZWZpbmUJTlNFTkFCTEUgICAgICAgIAkJMHg5MQogI2RlZmluZQkJTVNJTlNFTiAgICAgICAgIAkweDIwCiAjZGVmaW5lCQlPVkxZTlNFTiAgICAgICAgCTB4MTAKQEAgLTMxODUsMTAgKzIzNTIsNiBAQAogI2RlZmluZQkJRENIMU5TRU4gICAgICAgIAkweDAyCiAjZGVmaW5lCQlEQ0gwTlNFTiAgICAgICAgCTB4MDEKIAotI2RlZmluZQlDTUNSWE1TRzEgICAgICAgCQkweDkxCi0KLSNkZWZpbmUJRENIUlhNU0cxICAgICAgIAkJMHg5MQotCiAjZGVmaW5lCURDSFJYTVNHMiAgICAgICAJCTB4OTIKIAogI2RlZmluZQlDTUNSWE1TRzIgICAgICAgCQkweDkyCkBAIC0zMjEyLDI0ICsyMzc1LDI0IEBACiAjZGVmaW5lCQlUU0NTRVJSRU4gICAgICAgCTB4MDIKICNkZWZpbmUJCUNNUEFCQ0RJUyAgICAgICAJMHgwMQogCisjZGVmaW5lCUNNQ1NFUUJDTlQgICAgICAJCTB4OTQKKwogI2RlZmluZQlPVkxZU0VRQkNOVCAgICAgCQkweDk0CiAKICNkZWZpbmUJRENIU0VRQkNOVCAgICAgIAkJMHg5NAogCi0jZGVmaW5lCUNNQ1NFUUJDTlQgICAgICAJCTB4OTQKLQotI2RlZmluZQlDTUNTUExUU1RBVDAgICAgCQkweDk2Ci0KICNkZWZpbmUJRENIU1BMVFNUQVQwICAgIAkJMHg5NgogCiAjZGVmaW5lCU9WTFlTUExUU1RBVDAgICAJCTB4OTYKIAotI2RlZmluZQlDTUNTUExUU1RBVDEgICAgCQkweDk3CisjZGVmaW5lCUNNQ1NQTFRTVEFUMCAgICAJCTB4OTYKIAogI2RlZmluZQlPVkxZU1BMVFNUQVQxICAgCQkweDk3CiAKICNkZWZpbmUJRENIU1BMVFNUQVQxICAgIAkJMHg5NwogCisjZGVmaW5lCUNNQ1NQTFRTVEFUMSAgICAJCTB4OTcKKwogI2RlZmluZQlTR1JYTVNHMCAgICAgICAgCQkweDk4CiAjZGVmaW5lCQlDRE5VTSAgICAgICAgICAgCTB4ZjgKICNkZWZpbmUJCUNGTlVNICAgICAgICAgICAJMHgwNwpAQCAtMzI1NywxOCArMjQyMCwxNSBAQAogI2RlZmluZQkJVEFHX05VTSAgICAgICAgIAkweDFmCiAjZGVmaW5lCQlSTFhPUkQgICAgICAgICAgCTB4MTAKIAotI2RlZmluZQlTR1NFUUJDTlQgICAgICAgCQkweDljCi0KICNkZWZpbmUJU0xWU1BMVE9VVEFUVFIwIAkJMHg5YwogI2RlZmluZQkJTE9XRVJfQkNOVCAgICAgIAkweGZmCiAKKyNkZWZpbmUJU0dTRVFCQ05UICAgICAgIAkJMHg5YworCiAjZGVmaW5lCVNMVlNQTFRPVVRBVFRSMSAJCTB4OWQKICNkZWZpbmUJCUNNUExUX0ROVU0gICAgICAJMHhmOAogI2RlZmluZQkJQ01QTFRfRk5VTSAgICAgIAkweDA3CiAKLSNkZWZpbmUJU0xWU1BMVE9VVEFUVFIyIAkJMHg5ZQotI2RlZmluZQkJQ01QTFRfQk5VTSAgICAgIAkweGZmCi0KICNkZWZpbmUJU0dTUExUU1RBVDAgICAgIAkJMHg5ZQogI2RlZmluZQkJU1RBRVRFUk0gICAgICAgIAkweDgwCiAjZGVmaW5lCQlTQ0JDRVJSICAgICAgICAgCTB4NDAKQEAgLTMyNzksNiArMjQzOSw5IEBACiAjZGVmaW5lCQlSWFNDRU1TRyAgICAgICAgCTB4MDIKICNkZWZpbmUJCVJYU1BMVFJTUCAgICAgICAJMHgwMQogCisjZGVmaW5lCVNMVlNQTFRPVVRBVFRSMiAJCTB4OWUKKyNkZWZpbmUJCUNNUExUX0JOVU0gICAgICAJMHhmZgorCiAjZGVmaW5lCVNHU1BMVFNUQVQxICAgICAJCTB4OWYKICNkZWZpbmUJCVJYREFUQUJVQ0tFVCAgICAJMHgwMQogCkBAIC0zMzM0LDEwICsyNDk3LDEwIEBACiAKICNkZWZpbmUJQ0NTR0FERFIgICAgICAgIAkJMHhhYwogCi0jZGVmaW5lCUNDU0NCQURSX0JLICAgICAJCTB4YWMKLQogI2RlZmluZQlDQ1NDQkFERFIgICAgICAgCQkweGFjCiAKKyNkZWZpbmUJQ0NTQ0JBRFJfQksgICAgIAkJMHhhYworCiAjZGVmaW5lCUNNQ19SQU1CSVNUICAgICAJCTB4YWQKICNkZWZpbmUJCVNHX0VMRU1FTlRfU0laRSAJMHg4MAogI2RlZmluZQkJU0NCUkFNQklTVF9GQUlMIAkweDQwCkBAIC0zMzkxLDkgKzI1NTQsOSBAQAogI2RlZmluZQlTRUVEQVQgICAgICAgICAgCQkweGJjCiAKICNkZWZpbmUJU0VFQ1RMICAgICAgICAgIAkJMHhiZQorI2RlZmluZQkJU0VFT1BfRVdEUyAgICAgIAkweDQwCiAjZGVmaW5lCQlTRUVPUF9XQUxMICAgICAgCTB4NDAKICNkZWZpbmUJCVNFRU9QX0VXRU4gICAgICAJMHg0MAotI2RlZmluZQkJU0VFT1BfRVdEUyAgICAgIAkweDQwCiAjZGVmaW5lCQlTRUVPUENPREUgICAgICAgCTB4NzAKICNkZWZpbmUJCVNFRVJTVCAgICAgICAgICAJMHgwMgogI2RlZmluZQkJU0VFU1RBUlQgICAgICAgIAkweDAxCkBAIC0zNDEwLDI1ICsyNTczLDI1IEBACiAKICNkZWZpbmUJU0NCQ05UICAgICAgICAgIAkJMHhiZgogCi0jZGVmaW5lCURGV0FERFIgICAgICAgICAJCTB4YzAKLQogI2RlZmluZQlEU1BGTFRSQ1RMICAgICAgCQkweGMwCiAjZGVmaW5lCQlGTFRSRElTQUJMRSAgICAgCTB4MjAKICNkZWZpbmUJCUVER0VTRU5TRSAgICAgICAJMHgxMAogI2RlZmluZQkJRFNQRkNOVFNFTCAgICAgIAkweDBmCiAKKyNkZWZpbmUJREZXQUREUiAgICAgICAgIAkJMHhjMAorCiAjZGVmaW5lCURTUERBVEFDVEwgICAgICAJCTB4YzEKICNkZWZpbmUJCUJZUEFTU0VOQUIgICAgICAJMHg4MAogI2RlZmluZQkJREVTUURJUyAgICAgICAgIAkweDEwCiAjZGVmaW5lCQlSQ1ZST0ZGU1RESVMgICAgCTB4MDQKICNkZWZpbmUJCVhNSVRPRkZTVERJUyAgICAJMHgwMgogCi0jZGVmaW5lCURGUkFERFIgICAgICAgICAJCTB4YzIKLQogI2RlZmluZQlEU1BSRVFDVEwgICAgICAgCQkweGMyCiAjZGVmaW5lCQlNQU5SRVFDVEwgICAgICAgCTB4YzAKICNkZWZpbmUJCU1BTlJFUURMWSAgICAgICAJMHgzZgogCisjZGVmaW5lCURGUkFERFIgICAgICAgICAJCTB4YzIKKwogI2RlZmluZQlEU1BBQ0tDVEwgICAgICAgCQkweGMzCiAjZGVmaW5lCQlNQU5BQ0tDVEwgICAgICAgCTB4YzAKICNkZWZpbmUJCU1BTkFDS0RMWSAgICAgICAJMHgzZgpAQCAtMzQ0OSwxNCArMjYxMiwxNCBAQAogCiAjZGVmaW5lCVdSVEJJQVNDQUxDICAgICAJCTB4YzcKIAotI2RlZmluZQlSQ1ZSQklBU0NBTEMgICAgCQkweGM4Ci0KICNkZWZpbmUJREZQVFJTICAgICAgICAgIAkJMHhjOAogCi0jZGVmaW5lCVNLRVdDQUxDICAgICAgICAJCTB4YzkKKyNkZWZpbmUJUkNWUkJJQVNDQUxDICAgIAkJMHhjOAogCiAjZGVmaW5lCURGQktQVFIgICAgICAgICAJCTB4YzkKIAorI2RlZmluZQlTS0VXQ0FMQyAgICAgICAgCQkweGM5CisKICNkZWZpbmUJREZEQkNUTCAgICAgICAgIAkJMHhjYgogI2RlZmluZQkJREZGX0NJT19XUl9SRFkgIAkweDIwCiAjZGVmaW5lCQlERkZfQ0lPX1JEX1JEWSAgCTB4MTAKQEAgLTM1NDEsMTIgKzI3MDQsMTIgQEAKIAogI2RlZmluZQlBQ0NVTV9TQVZFICAgICAgCQkweGZhCiAKLSNkZWZpbmUJV0FJVElOR19TQ0JfVEFJTFMJCTB4MTAwCi0KICNkZWZpbmUJQUhEX1BDSV9DT05GSUdfQkFTRQkJMHgxMDAKIAogI2RlZmluZQlTUkFNX0JBU0UgICAgICAgCQkweDEwMAogCisjZGVmaW5lCVdBSVRJTkdfU0NCX1RBSUxTCQkweDEwMAorCiAjZGVmaW5lCVdBSVRJTkdfVElEX0hFQUQJCTB4MTIwCiAKICNkZWZpbmUJV0FJVElOR19USURfVEFJTAkJMHgxMjIKQEAgLTM1NzUsOCArMjczOCw4IEBACiAjZGVmaW5lCQlQUkVMT0FERU4gICAgICAgCTB4ODAKICNkZWZpbmUJCVdJREVPREQgICAgICAgICAJMHg0MAogI2RlZmluZQkJU0NTSUVOICAgICAgICAgIAkweDIwCi0jZGVmaW5lCQlTRE1BRU4gICAgICAgICAgCTB4MTAKICNkZWZpbmUJCVNETUFFTkFDSyAgICAgICAJMHgxMAorI2RlZmluZQkJU0RNQUVOICAgICAgICAgIAkweDEwCiAjZGVmaW5lCQlIRE1BRU4gICAgICAgICAgCTB4MDgKICNkZWZpbmUJCUhETUFFTkFDSyAgICAgICAJMHgwOAogI2RlZmluZQkJRElSRUNUSU9OICAgICAgIAkweDA0CkBAIC0zNjc0LDEyICsyODM3LDEyIEBACiAKICNkZWZpbmUJTUtfTUVTU0FHRV9TQ1NJSUQJCTB4MTYyCiAKLSNkZWZpbmUJU0NCX0JBU0UgICAgICAgIAkJMHgxODAKLQogI2RlZmluZQlTQ0JfUkVTSURVQUxfREFUQUNOVAkJMHgxODAKICNkZWZpbmUJU0NCX0NEQl9TVE9SRSAgIAkJMHgxODAKICNkZWZpbmUJU0NCX0hPU1RfQ0RCX1BUUgkJMHgxODAKIAorI2RlZmluZQlTQ0JfQkFTRSAgICAgICAgCQkweDE4MAorCiAjZGVmaW5lCVNDQl9SRVNJRFVBTF9TR1BUUgkJMHgxODQKICNkZWZpbmUJCVNHX0FERFJfTUFTSyAgICAJMHhmOAogI2RlZmluZQkJU0dfT1ZFUlJVTl9SRVNJRAkweDAyCkBAIC0zNzQ3LDYgKzI5MTAsMTcgQEAKICNkZWZpbmUJU0NCX0RJU0NPTk5FQ1RFRF9MSVNUUwkJMHgxYjgKIAogCisjZGVmaW5lCUNNRF9HUk9VUF9DT0RFX1NISUZUCTB4MDUKKyNkZWZpbmUJU1RJTUVTRUxfTUlOCTB4MTgKKyNkZWZpbmUJU1RJTUVTRUxfU0hJRlQJMHgwMworI2RlZmluZQlJTlZBTElEX0FERFIJMHg4MAorI2RlZmluZQlBSERfUFJFQ09NUF9NQVNLCTB4MDcKKyNkZWZpbmUJVEFSR0VUX0RBVEFfSU4JMHgwMQorI2RlZmluZQlDQ1NDQkFERFJfTUFYCTB4ODAKKyNkZWZpbmUJTlVNRFNQUyAJMHgxNAorI2RlZmluZQlTRUVPUF9FV0VOX0FERFIJMHhjMAorI2RlZmluZQlBSERfQU5ORVhDT0xfUEVSX0RFVjAJMHgwNAorI2RlZmluZQlEU1RfTU9ERV9TSElGVAkweDA0CiAjZGVmaW5lCUFIRF9USU1FUl9NQVhfVVMJMHgxOGZmZTcKICNkZWZpbmUJQUhEX1RJTUVSX01BWF9USUNLUwkweGZmZmYKICNkZWZpbmUJQUhEX1NFTlNFX0JVRlNJWkUJMHgxMDAKQEAgLTM3ODEsNDMgKzI5NTUsMzIgQEAKICNkZWZpbmUJTFVOTEVOX1NJTkdMRV9MRVZFTF9MVU4JMHgwZgogI2RlZmluZQlOVlJBTV9TQ0JfT0ZGU0VUCTB4MmMKICNkZWZpbmUJU1RBVFVTX1BLVF9TRU5TRQkweGZmCi0jZGVmaW5lCUNNRF9HUk9VUF9DT0RFX1NISUZUCTB4MDUKICNkZWZpbmUJTUFYX09GRlNFVF9QQUNFRF9CVUcJMHg3ZgogI2RlZmluZQlTVElNRVNFTF9CVUdfQURKCTB4MDgKLSNkZWZpbmUJU1RJTUVTRUxfTUlOCTB4MTgKLSNkZWZpbmUJU1RJTUVTRUxfU0hJRlQJMHgwMwogI2RlZmluZQlDQ1NHUkFNX01BWFNFR1MJMHgxMAotI2RlZmluZQlJTlZBTElEX0FERFIJMHg4MAogI2RlZmluZQlTRUVPUF9FUkFMX0FERFIJMHg4MAogI2RlZmluZQlBSERfU0xFV1JBVEVfREVGX1JFVkIJMHgwOAogI2RlZmluZQlBSERfUFJFQ09NUF9DVVRCQUNLXzE3CTB4MDQKLSNkZWZpbmUJQUhEX1BSRUNPTVBfTUFTSwkweDA3CiAjZGVmaW5lCVNSQ19NT0RFX1NISUZUCTB4MDAKICNkZWZpbmUJUEtUX09WRVJSVU5fQlVGU0laRQkweDIwMAogI2RlZmluZQlTQ0JfVFJBTlNGRVJfU0laRV8xQllURV9MVU4JMHgzMAotI2RlZmluZQlUQVJHRVRfREFUQV9JTgkweDAxCiAjZGVmaW5lCUhPU1RfTVNHCTB4ZmYKICNkZWZpbmUJTUFYX09GRlNFVAkweGZlCiAjZGVmaW5lCUJVU18xNl9CSVQJMHgwMQotI2RlZmluZQlDQ1NDQkFERFJfTUFYCTB4ODAKLSNkZWZpbmUJTlVNRFNQUyAJMHgxNAotI2RlZmluZQlTRUVPUF9FV0VOX0FERFIJMHhjMAotI2RlZmluZQlBSERfQU5ORVhDT0xfUEVSX0RFVjAJMHgwNAotI2RlZmluZQlEU1RfTU9ERV9TSElGVAkweDA0CiAKIAogLyogRG93bmxvYWRlZCBDb25zdGFudCBEZWZpbml0aW9ucyAqLworI2RlZmluZQlTR19TSVpFT0YJMHgwNAorI2RlZmluZQlTR19QUkVGRVRDSF9BTElHTl9NQVNLCTB4MDIKKyNkZWZpbmUJU0dfUFJFRkVUQ0hfQ05UX0xJTUlUCTB4MDEKICNkZWZpbmUJQ0FDSEVMSU5FX01BU0sJMHgwNwogI2RlZmluZQlTQ0JfVFJBTlNGRVJfU0laRQkweDA2CiAjZGVmaW5lCVBLVF9PVkVSUlVOX0JVRk9GRlNFVAkweDA1Ci0jZGVmaW5lCVNHX1NJWkVPRgkweDA0CiAjZGVmaW5lCVNHX1BSRUZFVENIX0FERFJfTUFTSwkweDAzCi0jZGVmaW5lCVNHX1BSRUZFVENIX0FMSUdOX01BU0sJMHgwMgotI2RlZmluZQlTR19QUkVGRVRDSF9DTlRfTElNSVQJMHgwMQogI2RlZmluZQlTR19QUkVGRVRDSF9DTlQJMHgwMAogI2RlZmluZQlET1dOTE9BRF9DT05TVF9DT1VOVAkweDA4CiAKIAogLyogRXhwb3J0ZWQgTGFiZWxzICovCi0jZGVmaW5lCUxBQkVMX3NlcV9pc3IgCTB4MjhmCiAjZGVmaW5lCUxBQkVMX3RpbWVyX2lzcgkweDI4YgorI2RlZmluZQlMQUJFTF9zZXFfaXNyIAkweDI4ZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9yZWdfcHJpbnQuY19zaGlwcGVkIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9yZWdfcHJpbnQuY19zaGlwcGVkCmluZGV4IGRiMzhhNjEuLmM0YzhhOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfcmVnX3ByaW50LmNfc2hpcHBlZAorKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X3JlZ19wcmludC5jX3NoaXBwZWQKQEAgLTgsNyArOCw3IEBACiAKICNpbmNsdWRlICJhaWM3OXh4X29zbS5oIgogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IE1PREVfUFRSX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IE1PREVfUFRSX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiU1JDX01PREUiLAkJMHgwNywgMHgwNyB9LAogCXsgIkRTVF9NT0RFIiwJCTB4NzAsIDB4NzAgfQogfTsKQEAgLTIwLDcgKzIwLDcgQEAKIAkgICAgMHgwMCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBJTlRTVEFUX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IElOVFNUQVRfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJTUExUSU5UIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJDTURDTVBMVCIsCQkweDAyLCAweDAyIH0sCiAJeyAiU0VRSU5UIiwJCTB4MDQsIDB4MDQgfSwKQEAgLTM5LDcgKzM5LDcgQEAKIAkgICAgMHgwMSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTRVFJTlRDT0RFX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNFUUlOVENPREVfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJOT19TRVFJTlQiLAkJMHgwMCwgMHhmZiB9LAogCXsgIkJBRF9QSEFTRSIsCQkweDAxLCAweGZmIH0sCiAJeyAiU0VORF9SRUpFQ1QiLAkweDAyLCAweGZmIH0sCkBAIC03Niw3ICs3Niw3IEBACiAJICAgIDB4MDIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgQ0xSSU5UX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENMUklOVF9wYXJzZV90YWJsZVtdID0gewogCXsgIkNMUlNQTFRJTlQiLAkJMHgwMSwgMHgwMSB9LAogCXsgIkNMUkNNRElOVCIsCQkweDAyLCAweDAyIH0sCiAJeyAiQ0xSU0VRSU5UIiwJCTB4MDQsIDB4MDQgfSwKQEAgLTk0LDcgKzk0LDcgQEAKIAkgICAgMHgwMywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBFUlJPUl9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBFUlJPUl9wYXJzZV90YWJsZVtdID0gewogCXsgIkRTQ1RNT1VUIiwJCTB4MDIsIDB4MDIgfSwKIAl7ICJJTExPUENPREUiLAkJMHgwNCwgMHgwNCB9LAogCXsgIlNRUEFSRVJSIiwJCTB4MDgsIDB4MDggfSwKQEAgLTExMSwyNCArMTExLDcgQEAKIAkgICAgMHgwNCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBDTFJFUlJfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJDTFJEU0NUTU9VVCIsCTB4MDIsIDB4MDIgfSwKLQl7ICJDTFJJTExPUENPREUiLAkweDA0LCAweDA0IH0sCi0JeyAiQ0xSU1FQQVJFUlIiLAkweDA4LCAweDA4IH0sCi0JeyAiQ0xSRFBBUkVSUiIsCQkweDEwLCAweDEwIH0sCi0JeyAiQ0xSTVBBUkVSUiIsCQkweDIwLCAweDIwIH0sCi0JeyAiQ0xSQ0lPQUNDRVNGQUlMIiwJMHg0MCwgMHg0MCB9LAotCXsgIkNMUkNJT1BBUkVSUiIsCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGRfY2xyZXJyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihDTFJFUlJfcGFyc2VfdGFibGUsIDcsICJDTFJFUlIiLAotCSAgICAweDA0LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IEhDTlRSTF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBIQ05UUkxfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJDSElQUlNUIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJDSElQUlNUQUNLIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJJTlRFTiIsCQkweDAyLCAweDAyIH0sCkBAIC0xNjAsNyArMTQzLDcgQEAKIAkgICAgMHgwOCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBIU19NQUlMQk9YX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IEhTX01BSUxCT1hfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJFTklOVF9DT0FMRVNDRSIsCTB4NDAsIDB4NDAgfSwKIAl7ICJIT1NUX1RRSU5QT1MiLAkweDgwLCAweDgwIH0KIH07CkBAIC0xNzIsNyArMTU1LDcgQEAKIAkgICAgMHgwYiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTRVFJTlRTVEFUX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNFUUlOVFNUQVRfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJTRVFfU1BMVElOVCIsCTB4MDEsIDB4MDEgfSwKIAl7ICJTRVFfUENJSU5UIiwJCTB4MDIsIDB4MDIgfSwKIAl7ICJTRVFfU0NTSUlOVCIsCTB4MDQsIDB4MDQgfSwKQEAgLTE4Nyw3ICsxNzAsNyBAQAogCSAgICAweDBjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENMUlNFUUlOVFNUQVRfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgQ0xSU0VRSU5UU1RBVF9wYXJzZV90YWJsZVtdID0gewogCXsgIkNMUlNFUV9TUExUSU5UIiwJMHgwMSwgMHgwMSB9LAogCXsgIkNMUlNFUV9QQ0lJTlQiLAkweDAyLCAweDAyIH0sCiAJeyAiQ0xSU0VRX1NDU0lJTlQiLAkweDA0LCAweDA0IH0sCkBAIC0yMzAsNyArMjEzLDcgQEAKIAkgICAgMHgxNCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBRT0ZGX0NUTFNUQV9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBRT0ZGX0NUTFNUQV9wYXJzZV90YWJsZVtdID0gewogCXsgIlNDQl9RU0laRV80IiwJMHgwMCwgMHgwZiB9LAogCXsgIlNDQl9RU0laRV84IiwJMHgwMSwgMHgwZiB9LAogCXsgIlNDQl9RU0laRV8xNiIsCTB4MDIsIDB4MGYgfSwKQEAgLTI1OCw3ICsyNDEsNyBAQAogCSAgICAweDE2LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IElOVENUTF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBJTlRDVExfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJTUExUSU5URU4iLAkJMHgwMSwgMHgwMSB9LAogCXsgIlNFUUlOVEVOIiwJCTB4MDIsIDB4MDIgfSwKIAl7ICJTQ1NJSU5URU4iLAkJMHgwNCwgMHgwNCB9LApAQCAtMjc2LDcgKzI1OSw3IEBACiAJICAgIDB4MTgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgREZDTlRSTF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBERkNOVFJMX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiRElSRUNUSU9ORU4iLAkweDAxLCAweDAxIH0sCiAJeyAiRklGT0ZMVVNIIiwJCTB4MDIsIDB4MDIgfSwKIAl7ICJGSUZPRkxVU0hBQ0siLAkweDAyLCAweDAyIH0sCkBAIC0yOTcsNyArMjgwLDcgQEAKIAkgICAgMHgxOSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBEU0NPTU1BTkQwX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IERTQ09NTUFORDBfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJDSU9QQVJDS0VOIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJESVNBQkxFX1RXQVRFIiwJMHgwMiwgMHgwMiB9LAogCXsgIkVYVFJFUUxDSyIsCQkweDEwLCAweDEwIH0sCkBAIC0zMTMsNyArMjk2LDcgQEAKIAkgICAgMHgxOSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBERlNUQVRVU19wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBERlNUQVRVU19wYXJzZV90YWJsZVtdID0gewogCXsgIkZJRk9FTVAiLAkJMHgwMSwgMHgwMSB9LAogCXsgIkZJRk9GVUxMIiwJCTB4MDIsIDB4MDIgfSwKIAl7ICJERlRIUkVTSCIsCQkweDA0LCAweDA0IH0sCkBAIC0zMzAsNyArMzEzLDcgQEAKIAkgICAgMHgxYSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTR19DQUNIRV9TSEFET1dfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0dfQ0FDSEVfU0hBRE9XX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiTEFTVF9TRUdfRE9ORSIsCTB4MDEsIDB4MDEgfSwKIAl7ICJMQVNUX1NFRyIsCQkweDAyLCAweDAyIH0sCiAJeyAiT0REX1NFRyIsCQkweDA0LCAweDA0IH0sCkBAIC0zNDQsMjAgKzMyNyw3IEBACiAJICAgIDB4MWIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgQVJCQ1RMX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiVVNFX1RJTUUiLAkJMHgwNywgMHgwNyB9LAotCXsgIlJFVFJZX1NXRU4iLAkJMHgwOCwgMHgwOCB9LAotCXsgIlJFU0VUX0hBUkIiLAkJMHg4MCwgMHg4MCB9Ci19OwotCi1pbnQKLWFoZF9hcmJjdGxfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKEFSQkNUTF9wYXJzZV90YWJsZSwgMywgIkFSQkNUTCIsCi0JICAgIDB4MWIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0dfQ0FDSEVfUFJFX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNHX0NBQ0hFX1BSRV9wYXJzZV90YWJsZVtdID0gewogCXsgIkxBU1RfU0VHIiwJCTB4MDIsIDB4MDIgfSwKIAl7ICJPRERfU0VHIiwJCTB4MDQsIDB4MDQgfSwKIAl7ICJTR19BRERSX01BU0siLAkweGY4LCAweGY4IH0KQEAgLTM3OCwyMCArMzQ4LDYgQEAKIH0KIAogaW50Ci1haGRfdHlwZXB0cl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlRZUEVQVFIiLAotCSAgICAweDIwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF90YWdwdHJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJUQUdQVFIiLAotCSAgICAweDIxLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKIGFoZF9sdW5wdHJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQogewogCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJMVU5QVFIiLApAQCAtMzk5LDIwICszNTUsNiBAQAogfQogCiBpbnQKLWFoZF9kYXRhbGVucHRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiREFUQUxFTlBUUiIsCi0JICAgIDB4MjMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX3N0YXRsZW5wdHJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTVEFUTEVOUFRSIiwKLQkgICAgMHgyNCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50CiBhaGRfY21kbGVucHRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKIHsKIAlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ01ETEVOUFRSIiwKQEAgLTQ0OCwxMyArMzkwLDYgQEAKIH0KIAogaW50Ci1haGRfaWRwdHJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJJRFBUUiIsCi0JICAgIDB4MmEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAogYWhkX2FicnRieXRlcHRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKIHsKIAlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQUJSVEJZVEVQVFIiLApAQCAtNDY4LDI4ICs0MDMsNyBAQAogCSAgICAweDJjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1pbnQKLWFoZF9tYXhjbWRieXRlc19wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIk1BWENNREJZVEVTIiwKLQkgICAgMHgyZCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfbWF4Y21kMnJjdl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIk1BWENNRDJSQ1YiLAotCSAgICAweDJlLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9zaG9ydHRocmVzaF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNIT1JUVEhSRVNIIiwKLQkgICAgMHgyZiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBMVU5MRU5fcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgTFVOTEVOX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiSUxVTkxFTiIsCQkweDBmLCAweDBmIH0sCiAJeyAiVExVTkxFTiIsCQkweGYwLCAweGYwIH0KIH07CkBAIC01MjIsNDkgKzQzNiw3IEBACiAJICAgIDB4MzMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLWludAotYWhkX2xxcnN2ZDAxX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiTFFSU1ZEMDEiLAotCSAgICAweDM0LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9scXJzdmQxNl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkxRUlNWRDE2IiwKLQkgICAgMHgzNSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfbHFyc3ZkMTdfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJMUVJTVkQxNyIsCi0JICAgIDB4MzYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2NtZHJzdmQwX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ01EUlNWRDAiLAotCSAgICAweDM3LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IExRQ1RMMF9wYXJzZV90YWJsZVtdID0gewotCXsgIkxRMElOSVRHQ0xUIiwJMHgwMywgMHgwMyB9LAotCXsgIkxRMFRBUkdDTFQiLAkJMHgwYywgMHgwYyB9LAotCXsgIkxRSUlOSVRHQ0xUIiwJMHgzMCwgMHgzMCB9LAotCXsgIkxRSVRBUkdDTFQiLAkJMHhjMCwgMHhjMCB9Ci19OwotCi1pbnQKLWFoZF9scWN0bDBfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKExRQ1RMMF9wYXJzZV90YWJsZSwgNCwgIkxRQ1RMMCIsCi0JICAgIDB4MzgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgTFFDVEwxX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IExRQ1RMMV9wYXJzZV90YWJsZVtdID0gewogCXsgIkFCT1JUUEVORElORyIsCTB4MDEsIDB4MDEgfSwKIAl7ICJTSU5HTEVDTUQiLAkJMHgwMiwgMHgwMiB9LAogCXsgIlBDSTJQQ0kiLAkJMHgwNCwgMHgwNCB9CkBAIC01NzcsMjMgKzQ0OSw3IEBACiAJICAgIDB4MzgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0NTQklTVDBfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJPU0JJU1RSVU4iLAkJMHgwMSwgMHgwMSB9LAotCXsgIk9TQklTVERPTkUiLAkJMHgwMiwgMHgwMiB9LAotCXsgIk9TQklTVEVSUiIsCQkweDA0LCAweDA0IH0sCi0JeyAiR1NCSVNUUlVOIiwJCTB4MTAsIDB4MTAgfSwKLQl7ICJHU0JJU1RET05FIiwJCTB4MjAsIDB4MjAgfSwKLQl7ICJHU0JJU1RFUlIiLAkJMHg0MCwgMHg0MCB9Ci19OwotCi1pbnQKLWFoZF9zY3NiaXN0MF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoU0NTQklTVDBfcGFyc2VfdGFibGUsIDYsICJTQ1NCSVNUMCIsCi0JICAgIDB4MzksIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgTFFDVEwyX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IExRQ1RMMl9wYXJzZV90YWJsZVtdID0gewogCXsgIkxRT1BBVVNFIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJMUU9UT0lETEUiLAkJMHgwMiwgMHgwMiB9LAogCXsgIkxRT0NPTlRJTlVFIiwJMHgwNCwgMHgwNCB9LApAQCAtNjExLDIwICs0NjcsNyBAQAogCSAgICAweDM5LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNDU0JJU1QxX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiTlRCSVNUUlVOIiwJCTB4MDEsIDB4MDEgfSwKLQl7ICJOVEJJU1RET05FIiwJCTB4MDIsIDB4MDIgfSwKLQl7ICJOVEJJU1RFUlIiLAkJMHgwNCwgMHgwNCB9Ci19OwotCi1pbnQKLWFoZF9zY3NiaXN0MV9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoU0NTQklTVDFfcGFyc2VfdGFibGUsIDMsICJTQ1NCSVNUMSIsCi0JICAgIDB4M2EsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0NTSVNFUTBfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0NTSVNFUTBfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJTQ1NJUlNUTyIsCQkweDAxLCAweDAxIH0sCiAJeyAiRk9SQ0VCVVNGUkVFIiwJMHgxMCwgMHgxMCB9LAogCXsgIkVOQVJCTyIsCQkweDIwLCAweDIwIH0sCkBAIC02MzksNyArNDgyLDcgQEAKIAkgICAgMHgzYSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTQ1NJU0VRMV9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTQ1NJU0VRMV9wYXJzZV90YWJsZVtdID0gewogCXsgIkFMVFNUSU0iLAkJMHgwMSwgMHgwMSB9LAogCXsgIkVOQVVUT0FUTlAiLAkJMHgwMiwgMHgwMiB9LAogCXsgIk1BTlVBTFAiLAkJMHgwYywgMHgwYyB9LApAQCAtNjU1LDcgKzQ5OCw3IEBACiAJICAgIDB4M2IsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU1hGUkNUTDBfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU1hGUkNUTDBfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJTUElPRU4iLAkJMHgwOCwgMHgwOCB9LAogCXsgIkJJT1NDQU5DRUxFTiIsCTB4MTAsIDB4MTAgfSwKIAl7ICJERlBFWFAiLAkJMHg0MCwgMHg0MCB9LApAQCAtNjY5LDIxICs1MTIsNyBAQAogCSAgICAweDNjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1pbnQKLWFoZF9kbGNvdW50X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiRExDT1VOVCIsCi0JICAgIDB4M2MsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2J1c2luaXRpZF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkJVU0lOSVRJRCIsCi0JICAgIDB4M2MsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU1hGUkNUTDFfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU1hGUkNUTDFfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJTVFBXRU4iLAkJMHgwMSwgMHgwMSB9LAogCXsgIkFDVE5FR0VOIiwJCTB4MDIsIDB4MDIgfSwKIAl7ICJFTlNUSU1FUiIsCQkweDA0LCAweDA0IH0sCkBAIC03MDAsMjcgKzUyOSw3IEBACiAJICAgIDB4M2QsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLWludAotYWhkX2J1c3RhcmdpZF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkJVU1RBUkdJRCIsCi0JICAgIDB4M2UsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU1hGUkNUTDJfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJBU1UiLAkJMHgwNywgMHgwNyB9LAotCXsgIkNNRERNQUVOIiwJCTB4MDgsIDB4MDggfSwKLQl7ICJBVVRPUlNURElTIiwJCTB4MTAsIDB4MTAgfQotfTsKLQotaW50Ci1haGRfc3hmcmN0bDJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKFNYRlJDVEwyX3BhcnNlX3RhYmxlLCAzLCAiU1hGUkNUTDIiLAotCSAgICAweDNlLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IERGRlNUQVRfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgREZGU1RBVF9wYXJzZV90YWJsZVtdID0gewogCXsgIkNVUlJGSUZPXzAiLAkJMHgwMCwgMHgwMyB9LAogCXsgIkNVUlJGSUZPXzEiLAkJMHgwMSwgMHgwMyB9LAogCXsgIkNVUlJGSUZPX05PTkUiLAkweDAzLCAweDAzIH0sCkBAIC03MzYsNyArNTQ1LDE0IEBACiAJICAgIDB4M2YsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0NTSVNJR09fcGFyc2VfdGFibGVbXSA9IHsKK2ludAorYWhkX211bHRhcmdpZF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCit7CisJcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIk1VTFRBUkdJRCIsCisJICAgIDB4NDAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Cit9CisKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0NTSVNJR09fcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJQX0RBVEFPVVQiLAkJMHgwMCwgMHhlMCB9LAogCXsgIlBfREFUQU9VVF9EVCIsCTB4MjAsIDB4ZTAgfSwKIAl7ICJQX0RBVEFJTiIsCQkweDQwLCAweGUwIH0sCkBAIC03NjMsMTQgKzU3OSw3IEBACiAJICAgIDB4NDAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLWludAotYWhkX211bHRhcmdpZF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIk1VTFRBUkdJRCIsCi0JICAgIDB4NDAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0NTSVNJR0lfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0NTSVNJR0lfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJQX0RBVEFPVVQiLAkJMHgwMCwgMHhlMCB9LAogCXsgIlBfREFUQU9VVF9EVCIsCTB4MjAsIDB4ZTAgfSwKIAl7ICJQX0RBVEFJTiIsCQkweDQwLCAweGUwIH0sCkBAIC03OTcsNyArNjA2LDcgQEAKIAkgICAgMHg0MSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTQ1NJUEhBU0VfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0NTSVBIQVNFX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiREFUQV9PVVRfUEhBU0UiLAkweDAxLCAweDAzIH0sCiAJeyAiREFUQV9JTl9QSEFTRSIsCTB4MDIsIDB4MDMgfSwKIAl7ICJEQVRBX1BIQVNFX01BU0siLAkweDAzLCAweDAzIH0sCkBAIC04MTUsMTMgKzYyNCw2IEBACiB9CiAKIGludAotYWhkX3Njc2lkYXQwX2ltZ19wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDU0lEQVQwX0lNRyIsCi0JICAgIDB4NDMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAogYWhkX3Njc2lkYXRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQogewogCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ1NJREFUIiwKQEAgLTgzNSw3ICs2MzcsNyBAQAogCSAgICAweDQ2LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFRBUkdJRElOX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFRBUkdJRElOX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiVEFSR0lEIiwJCTB4MGYsIDB4MGYgfSwKIAl7ICJDTEtPVVQiLAkJMHg4MCwgMHg4MCB9CiB9OwpAQCAtODQ3LDcgKzY0OSw3IEBACiAJICAgIDB4NDgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0VMSURfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0VMSURfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJPTkVCSVQiLAkJMHgwOCwgMHgwOCB9LAogCXsgIlNFTElEX01BU0siLAkJMHhmMCwgMHhmMCB9CiB9OwpAQCAtODU5LDcgKzY2MSw3IEBACiAJICAgIDB4NDksIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgT1BUSU9OTU9ERV9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBPUFRJT05NT0RFX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiQVVUT19NU0dPVVRfREUiLAkweDAyLCAweDAyIH0sCiAJeyAiRU5ER0ZPUk1DSEsiLAkweDA0LCAweDA0IH0sCiAJeyAiQlVTRlJFRVJFViIsCQkweDEwLCAweDEwIH0sCkBAIC04NzYsNyArNjc4LDcgQEAKIAkgICAgMHg0YSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTQkxLQ1RMX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNCTEtDVExfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJTRUxXSURFIiwJCTB4MDIsIDB4MDIgfSwKIAl7ICJFTkFCMjAiLAkJMHgwNCwgMHgwNCB9LAogCXsgIkVOQUI0MCIsCQkweDA4LCAweDA4IH0sCkBAIC04OTEsMjQgKzY5Myw3IEBACiAJICAgIDB4NGEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgQ0xSU0lOVDBfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJDTFJBUkJETyIsCQkweDAxLCAweDAxIH0sCi0JeyAiQ0xSU1BJT1JEWSIsCQkweDAyLCAweDAyIH0sCi0JeyAiQ0xST1ZFUlJVTiIsCQkweDA0LCAweDA0IH0sCi0JeyAiQ0xSSU9FUlIiLAkJMHgwOCwgMHgwOCB9LAotCXsgIkNMUlNFTElOR08iLAkJMHgxMCwgMHgxMCB9LAotCXsgIkNMUlNFTERJIiwJCTB4MjAsIDB4MjAgfSwKLQl7ICJDTFJTRUxETyIsCQkweDQwLCAweDQwIH0KLX07Ci0KLWludAotYWhkX2NscnNpbnQwX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihDTFJTSU5UMF9wYXJzZV90YWJsZSwgNywgIkNMUlNJTlQwIiwKLQkgICAgMHg0YiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTU1RBVDBfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU1NUQVQwX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiQVJCRE8iLAkJMHgwMSwgMHgwMSB9LAogCXsgIlNQSU9SRFkiLAkJMHgwMiwgMHgwMiB9LAogCXsgIk9WRVJSVU4iLAkJMHgwNCwgMHgwNCB9LApAQCAtOTI2LDcgKzcxMSw3IEBACiAJICAgIDB4NGIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0lNT0RFMF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTSU1PREUwX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiRU5BUkJETyIsCQkweDAxLCAweDAxIH0sCiAJeyAiRU5TUElPUkRZIiwJCTB4MDIsIDB4MDIgfSwKIAl7ICJFTk9WRVJSVU4iLAkJMHgwNCwgMHgwNCB9LApAQCAtOTQzLDI0ICs3MjgsMjQgQEAKIAkgICAgMHg0YiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBDTFJTSU5UMV9wYXJzZV90YWJsZVtdID0gewotCXsgIkNMUlJFUUlOSVQiLAkJMHgwMSwgMHgwMSB9LAotCXsgIkNMUlNUUkIyRkFTVCIsCTB4MDIsIDB4MDIgfSwKLQl7ICJDTFJTQ1NJUEVSUiIsCTB4MDQsIDB4MDQgfSwKLQl7ICJDTFJCVVNGUkVFIiwJCTB4MDgsIDB4MDggfSwKLQl7ICJDTFJTQ1NJUlNUSSIsCTB4MjAsIDB4MjAgfSwKLQl7ICJDTFJBVE5PIiwJCTB4NDAsIDB4NDAgfSwKLQl7ICJDTFJTRUxUSU1FTyIsCTB4ODAsIDB4ODAgfQorc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBDTFJTSU5UMF9wYXJzZV90YWJsZVtdID0geworCXsgIkNMUkFSQkRPIiwJCTB4MDEsIDB4MDEgfSwKKwl7ICJDTFJTUElPUkRZIiwJCTB4MDIsIDB4MDIgfSwKKwl7ICJDTFJPVkVSUlVOIiwJCTB4MDQsIDB4MDQgfSwKKwl7ICJDTFJJT0VSUiIsCQkweDA4LCAweDA4IH0sCisJeyAiQ0xSU0VMSU5HTyIsCQkweDEwLCAweDEwIH0sCisJeyAiQ0xSU0VMREkiLAkJMHgyMCwgMHgyMCB9LAorCXsgIkNMUlNFTERPIiwJCTB4NDAsIDB4NDAgfQogfTsKIAogaW50Ci1haGRfY2xyc2ludDFfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQorYWhkX2NscnNpbnQwX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKIHsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihDTFJTSU5UMV9wYXJzZV90YWJsZSwgNywgIkNMUlNJTlQxIiwKLQkgICAgMHg0YywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKKwlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihDTFJTSU5UMF9wYXJzZV90YWJsZSwgNywgIkNMUlNJTlQwIiwKKwkgICAgMHg0YiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTU1RBVDFfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU1NUQVQxX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiUkVRSU5JVCIsCQkweDAxLCAweDAxIH0sCiAJeyAiU1RSQjJGQVNUIiwJCTB4MDIsIDB4MDIgfSwKIAl7ICJTQ1NJUEVSUiIsCQkweDA0LCAweDA0IH0sCkBAIC05NzgsNyArNzYzLDI0IEBACiAJICAgIDB4NGMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU1NUQVQyX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENMUlNJTlQxX3BhcnNlX3RhYmxlW10gPSB7CisJeyAiQ0xSUkVRSU5JVCIsCQkweDAxLCAweDAxIH0sCisJeyAiQ0xSU1RSQjJGQVNUIiwJMHgwMiwgMHgwMiB9LAorCXsgIkNMUlNDU0lQRVJSIiwJMHgwNCwgMHgwNCB9LAorCXsgIkNMUkJVU0ZSRUUiLAkJMHgwOCwgMHgwOCB9LAorCXsgIkNMUlNDU0lSU1RJIiwJMHgyMCwgMHgyMCB9LAorCXsgIkNMUkFUTk8iLAkJMHg0MCwgMHg0MCB9LAorCXsgIkNMUlNFTFRJTUVPIiwJMHg4MCwgMHg4MCB9Cit9OworCitpbnQKK2FoZF9jbHJzaW50MV9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCit7CisJcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoQ0xSU0lOVDFfcGFyc2VfdGFibGUsIDcsICJDTFJTSU5UMSIsCisJICAgIDB4NGMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Cit9CisKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU1NUQVQyX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiQlVTRlJFRV9MUU8iLAkweDQwLCAweGMwIH0sCiAJeyAiQlVTRlJFRV9ERkYwIiwJMHg4MCwgMHhjMCB9LAogCXsgIkJVU0ZSRUVfREZGMSIsCTB4YzAsIDB4YzAgfSwKQEAgLTk5OCwyMCArODAwLDcgQEAKIAkgICAgMHg0ZCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTSU1PREUyX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiRU5ETUFET05FIiwJCTB4MDEsIDB4MDEgfSwKLQl7ICJFTlNET05FIiwJCTB4MDIsIDB4MDIgfSwKLQl7ICJFTldJREVfUkVTIiwJCTB4MDQsIDB4MDQgfQotfTsKLQotaW50Ci1haGRfc2ltb2RlMl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoU0lNT0RFMl9wYXJzZV90YWJsZSwgMywgIlNJTU9ERTIiLAotCSAgICAweDRkLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENMUlNJTlQyX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENMUlNJTlQyX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiQ0xSRE1BRE9ORSIsCQkweDAxLCAweDAxIH0sCiAJeyAiQ0xSU0RPTkUiLAkJMHgwMiwgMHgwMiB9LAogCXsgIkNMUldJREVfUkVTIiwJMHgwNCwgMHgwNCB9LApAQCAtMTAyNSw3ICs4MTQsNyBAQAogCSAgICAweDRkLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFBFUlJESUFHX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFBFUlJESUFHX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiRFRFUlIiLAkJMHgwMSwgMHgwMSB9LAogCXsgIkRHRk9STUVSUiIsCQkweDAyLCAweDAyIH0sCiAJeyAiQ1JDRVJSIiwJCTB4MDQsIDB4MDQgfSwKQEAgLTEwNjQsNyArODUzLDcgQEAKIAkgICAgMHg0ZiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBMUUlTVEFUMF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBMUUlTVEFUMF9wYXJzZV90YWJsZVtdID0gewogCXsgIkxRSUFUTkNNRCIsCQkweDAxLCAweDAxIH0sCiAJeyAiTFFJQVROTFEiLAkJMHgwMiwgMHgwMiB9LAogCXsgIkxRSUJBRExRVCIsCQkweDA0LCAweDA0IH0sCkBAIC0xMDgwLDIzICs4NjksNyBAQAogCSAgICAweDUwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENMUkxRSUlOVDBfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJDTFJMUUlBVE5DTUQiLAkweDAxLCAweDAxIH0sCi0JeyAiQ0xSTFFJQVROTFEiLAkweDAyLCAweDAyIH0sCi0JeyAiQ0xSTFFJQkFETFFUIiwJMHgwNCwgMHgwNCB9LAotCXsgIkNMUkxRSUNSQ1QyIiwJMHgwOCwgMHgwOCB9LAotCXsgIkNMUkxRSUNSQ1QxIiwJMHgxMCwgMHgxMCB9LAotCXsgIkNMUkxRSUFUTlFBUyIsCTB4MjAsIDB4MjAgfQotfTsKLQotaW50Ci1haGRfY2xybHFpaW50MF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoQ0xSTFFJSU5UMF9wYXJzZV90YWJsZSwgNiwgIkNMUkxRSUlOVDAiLAotCSAgICAweDUwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IExRSU1PREUwX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IExRSU1PREUwX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiRU5MUUlBVE5DTUQiLAkweDAxLCAweDAxIH0sCiAJeyAiRU5MUUlBVE5MUSIsCQkweDAyLCAweDAyIH0sCiAJeyAiRU5MUUlCQURMUVQiLAkweDA0LCAweDA0IH0sCkBAIC0xMTEyLDcgKzg4NSwyMyBAQAogCSAgICAweDUwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IExRSU1PREUxX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENMUkxRSUlOVDBfcGFyc2VfdGFibGVbXSA9IHsKKwl7ICJDTFJMUUlBVE5DTUQiLAkweDAxLCAweDAxIH0sCisJeyAiQ0xSTFFJQVROTFEiLAkweDAyLCAweDAyIH0sCisJeyAiQ0xSTFFJQkFETFFUIiwJMHgwNCwgMHgwNCB9LAorCXsgIkNMUkxRSUNSQ1QyIiwJMHgwOCwgMHgwOCB9LAorCXsgIkNMUkxRSUNSQ1QxIiwJMHgxMCwgMHgxMCB9LAorCXsgIkNMUkxRSUFUTlFBUyIsCTB4MjAsIDB4MjAgfQorfTsKKworaW50CithaGRfY2xybHFpaW50MF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCit7CisJcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoQ0xSTFFJSU5UMF9wYXJzZV90YWJsZSwgNiwgIkNMUkxRSUlOVDAiLAorCSAgICAweDUwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOworfQorCitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IExRSU1PREUxX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiRU5MUUlPVkVSSV9OTFEiLAkweDAxLCAweDAxIH0sCiAJeyAiRU5MUUlPVkVSSV9MUSIsCTB4MDIsIDB4MDIgfSwKIAl7ICJFTkxRSUJBRExRSSIsCTB4MDQsIDB4MDQgfSwKQEAgLTExMzAsNyArOTE5LDcgQEAKIAkgICAgMHg1MSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBMUUlTVEFUMV9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBMUUlTVEFUMV9wYXJzZV90YWJsZVtdID0gewogCXsgIkxRSU9WRVJJX05MUSIsCTB4MDEsIDB4MDEgfSwKIAl7ICJMUUlPVkVSSV9MUSIsCTB4MDIsIDB4MDIgfSwKIAl7ICJMUUlCQURMUUkiLAkJMHgwNCwgMHgwNCB9LApAQCAtMTE0OCw3ICs5MzcsNyBAQAogCSAgICAweDUxLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENMUkxRSUlOVDFfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgQ0xSTFFJSU5UMV9wYXJzZV90YWJsZVtdID0gewogCXsgIkNMUkxRSU9WRVJJX05MUSIsCTB4MDEsIDB4MDEgfSwKIAl7ICJDTFJMUUlPVkVSSV9MUSIsCTB4MDIsIDB4MDIgfSwKIAl7ICJDTFJMUUlCQURMUUkiLAkweDA0LCAweDA0IH0sCkBAIC0xMTY2LDcgKzk1NSw3IEBACiAJICAgIDB4NTEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgTFFJU1RBVDJfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgTFFJU1RBVDJfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJMUUlHU0FWQUlMIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJMUUlTVE9QQ01EIiwJCTB4MDIsIDB4MDIgfSwKIAl7ICJMUUlTVE9QTFEiLAkJMHgwNCwgMHgwNCB9LApAQCAtMTE4NCw3ICs5NzMsNyBAQAogCSAgICAweDUyLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNTVEFUM19wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTU1RBVDNfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJPU1JBTVBFUlIiLAkJMHgwMSwgMHgwMSB9LAogCXsgIk5UUkFNUEVSUiIsCQkweDAyLCAweDAyIH0KIH07CkBAIC0xMTk2LDcgKzk4NSw3IEBACiAJICAgIDB4NTMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0lNT0RFM19wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTSU1PREUzX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiRU5PU1JBTVBFUlIiLAkweDAxLCAweDAxIH0sCiAJeyAiRU5OVFJBTVBFUlIiLAkweDAyLCAweDAyIH0KIH07CkBAIC0xMjA4LDcgKzk5Nyw3IEBACiAJICAgIDB4NTMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgQ0xSU0lOVDNfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgQ0xSU0lOVDNfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJDTFJPU1JBTVBFUlIiLAkweDAxLCAweDAxIH0sCiAJeyAiQ0xSTlRSQU1QRVJSIiwJMHgwMiwgMHgwMiB9CiB9OwpAQCAtMTIyMCw3ICsxMDA5LDcgQEAKIAkgICAgMHg1MywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBMUU9TVEFUMF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBMUU9TVEFUMF9wYXJzZV90YWJsZVtdID0gewogCXsgIkxRT1RDUkMiLAkJMHgwMSwgMHgwMSB9LAogCXsgIkxRT0FUTlBLVCIsCQkweDAyLCAweDAyIH0sCiAJeyAiTFFPQVROTFEiLAkJMHgwNCwgMHgwNCB9LApAQCAtMTIzNSw3ICsxMDI0LDcgQEAKIAkgICAgMHg1NCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBDTFJMUU9JTlQwX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENMUkxRT0lOVDBfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJDTFJMUU9UQ1JDIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJDTFJMUU9BVE5QS1QiLAkweDAyLCAweDAyIH0sCiAJeyAiQ0xSTFFPQVROTFEiLAkweDA0LCAweDA0IH0sCkBAIC0xMjUwLDcgKzEwMzksNyBAQAogCSAgICAweDU0LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IExRT01PREUwX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IExRT01PREUwX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiRU5MUU9UQ1JDIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJFTkxRT0FUTlBLVCIsCTB4MDIsIDB4MDIgfSwKIAl7ICJFTkxRT0FUTkxRIiwJCTB4MDQsIDB4MDQgfSwKQEAgLTEyNjUsNyArMTA1NCw3IEBACiAJICAgIDB4NTQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgTFFPTU9ERTFfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgTFFPTU9ERTFfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJFTkxRT1BIQUNIR0lOUEtUIiwJMHgwMSwgMHgwMSB9LAogCXsgIkVOTFFPQlVTRlJFRSIsCTB4MDIsIDB4MDIgfSwKIAl7ICJFTkxRT0JBRFFBUyIsCTB4MDQsIDB4MDQgfSwKQEAgLTEyODAsNyArMTA2OSw3IEBACiAJICAgIDB4NTUsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgTFFPU1RBVDFfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgTFFPU1RBVDFfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJMUU9QSEFDSEdJTlBLVCIsCTB4MDEsIDB4MDEgfSwKIAl7ICJMUU9CVVNGUkVFIiwJCTB4MDIsIDB4MDIgfSwKIAl7ICJMUU9CQURRQVMiLAkJMHgwNCwgMHgwNCB9LApAQCAtMTI5NSw3ICsxMDg0LDcgQEAKIAkgICAgMHg1NSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBDTFJMUU9JTlQxX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENMUkxRT0lOVDFfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJDTFJMUU9QSEFDSEdJTlBLVCIsCTB4MDEsIDB4MDEgfSwKIAl7ICJDTFJMUU9CVVNGUkVFIiwJMHgwMiwgMHgwMiB9LAogCXsgIkNMUkxRT0JBRFFBUyIsCTB4MDQsIDB4MDQgfSwKQEAgLTEzMTAsNyArMTA5OSw3IEBACiAJICAgIDB4NTUsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgTFFPU1RBVDJfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgTFFPU1RBVDJfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJMUU9TVE9QMCIsCQkweDAxLCAweDAxIH0sCiAJeyAiTFFPUEhBQ0hHT1VUUEtUIiwJMHgwMiwgMHgwMiB9LAogCXsgIkxRT1dBSVRGSUZPIiwJMHgxMCwgMHgxMCB9LApAQCAtMTMzMSw3ICsxMTIwLDcgQEAKIAkgICAgMHg1NiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTSU1PREUxX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNJTU9ERTFfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJFTlJFUUlOSVQiLAkJMHgwMSwgMHgwMSB9LAogCXsgIkVOU1RSQjJGQVNUIiwJMHgwMiwgMHgwMiB9LAogCXsgIkVOU0NTSVBFUlIiLAkJMHgwNCwgMHgwNCB9LApAQCAtMTM1Niw3ICsxMTQ1LDcgQEAKIAkgICAgMHg1OCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBERkZTWEZSQ1RMX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IERGRlNYRlJDVExfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJSU1RDSE4iLAkJMHgwMSwgMHgwMSB9LAogCXsgIkNMUkNITiIsCQkweDAyLCAweDAyIH0sCiAJeyAiQ0xSU0hDTlQiLAkJMHgwNCwgMHgwNCB9LApAQCAtMTM3MCwxNSArMTE1OSwxNyBAQAogCSAgICAweDVhLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IExRT1NDU0NUTF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBMUU9TQ1NDVExfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJMUU9OT0NIS09WRVIiLAkweDAxLCAweDAxIH0sCisJeyAiTFFPTk9IT0xETEFDSyIsCTB4MDIsIDB4MDIgfSwKKwl7ICJMUU9CVVNFVERMWSIsCTB4NDAsIDB4NDAgfSwKIAl7ICJMUU9IMkFfVkVSU0lPTiIsCTB4ODAsIDB4ODAgfQogfTsKIAogaW50CiBhaGRfbHFvc2NzY3RsX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKIHsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihMUU9TQ1NDVExfcGFyc2VfdGFibGUsIDIsICJMUU9TQ1NDVEwiLAorCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKExRT1NDU0NUTF9wYXJzZV90YWJsZSwgNCwgIkxRT1NDU0NUTCIsCiAJICAgIDB4NWEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKQEAgLTEzODksNyArMTE4MCw3IEBACiAJICAgIDB4NWEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgQ0xSU0VRSU5UU1JDX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENMUlNFUUlOVFNSQ19wYXJzZV90YWJsZVtdID0gewogCXsgIkNMUkNGRzRUQ01EIiwJMHgwMSwgMHgwMSB9LAogCXsgIkNMUkNGRzRJQ01EIiwJMHgwMiwgMHgwMiB9LAogCXsgIkNMUkNGRzRUU1RBVCIsCTB4MDQsIDB4MDQgfSwKQEAgLTE0MDYsNyArMTE5Nyw3IEBACiAJICAgIDB4NWIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0VRSU5UU1JDX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNFUUlOVFNSQ19wYXJzZV90YWJsZVtdID0gewogCXsgIkNGRzRUQ01EIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJDRkc0SUNNRCIsCQkweDAyLCAweDAyIH0sCiAJeyAiQ0ZHNFRTVEFUIiwJCTB4MDQsIDB4MDQgfSwKQEAgLTE0MjMsMTQgKzEyMTQsNyBAQAogCSAgICAweDViLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1pbnQKLWFoZF9jdXJyc2NiX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ1VSUlNDQiIsCi0JICAgIDB4NWMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0VRSU1PREVfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0VRSU1PREVfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJFTkNGRzRUQ01EIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJFTkNGRzRJQ01EIiwJCTB4MDIsIDB4MDIgfSwKIAl7ICJFTkNGRzRUU1RBVCIsCTB4MDQsIDB4MDQgfSwKQEAgLTE0NDcsNyArMTIzMSwxNCBAQAogCSAgICAweDVjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IE1ERkZTVEFUX3BhcnNlX3RhYmxlW10gPSB7CitpbnQKK2FoZF9jdXJyc2NiX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKK3sKKwlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ1VSUlNDQiIsCisJICAgIDB4NWMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Cit9CisKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgTURGRlNUQVRfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJGSUZPRlJFRSIsCQkweDAxLCAweDAxIH0sCiAJeyAiREFUQUlORklGTyIsCQkweDAyLCAweDAyIH0sCiAJeyAiRExaRVJPIiwJCTB4MDQsIDB4MDQgfSwKQEAgLTE0NjQsMjQgKzEyNTUsNiBAQAogCSAgICAweDVkLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENSQ0NPTlRST0xfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJDUkNWQUxDSEtFTiIsCTB4NDAsIDB4NDAgfQotfTsKLQotaW50Ci1haGRfY3JjY29udHJvbF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoQ1JDQ09OVFJPTF9wYXJzZV90YWJsZSwgMSwgIkNSQ0NPTlRST0wiLAotCSAgICAweDVkLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9kZmZ0YWdfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJERkZUQUciLAotCSAgICAweDVlLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCiBpbnQKIGFoZF9sYXN0c2NiX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKIHsKQEAgLTE0ODksMzEgKzEyNjIsNiBAQAogCSAgICAweDVlLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNDU0lURVNUX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiU0VMX1RYUExMX0RFQlVHIiwJMHgwNCwgMHgwNCB9LAotCXsgIkNOVFJURVNUIiwJCTB4MDgsIDB4MDggfQotfTsKLQotaW50Ci1haGRfc2NzaXRlc3RfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKFNDU0lURVNUX3BhcnNlX3RhYmxlLCAyLCAiU0NTSVRFU1QiLAotCSAgICAweDVlLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IElPUEROQ1RMX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiUEROX0RJRkZTRU5TRSIsCTB4MDEsIDB4MDEgfSwKLQl7ICJQRE5fSURJU1QiLAkJMHgwNCwgMHgwNCB9LAotCXsgIkRJU0FCTEVfT0UiLAkJMHg4MCwgMHg4MCB9Ci19OwotCi1pbnQKLWFoZF9pb3BkbmN0bF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoSU9QRE5DVExfcGFyc2VfdGFibGUsIDMsICJJT1BETkNUTCIsCi0JICAgIDB4NWYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KIGludAogYWhkX3NoYWRkcl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCiB7CkBAIC0xNTI5LDEzICsxMjc3LDYgQEAKIH0KIAogaW50Ci1haGRfZGdycGNyY2lfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJER1JQQ1JDSSIsCi0JICAgIDB4NjAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAogYWhkX25lZ3BlcmlvZF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCiB7CiAJcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIk5FR1BFUklPRCIsCkBAIC0xNTQzLDIwICsxMjg0LDEzIEBACiB9CiAKIGludAotYWhkX3BhY2tjcmNpX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiUEFDS0NSQ0kiLAotCSAgICAweDYyLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKIGFoZF9uZWdvZmZzZXRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQogewogCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJORUdPRkZTRVQiLAogCSAgICAweDYyLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IE5FR1BQUk9QVFNfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgTkVHUFBST1BUU19wYXJzZV90YWJsZVtdID0gewogCXsgIlBQUk9QVF9JVVQiLAkJMHgwMSwgMHgwMSB9LAogCXsgIlBQUk9QVF9EVCIsCQkweDAyLCAweDAyIH0sCiAJeyAiUFBST1BUX1FBUyIsCQkweDA0LCAweDA0IH0sCkBAIC0xNTcwLDcgKzEzMDQsNyBAQAogCSAgICAweDYzLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IE5FR0NPTk9QVFNfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgTkVHQ09OT1BUU19wYXJzZV90YWJsZVtdID0gewogCXsgIldJREVYRkVSIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJFTkFVVE9BVE5PIiwJCTB4MDIsIDB4MDIgfSwKIAl7ICJFTkFVVE9BVE5JIiwJCTB4MDQsIDB4MDQgfSwKQEAgLTE2MDEsMjAgKzEzMzUsMjEgQEAKIAkgICAgMHg2NiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTQ1NDSEtOX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNDU0NIS05fcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJMU1RTR0NMUkRJUyIsCTB4MDEsIDB4MDEgfSwKIAl7ICJTSFZBTElEU1RESVMiLAkweDAyLCAweDAyIH0sCiAJeyAiREZGQUNUQ0xSIiwJCTB4MDQsIDB4MDQgfSwKIAl7ICJTRE9ORU1TS0RJUyIsCTB4MDgsIDB4MDggfSwKIAl7ICJXSURFUkVTRU4iLAkJMHgxMCwgMHgxMCB9LAogCXsgIkNVUlJGSUZPREVGIiwJMHgyMCwgMHgyMCB9LAotCXsgIlNUU0VMU0tJRERJUyIsCTB4NDAsIDB4NDAgfQorCXsgIlNUU0VMU0tJRERJUyIsCTB4NDAsIDB4NDAgfSwKKwl7ICJCSURJQ0hLRElTIiwJCTB4ODAsIDB4ODAgfQogfTsKIAogaW50CiBhaGRfc2NzY2hrbl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCiB7Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoU0NTQ0hLTl9wYXJzZV90YWJsZSwgNywgIlNDU0NIS04iLAorCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKFNDU0NIS05fcGFyc2VfdGFibGUsIDgsICJTQ1NDSEtOIiwKIAkgICAgMHg2NiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIApAQCAtMTYyNSwyMyArMTM2MCw2IEBACiAJICAgIDB4NjcsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgUExMOTYwQ1RMMF9wYXJzZV90YWJsZVtdID0gewotCXsgIlBMTF9FTkZCTSIsCQkweDAxLCAweDAxIH0sCi0JeyAiUExMX0RMUEYiLAkJMHgwMiwgMHgwMiB9LAotCXsgIlBMTF9FTkxQRiIsCQkweDA0LCAweDA0IH0sCi0JeyAiUExMX0VOTFVEIiwJCTB4MDgsIDB4MDggfSwKLQl7ICJQTExfTlMiLAkJMHgzMCwgMHgzMCB9LAotCXsgIlBMTF9QV0ROIiwJCTB4NDAsIDB4NDAgfSwKLQl7ICJQTExfVkNPU0VMIiwJCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGRfcGxsOTYwY3RsMF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoUExMOTYwQ1RMMF9wYXJzZV90YWJsZSwgNywgIlBMTDk2MENUTDAiLAotCSAgICAweDY4LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCiBpbnQKIGFoZF9zaGNudF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCiB7CkBAIC0xNjU2LDMzICsxMzc0LDYgQEAKIAkgICAgMHg2OSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBQTEw5NjBDVEwxX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiUExMX1JTVCIsCQkweDAxLCAweDAxIH0sCi0JeyAiUExMX0NOVENMUiIsCQkweDQwLCAweDQwIH0sCi0JeyAiUExMX0NOVEVOIiwJCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGRfcGxsOTYwY3RsMV9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoUExMOTYwQ1RMMV9wYXJzZV90YWJsZSwgMywgIlBMTDk2MENUTDEiLAotCSAgICAweDY5LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9wbGw5NjBjbnQwX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiUExMOTYwQ05UMCIsCi0JICAgIDB4NmEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX3hzaWdfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJYU0lHIiwKLQkgICAgMHg2YSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQogaW50CiBhaGRfc2Vsb2lkX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKIHsKQEAgLTE2OTAsNTcgKzEzODEsNiBAQAogCSAgICAweDZiLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFBMTDQwMENUTDBfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJQTExfRU5GQk0iLAkJMHgwMSwgMHgwMSB9LAotCXsgIlBMTF9ETFBGIiwJCTB4MDIsIDB4MDIgfSwKLQl7ICJQTExfRU5MUEYiLAkJMHgwNCwgMHgwNCB9LAotCXsgIlBMTF9FTkxVRCIsCQkweDA4LCAweDA4IH0sCi0JeyAiUExMX05TIiwJCTB4MzAsIDB4MzAgfSwKLQl7ICJQTExfUFdETiIsCQkweDQwLCAweDQwIH0sCi0JeyAiUExMX1ZDT1NFTCIsCQkweDgwLCAweDgwIH0KLX07Ci0KLWludAotYWhkX3BsbDQwMGN0bDBfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKFBMTDQwMENUTDBfcGFyc2VfdGFibGUsIDcsICJQTEw0MDBDVEwwIiwKLQkgICAgMHg2YywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfZmFpcm5lc3NfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJGQUlSTkVTUyIsCi0JICAgIDB4NmMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgUExMNDAwQ1RMMV9wYXJzZV90YWJsZVtdID0gewotCXsgIlBMTF9SU1QiLAkJMHgwMSwgMHgwMSB9LAotCXsgIlBMTF9DTlRDTFIiLAkJMHg0MCwgMHg0MCB9LAotCXsgIlBMTF9DTlRFTiIsCQkweDgwLCAweDgwIH0KLX07Ci0KLWludAotYWhkX3BsbDQwMGN0bDFfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKFBMTDQwMENUTDFfcGFyc2VfdGFibGUsIDMsICJQTEw0MDBDVEwxIiwKLQkgICAgMHg2ZCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfdW5mYWlybmVzc19wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlVORkFJUk5FU1MiLAotCSAgICAweDZlLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9wbGw0MDBjbnQwX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiUExMNDAwQ05UMCIsCi0JICAgIDB4NmUsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KIGludAogYWhkX2hhZGRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKIHsKQEAgLTE3NDgsMzEgKzEzODgsNiBAQAogCSAgICAweDcwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFBMTERFTEFZX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiU1BMSVRfRFJPUF9SRVEiLAkweDgwLCAweDgwIH0KLX07Ci0KLWludAotYWhkX3BsbGRlbGF5X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihQTExERUxBWV9wYXJzZV90YWJsZSwgMSwgIlBMTERFTEFZIiwKLQkgICAgMHg3MCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfaG9kbWFhZHJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJIT0RNQUFEUiIsCi0JICAgIDB4NzAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2hvZG1hY250X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiSE9ETUFDTlQiLAotCSAgICAweDc4LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCiBpbnQKIGFoZF9oY250X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKIHsKQEAgLTE3ODEsMTAgKzEzOTYsMTAgQEAKIH0KIAogaW50Ci1haGRfaG9kbWFlbl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCithaGRfc2doYWRkcl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCiB7Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkhPRE1BRU4iLAotCSAgICAweDdhLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOworCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTR0hBRERSIiwKKwkgICAgMHg3YywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAogaW50CkBAIC0xNzk1LDEwICsxNDEwLDEwIEBACiB9CiAKIGludAotYWhkX3NnaGFkZHJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQorYWhkX3NnaGNudF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCiB7Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNHSEFERFIiLAotCSAgICAweDdjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOworCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTR0hDTlQiLAorCSAgICAweDg0LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCiBpbnQKQEAgLTE4MDgsMTQgKzE0MjMsNyBAQAogCSAgICAweDg0LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1pbnQKLWFoZF9zZ2hjbnRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTR0hDTlQiLAotCSAgICAweDg0LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IERGRl9USFJTSF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBERkZfVEhSU0hfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJXUl9ERlRIUlNIX01JTiIsCTB4MDAsIDB4NzAgfSwKIAl7ICJSRF9ERlRIUlNIX01JTiIsCTB4MDAsIDB4MDcgfSwKIAl7ICJSRF9ERlRIUlNIXzI1IiwJMHgwMSwgMHgwNyB9LApAQCAtMTg0MywyMDkgKzE0NTEsNyBAQAogCSAgICAweDg4LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1pbnQKLWFoZF9yb21hZGRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiUk9NQUREUiIsCi0JICAgIDB4OGEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgUk9NQ05UUkxfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJSRFkiLAkJMHgwMSwgMHgwMSB9LAotCXsgIlJFUEVBVCIsCQkweDAyLCAweDAyIH0sCi0JeyAiUk9NU1BEIiwJCTB4MTgsIDB4MTggfSwKLQl7ICJST01PUCIsCQkweGUwLCAweGUwIH0KLX07Ci0KLWludAotYWhkX3JvbWNudHJsX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihST01DTlRSTF9wYXJzZV90YWJsZSwgNCwgIlJPTUNOVFJMIiwKLQkgICAgMHg4ZCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfcm9tZGF0YV9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlJPTURBVEEiLAotCSAgICAweDhlLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENNQ1JYTVNHMF9wYXJzZV90YWJsZVtdID0gewotCXsgIkNGTlVNIiwJCTB4MDcsIDB4MDcgfSwKLQl7ICJDRE5VTSIsCQkweGY4LCAweGY4IH0KLX07Ci0KLWludAotYWhkX2NtY3J4bXNnMF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoQ01DUlhNU0cwX3BhcnNlX3RhYmxlLCAyLCAiQ01DUlhNU0cwIiwKLQkgICAgMHg5MCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBST0VOQUJMRV9wYXJzZV90YWJsZVtdID0gewotCXsgIkRDSDBST0VOIiwJCTB4MDEsIDB4MDEgfSwKLQl7ICJEQ0gxUk9FTiIsCQkweDAyLCAweDAyIH0sCi0JeyAiU0dST0VOIiwJCTB4MDQsIDB4MDQgfSwKLQl7ICJDTUNST0VOIiwJCTB4MDgsIDB4MDggfSwKLQl7ICJPVkxZUk9FTiIsCQkweDEwLCAweDEwIH0sCi0JeyAiTVNJUk9FTiIsCQkweDIwLCAweDIwIH0KLX07Ci0KLWludAotYWhkX3JvZW5hYmxlX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihST0VOQUJMRV9wYXJzZV90YWJsZSwgNiwgIlJPRU5BQkxFIiwKLQkgICAgMHg5MCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBPVkxZUlhNU0cwX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiQ0ZOVU0iLAkJMHgwNywgMHgwNyB9LAotCXsgIkNETlVNIiwJCTB4ZjgsIDB4ZjggfQotfTsKLQotaW50Ci1haGRfb3ZseXJ4bXNnMF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoT1ZMWVJYTVNHMF9wYXJzZV90YWJsZSwgMiwgIk9WTFlSWE1TRzAiLAotCSAgICAweDkwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IERDSFJYTVNHMF9wYXJzZV90YWJsZVtdID0gewotCXsgIkNGTlVNIiwJCTB4MDcsIDB4MDcgfSwKLQl7ICJDRE5VTSIsCQkweGY4LCAweGY4IH0KLX07Ci0KLWludAotYWhkX2RjaHJ4bXNnMF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoRENIUlhNU0cwX3BhcnNlX3RhYmxlLCAyLCAiRENIUlhNU0cwIiwKLQkgICAgMHg5MCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBPVkxZUlhNU0cxX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiQ0JOVU0iLAkJMHhmZiwgMHhmZiB9Ci19OwotCi1pbnQKLWFoZF9vdmx5cnhtc2cxX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihPVkxZUlhNU0cxX3BhcnNlX3RhYmxlLCAxLCAiT1ZMWVJYTVNHMSIsCi0JICAgIDB4OTEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgTlNFTkFCTEVfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJEQ0gwTlNFTiIsCQkweDAxLCAweDAxIH0sCi0JeyAiRENIMU5TRU4iLAkJMHgwMiwgMHgwMiB9LAotCXsgIlNHTlNFTiIsCQkweDA0LCAweDA0IH0sCi0JeyAiQ01DTlNFTiIsCQkweDA4LCAweDA4IH0sCi0JeyAiT1ZMWU5TRU4iLAkJMHgxMCwgMHgxMCB9LAotCXsgIk1TSU5TRU4iLAkJMHgyMCwgMHgyMCB9Ci19OwotCi1pbnQKLWFoZF9uc2VuYWJsZV9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlNFTkFCTEVfcGFyc2VfdGFibGUsIDYsICJOU0VOQUJMRSIsCi0JICAgIDB4OTEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgQ01DUlhNU0cxX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiQ0JOVU0iLAkJMHhmZiwgMHhmZiB9Ci19OwotCi1pbnQKLWFoZF9jbWNyeG1zZzFfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKENNQ1JYTVNHMV9wYXJzZV90YWJsZSwgMSwgIkNNQ1JYTVNHMSIsCi0JICAgIDB4OTEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgRENIUlhNU0cxX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiQ0JOVU0iLAkJMHhmZiwgMHhmZiB9Ci19OwotCi1pbnQKLWFoZF9kY2hyeG1zZzFfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKERDSFJYTVNHMV9wYXJzZV90YWJsZSwgMSwgIkRDSFJYTVNHMSIsCi0JICAgIDB4OTEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgRENIUlhNU0cyX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiTUlOREVYIiwJCTB4ZmYsIDB4ZmYgfQotfTsKLQotaW50Ci1haGRfZGNocnhtc2cyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihEQ0hSWE1TRzJfcGFyc2VfdGFibGUsIDEsICJEQ0hSWE1TRzIiLAotCSAgICAweDkyLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENNQ1JYTVNHMl9wYXJzZV90YWJsZVtdID0gewotCXsgIk1JTkRFWCIsCQkweGZmLCAweGZmIH0KLX07Ci0KLWludAotYWhkX2NtY3J4bXNnMl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoQ01DUlhNU0cyX3BhcnNlX3RhYmxlLCAxLCAiQ01DUlhNU0cyIiwKLQkgICAgMHg5MiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfb3N0X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiT1NUIiwKLQkgICAgMHg5MiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBPVkxZUlhNU0cyX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiTUlOREVYIiwJCTB4ZmYsIDB4ZmYgfQotfTsKLQotaW50Ci1haGRfb3ZseXJ4bXNnMl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoT1ZMWVJYTVNHMl9wYXJzZV90YWJsZSwgMSwgIk9WTFlSWE1TRzIiLAotCSAgICAweDkyLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IERDSFJYTVNHM19wYXJzZV90YWJsZVtdID0gewotCXsgIk1DTEFTUyIsCQkweDBmLCAweDBmIH0KLX07Ci0KLWludAotYWhkX2RjaHJ4bXNnM19wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoRENIUlhNU0czX3BhcnNlX3RhYmxlLCAxLCAiRENIUlhNU0czIiwKLQkgICAgMHg5MywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBPVkxZUlhNU0czX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiTUNMQVNTIiwJCTB4MGYsIDB4MGYgfQotfTsKLQotaW50Ci1haGRfb3ZseXJ4bXNnM19wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoT1ZMWVJYTVNHM19wYXJzZV90YWJsZSwgMSwgIk9WTFlSWE1TRzMiLAotCSAgICAweDkzLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENNQ1JYTVNHM19wYXJzZV90YWJsZVtdID0gewotCXsgIk1DTEFTUyIsCQkweDBmLCAweDBmIH0KLX07Ci0KLWludAotYWhkX2NtY3J4bXNnM19wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoQ01DUlhNU0czX3BhcnNlX3RhYmxlLCAxLCAiQ01DUlhNU0czIiwKLQkgICAgMHg5MywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBQQ0lYQ1RMX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFBDSVhDVExfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJDTVBBQkNESVMiLAkJMHgwMSwgMHgwMSB9LAogCXsgIlRTQ1NFUlJFTiIsCQkweDAyLCAweDAyIH0sCiAJeyAiU1JTUERQRUVOIiwJCTB4MDQsIDB4MDQgfSwKQEAgLTIwNjIsNDYgKzE0NjgsNyBAQAogCSAgICAweDkzLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1pbnQKLWFoZF9vdmx5c2VxYmNudF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIk9WTFlTRVFCQ05UIiwKLQkgICAgMHg5NCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfZGNoc2VxYmNudF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkRDSFNFUUJDTlQiLAotCSAgICAweDk0LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9jbWNzZXFiY250X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiQ01DU0VRQkNOVCIsCi0JICAgIDB4OTQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgQ01DU1BMVFNUQVQwX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiUlhTUExUUlNQIiwJCTB4MDEsIDB4MDEgfSwKLQl7ICJSWFNDRU1TRyIsCQkweDAyLCAweDAyIH0sCi0JeyAiUlhPVlJVTiIsCQkweDA0LCAweDA0IH0sCi0JeyAiQ05UTk9UQ01QTFQiLAkweDA4LCAweDA4IH0sCi0JeyAiU0NEQVRCVUNLRVQiLAkweDEwLCAweDEwIH0sCi0JeyAiU0NBREVSUiIsCQkweDIwLCAweDIwIH0sCi0JeyAiU0NCQ0VSUiIsCQkweDQwLCAweDQwIH0sCi0JeyAiU1RBRVRFUk0iLAkJMHg4MCwgMHg4MCB9Ci19OwotCi1pbnQKLWFoZF9jbWNzcGx0c3RhdDBfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKENNQ1NQTFRTVEFUMF9wYXJzZV90YWJsZSwgOCwgIkNNQ1NQTFRTVEFUMCIsCi0JICAgIDB4OTYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgRENIU1BMVFNUQVQwX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IERDSFNQTFRTVEFUMF9wYXJzZV90YWJsZVtdID0gewogCXsgIlJYU1BMVFJTUCIsCQkweDAxLCAweDAxIH0sCiAJeyAiUlhTQ0VNU0ciLAkJMHgwMiwgMHgwMiB9LAogCXsgIlJYT1ZSVU4iLAkJMHgwNCwgMHgwNCB9LApAQCAtMjExOSw0NyArMTQ4Niw3IEBACiAJICAgIDB4OTYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgT1ZMWVNQTFRTVEFUMF9wYXJzZV90YWJsZVtdID0gewotCXsgIlJYU1BMVFJTUCIsCQkweDAxLCAweDAxIH0sCi0JeyAiUlhTQ0VNU0ciLAkJMHgwMiwgMHgwMiB9LAotCXsgIlJYT1ZSVU4iLAkJMHgwNCwgMHgwNCB9LAotCXsgIkNOVE5PVENNUExUIiwJMHgwOCwgMHgwOCB9LAotCXsgIlNDREFUQlVDS0VUIiwJMHgxMCwgMHgxMCB9LAotCXsgIlNDQURFUlIiLAkJMHgyMCwgMHgyMCB9LAotCXsgIlNDQkNFUlIiLAkJMHg0MCwgMHg0MCB9LAotCXsgIlNUQUVURVJNIiwJCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGRfb3ZseXNwbHRzdGF0MF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoT1ZMWVNQTFRTVEFUMF9wYXJzZV90YWJsZSwgOCwgIk9WTFlTUExUU1RBVDAiLAotCSAgICAweDk2LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENNQ1NQTFRTVEFUMV9wYXJzZV90YWJsZVtdID0gewotCXsgIlJYREFUQUJVQ0tFVCIsCTB4MDEsIDB4MDEgfQotfTsKLQotaW50Ci1haGRfY21jc3BsdHN0YXQxX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihDTUNTUExUU1RBVDFfcGFyc2VfdGFibGUsIDEsICJDTUNTUExUU1RBVDEiLAotCSAgICAweDk3LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IE9WTFlTUExUU1RBVDFfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJSWERBVEFCVUNLRVQiLAkweDAxLCAweDAxIH0KLX07Ci0KLWludAotYWhkX292bHlzcGx0c3RhdDFfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE9WTFlTUExUU1RBVDFfcGFyc2VfdGFibGUsIDEsICJPVkxZU1BMVFNUQVQxIiwKLQkgICAgMHg5NywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBEQ0hTUExUU1RBVDFfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgRENIU1BMVFNUQVQxX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiUlhEQVRBQlVDS0VUIiwJMHgwMSwgMHgwMSB9CiB9OwogCkBAIC0yMTcwLDEzOSArMTQ5Nyw3IEBACiAJICAgIDB4OTcsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0dSWE1TRzBfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJDRk5VTSIsCQkweDA3LCAweDA3IH0sCi0JeyAiQ0ROVU0iLAkJMHhmOCwgMHhmOCB9Ci19OwotCi1pbnQKLWFoZF9zZ3J4bXNnMF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoU0dSWE1TRzBfcGFyc2VfdGFibGUsIDIsICJTR1JYTVNHMCIsCi0JICAgIDB4OTgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0xWU1BMVE9VVEFEUjBfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJMT1dFUl9BRERSIiwJCTB4N2YsIDB4N2YgfQotfTsKLQotaW50Ci1haGRfc2x2c3BsdG91dGFkcjBfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKFNMVlNQTFRPVVRBRFIwX3BhcnNlX3RhYmxlLCAxLCAiU0xWU1BMVE9VVEFEUjAiLAotCSAgICAweDk4LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNHUlhNU0cxX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiQ0JOVU0iLAkJMHhmZiwgMHhmZiB9Ci19OwotCi1pbnQKLWFoZF9zZ3J4bXNnMV9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoU0dSWE1TRzFfcGFyc2VfdGFibGUsIDEsICJTR1JYTVNHMSIsCi0JICAgIDB4OTksIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0xWU1BMVE9VVEFEUjFfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJSRVFfRk5VTSIsCQkweDA3LCAweDA3IH0sCi0JeyAiUkVRX0ROVU0iLAkJMHhmOCwgMHhmOCB9Ci19OwotCi1pbnQKLWFoZF9zbHZzcGx0b3V0YWRyMV9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoU0xWU1BMVE9VVEFEUjFfcGFyc2VfdGFibGUsIDIsICJTTFZTUExUT1VUQURSMSIsCi0JICAgIDB4OTksIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0dSWE1TRzJfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJNSU5ERVgiLAkJMHhmZiwgMHhmZiB9Ci19OwotCi1pbnQKLWFoZF9zZ3J4bXNnMl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoU0dSWE1TRzJfcGFyc2VfdGFibGUsIDEsICJTR1JYTVNHMiIsCi0JICAgIDB4OWEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0xWU1BMVE9VVEFEUjJfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJSRVFfQk5VTSIsCQkweGZmLCAweGZmIH0KLX07Ci0KLWludAotYWhkX3NsdnNwbHRvdXRhZHIyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihTTFZTUExUT1VUQURSMl9wYXJzZV90YWJsZSwgMSwgIlNMVlNQTFRPVVRBRFIyIiwKLQkgICAgMHg5YSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTR1JYTVNHM19wYXJzZV90YWJsZVtdID0gewotCXsgIk1DTEFTUyIsCQkweDBmLCAweDBmIH0KLX07Ci0KLWludAotYWhkX3Nncnhtc2czX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihTR1JYTVNHM19wYXJzZV90YWJsZSwgMSwgIlNHUlhNU0czIiwKLQkgICAgMHg5YiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTTFZTUExUT1VUQURSM19wYXJzZV90YWJsZVtdID0gewotCXsgIlJMWE9SRCIsCQkweDEwLCAweDEwIH0sCi0JeyAiVEFHX05VTSIsCQkweDFmLCAweDFmIH0KLX07Ci0KLWludAotYWhkX3NsdnNwbHRvdXRhZHIzX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihTTFZTUExUT1VUQURSM19wYXJzZV90YWJsZSwgMiwgIlNMVlNQTFRPVVRBRFIzIiwKLQkgICAgMHg5YiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfc2dzZXFiY250X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0dTRVFCQ05UIiwKLQkgICAgMHg5YywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTTFZTUExUT1VUQVRUUjBfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJMT1dFUl9CQ05UIiwJCTB4ZmYsIDB4ZmYgfQotfTsKLQotaW50Ci1haGRfc2x2c3BsdG91dGF0dHIwX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihTTFZTUExUT1VUQVRUUjBfcGFyc2VfdGFibGUsIDEsICJTTFZTUExUT1VUQVRUUjAiLAotCSAgICAweDljLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNMVlNQTFRPVVRBVFRSMV9wYXJzZV90YWJsZVtdID0gewotCXsgIkNNUExUX0ZOVU0iLAkJMHgwNywgMHgwNyB9LAotCXsgIkNNUExUX0ROVU0iLAkJMHhmOCwgMHhmOCB9Ci19OwotCi1pbnQKLWFoZF9zbHZzcGx0b3V0YXR0cjFfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKFNMVlNQTFRPVVRBVFRSMV9wYXJzZV90YWJsZSwgMiwgIlNMVlNQTFRPVVRBVFRSMSIsCi0JICAgIDB4OWQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0xWU1BMVE9VVEFUVFIyX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiQ01QTFRfQk5VTSIsCQkweGZmLCAweGZmIH0KLX07Ci0KLWludAotYWhkX3NsdnNwbHRvdXRhdHRyMl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoU0xWU1BMVE9VVEFUVFIyX3BhcnNlX3RhYmxlLCAxLCAiU0xWU1BMVE9VVEFUVFIyIiwKLQkgICAgMHg5ZSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTR1NQTFRTVEFUMF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTR1NQTFRTVEFUMF9wYXJzZV90YWJsZVtdID0gewogCXsgIlJYU1BMVFJTUCIsCQkweDAxLCAweDAxIH0sCiAJeyAiUlhTQ0VNU0ciLAkJMHgwMiwgMHgwMiB9LAogCXsgIlJYT1ZSVU4iLAkJMHgwNCwgMHgwNCB9LApAQCAtMjMyMCw3ICsxNTE1LDcgQEAKIAkgICAgMHg5ZSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTR1NQTFRTVEFUMV9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTR1NQTFRTVEFUMV9wYXJzZV90YWJsZVtdID0gewogCXsgIlJYREFUQUJVQ0tFVCIsCTB4MDEsIDB4MDEgfQogfTsKIApAQCAtMjMzMSwxOSArMTUyNiw3IEBACiAJICAgIDB4OWYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0ZVTkNUX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiVEVTVF9OVU0iLAkJMHgwZiwgMHgwZiB9LAotCXsgIlRFU1RfR1JPVVAiLAkJMHhmMCwgMHhmMCB9Ci19OwotCi1pbnQKLWFoZF9zZnVuY3RfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKFNGVU5DVF9wYXJzZV90YWJsZSwgMiwgIlNGVU5DVCIsCi0JICAgIDB4OWYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgREYwUENJU1RBVF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBERjBQQ0lTVEFUX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiRFBSIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJUV0FURVJSIiwJCTB4MDIsIDB4MDIgfSwKIAl7ICJSRFBFUlIiLAkJMHgwNCwgMHgwNCB9LApAQCAtMjM2OCw4MyArMTU1MSw2IEBACiAJICAgIDB4YTAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgREYxUENJU1RBVF9wYXJzZV90YWJsZVtdID0gewotCXsgIkRQUiIsCQkweDAxLCAweDAxIH0sCi0JeyAiVFdBVEVSUiIsCQkweDAyLCAweDAyIH0sCi0JeyAiUkRQRVJSIiwJCTB4MDQsIDB4MDQgfSwKLQl7ICJTQ0FBUEVSUiIsCQkweDA4LCAweDA4IH0sCi0JeyAiUlRBIiwJCTB4MTAsIDB4MTAgfSwKLQl7ICJSTUEiLAkJMHgyMCwgMHgyMCB9LAotCXsgIlNTRSIsCQkweDQwLCAweDQwIH0sCi0JeyAiRFBFIiwJCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGRfZGYxcGNpc3RhdF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoREYxUENJU1RBVF9wYXJzZV90YWJsZSwgOCwgIkRGMVBDSVNUQVQiLAotCSAgICAweGExLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNHUENJU1RBVF9wYXJzZV90YWJsZVtdID0gewotCXsgIkRQUiIsCQkweDAxLCAweDAxIH0sCi0JeyAiUkRQRVJSIiwJCTB4MDQsIDB4MDQgfSwKLQl7ICJTQ0FBUEVSUiIsCQkweDA4LCAweDA4IH0sCi0JeyAiUlRBIiwJCTB4MTAsIDB4MTAgfSwKLQl7ICJSTUEiLAkJMHgyMCwgMHgyMCB9LAotCXsgIlNTRSIsCQkweDQwLCAweDQwIH0sCi0JeyAiRFBFIiwJCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGRfc2dwY2lzdGF0X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihTR1BDSVNUQVRfcGFyc2VfdGFibGUsIDcsICJTR1BDSVNUQVQiLAotCSAgICAweGEyLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9yZWcxX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiUkVHMSIsCi0JICAgIDB4YTIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgQ01DUENJU1RBVF9wYXJzZV90YWJsZVtdID0gewotCXsgIkRQUiIsCQkweDAxLCAweDAxIH0sCi0JeyAiVFdBVEVSUiIsCQkweDAyLCAweDAyIH0sCi0JeyAiUkRQRVJSIiwJCTB4MDQsIDB4MDQgfSwKLQl7ICJTQ0FBUEVSUiIsCQkweDA4LCAweDA4IH0sCi0JeyAiUlRBIiwJCTB4MTAsIDB4MTAgfSwKLQl7ICJSTUEiLAkJMHgyMCwgMHgyMCB9LAotCXsgIlNTRSIsCQkweDQwLCAweDQwIH0sCi0JeyAiRFBFIiwJCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGRfY21jcGNpc3RhdF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoQ01DUENJU1RBVF9wYXJzZV90YWJsZSwgOCwgIkNNQ1BDSVNUQVQiLAotCSAgICAweGEzLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IE9WTFlQQ0lTVEFUX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiRFBSIiwJCTB4MDEsIDB4MDEgfSwKLQl7ICJSRFBFUlIiLAkJMHgwNCwgMHgwNCB9LAotCXsgIlNDQUFQRVJSIiwJCTB4MDgsIDB4MDggfSwKLQl7ICJSVEEiLAkJMHgxMCwgMHgxMCB9LAotCXsgIlJNQSIsCQkweDIwLCAweDIwIH0sCi0JeyAiU1NFIiwJCTB4NDAsIDB4NDAgfSwKLQl7ICJEUEUiLAkJMHg4MCwgMHg4MCB9Ci19OwotCi1pbnQKLWFoZF9vdmx5cGNpc3RhdF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoT1ZMWVBDSVNUQVRfcGFyc2VfdGFibGUsIDcsICJPVkxZUENJU1RBVCIsCi0JICAgIDB4YTQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KIGludAogYWhkX3JlZ19pc3JfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQogewpAQCAtMjQ1Miw3ICsxNTU4LDcgQEAKIAkgICAgMHhhNCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTR19TVEFURV9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTR19TVEFURV9wYXJzZV90YWJsZVtdID0gewogCXsgIlNFR1NfQVZBSUwiLAkJMHgwMSwgMHgwMSB9LAogCXsgIkxPQURJTkdfTkVFREVEIiwJMHgwMiwgMHgwMiB9LAogCXsgIkZFVENIX0lOUFJPRyIsCTB4MDQsIDB4MDQgfQpAQCAtMjQ2NSwyMyArMTU3MSw3IEBACiAJICAgIDB4YTYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgTVNJUENJU1RBVF9wYXJzZV90YWJsZVtdID0gewotCXsgIkRQUiIsCQkweDAxLCAweDAxIH0sCi0JeyAiVFdBVEVSUiIsCQkweDAyLCAweDAyIH0sCi0JeyAiQ0xSUEVORE1TSSIsCQkweDA4LCAweDA4IH0sCi0JeyAiUlRBIiwJCTB4MTAsIDB4MTAgfSwKLQl7ICJSTUEiLAkJMHgyMCwgMHgyMCB9LAotCXsgIlNTRSIsCQkweDQwLCAweDQwIH0KLX07Ci0KLWludAotYWhkX21zaXBjaXN0YXRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE1TSVBDSVNUQVRfcGFyc2VfdGFibGUsIDYsICJNU0lQQ0lTVEFUIiwKLQkgICAgMHhhNiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBUQVJHUENJU1RBVF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBUQVJHUENJU1RBVF9wYXJzZV90YWJsZVtdID0gewogCXsgIlRXQVRFUlIiLAkJMHgwMiwgMHgwMiB9LAogCXsgIlNUQSIsCQkweDA4LCAweDA4IH0sCiAJeyAiU1NFIiwJCTB4NDAsIDB4NDAgfSwKQEAgLTI0OTYsMjcgKzE1ODYsMTMgQEAKIH0KIAogaW50Ci1haGRfZGF0YV9jb3VudF9vZGRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJEQVRBX0NPVU5UX09ERCIsCi0JICAgIDB4YTcsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAogYWhkX3NjYnB0cl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCiB7CiAJcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDQlBUUiIsCiAJICAgIDB4YTgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLWludAotYWhkX2Njc2NiYWNudF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkNDU0NCQUNOVCIsCi0JICAgIDB4YWIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0NCQVVUT1BUUl9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTQ0JBVVRPUFRSX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiU0NCUFRSX09GRiIsCQkweDA3LCAweDA3IH0sCiAJeyAiU0NCUFRSX0FERFIiLAkweDM4LCAweDM4IH0sCiAJeyAiQVVTQ0JQVFJfRU4iLAkweDgwLCAweDgwIH0KQEAgLTI1MzcsMzYgKzE2MTMsMTMgQEAKIH0KIAogaW50Ci1haGRfY2NzY2JhZHJfYmtfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDQ1NDQkFEUl9CSyIsCi0JICAgIDB4YWMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAogYWhkX2Njc2NiYWRkcl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCiB7CiAJcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkNDU0NCQUREUiIsCiAJICAgIDB4YWMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgQ01DX1JBTUJJU1RfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJDTUNfQlVGRkVSX0JJU1RfRU4iLAkweDAxLCAweDAxIH0sCi0JeyAiQ01DX0JVRkZFUl9CSVNUX0ZBSUwiLDB4MDIsIDB4MDIgfSwKLQl7ICJTR19CSVNUX0VOIiwJCTB4MTAsIDB4MTAgfSwKLQl7ICJTR19CSVNUX0ZBSUwiLAkweDIwLCAweDIwIH0sCi0JeyAiU0NCUkFNQklTVF9GQUlMIiwJMHg0MCwgMHg0MCB9LAotCXsgIlNHX0VMRU1FTlRfU0laRSIsCTB4ODAsIDB4ODAgfQotfTsKLQotaW50Ci1haGRfY21jX3JhbWJpc3RfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKENNQ19SQU1CSVNUX3BhcnNlX3RhYmxlLCA2LCAiQ01DX1JBTUJJU1QiLAotCSAgICAweGFkLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENDU0NCQ1RMX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENDU0NCQ1RMX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiQ0NTQ0JSRVNFVCIsCQkweDAxLCAweDAxIH0sCiAJeyAiQ0NTQ0JESVIiLAkJMHgwNCwgMHgwNCB9LAogCXsgIkNDU0NCRU4iLAkJMHgwOCwgMHgwOCB9LApAQCAtMjU4Miw3ICsxNjM1LDcgQEAKIAkgICAgMHhhZCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBDQ1NHQ1RMX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IENDU0dDVExfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJDQ1NHUkVTRVQiLAkJMHgwMSwgMHgwMSB9LAogCXsgIlNHX0ZFVENIX1JFUSIsCTB4MDIsIDB4MDIgfSwKIAl7ICJDQ1NHRU5BQ0siLAkJMHgwOCwgMHgwOCB9LApAQCAtMjYwNiwxMyArMTY1OSw2IEBACiB9CiAKIGludAotYWhkX2ZsZXhhZHJfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJGTEVYQURSIiwKLQkgICAgMHhiMCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50CiBhaGRfY2NzY2JyYW1fcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQogewogCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDQ1NDQlJBTSIsCkBAIC0yNjIwLDM5ICsxNjY2LDEzIEBACiB9CiAKIGludAotYWhkX2ZsZXhjbnRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJGTEVYQ05UIiwKLQkgICAgMHhiMywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBGTEVYRE1BU1RBVF9wYXJzZV90YWJsZVtdID0gewotCXsgIkZMRVhETUFET05FIiwJMHgwMSwgMHgwMSB9LAotCXsgIkZMRVhETUFFUlIiLAkJMHgwMiwgMHgwMiB9Ci19OwotCi1pbnQKLWFoZF9mbGV4ZG1hc3RhdF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoRkxFWERNQVNUQVRfcGFyc2VfdGFibGUsIDIsICJGTEVYRE1BU1RBVCIsCi0JICAgIDB4YjUsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2ZsZXhkYXRhX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiRkxFWERBVEEiLAotCSAgICAweGI2LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKIGFoZF9icmRkYXRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQogewogCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJCUkREQVQiLAogCSAgICAweGI4LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IEJSRENUTF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBCUkRDVExfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJCUkRTVEIiLAkJMHgwMSwgMHgwMSB9LAogCXsgIkJSRFJXIiwJCTB4MDIsIDB4MDIgfSwKIAl7ICJCUkRFTiIsCQkweDA0LCAweDA0IH0sCkBAIC0yNjgyLDcgKzE3MDIsNyBAQAogCSAgICAweGJjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNFRUNUTF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTRUVDVExfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJTRUVPUF9FUkFMIiwJCTB4NDAsIDB4NzAgfSwKIAl7ICJTRUVPUF9XUklURSIsCTB4NTAsIDB4NzAgfSwKIAl7ICJTRUVPUF9SRUFEIiwJCTB4NjAsIDB4NzAgfSwKQEAgLTI3MDIsNyArMTcyMiw3IEBACiAJICAgIDB4YmUsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0VFU1RBVF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTRUVTVEFUX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiU0VFU1RBUlQiLAkJMHgwMSwgMHgwMSB9LAogCXsgIlNFRUJVU1kiLAkJMHgwMiwgMHgwMiB9LAogCXsgIlNFRUFSQkFDSyIsCQkweDA0LCAweDA0IH0sCkBAIC0yNzE4LDM0ICsxNzM4LDcgQEAKIAkgICAgMHhiZSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotaW50Ci1haGRfc2NiY250X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCQ05UIiwKLQkgICAgMHhiZiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfZGZ3YWRkcl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkRGV0FERFIiLAotCSAgICAweGMwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IERTUEZMVFJDVExfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJEU1BGQ05UU0VMIiwJCTB4MGYsIDB4MGYgfSwKLQl7ICJFREdFU0VOU0UiLAkJMHgxMCwgMHgxMCB9LAotCXsgIkZMVFJESVNBQkxFIiwJMHgyMCwgMHgyMCB9Ci19OwotCi1pbnQKLWFoZF9kc3BmbHRyY3RsX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihEU1BGTFRSQ1RMX3BhcnNlX3RhYmxlLCAzLCAiRFNQRkxUUkNUTCIsCi0JICAgIDB4YzAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgRFNQREFUQUNUTF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBEU1BEQVRBQ1RMX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiWE1JVE9GRlNURElTIiwJMHgwMiwgMHgwMiB9LAogCXsgIlJDVlJPRkZTVERJUyIsCTB4MDQsIDB4MDQgfSwKIAl7ICJERVNRRElTIiwJCTB4MTAsIDB4MTAgfSwKQEAgLTI3NjAsNDQgKzE3NTMsMTMgQEAKIH0KIAogaW50Ci1haGRfZGZyYWRkcl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkRGUkFERFIiLAotCSAgICAweGMyLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IERTUFJFUUNUTF9wYXJzZV90YWJsZVtdID0gewotCXsgIk1BTlJFUURMWSIsCQkweDNmLCAweDNmIH0sCi0JeyAiTUFOUkVRQ1RMIiwJCTB4YzAsIDB4YzAgfQotfTsKLQotaW50Ci1haGRfZHNwcmVxY3RsX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihEU1BSRVFDVExfcGFyc2VfdGFibGUsIDIsICJEU1BSRVFDVEwiLAotCSAgICAweGMyLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IERTUEFDS0NUTF9wYXJzZV90YWJsZVtdID0gewotCXsgIk1BTkFDS0RMWSIsCQkweDNmLCAweDNmIH0sCi0JeyAiTUFOQUNLQ1RMIiwJCTB4YzAsIDB4YzAgfQotfTsKLQotaW50Ci1haGRfZHNwYWNrY3RsX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihEU1BBQ0tDVExfcGFyc2VfdGFibGUsIDIsICJEU1BBQ0tDVEwiLAotCSAgICAweGMzLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKIGFoZF9kZmRhdF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCiB7CiAJcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkRGREFUIiwKIAkgICAgMHhjNCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBEU1BTRUxFQ1RfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgRFNQU0VMRUNUX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiRFNQU0VMIiwJCTB4MWYsIDB4MWYgfSwKIAl7ICJBVVRPSU5DRU4iLAkJMHg4MCwgMHg4MCB9CiB9OwpAQCAtMjgwOSw3ICsxNzcxLDcgQEAKIAkgICAgMHhjNCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBXUlRCSUFTQ1RMX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFdSVEJJQVNDVExfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJYTUlUTUFOVkFMIiwJCTB4M2YsIDB4M2YgfSwKIAl7ICJBVVRPWEJDRElTIiwJCTB4ODAsIDB4ODAgfQogfTsKQEAgLTI4MjEsOTEgKzE3ODMsNyBAQAogCSAgICAweGM1LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFJDVlJCSU9TQ1RMX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiUkNWUk1BTlZBTCIsCQkweDNmLCAweDNmIH0sCi0JeyAiQVVUT1JCQ0RJUyIsCQkweDgwLCAweDgwIH0KLX07Ci0KLWludAotYWhkX3JjdnJiaW9zY3RsX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihSQ1ZSQklPU0NUTF9wYXJzZV90YWJsZSwgMiwgIlJDVlJCSU9TQ1RMIiwKLQkgICAgMHhjNiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfd3J0Ymlhc2NhbGNfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJXUlRCSUFTQ0FMQyIsCi0JICAgIDB4YzcsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX3JjdnJiaWFzY2FsY19wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlJDVlJCSUFTQ0FMQyIsCi0JICAgIDB4YzgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2RmcHRyc19wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkRGUFRSUyIsCi0JICAgIDB4YzgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX3NrZXdjYWxjX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0tFV0NBTEMiLAotCSAgICAweGM5LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9kZmJrcHRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiREZCS1BUUiIsCi0JICAgIDB4YzksIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgREZEQkNUTF9wYXJzZV90YWJsZVtdID0gewotCXsgIkRGRl9SQU1CSVNUX0VOIiwJMHgwMSwgMHgwMSB9LAotCXsgIkRGRl9SQU1CSVNUX0RPTkUiLAkweDAyLCAweDAyIH0sCi0JeyAiREZGX1JBTUJJU1RfRkFJTCIsCTB4MDQsIDB4MDQgfSwKLQl7ICJERkZfRElSX0VSUiIsCTB4MDgsIDB4MDggfSwKLQl7ICJERkZfQ0lPX1JEX1JEWSIsCTB4MTAsIDB4MTAgfSwKLQl7ICJERkZfQ0lPX1dSX1JEWSIsCTB4MjAsIDB4MjAgfQotfTsKLQotaW50Ci1haGRfZGZkYmN0bF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoREZEQkNUTF9wYXJzZV90YWJsZSwgNiwgIkRGREJDVEwiLAotCSAgICAweGNiLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9kZnNjbnRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJERlNDTlQiLAotCSAgICAweGNjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9kZmJjbnRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJERkJDTlQiLAotCSAgICAweGNlLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKLWFoZF9vdmx5YWRkcl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIk9WTFlBRERSIiwKLQkgICAgMHhkNCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTRVFDVEwwX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNFUUNUTDBfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJMT0FEUkFNIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJTRVFSRVNFVCIsCQkweDAyLCAweDAyIH0sCiAJeyAiU1RFUCIsCQkweDA0LCAweDA0IH0sCkBAIC0yOTIzLDIxICsxODAxLDcgQEAKIAkgICAgMHhkNiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTRVFDVEwxX3BhcnNlX3RhYmxlW10gPSB7Ci0JeyAiUkFNQklTVF9FTiIsCQkweDAxLCAweDAxIH0sCi0JeyAiUkFNQklTVF9GQUlMIiwJMHgwMiwgMHgwMiB9LAotCXsgIlJBTUJJU1RfRE9ORSIsCTB4MDQsIDB4MDQgfSwKLQl7ICJPVlJMQVlfREFUQV9DSEsiLAkweDA4LCAweDA4IH0KLX07Ci0KLWludAotYWhkX3NlcWN0bDFfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKFNFUUNUTDFfcGFyc2VfdGFibGUsIDQsICJTRVFDVEwxIiwKLQkgICAgMHhkNywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBGTEFHU19wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBGTEFHU19wYXJzZV90YWJsZVtdID0gewogCXsgIkNBUlJZIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJaRVJPIiwJCTB4MDIsIDB4MDIgfQogfTsKQEAgLTI5NDksNyArMTgxMyw3IEBACiAJICAgIDB4ZDgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0VRSU5UQ1RMX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNFUUlOVENUTF9wYXJzZV90YWJsZVtdID0gewogCXsgIklSRVQiLAkJMHgwMSwgMHgwMSB9LAogCXsgIklOVE1BU0sxIiwJCTB4MDIsIDB4MDIgfSwKIAl7ICJJTlRNQVNLMiIsCQkweDA0LCAweDA0IH0sCkBAIC0zMDAyLDI0ICsxODY2LDYgQEAKIH0KIAogaW50Ci1haGRfYnJrYWRkcjBfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJCUktBRERSMCIsCi0JICAgIDB4ZTYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgQlJLQUREUjFfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJCUktESVMiLAkJMHg4MCwgMHg4MCB9Ci19OwotCi1pbnQKLWFoZF9icmthZGRyMV9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoQlJLQUREUjFfcGFyc2VfdGFibGUsIDEsICJCUktBRERSMSIsCi0JICAgIDB4ZTYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAogYWhkX2FsbG9uZXNfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQogewogCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJBTExPTkVTIiwKQEAgLTMwNTUsMTMgKzE5MDEsNiBAQAogfQogCiBpbnQKLWFoZF9mdW5jdGlvbjFfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJGVU5DVElPTjEiLAotCSAgICAweGYwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKIGFoZF9zdGFja19wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCiB7CiAJcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNUQUNLIiwKQEAgLTMwODMsMTMgKzE5MjIsNiBAQAogfQogCiBpbnQKLWFoZF9sYXN0YWRkcl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkxBU1RBRERSIiwKLQkgICAgMHhmNiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50CiBhaGRfaW50dmVjMl9hZGRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKIHsKIAlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiSU5UVkVDMl9BRERSIiwKQEAgLTMxMTEsMjAgKzE5NDMsNiBAQAogfQogCiBpbnQKLWFoZF93YWl0aW5nX3NjYl90YWlsc19wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIldBSVRJTkdfU0NCX1RBSUxTIiwKLQkgICAgMHgxMDAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAotYWhkX2FoZF9wY2lfY29uZmlnX2Jhc2VfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJBSERfUENJX0NPTkZJR19CQVNFIiwKLQkgICAgMHgxMDAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAogYWhkX3NyYW1fYmFzZV9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCiB7CiAJcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNSQU1fQkFTRSIsCkBAIC0zMTMyLDYgKzE5NTAsMTMgQEAKIH0KIAogaW50CithaGRfd2FpdGluZ19zY2JfdGFpbHNfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQoreworCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJXQUlUSU5HX1NDQl9UQUlMUyIsCisJICAgIDB4MTAwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOworfQorCitpbnQKIGFoZF93YWl0aW5nX3RpZF9oZWFkX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKIHsKIAlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiV0FJVElOR19USURfSEVBRCIsCkBAIC0zMjE1LDcgKzIwNDAsNyBAQAogCSAgICAweDEzNywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBETUFQQVJBTVNfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgRE1BUEFSQU1TX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiRklGT1JFU0VUIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJGSUZPRkxVU0giLAkJMHgwMiwgMHgwMiB9LAogCXsgIkRJUkVDVElPTiIsCQkweDA0LCAweDA0IH0sCkBAIC0zMjM1LDcgKzIwNjAsNyBAQAogCSAgICAweDEzOCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTRVFfRkxBR1NfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0VRX0ZMQUdTX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiTk9fRElTQ09OTkVDVCIsCTB4MDEsIDB4MDEgfSwKIAl7ICJTUEhBU0VfUEVORElORyIsCTB4MDIsIDB4MDIgfSwKIAl7ICJEUEhBU0VfUEVORElORyIsCTB4MDQsIDB4MDQgfSwKQEAgLTMyNjgsNyArMjA5Myw3IEBACiAJICAgIDB4MTNiLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IExBU1RQSEFTRV9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBMQVNUUEhBU0VfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJQX0RBVEFPVVQiLAkJMHgwMCwgMHhlMCB9LAogCXsgIlBfREFUQU9VVF9EVCIsCTB4MjAsIDB4ZTAgfSwKIAl7ICJQX0RBVEFJTiIsCQkweDQwLCAweGUwIH0sCkBAIC0zMzI2LDcgKzIxNTEsNyBAQAogCSAgICAweDE0NCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBBUkdfMV9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBBUkdfMV9wYXJzZV90YWJsZVtdID0gewogCXsgIkNPTlRfTVNHX0xPT1BfVEFSRyIsCTB4MDIsIDB4MDIgfSwKIAl7ICJDT05UX01TR19MT09QX1JFQUQiLAkweDAzLCAweDAzIH0sCiAJeyAiQ09OVF9NU0dfTE9PUF9XUklURSIsMHgwNCwgMHgwNCB9LApAQCAtMzM1OCw3ICsyMTgzLDcgQEAKIAkgICAgMHgxNGEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0NTSVNFUV9URU1QTEFURV9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTQ1NJU0VRX1RFTVBMQVRFX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiQUxUU1RJTSIsCQkweDAxLCAweDAxIH0sCiAJeyAiRU5BVVRPQVROUCIsCQkweDAyLCAweDAyIH0sCiAJeyAiTUFOVUFMUCIsCQkweDBjLCAweDBjIH0sCkBAIC0zMzgxLDcgKzIyMDYsNyBAQAogCSAgICAweDE0YywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTRVFfRkxBR1MyX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNFUV9GTEFHUzJfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJQRU5ESU5HX01LX01FU1NBR0UiLAkweDAxLCAweDAxIH0sCiAJeyAiVEFSR0VUX01TR19QRU5ESU5HIiwJMHgwMiwgMHgwMiB9LAogCXsgIlNFTEVDVE9VVF9RRlJPWkVOIiwJMHgwNCwgMHgwNCB9CkBAIC0zNDY1LDIwICsyMjkwLDIwIEBACiB9CiAKIGludAotYWhkX3NjYl9iYXNlX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCX0JBU0UiLAotCSAgICAweDE4MCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50CiBhaGRfc2NiX3Jlc2lkdWFsX2RhdGFjbnRfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQogewogCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JfUkVTSURVQUxfREFUQUNOVCIsCiAJICAgIDB4MTgwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNDQl9SRVNJRFVBTF9TR1BUUl9wYXJzZV90YWJsZVtdID0geworaW50CithaGRfc2NiX2Jhc2VfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQoreworCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JfQkFTRSIsCisJICAgIDB4MTgwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOworfQorCitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNDQl9SRVNJRFVBTF9TR1BUUl9wYXJzZV90YWJsZVtdID0gewogCXsgIlNHX0xJU1RfTlVMTCIsCTB4MDEsIDB4MDEgfSwKIAl7ICJTR19PVkVSUlVOX1JFU0lEIiwJMHgwMiwgMHgwMiB9LAogCXsgIlNHX0FERFJfTUFTSyIsCTB4ZjgsIDB4ZjggfQpAQCAtMzQ5OSwyNyArMjMyNCw2IEBACiB9CiAKIGludAotYWhkX3NjYl90YXJnZXRfcGhhc2VzX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCX1RBUkdFVF9QSEFTRVMiLAotCSAgICAweDE4OSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfc2NiX3RhcmdldF9kYXRhX2Rpcl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGRfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNDQl9UQVJHRVRfREFUQV9ESVIiLAotCSAgICAweDE4YSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50Ci1haGRfc2NiX3RhcmdldF9pdGFnX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCX1RBUkdFVF9JVEFHIiwKLQkgICAgMHgxOGIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAogYWhkX3NjYl9zZW5zZV9idXNhZGRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKIHsKIAlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCX1NFTlNFX0JVU0FERFIiLApAQCAtMzUzMyw3ICsyMzM3LDcgQEAKIAkgICAgMHgxOTAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0NCX0NPTlRST0xfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0NCX0NPTlRST0xfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJTQ0JfVEFHX1RZUEUiLAkweDAzLCAweDAzIH0sCiAJeyAiRElTQ09OTkVDVEVEIiwJMHgwNCwgMHgwNCB9LAogCXsgIlNUQVRVU19SQ1ZEIiwJMHgwOCwgMHgwOCB9LApAQCAtMzU1MCw3ICsyMzU0LDcgQEAKIAkgICAgMHgxOTIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0NCX1NDU0lJRF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTQ0JfU0NTSUlEX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiT0lEIiwJCTB4MGYsIDB4MGYgfSwKIAl7ICJUSUQiLAkJMHhmMCwgMHhmMCB9CiB9OwpAQCAtMzU2Miw3ICsyMzY2LDcgQEAKIAkgICAgMHgxOTMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0NCX0xVTl9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTQ0JfTFVOX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiTElEIiwJCTB4ZmYsIDB4ZmYgfQogfTsKIApAQCAtMzU3Myw3ICsyMzc3LDcgQEAKIAkgICAgMHgxOTQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0NCX1RBU0tfQVRUUklCVVRFX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNDQl9UQVNLX0FUVFJJQlVURV9wYXJzZV90YWJsZVtdID0gewogCXsgIlNDQl9YRkVSTEVOX09ERCIsCTB4MDEsIDB4MDEgfQogfTsKIApAQCAtMzU4NCw3ICsyMzg4LDcgQEAKIAkgICAgMHgxOTUsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0NCX0NEQl9MRU5fcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0NCX0NEQl9MRU5fcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJTQ0JfQ0RCX0xFTl9QVFIiLAkweDgwLCAweDgwIH0KIH07CiAKQEAgLTM2MDksNyArMjQxMyw3IEBACiAJICAgIDB4MTk4LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNDQl9EQVRBQ05UX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhkX3JlZ19wYXJzZV9lbnRyeV90IFNDQl9EQVRBQ05UX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiU0dfSElHSF9BRERSX0JJVFMiLAkweDdmLCAweDdmIH0sCiAJeyAiU0dfTEFTVF9TRUciLAkweDgwLCAweDgwIH0KIH07CkBAIC0zNjIxLDcgKzI0MjUsNyBAQAogCSAgICAweDFhMCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoZF9yZWdfcGFyc2VfZW50cnlfdCBTQ0JfU0dQVFJfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGRfcmVnX3BhcnNlX2VudHJ5X3QgU0NCX1NHUFRSX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiU0dfTElTVF9OVUxMIiwJMHgwMSwgMHgwMSB9LAogCXsgIlNHX0ZVTExfUkVTSUQiLAkweDAyLCAweDAyIH0sCiAJeyAiU0dfU1RBVFVTX1ZBTElEIiwJMHgwNCwgMHgwNCB9CkBAIC0zNjU2LDEzICsyNDYwLDYgQEAKIH0KIAogaW50Ci1haGRfc2NiX3NwYXJlX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoZF9wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCX1NQQVJFIiwKLQkgICAgMHgxYjAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAogYWhkX3NjYl9kaXNjb25uZWN0ZWRfbGlzdHNfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQogewogCXJldHVybiAoYWhkX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ0JfRElTQ09OTkVDVEVEX0xJU1RTIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfc2VxLmhfc2hpcHBlZCBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfc2VxLmhfc2hpcHBlZAppbmRleCAxMWJlZDA3Li40YjUxZTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X3NlcS5oX3NoaXBwZWQKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9zZXEuaF9zaGlwcGVkCkBAIC01LDcgKzUsNyBAQAogICogJElkOiAvL2RlcG90L2FpYzd4eHgvYWljN3h4eC9haWM3OXh4LnNlcSMxMjAgJAogICogJElkOiAvL2RlcG90L2FpYzd4eHgvYWljN3h4eC9haWM3OXh4LnJlZyM3NyAkCiAgKi8KLXN0YXRpYyB1aW50OF90IHNlcXByb2dbXSA9IHsKK3N0YXRpYyBjb25zdCB1aW50OF90IHNlcXByb2dbXSA9IHsKIAkweGZmLCAweDAyLCAweDA2LCAweDc4LAogCTB4MDAsIDB4ZWEsIDB4NmUsIDB4NTksCiAJMHgwMSwgMHhlYSwgMHgwNCwgMHgzMCwKQEAgLTEwMjcsNyArMTAyNyw3IEBACiAJcmV0dXJuICgwKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwYXRjaCB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBhdGNoIHsKIAlhaGRfcGF0Y2hfZnVuY190CQkqcGF0Y2hfZnVuYzsKIAl1aW50MzJfdAkJIGJlZ2luCQk6MTAsCiAJCQkJIHNraXBfaW5zdHIJOjEwLApAQCAtMTE2Niw3ICsxMTY2LDcgQEAKIAl7IGFoZF9wYXRjaDIzX2Z1bmMsIDgxNSwgMTEsIDEgfQogfTsKIAotc3RhdGljIHN0cnVjdCBjcyB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNzIHsKIAl1aW50MTZfdAliZWdpbjsKIAl1aW50MTZfdAllbmQ7CiB9IGNyaXRpY2FsX3NlY3Rpb25zW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4LmggYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4LmgKaW5kZXggYzAzNDRlNi4uZTRlNjUxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eC5oCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHguaApAQCAtNzM2LDcgKzczNiw3IEBACiAjZGVmaW5lCQlTVF9TWEZSCSAgIDB4MDEwCS8qIFJhdGUgU2luZ2xlIFRyYW5zaXRpb24gT25seSAqLwogI2RlZmluZQkJRFRfU1hGUgkgICAweDA0MAkvKiBSYXRlIERvdWJsZSBUcmFuc2l0aW9uIE9ubHkgKi8KIAl1aW50OF90IHBlcmlvZDsgLyogUGVyaW9kIHRvIHNlbmQgdG8gU0NTSSB0YXJnZXQgKi8KLQljaGFyICpyYXRlOworCWNvbnN0IGNoYXIgKnJhdGU7CiB9OwogCiAvKiBTYWZlIGFuZCB2YWxpZCBwZXJpb2QgZm9yIGFzeW5jIG5lZ290aWF0aW9ucy4gKi8KQEAgLTExMTQsNyArMTExNCw3IEBACiBzdHJ1Y3QgYWhjX3BjaV9pZGVudGl0eSB7CiAJdWludDY0X3QJCSBmdWxsX2lkOwogCXVpbnQ2NF90CQkgaWRfbWFzazsKLQljaGFyCQkJKm5hbWU7CisJY29uc3QgY2hhcgkJKm5hbWU7CiAJYWhjX2RldmljZV9zZXR1cF90CSpzZXR1cDsKIH07CiAKQEAgLTExMzMsMTUgKzExMzMsMTEgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi11X2ludAkJCWFoY19pbmRleF9idXN5X3RjbChzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHVfaW50IHRjbCk7Ci12b2lkCQkJYWhjX3VuYnVzeV90Y2woc3RydWN0IGFoY19zb2Z0YyAqYWhjLCB1X2ludCB0Y2wpOwotdm9pZAkJCWFoY19idXN5X3RjbChzdHJ1Y3QgYWhjX3NvZnRjICphaGMsCi0JCQkJICAgICB1X2ludCB0Y2wsIHVfaW50IGJ1c3lpZCk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBQQ0kgRnJvbnQgRW5kICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0cnVjdCBhaGNfcGNpX2lkZW50aXR5CSphaGNfZmluZF9wY2lfZGV2aWNlKGFoY19kZXZfc29mdGNfdCk7Citjb25zdCBzdHJ1Y3QgYWhjX3BjaV9pZGVudGl0eQkqYWhjX2ZpbmRfcGNpX2RldmljZShhaGNfZGV2X3NvZnRjX3QpOwogaW50CQkJIGFoY19wY2lfY29uZmlnKHN0cnVjdCBhaGNfc29mdGMgKiwKLQkJCQkJc3RydWN0IGFoY19wY2lfaWRlbnRpdHkgKik7CisJCQkJCWNvbnN0IHN0cnVjdCBhaGNfcGNpX2lkZW50aXR5ICopOwogaW50CQkJIGFoY19wY2lfdGVzdF9yZWdpc3Rlcl9hY2Nlc3Moc3RydWN0IGFoY19zb2Z0YyAqKTsKICNpZmRlZiBDT05GSUdfUE0KIHZvaWQJCQkgYWhjX3BjaV9yZXN1bWUoc3RydWN0IGFoY19zb2Z0YyAqYWhjKTsKQEAgLTExNTUsOSArMTE1MSw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiBTQ0IgYW5kIFNDQiBxdWV1ZSBtYW5hZ2VtZW50ICoqKioqKioqKioqKioqKioqKioqKiovCiBpbnQJCWFoY19wcm9iZV9zY2JzKHN0cnVjdCBhaGNfc29mdGMgKik7Ci12b2lkCQlhaGNfcnVuX3VudGFnZ2VkX3F1ZXVlcyhzdHJ1Y3QgYWhjX3NvZnRjICphaGMpOwotdm9pZAkJYWhjX3J1bl91bnRhZ2dlZF9xdWV1ZShzdHJ1Y3QgYWhjX3NvZnRjICphaGMsCi0JCQkJICAgICAgIHN0cnVjdCBzY2JfdGFpbHEgKnF1ZXVlKTsKIHZvaWQJCWFoY19xaW5maWZvX3JlcXVldWVfdGFpbChzdHJ1Y3QgYWhjX3NvZnRjICphaGMsCiAJCQkJCSBzdHJ1Y3Qgc2NiICpzY2IpOwogaW50CQlhaGNfbWF0Y2hfc2NiKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgc3RydWN0IHNjYiAqc2NiLApAQCAtMTE3OCwyMiArMTE3MSw4IEBACiAjZW5kaWYKIHZvaWQJCQkgYWhjX3NldF91bml0KHN0cnVjdCBhaGNfc29mdGMgKiwgaW50KTsKIHZvaWQJCQkgYWhjX3NldF9uYW1lKHN0cnVjdCBhaGNfc29mdGMgKiwgY2hhciAqKTsKLXZvaWQJCQkgYWhjX2FsbG9jX3NjYnMoc3RydWN0IGFoY19zb2Z0YyAqYWhjKTsKIHZvaWQJCQkgYWhjX2ZyZWUoc3RydWN0IGFoY19zb2Z0YyAqYWhjKTsKIGludAkJCSBhaGNfcmVzZXQoc3RydWN0IGFoY19zb2Z0YyAqYWhjLCBpbnQgcmVpbml0KTsKLXZvaWQJCQkgYWhjX3NodXRkb3duKHZvaWQgKmFyZyk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKiogSW50ZXJydXB0IFNlcnZpY2VzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkCQkJYWhjX2NsZWFyX2ludHN0YXQoc3RydWN0IGFoY19zb2Z0YyAqYWhjKTsKLXZvaWQJCQlhaGNfcnVuX3FvdXRmaWZvKHN0cnVjdCBhaGNfc29mdGMgKmFoYyk7Ci0jaWZkZWYgQUhDX1RBUkdFVF9NT0RFCi12b2lkCQkJYWhjX3J1bl90cWluZmlmbyhzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIGludCBwYXVzZWQpOwotI2VuZGlmCi12b2lkCQkJYWhjX2hhbmRsZV9icmthZHJpbnQoc3RydWN0IGFoY19zb2Z0YyAqYWhjKTsKLXZvaWQJCQlhaGNfaGFuZGxlX3NlcWludChzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHVfaW50IGludHN0YXQpOwotdm9pZAkJCWFoY19oYW5kbGVfc2NzaWludChzdHJ1Y3QgYWhjX3NvZnRjICphaGMsCi0JCQkJCSAgIHVfaW50IGludHN0YXQpOwotdm9pZAkJCWFoY19jbGVhcl9jcml0aWNhbF9zZWN0aW9uKHN0cnVjdCBhaGNfc29mdGMgKmFoYyk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBFcnJvciBSZWNvdmVyeSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB0eXBlZGVmIGVudW0gewpAQCAtMTIxNCwzNiArMTE5MywxOSBAQAogCQkJCQkgICAgIGNoYXIgY2hhbm5lbCwgaW50IGx1biwgdV9pbnQgdGFnLAogCQkJCQkgICAgIGludCBzdG9wX29uX2ZpcnN0LCBpbnQgcmVtb3ZlLAogCQkJCQkgICAgIGludCBzYXZlX3N0YXRlKTsKLXZvaWQJCQlhaGNfZnJlZXplX2RldnEoc3RydWN0IGFoY19zb2Z0YyAqYWhjLCBzdHJ1Y3Qgc2NiICpzY2IpOwogaW50CQkJYWhjX3Jlc2V0X2NoYW5uZWwoc3RydWN0IGFoY19zb2Z0YyAqYWhjLCBjaGFyIGNoYW5uZWwsCiAJCQkJCSAgaW50IGluaXRpYXRlX3Jlc2V0KTsKLWludAkJCWFoY19hYm9ydF9zY2JzKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgaW50IHRhcmdldCwKLQkJCQkgICAgICAgY2hhciBjaGFubmVsLCBpbnQgbHVuLCB1X2ludCB0YWcsCi0JCQkJICAgICAgIHJvbGVfdCByb2xlLCB1aW50MzJfdCBzdGF0dXMpOwotdm9pZAkJCWFoY19yZXN0YXJ0KHN0cnVjdCBhaGNfc29mdGMgKmFoYyk7Ci12b2lkCQkJYWhjX2NhbGNfcmVzaWR1YWwoc3RydWN0IGFoY19zb2Z0YyAqYWhjLAotCQkJCQkgIHN0cnVjdCBzY2IgKnNjYik7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiogVXRpbGl0eSBGdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdHJ1Y3QgYWhjX3BoYXNlX3RhYmxlX2VudHJ5KgotCQkJYWhjX2xvb2t1cF9waGFzZV9lbnRyeShpbnQgcGhhc2UpOwogdm9pZAkJCWFoY19jb21waWxlX2RldmluZm8oc3RydWN0IGFoY19kZXZpbmZvICpkZXZpbmZvLAogCQkJCQkgICAgdV9pbnQgb3VyX2lkLCB1X2ludCB0YXJnZXQsCiAJCQkJCSAgICB1X2ludCBsdW4sIGNoYXIgY2hhbm5lbCwKIAkJCQkJICAgIHJvbGVfdCByb2xlKTsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiBUcmFuc2ZlciBOZWdvdGlhdGlvbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdHJ1Y3QgYWhjX3N5bmNyYXRlKglhaGNfZmluZF9zeW5jcmF0ZShzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHVfaW50ICpwZXJpb2QsCitjb25zdCBzdHJ1Y3QgYWhjX3N5bmNyYXRlKglhaGNfZmluZF9zeW5jcmF0ZShzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHVfaW50ICpwZXJpb2QsCiAJCQkJCSAgdV9pbnQgKnBwcl9vcHRpb25zLCB1X2ludCBtYXhzeW5jKTsKIHVfaW50CQkJYWhjX2ZpbmRfcGVyaW9kKHN0cnVjdCBhaGNfc29mdGMgKmFoYywKIAkJCQkJdV9pbnQgc2NzaXJhdGUsIHVfaW50IG1heHN5bmMpOwotdm9pZAkJCWFoY192YWxpZGF0ZV9vZmZzZXQoc3RydWN0IGFoY19zb2Z0YyAqYWhjLAotCQkJCQkgICAgc3RydWN0IGFoY19pbml0aWF0b3JfdGluZm8gKnRpbmZvLAotCQkJCQkgICAgc3RydWN0IGFoY19zeW5jcmF0ZSAqc3luY3JhdGUsCi0JCQkJCSAgICB1X2ludCAqb2Zmc2V0LCBpbnQgd2lkZSwKLQkJCQkJICAgIHJvbGVfdCByb2xlKTsKLXZvaWQJCQlhaGNfdmFsaWRhdGVfd2lkdGgoc3RydWN0IGFoY19zb2Z0YyAqYWhjLAotCQkJCQkgICBzdHJ1Y3QgYWhjX2luaXRpYXRvcl90aW5mbyAqdGluZm8sCi0JCQkJCSAgIHVfaW50ICpidXNfd2lkdGgsCi0JCQkJCSAgIHJvbGVfdCByb2xlKTsKIC8qCiAgKiBOZWdvdGlhdGlvbiB0eXBlcy4gIFRoZXNlIGFyZSB1c2VkIHRvIHF1YWxpZnkgaWYgd2Ugc2hvdWxkIHJlbmVnb3RpYXRlCiAgKiBldmVuIGlmIG91ciBnb2FsIGFuZCBjdXJyZW50IHRyYW5zcG9ydCBwYXJhbWV0ZXJzIGFyZSBpZGVudGljYWwuCkBAIC0xMjYzLDcgKzEyMjUsNyBAQAogCQkJCSAgICAgIHVfaW50IHdpZHRoLCB1X2ludCB0eXBlLCBpbnQgcGF1c2VkKTsKIHZvaWQJCQlhaGNfc2V0X3N5bmNyYXRlKHN0cnVjdCBhaGNfc29mdGMgKmFoYywKIAkJCQkJIHN0cnVjdCBhaGNfZGV2aW5mbyAqZGV2aW5mbywKLQkJCQkJIHN0cnVjdCBhaGNfc3luY3JhdGUgKnN5bmNyYXRlLAorCQkJCQkgY29uc3Qgc3RydWN0IGFoY19zeW5jcmF0ZSAqc3luY3JhdGUsCiAJCQkJCSB1X2ludCBwZXJpb2QsIHVfaW50IG9mZnNldCwKIAkJCQkJIHVfaW50IHBwcl9vcHRpb25zLAogCQkJCQkgdV9pbnQgdHlwZSwgaW50IHBhdXNlZCk7CkBAIC0xMzA1LDExICsxMjY3LDEwIEBACiAjZGVmaW5lIEFIQ19TSE9XX01BU0tFRF9FUlJPUlMJMHgxMDAwCiAjZGVmaW5lIEFIQ19ERUJVR19TRVFVRU5DRVIJMHgyMDAwCiAjZW5kaWYKLXZvaWQJCQlhaGNfcHJpbnRfc2NiKHN0cnVjdCBzY2IgKnNjYik7CiB2b2lkCQkJYWhjX3ByaW50X2RldmluZm8oc3RydWN0IGFoY19zb2Z0YyAqYWhjLAogCQkJCQkgIHN0cnVjdCBhaGNfZGV2aW5mbyAqZGV2KTsKIHZvaWQJCQlhaGNfZHVtcF9jYXJkX3N0YXRlKHN0cnVjdCBhaGNfc29mdGMgKmFoYyk7Ci1pbnQJCQlhaGNfcHJpbnRfcmVnaXN0ZXIoYWhjX3JlZ19wYXJzZV9lbnRyeV90ICp0YWJsZSwKK2ludAkJCWFoY19wcmludF9yZWdpc3Rlcihjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgKnRhYmxlLAogCQkJCQkgICB1X2ludCBudW1fZW50cmllcywKIAkJCQkJICAgY29uc3QgY2hhciAqbmFtZSwKIAkJCQkJICAgdV9pbnQgYWRkcmVzcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHgucmVnIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eC5yZWcKaW5kZXggZTE5NmQ4My4uMGQyZjc2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eC5yZWcKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eC5yZWcKQEAgLTIzOCw2ICsyMzgsNyBAQAogcmVnaXN0ZXIgT1BUSU9OTU9ERSB7CiAJYWRkcmVzcwkJCTB4MDA4CiAJYWNjZXNzX21vZGUgUlcKKwljb3VudAkJMgogCWZpZWxkCUFVVE9SQVRFRU4JCTB4ODAKIAlmaWVsZAlBVVRPQUNLRU4JCTB4NDAKIAlmaWVsZAlBVE5NR01OVEVOCQkweDIwCkBAIC0yNTQsNiArMjU1LDcgQEAKIAlhZGRyZXNzCQkJMHgwMGEKIAlzaXplCTIKIAlhY2Nlc3NfbW9kZSBSVworCWNvdW50CQkyCiB9CiAKIC8qCkBAIC0zNDQsNiArMzQ2LDcgQEAKIHJlZ2lzdGVyIFNTVEFUMyB7CiAJYWRkcmVzcwkJCTB4MDBlCiAJYWNjZXNzX21vZGUgUk8KKwljb3VudAkJMgogCW1hc2sJU0NTSUNOVAkJMHhmMAogCW1hc2sJT0ZGQ05UCQkweDBmCiAJbWFzawlVMk9GRkNOVAkweDdmCkBAIC0zNjcsNiArMzcwLDcgQEAKIHJlZ2lzdGVyIFNJTU9ERTAgewogCWFkZHJlc3MJCQkweDAxMAogCWFjY2Vzc19tb2RlIFJXCisJY291bnQJCTIKIAlmaWVsZAlFTlNFTERPCQkweDQwCiAJZmllbGQJRU5TRUxESQkJMHgyMAogCWZpZWxkCUVOU0VMSU5HTwkweDEwCkBAIC00MjksNiArNDMzLDcgQEAKIHJlZ2lzdGVyIFNFTFRJTUVSIHsKIAlhZGRyZXNzCQkJMHgwMTgKIAlhY2Nlc3NfbW9kZSBSVworCWNvdW50CQkxCiAJZmllbGQJU1RBR0U2CQkweDIwCiAJZmllbGQJU1RBR0U1CQkweDEwCiAJZmllbGQJU1RBR0U0CQkweDA4CkBAIC00NjcsNiArNDcyLDcgQEAKIAlhZGRyZXNzCQkJMHgwMWIKIAlzaXplCQkJMgogCWFjY2Vzc19tb2RlIFJXCisJY291bnQJCTE0CiB9CiAKIC8qCkBAIC00ODAsNiArNDg2LDcgQEAKIHJlZ2lzdGVyIFNQSU9DQVAgewogCWFkZHJlc3MJCQkweDAxYgogCWFjY2Vzc19tb2RlIFJXCisJY291bnQJCTEwCiAJZmllbGQJU09GVDEJCTB4ODAKIAlmaWVsZAlTT0ZUMAkJMHg0MAogCWZpZWxkCVNPRlRDTURFTgkweDIwCQpAQCAtNDkyLDYgKzQ5OSw3IEBACiAKIHJlZ2lzdGVyIEJSRENUTAl7CiAJYWRkcmVzcwkJCTB4MDFkCisJY291bnQJCTExCiAJZmllbGQJQlJEREFUNwkJMHg4MAogCWZpZWxkCUJSRERBVDYJCTB4NDAKIAlmaWVsZAlCUkREQVQ1CQkweDIwCkBAIC01MzQsNiArNTQyLDcgQEAKICAqLwogcmVnaXN0ZXIgU0VFQ1RMIHsKIAlhZGRyZXNzCQkJMHgwMWUKKwljb3VudAkJMTEKIAlmaWVsZAlFWFRBUkJBQ0sJMHg4MAogCWZpZWxkCUVYVEFSQlJFUQkweDQwCiAJZmllbGQJU0VFTVMJCTB4MjAKQEAgLTU3MCw2ICs1NzksNyBAQAogcmVnaXN0ZXIgU0VRQ1RMIHsKIAlhZGRyZXNzCQkJMHgwNjAKIAlhY2Nlc3NfbW9kZSBSVworCWNvdW50CQkxNQogCWZpZWxkCVBFUlJPUkRJUwkweDgwCiAJZmllbGQJUEFVU0VESVMJMHg0MAogCWZpZWxkCUZBSUxESVMJCTB4MjAKQEAgLTU5MCw2ICs2MDAsNyBAQAogcmVnaXN0ZXIgU0VRUkFNIHsKIAlhZGRyZXNzCQkJMHgwNjEKIAlhY2Nlc3NfbW9kZSBSVworCWNvdW50CQkyCiB9CiAKIC8qCkBAIC02MDQsNiArNjE1LDcgQEAKIHJlZ2lzdGVyIFNFUUFERFIxIHsKIAlhZGRyZXNzCQkJMHgwNjMKIAlhY2Nlc3NfbW9kZSBSVworCWNvdW50CQk4CiAJbWFzawlTRVFBRERSMV9NQVNLCTB4MDEKIH0KIApAQCAtNjQ5LDYgKzY2MSw3IEBACiByZWdpc3RlciBGTEFHUyB7CiAJYWRkcmVzcwkJCTB4MDZiCiAJYWNjZXNzX21vZGUgUk8KKwljb3VudAkJMTgKIAlmaWVsZAlaRVJPCQkweDAyCiAJZmllbGQJQ0FSUlkJCTB4MDEKIH0KQEAgLTY3MSw2ICs2ODQsNyBAQAogcmVnaXN0ZXIgU1RBQ0sgewogCWFkZHJlc3MJCQkweDA2ZgogCWFjY2Vzc19tb2RlIFJPCisJY291bnQJCTUKIH0KIAogY29uc3QJU1RBQ0tfU0laRQk0CkBAIC02OTIsNiArNzA2LDcgQEAKIHJlZ2lzdGVyIERTQ09NTUFORDAgewogCWFkZHJlc3MJCQkweDA4NAogCWFjY2Vzc19tb2RlIFJXCisJY291bnQJCTcKIAlmaWVsZAlDQUNIRVRIRU4JMHg4MAkvKiBDYWNoZSBUaHJlc2hvbGQgZW5hYmxlICovCiAJZmllbGQJRFBBUkNLRU4JMHg0MAkvKiBEYXRhIFBhcml0eSBDaGVjayBFbmFibGUgKi8KIAlmaWVsZAlNUEFSQ0tFTgkweDIwCS8qIE1lbW9yeSBQYXJpdHkgQ2hlY2sgRW5hYmxlICovCkBAIC03MTcsNiArNzMyLDcgQEAKIHJlZ2lzdGVyIEJVU1RJTUUgewogCWFkZHJlc3MJCQkweDA4NQogCWFjY2Vzc19tb2RlIFJXCisJY291bnQJCTIKIAltYXNrCUJPRkYJCTB4ZjAKIAltYXNrCUJPTgkJMHgwZgogfQpAQCAtNzI3LDYgKzc0Myw3IEBACiByZWdpc3RlciBCVVNTUEQgewogCWFkZHJlc3MJCQkweDA4NgogCWFjY2Vzc19tb2RlIFJXCisJY291bnQJCTIKIAltYXNrCURGVEhSU0gJCTB4YzAKIAltYXNrCVNUQk9GRgkJMHgzOAogCW1hc2sJU1RCT04JCTB4MDcKQEAgLTczNyw2ICs3NTQsNyBAQAogLyogYWljNzg1MC81NS82MC83MC84MC85NSBvbmx5ICovCiByZWdpc3RlciBEU1BDSVNUQVRVUyB7CiAJYWRkcmVzcwkJCTB4MDg2CisJY291bnQJCTQKIAltYXNrCURGVEhSU0hfMTAwCTB4YzAKIH0KIApAQCAtNzU4LDYgKzc3Niw3IEBACiByZWdpc3RlciBIQ05UUkwgewogCWFkZHJlc3MJCQkweDA4NwogCWFjY2Vzc19tb2RlIFJXCisJY291bnQJCTE0CiAJZmllbGQJUE9XUkROCQkweDQwCiAJZmllbGQJU1dJTlQJCTB4MTAKIAlmaWVsZAlJUlFNUwkJMHgwOApAQCAtODY5LDYgKzg4OCw3IEBACiByZWdpc3RlciBFUlJPUiB7CiAJYWRkcmVzcwkJCTB4MDkyCiAJYWNjZXNzX21vZGUgUk8KKwljb3VudAkJMjYKIAlmaWVsZAlDSU9QQVJFUlIJMHg4MAkvKiBVbHRyYTIgb25seSAqLwogCWZpZWxkCVBDSUVSUlNUQVQJMHg0MAkvKiBQQ0kgb25seSAqLwogCWZpZWxkCU1QQVJFUlIJCTB4MjAJLyogUENJIG9ubHkgKi8KQEAgLTg4NSw2ICs5MDUsNyBAQAogcmVnaXN0ZXIgQ0xSSU5UIHsKIAlhZGRyZXNzCQkJMHgwOTIKIAlhY2Nlc3NfbW9kZSBXTworCWNvdW50CQkyNAogCWZpZWxkCUNMUlBBUkVSUgkweDEwCS8qIFBDSSBvbmx5ICovCiAJZmllbGQJQ0xSQlJLQURSSU5UCTB4MDgKIAlmaWVsZAlDTFJTQ1NJSU5UICAgICAgMHgwNApAQCAtOTQzLDYgKzk2NCw3IEBACiByZWdpc3RlciBTQ0JDTlQgewogCWFkZHJlc3MJCQkweDA5YQogCWFjY2Vzc19tb2RlIFJXCisJY291bnQJCTEKIAlmaWVsZAlTQ0JBVVRPCQkweDgwCiAJbWFzawlTQ0JDTlRfTUFTSwkweDFmCiB9CkBAIC05NTQsNiArOTc2LDcgQEAKIHJlZ2lzdGVyIFFJTkZJRk8gewogCWFkZHJlc3MJCQkweDA5YgogCWFjY2Vzc19tb2RlIFJXCisJY291bnQJCTEyCiB9CiAKIC8qCkBAIC05NzIsMTEgKzk5NSwxMyBAQAogcmVnaXN0ZXIgUU9VVEZJRk8gewogCWFkZHJlc3MJCQkweDA5ZAogCWFjY2Vzc19tb2RlIFdPCisJY291bnQJCTcKIH0KIAogcmVnaXN0ZXIgQ1JDQ09OVFJPTDEgewogCWFkZHJlc3MJCQkweDA5ZAogCWFjY2Vzc19tb2RlIFJXCisJY291bnQJCTMKIAlmaWVsZAlDUkNPTlNFRU4JCTB4ODAKIAlmaWVsZAlDUkNWQUxDSEtFTgkJMHg0MAogCWZpZWxkCUNSQ0VORENIS0VOCQkweDIwCkBAIC0xMDEzLDYgKzEwMzgsNyBAQAogcmVnaXN0ZXIgU0ZVTkNUIHsKIAlhZGRyZXNzCQkJMHgwOWYKIAlhY2Nlc3NfbW9kZSBSVworCWNvdW50CSAgICA0CiAJZmllbGQJQUxUX01PREUJMHg4MAogfQogCkBAIC0xMDk1LDYgKzExMjEsNyBAQAogCX0KIAlTQ0JfU0NTSU9GRlNFVCB7CiAJCXNpemUJMQorCQljb3VudAkxCiAJfQogCVNDQl9ORVhUIHsKIAkJc2l6ZQkxCkBAIC0xMTE4LDYgKzExNDUsNyBAQAogcmVnaXN0ZXIgU0VFQ1RMXzI4NDAgewogCWFkZHJlc3MJCQkweDBjMAogCWFjY2Vzc19tb2RlIFJXCisJY291bnQJCTIKIAlmaWVsZAlDU18yODQwCQkweDA0CiAJZmllbGQJQ0tfMjg0MAkJMHgwMgogCWZpZWxkCURPXzI4NDAJCTB4MDEKQEAgLTExMjYsNiArMTE1NCw3IEBACiByZWdpc3RlciBTVEFUVVNfMjg0MCB7CiAJYWRkcmVzcwkJCTB4MGMxCiAJYWNjZXNzX21vZGUgUlcKKwljb3VudAkJNAogCWZpZWxkCUVFUFJPTV9URgkweDgwCiAJbWFzawlCSU9TX1NFTAkweDYwCiAJbWFzawlBRFNFTAkJMHgxZQpAQCAtMTE2MSw2ICsxMTkwLDcgQEAKIAogcmVnaXN0ZXIgQ0NTQ0JDTlQgewogCWFkZHJlc3MJCQkweEVGCisJY291bnQJCTEKIH0KIAogcmVnaXN0ZXIgQ0NTQ0JDVEwgewpAQCAtMTE4Nyw2ICsxMjE3LDcgQEAKIHJlZ2lzdGVyIFNDQkJBRERSIHsKIAlhZGRyZXNzCQkJMHgwRjAKIAlhY2Nlc3NfbW9kZSBSVworCWNvdW50CQkzCiB9CiAKIHJlZ2lzdGVyIENDU0NCUFRSIHsKQEAgLTExOTUsNiArMTIyNiw3IEBACiAKIHJlZ2lzdGVyIEhOU0NCX1FPRkYgewogCWFkZHJlc3MJCQkweDBGNAorCWNvdW50CQk0CiB9CiAKIHJlZ2lzdGVyIFNOU0NCX1FPRkYgewpAQCAtMTIzNCw2ICsxMjY2LDcgQEAKIAltYXNrCVdSX0RGVEhSU0hfODUJMHg1MAogCW1hc2sJV1JfREZUSFJTSF85MAkweDYwCiAJbWFzawlXUl9ERlRIUlNIX01BWAkweDcwCisJY291bnQJNAogfQogCiByZWdpc3RlciBTR19DQUNIRV9QUkUgewpAQCAtMTI4Nyw2ICsxMzIwLDcgQEAKIAlVTFRSQV9FTkIgewogCQlhbGlhcwkJQ01EU0laRV9UQUJMRQogCQlzaXplCQkyCisJCWNvdW50CQkyCiAJfQogCS8qCiAJICogQml0IHZlY3RvciBvZiB0YXJnZXRzIHRoYXQgaGF2ZSBkaXNjb25uZWN0aW9uIGRpc2FibGVkIGFzIHNldCBieQpAQCAtMTI5Niw2ICsxMzMwLDcgQEAKIAkgKi8KIAlESVNDX0RTQiB7CiAJCXNpemUJCTIKKwkJY291bnQJCTYKIAl9CiAJQ01EU0laRV9UQUJMRV9UQUlMIHsKIAkJc2l6ZQkJNApAQCAtMTMyMyw2ICsxMzU4LDcgQEAKIAkvKiBQYXJhbWV0ZXJzIGZvciBETUEgTG9naWMgKi8KIAlETUFQQVJBTVMgewogCQlzaXplCQkxCisJCWNvdW50CQkxMgogCQlmaWVsZAlQUkVMT0FERU4JMHg4MAogCQlmaWVsZAlXSURFT0RECQkweDQwCiAJCWZpZWxkCVNDU0lFTgkJMHgyMApAQCAtMTQzNiwxMSArMTQ3MiwxMiBAQAogCUtFUk5FTF9UUUlOUE9TIHsKIAkJc2l6ZQkJMQogCX0KLQlUUUlOUE9TIHsgICAgICAgICAgICAgICAgCisJVFFJTlBPUyB7CiAJCXNpemUJCTEKIAl9CiAJQVJHXzEgewogCQlzaXplCQkxCisJCWNvdW50CQkxCiAJCW1hc2sJU0VORF9NU0cJCTB4ODAKIAkJbWFzawlTRU5EX1NFTlNFCQkweDQwCiAJCW1hc2sJU0VORF9SRUoJCTB4MjAKQEAgLTE0OTUsNiArMTUzMiw3IEBACiAJCXNpemUJMQogCQlmaWVsZAlIQV8yNzRfRVhURU5ERURfVFJBTlMJMHgwMQogCQlhbGlhcwlJTklUSUFUT1JfVEFHCisJCWNvdW50CQkxCiAJfQogCiAJU0VRX0ZMQUdTMiB7CkBAIC0xNTE4LDYgKzE1NTYsNyBAQAogCSAqLwogCVNDU0lDT05GIHsKIAkJc2l6ZQkJMQorCQljb3VudAkJMTIKIAkJZmllbGQJVEVSTV9FTkIJMHg4MAogCQlmaWVsZAlSRVNFVF9TQ1NJCTB4NDAKIAkJZmllbGQJRU5TUENISwkJMHgyMApAQCAtMTUyNywxNiArMTU2NiwxOSBAQAogCUlOVERFRiB7CiAJCWFkZHJlc3MJCTB4MDVjCiAJCXNpemUJCTEKKwkJY291bnQJCTEKIAkJZmllbGQJRURHRV9UUklHCTB4ODAKIAkJbWFzawlWRUNUT1IJCTB4MGYKIAl9CiAJSE9TVENPTkYgewogCQlhZGRyZXNzCQkweDA1ZAogCQlzaXplCQkxCisJCWNvdW50CQkxCiAJfQogCUhBXzI3NF9CSU9TQ1RSTAl7CiAJCWFkZHJlc3MJCTB4MDVmCiAJCXNpemUJCTEKKwkJY291bnQJCTEKIAkJbWFzawlCSU9TTU9ERQkJMHgzMAogCQltYXNrCUJJT1NESVNBQkxFRAkJMHgzMAkKIAkJZmllbGQJQ0hBTk5FTF9CX1BSSU1BUlkJMHgwOApAQCAtMTU1Miw2ICsxNTk0LDcgQEAKIAkgKi8KIAlUQVJHX09GRlNFVCB7CiAJCXNpemUJCTE2CisJCWNvdW50CQkxCiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4XzkzY3g2LmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4XzkzY3g2LmMKaW5kZXggM2NiMDdlMS4uZGQxMTk5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF85M2N4Ni5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfOTNjeDYuYwpAQCAtODQsMTYgKzg0LDE2IEBACiB9OwogCiAvKiBTaG9ydCBvcGNvZGVzIGZvciB0aGUgYzQ2ICovCi1zdGF0aWMgc3RydWN0IHNlZXByb21fY21kIHNlZXByb21fZXdlbiA9IHs5LCB7MSwgMCwgMCwgMSwgMSwgMCwgMCwgMCwgMH19Owotc3RhdGljIHN0cnVjdCBzZWVwcm9tX2NtZCBzZWVwcm9tX2V3ZHMgPSB7OSwgezEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9fTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VlcHJvbV9jbWQgc2VlcHJvbV9ld2VuID0gezksIHsxLCAwLCAwLCAxLCAxLCAwLCAwLCAwLCAwfX07CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlZXByb21fY21kIHNlZXByb21fZXdkcyA9IHs5LCB7MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH19OwogCiAvKiBMb25nIG9wY29kZXMgZm9yIHRoZSBDNTYvQzY2ICovCi1zdGF0aWMgc3RydWN0IHNlZXByb21fY21kIHNlZXByb21fbG9uZ19ld2VuID0gezExLCB7MSwgMCwgMCwgMSwgMSwgMCwgMCwgMCwgMH19Owotc3RhdGljIHN0cnVjdCBzZWVwcm9tX2NtZCBzZWVwcm9tX2xvbmdfZXdkcyA9IHsxMSwgezEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9fTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VlcHJvbV9jbWQgc2VlcHJvbV9sb25nX2V3ZW4gPSB7MTEsIHsxLCAwLCAwLCAxLCAxLCAwLCAwLCAwLCAwfX07CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlZXByb21fY21kIHNlZXByb21fbG9uZ19ld2RzID0gezExLCB7MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH19OwogCiAvKiBDb21tb24gb3Bjb2RlcyAqLwotc3RhdGljIHN0cnVjdCBzZWVwcm9tX2NtZCBzZWVwcm9tX3dyaXRlID0gezMsIHsxLCAwLCAxfX07Ci1zdGF0aWMgc3RydWN0IHNlZXByb21fY21kIHNlZXByb21fcmVhZCAgPSB7MywgezEsIDEsIDB9fTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VlcHJvbV9jbWQgc2VlcHJvbV93cml0ZSA9IHszLCB7MSwgMCwgMX19Oworc3RhdGljIGNvbnN0IHN0cnVjdCBzZWVwcm9tX2NtZCBzZWVwcm9tX3JlYWQgID0gezMsIHsxLCAxLCAwfX07CiAKIC8qCiAgKiBXYWl0IGZvciB0aGUgU0VFUkRZIHRvIGdvIGhpZ2g7IGFib3V0IDgwMCBucy4KQEAgLTEwOCw3ICsxMDgsNyBAQAogICogU2VuZCBhIFNUQVJUIGNvbmRpdGlvbiBhbmQgdGhlIGdpdmVuIGNvbW1hbmQKICAqLwogc3RhdGljIHZvaWQKLXNlbmRfc2VlcHJvbV9jbWQoc3RydWN0IHNlZXByb21fZGVzY3JpcHRvciAqc2QsIHN0cnVjdCBzZWVwcm9tX2NtZCAqY21kKQorc2VuZF9zZWVwcm9tX2NtZChzdHJ1Y3Qgc2VlcHJvbV9kZXNjcmlwdG9yICpzZCwgY29uc3Qgc3RydWN0IHNlZXByb21fY21kICpjbWQpCiB7CiAJdWludDhfdCB0ZW1wOwogCWludCBpID0gMDsKQEAgLTIyNyw3ICsyMjcsNyBAQAogYWhjX3dyaXRlX3NlZXByb20oc3RydWN0IHNlZXByb21fZGVzY3JpcHRvciAqc2QsIHVpbnQxNl90ICpidWYsCiAJCSAgdV9pbnQgc3RhcnRfYWRkciwgdV9pbnQgY291bnQpCiB7Ci0Jc3RydWN0IHNlZXByb21fY21kICpld2VuLCAqZXdkczsKKwljb25zdCBzdHJ1Y3Qgc2VlcHJvbV9jbWQgKmV3ZW4sICpld2RzOwogCXVpbnQxNl90IHY7CiAJdWludDhfdCB0ZW1wOwogCWludCBpLCBrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9jb3JlLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X2NvcmUuYwppbmRleCA2NGU2MmNlLi4wYWUyYjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X2NvcmUuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X2NvcmUuYwpAQCAtNTEsOCArNTEsNyBAQAogI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBMb29rdXAgVGFibGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1jaGFyICphaGNfY2hpcF9uYW1lc1tdID0KLXsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBhaGNfY2hpcF9uYW1lc1tdID0gewogCSJOT05FIiwKIAkiYWljNzc3MCIsCiAJImFpYzc4NTAiLApAQCAtNzUsMTAgKzc0LDEwIEBACiAgKi8KIHN0cnVjdCBhaGNfaGFyZF9lcnJvcl9lbnRyeSB7CiAgICAgICAgIHVpbnQ4X3QgZXJybm87Ci0JY2hhciAqZXJybWVzZzsKKwljb25zdCBjaGFyICplcnJtZXNnOwogfTsKIAotc3RhdGljIHN0cnVjdCBhaGNfaGFyZF9lcnJvcl9lbnRyeSBhaGNfaGFyZF9lcnJvcnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWhjX2hhcmRfZXJyb3JfZW50cnkgYWhjX2hhcmRfZXJyb3JzW10gPSB7CiAJeyBJTExIQUREUiwJIklsbGVnYWwgSG9zdCBBY2Nlc3MiIH0sCiAJeyBJTExTQUREUiwJIklsbGVnYWwgU2VxdWVuY2VyIEFkZHJlc3MgcmVmZXJyZW5jZWQiIH0sCiAJeyBJTExPUENPREUsCSJJbGxlZ2FsIE9wY29kZSBpbiBzZXF1ZW5jZXIgcHJvZ3JhbSIgfSwKQEAgLTkwLDcgKzg5LDcgQEAKIH07CiBzdGF0aWMgY29uc3QgdV9pbnQgbnVtX2Vycm9ycyA9IEFSUkFZX1NJWkUoYWhjX2hhcmRfZXJyb3JzKTsKIAotc3RhdGljIHN0cnVjdCBhaGNfcGhhc2VfdGFibGVfZW50cnkgYWhjX3BoYXNlX3RhYmxlW10gPQorc3RhdGljIGNvbnN0IHN0cnVjdCBhaGNfcGhhc2VfdGFibGVfZW50cnkgYWhjX3BoYXNlX3RhYmxlW10gPQogewogCXsgUF9EQVRBT1VULAlNU0dfTk9PUCwJCSJpbiBEYXRhLW91dCBwaGFzZSIJfSwKIAl7IFBfREFUQUlOLAlNU0dfSU5JVElBVE9SX0RFVF9FUlIsCSJpbiBEYXRhLWluIHBoYXNlIgl9LApAQCAtMTE1LDcgKzExNCw3IEBACiAgKiBQcm92aWRlcyBhIG1hcHBpbmcgb2YgdHJhbmZlciBwZXJpb2RzIGluIG5zIHRvIHRoZSBwcm9wZXIgdmFsdWUgdG8KICAqIHN0aWNrIGluIHRoZSBzY3NpeGZlciByZWcuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgYWhjX3N5bmNyYXRlIGFoY19zeW5jcmF0ZXNbXSA9CitzdGF0aWMgY29uc3Qgc3RydWN0IGFoY19zeW5jcmF0ZSBhaGNfc3luY3JhdGVzW10gPQogewogICAgICAgLyogdWx0cmEyICAgIGZhc3QvdWx0cmEgIHBlcmlvZCAgICAgcmF0ZSAqLwogCXsgMHg0MiwgICAgICAweDAwMCwgICAgICA5LCAgICAgICI4MC4wIiB9LApAQCAtMTQ4LDcgKzE0Nyw3IEBACiBzdGF0aWMgdm9pZAkJYWhjX2ZyZWVfdHN0YXRlKHN0cnVjdCBhaGNfc29mdGMgKmFoYywKIAkJCQkJdV9pbnQgc2NzaV9pZCwgY2hhciBjaGFubmVsLCBpbnQgZm9yY2UpOwogI2VuZGlmCi1zdGF0aWMgc3RydWN0IGFoY19zeW5jcmF0ZSoKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWhjX3N5bmNyYXRlKgogCQkJYWhjX2RldmxpbWl0ZWRfc3luY3JhdGUoc3RydWN0IGFoY19zb2Z0YyAqYWhjLAogCQkJCQkgICAgICAgIHN0cnVjdCBhaGNfaW5pdGlhdG9yX3RpbmZvICosCiAJCQkJCQl1X2ludCAqcGVyaW9kLApAQCAtMjA0LDkgKzIwMyw5IEBACiAjZW5kaWYKIAogc3RhdGljIGJ1c19kbWFtYXBfY2FsbGJhY2tfdAlhaGNfZG1hbWFwX2NiOyAKLXN0YXRpYyB2b2lkCQkJYWhjX2J1aWxkX2ZyZWVfc2NiX2xpc3Qoc3RydWN0IGFoY19zb2Z0YyAqYWhjKTsKLXN0YXRpYyBpbnQJCQlhaGNfaW5pdF9zY2JkYXRhKHN0cnVjdCBhaGNfc29mdGMgKmFoYyk7Ci1zdGF0aWMgdm9pZAkJCWFoY19maW5pX3NjYmRhdGEoc3RydWN0IGFoY19zb2Z0YyAqYWhjKTsKK3N0YXRpYyB2b2lkCQlhaGNfYnVpbGRfZnJlZV9zY2JfbGlzdChzdHJ1Y3QgYWhjX3NvZnRjICphaGMpOworc3RhdGljIGludAkJYWhjX2luaXRfc2NiZGF0YShzdHJ1Y3QgYWhjX3NvZnRjICphaGMpOworc3RhdGljIHZvaWQJCWFoY19maW5pX3NjYmRhdGEoc3RydWN0IGFoY19zb2Z0YyAqYWhjKTsKIHN0YXRpYyB2b2lkCQlhaGNfcWluZmlmb19yZXF1ZXVlKHN0cnVjdCBhaGNfc29mdGMgKmFoYywKIAkJCQkJICAgIHN0cnVjdCBzY2IgKnByZXZfc2NiLAogCQkJCQkgICAgc3RydWN0IHNjYiAqc2NiKTsKQEAgLTIyMiw3ICsyMjEsNyBAQAogI2VuZGlmCiBzdGF0aWMgaW50CQlhaGNfbG9hZHNlcShzdHJ1Y3QgYWhjX3NvZnRjICphaGMpOwogc3RhdGljIGludAkJYWhjX2NoZWNrX3BhdGNoKHN0cnVjdCBhaGNfc29mdGMgKmFoYywKLQkJCQkJc3RydWN0IHBhdGNoICoqc3RhcnRfcGF0Y2gsCisJCQkJCWNvbnN0IHN0cnVjdCBwYXRjaCAqKnN0YXJ0X3BhdGNoLAogCQkJCQl1X2ludCBzdGFydF9pbnN0ciwgdV9pbnQgKnNraXBfYWRkcik7CiBzdGF0aWMgdm9pZAkJYWhjX2Rvd25sb2FkX2luc3RyKHN0cnVjdCBhaGNfc29mdGMgKmFoYywKIAkJCQkJICAgdV9pbnQgaW5zdHJwdHIsIHVpbnQ4X3QgKmRjb25zdHMpOwpAQCAtMjM3LDExICsyMzYsNTgyIEBACiBzdGF0aWMgaW50CQlhaGNfaGFuZGxlX3RhcmdldF9jbWQoc3RydWN0IGFoY19zb2Z0YyAqYWhjLAogCQkJCQkgICAgICBzdHJ1Y3QgdGFyZ2V0X2NtZCAqY21kKTsKICNlbmRpZgorCitzdGF0aWMgdV9pbnQJCWFoY19pbmRleF9idXN5X3RjbChzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHVfaW50IHRjbCk7CitzdGF0aWMgdm9pZAkJYWhjX3VuYnVzeV90Y2woc3RydWN0IGFoY19zb2Z0YyAqYWhjLCB1X2ludCB0Y2wpOworc3RhdGljIHZvaWQJCWFoY19idXN5X3RjbChzdHJ1Y3QgYWhjX3NvZnRjICphaGMsCisJCQkJICAgICB1X2ludCB0Y2wsIHVfaW50IGJ1c3lpZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKiBTQ0IgYW5kIFNDQiBxdWV1ZSBtYW5hZ2VtZW50ICoqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZAkJYWhjX3J1bl91bnRhZ2dlZF9xdWV1ZXMoc3RydWN0IGFoY19zb2Z0YyAqYWhjKTsKK3N0YXRpYyB2b2lkCQlhaGNfcnVuX3VudGFnZ2VkX3F1ZXVlKHN0cnVjdCBhaGNfc29mdGMgKmFoYywKKwkJCQkJICAgICAgIHN0cnVjdCBzY2JfdGFpbHEgKnF1ZXVlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBJbml0aWFsaXphdGlvbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkCQkgYWhjX2FsbG9jX3NjYnMoc3RydWN0IGFoY19zb2Z0YyAqYWhjKTsKK3N0YXRpYyB2b2lkCQkgYWhjX3NodXRkb3duKHZvaWQgKmFyZyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKiogSW50ZXJydXB0IFNlcnZpY2VzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZAkJYWhjX2NsZWFyX2ludHN0YXQoc3RydWN0IGFoY19zb2Z0YyAqYWhjKTsKK3N0YXRpYyB2b2lkCQlhaGNfcnVuX3FvdXRmaWZvKHN0cnVjdCBhaGNfc29mdGMgKmFoYyk7CisjaWZkZWYgQUhDX1RBUkdFVF9NT0RFCitzdGF0aWMgdm9pZAkJYWhjX3J1bl90cWluZmlmbyhzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIGludCBwYXVzZWQpOworI2VuZGlmCitzdGF0aWMgdm9pZAkJYWhjX2hhbmRsZV9icmthZHJpbnQoc3RydWN0IGFoY19zb2Z0YyAqYWhjKTsKK3N0YXRpYyB2b2lkCQlhaGNfaGFuZGxlX3NlcWludChzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHVfaW50IGludHN0YXQpOworc3RhdGljIHZvaWQJCWFoY19oYW5kbGVfc2NzaWludChzdHJ1Y3QgYWhjX3NvZnRjICphaGMsCisJCQkJCSAgIHVfaW50IGludHN0YXQpOworc3RhdGljIHZvaWQJCWFoY19jbGVhcl9jcml0aWNhbF9zZWN0aW9uKHN0cnVjdCBhaGNfc29mdGMgKmFoYyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBFcnJvciBSZWNvdmVyeSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZAkJYWhjX2ZyZWV6ZV9kZXZxKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgc3RydWN0IHNjYiAqc2NiKTsKK3N0YXRpYyBpbnQJCWFoY19hYm9ydF9zY2JzKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgaW50IHRhcmdldCwKKwkJCQkgICAgICAgY2hhciBjaGFubmVsLCBpbnQgbHVuLCB1X2ludCB0YWcsCisJCQkJICAgICAgIHJvbGVfdCByb2xlLCB1aW50MzJfdCBzdGF0dXMpOworc3RhdGljIHZvaWQJCWFoY19jYWxjX3Jlc2lkdWFsKHN0cnVjdCBhaGNfc29mdGMgKmFoYywKKwkJCQkJICBzdHJ1Y3Qgc2NiICpzY2IpOworCisvKioqKioqKioqKioqKioqKioqKioqKiogVW50YWdnZWQgVHJhbnNhY3Rpb24gUm91dGluZXMgKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkCWFoY19mcmVlemVfdW50YWdnZWRfcXVldWVzKHN0cnVjdCBhaGNfc29mdGMgKmFoYyk7CitzdGF0aWMgaW5saW5lIHZvaWQJYWhjX3JlbGVhc2VfdW50YWdnZWRfcXVldWVzKHN0cnVjdCBhaGNfc29mdGMgKmFoYyk7CisKKy8qCisgKiBCbG9jayBvdXIgY29tcGxldGlvbiByb3V0aW5lIGZyb20gc3RhcnRpbmcgdGhlIG5leHQgdW50YWdnZWQKKyAqIHRyYW5zYWN0aW9uIGZvciB0aGlzIHRhcmdldCBvciB0YXJnZXQgbHVuLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2FoY19mcmVlemVfdW50YWdnZWRfcXVldWVzKHN0cnVjdCBhaGNfc29mdGMgKmFoYykKK3sKKwlpZiAoKGFoYy0+ZmxhZ3MgJiBBSENfU0NCX0JUVCkgPT0gMCkKKwkJYWhjLT51bnRhZ2dlZF9xdWV1ZV9sb2NrKys7Cit9CisKKy8qCisgKiBBbGxvdyB0aGUgbmV4dCB1bnRhZ2dlZCB0cmFuc2FjdGlvbiBmb3IgdGhpcyB0YXJnZXQgb3IgdGFyZ2V0IGx1bgorICogdG8gYmUgZXhlY3V0ZWQuICBXZSB1c2UgYSBjb3VudGluZyBzZW1hcGhvcmUgdG8gYWxsb3cgdGhlIGxvY2sKKyAqIHRvIGJlIGFjcXVpcmVkIHJlY3Vyc2l2ZWx5LiAgT25jZSB0aGUgY291bnQgZHJvcHMgdG8gemVybywgdGhlCisgKiB0cmFuc2FjdGlvbiBxdWV1ZXMgd2lsbCBiZSBydW4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYWhjX3JlbGVhc2VfdW50YWdnZWRfcXVldWVzKHN0cnVjdCBhaGNfc29mdGMgKmFoYykKK3sKKwlpZiAoKGFoYy0+ZmxhZ3MgJiBBSENfU0NCX0JUVCkgPT0gMCkgeworCQlhaGMtPnVudGFnZ2VkX3F1ZXVlX2xvY2stLTsKKwkJaWYgKGFoYy0+dW50YWdnZWRfcXVldWVfbG9jayA9PSAwKQorCQkJYWhjX3J1bl91bnRhZ2dlZF9xdWV1ZXMoYWhjKTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqIFNlcXVlbmNlciBFeGVjdXRpb24gQ29udHJvbCAqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogV29yayBhcm91bmQgYW55IGNoaXAgYnVncyByZWxhdGVkIHRvIGhhbHRpbmcgc2VxdWVuY2VyIGV4ZWN1dGlvbi4KKyAqIE9uIFVsdHJhMiBjb250cm9sbGVycywgd2UgbXVzdCBjbGVhciB0aGUgQ0lPQlVTIHN0cmV0Y2ggc2lnbmFsIGJ5CisgKiByZWFkaW5nIGEgcmVnaXN0ZXIgdGhhdCB3aWxsIHNldCB0aGlzIHNpZ25hbCBhbmQgZGVhc3NlcnQgaXQuCisgKiBXaXRob3V0IHRoaXMgd29ya2Fyb3VuZCwgaWYgdGhlIGNoaXAgaXMgcGF1c2VkLCBieSBhbiBpbnRlcnJ1cHQgb3IKKyAqIG1hbnVhbCBwYXVzZSB3aGlsZSBhY2Nlc3Npbmcgc2NiIHJhbSwgYWNjZXNzZXMgdG8gY2VydGFpbiByZWdpc3RlcnMKKyAqIHdpbGwgaGFuZyB0aGUgc3lzdGVtIChpbmZpbml0ZSBwY2kgcmV0cmllcykuCisgKi8KK3N0YXRpYyB2b2lkCithaGNfcGF1c2VfYnVnX2ZpeChzdHJ1Y3QgYWhjX3NvZnRjICphaGMpCit7CisJaWYgKChhaGMtPmZlYXR1cmVzICYgQUhDX1VMVFJBMikgIT0gMCkKKwkJKHZvaWQpYWhjX2luYihhaGMsIENDU0NCQ1RMKTsKK30KKworLyoKKyAqIERldGVybWluZSB3aGV0aGVyIHRoZSBzZXF1ZW5jZXIgaGFzIGhhbHRlZCBjb2RlIGV4ZWN1dGlvbi4KKyAqIFJldHVybnMgbm9uLXplcm8gc3RhdHVzIGlmIHRoZSBzZXF1ZW5jZXIgaXMgc3RvcHBlZC4KKyAqLworaW50CithaGNfaXNfcGF1c2VkKHN0cnVjdCBhaGNfc29mdGMgKmFoYykKK3sKKwlyZXR1cm4gKChhaGNfaW5iKGFoYywgSENOVFJMKSAmIFBBVVNFKSAhPSAwKTsKK30KKworLyoKKyAqIFJlcXVlc3QgdGhhdCB0aGUgc2VxdWVuY2VyIHN0b3AgYW5kIHdhaXQsIGluZGVmaW5pdGVseSwgZm9yIGl0CisgKiB0byBzdG9wLiAgVGhlIHNlcXVlbmNlciB3aWxsIG9ubHkgYWNrbm93bGVkZ2UgdGhhdCBpdCBpcyBwYXVzZWQKKyAqIG9uY2UgaXQgaGFzIHJlYWNoZWQgYW4gaW5zdHJ1Y3Rpb24gYm91bmRhcnkgYW5kIFBBVVNFRElTIGlzCisgKiBjbGVhcmVkIGluIHRoZSBTRVFDVEwgcmVnaXN0ZXIuICBUaGUgc2VxdWVuY2VyIG1heSB1c2UgUEFVU0VESVMKKyAqIGZvciBjcml0aWNhbCBzZWN0aW9ucy4KKyAqLwordm9pZAorYWhjX3BhdXNlKHN0cnVjdCBhaGNfc29mdGMgKmFoYykKK3sKKwlhaGNfb3V0YihhaGMsIEhDTlRSTCwgYWhjLT5wYXVzZSk7CisKKwkvKgorCSAqIFNpbmNlIHRoZSBzZXF1ZW5jZXIgY2FuIGRpc2FibGUgcGF1c2luZyBpbiBhIGNyaXRpY2FsIHNlY3Rpb24sIHdlCisJICogbXVzdCBsb29wIHVudGlsIGl0IGFjdHVhbGx5IHN0b3BzLgorCSAqLworCXdoaWxlIChhaGNfaXNfcGF1c2VkKGFoYykgPT0gMCkKKwkJOworCisJYWhjX3BhdXNlX2J1Z19maXgoYWhjKTsKK30KKworLyoKKyAqIEFsbG93IHRoZSBzZXF1ZW5jZXIgdG8gY29udGludWUgcHJvZ3JhbSBleGVjdXRpb24uCisgKiBXZSBjaGVjayBoZXJlIHRvIGVuc3VyZSB0aGF0IG5vIGFkZGl0aW9uYWwgaW50ZXJydXB0CisgKiBzb3VyY2VzIHRoYXQgd291bGQgY2F1c2UgdGhlIHNlcXVlbmNlciB0byBoYWx0IGhhdmUgYmVlbgorICogYXNzZXJ0ZWQuICBJZiwgZm9yIGV4YW1wbGUsIGEgU0NTSSBidXMgcmVzZXQgaXMgZGV0ZWN0ZWQKKyAqIHdoaWxlIHdlIGFyZSBmaWVsZGluZyBhIGRpZmZlcmVudCwgcGF1c2luZywgaW50ZXJydXB0IHR5cGUsCisgKiB3ZSBkb24ndCB3YW50IHRvIHJlbGVhc2UgdGhlIHNlcXVlbmNlciBiZWZvcmUgZ29pbmcgYmFjaworICogaW50byBvdXIgaW50ZXJydXB0IGhhbmRsZXIgYW5kIGRlYWxpbmcgd2l0aCB0aGlzIG5ldworICogY29uZGl0aW9uLgorICovCit2b2lkCithaGNfdW5wYXVzZShzdHJ1Y3QgYWhjX3NvZnRjICphaGMpCit7CisJaWYgKChhaGNfaW5iKGFoYywgSU5UU1RBVCkgJiAoU0NTSUlOVCB8IFNFUUlOVCB8IEJSS0FEUklOVCkpID09IDApCisJCWFoY19vdXRiKGFoYywgSENOVFJMLCBhaGMtPnVucGF1c2UpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKiogTWVtb3J5IG1hcHBpbmcgcm91dGluZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBhaGNfZG1hX3NlZyAqCithaGNfc2dfYnVzX3RvX3ZpcnQoc3RydWN0IHNjYiAqc2NiLCB1aW50MzJfdCBzZ19idXNhZGRyKQoreworCWludCBzZ19pbmRleDsKKworCXNnX2luZGV4ID0gKHNnX2J1c2FkZHIgLSBzY2ItPnNnX2xpc3RfcGh5cykvc2l6ZW9mKHN0cnVjdCBhaGNfZG1hX3NlZyk7CisJLyogc2dfbGlzdF9waHlzIHBvaW50cyB0byBlbnRyeSAxLCBub3QgMCAqLworCXNnX2luZGV4Kys7CisKKwlyZXR1cm4gKCZzY2ItPnNnX2xpc3Rbc2dfaW5kZXhdKTsKK30KKworc3RhdGljIHVpbnQzMl90CithaGNfc2dfdmlydF90b19idXMoc3RydWN0IHNjYiAqc2NiLCBzdHJ1Y3QgYWhjX2RtYV9zZWcgKnNnKQoreworCWludCBzZ19pbmRleDsKKworCS8qIHNnX2xpc3RfcGh5cyBwb2ludHMgdG8gZW50cnkgMSwgbm90IDAgKi8KKwlzZ19pbmRleCA9IHNnIC0gJnNjYi0+c2dfbGlzdFsxXTsKKworCXJldHVybiAoc2NiLT5zZ19saXN0X3BoeXMgKyAoc2dfaW5kZXggKiBzaXplb2YoKnNjYi0+c2dfbGlzdCkpKTsKK30KKworc3RhdGljIHVpbnQzMl90CithaGNfaHNjYl9idXNhZGRyKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgdV9pbnQgaW5kZXgpCit7CisJcmV0dXJuIChhaGMtPnNjYl9kYXRhLT5oc2NiX2J1c2FkZHIKKwkJKyAoc2l6ZW9mKHN0cnVjdCBoYXJkd2FyZV9zY2IpICogaW5kZXgpKTsKK30KKworc3RhdGljIHZvaWQKK2FoY19zeW5jX3NjYihzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHN0cnVjdCBzY2IgKnNjYiwgaW50IG9wKQoreworCWFoY19kbWFtYXBfc3luYyhhaGMsIGFoYy0+c2NiX2RhdGEtPmhzY2JfZG1hdCwKKwkJCWFoYy0+c2NiX2RhdGEtPmhzY2JfZG1hbWFwLAorCQkJLypvZmZzZXQqLyhzY2ItPmhzY2IgLSBhaGMtPmhzY2JzKSAqIHNpemVvZigqc2NiLT5oc2NiKSwKKwkJCS8qbGVuKi9zaXplb2YoKnNjYi0+aHNjYiksIG9wKTsKK30KKwordm9pZAorYWhjX3N5bmNfc2dsaXN0KHN0cnVjdCBhaGNfc29mdGMgKmFoYywgc3RydWN0IHNjYiAqc2NiLCBpbnQgb3ApCit7CisJaWYgKHNjYi0+c2dfY291bnQgPT0gMCkKKwkJcmV0dXJuOworCisJYWhjX2RtYW1hcF9zeW5jKGFoYywgYWhjLT5zY2JfZGF0YS0+c2dfZG1hdCwgc2NiLT5zZ19tYXAtPnNnX2RtYW1hcCwKKwkJCS8qb2Zmc2V0Ki8oc2NiLT5zZ19saXN0IC0gc2NiLT5zZ19tYXAtPnNnX3ZhZGRyKQorCQkJCSogc2l6ZW9mKHN0cnVjdCBhaGNfZG1hX3NlZyksCisJCQkvKmxlbiovc2l6ZW9mKHN0cnVjdCBhaGNfZG1hX3NlZykgKiBzY2ItPnNnX2NvdW50LCBvcCk7Cit9CisKKyNpZmRlZiBBSENfVEFSR0VUX01PREUKK3N0YXRpYyB1aW50MzJfdAorYWhjX3RhcmdldGNtZF9vZmZzZXQoc3RydWN0IGFoY19zb2Z0YyAqYWhjLCB1X2ludCBpbmRleCkKK3sKKwlyZXR1cm4gKCgodWludDhfdCAqKSZhaGMtPnRhcmdldGNtZHNbaW5kZXhdKSAtIGFoYy0+cW91dGZpZm8pOworfQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKiBNaXNjZWxhbmVvdXMgU3VwcG9ydCBGdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNlcXVlbmNlciByZXBvcnRlZCBhIHJlc2lkdWFsCisgKiBmb3IgdGhpcyBTQ0IvdHJhbnNhY3Rpb24uCisgKi8KK3N0YXRpYyB2b2lkCithaGNfdXBkYXRlX3Jlc2lkdWFsKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgc3RydWN0IHNjYiAqc2NiKQoreworCXVpbnQzMl90IHNncHRyOworCisJc2dwdHIgPSBhaGNfbGUzMnRvaChzY2ItPmhzY2ItPnNncHRyKTsKKwlpZiAoKHNncHRyICYgU0dfUkVTSURfVkFMSUQpICE9IDApCisJCWFoY19jYWxjX3Jlc2lkdWFsKGFoYywgc2NiKTsKK30KKworLyoKKyAqIFJldHVybiBwb2ludGVycyB0byB0aGUgdHJhbnNmZXIgbmVnb3RpYXRpb24gaW5mb3JtYXRpb24KKyAqIGZvciB0aGUgc3BlY2lmaWVkIG91cl9pZC9yZW1vdGVfaWQgcGFpci4KKyAqLworc3RydWN0IGFoY19pbml0aWF0b3JfdGluZm8gKgorYWhjX2ZldGNoX3RyYW5zaW5mbyhzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIGNoYXIgY2hhbm5lbCwgdV9pbnQgb3VyX2lkLAorCQkgICAgdV9pbnQgcmVtb3RlX2lkLCBzdHJ1Y3QgYWhjX3Rtb2RlX3RzdGF0ZSAqKnRzdGF0ZSkKK3sKKwkvKgorCSAqIFRyYW5zZmVyIGRhdGEgc3RydWN0dXJlcyBhcmUgc3RvcmVkIGZyb20gdGhlIHBlcnNwZWN0aXZlCisJICogb2YgdGhlIHRhcmdldCByb2xlLiAgU2luY2UgdGhlIHBhcmFtZXRlcnMgZm9yIGEgY29ubmVjdGlvbgorCSAqIGluIHRoZSBpbml0aWF0b3Igcm9sZSB0byBhIGdpdmVuIHRhcmdldCBhcmUgdGhlIHNhbWUgYXMKKwkgKiB3aGVuIHRoZSByb2xlcyBhcmUgcmV2ZXJzZWQsIHdlIHByZXRlbmQgd2UgYXJlIHRoZSB0YXJnZXQuCisJICovCisJaWYgKGNoYW5uZWwgPT0gJ0InKQorCQlvdXJfaWQgKz0gODsKKwkqdHN0YXRlID0gYWhjLT5lbmFibGVkX3RhcmdldHNbb3VyX2lkXTsKKwlyZXR1cm4gKCYoKnRzdGF0ZSktPnRyYW5zaW5mb1tyZW1vdGVfaWRdKTsKK30KKwordWludDE2X3QKK2FoY19pbncoc3RydWN0IGFoY19zb2Z0YyAqYWhjLCB1X2ludCBwb3J0KQoreworCXVpbnQxNl90IHIgPSBhaGNfaW5iKGFoYywgcG9ydCsxKSA8PCA4OworCXJldHVybiByIHwgYWhjX2luYihhaGMsIHBvcnQpOworfQorCit2b2lkCithaGNfb3V0dyhzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHVfaW50IHBvcnQsIHVfaW50IHZhbHVlKQoreworCWFoY19vdXRiKGFoYywgcG9ydCwgdmFsdWUgJiAweEZGKTsKKwlhaGNfb3V0YihhaGMsIHBvcnQrMSwgKHZhbHVlID4+IDgpICYgMHhGRik7Cit9CisKK3VpbnQzMl90CithaGNfaW5sKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgdV9pbnQgcG9ydCkKK3sKKwlyZXR1cm4gKChhaGNfaW5iKGFoYywgcG9ydCkpCisJICAgICAgfCAoYWhjX2luYihhaGMsIHBvcnQrMSkgPDwgOCkKKwkgICAgICB8IChhaGNfaW5iKGFoYywgcG9ydCsyKSA8PCAxNikKKwkgICAgICB8IChhaGNfaW5iKGFoYywgcG9ydCszKSA8PCAyNCkpOworfQorCit2b2lkCithaGNfb3V0bChzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHVfaW50IHBvcnQsIHVpbnQzMl90IHZhbHVlKQoreworCWFoY19vdXRiKGFoYywgcG9ydCwgKHZhbHVlKSAmIDB4RkYpOworCWFoY19vdXRiKGFoYywgcG9ydCsxLCAoKHZhbHVlKSA+PiA4KSAmIDB4RkYpOworCWFoY19vdXRiKGFoYywgcG9ydCsyLCAoKHZhbHVlKSA+PiAxNikgJiAweEZGKTsKKwlhaGNfb3V0YihhaGMsIHBvcnQrMywgKCh2YWx1ZSkgPj4gMjQpICYgMHhGRik7Cit9CisKK3VpbnQ2NF90CithaGNfaW5xKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgdV9pbnQgcG9ydCkKK3sKKwlyZXR1cm4gKChhaGNfaW5iKGFoYywgcG9ydCkpCisJICAgICAgfCAoYWhjX2luYihhaGMsIHBvcnQrMSkgPDwgOCkKKwkgICAgICB8IChhaGNfaW5iKGFoYywgcG9ydCsyKSA8PCAxNikKKwkgICAgICB8IChhaGNfaW5iKGFoYywgcG9ydCszKSA8PCAyNCkKKwkgICAgICB8ICgoKHVpbnQ2NF90KWFoY19pbmIoYWhjLCBwb3J0KzQpKSA8PCAzMikKKwkgICAgICB8ICgoKHVpbnQ2NF90KWFoY19pbmIoYWhjLCBwb3J0KzUpKSA8PCA0MCkKKwkgICAgICB8ICgoKHVpbnQ2NF90KWFoY19pbmIoYWhjLCBwb3J0KzYpKSA8PCA0OCkKKwkgICAgICB8ICgoKHVpbnQ2NF90KWFoY19pbmIoYWhjLCBwb3J0KzcpKSA8PCA1NikpOworfQorCit2b2lkCithaGNfb3V0cShzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHVfaW50IHBvcnQsIHVpbnQ2NF90IHZhbHVlKQoreworCWFoY19vdXRiKGFoYywgcG9ydCwgdmFsdWUgJiAweEZGKTsKKwlhaGNfb3V0YihhaGMsIHBvcnQrMSwgKHZhbHVlID4+IDgpICYgMHhGRik7CisJYWhjX291dGIoYWhjLCBwb3J0KzIsICh2YWx1ZSA+PiAxNikgJiAweEZGKTsKKwlhaGNfb3V0YihhaGMsIHBvcnQrMywgKHZhbHVlID4+IDI0KSAmIDB4RkYpOworCWFoY19vdXRiKGFoYywgcG9ydCs0LCAodmFsdWUgPj4gMzIpICYgMHhGRik7CisJYWhjX291dGIoYWhjLCBwb3J0KzUsICh2YWx1ZSA+PiA0MCkgJiAweEZGKTsKKwlhaGNfb3V0YihhaGMsIHBvcnQrNiwgKHZhbHVlID4+IDQ4KSAmIDB4RkYpOworCWFoY19vdXRiKGFoYywgcG9ydCs3LCAodmFsdWUgPj4gNTYpICYgMHhGRik7Cit9CisKKy8qCisgKiBHZXQgYSBmcmVlIHNjYi4gSWYgdGhlcmUgYXJlIG5vbmUsIHNlZSBpZiB3ZSBjYW4gYWxsb2NhdGUgYSBuZXcgU0NCLgorICovCitzdHJ1Y3Qgc2NiICoKK2FoY19nZXRfc2NiKHN0cnVjdCBhaGNfc29mdGMgKmFoYykKK3sKKwlzdHJ1Y3Qgc2NiICpzY2I7CisKKwlpZiAoKHNjYiA9IFNMSVNUX0ZJUlNUKCZhaGMtPnNjYl9kYXRhLT5mcmVlX3NjYnMpKSA9PSBOVUxMKSB7CisJCWFoY19hbGxvY19zY2JzKGFoYyk7CisJCXNjYiA9IFNMSVNUX0ZJUlNUKCZhaGMtPnNjYl9kYXRhLT5mcmVlX3NjYnMpOworCQlpZiAoc2NiID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCX0KKwlTTElTVF9SRU1PVkVfSEVBRCgmYWhjLT5zY2JfZGF0YS0+ZnJlZV9zY2JzLCBsaW5rcy5zbGUpOworCXJldHVybiAoc2NiKTsKK30KKworLyoKKyAqIFJldHVybiBhbiBTQ0IgcmVzb3VyY2UgdG8gdGhlIGZyZWUgbGlzdC4KKyAqLwordm9pZAorYWhjX2ZyZWVfc2NiKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgc3RydWN0IHNjYiAqc2NiKQoreworCXN0cnVjdCBoYXJkd2FyZV9zY2IgKmhzY2I7CisKKwloc2NiID0gc2NiLT5oc2NiOworCS8qIENsZWFuIHVwIGZvciB0aGUgbmV4dCB1c2VyICovCisJYWhjLT5zY2JfZGF0YS0+c2NiaW5kZXhbaHNjYi0+dGFnXSA9IE5VTEw7CisJc2NiLT5mbGFncyA9IFNDQl9GUkVFOworCWhzY2ItPmNvbnRyb2wgPSAwOworCisJU0xJU1RfSU5TRVJUX0hFQUQoJmFoYy0+c2NiX2RhdGEtPmZyZWVfc2Nicywgc2NiLCBsaW5rcy5zbGUpOworCisJLyogTm90aWZ5IHRoZSBPU00gdGhhdCBhIHJlc291cmNlIGlzIG5vdyBhdmFpbGFibGUuICovCisJYWhjX3BsYXRmb3JtX3NjYl9mcmVlKGFoYywgc2NiKTsKK30KKworc3RydWN0IHNjYiAqCithaGNfbG9va3VwX3NjYihzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHVfaW50IHRhZykKK3sKKwlzdHJ1Y3Qgc2NiKiBzY2I7CisKKwlzY2IgPSBhaGMtPnNjYl9kYXRhLT5zY2JpbmRleFt0YWddOworCWlmIChzY2IgIT0gTlVMTCkKKwkJYWhjX3N5bmNfc2NiKGFoYywgc2NiLAorCQkJICAgICBCVVNfRE1BU1lOQ19QT1NUUkVBRHxCVVNfRE1BU1lOQ19QT1NUV1JJVEUpOworCXJldHVybiAoc2NiKTsKK30KKworc3RhdGljIHZvaWQKK2FoY19zd2FwX3dpdGhfbmV4dF9oc2NiKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgc3RydWN0IHNjYiAqc2NiKQoreworCXN0cnVjdCBoYXJkd2FyZV9zY2IgKnFfaHNjYjsKKwl1X2ludCAgc2F2ZWRfdGFnOworCisJLyoKKwkgKiBPdXIgcXVldWluZyBtZXRob2QgaXMgYSBiaXQgdHJpY2t5LiAgVGhlIGNhcmQKKwkgKiBrbm93cyBpbiBhZHZhbmNlIHdoaWNoIEhTQ0IgdG8gZG93bmxvYWQsIGFuZCB3ZQorCSAqIGNhbid0IGRpc2FwcG9pbnQgaXQuICBUbyBhY2hpZXZlIHRoaXMsIHRoZSBuZXh0CisJICogU0NCIHRvIGRvd25sb2FkIGlzIHNhdmVkIG9mZiBpbiBhaGMtPm5leHRfcXVldWVkX3NjYi4KKwkgKiBXaGVuIHdlIGFyZSBjYWxsZWQgdG8gcXVldWUgImFuIGFyYml0cmFyeSBzY2IiLAorCSAqIHdlIGNvcHkgdGhlIGNvbnRlbnRzIG9mIHRoZSBpbmNvbWluZyBIU0NCIHRvIHRoZSBvbmUKKwkgKiB0aGUgc2VxdWVuY2VyIGtub3dzIGFib3V0LCBzd2FwIEhTQ0IgcG9pbnRlcnMgYW5kCisJICogZmluYWxseSBhc3NpZ24gdGhlIFNDQiB0byB0aGUgdGFnIGluZGV4ZWQgbG9jYXRpb24KKwkgKiBpbiB0aGUgc2NiX2FycmF5LiAgVGhpcyBtYWtlcyBzdXJlIHRoYXQgd2UgY2FuIHN0aWxsCisJICogbG9jYXRlIHRoZSBjb3JyZWN0IFNDQiBieSBTQ0JfVEFHLgorCSAqLworCXFfaHNjYiA9IGFoYy0+bmV4dF9xdWV1ZWRfc2NiLT5oc2NiOworCXNhdmVkX3RhZyA9IHFfaHNjYi0+dGFnOworCW1lbWNweShxX2hzY2IsIHNjYi0+aHNjYiwgc2l6ZW9mKCpzY2ItPmhzY2IpKTsKKwlpZiAoKHNjYi0+ZmxhZ3MgJiBTQ0JfQ0RCMzJfUFRSKSAhPSAwKSB7CisJCXFfaHNjYi0+c2hhcmVkX2RhdGEuY2RiX3B0ciA9CisJCSAgICBhaGNfaHRvbGUzMihhaGNfaHNjYl9idXNhZGRyKGFoYywgcV9oc2NiLT50YWcpCisJCQkgICAgICArIG9mZnNldG9mKHN0cnVjdCBoYXJkd2FyZV9zY2IsIGNkYjMyKSk7CisJfQorCXFfaHNjYi0+dGFnID0gc2F2ZWRfdGFnOworCXFfaHNjYi0+bmV4dCA9IHNjYi0+aHNjYi0+dGFnOworCisJLyogTm93IHN3YXAgSFNDQiBwb2ludGVycy4gKi8KKwlhaGMtPm5leHRfcXVldWVkX3NjYi0+aHNjYiA9IHNjYi0+aHNjYjsKKwlzY2ItPmhzY2IgPSBxX2hzY2I7CisKKwkvKiBOb3cgZGVmaW5lIHRoZSBtYXBwaW5nIGZyb20gdGFnIHRvIFNDQiBpbiB0aGUgc2NiaW5kZXggKi8KKwlhaGMtPnNjYl9kYXRhLT5zY2JpbmRleFtzY2ItPmhzY2ItPnRhZ10gPSBzY2I7Cit9CisKKy8qCisgKiBUZWxsIHRoZSBzZXF1ZW5jZXIgYWJvdXQgYSBuZXcgdHJhbnNhY3Rpb24gdG8gZXhlY3V0ZS4KKyAqLwordm9pZAorYWhjX3F1ZXVlX3NjYihzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHN0cnVjdCBzY2IgKnNjYikKK3sKKwlhaGNfc3dhcF93aXRoX25leHRfaHNjYihhaGMsIHNjYik7CisKKwlpZiAoc2NiLT5oc2NiLT50YWcgPT0gU0NCX0xJU1RfTlVMTAorCSB8fCBzY2ItPmhzY2ItPm5leHQgPT0gU0NCX0xJU1RfTlVMTCkKKwkJcGFuaWMoIkF0dGVtcHQgdG8gcXVldWUgaW52YWxpZCBTQ0IgdGFnICV4OiV4XG4iLAorCQkgICAgICBzY2ItPmhzY2ItPnRhZywgc2NiLT5oc2NiLT5uZXh0KTsKKworCS8qCisJICogU2V0dXAgZGF0YSAib2RkbmVzcyIuCisJICovCisJc2NiLT5oc2NiLT5sdW4gJj0gTElEOworCWlmIChhaGNfZ2V0X3RyYW5zZmVyX2xlbmd0aChzY2IpICYgMHgxKQorCQlzY2ItPmhzY2ItPmx1biB8PSBTQ0JfWEZFUkxFTl9PREQ7CisKKwkvKgorCSAqIEtlZXAgYSBoaXN0b3J5IG9mIFNDQnMgd2UndmUgZG93bmxvYWRlZCBpbiB0aGUgcWluZmlmby4KKwkgKi8KKwlhaGMtPnFpbmZpZm9bYWhjLT5xaW5maWZvbmV4dCsrXSA9IHNjYi0+aHNjYi0+dGFnOworCisJLyoKKwkgKiBNYWtlIHN1cmUgb3VyIGRhdGEgaXMgY29uc2lzdGVudCBmcm9tIHRoZQorCSAqIHBlcnNwZWN0aXZlIG9mIHRoZSBhZGFwdGVyLgorCSAqLworCWFoY19zeW5jX3NjYihhaGMsIHNjYiwgQlVTX0RNQVNZTkNfUFJFUkVBRHxCVVNfRE1BU1lOQ19QUkVXUklURSk7CisKKwkvKiBUZWxsIHRoZSBhZGFwdGVyIGFib3V0IHRoZSBuZXdseSBxdWV1ZWQgU0NCICovCisJaWYgKChhaGMtPmZlYXR1cmVzICYgQUhDX1FVRVVFX1JFR1MpICE9IDApIHsKKwkJYWhjX291dGIoYWhjLCBITlNDQl9RT0ZGLCBhaGMtPnFpbmZpZm9uZXh0KTsKKwl9IGVsc2UgeworCQlpZiAoKGFoYy0+ZmVhdHVyZXMgJiBBSENfQVVUT1BBVVNFKSA9PSAwKQorCQkJYWhjX3BhdXNlKGFoYyk7CisJCWFoY19vdXRiKGFoYywgS0VSTkVMX1FJTlBPUywgYWhjLT5xaW5maWZvbmV4dCk7CisJCWlmICgoYWhjLT5mZWF0dXJlcyAmIEFIQ19BVVRPUEFVU0UpID09IDApCisJCQlhaGNfdW5wYXVzZShhaGMpOworCX0KK30KKworc3RydWN0IHNjc2lfc2Vuc2VfZGF0YSAqCithaGNfZ2V0X3NlbnNlX2J1ZihzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHN0cnVjdCBzY2IgKnNjYikKK3sKKwlpbnQgb2Zmc2V0OworCisJb2Zmc2V0ID0gc2NiIC0gYWhjLT5zY2JfZGF0YS0+c2NiYXJyYXk7CisJcmV0dXJuICgmYWhjLT5zY2JfZGF0YS0+c2Vuc2Vbb2Zmc2V0XSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdAorYWhjX2dldF9zZW5zZV9idWZhZGRyKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgc3RydWN0IHNjYiAqc2NiKQoreworCWludCBvZmZzZXQ7CisKKwlvZmZzZXQgPSBzY2IgLSBhaGMtPnNjYl9kYXRhLT5zY2JhcnJheTsKKwlyZXR1cm4gKGFoYy0+c2NiX2RhdGEtPnNlbnNlX2J1c2FkZHIKKwkgICAgICArIChvZmZzZXQgKiBzaXplb2Yoc3RydWN0IHNjc2lfc2Vuc2VfZGF0YSkpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqIEludGVycnVwdCBQcm9jZXNzaW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkCithaGNfc3luY19xb3V0ZmlmbyhzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIGludCBvcCkKK3sKKwlhaGNfZG1hbWFwX3N5bmMoYWhjLCBhaGMtPnNoYXJlZF9kYXRhX2RtYXQsIGFoYy0+c2hhcmVkX2RhdGFfZG1hbWFwLAorCQkJLypvZmZzZXQqLzAsIC8qbGVuKi8yNTYsIG9wKTsKK30KKworc3RhdGljIHZvaWQKK2FoY19zeW5jX3RxaW5maWZvKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgaW50IG9wKQoreworI2lmZGVmIEFIQ19UQVJHRVRfTU9ERQorCWlmICgoYWhjLT5mbGFncyAmIEFIQ19UQVJHRVRST0xFKSAhPSAwKSB7CisJCWFoY19kbWFtYXBfc3luYyhhaGMsIGFoYy0+c2hhcmVkX2RhdGFfZG1hdCwKKwkJCQlhaGMtPnNoYXJlZF9kYXRhX2RtYW1hcCwKKwkJCQlhaGNfdGFyZ2V0Y21kX29mZnNldChhaGMsIDApLAorCQkJCXNpemVvZihzdHJ1Y3QgdGFyZ2V0X2NtZCkgKiBBSENfVE1PREVfQ01EUywKKwkJCQlvcCk7CisJfQorI2VuZGlmCit9CisKKy8qCisgKiBTZWUgaWYgdGhlIGZpcm13YXJlIGhhcyBwb3N0ZWQgYW55IGNvbXBsZXRlZCBjb21tYW5kcworICogaW50byBvdXIgaW4tY29yZSBjb21tYW5kIGNvbXBsZXRlIGZpZm9zLgorICovCisjZGVmaW5lIEFIQ19SVU5fUU9VVEZJRk8gMHgxCisjZGVmaW5lIEFIQ19SVU5fVFFJTkZJRk8gMHgyCitzdGF0aWMgdV9pbnQKK2FoY19jaGVja19jbWRjbXBsdHF1ZXVlcyhzdHJ1Y3QgYWhjX3NvZnRjICphaGMpCit7CisJdV9pbnQgcmV0dmFsOworCisJcmV0dmFsID0gMDsKKwlhaGNfZG1hbWFwX3N5bmMoYWhjLCBhaGMtPnNoYXJlZF9kYXRhX2RtYXQsIGFoYy0+c2hhcmVkX2RhdGFfZG1hbWFwLAorCQkJLypvZmZzZXQqL2FoYy0+cW91dGZpZm9uZXh0LCAvKmxlbiovMSwKKwkJCUJVU19ETUFTWU5DX1BPU1RSRUFEKTsKKwlpZiAoYWhjLT5xb3V0Zmlmb1thaGMtPnFvdXRmaWZvbmV4dF0gIT0gU0NCX0xJU1RfTlVMTCkKKwkJcmV0dmFsIHw9IEFIQ19SVU5fUU9VVEZJRk87CisjaWZkZWYgQUhDX1RBUkdFVF9NT0RFCisJaWYgKChhaGMtPmZsYWdzICYgQUhDX1RBUkdFVFJPTEUpICE9IDAKKwkgJiYgKGFoYy0+ZmxhZ3MgJiBBSENfVFFJTkZJRk9fQkxPQ0tFRCkgPT0gMCkgeworCQlhaGNfZG1hbWFwX3N5bmMoYWhjLCBhaGMtPnNoYXJlZF9kYXRhX2RtYXQsCisJCQkJYWhjLT5zaGFyZWRfZGF0YV9kbWFtYXAsCisJCQkJYWhjX3RhcmdldGNtZF9vZmZzZXQoYWhjLCBhaGMtPnRxaW5maWZvZm5leHQpLAorCQkJCS8qbGVuKi9zaXplb2Yoc3RydWN0IHRhcmdldF9jbWQpLAorCQkJCUJVU19ETUFTWU5DX1BPU1RSRUFEKTsKKwkJaWYgKGFoYy0+dGFyZ2V0Y21kc1thaGMtPnRxaW5maWZvbmV4dF0uY21kX3ZhbGlkICE9IDApCisJCQlyZXR2YWwgfD0gQUhDX1JVTl9UUUlORklGTzsKKwl9CisjZW5kaWYKKwlyZXR1cm4gKHJldHZhbCk7Cit9CisKKy8qCisgKiBDYXRjaCBhbiBpbnRlcnJ1cHQgZnJvbSB0aGUgYWRhcHRlcgorICovCitpbnQKK2FoY19pbnRyKHN0cnVjdCBhaGNfc29mdGMgKmFoYykKK3sKKwl1X2ludAlpbnRzdGF0OworCisJaWYgKChhaGMtPnBhdXNlICYgSU5URU4pID09IDApIHsKKwkJLyoKKwkJICogT3VyIGludGVycnVwdCBpcyBub3QgZW5hYmxlZCBvbiB0aGUgY2hpcAorCQkgKiBhbmQgbWF5IGJlIGRpc2FibGVkIGZvciByZS1lbnRyYW5jeSByZWFzb25zLAorCQkgKiBzbyBqdXN0IHJldHVybi4gIFRoaXMgaXMgbGlrZWx5IGp1c3QgYSBzaGFyZWQKKwkJICogaW50ZXJydXB0LgorCQkgKi8KKwkJcmV0dXJuICgwKTsKKwl9CisJLyoKKwkgKiBJbnN0ZWFkIG9mIGRpcmVjdGx5IHJlYWRpbmcgdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIsCisJICogaW5mZXIgdGhlIGNhdXNlIG9mIHRoZSBpbnRlcnJ1cHQgYnkgY2hlY2tpbmcgb3VyIGluLWNvcmUKKwkgKiBjb21wbGV0aW9uIHF1ZXVlcy4gIFRoaXMgYXZvaWRzIGEgY29zdGx5IFBDSSBidXMgcmVhZCBpbgorCSAqIG1vc3QgY2FzZXMuCisJICovCisJaWYgKChhaGMtPmZsYWdzICYgKEFIQ19BTExfSU5URVJSVVBUU3xBSENfRURHRV9JTlRFUlJVUFQpKSA9PSAwCisJICYmIChhaGNfY2hlY2tfY21kY21wbHRxdWV1ZXMoYWhjKSAhPSAwKSkKKwkJaW50c3RhdCA9IENNRENNUExUOworCWVsc2UgeworCQlpbnRzdGF0ID0gYWhjX2luYihhaGMsIElOVFNUQVQpOworCX0KKworCWlmICgoaW50c3RhdCAmIElOVF9QRU5EKSA9PSAwKSB7CisjaWYgQUhDX1BDSV9DT05GSUcgPiAwCisJCWlmIChhaGMtPnVuc29saWNpdGVkX2ludHMgPiA1MDApIHsKKwkJCWFoYy0+dW5zb2xpY2l0ZWRfaW50cyA9IDA7CisJCQlpZiAoKGFoYy0+Y2hpcCAmIEFIQ19QQ0kpICE9IDAKKwkJCSAmJiAoYWhjX2luYihhaGMsIEVSUk9SKSAmIFBDSUVSUlNUQVQpICE9IDApCisJCQkJYWhjLT5idXNfaW50cihhaGMpOworCQl9CisjZW5kaWYKKwkJYWhjLT51bnNvbGljaXRlZF9pbnRzKys7CisJCXJldHVybiAoMCk7CisJfQorCWFoYy0+dW5zb2xpY2l0ZWRfaW50cyA9IDA7CisKKwlpZiAoaW50c3RhdCAmIENNRENNUExUKSB7CisJCWFoY19vdXRiKGFoYywgQ0xSSU5ULCBDTFJDTURJTlQpOworCisJCS8qCisJCSAqIEVuc3VyZSB0aGF0IHRoZSBjaGlwIHNlZXMgdGhhdCB3ZSd2ZSBjbGVhcmVkCisJCSAqIHRoaXMgaW50ZXJydXB0IGJlZm9yZSB3ZSB3YWxrIHRoZSBvdXRwdXQgZmlmby4KKwkJICogT3RoZXJ3aXNlLCB3ZSBtYXksIGR1ZSB0byBwb3N0ZWQgYnVzIHdyaXRlcywKKwkJICogY2xlYXIgdGhlIGludGVycnVwdCBhZnRlciB3ZSBmaW5pc2ggdGhlIHNjYW4sCisJCSAqIGFuZCBhZnRlciB0aGUgc2VxdWVuY2VyIGhhcyBhZGRlZCBuZXcgZW50cmllcworCQkgKiBhbmQgYXNzZXJ0ZWQgdGhlIGludGVycnVwdCBhZ2Fpbi4KKwkJICovCisJCWFoY19mbHVzaF9kZXZpY2Vfd3JpdGVzKGFoYyk7CisJCWFoY19ydW5fcW91dGZpZm8oYWhjKTsKKyNpZmRlZiBBSENfVEFSR0VUX01PREUKKwkJaWYgKChhaGMtPmZsYWdzICYgQUhDX1RBUkdFVFJPTEUpICE9IDApCisJCQlhaGNfcnVuX3RxaW5maWZvKGFoYywgLypwYXVzZWQqL0ZBTFNFKTsKKyNlbmRpZgorCX0KKworCS8qCisJICogSGFuZGxlIHN0YXR1c2VzIHRoYXQgbWF5IGludmFsaWRhdGUgb3VyIGNhY2hlZAorCSAqIGNvcHkgb2YgSU5UU1RBVCBzZXBhcmF0ZWx5LgorCSAqLworCWlmIChpbnRzdGF0ID09IDB4RkYgJiYgKGFoYy0+ZmVhdHVyZXMgJiBBSENfUkVNT1ZBQkxFKSAhPSAwKSB7CisJCS8qIEhvdCBlamVjdC4gIERvIG5vdGhpbmcgKi8KKwl9IGVsc2UgaWYgKGludHN0YXQgJiBCUktBRFJJTlQpIHsKKwkJYWhjX2hhbmRsZV9icmthZHJpbnQoYWhjKTsKKwl9IGVsc2UgaWYgKChpbnRzdGF0ICYgKFNFUUlOVHxTQ1NJSU5UKSkgIT0gMCkgeworCisJCWFoY19wYXVzZV9idWdfZml4KGFoYyk7CisKKwkJaWYgKChpbnRzdGF0ICYgU0VRSU5UKSAhPSAwKQorCQkJYWhjX2hhbmRsZV9zZXFpbnQoYWhjLCBpbnRzdGF0KTsKKworCQlpZiAoKGludHN0YXQgJiBTQ1NJSU5UKSAhPSAwKQorCQkJYWhjX2hhbmRsZV9zY3NpaW50KGFoYywgaW50c3RhdCk7CisJfQorCXJldHVybiAoMSk7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqIFNlcXVlbmNlciBFeGVjdXRpb24gQ29udHJvbCAqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgogICogUmVzdGFydCB0aGUgc2VxdWVuY2VyIHByb2dyYW0gZnJvbSBhZGRyZXNzIHplcm8KICAqLwotdm9pZAorc3RhdGljIHZvaWQKIGFoY19yZXN0YXJ0KHN0cnVjdCBhaGNfc29mdGMgKmFoYykKIHsKIApAQCAtMzAyLDcgKzg3Miw3IEBACiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqIElucHV0L091dHB1dCBRdWV1ZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkCitzdGF0aWMgdm9pZAogYWhjX3J1bl9xb3V0ZmlmbyhzdHJ1Y3QgYWhjX3NvZnRjICphaGMpCiB7CiAJc3RydWN0IHNjYiAqc2NiOwpAQCAtMzQ5LDcgKzkxOSw3IEBACiAJfQogfQogCi12b2lkCitzdGF0aWMgdm9pZAogYWhjX3J1bl91bnRhZ2dlZF9xdWV1ZXMoc3RydWN0IGFoY19zb2Z0YyAqYWhjKQogewogCWludCBpOwpAQCAtMzU4LDcgKzkyOCw3IEBACiAJCWFoY19ydW5fdW50YWdnZWRfcXVldWUoYWhjLCAmYWhjLT51bnRhZ2dlZF9xdWV1ZXNbaV0pOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogYWhjX3J1bl91bnRhZ2dlZF9xdWV1ZShzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHN0cnVjdCBzY2JfdGFpbHEgKnF1ZXVlKQogewogCXN0cnVjdCBzY2IgKnNjYjsKQEAgLTM3NCw3ICs5NDQsNyBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKiBJbnRlcnJ1cHQgSGFuZGxpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZAorc3RhdGljIHZvaWQKIGFoY19oYW5kbGVfYnJrYWRyaW50KHN0cnVjdCBhaGNfc29mdGMgKmFoYykKIHsKIAkvKgpAQCAtNDAzLDcgKzk3Myw3IEBACiAJYWhjX3NodXRkb3duKGFoYyk7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBhaGNfaGFuZGxlX3NlcWludChzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHVfaW50IGludHN0YXQpCiB7CiAJc3RydWN0IHNjYiAqc2NiOwpAQCAtOTU0LDcgKzE1MjQsNyBAQAogCWFoY191bnBhdXNlKGFoYyk7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBhaGNfaGFuZGxlX3Njc2lpbnQoc3RydWN0IGFoY19zb2Z0YyAqYWhjLCB1X2ludCBpbnRzdGF0KQogewogCXVfaW50CXNjYl9pbmRleDsKQEAgLTE0MDcsNyArMTk3Nyw3IEBACiB9CiAKICNkZWZpbmUgQUhDX01BWF9TVEVQUyAyMDAwCi12b2lkCitzdGF0aWMgdm9pZAogYWhjX2NsZWFyX2NyaXRpY2FsX3NlY3Rpb24oc3RydWN0IGFoY19zb2Z0YyAqYWhjKQogewogCWludAlzdGVwcGluZzsKQEAgLTE1MDAsNyArMjA3MCw3IEBACiAvKgogICogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0IHN0YXR1cy4KICAqLwotdm9pZAorc3RhdGljIHZvaWQKIGFoY19jbGVhcl9pbnRzdGF0KHN0cnVjdCBhaGNfc29mdGMgKmFoYykKIHsKIAkvKiBDbGVhciBhbnkgaW50ZXJydXB0IGNvbmRpdGlvbnMgdGhpcyBtYXkgaGF2ZSBjYXVzZWQgKi8KQEAgLTE1MTksNyArMjA4OSw4IEBACiB1aW50MzJfdCBhaGNfZGVidWcgPSBBSENfREVCVUdfT1BUUzsKICNlbmRpZgogCi12b2lkCisjaWYgMCAvKiB1bnVzZWQgKi8KK3N0YXRpYyB2b2lkCiBhaGNfcHJpbnRfc2NiKHN0cnVjdCBzY2IgKnNjYikKIHsKIAlpbnQgaTsKQEAgLTE1NTEsNiArMjEyMiw3IEBACiAJCX0KIAl9CiB9CisjZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKiogVHJhbnNmZXIgTmVnb3RpYXRpb24gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCkBAIC0xNjM0LDcgKzIyMDYsNyBAQAogICogYnkgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgYnVzIGNvbm5lY3Rpdml0eSBvZiBhbmQgc3luYyBzZXR0aW5ncyBmb3IKICAqIHRoZSB0YXJnZXQuCiAgKi8KLXN0cnVjdCBhaGNfc3luY3JhdGUgKgorY29uc3Qgc3RydWN0IGFoY19zeW5jcmF0ZSAqCiBhaGNfZGV2bGltaXRlZF9zeW5jcmF0ZShzdHJ1Y3QgYWhjX3NvZnRjICphaGMsCiAJCQlzdHJ1Y3QgYWhjX2luaXRpYXRvcl90aW5mbyAqdGluZm8sCiAJCQl1X2ludCAqcGVyaW9kLCB1X2ludCAqcHByX29wdGlvbnMsIHJvbGVfdCByb2xlKQpAQCAtMTY4OSwxMSArMjI2MSwxMSBAQAogICogUmV0dXJuIHRoZSBwZXJpb2QgYW5kIG9mZnNldCB0aGF0IHNob3VsZCBiZSBzZW50IHRvIHRoZSB0YXJnZXQKICAqIGlmIHRoaXMgd2FzIHRoZSBiZWdpbm5pbmcgb2YgYW4gU0RUUi4KICAqLwotc3RydWN0IGFoY19zeW5jcmF0ZSAqCitjb25zdCBzdHJ1Y3QgYWhjX3N5bmNyYXRlICoKIGFoY19maW5kX3N5bmNyYXRlKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgdV9pbnQgKnBlcmlvZCwKIAkJICB1X2ludCAqcHByX29wdGlvbnMsIHVfaW50IG1heHN5bmMpCiB7Ci0Jc3RydWN0IGFoY19zeW5jcmF0ZSAqc3luY3JhdGU7CisJY29uc3Qgc3RydWN0IGFoY19zeW5jcmF0ZSAqc3luY3JhdGU7CiAKIAlpZiAoKGFoYy0+ZmVhdHVyZXMgJiBBSENfRFQpID09IDApCiAJCSpwcHJfb3B0aW9ucyAmPSB+TVNHX0VYVF9QUFJfRFRfUkVROwpAQCAtMTc2OCw3ICsyMzQwLDcgQEAKIHVfaW50CiBhaGNfZmluZF9wZXJpb2Qoc3RydWN0IGFoY19zb2Z0YyAqYWhjLCB1X2ludCBzY3NpcmF0ZSwgdV9pbnQgbWF4c3luYykKIHsKLQlzdHJ1Y3QgYWhjX3N5bmNyYXRlICpzeW5jcmF0ZTsKKwljb25zdCBzdHJ1Y3QgYWhjX3N5bmNyYXRlICpzeW5jcmF0ZTsKIAogCWlmICgoYWhjLT5mZWF0dXJlcyAmIEFIQ19VTFRSQTIpICE9IDApCiAJCXNjc2lyYXRlICY9IFNYRlJfVUxUUkEyOwpAQCAtMTgwNiwxMCArMjM3OCwxMCBAQAogICogVHJ1bmNhdGUgdGhlIGdpdmVuIHN5bmNocm9ub3VzIG9mZnNldCB0byBhIHZhbHVlIHRoZQogICogY3VycmVudCBhZGFwdGVyIHR5cGUgYW5kIHN5bmNyYXRlIGFyZSBjYXBhYmxlIG9mLgogICovCi12b2lkCitzdGF0aWMgdm9pZAogYWhjX3ZhbGlkYXRlX29mZnNldChzdHJ1Y3QgYWhjX3NvZnRjICphaGMsCiAJCSAgICBzdHJ1Y3QgYWhjX2luaXRpYXRvcl90aW5mbyAqdGluZm8sCi0JCSAgICBzdHJ1Y3QgYWhjX3N5bmNyYXRlICpzeW5jcmF0ZSwKKwkJICAgIGNvbnN0IHN0cnVjdCBhaGNfc3luY3JhdGUgKnN5bmNyYXRlLAogCQkgICAgdV9pbnQgKm9mZnNldCwgaW50IHdpZGUsIHJvbGVfdCByb2xlKQogewogCXVfaW50IG1heG9mZnNldDsKQEAgLTE4MzgsNyArMjQxMCw3IEBACiAgKiBUcnVuY2F0ZSB0aGUgZ2l2ZW4gdHJhbnNmZXIgd2lkdGggcGFyYW1ldGVyIHRvIGEgdmFsdWUgdGhlCiAgKiBjdXJyZW50IGFkYXB0ZXIgdHlwZSBpcyBjYXBhYmxlIG9mLgogICovCi12b2lkCitzdGF0aWMgdm9pZAogYWhjX3ZhbGlkYXRlX3dpZHRoKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgc3RydWN0IGFoY19pbml0aWF0b3JfdGluZm8gKnRpbmZvLAogCQkgICB1X2ludCAqYnVzX3dpZHRoLCByb2xlX3Qgcm9sZSkKIHsKQEAgLTE5MTMsNyArMjQ4NSw3IEBACiAgKi8KIHZvaWQKIGFoY19zZXRfc3luY3JhdGUoc3RydWN0IGFoY19zb2Z0YyAqYWhjLCBzdHJ1Y3QgYWhjX2RldmluZm8gKmRldmluZm8sCi0JCSBzdHJ1Y3QgYWhjX3N5bmNyYXRlICpzeW5jcmF0ZSwgdV9pbnQgcGVyaW9kLAorCQkgY29uc3Qgc3RydWN0IGFoY19zeW5jcmF0ZSAqc3luY3JhdGUsIHVfaW50IHBlcmlvZCwKIAkJIHVfaW50IG9mZnNldCwgdV9pbnQgcHByX29wdGlvbnMsIHVfaW50IHR5cGUsIGludCBwYXVzZWQpCiB7CiAJc3RydWN0CWFoY19pbml0aWF0b3JfdGluZm8gKnRpbmZvOwpAQCAtMjIyMCwxMSArMjc5MiwxMSBAQAogCQkJICAgIHJvbGUpOwogfQogCi1zdHJ1Y3QgYWhjX3BoYXNlX3RhYmxlX2VudHJ5Kgorc3RhdGljIGNvbnN0IHN0cnVjdCBhaGNfcGhhc2VfdGFibGVfZW50cnkqCiBhaGNfbG9va3VwX3BoYXNlX2VudHJ5KGludCBwaGFzZSkKIHsKLQlzdHJ1Y3QgYWhjX3BoYXNlX3RhYmxlX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3QgYWhjX3BoYXNlX3RhYmxlX2VudHJ5ICpsYXN0X2VudHJ5OworCWNvbnN0IHN0cnVjdCBhaGNfcGhhc2VfdGFibGVfZW50cnkgKmVudHJ5OworCWNvbnN0IHN0cnVjdCBhaGNfcGhhc2VfdGFibGVfZW50cnkgKmxhc3RfZW50cnk7CiAKIAkvKgogCSAqIG51bV9waGFzZXMgZG9lc24ndCBpbmNsdWRlIHRoZSBkZWZhdWx0IGVudHJ5IHdoaWNoCkBAIC0yMzkwLDcgKzI5NjIsNyBAQAogCSAqLwogCXN0cnVjdAlhaGNfaW5pdGlhdG9yX3RpbmZvICp0aW5mbzsKIAlzdHJ1Y3QJYWhjX3Rtb2RlX3RzdGF0ZSAqdHN0YXRlOwotCXN0cnVjdAlhaGNfc3luY3JhdGUgKnJhdGU7CisJY29uc3Qgc3RydWN0IGFoY19zeW5jcmF0ZSAqcmF0ZTsKIAlpbnQJZG93aWRlOwogCWludAlkb3N5bmM7CiAJaW50CWRvcHByOwpAQCAtMjY1NSw3ICszMjI3LDcgQEAKICAqLwogc3RhdGljIHZvaWQKIGFoY19oYW5kbGVfbWVzc2FnZV9waGFzZShzdHJ1Y3QgYWhjX3NvZnRjICphaGMpCi17IAorewogCXN0cnVjdAlhaGNfZGV2aW5mbyBkZXZpbmZvOwogCXVfaW50CWJ1c19waGFzZTsKIAlpbnQJZW5kX3Nlc3Npb247CkBAIC0zMDU2LDcgKzM2MjgsNyBAQAogCQlzd2l0Y2ggKGFoYy0+bXNnaW5fYnVmWzJdKSB7CiAJCWNhc2UgTVNHX0VYVF9TRFRSOgogCQl7Ci0JCQlzdHJ1Y3QJIGFoY19zeW5jcmF0ZSAqc3luY3JhdGU7CisJCQljb25zdCBzdHJ1Y3QgYWhjX3N5bmNyYXRlICpzeW5jcmF0ZTsKIAkJCXVfaW50CSBwZXJpb2Q7CiAJCQl1X2ludAkgcHByX29wdGlvbnM7CiAJCQl1X2ludAkgb2Zmc2V0OwpAQCAtMzIzMSw3ICszODAzLDcgQEAKIAkJfQogCQljYXNlIE1TR19FWFRfUFBSOgogCQl7Ci0JCQlzdHJ1Y3QJYWhjX3N5bmNyYXRlICpzeW5jcmF0ZTsKKwkJCWNvbnN0IHN0cnVjdCBhaGNfc3luY3JhdGUgKnN5bmNyYXRlOwogCQkJdV9pbnQJcGVyaW9kOwogCQkJdV9pbnQJb2Zmc2V0OwogCQkJdV9pbnQJYnVzX3dpZHRoOwpAQCAtMzk4NCw3ICs0NTU2LDcgQEAKIAlyZXR1cm47CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBhaGNfc2h1dGRvd24odm9pZCAqYXJnKQogewogCXN0cnVjdAlhaGNfc29mdGMgKmFoYzsKQEAgLTQzODgsNyArNDk2MCw3IEBACiAJCWZyZWUoc2NiX2RhdGEtPnNjYmFycmF5LCBNX0RFVkJVRik7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBhaGNfYWxsb2Nfc2NicyhzdHJ1Y3QgYWhjX3NvZnRjICphaGMpCiB7CiAJc3RydWN0IHNjYl9kYXRhICpzY2JfZGF0YTsKQEAgLTUxMjEsNyArNTY5Myw3IEBACiAgKiBSZXR1cm4gdGhlIHVudGFnZ2VkIHRyYW5zYWN0aW9uIGlkIGZvciBhIGdpdmVuIHRhcmdldC9jaGFubmVsIGx1bi4KICAqIE9wdGlvbmFsbHksIGNsZWFyIHRoZSBlbnRyeS4KICAqLwotdV9pbnQKK3N0YXRpYyB1X2ludAogYWhjX2luZGV4X2J1c3lfdGNsKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgdV9pbnQgdGNsKQogewogCXVfaW50IHNjYmlkOwpAQCAtNTE0Miw3ICs1NzE0LDcgQEAKIAlyZXR1cm4gKHNjYmlkKTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGFoY191bmJ1c3lfdGNsKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgdV9pbnQgdGNsKQogewogCXVfaW50IHRhcmdldF9vZmZzZXQ7CkBAIC01MTYwLDcgKzU3MzIsNyBAQAogCX0KIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGFoY19idXN5X3RjbChzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHVfaW50IHRjbCwgdV9pbnQgc2NiaWQpCiB7CiAJdV9pbnQgdGFyZ2V0X29mZnNldDsKQEAgLTUyMTUsNyArNTc4Nyw3IEBACiAJcmV0dXJuIG1hdGNoOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogYWhjX2ZyZWV6ZV9kZXZxKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgc3RydWN0IHNjYiAqc2NiKQogewogCWludAl0YXJnZXQ7CkBAIC01NzA3LDcgKzYyNzksNyBAQAogICovCiBzdGF0aWMgdV9pbnQKIGFoY19yZW1fd3NjYihzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHVfaW50IHNjYnBvcywgdV9pbnQgcHJldikKLXsgICAgICAgCit7CiAJdV9pbnQgY3Vyc2NiLCBuZXh0OwogCiAJLyoKQEAgLTU3NTYsNyArNjMyOCw3IEBACiAgKiBiZWVuIG1vZGlmaWVkIGZyb20gQ0FNX1JFUV9JTlBST0cuICBUaGlzIHJvdXRpbmUgYXNzdW1lcyB0aGF0IHRoZSBzZXF1ZW5jZXIKICAqIGlzIHBhdXNlZCBiZWZvcmUgaXQgaXMgY2FsbGVkLgogICovCi1pbnQKK3N0YXRpYyBpbnQKIGFoY19hYm9ydF9zY2JzKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgaW50IHRhcmdldCwgY2hhciBjaGFubmVsLAogCSAgICAgICBpbnQgbHVuLCB1X2ludCB0YWcsIHJvbGVfdCByb2xlLCB1aW50MzJfdCBzdGF0dXMpCiB7CkBAIC02MDc4LDcgKzY2NTAsNyBAQAogLyoKICAqIENhbGN1bGF0ZSB0aGUgcmVzaWR1YWwgZm9yIGEganVzdCBjb21wbGV0ZWQgU0NCLgogICovCi12b2lkCitzdGF0aWMgdm9pZAogYWhjX2NhbGNfcmVzaWR1YWwoc3RydWN0IGFoY19zb2Z0YyAqYWhjLCBzdHJ1Y3Qgc2NiICpzY2IpCiB7CiAJc3RydWN0IGhhcmR3YXJlX3NjYiAqaHNjYjsKQEAgLTYyNzksNyArNjg1MSw3IEBACiAJc3RydWN0CWNzIGNzX3RhYmxlW251bV9jcml0aWNhbF9zZWN0aW9uc107CiAJdV9pbnQJYmVnaW5fc2V0W251bV9jcml0aWNhbF9zZWN0aW9uc107CiAJdV9pbnQJZW5kX3NldFtudW1fY3JpdGljYWxfc2VjdGlvbnNdOwotCXN0cnVjdAlwYXRjaCAqY3VyX3BhdGNoOworCWNvbnN0IHN0cnVjdCBwYXRjaCAqY3VyX3BhdGNoOwogCXVfaW50CWNzX2NvdW50OwogCXVfaW50CWN1cl9jczsKIAl1X2ludAlpOwpAQCAtNjM4NCwxMSArNjk1NiwxMSBAQAogfQogCiBzdGF0aWMgaW50Ci1haGNfY2hlY2tfcGF0Y2goc3RydWN0IGFoY19zb2Z0YyAqYWhjLCBzdHJ1Y3QgcGF0Y2ggKipzdGFydF9wYXRjaCwKK2FoY19jaGVja19wYXRjaChzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIGNvbnN0IHN0cnVjdCBwYXRjaCAqKnN0YXJ0X3BhdGNoLAogCQl1X2ludCBzdGFydF9pbnN0ciwgdV9pbnQgKnNraXBfYWRkcikKIHsKLQlzdHJ1Y3QJcGF0Y2ggKmN1cl9wYXRjaDsKLQlzdHJ1Y3QJcGF0Y2ggKmxhc3RfcGF0Y2g7CisJY29uc3Qgc3RydWN0IHBhdGNoICpjdXJfcGF0Y2g7CisJY29uc3Qgc3RydWN0IHBhdGNoICpsYXN0X3BhdGNoOwogCXVfaW50CW51bV9wYXRjaGVzOwogCiAJbnVtX3BhdGNoZXMgPSBBUlJBWV9TSVpFKHBhdGNoZXMpOwpAQCAtNjQ0Nyw3ICs3MDE5LDcgQEAKIAljYXNlIEFJQ19PUF9KRToKIAljYXNlIEFJQ19PUF9KWjoKIAl7Ci0JCXN0cnVjdCBwYXRjaCAqY3VyX3BhdGNoOworCQljb25zdCBzdHJ1Y3QgcGF0Y2ggKmN1cl9wYXRjaDsKIAkJaW50IGFkZHJlc3Nfb2Zmc2V0OwogCQl1X2ludCBhZGRyZXNzOwogCQl1X2ludCBza2lwX2FkZHI7CkBAIC02NTQ1LDcgKzcxMTcsNyBAQAogfQogCiBpbnQKLWFoY19wcmludF9yZWdpc3RlcihhaGNfcmVnX3BhcnNlX2VudHJ5X3QgKnRhYmxlLCB1X2ludCBudW1fZW50cmllcywKK2FoY19wcmludF9yZWdpc3Rlcihjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgKnRhYmxlLCB1X2ludCBudW1fZW50cmllcywKIAkJICAgY29uc3QgY2hhciAqbmFtZSwgdV9pbnQgYWRkcmVzcywgdV9pbnQgdmFsdWUsCiAJCSAgIHVfaW50ICpjdXJfY29sdW1uLCB1X2ludCB3cmFwX3BvaW50KQogewpAQCAtNzIyOSw3ICs3ODAxLDcgQEAKIAkJYWhjX291dGIoYWhjLCBTQ1NJSUQsIHNjc2lpZCk7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBhaGNfcnVuX3RxaW5maWZvKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgaW50IHBhdXNlZCkKIHsKIAlzdHJ1Y3QgdGFyZ2V0X2NtZCAqY21kOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9pbmxpbmUuaCBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfaW5saW5lLmgKaW5kZXggY2JhMmYyMy4uMDliZjJmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9pbmxpbmUuaAorKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X2lubGluZS5oCkBAIC00NiwxNzkgKzQ2LDEzIEBACiAjZGVmaW5lIF9BSUM3WFhYX0lOTElORV9IXwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKiBTZXF1ZW5jZXIgRXhlY3V0aW9uIENvbnRyb2wgKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIF9faW5saW5lIHZvaWQgYWhjX3BhdXNlX2J1Z19maXgoc3RydWN0IGFoY19zb2Z0YyAqYWhjKTsKLXN0YXRpYyBfX2lubGluZSBpbnQgIGFoY19pc19wYXVzZWQoc3RydWN0IGFoY19zb2Z0YyAqYWhjKTsKLXN0YXRpYyBfX2lubGluZSB2b2lkIGFoY19wYXVzZShzdHJ1Y3QgYWhjX3NvZnRjICphaGMpOwotc3RhdGljIF9faW5saW5lIHZvaWQgYWhjX3VucGF1c2Uoc3RydWN0IGFoY19zb2Z0YyAqYWhjKTsKLQotLyoKLSAqIFdvcmsgYXJvdW5kIGFueSBjaGlwIGJ1Z3MgcmVsYXRlZCB0byBoYWx0aW5nIHNlcXVlbmNlciBleGVjdXRpb24uCi0gKiBPbiBVbHRyYTIgY29udHJvbGxlcnMsIHdlIG11c3QgY2xlYXIgdGhlIENJT0JVUyBzdHJldGNoIHNpZ25hbCBieQotICogcmVhZGluZyBhIHJlZ2lzdGVyIHRoYXQgd2lsbCBzZXQgdGhpcyBzaWduYWwgYW5kIGRlYXNzZXJ0IGl0LgotICogV2l0aG91dCB0aGlzIHdvcmthcm91bmQsIGlmIHRoZSBjaGlwIGlzIHBhdXNlZCwgYnkgYW4gaW50ZXJydXB0IG9yCi0gKiBtYW51YWwgcGF1c2Ugd2hpbGUgYWNjZXNzaW5nIHNjYiByYW0sIGFjY2Vzc2VzIHRvIGNlcnRhaW4gcmVnaXN0ZXJzCi0gKiB3aWxsIGhhbmcgdGhlIHN5c3RlbSAoaW5maW5pdGUgcGNpIHJldHJpZXMpLgotICovCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotYWhjX3BhdXNlX2J1Z19maXgoc3RydWN0IGFoY19zb2Z0YyAqYWhjKQotewotCWlmICgoYWhjLT5mZWF0dXJlcyAmIEFIQ19VTFRSQTIpICE9IDApCi0JCSh2b2lkKWFoY19pbmIoYWhjLCBDQ1NDQkNUTCk7Ci19Ci0KLS8qCi0gKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgc2VxdWVuY2VyIGhhcyBoYWx0ZWQgY29kZSBleGVjdXRpb24uCi0gKiBSZXR1cm5zIG5vbi16ZXJvIHN0YXR1cyBpZiB0aGUgc2VxdWVuY2VyIGlzIHN0b3BwZWQuCi0gKi8KLXN0YXRpYyBfX2lubGluZSBpbnQKLWFoY19pc19wYXVzZWQoc3RydWN0IGFoY19zb2Z0YyAqYWhjKQotewotCXJldHVybiAoKGFoY19pbmIoYWhjLCBIQ05UUkwpICYgUEFVU0UpICE9IDApOwotfQotCi0vKgotICogUmVxdWVzdCB0aGF0IHRoZSBzZXF1ZW5jZXIgc3RvcCBhbmQgd2FpdCwgaW5kZWZpbml0ZWx5LCBmb3IgaXQKLSAqIHRvIHN0b3AuICBUaGUgc2VxdWVuY2VyIHdpbGwgb25seSBhY2tub3dsZWRnZSB0aGF0IGl0IGlzIHBhdXNlZAotICogb25jZSBpdCBoYXMgcmVhY2hlZCBhbiBpbnN0cnVjdGlvbiBib3VuZGFyeSBhbmQgUEFVU0VESVMgaXMKLSAqIGNsZWFyZWQgaW4gdGhlIFNFUUNUTCByZWdpc3Rlci4gIFRoZSBzZXF1ZW5jZXIgbWF5IHVzZSBQQVVTRURJUwotICogZm9yIGNyaXRpY2FsIHNlY3Rpb25zLgotICovCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotYWhjX3BhdXNlKHN0cnVjdCBhaGNfc29mdGMgKmFoYykKLXsKLQlhaGNfb3V0YihhaGMsIEhDTlRSTCwgYWhjLT5wYXVzZSk7Ci0KLQkvKgotCSAqIFNpbmNlIHRoZSBzZXF1ZW5jZXIgY2FuIGRpc2FibGUgcGF1c2luZyBpbiBhIGNyaXRpY2FsIHNlY3Rpb24sIHdlCi0JICogbXVzdCBsb29wIHVudGlsIGl0IGFjdHVhbGx5IHN0b3BzLgotCSAqLwotCXdoaWxlIChhaGNfaXNfcGF1c2VkKGFoYykgPT0gMCkKLQkJOwotCi0JYWhjX3BhdXNlX2J1Z19maXgoYWhjKTsKLX0KLQotLyoKLSAqIEFsbG93IHRoZSBzZXF1ZW5jZXIgdG8gY29udGludWUgcHJvZ3JhbSBleGVjdXRpb24uCi0gKiBXZSBjaGVjayBoZXJlIHRvIGVuc3VyZSB0aGF0IG5vIGFkZGl0aW9uYWwgaW50ZXJydXB0Ci0gKiBzb3VyY2VzIHRoYXQgd291bGQgY2F1c2UgdGhlIHNlcXVlbmNlciB0byBoYWx0IGhhdmUgYmVlbgotICogYXNzZXJ0ZWQuICBJZiwgZm9yIGV4YW1wbGUsIGEgU0NTSSBidXMgcmVzZXQgaXMgZGV0ZWN0ZWQKLSAqIHdoaWxlIHdlIGFyZSBmaWVsZGluZyBhIGRpZmZlcmVudCwgcGF1c2luZywgaW50ZXJydXB0IHR5cGUsCi0gKiB3ZSBkb24ndCB3YW50IHRvIHJlbGVhc2UgdGhlIHNlcXVlbmNlciBiZWZvcmUgZ29pbmcgYmFjawotICogaW50byBvdXIgaW50ZXJydXB0IGhhbmRsZXIgYW5kIGRlYWxpbmcgd2l0aCB0aGlzIG5ldwotICogY29uZGl0aW9uLgotICovCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotYWhjX3VucGF1c2Uoc3RydWN0IGFoY19zb2Z0YyAqYWhjKQotewotCWlmICgoYWhjX2luYihhaGMsIElOVFNUQVQpICYgKFNDU0lJTlQgfCBTRVFJTlQgfCBCUktBRFJJTlQpKSA9PSAwKQotCQlhaGNfb3V0YihhaGMsIEhDTlRSTCwgYWhjLT51bnBhdXNlKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqIFVudGFnZ2VkIFRyYW5zYWN0aW9uIFJvdXRpbmVzICoqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBfX2lubGluZSB2b2lkCWFoY19mcmVlemVfdW50YWdnZWRfcXVldWVzKHN0cnVjdCBhaGNfc29mdGMgKmFoYyk7Ci1zdGF0aWMgX19pbmxpbmUgdm9pZAlhaGNfcmVsZWFzZV91bnRhZ2dlZF9xdWV1ZXMoc3RydWN0IGFoY19zb2Z0YyAqYWhjKTsKLQotLyoKLSAqIEJsb2NrIG91ciBjb21wbGV0aW9uIHJvdXRpbmUgZnJvbSBzdGFydGluZyB0aGUgbmV4dCB1bnRhZ2dlZAotICogdHJhbnNhY3Rpb24gZm9yIHRoaXMgdGFyZ2V0IG9yIHRhcmdldCBsdW4uCi0gKi8KLXN0YXRpYyBfX2lubGluZSB2b2lkCi1haGNfZnJlZXplX3VudGFnZ2VkX3F1ZXVlcyhzdHJ1Y3QgYWhjX3NvZnRjICphaGMpCi17Ci0JaWYgKChhaGMtPmZsYWdzICYgQUhDX1NDQl9CVFQpID09IDApCi0JCWFoYy0+dW50YWdnZWRfcXVldWVfbG9jaysrOwotfQotCi0vKgotICogQWxsb3cgdGhlIG5leHQgdW50YWdnZWQgdHJhbnNhY3Rpb24gZm9yIHRoaXMgdGFyZ2V0IG9yIHRhcmdldCBsdW4KLSAqIHRvIGJlIGV4ZWN1dGVkLiAgV2UgdXNlIGEgY291bnRpbmcgc2VtYXBob3JlIHRvIGFsbG93IHRoZSBsb2NrCi0gKiB0byBiZSBhY3F1aXJlZCByZWN1cnNpdmVseS4gIE9uY2UgdGhlIGNvdW50IGRyb3BzIHRvIHplcm8sIHRoZQotICogdHJhbnNhY3Rpb24gcXVldWVzIHdpbGwgYmUgcnVuLgotICovCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotYWhjX3JlbGVhc2VfdW50YWdnZWRfcXVldWVzKHN0cnVjdCBhaGNfc29mdGMgKmFoYykKLXsKLQlpZiAoKGFoYy0+ZmxhZ3MgJiBBSENfU0NCX0JUVCkgPT0gMCkgewotCQlhaGMtPnVudGFnZ2VkX3F1ZXVlX2xvY2stLTsKLQkJaWYgKGFoYy0+dW50YWdnZWRfcXVldWVfbG9jayA9PSAwKQotCQkJYWhjX3J1bl91bnRhZ2dlZF9xdWV1ZXMoYWhjKTsKLQl9Ci19CitpbnQgIGFoY19pc19wYXVzZWQoc3RydWN0IGFoY19zb2Z0YyAqYWhjKTsKK3ZvaWQgYWhjX3BhdXNlKHN0cnVjdCBhaGNfc29mdGMgKmFoYyk7Cit2b2lkIGFoY191bnBhdXNlKHN0cnVjdCBhaGNfc29mdGMgKmFoYyk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiBNZW1vcnkgbWFwcGluZyByb3V0aW5lcyAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgX19pbmxpbmUgc3RydWN0IGFoY19kbWFfc2VnICoKLQkJCWFoY19zZ19idXNfdG9fdmlydChzdHJ1Y3Qgc2NiICpzY2IsCi0JCQkJCSAgIHVpbnQzMl90IHNnX2J1c2FkZHIpOwotc3RhdGljIF9faW5saW5lIHVpbnQzMl90Ci0JCQlhaGNfc2dfdmlydF90b19idXMoc3RydWN0IHNjYiAqc2NiLAotCQkJCQkgICBzdHJ1Y3QgYWhjX2RtYV9zZWcgKnNnKTsKLXN0YXRpYyBfX2lubGluZSB1aW50MzJfdAotCQkJYWhjX2hzY2JfYnVzYWRkcihzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHVfaW50IGluZGV4KTsKLXN0YXRpYyBfX2lubGluZSB2b2lkCWFoY19zeW5jX3NjYihzdHJ1Y3QgYWhjX3NvZnRjICphaGMsCi0JCQkJICAgICBzdHJ1Y3Qgc2NiICpzY2IsIGludCBvcCk7Ci1zdGF0aWMgX19pbmxpbmUgdm9pZAlhaGNfc3luY19zZ2xpc3Qoc3RydWN0IGFoY19zb2Z0YyAqYWhjLAotCQkJCQlzdHJ1Y3Qgc2NiICpzY2IsIGludCBvcCk7Ci1zdGF0aWMgX19pbmxpbmUgdWludDMyX3QKLQkJCWFoY190YXJnZXRjbWRfb2Zmc2V0KHN0cnVjdCBhaGNfc29mdGMgKmFoYywKLQkJCQkJICAgICB1X2ludCBpbmRleCk7Ci0KLXN0YXRpYyBfX2lubGluZSBzdHJ1Y3QgYWhjX2RtYV9zZWcgKgotYWhjX3NnX2J1c190b192aXJ0KHN0cnVjdCBzY2IgKnNjYiwgdWludDMyX3Qgc2dfYnVzYWRkcikKLXsKLQlpbnQgc2dfaW5kZXg7Ci0KLQlzZ19pbmRleCA9IChzZ19idXNhZGRyIC0gc2NiLT5zZ19saXN0X3BoeXMpL3NpemVvZihzdHJ1Y3QgYWhjX2RtYV9zZWcpOwotCS8qIHNnX2xpc3RfcGh5cyBwb2ludHMgdG8gZW50cnkgMSwgbm90IDAgKi8KLQlzZ19pbmRleCsrOwotCi0JcmV0dXJuICgmc2NiLT5zZ19saXN0W3NnX2luZGV4XSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB1aW50MzJfdAotYWhjX3NnX3ZpcnRfdG9fYnVzKHN0cnVjdCBzY2IgKnNjYiwgc3RydWN0IGFoY19kbWFfc2VnICpzZykKLXsKLQlpbnQgc2dfaW5kZXg7Ci0KLQkvKiBzZ19saXN0X3BoeXMgcG9pbnRzIHRvIGVudHJ5IDEsIG5vdCAwICovCi0Jc2dfaW5kZXggPSBzZyAtICZzY2ItPnNnX2xpc3RbMV07Ci0KLQlyZXR1cm4gKHNjYi0+c2dfbGlzdF9waHlzICsgKHNnX2luZGV4ICogc2l6ZW9mKCpzY2ItPnNnX2xpc3QpKSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB1aW50MzJfdAotYWhjX2hzY2JfYnVzYWRkcihzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHVfaW50IGluZGV4KQotewotCXJldHVybiAoYWhjLT5zY2JfZGF0YS0+aHNjYl9idXNhZGRyCi0JCSsgKHNpemVvZihzdHJ1Y3QgaGFyZHdhcmVfc2NiKSAqIGluZGV4KSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB2b2lkCi1haGNfc3luY19zY2Ioc3RydWN0IGFoY19zb2Z0YyAqYWhjLCBzdHJ1Y3Qgc2NiICpzY2IsIGludCBvcCkKLXsKLQlhaGNfZG1hbWFwX3N5bmMoYWhjLCBhaGMtPnNjYl9kYXRhLT5oc2NiX2RtYXQsCi0JCQlhaGMtPnNjYl9kYXRhLT5oc2NiX2RtYW1hcCwKLQkJCS8qb2Zmc2V0Ki8oc2NiLT5oc2NiIC0gYWhjLT5oc2NicykgKiBzaXplb2YoKnNjYi0+aHNjYiksCi0JCQkvKmxlbiovc2l6ZW9mKCpzY2ItPmhzY2IpLCBvcCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB2b2lkCi1haGNfc3luY19zZ2xpc3Qoc3RydWN0IGFoY19zb2Z0YyAqYWhjLCBzdHJ1Y3Qgc2NiICpzY2IsIGludCBvcCkKLXsKLQlpZiAoc2NiLT5zZ19jb3VudCA9PSAwKQotCQlyZXR1cm47Ci0KLQlhaGNfZG1hbWFwX3N5bmMoYWhjLCBhaGMtPnNjYl9kYXRhLT5zZ19kbWF0LCBzY2ItPnNnX21hcC0+c2dfZG1hbWFwLAotCQkJLypvZmZzZXQqLyhzY2ItPnNnX2xpc3QgLSBzY2ItPnNnX21hcC0+c2dfdmFkZHIpCi0JCQkJKiBzaXplb2Yoc3RydWN0IGFoY19kbWFfc2VnKSwKLQkJCS8qbGVuKi9zaXplb2Yoc3RydWN0IGFoY19kbWFfc2VnKSAqIHNjYi0+c2dfY291bnQsIG9wKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHVpbnQzMl90Ci1haGNfdGFyZ2V0Y21kX29mZnNldChzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHVfaW50IGluZGV4KQotewotCXJldHVybiAoKCh1aW50OF90ICopJmFoYy0+dGFyZ2V0Y21kc1tpbmRleF0pIC0gYWhjLT5xb3V0Zmlmbyk7Ci19Cit2b2lkCWFoY19zeW5jX3NnbGlzdChzdHJ1Y3QgYWhjX3NvZnRjICphaGMsCisJCQlzdHJ1Y3Qgc2NiICpzY2IsIGludCBvcCk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBEZWJ1Z2dpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgX19pbmxpbmUgY2hhciAqYWhjX25hbWUoc3RydWN0IGFoY19zb2Z0YyAqYWhjKTsKQEAgLTIzMSw0MjAgKzY1LDM0IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKiBNaXNjZWxsYW5lb3VzIFN1cHBvcnQgRnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgX19pbmxpbmUgdm9pZAlhaGNfdXBkYXRlX3Jlc2lkdWFsKHN0cnVjdCBhaGNfc29mdGMgKmFoYywKLQkJCQkJICAgIHN0cnVjdCBzY2IgKnNjYik7Ci1zdGF0aWMgX19pbmxpbmUgc3RydWN0IGFoY19pbml0aWF0b3JfdGluZm8gKgotCQkJYWhjX2ZldGNoX3RyYW5zaW5mbyhzdHJ1Y3QgYWhjX3NvZnRjICphaGMsCi0JCQkJCSAgICBjaGFyIGNoYW5uZWwsIHVfaW50IG91cl9pZCwKLQkJCQkJICAgIHVfaW50IHJlbW90ZV9pZCwKLQkJCQkJICAgIHN0cnVjdCBhaGNfdG1vZGVfdHN0YXRlICoqdHN0YXRlKTsKLXN0YXRpYyBfX2lubGluZSB1aW50MTZfdAotCQkJYWhjX2ludyhzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHVfaW50IHBvcnQpOwotc3RhdGljIF9faW5saW5lIHZvaWQJYWhjX291dHcoc3RydWN0IGFoY19zb2Z0YyAqYWhjLCB1X2ludCBwb3J0LAotCQkJCSB1X2ludCB2YWx1ZSk7Ci1zdGF0aWMgX19pbmxpbmUgdWludDMyX3QKLQkJCWFoY19pbmwoc3RydWN0IGFoY19zb2Z0YyAqYWhjLCB1X2ludCBwb3J0KTsKLXN0YXRpYyBfX2lubGluZSB2b2lkCWFoY19vdXRsKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgdV9pbnQgcG9ydCwKLQkJCQkgdWludDMyX3QgdmFsdWUpOwotc3RhdGljIF9faW5saW5lIHVpbnQ2NF90Ci0JCQlhaGNfaW5xKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgdV9pbnQgcG9ydCk7Ci1zdGF0aWMgX19pbmxpbmUgdm9pZAlhaGNfb3V0cShzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHVfaW50IHBvcnQsCi0JCQkJIHVpbnQ2NF90IHZhbHVlKTsKLXN0YXRpYyBfX2lubGluZSBzdHJ1Y3Qgc2NiKgotCQkJYWhjX2dldF9zY2Ioc3RydWN0IGFoY19zb2Z0YyAqYWhjKTsKLXN0YXRpYyBfX2lubGluZSB2b2lkCWFoY19mcmVlX3NjYihzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHN0cnVjdCBzY2IgKnNjYik7Ci1zdGF0aWMgX19pbmxpbmUgdm9pZAlhaGNfc3dhcF93aXRoX25leHRfaHNjYihzdHJ1Y3QgYWhjX3NvZnRjICphaGMsCi0JCQkJCQlzdHJ1Y3Qgc2NiICpzY2IpOwotc3RhdGljIF9faW5saW5lIHZvaWQJYWhjX3F1ZXVlX3NjYihzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHN0cnVjdCBzY2IgKnNjYik7Ci1zdGF0aWMgX19pbmxpbmUgc3RydWN0IHNjc2lfc2Vuc2VfZGF0YSAqCi0JCQlhaGNfZ2V0X3NlbnNlX2J1ZihzdHJ1Y3QgYWhjX3NvZnRjICphaGMsCi0JCQkJCSAgc3RydWN0IHNjYiAqc2NiKTsKLXN0YXRpYyBfX2lubGluZSB1aW50MzJfdAotCQkJYWhjX2dldF9zZW5zZV9idWZhZGRyKHN0cnVjdCBhaGNfc29mdGMgKmFoYywKLQkJCQkJICAgICAgc3RydWN0IHNjYiAqc2NiKTsKLQotLyoKLSAqIERldGVybWluZSB3aGV0aGVyIHRoZSBzZXF1ZW5jZXIgcmVwb3J0ZWQgYSByZXNpZHVhbAotICogZm9yIHRoaXMgU0NCL3RyYW5zYWN0aW9uLgotICovCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotYWhjX3VwZGF0ZV9yZXNpZHVhbChzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHN0cnVjdCBzY2IgKnNjYikKLXsKLQl1aW50MzJfdCBzZ3B0cjsKLQotCXNncHRyID0gYWhjX2xlMzJ0b2goc2NiLT5oc2NiLT5zZ3B0cik7Ci0JaWYgKChzZ3B0ciAmIFNHX1JFU0lEX1ZBTElEKSAhPSAwKQotCQlhaGNfY2FsY19yZXNpZHVhbChhaGMsIHNjYik7Ci19Ci0KLS8qCi0gKiBSZXR1cm4gcG9pbnRlcnMgdG8gdGhlIHRyYW5zZmVyIG5lZ290aWF0aW9uIGluZm9ybWF0aW9uCi0gKiBmb3IgdGhlIHNwZWNpZmllZCBvdXJfaWQvcmVtb3RlX2lkIHBhaXIuCi0gKi8KLXN0YXRpYyBfX2lubGluZSBzdHJ1Y3QgYWhjX2luaXRpYXRvcl90aW5mbyAqCi1haGNfZmV0Y2hfdHJhbnNpbmZvKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgY2hhciBjaGFubmVsLCB1X2ludCBvdXJfaWQsCi0JCSAgICB1X2ludCByZW1vdGVfaWQsIHN0cnVjdCBhaGNfdG1vZGVfdHN0YXRlICoqdHN0YXRlKQotewotCS8qCi0JICogVHJhbnNmZXIgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBzdG9yZWQgZnJvbSB0aGUgcGVyc3BlY3RpdmUKLQkgKiBvZiB0aGUgdGFyZ2V0IHJvbGUuICBTaW5jZSB0aGUgcGFyYW1ldGVycyBmb3IgYSBjb25uZWN0aW9uCi0JICogaW4gdGhlIGluaXRpYXRvciByb2xlIHRvIGEgZ2l2ZW4gdGFyZ2V0IGFyZSB0aGUgc2FtZSBhcwotCSAqIHdoZW4gdGhlIHJvbGVzIGFyZSByZXZlcnNlZCwgd2UgcHJldGVuZCB3ZSBhcmUgdGhlIHRhcmdldC4KLQkgKi8KLQlpZiAoY2hhbm5lbCA9PSAnQicpCi0JCW91cl9pZCArPSA4OwotCSp0c3RhdGUgPSBhaGMtPmVuYWJsZWRfdGFyZ2V0c1tvdXJfaWRdOwotCXJldHVybiAoJigqdHN0YXRlKS0+dHJhbnNpbmZvW3JlbW90ZV9pZF0pOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdWludDE2X3QKLWFoY19pbncoc3RydWN0IGFoY19zb2Z0YyAqYWhjLCB1X2ludCBwb3J0KQotewotCXVpbnQxNl90IHIgPSBhaGNfaW5iKGFoYywgcG9ydCsxKSA8PCA4OwotCXJldHVybiByIHwgYWhjX2luYihhaGMsIHBvcnQpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotYWhjX291dHcoc3RydWN0IGFoY19zb2Z0YyAqYWhjLCB1X2ludCBwb3J0LCB1X2ludCB2YWx1ZSkKLXsKLQlhaGNfb3V0YihhaGMsIHBvcnQsIHZhbHVlICYgMHhGRik7Ci0JYWhjX291dGIoYWhjLCBwb3J0KzEsICh2YWx1ZSA+PiA4KSAmIDB4RkYpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdWludDMyX3QKLWFoY19pbmwoc3RydWN0IGFoY19zb2Z0YyAqYWhjLCB1X2ludCBwb3J0KQotewotCXJldHVybiAoKGFoY19pbmIoYWhjLCBwb3J0KSkKLQkgICAgICB8IChhaGNfaW5iKGFoYywgcG9ydCsxKSA8PCA4KQotCSAgICAgIHwgKGFoY19pbmIoYWhjLCBwb3J0KzIpIDw8IDE2KQotCSAgICAgIHwgKGFoY19pbmIoYWhjLCBwb3J0KzMpIDw8IDI0KSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB2b2lkCi1haGNfb3V0bChzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHVfaW50IHBvcnQsIHVpbnQzMl90IHZhbHVlKQotewotCWFoY19vdXRiKGFoYywgcG9ydCwgKHZhbHVlKSAmIDB4RkYpOwotCWFoY19vdXRiKGFoYywgcG9ydCsxLCAoKHZhbHVlKSA+PiA4KSAmIDB4RkYpOwotCWFoY19vdXRiKGFoYywgcG9ydCsyLCAoKHZhbHVlKSA+PiAxNikgJiAweEZGKTsKLQlhaGNfb3V0YihhaGMsIHBvcnQrMywgKCh2YWx1ZSkgPj4gMjQpICYgMHhGRik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB1aW50NjRfdAotYWhjX2lucShzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHVfaW50IHBvcnQpCi17Ci0JcmV0dXJuICgoYWhjX2luYihhaGMsIHBvcnQpKQotCSAgICAgIHwgKGFoY19pbmIoYWhjLCBwb3J0KzEpIDw8IDgpCi0JICAgICAgfCAoYWhjX2luYihhaGMsIHBvcnQrMikgPDwgMTYpCi0JICAgICAgfCAoYWhjX2luYihhaGMsIHBvcnQrMykgPDwgMjQpCi0JICAgICAgfCAoKCh1aW50NjRfdClhaGNfaW5iKGFoYywgcG9ydCs0KSkgPDwgMzIpCi0JICAgICAgfCAoKCh1aW50NjRfdClhaGNfaW5iKGFoYywgcG9ydCs1KSkgPDwgNDApCi0JICAgICAgfCAoKCh1aW50NjRfdClhaGNfaW5iKGFoYywgcG9ydCs2KSkgPDwgNDgpCi0JICAgICAgfCAoKCh1aW50NjRfdClhaGNfaW5iKGFoYywgcG9ydCs3KSkgPDwgNTYpKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHZvaWQKLWFoY19vdXRxKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgdV9pbnQgcG9ydCwgdWludDY0X3QgdmFsdWUpCi17Ci0JYWhjX291dGIoYWhjLCBwb3J0LCB2YWx1ZSAmIDB4RkYpOwotCWFoY19vdXRiKGFoYywgcG9ydCsxLCAodmFsdWUgPj4gOCkgJiAweEZGKTsKLQlhaGNfb3V0YihhaGMsIHBvcnQrMiwgKHZhbHVlID4+IDE2KSAmIDB4RkYpOwotCWFoY19vdXRiKGFoYywgcG9ydCszLCAodmFsdWUgPj4gMjQpICYgMHhGRik7Ci0JYWhjX291dGIoYWhjLCBwb3J0KzQsICh2YWx1ZSA+PiAzMikgJiAweEZGKTsKLQlhaGNfb3V0YihhaGMsIHBvcnQrNSwgKHZhbHVlID4+IDQwKSAmIDB4RkYpOwotCWFoY19vdXRiKGFoYywgcG9ydCs2LCAodmFsdWUgPj4gNDgpICYgMHhGRik7Ci0JYWhjX291dGIoYWhjLCBwb3J0KzcsICh2YWx1ZSA+PiA1NikgJiAweEZGKTsKLX0KLQotLyoKLSAqIEdldCBhIGZyZWUgc2NiLiBJZiB0aGVyZSBhcmUgbm9uZSwgc2VlIGlmIHdlIGNhbiBhbGxvY2F0ZSBhIG5ldyBTQ0IuCi0gKi8KLXN0YXRpYyBfX2lubGluZSBzdHJ1Y3Qgc2NiICoKLWFoY19nZXRfc2NiKHN0cnVjdCBhaGNfc29mdGMgKmFoYykKLXsKLQlzdHJ1Y3Qgc2NiICpzY2I7Ci0KLQlpZiAoKHNjYiA9IFNMSVNUX0ZJUlNUKCZhaGMtPnNjYl9kYXRhLT5mcmVlX3NjYnMpKSA9PSBOVUxMKSB7Ci0JCWFoY19hbGxvY19zY2JzKGFoYyk7Ci0JCXNjYiA9IFNMSVNUX0ZJUlNUKCZhaGMtPnNjYl9kYXRhLT5mcmVlX3NjYnMpOwotCQlpZiAoc2NiID09IE5VTEwpCi0JCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlTTElTVF9SRU1PVkVfSEVBRCgmYWhjLT5zY2JfZGF0YS0+ZnJlZV9zY2JzLCBsaW5rcy5zbGUpOwotCXJldHVybiAoc2NiKTsKLX0KLQotLyoKLSAqIFJldHVybiBhbiBTQ0IgcmVzb3VyY2UgdG8gdGhlIGZyZWUgbGlzdC4KLSAqLwotc3RhdGljIF9faW5saW5lIHZvaWQKLWFoY19mcmVlX3NjYihzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHN0cnVjdCBzY2IgKnNjYikKLXsgICAgICAgCi0Jc3RydWN0IGhhcmR3YXJlX3NjYiAqaHNjYjsKLQotCWhzY2IgPSBzY2ItPmhzY2I7Ci0JLyogQ2xlYW4gdXAgZm9yIHRoZSBuZXh0IHVzZXIgKi8KLQlhaGMtPnNjYl9kYXRhLT5zY2JpbmRleFtoc2NiLT50YWddID0gTlVMTDsKLQlzY2ItPmZsYWdzID0gU0NCX0ZSRUU7Ci0JaHNjYi0+Y29udHJvbCA9IDA7Ci0KLQlTTElTVF9JTlNFUlRfSEVBRCgmYWhjLT5zY2JfZGF0YS0+ZnJlZV9zY2JzLCBzY2IsIGxpbmtzLnNsZSk7Ci0KLQkvKiBOb3RpZnkgdGhlIE9TTSB0aGF0IGEgcmVzb3VyY2UgaXMgbm93IGF2YWlsYWJsZS4gKi8KLQlhaGNfcGxhdGZvcm1fc2NiX2ZyZWUoYWhjLCBzY2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgc3RydWN0IHNjYiAqCi1haGNfbG9va3VwX3NjYihzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHVfaW50IHRhZykKLXsKLQlzdHJ1Y3Qgc2NiKiBzY2I7Ci0KLQlzY2IgPSBhaGMtPnNjYl9kYXRhLT5zY2JpbmRleFt0YWddOwotCWlmIChzY2IgIT0gTlVMTCkKLQkJYWhjX3N5bmNfc2NiKGFoYywgc2NiLAotCQkJICAgICBCVVNfRE1BU1lOQ19QT1NUUkVBRHxCVVNfRE1BU1lOQ19QT1NUV1JJVEUpOwotCXJldHVybiAoc2NiKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHZvaWQKLWFoY19zd2FwX3dpdGhfbmV4dF9oc2NiKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgc3RydWN0IHNjYiAqc2NiKQotewotCXN0cnVjdCBoYXJkd2FyZV9zY2IgKnFfaHNjYjsKLQl1X2ludCAgc2F2ZWRfdGFnOwotCi0JLyoKLQkgKiBPdXIgcXVldWluZyBtZXRob2QgaXMgYSBiaXQgdHJpY2t5LiAgVGhlIGNhcmQKLQkgKiBrbm93cyBpbiBhZHZhbmNlIHdoaWNoIEhTQ0IgdG8gZG93bmxvYWQsIGFuZCB3ZQotCSAqIGNhbid0IGRpc2FwcG9pbnQgaXQuICBUbyBhY2hpZXZlIHRoaXMsIHRoZSBuZXh0Ci0JICogU0NCIHRvIGRvd25sb2FkIGlzIHNhdmVkIG9mZiBpbiBhaGMtPm5leHRfcXVldWVkX3NjYi4KLQkgKiBXaGVuIHdlIGFyZSBjYWxsZWQgdG8gcXVldWUgImFuIGFyYml0cmFyeSBzY2IiLAotCSAqIHdlIGNvcHkgdGhlIGNvbnRlbnRzIG9mIHRoZSBpbmNvbWluZyBIU0NCIHRvIHRoZSBvbmUKLQkgKiB0aGUgc2VxdWVuY2VyIGtub3dzIGFib3V0LCBzd2FwIEhTQ0IgcG9pbnRlcnMgYW5kCi0JICogZmluYWxseSBhc3NpZ24gdGhlIFNDQiB0byB0aGUgdGFnIGluZGV4ZWQgbG9jYXRpb24KLQkgKiBpbiB0aGUgc2NiX2FycmF5LiAgVGhpcyBtYWtlcyBzdXJlIHRoYXQgd2UgY2FuIHN0aWxsCi0JICogbG9jYXRlIHRoZSBjb3JyZWN0IFNDQiBieSBTQ0JfVEFHLgotCSAqLwotCXFfaHNjYiA9IGFoYy0+bmV4dF9xdWV1ZWRfc2NiLT5oc2NiOwotCXNhdmVkX3RhZyA9IHFfaHNjYi0+dGFnOwotCW1lbWNweShxX2hzY2IsIHNjYi0+aHNjYiwgc2l6ZW9mKCpzY2ItPmhzY2IpKTsKLQlpZiAoKHNjYi0+ZmxhZ3MgJiBTQ0JfQ0RCMzJfUFRSKSAhPSAwKSB7Ci0JCXFfaHNjYi0+c2hhcmVkX2RhdGEuY2RiX3B0ciA9Ci0JCSAgICBhaGNfaHRvbGUzMihhaGNfaHNjYl9idXNhZGRyKGFoYywgcV9oc2NiLT50YWcpCi0JCQkgICAgICArIG9mZnNldG9mKHN0cnVjdCBoYXJkd2FyZV9zY2IsIGNkYjMyKSk7Ci0JfQotCXFfaHNjYi0+dGFnID0gc2F2ZWRfdGFnOwotCXFfaHNjYi0+bmV4dCA9IHNjYi0+aHNjYi0+dGFnOwotCi0JLyogTm93IHN3YXAgSFNDQiBwb2ludGVycy4gKi8KLQlhaGMtPm5leHRfcXVldWVkX3NjYi0+aHNjYiA9IHNjYi0+aHNjYjsKLQlzY2ItPmhzY2IgPSBxX2hzY2I7Ci0KLQkvKiBOb3cgZGVmaW5lIHRoZSBtYXBwaW5nIGZyb20gdGFnIHRvIFNDQiBpbiB0aGUgc2NiaW5kZXggKi8KLQlhaGMtPnNjYl9kYXRhLT5zY2JpbmRleFtzY2ItPmhzY2ItPnRhZ10gPSBzY2I7Ci19Ci0KLS8qCi0gKiBUZWxsIHRoZSBzZXF1ZW5jZXIgYWJvdXQgYSBuZXcgdHJhbnNhY3Rpb24gdG8gZXhlY3V0ZS4KLSAqLwotc3RhdGljIF9faW5saW5lIHZvaWQKLWFoY19xdWV1ZV9zY2Ioc3RydWN0IGFoY19zb2Z0YyAqYWhjLCBzdHJ1Y3Qgc2NiICpzY2IpCi17Ci0JYWhjX3N3YXBfd2l0aF9uZXh0X2hzY2IoYWhjLCBzY2IpOwotCi0JaWYgKHNjYi0+aHNjYi0+dGFnID09IFNDQl9MSVNUX05VTEwKLQkgfHwgc2NiLT5oc2NiLT5uZXh0ID09IFNDQl9MSVNUX05VTEwpCi0JCXBhbmljKCJBdHRlbXB0IHRvIHF1ZXVlIGludmFsaWQgU0NCIHRhZyAleDoleFxuIiwKLQkJICAgICAgc2NiLT5oc2NiLT50YWcsIHNjYi0+aHNjYi0+bmV4dCk7Ci0KLQkvKgotCSAqIFNldHVwIGRhdGEgIm9kZG5lc3MiLgotCSAqLwotCXNjYi0+aHNjYi0+bHVuICY9IExJRDsKLQlpZiAoYWhjX2dldF90cmFuc2Zlcl9sZW5ndGgoc2NiKSAmIDB4MSkKLQkJc2NiLT5oc2NiLT5sdW4gfD0gU0NCX1hGRVJMRU5fT0REOwotCi0JLyoKLQkgKiBLZWVwIGEgaGlzdG9yeSBvZiBTQ0JzIHdlJ3ZlIGRvd25sb2FkZWQgaW4gdGhlIHFpbmZpZm8uCi0JICovCi0JYWhjLT5xaW5maWZvW2FoYy0+cWluZmlmb25leHQrK10gPSBzY2ItPmhzY2ItPnRhZzsKLQotCS8qCi0JICogTWFrZSBzdXJlIG91ciBkYXRhIGlzIGNvbnNpc3RlbnQgZnJvbSB0aGUKLQkgKiBwZXJzcGVjdGl2ZSBvZiB0aGUgYWRhcHRlci4KLQkgKi8KLQlhaGNfc3luY19zY2IoYWhjLCBzY2IsIEJVU19ETUFTWU5DX1BSRVJFQUR8QlVTX0RNQVNZTkNfUFJFV1JJVEUpOwotCi0JLyogVGVsbCB0aGUgYWRhcHRlciBhYm91dCB0aGUgbmV3bHkgcXVldWVkIFNDQiAqLwotCWlmICgoYWhjLT5mZWF0dXJlcyAmIEFIQ19RVUVVRV9SRUdTKSAhPSAwKSB7Ci0JCWFoY19vdXRiKGFoYywgSE5TQ0JfUU9GRiwgYWhjLT5xaW5maWZvbmV4dCk7Ci0JfSBlbHNlIHsKLQkJaWYgKChhaGMtPmZlYXR1cmVzICYgQUhDX0FVVE9QQVVTRSkgPT0gMCkKLQkJCWFoY19wYXVzZShhaGMpOwotCQlhaGNfb3V0YihhaGMsIEtFUk5FTF9RSU5QT1MsIGFoYy0+cWluZmlmb25leHQpOwotCQlpZiAoKGFoYy0+ZmVhdHVyZXMgJiBBSENfQVVUT1BBVVNFKSA9PSAwKQotCQkJYWhjX3VucGF1c2UoYWhjKTsKLQl9Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBzdHJ1Y3Qgc2NzaV9zZW5zZV9kYXRhICoKLWFoY19nZXRfc2Vuc2VfYnVmKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgc3RydWN0IHNjYiAqc2NiKQotewotCWludCBvZmZzZXQ7Ci0KLQlvZmZzZXQgPSBzY2IgLSBhaGMtPnNjYl9kYXRhLT5zY2JhcnJheTsKLQlyZXR1cm4gKCZhaGMtPnNjYl9kYXRhLT5zZW5zZVtvZmZzZXRdKTsKLX0KLQotc3RhdGljIF9faW5saW5lIHVpbnQzMl90Ci1haGNfZ2V0X3NlbnNlX2J1ZmFkZHIoc3RydWN0IGFoY19zb2Z0YyAqYWhjLCBzdHJ1Y3Qgc2NiICpzY2IpCi17Ci0JaW50IG9mZnNldDsKLQotCW9mZnNldCA9IHNjYiAtIGFoYy0+c2NiX2RhdGEtPnNjYmFycmF5OwotCXJldHVybiAoYWhjLT5zY2JfZGF0YS0+c2Vuc2VfYnVzYWRkcgotCSAgICAgICsgKG9mZnNldCAqIHNpemVvZihzdHJ1Y3Qgc2NzaV9zZW5zZV9kYXRhKSkpOwotfQorc3RydWN0IGFoY19pbml0aWF0b3JfdGluZm8gKgorCWFoY19mZXRjaF90cmFuc2luZm8oc3RydWN0IGFoY19zb2Z0YyAqYWhjLAorCQkJICAgIGNoYXIgY2hhbm5lbCwgdV9pbnQgb3VyX2lkLAorCQkJICAgIHVfaW50IHJlbW90ZV9pZCwKKwkJCSAgICBzdHJ1Y3QgYWhjX3Rtb2RlX3RzdGF0ZSAqKnRzdGF0ZSk7Cit1aW50MTZfdAorCWFoY19pbncoc3RydWN0IGFoY19zb2Z0YyAqYWhjLCB1X2ludCBwb3J0KTsKK3ZvaWQJYWhjX291dHcoc3RydWN0IGFoY19zb2Z0YyAqYWhjLCB1X2ludCBwb3J0LAorCQkgdV9pbnQgdmFsdWUpOwordWludDMyX3QKKwlhaGNfaW5sKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgdV9pbnQgcG9ydCk7Cit2b2lkCWFoY19vdXRsKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgdV9pbnQgcG9ydCwKKwkJIHVpbnQzMl90IHZhbHVlKTsKK3VpbnQ2NF90CisJYWhjX2lucShzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHVfaW50IHBvcnQpOwordm9pZAlhaGNfb3V0cShzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHVfaW50IHBvcnQsCisJCSB1aW50NjRfdCB2YWx1ZSk7CitzdHJ1Y3Qgc2NiKgorCWFoY19nZXRfc2NiKHN0cnVjdCBhaGNfc29mdGMgKmFoYyk7Cit2b2lkCWFoY19mcmVlX3NjYihzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHN0cnVjdCBzY2IgKnNjYik7CitzdHJ1Y3Qgc2NiICoKKwlhaGNfbG9va3VwX3NjYihzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHVfaW50IHRhZyk7Cit2b2lkCWFoY19xdWV1ZV9zY2Ioc3RydWN0IGFoY19zb2Z0YyAqYWhjLCBzdHJ1Y3Qgc2NiICpzY2IpOworc3RydWN0IHNjc2lfc2Vuc2VfZGF0YSAqCisJYWhjX2dldF9zZW5zZV9idWYoc3RydWN0IGFoY19zb2Z0YyAqYWhjLAorCQkJICBzdHJ1Y3Qgc2NiICpzY2IpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKiogSW50ZXJydXB0IFByb2Nlc3NpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIF9faW5saW5lIHZvaWQJYWhjX3N5bmNfcW91dGZpZm8oc3RydWN0IGFoY19zb2Z0YyAqYWhjLCBpbnQgb3ApOwotc3RhdGljIF9faW5saW5lIHZvaWQJYWhjX3N5bmNfdHFpbmZpZm8oc3RydWN0IGFoY19zb2Z0YyAqYWhjLCBpbnQgb3ApOwotc3RhdGljIF9faW5saW5lIHVfaW50CWFoY19jaGVja19jbWRjbXBsdHF1ZXVlcyhzdHJ1Y3QgYWhjX3NvZnRjICphaGMpOwotc3RhdGljIF9faW5saW5lIGludAlhaGNfaW50cihzdHJ1Y3QgYWhjX3NvZnRjICphaGMpOwotCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotYWhjX3N5bmNfcW91dGZpZm8oc3RydWN0IGFoY19zb2Z0YyAqYWhjLCBpbnQgb3ApCi17Ci0JYWhjX2RtYW1hcF9zeW5jKGFoYywgYWhjLT5zaGFyZWRfZGF0YV9kbWF0LCBhaGMtPnNoYXJlZF9kYXRhX2RtYW1hcCwKLQkJCS8qb2Zmc2V0Ki8wLCAvKmxlbiovMjU2LCBvcCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB2b2lkCi1haGNfc3luY190cWluZmlmbyhzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIGludCBvcCkKLXsKLSNpZmRlZiBBSENfVEFSR0VUX01PREUKLQlpZiAoKGFoYy0+ZmxhZ3MgJiBBSENfVEFSR0VUUk9MRSkgIT0gMCkgewotCQlhaGNfZG1hbWFwX3N5bmMoYWhjLCBhaGMtPnNoYXJlZF9kYXRhX2RtYXQsCi0JCQkJYWhjLT5zaGFyZWRfZGF0YV9kbWFtYXAsCi0JCQkJYWhjX3RhcmdldGNtZF9vZmZzZXQoYWhjLCAwKSwKLQkJCQlzaXplb2Yoc3RydWN0IHRhcmdldF9jbWQpICogQUhDX1RNT0RFX0NNRFMsCi0JCQkJb3ApOwotCX0KLSNlbmRpZgotfQotCi0vKgotICogU2VlIGlmIHRoZSBmaXJtd2FyZSBoYXMgcG9zdGVkIGFueSBjb21wbGV0ZWQgY29tbWFuZHMKLSAqIGludG8gb3VyIGluLWNvcmUgY29tbWFuZCBjb21wbGV0ZSBmaWZvcy4KLSAqLwotI2RlZmluZSBBSENfUlVOX1FPVVRGSUZPIDB4MQotI2RlZmluZSBBSENfUlVOX1RRSU5GSUZPIDB4Mgotc3RhdGljIF9faW5saW5lIHVfaW50Ci1haGNfY2hlY2tfY21kY21wbHRxdWV1ZXMoc3RydWN0IGFoY19zb2Z0YyAqYWhjKQotewotCXVfaW50IHJldHZhbDsKLQotCXJldHZhbCA9IDA7Ci0JYWhjX2RtYW1hcF9zeW5jKGFoYywgYWhjLT5zaGFyZWRfZGF0YV9kbWF0LCBhaGMtPnNoYXJlZF9kYXRhX2RtYW1hcCwKLQkJCS8qb2Zmc2V0Ki9haGMtPnFvdXRmaWZvbmV4dCwgLypsZW4qLzEsCi0JCQlCVVNfRE1BU1lOQ19QT1NUUkVBRCk7Ci0JaWYgKGFoYy0+cW91dGZpZm9bYWhjLT5xb3V0Zmlmb25leHRdICE9IFNDQl9MSVNUX05VTEwpCi0JCXJldHZhbCB8PSBBSENfUlVOX1FPVVRGSUZPOwotI2lmZGVmIEFIQ19UQVJHRVRfTU9ERQotCWlmICgoYWhjLT5mbGFncyAmIEFIQ19UQVJHRVRST0xFKSAhPSAwCi0JICYmIChhaGMtPmZsYWdzICYgQUhDX1RRSU5GSUZPX0JMT0NLRUQpID09IDApIHsKLQkJYWhjX2RtYW1hcF9zeW5jKGFoYywgYWhjLT5zaGFyZWRfZGF0YV9kbWF0LAotCQkJCWFoYy0+c2hhcmVkX2RhdGFfZG1hbWFwLAotCQkJCWFoY190YXJnZXRjbWRfb2Zmc2V0KGFoYywgYWhjLT50cWluZmlmb2ZuZXh0KSwKLQkJCQkvKmxlbiovc2l6ZW9mKHN0cnVjdCB0YXJnZXRfY21kKSwKLQkJCQlCVVNfRE1BU1lOQ19QT1NUUkVBRCk7Ci0JCWlmIChhaGMtPnRhcmdldGNtZHNbYWhjLT50cWluZmlmb25leHRdLmNtZF92YWxpZCAhPSAwKQotCQkJcmV0dmFsIHw9IEFIQ19SVU5fVFFJTkZJRk87Ci0JfQotI2VuZGlmCi0JcmV0dXJuIChyZXR2YWwpOwotfQotCi0vKgotICogQ2F0Y2ggYW4gaW50ZXJydXB0IGZyb20gdGhlIGFkYXB0ZXIKLSAqLwotc3RhdGljIF9faW5saW5lIGludAotYWhjX2ludHIoc3RydWN0IGFoY19zb2Z0YyAqYWhjKQotewotCXVfaW50CWludHN0YXQ7Ci0KLQlpZiAoKGFoYy0+cGF1c2UgJiBJTlRFTikgPT0gMCkgewotCQkvKgotCQkgKiBPdXIgaW50ZXJydXB0IGlzIG5vdCBlbmFibGVkIG9uIHRoZSBjaGlwCi0JCSAqIGFuZCBtYXkgYmUgZGlzYWJsZWQgZm9yIHJlLWVudHJhbmN5IHJlYXNvbnMsCi0JCSAqIHNvIGp1c3QgcmV0dXJuLiAgVGhpcyBpcyBsaWtlbHkganVzdCBhIHNoYXJlZAotCQkgKiBpbnRlcnJ1cHQuCi0JCSAqLwotCQlyZXR1cm4gKDApOwotCX0KLQkvKgotCSAqIEluc3RlYWQgb2YgZGlyZWN0bHkgcmVhZGluZyB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciwKLQkgKiBpbmZlciB0aGUgY2F1c2Ugb2YgdGhlIGludGVycnVwdCBieSBjaGVja2luZyBvdXIgaW4tY29yZQotCSAqIGNvbXBsZXRpb24gcXVldWVzLiAgVGhpcyBhdm9pZHMgYSBjb3N0bHkgUENJIGJ1cyByZWFkIGluCi0JICogbW9zdCBjYXNlcy4KLQkgKi8KLQlpZiAoKGFoYy0+ZmxhZ3MgJiAoQUhDX0FMTF9JTlRFUlJVUFRTfEFIQ19FREdFX0lOVEVSUlVQVCkpID09IDAKLQkgJiYgKGFoY19jaGVja19jbWRjbXBsdHF1ZXVlcyhhaGMpICE9IDApKQotCQlpbnRzdGF0ID0gQ01EQ01QTFQ7Ci0JZWxzZSB7Ci0JCWludHN0YXQgPSBhaGNfaW5iKGFoYywgSU5UU1RBVCk7Ci0JfQotCi0JaWYgKChpbnRzdGF0ICYgSU5UX1BFTkQpID09IDApIHsKLSNpZiBBSENfUENJX0NPTkZJRyA+IDAKLQkJaWYgKGFoYy0+dW5zb2xpY2l0ZWRfaW50cyA+IDUwMCkgewotCQkJYWhjLT51bnNvbGljaXRlZF9pbnRzID0gMDsKLQkJCWlmICgoYWhjLT5jaGlwICYgQUhDX1BDSSkgIT0gMAotCQkJICYmIChhaGNfaW5iKGFoYywgRVJST1IpICYgUENJRVJSU1RBVCkgIT0gMCkKLQkJCQlhaGMtPmJ1c19pbnRyKGFoYyk7Ci0JCX0KLSNlbmRpZgotCQlhaGMtPnVuc29saWNpdGVkX2ludHMrKzsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JYWhjLT51bnNvbGljaXRlZF9pbnRzID0gMDsKLQotCWlmIChpbnRzdGF0ICYgQ01EQ01QTFQpIHsKLQkJYWhjX291dGIoYWhjLCBDTFJJTlQsIENMUkNNRElOVCk7Ci0KLQkJLyoKLQkJICogRW5zdXJlIHRoYXQgdGhlIGNoaXAgc2VlcyB0aGF0IHdlJ3ZlIGNsZWFyZWQKLQkJICogdGhpcyBpbnRlcnJ1cHQgYmVmb3JlIHdlIHdhbGsgdGhlIG91dHB1dCBmaWZvLgotCQkgKiBPdGhlcndpc2UsIHdlIG1heSwgZHVlIHRvIHBvc3RlZCBidXMgd3JpdGVzLAotCQkgKiBjbGVhciB0aGUgaW50ZXJydXB0IGFmdGVyIHdlIGZpbmlzaCB0aGUgc2NhbiwKLQkJICogYW5kIGFmdGVyIHRoZSBzZXF1ZW5jZXIgaGFzIGFkZGVkIG5ldyBlbnRyaWVzCi0JCSAqIGFuZCBhc3NlcnRlZCB0aGUgaW50ZXJydXB0IGFnYWluLgotCQkgKi8KLQkJYWhjX2ZsdXNoX2RldmljZV93cml0ZXMoYWhjKTsKLQkJYWhjX3J1bl9xb3V0ZmlmbyhhaGMpOwotI2lmZGVmIEFIQ19UQVJHRVRfTU9ERQotCQlpZiAoKGFoYy0+ZmxhZ3MgJiBBSENfVEFSR0VUUk9MRSkgIT0gMCkKLQkJCWFoY19ydW5fdHFpbmZpZm8oYWhjLCAvKnBhdXNlZCovRkFMU0UpOwotI2VuZGlmCi0JfQotCi0JLyoKLQkgKiBIYW5kbGUgc3RhdHVzZXMgdGhhdCBtYXkgaW52YWxpZGF0ZSBvdXIgY2FjaGVkCi0JICogY29weSBvZiBJTlRTVEFUIHNlcGFyYXRlbHkuCi0JICovCi0JaWYgKGludHN0YXQgPT0gMHhGRiAmJiAoYWhjLT5mZWF0dXJlcyAmIEFIQ19SRU1PVkFCTEUpICE9IDApIHsKLQkJLyogSG90IGVqZWN0LiAgRG8gbm90aGluZyAqLwotCX0gZWxzZSBpZiAoaW50c3RhdCAmIEJSS0FEUklOVCkgewotCQlhaGNfaGFuZGxlX2Jya2FkcmludChhaGMpOwotCX0gZWxzZSBpZiAoKGludHN0YXQgJiAoU0VRSU5UfFNDU0lJTlQpKSAhPSAwKSB7Ci0KLQkJYWhjX3BhdXNlX2J1Z19maXgoYWhjKTsKLQotCQlpZiAoKGludHN0YXQgJiBTRVFJTlQpICE9IDApCi0JCQlhaGNfaGFuZGxlX3NlcWludChhaGMsIGludHN0YXQpOwotCi0JCWlmICgoaW50c3RhdCAmIFNDU0lJTlQpICE9IDApCi0JCQlhaGNfaGFuZGxlX3Njc2lpbnQoYWhjLCBpbnRzdGF0KTsKLQl9Ci0JcmV0dXJuICgxKTsKLX0KK2ludAlhaGNfaW50cihzdHJ1Y3QgYWhjX3NvZnRjICphaGMpOwogCiAjZW5kaWYgIC8qIF9BSUM3WFhYX0lOTElORV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmMKaW5kZXggNDJhZDQ4ZS4uZmQyYjk3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5jCkBAIC0zODgsMTQgKzM4OCw4MyBAQAogc3RhdGljIGludCBhaGNfbGludXhfdW5pdDsKIAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIElubGluZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIF9faW5saW5lIHZvaWQgYWhjX2xpbnV4X3VubWFwX3NjYihzdHJ1Y3QgYWhjX3NvZnRjKiwgc3RydWN0IHNjYiopOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqIE9TIFV0aWxpdHkgV3JhcHBlcnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQKK2FoY19kZWxheShsb25nIHVzZWMpCit7CisJLyoKKwkgKiB1ZGVsYXkgb24gTGludXggY2FuIGhhdmUgcHJvYmxlbXMgZm9yCisJICogbXVsdGktbWlsbGlzZWNvbmQgd2FpdHMuICBXYWl0IGF0IG1vc3QKKwkgKiAxMDI0dXMgcGVyIGNhbGwuCisJICovCisJd2hpbGUgKHVzZWMgPiAwKSB7CisJCXVkZWxheSh1c2VjICUgMTAyNCk7CisJCXVzZWMgLT0gMTAyNDsKKwl9Cit9CiAKLXN0YXRpYyBfX2lubGluZSBpbnQgYWhjX2xpbnV4X21hcF9zZWcoc3RydWN0IGFoY19zb2Z0YyAqYWhjLCBzdHJ1Y3Qgc2NiICpzY2IsCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogTG93IExldmVsIEkvTyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordWludDhfdAorYWhjX2luYihzdHJ1Y3QgYWhjX3NvZnRjICogYWhjLCBsb25nIHBvcnQpCit7CisJdWludDhfdCB4OworCisJaWYgKGFoYy0+dGFnID09IEJVU19TUEFDRV9NRU1JTykgeworCQl4ID0gcmVhZGIoYWhjLT5ic2gubWFkZHIgKyBwb3J0KTsKKwl9IGVsc2UgeworCQl4ID0gaW5iKGFoYy0+YnNoLmlvcG9ydCArIHBvcnQpOworCX0KKwltYigpOworCXJldHVybiAoeCk7Cit9CisKK3ZvaWQKK2FoY19vdXRiKHN0cnVjdCBhaGNfc29mdGMgKiBhaGMsIGxvbmcgcG9ydCwgdWludDhfdCB2YWwpCit7CisJaWYgKGFoYy0+dGFnID09IEJVU19TUEFDRV9NRU1JTykgeworCQl3cml0ZWIodmFsLCBhaGMtPmJzaC5tYWRkciArIHBvcnQpOworCX0gZWxzZSB7CisJCW91dGIodmFsLCBhaGMtPmJzaC5pb3BvcnQgKyBwb3J0KTsKKwl9CisJbWIoKTsKK30KKwordm9pZAorYWhjX291dHNiKHN0cnVjdCBhaGNfc29mdGMgKiBhaGMsIGxvbmcgcG9ydCwgdWludDhfdCAqYXJyYXksIGludCBjb3VudCkKK3sKKwlpbnQgaTsKKworCS8qCisJICogVGhlcmUgaXMgcHJvYmFibHkgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gZG8gdGhpcyBvbiBMaW51eAorCSAqIGJ1dCB3ZSBkb24ndCB1c2UgdGhpcyBmb3IgYW55dGhpbmcgc3BlZWQgY3JpdGljYWwgYW5kIHRoaXMKKwkgKiBzaG91bGQgd29yay4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwkJYWhjX291dGIoYWhjLCBwb3J0LCAqYXJyYXkrKyk7Cit9CisKK3ZvaWQKK2FoY19pbnNiKHN0cnVjdCBhaGNfc29mdGMgKiBhaGMsIGxvbmcgcG9ydCwgdWludDhfdCAqYXJyYXksIGludCBjb3VudCkKK3sKKwlpbnQgaTsKKworCS8qCisJICogVGhlcmUgaXMgcHJvYmFibHkgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gZG8gdGhpcyBvbiBMaW51eAorCSAqIGJ1dCB3ZSBkb24ndCB1c2UgdGhpcyBmb3IgYW55dGhpbmcgc3BlZWQgY3JpdGljYWwgYW5kIHRoaXMKKwkgKiBzaG91bGQgd29yay4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwkJKmFycmF5KysgPSBhaGNfaW5iKGFoYywgcG9ydCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogSW5saW5lcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBhaGNfbGludXhfdW5tYXBfc2NiKHN0cnVjdCBhaGNfc29mdGMqLCBzdHJ1Y3Qgc2NiKik7CisKK3N0YXRpYyBpbnQgYWhjX2xpbnV4X21hcF9zZWcoc3RydWN0IGFoY19zb2Z0YyAqYWhjLCBzdHJ1Y3Qgc2NiICpzY2IsCiAJCSAJCSAgICAgIHN0cnVjdCBhaGNfZG1hX3NlZyAqc2csCiAJCQkJICAgICAgZG1hX2FkZHJfdCBhZGRyLCBidXNfc2l6ZV90IGxlbik7CiAKLXN0YXRpYyBfX2lubGluZSB2b2lkCitzdGF0aWMgdm9pZAogYWhjX2xpbnV4X3VubWFwX3NjYihzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHN0cnVjdCBzY2IgKnNjYikKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQ7CkBAIC00MDYsNyArNDc1LDcgQEAKIAlzY3NpX2RtYV91bm1hcChjbWQpOwogfQogCi1zdGF0aWMgX19pbmxpbmUgaW50CitzdGF0aWMgaW50CiBhaGNfbGludXhfbWFwX3NlZyhzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHN0cnVjdCBzY2IgKnNjYiwKIAkJICBzdHJ1Y3QgYWhjX2RtYV9zZWcgKnNnLCBkbWFfYWRkcl90IGFkZHIsIGJ1c19zaXplX3QgbGVuKQogewpAQCAtNDQyLDEzICs1MTEsMTEgQEAKIAlicCA9ICZidWZmZXJbMF07CiAJYWhjID0gKihzdHJ1Y3QgYWhjX3NvZnRjICoqKWhvc3QtPmhvc3RkYXRhOwogCW1lbXNldChicCwgMCwgc2l6ZW9mKGJ1ZmZlcikpOwotCXN0cmNweShicCwgIkFkYXB0ZWMgQUlDN1hYWCBFSVNBL1ZMQi9QQ0kgU0NTSSBIQkEgRFJJVkVSLCBSZXYgIik7Ci0Jc3RyY2F0KGJwLCBBSUM3WFhYX0RSSVZFUl9WRVJTSU9OKTsKLQlzdHJjYXQoYnAsICJcbiIpOwotCXN0cmNhdChicCwgIiAgICAgICAgPCIpOworCXN0cmNweShicCwgIkFkYXB0ZWMgQUlDN1hYWCBFSVNBL1ZMQi9QQ0kgU0NTSSBIQkEgRFJJVkVSLCBSZXYgIiBBSUM3WFhYX0RSSVZFUl9WRVJTSU9OICJcbiIKKwkJCSIgICAgICAgIDwiKTsKIAlzdHJjYXQoYnAsIGFoYy0+ZGVzY3JpcHRpb24pOwotCXN0cmNhdChicCwgIj5cbiIpOwotCXN0cmNhdChicCwgIiAgICAgICAgIik7CisJc3RyY2F0KGJwLCAiPlxuIgorCQkJIiAgICAgICAgIik7CiAJYWhjX2NvbnRyb2xsZXJfaW5mbyhhaGMsIGFoY19pbmZvKTsKIAlzdHJjYXQoYnAsIGFoY19pbmZvKTsKIAlzdHJjYXQoYnAsICJcbiIpOwpAQCAtOTY0LDcgKzEwMzEsNyBAQAogCWNoYXIgICAqcDsKIAljaGFyICAgKmVuZDsKIAotCXN0YXRpYyBzdHJ1Y3QgeworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCQljb25zdCBjaGFyICpuYW1lOwogCQl1aW50MzJfdCAqZmxhZzsKIAl9IG9wdGlvbnNbXSA9IHsKQEAgLTIzMTcsNyArMjM4NCw3IEBACiAJdW5zaWduZWQgaW50IHBwcl9vcHRpb25zID0gdGluZm8tPmdvYWwucHByX29wdGlvbnM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHRpbmZvLT5nb2FsLm9mZnNldDsKLQlzdHJ1Y3QgYWhjX3N5bmNyYXRlICpzeW5jcmF0ZTsKKwljb25zdCBzdHJ1Y3QgYWhjX3N5bmNyYXRlICpzeW5jcmF0ZTsKIAogCWlmIChvZmZzZXQgPT0gMCkKIAkJb2Zmc2V0ID0gTUFYX09GRlNFVDsKQEAgLTIzNjEsNyArMjQyOCw3IEBACiAJdW5zaWduZWQgaW50IHBwcl9vcHRpb25zID0gMDsKIAl1bnNpZ25lZCBpbnQgcGVyaW9kID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBhaGNfc3luY3JhdGUgKnN5bmNyYXRlID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgYWhjX3N5bmNyYXRlICpzeW5jcmF0ZSA9IE5VTEw7CiAKIAlhaGNfY29tcGlsZV9kZXZpbmZvKCZkZXZpbmZvLCBzaG9zdC0+dGhpc19pZCwgc3RhcmdldC0+aWQsIDAsCiAJCQkgICAgc3RhcmdldC0+Y2hhbm5lbCArICdBJywgUk9MRV9JTklUSUFUT1IpOwpAQCAtMjM5MSw3ICsyNDU4LDcgQEAKIAl1bnNpZ25lZCBpbnQgcGVyaW9kID0gdGluZm8tPmdvYWwucGVyaW9kOwogCXVuc2lnbmVkIGludCB3aWR0aCA9IHRpbmZvLT5nb2FsLndpZHRoOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGFoY19zeW5jcmF0ZSAqc3luY3JhdGU7CisJY29uc3Qgc3RydWN0IGFoY19zeW5jcmF0ZSAqc3luY3JhdGU7CiAKIAlpZiAoZHQgJiYgc3BpX21heF93aWR0aChzdGFyZ2V0KSkgewogCQlwcHJfb3B0aW9ucyB8PSBNU0dfRVhUX1BQUl9EVF9SRVE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5oIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uaAppbmRleCBiNDhkYWI0Li4zZjcyMzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5oCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmgKQEAgLTM2NSw3ICszNjUsNyBAQAogI2RlZmluZSBBSENfTElOVVhfTk9JUlEJKCh1aW50MzJfdCl+MCkKIAl1aW50MzJfdAkJIGlycTsJCS8qIElSUSBmb3IgdGhpcyBhZGFwdGVyICovCiAJdWludDMyX3QJCSBiaW9zX2FkZHJlc3M7Ci0JdWludDMyX3QJCSBtZW1fYnVzYWRkcjsJLyogTWVtIEJhc2UgQWRkciAqLworCXJlc291cmNlX3NpemVfdCAJIG1lbV9idXNhZGRyOwkvKiBNZW0gQmFzZSBBZGRyICovCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKiogT1MgVXRpbGl0eSBXcmFwcGVycyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzc1LDgyICszNzUsMTYgQEAKICNkZWZpbmUgbWFsbG9jKHNpemUsIHR5cGUsIGZsYWdzKSBrbWFsbG9jKHNpemUsIGZsYWdzKQogI2RlZmluZSBmcmVlKHB0ciwgdHlwZSkga2ZyZWUocHRyKQogCi1zdGF0aWMgX19pbmxpbmUgdm9pZCBhaGNfZGVsYXkobG9uZyk7Ci1zdGF0aWMgX19pbmxpbmUgdm9pZAotYWhjX2RlbGF5KGxvbmcgdXNlYykKLXsKLQkvKgotCSAqIHVkZWxheSBvbiBMaW51eCBjYW4gaGF2ZSBwcm9ibGVtcyBmb3IKLQkgKiBtdWx0aS1taWxsaXNlY29uZCB3YWl0cy4gIFdhaXQgYXQgbW9zdAotCSAqIDEwMjR1cyBwZXIgY2FsbC4KLQkgKi8KLQl3aGlsZSAodXNlYyA+IDApIHsKLQkJdWRlbGF5KHVzZWMgJSAxMDI0KTsKLQkJdXNlYyAtPSAxMDI0OwotCX0KLX0KK3ZvaWQgYWhjX2RlbGF5KGxvbmcpOwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBMb3cgTGV2ZWwgSS9PICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgX19pbmxpbmUgdWludDhfdCBhaGNfaW5iKHN0cnVjdCBhaGNfc29mdGMgKiBhaGMsIGxvbmcgcG9ydCk7Ci1zdGF0aWMgX19pbmxpbmUgdm9pZCBhaGNfb3V0YihzdHJ1Y3QgYWhjX3NvZnRjICogYWhjLCBsb25nIHBvcnQsIHVpbnQ4X3QgdmFsKTsKLXN0YXRpYyBfX2lubGluZSB2b2lkIGFoY19vdXRzYihzdHJ1Y3QgYWhjX3NvZnRjICogYWhjLCBsb25nIHBvcnQsCi0JCQkgICAgICAgdWludDhfdCAqLCBpbnQgY291bnQpOwotc3RhdGljIF9faW5saW5lIHZvaWQgYWhjX2luc2Ioc3RydWN0IGFoY19zb2Z0YyAqIGFoYywgbG9uZyBwb3J0LAotCQkJICAgICAgIHVpbnQ4X3QgKiwgaW50IGNvdW50KTsKLQotc3RhdGljIF9faW5saW5lIHVpbnQ4X3QKLWFoY19pbmIoc3RydWN0IGFoY19zb2Z0YyAqIGFoYywgbG9uZyBwb3J0KQotewotCXVpbnQ4X3QgeDsKLQotCWlmIChhaGMtPnRhZyA9PSBCVVNfU1BBQ0VfTUVNSU8pIHsKLQkJeCA9IHJlYWRiKGFoYy0+YnNoLm1hZGRyICsgcG9ydCk7Ci0JfSBlbHNlIHsKLQkJeCA9IGluYihhaGMtPmJzaC5pb3BvcnQgKyBwb3J0KTsKLQl9Ci0JbWIoKTsKLQlyZXR1cm4gKHgpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotYWhjX291dGIoc3RydWN0IGFoY19zb2Z0YyAqIGFoYywgbG9uZyBwb3J0LCB1aW50OF90IHZhbCkKLXsKLQlpZiAoYWhjLT50YWcgPT0gQlVTX1NQQUNFX01FTUlPKSB7Ci0JCXdyaXRlYih2YWwsIGFoYy0+YnNoLm1hZGRyICsgcG9ydCk7Ci0JfSBlbHNlIHsKLQkJb3V0Yih2YWwsIGFoYy0+YnNoLmlvcG9ydCArIHBvcnQpOwotCX0KLQltYigpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotYWhjX291dHNiKHN0cnVjdCBhaGNfc29mdGMgKiBhaGMsIGxvbmcgcG9ydCwgdWludDhfdCAqYXJyYXksIGludCBjb3VudCkKLXsKLQlpbnQgaTsKLQotCS8qCi0JICogVGhlcmUgaXMgcHJvYmFibHkgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gZG8gdGhpcyBvbiBMaW51eAotCSAqIGJ1dCB3ZSBkb24ndCB1c2UgdGhpcyBmb3IgYW55dGhpbmcgc3BlZWQgY3JpdGljYWwgYW5kIHRoaXMKLQkgKiBzaG91bGQgd29yay4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLQkJYWhjX291dGIoYWhjLCBwb3J0LCAqYXJyYXkrKyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB2b2lkCi1haGNfaW5zYihzdHJ1Y3QgYWhjX3NvZnRjICogYWhjLCBsb25nIHBvcnQsIHVpbnQ4X3QgKmFycmF5LCBpbnQgY291bnQpCi17Ci0JaW50IGk7Ci0KLQkvKgotCSAqIFRoZXJlIGlzIHByb2JhYmx5IGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIGRvIHRoaXMgb24gTGludXgKLQkgKiBidXQgd2UgZG9uJ3QgdXNlIHRoaXMgZm9yIGFueXRoaW5nIHNwZWVkIGNyaXRpY2FsIGFuZCB0aGlzCi0JICogc2hvdWxkIHdvcmsuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCi0JCSphcnJheSsrID0gYWhjX2luYihhaGMsIHBvcnQpOwotfQordWludDhfdCBhaGNfaW5iKHN0cnVjdCBhaGNfc29mdGMgKiBhaGMsIGxvbmcgcG9ydCk7Cit2b2lkIGFoY19vdXRiKHN0cnVjdCBhaGNfc29mdGMgKiBhaGMsIGxvbmcgcG9ydCwgdWludDhfdCB2YWwpOwordm9pZCBhaGNfb3V0c2Ioc3RydWN0IGFoY19zb2Z0YyAqIGFoYywgbG9uZyBwb3J0LAorCSAgICAgICB1aW50OF90ICosIGludCBjb3VudCk7Cit2b2lkIGFoY19pbnNiKHN0cnVjdCBhaGNfc29mdGMgKiBhaGMsIGxvbmcgcG9ydCwKKwkgICAgICAgdWludDhfdCAqLCBpbnQgY291bnQpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBJbml0aWFsaXphdGlvbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogaW50CQlhaGNfbGludXhfcmVnaXN0ZXJfaG9zdChzdHJ1Y3QgYWhjX3NvZnRjICosCkBAIC00NjQsOSArMzk4LDYgQEAKIAlpbnQgcG9zOwogfTsKIAotdm9pZAlhaGNfZm9ybWF0X3RyYW5zaW5mbyhzdHJ1Y3QgaW5mb19zdHIgKmluZm8sCi0JCQkgICAgIHN0cnVjdCBhaGNfdHJhbnNpbmZvICp0aW5mbyk7Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBMb2NraW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBMb2NrIHByb3RlY3RpbmcgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzICovCiAKQEAgLTU1NSw2MSArNDg2LDEyIEBACiBpbnQJCQkgYWhjX3BjaV9tYXBfcmVnaXN0ZXJzKHN0cnVjdCBhaGNfc29mdGMgKmFoYyk7CiBpbnQJCQkgYWhjX3BjaV9tYXBfaW50KHN0cnVjdCBhaGNfc29mdGMgKmFoYyk7CiAKLXN0YXRpYyBfX2lubGluZSB1aW50MzJfdCBhaGNfcGNpX3JlYWRfY29uZmlnKGFoY19kZXZfc29mdGNfdCBwY2ksCit1aW50MzJfdAkJIGFoY19wY2lfcmVhZF9jb25maWcoYWhjX2Rldl9zb2Z0Y190IHBjaSwKIAkJCQkJICAgICBpbnQgcmVnLCBpbnQgd2lkdGgpOwogCi1zdGF0aWMgX19pbmxpbmUgdWludDMyX3QKLWFoY19wY2lfcmVhZF9jb25maWcoYWhjX2Rldl9zb2Z0Y190IHBjaSwgaW50IHJlZywgaW50IHdpZHRoKQotewotCXN3aXRjaCAod2lkdGgpIHsKLQljYXNlIDE6Ci0JewotCQl1aW50OF90IHJldHZhbDsKLQotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwY2ksIHJlZywgJnJldHZhbCk7Ci0JCXJldHVybiAocmV0dmFsKTsKLQl9Ci0JY2FzZSAyOgotCXsKLQkJdWludDE2X3QgcmV0dmFsOwotCQlwY2lfcmVhZF9jb25maWdfd29yZChwY2ksIHJlZywgJnJldHZhbCk7Ci0JCXJldHVybiAocmV0dmFsKTsKLQl9Ci0JY2FzZSA0OgotCXsKLQkJdWludDMyX3QgcmV0dmFsOwotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGNpLCByZWcsICZyZXR2YWwpOwotCQlyZXR1cm4gKHJldHZhbCk7Ci0JfQotCWRlZmF1bHQ6Ci0JCXBhbmljKCJhaGNfcGNpX3JlYWRfY29uZmlnOiBSZWFkIHNpemUgdG9vIGJpZyIpOwotCQkvKiBOT1RSRUFDSEVEICovCi0JCXJldHVybiAoMCk7Ci0JfQotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZCBhaGNfcGNpX3dyaXRlX2NvbmZpZyhhaGNfZGV2X3NvZnRjX3QgcGNpLAotCQkJCQkgIGludCByZWcsIHVpbnQzMl90IHZhbHVlLAotCQkJCQkgIGludCB3aWR0aCk7Ci0KLXN0YXRpYyBfX2lubGluZSB2b2lkCi1haGNfcGNpX3dyaXRlX2NvbmZpZyhhaGNfZGV2X3NvZnRjX3QgcGNpLCBpbnQgcmVnLCB1aW50MzJfdCB2YWx1ZSwgaW50IHdpZHRoKQotewotCXN3aXRjaCAod2lkdGgpIHsKLQljYXNlIDE6Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShwY2ksIHJlZywgdmFsdWUpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXBjaV93cml0ZV9jb25maWdfd29yZChwY2ksIHJlZywgdmFsdWUpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGNpLCByZWcsIHZhbHVlKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcGFuaWMoImFoY19wY2lfd3JpdGVfY29uZmlnOiBXcml0ZSBzaXplIHRvbyBiaWciKTsKLQkJLyogTk9UUkVBQ0hFRCAqLwotCX0KLX0KK3ZvaWQJCQkgYWhjX3BjaV93cml0ZV9jb25maWcoYWhjX2Rldl9zb2Z0Y190IHBjaSwKKwkJCQkJICAgICAgaW50IHJlZywgdWludDMyX3QgdmFsdWUsCisJCQkJCSAgICAgIGludCB3aWR0aCk7CiAKIHN0YXRpYyBfX2lubGluZSBpbnQgYWhjX2dldF9wY2lfZnVuY3Rpb24oYWhjX2Rldl9zb2Z0Y190KTsKIHN0YXRpYyBfX2lubGluZSBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtX3BjaS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc21fcGNpLmMKaW5kZXggM2QzZWFlZi4uMGQ3NjI4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc21fcGNpLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc21fcGNpLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICovCiAjZGVmaW5lIElEKHgpCUlEX0MoeCwgUENJX0NMQVNTX1NUT1JBR0VfU0NTSSkKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFoY19saW51eF9wY2lfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhaGNfbGludXhfcGNpX2lkX3RhYmxlW10gPSB7CiAJLyogYWljNzg1MCBiYXNlZCBjb250cm9sbGVycyAqLwogCUlEKElEX0FIQV8yOTAyXzA0XzEwXzE1XzIwQ18zMEMpLAogCS8qIGFpYzc4NjAgYmFzZWQgY29udHJvbGxlcnMgKi8KQEAgLTIwNiw3ICsyMDYsNyBAQAogCWNvbnN0IHVpbnQ2NF90CSBtYXNrXzM5Yml0ID0gMHg3RkZGRkZGRkZGVUxMOwogCXN0cnVjdAkJIGFoY19zb2Z0YyAqYWhjOwogCWFoY19kZXZfc29mdGNfdAkgcGNpOwotCXN0cnVjdAkJIGFoY19wY2lfaWRlbnRpdHkgKmVudHJ5OworCWNvbnN0IHN0cnVjdCBhaGNfcGNpX2lkZW50aXR5ICplbnRyeTsKIAljaGFyCQkqbmFtZTsKIAlpbnQJCSBlcnJvcjsKIAlzdHJ1Y3QgZGV2aWNlCSpkZXYgPSAmcGRldi0+ZGV2OwpAQCAtMjY5LDYgKzI2OSw1NyBAQAogCXJldHVybiAoMCk7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFBDSSBSb3V0aW5lcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1aW50MzJfdAorYWhjX3BjaV9yZWFkX2NvbmZpZyhhaGNfZGV2X3NvZnRjX3QgcGNpLCBpbnQgcmVnLCBpbnQgd2lkdGgpCit7CisJc3dpdGNoICh3aWR0aCkgeworCWNhc2UgMToKKwl7CisJCXVpbnQ4X3QgcmV0dmFsOworCisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaSwgcmVnLCAmcmV0dmFsKTsKKwkJcmV0dXJuIChyZXR2YWwpOworCX0KKwljYXNlIDI6CisJeworCQl1aW50MTZfdCByZXR2YWw7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBjaSwgcmVnLCAmcmV0dmFsKTsKKwkJcmV0dXJuIChyZXR2YWwpOworCX0KKwljYXNlIDQ6CisJeworCQl1aW50MzJfdCByZXR2YWw7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwY2ksIHJlZywgJnJldHZhbCk7CisJCXJldHVybiAocmV0dmFsKTsKKwl9CisJZGVmYXVsdDoKKwkJcGFuaWMoImFoY19wY2lfcmVhZF9jb25maWc6IFJlYWQgc2l6ZSB0b28gYmlnIik7CisJCS8qIE5PVFJFQUNIRUQgKi8KKwkJcmV0dXJuICgwKTsKKwl9Cit9CisKK3ZvaWQKK2FoY19wY2lfd3JpdGVfY29uZmlnKGFoY19kZXZfc29mdGNfdCBwY2ksIGludCByZWcsIHVpbnQzMl90IHZhbHVlLCBpbnQgd2lkdGgpCit7CisJc3dpdGNoICh3aWR0aCkgeworCWNhc2UgMToKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBjaSwgcmVnLCB2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBjaSwgcmVnLCB2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwY2ksIHJlZywgdmFsdWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwYW5pYygiYWhjX3BjaV93cml0ZV9jb25maWc6IFdyaXRlIHNpemUgdG9vIGJpZyIpOworCQkvKiBOT1RSRUFDSEVEICovCisJfQorfQorCisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhaWM3eHh4X3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gImFpYzd4eHgiLAogCS5wcm9iZQkJPSBhaGNfbGludXhfcGNpX2Rldl9wcm9iZSwKQEAgLTI5Myw3ICszNDQsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1haGNfbGludXhfcGNpX3Jlc2VydmVfaW9fcmVnaW9uKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgdV9sb25nICpiYXNlKQorYWhjX2xpbnV4X3BjaV9yZXNlcnZlX2lvX3JlZ2lvbihzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHJlc291cmNlX3NpemVfdCAqYmFzZSkKIHsKIAlpZiAoYWljN3h4eF9hbGxvd19tZW1pbyA9PSAwKQogCQlyZXR1cm4gKEVOT01FTSk7CkBAIC0zMDgsMTAgKzM1OSwxMCBAQAogCiBzdGF0aWMgaW50CiBhaGNfbGludXhfcGNpX3Jlc2VydmVfbWVtX3JlZ2lvbihzdHJ1Y3QgYWhjX3NvZnRjICphaGMsCi0JCQkJIHVfbG9uZyAqYnVzX2FkZHIsCisJCQkJIHJlc291cmNlX3NpemVfdCAqYnVzX2FkZHIsCiAJCQkJIHVpbnQ4X3QgX19pb21lbSAqKm1hZGRyKQogewotCXVfbG9uZwlzdGFydDsKKwlyZXNvdXJjZV9zaXplX3QJc3RhcnQ7CiAJaW50CWVycm9yOwogCiAJZXJyb3IgPSAwOwpAQCAtMzM2LDcgKzM4Nyw3IEBACiBhaGNfcGNpX21hcF9yZWdpc3RlcnMoc3RydWN0IGFoY19zb2Z0YyAqYWhjKQogewogCXVpbnQzMl90IGNvbW1hbmQ7Ci0JdV9sb25nCSBiYXNlOworCXJlc291cmNlX3NpemVfdAliYXNlOwogCXVpbnQ4X3QJX19pb21lbSAqbWFkZHI7CiAJaW50CSBlcnJvcjsKIApAQCAtMzc0LDEyICs0MjUsMTIgQEAKIAkJfSBlbHNlCiAJCQljb21tYW5kIHw9IFBDSU1fQ01EX01FTUVOOwogCX0gZWxzZSB7Ci0JCXByaW50ZigiYWljN3h4eDogUENJJWQ6JWQ6JWQgTUVNIHJlZ2lvbiAweCVseCAiCisJCXByaW50ZigiYWljN3h4eDogUENJJWQ6JWQ6JWQgTUVNIHJlZ2lvbiAweCVsbHggIgogCQkgICAgICAgInVuYXZhaWxhYmxlLiBDYW5ub3QgbWVtb3J5IG1hcCBkZXZpY2UuXG4iLAogCQkgICAgICAgYWhjX2dldF9wY2lfYnVzKGFoYy0+ZGV2X3NvZnRjKSwKIAkJICAgICAgIGFoY19nZXRfcGNpX3Nsb3QoYWhjLT5kZXZfc29mdGMpLAogCQkgICAgICAgYWhjX2dldF9wY2lfZnVuY3Rpb24oYWhjLT5kZXZfc29mdGMpLAotCQkgICAgICAgYmFzZSk7CisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJhc2UpOwogCX0KIAogCS8qCkBAIC0zOTAsMTUgKzQ0MSwxNSBAQAogCQllcnJvciA9IGFoY19saW51eF9wY2lfcmVzZXJ2ZV9pb19yZWdpb24oYWhjLCAmYmFzZSk7CiAJCWlmIChlcnJvciA9PSAwKSB7CiAJCQlhaGMtPnRhZyA9IEJVU19TUEFDRV9QSU87Ci0JCQlhaGMtPmJzaC5pb3BvcnQgPSBiYXNlOworCQkJYWhjLT5ic2guaW9wb3J0ID0gKHVfbG9uZyliYXNlOwogCQkJY29tbWFuZCB8PSBQQ0lNX0NNRF9QT1JURU47CiAJCX0gZWxzZSB7Ci0JCQlwcmludGYoImFpYzd4eHg6IFBDSSVkOiVkOiVkIElPIHJlZ2lvbiAweCVseFswLi4yNTVdICIKKwkJCXByaW50ZigiYWljN3h4eDogUENJJWQ6JWQ6JWQgSU8gcmVnaW9uIDB4JWxseFswLi4yNTVdICIKIAkJCSAgICAgICAidW5hdmFpbGFibGUuIENhbm5vdCBtYXAgZGV2aWNlLlxuIiwKIAkJCSAgICAgICBhaGNfZ2V0X3BjaV9idXMoYWhjLT5kZXZfc29mdGMpLAogCQkJICAgICAgIGFoY19nZXRfcGNpX3Nsb3QoYWhjLT5kZXZfc29mdGMpLAogCQkJICAgICAgIGFoY19nZXRfcGNpX2Z1bmN0aW9uKGFoYy0+ZGV2X3NvZnRjKSwKLQkJCSAgICAgICBiYXNlKTsKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJhc2UpOwogCQl9CiAJfQogCWFoY19wY2lfd3JpdGVfY29uZmlnKGFoYy0+ZGV2X3NvZnRjLCBQQ0lSX0NPTU1BTkQsIGNvbW1hbmQsIDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9wY2kuYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfcGNpLmMKaW5kZXggNTY4NDhmNC4uYzA3Y2I2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9wY2kuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X3BjaS5jCkBAIC0xNjgsOCArMTY4LDcgQEAKIHN0YXRpYyBhaGNfZGV2aWNlX3NldHVwX3QgYWhjX2FoYTQ5NFhYX3NldHVwOwogc3RhdGljIGFoY19kZXZpY2Vfc2V0dXBfdCBhaGNfYWhhMzk4WFhfc2V0dXA7CiAKLXN0YXRpYyBzdHJ1Y3QgYWhjX3BjaV9pZGVudGl0eSBhaGNfcGNpX2lkZW50X3RhYmxlIFtdID0KLXsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWhjX3BjaV9pZGVudGl0eSBhaGNfcGNpX2lkZW50X3RhYmxlW10gPSB7CiAJLyogYWljNzg1MCBiYXNlZCBjb250cm9sbGVycyAqLwogCXsKIAkJSURfQUhBXzI5MDJfMDRfMTBfMTVfMjBDXzMwQywKQEAgLTY2OCw3ICs2NjcsNyBAQAogCXJldHVybiAocmVzdWx0KTsKIH0KIAotc3RydWN0IGFoY19wY2lfaWRlbnRpdHkgKgorY29uc3Qgc3RydWN0IGFoY19wY2lfaWRlbnRpdHkgKgogYWhjX2ZpbmRfcGNpX2RldmljZShhaGNfZGV2X3NvZnRjX3QgcGNpKQogewogCXVpbnQ2NF90ICBmdWxsX2lkOwpAQCAtNjc2LDcgKzY3NSw3IEBACiAJdWludDE2X3QgIHZlbmRvcjsKIAl1aW50MTZfdCAgc3ViZGV2aWNlOwogCXVpbnQxNl90ICBzdWJ2ZW5kb3I7Ci0Jc3RydWN0CSAgYWhjX3BjaV9pZGVudGl0eSAqZW50cnk7CisJY29uc3Qgc3RydWN0IGFoY19wY2lfaWRlbnRpdHkgKmVudHJ5OwogCXVfaW50CSAgaTsKIAogCXZlbmRvciA9IGFoY19wY2lfcmVhZF9jb25maWcocGNpLCBQQ0lSX0RFVlZFTkRPUiwgLypieXRlcyovMik7CkBAIC03MTAsNyArNzA5LDcgQEAKIH0KIAogaW50Ci1haGNfcGNpX2NvbmZpZyhzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHN0cnVjdCBhaGNfcGNpX2lkZW50aXR5ICplbnRyeSkKK2FoY19wY2lfY29uZmlnKHN0cnVjdCBhaGNfc29mdGMgKmFoYywgY29uc3Qgc3RydWN0IGFoY19wY2lfaWRlbnRpdHkgKmVudHJ5KQogewogCXVfaW50CSBjb21tYW5kOwogCXVfaW50CSBvdXJfaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X3Byb2MuYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfcHJvYy5jCmluZGV4IDk5ZTU0NDMuLmU5Mjk5MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfcHJvYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfcHJvYy5jCkBAIC01OCw3ICs1OCw3IEBACiAgKiBUYWJsZSBvZiBzeW5jcmF0ZXMgdGhhdCBkb24ndCBmb2xsb3cgdGhlICJkaXZpc2libGUgYnkgNCIKICAqIHJ1bGUuIFRoaXMgdGFibGUgd2lsbCBiZSBleHBhbmRlZCBpbiBmdXR1cmUgU0NTSSBzcGVjcy4KICAqLwotc3RhdGljIHN0cnVjdCB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAl1X2ludCBwZXJpb2RfZmFjdG9yOwogCXVfaW50IHBlcmlvZDsJLyogaW4gMTAwdGhzIG9mIG5zICovCiB9IHNjc2lfc3luY3JhdGVzW10gPSB7CkBAIC0xMzcsNyArMTM3LDcgQEAKIAlyZXR1cm4gKGxlbik7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBhaGNfZm9ybWF0X3RyYW5zaW5mbyhzdHJ1Y3QgaW5mb19zdHIgKmluZm8sIHN0cnVjdCBhaGNfdHJhbnNpbmZvICp0aW5mbykKIHsKIAl1X2ludCBzcGVlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfcmVnX3ByaW50LmNfc2hpcHBlZCBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfcmVnX3ByaW50LmNfc2hpcHBlZAppbmRleCA4OGJmZDc2Li4zMDlhNTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X3JlZ19wcmludC5jX3NoaXBwZWQKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9yZWdfcHJpbnQuY19zaGlwcGVkCkBAIC04LDcgKzgsNyBAQAogCiAjaW5jbHVkZSAiYWljN3h4eF9vc20uaCIKIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBTQ1NJU0VRX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNDU0lTRVFfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJTQ1NJUlNUTyIsCQkweDAxLCAweDAxIH0sCiAJeyAiRU5BVVRPQVROUCIsCQkweDAyLCAweDAyIH0sCiAJeyAiRU5BVVRPQVROSSIsCQkweDA0LCAweDA0IH0sCkBAIC0yNiw3ICsyNiw3IEBACiAJICAgIDB4MDAsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU1hGUkNUTDBfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU1hGUkNUTDBfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJDTFJDSE4iLAkJMHgwMiwgMHgwMiB9LAogCXsgIlNDQU1FTiIsCQkweDA0LCAweDA0IH0sCiAJeyAiU1BJT0VOIiwJCTB4MDgsIDB4MDggfSwKQEAgLTQzLDcgKzQzLDcgQEAKIAkgICAgMHgwMSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBTWEZSQ1RMMV9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBTWEZSQ1RMMV9wYXJzZV90YWJsZVtdID0gewogCXsgIlNUUFdFTiIsCQkweDAxLCAweDAxIH0sCiAJeyAiQUNUTkVHRU4iLAkJMHgwMiwgMHgwMiB9LAogCXsgIkVOU1RJTUVSIiwJCTB4MDQsIDB4MDQgfSwKQEAgLTYwLDcgKzYwLDcgQEAKIAkgICAgMHgwMiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBTQ1NJU0lHT19wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBTQ1NJU0lHT19wYXJzZV90YWJsZVtdID0gewogCXsgIkFDS08iLAkJMHgwMSwgMHgwMSB9LAogCXsgIlJFUU8iLAkJMHgwMiwgMHgwMiB9LAogCXsgIkJTWU8iLAkJMHgwNCwgMHgwNCB9LApAQCAtODUsNyArODUsNyBAQAogCSAgICAweDAzLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNDU0lTSUdJX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNDU0lTSUdJX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiQUNLSSIsCQkweDAxLCAweDAxIH0sCiAJeyAiUkVRSSIsCQkweDAyLCAweDAyIH0sCiAJeyAiQlNZSSIsCQkweDA0LCAweDA0IH0sCkBAIC0xMTIsNyArMTEyLDcgQEAKIAkgICAgMHgwMywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBTQ1NJUkFURV9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBTQ1NJUkFURV9wYXJzZV90YWJsZVtdID0gewogCXsgIlNJTkdMRV9FREdFIiwJMHgxMCwgMHgxMCB9LAogCXsgIkVOQUJMRV9DUkMiLAkJMHg0MCwgMHg0MCB9LAogCXsgIldJREVYRkVSIiwJCTB4ODAsIDB4ODAgfSwKQEAgLTEyOCw3ICsxMjgsNyBAQAogCSAgICAweDA0LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNDU0lJRF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBTQ1NJSURfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJUV0lOX0NITkxCIiwJCTB4ODAsIDB4ODAgfSwKIAl7ICJPSUQiLAkJMHgwZiwgMHgwZiB9LAogCXsgIlRXSU5fVElEIiwJCTB4NzAsIDB4NzAgfSwKQEAgLTE1MSwyMCArMTUxLDEzIEBACiB9CiAKIGludAotYWhjX3Njc2lkYXRoX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NTSURBVEgiLAotCSAgICAweDA3LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKIGFoY19zdGNudF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCiB7CiAJcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlNUQ05UIiwKIAkgICAgMHgwOCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBPUFRJT05NT0RFX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IE9QVElPTk1PREVfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJESVNfTVNHSU5fRFVBTEVER0UiLAkweDAxLCAweDAxIH0sCiAJeyAiQVVUT19NU0dPVVRfREUiLAkweDAyLCAweDAyIH0sCiAJeyAiU0NTSURBVExfSU1HRU4iLAkweDA0LCAweDA0IH0sCkBAIC0xOTAsNyArMTgzLDcgQEAKIAkgICAgMHgwYSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBDTFJTSU5UMF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBDTFJTSU5UMF9wYXJzZV90YWJsZVtdID0gewogCXsgIkNMUlNQSU9SRFkiLAkJMHgwMiwgMHgwMiB9LAogCXsgIkNMUlNXUkFQIiwJCTB4MDgsIDB4MDggfSwKIAl7ICJDTFJJT0VSUiIsCQkweDA4LCAweDA4IH0sCkBAIC0yMDYsNyArMTk5LDcgQEAKIAkgICAgMHgwYiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBTU1RBVDBfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU1NUQVQwX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiRE1BRE9ORSIsCQkweDAxLCAweDAxIH0sCiAJeyAiU1BJT1JEWSIsCQkweDAyLCAweDAyIH0sCiAJeyAiU0RPTkUiLAkJMHgwNCwgMHgwNCB9LApAQCAtMjI1LDcgKzIxOCw3IEBACiAJICAgIDB4MGIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgQ0xSU0lOVDFfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgQ0xSU0lOVDFfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJDTFJSRVFJTklUIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJDTFJQSEFTRUNIRyIsCTB4MDIsIDB4MDIgfSwKIAl7ICJDTFJTQ1NJUEVSUiIsCTB4MDQsIDB4MDQgfSwKQEAgLTI0Miw3ICsyMzUsNyBAQAogCSAgICAweDBjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNTVEFUMV9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBTU1RBVDFfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJSRVFJTklUIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJQSEFTRUNIRyIsCQkweDAyLCAweDAyIH0sCiAJeyAiU0NTSVBFUlIiLAkJMHgwNCwgMHgwNCB9LApAQCAtMjYwLDcgKzI1Myw3IEBACiAJICAgIDB4MGMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU1NUQVQyX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNTVEFUMl9wYXJzZV90YWJsZVtdID0gewogCXsgIkRVQUxfRURHRV9FUlIiLAkweDAxLCAweDAxIH0sCiAJeyAiQ1JDUkVRRVJSIiwJCTB4MDIsIDB4MDIgfSwKIAl7ICJDUkNFTkRFUlIiLAkJMHgwNCwgMHgwNCB9LApAQCAtMjc4LDcgKzI3MSw3IEBACiAJICAgIDB4MGQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU1NUQVQzX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNTVEFUM19wYXJzZV90YWJsZVtdID0gewogCXsgIk9GRkNOVCIsCQkweDBmLCAweDBmIH0sCiAJeyAiVTJPRkZDTlQiLAkJMHg3ZiwgMHg3ZiB9LAogCXsgIlNDU0lDTlQiLAkJMHhmMCwgMHhmMCB9CkBAIC0yOTEsNyArMjg0LDcgQEAKIAkgICAgMHgwZSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBTQ1NJSURfVUxUUkEyX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNDU0lJRF9VTFRSQTJfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJPSUQiLAkJMHgwZiwgMHgwZiB9LAogCXsgIlRJRCIsCQkweGYwLCAweGYwIH0KIH07CkBAIC0zMDMsNyArMjk2LDcgQEAKIAkgICAgMHgwZiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBTSU1PREUwX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNJTU9ERTBfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJFTkRNQURPTkUiLAkJMHgwMSwgMHgwMSB9LAogCXsgIkVOU1BJT1JEWSIsCQkweDAyLCAweDAyIH0sCiAJeyAiRU5TRE9ORSIsCQkweDA0LCAweDA0IH0sCkBAIC0zMjEsNyArMzE0LDcgQEAKIAkgICAgMHgxMCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBTSU1PREUxX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNJTU9ERTFfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJFTlJFUUlOSVQiLAkJMHgwMSwgMHgwMSB9LAogCXsgIkVOUEhBU0VDSEciLAkJMHgwMiwgMHgwMiB9LAogCXsgIkVOU0NTSVBFUlIiLAkJMHgwNCwgMHgwNCB9LApAQCAtMzQ3LDMzICszNDAsMTMgQEAKIH0KIAogaW50Ci1haGNfc2NzaWJ1c2hfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJTQ1NJQlVTSCIsCi0JICAgIDB4MTMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU1hGUkNUTDJfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJDTURETUFFTiIsCQkweDA4LCAweDA4IH0sCi0JeyAiQVVUT1JTVERJUyIsCQkweDEwLCAweDEwIH0sCi0JeyAiQVNZTkNfU0VUVVAiLAkweDA3LCAweDA3IH0KLX07Ci0KLWludAotYWhjX3N4ZnJjdGwyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihTWEZSQ1RMMl9wYXJzZV90YWJsZSwgMywgIlNYRlJDVEwyIiwKLQkgICAgMHgxMywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50CiBhaGNfc2hhZGRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKIHsKIAlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0hBRERSIiwKIAkgICAgMHgxNCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBTRUxUSU1FUl9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBTRUxUSU1FUl9wYXJzZV90YWJsZVtdID0gewogCXsgIlNUQUdFMSIsCQkweDAxLCAweDAxIH0sCiAJeyAiU1RBR0UyIiwJCTB4MDIsIDB4MDIgfSwKIAl7ICJTVEFHRTMiLAkJMHgwNCwgMHgwNCB9LApAQCAtMzg5LDcgKzM2Miw3IEBACiAJICAgIDB4MTgsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU0VMSURfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU0VMSURfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJPTkVCSVQiLAkJMHgwOCwgMHgwOCB9LAogCXsgIlNFTElEX01BU0siLAkJMHhmMCwgMHhmMCB9CiB9OwpAQCAtNDAxLDIxICszNzQsNiBAQAogCSAgICAweDE5LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNDQU1DVExfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJERkxUVElEIiwJCTB4MTAsIDB4MTAgfSwKLQl7ICJBTFRTVElNIiwJCTB4MjAsIDB4MjAgfSwKLQl7ICJDTFJTQ0FNU0VMSUQiLAkweDQwLCAweDQwIH0sCi0JeyAiRU5TQ0FNU0VMTyIsCQkweDgwLCAweDgwIH0sCi0JeyAiU0NBTUxWTCIsCQkweDAzLCAweDAzIH0KLX07Ci0KLWludAotYWhjX3NjYW1jdGxfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKFNDQU1DVExfcGFyc2VfdGFibGUsIDUsICJTQ0FNQ1RMIiwKLQkgICAgMHgxYSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQogaW50CiBhaGNfdGFyZ2lkX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKIHsKQEAgLTQyMyw3ICszODEsNyBAQAogCSAgICAweDFiLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNQSU9DQVBfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU1BJT0NBUF9wYXJzZV90YWJsZVtdID0gewogCXsgIlNTUElPQ1BTIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJST00iLAkJMHgwMiwgMHgwMiB9LAogCXsgIkVFUFJPTSIsCQkweDA0LCAweDA0IH0sCkBAIC00NDEsNyArMzk5LDcgQEAKIAkgICAgMHgxYiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBCUkRDVExfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgQlJEQ1RMX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiQlJEQ1RMMCIsCQkweDAxLCAweDAxIH0sCiAJeyAiQlJEU1RCX1VMVFJBMiIsCTB4MDEsIDB4MDEgfSwKIAl7ICJCUkRDVEwxIiwJCTB4MDIsIDB4MDIgfSwKQEAgLTQ2NCw3ICs0MjIsNyBAQAogCSAgICAweDFkLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNFRUNUTF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBTRUVDVExfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJTRUVESSIsCQkweDAxLCAweDAxIH0sCiAJeyAiU0VFRE8iLAkJMHgwMiwgMHgwMiB9LAogCXsgIlNFRUNLIiwJCTB4MDQsIDB4MDQgfSwKQEAgLTQ4Miw3ICs0NDAsNyBAQAogCSAgICAweDFlLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNCTEtDVExfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU0JMS0NUTF9wYXJzZV90YWJsZVtdID0gewogCXsgIlhDVlIiLAkJMHgwMSwgMHgwMSB9LAogCXsgIlNFTFdJREUiLAkJMHgwMiwgMHgwMiB9LAogCXsgIkVOQUIyMCIsCQkweDA0LCAweDA0IH0sCkBAIC01MjIsMTMgKzQ4MCw2IEBACiB9CiAKIGludAotYWhjX2NtZHNpemVfdGFibGVfdGFpbF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkNNRFNJWkVfVEFCTEVfVEFJTCIsCi0JICAgIDB4MzQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAogYWhjX213aV9yZXNpZHVhbF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCiB7CiAJcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIk1XSV9SRVNJRFVBTCIsCkBAIC01NDksNyArNTAwLDcgQEAKIAkgICAgMHgzYSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBETUFQQVJBTVNfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgRE1BUEFSQU1TX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiRklGT1JFU0VUIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJGSUZPRkxVU0giLAkJMHgwMiwgMHgwMiB9LAogCXsgIkRJUkVDVElPTiIsCQkweDA0LCAweDA0IH0sCkBAIC01NjksNyArNTIwLDcgQEAKIAkgICAgMHgzYiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBTRVFfRkxBR1NfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU0VRX0ZMQUdTX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiTk9fRElTQ09OTkVDVCIsCTB4MDEsIDB4MDEgfSwKIAl7ICJTUEhBU0VfUEVORElORyIsCTB4MDIsIDB4MDIgfSwKIAl7ICJEUEhBU0VfUEVORElORyIsCTB4MDQsIDB4MDQgfSwKQEAgLTYwMiw3ICs1NTMsNyBAQAogCSAgICAweDNlLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhjX3JlZ19wYXJzZV9lbnRyeV90IExBU1RQSEFTRV9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBMQVNUUEhBU0VfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJNU0dJIiwJCTB4MjAsIDB4MjAgfSwKIAl7ICJJT0kiLAkJMHg0MCwgMHg0MCB9LAogCXsgIkNESSIsCQkweDgwLCAweDgwIH0sCkBAIC02NDUsMTMgKzU5Niw2IEBACiB9CiAKIGludAotYWhjX2NvbXBsZXRlX3NjYmhfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKE5VTEwsIDAsICJDT01QTEVURV9TQ0JIIiwKLQkgICAgMHg0MywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotaW50CiBhaGNfaHNjYl9hZGRyX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKIHsKIAlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiSFNDQl9BRERSIiwKQEAgLTcwMCw3ICs2NDQsNyBAQAogCSAgICAweDUwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhjX3JlZ19wYXJzZV9lbnRyeV90IEFSR18xX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IEFSR18xX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiQ09OVF9UQVJHX1NFU1NJT04iLAkweDAyLCAweDAyIH0sCiAJeyAiQ09OVF9NU0dfTE9PUCIsCTB4MDQsIDB4MDQgfSwKIAl7ICJFWElUX01TR19MT09QIiwJMHgwOCwgMHgwOCB9LApAQCAtNzMxLDcgKzY3NSw3IEBACiAJICAgIDB4NTMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU0NTSVNFUV9URU1QTEFURV9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBTQ1NJU0VRX1RFTVBMQVRFX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiRU5BVVRPQVROUCIsCQkweDAyLCAweDAyIH0sCiAJeyAiRU5BVVRPQVROSSIsCQkweDA0LCAweDA0IH0sCiAJeyAiRU5BVVRPQVROTyIsCQkweDA4LCAweDA4IH0sCkBAIC03NDcsNyArNjkxLDcgQEAKIAkgICAgMHg1NCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBIQV8yNzRfQklPU0dMT0JBTF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBIQV8yNzRfQklPU0dMT0JBTF9wYXJzZV90YWJsZVtdID0gewogCXsgIkhBXzI3NF9FWFRFTkRFRF9UUkFOUyIsMHgwMSwgMHgwMSB9CiB9OwogCkBAIC03NTgsNyArNzAyLDcgQEAKIAkgICAgMHg1NiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBTRVFfRkxBR1MyX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNFUV9GTEFHUzJfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJTQ0JfRE1BIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJUQVJHRVRfTVNHX1BFTkRJTkciLAkweDAyLCAweDAyIH0KIH07CkBAIC03NzAsNyArNzE0LDcgQEAKIAkgICAgMHg1NywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBTQ1NJQ09ORl9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBTQ1NJQ09ORl9wYXJzZV90YWJsZVtdID0gewogCXsgIkVOU1BDSEsiLAkJMHgyMCwgMHgyMCB9LAogCXsgIlJFU0VUX1NDU0kiLAkJMHg0MCwgMHg0MCB9LAogCXsgIlRFUk1fRU5CIiwJCTB4ODAsIDB4ODAgfSwKQEAgLTc4NSw3ICs3MjksNyBAQAogCSAgICAweDVhLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhjX3JlZ19wYXJzZV9lbnRyeV90IElOVERFRl9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBJTlRERUZfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJFREdFX1RSSUciLAkJMHg4MCwgMHg4MCB9LAogCXsgIlZFQ1RPUiIsCQkweDBmLCAweDBmIH0KIH07CkBAIC04MDQsNyArNzQ4LDcgQEAKIAkgICAgMHg1ZCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBIQV8yNzRfQklPU0NUUkxfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgSEFfMjc0X0JJT1NDVFJMX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiQ0hBTk5FTF9CX1BSSU1BUlkiLAkweDA4LCAweDA4IH0sCiAJeyAiQklPU01PREUiLAkJMHgzMCwgMHgzMCB9LAogCXsgIkJJT1NESVNBQkxFRCIsCTB4MzAsIDB4MzAgfQpAQCAtODE3LDcgKzc2MSw3IEBACiAJICAgIDB4NWYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU0VRQ1RMX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNFUUNUTF9wYXJzZV90YWJsZVtdID0gewogCXsgIkxPQURSQU0iLAkJMHgwMSwgMHgwMSB9LAogCXsgIlNFUVJFU0VUIiwJCTB4MDIsIDB4MDIgfSwKIAl7ICJTVEVQIiwJCTB4MDQsIDB4MDQgfSwKQEAgLTg0OSw3ICs3OTMsNyBAQAogCSAgICAweDYyLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNFUUFERFIxX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNFUUFERFIxX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiU0VRQUREUjFfTUFTSyIsCTB4MDEsIDB4MDEgfQogfTsKIApAQCAtOTAyLDcgKzg0Niw3IEBACiAJICAgIDB4NmEsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgRkxBR1NfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgRkxBR1NfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJDQVJSWSIsCQkweDAxLCAweDAxIH0sCiAJeyAiWkVSTyIsCQkweDAyLCAweDAyIH0KIH07CkBAIC05MjksMTMgKzg3Myw2IEBACiB9CiAKIGludAotYWhjX2Z1bmN0aW9uMV9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkZVTkNUSU9OMSIsCi0JICAgIDB4NmUsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAogYWhjX3N0YWNrX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKIHsKIAlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU1RBQ0siLApAQCAtOTU2LDE5ICs4OTMsNyBAQAogCSAgICAweDcwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhjX3JlZ19wYXJzZV9lbnRyeV90IEJDVExfcGFyc2VfdGFibGVbXSA9IHsKLQl7ICJFTkFCTEUiLAkJMHgwMSwgMHgwMSB9LAotCXsgIkFDRSIsCQkweDA4LCAweDA4IH0KLX07Ci0KLWludAotYWhjX2JjdGxfcHJpbnQodV9pbnQgcmVndmFsdWUsIHVfaW50ICpjdXJfY29sLCB1X2ludCB3cmFwKQotewotCXJldHVybiAoYWhjX3ByaW50X3JlZ2lzdGVyKEJDVExfcGFyc2VfdGFibGUsIDIsICJCQ1RMIiwKLQkgICAgMHg4NCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBEU0NPTU1BTkQwX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IERTQ09NTUFORDBfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJDSU9QQVJDS0VOIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJVU0NCU0laRTMyIiwJCTB4MDIsIDB4MDIgfSwKIAl7ICJSQU1QUyIsCQkweDA0LCAweDA0IH0sCkBAIC05ODYsNyArOTExLDcgQEAKIAkgICAgMHg4NCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBCVVNUSU1FX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IEJVU1RJTUVfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJCT04iLAkJMHgwZiwgMHgwZiB9LAogCXsgIkJPRkYiLAkJMHhmMCwgMHhmMCB9CiB9OwpAQCAtOTk4LDcgKzkyMyw3IEBACiAJICAgIDB4ODUsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgRFNDT01NQU5EMV9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBEU0NPTU1BTkQxX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiSEFERExEU0VMMCIsCQkweDAxLCAweDAxIH0sCiAJeyAiSEFERExEU0VMMSIsCQkweDAyLCAweDAyIH0sCiAJeyAiRFNMQVRUIiwJCTB4ZmMsIDB4ZmMgfQpAQCAtMTAxMSw3ICs5MzYsNyBAQAogCSAgICAweDg1LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhjX3JlZ19wYXJzZV9lbnRyeV90IEJVU1NQRF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBCVVNTUERfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJTVEJPTiIsCQkweDA3LCAweDA3IH0sCiAJeyAiU1RCT0ZGIiwJCTB4MzgsIDB4MzggfSwKIAl7ICJERlRIUlNIXzc1IiwJCTB4ODAsIDB4ODAgfSwKQEAgLTEwMjYsNyArOTUxLDcgQEAKIAkgICAgMHg4NiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBIU19NQUlMQk9YX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IEhTX01BSUxCT1hfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJTRVFfTUFJTEJPWCIsCTB4MGYsIDB4MGYgfSwKIAl7ICJIT1NUX1RRSU5QT1MiLAkweDgwLCAweDgwIH0sCiAJeyAiSE9TVF9NQUlMQk9YIiwJMHhmMCwgMHhmMCB9CkBAIC0xMDM5LDcgKzk2NCw3IEBACiAJICAgIDB4ODYsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgRFNQQ0lTVEFUVVNfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgRFNQQ0lTVEFUVVNfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJERlRIUlNIXzEwMCIsCTB4YzAsIDB4YzAgfQogfTsKIApAQCAtMTA1MCw3ICs5NzUsNyBAQAogCSAgICAweDg2LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhjX3JlZ19wYXJzZV9lbnRyeV90IEhDTlRSTF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBIQ05UUkxfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJDSElQUlNUIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJDSElQUlNUQUNLIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJJTlRFTiIsCQkweDAyLCAweDAyIH0sCkBAIC0xMDg4LDcgKzEwMTMsNyBAQAogCSAgICAweDkwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhjX3JlZ19wYXJzZV9lbnRyeV90IElOVFNUQVRfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgSU5UU1RBVF9wYXJzZV90YWJsZVtdID0gewogCXsgIlNFUUlOVCIsCQkweDAxLCAweDAxIH0sCiAJeyAiQ01EQ01QTFQiLAkJMHgwMiwgMHgwMiB9LAogCXsgIlNDU0lJTlQiLAkJMHgwNCwgMHgwNCB9LApAQCAtMTExOSw3ICsxMDQ0LDcgQEAKIAkgICAgMHg5MSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBDTFJJTlRfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgQ0xSSU5UX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiQ0xSU0VRSU5UIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJDTFJDTURJTlQiLAkJMHgwMiwgMHgwMiB9LAogCXsgIkNMUlNDU0lJTlQiLAkJMHgwNCwgMHgwNCB9LApAQCAtMTEzNCw3ICsxMDU5LDcgQEAKIAkgICAgMHg5MiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBFUlJPUl9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBFUlJPUl9wYXJzZV90YWJsZVtdID0gewogCXsgIklMTEhBRERSIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJJTExTQUREUiIsCQkweDAyLCAweDAyIH0sCiAJeyAiSUxMT1BDT0RFIiwJCTB4MDQsIDB4MDQgfSwKQEAgLTExNTIsNyArMTA3Nyw3IEBACiAJICAgIDB4OTIsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgREZDTlRSTF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBERkNOVFJMX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiRklGT1JFU0VUIiwJCTB4MDEsIDB4MDEgfSwKIAl7ICJGSUZPRkxVU0giLAkJMHgwMiwgMHgwMiB9LAogCXsgIkRJUkVDVElPTiIsCQkweDA0LCAweDA0IH0sCkBAIC0xMTcyLDcgKzEwOTcsNyBAQAogCSAgICAweDkzLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhjX3JlZ19wYXJzZV9lbnRyeV90IERGU1RBVFVTX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IERGU1RBVFVTX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiRklGT0VNUCIsCQkweDAxLCAweDAxIH0sCiAJeyAiRklGT0ZVTEwiLAkJMHgwMiwgMHgwMiB9LAogCXsgIkRGVEhSRVNIIiwJCTB4MDQsIDB4MDQgfSwKQEAgLTExOTgsMjAgKzExMjMsMTMgQEAKIH0KIAogaW50Ci1haGNfZGZyYWRkcl9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkRGUkFERFIiLAotCSAgICAweDk3LCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwotfQotCi1pbnQKIGFoY19kZmRhdF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCiB7CiAJcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIkRGREFUIiwKIAkgICAgMHg5OSwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBTQ0JDTlRfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU0NCQ05UX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiU0NCQVVUTyIsCQkweDgwLCAweDgwIH0sCiAJeyAiU0NCQ05UX01BU0siLAkweDFmLCAweDFmIH0KIH07CkBAIC0xMjMxLDIwICsxMTQ5LDEzIEBACiB9CiAKIGludAotYWhjX3FpbmNudF9wcmludCh1X2ludCByZWd2YWx1ZSwgdV9pbnQgKmN1cl9jb2wsIHVfaW50IHdyYXApCi17Ci0JcmV0dXJuIChhaGNfcHJpbnRfcmVnaXN0ZXIoTlVMTCwgMCwgIlFJTkNOVCIsCi0JICAgIDB4OWMsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLWludAogYWhjX3FvdXRmaWZvX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKIHsKIAlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiUU9VVEZJRk8iLAogCSAgICAweDlkLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhjX3JlZ19wYXJzZV9lbnRyeV90IENSQ0NPTlRST0wxX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IENSQ0NPTlRST0wxX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiVEFSR0NSQ0NOVEVOIiwJMHgwNCwgMHgwNCB9LAogCXsgIlRBUkdDUkNFTkRFTiIsCTB4MDgsIDB4MDggfSwKIAl7ICJDUkNSRVFDSEtFTiIsCTB4MTAsIDB4MTAgfSwKQEAgLTEyNjAsMTQgKzExNzEsNyBAQAogCSAgICAweDlkLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1pbnQKLWFoY19xb3V0Y250X3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiUU9VVENOVCIsCi0JICAgIDB4OWUsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7Ci19Ci0KLXN0YXRpYyBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU0NTSVBIQVNFX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNDU0lQSEFTRV9wYXJzZV90YWJsZVtdID0gewogCXsgIkRBVEFfT1VUX1BIQVNFIiwJMHgwMSwgMHgwMSB9LAogCXsgIkRBVEFfSU5fUEhBU0UiLAkweDAyLCAweDAyIH0sCiAJeyAiTVNHX09VVF9QSEFTRSIsCTB4MDQsIDB4MDQgfSwKQEAgLTEyODQsNyArMTE4OCw3IEBACiAJICAgIDB4OWUsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU0ZVTkNUX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNGVU5DVF9wYXJzZV90YWJsZVtdID0gewogCXsgIkFMVF9NT0RFIiwJCTB4ODAsIDB4ODAgfQogfTsKIApAQCAtMTM1MSw3ICsxMjU1LDcgQEAKIAkgICAgMHhhYywgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBTQ0JfREFUQUNOVF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBTQ0JfREFUQUNOVF9wYXJzZV90YWJsZVtdID0gewogCXsgIlNHX0xBU1RfU0VHIiwJMHg4MCwgMHg4MCB9LAogCXsgIlNHX0hJR0hfQUREUl9CSVRTIiwJMHg3ZiwgMHg3ZiB9CiB9OwpAQCAtMTM2Myw3ICsxMjY3LDcgQEAKIAkgICAgMHhiMCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBTQ0JfU0dQVFJfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU0NCX1NHUFRSX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiU0dfTElTVF9OVUxMIiwJMHgwMSwgMHgwMSB9LAogCXsgIlNHX0ZVTExfUkVTSUQiLAkweDAyLCAweDAyIH0sCiAJeyAiU0dfUkVTSURfVkFMSUQiLAkweDA0LCAweDA0IH0KQEAgLTEzNzYsNyArMTI4MCw3IEBACiAJICAgIDB4YjQsIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU0NCX0NPTlRST0xfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU0NCX0NPTlRST0xfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJESVNDT05ORUNURUQiLAkweDA0LCAweDA0IH0sCiAJeyAiVUxUUkFFTkIiLAkJMHgwOCwgMHgwOCB9LAogCXsgIk1LX01FU1NBR0UiLAkJMHgxMCwgMHgxMCB9LApAQCAtMTM5NCw3ICsxMjk4LDcgQEAKIAkgICAgMHhiOCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBTQ0JfU0NTSUlEX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNDQl9TQ1NJSURfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJUV0lOX0NITkxCIiwJCTB4ODAsIDB4ODAgfSwKIAl7ICJPSUQiLAkJMHgwZiwgMHgwZiB9LAogCXsgIlRXSU5fVElEIiwJCTB4NzAsIDB4NzAgfSwKQEAgLTE0MDgsNyArMTMxMiw3IEBACiAJICAgIDB4YjksIHJlZ3ZhbHVlLCBjdXJfY29sLCB3cmFwKSk7CiB9CiAKLXN0YXRpYyBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU0NCX0xVTl9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBTQ0JfTFVOX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiU0NCX1hGRVJMRU5fT0REIiwJMHg4MCwgMHg4MCB9LAogCXsgIkxJRCIsCQkweDNmLCAweDNmIH0KIH07CkBAIC0xNDU1LDE0ICsxMzU5LDcgQEAKIAkgICAgMHhiZiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotaW50Ci1haGNfc2NiXzY0X3NwYXJlX3ByaW50KHVfaW50IHJlZ3ZhbHVlLCB1X2ludCAqY3VyX2NvbCwgdV9pbnQgd3JhcCkKLXsKLQlyZXR1cm4gKGFoY19wcmludF9yZWdpc3RlcihOVUxMLCAwLCAiU0NCXzY0X1NQQVJFIiwKLQkgICAgMHhjMCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKLX0KLQotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBTRUVDVExfMjg0MF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBTRUVDVExfMjg0MF9wYXJzZV90YWJsZVtdID0gewogCXsgIkRPXzI4NDAiLAkJMHgwMSwgMHgwMSB9LAogCXsgIkNLXzI4NDAiLAkJMHgwMiwgMHgwMiB9LAogCXsgIkNTXzI4NDAiLAkJMHgwNCwgMHgwNCB9CkBAIC0xNDc1LDcgKzEzNzIsNyBAQAogCSAgICAweGMwLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNUQVRVU18yODQwX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNUQVRVU18yODQwX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiRElfMjg0MCIsCQkweDAxLCAweDAxIH0sCiAJeyAiRUVQUk9NX1RGIiwJCTB4ODAsIDB4ODAgfSwKIAl7ICJBRFNFTCIsCQkweDFlLCAweDFlIH0sCkBAIC0xNTI0LDcgKzE0MjEsNyBAQAogCSAgICAweGVhLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhjX3JlZ19wYXJzZV9lbnRyeV90IENDU0dDVExfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgQ0NTR0NUTF9wYXJzZV90YWJsZVtdID0gewogCXsgIkNDU0dSRVNFVCIsCQkweDAxLCAweDAxIH0sCiAJeyAiU0dfRkVUQ0hfTkVFREVEIiwJMHgwMiwgMHgwMiB9LAogCXsgIkNDU0dFTiIsCQkweDA4LCAweDA4IH0sCkBAIC0xNTUyLDcgKzE0NDksNyBAQAogCSAgICAweGVkLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhjX3JlZ19wYXJzZV9lbnRyeV90IENDU0NCQ1RMX3BhcnNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3QgYWhjX3JlZ19wYXJzZV9lbnRyeV90IENDU0NCQ1RMX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiQ0NTQ0JSRVNFVCIsCQkweDAxLCAweDAxIH0sCiAJeyAiQ0NTQ0JESVIiLAkJMHgwNCwgMHgwNCB9LAogCXsgIkNDU0NCRU4iLAkJMHgwOCwgMHgwOCB9LApAQCAtMTYxMCw3ICsxNTA3LDcgQEAKIAkgICAgMHhmOCwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBRT0ZGX0NUTFNUQV9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBRT0ZGX0NUTFNUQV9wYXJzZV90YWJsZVtdID0gewogCXsgIlNEU0NCX1JPTExPVkVSIiwJMHgxMCwgMHgxMCB9LAogCXsgIlNOU0NCX1JPTExPVkVSIiwJMHgyMCwgMHgyMCB9LAogCXsgIlNDQl9BVkFJTCIsCQkweDQwLCAweDQwIH0sCkBAIC0xNjI1LDcgKzE1MjIsNyBAQAogCSAgICAweGZhLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhjX3JlZ19wYXJzZV9lbnRyeV90IERGRl9USFJTSF9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBERkZfVEhSU0hfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJSRF9ERlRIUlNIX01JTiIsCTB4MDAsIDB4MDAgfSwKIAl7ICJXUl9ERlRIUlNIX01JTiIsCTB4MDAsIDB4MDAgfSwKIAl7ICJSRF9ERlRIUlNIXzI1IiwJMHgwMSwgMHgwMSB9LApAQCAtMTY1Myw3ICsxNTUwLDcgQEAKIAkgICAgMHhmYiwgcmVndmFsdWUsIGN1cl9jb2wsIHdyYXApKTsKIH0KIAotc3RhdGljIGFoY19yZWdfcGFyc2VfZW50cnlfdCBTR19DQUNIRV9TSEFET1dfcGFyc2VfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBhaGNfcmVnX3BhcnNlX2VudHJ5X3QgU0dfQ0FDSEVfU0hBRE9XX3BhcnNlX3RhYmxlW10gPSB7CiAJeyAiTEFTVF9TRUdfRE9ORSIsCTB4MDEsIDB4MDEgfSwKIAl7ICJMQVNUX1NFRyIsCQkweDAyLCAweDAyIH0sCiAJeyAiU0dfQUREUl9NQVNLIiwJMHhmOCwgMHhmOCB9CkBAIC0xNjY2LDcgKzE1NjMsNyBAQAogCSAgICAweGZjLCByZWd2YWx1ZSwgY3VyX2NvbCwgd3JhcCkpOwogfQogCi1zdGF0aWMgYWhjX3JlZ19wYXJzZV9lbnRyeV90IFNHX0NBQ0hFX1BSRV9wYXJzZV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IGFoY19yZWdfcGFyc2VfZW50cnlfdCBTR19DQUNIRV9QUkVfcGFyc2VfdGFibGVbXSA9IHsKIAl7ICJMQVNUX1NFR19ET05FIiwJMHgwMSwgMHgwMSB9LAogCXsgIkxBU1RfU0VHIiwJCTB4MDIsIDB4MDIgfSwKIAl7ICJTR19BRERSX01BU0siLAkweGY4LCAweGY4IH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfc2VxLmhfc2hpcHBlZCBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfc2VxLmhfc2hpcHBlZAppbmRleCA0Y2VlMDg1Li4wN2U5M2ZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X3NlcS5oX3NoaXBwZWQKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9zZXEuaF9zaGlwcGVkCkBAIC01LDcgKzUsNyBAQAogICogJElkOiAvL2RlcG90L2FpYzd4eHgvYWljN3h4eC9haWM3eHh4LnNlcSM1OCAkCiAgKiAkSWQ6IC8vZGVwb3QvYWljN3h4eC9haWM3eHh4L2FpYzd4eHgucmVnIzQwICQKICAqLwotc3RhdGljIHVpbnQ4X3Qgc2VxcHJvZ1tdID0geworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc2VxcHJvZ1tdID0gewogCTB4YjIsIDB4MDAsIDB4MDAsIDB4MDgsCiAJMHhmNywgMHgxMSwgMHgyMiwgMHgwOCwKIAkweDAwLCAweDY1LCAweGVlLCAweDU5LApAQCAtMTA4MSw3ICsxMDgxLDcgQEAKIAlyZXR1cm4gKDApOwogfQogCi1zdGF0aWMgc3RydWN0IHBhdGNoIHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGF0Y2ggewogCWFoY19wYXRjaF9mdW5jX3QJCSpwYXRjaF9mdW5jOwogCXVpbnQzMl90CQkgYmVnaW4JCToxMCwKIAkJCQkgc2tpcF9pbnN0cgk6MTAsCkBAIC0xMjkxLDcgKzEyOTEsNyBAQAogCXsgYWhjX3BhdGNoNF9mdW5jLCA4NjUsIDEyLCAxIH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY3Mgeworc3RhdGljIGNvbnN0IHN0cnVjdCBjcyB7CiAJdWludDE2X3QJYmVnaW47CiAJdWludDE2X3QJZW5kOwogfSBjcml0aWNhbF9zZWN0aW9uc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbS5jCmluZGV4IDkyNDEwMjcuLmU0YTc3ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9haWNhc20uYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vYWljYXNtLmMKQEAgLTM2Miw3ICszNjIsNyBAQAogIiAqXG4iCiAiJXMgKi9cbiIsIHZlcnNpb25zKTsKIAotCWZwcmludGYob2ZpbGUsICJzdGF0aWMgdWludDhfdCBzZXFwcm9nW10gPSB7XG4iKTsKKwlmcHJpbnRmKG9maWxlLCAic3RhdGljIGNvbnN0IHVpbnQ4X3Qgc2VxcHJvZ1tdID0ge1xuIik7CiAJZm9yIChjdXJfaW5zdHIgPSBTVEFJTFFfRklSU1QoJnNlcV9wcm9ncmFtKTsKIAkgICAgIGN1cl9pbnN0ciAhPSBOVUxMOwogCSAgICAgY3VyX2luc3RyID0gU1RBSUxRX05FWFQoY3VyX2luc3RyLCBsaW5rcykpIHsKQEAgLTQxNSw3ICs0MTUsNyBAQAogCX0KIAogCWZwcmludGYob2ZpbGUsCi0ic3RhdGljIHN0cnVjdCBwYXRjaCB7XG4iCisic3RhdGljIGNvbnN0IHN0cnVjdCBwYXRjaCB7XG4iCiAiCSVzcGF0Y2hfZnVuY190CQkqcGF0Y2hfZnVuYztcbiIKICIJdWludDMyX3QJCSBiZWdpbgkJOjEwLFxuIgogIgkJCQkgc2tpcF9pbnN0cgk6MTAsXG4iCkBAIC00MzUsNyArNDM1LDcgQEAKIAlmcHJpbnRmKG9maWxlLCAiXG59O1xuXG4iKTsKIAogCWZwcmludGYob2ZpbGUsCi0ic3RhdGljIHN0cnVjdCBjcyB7XG4iCisic3RhdGljIGNvbnN0IHN0cnVjdCBjcyB7XG4iCiAiCXVpbnQxNl90CWJlZ2luO1xuIgogIgl1aW50MTZfdAllbmQ7XG4iCiAifSBjcml0aWNhbF9zZWN0aW9uc1tdID0ge1xuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vYWljYXNtX2dyYW0ueSBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9haWNhc21fZ3JhbS55CmluZGV4IDcwMmUyZGIuLjgxYmU2YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9haWNhc21fZ3JhbS55CisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9haWNhc21fZ3JhbS55CkBAIC0xMDEsMTEgKzEwMSwxMiBAQAogCQkJICAgZXhwcmVzc2lvbl90ICppbW1lZCwgc3ltYm9sX3JlZl90ICphZGRyZXNzKTsKIHN0YXRpYyB2b2lkIHRlc3RfcmVhZGFibGVfc3ltYm9sKHN5bWJvbF90ICpzeW1ib2wpOwogc3RhdGljIHZvaWQgdGVzdF93cml0YWJsZV9zeW1ib2woc3ltYm9sX3QgKnN5bWJvbCk7Ci1zdGF0aWMgdm9pZCB0eXBlX2NoZWNrKHN5bWJvbF90ICpzeW1ib2wsIGV4cHJlc3Npb25fdCAqZXhwcmVzc2lvbiwgaW50IGFuZF9vcCk7CitzdGF0aWMgdm9pZCB0eXBlX2NoZWNrKHN5bWJvbF9yZWZfdCAqc3ltLCBleHByZXNzaW9uX3QgKmV4cHJlc3Npb24sIGludCBhbmRfb3ApOwogc3RhdGljIHZvaWQgbWFrZV9leHByZXNzaW9uKGV4cHJlc3Npb25fdCAqaW1tZWQsIGludCB2YWx1ZSk7CiBzdGF0aWMgdm9pZCBhZGRfY29uZGl0aW9uYWwoc3ltYm9sX3QgKnN5bWJvbCk7CiBzdGF0aWMgdm9pZCBhZGRfdmVyc2lvbihjb25zdCBjaGFyICp2ZXJzdHJpbmcpOwogc3RhdGljIGludCAgaXNfZG93bmxvYWRfY29uc3QoZXhwcmVzc2lvbl90ICppbW1lZCk7CitzdGF0aWMgaW50ICBpc19sb2NhdGlvbl9hZGRyZXNzKHN5bWJvbF90ICpzeW1ib2wpOwogdm9pZCB5eWVycm9yKGNvbnN0IGNoYXIgKnN0cmluZyk7CiAKICNkZWZpbmUgU1JBTV9TWU1OQU1FICJTUkFNX0JBU0UiCkBAIC0xNDIsNiArMTQzLDggQEAKIAogJXRva2VuIDx2YWx1ZT4gVF9BRERSRVNTCiAKKyV0b2tlbiBUX0NPVU5UCisKICV0b2tlbiBUX0FDQ0VTU19NT0RFCiAKICV0b2tlbiBUX01PREVTCkBAIC0xOTIsMTAgKzE5NSwxMCBAQAogCiAldG9rZW4gPHZhbHVlPiBUX09SCiAKLS8qIDE2IGJpdCBleHRlbnNpb25zICovCi0ldG9rZW4gPHZhbHVlPiBUX09SMTYgVF9BTkQxNiBUX1hPUjE2IFRfQUREMTYKLSV0b2tlbiA8dmFsdWU+IFRfQURDMTYgVF9NVkkxNiBUX1RFU1QxNiBUX0NNUDE2IFRfQ01QWENIRwotCisvKiAxNiBiaXQgZXh0ZW5zaW9ucywgbm90IGltcGxlbWVudGVkCisgKiAldG9rZW4gPHZhbHVlPiBUX09SMTYgVF9BTkQxNiBUX1hPUjE2IFRfQUREMTYKKyAqICV0b2tlbiA8dmFsdWU+IFRfQURDMTYgVF9NVkkxNiBUX1RFU1QxNiBUX0NNUDE2IFRfQ01QWENIRworICovCiAldG9rZW4gVF9SRVQKIAogJXRva2VuIFRfTk9QCkBAIC0yMTQsNyArMjE3LDcgQEAKIAogJXR5cGUgPGV4cHJlc3Npb24+IGV4cHJlc3Npb24gaW1tZWRpYXRlIGltbWVkaWF0ZV9vcl9hCiAKLSV0eXBlIDx2YWx1ZT4gZXhwb3J0IHJldCBmMV9vcGNvZGUgZjJfb3Bjb2RlIGY0X29wY29kZSBqbXBfamNfam5jX2NhbGwganpfam56IGplX2puZQorJXR5cGUgPHZhbHVlPiBleHBvcnQgcmV0IGYxX29wY29kZSBmMl9vcGNvZGUgam1wX2pjX2puY19jYWxsIGp6X2pueiBqZV9qbmUKIAogJXR5cGUgPHZhbHVlPiBtb2RlX3ZhbHVlIG1vZGVfbGlzdCBtYWNyb19hcmdsaXN0CiAKQEAgLTMxMywxMyArMzE2LDEzIEBACiAJCQkJc3RvcCgiUmVnaXN0ZXIgbXVsdGlwbHkgZGVmaW5lZCIsIEVYX0RBVEFFUlIpOwogCQkJCS8qIE5PVFJFQUNIRUQgKi8KIAkJCX0KLQkJCWN1cl9zeW1ib2wgPSAkMTsgCisJCQljdXJfc3ltYm9sID0gJDE7CiAJCQljdXJfc3ltYm9sLT50eXBlID0gY3VyX3N5bXR5cGU7CiAJCQlpbml0aWFsaXplX3N5bWJvbChjdXJfc3ltYm9sKTsKIAkJfQogCQlyZWdfYXR0cmlidXRlX2xpc3QKIAknfScKLQkJeyAgICAgICAgICAgICAgICAgICAgCisJCXsKIAkJCS8qCiAJCQkgKiBEZWZhdWx0IHRvIGFsbG93aW5nIGV2ZXJ5dGhpbmcgaW4gZm9yIHJlZ2lzdGVycwogCQkJICogd2l0aCBubyBiaXQgb3IgbWFzayBkZWZpbml0aW9ucy4KQEAgLTM0OSw5ICszNTIsMTAgQEAKIHwJcmVnX2F0dHJpYnV0ZV9saXN0IHJlZ19hdHRyaWJ1dGUKIDsKIAotcmVnX2F0dHJpYnV0ZToJCQorcmVnX2F0dHJpYnV0ZToKIAlyZWdfYWRkcmVzcwogfAlzaXplCit8CWNvdW50CiB8CWFjY2Vzc19tb2RlCiB8CW1vZGVzCiB8CWZpZWxkX2RlZm4KQEAgLTM5Miw2ICszOTYsMTMgQEAKIAl9CiA7CiAKK2NvdW50OgorCVRfQ09VTlQgVF9OVU1CRVIKKwl7CisJCWN1cl9zeW1ib2wtPmNvdW50ICs9ICQyOworCX0KKzsKKwogYWNjZXNzX21vZGU6CiAJVF9BQ0NFU1NfTU9ERSBUX01PREUKIAl7CkBAIC02NDEsMTQgKzY1MiwxNCBAQAogCQkJICAgICAgICYoJDEucmVmZXJlbmNlZF9zeW1zKSwKIAkJCSAgICAgICAmKCQzLnJlZmVyZW5jZWRfc3ltcykpOwogCX0KLXwgCWV4cHJlc3Npb24gVF9FWFBSX0xTSElGVCBleHByZXNzaW9uCit8CWV4cHJlc3Npb24gVF9FWFBSX0xTSElGVCBleHByZXNzaW9uCiAJewogCQkkJC52YWx1ZSA9ICQxLnZhbHVlIDw8ICQzLnZhbHVlOwogCQlzeW1saXN0X21lcmdlKCYkJC5yZWZlcmVuY2VkX3N5bXMsCiAJCQkgICAgICAgJiQxLnJlZmVyZW5jZWRfc3ltcywKIAkJCSAgICAgICAmJDMucmVmZXJlbmNlZF9zeW1zKTsKIAl9Ci18IAlleHByZXNzaW9uIFRfRVhQUl9SU0hJRlQgZXhwcmVzc2lvbgorfAlleHByZXNzaW9uIFRfRVhQUl9SU0hJRlQgZXhwcmVzc2lvbgogCXsKIAkJJCQudmFsdWUgPSAkMS52YWx1ZSA+PiAkMy52YWx1ZTsKIAkJc3ltbGlzdF9tZXJnZSgmJCQucmVmZXJlbmNlZF9zeW1zLApAQCAtNzE0LDcgKzcyNSw3IEBACiA7CiAKIGNvbnN0YW50OgotCVRfQ09OU1QgVF9TWU1CT0wgZXhwcmVzc2lvbiAKKwlUX0NPTlNUIFRfU1lNQk9MIGV4cHJlc3Npb24KIAl7CiAJCWlmICgkMi0+dHlwZSAhPSBVTklOSVRJQUxJWkVEKSB7CiAJCQlzdG9wKCJSZS1kZWZpbml0aW9uIG9mIHN5bWJvbCBhcyBhIGNvbnN0YW50IiwKQEAgLTgwMCw2ICs4MTEsNyBAQAogCQkJY3VyX3N5bXR5cGUgPSBTUkFNTE9DOwogCQkJY3VyX3N5bWJvbC0+dHlwZSA9IFNSQU1MT0M7CiAJCQlpbml0aWFsaXplX3N5bWJvbChjdXJfc3ltYm9sKTsKKwkJCWN1cl9zeW1ib2wtPmNvdW50ICs9IDE7CiAJCX0KIAkJcmVnX2FkZHJlc3MKIAkJewpAQCAtODMxLDYgKzg0Myw3IEBACiAJCQlpbml0aWFsaXplX3N5bWJvbChjdXJfc3ltYm9sKTsKIAkJCS8qIDY0IGJ5dGVzIG9mIFNDQiBzcGFjZSAqLwogCQkJY3VyX3N5bWJvbC0+aW5mby5yaW5mby0+c2l6ZSA9IDY0OworCQkJY3VyX3N5bWJvbC0+Y291bnQgKz0gMTsKIAkJfQogCQlyZWdfYWRkcmVzcwogCQl7CkBAIC0xMzExLDE0ICsxMzI0LDE4IEBACiB8CVRfUk9SIHsgJCQgPSBBSUNfT1BfUk9SOyB9CiA7CiAKLWY0X29wY29kZToKLQlUX09SMTYJeyAkJCA9IEFJQ19PUF9PUjE2OyB9Ci18CVRfQU5EMTYgeyAkJCA9IEFJQ19PUF9BTkQxNjsgfQotfAlUX1hPUjE2IHsgJCQgPSBBSUNfT1BfWE9SMTY7IH0KLXwJVF9BREQxNiB7ICQkID0gQUlDX09QX0FERDE2OyB9Ci18CVRfQURDMTYgeyAkJCA9IEFJQ19PUF9BREMxNjsgfQotfAlUX01WSTE2IHsgJCQgPSBBSUNfT1BfTVZJMTY7IH0KLTsKKy8qCisgKiAxNmJpdCBvcGNvZGVzLCBub3QgdXNlZAorICoKKyAqZjRfb3Bjb2RlOgorICoJVF9PUjE2CXsgJCQgPSBBSUNfT1BfT1IxNjsgfQorICp8CVRfQU5EMTYgeyAkJCA9IEFJQ19PUF9BTkQxNjsgfQorICp8CVRfWE9SMTYgeyAkJCA9IEFJQ19PUF9YT1IxNjsgfQorICp8CVRfQUREMTYgeyAkJCA9IEFJQ19PUF9BREQxNjsgfQorICp8CVRfQURDMTYgeyAkJCA9IEFJQ19PUF9BREMxNjsgfQorICp8CVRfTVZJMTYgeyAkJCA9IEFJQ19PUF9NVkkxNjsgfQorICo7CisgKi8KIAogY29kZToKIAlmMl9vcGNvZGUgZGVzdGluYXRpb24gJywnIGV4cHJlc3Npb24gb3B0X3NvdXJjZSByZXQgJzsnCkBAIC0xMzU3LDYgKzEzNzQsNyBAQAogY29kZToKIAlUX09SIHJlZ19zeW1ib2wgJywnIGltbWVkaWF0ZSBqbXBfamNfam5jX2NhbGwgYWRkcmVzcyAnOycKIAl7CisJCXR5cGVfY2hlY2soJiQyLCAmJDQsIEFJQ19PUF9PUik7CiAJCWZvcm1hdF8zX2luc3RyKCQ1LCAmJDIsICYkNCwgJiQ2KTsKIAl9CiA7CkBAIC0xNTI4LDcgKzE1NDYsNyBAQAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBjb25kX2luZm8pKTsKIAkJYnJlYWs7CiAJY2FzZSBNQUNSTzoKLQkJc3ltYm9sLT5pbmZvLm1hY3JvaW5mbyA9IAorCQlzeW1ib2wtPmluZm8ubWFjcm9pbmZvID0KIAkJICAgIChzdHJ1Y3QgbWFjcm9faW5mbyAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IG1hY3JvX2luZm8pKTsKIAkJaWYgKHN5bWJvbC0+aW5mby5tYWNyb2luZm8gPT0gTlVMTCkgewogCQkJc3RvcCgiQ2FuJ3QgY3JlYXRlIG1hY3JvIGluZm8iLCBFWF9TT0ZUV0FSRSk7CkBAIC0xNTUyLDcgKzE1NzAsNiBAQAogCXN0cnVjdCBtYWNyb19hcmcgKm1hcmc7CiAJaW50IGk7CiAJaW50IHJldHZhbDsKLQkJCiAKIAlpZiAoY3VyX3N5bWJvbCA9PSBOVUxMIHx8IGN1cl9zeW1ib2wtPnR5cGUgIT0gTUFDUk8pIHsKIAkJc3RvcCgiSW52YWxpZCBjdXJyZW50IHN5bWJvbCBmb3IgYWRkaW5nIG1hY3JvIGFyZyIsCkBAIC0xNjMzLDggKzE2NTAsMTAgQEAKIAl0ZXN0X3dyaXRhYmxlX3N5bWJvbChkZXN0LT5zeW1ib2wpOwogCXRlc3RfcmVhZGFibGVfc3ltYm9sKHNyYy0+c3ltYm9sKTsKIAotCS8qIEVuc3VyZSB0aGF0IGltbWVkaWF0ZSBtYWtlcyBzZW5zZSBmb3IgdGhpcyBkZXN0aW5hdGlvbiAqLwotCXR5cGVfY2hlY2soZGVzdC0+c3ltYm9sLCBpbW1lZCwgb3Bjb2RlKTsKKwlpZiAoIWlzX2xvY2F0aW9uX2FkZHJlc3MoZGVzdC0+c3ltYm9sKSkgeworCQkvKiBFbnN1cmUgdGhhdCBpbW1lZGlhdGUgbWFrZXMgc2Vuc2UgZm9yIHRoaXMgZGVzdGluYXRpb24gKi8KKwkJdHlwZV9jaGVjayhkZXN0LCBpbW1lZCwgb3Bjb2RlKTsKKwl9CiAKIAkvKiBBbGxvY2F0ZSBzZXF1ZW5jZXIgc3BhY2UgZm9yIHRoZSBpbnN0cnVjdGlvbiBhbmQgZmlsbCBpdCBvdXQgKi8KIAlpbnN0ciA9IHNlcV9hbGxvYygpOwpAQCAtMTc2Niw5ICsxNzg1LDYgQEAKIAkvKiBUZXN0IHJlZ2lzdGVyIHBlcm1pc3Npb25zICovCiAJdGVzdF9yZWFkYWJsZV9zeW1ib2woc3JjLT5zeW1ib2wpOwogCi0JLyogRW5zdXJlIHRoYXQgaW1tZWRpYXRlIG1ha2VzIHNlbnNlIGZvciB0aGlzIHNvdXJjZSAqLwotCXR5cGVfY2hlY2soc3JjLT5zeW1ib2wsIGltbWVkLCBvcGNvZGUpOwotCiAJLyogQWxsb2NhdGUgc2VxdWVuY2VyIHNwYWNlIGZvciB0aGUgaW5zdHJ1Y3Rpb24gYW5kIGZpbGwgaXQgb3V0ICovCiAJaW5zdHIgPSBzZXFfYWxsb2MoKTsKIAlmM19pbnN0ciA9ICZpbnN0ci0+Zm9ybWF0LmZvcm1hdDM7CkBAIC0xNzk3LDcgKzE4MTMsNiBAQAogc3RhdGljIHZvaWQKIHRlc3RfcmVhZGFibGVfc3ltYm9sKHN5bWJvbF90ICpzeW1ib2wpCiB7Ci0JCiAJaWYgKChzeW1ib2wtPmluZm8ucmluZm8tPm1vZGVzICYgKDB4MSA8PCBzcmNfbW9kZSkpID09IDApIHsKIAkJc25wcmludGYoZXJyYnVmLCBzaXplb2YoZXJyYnVmKSwKIAkJCSJSZWdpc3RlciAlcyB1bmF2YWlsYWJsZSBpbiBzb3VyY2UgcmVnIG1vZGUgJWQiLApAQCAtMTgxNSw3ICsxODMwLDYgQEAKIHN0YXRpYyB2b2lkCiB0ZXN0X3dyaXRhYmxlX3N5bWJvbChzeW1ib2xfdCAqc3ltYm9sKQogewotCQogCWlmICgoc3ltYm9sLT5pbmZvLnJpbmZvLT5tb2RlcyAmICgweDEgPDwgZHN0X21vZGUpKSA9PSAwKSB7CiAJCXNucHJpbnRmKGVycmJ1Ziwgc2l6ZW9mKGVycmJ1ZiksCiAJCQkiUmVnaXN0ZXIgJXMgdW5hdmFpbGFibGUgaW4gZGVzdGluYXRpb24gcmVnIG1vZGUgJWQiLApAQCAtMTgzMSwyNSArMTg0NSwzNCBAQAogfQogCiBzdGF0aWMgdm9pZAotdHlwZV9jaGVjayhzeW1ib2xfdCAqc3ltYm9sLCBleHByZXNzaW9uX3QgKmV4cHJlc3Npb24sIGludCBvcGNvZGUpCit0eXBlX2NoZWNrKHN5bWJvbF9yZWZfdCAqc3ltLCBleHByZXNzaW9uX3QgKmV4cHJlc3Npb24sIGludCBvcGNvZGUpCiB7CisJc3ltYm9sX3QgKnN5bWJvbCA9IHN5bS0+c3ltYm9sOwogCXN5bWJvbF9ub2RlX3QgKm5vZGU7CiAJaW50IGFuZF9vcDsKKwlpbnQ4X3QgdmFsdWUsIG1hc2s7CiAKIAlhbmRfb3AgPSBGQUxTRTsKLQlpZiAob3Bjb2RlID09IEFJQ19PUF9BTkQgfHwgb3Bjb2RlID09IEFJQ19PUF9KTlogfHwgb3Bjb2RlID09IEFJQ19PUF9KWikKLQkJYW5kX29wID0gVFJVRTsKLQogCS8qCiAJICogTWFrZSBzdXJlIHRoYXQgd2UgYXJlbid0IGF0dGVtcHRpbmcgdG8gd3JpdGUgc29tZXRoaW5nCiAJICogdGhhdCBoYXNuJ3QgYmVlbiBkZWZpbmVkLiAgSWYgdGhpcyBpcyBhbiBhbmQgb3BlcmF0aW9uLAogCSAqIHRoaXMgaXMgYSBtYXNrLCBzbyAidW5kZWZpbmVkIiBiaXRzIGFyZSBva2F5LgogCSAqLwotCWlmIChhbmRfb3AgPT0gRkFMU0UKLQkgJiYgKGV4cHJlc3Npb24tPnZhbHVlICYgfnN5bWJvbC0+aW5mby5yaW5mby0+dmFsaWRfYml0bWFzaykgIT0gMCkgeworCWlmIChvcGNvZGUgPT0gQUlDX09QX0FORCB8fCBvcGNvZGUgPT0gQUlDX09QX0pOWiB8fAorCSAgICBvcGNvZGUgPT0gQUlDX09QX0paICB8fCBvcGNvZGUgPT0gQUlDX09QX0pORSB8fAorCSAgICBvcGNvZGUgPT0gQUlDX09QX0JNT1YpCisJCWFuZF9vcCA9IFRSVUU7CisKKwkvKgorCSAqIERlZmF1bHRpbmcgdG8gOCBiaXQgbG9naWMKKwkgKi8KKwltYXNrID0gKGludDhfdCl+c3ltYm9sLT5pbmZvLnJpbmZvLT52YWxpZF9iaXRtYXNrOworCXZhbHVlID0gKGludDhfdClleHByZXNzaW9uLT52YWx1ZTsKKworCWlmIChhbmRfb3AgPT0gRkFMU0UgJiYgKG1hc2sgJiB2YWx1ZSkgIT0gMCApIHsKIAkJc25wcmludGYoZXJyYnVmLCBzaXplb2YoZXJyYnVmKSwKIAkJCSAiSW52YWxpZCBiaXQocykgMHgleCBpbiBpbW1lZGlhdGUgd3JpdHRlbiB0byAlcyIsCi0JCQkgZXhwcmVzc2lvbi0+dmFsdWUgJiB+c3ltYm9sLT5pbmZvLnJpbmZvLT52YWxpZF9iaXRtYXNrLAorCQkJIChtYXNrICYgdmFsdWUpLAogCQkJIHN5bWJvbC0+bmFtZSk7CiAJCXN0b3AoZXJyYnVmLCBFWF9EQVRBRVJSKTsKIAkJLyogTk9UUkVBQ0hFRCAqLwpAQCAtMTk1OSwzICsxOTgyLDEzIEBACiAKIAlyZXR1cm4gKEZBTFNFKTsKIH0KKworc3RhdGljIGludAoraXNfbG9jYXRpb25fYWRkcmVzcyhzeW1ib2xfdCAqc3ltKQoreworCWlmIChzeW0tPnR5cGUgPT0gU0NCTE9DIHx8CisJICAgIHN5bS0+dHlwZSA9PSBTUkFNTE9DKQorCQlyZXR1cm4gKFRSVUUpOworCXJldHVybiAoRkFMU0UpOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vYWljYXNtX3NjYW4ubCBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9haWNhc21fc2Nhbi5sCmluZGV4IDdjMzk4M2YuLjJjN2YwMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9haWNhc21fc2Nhbi5sCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9haWNhc21fc2Nhbi5sCkBAIC0xNjIsNiArMTYyLDcgQEAKIGNvbnN0CQkJeyB5eWx2YWwudmFsdWUgPSBGQUxTRTsgcmV0dXJuIFRfQ09OU1Q7IH0KIGRvd25sb2FkCQl7IHJldHVybiBUX0RPV05MT0FEOyB9CiBhZGRyZXNzCQkJeyByZXR1cm4gVF9BRERSRVNTOyB9Citjb3VudAkJCXsgcmV0dXJuIFRfQ09VTlQ7IH0KIGFjY2Vzc19tb2RlCQl7IHJldHVybiBUX0FDQ0VTU19NT0RFOyB9CiBtb2RlcwkJCXsgcmV0dXJuIFRfTU9ERVM7IH0KIFJXfFJPfFdPCQl7CkBAIC0yMjgsMTUgKzIyOSwxNSBAQAogbm9wCQkJeyByZXR1cm4gVF9OT1A7IH0KIAogCS8qIEFSUDIgMTZiaXQgZXh0ZW5zaW9ucyAqLwotb3IxNgkJCXsgcmV0dXJuIFRfT1IxNjsgfQotYW5kMTYJCQl7IHJldHVybiBUX0FORDE2OyB9Ci14b3IxNgkJCXsgcmV0dXJuIFRfWE9SMTY7IH0KLWFkZDE2CQkJeyByZXR1cm4gVF9BREQxNjsgfQotYWRjMTYJCQl7IHJldHVybiBUX0FEQzE2OyB9Ci1tdmkxNgkJCXsgcmV0dXJuIFRfTVZJMTY7IH0KLXRlc3QxNgkJCXsgcmV0dXJuIFRfVEVTVDE2OyB9Ci1jbXAxNgkJCXsgcmV0dXJuIFRfQ01QMTY7IH0KLWNtcHhjaGcJCQl7IHJldHVybiBUX0NNUFhDSEc7IH0KKwkvKiBvcjE2CQkJeyByZXR1cm4gVF9PUjE2OyB9ICovCisJLyogYW5kMTYJCQl7IHJldHVybiBUX0FORDE2OyB9Ki8KKwkvKiB4b3IxNgkJCXsgcmV0dXJuIFRfWE9SMTY7IH0qLworCS8qIGFkZDE2CQkJeyByZXR1cm4gVF9BREQxNjsgfSovCisJLyogYWRjMTYJCQl7IHJldHVybiBUX0FEQzE2OyB9Ki8KKwkvKiBtdmkxNgkJCXsgcmV0dXJuIFRfTVZJMTY7IH0qLworCS8qIHRlc3QxNgkJCXsgcmV0dXJuIFRfVEVTVDE2OyB9Ki8KKwkvKiBjbXAxNgkJCXsgcmV0dXJuIFRfQ01QMTY7IH0qLworCS8qIGNtcHhjaGcJCQl7IHJldHVybiBUX0NNUFhDSEc7IH0qLwogCiAJLyogQWxsb3dlZCBTeW1ib2xzICovCiBcPFw8CQkJeyByZXR1cm4gVF9FWFBSX0xTSElGVDsgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbV9zeW1ib2wuYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9haWNhc21fc3ltYm9sLmMKaW5kZXggZjFmNDQ4ZC4uZmNkMzU3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbV9zeW1ib2wuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vYWljYXNtX3N5bWJvbC5jCkBAIC03Nyw2ICs3Nyw3IEBACiAJaWYgKG5ld19zeW1ib2wtPm5hbWUgPT0gTlVMTCkKIAkJIHN0b3AoIlVuYWJsZSB0byBzdHJkdXAgc3ltYm9sIG5hbWUiLCBFWF9TT0ZUV0FSRSk7CiAJbmV3X3N5bWJvbC0+dHlwZSA9IFVOSU5JVElBTElaRUQ7CisJbmV3X3N5bWJvbC0+Y291bnQgPSAxOwogCXJldHVybiAobmV3X3N5bWJvbCk7CiB9CiAKQEAgLTE5OCw2ICsxOTksMTIgQEAKIAkJfQogCX0KIAltZW1jcHkoJnN0b3JlZF9wdHIsIGRhdGEuZGF0YSwgc2l6ZW9mKHN0b3JlZF9wdHIpKTsKKwlzdG9yZWRfcHRyLT5jb3VudCsrOworCWRhdGEuZGF0YSA9ICZzdG9yZWRfcHRyOworCWlmIChzeW10YWJsZS0+cHV0KHN5bXRhYmxlLCAma2V5LCAmZGF0YSwgLypmbGFncyovMCkgIT0wKSB7CisJCXBlcnJvcigiU3ltdGFibGUgcHV0IGZhaWxlZCIpOworCQlleGl0KEVYX1NPRlRXQVJFKTsKKwl9CiAJcmV0dXJuIChzdG9yZWRfcHRyKTsKIH0KIApAQCAtMjU2LDcgKzI2Myw3IEBACiAJCSAgICAmJiAoY3Vybm9kZS0+c3ltYm9sLT5pbmZvLmZpbmZvLT52YWx1ZSA+CiAJCQluZXdub2RlLT5zeW1ib2wtPmluZm8uZmluZm8tPnZhbHVlKSkpKQogCQkgfHwgKCFmaWVsZCAmJiAoY3Vybm9kZS0+c3ltYm9sLT5pbmZvLnJpbmZvLT5hZGRyZXNzID4KLQkJICAgICAgICAgICAgICAgbmV3bm9kZS0+c3ltYm9sLT5pbmZvLnJpbmZvLT5hZGRyZXNzKSkpIHsKKwkJCQluZXdub2RlLT5zeW1ib2wtPmluZm8ucmluZm8tPmFkZHJlc3MpKSkgewogCQkJU0xJU1RfSU5TRVJUX0hFQUQoc3ltbGlzdCwgbmV3bm9kZSwgbGlua3MpOwogCQkJcmV0dXJuOwogCQl9CkBAIC0yNzEsNyArMjc4LDcgQEAKIAogCQkJCWN1cnN5bWJvbCA9IFNMSVNUX05FWFQoY3Vybm9kZSwgbGlua3MpLT5zeW1ib2w7CiAJCQkJaWYgKChmaWVsZAotCQkgIAkJICAmJiAoY3Vyc3ltYm9sLT50eXBlID4gc3ltYm9sLT50eXBlCisJCQkJICAmJiAoY3Vyc3ltYm9sLT50eXBlID4gc3ltYm9sLT50eXBlCiAJCQkJICAgfHwgKGN1cnN5bWJvbC0+dHlwZSA9PSBzeW1ib2wtPnR5cGUKIAkJCQkgICAgJiYgKGN1cnN5bWJvbC0+aW5mby5maW5mby0+dmFsdWUgPgogCQkJCQlzeW1ib2wtPmluZm8uZmluZm8tPnZhbHVlKSkpKQpAQCAtMzUxLDcgKzM1OCw3IEBACiB7CiAJaWYgKG9maWxlID09IE5VTEwpCiAJCXJldHVybjsKLQkJCisKIAlmcHJpbnRmKG9maWxlLAogInR5cGVkZWYgaW50ICglc3JlZ19wcmludF90KSh1X2ludCwgdV9pbnQgKiwgdV9pbnQpO1xuIgogInR5cGVkZWYgc3RydWN0ICVzcmVnX3BhcnNlX2VudHJ5IHtcbiIKQEAgLTM3MCw3ICszNzcsNyBAQAogCQlyZXR1cm47CiAKIAlmcHJpbnRmKGRmaWxlLAotInN0YXRpYyAlc3JlZ19wYXJzZV9lbnRyeV90ICVzX3BhcnNlX3RhYmxlW10gPSB7XG4iLAorInN0YXRpYyBjb25zdCAlc3JlZ19wYXJzZV9lbnRyeV90ICVzX3BhcnNlX3RhYmxlW10gPSB7XG4iLAogCQlwcmVmaXgsCiAJCXJlZ25vZGUtPnN5bWJvbC0+bmFtZSk7CiB9CkBAIC0zODUsNyArMzkyLDcgQEAKIAlsb3dlcl9uYW1lID0gc3RyZHVwKHJlZ25vZGUtPnN5bWJvbC0+bmFtZSk7CiAJaWYgKGxvd2VyX25hbWUgPT0gTlVMTCkKIAkJIHN0b3AoIlVuYWJsZSB0byBzdHJkdXAgc3ltYm9sIG5hbWUiLCBFWF9TT0ZUV0FSRSk7Ci0JCisKIAlmb3IgKGxldHRlciA9IGxvd2VyX25hbWU7ICpsZXR0ZXIgIT0gJ1wwJzsgbGV0dGVyKyspCiAJCSpsZXR0ZXIgPSB0b2xvd2VyKCpsZXR0ZXIpOwogCkBAIC00NzIsNiArNDc5LDcgQEAKIAlEQlQJCSBrZXk7CiAJREJUCQkgZGF0YTsKIAlpbnQJCSBmbGFnOworCWludAkJIHJlZ19jb3VudCA9IDAsIHJlZ191c2VkID0gMDsKIAl1X2ludAkJIGk7CiAKIAlpZiAoc3ltdGFibGUgPT0gTlVMTCkKQEAgLTU0MSw2ICs1NDksOSBAQAogCQkJaW50CQkgbnVtX2VudHJpZXM7CiAKIAkJCW51bV9lbnRyaWVzID0gMDsKKwkJCXJlZ19jb3VudCsrOworCQkJaWYgKGN1cm5vZGUtPnN5bWJvbC0+Y291bnQgPT0gMSkKKwkJCQlicmVhazsKIAkJCWZpZWxkcyA9ICZjdXJub2RlLT5zeW1ib2wtPmluZm8ucmluZm8tPmZpZWxkczsKIAkJCVNMSVNUX0ZPUkVBQ0goZmllbGRub2RlLCBmaWVsZHMsIGxpbmtzKSB7CiAJCQkJaWYgKG51bV9lbnRyaWVzID09IDApCkBAIC01NTMsMTEgKzU2NCwxNCBAQAogCQkJfQogCQkJYWljX3ByaW50X3JlZ19kdW1wX2VuZChvZmlsZSwgZGZpbGUsCiAJCQkJCSAgICAgICBjdXJub2RlLCBudW1fZW50cmllcyk7CisJCQlyZWdfdXNlZCsrOwogCQl9CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQogCX0KKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiAlZCBvZiAlZCByZWdpc3RlciBkZWZpbml0aW9ucyB1c2VkXG4iLCBhcHBuYW1lLAorCQlyZWdfdXNlZCwgcmVnX2NvdW50KTsKIAogCS8qIEZvbGQgaW4gdGhlIG1hc2tzIGFuZCBiaXRzICovCiAJd2hpbGUgKFNMSVNUX0ZJUlNUKCZtYXNrcykgIT0gTlVMTCkgewpAQCAtNjQ2LDcgKzY2MCw2IEBACiAJCWZyZWUoY3Vybm9kZSk7CiAJfQogCi0JCiAJZnByaW50ZihvZmlsZSwgIlxuXG4vKiBEb3dubG9hZGVkIENvbnN0YW50IERlZmluaXRpb25zICovXG4iKTsKIAogCWZvciAoaSA9IDA7IFNMSVNUX0ZJUlNUKCZkb3dubG9hZF9jb25zdGFudHMpICE9IE5VTEw7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbV9zeW1ib2wuaCBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9haWNhc21fc3ltYm9sLmgKaW5kZXggYWZjMjJlOC4uMDUxOTBjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbV9zeW1ib2wuaAorKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vYWljYXNtX3N5bWJvbC5oCkBAIC0xMjgsNiArMTI4LDcgQEAKIHR5cGVkZWYgc3RydWN0IHN5bWJvbCB7CiAJY2hhcgkqbmFtZTsKIAlzeW10eXBlCXR5cGU7CisJaW50CWNvdW50OwogCXVuaW9uCXsKIAkJc3RydWN0IHJlZ19pbmZvCSAgKnJpbmZvOwogCQlzdHJ1Y3QgZmllbGRfaW5mbyAqZmluZm87CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZWF0YS5jIGIvZHJpdmVycy9zY3NpL2VhdGEuYwppbmRleCA4YmUzZDc2Li5hNzNhNmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZWF0YS5jCisrKyBiL2RyaXZlcnMvc2NzaS9lYXRhLmMKQEAgLTIyODYsMTcgKzIyODYsMTQgQEAKIAl9CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBpaGRscihpbnQgaXJxLCBzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3N0YXRpYyBpcnFyZXR1cm5fdCBpaGRscihzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudDsKIAl1bnNpZ25lZCBpbnQgaSwgaywgYywgc3RhdHVzLCB0c3RhdHVzLCByZWc7CiAJc3RydWN0IG1zc3AgKnNwcDsKIAlzdHJ1Y3QgbXNjcCAqY3BwOwogCXN0cnVjdCBob3N0ZGF0YSAqaGEgPSAoc3RydWN0IGhvc3RkYXRhICopc2hvc3QtPmhvc3RkYXRhOwotCi0JaWYgKHNob3N0LT5pcnEgIT0gaXJxKQotCQlwYW5pYygiJXM6IGloZGxyLCBpcnEgJWQsIHNob3N0LT5pcnEgJWQuXG4iLCBoYS0+Ym9hcmRfbmFtZSwgaXJxLAotCQkgICAgICBzaG9zdC0+aXJxKTsKKwlpbnQgaXJxID0gc2hvc3QtPmlycTsKIAogCS8qIENoZWNrIGlmIHRoaXMgYm9hcmQgbmVlZCB0byBiZSBzZXJ2aWNlZCAqLwogCWlmICghKGluYihzaG9zdC0+aW9fcG9ydCArIFJFR19BVVhfU1RBVFVTKSAmIElSUV9BU1NFUlRFRCkpCkBAIC0yNTM1LDcgKzI1MzIsNyBAQAogCXJldHVybiBJUlFfTk9ORTsKIH0KIAotc3RhdGljIGlycXJldHVybl90IGRvX2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKnNoYXApCitzdGF0aWMgaXJxcmV0dXJuX3QgZG9faW50ZXJydXB0X2hhbmRsZXIoaW50IGR1bW15LCB2b2lkICpzaGFwKQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OwogCXVuc2lnbmVkIGludCBqOwpAQCAtMjU0OCw3ICsyNTQ1LDcgQEAKIAlzaG9zdCA9IHNoW2pdOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgc3Bpbl9mbGFncyk7Ci0JcmV0ID0gaWhkbHIoaXJxLCBzaG9zdCk7CisJcmV0ID0gaWhkbHIoc2hvc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgc3Bpbl9mbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2VzcF9zY3NpLmMKaW5kZXggYmZkZWU1OS4uYTBiNmQ0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2VzcF9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2VzcF9zY3NpLmMKQEAgLTk3OCw3ICs5NzgsNyBAQAogCQkJICovCiAJCQlpZiAoIWVzcC0+b3BzLT5kbWFfZXJyb3IoZXNwKSkgewogCQkJCXByaW50ayhLRVJOX0VSUiBQRlggImVzcCVkOiBTcHVyaW91cyBpcnEsICIKLQkJCQkgICAgICAgInNyZWc9JXguXG4iLAorCQkJCSAgICAgICAic3JlZz0lMDJ4LlxuIiwKIAkJCQkgICAgICAgZXNwLT5ob3N0LT51bmlxdWVfaWQsIGVzcC0+c3JlZyk7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQpAQCAtMTQ0Nyw2ICsxNDQ3LDkgQEAKIAlpZiAob2Zmc2V0ID4gMTUpCiAJCWdvdG8gZG9fcmVqZWN0OwogCisJaWYgKGVzcC0+ZmxhZ3MgJiBFU1BfRkxBR19ESVNBQkxFX1NZTkMpCisJCW9mZnNldCA9IDA7CisKIAlpZiAob2Zmc2V0KSB7CiAJCWludCByb3VuZGVkX3VwLCBvbmVfY2xvY2s7CiAKQEAgLTE2OTcsNyArMTcwMCwxMiBAQAogCQllbHNlCiAJCQllbnQtPmZsYWdzICY9IH5FU1BfQ01EX0ZMQUdfV1JJVEU7CiAKLQkJZG1hX2xlbiA9IGVzcF9kbWFfbGVuZ3RoX2xpbWl0KGVzcCwgZG1hX2FkZHIsIGRtYV9sZW4pOworCQlpZiAoZXNwLT5vcHMtPmRtYV9sZW5ndGhfbGltaXQpCisJCQlkbWFfbGVuID0gZXNwLT5vcHMtPmRtYV9sZW5ndGhfbGltaXQoZXNwLCBkbWFfYWRkciwKKwkJCQkJCQkgICAgIGRtYV9sZW4pOworCQllbHNlCisJCQlkbWFfbGVuID0gZXNwX2RtYV9sZW5ndGhfbGltaXQoZXNwLCBkbWFfYWRkciwgZG1hX2xlbik7CisKIAkJZXNwLT5kYXRhX2RtYV9sZW4gPSBkbWFfbGVuOwogCiAJCWlmICghZG1hX2xlbikgewpAQCAtMTc2MSw3ICsxNzY5LDYgQEAKIAkJZXNwX2FkdmFuY2VfZG1hKGVzcCwgZW50LCBjbWQsIGJ5dGVzX3NlbnQpOwogCQllc3BfZXZlbnQoZXNwLCBFU1BfRVZFTlRfQ0hFQ0tfUEhBU0UpOwogCQlnb3RvIGFnYWluOwotCQlicmVhazsKIAl9CiAKIAljYXNlIEVTUF9FVkVOVF9TVEFUVVM6IHsKQEAgLTIyMzUsNyArMjI0Miw3IEBACiAKIHN0YXRpYyB2b2lkIGVzcF9zZXRfY2xvY2tfcGFyYW1zKHN0cnVjdCBlc3AgKmVzcCkKIHsKLQlpbnQgZm1oejsKKwlpbnQgZmh6OwogCXU4IGNjZjsKIAogCS8qIFRoaXMgaXMgZ2V0dGluZyBtZXNzeSBidXQgaXQgaGFzIHRvIGJlIGRvbmUgY29ycmVjdGx5IG9yIGVsc2UKQEAgLTIyNzAsOSArMjI3Nyw5IEBACiAJICogICAgVGhpcyBlbnRhaWxzIHRoZSBzbWFsbGVzdCBhbmQgbGFyZ2VzdCBzeW5jIHBlcmlvZCB3ZSBjb3VsZCBldmVyCiAJICogICAgaGFuZGxlIG9uIHRoaXMgRVNQLgogCSAqLwotCWZtaHogPSBlc3AtPmNmcmVxOworCWZoeiA9IGVzcC0+Y2ZyZXE7CiAKLQljY2YgPSAoKGZtaHogLyAxMDAwMDAwKSArIDQpIC8gNTsKKwljY2YgPSAoKGZoeiAvIDEwMDAwMDApICsgNCkgLyA1OwogCWlmIChjY2YgPT0gMSkKIAkJY2NmID0gMjsKIApAQCAtMjI4MSwxNiArMjI4OCwxNiBAQAogCSAqIGJlZW4gdW5hYmxlIHRvIGZpbmQgdGhlIGNsb2NrLWZyZXF1ZW5jeSBQUk9NIHByb3BlcnR5LiAgQWxsCiAJICogb3RoZXIgbWFjaGluZXMgcHJvdmlkZSB1c2VmdWwgdmFsdWVzIGl0IHNlZW1zLgogCSAqLwotCWlmIChmbWh6IDw9IDUwMDAwMDAgfHwgY2NmIDwgMSB8fCBjY2YgPiA4KSB7Ci0JCWZtaHogPSAyMDAwMDAwMDsKKwlpZiAoZmh6IDw9IDUwMDAwMDAgfHwgY2NmIDwgMSB8fCBjY2YgPiA4KSB7CisJCWZoeiA9IDIwMDAwMDAwOwogCQljY2YgPSA0OwogCX0KIAogCWVzcC0+Y2ZhY3QgPSAoY2NmID09IDggPyAwIDogY2NmKTsKLQllc3AtPmNmcmVxID0gZm1oejsKLQllc3AtPmNjeWNsZSA9IEVTUF9NSFpfVE9fQ1lDTEUoZm1oeik7CisJZXNwLT5jZnJlcSA9IGZoejsKKwllc3AtPmNjeWNsZSA9IEVTUF9IWl9UT19DWUNMRShmaHopOwogCWVzcC0+Y3RpY2sgPSBFU1BfVElDSyhjY2YsIGVzcC0+Y2N5Y2xlKTsKLQllc3AtPm5lZ19kZWZwID0gRVNQX05FR19ERUZQKGZtaHosIGNjZik7CisJZXNwLT5uZWdfZGVmcCA9IEVTUF9ORUdfREVGUChmaHosIGNjZik7CiAJZXNwLT5zeW5jX2RlZnAgPSBTWU5DX0RFRlBfU0xPVzsKIH0KIApAQCAtMjM4Miw2ICsyMzg5LDEyIEBACiAJc3RydWN0IGVzcF90YXJnZXRfZGF0YSAqdHAgPSAmZXNwLT50YXJnZXRbZGV2LT5pZF07CiAJaW50IGdvYWxfdGFncywgcXVldWVfZGVwdGg7CiAKKwlpZiAoZXNwLT5mbGFncyAmIEVTUF9GTEFHX0RJU0FCTEVfU1lOQykgeworCQkvKiBCeXBhc3MgYXN5bmMgZG9tYWluIHZhbGlkYXRpb24gKi8KKwkJZGV2LT5wcHIgID0gMDsKKwkJZGV2LT5zZHRyID0gMDsKKwl9CisKIAlnb2FsX3RhZ3MgPSAwOwogCiAJaWYgKGRldi0+dGFnZ2VkX3N1cHBvcnRlZCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2VzcF9zY3NpLmggYi9kcml2ZXJzL3Njc2kvZXNwX3Njc2kuaAppbmRleCBkNTU3NmQ1Li5iYjQzYTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZXNwX3Njc2kuaAorKysgYi9kcml2ZXJzL3Njc2kvZXNwX3Njc2kuaApAQCAtMjI0LDcgKzIyNCw3IEBACiAjZGVmaW5lIEVTUF9USU1FT19DT05TVCAgICAgICA4MTkyCiAjZGVmaW5lIEVTUF9ORUdfREVGUChtaHosIGNmYWN0KSBcCiAgICAgICAgICgoRVNQX0JVU19USU1FT1VUICogKChtaHopIC8gMTAwMCkpIC8gKDgxOTIgKiAoY2ZhY3QpKSkKLSNkZWZpbmUgRVNQX01IWl9UT19DWUNMRShtaGVydHopICAoKDEwMDAwMDAwMDApIC8gKChtaGVydHopIC8gMTAwMCkpCisjZGVmaW5lIEVTUF9IWl9UT19DWUNMRShoZXJ0eikgICgoMTAwMDAwMDAwMCkgLyAoKGhlcnR6KSAvIDEwMDApKQogI2RlZmluZSBFU1BfVElDSyhjY2YsIGN5Y2xlKSAgKCg3NjgyICogKGNjZikgKiAoY3ljbGUpIC8gMTAwMCkpCiAKIC8qIEZvciBzbG93IHRvIG1lZGl1bSBzcGVlZCBpbnB1dCBjbG9jayByYXRlcyB3ZSBzaG9vdCBmb3IgNW1iL3MsIGJ1dCBmb3IgaGlnaApAQCAtMjQwLDkgKzI0MCw5IEBACiAJCWludAkJbnVtX3NnOwogCX0gdTsKIAotCXVuc2lnbmVkIGludAkJY3VyX3Jlc2lkdWU7CisJaW50CQkJY3VyX3Jlc2lkdWU7CiAJc3RydWN0IHNjYXR0ZXJsaXN0CSpjdXJfc2c7Ci0JdW5zaWduZWQgaW50CQl0b3RfcmVzaWR1ZTsKKwlpbnQJCQl0b3RfcmVzaWR1ZTsKIH07CiAjZGVmaW5lIEVTUF9DTURfUFJJVihDTUQpCSgoc3RydWN0IGVzcF9jbWRfcHJpdiAqKSgmKENNRCktPlNDcCkpCiAKQEAgLTM2OCw2ICszNjgsMTIgQEAKIAkgKi8KIAlpbnQgKCppcnFfcGVuZGluZykoc3RydWN0IGVzcCAqZXNwKTsKIAorCS8qIFJldHVybiB0aGUgbWF4aW11bSBhbGxvd2FibGUgc2l6ZSBvZiBhIERNQSB0cmFuc2ZlciBmb3IgYQorCSAqIGdpdmVuIGJ1ZmZlci4KKwkgKi8KKwl1MzIgKCpkbWFfbGVuZ3RoX2xpbWl0KShzdHJ1Y3QgZXNwICplc3AsIHUzMiBkbWFfYWRkciwKKwkJCQl1MzIgZG1hX2xlbik7CisKIAkvKiBSZXNldCB0aGUgRE1BIGVuZ2luZSBlbnRpcmVseS4gIE9uIHJldHVybiwgRVNQIGludGVycnVwdHMKIAkgKiBzaG91bGQgYmUgZW5hYmxlZC4gIE9mdGVuIHRoZSBpbnRlcnJ1cHQgZW5hYmxpbmcgaXMKIAkgKiBjb250cm9sbGVkIGluIHRoZSBETUEgZW5naW5lLgpAQCAtNDcxLDYgKzQ3Nyw3IEBACiAjZGVmaW5lIEVTUF9GTEFHX0RPSU5HX1NMT1dDTUQJMHgwMDAwMDAwNAogI2RlZmluZSBFU1BfRkxBR19XSURFX0NBUEFCTEUJMHgwMDAwMDAwOAogI2RlZmluZSBFU1BfRkxBR19RVUlDS0lSUV9DSEVDSwkweDAwMDAwMDEwCisjZGVmaW5lIEVTUF9GTEFHX0RJU0FCTEVfU1lOQwkweDAwMDAwMDIwCiAKIAl1OAkJCXNlbGVjdF9zdGF0ZTsKICNkZWZpbmUgRVNQX1NFTEVDVF9OT05FCQkweDAwIC8qIE5vdCBzZWxlY3RpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ob3N0cy5jIGIvZHJpdmVycy9zY3NpL2hvc3RzLmMKaW5kZXggYzI2NGE4Yy4uMzY5MDM2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hvc3RzLmMKKysrIGIvZHJpdmVycy9zY3NpL2hvc3RzLmMKQEAgLTE5OSw5ICsxOTksMTMgQEAKIAlpZiAoIXNob3N0LT5jYW5fcXVldWUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuX3F1ZXVlID0gMCBubyBsb25nZXIgc3VwcG9ydGVkXG4iLAogCQkJCXNodC0+bmFtZSk7Ci0JCWdvdG8gb3V0OworCQlnb3RvIGZhaWw7CiAJfQogCisJZXJyb3IgPSBzY3NpX3NldHVwX2NvbW1hbmRfZnJlZWxpc3Qoc2hvc3QpOworCWlmIChlcnJvcikKKwkJZ290byBmYWlsOworCiAJaWYgKCFzaG9zdC0+c2hvc3RfZ2VuZGV2LnBhcmVudCkKIAkJc2hvc3QtPnNob3N0X2dlbmRldi5wYXJlbnQgPSBkZXYgPyBkZXYgOiAmcGxhdGZvcm1fYnVzOwogCkBAIC0yNTUsNiArMjU5LDggQEAKICBvdXRfZGVsX2dlbmRldjoKIAlkZXZpY2VfZGVsKCZzaG9zdC0+c2hvc3RfZ2VuZGV2KTsKICBvdXQ6CisJc2NzaV9kZXN0cm95X2NvbW1hbmRfZnJlZWxpc3Qoc2hvc3QpOworIGZhaWw6CiAJcmV0dXJuIGVycm9yOwogfQogRVhQT1JUX1NZTUJPTChzY3NpX2FkZF9ob3N0KTsKQEAgLTI4NCw2ICsyOTAsMTEgQEAKIAlrZnJlZShzaG9zdCk7CiB9CiAKK3N0cnVjdCBkZXZpY2VfdHlwZSBzY3NpX2hvc3RfdHlwZSA9IHsKKwkubmFtZSA9CQkic2NzaV9ob3N0IiwKKwkucmVsZWFzZSA9CXNjc2lfaG9zdF9kZXZfcmVsZWFzZSwKK307CisKIC8qKgogICogc2NzaV9ob3N0X2FsbG9jIC0gcmVnaXN0ZXIgYSBzY3NpIGhvc3QgYWRhcHRlciBpbnN0YW5jZS4KICAqIEBzaHQ6CXBvaW50ZXIgdG8gc2NzaSBob3N0IHRlbXBsYXRlCkBAIC0zNzYsMzMgKzM4NywzMSBAQAogCWVsc2UKIAkJc2hvc3QtPmRtYV9ib3VuZGFyeSA9IDB4ZmZmZmZmZmY7CiAKLQlydmFsID0gc2NzaV9zZXR1cF9jb21tYW5kX2ZyZWVsaXN0KHNob3N0KTsKLQlpZiAocnZhbCkKLQkJZ290byBmYWlsX2tmcmVlOwotCiAJZGV2aWNlX2luaXRpYWxpemUoJnNob3N0LT5zaG9zdF9nZW5kZXYpOwogCXNucHJpbnRmKHNob3N0LT5zaG9zdF9nZW5kZXYuYnVzX2lkLCBCVVNfSURfU0laRSwgImhvc3QlZCIsCiAJCXNob3N0LT5ob3N0X25vKTsKLQlzaG9zdC0+c2hvc3RfZ2VuZGV2LnJlbGVhc2UgPSBzY3NpX2hvc3RfZGV2X3JlbGVhc2U7CisjaWZuZGVmIENPTkZJR19TWVNGU19ERVBSRUNBVEVECisJc2hvc3QtPnNob3N0X2dlbmRldi5idXMgPSAmc2NzaV9idXNfdHlwZTsKKyNlbmRpZgorCXNob3N0LT5zaG9zdF9nZW5kZXYudHlwZSA9ICZzY3NpX2hvc3RfdHlwZTsKIAogCWRldmljZV9pbml0aWFsaXplKCZzaG9zdC0+c2hvc3RfZGV2KTsKIAlzaG9zdC0+c2hvc3RfZGV2LnBhcmVudCA9ICZzaG9zdC0+c2hvc3RfZ2VuZGV2OwogCXNob3N0LT5zaG9zdF9kZXYuY2xhc3MgPSAmc2hvc3RfY2xhc3M7CiAJc25wcmludGYoc2hvc3QtPnNob3N0X2Rldi5idXNfaWQsIEJVU19JRF9TSVpFLCAiaG9zdCVkIiwKIAkJIHNob3N0LT5ob3N0X25vKTsKKwlzaG9zdC0+c2hvc3RfZGV2Lmdyb3VwcyA9IHNjc2lfc3lzZnNfc2hvc3RfYXR0cl9ncm91cHM7CiAKIAlzaG9zdC0+ZWhhbmRsZXIgPSBrdGhyZWFkX3J1bihzY3NpX2Vycm9yX2hhbmRsZXIsIHNob3N0LAogCQkJInNjc2lfZWhfJWQiLCBzaG9zdC0+aG9zdF9ubyk7CiAJaWYgKElTX0VSUihzaG9zdC0+ZWhhbmRsZXIpKSB7CiAJCXJ2YWwgPSBQVFJfRVJSKHNob3N0LT5laGFuZGxlcik7Ci0JCWdvdG8gZmFpbF9kZXN0cm95X2ZyZWVsaXN0OworCQlnb3RvIGZhaWxfa2ZyZWU7CiAJfQogCiAJc2NzaV9wcm9jX2hvc3RkaXJfYWRkKHNob3N0LT5ob3N0dCk7CiAJcmV0dXJuIHNob3N0OwogCi0gZmFpbF9kZXN0cm95X2ZyZWVsaXN0OgotCXNjc2lfZGVzdHJveV9jb21tYW5kX2ZyZWVsaXN0KHNob3N0KTsKICBmYWlsX2tmcmVlOgogCWtmcmVlKHNob3N0KTsKIAlyZXR1cm4gTlVMTDsKQEAgLTQ5Niw3ICs1MDUsNyBAQAogCiBpbnQgc2NzaV9pc19ob3N0X2RldmljZShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIGRldi0+cmVsZWFzZSA9PSBzY3NpX2hvc3RfZGV2X3JlbGVhc2U7CisJcmV0dXJuIGRldi0+dHlwZSA9PSAmc2NzaV9ob3N0X3R5cGU7CiB9CiBFWFBPUlRfU1lNQk9MKHNjc2lfaXNfaG9zdF9kZXZpY2UpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvamF6el9lc3AuYyBiL2RyaXZlcnMvc2NzaS9qYXp6X2VzcC5jCmluZGV4IDVkMjMxMDEuLmIyZDQ4MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9qYXp6X2VzcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9qYXp6X2VzcC5jCkBAIC0yMTcsMTEgKzIxNywxNSBAQAogCXJldHVybiAwOwogfQogCisvKiB3b3JrIHdpdGggaG90cGx1ZyBhbmQgY29sZHBsdWcgKi8KK01PRFVMRV9BTElBUygicGxhdGZvcm06amF6el9lc3AiKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZXNwX2phenpfZHJpdmVyID0gewogCS5wcm9iZQkJPSBlc3BfamF6el9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGVzcF9qYXp6X3JlbW92ZSksCiAJLmRyaXZlcgk9IHsKIAkJLm5hbWUJPSAiamF6el9lc3AiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYwppbmRleCBhOWZiYjNmLi45NjBiYWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYwpAQCAtMTgyLDggKzE4Miw4IEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIHBoYmEtPk9wdGlvblJPTVZlcnNpb24pOwogfQogc3RhdGljIHNzaXplX3QKLWxwZmNfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCitscGZjX2xpbmtfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7CkBAIC05MzYsNyArOTM2LDcgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihwb3J0bnVtLCBTX0lSVUdPLCBscGZjX3Zwb3J0bnVtX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGZ3cmV2LCBTX0lSVUdPLCBscGZjX2Z3cmV2X3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGhkdywgU19JUlVHTywgbHBmY19oZHdfc2hvdywgTlVMTCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIoc3RhdGUsIFNfSVJVR08sIGxwZmNfc3RhdGVfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIobGlua19zdGF0ZSwgU19JUlVHTywgbHBmY19saW5rX3N0YXRlX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKG9wdGlvbl9yb21fdmVyc2lvbiwgU19JUlVHTywKIAkJICAgbHBmY19vcHRpb25fcm9tX3ZlcnNpb25fc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIobnVtX2Rpc2NvdmVyZWRfcG9ydHMsIFNfSVJVR08sCkBAIC0xNjY2LDcgKzE2NjYsNyBAQAogCSZkZXZfYXR0cl9md3JldiwKIAkmZGV2X2F0dHJfaGR3LAogCSZkZXZfYXR0cl9vcHRpb25fcm9tX3ZlcnNpb24sCi0JJmRldl9hdHRyX3N0YXRlLAorCSZkZXZfYXR0cl9saW5rX3N0YXRlLAogCSZkZXZfYXR0cl9udW1fZGlzY292ZXJlZF9wb3J0cywKIAkmZGV2X2F0dHJfbHBmY19kcnZyX3ZlcnNpb24sCiAJJmRldl9hdHRyX2xwZmNfdGVtcF9zZW5zb3IsCkBAIC0xNzE0LDcgKzE3MTQsNyBAQAogCiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbHBmY192cG9ydF9hdHRyc1tdID0gewogCSZkZXZfYXR0cl9pbmZvLAotCSZkZXZfYXR0cl9zdGF0ZSwKKwkmZGV2X2F0dHJfbGlua19zdGF0ZSwKIAkmZGV2X2F0dHJfbnVtX2Rpc2NvdmVyZWRfcG9ydHMsCiAJJmRldl9hdHRyX2xwZmNfZHJ2cl92ZXJzaW9uLAogCSZkZXZfYXR0cl9scGZjX2xvZ192ZXJib3NlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21hY19lc3AuYyBiL2RyaXZlcnMvc2NzaS9tYWNfZXNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzN2JkNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9tYWNfZXNwLmMKQEAgLTAsMCArMSw2NTcgQEAKKy8qIG1hY19lc3AuYzogRVNQIGZyb250LWVuZCBmb3IgTWFjaW50b3NoIFF1YWRyYSBzeXN0ZW1zLgorICoKKyAqIEFkYXB0ZWQgZnJvbSBqYXp6X2VzcC5jIGFuZCB0aGUgb2xkIG1hY19lc3AuYy4KKyAqCisgKiBUaGUgcHNldWRvIERNQSBhbGdvcml0aG0gaXMgYmFzZWQgb24gdGhlIG9uZSB1c2VkIGluIE5ldEJTRC4KKyAqIFNlZSBzeXMvYXJjaC9tYWM2OGsvb2Jpby9lc3AuYyBmb3Igc29tZSBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IEZpbm4gVGhhaW4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9udWJ1cy5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNpbnRzLmg+CisjaW5jbHVkZSA8YXNtL21hY2ludG9zaC5oPgorCisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKworI2luY2x1ZGUgImVzcF9zY3NpLmgiCisKKyNkZWZpbmUgRFJWX01PRFVMRV9OQU1FICAgICAibWFjX2VzcCIKKyNkZWZpbmUgUEZYICAgICAgICAgICAgICAgICBEUlZfTU9EVUxFX05BTUUgIjogIgorI2RlZmluZSBEUlZfVkVSU0lPTiAgICAgICAgICIxLjAwMCIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFICAiU2VwdCAxNSwgMjAwNyIKKworI2RlZmluZSBNQUNfRVNQX0lPX0JBU0UgICAgICAgICAgMHg1MEYwMDAwMAorI2RlZmluZSBNQUNfRVNQX1JFR1NfUVVBRFJBICAgICAgKE1BQ19FU1BfSU9fQkFTRSArIDB4MTAwMDApCisjZGVmaW5lIE1BQ19FU1BfUkVHU19RVUFEUkEyICAgICAoTUFDX0VTUF9JT19CQVNFICsgMHhGMDAwKQorI2RlZmluZSBNQUNfRVNQX1JFR1NfUVVBRFJBMyAgICAgKE1BQ19FU1BfSU9fQkFTRSArIDB4MTgwMDApCisjZGVmaW5lIE1BQ19FU1BfUkVHU19TUEFDSU5HICAgICAweDQwMgorI2RlZmluZSBNQUNfRVNQX1BETUFfUkVHICAgICAgICAgMHhGOTgwMDAyNAorI2RlZmluZSBNQUNfRVNQX1BETUFfUkVHX1NQQUNJTkcgMHg0CisjZGVmaW5lIE1BQ19FU1BfUERNQV9JT19PRkZTRVQgICAweDEwMAorCisjZGVmaW5lIGVzcF9yZWFkOChSRUcpCQltYWNfZXNwX3JlYWQ4KGVzcCwgUkVHKQorI2RlZmluZSBlc3Bfd3JpdGU4KFZBTCwgUkVHKQltYWNfZXNwX3dyaXRlOChlc3AsIFZBTCwgUkVHKQorCitzdHJ1Y3QgbWFjX2VzcF9wcml2IHsKKwlzdHJ1Y3QgZXNwICplc3A7CisJdm9pZCBfX2lvbWVtICpwZG1hX3JlZ3M7CisJdm9pZCBfX2lvbWVtICpwZG1hX2lvOworCWludCBlcnJvcjsKK307CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaW50ZXJuYWxfZXNwLCAqZXh0ZXJuYWxfZXNwOworCisjZGVmaW5lIE1BQ19FU1BfR0VUX1BSSVYoZXNwKSAoKHN0cnVjdCBtYWNfZXNwX3ByaXYgKikgXAorCQkJICAgICAgIHBsYXRmb3JtX2dldF9kcnZkYXRhKChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopIFwKKwkJCQkJCSAgICAoZXNwLT5kZXYpKSkKKworc3RhdGljIGlubGluZSB2b2lkIG1hY19lc3Bfd3JpdGU4KHN0cnVjdCBlc3AgKmVzcCwgdTggdmFsLCB1bnNpZ25lZCBsb25nIHJlZykKK3sKKwludWJ1c193cml0ZWIodmFsLCBlc3AtPnJlZ3MgKyByZWcgKiAxNik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggbWFjX2VzcF9yZWFkOChzdHJ1Y3QgZXNwICplc3AsIHVuc2lnbmVkIGxvbmcgcmVnKQoreworCXJldHVybiBudWJ1c19yZWFkYihlc3AtPnJlZ3MgKyByZWcgKiAxNik7Cit9CisKKy8qIEZvciBwc2V1ZG8gRE1BIGFuZCBQSU8gd2UgbmVlZCB0aGUgdmlydHVhbCBhZGRyZXNzCisgKiBzbyB0aGlzIGFkZHJlc3MgbWFwcGluZyBpcyB0aGUgaWRlbnRpdHkgbWFwcGluZy4KKyAqLworCitzdGF0aWMgZG1hX2FkZHJfdCBtYWNfZXNwX21hcF9zaW5nbGUoc3RydWN0IGVzcCAqZXNwLCB2b2lkICpidWYsCisJCQkJICAgICBzaXplX3Qgc3osIGludCBkaXIpCit7CisJcmV0dXJuIChkbWFfYWRkcl90KWJ1ZjsKK30KKworc3RhdGljIGludCBtYWNfZXNwX21hcF9zZyhzdHJ1Y3QgZXNwICplc3AsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkgIGludCBudW1fc2csIGludCBkaXIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3NnOyBpKyspCisJCXNnW2ldLmRtYV9hZGRyZXNzID0gKHUzMilzZ192aXJ0KCZzZ1tpXSk7CisJcmV0dXJuIG51bV9zZzsKK30KKworc3RhdGljIHZvaWQgbWFjX2VzcF91bm1hcF9zaW5nbGUoc3RydWN0IGVzcCAqZXNwLCBkbWFfYWRkcl90IGFkZHIsCisJCQkJIHNpemVfdCBzeiwgaW50IGRpcikKK3sKKwkvKiBOb3RoaW5nIHRvIGRvLiAqLworfQorCitzdGF0aWMgdm9pZCBtYWNfZXNwX3VubWFwX3NnKHN0cnVjdCBlc3AgKmVzcCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCSAgICAgaW50IG51bV9zZywgaW50IGRpcikKK3sKKwkvKiBOb3RoaW5nIHRvIGRvLiAqLworfQorCitzdGF0aWMgdm9pZCBtYWNfZXNwX3Jlc2V0X2RtYShzdHJ1Y3QgZXNwICplc3ApCit7CisJLyogTm90aGluZyB0byBkby4gKi8KK30KKworc3RhdGljIHZvaWQgbWFjX2VzcF9kbWFfZHJhaW4oc3RydWN0IGVzcCAqZXNwKQoreworCS8qIE5vdGhpbmcgdG8gZG8uICovCit9CisKK3N0YXRpYyB2b2lkIG1hY19lc3BfZG1hX2ludmFsaWRhdGUoc3RydWN0IGVzcCAqZXNwKQoreworCS8qIE5vdGhpbmcgdG8gZG8uICovCit9CisKK3N0YXRpYyBpbnQgbWFjX2VzcF9kbWFfZXJyb3Ioc3RydWN0IGVzcCAqZXNwKQoreworCXJldHVybiBNQUNfRVNQX0dFVF9QUklWKGVzcCktPmVycm9yOworfQorCitzdGF0aWMgaW5saW5lIGludCBtYWNfZXNwX3dhaXRfZm9yX2VtcHR5X2ZpZm8oc3RydWN0IGVzcCAqZXNwKQoreworCXN0cnVjdCBtYWNfZXNwX3ByaXYgKm1lcCA9IE1BQ19FU1BfR0VUX1BSSVYoZXNwKTsKKwlpbnQgaSA9IDUwMDAwMDsKKworCWRvIHsKKwkJaWYgKCEoZXNwX3JlYWQ4KEVTUF9GRkxBR1MpICYgRVNQX0ZGX0ZCWVRFUykpCisJCQlyZXR1cm4gMDsKKworCQlpZiAoZXNwX3JlYWQ4KEVTUF9TVEFUVVMpICYgRVNQX1NUQVRfSU5UUikKKwkJCXJldHVybiAxOworCisJCXVkZWxheSgyKTsKKwl9IHdoaWxlICgtLWkpOworCisJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRklGTyBpcyBub3QgZW1wdHkgKHNyZWcgJTAyeClcbiIsCisJICAgICAgIGVzcF9yZWFkOChFU1BfU1RBVFVTKSk7CisJbWVwLT5lcnJvciA9IDE7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1hY19lc3Bfd2FpdF9mb3JfZHJlcShzdHJ1Y3QgZXNwICplc3ApCit7CisJc3RydWN0IG1hY19lc3BfcHJpdiAqbWVwID0gTUFDX0VTUF9HRVRfUFJJVihlc3ApOworCWludCBpID0gNTAwMDAwOworCisJZG8geworCQlpZiAobWVwLT5wZG1hX3JlZ3MgPT0gTlVMTCkgeworCQkJaWYgKG1hY19pcnFfcGVuZGluZyhJUlFfTUFDX1NDU0lEUlEpKQorCQkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJaWYgKG51YnVzX3JlYWRsKG1lcC0+cGRtYV9yZWdzKSAmIDB4MjAwKQorCQkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKGVzcF9yZWFkOChFU1BfU1RBVFVTKSAmIEVTUF9TVEFUX0lOVFIpCisJCQlyZXR1cm4gMTsKKworCQl1ZGVsYXkoMik7CisJfSB3aGlsZSAoLS1pKTsKKworCXByaW50ayhLRVJOX0VSUiBQRlggIlBETUEgdGltZW91dCAoc3JlZyAlMDJ4KVxuIiwKKwkgICAgICAgZXNwX3JlYWQ4KEVTUF9TVEFUVVMpKTsKKwltZXAtPmVycm9yID0gMTsKKwlyZXR1cm4gMTsKK30KKworI2RlZmluZSBNQUNfRVNQX1BETUFfTE9PUChvcGVyYW5kcykgXAorCWFzbSB2b2xhdGlsZSAoIFwKKwkgICAgICIgICAgICAgdHN0dyAlMiAgICAgICAgICAgICAgICAgICBcbiIgXAorCSAgICAgIiAgICAgICBqYmVxIDIwZiAgICAgICAgICAgICAgICAgIFxuIiBcCisJICAgICAiMTogICAgIG1vdmV3ICIgb3BlcmFuZHMgIiAgICAgICAgXG4iIFwKKwkgICAgICIyOiAgICAgbW92ZXcgIiBvcGVyYW5kcyAiICAgICAgICBcbiIgXAorCSAgICAgIjM6ICAgICBtb3ZldyAiIG9wZXJhbmRzICIgICAgICAgIFxuIiBcCisJICAgICAiNDogICAgIG1vdmV3ICIgb3BlcmFuZHMgIiAgICAgICAgXG4iIFwKKwkgICAgICI1OiAgICAgbW92ZXcgIiBvcGVyYW5kcyAiICAgICAgICBcbiIgXAorCSAgICAgIjY6ICAgICBtb3ZldyAiIG9wZXJhbmRzICIgICAgICAgIFxuIiBcCisJICAgICAiNzogICAgIG1vdmV3ICIgb3BlcmFuZHMgIiAgICAgICAgXG4iIFwKKwkgICAgICI4OiAgICAgbW92ZXcgIiBvcGVyYW5kcyAiICAgICAgICBcbiIgXAorCSAgICAgIjk6ICAgICBtb3ZldyAiIG9wZXJhbmRzICIgICAgICAgIFxuIiBcCisJICAgICAiMTA6ICAgIG1vdmV3ICIgb3BlcmFuZHMgIiAgICAgICAgXG4iIFwKKwkgICAgICIxMTogICAgbW92ZXcgIiBvcGVyYW5kcyAiICAgICAgICBcbiIgXAorCSAgICAgIjEyOiAgICBtb3ZldyAiIG9wZXJhbmRzICIgICAgICAgIFxuIiBcCisJICAgICAiMTM6ICAgIG1vdmV3ICIgb3BlcmFuZHMgIiAgICAgICAgXG4iIFwKKwkgICAgICIxNDogICAgbW92ZXcgIiBvcGVyYW5kcyAiICAgICAgICBcbiIgXAorCSAgICAgIjE1OiAgICBtb3ZldyAiIG9wZXJhbmRzICIgICAgICAgIFxuIiBcCisJICAgICAiMTY6ICAgIG1vdmV3ICIgb3BlcmFuZHMgIiAgICAgICAgXG4iIFwKKwkgICAgICIgICAgICAgc3VicXcgIzEsJTIgICAgICAgICAgICAgICBcbiIgXAorCSAgICAgIiAgICAgICBqYm5lIDFiICAgICAgICAgICAgICAgICAgIFxuIiBcCisJICAgICAiMjA6ICAgIHRzdHcgJTMgICAgICAgICAgICAgICAgICAgXG4iIFwKKwkgICAgICIgICAgICAgamJlcSAzMGYgICAgICAgICAgICAgICAgICBcbiIgXAorCSAgICAgIjIxOiAgICBtb3ZldyAiIG9wZXJhbmRzICIgICAgICAgIFxuIiBcCisJICAgICAiICAgICAgIHN1YnF3ICMxLCUzICAgICAgICAgICAgICAgXG4iIFwKKwkgICAgICIgICAgICAgamJuZSAyMWIgICAgICAgICAgICAgICAgICBcbiIgXAorCSAgICAgIjMwOiAgICB0c3R3ICU0ICAgICAgICAgICAgICAgICAgIFxuIiBcCisJICAgICAiICAgICAgIGpiZXEgNDBmICAgICAgICAgICAgICAgICAgXG4iIFwKKwkgICAgICIzMTogICAgbW92ZWIgIiBvcGVyYW5kcyAiICAgICAgICBcbiIgXAorCSAgICAgIjMyOiAgICBub3AgICAgICAgICAgICAgICAgICAgICAgIFxuIiBcCisJICAgICAiNDA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iIFwKKwkgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIgXAorCSAgICAgIiAgICAgICAuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiIFxuIiBcCisJICAgICAiICAgICAgIC5hbGlnbiAgNCAgICAgICAgICAgICAgICAgXG4iIFwKKwkgICAgICIgICAgICAgLmxvbmcgICAxYiw0MGIgICAgICAgICAgICBcbiIgXAorCSAgICAgIiAgICAgICAubG9uZyAgIDJiLDQwYiAgICAgICAgICAgIFxuIiBcCisJICAgICAiICAgICAgIC5sb25nICAgM2IsNDBiICAgICAgICAgICAgXG4iIFwKKwkgICAgICIgICAgICAgLmxvbmcgICA0Yiw0MGIgICAgICAgICAgICBcbiIgXAorCSAgICAgIiAgICAgICAubG9uZyAgIDViLDQwYiAgICAgICAgICAgIFxuIiBcCisJICAgICAiICAgICAgIC5sb25nICAgNmIsNDBiICAgICAgICAgICAgXG4iIFwKKwkgICAgICIgICAgICAgLmxvbmcgICA3Yiw0MGIgICAgICAgICAgICBcbiIgXAorCSAgICAgIiAgICAgICAubG9uZyAgIDhiLDQwYiAgICAgICAgICAgIFxuIiBcCisJICAgICAiICAgICAgIC5sb25nICAgOWIsNDBiICAgICAgICAgICAgXG4iIFwKKwkgICAgICIgICAgICAgLmxvbmcgIDEwYiw0MGIgICAgICAgICAgICBcbiIgXAorCSAgICAgIiAgICAgICAubG9uZyAgMTFiLDQwYiAgICAgICAgICAgIFxuIiBcCisJICAgICAiICAgICAgIC5sb25nICAxMmIsNDBiICAgICAgICAgICAgXG4iIFwKKwkgICAgICIgICAgICAgLmxvbmcgIDEzYiw0MGIgICAgICAgICAgICBcbiIgXAorCSAgICAgIiAgICAgICAubG9uZyAgMTRiLDQwYiAgICAgICAgICAgIFxuIiBcCisJICAgICAiICAgICAgIC5sb25nICAxNWIsNDBiICAgICAgICAgICAgXG4iIFwKKwkgICAgICIgICAgICAgLmxvbmcgIDE2Yiw0MGIgICAgICAgICAgICBcbiIgXAorCSAgICAgIiAgICAgICAubG9uZyAgMjFiLDQwYiAgICAgICAgICAgIFxuIiBcCisJICAgICAiICAgICAgIC5sb25nICAzMWIsNDBiICAgICAgICAgICAgXG4iIFwKKwkgICAgICIgICAgICAgLmxvbmcgIDMyYiw0MGIgICAgICAgICAgICBcbiIgXAorCSAgICAgIiAgICAgICAucHJldmlvdXMgICAgICAgICAgICAgICAgIFxuIiBcCisJICAgICA6ICIrYSIgKGFkZHIpIFwKKwkgICAgIDogImEiIChtZXAtPnBkbWFfaW8pLCAiciIgKGNvdW50MzIpLCAiciIgKGNvdW50MiksICJnIiAoZXNwX2NvdW50KSkKKworc3RhdGljIHZvaWQgbWFjX2VzcF9zZW5kX3BkbWFfY21kKHN0cnVjdCBlc3AgKmVzcCwgdTMyIGFkZHIsIHUzMiBlc3BfY291bnQsCisJCQkJICB1MzIgZG1hX2NvdW50LCBpbnQgd3JpdGUsIHU4IGNtZCkKK3sKKwlzdHJ1Y3QgbWFjX2VzcF9wcml2ICptZXAgPSBNQUNfRVNQX0dFVF9QUklWKGVzcCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCW1lcC0+ZXJyb3IgPSAwOworCisJaWYgKCF3cml0ZSkKKwkJc2NzaV9lc3BfY21kKGVzcCwgRVNQX0NNRF9GTFVTSCk7CisKKwllc3Bfd3JpdGU4KChlc3BfY291bnQgPj4gMCkgJiAweEZGLCBFU1BfVENMT1cpOworCWVzcF93cml0ZTgoKGVzcF9jb3VudCA+PiA4KSAmIDB4RkYsIEVTUF9UQ01FRCk7CisKKwlzY3NpX2VzcF9jbWQoZXNwLCBjbWQpOworCisJZG8geworCQl1bnNpZ25lZCBpbnQgY291bnQzMiA9IGVzcF9jb3VudCA+PiA1OworCQl1bnNpZ25lZCBpbnQgY291bnQyID0gKGVzcF9jb3VudCAmIDB4MUYpID4+IDE7CisJCXVuc2lnbmVkIGludCBzdGFydF9hZGRyID0gYWRkcjsKKworCQlpZiAobWFjX2VzcF93YWl0X2Zvcl9kcmVxKGVzcCkpCisJCQlicmVhazsKKworCQlpZiAod3JpdGUpIHsKKwkJCU1BQ19FU1BfUERNQV9MT09QKCIlMUAsJTBAKyIpOworCisJCQllc3BfY291bnQgLT0gYWRkciAtIHN0YXJ0X2FkZHI7CisJCX0gZWxzZSB7CisJCQl1bnNpZ25lZCBpbnQgbjsKKworCQkJTUFDX0VTUF9QRE1BX0xPT1AoIiUwQCssJTFAIik7CisKKwkJCWlmIChtYWNfZXNwX3dhaXRfZm9yX2VtcHR5X2ZpZm8oZXNwKSkKKwkJCQlicmVhazsKKworCQkJbiA9IChlc3BfcmVhZDgoRVNQX1RDTUVEKSA8PCA4KSArIGVzcF9yZWFkOChFU1BfVENMT1cpOworCQkJYWRkciA9IHN0YXJ0X2FkZHIgKyBlc3BfY291bnQgLSBuOworCQkJZXNwX2NvdW50ID0gbjsKKwkJfQorCX0gd2hpbGUgKGVzcF9jb3VudCk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBQcm9ncmFtbWVkIElPIHJvdXRpbmVzIGZvbGxvdy4KKyAqLworCitzdGF0aWMgaW5saW5lIGludCBtYWNfZXNwX3dhaXRfZm9yX2ZpZm8oc3RydWN0IGVzcCAqZXNwKQoreworCWludCBpID0gNTAwMDAwOworCisJZG8geworCQlpZiAoZXNwX3JlYWQ4KEVTUF9GRkxBR1MpICYgRVNQX0ZGX0ZCWVRFUykKKwkJCXJldHVybiAwOworCisJCXVkZWxheSgyKTsKKwl9IHdoaWxlICgtLWkpOworCisJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRklGTyBpcyBlbXB0eSAoc3JlZyAlMDJ4KVxuIiwKKwkgICAgICAgZXNwX3JlYWQ4KEVTUF9TVEFUVVMpKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbWFjX2VzcF93YWl0X2Zvcl9pbnRyKHN0cnVjdCBlc3AgKmVzcCkKK3sKKwlpbnQgaSA9IDUwMDAwMDsKKworCWRvIHsKKwkJZXNwLT5zcmVnID0gZXNwX3JlYWQ4KEVTUF9TVEFUVVMpOworCQlpZiAoZXNwLT5zcmVnICYgRVNQX1NUQVRfSU5UUikKKwkJCXJldHVybiAwOworCisJCXVkZWxheSgyKTsKKwl9IHdoaWxlICgtLWkpOworCisJcHJpbnRrKEtFUk5fRVJSIFBGWCAiSVJRIHRpbWVvdXQgKHNyZWcgJTAyeClcbiIsIGVzcC0+c3JlZyk7CisJcmV0dXJuIDE7Cit9CisKKyNkZWZpbmUgTUFDX0VTUF9QSU9fTE9PUChvcGVyYW5kcywgcmVnMSkgXAorCWFzbSB2b2xhdGlsZSAoIFwKKwkgICAgICIxOiAgICAgbW92ZWIgIiBvcGVyYW5kcyAiIFxuIiBcCisJICAgICAiICAgICAgIHN1YnF3ICMxLCUxICAgICAgICBcbiIgXAorCSAgICAgIiAgICAgICBqYm5lIDFiICAgICAgICAgICAgXG4iIFwKKwkgICAgIDogIithIiAoYWRkciksICIrciIgKHJlZzEpIFwKKwkgICAgIDogImEiIChmaWZvKSkKKworI2RlZmluZSBNQUNfRVNQX1BJT19GSUxMKG9wZXJhbmRzLCByZWcxKSBcCisJYXNtIHZvbGF0aWxlICggXAorCSAgICAgIiAgICAgICBtb3ZlYiAiIG9wZXJhbmRzICIgXG4iIFwKKwkgICAgICIgICAgICAgbW92ZWIgIiBvcGVyYW5kcyAiIFxuIiBcCisJICAgICAiICAgICAgIG1vdmViICIgb3BlcmFuZHMgIiBcbiIgXAorCSAgICAgIiAgICAgICBtb3ZlYiAiIG9wZXJhbmRzICIgXG4iIFwKKwkgICAgICIgICAgICAgbW92ZWIgIiBvcGVyYW5kcyAiIFxuIiBcCisJICAgICAiICAgICAgIG1vdmViICIgb3BlcmFuZHMgIiBcbiIgXAorCSAgICAgIiAgICAgICBtb3ZlYiAiIG9wZXJhbmRzICIgXG4iIFwKKwkgICAgICIgICAgICAgbW92ZWIgIiBvcGVyYW5kcyAiIFxuIiBcCisJICAgICAiICAgICAgIG1vdmViICIgb3BlcmFuZHMgIiBcbiIgXAorCSAgICAgIiAgICAgICBtb3ZlYiAiIG9wZXJhbmRzICIgXG4iIFwKKwkgICAgICIgICAgICAgbW92ZWIgIiBvcGVyYW5kcyAiIFxuIiBcCisJICAgICAiICAgICAgIG1vdmViICIgb3BlcmFuZHMgIiBcbiIgXAorCSAgICAgIiAgICAgICBtb3ZlYiAiIG9wZXJhbmRzICIgXG4iIFwKKwkgICAgICIgICAgICAgbW92ZWIgIiBvcGVyYW5kcyAiIFxuIiBcCisJICAgICAiICAgICAgIG1vdmViICIgb3BlcmFuZHMgIiBcbiIgXAorCSAgICAgIiAgICAgICBtb3ZlYiAiIG9wZXJhbmRzICIgXG4iIFwKKwkgICAgICIgICAgICAgc3VicXcgIzgsJTEgICAgICAgIFxuIiBcCisJICAgICAiICAgICAgIHN1YnF3ICM4LCUxICAgICAgICBcbiIgXAorCSAgICAgOiAiK2EiIChhZGRyKSwgIityIiAocmVnMSkgXAorCSAgICAgOiAiYSIgKGZpZm8pKQorCisjZGVmaW5lIE1BQ19FU1BfRklGT19TSVpFIDE2CisKK3N0YXRpYyB2b2lkIG1hY19lc3Bfc2VuZF9waW9fY21kKHN0cnVjdCBlc3AgKmVzcCwgdTMyIGFkZHIsIHUzMiBlc3BfY291bnQsCisJCQkJIHUzMiBkbWFfY291bnQsIGludCB3cml0ZSwgdTggY21kKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IG1hY19lc3BfcHJpdiAqbWVwID0gTUFDX0VTUF9HRVRfUFJJVihlc3ApOworCXU4ICpmaWZvID0gZXNwLT5yZWdzICsgRVNQX0ZEQVRBICogMTY7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwljbWQgJj0gfkVTUF9DTURfRE1BOworCW1lcC0+ZXJyb3IgPSAwOworCisJaWYgKHdyaXRlKSB7CisJCXNjc2lfZXNwX2NtZChlc3AsIGNtZCk7CisKKwkJaWYgKCFtYWNfZXNwX3dhaXRfZm9yX2ludHIoZXNwKSkgeworCQkJaWYgKG1hY19lc3Bfd2FpdF9mb3JfZmlmbyhlc3ApKQorCQkJCWVzcF9jb3VudCA9IDA7CisJCX0gZWxzZSB7CisJCQllc3BfY291bnQgPSAwOworCQl9CisJfSBlbHNlIHsKKwkJc2NzaV9lc3BfY21kKGVzcCwgRVNQX0NNRF9GTFVTSCk7CisKKwkJaWYgKGVzcF9jb3VudCA+PSBNQUNfRVNQX0ZJRk9fU0laRSkKKwkJCU1BQ19FU1BfUElPX0ZJTEwoIiUwQCssJTJAIiwgZXNwX2NvdW50KTsKKwkJZWxzZQorCQkJTUFDX0VTUF9QSU9fTE9PUCgiJTBAKywlMkAiLCBlc3BfY291bnQpOworCisJCXNjc2lfZXNwX2NtZChlc3AsIGNtZCk7CisJfQorCisJd2hpbGUgKGVzcF9jb3VudCkgeworCQl1bnNpZ25lZCBpbnQgbjsKKworCQlpZiAobWFjX2VzcF93YWl0X2Zvcl9pbnRyKGVzcCkpIHsKKwkJCW1lcC0+ZXJyb3IgPSAxOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZXNwLT5zcmVnICYgRVNQX1NUQVRfU1BBTSkgeworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZ3Jvc3MgZXJyb3JcbiIpOworCQkJbWVwLT5lcnJvciA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCW4gPSBlc3BfcmVhZDgoRVNQX0ZGTEFHUykgJiBFU1BfRkZfRkJZVEVTOworCisJCWlmICh3cml0ZSkgeworCQkJaWYgKG4gPiBlc3BfY291bnQpCisJCQkJbiA9IGVzcF9jb3VudDsKKwkJCWVzcF9jb3VudCAtPSBuOworCisJCQlNQUNfRVNQX1BJT19MT09QKCIlMkAsJTBAKyIsIG4pOworCisJCQlpZiAoKGVzcC0+c3JlZyAmIEVTUF9TVEFUX1BNQVNLKSA9PSBFU1BfU1RBVFApCisJCQkJYnJlYWs7CisKKwkJCWlmIChlc3BfY291bnQpIHsKKwkJCQllc3AtPmlyZWcgPSBlc3BfcmVhZDgoRVNQX0lOVFJQVCk7CisJCQkJaWYgKGVzcC0+aXJlZyAmIEVTUF9JTlRSX0RDKQorCQkJCQlicmVhazsKKworCQkJCXNjc2lfZXNwX2NtZChlc3AsIEVTUF9DTURfVEkpOworCQkJfQorCQl9IGVsc2UgeworCQkJZXNwLT5pcmVnID0gZXNwX3JlYWQ4KEVTUF9JTlRSUFQpOworCQkJaWYgKGVzcC0+aXJlZyAmIEVTUF9JTlRSX0RDKQorCQkJCWJyZWFrOworCisJCQluID0gTUFDX0VTUF9GSUZPX1NJWkUgLSBuOworCQkJaWYgKG4gPiBlc3BfY291bnQpCisJCQkJbiA9IGVzcF9jb3VudDsKKworCQkJaWYgKG4gPT0gTUFDX0VTUF9GSUZPX1NJWkUpIHsKKwkJCQlNQUNfRVNQX1BJT19GSUxMKCIlMEArLCUyQCIsIGVzcF9jb3VudCk7CisJCQl9IGVsc2UgeworCQkJCWVzcF9jb3VudCAtPSBuOworCQkJCU1BQ19FU1BfUElPX0xPT1AoIiUwQCssJTJAIiwgbik7CisJCQl9CisKKwkJCXNjc2lfZXNwX2NtZChlc3AsIEVTUF9DTURfVEkpOworCQl9CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgaW50IG1hY19lc3BfaXJxX3BlbmRpbmcoc3RydWN0IGVzcCAqZXNwKQoreworCWlmIChlc3BfcmVhZDgoRVNQX1NUQVRVUykgJiBFU1BfU1RBVF9JTlRSKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBtYWNfZXNwX2RtYV9sZW5ndGhfbGltaXQoc3RydWN0IGVzcCAqZXNwLCB1MzIgZG1hX2FkZHIsIHUzMiBkbWFfbGVuKQoreworCXJldHVybiBkbWFfbGVuID4gMHhGRkZGID8gMHhGRkZGIDogZG1hX2xlbjsKK30KKworc3RhdGljIHN0cnVjdCBlc3BfZHJpdmVyX29wcyBtYWNfZXNwX29wcyA9IHsKKwkuZXNwX3dyaXRlOCAgICAgICA9IG1hY19lc3Bfd3JpdGU4LAorCS5lc3BfcmVhZDggICAgICAgID0gbWFjX2VzcF9yZWFkOCwKKwkubWFwX3NpbmdsZSAgICAgICA9IG1hY19lc3BfbWFwX3NpbmdsZSwKKwkubWFwX3NnICAgICAgICAgICA9IG1hY19lc3BfbWFwX3NnLAorCS51bm1hcF9zaW5nbGUgICAgID0gbWFjX2VzcF91bm1hcF9zaW5nbGUsCisJLnVubWFwX3NnICAgICAgICAgPSBtYWNfZXNwX3VubWFwX3NnLAorCS5pcnFfcGVuZGluZyAgICAgID0gbWFjX2VzcF9pcnFfcGVuZGluZywKKwkuZG1hX2xlbmd0aF9saW1pdCA9IG1hY19lc3BfZG1hX2xlbmd0aF9saW1pdCwKKwkucmVzZXRfZG1hICAgICAgICA9IG1hY19lc3BfcmVzZXRfZG1hLAorCS5kbWFfZHJhaW4gICAgICAgID0gbWFjX2VzcF9kbWFfZHJhaW4sCisJLmRtYV9pbnZhbGlkYXRlICAgPSBtYWNfZXNwX2RtYV9pbnZhbGlkYXRlLAorCS5zZW5kX2RtYV9jbWQgICAgID0gbWFjX2VzcF9zZW5kX3BkbWFfY21kLAorCS5kbWFfZXJyb3IgICAgICAgID0gbWFjX2VzcF9kbWFfZXJyb3IsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBlc3BfbWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICp0cG50ID0gJnNjc2lfZXNwX3RlbXBsYXRlOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CisJc3RydWN0IGVzcCAqZXNwOworCWludCBlcnI7CisJaW50IGNoaXBzX3ByZXNlbnQ7CisJc3RydWN0IG1hY19lc3BfcHJpdiAqbWVwOworCisJaWYgKCFNQUNIX0lTX01BQykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzd2l0Y2ggKG1hY2ludG9zaF9jb25maWctPnNjc2lfdHlwZSkgeworCWNhc2UgTUFDX1NDU0lfUVVBRFJBOgorCWNhc2UgTUFDX1NDU0lfUVVBRFJBMzoKKwkJY2hpcHNfcHJlc2VudCA9IDE7CisJCWJyZWFrOworCWNhc2UgTUFDX1NDU0lfUVVBRFJBMjoKKwkJaWYgKChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCA9PSBNQUNfTU9ERUxfUTkwMCkgfHwKKwkJICAgIChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCA9PSBNQUNfTU9ERUxfUTk1MCkpCisJCQljaGlwc19wcmVzZW50ID0gMjsKKwkJZWxzZQorCQkJY2hpcHNfcHJlc2VudCA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNoaXBzX3ByZXNlbnQgPSAwOworCX0KKworCWlmIChkZXYtPmlkICsgMSA+IGNoaXBzX3ByZXNlbnQpCisJCXJldHVybiAtRU5PREVWOworCisJaG9zdCA9IHNjc2lfaG9zdF9hbGxvYyh0cG50LCBzaXplb2Yoc3RydWN0IGVzcCkpOworCisJZXJyID0gLUVOT01FTTsKKwlpZiAoIWhvc3QpCisJCWdvdG8gZmFpbDsKKworCWhvc3QtPm1heF9pZCA9IDg7CisJaG9zdC0+dXNlX2NsdXN0ZXJpbmcgPSBESVNBQkxFX0NMVVNURVJJTkc7CisJZXNwID0gc2hvc3RfcHJpdihob3N0KTsKKworCWVzcC0+aG9zdCA9IGhvc3Q7CisJZXNwLT5kZXYgPSBkZXY7CisKKwllc3AtPmNvbW1hbmRfYmxvY2sgPSBremFsbG9jKDE2LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVzcC0+Y29tbWFuZF9ibG9jaykKKwkJZ290byBmYWlsX3VubGluazsKKwllc3AtPmNvbW1hbmRfYmxvY2tfZG1hID0gKGRtYV9hZGRyX3QpZXNwLT5jb21tYW5kX2Jsb2NrOworCisJZXNwLT5zY3NpX2lkID0gNzsKKwlob3N0LT50aGlzX2lkID0gZXNwLT5zY3NpX2lkOworCWVzcC0+c2NzaV9pZF9tYXNrID0gMSA8PCBlc3AtPnNjc2lfaWQ7CisKKwltZXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWFjX2VzcF9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtZXApCisJCWdvdG8gZmFpbF9mcmVlX2NvbW1hbmRfYmxvY2s7CisJbWVwLT5lc3AgPSBlc3A7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBtZXApOworCisJc3dpdGNoIChtYWNpbnRvc2hfY29uZmlnLT5zY3NpX3R5cGUpIHsKKwljYXNlIE1BQ19TQ1NJX1FVQURSQToKKwkJZXNwLT5jZnJlcSAgICAgPSAxNjUwMDAwMDsKKwkJZXNwLT5yZWdzICAgICAgPSAodm9pZCBfX2lvbWVtICopTUFDX0VTUF9SRUdTX1FVQURSQTsKKwkJbWVwLT5wZG1hX2lvICAgPSBlc3AtPnJlZ3MgKyBNQUNfRVNQX1BETUFfSU9fT0ZGU0VUOworCQltZXAtPnBkbWFfcmVncyA9IE5VTEw7CisJCWJyZWFrOworCWNhc2UgTUFDX1NDU0lfUVVBRFJBMjoKKwkJZXNwLT5jZnJlcSAgICAgPSAyNTAwMDAwMDsKKwkJZXNwLT5yZWdzICAgICAgPSAodm9pZCBfX2lvbWVtICopKE1BQ19FU1BfUkVHU19RVUFEUkEyICsKKwkJCQkgZGV2LT5pZCAqIE1BQ19FU1BfUkVHU19TUEFDSU5HKTsKKwkJbWVwLT5wZG1hX2lvICAgPSBlc3AtPnJlZ3MgKyBNQUNfRVNQX1BETUFfSU9fT0ZGU0VUOworCQltZXAtPnBkbWFfcmVncyA9ICh2b2lkIF9faW9tZW0gKikoTUFDX0VTUF9QRE1BX1JFRyArCisJCQkJIGRldi0+aWQgKiBNQUNfRVNQX1BETUFfUkVHX1NQQUNJTkcpOworCQludWJ1c193cml0ZWwoMHgxZDEsIG1lcC0+cGRtYV9yZWdzKTsKKwkJYnJlYWs7CisJY2FzZSBNQUNfU0NTSV9RVUFEUkEzOgorCQkvKiBUaGVzZSBxdWFkcmFzIGhhdmUgYSByZWFsIERNQSBjb250cm9sbGVyICh0aGUgUFNDKSBidXQgd2UKKwkJICogZG9uJ3Qga25vdyBob3cgdG8gZHJpdmUgaXQgc28gd2UgbXVzdCB1c2UgUElPIGluc3RlYWQuCisJCSAqLworCQllc3AtPmNmcmVxICAgICA9IDI1MDAwMDAwOworCQllc3AtPnJlZ3MgICAgICA9ICh2b2lkIF9faW9tZW0gKilNQUNfRVNQX1JFR1NfUVVBRFJBMzsKKwkJbWVwLT5wZG1hX2lvICAgPSBOVUxMOworCQltZXAtPnBkbWFfcmVncyA9IE5VTEw7CisJCWJyZWFrOworCX0KKworCWVzcC0+b3BzID0gJm1hY19lc3Bfb3BzOworCWlmIChtZXAtPnBkbWFfaW8gPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAidXNpbmcgUElPIGZvciBjb250cm9sbGVyICVkXG4iLCBkZXYtPmlkKTsKKwkJZXNwX3dyaXRlOCgwLCBFU1BfVENMT1cpOworCQllc3Bfd3JpdGU4KDAsIEVTUF9UQ01FRCk7CisJCWVzcC0+ZmxhZ3MgPSBFU1BfRkxBR19ESVNBQkxFX1NZTkM7CisJCW1hY19lc3Bfb3BzLnNlbmRfZG1hX2NtZCA9IG1hY19lc3Bfc2VuZF9waW9fY21kOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJ1c2luZyBQRE1BIGZvciBjb250cm9sbGVyICVkXG4iLCBkZXYtPmlkKTsKKwl9CisKKwlob3N0LT5pcnEgPSBJUlFfTUFDX1NDU0k7CisJZXJyID0gcmVxdWVzdF9pcnEoaG9zdC0+aXJxLCBzY3NpX2VzcF9pbnRyLCBJUlFGX1NIQVJFRCwgIk1hYyBFU1AiLAorCQkJICBlc3ApOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGZhaWxfZnJlZV9wcml2OworCisJZXJyID0gc2NzaV9lc3BfcmVnaXN0ZXIoZXNwLCAmZGV2LT5kZXYpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbF9mcmVlX2lycTsKKworCXJldHVybiAwOworCitmYWlsX2ZyZWVfaXJxOgorCWZyZWVfaXJxKGhvc3QtPmlycSwgZXNwKTsKK2ZhaWxfZnJlZV9wcml2OgorCWtmcmVlKG1lcCk7CitmYWlsX2ZyZWVfY29tbWFuZF9ibG9jazoKKwlrZnJlZShlc3AtPmNvbW1hbmRfYmxvY2spOworZmFpbF91bmxpbms6CisJc2NzaV9ob3N0X3B1dChob3N0KTsKK2ZhaWw6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgZXNwX21hY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtYWNfZXNwX3ByaXYgKm1lcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGVzcCAqZXNwID0gbWVwLT5lc3A7CisJdW5zaWduZWQgaW50IGlycSA9IGVzcC0+aG9zdC0+aXJxOworCisJc2NzaV9lc3BfdW5yZWdpc3Rlcihlc3ApOworCisJZnJlZV9pcnEoaXJxLCBlc3ApOworCisJa2ZyZWUobWVwKTsKKworCWtmcmVlKGVzcC0+Y29tbWFuZF9ibG9jayk7CisKKwlzY3NpX2hvc3RfcHV0KGVzcC0+aG9zdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZXNwX21hY19kcml2ZXIgPSB7CisJLnByb2JlICAgID0gZXNwX21hY19wcm9iZSwKKwkucmVtb3ZlICAgPSBfX2RldmV4aXRfcChlc3BfbWFjX3JlbW92ZSksCisJLmRyaXZlciAgID0geworCQkubmFtZSAgICAgPSBEUlZfTU9EVUxFX05BTUUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1hY19lc3BfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmVzcF9tYWNfZHJpdmVyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaW50ZXJuYWxfZXNwID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKERSVl9NT0RVTEVfTkFNRSwgMCk7CisJaWYgKGludGVybmFsX2VzcCAmJiBwbGF0Zm9ybV9kZXZpY2VfYWRkKGludGVybmFsX2VzcCkpIHsKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChpbnRlcm5hbF9lc3ApOworCQlpbnRlcm5hbF9lc3AgPSBOVUxMOworCX0KKworCWV4dGVybmFsX2VzcCA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhEUlZfTU9EVUxFX05BTUUsIDEpOworCWlmIChleHRlcm5hbF9lc3AgJiYgcGxhdGZvcm1fZGV2aWNlX2FkZChleHRlcm5hbF9lc3ApKSB7CisJCXBsYXRmb3JtX2RldmljZV9wdXQoZXh0ZXJuYWxfZXNwKTsKKwkJZXh0ZXJuYWxfZXNwID0gTlVMTDsKKwl9CisKKwlpZiAoaW50ZXJuYWxfZXNwIHx8IGV4dGVybmFsX2VzcCkgeworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXNwX21hY19kcml2ZXIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtYWNfZXNwX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXNwX21hY19kcml2ZXIpOworCisJaWYgKGludGVybmFsX2VzcCkgeworCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihpbnRlcm5hbF9lc3ApOworCQlpbnRlcm5hbF9lc3AgPSBOVUxMOworCX0KKwlpZiAoZXh0ZXJuYWxfZXNwKSB7CisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGV4dGVybmFsX2VzcCk7CisJCWV4dGVybmFsX2VzcCA9IE5VTEw7CisJfQorfQorCitNT0RVTEVfREVTQ1JJUFRJT04oIk1hYyBFU1AgU0NTSSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkZpbm4gVGhhaW4gPGZ0aGFpbkB0ZWxlZ3JhcGhpY3MuY29tLmF1PiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTHYyIik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CisKK21vZHVsZV9pbml0KG1hY19lc3BfaW5pdCk7Cittb2R1bGVfZXhpdChtYWNfZXNwX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKaW5kZXggZDYxZGYwMzYuLjI4NzY5MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYwpAQCAtNjA5LDggKzYwOSw4IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1xbGEyeDAwX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJICAgY2hhciAqYnVmKQorcWxhMngwMF9saW5rX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNoYXIgKmJ1ZikKIHsKIAlzY3NpX3FsYV9ob3N0X3QgKmhhID0gc2hvc3RfcHJpdihjbGFzc190b19zaG9zdChkZXYpKTsKIAlpbnQgbGVuID0gMDsKQEAgLTgxNCw3ICs4MTQsNyBAQAogc3RhdGljIERFVklDRV9BVFRSKG1vZGVsX25hbWUsIFNfSVJVR08sIHFsYTJ4MDBfbW9kZWxfbmFtZV9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihtb2RlbF9kZXNjLCBTX0lSVUdPLCBxbGEyeDAwX21vZGVsX2Rlc2Nfc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIocGNpX2luZm8sIFNfSVJVR08sIHFsYTJ4MDBfcGNpX2luZm9fc2hvdywgTlVMTCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIoc3RhdGUsIFNfSVJVR08sIHFsYTJ4MDBfc3RhdGVfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIobGlua19zdGF0ZSwgU19JUlVHTywgcWxhMngwMF9saW5rX3N0YXRlX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHppbywgU19JUlVHTyB8IFNfSVdVU1IsIHFsYTJ4MDBfemlvX3Nob3csIHFsYTJ4MDBfemlvX3N0b3JlKTsKIHN0YXRpYyBERVZJQ0VfQVRUUih6aW9fdGltZXIsIFNfSVJVR08gfCBTX0lXVVNSLCBxbGEyeDAwX3ppb190aW1lcl9zaG93LAogCQkgICBxbGEyeDAwX3ppb190aW1lcl9zdG9yZSk7CkBAIC04MzgsNyArODM4LDcgQEAKIAkmZGV2X2F0dHJfbW9kZWxfbmFtZSwKIAkmZGV2X2F0dHJfbW9kZWxfZGVzYywKIAkmZGV2X2F0dHJfcGNpX2luZm8sCi0JJmRldl9hdHRyX3N0YXRlLAorCSZkZXZfYXR0cl9saW5rX3N0YXRlLAogCSZkZXZfYXR0cl96aW8sCiAJJmRldl9hdHRyX3ppb190aW1lciwKIAkmZGV2X2F0dHJfYmVhY29uLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RiZy5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RiZy5jCmluZGV4IDlkMTJkOWYuLmNiZWY3ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGJnLmMKQEAgLTM4LDI4ICszOCwzOCBAQAogfQogCiBzdGF0aWMgaW50Ci1xbGEyNHh4X2R1bXBfbWVtb3J5KHNjc2lfcWxhX2hvc3RfdCAqaGEsIHVpbnQzMl90ICpjb2RlX3JhbSwKLSAgICB1aW50MzJfdCBjcmFtX3NpemUsIHVpbnQzMl90ICpleHRfbWVtLCB2b2lkICoqbnh0KQorcWxhMjR4eF9kdW1wX3JhbShzY3NpX3FsYV9ob3N0X3QgKmhhLCB1aW50MzJfdCBhZGRyLCB1aW50MzJfdCAqcmFtLAorICAgIHVpbnQzMl90IHJhbV9kd29yZHMsIHZvaWQgKipueHQpCiB7CiAJaW50IHJ2YWw7Ci0JdWludDMyX3QgY250LCBzdGF0LCB0aW1lciwgcmlzY19hZGRyZXNzLCBleHRfbWVtX2NudDsKLQl1aW50MTZfdCBtYls0XTsKKwl1aW50MzJfdCBjbnQsIHN0YXQsIHRpbWVyLCBkd29yZHMsIGlkeDsKKwl1aW50MTZfdCBtYjA7CiAJc3RydWN0IGRldmljZV9yZWdfMjR4eCBfX2lvbWVtICpyZWcgPSAmaGEtPmlvYmFzZS0+aXNwMjQ7CisJZG1hX2FkZHJfdCBkdW1wX2RtYSA9IGhhLT5naWRfbGlzdF9kbWE7CisJdWludDMyX3QgKmR1bXAgPSAodWludDMyX3QgKiloYS0+Z2lkX2xpc3Q7CiAKIAlydmFsID0gUUxBX1NVQ0NFU1M7Ci0JcmlzY19hZGRyZXNzID0gZXh0X21lbV9jbnQgPSAwOwotCW1lbXNldChtYiwgMCwgc2l6ZW9mKG1iKSk7CisJbWIwID0gMDsKIAotCS8qIENvZGUgUkFNLiAqLwotCXJpc2NfYWRkcmVzcyA9IDB4MjAwMDA7Ci0JV1JUX1JFR19XT1JEKCZyZWctPm1haWxib3gwLCBNQkNfUkVBRF9SQU1fRVhURU5ERUQpOworCVdSVF9SRUdfV09SRCgmcmVnLT5tYWlsYm94MCwgTUJDX0RVTVBfUklTQ19SQU1fRVhURU5ERUQpOwogCWNsZWFyX2JpdChNQlhfSU5URVJSVVBULCAmaGEtPm1ieF9jbWRfZmxhZ3MpOwogCi0JZm9yIChjbnQgPSAwOyBjbnQgPCBjcmFtX3NpemUgLyA0ICYmIHJ2YWwgPT0gUUxBX1NVQ0NFU1M7Ci0JICAgIGNudCsrLCByaXNjX2FkZHJlc3MrKykgewotCQlXUlRfUkVHX1dPUkQoJnJlZy0+bWFpbGJveDEsIExTVyhyaXNjX2FkZHJlc3MpKTsKLQkJV1JUX1JFR19XT1JEKCZyZWctPm1haWxib3g4LCBNU1cocmlzY19hZGRyZXNzKSk7Ci0JCVJEX1JFR19XT1JEKCZyZWctPm1haWxib3g4KTsKKwlkd29yZHMgPSBHSURfTElTVF9TSVpFIC8gNDsKKwlmb3IgKGNudCA9IDA7IGNudCA8IHJhbV9kd29yZHMgJiYgcnZhbCA9PSBRTEFfU1VDQ0VTUzsKKwkgICAgY250ICs9IGR3b3JkcywgYWRkciArPSBkd29yZHMpIHsKKwkJaWYgKGNudCArIGR3b3JkcyA+IHJhbV9kd29yZHMpCisJCQlkd29yZHMgPSByYW1fZHdvcmRzIC0gY250OworCisJCVdSVF9SRUdfV09SRCgmcmVnLT5tYWlsYm94MSwgTFNXKGFkZHIpKTsKKwkJV1JUX1JFR19XT1JEKCZyZWctPm1haWxib3g4LCBNU1coYWRkcikpOworCisJCVdSVF9SRUdfV09SRCgmcmVnLT5tYWlsYm94MiwgTVNXKGR1bXBfZG1hKSk7CisJCVdSVF9SRUdfV09SRCgmcmVnLT5tYWlsYm94MywgTFNXKGR1bXBfZG1hKSk7CisJCVdSVF9SRUdfV09SRCgmcmVnLT5tYWlsYm94NiwgTVNXKE1TRChkdW1wX2RtYSkpKTsKKwkJV1JUX1JFR19XT1JEKCZyZWctPm1haWxib3g3LCBMU1coTVNEKGR1bXBfZG1hKSkpOworCisJCVdSVF9SRUdfV09SRCgmcmVnLT5tYWlsYm94NCwgTVNXKGR3b3JkcykpOworCQlXUlRfUkVHX1dPUkQoJnJlZy0+bWFpbGJveDUsIExTVyhkd29yZHMpKTsKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5oY2NyLCBIQ0NSWF9TRVRfSE9TVF9JTlQpOwogCiAJCWZvciAodGltZXIgPSA2MDAwMDAwOyB0aW1lcjsgdGltZXItLSkgewpAQCAtNzMsOSArODMsNyBAQAogCQkJCQlzZXRfYml0KE1CWF9JTlRFUlJVUFQsCiAJCQkJCSAgICAmaGEtPm1ieF9jbWRfZmxhZ3MpOwogCi0JCQkJCW1iWzBdID0gUkRfUkVHX1dPUkQoJnJlZy0+bWFpbGJveDApOwotCQkJCQltYlsyXSA9IFJEX1JFR19XT1JEKCZyZWctPm1haWxib3gyKTsKLQkJCQkJbWJbM10gPSBSRF9SRUdfV09SRCgmcmVnLT5tYWlsYm94Myk7CisJCQkJCW1iMCA9IFJEX1JFR19XT1JEKCZyZWctPm1haWxib3gwKTsKIAogCQkJCQlXUlRfUkVHX0RXT1JEKCZyZWctPmhjY3IsCiAJCQkJCSAgICBIQ0NSWF9DTFJfUklTQ19JTlQpOwpAQCAtOTEsNjcgKzk5LDM0IEBACiAJCX0KIAogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KE1CWF9JTlRFUlJVUFQsICZoYS0+bWJ4X2NtZF9mbGFncykpIHsKLQkJCXJ2YWwgPSBtYlswXSAmIE1CU19NQVNLOwotCQkJY29kZV9yYW1bY250XSA9IGh0b25sKChtYlszXSA8PCAxNikgfCBtYlsyXSk7CisJCQlydmFsID0gbWIwICYgTUJTX01BU0s7CisJCQlmb3IgKGlkeCA9IDA7IGlkeCA8IGR3b3JkczsgaWR4KyspCisJCQkJcmFtW2NudCArIGlkeF0gPSBzd2FiMzIoZHVtcFtpZHhdKTsKIAkJfSBlbHNlIHsKIAkJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCQl9CiAJfQogCi0JaWYgKHJ2YWwgPT0gUUxBX1NVQ0NFU1MpIHsKLQkJLyogRXh0ZXJuYWwgTWVtb3J5LiAqLwotCQlyaXNjX2FkZHJlc3MgPSAweDEwMDAwMDsKLQkJZXh0X21lbV9jbnQgPSBoYS0+ZndfbWVtb3J5X3NpemUgLSAweDEwMDAwMCArIDE7Ci0JCVdSVF9SRUdfV09SRCgmcmVnLT5tYWlsYm94MCwgTUJDX1JFQURfUkFNX0VYVEVOREVEKTsKLQkJY2xlYXJfYml0KE1CWF9JTlRFUlJVUFQsICZoYS0+bWJ4X2NtZF9mbGFncyk7Ci0JfQotCWZvciAoY250ID0gMDsgY250IDwgZXh0X21lbV9jbnQgJiYgcnZhbCA9PSBRTEFfU1VDQ0VTUzsKLQkgICAgY250KyssIHJpc2NfYWRkcmVzcysrKSB7Ci0JCVdSVF9SRUdfV09SRCgmcmVnLT5tYWlsYm94MSwgTFNXKHJpc2NfYWRkcmVzcykpOwotCQlXUlRfUkVHX1dPUkQoJnJlZy0+bWFpbGJveDgsIE1TVyhyaXNjX2FkZHJlc3MpKTsKLQkJUkRfUkVHX1dPUkQoJnJlZy0+bWFpbGJveDgpOwotCQlXUlRfUkVHX0RXT1JEKCZyZWctPmhjY3IsIEhDQ1JYX1NFVF9IT1NUX0lOVCk7Ci0KLQkJZm9yICh0aW1lciA9IDYwMDAwMDA7IHRpbWVyOyB0aW1lci0tKSB7Ci0JCQkvKiBDaGVjayBmb3IgcGVuZGluZyBpbnRlcnJ1cHRzLiAqLwotCQkJc3RhdCA9IFJEX1JFR19EV09SRCgmcmVnLT5ob3N0X3N0YXR1cyk7Ci0JCQlpZiAoc3RhdCAmIEhTUlhfUklTQ19JTlQpIHsKLQkJCQlzdGF0ICY9IDB4ZmY7Ci0KLQkJCQlpZiAoc3RhdCA9PSAweDEgfHwgc3RhdCA9PSAweDIgfHwKLQkJCQkgICAgc3RhdCA9PSAweDEwIHx8IHN0YXQgPT0gMHgxMSkgewotCQkJCQlzZXRfYml0KE1CWF9JTlRFUlJVUFQsCi0JCQkJCSAgICAmaGEtPm1ieF9jbWRfZmxhZ3MpOwotCi0JCQkJCW1iWzBdID0gUkRfUkVHX1dPUkQoJnJlZy0+bWFpbGJveDApOwotCQkJCQltYlsyXSA9IFJEX1JFR19XT1JEKCZyZWctPm1haWxib3gyKTsKLQkJCQkJbWJbM10gPSBSRF9SRUdfV09SRCgmcmVnLT5tYWlsYm94Myk7Ci0KLQkJCQkJV1JUX1JFR19EV09SRCgmcmVnLT5oY2NyLAotCQkJCQkgICAgSENDUlhfQ0xSX1JJU0NfSU5UKTsKLQkJCQkJUkRfUkVHX0RXT1JEKCZyZWctPmhjY3IpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCQkvKiBDbGVhciB0aGlzIGludHI7IGl0IHdhc24ndCBhIG1haWxib3ggaW50ciAqLwotCQkJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aGNjciwgSENDUlhfQ0xSX1JJU0NfSU5UKTsKLQkJCQlSRF9SRUdfRFdPUkQoJnJlZy0+aGNjcik7Ci0JCQl9Ci0JCQl1ZGVsYXkoNSk7Ci0JCX0KLQotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KE1CWF9JTlRFUlJVUFQsICZoYS0+bWJ4X2NtZF9mbGFncykpIHsKLQkJCXJ2YWwgPSBtYlswXSAmIE1CU19NQVNLOwotCQkJZXh0X21lbVtjbnRdID0gaHRvbmwoKG1iWzNdIDw8IDE2KSB8IG1iWzJdKTsKLQkJfSBlbHNlIHsKLQkJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwotCQl9Ci0JfQotCi0JKm54dCA9IHJ2YWwgPT0gUUxBX1NVQ0NFU1MgPyAmZXh0X21lbVtjbnRdOiBOVUxMOworCSpueHQgPSBydmFsID09IFFMQV9TVUNDRVNTID8gJnJhbVtjbnRdOiBOVUxMOwogCXJldHVybiBydmFsOwogfQogCitzdGF0aWMgaW50CitxbGEyNHh4X2R1bXBfbWVtb3J5KHNjc2lfcWxhX2hvc3RfdCAqaGEsIHVpbnQzMl90ICpjb2RlX3JhbSwKKyAgICB1aW50MzJfdCBjcmFtX3NpemUsIHZvaWQgKipueHQpCit7CisJaW50IHJ2YWw7CisKKwkvKiBDb2RlIFJBTS4gKi8KKwlydmFsID0gcWxhMjR4eF9kdW1wX3JhbShoYSwgMHgyMDAwMCwgY29kZV9yYW0sIGNyYW1fc2l6ZSAvIDQsIG54dCk7CisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpCisJCXJldHVybiBydmFsOworCisJLyogRXh0ZXJuYWwgTWVtb3J5LiAqLworCXJldHVybiBxbGEyNHh4X2R1bXBfcmFtKGhhLCAweDEwMDAwMCwgKm54dCwKKwkgICAgaGEtPmZ3X21lbW9yeV9zaXplIC0gMHgxMDAwMDAgKyAxLCBueHQpOworfQorCiBzdGF0aWMgdWludDMyX3QgKgogcWxhMjR4eF9yZWFkX3dpbmRvdyhzdHJ1Y3QgZGV2aWNlX3JlZ18yNHh4IF9faW9tZW0gKnJlZywgdWludDMyX3QgaW9iYXNlLAogICAgIHVpbnQzMl90IGNvdW50LCB1aW50MzJfdCAqYnVmKQpAQCAtMjM5LDYgKzIxNCw5MCBAQAogCXJldHVybiBydmFsOwogfQogCitzdGF0aWMgaW50CitxbGEyeHh4X2R1bXBfcmFtKHNjc2lfcWxhX2hvc3RfdCAqaGEsIHVpbnQzMl90IGFkZHIsIHVpbnQxNl90ICpyYW0sCisgICAgdWludDE2X3QgcmFtX3dvcmRzLCB2b2lkICoqbnh0KQoreworCWludCBydmFsOworCXVpbnQzMl90IGNudCwgc3RhdCwgdGltZXIsIHdvcmRzLCBpZHg7CisJdWludDE2X3QgbWIwOworCXN0cnVjdCBkZXZpY2VfcmVnXzJ4eHggX19pb21lbSAqcmVnID0gJmhhLT5pb2Jhc2UtPmlzcDsKKwlkbWFfYWRkcl90IGR1bXBfZG1hID0gaGEtPmdpZF9saXN0X2RtYTsKKwl1aW50MTZfdCAqZHVtcCA9ICh1aW50MTZfdCAqKWhhLT5naWRfbGlzdDsKKworCXJ2YWwgPSBRTEFfU1VDQ0VTUzsKKwltYjAgPSAwOworCisJV1JUX01BSUxCT1hfUkVHKGhhLCByZWcsIDAsIE1CQ19EVU1QX1JJU0NfUkFNX0VYVEVOREVEKTsKKwljbGVhcl9iaXQoTUJYX0lOVEVSUlVQVCwgJmhhLT5tYnhfY21kX2ZsYWdzKTsKKworCXdvcmRzID0gR0lEX0xJU1RfU0laRSAvIDI7CisJZm9yIChjbnQgPSAwOyBjbnQgPCByYW1fd29yZHMgJiYgcnZhbCA9PSBRTEFfU1VDQ0VTUzsKKwkgICAgY250ICs9IHdvcmRzLCBhZGRyICs9IHdvcmRzKSB7CisJCWlmIChjbnQgKyB3b3JkcyA+IHJhbV93b3JkcykKKwkJCXdvcmRzID0gcmFtX3dvcmRzIC0gY250OworCisJCVdSVF9NQUlMQk9YX1JFRyhoYSwgcmVnLCAxLCBMU1coYWRkcikpOworCQlXUlRfTUFJTEJPWF9SRUcoaGEsIHJlZywgOCwgTVNXKGFkZHIpKTsKKworCQlXUlRfTUFJTEJPWF9SRUcoaGEsIHJlZywgMiwgTVNXKGR1bXBfZG1hKSk7CisJCVdSVF9NQUlMQk9YX1JFRyhoYSwgcmVnLCAzLCBMU1coZHVtcF9kbWEpKTsKKwkJV1JUX01BSUxCT1hfUkVHKGhhLCByZWcsIDYsIE1TVyhNU0QoZHVtcF9kbWEpKSk7CisJCVdSVF9NQUlMQk9YX1JFRyhoYSwgcmVnLCA3LCBMU1coTVNEKGR1bXBfZG1hKSkpOworCisJCVdSVF9NQUlMQk9YX1JFRyhoYSwgcmVnLCA0LCB3b3Jkcyk7CisJCVdSVF9SRUdfV09SRCgmcmVnLT5oY2NyLCBIQ0NSX1NFVF9IT1NUX0lOVCk7CisKKwkJZm9yICh0aW1lciA9IDYwMDAwMDA7IHRpbWVyOyB0aW1lci0tKSB7CisJCQkvKiBDaGVjayBmb3IgcGVuZGluZyBpbnRlcnJ1cHRzLiAqLworCQkJc3RhdCA9IFJEX1JFR19EV09SRCgmcmVnLT51LmlzcDIzMDAuaG9zdF9zdGF0dXMpOworCQkJaWYgKHN0YXQgJiBIU1JfUklTQ19JTlQpIHsKKwkJCQlzdGF0ICY9IDB4ZmY7CisKKwkJCQlpZiAoc3RhdCA9PSAweDEgfHwgc3RhdCA9PSAweDIpIHsKKwkJCQkJc2V0X2JpdChNQlhfSU5URVJSVVBULAorCQkJCQkgICAgJmhhLT5tYnhfY21kX2ZsYWdzKTsKKworCQkJCQltYjAgPSBSRF9NQUlMQk9YX1JFRyhoYSwgcmVnLCAwKTsKKworCQkJCQkvKiBSZWxlYXNlIG1haWxib3ggcmVnaXN0ZXJzLiAqLworCQkJCQlXUlRfUkVHX1dPUkQoJnJlZy0+c2VtYXBob3JlLCAwKTsKKwkJCQkJV1JUX1JFR19XT1JEKCZyZWctPmhjY3IsCisJCQkJCSAgICBIQ0NSX0NMUl9SSVNDX0lOVCk7CisJCQkJCVJEX1JFR19XT1JEKCZyZWctPmhjY3IpOworCQkJCQlicmVhazsKKwkJCQl9IGVsc2UgaWYgKHN0YXQgPT0gMHgxMCB8fCBzdGF0ID09IDB4MTEpIHsKKwkJCQkJc2V0X2JpdChNQlhfSU5URVJSVVBULAorCQkJCQkgICAgJmhhLT5tYnhfY21kX2ZsYWdzKTsKKworCQkJCQltYjAgPSBSRF9NQUlMQk9YX1JFRyhoYSwgcmVnLCAwKTsKKworCQkJCQlXUlRfUkVHX1dPUkQoJnJlZy0+aGNjciwKKwkJCQkJICAgIEhDQ1JfQ0xSX1JJU0NfSU5UKTsKKwkJCQkJUkRfUkVHX1dPUkQoJnJlZy0+aGNjcik7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCS8qIGNsZWFyIHRoaXMgaW50cjsgaXQgd2Fzbid0IGEgbWFpbGJveCBpbnRyICovCisJCQkJV1JUX1JFR19XT1JEKCZyZWctPmhjY3IsIEhDQ1JfQ0xSX1JJU0NfSU5UKTsKKwkJCQlSRF9SRUdfV09SRCgmcmVnLT5oY2NyKTsKKwkJCX0KKwkJCXVkZWxheSg1KTsKKwkJfQorCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTUJYX0lOVEVSUlVQVCwgJmhhLT5tYnhfY21kX2ZsYWdzKSkgeworCQkJcnZhbCA9IG1iMCAmIE1CU19NQVNLOworCQkJZm9yIChpZHggPSAwOyBpZHggPCB3b3JkczsgaWR4KyspCisJCQkJcmFtW2NudCArIGlkeF0gPSBzd2FiMTYoZHVtcFtpZHhdKTsKKwkJfSBlbHNlIHsKKwkJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOworCQl9CisJfQorCisJKm54dCA9IHJ2YWwgPT0gUUxBX1NVQ0NFU1MgPyAmcmFtW2NudF06IE5VTEw7CisJcmV0dXJuIHJ2YWw7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZAogcWxhMnh4eF9yZWFkX3dpbmRvdyhzdHJ1Y3QgZGV2aWNlX3JlZ18yeHh4IF9faW9tZW0gKnJlZywgdWludDMyX3QgY291bnQsCiAgICAgdWludDE2X3QgKmJ1ZikKQEAgLTI1OCwxOSArMzE3LDE0IEBACiBxbGEyMzAwX2Z3X2R1bXAoc2NzaV9xbGFfaG9zdF90ICpoYSwgaW50IGhhcmR3YXJlX2xvY2tlZCkKIHsKIAlpbnQJCXJ2YWw7Ci0JdWludDMyX3QJY250LCB0aW1lcjsKLQl1aW50MzJfdAlyaXNjX2FkZHJlc3M7Ci0JdWludDE2X3QJbWIwLCBtYjI7CisJdWludDMyX3QJY250OwogCi0JdWludDMyX3QJc3RhdDsKIAlzdHJ1Y3QgZGV2aWNlX3JlZ18yeHh4IF9faW9tZW0gKnJlZyA9ICZoYS0+aW9iYXNlLT5pc3A7CiAJdWludDE2X3QgX19pb21lbSAqZG1wX3JlZzsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCXN0cnVjdCBxbGEyMzAwX2Z3X2R1bXAJKmZ3OwotCXVpbnQzMl90CWRhdGFfcmFtX2NudDsKKwl2b2lkCQkqbnh0OwogCi0JcmlzY19hZGRyZXNzID0gZGF0YV9yYW1fY250ID0gMDsKLQltYjAgPSBtYjIgPSAwOwogCWZsYWdzID0gMDsKIAogCWlmICghaGFyZHdhcmVfbG9ja2VkKQpAQCAtMzg4LDE4NSArNDQyLDIzIEBACiAJCX0KIAl9CiAKLQlpZiAocnZhbCA9PSBRTEFfU1VDQ0VTUykgewotCQkvKiBHZXQgUklTQyBTUkFNLiAqLwotCQlyaXNjX2FkZHJlc3MgPSAweDgwMDsKLSAJCVdSVF9NQUlMQk9YX1JFRyhoYSwgcmVnLCAwLCBNQkNfUkVBRF9SQU1fV09SRCk7Ci0JCWNsZWFyX2JpdChNQlhfSU5URVJSVVBULCAmaGEtPm1ieF9jbWRfZmxhZ3MpOwotCX0KLQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZihmdy0+cmlzY19yYW0pIC8gMiAmJiBydmFsID09IFFMQV9TVUNDRVNTOwotCSAgICBjbnQrKywgcmlzY19hZGRyZXNzKyspIHsKLSAJCVdSVF9NQUlMQk9YX1JFRyhoYSwgcmVnLCAxLCAodWludDE2X3QpcmlzY19hZGRyZXNzKTsKLQkJV1JUX1JFR19XT1JEKCZyZWctPmhjY3IsIEhDQ1JfU0VUX0hPU1RfSU5UKTsKKwkvKiBHZXQgUklTQyBTUkFNLiAqLworCWlmIChydmFsID09IFFMQV9TVUNDRVNTKQorCQlydmFsID0gcWxhMnh4eF9kdW1wX3JhbShoYSwgMHg4MDAsIGZ3LT5yaXNjX3JhbSwKKwkJICAgIHNpemVvZihmdy0+cmlzY19yYW0pIC8gMiwgJm54dCk7CiAKLQkJZm9yICh0aW1lciA9IDYwMDAwMDA7IHRpbWVyOyB0aW1lci0tKSB7Ci0JCQkvKiBDaGVjayBmb3IgcGVuZGluZyBpbnRlcnJ1cHRzLiAqLwotIAkJCXN0YXQgPSBSRF9SRUdfRFdPUkQoJnJlZy0+dS5pc3AyMzAwLmhvc3Rfc3RhdHVzKTsKLQkJCWlmIChzdGF0ICYgSFNSX1JJU0NfSU5UKSB7Ci0JCQkJc3RhdCAmPSAweGZmOworCS8qIEdldCBzdGFjayBTUkFNLiAqLworCWlmIChydmFsID09IFFMQV9TVUNDRVNTKQorCQlydmFsID0gcWxhMnh4eF9kdW1wX3JhbShoYSwgMHgxMDAwMCwgZnctPnN0YWNrX3JhbSwKKwkJICAgIHNpemVvZihmdy0+c3RhY2tfcmFtKSAvIDIsICZueHQpOwogCi0JCQkJaWYgKHN0YXQgPT0gMHgxIHx8IHN0YXQgPT0gMHgyKSB7Ci0JCQkJCXNldF9iaXQoTUJYX0lOVEVSUlVQVCwKLQkJCQkJICAgICZoYS0+bWJ4X2NtZF9mbGFncyk7Ci0KLQkJCQkJbWIwID0gUkRfTUFJTEJPWF9SRUcoaGEsIHJlZywgMCk7Ci0JCQkJCW1iMiA9IFJEX01BSUxCT1hfUkVHKGhhLCByZWcsIDIpOwotCi0JCQkJCS8qIFJlbGVhc2UgbWFpbGJveCByZWdpc3RlcnMuICovCi0JCQkJCVdSVF9SRUdfV09SRCgmcmVnLT5zZW1hcGhvcmUsIDApOwotCQkJCQlXUlRfUkVHX1dPUkQoJnJlZy0+aGNjciwKLQkJCQkJICAgIEhDQ1JfQ0xSX1JJU0NfSU5UKTsKLQkJCQkJUkRfUkVHX1dPUkQoJnJlZy0+aGNjcik7Ci0JCQkJCWJyZWFrOwotCQkJCX0gZWxzZSBpZiAoc3RhdCA9PSAweDEwIHx8IHN0YXQgPT0gMHgxMSkgewotCQkJCQlzZXRfYml0KE1CWF9JTlRFUlJVUFQsCi0JCQkJCSAgICAmaGEtPm1ieF9jbWRfZmxhZ3MpOwotCi0JCQkJCW1iMCA9IFJEX01BSUxCT1hfUkVHKGhhLCByZWcsIDApOwotCQkJCQltYjIgPSBSRF9NQUlMQk9YX1JFRyhoYSwgcmVnLCAyKTsKLQotCQkJCQlXUlRfUkVHX1dPUkQoJnJlZy0+aGNjciwKLQkJCQkJICAgIEhDQ1JfQ0xSX1JJU0NfSU5UKTsKLQkJCQkJUkRfUkVHX1dPUkQoJnJlZy0+aGNjcik7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJCS8qIGNsZWFyIHRoaXMgaW50cjsgaXQgd2Fzbid0IGEgbWFpbGJveCBpbnRyICovCi0JCQkJV1JUX1JFR19XT1JEKCZyZWctPmhjY3IsIEhDQ1JfQ0xSX1JJU0NfSU5UKTsKLQkJCQlSRF9SRUdfV09SRCgmcmVnLT5oY2NyKTsKLQkJCX0KLQkJCXVkZWxheSg1KTsKLQkJfQotCi0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTUJYX0lOVEVSUlVQVCwgJmhhLT5tYnhfY21kX2ZsYWdzKSkgewotCQkJcnZhbCA9IG1iMCAmIE1CU19NQVNLOwotCQkJZnctPnJpc2NfcmFtW2NudF0gPSBodG9ucyhtYjIpOwotCQl9IGVsc2UgewotCQkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7Ci0JCX0KLQl9Ci0KLQlpZiAocnZhbCA9PSBRTEFfU1VDQ0VTUykgewotCQkvKiBHZXQgc3RhY2sgU1JBTS4gKi8KLQkJcmlzY19hZGRyZXNzID0gMHgxMDAwMDsKLSAJCVdSVF9NQUlMQk9YX1JFRyhoYSwgcmVnLCAwLCBNQkNfUkVBRF9SQU1fRVhURU5ERUQpOwotCQljbGVhcl9iaXQoTUJYX0lOVEVSUlVQVCwgJmhhLT5tYnhfY21kX2ZsYWdzKTsKLQl9Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplb2YoZnctPnN0YWNrX3JhbSkgLyAyICYmIHJ2YWwgPT0gUUxBX1NVQ0NFU1M7Ci0JICAgIGNudCsrLCByaXNjX2FkZHJlc3MrKykgewotIAkJV1JUX01BSUxCT1hfUkVHKGhhLCByZWcsIDEsIExTVyhyaXNjX2FkZHJlc3MpKTsKLSAJCVdSVF9NQUlMQk9YX1JFRyhoYSwgcmVnLCA4LCBNU1cocmlzY19hZGRyZXNzKSk7Ci0JCVdSVF9SRUdfV09SRCgmcmVnLT5oY2NyLCBIQ0NSX1NFVF9IT1NUX0lOVCk7Ci0KLQkJZm9yICh0aW1lciA9IDYwMDAwMDA7IHRpbWVyOyB0aW1lci0tKSB7Ci0JCQkvKiBDaGVjayBmb3IgcGVuZGluZyBpbnRlcnJ1cHRzLiAqLwotIAkJCXN0YXQgPSBSRF9SRUdfRFdPUkQoJnJlZy0+dS5pc3AyMzAwLmhvc3Rfc3RhdHVzKTsKLQkJCWlmIChzdGF0ICYgSFNSX1JJU0NfSU5UKSB7Ci0JCQkJc3RhdCAmPSAweGZmOwotCi0JCQkJaWYgKHN0YXQgPT0gMHgxIHx8IHN0YXQgPT0gMHgyKSB7Ci0JCQkJCXNldF9iaXQoTUJYX0lOVEVSUlVQVCwKLQkJCQkJICAgICZoYS0+bWJ4X2NtZF9mbGFncyk7Ci0KLQkJCQkJbWIwID0gUkRfTUFJTEJPWF9SRUcoaGEsIHJlZywgMCk7Ci0JCQkJCW1iMiA9IFJEX01BSUxCT1hfUkVHKGhhLCByZWcsIDIpOwotCi0JCQkJCS8qIFJlbGVhc2UgbWFpbGJveCByZWdpc3RlcnMuICovCi0JCQkJCVdSVF9SRUdfV09SRCgmcmVnLT5zZW1hcGhvcmUsIDApOwotCQkJCQlXUlRfUkVHX1dPUkQoJnJlZy0+aGNjciwKLQkJCQkJICAgIEhDQ1JfQ0xSX1JJU0NfSU5UKTsKLQkJCQkJUkRfUkVHX1dPUkQoJnJlZy0+aGNjcik7Ci0JCQkJCWJyZWFrOwotCQkJCX0gZWxzZSBpZiAoc3RhdCA9PSAweDEwIHx8IHN0YXQgPT0gMHgxMSkgewotCQkJCQlzZXRfYml0KE1CWF9JTlRFUlJVUFQsCi0JCQkJCSAgICAmaGEtPm1ieF9jbWRfZmxhZ3MpOwotCi0JCQkJCW1iMCA9IFJEX01BSUxCT1hfUkVHKGhhLCByZWcsIDApOwotCQkJCQltYjIgPSBSRF9NQUlMQk9YX1JFRyhoYSwgcmVnLCAyKTsKLQotCQkJCQlXUlRfUkVHX1dPUkQoJnJlZy0+aGNjciwKLQkJCQkJICAgIEhDQ1JfQ0xSX1JJU0NfSU5UKTsKLQkJCQkJUkRfUkVHX1dPUkQoJnJlZy0+aGNjcik7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJCS8qIGNsZWFyIHRoaXMgaW50cjsgaXQgd2Fzbid0IGEgbWFpbGJveCBpbnRyICovCi0JCQkJV1JUX1JFR19XT1JEKCZyZWctPmhjY3IsIEhDQ1JfQ0xSX1JJU0NfSU5UKTsKLQkJCQlSRF9SRUdfV09SRCgmcmVnLT5oY2NyKTsKLQkJCX0KLQkJCXVkZWxheSg1KTsKLQkJfQotCi0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTUJYX0lOVEVSUlVQVCwgJmhhLT5tYnhfY21kX2ZsYWdzKSkgewotCQkJcnZhbCA9IG1iMCAmIE1CU19NQVNLOwotCQkJZnctPnN0YWNrX3JhbVtjbnRdID0gaHRvbnMobWIyKTsKLQkJfSBlbHNlIHsKLQkJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwotCQl9Ci0JfQotCi0JaWYgKHJ2YWwgPT0gUUxBX1NVQ0NFU1MpIHsKLQkJLyogR2V0IGRhdGEgU1JBTS4gKi8KLQkJcmlzY19hZGRyZXNzID0gMHgxMTAwMDsKLQkJZGF0YV9yYW1fY250ID0gaGEtPmZ3X21lbW9yeV9zaXplIC0gcmlzY19hZGRyZXNzICsgMTsKLSAJCVdSVF9NQUlMQk9YX1JFRyhoYSwgcmVnLCAwLCBNQkNfUkVBRF9SQU1fRVhURU5ERUQpOwotCQljbGVhcl9iaXQoTUJYX0lOVEVSUlVQVCwgJmhhLT5tYnhfY21kX2ZsYWdzKTsKLQl9Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBkYXRhX3JhbV9jbnQgJiYgcnZhbCA9PSBRTEFfU1VDQ0VTUzsKLQkgICAgY250KyssIHJpc2NfYWRkcmVzcysrKSB7Ci0gCQlXUlRfTUFJTEJPWF9SRUcoaGEsIHJlZywgMSwgTFNXKHJpc2NfYWRkcmVzcykpOwotIAkJV1JUX01BSUxCT1hfUkVHKGhhLCByZWcsIDgsIE1TVyhyaXNjX2FkZHJlc3MpKTsKLQkJV1JUX1JFR19XT1JEKCZyZWctPmhjY3IsIEhDQ1JfU0VUX0hPU1RfSU5UKTsKLQotCQlmb3IgKHRpbWVyID0gNjAwMDAwMDsgdGltZXI7IHRpbWVyLS0pIHsKLQkJCS8qIENoZWNrIGZvciBwZW5kaW5nIGludGVycnVwdHMuICovCi0gCQkJc3RhdCA9IFJEX1JFR19EV09SRCgmcmVnLT51LmlzcDIzMDAuaG9zdF9zdGF0dXMpOwotCQkJaWYgKHN0YXQgJiBIU1JfUklTQ19JTlQpIHsKLQkJCQlzdGF0ICY9IDB4ZmY7Ci0KLQkJCQlpZiAoc3RhdCA9PSAweDEgfHwgc3RhdCA9PSAweDIpIHsKLQkJCQkJc2V0X2JpdChNQlhfSU5URVJSVVBULAotCQkJCQkgICAgJmhhLT5tYnhfY21kX2ZsYWdzKTsKLQotCQkJCQltYjAgPSBSRF9NQUlMQk9YX1JFRyhoYSwgcmVnLCAwKTsKLQkJCQkJbWIyID0gUkRfTUFJTEJPWF9SRUcoaGEsIHJlZywgMik7Ci0KLQkJCQkJLyogUmVsZWFzZSBtYWlsYm94IHJlZ2lzdGVycy4gKi8KLQkJCQkJV1JUX1JFR19XT1JEKCZyZWctPnNlbWFwaG9yZSwgMCk7Ci0JCQkJCVdSVF9SRUdfV09SRCgmcmVnLT5oY2NyLAotCQkJCQkgICAgSENDUl9DTFJfUklTQ19JTlQpOwotCQkJCQlSRF9SRUdfV09SRCgmcmVnLT5oY2NyKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfSBlbHNlIGlmIChzdGF0ID09IDB4MTAgfHwgc3RhdCA9PSAweDExKSB7Ci0JCQkJCXNldF9iaXQoTUJYX0lOVEVSUlVQVCwKLQkJCQkJICAgICZoYS0+bWJ4X2NtZF9mbGFncyk7Ci0KLQkJCQkJbWIwID0gUkRfTUFJTEJPWF9SRUcoaGEsIHJlZywgMCk7Ci0JCQkJCW1iMiA9IFJEX01BSUxCT1hfUkVHKGhhLCByZWcsIDIpOwotCi0JCQkJCVdSVF9SRUdfV09SRCgmcmVnLT5oY2NyLAotCQkJCQkgICAgSENDUl9DTFJfUklTQ19JTlQpOwotCQkJCQlSRF9SRUdfV09SRCgmcmVnLT5oY2NyKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQkJLyogY2xlYXIgdGhpcyBpbnRyOyBpdCB3YXNuJ3QgYSBtYWlsYm94IGludHIgKi8KLQkJCQlXUlRfUkVHX1dPUkQoJnJlZy0+aGNjciwgSENDUl9DTFJfUklTQ19JTlQpOwotCQkJCVJEX1JFR19XT1JEKCZyZWctPmhjY3IpOwotCQkJfQotCQkJdWRlbGF5KDUpOwotCQl9Ci0KLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChNQlhfSU5URVJSVVBULCAmaGEtPm1ieF9jbWRfZmxhZ3MpKSB7Ci0JCQlydmFsID0gbWIwICYgTUJTX01BU0s7Ci0JCQlmdy0+ZGF0YV9yYW1bY250XSA9IGh0b25zKG1iMik7Ci0JCX0gZWxzZSB7Ci0JCQlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKLQkJfQotCX0KKwkvKiBHZXQgZGF0YSBTUkFNLiAqLworCWlmIChydmFsID09IFFMQV9TVUNDRVNTKQorCQlydmFsID0gcWxhMnh4eF9kdW1wX3JhbShoYSwgMHgxMTAwMCwgZnctPmRhdGFfcmFtLAorCQkgICAgaGEtPmZ3X21lbW9yeV9zaXplIC0gMHgxMTAwMCArIDEsICZueHQpOwogCiAJaWYgKHJ2YWwgPT0gUUxBX1NVQ0NFU1MpCi0JCXFsYTJ4eHhfY29weV9xdWV1ZXMoaGEsICZmdy0+ZGF0YV9yYW1bY250XSk7CisJCXFsYTJ4eHhfY29weV9xdWV1ZXMoaGEsIG54dCk7CiAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCkBAIC0xMDEwLDcgKzkwMiw3IEBACiAJCWdvdG8gcWxhMjR4eF9md19kdW1wX2ZhaWxlZF8wOwogCiAJcnZhbCA9IHFsYTI0eHhfZHVtcF9tZW1vcnkoaGEsIGZ3LT5jb2RlX3JhbSwgc2l6ZW9mKGZ3LT5jb2RlX3JhbSksCi0JICAgIGZ3LT5leHRfbWVtLCAmbnh0KTsKKwkgICAgJm54dCk7CiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpCiAJCWdvdG8gcWxhMjR4eF9md19kdW1wX2ZhaWxlZF8wOwogCkBAIC0xMzE4LDcgKzEyMTAsNyBAQAogCQlnb3RvIHFsYTI1eHhfZndfZHVtcF9mYWlsZWRfMDsKIAogCXJ2YWwgPSBxbGEyNHh4X2R1bXBfbWVtb3J5KGhhLCBmdy0+Y29kZV9yYW0sIHNpemVvZihmdy0+Y29kZV9yYW0pLAotCSAgICBmdy0+ZXh0X21lbSwgJm54dCk7CisJICAgICZueHQpOwogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKQogCQlnb3RvIHFsYTI1eHhfZndfZHVtcF9mYWlsZWRfMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZncuaAppbmRleCAwNzhmMmExLi5jZjE5NDUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZncuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZncuaApAQCAtMTAzNiwyMiArMTAzNiw2IEBACiAJdWludDhfdCByZXNlcnZlZF8xOwogfTsKIAotIC8qCi0gKiBWaXJ0dWFsIEZhYnJpYyBJRCB0eXBlIGRlZmluaXRpb24uCi0gKi8KLXR5cGVkZWYgc3RydWN0IHZmX2lkIHsKLSAgICAgICAgdWludDE2X3QgaWQgOiAxMjsKLSAgICAgICAgdWludDE2X3QgcHJpb3JpdHkgOiA0OwotfSB2Zl9pZF90OwotCi0vKgotICogVmlydHVhbCBGYWJyaWMgSG9wQ3QgdHlwZSBkZWZpbml0aW9uLgotICovCi10eXBlZGVmIHN0cnVjdCB2Zl9ob3BjdCB7Ci0gICAgICAgIHVpbnQxNl90IHJlc2VydmVkIDogODsKLSAgICAgICAgdWludDE2X3QgaG9wY3QgOiA4OwotfSB2Zl9ob3BjdF90OwotCiAvKgogICogVmlydHVhbCBQb3J0IENvbnRyb2wgSU9DQgogICovCkBAIC0xMDgyLDEwICsxMDY2LDEwIEBACiAKIAl1aW50OF90IHZwX2lkeF9tYXBbMTZdOwogCXVpbnQxNl90IGZsYWdzOwotCXN0cnVjdCB2Zl9pZCAgICBpZDsKKwl1aW50MTZfdCBpZDsKIAl1aW50MTZfdCByZXNlcnZlZF80OwotCXN0cnVjdCB2Zl9ob3BjdCAgaG9wY3Q7Ci0JdWludDhfdCByZXNlcnZlZF81WzhdOworCXVpbnQxNl90IGhvcGN0OworCXVpbnQ4X3QgcmVzZXJ2ZWRfNVsyNF07CiB9OwogCiAvKgpAQCAtMTEzMiw5ICsxMTE2LDkgQEAKIAl1aW50MTZfdCByZXNlcnZlZF92cDI7CiAJdWludDhfdCBwb3J0X25hbWVfaWR4MltXV05fU0laRV07CiAJdWludDhfdCBub2RlX25hbWVfaWR4MltXV05fU0laRV07Ci0Jc3RydWN0IHZmX2lkICAgIGlkOworCXVpbnQxNl90IGlkOwogCXVpbnQxNl90IHJlc2VydmVkXzQ7Ci0Jc3RydWN0IHZmX2hvcGN0ICBob3BjdDsKKwl1aW50MTZfdCBob3BjdDsKIAl1aW50OF90IHJlc2VydmVkXzU7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKaW5kZXggNzZlYjRmZWMuLmY4ODI3MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKQEAgLTE1MiwxMCArMTUyLDYgQEAKIHFsYTJ4MDBfaXNzdWVfaW9jYihzY3NpX3FsYV9ob3N0X3QgKiwgdm9pZCAqLCBkbWFfYWRkcl90LCBzaXplX3QpOwogCiBleHRlcm4gaW50Ci1xbGEyeDAwX2lzc3VlX2lvY2JfdGltZW91dChzY3NpX3FsYV9ob3N0X3QgKiwgdm9pZCAqLCBkbWFfYWRkcl90LCBzaXplX3QsCi0gICAgdWludDMyX3QpOwotCi1leHRlcm4gaW50CiBxbGEyeDAwX2Fib3J0X2NvbW1hbmQoc2NzaV9xbGFfaG9zdF90ICosIHNyYl90ICopOwogCiBleHRlcm4gaW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ3MuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ncy5jCmluZGV4IDc1MGQ3ZWYuLjRjYjgwYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ncy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ncy5jCkBAIC0xNTgzLDggKzE1ODMsOCBAQAogCWVpdGVyLT50eXBlID0gX19jb25zdGFudF9jcHVfdG9fYmUxNihGRE1JX1BPUlRfTUFYX0ZSQU1FX1NJWkUpOwogCWVpdGVyLT5sZW4gPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KDQgKyA0KTsKIAltYXhfZnJhbWVfc2l6ZSA9IElTX0ZXSTJfQ0FQQUJMRShoYSkgPwotCQkodWludDMyX3QpIGljYjI0LT5mcmFtZV9wYXlsb2FkX3NpemU6Ci0JCSh1aW50MzJfdCkgaGEtPmluaXRfY2ItPmZyYW1lX3BheWxvYWRfc2l6ZTsKKwkgICAgbGUxNl90b19jcHUoaWNiMjQtPmZyYW1lX3BheWxvYWRfc2l6ZSk6CisJICAgIGxlMTZfdG9fY3B1KGhhLT5pbml0X2NiLT5mcmFtZV9wYXlsb2FkX3NpemUpOwogCWVpdGVyLT5hLm1heF9mcmFtZV9zaXplID0gY3B1X3RvX2JlMzIobWF4X2ZyYW1lX3NpemUpOwogCXNpemUgKz0gNCArIDQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCmluZGV4IDAxZTI2MDguLmJiYmM1YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYwpAQCAtMzY0NSw3ICszNjQ1LDcgQEAKIAlpZiAobGUxNl90b19jcHUobnYtPmxvZ2luX3RpbWVvdXQpIDwgNCkKIAkJbnYtPmxvZ2luX3RpbWVvdXQgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDQpOwogCWhhLT5sb2dpbl90aW1lb3V0ID0gbGUxNl90b19jcHUobnYtPmxvZ2luX3RpbWVvdXQpOwotCWljYi0+bG9naW5fdGltZW91dCA9IGNwdV90b19sZTE2KG52LT5sb2dpbl90aW1lb3V0KTsKKwlpY2ItPmxvZ2luX3RpbWVvdXQgPSBudi0+bG9naW5fdGltZW91dDsKIAogCS8qIFNldCBtaW5pbXVtIFJBVE9WIHRvIDEwMCB0ZW50aHMgb2YgYSBzZWNvbmQuICovCiAJaGEtPnJfYV90b3YgPSAxMDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKaW5kZXggMjg1NDc5Yi4uNWQ5YTY0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYwpAQCAtNDA5LDYgKzQwOSw3IEBACiAJCX0KIAogCQlzZXRfYml0KFJFR0lTVEVSX0ZDNF9ORUVERUQsICZoYS0+ZHBjX2ZsYWdzKTsKKwkJc2V0X2JpdChSRUdJU1RFUl9GRE1JX05FRURFRCwgJmhhLT5kcGNfZmxhZ3MpOwogCiAJCWhhLT5mbGFncy5tYW5hZ2VtZW50X3NlcnZlcl9sb2dnZWRfaW4gPSAwOwogCQlxbGEyeDAwX3Bvc3RfYWVuX3dvcmsoaGEsIEZDSF9FVlRfTElQLCBtYlsxXSk7CkBAIC00NTQsOCArNDU1LDYgQEAKIAogCQloYS0+ZmxhZ3MubWFuYWdlbWVudF9zZXJ2ZXJfbG9nZ2VkX2luID0gMDsKIAkJaGEtPmxpbmtfZGF0YV9yYXRlID0gUE9SVF9TUEVFRF9VTktOT1dOOwotCQlpZiAocWwyeGZkbWllbmFibGUpCi0JCQlzZXRfYml0KFJFR0lTVEVSX0ZETUlfTkVFREVELCAmaGEtPmRwY19mbGFncyk7CiAJCXFsYTJ4MDBfcG9zdF9hZW5fd29yayhoYSwgRkNIX0VWVF9MSU5LRE9XTiwgMCk7CiAJCWJyZWFrOwogCkBAIC01MTEsNiArNTEwLDcgQEAKIAkJCXNldF9iaXQoUkVTRVRfTUFSS0VSX05FRURFRCwgJmhhLT5kcGNfZmxhZ3MpOwogCQl9CiAJCXNldF9iaXQoUkVHSVNURVJfRkM0X05FRURFRCwgJmhhLT5kcGNfZmxhZ3MpOworCQlzZXRfYml0KFJFR0lTVEVSX0ZETUlfTkVFREVELCAmaGEtPmRwY19mbGFncyk7CiAKIAkJaGEtPmZsYWdzLmdwc2Nfc3VwcG9ydGVkID0gMTsKIAkJaGEtPmZsYWdzLm1hbmFnZW1lbnRfc2VydmVyX2xvZ2dlZF9pbiA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKaW5kZXggN2QwYThhNGMuLjIxMDA2MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKQEAgLTY4MSw3ICs2ODEsNyBAQAogICogQ29udGV4dDoKICAqCUtlcm5lbCBjb250ZXh0LgogICovCi1pbnQKK3N0YXRpYyBpbnQKIHFsYTJ4MDBfaXNzdWVfaW9jYl90aW1lb3V0KHNjc2lfcWxhX2hvc3RfdCAqaGEsIHZvaWQgKmJ1ZmZlciwKICAgICBkbWFfYWRkcl90IHBoeXNfYWRkciwgc2l6ZV90IHNpemUsIHVpbnQzMl90IHRvdikKIHsKQEAgLTc4NCw3ICs3ODQsNiBAQAogCQlERUJVRzJfM18xMShwcmludGsoInFsYTJ4MDBfYWJvcnRfY29tbWFuZCglbGQpOiBmYWlsZWQ9JXguXG4iLAogCQkgICAgaGEtPmhvc3Rfbm8sIHJ2YWwpKTsKIAl9IGVsc2UgewotCQlzcC0+ZmxhZ3MgfD0gU1JCX0FCT1JUX1BFTkRJTkc7CiAJCURFQlVHMTEocHJpbnRrKCJxbGEyeDAwX2Fib3J0X2NvbW1hbmQoJWxkKTogZG9uZS5cbiIsCiAJCSAgICBoYS0+aG9zdF9ubykpOwogCX0KQEAgLTE0NjksNyArMTQ2OCw3IEBACiAJbGctPnBvcnRfaWRbMF0gPSBhbF9wYTsKIAlsZy0+cG9ydF9pZFsxXSA9IGFyZWE7CiAJbGctPnBvcnRfaWRbMl0gPSBkb21haW47Ci0JbGctPnZwX2luZGV4ID0gY3B1X3RvX2xlMTYoaGEtPnZwX2lkeCk7CisJbGctPnZwX2luZGV4ID0gaGEtPnZwX2lkeDsKIAlydmFsID0gcWxhMngwMF9pc3N1ZV9pb2NiKGhhLCBsZywgbGdfZG1hLCAwKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB0byBpc3N1ZSBMb2dpbiBJT0NCICIKQEAgLTE3MjQsNyArMTcyMyw3IEBACiAJbGctPnBvcnRfaWRbMF0gPSBhbF9wYTsKIAlsZy0+cG9ydF9pZFsxXSA9IGFyZWE7CiAJbGctPnBvcnRfaWRbMl0gPSBkb21haW47Ci0JbGctPnZwX2luZGV4ID0gY3B1X3RvX2xlMTYoaGEtPnZwX2lkeCk7CisJbGctPnZwX2luZGV4ID0gaGEtPnZwX2lkeDsKIAlydmFsID0gcWxhMngwMF9pc3N1ZV9pb2NiKGhhLCBsZywgbGdfZG1hLCAwKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB0byBpc3N1ZSBMb2dvdXQgSU9DQiAiCkBAIC0yMjEwLDcgKzIyMDksNiBAQAogCQlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAl9IGVsc2UgewogCQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZG9uZS5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOwotCQlzcC0+ZmxhZ3MgfD0gU1JCX0FCT1JUX1BFTkRJTkc7CiAJfQogCiAJZG1hX3Bvb2xfZnJlZShoYS0+c19kbWFfcG9vbCwgYWJ0LCBhYnRfZG1hKTsKQEAgLTI2NDQsMTIgKzI2NDIsMTEgQEAKIAlzdHJ1Y3QgdnBfcnB0X2lkX2VudHJ5XzI0eHggKnJwdGlkX2VudHJ5KQogewogCXVpbnQ4X3QgdnBfaWR4OworCXVpbnQxNl90IHN0YXQgPSBsZTE2X3RvX2NwdShycHRpZF9lbnRyeS0+dnBfaWR4KTsKIAlzY3NpX3FsYV9ob3N0X3QgKnZoYTsKIAogCWlmIChycHRpZF9lbnRyeS0+ZW50cnlfc3RhdHVzICE9IDApCiAJCXJldHVybjsKLQlpZiAocnB0aWRfZW50cnktPmVudHJ5X3N0YXR1cyAhPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KENTX0NPTVBMRVRFKSkKLQkJcmV0dXJuOwogCiAJaWYgKHJwdGlkX2VudHJ5LT5mb3JtYXQgPT0gMCkgewogCQlERUJVRzE1KHByaW50aygiJXM6Zm9ybWF0IDAgOiBzY3NpKCVsZCkgbnVtYmVyIG9mIFZQcyBzZXR1cCAlZCwiCkBAIC0yNjU5LDE3ICsyNjU2LDE3IEBACiAJCQlycHRpZF9lbnRyeS0+cG9ydF9pZFsyXSwgcnB0aWRfZW50cnktPnBvcnRfaWRbMV0sCiAJCQlycHRpZF9lbnRyeS0+cG9ydF9pZFswXSkpOwogCX0gZWxzZSBpZiAocnB0aWRfZW50cnktPmZvcm1hdCA9PSAxKSB7Ci0JCXZwX2lkeCA9IExTQihycHRpZF9lbnRyeS0+dnBfaWR4KTsKKwkJdnBfaWR4ID0gTFNCKHN0YXQpOwogCQlERUJVRzE1KHByaW50aygiJXM6Zm9ybWF0IDE6IHNjc2koJWxkKTogVlBbJWRdIGVuYWJsZWQgIgogCQkgICAgIi0gc3RhdHVzICVkIC0gIgogCQkgICAgIndpdGggcG9ydCBpZCAlMDJ4JTAyeCUwMnhcbiIsX19mdW5jX18saGEtPmhvc3Rfbm8sCi0JCSAgICB2cF9pZHgsIE1TQihycHRpZF9lbnRyeS0+dnBfaWR4KSwKKwkJICAgIHZwX2lkeCwgTVNCKHN0YXQpLAogCQkgICAgcnB0aWRfZW50cnktPnBvcnRfaWRbMl0sIHJwdGlkX2VudHJ5LT5wb3J0X2lkWzFdLAogCQkgICAgcnB0aWRfZW50cnktPnBvcnRfaWRbMF0pKTsKIAkJaWYgKHZwX2lkeCA9PSAwKQogCQkJcmV0dXJuOwogCi0JCWlmIChNU0IocnB0aWRfZW50cnktPnZwX2lkeCkgPT0gMSkKKwkJaWYgKE1TQihzdGF0KSA9PSAxKQogCQkJcmV0dXJuOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkodmhhLCAmaGEtPnZwX2xpc3QsIHZwX2xpc3QpCkBAIC0yOTgyLDggKzI5NzksOCBAQAogCS8qIFdlIHVwZGF0ZSB0aGUgZmlybXdhcmUgd2l0aCBvbmx5IG9uZSBkYXRhIHNlcXVlbmNlLiAqLwogCW9wdGlvbnMgfD0gVkNPX0VORF9PRl9EQVRBOwogCi0JcmV0cnkgPSAwOwogCWRvIHsKKwkJcmV0cnkgPSAwOwogCQltZW1zZXQobW4sIDAsIHNpemVvZigqbW4pKTsKIAkJbW4tPnAucmVxLmVudHJ5X3R5cGUgPSBWRVJJRllfQ0hJUF9JT0NCX1RZUEU7CiAJCW1uLT5wLnJlcS5lbnRyeV9jb3VudCA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCmluZGV4IDhiMzNiMTYuLjMyMjNmZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCkBAIC02Nyw3ICs2Nyw3IEBACiAKIHN0YXRpYyB2b2lkIHFsYTJ4MDBfY29uZmlnX2RtYV9hZGRyZXNzaW5nKHNjc2lfcWxhX2hvc3RfdCAqaGEpOwogCi1pbnQgcWwyeGZkbWllbmFibGU7CitpbnQgcWwyeGZkbWllbmFibGU9MTsKIG1vZHVsZV9wYXJhbShxbDJ4ZmRtaWVuYWJsZSwgaW50LCBTX0lSVUdPfFNfSVJVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhxbDJ4ZmRtaWVuYWJsZSwKIAkJIkVuYWJsZXMgRkRNSSByZWdpc3RyYXRvbnMgIgpAQCAtMjEzNSw3ICsyMTM1LDcgQEAKIAlrZnJlZShoYS0+bnZyYW0pOwogfQogCi1zdHJ1Y3QgcWxhX3dvcmtfZXZ0ICoKK3N0YXRpYyBzdHJ1Y3QgcWxhX3dvcmtfZXZ0ICoKIHFsYTJ4MDBfYWxsb2Nfd29yayhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsIGVudW0gcWxhX3dvcmtfdHlwZSB0eXBlLAogICAgIGludCBsb2NrZWQpCiB7CkBAIC0yMTUyLDcgKzIxNTIsNyBAQAogCXJldHVybiBlOwogfQogCi1pbnQKK3N0YXRpYyBpbnQKIHFsYTJ4MDBfcG9zdF93b3JrKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwgc3RydWN0IHFsYV93b3JrX2V2dCAqZSwgaW50IGxvY2tlZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjM3Myw3ICsyMzczLDcgQEAKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCWZjcG9ydC0+bG9naW5fcmV0cnkgPSAwOwogCQkJCQl9Ci0JCQkJCWlmIChmY3BvcnQtPmxvZ2luX3JldHJ5ID09IDApCisJCQkJCWlmIChmY3BvcnQtPmxvZ2luX3JldHJ5ID09IDAgJiYgc3RhdHVzICE9IFFMQV9TVUNDRVNTKQogCQkJCQkJZmNwb3J0LT5sb29wX2lkID0gRkNfTk9fTE9PUF9JRDsKIAkJCQl9CiAJCQkJaWYgKHRlc3RfYml0KExPT1BfUkVTWU5DX05FRURFRCwgJmhhLT5kcGNfZmxhZ3MpKQpAQCAtMjU5OSw2ICsyNTk5LDEwIEBACiAJCXN0YXJ0X2RwYysrOwogCX0KIAorCS8qIFByb2Nlc3MgYW55IGRlZmVycmVkIHdvcmsuICovCisJaWYgKCFsaXN0X2VtcHR5KCZoYS0+d29ya19saXN0KSkKKwkJc3RhcnRfZHBjKys7CisKIAkvKiBTY2hlZHVsZSB0aGUgRFBDIHJvdXRpbmUgaWYgbmVlZGVkICovCiAJaWYgKCh0ZXN0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmaGEtPmRwY19mbGFncykgfHwKIAkgICAgdGVzdF9iaXQoTE9PUF9SRVNZTkNfTkVFREVELCAmaGEtPmRwY19mbGFncykgfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oCmluZGV4IGY0MmYxN2EuLmFmZWFlMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaApAQCAtNyw3ICs3LDcgQEAKIC8qCiAgKiBEcml2ZXIgdmVyc2lvbgogICovCi0jZGVmaW5lIFFMQTJYWFhfVkVSU0lPTiAgICAgICI4LjAyLjAxLWsxIgorI2RlZmluZSBRTEEyWFhYX1ZFUlNJT04gICAgICAiOC4wMi4wMS1rMiIKIAogI2RlZmluZSBRTEFfRFJJVkVSX01BSk9SX1ZFUgk4CiAjZGVmaW5lIFFMQV9EUklWRVJfTUlOT1JfVkVSCTIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaAppbmRleCAzZjM0ZTkzLi5iMzNlNzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9wcml2LmgKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfcHJpdi5oCkBAIC0xMjEsNiArMTIxLDcgQEAKIGV4dGVybiB2b2lkIF9fc2NzaV9yZW1vdmVfZGV2aWNlKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKIAogZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBzY3NpX2J1c190eXBlOworZXh0ZXJuIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnNjc2lfc3lzZnNfc2hvc3RfYXR0cl9ncm91cHNbXTsKIAogLyogc2NzaV9uZXRsaW5rLmMgKi8KICNpZmRlZiBDT05GSUdfU0NTSV9ORVRMSU5LCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9wcm9jLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9wcm9jLmMKaW5kZXggZWQzOTUxNS4uM2ExYzk5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfcHJvYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3Byb2MuYwpAQCAtMTkwLDEwICsxOTAsMTQgQEAKICAqLwogc3RhdGljIGludCBwcm9jX3ByaW50X3Njc2lkZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OwogCXN0cnVjdCBzZXFfZmlsZSAqcyA9IGRhdGE7CiAJaW50IGk7CiAKKwlpZiAoIXNjc2lfaXNfc2Rldl9kZXZpY2UoZGV2KSkKKwkJZ290byBvdXQ7CisKKwlzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsKIAlzZXFfcHJpbnRmKHMsCiAJCSJIb3N0OiBzY3NpJWQgQ2hhbm5lbDogJTAyZCBJZDogJTAyZCBMdW46ICUwMmRcbiAgVmVuZG9yOiAiLAogCQlzZGV2LT5ob3N0LT5ob3N0X25vLCBzZGV2LT5jaGFubmVsLCBzZGV2LT5pZCwgc2Rldi0+bHVuKTsKQEAgLTIzMCw2ICsyMzQsNyBAQAogCWVsc2UKIAkJc2VxX3ByaW50ZihzLCAiXG4iKTsKIAorb3V0OgogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKaW5kZXggZTY3YzE0ZS4uZmNkNzQ1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwpAQCAtMzIyLDYgKzMyMiwyMSBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgdm9pZCBzY3NpX3RhcmdldF9kZXN0cm95KHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc3RhcmdldC0+ZGV2OworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KGRldi0+cGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKGRldik7CisJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCWlmIChzaG9zdC0+aG9zdHQtPnRhcmdldF9kZXN0cm95KQorCQlzaG9zdC0+aG9zdHQtPnRhcmdldF9kZXN0cm95KHN0YXJnZXQpOworCWxpc3RfZGVsX2luaXQoJnN0YXJnZXQtPnNpYmxpbmdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlwdXRfZGV2aWNlKGRldik7Cit9CisKIHN0YXRpYyB2b2lkIHNjc2lfdGFyZ2V0X2Rldl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQgPSBkZXYtPnBhcmVudDsKQEAgLTMzMSw5ICszNDYsMTQgQEAKIAlwdXRfZGV2aWNlKHBhcmVudCk7CiB9CiAKK3N0cnVjdCBkZXZpY2VfdHlwZSBzY3NpX3RhcmdldF90eXBlID0geworCS5uYW1lID0JCSJzY3NpX3RhcmdldCIsCisJLnJlbGVhc2UgPQlzY3NpX3RhcmdldF9kZXZfcmVsZWFzZSwKK307CisKIGludCBzY3NpX2lzX3RhcmdldF9kZXZpY2UoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2KQogewotCXJldHVybiBkZXYtPnJlbGVhc2UgPT0gc2NzaV90YXJnZXRfZGV2X3JlbGVhc2U7CisJcmV0dXJuIGRldi0+dHlwZSA9PSAmc2NzaV90YXJnZXRfdHlwZTsKIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9pc190YXJnZXRfZGV2aWNlKTsKIApAQCAtMzkxLDE0ICs0MTEsMTcgQEAKIAlkZXZpY2VfaW5pdGlhbGl6ZShkZXYpOwogCXN0YXJnZXQtPnJlYXBfcmVmID0gMTsKIAlkZXYtPnBhcmVudCA9IGdldF9kZXZpY2UocGFyZW50KTsKLQlkZXYtPnJlbGVhc2UgPSBzY3NpX3RhcmdldF9kZXZfcmVsZWFzZTsKIAlzcHJpbnRmKGRldi0+YnVzX2lkLCAidGFyZ2V0JWQ6JWQ6JWQiLAogCQlzaG9zdC0+aG9zdF9ubywgY2hhbm5lbCwgaWQpOworI2lmbmRlZiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRAorCWRldi0+YnVzID0gJnNjc2lfYnVzX3R5cGU7CisjZW5kaWYKKwlkZXYtPnR5cGUgPSAmc2NzaV90YXJnZXRfdHlwZTsKIAlzdGFyZ2V0LT5pZCA9IGlkOwogCXN0YXJnZXQtPmNoYW5uZWwgPSBjaGFubmVsOwogCUlOSVRfTElTVF9IRUFEKCZzdGFyZ2V0LT5zaWJsaW5ncyk7CiAJSU5JVF9MSVNUX0hFQUQoJnN0YXJnZXQtPmRldmljZXMpOwotCXN0YXJnZXQtPnN0YXRlID0gU1RBUkdFVF9SVU5OSU5HOworCXN0YXJnZXQtPnN0YXRlID0gU1RBUkdFVF9DUkVBVEVEOwogCXN0YXJnZXQtPnNjc2lfbGV2ZWwgPSBTQ1NJXzI7CiAgcmV0cnk6CiAJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwpAQCAtNDExLDE4ICs0MzQsNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCS8qIGFsbG9jYXRlIGFuZCBhZGQgKi8KIAl0cmFuc3BvcnRfc2V0dXBfZGV2aWNlKGRldik7Ci0JZXJyb3IgPSBkZXZpY2VfYWRkKGRldik7Ci0JaWYgKGVycm9yKSB7Ci0JCWRldl9lcnIoZGV2LCAidGFyZ2V0IGRldmljZV9hZGQgZmFpbGVkLCBlcnJvciAlZFxuIiwgZXJyb3IpOwotCQlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0JCWxpc3RfZGVsX2luaXQoJnN0YXJnZXQtPnNpYmxpbmdzKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0JCXRyYW5zcG9ydF9kZXN0cm95X2RldmljZShkZXYpOwotCQlwdXRfZGV2aWNlKHBhcmVudCk7Ci0JCWtmcmVlKHN0YXJnZXQpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JdHJhbnNwb3J0X2FkZF9kZXZpY2UoZGV2KTsKIAlpZiAoc2hvc3QtPmhvc3R0LT50YXJnZXRfYWxsb2MpIHsKIAkJZXJyb3IgPSBzaG9zdC0+aG9zdHQtPnRhcmdldF9hbGxvYyhzdGFyZ2V0KTsKIApAQCAtNDMwLDkgKzQ0MSw3IEBACiAJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCBkZXYsICJ0YXJnZXQgYWxsb2NhdGlvbiBmYWlsZWQsIGVycm9yICVkXG4iLCBlcnJvcik7CiAJCQkvKiBkb24ndCB3YW50IHNjc2lfdGFyZ2V0X3JlYXAgdG8gZG8gdGhlIGZpbmFsCiAJCQkgKiBwdXQgYmVjYXVzZSBpdCB3aWxsIGJlIHVuZGVyIHRoZSBob3N0IGxvY2sgKi8KLQkJCWdldF9kZXZpY2UoZGV2KTsKLQkJCXNjc2lfdGFyZ2V0X3JlYXAoc3RhcmdldCk7Ci0JCQlwdXRfZGV2aWNlKGRldik7CisJCQlzY3NpX3RhcmdldF9kZXN0cm95KHN0YXJnZXQpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAl9CkBAIC00NTksMTggKzQ2OCwxMCBAQAogewogCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc2NzaV90YXJnZXQsIGV3LndvcmspOwotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KHN0YXJnZXQtPmRldi5wYXJlbnQpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAl0cmFuc3BvcnRfcmVtb3ZlX2RldmljZSgmc3RhcmdldC0+ZGV2KTsKIAlkZXZpY2VfZGVsKCZzdGFyZ2V0LT5kZXYpOwotCXRyYW5zcG9ydF9kZXN0cm95X2RldmljZSgmc3RhcmdldC0+ZGV2KTsKLQlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0JaWYgKHNob3N0LT5ob3N0dC0+dGFyZ2V0X2Rlc3Ryb3kpCi0JCXNob3N0LT5ob3N0dC0+dGFyZ2V0X2Rlc3Ryb3koc3RhcmdldCk7Ci0JbGlzdF9kZWxfaW5pdCgmc3RhcmdldC0+c2libGluZ3MpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCXB1dF9kZXZpY2UoJnN0YXJnZXQtPmRldik7CisJc2NzaV90YXJnZXRfZGVzdHJveShzdGFyZ2V0KTsKIH0KIAogLyoqCkBAIC00ODUsMjEgKzQ4NiwyNSBAQAogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KHN0YXJnZXQtPmRldi5wYXJlbnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJZW51bSBzY3NpX3RhcmdldF9zdGF0ZSBzdGF0ZTsKKwlpbnQgZW1wdHk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoLS1zdGFyZ2V0LT5yZWFwX3JlZiA9PSAwICYmIGxpc3RfZW1wdHkoJnN0YXJnZXQtPmRldmljZXMpKSB7Ci0JCUJVR19PTihzdGFyZ2V0LT5zdGF0ZSA9PSBTVEFSR0VUX0RFTCk7Ci0JCXN0YXJnZXQtPnN0YXRlID0gU1RBUkdFVF9ERUw7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCQlleGVjdXRlX2luX3Byb2Nlc3NfY29udGV4dChzY3NpX3RhcmdldF9yZWFwX3VzZXJjb250ZXh0LAotCQkJCQkgICAmc3RhcmdldC0+ZXcpOwotCQlyZXR1cm47Ci0KLQl9CisJc3RhdGUgPSBzdGFyZ2V0LT5zdGF0ZTsKKwllbXB0eSA9IC0tc3RhcmdldC0+cmVhcF9yZWYgPT0gMCAmJgorCQlsaXN0X2VtcHR5KCZzdGFyZ2V0LT5kZXZpY2VzKSA/IDEgOiAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuOworCWlmICghZW1wdHkpCisJCXJldHVybjsKKworCUJVR19PTihzdGF0ZSA9PSBTVEFSR0VUX0RFTCk7CisJc3RhcmdldC0+c3RhdGUgPSBTVEFSR0VUX0RFTDsKKwlpZiAoc3RhdGUgPT0gU1RBUkdFVF9DUkVBVEVEKQorCQlzY3NpX3RhcmdldF9kZXN0cm95KHN0YXJnZXQpOworCWVsc2UKKwkJZXhlY3V0ZV9pbl9wcm9jZXNzX2NvbnRleHQoc2NzaV90YXJnZXRfcmVhcF91c2VyY29udGV4dCwKKwkJCQkJICAgJnN0YXJnZXQtPmV3KTsKIH0KIAogLyoqCkBAIC0xMDQ4LDggKzEwNTMsOSBAQAogCQkJCQlzY3NpX2lucV9zdHIodmVuZCwgcmVzdWx0LCA4LCAxNiksCiAJCQkJCXNjc2lfaW5xX3N0cihtb2QsIHJlc3VsdCwgMTYsIDMyKSk7CiAJCQl9KTsKKwogCQl9Ci0JCQorCiAJCXJlcyA9IFNDU0lfU0NBTl9UQVJHRVRfUFJFU0VOVDsKIAkJZ290byBvdXRfZnJlZV9yZXN1bHQ7CiAJfQpAQCAtMTQ4OSw3ICsxNDk1LDYgQEAKIAlpZiAoc2NzaV9ob3N0X3NjYW5fYWxsb3dlZChzaG9zdCkpCiAJCXNjc2lfcHJvYmVfYW5kX2FkZF9sdW4oc3RhcmdldCwgbHVuLCBOVUxMLCAmc2RldiwgMSwgaG9zdGRhdGEpOwogCW11dGV4X3VubG9jaygmc2hvc3QtPnNjYW5fbXV0ZXgpOwotCXRyYW5zcG9ydF9jb25maWd1cmVfZGV2aWNlKCZzdGFyZ2V0LT5kZXYpOwogCXNjc2lfdGFyZ2V0X3JlYXAoc3RhcmdldCk7CiAJcHV0X2RldmljZSgmc3RhcmdldC0+ZGV2KTsKIApAQCAtMTU3MCw3ICsxNTc1LDYgQEAKICBvdXRfcmVhcDoKIAkvKiBub3cgZGV0ZXJtaW5lIGlmIHRoZSB0YXJnZXQgaGFzIGFueSBjaGlsZHJlbiBhdCBhbGwKIAkgKiBhbmQgaWYgbm90LCBudWtlIGl0ICovCi0JdHJhbnNwb3J0X2NvbmZpZ3VyZV9kZXZpY2UoJnN0YXJnZXQtPmRldik7CiAJc2NzaV90YXJnZXRfcmVhcChzdGFyZ2V0KTsKIAogCXB1dF9kZXZpY2UoJnN0YXJnZXQtPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwppbmRleCA2N2JiMjBlLi4wNDkxMDNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlICJzY3NpX3ByaXYuaCIKICNpbmNsdWRlICJzY3NpX2xvZ2dpbmcuaCIKIAorc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSBzY3NpX2Rldl90eXBlOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAllbnVtIHNjc2lfZGV2aWNlX3N0YXRlCXZhbHVlOwogCWNoYXIJCQkqbmFtZTsKQEAgLTI0OSwxOCArMjUxLDI3IEBACiBzaG9zdF9yZF9hdHRyKHVuY2hlY2tlZF9pc2FfZG1hLCAiJWRcbiIpOwogc2hvc3RfcmRfYXR0cjIocHJvY19uYW1lLCBob3N0dC0+cHJvY19uYW1lLCAiJXNcbiIpOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKnNjc2lfc3lzZnNfc2hvc3RfYXR0cnNbXSA9IHsKLQkmZGV2X2F0dHJfdW5pcXVlX2lkLAotCSZkZXZfYXR0cl9ob3N0X2J1c3ksCi0JJmRldl9hdHRyX2NtZF9wZXJfbHVuLAotCSZkZXZfYXR0cl9jYW5fcXVldWUsCi0JJmRldl9hdHRyX3NnX3RhYmxlc2l6ZSwKLQkmZGV2X2F0dHJfdW5jaGVja2VkX2lzYV9kbWEsCi0JJmRldl9hdHRyX3Byb2NfbmFtZSwKLQkmZGV2X2F0dHJfc2NhbiwKLQkmZGV2X2F0dHJfaHN0YXRlLAotCSZkZXZfYXR0cl9zdXBwb3J0ZWRfbW9kZSwKLQkmZGV2X2F0dHJfYWN0aXZlX21vZGUsCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqc2NzaV9zeXNmc19zaG9zdF9hdHRyc1tdID0geworCSZkZXZfYXR0cl91bmlxdWVfaWQuYXR0ciwKKwkmZGV2X2F0dHJfaG9zdF9idXN5LmF0dHIsCisJJmRldl9hdHRyX2NtZF9wZXJfbHVuLmF0dHIsCisJJmRldl9hdHRyX2Nhbl9xdWV1ZS5hdHRyLAorCSZkZXZfYXR0cl9zZ190YWJsZXNpemUuYXR0ciwKKwkmZGV2X2F0dHJfdW5jaGVja2VkX2lzYV9kbWEuYXR0ciwKKwkmZGV2X2F0dHJfcHJvY19uYW1lLmF0dHIsCisJJmRldl9hdHRyX3NjYW4uYXR0ciwKKwkmZGV2X2F0dHJfaHN0YXRlLmF0dHIsCisJJmRldl9hdHRyX3N1cHBvcnRlZF9tb2RlLmF0dHIsCisJJmRldl9hdHRyX2FjdGl2ZV9tb2RlLmF0dHIsCisJTlVMTAorfTsKKworc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBzY3NpX3Nob3N0X2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0Jc2NzaV9zeXNmc19zaG9zdF9hdHRycywKK307CisKK3N0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnNjc2lfc3lzZnNfc2hvc3RfYXR0cl9ncm91cHNbXSA9IHsKKwkmc2NzaV9zaG9zdF9hdHRyX2dyb3VwLAogCU5VTEwKIH07CiAKQEAgLTMzNSw3ICszNDYsMTIgQEAKIC8qIGFsbCBwcm9iaW5nIGlzIGRvbmUgaW4gdGhlIGluZGl2aWR1YWwgLT5wcm9iZSByb3V0aW5lcyAqLwogc3RhdGljIGludCBzY3NpX2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpnZW5kcnYpCiB7Ci0Jc3RydWN0IHNjc2lfZGV2aWNlICpzZHAgPSB0b19zY3NpX2RldmljZShkZXYpOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RwOworCisJaWYgKGRldi0+dHlwZSAhPSAmc2NzaV9kZXZfdHlwZSkKKwkJcmV0dXJuIDA7CisKKwlzZHAgPSB0b19zY3NpX2RldmljZShkZXYpOwogCWlmIChzZHAtPm5vX3VsZF9hdHRhY2gpCiAJCXJldHVybiAwOwogCXJldHVybiAoc2RwLT5pbnFfcGVyaXBoX3F1YWwgPT0gU0NTSV9JTlFfUFFfQ09OKT8gMTogMDsKQEAgLTM1MSwxMCArMzY3LDE2IEBACiAKIHN0YXRpYyBpbnQgc2NzaV9idXNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICogZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRldi0+ZHJpdmVyOwotCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CisJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydjsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CiAJaW50IGVycjsKIAorCWlmIChkZXYtPnR5cGUgIT0gJnNjc2lfZGV2X3R5cGUpCisJCXJldHVybiAwOworCisJZHJ2ID0gZGV2LT5kcml2ZXI7CisJc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CisKIAllcnIgPSBzY3NpX2RldmljZV9xdWllc2NlKHNkZXYpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0zNzAsMTAgKzM5MiwxNiBAQAogCiBzdGF0aWMgaW50IHNjc2lfYnVzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICogZGV2KQogewotCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShkZXYpOworCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnY7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OwogCWludCBlcnIgPSAwOwogCisJaWYgKGRldi0+dHlwZSAhPSAmc2NzaV9kZXZfdHlwZSkKKwkJcmV0dXJuIDA7CisKKwlkcnYgPSBkZXYtPmRyaXZlcjsKKwlzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsKKwogCWlmIChkcnYgJiYgZHJ2LT5yZXN1bWUpCiAJCWVyciA9IGRydi0+cmVzdW1lKGRldik7CiAKQEAgLTc4MSw2ICs4MDksMjcgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyBpbnQgc2NzaV90YXJnZXRfYWRkKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKK3sKKwlpbnQgZXJyb3I7CisKKwlpZiAoc3RhcmdldC0+c3RhdGUgIT0gU1RBUkdFVF9DUkVBVEVEKQorCQlyZXR1cm4gMDsKKworCWVycm9yID0gZGV2aWNlX2FkZCgmc3RhcmdldC0+ZGV2KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2Vycigmc3RhcmdldC0+ZGV2LCAidGFyZ2V0IGRldmljZV9hZGQgZmFpbGVkLCBlcnJvciAlZFxuIiwgZXJyb3IpOworCQlnZXRfZGV2aWNlKCZzdGFyZ2V0LT5kZXYpOworCQlzY3NpX3RhcmdldF9yZWFwKHN0YXJnZXQpOworCQlwdXRfZGV2aWNlKCZzdGFyZ2V0LT5kZXYpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCXRyYW5zcG9ydF9hZGRfZGV2aWNlKCZzdGFyZ2V0LT5kZXYpOworCXN0YXJnZXQtPnN0YXRlID0gU1RBUkdFVF9SVU5OSU5HOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBzZGV2X2F0dHJfcXVldWVfdHlwZV9ydyA9CiAJX19BVFRSKHF1ZXVlX3R5cGUsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3F1ZXVlX3R5cGVfZmllbGQsCiAJICAgICAgIHNkZXZfc3RvcmVfcXVldWVfdHlwZV9ydyk7CkBAIC03OTYsMTAgKzg0NSwxNiBAQAogewogCWludCBlcnJvciwgaTsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcnEgPSBzZGV2LT5yZXF1ZXN0X3F1ZXVlOworCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9IHNkZXYtPnNkZXZfdGFyZ2V0OwogCiAJaWYgKChlcnJvciA9IHNjc2lfZGV2aWNlX3NldF9zdGF0ZShzZGV2LCBTREVWX1JVTk5JTkcpKSAhPSAwKQogCQlyZXR1cm4gZXJyb3I7CiAKKwllcnJvciA9IHNjc2lfdGFyZ2V0X2FkZChzdGFyZ2V0KTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCXRyYW5zcG9ydF9jb25maWd1cmVfZGV2aWNlKCZzdGFyZ2V0LT5kZXYpOwogCWVycm9yID0gZGV2aWNlX2FkZCgmc2Rldi0+c2Rldl9nZW5kZXYpOwogCWlmIChlcnJvcikgewogCQlwdXRfZGV2aWNlKHNkZXYtPnNkZXZfZ2VuZGV2LnBhcmVudCk7CkBAIC04MzQsNyArODg5LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZXJyb3IgPSBic2dfcmVnaXN0ZXJfcXVldWUocnEsICZzZGV2LT5zZGV2X2dlbmRldiwgTlVMTCk7CisJZXJyb3IgPSBic2dfcmVnaXN0ZXJfcXVldWUocnEsICZzZGV2LT5zZGV2X2dlbmRldiwgTlVMTCwgTlVMTCk7CiAKIAlpZiAoZXJyb3IpCiAJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKQEAgLTk3MSw0NCArMTAyNiw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKHNjc2lfcmVnaXN0ZXJfaW50ZXJmYWNlKTsKIAotCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmNsYXNzX2F0dHJfb3ZlcnJpZGRlbigKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiphdHRycywKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIpCi17Ci0JaW50IGk7Ci0KLQlpZiAoIWF0dHJzKQotCQlyZXR1cm4gTlVMTDsKLQlmb3IgKGkgPSAwOyBhdHRyc1tpXTsgaSsrKQotCQlpZiAoIXN0cmNtcChhdHRyc1tpXS0+YXR0ci5uYW1lLCBhdHRyLT5hdHRyLm5hbWUpKQotCQkJcmV0dXJuIGF0dHJzW2ldOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW50IGNsYXNzX2F0dHJfYWRkKHN0cnVjdCBkZXZpY2UgKmNsYXNzZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cikKLXsKLQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYmFzZV9hdHRyOwotCi0JLyoKLQkgKiBTcGFyZSB0aGUgY2FsbGVyIGZyb20gaGF2aW5nIHRvIGNvcHkgdGhpbmdzIGl0J3Mgbm90IGludGVyZXN0ZWQgaW4uCi0JICovCi0JYmFzZV9hdHRyID0gY2xhc3NfYXR0cl9vdmVycmlkZGVuKHNjc2lfc3lzZnNfc2hvc3RfYXR0cnMsIGF0dHIpOwotCWlmIChiYXNlX2F0dHIpIHsKLQkJLyogZXh0ZW5kIHBlcm1pc3Npb25zICovCi0JCWF0dHItPmF0dHIubW9kZSB8PSBiYXNlX2F0dHItPmF0dHIubW9kZTsKLQotCQkvKiBvdmVycmlkZSBudWxsIHNob3cvc3RvcmUgd2l0aCBkZWZhdWx0ICovCi0JCWlmICghYXR0ci0+c2hvdykKLQkJCWF0dHItPnNob3cgPSBiYXNlX2F0dHItPnNob3c7Ci0JCWlmICghYXR0ci0+c3RvcmUpCi0JCQlhdHRyLT5zdG9yZSA9IGJhc2VfYXR0ci0+c3RvcmU7Ci0JfQotCi0JcmV0dXJuIGRldmljZV9jcmVhdGVfZmlsZShjbGFzc2RldiwgYXR0cik7Ci19Ci0KIC8qKgogICogc2NzaV9zeXNmc19hZGRfaG9zdCAtIGFkZCBzY3NpIGhvc3QgdG8gc3Vic3lzdGVtCiAgKiBAc2hvc3Q6ICAgICBzY3NpIGhvc3Qgc3RydWN0IHRvIGFkZCB0byBzdWJzeXN0ZW0KQEAgLTEwMTgsMjAgKzEwMzUsMTEgQEAKIHsKIAlpbnQgZXJyb3IsIGk7CiAKKwkvKiBhZGQgaG9zdCBzcGVjaWZpYyBhdHRyaWJ1dGVzICovCiAJaWYgKHNob3N0LT5ob3N0dC0+c2hvc3RfYXR0cnMpIHsKIAkJZm9yIChpID0gMDsgc2hvc3QtPmhvc3R0LT5zaG9zdF9hdHRyc1tpXTsgaSsrKSB7Ci0JCQllcnJvciA9IGNsYXNzX2F0dHJfYWRkKCZzaG9zdC0+c2hvc3RfZGV2LAotCQkJCQlzaG9zdC0+aG9zdHQtPnNob3N0X2F0dHJzW2ldKTsKLQkJCWlmIChlcnJvcikKLQkJCQlyZXR1cm4gZXJyb3I7Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSAwOyBzY3NpX3N5c2ZzX3Nob3N0X2F0dHJzW2ldOyBpKyspIHsKLQkJaWYgKCFjbGFzc19hdHRyX292ZXJyaWRkZW4oc2hvc3QtPmhvc3R0LT5zaG9zdF9hdHRycywKLQkJCQkJc2NzaV9zeXNmc19zaG9zdF9hdHRyc1tpXSkpIHsKIAkJCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZzaG9zdC0+c2hvc3RfZGV2LAotCQkJCQlzY3NpX3N5c2ZzX3Nob3N0X2F0dHJzW2ldKTsKKwkJCQkJc2hvc3QtPmhvc3R0LT5zaG9zdF9hdHRyc1tpXSk7CiAJCQlpZiAoZXJyb3IpCiAJCQkJcmV0dXJuIGVycm9yOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCmluZGV4IDZiMDkyYTYuLjVmZDY0ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCkBAIC0xOTYxLDEyICsxOTYxLDE3IEBACiB9CiAKIC8qCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHNob3N0LT5ob3N0X2xvY2sgaGVsZAorICogQ2FsbGVkIGJ5IGZjX3VzZXJfc2NhbiB0byBsb2NhdGUgYW4gcnBvcnQgb24gdGhlIHNob3N0IHRoYXQKKyAqIG1hdGNoZXMgdGhlIGNoYW5uZWwgYW5kIHRhcmdldCBpZCwgYW5kIGludm9rZSBzY3NpX3NjYW5fdGFyZ2V0KCkKKyAqIG9uIHRoZSBycG9ydC4KICAqLwotc3RhdGljIGludCBmY191c2VyX3NjYW4oc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHVpbnQgY2hhbm5lbCwKLQkJdWludCBpZCwgdWludCBsdW4pCitzdGF0aWMgdm9pZAorZmNfdXNlcl9zY2FuX3RndChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgdWludCBjaGFubmVsLCB1aW50IGlkLCB1aW50IGx1bikKIHsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJwb3J0LCAmZmNfaG9zdF9ycG9ydHMoc2hvc3QpLCBwZWVycykgewogCQlpZiAocnBvcnQtPnNjc2lfdGFyZ2V0X2lkID09IC0xKQpAQCAtMTk3NSwxMyArMTk4MCw1NCBAQAogCQlpZiAocnBvcnQtPnBvcnRfc3RhdGUgIT0gRkNfUE9SVFNUQVRFX09OTElORSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICgoY2hhbm5lbCA9PSBTQ0FOX1dJTERfQ0FSRCB8fCBjaGFubmVsID09IHJwb3J0LT5jaGFubmVsKSAmJgotCQkgICAgKGlkID09IFNDQU5fV0lMRF9DQVJEIHx8IGlkID09IHJwb3J0LT5zY3NpX3RhcmdldF9pZCkpIHsKLQkJCXNjc2lfc2Nhbl90YXJnZXQoJnJwb3J0LT5kZXYsIHJwb3J0LT5jaGFubmVsLAotCQkJCQkgcnBvcnQtPnNjc2lfdGFyZ2V0X2lkLCBsdW4sIDEpOworCQlpZiAoKGNoYW5uZWwgPT0gcnBvcnQtPmNoYW5uZWwpICYmCisJCSAgICAoaWQgPT0gcnBvcnQtPnNjc2lfdGFyZ2V0X2lkKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCQlzY3NpX3NjYW5fdGFyZ2V0KCZycG9ydC0+ZGV2LCBjaGFubmVsLCBpZCwgbHVuLCAxKTsKKwkJCXJldHVybjsKIAkJfQogCX0KIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogQ2FsbGVkIHZpYSBzeXNmcyBzY2FuIHJvdXRpbmVzLiBOZWNlc3NhcnksIGFzIHRoZSBGQyB0cmFuc3BvcnQKKyAqIHdhbnRzIHRvIHBsYWNlIGFsbCB0YXJnZXQgb2JqZWN0cyBiZWxvdyB0aGUgcnBvcnQgb2JqZWN0LiBTbyB0aGlzCisgKiByb3V0aW5lIG11c3QgaW52b2tlIHRoZSBzY3NpX3NjYW5fdGFyZ2V0KCkgcm91dGluZSB3aXRoIHRoZSBycG9ydAorICogb2JqZWN0IGFzIHRoZSBwYXJlbnQuCisgKi8KK3N0YXRpYyBpbnQKK2ZjX3VzZXJfc2NhbihzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgdWludCBjaGFubmVsLCB1aW50IGlkLCB1aW50IGx1bikKK3sKKwl1aW50IGNobG8sIGNoaGk7CisJdWludCB0Z3RsbywgdGd0aGk7CisKKwlpZiAoKChjaGFubmVsICE9IFNDQU5fV0lMRF9DQVJEKSAmJiAoY2hhbm5lbCA+IHNob3N0LT5tYXhfY2hhbm5lbCkpIHx8CisJICAgICgoaWQgIT0gU0NBTl9XSUxEX0NBUkQpICYmIChpZCA+PSBzaG9zdC0+bWF4X2lkKSkgfHwKKwkgICAgKChsdW4gIT0gU0NBTl9XSUxEX0NBUkQpICYmIChsdW4gPiBzaG9zdC0+bWF4X2x1bikpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjaGFubmVsID09IFNDQU5fV0lMRF9DQVJEKSB7CisJCWNobG8gPSAwOworCQljaGhpID0gc2hvc3QtPm1heF9jaGFubmVsICsgMTsKKwl9IGVsc2UgeworCQljaGxvID0gY2hhbm5lbDsKKwkJY2hoaSA9IGNoYW5uZWwgKyAxOworCX0KKworCWlmIChpZCA9PSBTQ0FOX1dJTERfQ0FSRCkgeworCQl0Z3RsbyA9IDA7CisJCXRndGhpID0gc2hvc3QtPm1heF9pZDsKKwl9IGVsc2UgeworCQl0Z3RsbyA9IGlkOworCQl0Z3RoaSA9IGlkICsgMTsKKwl9CisKKwlmb3IgKCA7IGNobG8gPCBjaGhpOyBjaGxvKyspCisJCWZvciAoIDsgdGd0bG8gPCB0Z3RoaTsgdGd0bG8rKykKKwkJCWZjX3VzZXJfc2Nhbl90Z3Qoc2hvc3QsIGNobG8sIHRndGxvLCBsdW4pOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYwppbmRleCAyN2VjNjI1Li43ODk5ZTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5jCkBAIC0xOTIsNiArMTkyLDE2IEBACiAJc2FzX3NtcF9yZXF1ZXN0KHEsIHJwaHlfdG9fc2hvc3QocnBoeSksIHJwaHkpOwogfQogCitzdGF0aWMgdm9pZCBzYXNfaG9zdF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdChkZXYpOworCXN0cnVjdCBzYXNfaG9zdF9hdHRycyAqc2FzX2hvc3QgPSB0b19zYXNfaG9zdF9hdHRycyhzaG9zdCk7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBzYXNfaG9zdC0+cTsKKworCWlmIChxKQorCQlibGtfY2xlYW51cF9xdWV1ZShxKTsKK30KKwogc3RhdGljIGludCBzYXNfYnNnX2luaXRpYWxpemUoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHN0cnVjdCBzYXNfcnBoeSAqcnBoeSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKQEAgLTE5OSw2ICsyMDksNyBAQAogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAljaGFyIG5hbWVidWZbQlVTX0lEX1NJWkVdOwogCWNvbnN0IGNoYXIgKm5hbWU7CisJdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCBkZXZpY2UgKik7CiAKIAlpZiAoIXRvX3Nhc19pbnRlcm5hbChzaG9zdC0+dHJhbnNwb3J0dCktPmYtPnNtcF9oYW5kbGVyKSB7CiAJCXByaW50aygiJXMgY2FuJ3QgaGFuZGxlIFNNUCByZXF1ZXN0c1xuIiwgc2hvc3QtPmhvc3R0LT5uYW1lKTsKQEAgLTIwOSwxNyArMjIwLDE5IEBACiAJCXEgPSBibGtfaW5pdF9xdWV1ZShzYXNfbm9uX2hvc3Rfc21wX3JlcXVlc3QsIE5VTEwpOwogCQlkZXYgPSAmcnBoeS0+ZGV2OwogCQluYW1lID0gZGV2LT5idXNfaWQ7CisJCXJlbGVhc2UgPSBOVUxMOwogCX0gZWxzZSB7CiAJCXEgPSBibGtfaW5pdF9xdWV1ZShzYXNfaG9zdF9zbXBfcmVxdWVzdCwgTlVMTCk7CiAJCWRldiA9ICZzaG9zdC0+c2hvc3RfZ2VuZGV2OwogCQlzbnByaW50ZihuYW1lYnVmLCBzaXplb2YobmFtZWJ1ZiksCiAJCQkgInNhc19ob3N0JWQiLCBzaG9zdC0+aG9zdF9ubyk7CiAJCW5hbWUgPSBuYW1lYnVmOworCQlyZWxlYXNlID0gc2FzX2hvc3RfcmVsZWFzZTsKIAl9CiAJaWYgKCFxKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWVycm9yID0gYnNnX3JlZ2lzdGVyX3F1ZXVlKHEsIGRldiwgbmFtZSk7CisJZXJyb3IgPSBic2dfcmVnaXN0ZXJfcXVldWUocSwgZGV2LCBuYW1lLCByZWxlYXNlKTsKIAlpZiAoZXJyb3IpIHsKIAkJYmxrX2NsZWFudXBfcXVldWUocSk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjUzLDcgKzI2Niw2IEBACiAJCXJldHVybjsKIAogCWJzZ191bnJlZ2lzdGVyX3F1ZXVlKHEpOwotCWJsa19jbGVhbnVwX3F1ZXVlKHEpOwogfQogCiAvKgpAQCAtMTMwMSw2ICsxMzEzLDkgQEAKIAlzdHJ1Y3Qgc2FzX3JwaHkgKnJwaHkgPSBkZXZfdG9fcnBoeShkZXYpOwogCXN0cnVjdCBzYXNfZXhwYW5kZXJfZGV2aWNlICplZGV2ID0gcnBoeV90b19leHBhbmRlcl9kZXZpY2UocnBoeSk7CiAKKwlpZiAocnBoeS0+cSkKKwkJYmxrX2NsZWFudXBfcXVldWUocnBoeS0+cSk7CisKIAlwdXRfZGV2aWNlKGRldi0+cGFyZW50KTsKIAlrZnJlZShlZGV2KTsKIH0KQEAgLTEzMTAsNiArMTMyNSw5IEBACiAJc3RydWN0IHNhc19ycGh5ICpycGh5ID0gZGV2X3RvX3JwaHkoZGV2KTsKIAlzdHJ1Y3Qgc2FzX2VuZF9kZXZpY2UgKmVkZXYgPSBycGh5X3RvX2VuZF9kZXZpY2UocnBoeSk7CiAKKwlpZiAocnBoeS0+cSkKKwkJYmxrX2NsZWFudXBfcXVldWUocnBoeS0+cSk7CisKIAlwdXRfZGV2aWNlKGRldi0+cGFyZW50KTsKIAlrZnJlZShlZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuYwppbmRleCBiYzEyYjVkLi43NWE2NGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgInNjc2lfcHJpdi5oIgogI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KQEAgLTEzNzQsMTEgKzEzNzUsMTEgQEAKICAqIG92ZXJsb2FkcyB0aGUgcmV0dXJuIGJ5IHNldHRpbmcgMTw8MSBpZiB0aGUgYXR0cmlidXRlIHNob3VsZAogICogYmUgd3JpdGVhYmxlICovCiAjZGVmaW5lIFRBUkdFVF9BVFRSSUJVVEVfSEVMUEVSKG5hbWUpIFwKLQkoc2ktPmYtPnNob3dfIyNuYW1lID8gMSA6IDApICsgXAotCShzaS0+Zi0+c2V0XyMjbmFtZSA/IDIgOiAwKQorCShzaS0+Zi0+c2hvd18jI25hbWUgPyBTX0lSVUdPIDogMCkgfCBcCisJKHNpLT5mLT5zZXRfIyNuYW1lID8gU19JV1VTUiA6IDApCiAKLXN0YXRpYyBpbnQgdGFyZ2V0X2F0dHJpYnV0ZV9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCSAgICAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBpbnQgaSkKK3N0YXRpYyBtb2RlX3QgdGFyZ2V0X2F0dHJpYnV0ZV9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCQkgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGludCBpKQogewogCXN0cnVjdCBkZXZpY2UgKmNkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CiAJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3N0YXJnZXQoY2Rldik7CkBAIC0xNDI4LDcgKzE0MjksNyBAQAogCQkgc3BpX3N1cHBvcnRfaXVzKHN0YXJnZXQpKQogCQlyZXR1cm4gVEFSR0VUX0FUVFJJQlVURV9IRUxQRVIoaG9sZF9tY3MpOwogCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX3JldmFsaWRhdGUuYXR0cikKLQkJcmV0dXJuIDE7CisJCXJldHVybiBTX0lXVVNSOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDYyLDI1ICsxNDYzLDkgQEAKIAkJCQlzdHJ1Y3QgZGV2aWNlICpjZGV2KQogewogCXN0cnVjdCBrb2JqZWN0ICprb2JqID0gJmNkZXYtPmtvYmo7Ci0JaW50IGk7Ci0Jc3RydWN0IGF0dHJpYnV0ZSAqYXR0cjsKLQlpbnQgcmM7CiAKLQlmb3IgKGkgPSAwOyAoYXR0ciA9IHRhcmdldF9hdHRyaWJ1dGVzW2ldKSAhPSBOVUxMOyBpKyspIHsKLQkJaW50IGogPSB0YXJnZXRfYXR0cmlidXRlX2dyb3VwLmlzX3Zpc2libGUoa29iaiwgYXR0ciwgaSk7Ci0KLQkJLyogRklYTUU6IGFzIHdlbGwgYXMgcmV0dXJuaW5nIC1FRVhJU1QsIHdoaWNoIHdlJ2QgbGlrZQotCQkgKiB0byBpZ25vcmUsIHN5c2ZzIGFsc28gZG9lcyBhIFdBUk5fT04gYW5kIGR1bXBzIGEgdHJhY2UsCi0JCSAqIHdoaWNoIGlzIGJhZCwgc28gdGVtcG9yYXJpbHksIHNraXAgYXR0cmlidXRlcyB0aGF0IGFyZQotCQkgKiBhbHJlYWR5IHZpc2libGUgKHRoZSByZXZhbGlkYXRlIG9uZSkgKi8KLQkJaWYgKGogJiYgYXR0ciAhPSAmZGV2X2F0dHJfcmV2YWxpZGF0ZS5hdHRyKQotCQkJcmMgPSBzeXNmc19hZGRfZmlsZV90b19ncm91cChrb2JqLCBhdHRyLAotCQkJCQkJdGFyZ2V0X2F0dHJpYnV0ZV9ncm91cC5uYW1lKTsKLQkJLyogYW5kIG1ha2UgdGhlIGF0dHJpYnV0ZSB3cml0ZWFibGUgaWYgd2UgaGF2ZSBhIHNldAotCQkgKiBmdW5jdGlvbiAqLwotCQlpZiAoKGogJiAxKSkKLQkJCXJjID0gc3lzZnNfY2htb2RfZmlsZShrb2JqLCBhdHRyLCBhdHRyLT5tb2RlIHwgU19JV1VTUik7Ci0JfQorCS8qIGZvcmNlIGFuIHVwZGF0ZSBiYXNlZCBvbiBwYXJhbWV0ZXJzIHJlYWQgZnJvbSB0aGUgZGV2aWNlICovCisJc3lzZnNfdXBkYXRlX2dyb3VwKGtvYmosICZ0YXJnZXRfYXR0cmlidXRlX2dyb3VwKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnaXdkOTMuYyBiL2RyaXZlcnMvc2NzaS9zZ2l3ZDkzLmMKaW5kZXggMDNlMzU5Ni4uMzFmZTYwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnaXdkOTMuYworKysgYi9kcml2ZXJzL3Njc2kvc2dpd2Q5My5jCkBAIC0zMTMsNyArMzEzLDggQEAKIAkucHJvYmUgID0gc2dpd2Q5M19wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc2dpd2Q5M19yZW1vdmUpLAogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lICAgPSAic2dpd2Q5MyIKKwkJLm5hbWUgICA9ICJzZ2l3ZDkzIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfQogfTsKIApAQCAtMzMzLDMgKzMzNCw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlNHSSBXRDMzQzkzIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiUmFsZiBCYWVjaGxlIDxyYWxmQGxpbnV4LW1pcHMub3JnPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzZ2l3ZDkzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc25pXzUzYzcxMC5jIGIvZHJpdmVycy9zY3NpL3NuaV81M2M3MTAuYwppbmRleCAwYTZiNDViLi4yYmJlZjRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc25pXzUzYzcxMC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zbmlfNTNjNzEwLmMKQEAgLTUzLDYgKzUzLDcgQEAKIE1PRFVMRV9BVVRIT1IoIlRob21hcyBCb2dlbmT2cmZlciIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTTkkgUk0gNTNjNzEwIFNDU0kgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnNuaXJtXzUzYzcxMCIpOwogCiAjZGVmaW5lIFNOSVJNNzEwX0NMT0NLCTMyCiAKQEAgLTEzNiw2ICsxMzcsNyBAQAogCS5yZW1vdmUJPSBfX2RldmV4aXRfcChzbmlybTcxMF9kcml2ZXJfcmVtb3ZlKSwKIAkuZHJpdmVyCT0gewogCQkubmFtZQk9ICJzbmlybV81M2M3MTAiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N0LmMgYi9kcml2ZXJzL3Njc2kvc3QuYwppbmRleCBhODYwYzNhLi5lOGRiNjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3QuYworKysgYi9kcml2ZXJzL3Njc2kvc3QuYwpAQCAtNDMyMiw3ICs0MzIyLDcgQEAKIHN0YXRpYyBzc2l6ZV90CiBzdF9kZWZpbmVkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBzdF9tb2RlZGVmICpTVG0gPSAoc3RydWN0IHN0X21vZGVkZWYgKilkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc3RfbW9kZWRlZiAqU1RtID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3NpemVfdCBsID0gMDsKIAogCWwgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBTVG0tPmRlZmluZWQpOwpAQCAtNDMzNCw3ICs0MzM0LDcgQEAKIHN0YXRpYyBzc2l6ZV90CiBzdF9kZWZibGtfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHN0X21vZGVkZWYgKlNUbSA9IChzdHJ1Y3Qgc3RfbW9kZWRlZiAqKWRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzdF9tb2RlZGVmICpTVG0gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzc2l6ZV90IGwgPSAwOwogCiAJbCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIFNUbS0+ZGVmYXVsdF9ibGtzaXplKTsKQEAgLTQzNDYsNyArNDM0Niw3IEBACiBzdGF0aWMgc3NpemVfdAogc3RfZGVmZGVuc2l0eV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3Qgc3RfbW9kZWRlZiAqU1RtID0gKHN0cnVjdCBzdF9tb2RlZGVmICopZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHN0X21vZGVkZWYgKlNUbSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXNzaXplX3QgbCA9IDA7CiAJY2hhciAqZm10OwogCkBAIC00MzYxLDcgKzQzNjEsNyBAQAogc3RfZGVmY29tcHJlc3Npb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgICAgY2hhciAqYnVmKQogewotCXN0cnVjdCBzdF9tb2RlZGVmICpTVG0gPSAoc3RydWN0IHN0X21vZGVkZWYgKilkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc3RfbW9kZWRlZiAqU1RtID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3NpemVfdCBsID0gMDsKIAogCWwgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBTVG0tPmRlZmF1bHRfY29tcHJlc3Npb24gLSAxKTsKQEAgLTQzNzMsNyArNDM3Myw3IEBACiBzdGF0aWMgc3NpemVfdAogc3Rfb3B0aW9uc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3Qgc3RfbW9kZWRlZiAqU1RtID0gKHN0cnVjdCBzdF9tb2RlZGVmICopZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHN0X21vZGVkZWYgKlNUbSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzY3NpX3RhcGUgKlNUcDsKIAlpbnQgaSwgaiwgb3B0aW9uczsKIAlzc2l6ZV90IGwgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N1bjN4X2VzcC5jIGIvZHJpdmVycy9zY3NpL3N1bjN4X2VzcC5jCmluZGV4IDA2MTUyYzcuLjc1MTRiM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdW4zeF9lc3AuYworKysgYi9kcml2ZXJzL3Njc2kvc3VuM3hfZXNwLmMKQEAgLTI5NCw2ICsyOTQsNyBAQAogCS5yZW1vdmUgICAgICAgICA9IF9fZGV2ZXhpdF9wKGVzcF9zdW4zeF9yZW1vdmUpLAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lICAgPSAic3VuM3hfZXNwIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKQEAgLTMxNCwzICszMTUsNCBAQAogCiBtb2R1bGVfaW5pdChzdW4zeF9lc3BfaW5pdCk7CiBtb2R1bGVfZXhpdChzdW4zeF9lc3BfZXhpdCk7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnN1bjN4X2VzcCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3UxNC0zNGYuYyBiL2RyaXZlcnMvc2NzaS91MTQtMzRmLmMKaW5kZXggNThkN2VlZS4uNjQwMzMzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3UxNC0zNGYuYworKysgYi9kcml2ZXJzL3Njc2kvdTE0LTM0Zi5jCkBAIC0xNzE1LDEzICsxNzE1LDEyIEBACiAKIH0KIAotc3RhdGljIGlycXJldHVybl90IGloZGxyKGludCBpcnEsIHVuc2lnbmVkIGludCBqKSB7CitzdGF0aWMgaXJxcmV0dXJuX3QgaWhkbHIodW5zaWduZWQgaW50IGopCit7CiAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudDsKICAgIHVuc2lnbmVkIGludCBpLCBrLCBjLCBzdGF0dXMsIHRzdGF0dXMsIHJlZywgcmV0OwogICAgc3RydWN0IG1zY3AgKnNwcCwgKmNwcDsKLQotICAgaWYgKHNoW2pdLT5pcnEgIT0gaXJxKQotICAgICAgIHBhbmljKCIlczogaWhkbHIsIGlycSAlZCwgc2hbal0tPmlycSAlZC5cbiIsIEJOKGopLCBpcnEsIHNoW2pdLT5pcnEpOworICAgaW50IGlycSA9IHNoW2pdLT5pcnE7CiAKICAgIC8qIENoZWNrIGlmIHRoaXMgYm9hcmQgbmVlZCB0byBiZSBzZXJ2aWNlZCAqLwogICAgaWYgKCEoKHJlZyA9IGluYihzaFtqXS0+aW9fcG9ydCArIFJFR19TWVNfSU5UUikpICYgSVJRX0FTU0VSVEVEKSkgZ290byBub25lOwpAQCAtMTkzNSw3ICsxOTM0LDcgQEAKICAgIGlmICgoaiA9ICh1bnNpZ25lZCBpbnQpKChjaGFyICopc2hhcCAtIHNoYSkpID49IG51bV9ib2FyZHMpIHJldHVybiBJUlFfTk9ORTsKIAogICAgc3Bpbl9sb2NrX2lycXNhdmUoc2hbal0tPmhvc3RfbG9jaywgc3Bpbl9mbGFncyk7Ci0gICByZXQgPSBpaGRscihpcnEsIGopOworICAgcmV0ID0gaWhkbHIoaik7CiAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKHNoW2pdLT5ob3N0X2xvY2ssIHNwaW5fZmxhZ3MpOwogICAgcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2ZpbGUuYyBiL2ZzL3N5c2ZzL2ZpbGUuYwppbmRleCBhZGU5YTdlNi4uZGJkZmFiYiAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvZmlsZS5jCisrKyBiL2ZzL3N5c2ZzL2ZpbGUuYwpAQCAtNDc3LDExICs0NzcsMTAgQEAKIAkucG9sbAkJPSBzeXNmc19wb2xsLAogfTsKIAotCi1pbnQgc3lzZnNfYWRkX2ZpbGUoc3RydWN0IHN5c2ZzX2RpcmVudCAqZGlyX3NkLCBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAotCQkgICBpbnQgdHlwZSkKK2ludCBzeXNmc19hZGRfZmlsZV9tb2RlKHN0cnVjdCBzeXNmc19kaXJlbnQgKmRpcl9zZCwKKwkJCWNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGludCB0eXBlLCBtb2RlX3QgYW1vZGUpCiB7Ci0JdW1vZGVfdCBtb2RlID0gKGF0dHItPm1vZGUgJiBTX0lBTExVR08pIHwgU19JRlJFRzsKKwl1bW9kZV90IG1vZGUgPSAoYW1vZGUgJiBTX0lBTExVR08pIHwgU19JRlJFRzsKIAlzdHJ1Y3Qgc3lzZnNfYWRkcm1fY3h0IGFjeHQ7CiAJc3RydWN0IHN5c2ZzX2RpcmVudCAqc2Q7CiAJaW50IHJjOwpAQCAtNTAyLDYgKzUwMSwxMyBAQAogfQogCiAKK2ludCBzeXNmc19hZGRfZmlsZShzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpkaXJfc2QsIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCisJCSAgIGludCB0eXBlKQoreworCXJldHVybiBzeXNmc19hZGRfZmlsZV9tb2RlKGRpcl9zZCwgYXR0ciwgdHlwZSwgYXR0ci0+bW9kZSk7Cit9CisKKwogLyoqCiAgKglzeXNmc19jcmVhdGVfZmlsZSAtIGNyZWF0ZSBhbiBhdHRyaWJ1dGUgZmlsZSBmb3IgYW4gb2JqZWN0LgogICoJQGtvYmo6CW9iamVjdCB3ZSdyZSBjcmVhdGluZyBmb3IuIApkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvZ3JvdXAuYyBiL2ZzL3N5c2ZzL2dyb3VwLmMKaW5kZXggNDc3OTA0OS4uZWViYTM4NCAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvZ3JvdXAuYworKysgYi9mcy9zeXNmcy9ncm91cC5jCkBAIC0yMywzNSArMjMsNTAgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDAsIGF0dHIgPSBncnAtPmF0dHJzOyAqYXR0cjsgaSsrLCBhdHRyKyspCi0JCWlmICghZ3JwLT5pc192aXNpYmxlIHx8Ci0JCSAgICBncnAtPmlzX3Zpc2libGUoa29iaiwgKmF0dHIsIGkpKQotCQkJc3lzZnNfaGFzaF9hbmRfcmVtb3ZlKGRpcl9zZCwgKCphdHRyKS0+bmFtZSk7CisJCXN5c2ZzX2hhc2hfYW5kX3JlbW92ZShkaXJfc2QsICgqYXR0ciktPm5hbWUpOwogfQogCiBzdGF0aWMgaW50IGNyZWF0ZV9maWxlcyhzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpkaXJfc2QsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqZ3JwKQorCQkJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqZ3JwLCBpbnQgdXBkYXRlKQogewogCXN0cnVjdCBhdHRyaWJ1dGUgKmNvbnN0KiBhdHRyOwogCWludCBlcnJvciA9IDAsIGk7CiAKLQlmb3IgKGkgPSAwLCBhdHRyID0gZ3JwLT5hdHRyczsgKmF0dHIgJiYgIWVycm9yOyBpKyssIGF0dHIrKykKLQkJaWYgKCFncnAtPmlzX3Zpc2libGUgfHwKLQkJICAgIGdycC0+aXNfdmlzaWJsZShrb2JqLCAqYXR0ciwgaSkpCi0JCQllcnJvciB8PQotCQkJCXN5c2ZzX2FkZF9maWxlKGRpcl9zZCwgKmF0dHIsIFNZU0ZTX0tPQkpfQVRUUik7CisJZm9yIChpID0gMCwgYXR0ciA9IGdycC0+YXR0cnM7ICphdHRyICYmICFlcnJvcjsgaSsrLCBhdHRyKyspIHsKKwkJbW9kZV90IG1vZGUgPSAwOworCisJCS8qIGluIHVwZGF0ZSBtb2RlLCB3ZSdyZSBjaGFuZ2luZyB0aGUgcGVybWlzc2lvbnMgb3IKKwkJICogdmlzaWJpbGl0eS4gIERvIHRoaXMgYnkgZmlyc3QgcmVtb3ZpbmcgdGhlbgorCQkgKiByZS1hZGRpbmcgKGlmIHJlcXVpcmVkKSB0aGUgZmlsZSAqLworCQlpZiAodXBkYXRlKQorCQkJc3lzZnNfaGFzaF9hbmRfcmVtb3ZlKGRpcl9zZCwgKCphdHRyKS0+bmFtZSk7CisJCWlmIChncnAtPmlzX3Zpc2libGUpIHsKKwkJCW1vZGUgPSBncnAtPmlzX3Zpc2libGUoa29iaiwgKmF0dHIsIGkpOworCQkJaWYgKCFtb2RlKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWVycm9yID0gc3lzZnNfYWRkX2ZpbGVfbW9kZShkaXJfc2QsICphdHRyLCBTWVNGU19LT0JKX0FUVFIsCisJCQkJCSAgICAoKmF0dHIpLT5tb2RlIHwgbW9kZSk7CisJCWlmICh1bmxpa2VseShlcnJvcikpCisJCQlicmVhazsKKwl9CiAJaWYgKGVycm9yKQogCQlyZW1vdmVfZmlsZXMoZGlyX3NkLCBrb2JqLCBncnApOwogCXJldHVybiBlcnJvcjsKIH0KIAogCi1pbnQgc3lzZnNfY3JlYXRlX2dyb3VwKHN0cnVjdCBrb2JqZWN0ICoga29iaiwgCi0JCSAgICAgICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICogZ3JwKQorc3RhdGljIGludCBpbnRlcm5hbF9jcmVhdGVfZ3JvdXAoc3RydWN0IGtvYmplY3QgKmtvYmosIGludCB1cGRhdGUsCisJCQkJIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmdycCkKIHsKIAlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZDsKIAlpbnQgZXJyb3I7CiAKLQlCVUdfT04oIWtvYmogfHwgIWtvYmotPnNkKTsKKwlCVUdfT04oIWtvYmogfHwgKCF1cGRhdGUgJiYgIWtvYmotPnNkKSk7CisKKwkvKiBVcGRhdGVzIG1heSBoYXBwZW4gYmVmb3JlIHRoZSBvYmplY3QgaGFzIGJlZW4gaW5zdGFudGlhdGVkICovCisJaWYgKHVubGlrZWx5KHVwZGF0ZSAmJiAha29iai0+c2QpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChncnAtPm5hbWUpIHsKIAkJZXJyb3IgPSBzeXNmc19jcmVhdGVfc3ViZGlyKGtvYmosIGdycC0+bmFtZSwgJnNkKTsKQEAgLTYwLDcgKzc1LDcgQEAKIAl9IGVsc2UKIAkJc2QgPSBrb2JqLT5zZDsKIAlzeXNmc19nZXQoc2QpOwotCWVycm9yID0gY3JlYXRlX2ZpbGVzKHNkLCBrb2JqLCBncnApOworCWVycm9yID0gY3JlYXRlX2ZpbGVzKHNkLCBrb2JqLCBncnAsIHVwZGF0ZSk7CiAJaWYgKGVycm9yKSB7CiAJCWlmIChncnAtPm5hbWUpCiAJCQlzeXNmc19yZW1vdmVfc3ViZGlyKHNkKTsKQEAgLTY5LDYgKzg0LDQ3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCisvKioKKyAqIHN5c2ZzX2NyZWF0ZV9ncm91cCAtIGdpdmVuIGEgZGlyZWN0b3J5IGtvYmplY3QsIGNyZWF0ZSBhbiBhdHRyaWJ1dGUgZ3JvdXAKKyAqIEBrb2JqOglUaGUga29iamVjdCB0byBjcmVhdGUgdGhlIGdyb3VwIG9uCisgKiBAZ3JwOglUaGUgYXR0cmlidXRlIGdyb3VwIHRvIGNyZWF0ZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIGdyb3VwIGZvciB0aGUgZmlyc3QgdGltZS4gIEl0IHdpbGwgZXhwbGljaXRseQorICogd2FybiBhbmQgZXJyb3IgaWYgYW55IG9mIHRoZSBhdHRyaWJ1dGUgZmlsZXMgYmVpbmcgY3JlYXRlZCBhbHJlYWR5IGV4aXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGVycm9yLgorICovCitpbnQgc3lzZnNfY3JlYXRlX2dyb3VwKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqZ3JwKQoreworCXJldHVybiBpbnRlcm5hbF9jcmVhdGVfZ3JvdXAoa29iaiwgMCwgZ3JwKTsKK30KKworLyoqCisgKiBzeXNmc191cGRhdGVfZ3JvdXAgLSBnaXZlbiBhIGRpcmVjdG9yeSBrb2JqZWN0LCBjcmVhdGUgYW4gYXR0cmlidXRlIGdyb3VwCisgKiBAa29iajoJVGhlIGtvYmplY3QgdG8gY3JlYXRlIHRoZSBncm91cCBvbgorICogQGdycDoJVGhlIGF0dHJpYnV0ZSBncm91cCB0byBjcmVhdGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHVwZGF0ZXMgYW4gYXR0cmlidXRlIGdyb3VwLiAgVW5saWtlCisgKiBzeXNmc19jcmVhdGVfZ3JvdXAoKSwgaXQgd2lsbCBleHBsaWNpdGx5IG5vdCB3YXJuIG9yIGVycm9yIGlmIGFueQorICogb2YgdGhlIGF0dHJpYnV0ZSBmaWxlcyBiZWluZyBjcmVhdGVkIGFscmVhZHkgZXhpc3QuICBGdXJ0aGVybW9yZSwKKyAqIGlmIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmaWxlcyBoYXMgY2hhbmdlZCB0aHJvdWdoIHRoZSBpc192aXNpYmxlKCkKKyAqIGNhbGxiYWNrLCBpdCB3aWxsIHVwZGF0ZSB0aGUgcGVybWlzc2lvbnMgYW5kIGFkZCBvciByZW1vdmUgdGhlCisgKiByZWxldmFudCBmaWxlcy4KKyAqCisgKiBUaGUgcHJpbWFyeSB1c2UgZm9yIHRoaXMgZnVuY3Rpb24gaXMgdG8gY2FsbCBpdCBhZnRlciBtYWtpbmcgYSBjaGFuZ2UKKyAqIHRoYXQgYWZmZWN0cyBncm91cCB2aXNpYmlsaXR5LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGVycm9yLgorICovCitpbnQgc3lzZnNfdXBkYXRlX2dyb3VwKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqZ3JwKQoreworCXJldHVybiBpbnRlcm5hbF9jcmVhdGVfZ3JvdXAoa29iaiwgMSwgZ3JwKTsKK30KKworCisKIHZvaWQgc3lzZnNfcmVtb3ZlX2dyb3VwKHN0cnVjdCBrb2JqZWN0ICoga29iaiwgCiAJCQljb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICogZ3JwKQogewpAQCAtOTUsNCArMTUxLDUgQEAKIAogCiBFWFBPUlRfU1lNQk9MX0dQTChzeXNmc19jcmVhdGVfZ3JvdXApOworRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfdXBkYXRlX2dyb3VwKTsKIEVYUE9SVF9TWU1CT0xfR1BMKHN5c2ZzX3JlbW92ZV9ncm91cCk7CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9zeXNmcy5oIGIvZnMvc3lzZnMvc3lzZnMuaAppbmRleCBmZjE3ZjhkLi5jZTRlMTVmOCAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvc3lzZnMuaAorKysgYi9mcy9zeXNmcy9zeXNmcy5oCkBAIC0xNTQsNiArMTU0LDggQEAKIGludCBzeXNmc19hZGRfZmlsZShzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpkaXJfc2QsCiAJCSAgIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGludCB0eXBlKTsKIAoraW50IHN5c2ZzX2FkZF9maWxlX21vZGUoc3RydWN0IHN5c2ZzX2RpcmVudCAqZGlyX3NkLAorCQkJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IHR5cGUsIG1vZGVfdCBhbW9kZSk7CiAvKgogICogYmluLmMKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ic2cuaCBiL2luY2x1ZGUvbGludXgvYnNnLmgKaW5kZXggZTg0MDZjNS4uY2YwMzAzYTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnNnLmgKKysrIGIvaW5jbHVkZS9saW51eC9ic2cuaApAQCAtNTYsMTkgKzU2LDI1IEBACiAjaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9CU0cpCiBzdHJ1Y3QgYnNnX2NsYXNzX2RldmljZSB7CiAJc3RydWN0IGRldmljZSAqY2xhc3NfZGV2OwotCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQ7CiAJaW50IG1pbm9yOwogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxdWV1ZTsKKwlzdHJ1Y3Qga3JlZiByZWY7CisJdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCBkZXZpY2UgKik7CiB9OwogCi1leHRlcm4gaW50IGJzZ19yZWdpc3Rlcl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzdHJ1Y3QgZGV2aWNlICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IGJzZ19yZWdpc3Rlcl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgIHZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgZGV2aWNlICopKTsKIGV4dGVybiB2b2lkIGJzZ191bnJlZ2lzdGVyX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICopOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGJzZ19yZWdpc3Rlcl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqIHJxLCBzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgaW5saW5lIGludCBic2dfcmVnaXN0ZXJfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgICB2b2lkICgqcmVsZWFzZSkoc3RydWN0IGRldmljZSAqKSkKIHsKIAlyZXR1cm4gMDsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBic2dfdW5yZWdpc3Rlcl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcnEpCitzdGF0aWMgaW5saW5lIHZvaWQgYnNnX3VucmVnaXN0ZXJfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzZnMuaCBiL2luY2x1ZGUvbGludXgvc3lzZnMuaAppbmRleCAwMzM3OGUzLi5hZGQzYzVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNmcy5oCkBAIC0zMiw3ICszMiw3IEBACiAKIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgewogCWNvbnN0IGNoYXIJCSpuYW1lOwotCWludAkJCSgqaXNfdmlzaWJsZSkoc3RydWN0IGtvYmplY3QgKiwKKwltb2RlX3QJCQkoKmlzX3Zpc2libGUpKHN0cnVjdCBrb2JqZWN0ICosCiAJCQkJCSAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKiwgaW50KTsKIAlzdHJ1Y3QgYXR0cmlidXRlCSoqYXR0cnM7CiB9OwpAQCAtMTA1LDYgKzEwNSw4IEBACiAKIGludCBfX211c3RfY2hlY2sgc3lzZnNfY3JlYXRlX2dyb3VwKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJCSAgICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpncnApOworaW50IHN5c2ZzX3VwZGF0ZV9ncm91cChzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmdycCk7CiB2b2lkIHN5c2ZzX3JlbW92ZV9ncm91cChzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJCWNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmdycCk7CiBpbnQgc3lzZnNfYWRkX2ZpbGVfdG9fZ3JvdXAoc3RydWN0IGtvYmplY3QgKmtvYmosCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCmluZGV4IGI4YjE5ZTIuLmY2YTlmZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCkBAIC0xODEsNyArMTgxLDggQEAKIAlzZGV2X3ByaW50ayhwcmVmaXgsIChzY21kKS0+ZGV2aWNlLCBmbXQsICMjYSkKIAogZW51bSBzY3NpX3RhcmdldF9zdGF0ZSB7Ci0JU1RBUkdFVF9SVU5OSU5HID0gMSwKKwlTVEFSR0VUX0NSRUFURUQgPSAxLAorCVNUQVJHRVRfUlVOTklORywKIAlTVEFSR0VUX0RFTCwKIH07CiAK