ZGlmZiAtLWdpdCBhL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvZHJpdmVycy9lZnVzZS5jIGIvYm9vdC9jb21tb24vc3JjL2xvYWRlci9kcml2ZXJzL2VmdXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFhNmJmOAotLS0gL2Rldi9udWxsCisrKyBiL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvZHJpdmVycy9lZnVzZS5jCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxzZGlvLmg+CisKKyNpbmNsdWRlICJlZnVzZS5oIgorCisKKwordm9pZCBlZnVzZV9pbml0KHZvaWQpCit7CisJLy9zdGFydCByZWFkIGVmdXNlIGFsbCAyNTZiaXQKKwl3aGlsZSgoUkVHMzIoU1lTX0VGVVNFX0JBU0UgKyAweDQpICYgMSkgPT0gMSk7Ly8gYml0MD0xIGN0bCBpcyBidXN5CisJUkVHMzIoU1lTX0VGVVNFX0JBU0UgKyAweDQpID0gMTsKKwl3aGlsZSgoUkVHMzIoU1lTX0VGVVNFX0JBU0UgKyAweDE0KSAmIDIpID09IDApOy8vYml0MT0wIHJlYWQgbm90IG92ZXIKK30KKworaW50IGdldF9kZHJfZmxhZyh2b2lkKQoreworCWVmdXNlX3N0cnVjdCAqcHNFZnVzZUluZm8gPSBOVUxMOworCWludCBkZHJfZmxhZyA9IDA7CisKKworCXBzRWZ1c2VJbmZvID0gKGVmdXNlX3N0cnVjdCopRUZVU0VfUkFNX0JBU0U7CisKKwkvKiBnZXQgY2hpcCBmbGFnICovCisJaWYoKChwc0VmdXNlSW5mby0+c2VjdXJlX2ZsYWcgPj4gOCkgPT0gWlgyOTc1MjBWM0VDT19HV19XSU5CRF8yNTZNX0REUikKKwkJfHwoKHBzRWZ1c2VJbmZvLT5zZWN1cmVfZmxhZyA+PiA4KSA9PSBaWDI5NzUyMFYzRUNPX1pXX1dJTkJEXzI1Nk1fRERSKQkJCisJCXx8KChwc0VmdXNlSW5mby0+c2VjdXJlX2ZsYWcgPj4gOCkgPT0gWlgyOTc1MjBWM0VDT19HV19VTklMQ18yNTZNX0REUikJCQorCQl8fCgocHNFZnVzZUluZm8tPnNlY3VyZV9mbGFnID4+IDgpID09IFpYMjk3NTIwVjNFQ09fWldfVU5JTENfMjU2TV9ERFIpCisJCXx8KChwc0VmdXNlSW5mby0+c2VjdXJlX2ZsYWcgPj4gOCkgPT0gWlgyOTc1MjBWM0VDT19HV19BUE1fMjU2TV9ERFIpCisJCXx8KChwc0VmdXNlSW5mby0+c2VjdXJlX2ZsYWcgPj4gOCkgPT0gWlgyOTc1MjBWM0VDT19aV19BUE1fMjU2TV9ERFIpKQorCXsKKwkJZGRyX2ZsYWcgPSBDSElQX0REUl8zMk07CisJfQkKKwllbHNlIGlmKCgocHNFZnVzZUluZm8tPnNlY3VyZV9mbGFnID4+IDgpID09IFpYMjk3NTIwVjNFQ09fR1dfVU5JTENfNTEyTV9ERFIpCisJCXx8KChwc0VmdXNlSW5mby0+c2VjdXJlX2ZsYWcgPj4gOCkgPT0gWlgyOTc1MjBWM0VDT19HV19BUE1fNTEyTV9ERFIpCisJCXx8KChwc0VmdXNlSW5mby0+c2VjdXJlX2ZsYWcgPj4gOCkgPT0gWlgyOTc1MjBWM0VDT19HV19FU01UXzUxMk1fRERSKQorCQl8fCgocHNFZnVzZUluZm8tPnNlY3VyZV9mbGFnID4+IDgpID09IFpYMjk3NTIwVjNFQ09fWldfVU5JTENfNTEyTV9ERFIpCisJCXx8KChwc0VmdXNlSW5mby0+c2VjdXJlX2ZsYWcgPj4gOCkgPT0gWlgyOTc1MjBWM0VDT19BWldfVU5JTENfNTEyTV9ERFIpCQkKKwkJfHwoKHBzRWZ1c2VJbmZvLT5zZWN1cmVfZmxhZyA+PiA4KSA9PSBaWDI5NzUyMFYzRUNPX1pXX0FQTV81MTJNX0REUikKKwkJfHwoKHBzRWZ1c2VJbmZvLT5zZWN1cmVfZmxhZyA+PiA4KSA9PSBaWDI5NzUyMFYzRUNPX1pXX0VTTVRfNTEyTV9ERFIpKQorCXsKKwkJZGRyX2ZsYWcgPSBDSElQX0REUl82NE07CisJfQorCWVsc2UgaWYoKHBzRWZ1c2VJbmZvLT5zZWN1cmVfZmxhZyA+PiA4KSA9PSBaWDI5NzUyMFYzRUNPU0NfR1dfTllDXzJHX0REUikKKwl7CisJCWRkcl9mbGFnID0gQ0hJUF9ERFJfMjU2TTsKKwl9CisJZWxzZQorCXsKKwkJZGRyX2ZsYWcgPSBDSElQX0REUl8xMjhNOworCX0KKworCXJldHVybiBkZHJfZmxhZzsKK30KKworaW50IGdldF9zZWN1cmVfdmVyaWZ5X3N0YXR1cyh2b2lkKQoreworCXUzMiB1aUxlbjsKKwllZnVzZV9zdHJ1Y3QgKnBzRWZ1c2VJbmZvID0gTlVMTDsKKworCWlmKChSRUczMihFRlVTRV9CWVBBU1MpICYgMSkgPT0gMSkgICAvL1NlY3VyZSBWZXJpZnkuIDEtPkRpc2FibGUsIDAtPkVuYWJsZS4KKwl7CisJCXJldHVybiBTRUNVUkVfVkVSSUZZX0RJU0FCTEU7CisJfQorCQorCS8qCisJICogMC4gyOe5+3NlY3VyZSBmbGFnsru1yNPaMHhGRqOszcuz9rCyyKtib290oaMKKwkgKi8KKwlwc0VmdXNlSW5mbyA9IChlZnVzZV9zdHJ1Y3QqKUVGVVNFX1JBTV9CQVNFOworCWlmKChwc0VmdXNlSW5mby0+c2VjdXJlX2ZsYWcgJiAweEZGKSAhPSAweEZGKQorCXsKKwkJcmV0dXJuIFNFQ1VSRV9WRVJJRllfRElTQUJMRTsKKwl9CQorCQorCS8qCisJICogMS6002VmdXNl1tC2wbP2cHVrX2hhc2hbMTI3OjBdLCDF0LbPyOe5+8irsr/OqjDNy7P2sLLIq2Jvb3ShoworCSAqLworCWZvcih1aUxlbiA9IDA7IHVpTGVuIDwgNDsgdWlMZW4rKykKKwl7CisJCWlmKHBzRWZ1c2VJbmZvLT5wdWtfaGFzaFt1aUxlbl0gIT0gMCkKKwkJeworCQkJYnJlYWs7CisJCX0KKwkJaWYodWlMZW4gPT0gMykKKwkJeworCQkJcmV0dXJuIFNFQ1VSRV9WRVJJRllfRElTQUJMRTsKKwkJfQorCX0KKwlwcmludGYoIlNlY3VyZVZlcmlmeS0+ZW5hYmxlLlxuIik7CisJCisJcmV0dXJuIFNFQ1VSRV9WRVJJRllfRU5BQkxFOworfQorCisKKwo=