ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDVkYWFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RjY3AudHh0CkBAIC0wLDAgKzEsNTYgQEAKK0RDQ1AgcHJvdG9jb2wKKz09PT09PT09PT09PQorCitMYXN0IHVwZGF0ZWQ6IDEwIE5vdmVtYmVyIDIwMDUKKworQ29udGVudHMKKz09PT09PT09CisKKy0gSW50cm9kdWN0aW9uCistIE1pc3NpbmcgZmVhdHVyZXMKKy0gU29ja2V0IG9wdGlvbnMKKy0gTm90ZXMKKworSW50cm9kdWN0aW9uCis9PT09PT09PT09PT0KKworRGF0YWdyYW0gQ29uZ2VzdGlvbiBDb250cm9sIFByb3RvY29sIChEQ0NQKSBpcyBhbiB1bnJlbGlhYmxlLCBjb25uZWN0aW9uCitiYXNlZCBwcm90b2NvbCBkZXNpZ25lZCB0byBzb2x2ZSBpc3N1ZXMgcHJlc2VudCBpbiBVRFAgYW5kIFRDUCBwYXJ0aWN1bGFybHkKK2ZvciByZWFsIHRpbWUgYW5kIG11bHRpbWVkaWEgdHJhZmZpYy4KKworSXQgaGFzIGEgYmFzZSBwcm90b2NvbCBhbmQgcGx1Z2dhYmxlIGNvbmdlc3Rpb24gY29udHJvbCBJRHMgKENDSURzKS4KKworSXQgaXMgYXQgZHJhZnQgUkZDIHN0YXR1cyBhbmQgdGhlIGhvbWVwYWdlIGZvciBEQ0NQIGFzIGEgcHJvdG9jb2wgaXMgYXQ6CisJaHR0cDovL3d3dy5pY2lyLm9yZy9rb2hsZXIvZGNwLworCitNaXNzaW5nIGZlYXR1cmVzCis9PT09PT09PT09PT09PT09CisKK1RoZSBEQ0NQIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGN1cnJlbnRseSBoYXZlIGFsbCB0aGUgZmVhdHVyZXMgdGhhdCBhcmUgaW4KK3RoZSBkcmFmdCBSRkMuCisKK0luIHBhcnRpY3VsYXIgdGhlIGZvbGxvd2luZyBhcmUgbWlzc2luZzoKKy0gQ0NJRDIgc3VwcG9ydAorLSBmZWF0dXJlIG5lZ290aWF0aW9uCisKK1doZW4gdGVzdGluZyBhZ2FpbnN0IG90aGVyIGltcGxlbWVudGF0aW9ucyBpdCBhcHBlYXJzIHRoYXQgZWxhcHNlZCB0aW1lCitvcHRpb25zIGFyZSBub3QgY29kZWQgY29tcGxpYW50IHRvIHRoZSBzcGVjaWZpY2F0aW9uLgorCitTb2NrZXQgb3B0aW9ucworPT09PT09PT09PT09PT0KKworRENDUF9TT0NLT1BUX1BBQ0tFVF9TSVpFIGlzIHVzZWQgZm9yIENDSUQzIHRvIHNldCBkZWZhdWx0IHBhY2tldCBzaXplIGZvcgorY2FsY3VsYXRpb25zLgorCitEQ0NQX1NPQ0tPUFRfU0VSVklDRSBzZXRzIHRoZSBzZXJ2aWNlLiBUaGlzIGlzIGNvbXB1bHNvcnkgYXMgcGVyIHRoZQorc3BlY2lmaWNhdGlvbi4gSWYgeW91IGRvbid0IHNldCBpdCB5b3Ugd2lsbCBnZXQgRVBST1RPLgorCitOb3RlcworPT09PT0KKworU0VMaW51eCBkb2VzIG5vdCB5ZXQgaGF2ZSBzdXBwb3J0IGZvciBEQ0NQLiBZb3Ugd2lsbCBuZWVkIHRvIHR1cm4gaXQgb2ZmIG9yCitlbHNlIHlvdSB3aWxsIGdldCBFQUNDRVMuCisKK0RDQ1AgZG9lcyBub3QgdHJhdmVsIHRocm91Z2ggTkFUIHN1Y2Nlc3NmdWxseSBhdCBwcmVzZW50LiBUaGlzIGlzIGJlY2F1c2UKK3RoZSBjaGVja3N1bSBjb3ZlcnMgdGhlIHBzdWVkby1oZWFkZXIgYXMgcGVyIFRDUCBhbmQgVURQLiBJdCBzaG91bGQgYmUKK3JlbGF0aXZlbHkgdHJpdmlhbCB0byBhZGQgTGludXggTkFUIHN1cHBvcnQgZm9yIERDQ1AuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CmluZGV4IDY1ODk1YmIuLmViYzA5YTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CkBAIC03OCw2ICs3OCwxMSBAQAogCiBUQ1AgdmFyaWFibGVzOiAKIAordGNwX2FiYyAtIElOVEVHRVIKKwlDb250cm9scyBBcHByb3ByaWF0ZSBCeXRlIENvdW50IGRlZmluZWQgaW4gUkZDMzQ2NS4gSWYgc2V0IHRvCisJMCB0aGVuIGRvZXMgY29uZ2VzdGlvbiBhdm9pZCBvbmNlIHBlciBhY2suIDEgaXMgY29uc2VydmF0aXZlCisJdmFsdWUsIGFuZCAyIGlzIG1vcmUgYWdyZXNzaXZlLgorCiB0Y3Bfc3luX3JldHJpZXMgLSBJTlRFR0VSCiAJTnVtYmVyIG9mIHRpbWVzIGluaXRpYWwgU1lOcyBmb3IgYW4gYWN0aXZlIFRDUCBjb25uZWN0aW9uIGF0dGVtcHQKIAl3aWxsIGJlIHJldHJhbnNtaXR0ZWQuIFNob3VsZCBub3QgYmUgaGlnaGVyIHRoYW4gMjU1LiBEZWZhdWx0IHZhbHVlCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDU1NDFmOTkuLjBiMDNhODggMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC03MDcsNyArNzA3LDcgQEAKIFA6CUFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbwogTToJYWNtZUBtYW5kcml2YS5jb20KIEw6CWRjY3BAdmdlci5rZXJuZWwub3JnCi1XOglodHRwOi8vd3d3LndsdWcub3JnLm56L0RDQ1AKK1c6CWh0dHA6Ly9saW51eC1uZXQub3NkbC5vcmcvaW5kZXgucGhwL0RDQ1AKIFM6CU1haW50YWluZWQKIAogREVDbmV0IE5FVFdPUksgTEFZRVIKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggZWE5NmRhMS4uNmQxZjcyNyAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTM0Nyw3ICszNDcsNyBAQAogIyBOZWVkZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBPPSBvcHRpb24KIExJTlVYSU5DTFVERSAgICA6PSAtSWluY2x1ZGUgXAogICAgICAgICAgICAgICAgICAgICQoaWYgJChLQlVJTERfU1JDKSwtSWluY2x1ZGUyIC1JJChzcmN0cmVlKS9pbmNsdWRlKSBcCi0JCSAgIC1pbWFjcm9zIGluY2x1ZGUvbGludXgvYXV0b2NvbmYuaAorCQkgICAtaW5jbHVkZSBpbmNsdWRlL2xpbnV4L2F1dG9jb25mLmgKIAogQ1BQRkxBR1MgICAgICAgIDo9IC1EX19LRVJORUxfXyAkKExJTlVYSU5DTFVERSkKIApAQCAtNDA3LDcgKzQwNyw3IEBACiAjIG9mIG1ha2Ugc28gLmNvbmZpZyBpcyBub3QgaW5jbHVkZWQgaW4gdGhpcyBjYXNlIGVpdGhlciAoZm9yICpjb25maWcpLgogCiBuby1kb3QtY29uZmlnLXRhcmdldHMgOj0gY2xlYW4gbXJwcm9wZXIgZGlzdGNsZWFuIFwKLQkJCSBjc2NvcGUgVEFHUyB0YWdzIGhlbHAgJWRvY3MgY2hlY2slCisJCQkgY3Njb3BlIFRBR1MgdGFncyBoZWxwICVkb2NzIGNoZWNrJSBrZXJuZWxyZWxlYXNlCiAKIGNvbmZpZy10YXJnZXRzIDo9IDAKIG1peGVkLXRhcmdldHMgIDo9IDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCmluZGV4IGVjNzc3MjEuLjNkZjdjYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZwpAQCAtMjM5LDYgKzIzOSw4IEBACiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnIgogCitzb3VyY2UgImFyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZyIKKwogc291cmNlICJhcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZyIKIAogc291cmNlICJhcmNoL2FybS9tYWNoLWxoN2E0MHgvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL01ha2VmaWxlIGIvYXJjaC9hcm0vTWFrZWZpbGUKaW5kZXggMTE0Y2RhN2YuLjgxYmQyMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL01ha2VmaWxlCkBAIC05Myw2ICs5Myw3IEBACiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0lYUDRYWCkJICAgOj0gaXhwNHh4CiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0lYUDIwMDApICAgIDo9IGl4cDIwMDAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfT01BUDEpCSAgIDo9IG9tYXAxCisgbWFjaGluZS0kKENPTkZJR19BUkNIX09NQVAyKQkgICA6PSBvbWFwMgogICBpbmNkaXItJChDT05GSUdfQVJDSF9PTUFQKQkgICA6PSBvbWFwCiAgbWFjaGluZS0kKENPTkZJR19BUkNIX1MzQzI0MTApCSAgIDo9IHMzYzI0MTAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTEg3QTQwWCkJICAgOj0gbGg3YTQweApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jIGIvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jCmluZGV4IGFkNTU2ODAuLjU1N2U1MmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYworKysgYi9hcmNoL2FybS9jb21tb24vbG9jb21vLmMKQEAgLTU1MCw5ICs1NTAsOSBAQAogCXUxNglMQ01fU1BJTUQ7CiB9OwogCi1zdGF0aWMgaW50IGxvY29tb19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBsb2NvbW9fc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgbG9jb21vICpsY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBsb2NvbW8gKmxjaGlwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgbG9jb21vX3NhdmVfZGF0YSAqc2F2ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC01NjAsNyArNTYwLDcgQEAKIAlpZiAoIXNhdmUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZGV2LT5wb3dlci5zYXZlZF9zdGF0ZSA9ICh2b2lkICopIHNhdmU7CisJZGV2LT5kZXYucG93ZXIuc2F2ZWRfc3RhdGUgPSAodm9pZCAqKSBzYXZlOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxjaGlwLT5sb2NrLCBmbGFncyk7CiAKQEAgLTU5NCwxNCArNTk0LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbG9jb21vX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGxvY29tb19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBsb2NvbW8gKmxjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGxvY29tbyAqbGNoaXAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBsb2NvbW9fc2F2ZV9kYXRhICpzYXZlOwogCXVuc2lnbmVkIGxvbmcgcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQotCXNhdmUgPSAoc3RydWN0IGxvY29tb19zYXZlX2RhdGEgKikgZGV2LT5wb3dlci5zYXZlZF9zdGF0ZTsKKwlzYXZlID0gKHN0cnVjdCBsb2NvbW9fc2F2ZV9kYXRhICopIGRldi0+ZGV2LnBvd2VyLnNhdmVkX3N0YXRlOwogCWlmICghc2F2ZSkKIAkJcmV0dXJuIDA7CiAKQEAgLTc2MCwyNyArNzYwLDI2IEBACiAJa2ZyZWUobGNoaXApOwogfQogCi1zdGF0aWMgaW50IGxvY29tb19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGxvY29tb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqbWVtOwogCWludCBpcnE7CiAKLQltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIW1lbSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKGRldiwgMCk7CiAKLQlyZXR1cm4gX19sb2NvbW9fcHJvYmUoZGV2LCBtZW0sIGlycSk7CisJcmV0dXJuIF9fbG9jb21vX3Byb2JlKCZkZXYtPmRldiwgbWVtLCBpcnEpOwogfQogCi1zdGF0aWMgaW50IGxvY29tb19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBsb2NvbW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbG9jb21vICpsY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBsb2NvbW8gKmxjaGlwID0gcGxhdGZvcm1fX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAobGNoaXApIHsKIAkJX19sb2NvbW9fcmVtb3ZlKGxjaGlwKTsKLQkJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC03OTIsMTUgKzc5MSwxNiBAQAogICoJdGhlIHBlci1tYWNoaW5lIGxldmVsLCBhbmQgdGhlbiBoYXZlIHRoaXMgZHJpdmVyIHBpY2sKICAqCXVwIHRoZSByZWdpc3RlcmVkIGRldmljZXMuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBsb2NvbW9fZGV2aWNlX2RyaXZlciA9IHsKLQkubmFtZQkJPSAibG9jb21vIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGxvY29tb19kZXZpY2VfZHJpdmVyID0gewogCS5wcm9iZQkJPSBsb2NvbW9fcHJvYmUsCiAJLnJlbW92ZQkJPSBsb2NvbW9fcmVtb3ZlLAogI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kCT0gbG9jb21vX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBsb2NvbW9fcmVzdW1lLAogI2VuZGlmCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImxvY29tbyIsCisJfSwKIH07CiAKIC8qCkBAIC0xMTI2LDEzICsxMTI2LDEzIEBACiB7CiAJaW50IHJldCA9IGJ1c19yZWdpc3RlcigmbG9jb21vX2J1c190eXBlKTsKIAlpZiAocmV0ID09IDApCi0JCWRyaXZlcl9yZWdpc3RlcigmbG9jb21vX2RldmljZV9kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmxvY29tb19kZXZpY2VfZHJpdmVyKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbG9jb21vX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmbG9jb21vX2RldmljZV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZsb2NvbW9fZGV2aWNlX2RyaXZlcik7CiAJYnVzX3VucmVnaXN0ZXIoJmxvY29tb19idXNfdHlwZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9zYTExMTEuYyBiL2FyY2gvYXJtL2NvbW1vbi9zYTExMTEuYwppbmRleCAxNzRhYTg2Li43YjA3YWNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vc2ExMTExLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jCkBAIC04MDEsOSArODAxLDkgQEAKIAogI2lmZGVmIENPTkZJR19QTQogCi1zdGF0aWMgaW50IHNhMTExMV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzYTExMTFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3Qgc2ExMTExICpzYWNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2ExMTExICpzYWNoaXAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzYTExMTFfc2F2ZV9kYXRhICpzYXZlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHZhbDsKQEAgLTgxMiw3ICs4MTIsNyBAQAogCXNhdmUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2ExMTExX3NhdmVfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghc2F2ZSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JZGV2LT5wb3dlci5zYXZlZF9zdGF0ZSA9IHNhdmU7CisJZGV2LT5kZXYucG93ZXIuc2F2ZWRfc3RhdGUgPSBzYXZlOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNhY2hpcC0+bG9jaywgZmxhZ3MpOwogCkBAIC04NTksMTQgKzg1OSwxNCBAQAogICoJcmVzdG9yZWQgYnkgdGhlaXIgcmVzcGVjdGl2ZSBkcml2ZXJzLCBhbmQgbXVzdCBiZSBjYWxsZWQKICAqCXZpYSBMRE0gYWZ0ZXIgdGhpcyBmdW5jdGlvbi4KICAqLwotc3RhdGljIGludCBzYTExMTFfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc2ExMTExX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHNhMTExMSAqc2FjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNhMTExMSAqc2FjaGlwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc2ExMTExX3NhdmVfZGF0YSAqc2F2ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCBpZDsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAKLQlzYXZlID0gKHN0cnVjdCBzYTExMTFfc2F2ZV9kYXRhICopZGV2LT5wb3dlci5zYXZlZF9zdGF0ZTsKKwlzYXZlID0gKHN0cnVjdCBzYTExMTFfc2F2ZV9kYXRhICopZGV2LT5kZXYucG93ZXIuc2F2ZWRfc3RhdGU7CiAJaWYgKCFzYXZlKQogCQlyZXR1cm4gMDsKIApAQCAtODc5LDcgKzg3OSw3IEBACiAJaWQgPSBzYTExMTFfcmVhZGwoc2FjaGlwLT5iYXNlICsgU0ExMTExX1NLSUQpOwogCWlmICgoaWQgJiBTS0lEX0lEX01BU0spICE9IFNLSURfU0ExMTExX0lEKSB7CiAJCV9fc2ExMTExX3JlbW92ZShzYWNoaXApOwotCQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAkJa2ZyZWUoc2F2ZSk7CiAJCXJldHVybiAwOwogCX0KQEAgLTkxMSw3ICs5MTEsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2FjaGlwLT5sb2NrLCBmbGFncyk7CiAKLQlkZXYtPnBvd2VyLnNhdmVkX3N0YXRlID0gTlVMTDsKKwlkZXYtPmRldi5wb3dlci5zYXZlZF9zdGF0ZSA9IE5VTEw7CiAJa2ZyZWUoc2F2ZSk7CiAKIAlyZXR1cm4gMDsKQEAgLTkyMiw5ICs5MjIsOCBAQAogI2RlZmluZSBzYTExMTFfcmVzdW1lICBOVUxMCiAjZW5kaWYKIAotc3RhdGljIGludCBzYTExMTFfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzYTExMTFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHJlc291cmNlICptZW07CiAJaW50IGlycTsKIApAQCAtOTMzLDIwICs5MzIsMjAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAotCXJldHVybiBfX3NhMTExMV9wcm9iZShkZXYsIG1lbSwgaXJxKTsKKwlyZXR1cm4gX19zYTExMTFfcHJvYmUoJnBkZXYtPmRldiwgbWVtLCBpcnEpOwogfQogCi1zdGF0aWMgaW50IHNhMTExMV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzYTExMTFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHNhMTExMSAqc2FjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNhMTExMSAqc2FjaGlwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAlpZiAoc2FjaGlwKSB7CiAJCV9fc2ExMTExX3JlbW92ZShzYWNoaXApOwotCQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKICNpZmRlZiBDT05GSUdfUE0KLQkJa2ZyZWUoZGV2LT5wb3dlci5zYXZlZF9zdGF0ZSk7Ci0JCWRldi0+cG93ZXIuc2F2ZWRfc3RhdGUgPSBOVUxMOworCQlrZnJlZShwZGV2LT5kZXYucG93ZXIuc2F2ZWRfc3RhdGUpOworCQlwZGV2LT5kZXYucG93ZXIuc2F2ZWRfc3RhdGUgPSBOVUxMOwogI2VuZGlmCiAJfQogCkBAIC05NjIsMTMgKzk2MSwxNCBAQAogICoJV2UgYWxzbyBuZWVkIHRvIGhhbmRsZSB0aGUgU0RSQU0gY29uZmlndXJhdGlvbiBmb3IKICAqCVBYQTI1MC9TQTExMTAgbWFjaGluZSBjbGFzc2VzLgogICovCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc2ExMTExX2RldmljZV9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInNhMTExMSIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzYTExMTFfZGV2aWNlX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gc2ExMTExX3Byb2JlLAogCS5yZW1vdmUJCT0gc2ExMTExX3JlbW92ZSwKIAkuc3VzcGVuZAk9IHNhMTExMV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc2ExMTExX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAic2ExMTExIiwKKwl9LAogfTsKIAogLyoKQEAgLTEyNTYsMTMgKzEyNTYsMTMgQEAKIHsKIAlpbnQgcmV0ID0gYnVzX3JlZ2lzdGVyKCZzYTExMTFfYnVzX3R5cGUpOwogCWlmIChyZXQgPT0gMCkKLQkJZHJpdmVyX3JlZ2lzdGVyKCZzYTExMTFfZGV2aWNlX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2ExMTExX2RldmljZV9kcml2ZXIpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzYTExMTFfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzYTExMTFfZGV2aWNlX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNhMTExMV9kZXZpY2VfZHJpdmVyKTsKIAlidXNfdW5yZWdpc3Rlcigmc2ExMTExX2J1c190eXBlKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL3Njb29wLmMgYi9hcmNoL2FybS9jb21tb24vc2Nvb3AuYwppbmRleCBjN2ZkZjM5Li4zMjkyNGM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vc2Nvb3AuYworKysgYi9hcmNoL2FybS9jb21tb24vc2Nvb3AuYwpAQCAtOTgsOSArOTgsOSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHNjb29wX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNjb29wX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHNjb29wX2RldiAqc2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzY29vcF9kZXYgKnNkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJY2hlY2tfc2Nvb3BfcmVnKHNkZXYpOwogCXNkZXYtPnNjb29wX2dwd3IgPSBTQ09PUF9SRUcoc2Rldi0+YmFzZSwgU0NPT1BfR1BXUik7CkBAIC0xMDksOSArMTA5LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzY29vcF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzY29vcF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBzY29vcF9kZXYgKnNkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2Nvb3BfZGV2ICpzZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWNoZWNrX3Njb29wX3JlZyhzZGV2KTsKIAlTQ09PUF9SRUcoc2Rldi0+YmFzZSxTQ09PUF9HUFdSKSA9IHNkZXYtPnNjb29wX2dwd3I7CkBAIC0xMjMsMTEgKzEyMywxMCBAQAogI2RlZmluZSBzY29vcF9yZXN1bWUJTlVMTAogI2VuZGlmCiAKLWludCBfX2luaXQgc2Nvb3BfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoraW50IF9faW5pdCBzY29vcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzY29vcF9kZXYgKmRldnB0cjsKIAlzdHJ1Y3Qgc2Nvb3BfY29uZmlnICppbmY7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAogCWlmICghbWVtKQpAQCAtMTQxLDcgKzE0MCw3IEBACiAJbWVtc2V0KGRldnB0ciwgMCwgc2l6ZW9mKHN0cnVjdCBzY29vcF9kZXYpKTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2cHRyLT5zY29vcF9sb2NrKTsKIAotCWluZiA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlpbmYgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlkZXZwdHItPmJhc2UgPSBpb3JlbWFwKG1lbS0+c3RhcnQsIG1lbS0+ZW5kIC0gbWVtLT5zdGFydCArIDEpOwogCiAJaWYgKCFkZXZwdHItPmJhc2UpIHsKQEAgLTE0OSw3ICsxNDgsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBkZXZwdHIpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldnB0cik7CiAKIAlwcmludGsoIlNoYXJwIFNjb29wIERldmljZSBmb3VuZCBhdCAweCUwOHggLT4gMHglMDh4XG4iLCh1bnNpZ25lZCBpbnQpbWVtLT5zdGFydCwodW5zaWduZWQgaW50KWRldnB0ci0+YmFzZSk7CiAKQEAgLTE2NCwyOSArMTYzLDMwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2Nvb3BfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc2Nvb3BfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHNjb29wX2RldiAqc2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzY29vcF9kZXYgKnNkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlpZiAoc2RldikgewogCQlpb3VubWFwKHNkZXYtPmJhc2UpOwogCQlrZnJlZShzZGV2KTsKLQkJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNjb29wX2RyaXZlciA9IHsKLQkubmFtZQkJPSAic2hhcnAtc2Nvb3AiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2Nvb3BfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzY29vcF9wcm9iZSwKIAkucmVtb3ZlIAk9IHNjb29wX3JlbW92ZSwKIAkuc3VzcGVuZAk9IHNjb29wX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzY29vcF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInNoYXJwLXNjb29wIiwKKwl9LAogfTsKIAogaW50IF9faW5pdCBzY29vcF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmc2Nvb3BfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzY29vcF9kcml2ZXIpOwogfQogCiBzdWJzeXNfaW5pdGNhbGwoc2Nvb3BfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfaDJfMTYxMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfaDJfMTYxMF9kZWZjb25maWcKaW5kZXggNDE5ODY3Ny4uNTI5ZjBmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2gyXzE2MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oMl8xNjEwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMwotIyBNb24gU2VwICA1IDE4OjA3OjEyIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNAorIyBXZWQgTm92ICA5IDE4OjUzOjQwIDIwMDUKICMKIENPTkZJR19BUk09eQogQ09ORklHX01NVT15CkBAIC0yMiw2ICsyMiw3IEBACiAjIEdlbmVyYWwgc2V0dXAKICMKIENPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldApAQCAtMzEsNiArMzIsNyBAQAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiBDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKQEAgLTYwLDYgKzYyLDIzIEBACiAjIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKIAogIworIyBCbG9jayBsYXllcgorIworCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKworIwogIyBTeXN0ZW0gVHlwZQogIwogIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CkBAIC04MSw2ICsxMDAsNyBAQAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVA9eQogIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldApAQCAtMTEyLDcgKzEzMiw3IEBACiAjIE9NQVAgQ29yZSBUeXBlCiAjCiAjIENPTkZJR19BUkNIX09NQVA3MzAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQMTUxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAxNVhYIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVAxNlhYPXkKIAogIwpAQCAtMTc3LDYgKzE5Nyw4IEBACiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CiAjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CiAKQEAgLTI1OCwxNCArMjgwLDE5IEBACiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfVENQRElBRz15Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CkBAIC0yODEsNiArMzA4LDEwIEBACiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKIApAQCAtMjkxLDYgKzMyMiw3IEBACiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTMyOCwyMSArMzYwLDEzIEBACiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQogQ09ORklHX0FUQV9PVkVSX0VUSD1tCiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIApAQCAtMzY5LDEwICszOTMsMTIgQEAKICMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwogIworIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtNDA0LDYgKzQzMCwxMSBAQAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKIAogIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCiAjCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTQzOSw2ICs0NzAsNyBAQAogIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUF9ERUZMQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKIENPTkZJR19TTElQPXkKIENPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQpAQCAtNTQxLDE4ICs1NzMsMTggQEAKICMKICMgVFBNIGRldmljZXMKICMKKyMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydAogIwogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TRU5TT1IgaXMgbm90IHNldAotQ09ORklHX0lTUDEzMDFfT01BUD15CiAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CiAjCiBDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCkBAIC01NjAsNiArNTkyLDEwIEBACiAjCiAKICMKKyMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCisjCisKKyMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNTc2LDcgKzYxMiw2IEBACiAjIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU09GVF9DVVJTT1IgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAogQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldApAQCAtNTg5LDYgKzYyNCw3IEBACiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19GT05UUz15CiBDT05GSUdfRk9OVF84eDg9eQogQ09ORklHX0ZPTlRfOHgxNj15CkBAIC02MDAsNiArNjM2LDcgQEAKICMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9STCBpcyBub3Qgc2V0CiAKICMKICMgTG9nbyBjb25maWd1cmF0aW9uCkBAIC02MjQsMTAgKzY2MSwxMCBAQAogIyBPcGVuIFNvdW5kIFN5c3RlbQogIwogQ09ORklHX1NPVU5EX1BSSU1FPXkKKyMgQ09ORklHX09CU09MRVRFX09TU19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfTVNORENMQVMgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfTVNORFBJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfQUQxOTgwIGlzIG5vdCBzZXQKIAogIwogIyBVU0Igc3VwcG9ydApAQCAtNjM3LDIyICs2NzQsMjEgQEAKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAKICMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCiAjIFVTQiBHYWRnZXQgU3VwcG9ydAogIwotQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX09NQVA9eQotQ09ORklHX1VTQl9PTUFQPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VUSD15Ci1DT05GSUdfVVNCX0VUSF9STkRJUz15CisjIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CkBAIC02NzMsMTAgKzcwOSw2IEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLQotIwotIyBYRlMgc3VwcG9ydAotIwogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ST01GU19GUz15CkBAIC02ODUsNiArNzE3LDcgQEAKIENPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTcwNiwxMCArNzM5LDEwIEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtNzUwLDYgKzc4Myw3IEBACiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwpAQCAtODU5LDYgKzg5Myw3IEBACiAjIExpYnJhcnkgcm91dGluZXMKICMKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2NzdW1wYXJ0aWFsLlMgYi9hcmNoL2FybS9saWIvY3N1bXBhcnRpYWwuUwppbmRleCBjYjVlMzcwLi5mZTc5N2NmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvY3N1bXBhcnRpYWwuUworKysgYi9hcmNoL2FybS9saWIvY3N1bXBhcnRpYWwuUwpAQCAtMzksNiArMzksNyBAQAogCiAJCS8qIHdlIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgYnl0ZS4gKi8KIAkJdHN0CWJ1ZiwgIzEJCQlAIG9kZCBhZGRyZXNzPworCQltb3ZuZQlzdW0sIHN1bSwgcm9yICM4CiAJCWxkcm5lYgl0ZDAsIFtidWZdLCAjMQogCQlzdWJuZQlsZW4sIGxlbiwgIzEKIAkJYWRjbmVzCXN1bSwgc3VtLCB0ZDAsIHB1dF9ieXRlXzEKQEAgLTEwMyw2ICsxMDQsOSBAQAogCQljbXAJbGVuLCAjOAkJCUAgRW5zdXJlIHRoYXQgd2UgaGF2ZSBhdCBsZWFzdAogCQlibG8JLmxlc3M4CQkJQCA4IGJ5dGVzIHRvIGNvcHkuCiAKKwkJdHN0CWJ1ZiwgIzEKKwkJbW92bmUJc3VtLCBzdW0sIHJvciAjOAorCiAJCWFkZHMJc3VtLCBzdW0sICMwCQlAIEMgPSAwCiAJCXRzdAlidWYsICMzCQkJQCBUZXN0IGRlc3RpbmF0aW9uIGFsaWdubWVudAogCQlibG5lCS5ub3RfYWxpZ25lZAkJQCBhbGlnaCBkZXN0aW5hdGlvbiwgcmV0dXJuIGhlcmUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9LY29uZmlnCmluZGV4IDg5NzYyYTIuLjM4NTI4NTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvS2NvbmZpZwpAQCAtOCw2ICs4LDE2IEBACiAKIGNvbW1lbnQgIklYUDR4eCBQbGF0Zm9ybXMiCiAKKyMgVGhpcyBlbnRyeSBpcyBwbGFjZWQgb24gdG9wIGJlY2F1c2Ugb3RoZXJ3aXNlIGl0IHdvdWxkIGhhdmUKKyMgYmVlbiBzaG93biBhcyBhIHN1Ym1lbnUuCitjb25maWcgTUFDSF9OU0xVMgorCWJvb2wKKwlwcm9tcHQgIk5TTFUyIiBpZiAhKE1BQ0hfSVhEUDQ2NSB8fCBNQUNIX0lYRFBHNDI1IHx8IEFSQ0hfSVhEUDQyNSB8fCBBUkNIX0FESV9DT1lPVEUgfHwgQVJDSF9BVklMQSB8fCBBUkNIX0lYQ0RQMTEwMCB8fCBBUkNIX1BSUE1DMTEwMCB8fCBNQUNIX0dUV1g1NzE1KQorCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IExpbmtzeXMncworCSAgTlNMVTIgTkFTIGRldmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBwbGF0Zm9ybSwKKwkgIHNlZSBodHRwOi8vd3d3Lm5zbHUyLWxpbnV4Lm9yZworCiBjb25maWcgQVJDSF9BVklMQQogCWJvb2wgIkF2aWxhIgogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvTWFrZWZpbGUKaW5kZXggZGRlY2JkYS4uN2ExNTYyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvTWFrZWZpbGUKQEAgLTgsNCArOCw1IEBACiBvYmotJChDT05GSUdfTUFDSF9JWERQRzQyNSkJKz0gaXhkcGc0MjUtcGNpLm8gY295b3RlLXNldHVwLm8KIG9iai0kKENPTkZJR19BUkNIX0FESV9DT1lPVEUpCSs9IGNveW90ZS1wY2kubyBjb3lvdGUtc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfR1RXWDU3MTUpCSs9IGd0d3g1NzE1LXBjaS5vIGd0d3g1NzE1LXNldHVwLm8KK29iai0kKENPTkZJR19NQUNIX05TTFUyKQkrPSBuc2x1Mi1wY2kubyBuc2x1Mi1zZXR1cC5vIG5zbHUyLXBvd2VyLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItcGNpLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTc1ZjJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItcGNpLmMKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXBjaS5jCisgKgorICogTlNMVTIgYm9hcmQtbGV2ZWwgUENJIGluaXRpYWxpemF0aW9uCisgKgorICogYmFzZWQgb24gaXhkcDQyNS1wY2kuYzoKKyAqCUNvcHlyaWdodCAoQykgMjAwMiBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCUNvcHlyaWdodCAoQykgMjAwMy0yMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBNYWludGFpbmVyOiBodHRwOi8vd3d3Lm5zbHUyLWxpbnV4Lm9yZy8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKwordm9pZCBfX2luaXQgbnNsdTJfcGNpX3ByZWluaXQodm9pZCkKK3sKKwlzZXRfaXJxX3R5cGUoSVJRX05TTFUyX1BDSV9JTlRBLCBJUlFUX0xPVyk7CisJc2V0X2lycV90eXBlKElSUV9OU0xVMl9QQ0lfSU5UQiwgSVJRVF9MT1cpOworCXNldF9pcnFfdHlwZShJUlFfTlNMVTJfUENJX0lOVEMsIElSUVRfTE9XKTsKKworCWdwaW9fbGluZV9pc3JfY2xlYXIoTlNMVTJfUENJX0lOVEFfUElOKTsKKwlncGlvX2xpbmVfaXNyX2NsZWFyKE5TTFUyX1BDSV9JTlRCX1BJTik7CisJZ3Bpb19saW5lX2lzcl9jbGVhcihOU0xVMl9QQ0lfSU5UQ19QSU4pOworCisJLyogSU5URCBpcyBub3QgY29uZmlndXJlZCBhcyBHUElPIGlzIHVzZWQKKwkgKiBmb3IgdGhlIHBvd2VyIGlucHV0IGJ1dHRvbi4KKwkgKi8KKworCWl4cDR4eF9wY2lfcHJlaW5pdCgpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBuc2x1Ml9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwlzdGF0aWMgaW50IHBjaV9pcnFfdGFibGVbTlNMVTJfUENJX0lSUV9MSU5FU10gPSB7CisJCUlSUV9OU0xVMl9QQ0lfSU5UQSwKKwkJSVJRX05TTFUyX1BDSV9JTlRCLAorCQlJUlFfTlNMVTJfUENJX0lOVEMsCisJfTsKKworCWludCBpcnEgPSAtMTsKKworCWlmIChzbG90ID49IDEgJiYgc2xvdCA8PSBOU0xVMl9QQ0lfTUFYX0RFViAmJgorCQlwaW4gPj0gMSAmJiBwaW4gPD0gTlNMVTJfUENJX0lSUV9MSU5FUykgeworCQkJaXJxID0gcGNpX2lycV90YWJsZVsoc2xvdCArIHBpbiAtIDIpICUgTlNMVTJfUENJX0lSUV9MSU5FU107CisJfQorCisJcmV0dXJuIGlycTsKK30KKworc3RydWN0IGh3X3BjaSBfX2luaXRkYXRhIG5zbHUyX3BjaSA9IHsKKwkubnJfY29udHJvbGxlcnMgPSAxLAorCS5wcmVpbml0CT0gbnNsdTJfcGNpX3ByZWluaXQsCisJLnN3aXp6bGUJPSBwY2lfc3RkX3N3aXp6bGUsCisJLnNldHVwCQk9IGl4cDR4eF9zZXR1cCwKKwkuc2NhbgkJPSBpeHA0eHhfc2Nhbl9idXMsCisJLm1hcF9pcnEJPSBuc2x1Ml9tYXBfaXJxLAorfTsKKworaW50IF9faW5pdCBuc2x1Ml9wY2lfaW5pdCh2b2lkKSAvKiBtb25rZXkgc2VlLCBtb25rZXkgZG8gKi8KK3sKKwlpZiAobWFjaGluZV9pc19uc2x1MigpKQorCQlwY2lfY29tbW9uX2luaXQoJm5zbHUyX3BjaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3Vic3lzX2luaXRjYWxsKG5zbHUyX3BjaV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXBvd2VyLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1wb3dlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZmJjOGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1wb3dlci5jCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1wb3dlci5jCisgKgorICogTlNMVTIgUG93ZXIvUmVzZXQgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFRvd2VyIFRlY2hub2xvZ2llcworICoKKyAqIGJhc2VkIG9uIG5zbHUyLWlvLmMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgS2FyZW4gU3BlYXJlbAorICoKKyAqIEF1dGhvcjogQWxlc3NhbmRybyBadW1tbyA8YS56dW1tb0B0b3dlcnRlY2guaXQ+CisgKiBNYWludGFpbmVyczogaHR0cDovL3d3dy5uc2x1Mi1saW51eC5vcmcvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworZXh0ZXJuIHZvaWQgY3RybF9hbHRfZGVsKHZvaWQpOworCitzdGF0aWMgaXJxcmV0dXJuX3QgbnNsdTJfcG93ZXJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCS8qIFNpZ25hbCBpbml0IHRvIGRvIHRoZSBjdHJsYWx0ZGVsIGFjdGlvbiwgdGhpcyB3aWxsIGJ5cGFzcyBpbml0IGlmCisJICogaXQgaGFzbid0IHN0YXJ0ZWQgYW5kIGRvIGEga2VybmVsX3Jlc3RhcnQuCisJICovCisJY3RybF9hbHRfZGVsKCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBuc2x1Ml9yZXNldF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJLyogVGhpcyBpcyB0aGUgcGFwZXItY2xpcCByZXNldCwgaXQgc2h1dHMgdGhlIG1hY2hpbmUgZG93biBkaXJlY3RseS4KKwkgKi8KKwltYWNoaW5lX3Bvd2VyX29mZigpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9faW5pdCBuc2x1Ml9wb3dlcl9pbml0KHZvaWQpCit7CisJaWYgKCEobWFjaGluZV9pc19uc2x1MigpKSkKKwkJcmV0dXJuIDA7CisKKwkqSVhQNFhYX0dQSU9fR1BJU1IgPSAweDIwNDAwMDAwOwkvKiByZWFkIHRoZSAyIGlycXMgdG8gY2xyICovCisKKwlzZXRfaXJxX3R5cGUoTlNMVTJfUkJfSVJRLCBJUlFUX0xPVyk7CisJc2V0X2lycV90eXBlKE5TTFUyX1BCX0lSUSwgSVJRVF9ISUdIKTsKKworCWdwaW9fbGluZV9pc3JfY2xlYXIoTlNMVTJfUkJfR1BJTyk7CisJZ3Bpb19saW5lX2lzcl9jbGVhcihOU0xVMl9QQl9HUElPKTsKKworCWlmIChyZXF1ZXN0X2lycShOU0xVMl9SQl9JUlEsICZuc2x1Ml9yZXNldF9oYW5kbGVyLAorCQlTQV9JTlRFUlJVUFQsICJOU0xVMiByZXNldCBidXR0b24iLCBOVUxMKSA8IDApIHsKKworCQlwcmludGsoS0VSTl9ERUJVRyAiUmVzZXQgQnV0dG9uIElSUSAlZCBub3QgYXZhaWxhYmxlXG4iLAorCQkJTlNMVTJfUkJfSVJRKTsKKworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAocmVxdWVzdF9pcnEoTlNMVTJfUEJfSVJRLCAmbnNsdTJfcG93ZXJfaGFuZGxlciwKKwkJU0FfSU5URVJSVVBULCAiTlNMVTIgcG93ZXIgYnV0dG9uIiwgTlVMTCkgPCAwKSB7CisKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlBvd2VyIEJ1dHRvbiBJUlEgJWQgbm90IGF2YWlsYWJsZVxuIiwKKwkJCU5TTFUyX1BCX0lSUSk7CisKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBuc2x1Ml9wb3dlcl9leGl0KHZvaWQpCit7CisJZnJlZV9pcnEoTlNMVTJfUkJfSVJRLCBOVUxMKTsKKwlmcmVlX2lycShOU0xVMl9QQl9JUlEsIE5VTEwpOworfQorCittb2R1bGVfaW5pdChuc2x1Ml9wb3dlcl9pbml0KTsKK21vZHVsZV9leGl0KG5zbHUyX3Bvd2VyX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJBbGVzc2FuZHJvIFp1bW1vIDxhLnp1bW1vQHRvd2VydGVjaC5pdD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTlNMVTIgUG93ZXIvUmVzZXQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODllOTRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItc2V0dXAuYwpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXNldHVwLmMKKyAqCisgKiBOU0xVMiBib2FyZC1zZXR1cAorICoKKyAqIGJhc2VkIGl4ZHA0MjUtc2V0dXAuYzoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIEF1dGhvcjogTWFyayBSYWtlcyA8bXJha2VzIGF0IG1hYy5jb20+CisgKiBNYWludGFpbmVyczogaHR0cDovL3d3dy5uc2x1Mi1saW51eC5vcmcvCisgKgorICogRml4ZWQgbWlzc2luZyBpbml0X3RpbWUgaW4gTUFDSElORV9TVEFSVCBrYXMxMSAxMC8yMi8wNAorICogQ2hhbmdlZCB0byBjb25mb3JtIHRvIG5ldyBzdHlsZSBfX2luaXQgaXhkcDQyNSBrYXMxMSAxMC8yMi8wNAorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIG5zbHUyX2ZsYXNoX2RhdGEgPSB7CisJLm1hcF9uYW1lCQk9ICJjZmlfcHJvYmUiLAorCS53aWR0aAkJCT0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbnNsdTJfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQkJPSBOU0xVMl9GTEFTSF9CQVNFLAorCS5lbmQJCQk9IE5TTFUyX0ZMQVNIX0JBU0UgKyBOU0xVMl9GTEFTSF9TSVpFLAorCS5mbGFncwkJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBuc2x1Ml9mbGFzaCA9IHsKKwkubmFtZQkJCT0gIklYUDRYWC1GbGFzaCIsCisJLmlkCQkJPSAwLAorCS5kZXYucGxhdGZvcm1fZGF0YQk9ICZuc2x1Ml9mbGFzaF9kYXRhLAorCS5udW1fcmVzb3VyY2VzCQk9IDEsCisJLnJlc291cmNlCQk9ICZuc2x1Ml9mbGFzaF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXhwNHh4X2kyY19waW5zIG5zbHUyX2kyY19ncGlvX3BpbnMgPSB7CisJLnNkYV9waW4JCT0gTlNMVTJfU0RBX1BJTiwKKwkuc2NsX3BpbgkJPSBOU0xVMl9TQ0xfUElOLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnNsdTJfaTJjX2NvbnRyb2xsZXIgPSB7CisJLm5hbWUJCQk9ICJJWFA0WFgtSTJDIiwKKwkuaWQJCQk9IDAsCisJLmRldi5wbGF0Zm9ybV9kYXRhCT0gJm5zbHUyX2kyY19ncGlvX3BpbnMsCisJLm51bV9yZXNvdXJjZXMJCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbnNsdTJfdWFydF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBJWFA0WFhfVUFSVDFfQkFTRV9QSFlTLAorCQkuZW5kCQk9IElYUDRYWF9VQVJUMV9CQVNFX1BIWVMgKyAweDBmZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IElYUDRYWF9VQVJUMl9CQVNFX1BIWVMsCisJCS5lbmQJCT0gSVhQNFhYX1VBUlQyX0JBU0VfUEhZUyArIDB4MGZmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgbnNsdTJfdWFydF9kYXRhW10gPSB7CisJeworCQkubWFwYmFzZQk9IElYUDRYWF9VQVJUMV9CQVNFX1BIWVMsCisJCS5tZW1iYXNlCT0gKGNoYXIgKilJWFA0WFhfVUFSVDFfQkFTRV9WSVJUICsgUkVHX09GRlNFVCwKKwkJLmlycQkJPSBJUlFfSVhQNFhYX1VBUlQxLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5yZWdzaGlmdAk9IDIsCisJCS51YXJ0Y2xrCT0gSVhQNFhYX1VBUlRfWFRBTCwKKwl9LAorCXsKKwkJLm1hcGJhc2UJPSBJWFA0WFhfVUFSVDJfQkFTRV9QSFlTLAorCQkubWVtYmFzZQk9IChjaGFyICopSVhQNFhYX1VBUlQyX0JBU0VfVklSVCArIFJFR19PRkZTRVQsCisJCS5pcnEJCT0gSVJRX0lYUDRYWF9VQVJUMiwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkucmVnc2hpZnQJPSAyLAorCQkudWFydGNsawk9IElYUDRYWF9VQVJUX1hUQUwsCisJfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5zbHUyX3VhcnQgPSB7CisJLm5hbWUJCQk9ICJzZXJpYWw4MjUwIiwKKwkuaWQJCQk9IFBMQVQ4MjUwX0RFVl9QTEFURk9STSwKKwkuZGV2LnBsYXRmb3JtX2RhdGEJPSBuc2x1Ml91YXJ0X2RhdGEsCisJLm51bV9yZXNvdXJjZXMJCT0gMiwKKwkucmVzb3VyY2UJCT0gbnNsdTJfdWFydF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbnNsdTJfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJm5zbHUyX2kyY19jb250cm9sbGVyLAorCSZuc2x1Ml9mbGFzaCwKKwkmbnNsdTJfdWFydCwKK307CisKK3N0YXRpYyB2b2lkIG5zbHUyX3Bvd2VyX29mZih2b2lkKQoreworCS8qIFRoaXMgY2F1c2VzIHRoZSBib3ggdG8gZHJvcCB0aGUgcG93ZXIgYW5kIGdvIGRlYWQuICovCisKKwkvKiBlbmFibGUgdGhlIHB3ciBjbnRsIGdwaW8gKi8KKwlncGlvX2xpbmVfY29uZmlnKE5TTFUyX1BPX0dQSU8sIElYUDRYWF9HUElPX09VVCk7CisKKwkvKiBkbyB0aGUgZGVlZCAqLworCWdwaW9fbGluZV9zZXQoTlNMVTJfUE9fR1BJTywgSVhQNFhYX0dQSU9fSElHSCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBuc2x1Ml9pbml0KHZvaWQpCit7CisJaXhwNHh4X3N5c19pbml0KCk7CisKKwlwbV9wb3dlcl9vZmYgPSBuc2x1Ml9wb3dlcl9vZmY7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhuc2x1Ml9kZXZpY2VzLCBBUlJBWV9TSVpFKG5zbHUyX2RldmljZXMpKTsKK30KKworTUFDSElORV9TVEFSVChOU0xVMiwgIkxpbmtzeXMgTlNMVTIiKQorCS8qIE1haW50YWluZXI6IHd3dy5uc2x1Mi1saW51eC5vcmcgKi8KKwkucGh5c19yYW0JPSBQSFlTX09GRlNFVCwKKwkucGh5c19pbwk9IElYUDRYWF9QRVJJUEhFUkFMX0JBU0VfUEhZUywKKwkuaW9fcGdfb2Zmc3QJPSAoKElYUDRYWF9QRVJJUEhFUkFMX0JBU0VfVklSVCkgPj4gMTgpICYgMHhGRkZDLAorCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCisJLm1hcF9pbwkJPSBpeHA0eHhfbWFwX2lvLAorCS5pbml0X2lycQk9IGl4cDR4eF9pbml0X2lycSwKKwkudGltZXIgICAgICAgICAgPSAmaXhwNHh4X3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBuc2x1Ml9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZwppbmRleCAyN2ZjMmU4Li44NmEwZjBkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnCkBAIC02LDEwICs2LDEwIEBACiAJYm9vbCAiT01BUDczMCBCYXNlZCBTeXN0ZW0iCiAJc2VsZWN0IEFSQ0hfT01BUF9PVEcKIAotY29uZmlnIEFSQ0hfT01BUDE1MTAKK2NvbmZpZyBBUkNIX09NQVAxNVhYCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAxCiAJZGVmYXVsdCB5Ci0JYm9vbCAiT01BUDE1MTAgQmFzZWQgU3lzdGVtIgorCWJvb2wgIk9NQVAxNXh4IEJhc2VkIFN5c3RlbSIKIAogY29uZmlnIEFSQ0hfT01BUDE2WFgKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDEKQEAgLTIxLDcgKzIxLDcgQEAKIAogY29uZmlnIE1BQ0hfT01BUF9JTk5PVkFUT1IKIAlib29sICJUSSBJbm5vdmF0b3IiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNTEwIHx8IEFSQ0hfT01BUDE2WFgpCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNVhYIHx8IEFSQ0hfT01BUDE2WFgpCiAJaGVscAogICAgICAgICAgIFRJIE9NQVAgMTUxMCBvciAxNjEwIElubm92YXRvciBib2FyZCBzdXBwb3J0LiBTYXkgWSBoZXJlIGlmIHlvdQogICAgICAgICAgIGhhdmUgc3VjaCBhIGJvYXJkLgpAQCAtNjQsMjAgKzY0LDMwIEBACiAKIGNvbmZpZyBNQUNIX1ZPSUNFQkxVRQogCWJvb2wgIlZvaWNlYmx1ZSIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQMTUxMAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiBBUkNIX09NQVAxNVhYCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgVm9pY2VibHVlIEdTTS9Wb0lQIGdhdGV3YXkuIFNheSBZIGhlcmUgaWYgeW91IGhhdmUKIAkgIHN1Y2ggYSBib2FyZC4KIAogY29uZmlnIE1BQ0hfTkVUU1RBUgogCWJvb2wgIk5ldFN0YXIiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIEFSQ0hfT01BUDE1MTAKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQMTVYWAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIE5ldFN0YXIgUEJYLiBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIHN1Y2ggYSBib2FyZC4KIAorY29uZmlnIE1BQ0hfT01BUF9QQUxNVEUKKwlib29sICJQYWxtIFR1bmdzdGVuIEUiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIEFSQ0hfT01BUDE1WFgKKwloZWxwCisgICAgICAgICAgU3VwcG9ydCBmb3IgdGhlIFBhbG0gVHVuZ3N0ZW4gRSBQREEuIEN1cnJlbnRseSBvbmx5IHRoZSBMQ0QgcGFuZWwKKyAgICAgICAgICBpcyBzdXBwb3J0ZWQuIFRvIGJvb3QgdGhlIGtlcm5lbCwgeW91J2xsIG5lZWQgYSBQYWxtT1MgY29tcGF0aWJsZQorICAgICAgICAgIGJvb3Rsb2FkZXI7IGNoZWNrIG91dCBodHRwOi8vcGFsbXRlbGludXguc291cmNlZm9yZ2UubmV0IGZvciBtb3JlCisgICAgICAgICAgaW5mb3JtYXRpb25zLgorICAgICAgICAgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgc3VjaCBhIFBEQSwgc2F5IE5PIG90aGVyd2lzZS4KKwogY29uZmlnIE1BQ0hfT01BUF9HRU5FUklDCiAJYm9vbCAiR2VuZXJpYyBPTUFQIGJvYXJkIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTUxMCB8fCBBUkNIX09NQVAxNlhYKQorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYKQogCWhlbHAKICAgICAgICAgICBTdXBwb3J0IGZvciBnZW5lcmljIE9NQVAtMTUxMCwgMTYxMCBvciAxNzEwIGJvYXJkIHdpdGgKICAgICAgICAgICBubyBGUEdBLiBDYW4gYmUgdXNlZCBhcyB0ZW1wbGF0ZSBmb3IgcG9ydGluZyBMaW51eCB0bwpAQCAtMTIxLDMyICsxMzEsMzIgQEAKIAogY29uZmlnIE9NQVBfQVJNXzE2OE1IWgogCWJvb2wgIk9NQVAgQVJNIDE2OCBNSHogQ1BVIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTUxMCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCkKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgKEFSQ0hfT01BUDE1WFggfHwgQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVA3MzApCiAJaGVscAogICAgICAgICAgIEVuYWJsZSAxNjhNSHogY2xvY2sgZm9yIE9NQVAgQ1BVLiBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgT01BUF9BUk1fMTUwTUhaCiAJYm9vbCAiT01BUCBBUk0gMTUwIE1IeiBDUFUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIEFSQ0hfT01BUDE1MTAKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQMTVYWAogCWhlbHAKIAkgIEVuYWJsZSAxNTBNSHogY2xvY2sgZm9yIE9NQVAgQ1BVLiBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgT01BUF9BUk1fMTIwTUhaCiAJYm9vbCAiT01BUCBBUk0gMTIwIE1IeiBDUFUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNTEwIHx8IEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQNzMwKQorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCkKIAloZWxwCiAgICAgICAgICAgRW5hYmxlIDEyME1IeiBjbG9jayBmb3IgT01BUCBDUFUuIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBPTUFQX0FSTV82ME1IWgogCWJvb2wgIk9NQVAgQVJNIDYwIE1IeiBDUFUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNTEwIHx8IEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQNzMwKQorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCkKICAgICAgICAgZGVmYXVsdCB5CiAJaGVscAogICAgICAgICAgIEVuYWJsZSA2ME1IeiBjbG9jayBmb3IgT01BUCBDUFUuIElmIHVuc3VyZSwgc2F5IFkuCiAKIGNvbmZpZyBPTUFQX0FSTV8zME1IWgogCWJvb2wgIk9NQVAgQVJNIDMwIE1IeiBDUFUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNTEwIHx8IEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQNzMwKQorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCkKIAloZWxwCiAgICAgICAgICAgRW5hYmxlIDMwTUh6IGNsb2NrIGZvciBPTUFQIENQVS4gSWYgdW5zdXJlLCBzYXkgTi4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUKaW5kZXggMTgxYTkzZC4uYjBiMDAxNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteSA6PSBpby5vIGlkLm8gaXJxLm8gdGltZS5vIHNlcmlhbC5vIGRldmljZXMubworb2JqLXkgOj0gaW8ubyBpZC5vIGNsb2NrLm8gaXJxLm8gdGltZS5vIG11eC5vIHNlcmlhbC5vIGRldmljZXMubwogbGVkLXkgOj0gbGVkcy5vCiAKICMgU3BlY2lmaWMgYm9hcmQgc3VwcG9ydApAQCAtMTUsOCArMTUsOSBAQAogb2JqLSQoQ09ORklHX01BQ0hfT01BUF9IMykJCSs9IGJvYXJkLWgzLm8KIG9iai0kKENPTkZJR19NQUNIX1ZPSUNFQkxVRSkJCSs9IGJvYXJkLXZvaWNlYmx1ZS5vCiBvYmotJChDT05GSUdfTUFDSF9ORVRTVEFSKQkJKz0gYm9hcmQtbmV0c3Rhci5vCitvYmotJChDT05GSUdfTUFDSF9PTUFQX1BBTE1URSkJCSs9IGJvYXJkLXBhbG10ZS5vCiAKLWlmZXEgKCQoQ09ORklHX0FSQ0hfT01BUDE1MTApLHkpCitpZmVxICgkKENPTkZJR19BUkNIX09NQVAxNVhYKSx5KQogIyBJbm5vdmF0b3ItMTUxMCBGUEdBCiBvYmotJChDT05GSUdfTUFDSF9PTUFQX0lOTk9WQVRPUikJKz0gZnBnYS5vCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYwppbmRleCBjMjA5YzcxLi40YjI5MmU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYwpAQCAtMTUsNyArMTUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTI4LDggKzI4LDYgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2NvbW1vbi5oPgogCi1zdGF0aWMgaW50IF9faW5pdGRhdGEgZ2VuZXJpY19zZXJpYWxfcG9ydHNbT01BUF9NQVhfTlJfUE9SVFNdID0gezEsIDEsIDF9OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9nZW5lcmljX2luaXRfaXJxKHZvaWQpCiB7CiAJb21hcF9pbml0X2lycSgpOwpAQCAtMzcsNyArMzUsNyBAQAogCiAvKiBhc3N1bWUgbm8gTWluaS1BQiBwb3J0ICovCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiBzdGF0aWMgc3RydWN0IG9tYXBfdXNiX2NvbmZpZyBnZW5lcmljMTUxMF91c2JfY29uZmlnIF9faW5pdGRhdGEgPSB7CiAJLnJlZ2lzdGVyX2hvc3QJPSAxLAogCS5yZWdpc3Rlcl9kZXYJPSAxLApAQCAtNzYsMjEgKzc0LDE5IEBACiAKICNlbmRpZgogCitzdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgZ2VuZXJpY191YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0geworCS5lbmFibGVkX3VhcnRzID0gKCgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSksCit9OworCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBnZW5lcmljX2NvbmZpZ1tdID0gewogCXsgT01BUF9UQUdfVVNCLCAgICAgICAgICAgTlVMTCB9LAogCXsgT01BUF9UQUdfTU1DLCAgICAgICAgICAgJmdlbmVyaWNfbW1jX2NvbmZpZyB9LAorCXsgT01BUF9UQUdfVUFSVCwJJmdlbmVyaWNfdWFydF9jb25maWcgfSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2dlbmVyaWNfaW5pdCh2b2lkKQogewotCWNvbnN0IHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnICp1YXJ0X2NvbmY7Ci0KLQkvKgotCSAqIE1ha2Ugc3VyZSB0aGUgc2VyaWFsIHBvcnRzIGFyZSBtdXhlZCBvbiBhdCB0aGlzIHBvaW50LgotCSAqIFlvdSBoYXZlIHRvIG11eCB0aGVtIG9mZiBpbiBkZXZpY2UgZHJpdmVycyBsYXRlciBvbgotCSAqIGlmIG5vdCBuZWVkZWQuCi0JICovCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgewogCQlnZW5lcmljX2NvbmZpZ1swXS5kYXRhID0gJmdlbmVyaWMxNTEwX3VzYl9jb25maWc7CiAJfQpAQCAtMTAxLDIwICs5Nyw5IEBACiAJfQogI2VuZGlmCiAKLQl1YXJ0X2NvbmYgPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfVUFSVCwgc3RydWN0IG9tYXBfdWFydF9jb25maWcpOwotCWlmICh1YXJ0X2NvbmYgIT0gTlVMTCkgewotCQl1bnNpZ25lZCBpbnQgZW5hYmxlZF9wb3J0cywgaTsKLQotCQllbmFibGVkX3BvcnRzID0gdWFydF9jb25mLT5lbmFibGVkX3VhcnRzOwotCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCQlpZiAoIShlbmFibGVkX3BvcnRzICYgKDEgPDwgaSkpKQotCQkJCWdlbmVyaWNfc2VyaWFsX3BvcnRzW2ldID0gMDsKLQkJfQotCX0KLQogCW9tYXBfYm9hcmRfY29uZmlnID0gZ2VuZXJpY19jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoZ2VuZXJpY19jb25maWcpOwotCW9tYXBfc2VyaWFsX2luaXQoZ2VuZXJpY19zZXJpYWxfcG9ydHMpOworCW9tYXBfc2VyaWFsX2luaXQoKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZ2VuZXJpY19tYXBfaW8odm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYwppbmRleCA0ZWU2YmQ4Li5hMDdlMmM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jCkBAIC00MCw4ICs0MCw2IEBACiAKIGV4dGVybiBpbnQgb21hcF9ncGlvX2luaXQodm9pZCk7CiAKLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBoMl9zZXJpYWxfcG9ydHNbT01BUF9NQVhfTlJfUE9SVFNdID0gezEsIDEsIDF9OwotCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gaDJfcGFydGl0aW9uc1tdID0gewogCS8qIGJvb3Rsb2FkZXIgKFUtQm9vdCwgZXRjKSBpbiBmaXJzdCBzZWN0b3IgKi8KIAl7CkBAIC0xNjAsOSArMTU4LDIwIEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBoMl91YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0geworCS5lbmFibGVkX3VhcnRzID0gKCgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyBoMl9sY2RfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLnBhbmVsX25hbWUJPSAiaDIiLAorCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAorfTsKKwogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgaDJfY29uZmlnW10gPSB7CiAJeyBPTUFQX1RBR19VU0IsICAgICAgICAgICAmaDJfdXNiX2NvbmZpZyB9LAogCXsgT01BUF9UQUdfTU1DLCAgICAgICAgICAgJmgyX21tY19jb25maWcgfSwKKwl7IE9NQVBfVEFHX1VBUlQsCSZoMl91YXJ0X2NvbmZpZyB9LAorCXsgT01BUF9UQUdfTENELAkJJmgyX2xjZF9jb25maWcgfSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBoMl9pbml0KHZvaWQpCkBAIC0xODAsMTIgKzE4OSwxMiBAQAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGgyX2RldmljZXMsIEFSUkFZX1NJWkUoaDJfZGV2aWNlcykpOwogCW9tYXBfYm9hcmRfY29uZmlnID0gaDJfY29uZmlnOwogCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGgyX2NvbmZpZyk7CisJb21hcF9zZXJpYWxfaW5pdCgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgaDJfbWFwX2lvKHZvaWQpCiB7CiAJb21hcF9tYXBfY29tbW9uX2lvKCk7Ci0Jb21hcF9zZXJpYWxfaW5pdChoMl9zZXJpYWxfcG9ydHMpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVBfSDIsICJUSS1IMiIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKaW5kZXggZmM4MjQzNi4uNjY4ZTI3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYwpAQCAtNDEsOCArNDEsNiBAQAogCiBleHRlcm4gaW50IG9tYXBfZ3Bpb19pbml0KHZvaWQpOwogCi1zdGF0aWMgaW50IF9faW5pdGRhdGEgaDNfc2VyaWFsX3BvcnRzW09NQVBfTUFYX05SX1BPUlRTXSA9IHsxLCAxLCAxfTsKLQogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGgzX3BhcnRpdGlvbnNbXSA9IHsKIAkvKiBib290bG9hZGVyIChVLUJvb3QsIGV0YykgaW4gZmlyc3Qgc2VjdG9yICovCiAJewpAQCAtMTY4LDkgKzE2NiwyMCBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgaDNfdWFydF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkuZW5hYmxlZF91YXJ0cyA9ICgoMSA8PCAwKSB8ICgxIDw8IDEpIHwgKDEgPDwgMikpLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgaDNfbGNkX2NvbmZpZyBfX2luaXRkYXRhID0geworCS5wYW5lbF9uYW1lCT0gImgzIiwKKwkuY3RybF9uYW1lCT0gImludGVybmFsIiwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGgzX2NvbmZpZ1tdID0gewotCXsgT01BUF9UQUdfVVNCLAkgJmgzX3VzYl9jb25maWcgfSwKLQl7IE9NQVBfVEFHX01NQywgICZoM19tbWNfY29uZmlnIH0sCisJeyBPTUFQX1RBR19VU0IsCQkmaDNfdXNiX2NvbmZpZyB9LAorCXsgT01BUF9UQUdfTU1DLAkJJmgzX21tY19jb25maWcgfSwKKwl7IE9NQVBfVEFHX1VBUlQsCSZoM191YXJ0X2NvbmZpZyB9LAorCXsgT01BUF9UQUdfTENELAkJJmgzX2xjZF9jb25maWcgfSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBoM19pbml0KHZvaWQpCkBAIC0xODAsNiArMTg5LDcgQEAKIAkodm9pZCkgcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiAJb21hcF9ib2FyZF9jb25maWcgPSBoM19jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoaDNfY29uZmlnKTsKKwlvbWFwX3NlcmlhbF9pbml0KCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBoM19pbml0X3NtYzkxeCh2b2lkKQpAQCAtMjAxLDcgKzIxMSw2IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgaDNfbWFwX2lvKHZvaWQpCiB7CiAJb21hcF9tYXBfY29tbW9uX2lvKCk7Ci0Jb21hcF9zZXJpYWxfaW5pdChoM19zZXJpYWxfcG9ydHMpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVBfSDMsICJUSSBPTUFQMTcxMCBIMyBib2FyZCIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYwppbmRleCBhMmVhYzg1Li45NWYxZmYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKQEAgLTM2LDggKzM2LDYgQEAKICNpbmNsdWRlIDxhc20vYXJjaC91c2IuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KIAotc3RhdGljIGludCBfX2luaXRkYXRhIGlubm92YXRvcl9zZXJpYWxfcG9ydHNbT01BUF9NQVhfTlJfUE9SVFNdID0gezEsIDEsIDF9OwotCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gaW5ub3ZhdG9yX3BhcnRpdGlvbnNbXSA9IHsKIAkvKiBib290bG9hZGVyIChVLUJvb3QsIGV0YykgaW4gZmlyc3Qgc2VjdG9yICovCiAJewpAQCAtOTksNyArOTcsNyBAQAogCS5yZXNvdXJjZQk9ICZpbm5vdmF0b3JfZmxhc2hfcmVzb3VyY2UsCiB9OwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCiAvKiBPbmx5IEZQR0EgbmVlZHMgdG8gYmUgbWFwcGVkIGhlcmUuIEFsbCBvdGhlcnMgYXJlIGRvbmUgd2l0aCBpb3JlbWFwICovCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGlubm92YXRvcjE1MTBfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CkBAIC0xMzYsNyArMTM0LDcgQEAKIAkmaW5ub3ZhdG9yMTUxMF9zbWM5MXhfZGV2aWNlLAogfTsKIAotI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAxNTEwICovCisjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDE1WFggKi8KIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCiAKQEAgLTE4NSw3ICsxODMsNyBAQAogewogCW9tYXBfaW5pdF9pcnEoKTsKIAlvbWFwX2dwaW9faW5pdCgpOwotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKIAkJb21hcDE1MTBfZnBnYV9pbml0X2lycSgpOwogCX0KQEAgLTE5Myw3ICsxOTEsNyBAQAogCWlubm92YXRvcl9pbml0X3NtYzkxeCgpOwogfQogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogc3RhdGljIHN0cnVjdCBvbWFwX3VzYl9jb25maWcgaW5ub3ZhdG9yMTUxMF91c2JfY29uZmlnIF9faW5pdGRhdGEgPSB7CiAJLyogZm9yIGJ1bmRsZWQgbm9uLXN0YW5kYXJkIGhvc3QgYW5kIHBlcmlwaGVyYWwgY2FibGVzICovCiAJLmhtY19tb2RlCT0gNCwKQEAgLTIwNSw2ICsyMDMsMTEgQEAKIAkucmVnaXN0ZXJfZGV2CT0gMSwKIAkucGluc1swXQk9IDIsCiB9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyBpbm5vdmF0b3IxNTEwX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkucGFuZWxfbmFtZQk9ICJpbm4xNTEwIiwKKwkuY3RybF9uYW1lCT0gImludGVybmFsIiwKK307CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCkBAIC0yMjIsNiArMjI1LDExIEBACiAKIAkucGluc1sxXQk9IDMsCiB9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyBpbm5vdmF0b3IxNjEwX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkucGFuZWxfbmFtZQk9ICJpbm4xNjEwIiwKKwkuY3RybF9uYW1lCT0gImludGVybmFsIiwKK307CiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBvbWFwX21tY19jb25maWcgaW5ub3ZhdG9yX21tY19jb25maWcgX19pbml0ZGF0YSA9IHsKQEAgLTIzNCwxNCArMjQyLDIwIEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBpbm5vdmF0b3JfdWFydF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkuZW5hYmxlZF91YXJ0cyA9ICgoMSA8PCAwKSB8ICgxIDw8IDEpIHwgKDEgPDwgMikpLAorfTsKKwogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgaW5ub3ZhdG9yX2NvbmZpZ1tdID0gewogCXsgT01BUF9UQUdfVVNCLCAgICAgICAgIE5VTEwgfSwKKwl7IE9NQVBfVEFHX0xDRCwJCU5VTEwgfSwKIAl7IE9NQVBfVEFHX01NQywJCSZpbm5vdmF0b3JfbW1jX2NvbmZpZyB9LAorCXsgT01BUF9UQUdfVUFSVCwJJmlubm92YXRvcl91YXJ0X2NvbmZpZyB9LAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGlubm92YXRvcl9pbml0KHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgewogCQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhpbm5vdmF0b3IxNTEwX2RldmljZXMsIEFSUkFZX1NJWkUoaW5ub3ZhdG9yMTUxMF9kZXZpY2VzKSk7CiAJfQpAQCAtMjUyLDIzICsyNjYsMjggQEAKIAl9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKQorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCisJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CiAJCWlubm92YXRvcl9jb25maWdbMF0uZGF0YSA9ICZpbm5vdmF0b3IxNTEwX3VzYl9jb25maWc7CisJCWlubm92YXRvcl9jb25maWdbMV0uZGF0YSA9ICZpbm5vdmF0b3IxNTEwX2xjZF9jb25maWc7CisJfQogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE2WFgKLQlpZiAoY3B1X2lzX29tYXAxNjEwKCkpCisJaWYgKGNwdV9pc19vbWFwMTYxMCgpKSB7CiAJCWlubm92YXRvcl9jb25maWdbMF0uZGF0YSA9ICZoMl91c2JfY29uZmlnOworCQlpbm5vdmF0b3JfY29uZmlnWzFdLmRhdGEgPSAmaW5ub3ZhdG9yMTYxMF9sY2RfY29uZmlnOworCX0KICNlbmRpZgogCW9tYXBfYm9hcmRfY29uZmlnID0gaW5ub3ZhdG9yX2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShpbm5vdmF0b3JfY29uZmlnKTsKKwlvbWFwX3NlcmlhbF9pbml0KCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpbm5vdmF0b3JfbWFwX2lvKHZvaWQpCiB7CiAJb21hcF9tYXBfY29tbW9uX2lvKCk7CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CiAJCWlvdGFibGVfaW5pdChpbm5vdmF0b3IxNTEwX2lvX2Rlc2MsIEFSUkFZX1NJWkUoaW5ub3ZhdG9yMTUxMF9pb19kZXNjKSk7CiAJCXVkZWxheSgxMCk7CS8qIERlbGF5IG5lZWRlZCBmb3IgRlBHQSAqLwpAQCAtMjgwLDcgKzI5OSw2IEBACiAJCSAgICAgICBmcGdhX3JlYWQoT01BUDE1MTBfRlBHQV9CT0FSRF9SRVYpKTsKIAl9CiAjZW5kaWYKLQlvbWFwX3NlcmlhbF9pbml0KGlubm92YXRvcl9zZXJpYWxfcG9ydHMpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVBfSU5OT1ZBVE9SLCAiVEktSW5ub3ZhdG9yIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtbmV0c3Rhci5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1uZXRzdGFyLmMKaW5kZXggYzg1MWMyZS4uMDQ0OGZhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1uZXRzdGFyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1uZXRzdGFyLmMKQEAgLTU1LDYgKzU1LDE0IEBACiAJJm5ldHN0YXJfc21jOTF4X2RldmljZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBuZXRzdGFyX3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmVuYWJsZWRfdWFydHMgPSAoKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIG5ldHN0YXJfY29uZmlnW10gPSB7CisJeyBPTUFQX1RBR19VQVJULAkmbmV0c3Rhcl91YXJ0X2NvbmZpZyB9LAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IG5ldHN0YXJfaW5pdF9pcnEodm9pZCkKIHsKIAlvbWFwX2luaXRfaXJxKCk7CkBAIC05MiwxNCArMTAwLDE1IEBACiAJLyogU3dpdGNoIG9mZiByZWQgTEVEICovCiAJb21hcF93cml0ZWIoMHgwMCwgT01BUF9MUEcxX1BNUik7CS8qIERpc2FibGUgY2xvY2sgKi8KIAlvbWFwX3dyaXRlYigweDgwLCBPTUFQX0xQRzFfTENSKTsKLX0KIAotc3RhdGljIGludCBfX2luaXRkYXRhIG9tYXBfc2VyaWFsX3BvcnRzW09NQVBfTUFYX05SX1BPUlRTXSA9IHsxLCAxLCAxfTsKKwlvbWFwX2JvYXJkX2NvbmZpZyA9IG5ldHN0YXJfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKG5ldHN0YXJfY29uZmlnKTsKKwlvbWFwX3NlcmlhbF9pbml0KCk7Cit9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBuZXRzdGFyX21hcF9pbyh2b2lkKQogewogCW9tYXBfbWFwX2NvbW1vbl9pbygpOwotCW9tYXBfc2VyaWFsX2luaXQob21hcF9zZXJpYWxfcG9ydHMpOwogfQogCiAjZGVmaW5lIE1BQ0hJTkVfUEFOSUNFRAkJMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMKaW5kZXggYTg4NTI0ZS4uZTk5MGUxYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jCkBAIC00Niw4ICs0Niw2IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvdGMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KIAotc3RhdGljIGludCBfX2luaXRkYXRhIG9za19zZXJpYWxfcG9ydHNbT01BUF9NQVhfTlJfUE9SVFNdID0gezEsIDAsIDB9OwotCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gb3NrX3BhcnRpdGlvbnNbXSA9IHsKIAkvKiBib290bG9hZGVyIChVLUJvb3QsIGV0YykgaW4gZmlyc3Qgc2VjdG9yICovCiAJewpAQCAtMTU1LDcgKzE1Myw3IEBACiAJfQogCiAJLyogQ2hlY2sgRU1JRlMgd2FpdCBzdGF0ZXMgdG8gZml4IGVycm9ycyB3aXRoIFNNQ19HRVRfUEtUX0hEUiAqLwotCUVNSUZTX0NDUygxKSB8PSAweDI7CisJRU1JRlNfQ0NTKDEpIHw9IDB4MzsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG9za19pbml0X2NmKHZvaWQpCkBAIC0xOTMsOCArMTkxLDE5IEBACiAJLnBpbnNbMF0JPSAyLAogfTsKIAorc3RhdGljIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnIG9za191YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0geworCS5lbmFibGVkX3VhcnRzID0gKDEgPDwgMCksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyBvc2tfbGNkX2NvbmZpZyBfX2luaXRkYXRhID0geworCS5wYW5lbF9uYW1lCT0gIm9zayIsCisJLmN0cmxfbmFtZQk9ICJpbnRlcm5hbCIsCit9OworCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBvc2tfY29uZmlnW10gPSB7CiAJeyBPTUFQX1RBR19VU0IsICAgICAgICAgICAmb3NrX3VzYl9jb25maWcgfSwKKwl7IE9NQVBfVEFHX1VBUlQsCQkmb3NrX3VhcnRfY29uZmlnIH0sCisJeyBPTUFQX1RBR19MQ0QsCQkJJm9za19sY2RfY29uZmlnIH0sCiB9OwogCiAjaWZkZWYJQ09ORklHX09NQVBfT1NLX01JU1RSQUwKQEAgLTI1NCwxMyArMjYzLDEzIEBACiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUob3NrX2NvbmZpZyk7CiAJVVNCX1RSQU5TQ0VJVkVSX0NUUkxfUkVHIHw9ICgzIDw8IDEpOwogCisJb21hcF9zZXJpYWxfaW5pdCgpOwogCW9za19taXN0cmFsX2luaXQoKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG9za19tYXBfaW8odm9pZCkKIHsKIAlvbWFwX21hcF9jb21tb25faW8oKTsKLQlvbWFwX3NlcmlhbF9pbml0KG9za19zZXJpYWxfcG9ydHMpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVBfT1NLLCAiVEktT1NLIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MGIyMGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCisgKgorICogTW9kaWZpZWQgZnJvbSBib2FyZC1nZW5lcmljLmMKKyAqCisgKiBTdXBwb3J0IGZvciB0aGUgUGFsbSBUdW5nc3RlbiBFIFBEQS4KKyAqCisgKiBPcmlnaW5hbCB2ZXJzaW9uIDogTGF1cmVudCBHb256YWxlegorICoKKyAqIE1haW50YWludGVycyA6IGh0dHA6Ly9wYWxtdGVsaW51eC5zZi5uZXQKKyAqICAgICAgICAgICAgICAgIHBhbG10ZWxpbnV4LWRldmVsb3BwZXJzQGxpc3RzLnNmLm5ldAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvdXNiLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2xvY2suaD4KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZ2VuZXJpY19pbml0X2lycSh2b2lkKQoreworCW9tYXBfaW5pdF9pcnEoKTsKK30KKworc3RhdGljIHN0cnVjdCBvbWFwX3VzYl9jb25maWcgcGFsbXRlX3VzYl9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkucmVnaXN0ZXJfZGV2CT0gMSwKKwkuaG1jX21vZGUJPSAwLAorCS5waW5zWzBdCT0gMywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfY29uZmlnIHBhbG10ZV9tbWNfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLm1tYyBbMF0gPSB7CisJCS5lbmFibGVkIAk9IDEsCisJCS53aXJlNAkJPSAxLAorCQkud3BfcGluCQk9IE9NQVBfTVBVSU8oMyksCisJCS5wb3dlcl9waW4JPSAtMSwKKwkJLnN3aXRjaF9waW4JPSAtMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgcGFsbXRlX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkucGFuZWxfbmFtZQk9ICJwYWxtdGUiLAorCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgcGFsbXRlX2NvbmZpZ1tdID0geworCXsgT01BUF9UQUdfVVNCLCAmcGFsbXRlX3VzYl9jb25maWcgfSwKKwl7IE9NQVBfVEFHX01NQywJJnBhbG10ZV9tbWNfY29uZmlnIH0sCisJeyBPTUFQX1RBR19MQ0QsCSZwYWxtdGVfbGNkX2NvbmZpZyB9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZ2VuZXJpY19pbml0KHZvaWQpCit7CisJb21hcF9ib2FyZF9jb25maWcgPSBwYWxtdGVfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHBhbG10ZV9jb25maWcpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9nZW5lcmljX21hcF9pbyh2b2lkKQoreworCW9tYXBfbWFwX2NvbW1vbl9pbygpOworfQorCitNQUNISU5FX1NUQVJUKE9NQVBfUEFMTVRFLCAiT01BUDMxMCBiYXNlZCBQYWxtIFR1bmdzdGVuIEUiKQorCS5waHlzX3JhbQk9IDB4MTAwMDAwMDAsCisJLnBoeXNfaW8JPSAweGZmZjAwMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoMHhmZWYwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4MTAwMDAxMDAsCisJLm1hcF9pbwkJPSBvbWFwX2dlbmVyaWNfbWFwX2lvLAorCS5pbml0X2lycQk9IG9tYXBfZ2VuZXJpY19pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gb21hcF9nZW5lcmljX2luaXQsCisJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGVyc2V1czIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGVyc2V1czIuYwppbmRleCAzNTRiMTU3Li5iZDkwMGI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBlcnNldXMyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wZXJzZXVzMi5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZnBnYS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKQEAgLTQzLDggKzQ0LDYgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCBfX2luaXRkYXRhIHAyX3NlcmlhbF9wb3J0c1tPTUFQX01BWF9OUl9QT1JUU10gPSB7MSwgMSwgMH07Ci0KIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwMl9wYXJ0aXRpb25zW10gPSB7CiAJLyogYm9vdGxvYWRlciAoVS1Cb290LCBldGMpIGluIGZpcnN0IHNlY3RvciAqLwogCXsKQEAgLTExMSw5ICsxMTAsMjcgQEAKIAkmc21jOTF4X2RldmljZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBwZXJzZXVzMl91YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0geworCS5lbmFibGVkX3VhcnRzID0gKCgxIDw8IDApIHwgKDEgPDwgMSkpLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgcGVyc2V1czJfbGNkX2NvbmZpZyBfX2luaXRkYXRhID0geworCS5wYW5lbF9uYW1lCT0gInAyIiwKKwkuY3RybF9uYW1lCT0gImludGVybmFsIiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIHBlcnNldXMyX2NvbmZpZ1tdID0geworCXsgT01BUF9UQUdfVUFSVCwJJnBlcnNldXMyX3VhcnRfY29uZmlnIH0sCisJeyBPTUFQX1RBR19MQ0QsCQkmcGVyc2V1czJfbGNkX2NvbmZpZyB9LAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfcGVyc2V1czJfaW5pdCh2b2lkKQogewogCSh2b2lkKSBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKKworCW9tYXBfYm9hcmRfY29uZmlnID0gcGVyc2V1czJfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHBlcnNldXMyX2NvbmZpZyk7CisJb21hcF9zZXJpYWxfaW5pdCgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcGVyc2V1czJfaW5pdF9zbWM5MXgodm9pZCkKQEAgLTEzMSw3ICsxNDgsNiBAQAogCW9tYXBfZ3Bpb19pbml0KCk7CiAJcGVyc2V1czJfaW5pdF9zbWM5MXgoKTsKIH0KLQogLyogT25seSBGUEdBIG5lZWRzIHRvIGJlIG1hcHBlZCBoZXJlLiBBbGwgb3RoZXJzIGFyZSBkb25lIHdpdGggaW9yZW1hcCAqLwogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwX3BlcnNldXMyX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKQEAgLTE3OSw3ICsxOTUsNiBAQAogCSAqIEl0IGlzIHVzZWQgYXMgdGhlIEV0aGVybmV0IGNvbnRyb2xsZXIgaW50ZXJydXB0CiAJICovCiAJb21hcF93cml0ZWwob21hcF9yZWFkbChPTUFQNzMwX0lPX0NPTkZfOSkgJiAweDFGRkZGRkZGLCBPTUFQNzMwX0lPX0NPTkZfOSk7Ci0Jb21hcF9zZXJpYWxfaW5pdChwMl9zZXJpYWxfcG9ydHMpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVBfUEVSU0VVUzIsICJPTUFQNzMwIFBlcnNldXMyIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jCmluZGV4IDNmMDE4YjIuLjZmOWE2MjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYwpAQCAtMTUwLDkgKzE1MCwxNCBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgdm9pY2VibHVlX3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmVuYWJsZWRfdWFydHMgPSAoKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpKSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIHZvaWNlYmx1ZV9jb25maWdbXSA9IHsKIAl7IE9NQVBfVEFHX1VTQiwgJnZvaWNlYmx1ZV91c2JfY29uZmlnIH0sCiAJeyBPTUFQX1RBR19NTUMsICZ2b2ljZWJsdWVfbW1jX2NvbmZpZyB9LAorCXsgT01BUF9UQUdfVUFSVCwJJnZvaWNlYmx1ZV91YXJ0X2NvbmZpZyB9LAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IHZvaWNlYmx1ZV9pbml0X2lycSh2b2lkKQpAQCAtMTkxLDYgKzE5Niw3IEBACiAJcGxhdGZvcm1fYWRkX2RldmljZXModm9pY2VibHVlX2RldmljZXMsIEFSUkFZX1NJWkUodm9pY2VibHVlX2RldmljZXMpKTsKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IHZvaWNlYmx1ZV9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUodm9pY2VibHVlX2NvbmZpZyk7CisJb21hcF9zZXJpYWxfaW5pdCgpOwogCiAJLyogVGhlcmUgaXMgYSBnb29kIGNoYW5jZSBib2FyZCBpcyBnb2luZyB1cCwgc28gZW5hYmxlIHBvd2VyIExFRAogCSAqIChpdCBpcyBjb25uZWN0ZWQgdGhyb3VnaCBpbnZlcnRvcikgKi8KQEAgLTE5OCwxMiArMjA0LDkgQEAKIAlvbWFwX3dyaXRlYigweDAwLCBPTUFQX0xQRzFfUE1SKTsJLyogRGlzYWJsZSBjbG9jayAqLwogfQogCi1zdGF0aWMgaW50IF9faW5pdGRhdGEgb21hcF9zZXJpYWxfcG9ydHNbT01BUF9NQVhfTlJfUE9SVFNdID0gezEsIDEsIDF9OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgdm9pY2VibHVlX21hcF9pbyh2b2lkKQogewogCW9tYXBfbWFwX2NvbW1vbl9pbygpOwotCW9tYXBfc2VyaWFsX2luaXQob21hcF9zZXJpYWxfcG9ydHMpOwogfQogCiAjZGVmaW5lIE1BQ0hJTkVfUEFOSUNFRAkJMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNzdlZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMKQEAgLTAsMCArMSw3OTIgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMDUgTm9raWEgY29ycG9yYXRpb24KKyAqICBXcml0dGVuIGJ5IFR1dWtrYSBUaWtrYW5lbiA8dHV1a2thLnRpa2thbmVuQGVsZWt0cm9iaXQuY29tPgorICoKKyAqICBNb2RpZmllZCB0byB1c2Ugb21hcCBzaGFyZWQgY2xvY2sgZnJhbWV3b3JrIGJ5CisgKiAgVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2xvY2suaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3JhbS5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKworX191MzIgYXJtX2lkbGVjdDFfbWFzazsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBPbWFwMSBzcGVjaWZpYyBjbG9jayBmdW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIG9tYXAxX3dhdGNoZG9nX3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKQoreworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gMTQ7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAxX3VhcnRfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspCit7CisJdW5zaWduZWQgaW50IHZhbCA9IG9tYXBfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwlpZiAodmFsICYgY2xrLT5lbmFibGVfYml0KQorCQljbGstPnJhdGUgPSA0ODAwMDAwMDsKKwllbHNlCisJCWNsay0+cmF0ZSA9IDEyMDAwMDAwOworfQorCitzdGF0aWMgaW50IG9tYXAxX2Nsa19lbmFibGVfZHNwX2RvbWFpbihzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IG9tYXAxX2Nsa191c2UoJmFwaV9jay5jbGspOworCWlmICghcmV0dmFsKSB7CisJCXJldHZhbCA9IG9tYXAxX2Nsa19lbmFibGUoY2xrKTsKKwkJb21hcDFfY2xrX3VudXNlKCZhcGlfY2suY2xrKTsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBvbWFwMV9jbGtfZGlzYWJsZV9kc3BfZG9tYWluKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAob21hcDFfY2xrX3VzZSgmYXBpX2NrLmNsaykgPT0gMCkgeworCQlvbWFwMV9jbGtfZGlzYWJsZShjbGspOworCQlvbWFwMV9jbGtfdW51c2UoJmFwaV9jay5jbGspOworCX0KK30KKworc3RhdGljIGludCBvbWFwMV9jbGtfZW5hYmxlX3VhcnRfZnVuY3Rpb25hbChzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgdWFydF9jbGsgKnVjbGs7CisKKwlyZXQgPSBvbWFwMV9jbGtfZW5hYmxlKGNsayk7CisJaWYgKHJldCA9PSAwKSB7CisJCS8qIFNldCBzbWFydCBpZGxlIGFja25vd2xlZGdlbWVudCBtb2RlICovCisJCXVjbGsgPSAoc3RydWN0IHVhcnRfY2xrICopY2xrOworCQlvbWFwX3dyaXRlYigob21hcF9yZWFkYih1Y2xrLT5zeXNjX2FkZHIpICYgfjB4MTApIHwgOCwKKwkJCSAgICB1Y2xrLT5zeXNjX2FkZHIpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAxX2Nsa19kaXNhYmxlX3VhcnRfZnVuY3Rpb25hbChzdHJ1Y3QgY2xrICpjbGspCit7CisJc3RydWN0IHVhcnRfY2xrICp1Y2xrOworCisJLyogU2V0IGZvcmNlIGlkbGUgYWNrbm93bGVkZ2VtZW50IG1vZGUgKi8KKwl1Y2xrID0gKHN0cnVjdCB1YXJ0X2NsayAqKWNsazsKKwlvbWFwX3dyaXRlYigob21hcF9yZWFkYih1Y2xrLT5zeXNjX2FkZHIpICYgfjB4MTgpLCB1Y2xrLT5zeXNjX2FkZHIpOworCisJb21hcDFfY2xrX2Rpc2FibGUoY2xrKTsKK30KKworc3RhdGljIHZvaWQgb21hcDFfY2xrX2FsbG93X2lkbGUoc3RydWN0IGNsayAqY2xrKQoreworCXN0cnVjdCBhcm1faWRsZWN0MV9jbGsgKiBpY2xrID0gKHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgKiljbGs7CisKKwlpZiAoIShjbGstPmZsYWdzICYgQ0xPQ0tfSURMRV9DT05UUk9MKSkKKwkJcmV0dXJuOworCisJaWYgKGljbGstPm5vX2lkbGVfY291bnQgPiAwICYmICEoLS1pY2xrLT5ub19pZGxlX2NvdW50KSkKKwkJYXJtX2lkbGVjdDFfbWFzayB8PSAxIDw8IGljbGstPmlkbGVjdF9zaGlmdDsKK30KKworc3RhdGljIHZvaWQgb21hcDFfY2xrX2RlbnlfaWRsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJc3RydWN0IGFybV9pZGxlY3QxX2NsayAqIGljbGsgPSAoc3RydWN0IGFybV9pZGxlY3QxX2NsayAqKWNsazsKKworCWlmICghKGNsay0+ZmxhZ3MgJiBDTE9DS19JRExFX0NPTlRST0wpKQorCQlyZXR1cm47CisKKwlpZiAoaWNsay0+bm9faWRsZV9jb3VudCsrID09IDApCisJCWFybV9pZGxlY3QxX21hc2sgJj0gfigxIDw8IGljbGstPmlkbGVjdF9zaGlmdCk7Cit9CisKK3N0YXRpYyBfX3UxNiB2ZXJpZnlfY2tjdGxfdmFsdWUoX191MTYgbmV3dmFsKQoreworCS8qIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGZvciBmb2xsb3dpbmcgbGltaXRhdGlvbnMgc2V0CisJICogYnkgdGhlIGhhcmR3YXJlIChhbGwgY29uZGl0aW9ucyBtdXN0IGJlIHRydWUpOgorCSAqIERTUE1NVV9DSyA9PSBEU1BfQ0sgIG9yICBEU1BNTVVfQ0sgPT0gRFNQX0NLLzIKKwkgKiBBUk1fQ0sgPj0gVENfQ0sKKwkgKiBEU1BfQ0sgPj0gVENfQ0sKKwkgKiBEU1BNTVVfQ0sgPj0gVENfQ0sKKwkgKgorCSAqIEluIGFkZGl0aW9uIGZvbGxvd2luZyBydWxlcyBhcmUgZW5mb3JjZWQ6CisJICogTENEX0NLIDw9IFRDX0NLCisJICogQVJNUEVSX0NLIDw9IFRDX0NLCisJICoKKwkgKiBIb3dldmVyLCBtYXhpbXVtIGZyZXF1ZW5jaWVzIGFyZSBub3QgY2hlY2tlZCBmb3IhCisJICovCisJX191OCBwZXJfZXhwOworCV9fdTggbGNkX2V4cDsKKwlfX3U4IGFybV9leHA7CisJX191OCBkc3BfZXhwOworCV9fdTggdGNfZXhwOworCV9fdTggZHNwbW11X2V4cDsKKworCXBlcl9leHAgPSAobmV3dmFsID4+IENLQ1RMX1BFUkRJVl9PRkZTRVQpICYgMzsKKwlsY2RfZXhwID0gKG5ld3ZhbCA+PiBDS0NUTF9MQ0RESVZfT0ZGU0VUKSAmIDM7CisJYXJtX2V4cCA9IChuZXd2YWwgPj4gQ0tDVExfQVJNRElWX09GRlNFVCkgJiAzOworCWRzcF9leHAgPSAobmV3dmFsID4+IENLQ1RMX0RTUERJVl9PRkZTRVQpICYgMzsKKwl0Y19leHAgPSAobmV3dmFsID4+IENLQ1RMX1RDRElWX09GRlNFVCkgJiAzOworCWRzcG1tdV9leHAgPSAobmV3dmFsID4+IENLQ1RMX0RTUE1NVURJVl9PRkZTRVQpICYgMzsKKworCWlmIChkc3BtbXVfZXhwIDwgZHNwX2V4cCkKKwkJZHNwbW11X2V4cCA9IGRzcF9leHA7CisJaWYgKGRzcG1tdV9leHAgPiBkc3BfZXhwKzEpCisJCWRzcG1tdV9leHAgPSBkc3BfZXhwKzE7CisJaWYgKHRjX2V4cCA8IGFybV9leHApCisJCXRjX2V4cCA9IGFybV9leHA7CisJaWYgKHRjX2V4cCA8IGRzcG1tdV9leHApCisJCXRjX2V4cCA9IGRzcG1tdV9leHA7CisJaWYgKHRjX2V4cCA+IGxjZF9leHApCisJCWxjZF9leHAgPSB0Y19leHA7CisJaWYgKHRjX2V4cCA+IHBlcl9leHApCisJCXBlcl9leHAgPSB0Y19leHA7CisKKwluZXd2YWwgJj0gMHhmMDAwOworCW5ld3ZhbCB8PSBwZXJfZXhwIDw8IENLQ1RMX1BFUkRJVl9PRkZTRVQ7CisJbmV3dmFsIHw9IGxjZF9leHAgPDwgQ0tDVExfTENERElWX09GRlNFVDsKKwluZXd2YWwgfD0gYXJtX2V4cCA8PCBDS0NUTF9BUk1ESVZfT0ZGU0VUOworCW5ld3ZhbCB8PSBkc3BfZXhwIDw8IENLQ1RMX0RTUERJVl9PRkZTRVQ7CisJbmV3dmFsIHw9IHRjX2V4cCA8PCBDS0NUTF9UQ0RJVl9PRkZTRVQ7CisJbmV3dmFsIHw9IGRzcG1tdV9leHAgPDwgQ0tDVExfRFNQTU1VRElWX09GRlNFVDsKKworCXJldHVybiBuZXd2YWw7Cit9CisKK3N0YXRpYyBpbnQgY2FsY19kc29yX2V4cChzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwkvKiBOb3RlOiBJZiB0YXJnZXQgZnJlcXVlbmN5IGlzIHRvbyBsb3csIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gNCwKKwkgKiB3aGljaCBpcyBpbnZhbGlkIHZhbHVlLiBDYWxsZXIgbXVzdCBjaGVjayBmb3IgdGhpcyB2YWx1ZSBhbmQgYWN0CisJICogYWNjb3JkaW5nbHkuCisJICoKKwkgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIGZvciBmb2xsb3dpbmcgbGltaXRhdGlvbnMgc2V0CisJICogYnkgdGhlIGhhcmR3YXJlIChhbGwgY29uZGl0aW9ucyBtdXN0IGJlIHRydWUpOgorCSAqIERTUE1NVV9DSyA9PSBEU1BfQ0sgIG9yICBEU1BNTVVfQ0sgPT0gRFNQX0NLLzIKKwkgKiBBUk1fQ0sgPj0gVENfQ0sKKwkgKiBEU1BfQ0sgPj0gVENfQ0sKKwkgKiBEU1BNTVVfQ0sgPj0gVENfQ0sKKwkgKi8KKwl1bnNpZ25lZCBsb25nIHJlYWxyYXRlOworCXN0cnVjdCBjbGsgKiBwYXJlbnQ7CisJdW5zaWduZWQgIGRzb3JfZXhwOworCisJaWYgKHVubGlrZWx5KCEoY2xrLT5mbGFncyAmIFJBVEVfQ0tDVEwpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwYXJlbnQgPSBjbGstPnBhcmVudDsKKwlpZiAodW5saWtlbHkocGFyZW50ID09IDApKQorCQlyZXR1cm4gLUVJTzsKKworCXJlYWxyYXRlID0gcGFyZW50LT5yYXRlOworCWZvciAoZHNvcl9leHA9MDsgZHNvcl9leHA8NDsgZHNvcl9leHArKykgeworCQlpZiAocmVhbHJhdGUgPD0gcmF0ZSkKKwkJCWJyZWFrOworCisJCXJlYWxyYXRlIC89IDI7CisJfQorCisJcmV0dXJuIGRzb3JfZXhwOworfQorCitzdGF0aWMgdm9pZCBvbWFwMV9ja2N0bF9yZWNhbGMoc3RydWN0IGNsayAqIGNsaykKK3sKKwlpbnQgZHNvcjsKKworCS8qIENhbGN1bGF0ZSBkaXZpc29yIGVuY29kZWQgYXMgMi1iaXQgZXhwb25lbnQgKi8KKwlkc29yID0gMSA8PCAoMyAmIChvbWFwX3JlYWR3KEFSTV9DS0NUTCkgPj4gY2xrLT5yYXRlX29mZnNldCkpOworCisJaWYgKHVubGlrZWx5KGNsay0+cmF0ZSA9PSBjbGstPnBhcmVudC0+cmF0ZSAvIGRzb3IpKQorCQlyZXR1cm47IC8qIE5vIGNoYW5nZSwgcXVpY2sgZXhpdCAqLworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gZHNvcjsKKworCWlmICh1bmxpa2VseShjbGstPmZsYWdzICYgUkFURV9QUk9QQUdBVEVTKSkKKwkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKK30KKworc3RhdGljIHZvaWQgb21hcDFfY2tjdGxfcmVjYWxjX2RzcF9kb21haW4oc3RydWN0IGNsayAqIGNsaykKK3sKKwlpbnQgZHNvcjsKKworCS8qIENhbGN1bGF0ZSBkaXZpc29yIGVuY29kZWQgYXMgMi1iaXQgZXhwb25lbnQKKwkgKgorCSAqIFRoZSBjbG9jayBjb250cm9sIGJpdHMgYXJlIGluIERTUCBkb21haW4sCisJICogc28gYXBpX2NrIGlzIG5lZWRlZCBmb3IgYWNjZXNzLgorCSAqIE5vdGUgdGhhdCBEU1BfQ0tDVEwgdmlydCBhZGRyID0gcGh5cyBhZGRyLCBzbworCSAqIHdlIG11c3QgdXNlIF9fcmF3X3JlYWR3KCkgaW5zdGVhZCBvZiBvbWFwX3JlYWR3KCkuCisJICovCisJb21hcDFfY2xrX3VzZSgmYXBpX2NrLmNsayk7CisJZHNvciA9IDEgPDwgKDMgJiAoX19yYXdfcmVhZHcoRFNQX0NLQ1RMKSA+PiBjbGstPnJhdGVfb2Zmc2V0KSk7CisJb21hcDFfY2xrX3VudXNlKCZhcGlfY2suY2xrKTsKKworCWlmICh1bmxpa2VseShjbGstPnJhdGUgPT0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkc29yKSkKKwkJcmV0dXJuOyAvKiBObyBjaGFuZ2UsIHF1aWNrIGV4aXQgKi8KKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGRzb3I7CisKKwlpZiAodW5saWtlbHkoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpCisJCXByb3BhZ2F0ZV9yYXRlKGNsayk7Cit9CisKKy8qIE1QVSB2aXJ0dWFsIGNsb2NrIGZ1bmN0aW9ucyAqLworc3RhdGljIGludCBvbWFwMV9zZWxlY3RfdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICogY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJLyogRmluZCB0aGUgaGlnaGVzdCBzdXBwb3J0ZWQgZnJlcXVlbmN5IDw9IHJhdGUgYW5kIHN3aXRjaCB0byBpdCAqLworCXN0cnVjdCBtcHVfcmF0ZSAqIHB0cjsKKworCWlmIChjbGsgIT0gJnZpcnR1YWxfY2tfbXB1KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAocHRyID0gcmF0ZV90YWJsZTsgcHRyLT5yYXRlOyBwdHIrKykgeworCQlpZiAocHRyLT54dGFsICE9IGNrX3JlZi5yYXRlKQorCQkJY29udGludWU7CisKKwkJLyogRFBMTDEgY2Fubm90IGJlIHJlcHJvZ3JhbW1lZCB3aXRob3V0IHJpc2tpbmcgc3lzdGVtIGNyYXNoICovCisJCWlmIChsaWtlbHkoY2tfZHBsbDEucmF0ZSE9MCkgJiYgcHRyLT5wbGxfcmF0ZSAhPSBja19kcGxsMS5yYXRlKQorCQkJY29udGludWU7CisKKwkJLyogQ2FuIGNoZWNrIG9ubHkgYWZ0ZXIgeHRhbCBmcmVxdWVuY3kgY2hlY2sgKi8KKwkJaWYgKHB0ci0+cmF0ZSA8PSByYXRlKQorCQkJYnJlYWs7CisJfQorCisJaWYgKCFwdHItPnJhdGUpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBJbiBtb3N0IGNhc2VzIHdlIHNob3VsZCBub3QgbmVlZCB0byByZXByb2dyYW0gRFBMTC4KKwkgKiBSZXByb2dyYW1taW5nIHRoZSBEUExMIGlzIHRyaWNreSwgaXQgbXVzdCBiZSBkb25lIGZyb20gU1JBTS4KKwkgKi8KKwlvbWFwX3NyYW1fcmVwcm9ncmFtX2Nsb2NrKHB0ci0+ZHBsbGN0bF92YWwsIHB0ci0+Y2tjdGxfdmFsKTsKKworCWNrX2RwbGwxLnJhdGUgPSBwdHItPnBsbF9yYXRlOworCXByb3BhZ2F0ZV9yYXRlKCZja19kcGxsMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcDFfY2xrX3NldF9yYXRlX2RzcF9kb21haW4oc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJaW50ICByZXQgPSAtRUlOVkFMOworCWludCAgZHNvcl9leHA7CisJX191MTYgIHJlZ3ZhbDsKKworCWlmIChjbGstPmZsYWdzICYgUkFURV9DS0NUTCkgeworCQlkc29yX2V4cCA9IGNhbGNfZHNvcl9leHAoY2xrLCByYXRlKTsKKwkJaWYgKGRzb3JfZXhwID4gMykKKwkJCWRzb3JfZXhwID0gLUVJTlZBTDsKKwkJaWYgKGRzb3JfZXhwIDwgMCkKKwkJCXJldHVybiBkc29yX2V4cDsKKworCQlyZWd2YWwgPSBfX3Jhd19yZWFkdyhEU1BfQ0tDVEwpOworCQlyZWd2YWwgJj0gfigzIDw8IGNsay0+cmF0ZV9vZmZzZXQpOworCQlyZWd2YWwgfD0gZHNvcl9leHAgPDwgY2xrLT5yYXRlX29mZnNldDsKKwkJX19yYXdfd3JpdGV3KHJlZ3ZhbCwgRFNQX0NLQ1RMKTsKKwkJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyAoMSA8PCBkc29yX2V4cCk7CisJCXJldCA9IDA7CisJfQorCisJaWYgKHVubGlrZWx5KHJldCA9PSAwICYmIChjbGstPmZsYWdzICYgUkFURV9QUk9QQUdBVEVTKSkpCisJCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgbG9uZyBvbWFwMV9yb3VuZF90b190YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwkvKiBGaW5kIHRoZSBoaWdoZXN0IHN1cHBvcnRlZCBmcmVxdWVuY3kgPD0gcmF0ZSAqLworCXN0cnVjdCBtcHVfcmF0ZSAqIHB0cjsKKwlsb25nICBoaWdoZXN0X3JhdGU7CisKKwlpZiAoY2xrICE9ICZ2aXJ0dWFsX2NrX21wdSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwloaWdoZXN0X3JhdGUgPSAtRUlOVkFMOworCisJZm9yIChwdHIgPSByYXRlX3RhYmxlOyBwdHItPnJhdGU7IHB0cisrKSB7CisJCWlmIChwdHItPnh0YWwgIT0gY2tfcmVmLnJhdGUpCisJCQljb250aW51ZTsKKworCQloaWdoZXN0X3JhdGUgPSBwdHItPnJhdGU7CisKKwkJLyogQ2FuIGNoZWNrIG9ubHkgYWZ0ZXIgeHRhbCBmcmVxdWVuY3kgY2hlY2sgKi8KKwkJaWYgKHB0ci0+cmF0ZSA8PSByYXRlKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGhpZ2hlc3RfcmF0ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNhbGNfZXh0X2Rzb3IodW5zaWduZWQgbG9uZyByYXRlKQoreworCXVuc2lnbmVkIGRzb3I7CisKKwkvKiBNQ0xLIGFuZCBCQ0xLIGRpdmlzb3Igc2VsZWN0aW9uIGlzIG5vdCBsaW5lYXI6CisJICogZnJlcSA9IDk2TUh6IC8gZHNvcgorCSAqCisJICogUkFUSU9fU0VMIHJhbmdlOiBkc29yIDwtPiBSQVRJT19TRUwKKwkgKiAwLi42OiAoUkFUSU9fU0VMKzIpIDwtPiAoZHNvci0yKQorCSAqIDYuLjQ4OiAgKDgrKFJBVElPX1NFTC02KSoyKSA8LT4gKChkc29yLTgpLzIrNikKKwkgKiBNaW5pbXVtIGRzb3IgaXMgMiBhbmQgbWF4aW11bSBpcyA5Ni4gT2RkIGRpdmlzb3JzIHN0YXJ0aW5nIGZyb20gOQorCSAqIGNhbiBub3QgYmUgdXNlZC4KKwkgKi8KKwlmb3IgKGRzb3IgPSAyOyBkc29yIDwgOTY7ICsrZHNvcikgeworCQlpZiAoKGRzb3IgJiAxKSAmJiBkc29yID4gOCkKKwkJICAJY29udGludWU7CisJCWlmIChyYXRlID49IDk2MDAwMDAwIC8gZHNvcikKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gZHNvcjsKK30KKworLyogT25seSBuZWVkZWQgb24gMTUxMCAqLworc3RhdGljIGludCBvbWFwMV9zZXRfdWFydF9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJdmFsID0gb21hcF9yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCWlmIChyYXRlID09IDEyMDAwMDAwKQorCQl2YWwgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJZWxzZSBpZiAocmF0ZSA9PSA0ODAwMDAwMCkKKwkJdmFsIHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKwlvbWFwX3dyaXRlbCh2YWwsIGNsay0+ZW5hYmxlX3JlZyk7CisJY2xrLT5yYXRlID0gcmF0ZTsKKworCXJldHVybiAwOworfQorCisvKiBFeHRlcm5hbCBjbG9jayAoTUNMSyAmIEJDTEspIGZ1bmN0aW9ucyAqLworc3RhdGljIGludCBvbWFwMV9zZXRfZXh0X2Nsa19yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBkc29yOworCV9fdTE2IHJhdGlvX2JpdHM7CisKKwlkc29yID0gY2FsY19leHRfZHNvcihyYXRlKTsKKwljbGstPnJhdGUgPSA5NjAwMDAwMCAvIGRzb3I7CisJaWYgKGRzb3IgPiA4KQorCQlyYXRpb19iaXRzID0gKChkc29yIC0gOCkgLyAyICsgNikgPDwgMjsKKwllbHNlCisJCXJhdGlvX2JpdHMgPSAoZHNvciAtIDIpIDw8IDI7CisKKwlyYXRpb19iaXRzIHw9IG9tYXBfcmVhZHcoY2xrLT5lbmFibGVfcmVnKSAmIH4weGZkOworCW9tYXBfd3JpdGV3KHJhdGlvX2JpdHMsIGNsay0+ZW5hYmxlX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGxvbmcgb21hcDFfcm91bmRfZXh0X2Nsa19yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlyZXR1cm4gOTYwMDAwMDAgLyBjYWxjX2V4dF9kc29yKHJhdGUpOworfQorCitzdGF0aWMgdm9pZCBvbWFwMV9pbml0X2V4dF9jbGsoc3RydWN0IGNsayAqIGNsaykKK3sKKwl1bnNpZ25lZCBkc29yOworCV9fdTE2IHJhdGlvX2JpdHM7CisKKwkvKiBEZXRlcm1pbmUgY3VycmVudCByYXRlIGFuZCBlbnN1cmUgY2xvY2sgaXMgYmFzZWQgb24gOTZNSHogQVBMTCAqLworCXJhdGlvX2JpdHMgPSBvbWFwX3JlYWR3KGNsay0+ZW5hYmxlX3JlZykgJiB+MTsKKwlvbWFwX3dyaXRldyhyYXRpb19iaXRzLCBjbGstPmVuYWJsZV9yZWcpOworCisJcmF0aW9fYml0cyA9IChyYXRpb19iaXRzICYgMHhmYykgPj4gMjsKKwlpZiAocmF0aW9fYml0cyA+IDYpCisJCWRzb3IgPSAocmF0aW9fYml0cyAtIDYpICogMiArIDg7CisJZWxzZQorCQlkc29yID0gcmF0aW9fYml0cyArIDI7CisKKwljbGstPiByYXRlID0gOTYwMDAwMDAgLyBkc29yOworfQorCitzdGF0aWMgaW50IG9tYXAxX2Nsa191c2Uoc3RydWN0IGNsayAqY2xrKQoreworCWludCByZXQgPSAwOworCWlmIChjbGstPnVzZWNvdW50KysgPT0gMCkgeworCQlpZiAobGlrZWx5KGNsay0+cGFyZW50KSkgeworCQkJcmV0ID0gb21hcDFfY2xrX3VzZShjbGstPnBhcmVudCk7CisKKwkJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJCQljbGstPnVzZWNvdW50LS07CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKworCQkJaWYgKGNsay0+ZmxhZ3MgJiBDTE9DS19OT19JRExFX1BBUkVOVCkKKwkJCQlpZiAoIWNwdV9pc19vbWFwMjR4eCgpKQorCQkJCQlvbWFwMV9jbGtfZGVueV9pZGxlKGNsay0+cGFyZW50KTsKKwkJfQorCisJCXJldCA9IGNsay0+ZW5hYmxlKGNsayk7CisKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSAmJiBjbGstPnBhcmVudCkgeworCQkJb21hcDFfY2xrX3VudXNlKGNsay0+cGFyZW50KTsKKwkJCWNsay0+dXNlY291bnQtLTsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAxX2Nsa191bnVzZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKGNsay0+dXNlY291bnQgPiAwICYmICEoLS1jbGstPnVzZWNvdW50KSkgeworCQljbGstPmRpc2FibGUoY2xrKTsKKwkJaWYgKGxpa2VseShjbGstPnBhcmVudCkpIHsKKwkJCW9tYXAxX2Nsa191bnVzZShjbGstPnBhcmVudCk7CisJCQlpZiAoY2xrLT5mbGFncyAmIENMT0NLX05PX0lETEVfUEFSRU5UKQorCQkJCWlmICghY3B1X2lzX29tYXAyNHh4KCkpCisJCQkJCW9tYXAxX2Nsa19hbGxvd19pZGxlKGNsay0+cGFyZW50KTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBvbWFwMV9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlfX3UxNiByZWd2YWwxNjsKKwlfX3UzMiByZWd2YWwzMjsKKworCWlmIChjbGstPmZsYWdzICYgQUxXQVlTX0VOQUJMRUQpCisJCXJldHVybiAwOworCisJaWYgKHVubGlrZWx5KGNsay0+ZW5hYmxlX3JlZyA9PSAwKSkgeworCQlwcmludGsoS0VSTl9FUlIgImNsb2NrLmM6IEVuYWJsZSBmb3IgJXMgd2l0aG91dCBlbmFibGUgY29kZVxuIiwKKwkJICAgICAgIGNsay0+bmFtZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChjbGstPmZsYWdzICYgRU5BQkxFX1JFR18zMkJJVCkgeworCQlpZiAoY2xrLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykgeworCQkJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCQkJcmVndmFsMzIgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKKwkJCV9fcmF3X3dyaXRlbChyZWd2YWwzMiwgY2xrLT5lbmFibGVfcmVnKTsKKwkJfSBlbHNlIHsKKwkJCXJlZ3ZhbDMyID0gb21hcF9yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCQkJcmVndmFsMzIgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKKwkJCW9tYXBfd3JpdGVsKHJlZ3ZhbDMyLCBjbGstPmVuYWJsZV9yZWcpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGNsay0+ZmxhZ3MgJiBWSVJUVUFMX0lPX0FERFJFU1MpIHsKKwkJCXJlZ3ZhbDE2ID0gX19yYXdfcmVhZHcoY2xrLT5lbmFibGVfcmVnKTsKKwkJCXJlZ3ZhbDE2IHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJCQlfX3Jhd193cml0ZXcocmVndmFsMTYsIGNsay0+ZW5hYmxlX3JlZyk7CisJCX0gZWxzZSB7CisJCQlyZWd2YWwxNiA9IG9tYXBfcmVhZHcoY2xrLT5lbmFibGVfcmVnKTsKKwkJCXJlZ3ZhbDE2IHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJCQlvbWFwX3dyaXRldyhyZWd2YWwxNiwgY2xrLT5lbmFibGVfcmVnKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvbWFwMV9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJX191MTYgcmVndmFsMTY7CisJX191MzIgcmVndmFsMzI7CisKKwlpZiAoY2xrLT5lbmFibGVfcmVnID09IDApCisJCXJldHVybjsKKworCWlmIChjbGstPmZsYWdzICYgRU5BQkxFX1JFR18zMkJJVCkgeworCQlpZiAoY2xrLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykgeworCQkJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCQkJcmVndmFsMzIgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJCQlfX3Jhd193cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7CisJCX0gZWxzZSB7CisJCQlyZWd2YWwzMiA9IG9tYXBfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwkJCXJlZ3ZhbDMyICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCQkJb21hcF93cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoY2xrLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykgeworCQkJcmVndmFsMTYgPSBfX3Jhd19yZWFkdyhjbGstPmVuYWJsZV9yZWcpOworCQkJcmVndmFsMTYgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJCQlfX3Jhd193cml0ZXcocmVndmFsMTYsIGNsay0+ZW5hYmxlX3JlZyk7CisJCX0gZWxzZSB7CisJCQlyZWd2YWwxNiA9IG9tYXBfcmVhZHcoY2xrLT5lbmFibGVfcmVnKTsKKwkJCXJlZ3ZhbDE2ICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCQkJb21hcF93cml0ZXcocmVndmFsMTYsIGNsay0+ZW5hYmxlX3JlZyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBsb25nIG9tYXAxX2Nsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWludCBkc29yX2V4cDsKKworCWlmIChjbGstPmZsYWdzICYgUkFURV9GSVhFRCkKKwkJcmV0dXJuIGNsay0+cmF0ZTsKKworCWlmIChjbGstPmZsYWdzICYgUkFURV9DS0NUTCkgeworCQlkc29yX2V4cCA9IGNhbGNfZHNvcl9leHAoY2xrLCByYXRlKTsKKwkJaWYgKGRzb3JfZXhwIDwgMCkKKwkJCXJldHVybiBkc29yX2V4cDsKKwkJaWYgKGRzb3JfZXhwID4gMykKKwkJCWRzb3JfZXhwID0gMzsKKwkJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gKDEgPDwgZHNvcl9leHApOworCX0KKworCWlmKGNsay0+cm91bmRfcmF0ZSAhPSAwKQorCQlyZXR1cm4gY2xrLT5yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CisKKwlyZXR1cm4gY2xrLT5yYXRlOworfQorCitzdGF0aWMgaW50IG9tYXAxX2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlpbnQgIHJldCA9IC1FSU5WQUw7CisJaW50ICBkc29yX2V4cDsKKwlfX3UxNiAgcmVndmFsOworCisJaWYgKGNsay0+c2V0X3JhdGUpCisJCXJldCA9IGNsay0+c2V0X3JhdGUoY2xrLCByYXRlKTsKKwllbHNlIGlmIChjbGstPmZsYWdzICYgUkFURV9DS0NUTCkgeworCQlkc29yX2V4cCA9IGNhbGNfZHNvcl9leHAoY2xrLCByYXRlKTsKKwkJaWYgKGRzb3JfZXhwID4gMykKKwkJCWRzb3JfZXhwID0gLUVJTlZBTDsKKwkJaWYgKGRzb3JfZXhwIDwgMCkKKwkJCXJldHVybiBkc29yX2V4cDsKKworCQlyZWd2YWwgPSBvbWFwX3JlYWR3KEFSTV9DS0NUTCk7CisJCXJlZ3ZhbCAmPSB+KDMgPDwgY2xrLT5yYXRlX29mZnNldCk7CisJCXJlZ3ZhbCB8PSBkc29yX2V4cCA8PCBjbGstPnJhdGVfb2Zmc2V0OworCQlyZWd2YWwgPSB2ZXJpZnlfY2tjdGxfdmFsdWUocmVndmFsKTsKKwkJb21hcF93cml0ZXcocmVndmFsLCBBUk1fQ0tDVEwpOworCQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvICgxIDw8IGRzb3JfZXhwKTsKKwkJcmV0ID0gMDsKKwl9CisKKwlpZiAodW5saWtlbHkocmV0ID09IDAgJiYgKGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKSkKKwkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogT21hcDEgY2xvY2sgcmVzZXQgYW5kIGluaXQgZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTCisvKgorICogUmVzZXRzIHNvbWUgY2xvY2tzIHRoYXQgbWF5IGJlIGxlZnQgb24gZnJvbSBib290bG9hZGVyLAorICogYnV0IGxlYXZlcyBzZXJpYWwgY2xvY2tzIG9uLiBTZWUgYWxzbyBvbWFwX2xhdGVfY2xrX3Jlc2V0KCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMV9lYXJseV9jbGtfcmVzZXQodm9pZCkKK3sKKwkvL29tYXBfd3JpdGVsKDB4MyA8PCAyOSwgTU9EX0NPTkZfQ1RSTF8wKTsKK30KKworc3RhdGljIGludCBfX2luaXQgb21hcDFfbGF0ZV9jbGtfcmVzZXQodm9pZCkKK3sKKwkvKiBUdXJuIG9mZiBhbGwgdW51c2VkIGNsb2NrcyAqLworCXN0cnVjdCBjbGsgKnA7CisJX191MzIgcmVndmFsMzI7CisKKwkvKiBVU0JfUkVRX0VOIHdpbGwgYmUgZGlzYWJsZWQgbGF0ZXIgaWYgbmVjZXNzYXJ5ICh1c2JfZGNfY2spICovCisJcmVndmFsMzIgPSBvbWFwX3JlYWR3KFNPRlRfUkVRX1JFRykgJiAoMSA8PCA0KTsKKwlvbWFwX3dyaXRldyhyZWd2YWwzMiwgU09GVF9SRVFfUkVHKTsKKwlvbWFwX3dyaXRldygwLCBTT0ZUX1JFUV9SRUcyKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmNsb2Nrcywgbm9kZSkgeworCQlpZiAocC0+dXNlY291bnQgPiAwIHx8IChwLT5mbGFncyAmIEFMV0FZU19FTkFCTEVEKSB8fAorCQkJcC0+ZW5hYmxlX3JlZyA9PSAwKQorCQkJY29udGludWU7CisKKwkJLyogQ2xvY2tzIGluIHRoZSBEU1AgZG9tYWluIG5lZWQgYXBpX2NrLiBKdXN0IGFzc3VtZSBib290bG9hZGVyCisJCSAqIGhhcyBub3QgZW5hYmxlZCBhbnkgRFNQIGNsb2NrcyAqLworCQlpZiAoKHUzMilwLT5lbmFibGVfcmVnID09IERTUF9JRExFQ1QyKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJTa2lwcGluZyByZXNldCBjaGVjayBmb3IgRFNQIGRvbWFpbiAiCisJCQkgICAgICAgImNsb2NrIFwiJXNcIlxuIiwgcC0+bmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIElzIHRoZSBjbG9jayBhbHJlYWR5IGRpc2FibGVkPyAqLworCQlpZiAocC0+ZmxhZ3MgJiBFTkFCTEVfUkVHXzMyQklUKSB7CisJCQlpZiAocC0+ZmxhZ3MgJiBWSVJUVUFMX0lPX0FERFJFU1MpCisJCQkJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChwLT5lbmFibGVfcmVnKTsKKwkJCWVsc2UKKwkJCQlyZWd2YWwzMiA9IG9tYXBfcmVhZGwocC0+ZW5hYmxlX3JlZyk7CisJCX0gZWxzZSB7CisJCQlpZiAocC0+ZmxhZ3MgJiBWSVJUVUFMX0lPX0FERFJFU1MpCisJCQkJcmVndmFsMzIgPSBfX3Jhd19yZWFkdyhwLT5lbmFibGVfcmVnKTsKKwkJCWVsc2UKKwkJCQlyZWd2YWwzMiA9IG9tYXBfcmVhZHcocC0+ZW5hYmxlX3JlZyk7CisJCX0KKworCQlpZiAoKHJlZ3ZhbDMyICYgKDEgPDwgcC0+ZW5hYmxlX2JpdCkpID09IDApCisJCQljb250aW51ZTsKKworCQkvKiBGSVhNRTogVGhpcyBjbG9jayBzZWVtcyB0byBiZSBuZWNlc3NhcnkgYnV0IG5vLW9uZQorCQkgKiBoYXMgYXNrZWQgZm9yIGl0cyBhY3RpdmF0aW9uLiAqLworCQlpZiAocCA9PSAmdGMyX2NrICAgICAgICAgLy8gRklYOiBwbS5jIChTUkFNKSwgQ0NQLCBDYW1lcmEKKwkJICAgIHx8IHAgPT0gJmNrX2RwbGwxb3V0LmNsayAvLyBGSVg6IFNvU1NJLCBTU1IKKwkJICAgIHx8IHAgPT0gJmFybV9ncGlvX2NrIC8vIEZJWDogR1BJTyBjb2RlIGZvciAxNTEwCisJCSAgICApIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIkZJWE1FOiBDbG9jayBcIiVzXCIgc2VlbXMgdW51c2VkXG4iLAorCQkJICAgICAgIHAtPm5hbWUpOworCQkJY29udGludWU7CisJCX0KKworCQlwcmludGsoS0VSTl9JTkZPICJEaXNhYmxpbmcgdW51c2VkIGNsb2NrIFwiJXNcIi4uLiAiLCBwLT5uYW1lKTsKKwkJcC0+ZGlzYWJsZShwKTsKKwkJcHJpbnRrKCIgZG9uZVxuIik7CisJfQorCisJcmV0dXJuIDA7Cit9CitsYXRlX2luaXRjYWxsKG9tYXAxX2xhdGVfY2xrX3Jlc2V0KTsKKworI2Vsc2UKKyNkZWZpbmUgb21hcDFfZWFybHlfY2xrX3Jlc2V0KCkJe30KKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGNsa19mdW5jdGlvbnMgb21hcDFfY2xrX2Z1bmN0aW9ucyA9IHsKKwkuY2xrX3VzZQkJPSBvbWFwMV9jbGtfdXNlLAorCS5jbGtfdW51c2UJCT0gb21hcDFfY2xrX3VudXNlLAorCS5jbGtfcm91bmRfcmF0ZQkJPSBvbWFwMV9jbGtfcm91bmRfcmF0ZSwKKwkuY2xrX3NldF9yYXRlCQk9IG9tYXAxX2Nsa19zZXRfcmF0ZSwKK307CisKK2ludCBfX2luaXQgb21hcDFfY2xrX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICoqIGNsa3A7CisJY29uc3Qgc3RydWN0IG9tYXBfY2xvY2tfY29uZmlnICppbmZvOworCWludCBjcnlzdGFsX3R5cGUgPSAwOyAvKiBEZWZhdWx0IDEyIE1IeiAqLworCisJb21hcDFfZWFybHlfY2xrX3Jlc2V0KCk7CisJY2xrX2luaXQoJm9tYXAxX2Nsa19mdW5jdGlvbnMpOworCisJLyogQnkgZGVmYXVsdCBhbGwgaWRsZWN0MSBjbG9ja3MgYXJlIGFsbG93ZWQgdG8gaWRsZSAqLworCWFybV9pZGxlY3QxX21hc2sgPSB+MDsKKworCWZvciAoY2xrcCA9IG9uY2hpcF9jbGtzOyBjbGtwIDwgb25jaGlwX2Nsa3MrQVJSQVlfU0laRShvbmNoaXBfY2xrcyk7IGNsa3ArKykgeworCQlpZiAoKCgqY2xrcCktPmZsYWdzICZDTE9DS19JTl9PTUFQMTUxMCkgJiYgY3B1X2lzX29tYXAxNTEwKCkpIHsKKwkJCWNsa19yZWdpc3RlcigqY2xrcCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICgoKCpjbGtwKS0+ZmxhZ3MgJkNMT0NLX0lOX09NQVAxNlhYKSAmJiBjcHVfaXNfb21hcDE2eHgoKSkgeworCQkJY2xrX3JlZ2lzdGVyKCpjbGtwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCgoKmNsa3ApLT5mbGFncyAmQ0xPQ0tfSU5fT01BUDczMCkgJiYgY3B1X2lzX29tYXA3MzAoKSkgeworCQkJY2xrX3JlZ2lzdGVyKCpjbGtwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJaW5mbyA9IG9tYXBfZ2V0X2NvbmZpZyhPTUFQX1RBR19DTE9DSywgc3RydWN0IG9tYXBfY2xvY2tfY29uZmlnKTsKKwlpZiAoaW5mbyAhPSBOVUxMKSB7CisJCWlmICghY3B1X2lzX29tYXAxNTEwKCkpCisJCQljcnlzdGFsX3R5cGUgPSBpbmZvLT5zeXN0ZW1fY2xvY2tfdHlwZTsKKwl9CisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCisJY2tfcmVmLnJhdGUgPSAxMzAwMDAwMDsKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCisJaWYgKGNyeXN0YWxfdHlwZSA9PSAyKQorCQlja19yZWYucmF0ZSA9IDE5MjAwMDAwOworI2VuZGlmCisKKwlwcmludGsoIkNsb2NrczogQVJNX1NZU1NUOiAweCUwNHggRFBMTF9DVEw6IDB4JTA0eCBBUk1fQ0tDVEw6IDB4JTA0eFxuIiwKKwkgICAgICAgb21hcF9yZWFkdyhBUk1fU1lTU1QpLCBvbWFwX3JlYWR3KERQTExfQ1RMKSwKKwkgICAgICAgb21hcF9yZWFkdyhBUk1fQ0tDVEwpKTsKKworCS8qIFdlIHdhbnQgdG8gYmUgaW4gc3luY3Jvbm91cyBzY2FsYWJsZSBtb2RlICovCisJb21hcF93cml0ZXcoMHgxMDAwLCBBUk1fU1lTU1QpOworCisjaWZkZWYgQ09ORklHX09NQVBfQ0xPQ0tTX1NFVF9CWV9CT09UTE9BREVSCisJLyogVXNlIHZhbHVlcyBzZXQgYnkgYm9vdGxvYWRlci4gRGV0ZXJtaW5lIFBMTCByYXRlIGFuZCByZWNhbGN1bGF0ZQorCSAqIGRlcGVuZGVudCBjbG9ja3MgYXMgaWYga2VybmVsIGhhZCBjaGFuZ2VkIFBMTCBvciBkaXZpc29ycy4KKwkgKi8KKwl7CisJCXVuc2lnbmVkIHBsbF9jdGxfdmFsID0gb21hcF9yZWFkdyhEUExMX0NUTCk7CisKKwkJY2tfZHBsbDEucmF0ZSA9IGNrX3JlZi5yYXRlOyAvKiBCYXNlIHh0YWwgcmF0ZSAqLworCQlpZiAocGxsX2N0bF92YWwgJiAweDEwKSB7CisJCQkvKiBQTEwgZW5hYmxlZCwgYXBwbHkgbXVsdGlwbGllciBhbmQgZGl2aXNvciAqLworCQkJaWYgKHBsbF9jdGxfdmFsICYgMHhmODApCisJCQkJY2tfZHBsbDEucmF0ZSAqPSAocGxsX2N0bF92YWwgJiAweGY4MCkgPj4gNzsKKwkJCWNrX2RwbGwxLnJhdGUgLz0gKChwbGxfY3RsX3ZhbCAmIDB4NjApID4+IDUpICsgMTsKKwkJfSBlbHNlIHsKKwkJCS8qIFBMTCBkaXNhYmxlZCwgYXBwbHkgYnlwYXNzIGRpdmlzb3IgKi8KKwkJCXN3aXRjaCAocGxsX2N0bF92YWwgJiAweGMpIHsKKwkJCWNhc2UgMDoKKwkJCQlicmVhazsKKwkJCWNhc2UgMHg0OgorCQkJCWNrX2RwbGwxLnJhdGUgLz0gMjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJY2tfZHBsbDEucmF0ZSAvPSA0OworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXByb3BhZ2F0ZV9yYXRlKCZja19kcGxsMSk7CisjZWxzZQorCS8qIEZpbmQgdGhlIGhpZ2hlc3Qgc3VwcG9ydGVkIGZyZXF1ZW5jeSBhbmQgZW5hYmxlIGl0ICovCisJaWYgKG9tYXAxX3NlbGVjdF90YWJsZV9yYXRlKCZ2aXJ0dWFsX2NrX21wdSwgfjApKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU3lzdGVtIGZyZXF1ZW5jaWVzIG5vdCBzZXQuIENoZWNrIHlvdXIgY29uZmlnLlxuIik7CisJCS8qIEd1ZXNzIHNhbmUgdmFsdWVzICg2ME1IeikgKi8KKwkJb21hcF93cml0ZXcoMHgyMjkwLCBEUExMX0NUTCk7CisJCW9tYXBfd3JpdGV3KDB4MTAwNSwgQVJNX0NLQ1RMKTsKKwkJY2tfZHBsbDEucmF0ZSA9IDYwMDAwMDAwOworCQlwcm9wYWdhdGVfcmF0ZSgmY2tfZHBsbDEpOworCX0KKyNlbmRpZgorCS8qIENhY2hlIHJhdGVzIGZvciBjbG9ja3MgY29ubmVjdGVkIHRvIGNrX3JlZiAobm90IGRwbGwxKSAqLworCXByb3BhZ2F0ZV9yYXRlKCZja19yZWYpOworCXByaW50ayhLRVJOX0lORk8gIkNsb2NraW5nIHJhdGUgKHh0YWwvRFBMTDEvTVBVKTogIgorCQkiJWxkLiUwMWxkLyVsZC4lMDFsZC8lbGQuJTAxbGQgTUh6XG4iLAorCSAgICAgICBja19yZWYucmF0ZSAvIDEwMDAwMDAsIChja19yZWYucmF0ZSAvIDEwMDAwMCkgJSAxMCwKKwkgICAgICAgY2tfZHBsbDEucmF0ZSAvIDEwMDAwMDAsIChja19kcGxsMS5yYXRlIC8gMTAwMDAwKSAlIDEwLAorCSAgICAgICBhcm1fY2sucmF0ZSAvIDEwMDAwMDAsIChhcm1fY2sucmF0ZSAvIDEwMDAwMCkgJSAxMCk7CisKKyNpZmRlZiBDT05GSUdfTUFDSF9PTUFQX1BFUlNFVVMyCisJLyogU2VsZWN0IHNsaWNlciBvdXRwdXQgYXMgT01BUCBpbnB1dCBjbG9jayAqLworCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoT01BUDczMF9QQ0NfVVBMRF9DVFJMKSAmIH4weDEsIE9NQVA3MzBfUENDX1VQTERfQ1RSTCk7CisjZW5kaWYKKworCS8qIFR1cm4gb2ZmIERTUCBhbmQgQVJNX1RJTVhPLiBNYWtlIHN1cmUgQVJNX0lOVEhDSyBpcyBub3QgZGl2aWRlZCAqLworCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoQVJNX0NLQ1RMKSAmIDB4MGZmZiwgQVJNX0NLQ1RMKTsKKworCS8qIFB1dCBEU1AvTVBVSSBpbnRvIHJlc2V0IHVudGlsIG5lZWRlZCAqLworCW9tYXBfd3JpdGV3KDAsIEFSTV9SU1RDVDEpOworCW9tYXBfd3JpdGV3KDEsIEFSTV9SU1RDVDIpOworCW9tYXBfd3JpdGV3KDB4NDAwLCBBUk1fSURMRUNUMSk7CisKKwkvKgorCSAqIEFjY29yZGluZyB0byBPTUFQNTkxMCBFcnJhdHVtIFNZU19ETUFfMSwgYml0IERNQUNLX1JFUSAoYml0IDgpCisJICogb2YgdGhlIEFSTV9JRExFQ1QyIHJlZ2lzdGVyIG11c3QgYmUgc2V0IHRvIHplcm8uIFRoZSBwb3dlci1vbgorCSAqIGRlZmF1bHQgdmFsdWUgb2YgdGhpcyBiaXQgaXMgb25lLgorCSAqLworCW9tYXBfd3JpdGV3KDB4MDAwMCwgQVJNX0lETEVDVDIpOwkvKiBUdXJuIExDRCBjbG9jayBvZmYgYWxzbyAqLworCisJLyoKKwkgKiBPbmx5IGVuYWJsZSB0aG9zZSBjbG9ja3Mgd2Ugd2lsbCBuZWVkLCBsZXQgdGhlIGRyaXZlcnMKKwkgKiBlbmFibGUgb3RoZXIgY2xvY2tzIGFzIG5lY2Vzc2FyeQorCSAqLworCWNsa191c2UoJmFybXBlcl9jay5jbGspOworCWNsa191c2UoJmFybXhvcl9jay5jbGspOworCWNsa191c2UoJmFybXRpbV9jay5jbGspOyAvKiBUaGlzIHNob3VsZCBiZSBkb25lIGJ5IHRpbWVyIGNvZGUgKi8KKworCWlmIChjcHVfaXNfb21hcDE1MTAoKSkKKwkJY2xrX2VuYWJsZSgmYXJtX2dwaW9fY2spOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2JkZmI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5oCkBAIC0wLDAgKzEsNzY4IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA1IE5va2lhIGNvcnBvcmF0aW9uCisgKiAgV3JpdHRlbiBieSBUdXVra2EgVGlra2FuZW4gPHR1dWtrYS50aWtrYW5lbkBlbGVrdHJvYml0LmNvbT4KKyAqICBCYXNlZCBvbiBjbG9ja3MuaCBieSBUb255IExpbmRncmVuLCBHb3Jkb24gTWNOdXR0IGFuZCBSaWRnZVJ1biwgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMV9DTE9DS19ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMV9DTE9DS19ICisKK3N0YXRpYyBpbnQgb21hcDFfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyB2b2lkIG9tYXAxX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIHZvaWQgb21hcDFfY2tjdGxfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIHZvaWQgb21hcDFfd2F0Y2hkb2dfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIHZvaWQgb21hcDFfY2tjdGxfcmVjYWxjX2RzcF9kb21haW4oc3RydWN0IGNsayAqIGNsayk7CitzdGF0aWMgaW50IG9tYXAxX2Nsa19lbmFibGVfZHNwX2RvbWFpbihzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyBpbnQgb21hcDFfY2xrX3NldF9yYXRlX2RzcF9kb21haW4oc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK3N0YXRpYyB2b2lkIG9tYXAxX2Nsa19kaXNhYmxlX2RzcF9kb21haW4oc3RydWN0IGNsayAqIGNsayk7CitzdGF0aWMgaW50IG9tYXAxX3NldF91YXJ0X3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK3N0YXRpYyB2b2lkIG9tYXAxX3VhcnRfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIGludCBvbWFwMV9jbGtfZW5hYmxlX3VhcnRfZnVuY3Rpb25hbChzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyB2b2lkIG9tYXAxX2Nsa19kaXNhYmxlX3VhcnRfZnVuY3Rpb25hbChzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyBpbnQgb21hcDFfc2V0X2V4dF9jbGtfcmF0ZShzdHJ1Y3QgY2xrICogY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOworc3RhdGljIGxvbmcgb21hcDFfcm91bmRfZXh0X2Nsa19yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CitzdGF0aWMgdm9pZCBvbWFwMV9pbml0X2V4dF9jbGsoc3RydWN0IGNsayAqIGNsayk7CitzdGF0aWMgaW50IG9tYXAxX3NlbGVjdF90YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CitzdGF0aWMgbG9uZyBvbWFwMV9yb3VuZF90b190YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CitzdGF0aWMgaW50IG9tYXAxX2Nsa191c2Uoc3RydWN0IGNsayAqY2xrKTsKK3N0YXRpYyB2b2lkIG9tYXAxX2Nsa191bnVzZShzdHJ1Y3QgY2xrICpjbGspOworCitzdHJ1Y3QgbXB1X3JhdGUgeworCXVuc2lnbmVkIGxvbmcJCXJhdGU7CisJdW5zaWduZWQgbG9uZwkJeHRhbDsKKwl1bnNpZ25lZCBsb25nCQlwbGxfcmF0ZTsKKwlfX3UxNgkJCWNrY3RsX3ZhbDsKKwlfX3UxNgkJCWRwbGxjdGxfdmFsOworfTsKKworc3RydWN0IHVhcnRfY2xrIHsKKwlzdHJ1Y3QgY2xrCWNsazsKKwl1bnNpZ25lZCBsb25nCXN5c2NfYWRkcjsKK307CisKKy8qIFByb3ZpZGUgYSBtZXRob2QgZm9yIHByZXZlbnRpbmcgaWRsaW5nIHNvbWUgQVJNIElETEVDVCBjbG9ja3MgKi8KK3N0cnVjdCBhcm1faWRsZWN0MV9jbGsgeworCXN0cnVjdCBjbGsJY2xrOworCXVuc2lnbmVkIGxvbmcJbm9faWRsZV9jb3VudDsKKwlfX3U4CQlpZGxlY3Rfc2hpZnQ7Cit9OworCisvKiBBUk1fQ0tDVEwgYml0IHNoaWZ0cyAqLworI2RlZmluZSBDS0NUTF9QRVJESVZfT0ZGU0VUCTAKKyNkZWZpbmUgQ0tDVExfTENERElWX09GRlNFVAkyCisjZGVmaW5lIENLQ1RMX0FSTURJVl9PRkZTRVQJNAorI2RlZmluZSBDS0NUTF9EU1BESVZfT0ZGU0VUCTYKKyNkZWZpbmUgQ0tDVExfVENESVZfT0ZGU0VUCTgKKyNkZWZpbmUgQ0tDVExfRFNQTU1VRElWX09GRlNFVAkxMAorLyojZGVmaW5lIEFSTV9USU1YTwkJMTIqLworI2RlZmluZSBFTl9EU1BDSwkJMTMKKy8qI2RlZmluZSBBUk1fSU5USENLX1NFTAkxNCovIC8qIERpdmlkZS1ieS0yIGZvciBtcHUgaW50aF9jayAqLworLyogRFNQX0NLQ1RMIGJpdCBzaGlmdHMgKi8KKyNkZWZpbmUgQ0tDVExfRFNQUEVSRElWX09GRlNFVAkwCisKKy8qIEFSTV9JRExFQ1QyIGJpdCBzaGlmdHMgKi8KKyNkZWZpbmUgRU5fV0RUQ0sJMAorI2RlZmluZSBFTl9YT1JQQ0sJMQorI2RlZmluZSBFTl9QRVJDSwkyCisjZGVmaW5lIEVOX0xDRENLCTMKKyNkZWZpbmUgRU5fTEJDSwkJNCAvKiBOb3Qgb24gMTYxMC8xNzEwICovCisvKiNkZWZpbmUgRU5fSFNBQkNLCTUqLworI2RlZmluZSBFTl9BUElDSwk2CisjZGVmaW5lIEVOX1RJTUNLCTcKKyNkZWZpbmUgRE1BQ0tfUkVRCTgKKyNkZWZpbmUgRU5fR1BJT0NLCTkgLyogTm90IG9uIDE2MTAvMTcxMCAqLworLyojZGVmaW5lIEVOX0xCRlJFRUNLCTEwKi8KKyNkZWZpbmUgRU5fQ0tPVVRfQVJNCTExCisKKy8qIEFSTV9JRExFQ1QzIGJpdCBzaGlmdHMgKi8KKyNkZWZpbmUgRU5fT0NQSV9DSwkwCisjZGVmaW5lIEVOX1RDMV9DSwkyCisjZGVmaW5lIEVOX1RDMl9DSwk0CisKKy8qIERTUF9JRExFQ1QyIGJpdCBzaGlmdHMgKDAsMSwyIGFyZSBzYW1lIGFzIGZvciBBUk1fSURMRUNUMikgKi8KKyNkZWZpbmUgRU5fRFNQVElNQ0sJNQorCisvKiBWYXJpb3VzIHJlZ2lzdGVyIGRlZmluZXMgZm9yIGNsb2NrIGNvbnRyb2xzIHNjYXR0ZXJlZCBhcm91bmQgT01BUCBjaGlwICovCisjZGVmaW5lIFVTQl9NQ0xLX0VOX0JJVAkJNAkvKiBJbiBVTFBEX0NMS0NfQ1RSTCAqLworI2RlZmluZSBVU0JfSE9TVF9ISENfVUhPU1RfRU4JOQkvKiBJbiBNT0RfQ09ORl9DVFJMXzAgKi8KKyNkZWZpbmUgU1dEX1VMUERfUExMX0NMS19SRVEJMQkvKiBJbiBTV0RfQ0xLX0RJVl9DVFJMX1NFTCAqLworI2RlZmluZSBDT01fVUxQRF9QTExfQ0xLX1JFUQkxCS8qIEluIENPTV9DTEtfRElWX0NUUkxfU0VMICovCisjZGVmaW5lIFNXRF9DTEtfRElWX0NUUkxfU0VMCTB4ZmZmZTA4NzQKKyNkZWZpbmUgQ09NX0NMS19ESVZfQ1RSTF9TRUwJMHhmZmZlMDg3OAorI2RlZmluZSBTT0ZUX1JFUV9SRUcJCTB4ZmZmZTA4MzQKKyNkZWZpbmUgU09GVF9SRVFfUkVHMgkJMHhmZmZlMDg4MAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9tYXAxIE1QVSByYXRlIHRhYmxlCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHN0cnVjdCBtcHVfcmF0ZSByYXRlX3RhYmxlW10gPSB7CisJLyogTVBVIE1IeiwgeHRhbCBNSHosIGRwbGwxIE1IeiwgQ0tDVEwsIERQTExfQ1RMCisJICogTk9URTogQ29tbWVudCBvcmRlciBoZXJlIGlzIGRpZmZlcmVudCBmcm9tIGJpdHMgaW4gQ0tDVEwgdmFsdWU6CisJICogYXJtZGl2LCBkc3BkaXYsIGRzcG1tdSwgdGNkaXYsIHBlcmRpdiwgbGNkZGl2CisJICovCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMjE2TUhaKQorCXsgMjE2MDAwMDAwLCAxMjAwMDAwMCwgMjE2MDAwMDAwLCAweDA1MGQsIDB4MjkxMCB9LCAvKiAxLzEvMi8yLzIvOCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTk1TUhaKQorCXsgMTk1MDAwMDAwLCAxMzAwMDAwMCwgMTk1MDAwMDAwLCAweDA1MGUsIDB4Mjc5MCB9LCAvKiAxLzEvMi8yLzQvOCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTkyTUhaKQorCXsgMTkyMDAwMDAwLCAxOTIwMDAwMCwgMTkyMDAwMDAwLCAweDA1MGYsIDB4MjUxMCB9LCAvKiAxLzEvMi8yLzgvOCAqLworCXsgMTkyMDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDA1MGYsIDB4MjgxMCB9LCAvKiAxLzEvMi8yLzgvOCAqLworCXsgIDk2MDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDA1NWYsIDB4MjgxMCB9LCAvKiAyLzIvMi8yLzgvOCAqLworCXsgIDQ4MDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDBiYWYsIDB4MjgxMCB9LCAvKiA0LzQvNC84LzgvOCAqLworCXsgIDI0MDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDBmZmYsIDB4MjgxMCB9LCAvKiA4LzgvOC84LzgvOCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTgyTUhaKQorCXsgMTgyMDAwMDAwLCAxMzAwMDAwMCwgMTgyMDAwMDAwLCAweDA1MGUsIDB4MjcxMCB9LCAvKiAxLzEvMi8yLzQvOCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTY4TUhaKQorCXsgMTY4MDAwMDAwLCAxMjAwMDAwMCwgMTY4MDAwMDAwLCAweDAxMGYsIDB4MjcxMCB9LCAvKiAxLzEvMS8yLzgvOCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTUwTUhaKQorCXsgMTUwMDAwMDAwLCAxMjAwMDAwMCwgMTUwMDAwMDAwLCAweDAxMGEsIDB4MmNiMCB9LCAvKiAxLzEvMS8yLzQvNCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTIwTUhaKQorCXsgMTIwMDAwMDAwLCAxMjAwMDAwMCwgMTIwMDAwMDAwLCAweDAxMGEsIDB4MjUxMCB9LCAvKiAxLzEvMS8yLzQvNCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fOTZNSFopCisJeyAgOTYwMDAwMDAsIDEyMDAwMDAwLCAgOTYwMDAwMDAsIDB4MDAwNSwgMHgyNDEwIH0sIC8qIDEvMS8xLzEvMi8yICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV82ME1IWikKKwl7ICA2MDAwMDAwMCwgMTIwMDAwMDAsICA2MDAwMDAwMCwgMHgwMDA1LCAweDIyOTAgfSwgLyogMS8xLzEvMS8yLzIgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX09NQVBfQVJNXzMwTUhaKQorCXsgIDMwMDAwMDAwLCAxMjAwMDAwMCwgIDYwMDAwMDAwLCAweDA1NTUsIDB4MjI5MCB9LCAvKiAyLzIvMi8yLzIvMiAqLworI2VuZGlmCisJeyAwLCAwLCAwLCAwLCAwIH0sCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9tYXAxIGNsb2NrcworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCBjbGsgY2tfcmVmID0geworCS5uYW1lCQk9ICJja19yZWYiLAorCS5yYXRlCQk9IDEyMDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCSAgQUxXQVlTX0VOQUJMRUQsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNrX2RwbGwxID0geworCS5uYW1lCQk9ICJja19kcGxsMSIsCisJLnBhcmVudAkJPSAmY2tfcmVmLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCSAgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrIGNrX2RwbGwxb3V0ID0geworCS5jbGsgPSB7CisJICAgICAgIAkubmFtZQkJPSAiY2tfZHBsbDFvdXQiLAorCQkucGFyZW50CQk9ICZja19kcGxsMSwKKwkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMiwKKwkJLmVuYWJsZV9iaXQJPSBFTl9DS09VVF9BUk0sCisJCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorCX0sCisJLmlkbGVjdF9zaGlmdAk9IDEyLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXJtX2NrID0geworCS5uYW1lCQk9ICJhcm1fY2siLAorCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCSAgUkFURV9DS0NUTCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAorCS5yYXRlX29mZnNldAk9IENLQ1RMX0FSTURJVl9PRkZTRVQsCisJLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjLAorCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayBhcm1wZXJfY2sgPSB7CisJLmNsayA9IHsKKwkJLm5hbWUJCT0gImFybXBlcl9jayIsCisJCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAorCQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8CisJCQkJICBSQVRFX0NLQ1RMIHwgQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMiwKKwkJLmVuYWJsZV9iaXQJPSBFTl9QRVJDSywKKwkJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfUEVSRElWX09GRlNFVCwKKwkJLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjLAorCQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKKwl9LAorCS5pZGxlY3Rfc2hpZnQJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXJtX2dwaW9fY2sgPSB7CisJLm5hbWUJCT0gImFybV9ncGlvX2NrIiwKKwkucGFyZW50CQk9ICZja19kcGxsMSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJLmVuYWJsZV9iaXQJPSBFTl9HUElPQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgYXJteG9yX2NrID0geworCS5jbGsgPSB7CisJCS5uYW1lCQk9ICJhcm14b3JfY2siLAorCQkucGFyZW50CQk9ICZja19yZWYsCisJCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCQkgIENMT0NLX0lETEVfQ09OVFJPTCwKKwkJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJCS5lbmFibGVfYml0CT0gRU5fWE9SUENLLAorCQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKKwl9LAorCS5pZGxlY3Rfc2hpZnQJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgYXJtdGltX2NrID0geworCS5jbGsgPSB7CisJCS5uYW1lCQk9ICJhcm10aW1fY2siLAorCQkucGFyZW50CQk9ICZja19yZWYsCisJCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCQkgIENMT0NLX0lETEVfQ09OVFJPTCwKKwkJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJCS5lbmFibGVfYml0CT0gRU5fVElNQ0ssCisJCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorCX0sCisJLmlkbGVjdF9zaGlmdAk9IDksCit9OworCitzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayBhcm13ZHRfY2sgPSB7CisJLmNsayA9IHsKKwkJLm5hbWUJCT0gImFybXdkdF9jayIsCisJCS5wYXJlbnQJCT0gJmNrX3JlZiwKKwkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJCSAgQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMiwKKwkJLmVuYWJsZV9iaXQJPSBFTl9XRFRDSywKKwkJLnJlY2FsYwkJPSAmb21hcDFfd2F0Y2hkb2dfcmVjYWxjLAorCQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKKwl9LAorCS5pZGxlY3Rfc2hpZnQJPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXJtaW50aF9jazE2eHggPSB7CisJLm5hbWUJCT0gImFybWludGhfY2siLAorCS5wYXJlbnQJCT0gJmFybV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfCBBTFdBWVNfRU5BQkxFRCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS8qIE5vdGU6IE9uIDE2eHggdGhlIGZyZXF1ZW5jeSBjYW4gYmUgZGl2aWRlZCBieSAyIGJ5IHByb2dyYW1taW5nCisJICogQVJNX0NLQ1RMOkFSTV9JTlRIQ0tfU0VMKDE0KSB0byAxCisJICoKKwkgKiAxNTEwIHZlcnNpb24gaXMgaW4gVEMgY2xvY2tzLgorCSAqLworCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3BfY2sgPSB7CisJLm5hbWUJCT0gImRzcF9jayIsCisJLnBhcmVudAkJPSAmY2tfZHBsbDEsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJICBSQVRFX0NLQ1RMLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9DS0NUTCwKKwkuZW5hYmxlX2JpdAk9IEVOX0RTUENLLAorCS5yYXRlX29mZnNldAk9IENLQ1RMX0RTUERJVl9PRkZTRVQsCisJLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjLAorCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3BtbXVfY2sgPSB7CisJLm5hbWUJCT0gImRzcG1tdV9jayIsCisJLnBhcmVudAkJPSAmY2tfZHBsbDEsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJICBSQVRFX0NLQ1RMIHwgQUxXQVlTX0VOQUJMRUQsCisJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfRFNQTU1VRElWX09GRlNFVCwKKwkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGMsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzcHBlcl9jayA9IHsKKwkubmFtZQkJPSAiZHNwcGVyX2NrIiwKKwkucGFyZW50CQk9ICZja19kcGxsMSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8CisJCQkgIFJBVEVfQ0tDVEwgfCBWSVJUVUFMX0lPX0FERFJFU1MsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopRFNQX0lETEVDVDIsCisJLmVuYWJsZV9iaXQJPSBFTl9QRVJDSywKKwkucmF0ZV9vZmZzZXQJPSBDS0NUTF9QRVJESVZfT0ZGU0VULAorCS5yZWNhbGMJCT0gJm9tYXAxX2NrY3RsX3JlY2FsY19kc3BfZG9tYWluLAorCS5zZXRfcmF0ZQk9ICZvbWFwMV9jbGtfc2V0X3JhdGVfZHNwX2RvbWFpbiwKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2RzcF9kb21haW4sCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZHNwX2RvbWFpbiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzcHhvcl9jayA9IHsKKwkubmFtZQkJPSAiZHNweG9yX2NrIiwKKwkucGFyZW50CQk9ICZja19yZWYsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJICBWSVJUVUFMX0lPX0FERFJFU1MsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopRFNQX0lETEVDVDIsCisJLmVuYWJsZV9iaXQJPSBFTl9YT1JQQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2RzcF9kb21haW4sCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZHNwX2RvbWFpbiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzcHRpbV9jayA9IHsKKwkubmFtZQkJPSAiZHNwdGltX2NrIiwKKwkucGFyZW50CQk9ICZja19yZWYsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJICBWSVJUVUFMX0lPX0FERFJFU1MsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopRFNQX0lETEVDVDIsCisJLmVuYWJsZV9iaXQJPSBFTl9EU1BUSU1DSywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZHNwX2RvbWFpbiwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9kc3BfZG9tYWluLAorfTsKKworLyogVGllIEFSTV9JRExFQ1QxOklETElGX0FSTSB0byB0aGlzIGxvZ2ljYWwgY2xvY2sgc3RydWN0dXJlICovCitzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayB0Y19jayA9IHsKKwkuY2xrID0geworCQkubmFtZQkJPSAidGNfY2siLAorCQkucGFyZW50CQk9ICZja19kcGxsMSwKKwkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJCSAgQ0xPQ0tfSU5fT01BUDczMCB8IFJBVEVfQ0tDVEwgfAorCQkJCSAgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQgfAorCQkJCSAgQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkucmF0ZV9vZmZzZXQJPSBDS0NUTF9UQ0RJVl9PRkZTRVQsCisJCS5yZWNhbGMJCT0gJm9tYXAxX2NrY3RsX3JlY2FsYywKKwkJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCisJfSwKKwkuaWRsZWN0X3NoaWZ0CT0gNiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFybWludGhfY2sxNTEwID0geworCS5uYW1lCQk9ICJhcm1pbnRoX2NrIiwKKwkucGFyZW50CQk9ICZ0Y19jay5jbGssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQUxXQVlTX0VOQUJMRUQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkvKiBOb3RlOiBPbiAxNTEwIHRoZSBmcmVxdWVuY3kgZm9sbG93cyBUQ19DSworCSAqCisJICogMTZ4eCB2ZXJzaW9uIGlzIGluIE1QVSBjbG9ja3MuCisJICovCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRpcGJfY2sgPSB7CisJLyogTm8taWRsZSBjb250cm9sbGVkIGJ5ICJ0Y19jayIgKi8KKwkubmFtZQkJPSAidGlicF9jayIsCisJLnBhcmVudAkJPSAmdGNfY2suY2xrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IEFMV0FZU19FTkFCTEVELAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGwzX29jcGlfY2sgPSB7CisJLyogTm8taWRsZSBjb250cm9sbGVkIGJ5ICJ0Y19jayIgKi8KKwkubmFtZQkJPSAibDNfb2NwaV9jayIsCisJLnBhcmVudAkJPSAmdGNfY2suY2xrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMywKKwkuZW5hYmxlX2JpdAk9IEVOX09DUElfQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdGMxX2NrID0geworCS5uYW1lCQk9ICJ0YzFfY2siLAorCS5wYXJlbnQJCT0gJnRjX2NrLmNsaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDMsCisJLmVuYWJsZV9iaXQJPSBFTl9UQzFfQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdGMyX2NrID0geworCS5uYW1lCQk9ICJ0YzJfY2siLAorCS5wYXJlbnQJCT0gJnRjX2NrLmNsaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDMsCisJLmVuYWJsZV9iaXQJPSBFTl9UQzJfQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZG1hX2NrID0geworCS8qIE5vLWlkbGUgY29udHJvbGxlZCBieSAidGNfY2siICovCisJLm5hbWUJCT0gImRtYV9jayIsCisJLnBhcmVudAkJPSAmdGNfY2suY2xrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCSAgQUxXQVlTX0VOQUJMRUQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZG1hX2xjZGZyZWVfY2sgPSB7CisJLm5hbWUJCT0gImRtYV9sY2RmcmVlX2NrIiwKKwkucGFyZW50CQk9ICZ0Y19jay5jbGssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgQUxXQVlTX0VOQUJMRUQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgYXBpX2NrID0geworCS5jbGsgPSB7CisJCS5uYW1lCQk9ICJhcGlfY2siLAorCQkucGFyZW50CQk9ICZ0Y19jay5jbGssCisJCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCQkgIENMT0NLX0lETEVfQ09OVFJPTCwKKwkJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJCS5lbmFibGVfYml0CT0gRU5fQVBJQ0ssCisJCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorCX0sCisJLmlkbGVjdF9zaGlmdAk9IDgsCit9OworCitzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayBsYl9jayA9IHsKKwkuY2xrID0geworCQkubmFtZQkJPSAibGJfY2siLAorCQkucGFyZW50CQk9ICZ0Y19jay5jbGssCisJCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lETEVfQ09OVFJPTCwKKwkJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJCS5lbmFibGVfYml0CT0gRU5fTEJDSywKKwkJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCisJfSwKKwkuaWRsZWN0X3NoaWZ0CT0gNCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHJoZWExX2NrID0geworCS5uYW1lCQk9ICJyaGVhMV9jayIsCisJLnBhcmVudAkJPSAmdGNfY2suY2xrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IEFMV0FZU19FTkFCTEVELAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHJoZWEyX2NrID0geworCS5uYW1lCQk9ICJyaGVhMl9jayIsCisJLnBhcmVudAkJPSAmdGNfY2suY2xrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IEFMV0FZU19FTkFCTEVELAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGxjZF9ja18xNnh4ID0geworCS5uYW1lCQk9ICJsY2RfY2siLAorCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IENMT0NLX0lOX09NQVA3MzAgfCBSQVRFX0NLQ1RMLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAorCS5lbmFibGVfYml0CT0gRU5fTENEQ0ssCisJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfTENERElWX09GRlNFVCwKKwkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGMsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrIGxjZF9ja18xNTEwID0geworCS5jbGsgPSB7CisJCS5uYW1lCQk9ICJsY2RfY2siLAorCQkucGFyZW50CQk9ICZja19kcGxsMSwKKwkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgUkFURV9DS0NUTCB8CisJCQkJICBDTE9DS19JRExFX0NPTlRST0wsCisJCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAorCQkuZW5hYmxlX2JpdAk9IEVOX0xDRENLLAorCQkucmF0ZV9vZmZzZXQJPSBDS0NUTF9MQ0RESVZfT0ZGU0VULAorCQkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGMsCisJCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorCX0sCisJLmlkbGVjdF9zaGlmdAk9IDMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0MV8xNTEwID0geworCS5uYW1lCQk9ICJ1YXJ0MV9jayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcmVhbCBwYXJlbnQgKi8KKwkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAorCS5yYXRlCQk9IDEyMDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IEVOQUJMRV9SRUdfMzJCSVQgfAorCQkJICBBTFdBWVNfRU5BQkxFRCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKKwkuZW5hYmxlX2JpdAk9IDI5LAkvKiBDaG9vc2VzIGJldHdlZW4gMTJNSHogYW5kIDQ4TUh6ICovCisJLnNldF9yYXRlCT0gJm9tYXAxX3NldF91YXJ0X3JhdGUsCisJLnJlY2FsYwkJPSAmb21hcDFfdWFydF9yZWNhbGMsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9jbGsgdWFydDFfMTZ4eCA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAidWFydDFfY2siLAorCQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyByZWFsIHBhcmVudCAqLworCQkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAorCQkucmF0ZQkJPSA0ODAwMDAwMCwKKwkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgUkFURV9GSVhFRCB8CisJCQkJICBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKKwkJLmVuYWJsZV9iaXQJPSAyOSwKKwkJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV91YXJ0X2Z1bmN0aW9uYWwsCisJCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX3VhcnRfZnVuY3Rpb25hbCwKKwl9LAorCS5zeXNjX2FkZHIJPSAweGZmZmIwMDU0LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfY2sgPSB7CisJLm5hbWUJCT0gInVhcnQyX2NrIiwKKwkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyByZWFsIHBhcmVudCAqLworCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCisJLnJhdGUJCT0gMTIwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJICBFTkFCTEVfUkVHXzMyQklUIHwgQUxXQVlTX0VOQUJMRUQgfAorCQkJICBDTE9DS19OT19JRExFX1BBUkVOVCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilNT0RfQ09ORl9DVFJMXzAsCisJLmVuYWJsZV9iaXQJPSAzMCwJLyogQ2hvb3NlcyBiZXR3ZWVuIDEyTUh6IGFuZCA0OE1IeiAqLworCS5zZXRfcmF0ZQk9ICZvbWFwMV9zZXRfdWFydF9yYXRlLAorCS5yZWNhbGMJCT0gJm9tYXAxX3VhcnRfcmVjYWxjLAorCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0M18xNTEwID0geworCS5uYW1lCQk9ICJ1YXJ0M19jayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcmVhbCBwYXJlbnQgKi8KKwkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAorCS5yYXRlCQk9IDEyMDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IEVOQUJMRV9SRUdfMzJCSVQgfAorCQkJICBBTFdBWVNfRU5BQkxFRCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKKwkuZW5hYmxlX2JpdAk9IDMxLAkvKiBDaG9vc2VzIGJldHdlZW4gMTJNSHogYW5kIDQ4TUh6ICovCisJLnNldF9yYXRlCT0gJm9tYXAxX3NldF91YXJ0X3JhdGUsCisJLnJlY2FsYwkJPSAmb21hcDFfdWFydF9yZWNhbGMsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9jbGsgdWFydDNfMTZ4eCA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAidWFydDNfY2siLAorCQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyByZWFsIHBhcmVudCAqLworCQkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAorCQkucmF0ZQkJPSA0ODAwMDAwMCwKKwkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgUkFURV9GSVhFRCB8CisJCQkJICBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKKwkJLmVuYWJsZV9iaXQJPSAzMSwKKwkJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV91YXJ0X2Z1bmN0aW9uYWwsCisJCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX3VhcnRfZnVuY3Rpb25hbCwKKwl9LAorCS5zeXNjX2FkZHIJPSAweGZmZmI5ODU0LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNiX2Nsa28gPSB7CS8qIDYgTUh6IG91dHB1dCBvbiBXNF9VU0JfQ0xLTyAqLworCS5uYW1lCQk9ICJ1c2JfY2xrbyIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCisJLnJhdGUJCT0gNjAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8CisJCQkgIFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKVVMUERfQ0xPQ0tfQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IFVTQl9NQ0xLX0VOX0JJVCwKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNiX2hoY19jazE1MTAgPSB7CisJLm5hbWUJCT0gInVzYl9oaGNfY2siLAorCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLworCS5yYXRlCQk9IDQ4MDAwMDAwLCAvKiBBY3R1YWxseSAyIGNsb2NrcywgMTJNSHogYW5kIDQ4TUh6ICovCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwKKwkJCSAgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopTU9EX0NPTkZfQ1RSTF8wLAorCS5lbmFibGVfYml0CT0gVVNCX0hPU1RfSEhDX1VIT1NUX0VOLAorCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2JfaGhjX2NrMTZ4eCA9IHsKKwkubmFtZQkJPSAidXNiX2hoY19jayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCisJLnJhdGUJCT0gNDgwMDAwMDAsCisJLyogT1RHX1NZU0NPTl8yLk9UR19QQURFTiA9PSAwIChub3QgMTUxMC1jb21wYXRpYmxlKSAqLworCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8CisJCQkgIFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU9UR19CQVNFICsgMHgwOCAvKiBPVEdfU1lTQ09OXzIgKi8sCisJLmVuYWJsZV9iaXQJPSA4IC8qIFVIT1NUX0VOICovLAorCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2JfZGNfY2sgPSB7CisJLm5hbWUJCT0gInVzYl9kY19jayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCisJLnJhdGUJCT0gNDgwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgUkFURV9GSVhFRCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilTT0ZUX1JFUV9SRUcsCisJLmVuYWJsZV9iaXQJPSA0LAorCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2xrXzE1MTAgPSB7CisJLm5hbWUJCT0gIm1jbGsiLAorCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudC4gTWF5IGJlIGVuYWJsZWQgYnkgZXh0IGhhcmR3YXJlLiAqLworCS5yYXRlCQk9IDEyMDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IFJBVEVfRklYRUQsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jbGtfMTZ4eCA9IHsKKwkubmFtZQkJPSAibWNsayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50LiBNYXkgYmUgZW5hYmxlZCBieSBleHQgaGFyZHdhcmUuICovCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUNPTV9DTEtfRElWX0NUUkxfU0VMLAorCS5lbmFibGVfYml0CT0gQ09NX1VMUERfUExMX0NMS19SRVEsCisJLnNldF9yYXRlCT0gJm9tYXAxX3NldF9leHRfY2xrX3JhdGUsCisJLnJvdW5kX3JhdGUJPSAmb21hcDFfcm91bmRfZXh0X2Nsa19yYXRlLAorCS5pbml0CQk9ICZvbWFwMV9pbml0X2V4dF9jbGssCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGJjbGtfMTUxMCA9IHsKKwkubmFtZQkJPSAiYmNsayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50LiBNYXkgYmUgZW5hYmxlZCBieSBleHQgaGFyZHdhcmUuICovCisJLnJhdGUJCT0gMTIwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgUkFURV9GSVhFRCwKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYmNsa18xNnh4ID0geworCS5uYW1lCQk9ICJiY2xrIiwKKwkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopU1dEX0NMS19ESVZfQ1RSTF9TRUwsCisJLmVuYWJsZV9iaXQJPSBTV0RfVUxQRF9QTExfQ0xLX1JFUSwKKwkuc2V0X3JhdGUJPSAmb21hcDFfc2V0X2V4dF9jbGtfcmF0ZSwKKwkucm91bmRfcmF0ZQk9ICZvbWFwMV9yb3VuZF9leHRfY2xrX3JhdGUsCisJLmluaXQJCT0gJm9tYXAxX2luaXRfZXh0X2NsaywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jMV9jayA9IHsKKwkubmFtZQkJPSAibW1jMV9jayIsCisJLyogRnVuY3Rpb25hbCBjbG9jayBpcyBkaXJlY3QgZnJvbSBVTFBELCBpbnRlcmZhY2UgY2xvY2sgaXMgQVJNUEVSICovCisJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKKwkucmF0ZQkJPSA0ODAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8CisJCQkgIFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopTU9EX0NPTkZfQ1RSTF8wLAorCS5lbmFibGVfYml0CT0gMjMsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tYzJfY2sgPSB7CisJLm5hbWUJCT0gIm1tYzJfY2siLAorCS8qIEZ1bmN0aW9uYWwgY2xvY2sgaXMgZGlyZWN0IGZyb20gVUxQRCwgaW50ZXJmYWNlIGNsb2NrIGlzIEFSTVBFUiAqLworCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCisJLnJhdGUJCT0gNDgwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCSAgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQgfCBDTE9DS19OT19JRExFX1BBUkVOVCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilNT0RfQ09ORl9DVFJMXzAsCisJLmVuYWJsZV9iaXQJPSAyMCwKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdmlydHVhbF9ja19tcHUgPSB7CisJLm5hbWUJCT0gIm1wdSIsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJICBWSVJUVUFMX0NMT0NLIHwgQUxXQVlTX0VOQUJMRUQsCisJLnBhcmVudAkJPSAmYXJtX2NrLCAvKiBJcyBzbWFydGVyIGFsaWFzIGZvciAqLworCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJLnNldF9yYXRlCT0gJm9tYXAxX3NlbGVjdF90YWJsZV9yYXRlLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAxX3JvdW5kX3RvX3RhYmxlX3JhdGUsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICogb25jaGlwX2Nsa3NbXSA9IHsKKwkvKiBub24tVUxQRCBjbG9ja3MgKi8KKwkmY2tfcmVmLAorCSZja19kcGxsMSwKKwkvKiBDS19HRU4xIGNsb2NrcyAqLworCSZja19kcGxsMW91dC5jbGssCisJJmFybV9jaywKKwkmYXJtcGVyX2NrLmNsaywKKwkmYXJtX2dwaW9fY2ssCisJJmFybXhvcl9jay5jbGssCisJJmFybXRpbV9jay5jbGssCisJJmFybXdkdF9jay5jbGssCisJJmFybWludGhfY2sxNTEwLCAgJmFybWludGhfY2sxNnh4LAorCS8qIENLX0dFTjIgY2xvY2tzICovCisJJmRzcF9jaywKKwkmZHNwbW11X2NrLAorCSZkc3BwZXJfY2ssCisJJmRzcHhvcl9jaywKKwkmZHNwdGltX2NrLAorCS8qIENLX0dFTjMgY2xvY2tzICovCisJJnRjX2NrLmNsaywKKwkmdGlwYl9jaywKKwkmbDNfb2NwaV9jaywKKwkmdGMxX2NrLAorCSZ0YzJfY2ssCisJJmRtYV9jaywKKwkmZG1hX2xjZGZyZWVfY2ssCisJJmFwaV9jay5jbGssCisJJmxiX2NrLmNsaywKKwkmcmhlYTFfY2ssCisJJnJoZWEyX2NrLAorCSZsY2RfY2tfMTZ4eCwKKwkmbGNkX2NrXzE1MTAuY2xrLAorCS8qIFVMUEQgY2xvY2tzICovCisJJnVhcnQxXzE1MTAsCisJJnVhcnQxXzE2eHguY2xrLAorCSZ1YXJ0Ml9jaywKKwkmdWFydDNfMTUxMCwKKwkmdWFydDNfMTZ4eC5jbGssCisJJnVzYl9jbGtvLAorCSZ1c2JfaGhjX2NrMTUxMCwgJnVzYl9oaGNfY2sxNnh4LAorCSZ1c2JfZGNfY2ssCisJJm1jbGtfMTUxMCwgICZtY2xrXzE2eHgsCisJJmJjbGtfMTUxMCwgICZiY2xrXzE2eHgsCisJJm1tYzFfY2ssCisJJm1tYzJfY2ssCisJLyogVmlydHVhbCBjbG9ja3MgKi8KKwkmdmlydHVhbF9ja19tcHUsCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKaW5kZXggM2M1ZDkwMS4uZWNiYzQ3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKQEAgLTI1LDU2ICsyNSw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogCi0KLXN0YXRpYyB2b2lkIG9tYXBfbm9wX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQotewotICAgICAgICAvKiBOb3RoaW5nICovCi19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZglkZWZpbmVkKENPTkZJR19JMkNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfSTJDX09NQVBfTU9EVUxFKQotCi0jZGVmaW5lCU9NQVBfSTJDX0JBU0UJCTB4ZmZmYjM4MDAKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpMmNfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJCT0gT01BUF9JMkNfQkFTRSwKLQkJLmVuZAkJPSBPTUFQX0kyQ19CQVNFICsgMHgzZiwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JewotCQkuc3RhcnQJCT0gSU5UX0kyQywKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi0vKiBETUEgbm90IHVzZWQ7IHdvcmtzIGFyb3VuZCBlcnJhdHVtIHdyaXRpbmcgdG8gbm9uLWVtcHR5IGkyYyBmaWZvICovCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfaTJjX2RldmljZSA9IHsKLSAgICAgICAgLm5hbWUgICAgICAgICAgID0gImkyY19vbWFwIiwKLSAgICAgICAgLmlkICAgICAgICAgICAgID0gLTEsCi0gICAgICAgIC5kZXYgPSB7Ci0gICAgICAgICAgICAgICAgLnJlbGVhc2UgICAgICAgID0gb21hcF9ub3BfcmVsZWFzZSwKLSAgICAgICAgfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaTJjX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gaTJjX3Jlc291cmNlcywKLX07Ci0KLXN0YXRpYyB2b2lkIG9tYXBfaW5pdF9pMmModm9pZCkKLXsKLQkvKiBGSVhNRSBkZWZpbmUgYW5kIHVzZSBhIGJvb3QgdGFnLCBpbiBjYXNlIG9mIGJvYXJkcyB0aGF0Ci0JICogZWl0aGVyIGRvbid0IHdpcmUgdXAgSTJDLCBvciBjaGlwcyB0aGF0IG11eCBpdCBkaWZmZXJlbnRseS4uLgotCSAqIGl0IGNhbiBpbmNsdWRlIGNsb2NraW5nIGFuZCBhZGRyZXNzIGluZm8sIG1heWJlIG1vcmUuCi0JICovCi0Jb21hcF9jZmdfcmVnKEkyQ19TQ0wpOwotCW9tYXBfY2ZnX3JlZyhJMkNfU0RBKTsKLQotCSh2b2lkKSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXBfaTJjX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9pMmModm9pZCkge30KLSNlbmRpZgorZXh0ZXJuIHZvaWQgb21hcF9ub3BfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xMTAsMTM3ICs2MSw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSNpZglkZWZpbmVkKENPTkZJR19NTUNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfTU9EVUxFKQotCi0jZGVmaW5lCU9NQVBfTU1DMV9CQVNFCQkweGZmZmI3ODAwCi0jZGVmaW5lCU9NQVBfTU1DMl9CQVNFCQkweGZmZmI3YzAwCS8qIG9tYXAxNnh4IG9ubHkgKi8KLQotc3RhdGljIHN0cnVjdCBvbWFwX21tY19jb25mIG1tYzFfY29uZjsKLQotc3RhdGljIHU2NCBtbWMxX2RtYW1hc2sgPSAweGZmZmZmZmZmOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG1tYzFfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJCT0gSU9fQUREUkVTUyhPTUFQX01NQzFfQkFTRSksCi0JCS5lbmQJCT0gSU9fQUREUkVTUyhPTUFQX01NQzFfQkFTRSkgKyAweDdmLAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQl7Ci0JCS5zdGFydAkJPSBJTlRfTU1DLAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1tY19vbWFwX2RldmljZTEgPSB7Ci0JLm5hbWUJCT0gIm1tY2ktb21hcCIsCi0JLmlkCQk9IDEsCi0JLmRldiA9IHsKLQkJLnJlbGVhc2UJPSBvbWFwX25vcF9yZWxlYXNlLAotCQkuZG1hX21hc2sJPSAmbW1jMV9kbWFtYXNrLAotCQkucGxhdGZvcm1fZGF0YQk9ICZtbWMxX2NvbmYsCi0JfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobW1jMV9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IG1tYzFfcmVzb3VyY2VzLAotfTsKLQotI2lmZGVmCUNPTkZJR19BUkNIX09NQVAxNlhYCi0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfY29uZiBtbWMyX2NvbmY7Ci0KLXN0YXRpYyB1NjQgbW1jMl9kbWFtYXNrID0gMHhmZmZmZmZmZjsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtbWMyX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CQk9IElPX0FERFJFU1MoT01BUF9NTUMyX0JBU0UpLAotCQkuZW5kCQk9IElPX0FERFJFU1MoT01BUF9NTUMyX0JBU0UpICsgMHg3ZiwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JewotCQkuc3RhcnQJCT0gSU5UXzE2MTBfTU1DMiwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtbWNfb21hcF9kZXZpY2UyID0gewotCS5uYW1lCQk9ICJtbWNpLW9tYXAiLAotCS5pZAkJPSAyLAotCS5kZXYgPSB7Ci0JCS5yZWxlYXNlCT0gb21hcF9ub3BfcmVsZWFzZSwKLQkJLmRtYV9tYXNrCT0gJm1tYzJfZG1hbWFzaywKLQkJLnBsYXRmb3JtX2RhdGEJPSAmbW1jMl9jb25mLAotCX0sCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG1tYzJfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBtbWMyX3Jlc291cmNlcywKLX07Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgX19pbml0IG9tYXBfaW5pdF9tbWModm9pZCkKLXsKLQljb25zdCBzdHJ1Y3Qgb21hcF9tbWNfY29uZmlnCSptbWNfY29uZjsKLQljb25zdCBzdHJ1Y3Qgb21hcF9tbWNfY29uZgkqbW1jOwotCi0JLyogTk9URTogIGFzc3VtZXMgTU1DIHdhcyBuZXZlciAod3JvbmdseSkgZW5hYmxlZCAqLwotCW1tY19jb25mID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX01NQywgc3RydWN0IG9tYXBfbW1jX2NvbmZpZyk7Ci0JaWYgKCFtbWNfY29uZikKLQkJcmV0dXJuOwotCi0JLyogYmxvY2sgMSBpcyBhbHdheXMgYXZhaWxhYmxlIGFuZCBoYXMganVzdCBvbmUgcGlub3V0IG9wdGlvbiAqLwotCW1tYyA9ICZtbWNfY29uZi0+bW1jWzBdOwotCWlmIChtbWMtPmVuYWJsZWQpIHsKLQkJb21hcF9jZmdfcmVnKE1NQ19DTUQpOwotCQlvbWFwX2NmZ19yZWcoTU1DX0NMSyk7Ci0JCW9tYXBfY2ZnX3JlZyhNTUNfREFUMCk7Ci0JCWlmIChjcHVfaXNfb21hcDE3MTAoKSkgewotCSAgICAgICAgICAgICAgb21hcF9jZmdfcmVnKE0xNV8xNzEwX01NQ19DTEtJKTsKLQkgICAgICAgICAgICAgIG9tYXBfY2ZnX3JlZyhQMTlfMTcxMF9NTUNfQ01ERElSKTsKLQkgICAgICAgICAgICAgIG9tYXBfY2ZnX3JlZyhQMjBfMTcxMF9NTUNfREFURElSMCk7Ci0JICAgICAgICB9Ci0JCWlmIChtbWMtPndpcmU0KSB7Ci0JCQlvbWFwX2NmZ19yZWcoTU1DX0RBVDEpOwotCQkJLyogTk9URTogIERBVDIgY2FuIGJlIG9uIFcxMCAoaGVyZSkgb3IgTTE1ICovCi0JCQlpZiAoIW1tYy0+bm9tdXgpCi0JCQkJb21hcF9jZmdfcmVnKE1NQ19EQVQyKTsKLQkJCW9tYXBfY2ZnX3JlZyhNTUNfREFUMyk7Ci0JCX0KLQkJbW1jMV9jb25mID0gKm1tYzsKLQkJKHZvaWQpIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbW1jX29tYXBfZGV2aWNlMSk7Ci0JfQotCi0jaWZkZWYJQ09ORklHX0FSQ0hfT01BUDE2WFgKLQkvKiBibG9jayAyIGlzIG9uIG5ld2VyIGNoaXBzLCBhbmQgaGFzIG1hbnkgcGlub3V0IG9wdGlvbnMgKi8KLQltbWMgPSAmbW1jX2NvbmYtPm1tY1sxXTsKLQlpZiAobW1jLT5lbmFibGVkKSB7Ci0JCWlmICghbW1jLT5ub211eCkgewotCQkJb21hcF9jZmdfcmVnKFk4XzE2MTBfTU1DMl9DTUQpOwotCQkJb21hcF9jZmdfcmVnKFkxMF8xNjEwX01NQzJfQ0xLKTsKLQkJCW9tYXBfY2ZnX3JlZyhSMThfMTYxMF9NTUMyX0NMS0lOKTsKLQkJCW9tYXBfY2ZnX3JlZyhXOF8xNjEwX01NQzJfREFUMCk7Ci0JCQlpZiAobW1jLT53aXJlNCkgewotCQkJCW9tYXBfY2ZnX3JlZyhWOF8xNjEwX01NQzJfREFUMSk7Ci0JCQkJb21hcF9jZmdfcmVnKFcxNV8xNjEwX01NQzJfREFUMik7Ci0JCQkJb21hcF9jZmdfcmVnKFIxMF8xNjEwX01NQzJfREFUMyk7Ci0JCQl9Ci0KLQkJCS8qIFRoZXNlIGFyZSBuZWVkZWQgZm9yIHRoZSBsZXZlbCBzaGlmdGVyICovCi0JCQlvbWFwX2NmZ19yZWcoVjlfMTYxMF9NTUMyX0NNRERJUik7Ci0JCQlvbWFwX2NmZ19yZWcoVjVfMTYxMF9NTUMyX0RBVERJUjApOwotCQkJb21hcF9jZmdfcmVnKFcxOV8xNjEwX01NQzJfREFURElSMSk7Ci0JCX0KLQotCQkvKiBGZWVkYmFjayBjbG9jayBtdXN0IGJlIHNldCBvbiBPTUFQLTE3MTAgTU1DMiAqLwotCQlpZiAoY3B1X2lzX29tYXAxNzEwKCkpCi0JCQlvbWFwX3dyaXRlbChvbWFwX3JlYWRsKE1PRF9DT05GX0NUUkxfMSkgfCAoMSA8PCAyNCksCi0JCQkJICAgICBNT0RfQ09ORl9DVFJMXzEpOwotCQltbWMyX2NvbmYgPSAqbW1jOwotCQkodm9pZCkgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtbWNfb21hcF9kZXZpY2UyKTsKLQl9Ci0jZW5kaWYKLQlyZXR1cm47Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9tbWModm9pZCkge30KLSNlbmRpZgotCiAjaWYJZGVmaW5lZChDT05GSUdfT01BUF9SVEMpIHx8IGRlZmluZWQoQ09ORklHX09NQVBfUlRDKQogCiAjZGVmaW5lCU9NQVBfUlRDX0JBU0UJCTB4ZmZmYjQ4MDAKQEAgLTI3OSwzOCArOTksNiBAQAogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9ydGModm9pZCkge30KICNlbmRpZgogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYJZGVmaW5lZChDT05GSUdfT01BUDE2WFhfV0FUQ0hET0cpIHx8IGRlZmluZWQoQ09ORklHX09NQVAxNlhYX1dBVENIRE9HX01PRFVMRSkKLQotI2RlZmluZQlPTUFQX1dEVF9CQVNFCQkweGZmZmViMDAwCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugd2R0X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CQk9IE9NQVBfV0RUX0JBU0UsCi0JCS5lbmQJCT0gT01BUF9XRFRfQkFTRSArIDB4NGYsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF93ZHRfZGV2aWNlID0gewotCS5uYW1lCSAgID0gIm9tYXAxNjEwX3dkdCIsCi0JLmlkCSAgICAgPSAtMSwKLQkuZGV2ID0gewotCQkucmVsZWFzZQk9IG9tYXBfbm9wX3JlbGVhc2UsCi0JfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUod2R0X3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gd2R0X3Jlc291cmNlcywKLX07Ci0KLXN0YXRpYyB2b2lkIG9tYXBfaW5pdF93ZHQodm9pZCkKLXsKLQkodm9pZCkgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwX3dkdF9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfd2R0KHZvaWQpIHt9Ci0jZW5kaWYKLQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0zMzQsMTggKzEyMiwxNSBAQAogICogbWF5IGJlIGhhbmRsZWQgYnkgdGhlIGJvb3QgbG9hZGVyLCBhbmQgZHJpdmVycyBzaG91bGQgZXhwZWN0IGl0IHdpbGwKICAqIG5vcm1hbGx5IGhhdmUgYmVlbiBkb25lIGJ5IHRoZSB0aW1lIHRoZXkncmUgcHJvYmVkLgogICovCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwX2luaXRfZGV2aWNlcyh2b2lkKQorc3RhdGljIGludCBfX2luaXQgb21hcDFfaW5pdF9kZXZpY2VzKHZvaWQpCiB7CiAJLyogcGxlYXNlIGtlZXAgdGhlc2UgY2FsbHMsIGFuZCB0aGVpciBpbXBsZW1lbnRhdGlvbnMgYWJvdmUsCiAJICogaW4gYWxwaGFiZXRpY2FsIG9yZGVyIHNvIHRoZXkncmUgZWFzaWVyIHRvIHNvcnQgdGhyb3VnaC4KIAkgKi8KLQlvbWFwX2luaXRfaTJjKCk7CiAJb21hcF9pbml0X2lyZGEoKTsKLQlvbWFwX2luaXRfbW1jKCk7CiAJb21hcF9pbml0X3J0YygpOwotCW9tYXBfaW5pdF93ZHQoKTsKIAogCXJldHVybiAwOwogfQotYXJjaF9pbml0Y2FsbChvbWFwX2luaXRfZGV2aWNlcyk7CithcmNoX2luaXRjYWxsKG9tYXAxX2luaXRfZGV2aWNlcyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvaWQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaWQuYwppbmRleCA5ODZjM2I3Li41YzYzN2MwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pZC5jCkBAIC0xOCw2ICsxOCwxMyBAQAogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKKyNkZWZpbmUgT01BUF9ESUVfSURfMAkJMHhmZmZlMTgwMAorI2RlZmluZSBPTUFQX0RJRV9JRF8xCQkweGZmZmUxODA0CisjZGVmaW5lIE9NQVBfUFJPRFVDVElPTl9JRF8wCTB4ZmZmZTIwMDAKKyNkZWZpbmUgT01BUF9QUk9EVUNUSU9OX0lEXzEJMHhmZmZlMjAwNAorI2RlZmluZSBPTUFQMzJfSURfMAkJMHhmZmZlZDQwMAorI2RlZmluZSBPTUFQMzJfSURfMQkJMHhmZmZlZDQwNAorCiBzdHJ1Y3Qgb21hcF9pZCB7CiAJdTE2CWp0YWdfaWQ7CS8qIFVzZWQgdG8gZGV0ZXJtaW5lIE9NQVAgdHlwZSAqLwogCXU4CWRpZV9yZXY7CS8qIFByb2Nlc3NvciByZXZpc2lvbiAqLwpAQCAtMjcsNiArMzQsNyBAQAogCiAvKiBSZWdpc3RlciB2YWx1ZXMgdG8gZGV0ZWN0IHRoZSBPTUFQIHZlcnNpb24gKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9pZCBvbWFwX2lkc1tdIF9faW5pdGRhdGEgPSB7CisJeyAuanRhZ19pZCA9IDB4YjU3NCwgLmRpZV9yZXYgPSAweDIsIC5vbWFwX2lkID0gMHgwMzMxMDMxNSwgLnR5cGUgPSAweDAzMTAwMDAwfSwKIAl7IC5qdGFnX2lkID0gMHgzNTVmLCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzIwMDAwLCAudHlwZSA9IDB4MDczMDAxMDB9LAogCXsgLmp0YWdfaWQgPSAweGI1NWYsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMjAwMDAsIC50eXBlID0gMHgwNzMwMDMwMH0sCiAJeyAuanRhZ19pZCA9IDB4YjQ3MCwgLmRpZV9yZXYgPSAweDAsIC5vbWFwX2lkID0gMHgwMzMxMDEwMCwgLnR5cGUgPSAweDE1MTAwMDAwfSwKQEAgLTE2NCw2ICsxNzIsNyBAQAogCWNhc2UgMHgwNzoKIAkJc3lzdGVtX3JldiB8PSAweDA3OwogCQlicmVhazsKKwljYXNlIDB4MDM6CiAJY2FzZSAweDE1OgogCQlzeXN0ZW1fcmV2IHw9IDB4MTU7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pby5jCmluZGV4IDc5ZmI4NjUuLmE3YTE5ZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lvLmMKQEAgLTE1LDkgKzE1LDEwIEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KICNpbmNsdWRlIDxhc20vYXJjaC90Yy5oPgogCi1leHRlcm4gaW50IGNsa19pbml0KHZvaWQpOworZXh0ZXJuIGludCBvbWFwMV9jbGtfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXBfY2hlY2tfcmV2aXNpb24odm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwX3NyYW1faW5pdCh2b2lkKTsKIApAQCAtNTAsNyArNTEsNyBAQAogfTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwMTUxMF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKIAl7CiAJCS52aXJ0dWFsCT0gT01BUDE1MTBfRFNQX0JBU0UsCkBAIC05OCw3ICs5OSw3IEBACiAJCWlvdGFibGVfaW5pdChvbWFwNzMwX2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDczMF9pb19kZXNjKSk7CiAJfQogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgewogCQlpb3RhYmxlX2luaXQob21hcDE1MTBfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwMTUxMF9pb19kZXNjKSk7CiAJfQpAQCAtMTE5LDcgKzEyMCw3IEBACiAKIAkvKiBNdXN0IGluaXQgY2xvY2tzIGVhcmx5IHRvIGFzc3VyZSB0aGF0IHRpbWVyIGludGVycnVwdCB3b3JrcwogCSAqLwotCWNsa19pbml0KCk7CisJb21hcDFfY2xrX2luaXQoKTsKIH0KIAogLyoKQEAgLTEyNyw3ICsxMjgsOSBAQAogICovCiB2b2lkIF9faW5pdCBvbWFwX21hcF9jb21tb25faW8odm9pZCkKIHsKLQlpZiAoIWluaXRpYWxpemVkKQorCWlmICghaW5pdGlhbGl6ZWQpIHsKIAkJX29tYXBfbWFwX2lvKCk7CisJCW9tYXAxX211eF9pbml0KCk7CisJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pcnEuYwppbmRleCAxOTJjZTYwLi5lZDY1YTdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2NwdS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKQEAgLTE0NywxMSArMTQ4LDE1IEBACiB9OwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiBzdGF0aWMgc3RydWN0IG9tYXBfaXJxX2Jhbmsgb21hcDE1MTBfaXJxX2JhbmtzW10gPSB7CiAJeyAuYmFzZV9yZWcgPSBPTUFQX0lIMV9CQVNFLCAJCS50cmlnZ2VyX21hcCA9IDB4YjNmZWJmZmYgfSwKIAl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UsIAkJLnRyaWdnZXJfbWFwID0gMHhmZmJmZmZlZCB9LAogfTsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9pcnFfYmFuayBvbWFwMzEwX2lycV9iYW5rc1tdID0geworCXsgLmJhc2VfcmVnID0gT01BUF9JSDFfQkFTRSwgCQkudHJpZ2dlcl9tYXAgPSAweGIzZmFlZmMzIH0sCisJeyAuYmFzZV9yZWcgPSBPTUFQX0lIMl9CQVNFLCAJCS50cmlnZ2VyX21hcCA9IDB4NjViM2MwNjEgfSwKK307CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCkBAIC0xODEsMTEgKzE4NiwxNSBAQAogCQlpcnFfYmFua19jb3VudCA9IEFSUkFZX1NJWkUob21hcDczMF9pcnFfYmFua3MpOwogCX0KICNlbmRpZgotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKIAkJaXJxX2JhbmtzID0gb21hcDE1MTBfaXJxX2JhbmtzOwogCQlpcnFfYmFua19jb3VudCA9IEFSUkFZX1NJWkUob21hcDE1MTBfaXJxX2JhbmtzKTsKIAl9CisJaWYgKGNwdV9pc19vbWFwMzEwKCkpIHsKKwkJaXJxX2JhbmtzID0gb21hcDMxMF9pcnFfYmFua3M7CisJCWlycV9iYW5rX2NvdW50ID0gQVJSQVlfU0laRShvbWFwMzEwX2lycV9iYW5rcyk7CisJfQogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKIAlpZiAoY3B1X2lzX29tYXAxNnh4KCkpIHsKQEAgLTIyNiw5ICsyMzUsMTEgQEAKIAl9CiAKIAkvKiBVbm1hc2sgbGV2ZWwgMiBoYW5kbGVyICovCi0JaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKKworCWlmIChjcHVfaXNfb21hcDczMCgpKQogCQlvbWFwX3VubWFza19pcnEoSU5UXzczMF9JSDJfSVJRKTsKLQl9IGVsc2UgewotCQlvbWFwX3VubWFza19pcnEoSU5UX0lIMl9JUlEpOwotCX0KKwllbHNlIGlmIChjcHVfaXNfb21hcDE1MTAoKSkKKwkJb21hcF91bm1hc2tfaXJxKElOVF8xNTEwX0lIMl9JUlEpOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQorCQlvbWFwX3VubWFza19pcnEoSU5UXzE2MTBfSUgyX0lSUSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMtaDJwMi1kZWJ1Zy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9sZWRzLWgycDItZGVidWcuYwppbmRleCAzOTkwMTBjLi42NTA2NTA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMtaDJwMi1kZWJ1Zy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy1oMnAyLWRlYnVnLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbGVkcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCiAjaW5jbHVkZSA8YXNtL2FyY2gvZnBnYS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KQEAgLTYzLDE0ICs2NCwxOSBAQAogCWNhc2UgbGVkX3N0b3A6CiAJY2FzZSBsZWRfaGFsdGVkOgogCQkvKiBhbGwgbGVkcyBvZmYgZHVyaW5nIHN1c3BlbmQgb3Igc2h1dGRvd24gKi8KLQkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEdQSU9fVElNRVIsIDApOwotCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoR1BJT19JRExFLCAwKTsKKworCQlpZiAoISBtYWNoaW5lX2lzX29tYXBfcGVyc2V1czIoKSkgeworCQkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEdQSU9fVElNRVIsIDApOworCQkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEdQSU9fSURMRSwgMCk7CisJCX0KKwogCQlfX3Jhd193cml0ZXcofjAsICZmcGdhLT5sZWRzKTsKIAkJbGVkX3N0YXRlICY9IH5MRURfU1RBVEVfRU5BQkxFRDsKIAkJaWYgKGV2dCA9PSBsZWRfaGFsdGVkKSB7CiAJCQlpb3VubWFwKGZwZ2EpOwogCQkJZnBnYSA9IE5VTEw7CiAJCX0KKwogCQlnb3RvIGRvbmU7CiAKIAljYXNlIGxlZF9jbGFpbToKQEAgLTg1LDE4ICs5MSwzNyBAQAogI2lmZGVmIENPTkZJR19MRURTX1RJTUVSCiAJY2FzZSBsZWRfdGltZXI6CiAJCWxlZF9zdGF0ZSBePSBMRURfVElNRVJfT047Ci0JCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX1RJTUVSLCBsZWRfc3RhdGUgJiBMRURfVElNRVJfT04pOwotCQlnb3RvIGRvbmU7CisKKwkJaWYgKG1hY2hpbmVfaXNfb21hcF9wZXJzZXVzMigpKQorCQkJaHdfbGVkX3N0YXRlIF49IEgyUDJfREJHX0ZQR0FfUDJfTEVEX1RJTUVSOworCQllbHNlIHsKKwkJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX1RJTUVSLCBsZWRfc3RhdGUgJiBMRURfVElNRVJfT04pOworCQkJZ290byBkb25lOworCQl9CisKKwkJYnJlYWs7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19MRURTX0NQVQogCWNhc2UgbGVkX2lkbGVfc3RhcnQ6Ci0JCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX0lETEUsIDEpOwotCQlnb3RvIGRvbmU7CisJCWlmIChtYWNoaW5lX2lzX29tYXBfcGVyc2V1czIoKSkKKwkJCWh3X2xlZF9zdGF0ZSB8PSBIMlAyX0RCR19GUEdBX1AyX0xFRF9JRExFOworCQllbHNlIHsKKwkJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX0lETEUsIDEpOworCQkJZ290byBkb25lOworCQl9CisKKwkJYnJlYWs7CiAKIAljYXNlIGxlZF9pZGxlX2VuZDoKLQkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEdQSU9fSURMRSwgMCk7Ci0JCWdvdG8gZG9uZTsKKwkJaWYgKG1hY2hpbmVfaXNfb21hcF9wZXJzZXVzMigpKQorCQkJaHdfbGVkX3N0YXRlICY9IH5IMlAyX0RCR19GUEdBX1AyX0xFRF9JRExFOworCQllbHNlIHsKKwkJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX0lETEUsIDApOworCQkJZ290byBkb25lOworCQl9CisKKwkJYnJlYWs7CiAjZW5kaWYKIAogCWNhc2UgbGVkX2dyZWVuX29uOgpAQCAtMTM1LDcgKzE2MCw3IEBACiAJLyoKIAkgKiAgQWN0dWFsbHkgYnVybiB0aGUgTEVEcwogCSAqLwotCWlmIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkKKwlpZiAobGVkX3N0YXRlICYgTEVEX1NUQVRFX0VOQUJMRUQpCiAJCV9fcmF3X3dyaXRldyh+aHdfbGVkX3N0YXRlLCAmZnBnYS0+bGVkcyk7CiAKIGRvbmU6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy5jCmluZGV4IDVjNmIxYmIuLjNmOWRjYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy5jCkBAIC0zMyw3ICszMyw2IEBACiAKIAlpZiAobWFjaGluZV9pc19vbWFwX2gyKCkKIAkJCXx8IG1hY2hpbmVfaXNfb21hcF9oMygpCi0JCQl8fCBtYWNoaW5lX2lzX29tYXBfcGVyc2V1czIoKQogI2lmZGVmCUNPTkZJR19PTUFQX09TS19NSVNUUkFMCiAJCQl8fCBtYWNoaW5lX2lzX29tYXBfb3NrKCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9tdXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbXV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRiOGQ2MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbXV4LmMKQEAgLTAsMCArMSwyODkgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAxL211eC5jCisgKgorICogT01BUDEgcGluIG11bHRpcGxleGluZyBjb25maWd1cmF0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBXcml0dGVuIGJ5IFRvbnkgTGluZGdyZW4gPHRvbnkubGluZGdyZW5Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKworI2lmZGVmIENPTkZJR19PTUFQX01VWAorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDczMAorc3RydWN0IHBpbl9jb25maWcgX19pbml0ZGF0YV9vcl9tb2R1bGUgb21hcDczMF9waW5zW10gPSB7CitNVVhfQ0ZHXzczMCgiRTJfNzMwX0tCUjAiLAkxMiwgICAyMSwgICAgMCwJICAwLCAgIDIwLCAgIDEsCSAgTkEsCSAwLCAgMCkKK01VWF9DRkdfNzMwKCJKN183MzBfS0JSMSIsCTEyLCAgIDI1LCAgICAwLAkgIDAsICAgMjQsICAgMSwJICBOQSwJIDAsICAwKQorTVVYX0NGR183MzAoIkUxXzczMF9LQlIyIiwJMTIsICAgMjksICAgIDAsCSAgMCwgICAyOCwgICAxLAkgIE5BLAkgMCwgIDApCitNVVhfQ0ZHXzczMCgiRjNfNzMwX0tCUjMiLAkxMywgICAgMSwgICAgMCwJICAwLCAgIDAsICAgIDEsCSAgTkEsCSAwLCAgMCkKK01VWF9DRkdfNzMwKCJEMl83MzBfS0JSNCIsCTEzLCAgICA1LCAgICAwLAkgIDAsICAgNCwgICAgMSwJICBOQSwJIDAsICAwKQorTVVYX0NGR183MzAoIkMyXzczMF9LQkMwIiwJMTMsICAgIDksICAgIDAsCSAgMCwJOCwgICAxLAkgIE5BLAkgMCwgIDApCitNVVhfQ0ZHXzczMCgiRDNfNzMwX0tCQzEiLAkxMywgICAxMywgICAgMCwJICAwLCAgIDEyLCAgIDEsCSAgTkEsCSAwLCAgMCkKK01VWF9DRkdfNzMwKCJFNF83MzBfS0JDMiIsCTEzLCAgIDE3LCAgICAwLAkgIDAsICAgMTYsICAgMSwJICBOQSwJIDAsICAwKQorTVVYX0NGR183MzAoIkY0XzczMF9LQkMzIiwJMTMsICAgMjEsICAgIDAsCSAgMCwgICAyMCwgICAxLAkgIE5BLAkgMCwgIDApCitNVVhfQ0ZHXzczMCgiRTNfNzMwX0tCQzQiLAkxMywgICAyNSwgICAgMCwJICAwLCAgIDI0LCAgIDEsCSAgTkEsCSAwLCAgMCkKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCitzdHJ1Y3QgcGluX2NvbmZpZyBfX2luaXRkYXRhX29yX21vZHVsZSBvbWFwMXh4eF9waW5zW10gPSB7CisvKgorICoJIGRlc2NyaXB0aW9uCQltdXggIG1vZGUgICBtdXgJIHB1bGwgcHVsbCAgcHVsbCAgcHVfcGQJIHB1ICBkYmcKKyAqCQkJCXJlZyAgb2Zmc2V0IG1vZGUgcmVnICBiaXQgICBlbmEJICByZWcKKyAqLworTVVYX0NGRygiVUFSVDFfVFgiLAkJIDksICAgMjEsICAgIDEsCSAgMiwgICAzLCAgIDAsCSBOQSwJIDAsICAwKQorTVVYX0NGRygiVUFSVDFfUlRTIiwJCSA5LCAgIDEyLCAgICAxLAkgIDIsICAgMCwgICAwLAkgTkEsCSAwLCAgMCkKKworLyogVUFSVDIgKENPTV9VQVJUX0dBVElORyksIGNvbmZsaWN0cyB3aXRoIFVTQjIgKi8KK01VWF9DRkcoIlVBUlQyX1RYIiwJCSBDLCAgIDI3LCAgICAxLAkgIDMsICAgMywgICAwLAkgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlVBUlQyX1JYIiwJCSBDLCAgIDE4LCAgICAwLAkgIDMsICAgMSwgICAxLAkgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlVBUlQyX0NUUyIsCQkgQywgICAyMSwgICAgMCwJICAzLCAgIDEsICAgMSwJIE5BLAkgMCwgIDApCitNVVhfQ0ZHKCJVQVJUMl9SVFMiLAkJIEMsICAgMjQsICAgIDEsCSAgMywgICAyLCAgIDAsCSBOQSwJIDAsICAwKQorCisvKiBVQVJUMyAoR0lHQV9VQVJUX0dBVElORykgKi8KK01VWF9DRkcoIlVBUlQzX1RYIiwJCSA2LCAgICAwLCAgICAxLAkgIDAsICAzMCwgICAwLAkgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlVBUlQzX1JYIiwJCSA2LCAgICAzLCAgICAwLAkgIDAsICAzMSwgICAxLAkgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlVBUlQzX0NUUyIsCQkgNSwgICAxMiwgICAgMiwJICAwLCAgMjQsICAgMCwJIE5BLAkgMCwgIDApCitNVVhfQ0ZHKCJVQVJUM19SVFMiLAkJIDUsICAgMTUsICAgIDIsCSAgMCwgIDI1LCAgIDAsCSBOQSwJIDAsICAwKQorTVVYX0NGRygiVUFSVDNfQ0xLUkVRIiwJCSA5LCAgIDI3LCAgICAwLAkgIDIsICAgNSwgICAwLAkgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlVBUlQzX0JDTEsiLAkJIEEsICAgIDAsICAgIDAsCSAgMiwgICA2LCAgIDAsCSBOQSwJIDAsICAwKQorTVVYX0NGRygiWTE1XzE2MTBfVUFSVDNfUlRTIiwJIEEsICAgIDAsICAgIDEsCSAgMiwgICA2LCAgIDAsCSBOQSwJIDAsICAwKQorCisvKiBQV1QgJiBQV0wsIGNvbmZsaWN0cyB3aXRoIFVBUlQzICovCitNVVhfQ0ZHKCJQV1QiLAkJIAkgNiwgICAgMCwgICAgMiwJICAwLCAgMzAsICAgMCwJIE5BLAkgMCwgIDApCitNVVhfQ0ZHKCJQV0wiLAkJIAkgNiwgICAgMywgICAgMSwJICAwLCAgMzEsICAgMSwJIE5BLAkgMCwgIDApCisKKy8qIFVTQiBpbnRlcm5hbCBtYXN0ZXIgZ2VuZXJpYyAqLworTVVYX0NGRygiUjE4X1VTQl9WQlVTIiwJCSA3LCAgICA5LCAgICAyLAkgIDEsICAxMSwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlIxOF8xNTEwX1VTQl9HUElPMCIsCSA3LCAgICA5LCAgICAwLAkgIDEsICAxMSwgICAxLAkgTkEsCSAwLCAgMSkKKy8qIHdvcmtzIGFyb3VuZCBlcnJhdHVtOiAgVzRfVVNCX1BVRU4gYW5kIFc0X1VTQl9QVURJUyBhcmUgc3dpdGNoZWQhICovCitNVVhfQ0ZHKCJXNF9VU0JfUFVFTiIsCQkgRCwgICAgMywgICAgMywJICAzLCAgIDUsICAgMSwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJXNF9VU0JfQ0xLTyIsCQkgRCwgICAgMywgICAgMSwJICAzLCAgIDUsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJXNF9VU0JfSElHSFoiLAkJIEQsICAgIDMsICAgIDQsCSAgMywgICA1LCAgIDAsCSAgMywJIDAsICAxKQorTVVYX0NGRygiVzRfR1BJTzU4IiwJCSBELCAgICAzLCAgICA3LAkgIDMsICAgNSwgICAwLAkgIDMsCSAwLCAgMSkKKworLyogVVNCMSBtYXN0ZXIgKi8KK01VWF9DRkcoIlVTQjFfU1VTUCIsCQkgOCwgICAyNywgICAgMiwJICAxLCAgMjcsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJVU0IxX1NFMCIsCQkgOSwgICAgMCwgICAgMiwJICAxLCAgMjgsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJXMTNfMTYxMF9VU0IxX1NFMCIsCSA5LCAgICAwLCAgICA0LAkgIDEsICAyOCwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlVTQjFfVFhFTiIsCQkgOSwgICAgMywgICAgMiwJICAxLCAgMjksICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJVU0IxX1RYRCIsCQkgOSwgICAyNCwgICAgMSwJICAyLCAgIDQsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJVU0IxX1ZQIiwJCSBBLCAgICAzLCAgICAxLAkgIDIsICAgNywgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlVTQjFfVk0iLAkJIEEsICAgIDYsICAgIDEsCSAgMiwgICA4LCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMV9SQ1YiLAkJIEEsICAgIDksICAgIDEsCSAgMiwgICA5LCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMV9TUEVFRCIsCQkgQSwgICAxMiwgICAgMiwJICAyLCAgMTAsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJSMTNfMTYxMF9VU0IxX1NQRUVEIiwJIEEsICAgMTIsICAgIDUsCSAgMiwgIDEwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiUjEzXzE3MTBfVVNCMV9TRU8iLAkgQSwgICAxMiwgICAgNSwgICAyLCAgMTAsICAgMCwgICBOQSwgICAgIDAsICAxKQorCisvKiBVU0IyIG1hc3RlciAqLworTVVYX0NGRygiVVNCMl9TVVNQIiwJCSBCLCAgICAzLCAgICAxLAkgIDIsICAxNywgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlVTQjJfVlAiLAkJIEIsICAgIDYsICAgIDEsCSAgMiwgIDE4LCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMl9UWEVOIiwJCSBCLCAgICA5LCAgICAxLAkgIDIsICAxOSwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlVTQjJfVk0iLAkJIEMsICAgMTgsICAgIDEsCSAgMywgICAwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMl9SQ1YiLAkJIEMsICAgMjEsICAgIDEsCSAgMywgICAxLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMl9TRTAiLAkJIEMsICAgMjQsICAgIDIsCSAgMywgICAyLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMl9UWEQiLAkJIEMsICAgMjcsICAgIDIsCSAgMywgICAzLCAgIDAsCSBOQSwJIDAsICAxKQorCisvKiBPTUFQLTE1MTAgR1BJTyAqLworTVVYX0NGRygiUjE4XzE1MTBfR1BJTzAiLAkgNywgICAgOSwgICAgMCwgICAxLCAgMTEsICAgMSwgICAgMCwgICAgIDAsICAxKQorTVVYX0NGRygiUjE5XzE1MTBfR1BJTzEiLAkgNywgICAgNiwgICAgMCwgICAxLCAgMTAsICAgMSwgICAgMCwgICAgIDAsICAxKQorTVVYX0NGRygiTTE0XzE1MTBfR1BJTzIiLAkgNywgICAgMywgICAgMCwgICAxLCAgIDksICAgMSwgICAgMCwgICAgIDAsICAxKQorCisvKiBPTUFQMTYxMCBHUElPICovCitNVVhfQ0ZHKCJQMThfMTYxMF9HUElPMyIsCSA3LCAgICAwLCAgICAwLCAgIDEsICAgOCwgICAwLCAgIE5BLCAgICAgMCwgIDEpCitNVVhfQ0ZHKCJZMTVfMTYxMF9HUElPMTciLAkgQSwgICAgMCwgICAgNywgICAyLCAgIDYsICAgMCwgICBOQSwgICAgIDAsICAxKQorCisvKiBPTUFQLTE3MTAgR1BJTyAqLworTVVYX0NGRygiUjE4XzE3MTBfR1BJTzAiLCAgICAgICAgNywgICAgOSwgICAgMCwgICAxLCAgMTEsICAgMSwgICAgMSwgICAgIDEsICAxKQorTVVYX0NGRygiVjJfMTcxMF9HUElPMTAiLCAgICAgICAgRiwgICAyNywgICAgMSwgICA0LCAgIDMsICAgMSwgICAgNCwgICAgIDEsICAxKQorTVVYX0NGRygiTjIxXzE3MTBfR1BJTzE0IiwgICAgICAgNiwgICAgOSwgICAgMCwgICAxLCAgIDEsICAgMSwgICAgMSwgICAgIDEsICAxKQorTVVYX0NGRygiVzE1XzE3MTBfR1BJTzQwIiwgICAgICAgOSwgICAyNywgICAgNywgICAyLCAgIDUsICAgMSwgICAgMiwgICAgIDEsICAxKQorCisvKiBNUFVJTyAqLworTVVYX0NGRygiTVBVSU8yIiwJCSA3LCAgIDE4LCAgICAwLAkgIDEsICAxNCwgICAxLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIk4xNV8xNjEwX01QVUlPMiIsCSA3LCAgIDE4LCAgICAwLAkgIDEsICAxNCwgICAxLAkgIDEsCSAwLCAgMSkKK01VWF9DRkcoIk1QVUlPNCIsCQkgNywgICAxNSwgICAgMCwJICAxLCAgMTMsICAgMSwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJNUFVJTzUiLAkJIDcsICAgMTIsICAgIDAsCSAgMSwgIDEyLCAgIDEsCSBOQSwJIDAsICAxKQorCitNVVhfQ0ZHKCJUMjBfMTYxMF9NUFVJTzUiLAkgNywgICAxMiwgICAgMCwJICAxLCAgMTIsICAgMCwJICAzLAkgMCwgIDEpCitNVVhfQ0ZHKCJXMTFfMTYxMF9NUFVJTzYiLAkxMCwgICAxNSwgICAgMiwJICAzLCAgIDgsICAgMCwJICAzLAkgMCwgIDEpCitNVVhfQ0ZHKCJWMTBfMTYxMF9NUFVJTzciLAkgQSwgICAyNCwgICAgMiwJICAyLCAgMTQsICAgMCwJICAyLAkgMCwgIDEpCitNVVhfQ0ZHKCJXMTFfMTYxMF9NUFVJTzkiLAkxMCwgICAxNSwgICAgMSwJICAzLCAgIDgsICAgMCwJICAzLAkgMCwgIDEpCitNVVhfQ0ZHKCJWMTBfMTYxMF9NUFVJTzEwIiwJIEEsICAgMjQsICAgIDEsCSAgMiwgIDE0LCAgIDAsCSAgMiwJIDAsICAxKQorTVVYX0NGRygiVzEwXzE2MTBfTVBVSU8xMSIsCSBBLCAgIDE4LCAgICAyLAkgIDIsICAxMSwgICAwLAkgIDIsCSAwLCAgMSkKK01VWF9DRkcoIkUyMF8xNjEwX01QVUlPMTMiLAkgMywgICAyMSwgICAgMSwJICAwLCAgIDcsICAgMCwJICAwLAkgMCwgIDEpCitNVVhfQ0ZHKCJVMjBfMTYxMF9NUFVJTzE0IiwJIDksICAgIDYsICAgIDYsCSAgMCwgIDMwLCAgIDAsCSAgMCwJIDAsICAxKQorTVVYX0NGRygiRTE5XzE2MTBfTVBVSU8xNSIsCSAzLCAgIDE4LCAgICAxLAkgIDAsICAgNiwgICAwLAkgIDAsCSAwLCAgMSkKKworLyogTUNCU1AyICovCitNVVhfQ0ZHKCJNQ0JTUDJfQ0xLUiIsCQkgQywgICAgNiwgICAgMCwJICAyLCAgMjcsICAgMSwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJNQ0JTUDJfQ0xLWCIsCQkgQywgICAgOSwgICAgMCwJICAyLCAgMjksICAgMSwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJNQ0JTUDJfRFIiLAkJIEMsICAgIDAsICAgIDAsCSAgMiwgIDI2LCAgIDEsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiTUNCU1AyX0RYIiwJCSBDLCAgIDE1LCAgICAwLAkgIDIsICAzMSwgICAxLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIk1DQlNQMl9GU1IiLAkJIEMsICAgMTIsICAgIDAsCSAgMiwgIDMwLCAgIDEsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiTUNCU1AyX0ZTWCIsCQkgQywgICAgMywgICAgMCwJICAyLCAgMjcsICAgMSwJIE5BLAkgMCwgIDEpCisKKy8qIE1DQlNQMyBOT1RFOiBNb2RlIG11c3QgMSBmb3IgY2xvY2sgKi8KK01VWF9DRkcoIk1DQlNQM19DTEtYIiwJCSA5LCAgICAzLCAgICAxLAkgIDEsICAyOSwgICAwLAkgTkEsCSAwLCAgMSkKKworLyogTWlzYyBiYWxsb3V0cyAqLworTVVYX0NGRygiQkFMTE9VVF9WOF9BUk1JTzMiLAkgQiwgICAxOCwgICAgMCwJICAyLCAgMjUsICAgMSwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJOMjBfSERRIiwJICAgICAgIDYsICAgMTgsICAgIDEsICAgMSwgICA0LCAgIDAsICAgIDEsICAgICA0LCAgMCkKKworLyogT01BUC0xNjEwIE1NQzIgKi8KK01VWF9DRkcoIlc4XzE2MTBfTU1DMl9EQVQwIiwJIEIsICAgMjEsICAgIDYsCSAgMiwgIDIzLCAgIDEsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiVjhfMTYxMF9NTUMyX0RBVDEiLAkgQiwgICAyNywgICAgNiwJICAyLCAgMjUsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJXMTVfMTYxMF9NTUMyX0RBVDIiLAkgOSwgICAxMiwgICAgNiwJICAyLCAgIDUsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJSMTBfMTYxMF9NTUMyX0RBVDMiLAkgQiwgICAxOCwgICAgNiwJICAyLCAgMjIsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJZMTBfMTYxMF9NTUMyX0NMSyIsCSBCLCAgICAzLCAgICA2LAkgIDIsICAxNywgICAwLAkgIDIsCSAwLCAgMSkKK01VWF9DRkcoIlk4XzE2MTBfTU1DMl9DTUQiLAkgQiwgICAyNCwgICAgNiwJICAyLCAgMjQsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJWOV8xNjEwX01NQzJfQ01ERElSIiwJIEIsICAgMTIsICAgIDYsCSAgMiwgIDIwLCAgIDAsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiVjVfMTYxMF9NTUMyX0RBVERJUjAiLAkgQiwgICAxNSwgICAgNiwJICAyLCAgMjEsICAgMCwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJXMTlfMTYxMF9NTUMyX0RBVERJUjEiLCA4LCAgIDE1LCAgICA2LAkgIDEsICAyMywgICAwLAkgIDEsCSAxLCAgMSkKK01VWF9DRkcoIlIxOF8xNjEwX01NQzJfQ0xLSU4iLAkgNywgICAgOSwgICAgNiwJICAxLCAgMTEsICAgMCwJICAxLAkxMSwgIDEpCisKKy8qIE9NQVAtMTYxMCBFeHRlcm5hbCBUcmFjZSBJbnRlcmZhY2UgKi8KK01VWF9DRkcoIk0xOV8xNjEwX0VUTV9QU1RBVDAiLAkgNSwgICAyNywgICAgMSwJICAwLCAgMjksICAgMCwJICAwLAkgMCwgIDEpCitNVVhfQ0ZHKCJMMTVfMTYxMF9FVE1fUFNUQVQxIiwJIDUsICAgMjQsICAgIDEsCSAgMCwgIDI4LCAgIDAsCSAgMCwJIDAsICAxKQorTVVYX0NGRygiTDE4XzE2MTBfRVRNX1BTVEFUMiIsCSA1LCAgIDIxLCAgICAxLAkgIDAsICAyNywgICAwLAkgIDAsCSAwLCAgMSkKK01VWF9DRkcoIkwxOV8xNjEwX0VUTV9EMCIsCSA1LCAgIDE4LCAgICAxLAkgIDAsICAyNiwgICAwLAkgIDAsCSAwLCAgMSkKK01VWF9DRkcoIkoxOV8xNjEwX0VUTV9ENiIsCSA1LCAgICAwLCAgICAxLAkgIDAsICAyMCwgICAwLAkgIDAsCSAwLCAgMSkKK01VWF9DRkcoIkoxOF8xNjEwX0VUTV9ENyIsCSA1LCAgIDI3LCAgICAxLAkgIDAsICAxOSwgICAwLAkgIDAsCSAwLCAgMSkKKworLyogT01BUDE2WFggR1BJTyAqLworTVVYX0NGRygiUDIwXzE2MTBfR1BJTzQiLAkgNiwgICAyNywgICAgMCwJICAxLCAgIDcsICAgMCwJICAxLAkgMSwgIDEpCitNVVhfQ0ZHKCJWOV8xNjEwX0dQSU83IiwJIEIsICAgMTIsICAgIDEsCSAgMiwgIDIwLCAgIDAsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiVzhfMTYxMF9HUElPOSIsCSBCLCAgIDIxLCAgICAwLAkgIDIsICAyMywgICAwLAkgIDIsCSAxLCAgMSkKK01VWF9DRkcoIk4yMF8xNjEwX0dQSU8xMSIsICAgICAgIDYsICAgMTgsICAgIDAsICAgMSwgICA0LCAgIDAsICAgIDEsICAgICAxLCAgMSkKK01VWF9DRkcoIk4xOV8xNjEwX0dQSU8xMyIsCSA2LCAgIDEyLCAgICAwLAkgIDEsICAgMiwgICAwLAkgIDEsCSAxLCAgMSkKK01VWF9DRkcoIlAxMF8xNjEwX0dQSU8yMiIsCSBDLCAgICAwLCAgICA3LAkgIDIsICAyNiwgICAwLAkgIDIsCSAxLCAgMSkKK01VWF9DRkcoIlY1XzE2MTBfR1BJTzI0IiwJIEIsICAgMTUsICAgIDcsCSAgMiwgIDIxLCAgIDAsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiQUEyMF8xNjEwX0dQSU9fNDEiLAkgOSwgICAgOSwgICAgNywJICAxLCAgMzEsICAgMCwJICAxLAkgMSwgIDEpCitNVVhfQ0ZHKCJXMTlfMTYxMF9HUElPNDgiLAkgOCwgICAxNSwgICAgNywgICAxLCAgMjMsICAgMSwgICAgMSwgICAgIDAsICAxKQorTVVYX0NGRygiTTdfMTYxMF9HUElPNjIiLAkxMCwgICAgMCwgICAgMCwgICA0LCAgMjQsICAgMCwgICAgNCwgICAgIDAsICAxKQorTVVYX0NGRygiVjE0XzE2WFhfR1BJTzM3IiwJIDksICAgMTgsICAgIDcsCSAgMiwgICAyLCAgIDAsCSAgMiwJIDIsICAwKQorTVVYX0NGRygiUjlfMTZYWF9HUElPMTgiLAkgQywgICAxOCwgICAgNywgICAzLCAgIDAsICAgMCwgICAgMywgICAgIDAsICAwKQorTVVYX0NGRygiTDE0XzE2WFhfR1BJTzQ5IiwJIDYsICAgIDMsICAgIDcsICAgMCwgIDMxLCAgIDAsICAgIDAsICAgIDMxLCAgMCkKKworLyogT01BUC0xNjEwIHVXaXJlICovCitNVVhfQ0ZHKCJWMTlfMTYxMF9VV0lSRV9TQ0xLIiwJIDgsICAgIDYsICAgIDAsCSAgMSwgIDIwLCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiVTE4XzE2MTBfVVdJUkVfU0RJIiwJIDgsICAgIDAsICAgIDAsCSAgMSwgIDE4LCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiVzIxXzE2MTBfVVdJUkVfU0RPIiwJIDgsICAgIDMsICAgIDAsCSAgMSwgIDE5LCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiTjE0XzE2MTBfVVdJUkVfQ1MwIiwJIDgsICAgIDksICAgIDEsCSAgMSwgIDIxLCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiUDE1XzE2MTBfVVdJUkVfQ1MzIiwJIDgsICAgMTIsICAgIDEsCSAgMSwgIDIyLCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiTjE1XzE2MTBfVVdJUkVfQ1MxIiwJIDcsICAgMTgsICAgIDIsCSAgMSwgIDE0LCAgIDAsCSBOQSwJIDAsICAxKQorCisvKiBPTUFQLTE2MTAgRmxhc2ggKi8KK01VWF9DRkcoIkwzXzE2MTBfRkxBU0hfQ1MyQl9PRSIsMTAsICAgIDYsICAgIDEsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiTThfMTYxMF9GTEFTSF9DUzJCX1dFIiwxMCwgICAgMywgICAgMSwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCisKKy8qIEZpcnN0IE1NQyBpbnRlcmZhY2UsIHNhbWUgb24gMTUxMCwgMTYxMCBhbmQgMTcxMCAqLworTVVYX0NGRygiTU1DX0NNRCIsCQkgQSwgICAyNywgICAgMCwJICAyLCAgMTUsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJNTUNfREFUMSIsCQkgQSwgICAyNCwgICAgMCwJICAyLCAgMTQsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJNTUNfREFUMiIsCQkgQSwgICAxOCwgICAgMCwJICAyLCAgMTIsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJNTUNfREFUMCIsCQkgQiwgICAgMCwgICAgMCwJICAyLCAgMTYsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJNTUNfQ0xLIiwJCSBBLCAgIDIxLCAgICAwLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIk1NQ19EQVQzIiwJCTEwLCAgIDE1LCAgICAwLAkgIDMsICAgOCwgICAxLAkgIDMsCSAxLCAgMSkKK01VWF9DRkcoIk0xNV8xNzEwX01NQ19DTEtJIiwJIDYsICAgMjEsICAgIDIsICAgMCwgICAwLCAgIDAsICAgTkEsICAgICAwLCAgMSkKK01VWF9DRkcoIlAxOV8xNzEwX01NQ19DTURESVIiLAkgNiwgICAyNCwgICAgNiwgICAwLCAgIDAsICAgMCwgICBOQSwgICAgIDAsICAxKQorTVVYX0NGRygiUDIwXzE3MTBfTU1DX0RBVERJUjAiLAkgNiwgICAyNywgICAgNSwgICAwLCAgIDAsICAgMCwgICBOQSwgICAgIDAsICAxKQorCisvKiBPTUFQLTE2MTAgVVNCMCBhbHRlcm5hdGUgY29uZmlndXJhdGlvbiAqLworTVVYX0NGRygiVzlfVVNCMF9UWEVOIiwJCSBCLCAgIDksICAgICA1LAkgIDIsICAxOSwgICAwLAkgIDIsCSAwLCAgMSkKK01VWF9DRkcoIkFBOV9VU0IwX1ZQIiwJCSBCLCAgIDYsICAgICA1LAkgIDIsICAxOCwgICAwLAkgIDIsCSAwLCAgMSkKK01VWF9DRkcoIlk1X1VTQjBfUkNWIiwJCSBDLCAgMjEsICAgICA1LAkgIDMsICAgMSwgICAwLAkgIDEsCSAwLCAgMSkKK01VWF9DRkcoIlI5X1VTQjBfVk0iLAkJIEMsICAxOCwgICAgIDUsCSAgMywgICAwLCAgIDAsCSAgMywJIDAsICAxKQorTVVYX0NGRygiVjZfVVNCMF9UWEQiLAkJIEMsICAyNywgICAgIDUsCSAgMywgICAzLCAgIDAsCSAgMywJIDAsICAxKQorTVVYX0NGRygiVzVfVVNCMF9TRTAiLAkJIEMsICAyNCwgICAgIDUsCSAgMywgICAyLCAgIDAsCSAgMywJIDAsICAxKQorTVVYX0NGRygiVjlfVVNCMF9TUEVFRCIsCSBCLCAgMTIsICAgICA1LAkgIDIsICAyMCwgICAwLAkgIDIsCSAwLCAgMSkKK01VWF9DRkcoIlkxMF9VU0IwX1NVU1AiLAkgQiwgICAzLCAgICAgNSwJICAyLCAgMTcsICAgMCwJICAyLAkgMCwgIDEpCisKKy8qIFVTQjIgaW50ZXJmYWNlICovCitNVVhfQ0ZHKCJXOV9VU0IyX1RYRU4iLAkJIEIsICAgOSwgICAgIDEsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiQUE5X1VTQjJfVlAiLAkJIEIsICAgNiwgICAgIDEsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiWTVfVVNCMl9SQ1YiLAkJIEMsICAyMSwgICAgIDEsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiUjlfVVNCMl9WTSIsCQkgQywgIDE4LCAgICAgMSwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJWNl9VU0IyX1RYRCIsCQkgQywgIDI3LCAgICAgMiwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJXNV9VU0IyX1NFMCIsCQkgQywgIDI0LCAgICAgMiwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCisKKy8qIDE2WFggVUFSVCAqLworTVVYX0NGRygiUjEzXzE2MTBfVUFSVDFfVFgiLAkgQSwgIDEyLCAgICAgNiwJICAyLCAgMTAsICAgMCwJICAyLAkxMCwgIDEpCitNVVhfQ0ZHKCJWMTRfMTZYWF9VQVJUMV9SWCIsCSA5LCAgMTgsICAgICAwLAkgIDIsICAgMiwgICAwLAkgIDIsCSAyLCAgMSkKK01VWF9DRkcoIlIxNF8xNjEwX1VBUlQxX0NUUyIsCSA5LCAgMTUsICAgICAwLAkgIDIsICAgMSwgICAwLAkgIDIsCSAxLCAgMSkKK01VWF9DRkcoIkFBMTVfMTYxMF9VQVJUMV9SVFMiLAkgOSwgIDEyLCAgICAgMSwJICAyLCAgIDAsICAgMCwJICAyLAkgMCwgIDEpCitNVVhfQ0ZHKCJSOV8xNlhYX1VBUlQyX1JYIiwJIEMsICAxOCwgICAgIDAsICAgMywgICAwLCAgIDAsICAgIDMsICAgICAwLCAgMSkKK01VWF9DRkcoIkwxNF8xNlhYX1VBUlQzX1JYIiwJIDYsICAgMywgICAgIDAsICAgMCwgIDMxLCAgIDAsICAgIDAsICAgIDMxLCAgMSkKKworLyogSTJDIGludGVyZmFjZSAqLworTVVYX0NGRygiSTJDX1NDTCIsCQkgNywgIDI0LCAgICAgMCwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDApCitNVVhfQ0ZHKCJJMkNfU0RBIiwJCSA3LCAgMjcsICAgICAwLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMCkKKworLyogS2V5cGFkICovCitNVVhfQ0ZHKCJGMThfMTYxMF9LQkMwIiwJIDMsICAxNSwgICAgIDAsCSAgMCwgICA1LCAgIDEsCSAgMCwJIDAsICAwKQorTVVYX0NGRygiRDIwXzE2MTBfS0JDMSIsCSAzLCAgMTIsICAgICAwLAkgIDAsICAgNCwgICAxLAkgIDAsCSAwLCAgMCkKK01VWF9DRkcoIkQxOV8xNjEwX0tCQzIiLAkgMywgICA5LCAgICAgMCwJICAwLCAgIDMsICAgMSwJICAwLAkgMCwgIDApCitNVVhfQ0ZHKCJFMThfMTYxMF9LQkMzIiwJIDMsICAgNiwgICAgIDAsCSAgMCwgICAyLCAgIDEsCSAgMCwJIDAsICAwKQorTVVYX0NGRygiQzIxXzE2MTBfS0JDNCIsCSAzLCAgIDMsICAgICAwLAkgIDAsICAgMSwgICAxLAkgIDAsCSAwLCAgMCkKK01VWF9DRkcoIkcxOF8xNjEwX0tCUjAiLAkgNCwgICAwLCAgICAgMCwJICAwLCAgIDEwLCAgMSwJICAwLAkgMSwgIDApCitNVVhfQ0ZHKCJGMTlfMTYxMF9LQlIxIiwJIDMsICAgMjcsICAgIDAsCSAgMCwgICA5LCAgIDEsCSAgMCwJIDEsICAwKQorTVVYX0NGRygiSDE0XzE2MTBfS0JSMiIsCSAzLCAgIDI0LCAgICAwLAkgIDAsICAgOCwgICAxLAkgIDAsCSAxLCAgMCkKK01VWF9DRkcoIkUyMF8xNjEwX0tCUjMiLAkgMywgICAyMSwgICAgMCwJICAwLCAgIDcsICAgMSwJICAwLAkgMSwgIDApCitNVVhfQ0ZHKCJFMTlfMTYxMF9LQlI0IiwJIDMsICAgMTgsICAgIDAsCSAgMCwgICA2LCAgIDEsCSAgMCwJIDEsICAwKQorTVVYX0NGRygiTjE5XzE2MTBfS0JSNSIsCSA2LCAgMTIsICAgICAxLAkgIDEsICAgMiwgICAxLAkgIDEsCSAxLCAgMCkKKworLyogUG93ZXIgbWFuYWdlbWVudCAqLworTVVYX0NGRygiVDIwXzE2MTBfTE9XX1BXUiIsCSA3LCAgIDEyLCAgICAxLAkgIE5BLCAgIDAsICAgMCwgICBOQSwJIDAsICAwKQorCisvKiBNQ0xLIFNldHRpbmdzICovCitNVVhfQ0ZHKCJWNV8xNzEwX01DTEtfT04iLAkgQiwgICAxNSwgICAgMCwJICBOQSwgICAwLCAgIDAsICAgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlY1XzE3MTBfTUNMS19PRkYiLAkgQiwgICAxNSwgICAgNiwJICBOQSwgICAwLCAgIDAsICAgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlIxMF8xNjEwX01DTEtfT04iLAkgQiwgICAxOCwgICAgMCwJICBOQSwgIDIyLCAgIDAsCSAgTkEsCSAxLCAgMCkKK01VWF9DRkcoIlIxMF8xNjEwX01DTEtfT0ZGIiwJIEIsICAgMTgsICAgIDYsCSAgMiwgICAyMiwgICAxLAkgIDIsCSAxLCAgMSkKKworLyogQ29tcGFjdEZsYXNoIGNvbnRyb2xsZXIsIGNvbmZsaWN0cyB3aXRoIE1NQzEgKi8KK01VWF9DRkcoIlAxMV8xNjEwX0NGX0NEMiIsCSBBLCAgIDI3LCAgICAzLAkgIDIsICAgMTUsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJSMTFfMTYxMF9DRl9JT0lTMTYiLAkgQiwgICAgMCwgICAgMywJICAyLCAgIDE2LCAgIDEsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiVjEwXzE2MTBfQ0ZfSVJFUSIsCSBBLCAgIDI0LCAgICAzLAkgIDIsICAgMTQsICAgMCwJICAyLAkgMCwgIDEpCitNVVhfQ0ZHKCJXMTBfMTYxMF9DRl9SRVNFVCIsCSBBLCAgIDE4LCAgICAzLAkgIDIsICAgMTIsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJXMTFfMTYxMF9DRl9DRDEiLAkxMCwgICAxNSwgICAgMywJICAzLCAgICA4LCAgIDEsCSAgMywJIDEsICAxKQorfTsKKyNlbmRpZgkvKiBDT05GSUdfQVJDSF9PTUFQMTVYWCB8fCBDT05GSUdfQVJDSF9PTUFQMTZYWCAqLworCitpbnQgX19pbml0IG9tYXAxX211eF9pbml0KHZvaWQpCit7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNzMwCisJb21hcF9tdXhfcmVnaXN0ZXIob21hcDczMF9waW5zLCBBUlJBWV9TSVpFKG9tYXA3MzBfcGlucykpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQorCW9tYXBfbXV4X3JlZ2lzdGVyKG9tYXAxeHh4X3BpbnMsIEFSUkFZX1NJWkUob21hcDF4eHhfcGlucykpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYwppbmRleCA0MGM0ZjdjNC4uNjgxMGNmYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCkBAIC0xMDksOSArMTA5LDEwIEBACiAgKiBCeSBkZWZhdWx0IFVBUlQyIGRvZXMgbm90IHdvcmsgb24gSW5ub3ZhdG9yLTE1MTAgaWYgeW91IGhhdmUKICAqIFVTQiBPSENJIGVuYWJsZWQuIFRvIHVzZSBVQVJUMiwgeW91IG11c3QgZGlzYWJsZSBVU0IyIGZpcnN0LgogICovCi12b2lkIF9faW5pdCBvbWFwX3NlcmlhbF9pbml0KGludCBwb3J0c1tPTUFQX01BWF9OUl9QT1JUU10pCit2b2lkIF9faW5pdCBvbWFwX3NlcmlhbF9pbml0KHZvaWQpCiB7CiAJaW50IGk7CisJY29uc3Qgc3RydWN0IG9tYXBfdWFydF9jb25maWcgKmluZm87CiAKIAlpZiAoY3B1X2lzX29tYXA3MzAoKSkgewogCQlzZXJpYWxfcGxhdGZvcm1fZGF0YVswXS5yZWdzaGlmdCA9IDA7CkBAIC0xMjYsMTAgKzEyNywxNCBAQAogCQlzZXJpYWxfcGxhdGZvcm1fZGF0YVsyXS51YXJ0Y2xrID0gT01BUDE1MTBfQkFTRV9CQVVEICogMTY7CiAJfQogCisJaW5mbyA9IG9tYXBfZ2V0X2NvbmZpZyhPTUFQX1RBR19VQVJULCBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyk7CisJaWYgKGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuOworCiAJZm9yIChpID0gMDsgaSA8IE9NQVBfTUFYX05SX1BPUlRTOyBpKyspIHsKIAkJdW5zaWduZWQgY2hhciByZWc7CiAKLQkJaWYgKHBvcnRzW2ldID09IDApIHsKKwkJaWYgKCEoKDEgPDwgaSkgJiBpbmZvLT5lbmFibGVkX3VhcnRzKSkgewogCQkJc2VyaWFsX3BsYXRmb3JtX2RhdGFbaV0ubWVtYmFzZSA9IE5VTEw7CiAJCQlzZXJpYWxfcGxhdGZvcm1fZGF0YVtpXS5tYXBiYXNlID0gMDsKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWUuYwppbmRleCAxOTFhOWIxLi5jZGJmNGQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWUuYwpAQCAtMjI2LDggKzIyNiw4IEBACiAKICNpZmRlZiBDT05GSUdfT01BUF8zMktfVElNRVIKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCi0jZXJyb3IgT01BUCAzMktIeiB0aW1lciBkb2VzIG5vdCBjdXJyZW50bHkgd29yayBvbiAxNTEwIQorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCisjZXJyb3IgT01BUCAzMktIeiB0aW1lciBkb2VzIG5vdCBjdXJyZW50bHkgd29yayBvbiAxNVhYIQogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc4ODgwOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwpAQCAtMCwwICsxLDIyIEBACitjb21tZW50ICJPTUFQIENvcmUgVHlwZSIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDIKKworY29uZmlnIEFSQ0hfT01BUDI0WFgKKwlib29sICJPTUFQMjR4eCBCYXNlZCBTeXN0ZW0iCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyCisKK2NvbmZpZyBBUkNIX09NQVAyNDIwCisJYm9vbCAiT01BUDI0MjAgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDI0WFgKKworY29tbWVudCAiT01BUCBCb2FyZCBUeXBlIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMgorCitjb25maWcgTUFDSF9PTUFQX0dFTkVSSUMKKwlib29sICJHZW5lcmljIE9NQVAgYm9hcmQiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyICYmIEFSQ0hfT01BUDI0WFgKKworY29uZmlnIE1BQ0hfT01BUF9INAorCWJvb2wgIk9NQVAgMjQyMCBINCBib2FyZCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDIgJiYgQVJDSF9PTUFQMjRYWAorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjA0MTE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQpAQCAtMCwwICsxLDEzIEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgorIworCisjIENvbW1vbiBzdXBwb3J0CitvYmoteSA6PSBpcnEubyBpZC5vIGlvLm8gc3JhbS1mbi5vIGNsb2NrLm8gbXV4Lm8gZGV2aWNlcy5vIHNlcmlhbC5vCisKK29iai0kKENPTkZJR19PTUFQX01QVV9USU1FUikJCSs9IHRpbWVyLWdwLm8KKworIyBTcGVjaWZpYyBib2FyZCBzdXBwb3J0CitvYmotJChDT05GSUdfTUFDSF9PTUFQX0dFTkVSSUMpCQkrPSBib2FyZC1nZW5lcmljLm8KK29iai0kKENPTkZJR19NQUNIX09NQVBfSDQpCQkrPSBib2FyZC1oNC5vCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjVhZmY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEsMyBAQAorICB6cmVsYWRkci15CQk6PSAweDgwMDA4MDAwCitwYXJhbXNfcGh5cy15CQk6PSAweDgwMDAwMTAwCitpbml0cmRfcGh5cy15CQk6PSAweDgwODAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MDJlN2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYwpAQCAtMCwwICsxLDgwIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwL29tYXAyL2JvYXJkLWdlbmVyaWMuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBQYXVsIE11bmR0IDxwYXVsLm11bmR0QG5va2lhLmNvbT4KKyAqCisgKiBNb2RpZmllZCBmcm9tIG1hY2gtb21hcC9vbWFwMS9ib2FyZC1nZW5lcmljLmMKKyAqCisgKiBDb2RlIGZvciBnZW5lcmljIE9NQVAyIGJvYXJkLiBTaG91bGQgd29yayBvbiBtYW55IE9NQVAyIHN5c3RlbXMgd2hlcmUKKyAqIHRoZSBib290bG9hZGVyIHBhc3NlcyB0aGUgYm9hcmQtc3BlY2lmaWMgZGF0YSB0byB0aGUga2VybmVsLgorICogRG8gbm90IHB1dCBhbnkgYm9hcmQgc3BlY2lmaWMgY29kZSB0byB0aGlzIGZpbGU7IGNyZWF0ZSBhIG5ldyBtYWNoaW5lCisgKiB0eXBlIGlmIHlvdSBuZWVkIGN1c3RvbSBsb3ctbGV2ZWwgaW5pdGlhbGl6YXRpb25zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY29tbW9uLmg+CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2dlbmVyaWNfaW5pdF9pcnEodm9pZCkKK3sKKwlvbWFwX2luaXRfaXJxKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBnZW5lcmljX3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmVuYWJsZWRfdWFydHMgPSAoKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfY29uZmlnIGdlbmVyaWNfbW1jX2NvbmZpZyBfX2luaXRkYXRhID0geworCS5tbWMgWzBdID0geworCQkuZW5hYmxlZCAJPSAwLAorCQkud2lyZTQJCT0gMCwKKwkJLndwX3BpbgkJPSAtMSwKKwkJLnBvd2VyX3Bpbgk9IC0xLAorCQkuc3dpdGNoX3Bpbgk9IC0xLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBnZW5lcmljX2NvbmZpZ1tdID0geworCXsgT01BUF9UQUdfVUFSVCwJJmdlbmVyaWNfdWFydF9jb25maWcgfSwKKwl7IE9NQVBfVEFHX01NQywJCSZnZW5lcmljX21tY19jb25maWcgfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2dlbmVyaWNfaW5pdCh2b2lkKQoreworCW9tYXBfYm9hcmRfY29uZmlnID0gZ2VuZXJpY19jb25maWc7CisJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoZ2VuZXJpY19jb25maWcpOworCW9tYXBfc2VyaWFsX2luaXQoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZ2VuZXJpY19tYXBfaW8odm9pZCkKK3sKKwlvbWFwX21hcF9jb21tb25faW8oKTsKK30KKworTUFDSElORV9TVEFSVChPTUFQX0dFTkVSSUMsICJHZW5lcmljIE9NQVAyNHh4IikKKwkvKiBNYWludGFpbmVyOiBQYXVsIE11bmR0IDxwYXVsLm11bmR0QG5va2lhLmNvbT4gKi8KKwkucGh5c19yYW0JPSAweDgwMDAwMDAwLAorCS5waHlzX2lvCT0gMHg0ODAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKDB4ZDgwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAorCS5tYXBfaW8JCT0gb21hcF9nZW5lcmljX21hcF9pbywKKwkuaW5pdF9pcnEJPSBvbWFwX2dlbmVyaWNfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IG9tYXBfZ2VuZXJpY19pbml0LAorCS50aW1lcgkJPSAmb21hcF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI1NTQ0NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYwpAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcC9vbWFwMi9ib2FyZC1oNC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IFBhdWwgTXVuZHQgPHBhdWwubXVuZHRAbm9raWEuY29tPgorICoKKyAqIE1vZGlmaWVkIGZyb20gbWFjaC1vbWFwL29tYXAxL2JvYXJkLWdlbmVyaWMuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC91c2IuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3ByY20uaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gaDRfcGFydGl0aW9uc1tdID0geworCS8qIGJvb3Rsb2FkZXIgKFUtQm9vdCwgZXRjKSBpbiBmaXJzdCBzZWN0b3IgKi8KKwl7CisJICAgICAgLm5hbWUJCT0gImJvb3Rsb2FkZXIiLAorCSAgICAgIC5vZmZzZXQJCT0gMCwKKwkgICAgICAuc2l6ZQkJPSBTWl8xMjhLLAorCSAgICAgIC5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwkvKiBib290bG9hZGVyIHBhcmFtcyBpbiB0aGUgbmV4dCBzZWN0b3IgKi8KKwl7CisJICAgICAgLm5hbWUJCT0gInBhcmFtcyIsCisJICAgICAgLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJICAgICAgLnNpemUJCT0gU1pfMTI4SywKKwkgICAgICAubWFza19mbGFncwk9IDAsCisJfSwKKwkvKiBrZXJuZWwgKi8KKwl7CisJICAgICAgLm5hbWUJCT0gImtlcm5lbCIsCisJICAgICAgLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJICAgICAgLnNpemUJCT0gU1pfMk0sCisJICAgICAgLm1hc2tfZmxhZ3MJPSAwCisJfSwKKwkvKiBmaWxlIHN5c3RlbSAqLworCXsKKwkgICAgICAubmFtZQkJPSAiZmlsZXN5c3RlbSIsCisJICAgICAgLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJICAgICAgLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwkgICAgICAubWFza19mbGFncwk9IDAKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgaDRfZmxhc2hfZGF0YSA9IHsKKwkubWFwX25hbWUJPSAiY2ZpX3Byb2JlIiwKKwkud2lkdGgJCT0gMiwKKwkucGFydHMJCT0gaDRfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGg0X3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoNF9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gSDRfQ1MwX0JBU0UsCisJLmVuZAkJPSBINF9DUzBfQkFTRSArIFNaXzY0TSAtIDEsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaDRfZmxhc2hfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZoNF9mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZoNF9mbGFzaF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaDRfc21jOTF4X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ICA9IE9NQVAyNFhYX0VUSFJfU1RBUlQsICAgICAgICAgIC8qIFBoeXNpY2FsICovCisJCS5lbmQgICAgPSBPTUFQMjRYWF9FVEhSX1NUQVJUICsgMHhmLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCAgPSBPTUFQX0dQSU9fSVJRKE9NQVAyNFhYX0VUSFJfR1BJT19JUlEpLAorCQkuZW5kICAgID0gT01BUF9HUElPX0lSUShPTUFQMjRYWF9FVEhSX0dQSU9fSVJRKSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoNF9zbWM5MXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJzbWM5MXgiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaDRfc21jOTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gaDRfc21jOTF4X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpoNF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmaDRfc21jOTF4X2RldmljZSwKKwkmaDRfZmxhc2hfZGV2aWNlLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBoNF9pbml0X3NtYzkxeCh2b2lkKQoreworCS8qIE1ha2Ugc3VyZSBDUzEgdGltaW5ncyBhcmUgY29ycmVjdCAqLworCUdQTUNfQ09ORklHMV8xID0gMHgwMDAxMTIwMDsKKwlHUE1DX0NPTkZJRzJfMSA9IDB4MDAxZjFmMDE7CisJR1BNQ19DT05GSUczXzEgPSAweDAwMDgwODAzOworCUdQTUNfQ09ORklHNF8xID0gMHgxYzA5MWMwOTsKKwlHUE1DX0NPTkZJRzVfMSA9IDB4MDQxZjFmMWY7CisJR1BNQ19DT05GSUc2XzEgPSAweDAwMDAwNGM0OworCUdQTUNfQ09ORklHN18xID0gMHgwMDAwMGY0MCB8ICgweDA4MDAwMDAwID4+IDI0KTsKKwl1ZGVsYXkoMTAwKTsKKworCW9tYXBfY2ZnX3JlZyhNMTVfMjRYWF9HUElPOTIpOworCWlmIChvbWFwX3JlcXVlc3RfZ3BpbyhPTUFQMjRYWF9FVEhSX0dQSU9fSVJRKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCBHUElPJWQgZm9yIHNtYzkxeCBJUlFcbiIsCisJCQlPTUFQMjRYWF9FVEhSX0dQSU9fSVJRKTsKKwkJcmV0dXJuOworCX0KKwlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihPTUFQMjRYWF9FVEhSX0dQSU9fSVJRLCAxKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfaDRfaW5pdF9pcnEodm9pZCkKK3sKKwlvbWFwX2luaXRfaXJxKCk7CisJb21hcF9ncGlvX2luaXQoKTsKKwloNF9pbml0X3NtYzkxeCgpOworfQorCitzdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgaDRfdWFydF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkuZW5hYmxlZF91YXJ0cyA9ICgoMSA8PCAwKSB8ICgxIDw8IDEpIHwgKDEgPDwgMikpLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX21tY19jb25maWcgaDRfbW1jX2NvbmZpZyBfX2luaXRkYXRhID0geworCS5tbWMgWzBdID0geworCQkuZW5hYmxlZAk9IDEsCisJCS53aXJlNAkJPSAxLAorCQkud3BfcGluCQk9IC0xLAorCQkucG93ZXJfcGluCT0gLTEsCisJCS5zd2l0Y2hfcGluCT0gLTEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIGg0X2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkucGFuZWxfbmFtZQk9ICJoNCIsCisJLmN0cmxfbmFtZQk9ICJpbnRlcm5hbCIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBoNF9jb25maWdbXSA9IHsKKwl7IE9NQVBfVEFHX1VBUlQsCSZoNF91YXJ0X2NvbmZpZyB9LAorCXsgT01BUF9UQUdfTU1DLAkJJmg0X21tY19jb25maWcgfSwKKwl7IE9NQVBfVEFHX0xDRCwJCSZoNF9sY2RfY29uZmlnIH0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9oNF9pbml0KHZvaWQpCit7CisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIHNlcmlhbCBwb3J0cyBhcmUgbXV4ZWQgb24gYXQgdGhpcyBwb2ludC4KKwkgKiBZb3UgaGF2ZSB0byBtdXggdGhlbSBvZmYgaW4gZGV2aWNlIGRyaXZlcnMgbGF0ZXIgb24KKwkgKiBpZiBub3QgbmVlZGVkLgorCSAqLworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGg0X2RldmljZXMsIEFSUkFZX1NJWkUoaDRfZGV2aWNlcykpOworCW9tYXBfYm9hcmRfY29uZmlnID0gaDRfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGg0X2NvbmZpZyk7CisJb21hcF9zZXJpYWxfaW5pdCgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9oNF9tYXBfaW8odm9pZCkKK3sKKwlvbWFwX21hcF9jb21tb25faW8oKTsKK30KKworTUFDSElORV9TVEFSVChPTUFQX0g0LCAiT01BUDI0MjAgSDQgYm9hcmQiKQorCS8qIE1haW50YWluZXI6IFBhdWwgTXVuZHQgPHBhdWwubXVuZHRAbm9raWEuY29tPiAqLworCS5waHlzX3JhbQk9IDB4ODAwMDAwMDAsCisJLnBoeXNfaW8JPSAweDQ4MDAwMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoMHhkODAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCisJLm1hcF9pbwkJPSBvbWFwX2g0X21hcF9pbywKKwkuaW5pdF9pcnEJPSBvbWFwX2g0X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSBvbWFwX2g0X2luaXQsCisJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTgxOGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCkBAIC0wLDAgKzEsMTEyOSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1IFRleGFzIEluc3RydW1lbnRzIEluYy4KKyAqICBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKiAgQ3JlYXRlZCBmb3IgT01BUDIuCisgKgorICogIENsZWFuZWQgdXAgYW5kIG1vZGlmaWVkIHRvIHVzZSBvbWFwIHNoYXJlZCBjbG9jayBmcmFtZXdvcmsgYnkKKyAqICBUb255IExpbmRncmVuIDx0b255QGF0b21pZGUuY29tPgorICoKKyAqICBCYXNlZCBvbiBvbWFwMSBjbG9jay5jLCBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA1IE5va2lhIGNvcnBvcmF0aW9uCisgKiAgV3JpdHRlbiBieSBUdXVra2EgVGlra2FuZW4gPHR1dWtrYS50aWtrYW5lbkBlbGVrdHJvYml0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zcmFtLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHJjbS5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKworLy8jZGVmaW5lIERPV05fVkFSSUFCTEVfRFBMTCAxCQkJLyogRXhwZXJpbWVudGFsICovCisKK3N0YXRpYyBzdHJ1Y3QgcHJjbV9jb25maWcgKmN1cnJfcHJjbV9zZXQ7CitzdGF0aWMgc3RydWN0IG1lbW9yeV90aW1pbmdzIG1lbV90aW1pbmdzOworc3RhdGljIHUzMiBjdXJyX3BlcmZfbGV2ZWwgPSBQUkNNX0ZVTExfU1BFRUQ7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogT21hcDIgc3BlY2lmaWMgY2xvY2sgZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBSZWNhbGN1bGF0ZSBTWVNUX0NMSyAqLworc3RhdGljIHZvaWQgb21hcDJfc3lzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqIGNsaykKK3sKKwl1MzIgZGl2ID0gUFJDTV9DTEtTUkNfQ1RSTDsKKwlkaXYgJj0gKDEgPDwgNykgfCAoMSA8PCA2KTsJLyogVGVzdCBpZiBleHQgY2xrIGRpdmlkZWQgYnkgMSBvciAyICovCisJZGl2ID4+PSBjbGstPnJhdGVfb2Zmc2V0OworCWNsay0+cmF0ZSA9IChjbGstPnBhcmVudC0+cmF0ZSAvIGRpdik7CisJcHJvcGFnYXRlX3JhdGUoY2xrKTsKK30KKworc3RhdGljIHUzMiBvbWFwMl9nZXRfZHBsbF9yYXRlKHN0cnVjdCBjbGsgKiB0Y2xrKQoreworCWludCBkcGxsX2NsaywgZHBsbF9tdWx0LCBkcGxsX2RpdiwgYW11bHQ7CisKKwlkcGxsX211bHQgPSAoQ01fQ0xLU0VMMV9QTEwgPj4gMTIpICYgMHgwM2ZmOwkvKiAxMCBiaXRzICovCisJZHBsbF9kaXYgPSAoQ01fQ0xLU0VMMV9QTEwgPj4gOCkgJiAweDBmOwkvKiA0IGJpdHMgKi8KKwlkcGxsX2NsayA9ICh0Y2xrLT5wYXJlbnQtPnJhdGUgKiBkcGxsX211bHQpIC8gKGRwbGxfZGl2ICsgMSk7CisJYW11bHQgPSBDTV9DTEtTRUwyX1BMTCAmIDB4MzsKKwlkcGxsX2NsayAqPSBhbXVsdDsKKworCXJldHVybiBkcGxsX2NsazsKK30KKworc3RhdGljIHZvaWQgb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJZm9sbG93cGFyZW50X3JlY2FsYyhjbGspOworfQorCitzdGF0aWMgdm9pZCBvbWFwMl9wcm9wYWdhdGVfcmF0ZShzdHJ1Y3QgY2xrICogY2xrKQoreworCWlmICghKGNsay0+ZmxhZ3MgJiBSQVRFX0ZJWEVEKSkKKwkJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGU7CisKKwlwcm9wYWdhdGVfcmF0ZShjbGspOworfQorCisvKiBFbmFibGUgYW4gQVBMTCBpZiBvZmYgKi8KK3N0YXRpYyB2b2lkIG9tYXAyX2Nsa19maXhlZF9lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiBjdmFsLCBpPTA7CisKKwlpZiAoY2xrLT5lbmFibGVfYml0ID09IDB4ZmYpCQkJLyogUGFyZW50IHdpbGwgZG8gaXQgKi8KKwkJcmV0dXJuOworCisJY3ZhbCA9IENNX0NMS0VOX1BMTDsKKworCWlmICgoY3ZhbCAmICgweDMgPDwgY2xrLT5lbmFibGVfYml0KSkgPT0gKDB4MyA8PCBjbGstPmVuYWJsZV9iaXQpKQorCQlyZXR1cm47CisKKwljdmFsICY9IH4oMHgzIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJY3ZhbCB8PSAoMHgzIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJQ01fQ0xLRU5fUExMID0gY3ZhbDsKKworCWlmIChjbGsgPT0gJmFwbGw5Nl9jaykKKwkJY3ZhbCA9ICgxIDw8IDgpOworCWVsc2UgaWYgKGNsayA9PSAmYXBsbDU0X2NrKQorCQljdmFsID0gKDEgPDwgNik7CisKKwl3aGlsZSAoIUNNX0lETEVTVF9DS0dFTiAmIGN2YWwpIHsJCS8qIFdhaXQgZm9yIGxvY2sgKi8KKwkJKytpOworCQl1ZGVsYXkoMSk7CisJCWlmIChpID09IDEwMDAwMCkKKwkJCWJyZWFrOworCX0KK30KKworLyogRW5hYmxlcyBjbG9jayB3aXRob3V0IGNvbnNpZGVyaW5nIHBhcmVudCBkZXBlbmRlbmNpZXMgb3IgdXNlIGNvdW50CisgKiBSRVZJU0lUOiBNYXliZSBjaGFuZ2UgdGhpcyB0byB1c2UgY2xrLT5lbmFibGUgbGlrZSBvbiBvbWFwMT8KKyAqLworc3RhdGljIGludCBvbWFwMl9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKiBjbGspCit7CisJdTMyIHJlZ3ZhbDMyOworCisJaWYgKGNsay0+ZmxhZ3MgJiBBTFdBWVNfRU5BQkxFRCkKKwkJcmV0dXJuIDA7CisKKwlpZiAodW5saWtlbHkoY2xrLT5lbmFibGVfcmVnID09IDApKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2xvY2suYzogRW5hYmxlIGZvciAlcyB3aXRob3V0IGVuYWJsZSBjb2RlXG4iLAorCQkgICAgICAgY2xrLT5uYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGNsay0+ZW5hYmxlX3JlZyA9PSAodm9pZCBfX2lvbWVtICopJkNNX0NMS0VOX1BMTCkgeworCQlvbWFwMl9jbGtfZml4ZWRfZW5hYmxlKGNsayk7CisJCXJldHVybiAwOworCX0KKworCXJlZ3ZhbDMyID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwlyZWd2YWwzMiB8PSAoMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCV9fcmF3X3dyaXRlbChyZWd2YWwzMiwgY2xrLT5lbmFibGVfcmVnKTsKKworCXJldHVybiAwOworfQorCisvKiBTdG9wIEFQTEwgKi8KK3N0YXRpYyB2b2lkIG9tYXAyX2Nsa19maXhlZF9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgY3ZhbDsKKworCWlmKGNsay0+ZW5hYmxlX2JpdCA9PSAweGZmKQkJLyogbGV0IHBhcmVudCBvZmYgZG8gaXQgKi8KKwkJcmV0dXJuOworCisJY3ZhbCA9IENNX0NMS0VOX1BMTDsKKwljdmFsICY9IH4oMHgzIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJQ01fQ0xLRU5fUExMID0gY3ZhbDsKK30KKworLyogRGlzYWJsZXMgY2xvY2sgd2l0aG91dCBjb25zaWRlcmluZyBwYXJlbnQgZGVwZW5kZW5jaWVzIG9yIHVzZSBjb3VudCAqLworc3RhdGljIHZvaWQgb21hcDJfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWd2YWwzMjsKKworCWlmIChjbGstPmVuYWJsZV9yZWcgPT0gMCkKKwkJcmV0dXJuOworCisJaWYgKGNsay0+ZW5hYmxlX3JlZyA9PSAodm9pZCBfX2lvbWVtICopJkNNX0NMS0VOX1BMTCkgeworCQlvbWFwMl9jbGtfZml4ZWRfZGlzYWJsZShjbGspOworCQlyZXR1cm47CisJfQorCisJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCXJlZ3ZhbDMyICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCV9fcmF3X3dyaXRlbChyZWd2YWwzMiwgY2xrLT5lbmFibGVfcmVnKTsKK30KKworc3RhdGljIGludCBvbWFwMl9jbGtfdXNlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChjbGstPnVzZWNvdW50KysgPT0gMCkgeworCQlpZiAobGlrZWx5KCh1MzIpY2xrLT5wYXJlbnQpKQorCQkJcmV0ID0gb21hcDJfY2xrX3VzZShjbGstPnBhcmVudCk7CisKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgeworCQkJY2xrLT51c2Vjb3VudC0tOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCXJldCA9IG9tYXAyX2Nsa19lbmFibGUoY2xrKTsKKworCQlpZiAodW5saWtlbHkocmV0ICE9IDApICYmIGNsay0+cGFyZW50KSB7CisJCQlvbWFwMl9jbGtfdW51c2UoY2xrLT5wYXJlbnQpOworCQkJY2xrLT51c2Vjb3VudC0tOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgb21hcDJfY2xrX3VudXNlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoY2xrLT51c2Vjb3VudCA+IDAgJiYgISgtLWNsay0+dXNlY291bnQpKSB7CisJCW9tYXAyX2Nsa19kaXNhYmxlKGNsayk7CisJCWlmIChsaWtlbHkoKHUzMiljbGstPnBhcmVudCkpCisJCQlvbWFwMl9jbGtfdW51c2UoY2xrLT5wYXJlbnQpOworCX0KK30KKworLyoKKyAqIFVzZXMgdGhlIGN1cnJlbnQgcHJjbSBzZXQgdG8gdGVsbCBpZiBhIHJhdGUgaXMgdmFsaWQuCisgKiBZb3UgY2FuIGdvIHNsb3dlciwgYnV0IG5vdCBmYXN0ZXIgd2l0aGluIGEgZ2l2ZW4gcmF0ZSBzZXQuCisgKi8KK3N0YXRpYyB1MzIgb21hcDJfZHBsbF9yb3VuZF9yYXRlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3JhdGUpCit7CisJdTMyIGhpZ2gsIGxvdzsKKworCWlmICgoQ01fQ0xLU0VMMl9QTEwgJiAweDMpID09IDEpIHsJLyogRFBMTCBjbG9ja291dCAqLworCQloaWdoID0gY3Vycl9wcmNtX3NldC0+ZHBsbF9zcGVlZCAqIDI7CisJCWxvdyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQ7CisJfSBlbHNlIHsJCQkJLyogRFBMTCBjbG9ja291dCB4IDIgKi8KKwkJaGlnaCA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQ7CisJCWxvdyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQgLyAyOworCX0KKworI2lmZGVmIERPV05fVkFSSUFCTEVfRFBMTAorCWlmICh0YXJnZXRfcmF0ZSA+IGhpZ2gpCisJCXJldHVybiBoaWdoOworCWVsc2UKKwkJcmV0dXJuIHRhcmdldF9yYXRlOworI2Vsc2UKKwlpZiAodGFyZ2V0X3JhdGUgPiBsb3cpCisJCXJldHVybiBoaWdoOworCWVsc2UKKwkJcmV0dXJuIGxvdzsKKyNlbmRpZgorCit9CisKKy8qCisgKiBVc2VkIGZvciBjbG9ja3MgdGhhdCBhcmUgcGFydCBvZiBDTEtTRUxfeHl6IGdvdmVybmVkIGNsb2Nrcy4KKyAqIFJFVklTSVQ6IE1heWJlIGNoYW5nZSB0byB1c2UgY2xrLT5lbmFibGUoKSBmdW5jdGlvbnMgbGlrZSBvbiBvbWFwMT8KKyAqLworc3RhdGljIHZvaWQgb21hcDJfY2xrc2VsX3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKQoreworCXUzMiBmaXhlZCA9IDAsIGRpdiA9IDA7CisKKwlpZiAoY2xrID09ICZkcGxsX2NrKSB7CisJCWNsay0+cmF0ZSA9IG9tYXAyX2dldF9kcGxsX3JhdGUoY2xrKTsKKwkJZml4ZWQgPSAxOworCQlkaXYgPSAwOworCX0KKworCWlmIChjbGsgPT0gJml2YTFfbXB1X2ludF9pZmNrKSB7CisJCWRpdiA9IDI7CisJCWZpeGVkID0gMTsKKwl9CisKKwlpZiAoKGNsayA9PSAmZHNzMV9mY2spICYmICgoQ01fQ0xLU0VMMV9DT1JFICYgKDB4MWYgPDwgOCkpID09IDApKSB7CisJCWNsay0+cmF0ZSA9IHN5c19jay5yYXRlOworCQlyZXR1cm47CisJfQorCisJaWYgKCFmaXhlZCkgeworCQlkaXYgPSBvbWFwMl9jbGtzZWxfZ2V0X2Rpdmlzb3IoY2xrKTsKKwkJaWYgKGRpdiA9PSAwKQorCQkJcmV0dXJuOworCX0KKworCWlmIChkaXYgIT0gMCkgeworCQlpZiAodW5saWtlbHkoY2xrLT5yYXRlID09IGNsay0+cGFyZW50LT5yYXRlIC8gZGl2KSkKKwkJCXJldHVybjsKKwkJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkaXY7CisJfQorCisJaWYgKHVubGlrZWx5KGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKQorCQlwcm9wYWdhdGVfcmF0ZShjbGspOworfQorCisvKgorICogRmluZHMgYmVzdCBkaXZpZGVyIHZhbHVlIGluIGFuIGFycmF5IGJhc2VkIG9uIHRoZSBzb3VyY2UgYW5kIHRhcmdldAorICogcmF0ZXMuIFRoZSBkaXZpZGVyIGFycmF5IG11c3QgYmUgc29ydGVkIHdpdGggc21hbGxlc3QgZGl2aWRlciBmaXJzdC4KKyAqLworc3RhdGljIGlubGluZSB1MzIgb21hcDJfZGl2aWRlcl9mcm9tX3RhYmxlKHUzMiBzaXplLCB1MzIgKmRpdl9hcnJheSwKKwkJCQkJICAgdTMyIHNyY19yYXRlLCB1MzIgdGd0X3JhdGUpCit7CisJaW50IGksIHRlc3RfcmF0ZTsKKworCWlmIChkaXZfYXJyYXkgPT0gTlVMTCkKKwkJcmV0dXJuIH4xOworCisJZm9yIChpPTA7IGkgPCBzaXplOyBpKyspIHsKKwkJdGVzdF9yYXRlID0gc3JjX3JhdGUgLyAqZGl2X2FycmF5OworCQlpZiAodGVzdF9yYXRlIDw9IHRndF9yYXRlKQorCQkJcmV0dXJuICpkaXZfYXJyYXk7CisJCSsrZGl2X2FycmF5OworCX0KKworCXJldHVybiB+MDsJLyogTm8gYWNjZXB0YWJsZSBkaXZpZGVyICovCit9CisKKy8qCisgKiBGaW5kIGRpdmlzb3IgZm9yIHRoZSBnaXZlbiBjbG9jayBhbmQgdGFyZ2V0IHJhdGUuCisgKgorICogTm90ZSB0aGF0IHRoaXMgd2lsbCBub3Qgd29yayBmb3IgY2xvY2tzIHdoaWNoIGFyZSBwYXJ0IG9mIENPTkZJR19QQVJUSUNJUEFOVCwKKyAqIHRoZXkgYXJlIG9ubHkgc2V0dGFibGUgYXMgcGFydCBvZiB2aXJ0dWFsX3ByY20gc2V0LgorICovCitzdGF0aWMgdTMyIG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKnRjbGssIHUzMiB0YXJnZXRfcmF0ZSwKKwl1MzIgKm5ld19kaXYpCit7CisJdTMyIGdmeF9kaXZbXSA9IHsyLCAzLCA0fTsKKwl1MzIgc3lzY2xrb3V0X2RpdltdID0gezEsIDIsIDQsIDgsIDE2fTsKKwl1MzIgZHNzMV9kaXZbXSA9IHsxLCAyLCAzLCA0LCA1LCA2LCA4LCA5LCAxMiwgMTZ9OworCXUzMiB2eWxucV9kaXZbXSA9IHsxLCAyLCAzLCA0LCA2LCA4LCA5LCAxMiwgMTYsIDE4fTsKKwl1MzIgYmVzdF9kaXYgPSB+MCwgYXNpemUgPSAwOworCXUzMiAqZGl2X2FycmF5ID0gTlVMTDsKKworCXN3aXRjaCAodGNsay0+ZmxhZ3MgJiBTUkNfUkFURV9TRUxfTUFTSykgeworCWNhc2UgQ01fR0ZYX1NFTDE6CisJCWFzaXplID0gMzsKKwkJZGl2X2FycmF5ID0gZ2Z4X2RpdjsKKwkJYnJlYWs7CisJY2FzZSBDTV9QTExfU0VMMToKKwkJcmV0dXJuIG9tYXAyX2RwbGxfcm91bmRfcmF0ZSh0YXJnZXRfcmF0ZSk7CisJY2FzZSBDTV9TWVNDTEtPVVRfU0VMMToKKwkJYXNpemUgPSA1OworCQlkaXZfYXJyYXkgPSBzeXNjbGtvdXRfZGl2OworCQlicmVhazsKKwljYXNlIENNX0NPUkVfU0VMMToKKwkJaWYodGNsayA9PSAmZHNzMV9mY2speworCQkJaWYodGNsay0+cGFyZW50ID09ICZjb3JlX2NrKXsKKwkJCQlhc2l6ZSA9IDEwOworCQkJCWRpdl9hcnJheSA9IGRzczFfZGl2OworCQkJfSBlbHNlIHsKKwkJCQkqbmV3X2RpdiA9IDA7IC8qIGZpeGVkIGNsayAqLworCQkJCXJldHVybih0Y2xrLT5wYXJlbnQtPnJhdGUpOworCQkJfQorCQl9IGVsc2UgaWYoKHRjbGsgPT0gJnZseW5xX2ZjaykgJiYgY3B1X2lzX29tYXAyNDIwKCkpeworCQkJaWYodGNsay0+cGFyZW50ID09ICZjb3JlX2NrKXsKKwkJCQlhc2l6ZSA9IDEwOworCQkJCWRpdl9hcnJheSA9IHZ5bG5xX2RpdjsKKwkJCX0gZWxzZSB7CisJCQkJKm5ld19kaXYgPSAwOyAvKiBmaXhlZCBjbGsgKi8KKwkJCQlyZXR1cm4odGNsay0+cGFyZW50LT5yYXRlKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwl9CisKKwliZXN0X2RpdiA9IG9tYXAyX2RpdmlkZXJfZnJvbV90YWJsZShhc2l6ZSwgZGl2X2FycmF5LAorCSB0Y2xrLT5wYXJlbnQtPnJhdGUsIHRhcmdldF9yYXRlKTsKKwlpZiAoYmVzdF9kaXYgPT0gfjApeworCQkqbmV3X2RpdiA9IDE7CisJCXJldHVybiBiZXN0X2RpdjsgLyogc2lnbmFsIGVycm9yICovCisJfQorCisJKm5ld19kaXYgPSBiZXN0X2RpdjsKKwlyZXR1cm4gKHRjbGstPnBhcmVudC0+cmF0ZSAvIGJlc3RfZGl2KTsKK30KKworLyogR2l2ZW4gYSBjbG9jayBhbmQgYSByYXRlIGFwcGx5IGEgY2xvY2sgc3BlY2lmaWMgcm91bmRpbmcgZnVuY3Rpb24gKi8KK3N0YXRpYyBsb25nIG9tYXAyX2Nsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXUzMiBuZXdfZGl2ID0gMDsKKwlpbnQgdmFsaWRfcmF0ZTsKKworCWlmIChjbGstPmZsYWdzICYgUkFURV9GSVhFRCkKKwkJcmV0dXJuIGNsay0+cmF0ZTsKKworCWlmIChjbGstPmZsYWdzICYgUkFURV9DS0NUTCkgeworCQl2YWxpZF9yYXRlID0gb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUoY2xrLCByYXRlLCAmbmV3X2Rpdik7CisJCXJldHVybiB2YWxpZF9yYXRlOworCX0KKworCWlmIChjbGstPnJvdW5kX3JhdGUgIT0gMCkKKwkJcmV0dXJuIGNsay0+cm91bmRfcmF0ZShjbGssIHJhdGUpOworCisJcmV0dXJuIGNsay0+cmF0ZTsKK30KKworLyoKKyAqIENoZWNrIHRoZSBETEwgbG9jayBzdGF0ZSwgYW5kIHJldHVybiB0dWUgaWYgcnVubmluZyBpbiB1bmxvY2sgbW9kZS4KKyAqIFRoaXMgaXMgbmVlZGVkIHRvIGNvbXBlbnN0ZSBmb3IgdGhlIHNoaWZ0ZWQgRExMIHZhbHVlIGluIHVubG9jayBtb2RlLgorICovCitzdGF0aWMgdTMyIG9tYXAyX2RsbF9mb3JjZV9uZWVkZWQodm9pZCkKK3sKKwl1MzIgZGxsX3N0YXRlID0gU0RSQ19ETExBX0NUUkw7CQkvKiBkbGxhIGFuZCBkbGxiIGFyZSBhIHNldCAqLworCisJaWYgKChkbGxfc3RhdGUgJiAoMSA8PCAyKSkgPT0gKDEgPDwgMikpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAyX2luaXRfbWVtb3J5X3BhcmFtcyh1MzIgZm9yY2VfbG9ja190b191bmxvY2tfbW9kZSkKK3sKKwl1bnNpZ25lZCBsb25nIGRsbF9jbnQ7CisJdTMyIGZhc3RfZGxsID0gMDsKKworCW1lbV90aW1pbmdzLm1fdHlwZSA9ICEoKFNEUkNfTVJfMCAmIDB4MykgPT0gMHgxKTsgLyogRERSID0gMSwgU0RSID0gMCAqLworCisJLyogMjQyMiBlczIuMDUgYW5kIGJleW9uZCBoYXMgYSBzaW5nbGUgU0lQIEREUiBpbnN0ZWFkIG9mIDIgbGlrZSBvdGhlcnMuCisJICogSW4gdGhlIGNhc2Ugb2YgMjQyMiwgaXRzIG9rIHRvIHVzZSBDUzEgaW5zdGVhZCBvZiBDUzAuCisJICovCisKKyNpZiAwCS8qIEZJWE1FOiBFbmFibGUgYWZ0ZXIgMjR4eCBjcHUgZGV0ZWN0aW9uIHdvcmtzICovCisJY3R5cGUgPSBnZXRfY3B1X3R5cGUoKTsKKwlpZiAoY3B1X2lzX29tYXAyNDIyKCkpCisJCW1lbV90aW1pbmdzLmJhc2VfY3MgPSAxOworCWVsc2UKKyNlbmRpZgorCQltZW1fdGltaW5ncy5iYXNlX2NzID0gMDsKKworCWlmIChtZW1fdGltaW5ncy5tX3R5cGUgIT0gTV9ERFIpCisJCXJldHVybjsKKworCS8qIFdpdGggRERSIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBsb3cgZnJlcXVlbmN5IERMTCB2YWx1ZSAqLworCWlmICgoKG1lbV90aW1pbmdzLmZhc3RfZGxsX2N0cmwgJiAoMSA8PCAyKSkgPT0gTV9MT0NLX0NUUkwpKQorCQltZW1fdGltaW5ncy5kbGxfbW9kZSA9IE1fVU5MT0NLOworCWVsc2UKKwkJbWVtX3RpbWluZ3MuZGxsX21vZGUgPSBNX0xPQ0s7CisKKwlpZiAobWVtX3RpbWluZ3MuYmFzZV9jcyA9PSAwKSB7CisJCWZhc3RfZGxsID0gU0RSQ19ETExBX0NUUkw7CisJCWRsbF9jbnQgPSBTRFJDX0RMTEFfU1RBVFVTICYgMHhmZjAwOworCX0gZWxzZSB7CisJCWZhc3RfZGxsID0gU0RSQ19ETExCX0NUUkw7CisJCWRsbF9jbnQgPSBTRFJDX0RMTEJfU1RBVFVTICYgMHhmZjAwOworCX0KKwlpZiAoZm9yY2VfbG9ja190b191bmxvY2tfbW9kZSkgeworCQlmYXN0X2RsbCAmPSB+MHhmZjAwOworCQlmYXN0X2RsbCB8PSBkbGxfY250OwkJLyogQ3VycmVudCBsb2NrIG1vZGUgKi8KKwl9CisJbWVtX3RpbWluZ3MuZmFzdF9kbGxfY3RybCA9IGZhc3RfZGxsOworCisJLyogTm8gZGlzcnVwdGlvbnMsIEREUiB3aWxsIGJlIG9mZmxpbmUgJiBDLUFCSSBub3QgZm9sbG93ZWQgKi8KKwlvbWFwMl9zcmFtX2Rkcl9pbml0KCZtZW1fdGltaW5ncy5zbG93X2RsbF9jdHJsLAorCQkJICAgIG1lbV90aW1pbmdzLmZhc3RfZGxsX2N0cmwsCisJCQkgICAgbWVtX3RpbWluZ3MuYmFzZV9jcywKKwkJCSAgICBmb3JjZV9sb2NrX3RvX3VubG9ja19tb2RlKTsKKwltZW1fdGltaW5ncy5zbG93X2RsbF9jdHJsICY9IDB4ZmYwMDsJLyogS2VlcCBsb2NrIHZhbHVlICovCisKKwkvKiBUdXJuIHN0YXR1cyBpbnRvIHVubG9jayBjdHJsICovCisJbWVtX3RpbWluZ3Muc2xvd19kbGxfY3RybCB8PQorCQkoKG1lbV90aW1pbmdzLmZhc3RfZGxsX2N0cmwgJiAweEYpIHwgKDEgPDwgMikpOworCisJLyogOTAgZGVncmVlIHBoYXNlIGZvciBhbnl0aGluZyBiZWxvdyAxMzNNaHogKi8KKwltZW1fdGltaW5ncy5zbG93X2RsbF9jdHJsIHw9ICgxIDw8IDEpOworfQorCitzdGF0aWMgdTMyIG9tYXAyX3JlcHJvZ3JhbV9zZHJjKHUzMiBsZXZlbCwgdTMyIGZvcmNlKQoreworCXUzMiBwcmV2ID0gY3Vycl9wZXJmX2xldmVsLCBmbGFnczsKKworCWlmICgoY3Vycl9wZXJmX2xldmVsID09IGxldmVsKSAmJiAhZm9yY2UpCisJCXJldHVybiBwcmV2OworCisJaWYgKGxldmVsID09IFBSQ01fSEFMRl9TUEVFRCkgeworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCVBSQ01fVk9MVFNFVFVQID0gMHhmZmZmOworCQlvbWFwMl9zcmFtX3JlcHJvZ3JhbV9zZHJjKFBSQ01fSEFMRl9TUEVFRCwKKwkJCQkJICBtZW1fdGltaW5ncy5zbG93X2RsbF9jdHJsLAorCQkJCQkgIG1lbV90aW1pbmdzLm1fdHlwZSk7CisJCWN1cnJfcGVyZl9sZXZlbCA9IFBSQ01fSEFMRl9TUEVFRDsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0KKwlpZiAobGV2ZWwgPT0gUFJDTV9GVUxMX1NQRUVEKSB7CisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJUFJDTV9WT0xUU0VUVVAgPSAweGZmZmY7CisJCW9tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmMoUFJDTV9GVUxMX1NQRUVELAorCQkJCQkgIG1lbV90aW1pbmdzLmZhc3RfZGxsX2N0cmwsCisJCQkJCSAgbWVtX3RpbWluZ3MubV90eXBlKTsKKwkJY3Vycl9wZXJmX2xldmVsID0gUFJDTV9GVUxMX1NQRUVEOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfQorCisJcmV0dXJuIHByZXY7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJfcmVwcm9ncmFtX2RwbGwoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXUzMiBmbGFncywgY3VyX3JhdGUsIGxvdywgbXVsdCwgZGl2LCB2YWxpZF9yYXRlLCBkb25lX3JhdGU7CisJdTMyIGJ5cGFzcyA9IDA7CisJc3RydWN0IHByY21fY29uZmlnIHRtcHNldDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwljdXJfcmF0ZSA9IG9tYXAyX2dldF9kcGxsX3JhdGUoJmRwbGxfY2spOworCW11bHQgPSBDTV9DTEtTRUwyX1BMTCAmIDB4MzsKKworCWlmICgocmF0ZSA9PSAoY3VyX3JhdGUgLyAyKSkgJiYgKG11bHQgPT0gMikpIHsKKwkJb21hcDJfcmVwcm9ncmFtX3NkcmMoUFJDTV9IQUxGX1NQRUVELCAxKTsKKwl9IGVsc2UgaWYgKChyYXRlID09IChjdXJfcmF0ZSAqIDIpKSAmJiAobXVsdCA9PSAxKSkgeworCQlvbWFwMl9yZXByb2dyYW1fc2RyYyhQUkNNX0ZVTExfU1BFRUQsIDEpOworCX0gZWxzZSBpZiAocmF0ZSAhPSBjdXJfcmF0ZSkgeworCQl2YWxpZF9yYXRlID0gb21hcDJfZHBsbF9yb3VuZF9yYXRlKHJhdGUpOworCQlpZiAodmFsaWRfcmF0ZSAhPSByYXRlKQorCQkJZ290byBkcGxsX2V4aXQ7CisKKwkJaWYgKChDTV9DTEtTRUwyX1BMTCAmIDB4MykgPT0gMSkKKwkJCWxvdyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQ7CisJCWVsc2UKKwkJCWxvdyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQgLyAyOworCisJCXRtcHNldC5jbV9jbGtzZWwxX3BsbCA9IENNX0NMS1NFTDFfUExMOworCQl0bXBzZXQuY21fY2xrc2VsMV9wbGwgJj0gfigweDNGRkYgPDwgOCk7CisJCWRpdiA9ICgoY3Vycl9wcmNtX3NldC0+eHRhbF9zcGVlZCAvIDEwMDAwMDApIC0gMSk7CisJCXRtcHNldC5jbV9jbGtzZWwyX3BsbCA9IENNX0NMS1NFTDJfUExMOworCQl0bXBzZXQuY21fY2xrc2VsMl9wbGwgJj0gfjB4MzsKKwkJaWYgKHJhdGUgPiBsb3cpIHsKKwkJCXRtcHNldC5jbV9jbGtzZWwyX3BsbCB8PSAweDI7CisJCQltdWx0ID0gKChyYXRlIC8gMikgLyAxMDAwMDAwKTsKKwkJCWRvbmVfcmF0ZSA9IFBSQ01fRlVMTF9TUEVFRDsKKwkJfSBlbHNlIHsKKwkJCXRtcHNldC5jbV9jbGtzZWwyX3BsbCB8PSAweDE7CisJCQltdWx0ID0gKHJhdGUgLyAxMDAwMDAwKTsKKwkJCWRvbmVfcmF0ZSA9IFBSQ01fSEFMRl9TUEVFRDsKKwkJfQorCQl0bXBzZXQuY21fY2xrc2VsMV9wbGwgfD0gKChkaXYgPDwgOCkgfCAobXVsdCA8PCAxMikpOworCisJCS8qIFdvcnN0IGNhc2UgKi8KKwkJdG1wc2V0LmJhc2Vfc2RyY19yZnIgPSBWMjRYWF9TRFJDX1JGUl9DVFJMX0JZUEFTUzsKKworCQlpZiAocmF0ZSA9PSBjdXJyX3ByY21fc2V0LT54dGFsX3NwZWVkKQkvKiBJZiBhc2tpbmcgZm9yIDEtMSAqLworCQkJYnlwYXNzID0gMTsKKworCQlvbWFwMl9yZXByb2dyYW1fc2RyYyhQUkNNX0ZVTExfU1BFRUQsIDEpOyAvKiBGb3IgaW5pdF9tZW0gKi8KKworCQkvKiBGb3JjZSBkbGwgbG9jayBtb2RlICovCisJCW9tYXAyX3NldF9wcmNtKHRtcHNldC5jbV9jbGtzZWwxX3BsbCwgdG1wc2V0LmJhc2Vfc2RyY19yZnIsCisJCQkgICAgICAgYnlwYXNzKTsKKworCQkvKiBFcnJhdGE6IHJldCBkbGwgZW50cnkgc3RhdGUgKi8KKwkJb21hcDJfaW5pdF9tZW1vcnlfcGFyYW1zKG9tYXAyX2RsbF9mb3JjZV9uZWVkZWQoKSk7CisJCW9tYXAyX3JlcHJvZ3JhbV9zZHJjKGRvbmVfcmF0ZSwgMCk7CisJfQorCW9tYXAyX2Nsa3NlbF9yZWNhbGMoJmRwbGxfY2spOworCXJldCA9IDA7CisKK2RwbGxfZXhpdDoKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuKHJldCk7Cit9CisKKy8qIEp1c3QgcmV0dXJuIHRoZSBNUFUgc3BlZWQgKi8KK3N0YXRpYyB2b2lkIG9tYXAyX21wdV9yZWNhbGMoc3RydWN0IGNsayAqIGNsaykKK3sKKwljbGstPnJhdGUgPSBjdXJyX3ByY21fc2V0LT5tcHVfc3BlZWQ7Cit9CisKKy8qCisgKiBMb29rIGZvciBhIHJhdGUgZXF1YWwgb3IgbGVzcyB0aGFuIHRoZSB0YXJnZXQgcmF0ZSBnaXZlbiBhIGNvbmZpZ3VyYXRpb24gc2V0LgorICoKKyAqIFdoYXQncyBub3QgZW50aXJlbHkgY2xlYXIgaXMgIndoaWNoIiBmaWVsZCByZXByZXNlbnRzIHRoZSBrZXkgZmllbGQuCisgKiBTb21lIG1pZ2h0IGFyZ3VlIEwzLUREUiwgb3RoZXJzIEFSTSwgb3RoZXJzIElWQS4gVGhpcyBjb2RlIGlzIHNpbXBsZSBhbmQKKyAqIGp1c3QgdXNlcyB0aGUgQVJNIHJhdGVzLgorICovCitzdGF0aWMgbG9uZyBvbWFwMl9yb3VuZF90b190YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlzdHJ1Y3QgcHJjbV9jb25maWcgKiBwdHI7CisJbG9uZyBoaWdoZXN0X3JhdGU7CisKKwlpZiAoY2xrICE9ICZ2aXJ0X3ByY21fc2V0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhpZ2hlc3RfcmF0ZSA9IC1FSU5WQUw7CisKKwlmb3IgKHB0ciA9IHJhdGVfdGFibGU7IHB0ci0+bXB1X3NwZWVkOyBwdHIrKykgeworCQlpZiAocHRyLT54dGFsX3NwZWVkICE9IHN5c19jay5yYXRlKQorCQkJY29udGludWU7CisKKwkJaGlnaGVzdF9yYXRlID0gcHRyLT5tcHVfc3BlZWQ7CisKKwkJLyogQ2FuIGNoZWNrIG9ubHkgYWZ0ZXIgeHRhbCBmcmVxdWVuY3kgY2hlY2sgKi8KKwkJaWYgKHB0ci0+bXB1X3NwZWVkIDw9IHJhdGUpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGhpZ2hlc3RfcmF0ZTsKK30KKworLyoKKyAqIG9tYXAyX2NvbnZlcnRfZmllbGRfdG9fZGl2KCkgLSB0dXJuIGZpZWxkIHZhbHVlIGludG8gaW50ZWdlciBkaXZpZGVyCisgKi8KK3N0YXRpYyB1MzIgb21hcDJfY2xrc2VsX3RvX2Rpdmlzb3IodTMyIGRpdl9zZWwsIHUzMiBmaWVsZF92YWwpCit7CisJdTMyIGk7CisJdTMyIGNsa291dF9hcnJheVtdID0gezEsIDIsIDQsIDgsIDE2fTsKKworCWlmICgoZGl2X3NlbCAmIFNSQ19SQVRFX1NFTF9NQVNLKSA9PSBDTV9TWVNDTEtPVVRfU0VMMSkgeworCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCQlpZiAoZmllbGRfdmFsID09IGkpCisJCQkJcmV0dXJuIGNsa291dF9hcnJheVtpXTsKKwkJfQorCQlyZXR1cm4gfjA7CisJfSBlbHNlCisJCXJldHVybiBmaWVsZF92YWw7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBDTEtTRUwgZGl2aWRlciByZWdpc3RlciB2YWx1ZQorICogUkVWSVNJVDogVGhpcyBzaG91bGQgYmUgY2xlYW5lZCB1cCB0byB3b3JrIG5pY2VseSB3aXRoIHZvaWQgX19pb21lbSAqCisgKi8KK3N0YXRpYyB1MzIgb21hcDJfZ2V0X2Nsa3NlbCh1MzIgKmRpdl9zZWwsIHUzMiAqZmllbGRfbWFzaywKKwkJCSAgICBzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHJldCA9IH4wOworCXUzMiByZWdfdmFsLCBkaXZfb2ZmOworCXUzMiBkaXZfYWRkciA9IDA7CisJdTMyIG1hc2sgPSB+MDsKKworCWRpdl9vZmYgPSBjbGstPnJhdGVfb2Zmc2V0OworCisJc3dpdGNoICgoKmRpdl9zZWwgJiBTUkNfUkFURV9TRUxfTUFTSykpIHsKKwljYXNlIENNX01QVV9TRUwxOgorCQlkaXZfYWRkciA9ICh1MzIpJkNNX0NMS1NFTF9NUFU7CisJCW1hc2sgPSAweDFmOworCQlicmVhazsKKwljYXNlIENNX0RTUF9TRUwxOgorCQlkaXZfYWRkciA9ICh1MzIpJkNNX0NMS1NFTF9EU1A7CisJCWlmIChjcHVfaXNfb21hcDI0MjAoKSkgeworCQkJaWYgKChkaXZfb2ZmID09IDApIHx8IChkaXZfb2ZmID09IDgpKQorCQkJCW1hc2sgPSAweDFmOworCQkJZWxzZSBpZiAoZGl2X29mZiA9PSA1KQorCQkJCW1hc2sgPSAweDM7CisJCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAyNDMwKCkpIHsKKwkJCWlmIChkaXZfb2ZmID09IDApCisJCQkJbWFzayA9IDB4MWY7CisJCQllbHNlIGlmIChkaXZfb2ZmID09IDUpCisJCQkJbWFzayA9IDB4MzsKKwkJfQorCQlicmVhazsKKwljYXNlIENNX0dGWF9TRUwxOgorCQlkaXZfYWRkciA9ICh1MzIpJkNNX0NMS1NFTF9HRlg7CisJCWlmIChkaXZfb2ZmID09IDApCisJCQltYXNrID0gMHg3OworCQlicmVhazsKKwljYXNlIENNX01PREVNX1NFTDE6CisJCWRpdl9hZGRyID0gKHUzMikmQ01fQ0xLU0VMX01ETTsKKwkJaWYgKGRpdl9vZmYgPT0gMCkKKwkJCW1hc2sgPSAweGY7CisJCWJyZWFrOworCWNhc2UgQ01fU1lTQ0xLT1VUX1NFTDE6CisJCWRpdl9hZGRyID0gKHUzMikmUFJDTV9DTEtPVVRfQ1RSTDsKKwkJaWYgKChkaXZfb2ZmID09IDMpIHx8IChkaXZfb2ZmID0gMTEpKQorCQkJbWFzaz0gMHgzOworCQlicmVhazsKKwljYXNlIENNX0NPUkVfU0VMMToKKwkJZGl2X2FkZHIgPSAodTMyKSZDTV9DTEtTRUwxX0NPUkU7CisJCXN3aXRjaCAoZGl2X29mZikgeworCQljYXNlIDA6CQkJCQkvKiBsMyAqLworCQljYXNlIDg6CQkJCQkvKiBkc3MxICovCisJCWNhc2UgMTU6CQkJCS8qIHZ5bG5jLTI0MjAgKi8KKwkJY2FzZSAyMDoJCQkJLyogc3NpICovCisJCQltYXNrID0gMHgxZjsgYnJlYWs7CisJCWNhc2UgNToJCQkJCS8qIGw0ICovCisJCQltYXNrID0gMHgzOyBicmVhazsKKwkJY2FzZSAxMzoJCQkJLyogZHNzMiAqLworCQkJbWFzayA9IDB4MTsgYnJlYWs7CisJCWNhc2UgMjU6CQkJCS8qIHVzYiAqLworCQkJbWFzayA9IDB4ZjsgYnJlYWs7CisJCX0KKwl9CisKKwkqZmllbGRfbWFzayA9IG1hc2s7CisKKwlpZiAodW5saWtlbHkobWFzayA9PSB+MCkpCisJCWRpdl9hZGRyID0gMDsKKworCSpkaXZfc2VsID0gZGl2X2FkZHI7CisKKwlpZiAodW5saWtlbHkoZGl2X2FkZHIgPT0gMCkpCisJCXJldHVybiByZXQ7CisKKwkvKiBJc29sYXRlIGZpZWxkICovCisJcmVnX3ZhbCA9IF9fcmF3X3JlYWRsKCh2b2lkIF9faW9tZW0gKilkaXZfYWRkcikgJiAobWFzayA8PCBkaXZfb2ZmKTsKKworCS8qIE5vcm1hbGl6ZSBiYWNrIHRvIGRpdmlkZXIgdmFsdWUgKi8KKwlyZWdfdmFsID4+PSBkaXZfb2ZmOworCisJcmV0dXJuIHJlZ192YWw7Cit9CisKKy8qCisgKiBSZXR1cm4gZGl2aWRlciB0byBiZSBhcHBsaWVkIHRvIHBhcmVudCBjbG9jay4KKyAqIFJldHVybiAwIG9uIGVycm9yLgorICovCitzdGF0aWMgdTMyIG9tYXAyX2Nsa3NlbF9nZXRfZGl2aXNvcihzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHJldCA9IDA7CisJdTMyIGRpdiwgZGl2X3NlbCwgZGl2X29mZiwgZmllbGRfbWFzaywgZmllbGRfdmFsOworCisJLyogaXNvbGF0ZSBjb250cm9sIHJlZ2lzdGVyICovCisJZGl2X3NlbCA9IChTUkNfUkFURV9TRUxfTUFTSyAmIGNsay0+ZmxhZ3MpOworCisJZGl2X29mZiA9IGNsay0+cmF0ZV9vZmZzZXQ7CisJZmllbGRfdmFsID0gb21hcDJfZ2V0X2Nsa3NlbCgmZGl2X3NlbCwgJmZpZWxkX21hc2ssIGNsayk7CisJaWYgKGRpdl9zZWwgPT0gMCkKKwkJcmV0dXJuIHJldDsKKworCWRpdl9zZWwgPSAoU1JDX1JBVEVfU0VMX01BU0sgJiBjbGstPmZsYWdzKTsKKwlkaXYgPSBvbWFwMl9jbGtzZWxfdG9fZGl2aXNvcihkaXZfc2VsLCBmaWVsZF92YWwpOworCisJcmV0dXJuIGRpdjsKK30KKworLyogU2V0IHRoZSBjbG9jayByYXRlIGZvciBhIGNsb2NrIHNvdXJjZSAqLworc3RhdGljIGludCBvbWFwMl9jbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCisKK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwl2b2lkIF9faW9tZW0gKiByZWc7CisJdTMyIGRpdl9zZWwsIGRpdl9vZmYsIGZpZWxkX21hc2ssIGZpZWxkX3ZhbCwgcmVnX3ZhbCwgdmFsaWRyYXRlOworCXUzMiBuZXdfZGl2ID0gMDsKKworCWlmICghKGNsay0+ZmxhZ3MgJiBDT05GSUdfUEFSVElDSVBBTlQpICYmIChjbGstPmZsYWdzICYgUkFURV9DS0NUTCkpIHsKKwkJaWYgKGNsayA9PSAmZHBsbF9jaykKKwkJCXJldHVybiBvbWFwMl9yZXByb2dyYW1fZHBsbChjbGssIHJhdGUpOworCisJCS8qIElzb2xhdGUgY29udHJvbCByZWdpc3RlciAqLworCQlkaXZfc2VsID0gKFNSQ19SQVRFX1NFTF9NQVNLICYgY2xrLT5mbGFncyk7CisJCWRpdl9vZmYgPSBjbGstPnNyY19vZmZzZXQ7CisKKwkJdmFsaWRyYXRlID0gb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUoY2xrLCByYXRlLCAmbmV3X2Rpdik7CisJCWlmKHZhbGlkcmF0ZSAhPSByYXRlKQorCQkJcmV0dXJuKHJldCk7CisKKwkJZmllbGRfdmFsID0gb21hcDJfZ2V0X2Nsa3NlbCgmZGl2X3NlbCwgJmZpZWxkX21hc2ssIGNsayk7CisJCWlmIChkaXZfc2VsID09IDApCisJCQlyZXR1cm4gcmV0OworCisJCWlmKGNsay0+ZmxhZ3MgJiBDTV9TWVNDTEtPVVRfU0VMMSl7CisJCQlzd2l0Y2gobmV3X2Rpdil7CisJCQljYXNlIDE2OiBmaWVsZF92YWwgPSA0OyBicmVhazsKKwkJCWNhc2UgODogIGZpZWxkX3ZhbCA9IDM7IGJyZWFrOworCQkJY2FzZSA0OiAgZmllbGRfdmFsID0gMjsgYnJlYWs7CisJCQljYXNlIDI6ICBmaWVsZF92YWwgPSAxOyBicmVhazsKKwkJCWNhc2UgMTogIGZpZWxkX3ZhbCA9IDA7IGJyZWFrOworCQkJfQorCQl9CisJCWVsc2UKKwkJCWZpZWxkX3ZhbCA9IG5ld19kaXY7CisKKwkJcmVnID0gKHZvaWQgX19pb21lbSAqKWRpdl9zZWw7CisKKwkJcmVnX3ZhbCA9IF9fcmF3X3JlYWRsKHJlZyk7CisJCXJlZ192YWwgJj0gfihmaWVsZF9tYXNrIDw8IGRpdl9vZmYpOworCQlyZWdfdmFsIHw9IChmaWVsZF92YWwgPDwgZGl2X29mZik7CisKKwkJX19yYXdfd3JpdGVsKHJlZ192YWwsIHJlZyk7CisJCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gZmllbGRfdmFsOworCisJCWlmIChjbGstPmZsYWdzICYgREVMQVlFRF9BUFApCisJCQlfX3Jhd193cml0ZWwoMHgxLCAodm9pZCBfX2lvbWVtICopJlBSQ01fQ0xLQ0ZHX0NUUkwpOworCQlyZXQgPSAwOworCX0gZWxzZSBpZiAoY2xrLT5zZXRfcmF0ZSAhPSAwKQorCQlyZXQgPSBjbGstPnNldF9yYXRlKGNsaywgcmF0ZSk7CisKKwlpZiAodW5saWtlbHkocmV0ID09IDAgJiYgKGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKSkKKwkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIENvbnZlcnRzIGVuY29kZWQgY29udHJvbCByZWdpc3RlciBhZGRyZXNzIGludG8gYSBmdWxsIGFkZHJlc3MgKi8KK3N0YXRpYyB1MzIgb21hcDJfZ2V0X3NyY19maWVsZCh1MzIgKnR5cGVfdG9fYWRkciwgdTMyIHJlZ19vZmZzZXQsCisJCQkgICAgICAgc3RydWN0IGNsayAqc3JjX2NsaywgdTMyICpmaWVsZF9tYXNrKQoreworCXUzMiB2YWwgPSB+MCwgc3JjX3JlZ19hZGRyID0gMCwgbWFzayA9IDA7CisKKwkvKiBGaW5kIHRhcmdldCBjb250cm9sIHJlZ2lzdGVyLiovCisJc3dpdGNoICgoKnR5cGVfdG9fYWRkciAmIFNSQ19SQVRFX1NFTF9NQVNLKSkgeworCWNhc2UgQ01fQ09SRV9TRUwxOgorCQlzcmNfcmVnX2FkZHIgPSAodTMyKSZDTV9DTEtTRUwxX0NPUkU7CisJCWlmIChyZWdfb2Zmc2V0ID09IDEzKSB7CQkJLyogRFNTMl9mY2xrICovCisJCQltYXNrID0gMHgxOworCQkJaWYgKHNyY19jbGsgPT0gJnN5c19jaykKKwkJCQl2YWwgPSAwOworCQkJaWYgKHNyY19jbGsgPT0gJmZ1bmNfNDhtX2NrKQorCQkJCXZhbCA9IDE7CisJCX0gZWxzZSBpZiAocmVnX29mZnNldCA9PSA4KSB7CQkvKiBEU1MxX2ZjbGsgKi8KKwkJCW1hc2sgPSAweDFmOworCQkJaWYgKHNyY19jbGsgPT0gJnN5c19jaykKKwkJCQl2YWwgPSAwOworCQkJZWxzZSBpZiAoc3JjX2NsayA9PSAmY29yZV9jaykJLyogZGl2aWRlZCBjbG9jayAqLworCQkJCXZhbCA9IDB4MTA7CQkvKiByYXRlIG5lZWRzIGZpeGluZyAqLworCQl9IGVsc2UgaWYgKChyZWdfb2Zmc2V0ID09IDE1KSAmJiBjcHVfaXNfb21hcDI0MjAoKSl7IC8qdmxueXEqLworCQkJbWFzayA9IDB4MUY7CisJCQlpZihzcmNfY2xrID09ICZmdW5jXzk2bV9jaykKKwkJCQl2YWwgPSAwOworCQkJZWxzZSBpZiAoc3JjX2NsayA9PSAmY29yZV9jaykKKwkJCQl2YWwgPSAweDEwOworCQl9CisJCWJyZWFrOworCWNhc2UgQ01fQ09SRV9TRUwyOgorCQlzcmNfcmVnX2FkZHIgPSAodTMyKSZDTV9DTEtTRUwyX0NPUkU7CisJCW1hc2sgPSAweDM7CisJCWlmIChzcmNfY2xrID09ICZmdW5jXzMya19jaykKKwkJCXZhbCA9IDB4MDsKKwkJaWYgKHNyY19jbGsgPT0gJnN5c19jaykKKwkJCXZhbCA9IDB4MTsKKwkJaWYgKHNyY19jbGsgPT0gJmFsdF9jaykKKwkJCXZhbCA9IDB4MjsKKwkJYnJlYWs7CisJY2FzZSBDTV9XS1VQX1NFTDE6CisJCXNyY19yZWdfYWRkciA9ICh1MzIpJkNNX0NMS1NFTDJfQ09SRTsKKwkJbWFzayA9IDB4MzsKKwkJaWYgKHNyY19jbGsgPT0gJmZ1bmNfMzJrX2NrKQorCQkJdmFsID0gMHgwOworCQlpZiAoc3JjX2NsayA9PSAmc3lzX2NrKQorCQkJdmFsID0gMHgxOworCQlpZiAoc3JjX2NsayA9PSAmYWx0X2NrKQorCQkJdmFsID0gMHgyOworCQlicmVhazsKKwljYXNlIENNX1BMTF9TRUwxOgorCQlzcmNfcmVnX2FkZHIgPSAodTMyKSZDTV9DTEtTRUwxX1BMTDsKKwkJbWFzayA9IDB4MTsKKwkJaWYgKHJlZ19vZmZzZXQgPT0gMHgzKSB7CisJCQlpZiAoc3JjX2NsayA9PSAmYXBsbDk2X2NrKQorCQkJCXZhbCA9IDA7CisJCQlpZiAoc3JjX2NsayA9PSAmYWx0X2NrKQorCQkJCXZhbCA9IDE7CisJCX0KKwkJZWxzZSBpZiAocmVnX29mZnNldCA9PSAweDUpIHsKKwkJCWlmIChzcmNfY2xrID09ICZhcGxsNTRfY2spCisJCQkJdmFsID0gMDsKKwkJCWlmIChzcmNfY2xrID09ICZhbHRfY2spCisJCQkJdmFsID0gMTsKKwkJfQorCQlicmVhazsKKwljYXNlIENNX1BMTF9TRUwyOgorCQlzcmNfcmVnX2FkZHIgPSAodTMyKSZDTV9DTEtTRUwyX1BMTDsKKwkJbWFzayA9IDB4MzsKKwkJaWYgKHNyY19jbGsgPT0gJmZ1bmNfMzJrX2NrKQorCQkJdmFsID0gMHgwOworCQlpZiAoc3JjX2NsayA9PSAmZHBsbF9jaykKKwkJCXZhbCA9IDB4MjsKKwkJYnJlYWs7CisJY2FzZSBDTV9TWVNDTEtPVVRfU0VMMToKKwkJc3JjX3JlZ19hZGRyID0gKHUzMikmUFJDTV9DTEtPVVRfQ1RSTDsKKwkJbWFzayA9IDB4MzsKKwkJaWYgKHNyY19jbGsgPT0gJmRwbGxfY2spCisJCQl2YWwgPSAwOworCQlpZiAoc3JjX2NsayA9PSAmc3lzX2NrKQorCQkJdmFsID0gMTsKKwkJaWYgKHNyY19jbGsgPT0gJmZ1bmNfNTRtX2NrKQorCQkJdmFsID0gMjsKKwkJaWYgKHNyY19jbGsgPT0gJmZ1bmNfOTZtX2NrKQorCQkJdmFsID0gMzsKKwkJYnJlYWs7CisJfQorCisJaWYgKHZhbCA9PSB+MCkJCQkvKiBDYXRjaCBlcnJvcnMgaW4gb2Zmc2V0ICovCisJCSp0eXBlX3RvX2FkZHIgPSAwOworCWVsc2UKKwkJKnR5cGVfdG9fYWRkciA9IHNyY19yZWdfYWRkcjsKKwkqZmllbGRfbWFzayA9IG1hc2s7CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW50IG9tYXAyX2Nsa19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqbmV3X3BhcmVudCkKK3sKKwl2b2lkIF9faW9tZW0gKiByZWc7CisJdTMyIHNyY19zZWwsIHNyY19vZmYsIGZpZWxkX3ZhbCwgZmllbGRfbWFzaywgcmVnX3ZhbCwgcmF0ZTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmICh1bmxpa2VseShjbGstPmZsYWdzICYgQ09ORklHX1BBUlRJQ0lQQU5UKSkKKwkJcmV0dXJuIHJldDsKKworCWlmIChjbGstPmZsYWdzICYgU1JDX1NFTF9NQVNLKSB7CS8qIE9uLWNoaXAgU0VMIGNvbGxlY3Rpb24gKi8KKwkJc3JjX3NlbCA9IChTUkNfUkFURV9TRUxfTUFTSyAmIGNsay0+ZmxhZ3MpOworCQlzcmNfb2ZmID0gY2xrLT5zcmNfb2Zmc2V0OworCisJCWlmIChzcmNfc2VsID09IDApCisJCQlnb3RvIHNldF9wYXJlbnRfZXJyb3I7CisKKwkJZmllbGRfdmFsID0gb21hcDJfZ2V0X3NyY19maWVsZCgmc3JjX3NlbCwgc3JjX29mZiwgbmV3X3BhcmVudCwKKwkJCQkJCSZmaWVsZF9tYXNrKTsKKworCQlyZWcgPSAodm9pZCBfX2lvbWVtICopc3JjX3NlbDsKKworCQlpZiAoY2xrLT51c2Vjb3VudCA+IDApCisJCQlvbWFwMl9jbGtfZGlzYWJsZShjbGspOworCisJCS8qIFNldCBuZXcgc291cmNlIHZhbHVlIChwcmV2aW91cyBkaXZpZGVycyBpZiBhbnkgaW4gZWZmZWN0KSAqLworCQlyZWdfdmFsID0gX19yYXdfcmVhZGwocmVnKSAmIH4oZmllbGRfbWFzayA8PCBzcmNfb2ZmKTsKKwkJcmVnX3ZhbCB8PSAoZmllbGRfdmFsIDw8IHNyY19vZmYpOworCQlfX3Jhd193cml0ZWwocmVnX3ZhbCwgcmVnKTsKKworCQlpZiAoY2xrLT5mbGFncyAmIERFTEFZRURfQVBQKQorCQkJX19yYXdfd3JpdGVsKDB4MSwgKHZvaWQgX19pb21lbSAqKSZQUkNNX0NMS0NGR19DVFJMKTsKKworCQlpZiAoY2xrLT51c2Vjb3VudCA+IDApCisJCQlvbWFwMl9jbGtfZW5hYmxlKGNsayk7CisKKwkJY2xrLT5wYXJlbnQgPSBuZXdfcGFyZW50OworCisJCS8qIFNSQ19SQVRFX1NFTF9NQVNLIGNsb2NrcyBmb2xsb3cgdGhlaXIgcGFyZW50cyByYXRlcy4qLworCQlpZiAoKG5ld19wYXJlbnQgPT0gJmNvcmVfY2spICYmIChjbGsgPT0gJmRzczFfZmNrKSkKKwkJCWNsay0+cmF0ZSA9IG5ld19wYXJlbnQtPnJhdGUgLyAweDEwOworCQllbHNlCisJCQljbGstPnJhdGUgPSBuZXdfcGFyZW50LT5yYXRlOworCisJCWlmICh1bmxpa2VseShjbGstPmZsYWdzICYgUkFURV9QUk9QQUdBVEVTKSkKKwkJCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJY2xrLT5wYXJlbnQgPSBuZXdfcGFyZW50OworCQlyYXRlID0gbmV3X3BhcmVudC0+cmF0ZTsKKwkJb21hcDJfY2xrX3NldF9yYXRlKGNsaywgcmF0ZSk7CisJCXJldCA9IDA7CisJfQorCisgc2V0X3BhcmVudF9lcnJvcjoKKwlyZXR1cm4gcmV0OworfQorCisvKiBTZXRzIGJhc2ljIGNsb2NrcyBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHJhdGUgKi8KK3N0YXRpYyBpbnQgb21hcDJfc2VsZWN0X3RhYmxlX3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXUzMiBmbGFncywgY3VyX3JhdGUsIGRvbmVfcmF0ZSwgYnlwYXNzID0gMDsKKwl1OCBjcHVfbWFzayA9IDA7CisJc3RydWN0IHByY21fY29uZmlnICpwcmNtOworCXVuc2lnbmVkIGxvbmcgZm91bmRfc3BlZWQgPSAwOworCisJaWYgKGNsayAhPSAmdmlydF9wcmNtX3NldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBGSVhNRTogQ2hhbmdlIGNwdV9pc19vbWFwMjQyMCgpIHRvIGNwdV9pc19vbWFwMjQyeCgpICovCisJaWYgKGNwdV9pc19vbWFwMjQyMCgpKQorCQljcHVfbWFzayA9IFJBVEVfSU5fMjQyWDsKKwllbHNlIGlmIChjcHVfaXNfb21hcDI0MzAoKSkKKwkJY3B1X21hc2sgPSBSQVRFX0lOXzI0M1g7CisKKwlmb3IgKHByY20gPSByYXRlX3RhYmxlOyBwcmNtLT5tcHVfc3BlZWQ7IHByY20rKykgeworCQlpZiAoIShwcmNtLT5mbGFncyAmIGNwdV9tYXNrKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwcmNtLT54dGFsX3NwZWVkICE9IHN5c19jay5yYXRlKQorCQkJY29udGludWU7CisKKwkJaWYgKHByY20tPm1wdV9zcGVlZCA8PSByYXRlKSB7CisJCQlmb3VuZF9zcGVlZCA9IHByY20tPm1wdV9zcGVlZDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFmb3VuZF9zcGVlZCkgeworCQlwcmludGsoS0VSTl9JTkZPICJDb3VsZCBub3Qgc2V0IE1QVSByYXRlIHRvICVsdU1IelxuIiwKKwkgcmF0ZSAvIDEwMDAwMDApOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljdXJyX3ByY21fc2V0ID0gcHJjbTsKKwljdXJfcmF0ZSA9IG9tYXAyX2dldF9kcGxsX3JhdGUoJmRwbGxfY2spOworCisJaWYgKHByY20tPmRwbGxfc3BlZWQgPT0gY3VyX3JhdGUgLyAyKSB7CisJCW9tYXAyX3JlcHJvZ3JhbV9zZHJjKFBSQ01fSEFMRl9TUEVFRCwgMSk7CisJfSBlbHNlIGlmIChwcmNtLT5kcGxsX3NwZWVkID09IGN1cl9yYXRlICogMikgeworCQlvbWFwMl9yZXByb2dyYW1fc2RyYyhQUkNNX0ZVTExfU1BFRUQsIDEpOworCX0gZWxzZSBpZiAocHJjbS0+ZHBsbF9zcGVlZCAhPSBjdXJfcmF0ZSkgeworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkJaWYgKHByY20tPmRwbGxfc3BlZWQgPT0gcHJjbS0+eHRhbF9zcGVlZCkKKwkJCWJ5cGFzcyA9IDE7CisKKwkJaWYgKChwcmNtLT5jbV9jbGtzZWwyX3BsbCAmIDB4MykgPT0gMikKKwkJCWRvbmVfcmF0ZSA9IFBSQ01fRlVMTF9TUEVFRDsKKwkJZWxzZQorCQkJZG9uZV9yYXRlID0gUFJDTV9IQUxGX1NQRUVEOworCisJCS8qIE1QVSBkaXZpZGVyICovCisJCUNNX0NMS1NFTF9NUFUgPSBwcmNtLT5jbV9jbGtzZWxfbXB1OworCisJCS8qIGRzcCArIGl2YTEgZGl2KDI0MjApLCBpdmEyLjEoMjQzMCkgKi8KKwkJQ01fQ0xLU0VMX0RTUCA9IHByY20tPmNtX2Nsa3NlbF9kc3A7CisKKwkJQ01fQ0xLU0VMX0dGWCA9IHByY20tPmNtX2Nsa3NlbF9nZng7CisKKwkJLyogTWFqb3Igc3Vic3lzdGVtIGRpdmlkZXJzICovCisJCUNNX0NMS1NFTDFfQ09SRSA9IHByY20tPmNtX2Nsa3NlbDFfY29yZTsKKwkJaWYgKGNwdV9pc19vbWFwMjQzMCgpKQorCQkJQ01fQ0xLU0VMX01ETSA9IHByY20tPmNtX2Nsa3NlbF9tZG07CisKKwkJLyogeDIgdG8gZW50ZXIgaW5pdF9tZW0gKi8KKwkJb21hcDJfcmVwcm9ncmFtX3NkcmMoUFJDTV9GVUxMX1NQRUVELCAxKTsKKworCQlvbWFwMl9zZXRfcHJjbShwcmNtLT5jbV9jbGtzZWwxX3BsbCwgcHJjbS0+YmFzZV9zZHJjX3JmciwKKwkJCSAgICAgICBieXBhc3MpOworCisJCW9tYXAyX2luaXRfbWVtb3J5X3BhcmFtcyhvbWFwMl9kbGxfZm9yY2VfbmVlZGVkKCkpOworCQlvbWFwMl9yZXByb2dyYW1fc2RyYyhkb25lX3JhdGUsIDApOworCisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9CisJb21hcDJfY2xrc2VsX3JlY2FsYygmZHBsbF9jayk7CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBPbWFwMiBjbG9jayByZXNldCBhbmQgaW5pdCBmdW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Z1bmN0aW9ucyBvbWFwMl9jbGtfZnVuY3Rpb25zID0geworCS5jbGtfZW5hYmxlCQk9IG9tYXAyX2Nsa19lbmFibGUsCisJLmNsa19kaXNhYmxlCQk9IG9tYXAyX2Nsa19kaXNhYmxlLAorCS5jbGtfdXNlCQk9IG9tYXAyX2Nsa191c2UsCisJLmNsa191bnVzZQkJPSBvbWFwMl9jbGtfdW51c2UsCisJLmNsa19yb3VuZF9yYXRlCQk9IG9tYXAyX2Nsa19yb3VuZF9yYXRlLAorCS5jbGtfc2V0X3JhdGUJCT0gb21hcDJfY2xrX3NldF9yYXRlLAorCS5jbGtfc2V0X3BhcmVudAkJPSBvbWFwMl9jbGtfc2V0X3BhcmVudCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwMl9nZXRfY3J5c3RhbF9yYXRlKHN0cnVjdCBjbGsgKm9zYywgc3RydWN0IGNsayAqc3lzKQoreworCXUzMiBkaXYsIGFwbGxzLCBzY2xrID0gMTMwMDAwMDA7CisKKwlhcGxscyA9IENNX0NMS1NFTDFfUExMOworCWFwbGxzICY9ICgoMSA8PCAyMykgfCAoMSA8PCAyNCkgfCAoMSA8PCAyNSkpOworCWFwbGxzID4+PSAyMzsJCQkvKiBJc29sYXRlIGZpZWxkLCAwLDIsMyAqLworCisJaWYgKGFwbGxzID09IDApCisJCXNjbGsgPSAxOTIwMDAwMDsKKwllbHNlIGlmIChhcGxscyA9PSAyKQorCQlzY2xrID0gMTMwMDAwMDA7CisJZWxzZSBpZiAoYXBsbHMgPT0gMykKKwkJc2NsayA9IDEyMDAwMDAwOworCisJZGl2ID0gUFJDTV9DTEtTUkNfQ1RSTDsKKwlkaXYgJj0gKCgxIDw8IDcpIHwgKDEgPDwgNikpOworCWRpdiA+Pj0gc3lzLT5yYXRlX29mZnNldDsKKworCW9zYy0+cmF0ZSA9IHNjbGsgKiBkaXY7CisJc3lzLT5yYXRlID0gc2NsazsKK30KKworI2lmZGVmIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUworc3RhdGljIHZvaWQgX19pbml0IG9tYXAyX2Rpc2FibGVfdW51c2VkX2Nsb2Nrcyh2b2lkKQoreworCXN0cnVjdCBjbGsgKmNrOworCXUzMiByZWd2YWwzMjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2ssICZjbG9ja3MsIG5vZGUpIHsKKwkJaWYgKGNrLT51c2Vjb3VudCA+IDAgfHwgKGNrLT5mbGFncyAmIEFMV0FZU19FTkFCTEVEKSB8fAorCQkJY2stPmVuYWJsZV9yZWcgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCXJlZ3ZhbDMyID0gX19yYXdfcmVhZGwoY2stPmVuYWJsZV9yZWcpOworCQlpZiAoKHJlZ3ZhbDMyICYgKDEgPDwgY2stPmVuYWJsZV9iaXQpKSA9PSAwKQorCQkJY29udGludWU7CisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRGlzYWJsaW5nIHVudXNlZCBjbG9jayBcIiVzXCJcbiIsIGNrLT5uYW1lKTsKKwkJb21hcDJfY2xrX2Rpc2FibGUoY2spOworCX0KK30KK2xhdGVfaW5pdGNhbGwob21hcDJfZGlzYWJsZV91bnVzZWRfY2xvY2tzKTsKKyNlbmRpZgorCisvKgorICogU3dpdGNoIHRoZSBNUFUgcmF0ZSBpZiBzcGVjaWZpZWQgb24gY21kbGluZS4KKyAqIFdlIGNhbm5vdCBkbyB0aGlzIGVhcmx5IHVudGlsIGNtZGxpbmUgaXMgcGFyc2VkLgorICovCitzdGF0aWMgaW50IF9faW5pdCBvbWFwMl9jbGtfYXJjaF9pbml0KHZvaWQpCit7CisJaWYgKCFtcHVyYXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChvbWFwMl9zZWxlY3RfdGFibGVfcmF0ZSgmdmlydF9wcmNtX3NldCwgbXB1cmF0ZSkpCisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGZpbmQgbWF0Y2hpbmcgTVBVIHJhdGVcbiIpOworCisJcHJvcGFnYXRlX3JhdGUoJm9zY19jayk7CQkvKiB1cGRhdGUgbWFpbiByb290IGZhc3QgKi8KKwlwcm9wYWdhdGVfcmF0ZSgmZnVuY18zMmtfY2spOwkJLyogdXBkYXRlIG1haW4gcm9vdCBzbG93ICovCisKKwlwcmludGsoS0VSTl9JTkZPICJTd2l0Y2hlZCB0byBuZXcgY2xvY2tpbmcgcmF0ZSAoQ3J5c3RhbC9EUExML01QVSk6ICIKKwkgICAgICAgIiVsZC4lMDFsZC8lbGQvJWxkIE1IelxuIiwKKwkgICAgICAgKHN5c19jay5yYXRlIC8gMTAwMDAwMCksIChzeXNfY2sucmF0ZSAvIDEwMDAwMCkgJSAxMCwKKwkgICAgICAgKGRwbGxfY2sucmF0ZSAvIDEwMDAwMDApLCAobXB1X2NrLnJhdGUgLyAxMDAwMDAwKSkgOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKG9tYXAyX2Nsa19hcmNoX2luaXQpOworCitpbnQgX19pbml0IG9tYXAyX2Nsa19pbml0KHZvaWQpCit7CisJc3RydWN0IHByY21fY29uZmlnICpwcmNtOworCXN0cnVjdCBjbGsgKiogY2xrcDsKKwl1MzIgY2xrcmF0ZTsKKworCWNsa19pbml0KCZvbWFwMl9jbGtfZnVuY3Rpb25zKTsKKwlvbWFwMl9nZXRfY3J5c3RhbF9yYXRlKCZvc2NfY2ssICZzeXNfY2spOworCisJZm9yIChjbGtwID0gb25jaGlwX2Nsa3M7IGNsa3AgPCBvbmNoaXBfY2xrcyArIEFSUkFZX1NJWkUob25jaGlwX2Nsa3MpOworCSAgICAgY2xrcCsrKSB7CisKKwkJaWYgKCgqY2xrcCktPmZsYWdzICYgQ0xPQ0tfSU5fT01BUDI0MlggJiYgY3B1X2lzX29tYXAyNDIwKCkpIHsKKwkJCWNsa19yZWdpc3RlcigqY2xrcCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICgoKmNsa3ApLT5mbGFncyAmIENMT0NLX0lOX09NQVAyNDNYICYmIGNwdV9pc19vbWFwMjQzMCgpKSB7CisJCQljbGtfcmVnaXN0ZXIoKmNsa3ApOworCQkJY29udGludWU7CisJCX0KKwl9CisKKwkvKiBDaGVjayB0aGUgTVBVIHJhdGUgc2V0IGJ5IGJvb3Rsb2FkZXIgKi8KKwljbGtyYXRlID0gb21hcDJfZ2V0X2RwbGxfcmF0ZSgmZHBsbF9jayk7CisJZm9yIChwcmNtID0gcmF0ZV90YWJsZTsgcHJjbS0+bXB1X3NwZWVkOyBwcmNtKyspIHsKKwkJaWYgKHByY20tPnh0YWxfc3BlZWQgIT0gc3lzX2NrLnJhdGUpCisJCQljb250aW51ZTsKKwkJaWYgKHByY20tPmRwbGxfc3BlZWQgPD0gY2xrcmF0ZSkKKwkJCSBicmVhazsKKwl9CisJY3Vycl9wcmNtX3NldCA9IHByY207CisKKwlwcm9wYWdhdGVfcmF0ZSgmb3NjX2NrKTsJCS8qIHVwZGF0ZSBtYWluIHJvb3QgZmFzdCAqLworCXByb3BhZ2F0ZV9yYXRlKCZmdW5jXzMya19jayk7CQkvKiB1cGRhdGUgbWFpbiByb290IHNsb3cgKi8KKworCXByaW50ayhLRVJOX0lORk8gIkNsb2NraW5nIHJhdGUgKENyeXN0YWwvRFBMTC9NUFUpOiAiCisJICAgICAgICIlbGQuJTAxbGQvJWxkLyVsZCBNSHpcbiIsCisJICAgICAgIChzeXNfY2sucmF0ZSAvIDEwMDAwMDApLCAoc3lzX2NrLnJhdGUgLyAxMDAwMDApICUgMTAsCisJICAgICAgIChkcGxsX2NrLnJhdGUgLyAxMDAwMDAwKSwgKG1wdV9jay5yYXRlIC8gMTAwMDAwMCkpIDsKKworCS8qCisJICogT25seSBlbmFibGUgdGhvc2UgY2xvY2tzIHdlIHdpbGwgbmVlZCwgbGV0IHRoZSBkcml2ZXJzCisJICogZW5hYmxlIG90aGVyIGNsb2NrcyBhcyBuZWNlc3NhcnkKKwkgKi8KKwljbGtfdXNlKCZzeW5jXzMya19pY2spOworCWNsa191c2UoJm9tYXBjdHJsX2ljayk7CisJaWYgKGNwdV9pc19vbWFwMjQzMCgpKQorCQljbGtfdXNlKCZzZHJjX2ljayk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWVhYjU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCkBAIC0wLDAgKzEsMjEwMyBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyNHh4L2Nsb2NrLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1IFRleGFzIEluc3RydW1lbnRzIEluYy4KKyAqICBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKiAgQ3JlYXRlZCBmb3IgT01BUDIuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBOb2tpYSBjb3Jwb3JhdGlvbgorICogIFdyaXR0ZW4gYnkgVHV1a2thIFRpa2thbmVuIDx0dXVra2EudGlra2FuZW5AZWxla3Ryb2JpdC5jb20+CisgKiAgQmFzZWQgb24gY2xvY2tzLmggYnkgVG9ueSBMaW5kZ3JlbiwgR29yZG9uIE1jTnV0dCBhbmQgUmlkZ2VSdW4sIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0tfSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0tfSAorCitzdGF0aWMgdm9pZCBvbWFwMl9zeXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyB2b2lkIG9tYXAyX2Nsa3NlbF9yZWNhbGMoc3RydWN0IGNsayAqIGNsayk7CitzdGF0aWMgdm9pZCBvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIHZvaWQgb21hcDJfcHJvcGFnYXRlX3JhdGUoc3RydWN0IGNsayAqIGNsayk7CitzdGF0aWMgdm9pZCBvbWFwMl9tcHVfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIGludCBvbWFwMl9zZWxlY3RfdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICogY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOworc3RhdGljIGxvbmcgb21hcDJfcm91bmRfdG9fdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICogY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOworc3RhdGljIHZvaWQgb21hcDJfY2xrX3VudXNlKHN0cnVjdCBjbGsgKmNsayk7CitzdGF0aWMgdm9pZCBvbWFwMl9zeXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyB1MzIgb21hcDJfY2xrc2VsX3RvX2Rpdmlzb3IodTMyIGRpdl9zZWwsIHUzMiBmaWVsZF92YWwpOworc3RhdGljIHUzMiBvbWFwMl9jbGtzZWxfZ2V0X2Rpdmlzb3Ioc3RydWN0IGNsayAqY2xrKTsKKworCisjZGVmaW5lIFJBVEVfSU5fMjQyWAkoMSA8PCAwKQorI2RlZmluZSBSQVRFX0lOXzI0M1gJKDEgPDwgMSkKKworLyogTWVtb3J5IHRpbWluZ3MgKi8KKyNkZWZpbmUgTV9ERFIJCTEKKyNkZWZpbmUgTV9MT0NLX0NUUkwJKDEgPDwgMikKKyNkZWZpbmUgTV9VTkxPQ0sJMAorI2RlZmluZSBNX0xPQ0sJCTEKKworc3RydWN0IG1lbW9yeV90aW1pbmdzIHsKKwl1MzIgbV90eXBlOwkJLyogZGRyID0gMSwgc2RyID0gMCAqLworCXUzMiBkbGxfbW9kZTsJCS8qIHVzZSBsb2NrIG1vZGUgPSAxLCB1bmxvY2sgbW9kZSA9IDAgKi8KKwl1MzIgc2xvd19kbGxfY3RybDsJLyogdW5sb2NrIG1vZGUsIGRsbCB2YWx1ZSBmb3Igc2xvdyBzcGVlZCAqLworCXUzMiBmYXN0X2RsbF9jdHJsOwkvKiB1bmxvY2sgbW9kZSwgZGxsIHZhbHVlIGZvciBmYXN0IHNwZWVkICovCisJdTMyIGJhc2VfY3M7CQkvKiBiYXNlIGNoaXAgc2VsZWN0IHRvIHVzZSBmb3IgY2FsY3VsYXRpb25zICovCit9OworCisvKiBLZXkgZGl2aWRlcnMgd2hpY2ggbWFrZSB1cCBhIFBSQ00gc2V0LiBSYXRpbydzIGZvciBhIFBSQ00gYXJlIG1hbmRhdGVkLgorICogeHRhbF9zcGVlZCwgZHBsbF9zcGVlZCwgbXB1X3NwZWVkLCBDTV9DTEtTRUxfTVBVLENNX0NMS1NFTF9EU1AKKyAqIENNX0NMS1NFTF9HRlgsIENNX0NMS1NFTDFfQ09SRSwgQ01fQ0xLU0VMMV9QTEwgQ01fQ0xLU0VMMl9QTEwsIENNX0NMS1NFTF9NRE0KKyAqLworc3RydWN0IHByY21fY29uZmlnIHsKKwl1bnNpZ25lZCBsb25nIHh0YWxfc3BlZWQ7CS8qIGNyeXN0YWwgcmF0ZSAqLworCXVuc2lnbmVkIGxvbmcgZHBsbF9zcGVlZDsJLyogZHBsbDogb3V0Knh0YWwqTS8oTi0xKXRhYmxlX3JlY2FsYyAqLworCXVuc2lnbmVkIGxvbmcgbXB1X3NwZWVkOwkvKiBzcGVlZCBvZiBNUFUgKi8KKwl1bnNpZ25lZCBsb25nIGNtX2Nsa3NlbF9tcHU7CS8qIG1wdSBkaXZpZGVyICovCisJdW5zaWduZWQgbG9uZyBjbV9jbGtzZWxfZHNwOwkvKiBkc3AraXZhMSBkaXYoMjQyMCksIGl2YTIuMSgyNDMwKSAqLworCXVuc2lnbmVkIGxvbmcgY21fY2xrc2VsX2dmeDsJLyogZ2Z4IGRpdmlkZXJzICovCisJdW5zaWduZWQgbG9uZyBjbV9jbGtzZWwxX2NvcmU7CS8qIG1ham9yIHN1YnN5c3RlbSBkaXZpZGVycyAqLworCXVuc2lnbmVkIGxvbmcgY21fY2xrc2VsMV9wbGw7CS8qIG0sbiAqLworCXVuc2lnbmVkIGxvbmcgY21fY2xrc2VsMl9wbGw7CS8qIGRwbGx4MSBvciB4MiBvdXQgKi8KKwl1bnNpZ25lZCBsb25nIGNtX2Nsa3NlbF9tZG07CS8qIG1vZGVtIGRpdmlkZXJzIDI0MzAgb25seSAqLworCXVuc2lnbmVkIGxvbmcgYmFzZV9zZHJjX3JmcjsJLyogYmFzZSByZWZyZXNoIHRpbWluZyBmb3IgYSBzZXQgKi8KKwl1bnNpZ25lZCBjaGFyIGZsYWdzOworfTsKKworLyogTWFzayBmb3IgY2xrc2VsIHdoaWNoIHN1cHBvcnQgcGFyZW50IHNldHRpZ24gaW4gc2V0X3JhdGUgKi8KKyNkZWZpbmUgU1JDX1NFTF9NQVNLIChDTV9DT1JFX1NFTDEgfCBDTV9DT1JFX1NFTDIgfCBDTV9XS1VQX1NFTDEgfCBcCisJCQlDTV9QTExfU0VMMSB8IENNX1BMTF9TRUwyIHwgQ01fU1lTQ0xLT1VUX1NFTDEpCisKKy8qIE1hc2sgZm9yIGNsa3NlbCByZWdzIHdoaWNoIHN1cHBvcnQgcmF0ZSBvcGVyYXRpb25zICovCisjZGVmaW5lIFNSQ19SQVRFX1NFTF9NQVNLIChDTV9NUFVfU0VMMSB8IENNX0RTUF9TRUwxIHwgQ01fR0ZYX1NFTDEgfCBcCisJCQlDTV9NT0RFTV9TRUwxIHwgQ01fQ09SRV9TRUwxIHwgQ01fQ09SRV9TRUwyIHwgXAorCQkJQ01fV0tVUF9TRUwxIHwgQ01fUExMX1NFTDEgfCBDTV9QTExfU0VMMiB8IFwKKwkJCUNNX1NZU0NMS09VVF9TRUwxKQorCisvKgorICogVGhlIE9NQVAyIHByb2Nlc3NvciBjYW4gYmUgcnVuIGF0IHNldmVyYWwgZGlzY3JldGUgJ1BSQ00gY29uZmlndXJhdGlvbnMnLgorICogVGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIGNoYXJhY3Rlcml6ZWQgYnkgdm9sdGFnZSBhbmQgc3BlZWQgZm9yIGNsb2Nrcy4KKyAqIFRoZSBkZXZpY2UgaXMgb25seSB2YWxpZGF0ZWQgZm9yIGNlcnRhaW4gY29tYmluYXRpb25zLiBPbmUgd2F5IHRvIGV4cHJlc3MKKyAqIHRoZXNlIGNvbWJpbmF0aW9ucyBpcyB2aWEgdGhlICdyYXRpbydzJyB3aGljaCB0aGUgY2xvY2tzIG9wZXJhdGUgd2l0aAorICogcmVzcGVjdCB0byBlYWNoIG90aGVyLiBUaGVzZSByYXRpbyBzZXRzIGFyZSBmb3IgYSBnaXZlbiB2b2x0YWdlL0RQTEwKKyAqIHNldHRpbmcuIEFsbCBjb25maWd1cmF0aW9ucyBjYW4gYmUgZGVzY3JpYmVkIGJ5IGEgRFBMTCBzZXR0aW5nIGFuZCBhIHJhdGlvCisgKiBUaGVyZSBhcmUgMyByYXRpbyBzZXRzIGZvciB0aGUgMjQzMCBhbmQgWCByYXRpbyBzZXRzIGZvciAyNDIwLgorICoKKyAqIDI0MzAgZGlmZmVycyBmcm9tIDI0MjAgaW4gdGhhdCB0aGVyZSBhcmUgbm8gbW9yZSBwaGFzZSBzeW5jaHJvbml6ZXJzIHVzZWQuCisgKiBUaGV5IGJvdGggaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCBjbG9jayBkb21haW4gc2V0dXAuIDI0MjAoaXZhMSxkc3ApIHZzCisgKiAyNDMwIChpdmEyLjEsIE5PZHNwLCBtZG0pCisgKi8KKworLyogQ29yZSBmaWVsZHMgZm9yIGNtX2Nsa3NlbCwgbm90IHJhdGlvIGdvdmVybmVkICovCisjZGVmaW5lIFJYX0NMS1NFTF9EU1MxCQkJKDB4MTAgPDwgOCkKKyNkZWZpbmUgUlhfQ0xLU0VMX0RTUzIJCQkoMHgwIDw8IDEzKQorI2RlZmluZSBSWF9DTEtTRUxfU1NJCQkJKDB4NSA8PCAyMCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBWb2x0YWdlL0RQTEwgcmF0aW9zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiAyNDMwIFJhdGlvJ3MsIDI0MzAtUmF0aW8gQ29uZmlnIDEgKi8KKyNkZWZpbmUgUjFfQ0xLU0VMX0wzCQkJKDQgPDwgMCkKKyNkZWZpbmUgUjFfQ0xLU0VMX0w0CQkJKDIgPDwgNSkKKyNkZWZpbmUgUjFfQ0xLU0VMX1VTQgkJCSg0IDw8IDI1KQorI2RlZmluZSBSMV9DTV9DTEtTRUwxX0NPUkVfVkFMCQlSMV9DTEtTRUxfVVNCIHwgUlhfQ0xLU0VMX1NTSSB8IFwKKwkJCQkJUlhfQ0xLU0VMX0RTUzIgfCBSWF9DTEtTRUxfRFNTMSB8IFwKKwkJCQkJUjFfQ0xLU0VMX0w0IHwgUjFfQ0xLU0VMX0wzCisjZGVmaW5lIFIxX0NMS1NFTF9NUFUJCQkoMiA8PCAwKQorI2RlZmluZSBSMV9DTV9DTEtTRUxfTVBVX1ZBTAkJUjFfQ0xLU0VMX01QVQorI2RlZmluZSBSMV9DTEtTRUxfRFNQCQkJKDIgPDwgMCkKKyNkZWZpbmUgUjFfQ0xLU0VMX0RTUF9JRgkJKDIgPDwgNSkKKyNkZWZpbmUgUjFfQ01fQ0xLU0VMX0RTUF9WQUwJCVIxX0NMS1NFTF9EU1AgfCBSMV9DTEtTRUxfRFNQX0lGCisjZGVmaW5lIFIxX0NMS1NFTF9HRlgJCQkoMiA8PCAwKQorI2RlZmluZSBSMV9DTV9DTEtTRUxfR0ZYX1ZBTAkJUjFfQ0xLU0VMX0dGWAorI2RlZmluZSBSMV9DTEtTRUxfTURNCQkJKDQgPDwgMCkKKyNkZWZpbmUgUjFfQ01fQ0xLU0VMX01ETV9WQUwJCVIxX0NMS1NFTF9NRE0KKworLyogMjQzMC1SYXRpbyBDb25maWcgMiAqLworI2RlZmluZSBSMl9DTEtTRUxfTDMJCQkoNiA8PCAwKQorI2RlZmluZSBSMl9DTEtTRUxfTDQJCQkoMiA8PCA1KQorI2RlZmluZSBSMl9DTEtTRUxfVVNCCQkJKDIgPDwgMjUpCisjZGVmaW5lIFIyX0NNX0NMS1NFTDFfQ09SRV9WQUwJCVIyX0NMS1NFTF9VU0IgfCBSWF9DTEtTRUxfU1NJIHwgXAorCQkJCQlSWF9DTEtTRUxfRFNTMiB8IFJYX0NMS1NFTF9EU1MxIHwgXAorCQkJCQlSMl9DTEtTRUxfTDQgfCBSMl9DTEtTRUxfTDMKKyNkZWZpbmUgUjJfQ0xLU0VMX01QVQkJCSgyIDw8IDApCisjZGVmaW5lIFIyX0NNX0NMS1NFTF9NUFVfVkFMCQlSMl9DTEtTRUxfTVBVCisjZGVmaW5lIFIyX0NMS1NFTF9EU1AJCQkoMiA8PCAwKQorI2RlZmluZSBSMl9DTEtTRUxfRFNQX0lGCQkoMyA8PCA1KQorI2RlZmluZSBSMl9DTV9DTEtTRUxfRFNQX1ZBTAkJUjJfQ0xLU0VMX0RTUCB8IFIyX0NMS1NFTF9EU1BfSUYKKyNkZWZpbmUgUjJfQ0xLU0VMX0dGWAkJCSgyIDw8IDApCisjZGVmaW5lIFIyX0NNX0NMS1NFTF9HRlhfVkFMCQlSMl9DTEtTRUxfR0ZYCisjZGVmaW5lIFIyX0NMS1NFTF9NRE0JCQkoNiA8PCAwKQorI2RlZmluZSBSMl9DTV9DTEtTRUxfTURNX1ZBTAkJUjJfQ0xLU0VMX01ETQorCisvKiAyNDMwLVJhdGlvIEJvb3RtIChCWVBBU1MpICovCisjZGVmaW5lIFJCX0NMS1NFTF9MMwkJCSgxIDw8IDApCisjZGVmaW5lIFJCX0NMS1NFTF9MNAkJCSgxIDw8IDUpCisjZGVmaW5lIFJCX0NMS1NFTF9VU0IJCQkoMSA8PCAyNSkKKyNkZWZpbmUgUkJfQ01fQ0xLU0VMMV9DT1JFX1ZBTAkJUkJfQ0xLU0VMX1VTQiB8IFJYX0NMS1NFTF9TU0kgfCBcCisJCQkJCVJYX0NMS1NFTF9EU1MyIHwgUlhfQ0xLU0VMX0RTUzEgfCBcCisJCQkJCVJCX0NMS1NFTF9MNCB8IFJCX0NMS1NFTF9MMworI2RlZmluZSBSQl9DTEtTRUxfTVBVCQkJKDEgPDwgMCkKKyNkZWZpbmUgUkJfQ01fQ0xLU0VMX01QVV9WQUwJCVJCX0NMS1NFTF9NUFUKKyNkZWZpbmUgUkJfQ0xLU0VMX0RTUAkJCSgxIDw8IDApCisjZGVmaW5lIFJCX0NMS1NFTF9EU1BfSUYJCSgxIDw8IDUpCisjZGVmaW5lIFJCX0NNX0NMS1NFTF9EU1BfVkFMCQlSQl9DTEtTRUxfRFNQIHwgUkJfQ0xLU0VMX0RTUF9JRgorI2RlZmluZSBSQl9DTEtTRUxfR0ZYCQkJKDEgPDwgMCkKKyNkZWZpbmUgUkJfQ01fQ0xLU0VMX0dGWF9WQUwJCVJCX0NMS1NFTF9HRlgKKyNkZWZpbmUgUkJfQ0xLU0VMX01ETQkJCSgxIDw8IDApCisjZGVmaW5lIFJCX0NNX0NMS1NFTF9NRE1fVkFMCQlSQl9DTEtTRUxfTURNCisKKy8qIDI0MjAgUmF0aW8gRXF1aXZhbGVudHMgKi8KKyNkZWZpbmUgUlhYX0NMS1NFTF9WTFlOUQkJKDB4MTIgPDwgMTUpCisjZGVmaW5lIFJYWF9DTEtTRUxfU1NJCQkJKDB4OCA8PCAyMCkKKworLyogMjQyMC1QUkNNIElJSSA1MzJNSHogY29yZSAqLworI2RlZmluZSBSSUlJX0NMS1NFTF9MMwkJCSg0IDw8IDApCS8qIDEzM01IeiAqLworI2RlZmluZSBSSUlJX0NMS1NFTF9MNAkJCSgyIDw8IDUpCS8qIDY2LjVNSHogKi8KKyNkZWZpbmUgUklJSV9DTEtTRUxfVVNCCQkJKDQgPDwgMjUpCS8qIDMzLjI1TUh6ICovCisjZGVmaW5lIFJJSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTAlSSUlJX0NMS1NFTF9VU0IgfCBSWFhfQ0xLU0VMX1NTSSB8IFwKKwkJCQkJUlhYX0NMS1NFTF9WTFlOUSB8IFJYX0NMS1NFTF9EU1MyIHwgXAorCQkJCQlSWF9DTEtTRUxfRFNTMSB8IFJJSUlfQ0xLU0VMX0w0IHwgXAorCQkJCQlSSUlJX0NMS1NFTF9MMworI2RlZmluZSBSSUlJX0NMS1NFTF9NUFUJCQkoMiA8PCAwKQkvKiAyNjZNSHogKi8KKyNkZWZpbmUgUklJSV9DTV9DTEtTRUxfTVBVX1ZBTAkJUklJSV9DTEtTRUxfTVBVCisjZGVmaW5lIFJJSUlfQ0xLU0VMX0RTUAkJCSgzIDw8IDApCS8qIGM1eCAtIDE3Ny4zTUh6ICovCisjZGVmaW5lIFJJSUlfQ0xLU0VMX0RTUF9JRgkJKDIgPDwgNSkJLyogYzV4IC0gODguNjdNSHogKi8KKyNkZWZpbmUgUklJSV9TWU5DX0RTUAkJCSgxIDw8IDcpCS8qIEVuYWJsZSBzeW5jICovCisjZGVmaW5lIFJJSUlfQ0xLU0VMX0lWQQkJCSg2IDw8IDgpCS8qIGl2YTEgLSA4OC42N01IeiAqLworI2RlZmluZSBSSUlJX1NZTkNfSVZBCQkJKDEgPDwgMTMpCS8qIEVuYWJsZSBzeW5jICovCisjZGVmaW5lIFJJSUlfQ01fQ0xLU0VMX0RTUF9WQUwJCVJJSUlfU1lOQ19JVkEgfCBSSUlJX0NMS1NFTF9JVkEgfCBcCisJCQkJCVJJSUlfU1lOQ19EU1AgfCBSSUlJX0NMS1NFTF9EU1BfSUYgfCBcCisJCQkJCVJJSUlfQ0xLU0VMX0RTUAorI2RlZmluZSBSSUlJX0NMS1NFTF9HRlgJCQkoMiA8PCAwKQkvKiA2Ni41TUh6ICovCisjZGVmaW5lIFJJSUlfQ01fQ0xLU0VMX0dGWF9WQUwJCVJJSUlfQ0xLU0VMX0dGWAorCisvKiAyNDIwLVBSQ00gSUkgNjAwTUh6IGNvcmUgKi8KKyNkZWZpbmUgUklJX0NMS1NFTF9MMwkJCSg2IDw8IDApCS8qIDEwME1IeiAqLworI2RlZmluZSBSSUlfQ0xLU0VMX0w0CQkJKDIgPDwgNSkJLyogNTBNSHogKi8KKyNkZWZpbmUgUklJX0NMS1NFTF9VU0IJCQkoMiA8PCAyNSkJLyogNTBNSHogKi8KKyNkZWZpbmUgUklJX0NNX0NMS1NFTDFfQ09SRV9WQUwJCVJJSV9DTEtTRUxfVVNCIHwgXAorCQkJCQlSWFhfQ0xLU0VMX1NTSSB8IFJYWF9DTEtTRUxfVkxZTlEgfCBcCisJCQkJCVJYX0NMS1NFTF9EU1MyIHwgUlhfQ0xLU0VMX0RTUzEgfCBcCisJCQkJCVJJSV9DTEtTRUxfTDQgfCBSSUlfQ0xLU0VMX0wzCisjZGVmaW5lIFJJSV9DTEtTRUxfTVBVCQkJKDIgPDwgMCkJLyogMzAwTUh6ICovCisjZGVmaW5lIFJJSV9DTV9DTEtTRUxfTVBVX1ZBTAkJUklJX0NMS1NFTF9NUFUKKyNkZWZpbmUgUklJX0NMS1NFTF9EU1AJCQkoMyA8PCAwKQkvKiBjNXggLSAyMDBNSHogKi8KKyNkZWZpbmUgUklJX0NMS1NFTF9EU1BfSUYJCSgyIDw8IDUpCS8qIGM1eCAtIDEwME1IeiAqLworI2RlZmluZSBSSUlfU1lOQ19EU1AJCQkoMCA8PCA3KQkvKiBCeXBhc3Mgc3luYyAqLworI2RlZmluZSBSSUlfQ0xLU0VMX0lWQQkJCSg2IDw8IDgpCS8qIGl2YTEgLSAyMDBNSHogKi8KKyNkZWZpbmUgUklJX1NZTkNfSVZBCQkJKDAgPDwgMTMpCS8qIEJ5cGFzcyBzeW5jICovCisjZGVmaW5lIFJJSV9DTV9DTEtTRUxfRFNQX1ZBTAkJUklJX1NZTkNfSVZBIHwgUklJX0NMS1NFTF9JVkEgfCBcCisJCQkJCVJJSV9TWU5DX0RTUCB8IFJJSV9DTEtTRUxfRFNQX0lGIHwgXAorCQkJCQlSSUlfQ0xLU0VMX0RTUAorI2RlZmluZSBSSUlfQ0xLU0VMX0dGWAkJCSgyIDw8IDApCS8qIDUwTUh6ICovCisjZGVmaW5lIFJJSV9DTV9DTEtTRUxfR0ZYX1ZBTAkJUklJX0NMS1NFTF9HRlgKKworLyogMjQyMC1QUkNNIFZJSSAoYm9vdCkgKi8KKyNkZWZpbmUgUlZJSV9DTEtTRUxfTDMJCQkoMSA8PCAwKQorI2RlZmluZSBSVklJX0NMS1NFTF9MNAkJCSgxIDw8IDUpCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0RTUzEJCSgxIDw8IDgpCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0RTUzIJCSgwIDw8IDEzKQorI2RlZmluZSBSVklJX0NMS1NFTF9WTFlOUQkJKDEgPDwgMTUpCisjZGVmaW5lIFJWSUlfQ0xLU0VMX1NTSQkJCSgxIDw8IDIwKQorI2RlZmluZSBSVklJX0NMS1NFTF9VU0IJCQkoMSA8PCAyNSkKKworI2RlZmluZSBSVklJX0NNX0NMS1NFTDFfQ09SRV9WQUwJUlZJSV9DTEtTRUxfVVNCIHwgUlZJSV9DTEtTRUxfU1NJIHwgXAorCQkJCQlSVklJX0NMS1NFTF9WTFlOUSB8IFJWSUlfQ0xLU0VMX0RTUzIgfCBcCisJCQkJCVJWSUlfQ0xLU0VMX0RTUzEgfCBSVklJX0NMS1NFTF9MNCB8IFJWSUlfQ0xLU0VMX0wzCisKKyNkZWZpbmUgUlZJSV9DTEtTRUxfTVBVCQkJKDEgPDwgMCkgLyogYWxsIGRpdmlkZSBieSAxICovCisjZGVmaW5lIFJWSUlfQ01fQ0xLU0VMX01QVV9WQUwJCVJWSUlfQ0xLU0VMX01QVQorCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0RTUAkJCSgxIDw8IDApCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0RTUF9JRgkJKDEgPDwgNSkKKyNkZWZpbmUgUlZJSV9TWU5DX0RTUAkJCSgwIDw8IDcpCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0lWQQkJCSgxIDw8IDgpCisjZGVmaW5lIFJWSUlfU1lOQ19JVkEJCQkoMCA8PCAxMykKKyNkZWZpbmUgUlZJSV9DTV9DTEtTRUxfRFNQX1ZBTAkJUlZJSV9TWU5DX0lWQSB8IFJWSUlfQ0xLU0VMX0lWQSB8IFJWSUlfU1lOQ19EU1AgfCBcCisJCQkJCVJWSUlfQ0xLU0VMX0RTUF9JRiB8IFJWSUlfQ0xLU0VMX0RTUAorCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0dGWAkJCSgxIDw8IDApCisjZGVmaW5lIFJWSUlfQ01fQ0xLU0VMX0dGWF9WQUwJCVJWSUlfQ0xLU0VMX0dGWAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIDI0MzAgVGFyZ2V0IG1vZGVzOiBBbG9uZyB3aXRoIGVhY2ggY29uZmlndXJhdGlvbiB0aGUgQ1BVIGhhcyBzZXZlcmFsCisgKiBtb2RlcyB3aGljaCBnb2VzIGFsb25nIHdpdGggdGhlbS4gTW9kZXMgbWFpbmx5IGFyZSB0aGUgYWRkaXRpb24gb2YKKyAqIGRlc2NyaWJlIERQTEwgY29tYmluYXRpb25zIHRvIGdvIGFsb25nIHdpdGggYSByYXRpby4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEhhcmR3YXJlIGdvdmVybmVkICovCisjZGVmaW5lIE1YXzQ4TV9TUkMJCQkoMCA8PCAzKQorI2RlZmluZSBNWF81NE1fU1JDCQkJKDAgPDwgNSkKKyNkZWZpbmUgTVhfQVBMTFNfQ0xJS0lOXzEyCQkoMyA8PCAyMykKKyNkZWZpbmUgTVhfQVBMTFNfQ0xJS0lOXzEzCQkoMiA8PCAyMykKKyNkZWZpbmUgTVhfQVBMTFNfQ0xJS0lOXzE5XzIJCSgwIDw8IDIzKQorCisvKgorICogMjQzMCAtIHN0YW5kYWxvbmUsIDIqcmVmKk0vKG4rMSksIE0vTiBpcyBmb3IgZXhhY3RuZXNzIG5vdCByZWxvY2sgc3BlZWQKKyAqICMyCShyYXRpbzEpIGJhc2Vwb3J0LXRhcmdldAorICogIzVhCShyYXRpbzEpIGJhc2Vwb3J0LXRhcmdldCwgdGFyZ2V0IERQTEwgPSAyNjYqMiA9IDUzMk1IegorICovCisjZGVmaW5lIE01QV9EUExMX01VTFRfMTIJCSgxMzMgPDwgMTIpCisjZGVmaW5lIE01QV9EUExMX0RJVl8xMgkJCSg1IDw8IDgpCisjZGVmaW5lIE01QV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCU01QV9EUExMX0RJVl8xMiB8IE01QV9EUExMX01VTFRfMTIgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xMgorI2RlZmluZSBNNUFfRFBMTF9NVUxUXzEzCQkoMjY2IDw8IDEyKQorI2RlZmluZSBNNUFfRFBMTF9ESVZfMTMJCQkoMTIgPDwgOCkKKyNkZWZpbmUgTTVBX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJTTVBX0RQTExfRElWXzEzIHwgTTVBX0RQTExfTVVMVF8xMyB8IFwKKwkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEzCisjZGVmaW5lIE01QV9EUExMX01VTFRfMTkJCSgxODAgPDwgMTIpCisjZGVmaW5lIE01QV9EUExMX0RJVl8xOQkJCSgxMiA8PCA4KQorI2RlZmluZSBNNUFfQ01fQ0xLU0VMMV9QTExfMTlfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNNUFfRFBMTF9ESVZfMTkgfCBNNUFfRFBMTF9NVUxUXzE5IHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTlfMgorLyogIzViCShyYXRpbzEpIHRhcmdldCBEUExMID0gMjAwKjIgPSA0MDBNSHogKi8KKyNkZWZpbmUgTTVCX0RQTExfTVVMVF8xMgkJKDUwIDw8IDEyKQorI2RlZmluZSBNNUJfRFBMTF9ESVZfMTIJCQkoMiA8PCA4KQorI2RlZmluZSBNNUJfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNNUJfRFBMTF9ESVZfMTIgfCBNNUJfRFBMTF9NVUxUXzEyIHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTIKKyNkZWZpbmUgTTVCX0RQTExfTVVMVF8xMwkJKDIwMCA8PCAxMikKKyNkZWZpbmUgTTVCX0RQTExfRElWXzEzCQkJKDEyIDw8IDgpCisKKyNkZWZpbmUgTTVCX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJTTVCX0RQTExfRElWXzEzIHwgTTVCX0RQTExfTVVMVF8xMyB8IFwKKwkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEzCisjZGVmaW5lIE01Ql9EUExMX01VTFRfMTkJCSgxMjUgPDwgMTIpCisjZGVmaW5lIE01Ql9EUExMX0RJVl8xOQkJCSgzMSA8PCA4KQorI2RlZmluZSBNNUJfQ01fQ0xLU0VMMV9QTExfMTlfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNNUJfRFBMTF9ESVZfMTkgfCBNNUJfRFBMTF9NVUxUXzE5IHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTlfMgorLyoKKyAqICM0CShyYXRpbzIpCisgKiAjMwkocmF0aW8yKSBiYXNlcG9ydC10YXJnZXQsIHRhcmdldCBEUExMID0gMzMwKjIgPSA2NjBNSHoKKyAqLworI2RlZmluZSBNM19EUExMX01VTFRfMTIJCQkoNTUgPDwgMTIpCisjZGVmaW5lIE0zX0RQTExfRElWXzEyCQkJKDEgPDwgOCkKKyNkZWZpbmUgTTNfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNM19EUExMX0RJVl8xMiB8IE0zX0RQTExfTVVMVF8xMiB8IFwKKwkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEyCisjZGVmaW5lIE0zX0RQTExfTVVMVF8xMwkJCSgzMzAgPDwgMTIpCisjZGVmaW5lIE0zX0RQTExfRElWXzEzCQkJKDEyIDw8IDgpCisjZGVmaW5lIE0zX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJTTNfRFBMTF9ESVZfMTMgfCBNM19EUExMX01VTFRfMTMgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xMworI2RlZmluZSBNM19EUExMX01VTFRfMTkJCQkoMjc1IDw8IDEyKQorI2RlZmluZSBNM19EUExMX0RJVl8xOQkJCSgxNSA8PCA4KQorI2RlZmluZSBNM19DTV9DTEtTRUwxX1BMTF8xOV9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCU0zX0RQTExfRElWXzE5IHwgTTNfRFBMTF9NVUxUXzE5IHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTlfMgorLyogYm9vdCAoYm9vdCkgKi8KKyNkZWZpbmUgTUJfRFBMTF9NVUxUCQkJKDEgPDwgMTIpCisjZGVmaW5lIE1CX0RQTExfRElWCQkJKDAgPDwgOCkKKyNkZWZpbmUgTUJfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgTUJfRFBMTF9ESVYgfFwKKwkJCQkJTUJfRFBMTF9NVUxUIHwgTVhfQVBMTFNfQ0xJS0lOXzEyCisKKyNkZWZpbmUgTUJfQ01fQ0xLU0VMMV9QTExfMTNfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgTUJfRFBMTF9ESVYgfFwKKwkJCQkJTUJfRFBMTF9NVUxUIHwgTVhfQVBMTFNfQ0xJS0lOXzEzCisKKyNkZWZpbmUgTUJfQ01fQ0xLU0VMMV9QTExfMTlfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgTUJfRFBMTF9ESVYgfFwKKwkJCQkJTUJfRFBMTF9NVUxUIHwgTVhfQVBMTFNfQ0xJS0lOXzE5CisKKy8qCisgKiAyNDMwIC0gY2hhc3NpcyAoc2VkbmEpCisgKiAxNjUgKHJhdGlvMSkgc2FtZSBhcyBhYm92ZSAjMgorICogMTUwIChyYXRpbzEpCisgKiAxMzMgKHJhdGlvMikgc2FtZSBhcyBhYm92ZSAjNAorICogMTEwIChyYXRpbzIpIHNhbWUgYXMgYWJvdmUgIzMKKyAqIDEwNCAocmF0aW8yKQorICogYm9vdCAoYm9vdCkKKyAqLworCisvKgorICogMjQyMCBFcXVpdmFsZW50IC0gbW9kZSByZWdpc3RlcnMKKyAqIFBSQ00gSUkgLCB0YXJnZXQgRFBMTCA9IDIqMzAwTUh6ID0gNjAwTUh6CisgKi8KKyNkZWZpbmUgTUlJX0RQTExfTVVMVF8xMgkJKDUwIDw8IDEyKQorI2RlZmluZSBNSUlfRFBMTF9ESVZfMTIJCQkoMSA8PCA4KQorI2RlZmluZSBNSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNSUlfRFBMTF9ESVZfMTIgfCBNSUlfRFBMTF9NVUxUXzEyIHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTIKKyNkZWZpbmUgTUlJX0RQTExfTVVMVF8xMwkJKDMwMCA8PCAxMikKKyNkZWZpbmUgTUlJX0RQTExfRElWXzEzCQkJKDEyIDw8IDgpCisjZGVmaW5lIE1JSV9DTV9DTEtTRUwxX1BMTF8xM19WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCU1JSV9EUExMX0RJVl8xMyB8IE1JSV9EUExMX01VTFRfMTMgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xMworCisvKiBQUkNNIElJSSB0YXJnZXQgRFBMTCA9IDIqMjY2ID0gNTMyTUh6Ki8KKyNkZWZpbmUgTUlJSV9EUExMX01VTFRfMTIJCSgxMzMgPDwgMTIpCisjZGVmaW5lIE1JSUlfRFBMTF9ESVZfMTIJCSg1IDw8IDgpCisjZGVmaW5lIE1JSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNSUlJX0RQTExfRElWXzEyIHwgTUlJSV9EUExMX01VTFRfMTIgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xMgorI2RlZmluZSBNSUlJX0RQTExfTVVMVF8xMwkJKDI2NiA8PCAxMikKKyNkZWZpbmUgTUlJSV9EUExMX0RJVl8xMwkJKDEyIDw8IDgpCisjZGVmaW5lIE1JSUlfQ01fQ0xLU0VMMV9QTExfMTNfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNSUlJX0RQTExfRElWXzEzIHwgTUlJSV9EUExMX01VTFRfMTMgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xMworCisvKiBQUkNNIFZJSSAoYm9vdCBieXBhc3MpICovCisjZGVmaW5lIE1WSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCU1CX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAorI2RlZmluZSBNVklJX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAlNQl9DTV9DTEtTRUwxX1BMTF8xM19WQUwKKworLyogSGlnaCBhbmQgbG93IG9wZXJhdGlvbiB2YWx1ZSAqLworI2RlZmluZSBNWF9DTEtTRUwyX1BMTF8yeF9WQUwJCSgyIDw8IDApCisjZGVmaW5lIE1YX0NMS1NFTDJfUExMXzF4X1ZBTAkJKDEgPDwgMCkKKworLyoKKyAqIFRoZXNlIHJlcHJlc2VudCBvcHRpbWFsIHZhbHVlcyBmb3IgY29tbW9uIHBhcnRzLCBpdCB3b24ndCB3b3JrIGZvciBhbGwuCisgKiBBcyBsb25nIGFzIHlvdSBzY2FsZSBkb3duLCBtb3N0IHBhcmFtZXRlcnMgYXJlIHN0aWxsIHdvcmssIHRoZXkganVzdAorICogYmVjb21lIHN1Yi1vcHRpbWFsLiBUaGUgUkZSIHZhbHVlIGdvZXMgaW4gdGhlIG9wcGlzaXRlIGRpcmVjdGlvbi4gSWYgeW91CisgKiBkb24ndCBhZGp1c3QgaXQgZG93biBhcyB5b3VyIGNsb2NrIHBlcmlvZCBpbmNyZWFzZXMgdGhlIHJlZnJlc2ggaW50ZXJ2YWwKKyAqIHdpbGwgbm90IGJlIG1ldC4gU2V0dGluZyBhbGwgcGFyYW1ldGVycyBmb3IgY29tcGxldGUgd29yc3QgY2FzZSBtYXkgd29yaywKKyAqIGJ1dCBtYXkgY3V0IG1lbW9yeSBwZXJmb3JtYW5jZSBieSAyeC4gRHVlIHRvIGVycmF0YSB0aGUgRExMcyBuZWVkIHRvIGJlCisgKiB1bmxvY2tlZCBhbmQgdGhlaXIgdmFsdWUgbmVlZHMgcnVuIHRpbWUgY2FsaWJyYXRpb24uCUEgZHluYW1pYyBjYWxsIGlzCisgKiBuZWVkIGZvciB0aGF0IGFzIG5vIHNpbmdsZSByaWdodCB2YWx1ZSBleGlzdHMgYWNvcnNzIHByb2R1Y3Rpb24gc2FtcGxlcy4KKyAqCisgKiBPbmx5IHRoZSBGVUxMIHNwZWVkIHZhbHVlcyBhcmUgZ2l2ZW4uIEN1cnJlbnQgY29kZSBpcyBzdWNoIHRoYXQgcmF0ZQorICogY2hhbmdlcyBtdXN0IGJlIG1hZGUgYXQgRFBMTG91dHgyLiBUaGUgYWN0dWFsIHZhbHVlIGFkanVzdG1lbnQgZm9yIGxvdworICogZnJlcXVlbmN5IG9wZXJhdGlvbiB3aWxsIGJlIGhhbmRsZWQgYnkgb21hcF9zZXRfcGVyZm9ybWFuY2UoKQorICoKKyAqIEJ5IGhhdmluZyB0aGUgYm9vdCBsb2FkZXIgYm9vdCB1cCBpbiB0aGUgZmFzdGVzdCBMNCBzcGVlZCBhdmFpbGFibGUgbGlrZWx5CisgKiB3aWxsIHJlc3VsdCBpbiBzb21ldGhpbmcgd2hpY2ggeW91IGNhbiBzd2l0Y2ggYmV0d2Vlbi4KKyAqLworI2RlZmluZSBWMjRYWF9TRFJDX1JGUl9DVFJMXzEzM01IegkoMHgwMDAzZGUwMCB8IDEpCisjZGVmaW5lIFYyNFhYX1NEUkNfUkZSX0NUUkxfMTAwTUh6CSgweDAwMDJkYTAxIHwgMSkKKyNkZWZpbmUgVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMTBNSHoJKDB4MDAwMmRhMDEgfCAxKSAvKiBOZWVkIHRvIGNhbGMgKi8KKyNkZWZpbmUgVjI0WFhfU0RSQ19SRlJfQ1RSTF9CWVBBU1MJKDB4MDAwMDUwMDAgfCAxKSAvKiBOZWVkIHRvIGNhbGMgKi8KKworLyogTVBVIHNwZWVkIGRlZmluZXMgKi8KKyNkZWZpbmUgUzEyTQkxMjAwMDAwMAorI2RlZmluZSBTMTNNCTEzMDAwMDAwCisjZGVmaW5lIFMxOU0JMTkyMDAwMDAKKyNkZWZpbmUgUzI2TQkyNjAwMDAwMAorI2RlZmluZSBTMTAwTQkxMDAwMDAwMDAKKyNkZWZpbmUgUzEzM00JMTMzMDAwMDAwCisjZGVmaW5lIFMxNTBNCTE1MDAwMDAwMAorI2RlZmluZSBTMTY1TQkxNjUwMDAwMDAKKyNkZWZpbmUgUzIwME0JMjAwMDAwMDAwCisjZGVmaW5lIFMyNjZNCTI2NjAwMDAwMAorI2RlZmluZSBTMzAwTQkzMDAwMDAwMDAKKyNkZWZpbmUgUzMzME0JMzMwMDAwMDAwCisjZGVmaW5lIFM0MDBNCTQwMDAwMDAwMAorI2RlZmluZSBTNTMyTQk1MzIwMDAwMDAKKyNkZWZpbmUgUzYwME0JNjAwMDAwMDAwCisjZGVmaW5lIFM2NjBNCTY2MDAwMDAwMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEtleSBkaXZpZGVycyB3aGljaCBtYWtlIHVwIGEgUFJDTSBzZXQuIFJhdGlvJ3MgZm9yIGEgUFJDTSBhcmUgbWFuZGF0ZWQuCisgKiB4dGFsX3NwZWVkLCBkcGxsX3NwZWVkLCBtcHVfc3BlZWQsIENNX0NMS1NFTF9NUFUsCisgKiBDTV9DTEtTRUxfRFNQLCBDTV9DTEtTRUxfR0ZYLCBDTV9DTEtTRUwxX0NPUkUsIENNX0NMS1NFTDFfUExMLAorICogQ01fQ0xLU0VMMl9QTEwsIENNX0NMS1NFTF9NRE0KKyAqCisgKiBGaWxsaW5nIGluIHRhYmxlIGJhc2VkIG9uIEg0IGJvYXJkcyBhbmQgMjQzMC1TRFBzIHZhcmlhbnRzIGF2YWlsYWJsZS4KKyAqIFRoZXJlIGFyZSBxdWl0ZSBhIGZldyBtb3JlIHJhdGVzIGNvbWJpbmF0aW9ucyB3aGljaCBjb3VsZCBiZSBkZWZpbmVkLgorICoKKyAqIFdoZW4gbXVsdGlwbGUgdmFsdWVzIGFyZSBkZWZpZW5kIHRoZSBzdGFydCB1cCB3aWxsIHRyeSBhbmQgY2hvb3NlIHRoZQorICogZmFzdGVzdCBvbmUuIElmIGEgJ2Zhc3QnIHZhbHVlIGlzIGRlZmluZWQsIHRoZW4gYXV0b21hdGljYWxseSwgdGhlIC8yCisgKiBvbmUgc2hvdWxkIGJlIGluY2x1ZGVkIGFzIGl0IGNhbiBiZSB1c2VkLglHZW5lcmFsbHkgaGF2aW5nIG1vcmUgdGhhdAorICogb25lIGZhc3Qgc2V0IGRvZXMgbm90IG1ha2Ugc2Vuc2UsIGFzIHN0YXRpYyB0aW1pbmdzIG5lZWQgdG8gYmUgY2hhbmdlZAorICogdG8gY2hhbmdlIHRoZSBzZXQuCSBUaGUgZXhjZXB0aW9uIGlzIHRoZSBieXBhc3Mgc2V0dGluZyB3aGljaCBpcworICogYXZhaWxibGUgZm9yIGxvdyBwb3dlciBieXBhc3MuCisgKgorICogTm90ZTogVGhpcyB0YWJsZSBuZWVkcyB0byBiZSBzb3J0ZWQsIGZhc3Rlc3QgdG8gc2xvd2VzdC4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgc3RydWN0IHByY21fY29uZmlnIHJhdGVfdGFibGVbXSA9IHsKKwkvKiBQUkNNIElJIC0gRkFTVCAqLworCXtTMTJNLCBTNjAwTSwgUzMwME0sIFJJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDMwME1IeiBBUk0gKi8KKwkJUklJX0NNX0NMS1NFTF9EU1BfVkFMLCBSSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVJJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFYyNFhYX1NEUkNfUkZSX0NUUkxfMTAwTUh6LAorCQlSQVRFX0lOXzI0Mlh9LAorCisJe1MxM00sIFM2MDBNLCBTMzAwTSwgUklJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMzAwTUh6IEFSTSAqLworCQlSSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUklJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1JSV9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMDBNSHosCisJCVJBVEVfSU5fMjQyWH0sCisKKwkvKiBQUkNNIElJSSAtIEZBU1QgKi8KKwl7UzEyTSwgUzUzMk0sIFMyNjZNLCBSSUlJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMjY2TUh6IEFSTSAqLworCQlSSUlJX0NNX0NMS1NFTF9EU1BfVkFMLCBSSUlJX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSSUlJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1JSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFYyNFhYX1NEUkNfUkZSX0NUUkxfMTMzTUh6LAorCQlSQVRFX0lOXzI0Mlh9LAorCisJe1MxM00sIFM1MzJNLCBTMjY2TSwgUklJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDI2Nk1IeiBBUk0gKi8KKwkJUklJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUklJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNSUlJX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBWMjRYWF9TRFJDX1JGUl9DVFJMXzEzM01IeiwKKwkJUkFURV9JTl8yNDJYfSwKKworCS8qIFBSQ00gSUkgLSBTTE9XICovCisJe1MxMk0sIFMzMDBNLCBTMTUwTSwgUklJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTUwTUh6IEFSTSAqLworCQlSSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUklJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1JSV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMDBNSHosCisJCVJBVEVfSU5fMjQyWH0sCisKKwl7UzEzTSwgUzMwME0sIFMxNTBNLCBSSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxNTBNSHogQVJNICovCisJCVJJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklJX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlJX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBWMjRYWF9TRFJDX1JGUl9DVFJMXzEwME1IeiwKKwkJUkFURV9JTl8yNDJYfSwKKworCS8qIFBSQ00gSUlJIC0gU0xPVyAqLworCXtTMTJNLCBTMjY2TSwgUzEzM00sIFJJSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxMzNNSHogQVJNICovCisJCVJJSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVJJSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlJSV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMzNNSHosCisJCVJBVEVfSU5fMjQyWH0sCisKKwl7UzEzTSwgUzI2Nk0sIFMxMzNNLCBSSUlJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTMzTUh6IEFSTSAqLworCQlSSUlJX0NNX0NMS1NFTF9EU1BfVkFMLCBSSUlJX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSSUlJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1JSUlfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFYyNFhYX1NEUkNfUkZSX0NUUkxfMTMzTUh6LAorCQlSQVRFX0lOXzI0Mlh9LAorCisJLyogUFJDTS1WSUkgKGJvb3QtYnlwYXNzKSAqLworCXtTMTJNLCBTMTJNLCBTMTJNLCBSVklJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTJNSHogQVJNKi8KKwkJUlZJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUlZJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUlZJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNVklJX0NNX0NMS1NFTDFfUExMXzEyX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBWMjRYWF9TRFJDX1JGUl9DVFJMX0JZUEFTUywKKwkJUkFURV9JTl8yNDJYfSwKKworCS8qIFBSQ00tVklJIChib290LWJ5cGFzcykgKi8KKwl7UzEzTSwgUzEzTSwgUzEzTSwgUlZJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDEzTUh6IEFSTSAqLworCQlSVklJX0NNX0NMS1NFTF9EU1BfVkFMLCBSVklJX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSVklJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1WSUlfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFYyNFhYX1NEUkNfUkZSX0NUUkxfQllQQVNTLAorCQlSQVRFX0lOXzI0Mlh9LAorCisJLyogUFJDTSAjMyAtIHJhdGlvMiAoRVMyKSAtIEZBU1QgKi8KKwl7UzEzTSwgUzY2ME0sIFMzMzBNLCBSMl9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDMzME1IeiBBUk0gKi8KKwkJUjJfQ01fQ0xLU0VMX0RTUF9WQUwsIFIyX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSMl9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNM19DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgUjJfQ01fQ0xLU0VMX01ETV9WQUwsCisJCVYyNFhYX1NEUkNfUkZSX0NUUkxfMTEwTUh6LAorCQlSQVRFX0lOXzI0M1h9LAorCisJLyogUFJDTSAjNWEgLSByYXRpbzEgLSBGQVNUICovCisJe1MxM00sIFM1MzJNLCBTMjY2TSwgUjFfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAyNjZNSHogQVJNICovCisJCVIxX0NNX0NMS1NFTF9EU1BfVkFMLCBSMV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUjFfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTTVBX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCBSMV9DTV9DTEtTRUxfTURNX1ZBTCwKKwkJVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMzNNSHosCisJCVJBVEVfSU5fMjQzWH0sCisKKwkvKiBQUkNNICM1YiAtIHJhdGlvMSAtIEZBU1QgKi8KKwl7UzEzTSwgUzQwME0sIFMyMDBNLCBSMV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDIwME1IeiBBUk0gKi8KKwkJUjFfQ01fQ0xLU0VMX0RTUF9WQUwsIFIxX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSMV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNNUJfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIFIxX0NNX0NMS1NFTF9NRE1fVkFMLAorCQlWMjRYWF9TRFJDX1JGUl9DVFJMXzEwME1IeiwKKwkJUkFURV9JTl8yNDNYfSwKKworCS8qIFBSQ00gIzMgLSByYXRpbzIgKEVTMikgLSBTTE9XICovCisJe1MxM00sIFMzMzBNLCBTMTY1TSwgUjJfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxNjVNSHogQVJNICovCisJCVIyX0NNX0NMS1NFTF9EU1BfVkFMLCBSMl9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUjJfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTTNfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8xeF9WQUwsIFIyX0NNX0NMS1NFTF9NRE1fVkFMLAorCQlWMjRYWF9TRFJDX1JGUl9DVFJMXzExME1IeiwKKwkJUkFURV9JTl8yNDNYfSwKKworCS8qIFBSQ00gIzVhIC0gcmF0aW8xIC0gU0xPVyAqLworCXtTMTNNLCBTMjY2TSwgUzEzM00sIFIxX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTMzTUh6IEFSTSAqLworCQlSMV9DTV9DTEtTRUxfRFNQX1ZBTCwgUjFfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVIxX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE01QV9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzF4X1ZBTCwgUjFfQ01fQ0xLU0VMX01ETV9WQUwsCisJCVYyNFhYX1NEUkNfUkZSX0NUUkxfMTMzTUh6LAorCQlSQVRFX0lOXzI0M1h9LAorCisJLyogUFJDTSAjNWIgLSByYXRpbzEgLSBTTE9XKi8KKwl7UzEzTSwgUzIwME0sIFMxMDBNLCBSMV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDEwME1IeiBBUk0gKi8KKwkJUjFfQ01fQ0xLU0VMX0RTUF9WQUwsIFIxX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSMV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNNUJfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8xeF9WQUwsIFIxX0NNX0NMS1NFTF9NRE1fVkFMLAorCQlWMjRYWF9TRFJDX1JGUl9DVFJMXzEwME1IeiwKKwkJUkFURV9JTl8yNDNYfSwKKworCS8qIFBSQ00tYm9vdC9ieXBhc3MgKi8KKwl7UzEzTSwgUzEzTSwgUzEzTSwgUkJfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxM01oeiAqLworCQlSQl9DTV9DTEtTRUxfRFNQX1ZBTCwgUkJfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVJCX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1CX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCBSQl9DTV9DTEtTRUxfTURNX1ZBTCwKKwkJVjI0WFhfU0RSQ19SRlJfQ1RSTF9CWVBBU1MsCisJCVJBVEVfSU5fMjQzWH0sCisKKwkvKiBQUkNNLWJvb3QvYnlwYXNzICovCisJe1MxMk0sIFMxMk0sIFMxMk0sIFJCX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTJNaHogKi8KKwkJUkJfQ01fQ0xLU0VMX0RTUF9WQUwsIFJCX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSQl9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNQl9DTV9DTEtTRUwxX1BMTF8xMl9WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgUkJfQ01fQ0xLU0VMX01ETV9WQUwsCisJCVYyNFhYX1NEUkNfUkZSX0NUUkxfQllQQVNTLAorCQlSQVRFX0lOXzI0M1h9LAorCisJeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogMjR4eCBjbG9jayB0cmVlLgorICoKKyAqIE5PVEU6SW4gbWFueSBjYXNlcyBoZXJlIHdlIGFyZSBhc3NpZ25pbmcgYSAnZGVmYXVsdCcgcGFyZW50LglJbiBtYW55CisgKgljYXNlcyB0aGUgcGFyZW50IGlzIHNlbGVjdGFibGUuCVRoZSBnZXQvc2V0IHBhcmVudCBjYWxscyB3aWxsIGFsc28KKyAqCXN3aXRjaCBzb3VyY2VzLgorICoKKyAqCU1hbnkgc29tZSBjbG9ja3Mgc2F5IGFsd2F5c19lbmFibGVkLCBidXQgdGhleSBjYW4gYmUgYXV0byBpZGxlZCBmb3IKKyAqCXBvd2VyIHNhdmluZ3MuIFRoZXkgd2lsbCBhbHdheXMgYmUgYXZhaWxhYmxlIHVwb24gY2xvY2sgcmVxdWVzdC4KKyAqCisgKglTZXZlcmFsIHNvdXJjZXMgYXJlIGdpdmVuIGluaXRpYWwgcmF0ZXMgd2hpY2ggbWF5IGJlIHdyb25nLCB0aGlzIHdpbGwKKyAqCWJlIGZpeGVkIHVwIGluIHRoZSBpbml0IGZ1bmMuCisgKgorICoJVGhpbmdzIGFyZSBicm9hZGx5IHNlcGFyYXRlZCBiZWxvdyBieSBjbG9jayBkb21haW5zLiBJdCBpcworICoJbm90ZXdvcnRoeSB0aGF0IG1vc3QgcGVyaWZlcmFscyBoYXZlIGRlcGVuZGVuY2llcyBvbiBtdWx0aXBsZSBjbG9jaworICoJZG9tYWlucy4gTWFueSBnZXQgdGhlaXIgaW50ZXJmYWNlIGNsb2NrcyBmcm9tIHRoZSBMNCBkb21haW4sIGJ1dCBnZXQKKyAqCWZ1bmN0aW9uYWwgY2xvY2tzIGZyb20gZml4ZWQgc291cmNlcyBvciBvdGhlciBjb3JlIGRvbWFpbiBkZXJpdmVkCisgKgljbG9ja3MuCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBCYXNlIGV4dGVybmFsIGlucHV0IGNsb2NrcyAqLworc3RhdGljIHN0cnVjdCBjbGsgZnVuY18zMmtfY2sgPSB7CisJLm5hbWUJCT0gImZ1bmNfMzJrX2NrIiwKKwkucmF0ZQkJPSAzMjAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9GSVhFRCB8IEFMV0FZU19FTkFCTEVELAorfTsKKworLyogVHlwaWNhbCAxMi8xM01IeiBpbiBzdGFuZGFsb25lIG1vZGUsIHdpbGwgYmUgMjZNaHogaW4gY2hhc3NpcyBtb2RlICovCitzdGF0aWMgc3RydWN0IGNsayBvc2NfY2sgPSB7CQkvKiAoKjEyLCAqMTMsIDE5LjIsICoyNiwgMzguNClNSHogKi8KKwkubmFtZQkJPSAib3NjX2NrIiwKKwkucmF0ZQkJPSAyNjAwMDAwMCwJCS8qIGZpeGVkIHVwIGluIGNsb2NrIGluaXQgKi8KKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9GSVhFRCB8IEFMV0FZU19FTkFCTEVEIHwgUkFURV9QUk9QQUdBVEVTLAorfTsKKworLyogV2l0aCBvdXQgbW9kZW0gbGlrZWx5IDEyTUh6LCB3aXRoIG1vZGVtIGxpa2VseSAxM01IeiAqLworc3RhdGljIHN0cnVjdCBjbGsgc3lzX2NrID0gewkJLyogKCoxMiwgKjEzLCAxOS4yLCAyNiwgMzguNClNSHogKi8KKwkubmFtZQkJPSAic3lzX2NrIiwJCS8qIH4gcmVmX2NsayBhbHNvICovCisJLnBhcmVudAkJPSAmb3NjX2NrLAorCS5yYXRlCQk9IDEzMDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0ZJWEVEIHwgQUxXQVlTX0VOQUJMRUQgfCBSQVRFX1BST1BBR0FURVMsCisJLnJhdGVfb2Zmc2V0CT0gNiwgLyogc3lzY2xrZGl2IDEgb3IgMiwgYWxyZWFkeSBoYW5kbGVkIG9yIG5vIGJvb3QgKi8KKwkucmVjYWxjCQk9ICZvbWFwMl9zeXNfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFsdF9jayA9IHsJCS8qIFR5cGljYWwgNTRNIG9yIDQ4TSwgbWF5IG5vdCBleGlzdCAqLworCS5uYW1lCQk9ICJhbHRfY2siLAorCS5yYXRlCQk9IDU0MDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0ZJWEVEIHwgQUxXQVlTX0VOQUJMRUQgfCBSQVRFX1BST1BBR0FURVMsCisJLnJlY2FsYwkJPSAmb21hcDJfcHJvcGFnYXRlX3JhdGUsCit9OworCisvKgorICogQW5hbG9nIGRvbWFpbiByb290IHNvdXJjZSBjbG9ja3MKKyAqLworCisvKiBkcGxsX2NrLCBpcyBicm9rZW4gb3V0IGluIHRvIHNwZWNpYWwgY2FzZXMgdGhyb3VnaCBjbGtzZWwgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY2sgPSB7CisJLm5hbWUJCT0gImRwbGxfY2siLAorCS5wYXJlbnQJCT0gJnN5c19jaywJCS8qIENhbiBiZSBmdW5jXzMyayBhbHNvICovCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfUFJPUEFHQVRFUyB8IFJBVEVfQ0tDVEwgfCBDTV9QTExfU0VMMSwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXBsbDk2X2NrID0geworCS5uYW1lCQk9ICJhcGxsOTZfY2siLAorCS5wYXJlbnQJCT0gJnN5c19jaywKKwkucmF0ZQkJPSA5NjAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0ZJWEVEIHwgUkFURV9QUk9QQUdBVEVTLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9DTEtFTl9QTEwsCisJLmVuYWJsZV9iaXQJPSAweDIsCisJLnJlY2FsYwkJPSAmb21hcDJfcHJvcGFnYXRlX3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhcGxsNTRfY2sgPSB7CisJLm5hbWUJCT0gImFwbGw1NF9jayIsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5yYXRlCQk9IDU0MDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0ZJWEVEIHwgUkFURV9QUk9QQUdBVEVTLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9DTEtFTl9QTEwsCisJLmVuYWJsZV9iaXQJPSAweDYsCisJLnJlY2FsYwkJPSAmb21hcDJfcHJvcGFnYXRlX3JhdGUsCit9OworCisvKgorICogUFJDTSBkaWdpdGFsIGJhc2Ugc291cmNlcworICovCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzU0bV9jayA9IHsKKwkubmFtZQkJPSAiZnVuY181NG1fY2siLAorCS5wYXJlbnQJCT0gJmFwbGw1NF9jaywJLyogY2FuIGFsc28gYmUgYWx0X2NsayAqLworCS5yYXRlCQk9IDU0MDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0ZJWEVEIHwgQ01fUExMX1NFTDEgfCBSQVRFX1BST1BBR0FURVMsCisJLnNyY19vZmZzZXQJPSA1LAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9DTEtFTl9QTEwsCisJLmVuYWJsZV9iaXQJPSAweGZmLAorCS5yZWNhbGMJCT0gJm9tYXAyX3Byb3BhZ2F0ZV9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY29yZV9jayA9IHsKKwkubmFtZQkJPSAiY29yZV9jayIsCisJLnBhcmVudAkJPSAmZHBsbF9jaywJCS8qIGNhbiBhbHNvIGJlIDMyayAqLworCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlBTFdBWVNfRU5BQkxFRCB8IFJBVEVfUFJPUEFHQVRFUywKKwkucmVjYWxjCQk9ICZvbWFwMl9wcm9wYWdhdGVfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNsZWVwX2NrID0gewkJLyogc3lzX2NsayBvciAzMmsgKi8KKwkubmFtZQkJPSAic2xlZXBfY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5yYXRlCQk9IDMyMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5yZWNhbGMJCT0gJm9tYXAyX3Byb3BhZ2F0ZV9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZnVuY185Nm1fY2sgPSB7CisJLm5hbWUJCT0gImZ1bmNfOTZtX2NrIiwKKwkucGFyZW50CQk9ICZhcGxsOTZfY2ssCisJLnJhdGUJCT0gOTYwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0NMS0VOX1BMTCwKKwkuZW5hYmxlX2JpdAk9IDB4ZmYsCisJLnJlY2FsYwkJPSAmb21hcDJfcHJvcGFnYXRlX3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzQ4bV9jayA9IHsKKwkubmFtZQkJPSAiZnVuY180OG1fY2siLAorCS5wYXJlbnQJCT0gJmFwbGw5Nl9jaywJIC8qIDk2TSBvciBBbHQgKi8KKwkucmF0ZQkJPSA0ODAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9GSVhFRCB8IENNX1BMTF9TRUwxIHwgUkFURV9QUk9QQUdBVEVTLAorCS5zcmNfb2Zmc2V0CT0gMywKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fQ0xLRU5fUExMLAorCS5lbmFibGVfYml0CT0gMHhmZiwKKwkucmVjYWxjCQk9ICZvbWFwMl9wcm9wYWdhdGVfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfMTJtX2NrID0geworCS5uYW1lCQk9ICJmdW5jXzEybV9jayIsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLnJhdGUJCT0gMTIwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMsCisJLnJlY2FsYwkJPSAmb21hcDJfcHJvcGFnYXRlX3JhdGUsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0NMS0VOX1BMTCwKKwkuZW5hYmxlX2JpdAk9IDB4ZmYsCit9OworCisvKiBTZWN1cmUgdGltZXIsIG9ubHkgYXZhaWxhYmxlIGluIHNlY3VyZSBtb2RlICovCitzdGF0aWMgc3RydWN0IGNsayB3ZHQxX29zY19jayA9IHsKKwkubmFtZQkJPSAiY2tfd2R0MV9vc2MiLAorCS5wYXJlbnQJCT0gJm9zY19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dCA9IHsKKwkubmFtZQkJPSAic3lzX2Nsa291dCIsCisJLnBhcmVudAkJPSAmZnVuY181NG1fY2ssCisJLnJhdGUJCT0gNTQwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCUNNX1NZU0NMS09VVF9TRUwxIHwgUkFURV9DS0NUTCwKKwkuc3JjX29mZnNldAk9IDAsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJlBSQ01fQ0xLT1VUX0NUUkwsCisJLmVuYWJsZV9iaXQJPSA3LAorCS5yYXRlX29mZnNldAk9IDMsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIEluIDI0MzAsIG5ldyBpbiAyNDIwIEVTMiAqLworc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dDIgPSB7CisJLm5hbWUJCT0gInN5c19jbGtvdXQyIiwKKwkucGFyZW50CQk9ICZmdW5jXzU0bV9jaywKKwkucmF0ZQkJPSA1NDAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJQ01fU1lTQ0xLT1VUX1NFTDEgfCBSQVRFX0NLQ1RMLAorCS5zcmNfb2Zmc2V0CT0gOCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmUFJDTV9DTEtPVVRfQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IDE1LAorCS5yYXRlX29mZnNldAk9IDExLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKgorICogTVBVIGNsb2NrIGRvbWFpbgorICoJQ2xvY2tzOgorICoJCU1QVV9GQ0xLLCBNUFVfSUNMSworICoJCUlOVF9NX0ZDTEssIElOVF9NX0lfQ0xLCisgKgorICogLSBJbmRpdmlkdWFsIGNsb2NrcyBhcmUgaGFyZHdhcmUgbWFuYWdlZC4KKyAqIC0gQmFzZSBkaXZpZGVyIGNvbWVzIGZyb206IENNX0NMS1NFTF9NUFUKKyAqCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG1wdV9jayA9IHsJLyogQ29udHJvbCBjcHUgKi8KKwkubmFtZQkJPSAibXB1X2NrIiwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwgUkFURV9DS0NUTCB8CisJCQkJQUxXQVlTX0VOQUJMRUQgfCBDTV9NUFVfU0VMMSB8IERFTEFZRURfQVBQIHwKKwkJCQlDT05GSUdfUEFSVElDSVBBTlQgfCBSQVRFX1BST1BBR0FURVMsCisJLnJhdGVfb2Zmc2V0CT0gMCwJLyogYml0cyAwLTQgKi8KKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyoKKyAqIERTUCAoMjQzMC1JVkEyLjEpICgyNDIwLVVNQStJVkExKSBjbG9jayBkb21haW4KKyAqIENsb2NrczoKKyAqCTI0MzA6IElWQTIuMV9GQ0xLLCBJVkEyLjFfSUNMSworICoJMjQyMDogVU1BX0ZDTEssIFVNQV9JQ0xLLCBJVkFfTVBVLCBJVkFfQ09QCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGl2YTJfMV9mY2sgPSB7CisJLm5hbWUJCT0gIml2YTJfMV9mY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgUkFURV9DS0NUTCB8IENNX0RTUF9TRUwxIHwKKwkJCQlERUxBWUVEX0FQUCB8IFJBVEVfUFJPUEFHQVRFUyB8CisJCQkJQ09ORklHX1BBUlRJQ0lQQU5ULAorCS5yYXRlX29mZnNldAk9IDAsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTl9EU1AsCisJLmVuYWJsZV9iaXQJPSAwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpdmEyXzFfaWNrID0geworCS5uYW1lCQk9ICJpdmEyXzFfaWNrIiwKKwkucGFyZW50CQk9ICZpdmEyXzFfZmNrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IFJBVEVfQ0tDVEwgfCBDTV9EU1BfU0VMMSB8CisJCQkJREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCisJLnJhdGVfb2Zmc2V0CT0gNSwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyoKKyAqIFdvbid0IGJlIHRvbyBzcGVjaWZpYyBoZXJlLiBUaGUgY29yZSBjbG9jayBjb21lcyBpbnRvIHRoaXMgYmxvY2sKKyAqIGl0IGlzIGRpdmlkZWQgdGhlbiB0ZWUnZWQuIE9uZSBicmFuY2ggZ29lcyBkaXJlY3RseSB0byB4eXogZW5hYmxlCisgKiBjb250cm9scy4gVGhlIG90aGVyIGJyYW5jaCBnZXRzIGZ1cnRoZXIgZGl2aWRlZCBieSAyIHRoZW4gcG9zc2libHkKKyAqIHJvdXRlZCBpbnRvIGEgc3luY2hyb25pemVyIGFuZCBvdXQgb2YgY2xvY2tzIGFiYy4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZHNwX2ZjayA9IHsKKwkubmFtZQkJPSAiZHNwX2ZjayIsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBSQVRFX0NLQ1RMIHwgQ01fRFNQX1NFTDEgfAorCQkJREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQgfCBSQVRFX1BST1BBR0FURVMsCisJLnJhdGVfb2Zmc2V0CT0gMCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOX0RTUCwKKwkuZW5hYmxlX2JpdAk9IDAsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzcF9pY2sgPSB7CisJLm5hbWUJCT0gImRzcF9pY2siLAkgLyogYXBwYXJlbnRseSBpcGkgYW5kIGlzcCAqLworCS5wYXJlbnQJCT0gJmRzcF9mY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgUkFURV9DS0NUTCB8IENNX0RTUF9TRUwxIHwKKwkJCQlERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKKwkucmF0ZV9vZmZzZXQgPSA1LAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU5fRFNQLAorCS5lbmFibGVfYml0CT0gMSwJCS8qIGZvciBpcGkgKi8KKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaXZhMV9pZmNrID0geworCS5uYW1lCQk9ICJpdmExX2lmY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ01fRFNQX1NFTDEgfCBSQVRFX0NLQ1RMIHwKKwkJCUNPTkZJR19QQVJUSUNJUEFOVCB8IFJBVEVfUFJPUEFHQVRFUyB8IERFTEFZRURfQVBQLAorCS5yYXRlX29mZnNldD0gOCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOX0RTUCwKKwkuZW5hYmxlX2JpdAk9IDEwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBJVkExIG1wdS9pbnQvaS9mIGNsb2NrcyBhcmUgLzIgb2YgcGFyZW50ICovCitzdGF0aWMgc3RydWN0IGNsayBpdmExX21wdV9pbnRfaWZjayA9IHsKKwkubmFtZQkJPSAiaXZhMV9tcHVfaW50X2lmY2siLAorCS5wYXJlbnQJCT0gJml2YTFfaWZjaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBSQVRFX0NLQ1RMIHwgQ01fRFNQX1NFTDEsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTl9EU1AsCisJLmVuYWJsZV9iaXQJPSA4LAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKgorICogTDMgY2xvY2sgZG9tYWluCisgKiBMMyBjbG9ja3MgYXJlIHVzZWQgZm9yIGJvdGggaW50ZXJmYWNlIGFuZCBmdW5jdGlvbmFsIGNsb2NrcyB0bworICogbXVsdGlwbGUgZW50aXRpZXMuIFNvbWUgb2YgdGhlc2UgY2xvY2tzIGFyZSBjb21wbGV0ZWx5IG1hbmFnZWQKKyAqIGJ5IGhhcmR3YXJlLCBhbmQgc29tZSBvdGhlcnMgYWxsb3cgc29mdHdhcmUgY29udHJvbC4gSGFyZHdhcmUKKyAqIG1hbmFnZWQgb25lcyBnZW5lcmFsIGFyZSBiYXNlZCBvbiBkaXJlY3RseSBDTEtfUkVRIHNpZ25hbHMgYW5kCisgKiB2YXJpb3VzIGF1dG8gaWRsZSBzZXR0aW5ncy4gVGhlIGZ1bmN0aW9uYWwgc3BlYyBzZXRzIG1hbnkgb2YgdGhlc2UKKyAqIGFzICd0aWUtaGlnaCcgZm9yIHRoZWlyIGVuYWJsZXMuCisgKgorICogSS1DTE9DS1M6CisgKglMMy1JbnRlcmNvbm5lY3QsIFNNUywgR1BNQywgU0RSQywgT0NNX1JBTSwgT0NNX1JPTSwgU0RNQQorICoJQ0FNLCBIUy1VU0IuCisgKiBGLUNMT0NLCisgKglTU0kuCisgKgorICogR1BNQyBtZW1vcmllcyBhbmQgU0RSQyBoYXZlIHRpbWluZyBhbmQgY2xvY2sgc2Vuc2l0aXZlIHJlZ2lzdGVycyB3aGljaAorICogbWF5IHZlcnkgd2VsbCBuZWVkIG5vdGlmaWNhdGlvbiB3aGVuIHRoZSBjbG9jayBjaGFuZ2VzLiBDdXJyZW50bHkgZm9yIGxvdworICogb3BlcmF0aW5nIHBvaW50cywgdGhlc2UgYXJlIHRha2VuIGNhcmUgb2YgaW4gc2xlZXAuUy4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgY29yZV9sM19jayA9IHsJLyogVXNlZCBmb3IgaWNrIGFuZCBmY2ssIGludGVyY29ubmVjdCAqLworCS5uYW1lCQk9ICJjb3JlX2wzX2NrIiwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0NLQ1RMIHwgQUxXQVlTX0VOQUJMRUQgfCBDTV9DT1JFX1NFTDEgfAorCQkJCURFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5UIHwKKwkJCQlSQVRFX1BST1BBR0FURVMsCisJLnJhdGVfb2Zmc2V0CT0gMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNiX2w0X2ljayA9IHsJLyogRlMtVVNCIGludGVyZmFjZSBjbG9jayAqLworCS5uYW1lCQk9ICJ1c2JfbDRfaWNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0NLQ1RMIHwgQ01fQ09SRV9TRUwxIHwgREVMQVlFRF9BUFAgfAorCQkJCUNPTkZJR19QQVJUSUNJUEFOVCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gMCwKKwkucmF0ZV9vZmZzZXQgPSAyNSwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyoKKyAqIFNTSSBpcyBpbiBMMyBtYW5hZ2VtZW50IGRvbWFpbiwgaXRzIGRpcmVjdCBwYXJlbnQgaXMgY29yZSBub3QgbDMsCisgKiBtYW55IGNvcmUgcG93ZXIgZG9tYWluIGVudGl0aWVzIGFyZSBncm91cGVkIGludG8gdGhlIEwzIGNsb2NrCisgKiBkb21haW4uCisgKiBTU0lfU1NSX0ZDTEssIFNTSV9TU1RfRkNMSywgU1NJX0w0X0NMSUsKKyAqCisgKiBzc3IgPSBjb3JlLzEvMi8zLzQvNSwgc3N0ID0gMS8yIHNzci4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgc3NpX3Nzcl9zc3RfZmNrID0geworCS5uYW1lCQk9ICJzc2lfZmNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0NLQ1RMIHwgQ01fQ09SRV9TRUwxIHwgREVMQVlFRF9BUFAsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjJfQ09SRSwJLyogYml0IDEgKi8KKwkuZW5hYmxlX2JpdAk9IDEsCisJLnJhdGVfb2Zmc2V0ID0gMjAsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qCisgKiBHRlggY2xvY2sgZG9tYWluCisgKglDbG9ja3M6CisgKiBHRlhfRkNMSywgR0ZYX0lDTEsKKyAqIEdGWF9DRzEoMmQpLCBHRlhfQ0cyKDNkKQorICoKKyAqIEdGWF9GQ0xLIHJ1bnMgZnJvbSBMMywgYW5kIGlzIGRpdmlkZWQgYnkgKDEsMiwzLDQpCisgKiBUaGUgMmQgYW5kIDNkIGNsb2NrcyBydW4gYXQgYSBoYXJkd2FyZSBkZXRlcm1pbmVkCisgKiBkaXZpZGVkIHZhbHVlIG9mIGZjbGsuCisgKgorICovCitzdGF0aWMgc3RydWN0IGNsayBnZnhfM2RfZmNrID0geworCS5uYW1lCQk9ICJnZnhfM2RfZmNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0NLQ1RMIHwgQ01fR0ZYX1NFTDEsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTl9HRlgsCisJLmVuYWJsZV9iaXQJPSAyLAorCS5yYXRlX29mZnNldD0gMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ2Z4XzJkX2ZjayA9IHsKKwkubmFtZQkJPSAiZ2Z4XzJkX2ZjayIsCisJLnBhcmVudAkJPSAmY29yZV9sM19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9DS0NUTCB8IENNX0dGWF9TRUwxLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU5fR0ZYLAorCS5lbmFibGVfYml0CT0gMSwKKwkucmF0ZV9vZmZzZXQ9IDAsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9pY2sgPSB7CisJLm5hbWUJCT0gImdmeF9pY2siLAkJLyogRnJvbSBsMyAqLworCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfQ0tDVEwsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTl9HRlgsCS8qIGJpdCAwICovCisJLmVuYWJsZV9iaXQJPSAwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogTW9kZW0gY2xvY2sgZG9tYWluICgyNDMwKQorICoJQ0xPQ0tTOgorICoJCU1ETV9PU0NfQ0xLCisgKgkJTURNX0lDTEsKKyAqLworc3RhdGljIHN0cnVjdCBjbGsgbWRtX2ljayA9IHsJCS8qIHVzZWQgYm90aCBhcyBhIGljayBhbmQgZmNrICovCisJLm5hbWUJCT0gIm1kbV9pY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgUkFURV9DS0NUTCB8IENNX01PREVNX1NFTDEgfAorCQkJCURFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAorCS5yYXRlX29mZnNldAk9IDAsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTl9NRE0sCisJLmVuYWJsZV9iaXQJPSAwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtZG1fb3NjX2NrID0geworCS5uYW1lCQk9ICJtZG1fb3NjX2NrIiwKKwkucmF0ZQkJPSAyNjAwMDAwMCwKKwkucGFyZW50CQk9ICZvc2NfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgUkFURV9GSVhFRCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOX01ETSwKKwkuZW5hYmxlX2JpdAk9IDEsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qCisgKiBMNCBjbG9jayBtYW5hZ2VtZW50IGRvbWFpbgorICoKKyAqIFRoaXMgZG9tYWluIGNvbnRhaW5zIGxvdHMgb2YgaW50ZXJmYWNlIGNsb2NrcyBmcm9tIHRoZSBMNCBpbnRlcmZhY2UsIHNvbWUKKyAqIGZ1bmN0aW9uYWwgY2xvY2tzLglGaXhlZCBBUExMIGZ1bmN0aW9uYWwgc291cmNlIGNsb2NrcyBhcmUgbWFuYWdlZCBpbgorICogdGhpcyBkb21haW4uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGw0X2NrID0gewkJLyogdXNlZCBib3RoIGFzIGFuIGljayBhbmQgZmNrICovCisJLm5hbWUJCT0gImw0X2NrIiwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0NLQ1RMIHwgQUxXQVlTX0VOQUJMRUQgfCBDTV9DT1JFX1NFTDEgfAorCQkJCURFTEFZRURfQVBQIHwgUkFURV9QUk9QQUdBVEVTLAorCS5yYXRlX29mZnNldAk9IDUsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9sNF9pY2sgPSB7CisJLm5hbWUJCT0gInNzaV9sNF9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwgUkFURV9DS0NUTCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMl9DT1JFLAkvKiBiaXQgMSAqLworCS5lbmFibGVfYml0CT0gMSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIERTUyBjbG9jayBkb21haW4KKyAqIENMT0NLczoKKyAqIERTU19MNF9JQ0xLLCBEU1NfTDNfSUNMSywKKyAqIERTU19DTEsxLCBEU1NfQ0xLMiwgRFNTXzU0TUh6X0NMSworICoKKyAqIERTUyBpcyBib3RoIGluaXRpYXRvciBhbmQgdGFyZ2V0LgorICovCitzdGF0aWMgc3RydWN0IGNsayBkc3NfaWNrID0gewkJLyogRW5hYmxlcyBib3RoIEwzLEw0IElDTEsncyAqLworCS5uYW1lCQk9ICJkc3NfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywJLyogcmVhbGx5IGJvdGggbDMgYW5kIGw0ICovCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfCBSQVRFX0NLQ1RMLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3MxX2ZjayA9IHsKKwkubmFtZQkJPSAiZHNzMV9mY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCQkvKiBDb3JlIG9yIHN5cyAqLworCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0NLQ1RMIHwgQ01fQ09SRV9TRUwxIHwgREVMQVlFRF9BUFAsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDAsCisJLnJhdGVfb2Zmc2V0CT0gOCwKKwkuc3JjX29mZnNldAk9IDgsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzczJfZmNrID0gewkJLyogQWx0IGNsayB1c2VkIGluIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwkubmFtZQkJPSAiZHNzMl9mY2siLAorCS5wYXJlbnQJCT0gJnN5c19jaywJCS8qIGZpeGVkIGF0IHN5c19jayBvciA0OE1IeiAqLworCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0NLQ1RMIHwgQ01fQ09SRV9TRUwxIHwgUkFURV9GSVhFRCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMSwKKwkuc3JjX29mZnNldAk9IDEzLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3NfNTRtX2ZjayA9IHsJLyogQWx0IGNsayB1c2VkIGluIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwkubmFtZQkJPSAiZHNzXzU0bV9mY2siLAkvKiA1NG0gdHYgY2xrICovCisJLnBhcmVudAkJPSAmZnVuY181NG1fY2ssCisJLnJhdGUJCT0gNTQwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDIsCisJLnJlY2FsYwkJPSAmb21hcDJfcHJvcGFnYXRlX3JhdGUsCit9OworCisvKgorICogQ09SRSBwb3dlciBkb21haW4gSUNMSyAmIEZDTEsgZGVmaW5lcy4KKyAqIE1hbnkgb2YgdGhlIHRoZXNlIGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgcG9zc2libGUgcGFyZW50LiBFbnRyaWVzCisgKiBoZXJlIHdpbGwgbGlrZWx5IGhhdmUgYW4gTDQgaW50ZXJmYWNlIHBhcmVudCwgYW5kIG1heSBoYXZlIG11bHRpcGxlCisgKiBmdW5jdGlvbmFsIGNsb2NrIHBhcmVudHMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfaWNrID0geworCS5uYW1lCQk9ICJncHQxX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTl9XS1VQLAkvKiBCaXQ0ICovCisJLmVuYWJsZV9iaXQJPSAwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0MV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlDTV9XS1VQX1NFTDEsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTl9XS1VQLAorCS5lbmFibGVfYml0CT0gMCwKKwkuc3JjX29mZnNldAk9IDAsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfaWNrID0geworCS5uYW1lCQk9ICJncHQyX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwJLyogYml0NCAqLworCS5lbmFibGVfYml0CT0gMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDJfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJQ01fQ09SRV9TRUwyLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSA0LAorCS5zcmNfb2Zmc2V0CT0gMiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19pY2sgPSB7CisJLm5hbWUJCT0gImdwdDNfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAkvKiBCaXQ1ICovCisJLmVuYWJsZV9iaXQJPSA1LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQzX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0M19mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlDTV9DT1JFX1NFTDIsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDUsCisJLnNyY19vZmZzZXQJPSA0LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ0X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0NF9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCS8qIEJpdDYgKi8KKwkuZW5hYmxlX2JpdAk9IDYsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDRfZmNrID0geworCS5uYW1lCQk9ICJncHQ0X2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCUNNX0NPUkVfU0VMMiwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gNiwKKwkuc3JjX29mZnNldAk9IDYsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDVfaWNrID0geworCS5uYW1lCQk9ICJncHQ1X2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwJIC8qIEJpdDcgKi8KKwkuZW5hYmxlX2JpdAk9IDcsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDVfZmNrID0geworCS5uYW1lCQk9ICJncHQ1X2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCUNNX0NPUkVfU0VMMiwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gNywKKwkuc3JjX29mZnNldAk9IDgsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDZfaWNrID0geworCS5uYW1lCQk9ICJncHQ2X2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9iaXQJPSA4LAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCSAvKiBiaXQ4ICovCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDZfZmNrID0geworCS5uYW1lCQk9ICJncHQ2X2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCUNNX0NPUkVfU0VMMiwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gOCwKKwkuc3JjX29mZnNldAk9IDEwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ3X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0N19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCSAvKiBiaXQ5ICovCisJLmVuYWJsZV9iaXQJPSA5LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ3X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0N19mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlDTV9DT1JFX1NFTDIsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDksCisJLnNyY19vZmZzZXQJPSAxMiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0OF9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDhfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAkgLyogYml0MTAgKi8KKwkuZW5hYmxlX2JpdAk9IDEwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ4X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0OF9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlDTV9DT1JFX1NFTDIsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDEwLAorCS5zcmNfb2Zmc2V0CT0gMTQsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDlfaWNrID0geworCS5uYW1lCQk9ICJncHQ5X2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDExLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ5X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0OV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQkJQ01fQ09SRV9TRUwyLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxMSwKKwkuc3JjX29mZnNldAk9IDE2LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMF9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDEwX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDEyLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMF9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDEwX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCQlDTV9DT1JFX1NFTDIsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDEyLAorCS5zcmNfb2Zmc2V0CT0gMTgsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDExX2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0MTFfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMTMsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDExX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0MTFfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJCUNNX0NPUkVfU0VMMiwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMTMsCisJLnNyY19vZmZzZXQJPSAyMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTJfaWNrID0geworCS5uYW1lCQk9ICJncHQxMl9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCSAvKiBiaXQxNCAqLworCS5lbmFibGVfYml0CT0gMTQsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEyX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0MTJfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJCUNNX0NPUkVfU0VMMiwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMTQsCisJLnNyY19vZmZzZXQJPSAyMiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AxX2ljayA9IHsKKwkubmFtZQkJPSAibWNic3AxX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9iaXQJPSAxNSwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAkgLyogYml0MTYgKi8KKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AxX2ZjayA9IHsKKwkubmFtZQkJPSAibWNic3AxX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9iaXQJPSAxNSwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcDJfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX2JpdAk9IDE2LAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMl9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwMl9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfYml0CT0gMTYsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AzX2ljayA9IHsKKwkubmFtZQkJPSAibWNic3AzX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAzLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfZmNrID0geworCS5uYW1lCQk9ICJtY2JzcDNfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDMsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNF9pY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwNF9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gNCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3A0X2ZjayA9IHsKKwkubmFtZQkJPSAibWNic3A0X2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSA0LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcDVfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDUsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNV9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwNV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gNSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkxX2ljayA9IHsKKwkubmFtZQkJPSAibWNzcGkxX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDE3LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTFfZmNrID0geworCS5uYW1lCQk9ICJtY3NwaTFfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMTcsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9pY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpMl9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxOCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkyX2ZjayA9IHsKKwkubmFtZQkJPSAibWNzcGkyX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDE4LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTNfaWNrID0geworCS5uYW1lCQk9ICJtY3NwaTNfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDksCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19mY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpM19mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gOSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfaWNrID0geworCS5uYW1lCQk9ICJ1YXJ0MV9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyMSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfZmNrID0geworCS5uYW1lCQk9ICJ1YXJ0MV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyMSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfaWNrID0geworCS5uYW1lCQk9ICJ1YXJ0Ml9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyMiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfZmNrID0geworCS5uYW1lCQk9ICJ1YXJ0Ml9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyMiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfaWNrID0geworCS5uYW1lCQk9ICJ1YXJ0M19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0M19mY2sgPSB7CisJLm5hbWUJCT0gInVhcnQzX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDIsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW9zX2ljayA9IHsKKwkubmFtZQkJPSAiZ3Bpb3NfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOX1dLVVAsCisJLmVuYWJsZV9iaXQJPSAyLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvc19mY2sgPSB7CisJLm5hbWUJCT0gImdwaW9zX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTl9XS1VQLAorCS5lbmFibGVfYml0CT0gMiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbXB1X3dkdF9pY2sgPSB7CisJLm5hbWUJCT0gIm1wdV93ZHRfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOX1dLVVAsCisJLmVuYWJsZV9iaXQJPSAzLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtcHVfd2R0X2ZjayA9IHsKKwkubmFtZQkJPSAibXB1X3dkdF9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU5fV0tVUCwKKwkuZW5hYmxlX2JpdAk9IDMsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHN5bmNfMzJrX2ljayA9IHsKKwkubmFtZQkJPSAic3luY18zMmtfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOX1dLVVAsCisJLmVuYWJsZV9iaXQJPSAxLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgd2R0MV9pY2sgPSB7CisJLm5hbWUJCT0gIndkdDFfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOX1dLVVAsCisJLmVuYWJsZV9iaXQJPSA0LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgb21hcGN0cmxfaWNrID0geworCS5uYW1lCQk9ICJvbWFwY3RybF9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU5fV0tVUCwKKwkuZW5hYmxlX2JpdAk9IDUsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CitzdGF0aWMgc3RydWN0IGNsayBpY3JfaWNrID0geworCS5uYW1lCQk9ICJpY3JfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTl9XS1VQLAorCS5lbmFibGVfYml0CT0gNiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2FtX2ljayA9IHsKKwkubmFtZQkJPSAiY2FtX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDMxLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjYW1fZmNrID0geworCS5uYW1lCQk9ICJjYW1fZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMzEsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1haWxib3hlc19pY2sgPSB7CisJLm5hbWUJCT0gIm1haWxib3hlc19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAzMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgd2R0NF9pY2sgPSB7CisJLm5hbWUJCT0gIndkdDRfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjksCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDRfZmNrID0geworCS5uYW1lCQk9ICJ3ZHQ0X2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDI5LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3ZHQzX2ljayA9IHsKKwkubmFtZQkJPSAid2R0M19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjgsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDNfZmNrID0geworCS5uYW1lCQk9ICJ3ZHQzX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyOCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbXNwcm9faWNrID0geworCS5uYW1lCQk9ICJtc3Byb19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyNywKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbXNwcm9fZmNrID0geworCS5uYW1lCQk9ICJtc3Byb19mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyNywKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jX2ljayA9IHsKKwkubmFtZQkJPSAibW1jX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyNiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jX2ZjayA9IHsKKwkubmFtZQkJPSAibW1jX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyNiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZmFjX2ljayA9IHsKKwkubmFtZQkJPSAiZmFjX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDI1LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmYWNfZmNrID0geworCS5uYW1lCQk9ICJmYWNfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjUsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGVhY19pY2sgPSB7CisJLm5hbWUJCT0gImVhY19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjQsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGVhY19mY2sgPSB7CisJLm5hbWUJCT0gImVhY19mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjQsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGhkcV9pY2sgPSB7CisJLm5hbWUJCT0gImhkcV9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyMywKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ZjayA9IHsKKwkubmFtZQkJPSAiaGRxX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDIzLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmMyX2ljayA9IHsKKwkubmFtZQkJPSAiaTJjMl9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9mY2sgPSB7CisJLm5hbWUJCT0gImkyYzJfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjAsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyY2hzMl9mY2sgPSB7CisJLm5hbWUJCT0gImkyY2hzMl9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gMjAsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzFfaWNrID0geworCS5uYW1lCQk9ICJpMmMxX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDE5LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmMxX2ZjayA9IHsKKwkubmFtZQkJPSAiaTJjMV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxOSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjaHMxX2ZjayA9IHsKKwkubmFtZQkJPSAiaTJjaHMxX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxOSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdmx5bnFfaWNrID0geworCS5uYW1lCQk9ICJ2bHlucV9pY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAzLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB2bHlucV9mY2sgPSB7CisJLm5hbWUJCT0gInZseW5xX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYICB8IFJBVEVfQ0tDVEwgfCBDTV9DT1JFX1NFTDEgfCBERUxBWUVEX0FQUCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMywKKwkuc3JjX29mZnNldAk9IDE1LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzZHJjX2ljayA9IHsKKwkubmFtZQkJPSAic2RyY19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOM19DT1JFLAorCS5lbmFibGVfYml0CT0gMiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZGVzX2ljayA9IHsKKwkubmFtZQkJPSAiZGVzX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjRfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDAsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNoYV9pY2sgPSB7CisJLm5hbWUJCT0gInNoYV9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU40X0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBybmdfaWNrID0geworCS5uYW1lCQk9ICJybmdfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBDTE9DS19JTl9PTUFQMjQyWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VONF9DT1JFLAorCS5lbmFibGVfYml0CT0gMiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYWVzX2ljayA9IHsKKwkubmFtZQkJPSAiYWVzX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjRfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDMsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBrYV9pY2sgPSB7CisJLm5hbWUJCT0gInBrYV9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU40X0NPUkUsCisJLmVuYWJsZV9iaXQJPSA0LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2JfZmNrID0geworCS5uYW1lCQk9ICJ1c2JfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBDTE9DS19JTl9PTUFQMjQyWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNiaHNfaWNrID0geworCS5uYW1lCQk9ICJ1c2Joc19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gNiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMxX2ljayA9IHsKKwkubmFtZQkJPSAibW1jaHMxX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSA3LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoczFfZmNrID0geworCS5uYW1lCQk9ICJtbWNoczFfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDcsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMl9pY2sgPSB7CisJLm5hbWUJCT0gIm1tY2hzMl9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gOCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ZjayA9IHsKKwkubmFtZQkJPSAibW1jaHMyX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSA4LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvNV9pY2sgPSB7CisJLm5hbWUJCT0gImdwaW81X2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfZmNrID0geworCS5uYW1lCQk9ICJncGlvNV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gMTAsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1kbV9pbnRjX2ljayA9IHsKKwkubmFtZQkJPSAibWRtX2ludGNfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDExLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoc2RiMV9mY2sgPSB7CisJLm5hbWUJCT0gIm1tY2hzZGIxX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxNiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaHNkYjJfZmNrID0geworCS5uYW1lCQk9ICJtbWNoc2RiMl9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gMTcsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qCisgKiBUaGlzIGNsb2NrIGlzIGEgY29tcG9zaXRlIGNsb2NrIHdoaWNoIGRvZXMgZW50aXJlIHNldCBjaGFuZ2VzIHRoZW4KKyAqIGZvcmNlcyBhIHJlYmFsYW5jZS4gSXQga2V5cyBvbiB0aGUgTVBVIHNwZWVkLCBidXQgaXQgcmVhbGx5IGNvdWxkCisgKiBiZSBhbnkga2V5IHNwZWVkIHBhcnQgb2YgYSBzZXQgaW4gdGhlIHJhdGUgdGFibGUuCisgKgorICogdG8gcmVhbGx5IGNoYW5nZSBhIHNldCwgeW91IG5lZWQgbWVtb3J5IHRhYmxlIHNldHMgd2hpY2ggZ2V0IGNoYW5nZWQKKyAqIGluIHNyYW0sIHByZS1ub3RpZmllcnMgJiBwb3N0IG5vdGlmaWVycywgY2hhbmdpbmcgdGhlIHRvcCBzZXQsIHdpdGhvdXQKKyAqIGhhdmluZyBsb3cgbGV2ZWwgZGlzcGxheSByZWNhbGMncyB3b24ndCB3b3JrLi4uIHRoaXMgaXMgd2h5IGRwbSBub3RpZmllcnMKKyAqIHdvcmssIGlzcidzIG9mZiwgd2FsayBhIGxpc3Qgb2YgY2xvY2tzIGFscmVhZHkgX29mZl8gYW5kIG5vdCBtZXNzaW5nIHdpdGgKKyAqIHRoZSBidXMuCisgKgorICogVGhpcyBjbG9jayBzaG91bGQgaGF2ZSBubyBwYXJlbnQuIEl0IGVtYm9kaWVzIHRoZSBlbnRpcmUgdXBwZXIgbGV2ZWwKKyAqIGFjdGl2ZSBzZXQuIEEgcGFyZW50IHdpbGwgbWVzcyB1cCBzb21lIG9mIHRoZSBpbml0IGFsc28uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfcHJjbV9zZXQgPSB7CisJLm5hbWUJCT0gInZpcnRfcHJjbV9zZXQiLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlWSVJUVUFMX0NMT0NLIHwgQUxXQVlTX0VOQUJMRUQgfCBERUxBWUVEX0FQUCwKKwkucGFyZW50CQk9ICZtcHVfY2ssCS8qIEluZGV4ZWQgYnkgbXB1IHNwZWVkLCBubyBwYXJlbnQgKi8KKwkucmVjYWxjCQk9ICZvbWFwMl9tcHVfcmVjYWxjLAkvKiBzZXRzIGFyZSBrZXllZCBvbiBtcHUgcmF0ZSAqLworCS5zZXRfcmF0ZQk9ICZvbWFwMl9zZWxlY3RfdGFibGVfcmF0ZSwKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9yb3VuZF90b190YWJsZV9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKm9uY2hpcF9jbGtzW10gPSB7CisJLyogZXh0ZXJuYWwgcm9vdCBzb3VyY2VzICovCisJJmZ1bmNfMzJrX2NrLAorCSZvc2NfY2ssCisJJnN5c19jaywKKwkmYWx0X2NrLAorCS8qIGludGVybmFsIGFuYWxvZyBzb3VyY2VzICovCisJJmRwbGxfY2ssCisJJmFwbGw5Nl9jaywKKwkmYXBsbDU0X2NrLAorCS8qIGludGVybmFsIHByY20gcm9vdCBzb3VyY2VzICovCisJJmZ1bmNfNTRtX2NrLAorCSZjb3JlX2NrLAorCSZzbGVlcF9jaywKKwkmZnVuY185Nm1fY2ssCisJJmZ1bmNfNDhtX2NrLAorCSZmdW5jXzEybV9jaywKKwkmd2R0MV9vc2NfY2ssCisJJnN5c19jbGtvdXQsCisJJnN5c19jbGtvdXQyLAorCS8qIG1wdSBkb21haW4gY2xvY2tzICovCisJJm1wdV9jaywKKwkvKiBkc3AgZG9tYWluIGNsb2NrcyAqLworCSZpdmEyXzFfZmNrLAkJLyogMjQzMCAqLworCSZpdmEyXzFfaWNrLAorCSZkc3BfaWNrLAkJLyogMjQyMCAqLworCSZkc3BfZmNrLAorCSZpdmExX2lmY2ssCisJJml2YTFfbXB1X2ludF9pZmNrLAorCS8qIEdGWCBkb21haW4gY2xvY2tzICovCisJJmdmeF8zZF9mY2ssCisJJmdmeF8yZF9mY2ssCisJJmdmeF9pY2ssCisJLyogTW9kZW0gZG9tYWluIGNsb2NrcyAqLworCSZtZG1faWNrLAorCSZtZG1fb3NjX2NrLAorCS8qIERTUyBkb21haW4gY2xvY2tzICovCisJJmRzc19pY2ssCisJJmRzczFfZmNrLAorCSZkc3MyX2ZjaywKKwkmZHNzXzU0bV9mY2ssCisJLyogTDMgZG9tYWluIGNsb2NrcyAqLworCSZjb3JlX2wzX2NrLAorCSZzc2lfc3NyX3NzdF9mY2ssCisJJnVzYl9sNF9pY2ssCisJLyogTDQgZG9tYWluIGNsb2NrcyAqLworCSZsNF9jaywJCQkvKiB1c2VkIGFzIGJvdGggY29yZV9sNCBhbmQgd3VfbDQgKi8KKwkmc3NpX2w0X2ljaywKKwkvKiB2aXJ0dWFsIG1ldGEtZ3JvdXAgY2xvY2sgKi8KKwkmdmlydF9wcmNtX3NldCwKKwkvKiBnZW5lcmFsIGw0IGludGVyZmFjZSBjaywgbXVsdGktcGFyZW50IGZ1bmN0aW9uYWwgY2xrICovCisJJmdwdDFfaWNrLAorCSZncHQxX2ZjaywKKwkmZ3B0Ml9pY2ssCisJJmdwdDJfZmNrLAorCSZncHQzX2ljaywKKwkmZ3B0M19mY2ssCisJJmdwdDRfaWNrLAorCSZncHQ0X2ZjaywKKwkmZ3B0NV9pY2ssCisJJmdwdDVfZmNrLAorCSZncHQ2X2ljaywKKwkmZ3B0Nl9mY2ssCisJJmdwdDdfaWNrLAorCSZncHQ3X2ZjaywKKwkmZ3B0OF9pY2ssCisJJmdwdDhfZmNrLAorCSZncHQ5X2ljaywKKwkmZ3B0OV9mY2ssCisJJmdwdDEwX2ljaywKKwkmZ3B0MTBfZmNrLAorCSZncHQxMV9pY2ssCisJJmdwdDExX2ZjaywKKwkmZ3B0MTJfaWNrLAorCSZncHQxMl9mY2ssCisJJm1jYnNwMV9pY2ssCisJJm1jYnNwMV9mY2ssCisJJm1jYnNwMl9pY2ssCisJJm1jYnNwMl9mY2ssCisJJm1jYnNwM19pY2ssCisJJm1jYnNwM19mY2ssCisJJm1jYnNwNF9pY2ssCisJJm1jYnNwNF9mY2ssCisJJm1jYnNwNV9pY2ssCisJJm1jYnNwNV9mY2ssCisJJm1jc3BpMV9pY2ssCisJJm1jc3BpMV9mY2ssCisJJm1jc3BpMl9pY2ssCisJJm1jc3BpMl9mY2ssCisJJm1jc3BpM19pY2ssCisJJm1jc3BpM19mY2ssCisJJnVhcnQxX2ljaywKKwkmdWFydDFfZmNrLAorCSZ1YXJ0Ml9pY2ssCisJJnVhcnQyX2ZjaywKKwkmdWFydDNfaWNrLAorCSZ1YXJ0M19mY2ssCisJJmdwaW9zX2ljaywKKwkmZ3Bpb3NfZmNrLAorCSZtcHVfd2R0X2ljaywKKwkmbXB1X3dkdF9mY2ssCisJJnN5bmNfMzJrX2ljaywKKwkmd2R0MV9pY2ssCisJJm9tYXBjdHJsX2ljaywKKwkmaWNyX2ljaywKKwkmY2FtX2ZjaywKKwkmY2FtX2ljaywKKwkmbWFpbGJveGVzX2ljaywKKwkmd2R0NF9pY2ssCisJJndkdDRfZmNrLAorCSZ3ZHQzX2ljaywKKwkmd2R0M19mY2ssCisJJm1zcHJvX2ljaywKKwkmbXNwcm9fZmNrLAorCSZtbWNfaWNrLAorCSZtbWNfZmNrLAorCSZmYWNfaWNrLAorCSZmYWNfZmNrLAorCSZlYWNfaWNrLAorCSZlYWNfZmNrLAorCSZoZHFfaWNrLAorCSZoZHFfZmNrLAorCSZpMmMxX2ljaywKKwkmaTJjMV9mY2ssCisJJmkyY2hzMV9mY2ssCisJJmkyYzJfaWNrLAorCSZpMmMyX2ZjaywKKwkmaTJjaHMyX2ZjaywKKwkmdmx5bnFfaWNrLAorCSZ2bHlucV9mY2ssCisJJnNkcmNfaWNrLAorCSZkZXNfaWNrLAorCSZzaGFfaWNrLAorCSZybmdfaWNrLAorCSZhZXNfaWNrLAorCSZwa2FfaWNrLAorCSZ1c2JfZmNrLAorCSZ1c2Joc19pY2ssCisJJm1tY2hzMV9pY2ssCisJJm1tY2hzMV9mY2ssCisJJm1tY2hzMl9pY2ssCisJJm1tY2hzMl9mY2ssCisJJmdwaW81X2ljaywKKwkmZ3BpbzVfZmNrLAorCSZtZG1faW50Y19pY2ssCisJJm1tY2hzZGIxX2ZjaywKKwkmbW1jaHNkYjJfZmNrLAorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxODFlZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwpAQCAtMCwwICsxLDg5IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKKyAqCisgKiBPTUFQMiBwbGF0Zm9ybSBkZXZpY2Ugc2V0dXAvaW5pdGlhbGl6YXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvdGMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKworZXh0ZXJuIHZvaWQgb21hcF9ub3BfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgCWRlZmluZWQoQ09ORklHX0kyQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfT01BUF9NT0RVTEUpCisKKyNkZWZpbmUgT01BUDJfSTJDX0JBU0UyCQkweDQ4MDcyMDAwCisjZGVmaW5lIE9NQVAyX0kyQ19JTlQyCQk1NworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGkyY19yZXNvdXJjZXMyW10gPSB7CisJeworCQkuc3RhcnQJCT0gT01BUDJfSTJDX0JBU0UyLAorCQkuZW5kCQk9IE9NQVAyX0kyQ19CQVNFMiArIDB4M2YsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IE9NQVAyX0kyQ19JTlQyLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfaTJjX2RldmljZTIgPSB7CisgICAgICAgIC5uYW1lICAgICAgICAgICA9ICJpMmNfb21hcCIsCisgICAgICAgIC5pZCAgICAgICAgICAgICA9IDIsCisgICAgICAgIC5kZXYgPSB7CisgICAgICAgICAgICAgICAgLnJlbGVhc2UgICAgICAgID0gb21hcF9ub3BfcmVsZWFzZSwKKyAgICAgICAgfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaTJjX3Jlc291cmNlczIpLAorCS5yZXNvdXJjZQk9IGkyY19yZXNvdXJjZXMyLAorfTsKKworLyogU2VlIGFsc28gYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYyBmb3IgZmlyc3QgSTJDIG9uIDI0eHggKi8KK3N0YXRpYyB2b2lkIG9tYXBfaW5pdF9pMmModm9pZCkKK3sKKwkvKiBSRVZJU0lUOiBTZWNvbmQgSTJDIG5vdCBpbiB1c2Ugb24gSDQ/ICovCisJaWYgKG1hY2hpbmVfaXNfb21hcF9oNCgpKQorCQlyZXR1cm47CisKKwlvbWFwX2NmZ19yZWcoSjE1XzI0WFhfSTJDMl9TQ0wpOworCW9tYXBfY2ZnX3JlZyhIMTlfMjRYWF9JMkMyX1NEQSk7CisJKHZvaWQpIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF9pMmNfZGV2aWNlMik7Cit9CisKKyNlbHNlCisKK3N0YXRpYyB2b2lkIG9tYXBfaW5pdF9pMmModm9pZCkge30KKworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXAyX2luaXRfZGV2aWNlcyh2b2lkKQoreworCS8qIHBsZWFzZSBrZWVwIHRoZXNlIGNhbGxzLCBhbmQgdGhlaXIgaW1wbGVtZW50YXRpb25zIGFib3ZlLAorCSAqIGluIGFscGhhYmV0aWNhbCBvcmRlciBzbyB0aGV5J3JlIGVhc2llciB0byBzb3J0IHRocm91Z2guCisJICovCisJb21hcF9pbml0X2kyYygpOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKG9tYXAyX2luaXRfZGV2aWNlcyk7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjE4NzMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jCisgKgorICogT01BUDIgQ1BVIGlkZW50aWZpY2F0aW9uIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqIFdyaXR0ZW4gYnkgVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBPTUFQMjRYWF9UQVBfQkFTRQlpb19wMnYoMHg0ODAxNDAwMCkKKworI2RlZmluZSBPTUFQX1RBUF9JRENPREUJCTB4MDIwNAorI2RlZmluZSBPTUFQX1RBUF9QUk9EX0lECTB4MDIwOAorCisjZGVmaW5lIE9NQVBfVEFQX0RJRV9JRF8wCTB4MDIxOAorI2RlZmluZSBPTUFQX1RBUF9ESUVfSURfMQkweDAyMUMKKyNkZWZpbmUgT01BUF9UQVBfRElFX0lEXzIJMHgwMjIwCisjZGVmaW5lIE9NQVBfVEFQX0RJRV9JRF8zCTB4MDIyNAorCisvKiBzeXN0ZW1fcmV2IGZpZWxkcyBmb3IgT01BUDIgcHJvY2Vzc29yczoKKyAqICAgQ1BVIGlkIGJpdHMgICAgIFszMToxNl0sCisgKiAgIENQVSBkZXZpY2UgdHlwZSBbMTU6MTJdLCAodW5wcmcsbm9ybWFsLFBPUCkKKyAqICAgQ1BVIHJldmlzaW9uICAgIFsxMTowOF0KKyAqICAgQ1BVIGNsYXNzIGJpdHMgIFswNzowMF0KKyAqLworCitzdHJ1Y3Qgb21hcF9pZCB7CisJdTE2CWhhd2tleWU7CS8qIFNpbGljb24gdHlwZSAoSGF3a2V5ZSBpZCkgKi8KKwl1OAlkZXY7CQkvKiBEZXZpY2UgdHlwZSBmcm9tIHByb2R1Y3Rpb25faWQgcmVnICovCisJdTMyCXR5cGU7CQkvKiBjb21iaW5lZCB0eXBlIGlkIGNvcGllZCB0byBzeXN0ZW1fcmV2ICovCit9OworCisvKiBSZWdpc3RlciB2YWx1ZXMgdG8gZGV0ZWN0IHRoZSBPTUFQIHZlcnNpb24gKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9pZCBvbWFwX2lkc1tdIF9faW5pdGRhdGEgPSB7CisJeyAuaGF3a2V5ZSA9IDB4YjVkOSwgLmRldiA9IDB4MCwgLnR5cGUgPSAweDI0MjAwMDAwIH0sCisJeyAuaGF3a2V5ZSA9IDB4YjVkOSwgLmRldiA9IDB4MSwgLnR5cGUgPSAweDI0MjAxMDAwIH0sCisJeyAuaGF3a2V5ZSA9IDB4YjVkOSwgLmRldiA9IDB4MiwgLnR5cGUgPSAweDI0MjAyMDAwIH0sCisJeyAuaGF3a2V5ZSA9IDB4YjVkOSwgLmRldiA9IDB4NCwgLnR5cGUgPSAweDI0MjIwMDAwIH0sCisJeyAuaGF3a2V5ZSA9IDB4YjVkOSwgLmRldiA9IDB4OCwgLnR5cGUgPSAweDI0MjMwMDAwIH0sCisJeyAuaGF3a2V5ZSA9IDB4YjY4YSwgLmRldiA9IDB4MCwgLnR5cGUgPSAweDI0MzAwMDAwIH0sCit9OworCitzdGF0aWMgdTMyIF9faW5pdCByZWFkX3RhcF9yZWcoaW50IHJlZykKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoT01BUDI0WFhfVEFQX0JBU0UgKyByZWcpOworfQorCit2b2lkIF9faW5pdCBvbWFwMl9jaGVja19yZXZpc2lvbih2b2lkKQoreworCWludCBpLCBqOworCXUzMiBpZGNvZGU7CisJdTMyIHByb2RfaWQ7CisJdTE2IGhhd2tleWU7CisJdTggIGRldl90eXBlOworCXU4ICByZXY7CisKKwlpZGNvZGUgPSByZWFkX3RhcF9yZWcoT01BUF9UQVBfSURDT0RFKTsKKwlwcm9kX2lkID0gcmVhZF90YXBfcmVnKE9NQVBfVEFQX1BST0RfSUQpOworCWhhd2tleWUgPSAoaWRjb2RlID4+IDEyKSAmIDB4ZmZmZjsKKwlyZXYgPSAoaWRjb2RlID4+IDI4KSAmIDB4MGY7CisJZGV2X3R5cGUgPSAocHJvZF9pZCA+PiAxNikgJiAweDBmOworCisjaWZkZWYgREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiT01BUF9UQVBfSURDT0RFIDB4JTA4eCBSRVYgJWkgSEFXS0VZRSAweCUwNHggTUFORiAlMDN4XG4iLAorCQlpZGNvZGUsIHJldiwgaGF3a2V5ZSwgKGlkY29kZSA+PiAxKSAmIDB4N2ZmKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiT01BUF9UQVBfRElFX0lEXzA6IDB4JTA4eFxuIiwKKwkJcmVhZF90YXBfcmVnKE9NQVBfVEFQX0RJRV9JRF8wKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIk9NQVBfVEFQX0RJRV9JRF8xOiAweCUwOHggREVWX1JFVjogJWlcbiIsCisJCXJlYWRfdGFwX3JlZyhPTUFQX1RBUF9ESUVfSURfMSksCisJICAgICAgIChyZWFkX3RhcF9yZWcoT01BUF9UQVBfRElFX0lEXzEpID4+IDI4KSAmIDB4Zik7CisJcHJpbnRrKEtFUk5fREVCVUcgIk9NQVBfVEFQX0RJRV9JRF8yOiAweCUwOHhcbiIsCisJCXJlYWRfdGFwX3JlZyhPTUFQX1RBUF9ESUVfSURfMikpOworCXByaW50ayhLRVJOX0RFQlVHICJPTUFQX1RBUF9ESUVfSURfMzogMHglMDh4XG4iLAorCQlyZWFkX3RhcF9yZWcoT01BUF9UQVBfRElFX0lEXzMpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiT01BUF9UQVBfUFJPRF9JRF8wOiAweCUwOHggREVWX1RZUEU6ICVpXG4iLAorCQlwcm9kX2lkLCBkZXZfdHlwZSk7CisjZW5kaWYKKworCS8qIENoZWNrIGhhd2tleWUgaWRzICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob21hcF9pZHMpOyBpKyspIHsKKwkJaWYgKGhhd2tleWUgPT0gb21hcF9pZHNbaV0uaGF3a2V5ZSkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID09IEFSUkFZX1NJWkUob21hcF9pZHMpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5rbm93biBPTUFQIENQVSBpZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGogPSBpOyBqIDwgQVJSQVlfU0laRShvbWFwX2lkcyk7IGorKykgeworCQlpZiAoZGV2X3R5cGUgPT0gb21hcF9pZHNbal0uZGV2KQorCQkJYnJlYWs7CisJfQorCisJaWYgKGogPT0gQVJSQVlfU0laRShvbWFwX2lkcykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmtub3duIE9NQVAgZGV2aWNlIHR5cGUuICIKKwkJCQkiSGFuZGxpbmcgaXQgYXMgT01BUCUwNHhcbiIsCisJCQkJb21hcF9pZHNbaV0udHlwZSA+PiAxNik7CisJCWogPSBpOworCX0KKwlzeXN0ZW1fcmV2ID0gb21hcF9pZHNbal0udHlwZTsKKworCXN5c3RlbV9yZXYgfD0gcmV2IDw8IDg7CisKKwkvKiBBZGQgdGhlIGNwdSBjbGFzcyBpbmZvICgyNHh4KSAqLworCXN5c3RlbV9yZXYgfD0gMHgyNDsKKworCXByX2luZm8oIk9NQVAlMDR4Iiwgc3lzdGVtX3JldiA+PiAxNik7CisJaWYgKChzeXN0ZW1fcmV2ID4+IDgpICYgMHgwZikKKwkJcHJpbnRrKCIleCIsIChzeXN0ZW1fcmV2ID4+IDgpICYgMHgwZik7CisJcHJpbnRrKCJcbiIpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVhNjdiZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwpAQCAtMCwwICsxLDUzIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCisgKgorICogT01BUDIgSS9PIG1hcHBpbmcgY29kZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBKdWhhIFlyavZs5CA8anVoYS55cmpvbGFAbm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorCitleHRlcm4gdm9pZCBvbWFwX3NyYW1faW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgb21hcDJfY2xrX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBvbWFwMl9jaGVja19yZXZpc2lvbih2b2lkKTsKKworLyoKKyAqIFRoZSBtYWNoaW5lIHNwZWNpZmljIGNvZGUgbWF5IHByb3ZpZGUgdGhlIGV4dHJhIG1hcHBpbmcgYmVzaWRlcyB0aGUKKyAqIGRlZmF1bHQgbWFwcGluZyBwcm92aWRlZCBoZXJlLgorICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXAyX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwJPSBMM18yNFhYX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihMM18yNFhYX1BIWVMpLAorCQkubGVuZ3RoCQk9IEwzXzI0WFhfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gTDRfMjRYWF9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oTDRfMjRYWF9QSFlTKSwKKwkJLmxlbmd0aAkJPSBMNF8yNFhYX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0KK307CisKK3ZvaWQgX19pbml0IG9tYXBfbWFwX2NvbW1vbl9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdChvbWFwMl9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAyX2lvX2Rlc2MpKTsKKwlvbWFwMl9jaGVja19yZXZpc2lvbigpOworCW9tYXBfc3JhbV9pbml0KCk7CisJb21hcDJfbXV4X2luaXQoKTsKKwlvbWFwMl9jbGtfaW5pdCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pcnEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdiYWZmNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAvb21hcDIvaXJxLmMKKyAqCisgKiBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgT01BUDIgYm9hcmRzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBQYXVsIE11bmR0IDxwYXVsLm11bmR0QG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBJTlRDX1JFVklTSU9OCTB4MDAwMAorI2RlZmluZSBJTlRDX1NZU0NPTkZJRwkweDAwMTAKKyNkZWZpbmUgSU5UQ19TWVNTVEFUVVMJMHgwMDE0CisjZGVmaW5lIElOVENfQ09OVFJPTAkweDAwNDgKKyNkZWZpbmUgSU5UQ19NSVJfQ0xFQVIwCTB4MDA4OAorI2RlZmluZSBJTlRDX01JUl9TRVQwCTB4MDA4YworCisvKgorICogT01BUDIgaGFzIGEgbnVtYmVyIG9mIGRpZmZlcmVudCBpbnRlcnJ1cHQgY29udHJvbGxlcnMsIGVhY2ggaW50ZXJydXB0CisgKiBjb250cm9sbGVyIGlzIGlkZW50aWZpZWQgYXMgaXRzIG93biAiYmFuayIuIFJlZ2lzdGVyIGRlZmluaXRpb25zIGFyZQorICogZmFpcmx5IGNvbnNpc3RlbnQgZm9yIGVhY2ggYmFuaywgYnV0IG5vdCBhbGwgcmVnaXN0ZXJzIGFyZSBpbXBsZW1lbnRlZAorICogZm9yIGVhY2ggYmFuay4uIHdoZW4gaW4gZG91YnQsIGNvbnN1bHQgdGhlIFRSTS4KKyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2lycV9iYW5rIHsKKwl1bnNpZ25lZCBsb25nIGJhc2VfcmVnOworCXVuc2lnbmVkIGludCBucl9pcnFzOworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCg0KSkpIGlycV9iYW5rc1tdID0geworCXsKKwkJLyogTVBVIElOVEMgKi8KKwkJLmJhc2VfcmVnCT0gT01BUDI0WFhfSUNfQkFTRSwKKwkJLm5yX2lycXMJPSA5NiwKKwl9LCB7CisJCS8qIFhYWDogRFNQIElOVEMgKi8KKworI2lmIDAKKwkvKgorCSAqIENvbW1lbnRlZCBvdXQgZm9yIG5vdyB1bnRpbCB3ZSBmaXggdGhlIElWQSBjbG9ja2luZworCSAqLworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDIwCisJfSwgeworCQkvKiBJVkEgSU5UQyAoMjQyMCBvbmx5KSAqLworCQkuYmFzZV9yZWcJPSBPTUFQMjRYWF9JVkFfSU5UQ19CQVNFLAorCQkubnJfaXJxcwk9IDE2LAkvKiBBY3R1YWxseSAzMiwgYnV0IG9ubHkgMTYgYXJlIHVzZWQgKi8KKyNlbmRpZgorI2VuZGlmCisJfQorfTsKKworLyogWFhYOiBGSVEgYW5kIGFkZGl0aW9uYWwgSU5UQyBzdXBwb3J0IChvbmx5IE1QVSBhdCB0aGUgbW9tZW50KSAqLworc3RhdGljIHZvaWQgb21hcF9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJb21hcF93cml0ZWwoMHgxLCBpcnFfYmFua3NbMF0uYmFzZV9yZWcgKyBJTlRDX0NPTlRST0wpOworfQorCitzdGF0aWMgdm9pZCBvbWFwX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IG9mZnNldCA9IChpcnEgPj4gNSkgPDwgNTsKKworCWlmIChpcnEgPj0gNjQpIHsKKwkJaXJxICU9IDY0OworCX0gZWxzZSBpZiAoaXJxID49IDMyKSB7CisJCWlycSAlPSAzMjsKKwl9CisKKwlvbWFwX3dyaXRlbCgxIDw8IGlycSwgaXJxX2JhbmtzWzBdLmJhc2VfcmVnICsgSU5UQ19NSVJfU0VUMCArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBvZmZzZXQgPSAoaXJxID4+IDUpIDw8IDU7CisKKwlpZiAoaXJxID49IDY0KSB7CisJCWlycSAlPSA2NDsKKwl9IGVsc2UgaWYgKGlycSA+PSAzMikgeworCQlpcnEgJT0gMzI7CisJfQorCisJb21hcF93cml0ZWwoMSA8PCBpcnEsIGlycV9iYW5rc1swXS5iYXNlX3JlZyArIElOVENfTUlSX0NMRUFSMCArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfbWFza19hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJb21hcF9tYXNrX2lycShpcnEpOworCW9tYXBfYWNrX2lycShpcnEpOworfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgb21hcF9pcnFfY2hpcCA9IHsKKwkuYWNrCT0gb21hcF9tYXNrX2Fja19pcnEsCisJLm1hc2sJPSBvbWFwX21hc2tfaXJxLAorCS51bm1hc2sJPSBvbWFwX3VubWFza19pcnEsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9pcnFfYmFua19pbml0X29uZShzdHJ1Y3Qgb21hcF9pcnFfYmFuayAqYmFuaykKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCXRtcCA9IG9tYXBfcmVhZGwoYmFuay0+YmFzZV9yZWcgKyBJTlRDX1JFVklTSU9OKSAmIDB4ZmY7CisJcHJpbnRrKEtFUk5fSU5GTyAiSVJROiBGb3VuZCBhbiBJTlRDIGF0IDB4JTA4bHggIgorCQkJICIocmV2aXNpb24gJWxkLiVsZCkgd2l0aCAlZCBpbnRlcnJ1cHRzXG4iLAorCQkJIGJhbmstPmJhc2VfcmVnLCB0bXAgPj4gNCwgdG1wICYgMHhmLCBiYW5rLT5ucl9pcnFzKTsKKworCXRtcCA9IG9tYXBfcmVhZGwoYmFuay0+YmFzZV9yZWcgKyBJTlRDX1NZU0NPTkZJRyk7CisJdG1wIHw9IDEgPDwgMTsJLyogc29mdCByZXNldCAqLworCW9tYXBfd3JpdGVsKHRtcCwgYmFuay0+YmFzZV9yZWcgKyBJTlRDX1NZU0NPTkZJRyk7CisKKwl3aGlsZSAoIShvbWFwX3JlYWRsKGJhbmstPmJhc2VfcmVnICsgSU5UQ19TWVNTVEFUVVMpICYgMHgxKSkKKwkJLyogV2FpdCBmb3IgcmVzZXQgdG8gY29tcGxldGUgKi87Cit9CisKK3ZvaWQgX19pbml0IG9tYXBfaW5pdF9pcnEodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG5yX2lycXMgPSAwOworCXVuc2lnbmVkIGludCBucl9iYW5rcyA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpcnFfYmFua3MpOyBpKyspIHsKKwkJc3RydWN0IG9tYXBfaXJxX2JhbmsgKmJhbmsgPSBpcnFfYmFua3MgKyBpOworCisJCS8qIFhYWCAqLworCQlpZiAoIWJhbmstPmJhc2VfcmVnKQorCQkJY29udGludWU7CisKKwkJb21hcF9pcnFfYmFua19pbml0X29uZShiYW5rKTsKKworCQlucl9pcnFzICs9IGJhbmstPm5yX2lycXM7CisJCW5yX2JhbmtzKys7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiVG90YWwgb2YgJWxkIGludGVycnVwdHMgb24gJWQgYWN0aXZlIGNvbnRyb2xsZXIlc1xuIiwKKwkgICAgICAgbnJfaXJxcywgbnJfYmFua3MsIG5yX2JhbmtzID4gMSA/ICJzIiA6ICIiKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9pcnFzOyBpKyspIHsKKwkJc2V0X2lycV9jaGlwKGksICZvbWFwX2lycV9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGksIGRvX2xldmVsX0lSUSk7CisJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCk7CisJfQorfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTQ2NTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwpAQCAtMCwwICsxLDY1IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYworICoKKyAqIE9NQVAxIHBpbiBtdWx0aXBsZXhpbmcgY29uZmlndXJhdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogV3JpdHRlbiBieSBUb255IExpbmRncmVuIDx0b255LmxpbmRncmVuQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CisKKyNpZmRlZiBDT05GSUdfT01BUF9NVVgKKworLyogTk9URTogU2VlIG11eC5oIGZvciB0aGUgZW51bWVyYXRpb24gKi8KKworc3RydWN0IHBpbl9jb25maWcgX19pbml0ZGF0YV9vcl9tb2R1bGUgb21hcDI0eHhfcGluc1tdID0geworLyoKKyAqCWRlc2NyaXB0aW9uCQkJbXV4CW11eAlwdWxsCXB1bGwJZGVidWcKKyAqCQkJCQlvZmZzZXQJbW9kZQllbmEJdHlwZQorICovCisKKy8qIDI0eHggSTJDICovCitNVVhfQ0ZHXzI0WFgoIk0xOV8yNFhYX0kyQzFfU0NMIiwJMHgxMTEsCTAsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkwxNV8yNFhYX0kyQzFfU0RBIiwJMHgxMTIsCTAsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkoxNV8yNFhYX0kyQzJfU0NMIiwJMHgxMTMsCTAsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkgxOV8yNFhYX0kyQzJfU0RBIiwJMHgxMTQsCTAsCTAsCTAsCTEpCisKKy8qIE1lbmVsYXVzIGludGVycnVwdCAqLworTVVYX0NGR18yNFhYKCJXMTlfMjRYWF9TWVNfTklSUSIsCTB4MTJjLAkwLAkxLAkxLAkxKQorCisvKiAyNHh4IEdQSU8gKi8KK01VWF9DRkdfMjRYWCgiWTIwXzI0WFhfR1BJTzYwIiwJCTB4MTJjLAkzLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJNMTVfMjRYWF9HUElPOTIiLAkJMHgxMGEsCTMsCTAsCTAsCTEpCisKK307CisKK2ludCBfX2luaXQgb21hcDJfbXV4X2luaXQodm9pZCkKK3sKKwlvbWFwX211eF9yZWdpc3RlcihvbWFwMjR4eF9waW5zLCBBUlJBWV9TSVpFKG9tYXAyNHh4X3BpbnMpKTsKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYjg5YjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20uaApAQCAtMCwwICsxLDQxOSBAQAorLyoKKyAqIHByY20uaCAtIEFjY2VzcyBkZWZpbmF0aW9ucyBmb3IgdXNlIGluIE9NQVAyNFhYIGNsb2NrIGFuZCBwb3dlciBtYW5hZ2VtZW50CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfRFBNX1BSQ01fSAorI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9EUE1fUFJDTV9ICisKKy8qIFNFVF9QRVJGT1JNQU5DRV9MRVZFTCBQQVJBTUVURVJTICovCisjZGVmaW5lIFBSQ01fSEFMRl9TUEVFRCAxCisjZGVmaW5lIFBSQ01fRlVMTF9TUEVFRCAyCisKKyNpZm5kZWYgX19BU1NFTUJMRVJfXworCisjZGVmaW5lIFBSQ01fUkVHMzIob2Zmc2V0KQlfX1JFRzMyKE9NQVAyNFhYX1BSQ01fQkFTRSArIChvZmZzZXQpKQorCisjZGVmaW5lIFBSQ01fUkVWSVNJT04JCVBSQ01fUkVHMzIoMHgwMDApCisjZGVmaW5lIFBSQ01fU1lTQ09ORklHCQlQUkNNX1JFRzMyKDB4MDEwKQorI2RlZmluZSBQUkNNX0lSUVNUQVRVU19NUFUJUFJDTV9SRUczMigweDAxOCkKKyNkZWZpbmUgUFJDTV9JUlFFTkFCTEVfTVBVCVBSQ01fUkVHMzIoMHgwMUMpCisjZGVmaW5lIFBSQ01fVk9MVENUUkwJCVBSQ01fUkVHMzIoMHgwNTApCisjZGVmaW5lIFBSQ01fVk9MVFNUCQlQUkNNX1JFRzMyKDB4MDU0KQorI2RlZmluZSBQUkNNX0NMS1NSQ19DVFJMCVBSQ01fUkVHMzIoMHgwNjApCisjZGVmaW5lIFBSQ01fQ0xLT1VUX0NUUkwJUFJDTV9SRUczMigweDA3MCkKKyNkZWZpbmUgUFJDTV9DTEtFTVVMX0NUUkwJUFJDTV9SRUczMigweDA3OCkKKyNkZWZpbmUgUFJDTV9DTEtDRkdfQ1RSTAlQUkNNX1JFRzMyKDB4MDgwKQorI2RlZmluZSBQUkNNX0NMS0NGR19TVEFUVVMJUFJDTV9SRUczMigweDA4NCkKKyNkZWZpbmUgUFJDTV9WT0xUU0VUVVAJCVBSQ01fUkVHMzIoMHgwOTApCisjZGVmaW5lIFBSQ01fQ0xLU1NFVFVQCQlQUkNNX1JFRzMyKDB4MDk0KQorI2RlZmluZSBQUkNNX1BPTENUUkwJCVBSQ01fUkVHMzIoMHgwOTgpCisKKy8qIEdFTkVSQUwgUFVSUE9TRSAqLworI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxCVBSQ01fUkVHMzIoMHgwQjApCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTIJUFJDTV9SRUczMigweDBCNCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMwlQUkNNX1JFRzMyKDB4MEI4KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0U0CVBSQ01fUkVHMzIoMHgwQkMpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTUJUFJDTV9SRUczMigweDBDMCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFNglQUkNNX1JFRzMyKDB4MEM0KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0U3CVBSQ01fUkVHMzIoMHgwQzgpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTgJUFJDTV9SRUczMigweDBDQykKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFOQlQUkNNX1JFRzMyKDB4MEQwKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxMAlQUkNNX1JFRzMyKDB4MEQ0KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxMQlQUkNNX1JFRzMyKDB4MEQ4KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxMglQUkNNX1JFRzMyKDB4MERDKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxMwlQUkNNX1JFRzMyKDB4MEUwKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxNAlQUkNNX1JFRzMyKDB4MEU0KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxNQlQUkNNX1JFRzMyKDB4MEU4KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxNglQUkNNX1JFRzMyKDB4MEVDKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxNwlQUkNNX1JFRzMyKDB4MEYwKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxOAlQUkNNX1JFRzMyKDB4MEY0KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxOQlQUkNNX1JFRzMyKDB4MEY4KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UyMAlQUkNNX1JFRzMyKDB4MEZDKQorCisvKiBNUFUgKi8KKyNkZWZpbmUgQ01fQ0xLU0VMX01QVQkJUFJDTV9SRUczMigweDE0MCkKKyNkZWZpbmUgQ01fQ0xLU1RDVFJMX01QVQlQUkNNX1JFRzMyKDB4MTQ4KQorI2RlZmluZSBSTV9SU1RTVF9NUFUJCVBSQ01fUkVHMzIoMHgxNTgpCisjZGVmaW5lIFBNX1dLREVQX01QVQkJUFJDTV9SRUczMigweDFDOCkKKyNkZWZpbmUgUE1fRVZHRU5DVFJMX01QVQlQUkNNX1JFRzMyKDB4MUQ0KQorI2RlZmluZSBQTV9FVkVHRU5PTlRJTV9NUFUJUFJDTV9SRUczMigweDFEOCkKKyNkZWZpbmUgUE1fRVZFR0VOT0ZGVElNX01QVQlQUkNNX1JFRzMyKDB4MURDKQorI2RlZmluZSBQTV9QV1NUQ1RSTF9NUFUJCVBSQ01fUkVHMzIoMHgxRTApCisjZGVmaW5lIFBNX1BXU1RTVF9NUFUJCVBSQ01fUkVHMzIoMHgxRTQpCisKKy8qIENPUkUgKi8KKyNkZWZpbmUgQ01fRkNMS0VOMV9DT1JFCQlQUkNNX1JFRzMyKDB4MjAwKQorI2RlZmluZSBDTV9GQ0xLRU4yX0NPUkUJCVBSQ01fUkVHMzIoMHgyMDQpCisjZGVmaW5lIENNX0ZDTEtFTjNfQ09SRQkJUFJDTV9SRUczMigweDIwOCkKKyNkZWZpbmUgQ01fSUNMS0VOMV9DT1JFCQlQUkNNX1JFRzMyKDB4MjEwKQorI2RlZmluZSBDTV9JQ0xLRU4yX0NPUkUJCVBSQ01fUkVHMzIoMHgyMTQpCisjZGVmaW5lIENNX0lDTEtFTjNfQ09SRQkJUFJDTV9SRUczMigweDIxOCkKKyNkZWZpbmUgQ01fSUNMS0VONF9DT1JFCQlQUkNNX1JFRzMyKDB4MjFDKQorI2RlZmluZSBDTV9JRExFU1QxX0NPUkUJCVBSQ01fUkVHMzIoMHgyMjApCisjZGVmaW5lIENNX0lETEVTVDJfQ09SRQkJUFJDTV9SRUczMigweDIyNCkKKyNkZWZpbmUgQ01fSURMRVNUM19DT1JFCQlQUkNNX1JFRzMyKDB4MjI4KQorI2RlZmluZSBDTV9JRExFU1Q0X0NPUkUJCVBSQ01fUkVHMzIoMHgyMkMpCisjZGVmaW5lIENNX0FVVE9JRExFMV9DT1JFCVBSQ01fUkVHMzIoMHgyMzApCisjZGVmaW5lIENNX0FVVE9JRExFMl9DT1JFCVBSQ01fUkVHMzIoMHgyMzQpCisjZGVmaW5lIENNX0FVVE9JRExFM19DT1JFCVBSQ01fUkVHMzIoMHgyMzgpCisjZGVmaW5lIENNX0FVVE9JRExFNF9DT1JFCVBSQ01fUkVHMzIoMHgyM0MpCisjZGVmaW5lIENNX0NMS1NFTDFfQ09SRQkJUFJDTV9SRUczMigweDI0MCkKKyNkZWZpbmUgQ01fQ0xLU0VMMl9DT1JFCQlQUkNNX1JFRzMyKDB4MjQ0KQorI2RlZmluZSBDTV9DTEtTVENUUkxfQ09SRQlQUkNNX1JFRzMyKDB4MjQ4KQorI2RlZmluZSBQTV9XS0VOMV9DT1JFCQlQUkNNX1JFRzMyKDB4MkEwKQorI2RlZmluZSBQTV9XS0VOMl9DT1JFCQlQUkNNX1JFRzMyKDB4MkE0KQorI2RlZmluZSBQTV9XS1NUMV9DT1JFCQlQUkNNX1JFRzMyKDB4MkIwKQorI2RlZmluZSBQTV9XS1NUMl9DT1JFCQlQUkNNX1JFRzMyKDB4MkI0KQorI2RlZmluZSBQTV9XS0RFUF9DT1JFCQlQUkNNX1JFRzMyKDB4MkM4KQorI2RlZmluZSBQTV9QV1NUQ1RSTF9DT1JFCVBSQ01fUkVHMzIoMHgyRTApCisjZGVmaW5lIFBNX1BXU1RTVF9DT1JFCQlQUkNNX1JFRzMyKDB4MkU0KQorCisvKiBHRlggKi8KKyNkZWZpbmUgQ01fRkNMS0VOX0dGWAkJUFJDTV9SRUczMigweDMwMCkKKyNkZWZpbmUgQ01fSUNMS0VOX0dGWAkJUFJDTV9SRUczMigweDMxMCkKKyNkZWZpbmUgQ01fSURMRVNUX0dGWAkJUFJDTV9SRUczMigweDMyMCkKKyNkZWZpbmUgQ01fQ0xLU0VMX0dGWAkJUFJDTV9SRUczMigweDM0MCkKKyNkZWZpbmUgQ01fQ0xLU1RDVFJMX0dGWAlQUkNNX1JFRzMyKDB4MzQ4KQorI2RlZmluZSBSTV9SU1RDVFJMX0dGWAkJUFJDTV9SRUczMigweDM1MCkKKyNkZWZpbmUgUk1fUlNUU1RfR0ZYCQlQUkNNX1JFRzMyKDB4MzU4KQorI2RlZmluZSBQTV9XS0RFUF9HRlgJCVBSQ01fUkVHMzIoMHgzQzgpCisjZGVmaW5lIFBNX1BXU1RDVFJMX0dGWAkJUFJDTV9SRUczMigweDNFMCkKKyNkZWZpbmUgUE1fUFdTVFNUX0dGWAkJUFJDTV9SRUczMigweDNFNCkKKworLyogV0FLRS1VUCAqLworI2RlZmluZSBDTV9GQ0xLRU5fV0tVUAkJUFJDTV9SRUczMigweDQwMCkKKyNkZWZpbmUgQ01fSUNMS0VOX1dLVVAJCVBSQ01fUkVHMzIoMHg0MTApCisjZGVmaW5lIENNX0lETEVTVF9XS1VQCQlQUkNNX1JFRzMyKDB4NDIwKQorI2RlZmluZSBDTV9BVVRPSURMRV9XS1VQCVBSQ01fUkVHMzIoMHg0MzApCisjZGVmaW5lIENNX0NMS1NFTF9XS1VQCQlQUkNNX1JFRzMyKDB4NDQwKQorI2RlZmluZSBSTV9SU1RDVFJMX1dLVVAJCVBSQ01fUkVHMzIoMHg0NTApCisjZGVmaW5lIFJNX1JTVFRJTUVfV0tVUAkJUFJDTV9SRUczMigweDQ1NCkKKyNkZWZpbmUgUk1fUlNUU1RfV0tVUAkJUFJDTV9SRUczMigweDQ1OCkKKyNkZWZpbmUgUE1fV0tFTl9XS1VQCQlQUkNNX1JFRzMyKDB4NEEwKQorI2RlZmluZSBQTV9XS1NUX1dLVVAJCVBSQ01fUkVHMzIoMHg0QjApCisKKy8qIENMT0NLUyAqLworI2RlZmluZSBDTV9DTEtFTl9QTEwJCVBSQ01fUkVHMzIoMHg1MDApCisjZGVmaW5lIENNX0lETEVTVF9DS0dFTgkJUFJDTV9SRUczMigweDUyMCkKKyNkZWZpbmUgQ01fQVVUT0lETEVfUExMCQlQUkNNX1JFRzMyKDB4NTMwKQorI2RlZmluZSBDTV9DTEtTRUwxX1BMTAkJUFJDTV9SRUczMigweDU0MCkKKyNkZWZpbmUgQ01fQ0xLU0VMMl9QTEwJCVBSQ01fUkVHMzIoMHg1NDQpCisKKy8qIERTUCAqLworI2RlZmluZSBDTV9GQ0xLRU5fRFNQCQlQUkNNX1JFRzMyKDB4ODAwKQorI2RlZmluZSBDTV9JQ0xLRU5fRFNQCQlQUkNNX1JFRzMyKDB4ODEwKQorI2RlZmluZSBDTV9JRExFU1RfRFNQCQlQUkNNX1JFRzMyKDB4ODIwKQorI2RlZmluZSBDTV9BVVRPSURMRV9EU1AJCVBSQ01fUkVHMzIoMHg4MzApCisjZGVmaW5lIENNX0NMS1NFTF9EU1AJCVBSQ01fUkVHMzIoMHg4NDApCisjZGVmaW5lIENNX0NMS1NUQ1RSTF9EU1AJUFJDTV9SRUczMigweDg0OCkKKyNkZWZpbmUgUk1fUlNUQ1RSTF9EU1AJCVBSQ01fUkVHMzIoMHg4NTApCisjZGVmaW5lIFJNX1JTVFNUX0RTUAkJUFJDTV9SRUczMigweDg1OCkKKyNkZWZpbmUgUE1fV0tFTl9EU1AJCVBSQ01fUkVHMzIoMHg4QTApCisjZGVmaW5lIFBNX1dLREVQX0RTUAkJUFJDTV9SRUczMigweDhDOCkKKyNkZWZpbmUgUE1fUFdTVENUUkxfRFNQCQlQUkNNX1JFRzMyKDB4OEUwKQorI2RlZmluZSBQTV9QV1NUU1RfRFNQCQlQUkNNX1JFRzMyKDB4OEU0KQorI2RlZmluZSBQUkNNX0lSUVNUQVRVU19EU1AJUFJDTV9SRUczMigweDhGMCkKKyNkZWZpbmUgUFJDTV9JUlFFTkFCTEVfRFNQCVBSQ01fUkVHMzIoMHg4RjQpCisKKy8qIElWQSAqLworI2RlZmluZSBQUkNNX0lSUVNUQVRVU19JVkEJUFJDTV9SRUczMigweDhGOCkKKyNkZWZpbmUgUFJDTV9JUlFFTkFCTEVfSVZBCVBSQ01fUkVHMzIoMHg4RkMpCisKKy8qIE1vZGVtIG9uIDI0MzAgKi8KKyNkZWZpbmUgQ01fRkNMS0VOX01ETQkJUFJDTV9SRUczMigweEMwMCkKKyNkZWZpbmUgQ01fSUNMS0VOX01ETQkJUFJDTV9SRUczMigweEMxMCkKKyNkZWZpbmUgQ01fSURMRVNUX01ETQkJUFJDTV9SRUczMigweEMyMCkKKyNkZWZpbmUgQ01fQ0xLU0VMX01ETQkJUFJDTV9SRUczMigweEM0MCkKKworLyogRklYTUU6IE1vdmUgdG8gaGVhZGVyIGZvciAyNDMwICovCisjZGVmaW5lIERJU1BfQkFTRQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg1MDAwMCkKKyNkZWZpbmUgRElTUF9SRUczMihvZmZzZXQpCV9fUkVHMzIoRElTUF9CQVNFICsgKG9mZnNldCkpCisKKyNkZWZpbmUgR1BNQ19CQVNFCQkoT01BUDI0WFhfR1BNQ19CQVNFKQorI2RlZmluZSBHUE1DX1JFRzMyKG9mZnNldCkJX19SRUczMihHUE1DX0JBU0UgKyAob2Zmc2V0KSkKKworI2RlZmluZSBHUFQxX0JBU0UJCShPTUFQMjRYWF9HUFQxKQorI2RlZmluZSBHUFQxX1JFRzMyKG9mZnNldCkJX19SRUczMihHUFQxX0JBU0UgKyAob2Zmc2V0KSkKKworLyogTWlzYyBzeXNjb25maWcgKi8KKyNkZWZpbmUgRElTUENfU1lTQ09ORklHCQlESVNQX1JFRzMyKDB4NDEwKQorI2RlZmluZSBTUElfQkFTRQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg5ODAwMCkKKyNkZWZpbmUgTUNTUEkxX1NZU0NPTkZJRwlfX1JFRzMyKFNQSV9CQVNFICsgMHgxMCkKKyNkZWZpbmUgTUNTUEkyX1NZU0NPTkZJRwlfX1JFRzMyKFNQSV9CQVNFKzB4MjAwMCArIDB4MTApCisKKy8vI2RlZmluZSBEU1BfTU1VX1NZU0NPTkZJRwkweDVBMDAwMDEwCisjZGVmaW5lIENBTUVSQV9NTVVfU1lTQ09ORklHCV9fUkVHMzIoRElTUF9CQVNFKzB4MkMxMCkKKy8vI2RlZmluZSBJVkFfTU1VX1NZU0NPTkZJRwkweDVEMDAwMDEwCisvLyNkZWZpbmUgRFNQX0RNQV9TWVNDT05GSUcJMHgwMEZDQzAyQworI2RlZmluZSBDQU1FUkFfRE1BX1NZU0NPTkZJRwlfX1JFRzMyKERJU1BfQkFTRSsweDI4MkMpCisjZGVmaW5lIFNZU1RFTV9ETUFfU1lTQ09ORklHCV9fUkVHMzIoRElTUF9CQVNFKzB4NjAyQykKKyNkZWZpbmUgR1BNQ19TWVNDT05GSUcJCUdQTUNfUkVHMzIoMHgwMTApCisjZGVmaW5lIE1BSUxCT1hFU19TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4OTQwMTApCisjZGVmaW5lIFVBUlQxX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4NkEwNTQpCisjZGVmaW5lIFVBUlQyX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4NkMwNTQpCisjZGVmaW5lIFVBUlQzX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4NkUwNTQpCisvLyNkZWZpbmUgSVZBX1NZU0NPTkZJRwkJMHg1QzA2MDAxMAorI2RlZmluZSBTRFJDX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgxMCkKKyNkZWZpbmUgU01TX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9TTVNfQkFTRSsweDEwKQorI2RlZmluZSBTU0lfU1lTQ09ORklHCQlfX1JFRzMyKERJU1BfQkFTRSsweDgwMTApCisvLyNkZWZpbmUgVkxZTlFfU1lTQ09ORklHCTB4NjdGRkZFMTAKKworLyogcmt3IC0gZ29vZCBjYW5uaWRhdGVzIGZvciBQTV8gdG8gc3RhcnQgd2hhdCBubSB3YXMgdHJ5aW5nICovCisjZGVmaW5lIE9NQVAyNFhYX0dQVDIJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4MkEwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDMJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4NzgwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDQJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4N0EwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDUJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4N0MwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDYJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4N0UwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDcJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODAwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDgJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODIwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDkJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODQwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDEwCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDg2MDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQxMQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg4ODAwMCkKKyNkZWZpbmUgT01BUDI0WFhfR1BUMTIJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4OEEwMDApCisKKyNkZWZpbmUgR1BUSU1FUjFfU1lTQ09ORklHCUdQVDFfUkVHMzIoMHgwMTApCisjZGVmaW5lIEdQVElNRVIyX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDIgKyAweDEwKQorI2RlZmluZSBHUFRJTUVSM19TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQzICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjRfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUNCArIDB4MTApCisjZGVmaW5lIEdQVElNRVI1X1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDUgKyAweDEwKQorI2RlZmluZSBHUFRJTUVSNl9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQ2ICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjdfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUNyArIDB4MTApCisjZGVmaW5lIEdQVElNRVI4X1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDggKyAweDEwKQorI2RlZmluZSBHUFRJTUVSOV9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQ5ICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjEwX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDEwICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjExX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDExICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjEyX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDEyICsgMHgxMCkKKworI2RlZmluZSBHUElPWF9CQVNFKFgpCQkoT01BUDI0WFhfR1BJT19CQVNFKygweDIwMDAqKChYKS0xKSkpCisKKyNkZWZpbmUgR1BJTzFfU1lTQ09ORklHCQlfX1JFRzMyKChHUElPWF9CQVNFKDEpKzB4MTApKQorI2RlZmluZSBHUElPMl9TWVNDT05GSUcJCV9fUkVHMzIoKEdQSU9YX0JBU0UoMikrMHgxMCkpCisjZGVmaW5lIEdQSU8zX1NZU0NPTkZJRwkJX19SRUczMigoR1BJT1hfQkFTRSgzKSsweDEwKSkKKyNkZWZpbmUgR1BJTzRfU1lTQ09ORklHCQlfX1JFRzMyKChHUElPWF9CQVNFKDQpKzB4MTApKQorCisvKiBHUCBUSU1FUiAxICovCisjZGVmaW5lIEdQVElNRVIxX1RJU1RBVAkJR1BUMV9SRUczMigweDAxNCkKKyNkZWZpbmUgR1BUSU1FUjFfVElTUgkJR1BUMV9SRUczMigweDAxOCkKKyNkZWZpbmUgR1BUSU1FUjFfVElFUgkJR1BUMV9SRUczMigweDAxQykKKyNkZWZpbmUgR1BUSU1FUjFfVFdFUgkJR1BUMV9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BUSU1FUjFfVENMUgkJR1BUMV9SRUczMigweDAyNCkKKyNkZWZpbmUgR1BUSU1FUjFfVENSUgkJR1BUMV9SRUczMigweDAyOCkKKyNkZWZpbmUgR1BUSU1FUjFfVExEUgkJR1BUMV9SRUczMigweDAyQykKKyNkZWZpbmUgR1BUSU1FUjFfVFRHUgkJR1BUMV9SRUczMigweDAzMCkKKyNkZWZpbmUgR1BUSU1FUjFfVFdQUwkJR1BUMV9SRUczMigweDAzNCkKKyNkZWZpbmUgR1BUSU1FUjFfVE1BUgkJR1BUMV9SRUczMigweDAzOCkKKyNkZWZpbmUgR1BUSU1FUjFfVENBUjEJCUdQVDFfUkVHMzIoMHgwM0MpCisjZGVmaW5lIEdQVElNRVIxX1RTSUNSCQlHUFQxX1JFRzMyKDB4MDQwKQorI2RlZmluZSBHUFRJTUVSMV9UQ0FSMgkJR1BUMV9SRUczMigweDA0NCkKKworLyogcmt3IC0tIGJhc2UgZml4IHVwIHBsZWFzZS4uLiAqLworI2RlZmluZSBHUFRJTUVSM19USVNSCQlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg3ODAxOCkKKworLyogU0RSQyAqLworI2RlZmluZSBTRFJDX0RMTEFfQ1RSTAkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNjApCisjZGVmaW5lIFNEUkNfRExMQV9TVEFUVVMJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNjQpCisjZGVmaW5lIFNEUkNfRExMQl9DVFJMCQlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSsweDA2OCkKKyNkZWZpbmUgU0RSQ19ETExCX1NUQVRVUwlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSsweDA2QykKKyNkZWZpbmUgU0RSQ19QT1dFUgkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNzApCisjZGVmaW5lIFNEUkNfTVJfMAkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwODQpCisKKy8qIEdQSU8gMSAqLworI2RlZmluZSBHUElPMV9CQVNFCQlHUElPWF9CQVNFKDEpCisjZGVmaW5lIEdQSU8xX1JFRzMyKG9mZnNldCkJX19SRUczMihHUElPMV9CQVNFICsgKG9mZnNldCkpCisjZGVmaW5lIEdQSU8xX0lSUUVOQUJMRTEJR1BJTzFfUkVHMzIoMHgwMUMpCisjZGVmaW5lIEdQSU8xX0lSUVNUQVRVUzEJR1BJTzFfUkVHMzIoMHgwMTgpCisjZGVmaW5lIEdQSU8xX0lSUUVOQUJMRTIJR1BJTzFfUkVHMzIoMHgwMkMpCisjZGVmaW5lIEdQSU8xX0lSUVNUQVRVUzIJR1BJTzFfUkVHMzIoMHgwMjgpCisjZGVmaW5lIEdQSU8xX1dBS0VVUEVOQUJMRQlHUElPMV9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BJTzFfUklTSU5HREVURUNUCUdQSU8xX1JFRzMyKDB4MDQ4KQorI2RlZmluZSBHUElPMV9EQVRBSU4JCUdQSU8xX1JFRzMyKDB4MDM4KQorI2RlZmluZSBHUElPMV9PRQkJR1BJTzFfUkVHMzIoMHgwMzQpCisjZGVmaW5lIEdQSU8xX0RBVEFPVVQJCUdQSU8xX1JFRzMyKDB4MDNDKQorCisvKiBHUElPMiAqLworI2RlZmluZSBHUElPMl9CQVNFCQlHUElPWF9CQVNFKDIpCisjZGVmaW5lIEdQSU8yX1JFRzMyKG9mZnNldCkJX19SRUczMihHUElPMl9CQVNFICsgKG9mZnNldCkpCisjZGVmaW5lIEdQSU8yX0lSUUVOQUJMRTEJR1BJTzJfUkVHMzIoMHgwMUMpCisjZGVmaW5lIEdQSU8yX0lSUVNUQVRVUzEJR1BJTzJfUkVHMzIoMHgwMTgpCisjZGVmaW5lIEdQSU8yX0lSUUVOQUJMRTIJR1BJTzJfUkVHMzIoMHgwMkMpCisjZGVmaW5lIEdQSU8yX0lSUVNUQVRVUzIJR1BJTzJfUkVHMzIoMHgwMjgpCisjZGVmaW5lIEdQSU8yX1dBS0VVUEVOQUJMRQlHUElPMl9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BJTzJfUklTSU5HREVURUNUCUdQSU8yX1JFRzMyKDB4MDQ4KQorI2RlZmluZSBHUElPMl9EQVRBSU4JCUdQSU8yX1JFRzMyKDB4MDM4KQorI2RlZmluZSBHUElPMl9PRQkJR1BJTzJfUkVHMzIoMHgwMzQpCisjZGVmaW5lIEdQSU8yX0RBVEFPVVQJCUdQSU8yX1JFRzMyKDB4MDNDKQorCisvKiBHUElPIDMgKi8KKyNkZWZpbmUgR1BJTzNfQkFTRQkJR1BJT1hfQkFTRSgzKQorI2RlZmluZSBHUElPM19SRUczMihvZmZzZXQpCV9fUkVHMzIoR1BJTzNfQkFTRSArIChvZmZzZXQpKQorI2RlZmluZSBHUElPM19JUlFFTkFCTEUxCUdQSU8zX1JFRzMyKDB4MDFDKQorI2RlZmluZSBHUElPM19JUlFTVEFUVVMxCUdQSU8zX1JFRzMyKDB4MDE4KQorI2RlZmluZSBHUElPM19JUlFFTkFCTEUyCUdQSU8zX1JFRzMyKDB4MDJDKQorI2RlZmluZSBHUElPM19JUlFTVEFUVVMyCUdQSU8zX1JFRzMyKDB4MDI4KQorI2RlZmluZSBHUElPM19XQUtFVVBFTkFCTEUJR1BJTzNfUkVHMzIoMHgwMjApCisjZGVmaW5lIEdQSU8zX1JJU0lOR0RFVEVDVAlHUElPM19SRUczMigweDA0OCkKKyNkZWZpbmUgR1BJTzNfRkFMTElOR0RFVEVDVAlHUElPM19SRUczMigweDA0QykKKyNkZWZpbmUgR1BJTzNfREFUQUlOCQlHUElPM19SRUczMigweDAzOCkKKyNkZWZpbmUgR1BJTzNfT0UJCUdQSU8zX1JFRzMyKDB4MDM0KQorI2RlZmluZSBHUElPM19EQVRBT1VUCQlHUElPM19SRUczMigweDAzQykKKyNkZWZpbmUgR1BJTzNfREVCT1VOQ0VOQUJMRQlHUElPM19SRUczMigweDA1MCkKKyNkZWZpbmUgR1BJTzNfREVCT1VOQ0lOR1RJTUUJR1BJTzNfUkVHMzIoMHgwNTQpCisKKy8qIEdQSU8gNCAqLworI2RlZmluZSBHUElPNF9CQVNFCQlHUElPWF9CQVNFKDQpCisjZGVmaW5lIEdQSU80X1JFRzMyKG9mZnNldCkJX19SRUczMihHUElPNF9CQVNFICsgKG9mZnNldCkpCisjZGVmaW5lIEdQSU80X0lSUUVOQUJMRTEJR1BJTzRfUkVHMzIoMHgwMUMpCisjZGVmaW5lIEdQSU80X0lSUVNUQVRVUzEJR1BJTzRfUkVHMzIoMHgwMTgpCisjZGVmaW5lIEdQSU80X0lSUUVOQUJMRTIJR1BJTzRfUkVHMzIoMHgwMkMpCisjZGVmaW5lIEdQSU80X0lSUVNUQVRVUzIJR1BJTzRfUkVHMzIoMHgwMjgpCisjZGVmaW5lIEdQSU80X1dBS0VVUEVOQUJMRQlHUElPNF9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BJTzRfUklTSU5HREVURUNUCUdQSU80X1JFRzMyKDB4MDQ4KQorI2RlZmluZSBHUElPNF9GQUxMSU5HREVURUNUCUdQSU80X1JFRzMyKDB4MDRDKQorI2RlZmluZSBHUElPNF9EQVRBSU4JCUdQSU80X1JFRzMyKDB4MDM4KQorI2RlZmluZSBHUElPNF9PRQkJR1BJTzRfUkVHMzIoMHgwMzQpCisjZGVmaW5lIEdQSU80X0RBVEFPVVQJCUdQSU80X1JFRzMyKDB4MDNDKQorI2RlZmluZSBHUElPNF9ERUJPVU5DRU5BQkxFCUdQSU80X1JFRzMyKDB4MDUwKQorI2RlZmluZSBHUElPNF9ERUJPVU5DSU5HVElNRQlHUElPNF9SRUczMigweDA1NCkKKworCisvKiBJTyBDT05GSUcgKi8KKyNkZWZpbmUgQ09OVFJPTF9CQVNFCQkoT01BUDI0WFhfQ1RSTF9CQVNFKQorI2RlZmluZSBDT05UUk9MX1JFRzMyKG9mZnNldCkJX19SRUczMihDT05UUk9MX0JBU0UgKyAob2Zmc2V0KSkKKworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU1BJMV9OQ1MyCUNPTlRST0xfUkVHMzIoMHgxMDQpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TWVNfWFRBTE9VVAlDT05UUk9MX1JFRzMyKDB4MTM0KQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfVUFSVDFfUlgJQ09OVFJPTF9SRUczMigweDBDOCkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01DQlNQMV9EWAlDT05UUk9MX1JFRzMyKDB4MTBDKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19OQ1M0CUNPTlRST0xfUkVHMzIoMHgwOTApCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDUJCUNPTlRST0xfUkVHMzIoMHgwQjgpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDkJCUNPTlRST0xfUkVHMzIoMHgwQkMpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDEzCQlDT05UUk9MX1JFRzMyKDB4MEMwKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX1ZTWU5DCUNPTlRST0xfUkVHMzIoMHgwQ0MpCisKKy8qIENPTlRST0wgKi8KKyNkZWZpbmUgQ09OVFJPTF9ERVZDT05GCQlDT05UUk9MX1JFRzMyKDB4Mjc0KQorCisvKiBJTlRFUlJVUFQgQ09OVFJPTExFUiAqLworI2RlZmluZSBJTlRDX0JBU0UJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ZmUwMDApCisjZGVmaW5lIElOVENfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKElOVENfQkFTRSArIChvZmZzZXQpKQorCisjZGVmaW5lIElOVEMxX1VfQkFTRQkJSU5UQ19SRUczMigweDAwMCkKKyNkZWZpbmUgSU5UQ19NSVIwCQlJTlRDX1JFRzMyKDB4MDg0KQorI2RlZmluZSBJTlRDX01JUl9TRVQwCQlJTlRDX1JFRzMyKDB4MDhDKQorI2RlZmluZSBJTlRDX01JUl9DTEVBUjAJCUlOVENfUkVHMzIoMHgwODgpCisjZGVmaW5lIElOVENfSVNSX0NMRUFSMAkJSU5UQ19SRUczMigweDA5NCkKKyNkZWZpbmUgSU5UQ19NSVIxCQlJTlRDX1JFRzMyKDB4MEE0KQorI2RlZmluZSBJTlRDX01JUl9TRVQxCQlJTlRDX1JFRzMyKDB4MEFDKQorI2RlZmluZSBJTlRDX01JUl9DTEVBUjEJCUlOVENfUkVHMzIoMHgwQTgpCisjZGVmaW5lIElOVENfSVNSX0NMRUFSMQkJSU5UQ19SRUczMigweDBCNCkKKyNkZWZpbmUgSU5UQ19NSVIyCQlJTlRDX1JFRzMyKDB4MEM0KQorI2RlZmluZSBJTlRDX01JUl9TRVQyCQlJTlRDX1JFRzMyKDB4MENDKQorI2RlZmluZSBJTlRDX01JUl9DTEVBUjIJCUlOVENfUkVHMzIoMHgwQzgpCisjZGVmaW5lIElOVENfSVNSX0NMRUFSMgkJSU5UQ19SRUczMigweDBENCkKKyNkZWZpbmUgSU5UQ19TSVJfSVJRCQlJTlRDX1JFRzMyKDB4MDQwKQorI2RlZmluZSBJTlRDX0NPTlRST0wJCUlOVENfUkVHMzIoMHgwNDgpCisjZGVmaW5lIElOVENfSUxSMTEJCUlOVENfUkVHMzIoMHgxMkMpCisjZGVmaW5lIElOVENfSUxSMzIJCUlOVENfUkVHMzIoMHgxODApCisjZGVmaW5lIElOVENfSUxSMzcJCUlOVENfUkVHMzIoMHgxOTQpCisjZGVmaW5lIElOVENfU1lTQ09ORklHCQlJTlRDX1JFRzMyKDB4MDEwKQorCisvKiBSQU0gRklSRVdBTEwgKi8KKyNkZWZpbmUgUkFNRldfQkFTRQkJKDB4NjgwMDUwMDApCisjZGVmaW5lIFJBTUZXX1JFRzMyKG9mZnNldCkJX19SRUczMihSQU1GV19CQVNFICsgKG9mZnNldCkpCisKKyNkZWZpbmUgUkFNRldfUkVRSU5GT1BFUk0wCVJBTUZXX1JFRzMyKDB4MDQ4KQorI2RlZmluZSBSQU1GV19SRUFEUEVSTTAJCVJBTUZXX1JFRzMyKDB4MDUwKQorI2RlZmluZSBSQU1GV19XUklURVBFUk0wCVJBTUZXX1JFRzMyKDB4MDU4KQorCisvKiBHUE1DIENTMSBGUEdBIE9OIFVTRVIgSU5URVJGQUNFIE1PRFVMRSAqLworLy8jZGVmaW5lIERFQlVHX0JPQVJEX0xFRF9SRUdJU1RFUiAweDA0MDAwMDE0CisKKy8qIEdQTUMgQ1MwICovCisjZGVmaW5lIEdQTUNfQ09ORklHMV8wCQlHUE1DX1JFRzMyKDB4MDYwKQorI2RlZmluZSBHUE1DX0NPTkZJRzJfMAkJR1BNQ19SRUczMigweDA2NCkKKyNkZWZpbmUgR1BNQ19DT05GSUczXzAJCUdQTUNfUkVHMzIoMHgwNjgpCisjZGVmaW5lIEdQTUNfQ09ORklHNF8wCQlHUE1DX1JFRzMyKDB4MDZDKQorI2RlZmluZSBHUE1DX0NPTkZJRzVfMAkJR1BNQ19SRUczMigweDA3MCkKKyNkZWZpbmUgR1BNQ19DT05GSUc2XzAJCUdQTUNfUkVHMzIoMHgwNzQpCisjZGVmaW5lIEdQTUNfQ09ORklHN18wCQlHUE1DX1JFRzMyKDB4MDc4KQorCisvKiBEU1MgKi8KKyNkZWZpbmUgRFNTX0NPTlRST0wJCURJU1BfUkVHMzIoMHgwNDApCisjZGVmaW5lIERJU1BDX0NPTlRST0wJCURJU1BfUkVHMzIoMHg0NDApCisjZGVmaW5lIERJU1BDX1NZU1NUQVRVUwkJRElTUF9SRUczMigweDQxNCkKKyNkZWZpbmUgRElTUENfSVJRU1RBVFVTCQlESVNQX1JFRzMyKDB4NDE4KQorI2RlZmluZSBESVNQQ19JUlFFTkFCTEUJCURJU1BfUkVHMzIoMHg0MUMpCisjZGVmaW5lIERJU1BDX0NPTkZJRwkJRElTUF9SRUczMigweDQ0NCkKKyNkZWZpbmUgRElTUENfREVGQVVMVF9DT0xPUjAJRElTUF9SRUczMigweDQ0QykKKyNkZWZpbmUgRElTUENfREVGQVVMVF9DT0xPUjEJRElTUF9SRUczMigweDQ1MCkKKyNkZWZpbmUgRElTUENfVFJBTlNfQ09MT1IwCURJU1BfUkVHMzIoMHg0NTQpCisjZGVmaW5lIERJU1BDX1RSQU5TX0NPTE9SMQlESVNQX1JFRzMyKDB4NDU4KQorI2RlZmluZSBESVNQQ19MSU5FX05VTUJFUglESVNQX1JFRzMyKDB4NDYwKQorI2RlZmluZSBESVNQQ19USU1JTkdfSAkJRElTUF9SRUczMigweDQ2NCkKKyNkZWZpbmUgRElTUENfVElNSU5HX1YJCURJU1BfUkVHMzIoMHg0NjgpCisjZGVmaW5lIERJU1BDX1BPTF9GUkVRCQlESVNQX1JFRzMyKDB4NDZDKQorI2RlZmluZSBESVNQQ19ESVZJU09SCQlESVNQX1JFRzMyKDB4NDcwKQorI2RlZmluZSBESVNQQ19TSVpFX0RJRwkJRElTUF9SRUczMigweDQ3OCkKKyNkZWZpbmUgRElTUENfU0laRV9MQ0QJCURJU1BfUkVHMzIoMHg0N0MpCisjZGVmaW5lIERJU1BDX0dGWF9CQTAJCURJU1BfUkVHMzIoMHg0ODApCisjZGVmaW5lIERJU1BDX0dGWF9CQTEJCURJU1BfUkVHMzIoMHg0ODQpCisjZGVmaW5lIERJU1BDX0dGWF9QT1NJVElPTglESVNQX1JFRzMyKDB4NDg4KQorI2RlZmluZSBESVNQQ19HRlhfU0laRQkJRElTUF9SRUczMigweDQ4QykKKyNkZWZpbmUgRElTUENfR0ZYX0FUVFJJQlVURVMJRElTUF9SRUczMigweDRBMCkKKyNkZWZpbmUgRElTUENfR0ZYX0ZJRk9fVEhSRVNIT0xECURJU1BfUkVHMzIoMHg0QTQpCisjZGVmaW5lIERJU1BDX0dGWF9ST1dfSU5DCURJU1BfUkVHMzIoMHg0QUMpCisjZGVmaW5lIERJU1BDX0dGWF9QSVhFTF9JTkMJRElTUF9SRUczMigweDRCMCkKKyNkZWZpbmUgRElTUENfR0ZYX1dJTkRPV19TS0lQCURJU1BfUkVHMzIoMHg0QjQpCisjZGVmaW5lIERJU1BDX0dGWF9UQUJMRV9CQQlESVNQX1JFRzMyKDB4NEI4KQorI2RlZmluZSBESVNQQ19EQVRBX0NZQ0xFMQlESVNQX1JFRzMyKDB4NUQ0KQorI2RlZmluZSBESVNQQ19EQVRBX0NZQ0xFMglESVNQX1JFRzMyKDB4NUQ4KQorI2RlZmluZSBESVNQQ19EQVRBX0NZQ0xFMwlESVNQX1JFRzMyKDB4NURDKQorCisvKiBXYWtlIHVwIGRlZmluZSBmb3IgYm9hcmQgKi8KKyNkZWZpbmUgR1BJTzk3CQkJKDEgPDwgMSkKKyNkZWZpbmUgR1BJTzg4CQkJKDEgPDwgMjQpCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxFUl9fICovCisKKyNlbmRpZgorCisKKworCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZGYwNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1vbWFwL29tYXAyL3NlcmlhbC5jCisgKgorICogT01BUDIgc2VyaWFsIHN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IFBhdWwgTXVuZHQgPHBhdWwubXVuZHRAbm9raWEuY29tPgorICoKKyAqIEJhc2VkIG9mZiBvZiBhcmNoL2FybS9tYWNoLW9tYXAvb21hcDEvc2VyaWFsLmMKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2Nsb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorCitzdGF0aWMgc3RydWN0IGNsayAqIHVhcnQxX2ljayA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGNsayAqIHVhcnQxX2ZjayA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGNsayAqIHVhcnQyX2ljayA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGNsayAqIHVhcnQyX2ZjayA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGNsayAqIHVhcnQzX2ljayA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGNsayAqIHVhcnQzX2ZjayA9IE5VTEw7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5tZW1iYXNlCT0gKGNoYXIgKilJT19BRERSRVNTKE9NQVBfVUFSVDFfQkFTRSksCisJCS5tYXBiYXNlCT0gKHVuc2lnbmVkIGxvbmcpT01BUF9VQVJUMV9CQVNFLAorCQkuaXJxCQk9IDcyLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5yZWdzaGlmdAk9IDIsCisJCS51YXJ0Y2xrCT0gT01BUDE2WFhfQkFTRV9CQVVEICogMTYsCisJfSwgeworCQkubWVtYmFzZQk9IChjaGFyICopSU9fQUREUkVTUyhPTUFQX1VBUlQyX0JBU0UpLAorCQkubWFwYmFzZQk9ICh1bnNpZ25lZCBsb25nKU9NQVBfVUFSVDJfQkFTRSwKKwkJLmlycQkJPSA3MywKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkucmVnc2hpZnQJPSAyLAorCQkudWFydGNsawk9IE9NQVAxNlhYX0JBU0VfQkFVRCAqIDE2LAorCX0sIHsKKwkJLm1lbWJhc2UJPSAoY2hhciAqKUlPX0FERFJFU1MoT01BUF9VQVJUM19CQVNFKSwKKwkJLm1hcGJhc2UJPSAodW5zaWduZWQgbG9uZylPTUFQX1VBUlQzX0JBU0UsCisJCS5pcnEJCT0gNzQsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLmlvdHlwZQkJPSBVUElPX01FTSwKKwkJLnJlZ3NoaWZ0CT0gMiwKKwkJLnVhcnRjbGsJPSBPTUFQMTZYWF9CQVNFX0JBVUQgKiAxNiwKKwl9LCB7CisJCS5mbGFncwkJPSAwCisJfQorfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2VyaWFsX3JlYWRfcmVnKHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqdXAsCisJCQkJCSAgIGludCBvZmZzZXQpCit7CisJb2Zmc2V0IDw8PSB1cC0+cmVnc2hpZnQ7CisJcmV0dXJuICh1bnNpZ25lZCBpbnQpX19yYXdfcmVhZGIodXAtPm1lbWJhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VyaWFsX3dyaXRlX3JlZyhzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgKnAsIGludCBvZmZzZXQsCisJCQkJICAgIGludCB2YWx1ZSkKK3sKKwlvZmZzZXQgPDw9IHAtPnJlZ3NoaWZ0OworCV9fcmF3X3dyaXRlYih2YWx1ZSwgKHVuc2lnbmVkIGxvbmcpKHAtPm1lbWJhc2UgKyBvZmZzZXQpKTsKK30KKworLyoKKyAqIEludGVybmFsIFVBUlRzIG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQgZm9yIHRoZSA4MjUwIGF1dG9jb25maWcgdG8gd29yaworICogcHJvcGVybHkuIE5vdGUgdGhhdCB0aGUgVFggd2F0ZXJtYXJrIGluaXRpYWxpemF0aW9uIG1heSBub3QgYmUgbmVlZGVkCisgKiBvbmNlIHRoZSA4MjUwLmMgd2F0ZXJtYXJrIGhhbmRsaW5nIGNvZGUgaXMgbWVyZ2VkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IG9tYXBfc2VyaWFsX3Jlc2V0KHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqcCkKK3sKKwlzZXJpYWxfd3JpdGVfcmVnKHAsIFVBUlRfT01BUF9NRFIxLCAweDA3KTsKKwlzZXJpYWxfd3JpdGVfcmVnKHAsIFVBUlRfT01BUF9TQ1IsIDB4MDgpOworCXNlcmlhbF93cml0ZV9yZWcocCwgVUFSVF9PTUFQX01EUjEsIDB4MDApOworCXNlcmlhbF93cml0ZV9yZWcocCwgVUFSVF9PTUFQX1NZU0MsIDB4MDEpOworfQorCit2b2lkIF9faW5pdCBvbWFwX3NlcmlhbF9pbml0KCkKK3sKKwlpbnQgaTsKKwljb25zdCBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyAqaW5mbzsKKworCS8qCisJICogTWFrZSBzdXJlIHRoZSBzZXJpYWwgcG9ydHMgYXJlIG11eGVkIG9uIGF0IHRoaXMgcG9pbnQuCisJICogWW91IGhhdmUgdG8gbXV4IHRoZW0gb2ZmIGluIGRldmljZSBkcml2ZXJzIGxhdGVyIG9uCisJICogaWYgbm90IG5lZWRlZC4KKwkgKi8KKworCWluZm8gPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfVUFSVCwKKwkJCSAgICAgICBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyk7CisKKwlpZiAoaW5mbyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgT01BUF9NQVhfTlJfUE9SVFM7IGkrKykgeworCQlzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgKnAgPSBzZXJpYWxfcGxhdGZvcm1fZGF0YSArIGk7CisKKwkJaWYgKCEoaW5mby0+ZW5hYmxlZF91YXJ0cyAmICgxIDw8IGkpKSkgeworCQkJcC0+bWVtYmFzZSA9IDA7CisJCQlwLT5tYXBiYXNlID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3dpdGNoIChpKSB7CisJCWNhc2UgMDoKKwkJCXVhcnQxX2ljayA9IGNsa19nZXQoTlVMTCwgInVhcnQxX2ljayIpOworCQkJaWYgKElTX0VSUih1YXJ0MV9pY2spKQorCQkJCXByaW50aygiQ291bGQgbm90IGdldCB1YXJ0MV9pY2tcbiIpOworCQkJZWxzZSB7CisJCQkJY2xrX3VzZSh1YXJ0MV9pY2spOworCQkJfQorCisJCQl1YXJ0MV9mY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0MV9mY2siKTsKKwkJCWlmIChJU19FUlIodWFydDFfZmNrKSkKKwkJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgdWFydDFfZmNrXG4iKTsKKwkJCWVsc2UgeworCQkJCWNsa191c2UodWFydDFfZmNrKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQl1YXJ0Ml9pY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0Ml9pY2siKTsKKwkJCWlmIChJU19FUlIodWFydDJfaWNrKSkKKwkJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgdWFydDJfaWNrXG4iKTsKKwkJCWVsc2UgeworCQkJCWNsa191c2UodWFydDJfaWNrKTsKKwkJCX0KKworCQkJdWFydDJfZmNrID0gY2xrX2dldChOVUxMLCAidWFydDJfZmNrIik7CisJCQlpZiAoSVNfRVJSKHVhcnQyX2ZjaykpCisJCQkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IHVhcnQyX2Zja1xuIik7CisJCQllbHNlIHsKKwkJCQljbGtfdXNlKHVhcnQyX2Zjayk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJdWFydDNfaWNrID0gY2xrX2dldChOVUxMLCAidWFydDNfaWNrIik7CisJCQlpZiAoSVNfRVJSKHVhcnQzX2ljaykpCisJCQkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IHVhcnQzX2lja1xuIik7CisJCQllbHNlIHsKKwkJCQljbGtfdXNlKHVhcnQzX2ljayk7CisJCQl9CisKKwkJCXVhcnQzX2ZjayA9IGNsa19nZXQoTlVMTCwgInVhcnQzX2ZjayIpOworCQkJaWYgKElTX0VSUih1YXJ0M19mY2spKQorCQkJCXByaW50aygiQ291bGQgbm90IGdldCB1YXJ0M19mY2tcbiIpOworCQkJZWxzZSB7CisJCQkJY2xrX3VzZSh1YXJ0M19mY2spOworCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQlvbWFwX3NlcmlhbF9yZXNldChwKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNlcmlhbF9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJzZXJpYWw4MjUwIiwKKwkuaWQJCQk9IDAsCisJLmRldgkJCT0geworCQkucGxhdGZvcm1fZGF0YQk9IHNlcmlhbF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzZXJpYWxfZGV2aWNlKTsKK30KK2FyY2hfaW5pdGNhbGwob21hcF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbS1mbi5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtLWZuLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE4NjllMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbS1mbi5TCkBAIC0wLDAgKzEsMzMzIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMS9zcmFtLlMKKyAqCisgKiBPbWFwMiBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIHJ1biBpbiBpbnRlcm5hbCBTUkFNCisgKgorICogKEMpIENvcHlyaWdodCAyMDA0CisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIC9QVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lvLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9wcmNtLmg+CisKKyNkZWZpbmUgVElNRVJfMzJLU1lOQ1RfQ1JfVglJT19BRERSRVNTKE9NQVAyNFhYXzMyS1NZTkNUX0JBU0UgKyAweDAxMCkKKworI2RlZmluZSBDTV9DTEtTRUwyX1BMTF9WCUlPX0FERFJFU1MoT01BUDI0WFhfUFJDTV9CQVNFICsgMHg1NDQpCisjZGVmaW5lIFBSQ01fVk9MVENUUkxfVgkJSU9fQUREUkVTUyhPTUFQMjRYWF9QUkNNX0JBU0UgKyAweDA1MCkKKyNkZWZpbmUgUFJDTV9DTEtDRkdfQ1RSTF9WCUlPX0FERFJFU1MoT01BUDI0WFhfUFJDTV9CQVNFICsgMHgwODApCisjZGVmaW5lIENNX0NMS0VOX1BMTF9WCQlJT19BRERSRVNTKE9NQVAyNFhYX1BSQ01fQkFTRSArIDB4NTAwKQorI2RlZmluZSBDTV9JRExFU1RfQ0tHRU5fVglJT19BRERSRVNTKE9NQVAyNFhYX1BSQ01fQkFTRSArIDB4NTIwKQorI2RlZmluZSBDTV9DTEtTRUwxX1BMTF9WCUlPX0FERFJFU1MoT01BUDI0WFhfUFJDTV9CQVNFICsgMHg1NDApCisKKyNkZWZpbmUgU0RSQ19ETExBX0NUUkxfVglJT19BRERSRVNTKE9NQVAyNFhYX1NEUkNfQkFTRSArIDB4MDYwKQorI2RlZmluZSBTRFJDX1JGUl9DVFJMX1YJCUlPX0FERFJFU1MoT01BUDI0WFhfU0RSQ19CQVNFICsgMHgwYTQpCisKKwkudGV4dAorCitFTlRSWShzcmFtX2Rkcl9pbml0KQorCXN0bWZkCXNwISwge3IwIC0gcjEyLCBscn0JQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjaworCisJbW92CXIxMiwgcjIJCQlAIGNhcHR1cmUgQ1MxIHZzIENTMAorCW1vdglyOCwgcjMJCQlAIGNhcHR1cmUgZm9yY2UgcGFyYW1ldGVyCisKKwkvKiBmcmVxdWVuY3kgc2hpZnQgZG93biAqLworCWxkcglyMiwgY21fY2xrc2VsMl9wbGwJQCBnZXQgYWRkcmVzcyBvZiBkcGxsb3V0IHJlZworCW1vdglyMywgIzB4MQkJQCB2YWx1ZSBmb3IgMXggb3BlcmF0aW9uCisJc3RyCXIzLCBbcjJdCQlAIGdvIHRvIEwxLWZyZXEgb3BlcmF0aW9uCisKKwkvKiB2b2x0YWdlIHNoaWZ0IGRvd24gKi8KKwltb3YgcjksICMweDEJCQlAIHNldCB1cCBmb3IgTDEgdm9sdGFnZSBjYWxsCisJYmwgdm9sdGFnZV9zaGlmdAkJQCBnbyBkcm9wIHZvbHRhZ2UKKworCS8qIGRsbCBsb2NrIG1vZGUgKi8KKwlsZHIJcjExLCBzZHJjX2RsbGFfY3RybAlAIGFkZHIgb2YgZGxsYSBjdHJsCisJbGRyCXIxMCwgW3IxMV0JCUAgZ2V0IGN1cnJlbnQgdmFsCisJY21wCXIxMiwgIzB4MQkJQCBjczEgYmFzZSAoMjQyMiBlczIuMDUvMSkKKwlhZGRlcQlyMTEsIHIxMSwgIzB4OAkJQCBpZiBjczEgYmFzZSwgbW92ZSB0byBETExCCisJbXZuCXI5LCAjMHg0CQlAIG1hc2sgdG8gZ2V0IGNsZWFyIGJpdDIKKwlhbmQJcjEwLCByMTAsIHI5CQlAIGNsZWFyIGJpdDIgZm9yIGxvY2sgbW9kZS4KKwlvcnIJcjEwLCByMTAsICMweDgJCUAgbWFrZSBzdXJlIERMTCBvbiAoZXMyIGJpdCBwb3MpCisJb3JyCXIxMCwgcjEwLCAjMHgyCQlAIDkwIGRlZ3JlZSBwaGFzZSBmb3IgYWxsIGJlbG93IDEzM01oegorCXN0cglyMTAsIFtyMTFdCQlAIGNvbW1pdCB0byBETExBX0NUUkwKKwlibAlpX2RsbF93YWl0CQlAIHdhaXQgZm9yIGRsbCB0byBsb2NrCisKKwkvKiBnZXQgZGxsIHZhbHVlICovCisJYWRkCXIxMSwgcjExLCAjMHg0CQlAIGdldCBhZGRyIG9mIHN0YXR1cyByZWcKKwlsZHIJcjEwLCBbcjExXQkJQCBnZXQgbG9ja2VkIHZhbHVlCisKKwkvKiB2b2x0YWdlIHNoaWZ0IHVwICovCisJbW92IHI5LCAjMHgwCQkJQCBzaGlmdCBiYWNrIHRvIEwwLXZvbHRhZ2UKKwlibCB2b2x0YWdlX3NoaWZ0CQlAIGdvIHJhaXNlIHZvbHRhZ2UKKworCS8qIGZyZXF1ZW5jeSBzaGlmdCB1cCAqLworCW1vdglyMywgIzB4MgkJQCB2YWx1ZSBmb3IgMnggb3BlcmF0aW9uCisJc3RyCXIzLCBbcjJdCQlAIGdvIHRvIEwwLWZyZXEgb3BlcmF0aW9uCisKKwkvKiByZXNldCBlbnRyeSBtb2RlIGZvciBkbGxjdHJsICovCisJc3ViCXIxMSwgcjExLCAjMHg0CQlAIG1vdmUgZnJvbSBzdGF0dXMgdG8gY3RybAorCWNtcAlyMTIsICMweDEJCUAgbm9ybWFsaXplIGlmIGNzMSBiYXNlZAorCXN1YmVxCXIxMSwgcjExLCAjMHg4CQlAIHBvc3NpYmx5IGJhY2sgdG8gRExMQQorCWNtcAlyOCwgIzB4MQkJQCBpZiBmb3JjZWQgdW5sb2NrIGV4aXQKKwlvcnJlcQlyMSwgcjEsICMweDQJCUAgbWFrZSBzdXJlIGV4aXQgd2l0aCB1bmxvY2tlZCB2YWx1ZQorCXN0cglyMSwgW3IxMV0JCUAgcmVzdG9yZSBETExBX0NUUkwgaGlnaCB2YWx1ZQorCWFkZAlyMTEsIHIxMSwgIzB4OAkJQCBtb3ZlIHRvIERMTEJfQ1RSTCBhZGRyCisJc3RyCXIxLCBbcjExXQkJQCBzZXQgdmFsdWUgRExMQl9DVFJMCisJYmwJaV9kbGxfd2FpdAkJQCB3YWl0IGZvciBwb3NzaWJsZSBsb2NrCisKKwkvKiBzZXQgdXAgZm9yIHJldHVybiwgRERSIHNob3VsZCBiZSBnb29kICovCisJc3RyIHIxMCwgW3IwXQkJCUAgd3JpdGUgZGxsX3N0YXR1cyBhbmQgcmV0dXJuIGNvdW50ZXIKKwlsZG1mZAlzcCEsIHtyMCAtIHIxMiwgcGN9CUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KKworCS8qIGVuc3VyZSB0aGUgRExMIGhhcyByZWxvY2tlZCAqLworaV9kbGxfd2FpdDoKKwltb3YJcjQsICMweDgwMAkJQCBkZWxheSBETEwgcmVsb2NrLCBtaW4gMHg0MDAgTDMgY2xvY2tzCitpX2RsbF9kZWxheToKKwlzdWJzCXI0LCByNCwgIzB4MQorCWJuZQlpX2RsbF9kZWxheQorCW1vdglwYywgbHIKKworCS8qCisJICogc2hpZnQgdXAgb3IgZG93biB2b2x0YWdlLCB1c2UgUjkgYXMgaW5wdXQgdG8gdGVsbCBsZXZlbC4KKwkgKiB3YWl0IGZvciBpdCB0byBmaW5pc2gsIHVzZSAzMmsgc3luYyBjb3VudGVyLCAxdGljaz0zMXVTLgorCSAqLwordm9sdGFnZV9zaGlmdDoKKwlsZHIJcjQsIHByY21fdm9sdGN0cmwJQCBnZXQgYWRkciBvZiB2b2x0IGN0cmwuCisJbGRyCXI1LCBbcjRdCQlAIGdldCB2YWx1ZS4KKwlsZHIJcjYsIHByY21fbWFza192YWwJQCBnZXQgdmFsdWUgb2YgbWFzaworCWFuZAlyNSwgcjUsIHI2CQlAIGFwcGx5IG1hc2sgdG8gY2xlYXIgYml0cworCW9ycglyNSwgcjUsIHI5CQlAIGJ1bGxkIHZhbHVlIGZvciBMMC9MMS12b2x0IG9wZXJhdGlvbi4KKwlzdHIJcjUsIFtyNF0JCUAgc2V0IHVwIGZvciBjaGFuZ2UuCisJbW92CXIzLCAjMHg0MDAwCQlAIGdldCB2YWwgZm9yIGZvcmNlCisJb3JyCXI1LCByNSwgcjMJCUAgYnVpbGQgdmFsdWUgZm9yIGZvcmNlCisJc3RyCXI1LCBbcjRdCQlAIEZvcmNlIHRyYW5zaXRpb24gdG8gTDEKKworCWxkcglyMywgdGltZXJfMzJrc3luY3RfY3IJQCBnZXQgYWRkciBvZiBjb3VudGVyCisJbGRyCXI1LCBbcjNdCQlAIGdldCB2YWx1ZQorCWFkZAlyNSwgcjUsICMweDMJCUAgZ2l2ZSBpdCBhdCBtb3N0IDkzdVMKK3ZvbHRfZGVsYXk6CisJbGRyCXI3LCBbcjNdCQlAIGdldCB0aW1lciB2YWx1ZQorCWNtcAlyNSwgcjcJCQlAIHRpbWUgdXA/CisJYmhpCXZvbHRfZGVsYXkJCUAgbm90IHlldC0+YnJhbmNoCisJbW92CXBjLCBscgkJCUAgYmFjayB0byBjYWxsZXIuCisKKy8qIHJlbGF0aXZlIGxvYWQgY29uc3RhbnRzICovCitjbV9jbGtzZWwyX3BsbDoKKwkud29yZCBDTV9DTEtTRUwyX1BMTF9WCitzZHJjX2RsbGFfY3RybDoKKwkud29yZCBTRFJDX0RMTEFfQ1RSTF9WCitwcmNtX3ZvbHRjdHJsOgorCS53b3JkIFBSQ01fVk9MVENUUkxfVgorcHJjbV9tYXNrX3ZhbDoKKwkud29yZCAweEZGRkYzRkZDCit0aW1lcl8zMmtzeW5jdF9jcjoKKwkud29yZCBUSU1FUl8zMktTWU5DVF9DUl9WCitFTlRSWShzcmFtX2Rkcl9pbml0X3N6KQorCS53b3JkCS4gLSBzcmFtX2Rkcl9pbml0CisKKy8qCisgKiBSZXByb2dyYW1zIG1lbW9yeSB0aW1pbmdzLgorICogcjAgPSBbUFJDTV9GVUxMIHwgUFJDTV9IQUxGXSByMSA9IFNEUkNfRExMQV9DVFJMIHZhbHVlIHIyID0gW0REUiB8IFNEUl0KKyAqIFBSQ01fRlVMTCA9IDIsIFBSQ01fSEFMRiA9IDEsIEREUiA9IDEsIFNEUiA9IDAKKyAqLworRU5UUlkoc3JhbV9yZXByb2dyYW1fc2RyYykKKwlzdG1mZAlzcCEsIHtyMCAtIHIxMCwgbHJ9CUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKKwltb3YJcjMsICMweDAJCUAgY2xlYXIgZm9yIG1yYyBjYWxsCisJbWNyCXAxNSwgMCwgcjMsIGM3LCBjMTAsIDQJQCBtZW1vcnkgYmFycmllciwgZmluaXNoIEFSTSBTRFIvRERSCisJbm9wCisJbm9wCisJbGRyCXI2LCBkZHJfc2RyY19yZnJfY3RybAlAIGdldCBhZGRyIG9mIHJlZnJlc2ggcmVnCisJbGRyCXI1LCBbcjZdCQlAIGdldCB2YWx1ZQorCW1vdglyNSwgcjUsIGxzciAjOAkJQCBpc29sYXRlIHJmciBmaWVsZCBhbmQgZHJvcCBidXJzdAorCisJY21wCXIwLCAjMHgxCQlAIGdvaW5nIHRvIGhhbGYgc3BlZWQ/CisJbW92bmUJcjksICMweDAJCUAgaWYgdXAgc2V0IGZsYWcgdXAgZm9yIHByZSB1cCwgaGkgdm9sdAorCisJYmxuZQl2b2x0YWdlX3NoaWZ0X2MJCUAgYWRqdXN0IHZvbHRhZ2UKKworCWNtcAlyMCwgIzB4MQkJQCBnb2luZyB0byBoYWxmIHNwZWVkIChwb3N0IGJyYW5jaCBsaW5rKQorCW1vdmVxCXI1LCByNSwgbHNyICMxCQlAIGRpdmlkZSBieSAyIGlmIHRvIGhhbGYKKwltb3ZuZQlyNSwgcjUsIGxzbCAjMQkJQCBtdWx0IGJ5IDIgaWYgdG8gZnVsbAorCW1vdglyNSwgcjUsIGxzbCAjOAkJQCBwdXQgcmZyIGZpZWxkIGJhY2sgaW50byBwbGFjZQorCWFkZAlyNSwgcjUsICMweDEJCUAgdHVybiBvbiBidXJzdCBvZiAxCisJbGRyCXI0LCBkZHJfY21fY2xrc2VsMl9wbGwJQCBnZXQgYWRkcmVzcyBvZiBvdXQgcmVnCisJbGRyCXIzLCBbcjRdCQlAIGdldCBjdXJyIHZhbHVlCisJb3JyCXIzLCByMywgIzB4MworCWJpYwlyMywgcjMsICMweDMJCUAgY2xlYXIgbG93ZXIgYml0cworCW9ycglyMywgcjMsIHIwCQlAIG5ldyBzdGF0ZSB2YWx1ZQorCXN0cglyMywgW3I0XQkJQCBzZXQgbmV3IHN0YXRlIChwbGwveCwgeD0xIG9yIDIpCisJbm9wCisJbm9wCisKKwltb3ZlcQlyOSwgIzB4MQkJQCBpZiBzcGVlZCBkb3duLCBwb3N0IGRvd24sIGRyb3Agdm9sdAorCWJsZXEJdm9sdGFnZV9zaGlmdF9jCisKKwltY3IJcDE1LCAwLCByMywgYzcsIGMxMCwgNAlAIG1lbW9yeSBiYXJyaWVyCisJc3RyCXI1LCBbcjZdCQlAIHNldCBuZXcgUkZSXzEgdmFsdWUKKwlhZGQJcjYsIHI2LCAjMHgzMAkJQCBnZXQgUkZSXzIgYWRkcgorCXN0cglyNSwgW3I2XQkJQCBzZXQgUkZSXzIKKwlub3AKKwljbXAJcjIsICMweDEJCUAgKFNEUiBvciBERFIpIGRvIHdlIG5lZWQgdG8gYWRqdXN0IERMTAorCWJuZQlmcmVxX291dAkJQCBsZWF2ZSBpZiBTRFIsIG5vIERMTCBmdW5jdGlvbgorCisJLyogV2l0aCBERFIsIHdlIG5lZWQgdG8gdGFrZSBjYXJlIG9mIHRoZSBETEwgZm9yIHRoZSBmcmVxdWVuY3kgY2hhbmdlICovCisJbGRyCXIyLCBkZHJfc2RyY19kbGxhX2N0cmwJQCBhZGRyIG9mIGRsbGEgY3RybAorCXN0cglyMSwgW3IyXQkJQCB3cml0ZSBvdXQgbmV3IFNEUkNfRExMQV9DVFJMCisJYWRkCXIyLCByMiwgIzB4OAkJQCBhZGRyIHRvIFNEUkNfRExMQl9DVFJMCisJc3RyCXIxLCBbcjJdCQlAIGNvbW1pdCB0byBTRFJDX0RMTEJfQ1RSTAorCW1vdglyMSwgIzB4MjAwMAkJQCB3YWl0IERMTCByZWxvY2ssIG1pbiAweDQwMCBMMyBjbG9ja3MKK2RsbF93YWl0OgorCXN1YnMJcjEsIHIxLCAjMHgxCisJYm5lCWRsbF93YWl0CitmcmVxX291dDoKKwlsZG1mZAlzcCEsIHtyMCAtIHIxMCwgcGN9CUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KKworICAgIC8qCisgICAgICogc2hpZnQgdXAgb3IgZG93biB2b2x0YWdlLCB1c2UgUjkgYXMgaW5wdXQgdG8gdGVsbCBsZXZlbC4KKyAgICAgKgl3YWl0IGZvciBpdCB0byBmaW5pc2gsIHVzZSAzMmsgc3luYyBjb3VudGVyLCAxdGljaz0zMXVTLgorICAgICAqLwordm9sdGFnZV9zaGlmdF9jOgorCWxkcglyMTAsIGRkcl9wcmNtX3ZvbHRjdHJsCUAgZ2V0IGFkZHIgb2Ygdm9sdCBjdHJsCisJbGRyCXI4LCBbcjEwXQkJQCBnZXQgdmFsdWUKKwlsZHIJcjcsIGRkcl9wcmNtX21hc2tfdmFsCUAgZ2V0IHZhbHVlIG9mIG1hc2sKKwlhbmQJcjgsIHI4LCByNwkJQCBhcHBseSBtYXNrIHRvIGNsZWFyIGJpdHMKKwlvcnIJcjgsIHI4LCByOQkJQCBidWxsZCB2YWx1ZSBmb3IgTDAvTDEtdm9sdCBvcGVyYXRpb24uCisJc3RyCXI4LCBbcjEwXQkJQCBzZXQgdXAgZm9yIGNoYW5nZS4KKwltb3YJcjcsICMweDQwMDAJCUAgZ2V0IHZhbCBmb3IgZm9yY2UKKwlvcnIJcjgsIHI4LCByNwkJQCBidWlsZCB2YWx1ZSBmb3IgZm9yY2UKKwlzdHIJcjgsIFtyMTBdCQlAIEZvcmNlIHRyYW5zaXRpb24gdG8gTDEKKworCWxkcglyMTAsIGRkcl90aW1lcl8zMmtzeW5jdAlAIGdldCBhZGRyIG9mIGNvdW50ZXIKKwlsZHIJcjgsIFtyMTBdCQlAIGdldCB2YWx1ZQorCWFkZAlyOCwgcjgsICMweDIJCUAgZ2l2ZSBpdCBhdCBtb3N0IDYydVMgKG1pbiAzMSspCit2b2x0X2RlbGF5X2M6CisJbGRyCXI3LCBbcjEwXQkJQCBnZXQgdGltZXIgdmFsdWUKKwljbXAJcjgsIHI3CQkJQCB0aW1lIHVwPworCWJoaQl2b2x0X2RlbGF5X2MJCUAgbm90IHlldC0+YnJhbmNoCisJbW92CXBjLCBscgkJCUAgYmFjayB0byBjYWxsZXIKKworZGRyX2NtX2Nsa3NlbDJfcGxsOgorCS53b3JkIENNX0NMS1NFTDJfUExMX1YKK2Rkcl9zZHJjX2RsbGFfY3RybDoKKwkud29yZCBTRFJDX0RMTEFfQ1RSTF9WCitkZHJfc2RyY19yZnJfY3RybDoKKwkud29yZCBTRFJDX1JGUl9DVFJMX1YKK2Rkcl9wcmNtX3ZvbHRjdHJsOgorCS53b3JkIFBSQ01fVk9MVENUUkxfVgorZGRyX3ByY21fbWFza192YWw6CisJLndvcmQgMHhGRkZGM0ZGQworZGRyX3RpbWVyXzMya3N5bmN0OgorCS53b3JkIFRJTUVSXzMyS1NZTkNUX0NSX1YKKworRU5UUlkoc3JhbV9yZXByb2dyYW1fc2RyY19zeikKKwkud29yZAkuIC0gc3JhbV9yZXByb2dyYW1fc2RyYworCisvKgorICogU2V0IGRpdmlkZXJzIGFuZCBwbGwuIEFsc28gcmVjYWxjdWxhdGUgRExMIHZhbHVlIGZvciBERFIgYW5kIHVubG9jayBtb2RlLgorICovCitFTlRSWShzcmFtX3NldF9wcmNtKQorCXN0bWZkCXNwISwge3IwLXIxMiwgbHJ9CUAgcmVncyB0byBzdGFjaworCWFkcglyNCwgcGJlZ2luCQlAIGFkZHIgb2YgcHJlbG9hZCBzdGFydAorCWFkcglyOCwgcGVuZAkJQCBhZGRyIG9mIHByZWxvYWQgZW5kCisJbWNycglwMTUsIDEsIHI4LCByNCwgYzEyCUAgcHJlbG9hZCBpbnRvIGljYWNoZQorcGJlZ2luOgorCS8qIG1vdmUgaW50byBmYXN0IHJlbG9jayBieXBhc3MgKi8KKwlsZHIJcjgsIHBsbF9jdGwJCUAgZ2V0IGFkZHIKKwlsZHIJcjUsIFtyOF0JCUAgZ2V0IHZhbAorCW12bglyNiwgIzB4MwkJQCBjbGVhciBtYXNrCisJYW5kCXI1LCByNSwgcjYJCUAgY2xlYXIgZmllbGQKKwlvcnIJcjcsIHI1LCAjMHgyCQlAIGZhc3QgcmVsb2NrIHZhbAorCXN0cglyNywgW3I4XQkJQCBnbyB0byBmYXN0IHJlbG9jaworCWxkcglyNCwgcGxsX3N0YXQJCUAgYWRkciBvZiBzdGF0CitibG9jazoKKwkvKiB3YWl0IGZvciBieXBhc3MgKi8KKwlsZHIJcjgsIFtyNF0JCUAgc3RhdCB2YWx1ZQorCWFuZAlyOCwgcjgsICMweDMJCUAgbWFzayBmb3Igc3RhdAorCWNtcAlyOCwgIzB4MQkJQCB0aGVyZSB5ZXQKKwlibmUJYmxvY2sJCQlAIGxvb3AgaWYgbm90CisKKwkvKiBzZXQgbmV3IGRwbGwgZGl2aWRlcnMgX2FmdGVyXyBpbiBieXBhc3MgKi8KKwlsZHIJcjQsIHBsbF9kaXYJCUAgZ2V0IGFkZHIKKwlzdHIJcjAsIFtyNF0JCUAgc2V0IGRwbGwgY3RybCB2YWwKKworCWxkcglyNCwgc2V0X2NvbmZpZwkJQCBnZXQgYWRkcgorCW1vdglyOCwgIzEJCQlAIHZhbGlkIGNmZyBtc2sKKwlzdHIJcjgsIFtyNF0JCUAgbWFrZSBkaXZpZGVycyB0YWtlCisKKwltb3YJcjQsICMxMDAJCUAgZGVhZCBzcGluIGEgYml0Cit3YWl0X2FfYml0OgorCXN1YnMJcjQsIHI0LCAjMQkJQCBkZWMgbG9vcAorCWJuZQl3YWl0X2FfYml0CQlAIGRlbGF5IGRvbmU/CisKKwkvKiBjaGVjayBpZiBzdGF5aW5nIGluIGJ5cGFzcyAqLworCWNtcAlyMiwgIzB4MQkJQCBzdGF5IGluIGJ5cGFzcz8KKwliZXEJcGVuZAkJCUAganVtcCBvdmVyIGRwbGwgcmVsb2NrCisKKwkvKiByZWxvY2sgRFBMTCB3aXRoIG5ldyB2YWxzICovCisJbGRyCXI1LCBwbGxfc3RhdAkJQCBnZXQgYWRkcgorCWxkcglyNCwgcGxsX2N0bAkJQCBnZXQgYWRkcgorCW9ycglyOCwgcjcsICMweDMJCUAgdmFsIGZvciBsb2NrIGRwbGwKKwlzdHIJcjgsIFtyNF0JCUAgc2V0IHZhbAorCW1vdglyMCwgIzEwMDAJCUAgZGVhZCBzcGluIGEgYml0Cit3YWl0X21vcmU6CisJc3VicwlyMCwgcjAsICMxCQlAIGRlYyBsb29wCisJYm5lCXdhaXRfbW9yZQkJQCBkZWxheSBkb25lPword2FpdF9sb2NrOgorCWxkcglyOCwgW3I1XQkJQCBnZXQgbG9jayB2YWwKKwlhbmQJcjgsIHI4LCAjMwkJQCBpc29sYXRlIGZpZWxkCisJY21wCXI4LCAjMgkJCUAgbG9ja2VkPworCWJuZQl3YWl0X2xvY2sJCUAgd2FpdCBpZiBub3QKK3BlbmQ6CisJLyogdXBkYXRlIG1lbW9yeSB0aW1pbmdzICYgYnJpZWZseSBsb2NrIGRsbCAqLworCWxkcglyNCwgc2RyY19yZnIJCUAgZ2V0IGFkZHIKKwlzdHIJcjEsIFtyNF0JCUAgdXBkYXRlIHJlZnJlc2ggdGltaW5nCisJbGRyCXIxMSwgZGxsYV9jdHJsCQlAIGdldCBhZGRyIG9mIERMTEEgY3RybAorCWxkcglyMTAsIFtyMTFdCQlAIGdldCBjdXJyZW50IHZhbAorCW12bglyOSwgIzB4NAkJQCBtYXNrIHRvIGdldCBjbGVhciBiaXQyCisJYW5kCXIxMCwgcjEwLCByOQkJQCBjbGVhciBiaXQyIGZvciBsb2NrIG1vZGUKKwlvcnIJcjEwLCByMTAsICMweDgJCUAgbWFrZSBzdXJlIERMTCBvbiAoZXMyIGJpdCBwb3MpCisJc3RyCXIxMCwgW3IxMV0JCUAgY29tbWl0IHRvIERMTEFfQ1RSTAorCWFkZAlyMTEsIHIxMSwgIzB4OAkJQCBtb3ZlIHRvIGRsbGIKKwlzdHIJcjEwLCBbcjExXQkJQCBoaXQgRExMQiBhbHNvCisKKwltb3YJcjQsICMweDgwMAkJQCByZWxvY2sgdGltZSAobWluIDB4NDAwIEwzIGNsb2NrcykKK3dhaXRfZGxsX2xvY2s6CisJc3VicwlyNCwgcjQsICMweDEKKwlibmUJd2FpdF9kbGxfbG9jaworCW5vcAorCWxkbWZkCXNwISwge3IwLXIxMiwgcGN9CUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KKworc2V0X2NvbmZpZzoKKwkud29yZCBQUkNNX0NMS0NGR19DVFJMX1YKK3BsbF9jdGw6CisJLndvcmQgQ01fQ0xLRU5fUExMX1YKK3BsbF9zdGF0OgorCS53b3JkIENNX0lETEVTVF9DS0dFTl9WCitwbGxfZGl2OgorCS53b3JkIENNX0NMS1NFTDFfUExMX1YKK3NkcmNfcmZyOgorCS53b3JkIFNEUkNfUkZSX0NUUkxfVgorZGxsYV9jdHJsOgorCS53b3JkIFNEUkNfRExMQV9DVFJMX1YKKworRU5UUlkoc3JhbV9zZXRfcHJjbV9zeikKKwkud29yZAkuIC0gc3JhbV9zZXRfcHJjbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYzExNDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMKKyAqCisgKiBPTUFQMiBHUCB0aW1lciBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBQYXVsIE11bmR0IDxwYXVsLm11bmR0QG5va2lhLmNvbT4KKyAqICAgICAgICAgSnVoYSBZcmr2bOQgPGp1aGEueXJqb2xhQG5va2lhLmNvbT4KKyAqCisgKiBTb21lIHBhcnRzIGJhc2VkIG9mZiBvZiBUSSdzIDI0eHggY29kZToKKyAqCisgKiAgIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFJvdWdobHkgbW9kZWxsZWQgYWZ0ZXIgdGhlIE9NQVAxIE1QVSB0aW1lciBjb2RlLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2xvY2suaD4KKworI2RlZmluZSBPTUFQMl9HUF9USU1FUjFfQkFTRQkweDQ4MDI4MDAwCisjZGVmaW5lIE9NQVAyX0dQX1RJTUVSMl9CQVNFCTB4NDgwMmEwMDAKKyNkZWZpbmUgT01BUDJfR1BfVElNRVIzX0JBU0UJMHg0ODA3ODAwMAorI2RlZmluZSBPTUFQMl9HUF9USU1FUjRfQkFTRQkweDQ4MDdhMDAwCisKKyNkZWZpbmUgR1BfVElNRVJfVElEUgkJMHgwMAorI2RlZmluZSBHUF9USU1FUl9USVNSCQkweDE4CisjZGVmaW5lIEdQX1RJTUVSX1RJRVIJCTB4MWMKKyNkZWZpbmUgR1BfVElNRVJfVENMUgkJMHgyNAorI2RlZmluZSBHUF9USU1FUl9UQ1JSCQkweDI4CisjZGVmaW5lIEdQX1RJTUVSX1RMRFIJCTB4MmMKKyNkZWZpbmUgR1BfVElNRVJfVFNJQ1IJCTB4NDAKKworI2RlZmluZSBPU19USU1FUl9OUgkJMSAgLyogR1AgdGltZXIgMiAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lcl9iYXNlW10gPSB7CisJSU9fQUREUkVTUyhPTUFQMl9HUF9USU1FUjFfQkFTRSksCisJSU9fQUREUkVTUyhPTUFQMl9HUF9USU1FUjJfQkFTRSksCisJSU9fQUREUkVTUyhPTUFQMl9HUF9USU1FUjNfQkFTRSksCisJSU9fQUREUkVTUyhPTUFQMl9HUF9USU1FUjRfQkFTRSksCit9OworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0aW1lcl9yZWFkX3JlZyhpbnQgbnIsIHVuc2lnbmVkIGludCByZWcpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKHRpbWVyX2Jhc2VbbnJdICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRpbWVyX3dyaXRlX3JlZyhpbnQgbnIsIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWwpCit7CisJX19yYXdfd3JpdGVsKHZhbCwgdGltZXJfYmFzZVtucl0gKyByZWcpOworfQorCisvKiBOb3RlIHRoYXQgd2UgYWx3YXlzIGVuYWJsZSB0aGUgY2xvY2sgcHJlc2NhbGUgZGl2aWRlciBiaXQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9ncF90aW1lcl9zdGFydChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgbG9hZF92YWwpCit7CisJdW5zaWduZWQgaW50IHRtcDsKKworCXRtcCA9IDB4ZmZmZmZmZmYgLSBsb2FkX3ZhbDsKKworCXRpbWVyX3dyaXRlX3JlZyhuciwgR1BfVElNRVJfVExEUiwgdG1wKTsKKwl0aW1lcl93cml0ZV9yZWcobnIsIEdQX1RJTUVSX1RDUlIsIHRtcCk7CisJdGltZXJfd3JpdGVfcmVnKG5yLCBHUF9USU1FUl9USUVSLCAxIDw8IDEpOworCXRpbWVyX3dyaXRlX3JlZyhuciwgR1BfVElNRVJfVENMUiwgKDEgPDwgNSkgfCAoMSA8PCAxKSB8IDEpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgb21hcDJfZ3BfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwKKwkJCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOworCisJdGltZXJfd3JpdGVfcmVnKE9TX1RJTUVSX05SLCBHUF9USU1FUl9USVNSLCAxIDw8IDEpOworCXRpbWVyX3RpY2socmVncyk7CisKKwl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBvbWFwMl9ncF90aW1lcl9pcnEgPSB7CisJLm5hbWUJCT0gImdwIHRpbWVyIiwKKwkuZmxhZ3MJCT0gU0FfSU5URVJSVVBULAorCS5oYW5kbGVyCT0gb21hcDJfZ3BfdGltZXJfaW50ZXJydXB0LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXAyX2dwX3RpbWVyX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICogc3lzX2NrOworCXUzMiB0aWNrX3BlcmlvZCA9IDEyMDAwMDsKKwl1MzIgbDsKKworCS8qIFJlc2V0IGNsb2NrIGFuZCBwcmVzY2FsZSB2YWx1ZSAqLworCXRpbWVyX3dyaXRlX3JlZyhPU19USU1FUl9OUiwgR1BfVElNRVJfVENMUiwgMCk7CisKKwlzeXNfY2sgPSBjbGtfZ2V0KE5VTEwsICJzeXNfY2siKTsKKwlpZiAoSVNfRVJSKHN5c19jaykpCisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGdldCBzeXNfY2tcbiIpOworCWVsc2UgeworCQljbGtfdXNlKHN5c19jayk7CisJCXRpY2tfcGVyaW9kID0gY2xrX2dldF9yYXRlKHN5c19jaykgLyAxMDA7CisJCWNsa19wdXQoc3lzX2NrKTsKKwl9CisKKwl0aWNrX3BlcmlvZCAvPSAyOwkvKiBNaW5pbXVtIHByZXNjYWxlIGRpdmlkZXIgaXMgMiAqLworCXRpY2tfcGVyaW9kIC09IDE7CisKKwlsID0gdGltZXJfcmVhZF9yZWcoT1NfVElNRVJfTlIsIEdQX1RJTUVSX1RJRFIpOworCXByaW50ayhLRVJOX0lORk8gIk9NQVAyIEdQIHRpbWVyIChIVyB2ZXJzaW9uICVkLiVkKVxuIiwKKwkgICAgICAgKGwgPj4gNCkgJiAweDBmLCBsICYgMHgwZik7CisKKwlzZXR1cF9pcnEoMzgsICZvbWFwMl9ncF90aW1lcl9pcnEpOworCisJb21hcDJfZ3BfdGltZXJfc3RhcnQoT1NfVElNRVJfTlIsIHRpY2tfcGVyaW9kKTsKK30KKworc3RydWN0IHN5c190aW1lciBvbWFwX3RpbWVyID0geworCS5pbml0CT0gb21hcDJfZ3BfdGltZXJfaW5pdCwKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCmluZGV4IGIzODBhNDM4Li5lMjAxYWE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKQEAgLTYwLDYgKzYwLDcgQEAKIAlib29sICJFbmFibGUgU2hhcnAgU0wtQzcwMCAoQ29yZ2kpIFN1cHBvcnQiCiAJZGVwZW5kcyBQWEFfU0hBUlBTTF8yNXgKIAlzZWxlY3QgUFhBX1NIQVJQX0M3eHgKKwlzZWxlY3QgUFhBX1NTUAogCiBjb25maWcgTUFDSF9TSEVQSEVSRAogCWJvb2wgIkVuYWJsZSBTaGFycCBTTC1DNzUwIChTaGVwaGVyZCkgU3VwcG9ydCIKQEAgLTEwMiwxMiArMTAzLDE4IEBACiAKIGNvbmZpZyBQWEFfU0hBUlBfQzd4eAogCWJvb2wKKwlzZWxlY3QgUFhBX1NTUAogCWhlbHAKIAkgIEVuYWJsZSBzdXBwb3J0IGZvciBhbGwgU2hhcnAgQzd4eCBtb2RlbHMKIAogY29uZmlnIFBYQV9TSEFSUF9DeHgwMAogCWJvb2wKKwlzZWxlY3QgUFhBX1NTUAogCWhlbHAKIAkgIEVuYWJsZSBjb21tb24gc3VwcG9ydCBmb3IgU2hhcnAgQ3h4MDAgbW9kZWxzCiAKK2NvbmZpZyBQWEFfU1NQCisJdHJpc3RhdGUKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgUFhBMnh4IFNTUCBwb3J0cwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUKaW5kZXggOGJjNzJkMC4uZDIxMGJkNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUKQEAgLTExLDggKzExLDggQEAKIG9iai0kKENPTkZJR19BUkNIX0xVQkJPQ0spICs9IGx1YmJvY2subwogb2JqLSQoQ09ORklHX01BQ0hfTUFJTlNUT05FKSArPSBtYWluc3RvbmUubwogb2JqLSQoQ09ORklHX0FSQ0hfUFhBX0lEUCkgKz0gaWRwLm8KLW9iai0kKENPTkZJR19QWEFfU0hBUlBfQzd4eCkJKz0gY29yZ2kubyBjb3JnaV9zc3AubyBjb3JnaV9sY2QubyBzc3Aubwotb2JqLSQoQ09ORklHX1BYQV9TSEFSUF9DeHgwMCkJKz0gc3BpdHoubyBjb3JnaV9zc3AubyBjb3JnaV9sY2QubyBzc3Aubworb2JqLSQoQ09ORklHX1BYQV9TSEFSUF9DN3h4KQkrPSBjb3JnaS5vIGNvcmdpX3NzcC5vIGNvcmdpX2xjZC5vCitvYmotJChDT05GSUdfUFhBX1NIQVJQX0N4eDAwKQkrPSBzcGl0ei5vIGNvcmdpX3NzcC5vIGNvcmdpX2xjZC5vCiBvYmotJChDT05GSUdfTUFDSF9QT09ETEUpCSs9IHBvb2RsZS5vCiBvYmotJChDT05GSUdfTUFDSF9UT1NBKSAgICAgICAgICs9IHRvc2EubwogCkBAIC0yNiw2ICsyNiw3IEBACiAKICMgTWlzYyBmZWF0dXJlcwogb2JqLSQoQ09ORklHX1BNKSArPSBwbS5vIHNsZWVwLm8KK29iai0kKENPTkZJR19QWEFfU1NQKSArPSBzc3AubwogCiBpZmVxICgkKENPTkZJR19QWEEyN3gpLHkpCiBvYmotJChDT05GSUdfUE0pICs9IHN0YW5kYnkubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfc3NwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYwppbmRleCA1OTFlNWYzLi5iMzcxZDcyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYwpAQCAtMTkxLDcgKzE5MSw3IEBACiAJc3NwX21hY2hpbmZvID0gbWFjaGluZm87CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGNvcmdpX3NzcF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBjb3JnaV9zc3BfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCByZXQ7CiAKQEAgLTIwMyw3ICsyMDMsNyBAQAogCUdQRFIoc3NwX21hY2hpbmZvLT5jc19hZHM3ODQ2KSB8PSBHUElPX2JpdChzc3BfbWFjaGluZm8tPmNzX2Fkczc4NDYpOyAgLyogb3V0cHV0ICovCiAJR1BTUihzc3BfbWFjaGluZm8tPmNzX2Fkczc4NDYpID0gR1BJT19iaXQoc3NwX21hY2hpbmZvLT5jc19hZHM3ODQ2KTsgICAvKiBIaWdoIC0gRGlzYWJsZSBBRFM3ODQ2Ki8KIAotCXJldCA9IHNzcF9pbml0KCZjb3JnaV9zc3BfZGV2LHNzcF9tYWNoaW5mby0+cG9ydCk7CisJcmV0ID0gc3NwX2luaXQoJmNvcmdpX3NzcF9kZXYsIHNzcF9tYWNoaW5mby0+cG9ydCwgMCk7CiAKIAlpZiAocmV0KQogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBTU1AgaGFuZGxlciFcbiIpOwpAQCAtMjE2LDEzICsyMTYsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGNvcmdpX3NzcF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBjb3JnaV9zc3BfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzc3BfZXhpdCgmY29yZ2lfc3NwX2Rldik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY29yZ2lfc3NwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGNvcmdpX3NzcF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXNzcF9mbHVzaCgmY29yZ2lfc3NwX2Rldik7CiAJc3NwX3NhdmVfc3RhdGUoJmNvcmdpX3NzcF9kZXYsJmNvcmdpX3NzcF9zdGF0ZSk7CkBAIC0yMzAsNyArMjMwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjb3JnaV9zc3BfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgY29yZ2lfc3NwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJR1BTUihzc3BfbWFjaGluZm8tPmNzX2xjZGNvbikgPSBHUElPX2JpdChzc3BfbWFjaGluZm8tPmNzX2xjZGNvbik7ICAvKiBIaWdoIC0gRGlzYWJsZSBMQ0QgQ29udHJvbC9UaW1pbmcgR2VuICovCiAJR1BTUihzc3BfbWFjaGluZm8tPmNzX21heDExMTEpID0gR1BJT19iaXQoc3NwX21hY2hpbmZvLT5jc19tYXgxMTExKTsgLyogSGlnaCAtIERpc2FibGUgTUFYMTExMSovCkBAIC0yNDEsMTggKzI0MSwxOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgY29yZ2lzc3BfZHJpdmVyID0gewotCS5uYW1lCQk9ICJjb3JnaS1zc3AiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY29yZ2lzc3BfZHJpdmVyID0gewogCS5wcm9iZQkJPSBjb3JnaV9zc3BfcHJvYmUsCiAJLnJlbW92ZQkJPSBjb3JnaV9zc3BfcmVtb3ZlLAogCS5zdXNwZW5kCT0gY29yZ2lfc3NwX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBjb3JnaV9zc3BfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJjb3JnaS1zc3AiLAorCX0sCiB9OwogCiBpbnQgX19pbml0IGNvcmdpX3NzcF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmY29yZ2lzc3BfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZjb3JnaXNzcF9kcml2ZXIpOwogfQogCiBhcmNoX2luaXRjYWxsKGNvcmdpX3NzcF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NoYXJwc2wuaCBiL2FyY2gvYXJtL21hY2gtcHhhL3NoYXJwc2wuaAppbmRleCAzOTc3YTc3Li40ODc5YzBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbC5oCkBAIC0zMiwzICszMiw5MCBAQAogdm9pZCBzcGl0el9wdXRfaHN5bmModm9pZCk7CiB2b2lkIGNvcmdpX3dhaXRfaHN5bmModm9pZCk7CiB2b2lkIHNwaXR6X3dhaXRfaHN5bmModm9pZCk7CisKKy8qCisgKiBTaGFycFNMIEJhdHRlcnkvUE0gRHJpdmVyCisgKi8KKworc3RydWN0IHNoYXJwc2xfY2hhcmdlcl9tYWNoaW5mbyB7CisJdm9pZCAoKmluaXQpKHZvaWQpOworCWludCBncGlvX2FjaW47CisJaW50IGdwaW9fYmF0ZnVsbDsKKwlpbnQgZ3Bpb19iYXRsb2NrOworCWludCBncGlvX2ZhdGFsOworCWludCAoKnN0YXR1c19hY2luKSh2b2lkKTsKKwl2b2lkICgqZGlzY2hhcmdlKShpbnQpOworCXZvaWQgKCpkaXNjaGFyZ2UxKShpbnQpOworCXZvaWQgKCpjaGFyZ2UpKGludCk7CisJdm9pZCAoKmNoYXJnZWxlZCkoaW50KTsKKwl2b2lkICgqbWVhc3VyZV90ZW1wKShpbnQpOworCXZvaWQgKCpwcmVzdXNwZW5kKSh2b2lkKTsKKwl2b2lkICgqcG9zdHN1c3BlbmQpKHZvaWQpOworCXVuc2lnbmVkIGxvbmcgKCpjaGFyZ2VyX3dha2V1cCkodm9pZCk7CisJaW50ICgqc2hvdWxkX3dha2V1cCkodW5zaWduZWQgaW50IHJlc3VtZV9vbl9hbGFybSk7CisJaW50IGJhdF9sZXZlbHM7CisJc3RydWN0IGJhdHRlcnlfdGhyZXNoICpiYXRfbGV2ZWxzX25vYWM7CisJc3RydWN0IGJhdHRlcnlfdGhyZXNoICpiYXRfbGV2ZWxzX2FjaW47CisJaW50IHN0YXR1c19oaWdoX2FjaW47CisJaW50IHN0YXR1c19sb3dfYWNpbjsKKwlpbnQgc3RhdHVzX2hpZ2hfbm9hYzsKKwlpbnQgc3RhdHVzX2xvd19ub2FjOworfTsKKworc3RydWN0IGJhdHRlcnlfdGhyZXNoIHsKKwlpbnQgdm9sdGFnZTsKKwlpbnQgcGVyY2VudGFnZTsKK307CisKK3N0cnVjdCBiYXR0ZXJ5X3N0YXQgeworCWludCBhY19zdGF0dXM7ICAgICAgICAgLyogQVBNIEFDIFByZXNlbnQvTm90IFByZXNlbnQgKi8KKwlpbnQgbWFpbmJhdF9zdGF0dXM7ICAgIC8qIEFQTSBNYWluIEJhdHRlcnkgU3RhdHVzICovCisJaW50IG1haW5iYXRfcGVyY2VudDsgICAvKiBNYWluIEJhdHRlcnkgUGVyY2VudGFnZSBDaGFyZ2UgKi8KKwlpbnQgbWFpbmJhdF92b2x0YWdlOyAgIC8qIE1haW4gQmF0dGVyeSBWb2x0YWdlICovCit9OworCitzdHJ1Y3Qgc2hhcnBzbF9wbV9zdGF0dXMgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBhY190aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBjaHJnX2Z1bGxfdGltZXI7CisKKwlpbnQgY2hhcmdlX21vZGU7CisjZGVmaW5lIENIUkdfRVJST1IgICAgKC0xKQorI2RlZmluZSBDSFJHX09GRiAgICAgICgwKQorI2RlZmluZSBDSFJHX09OICAgICAgICgxKQorI2RlZmluZSBDSFJHX0RPTkUgICAgICgyKQorCisJdW5zaWduZWQgaW50IGZsYWdzOworI2RlZmluZSBTSEFSUFNMX1NVU1BFTkRFRCAgICAgICAoMSA8PCAwKSAgLyogRGV2aWNlIGlzIFN1c3BlbmRlZCAqLworI2RlZmluZSBTSEFSUFNMX0FMQVJNX0FDVElWRSAgICAoMSA8PCAxKSAgLyogQWxhcm0gaXMgZm9yIGNoYXJnaW5nIGV2ZW50IChub3QgdXNlcikgKi8KKyNkZWZpbmUgU0hBUlBTTF9CTF9MSU1JVCAgICAgICAgKDEgPDwgMikgIC8qIEJhY2tsaWdodCBJbnRlbnNpdHkgTGltaXRlZCAqLworI2RlZmluZSBTSEFSUFNMX0FQTV9RVUVVRUQgICAgICAoMSA8PCAzKSAgLyogQVBNIEV2ZW50IFF1ZXVlZCAqLworI2RlZmluZSBTSEFSUFNMX0RPX09GRkxJTkVfQ0hSRyAoMSA8PCA0KSAgLyogVHJpZ2dlciB0aGUgb2ZmbGluZSBjaGFyZ2VyICovCisKKwlpbnQgZnVsbF9jb3VudDsKKwl1bnNpZ25lZCBsb25nIGNoYXJnZV9zdGFydF90aW1lOworCXN0cnVjdCBzaGFycHNsX2NoYXJnZXJfbWFjaGluZm8gKm1hY2hpbmZvOworCXN0cnVjdCBiYXR0ZXJ5X3N0YXQgYmF0dHN0YXQ7Cit9OworCitleHRlcm4gc3RydWN0IHNoYXJwc2xfcG1fc3RhdHVzIHNoYXJwc2xfcG07CitleHRlcm4gc3RydWN0IGJhdHRlcnlfdGhyZXNoIHNwaXR6X2JhdHRlcnlfbGV2ZWxzX2FjaW5bXTsKK2V4dGVybiBzdHJ1Y3QgYmF0dGVyeV90aHJlc2ggc3BpdHpfYmF0dGVyeV9sZXZlbHNfbm9hY1tdOworCisjZGVmaW5lIFJFQURfR1BJT19CSVQoeCkgICAgKEdQTFIoeCkgJiBHUElPX2JpdCh4KSkKKworI2RlZmluZSBTSEFSUFNMX0xFRF9FUlJPUiAgMgorI2RlZmluZSBTSEFSUFNMX0xFRF9PTiAgICAgMQorI2RlZmluZSBTSEFSUFNMX0xFRF9PRkYgICAgMAorCisjZGVmaW5lIENIQVJHRV9PTigpICAgICAgICAgc2hhcnBzbF9wbS5tYWNoaW5mby0+Y2hhcmdlKDEpCisjZGVmaW5lIENIQVJHRV9PRkYoKSAgICAgICAgc2hhcnBzbF9wbS5tYWNoaW5mby0+Y2hhcmdlKDApCisjZGVmaW5lIENIQVJHRV9MRURfT04oKSAgICAgc2hhcnBzbF9wbS5tYWNoaW5mby0+Y2hhcmdlbGVkKFNIQVJQU0xfTEVEX09OKQorI2RlZmluZSBDSEFSR0VfTEVEX09GRigpICAgIHNoYXJwc2xfcG0ubWFjaGluZm8tPmNoYXJnZWxlZChTSEFSUFNMX0xFRF9PRkYpCisjZGVmaW5lIENIQVJHRV9MRURfRVJSKCkgICAgc2hhcnBzbF9wbS5tYWNoaW5mby0+Y2hhcmdlbGVkKFNIQVJQU0xfTEVEX0VSUk9SKQorI2RlZmluZSBESVNDSEFSR0VfT04oKSAgICAgIHNoYXJwc2xfcG0ubWFjaGluZm8tPmRpc2NoYXJnZSgxKQorI2RlZmluZSBESVNDSEFSR0VfT0ZGKCkgICAgIHNoYXJwc2xfcG0ubWFjaGluZm8tPmRpc2NoYXJnZSgwKQorI2RlZmluZSBTVEFUVVNfQUNfSU4gICAgICAgIHNoYXJwc2xfcG0ubWFjaGluZm8tPnN0YXR1c19hY2luKCkKKyNkZWZpbmUgU1RBVFVTX0JBVFRfTE9DS0VEICBSRUFEX0dQSU9fQklUKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0bG9jaykKKyNkZWZpbmUgU1RBVFVTX0NIUkdfRlVMTCAgICBSRUFEX0dQSU9fQklUKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0ZnVsbCkKKyNkZWZpbmUgU1RBVFVTX0ZBVEFMICAgICAgICBSRUFEX0dQSU9fQklUKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fZmF0YWwpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsX3BtLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsX3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM5ZTg3MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NoYXJwc2xfcG0uYwpAQCAtMCwwICsxLDk5MiBAQAorLyoKKyAqIEJhdHRlcnkgYW5kIFBvd2VyIE1hbmFnZW1lbnQgY29kZSBmb3IgdGhlIFNoYXJwIFNMLUM3eHggYW5kIFNMLUN4eDAwCisgKiBzZXJpZXMgb2YgUERBcworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IFJpY2hhcmQgUHVyZGllCisgKgorICogQmFzZWQgb24gY29kZSB3cml0dGVuIGJ5IFNoYXJwIGZvciAyLjQga2VybmVscworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyN1bmRlZiBERUJVRworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvYXBtX2Jpb3MuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3Njb29wLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2FwbS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcG0uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3NoYXJwc2wuaD4KKyNpbmNsdWRlICJzaGFycHNsLmgiCisKKy8qCisgKiBDb25zdGFudHMKKyAqLworI2RlZmluZSBTSEFSUFNMX0NIQVJHRV9PTl9USU1FX0lOVEVSVkFMICAgICAgICAobXNlY3NfdG9famlmZmllcygxKjYwKjEwMDApKSAgLyogMSBtaW4gKi8KKyNkZWZpbmUgU0hBUlBTTF9DSEFSR0VfRklOSVNIX1RJTUUgICAgICAgICAgICAgKG1zZWNzX3RvX2ppZmZpZXMoMTAqNjAqMTAwMCkpIC8qIDEwIG1pbiAqLworI2RlZmluZSBTSEFSUFNMX0JBVENIS19USU1FICAgICAgICAgICAgICAgICAgICAobXNlY3NfdG9famlmZmllcygxNSoxMDAwKSkgICAgLyogMTUgc2VjICovCisjZGVmaW5lIFNIQVJQU0xfQkFUQ0hLX1RJTUVfU1VTUEVORCAgICAgICAgICAgICg2MCoxMCkgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMCBtaW4gKi8KKyNkZWZpbmUgU0hBUlBTTF9XQUlUX0NPX1RJTUUgICAgICAgICAgICAgICAgICAgMTUgIC8qIDE1IHNlYyAqLworI2RlZmluZSBTSEFSUFNMX1dBSVRfRElTQ0hBUkdFX09OICAgICAgICAgICAgICAxMDAgLyogMTAwIG1zZWMgKi8KKyNkZWZpbmUgU0hBUlBTTF9DSEVDS19CQVRURVJZX1dBSVRfVElNRV9URU1QICAgMTAgIC8qIDEwIG1zZWMgKi8KKyNkZWZpbmUgU0hBUlBTTF9DSEVDS19CQVRURVJZX1dBSVRfVElNRV9WT0xUICAgMTAgIC8qIDEwIG1zZWMgKi8KKyNkZWZpbmUgU0hBUlBTTF9DSEVDS19CQVRURVJZX1dBSVRfVElNRV9KS1ZBRCAgMTAgIC8qIDEwIG1zZWMgKi8KKyNkZWZpbmUgU0hBUlBTTF9DSEFSR0VfV0FJVF9USU1FICAgICAgICAgICAgICAgMTUgIC8qIDE1IG1zZWMgKi8KKyNkZWZpbmUgU0hBUlBTTF9DSEFSR0VfQ09fQ0hFQ0tfVElNRSAgICAgICAgICAgNSAgIC8qIDUgbXNlYyAqLworI2RlZmluZSBTSEFSUFNMX0NIQVJHRV9SRVRSWV9DTlQgICAgICAgICAgICAgICAxICAgLyogZXF2LiAxMCBtaW4gKi8KKworI2RlZmluZSBTSEFSUFNMX0NIQVJHRV9PTl9WT0xUICAgICAgICAgMHg5OSAgLyogMi45ViAqLworI2RlZmluZSBTSEFSUFNMX0NIQVJHRV9PTl9URU1QICAgICAgICAgMHhlMCAgLyogMi45ViAqLworI2RlZmluZSBTSEFSUFNMX0NIQVJHRV9PTl9KS1ZBRF9ISUdIICAgMHg5YiAgLyogNlYgKi8KKyNkZWZpbmUgU0hBUlBTTF9DSEFSR0VfT05fSktWQURfTE9XICAgIDB4MzQgIC8qIDJWICovCisjZGVmaW5lIFNIQVJQU0xfRkFUQUxfQUNJTl9WT0xUICAgICAgICAxODIgICAvKiAzLjQ1ViAqLworI2RlZmluZSBTSEFSUFNMX0ZBVEFMX05PQUNJTl9WT0xUICAgICAgMTcwICAgLyogMy40MFYgKi8KKworc3RydWN0IGJhdHRlcnlfdGhyZXNoIHNwaXR6X2JhdHRlcnlfbGV2ZWxzX2FjaW5bXSA9IHsKKwl7IDIxMywgMTAwfSwKKwl7IDIxMiwgIDk4fSwKKwl7IDIxMSwgIDk1fSwKKwl7IDIxMCwgIDkzfSwKKwl7IDIwOSwgIDkwfSwKKwl7IDIwOCwgIDg4fSwKKwl7IDIwNywgIDg1fSwKKwl7IDIwNiwgIDgzfSwKKwl7IDIwNSwgIDgwfSwKKwl7IDIwNCwgIDc4fSwKKwl7IDIwMywgIDc1fSwKKwl7IDIwMiwgIDczfSwKKwl7IDIwMSwgIDcwfSwKKwl7IDIwMCwgIDY4fSwKKwl7IDE5OSwgIDY1fSwKKwl7IDE5OCwgIDYzfSwKKwl7IDE5NywgIDYwfSwKKwl7IDE5NiwgIDU4fSwKKwl7IDE5NSwgIDU1fSwKKwl7IDE5NCwgIDUzfSwKKwl7IDE5MywgIDUwfSwKKwl7IDE5MiwgIDQ4fSwKKwl7IDE5MiwgIDQ1fSwKKwl7IDE5MSwgIDQzfSwKKwl7IDE5MSwgIDQwfSwKKwl7IDE5MCwgIDM4fSwKKwl7IDE5MCwgIDM1fSwKKwl7IDE4OSwgIDMzfSwKKwl7IDE4OCwgIDMwfSwKKwl7IDE4NywgIDI4fSwKKwl7IDE4NiwgIDI1fSwKKwl7IDE4NSwgIDIzfSwKKwl7IDE4NCwgIDIwfSwKKwl7IDE4MywgIDE4fSwKKwl7IDE4MiwgIDE1fSwKKwl7IDE4MSwgIDEzfSwKKwl7IDE4MCwgIDEwfSwKKwl7IDE3OSwgICA4fSwKKwl7IDE3OCwgICA1fSwKKwl7ICAgMCwgICAwfSwKK307CisKK3N0cnVjdCBiYXR0ZXJ5X3RocmVzaCAgc3BpdHpfYmF0dGVyeV9sZXZlbHNfbm9hY1tdID0geworCXsgMjEzLCAxMDB9LAorCXsgMjEyLCAgOTh9LAorCXsgMjExLCAgOTV9LAorCXsgMjEwLCAgOTN9LAorCXsgMjA5LCAgOTB9LAorCXsgMjA4LCAgODh9LAorCXsgMjA3LCAgODV9LAorCXsgMjA2LCAgODN9LAorCXsgMjA1LCAgODB9LAorCXsgMjA0LCAgNzh9LAorCXsgMjAzLCAgNzV9LAorCXsgMjAyLCAgNzN9LAorCXsgMjAxLCAgNzB9LAorCXsgMjAwLCAgNjh9LAorCXsgMTk5LCAgNjV9LAorCXsgMTk4LCAgNjN9LAorCXsgMTk3LCAgNjB9LAorCXsgMTk2LCAgNTh9LAorCXsgMTk1LCAgNTV9LAorCXsgMTk0LCAgNTN9LAorCXsgMTkzLCAgNTB9LAorCXsgMTkyLCAgNDh9LAorCXsgMTkxLCAgNDV9LAorCXsgMTkwLCAgNDN9LAorCXsgMTg5LCAgNDB9LAorCXsgMTg4LCAgMzh9LAorCXsgMTg3LCAgMzV9LAorCXsgMTg2LCAgMzN9LAorCXsgMTg1LCAgMzB9LAorCXsgMTg0LCAgMjh9LAorCXsgMTgzLCAgMjV9LAorCXsgMTgyLCAgMjN9LAorCXsgMTgxLCAgMjB9LAorCXsgMTgwLCAgMTh9LAorCXsgMTc5LCAgMTV9LAorCXsgMTc4LCAgMTN9LAorCXsgMTc3LCAgMTB9LAorCXsgMTc2LCAgIDh9LAorCXsgMTc1LCAgIDV9LAorCXsgICAwLCAgIDB9LAorfTsKKworLyogTUFYMTExMSBDb21tYW5kcyAqLworI2RlZmluZSBNQVhDVFJMX1BEMCAgICAgIDF1IDw8IDAKKyNkZWZpbmUgTUFYQ1RSTF9QRDEgICAgICAxdSA8PCAxCisjZGVmaW5lIE1BWENUUkxfU0dMICAgICAgMXUgPDwgMgorI2RlZmluZSBNQVhDVFJMX1VOSSAgICAgIDF1IDw8IDMKKyNkZWZpbmUgTUFYQ1RSTF9TRUxfU0ggICA0CisjZGVmaW5lIE1BWENUUkxfU1RSICAgICAgMXUgPDwgNworCisvKiBNQVgxMTExIENoYW5uZWwgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQkFUVF9BRCAgICA0dQorI2RlZmluZSBCQVRUX1RITSAgIDJ1CisjZGVmaW5lIEpLX1ZBRCAgICAgNnUKKworCisvKgorICogUHJvdG90eXBlcworICovCitzdGF0aWMgaW50IHNoYXJwc2xfcmVhZF9NYWluQmF0dGVyeSh2b2lkKTsKK3N0YXRpYyBpbnQgc2hhcnBzbF9vZmZfY2hhcmdlX2JhdHRlcnkodm9pZCk7CitzdGF0aWMgaW50IHNoYXJwc2xfY2hlY2tfYmF0dGVyeShpbnQgbW9kZSk7CitzdGF0aWMgaW50IHNoYXJwc2xfYWNfY2hlY2sodm9pZCk7CitzdGF0aWMgaW50IHNoYXJwc2xfZmF0YWxfY2hlY2sodm9pZCk7CitzdGF0aWMgaW50IHNoYXJwc2xfYXZlcmFnZV92YWx1ZShpbnQgYWQpOworc3RhdGljIHZvaWQgc2hhcnBzbF9hdmVyYWdlX2NsZWFyKHZvaWQpOworc3RhdGljIHZvaWQgc2hhcnBzbF9jaGFyZ2VfdG9nZ2xlKHZvaWQgKnByaXZhdGVfKTsKK3N0YXRpYyB2b2lkIHNoYXJwc2xfYmF0dGVyeV90aHJlYWQodm9pZCAqcHJpdmF0ZV8pOworCisKKy8qCisgKiBWYXJpYWJsZXMKKyAqLworc3RydWN0IHNoYXJwc2xfcG1fc3RhdHVzIHNoYXJwc2xfcG07CitERUNMQVJFX1dPUksodG9nZ2xlX2NoYXJnZXIsIHNoYXJwc2xfY2hhcmdlX3RvZ2dsZSwgTlVMTCk7CitERUNMQVJFX1dPUksoc2hhcnBzbF9iYXQsIHNoYXJwc2xfYmF0dGVyeV90aHJlYWQsIE5VTEwpOworCisKK3N0YXRpYyBpbnQgZ2V0X3BlcmNlbnRhZ2UoaW50IHZvbHRhZ2UpCit7CisJaW50IGkgPSBzaGFycHNsX3BtLm1hY2hpbmZvLT5iYXRfbGV2ZWxzIC0gMTsKKwlzdHJ1Y3QgYmF0dGVyeV90aHJlc2ggKnRocmVzaDsKKworCWlmIChzaGFycHNsX3BtLmNoYXJnZV9tb2RlID09IENIUkdfT04pCisJCXRocmVzaD1zaGFycHNsX3BtLm1hY2hpbmZvLT5iYXRfbGV2ZWxzX2FjaW47CisJZWxzZQorCQl0aHJlc2g9c2hhcnBzbF9wbS5tYWNoaW5mby0+YmF0X2xldmVsc19ub2FjOworCisJd2hpbGUgKGkgPiAwICYmICh2b2x0YWdlID4gdGhyZXNoW2ldLnZvbHRhZ2UpKQorCQlpLS07CisKKwlyZXR1cm4gdGhyZXNoW2ldLnBlcmNlbnRhZ2U7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2FwbV9zdGF0dXMoaW50IHZvbHRhZ2UpCit7CisJaW50IGxvd190aHJlc2gsIGhpZ2hfdGhyZXNoOworCisJaWYgKHNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPT0gQ0hSR19PTikgeworCQloaWdoX3RocmVzaCA9IHNoYXJwc2xfcG0ubWFjaGluZm8tPnN0YXR1c19oaWdoX2FjaW47CisJCWxvd190aHJlc2ggPSBzaGFycHNsX3BtLm1hY2hpbmZvLT5zdGF0dXNfbG93X2FjaW47CisJfSBlbHNlIHsKKwkJaGlnaF90aHJlc2ggPSBzaGFycHNsX3BtLm1hY2hpbmZvLT5zdGF0dXNfaGlnaF9ub2FjOworCQlsb3dfdGhyZXNoID0gc2hhcnBzbF9wbS5tYWNoaW5mby0+c3RhdHVzX2xvd19ub2FjOworCX0KKworCWlmICh2b2x0YWdlID49IGhpZ2hfdGhyZXNoKQorCQlyZXR1cm4gQVBNX0JBVFRFUllfU1RBVFVTX0hJR0g7CisJaWYgKHZvbHRhZ2UgPj0gbG93X3RocmVzaCkKKwkJcmV0dXJuIEFQTV9CQVRURVJZX1NUQVRVU19MT1c7CisJcmV0dXJuIEFQTV9CQVRURVJZX1NUQVRVU19DUklUSUNBTDsKK30KKwordm9pZCBzaGFycHNsX2JhdHRlcnlfa2ljayh2b2lkKQoreworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmc2hhcnBzbF9iYXQsIG1zZWNzX3RvX2ppZmZpZXMoMTI1KSk7Cit9CitFWFBPUlRfU1lNQk9MKHNoYXJwc2xfYmF0dGVyeV9raWNrKTsKKworCitzdGF0aWMgdm9pZCBzaGFycHNsX2JhdHRlcnlfdGhyZWFkKHZvaWQgKnByaXZhdGVfKQoreworCWludCB2b2x0YWdlLCBwZXJjZW50LCBhcG1fc3RhdHVzLCBpID0gMDsKKworCWlmICghc2hhcnBzbF9wbS5tYWNoaW5mbykKKwkJcmV0dXJuOworCisJc2hhcnBzbF9wbS5iYXR0c3RhdC5hY19zdGF0dXMgPSAoIShTVEFUVVNfQUNfSU4pID8gQVBNX0FDX09GRkxJTkUgOiBBUE1fQUNfT05MSU5FKTsKKworCS8qIENvcmdpIGNhbm5vdCBjb25maXJtIHdoZW4gYmF0dGVyeSBmdWxseSBjaGFyZ2VkIHNvIHBlcmlvZGljYWxseSBraWNrISAqLworCWlmIChtYWNoaW5lX2lzX2NvcmdpKCkgJiYgKHNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPT0gQ0hSR19PTikKKwkJCSYmIHRpbWVfYWZ0ZXIoamlmZmllcywgc2hhcnBzbF9wbS5jaGFyZ2Vfc3RhcnRfdGltZSArICBTSEFSUFNMX0NIQVJHRV9PTl9USU1FX0lOVEVSVkFMKSkKKwkJc2NoZWR1bGVfd29yaygmdG9nZ2xlX2NoYXJnZXIpOworCisJd2hpbGUoMSkgeworCQl2b2x0YWdlID0gc2hhcnBzbF9yZWFkX01haW5CYXR0ZXJ5KCk7CisJCWlmICh2b2x0YWdlID4gMCkgYnJlYWs7CisJCWlmIChpKysgPiA1KSB7CisJCQl2b2x0YWdlID0gc2hhcnBzbF9wbS5tYWNoaW5mby0+YmF0X2xldmVsc19ub2FjWzBdLnZvbHRhZ2U7CisJCQlkZXZfd2FybihzaGFycHNsX3BtLmRldiwgIldhcm5pbmc6IENhbm5vdCByZWFkIG1haW4gYmF0dGVyeSFcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwl2b2x0YWdlID0gc2hhcnBzbF9hdmVyYWdlX3ZhbHVlKHZvbHRhZ2UpOworCWFwbV9zdGF0dXMgPSBnZXRfYXBtX3N0YXR1cyh2b2x0YWdlKTsKKwlwZXJjZW50ID0gZ2V0X3BlcmNlbnRhZ2Uodm9sdGFnZSk7CisKKwkvKiBBdCBsb3cgYmF0dGVyeSB2b2x0YWdlcywgdGhlIHZvbHRhZ2UgaGFzIGEgdGVuZGVuY3kgdG8gc3RhcnQKKyAgICAgICAgICAgY3JlZXBpbmcgYmFjayB1cCBzbyB3ZSB0cnkgdG8gYXZvaWQgdGhpcyBoZXJlICovCisJaWYgKChzaGFycHNsX3BtLmJhdHRzdGF0LmFjX3N0YXR1cyA9PSBBUE1fQUNfT05MSU5FKSB8fCAoYXBtX3N0YXR1cyA9PSBBUE1fQkFUVEVSWV9TVEFUVVNfSElHSCkgfHwgIHBlcmNlbnQgPD0gc2hhcnBzbF9wbS5iYXR0c3RhdC5tYWluYmF0X3BlcmNlbnQpIHsKKwkJc2hhcnBzbF9wbS5iYXR0c3RhdC5tYWluYmF0X3ZvbHRhZ2UgPSB2b2x0YWdlOworCQlzaGFycHNsX3BtLmJhdHRzdGF0Lm1haW5iYXRfc3RhdHVzID0gYXBtX3N0YXR1czsKKwkJc2hhcnBzbF9wbS5iYXR0c3RhdC5tYWluYmF0X3BlcmNlbnQgPSBwZXJjZW50OworCX0KKworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJCYXR0ZXJ5OiB2b2x0YWdlOiAlZCwgc3RhdHVzOiAlZCwgcGVyY2VudGFnZTogJWQsIHRpbWU6ICVkXG4iLCB2b2x0YWdlLAorCQkJc2hhcnBzbF9wbS5iYXR0c3RhdC5tYWluYmF0X3N0YXR1cywgc2hhcnBzbF9wbS5iYXR0c3RhdC5tYWluYmF0X3BlcmNlbnQsIGppZmZpZXMpOworCisJLyogSWYgYmF0dGVyeSBpcyBsb3cuIGxpbWl0IGJhY2tsaWdodCBpbnRlbnNpdHkgdG8gc2F2ZSBwb3dlci4gKi8KKwlpZiAoKHNoYXJwc2xfcG0uYmF0dHN0YXQuYWNfc3RhdHVzICE9IEFQTV9BQ19PTkxJTkUpCisJCQkmJiAoKHNoYXJwc2xfcG0uYmF0dHN0YXQubWFpbmJhdF9zdGF0dXMgPT0gQVBNX0JBVFRFUllfU1RBVFVTX0xPVykgfHwKKwkJCShzaGFycHNsX3BtLmJhdHRzdGF0Lm1haW5iYXRfc3RhdHVzID09IEFQTV9CQVRURVJZX1NUQVRVU19DUklUSUNBTCkpKSB7CisJCWlmICghKHNoYXJwc2xfcG0uZmxhZ3MgJiBTSEFSUFNMX0JMX0xJTUlUKSkgeworCQkJY29yZ2libF9saW1pdF9pbnRlbnNpdHkoMSk7CisJCQlzaGFycHNsX3BtLmZsYWdzIHw9IFNIQVJQU0xfQkxfTElNSVQ7CisJCX0KKwl9IGVsc2UgaWYgKHNoYXJwc2xfcG0uZmxhZ3MgJiBTSEFSUFNMX0JMX0xJTUlUKSB7CisJCWNvcmdpYmxfbGltaXRfaW50ZW5zaXR5KDApOworCQlzaGFycHNsX3BtLmZsYWdzICY9IH5TSEFSUFNMX0JMX0xJTUlUOworCX0KKworCS8qIFN1c3BlbmQgaWYgY3JpdGljYWwgYmF0dGVyeSBsZXZlbCAqLworCWlmICgoc2hhcnBzbF9wbS5iYXR0c3RhdC5hY19zdGF0dXMgIT0gQVBNX0FDX09OTElORSkKKwkJCSYmIChzaGFycHNsX3BtLmJhdHRzdGF0Lm1haW5iYXRfc3RhdHVzID09IEFQTV9CQVRURVJZX1NUQVRVU19DUklUSUNBTCkKKwkJCSYmICEoc2hhcnBzbF9wbS5mbGFncyAmIFNIQVJQU0xfQVBNX1FVRVVFRCkpIHsKKwkJc2hhcnBzbF9wbS5mbGFncyB8PSBTSEFSUFNMX0FQTV9RVUVVRUQ7CisJCWRldl9lcnIoc2hhcnBzbF9wbS5kZXYsICJGYXRhbCBPZmZcbiIpOworCQlhcG1fcXVldWVfZXZlbnQoQVBNX0NSSVRJQ0FMX1NVU1BFTkQpOworCX0KKworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmc2hhcnBzbF9iYXQsIFNIQVJQU0xfQkFUQ0hLX1RJTUUpOworfQorCitzdGF0aWMgdm9pZCBzaGFycHNsX2NoYXJnZV9vbih2b2lkKQoreworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJUdXJuaW5nIENoYXJnZXIgT25cbiIpOworCisJc2hhcnBzbF9wbS5mdWxsX2NvdW50ID0gMDsKKwlzaGFycHNsX3BtLmNoYXJnZV9tb2RlID0gQ0hSR19PTjsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnRvZ2dsZV9jaGFyZ2VyLCBtc2Vjc190b19qaWZmaWVzKDI1MCkpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmc2hhcnBzbF9iYXQsIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNoYXJwc2xfY2hhcmdlX29mZih2b2lkKQoreworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJUdXJuaW5nIENoYXJnZXIgT2ZmXG4iKTsKKworCUNIQVJHRV9PRkYoKTsKKwlDSEFSR0VfTEVEX09GRigpOworCXNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPSBDSFJHX09GRjsKKworCXNjaGVkdWxlX3dvcmsoJnNoYXJwc2xfYmF0KTsKK30KKworc3RhdGljIHZvaWQgc2hhcnBzbF9jaGFyZ2VfZXJyb3Iodm9pZCkKK3sKKwlDSEFSR0VfTEVEX0VSUigpOworCUNIQVJHRV9PRkYoKTsKKwlzaGFycHNsX3BtLmNoYXJnZV9tb2RlID0gQ0hSR19FUlJPUjsKK30KKworc3RhdGljIHZvaWQgc2hhcnBzbF9jaGFyZ2VfdG9nZ2xlKHZvaWQgKnByaXZhdGVfKQoreworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJUb29nbGluZyBDaGFyZ2VyIGF0IHRpbWU6ICVseFxuIiwgamlmZmllcyk7CisKKwlpZiAoU1RBVFVTX0FDX0lOID09IDApIHsKKwkJc2hhcnBzbF9jaGFyZ2Vfb2ZmKCk7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKChzaGFycHNsX2NoZWNrX2JhdHRlcnkoMSkgPCAwKSB8fCAoc2hhcnBzbF9hY19jaGVjaygpIDwgMCkpIHsKKwkJc2hhcnBzbF9jaGFyZ2VfZXJyb3IoKTsKKwkJcmV0dXJuOworCX0KKworCUNIQVJHRV9MRURfT04oKTsKKwlDSEFSR0VfT0ZGKCk7CisJbWRlbGF5KFNIQVJQU0xfQ0hBUkdFX1dBSVRfVElNRSk7CisJQ0hBUkdFX09OKCk7CisKKwlzaGFycHNsX3BtLmNoYXJnZV9zdGFydF90aW1lID0gamlmZmllczsKK30KKworc3RhdGljIHZvaWQgc2hhcnBzbF9hY190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJaW50IGFjaW4gPSBTVEFUVVNfQUNfSU47CisKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQUMgU3RhdHVzOiAlZFxuIixhY2luKTsKKworCXNoYXJwc2xfYXZlcmFnZV9jbGVhcigpOworCWlmIChhY2luICYmIChzaGFycHNsX3BtLmNoYXJnZV9tb2RlICE9IENIUkdfT04pKQorCQlzaGFycHNsX2NoYXJnZV9vbigpOworCWVsc2UgaWYgKHNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPT0gQ0hSR19PTikKKwkJc2hhcnBzbF9jaGFyZ2Vfb2ZmKCk7CisKKwlzY2hlZHVsZV93b3JrKCZzaGFycHNsX2JhdCk7Cit9CisKKworc3RhdGljIGlycXJldHVybl90IHNoYXJwc2xfYWNfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKmZwKQoreworCS8qIERlbGF5IHRoZSBldmVudCBzbGlnaHRseSB0byBkZWJvdW5jZSAqLworCS8qIE11c3QgYmUgYSBzbWFsbGVyIGRlbGF5IHRoYW4gdGhlIGNocmdfZnVsbF9pc3IgYmVsb3cgKi8KKwltb2RfdGltZXIoJnNoYXJwc2xfcG0uYWNfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDI1MCkpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBzaGFycHNsX2NocmdfZnVsbF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIkNoYXJnZSBGdWxsIGF0IHRpbWU6ICVseFxuIiwgamlmZmllcyk7CisKKwlzaGFycHNsX3BtLmZ1bGxfY291bnQrKzsKKworCWlmIChTVEFUVVNfQUNfSU4gPT0gMCkgeworCQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQ2hhcmdlIEZ1bGw6IEFDIHJlbW92ZWQgLSBzdG9wIGNoYXJnaW5nIVxuIik7CisJCWlmIChzaGFycHNsX3BtLmNoYXJnZV9tb2RlID09IENIUkdfT04pCisJCQlzaGFycHNsX2NoYXJnZV9vZmYoKTsKKwl9IGVsc2UgaWYgKHNoYXJwc2xfcG0uZnVsbF9jb3VudCA8IDIpIHsKKwkJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIkNoYXJnZSBGdWxsOiBDb3VudCB0b28gbG93XG4iKTsKKwkJc2NoZWR1bGVfd29yaygmdG9nZ2xlX2NoYXJnZXIpOworCX0gZWxzZSBpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzaGFycHNsX3BtLmNoYXJnZV9zdGFydF90aW1lICsgU0hBUlBTTF9DSEFSR0VfRklOSVNIX1RJTUUpKSB7CisJCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJDaGFyZ2UgRnVsbDogSW50ZXJydXB0IGdlbmVyYXRlZCB0b28gc2xvd2x5IC0gcmV0cnkuXG4iKTsKKwkJc2NoZWR1bGVfd29yaygmdG9nZ2xlX2NoYXJnZXIpOworCX0gZWxzZSB7CisJCXNoYXJwc2xfY2hhcmdlX29mZigpOworCQlzaGFycHNsX3BtLmNoYXJnZV9tb2RlID0gQ0hSR19ET05FOworCQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQ2hhcmdlIEZ1bGw6IENoYXJnaW5nIEZpbmlzaGVkXG4iKTsKKwl9Cit9CisKKy8qIENoYXJnaW5nIEZpbmlzaGVkIEludGVycnVwdCAoTm90IHByZXNlbnQgb24gQ29yZ2kpICovCisvKiBDYW4gdHJpZ2dlciBhdCB0aGUgc2FtZSB0aW1lIGFzIGFuIEFDIHN0YXVzIGNoYW5nZSBzbworICAgZGVsYXkgdW50aWwgYWZ0ZXIgdGhhdCBoYXMgYmVlbiBwcm9jZXNzZWQgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBzaGFycHNsX2NocmdfZnVsbF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJaWYgKHNoYXJwc2xfcG0uZmxhZ3MgJiBTSEFSUFNMX1NVU1BFTkRFRCkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCisJLyogZGVsYXkgdW50aWwgYWZ0ZXIgYW55IGFjIGludGVycnVwdCAqLworCW1vZF90aW1lcigmc2hhcnBzbF9wbS5jaHJnX2Z1bGxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUwMCkpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2hhcnBzbF9mYXRhbF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJaW50IGlzX2ZhdGFsID0gMDsKKworCWlmIChTVEFUVVNfQkFUVF9MT0NLRUQgPT0gMCkgeworCQlkZXZfZXJyKHNoYXJwc2xfcG0uZGV2LCAiQmF0dGVyeSBub3cgVW5sb2NrZWQhIFN1c3BlbmRpbmcuXG4iKTsKKwkJaXNfZmF0YWwgPSAxOworCX0KKworCWlmIChzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2ZhdGFsICYmIChTVEFUVVNfRkFUQUwgPT0gMCkpIHsKKwkJZGV2X2VycihzaGFycHNsX3BtLmRldiwgIkZhdGFsIEJhdHQgRXJyb3IhIFN1c3BlbmRpbmcuXG4iKTsKKwkJaXNfZmF0YWwgPSAxOworCX0KKworCWlmICghKHNoYXJwc2xfcG0uZmxhZ3MgJiBTSEFSUFNMX0FQTV9RVUVVRUQpICYmIGlzX2ZhdGFsKSB7CisJCXNoYXJwc2xfcG0uZmxhZ3MgfD0gU0hBUlBTTF9BUE1fUVVFVUVEOworCQlhcG1fcXVldWVfZXZlbnQoQVBNX0NSSVRJQ0FMX1NVU1BFTkQpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIE1haW50YWluIGFuIGF2ZXJhZ2Ugb2YgdGhlIGxhc3QgMTAgcmVhZGluZ3MKKyAqLworI2RlZmluZSBTSEFSUFNMX0NOVl9WQUxVRV9OVU0gICAgMTAKK3N0YXRpYyBpbnQgc2hhcnBzbF9hZF9pbmRleDsKKworc3RhdGljIHZvaWQgc2hhcnBzbF9hdmVyYWdlX2NsZWFyKHZvaWQpCit7CisJc2hhcnBzbF9hZF9pbmRleCA9IDA7Cit9CisKK3N0YXRpYyBpbnQgc2hhcnBzbF9hdmVyYWdlX3ZhbHVlKGludCBhZCkKK3sKKwlpbnQgaSwgYWRfdmFsID0gMDsKKwlzdGF0aWMgaW50IHNoYXJwc2xfYWRbU0hBUlBTTF9DTlZfVkFMVUVfTlVNKzFdOworCisJaWYgKHNoYXJwc2xfcG0uYmF0dHN0YXQubWFpbmJhdF9zdGF0dXMgIT0gQVBNX0JBVFRFUllfU1RBVFVTX0hJR0gpIHsKKwkJc2hhcnBzbF9hZF9pbmRleCA9IDA7CisJCXJldHVybiBhZDsKKwl9CisKKwlzaGFycHNsX2FkW3NoYXJwc2xfYWRfaW5kZXhdID0gYWQ7CisJc2hhcnBzbF9hZF9pbmRleCsrOworCWlmIChzaGFycHNsX2FkX2luZGV4ID49IFNIQVJQU0xfQ05WX1ZBTFVFX05VTSkgeworCQlmb3IgKGk9MDsgaSA8IChTSEFSUFNMX0NOVl9WQUxVRV9OVU0tMSk7IGkrKykKKwkJCXNoYXJwc2xfYWRbaV0gPSBzaGFycHNsX2FkW2krMV07CisJCXNoYXJwc2xfYWRfaW5kZXggPSBTSEFSUFNMX0NOVl9WQUxVRV9OVU0gLSAxOworCX0KKwlmb3IgKGk9MDsgaSA8IHNoYXJwc2xfYWRfaW5kZXg7IGkrKykKKwkJYWRfdmFsICs9IHNoYXJwc2xfYWRbaV07CisKKwlyZXR1cm4gKGFkX3ZhbCAvIHNoYXJwc2xfYWRfaW5kZXgpOworfQorCisKKy8qCisgKiBSZWFkIE1BWDExMTEgQURDCisgKi8KK3N0YXRpYyBpbnQgcmVhZF9tYXgxMTExKGludCBjaGFubmVsKQoreworCXJldHVybiBjb3JnaV9zc3BfbWF4MTExMV9nZXQoKGNoYW5uZWwgPDwgTUFYQ1RSTF9TRUxfU0gpIHwgTUFYQ1RSTF9QRDAgfCBNQVhDVFJMX1BEMQorCQkJfCBNQVhDVFJMX1NHTCB8IE1BWENUUkxfVU5JIHwgTUFYQ1RSTF9TVFIpOworfQorCitzdGF0aWMgaW50IHNoYXJwc2xfcmVhZF9NYWluQmF0dGVyeSh2b2lkKQoreworCXJldHVybiByZWFkX21heDExMTEoQkFUVF9BRCk7Cit9CisKK3N0YXRpYyBpbnQgc2hhcnBzbF9yZWFkX1RlbXAodm9pZCkKK3sKKwlpbnQgdGVtcDsKKworCXNoYXJwc2xfcG0ubWFjaGluZm8tPm1lYXN1cmVfdGVtcCgxKTsKKworCW1kZWxheShTSEFSUFNMX0NIRUNLX0JBVFRFUllfV0FJVF9USU1FX1RFTVApOworCXRlbXAgPSByZWFkX21heDExMTEoQkFUVF9USE0pOworCisJc2hhcnBzbF9wbS5tYWNoaW5mby0+bWVhc3VyZV90ZW1wKDApOworCisJcmV0dXJuIHRlbXA7Cit9CisKK3N0YXRpYyBpbnQgc2hhcnBzbF9yZWFkX2prdmFkKHZvaWQpCit7CisJcmV0dXJuIHJlYWRfbWF4MTExMShKS19WQUQpOworfQorCisvKgorICogVGFrZSBhbiBhcnJheSBvZiA1IGludGVnZXJzLCByZW1vdmUgdGhlIG1heGltdW0gYW5kIG1pbmltdW0gdmFsdWVzCisgKiBhbmQgcmV0dXJuIHRoZSBhdmVyYWdlLgorICovCitzdGF0aWMgaW50IGdldF9zZWxlY3RfdmFsKGludCAqdmFsKQoreworCWludCBpLCBqLCBrLCB0ZW1wLCBzdW0gPSAwOworCisJLyogRmluZCBNQVggdmFsICovCisJdGVtcCA9IHZhbFswXTsKKwlqPTA7CisJZm9yIChpPTE7IGk8NTsgaSsrKSB7CisJCWlmICh0ZW1wIDwgdmFsW2ldKSB7CisJCQl0ZW1wID0gdmFsW2ldOworCQkJaiA9IGk7CisJCX0KKwl9CisKKwkvKiBGaW5kIE1JTiB2YWwgKi8KKwl0ZW1wID0gdmFsWzRdOworCWs9NDsKKwlmb3IgKGk9MzsgaT49MDsgaS0tKSB7CisJCWlmICh0ZW1wID4gdmFsW2ldKSB7CisJCQl0ZW1wID0gdmFsW2ldOworCQkJayA9IGk7CisJCX0KKwl9CisKKwlmb3IgKGk9MDsgaTw1OyBpKyspCisJCWlmIChpICE9IGogJiYgaSAhPSBrICkKKwkJCXN1bSArPSB2YWxbaV07CisKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQXZlcmFnZTogJWQgZnJvbSB2YWx1ZXM6ICVkLCAlZCwgJWQsICVkLCAlZFxuIiwgc3VtLzMsIHZhbFswXSwgdmFsWzFdLCB2YWxbMl0sIHZhbFszXSwgdmFsWzRdKTsKKworCXJldHVybiAoc3VtLzMpOworfQorCisvKiAgbW9kZSAwIC0gQ2hlY2sgdGVtcGVyYXR1cmUgYW5kIHZvbHRhZ2UKKyAqICAgICAgIDEgLSBDaGVjayB0ZW1wZXJhdHVyZSBvbmx5ICovCitzdGF0aWMgaW50IHNoYXJwc2xfY2hlY2tfYmF0dGVyeShpbnQgbW9kZSkKK3sKKwlpbnQgdmFsLCBpLCBidWZmWzVdOworCisJLyogQ2hlY2sgYmF0dGVyeSB0ZW1wZXJhdHVyZSAqLworCWZvciAoaT0wOyBpPDU7IGkrKykgeworCQltZGVsYXkoU0hBUlBTTF9DSEVDS19CQVRURVJZX1dBSVRfVElNRV9URU1QKTsKKwkJYnVmZltpXSA9IHNoYXJwc2xfcmVhZF9UZW1wKCk7CisJfQorCisJdmFsID0gZ2V0X3NlbGVjdF92YWwoYnVmZik7CisKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiVGVtcGVyYXR1cmU6ICVkXG4iLCB2YWwpOworCWlmICh2YWwgPiBTSEFSUFNMX0NIQVJHRV9PTl9URU1QKQorCQlyZXR1cm4gLTE7CisJaWYgKG1vZGUgPT0gMSkKKwkJcmV0dXJuIDA7CisKKwkvKiBkaXNhYmxlIGNoYXJnZSwgZW5hYmxlIGRpc2NoYXJnZSAqLworCUNIQVJHRV9PRkYoKTsKKwlESVNDSEFSR0VfT04oKTsKKwltZGVsYXkoU0hBUlBTTF9XQUlUX0RJU0NIQVJHRV9PTik7CisKKwlpZiAoc2hhcnBzbF9wbS5tYWNoaW5mby0+ZGlzY2hhcmdlMSkKKwkJc2hhcnBzbF9wbS5tYWNoaW5mby0+ZGlzY2hhcmdlMSgxKTsKKworCS8qIENoZWNrIGJhdHRlcnkgdm9sdGFnZSAqLworCWZvciAoaT0wOyBpPDU7IGkrKykgeworCQlidWZmW2ldID0gc2hhcnBzbF9yZWFkX01haW5CYXR0ZXJ5KCk7CisJCW1kZWxheShTSEFSUFNMX0NIRUNLX0JBVFRFUllfV0FJVF9USU1FX1ZPTFQpOworCX0KKworCWlmIChzaGFycHNsX3BtLm1hY2hpbmZvLT5kaXNjaGFyZ2UxKQorCQlzaGFycHNsX3BtLm1hY2hpbmZvLT5kaXNjaGFyZ2UxKDApOworCisJRElTQ0hBUkdFX09GRigpOworCisJdmFsID0gZ2V0X3NlbGVjdF92YWwoYnVmZik7CisJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIkJhdHRlcnkgVm9sdGFnZTogJWRcbiIsIHZhbCk7CisKKwlpZiAodmFsIDwgU0hBUlBTTF9DSEFSR0VfT05fVk9MVCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hhcnBzbF9hY19jaGVjayh2b2lkKQoreworCWludCB0ZW1wLCBpLCBidWZmWzVdOworCisJZm9yIChpPTA7IGk8NTsgaSsrKSB7CisJCWJ1ZmZbaV0gPSBzaGFycHNsX3JlYWRfamt2YWQoKTsKKwkJbWRlbGF5KFNIQVJQU0xfQ0hFQ0tfQkFUVEVSWV9XQUlUX1RJTUVfSktWQUQpOworCX0KKworCXRlbXAgPSBnZXRfc2VsZWN0X3ZhbChidWZmKTsKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQUMgVm9sdGFnZTogJWRcbiIsdGVtcCk7CisKKwlpZiAoKHRlbXAgPiBTSEFSUFNMX0NIQVJHRV9PTl9KS1ZBRF9ISUdIKSB8fCAodGVtcCA8IFNIQVJQU0xfQ0hBUkdFX09OX0pLVkFEX0xPVykpIHsKKwkJZGV2X2VycihzaGFycHNsX3BtLmRldiwgIkVycm9yOiBBQyBjaGVjayBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHNoYXJwc2xfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzaGFycHNsX3BtLmZsYWdzIHw9IFNIQVJQU0xfU1VTUEVOREVEOworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwlpZiAoc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSA9PSBDSFJHX09OKQorCQlzaGFycHNsX3BtLmZsYWdzIHw9IFNIQVJQU0xfRE9fT0ZGTElORV9DSFJHOworCWVsc2UKKwkJc2hhcnBzbF9wbS5mbGFncyAmPSB+U0hBUlBTTF9ET19PRkZMSU5FX0NIUkc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaGFycHNsX3BtX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJLyogQ2xlYXIgdGhlIHJlc2V0IHNvdXJjZSBpbmRpY2F0b3JzIGFzIHRoZXkgYnJlYWsgdGhlIGJvb3Rsb2FkZXIgdXBvbiByZWJvb3QgKi8KKwlSQ1NSID0gMHgwZjsKKwlzaGFycHNsX2F2ZXJhZ2VfY2xlYXIoKTsKKwlzaGFycHNsX3BtLmZsYWdzICY9IH5TSEFSUFNMX0FQTV9RVUVVRUQ7CisJc2hhcnBzbF9wbS5mbGFncyAmPSB+U0hBUlBTTF9TVVNQRU5ERUQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY29yZ2lfZ290b19zbGVlcCh1bnNpZ25lZCBsb25nIGFsYXJtX3RpbWUsIHVuc2lnbmVkIGludCBhbGFybV9lbmFibGUsIHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiVGltZSBpczogJTA4eFxuIixSQ05SKTsKKworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJPZmZsaW5lIENoYXJnZSBBY3RpdmF0ZSA9ICVkXG4iLHNoYXJwc2xfcG0uZmxhZ3MgJiBTSEFSUFNMX0RPX09GRkxJTkVfQ0hSRyk7CisJLyogbm90IGNoYXJnaW5nIGFuZCBBQy1JTiEgKi8KKworCWlmICgoc2hhcnBzbF9wbS5mbGFncyAmIFNIQVJQU0xfRE9fT0ZGTElORV9DSFJHKSAmJiAoU1RBVFVTX0FDX0lOICE9IDApKSB7CisJCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJBY3RpdmF0aW5nIE9mZmxpbmUgQ2hhcmdlci4uLlxuIik7CisJCXNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPSBDSFJHX09GRjsKKwkJc2hhcnBzbF9wbS5mbGFncyAmPSB+U0hBUlBTTF9ET19PRkZMSU5FX0NIUkc7CisJCXNoYXJwc2xfb2ZmX2NoYXJnZV9iYXR0ZXJ5KCk7CisJfQorCisJc2hhcnBzbF9wbS5tYWNoaW5mby0+cHJlc3VzcGVuZCgpOworCisJUEVEUiA9IDB4ZmZmZmZmZmY7IC8qIGNsZWFyIGl0ICovCisKKwlzaGFycHNsX3BtLmZsYWdzICY9IH5TSEFSUFNMX0FMQVJNX0FDVElWRTsKKwlpZiAoKHNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPT0gQ0hSR19PTikgJiYgKChhbGFybV9lbmFibGUgJiYgKChhbGFybV90aW1lIC0gUkNOUikgPiAoU0hBUlBTTF9CQVRDSEtfVElNRV9TVVNQRU5EICsgMzApKSkgfHwgIWFsYXJtX2VuYWJsZSkpIHsKKwkJUlRTUiAmPSBSVFNSX0FMRTsKKwkJUlRBUiA9IFJDTlIgKyBTSEFSUFNMX0JBVENIS19USU1FX1NVU1BFTkQ7CisJCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJDaGFyZ2luZyBhbGFybSBhdDogJTA4eFxuIixSVEFSKTsKKwkJc2hhcnBzbF9wbS5mbGFncyB8PSBTSEFSUFNMX0FMQVJNX0FDVElWRTsKKwl9IGVsc2UgaWYgKGFsYXJtX2VuYWJsZSkgeworCQlSVFNSICY9IFJUU1JfQUxFOworCQlSVEFSID0gYWxhcm1fdGltZTsKKwkJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIlVzZXIgYWxhcm0gYXQ6ICUwOHhcbiIsUlRBUik7CisJfSBlbHNlIHsKKwkJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIk5vIGFsYXJtcyBzZXQuXG4iKTsKKwl9CisKKwlweGFfcG1fZW50ZXIoc3RhdGUpOworCisJc2hhcnBzbF9wbS5tYWNoaW5mby0+cG9zdHN1c3BlbmQoKTsKKworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJDb3JnaSB3b2tlbiB1cCBmcm9tIHN1c3BlbmQ6ICUwOHhcbiIsUEVEUik7Cit9CisKK3N0YXRpYyBpbnQgY29yZ2lfZW50ZXJfc3VzcGVuZCh1bnNpZ25lZCBsb25nIGFsYXJtX3RpbWUsIHVuc2lnbmVkIGludCBhbGFybV9lbmFibGUsIHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwlpZiAoIXNoYXJwc2xfcG0ubWFjaGluZm8tPnNob3VsZF93YWtldXAoIShzaGFycHNsX3BtLmZsYWdzICYgU0hBUlBTTF9BTEFSTV9BQ1RJVkUpICYmIGFsYXJtX2VuYWJsZSkgKQorCXsKKwkJaWYgKCEoc2hhcnBzbF9wbS5mbGFncyAmIFNIQVJQU0xfQUxBUk1fQUNUSVZFKSkgeworCQkJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIk5vIHVzZXIgdHJpZ2dlcmVkIHdha2V1cCBldmVudHMgYW5kIG5vdCBjaGFyZ2luZy4gU3RyYW5nZS4gU3VzcGVuZC5cbiIpOworCQkJY29yZ2lfZ290b19zbGVlcChhbGFybV90aW1lLCBhbGFybV9lbmFibGUsIHN0YXRlKTsKKwkJCXJldHVybiAxOworCQl9CisJCWlmKHNoYXJwc2xfb2ZmX2NoYXJnZV9iYXR0ZXJ5KCkpIHsKKwkJCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJDaGFyZ2luZy4gU3VzcGVuZC4uLlxuIik7CisJCQljb3JnaV9nb3RvX3NsZWVwKGFsYXJtX3RpbWUsIGFsYXJtX2VuYWJsZSwgc3RhdGUpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIlVzZXIgdHJpZ2dlcmVkIHdha2V1cCBpbiBvZmZsaW5lIGNoYXJnZXIuXG4iKTsKKwl9CisKKwlpZiAoKFNUQVRVU19CQVRUX0xPQ0tFRCA9PSAwKSB8fCAoc2hhcnBzbF9mYXRhbF9jaGVjaygpIDwgMCkgKQorCXsKKwkJZGV2X2VycihzaGFycHNsX3BtLmRldiwgIkZhdGFsIGNvbmRpdGlvbi4gU3VzcGVuZC5cbiIpOworCQljb3JnaV9nb3RvX3NsZWVwKGFsYXJtX3RpbWUsIGFsYXJtX2VuYWJsZSwgc3RhdGUpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb3JnaV9weGFfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCXVuc2lnbmVkIGxvbmcgYWxhcm1fdGltZSA9IFJUQVI7CisJdW5zaWduZWQgaW50IGFsYXJtX3N0YXR1cyA9ICgoUlRTUiAmIFJUU1JfQUxFKSAhPSAwKTsKKworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJTaGFycFNMIHN1c3BlbmRpbmcgZm9yIGZpcnN0IHRpbWUuXG4iKTsKKworCWNvcmdpX2dvdG9fc2xlZXAoYWxhcm1fdGltZSwgYWxhcm1fc3RhdHVzLCBzdGF0ZSk7CisKKwl3aGlsZSAoY29yZ2lfZW50ZXJfc3VzcGVuZChhbGFybV90aW1lLGFsYXJtX3N0YXR1cyxzdGF0ZSkpCisJCXt9CisKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiU2hhcnBTTCByZXN1bWluZy4uLlxuIik7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisKKy8qCisgKiBDaGVjayBmb3IgZmF0YWwgYmF0dGVyeSBlcnJvcnMKKyAqIEZhdGFsIHJldHVybnMgLTEKKyAqLworc3RhdGljIGludCBzaGFycHNsX2ZhdGFsX2NoZWNrKHZvaWQpCit7CisJaW50IGJ1ZmZbNV0sIHRlbXAsIGksIGFjaW47CisKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAic2hhcnBzbF9mYXRhbF9jaGVjayBlbnRlcmVkXG4iKTsKKworCS8qIENoZWNrIEFDLUFkYXB0ZXIgKi8KKwlhY2luID0gU1RBVFVTX0FDX0lOOworCisJaWYgKGFjaW4gJiYgKHNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPT0gQ0hSR19PTikpIHsKKwkJQ0hBUkdFX09GRigpOworCQl1ZGVsYXkoMTAwKTsKKwkJRElTQ0hBUkdFX09OKCk7CS8qIGVuYWJsZSBkaXNjaGFyZ2UgKi8KKwkJbWRlbGF5KFNIQVJQU0xfV0FJVF9ESVNDSEFSR0VfT04pOworCX0KKworCWlmIChzaGFycHNsX3BtLm1hY2hpbmZvLT5kaXNjaGFyZ2UxKQorCQlzaGFycHNsX3BtLm1hY2hpbmZvLT5kaXNjaGFyZ2UxKDEpOworCisJLyogQ2hlY2sgYmF0dGVyeSA6IGNoZWNrIGluc2VydGluZyBiYXR0ZXJ5ID8gKi8KKwlmb3IgKGk9MDsgaTw1OyBpKyspIHsKKwkJYnVmZltpXSA9IHNoYXJwc2xfcmVhZF9NYWluQmF0dGVyeSgpOworCQltZGVsYXkoU0hBUlBTTF9DSEVDS19CQVRURVJZX1dBSVRfVElNRV9WT0xUKTsKKwl9CisKKwlpZiAoc2hhcnBzbF9wbS5tYWNoaW5mby0+ZGlzY2hhcmdlMSkKKwkJc2hhcnBzbF9wbS5tYWNoaW5mby0+ZGlzY2hhcmdlMSgwKTsKKworCWlmIChhY2luICYmIChzaGFycHNsX3BtLmNoYXJnZV9tb2RlID09IENIUkdfT04pKSB7CisJCXVkZWxheSgxMDApOworCQlDSEFSR0VfT04oKTsKKwkJRElTQ0hBUkdFX09GRigpOworCX0KKworCXRlbXAgPSBnZXRfc2VsZWN0X3ZhbChidWZmKTsKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAic2hhcnBzbF9mYXRhbF9jaGVjazogYWNpbjogJWQsIGRpc2NoYXJnZSB2b2x0YWdlOiAlZCwgbm8gZGlzY2hhcmdlOiAlZFxuIiwgYWNpbiwgdGVtcCwgc2hhcnBzbF9yZWFkX01haW5CYXR0ZXJ5KCkpOworCisJaWYgKChhY2luICYmICh0ZW1wIDwgU0hBUlBTTF9GQVRBTF9BQ0lOX1ZPTFQpKSB8fAorCQkJKCFhY2luICYmICh0ZW1wIDwgU0hBUlBTTF9GQVRBTF9OT0FDSU5fVk9MVCkpKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hhcnBzbF9vZmZfY2hhcmdlX2Vycm9yKHZvaWQpCit7CisJZGV2X2VycihzaGFycHNsX3BtLmRldiwgIk9mZmxpbmUgQ2hhcmdlcjogRXJyb3Igb2NjdXJlZC5cbiIpOworCUNIQVJHRV9PRkYoKTsKKwlDSEFSR0VfTEVEX0VSUigpOworCXNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPSBDSFJHX0VSUk9SOworCXJldHVybiAxOworfQorCisvKgorICogQ2hhcmdpbmcgQ29udHJvbCB3aGlsZSBzdXNwZW5kZWQKKyAqIFJldHVybiAxIC0gZ28gc3RyYWlnaHQgdG8gc2xlZXAKKyAqIFJldHVybiAwIC0gc2xlZXAgb3Igd2FrZXVwIGRlcGVuZGluZyBvbiBvdGhlciBmYWN0b3JzCisgKi8KK3N0YXRpYyBpbnQgc2hhcnBzbF9vZmZfY2hhcmdlX2JhdHRlcnkodm9pZCkKK3sKKwlpbnQgdGltZTsKKworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJDaGFyZ2UgTW9kZTogJWRcbiIsIHNoYXJwc2xfcG0uY2hhcmdlX21vZGUpOworCisJaWYgKHNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPT0gQ0hSR19PRkYpIHsKKwkJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIk9mZmxpbmUgQ2hhcmdlcjogU3RlcCAxXG4iKTsKKworCQkvKiBBQyBDaGVjayAqLworCQlpZiAoKHNoYXJwc2xfYWNfY2hlY2soKSA8IDApIHx8IChzaGFycHNsX2NoZWNrX2JhdHRlcnkoMSkgPCAwKSkKKwkJCXJldHVybiBzaGFycHNsX29mZl9jaGFyZ2VfZXJyb3IoKTsKKworCQkvKiBTdGFydCBDaGFyZ2luZyAqLworCQlDSEFSR0VfTEVEX09OKCk7CisJCUNIQVJHRV9PRkYoKTsKKwkJbWRlbGF5KFNIQVJQU0xfQ0hBUkdFX1dBSVRfVElNRSk7CisJCUNIQVJHRV9PTigpOworCisJCXNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPSBDSFJHX09OOworCQlzaGFycHNsX3BtLmZ1bGxfY291bnQgPSAwOworCisJCXJldHVybiAxOworCX0gZWxzZSBpZiAoc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSAhPSBDSFJHX09OKSB7CisJCXJldHVybiAxOworCX0KKworCWlmIChzaGFycHNsX3BtLmZ1bGxfY291bnQgPT0gMCkgeworCQlpbnQgdGltZTsKKworCQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiT2ZmbGluZSBDaGFyZ2VyOiBTdGVwIDJcbiIpOworCisJCWlmIChzaGFycHNsX2NoZWNrX2JhdHRlcnkoMCkgPCAwKQorCQkJcmV0dXJuIHNoYXJwc2xfb2ZmX2NoYXJnZV9lcnJvcigpOworCisJCUNIQVJHRV9PRkYoKTsKKwkJbWRlbGF5KFNIQVJQU0xfQ0hBUkdFX1dBSVRfVElNRSk7CisJCUNIQVJHRV9PTigpOworCQlzaGFycHNsX3BtLmNoYXJnZV9tb2RlID0gQ0hSR19PTjsKKworCQltZGVsYXkoU0hBUlBTTF9DSEFSR0VfQ09fQ0hFQ0tfVElNRSk7CisKKwkJdGltZSA9IFJDTlI7CisJCXdoaWxlKDEpIHsKKwkJCS8qIENoZWNrIGlmIGFueSB3YWtldXAgZXZlbnQgaGFkIG9jY3VyZWQgKi8KKwkJCWlmIChzaGFycHNsX3BtLm1hY2hpbmZvLT5jaGFyZ2VyX3dha2V1cCgpICE9IDApCisJCQkJcmV0dXJuIDA7CisJCQkvKiBDaGVjayBmb3IgdGltZW91dCAqLworCQkJaWYgKChSQ05SIC0gdGltZSkgPiBTSEFSUFNMX1dBSVRfQ09fVElNRSkKKwkJCQlyZXR1cm4gMTsKKwkJCWlmIChTVEFUVVNfQ0hSR19GVUxMKSB7CisJCQkJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIk9mZmxpbmUgQ2hhcmdlcjogQ2hhcmdlIGZ1bGwgb2NjdXJlZC4gUmV0cnlpbmcgdG8gY2hlY2tcbiIpOworCSAgIAkJCXNoYXJwc2xfcG0uZnVsbF9jb3VudCsrOworCQkJCUNIQVJHRV9PRkYoKTsKKwkJCQltZGVsYXkoU0hBUlBTTF9DSEFSR0VfV0FJVF9USU1FKTsKKwkJCQlDSEFSR0VfT04oKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfQorCX0KKworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJPZmZsaW5lIENoYXJnZXI6IFN0ZXAgM1xuIik7CisKKwltZGVsYXkoU0hBUlBTTF9DSEFSR0VfQ09fQ0hFQ0tfVElNRSk7CisKKwl0aW1lID0gUkNOUjsKKwl3aGlsZSgxKSB7CisJCS8qIENoZWNrIGlmIGFueSB3YWtldXAgZXZlbnQgaGFkIG9jY3VyZWQgKi8KKwkJaWYgKHNoYXJwc2xfcG0ubWFjaGluZm8tPmNoYXJnZXJfd2FrZXVwKCkgIT0gMCkKKwkJCXJldHVybiAwOworCQkvKiBDaGVjayBmb3IgdGltZW91dCAqLworCQlpZiAoKFJDTlItdGltZSkgPiBTSEFSUFNMX1dBSVRfQ09fVElNRSkgeworCQkJaWYgKHNoYXJwc2xfcG0uZnVsbF9jb3VudCA+IFNIQVJQU0xfQ0hBUkdFX1JFVFJZX0NOVCkgeworCQkJCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJPZmZsaW5lIENoYXJnZXI6IE5vdCBjaGFyZ2VkIHN1ZmZpY2llbnRseS4gUmV0cnlpbmcuXG4iKTsKKwkJCQlzaGFycHNsX3BtLmZ1bGxfY291bnQgPSAwOworCQkJfQorCQkJc2hhcnBzbF9wbS5mdWxsX2NvdW50Kys7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlpZiAoU1RBVFVTX0NIUkdfRlVMTCkgeworCQkJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIk9mZmxpbmUgQ2hhcmdlcjogQ2hhcmdpbmcgY29tcGxldGUuXG4iKTsKKwkJCUNIQVJHRV9MRURfT0ZGKCk7CisJCQlDSEFSR0VfT0ZGKCk7CisJCQlzaGFycHNsX3BtLmNoYXJnZV9tb2RlID0gQ0hSR19ET05FOworCQkJcmV0dXJuIDE7CisJCX0KKwl9Cit9CisKKworc3RhdGljIHNzaXplX3QgYmF0dGVyeV9wZXJjZW50YWdlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLHNoYXJwc2xfcG0uYmF0dHN0YXQubWFpbmJhdF9wZXJjZW50KTsKK30KKworc3RhdGljIHNzaXplX3QgYmF0dGVyeV92b2x0YWdlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLHNoYXJwc2xfcG0uYmF0dHN0YXQubWFpbmJhdF92b2x0YWdlKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGJhdHRlcnlfcGVyY2VudGFnZSwgMDQ0NCwgYmF0dGVyeV9wZXJjZW50YWdlX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGJhdHRlcnlfdm9sdGFnZSwgMDQ0NCwgYmF0dGVyeV92b2x0YWdlX3Nob3csIE5VTEwpOworCitleHRlcm4gdm9pZCAoKmFwbV9nZXRfcG93ZXJfc3RhdHVzKShzdHJ1Y3QgYXBtX3Bvd2VyX2luZm8gKik7CisKK3N0YXRpYyB2b2lkIHNoYXJwc2xfYXBtX2dldF9wb3dlcl9zdGF0dXMoc3RydWN0IGFwbV9wb3dlcl9pbmZvICppbmZvKQoreworCWluZm8tPmFjX2xpbmVfc3RhdHVzID0gc2hhcnBzbF9wbS5iYXR0c3RhdC5hY19zdGF0dXM7CisKKwlpZiAoc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSA9PSBDSFJHX09OKQorCQlpbmZvLT5iYXR0ZXJ5X3N0YXR1cyA9IEFQTV9CQVRURVJZX1NUQVRVU19DSEFSR0lORzsKKwllbHNlCisJCWluZm8tPmJhdHRlcnlfc3RhdHVzID0gc2hhcnBzbF9wbS5iYXR0c3RhdC5tYWluYmF0X3N0YXR1czsKKworCWluZm8tPmJhdHRlcnlfZmxhZyA9ICgxIDw8IGluZm8tPmJhdHRlcnlfc3RhdHVzKTsKKwlpbmZvLT5iYXR0ZXJ5X2xpZmUgPSBzaGFycHNsX3BtLmJhdHRzdGF0Lm1haW5iYXRfcGVyY2VudDsKK30KKworc3RhdGljIHN0cnVjdCBwbV9vcHMgc2hhcnBzbF9wbV9vcHMgPSB7CisJLnBtX2Rpc2tfbW9kZQk9IFBNX0RJU0tfRklSTVdBUkUsCisJLnByZXBhcmUJPSBweGFfcG1fcHJlcGFyZSwKKwkuZW50ZXIJCT0gY29yZ2lfcHhhX3BtX2VudGVyLAorCS5maW5pc2gJCT0gcHhhX3BtX2ZpbmlzaCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNoYXJwc2xfcG1fcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWlmICghZGV2LT5wbGF0Zm9ybV9kYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNoYXJwc2xfcG0uZGV2ID0gZGV2OworCXNoYXJwc2xfcG0ubWFjaGluZm8gPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSA9IENIUkdfT0ZGOworCXNoYXJwc2xfcG0uZmxhZ3MgPSAwOworCisJc2hhcnBzbF9wbS5tYWNoaW5mby0+aW5pdCgpOworCisJaW5pdF90aW1lcigmc2hhcnBzbF9wbS5hY190aW1lcik7CisJc2hhcnBzbF9wbS5hY190aW1lci5mdW5jdGlvbiA9IHNoYXJwc2xfYWNfdGltZXI7CisKKwlpbml0X3RpbWVyKCZzaGFycHNsX3BtLmNocmdfZnVsbF90aW1lcik7CisJc2hhcnBzbF9wbS5jaHJnX2Z1bGxfdGltZXIuZnVuY3Rpb24gPSBzaGFycHNsX2NocmdfZnVsbF90aW1lcjsKKworCXB4YV9ncGlvX21vZGUoc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19hY2luIHwgR1BJT19JTik7CisJcHhhX2dwaW9fbW9kZShzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2JhdGZ1bGwgfCBHUElPX0lOKTsKKwlweGFfZ3Bpb19tb2RlKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0bG9jayB8IEdQSU9fSU4pOworCisJLyogUmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXJzICovCisJaWYgKHJlcXVlc3RfaXJxKElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYWNpbiksIHNoYXJwc2xfYWNfaXNyLCBTQV9JTlRFUlJVUFQsICJBQyBJbnB1dCBEZXRlY3QiLCBzaGFycHNsX2FjX2lzcikpIHsKKwkJZGV2X2VycihzaGFycHNsX3BtLmRldiwgIkNvdWxkIG5vdCBnZXQgaXJxICVkLlxuIiwgSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19hY2luKSk7CisJfQorCWVsc2Ugc2V0X2lycV90eXBlKElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYWNpbiksSVJRVF9CT1RIRURHRSk7CisKKwlpZiAocmVxdWVzdF9pcnEoSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19iYXRsb2NrKSwgc2hhcnBzbF9mYXRhbF9pc3IsIFNBX0lOVEVSUlVQVCwgIkJhdHRlcnkgQ292ZXIiLCBzaGFycHNsX2ZhdGFsX2lzcikpIHsKKwkJZGV2X2VycihzaGFycHNsX3BtLmRldiwgIkNvdWxkIG5vdCBnZXQgaXJxICVkLlxuIiwgSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19iYXRsb2NrKSk7CisJfQorCWVsc2Ugc2V0X2lycV90eXBlKElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0bG9jayksSVJRVF9GQUxMSU5HKTsKKworCWlmIChzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2ZhdGFsKSB7CisJCWlmIChyZXF1ZXN0X2lycShJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2ZhdGFsKSwgc2hhcnBzbF9mYXRhbF9pc3IsIFNBX0lOVEVSUlVQVCwgIkZhdGFsIEJhdHRlcnkiLCBzaGFycHNsX2ZhdGFsX2lzcikpIHsKKwkJCWRldl9lcnIoc2hhcnBzbF9wbS5kZXYsICJDb3VsZCBub3QgZ2V0IGlycSAlZC5cbiIsIElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fZmF0YWwpKTsKKwkJfQorCQllbHNlIHNldF9pcnFfdHlwZShJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2ZhdGFsKSxJUlFUX0ZBTExJTkcpOworCX0KKworCWlmICghbWFjaGluZV9pc19jb3JnaSgpKQorCXsKKwkJLyogUmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXIuICovCisJCWlmIChyZXF1ZXN0X2lycShJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2JhdGZ1bGwpLCBzaGFycHNsX2NocmdfZnVsbF9pc3IsIFNBX0lOVEVSUlVQVCwgIkNPIiwgc2hhcnBzbF9jaHJnX2Z1bGxfaXNyKSkgeworCQkJZGV2X2VycihzaGFycHNsX3BtLmRldiwgIkNvdWxkIG5vdCBnZXQgaXJxICVkLlxuIiwgSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19iYXRmdWxsKSk7CisJCX0KKwkJZWxzZSBzZXRfaXJxX3R5cGUoSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19iYXRmdWxsKSxJUlFUX1JJU0lORyk7CisJfQorCisJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhdHRlcnlfcGVyY2VudGFnZSk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhdHRlcnlfdm9sdGFnZSk7CisKKwlhcG1fZ2V0X3Bvd2VyX3N0YXR1cyA9IHNoYXJwc2xfYXBtX2dldF9wb3dlcl9zdGF0dXM7CisKKwlwbV9zZXRfb3BzKCZzaGFycHNsX3BtX29wcyk7CisKKwltb2RfdGltZXIoJnNoYXJwc2xfcG0uYWNfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDI1MCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hhcnBzbF9wbV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXBtX3NldF9vcHMoTlVMTCk7CisKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmF0dGVyeV9wZXJjZW50YWdlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmF0dGVyeV92b2x0YWdlKTsKKworCWZyZWVfaXJxKElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYWNpbiksIHNoYXJwc2xfYWNfaXNyKTsKKwlmcmVlX2lycShJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2JhdGxvY2spLCBzaGFycHNsX2ZhdGFsX2lzcik7CisKKwlpZiAoc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19mYXRhbCkKKwkJZnJlZV9pcnEoSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19mYXRhbCksIHNoYXJwc2xfZmF0YWxfaXNyKTsKKworCWlmICghbWFjaGluZV9pc19jb3JnaSgpKQorCQlmcmVlX2lycShJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2JhdGZ1bGwpLCBzaGFycHNsX2NocmdfZnVsbF9pc3IpOworCisJZGVsX3RpbWVyX3N5bmMoJnNoYXJwc2xfcG0uY2hyZ19mdWxsX3RpbWVyKTsKKwlkZWxfdGltZXJfc3luYygmc2hhcnBzbF9wbS5hY190aW1lcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNoYXJwc2xfcG1fZHJpdmVyID0geworCS5uYW1lCQk9ICJzaGFycHNsLXBtIiwKKwkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKwkucHJvYmUJCT0gc2hhcnBzbF9wbV9wcm9iZSwKKwkucmVtb3ZlCQk9IHNoYXJwc2xfcG1fcmVtb3ZlLAorCS5zdXNwZW5kCT0gc2hhcnBzbF9wbV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gc2hhcnBzbF9wbV9yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzaGFycHNsX3BtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZzaGFycHNsX3BtX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIHNoYXJwc2xfcG1fZXhpdCh2b2lkKQoreworIAlkcml2ZXJfdW5yZWdpc3Rlcigmc2hhcnBzbF9wbV9kcml2ZXIpOworfQorCitsYXRlX2luaXRjYWxsKHNoYXJwc2xfcG1faW5pdCk7Cittb2R1bGVfZXhpdChzaGFycHNsX3BtX2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc3NwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zc3AuYwppbmRleCA0ZDgyNmMwLi5hNjhiMzBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zc3AuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zc3AuYwpAQCAtMTksNiArMTksOCBAQAogICogICAyMm5kIEF1ZyAyMDAzIEluaXRpYWwgdmVyc2lvbi4KICAqICAgMjB0aCBEZWMgMjAwNCBBZGRlZCBzc3BfY29uZmlnIGZvciBjaGFuZ2luZyBwb3J0IGNvbmZpZyB3aXRob3V0CiAgKiAgICAgICAgICAgICAgICAgY2xvc2luZyB0aGUgcG9ydC4KKyAqICAgIDR0aCBBdWcgMjAwNSBBZGRlZCBvcHRpb24gdG8gZGlzYWJsZSBpcnEgaGFuZGxlciByZWdpc3RyYXRpb24gYW5kCisgKiAgICAgICAgICAgICAgICAgY2xlYW5lZCB1cCBpcnEgYW5kIGNsb2NrIGRldGVjdGlvbi4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0zNyw2ICszOSwyNiBAQAogCiAjZGVmaW5lIFBYQV9TU1BfUE9SVFMgCTMKIAorc3RydWN0IHNzcF9pbmZvXyB7CisJaW50IGlycTsKKwl1MzIgY2xvY2s7Cit9OworCisvKgorICogU1NQIHBvcnQgY2xvY2sgYW5kIElSUSBzZXR0aW5ncworICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNzcF9pbmZvXyBzc3BfaW5mb1tQWEFfU1NQX1BPUlRTXSA9IHsKKyNpZiBkZWZpbmVkIChDT05GSUdfUFhBMjd4KQorCXtJUlFfU1NQLAlDS0VOMjNfU1NQMX0sCisJe0lSUV9TU1AyLAlDS0VOM19TU1AyfSwKKwl7SVJRX1NTUDMsCUNLRU40X1NTUDN9LAorI2Vsc2UKKwl7SVJRX1NTUCwJQ0tFTjNfU1NQfSwKKwl7SVJRX05TU1AsCUNLRU45X05TU1B9LAorCXtJUlFfQVNTUCwJQ0tFTjEwX0FTU1B9LAorI2VuZGlmCit9OworCiBzdGF0aWMgREVDTEFSRV9NVVRFWChzZW0pOwogc3RhdGljIGludCB1c2VfY291bnRbUFhBX1NTUF9QT1JUU10gPSB7MCwgMCwgMH07CiAKQEAgLTIxMCw5ICsyMzIsOSBAQAogICogICAlLUVCVVNZCWlmIHRoZSByZXNvdXJjZXMgYXJlIGFscmVhZHkgaW4gdXNlCiAgKiAgICUwCQlvbiBzdWNjZXNzCiAgKi8KLWludCBzc3BfaW5pdChzdHJ1Y3Qgc3NwX2RldiAqZGV2LCB1MzIgcG9ydCkKK2ludCBzc3BfaW5pdChzdHJ1Y3Qgc3NwX2RldiAqZGV2LCB1MzIgcG9ydCwgdTMyIGluaXRfZmxhZ3MpCiB7Ci0JaW50IHJldCwgaXJxOworCWludCByZXQ7CiAKIAlpZiAocG9ydCA+IFBYQV9TU1BfUE9SVFMgfHwgcG9ydCA9PSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTIyOSw2MSArMjUxLDIwIEBACiAJCXVwKCZzZW0pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQotCXN3aXRjaCAocG9ydCkgewotCQljYXNlIDE6Ci0JCQlpcnEgPSBJUlFfU1NQOwotCQkJYnJlYWs7Ci0jaWYgZGVmaW5lZCAoQ09ORklHX1BYQTI3eCkKLQkJY2FzZSAyOgotCQkJaXJxID0gSVJRX1NTUDI7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJaXJxID0gSVJRX1NTUDM7Ci0JCQlicmVhazsKLSNlbHNlCi0JCWNhc2UgMjoKLQkJCWlycSA9IElSUV9OU1NQOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCWlycSA9IElSUV9BU1NQOwotCQkJYnJlYWs7Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRU5PREVWOwotCX0KLQogCWRldi0+cG9ydCA9IHBvcnQ7CiAKLQlyZXQgPSByZXF1ZXN0X2lycShpcnEsIHNzcF9pbnRlcnJ1cHQsIDAsICJTU1AiLCBkZXYpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X3JlZ2lvbjsKKwkvKiBkbyB3ZSBuZWVkIHRvIGdldCBpcnEgKi8KKwlpZiAoIShpbml0X2ZsYWdzICYgU1NQX05PX0lSUSkpIHsKKwkJcmV0ID0gcmVxdWVzdF9pcnEoc3NwX2luZm9bcG9ydC0xXS5pcnEsIHNzcF9pbnRlcnJ1cHQsCisJCQkJMCwgIlNTUCIsIGRldik7CisJICAgIAlpZiAocmV0KQorCQkJZ290byBvdXRfcmVnaW9uOworCSAgICAJZGV2LT5pcnEgPSBzc3BfaW5mb1twb3J0LTFdLmlycTsKKwl9IGVsc2UKKwkJZGV2LT5pcnEgPSAwOwogCiAJLyogdHVybiBvbiBTU1AgcG9ydCBjbG9jayAqLwotCXN3aXRjaCAoZGV2LT5wb3J0KSB7Ci0jaWYgZGVmaW5lZCAoQ09ORklHX1BYQTI3eCkKLQkJY2FzZSAxOgotCQkJcHhhX3NldF9ja2VuKENLRU4yM19TU1AxLCAxKTsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlweGFfc2V0X2NrZW4oQ0tFTjNfU1NQMiwgMSk7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJcHhhX3NldF9ja2VuKENLRU40X1NTUDMsIDEpOwotCQkJYnJlYWs7Ci0jZWxzZQotCQljYXNlIDE6Ci0JCQlweGFfc2V0X2NrZW4oQ0tFTjNfU1NQLCAxKTsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlweGFfc2V0X2NrZW4oQ0tFTjlfTlNTUCwgMSk7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJcHhhX3NldF9ja2VuKENLRU4xMF9BU1NQLCAxKTsKLQkJCWJyZWFrOwotI2VuZGlmCi0JfQotCisJcHhhX3NldF9ja2VuKHNzcF9pbmZvW3BvcnQtMV0uY2xvY2ssIDEpOwogCXVwKCZzZW0pOwogCXJldHVybiAwOwogCkBAIC0zMDEsNDYgKzI4MiwxNyBAQAogICovCiB2b2lkIHNzcF9leGl0KHN0cnVjdCBzc3BfZGV2ICpkZXYpCiB7Ci0JaW50IGlycTsKLQogCWRvd24oJnNlbSk7CiAJU1NDUjBfUChkZXYtPnBvcnQpICY9IH5TU0NSMF9TU0U7CiAKLQkvKiBmaW5kIGlycSwgc2F2ZSBwb3dlciBhbmQgdHVybiBvZmYgU1NQIHBvcnQgY2xvY2sgKi8KLQlzd2l0Y2ggKGRldi0+cG9ydCkgewotI2lmIGRlZmluZWQgKENPTkZJR19QWEEyN3gpCi0JCWNhc2UgMToKLQkJCWlycSA9IElSUV9TU1A7Ci0JCQlweGFfc2V0X2NrZW4oQ0tFTjIzX1NTUDEsIDApOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCWlycSA9IElSUV9TU1AyOwotCQkJcHhhX3NldF9ja2VuKENLRU4zX1NTUDIsIDApOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCWlycSA9IElSUV9TU1AzOwotCQkJcHhhX3NldF9ja2VuKENLRU40X1NTUDMsIDApOwotCQkJYnJlYWs7Ci0jZWxzZQotCQljYXNlIDE6Ci0JCQlpcnEgPSBJUlFfU1NQOwotCQkJcHhhX3NldF9ja2VuKENLRU4zX1NTUCwgMCk7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJaXJxID0gSVJRX05TU1A7Ci0JCQlweGFfc2V0X2NrZW4oQ0tFTjlfTlNTUCwgMCk7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJaXJxID0gSVJRX0FTU1A7Ci0JCQlweGFfc2V0X2NrZW4oQ0tFTjEwX0FTU1AsIDApOwotCQkJYnJlYWs7Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNTUDogdHJpZWQgdG8gY2xvc2UgaW52YWxpZCBwb3J0XG4iKTsKLQkJCXJldHVybjsKKyAgICAJaWYgKGRldi0+cG9ydCA+IFBYQV9TU1BfUE9SVFMgfHwgZGV2LT5wb3J0ID09IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiU1NQOiB0cmllZCB0byBjbG9zZSBpbnZhbGlkIHBvcnRcbiIpOworCQlyZXR1cm47CiAJfQogCi0JZnJlZV9pcnEoaXJxLCBkZXYpOworCXB4YV9zZXRfY2tlbihzc3BfaW5mb1tkZXYtPnBvcnQtMV0uY2xvY2ssIDApOworCWlmIChkZXYtPmlycSkKKwkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKF9fUFJFRyhTU0NSMF9QKGRldi0+cG9ydCkpLCAweDJjKTsKIAl1c2VfY291bnRbZGV2LT5wb3J0IC0gMV0tLTsKIAl1cCgmc2VtKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jCmluZGV4IDY5ZjE5NzAuLjllMDJiYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYwpAQCAtMTM3LDcgKzEzNyw3IEBACiAJLmdldF9tY3RybAk9IG5lcG9uc2V0X2dldF9tY3RybCwKIH07CiAKLXN0YXRpYyBpbnQgbmVwb25zZXRfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBuZXBvbnNldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc2ExMTAwX3JlZ2lzdGVyX3VhcnRfZm5zKCZuZXBvbnNldF9wb3J0X2Zucyk7CiAKQEAgLTE3OCwyNyArMTc4LDI3IEBACiAvKgogICogTERNIHBvd2VyIG1hbmFnZW1lbnQuCiAgKi8KLXN0YXRpYyBpbnQgbmVwb25zZXRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgbmVwb25zZXRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAkvKgogCSAqIFNhdmUgc3RhdGUuCiAJICovCi0JaWYgKCFkZXYtPnBvd2VyLnNhdmVkX3N0YXRlKQotCQlkZXYtPnBvd2VyLnNhdmVkX3N0YXRlID0ga21hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkZXYtPnBvd2VyLnNhdmVkX3N0YXRlKQorCWlmICghZGV2LT5kZXYucG93ZXIuc2F2ZWRfc3RhdGUpCisJCWRldi0+ZGV2LnBvd2VyLnNhdmVkX3N0YXRlID0ga21hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPmRldi5wb3dlci5zYXZlZF9zdGF0ZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQkqKHVuc2lnbmVkIGludCAqKWRldi0+cG93ZXIuc2F2ZWRfc3RhdGUgPSBOQ1JfMDsKKwkqKHVuc2lnbmVkIGludCAqKWRldi0+ZGV2LnBvd2VyLnNhdmVkX3N0YXRlID0gTkNSXzA7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBuZXBvbnNldF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBuZXBvbnNldF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCWlmIChkZXYtPnBvd2VyLnNhdmVkX3N0YXRlKSB7Ci0JCU5DUl8wID0gKih1bnNpZ25lZCBpbnQgKilkZXYtPnBvd2VyLnNhdmVkX3N0YXRlOwotCQlrZnJlZShkZXYtPnBvd2VyLnNhdmVkX3N0YXRlKTsKLQkJZGV2LT5wb3dlci5zYXZlZF9zdGF0ZSA9IE5VTEw7CisJaWYgKGRldi0+ZGV2LnBvd2VyLnNhdmVkX3N0YXRlKSB7CisJCU5DUl8wID0gKih1bnNpZ25lZCBpbnQgKilkZXYtPmRldi5wb3dlci5zYXZlZF9zdGF0ZTsKKwkJa2ZyZWUoZGV2LT5kZXYucG93ZXIuc2F2ZWRfc3RhdGUpOworCQlkZXYtPmRldi5wb3dlci5zYXZlZF9zdGF0ZSA9IE5VTEw7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yMDksMTIgKzIwOSwxMyBAQAogI2RlZmluZSBuZXBvbnNldF9yZXN1bWUgIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgbmVwb25zZXRfZGV2aWNlX2RyaXZlciA9IHsKLQkubmFtZQkJPSAibmVwb25zZXQiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbmVwb25zZXRfZGV2aWNlX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gbmVwb25zZXRfcHJvYmUsCiAJLnN1c3BlbmQJPSBuZXBvbnNldF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gbmVwb25zZXRfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJuZXBvbnNldCIsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmVwb25zZXRfcmVzb3VyY2VzW10gPSB7CkBAIC0yOTMsNyArMjk0LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgbmVwb25zZXRfaW5pdCh2b2lkKQogewotCWRyaXZlcl9yZWdpc3RlcigmbmVwb25zZXRfZGV2aWNlX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZuZXBvbnNldF9kZXZpY2VfZHJpdmVyKTsKIAogCS8qCiAJICogVGhlIE5lcG9uc2V0IGlzIG9ubHkgcHJlc2VudCBvbiB0aGUgQXNzYWJldCBtYWNoaW5lIHR5cGUuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9LY29uZmlnIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwppbmRleCBlM2MxNGQ2Li5lODRmZGRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21tL0tjb25maWcKQEAgLTEwMiw4ICsxMDIsOCBAQAogIyBBUk05MjVUCiBjb25maWcgQ1BVX0FSTTkyNVQKICAJYm9vbCAiU3VwcG9ydCBBUk05MjVUIHByb2Nlc3NvciIgaWYgQVJDSF9PTUFQMQotIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDE1MTAKLSAJZGVmYXVsdCB5IGlmIEFSQ0hfT01BUDE1MTAKKyAJZGVwZW5kcyBvbiBBUkNIX09NQVAxNVhYCisgCWRlZmF1bHQgeSBpZiBBUkNIX09NQVAxNVhYCiAJc2VsZWN0IENQVV8zMnY0CiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0V1QKQEAgLTI0Miw3ICsyNDIsNyBAQAogIyBBUk12NgogY29uZmlnIENQVV9WNgogCWJvb2wgIlN1cHBvcnQgQVJNIFY2IHByb2Nlc3NvciIKLQlkZXBlbmRzIG9uIEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCCisJZGVwZW5kcyBvbiBBUkNIX0lOVEVHUkFUT1IgfHwgTUFDSF9SRUFMVklFV19FQiB8fCBBUkNIX09NQVAyCiAJc2VsZWN0IENQVV8zMnY2CiAJc2VsZWN0IENQVV9BQlJUX0VWNgogCXNlbGVjdCBDUFVfQ0FDSEVfVjYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtb21hcC9NYWtlZmlsZQppbmRleCA3ZTE0NGY5Li45Y2NmMTk0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteSA6PSBjb21tb24ubyBzcmFtLm8gc3JhbS1mbi5vIGNsb2NrLm8gZG1hLm8gbXV4Lm8gZ3Bpby5vIG1jYnNwLm8gdXNiLm8KK29iai15IDo9IGNvbW1vbi5vIHNyYW0ubyBzcmFtLWZuLm8gY2xvY2subyBkZXZpY2VzLm8gZG1hLm8gbXV4Lm8gZ3Bpby5vIG1jYnNwLm8gdXNiLm8KIG9iai1tIDo9CiBvYmotbiA6PQogb2JqLSAgOj0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKaW5kZXggYTAyMGZlMS4uN2NlMzliOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKQEAgLTEsMTUgKzEsMjAgQEAKIC8qCiAgKiAgbGludXgvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IE5va2lhIGNvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNSBOb2tpYSBjb3Jwb3JhdGlvbgogICogIFdyaXR0ZW4gYnkgVHV1a2thIFRpa2thbmVuIDx0dXVra2EudGlra2FuZW5AZWxla3Ryb2JpdC5jb20+CiAgKgorICogIE1vZGlmaWVkIGZvciBvbWFwIHNoYXJlZCBjbG9jayBmcmFtZXdvcmsgYnkgVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KQEAgLTE4LDU2MiArMjMsMjAgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC91c2IuaD4KIAotI2luY2x1ZGUgImNsb2NrLmgiCi0jaW5jbHVkZSAic3JhbS5oIgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CiAKLXN0YXRpYyBMSVNUX0hFQUQoY2xvY2tzKTsKK0xJU1RfSEVBRChjbG9ja3MpOwogc3RhdGljIERFQ0xBUkVfTVVURVgoY2xvY2tzX3NlbSk7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsb2NrZndfbG9jayk7Ci1zdGF0aWMgdm9pZCBwcm9wYWdhdGVfcmF0ZShzdHJ1Y3QgY2xrICogIGNsayk7Ci0vKiBVQVJUIGNsb2NrIGZ1bmN0aW9uICovCi1zdGF0aWMgaW50IHNldF91YXJ0X3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKLS8qIEV4dGVybmFsIGNsb2NrIChNQ0xLICYgQkNMSykgZnVuY3Rpb25zICovCi1zdGF0aWMgaW50IHNldF9leHRfY2xrX3JhdGUoc3RydWN0IGNsayAqICBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Ci1zdGF0aWMgbG9uZyByb3VuZF9leHRfY2xrX3JhdGUoc3RydWN0IGNsayAqICBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Ci1zdGF0aWMgdm9pZCBpbml0X2V4dF9jbGsoc3RydWN0IGNsayAqICBjbGspOwotLyogTVBVIHZpcnR1YWwgY2xvY2sgZnVuY3Rpb25zICovCi1zdGF0aWMgaW50IHNlbGVjdF90YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiAgY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwotc3RhdGljIGxvbmcgcm91bmRfdG9fdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICogIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKLXZvaWQgY2xrX3NldGRwbGwoX191MTYsIF9fdTE2KTsKK0RFRklORV9TUElOTE9DSyhjbG9ja2Z3X2xvY2spOwogCi1zdGF0aWMgc3RydWN0IG1wdV9yYXRlIHJhdGVfdGFibGVbXSA9IHsKLQkvKiBNUFUgTUh6LCB4dGFsIE1IeiwgZHBsbDEgTUh6LCBDS0NUTCwgRFBMTF9DVEwKLQkgKiBhcm1kaXYsIGRzcGRpdiwgZHNwbW11LCB0Y2RpdiwgcGVyZGl2LCBsY2RkaXYKLQkgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV8yMTZNSFopCi0JeyAyMTYwMDAwMDAsIDEyMDAwMDAwLCAyMTYwMDAwMDAsIDB4MDUwZCwgMHgyOTEwIH0sIC8qIDEvMS8yLzIvMi84ICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV8xOTVNSFopCi0JeyAxOTUwMDAwMDAsIDEzMDAwMDAwLCAxOTUwMDAwMDAsIDB4MDUwZSwgMHgyNzkwIH0sIC8qIDEvMS8yLzIvNC84ICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV8xOTJNSFopCi0JeyAxOTIwMDAwMDAsIDE5MjAwMDAwLCAxOTIwMDAwMDAsIDB4MDUwZiwgMHgyNTEwIH0sIC8qIDEvMS8yLzIvOC84ICovCi0JeyAxOTIwMDAwMDAsIDEyMDAwMDAwLCAxOTIwMDAwMDAsIDB4MDUwZiwgMHgyODEwIH0sIC8qIDEvMS8yLzIvOC84ICovCi0JeyAgOTYwMDAwMDAsIDEyMDAwMDAwLCAxOTIwMDAwMDAsIDB4MDU1ZiwgMHgyODEwIH0sIC8qIDIvMi8yLzIvOC84ICovCi0JeyAgNDgwMDAwMDAsIDEyMDAwMDAwLCAxOTIwMDAwMDAsIDB4MGJhZiwgMHgyODEwIH0sIC8qIDQvOC80LzQvOC84ICovCi0JeyAgMjQwMDAwMDAsIDEyMDAwMDAwLCAxOTIwMDAwMDAsIDB4MGZmZiwgMHgyODEwIH0sIC8qIDgvOC84LzgvOC84ICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV8xODJNSFopCi0JeyAxODIwMDAwMDAsIDEzMDAwMDAwLCAxODIwMDAwMDAsIDB4MDUwZSwgMHgyNzEwIH0sIC8qIDEvMS8yLzIvNC84ICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV8xNjhNSFopCi0JeyAxNjgwMDAwMDAsIDEyMDAwMDAwLCAxNjgwMDAwMDAsIDB4MDEwZiwgMHgyNzEwIH0sIC8qIDEvMS8xLzIvOC84ICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV8xNTBNSFopCi0JeyAxNTAwMDAwMDAsIDEyMDAwMDAwLCAxNTAwMDAwMDAsIDB4MDEwYSwgMHgyY2IwIH0sIC8qIDEvMS8xLzIvNC80ICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV8xMjBNSFopCi0JeyAxMjAwMDAwMDAsIDEyMDAwMDAwLCAxMjAwMDAwMDAsIDB4MDEwYSwgMHgyNTEwIH0sIC8qIDEvMS8xLzIvNC80ICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV85Nk1IWikKLQl7ICA5NjAwMDAwMCwgMTIwMDAwMDAsICA5NjAwMDAwMCwgMHgwMDA1LCAweDI0MTAgfSwgLyogMS8xLzEvMS8yLzIgKi8KLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX09NQVBfQVJNXzYwTUhaKQotCXsgIDYwMDAwMDAwLCAxMjAwMDAwMCwgIDYwMDAwMDAwLCAweDAwMDUsIDB4MjI5MCB9LCAvKiAxLzEvMS8xLzIvMiAqLwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMzBNSFopCi0JeyAgMzAwMDAwMDAsIDEyMDAwMDAwLCAgNjAwMDAwMDAsIDB4MDU1NSwgMHgyMjkwIH0sIC8qIDIvMi8yLzIvMi8yICovCi0jZW5kaWYKLQl7IDAsIDAsIDAsIDAsIDAgfSwKLX07CitzdGF0aWMgc3RydWN0IGNsa19mdW5jdGlvbnMgKmFyY2hfY2xvY2s7CiAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU3RhbmRhcmQgY2xvY2sgZnVuY3Rpb25zIGRlZmluZWQgaW4gYXNtL2hhcmR3YXJlL2Nsb2NrLmgKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIGNrY3RsX3JlY2FsYyhzdHJ1Y3QgY2xrICogIGNsayk7Ci1pbnQgX19jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsayk7Ci12b2lkIF9fY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKTsKLXZvaWQgX19jbGtfdW51c2Uoc3RydWN0IGNsayAqY2xrKTsKLWludCBfX2Nsa191c2Uoc3RydWN0IGNsayAqY2xrKTsKLQotCi1zdGF0aWMgdm9pZCBmb2xsb3dwYXJlbnRfcmVjYWxjKHN0cnVjdCBjbGsgKiAgY2xrKQotewotCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlOwotfQotCi0KLXN0YXRpYyB2b2lkIHdhdGNoZG9nX3JlY2FsYyhzdHJ1Y3QgY2xrICogIGNsaykKLXsKLQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIDE0OwotfQotCi1zdGF0aWMgdm9pZCB1YXJ0X3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKQotewotCXVuc2lnbmVkIGludCB2YWwgPSBvbWFwX3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JaWYgKHZhbCAmIGNsay0+ZW5hYmxlX2JpdCkKLQkJY2xrLT5yYXRlID0gNDgwMDAwMDA7Ci0JZWxzZQotCQljbGstPnJhdGUgPSAxMjAwMDAwMDsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY2tfcmVmID0gewotCS5uYW1lCQk9ICJja19yZWYiLAotCS5yYXRlCQk9IDEyMDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgQUxXQVlTX0VOQUJMRUQsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBja19kcGxsMSA9IHsKLQkubmFtZQkJPSAiY2tfZHBsbDEiLAotCS5wYXJlbnQJCT0gJmNrX3JlZiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY2tfZHBsbDFvdXQgPSB7Ci0JLm5hbWUJCT0gImNrX2RwbGwxb3V0IiwKLQkucGFyZW50CQk9ICZja19kcGxsMSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCi0JLmVuYWJsZV9yZWcJPSBBUk1fSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX0NLT1VUX0FSTSwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXJtX2NrID0gewotCS5uYW1lCQk9ICJhcm1fY2siLAotCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9DS0NUTCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAotCS5yYXRlX29mZnNldAk9IENLQ1RMX0FSTURJVl9PRkZTRVQsCi0JLnJlY2FsYwkJPSAmY2tjdGxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXJtcGVyX2NrID0gewotCS5uYW1lCQk9ICJhcm1wZXJfY2siLAotCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9DS0NUTCwKLQkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QyLAotCS5lbmFibGVfYml0CT0gRU5fUEVSQ0ssCi0JLnJhdGVfb2Zmc2V0CT0gQ0tDVExfUEVSRElWX09GRlNFVCwKLQkucmVjYWxjCQk9ICZja2N0bF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhcm1fZ3Bpb19jayA9IHsKLQkubmFtZQkJPSAiYXJtX2dwaW9fY2siLAotCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCwKLQkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QyLAotCS5lbmFibGVfYml0CT0gRU5fR1BJT0NLLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhcm14b3JfY2sgPSB7Ci0JLm5hbWUJCT0gImFybXhvcl9jayIsCi0JLnBhcmVudAkJPSAmY2tfcmVmLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYLAotCS5lbmFibGVfcmVnCT0gQVJNX0lETEVDVDIsCi0JLmVuYWJsZV9iaXQJPSBFTl9YT1JQQ0ssCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGFybXRpbV9jayA9IHsKLQkubmFtZQkJPSAiYXJtdGltX2NrIiwKLQkucGFyZW50CQk9ICZja19yZWYsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFgsCi0JLmVuYWJsZV9yZWcJPSBBUk1fSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX1RJTUNLLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhcm13ZHRfY2sgPSB7Ci0JLm5hbWUJCT0gImFybXdkdF9jayIsCi0JLnBhcmVudAkJPSAmY2tfcmVmLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYLAotCS5lbmFibGVfcmVnCT0gQVJNX0lETEVDVDIsCi0JLmVuYWJsZV9iaXQJPSBFTl9XRFRDSywKLQkucmVjYWxjCQk9ICZ3YXRjaGRvZ19yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhcm1pbnRoX2NrMTZ4eCA9IHsKLQkubmFtZQkJPSAiYXJtaW50aF9jayIsCi0JLnBhcmVudAkJPSAmYXJtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IEFMV0FZU19FTkFCTEVELAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLyogTm90ZTogT24gMTZ4eCB0aGUgZnJlcXVlbmN5IGNhbiBiZSBkaXZpZGVkIGJ5IDIgYnkgcHJvZ3JhbW1pbmcKLQkgKiBBUk1fQ0tDVEw6QVJNX0lOVEhDS19TRUwoMTQpIHRvIDEKLQkgKgotCSAqIDE1MTAgdmVyc2lvbiBpcyBpbiBUQyBjbG9ja3MuCi0JICovCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkc3BfY2sgPSB7Ci0JLm5hbWUJCT0gImRzcF9jayIsCi0JLnBhcmVudAkJPSAmY2tfZHBsbDEsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX0NLQ1RMLAotCS5lbmFibGVfcmVnCT0gQVJNX0NLQ1RMLAotCS5lbmFibGVfYml0CT0gRU5fRFNQQ0ssCi0JLnJhdGVfb2Zmc2V0CT0gQ0tDVExfRFNQRElWX09GRlNFVCwKLQkucmVjYWxjCQk9ICZja2N0bF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkc3BtbXVfY2sgPSB7Ci0JLm5hbWUJCT0gImRzcG1tdV9jayIsCi0JLnBhcmVudAkJPSAmY2tfZHBsbDEsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX0NLQ1RMIHwgQUxXQVlTX0VOQUJMRUQsCi0JLnJhdGVfb2Zmc2V0CT0gQ0tDVExfRFNQTU1VRElWX09GRlNFVCwKLQkucmVjYWxjCQk9ICZja2N0bF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkc3BwZXJfY2sgPSB7Ci0JLm5hbWUJCT0gImRzcHBlcl9jayIsCi0JLnBhcmVudAkJPSAmY2tfZHBsbDEsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX0NLQ1RMIHwgRFNQX0RPTUFJTl9DTE9DSyB8IFZJUlRVQUxfSU9fQUREUkVTUywKLQkuZW5hYmxlX3JlZwk9IERTUF9JRExFQ1QyLAotCS5lbmFibGVfYml0CT0gRU5fUEVSQ0ssCi0JLnJhdGVfb2Zmc2V0CT0gQ0tDVExfUEVSRElWX09GRlNFVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS8vLnJlY2FsYwkJPSAmY2tjdGxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHNweG9yX2NrID0gewotCS5uYW1lCQk9ICJkc3B4b3JfY2siLAotCS5wYXJlbnQJCT0gJmNrX3JlZiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIERTUF9ET01BSU5fQ0xPQ0sgfCBWSVJUVUFMX0lPX0FERFJFU1MsCi0JLmVuYWJsZV9yZWcJPSBEU1BfSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX1hPUlBDSywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHNwdGltX2NrID0gewotCS5uYW1lCQk9ICJkc3B0aW1fY2siLAotCS5wYXJlbnQJCT0gJmNrX3JlZiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIERTUF9ET01BSU5fQ0xPQ0sgfCBWSVJUVUFMX0lPX0FERFJFU1MsCi0JLmVuYWJsZV9yZWcJPSBEU1BfSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX0RTUFRJTUNLLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB0Y19jayA9IHsKLQkubmFtZQkJPSAidGNfY2siLAotCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwgQ0xPQ0tfSU5fT01BUDczMCB8Ci0JCQkgIFJBVEVfQ0tDVEwgfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKLQkucmF0ZV9vZmZzZXQJPSBDS0NUTF9UQ0RJVl9PRkZTRVQsCi0JLnJlY2FsYwkJPSAmY2tjdGxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXJtaW50aF9jazE1MTAgPSB7Ci0JLm5hbWUJCT0gImFybWludGhfY2siLAotCS5wYXJlbnQJCT0gJnRjX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IEFMV0FZU19FTkFCTEVELAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLyogTm90ZTogT24gMTUxMCB0aGUgZnJlcXVlbmN5IGZvbGxvd3MgVENfQ0sKLQkgKgotCSAqIDE2eHggdmVyc2lvbiBpcyBpbiBNUFUgY2xvY2tzLgotCSAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdGlwYl9jayA9IHsKLQkubmFtZQkJPSAidGlicF9jayIsCi0JLnBhcmVudAkJPSAmdGNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQUxXQVlTX0VOQUJMRUQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGwzX29jcGlfY2sgPSB7Ci0JLm5hbWUJCT0gImwzX29jcGlfY2siLAotCS5wYXJlbnQJCT0gJnRjX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCwKLQkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QzLAotCS5lbmFibGVfYml0CT0gRU5fT0NQSV9DSywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdGMxX2NrID0gewotCS5uYW1lCQk9ICJ0YzFfY2siLAotCS5wYXJlbnQJCT0gJnRjX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCwKLQkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QzLAotCS5lbmFibGVfYml0CT0gRU5fVEMxX0NLLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB0YzJfY2sgPSB7Ci0JLm5hbWUJCT0gInRjMl9jayIsCi0JLnBhcmVudAkJPSAmdGNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYLAotCS5lbmFibGVfcmVnCT0gQVJNX0lETEVDVDMsCi0JLmVuYWJsZV9iaXQJPSBFTl9UQzJfQ0ssCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRtYV9jayA9IHsKLQkubmFtZQkJPSAiZG1hX2NrIiwKLQkucGFyZW50CQk9ICZ0Y19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIEFMV0FZU19FTkFCTEVELAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkbWFfbGNkZnJlZV9jayA9IHsKLQkubmFtZQkJPSAiZG1hX2xjZGZyZWVfY2siLAotCS5wYXJlbnQJCT0gJnRjX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IEFMV0FZU19FTkFCTEVELAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhcGlfY2sgPSB7Ci0JLm5hbWUJCT0gImFwaV9jayIsCi0JLnBhcmVudAkJPSAmdGNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFgsCi0JLmVuYWJsZV9yZWcJPSBBUk1fSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX0FQSUNLLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBsYl9jayA9IHsKLQkubmFtZQkJPSAibGJfY2siLAotCS5wYXJlbnQJCT0gJnRjX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCwKLQkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QyLAotCS5lbmFibGVfYml0CT0gRU5fTEJDSywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgcmhlYTFfY2sgPSB7Ci0JLm5hbWUJCT0gInJoZWExX2NrIiwKLQkucGFyZW50CQk9ICZ0Y19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfCBBTFdBWVNfRU5BQkxFRCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgcmhlYTJfY2sgPSB7Ci0JLm5hbWUJCT0gInJoZWEyX2NrIiwKLQkucGFyZW50CQk9ICZ0Y19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfCBBTFdBWVNfRU5BQkxFRCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbGNkX2NrID0gewotCS5uYW1lCQk9ICJsY2RfY2siLAotCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwgQ0xPQ0tfSU5fT01BUDczMCB8Ci0JCQkgIFJBVEVfQ0tDVEwsCi0JLmVuYWJsZV9yZWcJPSBBUk1fSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX0xDRENLLAotCS5yYXRlX29mZnNldAk9IENLQ1RMX0xDRERJVl9PRkZTRVQsCi0JLnJlY2FsYwkJPSAmY2tjdGxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfMTUxMCA9IHsKLQkubmFtZQkJPSAidWFydDFfY2siLAotCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwotCS5yYXRlCQk9IDEyMDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IEVOQUJMRV9SRUdfMzJCSVQgfCBBTFdBWVNfRU5BQkxFRCwKLQkuZW5hYmxlX3JlZwk9IE1PRF9DT05GX0NUUkxfMCwKLQkuZW5hYmxlX2JpdAk9IDI5LAkvKiBDaG9vc2VzIGJldHdlZW4gMTJNSHogYW5kIDQ4TUh6ICovCi0JLnNldF9yYXRlCT0gJnNldF91YXJ0X3JhdGUsCi0JLnJlY2FsYwkJPSAmdWFydF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1YXJ0MV8xNnh4ID0gewotCS5uYW1lCQk9ICJ1YXJ0MV9jayIsCi0JLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCi0JLnJhdGUJCT0gNDgwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCi0JLmVuYWJsZV9yZWcJPSBNT0RfQ09ORl9DVFJMXzAsCi0JLmVuYWJsZV9iaXQJPSAyOSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2NrID0gewotCS5uYW1lCQk9ICJ1YXJ0Ml9jayIsCi0JLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCi0JLnJhdGUJCT0gMTIwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfCBFTkFCTEVfUkVHXzMyQklUIHwKLQkJCSAgQUxXQVlTX0VOQUJMRUQsCi0JLmVuYWJsZV9yZWcJPSBNT0RfQ09ORl9DVFJMXzAsCi0JLmVuYWJsZV9iaXQJPSAzMCwJLyogQ2hvb3NlcyBiZXR3ZWVuIDEyTUh6IGFuZCA0OE1IeiAqLwotCS5zZXRfcmF0ZQk9ICZzZXRfdWFydF9yYXRlLAotCS5yZWNhbGMJCT0gJnVhcnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfMTUxMCA9IHsKLQkubmFtZQkJPSAidWFydDNfY2siLAotCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwotCS5yYXRlCQk9IDEyMDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IEVOQUJMRV9SRUdfMzJCSVQgfCBBTFdBWVNfRU5BQkxFRCwKLQkuZW5hYmxlX3JlZwk9IE1PRF9DT05GX0NUUkxfMCwKLQkuZW5hYmxlX2JpdAk9IDMxLAkvKiBDaG9vc2VzIGJldHdlZW4gMTJNSHogYW5kIDQ4TUh6ICovCi0JLnNldF9yYXRlCT0gJnNldF91YXJ0X3JhdGUsCi0JLnJlY2FsYwkJPSAmdWFydF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1YXJ0M18xNnh4ID0gewotCS5uYW1lCQk9ICJ1YXJ0M19jayIsCi0JLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCi0JLnJhdGUJCT0gNDgwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCi0JLmVuYWJsZV9yZWcJPSBNT0RfQ09ORl9DVFJMXzAsCi0JLmVuYWJsZV9iaXQJPSAzMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9jbGtvID0gewkvKiA2IE1IeiBvdXRwdXQgb24gVzRfVVNCX0NMS08gKi8KLQkubmFtZQkJPSAidXNiX2Nsa28iLAotCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwotCS5yYXRlCQk9IDYwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKLQkuZW5hYmxlX3JlZwk9IFVMUERfQ0xPQ0tfQ1RSTCwKLQkuZW5hYmxlX2JpdAk9IFVTQl9NQ0xLX0VOX0JJVCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9oaGNfY2sxNTEwID0gewotCS5uYW1lCQk9ICJ1c2JfaGhjX2NrIiwKLQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KLQkucmF0ZQkJPSA0ODAwMDAwMCwgLyogQWN0dWFsbHkgMiBjbG9ja3MsIDEyTUh6IGFuZCA0OE1IeiAqLwotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8Ci0JCQkgIFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAotCS5lbmFibGVfcmVnCT0gTU9EX0NPTkZfQ1RSTF8wLAotCS5lbmFibGVfYml0CT0gVVNCX0hPU1RfSEhDX1VIT1NUX0VOLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNiX2hoY19jazE2eHggPSB7Ci0JLm5hbWUJCT0gInVzYl9oaGNfY2siLAotCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwotCS5yYXRlCQk9IDQ4MDAwMDAwLAotCS8qIE9UR19TWVNDT05fMi5PVEdfUEFERU4gPT0gMCAobm90IDE1MTAtY29tcGF0aWJsZSkgKi8KLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKLQkuZW5hYmxlX3JlZwk9IE9UR19CQVNFICsgMHgwOCAvKiBPVEdfU1lTQ09OXzIgKi8sCi0JLmVuYWJsZV9iaXQJPSA4IC8qIFVIT1NUX0VOICovLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNiX2RjX2NrID0gewotCS5uYW1lCQk9ICJ1c2JfZGNfY2siLAotCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwotCS5yYXRlCQk9IDQ4MDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IFJBVEVfRklYRUQsCi0JLmVuYWJsZV9yZWcJPSBTT0ZUX1JFUV9SRUcsCi0JLmVuYWJsZV9iaXQJPSA0LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNsa18xNTEwID0gewotCS5uYW1lCQk9ICJtY2xrIiwKLQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KLQkucmF0ZQkJPSAxMjAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBSQVRFX0ZJWEVELAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNsa18xNnh4ID0gewotCS5uYW1lCQk9ICJtY2xrIiwKLQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCi0JLmVuYWJsZV9yZWcJPSBDT01fQ0xLX0RJVl9DVFJMX1NFTCwKLQkuZW5hYmxlX2JpdAk9IENPTV9VTFBEX1BMTF9DTEtfUkVRLAotCS5zZXRfcmF0ZQk9ICZzZXRfZXh0X2Nsa19yYXRlLAotCS5yb3VuZF9yYXRlCT0gJnJvdW5kX2V4dF9jbGtfcmF0ZSwKLQkuaW5pdAkJPSAmaW5pdF9leHRfY2xrLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYmNsa18xNTEwID0gewotCS5uYW1lCQk9ICJiY2xrIiwKLQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KLQkucmF0ZQkJPSAxMjAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBSQVRFX0ZJWEVELAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYmNsa18xNnh4ID0gewotCS5uYW1lCQk9ICJiY2xrIiwKLQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCi0JLmVuYWJsZV9yZWcJPSBTV0RfQ0xLX0RJVl9DVFJMX1NFTCwKLQkuZW5hYmxlX2JpdAk9IFNXRF9VTFBEX1BMTF9DTEtfUkVRLAotCS5zZXRfcmF0ZQk9ICZzZXRfZXh0X2Nsa19yYXRlLAotCS5yb3VuZF9yYXRlCT0gJnJvdW5kX2V4dF9jbGtfcmF0ZSwKLQkuaW5pdAkJPSAmaW5pdF9leHRfY2xrLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jMV9jayA9IHsKLQkubmFtZQkJPSAibW1jMV9jayIsCi0JLyogRnVuY3Rpb25hbCBjbG9jayBpcyBkaXJlY3QgZnJvbSBVTFBELCBpbnRlcmZhY2UgY2xvY2sgaXMgQVJNUEVSICovCi0JLnBhcmVudAkJPSAmYXJtcGVyX2NrLAotCS5yYXRlCQk9IDQ4MDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCi0JLmVuYWJsZV9yZWcJPSBNT0RfQ09ORl9DVFJMXzAsCi0JLmVuYWJsZV9iaXQJPSAyMywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tYzJfY2sgPSB7Ci0JLm5hbWUJCT0gIm1tYzJfY2siLAotCS8qIEZ1bmN0aW9uYWwgY2xvY2sgaXMgZGlyZWN0IGZyb20gVUxQRCwgaW50ZXJmYWNlIGNsb2NrIGlzIEFSTVBFUiAqLwotCS5wYXJlbnQJCT0gJmFybXBlcl9jaywKLQkucmF0ZQkJPSA0ODAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKLQkuZW5hYmxlX3JlZwk9IE1PRF9DT05GX0NUUkxfMCwKLQkuZW5hYmxlX2JpdAk9IDIwLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdmlydHVhbF9ja19tcHUgPSB7Ci0JLm5hbWUJCT0gIm1wdSIsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBWSVJUVUFMX0NMT0NLIHwgQUxXQVlTX0VOQUJMRUQsCi0JLnBhcmVudAkJPSAmYXJtX2NrLCAvKiBJcyBzbWFydGVyIGFsaWFzIGZvciAqLwotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLnNldF9yYXRlCT0gJnNlbGVjdF90YWJsZV9yYXRlLAotCS5yb3VuZF9yYXRlCT0gJnJvdW5kX3RvX3RhYmxlX3JhdGUsCi19OwotCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrICogIG9uY2hpcF9jbGtzW10gPSB7Ci0JLyogbm9uLVVMUEQgY2xvY2tzICovCi0JJmNrX3JlZiwKLQkmY2tfZHBsbDEsCi0JLyogQ0tfR0VOMSBjbG9ja3MgKi8KLQkmY2tfZHBsbDFvdXQsCi0JJmFybV9jaywKLQkmYXJtcGVyX2NrLAotCSZhcm1fZ3Bpb19jaywKLQkmYXJteG9yX2NrLAotCSZhcm10aW1fY2ssCi0JJmFybXdkdF9jaywKLQkmYXJtaW50aF9jazE1MTAsICAmYXJtaW50aF9jazE2eHgsCi0JLyogQ0tfR0VOMiBjbG9ja3MgKi8KLQkmZHNwX2NrLAotCSZkc3BtbXVfY2ssCi0JJmRzcHBlcl9jaywKLQkmZHNweG9yX2NrLAotCSZkc3B0aW1fY2ssCi0JLyogQ0tfR0VOMyBjbG9ja3MgKi8KLQkmdGNfY2ssCi0JJnRpcGJfY2ssCi0JJmwzX29jcGlfY2ssCi0JJnRjMV9jaywKLQkmdGMyX2NrLAotCSZkbWFfY2ssCi0JJmRtYV9sY2RmcmVlX2NrLAotCSZhcGlfY2ssCi0JJmxiX2NrLAotCSZyaGVhMV9jaywKLQkmcmhlYTJfY2ssCi0JJmxjZF9jaywKLQkvKiBVTFBEIGNsb2NrcyAqLwotCSZ1YXJ0MV8xNTEwLAotCSZ1YXJ0MV8xNnh4LAotCSZ1YXJ0Ml9jaywKLQkmdWFydDNfMTUxMCwKLQkmdWFydDNfMTZ4eCwKLQkmdXNiX2Nsa28sCi0JJnVzYl9oaGNfY2sxNTEwLCAmdXNiX2hoY19jazE2eHgsCi0JJnVzYl9kY19jaywKLQkmbWNsa18xNTEwLCAgJm1jbGtfMTZ4eCwKLQkmYmNsa18xNTEwLCAgJmJjbGtfMTZ4eCwKLQkmbW1jMV9jaywKLQkmbW1jMl9jaywKLQkvKiBWaXJ0dWFsIGNsb2NrcyAqLwotCSZ2aXJ0dWFsX2NrX21wdSwKLX07Ci0KLXN0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKK3N0cnVjdCBjbGsgKiBjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCiB7CiAJc3RydWN0IGNsayAqcCwgKmNsayA9IEVSUl9QVFIoLUVOT0VOVCk7CiAKQEAgLTU5MCw2ICs1Myw4OSBAQAogfQogRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKIAoraW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisJaWYgKGNsay0+ZW5hYmxlKQorCQlyZXQgPSBjbGstPmVuYWJsZShjbGspOworCWVsc2UgaWYgKGFyY2hfY2xvY2stPmNsa19lbmFibGUpCisJCXJldCA9IGFyY2hfY2xvY2stPmNsa19lbmFibGUoY2xrKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGVuYWJsZSBjbG9jayAlc1xuIiwgY2xrLT5uYW1lKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19lbmFibGUpOworCit2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCWlmIChjbGstPmRpc2FibGUpCisJCWNsay0+ZGlzYWJsZShjbGspOworCWVsc2UgaWYgKGFyY2hfY2xvY2stPmNsa19kaXNhYmxlKQorCQlhcmNoX2Nsb2NrLT5jbGtfZGlzYWJsZShjbGspOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZGlzYWJsZSBjbG9jayAlc1xuIiwgY2xrLT5uYW1lKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2Rpc2FibGUpOworCitpbnQgY2xrX3VzZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwlpZiAoYXJjaF9jbG9jay0+Y2xrX3VzZSkKKwkJcmV0ID0gYXJjaF9jbG9jay0+Y2xrX3VzZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3VzZSk7CisKK3ZvaWQgY2xrX3VudXNlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCWlmIChhcmNoX2Nsb2NrLT5jbGtfdW51c2UpCisJCWFyY2hfY2xvY2stPmNsa191bnVzZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChjbGtfdW51c2UpOworCitpbnQgY2xrX2dldF91c2Vjb3VudChzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwlyZXQgPSBjbGstPnVzZWNvdW50OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldF91c2Vjb3VudCk7CisKK3Vuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgcmV0ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwlyZXQgPSBjbGstPnJhdGU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOwogCiB2b2lkIGNsa19wdXQoc3RydWN0IGNsayAqY2xrKQogewpAQCAtNTk4LDUyNiArMTQ0LDEwOSBAQAogfQogRVhQT1JUX1NZTUJPTChjbGtfcHV0KTsKIAotCi1pbnQgX19jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlfX3UxNiByZWd2YWwxNjsKLQlfX3UzMiByZWd2YWwzMjsKLQotCWlmIChjbGstPmZsYWdzICYgQUxXQVlTX0VOQUJMRUQpCi0JCXJldHVybiAwOwotCi0JaWYgKHVubGlrZWx5KGNsay0+ZW5hYmxlX3JlZyA9PSAwKSkgewotCQlwcmludGsoS0VSTl9FUlIgImNsb2NrLmM6IEVuYWJsZSBmb3IgJXMgd2l0aG91dCBlbmFibGUgY29kZVxuIiwKLQkJICAgICAgIGNsay0+bmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChjbGstPmZsYWdzICYgRFNQX0RPTUFJTl9DTE9DSykgewotCQlfX2Nsa191c2UoJmFwaV9jayk7Ci0JfQotCi0JaWYgKGNsay0+ZmxhZ3MgJiBFTkFCTEVfUkVHXzMyQklUKSB7Ci0JCWlmIChjbGstPmZsYWdzICYgVklSVFVBTF9JT19BRERSRVNTKSB7Ci0JCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JCQlyZWd2YWwzMiB8PSAoMSA8PCBjbGstPmVuYWJsZV9iaXQpOwotCQkJX19yYXdfd3JpdGVsKHJlZ3ZhbDMyLCBjbGstPmVuYWJsZV9yZWcpOwotCQl9IGVsc2UgewotCQkJcmVndmFsMzIgPSBvbWFwX3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JCQlyZWd2YWwzMiB8PSAoMSA8PCBjbGstPmVuYWJsZV9iaXQpOwotCQkJb21hcF93cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoY2xrLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykgewotCQkJcmVndmFsMTYgPSBfX3Jhd19yZWFkdyhjbGstPmVuYWJsZV9yZWcpOwotCQkJcmVndmFsMTYgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQkJCV9fcmF3X3dyaXRldyhyZWd2YWwxNiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfSBlbHNlIHsKLQkJCXJlZ3ZhbDE2ID0gb21hcF9yZWFkdyhjbGstPmVuYWJsZV9yZWcpOwotCQkJcmVndmFsMTYgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQkJCW9tYXBfd3JpdGV3KHJlZ3ZhbDE2LCBjbGstPmVuYWJsZV9yZWcpOwotCQl9Ci0JfQotCi0JaWYgKGNsay0+ZmxhZ3MgJiBEU1BfRE9NQUlOX0NMT0NLKSB7Ci0JCV9fY2xrX3VudXNlKCZhcGlfY2spOwotCX0KLQotCXJldHVybiAwOwotfQotCi0KLXZvaWQgX19jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JX191MTYgcmVndmFsMTY7Ci0JX191MzIgcmVndmFsMzI7Ci0KLQlpZiAoY2xrLT5lbmFibGVfcmVnID09IDApCi0JCXJldHVybjsKLQotCWlmIChjbGstPmZsYWdzICYgRFNQX0RPTUFJTl9DTE9DSykgewotCQlfX2Nsa191c2UoJmFwaV9jayk7Ci0JfQotCi0JaWYgKGNsay0+ZmxhZ3MgJiBFTkFCTEVfUkVHXzMyQklUKSB7Ci0JCWlmIChjbGstPmZsYWdzICYgVklSVFVBTF9JT19BRERSRVNTKSB7Ci0JCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JCQlyZWd2YWwzMiAmPSB+KDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQkJCV9fcmF3X3dyaXRlbChyZWd2YWwzMiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfSBlbHNlIHsKLQkJCXJlZ3ZhbDMyID0gb21hcF9yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCQkJcmVndmFsMzIgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7Ci0JCQlvbWFwX3dyaXRlbChyZWd2YWwzMiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChjbGstPmZsYWdzICYgVklSVFVBTF9JT19BRERSRVNTKSB7Ci0JCQlyZWd2YWwxNiA9IF9fcmF3X3JlYWR3KGNsay0+ZW5hYmxlX3JlZyk7Ci0JCQlyZWd2YWwxNiAmPSB+KDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQkJCV9fcmF3X3dyaXRldyhyZWd2YWwxNiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfSBlbHNlIHsKLQkJCXJlZ3ZhbDE2ID0gb21hcF9yZWFkdyhjbGstPmVuYWJsZV9yZWcpOwotCQkJcmVndmFsMTYgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7Ci0JCQlvbWFwX3dyaXRldyhyZWd2YWwxNiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfQotCX0KLQotCWlmIChjbGstPmZsYWdzICYgRFNQX0RPTUFJTl9DTE9DSykgewotCQlfX2Nsa191bnVzZSgmYXBpX2NrKTsKLQl9Ci19Ci0KLQotdm9pZCBfX2Nsa191bnVzZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JaWYgKGNsay0+dXNlY291bnQgPiAwICYmICEoLS1jbGstPnVzZWNvdW50KSkgewotCQlfX2Nsa19kaXNhYmxlKGNsayk7Ci0JCWlmIChsaWtlbHkoY2xrLT5wYXJlbnQpKQotCQkJX19jbGtfdW51c2UoY2xrLT5wYXJlbnQpOwotCX0KLX0KLQotCi1pbnQgX19jbGtfdXNlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpbnQgcmV0ID0gMDsKLQlpZiAoY2xrLT51c2Vjb3VudCsrID09IDApIHsKLQkJaWYgKGxpa2VseShjbGstPnBhcmVudCkpCi0JCQlyZXQgPSBfX2Nsa191c2UoY2xrLT5wYXJlbnQpOwotCi0JCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKLQkJCWNsay0+dXNlY291bnQtLTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQlyZXQgPSBfX2Nsa19lbmFibGUoY2xrKTsKLQotCQlpZiAodW5saWtlbHkocmV0ICE9IDApICYmIGNsay0+cGFyZW50KSB7Ci0JCQlfX2Nsa191bnVzZShjbGstPnBhcmVudCk7Ci0JCQljbGstPnVzZWNvdW50LS07Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0KLWludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci0JcmV0ID0gX19jbGtfZW5hYmxlKGNsayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7Ci0KLQotdm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQlfX2Nsa19kaXNhYmxlKGNsayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKLQotCi1pbnQgY2xrX3VzZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQlyZXQgPSBfX2Nsa191c2UoY2xrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChjbGtfdXNlKTsKLQotCi12b2lkIGNsa191bnVzZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQlfX2Nsa191bnVzZShjbGspOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTChjbGtfdW51c2UpOwotCi0KLWludCBjbGtfZ2V0X3VzZWNvdW50KHN0cnVjdCBjbGsgKmNsaykKLXsKLSAgICAgICAgcmV0dXJuIGNsay0+dXNlY291bnQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19nZXRfdXNlY291bnQpOwotCi0KLXVuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gY2xrLT5yYXRlOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOwotCi0KLXN0YXRpYyBfX3UxNiB2ZXJpZnlfY2tjdGxfdmFsdWUoX191MTYgbmV3dmFsKQotewotCS8qIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGZvciBmb2xsb3dpbmcgbGltaXRhdGlvbnMgc2V0Ci0JICogYnkgdGhlIGhhcmR3YXJlIChhbGwgY29uZGl0aW9ucyBtdXN0IGJlIHRydWUpOgotCSAqIERTUE1NVV9DSyA9PSBEU1BfQ0sgIG9yICBEU1BNTVVfQ0sgPT0gRFNQX0NLLzIKLQkgKiBBUk1fQ0sgPj0gVENfQ0sKLQkgKiBEU1BfQ0sgPj0gVENfQ0sKLQkgKiBEU1BNTVVfQ0sgPj0gVENfQ0sKLQkgKgotCSAqIEluIGFkZGl0aW9uIGZvbGxvd2luZyBydWxlcyBhcmUgZW5mb3JjZWQ6Ci0JICogTENEX0NLIDw9IFRDX0NLCi0JICogQVJNUEVSX0NLIDw9IFRDX0NLCi0JICoKLQkgKiBIb3dldmVyLCBtYXhpbXVtIGZyZXF1ZW5jaWVzIGFyZSBub3QgY2hlY2tlZCBmb3IhCi0JICovCi0JX191OCBwZXJfZXhwOwotCV9fdTggbGNkX2V4cDsKLQlfX3U4IGFybV9leHA7Ci0JX191OCBkc3BfZXhwOwotCV9fdTggdGNfZXhwOwotCV9fdTggZHNwbW11X2V4cDsKLQotCXBlcl9leHAgPSAobmV3dmFsID4+IENLQ1RMX1BFUkRJVl9PRkZTRVQpICYgMzsKLQlsY2RfZXhwID0gKG5ld3ZhbCA+PiBDS0NUTF9MQ0RESVZfT0ZGU0VUKSAmIDM7Ci0JYXJtX2V4cCA9IChuZXd2YWwgPj4gQ0tDVExfQVJNRElWX09GRlNFVCkgJiAzOwotCWRzcF9leHAgPSAobmV3dmFsID4+IENLQ1RMX0RTUERJVl9PRkZTRVQpICYgMzsKLQl0Y19leHAgPSAobmV3dmFsID4+IENLQ1RMX1RDRElWX09GRlNFVCkgJiAzOwotCWRzcG1tdV9leHAgPSAobmV3dmFsID4+IENLQ1RMX0RTUE1NVURJVl9PRkZTRVQpICYgMzsKLQotCWlmIChkc3BtbXVfZXhwIDwgZHNwX2V4cCkKLQkJZHNwbW11X2V4cCA9IGRzcF9leHA7Ci0JaWYgKGRzcG1tdV9leHAgPiBkc3BfZXhwKzEpCi0JCWRzcG1tdV9leHAgPSBkc3BfZXhwKzE7Ci0JaWYgKHRjX2V4cCA8IGFybV9leHApCi0JCXRjX2V4cCA9IGFybV9leHA7Ci0JaWYgKHRjX2V4cCA8IGRzcG1tdV9leHApCi0JCXRjX2V4cCA9IGRzcG1tdV9leHA7Ci0JaWYgKHRjX2V4cCA+IGxjZF9leHApCi0JCWxjZF9leHAgPSB0Y19leHA7Ci0JaWYgKHRjX2V4cCA+IHBlcl9leHApCi0JCXBlcl9leHAgPSB0Y19leHA7Ci0KLQluZXd2YWwgJj0gMHhmMDAwOwotCW5ld3ZhbCB8PSBwZXJfZXhwIDw8IENLQ1RMX1BFUkRJVl9PRkZTRVQ7Ci0JbmV3dmFsIHw9IGxjZF9leHAgPDwgQ0tDVExfTENERElWX09GRlNFVDsKLQluZXd2YWwgfD0gYXJtX2V4cCA8PCBDS0NUTF9BUk1ESVZfT0ZGU0VUOwotCW5ld3ZhbCB8PSBkc3BfZXhwIDw8IENLQ1RMX0RTUERJVl9PRkZTRVQ7Ci0JbmV3dmFsIHw9IHRjX2V4cCA8PCBDS0NUTF9UQ0RJVl9PRkZTRVQ7Ci0JbmV3dmFsIHw9IGRzcG1tdV9leHAgPDwgQ0tDVExfRFNQTU1VRElWX09GRlNFVDsKLQotCXJldHVybiBuZXd2YWw7Ci19Ci0KLQotc3RhdGljIGludCBjYWxjX2Rzb3JfZXhwKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCS8qIE5vdGU6IElmIHRhcmdldCBmcmVxdWVuY3kgaXMgdG9vIGxvdywgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiA0LAotCSAqIHdoaWNoIGlzIGludmFsaWQgdmFsdWUuIENhbGxlciBtdXN0IGNoZWNrIGZvciB0aGlzIHZhbHVlIGFuZCBhY3QKLQkgKiBhY2NvcmRpbmdseS4KLQkgKgotCSAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgZm9yIGZvbGxvd2luZyBsaW1pdGF0aW9ucyBzZXQKLQkgKiBieSB0aGUgaGFyZHdhcmUgKGFsbCBjb25kaXRpb25zIG11c3QgYmUgdHJ1ZSk6Ci0JICogRFNQTU1VX0NLID09IERTUF9DSyAgb3IgIERTUE1NVV9DSyA9PSBEU1BfQ0svMgotCSAqIEFSTV9DSyA+PSBUQ19DSwotCSAqIERTUF9DSyA+PSBUQ19DSwotCSAqIERTUE1NVV9DSyA+PSBUQ19DSwotCSAqLwotCXVuc2lnbmVkIGxvbmcgcmVhbHJhdGU7Ci0Jc3RydWN0IGNsayAqICBwYXJlbnQ7Ci0JdW5zaWduZWQgIGRzb3JfZXhwOwotCi0JaWYgKHVubGlrZWx5KCEoY2xrLT5mbGFncyAmIFJBVEVfQ0tDVEwpKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwYXJlbnQgPSBjbGstPnBhcmVudDsKLQlpZiAodW5saWtlbHkocGFyZW50ID09IDApKQotCQlyZXR1cm4gLUVJTzsKLQotCXJlYWxyYXRlID0gcGFyZW50LT5yYXRlOwotCWZvciAoZHNvcl9leHA9MDsgZHNvcl9leHA8NDsgZHNvcl9leHArKykgewotCQlpZiAocmVhbHJhdGUgPD0gcmF0ZSkKLQkJCWJyZWFrOwotCi0JCXJlYWxyYXRlIC89IDI7Ci0JfQotCi0JcmV0dXJuIGRzb3JfZXhwOwotfQotCi0KLXN0YXRpYyB2b2lkIGNrY3RsX3JlY2FsYyhzdHJ1Y3QgY2xrICogIGNsaykKLXsKLQlpbnQgZHNvcjsKLQotCS8qIENhbGN1bGF0ZSBkaXZpc29yIGVuY29kZWQgYXMgMi1iaXQgZXhwb25lbnQgKi8KLQlpZiAoY2xrLT5mbGFncyAmIERTUF9ET01BSU5fQ0xPQ0spIHsKLQkJLyogVGhlIGNsb2NrIGNvbnRyb2wgYml0cyBhcmUgaW4gRFNQIGRvbWFpbiwKLQkJICogc28gYXBpX2NrIGlzIG5lZWRlZCBmb3IgYWNjZXNzLgotCQkgKiBOb3RlIHRoYXQgRFNQX0NLQ1RMIHZpcnQgYWRkciA9IHBoeXMgYWRkciwgc28KLQkJICogd2UgbXVzdCB1c2UgX19yYXdfcmVhZHcoKSBpbnN0ZWFkIG9mIG9tYXBfcmVhZHcoKS4KLQkJICovCi0JCV9fY2xrX3VzZSgmYXBpX2NrKTsKLQkJZHNvciA9IDEgPDwgKDMgJiAoX19yYXdfcmVhZHcoRFNQX0NLQ1RMKSA+PiBjbGstPnJhdGVfb2Zmc2V0KSk7Ci0JCV9fY2xrX3VudXNlKCZhcGlfY2spOwotCX0gZWxzZSB7Ci0JCWRzb3IgPSAxIDw8ICgzICYgKG9tYXBfcmVhZHcoQVJNX0NLQ1RMKSA+PiBjbGstPnJhdGVfb2Zmc2V0KSk7Ci0JfQotCWlmICh1bmxpa2VseShjbGstPnJhdGUgPT0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkc29yKSkKLQkJcmV0dXJuOyAvKiBObyBjaGFuZ2UsIHF1aWNrIGV4aXQgKi8KLQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGRzb3I7Ci0KLQlpZiAodW5saWtlbHkoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpCi0JCXByb3BhZ2F0ZV9yYXRlKGNsayk7Ci19Ci0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogT3B0aW9uYWwgY2xvY2sgZnVuY3Rpb25zIGRlZmluZWQgaW4gYXNtL2hhcmR3YXJlL2Nsb2NrLmgKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIGxvbmcgY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7Ci0JaW50IGRzb3JfZXhwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbG9uZyByZXQgPSAwOwogCi0JaWYgKGNsay0+ZmxhZ3MgJiBSQVRFX0ZJWEVEKQotCQlyZXR1cm4gY2xrLT5yYXRlOworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwlpZiAoYXJjaF9jbG9jay0+Y2xrX3JvdW5kX3JhdGUpCisJCXJldCA9IGFyY2hfY2xvY2stPmNsa19yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CiAKLQlpZiAoY2xrLT5mbGFncyAmIFJBVEVfQ0tDVEwpIHsKLQkJZHNvcl9leHAgPSBjYWxjX2Rzb3JfZXhwKGNsaywgcmF0ZSk7Ci0JCWlmIChkc29yX2V4cCA8IDApCi0JCQlyZXR1cm4gZHNvcl9leHA7Ci0JCWlmIChkc29yX2V4cCA+IDMpCi0JCQlkc29yX2V4cCA9IDM7Ci0JCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvICgxIDw8IGRzb3JfZXhwKTsKLQl9Ci0KLQlpZihjbGstPnJvdW5kX3JhdGUgIT0gMCkKLQkJcmV0dXJuIGNsay0+cm91bmRfcmF0ZShjbGssIHJhdGUpOwotCi0JcmV0dXJuIGNsay0+cmF0ZTsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChjbGtfcm91bmRfcmF0ZSk7CiAKLQotc3RhdGljIHZvaWQgcHJvcGFnYXRlX3JhdGUoc3RydWN0IGNsayAqICBjbGspCi17Ci0Jc3RydWN0IGNsayAqKiAgY2xrcDsKLQotCWZvciAoY2xrcCA9IG9uY2hpcF9jbGtzOyBjbGtwIDwgb25jaGlwX2Nsa3MrQVJSQVlfU0laRShvbmNoaXBfY2xrcyk7IGNsa3ArKykgewotCQlpZiAobGlrZWx5KCgqY2xrcCktPnBhcmVudCAhPSBjbGspKSBjb250aW51ZTsKLQkJaWYgKGxpa2VseSgoKmNsa3ApLT5yZWNhbGMpKQotCQkJKCpjbGtwKS0+cmVjYWxjKCpjbGtwKTsKLQl9Ci19Ci0KLQotc3RhdGljIGludCBzZWxlY3RfdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICogIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCS8qIEZpbmQgdGhlIGhpZ2hlc3Qgc3VwcG9ydGVkIGZyZXF1ZW5jeSA8PSByYXRlIGFuZCBzd2l0Y2ggdG8gaXQgKi8KLQlzdHJ1Y3QgbXB1X3JhdGUgKiAgcHRyOwotCi0JaWYgKGNsayAhPSAmdmlydHVhbF9ja19tcHUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZm9yIChwdHIgPSByYXRlX3RhYmxlOyBwdHItPnJhdGU7IHB0cisrKSB7Ci0JCWlmIChwdHItPnh0YWwgIT0gY2tfcmVmLnJhdGUpCi0JCQljb250aW51ZTsKLQotCQkvKiBEUExMMSBjYW5ub3QgYmUgcmVwcm9ncmFtbWVkIHdpdGhvdXQgcmlza2luZyBzeXN0ZW0gY3Jhc2ggKi8KLQkJaWYgKGxpa2VseShja19kcGxsMS5yYXRlIT0wKSAmJiBwdHItPnBsbF9yYXRlICE9IGNrX2RwbGwxLnJhdGUpCi0JCQljb250aW51ZTsKLQotCQkvKiBDYW4gY2hlY2sgb25seSBhZnRlciB4dGFsIGZyZXF1ZW5jeSBjaGVjayAqLwotCQlpZiAocHRyLT5yYXRlIDw9IHJhdGUpCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAoIXB0ci0+cmF0ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKgotCSAqIEluIG1vc3QgY2FzZXMgd2Ugc2hvdWxkIG5vdCBuZWVkIHRvIHJlcHJvZ3JhbSBEUExMLgotCSAqIFJlcHJvZ3JhbW1pbmcgdGhlIERQTEwgaXMgdHJpY2t5LCBpdCBtdXN0IGJlIGRvbmUgZnJvbSBTUkFNLgotCSAqLwotCW9tYXBfc3JhbV9yZXByb2dyYW1fY2xvY2socHRyLT5kcGxsY3RsX3ZhbCwgcHRyLT5ja2N0bF92YWwpOwotCi0JY2tfZHBsbDEucmF0ZSA9IHB0ci0+cGxsX3JhdGU7Ci0JcHJvcGFnYXRlX3JhdGUoJmNrX2RwbGwxKTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgbG9uZyByb3VuZF90b190YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiAgY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JLyogRmluZCB0aGUgaGlnaGVzdCBzdXBwb3J0ZWQgZnJlcXVlbmN5IDw9IHJhdGUgKi8KLQlzdHJ1Y3QgbXB1X3JhdGUgKiAgcHRyOwotCWxvbmcgIGhpZ2hlc3RfcmF0ZTsKLQotCWlmIChjbGsgIT0gJnZpcnR1YWxfY2tfbXB1KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWhpZ2hlc3RfcmF0ZSA9IC1FSU5WQUw7Ci0KLQlmb3IgKHB0ciA9IHJhdGVfdGFibGU7IHB0ci0+cmF0ZTsgcHRyKyspIHsKLQkJaWYgKHB0ci0+eHRhbCAhPSBja19yZWYucmF0ZSkKLQkJCWNvbnRpbnVlOwotCi0JCWhpZ2hlc3RfcmF0ZSA9IHB0ci0+cmF0ZTsKLQotCQkvKiBDYW4gY2hlY2sgb25seSBhZnRlciB4dGFsIGZyZXF1ZW5jeSBjaGVjayAqLwotCQlpZiAocHRyLT5yYXRlIDw9IHJhdGUpCi0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gaGlnaGVzdF9yYXRlOwotfQotCi0KIGludCBjbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7Ci0JaW50ICByZXQgPSAtRUlOVkFMOwotCWludCAgZHNvcl9leHA7Ci0JX191MTYgIHJlZ3ZhbDsKLQl1bnNpZ25lZCBsb25nICBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOwogCi0JaWYgKGNsay0+ZmxhZ3MgJiBSQVRFX0NLQ1RMKSB7Ci0JCWRzb3JfZXhwID0gY2FsY19kc29yX2V4cChjbGssIHJhdGUpOwotCQlpZiAoZHNvcl9leHAgPiAzKQotCQkJZHNvcl9leHAgPSAtRUlOVkFMOwotCQlpZiAoZHNvcl9leHAgPCAwKQotCQkJcmV0dXJuIGRzb3JfZXhwOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQkJcmVndmFsID0gb21hcF9yZWFkdyhBUk1fQ0tDVEwpOwotCQlyZWd2YWwgJj0gfigzIDw8IGNsay0+cmF0ZV9vZmZzZXQpOwotCQlyZWd2YWwgfD0gZHNvcl9leHAgPDwgY2xrLT5yYXRlX29mZnNldDsKLQkJcmVndmFsID0gdmVyaWZ5X2NrY3RsX3ZhbHVlKHJlZ3ZhbCk7Ci0JCW9tYXBfd3JpdGV3KHJlZ3ZhbCwgQVJNX0NLQ1RMKTsKLQkJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyAoMSA8PCBkc29yX2V4cCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotCQlyZXQgPSAwOwotCX0gZWxzZSBpZihjbGstPnNldF9yYXRlICE9IDApIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotCQlyZXQgPSBjbGstPnNldF9yYXRlKGNsaywgcmF0ZSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotCX0KLQotCWlmICh1bmxpa2VseShyZXQgPT0gMCAmJiAoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpKQotCQlwcm9wYWdhdGVfcmF0ZShjbGspOworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwlpZiAoYXJjaF9jbG9jay0+Y2xrX3NldF9yYXRlKQorCQlyZXQgPSBhcmNoX2Nsb2NrLT5jbGtfc2V0X3JhdGUoY2xrLCByYXRlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGNsa19zZXRfcmF0ZSk7CiAKLQotc3RhdGljIHVuc2lnbmVkIGNhbGNfZXh0X2Rzb3IodW5zaWduZWQgbG9uZyByYXRlKQoraW50IGNsa19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQogewotCXVuc2lnbmVkIGRzb3I7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKIAotCS8qIE1DTEsgYW5kIEJDTEsgZGl2aXNvciBzZWxlY3Rpb24gaXMgbm90IGxpbmVhcjoKLQkgKiBmcmVxID0gOTZNSHogLyBkc29yCi0JICoKLQkgKiBSQVRJT19TRUwgcmFuZ2U6IGRzb3IgPC0+IFJBVElPX1NFTAotCSAqIDAuLjY6IChSQVRJT19TRUwrMikgPC0+IChkc29yLTIpCi0JICogNi4uNDg6ICAoOCsoUkFUSU9fU0VMLTYpKjIpIDwtPiAoKGRzb3ItOCkvMis2KQotCSAqIE1pbmltdW0gZHNvciBpcyAyIGFuZCBtYXhpbXVtIGlzIDk2LiBPZGQgZGl2aXNvcnMgc3RhcnRpbmcgZnJvbSA5Ci0JICogY2FuIG5vdCBiZSB1c2VkLgotCSAqLwotCWZvciAoZHNvciA9IDI7IGRzb3IgPCA5NjsgKytkc29yKSB7Ci0JCWlmICgoZHNvciAmIDEpICYmIGRzb3IgPiA4KQotCQkgIAljb250aW51ZTsKLQkJaWYgKHJhdGUgPj0gOTYwMDAwMDAgLyBkc29yKQotCQkJYnJlYWs7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCWlmIChhcmNoX2Nsb2NrLT5jbGtfc2V0X3BhcmVudCkKKwkJcmV0ID0gIGFyY2hfY2xvY2stPmNsa19zZXRfcGFyZW50KGNsaywgcGFyZW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19zZXRfcGFyZW50KTsKKworc3RydWN0IGNsayAqY2xrX2dldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNsayAqIHJldCA9IE5VTEw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisJaWYgKGFyY2hfY2xvY2stPmNsa19nZXRfcGFyZW50KQorCQlyZXQgPSBhcmNoX2Nsb2NrLT5jbGtfZ2V0X3BhcmVudChjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldF9wYXJlbnQpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9NQVAgc3BlY2lmaWMgY2xvY2sgZnVuY3Rpb25zIHNoYXJlZCBiZXR3ZWVuIG9tYXAxIGFuZCBvbWFwMgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordW5zaWduZWQgaW50IF9faW5pdGRhdGEgbXB1cmF0ZTsKKworLyoKKyAqIEJ5IGRlZmF1bHQgd2UgdXNlIHRoZSByYXRlIHNldCBieSB0aGUgYm9vdGxvYWRlci4KKyAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyB3aXRoIG1wdXJhdGU9IGNtZGxpbmUgb3B0aW9uLgorICovCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX2Nsa19zZXR1cChjaGFyICpzdHIpCit7CisJZ2V0X29wdGlvbigmc3RyLCAmbXB1cmF0ZSk7CisKKwlpZiAoIW1wdXJhdGUpCisJCXJldHVybiAxOworCisJaWYgKG1wdXJhdGUgPCAxMDAwKQorCQltcHVyYXRlICo9IDEwMDAwMDA7CisKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoIm1wdXJhdGU9Iiwgb21hcF9jbGtfc2V0dXApOworCisvKiBVc2VkIGZvciBjbG9ja3MgdGhhdCBhbHdheXMgaGF2ZSBzYW1lIHZhbHVlIGFzIHRoZSBwYXJlbnQgY2xvY2sgKi8KK3ZvaWQgZm9sbG93cGFyZW50X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGU7Cit9CisKKy8qIFByb3BhZ2F0ZSByYXRlIHRvIGNoaWxkcmVuICovCit2b2lkIHByb3BhZ2F0ZV9yYXRlKHN0cnVjdCBjbGsgKiB0Y2xrKQoreworCXN0cnVjdCBjbGsgKmNsa3A7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsa3AsICZjbG9ja3MsIG5vZGUpIHsKKwkJaWYgKGxpa2VseShjbGtwLT5wYXJlbnQgIT0gdGNsaykpCisJCQljb250aW51ZTsKKwkJaWYgKGxpa2VseSgodTMyKWNsa3AtPnJlY2FsYykpCisJCQljbGtwLT5yZWNhbGMoY2xrcCk7CiAJfQotCXJldHVybiBkc29yOwogfQogCi0vKiBPbmx5IG5lZWRlZCBvbiAxNTEwICovCi1zdGF0aWMgaW50IHNldF91YXJ0X3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXVuc2lnbmVkIGludCB2YWw7Ci0KLQl2YWwgPSBvbWFwX3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JaWYgKHJhdGUgPT0gMTIwMDAwMDApCi0JCXZhbCAmPSB+KDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQllbHNlIGlmIChyYXRlID09IDQ4MDAwMDAwKQotCQl2YWwgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQllbHNlCi0JCXJldHVybiAtRUlOVkFMOwotCW9tYXBfd3JpdGVsKHZhbCwgY2xrLT5lbmFibGVfcmVnKTsKLQljbGstPnJhdGUgPSByYXRlOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2V0X2V4dF9jbGtfcmF0ZShzdHJ1Y3QgY2xrICogIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXVuc2lnbmVkIGRzb3I7Ci0JX191MTYgcmF0aW9fYml0czsKLQotCWRzb3IgPSBjYWxjX2V4dF9kc29yKHJhdGUpOwotCWNsay0+cmF0ZSA9IDk2MDAwMDAwIC8gZHNvcjsKLQlpZiAoZHNvciA+IDgpCi0JCXJhdGlvX2JpdHMgPSAoKGRzb3IgLSA4KSAvIDIgKyA2KSA8PCAyOwotCWVsc2UKLQkJcmF0aW9fYml0cyA9IChkc29yIC0gMikgPDwgMjsKLQotCXJhdGlvX2JpdHMgfD0gb21hcF9yZWFkdyhjbGstPmVuYWJsZV9yZWcpICYgfjB4ZmQ7Ci0Jb21hcF93cml0ZXcocmF0aW9fYml0cywgY2xrLT5lbmFibGVfcmVnKTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBsb25nIHJvdW5kX2V4dF9jbGtfcmF0ZShzdHJ1Y3QgY2xrICogIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXJldHVybiA5NjAwMDAwMCAvIGNhbGNfZXh0X2Rzb3IocmF0ZSk7Ci19Ci0KLQotc3RhdGljIHZvaWQgaW5pdF9leHRfY2xrKHN0cnVjdCBjbGsgKiAgY2xrKQotewotCXVuc2lnbmVkIGRzb3I7Ci0JX191MTYgcmF0aW9fYml0czsKLQotCS8qIERldGVybWluZSBjdXJyZW50IHJhdGUgYW5kIGVuc3VyZSBjbG9jayBpcyBiYXNlZCBvbiA5Nk1IeiBBUExMICovCi0JcmF0aW9fYml0cyA9IG9tYXBfcmVhZHcoY2xrLT5lbmFibGVfcmVnKSAmIH4xOwotCW9tYXBfd3JpdGV3KHJhdGlvX2JpdHMsIGNsay0+ZW5hYmxlX3JlZyk7Ci0KLQlyYXRpb19iaXRzID0gKHJhdGlvX2JpdHMgJiAweGZjKSA+PiAyOwotCWlmIChyYXRpb19iaXRzID4gNikKLQkJZHNvciA9IChyYXRpb19iaXRzIC0gNikgKiAyICsgODsKLQllbHNlCi0JCWRzb3IgPSByYXRpb19iaXRzICsgMjsKLQotCWNsay0+IHJhdGUgPSA5NjAwMDAwMCAvIGRzb3I7Ci19Ci0KLQogaW50IGNsa19yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspCiB7CiAJZG93bigmY2xvY2tzX3NlbSk7CkBAIC0xMTI1LDYgKzI1NCw3IEBACiAJaWYgKGNsay0+aW5pdCkKIAkJY2xrLT5pbml0KGNsayk7CiAJdXAoJmNsb2Nrc19zZW0pOworCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGNsa19yZWdpc3Rlcik7CkBAIC0xMTM3LDIwMyArMjY3LDM4IEBACiB9CiBFWFBPUlRfU1lNQk9MKGNsa191bnJlZ2lzdGVyKTsKIAotI2lmZGVmIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUwotLyoKLSAqIFJlc2V0cyBzb21lIGNsb2NrcyB0aGF0IG1heSBiZSBsZWZ0IG9uIGZyb20gYm9vdGxvYWRlciwKLSAqIGJ1dCBsZWF2ZXMgc2VyaWFsIGNsb2NrcyBvbi4gU2VlIGFsc28gb21hcF9sYXRlX2Nsa19yZXNldCgpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgb21hcF9lYXJseV9jbGtfcmVzZXQodm9pZCkKK3ZvaWQgY2xrX2RlbnlfaWRsZShzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JLy9vbWFwX3dyaXRlbCgweDMgPDwgMjksIE1PRF9DT05GX0NUUkxfMCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwlpZiAoYXJjaF9jbG9jay0+Y2xrX2RlbnlfaWRsZSkKKwkJYXJjaF9jbG9jay0+Y2xrX2RlbnlfaWRsZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwogfQotI2Vsc2UKLSNkZWZpbmUgb21hcF9lYXJseV9jbGtfcmVzZXQoKQl7fQotI2VuZGlmCitFWFBPUlRfU1lNQk9MKGNsa19kZW55X2lkbGUpOwogCi1pbnQgX19pbml0IGNsa19pbml0KHZvaWQpCit2b2lkIGNsa19hbGxvd19pZGxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlzdHJ1Y3QgY2xrICoqICBjbGtwOwotCWNvbnN0IHN0cnVjdCBvbWFwX2Nsb2NrX2NvbmZpZyAqaW5mbzsKLQlpbnQgY3J5c3RhbF90eXBlID0gMDsgLyogRGVmYXVsdCAxMiBNSHogKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jb21hcF9lYXJseV9jbGtfcmVzZXQoKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisJaWYgKGFyY2hfY2xvY2stPmNsa19hbGxvd19pZGxlKQorCQlhcmNoX2Nsb2NrLT5jbGtfYWxsb3dfaWRsZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChjbGtfYWxsb3dfaWRsZSk7CiAKLQlmb3IgKGNsa3AgPSBvbmNoaXBfY2xrczsgY2xrcCA8IG9uY2hpcF9jbGtzK0FSUkFZX1NJWkUob25jaGlwX2Nsa3MpOyBjbGtwKyspIHsKLQkJaWYgKCgoKmNsa3ApLT5mbGFncyAmQ0xPQ0tfSU5fT01BUDE1MTApICYmIGNwdV9pc19vbWFwMTUxMCgpKSB7Ci0JCQljbGtfcmVnaXN0ZXIoKmNsa3ApOwotCQkJY29udGludWU7Ci0JCX0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLQkJaWYgKCgoKmNsa3ApLT5mbGFncyAmQ0xPQ0tfSU5fT01BUDE2WFgpICYmIGNwdV9pc19vbWFwMTZ4eCgpKSB7Ci0JCQljbGtfcmVnaXN0ZXIoKmNsa3ApOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoKCgqY2xrcCktPmZsYWdzICZDTE9DS19JTl9PTUFQNzMwKSAmJiBjcHVfaXNfb21hcDczMCgpKSB7Ci0JCQljbGtfcmVnaXN0ZXIoKmNsa3ApOwotCQkJY29udGludWU7Ci0JCX0KK2ludCBfX2luaXQgY2xrX2luaXQoc3RydWN0IGNsa19mdW5jdGlvbnMgKiBjdXN0b21fY2xvY2tzKQoreworCWlmICghY3VzdG9tX2Nsb2NrcykgeworCQlwcmludGsoS0VSTl9FUlIgIk5vIGN1c3RvbSBjbG9jayBmdW5jdGlvbnMgcmVnaXN0ZXJlZFxuIik7CisJCUJVRygpOwogCX0KIAotCWluZm8gPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfQ0xPQ0ssIHN0cnVjdCBvbWFwX2Nsb2NrX2NvbmZpZyk7Ci0JaWYgKGluZm8gIT0gTlVMTCkgewotCQlpZiAoIWNwdV9pc19vbWFwMTUxMCgpKQotCQkJY3J5c3RhbF90eXBlID0gaW5mby0+c3lzdGVtX2Nsb2NrX3R5cGU7Ci0JfQotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKQotCWNrX3JlZi5yYXRlID0gMTMwMDAwMDA7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQotCWlmIChjcnlzdGFsX3R5cGUgPT0gMikKLQkJY2tfcmVmLnJhdGUgPSAxOTIwMDAwMDsKLSNlbmRpZgotCi0JcHJpbnRrKCJDbG9ja3M6IEFSTV9TWVNTVDogMHglMDR4IERQTExfQ1RMOiAweCUwNHggQVJNX0NLQ1RMOiAweCUwNHhcbiIsCi0JICAgICAgIG9tYXBfcmVhZHcoQVJNX1NZU1NUKSwgb21hcF9yZWFkdyhEUExMX0NUTCksCi0JICAgICAgIG9tYXBfcmVhZHcoQVJNX0NLQ1RMKSk7Ci0KLQkvKiBXZSB3YW50IHRvIGJlIGluIHN5bmNyb25vdXMgc2NhbGFibGUgbW9kZSAqLwotCW9tYXBfd3JpdGV3KDB4MTAwMCwgQVJNX1NZU1NUKTsKLQotI2lmZGVmIENPTkZJR19PTUFQX0NMT0NLU19TRVRfQllfQk9PVExPQURFUgotCS8qIFVzZSB2YWx1ZXMgc2V0IGJ5IGJvb3Rsb2FkZXIuIERldGVybWluZSBQTEwgcmF0ZSBhbmQgcmVjYWxjdWxhdGUKLQkgKiBkZXBlbmRlbnQgY2xvY2tzIGFzIGlmIGtlcm5lbCBoYWQgY2hhbmdlZCBQTEwgb3IgZGl2aXNvcnMuCi0JICovCi0JewotCQl1bnNpZ25lZCBwbGxfY3RsX3ZhbCA9IG9tYXBfcmVhZHcoRFBMTF9DVEwpOwotCi0JCWNrX2RwbGwxLnJhdGUgPSBja19yZWYucmF0ZTsgLyogQmFzZSB4dGFsIHJhdGUgKi8KLQkJaWYgKHBsbF9jdGxfdmFsICYgMHgxMCkgewotCQkJLyogUExMIGVuYWJsZWQsIGFwcGx5IG11bHRpcGxpZXIgYW5kIGRpdmlzb3IgKi8KLQkJCWlmIChwbGxfY3RsX3ZhbCAmIDB4ZjgwKQotCQkJCWNrX2RwbGwxLnJhdGUgKj0gKHBsbF9jdGxfdmFsICYgMHhmODApID4+IDc7Ci0JCQlja19kcGxsMS5yYXRlIC89ICgocGxsX2N0bF92YWwgJiAweDYwKSA+PiA1KSArIDE7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBQTEwgZGlzYWJsZWQsIGFwcGx5IGJ5cGFzcyBkaXZpc29yICovCi0JCQlzd2l0Y2ggKHBsbF9jdGxfdmFsICYgMHhjKSB7Ci0JCQljYXNlIDA6Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4NDoKLQkJCQlja19kcGxsMS5yYXRlIC89IDI7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWNrX2RwbGwxLnJhdGUgLz0gNDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQlwcm9wYWdhdGVfcmF0ZSgmY2tfZHBsbDEpOwotI2Vsc2UKLQkvKiBGaW5kIHRoZSBoaWdoZXN0IHN1cHBvcnRlZCBmcmVxdWVuY3kgYW5kIGVuYWJsZSBpdCAqLwotCWlmIChzZWxlY3RfdGFibGVfcmF0ZSgmdmlydHVhbF9ja19tcHUsIH4wKSkgewotCQlwcmludGsoS0VSTl9FUlIgIlN5c3RlbSBmcmVxdWVuY2llcyBub3Qgc2V0LiBDaGVjayB5b3VyIGNvbmZpZy5cbiIpOwotCQkvKiBHdWVzcyBzYW5lIHZhbHVlcyAoNjBNSHopICovCi0JCW9tYXBfd3JpdGV3KDB4MjI5MCwgRFBMTF9DVEwpOwotCQlvbWFwX3dyaXRldygweDEwMDUsIEFSTV9DS0NUTCk7Ci0JCWNrX2RwbGwxLnJhdGUgPSA2MDAwMDAwMDsKLQkJcHJvcGFnYXRlX3JhdGUoJmNrX2RwbGwxKTsKLQl9Ci0jZW5kaWYKLQkvKiBDYWNoZSByYXRlcyBmb3IgY2xvY2tzIGNvbm5lY3RlZCB0byBja19yZWYgKG5vdCBkcGxsMSkgKi8KLQlwcm9wYWdhdGVfcmF0ZSgmY2tfcmVmKTsKLQlwcmludGsoS0VSTl9JTkZPICJDbG9ja2luZyByYXRlICh4dGFsL0RQTEwxL01QVSk6ICIKLQkJIiVsZC4lMDFsZC8lbGQuJTAxbGQvJWxkLiUwMWxkIE1IelxuIiwKLQkgICAgICAgY2tfcmVmLnJhdGUgLyAxMDAwMDAwLCAoY2tfcmVmLnJhdGUgLyAxMDAwMDApICUgMTAsCi0JICAgICAgIGNrX2RwbGwxLnJhdGUgLyAxMDAwMDAwLCAoY2tfZHBsbDEucmF0ZSAvIDEwMDAwMCkgJSAxMCwKLQkgICAgICAgYXJtX2NrLnJhdGUgLyAxMDAwMDAwLCAoYXJtX2NrLnJhdGUgLyAxMDAwMDApICUgMTApOwotCi0jaWZkZWYgQ09ORklHX01BQ0hfT01BUF9QRVJTRVVTMgotCS8qIFNlbGVjdCBzbGljZXIgb3V0cHV0IGFzIE9NQVAgaW5wdXQgY2xvY2sgKi8KLQlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KE9NQVA3MzBfUENDX1VQTERfQ1RSTCkgJiB+MHgxLCBPTUFQNzMwX1BDQ19VUExEX0NUUkwpOwotI2VuZGlmCi0KLQkvKiBUdXJuIG9mZiBEU1AgYW5kIEFSTV9USU1YTy4gTWFrZSBzdXJlIEFSTV9JTlRIQ0sgaXMgbm90IGRpdmlkZWQgKi8KLQlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KEFSTV9DS0NUTCkgJiAweDBmZmYsIEFSTV9DS0NUTCk7Ci0KLQkvKiBQdXQgRFNQL01QVUkgaW50byByZXNldCB1bnRpbCBuZWVkZWQgKi8KLQlvbWFwX3dyaXRldygwLCBBUk1fUlNUQ1QxKTsKLQlvbWFwX3dyaXRldygxLCBBUk1fUlNUQ1QyKTsKLQlvbWFwX3dyaXRldygweDQwMCwgQVJNX0lETEVDVDEpOwotCi0JLyoKLQkgKiBBY2NvcmRpbmcgdG8gT01BUDU5MTAgRXJyYXR1bSBTWVNfRE1BXzEsIGJpdCBETUFDS19SRVEgKGJpdCA4KQotCSAqIG9mIHRoZSBBUk1fSURMRUNUMiByZWdpc3RlciBtdXN0IGJlIHNldCB0byB6ZXJvLiBUaGUgcG93ZXItb24KLQkgKiBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgYml0IGlzIG9uZS4KLQkgKi8KLQlvbWFwX3dyaXRldygweDAwMDAsIEFSTV9JRExFQ1QyKTsJLyogVHVybiBMQ0QgY2xvY2sgb2ZmIGFsc28gKi8KLQotCS8qCi0JICogT25seSBlbmFibGUgdGhvc2UgY2xvY2tzIHdlIHdpbGwgbmVlZCwgbGV0IHRoZSBkcml2ZXJzCi0JICogZW5hYmxlIG90aGVyIGNsb2NrcyBhcyBuZWNlc3NhcnkKLQkgKi8KLQljbGtfdXNlKCZhcm1wZXJfY2spOwotCWNsa191c2UoJmFybXhvcl9jayk7Ci0JY2xrX3VzZSgmYXJtdGltX2NrKTsKLQotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkKLQkJY2xrX2VuYWJsZSgmYXJtX2dwaW9fY2spOworCWFyY2hfY2xvY2sgPSBjdXN0b21fY2xvY2tzOwogCiAJcmV0dXJuIDA7CiB9Ci0KLQotI2lmZGVmIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUwotCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwX2xhdGVfY2xrX3Jlc2V0KHZvaWQpCi17Ci0JLyogVHVybiBvZmYgYWxsIHVudXNlZCBjbG9ja3MgKi8KLQlzdHJ1Y3QgY2xrICpwOwotCV9fdTMyIHJlZ3ZhbDMyOwotCi0JLyogVVNCX1JFUV9FTiB3aWxsIGJlIGRpc2FibGVkIGxhdGVyIGlmIG5lY2Vzc2FyeSAodXNiX2RjX2NrKSAqLwotCXJlZ3ZhbDMyID0gb21hcF9yZWFkdyhTT0ZUX1JFUV9SRUcpICYgKDEgPDwgNCk7Ci0Jb21hcF93cml0ZXcocmVndmFsMzIsIFNPRlRfUkVRX1JFRyk7Ci0Jb21hcF93cml0ZXcoMCwgU09GVF9SRVFfUkVHMik7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjbG9ja3MsIG5vZGUpIHsKLQkJaWYgKHAtPnVzZWNvdW50ID4gMCB8fCAocC0+ZmxhZ3MgJiBBTFdBWVNfRU5BQkxFRCkgfHwKLQkJCXAtPmVuYWJsZV9yZWcgPT0gMCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIEFzc3VtZSBubyBEU1AgY2xvY2tzIGhhdmUgYmVlbiBhY3RpdmF0ZWQgYnkgYm9vdGxvYWRlciAqLwotCQlpZiAocC0+ZmxhZ3MgJiBEU1BfRE9NQUlOX0NMT0NLKQotCQkJY29udGludWU7Ci0KLQkJLyogSXMgdGhlIGNsb2NrIGFscmVhZHkgZGlzYWJsZWQ/ICovCi0JCWlmIChwLT5mbGFncyAmIEVOQUJMRV9SRUdfMzJCSVQpIHsKLQkJCWlmIChwLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykKLQkJCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKHAtPmVuYWJsZV9yZWcpOwotCQkJZWxzZQotCQkJCXJlZ3ZhbDMyID0gb21hcF9yZWFkbChwLT5lbmFibGVfcmVnKTsKLQkJfSBlbHNlIHsKLQkJCWlmIChwLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykKLQkJCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWR3KHAtPmVuYWJsZV9yZWcpOwotCQkJZWxzZQotCQkJCXJlZ3ZhbDMyID0gb21hcF9yZWFkdyhwLT5lbmFibGVfcmVnKTsKLQkJfQotCi0JCWlmICgocmVndmFsMzIgJiAoMSA8PCBwLT5lbmFibGVfYml0KSkgPT0gMCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIEZJWE1FOiBUaGlzIGNsb2NrIHNlZW1zIHRvIGJlIG5lY2Vzc2FyeSBidXQgbm8tb25lCi0JCSAqIGhhcyBhc2tlZCBmb3IgaXRzIGFjdGl2YXRpb24uICovCi0JCWlmIChwID09ICZ0YzJfY2sgICAgICAgICAvLyBGSVg6IHBtLmMgKFNSQU0pLCBDQ1AsIENhbWVyYQotCQkgICAgfHwgcCA9PSAmY2tfZHBsbDFvdXQgLy8gRklYOiBTb1NTSSwgU1NSCi0JCSAgICB8fCBwID09ICZhcm1fZ3Bpb19jayAvLyBGSVg6IEdQSU8gY29kZSBmb3IgMTUxMAotCQkgICAgKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJGSVhNRTogQ2xvY2sgXCIlc1wiIHNlZW1zIHVudXNlZFxuIiwKLQkJCSAgICAgICBwLT5uYW1lKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiRGlzYWJsaW5nIHVudXNlZCBjbG9jayBcIiVzXCIuLi4gIiwgcC0+bmFtZSk7Ci0JCV9fY2xrX2Rpc2FibGUocCk7Ci0JCXByaW50aygiIGRvbmVcbiIpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1sYXRlX2luaXRjYWxsKG9tYXBfbGF0ZV9jbGtfcmVzZXQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4OWUxZTguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQgTm9raWEgY29ycG9yYXRpb24KLSAqICBXcml0dGVuIGJ5IFR1dWtrYSBUaWtrYW5lbiA8dHV1a2thLnRpa2thbmVuQGVsZWt0cm9iaXQuY29tPgotICogIEJhc2VkIG9uIGNsb2Nrcy5oIGJ5IFRvbnkgTGluZGdyZW4sIEdvcmRvbiBNY051dHQgYW5kIFJpZGdlUnVuLCBJbmMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX19BUkNIX0FSTV9PTUFQX0NMT0NLX0gKLSNkZWZpbmUgX19BUkNIX0FSTV9PTUFQX0NMT0NLX0gKLQotc3RydWN0IG1vZHVsZTsKLQotc3RydWN0IGNsayB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlub2RlOwotCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKLQljb25zdCBjaGFyCQkqbmFtZTsKLQlzdHJ1Y3QgY2xrCQkqcGFyZW50OwotCXVuc2lnbmVkIGxvbmcJCXJhdGU7Ci0JX19zOAkJCXVzZWNvdW50OwotCV9fdTE2CQkJZmxhZ3M7Ci0JX191MzIJCQllbmFibGVfcmVnOwotCV9fdTgJCQllbmFibGVfYml0OwotCV9fdTgJCQlyYXRlX29mZnNldDsKLQl2b2lkCQkJKCpyZWNhbGMpKHN0cnVjdCBjbGsgKik7Ci0JaW50CQkJKCpzZXRfcmF0ZSkoc3RydWN0IGNsayAqLCB1bnNpZ25lZCBsb25nKTsKLQlsb25nCQkJKCpyb3VuZF9yYXRlKShzdHJ1Y3QgY2xrICosIHVuc2lnbmVkIGxvbmcpOwotCXZvaWQJCQkoKmluaXQpKHN0cnVjdCBjbGsgKik7Ci19OwotCi0KLXN0cnVjdCBtcHVfcmF0ZSB7Ci0JdW5zaWduZWQgbG9uZwkJcmF0ZTsKLQl1bnNpZ25lZCBsb25nCQl4dGFsOwotCXVuc2lnbmVkIGxvbmcJCXBsbF9yYXRlOwotCV9fdTE2CQkJY2tjdGxfdmFsOwotCV9fdTE2CQkJZHBsbGN0bF92YWw7Ci19OwotCi0KLS8qIENsb2NrIGZsYWdzICovCi0jZGVmaW5lIFJBVEVfQ0tDVEwJCTEKLSNkZWZpbmUgUkFURV9GSVhFRAkJMgotI2RlZmluZSBSQVRFX1BST1BBR0FURVMJCTQKLSNkZWZpbmUgVklSVFVBTF9DTE9DSwkJOAotI2RlZmluZSBBTFdBWVNfRU5BQkxFRAkJMTYKLSNkZWZpbmUgRU5BQkxFX1JFR18zMkJJVAkzMgotI2RlZmluZSBDTE9DS19JTl9PTUFQMTZYWAk2NAotI2RlZmluZSBDTE9DS19JTl9PTUFQMTUxMAkxMjgKLSNkZWZpbmUgQ0xPQ0tfSU5fT01BUDczMAkyNTYKLSNkZWZpbmUgRFNQX0RPTUFJTl9DTE9DSwk1MTIKLSNkZWZpbmUgVklSVFVBTF9JT19BRERSRVNTCTEwMjQKLQotLyogQVJNX0NLQ1RMIGJpdCBzaGlmdHMgKi8KLSNkZWZpbmUgQ0tDVExfUEVSRElWX09GRlNFVAkwCi0jZGVmaW5lIENLQ1RMX0xDRERJVl9PRkZTRVQJMgotI2RlZmluZSBDS0NUTF9BUk1ESVZfT0ZGU0VUCTQKLSNkZWZpbmUgQ0tDVExfRFNQRElWX09GRlNFVAk2Ci0jZGVmaW5lIENLQ1RMX1RDRElWX09GRlNFVAk4Ci0jZGVmaW5lIENLQ1RMX0RTUE1NVURJVl9PRkZTRVQJMTAKLS8qI2RlZmluZSBBUk1fVElNWE8JCTEyKi8KLSNkZWZpbmUgRU5fRFNQQ0sJCTEzCi0vKiNkZWZpbmUgQVJNX0lOVEhDS19TRUwJMTQqLyAvKiBEaXZpZGUtYnktMiBmb3IgbXB1IGludGhfY2sgKi8KLS8qIERTUF9DS0NUTCBiaXQgc2hpZnRzICovCi0jZGVmaW5lIENLQ1RMX0RTUFBFUkRJVl9PRkZTRVQJMAotCi0vKiBBUk1fSURMRUNUMSBiaXQgc2hpZnRzICovCi0vKiNkZWZpbmUgSURMV0RUX0FSTQkwKi8KLS8qI2RlZmluZSBJRExYT1JQX0FSTQkxKi8KLS8qI2RlZmluZSBJRExQRVJfQVJNCTIqLwotLyojZGVmaW5lIElETExDRF9BUk0JMyovCi0vKiNkZWZpbmUgSURMTEJfQVJNCTQqLwotLyojZGVmaW5lIElETEhTQUJfQVJNCTUqLwotLyojZGVmaW5lIElETElGX0FSTQk2Ki8KLS8qI2RlZmluZSBJRExEUExMX0FSTQk3Ki8KLS8qI2RlZmluZSBJRExBUElfQVJNCTgqLwotLyojZGVmaW5lIElETFRJTV9BUk0JOSovCi0vKiNkZWZpbmUgU0VUQVJNX0lETEUJMTEqLwotCi0vKiBBUk1fSURMRUNUMiBiaXQgc2hpZnRzICovCi0jZGVmaW5lIEVOX1dEVENLCTAKLSNkZWZpbmUgRU5fWE9SUENLCTEKLSNkZWZpbmUgRU5fUEVSQ0sJMgotI2RlZmluZSBFTl9MQ0RDSwkzCi0jZGVmaW5lIEVOX0xCQ0sJCTQgLyogTm90IG9uIDE2MTAvMTcxMCAqLwotLyojZGVmaW5lIEVOX0hTQUJDSwk1Ki8KLSNkZWZpbmUgRU5fQVBJQ0sJNgotI2RlZmluZSBFTl9USU1DSwk3Ci0jZGVmaW5lIERNQUNLX1JFUQk4Ci0jZGVmaW5lIEVOX0dQSU9DSwk5IC8qIE5vdCBvbiAxNjEwLzE3MTAgKi8KLS8qI2RlZmluZSBFTl9MQkZSRUVDSwkxMCovCi0jZGVmaW5lIEVOX0NLT1VUX0FSTQkxMQotCi0vKiBBUk1fSURMRUNUMyBiaXQgc2hpZnRzICovCi0jZGVmaW5lIEVOX09DUElfQ0sJMAotI2RlZmluZSBFTl9UQzFfQ0sJMgotI2RlZmluZSBFTl9UQzJfQ0sJNAotCi0vKiBEU1BfSURMRUNUMiBiaXQgc2hpZnRzICgwLDEsMiBhcmUgc2FtZSBhcyBmb3IgQVJNX0lETEVDVDIpICovCi0jZGVmaW5lIEVOX0RTUFRJTUNLCTUKLQotLyogVmFyaW91cyByZWdpc3RlciBkZWZpbmVzIGZvciBjbG9jayBjb250cm9scyBzY2F0dGVyZWQgYXJvdW5kIE9NQVAgY2hpcCAqLwotI2RlZmluZSBVU0JfTUNMS19FTl9CSVQJCTQJLyogSW4gVUxQRF9DTEtDX0NUUkwgKi8KLSNkZWZpbmUgVVNCX0hPU1RfSEhDX1VIT1NUX0VOCTkJLyogSW4gTU9EX0NPTkZfQ1RSTF8wICovCi0jZGVmaW5lIFNXRF9VTFBEX1BMTF9DTEtfUkVRCTEJLyogSW4gU1dEX0NMS19ESVZfQ1RSTF9TRUwgKi8KLSNkZWZpbmUgQ09NX1VMUERfUExMX0NMS19SRVEJMQkvKiBJbiBDT01fQ0xLX0RJVl9DVFJMX1NFTCAqLwotI2RlZmluZSBTV0RfQ0xLX0RJVl9DVFJMX1NFTAkweGZmZmUwODc0Ci0jZGVmaW5lIENPTV9DTEtfRElWX0NUUkxfU0VMCTB4ZmZmZTA4NzgKLSNkZWZpbmUgU09GVF9SRVFfUkVHCQkweGZmZmUwODM0Ci0jZGVmaW5lIFNPRlRfUkVRX1JFRzIJCTB4ZmZmZTA4ODAKLQotaW50IGNsa19yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspOwotdm9pZCBjbGtfdW5yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspOwotaW50IGNsa19pbml0KHZvaWQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYwppbmRleCAwMmJjYzZjLi5jY2RiNDUyNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYwpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2ZwZ2EuaD4KIAotI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KIAogI2RlZmluZSBOT19MRU5HVEhfQ0hFQ0sgMHhmZmZmZmZmZgogCkBAIC0xMTcsMTkgKzExNyw0MyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX2FkZF9zZXJpYWxfY29uc29sZSh2b2lkKQogewotCWNvbnN0IHN0cnVjdCBvbWFwX3NlcmlhbF9jb25zb2xlX2NvbmZpZyAqaW5mbzsKKwljb25zdCBzdHJ1Y3Qgb21hcF9zZXJpYWxfY29uc29sZV9jb25maWcgKmNvbl9pbmZvOworCWNvbnN0IHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnICp1YXJ0X2luZm87CisJc3RhdGljIGNoYXIgc3BlZWRbMTFdLCAqb3B0ID0gTlVMTDsKKwlpbnQgbGluZSwgaSwgdWFydF9pZHg7CiAKLQlpbmZvID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX1NFUklBTF9DT05TT0xFLAotCQkJICAgICAgIHN0cnVjdCBvbWFwX3NlcmlhbF9jb25zb2xlX2NvbmZpZyk7Ci0JaWYgKGluZm8gIT0gTlVMTCAmJiBpbmZvLT5jb25zb2xlX3VhcnQpIHsKLQkJc3RhdGljIGNoYXIgc3BlZWRbMTFdLCAqb3B0ID0gTlVMTDsKKwl1YXJ0X2luZm8gPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfVUFSVCwgc3RydWN0IG9tYXBfdWFydF9jb25maWcpOworCWNvbl9pbmZvID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX1NFUklBTF9DT05TT0xFLAorCQkJCQlzdHJ1Y3Qgb21hcF9zZXJpYWxfY29uc29sZV9jb25maWcpOworCWlmICh1YXJ0X2luZm8gPT0gTlVMTCB8fCBjb25faW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gMDsKIAotCQlpZiAoaW5mby0+Y29uc29sZV9zcGVlZCkgewotCQkJc25wcmludGYoc3BlZWQsIHNpemVvZihzcGVlZCksICIldSIsIGluZm8tPmNvbnNvbGVfc3BlZWQpOwotCQkJb3B0ID0gc3BlZWQ7Ci0JCX0KLQkJcmV0dXJuIGFkZF9wcmVmZXJyZWRfY29uc29sZSgidHR5UyIsIGluZm8tPmNvbnNvbGVfdWFydCAtIDEsIG9wdCk7CisJaWYgKGNvbl9pbmZvLT5jb25zb2xlX3VhcnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY29uX2luZm8tPmNvbnNvbGVfc3BlZWQpIHsKKwkJc25wcmludGYoc3BlZWQsIHNpemVvZihzcGVlZCksICIldSIsIGNvbl9pbmZvLT5jb25zb2xlX3NwZWVkKTsKKwkJb3B0ID0gc3BlZWQ7CiAJfQotCXJldHVybiAwOworCisJdWFydF9pZHggPSBjb25faW5mby0+Y29uc29sZV91YXJ0IC0gMTsKKwlpZiAodWFydF9pZHggPj0gT01BUF9NQVhfTlJfUE9SVFMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ29uc29sZTogZXh0ZXJuYWwgVUFSVCMlZC4gIgorCQkJIk5vdCBhZGRpbmcgaXQgYXMgY29uc29sZSB0aGlzIHRpbWUuXG4iLAorCQkJdWFydF9pZHggKyAxKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghKHVhcnRfaW5mby0+ZW5hYmxlZF91YXJ0cyAmICgxIDw8IHVhcnRfaWR4KSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb25zb2xlOiBTZWxlY3RlZCBVQVJUIyVkIGlzICIKKwkJCSJub3QgZW5hYmxlZCBmb3IgdGhpcyBwbGF0Zm9ybVxuIiwKKwkJCXVhcnRfaWR4ICsgMSk7CisJCXJldHVybiAtMTsKKwl9CisJbGluZSA9IDA7CisJZm9yIChpID0gMDsgaSA8IHVhcnRfaWR4OyBpKyspIHsKKwkJaWYgKHVhcnRfaW5mby0+ZW5hYmxlZF91YXJ0cyAmICgxIDw8IGkpKQorCQkJbGluZSsrOworCX0KKwlyZXR1cm4gYWRkX3ByZWZlcnJlZF9jb25zb2xlKCJ0dHlTIiwgbGluZSwgb3B0KTsKIH0KIGNvbnNvbGVfaW5pdGNhbGwob21hcF9hZGRfc2VyaWFsX2NvbnNvbGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRjY2U5MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKQEAgLTAsMCArMSwzODEgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCisgKgorICogQ29tbW9uIHBsYXRmb3JtIGRldmljZSBzZXR1cC9pbml0aWFsaXphdGlvbiBmb3IgT01BUDEgYW5kIE9NQVAyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3RjLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisKKwordm9pZCBvbWFwX25vcF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKyAgICAgICAgLyogTm90aGluZyAqLworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgCWRlZmluZWQoQ09ORklHX0kyQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfT01BUF9NT0RVTEUpCisKKyNkZWZpbmUJT01BUDFfSTJDX0JBU0UJCTB4ZmZmYjM4MDAKKyNkZWZpbmUgT01BUDJfSTJDX0JBU0UxCQkweDQ4MDcwMDAwCisjZGVmaW5lIE9NQVBfSTJDX1NJWkUJCTB4M2YKKyNkZWZpbmUgT01BUDFfSTJDX0lOVAkJSU5UX0kyQworI2RlZmluZSBPTUFQMl9JMkNfSU5UMQkJNTYKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpMmNfcmVzb3VyY2VzMVtdID0geworCXsKKwkJLnN0YXJ0CQk9IDAsCisJCS5lbmQJCT0gMCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gMCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCisvKiBETUEgbm90IHVzZWQ7IHdvcmtzIGFyb3VuZCBlcnJhdHVtIHdyaXRpbmcgdG8gbm9uLWVtcHR5IGkyYyBmaWZvICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfaTJjX2RldmljZTEgPSB7CisgICAgICAgIC5uYW1lICAgICAgICAgICA9ICJpMmNfb21hcCIsCisgICAgICAgIC5pZCAgICAgICAgICAgICA9IDEsCisgICAgICAgIC5kZXYgPSB7CisgICAgICAgICAgICAgICAgLnJlbGVhc2UgICAgICAgID0gb21hcF9ub3BfcmVsZWFzZSwKKyAgICAgICAgfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaTJjX3Jlc291cmNlczEpLAorCS5yZXNvdXJjZQk9IGkyY19yZXNvdXJjZXMxLAorfTsKKworLyogU2VlIGFsc28gYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMgZm9yIHNlY29uZCBJMkMgb24gMjR4eCAqLworc3RhdGljIHZvaWQgb21hcF9pbml0X2kyYyh2b2lkKQoreworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlpMmNfcmVzb3VyY2VzMVswXS5zdGFydCA9IE9NQVAyX0kyQ19CQVNFMTsKKwkJaTJjX3Jlc291cmNlczFbMF0uZW5kID0gT01BUDJfSTJDX0JBU0UxICsgT01BUF9JMkNfU0laRTsKKwkJaTJjX3Jlc291cmNlczFbMV0uc3RhcnQgPSBPTUFQMl9JMkNfSU5UMTsKKwl9IGVsc2UgeworCQlpMmNfcmVzb3VyY2VzMVswXS5zdGFydCA9IE9NQVAxX0kyQ19CQVNFOworCQlpMmNfcmVzb3VyY2VzMVswXS5lbmQgPSBPTUFQMV9JMkNfQkFTRSArIE9NQVBfSTJDX1NJWkU7CisJCWkyY19yZXNvdXJjZXMxWzFdLnN0YXJ0ID0gT01BUDFfSTJDX0lOVDsKKwl9CisKKwkvKiBGSVhNRSBkZWZpbmUgYW5kIHVzZSBhIGJvb3QgdGFnLCBpbiBjYXNlIG9mIGJvYXJkcyB0aGF0CisJICogZWl0aGVyIGRvbid0IHdpcmUgdXAgSTJDLCBvciBjaGlwcyB0aGF0IG11eCBpdCBkaWZmZXJlbnRseS4uLgorCSAqIGl0IGNhbiBpbmNsdWRlIGNsb2NraW5nIGFuZCBhZGRyZXNzIGluZm8sIG1heWJlIG1vcmUuCisJICovCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCW9tYXBfY2ZnX3JlZyhNMTlfMjRYWF9JMkMxX1NDTCk7CisJCW9tYXBfY2ZnX3JlZyhMMTVfMjRYWF9JMkMxX1NEQSk7CisJfSBlbHNlIHsKKwkJb21hcF9jZmdfcmVnKEkyQ19TQ0wpOworCQlvbWFwX2NmZ19yZWcoSTJDX1NEQSk7CisJfQorCisJKHZvaWQpIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF9pMmNfZGV2aWNlMSk7Cit9CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X2kyYyh2b2lkKSB7fQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZglkZWZpbmVkKENPTkZJR19NTUNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfTU9EVUxFKQorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0WFgKKyNkZWZpbmUJT01BUF9NTUMxX0JBU0UJCTB4NDgwOWMwMDAKKyNkZWZpbmUgT01BUF9NTUMxX0lOVAkJODMKKyNlbHNlCisjZGVmaW5lCU9NQVBfTU1DMV9CQVNFCQkweGZmZmI3ODAwCisjZGVmaW5lIE9NQVBfTU1DMV9JTlQJCUlOVF9NTUMKKyNlbmRpZgorI2RlZmluZQlPTUFQX01NQzJfQkFTRQkJMHhmZmZiN2MwMAkvKiBvbWFwMTZ4eCBvbmx5ICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfY29uZiBtbWMxX2NvbmY7CisKK3N0YXRpYyB1NjQgbW1jMV9kbWFtYXNrID0gMHhmZmZmZmZmZjsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtbWMxX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IElPX0FERFJFU1MoT01BUF9NTUMxX0JBU0UpLAorCQkuZW5kCQk9IElPX0FERFJFU1MoT01BUF9NTUMxX0JBU0UpICsgMHg3ZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gT01BUF9NTUMxX0lOVCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtbWNfb21hcF9kZXZpY2UxID0geworCS5uYW1lCQk9ICJtbWNpLW9tYXAiLAorCS5pZAkJPSAxLAorCS5kZXYgPSB7CisJCS5yZWxlYXNlCT0gb21hcF9ub3BfcmVsZWFzZSwKKwkJLmRtYV9tYXNrCT0gJm1tYzFfZG1hbWFzaywKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbW1jMV9jb25mLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG1tYzFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBtbWMxX3Jlc291cmNlcywKK307CisKKyNpZmRlZglDT05GSUdfQVJDSF9PTUFQMTZYWAorCitzdGF0aWMgc3RydWN0IG9tYXBfbW1jX2NvbmYgbW1jMl9jb25mOworCitzdGF0aWMgdTY0IG1tYzJfZG1hbWFzayA9IDB4ZmZmZmZmZmY7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbW1jMl9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBJT19BRERSRVNTKE9NQVBfTU1DMl9CQVNFKSwKKwkJLmVuZAkJPSBJT19BRERSRVNTKE9NQVBfTU1DMl9CQVNFKSArIDB4N2YsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IElOVF8xNjEwX01NQzIsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbW1jX29tYXBfZGV2aWNlMiA9IHsKKwkubmFtZQkJPSAibW1jaS1vbWFwIiwKKwkuaWQJCT0gMiwKKwkuZGV2ID0geworCQkucmVsZWFzZQk9IG9tYXBfbm9wX3JlbGVhc2UsCisJCS5kbWFfbWFzawk9ICZtbWMyX2RtYW1hc2ssCisJCS5wbGF0Zm9ybV9kYXRhCT0gJm1tYzJfY29uZiwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtbWMyX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gbW1jMl9yZXNvdXJjZXMsCit9OworI2VuZGlmCisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2luaXRfbW1jKHZvaWQpCit7CisJY29uc3Qgc3RydWN0IG9tYXBfbW1jX2NvbmZpZwkqbW1jX2NvbmY7CisJY29uc3Qgc3RydWN0IG9tYXBfbW1jX2NvbmYJKm1tYzsKKworCS8qIE5PVEU6ICBhc3N1bWVzIE1NQyB3YXMgbmV2ZXIgKHdyb25nbHkpIGVuYWJsZWQgKi8KKwltbWNfY29uZiA9IG9tYXBfZ2V0X2NvbmZpZyhPTUFQX1RBR19NTUMsIHN0cnVjdCBvbWFwX21tY19jb25maWcpOworCWlmICghbW1jX2NvbmYpCisJCXJldHVybjsKKworCS8qIGJsb2NrIDEgaXMgYWx3YXlzIGF2YWlsYWJsZSBhbmQgaGFzIGp1c3Qgb25lIHBpbm91dCBvcHRpb24gKi8KKwltbWMgPSAmbW1jX2NvbmYtPm1tY1swXTsKKwlpZiAobW1jLT5lbmFibGVkKSB7CisJCWlmICghY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJCW9tYXBfY2ZnX3JlZyhNTUNfQ01EKTsKKwkJCW9tYXBfY2ZnX3JlZyhNTUNfQ0xLKTsKKwkJCW9tYXBfY2ZnX3JlZyhNTUNfREFUMCk7CisJCQlpZiAoY3B1X2lzX29tYXAxNzEwKCkpIHsKKwkJCQlvbWFwX2NmZ19yZWcoTTE1XzE3MTBfTU1DX0NMS0kpOworCQkJCW9tYXBfY2ZnX3JlZyhQMTlfMTcxMF9NTUNfQ01ERElSKTsKKwkJCQlvbWFwX2NmZ19yZWcoUDIwXzE3MTBfTU1DX0RBVERJUjApOworCQkJfQorCQl9CisJCWlmIChtbWMtPndpcmU0KSB7CisJCQlpZiAoIWNwdV9pc19vbWFwMjR4eCgpKSB7CisJCQkJb21hcF9jZmdfcmVnKE1NQ19EQVQxKTsKKwkJCQkvKiBOT1RFOiAgREFUMiBjYW4gYmUgb24gVzEwIChoZXJlKSBvciBNMTUgKi8KKwkJCQlpZiAoIW1tYy0+bm9tdXgpCisJCQkJCW9tYXBfY2ZnX3JlZyhNTUNfREFUMik7CisJCQkJb21hcF9jZmdfcmVnKE1NQ19EQVQzKTsKKwkJCX0KKwkJfQorCQltbWMxX2NvbmYgPSAqbW1jOworCQkodm9pZCkgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtbWNfb21hcF9kZXZpY2UxKTsKKwl9CisKKyNpZmRlZglDT05GSUdfQVJDSF9PTUFQMTZYWAorCS8qIGJsb2NrIDIgaXMgb24gbmV3ZXIgY2hpcHMsIGFuZCBoYXMgbWFueSBwaW5vdXQgb3B0aW9ucyAqLworCW1tYyA9ICZtbWNfY29uZi0+bW1jWzFdOworCWlmIChtbWMtPmVuYWJsZWQpIHsKKwkJaWYgKCFtbWMtPm5vbXV4KSB7CisJCQlvbWFwX2NmZ19yZWcoWThfMTYxMF9NTUMyX0NNRCk7CisJCQlvbWFwX2NmZ19yZWcoWTEwXzE2MTBfTU1DMl9DTEspOworCQkJb21hcF9jZmdfcmVnKFIxOF8xNjEwX01NQzJfQ0xLSU4pOworCQkJb21hcF9jZmdfcmVnKFc4XzE2MTBfTU1DMl9EQVQwKTsKKwkJCWlmIChtbWMtPndpcmU0KSB7CisJCQkJb21hcF9jZmdfcmVnKFY4XzE2MTBfTU1DMl9EQVQxKTsKKwkJCQlvbWFwX2NmZ19yZWcoVzE1XzE2MTBfTU1DMl9EQVQyKTsKKwkJCQlvbWFwX2NmZ19yZWcoUjEwXzE2MTBfTU1DMl9EQVQzKTsKKwkJCX0KKworCQkJLyogVGhlc2UgYXJlIG5lZWRlZCBmb3IgdGhlIGxldmVsIHNoaWZ0ZXIgKi8KKwkJCW9tYXBfY2ZnX3JlZyhWOV8xNjEwX01NQzJfQ01ERElSKTsKKwkJCW9tYXBfY2ZnX3JlZyhWNV8xNjEwX01NQzJfREFURElSMCk7CisJCQlvbWFwX2NmZ19yZWcoVzE5XzE2MTBfTU1DMl9EQVRESVIxKTsKKwkJfQorCisJCS8qIEZlZWRiYWNrIGNsb2NrIG11c3QgYmUgc2V0IG9uIE9NQVAtMTcxMCBNTUMyICovCisJCWlmIChjcHVfaXNfb21hcDE3MTAoKSkKKwkJCW9tYXBfd3JpdGVsKG9tYXBfcmVhZGwoTU9EX0NPTkZfQ1RSTF8xKSB8ICgxIDw8IDI0KSwKKwkJCQkgICAgIE1PRF9DT05GX0NUUkxfMSk7CisJCW1tYzJfY29uZiA9ICptbWM7CisJCSh2b2lkKSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm1tY19vbWFwX2RldmljZTIpOworCX0KKyNlbmRpZgorCXJldHVybjsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X21tYyh2b2lkKSB7fQorI2VuZGlmCisKKyNpZglkZWZpbmVkKENPTkZJR19PTUFQX1dBVENIRE9HKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX1dBVENIRE9HX01PRFVMRSkKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCisjZGVmaW5lCU9NQVBfV0RUX0JBU0UJCTB4NDgwMjIwMDAKKyNlbHNlCisjZGVmaW5lCU9NQVBfV0RUX0JBU0UJCTB4ZmZmZWIwMDAKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHdkdF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBPTUFQX1dEVF9CQVNFLAorCQkuZW5kCQk9IE9NQVBfV0RUX0JBU0UgKyAweDRmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfd2R0X2RldmljZSA9IHsKKwkubmFtZQkgICA9ICJvbWFwX3dkdCIsCisJLmlkCSAgICAgPSAtMSwKKwkuZGV2ID0geworCQkucmVsZWFzZQk9IG9tYXBfbm9wX3JlbGVhc2UsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUod2R0X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gd2R0X3Jlc291cmNlcywKK307CisKK3N0YXRpYyB2b2lkIG9tYXBfaW5pdF93ZHQodm9pZCkKK3sKKwkodm9pZCkgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwX3dkdF9kZXZpY2UpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfd2R0KHZvaWQpIHt9CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmCWRlZmluZWQoQ09ORklHX09NQVBfUk5HKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX1JOR19NT0RVTEUpCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjRYWAorI2RlZmluZQlPTUFQX1JOR19CQVNFCQkweDQ4MEEwMDAwCisjZWxzZQorI2RlZmluZQlPTUFQX1JOR19CQVNFCQkweGZmZmU1MDAwCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBybmdfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gT01BUF9STkdfQkFTRSwKKwkJLmVuZAkJPSBPTUFQX1JOR19CQVNFICsgMHg0ZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX3JuZ19kZXZpY2UgPSB7CisJLm5hbWUJICAgPSAib21hcF9ybmciLAorCS5pZAkgICAgID0gLTEsCisJLmRldiA9IHsKKwkJLnJlbGVhc2UJPSBvbWFwX25vcF9yZWxlYXNlLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJuZ19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHJuZ19yZXNvdXJjZXMsCit9OworCitzdGF0aWMgdm9pZCBvbWFwX2luaXRfcm5nKHZvaWQpCit7CisJKHZvaWQpIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF9ybmdfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X3JuZyh2b2lkKSB7fQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19GQl9PTUFQX01PRFVMRSkKKworc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgb21hcF9mYl9jb25mOworCitzdGF0aWMgdTY0IG9tYXBfZmJfZG1hX21hc2sgPSB+KHUzMikwOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX2ZiX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcGZiIiwKKwkuaWQJCT0gLTEsCisJLmRldiA9IHsKKwkJLnJlbGVhc2UJCT0gb21hcF9ub3BfcmVsZWFzZSwKKwkJLmRtYV9tYXNrCQk9ICZvbWFwX2ZiX2RtYV9tYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSB+KHUzMikwLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmb21hcF9mYl9jb25mLAorCX0sCisJLm51bV9yZXNvdXJjZXMgPSAwLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9mYih2b2lkKQoreworCWNvbnN0IHN0cnVjdCBvbWFwX2xjZF9jb25maWcgKmNvbmY7CisKKwljb25mID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX0xDRCwgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyk7CisJaWYgKGNvbmYgIT0gTlVMTCkKKwkJb21hcF9mYl9jb25mID0gKmNvbmY7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwX2ZiX2RldmljZSk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfZmIodm9pZCkge30KKworI2VuZGlmCisKKy8qCisgKiBUaGlzIGdldHMgY2FsbGVkIGFmdGVyIGJvYXJkLXNwZWNpZmljIElOSVRfTUFDSElORSwgYW5kIGluaXRpYWxpemVzIG1vc3QKKyAqIG9uLWNoaXAgcGVyaXBoZXJhbHMgYWNjZXNzaWJsZSBvbiB0aGlzIGJvYXJkIChleGNlcHQgZm9yIGZldyBsaWtlIFVTQik6CisgKgorICogIChhKSBEb2VzIGFueSAic3RhbmRhcmQgY29uZmlnIiBwaW4gbXV4aW5nIG5lZWRlZC4gIEJvYXJkLXNwZWNpZmljCisgKgljb2RlIHdpbGwgaGF2ZSBtdXhlZCBHUElPIHBpbnMgYW5kIGRvbmUgIm5vbnN0YW5kYXJkIiBzZXR1cDsKKyAqCXRoYXQgY29kZSBjb3VsZCBsaXZlIGluIHRoZSBib290IGxvYWRlci4KKyAqICAoYikgUG9wdWxhdGluZyBib2FyZC1zcGVjaWZpYyBwbGF0Zm9ybV9kYXRhIHdpdGggdGhlIGRhdGEgZHJpdmVycworICoJcmVseSBvbiB0byBoYW5kbGUgd2lyaW5nIHZhcmlhdGlvbnMuCisgKiAgKGMpIENyZWF0aW5nIHBsYXRmb3JtIGRldmljZXMgYXMgbWVhbmluZ2Z1bCBvbiB0aGlzIGJvYXJkIGFuZAorICoJd2l0aCB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uLgorICoKKyAqIENsYWltaW5nIEdQSU9zLCBhbmQgc2V0dGluZyB0aGVpciBkaXJlY3Rpb24gYW5kIGluaXRpYWwgdmFsdWVzLCBpcyB0aGUKKyAqIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBkZXZpY2UgZHJpdmVycy4gIFNvIGlzIHJlc3BvbmRpbmcgdG8gcHJvYmUoKS4KKyAqCisgKiBCb2FyZC1zcGVjaWZpYyBrbm93bGVnZSBsaWtlIGNyZWF0aW5nIGRldmljZXMgb3IgcGluIHNldHVwIGlzIHRvIGJlCisgKiBrZXB0IG91dCBvZiBkcml2ZXJzIGFzIG11Y2ggYXMgcG9zc2libGUuICBJbiBwYXJ0aWN1bGFyLCBwaW4gc2V0dXAKKyAqIG1heSBiZSBoYW5kbGVkIGJ5IHRoZSBib290IGxvYWRlciwgYW5kIGRyaXZlcnMgc2hvdWxkIGV4cGVjdCBpdCB3aWxsCisgKiBub3JtYWxseSBoYXZlIGJlZW4gZG9uZSBieSB0aGUgdGltZSB0aGV5J3JlIHByb2JlZC4KKyAqLworc3RhdGljIGludCBfX2luaXQgb21hcF9pbml0X2RldmljZXModm9pZCkKK3sKKwkvKiBwbGVhc2Uga2VlcCB0aGVzZSBjYWxscywgYW5kIHRoZWlyIGltcGxlbWVudGF0aW9ucyBhYm92ZSwKKwkgKiBpbiBhbHBoYWJldGljYWwgb3JkZXIgc28gdGhleSdyZSBlYXNpZXIgdG8gc29ydCB0aHJvdWdoLgorCSAqLworCW9tYXBfaW5pdF9mYigpOworCW9tYXBfaW5pdF9pMmMoKTsKKwlvbWFwX2luaXRfbW1jKCk7CisJb21hcF9pbml0X3dkdCgpOworCW9tYXBfaW5pdF9ybmcoKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChvbWFwX2luaXRfZGV2aWNlcyk7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwppbmRleCBkYTdiNjUxLi5mNWNjMjFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCkBAIC02LDYgKzYsOCBAQAogICogRE1BIGNoYW5uZWwgbGlua2luZyBmb3IgMTYxMCBieSBTYW11ZWwgT3J0aXogPHNhbXVlbC5vcnRpekBub2tpYS5jb20+CiAgKiBHcmFwaGljcyBETUEgYW5kIExDRCBETUEgZ3JhcGhpY3MgdHJhbmZvcm1hdGlvbnMKICAqIGJ5IEltcmUgRGVhayA8aW1yZS5kZWFrQG5va2lhLmNvbT4KKyAqIE9NQVAyIHN1cHBvcnQgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIE1lcmdlZCB0byBzdXBwb3J0IGJvdGggT01BUDEgYW5kIE9NQVAyIGJ5IFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CiAgKiBTb21lIGZ1bmN0aW9ucyBiYXNlZCBvbiBlYXJsaWVyIGRtYS1vbWFwLmMgQ29weXJpZ2h0IChDKSAyMDAxIFJpZGdlUnVuLCBJbmMuCiAgKgogICogU3VwcG9ydCBmdW5jdGlvbnMgZm9yIHRoZSBPTUFQIGludGVybmFsIERNQSBjaGFubmVscy4KQEAgLTMxLDggKzMzLDE1IEBACiAKICNpbmNsdWRlIDxhc20vYXJjaC90Yy5oPgogCi0jZGVmaW5lIE9NQVBfRE1BX0FDVElWRQkJMHgwMQorI2RlZmluZSBERUJVR19QUklOVFMKKyN1bmRlZiBERUJVR19QUklOVFMKKyNpZmRlZiBERUJVR19QUklOVFMKKyNkZWZpbmUgZGVidWdfcHJpbnRrKHgpIHByaW50ayB4CisjZWxzZQorI2RlZmluZQlkZWJ1Z19wcmludGsoeCkKKyNlbmRpZgogCisjZGVmaW5lIE9NQVBfRE1BX0FDVElWRQkJMHgwMQogI2RlZmluZSBPTUFQX0RNQV9DQ1JfRU4JCSgxIDw8IDcpCiAKICNkZWZpbmUgT01BUF9GVU5DX01VWF9BUk1fQkFTRQkoMHhmZmZlMTAwMCArIDB4ZWMpCkBAIC01NSw3ICs2NCw3IEBACiBzdGF0aWMgc3BpbmxvY2tfdCBkbWFfY2hhbl9sb2NrOwogc3RhdGljIHN0cnVjdCBvbWFwX2RtYV9sY2ggZG1hX2NoYW5bT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVF07CiAKLWNvbnN0IHN0YXRpYyB1OCBkbWFfaXJxW09NQVBfTE9HSUNBTF9ETUFfQ0hfQ09VTlRdID0geworY29uc3Qgc3RhdGljIHU4IG9tYXAxX2RtYV9pcnFbT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVF0gPSB7CiAJSU5UX0RNQV9DSDBfNiwgSU5UX0RNQV9DSDFfNywgSU5UX0RNQV9DSDJfOCwgSU5UX0RNQV9DSDMsCiAJSU5UX0RNQV9DSDQsIElOVF9ETUFfQ0g1LCBJTlRfMTYxMF9ETUFfQ0g2LCBJTlRfMTYxMF9ETUFfQ0g3LAogCUlOVF8xNjEwX0RNQV9DSDgsIElOVF8xNjEwX0RNQV9DSDksIElOVF8xNjEwX0RNQV9DSDEwLApAQCAtNjMsNiArNzIsMjAgQEAKIAlJTlRfMTYxMF9ETUFfQ0gxNCwgSU5UXzE2MTBfRE1BX0NIMTUsIElOVF9ETUFfTENECiB9OwogCisjZGVmaW5lIFJFVklTSVRfMjRYWCgpCQlwcmludGsoS0VSTl9FUlIgIkZJWE1FOiBubyAlcyBvbiAyNHh4XG4iLCBcCisJCQkJCQlfX0ZVTkNUSU9OX18pOworCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKKy8qIFJldHVybnMgMSBpZiB0aGUgRE1BIG1vZHVsZSBpcyBpbiBPTUFQMTUxMC1jb21wYXRpYmxlIG1vZGUsIDAgb3RoZXJ3aXNlICovCitpbnQgb21hcF9kbWFfaW5fMTUxMF9tb2RlKHZvaWQpCit7CisJcmV0dXJuIGVuYWJsZV8xNTEwX21vZGU7Cit9CisjZWxzZQorI2RlZmluZSBvbWFwX2RtYV9pbl8xNTEwX21vZGUoKQkJMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQogc3RhdGljIGlubGluZSBpbnQgZ2V0X2dkbWFfZGV2KGludCByZXEpCiB7CiAJdTMyIHJlZyA9IE9NQVBfRlVOQ19NVVhfQVJNX0JBU0UgKyAoKHJlcSAtIDEpIC8gNSkgKiA0OwpAQCAtODIsNiArMTA1LDkgQEAKIAlsIHw9IChkZXYgLSAxKSA8PCBzaGlmdDsKIAlvbWFwX3dyaXRlbChsLCByZWcpOwogfQorI2Vsc2UKKyNkZWZpbmUgc2V0X2dkbWFfZGV2KHJlcSwgZGV2KQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBjbGVhcl9sY2hfcmVncyhpbnQgbGNoKQogewpAQCAtMTIxLDM4ICsxNDcsNjIgQEAKIH0KIAogdm9pZCBvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKGludCBsY2gsIGludCBkYXRhX3R5cGUsIGludCBlbGVtX2NvdW50LAotCQkJCSAgaW50IGZyYW1lX2NvdW50LCBpbnQgc3luY19tb2RlKQorCQkJCSAgaW50IGZyYW1lX2NvdW50LCBpbnQgc3luY19tb2RlLAorCQkJCSAgaW50IGRtYV90cmlnZ2VyLCBpbnQgc3JjX29yX2RzdF9zeW5jaCkKIHsKLQl1MTYgdzsKKwlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpICY9IH4weDAzOworCU9NQVBfRE1BX0NTRFBfUkVHKGxjaCkgfD0gZGF0YV90eXBlOwogCi0JdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ1NEUChsY2gpKTsKLQl3ICY9IH4weDAzOwotCXcgfD0gZGF0YV90eXBlOwotCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0NTRFAobGNoKSk7CisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7CisJCU9NQVBfRE1BX0NDUl9SRUcobGNoKSAmPSB+KDEgPDwgNSk7CisJCWlmIChzeW5jX21vZGUgPT0gT01BUF9ETUFfU1lOQ19GUkFNRSkKKwkJCU9NQVBfRE1BX0NDUl9SRUcobGNoKSB8PSAxIDw8IDU7CiAKLQl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DQ1IobGNoKSk7Ci0JdyAmPSB+KDEgPDwgNSk7Ci0JaWYgKHN5bmNfbW9kZSA9PSBPTUFQX0RNQV9TWU5DX0ZSQU1FKQotCQl3IHw9IDEgPDwgNTsKLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DQ1IobGNoKSk7CisJCU9NQVAxX0RNQV9DQ1IyX1JFRyhsY2gpICY9IH4oMSA8PCAyKTsKKwkJaWYgKHN5bmNfbW9kZSA9PSBPTUFQX0RNQV9TWU5DX0JMT0NLKQorCQkJT01BUDFfRE1BX0NDUjJfUkVHKGxjaCkgfD0gMSA8PCAyOworCX0KIAotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NDUjIobGNoKSk7Ci0JdyAmPSB+KDEgPDwgMik7Ci0JaWYgKHN5bmNfbW9kZSA9PSBPTUFQX0RNQV9TWU5DX0JMT0NLKQotCQl3IHw9IDEgPDwgMjsKLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DQ1IyKGxjaCkpOworCWlmIChjcHVfaXNfb21hcDI0eHgoKSAmJiBkbWFfdHJpZ2dlcikgeworCQl1MzIgdmFsID0gT01BUF9ETUFfQ0NSX1JFRyhsY2gpOwogCi0Jb21hcF93cml0ZXcoZWxlbV9jb3VudCwgT01BUF9ETUFfQ0VOKGxjaCkpOwotCW9tYXBfd3JpdGV3KGZyYW1lX2NvdW50LCBPTUFQX0RNQV9DRk4obGNoKSk7CisJCWlmIChkbWFfdHJpZ2dlciA+IDYzKQorCQkJdmFsIHw9IDEgPDwgMjA7CisJCWlmIChkbWFfdHJpZ2dlciA+IDMxKQorCQkJdmFsIHw9IDEgPDwgMTk7CiAKKwkJdmFsIHw9IChkbWFfdHJpZ2dlciAmIDB4MWYpOworCisJCWlmIChzeW5jX21vZGUgJiBPTUFQX0RNQV9TWU5DX0ZSQU1FKQorCQkJdmFsIHw9IDEgPDwgNTsKKworCQlpZiAoc3luY19tb2RlICYgT01BUF9ETUFfU1lOQ19CTE9DSykKKwkJCXZhbCB8PSAxIDw8IDE4OworCisJCWlmIChzcmNfb3JfZHN0X3N5bmNoKQorCQkJdmFsIHw9IDEgPDwgMjQ7CQkvKiBzb3VyY2Ugc3luY2ggKi8KKwkJZWxzZQorCQkJdmFsICY9IH4oMSA8PCAyNCk7CS8qIGRlc3Qgc3luY2ggKi8KKworCQlPTUFQX0RNQV9DQ1JfUkVHKGxjaCkgPSB2YWw7CisJfQorCisJT01BUF9ETUFfQ0VOX1JFRyhsY2gpID0gZWxlbV9jb3VudDsKKwlPTUFQX0RNQV9DRk5fUkVHKGxjaCkgPSBmcmFtZV9jb3VudDsKIH0KKwogdm9pZCBvbWFwX3NldF9kbWFfY29sb3JfbW9kZShpbnQgbGNoLCBlbnVtIG9tYXBfZG1hX2NvbG9yX21vZGUgbW9kZSwgdTMyIGNvbG9yKQogewogCXUxNiB3OwogCiAJQlVHX09OKG9tYXBfZG1hX2luXzE1MTBfbW9kZSgpKTsKIAotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NDUjIobGNoKSkgJiB+MHgwMzsKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJUkVWSVNJVF8yNFhYKCk7CisJCXJldHVybjsKKwl9CisKKwl3ID0gT01BUDFfRE1BX0NDUjJfUkVHKGxjaCkgJiB+MHgwMzsKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIE9NQVBfRE1BX0NPTlNUQU5UX0ZJTEw6CiAJCXcgfD0gMHgwMTsKQEAgLTE2NSw2MyArMjE1LDg0IEBACiAJZGVmYXVsdDoKIAkJQlVHKCk7CiAJfQotCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0NDUjIobGNoKSk7CisJT01BUDFfRE1BX0NDUjJfUkVHKGxjaCkgPSB3OwogCi0JdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfTENIX0NUUkwobGNoKSkgJiB+MHgwZjsKKwl3ID0gT01BUDFfRE1BX0xDSF9DVFJMX1JFRyhsY2gpICYgfjB4MGY7CiAJLyogRGVmYXVsdCBpcyBjaGFubmVsIHR5cGUgMkQgKi8KIAlpZiAobW9kZSkgewotCQlvbWFwX3dyaXRldygodTE2KWNvbG9yLCBPTUFQX0RNQV9DT0xPUl9MKGxjaCkpOwotCQlvbWFwX3dyaXRldygodTE2KShjb2xvciA+PiAxNiksIE9NQVBfRE1BX0NPTE9SX1UobGNoKSk7CisJCU9NQVAxX0RNQV9DT0xPUl9MX1JFRyhsY2gpID0gKHUxNiljb2xvcjsKKwkJT01BUDFfRE1BX0NPTE9SX1VfUkVHKGxjaCkgPSAodTE2KShjb2xvciA+PiAxNik7CiAJCXcgfD0gMTsJCS8qIENoYW5uZWwgdHlwZSBHICovCiAJfQotCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0xDSF9DVFJMKGxjaCkpOworCU9NQVAxX0RNQV9MQ0hfQ1RSTF9SRUcobGNoKSA9IHc7CiB9CiAKLQorLyogTm90ZSB0aGF0IHNyY19wb3J0IGlzIG9ubHkgZm9yIG9tYXAxICovCiB2b2lkIG9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKGludCBsY2gsIGludCBzcmNfcG9ydCwgaW50IHNyY19hbW9kZSwKLQkJCSAgICAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQpCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LAorCQkJICAgICBpbnQgc3JjX2VpLCBpbnQgc3JjX2ZpKQogewotCXUxNiB3OworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpICY9IH4oMHgxZiA8PCAyKTsKKwkJT01BUF9ETUFfQ1NEUF9SRUcobGNoKSB8PSBzcmNfcG9ydCA8PCAyOworCX0KIAotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NTRFAobGNoKSk7Ci0JdyAmPSB+KDB4MWYgPDwgMik7Ci0JdyB8PSBzcmNfcG9ydCA8PCAyOwotCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0NTRFAobGNoKSk7CisJT01BUF9ETUFfQ0NSX1JFRyhsY2gpICY9IH4oMHgwMyA8PCAxMik7CisJT01BUF9ETUFfQ0NSX1JFRyhsY2gpIHw9IHNyY19hbW9kZSA8PCAxMjsKIAotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NDUihsY2gpKTsKLQl3ICY9IH4oMHgwMyA8PCAxMik7Ci0JdyB8PSBzcmNfYW1vZGUgPDwgMTI7Ci0Jb21hcF93cml0ZXcodywgT01BUF9ETUFfQ0NSKGxjaCkpOworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlPTUFQMV9ETUFfQ1NTQV9VX1JFRyhsY2gpID0gc3JjX3N0YXJ0ID4+IDE2OworCQlPTUFQMV9ETUFfQ1NTQV9MX1JFRyhsY2gpID0gc3JjX3N0YXJ0OworCX0KIAotCW9tYXBfd3JpdGV3KHNyY19zdGFydCA+PiAxNiwgT01BUF9ETUFfQ1NTQV9VKGxjaCkpOwotCW9tYXBfd3JpdGV3KHNyY19zdGFydCwgT01BUF9ETUFfQ1NTQV9MKGxjaCkpOworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJT01BUDJfRE1BX0NTU0FfUkVHKGxjaCkgPSBzcmNfc3RhcnQ7CisKKwlPTUFQX0RNQV9DU0VJX1JFRyhsY2gpID0gc3JjX2VpOworCU9NQVBfRE1BX0NTRklfUkVHKGxjaCkgPSBzcmNfZmk7Cit9CisKK3ZvaWQgb21hcF9zZXRfZG1hX3BhcmFtcyhpbnQgbGNoLCBzdHJ1Y3Qgb21hcF9kbWFfY2hhbm5lbF9wYXJhbXMgKiBwYXJhbXMpCit7CisJb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhsY2gsIHBhcmFtcy0+ZGF0YV90eXBlLAorCQkJCSAgICAgcGFyYW1zLT5lbGVtX2NvdW50LCBwYXJhbXMtPmZyYW1lX2NvdW50LAorCQkJCSAgICAgcGFyYW1zLT5zeW5jX21vZGUsIHBhcmFtcy0+dHJpZ2dlciwKKwkJCQkgICAgIHBhcmFtcy0+c3JjX29yX2RzdF9zeW5jaCk7CisJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMobGNoLCBwYXJhbXMtPnNyY19wb3J0LAorCQkJCXBhcmFtcy0+c3JjX2Ftb2RlLCBwYXJhbXMtPnNyY19zdGFydCwKKwkJCQlwYXJhbXMtPnNyY19laSwgcGFyYW1zLT5zcmNfZmkpOworCisJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKGxjaCwgcGFyYW1zLT5kc3RfcG9ydCwKKwkJCQkgcGFyYW1zLT5kc3RfYW1vZGUsIHBhcmFtcy0+ZHN0X3N0YXJ0LAorCQkJCSBwYXJhbXMtPmRzdF9laSwgcGFyYW1zLT5kc3RfZmkpOwogfQogCiB2b2lkIG9tYXBfc2V0X2RtYV9zcmNfaW5kZXgoaW50IGxjaCwgaW50IGVpZHgsIGludCBmaWR4KQogewotCW9tYXBfd3JpdGV3KGVpZHgsIE9NQVBfRE1BX0NTRUkobGNoKSk7Ci0Jb21hcF93cml0ZXcoZmlkeCwgT01BUF9ETUFfQ1NGSShsY2gpKTsKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJUkVWSVNJVF8yNFhYKCk7CisJCXJldHVybjsKKwl9CisJT01BUF9ETUFfQ1NFSV9SRUcobGNoKSA9IGVpZHg7CisJT01BUF9ETUFfQ1NGSV9SRUcobGNoKSA9IGZpZHg7CiB9CiAKIHZvaWQgb21hcF9zZXRfZG1hX3NyY19kYXRhX3BhY2soaW50IGxjaCwgaW50IGVuYWJsZSkKIHsKLQl1MTYgdzsKLQotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NTRFAobGNoKSkgJiB+KDEgPDwgNik7Ci0JdyB8PSBlbmFibGUgPyAoMSA8PCA2KSA6IDA7Ci0Jb21hcF93cml0ZXcodywgT01BUF9ETUFfQ1NEUChsY2gpKTsKKwlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpICY9IH4oMSA8PCA2KTsKKwlpZiAoZW5hYmxlKQorCQlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpIHw9ICgxIDw8IDYpOwogfQogCiB2b2lkIG9tYXBfc2V0X2RtYV9zcmNfYnVyc3RfbW9kZShpbnQgbGNoLCBlbnVtIG9tYXBfZG1hX2J1cnN0X21vZGUgYnVyc3RfbW9kZSkKIHsKLQl1MTYgdzsKKwlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpICY9IH4oMHgwMyA8PCA3KTsKIAotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NTRFAobGNoKSkgJiB+KDB4MDMgPDwgNyk7CiAJc3dpdGNoIChidXJzdF9tb2RlKSB7CiAJY2FzZSBPTUFQX0RNQV9EQVRBX0JVUlNUX0RJUzoKIAkJYnJlYWs7CiAJY2FzZSBPTUFQX0RNQV9EQVRBX0JVUlNUXzQ6Ci0JCXcgfD0gKDB4MDEgPDwgNyk7CisJCU9NQVBfRE1BX0NTRFBfUkVHKGxjaCkgfD0gKDB4MDIgPDwgNyk7CiAJCWJyZWFrOwogCWNhc2UgT01BUF9ETUFfREFUQV9CVVJTVF84OgogCQkvKiBub3Qgc3VwcG9ydGVkIGJ5IGN1cnJlbnQgaGFyZHdhcmUKQEAgLTIzMSwxNzUgKzMwMiw4NyBAQAogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DU0RQKGxjaCkpOwogfQogCisvKiBOb3RlIHRoYXQgZGVzdF9wb3J0IGlzIG9ubHkgZm9yIE9NQVAxICovCiB2b2lkIG9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhpbnQgbGNoLCBpbnQgZGVzdF9wb3J0LCBpbnQgZGVzdF9hbW9kZSwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZGVzdF9zdGFydCkKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZGVzdF9zdGFydCwKKwkJCSAgICAgIGludCBkc3RfZWksIGludCBkc3RfZmkpCiB7Ci0JdTE2IHc7CisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7CisJCU9NQVBfRE1BX0NTRFBfUkVHKGxjaCkgJj0gfigweDFmIDw8IDkpOworCQlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpIHw9IGRlc3RfcG9ydCA8PCA5OworCX0KIAotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NTRFAobGNoKSk7Ci0JdyAmPSB+KDB4MWYgPDwgOSk7Ci0JdyB8PSBkZXN0X3BvcnQgPDwgOTsKLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DU0RQKGxjaCkpOworCU9NQVBfRE1BX0NDUl9SRUcobGNoKSAmPSB+KDB4MDMgPDwgMTQpOworCU9NQVBfRE1BX0NDUl9SRUcobGNoKSB8PSBkZXN0X2Ftb2RlIDw8IDE0OwogCi0JdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ0NSKGxjaCkpOwotCXcgJj0gfigweDAzIDw8IDE0KTsKLQl3IHw9IGRlc3RfYW1vZGUgPDwgMTQ7Ci0Jb21hcF93cml0ZXcodywgT01BUF9ETUFfQ0NSKGxjaCkpOworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlPTUFQMV9ETUFfQ0RTQV9VX1JFRyhsY2gpID0gZGVzdF9zdGFydCA+PiAxNjsKKwkJT01BUDFfRE1BX0NEU0FfTF9SRUcobGNoKSA9IGRlc3Rfc3RhcnQ7CisJfQogCi0Jb21hcF93cml0ZXcoZGVzdF9zdGFydCA+PiAxNiwgT01BUF9ETUFfQ0RTQV9VKGxjaCkpOwotCW9tYXBfd3JpdGV3KGRlc3Rfc3RhcnQsIE9NQVBfRE1BX0NEU0FfTChsY2gpKTsKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCU9NQVAyX0RNQV9DRFNBX1JFRyhsY2gpID0gZGVzdF9zdGFydDsKKworCU9NQVBfRE1BX0NERUlfUkVHKGxjaCkgPSBkc3RfZWk7CisJT01BUF9ETUFfQ0RGSV9SRUcobGNoKSA9IGRzdF9maTsKIH0KIAogdm9pZCBvbWFwX3NldF9kbWFfZGVzdF9pbmRleChpbnQgbGNoLCBpbnQgZWlkeCwgaW50IGZpZHgpCiB7Ci0Jb21hcF93cml0ZXcoZWlkeCwgT01BUF9ETUFfQ0RFSShsY2gpKTsKLQlvbWFwX3dyaXRldyhmaWR4LCBPTUFQX0RNQV9DREZJKGxjaCkpOworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlSRVZJU0lUXzI0WFgoKTsKKwkJcmV0dXJuOworCX0KKwlPTUFQX0RNQV9DREVJX1JFRyhsY2gpID0gZWlkeDsKKwlPTUFQX0RNQV9DREZJX1JFRyhsY2gpID0gZmlkeDsKIH0KIAogdm9pZCBvbWFwX3NldF9kbWFfZGVzdF9kYXRhX3BhY2soaW50IGxjaCwgaW50IGVuYWJsZSkKIHsKLQl1MTYgdzsKLQotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NTRFAobGNoKSkgJiB+KDEgPDwgMTMpOwotCXcgfD0gZW5hYmxlID8gKDEgPDwgMTMpIDogMDsKLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DU0RQKGxjaCkpOworCU9NQVBfRE1BX0NTRFBfUkVHKGxjaCkgJj0gfigxIDw8IDEzKTsKKwlpZiAoZW5hYmxlKQorCQlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpIHw9IDEgPDwgMTM7CiB9CiAKIHZvaWQgb21hcF9zZXRfZG1hX2Rlc3RfYnVyc3RfbW9kZShpbnQgbGNoLCBlbnVtIG9tYXBfZG1hX2J1cnN0X21vZGUgYnVyc3RfbW9kZSkKIHsKLQl1MTYgdzsKKwlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpICY9IH4oMHgwMyA8PCAxNCk7CiAKLQl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DU0RQKGxjaCkpICYgfigweDAzIDw8IDE0KTsKIAlzd2l0Y2ggKGJ1cnN0X21vZGUpIHsKIAljYXNlIE9NQVBfRE1BX0RBVEFfQlVSU1RfRElTOgogCQlicmVhazsKIAljYXNlIE9NQVBfRE1BX0RBVEFfQlVSU1RfNDoKLQkJdyB8PSAoMHgwMSA8PCAxNCk7CisJCU9NQVBfRE1BX0NTRFBfUkVHKGxjaCkgfD0gKDB4MDIgPDwgMTQpOwogCQlicmVhazsKIAljYXNlIE9NQVBfRE1BX0RBVEFfQlVSU1RfODoKLQkJdyB8PSAoMHgwMyA8PCAxNCk7CisJCU9NQVBfRE1BX0NTRFBfUkVHKGxjaCkgfD0gKDB4MDMgPDwgMTQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgRE1BIGJ1cnN0IG1vZGVcbiIpOwogCQlCVUcoKTsKIAkJcmV0dXJuOwogCX0KLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DU0RQKGxjaCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9pbnRyKGludCBsY2gpCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9lbmFibGVfY2hhbm5lbF9pcnEoaW50IGxjaCkKIHsKLQl1MTYgdzsKKwl1MzIgc3RhdHVzOwogCiAJLyogUmVhZCBDU1IgdG8gbWFrZSBzdXJlIGl0J3MgY2xlYXJlZC4gKi8KLQl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DU1IobGNoKSk7CisJc3RhdHVzID0gT01BUF9ETUFfQ1NSX1JFRyhsY2gpOworCiAJLyogRW5hYmxlIHNvbWUgbmljZSBpbnRlcnJ1cHRzLiAqLwotCW9tYXBfd3JpdGV3KGRtYV9jaGFuW2xjaF0uZW5hYmxlZF9pcnFzLCBPTUFQX0RNQV9DSUNSKGxjaCkpOworCU9NQVBfRE1BX0NJQ1JfUkVHKGxjaCkgPSBkbWFfY2hhbltsY2hdLmVuYWJsZWRfaXJxczsKKwogCWRtYV9jaGFuW2xjaF0uZmxhZ3MgfD0gT01BUF9ETUFfQUNUSVZFOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2xuayhpbnQgbGNoKQorc3RhdGljIHZvaWQgb21hcF9kaXNhYmxlX2NoYW5uZWxfaXJxKGludCBsY2gpCiB7Ci0JdTE2IHc7Ci0KLQkvKiBDbGVhciB0aGUgU1RPUF9MTksgYml0cyAqLwotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NMTktfQ1RSTChsY2gpKTsKLQl3ICY9IH4oMSA8PCAxNCk7Ci0Jb21hcF93cml0ZXcodywgT01BUF9ETUFfQ0xOS19DVFJMKGxjaCkpOwotCi0JLyogQW5kIHNldCB0aGUgRU5BQkxFX0xOSyBiaXRzICovCi0JaWYgKGRtYV9jaGFuW2xjaF0ubmV4dF9sY2ggIT0gLTEpCi0JCW9tYXBfd3JpdGV3KGRtYV9jaGFuW2xjaF0ubmV4dF9sY2ggfCAoMSA8PCAxNSksCi0JCQkgICAgT01BUF9ETUFfQ0xOS19DVFJMKGxjaCkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9sbmsoaW50IGxjaCkKLXsKLQl1MTYgdzsKLQotCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLwotCW9tYXBfd3JpdGV3KDAsIE9NQVBfRE1BX0NJQ1IobGNoKSk7Ci0KLQkvKiBTZXQgdGhlIFNUT1BfTE5LIGJpdCAqLwotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NMTktfQ1RSTChsY2gpKTsKLQl3IHw9ICgxIDw8IDE0KTsKLQl3ID0gb21hcF93cml0ZXcodywgT01BUF9ETUFfQ0xOS19DVFJMKGxjaCkpOwotCi0JZG1hX2NoYW5bbGNoXS5mbGFncyAmPSB+T01BUF9ETUFfQUNUSVZFOwotfQotCi12b2lkIG9tYXBfc3RhcnRfZG1hKGludCBsY2gpCi17Ci0JdTE2IHc7Ci0KLQlpZiAoIW9tYXBfZG1hX2luXzE1MTBfbW9kZSgpICYmIGRtYV9jaGFuW2xjaF0ubmV4dF9sY2ggIT0gLTEpIHsKLQkJaW50IG5leHRfbGNoLCBjdXJfbGNoOwotCQljaGFyIGRtYV9jaGFuX2xpbmtfbWFwW09NQVBfTE9HSUNBTF9ETUFfQ0hfQ09VTlRdOwotCi0JCWRtYV9jaGFuX2xpbmtfbWFwW2xjaF0gPSAxOwotCQkvKiBTZXQgdGhlIGxpbmsgcmVnaXN0ZXIgb2YgdGhlIGZpcnN0IGNoYW5uZWwgKi8KLQkJZW5hYmxlX2xuayhsY2gpOwotCi0JCW1lbXNldChkbWFfY2hhbl9saW5rX21hcCwgMCwgc2l6ZW9mKGRtYV9jaGFuX2xpbmtfbWFwKSk7Ci0JCWN1cl9sY2ggPSBkbWFfY2hhbltsY2hdLm5leHRfbGNoOwotCQlkbyB7Ci0JCQluZXh0X2xjaCA9IGRtYV9jaGFuW2N1cl9sY2hdLm5leHRfbGNoOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgbG9vcCBjYXNlOiB3ZSd2ZSBiZWVuIGhlcmUgYWxyZWFkeSAqLwotCQkJaWYgKGRtYV9jaGFuX2xpbmtfbWFwW2N1cl9sY2hdKQotCQkJCWJyZWFrOwotCQkJLyogTWFyayB0aGUgY3VycmVudCBjaGFubmVsICovCi0JCQlkbWFfY2hhbl9saW5rX21hcFtjdXJfbGNoXSA9IDE7Ci0KLQkJCWVuYWJsZV9sbmsoY3VyX2xjaCk7Ci0JCQlpbml0X2ludHIoY3VyX2xjaCk7Ci0KLQkJCWN1cl9sY2ggPSBuZXh0X2xjaDsKLQkJfSB3aGlsZSAobmV4dF9sY2ggIT0gLTEpOwotCX0KLQotCWluaXRfaW50cihsY2gpOwotCi0JdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ0NSKGxjaCkpOwotCXcgfD0gT01BUF9ETUFfQ0NSX0VOOwotCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0NDUihsY2gpKTsKLQlkbWFfY2hhbltsY2hdLmZsYWdzIHw9IE9NQVBfRE1BX0FDVElWRTsKLX0KLQotdm9pZCBvbWFwX3N0b3BfZG1hKGludCBsY2gpCi17Ci0JdTE2IHc7Ci0KLQlpZiAoIW9tYXBfZG1hX2luXzE1MTBfbW9kZSgpICYmIGRtYV9jaGFuW2xjaF0ubmV4dF9sY2ggIT0gLTEpIHsKLQkJaW50IG5leHRfbGNoLCBjdXJfbGNoID0gbGNoOwotCQljaGFyIGRtYV9jaGFuX2xpbmtfbWFwW09NQVBfTE9HSUNBTF9ETUFfQ0hfQ09VTlRdOwotCi0JCW1lbXNldChkbWFfY2hhbl9saW5rX21hcCwgMCwgc2l6ZW9mKGRtYV9jaGFuX2xpbmtfbWFwKSk7Ci0JCWRvIHsKLQkJCS8qIFRoZSBsb29wIGNhc2U6IHdlJ3ZlIGJlZW4gaGVyZSBhbHJlYWR5ICovCi0JCQlpZiAoZG1hX2NoYW5fbGlua19tYXBbY3VyX2xjaF0pCi0JCQkJYnJlYWs7Ci0JCQkvKiBNYXJrIHRoZSBjdXJyZW50IGNoYW5uZWwgKi8KLQkJCWRtYV9jaGFuX2xpbmtfbWFwW2N1cl9sY2hdID0gMTsKLQotCQkJZGlzYWJsZV9sbmsoY3VyX2xjaCk7Ci0KLQkJCW5leHRfbGNoID0gZG1hX2NoYW5bY3VyX2xjaF0ubmV4dF9sY2g7Ci0JCQljdXJfbGNoID0gbmV4dF9sY2g7Ci0JCX0gd2hpbGUgKG5leHRfbGNoICE9IC0xKTsKLQotCQlyZXR1cm47Ci0JfQotCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgb24gdGhlIGNoYW5uZWwgKi8KLQlvbWFwX3dyaXRldygwLCBPTUFQX0RNQV9DSUNSKGxjaCkpOwotCi0JdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ0NSKGxjaCkpOwotCXcgJj0gfk9NQVBfRE1BX0NDUl9FTjsKLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DQ1IobGNoKSk7Ci0JZG1hX2NoYW5bbGNoXS5mbGFncyAmPSB+T01BUF9ETUFfQUNUSVZFOworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJT01BUF9ETUFfQ0lDUl9SRUcobGNoKSA9IDA7CiB9CiAKIHZvaWQgb21hcF9lbmFibGVfZG1hX2lycShpbnQgbGNoLCB1MTYgYml0cykKQEAgLTQxMiw1NSArMzk1LDQ1IEBACiAJZG1hX2NoYW5bbGNoXS5lbmFibGVkX2lycXMgJj0gfmJpdHM7CiB9CiAKLXN0YXRpYyBpbnQgZG1hX2hhbmRsZV9jaChpbnQgY2gpCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2xuayhpbnQgbGNoKQogewotCXUxNiBjc3I7CisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQorCQlPTUFQX0RNQV9DTE5LX0NUUkxfUkVHKGxjaCkgJj0gfigxIDw8IDE0KTsKIAotCWlmIChlbmFibGVfMTUxMF9tb2RlICYmIGNoID49IDYpIHsKLQkJY3NyID0gZG1hX2NoYW5bY2hdLnNhdmVkX2NzcjsKLQkJZG1hX2NoYW5bY2hdLnNhdmVkX2NzciA9IDA7Ci0JfSBlbHNlCi0JCWNzciA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ1NSKGNoKSk7Ci0JaWYgKGVuYWJsZV8xNTEwX21vZGUgJiYgY2ggPD0gMiAmJiAoY3NyID4+IDcpICE9IDApIHsKLQkJZG1hX2NoYW5bY2ggKyA2XS5zYXZlZF9jc3IgPSBjc3IgPj4gNzsKLQkJY3NyICY9IDB4N2Y7Ci0JfQotCWlmICgoY3NyICYgMHgzZikgPT0gMCkKLQkJcmV0dXJuIDA7Ci0JaWYgKHVubGlrZWx5KGRtYV9jaGFuW2NoXS5kZXZfaWQgPT0gLTEpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlNwdXJpb3VzIGludGVycnVwdCBmcm9tIERNQSBjaGFubmVsICVkIChDU1IgJTA0eClcbiIsCi0JCSAgICAgICBjaCwgY3NyKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmICh1bmxpa2VseShjc3IgJiBPTUFQX0RNQV9UT1VUX0lSUSkpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkRNQSB0aW1lb3V0IHdpdGggZGV2aWNlICVkXG4iLCBkbWFfY2hhbltjaF0uZGV2X2lkKTsKLQlpZiAodW5saWtlbHkoY3NyICYgT01BUF9ETUFfRFJPUF9JUlEpKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJETUEgc3luY2hyb25pemF0aW9uIGV2ZW50IGRyb3Agb2NjdXJyZWQgd2l0aCBkZXZpY2UgJWRcbiIsCi0JCSAgICAgICBkbWFfY2hhbltjaF0uZGV2X2lkKTsKLQlpZiAobGlrZWx5KGNzciAmIE9NQVBfRE1BX0JMT0NLX0lSUSkpCi0JCWRtYV9jaGFuW2NoXS5mbGFncyAmPSB+T01BUF9ETUFfQUNUSVZFOwotCWlmIChsaWtlbHkoZG1hX2NoYW5bY2hdLmNhbGxiYWNrICE9IE5VTEwpKQotCQlkbWFfY2hhbltjaF0uY2FsbGJhY2soY2gsIGNzciwgZG1hX2NoYW5bY2hdLmRhdGEpOwotCXJldHVybiAxOworCS8qIFNldCB0aGUgRU5BQkxFX0xOSyBiaXRzICovCisJaWYgKGRtYV9jaGFuW2xjaF0ubmV4dF9sY2ggIT0gLTEpCisJCU9NQVBfRE1BX0NMTktfQ1RSTF9SRUcobGNoKSA9CisJCQlkbWFfY2hhbltsY2hdLm5leHRfbGNoIHwgKDEgPDwgMTUpOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9sbmsoaW50IGxjaCkKIHsKLQlpbnQgY2ggPSAoKGludCkgZGV2X2lkKSAtIDE7Ci0JaW50IGhhbmRsZWQgPSAwOwotCi0JZm9yICg7OykgewotCQlpbnQgaGFuZGxlZF9ub3cgPSAwOwotCi0JCWhhbmRsZWRfbm93ICs9IGRtYV9oYW5kbGVfY2goY2gpOwotCQlpZiAoZW5hYmxlXzE1MTBfbW9kZSAmJiBkbWFfY2hhbltjaCArIDZdLnNhdmVkX2NzcikKLQkJCWhhbmRsZWRfbm93ICs9IGRtYV9oYW5kbGVfY2goY2ggKyA2KTsKLQkJaWYgKCFoYW5kbGVkX25vdykKLQkJCWJyZWFrOwotCQloYW5kbGVkICs9IGhhbmRsZWRfbm93OworCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlPTUFQX0RNQV9DSUNSX1JFRyhsY2gpID0gMDsKKwkJLyogU2V0IHRoZSBTVE9QX0xOSyBiaXQgKi8KKwkJT01BUF9ETUFfQ0xOS19DVFJMX1JFRyhsY2gpIHw9IDEgPDwgMTQ7CiAJfQogCi0JcmV0dXJuIGhhbmRsZWQgPyBJUlFfSEFORExFRCA6IElSUV9OT05FOworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlvbWFwX2Rpc2FibGVfY2hhbm5lbF9pcnEobGNoKTsKKwkJLyogQ2xlYXIgdGhlIEVOQUJMRV9MTksgYml0ICovCisJCU9NQVBfRE1BX0NMTktfQ1RSTF9SRUcobGNoKSAmPSB+KDEgPDwgMTUpOworCX0KKworCWRtYV9jaGFuW2xjaF0uZmxhZ3MgJj0gfk9NQVBfRE1BX0FDVElWRTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX2VuYWJsZV9pcnFfbGNoKGludCBsY2gpCit7CisJdTMyIHZhbDsKKworCWlmICghY3B1X2lzX29tYXAyNHh4KCkpCisJCXJldHVybjsKKworCXZhbCA9IG9tYXBfcmVhZGwoT01BUF9ETUE0X0lSUUVOQUJMRV9MMCk7CisJdmFsIHw9IDEgPDwgbGNoOworCW9tYXBfd3JpdGVsKHZhbCwgT01BUF9ETUE0X0lSUUVOQUJMRV9MMCk7CiB9CiAKIGludCBvbWFwX3JlcXVlc3RfZG1hKGludCBkZXZfaWQsIGNvbnN0IGNoYXIgKmRldl9uYW1lLApAQCAtNDg1LDE0ICs0NTgsMjMgQEAKIAl9CiAJY2hhbiA9IGRtYV9jaGFuICsgZnJlZV9jaDsKIAljaGFuLT5kZXZfaWQgPSBkZXZfaWQ7Ci0JY2xlYXJfbGNoX3JlZ3MoZnJlZV9jaCk7CisKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCisJCWNsZWFyX2xjaF9yZWdzKGZyZWVfY2gpOworCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQlvbWFwX2NsZWFyX2RtYShmcmVlX2NoKTsKKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9jaGFuX2xvY2ssIGZsYWdzKTsKIAotCWNoYW4tPmRldl9pZCA9IGRldl9pZDsKIAljaGFuLT5kZXZfbmFtZSA9IGRldl9uYW1lOwogCWNoYW4tPmNhbGxiYWNrID0gY2FsbGJhY2s7CiAJY2hhbi0+ZGF0YSA9IGRhdGE7Ci0JY2hhbi0+ZW5hYmxlZF9pcnFzID0gT01BUF9ETUFfVE9VVF9JUlEgfCBPTUFQX0RNQV9EUk9QX0lSUSB8IE9NQVBfRE1BX0JMT0NLX0lSUTsKKwljaGFuLT5lbmFibGVkX2lycXMgPSBPTUFQX0RNQV9UT1VUX0lSUSB8IE9NQVBfRE1BX0RST1BfSVJRIHwKKwkJCQlPTUFQX0RNQV9CTE9DS19JUlE7CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCWNoYW4tPmVuYWJsZWRfaXJxcyB8PSBPTUFQMl9ETUFfVFJBTlNfRVJSX0lSUTsKIAogCWlmIChjcHVfaXNfb21hcDE2eHgoKSkgewogCQkvKiBJZiB0aGUgc3luYyBkZXZpY2UgaXMgc2V0LCBjb25maWd1cmUgaXQgZHluYW1pY2FsbHkuICovCkBAIC01MDIsMzcgKzQ4NCwyNDIgQEAKIAkJfQogCQkvKiBEaXNhYmxlIHRoZSAxNTEwIGNvbXBhdGliaWxpdHkgbW9kZSBhbmQgc2V0IHRoZSBzeW5jIGRldmljZQogCQkgKiBpZC4gKi8KLQkJb21hcF93cml0ZXcoZGV2X2lkIHwgKDEgPDwgMTApLCBPTUFQX0RNQV9DQ1IoZnJlZV9jaCkpOwotCX0gZWxzZSB7Ci0JCW9tYXBfd3JpdGV3KGRldl9pZCwgT01BUF9ETUFfQ0NSKGZyZWVfY2gpKTsKKwkJT01BUF9ETUFfQ0NSX1JFRyhmcmVlX2NoKSA9IGRldl9pZCB8ICgxIDw8IDEwKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNzMwKCkgfHwgY3B1X2lzX29tYXAxNXh4KCkpIHsKKwkJT01BUF9ETUFfQ0NSX1JFRyhmcmVlX2NoKSA9IGRldl9pZDsKIAl9CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJb21hcDJfZW5hYmxlX2lycV9sY2goZnJlZV9jaCk7CisKKwkJb21hcF9lbmFibGVfY2hhbm5lbF9pcnEoZnJlZV9jaCk7CisJCS8qIENsZWFyIHRoZSBDU1IgcmVnaXN0ZXIgYW5kIElSUSBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJT01BUF9ETUFfQ1NSX1JFRyhmcmVlX2NoKSA9IDB4MDsKKwkJb21hcF93cml0ZWwofjB4MCwgT01BUF9ETUE0X0lSUVNUQVRVU19MMCk7CisJfQorCiAJKmRtYV9jaF9vdXQgPSBmcmVlX2NoOwogCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgb21hcF9mcmVlX2RtYShpbnQgY2gpCit2b2lkIG9tYXBfZnJlZV9kbWEoaW50IGxjaCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRtYV9jaGFuX2xvY2ssIGZsYWdzKTsKLQlpZiAoZG1hX2NoYW5bY2hdLmRldl9pZCA9PSAtMSkgewotCQlwcmludGsoIm9tYXBfZG1hOiB0cnlpbmcgdG8gZnJlZSBub25hbGxvY2F0ZWQgRE1BIGNoYW5uZWwgJWRcbiIsIGNoKTsKKwlpZiAoZG1hX2NoYW5bbGNoXS5kZXZfaWQgPT0gLTEpIHsKKwkJcHJpbnRrKCJvbWFwX2RtYTogdHJ5aW5nIHRvIGZyZWUgbm9uYWxsb2NhdGVkIERNQSBjaGFubmVsICVkXG4iLAorCQkgICAgICAgbGNoKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hX2NoYW5fbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQotCWRtYV9jaGFuW2NoXS5kZXZfaWQgPSAtMTsKKwlkbWFfY2hhbltsY2hdLmRldl9pZCA9IC0xOworCWRtYV9jaGFuW2xjaF0ubmV4dF9sY2ggPSAtMTsKKwlkbWFfY2hhbltsY2hdLmNhbGxiYWNrID0gTlVMTDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFfY2hhbl9sb2NrLCBmbGFncyk7CiAKLQkvKiBEaXNhYmxlIGFsbCBETUEgaW50ZXJydXB0cyBmb3IgdGhlIGNoYW5uZWwuICovCi0Jb21hcF93cml0ZXcoMCwgT01BUF9ETUFfQ0lDUihjaCkpOwotCS8qIE1ha2Ugc3VyZSB0aGUgRE1BIHRyYW5zZmVyIGlzIHN0b3BwZWQuICovCi0Jb21hcF93cml0ZXcoMCwgT01BUF9ETUFfQ0NSKGNoKSk7CisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7CisJCS8qIERpc2FibGUgYWxsIERNQSBpbnRlcnJ1cHRzIGZvciB0aGUgY2hhbm5lbC4gKi8KKwkJT01BUF9ETUFfQ0lDUl9SRUcobGNoKSA9IDA7CisJCS8qIE1ha2Ugc3VyZSB0aGUgRE1BIHRyYW5zZmVyIGlzIHN0b3BwZWQuICovCisJCU9NQVBfRE1BX0NDUl9SRUcobGNoKSA9IDA7CisJfQorCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCXUzMiB2YWw7CisJCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCQl2YWwgPSBvbWFwX3JlYWRsKE9NQVBfRE1BNF9JUlFFTkFCTEVfTDApOworCQl2YWwgJj0gfigxIDw8IGxjaCk7CisJCW9tYXBfd3JpdGVsKHZhbCwgT01BUF9ETUE0X0lSUUVOQUJMRV9MMCk7CisKKwkJLyogQ2xlYXIgdGhlIENTUiByZWdpc3RlciBhbmQgSVJRIHN0YXR1cyByZWdpc3RlciAqLworCQlPTUFQX0RNQV9DU1JfUkVHKGxjaCkgPSAweDA7CisKKwkJdmFsID0gb21hcF9yZWFkbChPTUFQX0RNQTRfSVJRU1RBVFVTX0wwKTsKKwkJdmFsIHw9IDEgPDwgbGNoOworCQlvbWFwX3dyaXRlbCh2YWwsIE9NQVBfRE1BNF9JUlFTVEFUVVNfTDApOworCisJCS8qIERpc2FibGUgYWxsIERNQSBpbnRlcnJ1cHRzIGZvciB0aGUgY2hhbm5lbC4gKi8KKwkJT01BUF9ETUFfQ0lDUl9SRUcobGNoKSA9IDA7CisKKwkJLyogTWFrZSBzdXJlIHRoZSBETUEgdHJhbnNmZXIgaXMgc3RvcHBlZC4gKi8KKwkJT01BUF9ETUFfQ0NSX1JFRyhsY2gpID0gMDsKKwkJb21hcF9jbGVhcl9kbWEobGNoKTsKKwl9CiB9CiAKLWludCBvbWFwX2RtYV9pbl8xNTEwX21vZGUodm9pZCkKKy8qCisgKiBDbGVhcnMgYW55IERNQSBzdGF0ZSBzbyB0aGUgRE1BIGVuZ2luZSBpcyByZWFkeSB0byByZXN0YXJ0IHdpdGggbmV3IGJ1ZmZlcnMKKyAqIHRocm91Z2ggb21hcF9zdGFydF9kbWEoKS4gQW55IGJ1ZmZlcnMgaW4gZmxpZ2h0IGFyZSBkaXNjYXJkZWQuCisgKi8KK3ZvaWQgb21hcF9jbGVhcl9kbWEoaW50IGxjaCkKIHsKLQlyZXR1cm4gZW5hYmxlXzE1MTBfbW9kZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7CisJCWludCBzdGF0dXM7CisJCU9NQVBfRE1BX0NDUl9SRUcobGNoKSAmPSB+T01BUF9ETUFfQ0NSX0VOOworCisJCS8qIENsZWFyIHBlbmRpbmcgaW50ZXJydXB0cyAqLworCQlzdGF0dXMgPSBPTUFQX0RNQV9DU1JfUkVHKGxjaCk7CisJfQorCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCWludCBpOworCQl1MzIgbGNoX2Jhc2UgPSBPTUFQMjRYWF9ETUFfQkFTRSArIGxjaCAqIDB4NjAgKyAweDgwOworCQlmb3IgKGkgPSAwOyBpIDwgMHg0NDsgaSArPSA0KQorCQkJb21hcF93cml0ZWwoMCwgbGNoX2Jhc2UgKyBpKTsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3ZvaWQgb21hcF9zdGFydF9kbWEoaW50IGxjaCkKK3sKKwlpZiAoIW9tYXBfZG1hX2luXzE1MTBfbW9kZSgpICYmIGRtYV9jaGFuW2xjaF0ubmV4dF9sY2ggIT0gLTEpIHsKKwkJaW50IG5leHRfbGNoLCBjdXJfbGNoOworCQljaGFyIGRtYV9jaGFuX2xpbmtfbWFwW09NQVBfTE9HSUNBTF9ETUFfQ0hfQ09VTlRdOworCisJCWRtYV9jaGFuX2xpbmtfbWFwW2xjaF0gPSAxOworCQkvKiBTZXQgdGhlIGxpbmsgcmVnaXN0ZXIgb2YgdGhlIGZpcnN0IGNoYW5uZWwgKi8KKwkJZW5hYmxlX2xuayhsY2gpOworCisJCW1lbXNldChkbWFfY2hhbl9saW5rX21hcCwgMCwgc2l6ZW9mKGRtYV9jaGFuX2xpbmtfbWFwKSk7CisJCWN1cl9sY2ggPSBkbWFfY2hhbltsY2hdLm5leHRfbGNoOworCQlkbyB7CisJCQluZXh0X2xjaCA9IGRtYV9jaGFuW2N1cl9sY2hdLm5leHRfbGNoOworCisJCQkvKiBUaGUgbG9vcCBjYXNlOiB3ZSd2ZSBiZWVuIGhlcmUgYWxyZWFkeSAqLworCQkJaWYgKGRtYV9jaGFuX2xpbmtfbWFwW2N1cl9sY2hdKQorCQkJCWJyZWFrOworCQkJLyogTWFyayB0aGUgY3VycmVudCBjaGFubmVsICovCisJCQlkbWFfY2hhbl9saW5rX21hcFtjdXJfbGNoXSA9IDE7CisKKwkJCWVuYWJsZV9sbmsoY3VyX2xjaCk7CisJCQlvbWFwX2VuYWJsZV9jaGFubmVsX2lycShjdXJfbGNoKTsKKworCQkJY3VyX2xjaCA9IG5leHRfbGNoOworCQl9IHdoaWxlIChuZXh0X2xjaCAhPSAtMSk7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQkvKiBFcnJhdGE6IE5lZWQgdG8gd3JpdGUgbGNoIGV2ZW4gaWYgbm90IHVzaW5nIGNoYWluaW5nICovCisJCU9NQVBfRE1BX0NMTktfQ1RSTF9SRUcobGNoKSA9IGxjaDsKKwl9CisKKwlvbWFwX2VuYWJsZV9jaGFubmVsX2lycShsY2gpOworCisJLyogRXJyYXRhOiBPbiBFUzIuMCBCVUZGRVJJTkcgZGlzYWJsZSBtdXN0IGJlIHNldC4KKwkgKiBUaGlzIHdpbGwgYWx3YXlzIGZhaWwgb24gRVMxLjAgKi8KKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJT01BUF9ETUFfQ0NSX1JFRyhsY2gpIHw9IE9NQVBfRE1BX0NDUl9FTjsKKwl9CisKKwlPTUFQX0RNQV9DQ1JfUkVHKGxjaCkgfD0gT01BUF9ETUFfQ0NSX0VOOworCisJZG1hX2NoYW5bbGNoXS5mbGFncyB8PSBPTUFQX0RNQV9BQ1RJVkU7Cit9CisKK3ZvaWQgb21hcF9zdG9wX2RtYShpbnQgbGNoKQoreworCWlmICghb21hcF9kbWFfaW5fMTUxMF9tb2RlKCkgJiYgZG1hX2NoYW5bbGNoXS5uZXh0X2xjaCAhPSAtMSkgeworCQlpbnQgbmV4dF9sY2gsIGN1cl9sY2ggPSBsY2g7CisJCWNoYXIgZG1hX2NoYW5fbGlua19tYXBbT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVF07CisKKwkJbWVtc2V0KGRtYV9jaGFuX2xpbmtfbWFwLCAwLCBzaXplb2YoZG1hX2NoYW5fbGlua19tYXApKTsKKwkJZG8geworCQkJLyogVGhlIGxvb3AgY2FzZTogd2UndmUgYmVlbiBoZXJlIGFscmVhZHkgKi8KKwkJCWlmIChkbWFfY2hhbl9saW5rX21hcFtjdXJfbGNoXSkKKwkJCQlicmVhazsKKwkJCS8qIE1hcmsgdGhlIGN1cnJlbnQgY2hhbm5lbCAqLworCQkJZG1hX2NoYW5fbGlua19tYXBbY3VyX2xjaF0gPSAxOworCisJCQlkaXNhYmxlX2xuayhjdXJfbGNoKTsKKworCQkJbmV4dF9sY2ggPSBkbWFfY2hhbltjdXJfbGNoXS5uZXh0X2xjaDsKKwkJCWN1cl9sY2ggPSBuZXh0X2xjaDsKKwkJfSB3aGlsZSAobmV4dF9sY2ggIT0gLTEpOworCisJCXJldHVybjsKKwl9CisKKwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIG9uIHRoZSBjaGFubmVsICovCisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQorCQlPTUFQX0RNQV9DSUNSX1JFRyhsY2gpID0gMDsKKworCU9NQVBfRE1BX0NDUl9SRUcobGNoKSAmPSB+T01BUF9ETUFfQ0NSX0VOOworCWRtYV9jaGFuW2xjaF0uZmxhZ3MgJj0gfk9NQVBfRE1BX0FDVElWRTsKK30KKworLyoKKyAqIFJldHVybnMgY3VycmVudCBwaHlzaWNhbCBzb3VyY2UgYWRkcmVzcyBmb3IgdGhlIGdpdmVuIERNQSBjaGFubmVsLgorICogSWYgdGhlIGNoYW5uZWwgaXMgcnVubmluZyB0aGUgY2FsbGVyIG11c3QgZGlzYWJsZSBpbnRlcnJ1cHRzIHByaW9yIGNhbGxpbmcKKyAqIHRoaXMgZnVuY3Rpb24gYW5kIHByb2Nlc3MgdGhlIHJldHVybmVkIHZhbHVlIGJlZm9yZSByZS1lbmFibGluZyBpbnRlcnJ1cHQgdG8KKyAqIHByZXZlbnQgcmFjZXMgd2l0aCB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIE5vdGUgdGhhdCBpbiBjb250aW51b3VzIG1vZGUgdGhlcmUKKyAqIGlzIGEgY2hhbmNlIGZvciBDU1NBX0wgcmVnaXN0ZXIgb3ZlcmZsb3cgaW5iZXR3ZWVuIHRoZSB0d28gcmVhZHMgcmVzdWx0aW5nCisgKiBpbiBpbmNvcnJlY3QgcmV0dXJuIHZhbHVlLgorICovCitkbWFfYWRkcl90IG9tYXBfZ2V0X2RtYV9zcmNfcG9zKGludCBsY2gpCit7CisJZG1hX2FkZHJfdCBvZmZzZXQ7CisKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCisJCW9mZnNldCA9IChkbWFfYWRkcl90KSAoT01BUDFfRE1BX0NTU0FfTF9SRUcobGNoKSB8CisJCQkJICAgICAgIChPTUFQMV9ETUFfQ1NTQV9VX1JFRyhsY2gpIDw8IDE2KSk7CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCW9mZnNldCA9IE9NQVBfRE1BX0NTQUNfUkVHKGxjaCk7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCisvKgorICogUmV0dXJucyBjdXJyZW50IHBoeXNpY2FsIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIHRoZSBnaXZlbiBETUEgY2hhbm5lbC4KKyAqIElmIHRoZSBjaGFubmVsIGlzIHJ1bm5pbmcgdGhlIGNhbGxlciBtdXN0IGRpc2FibGUgaW50ZXJydXB0cyBwcmlvciBjYWxsaW5nCisgKiB0aGlzIGZ1bmN0aW9uIGFuZCBwcm9jZXNzIHRoZSByZXR1cm5lZCB2YWx1ZSBiZWZvcmUgcmUtZW5hYmxpbmcgaW50ZXJydXB0IHRvCisgKiBwcmV2ZW50IHJhY2VzIHdpdGggdGhlIGludGVycnVwdCBoYW5kbGVyLiBOb3RlIHRoYXQgaW4gY29udGludW91cyBtb2RlIHRoZXJlCisgKiBpcyBhIGNoYW5jZSBmb3IgQ0RTQV9MIHJlZ2lzdGVyIG92ZXJmbG93IGluYmV0d2VlbiB0aGUgdHdvIHJlYWRzIHJlc3VsdGluZworICogaW4gaW5jb3JyZWN0IHJldHVybiB2YWx1ZS4KKyAqLworZG1hX2FkZHJfdCBvbWFwX2dldF9kbWFfZHN0X3BvcyhpbnQgbGNoKQoreworCWRtYV9hZGRyX3Qgb2Zmc2V0OworCisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQorCQlvZmZzZXQgPSAoZG1hX2FkZHJfdCkgKE9NQVAxX0RNQV9DRFNBX0xfUkVHKGxjaCkgfAorCQkJCSAgICAgICAoT01BUDFfRE1BX0NEU0FfVV9SRUcobGNoKSA8PCAxNikpOworCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQlvZmZzZXQgPSBPTUFQMl9ETUFfQ0RTQV9SRUcobGNoKTsKKworCXJldHVybiBvZmZzZXQ7Cit9CisKKy8qCisgKiBSZXR1cm5zIGN1cnJlbnQgc291cmNlIHRyYW5zZmVyIGNvdW50aW5nIGZvciB0aGUgZ2l2ZW4gRE1BIGNoYW5uZWwuCisgKiBDYW4gYmUgdXNlZCB0byBtb25pdG9yIHRoZSBwcm9ncmVzcyBvZiBhIHRyYW5zZmVyIGluc2lkZSBhIGJsb2NrLgorICogSXQgbXVzdCBiZSBjYWxsZWQgd2l0aCBkaXNhYmxlZCBpbnRlcnJ1cHRzLgorICovCitpbnQgb21hcF9nZXRfZG1hX3NyY19hZGRyX2NvdW50ZXIoaW50IGxjaCkKK3sKKwlyZXR1cm4gKGRtYV9hZGRyX3QpIE9NQVBfRE1BX0NTQUNfUkVHKGxjaCk7Cit9CisKK2ludCBvbWFwX2RtYV9ydW5uaW5nKHZvaWQpCit7CisJaW50IGxjaDsKKworCS8qIENoZWNrIGlmIExDRCBETUEgaXMgcnVubmluZyAqLworCWlmIChjcHVfaXNfb21hcDE2eHgoKSkKKwkJaWYgKG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DQ1IpICYgT01BUF9ETUFfQ0NSX0VOKQorCQkJcmV0dXJuIDE7CisKKwlmb3IgKGxjaCA9IDA7IGxjaCA8IGRtYV9jaGFuX2NvdW50OyBsY2grKykKKwkJaWYgKE9NQVBfRE1BX0NDUl9SRUcobGNoKSAmIE9NQVBfRE1BX0NDUl9FTikKKwkJCXJldHVybiAxOworCisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC01NTAsNyArNzM3LDggQEAKIAogCWlmICgoZG1hX2NoYW5bbGNoX2hlYWRdLmRldl9pZCA9PSAtMSkgfHwKIAkgICAgKGRtYV9jaGFuW2xjaF9xdWV1ZV0uZGV2X2lkID09IC0xKSkgewotCQlwcmludGsoS0VSTl9FUlIgIm9tYXBfZG1hOiB0cnlpbmcgdG8gbGluayBub24gcmVxdWVzdGVkIGNoYW5uZWxzXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJvbWFwX2RtYTogdHJ5aW5nIHRvIGxpbmsgIgorCQkgICAgICAgIm5vbiByZXF1ZXN0ZWQgY2hhbm5lbHNcbiIpOwogCQlkdW1wX3N0YWNrKCk7CiAJfQogCkBAIC01NzAsMjAgKzc1OCwxNDkgQEAKIAogCWlmIChkbWFfY2hhbltsY2hfaGVhZF0ubmV4dF9sY2ggIT0gbGNoX3F1ZXVlIHx8CiAJICAgIGRtYV9jaGFuW2xjaF9oZWFkXS5uZXh0X2xjaCA9PSAtMSkgewotCQlwcmludGsoS0VSTl9FUlIgIm9tYXBfZG1hOiB0cnlpbmcgdG8gdW5saW5rIG5vbiBsaW5rZWQgY2hhbm5lbHNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIm9tYXBfZG1hOiB0cnlpbmcgdG8gdW5saW5rICIKKwkJICAgICAgICJub24gbGlua2VkIGNoYW5uZWxzXG4iKTsKIAkJZHVtcF9zdGFjaygpOwogCX0KIAogCiAJaWYgKChkbWFfY2hhbltsY2hfaGVhZF0uZmxhZ3MgJiBPTUFQX0RNQV9BQ1RJVkUpIHx8CiAJICAgIChkbWFfY2hhbltsY2hfaGVhZF0uZmxhZ3MgJiBPTUFQX0RNQV9BQ1RJVkUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAib21hcF9kbWE6IFlvdSBuZWVkIHRvIHN0b3AgdGhlIERNQSBjaGFubmVscyBiZWZvcmUgdW5saW5raW5nXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJvbWFwX2RtYTogWW91IG5lZWQgdG8gc3RvcCB0aGUgRE1BIGNoYW5uZWxzICIKKwkJICAgICAgICJiZWZvcmUgdW5saW5raW5nXG4iKTsKIAkJZHVtcF9zdGFjaygpOwogCX0KIAogCWRtYV9jaGFuW2xjaF9oZWFkXS5uZXh0X2xjaCA9IC0xOwogfQogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDEKKworc3RhdGljIGludCBvbWFwMV9kbWFfaGFuZGxlX2NoKGludCBjaCkKK3sKKwl1MTYgY3NyOworCisJaWYgKGVuYWJsZV8xNTEwX21vZGUgJiYgY2ggPj0gNikgeworCQljc3IgPSBkbWFfY2hhbltjaF0uc2F2ZWRfY3NyOworCQlkbWFfY2hhbltjaF0uc2F2ZWRfY3NyID0gMDsKKwl9IGVsc2UKKwkJY3NyID0gT01BUF9ETUFfQ1NSX1JFRyhjaCk7CisJaWYgKGVuYWJsZV8xNTEwX21vZGUgJiYgY2ggPD0gMiAmJiAoY3NyID4+IDcpICE9IDApIHsKKwkJZG1hX2NoYW5bY2ggKyA2XS5zYXZlZF9jc3IgPSBjc3IgPj4gNzsKKwkJY3NyICY9IDB4N2Y7CisJfQorCWlmICgoY3NyICYgMHgzZikgPT0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKHVubGlrZWx5KGRtYV9jaGFuW2NoXS5kZXZfaWQgPT0gLTEpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNwdXJpb3VzIGludGVycnVwdCBmcm9tIERNQSBjaGFubmVsICIKKwkJICAgICAgICIlZCAoQ1NSICUwNHgpXG4iLCBjaCwgY3NyKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICh1bmxpa2VseShjc3IgJiBPTUFQX0RNQV9UT1VUX0lSUSkpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkRNQSB0aW1lb3V0IHdpdGggZGV2aWNlICVkXG4iLAorCQkgICAgICAgZG1hX2NoYW5bY2hdLmRldl9pZCk7CisJaWYgKHVubGlrZWx5KGNzciAmIE9NQVBfRE1BX0RST1BfSVJRKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRE1BIHN5bmNocm9uaXphdGlvbiBldmVudCBkcm9wIG9jY3VycmVkICIKKwkJICAgICAgICJ3aXRoIGRldmljZSAlZFxuIiwgZG1hX2NoYW5bY2hdLmRldl9pZCk7CisJaWYgKGxpa2VseShjc3IgJiBPTUFQX0RNQV9CTE9DS19JUlEpKQorCQlkbWFfY2hhbltjaF0uZmxhZ3MgJj0gfk9NQVBfRE1BX0FDVElWRTsKKwlpZiAobGlrZWx5KGRtYV9jaGFuW2NoXS5jYWxsYmFjayAhPSBOVUxMKSkKKwkJZG1hX2NoYW5bY2hdLmNhbGxiYWNrKGNoLCBjc3IsIGRtYV9jaGFuW2NoXS5kYXRhKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlycXJldHVybl90IG9tYXAxX2RtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsCisJCQkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgY2ggPSAoKGludCkgZGV2X2lkKSAtIDE7CisJaW50IGhhbmRsZWQgPSAwOworCisJZm9yICg7OykgeworCQlpbnQgaGFuZGxlZF9ub3cgPSAwOworCisJCWhhbmRsZWRfbm93ICs9IG9tYXAxX2RtYV9oYW5kbGVfY2goY2gpOworCQlpZiAoZW5hYmxlXzE1MTBfbW9kZSAmJiBkbWFfY2hhbltjaCArIDZdLnNhdmVkX2NzcikKKwkJCWhhbmRsZWRfbm93ICs9IG9tYXAxX2RtYV9oYW5kbGVfY2goY2ggKyA2KTsKKwkJaWYgKCFoYW5kbGVkX25vdykKKwkJCWJyZWFrOworCQloYW5kbGVkICs9IGhhbmRsZWRfbm93OworCX0KKworCXJldHVybiBoYW5kbGVkID8gSVJRX0hBTkRMRUQgOiBJUlFfTk9ORTsKK30KKworI2Vsc2UKKyNkZWZpbmUgb21hcDFfZG1hX2lycV9oYW5kbGVyCU5VTEwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKKworc3RhdGljIGludCBvbWFwMl9kbWFfaGFuZGxlX2NoKGludCBjaCkKK3sKKwl1MzIgc3RhdHVzID0gT01BUF9ETUFfQ1NSX1JFRyhjaCk7CisJdTMyIHZhbDsKKworCWlmICghc3RhdHVzKQorCQlyZXR1cm4gMDsKKwlpZiAodW5saWtlbHkoZG1hX2NoYW5bY2hdLmRldl9pZCA9PSAtMSkpCisJCXJldHVybiAwOworCS8qIFJFVklTSVQ6IEFjY29yZGluZyB0byAyNHh4IFRSTSwgdGhlcmUncyBubyBUT1VUX0lFICovCisJaWYgKHVubGlrZWx5KHN0YXR1cyAmIE9NQVBfRE1BX1RPVVRfSVJRKSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRE1BIHRpbWVvdXQgd2l0aCBkZXZpY2UgJWRcbiIsCisJCSAgICAgICBkbWFfY2hhbltjaF0uZGV2X2lkKTsKKwlpZiAodW5saWtlbHkoc3RhdHVzICYgT01BUF9ETUFfRFJPUF9JUlEpKQorCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiRE1BIHN5bmNocm9uaXphdGlvbiBldmVudCBkcm9wIG9jY3VycmVkIHdpdGggZGV2aWNlICIKKwkJICAgICAgICIlZFxuIiwgZG1hX2NoYW5bY2hdLmRldl9pZCk7CisKKwlpZiAodW5saWtlbHkoc3RhdHVzICYgT01BUDJfRE1BX1RSQU5TX0VSUl9JUlEpKQorCQlwcmludGsoS0VSTl9JTkZPICJETUEgdHJhbnNhY3Rpb24gZXJyb3Igd2l0aCBkZXZpY2UgJWRcbiIsCisJCSAgICAgICBkbWFfY2hhbltjaF0uZGV2X2lkKTsKKworCU9NQVBfRE1BX0NTUl9SRUcoY2gpID0gMHgyMDsKKworCXZhbCA9IG9tYXBfcmVhZGwoT01BUF9ETUE0X0lSUVNUQVRVU19MMCk7CisJLyogY2ggaW4gdGhpcyBmdW5jdGlvbiBpcyBmcm9tIDAtMzEgd2hpbGUgaW4gcmVnaXN0ZXIgaXQgaXMgMS0zMiAqLworCXZhbCA9IDEgPDwgKGNoKTsKKwlvbWFwX3dyaXRlbCh2YWwsIE9NQVBfRE1BNF9JUlFTVEFUVVNfTDApOworCisJaWYgKGxpa2VseShkbWFfY2hhbltjaF0uY2FsbGJhY2sgIT0gTlVMTCkpCisJCWRtYV9jaGFuW2NoXS5jYWxsYmFjayhjaCwgc3RhdHVzLCBkbWFfY2hhbltjaF0uZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogU1RBVFVTIHJlZ2lzdGVyIGNvdW50IGlzIGZyb20gMS0zMiB3aGlsZSBvdXIgaXMgMC0zMSAqLworc3RhdGljIGlycXJldHVybl90IG9tYXAyX2RtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsCisJCQkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1MzIgdmFsOworCWludCBpOworCisJdmFsID0gb21hcF9yZWFkbChPTUFQX0RNQTRfSVJRU1RBVFVTX0wwKTsKKworCWZvciAoaSA9IDE7IGkgPD0gT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVDsgaSsrKSB7CisJCWludCBhY3RpdmUgPSB2YWwgJiAoMSA8PCAoaSAtIDEpKTsKKwkJaWYgKGFjdGl2ZSkKKwkJCW9tYXAyX2RtYV9oYW5kbGVfY2goaSAtIDEpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gb21hcDI0eHhfZG1hX2lycSA9IHsKKwkubmFtZSA9ICJETUEiLAorCS5oYW5kbGVyID0gb21hcDJfZG1hX2lycV9oYW5kbGVyLAorCS5mbGFncyA9IFNBX0lOVEVSUlVQVAorfTsKKworI2Vsc2UKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIG9tYXAyNHh4X2RtYV9pcnE7CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIHN0cnVjdCBsY2RfZG1hX2luZm8gewogCXNwaW5sb2NrX3QgbG9jazsKQEAgLTc5NSw3ICsxMTEyLDcgQEAKIAkvKiBBbHdheXMgc2V0IHRoZSBzb3VyY2UgcG9ydCBhcyBTRFJBTSBmb3Igbm93Ki8KIAl3ICY9IH4oMHgwMyA8PCA2KTsKIAlpZiAobGNkX2RtYS5jYWxsYmFjayAhPSBOVUxMKQotCQl3IHw9IDEgPDwgMTsgICAgICAgICAgICAvKiBCbG9jayBpbnRlcnJ1cHQgZW5hYmxlICovCisJCXcgfD0gMSA8PCAxOwkJLyogQmxvY2sgaW50ZXJydXB0IGVuYWJsZSAqLwogCWVsc2UKIAkJdyAmPSB+KDEgPDwgMSk7CiAJb21hcF93cml0ZXcodywgT01BUDE2MTBfRE1BX0xDRF9DVFJMKTsKQEAgLTgxNCw3ICsxMTMxLDggQEAKIAlvbWFwX3dyaXRldyhmaSwgT01BUDE2MTBfRE1BX0xDRF9TUkNfRklfQjFfTCk7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBsY2RfZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgaXJxcmV0dXJuX3QgbGNkX2RtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsCisJCQkJICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXUxNiB3OwogCkBAIC04NzAsNyArMTE4OCw4IEBACiAJCXJldHVybjsKIAl9CiAJaWYgKCFlbmFibGVfMTUxMF9tb2RlKQotCQlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKSAmIH4xLCBPTUFQMTYxMF9ETUFfTENEX0NDUik7CisJCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DQ1IpICYgfjEsCisJCQkgICAgT01BUDE2MTBfRE1BX0xDRF9DQ1IpOwogCWxjZF9kbWEucmVzZXJ2ZWQgPSAwOwogCXNwaW5fdW5sb2NrKCZsY2RfZG1hLmxvY2spOwogfQpAQCAtOTM5LDkzICsxMjU4LDI0IEBACiAJb21hcF93cml0ZXcodywgT01BUDE2MTBfRE1BX0xDRF9DVFJMKTsKIH0KIAotLyoKLSAqIENsZWFycyBhbnkgRE1BIHN0YXRlIHNvIHRoZSBETUEgZW5naW5lIGlzIHJlYWR5IHRvIHJlc3RhcnQgd2l0aCBuZXcgYnVmZmVycwotICogdGhyb3VnaCBvbWFwX3N0YXJ0X2RtYSgpLiBBbnkgYnVmZmVycyBpbiBmbGlnaHQgYXJlIGRpc2NhcmRlZC4KLSAqLwotdm9pZCBvbWFwX2NsZWFyX2RtYShpbnQgbGNoKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHN0YXR1czsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KE9NQVBfRE1BX0NDUihsY2gpKSAmIH5PTUFQX0RNQV9DQ1JfRU4sCi0JCSAgICBPTUFQX0RNQV9DQ1IobGNoKSk7Ci0Jc3RhdHVzID0gT01BUF9ETUFfQ1NSKGxjaCk7CS8qIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0cyAqLwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotLyoKLSAqIFJldHVybnMgY3VycmVudCBwaHlzaWNhbCBzb3VyY2UgYWRkcmVzcyBmb3IgdGhlIGdpdmVuIERNQSBjaGFubmVsLgotICogSWYgdGhlIGNoYW5uZWwgaXMgcnVubmluZyB0aGUgY2FsbGVyIG11c3QgZGlzYWJsZSBpbnRlcnJ1cHRzIHByaW9yIGNhbGxpbmcKLSAqIHRoaXMgZnVuY3Rpb24gYW5kIHByb2Nlc3MgdGhlIHJldHVybmVkIHZhbHVlIGJlZm9yZSByZS1lbmFibGluZyBpbnRlcnJ1cHQgdG8KLSAqIHByZXZlbnQgcmFjZXMgd2l0aCB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIE5vdGUgdGhhdCBpbiBjb250aW51b3VzIG1vZGUgdGhlcmUKLSAqIGlzIGEgY2hhbmNlIGZvciBDU1NBX0wgcmVnaXN0ZXIgb3ZlcmZsb3cgaW5iZXR3ZWVuIHRoZSB0d28gcmVhZHMgcmVzdWx0aW5nCi0gKiBpbiBpbmNvcnJlY3QgcmV0dXJuIHZhbHVlLgotICovCi1kbWFfYWRkcl90IG9tYXBfZ2V0X2RtYV9zcmNfcG9zKGludCBsY2gpCi17Ci0JcmV0dXJuIChkbWFfYWRkcl90KSAob21hcF9yZWFkdyhPTUFQX0RNQV9DU1NBX0wobGNoKSkgfAotCShvbWFwX3JlYWR3KE9NQVBfRE1BX0NTU0FfVShsY2gpKSA8PCAxNikpOwotfQotCi0vKgotICogUmV0dXJucyBjdXJyZW50IHBoeXNpY2FsIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIHRoZSBnaXZlbiBETUEgY2hhbm5lbC4KLSAqIElmIHRoZSBjaGFubmVsIGlzIHJ1bm5pbmcgdGhlIGNhbGxlciBtdXN0IGRpc2FibGUgaW50ZXJydXB0cyBwcmlvciBjYWxsaW5nCi0gKiB0aGlzIGZ1bmN0aW9uIGFuZCBwcm9jZXNzIHRoZSByZXR1cm5lZCB2YWx1ZSBiZWZvcmUgcmUtZW5hYmxpbmcgaW50ZXJydXB0IHRvCi0gKiBwcmV2ZW50IHJhY2VzIHdpdGggdGhlIGludGVycnVwdCBoYW5kbGVyLiBOb3RlIHRoYXQgaW4gY29udGludW91cyBtb2RlIHRoZXJlCi0gKiBpcyBhIGNoYW5jZSBmb3IgQ0RTQV9MIHJlZ2lzdGVyIG92ZXJmbG93IGluYmV0d2VlbiB0aGUgdHdvIHJlYWRzIHJlc3VsdGluZwotICogaW4gaW5jb3JyZWN0IHJldHVybiB2YWx1ZS4KLSAqLwotZG1hX2FkZHJfdCBvbWFwX2dldF9kbWFfZHN0X3BvcyhpbnQgbGNoKQotewotCXJldHVybiAoZG1hX2FkZHJfdCkgKG9tYXBfcmVhZHcoT01BUF9ETUFfQ0RTQV9MKGxjaCkpIHwKLQkob21hcF9yZWFkdyhPTUFQX0RNQV9DRFNBX1UobGNoKSkgPDwgMTYpKTsKLX0KLQotLyoKLSAqIFJldHVybnMgY3VycmVudCBzb3VyY2UgdHJhbnNmZXIgY291bnRpbmcgZm9yIHRoZSBnaXZlbiBETUEgY2hhbm5lbC4KLSAqIENhbiBiZSB1c2VkIHRvIG1vbml0b3IgdGhlIHByb2dyZXNzIG9mIGEgdHJhbnNmZXIgaW5zaWRlIGEgIGJsb2NrLgotICogSXQgbXVzdCBiZSBjYWxsZWQgd2l0aCBkaXNhYmxlZCBpbnRlcnJ1cHRzLgotICovCi1pbnQgb21hcF9nZXRfZG1hX3NyY19hZGRyX2NvdW50ZXIoaW50IGxjaCkKLXsKLQlyZXR1cm4gKGRtYV9hZGRyX3QpIG9tYXBfcmVhZHcoT01BUF9ETUFfQ1NBQyhsY2gpKTsKLX0KLQotaW50IG9tYXBfZG1hX3J1bm5pbmcodm9pZCkKLXsKLQlpbnQgbGNoOwotCi0JLyogQ2hlY2sgaWYgTENEIERNQSBpcyBydW5uaW5nICovCi0JaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQotCQlpZiAob21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NDUikgJiBPTUFQX0RNQV9DQ1JfRU4pCi0JCQlyZXR1cm4gMTsKLQotCWZvciAobGNoID0gMDsgbGNoIDwgZG1hX2NoYW5fY291bnQ7IGxjaCsrKSB7Ci0JCXUxNiB3OwotCi0JCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NDUihsY2gpKTsKLQkJaWYgKHcgJiBPTUFQX0RNQV9DQ1JfRU4pCi0JCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX2luaXRfZG1hKHZvaWQpCiB7CiAJaW50IGNoLCByOwogCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkRNQSBzdXBwb3J0IGZvciBPTUFQMTUxMCBpbml0aWFsaXplZFxuIik7CisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkRNQSBzdXBwb3J0IGZvciBPTUFQMTV4eCBpbml0aWFsaXplZFxuIik7CiAJCWRtYV9jaGFuX2NvdW50ID0gOTsKIAkJZW5hYmxlXzE1MTBfbW9kZSA9IDE7CiAJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSB8fCBjcHVfaXNfb21hcDczMCgpKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIk9NQVAgRE1BIGhhcmR3YXJlIHZlcnNpb24gJWRcbiIsCiAJCSAgICAgICBvbWFwX3JlYWR3KE9NQVBfRE1BX0hXX0lEKSk7CiAJCXByaW50ayhLRVJOX0lORk8gIkRNQSBjYXBhYmlsaXRpZXM6ICUwOHg6JTA4eDolMDR4OiUwNHg6JTA0eFxuIiwKLQkJICAgICAgIChvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfMF9VKSA8PCAxNikgfCBvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfMF9MKSwKLQkJICAgICAgIChvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfMV9VKSA8PCAxNikgfCBvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfMV9MKSwKKwkJICAgICAgIChvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfMF9VKSA8PCAxNikgfAorCQkgICAgICAgb21hcF9yZWFkdyhPTUFQX0RNQV9DQVBTXzBfTCksCisJCSAgICAgICAob21hcF9yZWFkdyhPTUFQX0RNQV9DQVBTXzFfVSkgPDwgMTYpIHwKKwkJICAgICAgIG9tYXBfcmVhZHcoT01BUF9ETUFfQ0FQU18xX0wpLAogCQkgICAgICAgb21hcF9yZWFkdyhPTUFQX0RNQV9DQVBTXzIpLCBvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfMyksCiAJCSAgICAgICBvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfNCkpOwogCQlpZiAoIWVuYWJsZV8xNTEwX21vZGUpIHsKQEAgLTEwMzgsNiArMTI4OCwxMSBAQAogCQkJZG1hX2NoYW5fY291bnQgPSAxNjsKIAkJfSBlbHNlCiAJCQlkbWFfY2hhbl9jb3VudCA9IDk7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQl1OCByZXZpc2lvbiA9IG9tYXBfcmVhZGIoT01BUF9ETUE0X1JFVklTSU9OKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiT01BUCBETUEgaGFyZHdhcmUgcmV2aXNpb24gJWQuJWRcbiIsCisJCSAgICAgICByZXZpc2lvbiA+PiA0LCByZXZpc2lvbiAmIDB4Zik7CisJCWRtYV9jaGFuX2NvdW50ID0gT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVDsKIAl9IGVsc2UgewogCQlkbWFfY2hhbl9jb3VudCA9IDA7CiAJCXJldHVybiAwOwpAQCAtMTA0OSw0MSArMTMwNCw1NiBAQAogCW1lbXNldCgmZG1hX2NoYW4sIDAsIHNpemVvZihkbWFfY2hhbikpOwogCiAJZm9yIChjaCA9IDA7IGNoIDwgZG1hX2NoYW5fY291bnQ7IGNoKyspIHsKKwkJb21hcF9jbGVhcl9kbWEoY2gpOwogCQlkbWFfY2hhbltjaF0uZGV2X2lkID0gLTE7CiAJCWRtYV9jaGFuW2NoXS5uZXh0X2xjaCA9IC0xOwogCiAJCWlmIChjaCA+PSA2ICYmIGVuYWJsZV8xNTEwX21vZGUpCiAJCQljb250aW51ZTsKIAotCQkvKiByZXF1ZXN0X2lycSgpIGRvZXNuJ3QgbGlrZSBkZXZfaWQgKGllLiBjaCkgYmVpbmcgemVybywKLQkJICogc28gd2UgaGF2ZSB0byBrbHVkZ2UgYXJvdW5kIHRoaXMuICovCi0JCXIgPSByZXF1ZXN0X2lycShkbWFfaXJxW2NoXSwgZG1hX2lycV9oYW5kbGVyLCAwLCAiRE1BIiwKLQkJCQkodm9pZCAqKSAoY2ggKyAxKSk7CisJCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQkJLyogcmVxdWVzdF9pcnEoKSBkb2Vzbid0IGxpa2UgZGV2X2lkIChpZS4gY2gpIGJlaW5nCisJCQkgKiB6ZXJvLCBzbyB3ZSBoYXZlIHRvIGtsdWRnZSBhcm91bmQgdGhpcy4gKi8KKwkJCXIgPSByZXF1ZXN0X2lycShvbWFwMV9kbWFfaXJxW2NoXSwKKwkJCQkJb21hcDFfZG1hX2lycV9oYW5kbGVyLCAwLCAiRE1BIiwKKwkJCQkJKHZvaWQgKikgKGNoICsgMSkpOworCQkJaWYgKHIgIT0gMCkgeworCQkJCWludCBpOworCisJCQkJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gcmVxdWVzdCBJUlEgJWQgIgorCQkJCSAgICAgICAiZm9yIERNQSAoZXJyb3IgJWQpXG4iLAorCQkJCSAgICAgICBvbWFwMV9kbWFfaXJxW2NoXSwgcik7CisJCQkJZm9yIChpID0gMDsgaSA8IGNoOyBpKyspCisJCQkJCWZyZWVfaXJxKG9tYXAxX2RtYV9pcnFbaV0sCisJCQkJCQkgKHZvaWQgKikgKGkgKyAxKSk7CisJCQkJcmV0dXJuIHI7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCXNldHVwX2lycShJTlRfMjRYWF9TRE1BX0lSUTAsICZvbWFwMjR4eF9kbWFfaXJxKTsKKworCS8qIEZJWE1FOiBVcGRhdGUgTENEIERNQSB0byB3b3JrIG9uIDI0eHggKi8KKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKKwkJciA9IHJlcXVlc3RfaXJxKElOVF9ETUFfTENELCBsY2RfZG1hX2lycV9oYW5kbGVyLCAwLAorCQkJCSJMQ0QgRE1BIiwgTlVMTCk7CiAJCWlmIChyICE9IDApIHsKIAkJCWludCBpOwogCi0JCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZXF1ZXN0IElSUSAlZCBmb3IgRE1BIChlcnJvciAlZClcbiIsCi0JCQkgICAgICAgZG1hX2lycVtjaF0sIHIpOwotCQkJZm9yIChpID0gMDsgaSA8IGNoOyBpKyspCi0JCQkJZnJlZV9pcnEoZG1hX2lycVtpXSwgKHZvaWQgKikgKGkgKyAxKSk7CisJCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZXF1ZXN0IElSUSBmb3IgTENEIERNQSAiCisJCQkgICAgICAgIihlcnJvciAlZClcbiIsIHIpOworCQkJZm9yIChpID0gMDsgaSA8IGRtYV9jaGFuX2NvdW50OyBpKyspCisJCQkJZnJlZV9pcnEob21hcDFfZG1hX2lycVtpXSwgKHZvaWQgKikgKGkgKyAxKSk7CiAJCQlyZXR1cm4gcjsKIAkJfQogCX0KLQlyID0gcmVxdWVzdF9pcnEoSU5UX0RNQV9MQ0QsIGxjZF9kbWFfaXJxX2hhbmRsZXIsIDAsICJMQ0QgRE1BIiwgTlVMTCk7Ci0JaWYgKHIgIT0gMCkgewotCQlpbnQgaTsKIAotCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZXF1ZXN0IElSUSBmb3IgTENEIERNQSAoZXJyb3IgJWQpXG4iLCByKTsKLQkJZm9yIChpID0gMDsgaSA8IGRtYV9jaGFuX2NvdW50OyBpKyspCi0JCQlmcmVlX2lycShkbWFfaXJxW2ldLCAodm9pZCAqKSAoaSArIDEpKTsKLQkJcmV0dXJuIHI7Ci0JfQogCXJldHVybiAwOwogfQogCiBhcmNoX2luaXRjYWxsKG9tYXBfaW5pdF9kbWEpOwogCi0KIEVYUE9SVF9TWU1CT0wob21hcF9nZXRfZG1hX3NyY19wb3MpOwogRVhQT1JUX1NZTUJPTChvbWFwX2dldF9kbWFfZHN0X3Bvcyk7CiBFWFBPUlRfU1lNQk9MKG9tYXBfZ2V0X2RtYV9zcmNfYWRkcl9jb3VudGVyKTsKQEAgLTExMDksNiArMTM3OSw4IEBACiBFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV9kZXN0X2RhdGFfcGFjayk7CiBFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV9kZXN0X2J1cnN0X21vZGUpOwogCitFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV9wYXJhbXMpOworCiBFWFBPUlRfU1lNQk9MKG9tYXBfZG1hX2xpbmtfbGNoKTsKIEVYUE9SVF9TWU1CT0wob21hcF9kbWFfdW5saW5rX2xjaCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCmluZGV4IDU1MDU5YTIuLjc2ZjcyMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwpAQCAtMTQwLDcgKzE0MCw3IEBACiB9OwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiBzdGF0aWMgc3RydWN0IGdwaW9fYmFuayBncGlvX2JhbmtfMTUxMFsyXSA9IHsKIAl7IE9NQVBfTVBVSU9fQkFTRSwgICAgSU5UX01QVUlPLCAgICAgIElIX01QVUlPX0JBU0UsIE1FVEhPRF9NUFVJTyB9LAogCXsgT01BUDE1MTBfR1BJT19CQVNFLCBJTlRfR1BJT19CQU5LMSwgSUhfR1BJT19CQVNFLCAgTUVUSE9EX0dQSU9fMTUxMCB9CkBAIC0xNzMsNyArMTczLDcgQEAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZ3Bpb19iYW5rICpnZXRfZ3Bpb19iYW5rKGludCBncGlvKQogewotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKIAkJaWYgKE9NQVBfR1BJT19JU19NUFVJTyhncGlvKSkKIAkJCXJldHVybiAmZ3Bpb19iYW5rWzBdOwpAQCAtMjIyLDcgKzIyMiw3IEBACiAJCQlyZXR1cm4gLTE7CiAJCXJldHVybiAwOwogCX0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAJaWYgKGNwdV9pc19vbWFwMTUxMCgpICYmIGdwaW8gPCAxNikKIAkJcmV0dXJuIDA7CiAjZW5kaWYKQEAgLTY1NCw3ICs2NTQsNyBAQAogCS8qIFNldCB0cmlnZ2VyIHRvIG5vbmUuIFlvdSBuZWVkIHRvIGVuYWJsZSB0aGUgdHJpZ2dlciBhZnRlciByZXF1ZXN0X2lycSAqLwogCV9zZXRfZ3Bpb190cmlnZ2VyaW5nKGJhbmssIGdldF9ncGlvX2luZGV4KGdwaW8pLCBJUlFUX05PRURHRSk7CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAJaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT18xNTEwKSB7CiAJCXZvaWQgX19pb21lbSAqcmVnOwogCkBAIC03MzksNyArNzM5LDcgQEAKIAliYW5rID0gKHN0cnVjdCBncGlvX2JhbmsgKikgZGVzYy0+ZGF0YTsKIAlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9NUFVJTykKIAkJaXNyX3JlZyA9IGJhbmstPmJhc2UgKyBPTUFQX01QVUlPX0dQSU9fSU5UOwotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzE1MTApCiAJCWlzcl9yZWcgPSBiYW5rLT5iYXNlICsgT01BUDE1MTBfR1BJT19JTlRfU1RBVFVTOwogI2VuZGlmCkBAIC03NzQsNyArNzc0LDcgQEAKIAkJCWQgPSBpcnFfZGVzYyArIGdwaW9faXJxOwogCQkJZGVzY19oYW5kbGVfaXJxKGdwaW9faXJxLCBkLCByZWdzKTsKIAkJfQotICAgICAgICB9CisJfQogfQogCiBzdGF0aWMgdm9pZCBncGlvX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTgzNyw4ICs4MzcsOSBAQAogCS51bm1hc2sgPSBtcHVpb191bm1hc2tfaXJxCiB9OwogCi1zdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKLXN0YXRpYyBzdHJ1Y3QgY2xrICogZ3Bpb19jayA9IE5VTEw7CitzdGF0aWMgaW50IGluaXRpYWxpemVkOworc3RhdGljIHN0cnVjdCBjbGsgKiBncGlvX2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xrICogZ3Bpb19mY2s7CiAKIHN0YXRpYyBpbnQgX19pbml0IF9vbWFwX2dwaW9faW5pdCh2b2lkKQogewpAQCAtODQ4LDE0ICs4NDksMjYgQEAKIAlpbml0aWFsaXplZCA9IDE7CiAKIAlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKLQkJZ3Bpb19jayA9IGNsa19nZXQoTlVMTCwgImFybV9ncGlvX2NrIik7Ci0JCWlmIChJU19FUlIoZ3Bpb19jaykpCisJCWdwaW9faWNrID0gY2xrX2dldChOVUxMLCAiYXJtX2dwaW9fY2siKTsKKwkJaWYgKElTX0VSUihncGlvX2ljaykpCiAJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgYXJtX2dwaW9fY2tcbiIpOwogCQllbHNlCi0JCQljbGtfdXNlKGdwaW9fY2spOworCQkJY2xrX3VzZShncGlvX2ljayk7CisJfQorCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlncGlvX2ljayA9IGNsa19nZXQoTlVMTCwgImdwaW9zX2ljayIpOworCQlpZiAoSVNfRVJSKGdwaW9faWNrKSkKKwkJCXByaW50aygiQ291bGQgbm90IGdldCBncGlvc19pY2tcbiIpOworCQllbHNlCisJCQljbGtfdXNlKGdwaW9faWNrKTsKKwkJZ3Bpb19mY2sgPSBjbGtfZ2V0KE5VTEwsICJncGlvc19mY2siKTsKKwkJaWYgKElTX0VSUihncGlvX2ljaykpCisJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgZ3Bpb3NfZmNrXG4iKTsKKwkJZWxzZQorCQkJY2xrX3VzZShncGlvX2Zjayk7CiAJfQogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJPTUFQMTUxMCBHUElPIGhhcmR3YXJlXG4iKTsKIAkJZ3Bpb19iYW5rX2NvdW50ID0gMjsKQEAgLTkwMSw3ICs5MTQsNyBAQAogCQlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9NUFVJTykgewogCQkJb21hcF93cml0ZXcoMHhGRkZGLCBPTUFQX01QVUlPX0JBU0UgKyBPTUFQX01QVUlPX0dQSU9fTUFTS0lUKTsKIAkJfQotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAkJaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT18xNTEwKSB7CiAJCQlfX3Jhd193cml0ZXcoMHhmZmZmLCBiYW5rLT5iYXNlICsgT01BUDE1MTBfR1BJT19JTlRfTUFTSyk7CiAJCQlfX3Jhd193cml0ZXcoMHgwMDAwLCBiYW5rLT5iYXNlICsgT01BUDE1MTBfR1BJT19JTlRfU1RBVFVTKTsKQEAgLTEwMzgsNiArMTA1MSw3IEBACiAKIC8qCiAgKiBUaGlzIG1heSBnZXQgY2FsbGVkIGVhcmx5IGZyb20gYm9hcmQgc3BlY2lmaWMgaW5pdAorICogZm9yIGJvYXJkcyB0aGF0IGhhdmUgaW50ZXJydXB0cyByb3V0ZWQgdmlhIEZQR0EuCiAgKi8KIGludCBvbWFwX2dwaW9faW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwppbmRleCA5YzliN2RmLi5lYTk0NzVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwpAQCAtNDkxLDE3ICs0OTEsMjAgQEAKIAlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKG1jYnNwW2lkXS5kbWFfdHhfbGNoLAogCQkJCSAgICAgT01BUF9ETUFfREFUQV9UWVBFX1MxNiwKIAkJCQkgICAgIGxlbmd0aCA+PiAxLCAxLAotCQkJCSAgICAgT01BUF9ETUFfU1lOQ19FTEVNRU5UKTsKKwkJCQkgICAgIE9NQVBfRE1BX1NZTkNfRUxFTUVOVCwKKwkJCQkgICAgIDAsIDApOwogCiAJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKG1jYnNwW2lkXS5kbWFfdHhfbGNoLAogCQkJCSBPTUFQX0RNQV9QT1JUX1RJUEIsCiAJCQkJIE9NQVBfRE1BX0FNT0RFX0NPTlNUQU5ULAotCQkJCSBtY2JzcFtpZF0uaW9fYmFzZSArIE9NQVBfTUNCU1BfUkVHX0RYUjEpOworCQkJCSBtY2JzcFtpZF0uaW9fYmFzZSArIE9NQVBfTUNCU1BfUkVHX0RYUjEsCisJCQkJIDAsIDApOwogCiAJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMobWNic3BbaWRdLmRtYV90eF9sY2gsCiAJCQkJT01BUF9ETUFfUE9SVF9FTUlGRiwKIAkJCQlPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKLQkJCQlidWZmZXIpOworCQkJCWJ1ZmZlciwKKwkJCQkwLCAwKTsKIAogCW9tYXBfc3RhcnRfZG1hKG1jYnNwW2lkXS5kbWFfdHhfbGNoKTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCYobWNic3BbaWRdLnR4X2RtYV9jb21wbGV0aW9uKSk7CkBAIC01MzEsMTcgKzUzNCwyMCBAQAogCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMobWNic3BbaWRdLmRtYV9yeF9sY2gsCiAJCQkJICAgICBPTUFQX0RNQV9EQVRBX1RZUEVfUzE2LAogCQkJCSAgICAgbGVuZ3RoID4+IDEsIDEsCi0JCQkJICAgICBPTUFQX0RNQV9TWU5DX0VMRU1FTlQpOworCQkJCSAgICAgT01BUF9ETUFfU1lOQ19FTEVNRU5ULAorCQkJCSAgICAgMCwgMCk7CiAKIAlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhtY2JzcFtpZF0uZG1hX3J4X2xjaCwKIAkJCQlPTUFQX0RNQV9QT1JUX1RJUEIsCiAJCQkJT01BUF9ETUFfQU1PREVfQ09OU1RBTlQsCi0JCQkJbWNic3BbaWRdLmlvX2Jhc2UgKyBPTUFQX01DQlNQX1JFR19EUlIxKTsKKwkJCQltY2JzcFtpZF0uaW9fYmFzZSArIE9NQVBfTUNCU1BfUkVHX0RSUjEsCisJCQkJMCwgMCk7CiAKIAlvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMobWNic3BbaWRdLmRtYV9yeF9sY2gsCiAJCQkJIE9NQVBfRE1BX1BPUlRfRU1JRkYsCiAJCQkJIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAotCQkJCSBidWZmZXIpOworCQkJCSBidWZmZXIsCisJCQkJIDAsIDApOwogCiAJb21hcF9zdGFydF9kbWEobWNic3BbaWRdLmRtYV9yeF9sY2gpOwogCXdhaXRfZm9yX2NvbXBsZXRpb24oJihtY2JzcFtpZF0ucnhfZG1hX2NvbXBsZXRpb24pKTsKQEAgLTY0Myw3ICs2NDksNyBAQAogfTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogc3RhdGljIGNvbnN0IHN0cnVjdCBvbWFwX21jYnNwX2luZm8gbWNic3BfMTUxMFtdID0gewogCVswXSA9IHsgLnZpcnRfYmFzZSA9IE9NQVAxNTEwX01DQlNQMV9CQVNFLAogCQkuZG1hX3J4X3N5bmMgPSBPTUFQX0RNQV9NQ0JTUDFfUlgsCkBAIC03MTIsNyArNzE4LDcgQEAKIAkJbWNic3BfY291bnQgPSBBUlJBWV9TSVpFKG1jYnNwXzczMCk7CiAJfQogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgewogCQltY2JzcF9pbmZvID0gbWNic3BfMTUxMDsKIAkJbWNic3BfY291bnQgPSBBUlJBWV9TSVpFKG1jYnNwXzE1MTApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL211eC5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL211eC5jCmluZGV4IDY0NDgyMDQuLjhjMWMwMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9tdXguYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbXV4LmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogVXRpbGl0eSB0byBzZXQgdGhlIE9tYXAgTVVYIGFuZCBQVUxMX0RXTiByZWdpc3RlcnMgZnJvbSBhIHRhYmxlIGluIG11eC5oCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzIE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCiAgKgogICogV3JpdHRlbiBieSBUb255IExpbmRncmVuIDx0b255LmxpbmRncmVuQG5va2lhLmNvbT4KICAqCkBAIC0yNSwzOCArMjUsNzQgQEAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0KLSNkZWZpbmUgX19NVVhfQ19fCiAjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CiAKICNpZmRlZiBDT05GSUdfT01BUF9NVVgKIAorI2RlZmluZSBPTUFQMjRYWF9MNF9CQVNFCTB4NDgwMDAwMDAKKyNkZWZpbmUgT01BUDI0WFhfUFVMTF9FTkEJKDEgPDwgMykKKyNkZWZpbmUgT01BUDI0WFhfUFVMTF9VUAkoMSA8PCA0KQorCitzdGF0aWMgc3RydWN0IHBpbl9jb25maWcgKiBwaW5fdGFibGU7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBwaW5fdGFibGVfc3o7CisKK2V4dGVybiBzdHJ1Y3QgcGluX2NvbmZpZyAqIG9tYXA3MzBfcGluczsKK2V4dGVybiBzdHJ1Y3QgcGluX2NvbmZpZyAqIG9tYXAxeHh4X3BpbnM7CitleHRlcm4gc3RydWN0IHBpbl9jb25maWcgKiBvbWFwMjR4eF9waW5zOworCitpbnQgX19pbml0IG9tYXBfbXV4X3JlZ2lzdGVyKHN0cnVjdCBwaW5fY29uZmlnICogcGlucywgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXBpbl90YWJsZSA9IHBpbnM7CisJcGluX3RhYmxlX3N6ID0gc2l6ZTsKKworCXJldHVybiAwOworfQorCiAvKgogICogU2V0cyB0aGUgT21hcCBNVVggYW5kIFBVTExfRFdOIHJlZ2lzdGVycyBiYXNlZCBvbiB0aGUgdGFibGUKICAqLwotaW50IF9faW5pdF9vcl9tb2R1bGUKLW9tYXBfY2ZnX3JlZyhjb25zdCByZWdfY2ZnX3QgcmVnX2NmZykKK2ludCBfX2luaXRfb3JfbW9kdWxlIG9tYXBfY2ZnX3JlZyhjb25zdCB1bnNpZ25lZCBsb25nIGluZGV4KQogewogCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobXV4X3NwaW5fbG9jayk7CiAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXJlZ19jZmdfc2V0ICpjZmc7CisJc3RydWN0IHBpbl9jb25maWcgKmNmZzsKIAl1bnNpZ25lZCBpbnQgcmVnX29yaWcgPSAwLCByZWcgPSAwLCBwdV9wZF9vcmlnID0gMCwgcHVfcGQgPSAwLAogCQlwdWxsX29yaWcgPSAwLCBwdWxsID0gMDsKIAl1bnNpZ25lZCBpbnQgbWFzaywgd2FybiA9IDA7CiAKLQlpZiAoY3B1X2lzX29tYXA3eHgoKSkKLQkJcmV0dXJuIDA7CisJaWYgKCFwaW5fdGFibGUpCisJCUJVRygpOwogCi0JaWYgKHJlZ19jZmcgPiBBUlJBWV9TSVpFKHJlZ19jZmdfdGFibGUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiTVVYOiByZWdfY2ZnICVkXG4iLCByZWdfY2ZnKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGluZGV4ID49IHBpbl90YWJsZV9zeikgeworCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgcGluIG11eCBpbmRleDogJWx1ICglbHUpXG4iLAorCQkgICAgICAgaW5kZXgsIHBpbl90YWJsZV9zeik7CisJCWR1bXBfc3RhY2soKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JY2ZnID0gKHJlZ19jZmdfc2V0ICopJnJlZ19jZmdfdGFibGVbcmVnX2NmZ107CisJY2ZnID0gKHN0cnVjdCBwaW5fY29uZmlnICopJnBpbl90YWJsZVtpbmRleF07CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCXU4IHJlZyA9IDA7CisKKwkJcmVnIHw9IGNmZy0+bWFzayAmIDB4NzsKKwkJaWYgKGNmZy0+cHVsbF92YWwpCisJCQlyZWcgfD0gT01BUDI0WFhfUFVMTF9FTkE7CisJCWlmKGNmZy0+cHVfcGRfdmFsKQorCQkJcmVnIHw9IE9NQVAyNFhYX1BVTExfVVA7CisjaWZkZWYgQ09ORklHX09NQVBfTVVYX0RFQlVHCisJCXByaW50aygiTXV4aW5nICVzICgweCUwOHgpOiAweCUwMnggLT4gMHglMDJ4XG4iLAorCQkgICAgICAgY2ZnLT5uYW1lLCBPTUFQMjRYWF9MNF9CQVNFICsgY2ZnLT5tdXhfcmVnLAorCQkgICAgICAgb21hcF9yZWFkYihPTUFQMjRYWF9MNF9CQVNFICsgY2ZnLT5tdXhfcmVnKSwgcmVnKTsKKyNlbmRpZgorCQlvbWFwX3dyaXRlYihyZWcsIE9NQVAyNFhYX0w0X0JBU0UgKyBjZmctPm11eF9yZWcpOworCisJCXJldHVybiAwOworCX0KIAogCS8qIENoZWNrIHRoZSBtdXggcmVnaXN0ZXIgaW4gcXVlc3Rpb24gKi8KIAlpZiAoY2ZnLT5tdXhfcmVnKSB7CkBAIC0xNTcsNyArMTkzLDggQEAKIAlyZXR1cm4gMDsKICNlbmRpZgogfQotCiBFWFBPUlRfU1lNQk9MKG9tYXBfY2ZnX3JlZyk7Ci0KKyNlbHNlCisjZGVmaW5lIG9tYXBfbXV4X2luaXQoKSBkbyB7fSB3aGlsZSgwKQorI2RlZmluZSBvbWFwX2NmZ19yZWcoeCkJZG8ge30gd2hpbGUoMCkKICNlbmRpZgkvKiBDT05GSUdfT01BUF9NVVggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9wbS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3BtLmMKaW5kZXggZTE1YzZjMS4uOTY2Y2NhMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9wbS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9wbS5jCkBAIC01NCwxMSArNTQsMTIgQEAKICNpbmNsdWRlIDxhc20vYXJjaC90cHM2NTAxMC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2RzcF9jb21tb24uaD4KIAotI2luY2x1ZGUgImNsb2NrLmgiCi0jaW5jbHVkZSAic3JhbS5oIgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3JhbS5oPgogCiBzdGF0aWMgdW5zaWduZWQgaW50IGFybV9zbGVlcF9zYXZlW0FSTV9TTEVFUF9TQVZFX1NJWkVdOwogc3RhdGljIHVuc2lnbmVkIHNob3J0IHVscGRfc2xlZXBfc2F2ZVtVTFBEX1NMRUVQX1NBVkVfU0laRV07CitzdGF0aWMgdW5zaWduZWQgaW50IG1wdWk3MzBfc2xlZXBfc2F2ZVtNUFVJNzMwX1NMRUVQX1NBVkVfU0laRV07CiBzdGF0aWMgdW5zaWduZWQgaW50IG1wdWkxNTEwX3NsZWVwX3NhdmVbTVBVSTE1MTBfU0xFRVBfU0FWRV9TSVpFXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbXB1aTE2MTBfc2xlZXBfc2F2ZVtNUFVJMTYxMF9TTEVFUF9TQVZFX1NJWkVdOwogCkBAIC0xMjAsOCArMTIxLDggQEAKICAqLwogc3RhdGljIHZvaWQgb21hcF9wbV93YWtldXBfc2V0dXAodm9pZCkKIHsKLQl1MzIgbGV2ZWwxX3dha2UgPSBPTUFQX0lSUV9CSVQoSU5UX0lIMl9JUlEpOwotCXUzMiBsZXZlbDJfd2FrZSA9IE9NQVBfSVJRX0JJVChJTlRfVUFSVDIpIHwgT01BUF9JUlFfQklUKElOVF9LRVlCT0FSRCk7CisJdTMyIGxldmVsMV93YWtlID0gMDsKKwl1MzIgbGV2ZWwyX3dha2UgPSBPTUFQX0lSUV9CSVQoSU5UX1VBUlQyKTsKIAogCS8qCiAJICogVHVybiBvZmYgYWxsIGludGVycnVwdHMgZXhjZXB0IEdQSU8gYmFuayAxLCBMMS0ybmQgbGV2ZWwgY2FzY2FkZSwKQEAgLTEyOSwxOSArMTMwLDI5IEBACiAJICogZHJpdmVycyBtdXN0IHN0aWxsIHNlcGFyYXRlbHkgY2FsbCBvbWFwX3NldF9ncGlvX3dha2V1cCgpIHRvCiAJICogd2FrZSB1cCB0byBhIEdQSU8gaW50ZXJydXB0LgogCSAqLwotCWlmIChjcHVfaXNfb21hcDE1MTAoKSB8fCBjcHVfaXNfb21hcDE2eHgoKSkKLQkJbGV2ZWwxX3dha2UgfD0gT01BUF9JUlFfQklUKElOVF9HUElPX0JBTksxKTsKLQllbHNlIGlmIChjcHVfaXNfb21hcDczMCgpKQotCQlsZXZlbDFfd2FrZSB8PSBPTUFQX0lSUV9CSVQoSU5UXzczMF9HUElPX0JBTksxKTsKKwlpZiAoY3B1X2lzX29tYXA3MzAoKSkKKwkJbGV2ZWwxX3dha2UgPSBPTUFQX0lSUV9CSVQoSU5UXzczMF9HUElPX0JBTksxKSB8CisJCQlPTUFQX0lSUV9CSVQoSU5UXzczMF9JSDJfSVJRKTsKKwllbHNlIGlmIChjcHVfaXNfb21hcDE1MTAoKSkKKwkJbGV2ZWwxX3dha2UgPSBPTUFQX0lSUV9CSVQoSU5UX0dQSU9fQkFOSzEpIHwKKwkJCU9NQVBfSVJRX0JJVChJTlRfMTUxMF9JSDJfSVJRKTsKKwllbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSkKKwkJbGV2ZWwxX3dha2UgPSBPTUFQX0lSUV9CSVQoSU5UX0dQSU9fQkFOSzEpIHwKKwkJCU9NQVBfSVJRX0JJVChJTlRfMTYxMF9JSDJfSVJRKTsKIAogCW9tYXBfd3JpdGVsKH5sZXZlbDFfd2FrZSwgT01BUF9JSDFfTUlSKTsKIAotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkKLQkJb21hcF93cml0ZWwofmxldmVsMl93YWtlLCAgT01BUF9JSDJfTUlSKTsKLQotCS8qIElOVF8xNjEwX1dBS0VfVVBfUkVRIGlzIG5lZWRlZCBmb3IgR1BJTyB3YWtldXAuLi4gKi8KLQlpZiAoY3B1X2lzX29tYXAxNnh4KCkpIHsKKwlpZiAoY3B1X2lzX29tYXA3MzAoKSkgewogCQlvbWFwX3dyaXRlbCh+bGV2ZWwyX3dha2UsIE9NQVBfSUgyXzBfTUlSKTsKKwkJb21hcF93cml0ZWwofihPTUFQX0lSUV9CSVQoSU5UXzczMF9XQUtFX1VQX1JFUSkgfCBPTUFQX0lSUV9CSVQoSU5UXzczMF9NUFVJT19LRVlQQUQpKSwgT01BUF9JSDJfMV9NSVIpOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwkJbGV2ZWwyX3dha2UgfD0gT01BUF9JUlFfQklUKElOVF9LRVlCT0FSRCk7CisJCW9tYXBfd3JpdGVsKH5sZXZlbDJfd2FrZSwgIE9NQVBfSUgyX01JUik7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSkgeworCQlsZXZlbDJfd2FrZSB8PSBPTUFQX0lSUV9CSVQoSU5UX0tFWUJPQVJEKTsKKwkJb21hcF93cml0ZWwofmxldmVsMl93YWtlLCBPTUFQX0lIMl8wX01JUik7CisKKwkJLyogSU5UXzE2MTBfV0FLRV9VUF9SRVEgaXMgbmVlZGVkIGZvciBHUElPIHdha2V1cC4uLiAqLwogCQlvbWFwX3dyaXRlbCh+T01BUF9JUlFfQklUKElOVF8xNjEwX1dBS0VfVVBfUkVRKSwgT01BUF9JSDJfMV9NSVIpOwogCQlvbWFwX3dyaXRlbCh+MHgwLCBPTUFQX0lIMl8yX01JUik7CiAJCW9tYXBfd3JpdGVsKH4weDAsIE9NQVBfSUgyXzNfTUlSKTsKQEAgLTE4NSw3ICsxOTYsMTcgQEAKICAJICogU2F2ZSBpbnRlcnJ1cHQsIE1QVUksIEFSTSBhbmQgVVBMRCBjb250cm9sIHJlZ2lzdGVycy4KIAkgKi8KIAotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDczMCgpKSB7CisJCU1QVUk3MzBfU0FWRShPTUFQX0lIMV9NSVIpOworCQlNUFVJNzMwX1NBVkUoT01BUF9JSDJfMF9NSVIpOworCQlNUFVJNzMwX1NBVkUoT01BUF9JSDJfMV9NSVIpOworCQlNUFVJNzMwX1NBVkUoTVBVSV9DVFJMKTsKKwkJTVBVSTczMF9TQVZFKE1QVUlfRFNQX0JPT1RfQ09ORklHKTsKKwkJTVBVSTczMF9TQVZFKE1QVUlfRFNQX0FQSV9DT05GSUcpOworCQlNUFVJNzMwX1NBVkUoRU1JRlNfQ09ORklHKTsKKwkJTVBVSTczMF9TQVZFKEVNSUZGX1NEUkFNX0NPTkZJRyk7CisKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CiAJCU1QVUkxNTEwX1NBVkUoT01BUF9JSDFfTUlSKTsKIAkJTVBVSTE1MTBfU0FWRShPTUFQX0lIMl9NSVIpOwogCQlNUFVJMTUxMF9TQVZFKE1QVUlfQ1RSTCk7CkBAIC0yODAsNyArMzAxLDEzIEBACiAJVUxQRF9SRVNUT1JFKFVMUERfQ0xPQ0tfQ1RSTCk7CiAJVUxQRF9SRVNUT1JFKFVMUERfU1RBVFVTX1JFUSk7CiAKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoY3B1X2lzX29tYXA3MzAoKSkgeworCQlNUFVJNzMwX1JFU1RPUkUoRU1JRlNfQ09ORklHKTsKKwkJTVBVSTczMF9SRVNUT1JFKEVNSUZGX1NEUkFNX0NPTkZJRyk7CisJCU1QVUk3MzBfUkVTVE9SRShPTUFQX0lIMV9NSVIpOworCQlNUFVJNzMwX1JFU1RPUkUoT01BUF9JSDJfMF9NSVIpOworCQlNUFVJNzMwX1JFU1RPUkUoT01BUF9JSDJfMV9NSVIpOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKIAkJTVBVSTE1MTBfUkVTVE9SRShNUFVJX0NUUkwpOwogCQlNUFVJMTUxMF9SRVNUT1JFKE1QVUlfRFNQX0JPT1RfQ09ORklHKTsKIAkJTVBVSTE1MTBfUkVTVE9SRShNUFVJX0RTUF9BUElfQ09ORklHKTsKQEAgLTM1NSw3ICszODIsMTQgQEAKIAlVTFBEX1NBVkUoVUxQRF9EUExMX0NUUkwpOwogCVVMUERfU0FWRShVTFBEX1BPV0VSX0NUUkwpOwogCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKKwkJTVBVSTczMF9TQVZFKE1QVUlfQ1RSTCk7CisJCU1QVUk3MzBfU0FWRShNUFVJX0RTUF9TVEFUVVMpOworCQlNUFVJNzMwX1NBVkUoTVBVSV9EU1BfQk9PVF9DT05GSUcpOworCQlNUFVJNzMwX1NBVkUoTVBVSV9EU1BfQVBJX0NPTkZJRyk7CisJCU1QVUk3MzBfU0FWRShFTUlGRl9TRFJBTV9DT05GSUcpOworCQlNUFVJNzMwX1NBVkUoRU1JRlNfQ09ORklHKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CiAJCU1QVUkxNTEwX1NBVkUoTVBVSV9DVFJMKTsKIAkJTVBVSTE1MTBfU0FWRShNUFVJX0RTUF9TVEFUVVMpOwogCQlNUFVJMTUxMF9TQVZFKE1QVUlfRFNQX0JPT1RfQ09ORklHKTsKQEAgLTQwNCw3ICs0MzgsMjEgQEAKIAkJICAgVUxQRF9TSE9XKFVMUERfU1RBVFVTX1JFUSksCiAJCSAgIFVMUERfU0hPVyhVTFBEX1BPV0VSX0NUUkwpKTsKIAotCQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwkJaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKKwkJCW15X2J1ZmZlcl9vZmZzZXQgKz0gc3ByaW50ZihteV9iYXNlICsgbXlfYnVmZmVyX29mZnNldCwKKwkJCSAgICJNUFVJNzMwX0NUUkxfUkVHCSAgICAgMHglLTh4IFxuIgorCQkJICAgIk1QVUk3MzBfRFNQX1NUQVRVU19SRUc6ICAgICAgMHglLTh4IFxuIgorCQkJICAgIk1QVUk3MzBfRFNQX0JPT1RfQ09ORklHX1JFRzogMHglLTh4IFxuIgorCSAiTVBVSTczMF9EU1BfQVBJX0NPTkZJR19SRUc6ICAweCUtOHggXG4iCisJICJNUFVJNzMwX1NEUkFNX0NPTkZJR19SRUc6ICAgIDB4JS04eCBcbiIKKwkgIk1QVUk3MzBfRU1JRlNfQ09ORklHX1JFRzogICAgMHglLTh4IFxuIiwKKwkgTVBVSTczMF9TSE9XKE1QVUlfQ1RSTCksCisJIE1QVUk3MzBfU0hPVyhNUFVJX0RTUF9TVEFUVVMpLAorCSBNUFVJNzMwX1NIT1coTVBVSV9EU1BfQk9PVF9DT05GSUcpLAorCSBNUFVJNzMwX1NIT1coTVBVSV9EU1BfQVBJX0NPTkZJRyksCisJIE1QVUk3MzBfU0hPVyhFTUlGRl9TRFJBTV9DT05GSUcpLAorCSBNUFVJNzMwX1NIT1coRU1JRlNfQ09ORklHKSk7CisJCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKIAkJCW15X2J1ZmZlcl9vZmZzZXQgKz0gc3ByaW50ZihteV9iYXNlICsgbXlfYnVmZmVyX29mZnNldCwKIAkJCSAgICJNUFVJMTUxMF9DVFJMX1JFRyAgICAgICAgICAgICAweCUtOHggXG4iCiAJCQkgICAiTVBVSTE1MTBfRFNQX1NUQVRVU19SRUc6ICAgICAgMHglLTh4IFxuIgpAQCAtNTUzLDcgKzYwMSwxMiBAQAogCSAqIFRoZXNlIHJvdXRpbmVzIG5lZWQgdG8gYmUgaW4gU1JBTSBhcyB0aGF0J3MgdGhlIG9ubHkKIAkgKiBtZW1vcnkgdGhlIE1QVSBjYW4gc2VlIHdoZW4gaXQgd2FrZXMgdXAuCiAJICovCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKKwkJb21hcF9zcmFtX2lkbGUgPSBvbWFwX3NyYW1fcHVzaChvbWFwNzMwX2lkbGVfbG9vcF9zdXNwZW5kLAorCQkJCQkJb21hcDczMF9pZGxlX2xvb3Bfc3VzcGVuZF9zeik7CisJCW9tYXBfc3JhbV9zdXNwZW5kID0gb21hcF9zcmFtX3B1c2gob21hcDczMF9jcHVfc3VzcGVuZCwKKwkgb21hcDczMF9jcHVfc3VzcGVuZF9zeik7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE1MTAoKSkgewogCQlvbWFwX3NyYW1faWRsZSA9IG9tYXBfc3JhbV9wdXNoKG9tYXAxNTEwX2lkbGVfbG9vcF9zdXNwZW5kLAogCQkJCQkJb21hcDE1MTBfaWRsZV9sb29wX3N1c3BlbmRfc3opOwogCQlvbWFwX3NyYW1fc3VzcGVuZCA9IG9tYXBfc3JhbV9wdXNoKG9tYXAxNTEwX2NwdV9zdXNwZW5kLApAQCAtNTcyLDcgKzYyNSwxMSBAQAogCiAJcG1faWRsZSA9IG9tYXBfcG1faWRsZTsKIAotCXNldHVwX2lycShJTlRfMTYxMF9XQUtFX1VQX1JFUSwgJm9tYXBfd2FrZXVwX2lycSk7CisJaWYgKGNwdV9pc19vbWFwNzMwKCkpCisJCXNldHVwX2lycShJTlRfNzMwX1dBS0VfVVBfUkVRLCAmb21hcF93YWtldXBfaXJxKTsKKwllbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSkKKwkJc2V0dXBfaXJxKElOVF8xNjEwX1dBS0VfVVBfUkVRLCAmb21hcF93YWtldXBfaXJxKTsKKwogI2lmIDAKIAkvKiAtLS0gQkVHSU4gQk9BUkQtREVQRU5ERU5UIENPREUgLS0tICovCiAJLyogU2xlZXB4IG1hc2sgZGlyZWN0aW9uICovCkBAIC01OTEsNyArNjQ4LDkgQEAKIAlvbWFwX3dyaXRldyhVTFBEX1BPV0VSX0NUUkxfUkVHX1ZBTCwgVUxQRF9QT1dFUl9DVFJMKTsKIAogCS8qIENvbmZpZ3VyZSBJRExFQ1QzICovCi0JaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQorCWlmIChjcHVfaXNfb21hcDczMCgpKQorCQlvbWFwX3dyaXRlbChPTUFQNzMwX0lETEVDVDNfVkFMLCBPTUFQNzMwX0lETEVDVDMpOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQogCQlvbWFwX3dyaXRlbChPTUFQMTYxMF9JRExFQ1QzX1ZBTCwgT01BUDE2MTBfSURMRUNUMyk7CiAKIAlwbV9zZXRfb3BzKCZvbWFwX3BtX29wcyk7CkBAIC02MDAsOCArNjU5LDEwIEBACiAJb21hcF9wbV9pbml0X3Byb2MoKTsKICNlbmRpZgogCi0JLyogY29uZmlndXJlIExPV19QV1IgcGluICovCi0Jb21hcF9jZmdfcmVnKFQyMF8xNjEwX0xPV19QV1IpOworCWlmIChjcHVfaXNfb21hcDE2eHgoKSkgeworCQkvKiBjb25maWd1cmUgTE9XX1BXUiBwaW4gKi8KKwkJb21hcF9jZmdfcmVnKFQyMF8xNjEwX0xPV19QV1IpOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NsZWVwLlMgYi9hcmNoL2FybS9wbGF0LW9tYXAvc2xlZXAuUwppbmRleCA5Zjc0NTgzLi40Y2Q3ZDI5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvc2xlZXAuUworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvc2xlZXAuUwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBsaW51eC9hcmNoL2FybS9wbGF0LW9tYXAvc2xlZXAuUwogICoKLSAqIExvdy1sZXZlbCBPTUFQMTUxMC8xNjEwIHNsZWVwL3dha2VVcCBzdXBwb3J0CisgKiBMb3ctbGV2ZWwgT01BUDczMC8xNTEwLzE2MTAgc2xlZXAvd2FrZVVwIHN1cHBvcnQKICAqCiAgKiBJbml0aWFsIFNBMTExMCBjb2RlOgogICogQ29weXJpZ2h0IChjKSAyMDAxIENsaWZmIEJyYWtlIDxjYnJha2VAYWNjZWxlbnQuY29tPgpAQCAtNTIsNyArNTIsNTcgQEAKICAqICAgICAgIHByb2Nlc3NvciBzcGVjaWZpYyBmdW5jdGlvbnMgaGVyZS4KICAqLwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCitFTlRSWShvbWFwNzMwX2lkbGVfbG9vcF9zdXNwZW5kKQorCisJc3RtZmQJc3AhLCB7cjAgLSByMTIsIGxyfQkJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjaworCisJQCBsb2FkIGJhc2UgYWRkcmVzcyBvZiBBUk1fSURMRUNUMSBhbmQgQVJNX0lETEVDVDIKKwltb3YJcjQsICNDTEtHRU5fUkVHX0FTTV9CQVNFICYgMHhmZjAwMDAwMAorCW9ycglyNCwgcjQsICNDTEtHRU5fUkVHX0FTTV9CQVNFICYgMHgwMGZmMDAwMAorCW9ycglyNCwgcjQsICNDTEtHRU5fUkVHX0FTTV9CQVNFICYgMHgwMDAwZmYwMAorCisJQCB0dXJuIG9mZiBjbG9jayBkb21haW5zCisJQCBnZXQgQVJNX0lETEVDVDIgaW50byByMgorCWxkcmgJcjIsIFtyNCwgI0FSTV9JRExFQ1QyX0FTTV9PRkZTRVQgJiAweGZmXQorCW1vdglyNSwgI09NQVA3MzBfSURMRUNUMl9TTEVFUF9WQUwgJiAweGZmCisJb3JyCXI1LCByNSwgI09NQVA3MzBfSURMRUNUMl9TTEVFUF9WQUwgJiAweGZmMDAKKwlzdHJoCXI1LCBbcjQsICNBUk1fSURMRUNUMl9BU01fT0ZGU0VUICYgMHhmZl0KKworCUAgcmVxdWVzdCBBUk0gaWRsZQorCUAgZ2V0IEFSTV9JRExFQ1QxIGludG8gcjEKKwlsZHJoCXIxLCBbcjQsICNBUk1fSURMRUNUMV9BU01fT0ZGU0VUICYgMHhmZl0KKwlvcnIJcjMsIHIxLCAjT01BUDczMF9JRExFX0xPT1BfUkVRVUVTVCAmIDB4ZmZmZgorCXN0cmgJcjMsIFtyNCwgI0FSTV9JRExFQ1QxX0FTTV9PRkZTRVQgJiAweGZmXQorCisJbW92CXI1LCAjSURMRV9XQUlUX0NZQ0xFUyAmIDB4ZmYKKwlvcnIJcjUsIHI1LCAjSURMRV9XQUlUX0NZQ0xFUyAmIDB4ZmYwMAorbF83MzA6CXN1YnMJcjUsIHI1LCAjMQorCWJuZQlsXzczMAorLyoKKyAqIExldCdzIHdhaXQgZm9yIHRoZSBuZXh0IGNsb2NrIHRpY2sgdG8gd2FrZSB1cyB1cC4KKyAqLworCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMwLCA0CQlAIHdhaXQgZm9yIGludGVycnVwdAorLyoKKyAqIG9tYXA3MzBfaWRsZV9sb29wX3N1c3BlbmQoKSdzIHJlc3VtZSBwb2ludC4KKyAqCisgKiBJdCB3aWxsIGp1c3Qgc3RhcnQgZXhlY3V0aW5nIGhlcmUsIHNvIHdlJ2xsIHJlc3RvcmUgc3R1ZmYgZnJvbSB0aGUKKyAqIHN0YWNrLCByZXNldCB0aGUgQVJNX0lETEVDVDEgYW5kIEFSTV9JRExFQ1QyLgorICovCisKKwlAIHJlc3RvcmUgQVJNX0lETEVDVDEgYW5kIEFSTV9JRExFQ1QyIGFuZCByZXR1cm4KKwlAIHIxIGhhcyBBUk1fSURMRUNUMSBhbmQgcjIgc3RpbGwgaGFzIEFSTV9JRExFQ1QyCisJc3RyaAlyMiwgW3I0LCAjQVJNX0lETEVDVDJfQVNNX09GRlNFVCAmIDB4ZmZdCisJc3RyaAlyMSwgW3I0LCAjQVJNX0lETEVDVDFfQVNNX09GRlNFVCAmIDB4ZmZdCisKKwlsZG1mZAlzcCEsIHtyMCAtIHIxMiwgcGN9CQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCisKK0VOVFJZKG9tYXA3MzBfaWRsZV9sb29wX3N1c3BlbmRfc3opCisJLndvcmQJLiAtIG9tYXA3MzBfaWRsZV9sb29wX3N1c3BlbmQKKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQNzMwICovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogRU5UUlkob21hcDE1MTBfaWRsZV9sb29wX3N1c3BlbmQpCiAKIAlzdG1mZAlzcCEsIHtyMCAtIHIxMiwgbHJ9CQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCkBAIC0xMDAsNyArMTUwLDcgQEAKIAogRU5UUlkob21hcDE1MTBfaWRsZV9sb29wX3N1c3BlbmRfc3opCiAJLndvcmQJLiAtIG9tYXAxNTEwX2lkbGVfbG9vcF9zdXNwZW5kCi0jZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDE1MTAgKi8KKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQMTVYWCAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKIEVOVFJZKG9tYXAxNjEwX2lkbGVfbG9vcF9zdXNwZW5kKQpAQCAtMTY5LDcgKzIxOSw4NiBAQAogICoKICAqLwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCitFTlRSWShvbWFwNzMwX2NwdV9zdXNwZW5kKQorCisJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjaworCXN0bWZkCXNwISwge3IwIC0gcjEyLCBscn0KKworCUAgRHJhaW4gd3JpdGUgY2FjaGUKKwltb3YJcjQsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQKKwlub3AKKworCUAgbG9hZCBiYXNlIGFkZHJlc3Mgb2YgVHJhZmZpYyBDb250cm9sbGVyCisJbW92CXI2LCAjVENNSUZfQVNNX0JBU0UgJiAweGZmMDAwMDAwCisJb3JyCXI2LCByNiwgI1RDTUlGX0FTTV9CQVNFICYgMHgwMGZmMDAwMAorCW9ycglyNiwgcjYsICNUQ01JRl9BU01fQkFTRSAmIDB4MDAwMGZmMDAKKworCUAgcHJlcGFyZSB0byBwdXQgU0RSQU0gaW50byBzZWxmLXJlZnJlc2ggbWFudWFsbHkKKwlsZHIJcjcsIFtyNiwgI0VNSUZGX1NEUkFNX0NPTkZJR19BU01fT0ZGU0VUICYgMHhmZl0KKwlvcnIJcjksIHI3LCAjU0VMRl9SRUZSRVNIX01PREUgJiAweGZmMDAwMDAwCisJb3JyCXI5LCByOSwgI1NFTEZfUkVGUkVTSF9NT0RFICYgMHgwMDAwMDBmZgorCXN0cglyOSwgW3I2LCAjRU1JRkZfU0RSQU1fQ09ORklHX0FTTV9PRkZTRVQgJiAweGZmXQorCisJQCBwcmVwYXJlIHRvIHB1dCBFTUlGUyB0byBTbGVlcAorCWxkcglyOCwgW3I2LCAjRU1JRlNfQ09ORklHX0FTTV9PRkZTRVQgJiAweGZmXQorCW9ycglyOSwgcjgsICNJRExFX0VNSUZTX1JFUVVFU1QgJiAweGZmCisJc3RyCXI5LCBbcjYsICNFTUlGU19DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCisKKwlAIGxvYWQgYmFzZSBhZGRyZXNzIG9mIEFSTV9JRExFQ1QxIGFuZCBBUk1fSURMRUNUMgorCW1vdglyNCwgI0NMS0dFTl9SRUdfQVNNX0JBU0UgJiAweGZmMDAwMDAwCisJb3JyCXI0LCByNCwgI0NMS0dFTl9SRUdfQVNNX0JBU0UgJiAweDAwZmYwMDAwCisJb3JyCXI0LCByNCwgI0NMS0dFTl9SRUdfQVNNX0JBU0UgJiAweDAwMDBmZjAwCisKKwlAIHR1cm4gb2ZmIGNsb2NrIGRvbWFpbnMKKwlAIGRvIG5vdCBkaXNhYmxlIFBFUkNLICgweDA0KQorCW1vdglyNSwgI09NQVA3MzBfSURMRUNUMl9TTEVFUF9WQUwgJiAweGZmCisJb3JyCXI1LCByNSwgI09NQVA3MzBfSURMRUNUMl9TTEVFUF9WQUwgJiAweGZmMDAKKwlzdHJoCXI1LCBbcjQsICNBUk1fSURMRUNUMl9BU01fT0ZGU0VUICYgMHhmZl0KKworCUAgcmVxdWVzdCBBUk0gaWRsZQorCW1vdglyMywgI09NQVA3MzBfSURMRUNUMV9TTEVFUF9WQUwgJiAweGZmCisJb3JyCXIzLCByMywgI09NQVA3MzBfSURMRUNUMV9TTEVFUF9WQUwgJiAweGZmMDAKKwlzdHJoCXIzLCBbcjQsICNBUk1fSURMRUNUMV9BU01fT0ZGU0VUICYgMHhmZl0KKworCUAgZGlzYWJsZSBpbnN0cnVjdGlvbiBjYWNoZQorCW1yYwlwMTUsIDAsIHI5LCBjMSwgYzAsIDAKKwliaWMJcjIsIHI5LCAjMHgxMDAwCisJbWNyCXAxNSwgMCwgcjIsIGMxLCBjMCwgMAorCW5vcAorCisvKgorICogTGV0J3Mgd2FpdCBmb3IgdGhlIG5leHQgd2FrZSB1cCBldmVudCB0byB3YWtlIHVzIHVwLiByMCBjYW4ndCBiZQorICogdXNlZCBoZXJlIGJlY2F1c2UgcjAgaG9sZHMgQVJNX0lETEVDVDEKKyAqLworCW1vdglyMiwgIzAKKwltY3IJcDE1LCAwLCByMiwgYzcsIGMwLCA0CQlAIHdhaXQgZm9yIGludGVycnVwdAorLyoKKyAqIG9tYXA3MzBfY3B1X3N1c3BlbmQoKSdzIHJlc3VtZSBwb2ludC4KKyAqCisgKiBJdCB3aWxsIGp1c3Qgc3RhcnQgZXhlY3V0aW5nIGhlcmUsIHNvIHdlJ2xsIHJlc3RvcmUgc3R1ZmYgZnJvbSB0aGUKKyAqIHN0YWNrLgorICovCisJQCByZS1lbmFibGUgSWNhY2hlCisJbWNyCXAxNSwgMCwgcjksIGMxLCBjMCwgMAorCisJQCByZXNldCB0aGUgQVJNX0lETEVDVDEgYW5kIEFSTV9JRExFQ1QyLgorCXN0cmgJcjEsIFtyNCwgI0FSTV9JRExFQ1QyX0FTTV9PRkZTRVQgJiAweGZmXQorCXN0cmgJcjAsIFtyNCwgI0FSTV9JRExFQ1QxX0FTTV9PRkZTRVQgJiAweGZmXQorCisJQCBSZXN0b3JlIEVNSUZGIGNvbnRyb2xzCisJc3RyCXI3LCBbcjYsICNFTUlGRl9TRFJBTV9DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCisJc3RyCXI4LCBbcjYsICNFTUlGU19DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCisKKwlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCisJbGRtZmQJc3AhLCB7cjAgLSByMTIsIHBjfQorCitFTlRSWShvbWFwNzMwX2NwdV9zdXNwZW5kX3N6KQorCS53b3JkCS4gLSBvbWFwNzMwX2NwdV9zdXNwZW5kCisjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDczMCAqLworCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIEVOVFJZKG9tYXAxNTEwX2NwdV9zdXNwZW5kKQogCiAJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawpAQCAtMjQxLDcgKzM3MCw3IEBACiAKIEVOVFJZKG9tYXAxNTEwX2NwdV9zdXNwZW5kX3N6KQogCS53b3JkCS4gLSBvbWFwMTUxMF9jcHVfc3VzcGVuZAotI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAxNTEwICovCisjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDE1WFggKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCiBFTlRSWShvbWFwMTYxMF9jcHVfc3VzcGVuZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCmluZGV4IDdhZDY5ZjEuLjc5MmY2NjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYwpAQCAtMjAsMTAgKzIwLDEzIEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAotI2luY2x1ZGUgInNyYW0uaCIKKyNpbmNsdWRlIDxhc20vYXJjaC9zcmFtLmg+CiAKLSNkZWZpbmUgT01BUDFfU1JBTV9CQVNFCQkweGQwMDAwMDAwCi0jZGVmaW5lIE9NQVAxX1NSQU1fU1RBUlQJMHgyMDAwMDAwMAorI2RlZmluZSBPTUFQMV9TUkFNX1BBCQkweDIwMDAwMDAwCisjZGVmaW5lIE9NQVAxX1NSQU1fVkEJCTB4ZDAwMDAwMDAKKyNkZWZpbmUgT01BUDJfU1JBTV9QQQkJMHg0MDIwMDAwMAorI2RlZmluZSBPTUFQMl9TUkFNX1ZBCQkweGQwMDAwMDAwCisKICNkZWZpbmUgU1JBTV9CT09UTE9BREVSX1NaCTB4ODAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcF9zcmFtX2Jhc2U7CkBAIC0zMSwzNyArMzQsNDAgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXBfc3JhbV9jZWlsOwogCiAvKgotICogVGhlIGFtb3VudCBvZiBTUkFNIGRlcGVuZHMgb24gdGhlIGNvcmUgdHlwZToKLSAqIDczMCA9IDIwMEssIDE1MTAgPSA1MTJLLCA1OTEyID0gMjU2SywgMTYxMCA9IDE2SywgMTcxMCA9IDE2SworICogVGhlIGFtb3VudCBvZiBTUkFNIGRlcGVuZHMgb24gdGhlIGNvcmUgdHlwZS4KICAqIE5vdGUgdGhhdCB3ZSBjYW5ub3QgdHJ5IHRvIHRlc3QgZm9yIFNSQU0gaGVyZSBiZWNhdXNlIHdyaXRlcwogICogdG8gc2VjdXJlIFNSQU0gd2lsbCBoYW5nIHRoZSBzeXN0ZW0uIEFsc28gdGhlIFNSQU0gaXMgbm90CiAgKiB5ZXQgbWFwcGVkIGF0IHRoaXMgcG9pbnQuCiAgKi8KIHZvaWQgX19pbml0IG9tYXBfZGV0ZWN0X3NyYW0odm9pZCkKIHsKLQlvbWFwX3NyYW1fYmFzZSA9IE9NQVAxX1NSQU1fQkFTRTsKKwlpZiAoIWNwdV9pc19vbWFwMjR4eCgpKQorCQlvbWFwX3NyYW1fYmFzZSA9IE9NQVAxX1NSQU1fVkE7CisJZWxzZQorCQlvbWFwX3NyYW1fYmFzZSA9IE9NQVAyX1NSQU1fVkE7CiAKIAlpZiAoY3B1X2lzX29tYXA3MzAoKSkKLQkJb21hcF9zcmFtX3NpemUgPSAweDMyMDAwOwotCWVsc2UgaWYgKGNwdV9pc19vbWFwMTUxMCgpKQotCQlvbWFwX3NyYW1fc2l6ZSA9IDB4ODAwMDA7CisJCW9tYXBfc3JhbV9zaXplID0gMHgzMjAwMDsJLyogMjAwSyAqLworCWVsc2UgaWYgKGNwdV9pc19vbWFwMTV4eCgpKQorCQlvbWFwX3NyYW1fc2l6ZSA9IDB4MzAwMDA7CS8qIDE5MksgKi8KIAllbHNlIGlmIChjcHVfaXNfb21hcDE2MTAoKSB8fCBjcHVfaXNfb21hcDE2MjEoKSB8fCBjcHVfaXNfb21hcDE3MTAoKSkKLQkJb21hcF9zcmFtX3NpemUgPSAweDQwMDA7CisJCW9tYXBfc3JhbV9zaXplID0gMHg0MDAwOwkvKiAxNksgKi8KIAllbHNlIGlmIChjcHVfaXNfb21hcDE2MTEoKSkKLQkJb21hcF9zcmFtX3NpemUgPSAweDNlODAwOworCQlvbWFwX3NyYW1fc2l6ZSA9IDB4M2U4MDA7CS8qIDI1MEsgKi8KKwllbHNlIGlmIChjcHVfaXNfb21hcDI0MjAoKSkKKwkJb21hcF9zcmFtX3NpemUgPSAweGEwMDE0OwkvKiA2NDBLICovCiAJZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGRldGVjdCBTUkFNIHNpemVcbiIpOwogCQlvbWFwX3NyYW1fc2l6ZSA9IDB4NDAwMDsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJTUkFNIHNpemU6IDB4JWx4XG4iLCBvbWFwX3NyYW1fc2l6ZSk7CiAJb21hcF9zcmFtX2NlaWwgPSBvbWFwX3NyYW1fYmFzZSArIG9tYXBfc3JhbV9zaXplOwogfQogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXBfc3JhbV9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKIAl7CS8qIC5sZW5ndGggZ2V0cyBmaWxsZWQgaW4gYXQgcnVudGltZSAqLwotCQkudmlydHVhbAk9IE9NQVAxX1NSQU1fQkFTRSwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE9NQVAxX1NSQU1fU1RBUlQpLAorCQkudmlydHVhbAk9IE9NQVAxX1NSQU1fVkEsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihPTUFQMV9TUkFNX1BBKSwKIAkJLnR5cGUJCT0gTVRfREVWSUNFCiAJfQogfTsKQEAgLTc2LDEwICs4MiwxOSBAQAogCWlmIChvbWFwX3NyYW1fc2l6ZSA9PSAwKQogCQlyZXR1cm47CiAKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJb21hcF9zcmFtX2lvX2Rlc2NbMF0udmlydHVhbCA9IE9NQVAyX1NSQU1fVkE7CisJCW9tYXBfc3JhbV9pb19kZXNjWzBdLnBmbiA9IF9fcGh5c190b19wZm4oT01BUDJfU1JBTV9QQSk7CisJfQorCiAJb21hcF9zcmFtX2lvX2Rlc2NbMF0ubGVuZ3RoID0gKG9tYXBfc3JhbV9zaXplICsgUEFHRV9TSVpFLTEpL1BBR0VfU0laRTsKIAlvbWFwX3NyYW1faW9fZGVzY1swXS5sZW5ndGggKj0gUEFHRV9TSVpFOwogCWlvdGFibGVfaW5pdChvbWFwX3NyYW1faW9fZGVzYywgQVJSQVlfU0laRShvbWFwX3NyYW1faW9fZGVzYykpOwogCisJcHJpbnRrKEtFUk5fSU5GTyAiU1JBTTogTWFwcGVkIHBhIDB4JTA4bHggdG8gdmEgMHglMDhseCBzaXplOiAweCVseFxuIiwKKwkgICAgICAgb21hcF9zcmFtX2lvX2Rlc2NbMF0ucGZuLCBvbWFwX3NyYW1faW9fZGVzY1swXS52aXJ0dWFsLAorCSAgICAgICBvbWFwX3NyYW1faW9fZGVzY1swXS5sZW5ndGgpOworCiAJLyoKIAkgKiBMb29rcyBsaWtlIHdlIG5lZWQgdG8gcHJlc2VydmUgc29tZSBib290bG9hZGVyIGNvZGUgYXQgdGhlCiAJICogYmVnaW5uaW5nIG9mIFNSQU0gZm9yIGp1bXBpbmcgdG8gZmxhc2ggZm9yIHJlYm9vdCB0byB3b3JrLi4uCkBAIC04OCwxNiArMTAzLDYgQEAKIAkgICAgICAgb21hcF9zcmFtX3NpemUgLSBTUkFNX0JPT1RMT0FERVJfU1opOwogfQogCi1zdGF0aWMgdm9pZCAoKl9vbWFwX3NyYW1fcmVwcm9ncmFtX2Nsb2NrKSh1MzIgZHBsbGN0bCwgdTMyIGNrY3RsKSA9IE5VTEw7Ci0KLXZvaWQgb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayh1MzIgZHBsbGN0bCwgdTMyIGNrY3RsKQotewotCWlmIChfb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayA9PSBOVUxMKQotCQlwYW5pYygiQ2Fubm90IHVzZSBTUkFNIik7Ci0KLQlyZXR1cm4gX29tYXBfc3JhbV9yZXByb2dyYW1fY2xvY2soZHBsbGN0bCwgY2tjdGwpOwotfQotCiB2b2lkICogb21hcF9zcmFtX3B1c2godm9pZCAqIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJaWYgKHNpemUgPiAob21hcF9zcmFtX2NlaWwgLSAob21hcF9zcmFtX2Jhc2UgKyBTUkFNX0JPT1RMT0FERVJfU1opKSkgewpAQCAtMTExLDEwICsxMTYsOTQgQEAKIAlyZXR1cm4gKHZvaWQgKilvbWFwX3NyYW1fY2VpbDsKIH0KIAotdm9pZCBfX2luaXQgb21hcF9zcmFtX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIG9tYXBfc3JhbV9lcnJvcih2b2lkKQoreworCXBhbmljKCJVbmluaXRpYWxpemVkIFNSQU0gZnVuY3Rpb25cbiIpOworfQorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDEKKworc3RhdGljIHZvaWQgKCpfb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jaykodTMyIGRwbGxjdGwsIHUzMiBja2N0bCk7CisKK3ZvaWQgb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayh1MzIgZHBsbGN0bCwgdTMyIGNrY3RsKQoreworCWlmICghX29tYXBfc3JhbV9yZXByb2dyYW1fY2xvY2spCisJCW9tYXBfc3JhbV9lcnJvcigpOworCisJcmV0dXJuIF9vbWFwX3NyYW1fcmVwcm9ncmFtX2Nsb2NrKGRwbGxjdGwsIGNrY3RsKTsKK30KKworaW50IF9faW5pdCBvbWFwMV9zcmFtX2luaXQodm9pZCkKK3sKKwlfb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayA9IG9tYXBfc3JhbV9wdXNoKHNyYW1fcmVwcm9ncmFtX2Nsb2NrLAorCQkJCQkJICAgIHNyYW1fcmVwcm9ncmFtX2Nsb2NrX3N6KTsKKworCXJldHVybiAwOworfQorCisjZWxzZQorI2RlZmluZSBvbWFwMV9zcmFtX2luaXQoKQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKKworc3RhdGljIHZvaWQgKCpfb21hcDJfc3JhbV9kZHJfaW5pdCkodTMyICpzbG93X2RsbF9jdHJsLCB1MzIgZmFzdF9kbGxfY3RybCwKKwkJCSAgICAgIHUzMiBiYXNlX2NzLCB1MzIgZm9yY2VfdW5sb2NrKTsKKwordm9pZCBvbWFwMl9zcmFtX2Rkcl9pbml0KHUzMiAqc2xvd19kbGxfY3RybCwgdTMyIGZhc3RfZGxsX2N0cmwsCisJCSAgIHUzMiBiYXNlX2NzLCB1MzIgZm9yY2VfdW5sb2NrKQoreworCWlmICghX29tYXAyX3NyYW1fZGRyX2luaXQpCisJCW9tYXBfc3JhbV9lcnJvcigpOworCisJcmV0dXJuIF9vbWFwMl9zcmFtX2Rkcl9pbml0KHNsb3dfZGxsX2N0cmwsIGZhc3RfZGxsX2N0cmwsCisJCQkJICAgIGJhc2VfY3MsIGZvcmNlX3VubG9jayk7Cit9CisKK3N0YXRpYyB2b2lkICgqX29tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmMpKHUzMiBwZXJmX2xldmVsLCB1MzIgZGxsX3ZhbCwKKwkJCQkJICB1MzIgbWVtX3R5cGUpOworCit2b2lkIG9tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmModTMyIHBlcmZfbGV2ZWwsIHUzMiBkbGxfdmFsLCB1MzIgbWVtX3R5cGUpCit7CisJaWYgKCFfb21hcDJfc3JhbV9yZXByb2dyYW1fc2RyYykKKwkJb21hcF9zcmFtX2Vycm9yKCk7CisKKwlyZXR1cm4gX29tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmMocGVyZl9sZXZlbCwgZGxsX3ZhbCwgbWVtX3R5cGUpOworfQorCitzdGF0aWMgdTMyICgqX29tYXAyX3NldF9wcmNtKSh1MzIgZHBsbF9jdHJsX3ZhbCwgdTMyIHNkcmNfcmZyX3ZhbCwgaW50IGJ5cGFzcyk7CisKK3UzMiBvbWFwMl9zZXRfcHJjbSh1MzIgZHBsbF9jdHJsX3ZhbCwgdTMyIHNkcmNfcmZyX3ZhbCwgaW50IGJ5cGFzcykKK3sKKwlpZiAoIV9vbWFwMl9zZXRfcHJjbSkKKwkJb21hcF9zcmFtX2Vycm9yKCk7CisKKwlyZXR1cm4gX29tYXAyX3NldF9wcmNtKGRwbGxfY3RybF92YWwsIHNkcmNfcmZyX3ZhbCwgYnlwYXNzKTsKK30KKworaW50IF9faW5pdCBvbWFwMl9zcmFtX2luaXQodm9pZCkKK3sKKwlfb21hcDJfc3JhbV9kZHJfaW5pdCA9IG9tYXBfc3JhbV9wdXNoKHNyYW1fZGRyX2luaXQsIHNyYW1fZGRyX2luaXRfc3opOworCisJX29tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmMgPSBvbWFwX3NyYW1fcHVzaChzcmFtX3JlcHJvZ3JhbV9zZHJjLAorCQkJCQkJICAgIHNyYW1fcmVwcm9ncmFtX3NkcmNfc3opOworCV9vbWFwMl9zZXRfcHJjbSA9IG9tYXBfc3JhbV9wdXNoKHNyYW1fc2V0X3ByY20sIHNyYW1fc2V0X3ByY21fc3opOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBvbWFwMl9zcmFtX2luaXQoKQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCitpbnQgX19pbml0IG9tYXBfc3JhbV9pbml0KHZvaWQpCiB7CiAJb21hcF9kZXRlY3Rfc3JhbSgpOwogCW9tYXBfbWFwX3NyYW0oKTsKLQlfb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayA9IG9tYXBfc3JhbV9wdXNoKHNyYW1fcmVwcm9ncmFtX2Nsb2NrLAotCQkJCQkJICAgIHNyYW1fcmVwcm9ncmFtX2Nsb2NrX3N6KTsKKworCWlmICghY3B1X2lzX29tYXAyNHh4KCkpCisJCW9tYXAxX3NyYW1faW5pdCgpOworCWVsc2UKKwkJb21hcDJfc3JhbV9pbml0KCk7CisKKwlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTk4NGVmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uaAotICoKLSAqIEludGVyZmFjZSBmb3IgZnVuY3Rpb25zIHRoYXQgbmVlZCB0byBiZSBydW4gaW4gaW50ZXJuYWwgU1JBTQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2lmbmRlZiBfX0FSQ0hfQVJNX09NQVBfU1JBTV9ICi0jZGVmaW5lIF9fQVJDSF9BUk1fT01BUF9TUkFNX0gKLQotZXh0ZXJuIHZvaWQgKiBvbWFwX3NyYW1fcHVzaCh2b2lkICogc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1leHRlcm4gdm9pZCBvbWFwX3NyYW1fcmVwcm9ncmFtX2Nsb2NrKHUzMiBkcGxsY3RsLCB1MzIgY2tjdGwpOwotCi0vKiBEbyBub3QgdXNlIHRoZXNlICovCi1leHRlcm4gdm9pZCBzcmFtX3JlcHJvZ3JhbV9jbG9jayh1MzIgY2tjdGwsIHUzMiBkcGxsY3RsKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHNyYW1fcmVwcm9ncmFtX2Nsb2NrX3N6OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC91c2IuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC91c2IuYwppbmRleCAyMDVlMmQwLi4wMGFmYzdhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3VzYi5jCkBAIC05MSw2ICs5MSw4IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVBfT1RHKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKQorCiBzdGF0aWMgdTMyIF9faW5pdCBvbWFwX3VzYjBfaW5pdCh1bnNpZ25lZCBud2lyZXMsIHVuc2lnbmVkIGlzX2RldmljZSkKIHsKIAl1MzIJc3lzY29uMSA9IDA7CkBAIC0yNzEsNiArMjczLDggQEAKIAlyZXR1cm4gc3lzY29uMSA8PCAyNDsKIH0KIAorI2VuZGlmCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNpZglkZWZpbmVkKENPTkZJR19VU0JfR0FER0VUX09NQVApIHx8IFwKQEAgLTQ5NCw3ICs0OTgsNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0jaWZkZWYJQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZglDT05GSUdfQVJDSF9PTUFQMTVYWAogCiAjZGVmaW5lIFVMUERfRFBMTF9DVFJMX1JFRwlfX1JFRzE2KFVMUERfRFBMTF9DVFJMKQogI2RlZmluZSBEUExMX0lPQgkJKDEgPDwgMTMpCkBAIC01MDcsNyArNTExLDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfMTUxMF91c2JfaW5pdChzdHJ1Y3Qgb21hcF91c2JfY29uZmlnICpjb25maWcpCiB7Ci0JaW50IHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCiAJb21hcF91c2IwX2luaXQoY29uZmlnLT5waW5zWzBdLCBpc191c2IwX2RldmljZShjb25maWcpKTsKQEAgLTUzOSw2ICs1NDIsOCBAQAogCiAjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfT01BUAogCWlmIChjb25maWctPnJlZ2lzdGVyX2RldikgeworCQlpbnQgc3RhdHVzOworCiAJCXVkY19kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBjb25maWc7CiAJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdWRjX2RldmljZSk7CiAJCWlmIChzdGF0dXMpCkBAIC01NDksNiArNTU0LDggQEAKIAogI2lmCWRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKIAlpZiAoY29uZmlnLT5yZWdpc3Rlcl9ob3N0KSB7CisJCWludCBzdGF0dXM7CisKIAkJb2hjaV9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBjb25maWc7CiAJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb2hjaV9kZXZpY2UpOwogCQlpZiAoc3RhdHVzKQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L3BjaS9maXh1cC5jIGIvYXJjaC9pMzg2L3BjaS9maXh1cC5jCmluZGV4IDM5ODQyMjYuLmVlYjFiMWYyZCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L3BjaS9maXh1cC5jCisrKyBiL2FyY2gvaTM4Ni9wY2kvZml4dXAuYwpAQCAtNDMzLDkgKzQzMyw4IEBACiAJCXJldHVybjsgLyogb25seSBhcHBsaWVzIHRvIGNlcnRhaW4gVG9zaGliYXMgKHNvIGZhcikgKi8KIAogCS8qIFJlc3RvcmUgY29uZmlnIHNwYWNlIG9uIFRvc2hpYmEgbGFwdG9wcyAqLwotCW1kZWxheSgxMCk7CiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgdG9zaGliYV9saW5lX3NpemUpOwotCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwgZGV2LT5pcnEpOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLCAodTggKikmZGV2LT5pcnEpOwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzAsCiAJCQkgICAgICAgcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCkpOwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzEsCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2VmaS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYwppbmRleCBmNzJlYTZhLi5hM2FhNDVjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2VmaS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMKQEAgLTk4Nyw3ICs5ODcsNyBAQAogCQkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKChyZXMgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgeworCQlpZiAoKHJlcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBhbG9jYXRlIHJlc291cmNlIGZvciBpb21lbVxuIik7CiAJCQlyZXR1cm47CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC9pYTY0L2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggOTY3MzZhMS4uODAxZWVhZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9rcHJvYmVzLmMKQEAgLTM0Nyw3ICszNDcsNyBAQAogCQkoKHN0cnVjdCBmbnB0ciAqKWtyZXRwcm9iZV90cmFtcG9saW5lKS0+aXA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgma3JldHByb2JlX2xvY2ssIGZsYWdzKTsKLSAgICAgICAgaGVhZCA9IGtyZXRwcm9iZV9pbnN0X3RhYmxlX2hlYWQoY3VycmVudCk7CisJaGVhZCA9IGtyZXRwcm9iZV9pbnN0X3RhYmxlX2hlYWQoY3VycmVudCk7CiAKIAkvKgogCSAqIEl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgbXVsdGlwbGUgaW5zdGFuY2VzIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuCkBAIC0zNjMsOSArMzYzLDkgQEAKIAkgKiAgICAgICBrcmV0cHJvYmVfdHJhbXBvbGluZQogCSAqLwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmksIG5vZGUsIHRtcCwgaGVhZCwgaGxpc3QpIHsKLSAgICAgICAgICAgICAgICBpZiAocmktPnRhc2sgIT0gY3VycmVudCkKKwkJaWYgKHJpLT50YXNrICE9IGN1cnJlbnQpCiAJCQkvKiBhbm90aGVyIHRhc2sgaXMgc2hhcmluZyBvdXIgaGFzaCBidWNrZXQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCQkJY29udGludWU7CiAKIAkJaWYgKHJpLT5ycCAmJiByaS0+cnAtPmhhbmRsZXIpCiAJCQlyaS0+cnAtPmhhbmRsZXIocmksIHJlZ3MpOwpAQCAtMzk0LDcgKzM5NCw3IEBACiAJICoga3Byb2JlX2hhbmRsZXIoKSB0aGF0IHdlIGRvbid0IHdhbnQgdGhlIHBvc3RfaGFuZGxlcgogCSAqIHRvIHJ1biAoYW5kIGhhdmUgcmUtZW5hYmxlZCBwcmVlbXB0aW9uKQogCSAqLwotICAgICAgICByZXR1cm4gMTsKKwlyZXR1cm4gMTsKIH0KIAogLyogQ2FsbGVkIHdpdGgga3JldHByb2JlX2xvY2sgaGVsZCAqLwpAQCAtNzM5LDEyICs3MzksMTYgQEAKIAogCXN3aXRjaCh2YWwpIHsKIAljYXNlIERJRV9CUkVBSzoKLQkJaWYgKHByZV9rcHJvYmVzX2hhbmRsZXIoYXJncykpCi0JCQlyZXQgPSBOT1RJRllfU1RPUDsKKwkJLyogZXJyIGlzIGJyZWFrIG51bWJlciBmcm9tIGlhNjRfYmFkX2JyZWFrKCkgKi8KKwkJaWYgKGFyZ3MtPmVyciA9PSAweDgwMjAwIHx8IGFyZ3MtPmVyciA9PSAweDgwMzAwKQorCQkJaWYgKHByZV9rcHJvYmVzX2hhbmRsZXIoYXJncykpCisJCQkJcmV0ID0gTk9USUZZX1NUT1A7CiAJCWJyZWFrOwotCWNhc2UgRElFX1NTOgotCQlpZiAocG9zdF9rcHJvYmVzX2hhbmRsZXIoYXJncy0+cmVncykpCi0JCQlyZXQgPSBOT1RJRllfU1RPUDsKKwljYXNlIERJRV9GQVVMVDoKKwkJLyogZXJyIGlzIHZlY3RvciBudW1iZXIgZnJvbSBpYTY0X2ZhdWx0KCkgKi8KKwkJaWYgKGFyZ3MtPmVyciA9PSAzNikKKwkJCWlmIChwb3N0X2twcm9iZXNfaGFuZGxlcihhcmdzLT5yZWdzKSkKKwkJCQlyZXQgPSBOT1RJRllfU1RPUDsKIAkJYnJlYWs7CiAJY2FzZSBESUVfUEFHRV9GQVVMVDoKIAkJLyoga3Byb2JlX3J1bm5pbmcoKSBuZWVkcyBzbXBfcHJvY2Vzc29yX2lkKCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMgYi9hcmNoL2lhNjQva2VybmVsL21jYS5jCmluZGV4IDUyYzQ3ZGEuLjM1NWFmMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYwpAQCAtNTEsNiArNTEsOSBAQAogICoKICAqIDIwMDUtMDgtMTIgS2VpdGggT3dlbnMgPGthb3NAc2dpLmNvbT4KICAqCSAgICAgIENvbnZlcnQgTUNBL0lOSVQgaGFuZGxlcnMgdG8gdXNlIHBlciBldmVudCBzdGFja3MgYW5kIFNBTC9PUyBzdGF0ZS4KKyAqCisgKiAyMDA1LTEwLTA3IEtlaXRoIE93ZW5zIDxrYW9zQHNnaS5jb20+CisgKgkgICAgICBBZGQgbm90aWZ5X2RpZSgpIGhvb2tzLgogICovCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTU4LDcgKzYxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgpAQCAtNjksNiArNzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8YXNtL21lbWluaXQuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtMTMyLDYgKzEzNSwxNCBAQAogCiBzdGF0aWMgaW50IG1jYV9pbml0OwogCisKK3N0YXRpYyB2b2lkIGlubGluZQoraWE2NF9tY2Ffc3Bpbihjb25zdCBjaGFyICpmdW5jKQoreworCXByaW50ayhLRVJOX0VNRVJHICIlczogc3Bpbm5pbmcgaGVyZSwgbm90IHJldHVybmluZyB0byBTQUxcbiIsIGZ1bmMpOworCXdoaWxlICgxKQorCQljcHVfcmVsYXgoKTsKK30KIC8qCiAgKiBJQTY0X01DQSBsb2cgc3VwcG9ydAogICovCkBAIC01MjYsMTMgKzUzNywxNiBAQAogICogIE91dHB1dHMgOiAgIE5vbmUKICAqLwogc3RhdGljIGlycXJldHVybl90Ci1pYTY0X21jYV9yZW5kZXpfaW50X2hhbmRsZXIoaW50IHJlbmRlel9pcnEsIHZvaWQgKmFyZywgc3RydWN0IHB0X3JlZ3MgKnB0cmVncykKK2lhNjRfbWNhX3JlbmRlel9pbnRfaGFuZGxlcihpbnQgcmVuZGV6X2lycSwgdm9pZCAqYXJnLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAkvKiBNYXNrIGFsbCBpbnRlcnJ1cHRzICovCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWlmIChub3RpZnlfZGllKERJRV9NQ0FfUkVORFpWT1VTX0VOVEVSLCAiTUNBIiwgcmVncywgMCwgMCwgMCkKKwkJCT09IE5PVElGWV9TVE9QKQorCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CiAKIAlpYTY0X21jX2luZm8uaW1pX3JlbmRlel9jaGVja2luW2NwdV0gPSBJQTY0X01DQV9SRU5ERVpfQ0hFQ0tJTl9ET05FOwogCS8qIFJlZ2lzdGVyIHdpdGggdGhlIFNBTCBtb25hcmNoIHRoYXQgdGhlIHNsYXZlIGhhcwpAQCAtNTQwLDEwICs1NTQsMTggQEAKIAkgKi8KIAlpYTY0X3NhbF9tY19yZW5kZXooKTsKIAorCWlmIChub3RpZnlfZGllKERJRV9NQ0FfUkVORFpWT1VTX1BST0NFU1MsICJNQ0EiLCByZWdzLCAwLCAwLCAwKQorCQkJPT0gTk9USUZZX1NUT1ApCisJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKKwogCS8qIFdhaXQgZm9yIHRoZSBtb25hcmNoIGNwdSB0byBleGl0LiAqLwogCXdoaWxlIChtb25hcmNoX2NwdSAhPSAtMSkKIAkgICAgICAgY3B1X3JlbGF4KCk7CS8qIHNwaW4gdW50aWwgbW9uYXJjaCBsZWF2ZXMgKi8KIAorCWlmIChub3RpZnlfZGllKERJRV9NQ0FfUkVORFpWT1VTX0xFQVZFLCAiTUNBIiwgcmVncywgMCwgMCwgMCkKKwkJCT09IE5PVElGWV9TVE9QKQorCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CisKIAkvKiBFbmFibGUgYWxsIGludGVycnVwdHMgKi8KIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtOTMzLDYgKzk1NSw5IEBACiAJb29wc19pbl9wcm9ncmVzcyA9IDE7CS8qIEZJWE1FOiBtYWtlIHByaW50ayBOTUkvTUNBL0lOSVQgc2FmZSAqLwogCXByZXZpb3VzX2N1cnJlbnQgPSBpYTY0X21jYV9tb2RpZnlfb3JpZ2luYWxfc3RhY2socmVncywgc3csIHNvcywgIk1DQSIpOwogCW1vbmFyY2hfY3B1ID0gY3B1OworCWlmIChub3RpZnlfZGllKERJRV9NQ0FfTU9OQVJDSF9FTlRFUiwgIk1DQSIsIHJlZ3MsIDAsIDAsIDApCisJCQk9PSBOT1RJRllfU1RPUCkKKwkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCWlhNjRfd2FpdF9mb3Jfc2xhdmVzKGNwdSk7CiAKIAkvKiBXYWtldXAgYWxsIHRoZSBwcm9jZXNzb3JzIHdoaWNoIGFyZSBzcGlubmluZyBpbiB0aGUgcmVuZGV6dm91cyBsb29wLgpAQCAtOTQyLDYgKzk2Nyw5IEBACiAJICogc3Bpbm5pbmcgaW4gU0FMIGRvZXMgbm90IHdvcmsuCiAJICovCiAJaWE2NF9tY2Ffd2FrZXVwX2FsbCgpOworCWlmIChub3RpZnlfZGllKERJRV9NQ0FfTU9OQVJDSF9QUk9DRVNTLCAiTUNBIiwgcmVncywgMCwgMCwgMCkKKwkJCT09IE5PVElGWV9TVE9QKQorCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CiAKIAkvKiBHZXQgdGhlIE1DQSBlcnJvciByZWNvcmQgYW5kIGxvZyBpdCAqLwogCWlhNjRfbWNhX2xvZ19zYWxfZXJyb3JfcmVjb3JkKFNBTF9JTkZPX1RZUEVfTUNBKTsKQEAgLTk2MCw2ICs5ODgsOSBAQAogCQlpYTY0X3NhbF9jbGVhcl9zdGF0ZV9pbmZvKFNBTF9JTkZPX1RZUEVfTUNBKTsKIAkJc29zLT5vc19zdGF0dXMgPSBJQTY0X01DQV9DT1JSRUNURUQ7CiAJfQorCWlmIChub3RpZnlfZGllKERJRV9NQ0FfTU9OQVJDSF9MRUFWRSwgIk1DQSIsIHJlZ3MsIDAsIDAsIHJlY292ZXIpCisJCQk9PSBOT1RJRllfU1RPUCkKKwkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCiAJc2V0X2N1cnJfdGFzayhjcHUsIHByZXZpb3VzX2N1cnJlbnQpOwogCW1vbmFyY2hfY3B1ID0gLTE7CkBAIC0xMTg4LDYgKzEyMTksMzcgQEAKIAogI2VuZGlmIC8qIENPTkZJR19BQ1BJICovCiAKK3N0YXRpYyBpbnQKK2RlZmF1bHRfbW9uYXJjaF9pbml0X3Byb2Nlc3Moc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgYzsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsICp0OworCWlmICh2YWwgIT0gRElFX0lOSVRfTU9OQVJDSF9QUk9DRVNTKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisJcHJpbnRrKEtFUk5fRVJSICJQcm9jZXNzZXMgaW50ZXJydXB0ZWQgYnkgSU5JVCAtIik7CisJZm9yX2VhY2hfb25saW5lX2NwdShjKSB7CisJCXN0cnVjdCBpYTY0X3NhbF9vc19zdGF0ZSAqczsKKwkJdCA9IF9fdmEoX19wZXJfY3B1X21jYVtjXSArIElBNjRfTUNBX0NQVV9JTklUX1NUQUNLX09GRlNFVCk7CisJCXMgPSAoc3RydWN0IGlhNjRfc2FsX29zX3N0YXRlICopKChjaGFyICopdCArIE1DQV9TT1NfT0ZGU0VUKTsKKwkJZyA9IHMtPnByZXZfdGFzazsKKwkJaWYgKGcpIHsKKwkJCWlmIChnLT5waWQpCisJCQkJcHJpbnRrKCIgJWQiLCBnLT5waWQpOworCQkJZWxzZQorCQkJCXByaW50aygiICVkIChjcHUgJWQgdGFzayAweCVwKSIsIGctPnBpZCwgdGFza19jcHUoZyksIGcpOworCQl9CisJfQorCXByaW50aygiXG5cbiIpOworCWlmIChyZWFkX3RyeWxvY2soJnRhc2tsaXN0X2xvY2spKSB7CisJCWRvX2VhY2hfdGhyZWFkIChnLCB0KSB7CisJCQlwcmludGsoIlxuQmFja3RyYWNlIG9mIHBpZCAlZCAoJXMpXG4iLCB0LT5waWQsIHQtPmNvbW0pOworCQkJc2hvd19zdGFjayh0LCBOVUxMKTsKKwkJfSB3aGlsZV9lYWNoX3RocmVhZCAoZywgdCk7CisJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwl9CisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCiAvKgogICogQyBwb3J0aW9uIG9mIHRoZSBPUyBJTklUIGhhbmRsZXIKICAqCkBAIC0xMjEyLDggKzEyNzQsNyBAQAogCXN0YXRpYyBhdG9taWNfdCBzbGF2ZXM7CiAJc3RhdGljIGF0b21pY190IG1vbmFyY2hzOwogCXRhc2tfdCAqcHJldmlvdXNfY3VycmVudDsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpLCBjOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnQ7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCW9vcHNfaW5fcHJvZ3Jlc3MgPSAxOwkvKiBGSVhNRTogbWFrZSBwcmludGsgTk1JL01DQS9JTklUIHNhZmUgKi8KIAljb25zb2xlX2xvZ2xldmVsID0gMTU7CS8qIG1ha2Ugc3VyZSBwcmludGtzIG1ha2UgaXQgdG8gY29uc29sZSAqLwpAQCAtMTI1Myw4ICsxMzE0LDE3IEBACiAJCWlhNjRfbWNfaW5mby5pbWlfcmVuZGV6X2NoZWNraW5bY3B1XSA9IElBNjRfTUNBX1JFTkRFWl9DSEVDS0lOX0lOSVQ7CiAJCXdoaWxlIChtb25hcmNoX2NwdSA9PSAtMSkKIAkJICAgICAgIGNwdV9yZWxheCgpOwkvKiBzcGluIHVudGlsIG1vbmFyY2ggZW50ZXJzICovCisJCWlmIChub3RpZnlfZGllKERJRV9JTklUX1NMQVZFX0VOVEVSLCAiSU5JVCIsIHJlZ3MsIDAsIDAsIDApCisJCQkJPT0gTk9USUZZX1NUT1ApCisJCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CisJCWlmIChub3RpZnlfZGllKERJRV9JTklUX1NMQVZFX1BST0NFU1MsICJJTklUIiwgcmVncywgMCwgMCwgMCkKKwkJCQk9PSBOT1RJRllfU1RPUCkKKwkJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKIAkJd2hpbGUgKG1vbmFyY2hfY3B1ICE9IC0xKQogCQkgICAgICAgY3B1X3JlbGF4KCk7CS8qIHNwaW4gdW50aWwgbW9uYXJjaCBsZWF2ZXMgKi8KKwkJaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfU0xBVkVfTEVBVkUsICJJTklUIiwgcmVncywgMCwgMCwgMCkKKwkJCQk9PSBOT1RJRllfU1RPUCkKKwkJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKIAkJcHJpbnRrKCJTbGF2ZSBvbiBjcHUgJWQgcmV0dXJuaW5nIHRvIG5vcm1hbCBzZXJ2aWNlLlxuIiwgY3B1KTsKIAkJc2V0X2N1cnJfdGFzayhjcHUsIHByZXZpb3VzX2N1cnJlbnQpOwogCQlpYTY0X21jX2luZm8uaW1pX3JlbmRlel9jaGVja2luW2NwdV0gPSBJQTY0X01DQV9SRU5ERVpfQ0hFQ0tJTl9OT1RET05FOwpAQCAtMTI2Myw2ICsxMzMzLDkgQEAKIAl9CiAKIAltb25hcmNoX2NwdSA9IGNwdTsKKwlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9NT05BUkNIX0VOVEVSLCAiSU5JVCIsIHJlZ3MsIDAsIDAsIDApCisJCQk9PSBOT1RJRllfU1RPUCkKKwkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCiAJLyoKIAkgKiBXYWl0IGZvciBhIGJpdC4gIE9uIHNvbWUgbWFjaGluZXMgKGUuZy4sIEhQJ3MgengyMDAwIGFuZCB6eDYwMDAsIElOSVQgY2FuIGJlCkBAIC0xMjczLDI3ICsxMzQ2LDE2IEBACiAJcHJpbnRrKCJEZWxheWluZyBmb3IgNSBzZWNvbmRzLi4uXG4iKTsKIAl1ZGVsYXkoNSoxMDAwMDAwKTsKIAlpYTY0X3dhaXRfZm9yX3NsYXZlcyhjcHUpOwotCXByaW50ayhLRVJOX0VSUiAiUHJvY2Vzc2VzIGludGVycnVwdGVkIGJ5IElOSVQgLSIpOwotCWZvcl9lYWNoX29ubGluZV9jcHUoYykgewotCQlzdHJ1Y3QgaWE2NF9zYWxfb3Nfc3RhdGUgKnM7Ci0JCXQgPSBfX3ZhKF9fcGVyX2NwdV9tY2FbY10gKyBJQTY0X01DQV9DUFVfSU5JVF9TVEFDS19PRkZTRVQpOwotCQlzID0gKHN0cnVjdCBpYTY0X3NhbF9vc19zdGF0ZSAqKSgoY2hhciAqKXQgKyBNQ0FfU09TX09GRlNFVCk7Ci0JCWcgPSBzLT5wcmV2X3Rhc2s7Ci0JCWlmIChnKSB7Ci0JCQlpZiAoZy0+cGlkKQotCQkJCXByaW50aygiICVkIiwgZy0+cGlkKTsKLQkJCWVsc2UKLQkJCQlwcmludGsoIiAlZCAoY3B1ICVkIHRhc2sgMHglcCkiLCBnLT5waWQsIHRhc2tfY3B1KGcpLCBnKTsKLQkJfQotCX0KLQlwcmludGsoIlxuXG4iKTsKLQlpZiAocmVhZF90cnlsb2NrKCZ0YXNrbGlzdF9sb2NrKSkgewotCQlkb19lYWNoX3RocmVhZCAoZywgdCkgewotCQkJcHJpbnRrKCJcbkJhY2t0cmFjZSBvZiBwaWQgJWQgKCVzKVxuIiwgdC0+cGlkLCB0LT5jb21tKTsKLQkJCXNob3dfc3RhY2sodCwgTlVMTCk7Ci0JCX0gd2hpbGVfZWFjaF90aHJlYWQgKGcsIHQpOwotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0JfQorCS8qIElmIG5vYm9keSBpbnRlcmNlcHRzIERJRV9JTklUX01PTkFSQ0hfUFJPQ0VTUyB0aGVuIHdlIGRyb3AgdGhyb3VnaAorCSAqIHRvIGRlZmF1bHRfbW9uYXJjaF9pbml0X3Byb2Nlc3MoKSBhYm92ZSBhbmQganVzdCBwcmludCBhbGwgdGhlCisJICogdGFza3MuCisJICovCisJaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfTU9OQVJDSF9QUk9DRVNTLCAiSU5JVCIsIHJlZ3MsIDAsIDAsIDApCisJCQk9PSBOT1RJRllfU1RPUCkKKwkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOworCWlmIChub3RpZnlfZGllKERJRV9JTklUX01PTkFSQ0hfTEVBVkUsICJJTklUIiwgcmVncywgMCwgMCwgMCkKKwkJCT09IE5PVElGWV9TVE9QKQorCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CiAJcHJpbnRrKCJcbklOSVQgZHVtcCBjb21wbGV0ZS4gIE1vbmFyY2ggb24gY3B1ICVkIHJldHVybmluZyB0byBub3JtYWwgc2VydmljZS5cbiIsIGNwdSk7CiAJYXRvbWljX2RlYygmbW9uYXJjaHMpOwogCXNldF9jdXJyX3Rhc2soY3B1LCBwcmV2aW91c19jdXJyZW50KTsKQEAgLTE0NjIsNiArMTUyNCwxMCBAQAogCXM2NCByYzsKIAlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIGlzcnY7CiAJdTY0IHRpbWVvdXQgPSBJQTY0X01DQV9SRU5ERVpfVElNRU9VVDsJLyogcGxhdGZvcm0gc3BlY2lmaWMgKi8KKwlzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGRlZmF1bHRfaW5pdF9tb25hcmNoX25iID0geworCQkubm90aWZpZXJfY2FsbCA9IGRlZmF1bHRfbW9uYXJjaF9pbml0X3Byb2Nlc3MsCisJCS5wcmlvcml0eSA9IDAvKiB3ZSBuZWVkIHRvIG5vdGlmaWVkIGxhc3QgKi8KKwl9OwogCiAJSUE2NF9NQ0FfREVCVUcoIiVzOiBiZWdpblxuIiwgX19GVU5DVElPTl9fKTsKIApAQCAtMTU1NSw2ICsxNjIxLDEwIEBACiAJCSAgICAgICAiKHN0YXR1cyAlbGQpXG4iLCByYyk7CiAJCXJldHVybjsKIAl9CisJaWYgKHJlZ2lzdGVyX2RpZV9ub3RpZmllcigmZGVmYXVsdF9pbml0X21vbmFyY2hfbmIpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlZmF1bHQgbW9uYXJjaCBJTklUIHByb2Nlc3NcbiIpOworCQlyZXR1cm47CisJfQogCiAJSUE2NF9NQ0FfREVCVUcoIiVzOiByZWdpc3RlcmVkIE9TIElOSVQgaGFuZGxlciB3aXRoIFNBTFxuIiwgX19GVU5DVElPTl9fKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmMgYi9hcmNoL2lhNjQva2VybmVsL21jYV9kcnYuYwppbmRleCBlYjM5YmM5Li4zNDkyZTMyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21jYV9kcnYuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21jYV9kcnYuYwpAQCAtNTQ3LDkgKzU0NywyMCBAQAogCQkocGFsX3Byb2Nlc3Nvcl9zdGF0ZV9pbmZvX3QqKXBlaWR4X3BzcChwZWlkeCk7CiAKIAkvKgotCSAqIFdlIGNhbm5vdCByZWNvdmVyIGVycm9ycyB3aXRoIG90aGVyIHRoYW4gYnVzX2NoZWNrLgorCSAqIFByb2Nlc3NvciByZWNvdmVyeSBzdGF0dXMgbXVzdCBrZXkgb2ZmIG9mIHRoZSBQQUwgcmVjb3ZlcnkKKwkgKiBzdGF0dXMgaW4gdGhlIFByb2Nlc3NvciBTdGF0ZSBQYXJhbWV0ZXIuCiAJICovCi0JaWYgKHBzcC0+Y2MgfHwgcHNwLT5yYyB8fCBwc3AtPnVjKQorCisJLyoKKwkgKiBUaGUgbWFjaGluZSBjaGVjayBpcyBjb3JyZWN0ZWQuCisJICovCisJaWYgKHBzcC0+Y20gPT0gMSkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIFRoZSBlcnJvciB3YXMgbm90IGNvbnRhaW5lZC4gIFNvZnR3YXJlIG11c3QgYmUgcmVzZXQuCisJICovCisJaWYgKHBzcC0+dXMgfHwgcHNwLT5jaSA9PSAwKQogCQlyZXR1cm4gMDsKIAogCS8qCkBAIC01NzAsOCArNTgxLDYgQEAKIAkJcmV0dXJuIDA7CiAJaWYgKHBiY2ktPmViICYmIHBiY2ktPmJzaSA+IDApCiAJCXJldHVybiAwOwotCWlmIChwc3AtPmNpID09IDApCi0JCXJldHVybiAwOwogCiAJLyoKIAkgKiBUaGlzIGlzIGEgbG9jYWwgTUNBIGFuZCBlc3RpbWF0ZWQgYXMgcmVjb3ZlcmJsZSBleHRlcm5hbCBidXMgZXJyb3IuCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDY0MGQ2OTAuLmU5MmVhNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC00LDYgKzQsOSBAQAogICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDMgSGV3bGV0dC1QYWNrYXJkIENvCiAgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CiAgKiAwNC8xMS8xNyBBc2hvayBSYWoJPGFzaG9rLnJhakBpbnRlbC5jb20+IEFkZGVkIENQVSBIb3RwbHVnIFN1cHBvcnQKKyAqCisgKiAyMDA1LTEwLTA3IEtlaXRoIE93ZW5zIDxrYW9zQHNnaS5jb20+CisgKgkgICAgICBBZGQgbm90aWZ5X2RpZSgpIGhvb2tzLgogICovCiAjZGVmaW5lIF9fS0VSTkVMX1NZU0NBTExTX18JLyogc2VlIDxhc20vdW5pc3RkLmg+ICovCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC0zNCw2ICszNyw3IEBACiAjaW5jbHVkZSA8YXNtL2VsZi5oPgogI2luY2x1ZGUgPGFzbS9pYTMyLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc2FsLmg+CkBAIC04MDgsMTIgKzgxMiwxNCBAQAogdm9pZAogbWFjaGluZV9yZXN0YXJ0IChjaGFyICpyZXN0YXJ0X2NtZCkKIHsKKwkodm9pZCkgbm90aWZ5X2RpZShESUVfTUFDSElORV9SRVNUQVJULCByZXN0YXJ0X2NtZCwgTlVMTCwgMCwgMCwgMCk7CiAJKCplZmkucmVzZXRfc3lzdGVtKShFRklfUkVTRVRfV0FSTSwgMCwgMCwgTlVMTCk7CiB9CiAKIHZvaWQKIG1hY2hpbmVfaGFsdCAodm9pZCkKIHsKKwkodm9pZCkgbm90aWZ5X2RpZShESUVfTUFDSElORV9IQUxULCAiIiwgTlVMTCwgMCwgMCwgMCk7CiAJY3B1X2hhbHQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCmluZGV4IDNhZjZkZTMuLjVhZGQwYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKQEAgLTQ2MSw2ICs0NjEsNyBAQAogI2VuZGlmCiAKIAljcHVfaW5pdCgpOwkvKiBpbml0aWFsaXplIHRoZSBib290c3RyYXAgQ1BVICovCisJbW11X2NvbnRleHRfaW5pdCgpOwkvKiBpbml0aWFsaXplIGNvbnRleHRfaWQgYml0bWFwICovCiAKICNpZmRlZiBDT05GSUdfQUNQSQogCWFjcGlfYm9vdF9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zaWduYWwuYwppbmRleCA3NzRmMzRiLi41OGNlMDdlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvc2lnbmFsLmMKQEAgLTM4NywxNSArMzg3LDE0IEBACiAJICAgICBzdHJ1Y3Qgc2lnc2NyYXRjaCAqc2NyKQogewogCWV4dGVybiBjaGFyIF9fa2VybmVsX3NpZ3RyYW1wW107Ci0JdW5zaWduZWQgbG9uZyB0cmFtcF9hZGRyLCBuZXdfcmJzID0gMDsKKwl1bnNpZ25lZCBsb25nIHRyYW1wX2FkZHIsIG5ld19yYnMgPSAwLCBuZXdfc3A7CiAJc3RydWN0IHNpZ2ZyYW1lIF9fdXNlciAqZnJhbWU7CiAJbG9uZyBlcnI7CiAKLQlmcmFtZSA9ICh2b2lkIF9fdXNlciAqKSBzY3ItPnB0LnIxMjsKKwluZXdfc3AgPSBzY3ItPnB0LnIxMjsKIAl0cmFtcF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpIF9fa2VybmVsX3NpZ3RyYW1wOwotCWlmICgoa2EtPnNhLnNhX2ZsYWdzICYgU0FfT05TVEFDSykgJiYgc2FzX3NzX2ZsYWdzKCh1bnNpZ25lZCBsb25nKSBmcmFtZSkgPT0gMCkgewotCQlmcmFtZSA9ICh2b2lkIF9fdXNlciAqKSAoKGN1cnJlbnQtPnNhc19zc19zcCArIGN1cnJlbnQtPnNhc19zc19zaXplKQotCQkJCQkgJiB+KFNUQUNLX0FMSUdOIC0gMSkpOworCWlmICgoa2EtPnNhLnNhX2ZsYWdzICYgU0FfT05TVEFDSykgJiYgc2FzX3NzX2ZsYWdzKG5ld19zcCkgPT0gMCkgeworCQluZXdfc3AgPSBjdXJyZW50LT5zYXNfc3Nfc3AgKyBjdXJyZW50LT5zYXNfc3Nfc2l6ZTsKIAkJLyoKIAkJICogV2UgbmVlZCB0byBjaGVjayBmb3IgdGhlIHJlZ2lzdGVyIHN0YWNrIGJlaW5nIG9uIHRoZSBzaWduYWwgc3RhY2sKIAkJICogc2VwYXJhdGVseSwgYmVjYXVzZSBpdCdzIHN3aXRjaGVkIHNlcGFyYXRlbHkgKG1lbW9yeSBzdGFjayBpcyBzd2l0Y2hlZApAQCAtNDA0LDcgKzQwMyw3IEBACiAJCWlmICghcmJzX29uX3NpZ19zdGFjayhzY3ItPnB0LmFyX2JzcHN0b3JlKSkKIAkJCW5ld19yYnMgPSAoY3VycmVudC0+c2FzX3NzX3NwICsgc2l6ZW9mKGxvbmcpIC0gMSkgJiB+KHNpemVvZihsb25nKSAtIDEpOwogCX0KLQlmcmFtZSA9ICh2b2lkIF9fdXNlciAqKSBmcmFtZSAtICgoc2l6ZW9mKCpmcmFtZSkgKyBTVEFDS19BTElHTiAtIDEpICYgfihTVEFDS19BTElHTiAtIDEpKTsKKwlmcmFtZSA9ICh2b2lkIF9fdXNlciAqKSAoKG5ld19zcCAtIHNpemVvZigqZnJhbWUpKSAmIC1TVEFDS19BTElHTik7CiAKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGZyYW1lLCBzaXplb2YoKmZyYW1lKSkpCiAJCXJldHVybiBmb3JjZV9zaWdzZWd2X2luZm8oc2lnLCBmcmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3RyYXBzLmMgYi9hcmNoL2lhNjQva2VybmVsL3RyYXBzLmMKaW5kZXggZjk3MDM1OS4uZmJhNWZkZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdHJhcHMuYwpAQCAtMzAsMTcgKzMwLDIwIEBACiBFWFBPUlRfU1lNQk9MKGZwc3dhX2ludGVyZmFjZSk7CiAKIHN0cnVjdCBub3RpZmllcl9ibG9jayAqaWE2NGRpZV9jaGFpbjsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZGllX25vdGlmaWVyX2xvY2spOwogCi1pbnQgcmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCitpbnQKK3JlZ2lzdGVyX2RpZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQogewotCWludCBlcnIgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRpZV9ub3RpZmllcl9sb2NrLCBmbGFncyk7Ci0JZXJyID0gbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmlhNjRkaWVfY2hhaW4sIG5iKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkaWVfbm90aWZpZXJfbG9jaywgZmxhZ3MpOwotCXJldHVybiBlcnI7CisJcmV0dXJuIG5vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZpYTY0ZGllX2NoYWluLCBuYik7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9kaWVfbm90aWZpZXIpOworCitpbnQKK3VucmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIG5vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJmlhNjRkaWVfY2hhaW4sIG5iKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfZGllX25vdGlmaWVyKTsKIAogdm9pZCBfX2luaXQKIHRyYXBfaW5pdCAodm9pZCkKQEAgLTEwNSw2ICsxMDgsNyBAQAogCWlmICgrK2RpZS5sb2NrX293bmVyX2RlcHRoIDwgMykgewogCQlwcmludGsoIiVzWyVkXTogJXMgJWxkIFslZF1cbiIsCiAJCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIHN0ciwgZXJyLCArK2RpZV9jb3VudGVyKTsKKwkJKHZvaWQpIG5vdGlmeV9kaWUoRElFX09PUFMsIChjaGFyICopc3RyLCByZWdzLCBlcnIsIDI1NSwgU0lHU0VHVik7CiAJCXNob3dfcmVncyhyZWdzKTsKICAgCX0gZWxzZQogCQlwcmludGsoS0VSTl9FUlIgIlJlY3Vyc2l2ZSBkaWUoKSBmYWlsdXJlLCBvdXRwdXQgc3VwcHJlc3NlZFxuIik7CkBAIC0xNTUsOSArMTU5LDggQEAKIAlzd2l0Y2ggKGJyZWFrX251bSkgewogCSAgICAgIGNhc2UgMDogLyogdW5rbm93biBlcnJvciAodXNlZCBieSBHQ0MgZm9yIF9fYnVpbHRpbl9hYm9ydCgpKSAqLwogCQlpZiAobm90aWZ5X2RpZShESUVfQlJFQUssICJicmVhayAwIiwgcmVncywgYnJlYWtfbnVtLCBUUkFQX0JSS1BULCBTSUdUUkFQKQotCQkJICAgICAgIAk9PSBOT1RJRllfU1RPUCkgeworCQkJICAgICAgIAk9PSBOT1RJRllfU1RPUCkKIAkJCXJldHVybjsKLQkJfQogCQlkaWVfaWZfa2VybmVsKCJidWdjaGVjayEiLCByZWdzLCBicmVha19udW0pOwogCQlzaWcgPSBTSUdJTEw7IGNvZGUgPSBJTExfSUxMT1BDOwogCQlicmVhazsKQEAgLTIxMCwxNSArMjEzLDYgQEAKIAkJc2lnID0gU0lHSUxMOyBjb2RlID0gX19JTExfQk5ETU9EOwogCQlicmVhazsKIAotCSAgICAgIGNhc2UgMHg4MDIwMDoKLQkgICAgICBjYXNlIDB4ODAzMDA6Ci0JCWlmIChub3RpZnlfZGllKERJRV9CUkVBSywgImtwcm9iZSIsIHJlZ3MsIGJyZWFrX251bSwgVFJBUF9CUktQVCwgU0lHVFJBUCkKLQkJCSAgICAgICAJPT0gTk9USUZZX1NUT1ApIHsKLQkJCXJldHVybjsKLQkJfQotCQlzaWcgPSBTSUdUUkFQOyBjb2RlID0gVFJBUF9CUktQVDsKLQkJYnJlYWs7Ci0KIAkgICAgICBkZWZhdWx0OgogCQlpZiAoYnJlYWtfbnVtIDwgMHg0MDAwMCB8fCBicmVha19udW0gPiAweDEwMDAwMCkKIAkJCWRpZV9pZl9rZXJuZWwoIkJhZCBicmVhayIsIHJlZ3MsIGJyZWFrX251bSk7CkBAIC0yMjYsNiArMjIwLDkgQEAKIAkJaWYgKGJyZWFrX251bSA8IDB4ODAwMDApIHsKIAkJCXNpZyA9IFNJR0lMTDsgY29kZSA9IF9fSUxMX0JSRUFLOwogCQl9IGVsc2UgeworCQkJaWYgKG5vdGlmeV9kaWUoRElFX0JSRUFLLCAiYmFkIGJyZWFrIiwgcmVncywgYnJlYWtfbnVtLCBUUkFQX0JSS1BULCBTSUdUUkFQKQorCQkJCQk9PSBOT1RJRllfU1RPUCkKKwkJCQlyZXR1cm47CiAJCQlzaWcgPSBTSUdUUkFQOyBjb2RlID0gVFJBUF9CUktQVDsKIAkJfQogCX0KQEAgLTU3OCwxMiArNTc1LDExIEBACiAjZW5kaWYKIAkJCWJyZWFrOwogCQkgICAgICBjYXNlIDM1OiBzaWdpbmZvLnNpX2NvZGUgPSBUUkFQX0JSQU5DSDsgaWZhID0gMDsgYnJlYWs7Ci0JCSAgICAgIGNhc2UgMzY6Ci0JCQkgICAgICBpZiAobm90aWZ5X2RpZShESUVfU1MsICJzcyIsICZyZWdzLCB2ZWN0b3IsCi0JCQkJCSAgICAgdmVjdG9yLCBTSUdUUkFQKSA9PSBOT1RJRllfU1RPUCkKLQkJCQkgICAgICByZXR1cm47Ci0JCQkgICAgICBzaWdpbmZvLnNpX2NvZGUgPSBUUkFQX1RSQUNFOyBpZmEgPSAwOyBicmVhazsKKwkJICAgICAgY2FzZSAzNjogc2lnaW5mby5zaV9jb2RlID0gVFJBUF9UUkFDRTsgaWZhID0gMDsgYnJlYWs7CiAJCX0KKwkJaWYgKG5vdGlmeV9kaWUoRElFX0ZBVUxULCAiaWE2NF9mYXVsdCIsICZyZWdzLCB2ZWN0b3IsIHNpZ2luZm8uc2lfY29kZSwgU0lHVFJBUCkKKwkJCSAgICAgICAJPT0gTk9USUZZX1NUT1ApCisJCQlyZXR1cm47CiAJCXNpZ2luZm8uc2lfc2lnbm8gPSBTSUdUUkFQOwogCQlzaWdpbmZvLnNpX2Vycm5vID0gMDsKIAkJc2lnaW5mby5zaV9hZGRyICA9ICh2b2lkIF9fdXNlciAqKSBpZmE7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMgYi9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMKaW5kZXggYTg4Y2RiNy4uMGY3NzZiMCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jCisrKyBiL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYwpAQCAtMzUwLDE0ICszNTAsMTIgQEAKICAqCWZvciBiZXN0LgogICogQG5pZDogbm9kZSBpZAogICogQHBlcm5vZGVzaXplOiBzaXplIG9mIHRoaXMgbm9kZSdzIHBlcm5vZGUgZGF0YQotICogQGFsaWduOiBhbGlnbm1lbnQgdG8gdXNlIGZvciB0aGlzIG5vZGUncyBwZXJub2RlIGRhdGEKICAqLwotc3RhdGljIHZvaWQgX19pbml0ICptZW1vcnlfbGVzc19ub2RlX2FsbG9jKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgcGVybm9kZXNpemUsCi0JdW5zaWduZWQgbG9uZyBhbGlnbikKK3N0YXRpYyB2b2lkIF9faW5pdCAqbWVtb3J5X2xlc3Nfbm9kZV9hbGxvYyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHBlcm5vZGVzaXplKQogewogCXZvaWQgKnB0ciA9IE5VTEw7CiAJdTggYmVzdCA9IDB4ZmY7Ci0JaW50IGJlc3Rub2RlID0gLTEsIG5vZGU7CisJaW50IGJlc3Rub2RlID0gLTEsIG5vZGUsIGFueW5vZGUgPSAwOwogCiAJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgewogCQlpZiAobm9kZV9pc3NldChub2RlLCBtZW1vcnlfbGVzc19tYXNrKSkKQEAgLTM2NiwxMyArMzY0LDE1IEBACiAJCQliZXN0ID0gbm9kZV9kaXN0YW5jZShuaWQsIG5vZGUpOwogCQkJYmVzdG5vZGUgPSBub2RlOwogCQl9CisJCWFueW5vZGUgPSBub2RlOwogCX0KIAotCXB0ciA9IF9fYWxsb2NfYm9vdG1lbV9ub2RlKG1lbV9kYXRhW2Jlc3Rub2RlXS5wZ2RhdCwKLQkJcGVybm9kZXNpemUsIGFsaWduLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpOworCWlmIChiZXN0bm9kZSA9PSAtMSkKKwkJYmVzdG5vZGUgPSBhbnlub2RlOwogCi0JaWYgKCFwdHIpCi0JCXBhbmljKCJOTyBtZW1vcnkgZm9yIG1lbW9yeSBsZXNzIG5vZGVcbiIpOworCXB0ciA9IF9fYWxsb2NfYm9vdG1lbV9ub2RlKG1lbV9kYXRhW2Jlc3Rub2RlXS5wZ2RhdCwgcGVybm9kZXNpemUsCisJCVBFUkNQVV9QQUdFX1NJWkUsIF9fcGEoTUFYX0RNQV9BRERSRVNTKSk7CisKIAlyZXR1cm4gcHRyOwogfQogCkBAIC00MTMsOCArNDEzLDcgQEAKIAogCWZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBtZW1vcnlfbGVzc19tYXNrKSB7CiAJCXBlcm5vZGVzaXplID0gY29tcHV0ZV9wZXJub2Rlc2l6ZShub2RlKTsKLQkJcGVybm9kZSA9IG1lbW9yeV9sZXNzX25vZGVfYWxsb2Mobm9kZSwgcGVybm9kZXNpemUsCi0JCQkobm9kZSkgPyAobm9kZSAqIFBFUkNQVV9QQUdFX1NJWkUpIDogKDEwMjQqMTAyNCkpOworCQlwZXJub2RlID0gbWVtb3J5X2xlc3Nfbm9kZV9hbGxvYyhub2RlLCBwZXJub2Rlc2l6ZSk7CiAJCWZpbGxfcGVybm9kZShub2RlLCBfX3BhKHBlcm5vZGUpLCBwZXJub2Rlc2l6ZSk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vdGxiLmMgYi9hcmNoL2lhNjQvbW0vdGxiLmMKaW5kZXggYzc5YTliOS4uNDExMDVkNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL3RsYi5jCisrKyBiL2FyY2gvaWE2NC9tbS90bGIuYwpAQCAtOCw2ICs4LDggQEAKICAqCQlNb2RpZmllZCBSSUQgYWxsb2NhdGlvbiBmb3IgU01QCiAgKiAgICAgICAgICBHb3V0aGFtIFJhbyA8Z291dGhhbS5yYW9AaW50ZWwuY29tPgogICogICAgICAgICAgICAgIElQSSBiYXNlZCBwdGMgaW1wbGVtZW50YXRpb24gYW5kIEEtc3RlcCBJUEkgaW1wbGVtZW50YXRpb24uCisgKiBSb2hpdCBTZXRoIDxyb2hpdC5zZXRoQGludGVsLmNvbT4KKyAqIEtlbiBDaGVuIDxrZW5uZXRoLncuY2hlbkBpbnRlbC5jb20+CiAgKi8KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTE2LDc4ICsxOCw3NSBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9wYWwuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgewogCXVuc2lnbmVkIGxvbmcgbWFzazsJLyogbWFzayBvZiBzdXBwb3J0ZWQgcHVyZ2UgcGFnZS1zaXplcyAqLwotCXVuc2lnbmVkIGxvbmcgbWF4X2JpdHM7CS8qIGxvZzIoKSBvZiBsYXJnZXN0IHN1cHBvcnRlZCBwdXJnZSBwYWdlLXNpemUgKi8KKwl1bnNpZ25lZCBsb25nIG1heF9iaXRzOwkvKiBsb2cyIG9mIGxhcmdlc3Qgc3VwcG9ydGVkIHB1cmdlIHBhZ2Utc2l6ZSAqLwogfSBwdXJnZTsKIAogc3RydWN0IGlhNjRfY3R4IGlhNjRfY3R4ID0gewogCS5sb2NrID0JCVNQSU5fTE9DS19VTkxPQ0tFRCwKIAkubmV4dCA9CQkxLAotCS5saW1pdCA9CSgxIDw8IDE1KSAtIDEsCQkvKiBzdGFydCBvdXQgd2l0aCB0aGUgc2FmZSAoYXJjaGl0ZWN0ZWQpIGxpbWl0ICovCiAJLm1heF9jdHggPQl+MFUKIH07CiAKIERFRklORV9QRVJfQ1BVKHU4LCBpYTY0X25lZWRfdGxiX2ZsdXNoKTsKIAogLyoKKyAqIEluaXRpYWxpemVzIHRoZSBpYTY0X2N0eC5iaXRtYXAgYXJyYXkgYmFzZWQgb24gbWF4X2N0eCsxLgorICogQ2FsbGVkIGFmdGVyIGNwdV9pbml0KCkgaGFzIHNldHVwIGlhNjRfY3R4Lm1heF9jdHggYmFzZWQgb24KKyAqIG1heGltdW0gUklEIHRoYXQgaXMgc3VwcG9ydGVkIGJ5IGJvb3QgQ1BVLgorICovCit2b2lkIF9faW5pdAorbW11X2NvbnRleHRfaW5pdCAodm9pZCkKK3sKKwlpYTY0X2N0eC5iaXRtYXAgPSBhbGxvY19ib290bWVtKChpYTY0X2N0eC5tYXhfY3R4KzEpPj4zKTsKKwlpYTY0X2N0eC5mbHVzaG1hcCA9IGFsbG9jX2Jvb3RtZW0oKGlhNjRfY3R4Lm1heF9jdHgrMSk+PjMpOworfQorCisvKgogICogQWNxdWlyZSB0aGUgaWE2NF9jdHgubG9jayBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIQogICovCiB2b2lkCiB3cmFwX21tdV9jb250ZXh0IChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQl1bnNpZ25lZCBsb25nIHRza19jb250ZXh0LCBtYXhfY3R4ID0gaWE2NF9jdHgubWF4X2N0eDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKLQlpbnQgaTsKKwlpbnQgaSwgY3B1OworCXVuc2lnbmVkIGxvbmcgZmx1c2hfYml0OwogCi0JaWYgKGlhNjRfY3R4Lm5leHQgPiBtYXhfY3R4KQotCQlpYTY0X2N0eC5uZXh0ID0gMzAwOwkvKiBza2lwIGRhZW1vbnMgKi8KLQlpYTY0X2N0eC5saW1pdCA9IG1heF9jdHggKyAxOworCWZvciAoaT0wOyBpIDw9IGlhNjRfY3R4Lm1heF9jdHggLyBCSVRTX1BFUl9MT05HOyBpKyspIHsKKwkJZmx1c2hfYml0ID0geGNoZygmaWE2NF9jdHguZmx1c2htYXBbaV0sIDApOworCQlpYTY0X2N0eC5iaXRtYXBbaV0gXj0gZmx1c2hfYml0OworCX0KKyAKKwkvKiB1c2Ugb2Zmc2V0IGF0IDMwMCB0byBza2lwIGRhZW1vbnMgKi8KKwlpYTY0X2N0eC5uZXh0ID0gZmluZF9uZXh0X3plcm9fYml0KGlhNjRfY3R4LmJpdG1hcCwKKwkJCQlpYTY0X2N0eC5tYXhfY3R4LCAzMDApOworCWlhNjRfY3R4LmxpbWl0ID0gZmluZF9uZXh0X2JpdChpYTY0X2N0eC5iaXRtYXAsCisJCQkJaWE2NF9jdHgubWF4X2N0eCwgaWE2NF9jdHgubmV4dCk7CiAKIAkvKgotCSAqIFNjYW4gYWxsIHRoZSB0YXNrJ3MgbW0tPmNvbnRleHQgYW5kIHNldCBwcm9wZXIgc2FmZSByYW5nZQorCSAqIGNhbid0IGNhbGwgZmx1c2hfdGxiX2FsbCgpIGhlcmUgYmVjYXVzZSBvZiByYWNlIGNvbmRpdGlvbgorCSAqIHdpdGggTygxKSBzY2hlZHVsZXIgW0VGXQogCSAqLwotCi0JcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLSAgcmVwZWF0OgotCWZvcl9lYWNoX3Byb2Nlc3ModHNrKSB7Ci0JCWlmICghdHNrLT5tbSkKLQkJCWNvbnRpbnVlOwotCQl0c2tfY29udGV4dCA9IHRzay0+bW0tPmNvbnRleHQ7Ci0JCWlmICh0c2tfY29udGV4dCA9PSBpYTY0X2N0eC5uZXh0KSB7Ci0JCQlpZiAoKytpYTY0X2N0eC5uZXh0ID49IGlhNjRfY3R4LmxpbWl0KSB7Ci0JCQkJLyogZW1wdHkgcmFuZ2U6IHJlc2V0IHRoZSByYW5nZSBsaW1pdCBhbmQgc3RhcnQgb3ZlciAqLwotCQkJCWlmIChpYTY0X2N0eC5uZXh0ID4gbWF4X2N0eCkKLQkJCQkJaWE2NF9jdHgubmV4dCA9IDMwMDsKLQkJCQlpYTY0X2N0eC5saW1pdCA9IG1heF9jdHggKyAxOwotCQkJCWdvdG8gcmVwZWF0OwotCQkJfQotCQl9Ci0JCWlmICgodHNrX2NvbnRleHQgPiBpYTY0X2N0eC5uZXh0KSAmJiAodHNrX2NvbnRleHQgPCBpYTY0X2N0eC5saW1pdCkpCi0JCQlpYTY0X2N0eC5saW1pdCA9IHRza19jb250ZXh0OwotCX0KLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0JLyogY2FuJ3QgY2FsbCBmbHVzaF90bGJfYWxsKCkgaGVyZSBiZWNhdXNlIG9mIHJhY2UgY29uZGl0aW9uIHdpdGggTygxKSBzY2hlZHVsZXIgW0VGXSAqLwotCXsKLQkJaW50IGNwdSA9IGdldF9jcHUoKTsgLyogcHJldmVudCBwcmVlbXB0aW9uL21pZ3JhdGlvbiAqLwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKLQkJCWlmIChpICE9IGNwdSkKLQkJCQlwZXJfY3B1KGlhNjRfbmVlZF90bGJfZmx1c2gsIGkpID0gMTsKLQkJfQotCQlwdXRfY3B1KCk7Ci0JfQorCWNwdSA9IGdldF9jcHUoKTsgLyogcHJldmVudCBwcmVlbXB0aW9uL21pZ3JhdGlvbiAqLworCWZvcl9lYWNoX29ubGluZV9jcHUoaSkKKwkJaWYgKGkgIT0gY3B1KQorCQkJcGVyX2NwdShpYTY0X25lZWRfdGxiX2ZsdXNoLCBpKSA9IDE7CisJcHV0X2NwdSgpOwogCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKIH0KIAogdm9pZAotaWE2NF9nbG9iYWxfdGxiX3B1cmdlIChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgbmJpdHMpCitpYTY0X2dsb2JhbF90bGJfcHVyZ2UgKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgbmJpdHMpCiB7CiAJc3RhdGljIERFRklORV9TUElOTE9DSyhwdGNnX2xvY2spOwogCkBAIC0xMzUsNyArMTM0LDggQEAKIH0KIAogdm9pZAotZmx1c2hfdGxiX3JhbmdlIChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCitmbHVzaF90bGJfcmFuZ2UgKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkgdW5zaWduZWQgbG9uZyBlbmQpCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGVuZCAtIHN0YXJ0OwpAQCAtMTQ5LDcgKzE0OSw4IEBACiAjZW5kaWYKIAogCW5iaXRzID0gaWE2NF9mbHMoc2l6ZSArIDB4ZmZmKTsKLQl3aGlsZSAodW5saWtlbHkgKCgoMVVMIDw8IG5iaXRzKSAmIHB1cmdlLm1hc2spID09IDApICYmIChuYml0cyA8IHB1cmdlLm1heF9iaXRzKSkKKwl3aGlsZSAodW5saWtlbHkgKCgoMVVMIDw8IG5iaXRzKSAmIHB1cmdlLm1hc2spID09IDApICYmCisJCQkobmJpdHMgPCBwdXJnZS5tYXhfYml0cykpCiAJCSsrbmJpdHM7CiAJaWYgKG5iaXRzID4gcHVyZ2UubWF4X2JpdHMpCiAJCW5iaXRzID0gcHVyZ2UubWF4X2JpdHM7CkBAIC0xOTEsNSArMTkyLDUgQEAKIAlsb2NhbF9jcHVfZGF0YS0+cHRjZV9zdHJpZGVbMF0gPSBwdGNlX2luZm8uc3RyaWRlWzBdOwogCWxvY2FsX2NwdV9kYXRhLT5wdGNlX3N0cmlkZVsxXSA9IHB0Y2VfaW5mby5zdHJpZGVbMV07CiAKLQlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CQkvKiBudWtlIGxlZnQgb3ZlcnMgZnJvbSBib290c3RyYXBwaW5nLi4uICovCisJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOwkvKiBudWtlIGxlZnQgb3ZlcnMgZnJvbSBib290c3RyYXBwaW5nLi4uICovCiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvcGNpL3BjaS5jIGIvYXJjaC9pYTY0L3BjaS9wY2kuYwppbmRleCAwMTdjZmMzLi4yMGQ3NmZhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvcGNpL3BjaS5jCisrKyBiL2FyY2gvaWE2NC9wY2kvcGNpLmMKQEAgLTk1LDcgKzk1LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfcmF3X29wcyBwY2lfc2FsX29wcyA9IHsKLQkucmVhZCA9IAlwY2lfc2FsX3JlYWQsCisJLnJlYWQgPQkJcGNpX3NhbF9yZWFkLAogCS53cml0ZSA9CXBjaV9zYWxfd3JpdGUKIH07CiAKQEAgLTEzNywzNSArMTM3LDk4IEBACiAJcmV0dXJuIGNvbnRyb2xsZXI7CiB9CiAKLXN0YXRpYyB1NjQgX19kZXZpbml0Ci1hZGRfaW9fc3BhY2UgKHN0cnVjdCBhY3BpX3Jlc291cmNlX2FkZHJlc3M2NCAqYWRkcikKK3N0cnVjdCBwY2lfcm9vdF9pbmZvIHsKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXI7CisJY2hhciAqbmFtZTsKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK25ld19zcGFjZSAodTY0IHBoeXNfYmFzZSwgaW50IHNwYXJzZSkKIHsKLQl1NjQgb2Zmc2V0OwotCWludCBzcGFyc2UgPSAwOworCXU2NCBtbWlvX2Jhc2U7CiAJaW50IGk7CiAKLQlpZiAoYWRkci0+YWRkcmVzc190cmFuc2xhdGlvbl9vZmZzZXQgPT0gMCkKLQkJcmV0dXJuIElPX1NQQUNFX0JBU0UoMCk7CS8qIHBhcnQgb2YgbGVnYWN5IElPIHNwYWNlICovCisJaWYgKHBoeXNfYmFzZSA9PSAwKQorCQlyZXR1cm4gMDsJLyogbGVnYWN5IEkvTyBwb3J0IHNwYWNlICovCiAKLQlpZiAoYWRkci0+YXR0cmlidXRlLmlvLnRyYW5zbGF0aW9uX2F0dHJpYnV0ZSA9PSBBQ1BJX1NQQVJTRV9UUkFOU0xBVElPTikKLQkJc3BhcnNlID0gMTsKLQotCW9mZnNldCA9ICh1NjQpIGlvcmVtYXAoYWRkci0+YWRkcmVzc190cmFuc2xhdGlvbl9vZmZzZXQsIDApOworCW1taW9fYmFzZSA9ICh1NjQpIGlvcmVtYXAocGh5c19iYXNlLCAwKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2lvX3NwYWNlczsgaSsrKQotCQlpZiAoaW9fc3BhY2VbaV0ubW1pb19iYXNlID09IG9mZnNldCAmJgorCQlpZiAoaW9fc3BhY2VbaV0ubW1pb19iYXNlID09IG1taW9fYmFzZSAmJgogCQkgICAgaW9fc3BhY2VbaV0uc3BhcnNlID09IHNwYXJzZSkKLQkJCXJldHVybiBJT19TUEFDRV9CQVNFKGkpOworCQkJcmV0dXJuIGk7CiAKIAlpZiAobnVtX2lvX3NwYWNlcyA9PSBNQVhfSU9fU1BBQ0VTKSB7Ci0JCXByaW50aygiVG9vIG1hbnkgSU8gcG9ydCBzcGFjZXNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIlBDSTogVG9vIG1hbnkgSU8gcG9ydCBzcGFjZXMgIgorCQkJIihNQVhfSU9fU1BBQ0VTPSVsdSlcbiIsIE1BWF9JT19TUEFDRVMpOwogCQlyZXR1cm4gfjA7CiAJfQogCiAJaSA9IG51bV9pb19zcGFjZXMrKzsKLQlpb19zcGFjZVtpXS5tbWlvX2Jhc2UgPSBvZmZzZXQ7CisJaW9fc3BhY2VbaV0ubW1pb19iYXNlID0gbW1pb19iYXNlOwogCWlvX3NwYWNlW2ldLnNwYXJzZSA9IHNwYXJzZTsKIAotCXJldHVybiBJT19TUEFDRV9CQVNFKGkpOworCXJldHVybiBpOworfQorCitzdGF0aWMgdTY0IF9fZGV2aW5pdAorYWRkX2lvX3NwYWNlIChzdHJ1Y3QgcGNpX3Jvb3RfaW5mbyAqaW5mbywgc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczY0ICphZGRyKQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzb3VyY2U7CisJY2hhciAqbmFtZTsKKwl1NjQgYmFzZSwgbWluLCBtYXgsIGJhc2VfcG9ydDsKKwl1bnNpZ25lZCBpbnQgc3BhcnNlID0gMCwgc3BhY2VfbnIsIGxlbjsKKworCXJlc291cmNlID0ga3phbGxvYyhzaXplb2YoKnJlc291cmNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXNvdXJjZSkgeworCQlwcmludGsoS0VSTl9FUlIgIlBDSTogTm8gbWVtb3J5IGZvciAlcyBJL08gcG9ydCBzcGFjZVxuIiwKKwkJCWluZm8tPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKwlsZW4gPSBzdHJsZW4oaW5mby0+bmFtZSkgKyAzMjsKKwluYW1lID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlmICghbmFtZSkgeworCQlwcmludGsoS0VSTl9FUlIgIlBDSTogTm8gbWVtb3J5IGZvciAlcyBJL08gcG9ydCBzcGFjZSBuYW1lXG4iLAorCQkJaW5mby0+bmFtZSk7CisJCWdvdG8gZnJlZV9yZXNvdXJjZTsKKwl9CisKKwltaW4gPSBhZGRyLT5taW5fYWRkcmVzc19yYW5nZTsKKwltYXggPSBtaW4gKyBhZGRyLT5hZGRyZXNzX2xlbmd0aCAtIDE7CisJaWYgKGFkZHItPmF0dHJpYnV0ZS5pby50cmFuc2xhdGlvbl9hdHRyaWJ1dGUgPT0gQUNQSV9TUEFSU0VfVFJBTlNMQVRJT04pCisJCXNwYXJzZSA9IDE7CisKKwlzcGFjZV9uciA9IG5ld19zcGFjZShhZGRyLT5hZGRyZXNzX3RyYW5zbGF0aW9uX29mZnNldCwgc3BhcnNlKTsKKwlpZiAoc3BhY2VfbnIgPT0gfjApCisJCWdvdG8gZnJlZV9uYW1lOworCisJYmFzZSA9IF9fcGEoaW9fc3BhY2Vbc3BhY2VfbnJdLm1taW9fYmFzZSk7CisJYmFzZV9wb3J0ID0gSU9fU1BBQ0VfQkFTRShzcGFjZV9ucik7CisJc25wcmludGYobmFtZSwgbGVuLCAiJXMgSS9PIFBvcnRzICUwOGx4LSUwOGx4IiwgaW5mby0+bmFtZSwKKwkJYmFzZV9wb3J0ICsgbWluLCBiYXNlX3BvcnQgKyBtYXgpOworCisJLyoKKwkgKiBUaGUgU0RNIGd1YXJhbnRlZXMgdGhlIGxlZ2FjeSAwLTY0SyBzcGFjZSBpcyBzcGFyc2UsIGJ1dCBpZiB0aGUKKwkgKiBtYXBwaW5nIGlzIGRvbmUgYnkgdGhlIHByb2Nlc3NvciAobm90IHRoZSBicmlkZ2UpLCBBQ1BJIG1heSBub3QKKwkgKiBtYXJrIGl0IGFzIHNwYXJzZS4KKwkgKi8KKwlpZiAoc3BhY2VfbnIgPT0gMCkKKwkJc3BhcnNlID0gMTsKKworCXJlc291cmNlLT5uYW1lICA9IG5hbWU7CisJcmVzb3VyY2UtPmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisJcmVzb3VyY2UtPnN0YXJ0ID0gYmFzZSArIChzcGFyc2UgPyBJT19TUEFDRV9TUEFSU0VfRU5DT0RJTkcobWluKSA6IG1pbik7CisJcmVzb3VyY2UtPmVuZCAgID0gYmFzZSArIChzcGFyc2UgPyBJT19TUEFDRV9TUEFSU0VfRU5DT0RJTkcobWF4KSA6IG1heCk7CisJaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcmVzb3VyY2UpOworCisJcmV0dXJuIGJhc2VfcG9ydDsKKworZnJlZV9uYW1lOgorCWtmcmVlKG5hbWUpOworZnJlZV9yZXNvdXJjZToKKwlrZnJlZShyZXNvdXJjZSk7CitvdXQ6CisJcmV0dXJuIH4wOwogfQogCiBzdGF0aWMgYWNwaV9zdGF0dXMgX19kZXZpbml0IHJlc291cmNlX3RvX3dpbmRvdyhzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2UsCkBAIC0yMDUsMTEgKzI2OCw2IEBACiAJcmV0dXJuIEFFX09LOwogfQogCi1zdHJ1Y3QgcGNpX3Jvb3RfaW5mbyB7Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyICpjb250cm9sbGVyOwotCWNoYXIgKm5hbWU7Ci19OwotCiBzdGF0aWMgX19kZXZpbml0IGFjcGlfc3RhdHVzIGFkZF93aW5kb3coc3RydWN0IGFjcGlfcmVzb3VyY2UgKnJlcywgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgcGNpX3Jvb3RfaW5mbyAqaW5mbyA9IGRhdGE7CkBAIC0yMzEsNyArMjg5LDcgQEAKIAl9IGVsc2UgaWYgKGFkZHIucmVzb3VyY2VfdHlwZSA9PSBBQ1BJX0lPX1JBTkdFKSB7CiAJCWZsYWdzID0gSU9SRVNPVVJDRV9JTzsKIAkJcm9vdCA9ICZpb3BvcnRfcmVzb3VyY2U7Ci0JCW9mZnNldCA9IGFkZF9pb19zcGFjZSgmYWRkcik7CisJCW9mZnNldCA9IGFkZF9pb19zcGFjZShpbmZvLCAmYWRkcik7CiAJCWlmIChvZmZzZXQgPT0gfjApCiAJCQlyZXR1cm4gQUVfT0s7CiAJfSBlbHNlCkBAIC0yNDEsNyArMjk5LDcgQEAKIAl3aW5kb3ctPnJlc291cmNlLm5hbWUgPSBpbmZvLT5uYW1lOwogCXdpbmRvdy0+cmVzb3VyY2UuZmxhZ3MgPSBmbGFnczsKIAl3aW5kb3ctPnJlc291cmNlLnN0YXJ0ID0gYWRkci5taW5fYWRkcmVzc19yYW5nZSArIG9mZnNldDsKLQl3aW5kb3ctPnJlc291cmNlLmVuZCA9IGFkZHIubWF4X2FkZHJlc3NfcmFuZ2UgKyBvZmZzZXQ7CisJd2luZG93LT5yZXNvdXJjZS5lbmQgPSB3aW5kb3ctPnJlc291cmNlLnN0YXJ0ICsgYWRkci5hZGRyZXNzX2xlbmd0aCAtIDE7CiAJd2luZG93LT5yZXNvdXJjZS5jaGlsZCA9IE5VTEw7CiAJd2luZG93LT5vZmZzZXQgPSBvZmZzZXQ7CiAKQEAgLTczOSw3ICs3OTcsNyBAQAogewogCWludCBjb3VudCA9IG5yX3JlbGVhc2VkOwogCi0gCWNvdW50ICs9IChJQTY0X0xBU1RfREVWSUNFX1ZFQ1RPUiAtIGxhc3QpOworCWNvdW50ICs9IChJQTY0X0xBU1RfREVWSUNFX1ZFQ1RPUiAtIGxhc3QpOwogCiAJcmV0dXJuIGNvdW50OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19pbml0LmMgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYwppbmRleCBiNGY1MDUzLi4wNWU0ZWE4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYwpAQCAtMzQ5LDcgKzM0OSw3IEBACiAJCXJldHVybjsJCS8qYnVzICMgZG9lcyBub3QgZXhpc3QgKi8KIAlwcm9tX2J1c3NvZnRfcHRyID0gX192YShwcm9tX2J1c3NvZnRfcHRyKTsKIAotIAljb250cm9sbGVyID0ga2NhbGxvYygxLHNpemVvZihzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIpLCBHRlBfS0VSTkVMKTsKKyAJY29udHJvbGxlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfY29udHJvbGxlciksIEdGUF9LRVJORUwpOwogCWNvbnRyb2xsZXItPnNlZ21lbnQgPSBzZWdtZW50OwogIAlpZiAoIWNvbnRyb2xsZXIpCiAgCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjLmggYi9hcmNoL2lhNjQvc24va2VybmVsL3hwYy5oCmluZGV4IGZiY2VkYzcuLjU0ODNhOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjLmgKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGMuaApAQCAtMTYzLDcgKzE2Myw3IEBACiAJdTggdmVyc2lvbjsKIAl1NjQgaGVhcnRiZWF0OwogCXU2NCBoZWFydGJlYXRpbmdfdG9fbWFzazsKLQl1NjQga2RiX3N0YXR1czsJCS8qIDAgPSBtYWNoaW5lIHJ1bm5pbmcgKi8KKwl1NjQgaGVhcnRiZWF0X29mZmxpbmU7CS8qIGlmIDAsIGhlYXJ0YmVhdCBzaG91bGQgYmUgY2hhbmdpbmcgKi8KIAlpbnQgYWN0X25hc2lkOwogCWludCBhY3RfcGh5c19jcHVpZDsKIAl1NjQgdmFyc19wYXJ0X3BhOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfbWFpbi5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfbWFpbi5jCmluZGV4IGNlY2UzYzcuLmI2MTcyMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX21haW4uYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19tYWluLmMKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxhc20vc24vaW50ci5oPgogI2luY2x1ZGUgPGFzbS9zbi9zbl9zYWwuaD4KKyNpbmNsdWRlIDxhc20va2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlICJ4cGMuaCIKIApAQCAtMTg4LDYgKzE4OSwxMSBAQAogCS5ub3RpZmllcl9jYWxsID0geHBjX3N5c3RlbV9yZWJvb3QsCiB9OwogCitzdGF0aWMgaW50IHhwY19zeXN0ZW1fZGllKHN0cnVjdCBub3RpZmllcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopOworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB4cGNfZGllX25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsID0geHBjX3N5c3RlbV9kaWUsCit9OworCiAKIC8qCiAgKiBUaW1lciBmdW5jdGlvbiB0byBlbmZvcmNlIHRoZSB0aW1lbGltaXQgb24gdGhlIHBhcnRpdGlvbiBkaXNlbmdhZ2UgcmVxdWVzdC4KQEAgLTk5Nyw2ICsxMDAzLDkgQEAKIAkvKiB0YWtlIG91cnNlbHZlcyBvZmYgb2YgdGhlIHJlYm9vdF9ub3RpZmllcl9saXN0ICovCiAJKHZvaWQpIHVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ4cGNfcmVib290X25vdGlmaWVyKTsKIAorCS8qIHRha2Ugb3Vyc2VsdmVzIG9mZiBvZiB0aGUgZGllX25vdGlmaWVyIGxpc3QgKi8KKwkodm9pZCkgdW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIoJnhwY19kaWVfbm90aWZpZXIpOworCiAJLyogY2xvc2UgZG93biBwcm90ZWN0aW9ucyBmb3IgSVBJIG9wZXJhdGlvbnMgKi8KIAl4cGNfcmVzdHJpY3RfSVBJX29wcygpOwogCkBAIC0xMDExLDYgKzEwMjAsNjMgQEAKIAogCiAvKgorICogQ2FsbGVkIHdoZW4gdGhlIHN5c3RlbSBpcyBhYm91dCB0byBiZSBlaXRoZXIgcmVzdGFydGVkIG9yIGhhbHRlZC4KKyAqLworc3RhdGljIHZvaWQKK3hwY19kaWVfZGlzZW5nYWdlKHZvaWQpCit7CisJc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQ7CisJcGFydGlkX3QgcGFydGlkOworCXVuc2lnbmVkIGxvbmcgZW5nYWdlZDsKKwlsb25nIHRpbWUsIHByaW50X3RpbWUsIGRpc2VuZ2FnZV9yZXF1ZXN0X3RpbWVvdXQ7CisKKworCS8qIGtlZXAgeHBjX2hiX2NoZWNrZXIgdGhyZWFkIGZyb20gZG9pbmcgYW55dGhpbmcgKGp1c3QgaW4gY2FzZSkgKi8KKwl4cGNfZXhpdGluZyA9IDE7CisKKwl4cGNfdmFycy0+aGVhcnRiZWF0aW5nX3RvX21hc2sgPSAwOyAgLyogaW5kaWNhdGUgd2UncmUgZGVhY3RpdmF0ZWQgKi8KKworCWZvciAocGFydGlkID0gMTsgcGFydGlkIDwgWFBfTUFYX1BBUlRJVElPTlM7IHBhcnRpZCsrKSB7CisJCXBhcnQgPSAmeHBjX3BhcnRpdGlvbnNbcGFydGlkXTsKKworCQlpZiAoIVhQQ19TVVBQT1JUU19ESVNFTkdBR0VfUkVRVUVTVChwYXJ0LT4KKwkJCQkJCQlyZW1vdGVfdmFyc192ZXJzaW9uKSkgeworCisJCQkvKiBqdXN0IGluIGNhc2UgaXQgd2FzIGxlZnQgc2V0IGJ5IGFuIGVhcmxpZXIgWFBDICovCisJCQl4cGNfY2xlYXJfcGFydGl0aW9uX2VuZ2FnZWQoMVVMIDw8IHBhcnRpZCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICh4cGNfcGFydGl0aW9uX2VuZ2FnZWQoMVVMIDw8IHBhcnRpZCkgfHwKKwkJCQkJcGFydC0+YWN0X3N0YXRlICE9IFhQQ19QX0lOQUNUSVZFKSB7CisJCQl4cGNfcmVxdWVzdF9wYXJ0aXRpb25fZGlzZW5nYWdlKHBhcnQpOworCQkJeHBjX21hcmtfcGFydGl0aW9uX2Rpc2VuZ2FnZWQocGFydCk7CisJCQl4cGNfSVBJX3NlbmRfZGlzZW5nYWdlKHBhcnQpOworCQl9CisJfQorCisJcHJpbnRfdGltZSA9IHJ0Y190aW1lKCk7CisJZGlzZW5nYWdlX3JlcXVlc3RfdGltZW91dCA9IHByaW50X3RpbWUgKworCQkoeHBjX2Rpc2VuZ2FnZV9yZXF1ZXN0X3RpbWVsaW1pdCAqIHNuX3J0Y19jeWNsZXNfcGVyX3NlY29uZCk7CisKKwkvKiB3YWl0IGZvciBhbGwgb3RoZXIgcGFydGl0aW9ucyB0byBkaXNlbmdhZ2UgZnJvbSB1cyAqLworCisJd2hpbGUgKChlbmdhZ2VkID0geHBjX3BhcnRpdGlvbl9lbmdhZ2VkKC0xVUwpKSAmJgorCQkJKHRpbWUgPSBydGNfdGltZSgpKSA8IGRpc2VuZ2FnZV9yZXF1ZXN0X3RpbWVvdXQpIHsKKworCQlpZiAodGltZSA+PSBwcmludF90aW1lKSB7CisJCQlkZXZfaW5mbyh4cGNfcGFydCwgIndhaXRpbmcgZm9yIHJlbW90ZSBwYXJ0aXRpb25zIHRvICIKKwkJCQkiZGlzZW5nYWdlLCBlbmdhZ2VkPTB4JWx4XG4iLCBlbmdhZ2VkKTsKKwkJCXByaW50X3RpbWUgPSB0aW1lICsgKFhQQ19ESVNFTkdBR0VfUFJJTlRNU0dfSU5URVJWQUwgKgorCQkJCQkJc25fcnRjX2N5Y2xlc19wZXJfc2Vjb25kKTsKKwkJfQorCX0KKwlkZXZfaW5mbyh4cGNfcGFydCwgImZpbmlzaGVkIHdhaXRpbmcgZm9yIHJlbW90ZSBwYXJ0aXRpb25zIHRvICIKKwkJCQkiZGlzZW5nYWdlLCBlbmdhZ2VkPTB4JWx4XG4iLCBlbmdhZ2VkKTsKK30KKworCisvKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgc3lzdGVtIGlzIGJlaW5nIHJlYm9vdGVkLgogICovCiBzdGF0aWMgaW50CkBAIC0xMDM4LDYgKzExMDQsMzMgQEAKIH0KIAogCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgc3lzdGVtIGlzIGJlaW5nIHJlYm9vdGVkLgorICovCitzdGF0aWMgaW50Cit4cGNfc3lzdGVtX2RpZShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICp1bnVzZWQpCit7CisJc3dpdGNoIChldmVudCkgeworCWNhc2UgRElFX01BQ0hJTkVfUkVTVEFSVDoKKwljYXNlIERJRV9NQUNISU5FX0hBTFQ6CisJCXhwY19kaWVfZGlzZW5nYWdlKCk7CisJCWJyZWFrOworCWNhc2UgRElFX01DQV9NT05BUkNIX0VOVEVSOgorCWNhc2UgRElFX0lOSVRfTU9OQVJDSF9FTlRFUjoKKwkJeHBjX3ZhcnMtPmhlYXJ0YmVhdCsrOworCQl4cGNfdmFycy0+aGVhcnRiZWF0X29mZmxpbmUgPSAxOworCQlicmVhazsKKwljYXNlIERJRV9NQ0FfTU9OQVJDSF9MRUFWRToKKwljYXNlIERJRV9JTklUX01PTkFSQ0hfTEVBVkU6CisJCXhwY192YXJzLT5oZWFydGJlYXQrKzsKKwkJeHBjX3ZhcnMtPmhlYXJ0YmVhdF9vZmZsaW5lID0gMDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCisKIGludCBfX2luaXQKIHhwY19pbml0KHZvaWQpCiB7CkBAIC0xMTU0LDYgKzEyNDcsMTIgQEAKIAkJZGV2X3dhcm4oeHBjX3BhcnQsICJjYW4ndCByZWdpc3RlciByZWJvb3Qgbm90aWZpZXJcbiIpOwogCX0KIAorCS8qIGFkZCBvdXJzZWx2ZXMgdG8gdGhlIGRpZV9ub3RpZmllciBsaXN0IChpLmUuLCBpYTY0ZGllX2NoYWluKSAqLworCXJldCA9IHJlZ2lzdGVyX2RpZV9ub3RpZmllcigmeHBjX2RpZV9ub3RpZmllcik7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl93YXJuKHhwY19wYXJ0LCAiY2FuJ3QgcmVnaXN0ZXIgZGllIG5vdGlmaWVyXG4iKTsKKwl9CisKIAogCS8qCiAJICogU2V0IHRoZSBiZWF0aW5nIHRvIG90aGVyIHBhcnRpdGlvbnMgaW50byBtb3Rpb24uICBUaGlzIGlzCkBAIC0xMTc5LDYgKzEyNzgsOSBAQAogCQkvKiB0YWtlIG91cnNlbHZlcyBvZmYgb2YgdGhlIHJlYm9vdF9ub3RpZmllcl9saXN0ICovCiAJCSh2b2lkKSB1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmeHBjX3JlYm9vdF9ub3RpZmllcik7CiAKKwkJLyogdGFrZSBvdXJzZWx2ZXMgb2ZmIG9mIHRoZSBkaWVfbm90aWZpZXIgbGlzdCAqLworCQkodm9pZCkgdW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIoJnhwY19kaWVfbm90aWZpZXIpOworCiAJCWRlbF90aW1lcl9zeW5jKCZ4cGNfaGJfdGltZXIpOwogCQlmcmVlX2lycShTR0lfWFBDX0FDVElWQVRFLCBOVUxMKTsKIAkJeHBjX3Jlc3RyaWN0X0lQSV9vcHMoKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX3BhcnRpdGlvbi5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfcGFydGl0aW9uLmMKaW5kZXggNTgxZTExMy4uY2RkNjQzMSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfcGFydGl0aW9uLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfcGFydGl0aW9uLmMKQEAgLTQzNiwxMyArNDM2LDEzIEBACiAJCX0KIAogCQlkZXZfZGJnKHhwY19wYXJ0LCAicGFydGlkID0gJWQsIGhlYXJ0YmVhdCA9ICVsZCwgbGFzdF9oZWFydGJlYXQiCi0JCQkiID0gJWxkLCBrZGJfc3RhdHVzID0gJWxkLCBIQl9tYXNrID0gMHglbHhcbiIsIHBhcnRpZCwKLQkJCXJlbW90ZV92YXJzLT5oZWFydGJlYXQsIHBhcnQtPmxhc3RfaGVhcnRiZWF0LAotCQkJcmVtb3RlX3ZhcnMtPmtkYl9zdGF0dXMsCisJCQkiID0gJWxkLCBoZWFydGJlYXRfb2ZmbGluZSA9ICVsZCwgSEJfbWFzayA9IDB4JWx4XG4iLAorCQkJcGFydGlkLCByZW1vdGVfdmFycy0+aGVhcnRiZWF0LCBwYXJ0LT5sYXN0X2hlYXJ0YmVhdCwKKwkJCXJlbW90ZV92YXJzLT5oZWFydGJlYXRfb2ZmbGluZSwKIAkJCXJlbW90ZV92YXJzLT5oZWFydGJlYXRpbmdfdG9fbWFzayk7CiAKIAkJaWYgKCgocmVtb3RlX3ZhcnMtPmhlYXJ0YmVhdCA9PSBwYXJ0LT5sYXN0X2hlYXJ0YmVhdCkgJiYKLQkJCShyZW1vdGVfdmFycy0+a2RiX3N0YXR1cyA9PSAwKSkgfHwKKwkJCShyZW1vdGVfdmFycy0+aGVhcnRiZWF0X29mZmxpbmUgPT0gMCkpIHx8CiAJCQkgICAgICF4cGNfaGJfYWxsb3dlZChzbl9wYXJ0aXRpb25faWQsIHJlbW90ZV92YXJzKSkgewogCiAJCQlYUENfREVBQ1RJVkFURV9QQVJUSVRJT04ocGFydCwgeHBjTm9IZWFydGJlYXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL3BjaS90aW9jZV9wcm92aWRlci5jIGIvYXJjaC9pYTY0L3NuL3BjaS90aW9jZV9wcm92aWRlci5jCmluZGV4IDlmMDNkNGUuLmRkYTE5NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2VfcHJvdmlkZXIuYworKysgYi9hcmNoL2lhNjQvc24vcGNpL3Rpb2NlX3Byb3ZpZGVyLmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogCWlmIChpID4gbGFzdCkKIAkJcmV0dXJuIDA7CiAKLQltYXAgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgdGlvY2VfZG1hbWFwKSwgR0ZQX0FUT01JQyk7CisJbWFwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRpb2NlX2RtYW1hcCksIEdGUF9BVE9NSUMpOwogCWlmICghbWFwKQogCQlyZXR1cm4gMDsKIApAQCAtNTU1LDcgKzU1NSw3IEBACiAJc3RydWN0IHRpb2NlICp0aW9jZV9tbXI7CiAJc3RydWN0IHRpb2NlX2tlcm5lbCAqdGlvY2Vfa2VybjsKIAotCXRpb2NlX2tlcm4gPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgdGlvY2Vfa2VybmVsKSwgR0ZQX0tFUk5FTCk7CisJdGlvY2Vfa2VybiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0aW9jZV9rZXJuZWwpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRpb2NlX2tlcm4pIHsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNzI3LDcgKzcyNyw3IEBACiAJICogQWxsb2NhdGUga2VybmVsIGJ1cyBzb2Z0IGFuZCBjb3B5IGZyb20gcHJvbS4KIAkgKi8KIAotCXRpb2NlX2NvbW1vbiA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB0aW9jZV9jb21tb24pLCBHRlBfS0VSTkVMKTsKKwl0aW9jZV9jb21tb24gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGlvY2VfY29tbW9uKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0aW9jZV9jb21tb24pCiAJCXJldHVybiBOVUxMOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCmluZGV4IDE0OTNjNzguLmM1MjMwMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCkBAIC01ODEsMTcgKzU4MSwxMiBAQAogICAgICAgIGRlZl9ib29sIHkKICAgICAgICBkZXBlbmRzIG9uIFBQQzY0ICYmICFOVU1BCiAKLWNvbmZpZyBBUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUKLQlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBTTVAgJiYgUFBDX1BTRVJJRVMKLQotY29uZmlnIEFSQ0hfRElTQ09OVElHTUVNX0RFRkFVTFQKLQlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBBUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUKLQogY29uZmlnIEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIEFSQ0hfRElTQ09OVElHTUVNX0VOQUJMRQorCitjb25maWcgQVJDSF9TUEFSU0VNRU1fREVGQVVMVAorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIFNNUCAmJiBQUENfUFNFUklFUwogCiBzb3VyY2UgIm1tL0tjb25maWciCiAKQEAgLTU5OSw2ICs1OTQsMTAgQEAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCiAKK2NvbmZpZyBBUkNIX01FTU9SWV9QUk9CRQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHCisKICMgU29tZSBOVU1BIG5vZGVzIGhhdmUgbWVtb3J5IHJhbmdlcyB0aGF0IHNwYW4KICMgb3RoZXIgbm9kZXMuICBFdmVuIHRob3VnaCBhIHBmbiBpcyB2YWxpZCBhbmQKICMgYmV0d2VlbiBhIG5vZGUncyBzdGFydCBhbmQgZW5kIHBmbnMsIGl0IG1heSBub3QKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCmluZGV4IGIzYWUyOTkuLjlhNzRiN2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQpAQCAtNCw2ICs0LDcgQEAKIAogaWZlcSAoJChDT05GSUdfUFBDNjQpLHkpCiBFWFRSQV9DRkxBR1MJKz0gLW1uby1taW5pbWFsLXRvYworQ0ZMQUdTX2lvY3RsMzIubyArPSAtSWZzLwogZW5kaWYKIGlmZXEgKCQoQ09ORklHX1BQQzMyKSx5KQogQ0ZMQUdTX3Byb21faW5pdC5vICAgICAgKz0gLWZQSUMKQEAgLTExLDE3ICsxMiwyOSBAQAogZW5kaWYKIAogb2JqLXkJCQkJOj0gc2VtYXBob3JlLm8gY3B1dGFibGUubyBwdHJhY2UubyBzeXNjYWxscy5vIFwKLQkJCQkgICBzaWduYWxfMzIubyBwbWMubworCQkJCSAgIGlycS5vIHNpZ25hbF8zMi5vIHBtYy5vIHZkc28ubworb2JqLXkJCQkJKz0gdmRzbzMyLwogb2JqLSQoQ09ORklHX1BQQzY0KQkJKz0gc2V0dXBfNjQubyBiaW5mbXRfZWxmMzIubyBzeXNfcHBjMzIubyBcCi0JCQkJICAgc2lnbmFsXzY0Lm8gcHRyYWNlMzIubyBzeXN0YmwubworCQkJCSAgIHNpZ25hbF82NC5vIHB0cmFjZTMyLm8gc3lzdGJsLm8gXAorCQkJCSAgIHBhY2EubyBpb2N0bDMyLm8gY3B1X3NldHVwX3Bvd2VyNC5vIFwKKwkJCQkgICBmaXJtd2FyZS5vIHN5c2ZzLm8gdWRiZy5vCitvYmotJChDT05GSUdfUFBDNjQpCQkrPSB2ZHNvNjQvCiBvYmotJChDT05GSUdfQUxUSVZFQykJCSs9IHZlY2VtdS5vIHZlY3Rvci5vCiBvYmotJChDT05GSUdfUE9XRVI0KQkJKz0gaWRsZV9wb3dlcjQubwogb2JqLSQoQ09ORklHX1BQQ19PRikJCSs9IG9mX2RldmljZS5vCi1vYmotJChDT05GSUdfUFBDX1JUQVMpCQkrPSBydGFzLm8KK3Byb2Nmcy0kKENPTkZJR19QUEM2NCkJCTo9IHByb2NfcHBjNjQubworb2JqLSQoQ09ORklHX1BST0NfRlMpCQkrPSAkKHByb2Nmcy15KQorcnRhc3BjaS0kKENPTkZJR19QUEM2NCkJCTo9IHJ0YXNfcGNpLm8KK29iai0kKENPTkZJR19QUENfUlRBUykJCSs9IHJ0YXMubyAkKHJ0YXNwY2kteSkKIG9iai0kKENPTkZJR19SVEFTX0ZMQVNIKQkrPSBydGFzX2ZsYXNoLm8KIG9iai0kKENPTkZJR19SVEFTX1BST0MpCQkrPSBydGFzLXByb2Mubworb2JqLSQoQ09ORklHX0xQQVJDRkcpCQkrPSBscGFyY2ZnLm8KIG9iai0kKENPTkZJR19JQk1WSU8pCQkrPSB2aW8ubwogb2JqLSQoQ09ORklHX0dFTkVSSUNfVEJTWU5DKQkrPSBzbXAtdGJzeW5jLm8KK29iai0kKENPTkZJR19QUENfUFNFUklFUykJKz0gdWRiZ18xNjU1MC5vCitvYmotJChDT05GSUdfUFBDX01BUExFKQkJKz0gdWRiZ18xNjU1MC5vCit1ZGJnc2NjLSQoQ09ORklHX1BQQzY0KQkJOj0gdWRiZ19zY2Mubworb2JqLSQoQ09ORklHX1BQQ19QTUFDKQkJKz0gJCh1ZGJnc2NjLXkpCiAKIGlmZXEgKCQoQ09ORklHX1BQQ19NRVJHRSkseSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IGI3NTc1NzIuLjQ1NTBlYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTM3LDEyICszNywxMiBAQAogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9ydGFzLmg+CisjaW5jbHVkZSA8YXNtL3Zkc29fZGF0YXBhZ2UuaD4KICNpZmRlZiBDT05GSUdfUFBDNjQKICNpbmNsdWRlIDxhc20vcGFjYS5oPgogI2luY2x1ZGUgPGFzbS9scHBhY2EuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9odl9scF9ldmVudC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1jZmcuaD4KICNpbmNsdWRlIDxhc20vY29tcGF0Lmg+CiAjZW5kaWYKIApAQCAtMTA2LDcgKzEwNiw2IEBACiAJREVGSU5FKElDQUNIRUwxTElORVNJWkUsIG9mZnNldG9mKHN0cnVjdCBwcGM2NF9jYWNoZXMsIGlsaW5lX3NpemUpKTsKIAlERUZJTkUoSUNBQ0hFTDFMT0dMSU5FU0laRSwgb2Zmc2V0b2Yoc3RydWN0IHBwYzY0X2NhY2hlcywgbG9nX2lsaW5lX3NpemUpKTsKIAlERUZJTkUoSUNBQ0hFTDFMSU5FU1BFUlBBR0UsIG9mZnNldG9mKHN0cnVjdCBwcGM2NF9jYWNoZXMsIGlsaW5lc19wZXJfcGFnZSkpOwotCURFRklORShQTEFURk9STSwgb2Zmc2V0b2Yoc3RydWN0IHN5c3RlbWNmZywgcGxhdGZvcm0pKTsKIAlERUZJTkUoUExBVEZPUk1fTFBBUiwgUExBVEZPUk1fTFBBUik7CiAKIAkvKiBwYWNhICovCkBAIC0yNTIsMjUgKzI1MSw0MiBAQAogCiAJREVGSU5FKFRBU0tfU0laRSwgVEFTS19TSVpFKTsKIAlERUZJTkUoTlVNX1VTRVJfU0VHTUVOVFMsIFRBU0tfU0laRT4+MjgpOwotI2Vsc2UgLyogQ09ORklHX1BQQzY0ICovCi0JLyogc3lzdGVtY2ZnIG9mZnNldHMgZm9yIHVzZSBieSB2ZHNvICovCi0JREVGSU5FKENGR19UQl9PUklHX1NUQU1QLCBvZmZzZXRvZihzdHJ1Y3Qgc3lzdGVtY2ZnLCB0Yl9vcmlnX3N0YW1wKSk7Ci0JREVGSU5FKENGR19UQl9USUNLU19QRVJfU0VDLCBvZmZzZXRvZihzdHJ1Y3Qgc3lzdGVtY2ZnLCB0Yl90aWNrc19wZXJfc2VjKSk7Ci0JREVGSU5FKENGR19UQl9UT19YUywgb2Zmc2V0b2Yoc3RydWN0IHN5c3RlbWNmZywgdGJfdG9feHMpKTsKLQlERUZJTkUoQ0ZHX1NUQU1QX1hTRUMsIG9mZnNldG9mKHN0cnVjdCBzeXN0ZW1jZmcsIHN0YW1wX3hzZWMpKTsKLQlERUZJTkUoQ0ZHX1RCX1VQREFURV9DT1VOVCwgb2Zmc2V0b2Yoc3RydWN0IHN5c3RlbWNmZywgdGJfdXBkYXRlX2NvdW50KSk7Ci0JREVGSU5FKENGR19UWl9NSU5VVEVXRVNULCBvZmZzZXRvZihzdHJ1Y3Qgc3lzdGVtY2ZnLCB0el9taW51dGVzd2VzdCkpOwotCURFRklORShDRkdfVFpfRFNUVElNRSwgb2Zmc2V0b2Yoc3RydWN0IHN5c3RlbWNmZywgdHpfZHN0dGltZSkpOwotCURFRklORShDRkdfU1lTQ0FMTF9NQVAzMiwgb2Zmc2V0b2Yoc3RydWN0IHN5c3RlbWNmZywgc3lzY2FsbF9tYXBfMzIpKTsKLQlERUZJTkUoQ0ZHX1NZU0NBTExfTUFQNjQsIG9mZnNldG9mKHN0cnVjdCBzeXN0ZW1jZmcsIHN5c2NhbGxfbWFwXzY0KSk7CisjZW5kaWYgLyogISBDT05GSUdfUFBDNjQgKi8KIAotCS8qIHRpbWV2YWwvdGltZXpvbmUgb2Zmc2V0cyBmb3IgdXNlIGJ5IHZkc28gKi8KKwkvKiBkYXRhcGFnZSBvZmZzZXRzIGZvciB1c2UgYnkgdmRzbyAqLworCURFRklORShDRkdfVEJfT1JJR19TVEFNUCwgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgdGJfb3JpZ19zdGFtcCkpOworCURFRklORShDRkdfVEJfVElDS1NfUEVSX1NFQywgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgdGJfdGlja3NfcGVyX3NlYykpOworCURFRklORShDRkdfVEJfVE9fWFMsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHRiX3RvX3hzKSk7CisJREVGSU5FKENGR19TVEFNUF9YU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCBzdGFtcF94c2VjKSk7CisJREVGSU5FKENGR19UQl9VUERBVEVfQ09VTlQsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHRiX3VwZGF0ZV9jb3VudCkpOworCURFRklORShDRkdfVFpfTUlOVVRFV0VTVCwgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgdHpfbWludXRlc3dlc3QpKTsKKwlERUZJTkUoQ0ZHX1RaX0RTVFRJTUUsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHR6X2RzdHRpbWUpKTsKKwlERUZJTkUoQ0ZHX1NZU0NBTExfTUFQMzIsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHN5c2NhbGxfbWFwXzMyKSk7CisJREVGSU5FKFdUT01fQ0xPQ0tfU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB3dG9tX2Nsb2NrX3NlYykpOworCURFRklORShXVE9NX0NMT0NLX05TRUMsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHd0b21fY2xvY2tfbnNlYykpOworI2lmZGVmIENPTkZJR19QUEM2NAorCURFRklORShDRkdfU1lTQ0FMTF9NQVA2NCwgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgc3lzY2FsbF9tYXBfNjQpKTsKIAlERUZJTkUoVFZBTDY0X1RWX1NFQywgb2Zmc2V0b2Yoc3RydWN0IHRpbWV2YWwsIHR2X3NlYykpOwogCURFRklORShUVkFMNjRfVFZfVVNFQywgb2Zmc2V0b2Yoc3RydWN0IHRpbWV2YWwsIHR2X3VzZWMpKTsKIAlERUZJTkUoVFZBTDMyX1RWX1NFQywgb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF90aW1ldmFsLCB0dl9zZWMpKTsKIAlERUZJTkUoVFZBTDMyX1RWX1VTRUMsIG9mZnNldG9mKHN0cnVjdCBjb21wYXRfdGltZXZhbCwgdHZfdXNlYykpOworCURFRklORShUU1BDMzJfVFZfU0VDLCBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjLCB0dl9zZWMpKTsKKwlERUZJTkUoVFNQQzMyX1RWX05TRUMsIG9mZnNldG9mKHN0cnVjdCBjb21wYXRfdGltZXNwZWMsIHR2X25zZWMpKTsKKyNlbHNlCisJREVGSU5FKFRWQUwzMl9UVl9TRUMsIG9mZnNldG9mKHN0cnVjdCB0aW1ldmFsLCB0dl9zZWMpKTsKKwlERUZJTkUoVFZBTDMyX1RWX1VTRUMsIG9mZnNldG9mKHN0cnVjdCB0aW1ldmFsLCB0dl91c2VjKSk7CisJREVGSU5FKFRTUEVDMzJfVFZfU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdGltZXNwZWMsIHR2X3NlYykpOworCURFRklORShUU1BFQzMyX1RWX05TRUMsIG9mZnNldG9mKHN0cnVjdCB0aW1lc3BlYywgdHZfbnNlYykpOworI2VuZGlmCisJLyogdGltZXZhbC90aW1lem9uZSBvZmZzZXRzIGZvciB1c2UgYnkgdmRzbyAqLwogCURFRklORShUWk9ORV9UWl9NSU5XRVNULCBvZmZzZXRvZihzdHJ1Y3QgdGltZXpvbmUsIHR6X21pbnV0ZXN3ZXN0KSk7CiAJREVGSU5FKFRaT05FX1RaX0RTVFRJTUUsIG9mZnNldG9mKHN0cnVjdCB0aW1lem9uZSwgdHpfZHN0dGltZSkpOwotI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLworCisJLyogT3RoZXIgYml0cyB1c2VkIGJ5IHRoZSB2ZHNvICovCisJREVGSU5FKENMT0NLX1JFQUxUSU1FLCBDTE9DS19SRUFMVElNRSk7CisJREVGSU5FKENMT0NLX01PTk9UT05JQywgQ0xPQ0tfTU9OT1RPTklDKTsKKwlERUZJTkUoTlNFQ19QRVJfU0VDLCBOU0VDX1BFUl9TRUMpOworCURFRklORShDTE9DS19SRUFMVElNRV9SRVMsIFRJQ0tfTlNFQyk7CisKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL2NwdV9zZXR1cF9wb3dlcjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwX3Bvd2VyNC5TCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL2NwdV9zZXR1cF9wb3dlcjQuUwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfcG93ZXI0LlMKaW5kZXggMWZiNjczYzUuLmNjYTk0MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL2NwdV9zZXR1cF9wb3dlcjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF9wb3dlcjQuUwpAQCAtMTE0LDExICsxMTQsMTEgQEAKIAogCS5kYXRhCiAJLmJhbGlnbglMMV9DQUNIRV9CWVRFUywwCi1jcHVfc3RhdGVfc3RvcmFnZToJCitjcHVfc3RhdGVfc3RvcmFnZToKIAkuc3BhY2UJQ1NfU0laRQogCS5iYWxpZ24JTDFfQ0FDSEVfQllURVMsMAogCS50ZXh0Ci0JCisKIC8qIENhbGxlZCBpbiBub3JtYWwgY29udGV4dCB0byBiYWNrdXAgQ1BVIDAgc3RhdGUuIFRoaXMKICAqIGRvZXMgbm90IGluY2x1ZGUgY2FjaGUgc2V0dGluZ3MuIFRoaXMgZnVuY3Rpb24gaXMgYWxzbwogICogY2FsbGVkIGZvciBtYWNoaW5lIHNsZWVwLiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgdGhlIE1NVQpAQCAtMTUxLDcgKzE1MSw3IEBACiAJc3RkCXIzLENTX0hJRDQocjUpCiAJbWZzcHIJcjMsU1BSTl9ISUQ1CiAJc3RkCXIzLENTX0hJRDUocjUpCi0JCisKIDI6CiAJbXRjcglyNwogCWJscgpAQCAtMjEzLDcgKzIxMyw3IEBACiAJbXRzcHIJU1BSTl9ISUQxLHIzCiAJc3luYwogCWlzeW5jCi0JCisKIAkvKiBSZXN0b3JlIEhJRDQgKi8KIAlsZAlyMyxDU19ISUQ0KHI1KQogCXN5bmMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwppbmRleCBjYzRlOWViLi4xZDg1Y2VkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCkBAIC01Miw2ICs1Miw5IEBACiAjZGVmaW5lIENPTU1PTl9VU0VSCQkoUFBDX0ZFQVRVUkVfMzIgfCBQUENfRkVBVFVSRV9IQVNfRlBVIHwgXAogCQkJCSBQUENfRkVBVFVSRV9IQVNfTU1VKQogI2RlZmluZSBDT01NT05fVVNFUl9QUEM2NAkoQ09NTU9OX1VTRVIgfCBQUENfRkVBVFVSRV82NCkKKyNkZWZpbmUgQ09NTU9OX1VTRVJfUE9XRVI0CShDT01NT05fVVNFUl9QUEM2NCB8IFBQQ19GRUFUVVJFX1BPV0VSNCkKKyNkZWZpbmUgQ09NTU9OX1VTRVJfUE9XRVI1CShDT01NT05fVVNFUl9QUEM2NCB8IFBQQ19GRUFUVVJFX1BPV0VSNSkKKyNkZWZpbmUgQ09NTU9OX1VTRVJfUE9XRVI1X1BMVVMJKENPTU1PTl9VU0VSX1BQQzY0IHwgUFBDX0ZFQVRVUkVfUE9XRVI1X1BMVVMpCiAKIAogLyogV2Ugb25seSBzZXQgdGhlIHNwZSBmZWF0dXJlcyBpZiB0aGUga2VybmVsIHdhcyBjb21waWxlZCB3aXRoCkBAIC0xNjAsNyArMTYzLDcgQEAKIAkJLnB2cl92YWx1ZQkJPSAweDAwMzUwMDAwLAogCQkuY3B1X25hbWUJCT0gIlBPV0VSNCAoZ3ApIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QT1dFUjQsCi0JCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BQQzY0LAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QT1dFUjQsCiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLm51bV9wbWNzCQk9IDgsCkBAIC0xNzUsNyArMTc4LDcgQEAKIAkJLnB2cl92YWx1ZQkJPSAweDAwMzgwMDAwLAogCQkuY3B1X25hbWUJCT0gIlBPV0VSNCsgKGdxKSIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfUE9XRVI0LAotCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QUEM2NCwKKwkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUE9XRVI0LAogCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5udW1fcG1jcwkJPSA4LApAQCAtMTkwLDcgKzE5Myw3IEBACiAJCS5wdnJfdmFsdWUJCT0gMHgwMDM5MDAwMCwKIAkJLmNwdV9uYW1lCQk9ICJQUEM5NzAiLAogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX1BQQzk3MCwKLQkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUFBDNjQgfAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QT1dFUjQgfAogCQkJUFBDX0ZFQVRVUkVfSEFTX0FMVElWRUNfQ09NUCwKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LApAQCAtMjEyLDcgKzIxNSw3IEBACiAjZWxzZQogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX1BQQzk3MCwKICNlbmRpZgotCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QUEM2NCB8CisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BPV0VSNCB8CiAJCQlQUENfRkVBVFVSRV9IQVNfQUxUSVZFQ19DT01QLAogCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCkBAIC0yMzAsNyArMjMzLDcgQEAKIAkJLnB2cl92YWx1ZQkJPSAweDAwNDQwMDAwLAogCQkuY3B1X25hbWUJCT0gIlBQQzk3ME1QIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QUEM5NzAsCi0JCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BQQzY0IHwKKwkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUE9XRVI0IHwKIAkJCVBQQ19GRUFUVVJFX0hBU19BTFRJVkVDX0NPTVAsCiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKQEAgLTI0NSw3ICsyNDgsNyBAQAogCQkucHZyX3ZhbHVlCQk9IDB4MDAzYTAwMDAsCiAJCS5jcHVfbmFtZQkJPSAiUE9XRVI1IChncikiLAogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX1BPV0VSNSwKLQkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUFBDNjQsCisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BPV0VSNSwKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAogCQkubnVtX3BtY3MJCT0gNiwKQEAgLTI2MCw3ICsyNjMsNyBAQAogCQkucHZyX3ZhbHVlCQk9IDB4MDAzYjAwMDAsCiAJCS5jcHVfbmFtZQkJPSAiUE9XRVI1IChncykiLAogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX1BPV0VSNSwKLQkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUFBDNjQsCisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BPV0VSNV9QTFVTLAogCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5udW1fcG1jcwkJPSA2LApAQCAtMjc2LDcgKzI3OSw3IEBACiAJCS5jcHVfbmFtZQkJPSAiQ2VsbCBCcm9hZGJhbmQgRW5naW5lIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19DRUxMLAogCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QUEM2NCB8Ci0JCQlQUENfRkVBVFVSRV9IQVNfQUxUSVZFQ19DT01QLAorCQkJUFBDX0ZFQVRVUkVfQ0VMTCB8IFBQQ19GRUFUVVJFX0hBU19BTFRJVkVDX0NPTVAsCiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV9iZSwKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL2Zpcm13YXJlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2Zpcm13YXJlLmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvZmlybXdhcmUuYwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC9maXJtd2FyZS5jCmluZGV4IGQ4NDMyYzAuLjY1ZWFlNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL2Zpcm13YXJlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9maXJtd2FyZS5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBhcmNoL3BwYzY0L2tlcm5lbC9maXJtd2FyZS5jCi0gKgogICogIEV4dHJhY3RlZCBmcm9tIGNwdXRhYmxlLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIEJlbi4gSGVycmVuc2NobWlkdCAoYmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9mcHUuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnB1LlMKaW5kZXggNGQ2MDAxZi4uYjc4MGI0MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9mcHUuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2ZwdS5TCkBAIC00MSwyMCArNDEsMjAgQEAKICNpZm5kZWYgQ09ORklHX1NNUAogCUxPQURCQVNFKHIzLCBsYXN0X3Rhc2tfdXNlZF9tYXRoKQogCXRvcmVhbChyMykKLQlMREwJcjQsT0ZGKGxhc3RfdGFza191c2VkX21hdGgpKHIzKQotCUNNUEkJMCxyNCwwCisJUFBDX0xMCXI0LE9GRihsYXN0X3Rhc2tfdXNlZF9tYXRoKShyMykKKwlQUENfTENNUEkJMCxyNCwwCiAJYmVxCTFmCiAJdG9yZWFsKHI0KQogCWFkZGkJcjQscjQsVEhSRUFECQkvKiB3YW50IGxhc3RfdGFza191c2VkX21hdGgtPnRocmVhZCAqLwogCVNBVkVfMzJGUFJTKDAsIHI0KQogCW1mZnMJZnIwCiAJc3RmZAlmcjAsVEhSRUFEX0ZQU0NSKHI0KQotCUxETAlyNSxQVF9SRUdTKHI0KQorCVBQQ19MTAlyNSxQVF9SRUdTKHI0KQogCXRvcmVhbChyNSkKLQlMREwJcjQsX01TUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyNSkKKwlQUENfTEwJcjQsX01TUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyNSkKIAlsaQlyMTAsTVNSX0ZQfE1TUl9GRTB8TVNSX0ZFMQogCWFuZGMJcjQscjQscjEwCQkvKiBkaXNhYmxlIEZQIGZvciBwcmV2aW91cyB0YXNrICovCi0JU1RMCXI0LF9NU1ItU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjUpCisJUFBDX1NUTAlyNCxfTVNSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHI1KQogMToKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAJLyogZW5hYmxlIHVzZSBvZiBGUCBhZnRlciByZXR1cm4gKi8KQEAgLTc3LDcgKzc3LDcgQEAKICNpZm5kZWYgQ09ORklHX1NNUAogCXN1YmkJcjQscjUsVEhSRUFECiAJZnJvbXJlYWwocjQpCi0JU1RMCXI0LE9GRihsYXN0X3Rhc2tfdXNlZF9tYXRoKShyMykKKwlQUENfU1RMCXI0LE9GRihsYXN0X3Rhc2tfdXNlZF9tYXRoKShyMykKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAJLyogcmVzdG9yZSByZWdpc3RlcnMgYW5kIHJldHVybiAqLwogCS8qIHdlIGhhdmVuJ3QgdXNlZCBjdHIgb3IgeGVyIG9yIGxyICovCkBAIC05NywyNCArOTcsMjQgQEAKIAlNVE1TUkQocjUpCQkJLyogZW5hYmxlIHVzZSBvZiBmcHUgbm93ICovCiAJU1lOQ182MDEKIAlpc3luYwotCUNNUEkJMCxyMywwCisJUFBDX0xDTVBJCTAscjMsMAogCWJlcWxyLQkJCQkvKiBpZiBubyBwcmV2aW91cyBvd25lciwgZG9uZSAqLwogCWFkZGkJcjMscjMsVEhSRUFECSAgICAgICAgLyogd2FudCBUSFJFQUQgb2YgdGFzayAqLwotCUxETAlyNSxQVF9SRUdTKHIzKQotCUNNUEkJMCxyNSwwCisJUFBDX0xMCXI1LFBUX1JFR1MocjMpCisJUFBDX0xDTVBJCTAscjUsMAogCVNBVkVfMzJGUFJTKDAsIHIzKQogCW1mZnMJZnIwCiAJc3RmZAlmcjAsVEhSRUFEX0ZQU0NSKHIzKQogCWJlcQkxZgotCUxETAlyNCxfTVNSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHI1KQorCVBQQ19MTAlyNCxfTVNSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHI1KQogCWxpCXIzLE1TUl9GUHxNU1JfRkUwfE1TUl9GRTEKIAlhbmRjCXI0LHI0LHIzCQkvKiBkaXNhYmxlIEZQIGZvciBwcmV2aW91cyB0YXNrICovCi0JU1RMCXI0LF9NU1ItU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjUpCisJUFBDX1NUTAlyNCxfTVNSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHI1KQogMToKICNpZm5kZWYgQ09ORklHX1NNUAogCWxpCXI1LDAKIAlMT0FEQkFTRShyNCxsYXN0X3Rhc2tfdXNlZF9tYXRoKQotCVNUTAlyNSxPRkYobGFzdF90YXNrX3VzZWRfbWF0aCkocjQpCisJUFBDX1NUTAlyNSxPRkYobGFzdF90YXNrX3VzZWRfbWF0aCkocjQpCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCWJscgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF8zMi5TCmluZGV4IGIxMDJlM2EuLmNjZGY5NDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF8zMi5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF8zMi5TCkBAIC0xMTAwLDYgKzExMDAsNyBAQAogCW1yCXIzLHIzMQogCW1yCXI0LHIzMAogCWJsCW1hY2hpbmVfaW5pdAorCWJsCV9fc2F2ZV9jcHVfc2V0dXAKIAlibAlNTVVfaW5pdAogCiAjaWZkZWYgQ09ORklHX0FQVVMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggMTZhYjQwZC4uOGE4YmY3OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxhc20vcmVnLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgogI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL2J1Zy5oPgpAQCAtMTY5NywyNSArMTY5NiwxNCBAQAogICogICBTUFJHMyA9IHBhY2EgdmlydHVhbCBhZGRyZXNzCiAgKi8KIF9HTE9CQUwoX19zZWNvbmRhcnlfc3RhcnQpCisJLyogU2V0IHRocmVhZCBwcmlvcml0eSB0byBNRURJVU0gKi8KKwlITVRfTUVESVVNCiAKLQlITVRfTUVESVVNCQkJLyogU2V0IHRocmVhZCBwcmlvcml0eSB0byBNRURJVU0gKi8KLQorCS8qIExvYWQgVE9DICovCiAJbGQJcjIsUEFDQVRPQyhyMTMpCi0JbGkJcjYsMAotCXN0YglyNixQQUNBUFJPQ0VOQUJMRUQocjEzKQogCi0jaWZuZGVmIENPTkZJR19QUENfSVNFUklFUwotCS8qIEluaXRpYWxpemUgdGhlIHBhZ2UgdGFibGUgcG9pbnRlciByZWdpc3Rlci4gKi8KLQlMT0FEQUREUihyNixfU0RSMSkKLQlsZAlyNiwwKHI2KQkJLyogZ2V0IHRoZSB2YWx1ZSBvZiBfU0RSMQkgKi8KLQltdHNwcglTUFJOX1NEUjEscjYJCQkvKiBzZXQgdGhlIGh0YWIgbG9jYXRpb24JICovCi0jZW5kaWYKLQkvKiBJbml0aWFsaXplIHRoZSBmaXJzdCBzZWdtZW50IHRhYmxlIChvciBTTEIpIGVudHJ5CQkgKi8KLQlsZAlyMyxQQUNBU1RBQlZJUlQocjEzKQkvKiBnZXQgYWRkciBvZiBzZWdtZW50IHRhYmxlCSAqLwotQkVHSU5fRlRSX1NFQ1RJT04KLQlibAkuc3RhYl9pbml0aWFsaXplCi1FTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9TTEIpCi0JYmwJLnNsYl9pbml0aWFsaXplCisJLyogRG8gZWFybHkgc2V0dXAgZm9yIHRoYXQgQ1BVIChzdGFiLCBzbGIsIGhhc2ggdGFibGUgcG9pbnRlcikgKi8KKwlibAkuZWFybHlfc2V0dXBfc2Vjb25kYXJ5CiAKIAkvKiBJbml0aWFsaXplIHRoZSBrZXJuZWwgc3RhY2suICBKdXN0IGEgcmVwZWF0IGZvciBpU2VyaWVzLgkgKi8KIAlMT0FEQUREUihyMyxjdXJyZW50X3NldCkKQEAgLTE3MjQsMzcgKzE3MTIsNyBAQAogCWFkZGkJcjEscjEsVEhSRUFEX1NJWkUtU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKIAlzdGQJcjEsUEFDQUtTQVZFKHIxMykKIAotCWxkCXIzLFBBQ0FTVEFCUkVBTChyMTMpCS8qIGdldCByYWRkciBvZiBzZWdtZW50IHRhYmxlCSAqLwotCW9yaQlyNCxyMywxCQkJLyogdHVybiBvbiB2YWxpZCBiaXQJCSAqLwotCi0jaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCi0JbGkJcjAsLTEJCQkvKiBoeXBlcnZpc29yIGNhbGwgKi8KLQlsaQlyMywxCi0Jc2xkaQlyMyxyMyw2MwkJLyogMHg4MDAwMDAwMDAwMDAwMDAwICovCi0Jb3JpCXIzLHIzLDQJCQkvKiAweDgwMDAwMDAwMDAwMDAwMDQgKi8KLQlzYwkJCQkvKiBIdkNhbGxfc2V0QVNSICovCi0jZWxzZQotCS8qIHNldCB0aGUgQVNSICovCi0JbGQJcjMsc3lzdGVtY2ZnQGdvdChyMikJLyogcjMgPSBwdHIgdG8gc3lzdGVtY2ZnCSAqLwotCWxkCXIzLDAocjMpCi0JbHd6CXIzLFBMQVRGT1JNKHIzKQkJLyogcjMgPSBwbGF0Zm9ybSBmbGFncwkJICovCi0JYW5kaS4JcjMscjMsUExBVEZPUk1fTFBBUgkvKiBUZXN0IGlmIGJpdCAwIGlzIHNldCAoTFBBUiBiaXQpICovCi0JYmVxCTk4ZgkJCS8qIGJyYW5jaCBpZiByZXN1bHQgaXMgMCAgKi8KLQltZnNwcglyMyxTUFJOX1BWUgotCXNyd2kJcjMscjMsMTYKLQljbXB3aQlyMywweDM3CQkJLyogU1N0YXIgICovCi0JYmVxCTk3ZgotCWNtcHdpCXIzLDB4MzYJCQkvKiBJU3RhciAgKi8KLQliZXEJOTdmCi0JY21wd2kJcjMsMHgzNAkJCS8qIFB1bHNhciAqLwotCWJuZQk5OGYKLTk3OglsaQlyMyxIX1NFVF9BU1IJCS8qIGhjYWxsID0gSF9TRVRfQVNSICovCi0JSFZTQwkJCQkvKiBJbnZva2luZyBoY2FsbCAqLwotCWIJOTlmCi05ODoJCQkJCS8qICEocnBhIGh5cGVydmlzb3IpIHx8ICEoc3RhcikgICovCi0JbXRhc3IJcjQJCQkvKiBzZXQgdGhlIHN0YWIgbG9jYXRpb24JICovCi05OToKLSNlbmRpZgorCS8qIENsZWFyIGJhY2tjaGFpbiBzbyB3ZSBnZXQgbmljZSBiYWNrdHJhY2VzICovCiAJbGkJcjcsMAogCW10bHIJcjcKIApAQCAtMTc3Nyw2ICsxNzM1LDcgQEAKIAlsaQlyMywwCiAJc3RkCXIzLDAocjEpCQkvKiBaZXJvIHRoZSBzdGFjayBmcmFtZSBwb2ludGVyCSovCiAJYmwJLnN0YXJ0X3NlY29uZGFyeQorCWIJLgogI2VuZGlmCiAKIC8qCkBAIC0xODk2LDQwICsxODU1LDYgQEAKIAltcglyMyxyMzEKICAJYmwJLmVhcmx5X3NldHVwCiAKLQkvKiBzZXQgdGhlIEFTUiAqLwotCWxkCXIzLFBBQ0FTVEFCUkVBTChyMTMpCi0Jb3JpCXI0LHIzLDEJCQkvKiB0dXJuIG9uIHZhbGlkIGJpdAkJICovCi0JbGQJcjMsc3lzdGVtY2ZnQGdvdChyMikJLyogcjMgPSBwdHIgdG8gc3lzdGVtY2ZnICovCi0JbGQJcjMsMChyMykKLQlsd3oJcjMsUExBVEZPUk0ocjMpCQkvKiByMyA9IHBsYXRmb3JtIGZsYWdzICovCi0JYW5kaS4JcjMscjMsUExBVEZPUk1fTFBBUgkvKiBUZXN0IGlmIGJpdCAwIGlzIHNldCAoTFBBUiBiaXQpICovCi0JYmVxCTk4ZgkJCS8qIGJyYW5jaCBpZiByZXN1bHQgaXMgMCAgKi8KLQltZnNwcglyMyxTUFJOX1BWUgotCXNyd2kJcjMscjMsMTYKLQljbXB3aQlyMywweDM3CQkJLyogU1N0YXIgKi8KLQliZXEJOTdmCi0JY21wd2kJcjMsMHgzNgkJCS8qIElTdGFyICAqLwotCWJlcQk5N2YKLQljbXB3aQlyMywweDM0CQkJLyogUHVsc2FyICovCi0JYm5lCTk4ZgotOTc6CWxpCXIzLEhfU0VUX0FTUgkJLyogaGNhbGwgPSBIX1NFVF9BU1IgKi8KLQlIVlNDCQkJCS8qIEludm9raW5nIGhjYWxsICovCi0JYgk5OWYKLTk4OgkJCQkJLyogIShycGEgaHlwZXJ2aXNvcikgfHwgIShzdGFyKSAqLwotCW10YXNyCXI0CQkJLyogc2V0IHRoZSBzdGFiIGxvY2F0aW9uCSovCi05OToKLQkvKiBTZXQgU0RSMSAoaGFzaCB0YWJsZSBwb2ludGVyKSAqLwotCWxkCXIzLHN5c3RlbWNmZ0Bnb3QocjIpCS8qIHIzID0gcHRyIHRvIHN5c3RlbWNmZyAqLwotCWxkCXIzLDAocjMpCi0JbHd6CXIzLFBMQVRGT1JNKHIzKQkJLyogcjMgPSBwbGF0Zm9ybSBmbGFncyAqLwotCS8qIFRlc3QgaWYgYml0IDAgaXMgc2V0IChMUEFSIGJpdCkgKi8KLQlhbmRpLglyMyxyMyxQTEFURk9STV9MUEFSCi0JYm5lCTk4ZgkJCS8qIGJyYW5jaCBpZiByZXN1bHQgaXMgITAgICovCi0JTE9BREFERFIocjYsX1NEUjEpCQkvKiBPbmx5IGlmIE5PVCBMUEFSICovCi0JYWRkCXI2LHI2LHIyNgotCWxkCXI2LDAocjYpCQkvKiBnZXQgdGhlIHZhbHVlIG9mIF9TRFIxICovCi0JbXRzcHIJU1BSTl9TRFIxLHI2CQkJLyogc2V0IHRoZSBodGFiIGxvY2F0aW9uICAqLwotOTg6IAogCUxPQURBRERSKHIzLC5zdGFydF9oZXJlX2NvbW1vbikKIAlTRVRfUkVHX1RPX0NPTlNUKHI0LCBNU1JfS0VSTkVMKQogCW10c3ByCVNQUk5fU1JSMCxyMwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvaW9jdGwzMi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb2N0bDMyLmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvaW9jdGwzMi5jCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL2lvY3RsMzIuYwppbmRleCBiYTRhODk5Li4zZmE2YTkzIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9pb2N0bDMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb2N0bDMyLmMKQEAgLTEsNiArMSw2IEBACi0vKiAKKy8qCiAgKiBpb2N0bDMyLmM6IENvbnZlcnNpb24gYmV0d2VlbiAzMmJpdCBhbmQgNjRiaXQgbmF0aXZlIGlvY3Rscy4KLSAqIAorICoKICAqIEJhc2VkIG9uIHNwYXJjNjQgaW9jdGwzMi5jIGJ5OgogICoKICAqIENvcHlyaWdodCAoQykgMTk5Ny0yMDAwICBKYWt1YiBKZWxpbmVrICAoamFrdWJAcmVkaGF0LmNvbSkKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL2lycS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwpzaW1pbGFyaXR5IGluZGV4IDcwJQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC9pcnEuYwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwppbmRleCA4NzQ3NDU4Li40Yjc5NDA2IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCkBAIC01LDEyICs1LDEyIEBACiAgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTIgTGludXMgVG9ydmFsZHMKICAqICBBZGFwdGVkIGZyb20gYXJjaC9pMzg2IGJ5IEdhcnkgVGhvbWFzCiAgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NiBHYXJ5IFRob21hcyAoZ2R0QGxpbnV4cHBjLm9yZykKLSAqICBVcGRhdGVkIGFuZCBtb2RpZmllZCBieSBDb3J0IERvdWdhbiAoY29ydEBjcy5ubXQuZWR1KQotICogICAgQ29weXJpZ2h0IChDKSAxOTk2IENvcnQgRG91Z2FuCisgKiAgVXBkYXRlZCBhbmQgbW9kaWZpZWQgYnkgQ29ydCBEb3VnYW4gPGNvcnRAZnNtbGFicy5jb20+CisgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMSBDb3J0IERvdWdhbgogICogIEFkYXB0ZWQgZm9yIFBvd2VyIE1hY2ludG9zaCBieSBQYXVsIE1hY2tlcnJhcwogICogICAgQ29weXJpZ2h0IChDKSAxOTk2IFBhdWwgTWFja2VycmFzIChwYXVsdXNAY3MuYW51LmVkdS5hdSkKICAqICBBbWlnYS9BUFVTIGNoYW5nZXMgYnkgSmVzcGVyIFNrb3YgKGpza292QGN5Z251cy5jby51aykuCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCkBAIC0yMSw2ICsyMSwxNCBAQAogICogaW5zdGVhZCBvZiBqdXN0IGdyYWJiaW5nIHRoZW0uIFRodXMgc2V0dXBzIHdpdGggZGlmZmVyZW50IElSUSBudW1iZXJzCiAgKiBzaG91bGRuJ3QgcmVzdWx0IGluIGFueSB3ZWlyZCBzdXJwcmlzZXMsIGFuZCBpbnN0YWxsaW5nIG5ldyBoYW5kbGVycwogICogc2hvdWxkIGJlIGVhc2llci4KKyAqCisgKiBUaGUgTVBDOHh4IGhhcyBhbiBpbnRlcnJ1cHQgbWFzayBpbiB0aGUgU0lVLiAgSWYgYSBiaXQgaXMgc2V0LCB0aGUKKyAqIGludGVycnVwdCBpcyBfZW5hYmxlZF8uICBBcyBleHBlY3RlZCwgSVJRMCBpcyBiaXQgMCBpbiB0aGUgMzItYml0CisgKiBtYXNrIHJlZ2lzdGVyIChvZiB3aGljaCBvbmx5IDE2IGFyZSBkZWZpbmVkKSwgaGVuY2UgdGhlIHdlaXJkIHNoaWZ0aW5nCisgKiBhbmQgY29tcGxlbWVudCBvZiB0aGUgY2FjaGVkX2lycV9tYXNrLiAgSSB3YW50IHRvIGJlIGFibGUgdG8gc3R1ZmYKKyAqIHRoaXMgcmlnaHQgaW50byB0aGUgU0lVIFNNQVNLIHJlZ2lzdGVyLgorICogTWFueSBvZiB0aGUgcHJlcC9jaHJwIGZ1bmN0aW9ucyBhcmUgY29uZGl0aW9uYWwgY29tcGlsZWQgb24gQ09ORklHXzh4eAorICogdG8gcmVkdWNlIGNvZGUgc3BhY2UgYW5kIHVuZGVmaW5lZCBmdW5jdGlvbiByZWZlcmVuY2VzLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMjksNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgpAQCAtNDAsOSArNDksMTMgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+Ci0jaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaWZkZWYgQ09ORklHX1BQQzY0CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNlbmRpZgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC01MiwzNSArNjUsNTQgQEAKICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLSNpbmNsdWRlIDxhc20vaXNlcmllcy9pdF9scF9xdWV1ZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaWZkZWYgQ09ORklHX1BQQzY0CisjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaXRfbHBfcXVldWUuaD4KICNpbmNsdWRlIDxhc20vcGFjYS5oPgotCi0jaWZkZWYgQ09ORklHX1NNUAotZXh0ZXJuIHZvaWQgaVNlcmllc19zbXBfbWVzc2FnZV9yZWN2KCBzdHJ1Y3QgcHRfcmVncyAqICk7CiAjZW5kaWYKIAotZXh0ZXJuIGlycV9kZXNjX3QgaXJxX2Rlc2NbTlJfSVJRU107CitzdGF0aWMgaW50IHBwY19zcHVyaW91c19pbnRlcnJ1cHRzOworCisjaWYgZGVmaW5lZChDT05GSUdfUFBDX0lTRVJJRVMpICYmIGRlZmluZWQoQ09ORklHX1NNUCkKK2V4dGVybiB2b2lkIGlTZXJpZXNfc21wX21lc3NhZ2VfcmVjdihzdHJ1Y3QgcHRfcmVncyAqKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BQQzMyCisjZGVmaW5lIE5SX01BU0tfV09SRFMJKChOUl9JUlFTICsgMzEpIC8gMzIpCisKK3Vuc2lnbmVkIGxvbmcgcHBjX2NhY2hlZF9pcnFfbWFza1tOUl9NQVNLX1dPUkRTXTsKK2F0b21pY190IHBwY19uX2xvc3RfaW50ZXJydXB0czsKKworI2lmZGVmIENPTkZJR19UQVVfSU5UCitleHRlcm4gaW50IHRhdV9pbml0aWFsaXplZDsKK2V4dGVybiBpbnQgdGF1X2ludGVycnVwdHMoaW50KTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiAhZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQorZXh0ZXJuIGF0b21pY190IGlwaV9yZWN2OworZXh0ZXJuIGF0b21pY190IGlwaV9zZW50OworI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX1BQQzMyICovCisKKyNpZmRlZiBDT05GSUdfUFBDNjQKIEVYUE9SVF9TWU1CT0woaXJxX2Rlc2MpOwogCiBpbnQgZGlzdHJpYnV0ZV9pcnFzID0gMTsKIGludCBfX2lycV9vZmZzZXRfdmFsdWU7Ci1pbnQgcHBjX3NwdXJpb3VzX2ludGVycnVwdHM7CiB1NjQgcHBjNjRfaW50ZXJydXB0X2NvbnRyb2xsZXI7CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiAKIGludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQogewotCWludCBpID0gKihsb2ZmX3QgKikgdiwgajsKLQlzdHJ1Y3QgaXJxYWN0aW9uICogYWN0aW9uOworCWludCBpID0gKihsb2ZmX3QgKil2LCBqOworCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAlpcnFfZGVzY190ICpkZXNjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoaSA9PSAwKSB7Ci0JCXNlcV9wcmludGYocCwgIiAgICAgICAgICAgIik7Ci0JCWZvciAoaj0wOyBqPE5SX0NQVVM7IGorKykgewotCQkJaWYgKGNwdV9vbmxpbmUoaikpCi0JCQkJc2VxX3ByaW50ZihwLCAiQ1BVJWQgICAgICAgIixqKTsKLQkJfQorCQlzZXFfcHV0cyhwLCAiICAgICAgICAgICAiKTsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQkJc2VxX3ByaW50ZihwLCAiQ1BVJWQgICAgICAgIiwgaik7CiAJCXNlcV9wdXRjKHAsICdcbicpOwogCX0KIApAQCAtOTIsMjYgKzEyNCw0MSBAQAogCQkJZ290byBza2lwOwogCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwogI2lmZGVmIENPTkZJR19TTVAKLQkJZm9yIChqID0gMDsgaiA8IE5SX0NQVVM7IGorKykgewotCQkJaWYgKGNwdV9vbmxpbmUoaikpCi0JCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7Ci0JCX0KKwkJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CiAjZWxzZQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAkJaWYgKGRlc2MtPmhhbmRsZXIpCi0JCQlzZXFfcHJpbnRmKHAsICIgJXMgIiwgZGVzYy0+aGFuZGxlci0+dHlwZW5hbWUgKTsKKwkJCXNlcV9wcmludGYocCwgIiAlcyAiLCBkZXNjLT5oYW5kbGVyLT50eXBlbmFtZSk7CiAJCWVsc2UKLQkJCXNlcV9wcmludGYocCwgIiAgTm9uZSAgICAgICIpOworCQkJc2VxX3B1dHMocCwgIiAgTm9uZSAgICAgICIpOwogCQlzZXFfcHJpbnRmKHAsICIlcyIsIChkZXNjLT5zdGF0dXMgJiBJUlFfTEVWRUwpID8gIkxldmVsICIgOiAiRWRnZSAgIik7Ci0JCXNlcV9wcmludGYocCwgIiAgICAlcyIsYWN0aW9uLT5uYW1lKTsKLQkJZm9yIChhY3Rpb249YWN0aW9uLT5uZXh0OyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkKKwkJc2VxX3ByaW50ZihwLCAiICAgICVzIiwgYWN0aW9uLT5uYW1lKTsKKwkJZm9yIChhY3Rpb24gPSBhY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KQogCQkJc2VxX3ByaW50ZihwLCAiLCAlcyIsIGFjdGlvbi0+bmFtZSk7CiAJCXNlcV9wdXRjKHAsICdcbicpOwogc2tpcDoKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCX0gZWxzZSBpZiAoaSA9PSBOUl9JUlFTKQorCX0gZWxzZSBpZiAoaSA9PSBOUl9JUlFTKSB7CisjaWZkZWYgQ09ORklHX1BQQzMyCisjaWZkZWYgQ09ORklHX1RBVV9JTlQKKwkJaWYgKHRhdV9pbml0aWFsaXplZCl7CisJCQlzZXFfcHV0cyhwLCAiVEFVOiAiKTsKKwkJCWZvciAoaiA9IDA7IGogPCBOUl9DUFVTOyBqKyspCisJCQkJaWYgKGNwdV9vbmxpbmUoaikpCisJCQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgdGF1X2ludGVycnVwdHMoaikpOworCQkJc2VxX3B1dHMocCwgIiAgUG93ZXJQQyAgICAgICAgICAgICBUaGVybWFsIEFzc2lzdCAoY3B1IHRlbXApXG4iKTsKKwkJfQorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiAhZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQorCQkvKiBzaG91bGQgdGhpcyBiZSBwZXIgcHJvY2Vzc29yIHNlbmQvcmVjZWl2ZT8gKi8KKwkJc2VxX3ByaW50ZihwLCAiSVBJIChyZWN2L3NlbnQpOiAlMTB1LyV1XG4iLAorCQkJCWF0b21pY19yZWFkKCZpcGlfcmVjdiksIGF0b21pY19yZWFkKCZpcGlfc2VudCkpOworI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX1BQQzMyICovCiAJCXNlcV9wcmludGYocCwgIkJBRDogJTEwdVxuIiwgcHBjX3NwdXJpb3VzX2ludGVycnVwdHMpOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQ0LDEyNiArMTkxLDYgQEAKIH0KICNlbmRpZgogCi1leHRlcm4gaW50IG5vaXJxZGVidWc7Ci0KLS8qCi0gKiBFdmVudHVhbGx5LCB0aGlzIHNob3VsZCB0YWtlIGFuIGFycmF5IG9mIGludGVycnVwdHMgYW5kIGFuIGFycmF5IHNpemUKLSAqIHNvIGl0IGNhbiBkaXNwYXRjaCBtdWx0aXBsZSBpbnRlcnJ1cHRzLgotICovCi12b2lkIHBwY19pcnFfZGlzcGF0Y2hfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGlycSkKLXsKLQlpbnQgc3RhdHVzOwotCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWlycV9kZXNjX3QgKmRlc2MgPSBnZXRfaXJxX2Rlc2MoaXJxKTsKLQlpcnFyZXR1cm5fdCBhY3Rpb25fcmV0OwotI2lmZGVmIENPTkZJR19JUlFTVEFDS1MKLQlzdHJ1Y3QgdGhyZWFkX2luZm8gKmN1cnRwLCAqaXJxdHA7Ci0jZW5kaWYKLQotCWtzdGF0X2NwdShjcHUpLmlycXNbaXJxXSsrOwotCi0JaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9QRVJfQ1BVKSB7Ci0JCS8qIG5vIGxvY2tpbmcgcmVxdWlyZWQgZm9yIENQVS1sb2NhbCBpbnRlcnJ1cHRzOiAqLwotCQlhY2tfaXJxKGlycSk7Ci0JCWFjdGlvbl9yZXQgPSBoYW5kbGVfSVJRX2V2ZW50KGlycSwgcmVncywgZGVzYy0+YWN0aW9uKTsKLQkJZGVzYy0+aGFuZGxlci0+ZW5kKGlycSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzcGluX2xvY2soJmRlc2MtPmxvY2spOwotCWFja19pcnEoaXJxKTsJCi0JLyoKLQkgICBSRVBMQVkgaXMgd2hlbiBMaW51eCByZXNlbmRzIGFuIElSUSB0aGF0IHdhcyBkcm9wcGVkIGVhcmxpZXIKLQkgICBXQUlUSU5HIGlzIHVzZWQgYnkgcHJvYmUgdG8gbWFyayBpcnFzIHRoYXQgYXJlIGJlaW5nIHRlc3RlZAotCSAgICovCi0Jc3RhdHVzID0gZGVzYy0+c3RhdHVzICYgfihJUlFfUkVQTEFZIHwgSVJRX1dBSVRJTkcpOwotCXN0YXR1cyB8PSBJUlFfUEVORElORzsgLyogd2UgX3dhbnRfIHRvIGhhbmRsZSBpdCAqLwotCi0JLyoKLQkgKiBJZiB0aGUgSVJRIGlzIGRpc2FibGVkIGZvciB3aGF0ZXZlciByZWFzb24sIHdlIGNhbm5vdAotCSAqIHVzZSB0aGUgYWN0aW9uIHdlIGhhdmUuCi0JICovCi0JYWN0aW9uID0gTlVMTDsKLQlpZiAobGlrZWx5KCEoc3RhdHVzICYgKElSUV9ESVNBQkxFRCB8IElSUV9JTlBST0dSRVNTKSkpKSB7Ci0JCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKLQkJaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi0+aGFuZGxlcikgewotCQkJcHBjX3NwdXJpb3VzX2ludGVycnVwdHMrKzsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJVbmhhbmRsZWQgaW50ZXJydXB0ICV4LCBkaXNhYmxlZFxuIiwgaXJxKTsKLQkJCS8qIFdlIGNhbid0IGNhbGwgZGlzYWJsZV9pcnEgaGVyZSwgaXQgd291bGQgZGVhZGxvY2sgKi8KLQkJCWlmICghZGVzYy0+ZGVwdGgpCi0JCQkJZGVzYy0+ZGVwdGggPSAxOwotCQkJZGVzYy0+c3RhdHVzIHw9IElSUV9ESVNBQkxFRDsKLQkJCS8qIFRoaXMgaXMgbm90IGEgcmVhbCBzcHVycmlvdXMgaW50ZXJydXB0LCB3ZQotCQkJICogaGF2ZSB0byBlb2kgaXQsIHNvIHdlIGp1bXAgdG8gb3V0Ci0JCQkgKi8KLQkJCW1hc2tfaXJxKGlycSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlzdGF0dXMgJj0gfklSUV9QRU5ESU5HOyAvKiB3ZSBjb21taXQgdG8gaGFuZGxpbmcgKi8KLQkJc3RhdHVzIHw9IElSUV9JTlBST0dSRVNTOyAvKiB3ZSBhcmUgaGFuZGxpbmcgaXQgKi8KLQl9Ci0JZGVzYy0+c3RhdHVzID0gc3RhdHVzOwotCi0JLyoKLQkgKiBJZiB0aGVyZSBpcyBubyBJUlEgaGFuZGxlciBvciBpdCB3YXMgZGlzYWJsZWQsIGV4aXQgZWFybHkuCi0JICAgU2luY2Ugd2Ugc2V0IFBFTkRJTkcsIGlmIGFub3RoZXIgcHJvY2Vzc29yIGlzIGhhbmRsaW5nCi0JICAgYSBkaWZmZXJlbnQgaW5zdGFuY2Ugb2YgdGhpcyBzYW1lIGlycSwgdGhlIG90aGVyIHByb2Nlc3NvcgotCSAgIHdpbGwgdGFrZSBjYXJlIG9mIGl0LgotCSAqLwotCWlmICh1bmxpa2VseSghYWN0aW9uKSkKLQkJZ290byBvdXQ7Ci0KLQkvKgotCSAqIEVkZ2UgdHJpZ2dlcmVkIGludGVycnVwdHMgbmVlZCB0byByZW1lbWJlcgotCSAqIHBlbmRpbmcgZXZlbnRzLgotCSAqIFRoaXMgYXBwbGllcyB0byBhbnkgaHcgaW50ZXJydXB0cyB0aGF0IGFsbG93IGEgc2Vjb25kCi0JICogaW5zdGFuY2Ugb2YgdGhlIHNhbWUgaXJxIHRvIGFycml2ZSB3aGlsZSB3ZSBhcmUgaW4gZG9fSVJRCi0JICogb3IgaW4gdGhlIGhhbmRsZXIuIEJ1dCB0aGUgY29kZSBoZXJlIG9ubHkgaGFuZGxlcyB0aGUgX3NlY29uZF8KLQkgKiBpbnN0YW5jZSBvZiB0aGUgaXJxLCBub3QgdGhlIHRoaXJkIG9yIGZvdXJ0aC4gU28gaXQgaXMgbW9zdGx5Ci0JICogdXNlZnVsIGZvciBpcnEgaGFyZHdhcmUgdGhhdCBkb2VzIG5vdCBtYXNrIGNsZWFubHkgaW4gYW4KLQkgKiBTTVAgZW52aXJvbm1lbnQuCi0JICovCi0JZm9yICg7OykgewotCQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7Ci0KLSNpZmRlZiBDT05GSUdfSVJRU1RBQ0tTCi0JCS8qIFN3aXRjaCB0byB0aGUgaXJxIHN0YWNrIHRvIGhhbmRsZSB0aGlzICovCi0JCWN1cnRwID0gY3VycmVudF90aHJlYWRfaW5mbygpOwotCQlpcnF0cCA9IGhhcmRpcnFfY3R4W3NtcF9wcm9jZXNzb3JfaWQoKV07Ci0JCWlmIChjdXJ0cCAhPSBpcnF0cCkgewotCQkJaXJxdHAtPnRhc2sgPSBjdXJ0cC0+dGFzazsKLQkJCWlycXRwLT5mbGFncyA9IDA7Ci0JCQlhY3Rpb25fcmV0ID0gY2FsbF9oYW5kbGVfSVJRX2V2ZW50KGlycSwgcmVncywgYWN0aW9uLCBpcnF0cCk7Ci0JCQlpcnF0cC0+dGFzayA9IE5VTEw7Ci0JCQlpZiAoaXJxdHAtPmZsYWdzKQotCQkJCXNldF9iaXRzKGlycXRwLT5mbGFncywgJmN1cnRwLT5mbGFncyk7Ci0JCX0gZWxzZQotI2VuZGlmCi0JCQlhY3Rpb25fcmV0ID0gaGFuZGxlX0lSUV9ldmVudChpcnEsIHJlZ3MsIGFjdGlvbik7Ci0KLQkJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKLQkJaWYgKCFub2lycWRlYnVnKQotCQkJbm90ZV9pbnRlcnJ1cHQoaXJxLCBkZXNjLCBhY3Rpb25fcmV0LCByZWdzKTsKLQkJaWYgKGxpa2VseSghKGRlc2MtPnN0YXR1cyAmIElSUV9QRU5ESU5HKSkpCi0JCQlicmVhazsKLQkJZGVzYy0+c3RhdHVzICY9IH5JUlFfUEVORElORzsKLQl9Ci1vdXQ6Ci0JZGVzYy0+c3RhdHVzICY9IH5JUlFfSU5QUk9HUkVTUzsKLQkvKgotCSAqIFRoZSAtPmVuZCgpIGhhbmRsZXIgaGFzIHRvIGRlYWwgd2l0aCBpbnRlcnJ1cHRzIHdoaWNoIGdvdAotCSAqIGRpc2FibGVkIHdoaWxlIHRoZSBoYW5kbGVyIHdhcyBydW5uaW5nLgotCSAqLwotCWlmIChkZXNjLT5oYW5kbGVyKSB7Ci0JCWlmIChkZXNjLT5oYW5kbGVyLT5lbmQpCi0JCQlkZXNjLT5oYW5kbGVyLT5lbmQoaXJxKTsKLQkJZWxzZSBpZiAoZGVzYy0+aGFuZGxlci0+ZW5hYmxlKQotCQkJZGVzYy0+aGFuZGxlci0+ZW5hYmxlKGlycSk7Ci0JfQotCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKLX0KLQogI2lmZGVmIENPTkZJR19QUENfSVNFUklFUwogdm9pZCBkb19JUlEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CkBAIC0zMTAsOCArMjM3LDExIEBACiB2b2lkIGRvX0lSUShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpbnQgaXJxOworI2lmZGVmIENPTkZJR19JUlFTVEFDS1MKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKmN1cnRwLCAqaXJxdHA7CisjZW5kaWYKIAotCWlycV9lbnRlcigpOworICAgICAgICBpcnFfZW50ZXIoKTsKIAogI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XCiAJLyogRGVidWdnaW5nIGNoZWNrIGZvciBzdGFjayBvdmVyZmxvdzogaXMgdGhlcmUgbGVzcyB0aGFuIDJLQiBmcmVlPyAqLwpAQCAtMzI4LDIwICsyNTgsNDQgQEAKIAl9CiAjZW5kaWYKIAorCS8qCisJICogRXZlcnkgcGxhdGZvcm0gaXMgcmVxdWlyZWQgdG8gaW1wbGVtZW50IHBwY19tZC5nZXRfaXJxLgorCSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBlaXRoZXIgcmV0dXJuIGFuIGlycSBudW1iZXIgb3IgLTEgdG8KKwkgKiBpbmRpY2F0ZSB0aGVyZSBhcmUgbm8gbW9yZSBwZW5kaW5nLgorCSAqIFRoZSB2YWx1ZSAtMiBpcyBmb3IgYnVnZ3kgaGFyZHdhcmUgYW5kIG1lYW5zIHRoYXQgdGhpcyBJUlEKKwkgKiBoYXMgYWxyZWFkeSBiZWVuIGhhbmRsZWQuIC0tIFRvbQorCSAqLwogCWlycSA9IHBwY19tZC5nZXRfaXJxKHJlZ3MpOwogCi0JaWYgKGlycSA+PSAwKQotCQlwcGNfaXJxX2Rpc3BhdGNoX2hhbmRsZXIocmVncywgaXJxKTsKLQllbHNlCi0JCS8qIFRoYXQncyBub3QgU01QIHNhZmUgLi4uIGJ1dCB3aG8gY2FyZXMgPyAqLwotCQlwcGNfc3B1cmlvdXNfaW50ZXJydXB0cysrOwotCi0JaXJxX2V4aXQoKTsKKwlpZiAoaXJxID49IDApIHsKKyNpZmRlZiBDT05GSUdfSVJRU1RBQ0tTCisJCS8qIFN3aXRjaCB0byB0aGUgaXJxIHN0YWNrIHRvIGhhbmRsZSB0aGlzICovCisJCWN1cnRwID0gY3VycmVudF90aHJlYWRfaW5mbygpOworCQlpcnF0cCA9IGhhcmRpcnFfY3R4W3NtcF9wcm9jZXNzb3JfaWQoKV07CisJCWlmIChjdXJ0cCAhPSBpcnF0cCkgeworCQkJaXJxdHAtPnRhc2sgPSBjdXJ0cC0+dGFzazsKKwkJCWlycXRwLT5mbGFncyA9IDA7CisJCQljYWxsX19fZG9fSVJRKGlycSwgcmVncywgaXJxdHApOworCQkJaXJxdHAtPnRhc2sgPSBOVUxMOworCQkJaWYgKGlycXRwLT5mbGFncykKKwkJCQlzZXRfYml0cyhpcnF0cC0+ZmxhZ3MsICZjdXJ0cC0+ZmxhZ3MpOworCQl9IGVsc2UKKyNlbmRpZgorCQkJX19kb19JUlEoaXJxLCByZWdzKTsKKwl9IGVsc2UKKyNpZmRlZiBDT05GSUdfUFBDMzIKKwkJaWYgKGlycSAhPSAtMikKKyNlbmRpZgorCQkJLyogVGhhdCdzIG5vdCBTTVAgc2FmZSAuLi4gYnV0IHdobyBjYXJlcyA/ICovCisJCQlwcGNfc3B1cmlvdXNfaW50ZXJydXB0cysrOworICAgICAgICBpcnFfZXhpdCgpOwogfQorCiAjZW5kaWYJLyogQ09ORklHX1BQQ19JU0VSSUVTICovCiAKIHZvaWQgX19pbml0IGluaXRfSVJRKHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX1BQQzY0CiAJc3RhdGljIGludCBvbmNlID0gMDsKIAogCWlmIChvbmNlKQpAQCAtMzQ5LDEwICszMDMsMTQgQEAKIAogCW9uY2UrKzsKIAorI2VuZGlmCiAJcHBjX21kLmluaXRfSVJRKCk7CisjaWZkZWYgQ09ORklHX1BQQzY0CiAJaXJxX2N0eF9pbml0KCk7CisjZW5kaWYKIH0KIAorI2lmZGVmIENPTkZJR19QUEM2NAogI2lmbmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKIC8qCiAgKiBWaXJ0dWFsIElSUSBtYXBwaW5nIGNvZGUsIHVzZWQgb24gc3lzdGVtcyB3aXRoIFhJQ1MgaW50ZXJydXB0IGNvbnRyb2xsZXJzLgpAQCAtNTE3LDMgKzQ3NSw0IEBACiB9CiAKIF9fc2V0dXAoIm5vaXJxZGlzdHJpYiIsIHNldHVwX25vaXJxZGlzdHJpYik7CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9scGFyY2ZnLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC9scGFyY2ZnLmMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcmNmZy5jCmluZGV4IDNlN2IyZjIuLjFiM2JhOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL2xwYXJjZmcuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaXRfZXhwX3ZwZF9wYW5lbC5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL3Zkc29fZGF0YXBhZ2UuaD4KIAogI2RlZmluZSBNT0RVTEVfVkVSUyAiMS42IgogI2RlZmluZSBNT0RVTEVfTkFNRSAibHBhcmNmZyIKQEAgLTQyLDcgKzQzLDcgQEAKIC8qICNkZWZpbmUgTFBBUkNGR19ERUJVRyAqLwogCiAvKiBmaW5kIGEgYmV0dGVyIHBsYWNlIGZvciB0aGlzIGZ1bmN0aW9uLi4uICovCi12b2lkIGxvZ19wbHBhcl9oY2FsbF9yZXR1cm4odW5zaWduZWQgbG9uZyByYywgY2hhciAqdGFnKQorc3RhdGljIHZvaWQgbG9nX3BscGFyX2hjYWxsX3JldHVybih1bnNpZ25lZCBsb25nIHJjLCBjaGFyICp0YWcpCiB7CiAJaWYgKHJjID09IDApCQkvKiBzdWNjZXNzLCByZXR1cm4gKi8KIAkJcmV0dXJuOwpAQCAtOTYsNyArOTcsNyBAQAogCiAjZGVmaW5lIGxwYXJjZmdfd3JpdGUgTlVMTAogCi0vKiAKKy8qCiAgKiBNZXRob2RzIHVzZWQgdG8gZmV0Y2ggTFBBUiBkYXRhIHdoZW4gcnVubmluZyBvbiBhbiBpU2VyaWVzIHBsYXRmb3JtLgogICovCiBzdGF0aWMgaW50IGxwYXJjZmdfZGF0YShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCkBAIC0xNjgsNyArMTY5LDcgQEAKICNlbmRpZgkJCQkvKiBDT05GSUdfUFBDX0lTRVJJRVMgKi8KIAogI2lmZGVmIENPTkZJR19QUENfUFNFUklFUwotLyogCisvKgogICogTWV0aG9kcyB1c2VkIHRvIGZldGNoIExQQVIgZGF0YSB3aGVuIHJ1bm5pbmcgb24gYSBwU2VyaWVzIHBsYXRmb3JtLgogICovCiAKQEAgLTE3Nyw3ICsxNzgsNyBAQAogICogIGVudGl0bGVkX2NhcGFjaXR5LHVuYWxsb2NhdGVkX2NhcGFjaXR5LAogICogIGFnZ3JlZ2F0aW9uLCByZXNvdXJjZV9jYXBhYmlsaXR5KS4KICAqCi0gKiAgUjQgPSBFbnRpdGxlZCBQcm9jZXNzb3IgQ2FwYWNpdHkgUGVyY2VudGFnZS4gCisgKiAgUjQgPSBFbnRpdGxlZCBQcm9jZXNzb3IgQ2FwYWNpdHkgUGVyY2VudGFnZS4KICAqICBSNSA9IFVuYWxsb2NhdGVkIFByb2Nlc3NvciBDYXBhY2l0eSBQZXJjZW50YWdlLgogICogIFI2IChBQUJCQ0NEREVFRkZHR0hIKS4KICAqICAgICAgWFhYWCAtIHJlc2VydmVkICgwKQpAQCAtMTkwLDcgKzE5MSw3IEBACiAgKiAgICAgICAgICBYWCAtIHZhcmlhYmxlIHByb2Nlc3NvciBDYXBhY2l0eSBXZWlnaHQKICAqICAgICAgICAgICAgWFggLSBVbmFsbG9jYXRlZCBWYXJpYWJsZSBQcm9jZXNzb3IgQ2FwYWNpdHkgV2VpZ2h0LgogICogICAgICAgICAgICAgIFhYWFggLSBBY3RpdmUgcHJvY2Vzc29ycyBpbiBQaHlzaWNhbCBQcm9jZXNzb3IgUG9vbC4KLSAqICAgICAgICAgICAgICAgICAgWFhYWCAgLSBQcm9jZXNzb3JzIGFjdGl2ZSBvbiBwbGF0Zm9ybS4gCisgKiAgICAgICAgICAgICAgICAgIFhYWFggIC0gUHJvY2Vzc29ycyBhY3RpdmUgb24gcGxhdGZvcm0uCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgaF9nZXRfcHBwKHVuc2lnbmVkIGxvbmcgKmVudGl0bGVkLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyAqdW5hbGxvY2F0ZWQsCkBAIC0yMTIsMTEgKzIxMywxMCBAQAogCXVuc2lnbmVkIGxvbmcgZHVtbXk7CiAJcmMgPSBwbHBhcl9oY2FsbChIX1BJQywgMCwgMCwgMCwgMCwgcG9vbF9pZGxlX3RpbWUsIG51bV9wcm9jcywgJmR1bW15KTsKIAotCWxvZ19wbHBhcl9oY2FsbF9yZXR1cm4ocmMsICJIX1BJQyIpOworCWlmIChyYyAhPSBIX0F1dGhvcml0eSkKKwkJbG9nX3BscGFyX2hjYWxsX3JldHVybihyYywgIkhfUElDIik7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9wdXJyKHZvaWQpOwotCiAvKiBUcmFjayBzdW0gb2YgYWxsIHB1cnJzIGFjcm9zcyBhbGwgcHJvY2Vzc29ycy4gVGhpcyBpcyB1c2VkIHRvIGZ1cnRoZXIgKi8KIC8qIGNhbGN1bGF0ZSB1c2FnZSB2YWx1ZXMgYnkgZGlmZmVyZW50IGFwcGxpY2F0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgKi8KIApAQCAtMjczLDcgKzI3Myw3IEBACiAJCWlmICghd29ya2J1ZmZlcikgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlcyAlcyBrbWFsbG9jIGZhaWx1cmUgYXQgbGluZSAlZCBcbiIsCiAJCQkgICAgICAgX19GSUxFX18sIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOwotCQkJa2ZyZWUobG9jYWxfYnVmZmVyKTsJCQkKKwkJCWtmcmVlKGxvY2FsX2J1ZmZlcik7CiAJCQlyZXR1cm47CiAJCX0KICNpZmRlZiBMUEFSQ0ZHX0RFQlVHCkBAIC0zMTgsOCArMzE4LDYgQEAKIAlrZnJlZShsb2NhbF9idWZmZXIpOwogfQogCi1zdGF0aWMgaW50IGxwYXJjZmdfY291bnRfYWN0aXZlX3Byb2Nlc3NvcnModm9pZCk7Ci0KIC8qIFJldHVybiB0aGUgbnVtYmVyIG9mIHByb2Nlc3NvcnMgaW4gdGhlIHN5c3RlbS4KICAqIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUgYW5kIGNvdW50cwogICogdGhlIHZpcnR1YWwgcHJvY2Vzc29ycywgdGhpcyBkb2VzIG5vdCBpbmNsdWRlIHRocmVhZHMuCkBAIC0zNzEsNyArMzY5LDcgQEAKIAlscmRycCA9IChpbnQgKilnZXRfcHJvcGVydHkocnRhc19ub2RlLCAiaWJtLGxyZHItY2FwYWNpdHkiLCBOVUxMKTsKIAogCWlmIChscmRycCA9PSBOVUxMKSB7Ci0JCXBhcnRpdGlvbl9wb3RlbnRpYWxfcHJvY2Vzc29ycyA9IHN5c3RlbWNmZy0+cHJvY2Vzc29yQ291bnQ7CisJCXBhcnRpdGlvbl9wb3RlbnRpYWxfcHJvY2Vzc29ycyA9IHZkc29fZGF0YS0+cHJvY2Vzc29yQ291bnQ7CiAJfSBlbHNlIHsKIAkJcGFydGl0aW9uX3BvdGVudGlhbF9wcm9jZXNzb3JzID0gKihscmRycCArIDQpOwogCX0KQEAgLTU0Nyw3ICs1NDUsNyBAQAogCQlyZXR2YWwgPSAtRUlPOwogCX0KIAotICAgICAgb3V0Ogorb3V0OgogCWtmcmVlKGtidWYpOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC01NjAsMTAgKzU1OCwxMCBAQAogfQogCiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxwYXJjZmdfZm9wcyA9IHsKLSAgICAgIC5vd25lcgk9IFRISVNfTU9EVUxFLAotICAgICAgLnJlYWQJPSBzZXFfcmVhZCwKLSAgICAgIC5vcGVuCT0gbHBhcmNmZ19vcGVuLAotICAgICAgLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLm9wZW4JCT0gbHBhcmNmZ19vcGVuLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCiBpbnQgX19pbml0IGxwYXJjZmdfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUwppbmRleCAzYmVkYjUzLi5mNmQ4NGE3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUwpAQCAtNTE5LDcgKzUxOSw3IEBACiAgKgogICogZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCkKICAqLwotX0dMT0JBTChmbHVzaF9pY2FjaGVfcmFuZ2UpCitfR0xPQkFMKF9fZmx1c2hfaWNhY2hlX3JhbmdlKQogQkVHSU5fRlRSX1NFQ1RJT04KIAlibHIJCQkJLyogZm9yIDYwMSwgZG8gbm90aGluZyAqLwogRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfU1BMSVRfSURfQ0FDSEUpCkBAIC02MDcsMjcgKzYwNyw2IEBACiAJc3luYwkJCQkvKiB3YWl0IGZvciBkY2JpJ3MgdG8gZ2V0IHRvIHJhbSAqLwogCWJscgogCi0jaWZkZWYgQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRQotLyoKLSAqIDQweCBjb3JlcyBoYXZlIDhLIG9yIDE2SyBkY2FjaGUgYW5kIDMyIGJ5dGUgbGluZSBzaXplLgotICogNDR4IGhhcyBhIDMySyBkY2FjaGUgYW5kIDMyIGJ5dGUgbGluZSBzaXplLgotICogOHh4IGhhcyAxLCAyLCA0LCA4SyB2YXJpYW50cy4KLSAqIEZvciBub3csIGNvdmVyIHRoZSB3b3JzdCBjYXNlIG9mIHRoZSA0NHguCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGV4dGVybmFsIGludGVycnVwdHMgZGlzYWJsZWQuCi0gKi8KLSNkZWZpbmUgQ0FDSEVfTldBWVMJNjQKLSNkZWZpbmUgQ0FDSEVfTkxJTkVTCTE2Ci0KLV9HTE9CQUwoZmx1c2hfZGNhY2hlX2FsbCkKLQlsaQlyNCwgKDIgKiBDQUNIRV9OV0FZUyAqIENBQ0hFX05MSU5FUykKLQltdGN0cglyNAotCWxpcyAgICAgcjUsIEtFUk5FTEJBU0VAaAotMToJbHd6CXIzLCAwKHI1KQkJLyogTG9hZCBvbmUgd29yZCBmcm9tIGV2ZXJ5IGxpbmUgKi8KLQlhZGRpCXI1LCByNSwgTDFfQ0FDSEVfQllURVMKLQliZG56ICAgIDFiCi0JYmxyCi0jZW5kaWYgLyogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRSAqLwotCiAvKgogICogRmx1c2ggYSBwYXJ0aWN1bGFyIHBhZ2UgZnJvbSB0aGUgZGF0YSBjYWNoZSB0byBSQU0uCiAgKiBOb3RlOiB0aGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBpbnN0cnVjdGlvbiBjYWNoZSBkb2VzICpub3QqCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfNjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TCmluZGV4IGFlMTQzM2QuLmFlNDhhMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TCkBAIC04OSwxMiArODksMTIgQEAKIAltdGxyCXIwCiAJYmxyCiAKLV9HTE9CQUwoY2FsbF9oYW5kbGVfSVJRX2V2ZW50KQorX0dMT0JBTChjYWxsX19fZG9fSVJRKQogCW1mbHIJcjAKIAlzdGQJcjAsMTYocjEpCi0Jc3RkdQlyMSxUSFJFQURfU0laRS0xMTIocjYpCi0JbXIJcjEscjYKLQlibAkuaGFuZGxlX0lSUV9ldmVudAorCXN0ZHUJcjEsVEhSRUFEX1NJWkUtMTEyKHI1KQorCW1yCXIxLHI1CisJYmwJLl9fZG9fSVJRCiAJbGQJcjEsMChyMSkKIAlsZAlyMCwxNihyMSkKIAltdGxyCXIwCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9wYWNhRGF0YS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvcGFjYURhdGEuYwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMKaW5kZXggMzEzM2M3Mi4uYTdiNjhmOSAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvcGFjYURhdGEuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BhY2EuYwpAQCAtMTUsMjQgKzE1LDE2IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgotCiAjaW5jbHVkZSA8YXNtL2xwcGFjYS5oPgogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2l0X2xwX3F1ZXVlLmg+CiAjaW5jbHVkZSA8YXNtL3BhY2EuaD4KIAotc3RhdGljIHVuaW9uIHsKLQlzdHJ1Y3Qgc3lzdGVtY2ZnCWRhdGE7Ci0JdTgJCQlwYWdlW1BBR0VfU0laRV07Ci19IHN5c3RlbWNmZ19zdG9yZSBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEucGFnZS5hbGlnbmVkIikpKTsKLXN0cnVjdCBzeXN0ZW1jZmcgKnN5c3RlbWNmZyA9ICZzeXN0ZW1jZmdfc3RvcmUuZGF0YTsKLUVYUE9SVF9TWU1CT0woc3lzdGVtY2ZnKTsKLQogCiAvKiBUaGlzIHN5bWJvbCBpcyBwcm92aWRlZCBieSB0aGUgbGlua2VyIC0gbGV0IGl0IGZpbGwgaW4gdGhlIHBhY2EKICAqIGZpZWxkIGNvcnJlY3RseSAqLwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX190b2Nfc3RhcnQ7CiAKLS8qIFRoZSBQYWNhIGlzIGFuIGFycmF5IHdpdGggb25lIGVudHJ5IHBlciBwcm9jZXNzb3IuICBFYWNoIGNvbnRhaW5zIGFuIAorLyogVGhlIFBhY2EgaXMgYW4gYXJyYXkgd2l0aCBvbmUgZW50cnkgcGVyIHByb2Nlc3Nvci4gIEVhY2ggY29udGFpbnMgYW4KICAqIGxwcGFjYSwgd2hpY2ggY29udGFpbnMgdGhlIGluZm9ybWF0aW9uIHNoYXJlZCBiZXR3ZWVuIHRoZQogICogaHlwZXJ2aXNvciBhbmQgTGludXguICBFYWNoIGFsc28gY29udGFpbnMgYW4gSXRMcFJlZ1NhdmUgYXJlYSB3aGljaAogICogaXMgdXNlZCBieSB0aGUgaHlwZXJ2aXNvciB0byBzYXZlIHJlZ2lzdGVycy4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jCmluZGV4IDQ3ZDZmN2UuLjVkY2Y0YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9idGV4dC5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KIAogI2lmZGVmICBDT05GSUdfOHh4CiAjaW5jbHVkZSA8YXNtL2NvbW1wcm9jLmg+CkBAIC01Niw3ICs1Nyw2IEBACiBleHRlcm4gdm9pZCBhbGlnbm1lbnRfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIGV4dGVybiB2b2lkIHByb2dyYW1fY2hlY2tfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIGV4dGVybiB2b2lkIHNpbmdsZV9zdGVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1leHRlcm4gaW50IGRvX3NpZ25hbChzaWdzZXRfdCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKIGV4dGVybiBpbnQgcG1hY19uZXd3b3JsZDsKIGV4dGVybiBpbnQgc3lzX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKQEAgLTE4OCw5ICsxODgsNiBAQAogRVhQT1JUX1NZTUJPTChjdWRhX3JlcXVlc3QpOwogRVhQT1JUX1NZTUJPTChjdWRhX3BvbGwpOwogI2VuZGlmIC8qIENPTkZJR19BREJfQ1VEQSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikKLUVYUE9SVF9TWU1CT0woX21hY2hpbmUpOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BQQ19QTUFDCiBFWFBPUlRfU1lNQk9MKHN5c19jdHJsZXIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9wcm9jX3BwYzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2NfcHBjNjQuYwpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC9wcm9jX3BwYzY0LmMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY19wcGM2NC5jCmluZGV4IDI0ZTk1NWUuLjdiYTQyYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3Byb2NfcHBjNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2NfcHBjNjQuYwpAQCAtMSwxOCArMSwxNiBAQAogLyoKLSAqIGFyY2gvcHBjNjQva2VybmVsL3Byb2NfcHBjNjQuYwotICoKICAqIENvcHlyaWdodCAoQykgMjAwMSBNaWtlIENvcnJpZ2FuICYgRGF2ZSBFbmdlYnJldHNlbiBJQk0gQ29ycG9yYXRpb24KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICogCisgKgogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKQEAgLTI1LDcgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKLSNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+CisjaW5jbHVkZSA8YXNtL3Zkc29fZGF0YXBhZ2UuaD4KICNpbmNsdWRlIDxhc20vcnRhcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KQEAgLTUzLDcgKzUxLDcgQEAKIAlpZiAoIXJvb3QpCiAJCXJldHVybiAxOwogCi0JaWYgKCEoc3lzdGVtY2ZnLT5wbGF0Zm9ybSAmIChQTEFURk9STV9QU0VSSUVTIHwgUExBVEZPUk1fQ0VMTCkpKQorCWlmICghKHBsYXRmb3JtX2lzX3BzZXJpZXMoKSB8fCBfbWFjaGluZSA9PSBQTEFURk9STV9DRUxMKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIXByb2NfbWtkaXIoInJ0YXMiLCByb290KSkKQEAgLTc0LDcgKzcyLDcgQEAKIAlpZiAoIXBkZSkKIAkJcmV0dXJuIDE7CiAJcGRlLT5ubGluayA9IDE7Ci0JcGRlLT5kYXRhID0gc3lzdGVtY2ZnOworCXBkZS0+ZGF0YSA9IHZkc29fZGF0YTsKIAlwZGUtPnNpemUgPSBQQUdFX1NJWkU7CiAJcGRlLT5wcm9jX2ZvcHMgPSAmcGFnZV9tYXBfZm9wczsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwppbmRleCBmNjQ1YWRiLi42YTViNDY4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwpAQCAtNDgsOSArNDgsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL3BTZXJpZXNfcmVjb25maWcuaD4KICNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgotI2lmZGVmIENPTkZJR19QUEM2NAotI2luY2x1ZGUgPGFzbS9zeXN0ZW1jZmcuaD4KLSNlbmRpZgogCiAjaWZkZWYgREVCVUcKICNkZWZpbmUgREJHKGZtdC4uLikgcHJpbnRrKEtFUk5fRVJSIGZtdCkKQEAgLTc0LDEwICs3MSw2IEBACiB0eXBlZGVmIGludCBpbnRlcnByZXRfZnVuYyhzdHJ1Y3QgZGV2aWNlX25vZGUgKiwgdW5zaWduZWQgbG9uZyAqLAogCQkJICAgaW50LCBpbnQsIGludCk7CiAKLWV4dGVybiBzdHJ1Y3QgcnRhc190IHJ0YXM7Ci1leHRlcm4gc3RydWN0IGxtYiBsbWI7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBrbGltaXQ7Ci0KIHN0YXRpYyBpbnQgX19pbml0ZGF0YSBkdF9yb290X2FkZHJfY2VsbHM7CiBzdGF0aWMgaW50IF9faW5pdGRhdGEgZHRfcm9vdF9zaXplX2NlbGxzOwogCkBAIC0zOTEsNyArMzg0LDcgQEAKIAogI2lmZGVmIENPTkZJR19QUEM2NAogCQkvKiBXZSBvZmZzZXQgaXJxIG51bWJlcnMgZm9yIHRoZSB1MyBNUElDIGJ5IDEyOCBpbiBQb3dlck1hYyAqLwotCQlpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSA9PSBQTEFURk9STV9QT1dFUk1BQyAmJiBpYyAmJiBpYy0+cGFyZW50KSB7CisJCWlmIChfbWFjaGluZSA9PSBQTEFURk9STV9QT1dFUk1BQyAmJiBpYyAmJiBpYy0+cGFyZW50KSB7CiAJCQljaGFyICpuYW1lID0gZ2V0X3Byb3BlcnR5KGljLT5wYXJlbnQsICJuYW1lIiwgTlVMTCk7CiAJCQlpZiAobmFtZSAmJiAhc3RyY21wKG5hbWUsICJ1MyIpKQogCQkJCW5wLT5pbnRyc1tpbnRyY291bnRdLmxpbmUgKz0gMTI4OwpAQCAtMTA4Nyw5ICsxMDgwLDkgQEAKIHN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9jcHVzKHVuc2lnbmVkIGxvbmcgbm9kZSwKIAkJCQkJICBjb25zdCBjaGFyICp1bmFtZSwgaW50IGRlcHRoLCB2b2lkICpkYXRhKQogewotCWNoYXIgKnR5cGUgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJkZXZpY2VfdHlwZSIsIE5VTEwpOwogCXUzMiAqcHJvcDsKLQl1bnNpZ25lZCBsb25nIHNpemUgPSAwOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwljaGFyICp0eXBlID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiZGV2aWNlX3R5cGUiLCAmc2l6ZSk7CiAKIAkvKiBXZSBhcmUgc2Nhbm5pbmcgImNwdSIgbm9kZXMgb25seSAqLwogCWlmICh0eXBlID09IE5VTEwgfHwgc3RyY21wKHR5cGUsICJjcHUiKSAhPSAwKQpAQCAtMTExNSw3ICsxMTA4LDcgQEAKIAogI2lmZGVmIENPTkZJR19BTFRJVkVDCiAJLyogQ2hlY2sgaWYgd2UgaGF2ZSBhIFZNWCBhbmQgZXZlbnR1YWxseSB1cGRhdGUgQ1BVIGZlYXR1cmVzICovCi0JcHJvcCA9ICh1MzIgKilvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJpYm0sdm14IiwgJnNpemUpOworCXByb3AgPSAodTMyICopb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiaWJtLHZteCIsIE5VTEwpOwogCWlmIChwcm9wICYmICgqcHJvcCkgPiAwKSB7CiAJCWN1cl9jcHVfc3BlYy0+Y3B1X2ZlYXR1cmVzIHw9IENQVV9GVFJfQUxUSVZFQzsKIAkJY3VyX2NwdV9zcGVjLT5jcHVfdXNlcl9mZWF0dXJlcyB8PSBQUENfRkVBVFVSRV9IQVNfQUxUSVZFQzsKQEAgLTExNjEsMTMgKzExNTQsOSBAQAogCXByb3AgPSAodTMyICopb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgscGxhdGZvcm0iLCBOVUxMKTsKIAlpZiAocHJvcCA9PSBOVUxMKQogCQlyZXR1cm4gMDsKLSNpZmRlZiBDT05GSUdfUFBDNjQKLQlzeXN0ZW1jZmctPnBsYXRmb3JtID0gKnByb3A7Ci0jZWxzZQogI2lmZGVmIENPTkZJR19QUENfTVVMVElQTEFURk9STQogCV9tYWNoaW5lID0gKnByb3A7CiAjZW5kaWYKLSNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BQQzY0CiAJLyogY2hlY2sgaWYgaW9tbXUgaXMgZm9yY2VkIG9uIG9yIG9mZiAqLwpAQCAtMTI2NCw3ICsxMjUzLDE0IEBACiAJdW5zaWduZWQgbG9uZyBsOwogCiAJLyogV2UgYXJlIHNjYW5uaW5nICJtZW1vcnkiIG5vZGVzIG9ubHkgKi8KLQlpZiAodHlwZSA9PSBOVUxMIHx8IHN0cmNtcCh0eXBlLCAibWVtb3J5IikgIT0gMCkKKwlpZiAodHlwZSA9PSBOVUxMKSB7CisJCS8qCisJCSAqIFRoZSBsb25ndHJhaWwgZG9lc24ndCBoYXZlIGEgZGV2aWNlX3R5cGUgb24gdGhlCisJCSAqIC9tZW1vcnkgbm9kZSwgc28gbG9vayBmb3IgdGhlIG5vZGUgY2FsbGVkIC9tZW1vcnlAMC4KKwkJICovCisJCWlmIChkZXB0aCAhPSAxIHx8IHN0cmNtcCh1bmFtZSwgIm1lbW9yeUAwIikgIT0gMCkKKwkJCXJldHVybiAwOworCX0gZWxzZSBpZiAoc3RyY21wKHR5cGUsICJtZW1vcnkiKSAhPSAwKQogCQlyZXR1cm4gMDsKIAogCXJlZyA9IChjZWxsX3QgKilvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJyZWciLCAmbCk7CkBAIC0xMzM5LDkgKzEzMzUsNiBAQAogCW9mX3NjYW5fZmxhdF9kdChlYXJseV9pbml0X2R0X3NjYW5fbWVtb3J5LCBOVUxMKTsKIAlsbWJfZW5mb3JjZV9tZW1vcnlfbGltaXQobWVtb3J5X2xpbWl0KTsKIAlsbWJfYW5hbHl6ZSgpOwotI2lmZGVmIENPTkZJR19QUEM2NAotCXN5c3RlbWNmZy0+cGh5c2ljYWxNZW1vcnlTaXplID0gbG1iX3BoeXNfbWVtX3NpemUoKTsKLSNlbmRpZgogCWxtYl9yZXNlcnZlKDAsIF9fcGEoa2xpbWl0KSk7CiAKIAlEQkcoIlBoeXMuIG1lbTogJWx4XG4iLCBsbWJfcGh5c19tZW1fc2l6ZSgpKTsKQEAgLTE5MDgsNyArMTkwMSw3IEBACiAJLyogV2UgZG9uJ3Qgc3VwcG9ydCB0aGF0IGZ1bmN0aW9uIG9uIFBvd2VyTWFjLCBhdCBsZWFzdAogCSAqIG5vdCB5ZXQKIAkgKi8KLQlpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSA9PSBQTEFURk9STV9QT1dFUk1BQykKKwlpZiAoX21hY2hpbmUgPT0gUExBVEZPUk1fUE9XRVJNQUMpCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogZml4IHVwIG5ldyBub2RlJ3MgbGludXhfcGhhbmRsZSBmaWVsZCAqLwpAQCAtMTk5Miw5ICsxOTg1LDExIEBACiAJKm5leHQgPSBwcm9wOwogCXdyaXRlX3VubG9jaygmZGV2dHJlZV9sb2NrKTsKIAorI2lmZGVmIENPTkZJR19QUk9DX0RFVklDRVRSRUUKIAkvKiB0cnkgdG8gYWRkIHRvIHByb2MgYXMgd2VsbCBpZiBpdCB3YXMgaW5pdGlhbGl6ZWQgKi8KIAlpZiAobnAtPnBkZSkKIAkJcHJvY19kZXZpY2VfdHJlZV9hZGRfcHJvcChucC0+cGRlLCBwcm9wKTsKKyNlbmRpZiAvKiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFICovCiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCmluZGV4IDZkYzMzZDEuLjRjZTAxMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwpAQCAtOTQsMTEgKzk0LDE3IEBACiAjaWZkZWYgQ09ORklHX1BQQzY0CiAjZGVmaW5lIFJFTE9DKHgpICAgICAgICAoKlBUUlJFTE9DKCYoeCkpKQogI2RlZmluZSBBRERSKHgpCQkodTMyKSBhZGRfcmVsb2Nfb2Zmc2V0KCh1bnNpZ25lZCBsb25nKSh4KSkKKyNkZWZpbmUgT0ZfV09SS0FST1VORFMJMAogI2Vsc2UKICNkZWZpbmUgUkVMT0MoeCkJKHgpCiAjZGVmaW5lIEFERFIoeCkJCSh1MzIpICh4KQorI2RlZmluZSBPRl9XT1JLQVJPVU5EUwlvZl93b3JrYXJvdW5kcworaW50IG9mX3dvcmthcm91bmRzOwogI2VuZGlmCiAKKyNkZWZpbmUgT0ZfV0FfQ0xBSU0JMQkvKiBkbyBwaHlzL3ZpcnQgY2xhaW0gc2VwYXJhdGVseSwgdGhlbiBtYXAgKi8KKyNkZWZpbmUgT0ZfV0FfTE9OR1RSQUlMCTIJLyogd29yayBhcm91bmQgbG9uZ3RyYWlsIGJ1Z3MgKi8KKwogI2RlZmluZSBQUk9NX0JVRygpIGRvIHsJCQkJCQlcCiAgICAgICAgIHByb21fcHJpbnRmKCJrZXJuZWwgQlVHIGF0ICVzIGxpbmUgMHgleCFcbiIsCQlcCiAJCSAgICBSRUxPQyhfX0ZJTEVfXyksIF9fTElORV9fKTsJCQlcCkBAIC0xMTEsMTEgKzExNyw2IEBACiAjZGVmaW5lIHByb21fZGVidWcoeC4uLikKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1BQQzMyCi0jZGVmaW5lIFBMQVRGT1JNX1BPV0VSTUFDCV9NQUNIX1BtYWMKLSNkZWZpbmUgUExBVEZPUk1fQ0hSUAkJX01BQ0hfY2hycAotI2VuZGlmCi0KIAogdHlwZWRlZiB1MzIgcHJvbV9hcmdfdDsKIApAQCAtMTI4LDEwICsxMjksMTEgQEAKIAogc3RydWN0IHByb21fdCB7CiAJaWhhbmRsZSByb290OwotCWloYW5kbGUgY2hvc2VuOworCXBoYW5kbGUgY2hvc2VuOwogCWludCBjcHU7CiAJaWhhbmRsZSBzdGRvdXQ7CiAJaWhhbmRsZSBtbXVtYXA7CisJaWhhbmRsZSBtZW1vcnk7CiB9OwogCiBzdHJ1Y3QgbWVtX21hcF9lbnRyeSB7CkBAIC0zNjAsMTYgKzM2MiwzNiBAQAogc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgcHJvbV9jbGFpbSh1bnNpZ25lZCBsb25nIHZpcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQl1bnNpZ25lZCBsb25nIGFsaWduKQogewotCWludCByZXQ7CiAJc3RydWN0IHByb21fdCAqX3Byb20gPSAmUkVMT0MocHJvbSk7CiAKLQlyZXQgPSBjYWxsX3Byb20oImNsYWltIiwgMywgMSwgKHByb21fYXJnX3QpdmlydCwgKHByb21fYXJnX3Qpc2l6ZSwKLQkJCShwcm9tX2FyZ190KWFsaWduKTsKLQlpZiAocmV0ICE9IC0xICYmIF9wcm9tLT5tbXVtYXAgIT0gMCkKLQkJLyogb2xkIHBtYWNzIG5lZWQgdXMgdG8gbWFwIGFzIHdlbGwgKi8KKwlpZiAoYWxpZ24gPT0gMCAmJiAoT0ZfV09SS0FST1VORFMgJiBPRl9XQV9DTEFJTSkpIHsKKwkJLyoKKwkJICogT2xkIE9GIHJlcXVpcmVzIHdlIGNsYWltIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIHNlcGFyYXRlbHkKKwkJICogYW5kIHRoZW4gbWFwIGV4cGxpY2l0bHkgKGFzc3VtaW5nIHZpcnR1YWwgbW9kZSkKKwkJICovCisJCWludCByZXQ7CisJCXByb21fYXJnX3QgcmVzdWx0OworCisJCXJldCA9IGNhbGxfcHJvbV9yZXQoImNhbGwtbWV0aG9kIiwgNSwgMiwgJnJlc3VsdCwKKwkJCQkgICAgQUREUigiY2xhaW0iKSwgX3Byb20tPm1lbW9yeSwKKwkJCQkgICAgYWxpZ24sIHNpemUsIHZpcnQpOworCQlpZiAocmV0ICE9IDAgfHwgcmVzdWx0ID09IC0xKQorCQkJcmV0dXJuIC0xOworCQlyZXQgPSBjYWxsX3Byb21fcmV0KCJjYWxsLW1ldGhvZCIsIDUsIDIsICZyZXN1bHQsCisJCQkJICAgIEFERFIoImNsYWltIiksIF9wcm9tLT5tbXVtYXAsCisJCQkJICAgIGFsaWduLCBzaXplLCB2aXJ0KTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQljYWxsX3Byb20oImNhbGwtbWV0aG9kIiwgNCwgMSwgQUREUigicmVsZWFzZSIpLAorCQkJCSAgX3Byb20tPm1lbW9yeSwgc2l6ZSwgdmlydCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJLyogdGhlIDB4MTIgaXMgTSAoY29oZXJlbmNlKSArIFBQID09IHJlYWQvd3JpdGUgKi8KIAkJY2FsbF9wcm9tKCJjYWxsLW1ldGhvZCIsIDYsIDEsCi0JCQkgIEFERFIoIm1hcCIpLCBfcHJvbS0+bW11bWFwLCAwLCBzaXplLCB2aXJ0LCB2aXJ0KTsKLQlyZXR1cm4gcmV0OworCQkJICBBRERSKCJtYXAiKSwgX3Byb20tPm1tdW1hcCwgMHgxMiwgc2l6ZSwgdmlydCwgdmlydCk7CisJCXJldHVybiB2aXJ0OworCX0KKwlyZXR1cm4gY2FsbF9wcm9tKCJjbGFpbSIsIDMsIDEsIChwcm9tX2FyZ190KXZpcnQsIChwcm9tX2FyZ190KXNpemUsCisJCQkgKHByb21fYXJnX3QpYWxpZ24pOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKSBwcm9tX3BhbmljKGNvbnN0IGNoYXIgKnJlYXNvbikKQEAgLTQxNSwxMSArNDM3LDUyIEBACiAJcmV0dXJuIGNhbGxfcHJvbSgiZ2V0cHJvcGxlbiIsIDIsIDEsIG5vZGUsIEFERFIocG5hbWUpKTsKIH0KIAotc3RhdGljIGludCBpbmxpbmUgcHJvbV9zZXRwcm9wKHBoYW5kbGUgbm9kZSwgY29uc3QgY2hhciAqcG5hbWUsCi0JCQkgICAgICAgdm9pZCAqdmFsdWUsIHNpemVfdCB2YWx1ZWxlbikKK3N0YXRpYyB2b2lkIGFkZF9zdHJpbmcoY2hhciAqKnN0ciwgY29uc3QgY2hhciAqcSkKIHsKLQlyZXR1cm4gY2FsbF9wcm9tKCJzZXRwcm9wIiwgNCwgMSwgbm9kZSwgQUREUihwbmFtZSksCi0JCQkgKHUzMikodW5zaWduZWQgbG9uZykgdmFsdWUsICh1MzIpIHZhbHVlbGVuKTsKKwljaGFyICpwID0gKnN0cjsKKworCXdoaWxlICgqcSkKKwkJKnArKyA9ICpxKys7CisJKnArKyA9ICcgJzsKKwkqc3RyID0gcDsKK30KKworc3RhdGljIGNoYXIgKnRvaGV4KHVuc2lnbmVkIGludCB4KQoreworCXN0YXRpYyBjaGFyIGRpZ2l0c1tdID0gIjAxMjM0NTY3ODlhYmNkZWYiOworCXN0YXRpYyBjaGFyIHJlc3VsdFs5XTsKKwlpbnQgaTsKKworCXJlc3VsdFs4XSA9IDA7CisJaSA9IDg7CisJZG8geworCQktLWk7CisJCXJlc3VsdFtpXSA9IGRpZ2l0c1t4ICYgMHhmXTsKKwkJeCA+Pj0gNDsKKwl9IHdoaWxlICh4ICE9IDAgJiYgaSA+IDApOworCXJldHVybiAmcmVzdWx0W2ldOworfQorCitzdGF0aWMgaW50IF9faW5pdCBwcm9tX3NldHByb3AocGhhbmRsZSBub2RlLCBjb25zdCBjaGFyICpub2RlbmFtZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpwbmFtZSwgdm9pZCAqdmFsdWUsIHNpemVfdCB2YWx1ZWxlbikKK3sKKwljaGFyIGNtZFsyNTZdLCAqcDsKKworCWlmICghKE9GX1dPUktBUk9VTkRTICYgT0ZfV0FfTE9OR1RSQUlMKSkKKwkJcmV0dXJuIGNhbGxfcHJvbSgic2V0cHJvcCIsIDQsIDEsIG5vZGUsIEFERFIocG5hbWUpLAorCQkJCSAodTMyKSh1bnNpZ25lZCBsb25nKSB2YWx1ZSwgKHUzMikgdmFsdWVsZW4pOworCisJLyogZ2FoLi4uIHNldHByb3AgZG9lc24ndCB3b3JrIG9uIGxvbmd0cmFpbCwgaGF2ZSB0byB1c2UgaW50ZXJwcmV0ICovCisJcCA9IGNtZDsKKwlhZGRfc3RyaW5nKCZwLCAiZGV2Iik7CisJYWRkX3N0cmluZygmcCwgbm9kZW5hbWUpOworCWFkZF9zdHJpbmcoJnAsIHRvaGV4KCh1MzIpKHVuc2lnbmVkIGxvbmcpIHZhbHVlKSk7CisJYWRkX3N0cmluZygmcCwgdG9oZXgodmFsdWVsZW4pKTsKKwlhZGRfc3RyaW5nKCZwLCB0b2hleChBRERSKHBuYW1lKSkpOworCWFkZF9zdHJpbmcoJnAsIHRvaGV4KHN0cmxlbihSRUxPQyhwbmFtZSkpKSk7CisJYWRkX3N0cmluZygmcCwgInByb3BlcnR5Iik7CisJKnAgPSAwOworCXJldHVybiBjYWxsX3Byb20oImludGVycHJldCIsIDEsIDEsICh1MzIpKHVuc2lnbmVkIGxvbmcpIGNtZCk7CiB9CiAKIC8qIFdlIGNhbid0IHVzZSB0aGUgc3RhbmRhcmQgdmVyc2lvbnMgYmVjYXVzZSBvZiBSRUxPQyBoZWFkYWNoZXMuICovCkBAIC05ODAsNyArMTA0Myw3IEBACiAKIAlydGFzX2luc3QgPSBjYWxsX3Byb20oIm9wZW4iLCAxLCAxLCBBRERSKCIvcnRhcyIpKTsKIAlpZiAoIUlIQU5ETEVfVkFMSUQocnRhc19pbnN0KSkgewotCQlwcm9tX3ByaW50Zigib3BlbmluZyBydGFzIHBhY2thZ2UgZmFpbGVkIik7CisJCXByb21fcHJpbnRmKCJvcGVuaW5nIHJ0YXMgcGFja2FnZSBmYWlsZWQgKCV4KVxuIiwgcnRhc19pbnN0KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtOTg4LDcgKzEwNTEsNyBAQAogCiAJaWYgKGNhbGxfcHJvbV9yZXQoImNhbGwtbWV0aG9kIiwgMywgMiwgJmVudHJ5LAogCQkJICBBRERSKCJpbnN0YW50aWF0ZS1ydGFzIiksCi0JCQkgIHJ0YXNfaW5zdCwgYmFzZSkgPT0gUFJPTV9FUlJPUgorCQkJICBydGFzX2luc3QsIGJhc2UpICE9IDAKIAkgICAgfHwgZW50cnkgPT0gMCkgewogCQlwcm9tX3ByaW50ZigiIGZhaWxlZFxuIik7CiAJCXJldHVybjsKQEAgLTk5Nyw4ICsxMDYwLDEwIEBACiAKIAlyZXNlcnZlX21lbShiYXNlLCBzaXplKTsKIAotCXByb21fc2V0cHJvcChydGFzX25vZGUsICJsaW51eCxydGFzLWJhc2UiLCAmYmFzZSwgc2l6ZW9mKGJhc2UpKTsKLQlwcm9tX3NldHByb3AocnRhc19ub2RlLCAibGludXgscnRhcy1lbnRyeSIsICZlbnRyeSwgc2l6ZW9mKGVudHJ5KSk7CisJcHJvbV9zZXRwcm9wKHJ0YXNfbm9kZSwgIi9ydGFzIiwgImxpbnV4LHJ0YXMtYmFzZSIsCisJCSAgICAgJmJhc2UsIHNpemVvZihiYXNlKSk7CisJcHJvbV9zZXRwcm9wKHJ0YXNfbm9kZSwgIi9ydGFzIiwgImxpbnV4LHJ0YXMtZW50cnkiLAorCQkgICAgICZlbnRyeSwgc2l6ZW9mKGVudHJ5KSk7CiAKIAlwcm9tX2RlYnVnKCJydGFzIGJhc2UgICAgID0gMHgleFxuIiwgYmFzZSk7CiAJcHJvbV9kZWJ1ZygicnRhcyBlbnRyeSAgICA9IDB4JXhcbiIsIGVudHJ5KTsKQEAgLTEwODksMTAgKzExNTQsNiBAQAogCQlpZiAoYmFzZSA8IGxvY2FsX2FsbG9jX2JvdHRvbSkKIAkJCWxvY2FsX2FsbG9jX2JvdHRvbSA9IGJhc2U7CiAKLQkJLyogU2F2ZSBhd2F5IHRoZSBUQ0UgdGFibGUgYXR0cmlidXRlcyBmb3IgbGF0ZXIgdXNlLiAqLwotCQlwcm9tX3NldHByb3Aobm9kZSwgImxpbnV4LHRjZS1iYXNlIiwgJmJhc2UsIHNpemVvZihiYXNlKSk7Ci0JCXByb21fc2V0cHJvcChub2RlLCAibGludXgsdGNlLXNpemUiLCAmbWluc2l6ZSwgc2l6ZW9mKG1pbnNpemUpKTsKLQogCQkvKiBJdCBzZWVtcyBPRiBkb2Vzbid0IG51bGwtdGVybWluYXRlIHRoZSBwYXRoIDotKCAqLwogCQltZW1zZXQocGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKIAkJLyogQ2FsbCBPRiB0byBzZXR1cCB0aGUgVENFIGhhcmR3YXJlICovCkBAIC0xMTAxLDYgKzExNjIsMTAgQEAKIAkJCXByb21fcHJpbnRmKCJwYWNrYWdlLXRvLXBhdGggZmFpbGVkXG4iKTsKIAkJfQogCisJCS8qIFNhdmUgYXdheSB0aGUgVENFIHRhYmxlIGF0dHJpYnV0ZXMgZm9yIGxhdGVyIHVzZS4gKi8KKwkJcHJvbV9zZXRwcm9wKG5vZGUsIHBhdGgsICJsaW51eCx0Y2UtYmFzZSIsICZiYXNlLCBzaXplb2YoYmFzZSkpOworCQlwcm9tX3NldHByb3Aobm9kZSwgcGF0aCwgImxpbnV4LHRjZS1zaXplIiwgJm1pbnNpemUsIHNpemVvZihtaW5zaXplKSk7CisKIAkJcHJvbV9kZWJ1ZygiVENFIHRhYmxlOiAlc1xuIiwgcGF0aCk7CiAJCXByb21fZGVidWcoIlx0bm9kZSA9IDB4JXhcbiIsIG5vZGUpOwogCQlwcm9tX2RlYnVnKCJcdGJhc2UgPSAweCV4XG4iLCBiYXNlKTsKQEAgLTEzNDIsNiArMTQwNyw3IEBACiAvKgogICogRm9yIHJlYWxseSBvbGQgcG93ZXJtYWNzLCB3ZSBuZWVkIHRvIG1hcCB0aGluZ3Mgd2UgY2xhaW0uCiAgKiBGb3IgdGhhdCwgd2UgbmVlZCB0aGUgaWhhbmRsZSBvZiB0aGUgbW11LgorICogQWxzbywgb24gdGhlIGxvbmd0cmFpbCwgd2UgbmVlZCB0byB3b3JrIGFyb3VuZCBvdGhlciBidWdzLgogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgcHJvbV9maW5kX21tdSh2b2lkKQogewpAQCAtMTM1NSwxMiArMTQyMSwxOSBAQAogCWlmIChwcm9tX2dldHByb3Aob3Byb20sICJtb2RlbCIsIHZlcnNpb24sIHNpemVvZih2ZXJzaW9uKSkgPD0gMCkKIAkJcmV0dXJuOwogCXZlcnNpb25bc2l6ZW9mKHZlcnNpb24pIC0gMV0gPSAwOwotCXByb21fcHJpbnRmKCJPRiB2ZXJzaW9uIGlzICclcydcbiIsIHZlcnNpb24pOwogCS8qIFhYWCBtaWdodCBuZWVkIHRvIGFkZCBvdGhlciB2ZXJzaW9ucyBoZXJlICovCi0JaWYgKHN0cmNtcCh2ZXJzaW9uLCAiT3BlbiBGaXJtd2FyZSwgMS4wLjUiKSAhPSAwKQorCWlmIChzdHJjbXAodmVyc2lvbiwgIk9wZW4gRmlybXdhcmUsIDEuMC41IikgPT0gMCkKKwkJb2Zfd29ya2Fyb3VuZHMgPSBPRl9XQV9DTEFJTTsKKwllbHNlIGlmIChzdHJuY21wKHZlcnNpb24sICJGaXJtV29ya3MsMy4iLCAxMikgPT0gMCkgeworCQlvZl93b3JrYXJvdW5kcyA9IE9GX1dBX0NMQUlNIHwgT0ZfV0FfTE9OR1RSQUlMOworCQljYWxsX3Byb20oImludGVycHJldCIsIDEsIDEsICJkZXYgL21lbW9yeSAwIHRvIGFsbG93LXJlY2xhaW0iKTsKKwl9IGVsc2UKIAkJcmV0dXJuOworCV9wcm9tLT5tZW1vcnkgPSBjYWxsX3Byb20oIm9wZW4iLCAxLCAxLCBBRERSKCIvbWVtb3J5IikpOwogCXByb21fZ2V0cHJvcChfcHJvbS0+Y2hvc2VuLCAibW11IiwgJl9wcm9tLT5tbXVtYXAsCiAJCSAgICAgc2l6ZW9mKF9wcm9tLT5tbXVtYXApKTsKKwlpZiAoIUlIQU5ETEVfVkFMSUQoX3Byb20tPm1lbW9yeSkgfHwgIUlIQU5ETEVfVkFMSUQoX3Byb20tPm1tdW1hcCkpCisJCW9mX3dvcmthcm91bmRzICY9IH5PRl9XQV9DTEFJTTsJCS8qIGhtbW0gKi8KIH0KICNlbHNlCiAjZGVmaW5lIHByb21fZmluZF9tbXUoKQpAQCAtMTM4MiwxNiArMTQ1NSwxNyBAQAogCW1lbXNldChwYXRoLCAwLCAyNTYpOwogCWNhbGxfcHJvbSgiaW5zdGFuY2UtdG8tcGF0aCIsIDMsIDEsIF9wcm9tLT5zdGRvdXQsIHBhdGgsIDI1NSk7CiAJdmFsID0gY2FsbF9wcm9tKCJpbnN0YW5jZS10by1wYWNrYWdlIiwgMSwgMSwgX3Byb20tPnN0ZG91dCk7Ci0JcHJvbV9zZXRwcm9wKF9wcm9tLT5jaG9zZW4sICJsaW51eCxzdGRvdXQtcGFja2FnZSIsICZ2YWwsIHNpemVvZih2YWwpKTsKKwlwcm9tX3NldHByb3AoX3Byb20tPmNob3NlbiwgIi9jaG9zZW4iLCAibGludXgsc3Rkb3V0LXBhY2thZ2UiLAorCQkgICAgICZ2YWwsIHNpemVvZih2YWwpKTsKIAlwcm9tX3ByaW50ZigiT0Ygc3Rkb3V0IGRldmljZSBpczogJXNcbiIsIFJFTE9DKG9mX3N0ZG91dF9kZXZpY2UpKTsKLQlwcm9tX3NldHByb3AoX3Byb20tPmNob3NlbiwgImxpbnV4LHN0ZG91dC1wYXRoIiwKLQkJICAgICBSRUxPQyhvZl9zdGRvdXRfZGV2aWNlKSwgc3RybGVuKFJFTE9DKG9mX3N0ZG91dF9kZXZpY2UpKSsxKTsKKwlwcm9tX3NldHByb3AoX3Byb20tPmNob3NlbiwgIi9jaG9zZW4iLCAibGludXgsc3Rkb3V0LXBhdGgiLAorCQkgICAgIHBhdGgsIHN0cmxlbihwYXRoKSArIDEpOwogCiAJLyogSWYgaXQncyBhIGRpc3BsYXksIG5vdGUgaXQgKi8KIAltZW1zZXQodHlwZSwgMCwgc2l6ZW9mKHR5cGUpKTsKIAlwcm9tX2dldHByb3AodmFsLCAiZGV2aWNlX3R5cGUiLCB0eXBlLCBzaXplb2YodHlwZSkpOwogCWlmIChzdHJjbXAodHlwZSwgUkVMT0MoImRpc3BsYXkiKSkgPT0gMCkKLQkJcHJvbV9zZXRwcm9wKHZhbCwgImxpbnV4LGJvb3QtZGlzcGxheSIsIE5VTEwsIDApOworCQlwcm9tX3NldHByb3AodmFsLCBwYXRoLCAibGludXgsYm9vdC1kaXNwbGF5IiwgTlVMTCwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwcm9tX2Nsb3NlX3N0ZGluKHZvaWQpCkBAIC0xNTE0LDcgKzE1ODgsNyBAQAogCiAJCS8qIFN1Y2Nlc3MgKi8KIAkJcHJvbV9wcmludGYoImRvbmVcbiIpOwotCQlwcm9tX3NldHByb3Aobm9kZSwgImxpbnV4LG9wZW5lZCIsIE5VTEwsIDApOworCQlwcm9tX3NldHByb3Aobm9kZSwgcGF0aCwgImxpbnV4LG9wZW5lZCIsIE5VTEwsIDApOwogCiAJCS8qIFNldHVwIGEgdXNhYmxlIGNvbG9yIHRhYmxlIHdoZW4gdGhlIGFwcHJvcHJpYXRlCiAJCSAqIG1ldGhvZCBpcyBhdmFpbGFibGUuIFNob3VsZCB1cGRhdGUgdGhpcyB0byBzZXQtY29sb3JzICovCkBAIC0xODg0LDkgKzE5NTgsMTEgQEAKIAkvKiBpbnRlcnJ1cHQgb24gdGhpcyByZXZpc2lvbiBvZiB1MyBpcyBudW1iZXIgMCBhbmQgbGV2ZWwgKi8KIAlpbnRlcnJ1cHRzWzBdID0gMDsKIAlpbnRlcnJ1cHRzWzFdID0gMTsKLQlwcm9tX3NldHByb3AoaTJjLCAiaW50ZXJydXB0cyIsICZpbnRlcnJ1cHRzLCBzaXplb2YoaW50ZXJydXB0cykpOworCXByb21fc2V0cHJvcChpMmMsICIvdTNAMCxmODAwMDAwMC9pMmNAZjgwMDEwMDAiLCAiaW50ZXJydXB0cyIsCisJCSAgICAgJmludGVycnVwdHMsIHNpemVvZihpbnRlcnJ1cHRzKSk7CiAJcGFyZW50ID0gKHUzMiltcGljOwotCXByb21fc2V0cHJvcChpMmMsICJpbnRlcnJ1cHQtcGFyZW50IiwgJnBhcmVudCwgc2l6ZW9mKHBhcmVudCkpOworCXByb21fc2V0cHJvcChpMmMsICIvdTNAMCxmODAwMDAwMC9pMmNAZjgwMDEwMDAiLCAiaW50ZXJydXB0LXBhcmVudCIsCisJCSAgICAgJnBhcmVudCwgc2l6ZW9mKHBhcmVudCkpOwogI2VuZGlmCiB9CiAKQEAgLTE5MjIsMTEgKzE5OTgsMTEgQEAKIAkJUkVMT0MocHJvbV9pbml0cmRfZW5kKSA9IFJFTE9DKHByb21faW5pdHJkX3N0YXJ0KSArIHI0OwogCiAJCXZhbCA9IFJFTE9DKHByb21faW5pdHJkX3N0YXJ0KTsKLQkJcHJvbV9zZXRwcm9wKF9wcm9tLT5jaG9zZW4sICJsaW51eCxpbml0cmQtc3RhcnQiLCAmdmFsLAotCQkJICAgICBzaXplb2YodmFsKSk7CisJCXByb21fc2V0cHJvcChfcHJvbS0+Y2hvc2VuLCAiL2Nob3NlbiIsICJsaW51eCxpbml0cmQtc3RhcnQiLAorCQkJICAgICAmdmFsLCBzaXplb2YodmFsKSk7CiAJCXZhbCA9IFJFTE9DKHByb21faW5pdHJkX2VuZCk7Ci0JCXByb21fc2V0cHJvcChfcHJvbS0+Y2hvc2VuLCAibGludXgsaW5pdHJkLWVuZCIsICZ2YWwsCi0JCQkgICAgIHNpemVvZih2YWwpKTsKKwkJcHJvbV9zZXRwcm9wKF9wcm9tLT5jaG9zZW4sICIvY2hvc2VuIiwgImxpbnV4LGluaXRyZC1lbmQiLAorCQkJICAgICAmdmFsLCBzaXplb2YodmFsKSk7CiAKIAkJcmVzZXJ2ZV9tZW0oUkVMT0MocHJvbV9pbml0cmRfc3RhcnQpLAogCQkJICAgIFJFTE9DKHByb21faW5pdHJkX2VuZCkgLSBSRUxPQyhwcm9tX2luaXRyZF9zdGFydCkpOwpAQCAtMTk2OSwxNiArMjA0NSwxNyBAQAogCXByb21faW5pdF9jbGllbnRfc2VydmljZXMocHApOwogCiAJLyoKKwkgKiBTZWUgaWYgdGhpcyBPRiBpcyBvbGQgZW5vdWdoIHRoYXQgd2UgbmVlZCB0byBkbyBleHBsaWNpdCBtYXBzCisJICogYW5kIG90aGVyIHdvcmthcm91bmRzCisJICovCisJcHJvbV9maW5kX21tdSgpOworCisJLyoKIAkgKiBJbml0IHByb20gc3Rkb3V0IGRldmljZQogCSAqLwogCXByb21faW5pdF9zdGRvdXQoKTsKIAogCS8qCi0JICogU2VlIGlmIHRoaXMgT0YgaXMgb2xkIGVub3VnaCB0aGF0IHdlIG5lZWQgdG8gZG8gZXhwbGljaXQgbWFwcwotCSAqLwotCXByb21fZmluZF9tbXUoKTsKLQotCS8qCiAJICogQ2hlY2sgZm9yIGFuIGluaXRyZAogCSAqLwogCXByb21fY2hlY2tfaW5pdHJkKHIzLCByNCk7CkBAIC0xOTg5LDE0ICsyMDY2LDE1IEBACiAJICovCiAJUkVMT0Mob2ZfcGxhdGZvcm0pID0gcHJvbV9maW5kX21hY2hpbmVfdHlwZSgpOwogCWdldHByb3BfcnZhbCA9IFJFTE9DKG9mX3BsYXRmb3JtKTsKLQlwcm9tX3NldHByb3AoX3Byb20tPmNob3NlbiwgImxpbnV4LHBsYXRmb3JtIiwKKwlwcm9tX3NldHByb3AoX3Byb20tPmNob3NlbiwgIi9jaG9zZW4iLCAibGludXgscGxhdGZvcm0iLAogCQkgICAgICZnZXRwcm9wX3J2YWwsIHNpemVvZihnZXRwcm9wX3J2YWwpKTsKIAogI2lmZGVmIENPTkZJR19QUENfUFNFUklFUwogCS8qCiAJICogT24gcFNlcmllcywgaW5mb3JtIHRoZSBmaXJtd2FyZSBhYm91dCBvdXIgY2FwYWJpbGl0aWVzCiAJICovCi0JaWYgKFJFTE9DKG9mX3BsYXRmb3JtKSAmIFBMQVRGT1JNX1BTRVJJRVMpCisJaWYgKFJFTE9DKG9mX3BsYXRmb3JtKSA9PSBQTEFURk9STV9QU0VSSUVTIHx8CisJICAgIFJFTE9DKG9mX3BsYXRmb3JtKSA9PSBQTEFURk9STV9QU0VSSUVTX0xQQVIpCiAJCXByb21fc2VuZF9jYXBhYmlsaXRpZXMoKTsKICNlbmRpZgogCkBAIC0yMDUwLDIxICsyMTI4LDIzIEBACiAJICogRmlsbCBpbiBzb21lIGluZm9zIGZvciB1c2UgYnkgdGhlIGtlcm5lbCBsYXRlciBvbgogCSAqLwogCWlmIChSRUxPQyhwcm9tX21lbW9yeV9saW1pdCkpCi0JCXByb21fc2V0cHJvcChfcHJvbS0+Y2hvc2VuLCAibGludXgsbWVtb3J5LWxpbWl0IiwKKwkJcHJvbV9zZXRwcm9wKF9wcm9tLT5jaG9zZW4sICIvY2hvc2VuIiwgImxpbnV4LG1lbW9yeS1saW1pdCIsCiAJCQkgICAgICZSRUxPQyhwcm9tX21lbW9yeV9saW1pdCksCiAJCQkgICAgIHNpemVvZihwcm9tX21lbW9yeV9saW1pdCkpOwogI2lmZGVmIENPTkZJR19QUEM2NAogCWlmIChSRUxPQyhwcGM2NF9pb21tdV9vZmYpKQotCQlwcm9tX3NldHByb3AoX3Byb20tPmNob3NlbiwgImxpbnV4LGlvbW11LW9mZiIsIE5VTEwsIDApOworCQlwcm9tX3NldHByb3AoX3Byb20tPmNob3NlbiwgIi9jaG9zZW4iLCAibGludXgsaW9tbXUtb2ZmIiwKKwkJCSAgICAgTlVMTCwgMCk7CiAKIAlpZiAoUkVMT0MoaW9tbXVfZm9yY2Vfb24pKQotCQlwcm9tX3NldHByb3AoX3Byb20tPmNob3NlbiwgImxpbnV4LGlvbW11LWZvcmNlLW9uIiwgTlVMTCwgMCk7CisJCXByb21fc2V0cHJvcChfcHJvbS0+Y2hvc2VuLCAiL2Nob3NlbiIsICJsaW51eCxpb21tdS1mb3JjZS1vbiIsCisJCQkgICAgIE5VTEwsIDApOwogCiAJaWYgKFJFTE9DKHByb21fdGNlX2FsbG9jX3N0YXJ0KSkgewotCQlwcm9tX3NldHByb3AoX3Byb20tPmNob3NlbiwgImxpbnV4LHRjZS1hbGxvYy1zdGFydCIsCisJCXByb21fc2V0cHJvcChfcHJvbS0+Y2hvc2VuLCAiL2Nob3NlbiIsICJsaW51eCx0Y2UtYWxsb2Mtc3RhcnQiLAogCQkJICAgICAmUkVMT0MocHJvbV90Y2VfYWxsb2Nfc3RhcnQpLAogCQkJICAgICBzaXplb2YocHJvbV90Y2VfYWxsb2Nfc3RhcnQpKTsKLQkJcHJvbV9zZXRwcm9wKF9wcm9tLT5jaG9zZW4sICJsaW51eCx0Y2UtYWxsb2MtZW5kIiwKKwkJcHJvbV9zZXRwcm9wKF9wcm9tLT5jaG9zZW4sICIvY2hvc2VuIiwgImxpbnV4LHRjZS1hbGxvYy1lbmQiLAogCQkJICAgICAmUkVMT0MocHJvbV90Y2VfYWxsb2NfZW5kKSwKIAkJCSAgICAgc2l6ZW9mKHByb21fdGNlX2FsbG9jX2VuZCkpOwogCX0KQEAgLTIwODEsOCArMjE2MSwxMyBAQAogCXByb21fcHJpbnRmKCJjb3B5aW5nIE9GIGRldmljZSB0cmVlIC4uLlxuIik7CiAJZmxhdHRlbl9kZXZpY2VfdHJlZSgpOwogCi0JLyogaW4gY2FzZSBzdGRpbiBpcyBVU0IgYW5kIHN0aWxsIGFjdGl2ZSBvbiBJQk0gbWFjaGluZXMuLi4gKi8KLQlwcm9tX2Nsb3NlX3N0ZGluKCk7CisJLyoKKwkgKiBpbiBjYXNlIHN0ZGluIGlzIFVTQiBhbmQgc3RpbGwgYWN0aXZlIG9uIElCTSBtYWNoaW5lcy4uLgorCSAqIFVuZm9ydHVuYXRlbHkgcXVpZXNjZSBjcmFzaGVzIG9uIHNvbWUgcG93ZXJtYWNzIGlmIHdlIGhhdmUKKwkgKiBjbG9zZWQgc3RkaW4gYWxyZWFkeSAoaW4gcGFydGljdWxhciB0aGUgcG93ZXJib29rIDEwMSkuCisJICovCisJaWYgKFJFTE9DKG9mX3BsYXRmb3JtKSAhPSBQTEFURk9STV9QT1dFUk1BQykKKwkJcHJvbV9jbG9zZV9zdGRpbigpOwogCiAJLyoKIAkgKiBDYWxsIE9GICJxdWllc2NlIiBtZXRob2QgdG8gc2h1dCBkb3duIHBlbmRpbmcgRE1BJ3MgZnJvbQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLXByb2MuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy1wcm9jLmMKaW5kZXggNWJkZDViMC4uN2E5NWI4YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLXByb2MuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMtcHJvYy5jCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSA8YXNtL3J0YXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPiAvKiBmb3IgcHBjX21kICovCiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+CiAKIC8qIFRva2VuIGZvciBTZW5zb3JzICovCiAjZGVmaW5lIEtFWV9TV0lUQ0gJCTB4MDAwMQpAQCAtMjU5LDcgKzI1OCw3IEBACiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeTsKIAotCWlmICghKHN5c3RlbWNmZy0+cGxhdGZvcm0gJiBQTEFURk9STV9QU0VSSUVTKSkKKwlpZiAoX21hY2hpbmUgIT0gUExBVEZPUk1fUFNFUklFUyAmJiBfbWFjaGluZSAhPSBQTEFURk9STV9QU0VSSUVTX0xQQVIpCiAJCXJldHVybiAxOwogCiAJcnRhc19ub2RlID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgInJ0YXMiKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMKaW5kZXggOWQ0ZTA3Zi4uNDI4M2ZhMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMKQEAgLTI5LDkgKzI5LDYgQEAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9sbWIuaD4KLSNpZmRlZiBDT05GSUdfUFBDNjQKLSNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+Ci0jZW5kaWYKIAogc3RydWN0IHJ0YXNfdCBydGFzID0gewogCS5sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VECkBAIC02NzEsNyArNjY4LDcgQEAKIAkgKiB0aGUgc3RvcC1zZWxmIHRva2VuIGlmIGFueQogCSAqLwogI2lmZGVmIENPTkZJR19QUEM2NAotCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtID09IFBMQVRGT1JNX1BTRVJJRVNfTFBBUikKKwlpZiAoX21hY2hpbmUgPT0gUExBVEZPUk1fUFNFUklFU19MUEFSKQogCQlydGFzX3JlZ2lvbiA9IG1pbihsbWIucm1vX3NpemUsIFJUQVNfSU5TVEFOVElBVEVfTUFYKTsKICNlbmRpZgogCXJ0YXNfcm1vX2J1ZiA9IGxtYl9hbGxvY19iYXNlKFJUQVNfUk1PQlVGX01BWCwgUEFHRV9TSVpFLCBydGFzX3JlZ2lvbik7CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9ydGFzX3BjaS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzX3BjaS5jCnNpbWlsYXJpdHkgaW5kZXggOTIlCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3J0YXNfcGNpLmMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhc19wY2kuYwppbmRleCAzYzNmMTkxLi4wZTVhOGUxIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9ydGFzX3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhc19wY2kuYwpAQCAtNSwxOSArNSwxOSBAQAogICogQ29weXJpZ2h0IChDKSAyMDAzIEFudG9uIEJsYW5jaGFyZCA8YW50b25AYXUuaWJtLmNvbT4sIElCTQogICoKICAqIFJUQVMgc3BlY2lmaWMgcm91dGluZXMgZm9yIFBDSS4KLSAqIAorICoKICAqIEJhc2VkIG9uIGNvZGUgZnJvbSBwY2kuYywgY2hycF9wY2kuYyBhbmQgcFNlcmllc19wY2kuYwogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiAgICAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICogCisgKgogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKQEAgLTQ3LDcgKzQ3LDcgQEAKIHN0YXRpYyBpbnQgaWJtX3JlYWRfcGNpX2NvbmZpZzsKIHN0YXRpYyBpbnQgaWJtX3dyaXRlX3BjaV9jb25maWc7CiAKLXN0YXRpYyBpbnQgY29uZmlnX2FjY2Vzc192YWxpZChzdHJ1Y3QgcGNpX2RuICpkbiwgaW50IHdoZXJlKQorc3RhdGljIGlubGluZSBpbnQgY29uZmlnX2FjY2Vzc192YWxpZChzdHJ1Y3QgcGNpX2RuICpkbiwgaW50IHdoZXJlKQogewogCWlmICh3aGVyZSA8IDI1NikKIAkJcmV0dXJuIDE7CkBAIC03MiwxNiArNzIsMTQgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcnRhc19yZWFkX2NvbmZpZyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKnZhbCkKK3N0YXRpYyBpbnQgcnRhc19yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2RuICpwZG4sIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqdmFsKQogewogCWludCByZXR1cm52YWwgPSAtMTsKIAl1bnNpZ25lZCBsb25nIGJ1aWQsIGFkZHI7CiAJaW50IHJldDsKLQlzdHJ1Y3QgcGNpX2RuICpwZG47CiAKLQlpZiAoIWRuIHx8ICFkbi0+ZGF0YSkKKwlpZiAoIXBkbikKIAkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKLQlwZG4gPSBkbi0+ZGF0YTsKIAlpZiAoIWNvbmZpZ19hY2Nlc3NfdmFsaWQocGRuLCB3aGVyZSkpCiAJCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7CiAKQEAgLTkwLDcgKzg4LDcgQEAKIAlidWlkID0gcGRuLT5waGItPmJ1aWQ7CiAJaWYgKGJ1aWQpIHsKIAkJcmV0ID0gcnRhc19jYWxsKGlibV9yZWFkX3BjaV9jb25maWcsIDQsIDIsICZyZXR1cm52YWwsCi0JCQkJYWRkciwgYnVpZCA+PiAzMiwgYnVpZCAmIDB4ZmZmZmZmZmYsIHNpemUpOworCQkJCWFkZHIsIEJVSURfSEkoYnVpZCksIEJVSURfTE8oYnVpZCksIHNpemUpOwogCX0gZWxzZSB7CiAJCXJldCA9IHJ0YXNfY2FsbChyZWFkX3BjaV9jb25maWcsIDIsIDIsICZyZXR1cm52YWwsIGFkZHIsIHNpemUpOwogCX0KQEAgLTEwMCw3ICs5OCw3IEBACiAJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CiAKIAlpZiAocmV0dXJudmFsID09IEVFSF9JT19FUlJPUl9WQUxVRShzaXplKSAmJgotCSAgICBlZWhfZG5fY2hlY2tfZmFpbHVyZSAoZG4sIE5VTEwpKQorCSAgICBlZWhfZG5fY2hlY2tfZmFpbHVyZSAocGRuLT5ub2RlLCBOVUxMKSkKIAkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKIAogCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7CkBAIC0xMTgsMjMgKzExNiwyMyBAQAogCQlidXNkbiA9IGJ1cy0+c3lzZGF0YTsJLyogbXVzdCBiZSBhIHBoYiAqLwogCiAJLyogU2VhcmNoIG9ubHkgZGlyZWN0IGNoaWxkcmVuIG9mIHRoZSBidXMgKi8KLQlmb3IgKGRuID0gYnVzZG4tPmNoaWxkOyBkbjsgZG4gPSBkbi0+c2libGluZykKLQkJaWYgKGRuLT5kYXRhICYmIFBDSV9ETihkbiktPmRldmZuID09IGRldmZuCisJZm9yIChkbiA9IGJ1c2RuLT5jaGlsZDsgZG47IGRuID0gZG4tPnNpYmxpbmcpIHsKKwkJc3RydWN0IHBjaV9kbiAqcGRuID0gUENJX0ROKGRuKTsKKwkJaWYgKHBkbiAmJiBwZG4tPmRldmZuID09IGRldmZuCiAJCSAgICAmJiBvZl9kZXZpY2VfYXZhaWxhYmxlKGRuKSkKLQkJCXJldHVybiBydGFzX3JlYWRfY29uZmlnKGRuLCB3aGVyZSwgc2l6ZSwgdmFsKTsKKwkJCXJldHVybiBydGFzX3JlYWRfY29uZmlnKHBkbiwgd2hlcmUsIHNpemUsIHZhbCk7CisJfQogCiAJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKIH0KIAotaW50IHJ0YXNfd3JpdGVfY29uZmlnKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWwpCitpbnQgcnRhc193cml0ZV9jb25maWcoc3RydWN0IHBjaV9kbiAqcGRuLCBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgdmFsKQogewogCXVuc2lnbmVkIGxvbmcgYnVpZCwgYWRkcjsKIAlpbnQgcmV0OwotCXN0cnVjdCBwY2lfZG4gKnBkbjsKIAotCWlmICghZG4gfHwgIWRuLT5kYXRhKQorCWlmICghcGRuKQogCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCXBkbiA9IGRuLT5kYXRhOwogCWlmICghY29uZmlnX2FjY2Vzc192YWxpZChwZG4sIHdoZXJlKSkKIAkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsKIApAQCAtMTQyLDcgKzE0MCw4IEBACiAJCShwZG4tPmRldmZuIDw8IDgpIHwgKHdoZXJlICYgMHhmZik7CiAJYnVpZCA9IHBkbi0+cGhiLT5idWlkOwogCWlmIChidWlkKSB7Ci0JCXJldCA9IHJ0YXNfY2FsbChpYm1fd3JpdGVfcGNpX2NvbmZpZywgNSwgMSwgTlVMTCwgYWRkciwgYnVpZCA+PiAzMiwgYnVpZCAmIDB4ZmZmZmZmZmYsIHNpemUsICh1bG9uZykgdmFsKTsKKwkJcmV0ID0gcnRhc19jYWxsKGlibV93cml0ZV9wY2lfY29uZmlnLCA1LCAxLCBOVUxMLCBhZGRyLAorCQkJQlVJRF9ISShidWlkKSwgQlVJRF9MTyhidWlkKSwgc2l6ZSwgKHVsb25nKSB2YWwpOwogCX0gZWxzZSB7CiAJCXJldCA9IHJ0YXNfY2FsbCh3cml0ZV9wY2lfY29uZmlnLCAzLCAxLCBOVUxMLCBhZGRyLCBzaXplLCAodWxvbmcpdmFsKTsKIAl9CkBAIC0xNjUsMTAgKzE2NCwxMiBAQAogCQlidXNkbiA9IGJ1cy0+c3lzZGF0YTsJLyogbXVzdCBiZSBhIHBoYiAqLwogCiAJLyogU2VhcmNoIG9ubHkgZGlyZWN0IGNoaWxkcmVuIG9mIHRoZSBidXMgKi8KLQlmb3IgKGRuID0gYnVzZG4tPmNoaWxkOyBkbjsgZG4gPSBkbi0+c2libGluZykKLQkJaWYgKGRuLT5kYXRhICYmIFBDSV9ETihkbiktPmRldmZuID09IGRldmZuCisJZm9yIChkbiA9IGJ1c2RuLT5jaGlsZDsgZG47IGRuID0gZG4tPnNpYmxpbmcpIHsKKwkJc3RydWN0IHBjaV9kbiAqcGRuID0gUENJX0ROKGRuKTsKKwkJaWYgKHBkbiAmJiBwZG4tPmRldmZuID09IGRldmZuCiAJCSAgICAmJiBvZl9kZXZpY2VfYXZhaWxhYmxlKGRuKSkKLQkJCXJldHVybiBydGFzX3dyaXRlX2NvbmZpZyhkbiwgd2hlcmUsIHNpemUsIHZhbCk7CisJCQlyZXR1cm4gcnRhc193cml0ZV9jb25maWcocGRuLCB3aGVyZSwgc2l6ZSwgdmFsKTsKKwl9CiAJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKIH0KIApAQCAtMjIxLDcgKzIyMiw3IEBACiAJLyogUHl0aG9uJ3MgcmVnaXN0ZXIgZmlsZSBpcyAxIE1CIGluIHNpemUuICovCiAJY2hpcF9yZWdzID0gaW9yZW1hcChyZWdfc3RydWN0LmFkZHJlc3MgJiB+KDB4ZmZmZmZVTCksIDB4MTAwMDAwKTsKIAotCS8qIAorCS8qCiAJICogRmlybXdhcmUgZG9lc24ndCBhbHdheXMgY2xlYXIgdGhpcyBiaXQgd2hpY2ggaXMgY3JpdGljYWwKIAkgKiBmb3IgZ29vZCBwZXJmb3JtYW5jZSAtIEFudG9uCiAJICovCkBAIC0yOTIsNyArMjkzLDcgQEAKIAlpZiAoYnVzX3JhbmdlID09IE5VTEwgfHwgbGVuIDwgMiAqIHNpemVvZihpbnQpKSB7CiAJCXJldHVybiAxOwogIAl9Ci0gCisKIAlwaGItPmZpcnN0X2J1c25vID0gIGJ1c19yYW5nZVswXTsKIAlwaGItPmxhc3RfYnVzbm8gID0gIGJ1c19yYW5nZVsxXTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKaW5kZXggZTIyODU2ZS4uMzNlN2YyYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3Zkc29fZGF0YXBhZ2UuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KICNpbmNsdWRlIDxhc20vZWxmLmg+CkBAIC01MSw2ICs1Miw5IEBACiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+CiAjaW5jbHVkZSA8YXNtL2xtYi5oPgorI2luY2x1ZGUgPGFzbS94bW9uLmg+CisKKyNpbmNsdWRlICJzZXR1cC5oIgogCiAjdW5kZWYgREVCVUcKIApAQCAtNjAsNiArNjQsMTMgQEAKICNkZWZpbmUgREJHKGZtdC4uLikKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNCitpbnQgX21hY2hpbmUgPSAwOworRVhQT1JUX1NZTUJPTChfbWFjaGluZSk7CisjZW5kaWYKKwordW5zaWduZWQgbG9uZyBrbGltaXQgPSAodW5zaWduZWQgbG9uZykgX2VuZDsKKwogLyoKICAqIFRoaXMgc3RpbGwgc2VlbXMgdG8gYmUgbmVlZGVkLi4uIC0tIHBhdWx1cwogICovIApAQCAtNDMzLDEwICs0NDQsOCBAQAogCWlmIChpbml0cmRfc3RhcnQgPj0gS0VSTkVMQkFTRSAmJiBpbml0cmRfZW5kID49IEtFUk5FTEJBU0UgJiYKIAkgICAgaW5pdHJkX2VuZCA+IGluaXRyZF9zdGFydCkKIAkJUk9PVF9ERVYgPSBSb290X1JBTTA7Ci0JZWxzZSB7Ci0JCXByaW50aygiQm9ndXMgaW5pdHJkICUwOGx4ICUwOGx4XG4iLCBpbml0cmRfc3RhcnQsIGluaXRyZF9lbmQpOworCWVsc2UKIAkJaW5pdHJkX3N0YXJ0ID0gaW5pdHJkX2VuZCA9IDA7Ci0JfQogCiAJaWYgKGluaXRyZF9zdGFydCkKIAkJcHJpbnRrKCJGb3VuZCBpbml0cmQgYXQgMHglbHg6MHglbHhcbiIsIGluaXRyZF9zdGFydCwgaW5pdHJkX2VuZCk7CkBAIC01MTAsOCArNTE5LDggQEAKIAkgKiBPbiBwU2VyaWVzIExQQVIsIHdlIG5lZWQgdG8ga25vdyBob3cgbWFueSBjcHVzCiAJICogY291bGQgcG9zc2libHkgYmUgYWRkZWQgdG8gdGhpcyBwYXJ0aXRpb24uCiAJICovCi0JaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gPT0gUExBVEZPUk1fUFNFUklFU19MUEFSICYmCi0JCQkJKGRuID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9ydGFzIikpKSB7CisJaWYgKF9tYWNoaW5lID09IFBMQVRGT1JNX1BTRVJJRVNfTFBBUiAmJgorCSAgICAoZG4gPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL3J0YXMiKSkpIHsKIAkJaW50IG51bV9hZGRyX2NlbGwsIG51bV9zaXplX2NlbGwsIG1heGNwdXM7CiAJCXVuc2lnbmVkIGludCAqaXJlZzsKIApAQCAtNTU1LDcgKzU2NCwyNyBAQAogCQkJY3B1X3NldChjcHUgXiAweDEsIGNwdV9zaWJsaW5nX21hcFtjcHVdKTsKIAl9CiAKLQlzeXN0ZW1jZmctPnByb2Nlc3NvckNvdW50ID0gbnVtX3ByZXNlbnRfY3B1cygpOworCXZkc29fZGF0YS0+cHJvY2Vzc29yQ291bnQgPSBudW1fcHJlc2VudF9jcHVzKCk7CiAjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiB9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisjaWZkZWYgQ09ORklHX1hNT04KK3N0YXRpYyBpbnQgX19pbml0IGVhcmx5X3htb24oY2hhciAqcCkKK3sKKwkvKiBlbnN1cmUgeG1vbiBpcyBlbmFibGVkICovCisJaWYgKHApIHsKKwkJaWYgKHN0cm5jbXAocCwgIm9uIiwgMikgPT0gMCkKKwkJCXhtb25faW5pdCgxKTsKKwkJaWYgKHN0cm5jbXAocCwgIm9mZiIsIDMpID09IDApCisJCQl4bW9uX2luaXQoMCk7CisJCWlmIChzdHJuY21wKHAsICJlYXJseSIsIDUpICE9IDApCisJCQlyZXR1cm4gMDsKKwl9CisJeG1vbl9pbml0KDEpOworCWRlYnVnZ2VyKE5VTEwpOworCisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgieG1vbiIsIGVhcmx5X3htb24pOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLmggYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmViYmE3NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX1BPV0VSUENfS0VSTkVMX1NFVFVQX0gKKyNkZWZpbmUgX1BPV0VSUENfS0VSTkVMX1NFVFVQX0gKKwordm9pZCBjaGVja19mb3JfaW5pdHJkKHZvaWQpOworCisjZW5kaWYgLyogX1BPV0VSUENfS0VSTkVMX1NFVFVQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYwppbmRleCAzYWYyNjMxLi5jOThjZmNjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jCkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSA8YXNtL3htb24uaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgogCisjaW5jbHVkZSAic2V0dXAuaCIKKwogI2RlZmluZSBEQkcoZm10Li4uKQogCiAjaWYgZGVmaW5lZCBDT05GSUdfS0dEQgpAQCAtNzAsOCArNzIsNiBAQAogaW50IGhhdmVfb2YgPSAxOwogCiAjaWZkZWYgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNCi1pbnQgX21hY2hpbmUgPSAwOwotCiBleHRlcm4gdm9pZCBwcmVwX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBwbWFjX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBjaHJwX2luaXQodm9pZCk7CkBAIC0yNzksNyArMjc5LDYgQEAKIC8qIFdhcm5pbmcsIElPIGJhc2UgaXMgbm90IHlldCBpbml0ZWQgKi8KIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcCkKIHsKLQlleHRlcm4gY2hhciAqa2xpbWl0OwogCWV4dGVybiB2b2lkIGRvX2luaXRfYm9vdG1lbSh2b2lkKTsKIAogCS8qIHNvIHVkZWxheSBkb2VzIHNvbWV0aGluZyBzZW5zaWJsZSwgYXNzdW1lIDw9IDEwMDAgYm9nb21pcHMgKi8KQEAgLTMwMywxNCArMzAyLDkgQEAKIAkJcG1hY19mZWF0dXJlX2luaXQoKTsJLyogTmV3IGNvb2wgd2F5ICovCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19YTU9OCi0JeG1vbl9tYXBfc2NjKCk7Ci0JaWYgKHN0cnN0cihjbWRfbGluZSwgInhtb24iKSkgewotCQl4bW9uX2luaXQoMSk7Ci0JCWRlYnVnZ2VyKE5VTEwpOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfWE1PTiAqLwotCWlmICggcHBjX21kLnByb2dyZXNzICkgcHBjX21kLnByb2dyZXNzKCJzZXR1cF9hcmNoOiBlbnRlciIsIDB4M2VhYik7CisjaWZkZWYgQ09ORklHX1hNT05fREVGQVVMVAorCXhtb25faW5pdCgxKTsKKyNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfS0dEQikKIAlpZiAocHBjX21kLmtnZGJfbWFwX3NjYykKQEAgLTM0Myw3ICszMzcsNyBAQAogCWluaXRfbW0uc3RhcnRfY29kZSA9IFBBR0VfT0ZGU0VUOwogCWluaXRfbW0uZW5kX2NvZGUgPSAodW5zaWduZWQgbG9uZykgX2V0ZXh0OwogCWluaXRfbW0uZW5kX2RhdGEgPSAodW5zaWduZWQgbG9uZykgX2VkYXRhOwotCWluaXRfbW0uYnJrID0gKHVuc2lnbmVkIGxvbmcpIGtsaW1pdDsKKwlpbml0X21tLmJyayA9IGtsaW1pdDsKIAogCS8qIFNhdmUgdW5wYXJzZWQgY29tbWFuZCBsaW5lIGNvcHkgZm9yIC9wcm9jL2NtZGxpbmUgKi8KIAlzdHJsY3B5KHNhdmVkX2NvbW1hbmRfbGluZSwgY21kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYwppbmRleCAwNDcxZTg0Li5mZGJkOWY5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCkBAIC01NywxMCArNTcsMTEgQEAKICNpbmNsdWRlIDxhc20vbG1iLmg+CiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaXRfbHBfbmFjYS5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1jZmcuaD4KICNpbmNsdWRlIDxhc20veG1vbi5oPgogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CiAKKyNpbmNsdWRlICJzZXR1cC5oIgorCiAjaWZkZWYgREVCVUcKICNkZWZpbmUgREJHKGZtdC4uLikgdWRiZ19wcmludGYoZm10KQogI2Vsc2UKQEAgLTk0LDE1ICs5NSw2IEBACiAJZG8geyB1ZGJnX3B1dGMgPSBjYWxsX3J0YXNfZGlzcGxheV9zdGF0dXNfZGVsYXk7IH0gd2hpbGUoMCkKICNlbmRpZgogCi0vKiBleHRlcm4gdm9pZCAqc3RhYjsgKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIGtsaW1pdDsKLQotZXh0ZXJuIHZvaWQgbW1faW5pdF9wcGM2NCh2b2lkKTsKLWV4dGVybiB2b2lkIHN0YWJfaW5pdGlhbGl6ZSh1bnNpZ25lZCBsb25nIHN0YWIpOwotZXh0ZXJuIHZvaWQgaHRhYl9pbml0aWFsaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9kZXZ0cmVlKHZvaWQgKmZsYXRfZHQpOwotZXh0ZXJuIHZvaWQgdW5mbGF0dGVuX2RldmljZV90cmVlKHZvaWQpOwotCiBpbnQgaGF2ZV9vZiA9IDE7CiBpbnQgYm9vdF9jcHVpZCA9IDA7CiBpbnQgYm9vdF9jcHVpZF9waHlzID0gMDsKQEAgLTI1NCwxMSArMjQ2LDEwIEBACiAJICogSXRlcmF0ZSBhbGwgcHBjX21kIHN0cnVjdHVyZXMgdW50aWwgd2UgZmluZCB0aGUgcHJvcGVyCiAJICogb25lIGZvciB0aGUgY3VycmVudCBtYWNoaW5lIHR5cGUKIAkgKi8KLQlEQkcoIlByb2JpbmcgbWFjaGluZSB0eXBlIGZvciBwbGF0Zm9ybSAleC4uLlxuIiwKLQkgICAgc3lzdGVtY2ZnLT5wbGF0Zm9ybSk7CisJREJHKCJQcm9iaW5nIG1hY2hpbmUgdHlwZSBmb3IgcGxhdGZvcm0gJXguLi5cbiIsIF9tYWNoaW5lKTsKIAogCWZvciAobWFjaCA9IG1hY2hpbmVzOyAqbWFjaDsgbWFjaCsrKSB7Ci0JCWlmICgoKm1hY2gpLT5wcm9iZShzeXN0ZW1jZmctPnBsYXRmb3JtKSkKKwkJaWYgKCgqbWFjaCktPnByb2JlKF9tYWNoaW5lKSkKIAkJCWJyZWFrOwogCX0KIAkvKiBXaGF0IGNhbiB3ZSBkbyBpZiB3ZSBkaWRuJ3QgZmluZCA/ICovCkBAIC0yOTAsNiArMjgxLDI4IEBACiAJREJHKCIgPC0gZWFybHlfc2V0dXAoKVxuIik7CiB9CiAKKyNpZmRlZiBDT05GSUdfU01QCit2b2lkIGVhcmx5X3NldHVwX3NlY29uZGFyeSh2b2lkKQoreworCXN0cnVjdCBwYWNhX3N0cnVjdCAqbHBhY2EgPSBnZXRfcGFjYSgpOworCisJLyogTWFyayBlbmFibGVkIGluIFBBQ0EgKi8KKwlscGFjYS0+cHJvY19lbmFibGVkID0gMDsKKworCS8qIEluaXRpYWxpemUgaGFzaCB0YWJsZSBmb3IgdGhhdCBDUFUgKi8KKwlodGFiX2luaXRpYWxpemVfc2Vjb25kYXJ5KCk7CisKKwkvKiBJbml0aWFsaXplIFNUQUIvU0xCLiBXZSB1c2UgYSB2aXJ0dWFsIGFkZHJlc3MgYXMgaXQgd29ya3MKKwkgKiBpbiByZWFsIG1vZGUgb24gcFNlcmllcyBhbmQgd2Ugd2FudCBhIHZpcnV0YWwgYWRkcmVzcyBvbgorCSAqIGlTZXJpZXMgYW55d2F5CisJICovCisJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1NMQikpCisJCXNsYl9pbml0aWFsaXplKCk7CisJZWxzZQorCQlzdGFiX2luaXRpYWxpemUobHBhY2EtPnN0YWJfYWRkcik7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX0tFWEVDKQogdm9pZCBzbXBfcmVsZWFzZV9jcHVzKHZvaWQpCkBAIC0zMTUsNyArMzI4LDggQEAKICNlbmRpZiAvKiBDT05GSUdfU01QIHx8IENPTkZJR19LRVhFQyAqLwogCiAvKgotICogSW5pdGlhbGl6ZSBzb21lIHJlbWFpbmluZyBtZW1iZXJzIG9mIHRoZSBwcGM2NF9jYWNoZXMgYW5kIHN5c3RlbWNmZyBzdHJ1Y3R1cmVzCisgKiBJbml0aWFsaXplIHNvbWUgcmVtYWluaW5nIG1lbWJlcnMgb2YgdGhlIHBwYzY0X2NhY2hlcyBhbmQgc3lzdGVtY2ZnCisgKiBzdHJ1Y3R1cmVzCiAgKiAoYXQgbGVhc3QgdW50aWwgd2UgZ2V0IHJpZCBvZiB0aGVtIGNvbXBsZXRlbHkpLiBUaGlzIGlzIG1vc3RseSBzb21lCiAgKiBjYWNoZSBpbmZvcm1hdGlvbnMgYWJvdXQgdGhlIENQVSB0aGF0IHdpbGwgYmUgdXNlZCBieSBjYWNoZSBmbHVzaAogICogcm91dGluZXMgYW5kL29yIHByb3ZpZGVkIHRvIHVzZXJsYW5kCkBAIC0zNDAsNyArMzU0LDcgQEAKIAkJCWNvbnN0IGNoYXIgKmRjLCAqaWM7CiAKIAkJCS8qIFRoZW4gcmVhZCBjYWNoZSBpbmZvcm1hdGlvbnMgKi8KLQkJCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtID09IFBMQVRGT1JNX1BPV0VSTUFDKSB7CisJCQlpZiAoX21hY2hpbmUgPT0gUExBVEZPUk1fUE9XRVJNQUMpIHsKIAkJCQlkYyA9ICJkLWNhY2hlLWJsb2NrLXNpemUiOwogCQkJCWljID0gImktY2FjaGUtYmxvY2stc2l6ZSI7CiAJCQl9IGVsc2UgewpAQCAtMzYwLDkgKzM3NCw4IEBACiAJCQkJREJHKCJBcmdoLCBjYW4ndCBmaW5kIGRjYWNoZSBwcm9wZXJ0aWVzICEgIgogCQkJCSAgICAic2l6ZXA6ICVwLCBsc2l6ZXA6ICVwXG4iLCBzaXplcCwgbHNpemVwKTsKIAotCQkJc3lzdGVtY2ZnLT5kY2FjaGVfc2l6ZSA9IHBwYzY0X2NhY2hlcy5kc2l6ZSA9IHNpemU7Ci0JCQlzeXN0ZW1jZmctPmRjYWNoZV9saW5lX3NpemUgPQotCQkJCXBwYzY0X2NhY2hlcy5kbGluZV9zaXplID0gbHNpemU7CisJCQlwcGM2NF9jYWNoZXMuZHNpemUgPSBzaXplOworCQkJcHBjNjRfY2FjaGVzLmRsaW5lX3NpemUgPSBsc2l6ZTsKIAkJCXBwYzY0X2NhY2hlcy5sb2dfZGxpbmVfc2l6ZSA9IF9faWxvZzIobHNpemUpOwogCQkJcHBjNjRfY2FjaGVzLmRsaW5lc19wZXJfcGFnZSA9IFBBR0VfU0laRSAvIGxzaXplOwogCkBAIC0zNzgsMjAgKzM5MSwxMyBAQAogCQkJCURCRygiQXJnaCwgY2FuJ3QgZmluZCBpY2FjaGUgcHJvcGVydGllcyAhICIKIAkJCQkgICAgInNpemVwOiAlcCwgbHNpemVwOiAlcFxuIiwgc2l6ZXAsIGxzaXplcCk7CiAKLQkJCXN5c3RlbWNmZy0+aWNhY2hlX3NpemUgPSBwcGM2NF9jYWNoZXMuaXNpemUgPSBzaXplOwotCQkJc3lzdGVtY2ZnLT5pY2FjaGVfbGluZV9zaXplID0KLQkJCQlwcGM2NF9jYWNoZXMuaWxpbmVfc2l6ZSA9IGxzaXplOworCQkJcHBjNjRfY2FjaGVzLmlzaXplID0gc2l6ZTsKKwkJCXBwYzY0X2NhY2hlcy5pbGluZV9zaXplID0gbHNpemU7CiAJCQlwcGM2NF9jYWNoZXMubG9nX2lsaW5lX3NpemUgPSBfX2lsb2cyKGxzaXplKTsKIAkJCXBwYzY0X2NhY2hlcy5pbGluZXNfcGVyX3BhZ2UgPSBQQUdFX1NJWkUgLyBsc2l6ZTsKIAkJfQogCX0KIAotCS8qIEFkZCBhbiBleWUgY2F0Y2hlciBhbmQgdGhlIHN5c3RlbWNmZyBsYXlvdXQgdmVyc2lvbiBudW1iZXIgKi8KLQlzdHJjcHkoc3lzdGVtY2ZnLT5leWVfY2F0Y2hlciwgIlNZU1RFTUNGRzpQUEM2NCIpOwotCXN5c3RlbWNmZy0+dmVyc2lvbi5tYWpvciA9IFNZU1RFTUNGR19NQUpPUjsKLQlzeXN0ZW1jZmctPnZlcnNpb24ubWlub3IgPSBTWVNURU1DRkdfTUlOT1I7Ci0Jc3lzdGVtY2ZnLT5wcm9jZXNzb3IgPSBtZnNwcihTUFJOX1BWUik7Ci0KIAlEQkcoIiA8LSBpbml0aWFsaXplX2NhY2hlX2luZm8oKVxuIik7CiB9CiAKQEAgLTQ3OCwxNSArNDg0LDE0IEBACiAKIAlwcmludGsoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAlwcmludGsoInBwYzY0X3BmdF9zaXplICAgICAgICAgICAgICAgID0gMHglbHhcbiIsIHBwYzY0X3BmdF9zaXplKTsKLQlwcmludGsoInBwYzY0X2ludGVycnVwdF9jb250cm9sbGVyICAgID0gMHglbGRcbiIsIHBwYzY0X2ludGVycnVwdF9jb250cm9sbGVyKTsKLQlwcmludGsoInN5c3RlbWNmZyAgICAgICAgICAgICAgICAgICAgID0gMHglcFxuIiwgc3lzdGVtY2ZnKTsKLQlwcmludGsoInN5c3RlbWNmZy0+cGxhdGZvcm0gICAgICAgICAgID0gMHgleFxuIiwgc3lzdGVtY2ZnLT5wbGF0Zm9ybSk7Ci0JcHJpbnRrKCJzeXN0ZW1jZmctPnByb2Nlc3NvckNvdW50ICAgICA9IDB4JWx4XG4iLCBzeXN0ZW1jZmctPnByb2Nlc3NvckNvdW50KTsKLQlwcmludGsoInN5c3RlbWNmZy0+cGh5c2ljYWxNZW1vcnlTaXplID0gMHglbHhcbiIsIHN5c3RlbWNmZy0+cGh5c2ljYWxNZW1vcnlTaXplKTsKKwlwcmludGsoInBwYzY0X2ludGVycnVwdF9jb250cm9sbGVyICAgID0gMHglbGRcbiIsCisJICAgICAgIHBwYzY0X2ludGVycnVwdF9jb250cm9sbGVyKTsKKwlwcmludGsoInBsYXRmb3JtICAgICAgICAgICAgICAgICAgICAgID0gMHgleFxuIiwgX21hY2hpbmUpOworCXByaW50aygicGh5c2ljYWxNZW1vcnlTaXplICAgICAgICAgICAgPSAweCVseFxuIiwgbG1iX3BoeXNfbWVtX3NpemUoKSk7CiAJcHJpbnRrKCJwcGM2NF9jYWNoZXMuZGNhY2hlX2xpbmVfc2l6ZSA9IDB4JXhcbiIsCi0JCQlwcGM2NF9jYWNoZXMuZGxpbmVfc2l6ZSk7CisJICAgICAgIHBwYzY0X2NhY2hlcy5kbGluZV9zaXplKTsKIAlwcmludGsoInBwYzY0X2NhY2hlcy5pY2FjaGVfbGluZV9zaXplID0gMHgleFxuIiwKLQkJCXBwYzY0X2NhY2hlcy5pbGluZV9zaXplKTsKKwkgICAgICAgcHBjNjRfY2FjaGVzLmlsaW5lX3NpemUpOwogCXByaW50aygiaHRhYl9hZGRyZXNzICAgICAgICAgICAgICAgICAgPSAweCVwXG4iLCBodGFiX2FkZHJlc3MpOwogCXByaW50aygiaHRhYl9oYXNoX21hc2sgICAgICAgICAgICAgICAgPSAweCVseFxuIiwgaHRhYl9oYXNoX21hc2spOwogCXByaW50aygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwpAQCAtNTUxLDMzICs1NTYsNiBAQAogfQogCiAvKgotICogQ2FsbGVkIGZyb20gc2V0dXBfYXJjaCB0byBpbml0aWFsaXplIHRoZSBiaXRtYXAgb2YgYXZhaWxhYmxlCi0gKiBzeXNjYWxscyBpbiB0aGUgc3lzdGVtY2ZnIHBhZ2UKLSAqLwotdm9pZCBfX2luaXQgc2V0dXBfc3lzY2FsbF9tYXAodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgaSwgY291bnQ2NCA9IDAsIGNvdW50MzIgPSAwOwotCWV4dGVybiB1bnNpZ25lZCBsb25nICpzeXNfY2FsbF90YWJsZTsKLQlleHRlcm4gdW5zaWduZWQgbG9uZyBzeXNfbmlfc3lzY2FsbDsKLQotCi0JZm9yIChpID0gMDsgaSA8IF9fTlJfc3lzY2FsbHM7IGkrKykgewotCQlpZiAoc3lzX2NhbGxfdGFibGVbaSoyXSAhPSBzeXNfbmlfc3lzY2FsbCkgewotCQkJY291bnQ2NCsrOwotCQkJc3lzdGVtY2ZnLT5zeXNjYWxsX21hcF82NFtpID4+IDVdIHw9Ci0JCQkJMHg4MDAwMDAwMFVMID4+IChpICYgMHgxZik7Ci0JCX0KLQkJaWYgKHN5c19jYWxsX3RhYmxlW2kqMisxXSAhPSBzeXNfbmlfc3lzY2FsbCkgewotCQkJY291bnQzMisrOwotCQkJc3lzdGVtY2ZnLT5zeXNjYWxsX21hcF8zMltpID4+IDVdIHw9Ci0JCQkJMHg4MDAwMDAwMFVMID4+IChpICYgMHgxZik7Ci0JCX0KLQl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiU3lzY2FsbCBtYXAgc2V0dXAsICVkIDMyLWJpdCBhbmQgJWQgNjQtYml0IHN5c2NhbGxzXG4iLAotCSAgICAgICBjb3VudDMyLCBjb3VudDY0KTsKLX0KLQotLyoKICAqIENhbGxlZCBpbnRvIGZyb20gc3RhcnRfa2VybmVsLCBhZnRlciBsb2NrX2tlcm5lbCBoYXMgYmVlbiBjYWxsZWQuCiAgKiBJbml0aWFsaXplcyBib290bWVtLCB3aGljaCBpcyB1bnNlZCB0byBtYW5hZ2UgcGFnZSBhbGxvY2F0aW9uIHVudGlsCiAgKiBtZW1faW5pdCBpcyBjYWxsZWQuCkBAIC02MTgsOSArNTk2LDYgQEAKIAlkb19pbml0X2Jvb3RtZW0oKTsKIAlzcGFyc2VfaW5pdCgpOwogCi0JLyogaW5pdGlhbGl6ZSB0aGUgc3lzY2FsbCBtYXAgaW4gc3lzdGVtY2ZnICovCi0Jc2V0dXBfc3lzY2FsbF9tYXAoKTsKLQogI2lmZGVmIENPTkZJR19EVU1NWV9DT05TT0xFCiAJY29uc3dpdGNocCA9ICZkdW1teV9jb247CiAjZW5kaWYKQEAgLTg1OCwyNiArODMzLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woY2hlY2tfbGVnYWN5X2lvcG9ydCk7CiAKLSNpZmRlZiBDT05GSUdfWE1PTgotc3RhdGljIGludCBfX2luaXQgZWFybHlfeG1vbihjaGFyICpwKQotewotCS8qIGVuc3VyZSB4bW9uIGlzIGVuYWJsZWQgKi8KLQlpZiAocCkgewotCQlpZiAoc3RybmNtcChwLCAib24iLCAyKSA9PSAwKQotCQkJeG1vbl9pbml0KDEpOwotCQlpZiAoc3RybmNtcChwLCAib2ZmIiwgMykgPT0gMCkKLQkJCXhtb25faW5pdCgwKTsKLQkJaWYgKHN0cm5jbXAocCwgImVhcmx5IiwgNSkgIT0gMCkKLQkJCXJldHVybiAwOwotCX0KLQl4bW9uX2luaXQoMSk7Ci0JZGVidWdnZXIoTlVMTCk7Ci0KLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJ4bW9uIiwgZWFybHlfeG1vbik7Ci0jZW5kaWYKLQogdm9pZCBjcHVfZGllKHZvaWQpCiB7CiAJaWYgKHBwY19tZC5jcHVfZGllKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMKaW5kZXggMDgxZDkzMS4uOGJkZjk1YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jCkBAIC00MiwxMCArNDIsMTEgQEAKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS92ZHNvLmg+CiAjaWZkZWYgQ09ORklHX1BQQzY0CiAjaW5jbHVkZSAicHBjMzIuaCIKICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0jaW5jbHVkZSA8YXNtL3Zkc28uaD4KICNlbHNlCiAjaW5jbHVkZSA8YXNtL3Vjb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTgwOCwxNCArODA5LDExIEBACiAKIAkvKiBTYXZlIHVzZXIgcmVnaXN0ZXJzIG9uIHRoZSBzdGFjayAqLwogCWZyYW1lID0gJnJ0X3NmLT51Yy51Y19tY29udGV4dDsKLSNpZmRlZiBDT05GSUdfUFBDNjQKIAlpZiAodmRzbzMyX3J0X3NpZ3RyYW1wICYmIGN1cnJlbnQtPnRocmVhZC52ZHNvX2Jhc2UpIHsKIAkJaWYgKHNhdmVfdXNlcl9yZWdzKHJlZ3MsIGZyYW1lLCAwKSkKIAkJCWdvdG8gYmFkZnJhbWU7CiAJCXJlZ3MtPmxpbmsgPSBjdXJyZW50LT50aHJlYWQudmRzb19iYXNlICsgdmRzbzMyX3J0X3NpZ3RyYW1wOwotCX0gZWxzZQotI2VuZGlmCi0JeworCX0gZWxzZSB7CiAJCWlmIChzYXZlX3VzZXJfcmVncyhyZWdzLCBmcmFtZSwgX19OUl9ydF9zaWdyZXR1cm4pKQogCQkJZ290byBiYWRmcmFtZTsKIAkJcmVncy0+bGluayA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZS0+dHJhbXA7CkBAIC0xMDg5LDE0ICsxMDg3LDExIEBACiAJICAgIHx8IF9fcHV0X3VzZXIoc2lnLCAmc2MtPnNpZ25hbCkpCiAJCWdvdG8gYmFkZnJhbWU7CiAKLSNpZmRlZiBDT05GSUdfUFBDNjQKIAlpZiAodmRzbzMyX3NpZ3RyYW1wICYmIGN1cnJlbnQtPnRocmVhZC52ZHNvX2Jhc2UpIHsKIAkJaWYgKHNhdmVfdXNlcl9yZWdzKHJlZ3MsICZmcmFtZS0+bWN0eCwgMCkpCiAJCQlnb3RvIGJhZGZyYW1lOwogCQlyZWdzLT5saW5rID0gY3VycmVudC0+dGhyZWFkLnZkc29fYmFzZSArIHZkc28zMl9zaWd0cmFtcDsKLQl9IGVsc2UKLSNlbmRpZgotCXsKKwl9IGVsc2UgewogCQlpZiAoc2F2ZV91c2VyX3JlZ3MocmVncywgJmZyYW1lLT5tY3R4LCBfX05SX3NpZ3JldHVybikpCiAJCQlnb3RvIGJhZGZyYW1lOwogCQlyZWdzLT5saW5rID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lLT5tY3R4LnRyYW1wOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMKaW5kZXggMzZkNjdhOC4uNjJkZmM1YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9tcGljLmg+CisjaW5jbHVkZSA8YXNtL3Zkc29fZGF0YXBhZ2UuaD4KICNpZmRlZiBDT05GSUdfUFBDNjQKICNpbmNsdWRlIDxhc20vcGFjYS5oPgogI2VuZGlmCkBAIC0zNjgsOSArMzY5LDExIEBACiAJaWYgKGNwdSA9PSBib290X2NwdWlkKQogCQlyZXR1cm4gLUVCVVNZOwogCi0Jc3lzdGVtY2ZnLT5wcm9jZXNzb3JDb3VudC0tOwogCWNwdV9jbGVhcihjcHUsIGNwdV9vbmxpbmVfbWFwKTsKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwl2ZHNvX2RhdGEtPnByb2Nlc3NvckNvdW50LS07CiAJZml4dXBfaXJxcyhjcHVfb25saW5lX21hcCk7CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzg4LDkgKzM5MSwxMSBAQAogCXdoaWxlICghY3B1X29ubGluZShjcHUpKQogCQljcHVfcmVsYXgoKTsKIAorI2lmZGVmIENPTkZJR19QUEM2NAogCWZpeHVwX2lycXMoY3B1X29ubGluZV9tYXApOwogCS8qIGNvdW50ZXIgdGhlIGlycSBkaXNhYmxlIGluIGZpeHVwX2lycXMgKi8KIAlsb2NhbF9pcnFfZW5hYmxlKCk7CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDE5LDcgKzQyNCw5IEBACiAJd2hpbGUgKF9fZ2V0X2NwdV92YXIoY3B1X3N0YXRlKSAhPSBDUFVfVVBfUFJFUEFSRSkKIAkJY3B1X3JlbGF4KCk7CiAKKyNpZmRlZiBDT05GSUdfUFBDNjQKIAlmbHVzaF90bGJfcGVuZGluZygpOworI2VuZGlmCiAJY3B1X3NldChjcHUsIGNwdV9vbmxpbmVfbWFwKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c19wcGMzMi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNfcHBjMzIuYwppbmRleCBhODIxMGVkLi45YzkyMWQxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c19wcGMzMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzX3BwYzMyLmMKQEAgLTUyLDcgKzUyLDYgQEAKICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+CiAjaW5jbHVkZSA8YXNtL3BwYy1wY2kuaD4KIAogLyogcmVhZGRpciAmIGdldGRlbnRzICovCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9zeXNmcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3N5c2ZzLmMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYwppbmRleCBlOTllYzYyLi4wZjBjM2E5IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9zeXNmcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9odmNhbGwuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1jZmcuaD4KICNpbmNsdWRlIDxhc20vcGFjYS5oPgogI2luY2x1ZGUgPGFzbS9scHBhY2EuaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgpAQCAtMjMyLDcgKzIzMSw3IEBACiAJCXN5c2Rldl9jcmVhdGVfZmlsZShzLCAmYXR0cl9wbWM3KTsKIAlpZiAoY3VyX2NwdV9zcGVjLT5udW1fcG1jcyA+PSA4KQogCQlzeXNkZXZfY3JlYXRlX2ZpbGUocywgJmF0dHJfcG1jOCk7Ci0gIAorCiAJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1NNVCkpCiAJCXN5c2Rldl9jcmVhdGVfZmlsZShzLCAmYXR0cl9wdXJyKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKaW5kZXggYTYyODJiNi4uMDcwYjRiNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKQEAgLTYyLDggKzYyLDggQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS92ZHNvX2RhdGFwYWdlLmg+CiAjaWZkZWYgQ09ORklHX1BQQzY0Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCkBAIC0yNjEsNyArMjYxLDYgQEAKIAlkb19ndG9kLnZhcnAgPSB0ZW1wX3ZhcnA7CiAJZG9fZ3RvZC52YXJfaWR4ID0gdGVtcF9pZHg7CiAKLSNpZmRlZiBDT05GSUdfUFBDNjQKIAkvKgogCSAqIHRiX3VwZGF0ZV9jb3VudCBpcyB1c2VkIHRvIGFsbG93IHRoZSB1c2Vyc3BhY2UgZ2V0dGltZW9mZGF5IGNvZGUKIAkgKiB0byBhc3N1cmUgaXRzZWxmIHRoYXQgaXQgc2VlcyBhIGNvbnNpc3RlbnQgdmlldyBvZiB0aGUgdGJfdG9feHMgYW5kCkBAIC0yNzEsMTQgKzI3MCwxNSBAQAogCSAqIHRiX3RvX3hzIGFuZCBzdGFtcF94c2VjIHZhbHVlcyBhcmUgY29uc2lzdGVudC4gIElmIG5vdCwgdGhlbiBpdAogCSAqIGxvb3BzIGJhY2sgYW5kIHJlYWRzIHRoZW0gYWdhaW4gdW50aWwgdGhpcyBjcml0ZXJpYSBpcyBtZXQuCiAJICovCi0JKysoc3lzdGVtY2ZnLT50Yl91cGRhdGVfY291bnQpOworCSsrKHZkc29fZGF0YS0+dGJfdXBkYXRlX2NvdW50KTsKIAlzbXBfd21iKCk7Ci0Jc3lzdGVtY2ZnLT50Yl9vcmlnX3N0YW1wID0gbmV3X3RiX3N0YW1wOwotCXN5c3RlbWNmZy0+c3RhbXBfeHNlYyA9IG5ld19zdGFtcF94c2VjOwotCXN5c3RlbWNmZy0+dGJfdG9feHMgPSBuZXdfdGJfdG9feHM7CisJdmRzb19kYXRhLT50Yl9vcmlnX3N0YW1wID0gbmV3X3RiX3N0YW1wOworCXZkc29fZGF0YS0+c3RhbXBfeHNlYyA9IG5ld19zdGFtcF94c2VjOworCXZkc29fZGF0YS0+dGJfdG9feHMgPSBuZXdfdGJfdG9feHM7CisJdmRzb19kYXRhLT53dG9tX2Nsb2NrX3NlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYzsKKwl2ZHNvX2RhdGEtPnd0b21fY2xvY2tfbnNlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X25zZWM7CiAJc21wX3dtYigpOwotCSsrKHN5c3RlbWNmZy0+dGJfdXBkYXRlX2NvdW50KTsKLSNlbmRpZgorCSsrKHZkc29fZGF0YS0+dGJfdXBkYXRlX2NvdW50KTsKIH0KIAogLyoKQEAgLTM1Nyw4ICszNTcsOCBAQAogCQkJCWRvX2d0b2QudGJfdGlja3NfcGVyX3NlYyA9IHRiX3RpY2tzX3Blcl9zZWM7CiAJCQkJdGJfdG9feHMgPSBkaXZyZXMucmVzdWx0X2xvdzsKIAkJCQlkb19ndG9kLnZhcnAtPnRiX3RvX3hzID0gdGJfdG9feHM7Ci0JCQkJc3lzdGVtY2ZnLT50Yl90aWNrc19wZXJfc2VjID0gdGJfdGlja3NfcGVyX3NlYzsKLQkJCQlzeXN0ZW1jZmctPnRiX3RvX3hzID0gdGJfdG9feHM7CisJCQkJdmRzb19kYXRhLT50Yl90aWNrc19wZXJfc2VjID0gdGJfdGlja3NfcGVyX3NlYzsKKwkJCQl2ZHNvX2RhdGEtPnRiX3RvX3hzID0gdGJfdG9feHM7CiAJCQl9CiAJCQllbHNlIHsKIAkJCQlwcmludGsoICJUaXRhbiByZWNhbGlicmF0ZTogRkFJTEVEIChkaWZmZXJlbmNlID4gNCBwZXJjZW50KVxuIgpAQCAtNDgzLDYgKzQ4Myw4IEBACiAJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSB0Yl90aWNrc19wZXJfamlmZnkgLyBtYXhfY3B1czsKIAl1bnNpZ25lZCBsb25nIHByZXZpb3VzX3RiID0gcGVyX2NwdShsYXN0X2ppZmZ5LCBib290X2NwdWlkKTsKIAorCS8qIG1ha2Ugc3VyZSB0YiA+IHBlcl9jcHUobGFzdF9qaWZmeSwgY3B1KSBmb3IgYWxsIGNwdXMgYWx3YXlzICovCisJcHJldmlvdXNfdGIgLT0gdGJfdGlja3NfcGVyX2ppZmZ5OwogCWZvcl9lYWNoX2NwdShpKSB7CiAJCWlmIChpICE9IGJvb3RfY3B1aWQpIHsKIAkJCXByZXZpb3VzX3RiICs9IG9mZnNldDsKQEAgLTU1OCwxMCArNTYwLDggQEAKIAluZXdfeHNlYyArPSAodTY0KW5ld19zZWMgKiBYU0VDX1BFUl9TRUMgLSB0Yl9kZWx0YV94czsKIAl1cGRhdGVfZ3RvZCh0Yl9sYXN0X2ppZmZ5LCBuZXdfeHNlYywgZG9fZ3RvZC52YXJwLT50Yl90b194cyk7CiAKLSNpZmRlZiBDT05GSUdfUFBDNjQKLQlzeXN0ZW1jZmctPnR6X21pbnV0ZXN3ZXN0ID0gc3lzX3R6LnR6X21pbnV0ZXN3ZXN0OwotCXN5c3RlbWNmZy0+dHpfZHN0dGltZSA9IHN5c190ei50el9kc3R0aW1lOwotI2VuZGlmCisJdmRzb19kYXRhLT50el9taW51dGVzd2VzdCA9IHN5c190ei50el9taW51dGVzd2VzdDsKKwl2ZHNvX2RhdGEtPnR6X2RzdHRpbWUgPSBzeXNfdHoudHpfZHN0dGltZTsKIAogCXdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBmbGFncyk7CiAJY2xvY2tfd2FzX3NldCgpOwpAQCAtNzEwLDEzICs3MTAsMTIgQEAKIAlkb19ndG9kLnRiX3RpY2tzX3Blcl9zZWMgPSB0Yl90aWNrc19wZXJfc2VjOwogCWRvX2d0b2QudmFycC0+dGJfdG9feHMgPSB0Yl90b194czsKIAlkb19ndG9kLnRiX3RvX3VzID0gdGJfdG9fdXM7Ci0jaWZkZWYgQ09ORklHX1BQQzY0Ci0Jc3lzdGVtY2ZnLT50Yl9vcmlnX3N0YW1wID0gdGJfbGFzdF9qaWZmeTsKLQlzeXN0ZW1jZmctPnRiX3VwZGF0ZV9jb3VudCA9IDA7Ci0Jc3lzdGVtY2ZnLT50Yl90aWNrc19wZXJfc2VjID0gdGJfdGlja3NfcGVyX3NlYzsKLQlzeXN0ZW1jZmctPnN0YW1wX3hzZWMgPSB4dGltZS50dl9zZWMgKiBYU0VDX1BFUl9TRUM7Ci0Jc3lzdGVtY2ZnLT50Yl90b194cyA9IHRiX3RvX3hzOwotI2VuZGlmCisKKwl2ZHNvX2RhdGEtPnRiX29yaWdfc3RhbXAgPSB0Yl9sYXN0X2ppZmZ5OworCXZkc29fZGF0YS0+dGJfdXBkYXRlX2NvdW50ID0gMDsKKwl2ZHNvX2RhdGEtPnRiX3RpY2tzX3Blcl9zZWMgPSB0Yl90aWNrc19wZXJfc2VjOworCXZkc29fZGF0YS0+c3RhbXBfeHNlYyA9IHh0aW1lLnR2X3NlYyAqIFhTRUNfUEVSX1NFQzsKKwl2ZHNvX2RhdGEtPnRiX3RvX3hzID0gdGJfdG9feHM7CiAKIAl0aW1lX2ZyZXEgPSAwOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKaW5kZXggMDU3OGY4My4uMTUxMTQ1NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYwpAQCAtNDksNyArNDksNiBAQAogI2lmZGVmIENPTkZJR19QUEM2NAogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QUEM2NAkvKiBYWFggKi8KQEAgLTEyOSw3ICsxMjgsNyBAQAogCW5sID0gMTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19QUEM2NAotCXN3aXRjaCAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSkgeworCXN3aXRjaCAoX21hY2hpbmUpIHsKIAljYXNlIFBMQVRGT1JNX1BTRVJJRVM6CiAJCXByaW50aygiUFNFUklFUyAiKTsKIAkJbmwgPSAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdWRiZy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3VkYmcuYwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnLmMKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3VkYmdfMTY1NTAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC91ZGJnXzE2NTUwLmMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC91ZGJnX3NjYy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnX3NjYy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC91ZGJnX3NjYy5jCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL3VkYmdfc2NjLmMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzby5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ0ZDhiZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzby5jCkBAIC0wLDAgKzEsNzQ2IEBACisvKgorICogIGxpbnV4L2FyY2gvcHBjNjQva2VybmVsL3Zkc28uYworICoKKyAqICAgIENvcHlyaWdodCAoQykgMjAwNCBCZW5qYW1pbiBIZXJyZW5zY2htaWR0LCBJQk0gQ29ycC4KKyAqCQkJIDxiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGYuaD4KKyNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKworI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL2xtYi5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL3Zkc28uaD4KKyNpbmNsdWRlIDxhc20vdmRzb19kYXRhcGFnZS5oPgorCisjdW5kZWYgREVCVUcKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIERCRyhmbXQuLi4pIHByaW50ayhmbXQpCisjZWxzZQorI2RlZmluZSBEQkcoZm10Li4uKQorI2VuZGlmCisKKy8qIE1heCBzdXBwb3J0ZWQgc2l6ZSBmb3Igc3ltYm9sIG5hbWVzICovCisjZGVmaW5lIE1BWF9TWU1OQU1FCTY0CisKK2V4dGVybiBjaGFyIHZkc28zMl9zdGFydCwgdmRzbzMyX2VuZDsKK3N0YXRpYyB2b2lkICp2ZHNvMzJfa2Jhc2UgPSAmdmRzbzMyX3N0YXJ0OwordW5zaWduZWQgaW50IHZkc28zMl9wYWdlczsKK3Vuc2lnbmVkIGxvbmcgdmRzbzMyX3NpZ3RyYW1wOwordW5zaWduZWQgbG9uZyB2ZHNvMzJfcnRfc2lndHJhbXA7CisKKyNpZmRlZiBDT05GSUdfUFBDNjQKK2V4dGVybiBjaGFyIHZkc282NF9zdGFydCwgdmRzbzY0X2VuZDsKK3N0YXRpYyB2b2lkICp2ZHNvNjRfa2Jhc2UgPSAmdmRzbzY0X3N0YXJ0OwordW5zaWduZWQgaW50IHZkc282NF9wYWdlczsKK3Vuc2lnbmVkIGxvbmcgdmRzbzY0X3J0X3NpZ3RyYW1wOworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLworCisvKgorICogVGhlIHZkc28gZGF0YSBwYWdlIChha2EuIHN5c3RlbWNmZyBmb3Igb2xkIHBwYzY0IGZhbnMpIGlzIGhlcmUuCisgKiBPbmNlIHRoZSBlYXJseSBib290IGtlcm5lbCBjb2RlIG5vIGxvbmdlciBuZWVkcyB0byBtdWNrIGFyb3VuZAorICogd2l0aCBpdCwgaXQgd2lsbCBiZWNvbWUgZHluYW1pY2FsbHkgYWxsb2NhdGVkCisgKi8KK3N0YXRpYyB1bmlvbiB7CisJc3RydWN0IHZkc29fZGF0YQlkYXRhOworCXU4CQkJcGFnZVtQQUdFX1NJWkVdOworfSB2ZHNvX2RhdGFfc3RvcmUgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLnBhZ2VfYWxpZ25lZCIpKSk7CitzdHJ1Y3QgdmRzb19kYXRhICp2ZHNvX2RhdGEgPSAmdmRzb19kYXRhX3N0b3JlLmRhdGE7CisKKy8qIEZvcm1hdCBvZiB0aGUgcGF0Y2ggdGFibGUgKi8KK3N0cnVjdCB2ZHNvX3BhdGNoX2RlZgoreworCXVuc2lnbmVkIGxvbmcJZnRyX21hc2ssIGZ0cl92YWx1ZTsKKwljb25zdCBjaGFyCSpnZW5fbmFtZTsKKwljb25zdCBjaGFyCSpmaXhfbmFtZTsKK307CisKKy8qIFRhYmxlIG9mIGZ1bmN0aW9ucyB0byBwYXRjaCBiYXNlZCBvbiB0aGUgQ1BVIHR5cGUvcmV2aXNpb24KKyAqCisgKiBDdXJyZW50bHksIHdlIG9ubHkgY2hhbmdlIHN5bmNfZGljYWNoZSB0byBkbyBub3RoaW5nIG9uIHByb2Nlc3NvcnMKKyAqIHdpdGggYSBjb2hlcmVudCBpY2FjaGUKKyAqLworc3RhdGljIHN0cnVjdCB2ZHNvX3BhdGNoX2RlZiB2ZHNvX3BhdGNoZXNbXSA9IHsKKwl7CisJCUNQVV9GVFJfQ09IRVJFTlRfSUNBQ0hFLCBDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRSwKKwkJIl9fa2VybmVsX3N5bmNfZGljYWNoZSIsICJfX2tlcm5lbF9zeW5jX2RpY2FjaGVfcDUiCisJfSwKKwl7CisJCUNQVV9GVFJfVVNFX1RCLCAwLAorCQkiX19rZXJuZWxfZ2V0dGltZW9mZGF5IiwgTlVMTAorCX0sCit9OworCisvKgorICogU29tZSBpbmZvcyBjYXJyaWVkIGFyb3VuZCBmb3IgZWFjaCBvZiB0aGVtIGR1cmluZyBwYXJzaW5nIGF0CisgKiBib290IHRpbWUuCisgKi8KK3N0cnVjdCBsaWIzMl9lbGZpbmZvCit7CisJRWxmMzJfRWhkcgkqaGRyOwkJLyogcHRyIHRvIEVMRiAqLworCUVsZjMyX1N5bQkqZHluc3ltOwkvKiBwdHIgdG8gLmR5bnN5bSBzZWN0aW9uICovCisJdW5zaWduZWQgbG9uZwlkeW5zeW1zaXplOwkvKiBzaXplIG9mIC5keW5zeW0gc2VjdGlvbiAqLworCWNoYXIJCSpkeW5zdHI7CS8qIHB0ciB0byAuZHluc3RyIHNlY3Rpb24gKi8KKwl1bnNpZ25lZCBsb25nCXRleHQ7CQkvKiBvZmZzZXQgb2YgLnRleHQgc2VjdGlvbiBpbiAuc28gKi8KK307CisKK3N0cnVjdCBsaWI2NF9lbGZpbmZvCit7CisJRWxmNjRfRWhkcgkqaGRyOworCUVsZjY0X1N5bQkqZHluc3ltOworCXVuc2lnbmVkIGxvbmcJZHluc3ltc2l6ZTsKKwljaGFyCQkqZHluc3RyOworCXVuc2lnbmVkIGxvbmcJdGV4dDsKK307CisKKworI2lmZGVmIF9fREVCVUcKK3N0YXRpYyB2b2lkIGR1bXBfb25lX3Zkc29fcGFnZShzdHJ1Y3QgcGFnZSAqcGcsIHN0cnVjdCBwYWdlICp1cGcpCit7CisJcHJpbnRrKCJrcGc6ICVwIChjOiVkLGY6JTA4bHgpIiwgX192YShwYWdlX3RvX3BmbihwZykgPDwgUEFHRV9TSElGVCksCisJICAgICAgIHBhZ2VfY291bnQocGcpLAorCSAgICAgICBwZy0+ZmxhZ3MpOworCWlmICh1cGcvKiAmJiBwZyAhPSB1cGcqLykgeworCQlwcmludGsoIiB1cGc6ICVwIChjOiVkLGY6JTA4bHgpIiwgX192YShwYWdlX3RvX3Bmbih1cGcpCisJCQkJCQkgICAgICAgPDwgUEFHRV9TSElGVCksCisJCSAgICAgICBwYWdlX2NvdW50KHVwZyksCisJCSAgICAgICB1cGctPmZsYWdzKTsKKwl9CisJcHJpbnRrKCJcbiIpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX3Zkc29fcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hKQoreworCWludCBpOworCisJaWYgKCF2bWEgfHwgdGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKSB7CisJCXByaW50aygidkRTTzMyIEAgJTAxNmx4OlxuIiwgKHVuc2lnbmVkIGxvbmcpdmRzbzMyX2tiYXNlKTsKKwkJZm9yIChpPTA7IGk8dmRzbzMyX3BhZ2VzOyBpKyspIHsKKwkJCXN0cnVjdCBwYWdlICpwZyA9IHZpcnRfdG9fcGFnZSh2ZHNvMzJfa2Jhc2UgKworCQkJCQkJICAgICAgIGkqUEFHRV9TSVpFKTsKKwkJCXN0cnVjdCBwYWdlICp1cGcgPSAodm1hICYmIHZtYS0+dm1fbW0pID8KKwkJCQlmb2xsb3dfcGFnZSh2bWEtPnZtX21tLCB2bWEtPnZtX3N0YXJ0ICsKKwkJCQkJICAgIGkqUEFHRV9TSVpFLCAwKQorCQkJCTogTlVMTDsKKwkJCWR1bXBfb25lX3Zkc29fcGFnZShwZywgdXBnKTsKKwkJfQorCX0KKwlpZiAoIXZtYSB8fCAhdGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKSB7CisJCXByaW50aygidkRTTzY0IEAgJTAxNmx4OlxuIiwgKHVuc2lnbmVkIGxvbmcpdmRzbzY0X2tiYXNlKTsKKwkJZm9yIChpPTA7IGk8dmRzbzY0X3BhZ2VzOyBpKyspIHsKKwkJCXN0cnVjdCBwYWdlICpwZyA9IHZpcnRfdG9fcGFnZSh2ZHNvNjRfa2Jhc2UgKworCQkJCQkJICAgICAgIGkqUEFHRV9TSVpFKTsKKwkJCXN0cnVjdCBwYWdlICp1cGcgPSAodm1hICYmIHZtYS0+dm1fbW0pID8KKwkJCQlmb2xsb3dfcGFnZSh2bWEtPnZtX21tLCB2bWEtPnZtX3N0YXJ0ICsKKwkJCQkJICAgIGkqUEFHRV9TSVpFLCAwKQorCQkJCTogTlVMTDsKKwkJCWR1bXBfb25lX3Zkc29fcGFnZShwZywgdXBnKTsKKwkJfQorCX0KK30KKyNlbmRpZiAvKiBERUJVRyAqLworCisvKgorICogS2VlcCBhIGR1bW15IHZtYV9jbG9zZSBmb3Igbm93LCBpdCB3aWxsIHByZXZlbnQgVk1BIG1lcmdpbmcuCisgKi8KK3N0YXRpYyB2b2lkIHZkc29fdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSkKK3sKK30KKworLyoKKyAqIE91ciBub3BhZ2UoKSBmdW5jdGlvbiwgbWFwcyBpbiB0aGUgYWN0dWFsIHZEU08ga2VybmVsIHBhZ2VzLCB0aGV5IHdpbGwKKyAqIGJlIG1hcHBlZCByZWFkLW9ubHkgYnkgZG9fbm9fcGFnZSgpLCBhbmQgZXZlbnR1YWxseSBDT1cnZWQsIGVpdGhlcgorICogcmlnaHQgYXdheSBmb3IgYW4gaW5pdGlhbCB3cml0ZSBhY2Nlc3MsIG9yIGJ5IGRvX3dwX3BhZ2UoKS4KKyAqLworc3RhdGljIHN0cnVjdCBwYWdlICogdmRzb192bWFfbm9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50ICp0eXBlKQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYWRkcmVzcyAtIHZtYS0+dm1fc3RhcnQ7CisJc3RydWN0IHBhZ2UgKnBnOworI2lmZGVmIENPTkZJR19QUEM2NAorCXZvaWQgKnZiYXNlID0gdGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpID8KKwkJdmRzbzMyX2tiYXNlIDogdmRzbzY0X2tiYXNlOworI2Vsc2UKKwl2b2lkICp2YmFzZSA9IHZkc28zMl9rYmFzZTsKKyNlbmRpZgorCisJREJHKCJ2ZHNvX3ZtYV9ub3BhZ2UoY3VycmVudDogJXMsIGFkZHJlc3M6ICUwMTZseCwgb2ZmOiAlbHgpXG4iLAorCSAgICBjdXJyZW50LT5jb21tLCBhZGRyZXNzLCBvZmZzZXQpOworCisJaWYgKGFkZHJlc3MgPCB2bWEtPnZtX3N0YXJ0IHx8IGFkZHJlc3MgPiB2bWEtPnZtX2VuZCkKKwkJcmV0dXJuIE5PUEFHRV9TSUdCVVM7CisKKwkvKgorCSAqIExhc3QgcGFnZSBpcyBzeXN0ZW1jZmcuCisJICovCisJaWYgKCh2bWEtPnZtX2VuZCAtIGFkZHJlc3MpIDw9IFBBR0VfU0laRSkKKwkJcGcgPSB2aXJ0X3RvX3BhZ2UodmRzb19kYXRhKTsKKwllbHNlCisJCXBnID0gdmlydF90b19wYWdlKHZiYXNlICsgb2Zmc2V0KTsKKworCWdldF9wYWdlKHBnKTsKKwlEQkcoIiAtPnBhZ2UgY291bnQ6ICVkXG4iLCBwYWdlX2NvdW50KHBnKSk7CisKKwlyZXR1cm4gcGc7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdmRzb192bW9wcyA9IHsKKwkuY2xvc2UJPSB2ZHNvX3ZtYV9jbG9zZSwKKwkubm9wYWdlCT0gdmRzb192bWFfbm9wYWdlLAorfTsKKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIGZyb20gYmluZm10X2VsZiwgd2UgY3JlYXRlIHRoZSBzcGVjaWFsIHZtYSBmb3IgdGhlCisgKiB2RFNPIGFuZCBpbnNlcnQgaXQgaW50byB0aGUgbW0gc3RydWN0IHRyZWUKKyAqLworaW50IGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAorCQkJCWludCBleGVjdXRhYmxlX3N0YWNrKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJdW5zaWduZWQgbG9uZyB2ZHNvX3BhZ2VzOworCXVuc2lnbmVkIGxvbmcgdmRzb19iYXNlOworCisjaWZkZWYgQ09ORklHX1BQQzY0CisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSkgeworCQl2ZHNvX3BhZ2VzID0gdmRzbzMyX3BhZ2VzOworCQl2ZHNvX2Jhc2UgPSBWRFNPMzJfTUJBU0U7CisJfSBlbHNlIHsKKwkJdmRzb19wYWdlcyA9IHZkc282NF9wYWdlczsKKwkJdmRzb19iYXNlID0gVkRTTzY0X01CQVNFOworCX0KKyNlbHNlCisJdmRzb19wYWdlcyA9IHZkc28zMl9wYWdlczsKKwl2ZHNvX2Jhc2UgPSBWRFNPMzJfTUJBU0U7CisjZW5kaWYKKworCWN1cnJlbnQtPnRocmVhZC52ZHNvX2Jhc2UgPSAwOworCisJLyogdkRTTyBoYXMgYSBwcm9ibGVtIGFuZCB3YXMgZGlzYWJsZWQsIGp1c3QgZG9uJ3QgImVuYWJsZSIgaXQgZm9yIHRoZQorCSAqIHByb2Nlc3MKKwkgKi8KKwlpZiAodmRzb19wYWdlcyA9PSAwKQorCQlyZXR1cm4gMDsKKworCXZtYSA9IGttZW1fY2FjaGVfYWxsb2Modm1fYXJlYV9jYWNoZXAsIFNMQUJfS0VSTkVMKTsKKwlpZiAodm1hID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtc2V0KHZtYSwgMCwgc2l6ZW9mKCp2bWEpKTsKKworCS8qIEFkZCBhIHBhZ2UgdG8gdGhlIHZkc28gc2l6ZSBmb3IgdGhlIGRhdGEgcGFnZSAqLworCXZkc29fcGFnZXMgKys7CisKKwkvKgorCSAqIHBpY2sgYSBiYXNlIGFkZHJlc3MgZm9yIHRoZSB2RFNPIGluIHByb2Nlc3Mgc3BhY2UuIFdlIHRyeSB0byBwdXQgaXQKKwkgKiBhdCB2ZHNvX2Jhc2Ugd2hpY2ggaXMgdGhlICJuYXR1cmFsIiBiYXNlIGZvciBpdCwgYnV0IHdlIG1pZ2h0IGZhaWwKKwkgKiBhbmQgZW5kIHVwIHB1dHRpbmcgaXQgZWxzZXdoZXJlLgorCSAqLworCXZkc29fYmFzZSA9IGdldF91bm1hcHBlZF9hcmVhKE5VTEwsIHZkc29fYmFzZSwKKwkJCQkgICAgICB2ZHNvX3BhZ2VzIDw8IFBBR0VfU0hJRlQsIDAsIDApOworCWlmICh2ZHNvX2Jhc2UgJiB+UEFHRV9NQVNLKSB7CisJCWttZW1fY2FjaGVfZnJlZSh2bV9hcmVhX2NhY2hlcCwgdm1hKTsKKwkJcmV0dXJuIChpbnQpdmRzb19iYXNlOworCX0KKworCWN1cnJlbnQtPnRocmVhZC52ZHNvX2Jhc2UgPSB2ZHNvX2Jhc2U7CisKKwl2bWEtPnZtX21tID0gbW07CisJdm1hLT52bV9zdGFydCA9IGN1cnJlbnQtPnRocmVhZC52ZHNvX2Jhc2U7CisJdm1hLT52bV9lbmQgPSB2bWEtPnZtX3N0YXJ0ICsgKHZkc29fcGFnZXMgPDwgUEFHRV9TSElGVCk7CisKKwkvKgorCSAqIG91ciB2bWEgZmxhZ3MgZG9uJ3QgaGF2ZSBWTV9XUklURSBzbyBieSBkZWZhdWx0LCB0aGUgcHJvY2VzcyBpc24ndAorCSAqIGFsbG93ZWQgdG8gd3JpdGUgdGhvc2UgcGFnZXMuCisJICogZ2RiIGNhbiBicmVhayB0aGF0IHdpdGggcHRyYWNlIGludGVyZmFjZSwgYW5kIHRodXMgdHJpZ2dlciBDT1cgb24KKwkgKiB0aG9zZSBwYWdlcyBidXQgaXQncyB0aGVuIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gbmV2ZXIgZG8gdGhhdCBvbgorCSAqIHRoZSAiZGF0YSIgcGFnZSBvZiB0aGUgdkRTTyBvciB5b3UnbGwgc3RvcCBnZXR0aW5nIGtlcm5lbCB1cGRhdGVzCisJICogYW5kIHlvdXIgbmljZSB1c2VybGFuZCBnZXR0aW1lb2ZkYXkgd2lsbCBiZSB0b3RhbGx5IGRlYWQuCisJICogSXQncyBmaW5lIHRvIHVzZSB0aGF0IGZvciBzZXR0aW5nIGJyZWFrcG9pbnRzIGluIHRoZSB2RFNPIGNvZGUKKwkgKiBwYWdlcyB0aG91Z2gKKwkgKi8KKwl2bWEtPnZtX2ZsYWdzID0gVk1fUkVBRCB8IFZNX0VYRUMgfCBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfAorCQlWTV9NQVlFWEVDIHwgVk1fUkVTRVJWRUQ7CisJdm1hLT52bV9mbGFncyB8PSBtbS0+ZGVmX2ZsYWdzOworCXZtYS0+dm1fcGFnZV9wcm90ID0gcHJvdGVjdGlvbl9tYXBbdm1hLT52bV9mbGFncyAmIDB4N107CisJdm1hLT52bV9vcHMgPSAmdmRzb192bW9wczsKKworCWRvd25fd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisJaWYgKGluc2VydF92bV9zdHJ1Y3QobW0sIHZtYSkpIHsKKwkJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisJCWttZW1fY2FjaGVfZnJlZSh2bV9hcmVhX2NhY2hlcCwgdm1hKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1tLT50b3RhbF92bSArPSAodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUOworCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICogX19pbml0IGZpbmRfc2VjdGlvbjMyKEVsZjMyX0VoZHIgKmVoZHIsIGNvbnN0IGNoYXIgKnNlY25hbWUsCisJCQkJICB1bnNpZ25lZCBsb25nICpzaXplKQoreworCUVsZjMyX1NoZHIgKnNlY2hkcnM7CisJdW5zaWduZWQgaW50IGk7CisJY2hhciAqc2VjbmFtZXM7CisKKwkvKiBHcmFiIHNlY3Rpb24gaGVhZGVycyBhbmQgc3RyaW5ncyBzbyB3ZSBjYW4gdGVsbCB3aG8gaXMgd2hvICovCisJc2VjaGRycyA9ICh2b2lkICopZWhkciArIGVoZHItPmVfc2hvZmY7CisJc2VjbmFtZXMgPSAodm9pZCAqKWVoZHIgKyBzZWNoZHJzW2VoZHItPmVfc2hzdHJuZHhdLnNoX29mZnNldDsKKworCS8qIEZpbmQgdGhlIHNlY3Rpb24gdGhleSB3YW50ICovCisJZm9yIChpID0gMTsgaSA8IGVoZHItPmVfc2hudW07IGkrKykgeworCQlpZiAoc3RyY21wKHNlY25hbWVzK3NlY2hkcnNbaV0uc2hfbmFtZSwgc2VjbmFtZSkgPT0gMCkgeworCQkJaWYgKHNpemUpCisJCQkJKnNpemUgPSBzZWNoZHJzW2ldLnNoX3NpemU7CisJCQlyZXR1cm4gKHZvaWQgKillaGRyICsgc2VjaGRyc1tpXS5zaF9vZmZzZXQ7CisJCX0KKwl9CisJKnNpemUgPSAwOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgRWxmMzJfU3ltICogX19pbml0IGZpbmRfc3ltYm9sMzIoc3RydWN0IGxpYjMyX2VsZmluZm8gKmxpYiwKKwkJCQkJY29uc3QgY2hhciAqc3ltbmFtZSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwljaGFyIG5hbWVbTUFYX1NZTU5BTUVdLCAqYzsKKworCWZvciAoaSA9IDA7IGkgPCAobGliLT5keW5zeW1zaXplIC8gc2l6ZW9mKEVsZjMyX1N5bSkpOyBpKyspIHsKKwkJaWYgKGxpYi0+ZHluc3ltW2ldLnN0X25hbWUgPT0gMCkKKwkJCWNvbnRpbnVlOworCQlzdHJsY3B5KG5hbWUsIGxpYi0+ZHluc3RyICsgbGliLT5keW5zeW1baV0uc3RfbmFtZSwKKwkJCU1BWF9TWU1OQU1FKTsKKwkJYyA9IHN0cmNocihuYW1lLCAnQCcpOworCQlpZiAoYykKKwkJCSpjID0gMDsKKwkJaWYgKHN0cmNtcChzeW1uYW1lLCBuYW1lKSA9PSAwKQorCQkJcmV0dXJuICZsaWItPmR5bnN5bVtpXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIE5vdGUgdGhhdCB3ZSBhc3N1bWUgdGhlIHNlY3Rpb24gaXMgLnRleHQgYW5kIHRoZSBzeW1ib2wgaXMgcmVsYXRpdmUgdG8KKyAqIHRoZSBsaWJyYXJ5IGJhc2UKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGZpbmRfZnVuY3Rpb24zMihzdHJ1Y3QgbGliMzJfZWxmaW5mbyAqbGliLAorCQkJCQkgICAgY29uc3QgY2hhciAqc3ltbmFtZSkKK3sKKwlFbGYzMl9TeW0gKnN5bSA9IGZpbmRfc3ltYm9sMzIobGliLCBzeW1uYW1lKTsKKworCWlmIChzeW0gPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2RFNPMzI6IGZ1bmN0aW9uICVzIG5vdCBmb3VuZCAhXG4iLAorCQkgICAgICAgc3ltbmFtZSk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gc3ltLT5zdF92YWx1ZSAtIFZEU08zMl9MQkFTRTsKK30KKworc3RhdGljIGludCB2ZHNvX2RvX2Z1bmNfcGF0Y2gzMihzdHJ1Y3QgbGliMzJfZWxmaW5mbyAqdjMyLAorCQkJCXN0cnVjdCBsaWI2NF9lbGZpbmZvICp2NjQsCisJCQkJY29uc3QgY2hhciAqb3JpZywgY29uc3QgY2hhciAqZml4KQoreworCUVsZjMyX1N5bSAqc3ltMzJfZ2VuLCAqc3ltMzJfZml4OworCisJc3ltMzJfZ2VuID0gZmluZF9zeW1ib2wzMih2MzIsIG9yaWcpOworCWlmIChzeW0zMl9nZW4gPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgInZEU08zMjogQ2FuJ3QgZmluZCBzeW1ib2wgJXMgIVxuIiwgb3JpZyk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKGZpeCA9PSBOVUxMKSB7CisJCXN5bTMyX2dlbi0+c3RfbmFtZSA9IDA7CisJCXJldHVybiAwOworCX0KKwlzeW0zMl9maXggPSBmaW5kX3N5bWJvbDMyKHYzMiwgZml4KTsKKwlpZiAoc3ltMzJfZml4ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ2RFNPMzI6IENhbid0IGZpbmQgc3ltYm9sICVzICFcbiIsIGZpeCk7CisJCXJldHVybiAtMTsKKwl9CisJc3ltMzJfZ2VuLT5zdF92YWx1ZSA9IHN5bTMyX2ZpeC0+c3RfdmFsdWU7CisJc3ltMzJfZ2VuLT5zdF9zaXplID0gc3ltMzJfZml4LT5zdF9zaXplOworCXN5bTMyX2dlbi0+c3RfaW5mbyA9IHN5bTMyX2ZpeC0+c3RfaW5mbzsKKwlzeW0zMl9nZW4tPnN0X290aGVyID0gc3ltMzJfZml4LT5zdF9vdGhlcjsKKwlzeW0zMl9nZW4tPnN0X3NobmR4ID0gc3ltMzJfZml4LT5zdF9zaG5keDsKKworCXJldHVybiAwOworfQorCisKKyNpZmRlZiBDT05GSUdfUFBDNjQKKworc3RhdGljIHZvaWQgKiBfX2luaXQgZmluZF9zZWN0aW9uNjQoRWxmNjRfRWhkciAqZWhkciwgY29uc3QgY2hhciAqc2VjbmFtZSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgKnNpemUpCit7CisJRWxmNjRfU2hkciAqc2VjaGRyczsKKwl1bnNpZ25lZCBpbnQgaTsKKwljaGFyICpzZWNuYW1lczsKKworCS8qIEdyYWIgc2VjdGlvbiBoZWFkZXJzIGFuZCBzdHJpbmdzIHNvIHdlIGNhbiB0ZWxsIHdobyBpcyB3aG8gKi8KKwlzZWNoZHJzID0gKHZvaWQgKillaGRyICsgZWhkci0+ZV9zaG9mZjsKKwlzZWNuYW1lcyA9ICh2b2lkICopZWhkciArIHNlY2hkcnNbZWhkci0+ZV9zaHN0cm5keF0uc2hfb2Zmc2V0OworCisJLyogRmluZCB0aGUgc2VjdGlvbiB0aGV5IHdhbnQgKi8KKwlmb3IgKGkgPSAxOyBpIDwgZWhkci0+ZV9zaG51bTsgaSsrKSB7CisJCWlmIChzdHJjbXAoc2VjbmFtZXMrc2VjaGRyc1tpXS5zaF9uYW1lLCBzZWNuYW1lKSA9PSAwKSB7CisJCQlpZiAoc2l6ZSkKKwkJCQkqc2l6ZSA9IHNlY2hkcnNbaV0uc2hfc2l6ZTsKKwkJCXJldHVybiAodm9pZCAqKWVoZHIgKyBzZWNoZHJzW2ldLnNoX29mZnNldDsKKwkJfQorCX0KKwlpZiAoc2l6ZSkKKwkJKnNpemUgPSAwOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgRWxmNjRfU3ltICogX19pbml0IGZpbmRfc3ltYm9sNjQoc3RydWN0IGxpYjY0X2VsZmluZm8gKmxpYiwKKwkJCQkJY29uc3QgY2hhciAqc3ltbmFtZSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwljaGFyIG5hbWVbTUFYX1NZTU5BTUVdLCAqYzsKKworCWZvciAoaSA9IDA7IGkgPCAobGliLT5keW5zeW1zaXplIC8gc2l6ZW9mKEVsZjY0X1N5bSkpOyBpKyspIHsKKwkJaWYgKGxpYi0+ZHluc3ltW2ldLnN0X25hbWUgPT0gMCkKKwkJCWNvbnRpbnVlOworCQlzdHJsY3B5KG5hbWUsIGxpYi0+ZHluc3RyICsgbGliLT5keW5zeW1baV0uc3RfbmFtZSwKKwkJCU1BWF9TWU1OQU1FKTsKKwkJYyA9IHN0cmNocihuYW1lLCAnQCcpOworCQlpZiAoYykKKwkJCSpjID0gMDsKKwkJaWYgKHN0cmNtcChzeW1uYW1lLCBuYW1lKSA9PSAwKQorCQkJcmV0dXJuICZsaWItPmR5bnN5bVtpXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIE5vdGUgdGhhdCB3ZSBhc3N1bWUgdGhlIHNlY3Rpb24gaXMgLnRleHQgYW5kIHRoZSBzeW1ib2wgaXMgcmVsYXRpdmUgdG8KKyAqIHRoZSBsaWJyYXJ5IGJhc2UKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGZpbmRfZnVuY3Rpb242NChzdHJ1Y3QgbGliNjRfZWxmaW5mbyAqbGliLAorCQkJCQkgICAgY29uc3QgY2hhciAqc3ltbmFtZSkKK3sKKwlFbGY2NF9TeW0gKnN5bSA9IGZpbmRfc3ltYm9sNjQobGliLCBzeW1uYW1lKTsKKworCWlmIChzeW0gPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2RFNPNjQ6IGZ1bmN0aW9uICVzIG5vdCBmb3VuZCAhXG4iLAorCQkgICAgICAgc3ltbmFtZSk7CisJCXJldHVybiAwOworCX0KKyNpZmRlZiBWRFM2NF9IQVNfREVTQ1JJUFRPUlMKKwlyZXR1cm4gKigodTY0ICopKHZkc282NF9rYmFzZSArIHN5bS0+c3RfdmFsdWUgLSBWRFNPNjRfTEJBU0UpKSAtCisJCVZEU082NF9MQkFTRTsKKyNlbHNlCisJcmV0dXJuIHN5bS0+c3RfdmFsdWUgLSBWRFNPNjRfTEJBU0U7CisjZW5kaWYKK30KKworc3RhdGljIGludCB2ZHNvX2RvX2Z1bmNfcGF0Y2g2NChzdHJ1Y3QgbGliMzJfZWxmaW5mbyAqdjMyLAorCQkJCXN0cnVjdCBsaWI2NF9lbGZpbmZvICp2NjQsCisJCQkJY29uc3QgY2hhciAqb3JpZywgY29uc3QgY2hhciAqZml4KQoreworCUVsZjY0X1N5bSAqc3ltNjRfZ2VuLCAqc3ltNjRfZml4OworCisJc3ltNjRfZ2VuID0gZmluZF9zeW1ib2w2NCh2NjQsIG9yaWcpOworCWlmIChzeW02NF9nZW4gPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgInZEU082NDogQ2FuJ3QgZmluZCBzeW1ib2wgJXMgIVxuIiwgb3JpZyk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKGZpeCA9PSBOVUxMKSB7CisJCXN5bTY0X2dlbi0+c3RfbmFtZSA9IDA7CisJCXJldHVybiAwOworCX0KKwlzeW02NF9maXggPSBmaW5kX3N5bWJvbDY0KHY2NCwgZml4KTsKKwlpZiAoc3ltNjRfZml4ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ2RFNPNjQ6IENhbid0IGZpbmQgc3ltYm9sICVzICFcbiIsIGZpeCk7CisJCXJldHVybiAtMTsKKwl9CisJc3ltNjRfZ2VuLT5zdF92YWx1ZSA9IHN5bTY0X2ZpeC0+c3RfdmFsdWU7CisJc3ltNjRfZ2VuLT5zdF9zaXplID0gc3ltNjRfZml4LT5zdF9zaXplOworCXN5bTY0X2dlbi0+c3RfaW5mbyA9IHN5bTY0X2ZpeC0+c3RfaW5mbzsKKwlzeW02NF9nZW4tPnN0X290aGVyID0gc3ltNjRfZml4LT5zdF9vdGhlcjsKKwlzeW02NF9nZW4tPnN0X3NobmR4ID0gc3ltNjRfZml4LT5zdF9zaG5keDsKKworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCisKKworc3RhdGljIF9faW5pdCBpbnQgdmRzb19kb19maW5kX3NlY3Rpb25zKHN0cnVjdCBsaWIzMl9lbGZpbmZvICp2MzIsCisJCQkJCXN0cnVjdCBsaWI2NF9lbGZpbmZvICp2NjQpCit7CisJdm9pZCAqc2VjdDsKKworCS8qCisJICogTG9jYXRlIHN5bWJvbCB0YWJsZXMgJiB0ZXh0IHNlY3Rpb24KKwkgKi8KKworCXYzMi0+ZHluc3ltID0gZmluZF9zZWN0aW9uMzIodjMyLT5oZHIsICIuZHluc3ltIiwgJnYzMi0+ZHluc3ltc2l6ZSk7CisJdjMyLT5keW5zdHIgPSBmaW5kX3NlY3Rpb24zMih2MzItPmhkciwgIi5keW5zdHIiLCBOVUxMKTsKKwlpZiAodjMyLT5keW5zeW0gPT0gTlVMTCB8fCB2MzItPmR5bnN0ciA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAidkRTTzMyOiByZXF1aXJlZCBzeW1ib2wgc2VjdGlvbiBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXNlY3QgPSBmaW5kX3NlY3Rpb24zMih2MzItPmhkciwgIi50ZXh0IiwgTlVMTCk7CisJaWYgKHNlY3QgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgInZEU08zMjogdGhlIC50ZXh0IHNlY3Rpb24gd2FzIG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisJdjMyLT50ZXh0ID0gc2VjdCAtIHZkc28zMl9rYmFzZTsKKworI2lmZGVmIENPTkZJR19QUEM2NAorCXY2NC0+ZHluc3ltID0gZmluZF9zZWN0aW9uNjQodjY0LT5oZHIsICIuZHluc3ltIiwgJnY2NC0+ZHluc3ltc2l6ZSk7CisJdjY0LT5keW5zdHIgPSBmaW5kX3NlY3Rpb242NCh2NjQtPmhkciwgIi5keW5zdHIiLCBOVUxMKTsKKwlpZiAodjY0LT5keW5zeW0gPT0gTlVMTCB8fCB2NjQtPmR5bnN0ciA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAidkRTTzY0OiByZXF1aXJlZCBzeW1ib2wgc2VjdGlvbiBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXNlY3QgPSBmaW5kX3NlY3Rpb242NCh2NjQtPmhkciwgIi50ZXh0IiwgTlVMTCk7CisJaWYgKHNlY3QgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgInZEU082NDogdGhlIC50ZXh0IHNlY3Rpb24gd2FzIG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisJdjY0LT50ZXh0ID0gc2VjdCAtIHZkc282NF9rYmFzZTsKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgX19pbml0IHZvaWQgdmRzb19zZXR1cF90cmFtcG9saW5lcyhzdHJ1Y3QgbGliMzJfZWxmaW5mbyAqdjMyLAorCQkJCQkgIHN0cnVjdCBsaWI2NF9lbGZpbmZvICp2NjQpCit7CisJLyoKKwkgKiBGaW5kIHNpZ25hbCB0cmFtcG9saW5lcworCSAqLworCisjaWZkZWYgQ09ORklHX1BQQzY0CisJdmRzbzY0X3J0X3NpZ3RyYW1wID0gZmluZF9mdW5jdGlvbjY0KHY2NCwgIl9fa2VybmVsX3NpZ3RyYW1wX3J0NjQiKTsKKyNlbmRpZgorCXZkc28zMl9zaWd0cmFtcAkgICA9IGZpbmRfZnVuY3Rpb24zMih2MzIsICJfX2tlcm5lbF9zaWd0cmFtcDMyIik7CisJdmRzbzMyX3J0X3NpZ3RyYW1wID0gZmluZF9mdW5jdGlvbjMyKHYzMiwgIl9fa2VybmVsX3NpZ3RyYW1wX3J0MzIiKTsKK30KKworc3RhdGljIF9faW5pdCBpbnQgdmRzb19maXh1cF9kYXRhcGFnZShzdHJ1Y3QgbGliMzJfZWxmaW5mbyAqdjMyLAorCQkJCSAgICAgICBzdHJ1Y3QgbGliNjRfZWxmaW5mbyAqdjY0KQoreworCUVsZjMyX1N5bSAqc3ltMzI7CisjaWZkZWYgQ09ORklHX1BQQzY0CisJRWxmNjRfU3ltICpzeW02NDsKKworICAgICAgIAlzeW02NCA9IGZpbmRfc3ltYm9sNjQodjY0LCAiX19rZXJuZWxfZGF0YXBhZ2Vfb2Zmc2V0Iik7CisJaWYgKHN5bTY0ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ2RFNPNjQ6IENhbid0IGZpbmQgc3ltYm9sICIKKwkJICAgICAgICJfX2tlcm5lbF9kYXRhcGFnZV9vZmZzZXQgIVxuIik7CisJCXJldHVybiAtMTsKKwl9CisJKigoaW50ICopKHZkc282NF9rYmFzZSArIHN5bTY0LT5zdF92YWx1ZSAtIFZEU082NF9MQkFTRSkpID0KKwkJKHZkc282NF9wYWdlcyA8PCBQQUdFX1NISUZUKSAtCisJCShzeW02NC0+c3RfdmFsdWUgLSBWRFNPNjRfTEJBU0UpOworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLworCisJc3ltMzIgPSBmaW5kX3N5bWJvbDMyKHYzMiwgIl9fa2VybmVsX2RhdGFwYWdlX29mZnNldCIpOworCWlmIChzeW0zMiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAidkRTTzMyOiBDYW4ndCBmaW5kIHN5bWJvbCAiCisJCSAgICAgICAiX19rZXJuZWxfZGF0YXBhZ2Vfb2Zmc2V0ICFcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCSooKGludCAqKSh2ZHNvMzJfa2Jhc2UgKyAoc3ltMzItPnN0X3ZhbHVlIC0gVkRTTzMyX0xCQVNFKSkpID0KKwkJKHZkc28zMl9wYWdlcyA8PCBQQUdFX1NISUZUKSAtCisJCShzeW0zMi0+c3RfdmFsdWUgLSBWRFNPMzJfTEJBU0UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2luaXQgaW50IHZkc29fZml4dXBfYWx0X2Z1bmNzKHN0cnVjdCBsaWIzMl9lbGZpbmZvICp2MzIsCisJCQkJICAgICAgIHN0cnVjdCBsaWI2NF9lbGZpbmZvICp2NjQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2ZHNvX3BhdGNoZXMpOyBpKyspIHsKKwkJc3RydWN0IHZkc29fcGF0Y2hfZGVmICpwYXRjaCA9ICZ2ZHNvX3BhdGNoZXNbaV07CisJCWludCBtYXRjaCA9IChjdXJfY3B1X3NwZWMtPmNwdV9mZWF0dXJlcyAmIHBhdGNoLT5mdHJfbWFzaykKKwkJCT09IHBhdGNoLT5mdHJfdmFsdWU7CisJCWlmICghbWF0Y2gpCisJCQljb250aW51ZTsKKworCQlEQkcoInJlcGxhY2luZyAlcyB3aXRoICVzLi4uXG4iLCBwYXRjaC0+Z2VuX25hbWUsCisJCSAgICBwYXRjaC0+Zml4X25hbWUgPyAiTk9ORSIgOiBwYXRjaC0+Zml4X25hbWUpOworCisJCS8qCisJCSAqIFBhdGNoIHRoZSAzMiBiaXRzIGFuZCA2NCBiaXRzIHN5bWJvbHMuIE5vdGUgdGhhdCB3ZSBkbyBub3QKKwkJICogcGF0Y2ggdGhlICIuIiBzeW1ib2wgb24gNjQgYml0cy4KKwkJICogSXQgd291bGQgYmUgZWFzeSB0byBkbywgYnV0IGRvZXNuJ3Qgc2VlbSB0byBiZSBuZWNlc3NhcnksCisJCSAqIHBhdGNoaW5nIHRoZSBPUEQgc3ltYm9sIGlzIGVub3VnaC4KKwkJICovCisJCXZkc29fZG9fZnVuY19wYXRjaDMyKHYzMiwgdjY0LCBwYXRjaC0+Z2VuX25hbWUsCisJCQkJICAgICBwYXRjaC0+Zml4X25hbWUpOworI2lmZGVmIENPTkZJR19QUEM2NAorCQl2ZHNvX2RvX2Z1bmNfcGF0Y2g2NCh2MzIsIHY2NCwgcGF0Y2gtPmdlbl9uYW1lLAorCQkJCSAgICAgcGF0Y2gtPmZpeF9uYW1lKTsKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgX19pbml0IGludCB2ZHNvX3NldHVwKHZvaWQpCit7CisJc3RydWN0IGxpYjMyX2VsZmluZm8JdjMyOworCXN0cnVjdCBsaWI2NF9lbGZpbmZvCXY2NDsKKworCXYzMi5oZHIgPSB2ZHNvMzJfa2Jhc2U7CisjaWZkZWYgQ09ORklHX1BQQzY0CisJdjY0LmhkciA9IHZkc282NF9rYmFzZTsKKyNlbmRpZgorCWlmICh2ZHNvX2RvX2ZpbmRfc2VjdGlvbnMoJnYzMiwgJnY2NCkpCisJCXJldHVybiAtMTsKKworCWlmICh2ZHNvX2ZpeHVwX2RhdGFwYWdlKCZ2MzIsICZ2NjQpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAodmRzb19maXh1cF9hbHRfZnVuY3MoJnYzMiwgJnY2NCkpCisJCXJldHVybiAtMTsKKworCXZkc29fc2V0dXBfdHJhbXBvbGluZXMoJnYzMiwgJnY2NCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENhbGxlZCBmcm9tIHNldHVwX2FyY2ggdG8gaW5pdGlhbGl6ZSB0aGUgYml0bWFwIG9mIGF2YWlsYWJsZQorICogc3lzY2FsbHMgaW4gdGhlIHN5c3RlbWNmZyBwYWdlCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCB2ZHNvX3NldHVwX3N5c2NhbGxfbWFwKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisJZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKnN5c19jYWxsX3RhYmxlOworCWV4dGVybiB1bnNpZ25lZCBsb25nIHN5c19uaV9zeXNjYWxsOworCisKKwlmb3IgKGkgPSAwOyBpIDwgX19OUl9zeXNjYWxsczsgaSsrKSB7CisjaWZkZWYgQ09ORklHX1BQQzY0CisJCWlmIChzeXNfY2FsbF90YWJsZVtpKjJdICE9IHN5c19uaV9zeXNjYWxsKQorCQkJdmRzb19kYXRhLT5zeXNjYWxsX21hcF82NFtpID4+IDVdIHw9CisJCQkJMHg4MDAwMDAwMFVMID4+IChpICYgMHgxZik7CisJCWlmIChzeXNfY2FsbF90YWJsZVtpKjIrMV0gIT0gc3lzX25pX3N5c2NhbGwpCisJCQl2ZHNvX2RhdGEtPnN5c2NhbGxfbWFwXzMyW2kgPj4gNV0gfD0KKwkJCQkweDgwMDAwMDAwVUwgPj4gKGkgJiAweDFmKTsKKyNlbHNlIC8qIENPTkZJR19QUEM2NCAqLworCQlpZiAoc3lzX2NhbGxfdGFibGVbaV0gIT0gc3lzX25pX3N5c2NhbGwpCisJCQl2ZHNvX2RhdGEtPnN5c2NhbGxfbWFwXzMyW2kgPj4gNV0gfD0KKwkJCQkweDgwMDAwMDAwVUwgPj4gKGkgJiAweDFmKTsKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KKwl9Cit9CisKKwordm9pZCBfX2luaXQgdmRzb19pbml0KHZvaWQpCit7CisJaW50IGk7CisKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwkvKgorCSAqIEZpbGwgdXAgdGhlICJzeXN0ZW1jZmciIHN0dWZmIGZvciBiYWNrd2FyZCBjb21wYXRpYmxpdHkKKwkgKi8KKwlzdHJjcHkodmRzb19kYXRhLT5leWVfY2F0Y2hlciwgIlNZU1RFTUNGRzpQUEM2NCIpOworCXZkc29fZGF0YS0+dmVyc2lvbi5tYWpvciA9IFNZU1RFTUNGR19NQUpPUjsKKwl2ZHNvX2RhdGEtPnZlcnNpb24ubWlub3IgPSBTWVNURU1DRkdfTUlOT1I7CisJdmRzb19kYXRhLT5wcm9jZXNzb3IgPSBtZnNwcihTUFJOX1BWUik7CisJdmRzb19kYXRhLT5wbGF0Zm9ybSA9IF9tYWNoaW5lOworCXZkc29fZGF0YS0+cGh5c2ljYWxNZW1vcnlTaXplID0gbG1iX3BoeXNfbWVtX3NpemUoKTsKKwl2ZHNvX2RhdGEtPmRjYWNoZV9zaXplID0gcHBjNjRfY2FjaGVzLmRzaXplOworCXZkc29fZGF0YS0+ZGNhY2hlX2xpbmVfc2l6ZSA9IHBwYzY0X2NhY2hlcy5kbGluZV9zaXplOworCXZkc29fZGF0YS0+aWNhY2hlX3NpemUgPSBwcGM2NF9jYWNoZXMuaXNpemU7CisJdmRzb19kYXRhLT5pY2FjaGVfbGluZV9zaXplID0gcHBjNjRfY2FjaGVzLmlsaW5lX3NpemU7CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgNjQgYml0cyB2RFNPCisJICovCisJdmRzbzY0X3BhZ2VzID0gKCZ2ZHNvNjRfZW5kIC0gJnZkc282NF9zdGFydCkgPj4gUEFHRV9TSElGVDsKKwlEQkcoInZkc282NF9rYmFzZTogJXAsIDB4JXggcGFnZXNcbiIsIHZkc282NF9rYmFzZSwgdmRzbzY0X3BhZ2VzKTsKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KKworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIDMyIGJpdHMgdkRTTworCSAqLworCXZkc28zMl9wYWdlcyA9ICgmdmRzbzMyX2VuZCAtICZ2ZHNvMzJfc3RhcnQpID4+IFBBR0VfU0hJRlQ7CisJREJHKCJ2ZHNvMzJfa2Jhc2U6ICVwLCAweCV4IHBhZ2VzXG4iLCB2ZHNvMzJfa2Jhc2UsIHZkc28zMl9wYWdlcyk7CisKKworCS8qCisJICogU2V0dXAgdGhlIHN5c2NhbGwgbWFwIGluIHRoZSB2RE9TCisJICovCisJdmRzb19zZXR1cF9zeXNjYWxsX21hcCgpOworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgdkRTTyBpbWFnZXMgaW4gbWVtb3J5LCB0aGF0IGlzIGRvIG5lY2Vzc2FyeQorCSAqIGZpeHVwcyBvZiB2RFNPIHN5bWJvbHMsIGxvY2F0ZSB0cmFtcG9saW5lcywgZXRjLi4uCisJICovCisJaWYgKHZkc29fc2V0dXAoKSkgeworCQlwcmludGsoS0VSTl9FUlIgInZEU08gc2V0dXAgZmFpbHVyZSwgbm90IGVuYWJsZWQgIVxuIik7CisJCXZkc28zMl9wYWdlcyA9IDA7CisjaWZkZWYgQ09ORklHX1BQQzY0CisJCXZkc282NF9wYWdlcyA9IDA7CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKworCS8qIE1ha2Ugc3VyZSBwYWdlcyBhcmUgaW4gdGhlIGNvcnJlY3Qgc3RhdGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdmRzbzMyX3BhZ2VzOyBpKyspIHsKKwkJc3RydWN0IHBhZ2UgKnBnID0gdmlydF90b19wYWdlKHZkc28zMl9rYmFzZSArIGkqUEFHRV9TSVpFKTsKKwkJQ2xlYXJQYWdlUmVzZXJ2ZWQocGcpOworCQlnZXRfcGFnZShwZyk7CisKKwl9CisjaWZkZWYgQ09ORklHX1BQQzY0CisJZm9yIChpID0gMDsgaSA8IHZkc282NF9wYWdlczsgaSsrKSB7CisJCXN0cnVjdCBwYWdlICpwZyA9IHZpcnRfdG9fcGFnZSh2ZHNvNjRfa2Jhc2UgKyBpKlBBR0VfU0laRSk7CisJCUNsZWFyUGFnZVJlc2VydmVkKHBnKTsKKwkJZ2V0X3BhZ2UocGcpOworCX0KKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KKworCWdldF9wYWdlKHZpcnRfdG9fcGFnZSh2ZHNvX2RhdGEpKTsKK30KKworaW50IGluX2dhdGVfYXJlYV9ub190YXNrKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IGluX2dhdGVfYXJlYShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnZXRfZ2F0ZV92bWEoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJcmV0dXJuIE5VTEw7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL01ha2VmaWxlCnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9NYWtlZmlsZQpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvTWFrZWZpbGUKaW5kZXggMGIxYjBkZi4uOGEzYmVkNSAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL01ha2VmaWxlCkBAIC01LDYgKzUsMTAgQEAKIAogIyBCdWlsZCBydWxlcwogCitpZmVxICgkKENPTkZJR19QUEMzMikseSkKK0NST1NTMzJDQyA6PSAkKENDKQorZW5kaWYKKwogdGFyZ2V0cyA6PSAkKG9iai12ZHNvMzIpIHZkc28zMi5zbwogb2JqLXZkc28zMiA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCAkKG9iai12ZHNvMzIpKQogCkBAIC0xNSw3ICsxOSw3IEBACiAKIG9iai15ICs9IHZkc28zMl93cmFwcGVyLm8KIGV4dHJhLXkgKz0gdmRzbzMyLmxkcwotQ1BQRkxBR1NfdmRzbzMyLmxkcyArPSAtUCAtQyAtVSQoQVJDSCkKK0NQUEZMQUdTX3Zkc28zMi5sZHMgKz0gLVAgLUMgLVVwb3dlcnBjCiAKICMgRm9yY2UgZGVwZW5kZW5jeSAoaW5jYmluIGlzIGJhZCkKICQob2JqKS92ZHNvMzJfd3JhcHBlci5vIDogJChvYmopL3Zkc28zMi5zbwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL2NhY2hlZmx1c2guUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL2NhY2hlZmx1c2guUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL2NhY2hlZmx1c2guUwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvY2FjaGVmbHVzaC5TCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvZGF0YXBhZ2UuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL2RhdGFwYWdlLlMKc2ltaWxhcml0eSBpbmRleCA4MiUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL2RhdGFwYWdlLlMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL2RhdGFwYWdlLlMKaW5kZXggNGY0ZWIwYi4uYTA4YzI2ZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL2RhdGFwYWdlLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvZGF0YXBhZ2UuUwpAQCAtNjYsMyArNjYsMTkgQEAKIAlibHIKICAgLmNmaV9lbmRwcm9jCiBWX0ZVTkNUSU9OX0VORChfX2tlcm5lbF9nZXRfc3lzY2FsbF9tYXApCisKKy8qCisgKiB2b2lkIHVuc2lnbmVkIGxvbmcgbG9uZyAgX19rZXJuZWxfZ2V0X3RiZnJlcSh2b2lkKTsKKyAqCisgKiByZXR1cm5zIHRoZSB0aW1lYmFzZSBmcmVxdWVuY3kgaW4gSFoKKyAqLworVl9GVU5DVElPTl9CRUdJTihfX2tlcm5lbF9nZXRfdGJmcmVxKQorICAuY2ZpX3N0YXJ0cHJvYworCW1mbHIJcjEyCisgIC5jZmlfcmVnaXN0ZXIgbHIscjEyCisJYmwJX19nZXRfZGF0YXBhZ2VAbG9jYWwKKwlsd3oJcjMsQ0ZHX1RCX1RJQ0tTX1BFUl9TRUMocjMpCisJbHd6CXI0LChDRkdfVEJfVElDS1NfUEVSX1NFQyArIDQpKHIzKQorCW10bHIJcjEyCisgIC5jZmlfZW5kcHJvYworVl9GVU5DVElPTl9FTkQoX19rZXJuZWxfZ2V0X3RiZnJlcSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL2dldHRpbWVvZmRheS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvZ2V0dGltZW9mZGF5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWViNWZjOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL2dldHRpbWVvZmRheS5TCkBAIC0wLDAgKzEsMzE1IEBACisvKgorICogVXNlcmxhbmQgaW1wbGVtZW50YXRpb24gb2YgZ2V0dGltZW9mZGF5KCkgZm9yIDMyIGJpdHMgcHJvY2Vzc2VzIGluIGEKKyAqIHBwYzY0IGtlcm5lbCBmb3IgdXNlIGluIHRoZSB2RFNPCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IEJlbmphbWluIEhlcnJlbnNjaG11aWR0IChiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcsCisgKiAgICAgICAgICAgICAgICAgICAgSUJNIENvcnAuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgorI2luY2x1ZGUgPGFzbS92ZHNvLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorCisJLnRleHQKKy8qCisgKiBFeGFjdCBwcm90b3R5cGUgb2YgZ2V0dGltZW9mZGF5CisgKgorICogaW50IF9fa2VybmVsX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYsIHN0cnVjdCB0aW1lem9uZSAqdHopOworICoKKyAqLworVl9GVU5DVElPTl9CRUdJTihfX2tlcm5lbF9nZXR0aW1lb2ZkYXkpCisgIC5jZmlfc3RhcnRwcm9jCisJbWZscglyMTIKKyAgLmNmaV9yZWdpc3RlciBscixyMTIKKworCW1yCXIxMCxyMwkJCS8qIHIxMCBzYXZlcyB0diAqLworCW1yCXIxMSxyNAkJCS8qIHIxMSBzYXZlcyB0eiAqLworCWJsCV9fZ2V0X2RhdGFwYWdlQGxvY2FsCS8qIGdldCBkYXRhIHBhZ2UgKi8KKwltcglyOSwgcjMJCQkvKiBkYXRhcGFnZSBwdHIgaW4gcjkgKi8KKwlibAlfX2RvX2dldF94c2VjQGxvY2FsCS8qIGdldCB4c2VjIGZyb20gdGIgJiBrZXJuZWwgKi8KKwlibmUtCTJmCQkJLyogb3V0IG9mIGxpbmUgLT4gZG8gc3lzY2FsbCAqLworCisJLyogc2Vjb25kcyBhcmUgeHNlYyA+PiAyMCAqLworCXJsd2lubQlyNSxyNCwxMiwyMCwzMQorCXJsd2ltaQlyNSxyMywxMiwwLDE5CisJc3R3CXI1LFRWQUwzMl9UVl9TRUMocjEwKQorCisJLyogZ2V0IHJlbWFpbmluZyB4c2VjIGFuZCBjb252ZXJ0IHRvIHVzZWMuIHdlIHNjYWxlCisJICogdXAgcmVtYWluaW5nIHhzZWMgYnkgMTIgYml0cyBhbmQgZ2V0IHRoZSB0b3AgMzIgYml0cworCSAqIG9mIHRoZSBtdWx0aXBsaWNhdGlvbgorCSAqLworCXJsd2lubQlyNSxyNCwxMiwwLDE5CisJbGlzCXI2LDEwMDAwMDBAaAorCW9yaQlyNixyNiwxMDAwMDAwQGwKKwltdWxod3UJcjUscjUscjYKKwlzdHcJcjUsVFZBTDMyX1RWX1VTRUMocjEwKQorCisJY21wbGkJY3IwLHIxMSwwCQkvKiBjaGVjayBpZiB0eiBpcyBOVUxMICovCisJYmVxCTFmCisJbHd6CXI0LENGR19UWl9NSU5VVEVXRVNUKHI5KS8qIGZpbGwgdHogKi8KKwlsd3oJcjUsQ0ZHX1RaX0RTVFRJTUUocjkpCisJc3R3CXI0LFRaT05FX1RaX01JTldFU1QocjExKQorCXN0dwlyNSxUWk9ORV9UWl9EU1RUSU1FKHIxMSkKKworMToJbXRscglyMTIKKwlsaQlyMywwCisJYmxyCisKKzI6CisJbXRscglyMTIKKwltcglyMyxyMTAKKwltcglyNCxyMTEKKwlsaQlyMCxfX05SX2dldHRpbWVvZmRheQorCXNjCisJYmxyCisgIC5jZmlfZW5kcHJvYworVl9GVU5DVElPTl9FTkQoX19rZXJuZWxfZ2V0dGltZW9mZGF5KQorCisvKgorICogRXhhY3QgcHJvdG90eXBlIG9mIGNsb2NrX2dldHRpbWUoKQorICoKKyAqIGludCBfX2tlcm5lbF9jbG9ja19nZXR0aW1lKGNsb2NraWRfdCBjbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICp0cCk7CisgKgorICovCitWX0ZVTkNUSU9OX0JFR0lOKF9fa2VybmVsX2Nsb2NrX2dldHRpbWUpCisgIC5jZmlfc3RhcnRwcm9jCisJLyogQ2hlY2sgZm9yIHN1cHBvcnRlZCBjbG9jayBJRHMgKi8KKwljbXBsaQljcjAscjMsQ0xPQ0tfUkVBTFRJTUUKKwljbXBsaQljcjEscjMsQ0xPQ0tfTU9OT1RPTklDCisJY3JvcgljcjAsY3IwLGNyMQorCWJuZQljcjAsOTlmCisKKwltZmxyCXIxMgkJCS8qIHIxMiBzYXZlcyBsciAqLworICAuY2ZpX3JlZ2lzdGVyIGxyLHIxMgorCW1yCXIxMCxyMwkJCS8qIHIxMCBzYXZlcyBpZCAqLworCW1yCXIxMSxyNAkJCS8qIHIxMSBzYXZlcyB0cCAqLworCWJsCV9fZ2V0X2RhdGFwYWdlQGxvY2FsCS8qIGdldCBkYXRhIHBhZ2UgKi8KKwltcglyOSwgcjMJCQkvKiBkYXRhcGFnZSBwdHIgaW4gcjkgKi8KKwliZXEJY3IxLDUwZgkJCS8qIGlmIG1vbm90b25pYyAtPiBqdW1wIHRoZXJlICovCisKKwkvKgorCSAqIENMT0NLX1JFQUxUSU1FCisJICovCisKKwlibAlfX2RvX2dldF94c2VjQGxvY2FsCS8qIGdldCB4c2VjIGZyb20gdGIgJiBrZXJuZWwgKi8KKwlibmUtCTk4ZgkJCS8qIG91dCBvZiBsaW5lIC0+IGRvIHN5c2NhbGwgKi8KKworCS8qIHNlY29uZHMgYXJlIHhzZWMgPj4gMjAgKi8KKwlybHdpbm0JcjUscjQsMTIsMjAsMzEKKwlybHdpbWkJcjUscjMsMTIsMCwxOQorCXN0dwlyNSxUU1BDMzJfVFZfU0VDKHIxMSkKKworCS8qIGdldCByZW1haW5pbmcgeHNlYyBhbmQgY29udmVydCB0byBuc2VjLiB3ZSBzY2FsZQorCSAqIHVwIHJlbWFpbmluZyB4c2VjIGJ5IDEyIGJpdHMgYW5kIGdldCB0aGUgdG9wIDMyIGJpdHMKKwkgKiBvZiB0aGUgbXVsdGlwbGljYXRpb24sIHRoZW4gd2UgbXVsdGlwbHkgYnkgMTAwMAorCSAqLworCXJsd2lubQlyNSxyNCwxMiwwLDE5CisJbGlzCXI2LDEwMDAwMDBAaAorCW9yaQlyNixyNiwxMDAwMDAwQGwKKwltdWxod3UJcjUscjUscjYKKwltdWxsaQlyNSxyNSwxMDAwCisJc3R3CXI1LFRTUEMzMl9UVl9OU0VDKHIxMSkKKwltdGxyCXIxMgorCWxpCXIzLDAKKwlibHIKKworCS8qCisJICogQ0xPQ0tfTU9OT1RPTklDCisJICovCisKKzUwOglibAlfX2RvX2dldF94c2VjQGxvY2FsCS8qIGdldCB4c2VjIGZyb20gdGIgJiBrZXJuZWwgKi8KKwlibmUtCTk4ZgkJCS8qIG91dCBvZiBsaW5lIC0+IGRvIHN5c2NhbGwgKi8KKworCS8qIHNlY29uZHMgYXJlIHhzZWMgPj4gMjAgKi8KKwlybHdpbm0JcjYscjQsMTIsMjAsMzEKKwlybHdpbWkJcjYscjMsMTIsMCwxOQorCisJLyogZ2V0IHJlbWFpbmluZyB4c2VjIGFuZCBjb252ZXJ0IHRvIG5zZWMuIHdlIHNjYWxlCisJICogdXAgcmVtYWluaW5nIHhzZWMgYnkgMTIgYml0cyBhbmQgZ2V0IHRoZSB0b3AgMzIgYml0cworCSAqIG9mIHRoZSBtdWx0aXBsaWNhdGlvbiwgdGhlbiB3ZSBtdWx0aXBseSBieSAxMDAwCisJICovCisJcmx3aW5tCXI3LHI0LDEyLDAsMTkKKwlsaXMJcjUsMTAwMDAwMEBoCisJb3JpCXI1LHI1LDEwMDAwMDBAbAorCW11bGh3dQlyNyxyNyxyNQorCW11bGxpCXI3LHI3LDEwMDAKKworCS8qIG5vdyB3ZSBtdXN0IGZpeHVwIHVzaW5nIHdhbGwgdG8gbW9ub3RvbmljLiBXZSBuZWVkIHRvIHNuYXBzaG90CisJICogdGhhdCB2YWx1ZSBhbmQgZG8gdGhlIGNvdW50ZXIgdHJpY2sgYWdhaW4uIEZvcnR1bmF0ZWx5LCB3ZSBzdGlsbAorCSAqIGhhdmUgdGhlIGNvdW50ZXIgdmFsdWUgaW4gcjggdGhhdCB3YXMgcmV0dXJuZWQgYnkgX19kb19nZXRfeHNlYy4KKwkgKiBBdCB0aGlzIHBvaW50LCByNixyNyBjb250YWluIG91ciBzZWMvbnNlYyB2YWx1ZXMsIHIzLHI0IGFuZCByNQorCSAqIGNhbiBiZSB1c2VkCisJICovCisKKwlsd3oJcjMsV1RPTV9DTE9DS19TRUMocjkpCisJbHd6CXI0LFdUT01fQ0xPQ0tfTlNFQyhyOSkKKworCS8qIFdlIG5vdyBoYXZlIG91ciByZXN1bHQgaW4gcjMscjQuIFdlIGNyZWF0ZSBhIGZha2UgZGVwZW5kZW5jeQorCSAqIG9uIHRoYXQgcmVzdWx0IGFuZCByZS1jaGVjayB0aGUgY291bnRlcgorCSAqLworCW9yCXI1LHI0LHIzCisJeG9yCXIwLHI1LHI1CisJYWRkCXI5LHI5LHIwCisjaWZkZWYgQ09ORklHX1BQQzY0CisJbHd6CXIwLChDRkdfVEJfVVBEQVRFX0NPVU5UKzQpKHI5KQorI2Vsc2UKKwlsd3oJcjAsKENGR19UQl9VUERBVEVfQ09VTlQpKHI5KQorI2VuZGlmCisgICAgICAgIGNtcGwgICAgY3IwLHI4LHIwCQkvKiBjaGVjayBpZiB1cGRhdGVkICovCisJYm5lLQk1MGIKKworCS8qIENhbGN1bGF0ZSBhbmQgc3RvcmUgcmVzdWx0LiBOb3RlIHRoYXQgdGhpcyBtaW1taWNzIHRoZSBDIGNvZGUsCisJICogd2hpY2ggbWF5IGNhdXNlIGZ1bm55IHJlc3VsdHMgaWYgbnNlYyBnb2VzIG5lZ2F0aXZlLi4uIGlzIHRoYXQKKwkgKiBwb3NzaWJsZSBhdCBhbGwgPworCSAqLworCWFkZAlyMyxyMyxyNgorCWFkZAlyNCxyNCxyNworCWxpcwlyNSxOU0VDX1BFUl9TRUNAaAorCW9yaQlyNSxyNSxOU0VDX1BFUl9TRUNAbAorCWNtcGxpCWNyMCxyNCxyNQorCWJsdAkxZgorCXN1YmYJcjQscjUscjQKKwlhZGRpCXIzLHIzLDEKKzE6CXN0dwlyMyxUU1BDMzJfVFZfU0VDKHIxMSkKKwlzdHcJcjQsVFNQQzMyX1RWX05TRUMocjExKQorCisJbXRscglyMTIKKwlsaQlyMywwCisJYmxyCisKKwkvKgorCSAqIHN5c2NhbGwgZmFsbGJhY2sKKwkgKi8KKzk4OgorCW10bHIJcjEyCisJbXIJcjMscjEwCisJbXIJcjQscjExCis5OToKKwlsaQlyMCxfX05SX2Nsb2NrX2dldHRpbWUKKwlzYworCWJscgorICAuY2ZpX2VuZHByb2MKK1ZfRlVOQ1RJT05fRU5EKF9fa2VybmVsX2Nsb2NrX2dldHRpbWUpCisKKworLyoKKyAqIEV4YWN0IHByb3RvdHlwZSBvZiBjbG9ja19nZXRyZXMoKQorICoKKyAqIGludCBfX2tlcm5lbF9jbG9ja19nZXRyZXMoY2xvY2tpZF90IGNsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKnJlcyk7CisgKgorICovCitWX0ZVTkNUSU9OX0JFR0lOKF9fa2VybmVsX2Nsb2NrX2dldHJlcykKKyAgLmNmaV9zdGFydHByb2MKKwkvKiBDaGVjayBmb3Igc3VwcG9ydGVkIGNsb2NrIElEcyAqLworCWNtcHdpCWNyMCxyMyxDTE9DS19SRUFMVElNRQorCWNtcHdpCWNyMSxyMyxDTE9DS19NT05PVE9OSUMKKwljcm9yCWNyMCxjcjAsY3IxCisJYm5lCWNyMCw5OWYKKworCWxpCXIzLDAKKwljbXBsaQljcjAscjQsMAorCWJlcWxyCisJbGlzCXI1LENMT0NLX1JFQUxUSU1FX1JFU0BoCisJb3JpCXI1LHI1LENMT0NLX1JFQUxUSU1FX1JFU0BsCisJc3R3CXIzLFRTUEMzMl9UVl9TRUMocjQpCisJc3R3CXI1LFRTUEMzMl9UVl9OU0VDKHI0KQorCWJscgorCisJLyoKKwkgKiBzeXNjYWxsIGZhbGxiYWNrCisJICovCis5OToKKwlsaQlyMCxfX05SX2Nsb2NrX2dldHJlcworCXNjCisJYmxyCisgIC5jZmlfZW5kcHJvYworVl9GVU5DVElPTl9FTkQoX19rZXJuZWxfY2xvY2tfZ2V0cmVzKQorCisKKy8qCisgKiBUaGlzIGlzIHRoZSBjb3JlIG9mIGdldHRpbWVvZmRheSgpICYgZnJpZW5kcywgaXQgcmV0dXJucyB0aGUgeHNlYworICogdmFsdWUgaW4gcjMgJiByNCBhbmQgZXhwZWN0cyB0aGUgZGF0YXBhZ2UgcHRyIChub24gY2xvYmJlcmVkKQorICogaW4gcjkuIGNsb2JiZXJzIHIwLHI0LHI1LHI2LHI3LHI4LgorICogV2hlbiByZXR1cm5pbmcsIHI4IGNvbnRhaW5zIHRoZSBjb3VudGVyIHZhbHVlIHRoYXQgY2FuIGJlIHJldXNlZAorICogYnkgdGhlIG1vbm90b25pYyBjbG9jayBpbXBsZW1lbnRhdGlvbgorICovCitfX2RvX2dldF94c2VjOgorICAuY2ZpX3N0YXJ0cHJvYworCS8qIENoZWNrIGZvciB1cGRhdGUgY291bnQgJiBsb2FkIHZhbHVlcy4gV2UgdXNlIHRoZSBsb3cKKwkgKiBvcmRlciAzMiBiaXRzIG9mIHRoZSB1cGRhdGUgY291bnQKKwkgKi8KKyNpZmRlZiBDT05GSUdfUFBDNjQKKzE6CWx3eglyOCwoQ0ZHX1RCX1VQREFURV9DT1VOVCs0KShyOSkKKyNlbHNlCisxOglsd3oJcjgsKENGR19UQl9VUERBVEVfQ09VTlQpKHI5KQorI2VuZGlmCisJYW5kaS4JcjAscjgsMQkJCS8qIHBlbmRpbmcgdXBkYXRlID8gbG9vcCAqLworCWJuZS0JMWIKKwl4b3IJcjAscjgscjgJCS8qIGNyZWF0ZSBkZXBlbmRlbmN5ICovCisJYWRkCXI5LHI5LHIwCisKKwkvKiBMb2FkIG9yaWcgc3RhbXAgKG9mZnNldCB0byBUQikgKi8KKwlsd3oJcjUsQ0ZHX1RCX09SSUdfU1RBTVAocjkpCisJbHd6CXI2LChDRkdfVEJfT1JJR19TVEFNUCs0KShyOSkKKworCS8qIEdldCBhIHN0YWJsZSBUQiB2YWx1ZSAqLworMjoJbWZ0YnUJcjMKKwltZnRibAlyNAorCW1mdGJ1CXIwCisJY21wbAljcjAscjMscjAKKwlibmUtCTJiCisKKwkvKiBTdWJzdHJhY3QgdGIgb3JpZyBzdGFtcC4gSWYgdGhlIGhpZ2ggcGFydCBpcyBub24temVybywgd2UganVtcCB0bworCSAqIHRoZSBzbG93IHBhdGggd2hpY2ggY2FsbCB0aGUgc3lzY2FsbC4KKwkgKiBJZiBpdCdzIG9rLCB0aGVuIHdlIGhhdmUgb3VyIDMyIGJpdHMgdGJfdGlja3MgdmFsdWUgaW4gcjcKKwkgKi8KKwlzdWJmYwlyNyxyNixyNAorCXN1YmZlLglyMCxyNSxyMworCWJuZS0JM2YKKworCS8qIExvYWQgc2NhbGUgZmFjdG9yICYgZG8gbXVsdGlwbGljYXRpb24gKi8KKwlsd3oJcjUsQ0ZHX1RCX1RPX1hTKHI5KQkvKiBsb2FkIHZhbHVlcyAqLworCWx3eglyNiwoQ0ZHX1RCX1RPX1hTKzQpKHI5KQorCW11bGh3dQlyNCxyNyxyNQorCW11bGh3dQlyNixyNyxyNgorCW11bGx3CXIwLHI3LHI1CisJYWRkYwlyNixyNixyMAorCisJLyogQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSB0aGUgc2NhbGVkIHhzZWMgdmFsdWUgaW4gcjQgKyBYRVI6Q0EKKwkgKiB3ZSBsb2FkICYgYWRkIHRoZSBzdGFtcCBzaW5jZSBlcG9jaAorCSAqLworCWx3eglyNSxDRkdfU1RBTVBfWFNFQyhyOSkKKwlsd3oJcjYsKENGR19TVEFNUF9YU0VDKzQpKHI5KQorCWFkZGUJcjQscjQscjYKKwlhZGR6ZQlyMyxyNQorCisJLyogV2Ugbm93IGhhdmUgb3VyIHJlc3VsdCBpbiByMyxyNC4gV2UgY3JlYXRlIGEgZmFrZSBkZXBlbmRlbmN5CisJICogb24gdGhhdCByZXN1bHQgYW5kIHJlLWNoZWNrIHRoZSBjb3VudGVyCisJICovCisJb3IJcjYscjQscjMKKwl4b3IJcjAscjYscjYKKwlhZGQJcjkscjkscjAKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwlsd3oJcjAsKENGR19UQl9VUERBVEVfQ09VTlQrNCkocjkpCisjZWxzZQorCWx3eglyMCwoQ0ZHX1RCX1VQREFURV9DT1VOVCkocjkpCisjZW5kaWYKKyAgICAgICAgY21wbCAgICBjcjAscjgscjAJCS8qIGNoZWNrIGlmIHVwZGF0ZWQgKi8KKwlibmUtCTFiCisKKwkvKiBXYXJuaW5nICEgVGhlIGNhbGxlciBleHBlY3RzIENSOkVRIHRvIGJlIHNldCB0byBpbmRpY2F0ZSBhCisJICogc3VjY2Vzc2Z1bCBjYWxjdWxhdGlvbiAoc28gaXQgd29uJ3QgZmFsbGJhY2sgdG8gdGhlIHN5c2NhbGwKKwkgKiBtZXRob2QpLiBXZSBoYXZlIG92ZXJyaWRlbiB0aGF0IENSIGJpdCBpbiB0aGUgY291bnRlciBjaGVjaywKKwkgKiBidXQgZm9ydHVuYXRlbHksIHRoZSBsb29wIGV4aXQgY29uZGl0aW9uIF9pc18gQ1I6RVEgc2V0LCBzbworCSAqIHdlIGNhbiBleGl0IHNhZmVseSBoZXJlLiBJZiB5b3UgY2hhbmdlIHRoaXMgY29kZSwgYmUgY2FyZWZ1bAorCSAqIG9mIHRoYXQgc2lkZSBlZmZlY3QuCisJICovCiszOglibHIKKyAgLmNmaV9lbmRwcm9jCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvbm90ZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvbm90ZS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvbm90ZS5TCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9ub3RlLlMKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9zaWd0cmFtcC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvc2lndHJhbXAuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL3NpZ3RyYW1wLlMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3NpZ3RyYW1wLlMKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi92ZHNvMzIubGRzLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi92ZHNvMzIubGRzLlMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL3Zkc28zMi5sZHMuUwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TCmluZGV4IDZmODdhOTEuLmY0YmFkNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi92ZHNvMzIubGRzLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TCkBAIC0xMDIsOSArMTAyLDEyIEBACiB7CiAgIFZEU09fVkVSU0lPTl9TVFJJTkcgewogICAgIGdsb2JhbDoKLQlfX2tlcm5lbF9kYXRhcGFnZV9vZmZzZXQ7IC8qIEhhcyB0byBiZSB0aGVyZSBmb3IgdGhlIGtlcm5lbCB0byBmaW5kIGl0ICovCisJX19rZXJuZWxfZGF0YXBhZ2Vfb2Zmc2V0OyAvKiBIYXMgdG8gYmUgdGhlcmUgZm9yIHRoZSBrZXJuZWwgdG8gZmluZCAqLwogCV9fa2VybmVsX2dldF9zeXNjYWxsX21hcDsKIAlfX2tlcm5lbF9nZXR0aW1lb2ZkYXk7CisJX19rZXJuZWxfY2xvY2tfZ2V0dGltZTsKKwlfX2tlcm5lbF9jbG9ja19nZXRyZXM7CisJX19rZXJuZWxfZ2V0X3RiZnJlcTsKIAlfX2tlcm5lbF9zeW5jX2RpY2FjaGU7CiAJX19rZXJuZWxfc3luY19kaWNhY2hlX3A1OwogCV9fa2VybmVsX3NpZ3RyYW1wMzI7CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvdmRzbzMyX3dyYXBwZXIuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMl93cmFwcGVyLlMKc2ltaWxhcml0eSBpbmRleCA3OSUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL3Zkc28zMl93cmFwcGVyLlMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMl93cmFwcGVyLlMKaW5kZXggNzZjYTI4ZS4uNTU2ZjBjYSAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL3Zkc28zMl93cmFwcGVyLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvdmRzbzMyX3dyYXBwZXIuUwpAQCAtNiw3ICs2LDcgQEAKIAkuZ2xvYmwgdmRzbzMyX3N0YXJ0LCB2ZHNvMzJfZW5kCiAJLmJhbGlnbiBQQUdFX1NJWkUKIHZkc28zMl9zdGFydDoKLQkuaW5jYmluICJhcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvdmRzbzMyLnNvIgorCS5pbmNiaW4gImFyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMi5zbyIKIAkuYmFsaWduIFBBR0VfU0laRQogdmRzbzMyX2VuZDoKIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvTWFrZWZpbGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3Zkc282NC9NYWtlZmlsZQpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvTWFrZWZpbGUKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC9jYWNoZWZsdXNoLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9jYWNoZWZsdXNoLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3Zkc282NC9jYWNoZWZsdXNoLlMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L2NhY2hlZmx1c2guUwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L2RhdGFwYWdlLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9kYXRhcGFnZS5TCnNpbWlsYXJpdHkgaW5kZXggODMlCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3Zkc282NC9kYXRhcGFnZS5TCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9kYXRhcGFnZS5TCmluZGV4IGVkNmU1OTkuLmU2N2VkYTBmIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvZGF0YXBhZ2UuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9kYXRhcGFnZS5TCkBAIC02NiwzICs2NiwxOSBAQAogCWJscgogICAuY2ZpX2VuZHByb2MKIFZfRlVOQ1RJT05fRU5EKF9fa2VybmVsX2dldF9zeXNjYWxsX21hcCkKKworCisvKgorICogdm9pZCB1bnNpZ25lZCBsb25nICBfX2tlcm5lbF9nZXRfdGJmcmVxKHZvaWQpOworICoKKyAqIHJldHVybnMgdGhlIHRpbWViYXNlIGZyZXF1ZW5jeSBpbiBIWgorICovCitWX0ZVTkNUSU9OX0JFR0lOKF9fa2VybmVsX2dldF90YmZyZXEpCisgIC5jZmlfc3RhcnRwcm9jCisJbWZscglyMTIKKyAgLmNmaV9yZWdpc3RlciBscixyMTIKKwlibAlWX0xPQ0FMX0ZVTkMoX19nZXRfZGF0YXBhZ2UpCisJbGQJcjMsQ0ZHX1RCX1RJQ0tTX1BFUl9TRUMocjMpCisJbXRscglyMTIKKyAgLmNmaV9lbmRwcm9jCitWX0ZVTkNUSU9OX0VORChfX2tlcm5lbF9nZXRfdGJmcmVxKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvZ2V0dGltZW9mZGF5LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9nZXR0aW1lb2ZkYXkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzcxYzAyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvZ2V0dGltZW9mZGF5LlMKQEAgLTAsMCArMSwyNDIgQEAKKy8qCisgKiBVc2VybGFuZCBpbXBsZW1lbnRhdGlvbiBvZiBnZXR0aW1lb2ZkYXkoKSBmb3IgNjQgYml0cyBwcm9jZXNzZXMgaW4gYQorICogcHBjNjQga2VybmVsIGZvciB1c2UgaW4gdGhlIHZEU08KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQmVuamFtaW4gSGVycmVuc2NobXVpZHQgKGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZyksCisgKiAgICAgICAgICAgICAgICAgICAgSUJNIENvcnAuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgorI2luY2x1ZGUgPGFzbS92ZHNvLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorCisJLnRleHQKKy8qCisgKiBFeGFjdCBwcm90b3R5cGUgb2YgZ2V0dGltZW9mZGF5CisgKgorICogaW50IF9fa2VybmVsX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYsIHN0cnVjdCB0aW1lem9uZSAqdHopOworICoKKyAqLworVl9GVU5DVElPTl9CRUdJTihfX2tlcm5lbF9nZXR0aW1lb2ZkYXkpCisgIC5jZmlfc3RhcnRwcm9jCisJbWZscglyMTIKKyAgLmNmaV9yZWdpc3RlciBscixyMTIKKworCW1yCXIxMSxyMwkJCS8qIHIxMSBob2xkcyB0diAqLworCW1yCXIxMCxyNAkJCS8qIHIxMCBob2xkcyB0eiAqLworCWJsCVZfTE9DQUxfRlVOQyhfX2dldF9kYXRhcGFnZSkJLyogZ2V0IGRhdGEgcGFnZSAqLworCWJsCVZfTE9DQUxfRlVOQyhfX2RvX2dldF94c2VjKQkvKiBnZXQgeHNlYyBmcm9tIHRiICYga2VybmVsICovCisJbGlzICAgICByNywxNQkJCS8qIHI3ID0gMTAwMDAwMCA9IFVTRUNfUEVSX1NFQyAqLworCW9yaSAgICAgcjcscjcsMTY5NjAKKwlybGRpY2wgIHI1LHI0LDQ0LDIwCQkvKiByNSA9IHNlYyA9IHhzZWMgLyBYU0VDX1BFUl9TRUMgKi8KKwlybGRpY3IgIHI2LHI1LDIwLDQzCQkvKiByNiA9IHNlYyAqIFhTRUNfUEVSX1NFQyAqLworCXN0ZAlyNSxUVkFMNjRfVFZfU0VDKHIxMSkJLyogc3RvcmUgc2VjIGluIHR2ICovCisJc3ViZglyMCxyNixyNAkJLyogcjAgPSB4c2VjID0gKHhzZWMgLSByNikgKi8KKwltdWxsZCAgIHIwLHIwLHI3CQkvKiB1c2VjID0gKHhzZWMgKiBVU0VDX1BFUl9TRUMpIC8KKwkJCQkJICogWFNFQ19QRVJfU0VDCisJCQkJCSAqLworCXJsZGljbCAgcjAscjAsNDQsMjAKKwljbXBsZGkJY3IwLHIxMCwwCQkvKiBjaGVjayBpZiB0eiBpcyBOVUxMICovCisJc3RkCXIwLFRWQUw2NF9UVl9VU0VDKHIxMSkJLyogc3RvcmUgdXNlYyBpbiB0diAqLworCWJlcQkxZgorCWx3eglyNCxDRkdfVFpfTUlOVVRFV0VTVChyMykvKiBmaWxsIHR6ICovCisJbHd6CXI1LENGR19UWl9EU1RUSU1FKHIzKQorCXN0dwlyNCxUWk9ORV9UWl9NSU5XRVNUKHIxMCkKKwlzdHcJcjUsVFpPTkVfVFpfRFNUVElNRShyMTApCisxOgltdGxyCXIxMgorCWxpCXIzLDAJCQkvKiBhbHdheXMgc3VjY2VzcyAqLworCWJscgorICAuY2ZpX2VuZHByb2MKK1ZfRlVOQ1RJT05fRU5EKF9fa2VybmVsX2dldHRpbWVvZmRheSkKKworCisvKgorICogRXhhY3QgcHJvdG90eXBlIG9mIGNsb2NrX2dldHRpbWUoKQorICoKKyAqIGludCBfX2tlcm5lbF9jbG9ja19nZXR0aW1lKGNsb2NraWRfdCBjbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICp0cCk7CisgKgorICovCitWX0ZVTkNUSU9OX0JFR0lOKF9fa2VybmVsX2Nsb2NrX2dldHRpbWUpCisgIC5jZmlfc3RhcnRwcm9jCisJLyogQ2hlY2sgZm9yIHN1cHBvcnRlZCBjbG9jayBJRHMgKi8KKwljbXB3aQljcjAscjMsQ0xPQ0tfUkVBTFRJTUUKKwljbXB3aQljcjEscjMsQ0xPQ0tfTU9OT1RPTklDCisJY3JvcgljcjAsY3IwLGNyMQorCWJuZQljcjAsOTlmCisKKwltZmxyCXIxMgkJCS8qIHIxMiBzYXZlcyBsciAqLworICAuY2ZpX3JlZ2lzdGVyIGxyLHIxMgorCW1yCXIxMCxyMwkJCS8qIHIxMCBzYXZlcyBpZCAqLworCW1yCXIxMSxyNAkJCS8qIHIxMSBzYXZlcyB0cCAqLworCWJsCVZfTE9DQUxfRlVOQyhfX2dldF9kYXRhcGFnZSkJLyogZ2V0IGRhdGEgcGFnZSAqLworCWJlcQljcjEsNTBmCQkJLyogaWYgbW9ub3RvbmljIC0+IGp1bXAgdGhlcmUgKi8KKworCS8qCisJICogQ0xPQ0tfUkVBTFRJTUUKKwkgKi8KKworCWJsCVZfTE9DQUxfRlVOQyhfX2RvX2dldF94c2VjKQkvKiBnZXQgeHNlYyBmcm9tIHRiICYga2VybmVsICovCisKKwlsaXMgICAgIHI3LDB4M2I5YQkJLyogcjcgPSAxMDAwMDAwMDAwID0gTlNFQ19QRVJfU0VDICovCisJb3JpICAgICByNyxyNywweGNhMDAKKwlybGRpY2wgIHI1LHI0LDQ0LDIwCQkvKiByNSA9IHNlYyA9IHhzZWMgLyBYU0VDX1BFUl9TRUMgKi8KKwlybGRpY3IgIHI2LHI1LDIwLDQzCQkvKiByNiA9IHNlYyAqIFhTRUNfUEVSX1NFQyAqLworCXN0ZAlyNSxUU1BDNjRfVFZfU0VDKHIxMSkJLyogc3RvcmUgc2VjIGluIHR2ICovCisJc3ViZglyMCxyNixyNAkJLyogcjAgPSB4c2VjID0gKHhzZWMgLSByNikgKi8KKwltdWxsZCAgIHIwLHIwLHI3CQkvKiBuc2VjID0gKHhzZWMgKiBOU0VDX1BFUl9TRUMpIC8KKwkJCQkJICogWFNFQ19QRVJfU0VDCisJCQkJCSAqLworCXJsZGljbCAgcjAscjAsNDQsMjAKKwlzdGQJcjAsVFNQQzY0X1RWX05TRUMocjExKQkvKiBzdG9yZSBuc2VjIGluIHRwICovCisKKwltdGxyCXIxMgorCWxpCXIzLDAKKwlibHIKKworCS8qCisJICogQ0xPQ0tfTU9OT1RPTklDCisJICovCisKKzUwOglibAlWX0xPQ0FMX0ZVTkMoX19kb19nZXRfeHNlYykJLyogZ2V0IHhzZWMgZnJvbSB0YiAmIGtlcm5lbCAqLworCisJbGlzICAgICByNywweDNiOWEJCS8qIHI3ID0gMTAwMDAwMDAwMCA9IE5TRUNfUEVSX1NFQyAqLworCW9yaSAgICAgcjcscjcsMHhjYTAwCisJcmxkaWNsICByNSxyNCw0NCwyMAkJLyogcjUgPSBzZWMgPSB4c2VjIC8gWFNFQ19QRVJfU0VDICovCisJcmxkaWNyICByNixyNSwyMCw0MwkJLyogcjYgPSBzZWMgKiBYU0VDX1BFUl9TRUMgKi8KKwlzdWJmCXIwLHI2LHI0CQkvKiByMCA9IHhzZWMgPSAoeHNlYyAtIHI2KSAqLworCW11bGxkICAgcjAscjAscjcJCS8qIG5zZWMgPSAoeHNlYyAqIE5TRUNfUEVSX1NFQykgLworCQkJCQkgKiBYU0VDX1BFUl9TRUMKKwkJCQkJICovCisJcmxkaWNsICByNixyMCw0NCwyMAorCisJLyogbm93IHdlIG11c3QgZml4dXAgdXNpbmcgd2FsbCB0byBtb25vdG9uaWMuIFdlIG5lZWQgdG8gc25hcHNob3QKKwkgKiB0aGF0IHZhbHVlIGFuZCBkbyB0aGUgY291bnRlciB0cmljayBhZ2Fpbi4gRm9ydHVuYXRlbHksIHdlIHN0aWxsCisJICogaGF2ZSB0aGUgY291bnRlciB2YWx1ZSBpbiByOCB0aGF0IHdhcyByZXR1cm5lZCBieSBfX2RvX2dldF94c2VjLgorCSAqIEF0IHRoaXMgcG9pbnQsIHI1LHI2IGNvbnRhaW4gb3VyIHNlYy9uc2VjIHZhbHVlcy4KKwkgKiBjYW4gYmUgdXNlZAorCSAqLworCisJbHd6CXI0LFdUT01fQ0xPQ0tfU0VDKHI5KQorCWx3eglyNyxXVE9NX0NMT0NLX05TRUMocjkpCisKKwkvKiBXZSBub3cgaGF2ZSBvdXIgcmVzdWx0IGluIHI0LHI3LiBXZSBjcmVhdGUgYSBmYWtlIGRlcGVuZGVuY3kKKwkgKiBvbiB0aGF0IHJlc3VsdCBhbmQgcmUtY2hlY2sgdGhlIGNvdW50ZXIKKwkgKi8KKwlvcglyOSxyNCxyNworCXhvcglyMCxyOSxyOQorCWFkZAlyMyxyMyxyMAorCWxkCXIwLENGR19UQl9VUERBVEVfQ09VTlQocjMpCisgICAgICAgIGNtcGxkICAgY3IwLHIwLHI4CQkvKiBjaGVjayBpZiB1cGRhdGVkICovCisJYm5lLQk1MGIKKworCS8qIENhbGN1bGF0ZSBhbmQgc3RvcmUgcmVzdWx0LiBOb3RlIHRoYXQgdGhpcyBtaW1taWNzIHRoZSBDIGNvZGUsCisJICogd2hpY2ggbWF5IGNhdXNlIGZ1bm55IHJlc3VsdHMgaWYgbnNlYyBnb2VzIG5lZ2F0aXZlLi4uIGlzIHRoYXQKKwkgKiBwb3NzaWJsZSBhdCBhbGwgPworCSAqLworCWFkZAlyNCxyNCxyNQorCWFkZAlyNyxyNyxyNgorCWxpcwlyOSxOU0VDX1BFUl9TRUNAaAorCW9yaQlyOSxyOSxOU0VDX1BFUl9TRUNAbAorCWNtcGxpCWNyMCxyNyxyOQorCWJsdAkxZgorCXN1YmYJcjcscjkscjcKKwlhZGRpCXI0LHI0LDEKKzE6CXN0ZAlyNCxUU1BDNjRfVFZfU0VDKHIxMSkKKwlzdGQJcjcsVFNQQzY0X1RWX05TRUMocjExKQorCisJbXRscglyMTIKKwlsaQlyMywwCisJYmxyCisKKwkvKgorCSAqIHN5c2NhbGwgZmFsbGJhY2sKKwkgKi8KKzk4OgorCW10bHIJcjEyCisJbXIJcjMscjEwCisJbXIJcjQscjExCis5OToKKwlsaQlyMCxfX05SX2Nsb2NrX2dldHRpbWUKKwlzYworCWJscgorICAuY2ZpX2VuZHByb2MKK1ZfRlVOQ1RJT05fRU5EKF9fa2VybmVsX2Nsb2NrX2dldHRpbWUpCisKKworLyoKKyAqIEV4YWN0IHByb3RvdHlwZSBvZiBjbG9ja19nZXRyZXMoKQorICoKKyAqIGludCBfX2tlcm5lbF9jbG9ja19nZXRyZXMoY2xvY2tpZF90IGNsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKnJlcyk7CisgKgorICovCitWX0ZVTkNUSU9OX0JFR0lOKF9fa2VybmVsX2Nsb2NrX2dldHJlcykKKyAgLmNmaV9zdGFydHByb2MKKwkvKiBDaGVjayBmb3Igc3VwcG9ydGVkIGNsb2NrIElEcyAqLworCWNtcHdpCWNyMCxyMyxDTE9DS19SRUFMVElNRQorCWNtcHdpCWNyMSxyMyxDTE9DS19NT05PVE9OSUMKKwljcm9yCWNyMCxjcjAsY3IxCisJYm5lCWNyMCw5OWYKKworCWxpCXIzLDAKKwljbXBsaQljcjAscjQsMAorCWJlcWxyCisJbGlzCXI1LENMT0NLX1JFQUxUSU1FX1JFU0BoCisJb3JpCXI1LHI1LENMT0NLX1JFQUxUSU1FX1JFU0BsCisJc3RkCXIzLFRTUEM2NF9UVl9TRUMocjQpCisJc3RkCXI1LFRTUEM2NF9UVl9OU0VDKHI0KQorCWJscgorCisJLyoKKwkgKiBzeXNjYWxsIGZhbGxiYWNrCisJICovCis5OToKKwlsaQlyMCxfX05SX2Nsb2NrX2dldHJlcworCXNjCisJYmxyCisgIC5jZmlfZW5kcHJvYworVl9GVU5DVElPTl9FTkQoX19rZXJuZWxfY2xvY2tfZ2V0cmVzKQorCisKKy8qCisgKiBUaGlzIGlzIHRoZSBjb3JlIG9mIGdldHRpbWVvZmRheSgpLCBpdCByZXR1cm5zIHRoZSB4c2VjCisgKiB2YWx1ZSBpbiByNCBhbmQgZXhwZWN0cyB0aGUgZGF0YXBhZ2UgcHRyIChub24gY2xvYmJlcmVkKQorICogaW4gcjMuIGNsb2JiZXJzIHIwLHI0LHI1LHI2LHI3LHI4CisgKiBXaGVuIHJldHVybmluZywgcjggY29udGFpbnMgdGhlIGNvdW50ZXIgdmFsdWUgdGhhdCBjYW4gYmUgcmV1c2VkCisgKi8KK1ZfRlVOQ1RJT05fQkVHSU4oX19kb19nZXRfeHNlYykKKyAgLmNmaV9zdGFydHByb2MKKwkvKiBjaGVjayBmb3IgdXBkYXRlIGNvdW50ICYgbG9hZCB2YWx1ZXMgKi8KKzE6CWxkCXI4LENGR19UQl9VUERBVEVfQ09VTlQocjMpCisJYW5kaS4JcjAscjQsMQkJCS8qIHBlbmRpbmcgdXBkYXRlID8gbG9vcCAqLworCWJuZS0JMWIKKwl4b3IJcjAscjQscjQJCS8qIGNyZWF0ZSBkZXBlbmRlbmN5ICovCisJYWRkCXIzLHIzLHIwCisKKwkvKiBHZXQgVEIgJiBvZmZzZXQgaXQgKi8KKwltZnRiCXI3CisJbGQJcjksQ0ZHX1RCX09SSUdfU1RBTVAocjMpCisJc3ViZglyNyxyOSxyNworCisJLyogU2NhbGUgcmVzdWx0ICovCisJbGQJcjUsQ0ZHX1RCX1RPX1hTKHIzKQorCW11bGhkdQlyNyxyNyxyNQorCisJLyogQWRkIHN0YW1wIHNpbmNlIGVwb2NoICovCisJbGQJcjYsQ0ZHX1NUQU1QX1hTRUMocjMpCisJYWRkCXI0LHI2LHI3CisKKwl4b3IJcjAscjQscjQKKwlhZGQJcjMscjMscjAKKwlsZAlyMCxDRkdfVEJfVVBEQVRFX0NPVU5UKHIzKQorICAgICAgICBjbXBsZCAgIGNyMCxyMCxyOAkJLyogY2hlY2sgaWYgdXBkYXRlZCAqLworCWJuZS0JMWIKKwlibHIKKyAgLmNmaV9lbmRwcm9jCitWX0ZVTkNUSU9OX0VORChfX2RvX2dldF94c2VjKQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L25vdGUuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L25vdGUuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L25vdGUuUwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvbm90ZS5TCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvc2lndHJhbXAuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L3NpZ3RyYW1wLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3Zkc282NC9zaWd0cmFtcC5TCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9zaWd0cmFtcC5TCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvdmRzbzY0Lmxkcy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvdmRzbzY0Lmxkcy5TCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3Zkc282NC92ZHNvNjQubGRzLlMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L3Zkc282NC5sZHMuUwppbmRleCA5Y2IyODE4Li40YmRmMjI0IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvdmRzbzY0Lmxkcy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L3Zkc282NC5sZHMuUwpAQCAtMTAyLDkgKzEwMiwxMiBAQAogewogICBWRFNPX1ZFUlNJT05fU1RSSU5HIHsKICAgICBnbG9iYWw6Ci0JX19rZXJuZWxfZGF0YXBhZ2Vfb2Zmc2V0OyAvKiBIYXMgdG8gYmUgdGhlcmUgZm9yIHRoZSBrZXJuZWwgdG8gZmluZCBpdCAqLworCV9fa2VybmVsX2RhdGFwYWdlX29mZnNldDsgLyogSGFzIHRvIGJlIHRoZXJlIGZvciB0aGUga2VybmVsIHRvIGZpbmQgKi8KIAlfX2tlcm5lbF9nZXRfc3lzY2FsbF9tYXA7CiAgICAgCV9fa2VybmVsX2dldHRpbWVvZmRheTsKKwlfX2tlcm5lbF9jbG9ja19nZXR0aW1lOworCV9fa2VybmVsX2Nsb2NrX2dldHJlczsKKwlfX2tlcm5lbF9nZXRfdGJmcmVxOwogCV9fa2VybmVsX3N5bmNfZGljYWNoZTsKIAlfX2tlcm5lbF9zeW5jX2RpY2FjaGVfcDU7CiAJX19rZXJuZWxfc2lndHJhbXBfcnQ2NDsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC92ZHNvNjRfd3JhcHBlci5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvdmRzbzY0X3dyYXBwZXIuUwpzaW1pbGFyaXR5IGluZGV4IDc5JQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvdmRzbzY0X3dyYXBwZXIuUwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvdmRzbzY0X3dyYXBwZXIuUwppbmRleCA3NzFjMjc0Li4wNTI5Y2I5IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvdmRzbzY0X3dyYXBwZXIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC92ZHNvNjRfd3JhcHBlci5TCkBAIC02LDcgKzYsNyBAQAogCS5nbG9ibCB2ZHNvNjRfc3RhcnQsIHZkc282NF9lbmQKIAkuYmFsaWduIFBBR0VfU0laRQogdmRzbzY0X3N0YXJ0OgotCS5pbmNiaW4gImFyY2gvcHBjNjQva2VybmVsL3Zkc282NC92ZHNvNjQuc28iCisJLmluY2JpbiAiYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvdmRzbzY0LnNvIgogCS5iYWxpZ24gUEFHRV9TSVpFCiB2ZHNvNjRfZW5kOgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL2JpdG9wcy5jIGIvYXJjaC9wb3dlcnBjL2xpYi9iaXRvcHMuYwppbmRleCBiNjdjZTMwLi5mNjhhZDcxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbGliL2JpdG9wcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvYml0b3BzLmMKQEAgLTQxLDcgKzQxLDcgQEAKIAl0bXAgPSAqcDsKIAogZm91bmRfZmlyc3Q6Ci0JdG1wICY9ICh+MFVMID4+ICg2NCAtIHNpemUpKTsKKwl0bXAgJj0gKH4wVUwgPj4gKEJJVFNfUEVSX0xPTkcgLSBzaXplKSk7CiAJaWYgKHRtcCA9PSAwVUwpCQkvKiBBcmUgYW55IGJpdHMgc2V0PyAqLwogCQlyZXR1cm4gcmVzdWx0ICsgc2l6ZTsJLyogTm9wZS4gKi8KIGZvdW5kX21pZGRsZToKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCmluZGV4IDIyZTQ3NDguLjcwNmU4YTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYwpAQCAtODQsMTAgKzg0LDExIEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBkYXJ0X3RhYmxlYmFzZTsKICNlbmRpZiAvKiBDT05GSUdfVTNfREFSVCAqLwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfU0RSMTsKK3N0cnVjdCBtbXVfcHNpemVfZGVmIG1tdV9wc2l6ZV9kZWZzW01NVV9QQUdFX0NPVU5UXTsKKwogaHB0ZV90ICpodGFiX2FkZHJlc3M7CiB1bnNpZ25lZCBsb25nIGh0YWJfaGFzaF9tYXNrOwotdW5zaWduZWQgbG9uZyBfU0RSMTsKLXN0cnVjdCBtbXVfcHNpemVfZGVmIG1tdV9wc2l6ZV9kZWZzW01NVV9QQUdFX0NPVU5UXTsKIGludCBtbXVfbGluZWFyX3BzaXplID0gTU1VX1BBR0VfNEs7CiBpbnQgbW11X3ZpcnR1YWxfcHNpemUgPSBNTVVfUEFHRV80SzsKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCkBAIC0xNjUsNyArMTY2LDcgQEAKIAkJICogbm9ybWFsIGluc2VydCBjYWxsYmFjayBoZXJlLgogCQkgKi8KICNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKLQkJaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gPT0gUExBVEZPUk1fSVNFUklFU19MUEFSKQorCQlpZiAoX21hY2hpbmUgPT0gUExBVEZPUk1fSVNFUklFU19MUEFSKQogCQkJcmV0ID0gaVNlcmllc19ocHRlX2luc2VydChocHRlZywgdmEsCiAJCQkJCQkgIHZpcnRfdG9fYWJzKHBhZGRyKSwKIAkJCQkJCSAgdG1wX21vZGUsCkBAIC0xNzQsNyArMTc1LDcgQEAKIAkJZWxzZQogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTCi0JCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtICYgUExBVEZPUk1fTFBBUikKKwkJaWYgKF9tYWNoaW5lICYgUExBVEZPUk1fTFBBUikKIAkJCXJldCA9IHBTZXJpZXNfbHBhcl9ocHRlX2luc2VydChocHRlZywgdmEsCiAJCQkJCQkgICAgICAgdmlydF90b19hYnMocGFkZHIpLAogCQkJCQkJICAgICAgIHRtcF9tb2RlLApAQCAtMjkzLDcgKzI5NCw3IEBACiAJICogTm90IGluIHRoZSBkZXZpY2UtdHJlZSwgbGV0J3MgZmFsbGJhY2sgb24ga25vd24gc2l6ZQogCSAqIGxpc3QgZm9yIDE2TSBjYXBhYmxlIEdQICYgR1IKIAkgKi8KLQlpZiAoKHN5c3RlbWNmZy0+cGxhdGZvcm0gIT0gUExBVEZPUk1fSVNFUklFU19MUEFSKSAmJgorCWlmICgoX21hY2hpbmUgIT0gUExBVEZPUk1fSVNFUklFU19MUEFSKSAmJgogCSAgICBjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl8xNk1fUEFHRSkpCiAJCW1lbWNweShtbXVfcHNpemVfZGVmcywgbW11X3BzaXplX2RlZmF1bHRzX2dwLAogCQkgICAgICAgc2l6ZW9mKG1tdV9wc2l6ZV9kZWZhdWx0c19ncCkpOwpAQCAtMzY0LDcgKzM2NSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBodGFiX2dldF90YWJsZV9zaXplKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBybmRfbWVtX3NpemUsIHB0ZWdfY291bnQ7CisJdW5zaWduZWQgbG9uZyBtZW1fc2l6ZSwgcm5kX21lbV9zaXplLCBwdGVnX2NvdW50OwogCiAJLyogSWYgaGFzaCBzaXplIGlzbid0IGFscmVhZHkgcHJvdmlkZWQgYnkgdGhlIHBsYXRmb3JtLCB3ZSB0cnkgdG8KIAkgKiByZXRyZWl2ZSBpdCBmcm9tIHRoZSBkZXZpY2UtdHJlZS4gSWYgaXQncyBub3QgdGhlcmUgbmVpdGhlciwgd2UKQEAgLTM3Niw4ICszNzcsOSBAQAogCQlyZXR1cm4gMVVMIDw8IHBwYzY0X3BmdF9zaXplOwogCiAJLyogcm91bmQgbWVtX3NpemUgdXAgdG8gbmV4dCBwb3dlciBvZiAyICovCi0Jcm5kX21lbV9zaXplID0gMVVMIDw8IF9faWxvZzIoc3lzdGVtY2ZnLT5waHlzaWNhbE1lbW9yeVNpemUpOwotCWlmIChybmRfbWVtX3NpemUgPCBzeXN0ZW1jZmctPnBoeXNpY2FsTWVtb3J5U2l6ZSkKKwltZW1fc2l6ZSA9IGxtYl9waHlzX21lbV9zaXplKCk7CisJcm5kX21lbV9zaXplID0gMVVMIDw8IF9faWxvZzIobWVtX3NpemUpOworCWlmIChybmRfbWVtX3NpemUgPCBtZW1fc2l6ZSkKIAkJcm5kX21lbV9zaXplIDw8PSAxOwogCiAJLyogIyBwYWdlcyAvIDIgKi8KQEAgLTM4Niw2ICszODgsMTUgQEAKIAlyZXR1cm4gcHRlZ19jb3VudCA8PCA3OwogfQogCisjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCit2b2lkIGNyZWF0ZV9zZWN0aW9uX21hcHBpbmcodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJCUJVR19PTihodGFiX2JvbHRfbWFwcGluZyhzdGFydCwgZW5kLCBzdGFydCwKKwkJCV9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9DT0hFUkVOVCB8IFBQX1JXWFgsCisJCQltbXVfbGluZWFyX3BzaXplKSk7Cit9CisjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHICovCisKIHZvaWQgX19pbml0IGh0YWJfaW5pdGlhbGl6ZSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgdGFibGUsIGh0YWJfc2l6ZV9ieXRlczsKQEAgLTQxMCw3ICs0MjEsNyBAQAogCiAJaHRhYl9oYXNoX21hc2sgPSBwdGVnX2NvdW50IC0gMTsKIAotCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtICYgUExBVEZPUk1fTFBBUikgeworCWlmIChwbGF0Zm9ybV9pc19scGFyKCkpIHsKIAkJLyogVXNpbmcgYSBoeXBlcnZpc29yIHdoaWNoIG93bnMgdGhlIGh0YWIgKi8KIAkJaHRhYl9hZGRyZXNzID0gTlVMTDsKIAkJX1NEUjEgPSAwOyAKQEAgLTQzMSw2ICs0NDIsOSBAQAogCiAJCS8qIEluaXRpYWxpemUgdGhlIEhQVCB3aXRoIG5vIGVudHJpZXMgKi8KIAkJbWVtc2V0KCh2b2lkICopdGFibGUsIDAsIGh0YWJfc2l6ZV9ieXRlcyk7CisKKwkJLyogU2V0IFNEUjEgKi8KKwkJbXRzcHIoU1BSTl9TRFIxLCBfU0RSMSk7CiAJfQogCiAJbW9kZV9ydyA9IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9DT0hFUkVOVCB8IFBQX1JXWFg7CkBAIC01MDAsNiArNTE0LDEyIEBACiAjdW5kZWYgS0IKICN1bmRlZiBNQgogCit2b2lkIF9faW5pdCBodGFiX2luaXRpYWxpemVfc2Vjb25kYXJ5KHZvaWQpCit7CisJaWYgKCFwbGF0Zm9ybV9pc19scGFyKCkpCisJCW10c3ByKFNQUk5fU0RSMSwgX1NEUjEpOworfQorCiAvKgogICogQ2FsbGVkIGJ5IGFzbSBoYXNodGFibGUuUyBmb3IgZG9pbmcgbGF6eSBpY2FjaGUgZmx1c2gKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYyBiL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMKaW5kZXggNDYxMmE3OS4uN2Q0YjhiNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF8zMi5jCkBAIC04NCw5ICs4NCw2IEBACiAvKiBYWFggc2hvdWxkIGJlIGluIGN1cnJlbnQuaCAgLS0gcGF1bHVzICovCiBleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyZW50X3NldFtOUl9DUFVTXTsKIAotY2hhciAqa2xpbWl0ID0gX2VuZDsKLXN0cnVjdCBkZXZpY2Vfbm9kZSAqbWVtb3J5X25vZGU7Ci0KIGV4dGVybiBpbnQgaW5pdF9ib290bWVtX2RvbmU7CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYwppbmRleCBjZTk3NGM4Li4xMTM0ZjcwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMKQEAgLTIwLDYgKzIwLDggQEAKICAqCiAgKi8KIAorI3VuZGVmIERFQlVHCisKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtNjQsNiArNjYsMTIgQEAKICNpbmNsdWRlIDxhc20vdmRzby5oPgogI2luY2x1ZGUgPGFzbS9pbWFsbG9jLmg+CiAKKyNpZmRlZiBERUJVRworI2RlZmluZSBEQkcoZm10Li4uKSBwcmludGsoZm10KQorI2Vsc2UKKyNkZWZpbmUgREJHKGZtdC4uLikKKyNlbmRpZgorCiAjaWYgUEdUQUJMRV9SQU5HRSA+IFVTRVJfVlNJRF9SQU5HRQogI3dhcm5pbmcgTGltaXRlZCB1c2VyIFZTSUQgcmFuZ2UgbWVhbnMgcGFnZXRhYmxlIHNwYWNlIGlzIHdhc3RlZAogI2VuZGlmCkBAIC03Miw4ICs4MCw2IEBACiAjd2FybmluZyBUQVNLX1NJWkUgaXMgc21hbGxlciB0aGFuIGl0IG5lZWRzIHRvIGJlLgogI2VuZGlmCiAKLXVuc2lnbmVkIGxvbmcga2xpbWl0ID0gKHVuc2lnbmVkIGxvbmcpX2VuZDsKLQogLyogbWF4IGFtb3VudCBvZiBSQU0gdG8gdXNlICovCiB1bnNpZ25lZCBsb25nIF9fbWF4X21lbW9yeTsKIApAQCAtMTg4LDE0ICsxOTQsMTQgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCi1zdGF0aWMgY29uc3QgaW50IHBndGFibGVfY2FjaGVfc2l6ZVsyXSA9IHsKLQlQVEVfVEFCTEVfU0laRSwgUEdEX1RBQkxFX1NJWkUKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcGd0YWJsZV9jYWNoZV9zaXplWzNdID0geworCVBURV9UQUJMRV9TSVpFLCBQTURfVEFCTEVfU0laRSwgUEdEX1RBQkxFX1NJWkUKIH07CiBzdGF0aWMgY29uc3QgY2hhciAqcGd0YWJsZV9jYWNoZV9uYW1lW0FSUkFZX1NJWkUocGd0YWJsZV9jYWNoZV9zaXplKV0gPSB7Ci0JInB0ZV9wbWRfY2FjaGUiLCAicGdkX2NhY2hlIiwKKwkicHRlX3BtZF9jYWNoZSIsICJwbWRfY2FjaGUiLCAicGdkX2NhY2hlIiwKIH07CiAjZWxzZQotc3RhdGljIGNvbnN0IGludCBwZ3RhYmxlX2NhY2hlX3NpemVbMl0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBndGFibGVfY2FjaGVfc2l6ZVsyXSA9IHsKIAlQVEVfVEFCTEVfU0laRSwgUE1EX1RBQkxFX1NJWkUKIH07CiBzdGF0aWMgY29uc3QgY2hhciAqcGd0YWJsZV9jYWNoZV9uYW1lW0FSUkFZX1NJWkUocGd0YWJsZV9jYWNoZV9zaXplKV0gPSB7CkBAIC0yMTMsNiArMjE5LDggQEAKIAkJaW50IHNpemUgPSBwZ3RhYmxlX2NhY2hlX3NpemVbaV07CiAJCWNvbnN0IGNoYXIgKm5hbWUgPSBwZ3RhYmxlX2NhY2hlX25hbWVbaV07CiAKKwkJREJHKCJBbGxvY2F0aW5nIHBhZ2UgdGFibGUgY2FjaGUgJXMgKCMlZCkgIgorCQkgICAgImZvciBzaXplOiAlMDh4Li4uXG4iLCBuYW1lLCBpLCBzaXplKTsKIAkJcGd0YWJsZV9jYWNoZVtpXSA9IGttZW1fY2FjaGVfY3JlYXRlKG5hbWUsCiAJCQkJCQkgICAgIHNpemUsIHNpemUsCiAJCQkJCQkgICAgIFNMQUJfSFdDQUNIRV9BTElHTiB8CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbWVtLmMgYi9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKaW5kZXggNmY1NWVmZC4uZTJjOTVmYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL21lbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9tZW0uYwpAQCAtNDYsOSArNDYsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL2xtYi5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgotI2lmZGVmIENPTkZJR19QUEM2NAogI2luY2x1ZGUgPGFzbS92ZHNvLmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgIm1tdV9kZWNsLmgiCiAKQEAgLTExMCw2ICsxMDgsNyBAQAogdm9pZCBvbmxpbmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlDbGVhclBhZ2VSZXNlcnZlZChwYWdlKTsKKwlzZXRfcGFnZV9jb3VudChwYWdlLCAwKTsKIAlmcmVlX2NvbGRfcGFnZShwYWdlKTsKIAl0b3RhbHJhbV9wYWdlcysrOwogCW51bV9waHlzcGFnZXMrKzsKQEAgLTEyNyw2ICsxMjYsOSBAQAogCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuID0gc3RhcnQgPj4gUEFHRV9TSElGVDsKIAl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gc2l6ZSA+PiBQQUdFX1NISUZUOwogCisJc3RhcnQgKz0gS0VSTkVMQkFTRTsKKwljcmVhdGVfc2VjdGlvbl9tYXBwaW5nKHN0YXJ0LCBzdGFydCArIHNpemUpOworCiAJLyogdGhpcyBzaG91bGQgd29yayBmb3IgbW9zdCBub24taGlnaG1lbSBwbGF0Zm9ybXMgKi8KIAl6b25lID0gcGdkYXRhLT5ub2RlX3pvbmVzOwogCkBAIC0zOTMsMTAgKzM5NSw4IEBACiAKIAltZW1faW5pdF9kb25lID0gMTsKIAotI2lmZGVmIENPTkZJR19QUEM2NAogCS8qIEluaXRpYWxpemUgdGhlIHZEU08gKi8KIAl2ZHNvX2luaXQoKTsKLSNlbmRpZgogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL251bWEuYyBiL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKaW5kZXggZGEwOWJhMC4uYmQyY2YxMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL251bWEuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCkBAIC0xNyw5ICsxNyw4IEBACiAjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGFzbS9zcGFyc2VtZW0uaD4KICNpbmNsdWRlIDxhc20vbG1iLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLSNpbmNsdWRlIDxhc20vYWJzX2FkZHIuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogCkBAIC0yOCw0NSArMjcsMTEzIEBACiBzdGF0aWMgaW50IG51bWFfZGVidWc7CiAjZGVmaW5lIGRiZyhhcmdzLi4uKSBpZiAobnVtYV9kZWJ1ZykgeyBwcmludGsoS0VSTl9JTkZPIGFyZ3MpOyB9CiAKLSNpZmRlZiBERUJVR19OVU1BCi0jZGVmaW5lIEFSUkFZX0lOSVRJQUxJU0VSIC0xCi0jZWxzZQotI2RlZmluZSBBUlJBWV9JTklUSUFMSVNFUiAwCi0jZW5kaWYKLQotaW50IG51bWFfY3B1X2xvb2t1cF90YWJsZVtOUl9DUFVTXSA9IHsgWyAwIC4uLiAoTlJfQ1BVUyAtIDEpXSA9Ci0JQVJSQVlfSU5JVElBTElTRVJ9OwotY2hhciAqbnVtYV9tZW1vcnlfbG9va3VwX3RhYmxlOworaW50IG51bWFfY3B1X2xvb2t1cF90YWJsZVtOUl9DUFVTXTsKIGNwdW1hc2tfdCBudW1hX2NwdW1hc2tfbG9va3VwX3RhYmxlW01BWF9OVU1OT0RFU107Ci1pbnQgbnJfY3B1c19pbl9ub2RlW01BWF9OVU1OT0RFU10gPSB7IFswIC4uLiAoTUFYX05VTU5PREVTIC0xKV0gPSAwfTsKLQogc3RydWN0IHBnbGlzdF9kYXRhICpub2RlX2RhdGFbTUFYX05VTU5PREVTXTsKLWJvb3RtZW1fZGF0YV90IF9faW5pdGRhdGEgcGxhdF9ub2RlX2JkYXRhW01BWF9OVU1OT0RFU107CisKK0VYUE9SVF9TWU1CT0wobnVtYV9jcHVfbG9va3VwX3RhYmxlKTsKK0VYUE9SVF9TWU1CT0wobnVtYV9jcHVtYXNrX2xvb2t1cF90YWJsZSk7CitFWFBPUlRfU1lNQk9MKG5vZGVfZGF0YSk7CisKK3N0YXRpYyBib290bWVtX2RhdGFfdCBfX2luaXRkYXRhIHBsYXRfbm9kZV9iZGF0YVtNQVhfTlVNTk9ERVNdOwogc3RhdGljIGludCBtaW5fY29tbW9uX2RlcHRoOwogCiAvKgotICogV2UgbmVlZCBzb21ld2hlcmUgdG8gc3RvcmUgc3RhcnQvc3BhbiBmb3IgZWFjaCBub2RlIHVudGlsIHdlIGhhdmUKKyAqIFdlIG5lZWQgc29tZXdoZXJlIHRvIHN0b3JlIHN0YXJ0L2VuZC9ub2RlIGZvciBlYWNoIHJlZ2lvbiB1bnRpbCB3ZSBoYXZlCiAgKiBhbGxvY2F0ZWQgdGhlIHJlYWwgbm9kZV9kYXRhIHN0cnVjdHVyZXMuCiAgKi8KKyNkZWZpbmUgTUFYX1JFR0lPTlMJKE1BWF9MTUJfUkVHSU9OUyoyKQogc3RhdGljIHN0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBub2RlX3N0YXJ0X3BmbjsKLQl1bnNpZ25lZCBsb25nIG5vZGVfZW5kX3BmbjsKLQl1bnNpZ25lZCBsb25nIG5vZGVfcHJlc2VudF9wYWdlczsKLX0gaW5pdF9ub2RlX2RhdGFbTUFYX05VTU5PREVTXSBfX2luaXRkYXRhOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuOworCXVuc2lnbmVkIGxvbmcgZW5kX3BmbjsKKwlpbnQgbmlkOworfSBpbml0X25vZGVfZGF0YVtNQVhfUkVHSU9OU10gX19pbml0ZGF0YTsKIAotRVhQT1JUX1NZTUJPTChub2RlX2RhdGEpOwotRVhQT1JUX1NZTUJPTChudW1hX2NwdV9sb29rdXBfdGFibGUpOwotRVhQT1JUX1NZTUJPTChudW1hX21lbW9yeV9sb29rdXBfdGFibGUpOwotRVhQT1JUX1NZTUJPTChudW1hX2NwdW1hc2tfbG9va3VwX3RhYmxlKTsKLUVYUE9SVF9TWU1CT0wobnJfY3B1c19pbl9ub2RlKTsKK2ludCBfX2luaXQgZWFybHlfcGZuX3RvX25pZCh1bnNpZ25lZCBsb25nIHBmbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGluaXRfbm9kZV9kYXRhW2ldLmVuZF9wZm47IGkrKykgeworCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiA9IGluaXRfbm9kZV9kYXRhW2ldLnN0YXJ0X3BmbjsKKwkJdW5zaWduZWQgbG9uZyBlbmRfcGZuID0gaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbjsKKworCQlpZiAoKHN0YXJ0X3BmbiA8PSBwZm4pICYmIChwZm4gPCBlbmRfcGZuKSkKKwkJCXJldHVybiBpbml0X25vZGVfZGF0YVtpXS5uaWQ7CisJfQorCisJcmV0dXJuIC0xOworfQorCit2b2lkIF9faW5pdCBhZGRfcmVnaW9uKHVuc2lnbmVkIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBwYWdlcykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWRiZygiYWRkX3JlZ2lvbiBuaWQgJWQgc3RhcnRfcGZuIDB4JWx4IHBhZ2VzIDB4JWx4XG4iLAorCQluaWQsIHN0YXJ0X3BmbiwgcGFnZXMpOworCisJZm9yIChpID0gMDsgaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbjsgaSsrKSB7CisJCWlmIChpbml0X25vZGVfZGF0YVtpXS5uaWQgIT0gbmlkKQorCQkJY29udGludWU7CisJCWlmIChpbml0X25vZGVfZGF0YVtpXS5lbmRfcGZuID09IHN0YXJ0X3BmbikgeworCQkJaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbiArPSBwYWdlczsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAoaW5pdF9ub2RlX2RhdGFbaV0uc3RhcnRfcGZuID09IChzdGFydF9wZm4gKyBwYWdlcykpIHsKKwkJCWluaXRfbm9kZV9kYXRhW2ldLnN0YXJ0X3BmbiAtPSBwYWdlczsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qCisJICogTGVhdmUgbGFzdCBlbnRyeSBOVUxMIHNvIHdlIGRvbnQgaXRlcmF0ZSBvZmYgdGhlIGVuZCAod2UgdXNlCisJICogZW50cnkuZW5kX3BmbiB0byB0ZXJtaW5hdGUgdGhlIHdhbGspLgorCSAqLworCWlmIChpID49IChNQVhfUkVHSU9OUyAtIDEpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORzogdG9vIG1hbnkgbWVtb3J5IHJlZ2lvbnMgaW4gIgorCQkJCSJudW1hIGNvZGUsIHRydW5jYXRpbmdcbiIpOworCQlyZXR1cm47CisJfQorCisJaW5pdF9ub2RlX2RhdGFbaV0uc3RhcnRfcGZuID0gc3RhcnRfcGZuOworCWluaXRfbm9kZV9kYXRhW2ldLmVuZF9wZm4gPSBzdGFydF9wZm4gKyBwYWdlczsKKwlpbml0X25vZGVfZGF0YVtpXS5uaWQgPSBuaWQ7Cit9CisKKy8qIFdlIGFzc3VtZSBpbml0X25vZGVfZGF0YSBoYXMgbm8gb3ZlcmxhcHBpbmcgcmVnaW9ucyAqLwordm9pZCBfX2luaXQgZ2V0X3JlZ2lvbih1bnNpZ25lZCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nICpzdGFydF9wZm4sCisJCSAgICAgICB1bnNpZ25lZCBsb25nICplbmRfcGZuLCB1bnNpZ25lZCBsb25nICpwYWdlc19wcmVzZW50KQoreworCXVuc2lnbmVkIGludCBpOworCisJKnN0YXJ0X3BmbiA9IC0xVUw7CisJKmVuZF9wZm4gPSAqcGFnZXNfcHJlc2VudCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpbml0X25vZGVfZGF0YVtpXS5lbmRfcGZuOyBpKyspIHsKKwkJaWYgKGluaXRfbm9kZV9kYXRhW2ldLm5pZCAhPSBuaWQpCisJCQljb250aW51ZTsKKworCQkqcGFnZXNfcHJlc2VudCArPSBpbml0X25vZGVfZGF0YVtpXS5lbmRfcGZuIC0KKwkJCWluaXRfbm9kZV9kYXRhW2ldLnN0YXJ0X3BmbjsKKworCQlpZiAoaW5pdF9ub2RlX2RhdGFbaV0uc3RhcnRfcGZuIDwgKnN0YXJ0X3BmbikKKwkJCSpzdGFydF9wZm4gPSBpbml0X25vZGVfZGF0YVtpXS5zdGFydF9wZm47CisKKwkJaWYgKGluaXRfbm9kZV9kYXRhW2ldLmVuZF9wZm4gPiAqZW5kX3BmbikKKwkJCSplbmRfcGZuID0gaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbjsKKwl9CisKKwkvKiBXZSBkaWRudCBmaW5kIGEgbWF0Y2hpbmcgcmVnaW9uLCByZXR1cm4gc3RhcnQvZW5kIGFzIDAgKi8KKwlpZiAoKnN0YXJ0X3BmbiA9PSAtMVVMKQorCQlzdGFydF9wZm4gPSAwOworfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWFwX2NwdV90b19ub2RlKGludCBjcHUsIGludCBub2RlKQogewogCW51bWFfY3B1X2xvb2t1cF90YWJsZVtjcHVdID0gbm9kZTsKLQlpZiAoIShjcHVfaXNzZXQoY3B1LCBudW1hX2NwdW1hc2tfbG9va3VwX3RhYmxlW25vZGVdKSkpIHsKKworCWlmICghKGNwdV9pc3NldChjcHUsIG51bWFfY3B1bWFza19sb29rdXBfdGFibGVbbm9kZV0pKSkKIAkJY3B1X3NldChjcHUsIG51bWFfY3B1bWFza19sb29rdXBfdGFibGVbbm9kZV0pOwotCQlucl9jcHVzX2luX25vZGVbbm9kZV0rKzsKLQl9CiB9CiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKQEAgLTc4LDcgKzE0NSw2IEBACiAKIAlpZiAoY3B1X2lzc2V0KGNwdSwgbnVtYV9jcHVtYXNrX2xvb2t1cF90YWJsZVtub2RlXSkpIHsKIAkJY3B1X2NsZWFyKGNwdSwgbnVtYV9jcHVtYXNrX2xvb2t1cF90YWJsZVtub2RlXSk7Ci0JCW5yX2NwdXNfaW5fbm9kZVtub2RlXS0tOwogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORzogY3B1ICVsdSBub3QgZm91bmQgaW4gbm9kZSAlZFxuIiwKIAkJICAgICAgIGNwdSwgbm9kZSk7CkBAIC04Niw3ICsxNTIsNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19IT1RQTFVHX0NQVSAqLwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICogX19kZXZpbml0IGZpbmRfY3B1X25vZGUodW5zaWduZWQgaW50IGNwdSkKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKmZpbmRfY3B1X25vZGUodW5zaWduZWQgaW50IGNwdSkKIHsKIAl1bnNpZ25lZCBpbnQgaHdfY3B1aWQgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGNwdSk7CiAJc3RydWN0IGRldmljZV9ub2RlICpjcHVfbm9kZSA9IE5VTEw7CkBAIC0yMTMsNyArMjc5LDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlYWRfbl9jZWxscyhpbnQgbiwgdW5zaWduZWQgaW50ICoqYnVmKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHJlYWRfbl9jZWxscyhpbnQgbiwgdW5zaWduZWQgaW50ICoqYnVmKQogewogCXVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMDsKIApAQCAtMjk1LDcgKzM2MSw4IEBACiAgKiBvciB6ZXJvLiBJZiB0aGUgcmV0dXJuZWQgdmFsdWUgb2Ygc2l6ZSBpcyAwIHRoZSByZWdpb24gc2hvdWxkIGJlCiAgKiBkaXNjYXJkZWQgYXMgaXQgbGllcyB3aG9seSBhYm92ZSB0aGUgbWVtb3J5IGxpbWl0LgogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgbnVtYV9lbmZvcmNlX21lbW9yeV9saW1pdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgbnVtYV9lbmZvcmNlX21lbW9yeV9saW1pdCh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQogewogCS8qCiAJICogV2UgdXNlIGxtYl9lbmRfb2ZfRFJBTSgpIGluIGhlcmUgaW5zdGVhZCBvZiBtZW1vcnlfbGltaXQgYmVjYXVzZQpAQCAtMzIwLDggKzM4Nyw3IEBACiAJc3RydWN0IGRldmljZV9ub2RlICpjcHUgPSBOVUxMOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbWVtb3J5ID0gTlVMTDsKIAlpbnQgYWRkcl9jZWxscywgc2l6ZV9jZWxsczsKLQlpbnQgbWF4X2RvbWFpbiA9IDA7Ci0JbG9uZyBlbnRyaWVzID0gbG1iX2VuZF9vZl9EUkFNKCkgPj4gTUVNT1JZX0lOQ1JFTUVOVF9TSElGVDsKKwlpbnQgbWF4X2RvbWFpbjsKIAl1bnNpZ25lZCBsb25nIGk7CiAKIAlpZiAobnVtYV9lbmFibGVkID09IDApIHsKQEAgLTMyOSwxMyArMzk1LDYgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCW51bWFfbWVtb3J5X2xvb2t1cF90YWJsZSA9Ci0JCShjaGFyICopYWJzX3RvX3ZpcnQobG1iX2FsbG9jKGVudHJpZXMgKiBzaXplb2YoY2hhciksIDEpKTsKLQltZW1zZXQobnVtYV9tZW1vcnlfbG9va3VwX3RhYmxlLCAwLCBlbnRyaWVzICogc2l6ZW9mKGNoYXIpKTsKLQotCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzIDsgaSsrKQotCQludW1hX21lbW9yeV9sb29rdXBfdGFibGVbaV0gPSBBUlJBWV9JTklUSUFMSVNFUjsKLQogCW1pbl9jb21tb25fZGVwdGggPSBmaW5kX21pbl9jb21tb25fZGVwdGgoKTsKIAogCWRiZygiTlVNQSBhc3NvY2lhdGl2aXR5IGRlcHRoIGZvciBDUFUvTWVtb3J5OiAlZFxuIiwgbWluX2NvbW1vbl9kZXB0aCk7CkBAIC0zODcsOSArNDQ2LDYgQEAKIAkJc3RhcnQgPSByZWFkX25fY2VsbHMoYWRkcl9jZWxscywgJm1lbWNlbGxfYnVmKTsKIAkJc2l6ZSA9IHJlYWRfbl9jZWxscyhzaXplX2NlbGxzLCAmbWVtY2VsbF9idWYpOwogCi0JCXN0YXJ0ID0gX0FMSUdOX0RPV04oc3RhcnQsIE1FTU9SWV9JTkNSRU1FTlQpOwotCQlzaXplID0gX0FMSUdOX1VQKHNpemUsIE1FTU9SWV9JTkNSRU1FTlQpOwotCiAJCW51bWFfZG9tYWluID0gb2Zfbm9kZV9udW1hX2RvbWFpbihtZW1vcnkpOwogCiAJCWlmIChudW1hX2RvbWFpbiA+PSBNQVhfTlVNTk9ERVMpIHsKQEAgLTQwMyw0NCArNDU5LDE1IEBACiAJCWlmIChtYXhfZG9tYWluIDwgbnVtYV9kb21haW4pCiAJCQltYXhfZG9tYWluID0gbnVtYV9kb21haW47CiAKLQkJaWYgKCEgKHNpemUgPSBudW1hX2VuZm9yY2VfbWVtb3J5X2xpbWl0KHN0YXJ0LCBzaXplKSkpIHsKKwkJaWYgKCEoc2l6ZSA9IG51bWFfZW5mb3JjZV9tZW1vcnlfbGltaXQoc3RhcnQsIHNpemUpKSkgewogCQkJaWYgKC0tcmFuZ2VzKQogCQkJCWdvdG8gbmV3X3JhbmdlOwogCQkJZWxzZQogCQkJCWNvbnRpbnVlOwogCQl9CiAKLQkJLyoKLQkJICogSW5pdGlhbGl6ZSBuZXcgbm9kZSBzdHJ1Y3QsIG9yIGFkZCB0byBhbiBleGlzdGluZyBvbmUuCi0JCSAqLwotCQlpZiAoaW5pdF9ub2RlX2RhdGFbbnVtYV9kb21haW5dLm5vZGVfZW5kX3BmbikgewotCQkJaWYgKChzdGFydCAvIFBBR0VfU0laRSkgPAotCQkJICAgIGluaXRfbm9kZV9kYXRhW251bWFfZG9tYWluXS5ub2RlX3N0YXJ0X3BmbikKLQkJCQlpbml0X25vZGVfZGF0YVtudW1hX2RvbWFpbl0ubm9kZV9zdGFydF9wZm4gPQotCQkJCQlzdGFydCAvIFBBR0VfU0laRTsKLQkJCWlmICgoKHN0YXJ0IC8gUEFHRV9TSVpFKSArIChzaXplIC8gUEFHRV9TSVpFKSkgPgotCQkJICAgIGluaXRfbm9kZV9kYXRhW251bWFfZG9tYWluXS5ub2RlX2VuZF9wZm4pCi0JCQkJaW5pdF9ub2RlX2RhdGFbbnVtYV9kb21haW5dLm5vZGVfZW5kX3BmbiA9Ci0JCQkJCShzdGFydCAvIFBBR0VfU0laRSkgKwotCQkJCQkoc2l6ZSAvIFBBR0VfU0laRSk7Ci0KLQkJCWluaXRfbm9kZV9kYXRhW251bWFfZG9tYWluXS5ub2RlX3ByZXNlbnRfcGFnZXMgKz0KLQkJCQlzaXplIC8gUEFHRV9TSVpFOwotCQl9IGVsc2UgewotCQkJbm9kZV9zZXRfb25saW5lKG51bWFfZG9tYWluKTsKLQotCQkJaW5pdF9ub2RlX2RhdGFbbnVtYV9kb21haW5dLm5vZGVfc3RhcnRfcGZuID0KLQkJCQlzdGFydCAvIFBBR0VfU0laRTsKLQkJCWluaXRfbm9kZV9kYXRhW251bWFfZG9tYWluXS5ub2RlX2VuZF9wZm4gPQotCQkJCWluaXRfbm9kZV9kYXRhW251bWFfZG9tYWluXS5ub2RlX3N0YXJ0X3BmbiArCi0JCQkJc2l6ZSAvIFBBR0VfU0laRTsKLQkJCWluaXRfbm9kZV9kYXRhW251bWFfZG9tYWluXS5ub2RlX3ByZXNlbnRfcGFnZXMgPQotCQkJCXNpemUgLyBQQUdFX1NJWkU7Ci0JCX0KLQotCQlmb3IgKGkgPSBzdGFydCA7IGkgPCAoc3RhcnQrc2l6ZSk7IGkgKz0gTUVNT1JZX0lOQ1JFTUVOVCkKLQkJCW51bWFfbWVtb3J5X2xvb2t1cF90YWJsZVtpID4+IE1FTU9SWV9JTkNSRU1FTlRfU0hJRlRdID0KLQkJCQludW1hX2RvbWFpbjsKKwkJYWRkX3JlZ2lvbihudW1hX2RvbWFpbiwgc3RhcnQgPj4gUEFHRV9TSElGVCwKKwkJCSAgIHNpemUgPj4gUEFHRV9TSElGVCk7CiAKIAkJaWYgKC0tcmFuZ2VzKQogCQkJZ290byBuZXdfcmFuZ2U7CkBAIC00NTYsMzIgKzQ4MywxNSBAQAogewogCXVuc2lnbmVkIGxvbmcgdG9wX29mX3JhbSA9IGxtYl9lbmRfb2ZfRFJBTSgpOwogCXVuc2lnbmVkIGxvbmcgdG90YWxfcmFtID0gbG1iX3BoeXNfbWVtX3NpemUoKTsKLQl1bnNpZ25lZCBsb25nIGk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJUb3Agb2YgUkFNOiAweCVseCwgVG90YWwgUkFNOiAweCVseFxuIiwKIAkgICAgICAgdG9wX29mX3JhbSwgdG90YWxfcmFtKTsKIAlwcmludGsoS0VSTl9JTkZPICJNZW1vcnkgaG9sZSBzaXplOiAlbGRNQlxuIiwKIAkgICAgICAgKHRvcF9vZl9yYW0gLSB0b3RhbF9yYW0pID4+IDIwKTsKIAotCWlmICghbnVtYV9tZW1vcnlfbG9va3VwX3RhYmxlKSB7Ci0JCWxvbmcgZW50cmllcyA9IHRvcF9vZl9yYW0gPj4gTUVNT1JZX0lOQ1JFTUVOVF9TSElGVDsKLQkJbnVtYV9tZW1vcnlfbG9va3VwX3RhYmxlID0KLQkJCShjaGFyICopYWJzX3RvX3ZpcnQobG1iX2FsbG9jKGVudHJpZXMgKiBzaXplb2YoY2hhciksIDEpKTsKLQkJbWVtc2V0KG51bWFfbWVtb3J5X2xvb2t1cF90YWJsZSwgMCwgZW50cmllcyAqIHNpemVvZihjaGFyKSk7Ci0JCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzIDsgaSsrKQotCQkJbnVtYV9tZW1vcnlfbG9va3VwX3RhYmxlW2ldID0gQVJSQVlfSU5JVElBTElTRVI7Ci0JfQotCiAJbWFwX2NwdV90b19ub2RlKGJvb3RfY3B1aWQsIDApOwotCisJYWRkX3JlZ2lvbigwLCAwLCBsbWJfZW5kX29mX0RSQU0oKSA+PiBQQUdFX1NISUZUKTsKIAlub2RlX3NldF9vbmxpbmUoMCk7Ci0KLQlpbml0X25vZGVfZGF0YVswXS5ub2RlX3N0YXJ0X3BmbiA9IDA7Ci0JaW5pdF9ub2RlX2RhdGFbMF0ubm9kZV9lbmRfcGZuID0gbG1iX2VuZF9vZl9EUkFNKCkgLyBQQUdFX1NJWkU7Ci0JaW5pdF9ub2RlX2RhdGFbMF0ubm9kZV9wcmVzZW50X3BhZ2VzID0gdG90YWxfcmFtIC8gUEFHRV9TSVpFOwotCi0JZm9yIChpID0gMCA7IGkgPCB0b3Bfb2ZfcmFtOyBpICs9IE1FTU9SWV9JTkNSRU1FTlQpCi0JCW51bWFfbWVtb3J5X2xvb2t1cF90YWJsZVtpID4+IE1FTU9SWV9JTkNSRU1FTlRfU0hJRlRdID0gMDsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGR1bXBfbnVtYV90b3BvbG9neSh2b2lkKQpAQCAtNDk5LDggKzUwOSw5IEBACiAKIAkJY291bnQgPSAwOwogCi0JCWZvciAoaSA9IDA7IGkgPCBsbWJfZW5kX29mX0RSQU0oKTsgaSArPSBNRU1PUllfSU5DUkVNRU5UKSB7Ci0JCQlpZiAobnVtYV9tZW1vcnlfbG9va3VwX3RhYmxlW2kgPj4gTUVNT1JZX0lOQ1JFTUVOVF9TSElGVF0gPT0gbm9kZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgbG1iX2VuZF9vZl9EUkFNKCk7CisJCSAgICAgaSArPSAoMSA8PCBTRUNUSU9OX1NJWkVfQklUUykpIHsKKwkJCWlmIChlYXJseV9wZm5fdG9fbmlkKGkgPj4gUEFHRV9TSElGVCkgPT0gbm9kZSkgewogCQkJCWlmIChjb3VudCA9PSAwKQogCQkJCQlwcmludGsoIiAweCVseCIsIGkpOwogCQkJCSsrY291bnQ7CkBAIC01MjUsMTAgKzUzNiwxMiBAQAogICoKICAqIFJldHVybnMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeS4KICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgY2FyZWZ1bF9hbGxvY2F0aW9uKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQkJdW5zaWduZWQgbG9uZyBhbGlnbiwgdW5zaWduZWQgbG9uZyBlbmQpCitzdGF0aWMgdm9pZCBfX2luaXQgKmNhcmVmdWxfYWxsb2NhdGlvbihpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWxpZ24sCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKIHsKLQl1bnNpZ25lZCBsb25nIHJldCA9IGxtYl9hbGxvY19iYXNlKHNpemUsIGFsaWduLCBlbmQpOworCWludCBuZXdfbmlkOworCXVuc2lnbmVkIGxvbmcgcmV0ID0gbG1iX2FsbG9jX2Jhc2Uoc2l6ZSwgYWxpZ24sIGVuZF9wZm4gPDwgUEFHRV9TSElGVCk7CiAKIAkvKiByZXRyeSBvdmVyIGFsbCBtZW1vcnkgKi8KIAlpZiAoIXJldCkKQEAgLTU0MiwyOCArNTU1LDI3IEBACiAJICogSWYgdGhlIG1lbW9yeSBjYW1lIGZyb20gYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBub2RlLCB3ZSBtdXN0CiAJICogcmV0cnkgd2l0aCB0aGUgYm9vdG1lbSBhbGxvY2F0b3IuCiAJICovCi0JaWYgKHBhX3RvX25pZChyZXQpIDwgbmlkKSB7Ci0JCW5pZCA9IHBhX3RvX25pZChyZXQpOwotCQlyZXQgPSAodW5zaWduZWQgbG9uZylfX2FsbG9jX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobmlkKSwKKwluZXdfbmlkID0gZWFybHlfcGZuX3RvX25pZChyZXQgPj4gUEFHRV9TSElGVCk7CisJaWYgKG5ld19uaWQgPCBuaWQpIHsKKwkJcmV0ID0gKHVuc2lnbmVkIGxvbmcpX19hbGxvY19ib290bWVtX25vZGUoTk9ERV9EQVRBKG5ld19uaWQpLAogCQkJCXNpemUsIGFsaWduLCAwKTsKIAogCQlpZiAoIXJldCkKIAkJCXBhbmljKCJudW1hLmM6IGNhbm5vdCBhbGxvY2F0ZSAlbHUgYnl0ZXMgb24gbm9kZSAlZCIsCi0JCQkgICAgICBzaXplLCBuaWQpOworCQkJICAgICAgc2l6ZSwgbmV3X25pZCk7CiAKLQkJcmV0ID0gdmlydF90b19hYnMocmV0KTsKKwkJcmV0ID0gX19wYShyZXQpOwogCiAJCWRiZygiYWxsb2NfYm9vdG1lbSAlbHggJWx4XG4iLCByZXQsIHNpemUpOwogCX0KIAotCXJldHVybiByZXQ7CisJcmV0dXJuICh2b2lkICopcmV0OwogfQogCiB2b2lkIF9faW5pdCBkb19pbml0X2Jvb3RtZW0odm9pZCkKIHsKIAlpbnQgbmlkOwotCWludCBhZGRyX2NlbGxzLCBzaXplX2NlbGxzOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbWVtb3J5ID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgaTsKIAlzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBwYzY0X251bWFfbmIgPSB7CiAJCS5ub3RpZmllcl9jYWxsID0gY3B1X251bWFfY2FsbGJhY2ssCiAJCS5wcmlvcml0eSA9IDEgLyogTXVzdCBydW4gYmVmb3JlIHNjaGVkIGRvbWFpbnMgbm90aWZpZXIuICovCkBAIC01ODEsOTkgKzU5Myw2NiBAQAogCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmcHBjNjRfbnVtYV9uYik7CiAKIAlmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpIHsKLQkJdW5zaWduZWQgbG9uZyBzdGFydF9wYWRkciwgZW5kX3BhZGRyOwotCQlpbnQgaTsKKwkJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm4sIHBhZ2VzX3ByZXNlbnQ7CiAJCXVuc2lnbmVkIGxvbmcgYm9vdG1lbV9wYWRkcjsKIAkJdW5zaWduZWQgbG9uZyBib290bWFwX3BhZ2VzOwogCi0JCXN0YXJ0X3BhZGRyID0gaW5pdF9ub2RlX2RhdGFbbmlkXS5ub2RlX3N0YXJ0X3BmbiAqIFBBR0VfU0laRTsKLQkJZW5kX3BhZGRyID0gaW5pdF9ub2RlX2RhdGFbbmlkXS5ub2RlX2VuZF9wZm4gKiBQQUdFX1NJWkU7CisJCWdldF9yZWdpb24obmlkLCAmc3RhcnRfcGZuLCAmZW5kX3BmbiwgJnBhZ2VzX3ByZXNlbnQpOwogCiAJCS8qIEFsbG9jYXRlIHRoZSBub2RlIHN0cnVjdHVyZSBub2RlIGxvY2FsIGlmIHBvc3NpYmxlICovCi0JCU5PREVfREFUQShuaWQpID0gKHN0cnVjdCBwZ2xpc3RfZGF0YSAqKWNhcmVmdWxfYWxsb2NhdGlvbihuaWQsCisJCU5PREVfREFUQShuaWQpID0gY2FyZWZ1bF9hbGxvY2F0aW9uKG5pZCwKIAkJCQkJc2l6ZW9mKHN0cnVjdCBwZ2xpc3RfZGF0YSksCi0JCQkJCVNNUF9DQUNIRV9CWVRFUywgZW5kX3BhZGRyKTsKLQkJTk9ERV9EQVRBKG5pZCkgPSBhYnNfdG9fdmlydChOT0RFX0RBVEEobmlkKSk7CisJCQkJCVNNUF9DQUNIRV9CWVRFUywgZW5kX3Bmbik7CisJCU5PREVfREFUQShuaWQpID0gX192YShOT0RFX0RBVEEobmlkKSk7CiAJCW1lbXNldChOT0RFX0RBVEEobmlkKSwgMCwgc2l6ZW9mKHN0cnVjdCBwZ2xpc3RfZGF0YSkpOwogCiAgIAkJZGJnKCJub2RlICVkXG4iLCBuaWQpOwogCQlkYmcoIk5PREVfREFUQSgpID0gJXBcbiIsIE5PREVfREFUQShuaWQpKTsKIAogCQlOT0RFX0RBVEEobmlkKS0+YmRhdGEgPSAmcGxhdF9ub2RlX2JkYXRhW25pZF07Ci0JCU5PREVfREFUQShuaWQpLT5ub2RlX3N0YXJ0X3BmbiA9Ci0JCQlpbml0X25vZGVfZGF0YVtuaWRdLm5vZGVfc3RhcnRfcGZuOwotCQlOT0RFX0RBVEEobmlkKS0+bm9kZV9zcGFubmVkX3BhZ2VzID0KLQkJCWVuZF9wYWRkciAtIHN0YXJ0X3BhZGRyOworCQlOT0RFX0RBVEEobmlkKS0+bm9kZV9zdGFydF9wZm4gPSBzdGFydF9wZm47CisJCU5PREVfREFUQShuaWQpLT5ub2RlX3NwYW5uZWRfcGFnZXMgPSBlbmRfcGZuIC0gc3RhcnRfcGZuOwogCiAJCWlmIChOT0RFX0RBVEEobmlkKS0+bm9kZV9zcGFubmVkX3BhZ2VzID09IDApCiAgIAkJCWNvbnRpbnVlOwogCi0gIAkJZGJnKCJzdGFydF9wYWRkciA9ICVseFxuIiwgc3RhcnRfcGFkZHIpOwotICAJCWRiZygiZW5kX3BhZGRyID0gJWx4XG4iLCBlbmRfcGFkZHIpOworICAJCWRiZygic3RhcnRfcGFkZHIgPSAlbHhcbiIsIHN0YXJ0X3BmbiA8PCBQQUdFX1NISUZUKTsKKyAgCQlkYmcoImVuZF9wYWRkciA9ICVseFxuIiwgZW5kX3BmbiA8PCBQQUdFX1NISUZUKTsKIAotCQlib290bWFwX3BhZ2VzID0gYm9vdG1lbV9ib290bWFwX3BhZ2VzKChlbmRfcGFkZHIgLSBzdGFydF9wYWRkcikgPj4gUEFHRV9TSElGVCk7CisJCWJvb3RtYXBfcGFnZXMgPSBib290bWVtX2Jvb3RtYXBfcGFnZXMoZW5kX3BmbiAtIHN0YXJ0X3Bmbik7CisJCWJvb3RtZW1fcGFkZHIgPSAodW5zaWduZWQgbG9uZyljYXJlZnVsX2FsbG9jYXRpb24obmlkLAorCQkJCQlib290bWFwX3BhZ2VzIDw8IFBBR0VfU0hJRlQsCisJCQkJCVBBR0VfU0laRSwgZW5kX3Bmbik7CisJCW1lbXNldChfX3ZhKGJvb3RtZW1fcGFkZHIpLCAwLCBib290bWFwX3BhZ2VzIDw8IFBBR0VfU0hJRlQpOwogCi0JCWJvb3RtZW1fcGFkZHIgPSBjYXJlZnVsX2FsbG9jYXRpb24obmlkLAotCQkJCWJvb3RtYXBfcGFnZXMgPDwgUEFHRV9TSElGVCwKLQkJCQlQQUdFX1NJWkUsIGVuZF9wYWRkcik7Ci0JCW1lbXNldChhYnNfdG9fdmlydChib290bWVtX3BhZGRyKSwgMCwKLQkJICAgICAgIGJvb3RtYXBfcGFnZXMgPDwgUEFHRV9TSElGVCk7CiAJCWRiZygiYm9vdG1hcF9wYWRkciA9ICVseFxuIiwgYm9vdG1lbV9wYWRkcik7CiAKIAkJaW5pdF9ib290bWVtX25vZGUoTk9ERV9EQVRBKG5pZCksIGJvb3RtZW1fcGFkZHIgPj4gUEFHRV9TSElGVCwKLQkJCQkgIHN0YXJ0X3BhZGRyID4+IFBBR0VfU0hJRlQsCi0JCQkJICBlbmRfcGFkZHIgPj4gUEFHRV9TSElGVCk7CisJCQkJICBzdGFydF9wZm4sIGVuZF9wZm4pOwogCi0JCS8qCi0JCSAqIFdlIG5lZWQgdG8gZG8gYW5vdGhlciBzY2FuIG9mIGFsbCBtZW1vcnkgc2VjdGlvbnMgdG8KLQkJICogYXNzb2NpYXRlIG1lbW9yeSB3aXRoIHRoZSBjb3JyZWN0IG5vZGUuCi0JCSAqLwotCQlhZGRyX2NlbGxzID0gZ2V0X21lbV9hZGRyX2NlbGxzKCk7Ci0JCXNpemVfY2VsbHMgPSBnZXRfbWVtX3NpemVfY2VsbHMoKTsKLQkJbWVtb3J5ID0gTlVMTDsKLQkJd2hpbGUgKChtZW1vcnkgPSBvZl9maW5kX25vZGVfYnlfdHlwZShtZW1vcnksICJtZW1vcnkiKSkgIT0gTlVMTCkgewotCQkJdW5zaWduZWQgbG9uZyBtZW1fc3RhcnQsIG1lbV9zaXplOwotCQkJaW50IG51bWFfZG9tYWluLCByYW5nZXM7Ci0JCQl1bnNpZ25lZCBpbnQgKm1lbWNlbGxfYnVmOwotCQkJdW5zaWduZWQgaW50IGxlbjsKKwkJLyogQWRkIGZyZWUgcmVnaW9ucyBvbiB0aGlzIG5vZGUgKi8KKwkJZm9yIChpID0gMDsgaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbjsgaSsrKSB7CisJCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CiAKLQkJCW1lbWNlbGxfYnVmID0gKHVuc2lnbmVkIGludCAqKWdldF9wcm9wZXJ0eShtZW1vcnksICJyZWciLCAmbGVuKTsKLQkJCWlmICghbWVtY2VsbF9idWYgfHwgbGVuIDw9IDApCisJCQlpZiAoaW5pdF9ub2RlX2RhdGFbaV0ubmlkICE9IG5pZCkKIAkJCQljb250aW51ZTsKIAotCQkJcmFuZ2VzID0gbWVtb3J5LT5uX2FkZHJzOwkvKiByYW5nZXMgaW4gY2VsbCAqLwotbmV3X3JhbmdlOgotCQkJbWVtX3N0YXJ0ID0gcmVhZF9uX2NlbGxzKGFkZHJfY2VsbHMsICZtZW1jZWxsX2J1Zik7Ci0JCQltZW1fc2l6ZSA9IHJlYWRfbl9jZWxscyhzaXplX2NlbGxzLCAmbWVtY2VsbF9idWYpOwotCQkJaWYgKG51bWFfZW5hYmxlZCkgewotCQkJCW51bWFfZG9tYWluID0gb2Zfbm9kZV9udW1hX2RvbWFpbihtZW1vcnkpOwotCQkJCWlmIChudW1hX2RvbWFpbiAgPj0gTUFYX05VTU5PREVTKQotCQkJCQludW1hX2RvbWFpbiA9IDA7Ci0JCQl9IGVsc2UKLQkJCQludW1hX2RvbWFpbiA9ICAwOworCQkJc3RhcnQgPSBpbml0X25vZGVfZGF0YVtpXS5zdGFydF9wZm4gPDwgUEFHRV9TSElGVDsKKwkJCWVuZCA9IGluaXRfbm9kZV9kYXRhW2ldLmVuZF9wZm4gPDwgUEFHRV9TSElGVDsKIAotCQkJaWYgKG51bWFfZG9tYWluICE9IG5pZCkKLQkJCQljb250aW51ZTsKLQotCQkJbWVtX3NpemUgPSBudW1hX2VuZm9yY2VfbWVtb3J5X2xpbWl0KG1lbV9zdGFydCwgbWVtX3NpemUpOwotICAJCQlpZiAobWVtX3NpemUpIHsKLSAgCQkJCWRiZygiZnJlZV9ib290bWVtICVseCAlbHhcbiIsIG1lbV9zdGFydCwgbWVtX3NpemUpOwotICAJCQkJZnJlZV9ib290bWVtX25vZGUoTk9ERV9EQVRBKG5pZCksIG1lbV9zdGFydCwgbWVtX3NpemUpOwotCQkJfQotCi0JCQlpZiAoLS1yYW5nZXMpCQkvKiBwcm9jZXNzIGFsbCByYW5nZXMgaW4gY2VsbCAqLwotCQkJCWdvdG8gbmV3X3JhbmdlOworCQkJZGJnKCJmcmVlX2Jvb3RtZW0gJWx4ICVseFxuIiwgc3RhcnQsIGVuZCAtIHN0YXJ0KTsKKyAgCQkJZnJlZV9ib290bWVtX25vZGUoTk9ERV9EQVRBKG5pZCksIHN0YXJ0LCBlbmQgLSBzdGFydCk7CiAJCX0KIAotCQkvKgotCQkgKiBNYXJrIHJlc2VydmVkIHJlZ2lvbnMgb24gdGhpcyBub2RlCi0JCSAqLworCQkvKiBNYXJrIHJlc2VydmVkIHJlZ2lvbnMgb24gdGhpcyBub2RlICovCiAJCWZvciAoaSA9IDA7IGkgPCBsbWIucmVzZXJ2ZWQuY250OyBpKyspIHsKIAkJCXVuc2lnbmVkIGxvbmcgcGh5c2Jhc2UgPSBsbWIucmVzZXJ2ZWQucmVnaW9uW2ldLmJhc2U7CiAJCQl1bnNpZ25lZCBsb25nIHNpemUgPSBsbWIucmVzZXJ2ZWQucmVnaW9uW2ldLnNpemU7CisJCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BhZGRyID0gc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7CisJCQl1bnNpZ25lZCBsb25nIGVuZF9wYWRkciA9IGVuZF9wZm4gPDwgUEFHRV9TSElGVDsKIAotCQkJaWYgKHBhX3RvX25pZChwaHlzYmFzZSkgIT0gbmlkICYmCi0JCQkgICAgcGFfdG9fbmlkKHBoeXNiYXNlK3NpemUtMSkgIT0gbmlkKQorCQkJaWYgKGVhcmx5X3Bmbl90b19uaWQocGh5c2Jhc2UgPj4gUEFHRV9TSElGVCkgIT0gbmlkICYmCisJCQkgICAgZWFybHlfcGZuX3RvX25pZCgocGh5c2Jhc2Urc2l6ZS0xKSA+PiBQQUdFX1NISUZUKSAhPSBuaWQpCiAJCQkJY29udGludWU7CiAKIAkJCWlmIChwaHlzYmFzZSA8IGVuZF9wYWRkciAmJgpAQCAtNjkzLDQ2ICs2NzIsMTkgQEAKIAkJCQkJCSAgICAgc2l6ZSk7CiAJCQl9CiAJCX0KLQkJLyoKLQkJICogVGhpcyBsb29wIG1heSBsb29rIGZhbWFsaWFyLCBidXQgd2UgaGF2ZSB0byBkbyBpdCBhZ2FpbgotCQkgKiBhZnRlciBtYXJraW5nIG91ciByZXNlcnZlZCBtZW1vcnkgdG8gbWFyayBtZW1vcnkgcHJlc2VudAotCQkgKiBmb3Igc3BhcnNlbWVtLgotCQkgKi8KLQkJYWRkcl9jZWxscyA9IGdldF9tZW1fYWRkcl9jZWxscygpOwotCQlzaXplX2NlbGxzID0gZ2V0X21lbV9zaXplX2NlbGxzKCk7Ci0JCW1lbW9yeSA9IE5VTEw7Ci0JCXdoaWxlICgobWVtb3J5ID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUobWVtb3J5LCAibWVtb3J5IikpICE9IE5VTEwpIHsKLQkJCXVuc2lnbmVkIGxvbmcgbWVtX3N0YXJ0LCBtZW1fc2l6ZTsKLQkJCWludCBudW1hX2RvbWFpbiwgcmFuZ2VzOwotCQkJdW5zaWduZWQgaW50ICptZW1jZWxsX2J1ZjsKLQkJCXVuc2lnbmVkIGludCBsZW47CiAKLQkJCW1lbWNlbGxfYnVmID0gKHVuc2lnbmVkIGludCAqKWdldF9wcm9wZXJ0eShtZW1vcnksICJyZWciLCAmbGVuKTsKLQkJCWlmICghbWVtY2VsbF9idWYgfHwgbGVuIDw9IDApCisJCS8qIEFkZCByZWdpb25zIGludG8gc3BhcnNlbWVtICovCisJCWZvciAoaSA9IDA7IGluaXRfbm9kZV9kYXRhW2ldLmVuZF9wZm47IGkrKykgeworCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOworCisJCQlpZiAoaW5pdF9ub2RlX2RhdGFbaV0ubmlkICE9IG5pZCkKIAkJCQljb250aW51ZTsKIAotCQkJcmFuZ2VzID0gbWVtb3J5LT5uX2FkZHJzOwkvKiByYW5nZXMgaW4gY2VsbCAqLwotbmV3X3JhbmdlMjoKLQkJCW1lbV9zdGFydCA9IHJlYWRfbl9jZWxscyhhZGRyX2NlbGxzLCAmbWVtY2VsbF9idWYpOwotCQkJbWVtX3NpemUgPSByZWFkX25fY2VsbHMoc2l6ZV9jZWxscywgJm1lbWNlbGxfYnVmKTsKLQkJCWlmIChudW1hX2VuYWJsZWQpIHsKLQkJCQludW1hX2RvbWFpbiA9IG9mX25vZGVfbnVtYV9kb21haW4obWVtb3J5KTsKLQkJCQlpZiAobnVtYV9kb21haW4gID49IE1BWF9OVU1OT0RFUykKLQkJCQkJbnVtYV9kb21haW4gPSAwOwotCQkJfSBlbHNlCi0JCQkJbnVtYV9kb21haW4gPSAgMDsKKwkJCXN0YXJ0ID0gaW5pdF9ub2RlX2RhdGFbaV0uc3RhcnRfcGZuOworCQkJZW5kID0gaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbjsKIAotCQkJaWYgKG51bWFfZG9tYWluICE9IG5pZCkKLQkJCQljb250aW51ZTsKLQotCQkJbWVtX3NpemUgPSBudW1hX2VuZm9yY2VfbWVtb3J5X2xpbWl0KG1lbV9zdGFydCwgbWVtX3NpemUpOwotCQkJbWVtb3J5X3ByZXNlbnQobnVtYV9kb21haW4sIG1lbV9zdGFydCA+PiBQQUdFX1NISUZULAotCQkJCSAgICAgICAobWVtX3N0YXJ0ICsgbWVtX3NpemUpID4+IFBBR0VfU0hJRlQpOwotCi0JCQlpZiAoLS1yYW5nZXMpCQkvKiBwcm9jZXNzIGFsbCByYW5nZXMgaW4gY2VsbCAqLwotCQkJCWdvdG8gbmV3X3JhbmdlMjsKKwkJCW1lbW9yeV9wcmVzZW50KG5pZCwgc3RhcnQsIGVuZCk7CiAJCX0KLQogCX0KIH0KIApAQCAtNzQ2LDIxICs2OTgsMTggQEAKIAltZW1zZXQoemhvbGVzX3NpemUsIDAsIHNpemVvZih6aG9sZXNfc2l6ZSkpOwogCiAJZm9yX2VhY2hfb25saW5lX25vZGUobmlkKSB7Ci0JCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuOwotCQl1bnNpZ25lZCBsb25nIGVuZF9wZm47CisJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuLCBwYWdlc19wcmVzZW50OwogCi0JCXN0YXJ0X3BmbiA9IGluaXRfbm9kZV9kYXRhW25pZF0ubm9kZV9zdGFydF9wZm47Ci0JCWVuZF9wZm4gPSBpbml0X25vZGVfZGF0YVtuaWRdLm5vZGVfZW5kX3BmbjsKKwkJZ2V0X3JlZ2lvbihuaWQsICZzdGFydF9wZm4sICZlbmRfcGZuLCAmcGFnZXNfcHJlc2VudCk7CiAKIAkJem9uZXNfc2l6ZVtaT05FX0RNQV0gPSBlbmRfcGZuIC0gc3RhcnRfcGZuOwotCQl6aG9sZXNfc2l6ZVtaT05FX0RNQV0gPSB6b25lc19zaXplW1pPTkVfRE1BXSAtCi0JCQlpbml0X25vZGVfZGF0YVtuaWRdLm5vZGVfcHJlc2VudF9wYWdlczsKKwkJemhvbGVzX3NpemVbWk9ORV9ETUFdID0gem9uZXNfc2l6ZVtaT05FX0RNQV0gLSBwYWdlc19wcmVzZW50OwogCiAJCWRiZygiZnJlZV9hcmVhX2luaXQgbm9kZSAlZCAlbHggJWx4IChob2xlOiAlbHgpXG4iLCBuaWQsCiAJCSAgICB6b25lc19zaXplW1pPTkVfRE1BXSwgc3RhcnRfcGZuLCB6aG9sZXNfc2l6ZVtaT05FX0RNQV0pOwogCi0JCWZyZWVfYXJlYV9pbml0X25vZGUobmlkLCBOT0RFX0RBVEEobmlkKSwgem9uZXNfc2l6ZSwKLQkJCQkJCQlzdGFydF9wZm4sIHpob2xlc19zaXplKTsKKwkJZnJlZV9hcmVhX2luaXRfbm9kZShuaWQsIE5PREVfREFUQShuaWQpLCB6b25lc19zaXplLCBzdGFydF9wZm4sCisJCQkJICAgIHpob2xlc19zaXplKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jCmluZGV4IDkwMDg0MjQuLmM3ZjdiYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYwpAQCAtMTIyLDggKzEyMiwxMSBAQAogCQkgKgogCQkgKi8KIAkJaWYgKGh0YWJfYm9sdF9tYXBwaW5nKGVhLCBlYSArIFBBR0VfU0laRSwgcGEsIGZsYWdzLAotCQkJCSAgICAgIG1tdV92aXJ0dWFsX3BzaXplKSkKLQkJCXBhbmljKCJDYW4ndCBtYXAgYm9sdGVkIElPIG1hcHBpbmciKTsKKwkJCQkgICAgICBtbXVfdmlydHVhbF9wc2l6ZSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGRvIGJvbHRlZCBtYXBwaW5nIElPICIKKwkJCSAgICAgICAibWVtb3J5IGF0ICUwMTZseCAhXG4iLCBwYSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9zdGFiLmMgYi9hcmNoL3Bvd2VycGMvbW0vc3RhYi5jCmluZGV4IGZhMzI1ZGIuLmNmYmI0ZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9zdGFiLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3N0YWIuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9sbWIuaD4KICNpbmNsdWRlIDxhc20vYWJzX2FkZHIuaD4KKyNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KIAogc3RydWN0IHN0YWJfZW50cnkgewogCXVuc2lnbmVkIGxvbmcgZXNpZF9kYXRhOwpAQCAtMjU2LDcgKzI1Nyw3IEBACiAKIAkJcGFjYVtjcHVdLnN0YWJfYWRkciA9IG5ld3N0YWI7CiAJCXBhY2FbY3B1XS5zdGFiX3JlYWwgPSB2aXJ0X3RvX2FicyhuZXdzdGFiKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlNlZ21lbnQgdGFibGUgZm9yIENQVSAlZCBhdCAweCVseCAiCisJCXByaW50ayhLRVJOX0lORk8gIlNlZ21lbnQgdGFibGUgZm9yIENQVSAlZCBhdCAweCVseCAiCiAJCSAgICAgICAidmlydHVhbCwgMHglbHggYWJzb2x1dGVcbiIsCiAJCSAgICAgICBjcHUsIHBhY2FbY3B1XS5zdGFiX2FkZHIsIHBhY2FbY3B1XS5zdGFiX3JlYWwpOwogCX0KQEAgLTI3MCwxMCArMjcxLDI4IEBACiB2b2lkIHN0YWJfaW5pdGlhbGl6ZSh1bnNpZ25lZCBsb25nIHN0YWIpCiB7CiAJdW5zaWduZWQgbG9uZyB2c2lkID0gZ2V0X2tlcm5lbF92c2lkKEtFUk5FTEJBU0UpOworCXVuc2lnbmVkIGxvbmcgc3RhYnJlYWw7CiAKIAlhc20gdm9sYXRpbGUoImlzeW5jOyBzbGJpYTsgaXN5bmMiOjo6Im1lbW9yeSIpOwogCW1ha2Vfc3RlKHN0YWIsIEdFVF9FU0lEKEtFUk5FTEJBU0UpLCB2c2lkKTsKIAogCS8qIE9yZGVyIHVwZGF0ZSAqLwogCWFzbSB2b2xhdGlsZSgic3luYyI6OjoibWVtb3J5Iik7CisKKwkvKiBTZXQgQVNSICovCisJc3RhYnJlYWwgPSBnZXRfcGFjYSgpLT5zdGFiX3JlYWwgfCAweDF1bDsKKworI2lmZGVmIENPTkZJR19QUENfSVNFUklFUworCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpKSB7CisJCUh2Q2FsbDEoSHZDYWxsQmFzZVNldEFTUiwgc3RhYnJlYWwpOworCQlyZXR1cm47CisJfQorI2VuZGlmIC8qIENPTkZJR19QUENfSVNFUklFUyAqLworI2lmZGVmIENPTkZJR19QUENfUFNFUklFUworCWlmIChwbGF0Zm9ybV9pc19scGFyKCkpIHsKKwkJcGxwYXJfaGNhbGxfbm9yZXRzKEhfU0VUX0FTUiwgc3RhYnJlYWwpOworCQlyZXR1cm47CisJfQorI2VuZGlmCisJbXRzcHIoU1BSTl9BU1IsIHN0YWJyZWFsKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9wb3dlcjQuYyBiL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9wb3dlcjQuYwppbmRleCBjNGVlNTQ3Li5hMzQwMWI0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfcG93ZXI0LmMKKysrIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX3Bvd2VyNC5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+CiAjaW5jbHVkZSA8YXNtL3J0YXMuaD4KICNpbmNsdWRlIDxhc20vb3Byb2ZpbGVfaW1wbC5oPgogI2luY2x1ZGUgPGFzbS9yZWcuaD4KQEAgLTIzMyw4ICsyMzIsNyBAQAogCW1tY3JhID0gbWZzcHIoU1BSTl9NTUNSQSk7CiAKIAkvKiBXZXJlIHdlIGluIHRoZSBoeXBlcnZpc29yPyAqLwotCWlmICgoc3lzdGVtY2ZnLT5wbGF0Zm9ybSA9PSBQTEFURk9STV9QU0VSSUVTX0xQQVIpICYmCi0JICAgIChtbWNyYSAmIE1NQ1JBX1NJSFYpKQorCWlmIChwbGF0Zm9ybV9pc19scGFyKCkgJiYgKG1tY3JhICYgTU1DUkFfU0lIVikpCiAJCS8qIGZ1bmN0aW9uIGRlc2NyaXB0b3IgbWFkbmVzcyAqLwogCQlyZXR1cm4gKigodW5zaWduZWQgbG9uZyAqKWh5cGVydmlzb3JfYnVja2V0KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYwppbmRleCBlY2QzMmQ1Li40MDk5ZGRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYwpAQCAtMzYxLDcgKzM2MSw5IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiT3BlblBJQyBhdCAlbHhcbiIsIG9wYWRkcik7CiAKIAlpcnFfY291bnQgPSBOUl9JUlFTIC0gTlVNX0lTQV9JTlRFUlJVUFRTIC0gNDsgLyogbGVhdmUgcm9vbSBmb3IgSVBJcyAqLwotCXByb21fZ2V0X2lycV9zZW5zZXMoaW5pdF9zZW5zZXMsIE5VTV84MjU5X0lOVEVSUlVQVFMsIE5SX0lSUVMgLSA0KTsKKwlwcm9tX2dldF9pcnFfc2Vuc2VzKGluaXRfc2Vuc2VzLCBOVU1fSVNBX0lOVEVSUlVQVFMsIE5SX0lSUVMgLSA0KTsKKwkvKiBpODI1OSBjYXNjYWRlIGlzIGFsd2F5cyBwb3NpdGl2ZSBsZXZlbCAqLworCWluaXRfc2Vuc2VzWzBdID0gSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFOwogCiAJaXJhbmdlcyA9ICh1bnNpZ25lZCBpbnQgKikgZ2V0X3Byb3BlcnR5KG5wLCAiaW50ZXJydXB0LXJhbmdlcyIsICZsZW4pOwogCWlmIChpcmFuZ2VzID09IE5VTEwpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMKaW5kZXggYTA2NjAzZC4uMDEwOTBlOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lycS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuYwpAQCAtMTAzLDYgKzEwMyw5IEBACiAJCXN0cnVjdCBwdF9yZWdzICpyZWdzUGFybSkKIHsKIAlpbnQgaXJxOworI2lmZGVmIENPTkZJR19JUlFTVEFDS1MKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKmN1cnRwLCAqaXJxdHA7CisjZW5kaWYKIAogCSsrUGNpX0ludGVycnVwdF9Db3VudDsKIApAQCAtMTEwLDcgKzExMywyMCBAQAogCWNhc2UgWG1QY2lMcEV2ZW50X1Nsb3RJbnRlcnJ1cHQ6CiAJCWlycSA9IGV2ZW50UGFybS0+aHZMcEV2ZW50LnhDb3JyZWxhdGlvblRva2VuOwogCQkvKiBEaXNwYXRjaCB0aGUgaW50ZXJydXB0IGhhbmRsZXJzIGZvciB0aGlzIGlycSAqLwotCQlwcGNfaXJxX2Rpc3BhdGNoX2hhbmRsZXIocmVnc1Bhcm0sIGlycSk7CisjaWZkZWYgQ09ORklHX0lSUVNUQUNLUworCQkvKiBTd2l0Y2ggdG8gdGhlIGlycSBzdGFjayB0byBoYW5kbGUgdGhpcyAqLworCQljdXJ0cCA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKKwkJaXJxdHAgPSBoYXJkaXJxX2N0eFtzbXBfcHJvY2Vzc29yX2lkKCldOworCQlpZiAoY3VydHAgIT0gaXJxdHApIHsKKwkJCWlycXRwLT50YXNrID0gY3VydHAtPnRhc2s7CisJCQlpcnF0cC0+ZmxhZ3MgPSAwOworCQkJY2FsbF9fX2RvX0lSUShpcnEsIHJlZ3NQYXJtLCBpcnF0cCk7CisJCQlpcnF0cC0+dGFzayA9IE5VTEw7CisJCQlpZiAoaXJxdHAtPmZsYWdzKQorCQkJCXNldF9iaXRzKGlycXRwLT5mbGFncywgJmN1cnRwLT5mbGFncyk7CisJCX0gZWxzZQorI2VuZGlmCisJCQlfX2RvX0lSUShpcnEsIHJlZ3NQYXJtKTsKIAkJSHZDYWxsUGNpX2VvaShldmVudFBhcm0tPmV2ZW50RGF0YS5zbG90SW50ZXJydXB0LmJ1c051bWJlciwKIAkJCWV2ZW50UGFybS0+ZXZlbnREYXRhLnNsb3RJbnRlcnJ1cHQuc3ViQnVzTnVtYmVyLAogCQkJZXZlbnRQYXJtLT5ldmVudERhdGEuc2xvdEludGVycnVwdC5kZXZpY2VJZCk7CkBAIC0zMTAsMTAgKzMyNiw4IEBACiB9CiAKIC8qCi0gKiBOZWVkIHRvIGRlZmluZSB0aGlzIHNvIHBwY19pcnFfZGlzcGF0Y2hfaGFuZGxlciB3aWxsIE5PVCBjYWxsCi0gKiBlbmFibGVfSVJRIGF0IHRoZSBlbmQgb2YgaW50ZXJydXB0IGhhbmRsaW5nLiAgSG93ZXZlciwgdGhpcyBkb2VzCi0gKiBub3RoaW5nIGJlY2F1c2UgdGhlcmUgaXMgbm90IGVub3VnaCBpbmZvcm1hdGlvbiBwcm92aWRlZCB0byBkbwotICogdGhlIEVPSSBIdkNhbGwuICBUaGlzIGlzIGRvbmUgYnkgWG1QY2lMcEV2ZW50LmMKKyAqIFRoaXMgZG9lcyBub3RoaW5nIGJlY2F1c2UgdGhlcmUgaXMgbm90IGVub3VnaCBpbmZvcm1hdGlvbgorICogcHJvdmlkZWQgdG8gZG8gdGhlIEVPSSBIdkNhbGwuICBUaGlzIGlzIGRvbmUgYnkgWG1QY2lMcEV2ZW50LmMKICAqLwogc3RhdGljIHZvaWQgaVNlcmllc19lbmRfSVJRKHVuc2lnbmVkIGludCBpcnEpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWlzYy5TIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL21pc2MuUwppbmRleCAwOWYxNDUyLi5kZmU3YWExIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWlzYy5TCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9taXNjLlMKQEAgLTE1LDYgKzE1LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgogCiAJLnRleHQKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYwppbmRleCA3ZjhmMGNkLi42YTI5ZjMwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYwpAQCAtMzksNyArMzksOCBAQAogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9pb21tdS5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgotCisjaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9wYWNhLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CkBAIC03MSw3ICs3Miw3IEBACiAjZW5kaWYKIAogLyogRnVuY3Rpb24gUHJvdG90eXBlcyAqLwotc3RhdGljIHZvaWQgYnVpbGRfaVNlcmllc19NZW1vcnlfTWFwKHZvaWQpOworc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVpbGRfaVNlcmllc19NZW1vcnlfTWFwKHZvaWQpOwogc3RhdGljIHZvaWQgaXNlcmllc19zaGFyZWRfaWRsZSh2b2lkKTsKIHN0YXRpYyB2b2lkIGlzZXJpZXNfZGVkaWNhdGVkX2lkbGUodm9pZCk7CiAjaWZkZWYgQ09ORklHX1BDSQpAQCAtODQsNyArODUsNiBAQAogaW50IHBpcmFuaGFfc2ltdWxhdG9yOwogCiBleHRlcm4gaW50IHJkX3NpemU7CQkvKiBEZWZpbmVkIGluIGRyaXZlcnMvYmxvY2svcmQuYyAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcga2xpbWl0OwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW1iZWRkZWRfc3lzbWFwX3N0YXJ0OwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW1iZWRkZWRfc3lzbWFwX2VuZDsKIApAQCAtNDAzLDkgKzQwMywxMSBAQAogICogYSB0YWJsZSB1c2VkIHRvIHRyYW5zbGF0ZSBMaW51eCdzIHBoeXNpY2FsIGFkZHJlc3NlcyB0byB0aGVzZQogICogYWJzb2x1dGUgYWRkcmVzc2VzLiAgQWJzb2x1dGUgYWRkcmVzc2VzIGFyZSBuZWVkZWQgd2hlbgogICogY29tbXVuaWNhdGluZyB3aXRoIHRoZSBoeXBlcnZpc29yIChlLmcuIHRvIGJ1aWxkIEhQVCBlbnRyaWVzKQorICoKKyAqIFJldHVybnMgdGhlIHBoeXNpY2FsIG1lbW9yeSBzaXplCiAgKi8KIAotc3RhdGljIHZvaWQgX19pbml0IGJ1aWxkX2lTZXJpZXNfTWVtb3J5X01hcCh2b2lkKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGJ1aWxkX2lTZXJpZXNfTWVtb3J5X01hcCh2b2lkKQogewogCXUzMiBsb2FkQXJlYUZpcnN0Q2h1bmssIGxvYWRBcmVhTGFzdENodW5rLCBsb2FkQXJlYVNpemU7CiAJdTMyIG5leHRQaHlzQ2h1bms7CkBAIC01MzgsNyArNTQwLDcgQEAKIAkgKiB3aGljaCBzaG91bGQgYmUgZXF1YWwgdG8KIAkgKiAgIG5leHRQaHlzQ2h1bmsKIAkgKi8KLQlzeXN0ZW1jZmctPnBoeXNpY2FsTWVtb3J5U2l6ZSA9IGNodW5rX3RvX2FkZHIobmV4dFBoeXNDaHVuayk7CisJcmV0dXJuIGNodW5rX3RvX2FkZHIobmV4dFBoeXNDaHVuayk7CiB9CiAKIC8qCkBAIC01NjQsOCArNTY2LDggQEAKIAlwcmludGsoIk1heCBwaHlzaWNhbCBwcm9jZXNzb3JzID0gJWRcbiIsCiAJCQlpdFZwZEFyZWFzLnhTbGljTWF4UGh5c2ljYWxQcm9jcyk7CiAKLQlzeXN0ZW1jZmctPnByb2Nlc3NvciA9IHhJb0hyaVByb2Nlc3NvclZwZFtwcm9jSXhdLnhQVlI7Ci0JcHJpbnRrKCJQcm9jZXNzb3IgdmVyc2lvbiA9ICV4XG4iLCBzeXN0ZW1jZmctPnByb2Nlc3Nvcik7CisJX3N5c3RlbWNmZy0+cHJvY2Vzc29yID0geElvSHJpUHJvY2Vzc29yVnBkW3Byb2NJeF0ueFBWUjsKKwlwcmludGsoIlByb2Nlc3NvciB2ZXJzaW9uID0gJXhcbiIsIF9zeXN0ZW1jZmctPnByb2Nlc3Nvcik7CiB9CiAKIHN0YXRpYyB2b2lkIGlTZXJpZXNfc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKQEAgLTcwMiw3ICs3MDQsNiBAQAogCiBzdGF0aWMgdm9pZCBpc2VyaWVzX2RlZGljYXRlZF9pZGxlKHZvaWQpCiB7Ci0JbG9uZyBvbGR2YWw7CiAJc2V0X3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CiAKIAl3aGlsZSAoMSkgewpAQCAtOTI5LDcgKzkzMCw3IEBACiAJZHRfZW5kX25vZGUoZHQpOwogfQogCi12b2lkIGJ1aWxkX2ZsYXRfZHQoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQpCit2b2lkIGJ1aWxkX2ZsYXRfZHQoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsIHVuc2lnbmVkIGxvbmcgcGh5c19tZW1fc2l6ZSkKIHsKIAl1NjQgdG1wWzJdOwogCkBAIC05NDUsNyArOTQ2LDcgQEAKIAlkdF9wcm9wX3N0cihkdCwgIm5hbWUiLCAibWVtb3J5Iik7CiAJZHRfcHJvcF9zdHIoZHQsICJkZXZpY2VfdHlwZSIsICJtZW1vcnkiKTsKIAl0bXBbMF0gPSAwOwotCXRtcFsxXSA9IHN5c3RlbWNmZy0+cGh5c2ljYWxNZW1vcnlTaXplOworCXRtcFsxXSA9IHBoeXNfbWVtX3NpemU7CiAJZHRfcHJvcF91NjRfbGlzdChkdCwgInJlZyIsIHRtcCwgMik7CiAJZHRfZW5kX25vZGUoZHQpOwogCkBAIC05NjUsMTMgKzk2NiwxNSBAQAogCiB2b2lkICogX19pbml0IGlTZXJpZXNfZWFybHlfc2V0dXAodm9pZCkKIHsKKwl1bnNpZ25lZCBsb25nIHBoeXNfbWVtX3NpemU7CisKIAlpU2VyaWVzX2ZpeHVwX2tsaW1pdCgpOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIHRoZSB0YWJsZSB3aGljaCB0cmFuc2xhdGUgTGludXggcGh5c2ljYWwgYWRkcmVzc2VzIHRvCiAJICogQVMvNDAwIGFic29sdXRlIGFkZHJlc3NlcwogCSAqLwotCWJ1aWxkX2lTZXJpZXNfTWVtb3J5X01hcCgpOworCXBoeXNfbWVtX3NpemUgPSBidWlsZF9pU2VyaWVzX01lbW9yeV9NYXAoKTsKIAogCWlTZXJpZXNfZ2V0X2NtZGxpbmUoKTsKIApAQCAtOTgxLDcgKzk4NCw3IEBACiAJLyogUGFyc2UgZWFybHkgcGFyYW1ldGVycywgaW4gcGFydGljdWxhciBtZW09eCAqLwogCXBhcnNlX2Vhcmx5X3BhcmFtKCk7CiAKLQlidWlsZF9mbGF0X2R0KCZpc2VyaWVzX2R0KTsKKwlidWlsZF9mbGF0X2R0KCZpc2VyaWVzX2R0LCBwaHlzX21lbV9zaXplKTsKIAogCXJldHVybiAodm9pZCAqKSBfX3BhKCZpc2VyaWVzX2R0KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3BjaS5jCmluZGV4IDM0MGMyMWMuLjg5NWFlYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9wY2kuYwpAQCAtMzgwLDkgKzM4MCw2IEBACiAJZm9yX2VhY2hfcGNpX2RldihkZXYpCiAJCXBjaV9yZWFkX2lycV9saW5lKGRldik7CiAKLQkvKiBEbyB0aGUgbWFwcGluZyBvZiB0aGUgSU8gc3BhY2UgKi8KLQlwaGJzX3JlbWFwX2lvKCk7Ci0KIAlEQkcoIiA8LSBtYXBsZV9wY2liaW9zX2ZpeHVwXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wY2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGNpLmMKaW5kZXggOGY4MThkMC4uZGZkNDFiOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BjaS5jCkBAIC05MTgsOSArOTE4LDYgQEAKIAkJCVBDSV9ETihucCktPmJ1c25vID0gMHhmMDsKIAl9CiAKLQkvKiBtYXAgaW4gUENJIEkvTyBzcGFjZSAqLwotCXBoYnNfcmVtYXBfaW8oKTsKLQogCS8qIHBtYWNfY2hlY2tfaHRfbGluaygpOyAqLwogCiAJLyogVGVsbCBwY2kuYyB0byBub3QgdXNlIHRoZSBjb21tb24gcmVzb3VyY2UgYWxsb2NhdGlvbiBtZWNoYW5pc20gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCmluZGV4IDgzYTQ5ZTguLjkwMDQwYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYwpAQCAtNzQsNiArNzQsOSBAQAogI2RlZmluZSBHQVRXSUNLX0lSUV9QT09MX1NJWkUgICAgICAgIDEwCiBzdGF0aWMgc3RydWN0IGludGVycnVwdF9pbmZvIGdhdHdpY2tfaW50X3Bvb2xbR0FUV0lDS19JUlFfUE9PTF9TSVpFXTsKIAorI2RlZmluZSBOUl9NQVNLX1dPUkRTCSgoTlJfSVJRUyArIDMxKSAvIDMyKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgcHBjX2xvc3RfaW50ZXJydXB0c1tOUl9NQVNLX1dPUkRTXTsKKwogLyoKICAqIE1hcmsgYW4gaXJxIGFzICJsb3N0Ii4gIFRoaXMgaXMgb25seSB1c2VkIG9uIHRoZSBwbWFjCiAgKiBzaW5jZSBpdCBjYW4gbG9zZSBpbnRlcnJ1cHRzIChzZWUgcG1hY19zZXRfaXJxX21hc2spLgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMKaW5kZXggZTFmOTQ0My4uOTU3YjA5MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jCkBAIC0zMDUsOSArMzA1LDE5IEBACiAJcHN1cmdlX3N0YXJ0ID0gaW9yZW1hcChQU1VSR0VfU1RBUlQsIDQpOwogCXBzdXJnZV9wcmlfaW50ciA9IGlvcmVtYXAoUFNVUkdFX1BSSV9JTlRSLCA0KTsKIAotCS8qIHRoaXMgaXMgbm90IGFjdHVhbGx5IHN0cmljdGx5IG5lY2Vzc2FyeSAtLSBwYXVsdXMuICovCi0JZm9yIChpID0gMTsgaSA8IG5jcHVzOyArK2kpCi0JCXNtcF9od19pbmRleFtpXSA9IGk7CisJLyoKKwkgKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIE9GIGRvZXNuJ3Qga25vdyBhYm91dCB0aGUKKwkgKiBzZWNvbmRhcnkgY3B1KHMpLCBhbmQgdGh1cyB0aGVyZSBhcmVuJ3Qgbm9kZXMgaW4gdGhlCisJICogZGV2aWNlIHRyZWUgZm9yIHRoZW0sIGFuZCBzbXBfc2V0dXBfY3B1X21hcHMgaGFzbid0CisJICogc2V0IHRoZWlyIGJpdHMgaW4gY3B1X3Bvc3NpYmxlX21hcCBhbmQgY3B1X3ByZXNlbnRfbWFwLgorCSAqLworCWlmIChuY3B1cyA+IE5SX0NQVVMpCisJCW5jcHVzID0gTlJfQ1BVUzsKKwlmb3IgKGkgPSAxOyBpIDwgbmNwdXMgOyArK2kpIHsKKwkJY3B1X3NldChpLCBjcHVfcHJlc2VudF9tYXApOworCQljcHVfc2V0KGksIGNwdV9wb3NzaWJsZV9tYXApOworCQlzZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGksIGkpOworCX0KIAogCWlmIChwcGNfbWQucHJvZ3Jlc3MpIHBwY19tZC5wcm9ncmVzcygic21wX3BzdXJnZV9wcm9iZSAtIGRvbmUiLCAweDM1Mik7CiAKQEAgLTM0OCw2ICszNTgsNyBAQAogCWludCB0OwogCiAJc2V0X2RlYyh0Yl90aWNrc19wZXJfamlmZnkpOworCS8qIFhYWCBmaXhtZSAqLwogCXNldF90YigwLCAwKTsKIAlsYXN0X2ppZmZ5X3N0YW1wKGNwdV9ucikgPSAwOwogCkBAIC0zNjMsOCArMzc0LDYgQEAKIAogCS8qIG5vdyBpbnRlcnJ1cHQgdGhlIHNlY29uZGFyeSwgc3RhcnRpbmcgYm90aCBUQnMgKi8KIAlwc3VyZ2Vfc2V0X2lwaSgxKTsKLQotCXNtcF90Yl9zeW5jaHJvbml6ZWQgPSAxOwogfQogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBwc3VyZ2VfaXJxYWN0aW9uID0gewpAQCAtNjI1LDkgKzYzNCw4IEBACiAJZm9yICh0ID0gMTAwMDAwOyB0ID4gMCAmJiBzZWNfdGJfcmVzZXQ7IC0tdCkKIAkJdWRlbGF5KDEwKTsKIAlpZiAoc2VjX3RiX3Jlc2V0KQorCQkvKiBYWFggQlVHX09OIGhlcmU/ICovCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRpbWVvdXQgd2FpdGluZyBzeW5jKDIpIG9uIHNlY29uZCBDUFVcbiIpOwotCWVsc2UKLQkJc21wX3RiX3N5bmNocm9uaXplZCA9IDE7CiAKIAkvKiBOb3csIHJlc3RhcnQgdGhlIHRpbWViYXNlIGJ5IGxlYXZpbmcgdGhlIEdQSU8gdG8gYW4gb3BlbiBjb2xsZWN0b3IgKi8KICAgICAgICAJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfV1JJVEVfR1BJTywgTlVMTCwgY29yZTk5X3RiX2dwaW8sIDApOwpAQCAtODEwLDE5ICs4MTgsOSBAQAogfQogCiAKLS8qIENvcmU5OSBNYWNzIChkdWFsIEc0cyBhbmQgRzVzKSAqLwotc3RydWN0IHNtcF9vcHNfdCBjb3JlOTlfc21wX29wcyA9IHsKLQkubWVzc2FnZV9wYXNzCT0gc21wX21waWNfbWVzc2FnZV9wYXNzLAotCS5wcm9iZQkJPSBzbXBfY29yZTk5X3Byb2JlLAotCS5raWNrX2NwdQk9IHNtcF9jb3JlOTlfa2lja19jcHUsCi0JLnNldHVwX2NwdQk9IHNtcF9jb3JlOTlfc2V0dXBfY3B1LAotCS5naXZlX3RpbWViYXNlCT0gc21wX2NvcmU5OV9naXZlX3RpbWViYXNlLAotCS50YWtlX3RpbWViYXNlCT0gc21wX2NvcmU5OV90YWtlX3RpbWViYXNlLAotfTsKLQogI2lmIGRlZmluZWQoQ09ORklHX0hPVFBMVUdfQ1BVKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikKIAotaW50IF9fY3B1X2Rpc2FibGUodm9pZCkKK2ludCBzbXBfY29yZTk5X2NwdV9kaXNhYmxlKHZvaWQpCiB7CiAJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X29ubGluZV9tYXApOwogCkBAIC04NDYsNyArODQ0LDcgQEAKIAlsb3dfY3B1X2RpZSgpOwogfQogCi12b2lkIF9fY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KQordm9pZCBzbXBfY29yZTk5X2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSkKIHsKIAlpbnQgdGltZW91dDsKIApAQCAtODU4LDggKzg1NiwyMSBAQAogCQl9CiAJCW1zbGVlcCgxKTsKIAl9Ci0JY3B1X2NhbGxpbl9tYXBbY3B1XSA9IDA7CiAJY3B1X2RlYWRbY3B1XSA9IDA7CiB9CiAKICNlbmRpZgorCisvKiBDb3JlOTkgTWFjcyAoZHVhbCBHNHMgYW5kIEc1cykgKi8KK3N0cnVjdCBzbXBfb3BzX3QgY29yZTk5X3NtcF9vcHMgPSB7CisJLm1lc3NhZ2VfcGFzcwk9IHNtcF9tcGljX21lc3NhZ2VfcGFzcywKKwkucHJvYmUJCT0gc21wX2NvcmU5OV9wcm9iZSwKKwkua2lja19jcHUJPSBzbXBfY29yZTk5X2tpY2tfY3B1LAorCS5zZXR1cF9jcHUJPSBzbXBfY29yZTk5X3NldHVwX2NwdSwKKwkuZ2l2ZV90aW1lYmFzZQk9IHNtcF9jb3JlOTlfZ2l2ZV90aW1lYmFzZSwKKwkudGFrZV90aW1lYmFzZQk9IHNtcF9jb3JlOTlfdGFrZV90aW1lYmFzZSwKKyNpZiBkZWZpbmVkKENPTkZJR19IT1RQTFVHX0NQVSkgJiYgZGVmaW5lZChDT05GSUdfUFBDMzIpCisJLmNwdV9kaXNhYmxlCT0gc21wX2NvcmU5OV9jcHVfZGlzYWJsZSwKKwkuY3B1X2RpZQk9IHNtcF9jb3JlOTlfY3B1X2RpZSwKKyNlbmRpZgorfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZQppbmRleCBiOTkzOGZlLi5lN2NhNWIxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlCkBAIC0zLDMgKzMsNSBAQAogb2JqLSQoQ09ORklHX1NNUCkJKz0gc21wLm8KIG9iai0kKENPTkZJR19JQk1WSU8pCSs9IHZpby5vCiBvYmotJChDT05GSUdfWElDUykJKz0geGljcy5vCitvYmotJChDT05GSUdfU0NBTkxPRykJKz0gc2NhbmxvZy5vCitvYmotJChDT05GSUdfRUVIKSAgICArPSBlZWgubyBlZWhfZXZlbnQubwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvZWVoLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKc2ltaWxhcml0eSBpbmRleCA2MyUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvZWVoLmMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYwppbmRleCAwMzVkMWIxLi43OWRlMjMxIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9lZWguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKQEAgLTEsMzkgKzEsMzcgQEAKIC8qCiAgKiBlZWguYwogICogQ29weXJpZ2h0IChDKSAyMDAxIERhdmUgRW5nZWJyZXRzZW4gJiBUb2RkIEluZ2xldHQgSUJNIENvcnBvcmF0aW9uCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAorICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9lZWguaD4KKyNpbmNsdWRlIDxhc20vZWVoX2V2ZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLSNpbmNsdWRlIDxhc20vcnRhcy5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+CiAjaW5jbHVkZSA8YXNtL3BwYy1wY2kuaD4KKyNpbmNsdWRlIDxhc20vcnRhcy5oPgogCiAjdW5kZWYgREVCVUcKIApAQCAtNDksOCArNDcsOCBAQAogICogIHdlcmUgImVtcHR5IjogYWxsIHJlYWRzIHJldHVybiAweGZmJ3MgYW5kIGFsbCB3cml0ZXMgYXJlIHNpbGVudGx5CiAgKiAgaWdub3JlZC4gIEVFSCBzbG90IGlzb2xhdGlvbiBldmVudHMgY2FuIGJlIHRyaWdnZXJlZCBieSBwYXJpdHkKICAqICBlcnJvcnMgb24gdGhlIGFkZHJlc3Mgb3IgZGF0YSBidXNzZXMgKGUuZy4gZHVyaW5nIHBvc3RlZCB3cml0ZXMpLAotICogIHdoaWNoIGluIHR1cm4gbWlnaHQgYmUgY2F1c2VkIGJ5IGR1c3QsIHZpYnJhdGlvbiwgaHVtaWRpdHksCi0gKiAgcmFkaW9hY3Rpdml0eSBvciBwbGFpbi1vbGQgZmFpbGVkIGhhcmR3YXJlLgorICogIHdoaWNoIGluIHR1cm4gbWlnaHQgYmUgY2F1c2VkIGJ5IGxvdyB2b2x0YWdlIG9uIHRoZSBidXMsIGR1c3QsCisgKiAgdmlicmF0aW9uLCBodW1pZGl0eSwgcmFkaW9hY3Rpdml0eSBvciBwbGFpbi1vbGQgZmFpbGVkIGhhcmR3YXJlLgogICoKICAqICBOb3RlLCBob3dldmVyLCB0aGF0IG9uZSBvZiB0aGUgbGVhZGluZyBjYXVzZXMgb2YgRUVIIHNsb3QKICAqICBmcmVlemUgZXZlbnRzIGFyZSBidWdneSBkZXZpY2UgZHJpdmVycywgYnVnZ3kgZGV2aWNlIG1pY3JvY29kZSwKQEAgLTcxLDI2ICs2OSwxNSBAQAogICogIGFuZCBzZW50IG91dCBmb3IgcHJvY2Vzc2luZy4KICAqLwogCi0vKiogQnVzIFVuaXQgSUQgbWFjcm9zOyBnZXQgbG93IGFuZCBoaSAzMi1iaXRzIG9mIHRoZSA2NC1iaXQgQlVJRCAqLwotI2RlZmluZSBCVUlEX0hJKGJ1aWQpICgoYnVpZCkgPj4gMzIpCi0jZGVmaW5lIEJVSURfTE8oYnVpZCkgKChidWlkKSAmIDB4ZmZmZmZmZmYpCi0KLS8qIEVFSCBldmVudCB3b3JrcXVldWUgc2V0dXAuICovCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGVlaF9ldmVudGxpc3RfbG9jayk7Ci1MSVNUX0hFQUQoZWVoX2V2ZW50bGlzdCk7Ci1zdGF0aWMgdm9pZCBlZWhfZXZlbnRfaGFuZGxlcih2b2lkICopOwotREVDTEFSRV9XT1JLKGVlaF9ldmVudF93cSwgZWVoX2V2ZW50X2hhbmRsZXIsIE5VTEwpOwotCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICplZWhfbm90aWZpZXJfY2hhaW47Ci0KLS8qCi0gKiBJZiBhIGRldmljZSBkcml2ZXIga2VlcHMgcmVhZGluZyBhbiBNTUlPIHJlZ2lzdGVyIGluIGFuIGludGVycnVwdAorLyogSWYgYSBkZXZpY2UgZHJpdmVyIGtlZXBzIHJlYWRpbmcgYW4gTU1JTyByZWdpc3RlciBpbiBhbiBpbnRlcnJ1cHQKICAqIGhhbmRsZXIgYWZ0ZXIgYSBzbG90IGlzb2xhdGlvbiBldmVudCBoYXMgb2NjdXJyZWQsIHdlIGFzc3VtZSBpdAogICogaXMgYnJva2VuIGFuZCBwYW5pYy4gIFRoaXMgc2V0cyB0aGUgdGhyZXNob2xkIGZvciBob3cgbWFueSByZWFkCiAgKiBhdHRlbXB0cyB3ZSBhbGxvdyBiZWZvcmUgcGFuaWNraW5nLgogICovCi0jZGVmaW5lIEVFSF9NQVhfRkFJTFMJMTAwMAotc3RhdGljIGF0b21pY190IGVlaF9mYWlsX2NvdW50OworI2RlZmluZSBFRUhfTUFYX0ZBSUxTCTEwMDAwMAorCisvKiBNaXNjIGZvcndhcmQgZGVjbGFyYWlvbnMgKi8KK3N0YXRpYyB2b2lkIGVlaF9zYXZlX2JhcnMoc3RydWN0IHBjaV9kZXYgKiBwZGV2LCBzdHJ1Y3QgcGNpX2RuICpwZG4pOwogCiAvKiBSVEFTIHRva2VucyAqLwogc3RhdGljIGludCBpYm1fc2V0X2VlaF9vcHRpb247CkBAIC0xMDEsMTIgKzg4LDE5IEBACiAKIHN0YXRpYyBpbnQgZWVoX3N1YnN5c3RlbV9lbmFibGVkOwogCisvKiBMb2NrIHRvIGF2b2lkIHJhY2VzIGR1ZSB0byBtdWx0aXBsZSByZXBvcnRzIG9mIGFuIGVycm9yICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNvbmZpcm1fZXJyb3JfbG9jayk7CisKIC8qIEJ1ZmZlciBmb3IgcmVwb3J0aW5nIHNsb3QtZXJyb3ItZGV0YWlsIHJ0YXMgY2FsbHMgKi8KIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNsb3RfZXJyYnVmW1JUQVNfRVJST1JfTE9HX01BWF07CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNsb3RfZXJyYnVmX2xvY2spOwogc3RhdGljIGludCBlZWhfZXJyb3JfYnVmX3NpemU7CiAKIC8qIFN5c3RlbSBtb25pdG9yaW5nIHN0YXRpc3RpY3MgKi8KK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBub19kZXZpY2UpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIG5vX2RuKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBub19jZmdfYWRkcik7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgaWdub3JlZF9jaGVjayk7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgdG90YWxfbW1pb19mZnMpOwogc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGZhbHNlX3Bvc2l0aXZlcyk7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgaWdub3JlZF9mYWlsdXJlcyk7CkBAIC0yMjQsOSArMjE4LDkgQEAKIAl3aGlsZSAoKnApIHsKIAkJcGFyZW50ID0gKnA7CiAJCXBpYXIgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBwY2lfaW9fYWRkcl9yYW5nZSwgcmJfbm9kZSk7Ci0JCWlmIChhbG8gPCBwaWFyLT5hZGRyX2xvKSB7CisJCWlmIChhaGkgPCBwaWFyLT5hZGRyX2xvKSB7CiAJCQlwID0gJnBhcmVudC0+cmJfbGVmdDsKLQkJfSBlbHNlIGlmIChhaGkgPiBwaWFyLT5hZGRyX2hpKSB7CisJCX0gZWxzZSBpZiAoYWxvID4gcGlhci0+YWRkcl9oaSkgewogCQkJcCA9ICZwYXJlbnQtPnJiX3JpZ2h0OwogCQl9IGVsc2UgewogCQkJaWYgKGRldiAhPSBwaWFyLT5wY2lkZXYgfHwKQEAgLTI0NSw2ICsyMzksMTEgQEAKIAlwaWFyLT5wY2lkZXYgPSBkZXY7CiAJcGlhci0+ZmxhZ3MgPSBmbGFnczsKIAorI2lmZGVmIERFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIlBJQVI6IGluc2VydCByYW5nZT1bJWx4OiVseF0gZGV2PSVzXG4iLAorCSAgICAgICAgICAgICAgICAgIGFsbywgYWhpLCBwY2lfbmFtZSAoZGV2KSk7CisjZW5kaWYKKwogCXJiX2xpbmtfbm9kZSgmcGlhci0+cmJfbm9kZSwgcGFyZW50LCBwKTsKIAlyYl9pbnNlcnRfY29sb3IoJnBpYXItPnJiX25vZGUsICZwY2lfaW9fYWRkcl9jYWNoZV9yb290LnJiX3Jvb3QpOwogCkBAIC0yNjAsMTggKzI1OSwxNyBAQAogCiAJZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKIAlpZiAoIWRuKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlBDSTogbm8gcGNpIGRuIGZvdW5kIGZvciBkZXY9JXNcbiIsCi0JCQlwY2lfbmFtZShkZXYpKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUENJOiBubyBwY2kgZG4gZm91bmQgZm9yIGRldj0lc1xuIiwgcGNpX25hbWUoZGV2KSk7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBTa2lwIGFueSBkZXZpY2VzIGZvciB3aGljaCBFRUggaXMgbm90IGVuYWJsZWQuICovCi0JcGRuID0gZG4tPmRhdGE7CisJcGRuID0gUENJX0ROKGRuKTsKIAlpZiAoIShwZG4tPmVlaF9tb2RlICYgRUVIX01PREVfU1VQUE9SVEVEKSB8fAogCSAgICBwZG4tPmVlaF9tb2RlICYgRUVIX01PREVfTk9DSEVDSykgewogI2lmZGVmIERFQlVHCi0JCXByaW50ayhLRVJOX0lORk8gIlBDSTogc2tpcCBidWlsZGluZyBhZGRyZXNzIGNhY2hlIGZvcj0lc1xuIiwKLQkJICAgICAgIHBjaV9uYW1lKGRldikpOworCQlwcmludGsoS0VSTl9JTkZPICJQQ0k6IHNraXAgYnVpbGRpbmcgYWRkcmVzcyBjYWNoZSBmb3I9JXMgLSAlc1xuIiwKKwkJICAgICAgIHBjaV9uYW1lKGRldiksIHBkbi0+bm9kZS0+ZnVsbF9uYW1lKTsKICNlbmRpZgogCQlyZXR1cm47CiAJfQpAQCAtMzA3LDcgKzMwNSw3IEBACiAgKiB3ZSBtYWludGFpbiBhIGNhY2hlIG9mIGRldmljZXMgdGhhdCBjYW4gYmUgcXVpY2tseSBzZWFyY2hlZC4KICAqIFRoaXMgcm91dGluZSBhZGRzIGEgZGV2aWNlIHRvIHRoYXQgY2FjaGUuCiAgKi8KLXZvaWQgcGNpX2FkZHJfY2FjaGVfaW5zZXJ0X2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHZvaWQgcGNpX2FkZHJfY2FjaGVfaW5zZXJ0X2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTM1MCw3ICszNDgsNyBAQAogICogdGhlIHRyZWUgbXVsdGlwbGUgdGltZXMgKG9uY2UgcGVyIHJlc291cmNlKS4KICAqIEJ1dCBzbyB3aGF0OyBkZXZpY2UgcmVtb3ZhbCBkb2Vzbid0IG5lZWQgdG8gYmUgdGhhdCBmYXN0LgogICovCi12b2lkIHBjaV9hZGRyX2NhY2hlX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyB2b2lkIHBjaV9hZGRyX2NhY2hlX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0zNzAsOCArMzY4LDEyIEBACiAgKi8KIHZvaWQgX19pbml0IHBjaV9hZGRyX2NhY2hlX2J1aWxkKHZvaWQpCiB7CisJc3RydWN0IGRldmljZV9ub2RlICpkbjsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKIAorCWlmICghZWVoX3N1YnN5c3RlbV9lbmFibGVkKQorCQlyZXR1cm47CisKIAlzcGluX2xvY2tfaW5pdCgmcGNpX2lvX2FkZHJfY2FjaGVfcm9vdC5waWFyX2xvY2spOwogCiAJd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYpKSAhPSBOVUxMKSB7CkBAIC0zODAsNiArMzgyLDEwIEBACiAJCQljb250aW51ZTsKIAkJfQogCQlwY2lfYWRkcl9jYWNoZV9pbnNlcnRfZGV2aWNlKGRldik7CisKKwkJLyogU2F2ZSB0aGUgQkFSJ3M7IGZpcm13YXJlIGRvZXNuJ3QgcmVzdG9yZSB0aGVzZSBhZnRlciBFRUggcmVzZXQgKi8KKwkJZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKKwkJZWVoX3NhdmVfYmFycyhkZXYsIFBDSV9ETihkbikpOwogCX0KIAogI2lmZGVmIERFQlVHCkBAIC0zOTEsMjIgKzM5NywyNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBBYm92ZSBsaWVzIHRoZSBQQ0kgQWRkcmVzcyBDYWNoZS4gQmVsb3cgbGllcyB0aGUgRUVIIGV2ZW50IGluZnJhc3RydWN0dXJlICovCiAKLS8qKgotICogZWVoX3JlZ2lzdGVyX25vdGlmaWVyIC0gUmVnaXN0ZXIgdG8gZmluZCBvdXQgYWJvdXQgRUVIIGV2ZW50cy4KLSAqIEBuYjogbm90aWZpZXIgYmxvY2sgdG8gY2FsbGJhY2sgb24gZXZlbnRzCi0gKi8KLWludCBlZWhfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3ZvaWQgZWVoX3Nsb3RfZXJyb3JfZGV0YWlsIChzdHJ1Y3QgcGNpX2RuICpwZG4sIGludCBzZXZlcml0eSkKIHsKLQlyZXR1cm4gbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmVlaF9ub3RpZmllcl9jaGFpbiwgbmIpOwotfQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJjOwogCi0vKioKLSAqIGVlaF91bnJlZ2lzdGVyX25vdGlmaWVyIC0gVW5yZWdpc3RlciB0byBhbiBFRUggZXZlbnQgbm90aWZpZXIuCi0gKiBAbmI6IG5vdGlmaWVyIGJsb2NrIHRvIGNhbGxiYWNrIG9uIGV2ZW50cwotICovCi1pbnQgZWVoX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKLXsKLQlyZXR1cm4gbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmZWVoX25vdGlmaWVyX2NoYWluLCBuYik7CisJLyogTG9nIHRoZSBlcnJvciB3aXRoIHRoZSBydGFzIGxvZ2dlciAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZzbG90X2VycmJ1Zl9sb2NrLCBmbGFncyk7CisJbWVtc2V0KHNsb3RfZXJyYnVmLCAwLCBlZWhfZXJyb3JfYnVmX3NpemUpOworCisJcmMgPSBydGFzX2NhbGwoaWJtX3Nsb3RfZXJyb3JfZGV0YWlsLAorCSAgICAgICAgICAgICAgIDgsIDEsIE5VTEwsIHBkbi0+ZWVoX2NvbmZpZ19hZGRyLAorCSAgICAgICAgICAgICAgIEJVSURfSEkocGRuLT5waGItPmJ1aWQpLAorCSAgICAgICAgICAgICAgIEJVSURfTE8ocGRuLT5waGItPmJ1aWQpLCBOVUxMLCAwLAorCSAgICAgICAgICAgICAgIHZpcnRfdG9fcGh5cyhzbG90X2VycmJ1ZiksCisJICAgICAgICAgICAgICAgZWVoX2Vycm9yX2J1Zl9zaXplLAorCSAgICAgICAgICAgICAgIHNldmVyaXR5KTsKKworCWlmIChyYyA9PSAwKQorCQlsb2dfZXJyb3Ioc2xvdF9lcnJidWYsIEVSUl9UWVBFX1JUQVNfTE9HLCAwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG90X2VycmJ1Zl9sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgpAQCAtNDE0LDE2ICs0MjQsMTYgQEAKICAqIEBkbjogZGV2aWNlIG5vZGUgdG8gcmVhZAogICogQHJldHM6IGFycmF5IHRvIHJldHVybiByZXN1bHRzIGluCiAgKi8KLXN0YXRpYyBpbnQgcmVhZF9zbG90X3Jlc2V0X3N0YXRlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIGludCByZXRzW10pCitzdGF0aWMgaW50IHJlYWRfc2xvdF9yZXNldF9zdGF0ZShzdHJ1Y3QgcGNpX2RuICpwZG4sIGludCByZXRzW10pCiB7CiAJaW50IHRva2VuLCBvdXRwdXRzOwotCXN0cnVjdCBwY2lfZG4gKnBkbiA9IGRuLT5kYXRhOwogCiAJaWYgKGlibV9yZWFkX3Nsb3RfcmVzZXRfc3RhdGUyICE9IFJUQVNfVU5LTk9XTl9TRVJWSUNFKSB7CiAJCXRva2VuID0gaWJtX3JlYWRfc2xvdF9yZXNldF9zdGF0ZTI7CiAJCW91dHB1dHMgPSA0OwogCX0gZWxzZSB7CiAJCXRva2VuID0gaWJtX3JlYWRfc2xvdF9yZXNldF9zdGF0ZTsKKwkJcmV0c1syXSA9IDA7IC8qIGZha2UgUEUgVW5hdmFpbGFibGUgaW5mbyAqLwogCQlvdXRwdXRzID0gMzsKIAl9CiAKQEAgLTQzMiw3NSArNDQyLDggQEAKIH0KIAogLyoqCi0gKiBlZWhfcGFuaWMgLSBjYWxsIHBhbmljKCkgZm9yIGFuIGVlaCBldmVudCB0aGF0IGNhbm5vdCBiZSBoYW5kbGVkLgotICogVGhlIHBoaWxvc29waHkgb2YgdGhpcyByb3V0aW5lIGlzIHRoYXQgaXQgaXMgYmV0dGVyIHRvIHBhbmljIGFuZAotICogaGFsdCB0aGUgT1MgdGhhbiBpdCBpcyB0byByaXNrIHBvc3NpYmxlIGRhdGEgY29ycnVwdGlvbiBieQotICogb2JsaXZpb3VzIGRldmljZSBkcml2ZXJzIHRoYXQgZG9uJ3Qga25vdyBiZXR0ZXIuCi0gKgotICogQGRldiBwY2kgZGV2aWNlIHRoYXQgaGFkIGFuIGVlaCBldmVudAotICogQHJlc2V0X3N0YXRlIGN1cnJlbnQgcmVzZXQgc3RhdGUgb2YgdGhlIGRldmljZSBzbG90Ci0gKi8KLXN0YXRpYyB2b2lkIGVlaF9wYW5pYyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcmVzZXRfc3RhdGUpCi17Ci0JLyoKLQkgKiBYWFggV2Ugc2hvdWxkIGNyZWF0ZSBhIHNlcGFyYXRlIHN5c2N0bCBmb3IgdGhpcy4KLQkgKgotCSAqIFNpbmNlIHRoZSBwYW5pY19vbl9vb3BzIHN5c2N0bCBpcyB1c2VkIHRvIGhhbHQgdGhlIHN5c3RlbQotCSAqIGluIGxpZ2h0IG9mIHBvdGVudGlhbCBjb3JydXB0aW9uLCB3ZSBjYW4gdXNlIGl0IGhlcmUuCi0JICovCi0JaWYgKHBhbmljX29uX29vcHMpCi0JCXBhbmljKCJFRUg6IE1NSU8gZmFpbHVyZSAoJWQpIG9uIGRldmljZTolc1xuIiwgcmVzZXRfc3RhdGUsCi0JCSAgICAgIHBjaV9uYW1lKGRldikpOwotCWVsc2UgewotCQlfX2dldF9jcHVfdmFyKGlnbm9yZWRfZmFpbHVyZXMpKys7Ci0JCXByaW50ayhLRVJOX0lORk8gIkVFSDogSWdub3JlZCBNTUlPIGZhaWx1cmUgKCVkKSBvbiBkZXZpY2U6JXNcbiIsCi0JCSAgICAgICByZXNldF9zdGF0ZSwgcGNpX25hbWUoZGV2KSk7Ci0JfQotfQotCi0vKioKLSAqIGVlaF9ldmVudF9oYW5kbGVyIC0gZGlzcGF0Y2ggRUVIIGV2ZW50cy4gIFRoZSBkZXRlY3Rpb24gb2YgYSBmcm96ZW4KLSAqIHNsb3QgY2FuIG9jY3VyIGluc2lkZSBhbiBpbnRlcnJ1cHQsIHdoZXJlIGl0IGNhbiBiZSBoYXJkIHRvIGRvCi0gKiBhbnl0aGluZyBhYm91dCBpdC4gIFRoZSBnb2FsIG9mIHRoaXMgcm91dGluZSBpcyB0byBwdWxsIHRoZXNlCi0gKiBkZXRlY3Rpb24gZXZlbnRzIG91dCBvZiB0aGUgY29udGV4dCBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIGFuZAotICogcmUtZGlzcGF0Y2ggdGhlbSBmb3IgcHJvY2Vzc2luZyBhdCBhIGxhdGVyIHRpbWUgaW4gYSBub3JtYWwgY29udGV4dC4KLSAqCi0gKiBAZHVtbXkgLSB1bnVzZWQKLSAqLwotc3RhdGljIHZvaWQgZWVoX2V2ZW50X2hhbmRsZXIodm9pZCAqZHVtbXkpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgZWVoX2V2ZW50CSpldmVudDsKLQotCXdoaWxlICgxKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZlZWhfZXZlbnRsaXN0X2xvY2ssIGZsYWdzKTsKLQkJZXZlbnQgPSBOVUxMOwotCQlpZiAoIWxpc3RfZW1wdHkoJmVlaF9ldmVudGxpc3QpKSB7Ci0JCQlldmVudCA9IGxpc3RfZW50cnkoZWVoX2V2ZW50bGlzdC5uZXh0LCBzdHJ1Y3QgZWVoX2V2ZW50LCBsaXN0KTsKLQkJCWxpc3RfZGVsKCZldmVudC0+bGlzdCk7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWVoX2V2ZW50bGlzdF9sb2NrLCBmbGFncyk7Ci0JCWlmIChldmVudCA9PSBOVUxMKQotCQkJYnJlYWs7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiRUVIOiBNTUlPIGZhaWx1cmUgKCVkKSwgbm90aWZpeWluZyBkZXZpY2UgIgotCQkgICAgICAgIiVzXG4iLCBldmVudC0+cmVzZXRfc3RhdGUsCi0JCSAgICAgICBwY2lfbmFtZShldmVudC0+ZGV2KSk7Ci0KLQkJYXRvbWljX3NldCgmZWVoX2ZhaWxfY291bnQsIDApOwotCQlub3RpZmllcl9jYWxsX2NoYWluICgmZWVoX25vdGlmaWVyX2NoYWluLAotCQkJCSAgICAgRUVIX05PVElGWV9GUkVFWkUsIGV2ZW50KTsKLQotCQlfX2dldF9jcHVfdmFyKHNsb3RfcmVzZXRzKSsrOwotCi0JCXBjaV9kZXZfcHV0KGV2ZW50LT5kZXYpOwotCQlrZnJlZShldmVudCk7Ci0JfQotfQotCi0vKioKICAqIGVlaF90b2tlbl90b19waHlzIC0gY29udmVydCBFRUggYWRkcmVzcyB0b2tlbiB0byBwaHlzIGFkZHJlc3MKLSAqIEB0b2tlbiBpL28gdG9rZW4sIHNob3VsZCBiZSBhZGRyZXNzIGluIHRoZSBmb3JtIDB4RS4uLi4KKyAqIEB0b2tlbiBpL28gdG9rZW4sIHNob3VsZCBiZSBhZGRyZXNzIGluIHRoZSBmb3JtIDB4QS4uLi4KICAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGVlaF90b2tlbl90b19waHlzKHVuc2lnbmVkIGxvbmcgdG9rZW4pCiB7CkBAIC01MTUsNiArNDU4LDcwIEBACiAJcmV0dXJuIHBhIHwgKHRva2VuICYgKFBBR0VfU0laRS0xKSk7CiB9CiAKKy8qKiAKKyAqIFJldHVybiB0aGUgInBhcnRpdGlvbmFibGUgZW5kcG9pbnQiIChwZSkgdW5kZXIgd2hpY2ggdGhpcyBkZXZpY2UgbGllcworICovCitzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICogZmluZF9kZXZpY2VfcGUoc3RydWN0IGRldmljZV9ub2RlICpkbikKK3sKKwl3aGlsZSAoKGRuLT5wYXJlbnQpICYmIFBDSV9ETihkbi0+cGFyZW50KSAmJgorCSAgICAgIChQQ0lfRE4oZG4tPnBhcmVudCktPmVlaF9tb2RlICYgRUVIX01PREVfU1VQUE9SVEVEKSkgeworCQlkbiA9IGRuLT5wYXJlbnQ7CisJfQorCXJldHVybiBkbjsKK30KKworLyoqIE1hcmsgYWxsIGRldmljZXMgdGhhdCBhcmUgcGVlcnMgb2YgdGhpcyBkZXZpY2UgYXMgZmFpbGVkLgorICogIE1hcmsgdGhlIGRldmljZSBkcml2ZXIgdG9vLCBzbyB0aGF0IGl0IGNhbiBzZWUgdGhlIGZhaWx1cmUKKyAqICBpbW1lZGlhdGVseTsgdGhpcyBpcyBjcml0aWNhbCwgc2luY2Ugc29tZSBkcml2ZXJzIHBvbGwKKyAqICBzdGF0dXMgcmVnaXN0ZXJzIGluIGludGVycnVwdHMgLi4uIElmIGEgZHJpdmVyIGlzIHBvbGxpbmcsCisgKiAgYW5kIHRoZSBzbG90IGlzIGZyb3plbiwgdGhlbiB0aGUgZHJpdmVyIGNhbiBkZWFkbG9jayBpbgorICogIGFuIGludGVycnVwdCBjb250ZXh0LCB3aGljaCBpcyBiYWQuCisgKi8KKworc3RhdGljIHZvaWQgX19lZWhfbWFya19zbG90IChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBpbnQgbW9kZV9mbGFnKQoreworCXdoaWxlIChkbikgeworCQlpZiAoUENJX0ROKGRuKSkgeworCQkJUENJX0ROKGRuKS0+ZWVoX21vZGUgfD0gbW9kZV9mbGFnOworCisJCQlpZiAoZG4tPmNoaWxkKQorCQkJCV9fZWVoX21hcmtfc2xvdCAoZG4tPmNoaWxkLCBtb2RlX2ZsYWcpOworCQl9CisJCWRuID0gZG4tPnNpYmxpbmc7CisJfQorfQorCit2b2lkIGVlaF9tYXJrX3Nsb3QgKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIGludCBtb2RlX2ZsYWcpCit7CisJZG4gPSBmaW5kX2RldmljZV9wZSAoZG4pOworCVBDSV9ETihkbiktPmVlaF9tb2RlIHw9IG1vZGVfZmxhZzsKKwlfX2VlaF9tYXJrX3Nsb3QgKGRuLT5jaGlsZCwgbW9kZV9mbGFnKTsKK30KKworc3RhdGljIHZvaWQgX19lZWhfY2xlYXJfc2xvdCAoc3RydWN0IGRldmljZV9ub2RlICpkbiwgaW50IG1vZGVfZmxhZykKK3sKKwl3aGlsZSAoZG4pIHsKKwkJaWYgKFBDSV9ETihkbikpIHsKKwkJCVBDSV9ETihkbiktPmVlaF9tb2RlICY9IH5tb2RlX2ZsYWc7CisJCQlQQ0lfRE4oZG4pLT5lZWhfY2hlY2tfY291bnQgPSAwOworCQkJaWYgKGRuLT5jaGlsZCkKKwkJCQlfX2VlaF9jbGVhcl9zbG90IChkbi0+Y2hpbGQsIG1vZGVfZmxhZyk7CisJCX0KKwkJZG4gPSBkbi0+c2libGluZzsKKwl9Cit9CisKK3ZvaWQgZWVoX2NsZWFyX3Nsb3QgKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIGludCBtb2RlX2ZsYWcpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZmlybV9lcnJvcl9sb2NrLCBmbGFncyk7CisJZG4gPSBmaW5kX2RldmljZV9wZSAoZG4pOworCVBDSV9ETihkbiktPmVlaF9tb2RlICY9IH5tb2RlX2ZsYWc7CisJUENJX0ROKGRuKS0+ZWVoX2NoZWNrX2NvdW50ID0gMDsKKwlfX2VlaF9jbGVhcl9zbG90IChkbi0+Y2hpbGQsIG1vZGVfZmxhZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZmlybV9lcnJvcl9sb2NrLCBmbGFncyk7Cit9CisKIC8qKgogICogZWVoX2RuX2NoZWNrX2ZhaWx1cmUgLSBjaGVjayBpZiBhbGwgMSdzIGRhdGEgaXMgZHVlIHRvIEVFSCBzbG90IGZyZWV6ZQogICogQGRuIGRldmljZSBub2RlCkBAIC01MjYsNyArNTMzLDcgQEAKICAqIHdpbGwgcXVlcnkgZmlybXdhcmUgZm9yIHRoZSBFRUggc3RhdHVzLgogICoKICAqIFJldHVybnMgMCBpZiB0aGVyZSBoYXMgbm90IGJlZW4gYW4gRUVIIGVycm9yOyBvdGhlcndpc2UgcmV0dXJucwotICogYSBub24temVybyB2YWx1ZSBhbmQgcXVldWVzIHVwIGEgc29sdCBpc29sYXRpb24gZXZlbnQgbm90aWZpY2F0aW9uLgorICogYSBub24temVybyB2YWx1ZSBhbmQgcXVldWVzIHVwIGEgc2xvdCBpc29sYXRpb24gZXZlbnQgbm90aWZpY2F0aW9uLgogICoKICAqIEl0IGlzIHNhZmUgdG8gY2FsbCB0aGlzIHJvdXRpbmUgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQuCiAgKi8KQEAgLTUzNSw0MiArNTQyLDU5IEBACiAJaW50IHJldDsKIAlpbnQgcmV0c1szXTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByYywgcmVzZXRfc3RhdGU7Ci0Jc3RydWN0IGVlaF9ldmVudCAgKmV2ZW50OwogCXN0cnVjdCBwY2lfZG4gKnBkbjsKKwlpbnQgcmMgPSAwOwogCiAJX19nZXRfY3B1X3Zhcih0b3RhbF9tbWlvX2ZmcykrKzsKIAogCWlmICghZWVoX3N1YnN5c3RlbV9lbmFibGVkKQogCQlyZXR1cm4gMDsKIAotCWlmICghZG4pCisJaWYgKCFkbikgeworCQlfX2dldF9jcHVfdmFyKG5vX2RuKSsrOwogCQlyZXR1cm4gMDsKLQlwZG4gPSBkbi0+ZGF0YTsKKwl9CisJcGRuID0gUENJX0ROKGRuKTsKIAogCS8qIEFjY2VzcyB0byBJTyBCQVJzIG1pZ2h0IGdldCB0aGlzIGZhciBhbmQgc3RpbGwgbm90IHdhbnQgY2hlY2tpbmcuICovCi0JaWYgKCFwZG4tPmVlaF9jYXBhYmxlIHx8ICEocGRuLT5lZWhfbW9kZSAmIEVFSF9NT0RFX1NVUFBPUlRFRCkgfHwKKwlpZiAoIShwZG4tPmVlaF9tb2RlICYgRUVIX01PREVfU1VQUE9SVEVEKSB8fAogCSAgICBwZG4tPmVlaF9tb2RlICYgRUVIX01PREVfTk9DSEVDSykgeworCQlfX2dldF9jcHVfdmFyKGlnbm9yZWRfY2hlY2spKys7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRrICgiRUVIOmlnbm9yZWQgY2hlY2sgKCV4KSBmb3IgJXMgJXNcbiIsIAorCQkgICAgICAgIHBkbi0+ZWVoX21vZGUsIHBjaV9uYW1lIChkZXYpLCBkbi0+ZnVsbF9uYW1lKTsKKyNlbmRpZgogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoIXBkbi0+ZWVoX2NvbmZpZ19hZGRyKSB7CisJCV9fZ2V0X2NwdV92YXIobm9fY2ZnX2FkZHIpKys7CiAJCXJldHVybiAwOwogCX0KIAotCS8qCi0JICogSWYgd2UgYWxyZWFkeSBoYXZlIGEgcGVuZGluZyBpc29sYXRpb24gZXZlbnQgZm9yIHRoaXMKLQkgKiBzbG90LCB3ZSBrbm93IGl0J3MgYmFkIGFscmVhZHksIHdlIGRvbid0IG5lZWQgdG8gY2hlY2suLi4KKwkvKiBJZiB3ZSBhbHJlYWR5IGhhdmUgYSBwZW5kaW5nIGlzb2xhdGlvbiBldmVudCBmb3IgdGhpcworCSAqIHNsb3QsIHdlIGtub3cgaXQncyBiYWQgYWxyZWFkeSwgd2UgZG9uJ3QgbmVlZCB0byBjaGVjay4KKwkgKiBEbyB0aGlzIGNoZWNraW5nIHVuZGVyIGEgbG9jazsgYXMgbXVsdGlwbGUgUENJIGRldmljZXMKKwkgKiBpbiBvbmUgc2xvdCBtaWdodCByZXBvcnQgZXJyb3JzIHNpbXVsdGFuZW91c2x5LCBhbmQgd2UKKwkgKiBvbmx5IHdhbnQgb25lIGVycm9yIHJlY292ZXJ5IHJvdXRpbmUgcnVubmluZy4KIAkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZmlybV9lcnJvcl9sb2NrLCBmbGFncyk7CisJcmMgPSAxOwogCWlmIChwZG4tPmVlaF9tb2RlICYgRUVIX01PREVfSVNPTEFURUQpIHsKLQkJYXRvbWljX2luYygmZWVoX2ZhaWxfY291bnQpOwotCQlpZiAoYXRvbWljX3JlYWQoJmVlaF9mYWlsX2NvdW50KSA+PSBFRUhfTUFYX0ZBSUxTKSB7CisJCXBkbi0+ZWVoX2NoZWNrX2NvdW50ICsrOworCQlpZiAocGRuLT5lZWhfY2hlY2tfY291bnQgPj0gRUVIX01BWF9GQUlMUykgeworCQkJcHJpbnRrIChLRVJOX0VSUiAiRUVIOiBEZXZpY2UgZHJpdmVyIGlnbm9yZWQgJWQgYmFkIHJlYWRzLCBwYW5pY2luZ1xuIiwKKwkJCSAgICAgICAgcGRuLT5lZWhfY2hlY2tfY291bnQpOworCQkJZHVtcF9zdGFjaygpOworCQkJCiAJCQkvKiByZS1yZWFkIHRoZSBzbG90IHJlc2V0IHN0YXRlICovCi0JCQlpZiAocmVhZF9zbG90X3Jlc2V0X3N0YXRlKGRuLCByZXRzKSAhPSAwKQorCQkJaWYgKHJlYWRfc2xvdF9yZXNldF9zdGF0ZShwZG4sIHJldHMpICE9IDApCiAJCQkJcmV0c1swXSA9IC0xOwkvKiByZXNldCBzdGF0ZSB1bmtub3duICovCi0JCQllZWhfcGFuaWMoZGV2LCByZXRzWzBdKTsKKworCQkJLyogSWYgd2UgYXJlIGhlcmUsIHRoZW4gd2UgaGl0IGFuIGluZmluaXRlIGxvb3AuIFN0b3AuICovCisJCQlwYW5pYygiRUVIOiBNTUlPIGhhbHQgKCVkKSBvbiBkZXZpY2U6JXNcbiIsIHJldHNbMF0sIHBjaV9uYW1lKGRldikpOwogCQl9Ci0JCXJldHVybiAwOworCQlnb3RvIGRuX3VubG9jazsKIAl9CiAKIAkvKgpAQCAtNTgwLDY2ICs2MDQsNjkgQEAKIAkgKiBmdW5jdGlvbiB6ZXJvIG9mIGEgbXVsdGktZnVuY3Rpb24gZGV2aWNlLgogCSAqIEluIGFueSBjYXNlIHRoZXkgbXVzdCBzaGFyZSBhIGNvbW1vbiBQSEIuCiAJICovCi0JcmV0ID0gcmVhZF9zbG90X3Jlc2V0X3N0YXRlKGRuLCByZXRzKTsKLQlpZiAoIShyZXQgPT0gMCAmJiByZXRzWzFdID09IDEgJiYgKHJldHNbMF0gPT0gMiB8fCByZXRzWzBdID09IDQpKSkgeworCXJldCA9IHJlYWRfc2xvdF9yZXNldF9zdGF0ZShwZG4sIHJldHMpOworCisJLyogSWYgdGhlIGNhbGwgdG8gZmlybXdhcmUgZmFpbGVkLCBwdW50ICovCisJaWYgKHJldCAhPSAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkVFSDogcmVhZF9zbG90X3Jlc2V0X3N0YXRlKCkgZmFpbGVkOyByYz0lZCBkbj0lc1xuIiwKKwkJICAgICAgIHJldCwgZG4tPmZ1bGxfbmFtZSk7CiAJCV9fZ2V0X2NwdV92YXIoZmFsc2VfcG9zaXRpdmVzKSsrOwotCQlyZXR1cm4gMDsKKwkJcmMgPSAwOworCQlnb3RvIGRuX3VubG9jazsKIAl9CiAKLQkvKiBwcmV2ZW50IHJlcGVhdGVkIHJlcG9ydHMgb2YgdGhpcyBmYWlsdXJlICovCi0JcGRuLT5lZWhfbW9kZSB8PSBFRUhfTU9ERV9JU09MQVRFRDsKKwkvKiBJZiBFRUggaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGRldmljZSwgcHVudC4gKi8KKwlpZiAocmV0c1sxXSAhPSAxKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkVFSDogZXZlbnQgb24gdW5zdXBwb3J0ZWQgZGV2aWNlLCByYz0lZCBkbj0lc1xuIiwKKwkJICAgICAgIHJldCwgZG4tPmZ1bGxfbmFtZSk7CisJCV9fZ2V0X2NwdV92YXIoZmFsc2VfcG9zaXRpdmVzKSsrOworCQlyYyA9IDA7CisJCWdvdG8gZG5fdW5sb2NrOworCX0KIAotCXJlc2V0X3N0YXRlID0gcmV0c1swXTsKKwkvKiBJZiBub3QgdGhlIGtpbmQgb2YgZXJyb3Igd2Uga25vdyBhYm91dCwgcHVudC4gKi8KKwlpZiAocmV0c1swXSAhPSAyICYmIHJldHNbMF0gIT0gNCAmJiByZXRzWzBdICE9IDUpIHsKKwkJX19nZXRfY3B1X3ZhcihmYWxzZV9wb3NpdGl2ZXMpKys7CisJCXJjID0gMDsKKwkJZ290byBkbl91bmxvY2s7CisJfQogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNsb3RfZXJyYnVmX2xvY2ssIGZsYWdzKTsKLQltZW1zZXQoc2xvdF9lcnJidWYsIDAsIGVlaF9lcnJvcl9idWZfc2l6ZSk7CisJLyogTm90ZSB0aGF0IGNvbmZpZy1pbyB0byBlbXB0eSBzbG90cyBtYXkgZmFpbDsKKwkgKiB3ZSByZWNvZ25pemUgZW1wdHkgYmVjYXVzZSB0aGV5IGRvbid0IGhhdmUgY2hpbGRyZW4uICovCisJaWYgKChyZXRzWzBdID09IDUpICYmIChkbi0+Y2hpbGQgPT0gTlVMTCkpIHsKKwkJX19nZXRfY3B1X3ZhcihmYWxzZV9wb3NpdGl2ZXMpKys7CisJCXJjID0gMDsKKwkJZ290byBkbl91bmxvY2s7CisJfQogCi0JcmMgPSBydGFzX2NhbGwoaWJtX3Nsb3RfZXJyb3JfZGV0YWlsLAotCSAgICAgICAgICAgICAgIDgsIDEsIE5VTEwsIHBkbi0+ZWVoX2NvbmZpZ19hZGRyLAotCSAgICAgICAgICAgICAgIEJVSURfSEkocGRuLT5waGItPmJ1aWQpLAotCSAgICAgICAgICAgICAgIEJVSURfTE8ocGRuLT5waGItPmJ1aWQpLCBOVUxMLCAwLAotCSAgICAgICAgICAgICAgIHZpcnRfdG9fcGh5cyhzbG90X2VycmJ1ZiksCi0JICAgICAgICAgICAgICAgZWVoX2Vycm9yX2J1Zl9zaXplLAotCSAgICAgICAgICAgICAgIDEgLyogVGVtcG9yYXJ5IEVycm9yICovKTsKKwlfX2dldF9jcHVfdmFyKHNsb3RfcmVzZXRzKSsrOworIAorCS8qIEF2b2lkIHJlcGVhdGVkIHJlcG9ydHMgb2YgdGhpcyBmYWlsdXJlLCBpbmNsdWRpbmcgcHJvYmxlbXMKKwkgKiB3aXRoIG90aGVyIGZ1bmN0aW9ucyBvbiB0aGlzIGRldmljZSwgYW5kIGZ1bmN0aW9ucyB1bmRlcgorCSAqIGJyaWRnZXMuICovCisJZWVoX21hcmtfc2xvdCAoZG4sIEVFSF9NT0RFX0lTT0xBVEVEKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25maXJtX2Vycm9yX2xvY2ssIGZsYWdzKTsKIAotCWlmIChyYyA9PSAwKQotCQlsb2dfZXJyb3Ioc2xvdF9lcnJidWYsIEVSUl9UWVBFX1JUQVNfTE9HLCAwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG90X2VycmJ1Zl9sb2NrLCBmbGFncyk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJFRUg6IE1NSU8gZmFpbHVyZSAoJWQpIG9uIGRldmljZTogJXMgJXNcbiIsCi0JICAgICAgIHJldHNbMF0sIGRuLT5uYW1lLCBkbi0+ZnVsbF9uYW1lKTsKLQlldmVudCA9IGttYWxsb2Moc2l6ZW9mKCpldmVudCksIEdGUF9BVE9NSUMpOwotCWlmIChldmVudCA9PSBOVUxMKSB7Ci0JCWVlaF9wYW5pYyhkZXYsIHJlc2V0X3N0YXRlKTsKLQkJcmV0dXJuIDE7Ci0gCX0KLQotCWV2ZW50LT5kZXYgPSBkZXY7Ci0JZXZlbnQtPmRuID0gZG47Ci0JZXZlbnQtPnJlc2V0X3N0YXRlID0gcmVzZXRfc3RhdGU7Ci0KLQkvKiBXZSBtYXkgb3IgbWF5IG5vdCBiZSBjYWxsZWQgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZWVoX2V2ZW50bGlzdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGQoJmV2ZW50LT5saXN0LCAmZWVoX2V2ZW50bGlzdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWVoX2V2ZW50bGlzdF9sb2NrLCBmbGFncyk7Ci0KKwllZWhfc2VuZF9mYWlsdXJlX2V2ZW50IChkbiwgZGV2LCByZXRzWzBdLCByZXRzWzJdKTsKKwkKIAkvKiBNb3N0IEVFSCBldmVudHMgYXJlIGR1ZSB0byBkZXZpY2UgZHJpdmVyIGJ1Z3MuICBIYXZpbmcKIAkgKiBhIHN0YWNrIHRyYWNlIHdpbGwgaGVscCB0aGUgZGV2aWNlLWRyaXZlciBhdXRob3JzIGZpZ3VyZQogCSAqIG91dCB3aGF0IGhhcHBlbmVkLiAgU28gcHJpbnQgdGhhdCBvdXQuICovCi0JZHVtcF9zdGFjaygpOwotCXNjaGVkdWxlX3dvcmsoJmVlaF9ldmVudF93cSk7CisJaWYgKHJldHNbMF0gIT0gNSkgZHVtcF9zdGFjaygpOworCXJldHVybiAxOwogCi0JcmV0dXJuIDA7Citkbl91bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZmlybV9lcnJvcl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJjOwogfQogCi1FWFBPUlRfU1lNQk9MKGVlaF9kbl9jaGVja19mYWlsdXJlKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGVlaF9kbl9jaGVja19mYWlsdXJlKTsKIAogLyoqCiAgKiBlZWhfY2hlY2tfZmFpbHVyZSAtIGNoZWNrIGlmIGFsbCAxJ3MgZGF0YSBpcyBkdWUgdG8gRUVIIHNsb3QgZnJlZXplCiAgKiBAdG9rZW4gaS9vIHRva2VuLCBzaG91bGQgYmUgYWRkcmVzcyBpbiB0aGUgZm9ybSAweEEuLi4uCiAgKiBAdmFsIHZhbHVlLCBzaG91bGQgYmUgYWxsIDEncyAoWFhYIHdoeSBkbyB3ZSBuZWVkIHRoaXMgYXJnPz8pCiAgKgotICogQ2hlY2sgZm9yIGFuIGVlaCBmYWlsdXJlIGF0IHRoZSBnaXZlbiB0b2tlbiBhZGRyZXNzLgogICogQ2hlY2sgZm9yIGFuIEVFSCBmYWlsdXJlIGF0IHRoZSBnaXZlbiB0b2tlbiBhZGRyZXNzLiAgQ2FsbCB0aGlzCiAgKiByb3V0aW5lIGlmIHRoZSByZXN1bHQgb2YgYSByZWFkIHdhcyBhbGwgMHhmZidzIGFuZCB5b3Ugd2FudCB0bwogICogZmluZCBvdXQgaWYgdGhpcyBpcyBkdWUgdG8gYW4gRUVIIHNsb3QgZnJlZXplIGV2ZW50LiAgVGhpcyByb3V0aW5lCkBAIC02NTYsOCArNjgzLDEwIEBACiAJLyogRmluZGluZyB0aGUgcGh5cyBhZGRyICsgcGNpIGRldmljZTsgdGhpcyBpcyBwcmV0dHkgcXVpY2suICovCiAJYWRkciA9IGVlaF90b2tlbl90b19waHlzKCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpIHRva2VuKTsKIAlkZXYgPSBwY2lfZ2V0X2RldmljZV9ieV9hZGRyKGFkZHIpOwotCWlmICghZGV2KQorCWlmICghZGV2KSB7CisJCV9fZ2V0X2NwdV92YXIobm9fZGV2aWNlKSsrOwogCQlyZXR1cm4gdmFsOworCX0KIAogCWRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CiAJZWVoX2RuX2NoZWNrX2ZhaWx1cmUgKGRuLCBkZXYpOwpAQCAtNjY4LDYgKzY5NywyMTcgQEAKIAogRVhQT1JUX1NZTUJPTChlZWhfY2hlY2tfZmFpbHVyZSk7CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFRoZSBjb2RlIGJlbG93IGRlYWxzIHdpdGggZXJyb3IgcmVjb3ZlcnkgKi8KKworLyoqIFJldHVybiBuZWdhdGl2ZSB2YWx1ZSBpZiBhIHBlcm1hbmVudCBlcnJvciwgZWxzZSByZXR1cm4KKyAqIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZSBQQ0kgc2xvdCBpcworICogcmVhZHkgdG8gYmUgdXNlZC4KKyAqLworc3RhdGljIGludAorZWVoX3Nsb3RfYXZhaWxhYmlsaXR5KHN0cnVjdCBwY2lfZG4gKnBkbikKK3sKKwlpbnQgcmM7CisJaW50IHJldHNbM107CisKKwlyYyA9IHJlYWRfc2xvdF9yZXNldF9zdGF0ZShwZG4sIHJldHMpOworCisJaWYgKHJjKSByZXR1cm4gcmM7CisKKwlpZiAocmV0c1sxXSA9PSAwKSByZXR1cm4gLTE7ICAvKiBFRUggaXMgbm90IHN1cHBvcnRlZCAqLworCWlmIChyZXRzWzBdID09IDApICByZXR1cm4gMDsgIC8qIE9sbCBLb3JyZWN0ICovCisJaWYgKHJldHNbMF0gPT0gNSkgeworCQlpZiAocmV0c1syXSA9PSAwKSByZXR1cm4gLTE7IC8qIHBlcm1hbmVudGx5IHVuYXZhaWxhYmxlICovCisJCXJldHVybiByZXRzWzJdOyAvKiBudW1iZXIgb2YgbWlsbGlzZWNzIHRvIHdhaXQgKi8KKwl9CisJcmV0dXJuIC0xOworfQorCisvKiogcnRhc19wY2lfc2xvdF9yZXNldCByYWlzZXMvbG93ZXJzIHRoZSBwY2kgI1JTVCBsaW5lCisgKiAgc3RhdGU6IDEvMCB0byByYWlzZS9sb3dlciB0aGUgI1JTVAorICoKKyAqIENsZWFyIHRoZSBFRUgtZnJvemVuIGNvbmRpdGlvbiBvbiBhIHNsb3QuICBUaGlzIHJvdXRpbmUKKyAqIGFzc2VydHMgdGhlIFBDSSAjUlNUIGxpbmUgaWYgdGhlICdzdGF0ZScgYXJndW1lbnQgaXMgJzEnLAorICogYW5kIGRyb3BzIHRoZSAjUlNUIGxpbmUgaWYgJ3N0YXRlIGlzICcwJy4gIFRoaXMgcm91dGluZSBpcworICogc2FmZSB0byBjYWxsIGluIGFuIGludGVycnVwdCBjb250ZXh0LgorICoKKyAqLworCitzdGF0aWMgdm9pZAorcnRhc19wY2lfc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RuICpwZG4sIGludCBzdGF0ZSkKK3sKKwlpbnQgcmM7CisKKwlCVUdfT04gKHBkbj09TlVMTCk7IAorCisJaWYgKCFwZG4tPnBoYikgeworCQlwcmludGsgKEtFUk5fV0FSTklORyAiRUVIOiBpbiBzbG90IHJlc2V0LCBkZXZpY2Ugbm9kZSAlcyBoYXMgbm8gcGhiXG4iLAorCQkgICAgICAgIHBkbi0+bm9kZS0+ZnVsbF9uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCXJjID0gcnRhc19jYWxsKGlibV9zZXRfc2xvdF9yZXNldCw0LDEsIE5VTEwsCisJICAgICAgICAgICAgICAgcGRuLT5lZWhfY29uZmlnX2FkZHIsCisJICAgICAgICAgICAgICAgQlVJRF9ISShwZG4tPnBoYi0+YnVpZCksCisJICAgICAgICAgICAgICAgQlVJRF9MTyhwZG4tPnBoYi0+YnVpZCksCisJICAgICAgICAgICAgICAgc3RhdGUpOworCWlmIChyYykgeworCQlwcmludGsgKEtFUk5fV0FSTklORyAiRUVIOiBVbmFibGUgdG8gcmVzZXQgdGhlIGZhaWxlZCBzbG90LCAoJWQpICNSU1Q9JWQgZG49JXNcbiIsIAorCQkgICAgICAgIHJjLCBzdGF0ZSwgcGRuLT5ub2RlLT5mdWxsX25hbWUpOworCQlyZXR1cm47CisJfQorfQorCisvKiogcnRhc19zZXRfc2xvdF9yZXNldCAtLSBhc3NlcnQgdGhlIHBjaSAjUlNUIGxpbmUgZm9yIDEvNCBzZWNvbmQKKyAqICBkbiAtLSBkZXZpY2Ugbm9kZSB0byBiZSByZXNldC4KKyAqLworCit2b2lkCitydGFzX3NldF9zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZG4gKnBkbikKK3sKKwlpbnQgaSwgcmM7CisKKwlydGFzX3BjaV9zbG90X3Jlc2V0IChwZG4sIDEpOworCisJLyogVGhlIFBDSSBidXMgcmVxdWlyZXMgdGhhdCB0aGUgcmVzZXQgYmUgaGVsZCBoaWdoIGZvciBhdCBsZWFzdAorCSAqIGEgMTAwIG1pbGxpc2Vjb25kcy4gV2Ugd2FpdCBhIGJpdCBsb25nZXIgJ2p1c3QgaW4gY2FzZScuICAqLworCisjZGVmaW5lIFBDSV9CVVNfUlNUX0hPTERfVElNRV9NU0VDIDI1MAorCW1zbGVlcCAoUENJX0JVU19SU1RfSE9MRF9USU1FX01TRUMpOworCQorCS8qIFdlIG1pZ2h0IGdldCBoaXQgd2l0aCBhbm90aGVyIEVFSCBmcmVlemUgYXMgc29vbiBhcyB0aGUgCisJICogcGNpIHNsb3QgcmVzZXQgbGluZSBpcyBkcm9wcGVkLiBNYWtlIHN1cmUgd2UgZG9uJ3QgbWlzcworCSAqIHRoZXNlLCBhbmQgY2xlYXIgdGhlIGZsYWcgbm93LiAqLworCWVlaF9jbGVhcl9zbG90IChwZG4tPm5vZGUsIEVFSF9NT0RFX0lTT0xBVEVEKTsKKworCXJ0YXNfcGNpX3Nsb3RfcmVzZXQgKHBkbiwgMCk7CisKKwkvKiBBZnRlciBhIFBDSSBzbG90IGhhcyBiZWVuIHJlc2V0LCB0aGUgUENJIEV4cHJlc3Mgc3BlYyByZXF1aXJlcworCSAqIGEgMS41IHNlY29uZCBpZGxlIHRpbWUgZm9yIHRoZSBidXMgdG8gc3RhYmlsaXplLCBiZWZvcmUgc3RhcnRpbmcKKwkgKiB1cCB0cmFmZmljLiAqLworI2RlZmluZSBQQ0lfQlVTX1NFVFRMRV9USU1FX01TRUMgMTgwMAorCW1zbGVlcCAoUENJX0JVU19TRVRUTEVfVElNRV9NU0VDKTsKKworCS8qIE5vdyBkb3VibGUgY2hlY2sgd2l0aCB0aGUgZmlybXdhcmUgdG8gbWFrZSBzdXJlIHRoZSBkZXZpY2UgaXMKKwkgKiByZWFkeSB0byBiZSB1c2VkOyBpZiBub3QsIHdhaXQgZm9yIHJlY292ZXJ5LiAqLworCWZvciAoaT0wOyBpPDEwOyBpKyspIHsKKwkJcmMgPSBlZWhfc2xvdF9hdmFpbGFiaWxpdHkgKHBkbik7CisJCWlmIChyYyA8PSAwKSBicmVhazsKKworCQltc2xlZXAgKHJjKzEwMCk7CisJfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiogU2F2ZSBhbmQgcmVzdG9yZSBvZiBQQ0kgQkFScworICoKKyAqIEFsdGhvdWdoIGZpcm13YXJlIHdpbGwgc2V0IHVwIEJBUnMgZHVyaW5nIGJvb3QsIGl0IGRvZXNuJ3QKKyAqIHNldCB1cCBkZXZpY2UgQkFSJ3MgYWZ0ZXIgYSBkZXZpY2UgcmVzZXQsIGFsdGhvdWdoIGl0IHdpbGwsCisgKiBpZiByZXF1ZXN0ZWQsIHNldCB1cCBicmlkZ2UgY29uZmlndXJhdGlvbi4gVGh1cywgd2UgbmVlZCB0bworICogY29uZmlndXJlIHRoZSBQQ0kgZGV2aWNlcyBvdXJzZWx2ZXMuICAKKyAqLworCisvKioKKyAqIF9fcmVzdG9yZV9iYXJzIC0gUmVzdG9yZSB0aGUgQmFzZSBBZGRyZXNzIFJlZ2lzdGVycworICogTG9hZHMgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGJhc2UgYWRkcmVzcyByZWdpc3RlcnMsCisgKiB0aGUgZXhwYW5zaW9uIFJPTSBiYXNlIGFkZHJlc3MsIHRoZSBsYXRlbmN5IHRpbWVyLCBhbmQgZXRjLgorICogZnJvbSB0aGUgc2F2ZWQgdmFsdWVzIGluIHRoZSBkZXZpY2Ugbm9kZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fcmVzdG9yZV9iYXJzIChzdHJ1Y3QgcGNpX2RuICpwZG4pCit7CisJaW50IGk7CisKKwlpZiAoTlVMTD09cGRuLT5waGIpIHJldHVybjsKKwlmb3IgKGk9NDsgaTwxMDsgaSsrKSB7CisJCXJ0YXNfd3JpdGVfY29uZmlnKHBkbiwgaSo0LCA0LCBwZG4tPmNvbmZpZ19zcGFjZVtpXSk7CisJfQorCisJLyogMTIgPT0gRXhwYW5zaW9uIFJPTSBBZGRyZXNzICovCisJcnRhc193cml0ZV9jb25maWcocGRuLCAxMio0LCA0LCBwZG4tPmNvbmZpZ19zcGFjZVsxMl0pOworCisjZGVmaW5lIEJZVEVfU1dBUChPRkYpICg4KigoT0ZGKS80KSszLShPRkYpKQorI2RlZmluZSBTQVZFRF9CWVRFKE9GRikgKCgodTggKikocGRuLT5jb25maWdfc3BhY2UpKVtCWVRFX1NXQVAoT0ZGKV0pCisKKwlydGFzX3dyaXRlX2NvbmZpZyAocGRuLCBQQ0lfQ0FDSEVfTElORV9TSVpFLCAxLAorCSAgICAgICAgICAgIFNBVkVEX0JZVEUoUENJX0NBQ0hFX0xJTkVfU0laRSkpOworCisJcnRhc193cml0ZV9jb25maWcgKHBkbiwgUENJX0xBVEVOQ1lfVElNRVIsIDEsCisJICAgICAgICAgICAgU0FWRURfQllURShQQ0lfTEFURU5DWV9USU1FUikpOworCisJLyogbWF4IGxhdGVuY3ksIG1pbiBncmFudCwgaW50ZXJydXB0IHBpbiBhbmQgbGluZSAqLworCXJ0YXNfd3JpdGVfY29uZmlnKHBkbiwgMTUqNCwgNCwgcGRuLT5jb25maWdfc3BhY2VbMTVdKTsKK30KKworLyoqCisgKiBlZWhfcmVzdG9yZV9iYXJzIC0gcmVzdG9yZSB0aGUgUENJIGNvbmZpZyBzcGFjZSBpbmZvCisgKgorICogVGhpcyByb3V0aW5lIHBlcmZvcm1zIGEgcmVjdXJzaXZlIHdhbGsgdG8gdGhlIGNoaWxkcmVuCisgKiBvZiB0aGlzIGRldmljZSBhcyB3ZWxsLgorICovCit2b2lkIGVlaF9yZXN0b3JlX2JhcnMoc3RydWN0IHBjaV9kbiAqcGRuKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47CisJaWYgKCFwZG4pIAorCQlyZXR1cm47CisJCisJaWYgKCEgcGRuLT5lZWhfaXNfYnJpZGdlKQorCQlfX3Jlc3RvcmVfYmFycyAocGRuKTsKKworCWRuID0gcGRuLT5ub2RlLT5jaGlsZDsKKwl3aGlsZSAoZG4pIHsKKwkJZWVoX3Jlc3RvcmVfYmFycyAoUENJX0ROKGRuKSk7CisJCWRuID0gZG4tPnNpYmxpbmc7CisJfQorfQorCisvKioKKyAqIGVlaF9zYXZlX2JhcnMgLSBzYXZlIGRldmljZSBiYXJzCisgKgorICogU2F2ZSB0aGUgdmFsdWVzIG9mIHRoZSBkZXZpY2UgYmFycy4gVW5saWtlIHRoZSByZXN0b3JlCisgKiByb3V0aW5lLCB0aGlzIHJvdXRpbmUgaXMgKm5vdCogcmVjdXJzaXZlLiBUaGlzIGlzIGJlY2F1c2UKKyAqIFBDSSBkZXZpY2VzIGFyZSBhZGRlZCBpbmRpdmlkdWFsbGx5OyBidXQsIGZvciB0aGUgcmVzdG9yZSwKKyAqIGFuIGVudGlyZSBzbG90IGlzIHJlc2V0IGF0IGEgdGltZS4KKyAqLworc3RhdGljIHZvaWQgZWVoX3NhdmVfYmFycyhzdHJ1Y3QgcGNpX2RldiAqIHBkZXYsIHN0cnVjdCBwY2lfZG4gKnBkbikKK3sKKwlpbnQgaTsKKworCWlmICghcGRldiB8fCAhcGRuICkKKwkJcmV0dXJuOworCQorCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgaSAqIDQsICZwZG4tPmNvbmZpZ19zcGFjZVtpXSk7CisKKwlpZiAocGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkKKwkJcGRuLT5lZWhfaXNfYnJpZGdlID0gMTsKK30KKwordm9pZAorcnRhc19jb25maWd1cmVfYnJpZGdlKHN0cnVjdCBwY2lfZG4gKnBkbikKK3sKKwlpbnQgdG9rZW4gPSBydGFzX3Rva2VuICgiaWJtLGNvbmZpZ3VyZS1icmlkZ2UiKTsKKwlpbnQgcmM7CisKKwlpZiAodG9rZW4gPT0gUlRBU19VTktOT1dOX1NFUlZJQ0UpCisJCXJldHVybjsKKwlyYyA9IHJ0YXNfY2FsbCh0b2tlbiwzLDEsIE5VTEwsCisJICAgICAgICAgICAgICAgcGRuLT5lZWhfY29uZmlnX2FkZHIsCisJICAgICAgICAgICAgICAgQlVJRF9ISShwZG4tPnBoYi0+YnVpZCksCisJICAgICAgICAgICAgICAgQlVJRF9MTyhwZG4tPnBoYi0+YnVpZCkpOworCWlmIChyYykgeworCQlwcmludGsgKEtFUk5fV0FSTklORyAiRUVIOiBVbmFibGUgdG8gY29uZmlndXJlIGRldmljZSBicmlkZ2UgKCVkKSBmb3IgJXNcbiIsCisJCSAgICAgICAgcmMsIHBkbi0+bm9kZS0+ZnVsbF9uYW1lKTsKKwl9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFRoZSBjb2RlIGJlbG93IGRlYWxzIHdpdGggZW5hYmxpbmcgRUVIIGZvciBkZXZpY2VzIGR1cmluZyAgdGhlCisgKiBlYXJseSBib290IHNlcXVlbmNlLiAgRUVIIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgYW55IFBDSSBwcm9iaW5nCisgKiBjYW4gYmUgZG9uZS4KKyAqLworCisjZGVmaW5lIEVFSF9FTkFCTEUgMQorCiBzdHJ1Y3QgZWVoX2Vhcmx5X2VuYWJsZV9pbmZvIHsKIAl1bnNpZ25lZCBpbnQgYnVpZF9oaTsKIAl1bnNpZ25lZCBpbnQgYnVpZF9sbzsKQEAgLTY4NCw5ICs5MjQsMTEgQEAKIAl1MzIgKmRldmljZV9pZCA9ICh1MzIgKilnZXRfcHJvcGVydHkoZG4sICJkZXZpY2UtaWQiLCBOVUxMKTsKIAl1MzIgKnJlZ3M7CiAJaW50IGVuYWJsZTsKLQlzdHJ1Y3QgcGNpX2RuICpwZG4gPSBkbi0+ZGF0YTsKKwlzdHJ1Y3QgcGNpX2RuICpwZG4gPSBQQ0lfRE4oZG4pOwogCiAJcGRuLT5lZWhfbW9kZSA9IDA7CisJcGRuLT5lZWhfY2hlY2tfY291bnQgPSAwOworCXBkbi0+ZWVoX2ZyZWV6ZV9jb3VudCA9IDA7CiAKIAlpZiAoc3RhdHVzICYmIHN0cmNtcChzdGF0dXMsICJvayIpICE9IDApCiAJCXJldHVybiBOVUxMOwkvKiBpZ25vcmUgZGV2aWNlcyB3aXRoIGJhZCBzdGF0dXMgKi8KQEAgLTcyMyw4ICs5NjUsOSBAQAogCQkvKiBGaXJzdCByZWdpc3RlciBlbnRyeSBpcyBhZGRyICgwMEJCU1MwMCkgICovCiAJCS8qIFRyeSB0byBlbmFibGUgZWVoICovCiAJCXJldCA9IHJ0YXNfY2FsbChpYm1fc2V0X2VlaF9vcHRpb24sIDQsIDEsIE5VTEwsCi0JCQkJcmVnc1swXSwgaW5mby0+YnVpZF9oaSwgaW5mby0+YnVpZF9sbywKLQkJCQlFRUhfRU5BQkxFKTsKKwkJICAgICAgICAgICAgICAgIHJlZ3NbMF0sIGluZm8tPmJ1aWRfaGksIGluZm8tPmJ1aWRfbG8sCisJCSAgICAgICAgICAgICAgICBFRUhfRU5BQkxFKTsKKwogCQlpZiAocmV0ID09IDApIHsKIAkJCWVlaF9zdWJzeXN0ZW1fZW5hYmxlZCA9IDE7CiAJCQlwZG4tPmVlaF9tb2RlIHw9IEVFSF9NT0RFX1NVUFBPUlRFRDsKQEAgLTczNiw3ICs5NzksNyBAQAogCiAJCQkvKiBUaGlzIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgRUVILCBidXQgaXQgbWF5IGhhdmUgYW4KIAkJCSAqIEVFSCBwYXJlbnQsIGluIHdoaWNoIGNhc2Ugd2UgbWFyayBpdCBhcyBzdXBwb3J0ZWQuICovCi0JCQlpZiAoZG4tPnBhcmVudCAmJiBkbi0+cGFyZW50LT5kYXRhCisJCQlpZiAoZG4tPnBhcmVudCAmJiBQQ0lfRE4oZG4tPnBhcmVudCkKIAkJCSAgICAmJiAoUENJX0ROKGRuLT5wYXJlbnQpLT5lZWhfbW9kZSAmIEVFSF9NT0RFX1NVUFBPUlRFRCkpIHsKIAkJCQkvKiBQYXJlbnQgc3VwcG9ydHMgRUVILiAqLwogCQkJCXBkbi0+ZWVoX21vZGUgfD0gRUVIX01PREVfU1VQUE9SVEVEOwpAQCAtNzQ5LDcgKzk5Miw3IEBACiAJCSAgICAgICBkbi0+ZnVsbF9uYW1lKTsKIAl9CiAKLQlyZXR1cm4gTlVMTDsgCisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qCkBAIC03NzAsNiArMTAxMyw5IEBACiAJc3RydWN0IGRldmljZV9ub2RlICpwaGIsICpucDsKIAlzdHJ1Y3QgZWVoX2Vhcmx5X2VuYWJsZV9pbmZvIGluZm87CiAKKwlzcGluX2xvY2tfaW5pdCgmY29uZmlybV9lcnJvcl9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmc2xvdF9lcnJidWZfbG9jayk7CisKIAlucCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvcnRhcyIpOwogCWlmIChucCA9PSBOVUxMKQogCQlyZXR1cm47CkBAIC03OTcsMTMgKzEwNDMsMTEgQEAKIAlmb3IgKHBoYiA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJwY2kiKTsgcGhiOwogCSAgICAgcGhiID0gb2ZfZmluZF9ub2RlX2J5X25hbWUocGhiLCAicGNpIikpIHsKIAkJdW5zaWduZWQgbG9uZyBidWlkOwotCQlzdHJ1Y3QgcGNpX2RuICpwY2k7CiAKIAkJYnVpZCA9IGdldF9waGJfYnVpZChwaGIpOwotCQlpZiAoYnVpZCA9PSAwIHx8IHBoYi0+ZGF0YSA9PSBOVUxMKQorCQlpZiAoYnVpZCA9PSAwIHx8IFBDSV9ETihwaGIpID09IE5VTEwpCiAJCQljb250aW51ZTsKIAotCQlwY2kgPSBwaGItPmRhdGE7CiAJCWluZm8uYnVpZF9sbyA9IEJVSURfTE8oYnVpZCk7CiAJCWluZm8uYnVpZF9oaSA9IEJVSURfSEkoYnVpZCk7CiAJCXRyYXZlcnNlX3BjaV9kZXZpY2VzKHBoYiwgZWFybHlfZW5hYmxlX2VlaCwgJmluZm8pOwpAQCAtODMyLDExICsxMDc2LDEzIEBACiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpwaGI7CiAJc3RydWN0IGVlaF9lYXJseV9lbmFibGVfaW5mbyBpbmZvOwogCi0JaWYgKCFkbiB8fCAhZG4tPmRhdGEpCisJaWYgKCFkbiB8fCAhUENJX0ROKGRuKSkKIAkJcmV0dXJuOwogCXBoYiA9IFBDSV9ETihkbiktPnBoYjsKIAlpZiAoTlVMTCA9PSBwaGIgfHwgMCA9PSBwaGItPmJ1aWQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRUVIOiBFeHBlY3RlZCBidWlkIGJ1dCBmb3VuZCBub25lXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRUVIOiBFeHBlY3RlZCBidWlkIGJ1dCBmb3VuZCBub25lIGZvciAlc1xuIiwKKwkJICAgICAgIGRuLT5mdWxsX25hbWUpOworCQlkdW1wX3N0YWNrKCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTg0NCw3ICsxMDkwLDcgQEAKIAlpbmZvLmJ1aWRfbG8gPSBCVUlEX0xPKHBoYi0+YnVpZCk7CiAJZWFybHlfZW5hYmxlX2VlaChkbiwgJmluZm8pOwogfQotRVhQT1JUX1NZTUJPTChlZWhfYWRkX2RldmljZV9lYXJseSk7CitFWFBPUlRfU1lNQk9MX0dQTChlZWhfYWRkX2RldmljZV9lYXJseSk7CiAKIC8qKgogICogZWVoX2FkZF9kZXZpY2VfbGF0ZSAtIHBlcmZvcm0gRUVIIGluaXRpYWxpemF0aW9uIGZvciB0aGUgaW5kaWNhdGVkIHBjaSBkZXZpY2UKQEAgLTg1NSw2ICsxMTAxLDkgQEAKICAqLwogdm9pZCBlZWhfYWRkX2RldmljZV9sYXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CisJc3RydWN0IGRldmljZV9ub2RlICpkbjsKKwlzdHJ1Y3QgcGNpX2RuICpwZG47CisKIAlpZiAoIWRldiB8fCAhZWVoX3N1YnN5c3RlbV9lbmFibGVkKQogCQlyZXR1cm47CiAKQEAgLTg2Miw5ICsxMTExLDE1IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgIkVFSDogYWRkaW5nIGRldmljZSAlc1xuIiwgcGNpX25hbWUoZGV2KSk7CiAjZW5kaWYKIAorCXBjaV9kZXZfZ2V0IChkZXYpOworCWRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CisJcGRuID0gUENJX0ROKGRuKTsKKwlwZG4tPnBjaWRldiA9IGRldjsKKwogCXBjaV9hZGRyX2NhY2hlX2luc2VydF9kZXZpY2UgKGRldik7CisJZWVoX3NhdmVfYmFycyhkZXYsIHBkbik7CiB9Ci1FWFBPUlRfU1lNQk9MKGVlaF9hZGRfZGV2aWNlX2xhdGUpOworRVhQT1JUX1NZTUJPTF9HUEwoZWVoX2FkZF9kZXZpY2VfbGF0ZSk7CiAKIC8qKgogICogZWVoX3JlbW92ZV9kZXZpY2UgLSB1bmRvIEVFSCBzZXR1cCBmb3IgdGhlIGluZGljYXRlZCBwY2kgZGV2aWNlCkBAIC04NzUsNiArMTEzMCw3IEBACiAgKi8KIHZvaWQgZWVoX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOwogCWlmICghZGV2IHx8ICFlZWhfc3Vic3lzdGVtX2VuYWJsZWQpCiAJCXJldHVybjsKIApAQCAtODgzLDIwICsxMTM5LDI5IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgIkVFSDogcmVtb3ZlIGRldmljZSAlc1xuIiwgcGNpX25hbWUoZGV2KSk7CiAjZW5kaWYKIAlwY2lfYWRkcl9jYWNoZV9yZW1vdmVfZGV2aWNlKGRldik7CisKKwlkbiA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOworCVBDSV9ETihkbiktPnBjaWRldiA9IE5VTEw7CisJcGNpX2Rldl9wdXQgKGRldik7CiB9Ci1FWFBPUlRfU1lNQk9MKGVlaF9yZW1vdmVfZGV2aWNlKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGVlaF9yZW1vdmVfZGV2aWNlKTsKIAogc3RhdGljIGludCBwcm9jX2VlaF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAl1bnNpZ25lZCBpbnQgY3B1OwogCXVuc2lnbmVkIGxvbmcgZmZzID0gMCwgcG9zaXRpdmVzID0gMCwgZmFpbHVyZXMgPSAwOwogCXVuc2lnbmVkIGxvbmcgcmVzZXRzID0gMDsKKwl1bnNpZ25lZCBsb25nIG5vX2RldiA9IDAsIG5vX2RuID0gMCwgbm9fY2ZnID0gMCwgbm9fY2hlY2sgPSAwOwogCiAJZm9yX2VhY2hfY3B1KGNwdSkgewogCQlmZnMgKz0gcGVyX2NwdSh0b3RhbF9tbWlvX2ZmcywgY3B1KTsKIAkJcG9zaXRpdmVzICs9IHBlcl9jcHUoZmFsc2VfcG9zaXRpdmVzLCBjcHUpOwogCQlmYWlsdXJlcyArPSBwZXJfY3B1KGlnbm9yZWRfZmFpbHVyZXMsIGNwdSk7CiAJCXJlc2V0cyArPSBwZXJfY3B1KHNsb3RfcmVzZXRzLCBjcHUpOworCQlub19kZXYgKz0gcGVyX2NwdShub19kZXZpY2UsIGNwdSk7CisJCW5vX2RuICs9IHBlcl9jcHUobm9fZG4sIGNwdSk7CisJCW5vX2NmZyArPSBwZXJfY3B1KG5vX2NmZ19hZGRyLCBjcHUpOworCQlub19jaGVjayArPSBwZXJfY3B1KGlnbm9yZWRfY2hlY2ssIGNwdSk7CiAJfQogCiAJaWYgKDAgPT0gZWVoX3N1YnN5c3RlbV9lbmFibGVkKSB7CkBAIC05MDQsMTMgKzExNjksMTcgQEAKIAkJc2VxX3ByaW50ZihtLCAiZWVoX3RvdGFsX21taW9fZmZzPSVsZFxuIiwgZmZzKTsKIAl9IGVsc2UgewogCQlzZXFfcHJpbnRmKG0sICJFRUggU3Vic3lzdGVtIGlzIGVuYWJsZWRcbiIpOwotCQlzZXFfcHJpbnRmKG0sICJlZWhfdG90YWxfbW1pb19mZnM9JWxkXG4iCi0JCQkgICAiZWVoX2ZhbHNlX3Bvc2l0aXZlcz0lbGRcbiIKLQkJCSAgICJlZWhfaWdub3JlZF9mYWlsdXJlcz0lbGRcbiIKLQkJCSAgICJlZWhfc2xvdF9yZXNldHM9JWxkXG4iCi0JCQkJImVlaF9mYWlsX2NvdW50PSVkXG4iLAotCQkJICAgZmZzLCBwb3NpdGl2ZXMsIGZhaWx1cmVzLCByZXNldHMsCi0JCQkJZWVoX2ZhaWxfY291bnQuY291bnRlcik7CisJCXNlcV9wcmludGYobSwKKwkJCQkibm8gZGV2aWNlPSVsZFxuIgorCQkJCSJubyBkZXZpY2Ugbm9kZT0lbGRcbiIKKwkJCQkibm8gY29uZmlnIGFkZHJlc3M9JWxkXG4iCisJCQkJImNoZWNrIG5vdCB3YW50ZWQ9JWxkXG4iCisJCQkJImVlaF90b3RhbF9tbWlvX2Zmcz0lbGRcbiIKKwkJCQkiZWVoX2ZhbHNlX3Bvc2l0aXZlcz0lbGRcbiIKKwkJCQkiZWVoX2lnbm9yZWRfZmFpbHVyZXM9JWxkXG4iCisJCQkJImVlaF9zbG90X3Jlc2V0cz0lbGRcbiIsCisJCQkJbm9fZGV2LCBub19kbiwgbm9fY2ZnLCBub19jaGVjaywKKwkJCQlmZnMsIHBvc2l0aXZlcywgZmFpbHVyZXMsIHJlc2V0cyk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC05MzIsNyArMTIwMSw3IEBACiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplOwogCi0JaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gJiBQTEFURk9STV9QU0VSSUVTKSB7CisJaWYgKHBsYXRmb3JtX2lzX3BzZXJpZXMoKSkgewogCQllID0gY3JlYXRlX3Byb2NfZW50cnkoInBwYzY0L2VlaCIsIDAsIE5VTEwpOwogCQlpZiAoZSkKIAkJCWUtPnByb2NfZm9wcyA9ICZwcm9jX2VlaF9vcGVyYXRpb25zOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9ldmVudC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9ldmVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNDk3MzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2V2ZW50LmMKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBlZWhfZXZlbnQuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBMaW5hcyBWZXBzdGFzIDxsaW5hc0BsaW5hcy5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vZWVoX2V2ZW50Lmg+CisKKy8qKiBPdmVydmlldzoKKyAqICBFRUggZXJyb3Igc3RhdGVzIG1heSBiZSBkZXRlY3RlZCB3aXRoaW4gZXhjZXB0aW9uIGhhbmRsZXJzOworICogIGhvd2V2ZXIsIHRoZSByZWNvdmVyeSBwcm9jZXNzaW5nIG5lZWRzIHRvIG9jY3VyIGFzeW5jaHJvbm91c2x5CisgKiAgaW4gYSBub3JtYWwga2VybmVsIGNvbnRleHQgYW5kIG5vdCBhbiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqICBUaGlzIHBhaXIgb2Ygcm91dGluZXMgY3JlYXRlcyBhbiBldmVudCBhbmQgcXVldWVzIGl0IG9udG8gYQorICogIHdvcmstcXVldWUsIHdoZXJlIGEgd29ya2VyIHRocmVhZCBjYW4gZHJpdmUgcmVjb3ZlcnkuCisgKi8KKworLyogRUVIIGV2ZW50IHdvcmtxdWV1ZSBzZXR1cC4gKi8KK3N0YXRpYyBzcGlubG9ja190IGVlaF9ldmVudGxpc3RfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKK0xJU1RfSEVBRChlZWhfZXZlbnRsaXN0KTsKK3N0YXRpYyB2b2lkIGVlaF90aHJlYWRfbGF1bmNoZXIodm9pZCAqKTsKK0RFQ0xBUkVfV09SSyhlZWhfZXZlbnRfd3EsIGVlaF90aHJlYWRfbGF1bmNoZXIsIE5VTEwpOworCisvKioKKyAqIGVlaF9wYW5pYyAtIGNhbGwgcGFuaWMoKSBmb3IgYW4gZWVoIGV2ZW50IHRoYXQgY2Fubm90IGJlIGhhbmRsZWQuCisgKiBUaGUgcGhpbG9zb3BoeSBvZiB0aGlzIHJvdXRpbmUgaXMgdGhhdCBpdCBpcyBiZXR0ZXIgdG8gcGFuaWMgYW5kCisgKiBoYWx0IHRoZSBPUyB0aGFuIGl0IGlzIHRvIHJpc2sgcG9zc2libGUgZGF0YSBjb3JydXB0aW9uIGJ5CisgKiBvYmxpdmlvdXMgZGV2aWNlIGRyaXZlcnMgdGhhdCBkb24ndCBrbm93IGJldHRlci4KKyAqCisgKiBAZGV2IHBjaSBkZXZpY2UgdGhhdCBoYWQgYW4gZWVoIGV2ZW50CisgKiBAcmVzZXRfc3RhdGUgY3VycmVudCByZXNldCBzdGF0ZSBvZiB0aGUgZGV2aWNlIHNsb3QKKyAqLworc3RhdGljIHZvaWQgZWVoX3BhbmljKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZXNldF9zdGF0ZSkKK3sKKwkvKgorCSAqIFNpbmNlIHRoZSBwYW5pY19vbl9vb3BzIHN5c2N0bCBpcyB1c2VkIHRvIGhhbHQgdGhlIHN5c3RlbQorCSAqIGluIGxpZ2h0IG9mIHBvdGVudGlhbCBjb3JydXB0aW9uLCB3ZSBjYW4gdXNlIGl0IGhlcmUuCisJICovCisJaWYgKHBhbmljX29uX29vcHMpIHsKKwkJcGFuaWMoIkVFSDogTU1JTyBmYWlsdXJlICglZCkgb24gZGV2aWNlOiVzXG4iLCByZXNldF9zdGF0ZSwKKwkJICAgICAgcGNpX25hbWUoZGV2KSk7CisJfQorCWVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPICJFRUg6IElnbm9yZWQgTU1JTyBmYWlsdXJlICglZCkgb24gZGV2aWNlOiVzXG4iLAorCQkgICAgICAgcmVzZXRfc3RhdGUsIHBjaV9uYW1lKGRldikpOworCX0KK30KKworLyoqCisgKiBlZWhfZXZlbnRfaGFuZGxlciAtIGRpc3BhdGNoIEVFSCBldmVudHMuICBUaGUgZGV0ZWN0aW9uIG9mIGEgZnJvemVuCisgKiBzbG90IGNhbiBvY2N1ciBpbnNpZGUgYW4gaW50ZXJydXB0LCB3aGVyZSBpdCBjYW4gYmUgaGFyZCB0byBkbworICogYW55dGhpbmcgYWJvdXQgaXQuICBUaGUgZ29hbCBvZiB0aGlzIHJvdXRpbmUgaXMgdG8gcHVsbCB0aGVzZQorICogZGV0ZWN0aW9uIGV2ZW50cyBvdXQgb2YgdGhlIGNvbnRleHQgb2YgdGhlIGludGVycnVwdCBoYW5kbGVyLCBhbmQKKyAqIHJlLWRpc3BhdGNoIHRoZW0gZm9yIHByb2Nlc3NpbmcgYXQgYSBsYXRlciB0aW1lIGluIGEgbm9ybWFsIGNvbnRleHQuCisgKgorICogQGR1bW15IC0gdW51c2VkCisgKi8KK3N0YXRpYyBpbnQgZWVoX2V2ZW50X2hhbmRsZXIodm9pZCAqIGR1bW15KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGVlaF9ldmVudAkqZXZlbnQ7CisKKwlkYWVtb25pemUgKCJlZWhkIik7CisKKwl3aGlsZSAoMSkgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZlZWhfZXZlbnRsaXN0X2xvY2ssIGZsYWdzKTsKKwkJZXZlbnQgPSBOVUxMOworCQlpZiAoIWxpc3RfZW1wdHkoJmVlaF9ldmVudGxpc3QpKSB7CisJCQlldmVudCA9IGxpc3RfZW50cnkoZWVoX2V2ZW50bGlzdC5uZXh0LCBzdHJ1Y3QgZWVoX2V2ZW50LCBsaXN0KTsKKwkJCWxpc3RfZGVsKCZldmVudC0+bGlzdCk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWVoX2V2ZW50bGlzdF9sb2NrLCBmbGFncyk7CisJCWlmIChldmVudCA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRUVIOiBEZXRlY3RlZCBQQ0kgYnVzIGVycm9yIG9uIGRldmljZSAlc1xuIiwKKwkJICAgICAgIHBjaV9uYW1lKGV2ZW50LT5kZXYpKTsKKworCQllZWhfcGFuaWMgKGV2ZW50LT5kZXYsIGV2ZW50LT5zdGF0ZSk7CisKKwkJa2ZyZWUoZXZlbnQpOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGVlaF90aHJlYWRfbGF1bmNoZXIKKyAqCisgKiBAZHVtbXkgLSB1bnVzZWQKKyAqLworc3RhdGljIHZvaWQgZWVoX3RocmVhZF9sYXVuY2hlcih2b2lkICpkdW1teSkKK3sKKwlpZiAoa2VybmVsX3RocmVhZChlZWhfZXZlbnRfaGFuZGxlciwgTlVMTCwgQ0xPTkVfS0VSTkVMKSA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHN0YXJ0IEVFSCBkYWVtb25cbiIpOworfQorCisvKioKKyAqIGVlaF9zZW5kX2ZhaWx1cmVfZXZlbnQgLSBnZW5lcmF0ZSBhIFBDSSBlcnJvciBldmVudAorICogQGRldiBwY2kgZGV2aWNlCisgKgorICogVGhpcyByb3V0aW5lIGNhbiBiZSBjYWxsZWQgd2l0aGluIGFuIGludGVycnVwdCBjb250ZXh0OworICogdGhlIGFjdHVhbCBldmVudCB3aWxsIGJlIGRlbGl2ZXJlZCBpbiBhIG5vcm1hbCBjb250ZXh0CisgKiAoZnJvbSBhIHdvcmtxdWV1ZSkuCisgKi8KK2ludCBlZWhfc2VuZF9mYWlsdXJlX2V2ZW50IChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aW1lX3VuYXZhaWwpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZWVoX2V2ZW50ICpldmVudDsKKworCWV2ZW50ID0ga21hbGxvYyhzaXplb2YoKmV2ZW50KSwgR0ZQX0FUT01JQyk7CisJaWYgKGV2ZW50ID09IE5VTEwpIHsKKwkJcHJpbnRrIChLRVJOX0VSUiAiRUVIOiBvdXQgb2YgbWVtb3J5LCBldmVudCBub3QgaGFuZGxlZFxuIik7CisJCXJldHVybiAxOworIAl9CisKKwlpZiAoZGV2KQorCQlwY2lfZGV2X2dldChkZXYpOworCisJZXZlbnQtPmRuID0gZG47CisJZXZlbnQtPmRldiA9IGRldjsKKwlldmVudC0+c3RhdGUgPSBzdGF0ZTsKKwlldmVudC0+dGltZV91bmF2YWlsID0gdGltZV91bmF2YWlsOworCisJLyogV2UgbWF5IG9yIG1heSBub3QgYmUgY2FsbGVkIGluIGFuIGludGVycnVwdCBjb250ZXh0ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVlaF9ldmVudGxpc3RfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkKCZldmVudC0+bGlzdCwgJmVlaF9ldmVudGxpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVlaF9ldmVudGxpc3RfbG9jaywgZmxhZ3MpOworCisJc2NoZWR1bGVfd29yaygmZWVoX2V2ZW50X3dxKTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKiBFTkQgT0YgRklMRSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCmluZGV4IGZjYzUwYmYuLjk3YmE1MjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vYWJzX2FkZHIuaD4KICNpbmNsdWRlIDxhc20vcFNlcmllc19yZWNvbmZpZy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1jZmcuaD4KICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vdGNlLmg+CiAjaW5jbHVkZSA8YXNtL3BwYy1wY2kuaD4KQEAgLTU4Miw3ICs1ODEsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gJiBQTEFURk9STV9MUEFSKSB7CisJaWYgKHBsYXRmb3JtX2lzX2xwYXIoKSkgewogCQlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9NVUxUSVRDRSkpIHsKIAkJCXBwY19tZC50Y2VfYnVpbGQgPSB0Y2VfYnVpbGRtdWx0aV9wU2VyaWVzTFA7CiAJCQlwcGNfbWQudGNlX2ZyZWUJID0gdGNlX2ZyZWVtdWx0aV9wU2VyaWVzTFA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMKaW5kZXggYzE5ODY1Ni4uOTk5YTk2MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYwpAQCAtMTA3LDcgKzEwNyw2IEBACiAKIHZvaWQgX19pbml0IHBTZXJpZXNfZmluYWxfZml4dXAodm9pZCkKIHsKLQlwaGJzX3JlbWFwX2lvKCk7CiAJcFNlcmllc19yZXF1ZXN0X3JlZ2lvbnMoKTsKIAogCXBjaV9hZGRyX2NhY2hlX2J1aWxkKCk7CkBAIC0xMjMsNyArMTIyLDcgQEAKIAlpbnQgaTsKIAl1bnNpZ25lZCBpbnQgcmVnOwogCi0JaWYgKCEoc3lzdGVtY2ZnLT5wbGF0Zm9ybSAmIFBMQVRGT1JNX1BTRVJJRVMpKQorCWlmICghcGxhdGZvcm1faXNfcHNlcmllcygpKQogCQlyZXR1cm47CiAKIAlwcmludGsoIlVzaW5nIElOVEMgZm9yIFc4MmMxMDUgSURFIGNvbnRyb2xsZXIuXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yZWNvbmZpZy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMKaW5kZXggZDdkNDAwMy4uZDg4NjQxNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMKQEAgLTQwOCw3ICs0MDgsNyBAQAogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50OwogCi0JaWYgKCEoc3lzdGVtY2ZnLT5wbGF0Zm9ybSAmIFBMQVRGT1JNX1BTRVJJRVMpKQorCWlmICghcGxhdGZvcm1faXNfcHNlcmllcygpKQogCQlyZXR1cm4gMDsKIAogCWVudCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJwcGM2NC9vZmR0IiwgU19JV1VTUiwgTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcnRhc2QuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzZC5jCmluZGV4IGUyNmIwNDIuLmE2ZjYyOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzZC5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vbnZyYW0uaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgogCiAjaWYgMAogI2RlZmluZSBERUJVRyhBLi4uKQlwcmludGsoS0VSTl9FUlIgQSkKQEAgLTQ4MiwxMCArNDgxLDEyIEBACiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeTsKIAotCS8qIE5vIFJUQVMsIG9ubHkgd2FybiBpZiB3ZSBhcmUgb24gYSBwU2VyaWVzIGJveCAgKi8KKwlpZiAoIXBsYXRmb3JtX2lzX3BzZXJpZXMoKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBObyBSVEFTICovCiAJaWYgKHJ0YXNfdG9rZW4oImV2ZW50LXNjYW4iKSA9PSBSVEFTX1VOS05PV05fU0VSVklDRSkgewotCQlpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSAmIFBMQVRGT1JNX1BTRVJJRVMpCi0JCQlwcmludGsoS0VSTl9JTkZPICJydGFzZDogbm8gZXZlbnQtc2NhbiBvbiBzeXN0ZW1cbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJydGFzZDogbm8gZXZlbnQtc2NhbiBvbiBzeXN0ZW1cbiIpOwogCQlyZXR1cm4gMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3NjYW5sb2cuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zY2FubG9nLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3NjYW5sb2cuYwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NjYW5sb2cuYwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYwppbmRleCBhMDkzYTBkLi4zMTk5MDgyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYwpAQCAtMjQ5LDcgKzI0OSw3IEBACiAJCXBwY19tZC5pZGxlX2xvb3AgPSBkZWZhdWx0X2lkbGU7CiAJfQogCi0JaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gJiBQTEFURk9STV9MUEFSKQorCWlmIChwbGF0Zm9ybV9pc19scGFyKCkpCiAJCXBwY19tZC5lbmFibGVfcG1jcyA9IHBzZXJpZXNfbHBhcl9lbmFibGVfcG1jczsKIAllbHNlCiAJCXBwY19tZC5lbmFibGVfcG1jcyA9IHBvd2VyNF9lbmFibGVfcG1jczsKQEAgLTMwNiw5ICszMDYsNyBAQAogCX0KIAogCW9mX25vZGVfcHV0KGRuKTsKLSBub19ydGFzOgotCXByaW50ayhLRVJOX0lORk8gImZpcm13YXJlX2ZlYXR1cmVzID0gMHglbHhcbiIsIAotCSAgICAgICBwcGM2NF9maXJtd2FyZV9mZWF0dXJlcyk7Citub19ydGFzOgogCiAJREJHKCIgPC0gZndfZmVhdHVyZV9pbml0KClcbiIpOwogfQpAQCAtMzc4LDcgKzM3Niw3IEBACiAKIAlmd19mZWF0dXJlX2luaXQoKTsKIAkKLQlpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSAmIFBMQVRGT1JNX0xQQVIpCisJaWYgKHBsYXRmb3JtX2lzX2xwYXIoKSkKIAkJaHB0ZV9pbml0X2xwYXIoKTsKIAllbHNlIHsKIAkJaHB0ZV9pbml0X25hdGl2ZSgpOwpAQCAtMzg4LDcgKzM4Niw3IEBACiAKIAlnZW5lcmljX2ZpbmRfbGVnYWN5X3NlcmlhbF9wb3J0cygmcGh5c3BvcnQsICZkZWZhdWx0X3NwZWVkKTsKIAotCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtICYgUExBVEZPUk1fTFBBUikKKwlpZiAocGxhdGZvcm1faXNfbHBhcigpKQogCQlmaW5kX3VkYmdfdnRlcm0oKTsKIAllbHNlIGlmIChwaHlzcG9ydCkgewogCQkvKiBNYXAgdGhlIHVhcnQgZm9yIHVkYmcuICovCkBAIC01OTIsNyArNTkwLDcgQEAKIAogc3RhdGljIGludCBwU2VyaWVzX3BjaV9wcm9iZV9tb2RlKHN0cnVjdCBwY2lfYnVzICpidXMpCiB7Ci0JaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gJiBQTEFURk9STV9MUEFSKQorCWlmIChwbGF0Zm9ybV9pc19scGFyKCkpCiAJCXJldHVybiBQQ0lfUFJPQkVfREVWVFJFRTsKIAlyZXR1cm4gUENJX1BST0JFX05PUk1BTDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYwppbmRleCA3YTI0M2U4Li41ODAwY2RlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8YXNtL3J0YXMuaD4KICNpbmNsdWRlIDxhc20vcFNlcmllc19yZWNvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9tcGljLmg+CisjaW5jbHVkZSA8YXNtL3Zkc29fZGF0YXBhZ2UuaD4KIAogI2luY2x1ZGUgInBscGFyX3dyYXBwZXJzLmgiCiAKQEAgLTk2LDcgKzk3LDcgQEAKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJY3B1X2NsZWFyKGNwdSwgY3B1X29ubGluZV9tYXApOwotCXN5c3RlbWNmZy0+cHJvY2Vzc29yQ291bnQtLTsKKwl2ZHNvX2RhdGEtPnByb2Nlc3NvckNvdW50LS07CiAKIAkvKmZpeCBib290X2NwdWlkIGhlcmUqLwogCWlmIChjcHUgPT0gYm9vdF9jcHVpZCkKQEAgLTQ0MSw3ICs0NDIsNyBAQAogCXNtcF9vcHMtPmNwdV9kaWUgPSBwU2VyaWVzX2NwdV9kaWU7CiAKIAkvKiBQcm9jZXNzb3JzIGNhbiBiZSBhZGRlZC9yZW1vdmVkIG9ubHkgb24gTFBBUiAqLwotCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtID09IFBMQVRGT1JNX1BTRVJJRVNfTFBBUikKKwlpZiAocGxhdGZvcm1faXNfbHBhcigpKQogCQlwU2VyaWVzX3JlY29uZmlnX25vdGlmaWVyX3JlZ2lzdGVyKCZwU2VyaWVzX3NtcF9uYik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKaW5kZXggYzcyYzg2Zi4uNzJhYzE4MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCkBAIC01NDUsNyArNTQ1LDkgQEAKIAkJb2Zfbm9kZV9wdXQobnApOwogCX0KIAotCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtID09IFBMQVRGT1JNX1BTRVJJRVMpIHsKKwlpZiAocGxhdGZvcm1faXNfbHBhcigpKQorCQlvcHMgPSAmcFNlcmllc0xQX29wczsKKwllbHNlIHsKICNpZmRlZiBDT05GSUdfU01QCiAJCWZvcl9lYWNoX2NwdShpKSB7CiAJCQlpbnQgaGFyZF9pZDsKQEAgLTU2MSwxMiArNTYzLDExIEBACiAjZWxzZQogCQl4aWNzX3Blcl9jcHVbMF0gPSBpb3JlbWFwKGludHJfYmFzZSwgaW50cl9zaXplKTsKICNlbmRpZiAvKiBDT05GSUdfU01QICovCi0JfSBlbHNlIGlmIChzeXN0ZW1jZmctPnBsYXRmb3JtID09IFBMQVRGT1JNX1BTRVJJRVNfTFBBUikgewotCQlvcHMgPSAmcFNlcmllc0xQX29wczsKIAl9CiAKIAl4aWNzXzgyNTlfcGljLmVuYWJsZSA9IGk4MjU5X3BpYy5lbmFibGU7CiAJeGljc184MjU5X3BpYy5kaXNhYmxlID0gaTgyNTlfcGljLmRpc2FibGU7CisJeGljc184MjU5X3BpYy5lbmQgPSBpODI1OV9waWMuZW5kOwogCWZvciAoaSA9IDA7IGkgPCAxNjsgKytpKQogCQlnZXRfaXJxX2Rlc2MoaSktPmhhbmRsZXIgPSAmeGljc184MjU5X3BpYzsKIAlmb3IgKDsgaSA8IE5SX0lSUVM7ICsraSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvdTNfaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvdTNfaW9tbXUuYwppbmRleCA1NDNkNjU5Li5mMzJiYWY3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3UzX2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi91M19pb21tdS5jCkBAIC0yMjYsNyArMjI2LDcgQEAKIAlpb21tdV90YWJsZV91My5pdF9idXNubyA9IDA7CiAJaW9tbXVfdGFibGVfdTMuaXRfb2Zmc2V0ID0gMDsKIAkvKiBpdF9zaXplIGlzIGluIG51bWJlciBvZiBlbnRyaWVzICovCi0JaW9tbXVfdGFibGVfdTMuaXRfc2l6ZSA9IGRhcnRfdGFibGVzaXplIC8gc2l6ZW9mKHUzMik7CisJaW9tbXVfdGFibGVfdTMuaXRfc2l6ZSA9IChkYXJ0X3RhYmxlc2l6ZSAvIHNpemVvZih1MzIpKSA+PiBEQVJUX1BBR0VfRkFDVE9SOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgY29tbW9uIElPTU1VIGNvZGUgKi8KIAlpb21tdV90YWJsZV91My5pdF9iYXNlID0gKHVuc2lnbmVkIGxvbmcpZGFydF92YmFzZTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3htb24vTWFrZWZpbGUKaW5kZXggNzlhNzg0Zi4uYjIwMzEyZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3htb24vTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3htb24vTWFrZWZpbGUKQEAgLTgsNCArOCw0IEBACiBvYmotJChDT05GSUdfNnh4KQkrPSBzdGFydF8zMi5vCiBvYmotJChDT05GSUdfNHh4KQkrPSBzdGFydF8zMi5vCiBvYmotJChDT05GSUdfUFBDNjQpCSs9IHN0YXJ0XzY0Lm8KLW9iai15CQkJKz0geG1vbi5vIHBwYy1kaXMubyBwcGMtb3BjLm8gc3Vicl9wcmYubyBzZXRqbXAubworb2JqLXkJCQkrPSB4bW9uLm8gcHBjLWRpcy5vIHBwYy1vcGMubyBzZXRqbXAubyBub25zdGRpby5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMveG1vbi9ub25zdGRpby5jIGIvYXJjaC9wb3dlcnBjL3htb24vbm9uc3RkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODc2NTgzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3htb24vbm9uc3RkaW8uYwpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDA1IFBhdWwgTWFja2VycmFzLgorICoKKyAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSAibm9uc3RkaW8uaCIKKworaW50IHhtb25fcHV0Y2hhcihpbnQgYykKK3sKKwljaGFyIGNoID0gYzsKKworCWlmIChjID09ICdcbicpCisJCXhtb25fcHV0Y2hhcignXHInKTsKKwlyZXR1cm4geG1vbl93cml0ZSgmY2gsIDEpID09IDE/IGM6IC0xOworfQorCitzdGF0aWMgY2hhciBsaW5lWzI1Nl07CitzdGF0aWMgY2hhciAqbGluZXB0cjsKK3N0YXRpYyBpbnQgbGluZWxlZnQ7CisKK2ludCB4bW9uX2V4cGVjdChjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKK3sKKwlpbnQgYzsKKwl1bnNpZ25lZCBsb25nIHQwOworCisJLyogYXNzdW1lIDI1TUh6IGRlZmF1bHQgdGltZWJhc2UgaWYgdGJfdGlja3NfcGVyX3NlYyBub3Qgc2V0IHlldCAqLworCXRpbWVvdXQgKj0gdGJfdGlja3NfcGVyX3NlYz8gdGJfdGlja3NfcGVyX3NlYzogMjUwMDAwMDA7CisJdDAgPSBnZXRfdGJsKCk7CisJZG8geworCQlsaW5lcHRyID0gbGluZTsKKwkJZm9yICg7OykgeworCQkJYyA9IHhtb25fcmVhZF9wb2xsKCk7CisJCQlpZiAoYyA9PSAtMSkgeworCQkJCWlmIChnZXRfdGJsKCkgLSB0MCA+IHRpbWVvdXQpCisJCQkJCXJldHVybiAwOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGMgPT0gJ1xuJykKKwkJCQlicmVhazsKKwkJCWlmIChjICE9ICdccicgJiYgbGluZXB0ciA8ICZsaW5lW3NpemVvZihsaW5lKSAtIDFdKQorCQkJCSpsaW5lcHRyKysgPSBjOworCQl9CisJCSpsaW5lcHRyID0gMDsKKwl9IHdoaWxlIChzdHJzdHIobGluZSwgc3RyKSA9PSBOVUxMKTsKKwlyZXR1cm4gMTsKK30KKworaW50IHhtb25fZ2V0Y2hhcih2b2lkKQoreworCWludCBjOworCisJaWYgKGxpbmVsZWZ0ID09IDApIHsKKwkJbGluZXB0ciA9IGxpbmU7CisJCWZvciAoOzspIHsKKwkJCWMgPSB4bW9uX3JlYWRjaGFyKCk7CisJCQlpZiAoYyA9PSAtMSB8fCBjID09IDQpCisJCQkJYnJlYWs7CisJCQlpZiAoYyA9PSAnXHInIHx8IGMgPT0gJ1xuJykgeworCQkJCSpsaW5lcHRyKysgPSAnXG4nOworCQkJCXhtb25fcHV0Y2hhcignXG4nKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXN3aXRjaCAoYykgeworCQkJY2FzZSAwMTc3OgorCQkJY2FzZSAnXGInOgorCQkJCWlmIChsaW5lcHRyID4gbGluZSkgeworCQkJCQl4bW9uX3B1dGNoYXIoJ1xiJyk7CisJCQkJCXhtb25fcHV0Y2hhcignICcpOworCQkJCQl4bW9uX3B1dGNoYXIoJ1xiJyk7CisJCQkJCS0tbGluZXB0cjsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlICdVJyAmIDB4MUY6CisJCQkJd2hpbGUgKGxpbmVwdHIgPiBsaW5lKSB7CisJCQkJCXhtb25fcHV0Y2hhcignXGInKTsKKwkJCQkJeG1vbl9wdXRjaGFyKCcgJyk7CisJCQkJCXhtb25fcHV0Y2hhcignXGInKTsKKwkJCQkJLS1saW5lcHRyOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKGxpbmVwdHIgPj0gJmxpbmVbc2l6ZW9mKGxpbmUpIC0gMV0pCisJCQkJCXhtb25fcHV0Y2hhcignXGEnKTsKKwkJCQllbHNlIHsKKwkJCQkJeG1vbl9wdXRjaGFyKGMpOworCQkJCQkqbGluZXB0cisrID0gYzsKKwkJCQl9CisJCQl9CisJCX0KKwkJbGluZWxlZnQgPSBsaW5lcHRyIC0gbGluZTsKKwkJbGluZXB0ciA9IGxpbmU7CisJfQorCWlmIChsaW5lbGVmdCA9PSAwKQorCQlyZXR1cm4gLTE7CisJLS1saW5lbGVmdDsKKwlyZXR1cm4gKmxpbmVwdHIrKzsKK30KKworY2hhciAqeG1vbl9nZXRzKGNoYXIgKnN0ciwgaW50IG5iKQoreworCWNoYXIgKnA7CisJaW50IGM7CisKKwlmb3IgKHAgPSBzdHI7IHAgPCBzdHIgKyBuYiAtIDE7ICkgeworCQljID0geG1vbl9nZXRjaGFyKCk7CisJCWlmIChjID09IC0xKSB7CisJCQlpZiAocCA9PSBzdHIpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlicmVhazsKKwkJfQorCQkqcCsrID0gYzsKKwkJaWYgKGMgPT0gJ1xuJykKKwkJCWJyZWFrOworCX0KKwkqcCA9IDA7CisJcmV0dXJuIHN0cjsKK30KKwordm9pZCB4bW9uX3ByaW50Zihjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJaW50IG47CisJc3RhdGljIGNoYXIgeG1vbl9vdXRidWZbMTAyNF07CisKKwl2YV9zdGFydChhcmdzLCBmb3JtYXQpOworCW4gPSB2c25wcmludGYoeG1vbl9vdXRidWYsIHNpemVvZih4bW9uX291dGJ1ZiksIGZvcm1hdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCXhtb25fd3JpdGUoeG1vbl9vdXRidWYsIG4pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3htb24vbm9uc3RkaW8uaCBiL2FyY2gvcG93ZXJwYy94bW9uL25vbnN0ZGlvLmgKaW5kZXggODQyMTFhMi4uNDdjZWJiZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3htb24vbm9uc3RkaW8uaAorKysgYi9hcmNoL3Bvd2VycGMveG1vbi9ub25zdGRpby5oCkBAIC0xLDIyICsxLDE0IEBACi10eXBlZGVmIGludAlGSUxFOwotZXh0ZXJuIEZJTEUgKnhtb25fc3RkaW4sICp4bW9uX3N0ZG91dDsKICNkZWZpbmUgRU9GCSgtMSkKLSNkZWZpbmUgc3RkaW4JeG1vbl9zdGRpbgotI2RlZmluZSBzdGRvdXQJeG1vbl9zdGRvdXQKLSNkZWZpbmUgcHJpbnRmCXhtb25fcHJpbnRmCi0jZGVmaW5lIGZwcmludGYJeG1vbl9mcHJpbnRmCi0jZGVmaW5lIGZwdXRzCXhtb25fZnB1dHMKLSNkZWZpbmUgZmdldHMJeG1vbl9mZ2V0cwotI2RlZmluZSBwdXRjaGFyCXhtb25fcHV0Y2hhcgotI2RlZmluZSBnZXRjaGFyCXhtb25fZ2V0Y2hhcgotI2RlZmluZSBwdXRjCXhtb25fcHV0YwotI2RlZmluZSBnZXRjCXhtb25fZ2V0YwotI2RlZmluZSBmb3BlbihuLCBtKQlOVUxMCi0jZGVmaW5lIGZmbHVzaChmKQlkbyB7fSB3aGlsZSAoMCkKLSNkZWZpbmUgZmNsb3NlKGYpCWRvIHt9IHdoaWxlICgwKQotZXh0ZXJuIGNoYXIgKmZnZXRzKGNoYXIgKiwgaW50LCB2b2lkICopOwotZXh0ZXJuIHZvaWQgeG1vbl9wcmludGYoY29uc3QgY2hhciAqLCAuLi4pOwotZXh0ZXJuIHZvaWQgeG1vbl9mcHJpbnRmKHZvaWQgKiwgY29uc3QgY2hhciAqLCAuLi4pOwotZXh0ZXJuIHZvaWQgeG1vbl9zcHJpbnRmKGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwogCi0jZGVmaW5lIHBlcnJvcihzKQlwcmludGYoIiVzOiBubyBmaWxlcyFcbiIsIChzKSkKKyNkZWZpbmUgcHJpbnRmCXhtb25fcHJpbnRmCisjZGVmaW5lIHB1dGNoYXIJeG1vbl9wdXRjaGFyCisKK2V4dGVybiBpbnQgeG1vbl9wdXRjaGFyKGludCBjKTsKK2V4dGVybiBpbnQgeG1vbl9nZXRjaGFyKHZvaWQpOworZXh0ZXJuIGNoYXIgKnhtb25fZ2V0cyhjaGFyICosIGludCk7CitleHRlcm4gdm9pZCB4bW9uX3ByaW50Zihjb25zdCBjaGFyICosIC4uLik7CitleHRlcm4gdm9pZCB4bW9uX21hcF9zY2Modm9pZCk7CitleHRlcm4gaW50IHhtb25fZXhwZWN0KGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKK2V4dGVybiBpbnQgeG1vbl93cml0ZSh2b2lkICpwdHIsIGludCBuYik7CitleHRlcm4gaW50IHhtb25fcmVhZGNoYXIodm9pZCk7CitleHRlcm4gaW50IHhtb25fcmVhZF9wb2xsKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3htb24vc2V0am1wLlMgYi9hcmNoL3Bvd2VycGMveG1vbi9zZXRqbXAuUwppbmRleCBmOGU0MGRmLi45NmE5MWYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMveG1vbi9zZXRqbXAuUworKysgYi9hcmNoL3Bvd2VycGMveG1vbi9zZXRqbXAuUwpAQCAtMTQsNjEgKzE0LDYxIEBACiAKIF9HTE9CQUwoeG1vbl9zZXRqbXApCiAJbWZscglyMAotCVNUTAlyMCwwKHIzKQotCVNUTAlyMSxTWkwocjMpCi0JU1RMCXIyLDIqU1pMKHIzKQorCVBQQ19TVEwJcjAsMChyMykKKwlQUENfU1RMCXIxLFNaTChyMykKKwlQUENfU1RMCXIyLDIqU1pMKHIzKQogCW1mY3IJcjAKLQlTVEwJcjAsMypTWkwocjMpCi0JU1RMCXIxMyw0KlNaTChyMykKLQlTVEwJcjE0LDUqU1pMKHIzKQotCVNUTAlyMTUsNipTWkwocjMpCi0JU1RMCXIxNiw3KlNaTChyMykKLQlTVEwJcjE3LDgqU1pMKHIzKQotCVNUTAlyMTgsOSpTWkwocjMpCi0JU1RMCXIxOSwxMCpTWkwocjMpCi0JU1RMCXIyMCwxMSpTWkwocjMpCi0JU1RMCXIyMSwxMipTWkwocjMpCi0JU1RMCXIyMiwxMypTWkwocjMpCi0JU1RMCXIyMywxNCpTWkwocjMpCi0JU1RMCXIyNCwxNSpTWkwocjMpCi0JU1RMCXIyNSwxNipTWkwocjMpCi0JU1RMCXIyNiwxNypTWkwocjMpCi0JU1RMCXIyNywxOCpTWkwocjMpCi0JU1RMCXIyOCwxOSpTWkwocjMpCi0JU1RMCXIyOSwyMCpTWkwocjMpCi0JU1RMCXIzMCwyMSpTWkwocjMpCi0JU1RMCXIzMSwyMipTWkwocjMpCisJUFBDX1NUTAlyMCwzKlNaTChyMykKKwlQUENfU1RMCXIxMyw0KlNaTChyMykKKwlQUENfU1RMCXIxNCw1KlNaTChyMykKKwlQUENfU1RMCXIxNSw2KlNaTChyMykKKwlQUENfU1RMCXIxNiw3KlNaTChyMykKKwlQUENfU1RMCXIxNyw4KlNaTChyMykKKwlQUENfU1RMCXIxOCw5KlNaTChyMykKKwlQUENfU1RMCXIxOSwxMCpTWkwocjMpCisJUFBDX1NUTAlyMjAsMTEqU1pMKHIzKQorCVBQQ19TVEwJcjIxLDEyKlNaTChyMykKKwlQUENfU1RMCXIyMiwxMypTWkwocjMpCisJUFBDX1NUTAlyMjMsMTQqU1pMKHIzKQorCVBQQ19TVEwJcjI0LDE1KlNaTChyMykKKwlQUENfU1RMCXIyNSwxNipTWkwocjMpCisJUFBDX1NUTAlyMjYsMTcqU1pMKHIzKQorCVBQQ19TVEwJcjI3LDE4KlNaTChyMykKKwlQUENfU1RMCXIyOCwxOSpTWkwocjMpCisJUFBDX1NUTAlyMjksMjAqU1pMKHIzKQorCVBQQ19TVEwJcjMwLDIxKlNaTChyMykKKwlQUENfU1RMCXIzMSwyMipTWkwocjMpCiAJbGkJcjMsMAogCWJscgogCiBfR0xPQkFMKHhtb25fbG9uZ2ptcCkKLQlDTVBJCXI0LDAKKwlQUENfTENNUEkgcjQsMAogCWJuZQkxZgogCWxpCXI0LDEKLTE6CUxETAlyMTMsNCpTWkwocjMpCi0JTERMCXIxNCw1KlNaTChyMykKLQlMREwJcjE1LDYqU1pMKHIzKQotCUxETAlyMTYsNypTWkwocjMpCi0JTERMCXIxNyw4KlNaTChyMykKLQlMREwJcjE4LDkqU1pMKHIzKQotCUxETAlyMTksMTAqU1pMKHIzKQotCUxETAlyMjAsMTEqU1pMKHIzKQotCUxETAlyMjEsMTIqU1pMKHIzKQotCUxETAlyMjIsMTMqU1pMKHIzKQotCUxETAlyMjMsMTQqU1pMKHIzKQotCUxETAlyMjQsMTUqU1pMKHIzKQotCUxETAlyMjUsMTYqU1pMKHIzKQotCUxETAlyMjYsMTcqU1pMKHIzKQotCUxETAlyMjcsMTgqU1pMKHIzKQotCUxETAlyMjgsMTkqU1pMKHIzKQotCUxETAlyMjksMjAqU1pMKHIzKQotCUxETAlyMzAsMjEqU1pMKHIzKQotCUxETAlyMzEsMjIqU1pMKHIzKQotCUxETAlyMCwzKlNaTChyMykKKzE6CVBQQ19MTAlyMTMsNCpTWkwocjMpCisJUFBDX0xMCXIxNCw1KlNaTChyMykKKwlQUENfTEwJcjE1LDYqU1pMKHIzKQorCVBQQ19MTAlyMTYsNypTWkwocjMpCisJUFBDX0xMCXIxNyw4KlNaTChyMykKKwlQUENfTEwJcjE4LDkqU1pMKHIzKQorCVBQQ19MTAlyMTksMTAqU1pMKHIzKQorCVBQQ19MTAlyMjAsMTEqU1pMKHIzKQorCVBQQ19MTAlyMjEsMTIqU1pMKHIzKQorCVBQQ19MTAlyMjIsMTMqU1pMKHIzKQorCVBQQ19MTAlyMjMsMTQqU1pMKHIzKQorCVBQQ19MTAlyMjQsMTUqU1pMKHIzKQorCVBQQ19MTAlyMjUsMTYqU1pMKHIzKQorCVBQQ19MTAlyMjYsMTcqU1pMKHIzKQorCVBQQ19MTAlyMjcsMTgqU1pMKHIzKQorCVBQQ19MTAlyMjgsMTkqU1pMKHIzKQorCVBQQ19MTAlyMjksMjAqU1pMKHIzKQorCVBQQ19MTAlyMzAsMjEqU1pMKHIzKQorCVBQQ19MTAlyMzEsMjIqU1pMKHIzKQorCVBQQ19MTAlyMCwzKlNaTChyMykKIAltdGNyZgkweDM4LHIwCi0JTERMCXIwLDAocjMpCi0JTERMCXIxLFNaTChyMykKLQlMREwJcjIsMipTWkwocjMpCisJUFBDX0xMCXIwLDAocjMpCisJUFBDX0xMCXIxLFNaTChyMykKKwlQUENfTEwJcjIsMipTWkwocjMpCiAJbXRscglyMAogCW1yCXIzLHI0CiAJYmxyCkBAIC04NCw1MiArODQsNTIgQEAKICAqIGRpZmZlcmVudCBBQklzLCB0aG91Z2gpLgogICovCiBfR0xPQkFMKHhtb25fc2F2ZV9yZWdzKQotCVNUTAlyMCwwKlNaTChyMykKLQlTVEwJcjIsMipTWkwocjMpCi0JU1RMCXIzLDMqU1pMKHIzKQotCVNUTAlyNCw0KlNaTChyMykKLQlTVEwJcjUsNSpTWkwocjMpCi0JU1RMCXI2LDYqU1pMKHIzKQotCVNUTAlyNyw3KlNaTChyMykKLQlTVEwJcjgsOCpTWkwocjMpCi0JU1RMCXI5LDkqU1pMKHIzKQotCVNUTAlyMTAsMTAqU1pMKHIzKQotCVNUTAlyMTEsMTEqU1pMKHIzKQotCVNUTAlyMTIsMTIqU1pMKHIzKQotCVNUTAlyMTMsMTMqU1pMKHIzKQotCVNUTAlyMTQsMTQqU1pMKHIzKQotCVNUTAlyMTUsMTUqU1pMKHIzKQotCVNUTAlyMTYsMTYqU1pMKHIzKQotCVNUTAlyMTcsMTcqU1pMKHIzKQotCVNUTAlyMTgsMTgqU1pMKHIzKQotCVNUTAlyMTksMTkqU1pMKHIzKQotCVNUTAlyMjAsMjAqU1pMKHIzKQotCVNUTAlyMjEsMjEqU1pMKHIzKQotCVNUTAlyMjIsMjIqU1pMKHIzKQotCVNUTAlyMjMsMjMqU1pMKHIzKQotCVNUTAlyMjQsMjQqU1pMKHIzKQotCVNUTAlyMjUsMjUqU1pMKHIzKQotCVNUTAlyMjYsMjYqU1pMKHIzKQotCVNUTAlyMjcsMjcqU1pMKHIzKQotCVNUTAlyMjgsMjgqU1pMKHIzKQotCVNUTAlyMjksMjkqU1pMKHIzKQotCVNUTAlyMzAsMzAqU1pMKHIzKQotCVNUTAlyMzEsMzEqU1pMKHIzKQorCVBQQ19TVEwJcjAsMCpTWkwocjMpCisJUFBDX1NUTAlyMiwyKlNaTChyMykKKwlQUENfU1RMCXIzLDMqU1pMKHIzKQorCVBQQ19TVEwJcjQsNCpTWkwocjMpCisJUFBDX1NUTAlyNSw1KlNaTChyMykKKwlQUENfU1RMCXI2LDYqU1pMKHIzKQorCVBQQ19TVEwJcjcsNypTWkwocjMpCisJUFBDX1NUTAlyOCw4KlNaTChyMykKKwlQUENfU1RMCXI5LDkqU1pMKHIzKQorCVBQQ19TVEwJcjEwLDEwKlNaTChyMykKKwlQUENfU1RMCXIxMSwxMSpTWkwocjMpCisJUFBDX1NUTAlyMTIsMTIqU1pMKHIzKQorCVBQQ19TVEwJcjEzLDEzKlNaTChyMykKKwlQUENfU1RMCXIxNCwxNCpTWkwocjMpCisJUFBDX1NUTAlyMTUsMTUqU1pMKHIzKQorCVBQQ19TVEwJcjE2LDE2KlNaTChyMykKKwlQUENfU1RMCXIxNywxNypTWkwocjMpCisJUFBDX1NUTAlyMTgsMTgqU1pMKHIzKQorCVBQQ19TVEwJcjE5LDE5KlNaTChyMykKKwlQUENfU1RMCXIyMCwyMCpTWkwocjMpCisJUFBDX1NUTAlyMjEsMjEqU1pMKHIzKQorCVBQQ19TVEwJcjIyLDIyKlNaTChyMykKKwlQUENfU1RMCXIyMywyMypTWkwocjMpCisJUFBDX1NUTAlyMjQsMjQqU1pMKHIzKQorCVBQQ19TVEwJcjI1LDI1KlNaTChyMykKKwlQUENfU1RMCXIyNiwyNipTWkwocjMpCisJUFBDX1NUTAlyMjcsMjcqU1pMKHIzKQorCVBQQ19TVEwJcjI4LDI4KlNaTChyMykKKwlQUENfU1RMCXIyOSwyOSpTWkwocjMpCisJUFBDX1NUTAlyMzAsMzAqU1pMKHIzKQorCVBQQ19TVEwJcjMxLDMxKlNaTChyMykKIAkvKiBnbyB1cCBvbmUgc3RhY2sgZnJhbWUgZm9yIFNQICovCi0JTERMCXI0LDAocjEpCi0JU1RMCXI0LDEqU1pMKHIzKQorCVBQQ19MTAlyNCwwKHIxKQorCVBQQ19TVEwJcjQsMSpTWkwocjMpCiAJLyogZ2V0IGNhbGxlcidzIExSICovCi0JTERMCXIwLExSU0FWRShyNCkKLQlTVEwJcjAsX05JUC1TVEFDS19GUkFNRV9PVkVSSEVBRChyMykKLQlTVEwJcjAsX0xJTkstU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjMpCisJUFBDX0xMCXIwLExSU0FWRShyNCkKKwlQUENfU1RMCXIwLF9OSVAtU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjMpCisJUFBDX1NUTAlyMCxfTElOSy1TVEFDS19GUkFNRV9PVkVSSEVBRChyMykKIAltZm1zcglyMAotCVNUTAlyMCxfTVNSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHIzKQorCVBQQ19TVEwJcjAsX01TUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyMykKIAltZmN0cglyMAotCVNUTAlyMCxfQ1RSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHIzKQorCVBQQ19TVEwJcjAsX0NUUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyMykKIAltZnhlcglyMAotCVNUTAlyMCxfWEVSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHIzKQorCVBQQ19TVEwJcjAsX1hFUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyMykKIAltZmNyCXIwCi0JU1RMCXIwLF9DQ1ItU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjMpCisJUFBDX1NUTAlyMCxfQ0NSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHIzKQogCWxpCXIwLDAKLQlTVEwJcjAsX1RSQVAtU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjMpCisJUFBDX1NUTAlyMCxfVFJBUC1TVEFDS19GUkFNRV9PVkVSSEVBRChyMykKIAlibHIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL3N0YXJ0XzMyLmMgYi9hcmNoL3Bvd2VycGMveG1vbi9zdGFydF8zMi5jCmluZGV4IDY5YjY1OGMuLmMyNDY0ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy94bW9uL3N0YXJ0XzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3htb24vc3RhcnRfMzIuYwpAQCAtMTEsNyArMTEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2N1ZGEuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL3htb24uaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgpAQCAtMjIsMTAgKzIxLDExIEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9idGV4dC5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSAibm9uc3RkaW8uaCIKIAogc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19pb21lbSAqc2NjYywgKnNjY2Q7CiB1bnNpZ25lZCBpbnQgVFhSRFksIFJYUkRZLCBETEFCOwotc3RhdGljIGludCB4bW9uX2V4cGVjdChjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGludCB0aW1lb3V0KTsKIAogc3RhdGljIGludCB1c2Vfc2VyaWFsOwogc3RhdGljIGludCB1c2Vfc2NyZWVuOwpAQCAtMzMsMTYgKzMzLDYgQEAKIHN0YXRpYyBpbnQgeG1vbl91c2Vfc2NjYjsKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoYW5uZWxfbm9kZTsKIAotI2RlZmluZSBUQl9TUEVFRAkyNTAwMDAwMAotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCByZWFkdGIodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgcmV0OwotCi0JYXNtIHZvbGF0aWxlKCJtZnRiICUwIiA6ICI9ciIgKHJldCkgOik7Ci0JcmV0dXJuIHJldDsKLX0KLQogdm9pZCBidWZfYWNjZXNzKHZvaWQpCiB7CiAJaWYgKERMQUIpCkBAIC05MSwyMyArODEsNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19QUENfQ0hSUCAqLwogCi0jaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCi1zdGF0aWMgdm9pZCBzeXNycV9oYW5kbGVfeG1vbihpbnQga2V5LCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJCSAgICAgIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0JeG1vbihyZWdzKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNycV9rZXlfb3Agc3lzcnFfeG1vbl9vcCA9Ci17Ci0JLmhhbmRsZXIgPQlzeXNycV9oYW5kbGVfeG1vbiwKLQkuaGVscF9tc2cgPQkiWG1vbiIsCi0JLmFjdGlvbl9tc2cgPQkiRW50ZXJpbmcgeG1vbiIsCi19OwotI2VuZGlmCi0KLXZvaWQKLXhtb25fbWFwX3NjYyh2b2lkKQordm9pZCB4bW9uX21hcF9zY2Modm9pZCkKIHsKICNpZmRlZiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0KIAl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIF9faW9tZW0gKmJhc2U7CkBAIC0yMTcsOCArMTkxLDYgQEAKIAlSWFJEWSA9IDE7CiAJRExBQiA9IDB4ODA7CiAjZW5kaWYgLyogcGxhdGZvcm0gKi8KLQotCXJlZ2lzdGVyX3N5c3JxX2tleSgneCcsICZzeXNycV94bW9uX29wKTsKIH0KIAogc3RhdGljIGludCBzY2NfaW5pdGlhbGl6ZWQgPSAwOwpAQCAtMjM4LDggKzIxMCw3IEBACiAjZW5kaWYgLyogQ09ORklHX0FEQl9DVURBICovCiB9CiAKLWludAoteG1vbl93cml0ZSh2b2lkICpoYW5kbGUsIHZvaWQgKnB0ciwgaW50IG5iKQoraW50IHhtb25fd3JpdGUodm9pZCAqcHRyLCBpbnQgbmIpCiB7CiAJY2hhciAqcCA9IHB0cjsKIAlpbnQgaSwgYywgY3Q7CkBAIC0zMTEsOCArMjgyLDcgQEAKIAkiXDAuXDAqXDArXDBcMFwwXDBcMC9cclwwLVwwIgkJCS8qIDB4NDAgLSAweDRmICovCiAJIlwwXDAwMDAxMjM0NTY3ODlcMFwwXDAiOwkJCS8qIDB4NTAgLSAweDVmICovCiAKLXN0YXRpYyBpbnQKLXhtb25fZ2V0X2FkYl9rZXkodm9pZCkKK3N0YXRpYyBpbnQgeG1vbl9nZXRfYWRiX2tleSh2b2lkKQogewogCWludCBrLCB0LCBvbjsKIApAQCAtMzUwLDMyICszMjAsMjEgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfQk9PVFhfVEVYVCAqLwogCi1pbnQKLXhtb25fcmVhZCh2b2lkICpoYW5kbGUsIHZvaWQgKnB0ciwgaW50IG5iKQoraW50IHhtb25fcmVhZGNoYXIodm9pZCkKIHsKLSAgICBjaGFyICpwID0gcHRyOwotICAgIGludCBpOwotCiAjaWZkZWYgQ09ORklHX0JPT1RYX1RFWFQKLSAgICBpZiAodXNlX3NjcmVlbikgewotCWZvciAoaSA9IDA7IGkgPCBuYjsgKytpKQotCSAgICAqcCsrID0geG1vbl9nZXRfYWRiX2tleSgpOwotCXJldHVybiBpOwotICAgIH0KKwlpZiAodXNlX3NjcmVlbikKKwkJcmV0dXJuIHhtb25fZ2V0X2FkYl9rZXkoKTsKICNlbmRpZgotICAgIGlmICghc2NjX2luaXRpYWxpemVkKQotCXhtb25faW5pdF9zY2MoKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbmI7ICsraSkgeworCWlmICghc2NjX2luaXRpYWxpemVkKQorCQl4bW9uX2luaXRfc2NjKCk7CiAJd2hpbGUgKCgqc2NjYyAmIFJYUkRZKSA9PSAwKQotCSAgICBkb19wb2xsX2FkYigpOworCQlkb19wb2xsX2FkYigpOwogCWJ1Zl9hY2Nlc3MoKTsKLQkqcCsrID0gKnNjY2Q7Ci0gICAgfQotICAgIHJldHVybiBpOworCXJldHVybiAqc2NjZDsKIH0KIAotaW50Ci14bW9uX3JlYWRfcG9sbCh2b2lkKQoraW50IHhtb25fcmVhZF9wb2xsKHZvaWQpCiB7CiAJaWYgKCgqc2NjYyAmIFJYUkRZKSA9PSAwKSB7CiAJCWRvX3BvbGxfYWRiKCk7CkBAIC0zOTUsOCArMzU0LDcgQEAKICAgICAzLCAgMHhjMSwJCS8qIHJ4IGVuYWJsZSwgOCBiaXRzICovCiB9OwogCi12b2lkCi14bW9uX2luaXRfc2NjKHZvaWQpCit2b2lkIHhtb25faW5pdF9zY2Modm9pZCkKIHsKIAlpZiAoIF9tYWNoaW5lID09IF9NQUNIX2NocnAgKQogCXsKQEAgLTQxMCw2ICszNjgsNyBAQAogCWVsc2UgaWYgKCBfbWFjaGluZSA9PSBfTUFDSF9QbWFjICkKIAl7CiAJCWludCBpLCB4OworCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAKIAkJaWYgKGNoYW5uZWxfbm9kZSAhPSAwKQogCQkJcG1hY19jYWxsX2ZlYXR1cmUoCkBAIC00MjQsOCArMzgzLDEyIEBACiAJCQkJUE1BQ19GVFJfTU9ERU1fRU5BQkxFLAogCQkJCWNoYW5uZWxfbm9kZSwgMCwgMSk7CiAJCQlwcmludGsoS0VSTl9JTkZPICJNb2RlbSBwb3dlcmVkIHVwIGJ5IGRlYnVnZ2VyICFcbiIpOwotCQkJdDAgPSByZWFkdGIoKTsKLQkJCXdoaWxlIChyZWFkdGIoKSAtIHQwIDwgMypUQl9TUEVFRCkKKwkJCXQwID0gZ2V0X3RibCgpOworCQkJdGltZW91dCA9IDMgKiB0Yl90aWNrc19wZXJfc2VjOworCQkJaWYgKHRpbWVvdXQgPT0gMCkKKwkJCQkvKiBhc3N1bWUgMjVNSHogaWYgdGJfdGlja3NfcGVyX3NlYyBub3Qgc2V0ICovCisJCQkJdGltZW91dCA9IDc1MDAwMDAwOworCQkJd2hpbGUgKGdldF90YmwoKSAtIHQwIDwgdGltZW91dCkKIAkJCQllaWVpbygpOwogCQl9CiAJCS8qIHVzZSB0aGUgQiBjaGFubmVsIGlmIHJlcXVlc3RlZCAqLwpAQCAtNDQ3LDE2NCArNDEwLDE5IEBACiAJc2NjX2luaXRpYWxpemVkID0gMTsKIAlpZiAodmlhX21vZGVtKSB7CiAJCWZvciAoOzspIHsKLQkJCXhtb25fd3JpdGUoTlVMTCwgIkFURTFWMVxyIiwgNyk7CisJCQl4bW9uX3dyaXRlKCJBVEUxVjFcciIsIDcpOwogCQkJaWYgKHhtb25fZXhwZWN0KCJPSyIsIDUpKSB7Ci0JCQkJeG1vbl93cml0ZShOVUxMLCAiQVRBXHIiLCA0KTsKKwkJCQl4bW9uX3dyaXRlKCJBVEFcciIsIDQpOwogCQkJCWlmICh4bW9uX2V4cGVjdCgiQ09OTkVDVCIsIDQwKSkKIAkJCQkJYnJlYWs7CiAJCQl9Ci0JCQl4bW9uX3dyaXRlKE5VTEwsICIrKysiLCAzKTsKKwkJCXhtb25fd3JpdGUoIisrKyIsIDMpOwogCQkJeG1vbl9leHBlY3QoIk9LIiwgMyk7CiAJCX0KIAl9CiB9CiAKLXZvaWQgKnhtb25fc3RkaW47Ci12b2lkICp4bW9uX3N0ZG91dDsKLXZvaWQgKnhtb25fc3RkZXJyOwotCi1pbnQgeG1vbl9wdXRjKGludCBjLCB2b2lkICpmKQotewotICAgIGNoYXIgY2ggPSBjOwotCi0gICAgaWYgKGMgPT0gJ1xuJykKLQl4bW9uX3B1dGMoJ1xyJywgZik7Ci0gICAgcmV0dXJuIHhtb25fd3JpdGUoZiwgJmNoLCAxKSA9PSAxPyBjOiAtMTsKLX0KLQotaW50IHhtb25fcHV0Y2hhcihpbnQgYykKLXsKLQlyZXR1cm4geG1vbl9wdXRjKGMsIHhtb25fc3Rkb3V0KTsKLX0KLQotaW50IHhtb25fZnB1dHMoY2hhciAqc3RyLCB2b2lkICpmKQotewotCWludCBuID0gc3RybGVuKHN0cik7Ci0KLQlyZXR1cm4geG1vbl93cml0ZShmLCBzdHIsIG4pID09IG4/IDA6IC0xOwotfQotCi1pbnQKLXhtb25fcmVhZGNoYXIodm9pZCkKLXsKLQljaGFyIGNoOwotCi0JZm9yICg7OykgewotCQlzd2l0Y2ggKHhtb25fcmVhZCh4bW9uX3N0ZGluLCAmY2gsIDEpKSB7Ci0JCWNhc2UgMToKLQkJCXJldHVybiBjaDsKLQkJY2FzZSAtMToKLQkJCXhtb25fcHJpbnRmKCJyZWFkKHN0ZGluKSByZXR1cm5lZCAtMVxyXG4iLCAwLCAwKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCX0KLX0KLQotc3RhdGljIGNoYXIgbGluZVsyNTZdOwotc3RhdGljIGNoYXIgKmxpbmVwdHI7Ci1zdGF0aWMgaW50IGxpbmVsZWZ0OwotCi1pbnQgeG1vbl9leHBlY3QoY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgdGltZW91dCkKLXsKLQlpbnQgYzsKLQl1bnNpZ25lZCBpbnQgdDA7Ci0KLQl0aW1lb3V0ICo9IFRCX1NQRUVEOwotCXQwID0gcmVhZHRiKCk7Ci0JZG8gewotCQlsaW5lcHRyID0gbGluZTsKLQkJZm9yICg7OykgewotCQkJYyA9IHhtb25fcmVhZF9wb2xsKCk7Ci0JCQlpZiAoYyA9PSAtMSkgewotCQkJCWlmIChyZWFkdGIoKSAtIHQwID4gdGltZW91dCkKLQkJCQkJcmV0dXJuIDA7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAoYyA9PSAnXG4nKQotCQkJCWJyZWFrOwotCQkJaWYgKGMgIT0gJ1xyJyAmJiBsaW5lcHRyIDwgJmxpbmVbc2l6ZW9mKGxpbmUpIC0gMV0pCi0JCQkJKmxpbmVwdHIrKyA9IGM7Ci0JCX0KLQkJKmxpbmVwdHIgPSAwOwotCX0gd2hpbGUgKHN0cnN0cihsaW5lLCBzdHIpID09IE5VTEwpOwotCXJldHVybiAxOwotfQotCi1pbnQKLXhtb25fZ2V0Y2hhcih2b2lkKQotewotICAgIGludCBjOwotCi0gICAgaWYgKGxpbmVsZWZ0ID09IDApIHsKLQlsaW5lcHRyID0gbGluZTsKLQlmb3IgKDs7KSB7Ci0JICAgIGMgPSB4bW9uX3JlYWRjaGFyKCk7Ci0JICAgIGlmIChjID09IC0xIHx8IGMgPT0gNCkKLQkJYnJlYWs7Ci0JICAgIGlmIChjID09ICdccicgfHwgYyA9PSAnXG4nKSB7Ci0JCSpsaW5lcHRyKysgPSAnXG4nOwotCQl4bW9uX3B1dGNoYXIoJ1xuJyk7Ci0JCWJyZWFrOwotCSAgICB9Ci0JICAgIHN3aXRjaCAoYykgewotCSAgICBjYXNlIDAxNzc6Ci0JICAgIGNhc2UgJ1xiJzoKLQkJaWYgKGxpbmVwdHIgPiBsaW5lKSB7Ci0JCSAgICB4bW9uX3B1dGNoYXIoJ1xiJyk7Ci0JCSAgICB4bW9uX3B1dGNoYXIoJyAnKTsKLQkJICAgIHhtb25fcHV0Y2hhcignXGInKTsKLQkJICAgIC0tbGluZXB0cjsKLQkJfQotCQlicmVhazsKLQkgICAgY2FzZSAnVScgJiAweDFGOgotCQl3aGlsZSAobGluZXB0ciA+IGxpbmUpIHsKLQkJICAgIHhtb25fcHV0Y2hhcignXGInKTsKLQkJICAgIHhtb25fcHV0Y2hhcignICcpOwotCQkgICAgeG1vbl9wdXRjaGFyKCdcYicpOwotCQkgICAgLS1saW5lcHRyOwotCQl9Ci0JCWJyZWFrOwotCSAgICBkZWZhdWx0OgotCQlpZiAobGluZXB0ciA+PSAmbGluZVtzaXplb2YobGluZSkgLSAxXSkKLQkJICAgIHhtb25fcHV0Y2hhcignXGEnKTsKLQkJZWxzZSB7Ci0JCSAgICB4bW9uX3B1dGNoYXIoYyk7Ci0JCSAgICAqbGluZXB0cisrID0gYzsKLQkJfQotCSAgICB9Ci0JfQotCWxpbmVsZWZ0ID0gbGluZXB0ciAtIGxpbmU7Ci0JbGluZXB0ciA9IGxpbmU7Ci0gICAgfQotICAgIGlmIChsaW5lbGVmdCA9PSAwKQotCXJldHVybiAtMTsKLSAgICAtLWxpbmVsZWZ0OwotICAgIHJldHVybiAqbGluZXB0cisrOwotfQotCi1jaGFyICoKLXhtb25fZmdldHMoY2hhciAqc3RyLCBpbnQgbmIsIHZvaWQgKmYpCi17Ci0gICAgY2hhciAqcDsKLSAgICBpbnQgYzsKLQotICAgIGZvciAocCA9IHN0cjsgcCA8IHN0ciArIG5iIC0gMTsgKSB7Ci0JYyA9IHhtb25fZ2V0Y2hhcigpOwotCWlmIChjID09IC0xKSB7Ci0JICAgIGlmIChwID09IHN0cikKLQkJcmV0dXJuIE5VTEw7Ci0JICAgIGJyZWFrOwotCX0KLQkqcCsrID0gYzsKLQlpZiAoYyA9PSAnXG4nKQotCSAgICBicmVhazsKLSAgICB9Ci0gICAgKnAgPSAwOwotICAgIHJldHVybiBzdHI7Ci19Ci0KLXZvaWQKLXhtb25fZW50ZXIodm9pZCkKK3ZvaWQgeG1vbl9lbnRlcih2b2lkKQogewogI2lmZGVmIENPTkZJR19BREJfUE1VCiAJaWYgKF9tYWNoaW5lID09IF9NQUNIX1BtYWMpIHsKQEAgLTYxMyw4ICs0MzEsNyBAQAogI2VuZGlmCiB9CiAKLXZvaWQKLXhtb25fbGVhdmUodm9pZCkKK3ZvaWQgeG1vbl9sZWF2ZSh2b2lkKQogewogI2lmZGVmIENPTkZJR19BREJfUE1VCiAJaWYgKF9tYWNoaW5lID09IF9NQUNIX1BtYWMpIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL3N0YXJ0XzY0LmMgYi9hcmNoL3Bvd2VycGMveG1vbi9zdGFydF82NC5jCmluZGV4IGU1MGMxNTguLjcxMjU1MmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy94bW9uL3N0YXJ0XzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3htb24vc3RhcnRfNjQuYwpAQCAtNiwxODIgKzYsMjkgQEAKICAqICAgICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCiAgKiAgICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vcHJvbS5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdWRiZy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlICJub25zdGRpby5oIgogCi0jaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCi0KLXN0YXRpYyB2b2lkIHN5c3JxX2hhbmRsZV94bW9uKGludCBrZXksIHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzLAotCQkJICAgICAgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkgCit2b2lkIHhtb25fbWFwX3NjYyh2b2lkKQogewotCS8qIGVuc3VyZSB4bW9uIGlzIGVuYWJsZWQgKi8KLQl4bW9uX2luaXQoMSk7Ci0JZGVidWdnZXIocHRfcmVncyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzcnFfa2V5X29wIHN5c3JxX3htb25fb3AgPSAKLXsKLQkuaGFuZGxlciA9CXN5c3JxX2hhbmRsZV94bW9uLAotCS5oZWxwX21zZyA9CSJYbW9uIiwKLQkuYWN0aW9uX21zZyA9CSJFbnRlcmluZyB4bW9uIiwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNldHVwX3htb25fc3lzcnEodm9pZCkKLXsKLQlyZWdpc3Rlcl9zeXNycV9rZXkoJ3gnLCAmc3lzcnFfeG1vbl9vcCk7Ci0JcmV0dXJuIDA7Ci19Ci1fX2luaXRjYWxsKHNldHVwX3htb25fc3lzcnEpOwotI2VuZGlmIC8qIENPTkZJR19NQUdJQ19TWVNSUSAqLwotCi1pbnQKLXhtb25fd3JpdGUodm9pZCAqaGFuZGxlLCB2b2lkICpwdHIsIGludCBuYikKK2ludCB4bW9uX3dyaXRlKHZvaWQgKnB0ciwgaW50IG5iKQogewogCXJldHVybiB1ZGJnX3dyaXRlKHB0ciwgbmIpOwogfQogCi1pbnQKLXhtb25fcmVhZCh2b2lkICpoYW5kbGUsIHZvaWQgKnB0ciwgaW50IG5iKQoraW50IHhtb25fcmVhZGNoYXIodm9pZCkKIHsKLQlyZXR1cm4gdWRiZ19yZWFkKHB0ciwgbmIpOworCWlmICh1ZGJnX2dldGMpCisJCXJldHVybiB1ZGJnX2dldGMoKTsKKwlyZXR1cm4gLTE7CiB9CiAKLWludAoteG1vbl9yZWFkX3BvbGwodm9pZCkKK2ludCB4bW9uX3JlYWRfcG9sbCh2b2lkKQogewogCWlmICh1ZGJnX2dldGNfcG9sbCkKIAkJcmV0dXJuIHVkYmdfZ2V0Y19wb2xsKCk7CiAJcmV0dXJuIC0xOwogfQotIAotRklMRSAqeG1vbl9zdGRpbjsKLUZJTEUgKnhtb25fc3Rkb3V0OwotCi1pbnQKLXhtb25fcHV0YyhpbnQgYywgdm9pZCAqZikKLXsKLQljaGFyIGNoID0gYzsKLQotCWlmIChjID09ICdcbicpCi0JCXhtb25fcHV0YygnXHInLCBmKTsKLQlyZXR1cm4geG1vbl93cml0ZShmLCAmY2gsIDEpID09IDE/IGM6IC0xOwotfQotCi1pbnQKLXhtb25fcHV0Y2hhcihpbnQgYykKLXsKLQlyZXR1cm4geG1vbl9wdXRjKGMsIHhtb25fc3Rkb3V0KTsKLX0KLQotaW50Ci14bW9uX2ZwdXRzKGNoYXIgKnN0ciwgdm9pZCAqZikKLXsKLQlpbnQgbiA9IHN0cmxlbihzdHIpOwotCi0JcmV0dXJuIHhtb25fd3JpdGUoZiwgc3RyLCBuKSA9PSBuPyAwOiAtMTsKLX0KLQotaW50Ci14bW9uX3JlYWRjaGFyKHZvaWQpCi17Ci0JY2hhciBjaDsKLQotCWZvciAoOzspIHsKLQkJc3dpdGNoICh4bW9uX3JlYWQoeG1vbl9zdGRpbiwgJmNoLCAxKSkgewotCQljYXNlIDE6Ci0JCQlyZXR1cm4gY2g7Ci0JCWNhc2UgLTE6Ci0JCQl4bW9uX3ByaW50ZigicmVhZChzdGRpbikgcmV0dXJuZWQgLTFcclxuIiwgMCwgMCk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBjaGFyIGxpbmVbMjU2XTsKLXN0YXRpYyBjaGFyICpsaW5lcHRyOwotc3RhdGljIGludCBsaW5lbGVmdDsKLQotaW50Ci14bW9uX2dldGNoYXIodm9pZCkKLXsKLQlpbnQgYzsKLQotCWlmIChsaW5lbGVmdCA9PSAwKSB7Ci0JCWxpbmVwdHIgPSBsaW5lOwotCQlmb3IgKDs7KSB7Ci0JCQljID0geG1vbl9yZWFkY2hhcigpOwotCQkJaWYgKGMgPT0gLTEgfHwgYyA9PSA0KQotCQkJCWJyZWFrOwotCQkJaWYgKGMgPT0gJ1xyJyB8fCBjID09ICdcbicpIHsKLQkJCQkqbGluZXB0cisrID0gJ1xuJzsKLQkJCQl4bW9uX3B1dGNoYXIoJ1xuJyk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlzd2l0Y2ggKGMpIHsKLQkJCWNhc2UgMDE3NzoKLQkJCWNhc2UgJ1xiJzoKLQkJCQlpZiAobGluZXB0ciA+IGxpbmUpIHsKLQkJCQkJeG1vbl9wdXRjaGFyKCdcYicpOwotCQkJCQl4bW9uX3B1dGNoYXIoJyAnKTsKLQkJCQkJeG1vbl9wdXRjaGFyKCdcYicpOwotCQkJCQktLWxpbmVwdHI7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJY2FzZSAnVScgJiAweDFGOgotCQkJCXdoaWxlIChsaW5lcHRyID4gbGluZSkgewotCQkJCQl4bW9uX3B1dGNoYXIoJ1xiJyk7Ci0JCQkJCXhtb25fcHV0Y2hhcignICcpOwotCQkJCQl4bW9uX3B1dGNoYXIoJ1xiJyk7Ci0JCQkJCS0tbGluZXB0cjsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWlmIChsaW5lcHRyID49ICZsaW5lW3NpemVvZihsaW5lKSAtIDFdKQotCQkJCQl4bW9uX3B1dGNoYXIoJ1xhJyk7Ci0JCQkJZWxzZSB7Ci0JCQkJCXhtb25fcHV0Y2hhcihjKTsKLQkJCQkJKmxpbmVwdHIrKyA9IGM7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWxpbmVsZWZ0ID0gbGluZXB0ciAtIGxpbmU7Ci0JCWxpbmVwdHIgPSBsaW5lOwotCX0KLQlpZiAobGluZWxlZnQgPT0gMCkKLQkJcmV0dXJuIC0xOwotCS0tbGluZWxlZnQ7Ci0JcmV0dXJuICpsaW5lcHRyKys7Ci19Ci0KLWNoYXIgKgoteG1vbl9mZ2V0cyhjaGFyICpzdHIsIGludCBuYiwgdm9pZCAqZikKLXsKLQljaGFyICpwOwotCWludCBjOwotCi0JZm9yIChwID0gc3RyOyBwIDwgc3RyICsgbmIgLSAxOyApIHsKLQkJYyA9IHhtb25fZ2V0Y2hhcigpOwotCQlpZiAoYyA9PSAtMSkgewotCQkJaWYgKHAgPT0gc3RyKQotCQkJCXJldHVybiBOVUxMOwotCQkJYnJlYWs7Ci0JCX0KLQkJKnArKyA9IGM7Ci0JCWlmIChjID09ICdcbicpCi0JCQlicmVhazsKLQl9Ci0JKnAgPSAwOwotCXJldHVybiBzdHI7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMveG1vbi9zdGFydF84eHguYyBiL2FyY2gvcG93ZXJwYy94bW9uL3N0YXJ0Xzh4eC5jCmluZGV4IGE0OGJkNTkuLjRjMTdiMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy94bW9uL3N0YXJ0Xzh4eC5jCisrKyBiL2FyY2gvcG93ZXJwYy94bW9uL3N0YXJ0Xzh4eC5jCkBAIC0xNSwyNzMgKzE1LDMwIEBACiAjaW5jbHVkZSA8YXNtLzh4eF9pbW1hcC5oPgogI2luY2x1ZGUgPGFzbS9tcGM4eHguaD4KICNpbmNsdWRlIDxhc20vY29tbXByb2MuaD4KKyNpbmNsdWRlICJub25zdGRpby5oIgogCi1leHRlcm4gdm9pZCB4bW9uX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLik7CiBleHRlcm4gaW50IHhtb25fOHh4X3dyaXRlKGNoYXIgKnN0ciwgaW50IG5iKTsKIGV4dGVybiBpbnQgeG1vbl84eHhfcmVhZF9wb2xsKHZvaWQpOwogZXh0ZXJuIGludCB4bW9uXzh4eF9yZWFkX2NoYXIodm9pZCk7Ci12b2lkIHByb21fZHJhd2hleCh1aW50KTsKLXZvaWQgcHJvbV9kcmF3c3RyaW5nKGNvbnN0IGNoYXIgKnN0cik7CiAKLXN0YXRpYyBpbnQgdXNlX3NjcmVlbiA9IDE7IC8qIGRlZmF1bHQgKi8KLQotI2RlZmluZSBUQl9TUEVFRAkyNTAwMDAwMAotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCByZWFkdGIodm9pZCkKK3ZvaWQgeG1vbl9tYXBfc2NjKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IHJldDsKLQotCWFzbSB2b2xhdGlsZSgibWZ0YiAlMCIgOiAiPXIiIChyZXQpIDopOwotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQgYnVmX2FjY2Vzcyh2b2lkKQotewotfQotCi12b2lkCi14bW9uX21hcF9zY2Modm9pZCkKLXsKLQogCWNwbXAgPSAoY3BtOHh4X3QgKikmKCgoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX2NwbSk7Ci0JdXNlX3NjcmVlbiA9IDA7Ci0JCi0JcHJvbV9kcmF3c3RyaW5nKCJ4bW9uIHVzZXMgc2VyaWFsIHBvcnRcbiIpOwogfQogCi1zdGF0aWMgaW50IHNjY19pbml0aWFsaXplZCA9IDA7Ci0KIHZvaWQgeG1vbl9pbml0X3NjYyh2b2lkKTsKIAotaW50Ci14bW9uX3dyaXRlKHZvaWQgKmhhbmRsZSwgdm9pZCAqcHRyLCBpbnQgbmIpCitpbnQgeG1vbl93cml0ZSh2b2lkICpwdHIsIGludCBuYikKIHsKLQljaGFyICpwID0gcHRyOwotCWludCBpLCBjLCBjdDsKLQotCWlmICghc2NjX2luaXRpYWxpemVkKQotCQl4bW9uX2luaXRfc2NjKCk7Ci0KIAlyZXR1cm4oeG1vbl84eHhfd3JpdGUocHRyLCBuYikpOwogfQogCi1pbnQgeG1vbl93YW50c19rZXk7Ci0KLWludAoteG1vbl9yZWFkKHZvaWQgKmhhbmRsZSwgdm9pZCAqcHRyLCBpbnQgbmIpCitpbnQgeG1vbl9yZWFkY2hhcih2b2lkKQogewotCWNoYXIgKnAgPSBwdHI7Ci0JaW50IGk7Ci0KLQlpZiAoIXNjY19pbml0aWFsaXplZCkKLQkJeG1vbl9pbml0X3NjYygpOwotCi0JZm9yIChpID0gMDsgaSA8IG5iOyArK2kpIHsKLQkJKnArKyA9IHhtb25fOHh4X3JlYWRfY2hhcigpOwotCX0KLQlyZXR1cm4gaTsKKwlyZXR1cm4geG1vbl84eHhfcmVhZF9jaGFyKCk7CiB9CiAKLWludAoteG1vbl9yZWFkX3BvbGwodm9pZCkKK2ludCB4bW9uX3JlYWRfcG9sbCh2b2lkKQogewogCXJldHVybih4bW9uXzh4eF9yZWFkX3BvbGwoKSk7CiB9Ci0KLXZvaWQKLXhtb25faW5pdF9zY2MoKQotewotCXNjY19pbml0aWFsaXplZCA9IDE7Ci19Ci0KLSNpZiAwCi1leHRlcm4gaW50ICgqcHJvbV9lbnRyeSkodm9pZCAqKTsKLQotaW50Ci14bW9uX2V4aXQodm9pZCkKLXsKLSAgICBzdHJ1Y3QgcHJvbV9hcmdzIHsKLQljaGFyICpzZXJ2aWNlOwotICAgIH0gYXJnczsKLQotICAgIGZvciAoOzspIHsKLQlhcmdzLnNlcnZpY2UgPSAiZXhpdCI7Ci0JKCpwcm9tX2VudHJ5KSgmYXJncyk7Ci0gICAgfQotfQotI2VuZGlmCi0KLXZvaWQgKnhtb25fc3RkaW47Ci12b2lkICp4bW9uX3N0ZG91dDsKLXZvaWQgKnhtb25fc3RkZXJyOwotCi12b2lkCi14bW9uX2luaXQodm9pZCkKLXsKLX0KLQotaW50Ci14bW9uX3B1dGMoaW50IGMsIHZvaWQgKmYpCi17Ci0gICAgY2hhciBjaCA9IGM7Ci0KLSAgICBpZiAoYyA9PSAnXG4nKQotCXhtb25fcHV0YygnXHInLCBmKTsKLSAgICByZXR1cm4geG1vbl93cml0ZShmLCAmY2gsIDEpID09IDE/IGM6IC0xOwotfQotCi1pbnQKLXhtb25fcHV0Y2hhcihpbnQgYykKLXsKLSAgICByZXR1cm4geG1vbl9wdXRjKGMsIHhtb25fc3Rkb3V0KTsKLX0KLQotaW50Ci14bW9uX2ZwdXRzKGNoYXIgKnN0ciwgdm9pZCAqZikKLXsKLSAgICBpbnQgbiA9IHN0cmxlbihzdHIpOwotCi0gICAgcmV0dXJuIHhtb25fd3JpdGUoZiwgc3RyLCBuKSA9PSBuPyAwOiAtMTsKLX0KLQotaW50Ci14bW9uX3JlYWRjaGFyKHZvaWQpCi17Ci0gICAgY2hhciBjaDsKLQotICAgIGZvciAoOzspIHsKLQlzd2l0Y2ggKHhtb25fcmVhZCh4bW9uX3N0ZGluLCAmY2gsIDEpKSB7Ci0JY2FzZSAxOgotCSAgICByZXR1cm4gY2g7Ci0JY2FzZSAtMToKLQkgICAgeG1vbl9wcmludGYoInJlYWQoc3RkaW4pIHJldHVybmVkIC0xXHJcbiIsIDAsIDApOwotCSAgICByZXR1cm4gLTE7Ci0JfQotICAgIH0KLX0KLQotc3RhdGljIGNoYXIgbGluZVsyNTZdOwotc3RhdGljIGNoYXIgKmxpbmVwdHI7Ci1zdGF0aWMgaW50IGxpbmVsZWZ0OwotCi0jaWYgMAotaW50IHhtb25fZXhwZWN0KGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IHRpbWVvdXQpCi17Ci0JaW50IGM7Ci0JdW5zaWduZWQgaW50IHQwOwotCi0JdGltZW91dCAqPSBUQl9TUEVFRDsKLQl0MCA9IHJlYWR0YigpOwotCWRvIHsKLQkJbGluZXB0ciA9IGxpbmU7Ci0JCWZvciAoOzspIHsKLQkJCWMgPSB4bW9uX3JlYWRfcG9sbCgpOwotCQkJaWYgKGMgPT0gLTEpIHsKLQkJCQlpZiAocmVhZHRiKCkgLSB0MCA+IHRpbWVvdXQpCi0JCQkJCXJldHVybiAwOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKGMgPT0gJ1xuJykKLQkJCQlicmVhazsKLQkJCWlmIChjICE9ICdccicgJiYgbGluZXB0ciA8ICZsaW5lW3NpemVvZihsaW5lKSAtIDFdKQotCQkJCSpsaW5lcHRyKysgPSBjOwotCQl9Ci0JCSpsaW5lcHRyID0gMDsKLQl9IHdoaWxlIChzdHJzdHIobGluZSwgc3RyKSA9PSBOVUxMKTsKLQlyZXR1cm4gMTsKLX0KLSNlbmRpZgotCi1pbnQKLXhtb25fZ2V0Y2hhcih2b2lkKQotewotICAgIGludCBjOwotCi0gICAgaWYgKGxpbmVsZWZ0ID09IDApIHsKLQlsaW5lcHRyID0gbGluZTsKLQlmb3IgKDs7KSB7Ci0JICAgIGMgPSB4bW9uX3JlYWRjaGFyKCk7Ci0JICAgIGlmIChjID09IC0xIHx8IGMgPT0gNCkKLQkJYnJlYWs7Ci0JICAgIGlmIChjID09ICdccicgfHwgYyA9PSAnXG4nKSB7Ci0JCSpsaW5lcHRyKysgPSAnXG4nOwotCQl4bW9uX3B1dGNoYXIoJ1xuJyk7Ci0JCWJyZWFrOwotCSAgICB9Ci0JICAgIHN3aXRjaCAoYykgewotCSAgICBjYXNlIDAxNzc6Ci0JICAgIGNhc2UgJ1xiJzoKLQkJaWYgKGxpbmVwdHIgPiBsaW5lKSB7Ci0JCSAgICB4bW9uX3B1dGNoYXIoJ1xiJyk7Ci0JCSAgICB4bW9uX3B1dGNoYXIoJyAnKTsKLQkJICAgIHhtb25fcHV0Y2hhcignXGInKTsKLQkJICAgIC0tbGluZXB0cjsKLQkJfQotCQlicmVhazsKLQkgICAgY2FzZSAnVScgJiAweDFGOgotCQl3aGlsZSAobGluZXB0ciA+IGxpbmUpIHsKLQkJICAgIHhtb25fcHV0Y2hhcignXGInKTsKLQkJICAgIHhtb25fcHV0Y2hhcignICcpOwotCQkgICAgeG1vbl9wdXRjaGFyKCdcYicpOwotCQkgICAgLS1saW5lcHRyOwotCQl9Ci0JCWJyZWFrOwotCSAgICBkZWZhdWx0OgotCQlpZiAobGluZXB0ciA+PSAmbGluZVtzaXplb2YobGluZSkgLSAxXSkKLQkJICAgIHhtb25fcHV0Y2hhcignXGEnKTsKLQkJZWxzZSB7Ci0JCSAgICB4bW9uX3B1dGNoYXIoYyk7Ci0JCSAgICAqbGluZXB0cisrID0gYzsKLQkJfQotCSAgICB9Ci0JfQotCWxpbmVsZWZ0ID0gbGluZXB0ciAtIGxpbmU7Ci0JbGluZXB0ciA9IGxpbmU7Ci0gICAgfQotICAgIGlmIChsaW5lbGVmdCA9PSAwKQotCXJldHVybiAtMTsKLSAgICAtLWxpbmVsZWZ0OwotICAgIHJldHVybiAqbGluZXB0cisrOwotfQotCi1jaGFyICoKLXhtb25fZmdldHMoY2hhciAqc3RyLCBpbnQgbmIsIHZvaWQgKmYpCi17Ci0gICAgY2hhciAqcDsKLSAgICBpbnQgYzsKLQotICAgIGZvciAocCA9IHN0cjsgcCA8IHN0ciArIG5iIC0gMTsgKSB7Ci0JYyA9IHhtb25fZ2V0Y2hhcigpOwotCWlmIChjID09IC0xKSB7Ci0JICAgIGlmIChwID09IHN0cikKLQkJcmV0dXJuIDA7Ci0JICAgIGJyZWFrOwotCX0KLQkqcCsrID0gYzsKLQlpZiAoYyA9PSAnXG4nKQotCSAgICBicmVhazsKLSAgICB9Ci0gICAgKnAgPSAwOwotICAgIHJldHVybiBzdHI7Ci19Ci0KLXZvaWQKLXByb21fZHJhd2hleCh1aW50IHZhbCkKLXsKLQl1bnNpZ25lZCBjaGFyIGJ1ZlsxMF07Ci0KLQlpbnQgaTsKLQlmb3IgKGkgPSA3OyAgaSA+PSAwOyAgaS0tKQotCXsKLQkJYnVmW2ldID0gIjAxMjM0NTY3ODlhYmNkZWYiW3ZhbCAmIDB4MGZdOwotCQl2YWwgPj49IDQ7Ci0JfQotCWJ1Zls4XSA9ICdcMCc7Ci0JeG1vbl9mcHV0cyhidWYsIHhtb25fc3Rkb3V0KTsKLX0KLQotdm9pZAotcHJvbV9kcmF3c3RyaW5nKGNvbnN0IGNoYXIgKnN0cikKLXsKLQl4bW9uX2ZwdXRzKHN0ciwgeG1vbl9zdGRvdXQpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3htb24vc3Vicl9wcmYuYyBiL2FyY2gvcG93ZXJwYy94bW9uL3N1YnJfcHJmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0ODczOGMuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL3htb24vc3Vicl9wcmYuYworKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBXcml0dGVuIGJ5IENvcnQgRG91Z2FuIHRvIHJlcGxhY2UgdGhlIHZlcnNpb24gb3JpZ2luYWxseSB1c2VkCi0gKiBieSBQYXVsIE1hY2tlcnJhcywgd2hpY2ggY2FtZSBmcm9tIE5ldEJTRCBhbmQgdGh1cyBoYWQgY29weXJpZ2h0Ci0gKiBjb25mbGljdHMgd2l0aCBMaW51eC4KLSAqCi0gKiBUaGlzIGZpbGUgbWFrZXMgbGliZXJhbCB1c2Ugb2YgdGhlIHN0YW5kYXJkIGxpbnV4IHV0aWxpdHkKLSAqIHJvdXRpbmVzIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgYmluYXJ5LiAgV2UgYXNzdW1lIHdlIGNhbgotICogdHJ1c3Qgc29tZSBwYXJ0cyBvZiBMaW51eCBpbnNpZGUgdGhlIGRlYnVnZ2VyLgotICogICAtLSBDb3J0IChjb3J0QGNzLm5tdC5lZHUpCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IENvcnQgRG91Z2FuLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSAibm9uc3RkaW8uaCIKLQotZXh0ZXJuIGludCB4bW9uX3dyaXRlKHZvaWQgKiwgdm9pZCAqLCBpbnQpOwotCi12b2lkIHhtb25fdmZwcmludGYodm9pZCAqZiwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQotewotCXN0YXRpYyBjaGFyIHhtb25fYnVmWzIwNDhdOwotCWludCBuOwotCi0JbiA9IHZzcHJpbnRmKHhtb25fYnVmLCBmbXQsIGFwKTsKLQl4bW9uX3dyaXRlKGYsIHhtb25fYnVmLCBuKTsKLX0KLQotdm9pZCB4bW9uX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQl2YV9saXN0IGFwOwotCi0JdmFfc3RhcnQoYXAsIGZtdCk7Ci0JeG1vbl92ZnByaW50ZihzdGRvdXQsIGZtdCwgYXApOwotCXZhX2VuZChhcCk7Ci19Ci1FWFBPUlRfU1lNQk9MKHhtb25fcHJpbnRmKTsKLQotdm9pZCB4bW9uX2ZwcmludGYodm9pZCAqZiwgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JdmFfbGlzdCBhcDsKLQotCXZhX3N0YXJ0KGFwLCBmbXQpOwotCXhtb25fdmZwcmludGYoZiwgZm10LCBhcCk7Ci0JdmFfZW5kKGFwKTsKLX0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jIGIvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCmluZGV4IDExMjRmMTEuLmVmNDM1NmIyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFJvdXRpbmVzIHByb3ZpZGluZyBhIHNpbXBsZSBtb25pdG9yIGZvciB1c2Ugb24gdGhlIFBvd2VyTWFjLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiBQYXVsIE1hY2tlcnJhcy4KKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDA1IFBhdWwgTWFja2VycmFzLgogICoKICAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+CiAKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3N0cmluZy5oPgpAQCAtMTQ0LDE1ICsxNDUsMTAgQEAKIHN0YXRpYyBjb25zdCBjaGFyICpnZXR2ZWNuYW1lKHVuc2lnbmVkIGxvbmcgdmVjKTsKIAogZXh0ZXJuIGludCBwcmludF9pbnNuX3Bvd2VycGModW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KTsKLWV4dGVybiB2b2lkIHByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLik7Ci1leHRlcm4gdm9pZCB4bW9uX3ZmcHJpbnRmKHZvaWQgKmYsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCk7Ci1leHRlcm4gaW50IHhtb25fcHV0YyhpbnQgYywgdm9pZCAqZik7Ci1leHRlcm4gaW50IHB1dGNoYXIoaW50IGNoKTsKIAogZXh0ZXJuIHZvaWQgeG1vbl9lbnRlcih2b2lkKTsKIGV4dGVybiB2b2lkIHhtb25fbGVhdmUodm9pZCk7CiAKLWV4dGVybiBpbnQgeG1vbl9yZWFkX3BvbGwodm9pZCk7CiBleHRlcm4gbG9uZyBzZXRqbXAobG9uZyAqKTsKIGV4dGVybiB2b2lkIGxvbmdqbXAobG9uZyAqLCBsb25nKTsKIGV4dGVybiB2b2lkIHhtb25fc2F2ZV9yZWdzKHN0cnVjdCBwdF9yZWdzICopOwpAQCAtNzQ4LDcgKzc0NCw2IEBACiAJCXByaW50ZigiJXg6Iiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAJCXByaW50ZigibW9uPiAiKTsKLQkJZmZsdXNoKHN0ZG91dCk7CiAJCWZsdXNoX2lucHV0KCk7CiAJCXRlcm1jaCA9IDA7CiAJCWNtZCA9IHNraXBibCgpOwpAQCAtMTQ3MiwxNyArMTQ2NywyMyBAQAogewogCXVuc2lnbmVkIGludCBpbnN0cnNbMl07CiAJdW5zaWduZWQgbG9uZyAoKmNvZGUpKHZvaWQpOwotCXVuc2lnbmVkIGxvbmcgb3BkWzNdOwogCXVuc2lnbmVkIGxvbmcgcmV0ID0gLTFVTDsKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwl1bnNpZ25lZCBsb25nIG9wZFszXTsKIAotCWluc3Ryc1swXSA9IDB4N2M2MDAyYTYgKyAoKG4gJiAweDFGKSA8PCAxNikgKyAoKG4gJiAweDNlMCkgPDwgNik7Ci0JaW5zdHJzWzFdID0gMHg0ZTgwMDAyMDsKIAlvcGRbMF0gPSAodW5zaWduZWQgbG9uZylpbnN0cnM7CiAJb3BkWzFdID0gMDsKIAlvcGRbMl0gPSAwOworCWNvZGUgPSAodW5zaWduZWQgbG9uZyAoKikodm9pZCkpIG9wZDsKKyNlbHNlCisJY29kZSA9ICh1bnNpZ25lZCBsb25nICgqKSh2b2lkKSkgaW5zdHJzOworI2VuZGlmCisKKwkvKiBtZnNwciByMyxuOyBibHIgKi8KKwlpbnN0cnNbMF0gPSAweDdjNjAwMmE2ICsgKChuICYgMHgxRikgPDwgMTYpICsgKChuICYgMHgzZTApIDw8IDYpOworCWluc3Ryc1sxXSA9IDB4NGU4MDAwMjA7CiAJc3RvcmVfaW5zdChpbnN0cnMpOwogCXN0b3JlX2luc3QoaW5zdHJzKzEpOwotCWNvZGUgPSAodW5zaWduZWQgbG9uZyAoKikodm9pZCkpIG9wZDsKIAogCWlmIChzZXRqbXAoYnVzX2Vycm9yX2ptcCkgPT0gMCkgewogCQljYXRjaF9tZW1vcnlfZXJyb3JzID0gMTsKQEAgLTE1MDQsMTYgKzE1MDUsMjEgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaW5zdHJzWzJdOwogCXVuc2lnbmVkIGxvbmcgKCpjb2RlKSh1bnNpZ25lZCBsb25nKTsKKyNpZmRlZiBDT05GSUdfUFBDNjQKIAl1bnNpZ25lZCBsb25nIG9wZFszXTsKIAotCWluc3Ryc1swXSA9IDB4N2M2MDAzYTYgKyAoKG4gJiAweDFGKSA8PCAxNikgKyAoKG4gJiAweDNlMCkgPDwgNik7Ci0JaW5zdHJzWzFdID0gMHg0ZTgwMDAyMDsKIAlvcGRbMF0gPSAodW5zaWduZWQgbG9uZylpbnN0cnM7CiAJb3BkWzFdID0gMDsKIAlvcGRbMl0gPSAwOworCWNvZGUgPSAodW5zaWduZWQgbG9uZyAoKikodW5zaWduZWQgbG9uZykpIG9wZDsKKyNlbHNlCisJY29kZSA9ICh1bnNpZ25lZCBsb25nICgqKSh1bnNpZ25lZCBsb25nKSkgaW5zdHJzOworI2VuZGlmCisKKwlpbnN0cnNbMF0gPSAweDdjNjAwM2E2ICsgKChuICYgMHgxRikgPDwgMTYpICsgKChuICYgMHgzZTApIDw8IDYpOworCWluc3Ryc1sxXSA9IDB4NGU4MDAwMjA7CiAJc3RvcmVfaW5zdChpbnN0cnMpOwogCXN0b3JlX2luc3QoaW5zdHJzKzEpOwotCWNvZGUgPSAodW5zaWduZWQgbG9uZyAoKikodW5zaWduZWQgbG9uZykpIG9wZDsKIAogCWlmIChzZXRqbXAoYnVzX2Vycm9yX2ptcCkgPT0gMCkgewogCQljYXRjaF9tZW1vcnlfZXJyb3JzID0gMTsKQEAgLTE3OTcsNyArMTgwMyw3IEBACiAJZm9yKDs7KXsKIAkJaWYgKCFtbm9yZWFkKQogCQkJbiA9IG1yZWFkKGFkcnMsIHZhbCwgc2l6ZSk7Ci0JCXByaW50ZigiJS4xNnglYyIsIGFkcnMsIGJyZXY/ICdyJzogJyAnKTsKKwkJcHJpbnRmKFJFRyIlYyIsIGFkcnMsIGJyZXY/ICdyJzogJyAnKTsKIAkJaWYgKCFtbm9yZWFkKSB7CiAJCQlpZiAoYnJldikKIAkJCQlieXRlcmV2KHZhbCwgc2l6ZSk7CkBAIC0xOTc2LDE3ICsxOTgyLDE4IEBACiAJCW5yID0gbXJlYWQoYWRycywgdGVtcCwgcik7CiAJCWFkcnMgKz0gbnI7CiAJCWZvciAobSA9IDA7IG0gPCByOyArK20pIHsKLQkJICAgICAgICBpZiAoKG0gJiA3KSA9PSAwICYmIG0gPiAwKQotCQkJICAgIHB1dGNoYXIoJyAnKTsKKwkJICAgICAgICBpZiAoKG0gJiAoc2l6ZW9mKGxvbmcpIC0gMSkpID09IDAgJiYgbSA+IDApCisJCQkJcHV0Y2hhcignICcpOwogCQkJaWYgKG0gPCBucikKIAkJCQlwcmludGYoIiUuMngiLCB0ZW1wW21dKTsKIAkJCWVsc2UKIAkJCQlwcmludGYoIiVzIiwgZmF1bHRfY2hhcnNbZmF1bHRfdHlwZV0pOwogCQl9Ci0JCWlmIChtIDw9IDgpCi0JCQlwcmludGYoIiAiKTsKLQkJZm9yICg7IG0gPCAxNjsgKyttKQorCQlmb3IgKDsgbSA8IDE2OyArK20pIHsKKwkJICAgICAgICBpZiAoKG0gJiAoc2l6ZW9mKGxvbmcpIC0gMSkpID09IDApCisJCQkJcHV0Y2hhcignICcpOwogCQkJcHJpbnRmKCIgICIpOworCQl9CiAJCXByaW50ZigiICB8Iik7CiAJCWZvciAobSA9IDA7IG0gPCByOyArK20pIHsKIAkJCWlmIChtIDwgbnIpIHsKQEAgLTIxNTEsNyArMjE1OCw2IEBACiAJCW9rID0gbXJlYWQoYSwgJnYsIDEpOwogCQlpZiAob2sgJiYgIW9vaykgewogCQkJcHJpbnRmKCIlLjh4IC4uICIsIGEpOwotCQkJZmZsdXNoKHN0ZG91dCk7CiAJCX0gZWxzZSBpZiAoIW9rICYmIG9vaykKIAkJCXByaW50ZigiJS44eFxuIiwgYSAtIG1za2lwKTsKIAkJb29rID0gb2s7CkBAIC0yMzcyLDcgKzIzNzgsNyBAQAogaW5jaGFyKHZvaWQpCiB7CiAJaWYgKGxpbmVwdHIgPT0gTlVMTCB8fCAqbGluZXB0ciA9PSAwKSB7Ci0JCWlmIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIHN0ZGluKSA9PSBOVUxMKSB7CisJCWlmICh4bW9uX2dldHMobGluZSwgc2l6ZW9mKGxpbmUpKSA9PSBOVUxMKSB7CiAJCQlsaW5lcHRyID0gTlVMTDsKIAkJCXJldHVybiBFT0Y7CiAJCX0KQEAgLTI1MjYsNCArMjUzMiwyOSBAQAogCQlfX2RlYnVnZ2VyX2RhYnJfbWF0Y2ggPSBOVUxMOwogCQlfX2RlYnVnZ2VyX2ZhdWx0X2hhbmRsZXIgPSBOVUxMOwogCX0KKwl4bW9uX21hcF9zY2MoKTsKIH0KKworI2lmZGVmIENPTkZJR19NQUdJQ19TWVNSUQorc3RhdGljIHZvaWQgc3lzcnFfaGFuZGxlX3htb24oaW50IGtleSwgc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MsCisJCQkgICAgICBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KSAKK3sKKwkvKiBlbnN1cmUgeG1vbiBpcyBlbmFibGVkICovCisJeG1vbl9pbml0KDEpOworCWRlYnVnZ2VyKHB0X3JlZ3MpOworfQorCitzdGF0aWMgc3RydWN0IHN5c3JxX2tleV9vcCBzeXNycV94bW9uX29wID0gCit7CisJLmhhbmRsZXIgPQlzeXNycV9oYW5kbGVfeG1vbiwKKwkuaGVscF9tc2cgPQkiWG1vbiIsCisJLmFjdGlvbl9tc2cgPQkiRW50ZXJpbmcgeG1vbiIsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzZXR1cF94bW9uX3N5c3JxKHZvaWQpCit7CisJcmVnaXN0ZXJfc3lzcnFfa2V5KCd4JywgJnN5c3JxX3htb25fb3ApOworCXJldHVybiAwOworfQorX19pbml0Y2FsbChzZXR1cF94bW9uX3N5c3JxKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFHSUNfU1lTUlEgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3QvaW5jbHVkZS9vZjEyNzUuaCBiL2FyY2gvcHBjL2Jvb3QvaW5jbHVkZS9vZjEyNzUuaAppbmRleCA2OTE3M2RmLi40ZWQ4OGFjIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L2luY2x1ZGUvb2YxMjc1LmgKKysrIGIvYXJjaC9wcGMvYm9vdC9pbmNsdWRlL29mMTI3NS5oCkBAIC0xOSw2ICsxOSw5IEBACiAKIC8qIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAqLwogCitpbnQJY2FsbF9wcm9tKGNvbnN0IGNoYXIgKnNlcnZpY2UsIGludCBuYXJncywgaW50IG5yZXQsIC4uLik7CitpbnQJY2FsbF9wcm9tX3JldChjb25zdCBjaGFyICpzZXJ2aWNlLCBpbnQgbmFyZ3MsIGludCBucmV0LAorCQkgICAgICB1bnNpZ25lZCBpbnQgKnJldHMsIC4uLik7CiB2b2lkICoJY2xhaW0odW5zaWduZWQgaW50IHZpcnQsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgYWxpZ24pOwogaW50CW1hcCh1bnNpZ25lZCBpbnQgcGh5cywgdW5zaWduZWQgaW50IHZpcnQsIHVuc2lnbmVkIGludCBzaXplKTsKIHZvaWQJZW50ZXIodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L29mMTI3NS9NYWtlZmlsZSBiL2FyY2gvcHBjL2Jvb3Qvb2YxMjc1L01ha2VmaWxlCmluZGV4IDAyZTZmMjMuLjBiOTc5YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3Qvb2YxMjc1L01ha2VmaWxlCisrKyBiL2FyY2gvcHBjL2Jvb3Qvb2YxMjc1L01ha2VmaWxlCkBAIC0zLDQgKzMsNCBAQAogIwogCiBsaWIteSA6PSBjbGFpbS5vIGVudGVyLm8gZXhpdC5vIGZpbmRkZXZpY2UubyBnZXRwcm9wLm8gb2Zpbml0Lm8JXAotCSBvZnN0ZGlvLm8gcmVhZC5vIHJlbGVhc2UubyB3cml0ZS5vIG1hcC5vCisJIG9mc3RkaW8ubyByZWFkLm8gcmVsZWFzZS5vIHdyaXRlLm8gbWFwLm8gY2FsbF9wcm9tLm8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3Qvb2YxMjc1L2NhbGxfcHJvbS5jIGIvYXJjaC9wcGMvYm9vdC9vZjEyNzUvY2FsbF9wcm9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ3OWEzYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcHBjL2Jvb3Qvb2YxMjc1L2NhbGxfcHJvbS5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNSBQYXVsIE1hY2tlcnJhcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlICJvZjEyNzUuaCIKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworaW50IGNhbGxfcHJvbShjb25zdCBjaGFyICpzZXJ2aWNlLCBpbnQgbmFyZ3MsIGludCBucmV0LCAuLi4pCit7CisJaW50IGk7CisJc3RydWN0IHByb21fYXJncyB7CisJCWNvbnN0IGNoYXIgKnNlcnZpY2U7CisJCWludCBuYXJnczsKKwkJaW50IG5yZXQ7CisJCXVuc2lnbmVkIGludCBhcmdzWzEyXTsKKwl9IGFyZ3M7CisJdmFfbGlzdCBsaXN0OworCisJYXJncy5zZXJ2aWNlID0gc2VydmljZTsKKwlhcmdzLm5hcmdzID0gbmFyZ3M7CisJYXJncy5ucmV0ID0gbnJldDsKKworCXZhX3N0YXJ0KGxpc3QsIG5yZXQpOworCWZvciAoaSA9IDA7IGkgPCBuYXJnczsgaSsrKQorCQlhcmdzLmFyZ3NbaV0gPSB2YV9hcmcobGlzdCwgdW5zaWduZWQgaW50KTsKKwl2YV9lbmQobGlzdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJldDsgaSsrKQorCQlhcmdzLmFyZ3NbbmFyZ3MraV0gPSAwOworCisJaWYgKG9mX3Byb21fZW50cnkoJmFyZ3MpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIChucmV0ID4gMCk/IGFyZ3MuYXJnc1tuYXJnc106IDA7Cit9CisKK2ludCBjYWxsX3Byb21fcmV0KGNvbnN0IGNoYXIgKnNlcnZpY2UsIGludCBuYXJncywgaW50IG5yZXQsCisJCSAgdW5zaWduZWQgaW50ICpyZXRzLCAuLi4pCit7CisJaW50IGk7CisJc3RydWN0IHByb21fYXJncyB7CisJCWNvbnN0IGNoYXIgKnNlcnZpY2U7CisJCWludCBuYXJnczsKKwkJaW50IG5yZXQ7CisJCXVuc2lnbmVkIGludCBhcmdzWzEyXTsKKwl9IGFyZ3M7CisJdmFfbGlzdCBsaXN0OworCisJYXJncy5zZXJ2aWNlID0gc2VydmljZTsKKwlhcmdzLm5hcmdzID0gbmFyZ3M7CisJYXJncy5ucmV0ID0gbnJldDsKKworCXZhX3N0YXJ0KGxpc3QsIHJldHMpOworCWZvciAoaSA9IDA7IGkgPCBuYXJnczsgaSsrKQorCQlhcmdzLmFyZ3NbaV0gPSB2YV9hcmcobGlzdCwgdW5zaWduZWQgaW50KTsKKwl2YV9lbmQobGlzdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJldDsgaSsrKQorCQlhcmdzLmFyZ3NbbmFyZ3MraV0gPSAwOworCisJaWYgKG9mX3Byb21fZW50cnkoJmFyZ3MpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHJldHMgIT0gKHZvaWQgKikgMCkKKwkJZm9yIChpID0gMTsgaSA8IG5yZXQ7ICsraSkKKwkJCXJldHNbaS0xXSA9IGFyZ3MuYXJnc1tuYXJncytpXTsKKworCXJldHVybiAobnJldCA+IDApPyBhcmdzLmFyZ3NbbmFyZ3NdOiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9vZjEyNzUvY2xhaW0uYyBiL2FyY2gvcHBjL2Jvb3Qvb2YxMjc1L2NsYWltLmMKaW5kZXggMTMxNjlhNS4uMWVkM2FlZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9vZjEyNzUvY2xhaW0uYworKysgYi9hcmNoL3BwYy9ib290L29mMTI3NS9jbGFpbS5jCkBAIC05LDI3ICs5LDg0IEBACiAgKi8KIAogI2luY2x1ZGUgIm9mMTI3NS5oIgorI2luY2x1ZGUgIm5vbnN0ZGlvLmgiCiAKLXZvaWQgKgotY2xhaW0odW5zaWduZWQgaW50IHZpcnQsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgYWxpZ24pCisvKgorICogT2xkZXIgT0YncyByZXF1aXJlIHRoYXQgd2hlbiBjbGFpbWluZyBhIHNwZWNpZmljIHJhbmdlIG9mIGFkZHJlc3NlcywKKyAqIHdlIGNsYWltIHRoZSBwaHlzaWNhbCBzcGFjZSBpbiB0aGUgL21lbW9yeSBub2RlIGFuZCB0aGUgdmlydHVhbAorICogc3BhY2UgaW4gdGhlIGNob3NlbiBtbXUgbm9kZSwgYW5kIHRoZW4gZG8gYSBtYXAgb3BlcmF0aW9uIHRvCisgKiBtYXAgdmlydHVhbCB0byBwaHlzaWNhbC4KKyAqLworc3RhdGljIGludCBuZWVkX21hcCA9IC0xOworc3RhdGljIGloYW5kbGUgY2hvc2VuX21tdTsKK3N0YXRpYyBwaGFuZGxlIG1lbW9yeTsKKworLyogcmV0dXJucyB0cnVlIGlmIHMyIGlzIGEgcHJlZml4IG9mIHMxICovCitzdGF0aWMgaW50IHN0cmluZ19tYXRjaChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpCiB7Ci0gICAgc3RydWN0IHByb21fYXJncyB7Ci0JY2hhciAqc2VydmljZTsKLQlpbnQgbmFyZ3M7Ci0JaW50IG5yZXQ7Ci0JdW5zaWduZWQgaW50IHZpcnQ7Ci0JdW5zaWduZWQgaW50IHNpemU7Ci0JdW5zaWduZWQgaW50IGFsaWduOwotCXZvaWQgKnJldDsKLSAgICB9IGFyZ3M7CisJZm9yICg7ICpzMjsgKytzMikKKwkJaWYgKCpzMSsrICE9ICpzMikKKwkJCXJldHVybiAwOworCXJldHVybiAxOworfQogCi0gICAgYXJncy5zZXJ2aWNlID0gImNsYWltIjsKLSAgICBhcmdzLm5hcmdzID0gMzsKLSAgICBhcmdzLm5yZXQgPSAxOwotICAgIGFyZ3MudmlydCA9IHZpcnQ7Ci0gICAgYXJncy5zaXplID0gc2l6ZTsKLSAgICBhcmdzLmFsaWduID0gYWxpZ247Ci0gICAgYXJncy5yZXQgPSAodm9pZCAqKSAwOwotICAgICgqb2ZfcHJvbV9lbnRyeSkoJmFyZ3MpOwotICAgIHJldHVybiBhcmdzLnJldDsKK3N0YXRpYyBpbnQgY2hlY2tfb2ZfdmVyc2lvbih2b2lkKQoreworCXBoYW5kbGUgb3Byb20sIGNob3NlbjsKKwljaGFyIHZlcnNpb25bNjRdOworCisJb3Byb20gPSBmaW5kZGV2aWNlKCIvb3BlbnByb20iKTsKKwlpZiAob3Byb20gPT0gT0ZfSU5WQUxJRF9IQU5ETEUpCisJCXJldHVybiAwOworCWlmIChnZXRwcm9wKG9wcm9tLCAibW9kZWwiLCB2ZXJzaW9uLCBzaXplb2YodmVyc2lvbikpIDw9IDApCisJCXJldHVybiAwOworCXZlcnNpb25bc2l6ZW9mKHZlcnNpb24pLTFdID0gMDsKKwlwcmludGYoIk9GIHZlcnNpb24gPSAnJXMnXG4iLCB2ZXJzaW9uKTsKKwlpZiAoIXN0cmluZ19tYXRjaCh2ZXJzaW9uLCAiT3BlbiBGaXJtd2FyZSwgMS4iKQorCSAgICAmJiAhc3RyaW5nX21hdGNoKHZlcnNpb24sICJGaXJtV29ya3MsMy4iKSkKKwkJcmV0dXJuIDA7CisJY2hvc2VuID0gZmluZGRldmljZSgiL2Nob3NlbiIpOworCWlmIChjaG9zZW4gPT0gT0ZfSU5WQUxJRF9IQU5ETEUpIHsKKwkJY2hvc2VuID0gZmluZGRldmljZSgiL2Nob3NlbkAwIik7CisJCWlmIChjaG9zZW4gPT0gT0ZfSU5WQUxJRF9IQU5ETEUpIHsKKwkJCXByaW50Zigibm8gY2hvc2VuXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCWlmIChnZXRwcm9wKGNob3NlbiwgIm1tdSIsICZjaG9zZW5fbW11LCBzaXplb2YoY2hvc2VuX21tdSkpIDw9IDApIHsKKwkJcHJpbnRmKCJubyBtbXVcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJbWVtb3J5ID0gKGloYW5kbGUpIGNhbGxfcHJvbSgib3BlbiIsIDEsIDEsICIvbWVtb3J5Iik7CisJaWYgKG1lbW9yeSA9PSBPRl9JTlZBTElEX0hBTkRMRSkgeworCQltZW1vcnkgPSAoaWhhbmRsZSkgY2FsbF9wcm9tKCJvcGVuIiwgMSwgMSwgIi9tZW1vcnlAMCIpOworCQlpZiAobWVtb3J5ID09IE9GX0lOVkFMSURfSEFORExFKSB7CisJCQlwcmludGYoIm5vIG1lbW9yeSBub2RlXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXByaW50Zigib2xkIE9GIGRldGVjdGVkXG4iKTsKKwlyZXR1cm4gMTsKK30KKwordm9pZCAqY2xhaW0odW5zaWduZWQgaW50IHZpcnQsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgYWxpZ24pCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgcmVzdWx0OworCisJaWYgKG5lZWRfbWFwIDwgMCkKKwkJbmVlZF9tYXAgPSBjaGVja19vZl92ZXJzaW9uKCk7CisJaWYgKGFsaWduIHx8ICFuZWVkX21hcCkKKwkJcmV0dXJuICh2b2lkICopIGNhbGxfcHJvbSgiY2xhaW0iLCAzLCAxLCB2aXJ0LCBzaXplLCBhbGlnbik7CisJCisJcmV0ID0gY2FsbF9wcm9tX3JldCgiY2FsbC1tZXRob2QiLCA1LCAyLCAmcmVzdWx0LCAiY2xhaW0iLCBtZW1vcnksCisJCQkgICAgYWxpZ24sIHNpemUsIHZpcnQpOworCWlmIChyZXQgIT0gMCB8fCByZXN1bHQgPT0gLTEpCisJCXJldHVybiAodm9pZCAqKSAtMTsKKwlyZXQgPSBjYWxsX3Byb21fcmV0KCJjYWxsLW1ldGhvZCIsIDUsIDIsICZyZXN1bHQsICJjbGFpbSIsIGNob3Nlbl9tbXUsCisJCQkgICAgYWxpZ24sIHNpemUsIHZpcnQpOworCS8qIDB4MTIgPT0gY29oZXJlbnQgKyByZWFkL3dyaXRlICovCisJcmV0ID0gY2FsbF9wcm9tKCJjYWxsLW1ldGhvZCIsIDYsIDEsICJtYXAiLCBjaG9zZW5fbW11LAorCQkJMHgxMiwgc2l6ZSwgdmlydCwgdmlydCk7CisJcmV0dXJuIHZpcnQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L29mMTI3NS9maW5kZGV2aWNlLmMgYi9hcmNoL3BwYy9ib290L29mMTI3NS9maW5kZGV2aWNlLmMKaW5kZXggMmMwZjdjYi4uMGRjYjEyMCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9vZjEyNzUvZmluZGRldmljZS5jCisrKyBiL2FyY2gvcHBjL2Jvb3Qvb2YxMjc1L2ZpbmRkZXZpY2UuYwpAQCAtMTAsMjIgKzEwLDcgQEAKIAogI2luY2x1ZGUgIm9mMTI3NS5oIgogCi1waGFuZGxlCi1maW5kZGV2aWNlKGNvbnN0IGNoYXIgKm5hbWUpCitwaGFuZGxlIGZpbmRkZXZpY2UoY29uc3QgY2hhciAqbmFtZSkKIHsKLSAgICBzdHJ1Y3QgcHJvbV9hcmdzIHsKLQljaGFyICpzZXJ2aWNlOwotCWludCBuYXJnczsKLQlpbnQgbnJldDsKLQljb25zdCBjaGFyICpkZXZzcGVjOwotCXBoYW5kbGUgZGV2aWNlOwotICAgIH0gYXJnczsKLQotICAgIGFyZ3Muc2VydmljZSA9ICJmaW5kZGV2aWNlIjsKLSAgICBhcmdzLm5hcmdzID0gMTsKLSAgICBhcmdzLm5yZXQgPSAxOwotICAgIGFyZ3MuZGV2c3BlYyA9IG5hbWU7Ci0gICAgYXJncy5kZXZpY2UgPSBPRl9JTlZBTElEX0hBTkRMRTsKLSAgICAoKm9mX3Byb21fZW50cnkpKCZhcmdzKTsKLSAgICByZXR1cm4gYXJncy5kZXZpY2U7CisJcmV0dXJuIChwaGFuZGxlKSBjYWxsX3Byb20oImZpbmRkZXZpY2UiLCAxLCAxLCBuYW1lKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3Qvb3BlbmZpcm13YXJlL01ha2VmaWxlIGIvYXJjaC9wcGMvYm9vdC9vcGVuZmlybXdhcmUvTWFrZWZpbGUKaW5kZXggMDM0MTUyMy4uODNhNjQzMyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9vcGVuZmlybXdhcmUvTWFrZWZpbGUKKysrIGIvYXJjaC9wcGMvYm9vdC9vcGVuZmlybXdhcmUvTWFrZWZpbGUKQEAgLTgwLDggKzgwLDcgQEAKIAkkKGNhbGwgaWZfY2hhbmdlZCxta25vdGUpCiAKIAotJChvYmopL2NvZmZjcnQwLm86IEVYVFJBX0FGTEFHUyA6PSAtdHJhZGl0aW9uYWwgLURYQ09GRgotJChvYmopL2NydDAubzogICAgIEVYVFJBX0FGTEFHUyA6PSAtdHJhZGl0aW9uYWwKKyQob2JqKS9jb2ZmY3J0MC5vOiBFWFRSQV9BRkxBR1MgOj0gLURYQ09GRgogdGFyZ2V0cyArPSBjb2ZmY3J0MC5vIGNydDAubwogJChvYmopL2NvZmZjcnQwLm8gJChvYmopL2NydDAubzogJChjb21tb24pL2NydDAuUyBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxhc19vX1MpCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3BwYy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNzZhNTVhNC4uMTdhNGRhNiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTIsNyArMTIsNyBAQAogZXh0cmEtJChDT05GSUdfUE9XRVI0KQkJKz0gaWRsZV9wb3dlcjQubwogZXh0cmEteQkJCQkrPSB2bWxpbnV4LmxkcwogCi1vYmoteQkJCQk6PSBlbnRyeS5vIHRyYXBzLm8gaXJxLm8gaWRsZS5vIHRpbWUubyBtaXNjLm8gXAorb2JqLXkJCQkJOj0gZW50cnkubyB0cmFwcy5vIGlkbGUubyB0aW1lLm8gbWlzYy5vIFwKIAkJCQkJcHJvY2Vzcy5vIGFsaWduLm8gXAogCQkJCQlzZXR1cC5vIFwKIAkJCQkJcHBjX2h0YWIubwpAQCAtMzgsOCArMzgsNyBAQAogIyBUaGVzZSBhcmUgaGVyZSB3aGlsZSB3ZSBkbyB0aGUgYXJjaGl0ZWN0dXJlIG1lcmdlCiAKIGVsc2UKLW9iai15CQkJCTo9IGlycS5vIGlkbGUubyBcCi0JCQkJCWFsaWduLm8KK29iai15CQkJCTo9IGlkbGUubyBhbGlnbi5vCiBvYmotJChDT05GSUdfNnh4KQkJKz0gbDJjci5vIGNwdV9zZXR1cF82eHgubwogb2JqLSQoQ09ORklHX1NPRlRXQVJFX1NVU1BFTkQpCSs9IHN3c3VzcC5vCiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IG1vZHVsZS5vCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcHBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDk2ODI2MWQuLmZlMGU3NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGFzbS92ZHNvX2RhdGFwYWdlLmg+CiAKICNkZWZpbmUgREVGSU5FKHN5bSwgdmFsKSBcCiAJYXNtIHZvbGF0aWxlKCJcbi0+IiAjc3ltICIgJTAgIiAjdmFsIDogOiAiaSIgKHZhbCkpCkBAIC0xNDMsNSArMTQ0LDMyIEBACiAKIAlERUZJTkUoVEFTS19TSVpFLCBUQVNLX1NJWkUpOwogCURFRklORShOVU1fVVNFUl9TRUdNRU5UUywgVEFTS19TSVpFPj4yOCk7CisKKwkvKiBkYXRhcGFnZSBvZmZzZXRzIGZvciB1c2UgYnkgdmRzbyAqLworCURFRklORShDRkdfVEJfT1JJR19TVEFNUCwgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgdGJfb3JpZ19zdGFtcCkpOworCURFRklORShDRkdfVEJfVElDS1NfUEVSX1NFQywgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgdGJfdGlja3NfcGVyX3NlYykpOworCURFRklORShDRkdfVEJfVE9fWFMsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHRiX3RvX3hzKSk7CisJREVGSU5FKENGR19TVEFNUF9YU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCBzdGFtcF94c2VjKSk7CisJREVGSU5FKENGR19UQl9VUERBVEVfQ09VTlQsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHRiX3VwZGF0ZV9jb3VudCkpOworCURFRklORShDRkdfVFpfTUlOVVRFV0VTVCwgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgdHpfbWludXRlc3dlc3QpKTsKKwlERUZJTkUoQ0ZHX1RaX0RTVFRJTUUsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHR6X2RzdHRpbWUpKTsKKwlERUZJTkUoQ0ZHX1NZU0NBTExfTUFQMzIsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHN5c2NhbGxfbWFwXzMyKSk7CisJREVGSU5FKFdUT01fQ0xPQ0tfU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB3dG9tX2Nsb2NrX3NlYykpOworCURFRklORShXVE9NX0NMT0NLX05TRUMsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHd0b21fY2xvY2tfbnNlYykpOworCURFRklORShUVkFMMzJfVFZfU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdGltZXZhbCwgdHZfc2VjKSk7CisJREVGSU5FKFRWQUwzMl9UVl9VU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdGltZXZhbCwgdHZfdXNlYykpOworCURFRklORShUU1BFQzMyX1RWX1NFQywgb2Zmc2V0b2Yoc3RydWN0IHRpbWVzcGVjLCB0dl9zZWMpKTsKKwlERUZJTkUoVFNQRUMzMl9UVl9OU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdGltZXNwZWMsIHR2X25zZWMpKTsKKworCS8qIHRpbWV2YWwvdGltZXpvbmUgb2Zmc2V0cyBmb3IgdXNlIGJ5IHZkc28gKi8KKwlERUZJTkUoVFpPTkVfVFpfTUlOV0VTVCwgb2Zmc2V0b2Yoc3RydWN0IHRpbWV6b25lLCB0el9taW51dGVzd2VzdCkpOworCURFRklORShUWk9ORV9UWl9EU1RUSU1FLCBvZmZzZXRvZihzdHJ1Y3QgdGltZXpvbmUsIHR6X2RzdHRpbWUpKTsKKworCS8qIE90aGVyIGJpdHMgdXNlZCBieSB0aGUgdmRzbyAqLworCURFRklORShDTE9DS19SRUFMVElNRSwgQ0xPQ0tfUkVBTFRJTUUpOworCURFRklORShDTE9DS19NT05PVE9OSUMsIENMT0NLX01PTk9UT05JQyk7CisJREVGSU5FKE5TRUNfUEVSX1NFQywgTlNFQ19QRVJfU0VDKTsKKwlERUZJTkUoQ0xPQ0tfUkVBTFRJTUVfUkVTLCBUSUNLX05TRUMpOworCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvaGVhZF9ib29rZS5oIGIvYXJjaC9wcGMva2VybmVsL2hlYWRfYm9va2UuaAppbmRleCBhZWIzNDliLi5mM2QyNzRjIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvaGVhZF9ib29rZS5oCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9oZWFkX2Jvb2tlLmgKQEAgLTM1OCw2ICszNTgsNiBAQAogCU5PUk1BTF9FWENFUFRJT05fUFJPTE9HOwkJCQkJICAgICAgXAogCWJuZQlsb2FkX3VwX2ZwdTsJCS8qIGlmIGZyb20gdXNlciwganVzdCBsb2FkIGl0IHVwICovICAgXAogCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQ7CQkJCSAgICAgIFwKLQlFWENfWEZFUl9FRV9MSVRFKDB4ODAwLCBLZXJuZWxGUCkKKwlFWENfWEZFUl9FRV9MSVRFKDB4ODAwLCBrZXJuZWxfZnBfdW5hdmFpbGFibGVfZXhjZXB0aW9uKQogCiAjZW5kaWYgLyogX19IRUFEX0JPT0tFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL2lycS5jIGIvYXJjaC9wcGMva2VybmVsL2lycS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmIyYjlmLi4wMDAwMDAwCi0tLSBhL2FyY2gvcHBjL2tlcm5lbC9pcnEuYworKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vKgotICogIGFyY2gvcHBjL2tlcm5lbC9pcnEuYwotICoKLSAqICBEZXJpdmVkIGZyb20gYXJjaC9pMzg2L2tlcm5lbC9pcnEuYwotICogICAgQ29weXJpZ2h0IChDKSAxOTkyIExpbnVzIFRvcnZhbGRzCi0gKiAgQWRhcHRlZCBmcm9tIGFyY2gvaTM4NiBieSBHYXJ5IFRob21hcwotICogICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTYgR2FyeSBUaG9tYXMgKGdkdEBsaW51eHBwYy5vcmcpCi0gKiAgVXBkYXRlZCBhbmQgbW9kaWZpZWQgYnkgQ29ydCBEb3VnYW4gPGNvcnRAZnNtbGFicy5jb20+Ci0gKiAgICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMSBDb3J0IERvdWdhbgotICogIEFkYXB0ZWQgZm9yIFBvd2VyIE1hY2ludG9zaCBieSBQYXVsIE1hY2tlcnJhcwotICogICAgQ29weXJpZ2h0IChDKSAxOTk2IFBhdWwgTWFja2VycmFzIChwYXVsdXNAY3MuYW51LmVkdS5hdSkKLSAqICBBbWlnYS9BUFVTIGNoYW5nZXMgYnkgSmVzcGVyIFNrb3YgKGpza292QGN5Z251cy5jby51aykuCi0gKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjb2RlIHVzZWQgYnkgdmFyaW91cyBJUlEgaGFuZGxpbmcgcm91dGluZXM6Ci0gKiBhc2tpbmcgZm9yIGRpZmZlcmVudCBJUlEncyBzaG91bGQgYmUgZG9uZSB0aHJvdWdoIHRoZXNlIHJvdXRpbmVzCi0gKiBpbnN0ZWFkIG9mIGp1c3QgZ3JhYmJpbmcgdGhlbS4gVGh1cyBzZXR1cHMgd2l0aCBkaWZmZXJlbnQgSVJRIG51bWJlcnMKLSAqIHNob3VsZG4ndCByZXN1bHQgaW4gYW55IHdlaXJkIHN1cnByaXNlcywgYW5kIGluc3RhbGxpbmcgbmV3IGhhbmRsZXJzCi0gKiBzaG91bGQgYmUgZWFzaWVyLgotICoKLSAqIFRoZSBNUEM4eHggaGFzIGFuIGludGVycnVwdCBtYXNrIGluIHRoZSBTSVUuICBJZiBhIGJpdCBpcyBzZXQsIHRoZQotICogaW50ZXJydXB0IGlzIF9lbmFibGVkXy4gIEFzIGV4cGVjdGVkLCBJUlEwIGlzIGJpdCAwIGluIHRoZSAzMi1iaXQKLSAqIG1hc2sgcmVnaXN0ZXIgKG9mIHdoaWNoIG9ubHkgMTYgYXJlIGRlZmluZWQpLCBoZW5jZSB0aGUgd2VpcmQgc2hpZnRpbmcKLSAqIGFuZCBjb21wbGVtZW50IG9mIHRoZSBjYWNoZWRfaXJxX21hc2suICBJIHdhbnQgdG8gYmUgYWJsZSB0byBzdHVmZgotICogdGhpcyByaWdodCBpbnRvIHRoZSBTSVUgU01BU0sgcmVnaXN0ZXIuCi0gKiBNYW55IG9mIHRoZSBwcmVwL2NocnAgZnVuY3Rpb25zIGFyZSBjb25kaXRpb25hbCBjb21waWxlZCBvbiBDT05GSUdfOHh4Ci0gKiB0byByZWR1Y2UgY29kZSBzcGFjZSBhbmQgdW5kZWZpbmVkIGZ1bmN0aW9uIHJlZmVyZW5jZXMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1leC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL2NhY2hlLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb20uaD4KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLQotI2RlZmluZSBOUl9NQVNLX1dPUkRTCSgoTlJfSVJRUyArIDMxKSAvIDMyKQotCi1leHRlcm4gYXRvbWljX3QgaXBpX3JlY3Y7Ci1leHRlcm4gYXRvbWljX3QgaXBpX3NlbnQ7Ci0KLSNkZWZpbmUgTUFYQ09VTlQgMTAwMDAwMDAKLQotaW50IHBwY19zcHVyaW91c19pbnRlcnJ1cHRzID0gMDsKLXN0cnVjdCBpcnFhY3Rpb24gKnBwY19pcnFfYWN0aW9uW05SX0lSUVNdOwotdW5zaWduZWQgbG9uZyBwcGNfY2FjaGVkX2lycV9tYXNrW05SX01BU0tfV09SRFNdOwotdW5zaWduZWQgbG9uZyBwcGNfbG9zdF9pbnRlcnJ1cHRzW05SX01BU0tfV09SRFNdOwotYXRvbWljX3QgcHBjX25fbG9zdF9pbnRlcnJ1cHRzOwotCi0jaWZkZWYgQ09ORklHX1RBVV9JTlQKLWV4dGVybiBpbnQgdGF1X2luaXRpYWxpemVkOwotZXh0ZXJuIGludCB0YXVfaW50ZXJydXB0cyhpbnQpOwotI2VuZGlmCi0KLWludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQotewotCWludCBpID0gKihsb2ZmX3QgKikgdiwgajsKLQlzdHJ1Y3QgaXJxYWN0aW9uICogYWN0aW9uOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoaSA9PSAwKSB7Ci0JCXNlcV9wdXRzKHAsICIgICAgICAgICAgICIpOwotCQlmb3IgKGo9MDsgajxOUl9DUFVTOyBqKyspCi0JCQlpZiAoY3B1X29ubGluZShqKSkKLQkJCQlzZXFfcHJpbnRmKHAsICJDUFUlZCAgICAgICAiLCBqKTsKLQkJc2VxX3B1dGMocCwgJ1xuJyk7Ci0JfQotCi0JaWYgKGkgPCBOUl9JUlFTKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7Ci0JCWFjdGlvbiA9IGlycV9kZXNjW2ldLmFjdGlvbjsKLQkJaWYgKCAhYWN0aW9uIHx8ICFhY3Rpb24tPmhhbmRsZXIgKQotCQkJZ290byBza2lwOwotCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwotI2lmZGVmIENPTkZJR19TTVAKLQkJZm9yIChqID0gMDsgaiA8IE5SX0NQVVM7IGorKykKLQkJCWlmIChjcHVfb25saW5lKGopKQotCQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwKLQkJCQkJICAga3N0YXRfY3B1KGopLmlycXNbaV0pOwotI2Vsc2UKLQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0JCWlmIChpcnFfZGVzY1tpXS5oYW5kbGVyKQotCQkJc2VxX3ByaW50ZihwLCAiICVzICIsIGlycV9kZXNjW2ldLmhhbmRsZXItPnR5cGVuYW1lKTsKLQkJZWxzZQotCQkJc2VxX3B1dHMocCwgIiAgTm9uZSAgICAgICIpOwotCQlzZXFfcHJpbnRmKHAsICIlcyIsIChpcnFfZGVzY1tpXS5zdGF0dXMgJiBJUlFfTEVWRUwpID8gIkxldmVsICIgOiAiRWRnZSAgIik7Ci0JCXNlcV9wcmludGYocCwgIiAgICAlcyIsIGFjdGlvbi0+bmFtZSk7Ci0JCWZvciAoYWN0aW9uID0gYWN0aW9uLT5uZXh0OyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkKLQkJCXNlcV9wcmludGYocCwgIiwgJXMiLCBhY3Rpb24tPm5hbWUpOwotCQlzZXFfcHV0YyhwLCAnXG4nKTsKLXNraXA6Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKLQl9IGVsc2UgaWYgKGkgPT0gTlJfSVJRUykgewotI2lmZGVmIENPTkZJR19UQVVfSU5UCi0JCWlmICh0YXVfaW5pdGlhbGl6ZWQpewotCQkJc2VxX3B1dHMocCwgIlRBVTogIik7Ci0JCQlmb3IgKGogPSAwOyBqIDwgTlJfQ1BVUzsgaisrKQotCQkJCWlmIChjcHVfb25saW5lKGopKQotCQkJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIHRhdV9pbnRlcnJ1cHRzKGopKTsKLQkJCXNlcV9wdXRzKHAsICIgIFBvd2VyUEMgICAgICAgICAgICAgVGhlcm1hbCBBc3Npc3QgKGNwdSB0ZW1wKVxuIik7Ci0JCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgIWRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKLQkJLyogc2hvdWxkIHRoaXMgYmUgcGVyIHByb2Nlc3NvciBzZW5kL3JlY2VpdmU/ICovCi0JCXNlcV9wcmludGYocCwgIklQSSAocmVjdi9zZW50KTogJTEwdS8ldVxuIiwKLQkJCQlhdG9taWNfcmVhZCgmaXBpX3JlY3YpLCBhdG9taWNfcmVhZCgmaXBpX3NlbnQpKTsKLSNlbmRpZgotCQlzZXFfcHJpbnRmKHAsICJCQUQ6ICUxMHVcbiIsIHBwY19zcHVyaW91c19pbnRlcnJ1cHRzKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZG9fSVJRKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWludCBpcnEsIGZpcnN0ID0gMTsKLSAgICAgICAgaXJxX2VudGVyKCk7Ci0KLQkvKgotCSAqIEV2ZXJ5IHBsYXRmb3JtIGlzIHJlcXVpcmVkIHRvIGltcGxlbWVudCBwcGNfbWQuZ2V0X2lycS4KLQkgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZWl0aGVyIHJldHVybiBhbiBpcnEgbnVtYmVyIG9yIC0xIHRvCi0JICogaW5kaWNhdGUgdGhlcmUgYXJlIG5vIG1vcmUgcGVuZGluZy4gIEJ1dCB0aGUgZmlyc3QgdGltZQotCSAqIHRocm91Z2ggdGhlIGxvb3AgdGhpcyBtZWFucyB0aGVyZSB3YXNuJ3QgYW5kIElSUSBwZW5kaW5nLgotCSAqIFRoZSB2YWx1ZSAtMiBpcyBmb3IgYnVnZ3kgaGFyZHdhcmUgYW5kIG1lYW5zIHRoYXQgdGhpcyBJUlEKLQkgKiBoYXMgYWxyZWFkeSBiZWVuIGhhbmRsZWQuIC0tIFRvbQotCSAqLwotCXdoaWxlICgoaXJxID0gcHBjX21kLmdldF9pcnEocmVncykpID49IDApIHsKLQkJX19kb19JUlEoaXJxLCByZWdzKTsKLQkJZmlyc3QgPSAwOwotCX0KLQlpZiAoaXJxICE9IC0yICYmIGZpcnN0KQotCQkvKiBUaGF0J3Mgbm90IFNNUCBzYWZlIC4uLiBidXQgd2hvIGNhcmVzID8gKi8KLQkJcHBjX3NwdXJpb3VzX2ludGVycnVwdHMrKzsKLSAgICAgICAgaXJxX2V4aXQoKTsKLX0KLQotdm9pZCBfX2luaXQgaW5pdF9JUlEodm9pZCkKLXsKLQlwcGNfbWQuaW5pdF9JUlEoKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9taXNjLlMgYi9hcmNoL3BwYy9rZXJuZWwvbWlzYy5TCmluZGV4IGFlNmFmMjkuLjVlNjExMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9taXNjLlMKKysrIGIvYXJjaC9wcGMva2VybmVsL21pc2MuUwpAQCAtNDk3LDkgKzQ5Nyw5IEBACiAgKiBhbmQgaW52YWxpZGF0ZSB0aGUgY29ycmVzcG9uZGluZyBpbnN0cnVjdGlvbiBjYWNoZSBibG9ja3MuCiAgKiBUaGlzIGlzIGEgbm8tb3Agb24gdGhlIDYwMS4KICAqCi0gKiBmbHVzaF9pY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzdG9wKQorICogX19mbHVzaF9pY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzdG9wKQogICovCi1fR0xPQkFMKGZsdXNoX2ljYWNoZV9yYW5nZSkKK19HTE9CQUwoX19mbHVzaF9pY2FjaGVfcmFuZ2UpCiBCRUdJTl9GVFJfU0VDVElPTgogCWJscgkJCQkvKiBmb3IgNjAxLCBkbyBub3RoaW5nICovCiBFTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9TUExJVF9JRF9DQUNIRSkKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9wY2kuYyBiL2FyY2gvcHBjL2tlcm5lbC9wY2kuYwppbmRleCBlOGY0ZTU3Li40OGVkNThmIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvcGNpLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL3BjaS5jCkBAIC02MiwyMCArNjIsNiBAQAogc3RhdGljIGludCBwY2lfYnVzX2NvdW50OwogCiBzdGF0aWMgdm9pZAotZml4dXBfcmV2MV81M2M4MTAoc3RydWN0IHBjaV9kZXYqIGRldikKLXsKLQkvKiByZXYgMSBuY3I1M2M4MTAgY2hpcHMgZG9uJ3Qgc2V0IHRoZSBjbGFzcyBhdCBhbGwgd2hpY2ggbWVhbnMKLQkgKiB0aGV5IGRvbid0IGdldCB0aGVpciByZXNvdXJjZXMgcmVtYXBwZWQuIEZpeCB0aGF0IGhlcmUuCi0JICovCi0KLQlpZiAoKGRldi0+Y2xhc3MgPT0gUENJX0NMQVNTX05PVF9ERUZJTkVEKSkgewotCQlwcmludGsoIk5DUiA1M2M4MTAgcmV2IDEgZGV0ZWN0ZWQsIHNldHRpbmcgUENJIGNsYXNzLlxuIik7Ci0JCWRldi0+Y2xhc3MgPSBQQ0lfQ0xBU1NfU1RPUkFHRV9TQ1NJOwotCX0KLX0KLURFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX05DUiwJUENJX0RFVklDRV9JRF9OQ1JfNTNDODEwLAlmaXh1cF9yZXYxXzUzYzgxMCk7Ci0KLXN0YXRpYyB2b2lkCiBmaXh1cF9icm9rZW5fcGNuZXQzMihzdHJ1Y3QgcGNpX2RldiogZGV2KQogewogCWlmICgoZGV2LT5jbGFzcz4+OCA9PSBQQ0lfQ0xBU1NfTkVUV09SS19FVEhFUk5FVCkpIHsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9wcGNfa3N5bXMuYyBiL2FyY2gvcHBjL2tlcm5lbC9wcGNfa3N5bXMuYwppbmRleCBlMGNhNjFiLi42NjA3M2Y3IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvcHBjX2tzeW1zLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL3BwY19rc3ltcy5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8YXNtL2J0ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSA8YXNtL3htb24uaD4KKyNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CiAKICNpZmRlZiAgQ09ORklHXzh4eAogI2luY2x1ZGUgPGFzbS9jb21tcHJvYy5oPgpAQCAtNTcsNyArNTgsNiBAQAogZXh0ZXJuIHZvaWQgYWxpZ25tZW50X2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBleHRlcm4gdm9pZCBwcm9ncmFtX2NoZWNrX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBleHRlcm4gdm9pZCBzaW5nbGVfc3RlcF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotZXh0ZXJuIGludCBkb19zaWduYWwoc2lnc2V0X3QgKiwgc3RydWN0IHB0X3JlZ3MgKik7CiBleHRlcm4gaW50IHBtYWNfbmV3d29ybGQ7CiBleHRlcm4gaW50IHN5c19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCkBAIC03OCw3ICs3OCw2IEBACiBFWFBPUlRfU1lNQk9MKHNpbmdsZV9zdGVwX2V4Y2VwdGlvbik7CiBFWFBPUlRfU1lNQk9MKHN5c19zaWdyZXR1cm4pOwogRVhQT1JUX1NZTUJPTChwcGNfbl9sb3N0X2ludGVycnVwdHMpOwotRVhQT1JUX1NZTUJPTChwcGNfbG9zdF9pbnRlcnJ1cHRzKTsKIAogRVhQT1JUX1NZTUJPTChJU0FfRE1BX1RIUkVTSE9MRCk7CiBFWFBPUlRfU1lNQk9MKERNQV9NT0RFX1JFQUQpOwpAQCAtMTc2LDYgKzE3NSw3IEBACiAjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCiAjaWZkZWYgQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRQorZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX2FsbCh2b2lkKTsKIEVYUE9SVF9TWU1CT0woZmx1c2hfZGNhY2hlX2FsbCk7CiAjZW5kaWYKIApAQCAtMjE3LDkgKzIxNyw2IEBACiBFWFBPUlRfU1lNQk9MKGN1ZGFfcmVxdWVzdCk7CiBFWFBPUlRfU1lNQk9MKGN1ZGFfcG9sbCk7CiAjZW5kaWYgLyogQ09ORklHX0FEQl9DVURBICovCi0jaWZkZWYgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNCi1FWFBPUlRfU1lNQk9MKF9tYWNoaW5lKTsKLSNlbmRpZgogI2lmZGVmIENPTkZJR19QUENfUE1BQwogRVhQT1JUX1NZTUJPTChzeXNfY3RybGVyKTsKIEVYUE9SVF9TWU1CT0wocG1hY19uZXd3b3JsZCk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvcHBjL2tlcm5lbC9zZXR1cC5jCmluZGV4IDZiY2I4NWQuLmRjNTVlMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9zZXR1cC5jCkBAIC03Niw2ICs3Niw3IEBACiAKICNpZmRlZiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0KIGludCBfbWFjaGluZSA9IDA7CitFWFBPUlRfU1lNQk9MKF9tYWNoaW5lKTsKIAogZXh0ZXJuIHZvaWQgcHJlcF9pbml0KHVuc2lnbmVkIGxvbmcgcjMsIHVuc2lnbmVkIGxvbmcgcjQsCiAJCXVuc2lnbmVkIGxvbmcgcjUsIHVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfcGljLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY19waWMuYwppbmRleCA5ZjJkOTVlLi40NzQyYmY2IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY19waWMuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY19waWMuYwpAQCAtNzUsNiArNzUsOSBAQAogI2RlZmluZSBHQVRXSUNLX0lSUV9QT09MX1NJWkUgICAgICAgIDEwCiBzdGF0aWMgc3RydWN0IGludGVycnVwdF9pbmZvIGdhdHdpY2tfaW50X3Bvb2xbR0FUV0lDS19JUlFfUE9PTF9TSVpFXTsKIAorI2RlZmluZSBOUl9NQVNLX1dPUkRTCSgoTlJfSVJRUyArIDMxKSAvIDMyKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgcHBjX2xvc3RfaW50ZXJydXB0c1tOUl9NQVNLX1dPUkRTXTsKKwogLyoKICAqIE1hcmsgYW4gaXJxIGFzICJsb3N0Ii4gIFRoaXMgaXMgb25seSB1c2VkIG9uIHRoZSBwbWFjCiAgKiBzaW5jZSBpdCBjYW4gbG9zZSBpbnRlcnJ1cHRzIChzZWUgcG1hY19zZXRfaXJxX21hc2spLgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3ByZXBfc2V0dXAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcmVwX3NldHVwLmMKaW5kZXggMDY3ZDdkNS4uNDQxNTc0OCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3ByZXBfc2V0dXAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJlcF9zZXR1cC5jCkBAIC02MSw2ICs2MSwxNSBAQAogI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CiAjaW5jbHVkZSA8YXNtL3RvZGMuaD4KIAorLyogcHJlcCByZWdpc3RlcnMgZm9yIEwyICovCisjZGVmaW5lIENBQ0hFQ1JCQSAgICAgICAweDgwMDAwODIzICAgICAgLyogQ2FjaGUgY29uZmlndXJhdGlvbiByZWdpc3RlciBhZGRyZXNzICovCisjZGVmaW5lIEwyQ0FDSEVfTUFTSwkweDAzCS8qIE1hc2sgZm9yIDIgTDIgQ2FjaGUgYml0cyAqLworI2RlZmluZSBMMkNBQ0hFXzUxMktCCTB4MDAJLyogNTEyS0IgKi8KKyNkZWZpbmUgTDJDQUNIRV8yNTZLQgkweDAxCS8qIDI1NktCICovCisjZGVmaW5lIEwyQ0FDSEVfMU1CCTB4MDIJLyogMU1CICovCisjZGVmaW5lIEwyQ0FDSEVfTk9ORQkweDAzCS8qIE5PTkUgKi8KKyNkZWZpbmUgTDJDQUNIRV9QQVJJVFkgIDB4MDggICAgLyogTWFzayBmb3IgTDIgQ2FjaGUgUGFyaXR5IFByb3RlY3RlZCBiaXQgKi8KKwogVE9EQ19BTExPQygpOwogCiB1bnNpZ25lZCBjaGFyIHVjU3lzdGVtVHlwZTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9jcG0yX3BpYy5jIGIvYXJjaC9wcGMvc3lzbGliL2NwbTJfcGljLmMKaW5kZXggYzg2N2JlNi4uMjlkOTVkNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9jcG0yX3BpYy5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9jcG0yX3BpYy5jCkBAIC0zNyw3ICszNyw3IEBACiBzdGF0aWMJdV9jaGFyCWlycV90b19zaXViaXRbXSA9IHsKIAkgMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgIDksCiAJIDgsICA3LCAgNiwgIDUsICA0LCAgMywgIDIsICAxLAotCSAyLCAgMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwKKwkgMiwgIDEsICAwLCAxNCwgMTMsIDEyLCAxMSwgMTAsCiAJIDksICA4LCAgNywgIDYsICA1LCAgNCwgIDMsICAwLAogCTMxLCAzMCwgMjksIDI4LCAyNywgMjYsIDI1LCAyNCwKIAkyMywgMjIsIDIxLCAyMCwgMTksIDE4LCAxNywgMTYsCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L0tjb25maWcgYi9hcmNoL3BwYzY0L0tjb25maWcKaW5kZXggMjk1NTIzNC4uOWQxMGMxMiAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9LY29uZmlnCisrKyBiL2FyY2gvcHBjNjQvS2NvbmZpZwpAQCAtMjc5LDE3ICsyNzksMTIgQEAKICAgICAgICBkZWZfYm9vbCB5CiAgICAgICAgZGVwZW5kcyBvbiAhTlVNQQogCi1jb25maWcgQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFCi0JZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gU01QICYmIFBQQ19QU0VSSUVTCi0KLWNvbmZpZyBBUkNIX0RJU0NPTlRJR01FTV9ERUZBVUxUCi0JZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFCi0KIGNvbmZpZyBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBBUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUKKworY29uZmlnIEFSQ0hfU1BBUlNFTUVNX0RFRkFVTFQKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBOVU1BCiAKIHNvdXJjZSAibW0vS2NvbmZpZyIKIApAQCAtMjk3LDYgKzI5MiwxMCBAQAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKIAorY29uZmlnIEFSQ0hfTUVNT1JZX1BST0JFCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUcKKwogIyBTb21lIE5VTUEgbm9kZXMgaGF2ZSBtZW1vcnkgcmFuZ2VzIHRoYXQgc3BhbgogIyBvdGhlciBub2Rlcy4gIEV2ZW4gdGhvdWdoIGEgcGZuIGlzIHZhbGlkIGFuZAogIyBiZXR3ZWVuIGEgbm9kZSdzIHN0YXJ0IGFuZCBlbmQgcGZucywgaXQgbWF5IG5vdApkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9ib290L2FkZFJhbURpc2suYyBiL2FyY2gvcHBjNjQvYm9vdC9hZGRSYW1EaXNrLmMKaW5kZXggN2YyYzA5NC4uYzAyYTk5OSAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9ib290L2FkZFJhbURpc2suYworKysgYi9hcmNoL3BwYzY0L2Jvb3QvYWRkUmFtRGlzay5jCkBAIC01LDExICs1LDU5IEBACiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlbGYuaD4KIAogI2RlZmluZSBFbGZIZWFkZXJTaXplICAoNjQgKiAxMDI0KQogI2RlZmluZSBFbGZQYWdlcyAgKEVsZkhlYWRlclNpemUgLyA0MDk2KQogI2RlZmluZSBLRVJORUxCQVNFICgweGMwMDAwMDAwMDAwMDAwMDApCisjZGVmaW5lIF9BTElHTl9VUChhZGRyLHNpemUpCSgoKGFkZHIpKygoc2l6ZSktMSkpJih+KChzaXplKS0xKSkpCiAKK3N0cnVjdCBhZGRyX3JhbmdlIHsKKwl1bnNpZ25lZCBsb25nIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBsb25nIG1lbXNpemU7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7Cit9OworCitzdGF0aWMgaW50IGNoZWNrX2VsZjY0KHZvaWQgKnAsIGludCBzaXplLCBzdHJ1Y3QgYWRkcl9yYW5nZSAqcikKK3sKKwlFbGY2NF9FaGRyICplbGY2NCA9IHA7CisJRWxmNjRfUGhkciAqZWxmNjRwaDsKKworCWlmIChlbGY2NC0+ZV9pZGVudFtFSV9NQUcwXSAhPSBFTEZNQUcwIHx8CisJICAgIGVsZjY0LT5lX2lkZW50W0VJX01BRzFdICE9IEVMRk1BRzEgfHwKKwkgICAgZWxmNjQtPmVfaWRlbnRbRUlfTUFHMl0gIT0gRUxGTUFHMiB8fAorCSAgICBlbGY2NC0+ZV9pZGVudFtFSV9NQUczXSAhPSBFTEZNQUczIHx8CisJICAgIGVsZjY0LT5lX2lkZW50W0VJX0NMQVNTXSAhPSBFTEZDTEFTUzY0IHx8CisJICAgIGVsZjY0LT5lX2lkZW50W0VJX0RBVEFdICE9IEVMRkRBVEEyTVNCIHx8CisJICAgIGVsZjY0LT5lX3R5cGUgIT0gRVRfRVhFQyB8fCBlbGY2NC0+ZV9tYWNoaW5lICE9IEVNX1BQQzY0KQorCQlyZXR1cm4gMDsKKworCWlmICgoZWxmNjQtPmVfcGhvZmYgKyBzaXplb2YoRWxmNjRfUGhkcikpID4gc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwllbGY2NHBoID0gKEVsZjY0X1BoZHIgKikgKCh1bnNpZ25lZCBsb25nKWVsZjY0ICsKKwkJCQkgICh1bnNpZ25lZCBsb25nKWVsZjY0LT5lX3Bob2ZmKTsKKworCXItPm1lbXNpemUgPSAodW5zaWduZWQgbG9uZyllbGY2NHBoLT5wX21lbXN6OworCXItPm9mZnNldCA9ICh1bnNpZ25lZCBsb25nKWVsZjY0cGgtPnBfb2Zmc2V0OworCXItPmFkZHIgPSAodW5zaWduZWQgbG9uZyBsb25nKWVsZjY0cGgtPnBfdmFkZHI7CisKKyNpZmRlZiBERUJVRworCXByaW50ZigiUFBDNjQgRUxGIGZpbGUsIHBoOlxuIik7CisJcHJpbnRmKCJwX3R5cGUgICAweCUwOHhcbiIsIGVsZjY0cGgtPnBfdHlwZSk7CisJcHJpbnRmKCJwX2ZsYWdzICAweCUwOHhcbiIsIGVsZjY0cGgtPnBfZmxhZ3MpOworCXByaW50ZigicF9vZmZzZXQgMHglMDE2bGx4XG4iLCBlbGY2NHBoLT5wX29mZnNldCk7CisJcHJpbnRmKCJwX3ZhZGRyICAweCUwMTZsbHhcbiIsIGVsZjY0cGgtPnBfdmFkZHIpOworCXByaW50ZigicF9wYWRkciAgMHglMDE2bGx4XG4iLCBlbGY2NHBoLT5wX3BhZGRyKTsKKwlwcmludGYoInBfZmlsZXN6IDB4JTAxNmxseFxuIiwgZWxmNjRwaC0+cF9maWxlc3opOworCXByaW50ZigicF9tZW1zeiAgMHglMDE2bGx4XG4iLCBlbGY2NHBoLT5wX21lbXN6KTsKKwlwcmludGYoInBfYWxpZ24gIDB4JTAxNmxseFxuIiwgZWxmNjRwaC0+cF9hbGlnbik7CisJcHJpbnRmKCIuLi4gc2tpcHBpbmcgMHglMDhseCBieXRlcyBvZiBFTEYgaGVhZGVyXG4iLAorCSAgICAgICAodW5zaWduZWQgbG9uZyllbGY2NHBoLT5wX29mZnNldCk7CisjZW5kaWYKKworCXJldHVybiA2NDsKK30KIHZvaWQgZ2V0NGsoRklMRSAqZmlsZSwgY2hhciAqYnVmICkKIHsKIAl1bnNpZ25lZCBqOwpAQCAtMzQsOTcgKzgyLDkyIEBACiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJY2hhciBpbmJ1Zls0MDk2XTsKLQlGSUxFICpyYW1EaXNrID0gTlVMTDsKLQlGSUxFICpzeXNtYXAgPSBOVUxMOwotCUZJTEUgKmlucHV0Vm1saW51eCA9IE5VTEw7Ci0JRklMRSAqb3V0cHV0Vm1saW51eCA9IE5VTEw7Ci0gIAotCXVuc2lnbmVkIGkgPSAwOwotCXVuc2lnbmVkIGxvbmcgcmFtRmlsZUxlbiA9IDA7Ci0JdW5zaWduZWQgbG9uZyByYW1MZW4gPSAwOwotCXVuc2lnbmVkIGxvbmcgcm91bmRSID0gMDsKLSAgCi0JdW5zaWduZWQgbG9uZyBzeXNtYXBGaWxlTGVuID0gMDsKLQl1bnNpZ25lZCBsb25nIHN5c21hcExlbiA9IDA7Ci0JdW5zaWduZWQgbG9uZyBzeXNtYXBQYWdlcyA9IDA7Ci0JY2hhciogcHRyX2VuZCA9IE5VTEw7IAotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0X2VuZCA9IDA7CisJc3RydWN0IGFkZHJfcmFuZ2Ugdm1saW51eDsKKwlGSUxFICpyYW1EaXNrOworCUZJTEUgKmlucHV0Vm1saW51eDsKKwlGSUxFICpvdXRwdXRWbWxpbnV4OwogCi0JdW5zaWduZWQgbG9uZyBrZXJuZWxMZW4gPSAwOwotCXVuc2lnbmVkIGxvbmcgYWN0dWFsS2VybmVsTGVuID0gMDsKLQl1bnNpZ25lZCBsb25nIHJvdW5kID0gMDsKLQl1bnNpZ25lZCBsb25nIHJvdW5kZWRLZXJuZWxMZW4gPSAwOwotCXVuc2lnbmVkIGxvbmcgcmFtU3RhcnRPZmZzID0gMDsKLQl1bnNpZ25lZCBsb25nIHJhbVBhZ2VzID0gMDsKLQl1bnNpZ25lZCBsb25nIHJvdW5kZWRLZXJuZWxQYWdlcyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBodlJlbGVhc2VEYXRhID0gMDsKKwljaGFyICpyZF9uYW1lLCAqbHhfbmFtZSwgKm91dF9uYW1lOworCisJc2l6ZV90IGk7CisJdW5zaWduZWQgbG9uZyByYW1GaWxlTGVuOworCXVuc2lnbmVkIGxvbmcgcmFtTGVuOworCXVuc2lnbmVkIGxvbmcgcm91bmRSOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0X2VuZDsKKworCXVuc2lnbmVkIGxvbmcga2VybmVsTGVuOworCXVuc2lnbmVkIGxvbmcgYWN0dWFsS2VybmVsTGVuOworCXVuc2lnbmVkIGxvbmcgcm91bmQ7CisJdW5zaWduZWQgbG9uZyByb3VuZGVkS2VybmVsTGVuOworCXVuc2lnbmVkIGxvbmcgcmFtU3RhcnRPZmZzOworCXVuc2lnbmVkIGxvbmcgcmFtUGFnZXM7CisJdW5zaWduZWQgbG9uZyByb3VuZGVkS2VybmVsUGFnZXM7CisJdW5zaWduZWQgbG9uZyBodlJlbGVhc2VEYXRhOwogCXVfaW50MzJfdCBleWVDYXRjaGVyID0gMHhjOGE1ZDljNDsKLQl1bnNpZ25lZCBsb25nIG5hY2EgPSAwOwotCXVuc2lnbmVkIGxvbmcgeFJhbURpc2sgPSAwOwotCXVuc2lnbmVkIGxvbmcgeFJhbURpc2tTaXplID0gMDsKLQlsb25nIHBhZFBhZ2VzID0gMDsKKwl1bnNpZ25lZCBsb25nIG5hY2E7CisJdW5zaWduZWQgbG9uZyB4UmFtRGlzazsKKwl1bnNpZ25lZCBsb25nIHhSYW1EaXNrU2l6ZTsKKwlsb25nIHBhZFBhZ2VzOwogICAKICAgCiAJaWYgKGFyZ2MgPCAyKSB7CiAJCWZwcmludGYoc3RkZXJyLCAiTmFtZSBvZiBSQU0gZGlzayBmaWxlIG1pc3NpbmcuXG4iKTsKIAkJZXhpdCgxKTsKIAl9CisJcmRfbmFtZSA9IGFyZ3ZbMV07CiAKIAlpZiAoYXJnYyA8IDMpIHsKLQkJZnByaW50ZihzdGRlcnIsICJOYW1lIG9mIFN5c3RlbSBNYXAgaW5wdXQgZmlsZSBpcyBtaXNzaW5nLlxuIik7Ci0JCWV4aXQoMSk7Ci0JfQotICAKLQlpZiAoYXJnYyA8IDQpIHsKIAkJZnByaW50ZihzdGRlcnIsICJOYW1lIG9mIHZtbGludXggZmlsZSBtaXNzaW5nLlxuIik7CiAJCWV4aXQoMSk7CiAJfQorCWx4X25hbWUgPSBhcmd2WzJdOwogCi0JaWYgKGFyZ2MgPCA1KSB7CisJaWYgKGFyZ2MgPCA0KSB7CiAJCWZwcmludGYoc3RkZXJyLCAiTmFtZSBvZiB2bWxpbnV4IG91dHB1dCBmaWxlIG1pc3NpbmcuXG4iKTsKIAkJZXhpdCgxKTsKIAl9CisJb3V0X25hbWUgPSBhcmd2WzNdOwogCiAKLQlyYW1EaXNrID0gZm9wZW4oYXJndlsxXSwgInIiKTsKKwlyYW1EaXNrID0gZm9wZW4ocmRfbmFtZSwgInIiKTsKIAlpZiAoICEgcmFtRGlzayApIHsKLQkJZnByaW50ZihzdGRlcnIsICJSQU0gZGlzayBmaWxlIFwiJXNcIiBmYWlsZWQgdG8gb3Blbi5cbiIsIGFyZ3ZbMV0pOworCQlmcHJpbnRmKHN0ZGVyciwgIlJBTSBkaXNrIGZpbGUgXCIlc1wiIGZhaWxlZCB0byBvcGVuLlxuIiwgcmRfbmFtZSk7CiAJCWV4aXQoMSk7CiAJfQogCi0Jc3lzbWFwID0gZm9wZW4oYXJndlsyXSwgInIiKTsKLQlpZiAoICEgc3lzbWFwICkgewotCQlmcHJpbnRmKHN0ZGVyciwgIlN5c3RlbSBNYXAgZmlsZSBcIiVzXCIgZmFpbGVkIHRvIG9wZW4uXG4iLCBhcmd2WzJdKTsKLQkJZXhpdCgxKTsKLQl9Ci0gIAotCWlucHV0Vm1saW51eCA9IGZvcGVuKGFyZ3ZbM10sICJyIik7CisJaW5wdXRWbWxpbnV4ID0gZm9wZW4obHhfbmFtZSwgInIiKTsKIAlpZiAoICEgaW5wdXRWbWxpbnV4ICkgewotCQlmcHJpbnRmKHN0ZGVyciwgInZtbGludXggZmlsZSBcIiVzXCIgZmFpbGVkIHRvIG9wZW4uXG4iLCBhcmd2WzNdKTsKKwkJZnByaW50ZihzdGRlcnIsICJ2bWxpbnV4IGZpbGUgXCIlc1wiIGZhaWxlZCB0byBvcGVuLlxuIiwgbHhfbmFtZSk7CiAJCWV4aXQoMSk7CiAJfQogICAKLQlvdXRwdXRWbWxpbnV4ID0gZm9wZW4oYXJndls0XSwgIncrIik7CisJb3V0cHV0Vm1saW51eCA9IGZvcGVuKG91dF9uYW1lLCAidysiKTsKIAlpZiAoICEgb3V0cHV0Vm1saW51eCApIHsKLQkJZnByaW50ZihzdGRlcnIsICJvdXRwdXQgdm1saW51eCBmaWxlIFwiJXNcIiBmYWlsZWQgdG8gb3Blbi5cbiIsIGFyZ3ZbNF0pOworCQlmcHJpbnRmKHN0ZGVyciwgIm91dHB1dCB2bWxpbnV4IGZpbGUgXCIlc1wiIGZhaWxlZCB0byBvcGVuLlxuIiwgb3V0X25hbWUpOwogCQlleGl0KDEpOwogCX0KLSAgCi0gIAotICAKKworCWkgPSBmcmVhZChpbmJ1ZiwgMSwgc2l6ZW9mKGluYnVmKSwgaW5wdXRWbWxpbnV4KTsKKwlpZiAoaSAhPSBzaXplb2YoaW5idWYpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiY2FuIG5vdCByZWFkIHZtbGludXggZmlsZSAlczogJXVcbiIsIGx4X25hbWUsIGkpOworCQlleGl0KDEpOworCX0KKworCWkgPSBjaGVja19lbGY2NChpbmJ1Ziwgc2l6ZW9mKGluYnVmKSwgJnZtbGludXgpOworCWlmIChpID09IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJZb3UgbXVzdCBoYXZlIGEgbGludXgga2VybmVsIHNwZWNpZmllZCBhcyBhcmd2WzJdXG4iKTsKKwkJZXhpdCgxKTsKKwl9CisKIAkvKiBJbnB1dCBWbWxpbnV4IGZpbGUgKi8KIAlmc2VlayhpbnB1dFZtbGludXgsIDAsIFNFRUtfRU5EKTsKIAlrZXJuZWxMZW4gPSBmdGVsbChpbnB1dFZtbGludXgpOwogCWZzZWVrKGlucHV0Vm1saW51eCwgMCwgU0VFS19TRVQpOwotCXByaW50Zigia2VybmVsIGZpbGUgc2l6ZSA9ICVkXG4iLCBrZXJuZWxMZW4pOwotCWlmICgga2VybmVsTGVuID09IDAgKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiWW91IG11c3QgaGF2ZSBhIGxpbnV4IGtlcm5lbCBzcGVjaWZpZWQgYXMgYXJndlszXVxuIik7Ci0JCWV4aXQoMSk7Ci0JfQorCXByaW50Zigia2VybmVsIGZpbGUgc2l6ZSA9ICVsdVxuIiwga2VybmVsTGVuKTsKIAogCWFjdHVhbEtlcm5lbExlbiA9IGtlcm5lbExlbiAtIEVsZkhlYWRlclNpemU7CiAKLQlwcmludGYoImFjdHVhbCBrZXJuZWwgbGVuZ3RoIChtaW51cyBFTEYgaGVhZGVyKSA9ICVkXG4iLCBhY3R1YWxLZXJuZWxMZW4pOworCXByaW50ZigiYWN0dWFsIGtlcm5lbCBsZW5ndGggKG1pbnVzIEVMRiBoZWFkZXIpID0gJWx1XG4iLCBhY3R1YWxLZXJuZWxMZW4pOwogCiAJcm91bmQgPSBhY3R1YWxLZXJuZWxMZW4gJSA0MDk2OwogCXJvdW5kZWRLZXJuZWxMZW4gPSBhY3R1YWxLZXJuZWxMZW47CkBAIC0xMzQsMzkgKzE3Nyw3IEBACiAJcm91bmRlZEtlcm5lbFBhZ2VzID0gcm91bmRlZEtlcm5lbExlbiAvIDQwOTY7CiAJcHJpbnRmKCJWbWxpbnV4IHBhZ2VzIHRvIGNvcHkgPSAlbGQvMHglbHggXG4iLCByb3VuZGVkS2VybmVsUGFnZXMsIHJvdW5kZWRLZXJuZWxQYWdlcyk7CiAKLQotCi0JLyogSW5wdXQgU3lzdGVtIE1hcCBmaWxlICovCi0JLyogKG5lZWRzIHRvIGJlIHByb2Nlc3NlZCBzaW1wbHkgdG8gZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gYWRkIHBhZCBwYWdlcyBkdWUgdG8gdGhlIHN0YXRpYyB2YXJpYWJsZXMgbm90IGJlaW5nIGluY2x1ZGVkIGluIHRoZSB2bWxpbnV4KSAqLwotCWZzZWVrKHN5c21hcCwgMCwgU0VFS19FTkQpOwotCXN5c21hcEZpbGVMZW4gPSBmdGVsbChzeXNtYXApOwotCWZzZWVrKHN5c21hcCwgMCwgU0VFS19TRVQpOwotCXByaW50ZigiJXMgZmlsZSBzaXplID0gJWxkLzB4JWx4IFxuIiwgYXJndlsyXSwgc3lzbWFwRmlsZUxlbiwgc3lzbWFwRmlsZUxlbik7Ci0KLQlzeXNtYXBMZW4gPSBzeXNtYXBGaWxlTGVuOwotCi0Jcm91bmRSID0gNDA5NiAtIChzeXNtYXBMZW4gJSA0MDk2KTsKLQlpZiAocm91bmRSKSB7Ci0JCXByaW50ZigiUm91bmRpbmcgU3lzdGVtIE1hcCBmaWxlIHVwIHRvIGEgbXVsdGlwbGUgb2YgNDA5NiwgYWRkaW5nICVsZC8weCVseCBcbiIsIHJvdW5kUiwgcm91bmRSKTsKLQkJc3lzbWFwTGVuICs9IHJvdW5kUjsKLQl9Ci0JcHJpbnRmKCJSb3VuZGVkIFN5c3RlbSBNYXAgc2l6ZSBpcyAlbGQvMHglbHggXG4iLCBzeXNtYXBMZW4sIHN5c21hcExlbik7Ci0gIAotCS8qIFByb2Nlc3MgdGhlIFN5c21hcCBmaWxlIHRvIGRldGVybWluZSB3aGVyZSBfZW5kIGlzICovCi0Jc3lzbWFwUGFnZXMgPSBzeXNtYXBMZW4gLyA0MDk2OwotCS8qIHJlYWQgdGhlIHdob2xlIGZpbGUgbGluZSBieSBsaW5lLCBleHBlY3QgdGhhdCBpdCBkb2Vzbid0IGZhaWwgKi8KLQl3aGlsZSAoIGZnZXRzKGluYnVmLCA0MDk2LCBzeXNtYXApICkgIDsKLQkvKiBzZWFyY2ggZm9yIF9lbmQgaW4gdGhlIGxhc3QgcGFnZSBvZiB0aGUgc3lzdGVtIG1hcCAqLwotCXB0cl9lbmQgPSBzdHJzdHIoaW5idWYsICIgX2VuZCIpOwotCWlmICghcHRyX2VuZCkgewotCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBmaW5kIF9lbmQgaW4gdGhlIHN5c21hcCBmaWxlIFxuIik7Ci0JCWZwcmludGYoc3RkZXJyLCAiaW5idWY6IFxuIik7Ci0JCWZwcmludGYoc3RkZXJyLCAiJXMgXG4iLCBpbmJ1Zik7Ci0JCWV4aXQoMSk7Ci0JfQotCXByaW50ZigiRm91bmQgX2VuZCBpbiB0aGUgbGFzdCBwYWdlIG9mIHRoZSBzeXNtYXAgLSBiYWNraW5nIHVwIDEwIGNoYXJhY3RlcnMgaXQgbG9va3MgbGlrZSAlcyIsIHB0cl9lbmQtMTApOwotCS8qIGNvbnZlcnQgYWRkcmVzcyBvZiBfZW5kIGluIHN5c3RlbSBtYXAgdG8gaGV4IG9mZnNldC4gKi8KLQlvZmZzZXRfZW5kID0gKHVuc2lnbmVkIGludClzdHJ0b2wocHRyX2VuZC0xMCwgTlVMTCwgMTYpOworCW9mZnNldF9lbmQgPSBfQUxJR05fVVAodm1saW51eC5tZW1zaXplLCA0MDk2KTsKIAkvKiBjYWxjIGhvdyBtYW55IHBhZ2VzIHdlIG5lZWQgdG8gaW5zZXJ0IGJldHdlZW4gdGhlIHZtbGludXggYW5kIHRoZSBzdGFydCBvZiB0aGUgcmFtIGRpc2sgKi8KIAlwYWRQYWdlcyA9IG9mZnNldF9lbmQvNDA5NiAtIHJvdW5kZWRLZXJuZWxQYWdlczsKIApAQCAtMTk0LDcgKzIwNSw3IEBACiAJZnNlZWsocmFtRGlzaywgMCwgU0VFS19FTkQpOwogCXJhbUZpbGVMZW4gPSBmdGVsbChyYW1EaXNrKTsKIAlmc2VlayhyYW1EaXNrLCAwLCBTRUVLX1NFVCk7Ci0JcHJpbnRmKCIlcyBmaWxlIHNpemUgPSAlbGQvMHglbHggXG4iLCBhcmd2WzFdLCByYW1GaWxlTGVuLCByYW1GaWxlTGVuKTsKKwlwcmludGYoIiVzIGZpbGUgc2l6ZSA9ICVsZC8weCVseCBcbiIsIHJkX25hbWUsIHJhbUZpbGVMZW4sIHJhbUZpbGVMZW4pOwogCiAJcmFtTGVuID0gcmFtRmlsZUxlbjsKIApAQCAtMjQ4LDE5ICsyNTksMTkgQEAKIAkvKiBmc2VlayB0byB0aGUgaHZSZWxlYXNlRGF0YSBwb2ludGVyICovCiAJZnNlZWsob3V0cHV0Vm1saW51eCwgRWxmSGVhZGVyU2l6ZSArIDB4MjQsIFNFRUtfU0VUKTsKIAlpZiAoZnJlYWQoJmh2UmVsZWFzZURhdGEsIDQsIDEsIG91dHB1dFZtbGludXgpICE9IDEpIHsKLQkJZGVhdGgoIkNvdWxkIG5vdCByZWFkIGh2UmVsZWFzZURhdGEgcG9pbnRlclxuIiwgb3V0cHV0Vm1saW51eCwgYXJndls0XSk7CisJCWRlYXRoKCJDb3VsZCBub3QgcmVhZCBodlJlbGVhc2VEYXRhIHBvaW50ZXJcbiIsIG91dHB1dFZtbGludXgsIG91dF9uYW1lKTsKIAl9CiAJaHZSZWxlYXNlRGF0YSA9IG50b2hsKGh2UmVsZWFzZURhdGEpOyAvKiBDb252ZXJ0IHRvIG5hdGl2ZSBpbnQgKi8KLQlwcmludGYoImh2UmVsZWFzZURhdGEgaXMgYXQgJTA4eFxuIiwgaHZSZWxlYXNlRGF0YSk7CisJcHJpbnRmKCJodlJlbGVhc2VEYXRhIGlzIGF0ICUwOGx4XG4iLCBodlJlbGVhc2VEYXRhKTsKIAogCS8qIGZzZWVrIHRvIHRoZSBodlJlbGVhc2VEYXRhICovCiAJZnNlZWsob3V0cHV0Vm1saW51eCwgRWxmSGVhZGVyU2l6ZSArIGh2UmVsZWFzZURhdGEsIFNFRUtfU0VUKTsKIAlpZiAoZnJlYWQoaW5idWYsIDB4NDAsIDEsIG91dHB1dFZtbGludXgpICE9IDEpIHsKLQkJZGVhdGgoIkNvdWxkIG5vdCByZWFkIGh2UmVsZWFzZURhdGFcbiIsIG91dHB1dFZtbGludXgsIGFyZ3ZbNF0pOworCQlkZWF0aCgiQ291bGQgbm90IHJlYWQgaHZSZWxlYXNlRGF0YVxuIiwgb3V0cHV0Vm1saW51eCwgb3V0X25hbWUpOwogCX0KIAkvKiBDaGVjayBodlJlbGVhc2VEYXRhIHNhbml0eSAqLwogCWlmIChtZW1jbXAoaW5idWYsICZleWVDYXRjaGVyLCA0KSAhPSAwKSB7Ci0JCWRlYXRoKCJodlJlbGVhc2VEYXRhIGlzIGludmFsaWRcbiIsIG91dHB1dFZtbGludXgsIGFyZ3ZbNF0pOworCQlkZWF0aCgiaHZSZWxlYXNlRGF0YSBpcyBpbnZhbGlkXG4iLCBvdXRwdXRWbWxpbnV4LCBvdXRfbmFtZSk7CiAJfQogCS8qIEdldCB0aGUgbmFjYSBwb2ludGVyICovCiAJbmFjYSA9IG50b2hsKCooKHVfaW50MzJfdCopICZpbmJ1ZlsweDBDXSkpIC0gS0VSTkVMQkFTRTsKQEAgLTI2OSwxMyArMjgwLDEzIEBACiAJLyogZnNlZWsgdG8gdGhlIG5hY2EgKi8KIAlmc2VlayhvdXRwdXRWbWxpbnV4LCBFbGZIZWFkZXJTaXplICsgbmFjYSwgU0VFS19TRVQpOwogCWlmIChmcmVhZChpbmJ1ZiwgMHgxOCwgMSwgb3V0cHV0Vm1saW51eCkgIT0gMSkgewotCQlkZWF0aCgiQ291bGQgbm90IHJlYWQgbmFjYVxuIiwgb3V0cHV0Vm1saW51eCwgYXJndls0XSk7CisJCWRlYXRoKCJDb3VsZCBub3QgcmVhZCBuYWNhXG4iLCBvdXRwdXRWbWxpbnV4LCBvdXRfbmFtZSk7CiAJfQogCXhSYW1EaXNrID0gbnRvaGwoKigodV9pbnQzMl90ICopICZpbmJ1ZlsweDBjXSkpOwogCXhSYW1EaXNrU2l6ZSA9IG50b2hsKCooKHVfaW50MzJfdCAqKSAmaW5idWZbMHgxNF0pKTsKIAkvKiBNYWtlIHN1cmUgYSBSQU0gZGlzayBpc24ndCBhbHJlYWR5IHByZXNlbnQgKi8KIAlpZiAoKHhSYW1EaXNrICE9IDApIHx8ICh4UmFtRGlza1NpemUgIT0gMCkpIHsKLQkJZGVhdGgoIlJBTSBkaXNrIGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gdGhpcyBrZXJuZWxcbiIsIG91dHB1dFZtbGludXgsIGFyZ3ZbNF0pOworCQlkZWF0aCgiUkFNIGRpc2sgaXMgYWxyZWFkeSBhdHRhY2hlZCB0byB0aGlzIGtlcm5lbFxuIiwgb3V0cHV0Vm1saW51eCwgb3V0X25hbWUpOwogCX0KIAkvKiBGaWxsIGluIHRoZSB2YWx1ZXMgKi8KIAkqKCh1X2ludDMyX3QgKikgJmluYnVmWzB4MGNdKSA9IGh0b25sKHJhbVN0YXJ0T2Zmcyk7CkBAIC0yODUsMTUgKzI5NiwxNSBAQAogCWZmbHVzaChvdXRwdXRWbWxpbnV4KTsKIAlmc2VlayhvdXRwdXRWbWxpbnV4LCBFbGZIZWFkZXJTaXplICsgbmFjYSwgU0VFS19TRVQpOwogCWlmIChmd3JpdGUoaW5idWYsIDB4MTgsIDEsIG91dHB1dFZtbGludXgpICE9IDEpIHsKLQkJZGVhdGgoIkNvdWxkIG5vdCB3cml0ZSBuYWNhXG4iLCBvdXRwdXRWbWxpbnV4LCBhcmd2WzRdKTsKKwkJZGVhdGgoIkNvdWxkIG5vdCB3cml0ZSBuYWNhXG4iLCBvdXRwdXRWbWxpbnV4LCBvdXRfbmFtZSk7CiAJfQotCXByaW50ZigiUmFtIERpc2sgb2YgMHglbHggcGFnZXMgaXMgYXR0YWNoZWQgdG8gdGhlIGtlcm5lbCBhdCBvZmZzZXQgMHglMDh4XG4iLAorCXByaW50ZigiUmFtIERpc2sgb2YgMHglbHggcGFnZXMgaXMgYXR0YWNoZWQgdG8gdGhlIGtlcm5lbCBhdCBvZmZzZXQgMHglMDhseFxuIiwKIAkgICAgICAgcmFtUGFnZXMsIHJhbVN0YXJ0T2Zmcyk7CiAKIAkvKiBEb25lICovCiAJZmNsb3NlKG91dHB1dFZtbGludXgpOwogCS8qIFNldCBwZXJtaXNzaW9uIHRvIGV4ZWN1dGFibGUgKi8KLQljaG1vZChhcmd2WzRdLCBTX0lSVVNSfFNfSVdVU1J8U19JWFVTUnxTX0lSR1JQfFNfSVhHUlB8U19JUk9USHxTX0lYT1RIKTsKKwljaG1vZChvdXRfbmFtZSwgU19JUlVTUnxTX0lXVVNSfFNfSVhVU1J8U19JUkdSUHxTX0lYR1JQfFNfSVJPVEh8U19JWE9USCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL01ha2VmaWxlIGIvYXJjaC9wcGM2NC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggYzQ0MWFlYi4uZGFjNGNjMiAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvTWFrZWZpbGUKQEAgLTExLDEzICsxMSwxMCBAQAogCiBlbmRpZgogCi1vYmoteSAgICAgICAgICAgICAgICs9CWlycS5vIGlkbGUubyBkbWEubyBcCi0JCQlhbGlnbi5vIHBhY2FEYXRhLm8gXAotCQkJdWRiZy5vIGlvY3RsMzIubyBcCitvYmoteSAgICAgICAgICAgICAgICs9CWlkbGUubyBkbWEubyBcCisJCQlhbGlnbi5vIFwKIAkJCXJ0Yy5vIFwKLQkJCWNwdV9zZXR1cF9wb3dlcjQubyBcCi0JCQlpb21tdS5vIHN5c2ZzLm8gdmRzby5vIGZpcm13YXJlLm8KLW9iai15ICs9IHZkc28zMi8gdmRzbzY0LworCQkJaW9tbXUubwogCiBwY2ktb2JqLSQoQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNKQkrPSBwY2lfZG4ubyBwY2lfZGlyZWN0X2lvbW11Lm8KIApAQCAtMjgsMzIgKzI1LDE5IEBACiBvYmotJChDT05GSUdfUFBDX01VTFRJUExBVEZPUk0pICs9IHByb21faW5pdC5vCiBlbmRpZgogCi1vYmotJChDT05GSUdfUFBDX1BTRVJJRVMpICs9IHVkYmdfMTY1NTAubwotCiBvYmotJChDT05GSUdfS0VYRUMpCQkrPSBtYWNoaW5lX2tleGVjLm8KLW9iai0kKENPTkZJR19FRUgpCQkrPSBlZWgubwotb2JqLSQoQ09ORklHX1BST0NfRlMpCQkrPSBwcm9jX3BwYzY0Lm8KIG9iai0kKENPTkZJR19NT0RVTEVTKQkJKz0gbW9kdWxlLm8KIGlmbmVxICgkKENPTkZJR19QUENfTUVSR0UpLHkpCiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IHBwY19rc3ltcy5vCiBlbmRpZgotb2JqLSQoQ09ORklHX1BQQ19SVEFTKQkJKz0gcnRhc19wY2kubwotb2JqLSQoQ09ORklHX1NDQU5MT0cpCQkrPSBzY2FubG9nLm8KLW9iai0kKENPTkZJR19MUEFSQ0ZHKQkJKz0gbHBhcmNmZy5vCiBvYmotJChDT05GSUdfSFZDX0NPTlNPTEUpCSs9IGh2Y29uc29sZS5vCiBpZm5lcSAoJChDT05GSUdfUFBDX01FUkdFKSx5KQogb2JqLSQoQ09ORklHX0JPT1RYX1RFWFQpCSs9IGJ0ZXh0Lm8KIGVuZGlmCiBvYmotJChDT05GSUdfSFZDUykJCSs9IGh2Y3NlcnZlci5vCiAKLW9iai0kKENPTkZJR19QUENfUE1BQykJCSs9IHVkYmdfc2NjLm8KLQotb2JqLSQoQ09ORklHX1BQQ19NQVBMRSkJCSs9IHVkYmdfMTY1NTAubwotCiBvYmotJChDT05GSUdfS1BST0JFUykJCSs9IGtwcm9iZXMubwogCi1DRkxBR1NfaW9jdGwzMi5vICs9IC1JZnMvCi0KIGlmbmVxICgkKENPTkZJR19QUENfTUVSR0UpLHkpCiBpZmVxICgkKENPTkZJR19QUENfSVNFUklFUykseSkKIGFyY2gvcHBjNjQva2VybmVsL2hlYWQubzogYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFybWFwLnMKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IGJjZTkwNjUuLjg0YWI1YzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtNzQsNyArNzQsNiBAQAogCURFRklORShJQ0FDSEVMMUxJTkVTSVpFLCBvZmZzZXRvZihzdHJ1Y3QgcHBjNjRfY2FjaGVzLCBpbGluZV9zaXplKSk7CiAJREVGSU5FKElDQUNIRUwxTE9HTElORVNJWkUsIG9mZnNldG9mKHN0cnVjdCBwcGM2NF9jYWNoZXMsIGxvZ19pbGluZV9zaXplKSk7CiAJREVGSU5FKElDQUNIRUwxTElORVNQRVJQQUdFLCBvZmZzZXRvZihzdHJ1Y3QgcHBjNjRfY2FjaGVzLCBpbGluZXNfcGVyX3BhZ2UpKTsKLQlERUZJTkUoUExBVEZPUk0sIG9mZnNldG9mKHN0cnVjdCBzeXN0ZW1jZmcsIHBsYXRmb3JtKSk7CiAJREVGSU5FKFBMQVRGT1JNX0xQQVIsIFBMQVRGT1JNX0xQQVIpOwogCiAJLyogcGFjYSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9wcGM2NC9rZXJuZWwvaGVhZC5TCmluZGV4IDllODA1MGUuLjFjODY5ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9oZWFkLlMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgogI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL2J1Zy5oPgpAQCAtMTcwMSwyMSArMTcwMCw5IEBACiAJSE1UX01FRElVTQkJCS8qIFNldCB0aHJlYWQgcHJpb3JpdHkgdG8gTUVESVVNICovCiAKIAlsZAlyMixQQUNBVE9DKHIxMykKLQlsaQlyNiwwCi0Jc3RiCXI2LFBBQ0FQUk9DRU5BQkxFRChyMTMpCiAKLSNpZm5kZWYgQ09ORklHX1BQQ19JU0VSSUVTCi0JLyogSW5pdGlhbGl6ZSB0aGUgcGFnZSB0YWJsZSBwb2ludGVyIHJlZ2lzdGVyLiAqLwotCUxPQURBRERSKHI2LF9TRFIxKQotCWxkCXI2LDAocjYpCQkvKiBnZXQgdGhlIHZhbHVlIG9mIF9TRFIxCSAqLwotCW10c3ByCVNQUk5fU0RSMSxyNgkJCS8qIHNldCB0aGUgaHRhYiBsb2NhdGlvbgkgKi8KLSNlbmRpZgotCS8qIEluaXRpYWxpemUgdGhlIGZpcnN0IHNlZ21lbnQgdGFibGUgKG9yIFNMQikgZW50cnkJCSAqLwotCWxkCXIzLFBBQ0FTVEFCVklSVChyMTMpCS8qIGdldCBhZGRyIG9mIHNlZ21lbnQgdGFibGUJICovCi1CRUdJTl9GVFJfU0VDVElPTgotCWJsCS5zdGFiX2luaXRpYWxpemUKLUVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX1NMQikKLQlibAkuc2xiX2luaXRpYWxpemUKKwkvKiBEbyBlYXJseSBzZXR1cCBmb3IgdGhhdCBDUFUgKi8KKwlibAkuZWFybHlfc2V0dXBfc2Vjb25kYXJ5CiAKIAkvKiBJbml0aWFsaXplIHRoZSBrZXJuZWwgc3RhY2suICBKdXN0IGEgcmVwZWF0IGZvciBpU2VyaWVzLgkgKi8KIAlMT0FEQUREUihyMyxjdXJyZW50X3NldCkKQEAgLTE3MjQsMzcgKzE3MTEsNiBAQAogCWFkZGkJcjEscjEsVEhSRUFEX1NJWkUtU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKIAlzdGQJcjEsUEFDQUtTQVZFKHIxMykKIAotCWxkCXIzLFBBQ0FTVEFCUkVBTChyMTMpCS8qIGdldCByYWRkciBvZiBzZWdtZW50IHRhYmxlCSAqLwotCW9yaQlyNCxyMywxCQkJLyogdHVybiBvbiB2YWxpZCBiaXQJCSAqLwotCi0jaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCi0JbGkJcjAsLTEJCQkvKiBoeXBlcnZpc29yIGNhbGwgKi8KLQlsaQlyMywxCi0Jc2xkaQlyMyxyMyw2MwkJLyogMHg4MDAwMDAwMDAwMDAwMDAwICovCi0Jb3JpCXIzLHIzLDQJCQkvKiAweDgwMDAwMDAwMDAwMDAwMDQgKi8KLQlzYwkJCQkvKiBIdkNhbGxfc2V0QVNSICovCi0jZWxzZQotCS8qIHNldCB0aGUgQVNSICovCi0JbGQJcjMsc3lzdGVtY2ZnQGdvdChyMikJLyogcjMgPSBwdHIgdG8gc3lzdGVtY2ZnCSAqLwotCWxkCXIzLDAocjMpCi0JbHd6CXIzLFBMQVRGT1JNKHIzKQkJLyogcjMgPSBwbGF0Zm9ybSBmbGFncwkJICovCi0JYW5kaS4JcjMscjMsUExBVEZPUk1fTFBBUgkvKiBUZXN0IGlmIGJpdCAwIGlzIHNldCAoTFBBUiBiaXQpICovCi0JYmVxCTk4ZgkJCS8qIGJyYW5jaCBpZiByZXN1bHQgaXMgMCAgKi8KLQltZnNwcglyMyxTUFJOX1BWUgotCXNyd2kJcjMscjMsMTYKLQljbXB3aQlyMywweDM3CQkJLyogU1N0YXIgICovCi0JYmVxCTk3ZgotCWNtcHdpCXIzLDB4MzYJCQkvKiBJU3RhciAgKi8KLQliZXEJOTdmCi0JY21wd2kJcjMsMHgzNAkJCS8qIFB1bHNhciAqLwotCWJuZQk5OGYKLTk3OglsaQlyMyxIX1NFVF9BU1IJCS8qIGhjYWxsID0gSF9TRVRfQVNSICovCi0JSFZTQwkJCQkvKiBJbnZva2luZyBoY2FsbCAqLwotCWIJOTlmCi05ODoJCQkJCS8qICEocnBhIGh5cGVydmlzb3IpIHx8ICEoc3RhcikgICovCi0JbXRhc3IJcjQJCQkvKiBzZXQgdGhlIHN0YWIgbG9jYXRpb24JICovCi05OToKLSNlbmRpZgogCWxpCXI3LDAKIAltdGxyCXI3CiAKQEAgLTE4OTYsNDAgKzE4NTIsNiBAQAogCW1yCXIzLHIzMQogIAlibAkuZWFybHlfc2V0dXAKIAotCS8qIHNldCB0aGUgQVNSICovCi0JbGQJcjMsUEFDQVNUQUJSRUFMKHIxMykKLQlvcmkJcjQscjMsMQkJCS8qIHR1cm4gb24gdmFsaWQgYml0CQkgKi8KLQlsZAlyMyxzeXN0ZW1jZmdAZ290KHIyKQkvKiByMyA9IHB0ciB0byBzeXN0ZW1jZmcgKi8KLQlsZAlyMywwKHIzKQotCWx3eglyMyxQTEFURk9STShyMykJCS8qIHIzID0gcGxhdGZvcm0gZmxhZ3MgKi8KLQlhbmRpLglyMyxyMyxQTEFURk9STV9MUEFSCS8qIFRlc3QgaWYgYml0IDAgaXMgc2V0IChMUEFSIGJpdCkgKi8KLQliZXEJOThmCQkJLyogYnJhbmNoIGlmIHJlc3VsdCBpcyAwICAqLwotCW1mc3ByCXIzLFNQUk5fUFZSCi0Jc3J3aQlyMyxyMywxNgotCWNtcHdpCXIzLDB4MzcJCQkvKiBTU3RhciAqLwotCWJlcQk5N2YKLQljbXB3aQlyMywweDM2CQkJLyogSVN0YXIgICovCi0JYmVxCTk3ZgotCWNtcHdpCXIzLDB4MzQJCQkvKiBQdWxzYXIgKi8KLQlibmUJOThmCi05NzoJbGkJcjMsSF9TRVRfQVNSCQkvKiBoY2FsbCA9IEhfU0VUX0FTUiAqLwotCUhWU0MJCQkJLyogSW52b2tpbmcgaGNhbGwgKi8KLQliCTk5ZgotOTg6CQkJCQkvKiAhKHJwYSBoeXBlcnZpc29yKSB8fCAhKHN0YXIpICovCi0JbXRhc3IJcjQJCQkvKiBzZXQgdGhlIHN0YWIgbG9jYXRpb24JKi8KLTk5OgotCS8qIFNldCBTRFIxIChoYXNoIHRhYmxlIHBvaW50ZXIpICovCi0JbGQJcjMsc3lzdGVtY2ZnQGdvdChyMikJLyogcjMgPSBwdHIgdG8gc3lzdGVtY2ZnICovCi0JbGQJcjMsMChyMykKLQlsd3oJcjMsUExBVEZPUk0ocjMpCQkvKiByMyA9IHBsYXRmb3JtIGZsYWdzICovCi0JLyogVGVzdCBpZiBiaXQgMCBpcyBzZXQgKExQQVIgYml0KSAqLwotCWFuZGkuCXIzLHIzLFBMQVRGT1JNX0xQQVIKLQlibmUJOThmCQkJLyogYnJhbmNoIGlmIHJlc3VsdCBpcyAhMCAgKi8KLQlMT0FEQUREUihyNixfU0RSMSkJCS8qIE9ubHkgaWYgTk9UIExQQVIgKi8KLQlzdWIJcjYscjYscjI2Ci0JbGQJcjYsMChyNikJCS8qIGdldCB0aGUgdmFsdWUgb2YgX1NEUjEgKi8KLQltdHNwcglTUFJOX1NEUjEscjYJCQkvKiBzZXQgdGhlIGh0YWIgbG9jYXRpb24gICovCi05ODogCiAJTE9BREFERFIocjMsLnN0YXJ0X2hlcmVfY29tbW9uKQogCVNFVF9SRUdfVE9fQ09OU1QocjQsIE1TUl9LRVJORUwpCiAJbXRzcHIJU1BSTl9TUlIwLHIzCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9pZGxlLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9pZGxlLmMKaW5kZXggNzE1YmMwZS4uYjg3OWQzMCAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvaWRsZS5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL2lkbGUuYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1jZmcuaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvbWlzYy5TIGIvYXJjaC9wcGM2NC9rZXJuZWwvbWlzYy5TCmluZGV4IDkxNDYzMmUuLjVlMDg5ZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL21pc2MuUworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9taXNjLlMKQEAgLTc4LDEyICs3OCwxMiBAQAogCW10bHIJcjAKIAlibHIKIAotX0dMT0JBTChjYWxsX2hhbmRsZV9JUlFfZXZlbnQpCitfR0xPQkFMKGNhbGxfX19kb19JUlEpCiAJbWZscglyMAogCXN0ZAlyMCwxNihyMSkKLQlzdGR1CXIxLFRIUkVBRF9TSVpFLTExMihyNikKLQltcglyMSxyNgotCWJsCS5oYW5kbGVfSVJRX2V2ZW50CisJc3RkdQlyMSxUSFJFQURfU0laRS0xMTIocjUpCisJbXIJcjEscjUKKwlibAkuX19kb19JUlEKIAlsZAlyMSwwKHIxKQogCWxkCXIwLDE2KHIxKQogCW10bHIJcjAKQEAgLTE4Niw3ICsxODYsOCBAQAogCWJkbnoJMmIKIAlpc3luYwogCWJscgotCS5wcmV2aW91cyAudGV4dAorCisJLnRleHQKIC8qCiAgKiBMaWtlIGFib3ZlLCBidXQgb25seSBkbyB0aGUgRC1jYWNoZS4KICAqCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9udnJhbS5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvbnZyYW0uYwppbmRleCA0ZmIxYTlmLi5jMGZjZDI5IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9udnJhbS5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL252cmFtLmMKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlIDxhc20vcnRhcy5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+CiAKICN1bmRlZiBERUJVR19OVlJBTQogCkBAIC0xNjcsNyArMTY2LDcgQEAKIAljYXNlIElPQ19OVlJBTV9HRVRfT0ZGU0VUOiB7CiAJCWludCBwYXJ0LCBvZmZzZXQ7CiAKLQkJaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gIT0gUExBVEZPUk1fUE9XRVJNQUMpCisJCWlmIChfbWFjaGluZSAhPSBQTEFURk9STV9QT1dFUk1BQykKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAoY29weV9mcm9tX3VzZXIoJnBhcnQsICh2b2lkIF9fdXNlciopYXJnLCBzaXplb2YocGFydCkpICE9IDApCiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTQ1MCw3ICs0NDksNyBAQAogCSAqIGluIG91ciBudnJhbSwgYXMgQXBwbGUgZGVmaW5lZCBwYXJ0aXRpb25zIHVzZSBwcmV0dHkgbXVjaAogCSAqIGFsbCBvZiB0aGUgc3BhY2UKIAkgKi8KLQlpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSA9PSBQTEFURk9STV9QT1dFUk1BQykKKwlpZiAoX21hY2hpbmUgPT0gUExBVEZPUk1fUE9XRVJNQUMpCiAJCXJldHVybiAtRU5PU1BDOwogCiAJLyogc2VlIGlmIHdlIGhhdmUgYW4gT1MgcGFydGl0aW9uIHRoYXQgbWVldHMgb3VyIG5lZWRzLgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvcGNpLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9wY2kuYwppbmRleCAzMDI0N2ZmLi4zY2VmMWI4IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9wY2kuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9wY2kuYwpAQCAtNTQ4LDYgKzU0OCwxMSBAQAogCWlmIChwcGM2NF9pc2FicmlkZ2VfZGV2ICE9IE5VTEwpCiAJCXByaW50aygiSVNBIGJyaWRnZSBhdCAlc1xuIiwgcGNpX25hbWUocHBjNjRfaXNhYnJpZGdlX2RldikpOwogCisjaWZkZWYgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNCisJLyogbWFwIGluIFBDSSBJL08gc3BhY2UgKi8KKwlwaGJzX3JlbWFwX2lvKCk7CisjZW5kaWYKKwogCXByaW50aygiUENJOiBQcm9iaW5nIFBDSSBoYXJkd2FyZSBkb25lXG4iKTsKIAogCXJldHVybiAwOwpAQCAtMTI3NywxMiArMTI4Miw5IEBACiAJICogRzUgbWFjaGluZXMuLi4gU28gd2hlbiBzb21ldGhpbmcgYXNrcyBmb3IgYnVzIDAgaW8gYmFzZQogCSAqIChidXMgMCBpcyBIVCByb290KSwgd2UgcmV0dXJuIHRoZSBBR1Agb25lIGluc3RlYWQuCiAJICovCi0jaWZkZWYgQ09ORklHX1BQQ19QTUFDCi0JaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gPT0gUExBVEZPUk1fUE9XRVJNQUMgJiYKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpKQorCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0M0IikpCiAJCWlmIChpbl9idXMgPT0gMCkKIAkJCWluX2J1cyA9IDB4ZjA7Ci0jZW5kaWYgLyogQ09ORklHX1BQQ19QTUFDICovCiAKIAkvKiBUaGF0IHN5c2NhbGwgaXNuJ3QgcXVpdGUgY29tcGF0aWJsZSB3aXRoIFBDSSBkb21haW5zLCBidXQgaXQncwogCSAqIHVzZWQgb24gcHJlLWRvbWFpbnMgc2V0dXAuIFdlIHJldHVybiB0aGUgZmlyc3QgbWF0Y2gKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3BjaV9kbi5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvcGNpX2RuLmMKaW5kZXggMWE0NDNhNy4uMTJjNGM5ZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvcGNpX2RuLmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvcGNpX2RuLmMKQEAgLTQzLDcgKzQzLDcgQEAKIAl1MzIgKnJlZ3M7CiAJc3RydWN0IHBjaV9kbiAqcGRuOwogCi0JaWYgKHBoYi0+aXNfZHluYW1pYykKKwlpZiAobWVtX2luaXRfZG9uZSkKIAkJcGRuID0ga21hbGxvYyhzaXplb2YoKnBkbiksIEdGUF9LRVJORUwpOwogCWVsc2UKIAkJcGRuID0gYWxsb2NfYm9vdG1lbShzaXplb2YoKnBkbikpOwpAQCAtMTIwLDYgKzEyMCwxNCBAQAogCXJldHVybiBOVUxMOwogfQogCisvKiogCisgKiBwY2lfZGV2c19waGJfaW5pdF9keW5hbWljIC0gc2V0dXAgcGNpIGRldmljZXMgdW5kZXIgdGhpcyBQSEIKKyAqIHBoYjogcGNpLXRvLWhvc3QgYnJpZGdlICh0b3AtbGV2ZWwgYnJpZGdlIGNvbm5lY3RpbmcgdG8gY3B1KQorICoKKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYm90aCBkdXJpbmcgYm9vdCwgKGJlZm9yZSB0aGUgbWVtb3J5CisgKiBzdWJzeXN0ZW0gaXMgc2V0IHVwLCBiZWZvcmUga21hbGxvYyBpcyB2YWxpZCkgYW5kIGR1cmluZyB0aGUgCisgKiBkeW5hbWljIGxwYXIgb3BlcmF0aW9uIG9mIGFkZGluZyBhIFBIQiB0byBhIHJ1bm5pbmcgc3lzdGVtLgorICovCiB2b2lkIF9fZGV2aW5pdCBwY2lfZGV2c19waGJfaW5pdF9keW5hbWljKHN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqIGRuID0gKHN0cnVjdCBkZXZpY2Vfbm9kZSAqKSBwaGItPmFyY2hfZGF0YTsKQEAgLTIwMSw5ICsyMDksMTQgQEAKIAkubm90aWZpZXJfY2FsbCA9IHBjaV9kbl9yZWNvbmZpZ19ub3RpZmllciwKIH07CiAKLS8qCi0gKiBBY3R1YWxseSBpbml0aWFsaXplIHRoZSBwaGJzLgotICogVGhlIGJ1c3dhbGsgb24gdGhpcyBwaGIgaGFzIG5vdCBoYXBwZW5lZCB5ZXQuCisvKiogCisgKiBwY2lfZGV2c19waGJfaW5pdCAtIEluaXRpYWxpemUgcGhicyBhbmQgcGNpIGRldnMgdW5kZXIgdGhlbS4KKyAqIAorICogVGhpcyByb3V0aW5lIHdhbGtzIG92ZXIgYWxsIHBoYidzIChwY2ktaG9zdCBicmlkZ2VzKSBvbiB0aGUKKyAqIHN5c3RlbSwgYW5kIHNldHMgdXAgYXNzb3J0ZWQgcGNpLXJlbGF0ZWQgc3RydWN0dXJlcyAKKyAqIChpbmNsdWRpbmcgcGNpIGluZm8gaW4gdGhlIGRldmljZSBub2RlIHN0cnVjdHMpIGZvciBlYWNoCisgKiBwY2kgZGV2aWNlIGZvdW5kIHVuZGVybmVhdGguICBUaGlzIHJvdXRpbmUgcnVucyBvbmNlLAorICogZWFybHkgaW4gdGhlIGJvb3Qgc2VxdWVuY2UuCiAgKi8KIHZvaWQgX19pbml0IHBjaV9kZXZzX3BoYl9pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9wcm9tLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9wcm9tLmMKaW5kZXggMzQwMmZiZS4uZmJhZDJjMyAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvcHJvbS5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3Byb20uYwpAQCAtMzE4LDcgKzMxOCw3IEBACiAJCX0KIAogCQkvKiBXZSBvZmZzZXQgaXJxIG51bWJlcnMgZm9yIHRoZSB1MyBNUElDIGJ5IDEyOCBpbiBQb3dlck1hYyAqLwotCQlpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSA9PSBQTEFURk9STV9QT1dFUk1BQyAmJiBpYyAmJiBpYy0+cGFyZW50KSB7CisJCWlmIChfbWFjaGluZSA9PSBQTEFURk9STV9QT1dFUk1BQyAmJiBpYyAmJiBpYy0+cGFyZW50KSB7CiAJCQljaGFyICpuYW1lID0gZ2V0X3Byb3BlcnR5KGljLT5wYXJlbnQsICJuYW1lIiwgTlVMTCk7CiAJCQlpZiAobmFtZSAmJiAhc3RyY21wKG5hbWUsICJ1MyIpKQogCQkJCW5wLT5pbnRyc1tpbnRyY291bnRdLmxpbmUgKz0gMTI4OwpAQCAtMTA2NSw3ICsxMDY1LDcgQEAKIAlwcm9wID0gKHUzMiAqKW9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LHBsYXRmb3JtIiwgTlVMTCk7CiAJaWYgKHByb3AgPT0gTlVMTCkKIAkJcmV0dXJuIDA7Ci0Jc3lzdGVtY2ZnLT5wbGF0Zm9ybSA9ICpwcm9wOworCV9tYWNoaW5lID0gKnByb3A7CiAKIAkvKiBjaGVjayBpZiBpb21tdSBpcyBmb3JjZWQgb24gb3Igb2ZmICovCiAJaWYgKG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LGlvbW11LW9mZiIsIE5VTEwpICE9IE5VTEwpCkBAIC0xMjMwLDExICsxMjMwLDggQEAKIAlvZl9zY2FuX2ZsYXRfZHQoZWFybHlfaW5pdF9kdF9zY2FuX21lbW9yeSwgTlVMTCk7CiAJbG1iX2VuZm9yY2VfbWVtb3J5X2xpbWl0KG1lbW9yeV9saW1pdCk7CiAJbG1iX2FuYWx5emUoKTsKLQlzeXN0ZW1jZmctPnBoeXNpY2FsTWVtb3J5U2l6ZSA9IGxtYl9waHlzX21lbV9zaXplKCk7CiAJbG1iX3Jlc2VydmUoMCwgX19wYShrbGltaXQpKTsKIAotCURCRygiUGh5cy4gbWVtOiAlbHhcbiIsIHN5c3RlbWNmZy0+cGh5c2ljYWxNZW1vcnlTaXplKTsKLQogCS8qIFJlc2VydmUgTE1CIHJlZ2lvbnMgdXNlZCBieSBrZXJuZWwsIGluaXRyZCwgZHQsIGV0Yy4uLiAqLwogCWVhcmx5X3Jlc2VydmVfbWVtKCk7CiAKQEAgLTE3NTMsNyArMTc1MCw3IEBACiAJLyogV2UgZG9uJ3Qgc3VwcG9ydCB0aGF0IGZ1bmN0aW9uIG9uIFBvd2VyTWFjLCBhdCBsZWFzdAogCSAqIG5vdCB5ZXQKIAkgKi8KLQlpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSA9PSBQTEFURk9STV9QT1dFUk1BQykKKwlpZiAoX21hY2hpbmUgPT0gUExBVEZPUk1fUE9XRVJNQUMpCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogZml4IHVwIG5ldyBub2RlJ3MgbGludXhfcGhhbmRsZSBmaWVsZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvcHJvbV9pbml0LmMgYi9hcmNoL3BwYzY0L2tlcm5lbC9wcm9tX2luaXQuYwppbmRleCBlNGM4ODBkYS4uNjM3NWY0MCAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvcHJvbV9pbml0LmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvcHJvbV9pbml0LmMKQEAgLTE5MzQsNyArMTkzNCw4IEBACiAJLyoKIAkgKiBPbiBwU2VyaWVzLCBpbmZvcm0gdGhlIGZpcm13YXJlIGFib3V0IG91ciBjYXBhYmlsaXRpZXMKIAkgKi8KLQlpZiAoUkVMT0Mob2ZfcGxhdGZvcm0pICYgUExBVEZPUk1fUFNFUklFUykKKwlpZiAoUkVMT0Mob2ZfcGxhdGZvcm0pID09IFBMQVRGT1JNX1BTRVJJRVMgfHwKKwkgICAgUkVMT0Mob2ZfcGxhdGZvcm0pID09IFBMQVRGT1JNX1BTRVJJRVNfTFBBUikKIAkJcHJvbV9zZW5kX2NhcGFiaWxpdGllcygpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc28uYyBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc28uYwppbmRleCA0YWFjZjUyLi4xYmJhY2FjIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvLmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvdmRzby5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+CiAjaW5jbHVkZSA8YXNtL3Zkc28uaD4KIAogI3VuZGVmIERFQlVHCkBAIC0xNzksNyArMTgwLDcgQEAKIAkgKiBMYXN0IHBhZ2UgaXMgc3lzdGVtY2ZnLgogCSAqLwogCWlmICgodm1hLT52bV9lbmQgLSBhZGRyZXNzKSA8PSBQQUdFX1NJWkUpCi0JCXBnID0gdmlydF90b19wYWdlKHN5c3RlbWNmZyk7CisJCXBnID0gdmlydF90b19wYWdlKF9zeXN0ZW1jZmcpOwogCWVsc2UKIAkJcGcgPSB2aXJ0X3RvX3BhZ2UodmJhc2UgKyBvZmZzZXQpOwogCkBAIC02MDQsNyArNjA1LDcgQEAKIAkJZ2V0X3BhZ2UocGcpOwogCX0KIAotCWdldF9wYWdlKHZpcnRfdG9fcGFnZShzeXN0ZW1jZmcpKTsKKwlnZXRfcGFnZSh2aXJ0X3RvX3BhZ2UoX3N5c3RlbWNmZykpOwogfQogCiBpbnQgaW5fZ2F0ZV9hcmVhX25vX3Rhc2sodW5zaWduZWQgbG9uZyBhZGRyKQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL2dldHRpbWVvZmRheS5TIGIvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL2dldHRpbWVvZmRheS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjQzYzFkLi4wMDAwMDAwCi0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9nZXR0aW1lb2ZkYXkuUworKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKgotICogVXNlcmxhbmQgaW1wbGVtZW50YXRpb24gb2YgZ2V0dGltZW9mZGF5KCkgZm9yIDMyIGJpdHMgcHJvY2Vzc2VzIGluIGEKLSAqIHBwYzY0IGtlcm5lbCBmb3IgdXNlIGluIHRoZSB2RFNPCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0IEJlbmphbWluIEhlcnJlbnNjaG11aWR0IChiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcpLCBJQk0gQ29ycC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL3Zkc28uaD4KLSNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0KLQkudGV4dAotLyoKLSAqIEV4YWN0IHByb3RvdHlwZSBvZiBnZXR0aW1lb2ZkYXkKLSAqCi0gKiBpbnQgX19rZXJuZWxfZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0diwgc3RydWN0IHRpbWV6b25lICp0eik7Ci0gKgotICovCi1WX0ZVTkNUSU9OX0JFR0lOKF9fa2VybmVsX2dldHRpbWVvZmRheSkKLSAgLmNmaV9zdGFydHByb2MKLQltZmxyCXIxMgotICAuY2ZpX3JlZ2lzdGVyIGxyLHIxMgotCi0JbXIJcjEwLHIzCQkJLyogcjEwIHNhdmVzIHR2ICovCi0JbXIJcjExLHI0CQkJLyogcjExIHNhdmVzIHR6ICovCi0JYmwJX19nZXRfZGF0YXBhZ2VAbG9jYWwJLyogZ2V0IGRhdGEgcGFnZSAqLwotCW1yCXI5LCByMwkJCS8qIGRhdGFwYWdlIHB0ciBpbiByOSAqLwotCWJsCV9fZG9fZ2V0X3hzZWNAbG9jYWwJLyogZ2V0IHhzZWMgZnJvbSB0YiAmIGtlcm5lbCAqLwotCWJuZS0JMmYJCQkvKiBvdXQgb2YgbGluZSAtPiBkbyBzeXNjYWxsICovCi0KLQkvKiBzZWNvbmRzIGFyZSB4c2VjID4+IDIwICovCi0Jcmx3aW5tCXI1LHI0LDEyLDIwLDMxCi0Jcmx3aW1pCXI1LHIzLDEyLDAsMTkKLQlzdHcJcjUsVFZBTDMyX1RWX1NFQyhyMTApCi0KLQkvKiBnZXQgcmVtYWluaW5nIHhzZWMgYW5kIGNvbnZlcnQgdG8gdXNlYy4gd2Ugc2NhbGUKLQkgKiB1cCByZW1haW5pbmcgeHNlYyBieSAxMiBiaXRzIGFuZCBnZXQgdGhlIHRvcCAzMiBiaXRzCi0JICogb2YgdGhlIG11bHRpcGxpY2F0aW9uCi0JICovCi0Jcmx3aW5tCXI1LHI0LDEyLDAsMTkKLQlsaXMJcjYsMTAwMDAwMEBoCi0Jb3JpCXI2LHI2LDEwMDAwMDBAbAotCW11bGh3dQlyNSxyNSxyNgotCXN0dwlyNSxUVkFMMzJfVFZfVVNFQyhyMTApCi0KLQljbXBsaQljcjAscjExLDAJCS8qIGNoZWNrIGlmIHR6IGlzIE5VTEwgKi8KLQliZXEJMWYKLQlsd3oJcjQsQ0ZHX1RaX01JTlVURVdFU1QocjkpLyogZmlsbCB0eiAqLwotCWx3eglyNSxDRkdfVFpfRFNUVElNRShyOSkKLQlzdHcJcjQsVFpPTkVfVFpfTUlOV0VTVChyMTEpCi0Jc3R3CXI1LFRaT05FX1RaX0RTVFRJTUUocjExKQotCi0xOgltdGxyCXIxMgotCWxpCXIzLDAKLQlibHIKLQotMjoJbXIJcjMscjEwCi0JbXIJcjQscjExCi0JbGkJcjAsX19OUl9nZXR0aW1lb2ZkYXkKLQlzYwotCWIJMWIKLSAgLmNmaV9lbmRwcm9jCi1WX0ZVTkNUSU9OX0VORChfX2tlcm5lbF9nZXR0aW1lb2ZkYXkpCi0KLS8qCi0gKiBUaGlzIGlzIHRoZSBjb3JlIG9mIGdldHRpbWVvZmRheSgpLCBpdCByZXR1cm5zIHRoZSB4c2VjCi0gKiB2YWx1ZSBpbiByMyAmIHI0IGFuZCBleHBlY3RzIHRoZSBkYXRhcGFnZSBwdHIgKG5vbiBjbG9iYmVyZWQpCi0gKiBpbiByOS4gY2xvYmJlcnMgcjAscjQscjUscjYscjcscjgKLSovCi1fX2RvX2dldF94c2VjOgotICAuY2ZpX3N0YXJ0cHJvYwotCS8qIENoZWNrIGZvciB1cGRhdGUgY291bnQgJiBsb2FkIHZhbHVlcy4gV2UgdXNlIHRoZSBsb3cKLQkgKiBvcmRlciAzMiBiaXRzIG9mIHRoZSB1cGRhdGUgY291bnQKLQkgKi8KLTE6CWx3eglyOCwoQ0ZHX1RCX1VQREFURV9DT1VOVCs0KShyOSkKLQlhbmRpLglyMCxyOCwxCQkJLyogcGVuZGluZyB1cGRhdGUgPyBsb29wICovCi0JYm5lLQkxYgotCXhvcglyMCxyOCxyOAkJLyogY3JlYXRlIGRlcGVuZGVuY3kgKi8KLQlhZGQJcjkscjkscjAKLQotCS8qIExvYWQgb3JpZyBzdGFtcCAob2Zmc2V0IHRvIFRCKSAqLwotCWx3eglyNSxDRkdfVEJfT1JJR19TVEFNUChyOSkKLQlsd3oJcjYsKENGR19UQl9PUklHX1NUQU1QKzQpKHI5KQotCi0JLyogR2V0IGEgc3RhYmxlIFRCIHZhbHVlICovCi0yOgltZnRidQlyMwotCW1mdGJsCXI0Ci0JbWZ0YnUJcjAKLQljbXBsCWNyMCxyMyxyMAotCWJuZS0JMmIKLQotCS8qIFN1YnN0cmFjdCB0YiBvcmlnIHN0YW1wLiBJZiB0aGUgaGlnaCBwYXJ0IGlzIG5vbi16ZXJvLCB3ZSBqdW1wIHRvIHRoZQotCSAqIHNsb3cgcGF0aCB3aGljaCBjYWxsIHRoZSBzeXNjYWxsLiBJZiBpdCdzIG9rLCB0aGVuIHdlIGhhdmUgb3VyIDMyIGJpdHMKLQkgKiB0Yl90aWNrcyB2YWx1ZSBpbiByNwotCSAqLwotCXN1YmZjCXI3LHI2LHI0Ci0Jc3ViZmUuCXIwLHI1LHIzCi0JYm5lLQkzZgotCi0JLyogTG9hZCBzY2FsZSBmYWN0b3IgJiBkbyBtdWx0aXBsaWNhdGlvbiAqLwotCWx3eglyNSxDRkdfVEJfVE9fWFMocjkpCS8qIGxvYWQgdmFsdWVzICovCi0JbHd6CXI2LChDRkdfVEJfVE9fWFMrNCkocjkpCi0JbXVsaHd1CXI0LHI3LHI1Ci0JbXVsaHd1CXI2LHI3LHI2Ci0JbXVsbHcJcjAscjcscjUKLQlhZGRjCXI2LHI2LHIwCi0KLQkvKiBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIHRoZSBzY2FsZWQgeHNlYyB2YWx1ZSBpbiByNCArIFhFUjpDQQotCSAqIHdlIGxvYWQgJiBhZGQgdGhlIHN0YW1wIHNpbmNlIGVwb2NoCi0JICovCi0JbHd6CXI1LENGR19TVEFNUF9YU0VDKHI5KQotCWx3eglyNiwoQ0ZHX1NUQU1QX1hTRUMrNCkocjkpCi0JYWRkZQlyNCxyNCxyNgotCWFkZHplCXIzLHI1Ci0KLQkvKiBXZSBub3cgaGF2ZSBvdXIgcmVzdWx0IGluIHIzLHI0LiBXZSBjcmVhdGUgYSBmYWtlIGRlcGVuZGVuY3kKLQkgKiBvbiB0aGF0IHJlc3VsdCBhbmQgcmUtY2hlY2sgdGhlIGNvdW50ZXIKLQkgKi8KLQl4b3IJcjAscjQscjQKLQlhZGQJcjkscjkscjAKLQlsd3oJcjAsKENGR19UQl9VUERBVEVfQ09VTlQrNCkocjkpCi0gICAgICAgIGNtcGwgICAgY3IwLHI4LHIwCQkvKiBjaGVjayBpZiB1cGRhdGVkICovCi0JYm5lLQkxYgotCi0JLyogV2FybmluZyAhIFRoZSBjYWxsZXIgZXhwZWN0cyBDUjpFUSB0byBiZSBzZXQgdG8gaW5kaWNhdGUgYQotCSAqIHN1Y2Nlc3NmdWwgY2FsY3VsYXRpb24gKHNvIGl0IHdvbid0IGZhbGxiYWNrIHRvIHRoZSBzeXNjYWxsCi0JICogbWV0aG9kKS4gV2UgaGF2ZSBvdmVycmlkZW4gdGhhdCBDUiBiaXQgaW4gdGhlIGNvdW50ZXIgY2hlY2ssCi0JICogYnV0IGZvcnR1bmF0ZWx5LCB0aGUgbG9vcCBleGl0IGNvbmRpdGlvbiBfaXNfIENSOkVRIHNldCwgc28KLQkgKiB3ZSBjYW4gZXhpdCBzYWZlbHkgaGVyZS4gSWYgeW91IGNoYW5nZSB0aGlzIGNvZGUsIGJlIGNhcmVmdWwKLQkgKiBvZiB0aGF0IHNpZGUgZWZmZWN0LgotCSAqLwotMzoJYmxyCi0gIC5jZmlfZW5kcHJvYwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L2dldHRpbWVvZmRheS5TIGIvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L2dldHRpbWVvZmRheS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmRmODAyLi4wMDAwMDAwCi0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC9nZXR0aW1lb2ZkYXkuUworKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBVc2VybGFuZCBpbXBsZW1lbnRhdGlvbiBvZiBnZXR0aW1lb2ZkYXkoKSBmb3IgNjQgYml0cyBwcm9jZXNzZXMgaW4gYQotICogcHBjNjQga2VybmVsIGZvciB1c2UgaW4gdGhlIHZEU08KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQmVuamFtaW4gSGVycmVuc2NobXVpZHQgKGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZyksCi0gKiAgICAgICAgICAgICAgICAgICAgSUJNIENvcnAuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgotI2luY2x1ZGUgPGFzbS92ZHNvLmg+Ci0jaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+Ci0KLQkudGV4dAotLyoKLSAqIEV4YWN0IHByb3RvdHlwZSBvZiBnZXR0aW1lb2ZkYXkKLSAqCi0gKiBpbnQgX19rZXJuZWxfZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0diwgc3RydWN0IHRpbWV6b25lICp0eik7Ci0gKgotICovCi1WX0ZVTkNUSU9OX0JFR0lOKF9fa2VybmVsX2dldHRpbWVvZmRheSkKLSAgLmNmaV9zdGFydHByb2MKLQltZmxyCXIxMgotICAuY2ZpX3JlZ2lzdGVyIGxyLHIxMgotCi0JbXIJcjExLHIzCQkJLyogcjExIGhvbGRzIHR2ICovCi0JbXIJcjEwLHI0CQkJLyogcjEwIGhvbGRzIHR6ICovCi0JYmwJVl9MT0NBTF9GVU5DKF9fZ2V0X2RhdGFwYWdlKQkJLyogZ2V0IGRhdGEgcGFnZSAqLwotCWJsCVZfTE9DQUxfRlVOQyhfX2RvX2dldF94c2VjKQkJLyogZ2V0IHhzZWMgZnJvbSB0YiAmIGtlcm5lbCAqLwotCWxpcyAgICAgcjcsMTUJCQkvKiByNyA9IDEwMDAwMDAgPSBVU0VDX1BFUl9TRUMgKi8KLQlvcmkgICAgIHI3LHI3LDE2OTYwCi0JcmxkaWNsICByNSxyNCw0NCwyMAkJLyogcjUgPSBzZWMgPSB4c2VjIC8gWFNFQ19QRVJfU0VDICovCi0JcmxkaWNyICByNixyNSwyMCw0MwkJLyogcjYgPSBzZWMgKiBYU0VDX1BFUl9TRUMgKi8KLQlzdGQJcjUsVFZBTDY0X1RWX1NFQyhyMTEpCS8qIHN0b3JlIHNlYyBpbiB0diAqLwotCXN1YmYJcjAscjYscjQJCS8qIHIwID0geHNlYyA9ICh4c2VjIC0gcjYpICovCi0JbXVsbGQgICByMCxyMCxyNwkJLyogdXNlYyA9ICh4c2VjICogVVNFQ19QRVJfU0VDKSAvIFhTRUNfUEVSX1NFQyAqLwotCXJsZGljbCAgcjAscjAsNDQsMjAKLQljbXBsZGkJY3IwLHIxMCwwCQkvKiBjaGVjayBpZiB0eiBpcyBOVUxMICovCi0Jc3RkCXIwLFRWQUw2NF9UVl9VU0VDKHIxMSkJLyogc3RvcmUgdXNlYyBpbiB0diAqLwotCWJlcQkxZgotCWx3eglyNCxDRkdfVFpfTUlOVVRFV0VTVChyMykvKiBmaWxsIHR6ICovCi0JbHd6CXI1LENGR19UWl9EU1RUSU1FKHIzKQotCXN0dwlyNCxUWk9ORV9UWl9NSU5XRVNUKHIxMCkKLQlzdHcJcjUsVFpPTkVfVFpfRFNUVElNRShyMTApCi0xOgltdGxyCXIxMgotCWxpCXIzLDAJCQkvKiBhbHdheXMgc3VjY2VzcyAqLwotCWJscgotICAuY2ZpX2VuZHByb2MKLVZfRlVOQ1RJT05fRU5EKF9fa2VybmVsX2dldHRpbWVvZmRheSkKLQotCi0vKgotICogVGhpcyBpcyB0aGUgY29yZSBvZiBnZXR0aW1lb2ZkYXkoKSwgaXQgcmV0dXJucyB0aGUgeHNlYwotICogdmFsdWUgaW4gcjQgYW5kIGV4cGVjdHMgdGhlIGRhdGFwYWdlIHB0ciAobm9uIGNsb2JiZXJlZCkKLSAqIGluIHIzLiBjbG9iYmVycyByMCxyNCxyNSxyNixyNyxyOAotKi8KLVZfRlVOQ1RJT05fQkVHSU4oX19kb19nZXRfeHNlYykKLSAgLmNmaV9zdGFydHByb2MKLQkvKiBjaGVjayBmb3IgdXBkYXRlIGNvdW50ICYgbG9hZCB2YWx1ZXMgKi8KLTE6CWxkCXI3LENGR19UQl9VUERBVEVfQ09VTlQocjMpCi0JYW5kaS4JcjAscjQsMQkJCS8qIHBlbmRpbmcgdXBkYXRlID8gbG9vcCAqLwotCWJuZS0JMWIKLQl4b3IJcjAscjQscjQJCS8qIGNyZWF0ZSBkZXBlbmRlbmN5ICovCi0JYWRkCXIzLHIzLHIwCi0KLQkvKiBHZXQgVEIgJiBvZmZzZXQgaXQgKi8KLQltZnRiCXI4Ci0JbGQJcjksQ0ZHX1RCX09SSUdfU1RBTVAocjMpCi0Jc3ViZglyOCxyOSxyOAotCi0JLyogU2NhbGUgcmVzdWx0ICovCi0JbGQJcjUsQ0ZHX1RCX1RPX1hTKHIzKQotCW11bGhkdQlyOCxyOCxyNQotCi0JLyogQWRkIHN0YW1wIHNpbmNlIGVwb2NoICovCi0JbGQJcjYsQ0ZHX1NUQU1QX1hTRUMocjMpCi0JYWRkCXI0LHI2LHI4Ci0KLQl4b3IJcjAscjQscjQKLQlhZGQJcjMscjMscjAKLQlsZAlyMCxDRkdfVEJfVVBEQVRFX0NPVU5UKHIzKQotICAgICAgICBjbXBsZCAgIGNyMCxyMCxyNwkJLyogY2hlY2sgaWYgdXBkYXRlZCAqLwotCWJuZS0JMWIKLQlibHIKLSAgLmNmaV9lbmRwcm9jCi1WX0ZVTkNUSU9OX0VORChfX2RvX2dldF94c2VjKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zZXR1cC5jCmluZGV4IGJmMTg0OWQuLjQ4MTgwNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NldHVwLmMKQEAgLTU4Nyw2ICs1ODcsOCBAQAogdW5zaWduZWQgaW50IGRjYWNoZV9wYXJpdHlfdGwxX29jY3VycmVkOwogdW5zaWduZWQgaW50IGljYWNoZV9wYXJpdHlfdGwxX29jY3VycmVkOwogCitzdGF0aWMgaW50IG5jcHVzX3Byb2JlZDsKKwogc3RhdGljIGludCBzaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpfX3VudXNlZCkKIHsKIAlzZXFfcHJpbnRmKG0sIApAQCAtNTk1LDggKzU5Nyw4IEBACiAJCSAgICJwcm9tbGliXHRcdDogVmVyc2lvbiAzIFJldmlzaW9uICVkXG4iCiAJCSAgICJwcm9tXHRcdDogJWQuJWQuJWRcbiIKIAkJICAgInR5cGVcdFx0OiBzdW40dVxuIgotCQkgICAibmNwdXMgcHJvYmVkXHQ6ICVsZFxuIgotCQkgICAibmNwdXMgYWN0aXZlXHQ6ICVsZFxuIgorCQkgICAibmNwdXMgcHJvYmVkXHQ6ICVkXG4iCisJCSAgICJuY3B1cyBhY3RpdmVcdDogJWRcbiIKIAkJICAgIkQkIHBhcml0eSB0bDFcdDogJXVcbiIKIAkJICAgIkkkIHBhcml0eSB0bDFcdDogJXVcbiIKICNpZm5kZWYgQ09ORklHX1NNUApAQCAtNjEwLDggKzYxMiw4IEBACiAJCSAgIHByb21fcHJldiA+PiAxNiwKIAkJICAgKHByb21fcHJldiA+PiA4KSAmIDB4ZmYsCiAJCSAgIHByb21fcHJldiAmIDB4ZmYsCi0JCSAgIChsb25nKW51bV9wb3NzaWJsZV9jcHVzKCksCi0JCSAgIChsb25nKW51bV9vbmxpbmVfY3B1cygpLAorCQkgICBuY3B1c19wcm9iZWQsCisJCSAgIG51bV9vbmxpbmVfY3B1cygpLAogCQkgICBkY2FjaGVfcGFyaXR5X3RsMV9vY2N1cnJlZCwKIAkJICAgaWNhY2hlX3Bhcml0eV90bDFfb2NjdXJyZWQKICNpZm5kZWYgQ09ORklHX1NNUApAQCAtNjc3LDYgKzY3OSwxNSBAQAogCWludCBpLCBlcnI7CiAKIAllcnIgPSAtRU5PTUVNOworCisJLyogQ291bnQgdGhlIG51bWJlciBvZiBwaHlzaWNhbGx5IHByZXNlbnQgcHJvY2Vzc29ycyBpbgorCSAqIHRoZSBtYWNoaW5lLCBldmVuIG9uIHVuaXByb2Nlc3Nvciwgc28gdGhhdCAvcHJvYy9jcHVpbmZvCisJICogb3V0cHV0IGlzIGNvbnNpc3RlbnQgd2l0aCAyLjQueAorCSAqLworCW5jcHVzX3Byb2JlZCA9IDA7CisJd2hpbGUgKCFjcHVfZmluZF9ieV9pbnN0YW5jZShuY3B1c19wcm9iZWQsIE5VTEwsIE5VTEwpKQorCQluY3B1c19wcm9iZWQrKzsKKwogCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKIAkJaWYgKGNwdV9wb3NzaWJsZShpKSkgewogCQkJc3RydWN0IGNwdSAqcCA9IGttYWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYwppbmRleCA3OTdhNjU0Li42ZWZjMDNkZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSA8YXNtL3N0YXJmaXJlLmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgogCi1leHRlcm4gaW50IGxpbnV4X251bV9jcHVzOwogZXh0ZXJuIHZvaWQgY2FsaWJyYXRlX2RlbGF5KHZvaWQpOwogCiAvKiBQbGVhc2UgZG9uJ3QgbWFrZSB0aGlzIHN0dWZmIGluaXRkYXRhISEhICAtLURhdmVNICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jCmluZGV4IDRjZjMxYTJhLi44NGM3M2EzIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYwpAQCAtMjY4LDkgKzI2OCwxMCBAQAogc3RhdGljIERFRklORV9TUElOTE9DSyhkZXZpY2VzX2xvY2spOwogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlcyA9IExJU1RfSEVBRF9JTklUKGRldmljZXMpOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdW1sX25ldF9kcml2ZXIgPSB7Ci0JLm5hbWUgID0gRFJJVkVSX05BTUUsCi0JLmJ1cyAgID0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdW1sX25ldF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgID0gRFJJVkVSX05BTUUsCisJfSwKIH07CiBzdGF0aWMgaW50IGRyaXZlcl9yZWdpc3RlcmVkOwogCkBAIC0zMTcsNyArMzE4LDcgQEAKIAogCS8qIHN5c2ZzIHJlZ2lzdGVyICovCiAJaWYgKCFkcml2ZXJfcmVnaXN0ZXJlZCkgewotCQlkcml2ZXJfcmVnaXN0ZXIoJnVtbF9uZXRfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ1bWxfbmV0X2RyaXZlcik7CiAJCWRyaXZlcl9yZWdpc3RlcmVkID0gMTsKIAl9CiAJZGV2aWNlLT5wZGV2LmlkID0gbjsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMKaW5kZXggYjJjODYyNS4uOTM4OTg5MSAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMKQEAgLTgyMyw5ICs4MjMsMTAgQEAKIAogX19pbml0Y2FsbCh1YmRfbWNfaW5pdCk7CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB1YmRfZHJpdmVyID0gewotCS5uYW1lICA9IERSSVZFUl9OQU1FLAotCS5idXMgICA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHViZF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgID0gRFJJVkVSX05BTUUsCisJfSwKIH07CiAKIGludCB1YmRfaW5pdCh2b2lkKQpAQCAtODUwLDcgKzg1MSw3IEBACiAJCWlmIChyZWdpc3Rlcl9ibGtkZXYoZmFrZV9tYWpvciwgInViZCIpKQogCQkJcmV0dXJuIC0xOwogCX0KLQlkcml2ZXJfcmVnaXN0ZXIoJnViZF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdWJkX2RyaXZlcik7CiAJZm9yIChpID0gMDsgaSA8IE1BWF9ERVY7IGkrKykgCiAJCXViZF9hZGQoaSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybS1pc3MvbmV0d29yay5jIGIvYXJjaC94dGVuc2EvcGxhdGZvcm0taXNzL25ldHdvcmsuYwppbmRleCA5NmI5YmI0Li4wZGM1NWNjIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybS1pc3MvbmV0d29yay5jCisrKyBiL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9uZXR3b3JrLmMKQEAgLTYxNiw5ICs2MTYsMTAgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgaXNzX25ldF9kcml2ZXIgPSB7Ci0JLm5hbWUgID0gRFJJVkVSX05BTUUsCi0JLmJ1cyAgID0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXNzX25ldF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgID0gRFJJVkVSX05BTUUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgZHJpdmVyX3JlZ2lzdGVyZWQ7CkBAIC02NjksNyArNjcwLDcgQEAKIAkvKiBzeXNmcyByZWdpc3RlciAqLwogCiAJaWYgKCFkcml2ZXJfcmVnaXN0ZXJlZCkgewotCQlkcml2ZXJfcmVnaXN0ZXIoJmlzc19uZXRfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpc3NfbmV0X2RyaXZlcik7CiAJCWRyaXZlcl9yZWdpc3RlcmVkID0gMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9nbHVlLmMgYi9kcml2ZXJzL2FjcGkvZ2x1ZS5jCmluZGV4IDM5MzdhZGYuLmFhOTkzNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9nbHVlLmMKKysrIGIvZHJpdmVycy9hY3BpL2dsdWUuYwpAQCAtMjAzLDYgKzIwMyw3IEBACiAJYWNwaV9nZXRfZGV2aWNlcyhQQ0lfUk9PVF9ISURfU1RSSU5HLCBmaW5kX3BjaV9yb290YnJpZGdlLCAmZmluZCwgTlVMTCk7CiAJcmV0dXJuIGZpbmQuaGFuZGxlOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoYWNwaV9nZXRfcGNpX3Jvb3RicmlkZ2VfaGFuZGxlKTsKIAogLyogR2V0IGRldmljZSdzIGhhbmRsZXIgcGVyIGl0cyBhZGRyZXNzIHVuZGVyIGl0cyBwYXJlbnQgKi8KIHN0cnVjdCBhY3BpX2ZpbmRfY2hpbGQgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaG9yaXpvbi5jIGIvZHJpdmVycy9hdG0vaG9yaXpvbi5jCmluZGV4IDBjZGVkMDQuLjgyMWM4MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2hvcml6b24uYworKysgYi9kcml2ZXJzL2F0bS9ob3Jpem9uLmMKQEAgLTE1MTEsOCArMTUxMSw4IEBACiAgICAgLy8gYS5rLmEuIHByZXBhcmUgdGhlIGNoYW5uZWwgYW5kIHJlbWVtYmVyIHRoYXQgd2UgaGF2ZSBkb25lIHNvLgogICAgIAogICAgIHR4X2NoX2Rlc2MgKiB0eF9kZXNjID0gJm1lbW1hcC0+dHhfZGVzY3NbdHhfY2hhbm5lbF07Ci0gICAgdTE2IHJkX3B0cjsKLSAgICB1MTYgd3JfcHRyOworICAgIHUzMiByZF9wdHI7CisgICAgdTMyIHdyX3B0cjsKICAgICB1MTYgY2hhbm5lbCA9IHZjYy0+Y2hhbm5lbDsKICAgICAKICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwppbmRleCA2ZDQ3MzZlLi44ODI3ZGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwpAQCAtMjAsNiArMjAsOCBAQAogCiAjaW5jbHVkZSAiYmFzZS5oIgogCisjZGVmaW5lIHRvX3BsYXRmb3JtX2RyaXZlcihkcnYpCShjb250YWluZXJfb2YoKGRydiksIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIsIGRyaXZlcikpCisKIHN0cnVjdCBkZXZpY2UgcGxhdGZvcm1fYnVzID0gewogCS5idXNfaWQJCT0gInBsYXRmb3JtIiwKIH07CkBAIC0zNTQsNiArMzU2LDc3IEBACiAJcmV0dXJuIEVSUl9QVFIocmV0dmFsKTsKIH0KIAorc3RhdGljIGludCBwbGF0Zm9ybV9kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqX2RldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoX2Rldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CisKKwlyZXR1cm4gZHJ2LT5wcm9iZShkZXYpOworfQorCitzdGF0aWMgaW50IHBsYXRmb3JtX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqX2RldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoX2Rldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CisKKwlyZXR1cm4gZHJ2LT5yZW1vdmUoZGV2KTsKK30KKworc3RhdGljIHZvaWQgcGxhdGZvcm1fZHJ2X3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKl9kZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqZHJ2ID0gdG9fcGxhdGZvcm1fZHJpdmVyKF9kZXYtPmRyaXZlcik7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOworCisJZHJ2LT5zaHV0ZG93bihkZXYpOworfQorCitzdGF0aWMgaW50IHBsYXRmb3JtX2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKl9kZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoX2Rldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CisKKwlyZXR1cm4gZHJ2LT5zdXNwZW5kKGRldiwgc3RhdGUpOworfQorCitzdGF0aWMgaW50IHBsYXRmb3JtX2Rydl9yZXN1bWUoc3RydWN0IGRldmljZSAqX2RldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoX2Rldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CisKKwlyZXR1cm4gZHJ2LT5yZXN1bWUoZGV2KTsKK30KKworLyoqCisgKglwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIKKyAqCUBkcnY6IHBsYXRmb3JtIGRyaXZlciBzdHJ1Y3R1cmUKKyAqLworaW50IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcnYpCit7CisJZHJ2LT5kcml2ZXIuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlOworCWlmIChkcnYtPnByb2JlKQorCQlkcnYtPmRyaXZlci5wcm9iZSA9IHBsYXRmb3JtX2Rydl9wcm9iZTsKKwlpZiAoZHJ2LT5yZW1vdmUpCisJCWRydi0+ZHJpdmVyLnJlbW92ZSA9IHBsYXRmb3JtX2Rydl9yZW1vdmU7CisJaWYgKGRydi0+c2h1dGRvd24pCisJCWRydi0+ZHJpdmVyLnNodXRkb3duID0gcGxhdGZvcm1fZHJ2X3NodXRkb3duOworCWlmIChkcnYtPnN1c3BlbmQpCisJCWRydi0+ZHJpdmVyLnN1c3BlbmQgPSBwbGF0Zm9ybV9kcnZfc3VzcGVuZDsKKwlpZiAoZHJ2LT5yZXN1bWUpCisJCWRydi0+ZHJpdmVyLnJlc3VtZSA9IHBsYXRmb3JtX2Rydl9yZXN1bWU7CisJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKTsKKworLyoqCisgKglwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcgorICoJQGRydjogcGxhdGZvcm0gZHJpdmVyIHN0cnVjdHVyZQorICovCit2b2lkIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKmRydikKK3sKKwlkcml2ZXJfdW5yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIpOworCiAKIC8qKgogICoJcGxhdGZvcm1fbWF0Y2ggLSBiaW5kIHBsYXRmb3JtIGRldmljZSB0byBwbGF0Zm9ybSBkcml2ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FsaS1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYWxpLWFncC5jCmluZGV4IGJhNTRiNTguLmIwMmZjMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYWxpLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYWxpLWFncC5jCkBAIC0zODksNyArMzg5LDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhZ3BfYWxpX3BjaV90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhZ3BfYWxpX3BjaV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhZ3BnYXJ0LWFsaSIsCiAJLmlkX3RhYmxlCT0gYWdwX2FsaV9wY2lfdGFibGUsCiAJLnByb2JlCQk9IGFncF9hbGlfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCmluZGV4IDQwZmNkODhiMi4uMWY3NzY2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKQEAgLTUxNSw3ICs1MTUsNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFncF9hbWRrN19wY2lfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWdwX2FtZGs3X3BjaV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhZ3BnYXJ0LWFtZGs3IiwKIAkuaWRfdGFibGUJPSBhZ3BfYW1kazdfcGNpX3RhYmxlLAogCS5wcm9iZQkJPSBhZ3BfYW1kazdfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYwppbmRleCA4Zjc0OGZkLi43OGNlOThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKQEAgLTcwMyw3ICs3MDMsNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFncF9hbWQ2NF9wY2lfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWdwX2FtZDY0X3BjaV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhZ3BnYXJ0LWFtZDY0IiwKIAkuaWRfdGFibGUJPSBhZ3BfYW1kNjRfcGNpX3RhYmxlLAogCS5wcm9iZQkJPSBhZ3BfYW1kNjRfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2F0aS1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYXRpLWFncC5jCmluZGV4IGZiZDQxNTUuLjUzMzcyYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYXRpLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYXRpLWFncC5jCkBAIC01MjEsNyArNTIxLDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhZ3BfYXRpX3BjaV90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhZ3BfYXRpX3BjaV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhZ3BnYXJ0LWF0aSIsCiAJLmlkX3RhYmxlCT0gYWdwX2F0aV9wY2lfdGFibGUsCiAJLnByb2JlCQk9IGFncF9hdGlfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2VmZmljZW9uLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9lZmZpY2Vvbi1hZ3AuYwppbmRleCBkNDFlMGE2Li5lN2FlYTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2VmZmljZW9uLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvZWZmaWNlb24tYWdwLmMKQEAgLTQyOSw3ICs0MjksNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFncF9lZmZpY2Vvbl9wY2lfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWdwX2VmZmljZW9uX3BjaV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhZ3BnYXJ0LWVmZmljZW9uIiwKIAkuaWRfdGFibGUJPSBhZ3BfZWZmaWNlb25fcGNpX3RhYmxlLAogCS5wcm9iZQkJPSBhZ3BfZWZmaWNlb25fcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2k0NjAtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2k0NjAtYWdwLmMKaW5kZXggMzRhNDQ0Ni4uOGVlMTlhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9pNDYwLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaTQ2MC1hZ3AuYwpAQCAtNjIyLDcgKzYyMiw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWdwX2ludGVsX2k0NjBfcGNpX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFncF9pbnRlbF9pNDYwX3BjaV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhZ3BnYXJ0LWludGVsLWk0NjAiLAogCS5pZF90YWJsZQk9IGFncF9pbnRlbF9pNDYwX3BjaV90YWJsZSwKIAkucHJvYmUJCT0gYWdwX2ludGVsX2k0NjBfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwppbmRleCAwMjcxNjFhLi5lN2JlZDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKQEAgLTE4MjcsNyArMTgyNyw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWdwX2ludGVsX3BjaV90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhZ3BfaW50ZWxfcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFncGdhcnQtaW50ZWwiLAogCS5pZF90YWJsZQk9IGFncF9pbnRlbF9wY2lfdGFibGUsCiAJLnByb2JlCQk9IGFncF9pbnRlbF9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvbnZpZGlhLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9udmlkaWEtYWdwLmMKaW5kZXggM2FlZDBjNS4uODBkYWZhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9udmlkaWEtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9udmlkaWEtYWdwLmMKQEAgLTM5OCw3ICszOTgsNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFncF9udmlkaWFfcGNpX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFncF9udmlkaWFfcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFncGdhcnQtbnZpZGlhIiwKIAkuaWRfdGFibGUJPSBhZ3BfbnZpZGlhX3BjaV90YWJsZSwKIAkucHJvYmUJCT0gYWdwX252aWRpYV9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3Avc2lzLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9zaXMtYWdwLmMKaW5kZXggYTcwMTM2MS4uZWJjMDU1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9zaXMtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9zaXMtYWdwLmMKQEAgLTMzMiw3ICszMzIsNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFncF9zaXNfcGNpX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFncF9zaXNfcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFncGdhcnQtc2lzIiwKIAkuaWRfdGFibGUJPSBhZ3Bfc2lzX3BjaV90YWJsZSwKIAkucHJvYmUJCT0gYWdwX3Npc19wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3Avc3dvcmtzLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9zd29ya3MtYWdwLmMKaW5kZXggNWE1MzkyZC4uM2Y4ZjdmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9zd29ya3MtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9zd29ya3MtYWdwLmMKQEAgLTU0NSw3ICs1NDUsNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFncF9zZXJ2ZXJ3b3Jrc19wY2lfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWdwX3NlcnZlcndvcmtzX3BjaV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhZ3BnYXJ0LXNlcnZlcndvcmtzIiwKIAkuaWRfdGFibGUJPSBhZ3Bfc2VydmVyd29ya3NfcGNpX3RhYmxlLAogCS5wcm9iZQkJPSBhZ3Bfc2VydmVyd29ya3NfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYwppbmRleCAxODNjNTBhLi5jODI1NTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmMKQEAgLTY1OCw3ICs2NTgsNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFncF91bmlub3J0aF9wY2lfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWdwX3VuaW5vcnRoX3BjaV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhZ3BnYXJ0LXVuaW5vcnRoIiwKIAkuaWRfdGFibGUJPSBhZ3BfdW5pbm9ydGhfcGNpX3RhYmxlLAogCS5wcm9iZQkJPSBhZ3BfdW5pbm9ydGhfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jCmluZGV4IDVkOWExMzcuLmM4NDdkZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jCkBAIC01MTgsNyArNTE4LDYgQEAKIAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWdwX3ZpYV9wY2lfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiYWdwZ2FydC12aWEiLAogCS5pZF90YWJsZQk9IGFncF92aWFfcGNpX3RhYmxlLAogCS5wcm9iZQkJPSBhZ3BfdmlhX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2VwY2EuYyBiL2RyaXZlcnMvY2hhci9lcGNhLmMKaW5kZXggYjdhMGU0ZC4uNDA3NzA4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2VwY2EuYworKysgYi9kcml2ZXJzL2NoYXIvZXBjYS5jCkBAIC0zMTEzLDcgKzMxMTMsNiBAQAogaW50IF9faW5pdCBpbml0X1BDSSAodm9pZCkKIHsJLyogQmVnaW4gaW5pdF9QQ0kgKi8KIAltZW1zZXQgKCZlcGNhX2RyaXZlciwgMCwgc2l6ZW9mIChlcGNhX2RyaXZlcikpOwotCWVwY2FfZHJpdmVyLm93bmVyID0gVEhJU19NT0RVTEU7CiAJZXBjYV9kcml2ZXIubmFtZSA9ICJlcGNhIjsKIAllcGNhX2RyaXZlci5pZF90YWJsZSA9IGVwY2FfcGNpX3RibDsKIAllcGNhX2RyaXZlci5wcm9iZSA9IGVwY2FfaW5pdF9vbmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCmluZGV4IGMxZDA2YmEuLmQxNmJkNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCkBAIC0yNjQ4LDcgKzI2NDgsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZpbnRmLT53YWl0aW5nX21zZ3NfbG9jaywgZmxhZ3MpOwogCWlmICghbGlzdF9lbXB0eSgmaW50Zi0+d2FpdGluZ19tc2dzKSkgewogCQlsaXN0X2FkZF90YWlsKCZtc2ctPmxpbmssICZpbnRmLT53YWl0aW5nX21zZ3MpOwotCQlzcGluX3VubG9jaygmaW50Zi0+d2FpdGluZ19tc2dzX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnRmLT53YWl0aW5nX21zZ3NfbG9jaywgZmxhZ3MpOwogCQlnb3RvIG91dDsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW50Zi0+d2FpdGluZ19tc2dzX2xvY2ssIGZsYWdzKTsKQEAgLTI2NTcsOSArMjY1Nyw5IEBACiAJaWYgKHJ2ID4gMCkgewogCQkvKiBDb3VsZCBub3QgaGFuZGxlIHRoZSBtZXNzYWdlIG5vdywganVzdCBhZGQgaXQgdG8gYQogICAgICAgICAgICAgICAgICAgIGxpc3QgdG8gaGFuZGxlIGxhdGVyLiAqLwotCQlzcGluX2xvY2soJmludGYtPndhaXRpbmdfbXNnc19sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmludGYtPndhaXRpbmdfbXNnc19sb2NrLCBmbGFncyk7CiAJCWxpc3RfYWRkX3RhaWwoJm1zZy0+bGluaywgJmludGYtPndhaXRpbmdfbXNncyk7Ci0JCXNwaW5fdW5sb2NrKCZpbnRmLT53YWl0aW5nX21zZ3NfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmludGYtPndhaXRpbmdfbXNnc19sb2NrLCBmbGFncyk7CiAJfSBlbHNlIGlmIChydiA9PSAwKSB7CiAJCWlwbWlfZnJlZV9zbWlfbXNnKG1zZyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3MzYzI0MTAtcnRjLmMgYi9kcml2ZXJzL2NoYXIvczNjMjQxMC1ydGMuYwppbmRleCBkNzI0YzBkLi4zZGY3YTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvczNjMjQxMC1ydGMuYworKysgYi9kcml2ZXJzL2NoYXIvczNjMjQxMC1ydGMuYwpAQCAtMzgyLDcgKzM4Miw3IEBACiAJLnByb2MJICAgICAgICA9IHMzYzI0MTBfcnRjX3Byb2MsCiB9OwogCi1zdGF0aWMgdm9pZCBzM2MyNDEwX3J0Y19lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgZW4pCitzdGF0aWMgdm9pZCBzM2MyNDEwX3J0Y19lbmFibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGVuKQogewogCXVuc2lnbmVkIGludCB0bXA7CiAKQEAgLTM5OSwyMSArMzk5LDIxIEBACiAJCS8qIHJlLWVuYWJsZSB0aGUgZGV2aWNlLCBhbmQgY2hlY2sgaXQgaXMgb2sgKi8KIAogCQlpZiAoKHJlYWRiKFMzQzI0MTBfUlRDQ09OKSAmIFMzQzI0MTBfUlRDQ09OX1JUQ0VOKSA9PSAwKXsKLQkJCWRldl9pbmZvKGRldiwgInJ0YyBkaXNhYmxlZCwgcmUtZW5hYmxpbmdcbiIpOworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInJ0YyBkaXNhYmxlZCwgcmUtZW5hYmxpbmdcbiIpOwogCiAJCQl0bXAgPSByZWFkYihTM0MyNDEwX1JUQ0NPTik7CiAJCQl3cml0ZWIodG1wIHwgUzNDMjQxMF9SVENDT05fUlRDRU4gLCBTM0MyNDEwX1JUQ0NPTik7CiAJCX0KIAogCQlpZiAoKHJlYWRiKFMzQzI0MTBfUlRDQ09OKSAmIFMzQzI0MTBfUlRDQ09OX0NOVFNFTCkpewotCQkJZGV2X2luZm8oZGV2LCAicmVtb3ZpbmcgUzNDMjQxMF9SVENDT05fQ05UU0VMXG4iKTsKKwkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJyZW1vdmluZyBTM0MyNDEwX1JUQ0NPTl9DTlRTRUxcbiIpOwogCiAJCQl0bXAgPSByZWFkYihTM0MyNDEwX1JUQ0NPTik7CiAJCQl3cml0ZWIodG1wJiB+UzNDMjQxMF9SVENDT05fQ05UU0VMICwgUzNDMjQxMF9SVENDT04pOwogCQl9CiAKIAkJaWYgKChyZWFkYihTM0MyNDEwX1JUQ0NPTikgJiBTM0MyNDEwX1JUQ0NPTl9DTEtSU1QpKXsKLQkJCWRldl9pbmZvKGRldiwgInJlbW92aW5nIFMzQzI0MTBfUlRDQ09OX0NMS1JTVFxuIik7CisJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAicmVtb3ZpbmcgUzNDMjQxMF9SVENDT05fQ0xLUlNUXG4iKTsKIAogCQkJdG1wID0gcmVhZGIoUzNDMjQxMF9SVENDT04pOwogCQkJd3JpdGViKHRtcCAmIH5TM0MyNDEwX1JUQ0NPTl9DTEtSU1QsIFMzQzI0MTBfUlRDQ09OKTsKQEAgLTQyMSw3ICs0MjEsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBzM2MyNDEwX3J0Y19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNDEwX3J0Y19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXVucmVnaXN0ZXJfcnRjKCZzM2MyNDEwX3J0Y29wcyk7CiAKQEAgLTQzOCwyNSArNDM4LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczNjMjQxMF9ydGNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNDEwX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgcmV0OwogCi0JcHJfZGVidWcoIiVzOiBwcm9iZT0lcCwgZGV2aWNlPSVwXG4iLCBfX0ZVTkNUSU9OX18sIHBkZXYsIGRldik7CisJcHJfZGVidWcoIiVzOiBwcm9iZT0lcFxuIiwgX19GVU5DVElPTl9fLCBwZGV2KTsKIAogCS8qIGZpbmQgdGhlIElSUXMgKi8KIAogCXMzYzI0MTBfcnRjX3RpY2tubyA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7CiAJaWYgKHMzYzI0MTBfcnRjX3RpY2tubyA8PSAwKSB7Ci0JCWRldl9lcnIoZGV2LCAibm8gaXJxIGZvciBydGMgdGlja1xuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGlycSBmb3IgcnRjIHRpY2tcbiIpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKIAlzM2MyNDEwX3J0Y19hbGFybW5vID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAlpZiAoczNjMjQxMF9ydGNfYWxhcm1ubyA8PSAwKSB7Ci0JCWRldl9lcnIoZGV2LCAibm8gaXJxIGZvciBhbGFybVxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGlycSBmb3IgYWxhcm1cbiIpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKQEAgLTQ2Nyw3ICs0NjYsNyBAQAogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAocmVzID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IG1lbW9yeSByZWdpb24gcmVzb3VyY2VcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IG1lbW9yeSByZWdpb24gcmVzb3VyY2VcbiIpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKQEAgLTQ3NSwxNCArNDc0LDE0IEBACiAJCQkJICAgICBwZGV2LT5uYW1lKTsKIAogCWlmIChzM2MyNDEwX3J0Y19tZW0gPT0gTlVMTCkgewotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZXNlcnZlIG1lbW9yeSByZWdpb25cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVzZXJ2ZSBtZW1vcnkgcmVnaW9uXG4iKTsKIAkJcmV0ID0gLUVOT0VOVDsKIAkJZ290byBleGl0X2VycjsKIAl9CiAKIAlzM2MyNDEwX3J0Y19iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKIAlpZiAoczNjMjQxMF9ydGNfYmFzZSA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIGlvcmVtYXAoKVxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCBpb3JlbWFwKClcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGV4aXRfZXJyOwogCX0KQEAgLTQ5NCw3ICs0OTMsNyBAQAogCiAJLyogY2hlY2sgdG8gc2VlIGlmIGV2ZXJ5dGhpbmcgaXMgc2V0dXAgY29ycmVjdGx5ICovCiAKLQlzM2MyNDEwX3J0Y19lbmFibGUoZGV2LCAxKTsKKwlzM2MyNDEwX3J0Y19lbmFibGUocGRldiwgMSk7CiAKICAJcHJfZGVidWcoInMzYzI0MTBfcnRjOiBSVENDT049JTAyeFxuIiwgcmVhZGIoUzNDMjQxMF9SVENDT04pKTsKIApAQCAtNTA2LDcgKzUwNSw3IEBACiAJcmV0dXJuIDA7CiAKICBleGl0X2VycjoKLQlkZXZfZXJyKGRldiwgImVycm9yICVkIGR1cmluZyBpbml0aWFsaXNhdGlvblxuIiwgcmV0KTsKKwlkZXZfZXJyKCZwZGV2LT5kZXYsICJlcnJvciAlZCBkdXJpbmcgaW5pdGlhbGlzYXRpb25cbiIsIHJldCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNTE5LDcgKzUxOCw3IEBACiAKIHN0YXRpYyBpbnQgdGljbnRfc2F2ZTsKIAotc3RhdGljIGludCBzM2MyNDEwX3J0Y19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzM2MyNDEwX3J0Y19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgcnRjX3RpbWUgdG07CiAJc3RydWN0IHRpbWVzcGVjIHRpbWU7CkBAIC01MzUsMTkgKzUzNCwxOSBAQAogCXMzYzI0MTBfcnRjX2dldHRpbWUoJnRtKTsKIAlydGNfdG1fdG9fdGltZSgmdG0sICZ0aW1lLnR2X3NlYyk7CiAJc2F2ZV90aW1lX2RlbHRhKCZzM2MyNDEwX3J0Y19kZWx0YSwgJnRpbWUpOwotCXMzYzI0MTBfcnRjX2VuYWJsZShkZXYsIDApOworCXMzYzI0MTBfcnRjX2VuYWJsZShwZGV2LCAwKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHMzYzI0MTBfcnRjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0MTBfcnRjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBydGNfdGltZSB0bTsKIAlzdHJ1Y3QgdGltZXNwZWMgdGltZTsKIAogCXRpbWUudHZfbnNlYyA9IDA7CiAKLQlzM2MyNDEwX3J0Y19lbmFibGUoZGV2LCAxKTsKKwlzM2MyNDEwX3J0Y19lbmFibGUocGRldiwgMSk7CiAJczNjMjQxMF9ydGNfZ2V0dGltZSgmdG0pOwogCXJ0Y190bV90b190aW1lKCZ0bSwgJnRpbWUudHZfc2VjKTsKIAlyZXN0b3JlX3RpbWVfZGVsdGEoJnMzYzI0MTBfcnRjX2RlbHRhLCAmdGltZSk7CkBAIC01NjAsMTQgKzU1OSwxNSBAQAogI2RlZmluZSBzM2MyNDEwX3J0Y19yZXN1bWUgIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgczNjMjQxMF9ydGNkcnYgPSB7Ci0JLm5hbWUJCT0gInMzYzI0MTAtcnRjIiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2MyNDEwX3J0Y2RydiA9IHsKIAkucHJvYmUJCT0gczNjMjQxMF9ydGNfcHJvYmUsCiAJLnJlbW92ZQkJPSBzM2MyNDEwX3J0Y19yZW1vdmUsCiAJLnN1c3BlbmQJPSBzM2MyNDEwX3J0Y19zdXNwZW5kLAogCS5yZXN1bWUJCT0gczNjMjQxMF9ydGNfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzM2MyNDEwLXJ0YyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCiB9OwogCiBzdGF0aWMgY2hhciBfX2luaXRkYXRhIGJhbm5lcltdID0gIlMzQzI0MTAgUlRDLCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3NcbiI7CkBAIC01NzUsMTIgKzU3NSwxMiBAQAogc3RhdGljIGludCBfX2luaXQgczNjMjQxMF9ydGNfaW5pdCh2b2lkKQogewogCXByaW50ayhiYW5uZXIpOwotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnMzYzI0MTBfcnRjZHJ2KTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwX3J0Y2Rydik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzM2MyNDEwX3J0Y19leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0MTBfcnRjZHJ2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjMjQxMF9ydGNkcnYpOwogfQogCiBtb2R1bGVfaW5pdChzM2MyNDEwX3J0Y19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zb255cGkuYyBiL2RyaXZlcnMvY2hhci9zb255cGkuYwppbmRleCBkMDUwNjdkLi41MWEwNzM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc29ueXBpLmMKKysrIGIvZHJpdmVycy9jaGFyL3NvbnlwaS5jCkBAIC0xMTY4LDcgKzExNjgsNyBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBvbGRfY2FtZXJhX3Bvd2VyOwogCi1zdGF0aWMgaW50IHNvbnlwaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzb255cGlfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlvbGRfY2FtZXJhX3Bvd2VyID0gc29ueXBpX2RldmljZS5jYW1lcmFfcG93ZXI7CiAJc29ueXBpX2Rpc2FibGUoKTsKQEAgLTExNzYsMjYgKzExNzYsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzb255cGlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc29ueXBpX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc29ueXBpX2VuYWJsZShvbGRfY2FtZXJhX3Bvd2VyKTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgogCi1zdGF0aWMgdm9pZCBzb255cGlfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIHZvaWQgc29ueXBpX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzb255cGlfZGlzYWJsZSgpOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc29ueXBpX2RyaXZlciA9IHsKLQkubmFtZQkJPSAic29ueXBpIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNvbnlwaV9kcml2ZXIgPSB7CiAjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQJPSBzb255cGlfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNvbnlwaV9yZXN1bWUsCiAjZW5kaWYKIAkuc2h1dGRvd24JPSBzb255cGlfc2h1dGRvd24sCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInNvbnlwaSIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNvbnlwaV9jcmVhdGVfaW5wdXRfZGV2aWNlcyh2b2lkKQpAQCAtMTQ1NSwyMCArMTQ1NiwyMCBAQAogCWlmICghZG1pX2NoZWNrX3N5c3RlbShzb255cGlfZG1pX3RhYmxlKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJnNvbnlwaV9kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc29ueXBpX2RyaXZlcik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IHNvbnlwaV9wcm9iZSgpOwogCWlmIChyZXQpCi0JCWRyaXZlcl91bnJlZ2lzdGVyKCZzb255cGlfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNvbnlwaV9kcml2ZXIpOwogCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNvbnlwaV9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnNvbnlwaV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzb255cGlfZHJpdmVyKTsKIAlzb255cGlfcmVtb3ZlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeW5jbGluay5jIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKaW5kZXggNWQxZmZhMy4uODJjNmFiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKKysrIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKQEAgLTkxMiw3ICs5MTIsNiBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc3luY2xpbmtfcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gInN5bmNsaW5rIiwKIAkuaWRfdGFibGUJPSBzeW5jbGlua19wY2lfdGJsLAogCS5wcm9iZQkJPSBzeW5jbGlua19pbml0X29uZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jCmluZGV4IDdjMDYzYzUuLmVlNWE0MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMKKysrIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYwpAQCAtNTAwLDcgKzUwMCw2IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzeW5jbGlua21wX3BjaV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJzeW5jbGlua21wIiwKIAkuaWRfdGFibGUJPSBzeW5jbGlua21wX3BjaV90YmwsCiAJLnByb2JlCQk9IHN5bmNsaW5rbXBfaW5pdF9vbmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdGIwMjE5LmMgYi9kcml2ZXJzL2NoYXIvdGIwMjE5LmMKaW5kZXggMjQzNTViMi4uYjNkNDExYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RiMDIxOS5jCisrKyBiL2RyaXZlcnMvY2hhci90YjAyMTkuYwpAQCAtMjgzLDcgKzI4Myw3IEBACiAJdnI0MXh4X3NldF9pcnFfbGV2ZWwoVEIwMjE5X1BDSV9TTE9UM19QSU4sIElSUV9MRVZFTF9MT1cpOwogfQogCi1zdGF0aWMgaW50IHRiMDIxOV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHRiMDIxOV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldHZhbDsKIApAQCAtMzE5LDcgKzMxOSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdGIwMjE5X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHRiMDIxOV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCV9tYWNoaW5lX3Jlc3RhcnQgPSBvbGRfbWFjaGluZV9yZXN0YXJ0OwogCkBAIC0zMzMsMTEgKzMzMywxMiBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdGIwMjE5X3BsYXRmb3JtX2RldmljZTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHRiMDIxOV9kZXZpY2VfZHJpdmVyID0gewotCS5uYW1lCQk9ICJUQjAyMTkiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGIwMjE5X2RldmljZV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHRiMDIxOV9wcm9iZSwKIAkucmVtb3ZlCQk9IHRiMDIxOV9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIlRCMDIxOSIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHRhbmJhY190YjAyMTlfaW5pdCh2b2lkKQpAQCAtMzQ4LDcgKzM0OSw3IEBACiAJaWYgKElTX0VSUih0YjAyMTlfcGxhdGZvcm1fZGV2aWNlKSkKIAkJcmV0dXJuIFBUUl9FUlIodGIwMjE5X3BsYXRmb3JtX2RldmljZSk7CiAKLQlyZXR2YWwgPSBkcml2ZXJfcmVnaXN0ZXIoJnRiMDIxOV9kZXZpY2VfZHJpdmVyKTsKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRiMDIxOV9kZXZpY2VfZHJpdmVyKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIodGIwMjE5X3BsYXRmb3JtX2RldmljZSk7CiAKQEAgLTM1Nyw3ICszNTgsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgdGFuYmFjX3RiMDIxOV9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnRiMDIxOV9kZXZpY2VfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdGIwMjE5X2RldmljZV9kcml2ZXIpOwogCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIodGIwMjE5X3BsYXRmb3JtX2RldmljZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnI0MXh4X2dpdS5jIGIvZHJpdmVycy9jaGFyL3ZyNDF4eF9naXUuYwppbmRleCA5NDY0MTA4Li45YWM2ZDQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnI0MXh4X2dpdS5jCisrKyBiL2RyaXZlcnMvY2hhci92cjQxeHhfZ2l1LmMKQEAgLTYxMyw3ICs2MTMsNyBAQAogCS5yZWxlYXNlCT0gZ3Bpb19yZWxlYXNlLAogfTsKIAotc3RhdGljIGludCBnaXVfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBnaXVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemUsIGZsYWdzID0gMDsKIAl1bnNpZ25lZCBpbnQgbnJfcGlucyA9IDA7CkBAIC02OTcsNyArNjk3LDcgQEAKIAlyZXR1cm4gY2FzY2FkZV9pcnEoR0lVSU5UX0lSUSwgZ2l1X2dldF9pcnEpOwogfQogCi1zdGF0aWMgaW50IGdpdV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBnaXVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpb3VubWFwKGdpdV9iYXNlKTsKIApAQCAtNzEwLDExICs3MTAsMTIgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmdpdV9wbGF0Zm9ybV9kZXZpY2U7CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBnaXVfZGV2aWNlX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiR0lVIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGdpdV9kZXZpY2VfZHJpdmVyID0gewogCS5wcm9iZQkJPSBnaXVfcHJvYmUsCiAJLnJlbW92ZQkJPSBnaXVfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJHSVUiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB2cjQxeHhfZ2l1X2luaXQodm9pZCkKQEAgLTcyNSw3ICs3MjYsNyBAQAogCWlmIChJU19FUlIoZ2l1X3BsYXRmb3JtX2RldmljZSkpCiAJCXJldHVybiBQVFJfRVJSKGdpdV9wbGF0Zm9ybV9kZXZpY2UpOwogCi0JcmV0dmFsID0gZHJpdmVyX3JlZ2lzdGVyKCZnaXVfZGV2aWNlX2RyaXZlcik7CisJcmV0dmFsID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZnaXVfZGV2aWNlX2RyaXZlcik7CiAJaWYgKHJldHZhbCA8IDApCiAJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGdpdV9wbGF0Zm9ybV9kZXZpY2UpOwogCkBAIC03MzQsNyArNzM1LDcgQEAKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IHZyNDF4eF9naXVfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZnaXVfZGV2aWNlX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmdpdV9kZXZpY2VfZHJpdmVyKTsKIAogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGdpdV9wbGF0Zm9ybV9kZXZpY2UpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3ZyNDF4eF9ydGMuYyBiL2RyaXZlcnMvY2hhci92cjQxeHhfcnRjLmMKaW5kZXggNWUzMjkyZC4uNDM1YjMwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3ZyNDF4eF9ydGMuYworKysgYi9kcml2ZXJzL2NoYXIvdnI0MXh4X3J0Yy5jCkBAIC01NjAsMTMgKzU2MCwxMSBAQAogCS5mb3BzCT0gJnJ0Y19mb3BzLAogfTsKIAotc3RhdGljIGludCBydGNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCXVuc2lnbmVkIGludCBpcnE7CiAJaW50IHJldHZhbDsKIAotCXBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlpZiAocGRldi0+bnVtX3Jlc291cmNlcyAhPSAyKQogCQlyZXR1cm4gLUVCVVNZOwogCkBAIC02MzUsNyArNjMzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBydGNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldHZhbDsKIApAQCAtNjU1LDExICs2NTMsMTIgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnJ0Y19wbGF0Zm9ybV9kZXZpY2U7CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBydGNfZGV2aWNlX2RyaXZlciA9IHsKLQkubmFtZQkJPSBydGNfbmFtZSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJ0Y19kZXZpY2VfZHJpdmVyID0gewogCS5wcm9iZQkJPSBydGNfcHJvYmUsCiAJLnJlbW92ZQkJPSBydGNfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9IHJ0Y19uYW1lLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB2cjQxeHhfcnRjX2luaXQodm9pZCkKQEAgLTY5MSw3ICs2OTAsNyBAQAogCWlmIChJU19FUlIocnRjX3BsYXRmb3JtX2RldmljZSkpCiAJCXJldHVybiBQVFJfRVJSKHJ0Y19wbGF0Zm9ybV9kZXZpY2UpOwogCi0JcmV0dmFsID0gZHJpdmVyX3JlZ2lzdGVyKCZydGNfZGV2aWNlX2RyaXZlcik7CisJcmV0dmFsID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZydGNfZGV2aWNlX2RyaXZlcik7CiAJaWYgKHJldHZhbCA8IDApCiAJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHJ0Y19wbGF0Zm9ybV9kZXZpY2UpOwogCkBAIC03MDAsNyArNjk5LDcgQEAKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IHZyNDF4eF9ydGNfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZydGNfZGV2aWNlX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnJ0Y19kZXZpY2VfZHJpdmVyKTsKIAogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHJ0Y19wbGF0Zm9ybV9kZXZpY2UpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL21wY29yZV93ZHQuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tcGNvcmVfd2R0LmMKaW5kZXggZGE2MzFjMS4uOWRlZmNmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL21wY29yZV93ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jCkBAIC0xMzksNyArMTM5LDcgQEAKICAqLwogc3RhdGljIGludCBtcGNvcmVfd2R0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IG1wY29yZV93ZHQgKndkdCA9IGRldl9nZXRfZHJ2ZGF0YSgmbXBjb3JlX3dkdF9kZXYtPmRldik7CisJc3RydWN0IG1wY29yZV93ZHQgKndkdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKG1wY29yZV93ZHRfZGV2KTsKIAogCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZ3ZHQtPnRpbWVyX2FsaXZlKSkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTI5MSw5ICsyOTEsOSBAQAogICoJU3lzdGVtIHNodXRkb3duIGhhbmRsZXIuICBUdXJuIG9mZiB0aGUgd2F0Y2hkb2cgaWYgd2UncmUKICAqCXJlc3RhcnRpbmcgb3IgaGFsdGluZyB0aGUgc3lzdGVtLgogICovCi1zdGF0aWMgdm9pZCBtcGNvcmVfd2R0X3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgdm9pZCBtcGNvcmVfd2R0X3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbXBjb3JlX3dkdCAqd2R0ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCXN0cnVjdCBtcGNvcmVfd2R0ICp3ZHQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUkVTVEFSVCB8fCBzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0hBTFQpCiAJCW1wY29yZV93ZHRfc3RvcCh3ZHQpOwpAQCAtMzE3LDkgKzMxNyw4IEBACiAJLmZvcHMJCT0gJm1wY29yZV93ZHRfZm9wcywKIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IG1wY29yZV93ZHRfcHJvYmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1wY29yZV93ZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShfZGV2KTsKIAlzdHJ1Y3QgbXBjb3JlX3dkdCAqd2R0OwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWludCByZXQ7CkBAIC0zNjQsNyArMzYzLDcgQEAKIAl9CiAKIAltcGNvcmVfd2R0X3N0b3Aod2R0KTsKLQlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCB3ZHQpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKCZkZXYtPmRldiwgd2R0KTsKIAltcGNvcmVfd2R0X2RldiA9IGRldjsKIAogCXJldHVybiAwOwpAQCAtMzc5LDExICszNzgsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBtcGNvcmVfd2R0X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtcGNvcmVfd2R0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1wY29yZV93ZHQgKndkdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtcGNvcmVfd2R0ICp3ZHQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCW1pc2NfZGVyZWdpc3RlcigmbXBjb3JlX3dkdF9taXNjZGV2KTsKIApAQCAtMzk1LDEzICszOTQsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG1wY29yZV93ZHRfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJPSAibXBjb3JlX3dkdCIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtcGNvcmVfd2R0X2RyaXZlciA9IHsKIAkucHJvYmUJCT0gbXBjb3JlX3dkdF9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1wY29yZV93ZHRfcmVtb3ZlKSwKIAkuc2h1dGRvd24JPSBtcGNvcmVfd2R0X3NodXRkb3duLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAibXBjb3JlX3dkdCIsCisJfSwKIH07CiAKIHN0YXRpYyBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gIk1QY29yZSBXYXRjaGRvZyBUaW1lcjogMC4xLiBtcGNvcmVfbm9ib290PSVkIG1wY29yZV9tYXJnaW49JWQgc2VjIChub3dheW91dD0gJWQpXG4iOwpAQCAtNDIwLDEyICs0MjAsMTIgQEAKIAogCXByaW50ayhiYW5uZXIsIG1wY29yZV9ub2Jvb3QsIG1wY29yZV9tYXJnaW4sIG5vd2F5b3V0KTsKIAotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJm1wY29yZV93ZHRfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtcGNvcmVfd2R0X2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtcGNvcmVfd2R0X2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmbXBjb3JlX3dkdF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtcGNvcmVfd2R0X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KG1wY29yZV93ZHRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXY2NHg2MF93ZHQuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tdjY0eDYwX3dkdC5jCmluZGV4IDExOWIzYzUuLjAwZDllZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tdjY0eDYwX3dkdC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tdjY0eDYwX3dkdC5jCkBAIC0xODIsMTAgKzE4Miw5IEBACiAJLmZvcHMgPSAmbXY2NHg2MF93ZHRfZm9wcywKIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IG12NjR4NjBfd2R0X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IG12NjR4NjBfd2R0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZCA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBtdjY0eDYwX3dkdF9wZGF0YSAqcGRhdGEgPSBwZC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG12NjR4NjBfd2R0X3BkYXRhICpwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaW50IGJ1c19jbGsgPSAxMzM7CiAKIAltdjY0eDYwX3dkdF90aW1lb3V0ID0gMTA7CkBAIC0yMDIsNyArMjAxLDcgQEAKIAlyZXR1cm4gbWlzY19yZWdpc3RlcigmbXY2NHg2MF93ZHRfbWlzY2Rldik7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IG12NjR4NjBfd2R0X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtdjY0eDYwX3dkdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCW1pc2NfZGVyZWdpc3RlcigmbXY2NHg2MF93ZHRfbWlzY2Rldik7CiAKQEAgLTIxMiwxMiArMjExLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBtdjY0eDYwX3dkdF9kcml2ZXIgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLm5hbWUgPSBNVjY0eDYwX1dEVF9OQU1FLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdjY0eDYwX3dkdF9kcml2ZXIgPSB7CiAJLnByb2JlID0gbXY2NHg2MF93ZHRfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG12NjR4NjBfd2R0X3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5uYW1lID0gTVY2NHg2MF9XRFRfTkFNRSwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm12NjR4NjBfd2R0X2RldjsKQEAgLTIzNSwxNCArMjM1LDE0IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IGRyaXZlcl9yZWdpc3RlcigmbXY2NHg2MF93ZHRfZHJpdmVyKTsKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm12NjR4NjBfd2R0X2RyaXZlcik7CiAgICAgICBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG12NjR4NjBfd2R0X2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmbXY2NHg2MF93ZHRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXY2NHg2MF93ZHRfZHJpdmVyKTsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihtdjY0eDYwX3dkdF9kZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvcGN3ZF9wY2kuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkX3BjaS5jCmluZGV4IGQ5ZWY1NWIuLjI0NTFlZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkX3BjaS5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkX3BjaS5jCkBAIC03NTUsNyArNzU1LDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwY2lwY3dkX3BjaV90YmwpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcGNpcGN3ZF9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9IFdBVENIRE9HX05BTUUsCiAJLmlkX3RhYmxlCT0gcGNpcGN3ZF9wY2lfdGJsLAogCS5wcm9iZQkJPSBwY2lwY3dkX2NhcmRfaW5pdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zM2MyNDEwX3dkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMKaW5kZXggNzUxY2I3Ny4uZWI2NjdkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMKQEAgLTM0NywxNSArMzQ3LDE0IEBACiB9CiAvKiBkZXZpY2UgaW50ZXJmYWNlICovCiAKLXN0YXRpYyBpbnQgczNjMjQxMHdkdF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0MTB3ZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IHN0YXJ0ZWQgPSAwOwogCWludCByZXQ7CiAJaW50IHNpemU7CiAKLQlEQkcoIiVzOiBwcm9iZT0lcCwgZGV2aWNlPSVwXG4iLCBfX0ZVTkNUSU9OX18sIHBkZXYsIGRldik7CisJREJHKCIlczogcHJvYmU9JXBcbiIsIF9fRlVOQ1RJT05fXywgcGRldik7CiAKIAkvKiBnZXQgdGhlIG1lbW9yeSByZWdpb24gZm9yIHRoZSB3YXRjaGRvZyB0aW1lciAqLwogCkBAIC0zODYsMTMgKzM4NSwxMyBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQlyZXQgPSByZXF1ZXN0X2lycShyZXMtPnN0YXJ0LCBzM2MyNDEwd2R0X2lycSwgMCwgcGRldi0+bmFtZSwgZGV2KTsKKwlyZXQgPSByZXF1ZXN0X2lycShyZXMtPnN0YXJ0LCBzM2MyNDEwd2R0X2lycSwgMCwgcGRldi0+bmFtZSwgcGRldik7CiAJaWYgKHJldCAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0lORk8gUEZYICJmYWlsZWQgdG8gaW5zdGFsbCBpcnEgKCVkKVxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQl3ZHRfY2xvY2sgPSBjbGtfZ2V0KGRldiwgIndhdGNoZG9nIik7CisJd2R0X2Nsb2NrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAid2F0Y2hkb2ciKTsKIAlpZiAod2R0X2Nsb2NrID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImZhaWxlZCB0byBmaW5kIHdhdGNoZG9nIGNsb2NrIHNvdXJjZVxuIik7CiAJCXJldHVybiAtRU5PRU5UOwpAQCAtNDMwLDcgKzQyOSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczNjMjQxMHdkdF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNDEwd2R0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaWYgKHdkdF9tZW0gIT0gTlVMTCkgewogCQlyZWxlYXNlX3Jlc291cmNlKHdkdF9tZW0pOwpAQCAtNDU0LDcgKzQ1Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHMzYzI0MTB3ZHRfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIHZvaWQgczNjMjQxMHdkdF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJczNjMjQxMHdkdF9zdG9wKCk7CQogfQpAQCAtNDY0LDcgKzQ2Myw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyB3dGNvbl9zYXZlOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgd3RkYXRfc2F2ZTsKIAotc3RhdGljIGludCBzM2MyNDEwd2R0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHMzYzI0MTB3ZHRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAkvKiBTYXZlIHdhdGNoZG9nIHN0YXRlLCBhbmQgdHVybiBpdCBvZmYuICovCiAJd3Rjb25fc2F2ZSA9IHJlYWRsKHdkdF9iYXNlICsgUzNDMjQxMF9XVENPTik7CkBAIC00NzYsNyArNDc1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzM2MyNDEwd2R0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0MTB3ZHRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAkvKiBSZXN0b3JlIHdhdGNoZG9nIHN0YXRlLiAqLwogCkBAIC00OTYsMTUgKzQ5NSwxNiBAQAogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzM2MyNDEwd2R0X2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCT0gInMzYzI0MTAtd2R0IiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzYzI0MTB3ZHRfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzM2MyNDEwd2R0X3Byb2JlLAogCS5yZW1vdmUJCT0gczNjMjQxMHdkdF9yZW1vdmUsCiAJLnNodXRkb3duCT0gczNjMjQxMHdkdF9zaHV0ZG93biwKIAkuc3VzcGVuZAk9IHMzYzI0MTB3ZHRfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHMzYzI0MTB3ZHRfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAiczNjMjQxMC13ZHQiLAorCX0sCiB9OwogCiAKQEAgLTUxMywxMiArNTEzLDEyIEBACiBzdGF0aWMgaW50IF9faW5pdCB3YXRjaGRvZ19pbml0KHZvaWQpCiB7CiAJcHJpbnRrKGJhbm5lcik7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmczNjMjQxMHdkdF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0MTB3ZHRfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHdhdGNoZG9nX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmczNjMjQxMHdkdF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDEwd2R0X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHdhdGNoZG9nX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3dkdF9wY2kuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy93ZHRfcGNpLmMKaW5kZXggZGM5MzcwZi4uNGIzMzExOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3dkdF9wY2kuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvd2R0X3BjaS5jCkBAIC03MTEsNyArNzExLDYgQEAKIAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgd2R0cGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gIndkdF9wY2kiLAogCS5pZF90YWJsZQk9IHdkdHBjaV9wY2lfdGJsLAogCS5wcm9iZQkJPSB3ZHRwY2lfaW5pdF9vbmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2hkYXBzLmMgYi9kcml2ZXJzL2h3bW9uL2hkYXBzLmMKaW5kZXggMWU1ZGZjNy4uYzgxYmQ0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9oZGFwcy5jCisrKyBiL2RyaXZlcnMvaHdtb24vaGRhcHMuYwpAQCAtNjAsOSArNjAsMTEgQEAKIAogI2RlZmluZSBIREFQU19QT0xMX1BFUklPRAkoSFovMjApCS8qIHBvbGwgZm9yIGlucHV0IGV2ZXJ5IDEvMjBzICovCiAjZGVmaW5lIEhEQVBTX0lOUFVUX0ZVWloJNAkvKiBpbnB1dCBldmVudCB0aHJlc2hvbGQgKi8KKyNkZWZpbmUgSERBUFNfSU5QVVRfRkxBVAk0CiAKIHN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBoZGFwc190aW1lcjsKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Oworc3RhdGljIHN0cnVjdCBpbnB1dF9kZXYgKmhkYXBzX2lkZXY7CiBzdGF0aWMgdW5zaWduZWQgaW50IGhkYXBzX2ludmVydDsKIHN0YXRpYyB1OCBrbV9hY3Rpdml0eTsKIHN0YXRpYyBpbnQgcmVzdF94OwpAQCAtMjg0LDcgKzI4Niw3IEBACiAKIC8qIERldmljZSBtb2RlbCBzdHVmZiAqLwogCi1zdGF0aWMgaW50IGhkYXBzX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaGRhcHNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCByZXQ7CiAKQEAgLTI5NiwyOSArMjk4LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaGRhcHNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaGRhcHNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gaGRhcHNfZGV2aWNlX2luaXQoKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGhkYXBzX2RyaXZlciA9IHsKLQkubmFtZSA9ICJoZGFwcyIsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGhkYXBzX2RyaXZlciA9IHsKIAkucHJvYmUgPSBoZGFwc19wcm9iZSwKLQkucmVzdW1lID0gaGRhcHNfcmVzdW1lCi19OwotCi0vKiBJbnB1dCBjbGFzcyBzdHVmZiAqLwotCi1zdGF0aWMgc3RydWN0IGlucHV0X2RldiBoZGFwc19pZGV2ID0gewotCS5uYW1lID0gImhkYXBzIiwKLQkuZXZiaXQgPSB7IEJJVChFVl9BQlMpIH0sCi0JLmFic2JpdCA9IHsgQklUKEFCU19YKSB8IEJJVChBQlNfWSkgfSwKLQkuYWJzbWluICA9IHsgW0FCU19YXSA9IC0yNTYsIFtBQlNfWV0gPSAtMjU2IH0sCi0JLmFic21heCAgPSB7IFtBQlNfWF0gPSAyNTYsIFtBQlNfWV0gPSAyNTYgfSwKLQkuYWJzZnV6eiA9IHsgW0FCU19YXSA9IEhEQVBTX0lOUFVUX0ZVWlosIFtBQlNfWV0gPSBIREFQU19JTlBVVF9GVVpaIH0sCi0JLmFic2ZsYXQgPSB7IFtBQlNfWF0gPSBIREFQU19JTlBVVF9GVVpaLCBbQUJTX1ldID0gSERBUFNfSU5QVVRfRlVaWiB9LAorCS5yZXN1bWUgPSBoZGFwc19yZXN1bWUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUgPSAiaGRhcHMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogLyoKQEAgLTM0Miw5ICszMzMsOSBAQAogCWlmIChfX2hkYXBzX3JlYWRfcGFpcihIREFQU19QT1JUX1hQT1MsIEhEQVBTX1BPUlRfWVBPUywgJngsICZ5KSkKIAkJZ290byBvdXQ7CiAKLQlpbnB1dF9yZXBvcnRfYWJzKCZoZGFwc19pZGV2LCBBQlNfWCwgeCAtIHJlc3RfeCk7Ci0JaW5wdXRfcmVwb3J0X2FicygmaGRhcHNfaWRldiwgQUJTX1ksIHkgLSByZXN0X3kpOwotCWlucHV0X3N5bmMoJmhkYXBzX2lkZXYpOworCWlucHV0X3JlcG9ydF9hYnMoaGRhcHNfaWRldiwgQUJTX1gsIHggLSByZXN0X3gpOworCWlucHV0X3JlcG9ydF9hYnMoaGRhcHNfaWRldiwgQUJTX1ksIHkgLSByZXN0X3kpOworCWlucHV0X3N5bmMoaGRhcHNfaWRldik7CiAKIAltb2RfdGltZXIoJmhkYXBzX3RpbWVyLCBqaWZmaWVzICsgSERBUFNfUE9MTF9QRVJJT0QpOwogCkBAIC01NTAsNyArNTQxLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZoZGFwc19kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaGRhcHNfZHJpdmVyKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9yZWdpb247CiAKQEAgLTU2NCwxMiArNTU1LDI1IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfZGV2aWNlOwogCisJaGRhcHNfaWRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghaGRhcHNfaWRldikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9ncm91cDsKKwl9CisKIAkvKiBpbml0aWFsIGNhbGlicmF0ZSBmb3IgdGhlIGlucHV0IGRldmljZSAqLwogCWhkYXBzX2NhbGlicmF0ZSgpOwogCiAJLyogaW5pdGlhbGl6ZSB0aGUgaW5wdXQgY2xhc3MgKi8KLQloZGFwc19pZGV2LmRldiA9ICZwZGV2LT5kZXY7Ci0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKCZoZGFwc19pZGV2KTsKKwloZGFwc19pZGV2LT5uYW1lID0gImhkYXBzIjsKKwloZGFwc19pZGV2LT5jZGV2LmRldiA9ICZwZGV2LT5kZXY7CisJaGRhcHNfaWRldi0+ZXZiaXRbMF0gPSBCSVQoRVZfQUJTKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoZGFwc19pZGV2LCBBQlNfWCwKKwkJCS0yNTYsIDI1NiwgSERBUFNfSU5QVVRfRlVaWiwgSERBUFNfSU5QVVRfRkxBVCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGRhcHNfaWRldiwgQUJTX1gsCisJCQktMjU2LCAyNTYsIEhEQVBTX0lOUFVUX0ZVWlosIEhEQVBTX0lOUFVUX0ZMQVQpOworCisJaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGhkYXBzX2lkZXYpOwogCiAJLyogc3RhcnQgdXAgb3VyIHRpbWVyIGZvciB0aGUgaW5wdXQgZGV2aWNlICovCiAJaW5pdF90aW1lcigmaGRhcHNfdGltZXIpOwpAQCAtNTgwLDEwICs1ODQsMTIgQEAKIAlwcmludGsoS0VSTl9JTkZPICJoZGFwczogZHJpdmVyIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4iKTsKIAlyZXR1cm4gMDsKIAorb3V0X2dyb3VwOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZoZGFwc19hdHRyaWJ1dGVfZ3JvdXApOwogb3V0X2RldmljZToKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKIG91dF9kcml2ZXI6Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmhkYXBzX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmhkYXBzX2RyaXZlcik7CiBvdXRfcmVnaW9uOgogCXJlbGVhc2VfcmVnaW9uKEhEQVBTX0xPV19QT1JULCBIREFQU19OUl9QT1JUUyk7CiBvdXQ6CkBAIC01OTQsMTAgKzYwMCwxMCBAQAogc3RhdGljIHZvaWQgX19leGl0IGhkYXBzX2V4aXQodm9pZCkKIHsKIAlkZWxfdGltZXJfc3luYygmaGRhcHNfdGltZXIpOwotCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKCZoZGFwc19pZGV2KTsKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShoZGFwc19pZGV2KTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmaGRhcHNfYXR0cmlidXRlX2dyb3VwKTsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmaGRhcHNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaGRhcHNfZHJpdmVyKTsKIAlyZWxlYXNlX3JlZ2lvbihIREFQU19MT1dfUE9SVCwgSERBUFNfTlJfUE9SVFMpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiaGRhcHM6IGRyaXZlciB1bmxvYWRlZC5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTM1LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1MzUuYwppbmRleCBiYTkwZjUxLi4zZWI0Nzg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1MzUuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1MzUuYwpAQCAtNTEzLDcgKzUxMyw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhbGkxNTM1X2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFsaTE1MzVfc21idXMiLAogCS5pZF90YWJsZQk9IGFsaTE1MzVfaWRzLAogCS5wcm9iZQkJPSBhbGkxNTM1X3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTYzLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1NjMuYwppbmRleCBmMWE2MmQ4Li5lNmY2MzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1NjMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1NjMuYwpAQCAtNDA4LDcgKzQwOCw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFIChwY2ksIGFsaTE1NjNfaWRfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWxpMTU2M19wY2lfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKICAJLm5hbWUJCT0gImFsaTE1NjNfc21idXMiLAogCS5pZF90YWJsZQk9IGFsaTE1NjNfaWRfdGFibGUsCiAgCS5wcm9iZQkJPSBhbGkxNTYzX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNXgzLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1eDMuYwppbmRleCA0MDBiMDhlLi43YTVjMDk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1eDMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1eDMuYwpAQCAtNTA0LDcgKzUwNCw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhbGkxNXgzX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFsaTE1eDNfc21idXMiLAogCS5pZF90YWJsZQk9IGFsaTE1eDNfaWRzLAogCS5wcm9iZQkJPSBhbGkxNXgzX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LmMKaW5kZXggZGUwMzVkMS4uMTc1MGRlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDc1Ni5jCkBAIC00MDEsNyArNDAxLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFtZDc1Nl9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhbWQ3NTZfc21idXMiLAogCS5pZF90YWJsZQk9IGFtZDc1Nl9pZHMsCiAJLnByb2JlCQk9IGFtZDc1Nl9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kODExMS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExLmMKaW5kZXggZjNiNzlhNi4uZTVlZjU2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExLmMKQEAgLTM4NCw3ICszODQsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYW1kODExMV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhbWQ4MTExX3NtYnVzMiIsCiAJLmlkX3RhYmxlCT0gYW1kODExMV9pZHMsCiAJLnByb2JlCQk9IGFtZDgxMTFfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWh5ZHJhLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWh5ZHJhLmMKaW5kZXggMWI1MzU0ZS4uZTBjYjNiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1oeWRyYS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaHlkcmEuYwpAQCAtMTU1LDcgKzE1NSw2IEBACiAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGh5ZHJhX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImh5ZHJhX3NtYnVzIiwKIAkuaWRfdGFibGUJPSBoeWRyYV9pZHMsCiAJLnByb2JlCQk9IGh5ZHJhX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYwppbmRleCA0ZjYzMTk1MC4uYWMzZWFmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKQEAgLTU2MCw3ICs1NjAsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaTgwMV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJpODAxX3NtYnVzIiwKIAkuaWRfdGFibGUJPSBpODAxX2lkcywKIAkucHJvYmUJCT0gaTgwMV9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgxMC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODEwLmMKaW5kZXggNTJiYzMwNS4uNzQ4YmUzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODEwLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODEwLmMKQEAgLTIzMyw3ICsyMzMsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaTgxMF9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJpODEwX3NtYnVzIiwKIAkuaWRfdGFibGUJPSBpODEwX2lkcywKIAkucHJvYmUJCT0gaTgxMF9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW9wM3h4LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlvcDN4eC5jCmluZGV4IGNmYWU0YWQuLjE0MTQ4NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW9wM3h4LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pb3AzeHguYwpAQCAtNDA1LDEwICs0MDUsOSBAQAogfTsKIAogc3RhdGljIGludCAKLWlvcDN4eF9pMmNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK2lvcDN4eF9pMmNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXZpY2UpOwotCXN0cnVjdCBpMmNfYWRhcHRlciAqcGFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJc3RydWN0IGkyY19hZGFwdGVyICpwYWRhcHRlciA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBpMmNfYWxnb19pb3AzeHhfZGF0YSAqYWRhcHRlcl9kYXRhID0gCiAJCShzdHJ1Y3QgaTJjX2FsZ29faW9wM3h4X2RhdGEgKilwYWRhcHRlci0+YWxnb19kYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKQEAgLTQyNiwxNSArNDI1LDE0IEBACiAJa2ZyZWUoYWRhcHRlcl9kYXRhKTsKIAlrZnJlZShwYWRhcHRlcik7CiAKLQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCAKLWlvcDN4eF9pMmNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoraW9wM3h4X2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgcmV0OwogCXN0cnVjdCBpMmNfYWRhcHRlciAqbmV3X2FkYXB0ZXI7CkBAIC00OTksNyArNDk3LDcgQEAKIAlpb3AzeHhfaTJjX3NldF9zbGF2ZV9hZGRyKGFkYXB0ZXJfZGF0YSk7CiAJaW9wM3h4X2kyY19lbmFibGUoYWRhcHRlcl9kYXRhKTsKIAotCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBuZXdfYWRhcHRlcik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbmV3X2FkYXB0ZXIpOwogCW5ld19hZGFwdGVyLT5hbGdvX2RhdGEgPSBhZGFwdGVyX2RhdGE7CiAKIAlpMmNfYWRkX2FkYXB0ZXIobmV3X2FkYXB0ZXIpOwpAQCAtNTIzLDI0ICs1MjEsMjUgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgaW9wM3h4X2kyY19kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQk9ICJJT1AzeHgtSTJDIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlvcDN4eF9pMmNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBpb3AzeHhfaTJjX3Byb2JlLAotCS5yZW1vdmUJCT0gaW9wM3h4X2kyY19yZW1vdmUKKwkucmVtb3ZlCQk9IGlvcDN4eF9pMmNfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAiSU9QM3h4LUkyQyIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IAogaTJjX2lvcDN4eF9pbml0ICh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmlvcDN4eF9pMmNfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpb3AzeHhfaTJjX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCAKIGkyY19pb3AzeHhfZXhpdCAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmaW9wM3h4X2kyY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpb3AzeHhfaTJjX2RyaXZlcik7CiAJcmV0dXJuOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWl4cDIwMDAuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXhwMjAwMC5jCmluZGV4IDY0NTUyYTMuLmNlZjAyNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXhwMjAwMC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXhwMjAwMC5jCkBAIC04NiwxMiArODYsMTEgQEAKIAlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgYWxnb19kYXRhOwogfTsKIAotc3RhdGljIGludCBpeHAyMDAwX2kyY19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBpeHAyMDAwX2kyY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdF9kZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdF9kZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgaXhwMjAwMF9pMmNfZGF0YSAqZHJ2X2RhdGEgPSBkZXZfZ2V0X2RydmRhdGEoJnBsYXRfZGV2LT5kZXYpOworCXN0cnVjdCBpeHAyMDAwX2kyY19kYXRhICpkcnZfZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBsYXRfZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YSgmcGxhdF9kZXYtPmRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGxhdF9kZXYsIE5VTEwpOwogCiAJaTJjX2JpdF9kZWxfYnVzKCZkcnZfZGF0YS0+YWRhcHRlcik7CiAKQEAgLTEwMCwxMCArOTksOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGl4cDIwMDBfaTJjX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaXhwMjAwMF9pMmNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdF9kZXYpCiB7CiAJaW50IGVycjsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0X2RldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBpeHAyMDAwX2kyY19waW5zICpncGlvID0gcGxhdF9kZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBpeHAyMDAwX2kyY19kYXRhICpkcnZfZGF0YSA9IAogCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgaXhwMjAwMF9pMmNfZGF0YSksIEdGUF9LRVJORUwpOwpAQCAtMTM5LDI3ICsxMzcsMjggQEAKIAkJcmV0dXJuIGVycjsKIAl9IAogCi0JZGV2X3NldF9kcnZkYXRhKCZwbGF0X2Rldi0+ZGV2LCBkcnZfZGF0YSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGxhdF9kZXYsIGRydl9kYXRhKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgaXhwMjAwMF9pMmNfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJPSAiSVhQMjAwMC1JMkMiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXhwMjAwMF9pMmNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBpeHAyMDAwX2kyY19wcm9iZSwKIAkucmVtb3ZlCQk9IGl4cDIwMDBfaTJjX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiSVhQMjAwMC1JMkMiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaXhwMjAwMF9pMmNfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJml4cDIwMDBfaTJjX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaXhwMjAwMF9pMmNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGl4cDIwMDBfaTJjX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmaXhwMjAwMF9pMmNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaXhwMjAwMF9pMmNfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoaXhwMjAwMF9pMmNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWl4cDR4eC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1peHA0eHguYwppbmRleCBjYzY1MmMzLi5hYTM2ODU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWl4cDR4eC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXhwNHh4LmMKQEAgLTg3LDEyICs4NywxMSBAQAogCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSBhbGdvX2RhdGE7CiB9OwogCi1zdGF0aWMgaW50IGl4cDR4eF9pMmNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaXhwNHh4X2kyY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdF9kZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdF9kZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgaXhwNHh4X2kyY19kYXRhICpkcnZfZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YSgmcGxhdF9kZXYtPmRldik7CisJc3RydWN0IGl4cDR4eF9pMmNfZGF0YSAqZHJ2X2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwbGF0X2Rldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoJnBsYXRfZGV2LT5kZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBsYXRfZGV2LCBOVUxMKTsKIAogCWkyY19iaXRfZGVsX2J1cygmZHJ2X2RhdGEtPmFkYXB0ZXIpOwogCkBAIC0xMDEsMTAgKzEwMCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaXhwNHh4X2kyY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGl4cDR4eF9pMmNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdF9kZXYpCiB7CiAJaW50IGVycjsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0X2RldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBpeHA0eHhfaTJjX3BpbnMgKmdwaW8gPSBwbGF0X2Rldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGl4cDR4eF9pMmNfZGF0YSAqZHJ2X2RhdGEgPSAKIAkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGl4cDR4eF9pMmNfZGF0YSksIEdGUF9LRVJORUwpOwpAQCAtMTQ4LDI3ICsxNDYsMjggQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoJnBsYXRfZGV2LT5kZXYsIGRydl9kYXRhKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwbGF0X2RldiwgZHJ2X2RhdGEpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBpeHA0eHhfaTJjX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCT0gIklYUDRYWC1JMkMiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXhwNHh4X2kyY19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGl4cDR4eF9pMmNfcHJvYmUsCiAJLnJlbW92ZQkJPSBpeHA0eHhfaTJjX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiSVhQNFhYLUkyQyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpeHA0eHhfaTJjX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZpeHA0eHhfaTJjX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaXhwNHh4X2kyY19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXhwNHh4X2kyY19leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJml4cDR4eF9pMmNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaXhwNHh4X2kyY19kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChpeHA0eHhfaTJjX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKaW5kZXggNjViOTM5YS4uNWNjZDMzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCkBAIC0yODgsMTEgKzI4OCwxMCBAQAogCS5yZXRyaWVzID0gMQogfTsKIAotc3RhdGljIGludCBmc2xfaTJjX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgZnNsX2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWludCByZXN1bHQgPSAwOwogCXN0cnVjdCBtcGNfaTJjICppMmM7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXZpY2UpOwogCXN0cnVjdCBmc2xfaTJjX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAKQEAgLTMyMyw3ICszMjIsNyBAQAogCQl9CiAKIAltcGNfaTJjX3NldGNsb2NrKGkyYyk7Ci0JZGV2X3NldF9kcnZkYXRhKGRldmljZSwgaTJjKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpMmMpOwogCiAJaTJjLT5hZGFwID0gbXBjX29wczsKIAlpMmNfc2V0X2FkYXBkYXRhKCZpMmMtPmFkYXAsIGkyYyk7CkBAIC0zNDUsMTIgKzM0NCwxMiBAQAogCXJldHVybiByZXN1bHQ7CiB9OwogCi1zdGF0aWMgaW50IGZzbF9pMmNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgZnNsX2kyY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgbXBjX2kyYyAqaTJjID0gZGV2X2dldF9kcnZkYXRhKGRldmljZSk7CisJc3RydWN0IG1wY19pMmMgKmkyYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJaTJjX2RlbF9hZGFwdGVyKCZpMmMtPmFkYXApOwotCWRldl9zZXRfZHJ2ZGF0YShkZXZpY2UsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJaWYgKGkyYy0+aXJxICE9IDApCiAJCWZyZWVfaXJxKGkyYy0+aXJxLCBpMmMpOwpAQCAtMzYxLDIyICszNjAsMjMgQEAKIH07CiAKIC8qIFN0cnVjdHVyZSBmb3IgYSBkZXZpY2UgZHJpdmVyICovCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgZnNsX2kyY19kcml2ZXIgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLm5hbWUgPSAiZnNsLWkyYyIsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZzbF9pMmNfZHJpdmVyID0gewogCS5wcm9iZSA9IGZzbF9pMmNfcHJvYmUsCiAJLnJlbW92ZSA9IGZzbF9pMmNfcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZSA9ICJmc2wtaTJjIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgZnNsX2kyY19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmZnNsX2kyY19kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmZzbF9pMmNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGZzbF9pMmNfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZmc2xfaTJjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmZzbF9pMmNfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZnNsX2kyY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXY2NHh4eC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdjY0eHh4LmMKaW5kZXggNmI0ODAyNy4uYWZkNzYzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdjY0eHh4LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdjY0eHh4LmMKQEAgLTQ5MiwxMSArNDkyLDEwIEBACiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0Ci1tdjY0eHh4X2kyY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCittdjY0eHh4X2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZCkKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqcGQgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgbXY2NHh4eF9pMmNfZGF0YQkJKmRydl9kYXRhOwotCXN0cnVjdCBtdjY0eHh4X2kyY19wZGF0YQkqcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG12NjR4eHhfaTJjX3BkYXRhCSpwZGF0YSA9IHBkLT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQJcmM7CiAKIAlpZiAoKHBkLT5pZCAhPSAwKSB8fCAhcGRhdGEpCkBAIC01MjYsNyArNTI1LDcgQEAKIAlkcnZfZGF0YS0+YWRhcHRlci5jbGFzcyA9IEkyQ19DTEFTU19IV01PTjsKIAlkcnZfZGF0YS0+YWRhcHRlci50aW1lb3V0ID0gcGRhdGEtPnRpbWVvdXQ7CiAJZHJ2X2RhdGEtPmFkYXB0ZXIucmV0cmllcyA9IHBkYXRhLT5yZXRyaWVzOwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRydl9kYXRhKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZCwgZHJ2X2RhdGEpOwogCWkyY19zZXRfYWRhcGRhdGEoJmRydl9kYXRhLT5hZGFwdGVyLCBkcnZfZGF0YSk7CiAKIAlpZiAocmVxdWVzdF9pcnEoZHJ2X2RhdGEtPmlycSwgbXY2NHh4eF9pMmNfaW50ciwgMCwKQEAgLTU1NSw5ICs1NTQsOSBAQAogfQogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdAotbXY2NHh4eF9pMmNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK212NjR4eHhfaTJjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG12NjR4eHhfaTJjX2RhdGEJCSpkcnZfZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtdjY0eHh4X2kyY19kYXRhCQkqZHJ2X2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWludAlyYzsKIAogCXJjID0gaTJjX2RlbF9hZGFwdGVyKCZkcnZfZGF0YS0+YWRhcHRlcik7CkBAIC01NjgsMjQgKzU2NywyNSBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG12NjR4eHhfaTJjX2RyaXZlciA9IHsKLQkub3duZXIJPSBUSElTX01PRFVMRSwKLQkubmFtZQk9IE1WNjRYWFhfSTJDX0NUTFJfTkFNRSwKLQkuYnVzCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXY2NHh4eF9pMmNfZHJpdmVyID0gewogCS5wcm9iZQk9IG12NjR4eHhfaTJjX3Byb2JlLAogCS5yZW1vdmUJPSBtdjY0eHh4X2kyY19yZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gTVY2NFhYWF9JMkNfQ1RMUl9OQU1FLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdAogbXY2NHh4eF9pMmNfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJm12NjR4eHhfaTJjX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXY2NHh4eF9pMmNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0CiBtdjY0eHh4X2kyY19leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm12NjR4eHhfaTJjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm12NjR4eHhfaTJjX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KG12NjR4eHhfaTJjX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5mb3JjZTIuYwppbmRleCBmZDI2MDM2Li40ZDE4ZTZlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMKQEAgLTM0Nyw3ICszNDcsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmZvcmNlMl9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJuRm9yY2UyX3NtYnVzIiwKIAkuaWRfdGFibGUJPSBuZm9yY2UyX2lkcywKIAkucHJvYmUJCT0gbmZvcmNlMl9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYwppbmRleCA3ZDYzZWVjLi42OTJmNDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBpaXg0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jCkBAIC00NjIsNyArNDYyLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHBpaXg0X2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gInBpaXg0X3NtYnVzIiwKIAkuaWRfdGFibGUJPSBwaWl4NF9pZHMsCiAJLnByb2JlCQk9IHBpaXg0X3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wcm9zYXZhZ2UuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHJvc2F2YWdlLmMKaW5kZXggNDJjYjFkOC4uOTQ3OTUyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wcm9zYXZhZ2UuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXByb3NhdmFnZS5jCkBAIC0zMDEsNyArMzAxLDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKHBjaSwgcHJvc2F2YWdlX3BjaV90YmwpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcHJvc2F2YWdlX2RyaXZlciA9IHsKLQkub3duZXIJCT0JVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0JInByb3NhdmFnZV9zbWJ1cyIsCiAJLmlkX3RhYmxlCT0JcHJvc2F2YWdlX3BjaV90YmwsCiAJLnByb2JlCQk9CXByb3NhdmFnZV9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCmluZGV4IDY3Y2NiZWEuLjcwZjdhYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYwpAQCAtOTM2LDEwICs5MzYsMTAgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCBpMmNfcHhhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaTJjX3B4YV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHB4YV9pMmMgKmkyYyA9ICZpMmNfcHhhOwotCXN0cnVjdCBpMmNfcHhhX3BsYXRmb3JtX2RhdGEgKnBsYXQgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGkyY19weGFfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaW50IHJldDsKIAogI2lmZGVmIENPTkZJR19QWEEyN3gKQEAgLTk2OCw3ICs5NjgsNyBAQAogCWkyY19weGFfcmVzZXQoaTJjKTsKIAogCWkyYy0+YWRhcC5hbGdvX2RhdGEgPSBpMmM7Ci0JaTJjLT5hZGFwLmRldi5wYXJlbnQgPSBkZXY7CisJaTJjLT5hZGFwLmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7CiAKIAlyZXQgPSBpMmNfYWRkX2FkYXB0ZXIoJmkyYy0+YWRhcCk7CiAJaWYgKHJldCA8IDApIHsKQEAgLTk3Niw3ICs5NzYsNyBAQAogCQlnb3RvIGVycl9pcnE7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgaTJjKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGkyYyk7CiAKICNpZmRlZiBDT05GSUdfSTJDX1BYQV9TTEFWRQogCXByaW50ayhLRVJOX0lORk8gIkkyQzogJXM6IFBYQSBJMkMgYWRhcHRlciwgc2xhdmUgYWRkcmVzcyAlZFxuIiwKQEAgLTk5MywxMSArOTkzLDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpMmNfcHhhX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGkyY19weGFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhX2kyYyAqaTJjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHB4YV9pMmMgKmkyYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAJaTJjX2RlbF9hZGFwdGVyKCZpMmMtPmFkYXApOwogCWZyZWVfaXJxKElSUV9JMkMsIGkyYyk7CkBAIC0xMDA2LDIxICsxMDA2LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBpMmNfcHhhX2RyaXZlciA9IHsKLQkubmFtZQkJPSAicHhhMnh4LWkyYyIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpMmNfcHhhX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gaTJjX3B4YV9wcm9iZSwKIAkucmVtb3ZlCQk9IGkyY19weGFfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJweGEyeHgtaTJjIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaTJjX2FkYXBfcHhhX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZpMmNfcHhhX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaTJjX3B4YV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBpMmNfYWRhcF9weGFfZXhpdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfdW5yZWdpc3RlcigmaTJjX3B4YV9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaTJjX3B4YV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChpMmNfYWRhcF9weGFfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtczNjMjQxMC5jCmluZGV4IDFiNTgyMjYuLjU4Y2ZkMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtczNjMjQxMC5jCkBAIC03NjAsMjQgKzc2MCwyMyBAQAogICogY2FsbGVkIGJ5IHRoZSBidXMgZHJpdmVyIHdoZW4gYSBzdWl0YWJsZSBkZXZpY2UgaXMgZm91bmQKICovCiAKLXN0YXRpYyBpbnQgczNjMjR4eF9pMmNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNHh4X2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgczNjMjR4eF9pMmMgKmkyYyA9ICZzM2MyNHh4X2kyYzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgcmV0OwogCiAJLyogZmluZCB0aGUgY2xvY2sgYW5kIGVuYWJsZSBpdCAqLwogCi0JaTJjLT5kZXYgPSBkZXY7Ci0JaTJjLT5jbGsgPSBjbGtfZ2V0KGRldiwgImkyYyIpOworCWkyYy0+ZGV2ID0gJnBkZXYtPmRldjsKKwlpMmMtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImkyYyIpOwogCWlmIChJU19FUlIoaTJjLT5jbGspKSB7Ci0JCWRldl9lcnIoZGV2LCAiY2Fubm90IGdldCBjbG9ja1xuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBnZXQgY2xvY2tcbiIpOwogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIG91dDsKIAl9CiAKLQlkZXZfZGJnKGRldiwgImNsb2NrIHNvdXJjZSAlcFxuIiwgaTJjLT5jbGspOworCWRldl9kYmcoJnBkZXYtPmRldiwgImNsb2NrIHNvdXJjZSAlcFxuIiwgaTJjLT5jbGspOwogCiAJY2xrX3VzZShpMmMtPmNsayk7CiAJY2xrX2VuYWJsZShpMmMtPmNsayk7CkBAIC03ODYsNyArNzg1LDcgQEAKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKHJlcyA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAiY2Fubm90IGZpbmQgSU8gcmVzb3VyY2VcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZmluZCBJTyByZXNvdXJjZVxuIik7CiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTc5NSw3ICs3OTQsNyBAQAogCQkJCQkgcGRldi0+bmFtZSk7CiAKIAlpZiAoaTJjLT5pb2FyZWEgPT0gTlVMTCkgewotCQlkZXZfZXJyKGRldiwgImNhbm5vdCByZXF1ZXN0IElPXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlcXVlc3QgSU9cbiIpOwogCQlyZXQgPSAtRU5YSU87CiAJCWdvdG8gb3V0OwogCX0KQEAgLTgwMywxNyArODAyLDE3IEBACiAJaTJjLT5yZWdzID0gaW9yZW1hcChyZXMtPnN0YXJ0LCAocmVzLT5lbmQtcmVzLT5zdGFydCkrMSk7CiAKIAlpZiAoaTJjLT5yZWdzID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJjYW5ub3QgbWFwIElPXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IG1hcCBJT1xuIik7CiAJCXJldCA9IC1FTlhJTzsKIAkJZ290byBvdXQ7CiAJfQogCi0JZGV2X2RiZyhkZXYsICJyZWdpc3RlcnMgJXAgKCVwLCAlcClcbiIsIGkyYy0+cmVncywgaTJjLT5pb2FyZWEsIHJlcyk7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAicmVnaXN0ZXJzICVwICglcCwgJXApXG4iLCBpMmMtPnJlZ3MsIGkyYy0+aW9hcmVhLCByZXMpOwogCiAJLyogc2V0dXAgaW5mbyBibG9jayBmb3IgdGhlIGkyYyBjb3JlICovCiAKIAlpMmMtPmFkYXAuYWxnb19kYXRhID0gaTJjOwotCWkyYy0+YWRhcC5kZXYucGFyZW50ID0gZGV2OworCWkyYy0+YWRhcC5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKIAogCS8qIGluaXRpYWxpc2UgdGhlIGkyYyBjb250cm9sbGVyICovCiAKQEAgLTgyNyw3ICs4MjYsNyBAQAogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKIAlpZiAocmVzID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJjYW5ub3QgZmluZCBJUlFcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZmluZCBJUlFcbiIpOwogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIG91dDsKIAl9CkBAIC04MzYsMjMgKzgzNSwyMyBAQAogCQkJICBwZGV2LT5uYW1lLCBpMmMpOwogCiAJaWYgKHJldCAhPSAwKSB7Ci0JCWRldl9lcnIoZGV2LCAiY2Fubm90IGNsYWltIElSUVxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBjbGFpbSBJUlFcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpMmMtPmlycSA9IHJlczsKIAkJCi0JZGV2X2RiZyhkZXYsICJpcnEgcmVzb3VyY2UgJXAgKCVsZClcbiIsIHJlcywgcmVzLT5zdGFydCk7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAiaXJxIHJlc291cmNlICVwICglbGQpXG4iLCByZXMsIHJlcy0+c3RhcnQpOwogCiAJcmV0ID0gaTJjX2FkZF9hZGFwdGVyKCZpMmMtPmFkYXApOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFkZCBidXMgdG8gaTJjIGNvcmVcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWRkIGJ1cyB0byBpMmMgY29yZVxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGkyYyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaTJjKTsKIAotCWRldl9pbmZvKGRldiwgIiVzOiBTM0MgSTJDIGFkYXB0ZXJcbiIsIGkyYy0+YWRhcC5kZXYuYnVzX2lkKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXM6IFMzQyBJMkMgYWRhcHRlclxuIiwgaTJjLT5hZGFwLmRldi5idXNfaWQpOwogCiAgb3V0OgogCWlmIChyZXQgPCAwKQpAQCAtODY2LDIyICs4NjUsMjIgQEAKICAqIGNhbGxlZCB3aGVuIGRldmljZSBpcyByZW1vdmVkIGZyb20gdGhlIGJ1cwogKi8KIAotc3RhdGljIGludCBzM2MyNHh4X2kyY19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNHh4X2kyY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgczNjMjR4eF9pMmMgKmkyYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzM2MyNHh4X2kyYyAqaTJjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJCiAJaWYgKGkyYyAhPSBOVUxMKSB7CiAJCXMzYzI0eHhfaTJjX2ZyZWUoaTJjKTsKLQkJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCX0KIAogCXJldHVybiAwOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHMzYzI0eHhfaTJjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0eHhfaTJjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHMzYzI0eHhfaTJjICppMmMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgczNjMjR4eF9pMmMgKmkyYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoaTJjICE9IE5VTEwpCiAJCXMzYzI0eHhfaTJjX2luaXQoaTJjKTsKQEAgLTg5NSwzMyArODk0LDM1IEBACiAKIC8qIGRldmljZSBkcml2ZXIgZm9yIHBsYXRmb3JtIGJ1cyBiaXRzICovCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzM2MyNDEwX2kyY19kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQk9ICJzM2MyNDEwLWkyYyIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2MyNDEwX2kyY19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHMzYzI0eHhfaTJjX3Byb2JlLAogCS5yZW1vdmUJCT0gczNjMjR4eF9pMmNfcmVtb3ZlLAogCS5yZXN1bWUJCT0gczNjMjR4eF9pMmNfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAiczNjMjQxMC1pMmMiLAorCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgczNjMjQ0MF9pMmNfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJPSAiczNjMjQ0MC1pMmMiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjQ0MF9pMmNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzM2MyNHh4X2kyY19wcm9iZSwKIAkucmVtb3ZlCQk9IHMzYzI0eHhfaTJjX3JlbW92ZSwKIAkucmVzdW1lCQk9IHMzYzI0eHhfaTJjX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gInMzYzI0NDAtaTJjIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaTJjX2FkYXBfczNjX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwX2kyY19kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMF9pMmNfZHJpdmVyKTsKIAlpZiAocmV0ID09IDApIHsKLQkJcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDQwX2kyY19kcml2ZXIpOworCQlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDBfaTJjX2RyaXZlcik7CiAJCWlmIChyZXQpCi0JCQlkcml2ZXJfdW5yZWdpc3RlcigmczNjMjQxMF9pMmNfZHJpdmVyKTsKKwkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDEwX2kyY19kcml2ZXIpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC05MjksOCArOTMwLDggQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGkyY19hZGFwX3MzY19leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0MTBfaTJjX2RyaXZlcik7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0NDBfaTJjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0MTBfaTJjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0NDBfaTJjX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGkyY19hZGFwX3MzY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2F2YWdlNC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zYXZhZ2U0LmMKaW5kZXggYWViZTg3Yi4uMGM4NTE4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zYXZhZ2U0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zYXZhZ2U0LmMKQEAgLTE3OSw3ICsxNzksNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2F2YWdlNF9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJzYXZhZ2U0X3NtYnVzIiwKIAkuaWRfdGFibGUJPSBzYXZhZ2U0X2lkcywKIAkucHJvYmUJCT0gc2F2YWdlNF9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNTU5NS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM1NTk1LmMKaW5kZXggM2FkMjdjMy4uYjU3YWI3NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNTU5NS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNTU5NS5jCkBAIC0zOTgsNyArMzk4LDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNpczU1OTVfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAic2lzNTU5NV9zbWJ1cyIsCiAJLmlkX3RhYmxlCT0gc2lzNTU5NV9pZHMsCiAJLnByb2JlCQk9IHNpczU1OTVfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczYzMC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM2MzAuYwppbmRleCA3ZjQ5ZTVmLi5hY2I3NWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczYzMC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNjMwLmMKQEAgLTQ5Niw3ICs0OTYsNiBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzaXM2MzBfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAic2lzNjMwX3NtYnVzIiwKIAkuaWRfdGFibGUJPSBzaXM2MzBfaWRzLAogCS5wcm9iZQkJPSBzaXM2MzBfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczk2eC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM5NnguYwppbmRleCA2YTEzNGMwLi4zMDI0OTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczk2eC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMKQEAgLTMyOSw3ICszMjksNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2lzOTZ4X2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gInNpczk2eF9zbWJ1cyIsCiAJLmlkX3RhYmxlCT0gc2lzOTZ4X2lkcywKIAkucHJvYmUJCT0gc2lzOTZ4X3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhLmMKaW5kZXggNTQ0YTM4ZS4uNDg0YmJhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYS5jCkBAIC0xNTksNyArMTU5LDYgQEAKIAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdnQ1ODZiX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gInZ0NTg2Yl9zbWJ1cyIsCiAJLmlkX3RhYmxlCT0gdnQ1ODZiX2lkcywKIAkucHJvYmUJCT0gdnQ1ODZiX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMKaW5kZXggYTIyMzdkNC4uNDdlNTJiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYXByby5jCkBAIC00NDAsNyArNDQwLDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB2dDU5Nl9pZHMpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdnQ1OTZfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAidnQ1OTZfc21idXMiLAogCS5pZF90YWJsZQk9IHZ0NTk2X2lkcywKIAkucHJvYmUJCT0gdnQ1OTZfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZvb2RvbzMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdm9vZG9vMy5jCmluZGV4IDY1MGMzZWIuLmI2NzU3NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdm9vZG9vMy5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdm9vZG9vMy5jCkBAIC0yMjUsNyArMjI1LDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHZvb2RvbzNfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAidm9vZG9vM19zbWJ1cyIsCiAJLmlkX3RhYmxlCT0gdm9vZG9vM19pZHMsCiAJLnByb2JlCQk9IHZvb2RvbzNfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9pc3AxMzAxX29tYXAuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL2lzcDEzMDFfb21hcC5jCmluZGV4IDlkYmI3MmYuLmQyYTEwMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL2lzcDEzMDFfb21hcC5jCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL2lzcDEzMDFfb21hcC5jCkBAIC04NzMsMjYgKzg3MywyNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG90Z19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG90Z19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJLy8gc3RydWN0IG9tYXBfdXNiX2NvbmZpZyAqY29uZmlnID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwogCi0Jb3RnX2RldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCW90Z19kZXYgPSBkZXY7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb3RnX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG90Z19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCW90Z19kZXYgPSAwOwogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgZGV2aWNlX2RyaXZlciBvbWFwX290Z19kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQk9ICJvbWFwX290ZyIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXBfb3RnX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb3RnX3Byb2JlLAotCS5yZW1vdmUJCT0gb3RnX3JlbW92ZSwJCisJLnJlbW92ZQkJPSBvdGdfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAib21hcF9vdGciLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IG90Z19iaW5kKHN0cnVjdCBpc3AxMzAxICppc3ApCkBAIC05MDIsNyArOTAzLDcgQEAKIAlpZiAob3RnX2RldikKIAkJcmV0dXJuIC1FQlVTWTsKIAotCXN0YXR1cyA9IGRyaXZlcl9yZWdpc3Rlcigmb21hcF9vdGdfZHJpdmVyKTsKKwlzdGF0dXMgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9tYXBfb3RnX2RyaXZlcik7CiAJaWYgKHN0YXR1cyA8IDApCiAJCXJldHVybiBzdGF0dXM7CiAKQEAgLTkxMyw3ICs5MTQsNyBAQAogCQlzdGF0dXMgPSAtRU5PREVWOwogCiAJaWYgKHN0YXR1cyA8IDApCi0JCWRyaXZlcl91bnJlZ2lzdGVyKCZvbWFwX290Z19kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb21hcF9vdGdfZHJpdmVyKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYyBiL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jCmluZGV4IDE4ZWQ3NzYuLmQ0ZjIxMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jCisrKyBiL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jCkBAIC03ODcsOCArNzg3LDkgQEAKIHN0YXRpYyBMSVNUX0hFQUQoaWRlX3BjaV9kcml2ZXJzKTsKIAogLyoKLSAqCWlkZV9yZWdpc3Rlcl9wY2lfZHJpdmVyCQktCWF0dGFjaCBJREUgZHJpdmVyCisgKglfX2lkZV9yZWdpc3Rlcl9wY2lfZHJpdmVyCS0JYXR0YWNoIElERSBkcml2ZXIKICAqCUBkcml2ZXI6IHBjaSBkcml2ZXIKKyAqCUBtb2R1bGU6IG93bmVyIG1vZHVsZSBvZiB0aGUgZHJpdmVyCiAgKgogICoJUmVnaXN0ZXJzIGEgZHJpdmVyIHdpdGggdGhlIElERSBsYXllci4gVGhlIElERSBsYXllciBhcnJhbmdlcyB0aGF0CiAgKglib290IHRpbWUgc2V0dXAgaXMgZG9uZSBpbiB0aGUgZXhwZWN0ZWQgZGV2aWNlIG9yZGVyIGFuZCB0aGVuIApAQCAtODAxLDE1ICs4MDIsMTYgQEAKICAqCVJldHVybnMgYXJlIHRoZSBzYW1lIGFzIGZvciBwY2lfcmVnaXN0ZXJfZHJpdmVyCiAgKi8KIAotaW50IGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY2lfZHJpdmVyICpkcml2ZXIpCitpbnQgX19pZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqZHJpdmVyLCBzdHJ1Y3QgbW9kdWxlICptb2R1bGUpCiB7CiAJaWYoIXByZV9pbml0KQotCQlyZXR1cm4gcGNpX21vZHVsZV9pbml0KGRyaXZlcik7CisJCXJldHVybiBfX3BjaV9yZWdpc3Rlcl9kcml2ZXIoZHJpdmVyLCBtb2R1bGUpOworCWRyaXZlci0+ZHJpdmVyLm93bmVyID0gbW9kdWxlOwogCWxpc3RfYWRkX3RhaWwoJmRyaXZlci0+bm9kZSwgJmlkZV9wY2lfZHJpdmVycyk7CiAJcmV0dXJuIDA7CiB9CiAKLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKTsKK0VYUE9SVF9TWU1CT0xfR1BMKF9faWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIpOwogCiAvKioKICAqCWlkZV91bnJlZ2lzdGVyX3BjaV9kcml2ZXIJLQl1bnJlZ2lzdGVyIGFuIElERSBkcml2ZXIKQEAgLTg5Nyw2ICs4OTksNiBAQAogCXsKIAkJbGlzdF9kZWwobCk7CiAJCWQgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBwY2lfZHJpdmVyLCBub2RlKTsKLQkJcGNpX3JlZ2lzdGVyX2RyaXZlcihkKTsKKwkJX19wY2lfcmVnaXN0ZXJfZHJpdmVyKGQsIGQtPmRyaXZlci5vd25lcik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMKaW5kZXggYWVkNWNhMi4uNWVhNzQxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jCkBAIC0zMSw3ICszMSw3IEBACiAgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCiAgKiBTT0ZUV0FSRS4KICAqCi0gKiAkSWQ6IHVzZXJfbWFkLmMgMjgxNCAyMDA1LTA3LTA2IDE5OjE0OjA5WiBoYWxyICQKKyAqICRJZDogdXNlcl9tYWQuYyA0MDEwIDIwMDUtMTEtMDkgMjM6MTE6NTZaIHJvbGFuZCAkCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMTEwLDEzICsxMTAsMTMgQEAKIH07CiAKIHN0cnVjdCBpYl91bWFkX2ZpbGUgewotCXN0cnVjdCBpYl91bWFkX3BvcnQgKnBvcnQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCAgICAgcmVjdl9saXN0OwotCXN0cnVjdCBsaXN0X2hlYWQgICAgIHBvcnRfbGlzdDsKLQlzcGlubG9ja190ICAgICAgICAgICByZWN2X2xvY2s7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgICAgcmVjdl93YWl0OwotCXN0cnVjdCBpYl9tYWRfYWdlbnQgKmFnZW50W0lCX1VNQURfTUFYX0FHRU5UU107Ci0Jc3RydWN0IGliX21yICAgICAgICAqbXJbSUJfVU1BRF9NQVhfQUdFTlRTXTsKKwlzdHJ1Y3QgaWJfdW1hZF9wb3J0ICAgICpwb3J0OworCXN0cnVjdCBsaXN0X2hlYWQJcmVjdl9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJcG9ydF9saXN0OworCXNwaW5sb2NrX3QJCXJlY3ZfbG9jazsKKwl3YWl0X3F1ZXVlX2hlYWRfdAlyZWN2X3dhaXQ7CisJc3RydWN0IGliX21hZF9hZ2VudCAgICAqYWdlbnRbSUJfVU1BRF9NQVhfQUdFTlRTXTsKKwlpbnQJCQlhZ2VudHNfZGVhZDsKIH07CiAKIHN0cnVjdCBpYl91bWFkX3BhY2tldCB7CkBAIC0xNDUsNiArMTQ1LDEyIEBACiAJa2ZyZWUoZGV2KTsKIH0KIAorLyogY2FsbGVyIG11c3QgaG9sZCBwb3J0LT5tdXRleCBhdCBsZWFzdCBmb3IgcmVhZGluZyAqLworc3RhdGljIHN0cnVjdCBpYl9tYWRfYWdlbnQgKl9fZ2V0X2FnZW50KHN0cnVjdCBpYl91bWFkX2ZpbGUgKmZpbGUsIGludCBpZCkKK3sKKwlyZXR1cm4gZmlsZS0+YWdlbnRzX2RlYWQgPyBOVUxMIDogZmlsZS0+YWdlbnRbaWRdOworfQorCiBzdGF0aWMgaW50IHF1ZXVlX3BhY2tldChzdHJ1Y3QgaWJfdW1hZF9maWxlICpmaWxlLAogCQkJc3RydWN0IGliX21hZF9hZ2VudCAqYWdlbnQsCiAJCQlzdHJ1Y3QgaWJfdW1hZF9wYWNrZXQgKnBhY2tldCkKQEAgLTE1MiwxMCArMTU4LDExIEBACiAJaW50IHJldCA9IDE7CiAKIAlkb3duX3JlYWQoJmZpbGUtPnBvcnQtPm11dGV4KTsKKwogCWZvciAocGFja2V0LT5tYWQuaGRyLmlkID0gMDsKIAkgICAgIHBhY2tldC0+bWFkLmhkci5pZCA8IElCX1VNQURfTUFYX0FHRU5UUzsKIAkgICAgIHBhY2tldC0+bWFkLmhkci5pZCsrKQotCQlpZiAoYWdlbnQgPT0gZmlsZS0+YWdlbnRbcGFja2V0LT5tYWQuaGRyLmlkXSkgeworCQlpZiAoYWdlbnQgPT0gX19nZXRfYWdlbnQoZmlsZSwgcGFja2V0LT5tYWQuaGRyLmlkKSkgewogCQkJc3Bpbl9sb2NrX2lycSgmZmlsZS0+cmVjdl9sb2NrKTsKIAkJCWxpc3RfYWRkX3RhaWwoJnBhY2tldC0+bGlzdCwgJmZpbGUtPnJlY3ZfbGlzdCk7CiAJCQlzcGluX3VubG9ja19pcnEoJmZpbGUtPnJlY3ZfbG9jayk7CkBAIC0zMjcsNyArMzM0LDcgQEAKIAogCWRvd25fcmVhZCgmZmlsZS0+cG9ydC0+bXV0ZXgpOwogCi0JYWdlbnQgPSBmaWxlLT5hZ2VudFtwYWNrZXQtPm1hZC5oZHIuaWRdOworCWFnZW50ID0gX19nZXRfYWdlbnQoZmlsZSwgcGFja2V0LT5tYWQuaGRyLmlkKTsKIAlpZiAoIWFnZW50KSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3VwOwpAQCAtNDgxLDcgKzQ4OCw3IEBACiAJfQogCiAJZm9yIChhZ2VudF9pZCA9IDA7IGFnZW50X2lkIDwgSUJfVU1BRF9NQVhfQUdFTlRTOyArK2FnZW50X2lkKQotCQlpZiAoIWZpbGUtPmFnZW50W2FnZW50X2lkXSkKKwkJaWYgKCFfX2dldF9hZ2VudChmaWxlLCBhZ2VudF9pZCkpCiAJCQlnb3RvIGZvdW5kOwogCiAJcmV0ID0gLUVOT01FTTsKQEAgLTUwNSwyOSArNTEyLDE1IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWZpbGUtPmFnZW50W2FnZW50X2lkXSA9IGFnZW50OwotCi0JZmlsZS0+bXJbYWdlbnRfaWRdID0gaWJfZ2V0X2RtYV9tcihhZ2VudC0+cXAtPnBkLCBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUpOwotCWlmIChJU19FUlIoZmlsZS0+bXJbYWdlbnRfaWRdKSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycjsKLQl9Ci0KIAlpZiAocHV0X3VzZXIoYWdlbnRfaWQsCiAJCSAgICAgKHUzMiBfX3VzZXIgKikgKGFyZyArIG9mZnNldG9mKHN0cnVjdCBpYl91c2VyX21hZF9yZWdfcmVxLCBpZCkpKSkgewogCQlyZXQgPSAtRUZBVUxUOwotCQlnb3RvIGVycl9tcjsKKwkJaWJfdW5yZWdpc3Rlcl9tYWRfYWdlbnQoYWdlbnQpOworCQlnb3RvIG91dDsKIAl9CiAKKwlmaWxlLT5hZ2VudFthZ2VudF9pZF0gPSBhZ2VudDsKIAlyZXQgPSAwOwotCWdvdG8gb3V0OwotCi1lcnJfbXI6Ci0JaWJfZGVyZWdfbXIoZmlsZS0+bXJbYWdlbnRfaWRdKTsKLQotZXJyOgotCWZpbGUtPmFnZW50W2FnZW50X2lkXSA9IE5VTEw7Ci0JaWJfdW5yZWdpc3Rlcl9tYWRfYWdlbnQoYWdlbnQpOwogCiBvdXQ6CiAJdXBfd3JpdGUoJmZpbGUtPnBvcnQtPm11dGV4KTsKQEAgLTUzNiwyNyArNTI5LDI5IEBACiAKIHN0YXRpYyBpbnQgaWJfdW1hZF91bnJlZ19hZ2VudChzdHJ1Y3QgaWJfdW1hZF9maWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKKwlzdHJ1Y3QgaWJfbWFkX2FnZW50ICphZ2VudCA9IE5VTEw7CiAJdTMyIGlkOwogCWludCByZXQgPSAwOwogCisJaWYgKGdldF91c2VyKGlkLCAodTMyIF9fdXNlciAqKSBhcmcpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwogCWRvd25fd3JpdGUoJmZpbGUtPnBvcnQtPm11dGV4KTsKIAotCWlmIChnZXRfdXNlcihpZCwgKHUzMiBfX3VzZXIgKikgYXJnKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoaWQgPCAwIHx8IGlkID49IElCX1VNQURfTUFYX0FHRU5UUyB8fCAhZmlsZS0+YWdlbnRbaWRdKSB7CisJaWYgKGlkIDwgMCB8fCBpZCA+PSBJQl9VTUFEX01BWF9BR0VOVFMgfHwgIV9fZ2V0X2FnZW50KGZpbGUsIGlkKSkgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpYl9kZXJlZ19tcihmaWxlLT5tcltpZF0pOwotCWliX3VucmVnaXN0ZXJfbWFkX2FnZW50KGZpbGUtPmFnZW50W2lkXSk7CisJYWdlbnQgPSBmaWxlLT5hZ2VudFtpZF07CiAJZmlsZS0+YWdlbnRbaWRdID0gTlVMTDsKIAogb3V0OgogCXVwX3dyaXRlKCZmaWxlLT5wb3J0LT5tdXRleCk7CisKKwlpZiAoYWdlbnQpCisJCWliX3VucmVnaXN0ZXJfbWFkX2FnZW50KGFnZW50KTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTYyMSwyMyArNjE2LDI5IEBACiAJc3RydWN0IGliX3VtYWRfZmlsZSAqZmlsZSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaWJfdW1hZF9kZXZpY2UgKmRldiA9IGZpbGUtPnBvcnQtPnVtYWRfZGV2OwogCXN0cnVjdCBpYl91bWFkX3BhY2tldCAqcGFja2V0LCAqdG1wOworCWludCBhbHJlYWR5X2RlYWQ7CiAJaW50IGk7CiAKIAlkb3duX3dyaXRlKCZmaWxlLT5wb3J0LT5tdXRleCk7Ci0JZm9yIChpID0gMDsgaSA8IElCX1VNQURfTUFYX0FHRU5UUzsgKytpKQotCQlpZiAoZmlsZS0+YWdlbnRbaV0pIHsKLQkJCWliX2RlcmVnX21yKGZpbGUtPm1yW2ldKTsKLQkJCWliX3VucmVnaXN0ZXJfbWFkX2FnZW50KGZpbGUtPmFnZW50W2ldKTsKLQkJfQorCisJYWxyZWFkeV9kZWFkID0gZmlsZS0+YWdlbnRzX2RlYWQ7CisJZmlsZS0+YWdlbnRzX2RlYWQgPSAxOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhY2tldCwgdG1wLCAmZmlsZS0+cmVjdl9saXN0LCBsaXN0KQogCQlrZnJlZShwYWNrZXQpOwogCiAJbGlzdF9kZWwoJmZpbGUtPnBvcnRfbGlzdCk7Ci0JdXBfd3JpdGUoJmZpbGUtPnBvcnQtPm11dGV4KTsKKworCWRvd25ncmFkZV93cml0ZSgmZmlsZS0+cG9ydC0+bXV0ZXgpOworCisJaWYgKCFhbHJlYWR5X2RlYWQpCisJCWZvciAoaSA9IDA7IGkgPCBJQl9VTUFEX01BWF9BR0VOVFM7ICsraSkKKwkJCWlmIChmaWxlLT5hZ2VudFtpXSkKKwkJCQlpYl91bnJlZ2lzdGVyX21hZF9hZ2VudChmaWxlLT5hZ2VudFtpXSk7CisKKwl1cF9yZWFkKCZmaWxlLT5wb3J0LT5tdXRleCk7CiAKIAlrZnJlZShmaWxlKTsKLQogCWtyZWZfcHV0KCZkZXYtPnJlZiwgaWJfdW1hZF9yZWxlYXNlX2Rldik7CiAKIAlyZXR1cm4gMDsKQEAgLTgwMSw3ICs4MDIsNyBAQAogCQlnb3RvIGVycl9jbGFzczsKIAlwb3J0LT5zbV9kZXYtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJcG9ydC0+c21fZGV2LT5vcHMgICA9ICZ1bWFkX3NtX2ZvcHM7Ci0Ja29iamVjdF9zZXRfbmFtZSgmcG9ydC0+ZGV2LT5rb2JqLCAiaXNzbSVkIiwgcG9ydC0+ZGV2X251bSk7CisJa29iamVjdF9zZXRfbmFtZSgmcG9ydC0+c21fZGV2LT5rb2JqLCAiaXNzbSVkIiwgcG9ydC0+ZGV2X251bSk7CiAJaWYgKGNkZXZfYWRkKHBvcnQtPnNtX2RldiwgYmFzZV9kZXYgKyBwb3J0LT5kZXZfbnVtICsgSUJfVU1BRF9NQVhfUE9SVFMsIDEpKQogCQlnb3RvIGVycl9zbV9jZGV2OwogCkBAIC04NjMsMTQgKzg2NCwzNiBAQAogCiAJcG9ydC0+aWJfZGV2ID0gTlVMTDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZmlsZSwgJnBvcnQtPmZpbGVfbGlzdCwgcG9ydF9saXN0KQotCQlmb3IgKGlkID0gMDsgaWQgPCBJQl9VTUFEX01BWF9BR0VOVFM7ICsraWQpIHsKLQkJCWlmICghZmlsZS0+YWdlbnRbaWRdKQotCQkJCWNvbnRpbnVlOwotCQkJaWJfZGVyZWdfbXIoZmlsZS0+bXJbaWRdKTsKLQkJCWliX3VucmVnaXN0ZXJfbWFkX2FnZW50KGZpbGUtPmFnZW50W2lkXSk7Ci0JCQlmaWxlLT5hZ2VudFtpZF0gPSBOVUxMOwotCQl9CisJLyoKKwkgKiBOb3cgZ28gdGhyb3VnaCB0aGUgbGlzdCBvZiBmaWxlcyBhdHRhY2hlZCB0byB0aGlzIHBvcnQgYW5kCisJICogdW5yZWdpc3RlciBhbGwgb2YgdGhlaXIgTUFEIGFnZW50cy4gIFdlIG5lZWQgdG8gaG9sZAorCSAqIHBvcnQtPm11dGV4IHdoaWxlIGRvaW5nIHRoaXMgdG8gYXZvaWQgcmFjaW5nIHdpdGgKKwkgKiBpYl91bWFkX2Nsb3NlKCksIGJ1dCB3ZSBjYW4ndCBob2xkIHRoZSBtdXRleCBmb3Igd3JpdGluZworCSAqIHdoaWxlIGNhbGxpbmcgaWJfdW5yZWdpc3Rlcl9tYWRfYWdlbnQoKSwgc2luY2UgdGhhdCBtaWdodAorCSAqIGRlYWRsb2NrIGJ5IGNhbGxpbmcgYmFjayBpbnRvIHF1ZXVlX3BhY2tldCgpLiAgU28gd2UKKwkgKiBkb3duZ3JhZGUgb3VyIGxvY2sgdG8gYSByZWFkIGxvY2ssIGFuZCB0aGVuIGRyb3AgYW5kCisJICogcmVhY3F1aXJlIHRoZSB3cml0ZSBsb2NrIGZvciB0aGUgbmV4dCBpdGVyYXRpb24uCisJICoKKwkgKiBXZSBkbyBsaXN0X2RlbF9pbml0KCkgb24gdGhlIGZpbGUncyBsaXN0X2hlYWQgc28gdGhhdCB0aGUKKwkgKiBsaXN0X2RlbCBpbiBpYl91bWFkX2Nsb3NlKCkgaXMgc3RpbGwgT0ssIGV2ZW4gYWZ0ZXIgdGhlCisJICogZmlsZSBpcyByZW1vdmVkIGZyb20gdGhlIGxpc3QuCisJICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZwb3J0LT5maWxlX2xpc3QpKSB7CisJCWZpbGUgPSBsaXN0X2VudHJ5KHBvcnQtPmZpbGVfbGlzdC5uZXh0LCBzdHJ1Y3QgaWJfdW1hZF9maWxlLAorCQkJCSAgcG9ydF9saXN0KTsKKworCQlmaWxlLT5hZ2VudHNfZGVhZCA9IDE7CisJCWxpc3RfZGVsX2luaXQoJmZpbGUtPnBvcnRfbGlzdCk7CisKKwkJZG93bmdyYWRlX3dyaXRlKCZwb3J0LT5tdXRleCk7CisKKwkJZm9yIChpZCA9IDA7IGlkIDwgSUJfVU1BRF9NQVhfQUdFTlRTOyArK2lkKQorCQkJaWYgKGZpbGUtPmFnZW50W2lkXSkKKwkJCQlpYl91bnJlZ2lzdGVyX21hZF9hZ2VudChmaWxlLT5hZ2VudFtpZF0pOworCisJCXVwX3JlYWQoJnBvcnQtPm11dGV4KTsKKwkJZG93bl93cml0ZSgmcG9ydC0+bXV0ZXgpOworCX0KIAogCXVwX3dyaXRlKCZwb3J0LT5tdXRleCk7CiAKQEAgLTkxMyw3ICs5MzYsNyBAQAogCiBlcnI6CiAJd2hpbGUgKC0taSA+PSBzKQotCQlpYl91bWFkX2tpbGxfcG9ydCgmdW1hZF9kZXYtPnBvcnRbaV0pOworCQlpYl91bWFkX2tpbGxfcG9ydCgmdW1hZF9kZXYtPnBvcnRbaSAtIHNdKTsKIAogCWtyZWZfcHV0KCZ1bWFkX2Rldi0+cmVmLCBpYl91bWFkX3JlbGVhc2VfZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYwppbmRleCA2M2E3NDE1Li5lZDQ1ZGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX2NtZC5jCkBAIC03MDgsNyArNzA4LDcgQEAKIAkJcmVzcC0+d2NbaV0ub3Bjb2RlIAkgICA9IHdjW2ldLm9wY29kZTsKIAkJcmVzcC0+d2NbaV0udmVuZG9yX2VyciAJICAgPSB3Y1tpXS52ZW5kb3JfZXJyOwogCQlyZXNwLT53Y1tpXS5ieXRlX2xlbiAJICAgPSB3Y1tpXS5ieXRlX2xlbjsKLQkJcmVzcC0+d2NbaV0uaW1tX2RhdGEgCSAgID0gd2NbaV0uaW1tX2RhdGE7CisJCXJlc3AtPndjW2ldLmltbV9kYXRhIAkgICA9IChfX3UzMiBfX2ZvcmNlKSB3Y1tpXS5pbW1fZGF0YTsKIAkJcmVzcC0+d2NbaV0ucXBfbnVtIAkgICA9IHdjW2ldLnFwX251bTsKIAkJcmVzcC0+d2NbaV0uc3JjX3FwIAkgICA9IHdjW2ldLnNyY19xcDsKIAkJcmVzcC0+d2NbaV0ud2NfZmxhZ3MgCSAgID0gd2NbaV0ud2NfZmxhZ3M7CkBAIC05MDgsNyArOTA4LDEyIEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfZGVzdHJveTsKIAotCXJlc3AucXBfaGFuZGxlID0gdW9iai0+dW9iamVjdC5pZDsKKwlyZXNwLnFwX2hhbmRsZSAgICAgICA9IHVvYmotPnVvYmplY3QuaWQ7CisJcmVzcC5tYXhfcmVjdl9zZ2UgICAgPSBhdHRyLmNhcC5tYXhfcmVjdl9zZ2U7CisJcmVzcC5tYXhfc2VuZF9zZ2UgICAgPSBhdHRyLmNhcC5tYXhfc2VuZF9zZ2U7CisJcmVzcC5tYXhfcmVjdl93ciAgICAgPSBhdHRyLmNhcC5tYXhfcmVjdl93cjsKKwlyZXNwLm1heF9zZW5kX3dyICAgICA9IGF0dHIuY2FwLm1heF9zZW5kX3dyOworCXJlc3AubWF4X2lubGluZV9kYXRhID0gYXR0ci5jYXAubWF4X2lubGluZV9kYXRhOwogCiAJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIGNtZC5yZXNwb25zZSwKIAkJCSAmcmVzcCwgc2l6ZW9mIHJlc3ApKSB7CkBAIC0xMTM1LDcgKzExNDAsNyBAQAogCQluZXh0LT5udW1fc2dlICAgID0gdXNlcl93ci0+bnVtX3NnZTsKIAkJbmV4dC0+b3Bjb2RlICAgICA9IHVzZXJfd3ItPm9wY29kZTsKIAkJbmV4dC0+c2VuZF9mbGFncyA9IHVzZXJfd3ItPnNlbmRfZmxhZ3M7Ci0JCW5leHQtPmltbV9kYXRhICAgPSB1c2VyX3dyLT5pbW1fZGF0YTsKKwkJbmV4dC0+aW1tX2RhdGEgICA9IChfX2JlMzIgX19mb3JjZSkgdXNlcl93ci0+aW1tX2RhdGE7CiAKIAkJaWYgKHFwLT5xcF90eXBlID09IElCX1FQVF9VRCkgewogCQkJbmV4dC0+d3IudWQuYWggPSBpZHJfZmluZCgmaWJfdXZlcmJzX2FoX2lkciwKQEAgLTE3MDEsNyArMTcwNiw2IEBACiAJfQogCiAJYXR0ci5tYXhfd3IgICAgPSBjbWQubWF4X3dyOwotCWF0dHIubWF4X3NnZSAgID0gY21kLm1heF9zZ2U7CiAJYXR0ci5zcnFfbGltaXQgPSBjbWQuc3JxX2xpbWl0OwogCiAJcmV0ID0gaWJfbW9kaWZ5X3NycShzcnEsICZhdHRyLCBjbWQuYXR0cl9tYXNrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jCmluZGV4IDQxODZjYzguLjRjMTVlMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYwpAQCAtMzI1LDE2ICszMjUsOCBAQAogaW50IGliX3Jlc2l6ZV9jcShzdHJ1Y3QgaWJfY3EgKmNxLAogICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgIGNxZSkKIHsKLQlpbnQgcmV0OwotCi0JaWYgKCFjcS0+ZGV2aWNlLT5yZXNpemVfY3EpCi0JCXJldHVybiAtRU5PU1lTOwotCi0JcmV0ID0gY3EtPmRldmljZS0+cmVzaXplX2NxKGNxLCAmY3FlKTsKLQlpZiAoIXJldCkKLQkJY3EtPmNxZSA9IGNxZTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIGNxLT5kZXZpY2UtPnJlc2l6ZV9jcSA/CisJCWNxLT5kZXZpY2UtPnJlc2l6ZV9jcShjcSwgY3FlKSA6IC1FTk9TWVM7CiB9CiBFWFBPUlRfU1lNQk9MKGliX3Jlc2l6ZV9jcSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jYXRhcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NhdGFzLmMKaW5kZXggMjVlYmFiNi4uYzNiZWM3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NhdGFzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NhdGFzLmMKQEAgLTk3LDcgKzk3LDcgQEAKIAkJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhdGFzX2xvY2ssIGZsYWdzKTsKLQlpZiAoZGV2LT5jYXRhc19lcnIuc3RvcCkKKwlpZiAoIWRldi0+Y2F0YXNfZXJyLnN0b3ApCiAJCW1vZF90aW1lcigmZGV2LT5jYXRhc19lcnIudGltZXIsCiAJCQkgIGppZmZpZXMgKyBNVEhDQV9DQVRBU19QT0xMX0lOVEVSVkFMKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXRhc19sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmMKaW5kZXggNDlmMjExZC4uOWVkMzQ1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuYwpAQCAtMTA2MCw2ICsxMDYwLDggQEAKIAkJZGV2X2xpbS0+aGNhLmFyYmVsLnJlc2l6ZV9zcnEgPSBmaWVsZCAmIDE7CiAJCU1USENBX0dFVChmaWVsZCwgb3V0Ym94LCBRVUVSWV9ERVZfTElNX01BWF9TR19SUV9PRkZTRVQpOwogCQlkZXZfbGltLT5tYXhfc2cgPSBtaW5fdChpbnQsIGZpZWxkLCBkZXZfbGltLT5tYXhfc2cpOworCQlNVEhDQV9HRVQoc2l6ZSwgb3V0Ym94LCBRVUVSWV9ERVZfTElNX01BWF9ERVNDX1NaX1JRX09GRlNFVCk7CisJCWRldl9saW0tPm1heF9kZXNjX3N6ID0gbWluX3QoaW50LCBzaXplLCBkZXZfbGltLT5tYXhfZGVzY19zeik7CiAJCU1USENBX0dFVChzaXplLCBvdXRib3gsIFFVRVJZX0RFVl9MSU1fTVBUX0VOVFJZX1NaX09GRlNFVCk7CiAJCWRldl9saW0tPm1wdF9lbnRyeV9zeiA9IHNpemU7CiAJCU1USENBX0dFVChmaWVsZCwgb3V0Ym94LCBRVUVSWV9ERVZfTElNX1BCTF9TWl9PRkZTRVQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY3EuYwppbmRleCBmOThlMjM1Li40YThhZGNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY3EuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY3EuYwpAQCAtMjU4LDcgKzI1OCw3IEBACiB7CiAJc3RydWN0IG10aGNhX2NxICpjcTsKIAlzdHJ1Y3QgbXRoY2FfY3FlICpjcWU7Ci0JaW50IHByb2RfaW5kZXg7CisJdTMyIHByb2RfaW5kZXg7CiAJaW50IG5mcmVlZCA9IDA7CiAKIAlzcGluX2xvY2tfaXJxKCZkZXYtPmNxX3RhYmxlLmxvY2spOwpAQCAtMjkzLDE5ICsyOTMsMTUgQEAKIAkgKiBOb3cgc3dlZXAgYmFja3dhcmRzIHRocm91Z2ggdGhlIENRLCByZW1vdmluZyBDUSBlbnRyaWVzCiAJICogdGhhdCBtYXRjaCBvdXIgUVAgYnkgY29weWluZyBvbGRlciBlbnRyaWVzIG9uIHRvcCBvZiB0aGVtLgogCSAqLwotCXdoaWxlIChwcm9kX2luZGV4ID4gY3EtPmNvbnNfaW5kZXgpIHsKLQkJY3FlID0gZ2V0X2NxZShjcSwgKHByb2RfaW5kZXggLSAxKSAmIGNxLT5pYmNxLmNxZSk7CisJd2hpbGUgKChpbnQpIC0tcHJvZF9pbmRleCAtIChpbnQpIGNxLT5jb25zX2luZGV4ID49IDApIHsKKwkJY3FlID0gZ2V0X2NxZShjcSwgcHJvZF9pbmRleCAmIGNxLT5pYmNxLmNxZSk7CiAJCWlmIChjcWUtPm15X3FwbiA9PSBjcHVfdG9fYmUzMihxcG4pKSB7CiAJCQlpZiAoc3JxKQogCQkJCW10aGNhX2ZyZWVfc3JxX3dxZShzcnEsIGJlMzJfdG9fY3B1KGNxZS0+d3FlKSk7CiAJCQkrK25mcmVlZDsKLQkJfQotCQllbHNlIGlmIChuZnJlZWQpCi0JCQltZW1jcHkoZ2V0X2NxZShjcSwgKHByb2RfaW5kZXggLSAxICsgbmZyZWVkKSAmCi0JCQkJICAgICAgIGNxLT5pYmNxLmNxZSksCi0JCQkgICAgICAgY3FlLAotCQkJICAgICAgIE1USENBX0NRX0VOVFJZX1NJWkUpOwotCQktLXByb2RfaW5kZXg7CisJCX0gZWxzZSBpZiAobmZyZWVkKQorCQkJbWVtY3B5KGdldF9jcWUoY3EsIChwcm9kX2luZGV4ICsgbmZyZWVkKSAmIGNxLT5pYmNxLmNxZSksCisJCQkgICAgICAgY3FlLCBNVEhDQV9DUV9FTlRSWV9TSVpFKTsKIAl9CiAKIAlpZiAobmZyZWVkKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZGV2LmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZGV2LmgKaW5kZXggZTdlNWQzYi4uNDk3ZmY3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2Rldi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9kZXYuaApAQCAtMTMxLDYgKzEzMSw3IEBACiAJaW50ICAgICAgbWF4X3NnOwogCWludCAgICAgIG51bV9xcHM7CiAJaW50ICAgICAgbWF4X3dxZXM7CisJaW50CSBtYXhfZGVzY19zejsKIAlpbnQJIG1heF9xcF9pbml0X3JkbWE7CiAJaW50ICAgICAgcmVzZXJ2ZWRfcXBzOwogCWludCAgICAgIG51bV9zcnFzOwpAQCAtMTU0LDYgKzE1NSw3IEBACiAJaW50ICAgICAgcmVzZXJ2ZWRfbWNnczsKIAlpbnQgICAgICBudW1fcGRzOwogCWludCAgICAgIHJlc2VydmVkX3BkczsKKwl1MzIgICAgICBwYWdlX3NpemVfY2FwOwogCXUzMiAgICAgIGZsYWdzOwogCXU4ICAgICAgIHBvcnRfd2lkdGhfY2FwOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFpbi5jCmluZGV4IDQ1YzYzMjguLjZmOTRiMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21haW4uYwpAQCAtMTY4LDYgKzE2OCw3IEBACiAJbWRldi0+bGltaXRzLm1heF9zcnFfd3FlcyAgICAgICA9IGRldl9saW0tPm1heF9zcnFfc3o7CiAJbWRldi0+bGltaXRzLnJlc2VydmVkX3NycXMgICAgICA9IGRldl9saW0tPnJlc2VydmVkX3NycXM7CiAJbWRldi0+bGltaXRzLnJlc2VydmVkX2VlY3MgICAgICA9IGRldl9saW0tPnJlc2VydmVkX2VlY3M7CisJbWRldi0+bGltaXRzLm1heF9kZXNjX3N6ICAgICAgICA9IGRldl9saW0tPm1heF9kZXNjX3N6OwogCS8qCiAJICogU3VidHJhY3QgMSBmcm9tIHRoZSBsaW1pdCBiZWNhdXNlIHdlIG5lZWQgdG8gYWxsb2NhdGUgYQogCSAqIHNwYXJlIENRRSBzbyB0aGUgSENBIEhXIGNhbiB0ZWxsIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYW4KQEAgLTE4MSw2ICsxODIsNyBAQAogCW1kZXYtPmxpbWl0cy5yZXNlcnZlZF91YXJzICAgICAgPSBkZXZfbGltLT5yZXNlcnZlZF91YXJzOwogCW1kZXYtPmxpbWl0cy5yZXNlcnZlZF9wZHMgICAgICAgPSBkZXZfbGltLT5yZXNlcnZlZF9wZHM7CiAJbWRldi0+bGltaXRzLnBvcnRfd2lkdGhfY2FwICAgICA9IGRldl9saW0tPm1heF9wb3J0X3dpZHRoOworCW1kZXYtPmxpbWl0cy5wYWdlX3NpemVfY2FwICAgICAgPSB+KHUzMikgKGRldl9saW0tPm1pbl9wYWdlX3N6IC0gMSk7CiAJbWRldi0+bGltaXRzLmZsYWdzICAgICAgICAgICAgICA9IGRldl9saW0tPmZsYWdzOwogCiAJLyogSUJfREVWSUNFX1JFU0laRV9NQVhfV1Igbm90IHN1cHBvcnRlZCBieSBkcml2ZXIuCkBAIC0xMTk2LDcgKzExOTgsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbXRoY2FfZHJpdmVyID0gewogCS5uYW1lCQk9IERSVl9OQU1FLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUJPSBtdGhjYV9wY2lfdGFibGUsCiAJLnByb2JlCQk9IG10aGNhX2luaXRfb25lLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobXRoY2FfcmVtb3ZlX29uZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMKaW5kZXggNmIwMTY2Ni4uNGNjN2UyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMKQEAgLTkwLDYgKzkwLDcgQEAKIAltZW1jcHkoJnByb3BzLT5ub2RlX2d1aWQsICAgICAgb3V0X21hZC0+ZGF0YSArIDEyLCA4KTsKIAogCXByb3BzLT5tYXhfbXJfc2l6ZSAgICAgICAgID0gfjB1bGw7CisJcHJvcHMtPnBhZ2Vfc2l6ZV9jYXAgICAgICAgPSBtZGV2LT5saW1pdHMucGFnZV9zaXplX2NhcDsKIAlwcm9wcy0+bWF4X3FwICAgICAgICAgICAgICA9IG1kZXYtPmxpbWl0cy5udW1fcXBzIC0gbWRldi0+bGltaXRzLnJlc2VydmVkX3FwczsKIAlwcm9wcy0+bWF4X3FwX3dyICAgICAgICAgICA9IG1kZXYtPmxpbWl0cy5tYXhfd3FlczsKIAlwcm9wcy0+bWF4X3NnZSAgICAgICAgICAgICA9IG1kZXYtPmxpbWl0cy5tYXhfc2c7CkBAIC02MTUsMTEgKzYxNiwxMSBAQAogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCX0KIAotCWluaXRfYXR0ci0+Y2FwLm1heF9pbmxpbmVfZGF0YSA9IDA7CiAJaW5pdF9hdHRyLT5jYXAubWF4X3NlbmRfd3IgICAgID0gcXAtPnNxLm1heDsKIAlpbml0X2F0dHItPmNhcC5tYXhfcmVjdl93ciAgICAgPSBxcC0+cnEubWF4OwogCWluaXRfYXR0ci0+Y2FwLm1heF9zZW5kX3NnZSAgICA9IHFwLT5zcS5tYXhfZ3M7CiAJaW5pdF9hdHRyLT5jYXAubWF4X3JlY3Zfc2dlICAgID0gcXAtPnJxLm1heF9nczsKKwlpbml0X2F0dHItPmNhcC5tYXhfaW5saW5lX2RhdGEgPSBxcC0+bWF4X2lubGluZV9kYXRhOwogCiAJcmV0dXJuICZxcC0+aWJxcDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmgKaW5kZXggYmNkNGIwMS4uMWU3Mzk0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmgKQEAgLTI1MSw2ICsyNTEsNyBAQAogCXN0cnVjdCBtdGhjYV93cSAgICAgICAgc3E7CiAJZW51bSBpYl9zaWdfdHlwZSAgICAgICBzcV9wb2xpY3k7CiAJaW50ICAgICAgICAgICAgICAgICAgICBzZW5kX3dxZV9vZmZzZXQ7CisJaW50ICAgICAgICAgICAgICAgICAgICBtYXhfaW5saW5lX2RhdGE7CiAKIAl1NjQgICAgICAgICAgICAgICAgICAgKndyaWQ7CiAJdW5pb24gbXRoY2FfYnVmCSAgICAgICBxdWV1ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKaW5kZXggODg1MmVhNC4uNzYwYzQxOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jCkBAIC04ODUsNiArODg1LDQ4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgbXRoY2FfYWRqdXN0X3FwX2NhcHMoc3RydWN0IG10aGNhX2RldiAqZGV2LAorCQkJCSBzdHJ1Y3QgbXRoY2FfcGQgKnBkLAorCQkJCSBzdHJ1Y3QgbXRoY2FfcXAgKnFwKQoreworCWludCBtYXhfZGF0YV9zaXplOworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIG1heGltdW0gc2l6ZSBvZiBXUUUgcy9nIHNlZ21lbnRzLCBleGNsdWRpbmcKKwkgKiB0aGUgbmV4dCBzZWdtZW50IGFuZCBvdGhlciBub24tZGF0YSBzZWdtZW50cy4KKwkgKi8KKwltYXhfZGF0YV9zaXplID0gbWluKGRldi0+bGltaXRzLm1heF9kZXNjX3N6LCAxIDw8IHFwLT5zcS53cWVfc2hpZnQpIC0KKwkJc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcpOworCisJc3dpdGNoIChxcC0+dHJhbnNwb3J0KSB7CisJY2FzZSBNTFg6CisJCW1heF9kYXRhX3NpemUgLT0gMiAqIHNpemVvZiAoc3RydWN0IG10aGNhX2RhdGFfc2VnKTsKKwkJYnJlYWs7CisKKwljYXNlIFVEOgorCQlpZiAobXRoY2FfaXNfbWVtZnJlZShkZXYpKQorCQkJbWF4X2RhdGFfc2l6ZSAtPSBzaXplb2YgKHN0cnVjdCBtdGhjYV9hcmJlbF91ZF9zZWcpOworCQllbHNlCisJCQltYXhfZGF0YV9zaXplIC09IHNpemVvZiAoc3RydWN0IG10aGNhX3Rhdm9yX3VkX3NlZyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJbWF4X2RhdGFfc2l6ZSAtPSBzaXplb2YgKHN0cnVjdCBtdGhjYV9yYWRkcl9zZWcpOworCQlicmVhazsKKwl9CisKKwkvKiBXZSBkb24ndCBzdXBwb3J0IGlubGluZSBkYXRhIGZvciBrZXJuZWwgUVBzICh5ZXQpLiAqLworCWlmICghcGQtPmlicGQudW9iamVjdCkKKwkJcXAtPm1heF9pbmxpbmVfZGF0YSA9IDA7CisgICAgICAgIGVsc2UKKwkJcXAtPm1heF9pbmxpbmVfZGF0YSA9IG1heF9kYXRhX3NpemUgLSBNVEhDQV9JTkxJTkVfSEVBREVSX1NJWkU7CisKKwlxcC0+c3EubWF4X2dzID0gbWF4X2RhdGFfc2l6ZSAvIHNpemVvZiAoc3RydWN0IG10aGNhX2RhdGFfc2VnKTsKKwlxcC0+cnEubWF4X2dzID0gKG1pbihkZXYtPmxpbWl0cy5tYXhfZGVzY19zeiwgMSA8PCBxcC0+cnEud3FlX3NoaWZ0KSAtCisJCQlzaXplb2YgKHN0cnVjdCBtdGhjYV9uZXh0X3NlZykpIC8KKwkJCXNpemVvZiAoc3RydWN0IG10aGNhX2RhdGFfc2VnKTsKK30KKwogLyoKICAqIEFsbG9jYXRlIGFuZCByZWdpc3RlciBidWZmZXIgZm9yIFdRRXMuICBxcC0+cnEubWF4LCBzcS5tYXgsCiAgKiBycS5tYXhfZ3MgYW5kIHNxLm1heF9ncyBtdXN0IGFsbCBiZSBhc3NpZ25lZC4KQEAgLTkwMiwyNyArOTQ0LDUzIEBACiAJc2l6ZSA9IHNpemVvZiAoc3RydWN0IG10aGNhX25leHRfc2VnKSArCiAJCXFwLT5ycS5tYXhfZ3MgKiBzaXplb2YgKHN0cnVjdCBtdGhjYV9kYXRhX3NlZyk7CiAKKwlpZiAoc2l6ZSA+IGRldi0+bGltaXRzLm1heF9kZXNjX3N6KQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWZvciAocXAtPnJxLndxZV9zaGlmdCA9IDY7IDEgPDwgcXAtPnJxLndxZV9zaGlmdCA8IHNpemU7CiAJICAgICBxcC0+cnEud3FlX3NoaWZ0KyspCiAJCTsgLyogbm90aGluZyAqLwogCi0Jc2l6ZSA9IHNpemVvZiAoc3RydWN0IG10aGNhX25leHRfc2VnKSArCi0JCXFwLT5zcS5tYXhfZ3MgKiBzaXplb2YgKHN0cnVjdCBtdGhjYV9kYXRhX3NlZyk7CisJc2l6ZSA9IHFwLT5zcS5tYXhfZ3MgKiBzaXplb2YgKHN0cnVjdCBtdGhjYV9kYXRhX3NlZyk7CiAJc3dpdGNoIChxcC0+dHJhbnNwb3J0KSB7CiAJY2FzZSBNTFg6CiAJCXNpemUgKz0gMiAqIHNpemVvZiAoc3RydWN0IG10aGNhX2RhdGFfc2VnKTsKIAkJYnJlYWs7CisKIAljYXNlIFVEOgotCQlpZiAobXRoY2FfaXNfbWVtZnJlZShkZXYpKQotCQkJc2l6ZSArPSBzaXplb2YgKHN0cnVjdCBtdGhjYV9hcmJlbF91ZF9zZWcpOwotCQllbHNlCi0JCQlzaXplICs9IHNpemVvZiAoc3RydWN0IG10aGNhX3Rhdm9yX3VkX3NlZyk7CisJCXNpemUgKz0gbXRoY2FfaXNfbWVtZnJlZShkZXYpID8KKwkJCXNpemVvZiAoc3RydWN0IG10aGNhX2FyYmVsX3VkX3NlZykgOgorCQkJc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfdGF2b3JfdWRfc2VnKTsKIAkJYnJlYWs7CisKKwljYXNlIFVDOgorCQlzaXplICs9IHNpemVvZiAoc3RydWN0IG10aGNhX3JhZGRyX3NlZyk7CisJCWJyZWFrOworCisJY2FzZSBSQzoKKwkJc2l6ZSArPSBzaXplb2YgKHN0cnVjdCBtdGhjYV9yYWRkcl9zZWcpOworCQkvKgorCQkgKiBBbiBhdG9taWMgb3Agd2lsbCByZXF1aXJlIGFuIGF0b21pYyBzZWdtZW50LCBhCisJCSAqIHJlbW90ZSBhZGRyZXNzIHNlZ21lbnQgYW5kIG9uZSBzY2F0dGVyIGVudHJ5LgorCQkgKi8KKwkJc2l6ZSA9IG1heF90KGludCwgc2l6ZSwKKwkJCSAgICAgc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfYXRvbWljX3NlZykgKworCQkJICAgICBzaXplb2YgKHN0cnVjdCBtdGhjYV9yYWRkcl9zZWcpICsKKwkJCSAgICAgc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfZGF0YV9zZWcpKTsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgotCQkvKiBiaW5kIHNlZyBpcyBhcyBiaWcgYXMgYXRvbWljICsgcmFkZHIgc2VncyAqLwotCQlzaXplICs9IHNpemVvZiAoc3RydWN0IG10aGNhX2JpbmRfc2VnKTsKKwkJYnJlYWs7CiAJfQogCisJLyogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgZm9yIGEgYmluZCByZXF1ZXN0ICovCisJc2l6ZSA9IG1heF90KGludCwgc2l6ZSwgc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfYmluZF9zZWcpKTsKKworCXNpemUgKz0gc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcpOworCisJaWYgKHNpemUgPiBkZXYtPmxpbWl0cy5tYXhfZGVzY19zeikKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlmb3IgKHFwLT5zcS53cWVfc2hpZnQgPSA2OyAxIDw8IHFwLT5zcS53cWVfc2hpZnQgPCBzaXplOwogCSAgICAgcXAtPnNxLndxZV9zaGlmdCsrKQogCQk7IC8qIG5vdGhpbmcgKi8KQEAgLTEwNjYsNiArMTEzNCw4IEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJbXRoY2FfYWRqdXN0X3FwX2NhcHMoZGV2LCBwZCwgcXApOworCiAJLyoKIAkgKiBJZiB0aGlzIGlzIGEgdXNlcnNwYWNlIFFQLCB3ZSdyZSBkb25lIG5vdy4gIFRoZSBkb29yYmVsbHMKIAkgKiB3aWxsIGJlIGFsbG9jYXRlZCBhbmQgYnVmZmVycyB3aWxsIGJlIGluaXRpYWxpemVkIGluCkBAIC0xNDg2LDggKzE1NTYsOCBAQAogCQkJCX0KIAogCQkJCXdxZSArPSBzaXplb2YgKHN0cnVjdCBtdGhjYV9hdG9taWNfc2VnKTsKLQkJCQlzaXplICs9IHNpemVvZiAoc3RydWN0IG10aGNhX3JhZGRyX3NlZykgLyAxNiArCi0JCQkJCXNpemVvZiAoc3RydWN0IG10aGNhX2F0b21pY19zZWcpOworCQkJCXNpemUgKz0gKHNpemVvZiAoc3RydWN0IG10aGNhX3JhZGRyX3NlZykgKworCQkJCQkgc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfYXRvbWljX3NlZykpIC8gMTY7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgSUJfV1JfUkRNQV9XUklURToKQEAgLTE2MzcsNiArMTcwNyw3IEBACiB7CiAJc3RydWN0IG10aGNhX2RldiAqZGV2ID0gdG9fbWRldihpYnFwLT5kZXZpY2UpOwogCXN0cnVjdCBtdGhjYV9xcCAqcXAgPSB0b19tcXAoaWJxcCk7CisJX19iZTMyIGRvb3JiZWxsWzJdOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVyciA9IDA7CiAJaW50IG5yZXE7CkBAIC0xNjU0LDYgKzE3MjUsMjIgQEAKIAlpbmQgPSBxcC0+cnEubmV4dF9pbmQ7CiAKIAlmb3IgKG5yZXEgPSAwOyB3cjsgKytucmVxLCB3ciA9IHdyLT5uZXh0KSB7CisJCWlmICh1bmxpa2VseShucmVxID09IE1USENBX1RBVk9SX01BWF9XUUVTX1BFUl9SRUNWX0RCKSkgeworCQkJbnJlcSA9IDA7CisKKwkJCWRvb3JiZWxsWzBdID0gY3B1X3RvX2JlMzIoKHFwLT5ycS5uZXh0X2luZCA8PCBxcC0+cnEud3FlX3NoaWZ0KSB8IHNpemUwKTsKKwkJCWRvb3JiZWxsWzFdID0gY3B1X3RvX2JlMzIocXAtPnFwbiA8PCA4KTsKKworCQkJd21iKCk7CisKKwkJCW10aGNhX3dyaXRlNjQoZG9vcmJlbGwsCisJCQkJICAgICAgZGV2LT5rYXIgKyBNVEhDQV9SRUNFSVZFX0RPT1JCRUxMLAorCQkJCSAgICAgIE1USENBX0dFVF9ET09SQkVMTF9MT0NLKCZkZXYtPmRvb3JiZWxsX2xvY2spKTsKKworCQkJcXAtPnJxLmhlYWQgKz0gTVRIQ0FfVEFWT1JfTUFYX1dRRVNfUEVSX1JFQ1ZfREI7CisJCQlzaXplMCA9IDA7CisJCX0KKwogCQlpZiAobXRoY2Ffd3Ffb3ZlcmZsb3coJnFwLT5ycSwgbnJlcSwgcXAtPmlicXAucmVjdl9jcSkpIHsKIAkJCW10aGNhX2VycihkZXYsICJSUSAlMDZ4IGZ1bGwgKCV1IGhlYWQsICV1IHRhaWwsIgogCQkJCQkiICVkIG1heCwgJWQgbnJlcSlcbiIsIHFwLT5xcG4sCkBAIC0xNzExLDggKzE3OTgsNiBAQAogCiBvdXQ6CiAJaWYgKGxpa2VseShucmVxKSkgewotCQlfX2JlMzIgZG9vcmJlbGxbMl07Ci0KIAkJZG9vcmJlbGxbMF0gPSBjcHVfdG9fYmUzMigocXAtPnJxLm5leHRfaW5kIDw8IHFwLT5ycS53cWVfc2hpZnQpIHwgc2l6ZTApOwogCQlkb29yYmVsbFsxXSA9IGNwdV90b19iZTMyKChxcC0+cXBuIDw8IDgpIHwgbnJlcSk7CiAKQEAgLTE4MDYsOCArMTg5MSw4IEBACiAJCQkJfQogCiAJCQkJd3FlICs9IHNpemVvZiAoc3RydWN0IG10aGNhX2F0b21pY19zZWcpOwotCQkJCXNpemUgKz0gc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfcmFkZHJfc2VnKSAvIDE2ICsKLQkJCQkJc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfYXRvbWljX3NlZyk7CisJCQkJc2l6ZSArPSAoc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfcmFkZHJfc2VnKSArCisJCQkJCSBzaXplb2YgKHN0cnVjdCBtdGhjYV9hdG9taWNfc2VnKSkgLyAxNjsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBJQl9XUl9SRE1BX1JFQUQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffc3JxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffc3JxLmMKaW5kZXggMjZkNTE2MS4uZjdkMjM0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3NycS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9zcnEuYwpAQCAtNDE3LDYgKzQxNyw3IEBACiB7CiAJc3RydWN0IG10aGNhX2RldiAqZGV2ID0gdG9fbWRldihpYnNycS0+ZGV2aWNlKTsKIAlzdHJ1Y3QgbXRoY2Ffc3JxICpzcnEgPSB0b19tc3JxKGlic3JxKTsKKwlfX2JlMzIgZG9vcmJlbGxbMl07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyID0gMDsKIAlpbnQgZmlyc3RfaW5kOwpAQCAtNDMyLDYgKzQzMywyNSBAQAogCWZpcnN0X2luZCA9IHNycS0+Zmlyc3RfZnJlZTsKIAogCWZvciAobnJlcSA9IDA7IHdyOyArK25yZXEsIHdyID0gd3ItPm5leHQpIHsKKwkJaWYgKHVubGlrZWx5KG5yZXEgPT0gTVRIQ0FfVEFWT1JfTUFYX1dRRVNfUEVSX1JFQ1ZfREIpKSB7CisJCQlucmVxID0gMDsKKworCQkJZG9vcmJlbGxbMF0gPSBjcHVfdG9fYmUzMihmaXJzdF9pbmQgPDwgc3JxLT53cWVfc2hpZnQpOworCQkJZG9vcmJlbGxbMV0gPSBjcHVfdG9fYmUzMihzcnEtPnNycW4gPDwgOCk7CisKKwkJCS8qCisJCQkgKiBNYWtlIHN1cmUgdGhhdCBkZXNjcmlwdG9ycyBhcmUgd3JpdHRlbgorCQkJICogYmVmb3JlIGRvb3JiZWxsIGlzIHJ1bmcuCisJCQkgKi8KKwkJCXdtYigpOworCisJCQltdGhjYV93cml0ZTY0KGRvb3JiZWxsLAorCQkJCSAgICAgIGRldi0+a2FyICsgTVRIQ0FfUkVDRUlWRV9ET09SQkVMTCwKKwkJCQkgICAgICBNVEhDQV9HRVRfRE9PUkJFTExfTE9DSygmZGV2LT5kb29yYmVsbF9sb2NrKSk7CisKKwkJCWZpcnN0X2luZCA9IHNycS0+Zmlyc3RfZnJlZTsKKwkJfQorCiAJCWluZCA9IHNycS0+Zmlyc3RfZnJlZTsKIAogCQlpZiAoaW5kIDwgMCkgewpAQCAtNDk0LDggKzUxNCw2IEBACiAJfQogCiAJaWYgKGxpa2VseShucmVxKSkgewotCQlfX2JlMzIgZG9vcmJlbGxbMl07Ci0KIAkJZG9vcmJlbGxbMF0gPSBjcHVfdG9fYmUzMihmaXJzdF9pbmQgPDwgc3JxLT53cWVfc2hpZnQpOwogCQlkb29yYmVsbFsxXSA9IGNwdV90b19iZTMyKChzcnEtPnNycW4gPDwgOCkgfCBucmVxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3dxZS5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3dxZS5oCmluZGV4IDFmNGMwZmYuLjczZjFjMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV93cWUuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffd3FlLmgKQEAgLTQ5LDcgKzQ5LDggQEAKIH07CiAKIGVudW0gewotCU1USENBX0lOVkFMX0xLRVkgPSAweDEwMAorCU1USENBX0lOVkFMX0xLRVkJCQk9IDB4MTAwLAorCU1USENBX1RBVk9SX01BWF9XUUVTX1BFUl9SRUNWX0RCCT0gMjU2CiB9OwogCiBzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oCmluZGV4IDAwOTVhY2MuLjk5MjNhMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmgKQEAgLTE3OSw2ICsxNzksNyBAQAogI2lmZGVmIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHCiAJc3RydWN0IGxpc3RfaGVhZCBmc19saXN0OwogCXN0cnVjdCBkZW50cnkgKm1jZ19kZW50cnk7CisJc3RydWN0IGRlbnRyeSAqcGF0aF9kZW50cnk7CiAjZW5kaWYKIH07CiAKQEAgLTI3MCw3ICsyNzEsNiBAQAogCiAjaWZkZWYgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUcKIHN0cnVjdCBpcG9pYl9tY2FzdF9pdGVyICppcG9pYl9tY2FzdF9pdGVyX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci12b2lkIGlwb2liX21jYXN0X2l0ZXJfZnJlZShzdHJ1Y3QgaXBvaWJfbWNhc3RfaXRlciAqaXRlcik7CiBpbnQgaXBvaWJfbWNhc3RfaXRlcl9uZXh0KHN0cnVjdCBpcG9pYl9tY2FzdF9pdGVyICppdGVyKTsKIHZvaWQgaXBvaWJfbWNhc3RfaXRlcl9yZWFkKHN0cnVjdCBpcG9pYl9tY2FzdF9pdGVyICppdGVyLAogCQkJCSAgdW5pb24gaWJfZ2lkICpnaWQsCkBAIC0yNzgsNiArMjc4LDExIEBACiAJCQkJICB1bnNpZ25lZCBpbnQgKnF1ZXVlbGVuLAogCQkJCSAgdW5zaWduZWQgaW50ICpjb21wbGV0ZSwKIAkJCQkgIHVuc2lnbmVkIGludCAqc2VuZF9vbmx5KTsKKworc3RydWN0IGlwb2liX3BhdGhfaXRlciAqaXBvaWJfcGF0aF9pdGVyX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitpbnQgaXBvaWJfcGF0aF9pdGVyX25leHQoc3RydWN0IGlwb2liX3BhdGhfaXRlciAqaXRlcik7Cit2b2lkIGlwb2liX3BhdGhfaXRlcl9yZWFkKHN0cnVjdCBpcG9pYl9wYXRoX2l0ZXIgKml0ZXIsCisJCQkgIHN0cnVjdCBpcG9pYl9wYXRoICpwYXRoKTsKICNlbmRpZgogCiBpbnQgaXBvaWJfbWNhc3RfYXR0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBtbGlkLApAQCAtMjk5LDEzICszMDQsMTMgQEAKIGludCBpcG9pYl9wa2V5X2Rldl9kZWxheV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiAjaWZkZWYgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUcKLWludCBpcG9pYl9jcmVhdGVfZGVidWdfZmlsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXZvaWQgaXBvaWJfZGVsZXRlX2RlYnVnX2ZpbGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIGlwb2liX2NyZWF0ZV9kZWJ1Z19maWxlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3ZvaWQgaXBvaWJfZGVsZXRlX2RlYnVnX2ZpbGVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogaW50IGlwb2liX3JlZ2lzdGVyX2RlYnVnZnModm9pZCk7CiB2b2lkIGlwb2liX3VucmVnaXN0ZXJfZGVidWdmcyh2b2lkKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBpcG9pYl9jcmVhdGVfZGVidWdfZmlsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgaXBvaWJfZGVsZXRlX2RlYnVnX2ZpbGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaXBvaWJfY3JlYXRlX2RlYnVnX2ZpbGVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGlwb2liX2RlbGV0ZV9kZWJ1Z19maWxlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGlwb2liX3JlZ2lzdGVyX2RlYnVnZnModm9pZCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIGlwb2liX3VucmVnaXN0ZXJfZGVidWdmcyh2b2lkKSB7IH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9mcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9mcy5jCmluZGV4IDM4YjE1MGYuLjY4NTI1OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfZnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2ZzLmMKQEAgLTQzLDYgKzQzLDE4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICppcG9pYl9yb290OwogCitzdGF0aWMgdm9pZCBmb3JtYXRfZ2lkKHVuaW9uIGliX2dpZCAqZ2lkLCBjaGFyICpidWYpCit7CisJaW50IGksIG47CisKKwlmb3IgKG4gPSAwLCBpID0gMDsgaSA8IDg7ICsraSkgeworCQluICs9IHNwcmludGYoYnVmICsgbiwgIiV4IiwKKwkJCSAgICAgYmUxNl90b19jcHUoKChfX2JlMTYgKikgZ2lkLT5yYXcpW2ldKSk7CisJCWlmIChpIDwgNykKKwkJCWJ1ZltuKytdID0gJzonOworCX0KK30KKwogc3RhdGljIHZvaWQgKmlwb2liX21jZ19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpmaWxlLCBsb2ZmX3QgKnBvcykKIHsKIAlzdHJ1Y3QgaXBvaWJfbWNhc3RfaXRlciAqaXRlcjsKQEAgLTU0LDcgKzY2LDcgQEAKIAogCXdoaWxlIChuLS0pIHsKIAkJaWYgKGlwb2liX21jYXN0X2l0ZXJfbmV4dChpdGVyKSkgewotCQkJaXBvaWJfbWNhc3RfaXRlcl9mcmVlKGl0ZXIpOworCQkJa2ZyZWUoaXRlcik7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCX0KQEAgLTcwLDcgKzgyLDcgQEAKIAkoKnBvcykrKzsKIAogCWlmIChpcG9pYl9tY2FzdF9pdGVyX25leHQoaXRlcikpIHsKLQkJaXBvaWJfbWNhc3RfaXRlcl9mcmVlKGl0ZXIpOworCQlrZnJlZShpdGVyKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC04NywzMiArOTksMzIgQEAKIAlzdHJ1Y3QgaXBvaWJfbWNhc3RfaXRlciAqaXRlciA9IGl0ZXJfcHRyOwogCWNoYXIgZ2lkX2J1ZltzaXplb2YgImZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZiJdOwogCXVuaW9uIGliX2dpZCBtZ2lkOwotCWludCBpLCBuOwogCXVuc2lnbmVkIGxvbmcgY3JlYXRlZDsKIAl1bnNpZ25lZCBpbnQgcXVldWVsZW4sIGNvbXBsZXRlLCBzZW5kX29ubHk7CiAKLQlpZiAoaXRlcikgewotCQlpcG9pYl9tY2FzdF9pdGVyX3JlYWQoaXRlciwgJm1naWQsICZjcmVhdGVkLCAmcXVldWVsZW4sCi0JCQkJICAgICAgJmNvbXBsZXRlLCAmc2VuZF9vbmx5KTsKKwlpZiAoIWl0ZXIpCisJCXJldHVybiAwOwogCi0JCWZvciAobiA9IDAsIGkgPSAwOyBpIDwgc2l6ZW9mIG1naWQgLyAyOyArK2kpIHsKLQkJCW4gKz0gc3ByaW50ZihnaWRfYnVmICsgbiwgIiV4IiwKLQkJCQkgICAgIGJlMTZfdG9fY3B1KCgoX19iZTE2ICopIG1naWQucmF3KVtpXSkpOwotCQkJaWYgKGkgPCBzaXplb2YgbWdpZCAvIDIgLSAxKQotCQkJCWdpZF9idWZbbisrXSA9ICc6JzsKLQkJfQotCX0KKwlpcG9pYl9tY2FzdF9pdGVyX3JlYWQoaXRlciwgJm1naWQsICZjcmVhdGVkLCAmcXVldWVsZW4sCisJCQkgICAgICAmY29tcGxldGUsICZzZW5kX29ubHkpOwogCi0Jc2VxX3ByaW50ZihmaWxlLCAiR0lEOiAlKnMiLCAtKDEgKyAoaW50KSBzaXplb2YgZ2lkX2J1ZiksIGdpZF9idWYpOworCWZvcm1hdF9naWQoJm1naWQsIGdpZF9idWYpOwogCiAJc2VxX3ByaW50ZihmaWxlLAotCQkgICAiIGNyZWF0ZWQ6ICUxMGxkIHF1ZXVlbGVuOiAlNGQgY29tcGxldGU6ICVkIHNlbmRfb25seTogJWRcbiIsCi0JCSAgIGNyZWF0ZWQsIHF1ZXVlbGVuLCBjb21wbGV0ZSwgc2VuZF9vbmx5KTsKKwkJICAgIkdJRDogJXNcbiIKKwkJICAgIiAgY3JlYXRlZDogJTEwbGRcbiIKKwkJICAgIiAgcXVldWVsZW46ICU5ZFxuIgorCQkgICAiICBjb21wbGV0ZTogJTlzXG4iCisJCSAgICIgIHNlbmRfb25seTogJThzXG4iCisJCSAgICJcbiIsCisJCSAgIGdpZF9idWYsIGNyZWF0ZWQsIHF1ZXVlbGVuLAorCQkgICBjb21wbGV0ZSA/ICJ5ZXMiIDogIm5vIiwKKwkJICAgc2VuZF9vbmx5ID8gInllcyIgOiAibm8iKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlwb2liX3NlcV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlwb2liX21jZ19zZXFfb3BzID0gewogCS5zdGFydCA9IGlwb2liX21jZ19zZXFfc3RhcnQsCiAJLm5leHQgID0gaXBvaWJfbWNnX3NlcV9uZXh0LAogCS5zdG9wICA9IGlwb2liX21jZ19zZXFfc3RvcCwKQEAgLTEyNCw3ICsxMzYsNyBAQAogCXN0cnVjdCBzZXFfZmlsZSAqc2VxOwogCWludCByZXQ7CiAKLQlyZXQgPSBzZXFfb3BlbihmaWxlLCAmaXBvaWJfc2VxX29wcyk7CisJcmV0ID0gc2VxX29wZW4oZmlsZSwgJmlwb2liX21jZ19zZXFfb3BzKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0xMzQsNyArMTQ2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXBvaWJfZm9wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlwb2liX21jZ19mb3BzID0gewogCS5vd25lciAgID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gICAgPSBpcG9pYl9tY2dfb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLApAQCAtMTQyLDI1ICsxNTQsMTM4IEBACiAJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZQogfTsKIAotaW50IGlwb2liX2NyZWF0ZV9kZWJ1Z19maWxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCAqaXBvaWJfcGF0aF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpmaWxlLCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWNoYXIgbmFtZVtJRk5BTVNJWiArIHNpemVvZiAiX21jZyJdOworCXN0cnVjdCBpcG9pYl9wYXRoX2l0ZXIgKml0ZXI7CisJbG9mZl90IG4gPSAqcG9zOwogCi0Jc25wcmludGYobmFtZSwgc2l6ZW9mIG5hbWUsICIlc19tY2ciLCBkZXYtPm5hbWUpOworCWl0ZXIgPSBpcG9pYl9wYXRoX2l0ZXJfaW5pdChmaWxlLT5wcml2YXRlKTsKKwlpZiAoIWl0ZXIpCisJCXJldHVybiBOVUxMOwogCi0JcHJpdi0+bWNnX2RlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUobmFtZSwgU19JRlJFRyB8IFNfSVJVR08sCi0JCQkJCSAgICAgICBpcG9pYl9yb290LCBkZXYsICZpcG9pYl9mb3BzKTsKKwl3aGlsZSAobi0tKSB7CisJCWlmIChpcG9pYl9wYXRoX2l0ZXJfbmV4dChpdGVyKSkgeworCQkJa2ZyZWUoaXRlcik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KIAotCXJldHVybiBwcml2LT5tY2dfZGVudHJ5ID8gMCA6IC1FTk9NRU07CisJcmV0dXJuIGl0ZXI7CiB9CiAKLXZvaWQgaXBvaWJfZGVsZXRlX2RlYnVnX2ZpbGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkICppcG9pYl9wYXRoX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqZmlsZSwgdm9pZCAqaXRlcl9wdHIsCisJCQkJICAgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGlwb2liX3BhdGhfaXRlciAqaXRlciA9IGl0ZXJfcHRyOworCisJKCpwb3MpKys7CisKKwlpZiAoaXBvaWJfcGF0aF9pdGVyX25leHQoaXRlcikpIHsKKwkJa2ZyZWUoaXRlcik7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBpdGVyOworfQorCitzdGF0aWMgdm9pZCBpcG9pYl9wYXRoX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqZmlsZSwgdm9pZCAqaXRlcl9wdHIpCit7CisJLyogbm90aGluZyBmb3Igbm93ICovCit9CisKK3N0YXRpYyBpbnQgaXBvaWJfcGF0aF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmZpbGUsIHZvaWQgKml0ZXJfcHRyKQoreworCXN0cnVjdCBpcG9pYl9wYXRoX2l0ZXIgKml0ZXIgPSBpdGVyX3B0cjsKKwljaGFyIGdpZF9idWZbc2l6ZW9mICJmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmYiXTsKKwlzdHJ1Y3QgaXBvaWJfcGF0aCBwYXRoOworCWludCByYXRlOworCisJaWYgKCFpdGVyKQorCQlyZXR1cm4gMDsKKworCWlwb2liX3BhdGhfaXRlcl9yZWFkKGl0ZXIsICZwYXRoKTsKKworCWZvcm1hdF9naWQoJnBhdGgucGF0aHJlYy5kZ2lkLCBnaWRfYnVmKTsKKworCXNlcV9wcmludGYoZmlsZSwKKwkJICAgIkdJRDogJXNcbiIKKwkJICAgIiAgY29tcGxldGU6ICU2c1xuIiwKKwkJICAgZ2lkX2J1ZiwgcGF0aC5wYXRocmVjLmRsaWQgPyAieWVzIiA6ICJubyIpOworCisJaWYgKHBhdGgucGF0aHJlYy5kbGlkKSB7CisJCXJhdGUgPSBpYl9zYV9yYXRlX2VudW1fdG9faW50KHBhdGgucGF0aHJlYy5yYXRlKSAqIDI1OworCisJCXNlcV9wcmludGYoZmlsZSwKKwkJCSAgICIgIERMSUQ6ICAgICAweCUwNHhcbiIKKwkJCSAgICIgIFNMOiAlMTJkXG4iCisJCQkgICAiICByYXRlOiAlKmQlcyBHYi9zZWNcbiIsCisJCQkgICBiZTE2X3RvX2NwdShwYXRoLnBhdGhyZWMuZGxpZCksCisJCQkgICBwYXRoLnBhdGhyZWMuc2wsCisJCQkgICAxMCAtICgocmF0ZSAlIDEwKSA/IDIgOiAwKSwKKwkJCSAgIHJhdGUgLyAxMCwgcmF0ZSAlIDEwID8gIi41IiA6ICIiKTsKKwl9CisKKwlzZXFfcHV0YyhmaWxlLCAnXG4nKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlwb2liX3BhdGhfc2VxX29wcyA9IHsKKwkuc3RhcnQgPSBpcG9pYl9wYXRoX3NlcV9zdGFydCwKKwkubmV4dCAgPSBpcG9pYl9wYXRoX3NlcV9uZXh0LAorCS5zdG9wICA9IGlwb2liX3BhdGhfc2VxX3N0b3AsCisJLnNob3cgID0gaXBvaWJfcGF0aF9zZXFfc2hvdywKK307CisKK3N0YXRpYyBpbnQgaXBvaWJfcGF0aF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBzZXFfZmlsZSAqc2VxOworCWludCByZXQ7CisKKwlyZXQgPSBzZXFfb3BlbihmaWxlLCAmaXBvaWJfcGF0aF9zZXFfb3BzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXNlcS0+cHJpdmF0ZSA9IGlub2RlLT51LmdlbmVyaWNfaXA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXBvaWJfcGF0aF9mb3BzID0geworCS5vd25lciAgID0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgPSBpcG9pYl9wYXRoX29wZW4sCisJLnJlYWQgICAgPSBzZXFfcmVhZCwKKwkubGxzZWVrICA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlCit9OworCit2b2lkIGlwb2liX2NyZWF0ZV9kZWJ1Z19maWxlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJY2hhciBuYW1lW0lGTkFNU0laICsgc2l6ZW9mICJfcGF0aCJdOworCisJc25wcmludGYobmFtZSwgc2l6ZW9mIG5hbWUsICIlc19tY2ciLCBkZXYtPm5hbWUpOworCXByaXYtPm1jZ19kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG5hbWUsIFNfSUZSRUcgfCBTX0lSVUdPLAorCQkJCQkgICAgICAgaXBvaWJfcm9vdCwgZGV2LCAmaXBvaWJfbWNnX2ZvcHMpOworCWlmICghcHJpdi0+bWNnX2RlbnRyeSkKKwkJaXBvaWJfd2Fybihwcml2LCAiZmFpbGVkIHRvIGNyZWF0ZSBtY2cgZGVidWcgZmlsZVxuIik7CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YgbmFtZSwgIiVzX3BhdGgiLCBkZXYtPm5hbWUpOworCXByaXYtPnBhdGhfZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZShuYW1lLCBTX0lGUkVHIHwgU19JUlVHTywKKwkJCQkJCWlwb2liX3Jvb3QsIGRldiwgJmlwb2liX3BhdGhfZm9wcyk7CisJaWYgKCFwcml2LT5wYXRoX2RlbnRyeSkKKwkJaXBvaWJfd2Fybihwcml2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwYXRoIGRlYnVnIGZpbGVcbiIpOworfQorCit2b2lkIGlwb2liX2RlbGV0ZV9kZWJ1Z19maWxlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKIAlpZiAocHJpdi0+bWNnX2RlbnRyeSkKIAkJZGVidWdmc19yZW1vdmUocHJpdi0+bWNnX2RlbnRyeSk7CisJaWYgKHByaXYtPnBhdGhfZGVudHJ5KQorCQlkZWJ1Z2ZzX3JlbW92ZShwcml2LT5wYXRoX2RlbnRyeSk7CiB9CiAKIGludCBpcG9pYl9yZWdpc3Rlcl9kZWJ1Z2ZzKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCmluZGV4IGNlMDI5NjIuLjJmYTMwNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCkBAIC01OCw2ICs1OCwxMSBAQAogTU9EVUxFX1BBUk1fREVTQyhkZWJ1Z19sZXZlbCwgIkVuYWJsZSBkZWJ1ZyB0cmFjaW5nIGlmID4gMCIpOwogI2VuZGlmCiAKK3N0cnVjdCBpcG9pYl9wYXRoX2l0ZXIgeworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IGlwb2liX3BhdGggIHBhdGg7Cit9OworCiBzdGF0aWMgY29uc3QgdTggaXB2NF9iY2FzdF9hZGRyW10gPSB7CiAJMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwKIAkweGZmLCAweDEyLCAweDQwLCAweDFiLAkweDAwLCAweDAwLCAweDAwLCAweDAwLApAQCAtMjUwLDYgKzI1NSw2NCBAQAogCWtmcmVlKHBhdGgpOwogfQogCisjaWZkZWYgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUcKKworc3RydWN0IGlwb2liX3BhdGhfaXRlciAqaXBvaWJfcGF0aF9pdGVyX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaXBvaWJfcGF0aF9pdGVyICppdGVyOworCisJaXRlciA9IGttYWxsb2Moc2l6ZW9mICppdGVyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWl0ZXIpCisJCXJldHVybiBOVUxMOworCisJaXRlci0+ZGV2ID0gZGV2OworCW1lbXNldChpdGVyLT5wYXRoLnBhdGhyZWMuZGdpZC5yYXcsIDAsIDE2KTsKKworCWlmIChpcG9pYl9wYXRoX2l0ZXJfbmV4dChpdGVyKSkgeworCQlrZnJlZShpdGVyKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGl0ZXI7Cit9CisKK2ludCBpcG9pYl9wYXRoX2l0ZXJfbmV4dChzdHJ1Y3QgaXBvaWJfcGF0aF9pdGVyICppdGVyKQoreworCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGl0ZXItPmRldik7CisJc3RydWN0IHJiX25vZGUgKm47CisJc3RydWN0IGlwb2liX3BhdGggKnBhdGg7CisJaW50IHJldCA9IDE7CisKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKKworCW4gPSByYl9maXJzdCgmcHJpdi0+cGF0aF90cmVlKTsKKworCXdoaWxlIChuKSB7CisJCXBhdGggPSByYl9lbnRyeShuLCBzdHJ1Y3QgaXBvaWJfcGF0aCwgcmJfbm9kZSk7CisKKwkJaWYgKG1lbWNtcChpdGVyLT5wYXRoLnBhdGhyZWMuZGdpZC5yYXcsIHBhdGgtPnBhdGhyZWMuZGdpZC5yYXcsCisJCQkgICBzaXplb2YgKHVuaW9uIGliX2dpZCkpIDwgMCkgeworCQkJaXRlci0+cGF0aCA9ICpwYXRoOworCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJbiA9IHJiX25leHQobik7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgaXBvaWJfcGF0aF9pdGVyX3JlYWQoc3RydWN0IGlwb2liX3BhdGhfaXRlciAqaXRlciwKKwkJCSAgc3RydWN0IGlwb2liX3BhdGggKnBhdGgpCit7CisJKnBhdGggPSBpdGVyLT5wYXRoOworfQorCisjZW5kaWYgLyogQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUcgKi8KKwogdm9pZCBpcG9pYl9mbHVzaF9wYXRocyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CkBAIC03NjMsNyArODI2LDcgQEAKIHsKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpLCAqY3ByaXYsICp0Y3ByaXY7CiAKLQlpcG9pYl9kZWxldGVfZGVidWdfZmlsZShkZXYpOworCWlwb2liX2RlbGV0ZV9kZWJ1Z19maWxlcyhkZXYpOwogCiAJLyogRGVsZXRlIGFueSBjaGlsZCBpbnRlcmZhY2VzIGZpcnN0ICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNwcml2LCB0Y3ByaXYsICZwcml2LT5jaGlsZF9pbnRmcywgbGlzdCkgewpAQCAtOTcyLDggKzEwMzUsNyBAQAogCQlnb3RvIHJlZ2lzdGVyX2ZhaWxlZDsKIAl9CiAKLQlpZiAoaXBvaWJfY3JlYXRlX2RlYnVnX2ZpbGUocHJpdi0+ZGV2KSkKLQkJZ290byBkZWJ1Z19mYWlsZWQ7CisJaXBvaWJfY3JlYXRlX2RlYnVnX2ZpbGVzKHByaXYtPmRldik7CiAKIAlpZiAoaXBvaWJfYWRkX3BrZXlfYXR0cihwcml2LT5kZXYpKQogCQlnb3RvIHN5c2ZzX2ZhaWxlZDsKQEAgLTk4Nyw5ICsxMDQ5LDcgQEAKIAlyZXR1cm4gcHJpdi0+ZGV2OwogCiBzeXNmc19mYWlsZWQ6Ci0JaXBvaWJfZGVsZXRlX2RlYnVnX2ZpbGUocHJpdi0+ZGV2KTsKLQotZGVidWdfZmFpbGVkOgorCWlwb2liX2RlbGV0ZV9kZWJ1Z19maWxlcyhwcml2LT5kZXYpOwogCXVucmVnaXN0ZXJfbmV0ZGV2KHByaXYtPmRldik7CiAKIHJlZ2lzdGVyX2ZhaWxlZDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCmluZGV4IDNlY2Y3OGEuLmMzM2VkODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYwpAQCAtMTIwLDEyICsxMjAsOCBAQAogCWlmIChtY2FzdC0+YWgpCiAJCWlwb2liX3B1dF9haChtY2FzdC0+YWgpOwogCi0Jd2hpbGUgKCFza2JfcXVldWVfZW1wdHkoJm1jYXN0LT5wa3RfcXVldWUpKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2IgPSBza2JfZGVxdWV1ZSgmbWNhc3QtPnBrdF9xdWV1ZSk7Ci0KLQkJc2tiLT5kZXYgPSBkZXY7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JfQorCXdoaWxlICghc2tiX3F1ZXVlX2VtcHR5KCZtY2FzdC0+cGt0X3F1ZXVlKSkKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiX2RlcXVldWUoJm1jYXN0LT5wa3RfcXVldWUpKTsKIAogCWtmcmVlKG1jYXN0KTsKIH0KQEAgLTMxNywxMyArMzEzLDggQEAKIAkJCQkJSVBPSUJfR0lEX0FSRyhtY2FzdC0+bWNtZW1iZXIubWdpZCksIHN0YXR1cyk7CiAKIAkJLyogRmx1c2ggb3V0IGFueSBxdWV1ZWQgcGFja2V0cyAqLwotCQl3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eSgmbWNhc3QtPnBrdF9xdWV1ZSkpIHsKLQkJCXN0cnVjdCBza19idWZmICpza2IgPSBza2JfZGVxdWV1ZSgmbWNhc3QtPnBrdF9xdWV1ZSk7Ci0KLQkJCXNrYi0+ZGV2ID0gZGV2OwotCi0JCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQl9CisJCXdoaWxlICghc2tiX3F1ZXVlX2VtcHR5KCZtY2FzdC0+cGt0X3F1ZXVlKSkKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYl9kZXF1ZXVlKCZtY2FzdC0+cGt0X3F1ZXVlKSk7CiAKIAkJLyogQ2xlYXIgdGhlIGJ1c3kgZmxhZyBzbyB3ZSB0cnkgYWdhaW4gKi8KIAkJY2xlYXJfYml0KElQT0lCX01DQVNUX0ZMQUdfQlVTWSwgJm1jYXN0LT5mbGFncyk7CkBAIC05MjgsMjEgKzkxOSwxNiBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWl0ZXItPmRldiA9IGRldjsKLQltZW1zZXQoaXRlci0+bWdpZC5yYXcsIDAsIHNpemVvZiBpdGVyLT5tZ2lkKTsKKwltZW1zZXQoaXRlci0+bWdpZC5yYXcsIDAsIDE2KTsKIAogCWlmIChpcG9pYl9tY2FzdF9pdGVyX25leHQoaXRlcikpIHsKLQkJaXBvaWJfbWNhc3RfaXRlcl9mcmVlKGl0ZXIpOworCQlrZnJlZShpdGVyKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCiAJcmV0dXJuIGl0ZXI7CiB9CiAKLXZvaWQgaXBvaWJfbWNhc3RfaXRlcl9mcmVlKHN0cnVjdCBpcG9pYl9tY2FzdF9pdGVyICppdGVyKQotewotCWtmcmVlKGl0ZXIpOwotfQotCiBpbnQgaXBvaWJfbWNhc3RfaXRlcl9uZXh0KHN0cnVjdCBpcG9pYl9tY2FzdF9pdGVyICppdGVyKQogewogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGl0ZXItPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX3ZsYW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmxhbi5jCmluZGV4IDMzMmQ3MzAuLmQyODBiMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmxhbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmxhbi5jCkBAIC0xMTMsOCArMTEzLDcgQEAKIAogCXByaXYtPnBhcmVudCA9IHBwcml2LT5kZXY7CiAKLQlpZiAoaXBvaWJfY3JlYXRlX2RlYnVnX2ZpbGUocHJpdi0+ZGV2KSkKLQkJZ290byBkZWJ1Z19mYWlsZWQ7CisJaXBvaWJfY3JlYXRlX2RlYnVnX2ZpbGVzKHByaXYtPmRldik7CiAKIAlpZiAoaXBvaWJfYWRkX3BrZXlfYXR0cihwcml2LT5kZXYpKQogCQlnb3RvIHN5c2ZzX2ZhaWxlZDsKQEAgLTEzMCw5ICsxMjksNyBAQAogCXJldHVybiAwOwogCiBzeXNmc19mYWlsZWQ6Ci0JaXBvaWJfZGVsZXRlX2RlYnVnX2ZpbGUocHJpdi0+ZGV2KTsKLQotZGVidWdfZmFpbGVkOgorCWlwb2liX2RlbGV0ZV9kZWJ1Z19maWxlcyhwcml2LT5kZXYpOwogCXVucmVnaXN0ZXJfbmV0ZGV2KHByaXYtPmRldik7CiAKIHJlZ2lzdGVyX2ZhaWxlZDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvY29yZ2lrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvY29yZ2lrYmQuYwppbmRleCBkMDBkMTRiLi42NDY3MmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2Nvcmdpa2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9jb3JnaWtiZC5jCkBAIC0yNTksMTcgKzI1OSwxNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGNvcmdpa2JkX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGNvcmdpa2JkX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IGNvcmdpa2JkICpjb3JnaWtiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBjb3JnaWtiZCAqY29yZ2lrYmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWNvcmdpa2JkLT5zdXNwZW5kZWQgPSAxOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY29yZ2lrYmRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgY29yZ2lrYmRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgY29yZ2lrYmQgKmNvcmdpa2JkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGNvcmdpa2JkICpjb3JnaWtiZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAkvKiBVcG9uIHJlc3VtZSwgaWdub3JlIHRoZSBzdXNwZW5kIGtleSBmb3IgYSBzaG9ydCB3aGlsZSAqLwogCWNvcmdpa2JkLT5zdXNwZW5kX2ppZmZpZXM9amlmZmllczsKQEAgLTI4Miw3ICsyODIsNyBAQAogI2RlZmluZSBjb3JnaWtiZF9yZXN1bWUJCU5VTEwKICNlbmRpZgogCi1zdGF0aWMgaW50IF9faW5pdCBjb3JnaWtiZF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBjb3JnaWtiZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBjb3JnaWtiZCAqY29yZ2lrYmQ7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwpAQCAtMjk2LDcgKzI5Niw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGNvcmdpa2JkKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjb3JnaWtiZCk7CiAKIAljb3JnaWtiZC0+aW5wdXQgPSBpbnB1dF9kZXY7CiAJc3Bpbl9sb2NrX2luaXQoJmNvcmdpa2JkLT5sb2NrKTsKQEAgLTMyMSw3ICszMjEsNyBAQAogCWlucHV0X2Rldi0+aWQudmVuZG9yID0gMHgwMDAxOwogCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IDB4MDAwMTsKIAlpbnB1dF9kZXYtPmlkLnZlcnNpb24gPSAweDAxMDA7Ci0JaW5wdXRfZGV2LT5jZGV2LmRldiA9IGRldjsKKwlpbnB1dF9kZXYtPmNkZXYuZGV2ID0gJnBkZXYtPmRldjsKIAlpbnB1dF9kZXYtPnByaXZhdGUgPSBjb3JnaWtiZDsKIAogCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9SRVApIHwgQklUKEVWX1BXUikgfCBCSVQoRVZfU1cpOwpAQCAtMzU2LDEwICszNTYsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjb3JnaWtiZF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBjb3JnaWtiZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgY29yZ2lrYmQgKmNvcmdpa2JkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGNvcmdpa2JkICpjb3JnaWtiZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJZm9yIChpID0gMDsgaSA8IENPUkdJX0tFWV9TRU5TRV9OVU07IGkrKykKIAkJZnJlZV9pcnEoQ09SR0lfSVJRX0dQSU9fS0VZX1NFTlNFKGkpLCBjb3JnaWtiZCk7CkBAIC0zNzQsMjMgKzM3NCwyNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgY29yZ2lrYmRfZHJpdmVyID0gewotCS5uYW1lCQk9ICJjb3JnaS1rZXlib2FyZCIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBjb3JnaWtiZF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGNvcmdpa2JkX3Byb2JlLAogCS5yZW1vdmUJCT0gY29yZ2lrYmRfcmVtb3ZlLAogCS5zdXNwZW5kCT0gY29yZ2lrYmRfc3VzcGVuZCwKIAkucmVzdW1lCQk9IGNvcmdpa2JkX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiY29yZ2kta2V5Ym9hcmQiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBjb3JnaWtiZF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmY29yZ2lrYmRfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZjb3JnaWtiZF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY29yZ2lrYmRfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZjb3JnaWtiZF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZjb3JnaWtiZF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChjb3JnaWtiZF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3BpdHprYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3BpdHprYmQuYwppbmRleCAwZmEzOGE1Li42YTE1ZmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NwaXR6a2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jCkBAIC0zMDksMTAgKzMwOSwxMCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHNwaXR6a2JkX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNwaXR6a2JkX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IHNwaXR6a2JkICpzcGl0emtiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzcGl0emtiZCAqc3BpdHprYmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXNwaXR6a2JkLT5zdXNwZW5kZWQgPSAxOwogCiAJLyogU2V0IFN0cm9iZSBsaW5lcyBhcyBpbnB1dHMgLSAqZXhjZXB0KiBzdHJvYmUgbGluZSAwIGxlYXZlIHRoaXMKQEAgLTMyMywxMCArMzIzLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc3BpdHprYmRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc3BpdHprYmRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgaTsKLQlzdHJ1Y3Qgc3BpdHprYmQgKnNwaXR6a2JkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNwaXR6a2JkICpzcGl0emtiZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgU1BJVFpfS0VZX1NUUk9CRV9OVU07IGkrKykKIAkJcHhhX2dwaW9fbW9kZShzcGl0el9zdHJvYmVzW2ldIHwgR1BJT19PVVQgfCBHUElPX0RGTFRfSElHSCk7CkBAIC0zNDIsNyArMzQyLDcgQEAKICNkZWZpbmUgc3BpdHprYmRfcmVzdW1lCQlOVUxMCiAjZW5kaWYKIAotc3RhdGljIGludCBfX2luaXQgc3BpdHprYmRfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgc3BpdHprYmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzcGl0emtiZCAqc3BpdHprYmQ7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwpAQCAtMzU4LDcgKzM1OCw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIHNwaXR6a2JkKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIHNwaXR6a2JkKTsKIAlzdHJjcHkoc3BpdHprYmQtPnBoeXMsICJzcGl0emtiZC9pbnB1dDAiKTsKIAogCXNwaW5fbG9ja19pbml0KCZzcGl0emtiZC0+bG9jayk7CkBAIC0zODAsNyArMzgwLDcgQEAKIAlpbnB1dF9kZXYtPnByaXZhdGUgPSBzcGl0emtiZDsKIAlpbnB1dF9kZXYtPm5hbWUgPSAiU3BpdHogS2V5Ym9hcmQiOwogCWlucHV0X2Rldi0+cGh5cyA9IHNwaXR6a2JkLT5waHlzOwotCWlucHV0X2Rldi0+Y2Rldi5kZXYgPSBkZXY7CisJaW5wdXRfZGV2LT5jZGV2LmRldiA9ICZkZXYtPmRldjsKIAogCWlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOwogCWlucHV0X2Rldi0+aWQudmVuZG9yID0gMHgwMDAxOwpAQCAtNDM3LDEwICs0MzcsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzcGl0emtiZF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzcGl0emtiZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCBpOwotCXN0cnVjdCBzcGl0emtiZCAqc3BpdHprYmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc3BpdHprYmQgKnNwaXR6a2JkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWZvciAoaSA9IDA7IGkgPCBTUElUWl9LRVlfU0VOU0VfTlVNOyBpKyspCiAJCWZyZWVfaXJxKElSUV9HUElPKHNwaXR6X3NlbnNlc1tpXSksIHNwaXR6a2JkKTsKQEAgLTQ2MCwyMyArNDYwLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzcGl0emtiZF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInNwaXR6LWtleWJvYXJkIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNwaXR6a2JkX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gc3BpdHprYmRfcHJvYmUsCiAJLnJlbW92ZQkJPSBzcGl0emtiZF9yZW1vdmUsCiAJLnN1c3BlbmQJPSBzcGl0emtiZF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc3BpdHprYmRfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzcGl0ei1rZXlib2FyZCIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNwaXR6a2JkX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZzcGl0emtiZF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNwaXR6a2JkX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzcGl0emtiZF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnNwaXR6a2JkX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNwaXR6a2JkX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHNwaXR6a2JkX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCmluZGV4IDAxZTE4NjQuLmFjODZjMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKQEAgLTkxMiw3ICs5MTIsNyBAQAogICogSGVyZSB3ZSB0cnkgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgQklPUyBzZXR0aW5ncwogICovCiAKLXN0YXRpYyBpbnQgaTgwNDJfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgaTgwNDJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlkZWxfdGltZXJfc3luYygmaTgwNDJfdGltZXIpOwogCWk4MDQyX2NvbnRyb2xsZXJfcmVzZXQoKTsKQEAgLTkyNSw3ICs5MjUsNyBAQAogICogSGVyZSB3ZSB0cnkgdG8gcmVzZXQgZXZlcnl0aGluZyBiYWNrIHRvIGEgc3RhdGUgaW4gd2hpY2ggc3VzcGVuZGVkCiAgKi8KIAotc3RhdGljIGludCBpODA0Ml9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBpODA0Ml9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCBpOwogCkBAIC05NjQsMTcgKzk2NCwxOCBAQAogICogYmVjYXVzZSBvdGhlcndpc2UgQklPU2VzIHdpbGwgYmUgY29uZnVzZWQuCiAgKi8KIAotc3RhdGljIHZvaWQgaTgwNDJfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIHZvaWQgaTgwNDJfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWk4MDQyX2NvbnRyb2xsZXJfY2xlYW51cCgpOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgaTgwNDJfZHJpdmVyID0gewotCS5uYW1lCQk9ICJpODA0MiIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpODA0Ml9kcml2ZXIgPSB7CiAJLnN1c3BlbmQJPSBpODA0Ml9zdXNwZW5kLAogCS5yZXN1bWUJCT0gaTgwNDJfcmVzdW1lLAogCS5zaHV0ZG93bgk9IGk4MDQyX3NodXRkb3duLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJpODA0MiIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGk4MDQyX2NyZWF0ZV9rYmRfcG9ydCh2b2lkKQpAQCAtMTA3OCw3ICsxMDc5LDcgQEAKIAkJZ290byBlcnJfcGxhdGZvcm1fZXhpdDsKIAl9CiAKLQllcnIgPSBkcml2ZXJfcmVnaXN0ZXIoJmk4MDQyX2RyaXZlcik7CisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpODA0Ml9kcml2ZXIpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2NvbnRyb2xsZXJfY2xlYW51cDsKIApAQCAtMTEyNiw3ICsxMTI3LDcgQEAKICBlcnJfdW5yZWdpc3Rlcl9kZXZpY2U6CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoaTgwNDJfcGxhdGZvcm1fZGV2aWNlKTsKICBlcnJfdW5yZWdpc3Rlcl9kcml2ZXI6Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmk4MDQyX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmk4MDQyX2RyaXZlcik7CiAgZXJyX2NvbnRyb2xsZXJfY2xlYW51cDoKIAlpODA0Ml9jb250cm9sbGVyX2NsZWFudXAoKTsKICBlcnJfcGxhdGZvcm1fZXhpdDoKQEAgLTExNDgsNyArMTE0OSw3IEBACiAJZGVsX3RpbWVyX3N5bmMoJmk4MDQyX3RpbWVyKTsKIAogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGk4MDQyX3BsYXRmb3JtX2RldmljZSk7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmk4MDQyX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmk4MDQyX2RyaXZlcik7CiAKIAlpODA0Ml9wbGF0Zm9ybV9leGl0KCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vcnBja2JkLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3JwY2tiZC5jCmluZGV4IDUyYzQ5MjUuLmEzYmQxMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vcnBja2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9ycGNrYmQuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBzZXJpbyBzdHJ1Y3R1cmUgZm9yIHN1YnNlcXVlbnQgcmVnaXN0cmF0aW9uCiAgKiB3aXRoIHNlcmlvIGNvcmUuCiAgKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHJwY2tiZF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBycGNrYmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzZXJpbyAqc2VyaW87CiAKQEAgLTEyMCwzNyArMTIwLDM4IEBACiAJc2VyaW8tPndyaXRlCQk9IHJwY2tiZF93cml0ZTsKIAlzZXJpby0+b3BlbgkJPSBycGNrYmRfb3BlbjsKIAlzZXJpby0+Y2xvc2UJCT0gcnBja2JkX2Nsb3NlOwotCXNlcmlvLT5kZXYucGFyZW50CT0gZGV2OworCXNlcmlvLT5kZXYucGFyZW50CT0gJmRldi0+ZGV2OwogCXN0cmxjcHkoc2VyaW8tPm5hbWUsICJSaXNjUEMgUFMvMiBrYmQgcG9ydCIsIHNpemVvZihzZXJpby0+bmFtZSkpOwogCXN0cmxjcHkoc2VyaW8tPnBoeXMsICJycGNrYmQvc2VyaW8wIiwgc2l6ZW9mKHNlcmlvLT5waHlzKSk7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBzZXJpbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBzZXJpbyk7CiAJc2VyaW9fcmVnaXN0ZXJfcG9ydChzZXJpbyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IHJwY2tiZF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgcnBja2JkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHNlcmlvICpzZXJpbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzZXJpbyAqc2VyaW8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXNlcmlvX3VucmVnaXN0ZXJfcG9ydChzZXJpbyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBycGNrYmRfZHJpdmVyID0gewotCS5uYW1lCQk9ICJrYXJ0IiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJwY2tiZF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHJwY2tiZF9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHJwY2tiZF9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJrYXJ0IiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcnBja2JkX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZycGNrYmRfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZycGNrYmRfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHJwY2tiZF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnJwY2tiZF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZycGNrYmRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQocnBja2JkX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jb3JnaV90cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jb3JnaV90cy5jCmluZGV4IDE1ZTg4ZWUuLjEwNDI5ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY29yZ2lfdHMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2NvcmdpX3RzLmMKQEAgLTIzMSw5ICsyMzEsOSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGNvcmdpdHNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgY29yZ2l0c19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBjb3JnaV90cyAqY29yZ2lfdHMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgY29yZ2lfdHMgKmNvcmdpX3RzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChjb3JnaV90cy0+cGVuZG93bikgewogCQlkZWxfdGltZXJfc3luYygmY29yZ2lfdHMtPnRpbWVyKTsKQEAgLTI0OCw5ICsyNDgsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNvcmdpdHNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgY29yZ2l0c19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBjb3JnaV90cyAqY29yZ2lfdHMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgY29yZ2lfdHMgKmNvcmdpX3RzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWNvcmdpX3NzcF9hZHM3ODQ2X3B1dGdldCgoNHUgPDwgQURTQ1RSTF9BRFJfU0gpIHwgQURTQ1RSTF9TVFMpOwogCS8qIEVuYWJsZSBGYWxsaW5nIEVkZ2UgKi8KQEAgLTI2NCwxMCArMjY0LDkgQEAKICNkZWZpbmUgY29yZ2l0c19yZXN1bWUJCU5VTEwKICNlbmRpZgogCi1zdGF0aWMgaW50IF9faW5pdCBjb3JnaXRzX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IGNvcmdpdHNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgY29yZ2lfdHMgKmNvcmdpX3RzOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CiAJaW50IGVyciA9IC1FTk9NRU07CiAKQEAgLTI3Niw5ICsyNzUsOSBAQAogCWlmICghY29yZ2lfdHMgfHwgIWlucHV0X2RldikKIAkJZ290byBmYWlsOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgY29yZ2lfdHMpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNvcmdpX3RzKTsKIAotCWNvcmdpX3RzLT5tYWNoaW5mbyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwljb3JnaV90cy0+bWFjaGluZm8gPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAljb3JnaV90cy0+aXJxX2dwaW8gPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCiAJaWYgKGNvcmdpX3RzLT5pcnFfZ3BpbyA8IDApIHsKQEAgLTI5OCw3ICsyOTcsNyBAQAogCWlucHV0X2Rldi0+aWQudmVuZG9yID0gMHgwMDAxOwogCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IDB4MDAwMjsKIAlpbnB1dF9kZXYtPmlkLnZlcnNpb24gPSAweDAxMDA7Ci0JaW5wdXRfZGV2LT5jZGV2LmRldiA9IGRldjsKKwlpbnB1dF9kZXYtPmNkZXYuZGV2ID0gJnBkZXYtPmRldjsKIAlpbnB1dF9kZXYtPnByaXZhdGUgPSBjb3JnaV90czsKIAogCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpOwpAQCAtMzM5LDkgKzMzOCw5IEBACiAKIH0KIAotc3RhdGljIGludCBjb3JnaXRzX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGNvcmdpdHNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IGNvcmdpX3RzICpjb3JnaV90cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBjb3JnaV90cyAqY29yZ2lfdHMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCWZyZWVfaXJxKGNvcmdpX3RzLT5pcnFfZ3BpbywgTlVMTCk7CiAJZGVsX3RpbWVyX3N5bmMoJmNvcmdpX3RzLT50aW1lcik7CkBAIC0zNTEsMjMgKzM1MCwyNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgY29yZ2l0c19kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImNvcmdpLXRzIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNvcmdpdHNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBjb3JnaXRzX3Byb2JlLAogCS5yZW1vdmUJCT0gY29yZ2l0c19yZW1vdmUsCiAJLnN1c3BlbmQJPSBjb3JnaXRzX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBjb3JnaXRzX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiY29yZ2ktdHMiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBjb3JnaXRzX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZjb3JnaXRzX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmY29yZ2l0c19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY29yZ2l0c19leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmNvcmdpdHNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmY29yZ2l0c19kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChjb3JnaXRzX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvbWNwLXNhMTF4MC5jIGIvZHJpdmVycy9tZmQvbWNwLXNhMTF4MC5jCmluZGV4IDdkYWEwZWQuLjFlYWI3Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL21jcC1zYTExeDAuYworKysgYi9kcml2ZXJzL21mZC9tY3Atc2ExMXgwLmMKQEAgLTEzOCw5ICsxMzgsOCBAQAogCS5kaXNhYmxlCQk9IG1jcF9zYTExeDBfZGlzYWJsZSwKIH07CiAKLXN0YXRpYyBpbnQgbWNwX3NhMTF4MF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG1jcF9zYTExeDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IG1jcF9wbGF0X2RhdGEgKmRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgbWNwICptY3A7CiAJaW50IHJldDsKQEAgLTE2NSw3ICsxNjQsNyBAQAogCW1jcC0+ZG1hX3RlbGNvX3JkCT0gRE1BX1NlcjRNQ1AxUmQ7CiAJbWNwLT5kbWFfdGVsY29fd3IJPSBETUFfU2VyNE1DUDFXcjsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIG1jcCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWNwKTsKIAogCWlmIChtYWNoaW5lX2lzX2Fzc2FiZXQoKSkgewogCQlBU1NBQkVUX0JDUl9zZXQoQVNTQUJFVF9CQ1JfQ09ERUNfUlNUKTsKQEAgLTIwMiwyNiArMjAxLDI2IEBACiAKICByZWxlYXNlOgogCXJlbGVhc2VfbWVtX3JlZ2lvbigweDgwMDYwMDAwLCAweDYwKTsKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogIG91dDoKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG1jcF9zYTExeDBfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgbWNwX3NhMTF4MF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBtY3AgKm1jcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtY3AgKm1jcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCW1jcF9ob3N0X3VucmVnaXN0ZXIobWNwKTsKIAlyZWxlYXNlX21lbV9yZWdpb24oMHg4MDA2MDAwMCwgMHg2MCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtY3Bfc2ExMXgwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IG1jcF9zYTExeDBfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgbWNwICptY3AgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbWNwICptY3AgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJcHJpdihtY3ApLT5tY2NyMCA9IFNlcjRNQ0NSMDsKIAlwcml2KG1jcCktPm1jY3IxID0gU2VyNE1DQ1IxOwpAQCAtMjMwLDkgKzIyOSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWNwX3NhMTF4MF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBtY3Bfc2ExMXgwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1jcCAqbWNwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1jcCAqbWNwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCVNlcjRNQ0NSMSA9IHByaXYobWNwKS0+bWNjcjE7CiAJU2VyNE1DQ1IwID0gcHJpdihtY3ApLT5tY2NyMDsKQEAgLTI0MywxMyArMjQyLDE0IEBACiAvKgogICogVGhlIGRyaXZlciBmb3IgdGhlIFNBMTF4MCBNQ1AgcG9ydC4KICAqLwotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG1jcF9zYTExeDBfZHJpdmVyID0gewotCS5uYW1lCQk9ICJzYTExeDAtbWNwIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1jcF9zYTExeDBfZHJpdmVyID0gewogCS5wcm9iZQkJPSBtY3Bfc2ExMXgwX3Byb2JlLAogCS5yZW1vdmUJCT0gbWNwX3NhMTF4MF9yZW1vdmUsCiAJLnN1c3BlbmQJPSBtY3Bfc2ExMXgwX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBtY3Bfc2ExMXgwX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAic2ExMXgwLW1jcCIsCisJfSwKIH07CiAKIC8qCkBAIC0yNTcsMTIgKzI1NywxMiBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBtY3Bfc2ExMXgwX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZtY3Bfc2ExMXgwX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWNwX3NhMTF4MF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbWNwX3NhMTF4MF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm1jcF9zYTExeDBfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWNwX3NhMTF4MF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChtY3Bfc2ExMXgwX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2hkcHVmdHJzL2hkcHVfY3B1c3RhdGUuYyBiL2RyaXZlcnMvbWlzYy9oZHB1ZnRycy9oZHB1X2NwdXN0YXRlLmMKaW5kZXggYmMyYjcyYi4uMTFhODAxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2hkcHVmdHJzL2hkcHVfY3B1c3RhdGUuYworKysgYi9kcml2ZXJzL21pc2MvaGRwdWZ0cnMvaGRwdV9jcHVzdGF0ZS5jCkBAIC0yNiw4ICsyNiw4IEBACiAKICNkZWZpbmUgU0tZX0NQVVNUQVRFX1ZFUlNJT04JCSIxLjEiCiAKLXN0YXRpYyBpbnQgaGRwdV9jcHVzdGF0ZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZGV2KTsKLXN0YXRpYyBpbnQgaGRwdV9jcHVzdGF0ZV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGRldik7CitzdGF0aWMgaW50IGhkcHVfY3B1c3RhdGVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CitzdGF0aWMgaW50IGhkcHVfY3B1c3RhdGVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogCiBzdHJ1Y3QgY3B1c3RhdGVfdCBjcHVzdGF0ZTsKIApAQCAtMTU4LDExICsxNTgsMTIgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgaGRwdV9jcHVzdGF0ZV9kcml2ZXIgPSB7Ci0JLm5hbWUgPSBIRFBVX0NQVVNUQVRFX05BTUUsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGhkcHVfY3B1c3RhdGVfZHJpdmVyID0gewogCS5wcm9iZSA9IGhkcHVfY3B1c3RhdGVfcHJvYmUsCiAJLnJlbW92ZSA9IGhkcHVfY3B1c3RhdGVfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gSERQVV9DUFVTVEFURV9OQU1FLAorCX0sCiB9OwogCiAvKgpAQCAtMTg3LDkgKzE4OCw4IEBACiAJJmNwdXN0YXRlX2ZvcHMKIH07CiAKLXN0YXRpYyBpbnQgaGRwdV9jcHVzdGF0ZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZGV2KQorc3RhdGljIGludCBoZHB1X2NwdXN0YXRlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfZGU7CiAJaW50IHJldDsKQEAgLTIxNyw3ICsyMTcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGhkcHVfY3B1c3RhdGVfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRkZXYpCitzdGF0aWMgaW50IGhkcHVfY3B1c3RhdGVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAKIAljcHVzdGF0ZS5zZXRfYWRkciA9IE5VTEw7CkBAIC0yMzIsMTMgKzIzMiwxMyBAQAogc3RhdGljIGludCBfX2luaXQgY3B1c3RhdGVfaW5pdCh2b2lkKQogewogCWludCByYzsKLQlyYyA9IGRyaXZlcl9yZWdpc3RlcigmaGRwdV9jcHVzdGF0ZV9kcml2ZXIpOworCXJjID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZoZHB1X2NwdXN0YXRlX2RyaXZlcik7CiAJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY3B1c3RhdGVfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZoZHB1X2NwdXN0YXRlX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmhkcHVfY3B1c3RhdGVfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoY3B1c3RhdGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaGRwdWZ0cnMvaGRwdV9uZXh1cy5jIGIvZHJpdmVycy9taXNjL2hkcHVmdHJzL2hkcHVfbmV4dXMuYwppbmRleCA0YmI0NjE3Li5lYTlkNWYyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2hkcHVmdHJzL2hkcHVfbmV4dXMuYworKysgYi9kcml2ZXJzL21pc2MvaGRwdWZ0cnMvaGRwdV9uZXh1cy5jCkBAIC0yMiwxOSArMjIsMjAgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCi1zdGF0aWMgaW50IGhkcHVfbmV4dXNfcHJvYmUoc3RydWN0IGRldmljZSAqZGRldik7Ci1zdGF0aWMgaW50IGhkcHVfbmV4dXNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRkZXYpOworc3RhdGljIGludCBoZHB1X25leHVzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworc3RhdGljIGludCBoZHB1X25leHVzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKIAogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqaGRwdV9zbG90X2lkOwogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqaGRwdV9jaGFzc2lzX2lkOwogc3RhdGljIGludCBzbG90X2lkID0gLTE7CiBzdGF0aWMgaW50IGNoYXNzaXNfaWQgPSAtMTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGhkcHVfbmV4dXNfZHJpdmVyID0gewotCS5uYW1lID0gSERQVV9ORVhVU19OQU1FLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBoZHB1X25leHVzX2RyaXZlciA9IHsKIAkucHJvYmUgPSBoZHB1X25leHVzX3Byb2JlLAogCS5yZW1vdmUgPSBoZHB1X25leHVzX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9IEhEUFVfTkVYVVNfTkFNRSwKKwl9LAogfTsKIAogaW50IGhkcHVfc2xvdF9pZF9yZWFkKGNoYXIgKmJ1ZmZlciwgY2hhciAqKmJ1ZmZlcl9sb2NhdGlvbiwgb2ZmX3Qgb2Zmc2V0LApAQCAtNTUsOSArNTYsOCBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgIiVkXG4iLCBjaGFzc2lzX2lkKTsKIH0KIAotc3RhdGljIGludCBoZHB1X25leHVzX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRkZXYpCitzdGF0aWMgaW50IGhkcHVfbmV4dXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKQEAgLTgwLDcgKzgwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBoZHB1X25leHVzX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZGV2KQorc3RhdGljIGludCBoZHB1X25leHVzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXNsb3RfaWQgPSAtMTsKIAljaGFzc2lzX2lkID0gLTE7CkBAIC05NCwxMyArOTQsMTMgQEAKIHN0YXRpYyBpbnQgX19pbml0IG5leHVzX2luaXQodm9pZCkKIHsKIAlpbnQgcmM7Ci0JcmMgPSBkcml2ZXJfcmVnaXN0ZXIoJmhkcHVfbmV4dXNfZHJpdmVyKTsKKwlyYyA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaGRwdV9uZXh1c19kcml2ZXIpOwogCXJldHVybiByYzsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG5leHVzX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmaGRwdV9uZXh1c19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZoZHB1X25leHVzX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KG5leHVzX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvcHhhbWNpLmMgYi9kcml2ZXJzL21tYy9weGFtY2kuYwppbmRleCBmMzFlMjQ3Li5lZThmOGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9weGFtY2kuYworKysgYi9kcml2ZXJzL21tYy9weGFtY2kuYwpAQCAtNDI4LDkgKzQyOCw4IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IHB4YW1jaV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHB4YW1jaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsKIAlzdHJ1Y3QgcHhhbWNpX2hvc3QgKmhvc3QgPSBOVUxMOwogCXN0cnVjdCByZXNvdXJjZSAqcjsKQEAgLTQ0NSw3ICs0NDQsNyBAQAogCWlmICghcikKIAkJcmV0dXJuIC1FQlVTWTsKIAotCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZihzdHJ1Y3QgcHhhbWNpX2hvc3QpLCBkZXYpOworCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZihzdHJ1Y3QgcHhhbWNpX2hvc3QpLCAmcGRldi0+ZGV2KTsKIAlpZiAoIW1tYykgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKQEAgLTQ3NCw3ICs0NzMsNyBAQAogCQkJIGhvc3QtPnBkYXRhLT5vY3JfbWFzayA6CiAJCQkgTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0OwogCi0JaG9zdC0+c2dfY3B1ID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgUEFHRV9TSVpFLCAmaG9zdC0+c2dfZG1hLCBHRlBfS0VSTkVMKTsKKwlob3N0LT5zZ19jcHUgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwgUEFHRV9TSVpFLCAmaG9zdC0+c2dfZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWhvc3QtPnNnX2NwdSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKQEAgLTUxMSwxMCArNTEwLDEwIEBACiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBtbWMpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1tYyk7CiAKIAlpZiAoaG9zdC0+cGRhdGEgJiYgaG9zdC0+cGRhdGEtPmluaXQpCi0JCWhvc3QtPnBkYXRhLT5pbml0KGRldiwgcHhhbWNpX2RldGVjdF9pcnEsIG1tYyk7CisJCWhvc3QtPnBkYXRhLT5pbml0KCZwZGV2LT5kZXYsIHB4YW1jaV9kZXRlY3RfaXJxLCBtbWMpOwogCiAJbW1jX2FkZF9ob3N0KG1tYyk7CiAKQEAgLTUyNyw3ICs1MjYsNyBAQAogCQlpZiAoaG9zdC0+YmFzZSkKIAkJCWlvdW5tYXAoaG9zdC0+YmFzZSk7CiAJCWlmIChob3N0LT5zZ19jcHUpCi0JCQlkbWFfZnJlZV9jb2hlcmVudChkZXYsIFBBR0VfU0laRSwgaG9zdC0+c2dfY3B1LCBob3N0LT5zZ19kbWEpOworCQkJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgUEFHRV9TSVpFLCBob3N0LT5zZ19jcHUsIGhvc3QtPnNnX2RtYSk7CiAJfQogCWlmIChtbWMpCiAJCW1tY19mcmVlX2hvc3QobW1jKTsKQEAgLTUzNSwxNyArNTM0LDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBweGFtY2lfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcHhhbWNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJaWYgKG1tYykgewogCQlzdHJ1Y3QgcHhhbWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCiAJCWlmIChob3N0LT5wZGF0YSAmJiBob3N0LT5wZGF0YS0+ZXhpdCkKLQkJCWhvc3QtPnBkYXRhLT5leGl0KGRldiwgbW1jKTsKKwkJCWhvc3QtPnBkYXRhLT5leGl0KCZwZGV2LT5kZXYsIG1tYyk7CiAKIAkJbW1jX3JlbW92ZV9ob3N0KG1tYyk7CiAKQEAgLTU2MCw3ICs1NTksNyBAQAogCQlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOwogCQlweGFfZnJlZV9kbWEoaG9zdC0+ZG1hKTsKIAkJaW91bm1hcChob3N0LT5iYXNlKTsKLQkJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBQQUdFX1NJWkUsIGhvc3QtPnNnX2NwdSwgaG9zdC0+c2dfZG1hKTsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgUEFHRV9TSVpFLCBob3N0LT5zZ19jcHUsIGhvc3QtPnNnX2RtYSk7CiAKIAkJcmVsZWFzZV9yZXNvdXJjZShob3N0LT5yZXMpOwogCkBAIC01NzAsOSArNTY5LDkgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBweGFtY2lfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhbWNpX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IG1tY19ob3N0ICptbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAobW1jKQpAQCAtNTgxLDkgKzU4MCw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBweGFtY2lfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcHhhbWNpX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1tY19ob3N0ICptbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAobW1jKQpAQCAtNTk2LDIzICs1OTUsMjQgQEAKICNkZWZpbmUgcHhhbWNpX3Jlc3VtZQlOVUxMCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHB4YW1jaV9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gRFJJVkVSX05BTUUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBweGFtY2lfZHJpdmVyID0gewogCS5wcm9iZQkJPSBweGFtY2lfcHJvYmUsCiAJLnJlbW92ZQkJPSBweGFtY2lfcmVtb3ZlLAogCS5zdXNwZW5kCT0gcHhhbWNpX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBweGFtY2lfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9IERSSVZFUl9OQU1FLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBweGFtY2lfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnB4YW1jaV9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnB4YW1jaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcHhhbWNpX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmcHhhbWNpX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnB4YW1jaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChweGFtY2lfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy93YnNkLmMgYi9kcml2ZXJzL21tYy93YnNkLmMKaW5kZXggZTk1NGI4My4uYzdlYjdjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvd2JzZC5jCisrKyBiL2RyaXZlcnMvbW1jL3dic2QuYwpAQCAtNDIsNyArNDIsNyBAQAogI2luY2x1ZGUgIndic2QuaCIKIAogI2RlZmluZSBEUklWRVJfTkFNRSAid2JzZCIKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuNCIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuNSIKIAogI2lmZGVmIENPTkZJR19NTUNfREVCVUcKICNkZWZpbmUgREJHKHguLi4pIFwKQEAgLTE5MzIsMTQgKzE5MzIsMTQgQEAKICAqIE5vbi1QblAKICAqLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB3YnNkX3Byb2JlKHN0cnVjdCBkZXZpY2UqIGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHdic2RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSogZGV2KQogewotCXJldHVybiB3YnNkX2luaXQoZGV2LCBpbywgaXJxLCBkbWEsIDApOworCXJldHVybiB3YnNkX2luaXQoJmRldi0+ZGV2LCBpbywgaXJxLCBkbWEsIDApOwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCB3YnNkX3JlbW92ZShzdHJ1Y3QgZGV2aWNlKiBkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB3YnNkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlKiBkZXYpCiB7Ci0Jd2JzZF9zaHV0ZG93bihkZXYsIDApOworCXdic2Rfc2h1dGRvd24oJmRldi0+ZGV2LCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTk4Myw5ICsxOTgzLDkgQEAKIAogI2lmZGVmIENPTkZJR19QTQogCi1zdGF0aWMgaW50IHdic2Rfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgd2JzZF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCB3YnNkX2hvc3QgKmhvc3Q7CiAJaW50IHJldDsKIApAQCAtMjAwNSw5ICsyMDA1LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3YnNkX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHdic2RfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0OwogCiAJaWYgKCFtbWMpCkBAIC0yMDM4LDE0ICsyMDM4LDE1IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp3YnNkX2RldmljZTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHdic2RfZHJpdmVyID0gewotCS5uYW1lCQk9IERSSVZFUl9OQU1FLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgd2JzZF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHdic2RfcHJvYmUsCi0JLnJlbW92ZQkJPSB3YnNkX3JlbW92ZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdic2RfcmVtb3ZlKSwKIAogCS5zdXNwZW5kCT0gd2JzZF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gd2JzZF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJfSwKIH07CiAKICNpZmRlZiBDT05GSUdfUE5QCkBAIC0yMDU0LDcgKzIwNTUsNyBAQAogCS5uYW1lCQk9IERSSVZFUl9OQU1FLAogCS5pZF90YWJsZQk9IHBucF9kZXZfdGFibGUsCiAJLnByb2JlCQk9IHdic2RfcG5wX3Byb2JlLAotCS5yZW1vdmUJCT0gd2JzZF9wbnBfcmVtb3ZlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod2JzZF9wbnBfcmVtb3ZlKSwKIH07CiAKICNlbmRpZiAvKiBDT05GSUdfUE5QICovCkBAIC0yMDg1LDcgKzIwODYsNyBAQAogCiAJaWYgKG5vcG5wKQogCXsKLQkJcmVzdWx0ID0gZHJpdmVyX3JlZ2lzdGVyKCZ3YnNkX2RyaXZlcik7CisJCXJlc3VsdCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmd2JzZF9kcml2ZXIpOwogCQlpZiAocmVzdWx0IDwgMCkKIAkJCXJldHVybiByZXN1bHQ7CiAKQEAgLTIxMTEsNyArMjExMiw3IEBACiAJewogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih3YnNkX2RldmljZSk7CiAKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJndic2RfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJndic2RfZHJpdmVyKTsKIAl9CiAKIAlEQkcoInVubG9hZGVkXG4iKTsKQEAgLTIxMjcsNiArMjEyOCw3IEBACiBtb2R1bGVfcGFyYW0oZG1hLCBpbnQsIDA0NDQpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJQaWVycmUgT3NzbWFuIDxkcnpldXNAZHJ6ZXVzLmN4PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJXaW5ib25kIFc4M0w1MXhEIFNEL01NQyBjYXJkIGludGVyZmFjZSBkcml2ZXIiKTsKIE1PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9iYXN0LWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL2Jhc3QtZmxhc2guYwppbmRleCBiNzg1OGViLi41MWY5NjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2Jhc3QtZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2Jhc3QtZmxhc2guYwpAQCAtNjMsMTEgKzYzLDYgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKnByb2Jlc1tdID0geyAiUmVkQm9vdCIsICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKIAotc3RhdGljIHN0cnVjdCBiYXN0X2ZsYXNoX2luZm8gKnRvX2Jhc3RfaW5mbyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIChzdHJ1Y3QgYmFzdF9mbGFzaF9pbmZvICopZGV2X2dldF9kcnZkYXRhKGRldik7Ci19Ci0KIHN0YXRpYyB2b2lkIGJhc3RfZmxhc2hfc2V0cncoaW50IHRvKQogewogCXVuc2lnbmVkIGludCB2YWw7CkBAIC04NywxMSArODIsMTEgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgYmFzdF9mbGFzaF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBiYXN0X2ZsYXNoX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBiYXN0X2ZsYXNoX2luZm8gKmluZm8gPSB0b19iYXN0X2luZm8oZGV2KTsKKwlzdHJ1Y3QgYmFzdF9mbGFzaF9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCWlmIChpbmZvID09IE5VTEwpCiAJCXJldHVybiAwOwpAQCAtMTE2LDkgKzExMSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYmFzdF9mbGFzaF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGJhc3RfZmxhc2hfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGJhc3RfZmxhc2hfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgZXJyID0gMDsKQEAgLTEzMSwxMyArMTI1LDEzIEBACiAJfQogCiAJbWVtemVybyhpbmZvLCBzaXplb2YoKmluZm8pKTsKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKIAogCXJlcyA9IHBkZXYtPnJlc291cmNlOyAgLyogYXNzdW1lIHRoYXQgdGhlIGZsYXNoIGhhcyBvbmUgcmVzb3VyY2UgKi8KIAogCWluZm8tPm1hcC5waHlzID0gcmVzLT5zdGFydDsKIAlpbmZvLT5tYXAuc2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7Ci0JaW5mby0+bWFwLm5hbWUgPSBkZXYtPmJ1c19pZDsKKwlpbmZvLT5tYXAubmFtZSA9IHBkZXYtPmRldi5idXNfaWQ7CQogCWluZm8tPm1hcC5iYW5rd2lkdGggPSAyOwogCiAJaWYgKGluZm8tPm1hcC5zaXplID4gQVJFQV9NQVhTSVpFKQpAQCAtMTk5LDI3ICsxOTMsMjggQEAKIAkvKiBmYWxsIHRocm91Z2ggdG8gZXhpdCBlcnJvciAqLwogCiAgZXhpdF9lcnJvcjoKLQliYXN0X2ZsYXNoX3JlbW92ZShkZXYpOworCWJhc3RfZmxhc2hfcmVtb3ZlKHBkZXYpOwogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBiYXN0X2ZsYXNoX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiYmFzdC1ub3IiLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJhc3RfZmxhc2hfZHJpdmVyID0gewogCS5wcm9iZQkJPSBiYXN0X2ZsYXNoX3Byb2JlLAogCS5yZW1vdmUJCT0gYmFzdF9mbGFzaF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImJhc3Qtbm9yIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGJhc3RfZmxhc2hfaW5pdCh2b2lkKQogewogCXByaW50aygiQkFTVCBOT1ItRmxhc2ggRHJpdmVyLCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3NcbiIpOwotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmJhc3RfZmxhc2hfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZiYXN0X2ZsYXNoX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBiYXN0X2ZsYXNoX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYmFzdF9mbGFzaF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZiYXN0X2ZsYXNoX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGJhc3RfZmxhc2hfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2ludGVncmF0b3ItZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvaW50ZWdyYXRvci1mbGFzaC5jCmluZGV4IGZlNzM4ZmQ4Li5hM2JhNTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2ludGVncmF0b3ItZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2ludGVncmF0b3ItZmxhc2guYwpAQCAtNjcsOSArNjcsOCBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqcHJvYmVzW10gPSB7ICJjbWRsaW5lcGFydCIsICJSZWRCb290IiwgImFmcyIsIE5VTEwgfTsKIAotc3RhdGljIGludCBhcm1mbGFzaF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBhcm1mbGFzaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOwogCXN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhICpwbGF0ID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGRldi0+cmVzb3VyY2U7CiAJdW5zaWduZWQgaW50IHNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOwpAQCAtMTM4LDcgKzEzNyw3IEBACiAJfQogCiAJaWYgKGVyciA9PSAwKQotCQlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBpbmZvKTsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKIAogCS8qCiAJICogSWYgd2UgZ290IGFuIGVycm9yLCBmcmVlIGFsbCByZXNvdXJjZXMuCkBAIC0xNjMsMTIgKzE2MiwxMSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgYXJtZmxhc2hfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IGFybWZsYXNoX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOwotCXN0cnVjdCBhcm1mbGFzaF9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7CisJc3RydWN0IGFybWZsYXNoX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCWlmIChpbmZvKSB7CiAJCWlmIChpbmZvLT5tdGQpIHsKQEAgLTE5MCwyMSArMTg4LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhcm1mbGFzaF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImFybWZsYXNoIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFybWZsYXNoX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gYXJtZmxhc2hfcHJvYmUsCiAJLnJlbW92ZQkJPSBhcm1mbGFzaF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImFybWZsYXNoIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYXJtZmxhc2hfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmFybWZsYXNoX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXJtZmxhc2hfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFybWZsYXNoX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYXJtZmxhc2hfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXJtZmxhc2hfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoYXJtZmxhc2hfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2l4cDIwMDAuYyBiL2RyaXZlcnMvbXRkL21hcHMvaXhwMjAwMC5jCmluZGV4IDY0MWViMmIuLmZjN2E3OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvaXhwMjAwMC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvaXhwMjAwMC5jCkBAIC0xMTEsMTMgKzExMSwxMiBAQAogfQogCiAKLXN0YXRpYyBpbnQgaXhwMjAwMF9mbGFzaF9yZW1vdmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgaXhwMjAwMF9mbGFzaF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShfZGV2KTsKIAlzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0Jc3RydWN0IGl4cDIwMDBfZmxhc2hfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOworCXN0cnVjdCBpeHAyMDAwX2ZsYXNoX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCWlmKCFpbmZvKQogCQlyZXR1cm4gMDsKQEAgLTE0MywxMCArMTQyLDkgQEAKIH0KIAogCi1zdGF0aWMgaW50IGl4cDIwMDBfZmxhc2hfcHJvYmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgaXhwMjAwMF9mbGFzaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RhdGljIGNvbnN0IGNoYXIgKnByb2Jlc1tdID0geyAiUmVkQm9vdCIsICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CiAJc3RydWN0IGl4cDIwMDBfZmxhc2hfZGF0YSAqaXhwX2RhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhICpwbGF0OwogCXN0cnVjdCBpeHAyMDAwX2ZsYXNoX2luZm8gKmluZm87CkBAIC0xNzcsNyArMTc1LDcgQEAKIAl9CiAJbWVtemVybyhpbmZvLCBzaXplb2Yoc3RydWN0IGl4cDIwMDBfZmxhc2hfaW5mbykpOwogCi0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKIAogCS8qCiAJICogVGVsbCB0aGUgTVREIGxheWVyIHdlJ3JlIG5vdCAxOjEgbWFwcGVkIHNvIHRoYXQgaXQgZG9lcwpAQCAtMjQ4LDI1ICsyNDYsMjYgQEAKIAlyZXR1cm4gMDsKIAogRXJyb3I6Ci0JaXhwMjAwMF9mbGFzaF9yZW1vdmUoX2Rldik7CisJaXhwMjAwMF9mbGFzaF9yZW1vdmUoZGV2KTsKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgaXhwMjAwMF9mbGFzaF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gIklYUDIwMDAtRmxhc2giLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXhwMjAwMF9mbGFzaF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9ICZpeHAyMDAwX2ZsYXNoX3Byb2JlLAogCS5yZW1vdmUJCT0gJml4cDIwMDBfZmxhc2hfcmVtb3ZlCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIklYUDIwMDAtRmxhc2giLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpeHAyMDAwX2ZsYXNoX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZpeHAyMDAwX2ZsYXNoX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaXhwMjAwMF9mbGFzaF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXhwMjAwMF9mbGFzaF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJml4cDIwMDBfZmxhc2hfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaXhwMjAwMF9mbGFzaF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChpeHAyMDAwX2ZsYXNoX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9peHA0eHguYyBiL2RyaXZlcnMvbXRkL21hcHMvaXhwNHh4LmMKaW5kZXggNTZiM2EzNTUuLmE1OWY4MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvaXhwNHh4LmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9peHA0eHguYwpAQCAtOTksMTMgKzk5LDEyIEBACiAKIHN0YXRpYyBjb25zdCBjaGFyICpwcm9iZXNbXSA9IHsgIlJlZEJvb3QiLCAiY21kbGluZXBhcnQiLCBOVUxMIH07CiAKLXN0YXRpYyBpbnQgaXhwNHh4X2ZsYXNoX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBpeHA0eHhfZmxhc2hfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CiAJc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgKnBsYXQgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXN0cnVjdCBpeHA0eHhfZmxhc2hfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOworCXN0cnVjdCBpeHA0eHhfZmxhc2hfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAJaWYoIWluZm8pCiAJCXJldHVybiAwOwpAQCAtMTMwLDkgKzEyOSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaXhwNHh4X2ZsYXNoX3Byb2JlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IGl4cDR4eF9mbGFzaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOwogCXN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhICpwbGF0ID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgaXhwNHh4X2ZsYXNoX2luZm8gKmluZm87CiAJaW50IGVyciA9IC0xOwpAQCAtMTUzLDcgKzE1MSw3IEBACiAJfQogCW1lbXplcm8oaW5mbywgc2l6ZW9mKHN0cnVjdCBpeHA0eHhfZmxhc2hfaW5mbykpOwogCi0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKIAogCS8qCiAJICogVGVsbCB0aGUgTVREIGxheWVyIHdlJ3JlIG5vdCAxOjEgbWFwcGVkIHNvIHRoYXQgaXQgZG9lcwpAQCAtMjE0LDI1ICsyMTIsMjYgQEAKIAlyZXR1cm4gMDsKIAogRXJyb3I6Ci0JaXhwNHh4X2ZsYXNoX3JlbW92ZShfZGV2KTsKKwlpeHA0eHhfZmxhc2hfcmVtb3ZlKGRldik7CiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGl4cDR4eF9mbGFzaF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gIklYUDRYWC1GbGFzaCIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpeHA0eHhfZmxhc2hfZHJpdmVyID0gewogCS5wcm9iZQkJPSBpeHA0eHhfZmxhc2hfcHJvYmUsCiAJLnJlbW92ZQkJPSBpeHA0eHhfZmxhc2hfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJJWFA0WFgtRmxhc2giLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpeHA0eHhfZmxhc2hfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJml4cDR4eF9mbGFzaF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJml4cDR4eF9mbGFzaF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXhwNHh4X2ZsYXNoX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmaXhwNHh4X2ZsYXNoX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJml4cDR4eF9mbGFzaF9kcml2ZXIpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvb21hcF9ub3IuYyBiL2RyaXZlcnMvbXRkL21hcHMvb21hcF9ub3IuYwppbmRleCBmZDNiNGE1Li40MThhZmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL29tYXBfbm9yLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9vbWFwX25vci5jCkBAIC03MCwxMSArNzAsMTAgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IG9tYXBmbGFzaF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBvbWFwZmxhc2hfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBvbWFwZmxhc2hfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHJlc291cmNlICpyZXMgPSBwZGV2LT5yZXNvdXJjZTsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOwpAQCAtMTE5LDcgKzExOCw3IEBACiAjZW5kaWYKIAkJYWRkX210ZF9kZXZpY2UoaW5mby0+bXRkKTsKIAotCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKIAogCXJldHVybiAwOwogCkBAIC0xMzMsMTIgKzEzMiwxMSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IG9tYXBmbGFzaF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgb21hcGZsYXNoX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3Qgb21hcGZsYXNoX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJc3RydWN0IG9tYXBmbGFzaF9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKIAlpZiAoaW5mbykgewogCQlpZiAoaW5mby0+cGFydHMpIHsKQEAgLTE1NSwyMSArMTUzLDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBvbWFwZmxhc2hfZHJpdmVyID0gewotCS5uYW1lCT0gIm9tYXBmbGFzaCIsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXBmbGFzaF9kcml2ZXIgPSB7CiAJLnByb2JlCT0gb21hcGZsYXNoX3Byb2JlLAogCS5yZW1vdmUJPSBfX2RldmV4aXRfcChvbWFwZmxhc2hfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJvbWFwZmxhc2giLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwZmxhc2hfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJm9tYXBmbGFzaF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9tYXBmbGFzaF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgb21hcGZsYXNoX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmb21hcGZsYXNoX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9tYXBmbGFzaF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChvbWFwZmxhc2hfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3BsYXQtcmFtLmMgYi9kcml2ZXJzL210ZC9tYXBzL3BsYXQtcmFtLmMKaW5kZXggYTAyZWVkOS4uNWQzYzc1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9wbGF0LXJhbS5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcGxhdC1yYW0uYwpAQCAtNTYsOSArNTYsOSBAQAogICogZGV2aWNlIHByaXZhdGUgZGF0YSB0byBzdHJ1Y3QgcGxhdHJhbV9pbmZvIGNvbnZlcnNpb24KICovCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBsYXRyYW1faW5mbyAqdG9fcGxhdHJhbV9pbmZvKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBsYXRyYW1faW5mbyAqdG9fcGxhdHJhbV9pbmZvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gKHN0cnVjdCBwbGF0cmFtX2luZm8gKilkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlyZXR1cm4gKHN0cnVjdCBwbGF0cmFtX2luZm8gKilwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogfQogCiAvKiBwbGF0cmFtX3NldHJ3CkBAIC04MywxMyArODMsMTMgQEAKICAqIGNhbGxlZCB0byByZW1vdmUgdGhlIGRldmljZSBmcm9tIHRoZSBkcml2ZXIncyBjb250cm9sCiAqLwogCi1zdGF0aWMgaW50IHBsYXRyYW1fcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcGxhdHJhbV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdHJhbV9pbmZvICppbmZvID0gdG9fcGxhdHJhbV9pbmZvKGRldik7CisJc3RydWN0IHBsYXRyYW1faW5mbyAqaW5mbyA9IHRvX3BsYXRyYW1faW5mbyhwZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCi0JZGV2X2RiZyhkZXYsICJyZW1vdmluZyBkZXZpY2VcbiIpOworCWRldl9kYmcoJnBkZXYtPmRldiwgInJlbW92aW5nIGRldmljZVxuIik7CiAKIAlpZiAoaW5mbyA9PSBOVUxMKQogCQlyZXR1cm4gMDsKQEAgLTEzMCw2MSArMTMwLDYwIEBACiAgKiBkcml2ZXIgaXMgZm91bmQuCiAqLwogCi1zdGF0aWMgaW50IHBsYXRyYW1fcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBwbGF0cmFtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcGxhdGRhdGFfbXRkX3JhbQkqcGRhdGE7CiAJc3RydWN0IHBsYXRyYW1faW5mbyAqaW5mbzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgZXJyID0gMDsKIAotCWRldl9kYmcoZGV2LCAicHJvYmUgZW50ZXJlZFxuIik7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAicHJvYmUgZW50ZXJlZFxuIik7CiAKLQlpZiAoZGV2LT5wbGF0Zm9ybV9kYXRhID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJubyBwbGF0Zm9ybSBkYXRhIHN1cHBsaWVkXG4iKTsKKwlpZiAocGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhIHN1cHBsaWVkXG4iKTsKIAkJZXJyID0gLUVOT0VOVDsKIAkJZ290byBleGl0X2Vycm9yOwogCX0KIAotCXBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAlpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoaW5mbyA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAibm8gbWVtb3J5IGZvciBmbGFzaCBpbmZvXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gbWVtb3J5IGZvciBmbGFzaCBpbmZvXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBleGl0X2Vycm9yOwogCX0KIAogCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKIAotCWluZm8tPmRldiA9IGRldjsKKwlpbmZvLT5kZXYgPSAmcGRldi0+ZGV2OwogCWluZm8tPnBkYXRhID0gcGRhdGE7CiAKIAkvKiBnZXQgdGhlIHJlc291cmNlIGZvciB0aGUgbWVtb3J5IG1hcHBpbmcgKi8KIAotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZCwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAKIAlpZiAocmVzID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJubyBtZW1vcnkgcmVzb3VyY2Ugc3BlY2lmaWVkXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gbWVtb3J5IHJlc291cmNlIHNwZWNpZmllZFxuIik7CiAJCWVyciA9IC1FTk9FTlQ7CiAJCWdvdG8gZXhpdF9mcmVlOwogCX0KIAotCWRldl9kYmcoZGV2LCAiZ290IHBsYXRmb3JtIHJlc291cmNlICVwICgweCVseClcbiIsIHJlcywgcmVzLT5zdGFydCk7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAiZ290IHBsYXRmb3JtIHJlc291cmNlICVwICgweCVseClcbiIsIHJlcywgcmVzLT5zdGFydCk7CiAKIAkvKiBzZXR1cCBtYXAgcGFyYW1ldGVycyAqLwogCiAJaW5mby0+bWFwLnBoeXMgPSByZXMtPnN0YXJ0OwogCWluZm8tPm1hcC5zaXplID0gKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkgKyAxOwotCWluZm8tPm1hcC5uYW1lID0gcGRhdGEtPm1hcG5hbWUgIT0gTlVMTCA/IHBkYXRhLT5tYXBuYW1lIDogKGNoYXIgKilwZC0+bmFtZTsKKwlpbmZvLT5tYXAubmFtZSA9IHBkYXRhLT5tYXBuYW1lICE9IE5VTEwgPyBwZGF0YS0+bWFwbmFtZSA6IChjaGFyICopcGRldi0+bmFtZTsKIAlpbmZvLT5tYXAuYmFua3dpZHRoID0gcGRhdGEtPmJhbmt3aWR0aDsKIAogCS8qIHJlZ2lzdGVyIG91ciB1c2FnZSBvZiB0aGUgbWVtb3J5IGFyZWEgKi8KIAotCWluZm8tPmFyZWEgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgaW5mby0+bWFwLnNpemUsIHBkLT5uYW1lKTsKKwlpbmZvLT5hcmVhID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIGluZm8tPm1hcC5zaXplLCBwZGV2LT5uYW1lKTsKIAlpZiAoaW5mby0+YXJlYSA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgbWVtb3J5IHJlZ2lvblxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IG1lbW9yeSByZWdpb25cbiIpOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGV4aXRfZnJlZTsKIAl9CkBAIC0xOTIsMjMgKzE5MSwyMyBAQAogCS8qIHJlbWFwIHRoZSBtZW1vcnkgYXJlYSAqLwogCiAJaW5mby0+bWFwLnZpcnQgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIGluZm8tPm1hcC5zaXplKTsKLQlkZXZfZGJnKGRldiwgInZpcnQgJXAsICVsdSBieXRlc1xuIiwgaW5mby0+bWFwLnZpcnQsIGluZm8tPm1hcC5zaXplKTsKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJ2aXJ0ICVwLCAlbHUgYnl0ZXNcbiIsIGluZm8tPm1hcC52aXJ0LCBpbmZvLT5tYXAuc2l6ZSk7CiAKIAlpZiAoaW5mby0+bWFwLnZpcnQgPT0gTlVMTCkgewotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpb3JlbWFwKCkgcmVnaW9uXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGlvcmVtYXAoKSByZWdpb25cbiIpOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGV4aXRfZnJlZTsKIAl9CiAKIAlzaW1wbGVfbWFwX2luaXQoJmluZm8tPm1hcCk7CiAKLQlkZXZfZGJnKGRldiwgImluaXRpYWxpc2VkIG1hcCwgcHJvYmluZyBmb3IgbXRkXG4iKTsKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJpbml0aWFsaXNlZCBtYXAsIHByb2JpbmcgZm9yIG10ZFxuIik7CiAKIAkvKiBwcm9iZSBmb3IgdGhlIHJpZ2h0IG10ZCBtYXAgZHJpdmVyICovCiAKIAlpbmZvLT5tdGQgPSBkb19tYXBfcHJvYmUoIm1hcF9yYW0iICwgJmluZm8tPm1hcCk7CiAJaWYgKGluZm8tPm10ZCA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHByb2JlIGZvciBtYXBfcmFtXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHByb2JlIGZvciBtYXBfcmFtXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBleGl0X2ZyZWU7CiAJfQpAQCAtMjM3LDI3ICsyMzYsMjggQEAKICNlbmRpZiAvKiBDT05GSUdfTVREX1BBUlRJVElPTlMgKi8KIAogCWlmIChhZGRfbXRkX2RldmljZShpbmZvLT5tdGQpKSB7Ci0JCWRldl9lcnIoZGV2LCAiYWRkX210ZF9kZXZpY2UoKSBmYWlsZWRcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJhZGRfbXRkX2RldmljZSgpIGZhaWxlZFxuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJfQogCi0JZGV2X2luZm8oZGV2LCAicmVnaXN0ZXJlZCBtdGQgZGV2aWNlXG4iKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAicmVnaXN0ZXJlZCBtdGQgZGV2aWNlXG4iKTsKIAlyZXR1cm4gZXJyOwogCiAgZXhpdF9mcmVlOgotCXBsYXRyYW1fcmVtb3ZlKGRldik7CisJcGxhdHJhbV9yZW1vdmUocGRldik7CiAgZXhpdF9lcnJvcjoKIAlyZXR1cm4gZXJyOwogfQogCiAvKiBkZXZpY2UgZHJpdmVyIGluZm8gKi8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHBsYXRyYW1fZHJpdmVyID0gewotCS5uYW1lCQk9ICJtdGQtcmFtIiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwbGF0cmFtX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gcGxhdHJhbV9wcm9iZSwKIAkucmVtb3ZlCQk9IHBsYXRyYW1fcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJtdGQtcmFtIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKIC8qIG1vZHVsZSBpbml0L2V4aXQgKi8KQEAgLTI2NSwxMiArMjY1LDEyIEBACiBzdGF0aWMgaW50IF9faW5pdCBwbGF0cmFtX2luaXQodm9pZCkKIHsKIAlwcmludGsoIkdlbmVyaWMgcGxhdGZvcm0gUkFNIE1URCwgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzXG4iKTsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZwbGF0cmFtX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcGxhdHJhbV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcGxhdHJhbV9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnBsYXRyYW1fZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGxhdHJhbV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChwbGF0cmFtX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvc2ExMTAwLWZsYXNoLmMKaW5kZXggOWU4YmIxNy4uNWNlZmIwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3NhMTEwMC1mbGFzaC5jCkBAIC0zNTYsOSArMzU2LDggQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKnBhcnRfcHJvYmVzW10gPSB7ICJjbWRsaW5lcGFydCIsICJSZWRCb290IiwgTlVMTCB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBzYTExMDBfbXRkX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IHNhMTEwMF9tdGRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgKnBsYXQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CiAJY29uc3QgY2hhciAqcGFydF90eXBlID0gTlVMTDsKQEAgLTQwMiwyOCArNDAxLDI4IEBACiAKIAlpbmZvLT5ucl9wYXJ0cyA9IG5yX3BhcnRzOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CiAJZXJyID0gMDsKIAogIG91dDoKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IF9fZXhpdCBzYTExMDBfbXRkX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZXhpdCBzYTExMDBfbXRkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBzYV9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgKnBsYXQgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHNhX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJc2ExMTAwX2Rlc3Ryb3koaW5mbywgcGxhdCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzYTExMDBfbXRkX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNhMTEwMF9tdGRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3Qgc2FfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzYV9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChpbmZvKQpAQCAtNDMyLDE3ICs0MzEsMTcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHNhMTEwMF9tdGRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc2ExMTAwX210ZF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBzYV9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNhX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWlmIChpbmZvKQogCQlpbmZvLT5tdGQtPnJlc3VtZShpbmZvLT5tdGQpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzYTExMDBfbXRkX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHNhMTEwMF9tdGRfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBzYV9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNhX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWlmIChpbmZvICYmIGluZm8tPm10ZC0+c3VzcGVuZChpbmZvLT5tdGQpID09IDApCiAJCWluZm8tPm10ZC0+cmVzdW1lKGluZm8tPm10ZCk7CiB9CkBAIC00NTIsMjQgKzQ1MSwyNSBAQAogI2RlZmluZSBzYTExMDBfbXRkX3NodXRkb3duIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc2ExMTAwX210ZF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImZsYXNoIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNhMTEwMF9tdGRfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzYTExMDBfbXRkX3Byb2JlLAogCS5yZW1vdmUJCT0gX19leGl0X3Aoc2ExMTAwX210ZF9yZW1vdmUpLAogCS5zdXNwZW5kCT0gc2ExMTAwX210ZF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc2ExMTAwX210ZF9yZXN1bWUsCiAJLnNodXRkb3duCT0gc2ExMTAwX210ZF9zaHV0ZG93biwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiZmxhc2giLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzYTExMDBfbXRkX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZzYTExMDBfbXRkX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2ExMTAwX210ZF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc2ExMTAwX210ZF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnNhMTEwMF9tdGRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2ExMTAwX210ZF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChzYTExMDBfbXRkX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9zM2MyNDEwLmMgYi9kcml2ZXJzL210ZC9uYW5kL3MzYzI0MTAuYwppbmRleCA5N2U5Yjc4Li5kMjA5MjE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3MzYzI0MTAuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3MzYzI0MTAuYwpAQCAtMTI1LDE0ICsxMjUsMTQgQEAKIAlyZXR1cm4gczNjMjQxMF9uYW5kX210ZF90b291cnMobXRkKS0+aW5mbzsKIH0KIAotc3RhdGljIHN0cnVjdCBzM2MyNDEwX25hbmRfaW5mbyAqdG9fbmFuZF9pbmZvKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF9uYW5kX2luZm8gKnRvX25hbmRfaW5mbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXJldHVybiBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogfQogCi1zdGF0aWMgc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1fbmFuZCAqdG9fbmFuZF9wbGF0KHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF9wbGF0Zm9ybV9uYW5kICp0b19uYW5kX3BsYXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXJldHVybiBkZXYtPnBsYXRmb3JtX2RhdGE7CisJcmV0dXJuIGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiB9CiAKIC8qIHRpbWluZyBjYWxjdWxhdGlvbnMgKi8KQEAgLTE2NSw5ICsxNjUsOSBAQAogLyogY29udHJvbGxlciBzZXR1cCAqLwogCiBzdGF0aWMgaW50IHMzYzI0MTBfbmFuZF9pbml0aHcoc3RydWN0IHMzYzI0MTBfbmFuZF9pbmZvICppbmZvLAotCQkJICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldikKKwkJCSAgICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBzM2MyNDEwX3BsYXRmb3JtX25hbmQgKnBsYXQgPSB0b19uYW5kX3BsYXQoZGV2KTsKKwlzdHJ1Y3QgczNjMjQxMF9wbGF0Zm9ybV9uYW5kICpwbGF0ID0gdG9fbmFuZF9wbGF0KHBkZXYpOwogCXVuc2lnbmVkIGxvbmcgY2xrcmF0ZSA9IGNsa19nZXRfcmF0ZShpbmZvLT5jbGspOwogCWludCB0YWNscywgdHdycGgwLCB0d3JwaDE7CiAJdW5zaWduZWQgbG9uZyBjZmc7CkBAIC00MzAsMTEgKzQzMCwxMSBAQAogCiAvKiBkZXZpY2UgbWFuYWdlbWVudCBmdW5jdGlvbnMgKi8KIAotc3RhdGljIGludCBzM2MyNDEwX25hbmRfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczNjMjQxMF9uYW5kX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBzM2MyNDEwX25hbmRfaW5mbyAqaW5mbyA9IHRvX25hbmRfaW5mbyhkZXYpOworCXN0cnVjdCBzM2MyNDEwX25hbmRfaW5mbyAqaW5mbyA9IHRvX25hbmRfaW5mbyhwZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJaWYgKGluZm8gPT0gTlVMTCkKIAkJcmV0dXJuIDA7CkBAIC01NjIsMTAgKzU2Miw5IEBACiAgKiBuYW5kIGxheWVyIHRvIGxvb2sgZm9yIGRldmljZXMKICovCiAKLXN0YXRpYyBpbnQgczNjMjR4eF9uYW5kX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGlzX3MzYzI0NDApCitzdGF0aWMgaW50IHMzYzI0eHhfbmFuZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgaXNfczNjMjQ0MCkKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1fbmFuZCAqcGxhdCA9IHRvX25hbmRfcGxhdChkZXYpOworCXN0cnVjdCBzM2MyNDEwX3BsYXRmb3JtX25hbmQgKnBsYXQgPSB0b19uYW5kX3BsYXQocGRldik7CiAJc3RydWN0IHMzYzI0MTBfbmFuZF9pbmZvICppbmZvOwogCXN0cnVjdCBzM2MyNDEwX25hbmRfbXRkICpubXRkOwogCXN0cnVjdCBzM2MyNDEwX25hbmRfc2V0ICpzZXRzOwpAQCAtNTc1LDI2ICs1NzQsMjYgQEAKIAlpbnQgbnJfc2V0czsKIAlpbnQgc2V0bm87CiAKLQlwcl9kZWJ1ZygiczNjMjQxMF9uYW5kX3Byb2JlKCVwKVxuIiwgZGV2KTsKKwlwcl9kZWJ1ZygiczNjMjQxMF9uYW5kX3Byb2JlKCVwKVxuIiwgcGRldik7CiAKIAlpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoaW5mbyA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAibm8gbWVtb3J5IGZvciBmbGFzaCBpbmZvXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gbWVtb3J5IGZvciBmbGFzaCBpbmZvXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBleGl0X2Vycm9yOwogCX0KIAogCW1lbXplcm8oaW5mbywgc2l6ZW9mKCppbmZvKSk7Ci0JZGV2X3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CiAKIAlzcGluX2xvY2tfaW5pdCgmaW5mby0+Y29udHJvbGxlci5sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5jb250cm9sbGVyLndxKTsKIAogCS8qIGdldCB0aGUgY2xvY2sgc291cmNlIGFuZCBlbmFibGUgaXQgKi8KIAotCWluZm8tPmNsayA9IGNsa19nZXQoZGV2LCAibmFuZCIpOworCWluZm8tPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm5hbmQiKTsKIAlpZiAoSVNfRVJSKGluZm8tPmNsaykpIHsKLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGNsb2NrIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgY2xvY2siKTsKIAkJZXJyID0gLUVOT0VOVDsKIAkJZ290byBleGl0X2Vycm9yOwogCX0KQEAgLTYxMSwyNyArNjEwLDI3IEBACiAJaW5mby0+YXJlYSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBzaXplLCBwZGV2LT5uYW1lKTsKIAogCWlmIChpbmZvLT5hcmVhID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJjYW5ub3QgcmVzZXJ2ZSByZWdpc3RlciByZWdpb25cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVzZXJ2ZSByZWdpc3RlciByZWdpb25cbiIpOwogCQllcnIgPSAtRU5PRU5UOwogCQlnb3RvIGV4aXRfZXJyb3I7CiAJfQogCi0JaW5mby0+ZGV2aWNlICAgICA9IGRldjsKKwlpbmZvLT5kZXZpY2UgICAgID0gJnBkZXYtPmRldjsKIAlpbmZvLT5wbGF0Zm9ybSAgID0gcGxhdDsKIAlpbmZvLT5yZWdzICAgICAgID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBzaXplKTsKIAlpbmZvLT5pc19zM2MyNDQwID0gaXNfczNjMjQ0MDsKIAogCWlmIChpbmZvLT5yZWdzID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJjYW5ub3QgcmVzZXJ2ZSByZWdpc3RlciByZWdpb25cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVzZXJ2ZSByZWdpc3RlciByZWdpb25cbiIpOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGV4aXRfZXJyb3I7CiAJfQogCi0JZGV2X2RiZyhkZXYsICJtYXBwZWQgcmVnaXN0ZXJzIGF0ICVwXG4iLCBpbmZvLT5yZWdzKTsKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJtYXBwZWQgcmVnaXN0ZXJzIGF0ICVwXG4iLCBpbmZvLT5yZWdzKTsKIAogCS8qIGluaXRpYWxpc2UgdGhlIGhhcmR3YXJlICovCiAKLQllcnIgPSBzM2MyNDEwX25hbmRfaW5pdGh3KGluZm8sIGRldik7CisJZXJyID0gczNjMjQxMF9uYW5kX2luaXRodyhpbmZvLCBwZGV2KTsKIAlpZiAoZXJyICE9IDApCiAJCWdvdG8gZXhpdF9lcnJvcjsKIApAQCAtNjQ1LDcgKzY0NCw3IEBACiAJc2l6ZSA9IG5yX3NldHMgKiBzaXplb2YoKmluZm8tPm10ZHMpOwogCWluZm8tPm10ZHMgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCWlmIChpbmZvLT5tdGRzID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgbXRkIHN0b3JhZ2VcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgbXRkIHN0b3JhZ2VcbiIpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGV4aXRfZXJyb3I7CiAJfQpAQCAtNjc3LDcgKzY3Niw3IEBACiAJcmV0dXJuIDA7CiAKICBleGl0X2Vycm9yOgotCXMzYzI0MTBfbmFuZF9yZW1vdmUoZGV2KTsKKwlzM2MyNDEwX25hbmRfcmVtb3ZlKHBkZXYpOwogCiAJaWYgKGVyciA9PSAwKQogCQllcnIgPSAtRUlOVkFMOwpAQCAtNjg2LDQ0ICs2ODUsNDYgQEAKIAogLyogZHJpdmVyIGRldmljZSByZWdpc3RyYXRpb24gKi8KIAotc3RhdGljIGludCBzM2MyNDEwX25hbmRfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNDEwX25hbmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXJldHVybiBzM2MyNHh4X25hbmRfcHJvYmUoZGV2LCAwKTsKIH0KIAotc3RhdGljIGludCBzM2MyNDQwX25hbmRfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNDQwX25hbmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXJldHVybiBzM2MyNHh4X25hbmRfcHJvYmUoZGV2LCAxKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHMzYzI0MTBfbmFuZF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInMzYzI0MTAtbmFuZCIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjQxMF9uYW5kX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gczNjMjQxMF9uYW5kX3Byb2JlLAogCS5yZW1vdmUJCT0gczNjMjQxMF9uYW5kX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiczNjMjQxMC1uYW5kIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzM2MyNDQwX25hbmRfZHJpdmVyID0gewotCS5uYW1lCQk9ICJzM2MyNDQwLW5hbmQiLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzYzI0NDBfbmFuZF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHMzYzI0NDBfbmFuZF9wcm9iZSwKIAkucmVtb3ZlCQk9IHMzYzI0MTBfbmFuZF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInMzYzI0NDAtbmFuZCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzM2MyNDEwX25hbmRfaW5pdCh2b2lkKQogewogCXByaW50aygiUzNDMjRYWCBOQU5EIERyaXZlciwgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzXG4iKTsKIAotCWRyaXZlcl9yZWdpc3RlcigmczNjMjQ0MF9uYW5kX2RyaXZlcik7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmczNjMjQxMF9uYW5kX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDQwX25hbmRfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwX25hbmRfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHMzYzI0MTBfbmFuZF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0NDBfbmFuZF9kcml2ZXIpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDEwX25hbmRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjMjQ0MF9uYW5kX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0MTBfbmFuZF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChzM2MyNDEwX25hbmRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCA1YzY5ZDU3Li5lYmQ3MzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTgxMiw3ICs4MTIsNyBAQAogCXRyaXN0YXRlICJTTUMgOTFDOXgvOTFDMXh4eCBzdXBwb3J0IgogCXNlbGVjdCBDUkMzMgogCXNlbGVjdCBNSUkKLQlkZXBlbmRzIG9uIE5FVF9FVEhFUk5FVCAmJiAoQVJNIHx8IFJFRFdPT0RfNSB8fCBSRURXT09EXzYgfHwgTTMyUiB8fCBTVVBFUkgpCisJZGVwZW5kcyBvbiBORVRfRVRIRVJORVQgJiYgKEFSTSB8fCBSRURXT09EXzUgfHwgUkVEV09PRF82IHx8IE0zMlIgfHwgU1VQRVJIIHx8IFNPQ19BVTFYMDApCiAJaGVscAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgU01DJ3MgOTF4IHNlcmllcyBvZiBFdGhlcm5ldCBjaGlwc2V0cywKIAkgIGluY2x1ZGluZyB0aGUgU01DOTFDOTQgYW5kIHRoZSBTTUM5MUMxMTEuIFNheSBZIGlmIHlvdSB3YW50IGl0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmMgYi9kcml2ZXJzL25ldC9ibngyLmMKaW5kZXggOGY0NjQyNy4uNDlmYTFlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuYwpAQCAtMjcwNyw3ICsyNzA3LDcgQEAKIAogCWlmIChqID09IGVudHJ5X2NvdW50KSB7CiAJCWJwLT5mbGFzaF9pbmZvID0gTlVMTDsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgIlVua25vd24gZmxhc2gvRUVQUk9NIHR5cGUuXG4iKTsKKwkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICJVbmtub3duIGZsYXNoL0VFUFJPTSB0eXBlLlxuIik7CiAJCXJjID0gLUVOT0RFVjsKIAl9CiAKQEAgLTM5MDMsNiArMzkwMyw4IEBACiAKIAlwa3Rfc2l6ZSA9IDE1MTQ7CiAJc2tiID0gZGV2X2FsbG9jX3NrYihwa3Rfc2l6ZSk7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOwogCXBhY2tldCA9IHNrYl9wdXQoc2tiLCBwa3Rfc2l6ZSk7CiAJbWVtY3B5KHBhY2tldCwgYnAtPm1hY19hZGRyLCA2KTsKIAltZW1zZXQocGFja2V0ICsgNiwgMHgwLCA4KTsKQEAgLTQ3OTgsMTEgKzQ4MDAsNyBAQAogICAJc3RydWN0IGJueDIgKmJwID0gZGV2LT5wcml2OwogCWludCByYzsKIAotCWlmIChlZXByb20tPm9mZnNldCA+IGJwLT5mbGFzaF9pbmZvLT50b3RhbF9zaXplKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICgoZWVwcm9tLT5vZmZzZXQgKyBlZXByb20tPmxlbikgPiBicC0+Zmxhc2hfaW5mby0+dG90YWxfc2l6ZSkKLQkJZWVwcm9tLT5sZW4gPSBicC0+Zmxhc2hfaW5mby0+dG90YWxfc2l6ZSAtIGVlcHJvbS0+b2Zmc2V0OworCS8qIHBhcmFtZXRlcnMgYWxyZWFkeSB2YWxpZGF0ZWQgaW4gZXRodG9vbF9nZXRfZWVwcm9tICovCiAKIAlyYyA9IGJueDJfbnZyYW1fcmVhZChicCwgZWVwcm9tLT5vZmZzZXQsIGVlYnVmLCBlZXByb20tPmxlbik7CiAKQEAgLTQ4MTYsMTEgKzQ4MTQsNyBAQAogICAJc3RydWN0IGJueDIgKmJwID0gZGV2LT5wcml2OwogCWludCByYzsKIAotCWlmIChlZXByb20tPm9mZnNldCA+IGJwLT5mbGFzaF9pbmZvLT50b3RhbF9zaXplKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICgoZWVwcm9tLT5vZmZzZXQgKyBlZXByb20tPmxlbikgPiBicC0+Zmxhc2hfaW5mby0+dG90YWxfc2l6ZSkKLQkJZWVwcm9tLT5sZW4gPSBicC0+Zmxhc2hfaW5mby0+dG90YWxfc2l6ZSAtIGVlcHJvbS0+b2Zmc2V0OworCS8qIHBhcmFtZXRlcnMgYWxyZWFkeSB2YWxpZGF0ZWQgaW4gZXRodG9vbF9zZXRfZWVwcm9tICovCiAKIAlyYyA9IGJueDJfbnZyYW1fd3JpdGUoYnAsIGVlcHJvbS0+b2Zmc2V0LCBlZWJ1ZiwgZWVwcm9tLT5sZW4pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZXBjYS5jIGIvZHJpdmVycy9uZXQvZGVwY2EuYwppbmRleCAwZDMzYTkzLi4wMzgwNGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZXBjYS5jCisrKyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKQEAgLTM5OCwxMyArMzk4LDE5IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBpbnQgZGVwY2FfaXNhX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICopOworc3RhdGljIGludCBkZXBjYV9pc2FfcHJvYmUgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkZXBjYV9pc2FfZHJpdmVyID0gewotCS5uYW1lICAgPSBkZXBjYV9zdHJpbmcsCi0JLmJ1cyAgICA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBpbnQgX19kZXZleGl0IGRlcGNhX2lzYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gZGVwY2FfZGV2aWNlX3JlbW92ZSgmcGRldi0+ZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZGVwY2FfaXNhX2RyaXZlciA9IHsKIAkucHJvYmUgID0gZGVwY2FfaXNhX3Byb2JlLAotCS5yZW1vdmUgPSBfX2RldmV4aXRfcChkZXBjYV9kZXZpY2VfcmVtb3ZlKSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoZGVwY2FfaXNhX3JlbW92ZSksCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUgICA9IGRlcGNhX3N0cmluZywKKwl9LAogfTsKIAkKIC8qCkBAIC0xNTI1LDcgKzE1MzEsNyBAQAogCXJldHVybiBhZGFwdGVyOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBkZXBjYV9pc2FfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19pbml0IGRlcGNhX2lzYV9wcm9iZSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGRlcGNhX3ByaXZhdGUgKmxwOwpAQCAtMTUzMyw3ICsxNTM5LDcgQEAKIAllbnVtIGRlcGNhX3R5cGUgYWRhcHRlciA9IHVua25vd247CiAJaW50IHN0YXR1cyA9IDA7CiAKLQlpb2FkZHIgPSAodV9sb25nKSBkZXZpY2UtPnBsYXRmb3JtX2RhdGE7CisJaW9hZGRyID0gKHVfbG9uZykgZGV2aWNlLT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCWlmICgoc3RhdHVzID0gZGVwY2FfY29tbW9uX2luaXQgKGlvYWRkciwgJmRldikpKQogCQlnb3RvIG91dDsKQEAgLTE1NTMsNyArMTU1OSw3IEBACiAJbHAtPmFkYXB0ZXIgPSBhZGFwdGVyOwogCWxwLT5tZW1fc3RhcnQgPSBtZW1fc3RhcnQ7CiAJCi0JaWYgKChzdGF0dXMgPSBkZXBjYV9od19pbml0KGRldiwgZGV2aWNlKSkpCisJaWYgKChzdGF0dXMgPSBkZXBjYV9od19pbml0KGRldiwgJmRldmljZS0+ZGV2KSkpCiAJCWdvdG8gb3V0X2ZyZWU7CiAJCiAJcmV0dXJuIDA7CkBAIC0yMDgyLDcgKzIwODgsNyBAQAogI2lmZGVmIENPTkZJR19FSVNBCiAgICAgICAgIGVyciB8PSBlaXNhX2RyaXZlcl9yZWdpc3RlciAoJmRlcGNhX2Vpc2FfZHJpdmVyKTsKICNlbmRpZgotCWVyciB8PSBkcml2ZXJfcmVnaXN0ZXIgKCZkZXBjYV9pc2FfZHJpdmVyKTsKKwllcnIgfD0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyICgmZGVwY2FfaXNhX2RyaXZlcik7CiAJZGVwY2FfcGxhdGZvcm1fcHJvYmUgKCk7CiAJCiAgICAgICAgIHJldHVybiBlcnI7CkBAIC0yMDk3LDcgKzIxMDMsNyBAQAogI2lmZGVmIENPTkZJR19FSVNBCiAgICAgICAgIGVpc2FfZHJpdmVyX3VucmVnaXN0ZXIgKCZkZXBjYV9laXNhX2RyaXZlcik7CiAjZW5kaWYKLQlkcml2ZXJfdW5yZWdpc3RlciAoJmRlcGNhX2lzYV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyICgmZGVwY2FfaXNhX2RyaXZlcik7CiAKIAlmb3IgKGkgPSAwOyBkZXBjYV9pb19wb3J0c1tpXS5pb2Jhc2U7IGkrKykgewogCQlpZiAoZGVwY2FfaW9fcG9ydHNbaV0uZGV2aWNlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbTkwMDAuYyBiL2RyaXZlcnMvbmV0L2RtOTAwMC5jCmluZGV4IGY4YzliY2QuLjI0OTk2ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RtOTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2RtOTAwMC5jCkBAIC0xNDgsNyArMTQ4LDcgQEAKIH0gYm9hcmRfaW5mb190OwogCiAvKiBmdW5jdGlvbiBkZWNsYXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1zdGF0aWMgaW50IGRtOTAwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICopOworc3RhdGljIGludCBkbTkwMDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKIHN0YXRpYyBpbnQgZG05MDAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgaW50IGRtOTAwMF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIGludCBkbTkwMDBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKQEAgLTM3OCw5ICszNzgsOCBAQAogICogU2VhcmNoIERNOTAwMCBib2FyZCwgYWxsb2NhdGUgc3BhY2UgYW5kIHJlZ2lzdGVyIGl0CiAgKi8KIHN0YXRpYyBpbnQKLWRtOTAwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitkbTkwMDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGRtOTAwMF9wbGF0X2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGJvYXJkX2luZm8gKmRiOwkvKiBQb2ludCBhIGJvYXJkIGluZm9ybWF0aW9uIHN0cnVjdHVyZSAqLwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwpAQCAtMzk4LDcgKzM5Nyw3IEBACiAJfQogCiAJU0VUX01PRFVMRV9PV05FUihuZGV2KTsKLQlTRVRfTkVUREVWX0RFVihuZGV2LCBkZXYpOworCVNFVF9ORVRERVZfREVWKG5kZXYsICZwZGV2LT5kZXYpOwogCiAJUFJJTlRLMigiZG05MDAwX3Byb2JlKCkiKTsKIApAQCAtNTY5LDcgKzU2OCw3IEBACiAJCXByaW50aygiJXM6IEludmFsaWQgZXRoZXJuZXQgTUFDIGFkZHJlc3MuICBQbGVhc2UgIgogCQkgICAgICAgInNldCB1c2luZyBpZmNvbmZpZ1xuIiwgbmRldi0+bmFtZSk7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBuZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBuZGV2KTsKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7CiAKIAlpZiAocmV0ID09IDApIHsKQEAgLTExNDAsOSArMTEzOSw5IEBACiB9CiAKIHN0YXRpYyBpbnQKLWRtOTAwMF9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK2RtOTAwMF9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChuZGV2KSB7CiAJCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CkBAIC0xMTU0LDkgKzExNTMsOSBAQAogfQogCiBzdGF0aWMgaW50Ci1kbTkwMDBfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitkbTkwMDBfZHJ2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJYm9hcmRfaW5mb190ICpkYiA9IChib2FyZF9pbmZvX3QgKikgbmRldi0+cHJpdjsKIAogCWlmIChuZGV2KSB7CkBAIC0xMTcyLDEyICsxMTcxLDExIEBACiB9CiAKIHN0YXRpYyBpbnQKLWRtOTAwMF9kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK2RtOTAwMF9kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7CiAJZG05MDAwX3JlbGVhc2VfYm9hcmQocGRldiwgKGJvYXJkX2luZm9fdCAqKSBuZGV2LT5wcml2KTsKQEAgLTExODgsMTMgKzExODYsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGRtOTAwMF9kcml2ZXIgPSB7Ci0JLm5hbWUgICAgPSAiZG05MDAwIiwKLQkuYnVzICAgICA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRtOTAwMF9kcml2ZXIgPSB7CiAJLnByb2JlICAgPSBkbTkwMDBfcHJvYmUsCiAJLnJlbW92ZSAgPSBkbTkwMDBfZHJ2X3JlbW92ZSwKIAkuc3VzcGVuZCA9IGRtOTAwMF9kcnZfc3VzcGVuZCwKIAkucmVzdW1lICA9IGRtOTAwMF9kcnZfcmVzdW1lLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gImRtOTAwMCIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0CkBAIC0xMjAyLDEzICsxMjAxLDEzIEBACiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMgRXRoZXJuZXQgRHJpdmVyXG4iLCBDQVJETkFNRSk7CiAKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZkbTkwMDBfZHJpdmVyKTsJLyogc2VhcmNoIGJvYXJkIGFuZCByZWdpc3RlciAqLworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmRtOTAwMF9kcml2ZXIpOwkvKiBzZWFyY2ggYm9hcmQgYW5kIHJlZ2lzdGVyICovCiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdAogZG05MDAwX2NsZWFudXAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmZG05MDAwX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRtOTAwMF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChkbTkwMDBfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCmluZGV4IDIyYWVjNmUuLjUyNTYyNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCkBAIC04MCw3ICs4MCw3IEBACiAgKgkJCSAgIGludG8gbnZfY2xvc2UsIG90aGVyd2lzZSByZWVuYWJsaW5nIGZvciB3b2wgY2FuCiAgKgkJCSAgIGNhdXNlIERNQSB0byBrZnJlZSdkIG1lbW9yeS4KICAqCTAuMzE6IDE0IE5vdiAyMDA0OiBldGh0b29sIHN1cHBvcnQgZm9yIGdldHRpbmcvc2V0dGluZyBsaW5rCi0gKgkgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0aWVzLgorICoJCQkgICBjYXBhYmlsaXRpZXMuCiAgKgkwLjMyOiAxNiBBcHIgMjAwNTogUlhfRVJST1I0IGhhbmRsaW5nIGFkZGVkLgogICoJMC4zMzogMTYgTWF5IDIwMDU6IFN1cHBvcnQgZm9yIE1DUDUxIGFkZGVkLgogICoJMC4zNDogMTggSnVuIDIwMDU6IEFkZCBERVZfTkVFRF9MSU5LVElNRVIgdG8gYWxsIG5Gb3JjZSBuaWNzLgpAQCAtODksMTQgKzg5LDE3IEBACiAgKgkwLjM3OiAxMCBKdWwgMjAwNTogQWRkaXRpb25hbCBldGh0b29sIHN1cHBvcnQsIGNsZWFudXAgb2YgcGNpIGlkIGxpc3QKICAqCTAuMzg6IDE2IEp1bCAyMDA1OiB0eCBpcnEgcmV3cml0ZTogVXNlIGdsb2JhbCBmbGFncyBpbnN0ZWFkIG9mCiAgKgkJCSAgIHBlci1wYWNrZXQgZmxhZ3MuCi0gKiAgICAgIDAuMzk6IDE4IEp1bCAyMDA1OiBBZGQgNjRiaXQgZGVzY3JpcHRvciBzdXBwb3J0LgotICogICAgICAwLjQwOiAxOSBKdWwgMjAwNTogQWRkIHN1cHBvcnQgZm9yIG1hYyBhZGRyZXNzIGNoYW5nZS4KLSAqICAgICAgMC40MTogMzAgSnVsIDIwMDU6IFdyaXRlIGJhY2sgb3JpZ2luYWwgTUFDIGluIG52X2Nsb3NlIGluc3RlYWQKKyAqCTAuMzk6IDE4IEp1bCAyMDA1OiBBZGQgNjRiaXQgZGVzY3JpcHRvciBzdXBwb3J0LgorICoJMC40MDogMTkgSnVsIDIwMDU6IEFkZCBzdXBwb3J0IGZvciBtYWMgYWRkcmVzcyBjaGFuZ2UuCisgKgkwLjQxOiAzMCBKdWwgMjAwNTogV3JpdGUgYmFjayBvcmlnaW5hbCBNQUMgaW4gbnZfY2xvc2UgaW5zdGVhZAogICoJCQkgICBvZiBudl9yZW1vdmUKLSAqICAgICAgMC40MjogMDYgQXVnIDIwMDU6IEZpeCBsYWNrIG9mIGxpbmsgc3BlZWQgaW5pdGlhbGl6YXRpb24KKyAqCTAuNDI6IDA2IEF1ZyAyMDA1OiBGaXggbGFjayBvZiBsaW5rIHNwZWVkIGluaXRpYWxpemF0aW9uCiAgKgkJCSAgIGluIHRoZSBzZWNvbmQgKGFuZCBsYXRlcikgbnZfb3BlbiBjYWxsCi0gKiAgICAgIDAuNDM6IDEwIEF1ZyAyMDA1OiBBZGQgc3VwcG9ydCBmb3IgdHggY2hlY2tzdW0uCi0gKiAgICAgIDAuNDQ6IDIwIEF1ZyAyMDA1OiBBZGQgc3VwcG9ydCBmb3Igc2NhdHRlciBnYXRoZXIgYW5kIHNlZ21lbnRhdGlvbi4KKyAqCTAuNDM6IDEwIEF1ZyAyMDA1OiBBZGQgc3VwcG9ydCBmb3IgdHggY2hlY2tzdW0uCisgKgkwLjQ0OiAyMCBBdWcgMjAwNTogQWRkIHN1cHBvcnQgZm9yIHNjYXR0ZXIgZ2F0aGVyIGFuZCBzZWdtZW50YXRpb24uCisgKgkwLjQ1OiAxOCBTZXAgMjAwNTogUmVtb3ZlIG52X3N0b3Avc3RhcnRfcnggZnJvbSBldmVyeSBsaW5rIGNoZWNrCisgKgkwLjQ2OiAyMCBPY3QgMjAwNTogQWRkIGlycSBvcHRpbWl6YXRpb24gbW9kZXMuCisgKgkwLjQ3OiAyNiBPY3QgMjAwNTogQWRkIHBoeWFkZHIgMCBpbiBwaHkgc2Nhbi4KICAqCiAgKiBLbm93biBidWdzOgogICogV2Ugc3VzcGVjdCB0aGF0IG9uIHNvbWUgaGFyZHdhcmUgbm8gVFggZG9uZSBpbnRlcnJ1cHRzIGFyZSBnZW5lcmF0ZWQuCkBAIC0xMDgsNyArMTExLDcgQEAKICAqIERFVl9ORUVEX1RJTUVSSVJRIHdpbGwgbm90IGhhcm0geW91IG9uIHNhbmUgaGFyZHdhcmUsIG9ubHkgZ2VuZXJhdGluZyBhIGZldwogICogc3VwZXJmbHVvdXMgdGltZXIgaW50ZXJydXB0cyBmcm9tIHRoZSBuaWMuCiAgKi8KLSNkZWZpbmUgRk9SQ0VERVRIX1ZFUlNJT04JCSIwLjQ0IgorI2RlZmluZSBGT1JDRURFVEhfVkVSU0lPTgkJIjAuNDciCiAjZGVmaW5lIERSVl9OQU1FCQkJImZvcmNlZGV0aCIKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMTYzLDcgKzE2Niw4IEBACiAjZGVmaW5lIE5WUkVHX0lSUV9MSU5LCQkJMHgwMDQwCiAjZGVmaW5lIE5WUkVHX0lSUV9UWF9FUlJPUgkJMHgwMDgwCiAjZGVmaW5lIE5WUkVHX0lSUV9UWDEJCQkweDAxMDAKLSNkZWZpbmUgTlZSRUdfSVJRTUFTS19XQU5URUQJCTB4MDBkZgorI2RlZmluZSBOVlJFR19JUlFNQVNLX1RIUk9VR0hQVVQJMHgwMGRmCisjZGVmaW5lIE5WUkVHX0lSUU1BU0tfQ1BVCQkweDAwNDAKIAogI2RlZmluZSBOVlJFR19JUlFfVU5LTk9XTgkofihOVlJFR19JUlFfUlhfRVJST1J8TlZSRUdfSVJRX1JYfE5WUkVHX0lSUV9SWF9OT0JVRnxOVlJFR19JUlFfVFhfRVJSfCBcCiAJCQkJCU5WUkVHX0lSUV9UWF9PS3xOVlJFR19JUlFfVElNRVJ8TlZSRUdfSVJRX0xJTkt8TlZSRUdfSVJRX1RYX0VSUk9SfCBcCkBAIC0xNzcsNyArMTgxLDggQEAKICAqIE5WUkVHX1BPTExfREVGQVVMVD05NyB3b3VsZCByZXN1bHQgaW4gYW4gaW50ZXJ2YWwgbGVuZ3RoIG9mIDEgbXMKICAqLwogCU52UmVnUG9sbGluZ0ludGVydmFsID0gMHgwMGMsCi0jZGVmaW5lIE5WUkVHX1BPTExfREVGQVVMVAk5NzAKKyNkZWZpbmUgTlZSRUdfUE9MTF9ERUZBVUxUX1RIUk9VR0hQVVQJOTcwCisjZGVmaW5lIE5WUkVHX1BPTExfREVGQVVMVF9DUFUJMTMKIAlOdlJlZ01pc2MxID0gMHgwODAsCiAjZGVmaW5lIE5WUkVHX01JU0MxX0hECQkweDAyCiAjZGVmaW5lIE5WUkVHX01JU0MxX0ZPUkNFCTB4M2IwZjNjCkBAIC01MzgsNiArNTQzLDI1IEBACiAgKi8KIHN0YXRpYyBpbnQgbWF4X2ludGVycnVwdF93b3JrID0gNTsKIAorLyoKKyAqIE9wdGltaXphdGlvbiBjYW4gYmUgZWl0aGVyIHRocm91cHV0IG1vZGUgb3IgY3B1IG1vZGUKKyAqIAorICogVGhyb3VnaHB1dCBNb2RlOiBFdmVyeSB0eCBhbmQgcnggcGFja2V0IHdpbGwgZ2VuZXJhdGUgYW4gaW50ZXJydXB0LgorICogQ1BVIE1vZGU6IEludGVycnVwdHMgYXJlIGNvbnRyb2xsZWQgYnkgYSB0aW1lci4KKyAqLworI2RlZmluZSBOVl9PUFRJTUlaQVRJT05fTU9ERV9USFJPVUdIUFVUIDAKKyNkZWZpbmUgTlZfT1BUSU1JWkFUSU9OX01PREVfQ1BVICAgICAgICAxCitzdGF0aWMgaW50IG9wdGltaXphdGlvbl9tb2RlID0gTlZfT1BUSU1JWkFUSU9OX01PREVfVEhST1VHSFBVVDsKKworLyoKKyAqIFBvbGwgaW50ZXJ2YWwgZm9yIHRpbWVyIGlycQorICoKKyAqIFRoaXMgaW50ZXJ2YWwgZGV0ZXJtaW5lcyBob3cgZnJlcXVlbnQgYW4gaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4KKyAqIFRoZSBpcyB2YWx1ZSBpcyBkZXRlcm1pbmVkIGJ5IFsodGltZV9pbl9taWNyb19zZWNzICogMTAwKSAvICgyXjEwKV0KKyAqIE1pbiA9IDAsIGFuZCBNYXggPSA2NTUzNQorICovCitzdGF0aWMgaW50IHBvbGxfaW50ZXJ2YWwgPSAtMTsKKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgZmVfcHJpdiAqZ2V0X252cHJpdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXJldHVybiBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTMyOCw2NyArMTM1Miw3MSBAQAogCQkJaWYgKCEoRmxhZ3MgJiBOVl9SWF9ERVNDUklQVE9SVkFMSUQpKQogCQkJCWdvdG8gbmV4dF9wa3Q7CiAKLQkJCWlmIChGbGFncyAmIE5WX1JYX01JU1NFREZSQU1FKSB7Ci0JCQkJbnAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKLQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJZ290byBuZXh0X3BrdDsKLQkJCX0KLQkJCWlmIChGbGFncyAmIChOVl9SWF9FUlJPUjF8TlZfUlhfRVJST1IyfE5WX1JYX0VSUk9SMykpIHsKLQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJZ290byBuZXh0X3BrdDsKLQkJCX0KLQkJCWlmIChGbGFncyAmIE5WX1JYX0NSQ0VSUikgewotCQkJCW5wLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7Ci0JCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCWdvdG8gbmV4dF9wa3Q7Ci0JCQl9Ci0JCQlpZiAoRmxhZ3MgJiBOVl9SWF9PVkVSRkxPVykgewotCQkJCW5wLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwotCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQlnb3RvIG5leHRfcGt0OwotCQkJfQotCQkJaWYgKEZsYWdzICYgTlZfUlhfRVJST1I0KSB7Ci0JCQkJbGVuID0gbnZfZ2V0bGVuKGRldiwgbnAtPnJ4X3NrYnVmZltpXS0+ZGF0YSwgbGVuKTsKLQkJCQlpZiAobGVuIDwgMCkgeworCQkJaWYgKEZsYWdzICYgTlZfUlhfRVJST1IpIHsKKwkJCQlpZiAoRmxhZ3MgJiBOVl9SWF9NSVNTRURGUkFNRSkgeworCQkJCQlucC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOwogCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJCWdvdG8gbmV4dF9wa3Q7CiAJCQkJfQotCQkJfQotCQkJLyogZnJhbWluZyBlcnJvcnMgYXJlIHNvZnQgZXJyb3JzLiAqLwotCQkJaWYgKEZsYWdzICYgTlZfUlhfRlJBTUlOR0VSUikgewotCQkJCWlmIChGbGFncyAmIE5WX1JYX1NVQlNUUkFDVDEpIHsKLQkJCQkJbGVuLS07CisJCQkJaWYgKEZsYWdzICYgKE5WX1JYX0VSUk9SMXxOVl9SWF9FUlJPUjJ8TlZfUlhfRVJST1IzKSkgeworCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCWdvdG8gbmV4dF9wa3Q7CisJCQkJfQorCQkJCWlmIChGbGFncyAmIE5WX1JYX0NSQ0VSUikgeworCQkJCQlucC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCWdvdG8gbmV4dF9wa3Q7CisJCQkJfQorCQkJCWlmIChGbGFncyAmIE5WX1JYX09WRVJGTE9XKSB7CisJCQkJCW5wLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCWdvdG8gbmV4dF9wa3Q7CisJCQkJfQorCQkJCWlmIChGbGFncyAmIE5WX1JYX0VSUk9SNCkgeworCQkJCQlsZW4gPSBudl9nZXRsZW4oZGV2LCBucC0+cnhfc2tidWZmW2ldLT5kYXRhLCBsZW4pOworCQkJCQlpZiAobGVuIDwgMCkgeworCQkJCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCQkJZ290byBuZXh0X3BrdDsKKwkJCQkJfQorCQkJCX0KKwkJCQkvKiBmcmFtaW5nIGVycm9ycyBhcmUgc29mdCBlcnJvcnMuICovCisJCQkJaWYgKEZsYWdzICYgTlZfUlhfRlJBTUlOR0VSUikgeworCQkJCQlpZiAoRmxhZ3MgJiBOVl9SWF9TVUJTVFJBQ1QxKSB7CisJCQkJCQlsZW4tLTsKKwkJCQkJfQogCQkJCX0KIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWlmICghKEZsYWdzICYgTlZfUlgyX0RFU0NSSVBUT1JWQUxJRCkpCiAJCQkJZ290byBuZXh0X3BrdDsKIAotCQkJaWYgKEZsYWdzICYgKE5WX1JYMl9FUlJPUjF8TlZfUlgyX0VSUk9SMnxOVl9SWDJfRVJST1IzKSkgewotCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQlnb3RvIG5leHRfcGt0OwotCQkJfQotCQkJaWYgKEZsYWdzICYgTlZfUlgyX0NSQ0VSUikgewotCQkJCW5wLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7Ci0JCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCWdvdG8gbmV4dF9wa3Q7Ci0JCQl9Ci0JCQlpZiAoRmxhZ3MgJiBOVl9SWDJfT1ZFUkZMT1cpIHsKLQkJCQlucC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKLQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJZ290byBuZXh0X3BrdDsKLQkJCX0KLQkJCWlmIChGbGFncyAmIE5WX1JYMl9FUlJPUjQpIHsKLQkJCQlsZW4gPSBudl9nZXRsZW4oZGV2LCBucC0+cnhfc2tidWZmW2ldLT5kYXRhLCBsZW4pOwotCQkJCWlmIChsZW4gPCAwKSB7CisJCQlpZiAoRmxhZ3MgJiBOVl9SWDJfRVJST1IpIHsKKwkJCQlpZiAoRmxhZ3MgJiAoTlZfUlgyX0VSUk9SMXxOVl9SWDJfRVJST1IyfE5WX1JYMl9FUlJPUjMpKSB7CiAJCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCQkJZ290byBuZXh0X3BrdDsKIAkJCQl9Ci0JCQl9Ci0JCQkvKiBmcmFtaW5nIGVycm9ycyBhcmUgc29mdCBlcnJvcnMgKi8KLQkJCWlmIChGbGFncyAmIE5WX1JYMl9GUkFNSU5HRVJSKSB7Ci0JCQkJaWYgKEZsYWdzICYgTlZfUlgyX1NVQlNUUkFDVDEpIHsKLQkJCQkJbGVuLS07CisJCQkJaWYgKEZsYWdzICYgTlZfUlgyX0NSQ0VSUikgeworCQkJCQlucC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCWdvdG8gbmV4dF9wa3Q7CisJCQkJfQorCQkJCWlmIChGbGFncyAmIE5WX1JYMl9PVkVSRkxPVykgeworCQkJCQlucC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCQlnb3RvIG5leHRfcGt0OworCQkJCX0KKwkJCQlpZiAoRmxhZ3MgJiBOVl9SWDJfRVJST1I0KSB7CisJCQkJCWxlbiA9IG52X2dldGxlbihkZXYsIG5wLT5yeF9za2J1ZmZbaV0tPmRhdGEsIGxlbik7CisJCQkJCWlmIChsZW4gPCAwKSB7CisJCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCQlnb3RvIG5leHRfcGt0OworCQkJCQl9CisJCQkJfQorCQkJCS8qIGZyYW1pbmcgZXJyb3JzIGFyZSBzb2Z0IGVycm9ycyAqLworCQkJCWlmIChGbGFncyAmIE5WX1JYMl9GUkFNSU5HRVJSKSB7CisJCQkJCWlmIChGbGFncyAmIE5WX1JYMl9TVUJTVFJBQ1QxKSB7CisJCQkJCQlsZW4tLTsKKwkJCQkJfQogCQkJCX0KIAkJCX0KIAkJCUZsYWdzICY9IE5WX1JYMl9DSEVDS1NVTU1BU0s7CkBAIC0xNjEyLDYgKzE2NDAsMTcgQEAKIAlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKIH0KIAorLyoqCisgKiBudl91cGRhdGVfbGlua3NwZWVkOiBTZXR1cCB0aGUgTUFDIGFjY29yZGluZyB0byB0aGUgbGluayBwYXJ0bmVyCisgKiBAZGV2OiBOZXR3b3JrIGRldmljZSB0byBiZSBjb25maWd1cmVkCisgKgorICogVGhlIGZ1bmN0aW9uIHF1ZXJpZXMgdGhlIFBIWSBhbmQgY2hlY2tzIGlmIHRoZXJlIGlzIGEgbGluayBwYXJ0bmVyLgorICogSWYgeWVzLCB0aGVuIGl0IHNldHMgdXAgdGhlIE1BQyBhY2NvcmRpbmdseS4gT3RoZXJ3aXNlLCB0aGUgTUFDIGlzCisgKiBzZXQgdG8gMTAgTUJpdCBIRC4KKyAqCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyAwIGlmIHRoZXJlIGlzIG5vIGxpbmsgcGFydG5lciBhbmQgMSBpZiB0aGVyZSBpcworICogYSBnb29kIGxpbmsgcGFydG5lci4KKyAqLwogc3RhdGljIGludCBudl91cGRhdGVfbGlua3NwZWVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTE3NTEsMTMgKzE3OTAsMTEgQEAKIHN0YXRpYyB2b2lkIG52X2xpbmtjaGFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpZiAobnZfdXBkYXRlX2xpbmtzcGVlZChkZXYpKSB7Ci0JCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKLQkJCW52X3N0b3BfcngoZGV2KTsKLQkJfSBlbHNlIHsKKwkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKIAkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIHVwLlxuIiwgZGV2LT5uYW1lKTsKKwkJCW52X3N0YXJ0X3J4KGRldik7CiAJCX0KLQkJbnZfc3RhcnRfcngoZGV2KTsKIAl9IGVsc2UgewogCQlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKSB7CiAJCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwpAQCAtMTc5OSwyMiArMTgzNiwxOCBAQAogCQlpZiAoIShldmVudHMgJiBucC0+aXJxbWFzaykpCiAJCQlicmVhazsKIAotCQlpZiAoZXZlbnRzICYgKE5WUkVHX0lSUV9UWDF8TlZSRUdfSVJRX1RYX09LfE5WUkVHX0lSUV9UWF9FUlJPUnxOVlJFR19JUlFfVFhfRVJSKSkgeworCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJbnZfdHhfZG9uZShkZXYpOworCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCQkKKwkJbnZfcnhfcHJvY2VzcyhkZXYpOworCQlpZiAobnZfYWxsb2NfcngoZGV2KSkgewogCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JCQludl90eF9kb25lKGRldik7CisJCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikKKwkJCQltb2RfdGltZXIoJm5wLT5vb21fa2ljaywgamlmZmllcyArIE9PTV9SRUZJTEwpOwogCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKIAkJfQotCi0JCWlmIChldmVudHMgJiAoTlZSRUdfSVJRX1JYX0VSUk9SfE5WUkVHX0lSUV9SWHxOVlJFR19JUlFfUlhfTk9CVUYpKSB7Ci0JCQludl9yeF9wcm9jZXNzKGRldik7Ci0JCQlpZiAobnZfYWxsb2NfcngoZGV2KSkgewotCQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCQkJCWlmICghbnAtPmluX3NodXRkb3duKQotCQkJCQltb2RfdGltZXIoJm5wLT5vb21fa2ljaywgamlmZmllcyArIE9PTV9SRUZJTEwpOwotCQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7Ci0JCQl9Ci0JCX0KLQorCQkKIAkJaWYgKGV2ZW50cyAmIE5WUkVHX0lSUV9MSU5LKSB7CiAJCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKIAkJCW52X2xpbmtfaXJxKGRldik7CkBAIC0yMjE2LDcgKzIyNDksMTQgQEAKIAl3cml0ZWwoTlZSRUdfUk5EU0VFRF9GT1JDRSB8IChpJk5WUkVHX1JORFNFRURfTUFTSyksIGJhc2UgKyBOdlJlZ1JhbmRvbVNlZWQpOwogCXdyaXRlbChOVlJFR19VTktTRVRVUDFfVkFMLCBiYXNlICsgTnZSZWdVbmtub3duU2V0dXBSZWcxKTsKIAl3cml0ZWwoTlZSRUdfVU5LU0VUVVAyX1ZBTCwgYmFzZSArIE52UmVnVW5rbm93blNldHVwUmVnMik7Ci0Jd3JpdGVsKE5WUkVHX1BPTExfREVGQVVMVCwgYmFzZSArIE52UmVnUG9sbGluZ0ludGVydmFsKTsKKwlpZiAocG9sbF9pbnRlcnZhbCA9PSAtMSkgeworCQlpZiAob3B0aW1pemF0aW9uX21vZGUgPT0gTlZfT1BUSU1JWkFUSU9OX01PREVfVEhST1VHSFBVVCkKKwkJCXdyaXRlbChOVlJFR19QT0xMX0RFRkFVTFRfVEhST1VHSFBVVCwgYmFzZSArIE52UmVnUG9sbGluZ0ludGVydmFsKTsKKwkJZWxzZQorCQkJd3JpdGVsKE5WUkVHX1BPTExfREVGQVVMVF9DUFUsIGJhc2UgKyBOdlJlZ1BvbGxpbmdJbnRlcnZhbCk7CisJfQorCWVsc2UKKwkJd3JpdGVsKHBvbGxfaW50ZXJ2YWwgJiAweEZGRkYsIGJhc2UgKyBOdlJlZ1BvbGxpbmdJbnRlcnZhbCk7CiAJd3JpdGVsKE5WUkVHX1VOS1NFVFVQNl9WQUwsIGJhc2UgKyBOdlJlZ1Vua25vd25TZXR1cFJlZzYpOwogCXdyaXRlbCgobnAtPnBoeWFkZHIgPDwgTlZSRUdfQURBUFRDVExfUEhZU0hJRlQpfE5WUkVHX0FEQVBUQ1RMX1BIWVZBTElEfE5WUkVHX0FEQVBUQ1RMX1JVTk5JTkcsCiAJCQliYXNlICsgTnZSZWdBZGFwdGVyQ29udHJvbCk7CkBAIC0yNTAxLDcgKzI1NDEsMTEgQEAKIAl9IGVsc2UgewogCQlucC0+dHhfZmxhZ3MgPSBOVl9UWDJfVkFMSUQ7CiAJfQotCW5wLT5pcnFtYXNrID0gTlZSRUdfSVJRTUFTS19XQU5URUQ7CisJaWYgKG9wdGltaXphdGlvbl9tb2RlID09IE5WX09QVElNSVpBVElPTl9NT0RFX1RIUk9VR0hQVVQpCisJCW5wLT5pcnFtYXNrID0gTlZSRUdfSVJRTUFTS19USFJPVUdIUFVUOworCWVsc2UKKwkJbnAtPmlycW1hc2sgPSBOVlJFR19JUlFNQVNLX0NQVTsKKwogCWlmIChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfTkVFRF9USU1FUklSUSkKIAkJbnAtPmlycW1hc2sgfD0gTlZSRUdfSVJRX1RJTUVSOwogCWlmIChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfTkVFRF9MSU5LVElNRVIpIHsKQEAgLTI1MTQsMTYgKzI1NTgsMTcgQEAKIAl9CiAKIAkvKiBmaW5kIGEgc3VpdGFibGUgcGh5ICovCi0JZm9yIChpID0gMTsgaSA8IDMyOyBpKyspIHsKKwlmb3IgKGkgPSAxOyBpIDw9IDMyOyBpKyspIHsKIAkJaW50IGlkMSwgaWQyOworCQlpbnQgcGh5YWRkciA9IGkgJiAweDFGOwogCiAJCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKLQkJaWQxID0gbWlpX3J3KGRldiwgaSwgTUlJX1BIWVNJRDEsIE1JSV9SRUFEKTsKKwkJaWQxID0gbWlpX3J3KGRldiwgcGh5YWRkciwgTUlJX1BIWVNJRDEsIE1JSV9SRUFEKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CiAJCWlmIChpZDEgPCAwIHx8IGlkMSA9PSAweGZmZmYpCiAJCQljb250aW51ZTsKIAkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwotCQlpZDIgPSBtaWlfcncoZGV2LCBpLCBNSUlfUEhZU0lEMiwgTUlJX1JFQUQpOworCQlpZDIgPSBtaWlfcncoZGV2LCBwaHlhZGRyLCBNSUlfUEhZU0lEMiwgTUlJX1JFQUQpOwogCQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKIAkJaWYgKGlkMiA8IDAgfHwgaWQyID09IDB4ZmZmZikKIAkJCWNvbnRpbnVlOwpAQCAtMjUzMSwyMyArMjU3NiwxOSBAQAogCQlpZDEgPSAoaWQxICYgUEhZSUQxX09VSV9NQVNLKSA8PCBQSFlJRDFfT1VJX1NIRlQ7CiAJCWlkMiA9IChpZDIgJiBQSFlJRDJfT1VJX01BU0spID4+IFBIWUlEMl9PVUlfU0hGVDsKIAkJZHByaW50ayhLRVJOX0RFQlVHICIlczogb3BlbjogRm91bmQgUEhZICUwNHg6JTA0eCBhdCBhZGRyZXNzICVkLlxuIiwKLQkJCQlwY2lfbmFtZShwY2lfZGV2KSwgaWQxLCBpZDIsIGkpOwotCQlucC0+cGh5YWRkciA9IGk7CisJCQlwY2lfbmFtZShwY2lfZGV2KSwgaWQxLCBpZDIsIHBoeWFkZHIpOworCQlucC0+cGh5YWRkciA9IHBoeWFkZHI7CiAJCW5wLT5waHlfb3VpID0gaWQxIHwgaWQyOwogCQlicmVhazsKIAl9Ci0JaWYgKGkgPT0gMzIpIHsKLQkJLyogUEhZIGluIGlzb2xhdGUgbW9kZT8gTm8gcGh5IGF0dGFjaGVkIGFuZCB1c2VyIHdhbnRzIHRvCi0JCSAqIHRlc3QgbG9vcGJhY2s/IFZlcnkgb2RkLCBidXQgY2FuIGJlIGNvcnJlY3QuCi0JCSAqLworCWlmIChpID09IDMzKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBvcGVuOiBDb3VsZCBub3QgZmluZCBhIHZhbGlkIFBIWS5cbiIsCi0JCQkJcGNpX25hbWUocGNpX2RldikpOworCQkgICAgICAgcGNpX25hbWUocGNpX2RldikpOworCQlnb3RvIG91dF9mcmVlcmluZzsKIAl9Ci0KLQlpZiAoaSAhPSAzMikgewotCQkvKiByZXNldCBpdCAqLwotCQlwaHlfaW5pdChkZXYpOwotCX0KKwkKKwkvKiByZXNldCBpdCAqLworCXBoeV9pbml0KGRldik7CiAKIAkvKiBzZXQgZGVmYXVsdCBsaW5rIHNwZWVkIHNldHRpbmdzICovCiAJbnAtPmxpbmtzcGVlZCA9IE5WUkVHX0xJTktTUEVFRF9GT1JDRXxOVlJFR19MSU5LU1BFRURfMTA7CkBAIC0yNjg5LDYgKzI3MzAsMTAgQEAKIAogbW9kdWxlX3BhcmFtKG1heF9pbnRlcnJ1cHRfd29yaywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobWF4X2ludGVycnVwdF93b3JrLCAiZm9yY2VkZXRoIG1heGltdW0gZXZlbnRzIGhhbmRsZWQgcGVyIGludGVycnVwdCIpOworbW9kdWxlX3BhcmFtKG9wdGltaXphdGlvbl9tb2RlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhvcHRpbWl6YXRpb25fbW9kZSwgIkluIHRocm91Z2hwdXQgbW9kZSAoMCksIGV2ZXJ5IHR4ICYgcnggcGFja2V0IHdpbGwgZ2VuZXJhdGUgYW4gaW50ZXJydXB0LiBJbiBDUFUgbW9kZSAoMSksIGludGVycnVwdHMgYXJlIGNvbnRyb2xsZWQgYnkgYSB0aW1lci4iKTsKK21vZHVsZV9wYXJhbShwb2xsX2ludGVydmFsLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhwb2xsX2ludGVydmFsLCAiSW50ZXJ2YWwgZGV0ZXJtaW5lcyBob3cgZnJlcXVlbnQgdGltZXIgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBieSBbKHRpbWVfaW5fbWljcm9fc2VjcyAqIDEwMCkgLyAoMl4xMCldLiBNaW4gaXMgMCBhbmQgTWF4IGlzIDY1NTM1LiIpOwogCiBNT0RVTEVfQVVUSE9SKCJNYW5mcmVkIFNwcmF1bCA8bWFuZnJlZEBjb2xvcmZ1bGxpZmUuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJSZXZlcnNlIEVuZ2luZWVyZWQgbkZvcmNlIGV0aGVybmV0IGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKaW5kZXggOTM0MmQ1Yi4uZjVkNDlhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZjYy5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmNjLmMKaW5kZXggYTk0MGI5Ni4uZTY3YjFkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmNjLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmNjLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9pbW1hcF9jcG0yLmg+CiAjaW5jbHVkZSA8YXNtL21wYzgyNjAuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZlYy5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmVjLmMKaW5kZXggNWVmNGU4NC4uMmU4ZjQ0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmVjLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmVjLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtc2NjLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1zY2MuYwppbmRleCBkOGM2ZTljLi5hMzg5N2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1zY2MuYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1zY2MuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKaW5kZXggNTRkMjk0YS4uZTNhMzI5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwpAQCAtMTI2LDggKzEyNiw4IEBACiBzdGF0aWMgdm9pZCBhZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGluaXRfcmVnaXN0ZXJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBpbml0X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgZ2Zhcl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOwotc3RhdGljIGludCBnZmFyX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOworc3RhdGljIGludCBnZmFyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworc3RhdGljIGludCBnZmFyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKIHN0YXRpYyB2b2lkIGZyZWVfc2tiX3Jlc291cmNlcyhzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2KTsKIHN0YXRpYyB2b2lkIGdmYXJfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZ2Zhcl9zZXRfaGFzaF9mb3JfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqYWRkcik7CkBAIC0xNTYsMTIgKzE1NiwxMSBAQAogCiAvKiBTZXQgdXAgdGhlIGV0aGVybmV0IGRldmljZSBzdHJ1Y3R1cmUsIHByaXZhdGUgZGF0YSwKICAqIGFuZCBhbnl0aGluZyBlbHNlIHdlIG5lZWQgYmVmb3JlIHdlIHN0YXJ0ICovCi1zdGF0aWMgaW50IGdmYXJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBnZmFyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJdTMyIHRlbXB2YWw7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IE5VTEw7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXZpY2UpOwogCXN0cnVjdCBnaWFuZmFyX3BsYXRmb3JtX2RhdGEgKmVpbmZvOwogCXN0cnVjdCByZXNvdXJjZSAqcjsKIAlpbnQgaWR4OwpAQCAtMjA4LDcgKzIwNyw3IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2aWNlLCBkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKIAkvKiBTdG9wIHRoZSBETUEgZW5naW5lIG5vdywgaW4gY2FzZSBpdCB3YXMgcnVubmluZyBiZWZvcmUgKi8KIAkvKiAoVGhlIGZpcm13YXJlIGNvdWxkIGhhdmUgdXNlZCBpdCwgYW5kIGxlZnQgaXQgcnVubmluZykuICovCkBAIC0yNDUsNyArMjQ0LDcgQEAKIAlkZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKSAocHJpdi0+cmVncyk7CiAKIAlTRVRfTU9EVUxFX09XTkVSKGRldik7Ci0JU0VUX05FVERFVl9ERVYoZGV2LCBkZXZpY2UpOworCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAKIAkvKiBGaWxsIGluIHRoZSBkZXYgc3RydWN0dXJlICovCiAJZGV2LT5vcGVuID0gZ2Zhcl9lbmV0X29wZW47CkBAIC0zNzcsMTIgKzM3NiwxMiBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgZ2Zhcl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBnZmFyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2aWNlLCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCWlvdW5tYXAoKHZvaWQgKikgcHJpdi0+cmVncyk7CiAJZnJlZV9uZXRkZXYoZGV2KTsKQEAgLTE4NjEsMTEgKzE4NjAsMTIgQEAKIH0KIAogLyogU3RydWN0dXJlIGZvciBhIGRldmljZSBkcml2ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBnZmFyX2RyaXZlciA9IHsKLQkubmFtZSA9ICJmc2wtZ2lhbmZhciIsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGdmYXJfZHJpdmVyID0gewogCS5wcm9iZSA9IGdmYXJfcHJvYmUsCiAJLnJlbW92ZSA9IGdmYXJfcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lID0gImZzbC1naWFuZmFyIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgZ2Zhcl9pbml0KHZvaWQpCkBAIC0xODc1LDcgKzE4NzUsNyBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBkcml2ZXJfcmVnaXN0ZXIoJmdmYXJfZHJpdmVyKTsKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmdmYXJfZHJpdmVyKTsKIAogCWlmIChlcnIpCiAJCWdmYXJfbWRpb19leGl0KCk7CkBAIC0xODg1LDcgKzE4ODUsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZ2Zhcl9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmdmYXJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZ2Zhcl9kcml2ZXIpOwogCWdmYXJfbWRpb19leGl0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX21paS5jCmluZGV4IDcyNjMzOTUuLjk1NDQyNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJaWYgKE5VTEwgPT0gZGV2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW5ld19idXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWlpX2J1cyksIEdGUF9LRVJORUwpOworCW5ld19idXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWlpX2J1cyksIEdGUF9LRVJORUwpOwogCiAJaWYgKE5VTEwgPT0gbmV3X2J1cykKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ndDk2MTAwZXRoLmMgYi9kcml2ZXJzL25ldC9ndDk2MTAwZXRoLmMKaW5kZXggNjY2Y2ZiYi4uNTk1OGE2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ3Q5NjEwMGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2d0OTYxMDBldGguYwpAQCAtNzIsOCArNzIsNiBAQAogc3RhdGljIHZvaWQgZHVtcF9yeF9kZXNjKGludCBkYmdfbHZsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaSk7CiBzdGF0aWMgdm9pZCBkdW1wX3NrYihpbnQgZGJnX2x2bCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0YXRpYyB2b2lkIGR1bXBfaHdfYWRkcihpbnQgZGJnX2x2bCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSBjb25zdCBjaGFyKiBwZngsIHVuc2lnbmVkIGNoYXIqIGFkZHJfc3RyKTsKIHN0YXRpYyB2b2lkIHVwZGF0ZV9zdGF0cyhzdHJ1Y3QgZ3Q5NjEwMF9wcml2YXRlICpncCk7CiBzdGF0aWMgdm9pZCBhYm9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgYWJvcnRfYml0cyk7CiBzdGF0aWMgdm9pZCBoYXJkX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0zMzQsMTMgKzMzMiwxMyBAQAogCiBzdGF0aWMgdm9pZAogZHVtcF9od19hZGRyKGludCBkYmdfbHZsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyKiBwZngsCi0JICAgICB1bnNpZ25lZCBjaGFyKiBhZGRyX3N0cikKKwkgICAgIGNvbnN0IGNoYXIqIGZ1bmMsIHVuc2lnbmVkIGNoYXIqIGFkZHJfc3RyKQogewogCWludCBpOwogCWNoYXIgYnVmWzEwMF0sIG9jdGV0WzVdOwogICAgIAogCWlmIChkYmdfbHZsIDw9IEdUOTYxMDBfREVCVUcpIHsKLQkJc3RyY3B5KGJ1ZiwgcGZ4KTsKKwkJc3ByaW50ZihidWYsIHBmeCwgZnVuYyk7CiAJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKIAkJCXNwcmludGYob2N0ZXQsICIlMi4yeCVzIiwKIAkJCQlhZGRyX3N0cltpXSwgaTw1ID8gIjoiIDogIlxuIik7CkBAIC03MDgsNyArNzA2LDcgQEAKIAogCWluZm8oIiVzIGZvdW5kIGF0IDB4JXgsIGlycSAlZFxuIiwKIAkgICAgIGNoaXBfbmFtZShncC0+Y2hpcF9yZXYpLCBndGlmLT5pb2Jhc2UsIGd0aWYtPmlycSk7Ci0JZHVtcF9od19hZGRyKDAsIGRldiwgIkhXIEFkZHJlc3MgIiwgZGV2LT5kZXZfYWRkcik7CisJZHVtcF9od19hZGRyKDAsIGRldiwgIiVzOiBIVyBBZGRyZXNzICIsIF9fRlVOQ1RJT05fXywgZGV2LT5kZXZfYWRkcik7CiAJaW5mbygiJXMgY2hpcCByZXZpc2lvbj0lZFxuIiwgY2hpcF9uYW1lKGdwLT5jaGlwX3JldiksIGdwLT5jaGlwX3Jldik7CiAJaW5mbygiJXMgZXRoZXJuZXQgcG9ydCAlZFxuIiwgY2hpcF9uYW1lKGdwLT5jaGlwX3JldiksIGdwLT5wb3J0X251bSk7CiAJaW5mbygiZXh0ZXJuYWwgUEhZIElEMT0weCUwNHgsIElEMj0weCUwNHhcbiIsIHBoeV9pZDEsIHBoeV9pZDIpOwpAQCAtMTQ4OCw3ICsxNDg2LDcgQEAKIAkJZ3Q5NjEwMF9hZGRfaGFzaF9lbnRyeShkZXYsIGRldi0+ZGV2X2FkZHIpOwogCiAJCWZvciAobWNwdHIgPSBkZXYtPm1jX2xpc3Q7IG1jcHRyOyBtY3B0ciA9IG1jcHRyLT5uZXh0KSB7Ci0JCQlkdW1wX2h3X2FkZHIoMiwgZGV2LCBfX0ZVTkNUSU9OX18gIjogYWRkcj0iLAorCQkJZHVtcF9od19hZGRyKDIsIGRldiwgIiVzOiBhZGRyPSIsIF9fRlVOQ1RJT05fXywKIAkJCQkgICAgIG1jcHRyLT5kbWlfYWRkcik7CiAJCQlndDk2MTAwX2FkZF9oYXNoX2VudHJ5KGRldiwgbWNwdHItPmRtaV9hZGRyKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtdmV0aC5jIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCmluZGV4IGJlMTkxZDguLmNlYjk4ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libXZldGguYworKysgYi9kcml2ZXJzL25ldC9pYm12ZXRoLmMKQEAgLTU4LDcgKzU4LDcgQEAKIAogI2luY2x1ZGUgImlibXZldGguaCIKIAotI2RlZmluZSBERUJVRyAxCisjdW5kZWYgREVCVUcKIAogI2RlZmluZSBpYm12ZXRoX3ByaW50ayhmbXQsIGFyZ3MuLi4pIFwKICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIgZm10LCBfX0ZJTEVfXywgIyMgYXJncykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvc2ExMTAwX2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3NhMTEwMF9pci5jCmluZGV4IDc2ZTBiOWYuLjYzZDM4ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc2ExMTAwX2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9zYTExMDBfaXIuYwpAQCAtMjkxLDkgKzI5MSw5IEBACiAvKgogICogU3VzcGVuZCB0aGUgSXJEQSBpbnRlcmZhY2UuCiAgKi8KLXN0YXRpYyBpbnQgc2ExMTAwX2lyZGFfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpfZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNhMTEwMF9pcmRhX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzYTExMDBfaXJkYSAqc2k7CiAKIAlpZiAoIWRldikKQEAgLTMxNiw5ICszMTYsOSBAQAogLyoKICAqIFJlc3VtZSB0aGUgSXJEQSBpbnRlcmZhY2UuCiAgKi8KLXN0YXRpYyBpbnQgc2ExMTAwX2lyZGFfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IHNhMTEwMF9pcmRhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzYTExMDBfaXJkYSAqc2k7CiAKIAlpZiAoIWRldikKQEAgLTg4Niw5ICs4ODYsOCBAQAogCXJldHVybiBpby0+aGVhZCA/IDAgOiAtRU5PTUVNOwogfQogCi1zdGF0aWMgaW50IHNhMTEwMF9pcmRhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IHNhMTEwMF9pcmRhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBzYTExMDBfaXJkYSAqc2k7CiAJdW5zaWduZWQgaW50IGJhdWRyYXRlX21hc2s7CkBAIC05NjcsNyArOTY2LDcgQEAKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIgPT0gMCkKLQkJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGRldik7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKIAlpZiAoZXJyKSB7CiAgZXJyX21lbV81OgpAQCAtOTg1LDkgKzk4NCw5IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBzYTExMDBfaXJkYV9yZW1vdmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgc2ExMTAwX2lyZGFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAlpZiAoZGV2KSB7CiAJCXN0cnVjdCBzYTExMDBfaXJkYSAqc2kgPSBkZXYtPnByaXY7CkBAIC0xMDA0LDEzICsxMDAzLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzYTExMDBpcl9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInNhMTF4MC1pciIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzYTExMDBpcl9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNhMTEwMF9pcmRhX3Byb2JlLAogCS5yZW1vdmUJCT0gc2ExMTAwX2lyZGFfcmVtb3ZlLAogCS5zdXNwZW5kCT0gc2ExMTAwX2lyZGFfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNhMTEwMF9pcmRhX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAic2ExMXgwLWlyIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc2ExMTAwX2lyZGFfaW5pdCh2b2lkKQpAQCAtMTAyMywxMiArMTAyMywxMiBAQAogCWlmIChwb3dlcl9sZXZlbCA+IDMpCiAJCXBvd2VyX2xldmVsID0gMzsKIAotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnNhMTEwMGlyX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2ExMTAwaXJfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNhMTEwMF9pcmRhX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmc2ExMTAwaXJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2ExMTAwaXJfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoc2ExMTAwX2lyZGFfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCmluZGV4IGExZDIwN2YuLmVjOTRlY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCkBAIC0yMTQsMTQgKzIxNCwxNSBAQAogCiAvKiBQb3dlciBNYW5hZ2VtZW50ICovCiAKLXN0YXRpYyBpbnQgc21zY19pcmNjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwotc3RhdGljIGludCBzbXNjX2lyY2NfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldik7CitzdGF0aWMgaW50IHNtc2NfaXJjY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKK3N0YXRpYyBpbnQgc21zY19pcmNjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc21zY19pcmNjX2RyaXZlciA9IHsKLQkubmFtZQkJPSBTTVNDX0lSQ0MyX0RSSVZFUl9OQU1FLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc21zY19pcmNjX2RyaXZlciA9IHsKIAkuc3VzcGVuZAk9IHNtc2NfaXJjY19zdXNwZW5kLAogCS5yZXN1bWUJCT0gc21zY19pcmNjX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSBTTVNDX0lSQ0MyX0RSSVZFUl9OQU1FLAorCX0sCiB9OwogCiAvKiBUcmFuc2NlaXZlcnMgZm9yIFNNU0MtaXJjYyAqLwpAQCAtMzQ2LDcgKzM0Nyw3IEBACiAKIAlJUkRBX0RFQlVHKDEsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKIAotCXJldCA9IGRyaXZlcl9yZWdpc3Rlcigmc21zY19pcmNjX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzbXNjX2lyY2NfZHJpdmVyKTsKIAlpZiAocmV0KSB7CiAJCUlSREFfRVJST1IoIiVzLCBDYW4ndCByZWdpc3RlciBkcml2ZXIhXG4iLCBkcml2ZXJfbmFtZSk7CiAJCXJldHVybiByZXQ7CkBAIC0zNzgsNyArMzc5LDcgQEAKIAl9CiAKIAlpZiAocmV0KQotCQlkcml2ZXJfdW5yZWdpc3Rlcigmc21zY19pcmNjX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzbXNjX2lyY2NfZHJpdmVyKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC00OTEsNyArNDkyLDcgQEAKIAkJZXJyID0gUFRSX0VSUihzZWxmLT5wbGRldik7CiAJCWdvdG8gZXJyX291dDU7CiAJfQotCWRldl9zZXRfZHJ2ZGF0YSgmc2VsZi0+cGxkZXYtPmRldiwgc2VsZik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoc2VsZi0+cGxkZXYsIHNlbGYpOwogCiAJSVJEQV9NRVNTQUdFKCJJckRBOiBSZWdpc3RlcmVkIGRldmljZSAlc1xuIiwgZGV2LT5uYW1lKTsKIAlkZXZfY291bnQrKzsKQEAgLTE2ODUsOSArMTY4Niw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc21zY19pcmNjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNtc2NfaXJjY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBzbXNjX2lyY2NfY2IgKnNlbGYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc21zY19pcmNjX2NiICpzZWxmID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmICghc2VsZi0+aW8uc3VzcGVuZGVkKSB7CiAJCUlSREFfREVCVUcoMSwgIiVzLCBTdXNwZW5kaW5nXG4iLCBkcml2ZXJfbmFtZSk7CkBAIC0xNzA2LDkgKzE3MDcsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNtc2NfaXJjY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzbXNjX2lyY2NfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qgc21zY19pcmNjX2NiICpzZWxmID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNtc2NfaXJjY19jYiAqc2VsZiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoc2VsZi0+aW8uc3VzcGVuZGVkKSB7CiAJCUlSREFfREVCVUcoMSwgIiVzLCBXYWtpbmcgdXBcbiIsIGRyaXZlcl9uYW1lKTsKQEAgLTE3ODgsNyArMTc4OSw3IEBACiAJCQlzbXNjX2lyY2NfY2xvc2UoZGV2X3NlbGZbaV0pOwogCX0KIAotCWRyaXZlcl91bnJlZ2lzdGVyKCZzbXNjX2lyY2NfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc21zY19pcmNjX2RyaXZlcik7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9qYXp6c29uaWMuYyBiL2RyaXZlcnMvbmV0L2phenpzb25pYy5jCmluZGV4IDJmYjMxMDEuLmIwMzliZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2phenpzb25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2phenpzb25pYy5jCkBAIC0xOTQsNyArMTk0LDcgQEAKICAqIFByb2JlIGZvciBhIFNPTklDIGV0aGVybmV0IGNvbnRyb2xsZXIgb24gYSBNaXBzIEphenogYm9hcmQuCiAgKiBBY3R1YWxseSBwcm9iaW5nIGlzIHN1cGVyZmx1b3VzIGJ1dCB3ZSdyZSBwYXJhbm9pZC4KICAqLwotc3RhdGljIGludCBfX2luaXQgamF6el9zb25pY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9faW5pdCBqYXp6X3NvbmljX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgc29uaWNfbG9jYWwgKmxwOwpAQCAtMjEyLDggKzIxMiw4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWxwLT5kZXZpY2UgPSBkZXZpY2U7Ci0JU0VUX05FVERFVl9ERVYoZGV2LCBkZXZpY2UpOworCWxwLT5kZXZpY2UgPSAmcGRldi0+ZGV2OworCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAgCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKIAogCW5ldGRldl9ib290X3NldHVwX2NoZWNrKGRldik7CkBAIC0yNjQsOSArMjY0LDkgQEAKIAogI2luY2x1ZGUgInNvbmljLmMiCiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IGphenpfc29uaWNfZGV2aWNlX3JlbW92ZSAoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2RldmV4aXQgamF6el9zb25pY19kZXZpY2VfcmVtb3ZlIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZpY2UtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgc29uaWNfbG9jYWwqIGxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2IChkZXYpOwpAQCAtMjc4LDE4ICsyNzgsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGphenpfc29uaWNfZHJpdmVyID0gewotCS5uYW1lCT0gamF6el9zb25pY19zdHJpbmcsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGphenpfc29uaWNfZHJpdmVyID0gewogCS5wcm9iZQk9IGphenpfc29uaWNfcHJvYmUsCiAJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGphenpfc29uaWNfZGV2aWNlX3JlbW92ZSksCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSBqYXp6X3NvbmljX3N0cmluZywKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgamF6el9zb25pY19pbml0X21vZHVsZSh2b2lkKQogewogCWludCBlcnI7CiAKLQlpZiAoKGVyciA9IGRyaXZlcl9yZWdpc3RlcigmamF6el9zb25pY19kcml2ZXIpKSkgeworCWlmICgoZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZqYXp6X3NvbmljX2RyaXZlcikpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRHJpdmVyIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTMxMyw3ICszMTQsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgamF6el9zb25pY19jbGVhbnVwX21vZHVsZSh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZqYXp6X3NvbmljX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmphenpfc29uaWNfZHJpdmVyKTsKIAogCWlmIChqYXp6X3NvbmljX2RldmljZSkgewogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihqYXp6X3NvbmljX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNzb25pYy5jIGIvZHJpdmVycy9uZXQvbWFjc29uaWMuYwppbmRleCA5ZWY0NTkyLi4wMmQ1YzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNzb25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L21hY3NvbmljLmMKQEAgLTUyNSw3ICs1MjUsNyBAQAogCXJldHVybiBtYWNzb25pY19pbml0KGRldik7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IG1hY19zb25pY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9faW5pdCBtYWNfc29uaWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHNvbmljX2xvY2FsICpscDsKQEAgLTUzNyw4ICs1MzcsOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlscC0+ZGV2aWNlID0gZGV2aWNlOwotCVNFVF9ORVRERVZfREVWKGRldiwgZGV2aWNlKTsKKwlscC0+ZGV2aWNlID0gJmRldmljZS0+ZGV2OworCVNFVF9ORVRERVZfREVWKGRldiwgJmRldmljZS0+ZGV2KTsKICAJU0VUX01PRFVMRV9PV05FUihkZXYpOwogCiAJLyogVGhpcyB3aWxsIGNhdGNoIGZhdGFsIHN0dWZmIGxpa2UgLUVOT01FTSBhcyB3ZWxsIGFzIHN1Y2Nlc3MgKi8KQEAgLTU3OSw5ICs1NzksOSBAQAogCiAjaW5jbHVkZSAic29uaWMuYyIKIAotc3RhdGljIGludCBfX2RldmV4aXQgbWFjX3NvbmljX2RldmljZV9yZW1vdmUgKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1hY19zb25pY19kZXZpY2VfcmVtb3ZlIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldmljZS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSk7CiAJc3RydWN0IHNvbmljX2xvY2FsKiBscCA9IG5ldGRldl9wcml2KGRldik7CiAKIAl1bnJlZ2lzdGVyX25ldGRldiAoZGV2KTsKQEAgLTU5MiwxOCArNTkyLDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBtYWNfc29uaWNfZHJpdmVyID0gewotCS5uYW1lICAgPSBtYWNfc29uaWNfc3RyaW5nLAotCS5idXMgICAgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYWNfc29uaWNfZHJpdmVyID0gewogCS5wcm9iZSAgPSBtYWNfc29uaWNfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG1hY19zb25pY19kZXZpY2VfcmVtb3ZlKSwKKwkuZHJpdmVyCT0geworCQkubmFtZSA9IG1hY19zb25pY19zdHJpbmcsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG1hY19zb25pY19pbml0X21vZHVsZSh2b2lkKQogewogCWludCBlcnI7CiAKLQlpZiAoKGVyciA9IGRyaXZlcl9yZWdpc3RlcigmbWFjX3NvbmljX2RyaXZlcikpKSB7CisJaWYgKChlcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1hY19zb25pY19kcml2ZXIpKSkgewogCQlwcmludGsoS0VSTl9FUlIgIkRyaXZlciByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC02MjgsNyArNjI5LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IG1hY19zb25pY19jbGVhbnVwX21vZHVsZSh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZtYWNfc29uaWNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWFjX3NvbmljX2RyaXZlcik7CiAKIAlpZiAobWFjX3NvbmljX2RldmljZSkgewogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihtYWNfc29uaWNfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMgYi9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCmluZGV4IDcxZjJjNjcuLjNjYjliM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYwpAQCAtMTM4Nyw5ICsxMzg3LDggQEAKICAqIElucHV0IDoJc3RydWN0IGRldmljZSAqCiAgKiBPdXRwdXQgOgktRU5PTUVNIGlmIGZhaWxlZCAsIDAgaWYgc3VjY2VzcwogICovCi1zdGF0aWMgaW50IG12NjQzeHhfZXRoX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRkZXYpCitzdGF0aWMgaW50IG12NjQzeHhfZXRoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZGV2KTsKIAlzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSAqcGQ7CiAJaW50IHBvcnRfbnVtID0gcGRldi0+aWQ7CiAJc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXA7CkBAIC0xNDAyLDcgKzE0MDEsNyBAQAogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZGV2LCBkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKIAltcCA9IG5ldGRldl9wcml2KGRldik7CiAKQEAgLTE1NDYsMjEgKzE1NDUsMjAgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG12NjQzeHhfZXRoX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZGV2KQorc3RhdGljIGludCBtdjY0M3h4X2V0aF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAogCWZyZWVfbmV0ZGV2KGRldik7Ci0JZGV2X3NldF9kcnZkYXRhKGRkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG12NjQzeHhfZXRoX3NoYXJlZF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZGV2KQorc3RhdGljIGludCBtdjY0M3h4X2V0aF9zaGFyZWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCiAJcHJpbnRrKEtFUk5fTk9USUNFICJNVi02NDN4eCAxMC8xMDAvMTAwMCBFdGhlcm5ldCBEcml2ZXJcbiIpOwpAQCAtMTU3OCw3ICsxNTc2LDcgQEAKIAogfQogCi1zdGF0aWMgaW50IG12NjQzeHhfZXRoX3NoYXJlZF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGRldikKK3N0YXRpYyBpbnQgbXY2NDN4eF9ldGhfc2hhcmVkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWlvdW5tYXAobXY2NDN4eF9ldGhfc2hhcmVkX2Jhc2UpOwogCW12NjQzeHhfZXRoX3NoYXJlZF9iYXNlID0gTlVMTDsKQEAgLTE1ODYsMTggKzE1ODQsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG12NjQzeHhfZXRoX2RyaXZlciA9IHsKLQkubmFtZSA9IE1WNjQzWFhfRVRIX05BTUUsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG12NjQzeHhfZXRoX2RyaXZlciA9IHsKIAkucHJvYmUgPSBtdjY0M3h4X2V0aF9wcm9iZSwKIAkucmVtb3ZlID0gbXY2NDN4eF9ldGhfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gTVY2NDNYWF9FVEhfTkFNRSwKKwl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG12NjQzeHhfZXRoX3NoYXJlZF9kcml2ZXIgPSB7Ci0JLm5hbWUgPSBNVjY0M1hYX0VUSF9TSEFSRURfTkFNRSwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXY2NDN4eF9ldGhfc2hhcmVkX2RyaXZlciA9IHsKIAkucHJvYmUgPSBtdjY0M3h4X2V0aF9zaGFyZWRfcHJvYmUsCiAJLnJlbW92ZSA9IG12NjQzeHhfZXRoX3NoYXJlZF9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBNVjY0M1hYX0VUSF9TSEFSRURfTkFNRSwKKwl9LAogfTsKIAogLyoKQEAgLTE2MTMsMTEgKzE2MTMsMTEgQEAKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IGRyaXZlcl9yZWdpc3RlcigmbXY2NDN4eF9ldGhfc2hhcmVkX2RyaXZlcik7CisJcmMgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm12NjQzeHhfZXRoX3NoYXJlZF9kcml2ZXIpOwogCWlmICghcmMpIHsKLQkJcmMgPSBkcml2ZXJfcmVnaXN0ZXIoJm12NjQzeHhfZXRoX2RyaXZlcik7CisJCXJjID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtdjY0M3h4X2V0aF9kcml2ZXIpOwogCQlpZiAocmMpCi0JCQlkcml2ZXJfdW5yZWdpc3RlcigmbXY2NDN4eF9ldGhfc2hhcmVkX2RyaXZlcik7CisJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXY2NDN4eF9ldGhfc2hhcmVkX2RyaXZlcik7CiAJfQogCXJldHVybiByYzsKIH0KQEAgLTE2MzMsOCArMTYzMyw4IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9fZXhpdCBtdjY0M3h4X2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm12NjQzeHhfZXRoX2RyaXZlcik7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm12NjQzeHhfZXRoX3NoYXJlZF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtdjY0M3h4X2V0aF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtdjY0M3h4X2V0aF9zaGFyZWRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQobXY2NDN4eF9pbml0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zYWE5NzMwLmMgYi9kcml2ZXJzL25ldC9zYWE5NzMwLmMKaW5kZXggMTEwZTc3Ny4uYjJhY2VkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2FhOTczMC5jCisrKyBiL2RyaXZlcnMvbmV0L3NhYTk3MzAuYwpAQCAtMSw4ICsxLDggQEAKIC8qCi0gKiBDYXJzdGVuIExhbmdnYWFyZCwgY2Fyc3RlbmxAbWlwcy5jb20KLSAqIENvcHlyaWdodCAoQykgMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwNSAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKglBdXRob3JzOiBDYXJzdGVuIExhbmdnYWFyZCA8Y2Fyc3RlbmxAbWlwcy5jb20+CisgKgkJIE1hY2llaiBXLiBSb3p5Y2tpIDxtYWNyb0BtaXBzLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKQEAgLTE3LDE1ICsxNywxMyBAQAogICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgogICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKICAqIFNBQTk3MzAgZXRoZXJuZXQgZHJpdmVyLgogICoKICAqIENoYW5nZXM6Ci0gKiBBbmdlbG8gRGVsbCdBZXJhIDxidWZmZXJAYW50aWZvcmsub3JnPiA6IENvbnZlcnNpb24gdG8gdGhlIG5ldyBQQ0kgQVBJIChwY2lfZHJpdmVyKS4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVyc2lvbiB0byBzcGlubG9ja3MuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9yIGhhbmRsaW5nIGZpeGVzLgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgKiBBbmdlbG8gRGVsbCdBZXJhIDxidWZmZXJAYW50aWZvcmsub3JnPiA6CUNvbnZlcnNpb24gdG8gdGhlIG5ldyBQQ0kgQVBJCisgKgkJCQkJCShwY2lfZHJpdmVyKS4KKyAqCQkJCQkJQ29udmVyc2lvbiB0byBzcGlubG9ja3MuCisgKgkJCQkJCUVycm9yIGhhbmRsaW5nIGZpeGVzLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0zNiw4ICszNCwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKwogI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9wcm9tLmg+CiAKICNpbmNsdWRlICJzYWE5NzMwLmgiCkBAIC01MSw4ICs1Miw4IEBACiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRSAic2FhOTczMCIKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNhYTk3MzBfcGNpX3RibFtdID0gewotCXsgUENJX1ZFTkRPUl9JRF9QSElMSVBTLCBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBOTM3MCwKLSAgICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwVUwgfSwKKwl7IFBDSV9WRU5ET1JfSURfUEhJTElQUywgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTk3MzAsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwVUwgfSwKIAl7IDAsIH0KIH07CiAKQEAgLTYxLDUwICs2Miw0OCBAQAogLyogTm9uLXplcm8gb25seSBpZiB0aGUgY3VycmVudCBjYXJkIGlzIGEgUENJIHdpdGggQklPUy1zZXQgSVJRLiAqLwogc3RhdGljIHVuc2lnbmVkIGludCBwY2lfaXJxX2xpbmU7CiAKLSNkZWZpbmUgSU5MKGEpICAgICBpbmwoKHVuc2lnbmVkIGxvbmcpYSkKLSNkZWZpbmUgT1VUTCh4LGEpICBvdXRsKHgsKHVuc2lnbmVkIGxvbmcpYSkKLQogc3RhdGljIHZvaWQgZXZtX3NhYTk3MzBfZW5hYmxlX2xhbl9pbnQoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwKQogewotCU9VVEwoSU5MKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0QmxvY2sxKSB8IEVWTV9MQU5fSU5ULAorCW91dGwocmVhZGwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEpIHwgRVZNX0xBTl9JTlQsCiAJICAgICAmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEJsb2NrMSk7Ci0JT1VUTChJTkwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRTdGF0dXMxKSB8IEVWTV9MQU5fSU5ULAorCW91dGwocmVhZGwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRTdGF0dXMxKSB8IEVWTV9MQU5fSU5ULAogCSAgICAgJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRTdGF0dXMxKTsKLQlPVVRMKElOTCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEVuYWJsZTEpIHwgRVZNX0xBTl9JTlQgfAorCW91dGwocmVhZGwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRFbmFibGUxKSB8IEVWTV9MQU5fSU5UIHwKIAkgICAgIEVWTV9NQVNURVJfRU4sICZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0RW5hYmxlMSk7CiB9CisKIHN0YXRpYyB2b2lkIGV2bV9zYWE5NzMwX2Rpc2FibGVfbGFuX2ludChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHApCiB7Ci0JT1VUTChJTkwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEpICYgfkVWTV9MQU5fSU5ULAorCW91dGwocmVhZGwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEpICYgfkVWTV9MQU5fSU5ULAogCSAgICAgJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEpOwotCU9VVEwoSU5MKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0RW5hYmxlMSkgJiB+RVZNX0xBTl9JTlQsCisJb3V0bChyZWFkbCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEVuYWJsZTEpICYgfkVWTV9MQU5fSU5ULAogCSAgICAgJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRFbmFibGUxKTsKIH0KIAogc3RhdGljIHZvaWQgZXZtX3NhYTk3MzBfY2xlYXJfbGFuX2ludChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHApCiB7Ci0JT1VUTChFVk1fTEFOX0lOVCwgJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRTdGF0dXMxKTsKKwlvdXRsKEVWTV9MQU5fSU5ULCAmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdFN0YXR1czEpOwogfQogCiBzdGF0aWMgdm9pZCBldm1fc2FhOTczMF9ibG9ja19sYW5faW50KHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKIHsKLQlPVVRMKElOTCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEJsb2NrMSkgJiB+RVZNX0xBTl9JTlQsCisJb3V0bChyZWFkbCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEJsb2NrMSkgJiB+RVZNX0xBTl9JTlQsCiAJICAgICAmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEJsb2NrMSk7CiB9CiAKIHN0YXRpYyB2b2lkIGV2bV9zYWE5NzMwX3VuYmxvY2tfbGFuX2ludChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHApCiB7Ci0JT1VUTChJTkwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEpIHwgRVZNX0xBTl9JTlQsCisJb3V0bChyZWFkbCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEJsb2NrMSkgfCBFVk1fTEFOX0lOVCwKIAkgICAgICZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0QmxvY2sxKTsKIH0KIAotc3RhdGljIHZvaWQgc2hvd19zYWE5NzMwX3JlZ3Moc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwKQorc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfdXNlZF9fIHNob3dfc2FhOTczMF9yZWdzKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKIHsKIAlpbnQgaSwgajsKLQlwcmludGsoIlR4bUJ1ZmZlckEgPSAleFxuIiwgbHAtPlR4bUJ1ZmZlclswXVswXSk7Ci0JcHJpbnRrKCJUeG1CdWZmZXJCID0gJXhcbiIsIGxwLT5UeG1CdWZmZXJbMV1bMF0pOwotCXByaW50aygiUmN2QnVmZmVyQSA9ICV4XG4iLCBscC0+UmN2QnVmZmVyWzBdWzBdKTsKLQlwcmludGsoIlJjdkJ1ZmZlckIgPSAleFxuIiwgbHAtPlJjdkJ1ZmZlclsxXVswXSk7CisJcHJpbnRrKCJUeG1CdWZmZXJBID0gJXBcbiIsIGxwLT5UeG1CdWZmZXJbMF1bMF0pOworCXByaW50aygiVHhtQnVmZmVyQiA9ICVwXG4iLCBscC0+VHhtQnVmZmVyWzFdWzBdKTsKKwlwcmludGsoIlJjdkJ1ZmZlckEgPSAlcFxuIiwgbHAtPlJjdkJ1ZmZlclswXVswXSk7CisJcHJpbnRrKCJSY3ZCdWZmZXJCID0gJXBcbiIsIGxwLT5SY3ZCdWZmZXJbMV1bMF0pOwogCWZvciAoaSA9IDA7IGkgPCBMQU5fU0FBOTczMF9CVUZGRVJTOyBpKyspIHsKIAkJZm9yIChqID0gMDsgaiA8IExBTl9TQUE5NzMwX1RYTV9RX1NJWkU7IGorKykgewogCQkJcHJpbnRrKCJUeG1CdWZmZXJbJWRdWyVkXSA9ICV4XG4iLCBpLCBqLApAQCAtMTIwLDEzICsxMTksMTMgQEAKIAkJfQogCX0KIAlwcmludGsoImxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0QmxvY2sxKSk7CisJICAgICAgIHJlYWRsKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0QmxvY2sxKSk7CiAJcHJpbnRrKCJscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0U3RhdHVzMSA9ICV4XG4iLAotCSAgICAgICBJTkwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRTdGF0dXMxKSk7CisJICAgICAgIHJlYWRsKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0U3RhdHVzMSkpOwogCXByaW50aygibHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEVuYWJsZTEgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0RW5hYmxlMSkpOworCSAgICAgICByZWFkbCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEVuYWJsZTEpKTsKIAlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5PazJVc2UgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+T2syVXNlKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+T2syVXNlKSk7CiAJcHJpbnRrKCJscC0+TmV4dFR4bUJ1ZmZlckluZGV4ID0gJXhcbiIsIGxwLT5OZXh0VHhtQnVmZmVySW5kZXgpOwogCXByaW50aygibHAtPk5leHRUeG1QYWNrZXRJbmRleCA9ICV4XG4iLCBscC0+TmV4dFR4bVBhY2tldEluZGV4KTsKIAlwcmludGsoImxwLT5QZW5kaW5nVHhtQnVmZmVySW5kZXggPSAleFxuIiwKQEAgLTEzNCwyMyArMTMzLDIzIEBACiAJcHJpbnRrKCJscC0+UGVuZGluZ1R4bVBhY2tldEluZGV4ID0gJXhcbiIsCiAJICAgICAgIGxwLT5QZW5kaW5nVHhtUGFja2V0SW5kZXgpOwogCXByaW50aygibHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkxhbkRtYUN0bCA9ICV4XG4iLAotCSAgICAgICBJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5MYW5EbWFDdGwpKTsKKwkgICAgICAgcmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5MYW5EbWFDdGwpKTsKIAlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFTdGF0dXMgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hU3RhdHVzKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hU3RhdHVzKSk7CiAJcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtQ3RsID0gJXhcbiIsCi0JICAgICAgIElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkNhbUN0bCkpOworCSAgICAgICByZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkNhbUN0bCkpOwogCXByaW50aygibHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlR4Q3RsID0gJXhcbiIsCi0JICAgICAgIElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlR4Q3RsKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+VHhDdGwpKTsKIAlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5UeFN0YXR1cyA9ICV4XG4iLAotCSAgICAgICBJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5UeFN0YXR1cykpOworCSAgICAgICByZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlR4U3RhdHVzKSk7CiAJcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+UnhDdGwgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+UnhDdGwpKTsKKwkgICAgICAgcmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5SeEN0bCkpOwogCXByaW50aygibHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlJ4U3RhdHVzID0gJXhcbiIsCi0JICAgICAgIElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlJ4U3RhdHVzKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+UnhTdGF0dXMpKTsKIAlmb3IgKGkgPSAwOyBpIDwgTEFOX1NBQTk3MzBfQ0FNX0RXT1JEUzsgaSsrKSB7Ci0JCU9VVEwoaSwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1BZGRyZXNzKTsKKwkJb3V0bChpLCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkNhbUFkZHJlc3MpOwogCQlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1EYXRhID0gJXhcbiIsCi0JCSAgICAgICBJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1EYXRhKSk7CisJCSAgICAgICByZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkNhbURhdGEpKTsKIAl9CiAJcHJpbnRrKCJscC0+c3RhdHMudHhfcGFja2V0cyA9ICVseFxuIiwgbHAtPnN0YXRzLnR4X3BhY2tldHMpOwogCXByaW50aygibHAtPnN0YXRzLnR4X2Vycm9ycyA9ICVseFxuIiwgbHAtPnN0YXRzLnR4X2Vycm9ycyk7CkBAIC0xNzgsMTcgKzE3NywxNyBAQAogCSAgICAgICBscC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyk7CiAKIAlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5EZWJ1Z1BDSU1hc3RlckFkZHIgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdQQ0lNYXN0ZXJBZGRyKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdQQ0lNYXN0ZXJBZGRyKSk7CiAJcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5UeFN0YXRlTWFjaGluZSA9ICV4XG4iLAotCSAgICAgICBJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EZWJ1Z0xhblR4U3RhdGVNYWNoaW5lKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5UeFN0YXRlTWFjaGluZSkpOwogCXByaW50aygibHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuUnhTdGF0ZU1hY2hpbmUgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5SeFN0YXRlTWFjaGluZSkpOworCSAgICAgICByZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuUnhTdGF0ZU1hY2hpbmUpKTsKIAlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5EZWJ1Z0xhblR4Rmlmb1BvaW50ZXJzID0gJXhcbiIsCi0JICAgICAgIElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuVHhGaWZvUG9pbnRlcnMpKTsKKwkgICAgICAgcmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EZWJ1Z0xhblR4Rmlmb1BvaW50ZXJzKSk7CiAJcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5SeEZpZm9Qb2ludGVycyA9ICV4XG4iLAotCSAgICAgICBJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EZWJ1Z0xhblJ4Rmlmb1BvaW50ZXJzKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5SeEZpZm9Qb2ludGVycykpOwogCXByaW50aygibHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuQ3RsU3RhdGVNYWNoaW5lID0gJXhcbiIsCi0JICAgICAgIElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuQ3RsU3RhdGVNYWNoaW5lKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5DdGxTdGF0ZU1hY2hpbmUpKTsKIH0KIAogc3RhdGljIHZvaWQgbGFuX3NhYTk3MzBfYnVmZmVyX2luaXQoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwKQpAQCAtMjE0LDk4ICsyMTMsMTA4IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGxhbl9zYWE5NzMwX2FsbG9jYXRlX2J1ZmZlcnMoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwKQorc3RhdGljIHZvaWQgbGFuX3NhYTk3MzBfZnJlZV9idWZmZXJzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCSAgICAgc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwKQogewotCXVuc2lnbmVkIGludCBtZW1fc2l6ZTsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIGxwLT5idWZmZXJfc2l6ZSwgbHAtPmJ1ZmZlcl9zdGFydCwKKwkJCSAgICBscC0+ZG1hX2FkZHIpOworfQorCitzdGF0aWMgaW50IGxhbl9zYWE5NzMwX2FsbG9jYXRlX2J1ZmZlcnMoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKK3sKIAl2b2lkICpQYTsKLQl1bnNpZ25lZCBpbnQgaSwgaiwgUmN2QnVmZmVyU2l6ZSwgVHhtQnVmZmVyU2l6ZTsKLQl1bnNpZ25lZCBpbnQgYnVmZmVyX3N0YXJ0OwotCi0JLyogCi0JICogQWxsb2NhdGUgYWxsIFJYIGFuZCBUWCBwYWNrZXRzIGluIG9uZSBjaHVuay4gCi0JICogVGhlIFJ4IGFuZCBUeCBwYWNrZXRzIG11c3QgYmUgUEFDS0VUX1NJWkUgYWxpZ25lZC4KLQkgKi8KLQltZW1fc2l6ZSA9ICgoTEFOX1NBQTk3MzBfUkNWX1FfU0laRSArIExBTl9TQUE5NzMwX1RYTV9RX1NJWkUpICoKLQkJICAgIExBTl9TQUE5NzMwX1BBQ0tFVF9TSVpFICogTEFOX1NBQTk3MzBfQlVGRkVSUykgKwotCSAgICBMQU5fU0FBOTczMF9QQUNLRVRfU0laRTsKLQlidWZmZXJfc3RhcnQgPQotCSAgICAodW5zaWduZWQgaW50KSBrbWFsbG9jKG1lbV9zaXplLCBHRlBfRE1BIHwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWJ1ZmZlcl9zdGFydCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiAKLQkgKiBTZXQgRE1BIGJ1ZmZlciB0byBrc2VnMSAodW5jYWNoZWQpLgotCSAqIE1ha2Ugc3VyZSB0byBmbHVzaCBiZWZvcmUgdXNpbmcgaXQgdW5jYWNoZWQuCi0JICovCi0JUGEgPSAodm9pZCAqKSBLU0VHMUFERFIoKGJ1ZmZlcl9zdGFydCArIExBTl9TQUE5NzMwX1BBQ0tFVF9TSVpFKSAmCi0JCQkJfihMQU5fU0FBOTczMF9QQUNLRVRfU0laRSAtIDEpKTsKLQlkbWFfY2FjaGVfd2JhY2tfaW52KCh1bnNpZ25lZCBsb25nKSBQYSwgbWVtX3NpemUpOworCXVuc2lnbmVkIGludCBpLCBqLCByeG9mZnNldCwgdHhvZmZzZXQ7CisJaW50IHJldDsKIAogCS8qIEluaXRpYWxpemUgYnVmZmVyIHNwYWNlICovCi0JUmN2QnVmZmVyU2l6ZSA9IExBTl9TQUE5NzMwX1BBQ0tFVF9TSVpFOwotCVR4bUJ1ZmZlclNpemUgPSBMQU5fU0FBOTczMF9QQUNLRVRfU0laRTsKIAlscC0+RG1hUmN2UGFja2V0cyA9IExBTl9TQUE5NzMwX1JDVl9RX1NJWkU7CiAJbHAtPkRtYVR4bVBhY2tldHMgPSBMQU5fU0FBOTczMF9UWE1fUV9TSVpFOwogCisJLyogSW5pdGlhbGl6ZSBSeCBCdWZmZXIgSW5kZXggKi8KKwlscC0+TmV4dFJjdlBhY2tldEluZGV4ID0gMDsKKwlscC0+TmV4dFJjdkJ1ZmZlckluZGV4ID0gMDsKKworCS8qIFNldCBjdXJyZW50IGJ1ZmZlciBpbmRleCAmIG5leHQgYXZhaWxhYmxlIHBhY2tldCBpbmRleCAqLworCWxwLT5OZXh0VHhtUGFja2V0SW5kZXggPSAwOworCWxwLT5OZXh0VHhtQnVmZmVySW5kZXggPSAwOworCWxwLT5QZW5kaW5nVHhtUGFja2V0SW5kZXggPSAwOworCWxwLT5QZW5kaW5nVHhtQnVmZmVySW5kZXggPSAwOworCisJLyoKKwkgKiBBbGxvY2F0ZSBhbGwgUlggYW5kIFRYIHBhY2tldHMgaW4gb25lIGNodW5rLgorCSAqIFRoZSBSeCBhbmQgVHggcGFja2V0cyBtdXN0IGJlIFBBQ0tFVF9TSVpFIGFsaWduZWQuCisJICovCisJbHAtPmJ1ZmZlcl9zaXplID0gKChMQU5fU0FBOTczMF9SQ1ZfUV9TSVpFICsgTEFOX1NBQTk3MzBfVFhNX1FfU0laRSkgKgorCQkJICAgTEFOX1NBQTk3MzBfUEFDS0VUX1NJWkUgKiBMQU5fU0FBOTczMF9CVUZGRVJTKSArCisJCQkgIExBTl9TQUE5NzMwX1BBQ0tFVF9TSVpFOworCWxwLT5idWZmZXJfc3RhcnQgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCBscC0+YnVmZmVyX3NpemUsCisJCQkJCQkmbHAtPmRtYV9hZGRyKTsKKwlpZiAoIWxwLT5idWZmZXJfc3RhcnQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJUGEgPSAodm9pZCAqKUFMSUdOKCh1bnNpZ25lZCBsb25nKWxwLT5idWZmZXJfc3RhcnQsCisJCQkgICBMQU5fU0FBOTczMF9QQUNLRVRfU0laRSk7CisKKwlyeG9mZnNldCA9IFBhIC0gbHAtPmJ1ZmZlcl9zdGFydDsKKwogCS8qIEluaXQgUlggYnVmZmVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBMQU5fU0FBOTczMF9CVUZGRVJTOyBpKyspIHsKIAkJZm9yIChqID0gMDsgaiA8IExBTl9TQUE5NzMwX1JDVl9RX1NJWkU7IGorKykgewogCQkJKih1bnNpZ25lZCBpbnQgKikgUGEgPQogCQkJICAgIGNwdV90b19sZTMyKFJYU0ZfUkVBRFkgPDwKIAkJCQkJUlhfU1RBVF9DVExfT1dORVJfU0hGKTsKLQkJCWxwLT5SY3ZCdWZmZXJbaV1bal0gPSAodW5zaWduZWQgaW50KSBQYTsKLQkJCVBhICs9IFJjdkJ1ZmZlclNpemU7CisJCQlscC0+UmN2QnVmZmVyW2ldW2pdID0gUGE7CisJCQlQYSArPSBMQU5fU0FBOTczMF9QQUNLRVRfU0laRTsKIAkJfQogCX0KIAorCXR4b2Zmc2V0ID0gUGEgLSBscC0+YnVmZmVyX3N0YXJ0OworCiAJLyogSW5pdCBUWCBidWZmZXJzICovCiAJZm9yIChpID0gMDsgaSA8IExBTl9TQUE5NzMwX0JVRkZFUlM7IGkrKykgewogCQlmb3IgKGogPSAwOyBqIDwgTEFOX1NBQTk3MzBfVFhNX1FfU0laRTsgaisrKSB7CiAJCQkqKHVuc2lnbmVkIGludCAqKSBQYSA9CiAJCQkgICAgY3B1X3RvX2xlMzIoVFhTRl9FTVBUWSA8PAogCQkJCQlUWF9TVEFUX0NUTF9PV05FUl9TSEYpOwotCQkJbHAtPlR4bUJ1ZmZlcltpXVtqXSA9ICh1bnNpZ25lZCBpbnQpIFBhOwotCQkJUGEgKz0gVHhtQnVmZmVyU2l6ZTsKKwkJCWxwLT5UeG1CdWZmZXJbaV1bal0gPSBQYTsKKwkJCVBhICs9IExBTl9TQUE5NzMwX1BBQ0tFVF9TSVpFOwogCQl9CiAJfQogCi0JLyogCi0JICogU2V0IHJ4IGJ1ZmZlciBBIGFuZCByeCBidWZmZXIgQiB0byBwb2ludCB0byB0aGUgZmlyc3QgdHdvIGJ1ZmZlciAKKwkvKgorCSAqIFNldCByeCBidWZmZXIgQSBhbmQgcnggYnVmZmVyIEIgdG8gcG9pbnQgdG8gdGhlIGZpcnN0IHR3byBidWZmZXIKIAkgKiBzcGFjZXMuCiAJICovCi0JT1VUTChQSFlTQUREUihscC0+UmN2QnVmZmVyWzBdWzBdKSwKKwlvdXRsKGxwLT5kbWFfYWRkciArIHJ4b2Zmc2V0LAogCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5SeEJ1ZmZBKTsKLQlPVVRMKFBIWVNBRERSKGxwLT5SY3ZCdWZmZXJbMV1bMF0pLAorCW91dGwobHAtPmRtYV9hZGRyICsgcnhvZmZzZXQgKworCSAgICAgTEFOX1NBQTk3MzBfUEFDS0VUX1NJWkUgKiBMQU5fU0FBOTczMF9SQ1ZfUV9TSVpFLAogCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5SeEJ1ZmZCKTsKIAotCS8qIEluaXRpYWxpemUgQnVmZmVyIEluZGV4ICovCi0JbHAtPk5leHRSY3ZQYWNrZXRJbmRleCA9IDA7Ci0JbHAtPk5leHRSY3ZUb1VzZUlzQSA9IDE7Ci0KLQkvKiBTZXQgY3VycmVudCBidWZmZXIgaW5kZXggJiBuZXh0IGF2YWlsYmxlIHBhY2tldCBpbmRleCAqLwotCWxwLT5OZXh0VHhtUGFja2V0SW5kZXggPSAwOwotCWxwLT5OZXh0VHhtQnVmZmVySW5kZXggPSAwOwotCWxwLT5QZW5kaW5nVHhtUGFja2V0SW5kZXggPSAwOwotCWxwLT5QZW5kaW5nVHhtQnVmZmVySW5kZXggPSAwOwotCi0JLyogCisJLyoKIAkgKiBTZXQgdHhtX2J1Zl9hIGFuZCB0eG1fYnVmX2IgdG8gcG9pbnQgdG8gdGhlIGZpcnN0IHR3byBidWZmZXIKLQkgKiBzcGFjZSAKKwkgKiBzcGFjZQogCSAqLwotCU9VVEwoUEhZU0FERFIobHAtPlR4bUJ1ZmZlclswXVswXSksCisJb3V0bChscC0+ZG1hX2FkZHIgKyB0eG9mZnNldCwKIAkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+VHhCdWZmQSk7Ci0JT1VUTChQSFlTQUREUihscC0+VHhtQnVmZmVyWzFdWzBdKSwKKwlvdXRsKGxwLT5kbWFfYWRkciArIHR4b2Zmc2V0ICsKKwkgICAgIExBTl9TQUE5NzMwX1BBQ0tFVF9TSVpFICogTEFOX1NBQTk3MzBfVFhNX1FfU0laRSwKIAkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+VHhCdWZmQik7CiAKIAkvKiBTZXQgcGFja2V0IG51bWJlciAqLwotCU9VVEwoKGxwLT5EbWFSY3ZQYWNrZXRzIDw8IFBLX0NPVU5UX1JYX0FfU0hGKSB8CisJb3V0bCgobHAtPkRtYVJjdlBhY2tldHMgPDwgUEtfQ09VTlRfUlhfQV9TSEYpIHwKIAkgICAgIChscC0+RG1hUmN2UGFja2V0cyA8PCBQS19DT1VOVF9SWF9CX1NIRikgfAogCSAgICAgKGxwLT5EbWFUeG1QYWNrZXRzIDw8IFBLX0NPVU5UX1RYX0FfU0hGKSB8CiAJICAgICAobHAtPkRtYVR4bVBhY2tldHMgPDwgUEtfQ09VTlRfVFhfQl9TSEYpLAogCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5QYWNrZXRDb3VudCk7CiAKIAlyZXR1cm4gMDsKKworb3V0OgorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfY2FtX2xvYWQoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwKQpAQCAtMzE3LDggKzMyNiw4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgTEFOX1NBQTk3MzBfQ0FNX0RXT1JEUzsgaSsrKSB7CiAJCS8qIEZpcnN0IHNldCBhZGRyZXNzIHRvIHdoZXJlIGRhdGEgaXMgd3JpdHRlbiAqLwotCQlPVVRMKGksICZscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtQWRkcmVzcyk7Ci0JCU9VVEwoKE5ldHdvcmtBZGRyZXNzWzBdIDw8IDI0KSB8IChOZXR3b3JrQWRkcmVzc1sxXSA8PCAxNikKKwkJb3V0bChpLCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkNhbUFkZHJlc3MpOworCQlvdXRsKChOZXR3b3JrQWRkcmVzc1swXSA8PCAyNCkgfCAoTmV0d29ya0FkZHJlc3NbMV0gPDwgMTYpCiAJCSAgICAgfCAoTmV0d29ya0FkZHJlc3NbMl0gPDwgOCkgfCBOZXR3b3JrQWRkcmVzc1szXSwKIAkJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkNhbURhdGEpOwogCQlOZXR3b3JrQWRkcmVzcyArPSA0OwpAQCAtMzI4LDggKzMzNyw3IEBACiAKIHN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfY2FtX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPQotCSAgICAoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKikgZGV2LT5wcml2OworCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IGk7CiAKIAkvKiBDb3B5IE1BQy1hZGRyZXNzIGludG8gYWxsIGVudHJpZXMuICovCkBAIC0zNDcsNyArMzU1LDcgQEAKIAogCS8qIENoZWNrIGxpbmsgc3RhdHVzLCBzcGluIGhlcmUgdGlsbCBzdGF0aW9uIGlzIG5vdCBidXN5LiAqLwogCWkgPSAwOwotCXdoaWxlIChJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdEN0bCkgJiBNRF9DQV9CVVNZKSB7CisJd2hpbGUgKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXRDdGwpICYgTURfQ0FfQlVTWSkgewogCQlpKys7CiAJCWlmIChpID4gMTAwKSB7CiAJCQlwcmludGsoIkVycm9yOiBsYW5fc2FhOTczMF9taWlfaW5pdDogdGltZW91dFxuIik7CkBAIC0zNTcsMTIgKzM2NSwxMiBAQAogCX0KIAogCS8qIE5vdyBzZXQgdGhlIGNvbnRyb2wgYW5kIGFkZHJlc3MgcmVnaXN0ZXIuICovCi0JT1VUTChNRF9DQV9CVVNZIHwgUEhZX1NUQVRVUyB8IFBIWV9BRERSRVNTIDw8IE1EX0NBX1BIWV9TSEYsCisJb3V0bChNRF9DQV9CVVNZIHwgUEhZX1NUQVRVUyB8IFBIWV9BRERSRVNTIDw8IE1EX0NBX1BIWV9TSEYsCiAJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlN0YXRpb25NZ210Q3RsKTsKIAogCS8qIGNoZWNrIGxpbmsgc3RhdHVzLCBzcGluIGhlcmUgdGlsbCBzdGF0aW9uIGlzIG5vdCBidXN5ICovCiAJaSA9IDA7Ci0Jd2hpbGUgKElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlN0YXRpb25NZ210Q3RsKSAmIE1EX0NBX0JVU1kpIHsKKwl3aGlsZSAocmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdEN0bCkgJiBNRF9DQV9CVVNZKSB7CiAJCWkrKzsKIAkJaWYgKGkgPiAxMDApIHsKIAkJCXByaW50aygiRXJyb3I6IGxhbl9zYWE5NzMwX21paV9pbml0OiB0aW1lb3V0XG4iKTsKQEAgLTM3NSw3ICszODMsNyBAQAogCW1kZWxheSgxKTsKIAogCS8qIENoZWNrIHRoZSBsaW5rIHN0YXR1cy4gKi8KLQlpZiAoSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXREYXRhKSAmCisJaWYgKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXREYXRhKSAmCiAJICAgIFBIWV9TVEFUVVNfTElOS19VUCkgewogCQkvKiBMaW5rIGlzIHVwLiAqLwogCQlyZXR1cm4gMDsKQEAgLTM4MywxNCArMzkxLDE0IEBACiAJCS8qIExpbmsgaXMgZG93biwgcmVzZXQgdGhlIFBIWSBmaXJzdC4gKi8KIAogCQkvKiBzZXQgUEhZIGFkZHJlc3MgPSAnQ09OVFJPTCcgKi8KLQkJT1VUTChQSFlfQUREUkVTUyA8PCBNRF9DQV9QSFlfU0hGIHwgTURfQ0FfV1IgfCBQSFlfQ09OVFJPTCwKKwkJb3V0bChQSFlfQUREUkVTUyA8PCBNRF9DQV9QSFlfU0hGIHwgTURfQ0FfV1IgfCBQSFlfQ09OVFJPTCwKIAkJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlN0YXRpb25NZ210Q3RsKTsKIAogCQkvKiBXYWl0IGZvciAxIG1zLiAqLwogCQltZGVsYXkoMSk7CiAKIAkJLyogc2V0ICdDT05UUk9MJyA9IGZvcmNlIHJlc2V0IGFuZCByZW5lZ290aWF0ZSAqLwotCQlPVVRMKFBIWV9DT05UUk9MX1JFU0VUIHwgUEhZX0NPTlRST0xfQVVUT19ORUcgfAorCQlvdXRsKFBIWV9DT05UUk9MX1JFU0VUIHwgUEhZX0NPTlRST0xfQVVUT19ORUcgfAogCQkgICAgIFBIWV9DT05UUk9MX1JFU1RBUlRfQVVUT19ORUcsCiAJCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdERhdGEpOwogCkBAIC0zOTgsMTIgKzQwNiwxMiBAQAogCQltZGVsYXkoNTApOwogCiAJCS8qIHNldCAnQlVTWScgdG8gc3RhcnQgb3BlcmF0aW9uICovCi0JCU9VVEwoTURfQ0FfQlVTWSB8IFBIWV9BRERSRVNTIDw8IE1EX0NBX1BIWV9TSEYgfCBNRF9DQV9XUiB8CisJCW91dGwoTURfQ0FfQlVTWSB8IFBIWV9BRERSRVNTIDw8IE1EX0NBX1BIWV9TSEYgfCBNRF9DQV9XUiB8CiAJCSAgICAgUEhZX0NPTlRST0wsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXRDdGwpOwogCiAJCS8qIGF3YWl0IGNvbXBsZXRpb24gKi8KIAkJaSA9IDA7Ci0JCXdoaWxlIChJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdEN0bCkgJgorCQl3aGlsZSAocmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdEN0bCkgJgogCQkgICAgICAgTURfQ0FfQlVTWSkgewogCQkJaSsrOwogCQkJaWYgKGkgPiAxMDApIHsKQEAgLTQxOSwxMyArNDI3LDEzIEBACiAKIAkJZm9yIChsID0gMDsgbCA8IDI7IGwrKykgewogCQkJLyogc2V0IFBIWSBhZGRyZXNzID0gJ1NUQVRVUycgKi8KLQkJCU9VVEwoTURfQ0FfQlVTWSB8IFBIWV9BRERSRVNTIDw8IE1EX0NBX1BIWV9TSEYgfAorCQkJb3V0bChNRF9DQV9CVVNZIHwgUEhZX0FERFJFU1MgPDwgTURfQ0FfUEhZX1NIRiB8CiAJCQkgICAgIFBIWV9TVEFUVVMsCiAJCQkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXRDdGwpOwogCiAJCQkvKiBhd2FpdCBjb21wbGV0aW9uICovCiAJCQlpID0gMDsKLQkJCXdoaWxlIChJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdEN0bCkgJgorCQkJd2hpbGUgKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXRDdGwpICYKIAkJCSAgICAgICBNRF9DQV9CVVNZKSB7CiAJCQkJaSsrOwogCQkJCWlmIChpID4gMTAwKSB7CkBAIC00NDAsNyArNDQ4LDcgQEAKIAkJCW1kZWxheSgzMDAwKTsKIAogCQkJLyogY2hlY2sgdGhlIGxpbmsgc3RhdHVzICovCi0JCQlpZiAoSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXREYXRhKSAmCisJCQlpZiAocmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdERhdGEpICYKIAkJCSAgICBQSFlfU1RBVFVTX0xJTktfVVApIHsKIAkJCQkvKiBsaW5rIGlzIHVwICovCiAJCQkJYnJlYWs7CkBAIC00NTQsNyArNDYyLDcgQEAKIHN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfY29udHJvbF9pbml0KHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKIHsKIAkvKiBJbml0aWFsaXplIERNQSBjb250cm9sIHJlZ2lzdGVyLiAqLwotCU9VVEwoKExBTk1CX0FOWSA8PCBETUFfQ1RMX01BWF9YRkVSX1NIRikgfAorCW91dGwoKExBTk1CX0FOWSA8PCBETUFfQ1RMX01BWF9YRkVSX1NIRikgfAogCSAgICAgKExBTkVORF9MSVRUTEUgPDwgRE1BX0NUTF9FTkRJQU5fU0hGKSB8CiAJICAgICAoTEFOX1NBQTk3MzBfUkNWX1FfSU5UX1RIUkVTSE9MRCA8PCBETUFfQ1RMX1JYX0lOVF9DT1VOVF9TSEYpCiAJICAgICB8IERNQV9DVExfUlhfSU5UX1RPX0VOIHwgRE1BX0NUTF9SWF9JTlRfRU4gfApAQCAtNDYyLDI3ICs0NzAsMjcgQEAKIAkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+TGFuRG1hQ3RsKTsKIAogCS8qIEluaXRpYWwgTUFDIGNvbnRyb2wgcmVnaXN0ZXIuICovCi0JT1VUTCgoTUFDQ01fTUlJIDw8IE1BQ19DT05UUk9MX0NPTk5fU0hGKSB8IE1BQ19DT05UUk9MX0ZVTExfRFVQLAorCW91dGwoKE1BQ0NNX01JSSA8PCBNQUNfQ09OVFJPTF9DT05OX1NIRikgfCBNQUNfQ09OVFJPTF9GVUxMX0RVUCwKIAkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+TWFjQ3RsKTsKIAogCS8qIEluaXRpYWxpemUgQ0FNIGNvbnRyb2wgcmVnaXN0ZXIuICovCi0JT1VUTChDQU1fQ09OVFJPTF9DT01QX0VOIHwgQ0FNX0NPTlRST0xfQlJPQURfQUNDLAorCW91dGwoQ0FNX0NPTlRST0xfQ09NUF9FTiB8IENBTV9DT05UUk9MX0JST0FEX0FDQywKIAkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtQ3RsKTsKIAotCS8qIAorCS8qCiAJICogSW5pdGlhbGl6ZSBDQU0gZW5hYmxlIHJlZ2lzdGVyLCBvbmx5IHR1cm4gb24gZmlyc3QgZW50cnksIHNob3VsZAotCSAqIGNvbnRhaW4gb3duIGFkZHIuIAorCSAqIGNvbnRhaW4gb3duIGFkZHIuCiAJICovCi0JT1VUTCgweDAwMDEsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtRW5hYmxlKTsKKwlvdXRsKDB4MDAwMSwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1FbmFibGUpOwogCiAJLyogSW5pdGlhbGl6ZSBUeCBjb250cm9sIHJlZ2lzdGVyICovCi0JT1VUTChUWF9DVExfRU5fQ09NUCwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5UeEN0bCk7CisJb3V0bChUWF9DVExfRU5fQ09NUCwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5UeEN0bCk7CiAKIAkvKiBJbml0aWFsaXplIFJjdiBjb250cm9sIHJlZ2lzdGVyICovCi0JT1VUTChSWF9DVExfU1RSSVBfQ1JDLCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlJ4Q3RsKTsKKwlvdXRsKFJYX0NUTF9TVFJJUF9DUkMsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+UnhDdGwpOwogCiAJLyogUmVzZXQgRE1BIGVuZ2luZSAqLwotCU9VVEwoRE1BX1RFU1RfU1dfUkVTRVQsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hVGVzdCk7CisJb3V0bChETUFfVEVTVF9TV19SRVNFVCwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFUZXN0KTsKIAogCXJldHVybiAwOwogfQpAQCAtNDkyLDIxICs1MDAsMjEgQEAKIAlpbnQgaTsKIAogCS8qIFN0b3AgRE1BIGZpcnN0ICovCi0JT1VUTChJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5MYW5EbWFDdGwpICYKKwlvdXRsKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+TGFuRG1hQ3RsKSAmCiAJICAgICB+KERNQV9DVExfRU5fVFhfRE1BIHwgRE1BX0NUTF9FTl9SWF9ETUEpLAogCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5MYW5EbWFDdGwpOwogCiAJLyogU2V0IHRoZSBTVyBSZXNldCBiaXRzIGluIERNQSBhbmQgTUFDIGNvbnRyb2wgcmVnaXN0ZXJzICovCi0JT1VUTChETUFfVEVTVF9TV19SRVNFVCwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFUZXN0KTsKLQlPVVRMKElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk1hY0N0bCkgfCBNQUNfQ09OVFJPTF9SRVNFVCwKKwlvdXRsKERNQV9URVNUX1NXX1JFU0VULCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRtYVRlc3QpOworCW91dGwocmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5NYWNDdGwpIHwgTUFDX0NPTlRST0xfUkVTRVQsCiAJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk1hY0N0bCk7CiAKLQkvKiAKKwkvKgogCSAqIFdhaXQgZm9yIE1BQyByZXNldCB0byBoYXZlIGZpbmlzaGVkLiBUaGUgcmVzZXQgYml0IGlzIGF1dG8gY2xlYXJlZAogCSAqIHdoZW4gdGhlIHJlc2V0IGlzIGRvbmUuCiAJICovCiAJaSA9IDA7Ci0Jd2hpbGUgKElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk1hY0N0bCkgJiBNQUNfQ09OVFJPTF9SRVNFVCkgeworCXdoaWxlIChyZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk1hY0N0bCkgJiBNQUNfQ09OVFJPTF9SRVNFVCkgewogCQlpKys7CiAJCWlmIChpID4gMTAwKSB7CiAJCQlwcmludGsKQEAgLTUyNCw3ICs1MzIsNyBAQAogCS8qIFN0b3AgbGFuIGNvbnRyb2xsZXIuICovCiAJbGFuX3NhYTk3MzBfc3RvcChscCk7CiAKLQlPVVRMKExBTl9TQUE5NzMwX0RFRkFVTFRfVElNRV9PVVRfQ05ULAorCW91dGwoTEFOX1NBQTk3MzBfREVGQVVMVF9USU1FX09VVF9DTlQsCiAJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlRpbWVvdXQpOwogCiAJcmV0dXJuIDA7CkBAIC01MzYsMjggKzU0NCwyNyBAQAogCiAJLyogSW5pdGlhbGl6ZSBSeCBCdWZmZXIgSW5kZXggKi8KIAlscC0+TmV4dFJjdlBhY2tldEluZGV4ID0gMDsKLQlscC0+TmV4dFJjdlRvVXNlSXNBID0gMTsKKwlscC0+TmV4dFJjdkJ1ZmZlckluZGV4ID0gMDsKIAotCS8qIFNldCBjdXJyZW50IGJ1ZmZlciBpbmRleCAmIG5leHQgYXZhaWxibGUgcGFja2V0IGluZGV4ICovCisJLyogU2V0IGN1cnJlbnQgYnVmZmVyIGluZGV4ICYgbmV4dCBhdmFpbGFibGUgcGFja2V0IGluZGV4ICovCiAJbHAtPk5leHRUeG1QYWNrZXRJbmRleCA9IDA7CiAJbHAtPk5leHRUeG1CdWZmZXJJbmRleCA9IDA7CiAJbHAtPlBlbmRpbmdUeG1QYWNrZXRJbmRleCA9IDA7CiAJbHAtPlBlbmRpbmdUeG1CdWZmZXJJbmRleCA9IDA7CiAKLQlPVVRMKElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkxhbkRtYUN0bCkgfCBETUFfQ1RMX0VOX1RYX0RNQSB8CisJb3V0bChyZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkxhbkRtYUN0bCkgfCBETUFfQ1RMX0VOX1RYX0RNQSB8CiAJICAgICBETUFfQ1RMX0VOX1JYX0RNQSwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5MYW5EbWFDdGwpOwogCiAJLyogRm9yIFR4LCB0dXJuIG9uIE1BQyB0aGVuIERNQSAqLwotCU9VVEwoSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+VHhDdGwpIHwgVFhfQ1RMX1RYX0VOLAorCW91dGwocmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5UeEN0bCkgfCBUWF9DVExfVFhfRU4sCiAJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlR4Q3RsKTsKIAogCS8qIEZvciBSeCwgdHVybiBvbiBETUEgdGhlbiBNQUMgKi8KLQlPVVRMKElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlJ4Q3RsKSB8IFJYX0NUTF9SWF9FTiwKKwlvdXRsKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+UnhDdGwpIHwgUlhfQ1RMX1JYX0VOLAogCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5SeEN0bCk7CiAKLQkvKiBTZXQgT2syVXNlIHRvIGxldCBoYXJkd2FyZSBvd25zIHRoZSBidWZmZXJzICovCi0JT1VUTChPSzJVU0VfUlhfQSB8IE9LMlVTRV9SWF9CIHwgT0syVVNFX1RYX0EgfCBPSzJVU0VfVFhfQiwKLQkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+T2syVXNlKTsKKwkvKiBTZXQgT2syVXNlIHRvIGxldCBoYXJkd2FyZSBvd24gdGhlIGJ1ZmZlcnMuCSovCisJb3V0bChPSzJVU0VfUlhfQSB8IE9LMlVTRV9SWF9CLCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk9rMlVzZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU3Miw4ICs1NzksNyBAQAogCiBzdGF0aWMgaW50IGxhbl9zYWE5NzMwX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0KLQkgICAgKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCAqcFBhY2tldDsKIAl1bnNpZ25lZCBpbnQgdHhfc3RhdHVzOwogCkBAIC01ODEsMTMgKzU4NywxMSBAQAogCQlwcmludGsoImxhbl9zYWE5NzMwX3R4IGludGVycnVwdFxuIik7CiAKIAkvKiBDbGVhciBpbnRlcnJ1cHQuICovCi0JT1VUTChETUFfU1RBVFVTX01BQ19UWF9JTlQsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hU3RhdHVzKTsKKwlvdXRsKERNQV9TVEFUVVNfTUFDX1RYX0lOVCwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFTdGF0dXMpOwogCiAJd2hpbGUgKDEpIHsKLQkJcFBhY2tldCA9Ci0JCSAgICAodW5zaWduZWQgaW50ICopIGxwLT5UeG1CdWZmZXJbbHAtPgotCQkJCQkJICAgUGVuZGluZ1R4bUJ1ZmZlckluZGV4XQotCQkgICAgW2xwLT5QZW5kaW5nVHhtUGFja2V0SW5kZXhdOworCQlwUGFja2V0ID0gbHAtPlR4bUJ1ZmZlcltscC0+UGVuZGluZ1R4bUJ1ZmZlckluZGV4XQorCQkJCSAgICAgICBbbHAtPlBlbmRpbmdUeG1QYWNrZXRJbmRleF07CiAKIAkJLyogR2V0IHN0YXR1cyBvZiBmaXJzdCBwYWNrZXQgdHJhbnNtaXR0ZWQuICovCiAJCXR4X3N0YXR1cyA9IGxlMzJfdG9fY3B1KCpwUGFja2V0KTsKQEAgLTYwNSwyMyArNjA5LDIyIEBACiAJCQlscC0+c3RhdHMudHhfZXJyb3JzKys7CiAJCQlpZiAodHhfc3RhdHVzICYKIAkJCSAgICAoVFhfU1RBVFVTX0VYX0NPTEwgPDwgVFhfU1RBVF9DVExfU1RBVFVTX1NIRikpCi0JCQkJICAgIGxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQkJCWxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCQkJaWYgKHR4X3N0YXR1cyAmCi0JCQkgICAgKFRYX1NUQVRVU19MQVRFX0NPTEwgPDwKLQkJCSAgICAgVFhfU1RBVF9DVExfU1RBVFVTX1NIRikpIGxwLT5zdGF0cy4KLQkgICAgIHR4X3dpbmRvd19lcnJvcnMrKzsKKwkJCSAgICAoVFhfU1RBVFVTX0xBVEVfQ09MTCA8PCBUWF9TVEFUX0NUTF9TVEFUVVNfU0hGKSkKKwkJCQlscC0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOwogCQkJaWYgKHR4X3N0YXR1cyAmCiAJCQkgICAgKFRYX1NUQVRVU19MX0NBUlIgPDwgVFhfU1RBVF9DVExfU1RBVFVTX1NIRikpCi0JCQkJICAgIGxwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQkJCWxwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQkJaWYgKHR4X3N0YXR1cyAmCiAJCQkgICAgKFRYX1NUQVRVU19VTkRFUiA8PCBUWF9TVEFUX0NUTF9TVEFUVVNfU0hGKSkKLQkJCQkgICAgbHAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJCQkJbHAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CiAJCQlpZiAodHhfc3RhdHVzICYKIAkJCSAgICAoVFhfU1RBVFVTX1NRX0VSUiA8PCBUWF9TVEFUX0NUTF9TVEFUVVNfU0hGKSkKLQkJCQkgICAgbHAtPnN0YXRzLnR4X2hlYXJ0YmVhdF9lcnJvcnMrKzsKKwkJCQlscC0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycysrOwogCiAJCQlscC0+c3RhdHMuY29sbGlzaW9ucyArPQotCQkJICAgIHR4X3N0YXR1cyAmIFRYX1NUQVRVU19UWF9DT0xMX01TSzsKKwkJCQl0eF9zdGF0dXMgJiBUWF9TVEFUVVNfVFhfQ09MTF9NU0s7CiAJCX0KIAogCQkvKiBGcmVlIGJ1ZmZlci4gKi8KQEAgLTYzNiwyMSArNjM5LDE1IEBACiAJCX0KIAl9CiAKLQkvKiBNYWtlIHN1cmUgQSBhbmQgQiBhcmUgYXZhaWxhYmxlIHRvIGhhcmR3YXJlLiAqLwotCU9VVEwoT0syVVNFX1RYX0EgfCBPSzJVU0VfVFhfQiwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5PazJVc2UpOwotCi0JaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkgewotCQkvKiBUaGUgdHggYnVmZmVyIGlzIG5vIGxvbmdlciBmdWxsLiAqLwotCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JfQorCS8qIFRoZSB0eCBidWZmZXIgaXMgbm8gbG9uZ2VyIGZ1bGwuICovCisJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPQotCSAgICAoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKikgZGV2LT5wcml2OworCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGxlbiA9IDA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IDA7CiAJdW5zaWduZWQgaW50IHJ4X3N0YXR1czsKQEAgLTY2MywxNiArNjYwLDEzIEBACiAJCXByaW50aygibGFuX3NhYTk3MzBfcnggaW50ZXJydXB0XG4iKTsKIAogCS8qIENsZWFyIHJlY2VpdmUgaW50ZXJydXB0cy4gKi8KLQlPVVRMKERNQV9TVEFUVVNfTUFDX1JYX0lOVCB8IERNQV9TVEFUVVNfUlhfSU5UIHwKKwlvdXRsKERNQV9TVEFUVVNfTUFDX1JYX0lOVCB8IERNQV9TVEFUVVNfUlhfSU5UIHwKIAkgICAgIERNQV9TVEFUVVNfUlhfVE9fSU5ULCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRtYVN0YXR1cyk7CiAKIAkvKiBBZGRyZXNzIG5leHQgcGFja2V0ICovCi0JaWYgKGxwLT5OZXh0UmN2VG9Vc2VJc0EpCi0JCUJ1ZmZlckluZGV4ID0gMDsKLQllbHNlCi0JCUJ1ZmZlckluZGV4ID0gMTsKKwlCdWZmZXJJbmRleCA9IGxwLT5OZXh0UmN2QnVmZmVySW5kZXg7CiAJUGFja2V0SW5kZXggPSBscC0+TmV4dFJjdlBhY2tldEluZGV4OwotCXBQYWNrZXQgPSAodW5zaWduZWQgaW50ICopIGxwLT5SY3ZCdWZmZXJbQnVmZmVySW5kZXhdW1BhY2tldEluZGV4XTsKKwlwUGFja2V0ID0gbHAtPlJjdkJ1ZmZlcltCdWZmZXJJbmRleF1bUGFja2V0SW5kZXhdOwogCXJ4X3N0YXR1cyA9IGxlMzJfdG9fY3B1KCpwUGFja2V0KTsKIAogCS8qIFByb2Nlc3MgZWFjaCBwYWNrZXQuICovCkBAIC03MTUsNTEgKzcwOSwzOSBAQAogCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJaWYgKHJ4X3N0YXR1cyAmCiAJCQkgICAgKFJYX1NUQVRVU19DUkNfRVJSIDw8IFJYX1NUQVRfQ1RMX1NUQVRVU19TSEYpKQotCQkJCSAgICBscC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJCWxwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJCQlpZiAocnhfc3RhdHVzICYKLQkJCSAgICAoUlhfU1RBVFVTX0FMSUdOX0VSUiA8PAotCQkJICAgICBSWF9TVEFUX0NUTF9TVEFUVVNfU0hGKSkgbHAtPnN0YXRzLgotCSAgICAgcnhfZnJhbWVfZXJyb3JzKys7CisJCQkgICAgKFJYX1NUQVRVU19BTElHTl9FUlIgPDwgUlhfU1RBVF9DVExfU1RBVFVTX1NIRikpCisJCQkJbHAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwogCQkJaWYgKHJ4X3N0YXR1cyAmCiAJCQkgICAgKFJYX1NUQVRVU19PVkVSRkxPVyA8PCBSWF9TVEFUX0NUTF9TVEFUVVNfU0hGKSkKLQkJCQkgICAgbHAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CisJCQkJbHAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CiAJCQlpZiAocnhfc3RhdHVzICYKIAkJCSAgICAoUlhfU1RBVFVTX0xPTkdfRVJSIDw8IFJYX1NUQVRfQ1RMX1NUQVRVU19TSEYpKQotCQkJCSAgICBscC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJCWxwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCX0KIAogCQkvKiBJbmRpY2F0ZSB3ZSBoYXZlIHByb2Nlc3NlZCB0aGUgYnVmZmVyLiAqLwotCQkqcFBhY2tldCA9Ci0JCSAgICBjcHVfdG9fbGUzMihSWFNGX1JFQURZIDw8IFJYX1NUQVRfQ1RMX09XTkVSX1NIRik7CisJCSpwUGFja2V0ID0gY3B1X3RvX2xlMzIoUlhTRl9SRUFEWSA8PCBSWF9TVEFUX0NUTF9PV05FUl9TSEYpOworCisJCS8qIE1ha2Ugc3VyZSBBIG9yIEIgaXMgYXZhaWxhYmxlIHRvIGhhcmR3YXJlIGFzIGFwcHJvcHJpYXRlLiAqLworCQlvdXRsKEJ1ZmZlckluZGV4ID8gT0syVVNFX1JYX0IgOiBPSzJVU0VfUlhfQSwKKwkJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk9rMlVzZSk7CiAKIAkJLyogR28gdG8gbmV4dCBwYWNrZXQgaW4gc2VxdWVuY2UuICovCiAJCWxwLT5OZXh0UmN2UGFja2V0SW5kZXgrKzsKIAkJaWYgKGxwLT5OZXh0UmN2UGFja2V0SW5kZXggPj0gTEFOX1NBQTk3MzBfUkNWX1FfU0laRSkgewogCQkJbHAtPk5leHRSY3ZQYWNrZXRJbmRleCA9IDA7Ci0JCQlpZiAoQnVmZmVySW5kZXgpIHsKLQkJCQlscC0+TmV4dFJjdlRvVXNlSXNBID0gMTsKLQkJCX0gZWxzZSB7Ci0JCQkJbHAtPk5leHRSY3ZUb1VzZUlzQSA9IDA7Ci0JCQl9CisJCQlscC0+TmV4dFJjdkJ1ZmZlckluZGV4IF49IDE7CiAJCX0KLQkJT1VUTChPSzJVU0VfUlhfQSB8IE9LMlVTRV9SWF9CLAotCQkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+T2syVXNlKTsKIAogCQkvKiBBZGRyZXNzIG5leHQgcGFja2V0ICovCi0JCWlmIChscC0+TmV4dFJjdlRvVXNlSXNBKQotCQkJQnVmZmVySW5kZXggPSAwOwotCQllbHNlCi0JCQlCdWZmZXJJbmRleCA9IDE7CisJCUJ1ZmZlckluZGV4ID0gbHAtPk5leHRSY3ZCdWZmZXJJbmRleDsKIAkJUGFja2V0SW5kZXggPSBscC0+TmV4dFJjdlBhY2tldEluZGV4OwotCQlwUGFja2V0ID0KLQkJICAgICh1bnNpZ25lZCBpbnQgKikgbHAtPgotCQkgICAgUmN2QnVmZmVyW0J1ZmZlckluZGV4XVtQYWNrZXRJbmRleF07CisJCXBQYWNrZXQgPSBscC0+UmN2QnVmZmVyW0J1ZmZlckluZGV4XVtQYWNrZXRJbmRleF07CiAJCXJ4X3N0YXR1cyA9IGxlMzJfdG9fY3B1KCpwUGFja2V0KTsKIAl9CiAKLQkvKiBNYWtlIHN1cmUgQSBhbmQgQiBhcmUgYXZhaWxhYmxlIHRvIGhhcmR3YXJlLiAqLwotCU9VVEwoT0syVVNFX1JYX0EgfCBPSzJVU0VfUlhfQiwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5PazJVc2UpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc2Nyw4ICs3NDksNyBAQAogCQkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkZXZfaWQ7Ci0Jc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0KLQkgICAgKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKGxhbl9zYWE5NzMwX2RlYnVnID4gNSkKIAkJcHJpbnRrKCJsYW5fc2FhOTczMF9pbnRlcnJ1cHRcbiIpOwpAQCAtNzgwLDExICs3NjEsMTEgQEAKIAlldm1fc2FhOTczMF9jbGVhcl9sYW5faW50KGxwKTsKIAogCS8qIFNlcnZpY2UgcGVuZGluZyB0cmFuc21pdCBpbnRlcnJ1cHRzLiAqLwotCWlmIChJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFTdGF0dXMpICYgRE1BX1NUQVRVU19NQUNfVFhfSU5UKQorCWlmIChyZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRtYVN0YXR1cykgJiBETUFfU1RBVFVTX01BQ19UWF9JTlQpCiAJCWxhbl9zYWE5NzMwX3R4KGRldik7CiAKIAkvKiBTZXJ2aWNlIHBlbmRpbmcgcmVjZWl2ZSBpbnRlcnJ1cHRzLiAqLwotCWlmIChJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFTdGF0dXMpICYKKwlpZiAocmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFTdGF0dXMpICYKIAkgICAgKERNQV9TVEFUVVNfTUFDX1JYX0lOVCB8IERNQV9TVEFUVVNfUlhfSU5UIHwKIAkgICAgIERNQV9TVEFUVVNfUlhfVE9fSU5UKSkgbGFuX3NhYTk3MzBfcngoZGV2KTsKIApAQCAtNzk0LDE1ICs3NzUsOSBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBsYW5fc2FhOTczMF9vcGVuX2ZhaWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQogc3RhdGljIGludCBsYW5fc2FhOTczMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0KLQkgICAgKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogQXNzb2NpYXRlIElSUSB3aXRoIGxhbl9zYWE5NzMwX2ludGVycnVwdCAqLwogCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgJmxhbl9zYWE5NzMwX2ludGVycnVwdCwgMCwgIlNBQTk3MzAgRXRoIiwKQEAgLTgzNCwxNSArODA5LDEzIEBACiAJaW50IFBhY2tldEluZGV4OwogCiAJaWYgKGxhbl9zYWE5NzMwX2RlYnVnID4gNSkKLQkJcHJpbnRrKCJsYW5fc2FhOTczMF93cml0ZTogc2tiPSUwOHhcbiIsCi0JCSAgICAgICAodW5zaWduZWQgaW50KSBza2IpOworCQlwcmludGsoImxhbl9zYWE5NzMwX3dyaXRlOiBza2I9JXBcbiIsIHNrYik7CiAKIAlCdWZmZXJJbmRleCA9IGxwLT5OZXh0VHhtQnVmZmVySW5kZXg7CiAJUGFja2V0SW5kZXggPSBscC0+TmV4dFR4bVBhY2tldEluZGV4OwogCi0JdHhfc3RhdHVzID0KLQkgICAgbGUzMl90b19jcHUoKih1bnNpZ25lZCBpbnQgKikgbHAtPgotCQkJVHhtQnVmZmVyW0J1ZmZlckluZGV4XVtQYWNrZXRJbmRleF0pOworCXR4X3N0YXR1cyA9IGxlMzJfdG9fY3B1KCoodW5zaWduZWQgaW50ICopbHAtPlR4bUJ1ZmZlcltCdWZmZXJJbmRleF0KKwkJCQkJCQkgICAgICBbUGFja2V0SW5kZXhdKTsKIAlpZiAoKHR4X3N0YXR1cyAmIFRYX1NUQVRfQ1RMX09XTkVSX01TSykgIT0KIAkgICAgKFRYU0ZfRU1QVFkgPDwgVFhfU1RBVF9DVExfT1dORVJfU0hGKSkgewogCQlpZiAobGFuX3NhYTk3MzBfZGVidWcgPiA0KQpAQCAtODU4LDI5ICs4MzEsMjkgQEAKIAkJbHAtPk5leHRUeG1CdWZmZXJJbmRleCBePSAxOwogCX0KIAotCXBiUGFja2V0RGF0YSA9Ci0JICAgICh1bnNpZ25lZCBjaGFyICopIGxwLT5UeG1CdWZmZXJbQnVmZmVySW5kZXhdW1BhY2tldEluZGV4XTsKKwlwYlBhY2tldERhdGEgPSBscC0+VHhtQnVmZmVyW0J1ZmZlckluZGV4XVtQYWNrZXRJbmRleF07CiAJcGJQYWNrZXREYXRhICs9IDQ7CiAKIAkvKiBjb3B5IHRoZSBiaXRzICovCiAJbWVtY3B5KHBiUGFja2V0RGF0YSwgcGJEYXRhLCBsZW4pOwogCiAJLyogU2V0IHRyYW5zbWl0IHN0YXR1cyBmb3IgaGFyZHdhcmUgKi8KLQkqKHVuc2lnbmVkIGludCAqKSBscC0+VHhtQnVmZmVyW0J1ZmZlckluZGV4XVtQYWNrZXRJbmRleF0gPQotCSAgICBjcHVfdG9fbGUzMigoVFhTRl9SRUFEWSA8PCBUWF9TVEFUX0NUTF9PV05FUl9TSEYpIHwKLQkJCShUWF9TVEFUX0NUTF9JTlRfQUZURVJfVFggPDwgVFhfU1RBVF9DVExfRlJBTUVfU0hGKQotCQkJfCAobGVuIDw8IFRYX1NUQVRfQ1RMX0xFTkdUSF9TSEYpKTsKKwkqKHVuc2lnbmVkIGludCAqKWxwLT5UeG1CdWZmZXJbQnVmZmVySW5kZXhdW1BhY2tldEluZGV4XSA9CisJCWNwdV90b19sZTMyKChUWFNGX1JFQURZIDw8IFRYX1NUQVRfQ1RMX09XTkVSX1NIRikgfAorCQkJICAgIChUWF9TVEFUX0NUTF9JTlRfQUZURVJfVFggPDwKKwkJCSAgICAgVFhfU1RBVF9DVExfRlJBTUVfU0hGKSB8CisJCQkgICAgKGxlbiA8PCBUWF9TVEFUX0NUTF9MRU5HVEhfU0hGKSk7CiAKLQkvKiBTZXQgaGFyZHdhcmUgdHggYnVmZmVyLiAqLwotCU9VVEwoT0syVVNFX1RYX0EgfCBPSzJVU0VfVFhfQiwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5PazJVc2UpOworCS8qIE1ha2Ugc3VyZSBBIG9yIEIgaXMgYXZhaWxhYmxlIHRvIGhhcmR3YXJlIGFzIGFwcHJvcHJpYXRlLiAqLworCW91dGwoQnVmZmVySW5kZXggPyBPSzJVU0VfVFhfQiA6IE9LMlVTRV9UWF9BLAorCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5PazJVc2UpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGxhbl9zYWE5NzMwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPQotCSAgICAoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKikgZGV2LT5wcml2OworCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAKIAkvKiBUcmFuc21pdHRlciB0aW1lb3V0LCBzZXJpb3VzIHByb2JsZW1zICovCiAJbHAtPnN0YXRzLnR4X2Vycm9ycysrOwpAQCAtODg5LDIwICs4NjIsMTkgQEAKIAlsYW5fc2FhOTczMF9yZXN0YXJ0KGxwKTsKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQogCiBzdGF0aWMgaW50IGxhbl9zYWE5NzMwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0KLQkgICAgKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHNrYmxlbjsKIAlpbnQgbGVuOwogCiAJaWYgKGxhbl9zYWE5NzMwX2RlYnVnID4gNCkKLQkJcHJpbnRrKCJTZW5kIHBhY2tldDogc2tiPSUwOHhcbiIsICh1bnNpZ25lZCBpbnQpIHNrYik7CisJCXByaW50aygiU2VuZCBwYWNrZXQ6IHNrYj0lcFxuIiwgc2tiKTsKIAogCXNrYmxlbiA9IHNrYi0+bGVuOwogCkBAIC05MTIsOCArODg0LDcgQEAKIAogCWlmIChsYW5fc2FhOTczMF93cml0ZShscCwgc2tiLCBza2JsZW4pKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JCXByaW50aygiRXJyb3Igd2hlbiB3cml0aW5nIHBhY2tldCB0byBjb250cm9sbGVyOiBza2I9JTA4eFxuIiwKLQkJICAgICAodW5zaWduZWQgaW50KSBza2IpOworCQlwcmludGsoIkVycm9yIHdoZW4gd3JpdGluZyBwYWNrZXQgdG8gY29udHJvbGxlcjogc2tiPSVwXG4iLCBza2IpOwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC05MjIsNyArODkzLDcgQEAKIAlscC0+c3RhdHMudHhfcGFja2V0cysrOwogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKQEAgLTkzMiw4ICs5MDMsNyBAQAogCiBzdGF0aWMgaW50IGxhbl9zYWE5NzMwX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0KLQkgICAgKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKGxhbl9zYWE5NzMwX2RlYnVnID4gMSkKIAkJcHJpbnRrKCJsYW5fc2FhOTczMF9jbG9zZTpcbiIpOwpAQCAtOTU1LDMzICs5MjUsMzEgQEAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbGFuX3NhYTk3MzBfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlCiAJCQkJCQkgICAgICAqZGV2KQogewotCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9Ci0JICAgIChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CisJc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXJldHVybiAmbHAtPnN0YXRzOwogfQogCiBzdGF0aWMgdm9pZCBsYW5fc2FhOTczMF9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0KLQkgICAgKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogU3RvcCB0aGUgY29udHJvbGxlciAqLwogCWxhbl9zYWE5NzMwX3N0b3AobHApOwogCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCQkvKiBhY2NlcHQgYWxsIHBhY2tldHMgKi8KLQkJT1VUTChDQU1fQ09OVFJPTF9DT01QX0VOIHwgQ0FNX0NPTlRST0xfU1RBVElPTl9BQ0MgfAorCQlvdXRsKENBTV9DT05UUk9MX0NPTVBfRU4gfCBDQU1fQ09OVFJPTF9TVEFUSU9OX0FDQyB8CiAJCSAgICAgQ0FNX0NPTlRST0xfR1JPVVBfQUNDIHwgQ0FNX0NPTlRST0xfQlJPQURfQUNDLAogCQkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtQ3RsKTsKIAl9IGVsc2UgewogCQlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgewogCQkJLyogYWNjZXB0IGFsbCBtdWx0aWNhc3QgcGFja2V0cyAqLwotCQkJT1VUTChDQU1fQ09OVFJPTF9DT01QX0VOIHwgQ0FNX0NPTlRST0xfR1JPVVBfQUNDIHwKKwkJCW91dGwoQ0FNX0NPTlRST0xfQ09NUF9FTiB8IENBTV9DT05UUk9MX0dST1VQX0FDQyB8CiAJCQkgICAgIENBTV9DT05UUk9MX0JST0FEX0FDQywKIAkJCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1DdGwpOwogCQl9IGVsc2UgewotCQkJLyogCisJCQkvKgogCQkJICogV2lsbCBoYW5kbGUgdGhlIG11bHRpY2FzdCBzdHVmZiBsYXRlci4gLWNhcnN0ZW5sCiAJCQkgKi8KIAkJfQpAQCAtOTkzLDkxICs5NjEsODYgQEAKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IHNhYTk3MzBfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLSAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAKLSAgICAgICAgaWYgKGRldikgewotICAgICAgICAgICAgICAgIHVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JCWtmcmVlKGRldi0+cHJpdik7Ci0gICAgICAgICAgICAgICAgZnJlZV9uZXRkZXYoZGV2KTsKLSAgICAgICAgICAgICAgICBwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwotICAgICAgICAgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLSAgICAgICAgICAgICAgICBwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0gICAgICAgIH0KKwlpZiAoZGV2KSB7CisJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJCWxhbl9zYWE5NzMwX2ZyZWVfYnVmZmVycyhwZGV2LCBscCk7CisJCWlvdW5tYXAobHAtPmxhbl9zYWE5NzMwX3JlZ3MpOworCQlpb3VubWFwKGxwLT5ldm1fc2FhOTczMF9yZWdzKTsKKwkJZnJlZV9uZXRkZXYoZGV2KTsKKwkJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJfQogfQogCiAKLXN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW9hZGRyLCBpbnQgaXJxKQorc3RhdGljIGludCBsYW5fc2FhOTczMF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCXVuc2lnbmVkIGxvbmcgaW9hZGRyLCBpbnQgaXJxKQogewotCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscDsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGNoYXIgZXRoZXJuZXRfYWRkcls2XTsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0OwogCi0JZGV2LT5vcGVuID0gbGFuX3NhYTk3MzBfb3Blbl9mYWlsOworCWlmIChnZXRfZXRoZXJuZXRfYWRkcihldGhlcm5ldF9hZGRyKSkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CiAKLQlpZiAoZ2V0X2V0aGVybmV0X2FkZHIoZXRoZXJuZXRfYWRkcikpCi0JCXJldHVybiAtRU5PREVWOwotCQogCW1lbWNweShkZXYtPmRldl9hZGRyLCBldGhlcm5ldF9hZGRyLCA2KTsKIAlkZXYtPmJhc2VfYWRkciA9IGlvYWRkcjsKIAlkZXYtPmlycSA9IGlycTsKLQkKLQkvKiAKLQkgKiBNYWtlIGNlcnRhaW4gdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIGJ5IHRoZSBjb250cm9sbGVyIGFyZSBhbGlnbmVkIAotCSAqIGFuZCBETUFibGUuIAotCSAqLwotCS8qCi0JICogIFhYWDogdGhhdCBpcyBvYnZpb3VzbHkgYnJva2VuIC0ga2ZyZWUoKSB3b24ndCBiZSBoYXBweSB3aXRoIHVzLgotCSAqLwotCWxwID0gKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICopICgoKHVuc2lnbmVkIGxvbmcpCi0JCQkJCSAgICAgIGttYWxsb2Moc2l6ZW9mKCpscCkgKyA3LAotCQkJCQkJICAgICAgR0ZQX0RNQSB8IEdGUF9LRVJORUwpCi0JCQkJCSAgICAgICsgNykgJiB+Nyk7CiAKLQlpZiAoIWxwKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWRldi0+cHJpdiA9IGxwOwotCW1lbXNldChscCwgMCwgc2l6ZW9mKCpscCkpOworCWxwLT5wY2lfZGV2ID0gcGRldjsKIAogCS8qIFNldCBTQUE5NzMwIExBTiBiYXNlIGFkZHJlc3MuICovCi0JbHAtPmxhbl9zYWE5NzMwX3JlZ3MgPSAodF9sYW5fc2FhOTczMF9yZWdtYXAgKikgKGlvYWRkciArCi0JCQkJCQkJIFNBQTk3MzBfTEFOX1JFR1NfQUREUik7CisJbHAtPmxhbl9zYWE5NzMwX3JlZ3MgPSBpb3JlbWFwKGlvYWRkciArIFNBQTk3MzBfTEFOX1JFR1NfQUREUiwKKwkJCQkgICAgICAgU0FBOTczMF9MQU5fUkVHU19TSVpFKTsKKwlpZiAoIWxwLT5sYW5fc2FhOTczMF9yZWdzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KIAogCS8qIFNldCBTQUE5NzMwIEVWTSBiYXNlIGFkZHJlc3MuICovCi0JbHAtPmV2bV9zYWE5NzMwX3JlZ3MgPSAodF9ldm1fc2FhOTczMF9yZWdtYXAgKikgKGlvYWRkciArCi0JCQkJCQkJIFNBQTk3MzBfRVZNX1JFR1NfQUREUik7CisJbHAtPmV2bV9zYWE5NzMwX3JlZ3MgPSBpb3JlbWFwKGlvYWRkciArIFNBQTk3MzBfRVZNX1JFR1NfQUREUiwKKwkJCQkgICAgICAgU0FBOTczMF9FVk1fUkVHU19TSVpFKTsKKwlpZiAoIWxwLT5ldm1fc2FhOTczMF9yZWdzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2lvdW5tYXBfbGFuOworCX0KIAogCS8qIEFsbG9jYXRlIExBTiBSWC9UWCBmcmFtZSBidWZmZXIgc3BhY2UuICovCi0JLyogRklYTUU6IGEgbGVhayAqLwotCWlmICgocmV0ID0gbGFuX3NhYTk3MzBfYWxsb2NhdGVfYnVmZmVycyhscCkpKQotCQlnb3RvIG91dDsKKwlpZiAoKHJldCA9IGxhbl9zYWE5NzMwX2FsbG9jYXRlX2J1ZmZlcnMocGRldiwgbHApKSkKKwkJZ290byBvdXRfaW91bm1hcDsKIAogCS8qIFN0b3AgTEFOIGNvbnRyb2xsZXIuICovCi0JaWYgKChyZXQgPSBsYW5fc2FhOTczMF9zdG9wKGxwKSkpIAotCQlnb3RvIG91dDsKLQkKKwlpZiAoKHJldCA9IGxhbl9zYWE5NzMwX3N0b3AobHApKSkKKwkJZ290byBvdXRfZnJlZV9jb25zaXN0ZW50OworCiAJLyogSW5pdGlhbGl6ZSBDQU0gcmVnaXN0ZXJzLiAqLwogCWlmICgocmV0ID0gbGFuX3NhYTk3MzBfY2FtX2luaXQoZGV2KSkpCi0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9mcmVlX2NvbnNpc3RlbnQ7CiAKIAkvKiBJbml0aWFsaXplIE1JSSByZWdpc3RlcnMuICovCiAJaWYgKChyZXQgPSBsYW5fc2FhOTczMF9taWlfaW5pdChscCkpKQotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfZnJlZV9jb25zaXN0ZW50OwogCiAJLyogSW5pdGlhbGl6ZSBjb250cm9sIHJlZ2lzdGVycy4gKi8KLQlpZiAoKHJldCA9IGxhbl9zYWE5NzMwX2NvbnRyb2xfaW5pdChscCkpKSAKLQkJZ290byBvdXQ7Ci0gICAgICAgIAorCWlmICgocmV0ID0gbGFuX3NhYTk3MzBfY29udHJvbF9pbml0KGxwKSkpCisJCWdvdG8gb3V0X2ZyZWVfY29uc2lzdGVudDsKKwogCS8qIExvYWQgQ0FNIHJlZ2lzdGVycy4gKi8KLQlpZiAoKHJldCA9IGxhbl9zYWE5NzMwX2NhbV9sb2FkKGxwKSkpIAotCQlnb3RvIG91dDsKLQkKKwlpZiAoKHJldCA9IGxhbl9zYWE5NzMwX2NhbV9sb2FkKGxwKSkpCisJCWdvdG8gb3V0X2ZyZWVfY29uc2lzdGVudDsKKwogCS8qIEluaXRpYWxpemUgRE1BIGNvbnRleHQgcmVnaXN0ZXJzLiAqLwogCWlmICgocmV0ID0gbGFuX3NhYTk3MzBfZG1hX2luaXQobHApKSkKLQkJZ290byBvdXQ7Ci0JCisJCWdvdG8gb3V0X2ZyZWVfY29uc2lzdGVudDsKKwogCXNwaW5fbG9ja19pbml0KCZscC0+bG9jayk7Ci0JCQorCiAJZGV2LT5vcGVuID0gbGFuX3NhYTk3MzBfb3BlbjsKIAlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGxhbl9zYWE5NzMwX3N0YXJ0X3htaXQ7CiAJZGV2LT5zdG9wID0gbGFuX3NhYTk3MzBfY2xvc2U7CkBAIC0xMDg2LDQ0ICsxMDQ5LDQzIEBACiAJZGV2LT50eF90aW1lb3V0ID0gbGFuX3NhYTk3MzBfdHhfdGltZW91dDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gKEhaID4+IDEpOwogCWRldi0+ZG1hID0gMDsKLQkKLQlyZXQgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKworCXJldCA9IHJlZ2lzdGVyX25ldGRldiAoZGV2KTsKIAlpZiAocmV0KQotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfZnJlZV9jb25zaXN0ZW50OworCiAJcmV0dXJuIDA7CiAKLSBvdXQ6Ci0Ja2ZyZWUoZGV2LT5wcml2KTsKK291dF9mcmVlX2NvbnNpc3RlbnQ6CisJbGFuX3NhYTk3MzBfZnJlZV9idWZmZXJzKHBkZXYsIGxwKTsKK291dF9pb3VubWFwOgorCWlvdW5tYXAobHAtPmV2bV9zYWE5NzMwX3JlZ3MpOworb3V0X2lvdW5tYXBfbGFuOgorCWlvdW5tYXAobHAtPmxhbl9zYWE5NzMwX3JlZ3MpOworb3V0OgogCXJldHVybiByZXQ7CiB9CiAKIAogc3RhdGljIGludCBfX2RldmluaXQgc2FhOTczMF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXVuc2lnbmVkIGludCBwY2lfaW9hZGRyOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgcGNpX2lvYWRkcjsKIAlpbnQgZXJyOwogCiAJaWYgKGxhbl9zYWE5NzMwX2RlYnVnID4gMSkKIAkJcHJpbnRrKCJzYWE5NzMwLmM6IFBDSSBiaW9zIGlzIHByZXNlbnQsIGNoZWNraW5nIGZvciBkZXZpY2VzLi4uXG4iKTsKIAotCWVyciA9IC1FTk9NRU07Ci0JZGV2ID0gYWxsb2NfZXRoZXJkZXYoMCk7Ci0JaWYgKCFkZXYpCi0JCWdvdG8gb3V0OwotCi0JU0VUX01PRFVMRV9PV05FUihkZXYpOwotCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0gICAgICAgIGlmIChlcnIpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSwgYWJvcnRpbmcuXG4iKTsKLSAgICAgICAgICAgICAgICBnb3RvIG91dDE7Ci0gICAgICAgIH0KKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlLCBhYm9ydGluZy5cbiIpOworCQlnb3RvIG91dDsKKwl9CiAKIAllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIERSVl9NT0RVTEVfTkFNRSk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlcywgYWJvcnRpbmcuXG4iKTsKLQkJZ290byBvdXQyOworCQlnb3RvIG91dF9kaXNhYmxlX3BkZXY7CiAJfQogCiAJcGNpX2lycV9saW5lID0gcGRldi0+aXJxOwpAQCAtMTEzMiw0OSArMTA5NCw1NCBAQAogCXBjaV9pb2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSk7CiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKLQlwcmludGsoIkZvdW5kIFNBQTk3MzAgKFBDSSkgYXQgJSN4LCBpcnEgJWQuXG4iLAorCXByaW50aygiRm91bmQgU0FBOTczMCAoUENJKSBhdCAlbHgsIGlycSAlZC5cbiIsCiAJICAgICAgIHBjaV9pb2FkZHIsIHBjaV9pcnFfbGluZSk7CiAKLQllcnIgPSBsYW5fc2FhOTczMF9pbml0KGRldiwgcGNpX2lvYWRkciwgcGNpX2lycV9saW5lKTsKKwlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUpKTsKKwlpZiAoIWRldikKKwkJZ290byBvdXRfZGlzYWJsZV9wZGV2OworCisJZXJyID0gbGFuX3NhYTk3MzBfaW5pdChkZXYsIHBkZXYsIHBjaV9pb2FkZHIsIHBjaV9pcnFfbGluZSk7CiAJaWYgKGVycikgewotCQlwcmludGsoIkxhbiBpbml0IGZhaWxlZCIpOwotCQlnb3RvIG91dDI7CisJCXByaW50aygiTEFOIGluaXQgZmFpbGVkIik7CisJCWdvdG8gb3V0X2ZyZWVfbmV0ZGV2OwogCX0KIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAJcmV0dXJuIDA7Ci0JCi1vdXQyOgotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLW91dDE6CisKK291dF9mcmVlX25ldGRldjoKIAlmcmVlX25ldGRldihkZXYpOworb3V0X2Rpc2FibGVfcGRldjoKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiBvdXQ6CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCXJldHVybiBlcnI7CiB9CiAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNhYTk3MzBfZHJpdmVyID0gewotCS5uYW1lICAgICAgICAgICA9IERSVl9NT0RVTEVfTkFNRSwKLQkuaWRfdGFibGUgICAgICAgPSBzYWE5NzMwX3BjaV90YmwsCi0JLnByb2JlICAgICAgICAgID0gc2FhOTczMF9pbml0X29uZSwKLQkucmVtb3ZlICAgICAgICAgPSBfX2RldmV4aXRfcChzYWE5NzMwX3JlbW92ZV9vbmUpLAorCS5uYW1lCQk9IERSVl9NT0RVTEVfTkFNRSwKKwkuaWRfdGFibGUJPSBzYWE5NzMwX3BjaV90YmwsCisJLnByb2JlCQk9IHNhYTk3MzBfaW5pdF9vbmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzYWE5NzMwX3JlbW92ZV9vbmUpLAogfTsKIAogCiBzdGF0aWMgaW50IF9faW5pdCBzYWE5NzMwX2luaXQodm9pZCkKIHsKLSAgICAgICAgcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmc2FhOTczMF9kcml2ZXIpOworCXJldHVybiBwY2lfbW9kdWxlX2luaXQoJnNhYTk3MzBfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNhYTk3MzBfY2xlYW51cCh2b2lkKQogewotICAgICAgICBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNhYTk3MzBfZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNhYTk3MzBfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoc2FhOTczMF9pbml0KTsKIG1vZHVsZV9leGl0KHNhYTk3MzBfY2xlYW51cCk7CiAKLQotCitNT0RVTEVfQVVUSE9SKCJSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBOTczMCBldGhlcm5ldCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxeC5jIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKaW5kZXggNzRkNWYxYS4uYzkxZTJlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTF4LmMKKysrIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKQEAgLTIxODMsOSArMjE4Myw4IEBACiAgKgkwIC0tPiB0aGVyZSBpcyBhIGRldmljZQogICoJYW55dGhpbmcgZWxzZSwgZXJyb3IKICAqLwotc3RhdGljIGludCBzbWNfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc21jX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAl1bnNpZ25lZCBpbnQgX19pb21lbSAqYWRkcjsKQEAgLTIyMTIsNyArMjIxMSw3IEBACiAJCWdvdG8gb3V0X3JlbGVhc2VfaW87CiAJfQogCVNFVF9NT0RVTEVfT1dORVIobmRldik7Ci0JU0VUX05FVERFVl9ERVYobmRldiwgZGV2KTsKKwlTRVRfTkVUREVWX0RFVihuZGV2LCAmcGRldi0+ZGV2KTsKIAogCW5kZXYtPmRtYSA9ICh1bnNpZ25lZCBjaGFyKS0xOwogCW5kZXYtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CkBAIC0yMjMzLDcgKzIyMzIsNyBAQAogCQlnb3RvIG91dF9yZWxlYXNlX2F0dHJpYjsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBuZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBuZGV2KTsKIAlyZXQgPSBzbWNfcHJvYmUobmRldiwgYWRkcik7CiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIG91dF9pb3VubWFwOwpAQCAtMjI0OSw3ICsyMjQ4LDcgQEAKIAlyZXR1cm4gMDsKIAogIG91dF9pb3VubWFwOgotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWlvdW5tYXAoYWRkcik7CiAgb3V0X3JlbGVhc2VfYXR0cmliOgogCXNtY19yZWxlYXNlX2F0dHJpYihwZGV2KTsKQEAgLTIyNjMsMTQgKzIyNjIsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHNtY19kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc21jX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzbWNfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwogCkBAIC0yMjk1LDkgKzIyOTMsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNtY19kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc21jX2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKG5kZXYpIHsKIAkJaWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHsKQEAgLTIzMDksMTQgKzIzMDcsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzbWNfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNtY19kcnZfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAobmRldikgewogCQlzdHJ1Y3Qgc21jX2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpOwotCQlzbWNfZW5hYmxlX2RldmljZShwZGV2KTsKKwkJc21jX2VuYWJsZV9kZXZpY2UoZGV2KTsKIAkJaWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHsKIAkJCXNtY19yZXNldChuZGV2KTsKIAkJCXNtY19lbmFibGUobmRldik7CkBAIC0yMzI4LDEzICsyMzI1LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzbWNfZHJpdmVyID0gewotCS5uYW1lCQk9IENBUkROQU1FLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc21jX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gc21jX2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IHNtY19kcnZfcmVtb3ZlLAogCS5zdXNwZW5kCT0gc21jX2Rydl9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc21jX2Rydl9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gQ0FSRE5BTUUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNtY19pbml0KHZvaWQpCkBAIC0yMzQ4LDEyICsyMzQ2LDEyIEBACiAjZW5kaWYKICNlbmRpZgogCi0JcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmc21jX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc21jX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzbWNfY2xlYW51cCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzbWNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc21jX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHNtY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxeC5oIGIvZHJpdmVycy9uZXQvc21jOTF4LmgKaW5kZXggODE3ZjIwMC4uYTEwY2QxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTF4LmgKKysrIGIvZHJpdmVycy9uZXQvc21jOTF4LmgKQEAgLTI4OSw2ICsyODksMzggQEAKICNkZWZpbmUgUlBDX0xTQV9ERUZBVUxUCQlSUENfTEVEX1RYX1JYCiAjZGVmaW5lIFJQQ19MU0JfREVGQVVMVAkJUlBDX0xFRF8xMDBfMTAKIAorI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMVgwMCkKKworI2luY2x1ZGUgPGF1MXh4eC5oPgorCisvKiBXZSBjYW4gb25seSBkbyAxNi1iaXQgcmVhZHMgYW5kIHdyaXRlcyBpbiB0aGUgc3RhdGljIG1lbW9yeSBzcGFjZS4gKi8KKyNkZWZpbmUgU01DX0NBTl9VU0VfOEJJVAkwCisjZGVmaW5lIFNNQ19DQU5fVVNFXzE2QklUCTEKKyNkZWZpbmUgU01DX0NBTl9VU0VfMzJCSVQJMAorI2RlZmluZSBTTUNfSU9fU0hJRlQJCTAKKyNkZWZpbmUgU01DX05PV0FJVAkJMQorCisjZGVmaW5lIFNNQ19pbncoYSwgcikJCWF1X3JlYWR3KCh1bnNpZ25lZCBsb25nKSgoYSkgKyAocikpKQorI2RlZmluZSBTTUNfaW5zdyhhLCByLCBwLCBsKQlcCisJZG8gewlcCisJCXVuc2lnbmVkIGxvbmcgX2EgPSAodW5zaWduZWQgbG9uZykoKGEpICsgKHIpKTsgXAorCQlpbnQgX2wgPSAobCk7IFwKKwkJdTE2ICpfcCA9ICh1MTYgKikocCk7IFwKKwkJd2hpbGUgKF9sLS0gPiAwKSBcCisJCQkqX3ArKyA9IGF1X3JlYWR3KF9hKTsgXAorCX0gd2hpbGUoMCkKKyNkZWZpbmUgU01DX291dHcodiwgYSwgcikJYXVfd3JpdGV3KHYsICh1bnNpZ25lZCBsb25nKSgoYSkgKyAocikpKQorI2RlZmluZSBTTUNfb3V0c3coYSwgciwgcCwgbCkJXAorCWRvIHsJXAorCQl1bnNpZ25lZCBsb25nIF9hID0gKHVuc2lnbmVkIGxvbmcpKChhKSArIChyKSk7IFwKKwkJaW50IF9sID0gKGwpOyBcCisJCWNvbnN0IHUxNiAqX3AgPSAoY29uc3QgdTE2ICopKHApOyBcCisJCXdoaWxlIChfbC0tID4gMCkgXAorCQkJYXVfd3JpdGV3KCpfcCsrICwgX2EpOyBcCisJfSB3aGlsZSgwKQorCisjZGVmaW5lIHNldF9pcnFfdHlwZShpcnEsIHR5cGUpIGRvIHt9IHdoaWxlICgwKQorCiAjZWxzZQogCiAjZGVmaW5lIFNNQ19DQU5fVVNFXzhCSVQJMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCmluZGV4IGM3OTZmNDEuLjBkNzY1ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYworKysgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKQEAgLTIyOTAsNyArMjI5MCw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzcGlkZXJfbmV0X2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gc3BpZGVyX25ldF9kcml2ZXJfbmFtZSwKIAkuaWRfdGFibGUJPSBzcGlkZXJfbmV0X3BjaV90YmwsCiAJLnByb2JlCQk9IHNwaWRlcl9uZXRfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvcHJvdGVvbi5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3Byb3Rlb24uYwppbmRleCBkMDRjOTE4Li40Zjc1Njk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvcHJvdGVvbi5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9wcm90ZW9uLmMKQEAgLTM0NCw5ICszNDQsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnByb3Rlb25fZGV2W0lTQVRSX01BWF9BREFQVEVSU107CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBwcm90ZW9uX2RyaXZlciA9IHsKLQkubmFtZQkJPSAicHJvdGVvbiIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwcm90ZW9uX2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAicHJvdGVvbiIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHByb3Rlb25faW5pdCh2b2lkKQpAQCAtMzU1LDcgKzM1Niw3IEBACiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAlpbnQgaSwgbnVtID0gMCwgZXJyID0gMDsKIAotCWVyciA9IGRyaXZlcl9yZWdpc3RlcigmcHJvdGVvbl9kcml2ZXIpOworCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcHJvdGVvbl9kcml2ZXIpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTM3Miw3ICszNzMsNyBAQAogCQllcnIgPSBzZXR1cF9jYXJkKGRldiwgJnBkZXYtPmRldik7CiAJCWlmICghZXJyKSB7CiAJCQlwcm90ZW9uX2RldltpXSA9IHBkZXY7Ci0JCQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgZGV2KTsKKwkJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAJCQkrK251bTsKIAkJfSBlbHNlIHsKIAkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOwpAQCAtMzk5LDE3ICs0MDAsMTcgQEAKIAkJCiAJCWlmICghcGRldikKIAkJCWNvbnRpbnVlOwotCQlkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJCWRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgUFJPVEVPTl9JT19FWFRFTlQpOwogCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKIAkJZnJlZV9kbWEoZGV2LT5kbWEpOwogCQl0bXNkZXZfdGVybShkZXYpOwogCQlmcmVlX25ldGRldihkZXYpOwotCQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKIAl9Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnByb3Rlb25fZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcHJvdGVvbl9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChwcm90ZW9uX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NraXNhLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvc2tpc2EuYwppbmRleCA3MmNmNzA4Li5kNmJhNDFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvc2tpc2EuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvc2tpc2EuYwpAQCAtMzU0LDkgKzM1NCwxMCBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2tfaXNhX2RldltJU0FUUl9NQVhfQURBUFRFUlNdOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc2tfaXNhX2RyaXZlciA9IHsKLQkubmFtZQkJPSAic2tpc2EiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2tfaXNhX2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAic2tpc2EiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBza19pc2FfaW5pdCh2b2lkKQpAQCAtMzY1LDcgKzM2Niw3IEBACiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAlpbnQgaSwgbnVtID0gMCwgZXJyID0gMDsKIAotCWVyciA9IGRyaXZlcl9yZWdpc3Rlcigmc2tfaXNhX2RyaXZlcik7CisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZza19pc2FfZHJpdmVyKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC0zODIsNyArMzgzLDcgQEAKIAkJZXJyID0gc2V0dXBfY2FyZChkZXYsICZwZGV2LT5kZXYpOwogCQlpZiAoIWVycikgewogCQkJc2tfaXNhX2RldltpXSA9IHBkZXY7Ci0JCQlkZXZfc2V0X2RydmRhdGEoJnNrX2lzYV9kZXZbaV0tPmRldiwgZGV2KTsKKwkJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHNrX2lzYV9kZXZbaV0sIGRldik7CiAJCQkrK251bTsKIAkJfSBlbHNlIHsKIAkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOwpAQCAtNDA5LDE3ICs0MTAsMTcgQEAKIAogCQlpZiAoIXBkZXYpCiAJCQljb250aW51ZTsKLQkJZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCQlkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAkJcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIFNLX0lTQV9JT19FWFRFTlQpOwogCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKIAkJZnJlZV9kbWEoZGV2LT5kbWEpOwogCQl0bXNkZXZfdGVybShkZXYpOwogCQlmcmVlX25ldGRldihkZXYpOwotCQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKIAl9Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnNrX2lzYV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZza19pc2FfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoc2tfaXNhX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKaW5kZXggNzE4Nzk1OC4uMDBlNTUxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCkBAIC0zMzAsNyArMzMwLDcgQEAKIAogY29uZmlnIEFUTUVMCiAgICAgICB0cmlzdGF0ZSAiQXRtZWwgYXQ3NmM1MHggY2hpcHNldCAgODAyLjExYiBzdXBwb3J0IgotICAgICAgZGVwZW5kcyBvbiBORVRfUkFESU8gJiYgRVhQRVJJTUVOVEFMCisgICAgICBkZXBlbmRzIG9uIE5FVF9SQURJTwogICAgICAgc2VsZWN0IEZXX0xPQURFUgogICAgICAgc2VsZWN0IENSQzMyCiAgICAgICAgLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKaW5kZXggYTNlMjM1Mi4uNWU1M2M1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCkBAIC03Miw3ICs3Miw3IEBACiAjaW5jbHVkZSAiYXRtZWwuaCIKIAogI2RlZmluZSBEUklWRVJfTUFKT1IgMAotI2RlZmluZSBEUklWRVJfTUlOT1IgOTYKKyNkZWZpbmUgRFJJVkVSX01JTk9SIDk4CiAKIE1PRFVMRV9BVVRIT1IoIlNpbW9uIEtlbGxleSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTdXBwb3J0IGZvciBBdG1lbCBhdDc2YzUweCA4MDIuMTEgd2lyZWxlc3MgZXRoZXJuZXQgY2FyZHMuIik7CkBAIC0xNTA0LDcgKzE1MDQsNyBAQAogICAgICAgICByZXR1cm4gbGVuOwogfQogCi1zdHJ1Y3QgbmV0X2RldmljZSAqaW5pdF9hdG1lbF9jYXJkKCB1bnNpZ25lZCBzaG9ydCBpcnEsIGludCBwb3J0LCBjb25zdCBBdG1lbEZXVHlwZSBmd190eXBlLCAgCitzdHJ1Y3QgbmV0X2RldmljZSAqaW5pdF9hdG1lbF9jYXJkKCB1bnNpZ25lZCBzaG9ydCBpcnEsIHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3QgQXRtZWxGV1R5cGUgZndfdHlwZSwgIAogCQkJCSAgICBzdHJ1Y3QgZGV2aWNlICpzeXNfZGV2LCBpbnQgKCpjYXJkX3ByZXNlbnQpKHZvaWQgKiksIHZvaWQgKmNhcmQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTE2MDUsOCArMTYwNSw4IEBACiAJCWdvdG8gZXJyX291dF9mcmVlOwogCX0KIAotCWlmIChwcml2LT5idXNfdHlwZSA9PSBCVVNfVFlQRV9QQ0kgJiYKLQkgICAgIXJlcXVlc3RfcmVnaW9uKCBkZXYtPmJhc2VfYWRkciwgNjQsIGRldi0+bmFtZSApKSB7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgMzIsIAorCQkJICAgIHByaXYtPmJ1c190eXBlID09IEJVU19UWVBFX1BDQ0FSRCA/ICAiYXRtZWxfY3MiIDogImF0bWVsX3BjaSIpKSB7CiAJCWdvdG8gZXJyX291dF9pcnE7CiAJfQogCQpAQCAtMTYyMiwxNSArMTYyMiwxNiBAQAogCQogCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkgKCJkcml2ZXIvYXRtZWwiLCAwLCBOVUxMLCBhdG1lbF9yZWFkX3Byb2MsIHByaXYpOwkKIAkKLQlwcmludGsoS0VSTl9JTkZPICIlczogQXRtZWwgYXQ3NmM1MHggd2lyZWxlc3MuIFZlcnNpb24gJWQuJWQgc2ltb25AdGhla2VsbGV5cy5vcmcudWtcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgRFJJVkVSX01BSk9SLCBEUklWRVJfTUlOT1IpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBBdG1lbCBhdDc2YzUweC4gVmVyc2lvbiAlZC4lZC4gTUFDICUuMng6JS4yeDolLjJ4OiUuMng6JS4yeDolLjJ4XG4iLAorCSAgICAgICBkZXYtPm5hbWUsIERSSVZFUl9NQUpPUiwgRFJJVkVSX01JTk9SLAorCSAgICAgICBkZXYtPmRldl9hZGRyWzBdLCBkZXYtPmRldl9hZGRyWzFdLCBkZXYtPmRldl9hZGRyWzJdLAorCSAgICAgICBkZXYtPmRldl9hZGRyWzNdLCBkZXYtPmRldl9hZGRyWzRdLCBkZXYtPmRldl9hZGRyWzVdICk7CiAJCiAJU0VUX01PRFVMRV9PV05FUihkZXYpOwogCXJldHVybiBkZXY7CiAJCiAgZXJyX291dF9yZXM6Ci0JaWYgKHByaXYtPmJ1c190eXBlID09IEJVU19UWVBFX1BDSSkKLQkgICAgICAgIHJlbGVhc2VfcmVnaW9uKCBkZXYtPmJhc2VfYWRkciwgNjQgKTsKKwlyZWxlYXNlX3JlZ2lvbiggZGV2LT5iYXNlX2FkZHIsIDMyKTsKICBlcnJfb3V0X2lycToKIAlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKICBlcnJfb3V0X2ZyZWU6CkBAIC0xNjQwLDcgKzE2NDEsNyBAQAogCiBFWFBPUlRfU1lNQk9MKGluaXRfYXRtZWxfY2FyZCk7CiAKLXZvaWQgc3RvcF9hdG1lbF9jYXJkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBmcmVlcmVzKQordm9pZCBzdG9wX2F0bWVsX2NhcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJCQpAQCAtMTY1NCwxMCArMTY1NSw3IEBACiAJcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9hdG1lbCIsIE5VTEwpOwogCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwogCWtmcmVlKHByaXYtPmZpcm13YXJlKTsKLQlpZiAoZnJlZXJlcykgewotCQkvKiBQQ01DSUEgZnJlZXMgdGhpcyBzdHVmZiwgc28gb25seSBmb3IgUENJICovCi0JICAgICAgICByZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgNjQpOwotICAgICAgICB9CisJcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIDMyKTsKIAlmcmVlX25ldGRldihkZXYpOwogfQogCkBAIC0xODEwLDkgKzE4MDgsOSBAQAogCX0KIAlpZihkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEKQogCQlwcml2LT5leGNsdWRlX3VuZW5jcnlwdGVkID0gMTsKLQlpZihkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9PUEVOKQorICAgICAgIAlpZihkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9PUEVOKSAKIAkJcHJpdi0+ZXhjbHVkZV91bmVuY3J5cHRlZCA9IDA7Ci0JCisgICAgICAgCiAJcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIH0KIApAQCAtMTgyNywxMSArMTgyNSwxMiBAQAogCQogCWlmICghcHJpdi0+d2VwX2lzX29uKQogCQlkd3JxLT5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKLQllbHNlIGlmIChwcml2LT5leGNsdWRlX3VuZW5jcnlwdGVkKQotCQlkd3JxLT5mbGFncyA9IElXX0VOQ09ERV9SRVNUUklDVEVEOwotCWVsc2UKLQkJZHdycS0+ZmxhZ3MgPSBJV19FTkNPREVfT1BFTjsKLQkJCisJZWxzZSB7CisJCWlmIChwcml2LT5leGNsdWRlX3VuZW5jcnlwdGVkKQorCQkJZHdycS0+ZmxhZ3MgPSBJV19FTkNPREVfUkVTVFJJQ1RFRDsKKwkJZWxzZQorCQkJZHdycS0+ZmxhZ3MgPSBJV19FTkNPREVfT1BFTjsKKwl9CiAJCS8qIFdoaWNoIGtleSBkbyB3ZSB3YW50ID8gLTEgLT4gdHggaW5kZXggKi8KIAlpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IDQpCiAJCWluZGV4ID0gcHJpdi0+ZGVmYXVsdF9rZXk7CkBAIC0yNjQ1LDggKzI2NDQsOCBAQAogCX0gCiB9CiAKLSAKLXN0YXRpYyB2b2lkIHNlbmRfYXV0aGVudGljYXRpb25fcmVxdWVzdChzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwgdTggKmNoYWxsZW5nZSwgaW50IGNoYWxsZW5nZV9sZW4pCisKK3N0YXRpYyB2b2lkIHNlbmRfYXV0aGVudGljYXRpb25fcmVxdWVzdChzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwgdTE2IHN5c3RlbSwgdTggKmNoYWxsZW5nZSwgaW50IGNoYWxsZW5nZV9sZW4pCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgaGVhZGVyOwogCXN0cnVjdCBhdXRoX2JvZHkgYXV0aDsKQEAgLTI2NTgsMTQgKzI2NTcsMTEgQEAKIAltZW1jcHkoaGVhZGVyLmFkZHIyLCBwcml2LT5kZXYtPmRldl9hZGRyLCA2KTsKIAltZW1jcHkoaGVhZGVyLmFkZHIzLCBwcml2LT5DdXJyZW50QlNTSUQsIDYpOwogCQotCWlmIChwcml2LT53ZXBfaXNfb24pIHsKLQkJYXV0aC5hbGcgPSBjcHVfdG9fbGUxNihDODAyMTFfTUdNVF9BQU5fU0hBUkVES0VZKTsgCisJaWYgKHByaXYtPndlcF9pc19vbiAmJiBwcml2LT5DdXJyZW50QXV0aGVudFRyYW5zYWN0aW9uU2VxTnVtICE9IDEpIAogCQkvKiBubyBXRVAgZm9yIGF1dGhlbnRpY2F0aW9uIGZyYW1lcyB3aXRoIFRyU2VxTm8gMSAqLwotCQlpZiAocHJpdi0+Q3VycmVudEF1dGhlbnRUcmFuc2FjdGlvblNlcU51bSAhPSAxKQotCQkJaGVhZGVyLmZyYW1lX2N0bCB8PSAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKLQl9IGVsc2UgewotCQlhdXRoLmFsZyA9IGNwdV90b19sZTE2KEM4MDIxMV9NR01UX0FBTl9PUEVOU1lTVEVNKTsKLQl9CisgICAgICAgICAgICAgICAgaGVhZGVyLmZyYW1lX2N0bCB8PSAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKKwkKKwlhdXRoLmFsZyA9IGNwdV90b19sZTE2KHN5c3RlbSk7IAogCiAJYXV0aC5zdGF0dXMgPSAwOwogCWF1dGgudHJhbnNfc2VxID0gY3B1X3RvX2xlMTYocHJpdi0+Q3VycmVudEF1dGhlbnRUcmFuc2FjdGlvblNlcU51bSk7CkBAIC0yODM0LDYgKzI4MzAsNyBAQAogCXN0cnVjdCBhdXRoX2JvZHkgKmF1dGggPSAoc3RydWN0IGF1dGhfYm9keSAqKXByaXYtPnJ4X2J1ZjsKIAl1MTYgc3RhdHVzID0gbGUxNl90b19jcHUoYXV0aC0+c3RhdHVzKTsKIAl1MTYgdHJhbnNfc2VxX25vID0gbGUxNl90b19jcHUoYXV0aC0+dHJhbnNfc2VxKTsKKwl1MTYgc3lzdGVtID0gbGUxNl90b19jcHUoYXV0aC0+YWxnKTsKIAkKIAlpZiAoc3RhdHVzID09IEM4MDIxMV9NR01UX1NDX1N1Y2Nlc3MgJiYgIXByaXYtPndlcF9pc19vbikgeyAKIAkJLyogbm8gV0VQICovCkBAIC0yODU1LDcgKzI4NTIsNyBAQAogCQkJCQogCQlpZiAodHJhbnNfc2VxX25vID09IDB4MDAwMiAmJgogCQkgICAgYXV0aC0+ZWxfaWQgPT0gQzgwMjExX01HTVRfRWxlbWVudElEX0NoYWxsZW5nZVRleHQpIHsKLQkJCXNlbmRfYXV0aGVudGljYXRpb25fcmVxdWVzdChwcml2LCBhdXRoLT5jaGFsbF90ZXh0LCBhdXRoLT5jaGFsbF90ZXh0X2xlbik7CisJCQlzZW5kX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3QocHJpdiwgc3lzdGVtLCBhdXRoLT5jaGFsbF90ZXh0LCBhdXRoLT5jaGFsbF90ZXh0X2xlbik7CiAJCQlyZXR1cm47CiAJCX0KIAkJCkBAIC0yODcyLDE0ICsyODY5LDIwIEBACiAJCX0KIAl9CQkJCiAJCi0JaWYgKHN0YXR1cyA9PSBDODAyMTFfTUdNVF9TQ19BdXRoQWxnTm90U3VwcG9ydGVkICYmIHByaXYtPmNvbm5lY3RfdG9fYW55X0JTUykgewotCQlpbnQgYnNzX2luZGV4OwotCQkKLQkJcHJpdi0+QlNTaW5mb1soaW50KShwcml2LT5jdXJyZW50X0JTUyldLmNoYW5uZWwgfD0gMHg4MDsKLQkJCi0JCWlmICgoYnNzX2luZGV4ICA9IHJldHJpZXZlX2Jzcyhwcml2KSkgIT0gLTEpIHsKLQkJCWF0bWVsX2pvaW5fYnNzKHByaXYsIGJzc19pbmRleCk7Ci0JCQlyZXR1cm47CisJaWYgKHN0YXR1cyA9PSBDODAyMTFfTUdNVF9TQ19BdXRoQWxnTm90U3VwcG9ydGVkKSB7CisJCS8qIERvIG9wZW5zeXN0ZW0gZmlyc3QsIHRoZW4gdHJ5IHNoYXJlZGtleSAqLworCQlpZiAoc3lzdGVtID09ICBDODAyMTFfTUdNVF9BQU5fT1BFTlNZU1RFTSkgeworCQkJcHJpdi0+Q3VycmVudEF1dGhlbnRUcmFuc2FjdGlvblNlcU51bSA9IDB4MDAxOworCQkJc2VuZF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0KHByaXYsIEM4MDIxMV9NR01UX0FBTl9TSEFSRURLRVksIE5VTEwsIDApOworCQl9IGVsc2UgaWYgKHByaXYtPmNvbm5lY3RfdG9fYW55X0JTUykgeworCQkJaW50IGJzc19pbmRleDsKKwkJCQorCQkJcHJpdi0+QlNTaW5mb1soaW50KShwcml2LT5jdXJyZW50X0JTUyldLmNoYW5uZWwgfD0gMHg4MDsKKwkJCQorCQkJaWYgKChic3NfaW5kZXggID0gcmV0cmlldmVfYnNzKHByaXYpKSAhPSAtMSkgeworCQkJCWF0bWVsX2pvaW5fYnNzKHByaXYsIGJzc19pbmRleCk7CisJCQkJcmV0dXJuOworCQkJfQogCQl9CiAJfQogCQpAQCAtMzIwNSw3ICszMjA4LDcgQEAKIAkJICBwcml2LT5BdXRoZW50aWNhdGlvblJlcXVlc3RSZXRyeUNudCsrOwogCQkgIHByaXYtPkN1cnJlbnRBdXRoZW50VHJhbnNhY3Rpb25TZXFOdW0gPSAweDAwMDE7CiAJCSAgbW9kX3RpbWVyKCZwcml2LT5tYW5hZ2VtZW50X3RpbWVyLCBqaWZmaWVzICsgTUdNVF9KSUZGSUVTKTsKLQkJICBzZW5kX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3QocHJpdiwgTlVMTCwgMCk7CisJCSAgc2VuZF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0KHByaXYsIEM4MDIxMV9NR01UX0FBTl9PUEVOU1lTVEVNLCBOVUxMLCAwKTsKIAkgIH0KIAkgIAogCSAgYnJlYWs7CkBAIC0zMzEyLDcgKzMzMTUsNyBAQAogCQkJCQogCQkJCW1vZF90aW1lcigmcHJpdi0+bWFuYWdlbWVudF90aW1lciwgamlmZmllcyArIE1HTVRfSklGRklFUyk7CiAJCQkJcHJpdi0+Q3VycmVudEF1dGhlbnRUcmFuc2FjdGlvblNlcU51bSA9IDB4MDAwMTsKLQkJCQlzZW5kX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3QocHJpdiwgTlVMTCwgMCk7CisJCQkJc2VuZF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0KHByaXYsIEM4MDIxMV9NR01UX0FBTl9TSEFSRURLRVksIE5VTEwsIDApOwogCQkJfQogCQkJcmV0dXJuOwogCQl9CkBAIC0zNDgyLDExICszNDg1LDYgQEAKIAkJCXByaW50ayhLRVJOX0FMRVJUICIlczogKioqIEludmFsaWQgTUFDIGFkZHJlc3MuIFVQR1JBREUgRmlybXdhcmUgKioqKlxuIiwgZGV2LT5uYW1lKTsKIAkJCW1lbWNweShkZXYtPmRldl9hZGRyLCBkZWZhdWx0X21hYywgNik7CiAJCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1BQyBhZGRyZXNzICUuMng6JS4yeDolLjJ4OiUuMng6JS4yeDolLjJ4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLAotCQkgICAgICAgZGV2LT5kZXZfYWRkclswXSwgZGV2LT5kZXZfYWRkclsxXSwgZGV2LT5kZXZfYWRkclsyXSwKLQkJICAgICAgIGRldi0+ZGV2X2FkZHJbM10sIGRldi0+ZGV2X2FkZHJbNF0sIGRldi0+ZGV2X2FkZHJbNV0gKTsKLQkJCiAJfQogCQogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5oCmluZGV4IDgyNTAwMGUuLmI5YjNlNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuaApAQCAtMzUsOSArMzUsOSBAQAogCUFUTUVMX0ZXX1RZUEVfNTA2CiB9IEF0bWVsRldUeXBlOwogCi1zdHJ1Y3QgbmV0X2RldmljZSAqaW5pdF9hdG1lbF9jYXJkKHVuc2lnbmVkIHNob3J0LCBpbnQsIGNvbnN0IEF0bWVsRldUeXBlLCBzdHJ1Y3QgZGV2aWNlICosIAorc3RydWN0IG5ldF9kZXZpY2UgKmluaXRfYXRtZWxfY2FyZCh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgbG9uZywgY29uc3QgQXRtZWxGV1R5cGUsIHN0cnVjdCBkZXZpY2UgKiwgCiAJCQkJICAgIGludCAoKnByZXNlbnRfZnVuYykodm9pZCAqKSwgdm9pZCAqICk7Ci12b2lkIHN0b3BfYXRtZWxfY2FyZCggc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50ICk7Cit2b2lkIHN0b3BfYXRtZWxfY2FyZCggc3RydWN0IG5ldF9kZXZpY2UgKik7CiBpbnQgYXRtZWxfb3Blbiggc3RydWN0IG5ldF9kZXZpY2UgKiApOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jCmluZGV4IDFiZDEzMTQuLjE3ZDFmZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfY3MuYwpAQCAtNjMsNiArNjMsNyBAQAogICAgYmUgcHJlc2VudCBidXQgZGlzYWJsZWQgLS0gYnV0IGl0IGNhbiB0aGVuIGJlIGVuYWJsZWQgZm9yIHNwZWNpZmljCiAgICBtb2R1bGVzIGF0IGxvYWQgdGltZSB3aXRoIGEgJ3BjX2RlYnVnPSMnIG9wdGlvbiB0byBpbnNtb2QuCiAqLworCiAjaWZkZWYgUENNQ0lBX0RFQlVHCiBzdGF0aWMgaW50IHBjX2RlYnVnID0gUENNQ0lBX0RFQlVHOwogbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDApOwpAQCAtMjg1LDQxICsyODYsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiBsaXN0IG9mIGNhcmRzIHdlIGtub3cgYWJvdXQgYW5kIHRoZWlyIGZpcm13YXJlIHJlcXVpcmVtZW50cy4KLSAgIEdvIGVpdGhlciBieSBNYW5maWQgb3IgdmVyc2lvbiBzdHJpbmdzLgotICAgQ2FyZHMgbm90IGluIHRoaXMgbGlzdCB3aWxsIG5lZWQgYSBmaXJtd2FyZSBwYXJhbWV0ZXIgdG8gdGhlIG1vZHVsZQotICAgaW4gYWxsIHByb2JhYmlsaXR5LiBOb3RlIHRoYXQgdGhlIFNNQyAyNjMyIFYyIGFuZCBWMyBoYXZlIHRoZSBzYW1lCi0gICBtYW5maWRzLCBzbyB3ZSBpZ25vcmUgdGhvc2UgYW5kIHVzZSB0aGUgdmVyc2lvbjEgc3RyaW5ncy4gKi8KLQotc3RhdGljIHN0cnVjdCB7IAotCWludCBtYW5mLCBjYXJkOwotCWNoYXIgKnZlcjE7Ci0JQXRtZWxGV1R5cGUgZmlybXdhcmU7Ci0JY2hhciAqbmFtZTsKLX0gY2FyZF90YWJsZVtdID0gewotCXsgMCwgMCwgIldMQU4vODAyLjExYiBQQyBDQVJEIiwgQVRNRUxfRldfVFlQRV81MDJELCAiQWN0aW9udGVjIDgwMkNBVDEiIH0sICAKLQl7IDAsIDAsICJBVE1FTC9BVDc2QzUwMkFSIiwgQVRNRUxfRldfVFlQRV81MDIsICJOb05hbWUtUkZNRCIgfSwgCi0JeyAwLCAwLCAiQVRNRUwvQVQ3NkM1MDJBUl9EIiwgQVRNRUxfRldfVFlQRV81MDJELCAiTm9OYW1lLXJldkQiIH0sIAotCXsgMCwgMCwgIkFUTUVML0FUNzZDNTAyQVJfRSIsIEFUTUVMX0ZXX1RZUEVfNTAyRSwgIk5vTmFtZS1yZXZFIiB9LAotCXsgMCwgMCwgIkFUTUVML0FUNzZDNTA0IiwgQVRNRUxfRldfVFlQRV81MDQsICJOb05hbWUtNTA0IiB9LAotCXsgMCwgMCwgIkFUTUVML0FUNzZDNTA0QSIsIEFUTUVMX0ZXX1RZUEVfNTA0QV8yOTU4LCAiTm9OYW1lLTUwNGEtMjk1OCIgfSwKLQl7IDAsIDAsICJBVE1FTC9BVDc2QzUwNF9SIiwgQVRNRUxfRldfVFlQRV81MDRfMjk1OCwgIk5vTmFtZS01MDQtMjk1OCIgfSwKLQl7IE1BTkZJRF8zQ09NLCAweDA2MjAsIE5VTEwsIEFUTUVMX0ZXX1RZUEVfNTAyXzNDT00sICIzY29tIDNDUldFNjIwOTJCIiB9LCAKLQl7IE1BTkZJRF8zQ09NLCAweDA2OTYsIE5VTEwsIEFUTUVMX0ZXX1RZUEVfNTAyXzNDT00sICIzY29tIDNDUlNIUFcxOTYiIH0sIAotCXsgMCwgMCwgIlNNQy8yNjMyVy1WMiIsIEFUTUVMX0ZXX1RZUEVfNTAyLCAiU01DIDI2MzJXLVYyIiB9LAotCXsgMCwgMCwgIlNNQy8yNjMyVyIsIEFUTUVMX0ZXX1RZUEVfNTAyRCwgIlNNQyAyNjMyVy1WMyIgfSwKLQl7IDB4ZDYwMSwgMHgwMDA3LCBOVUxMLCBBVE1FTF9GV19UWVBFXzUwMiwgIlNpdGVjb20gV0xBTi0wMTEiIH0sIAotCXsgMHgwMWJmLCAweDMzMDIsIE5VTEwsIEFUTUVMX0ZXX1RZUEVfNTAyRSwgIkJlbGtpbiBGNUQ2MDIwLVYyIiB9LCAKLQl7IDAsIDAsICJCVC9Wb3lhZ2VyIDEwMjAgTGFwdG9wIEFkYXB0ZXIiLCBBVE1FTF9GV19UWVBFXzUwMiwgIkJUIFZveWFnZXIgMTAyMCIgfSwKLQl7IDAsIDAsICJJRUVFIDgwMi4xMWIvV2lyZWxlc3MgTEFOIFBDIENhcmQiLCBBVE1FTF9GV19UWVBFXzUwMiwgIlNpZW1lbnMgR2lnYXNldCBQQyBDYXJkIElJIiB9LAotCXsgMCwgMCwgIklFRUUgODAyLjExYi9XaXJlbGVzcyBMQU4gQ2FyZCBTIiwgQVRNRUxfRldfVFlQRV81MDRfMjk1OCwgIlNpZW1lbnMgR2lnYXNldCBQQyBDYXJkIElJIiB9LAotCXsgMCwgMCwgIkNOZXQvQ05XTEMgMTFNYnBzIFdpcmVsZXNzIFBDIENhcmQgVi01IiwgQVRNRUxfRldfVFlQRV81MDJFLCAiQ05ldCBDTldMQy04MTFBUkwiIH0sCi0JeyAwLCAwLCAiV2lyZWxlc3MvUENfQ0FSRCIsIEFUTUVMX0ZXX1RZUEVfNTAyRCwgIlBsYW5ldCBXTC0zNTUyIiB9LAotCXsgMCwgMCwgIk9FTS8xMU1icHMgV2lyZWxlc3MgTEFOIFBDIENhcmQgVi0zIiwgQVRNRUxfRldfVFlQRV81MDIsICJPRU0gMTFNYnBzIFdMQU4gUENNQ0lBIENhcmQiIH0sCi0JeyAwLCAwLCAiMTFXQVZFLzExV1A2MTFBTC1FIiwgQVRNRUxfRldfVFlQRV81MDJFLCAiMTFXQVZFIFdhdmVCdWRkeSIgfSwKLQl7IDAsIDAsICJMRy9MVzIxMDBOIiwgQVRNRUxfRldfVFlQRV81MDJFLCAiTEcgTFcyMTAwTiAxMU1icHMgV0xBTiBQQ01DSUEgQ2FyZCIgfSwKLX07Ci0KIHN0YXRpYyB2b2lkIGF0bWVsX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQogewogCWNsaWVudF9oYW5kbGVfdCBoYW5kbGU7CkBAIC0zMjgsMTAgKzI5NCwxMSBAQAogCWxvY2FsX2luZm9fdCAqZGV2OwogCWludCBsYXN0X2ZuLCBsYXN0X3JldDsKIAl1X2NoYXIgYnVmWzY0XTsKLQlpbnQgY2FyZF9pbmRleCA9IC0xLCBkb25lID0gMDsKLQkKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCAqZGlkOworCiAJaGFuZGxlID0gbGluay0+aGFuZGxlOwogCWRldiA9IGxpbmstPnByaXY7CisJZGlkID0gaGFuZGxlX3RvX2RldihoYW5kbGUpLmRyaXZlcl9kYXRhOwogCiAJREVCVUcoMCwgImF0bWVsX2NvbmZpZygweCVwKVxuIiwgbGluayk7CiAJCkBAIC0zNDAsNTkgKzMwNyw2IEBACiAJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CiAJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwogCQotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9NQU5GSUQ7Ci0JaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpID09IDApIHsKLQkJaW50IGk7Ci0JCWNpc3RwbF9tYW5maWRfdCAqbWFuZmlkOwotCQlDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOwotCQlDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOwotCQltYW5maWQgPSAmKHBhcnNlLm1hbmZpZCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoY2FyZF90YWJsZSkvc2l6ZW9mKGNhcmRfdGFibGVbMF0pOyBpKyspIHsKLQkJCWlmICghY2FyZF90YWJsZVtpXS52ZXIxICYmCi0JCQkgICAgbWFuZmlkLT5tYW5mID09IGNhcmRfdGFibGVbaV0ubWFuZiAmJgotCQkJICAgIG1hbmZpZC0+Y2FyZCA9PSBjYXJkX3RhYmxlW2ldLmNhcmQpIHsKLQkJCQljYXJkX2luZGV4ID0gaTsKLQkJCQlkb25lID0gMTsKLQkJCX0KLQkJfQotCX0KLQotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9WRVJTXzE7Ci0JaWYgKCFkb25lICYmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSA9PSAwKSkgewotCQlpbnQgaSwgaiwgazsKLQkJY2lzdHBsX3ZlcnNfMV90ICp2ZXIxOwotCQlDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOwotCQlDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOwotCQl2ZXIxID0gJihwYXJzZS52ZXJzaW9uXzEpOwotCQkKLQkJZm9yIChpID0gMDsgaSA8IHNpemVvZihjYXJkX3RhYmxlKS9zaXplb2YoY2FyZF90YWJsZVswXSk7IGkrKykgewotCQkJZm9yIChqID0gMDsgaiA8IHZlcjEtPm5zOyBqKyspIHsKLQkJCQljaGFyICpwID0gY2FyZF90YWJsZVtpXS52ZXIxOwotCQkJCWNoYXIgKnEgPSAmdmVyMS0+c3RyW3ZlcjEtPm9mc1tqXV07Ci0JCQkJaWYgKCFwKQotCQkJCQlnb3RvIG1pc21hdGNoOwotCQkJCWZvciAoayA9IDA7IGsgPCBqOyBrKyspIHsKLQkJCQkJd2hpbGUgKCgqcCAhPSAnXDAnKSAmJiAoKnAgIT0gJy8nKSkgcCsrOwotCQkJCQlpZiAoKnAgPT0gJ1wwJykgewotCQkJCQkJaWYgKCpxICE9ICdcMCcpCi0JCQkJCQkJZ290byBtaXNtYXRjaDsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXArKzsKLQkJCQkJfQotCQkJCX0KLQkJCQl3aGlsZSgoKnEgIT0gJ1wwJykgJiYgKCpwICE9ICdcMCcpICYmIAotCQkJCSAgICAgICgqcCAhPSAnLycpICYmICgqcCA9PSAqcSkpIHArKywgcSsrOwotCQkJCWlmICgoKCpwICE9ICdcMCcpICYmICpwICE9ICcvJykgfHwgKnEgIT0gJ1wwJykKLQkJCQkJZ290byBtaXNtYXRjaDsKLQkJCX0KLQkJCWNhcmRfaW5kZXggPSBpOwotCQkJYnJlYWs7CS8qIGRvbmUgKi8KLQkJCQotCQltaXNtYXRjaDoKLQkJCWogPSAwOyAvKiBkdW1teSBzdG10IHRvIHNodXQgdXAgY29tcGlsZXIgKi8KLQkJfQotCX0JCQotCiAJLyoKIAkgIFRoaXMgcmVhZHMgdGhlIGNhcmQncyBDT05GSUcgdHVwbGUgdG8gZmluZCBpdHMgY29uZmlndXJhdGlvbgogCSAgcmVnaXN0ZXJzLgpAQCAtNTA5LDEyICs0MjMsMTMgQEAKIAkoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYgPSAKIAkJaW5pdF9hdG1lbF9jYXJkKGxpbmstPmlycS5Bc3NpZ25lZElSUSwKIAkJCQlsaW5rLT5pby5CYXNlUG9ydDEsCi0JCQkJY2FyZF9pbmRleCA9PSAtMSA/IEFUTUVMX0ZXX1RZUEVfTk9ORSA6ICBjYXJkX3RhYmxlW2NhcmRfaW5kZXhdLmZpcm13YXJlLAorCQkJCWRpZCA/IGRpZC0+ZHJpdmVyX2luZm8gOiBBVE1FTF9GV19UWVBFX05PTkUsCiAJCQkJJmhhbmRsZV90b19kZXYoaGFuZGxlKSwKIAkJCQljYXJkX3ByZXNlbnQsIAogCQkJCWxpbmspOwogCWlmICghKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5ldGhfZGV2KSAKLQkJZ290byBjc19mYWlsZWQ7CisJCQlnb3RvIGNzX2ZhaWxlZDsKKwkKIAkKIAkvKgogCSAgQXQgdGhpcyBwb2ludCwgdGhlIGRldl9ub2RlX3Qgc3RydWN0dXJlKHMpIG5lZWQgdG8gYmUKQEAgLTUyMywyNiArNDM4LDcgQEAKIAlzdHJjcHkoZGV2LT5ub2RlLmRldl9uYW1lLCAoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYtPm5hbWUgKTsKIAlkZXYtPm5vZGUubWFqb3IgPSBkZXYtPm5vZGUubWlub3IgPSAwOwogCWxpbmstPmRldiA9ICZkZXYtPm5vZGU7Ci0JCi0JLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLwotCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyVzaW5kZXggMHglMDJ4OiBWY2MgJWQuJWQiLAotCSAgICAgICBkZXYtPm5vZGUuZGV2X25hbWUsCi0JICAgICAgIGNhcmRfaW5kZXggPT0gLTEgPyAiIiA6ICBjYXJkX3RhYmxlW2NhcmRfaW5kZXhdLm5hbWUsCi0JICAgICAgIGNhcmRfaW5kZXggPT0gLTEgPyAiIiA6ICIgIiwKLQkgICAgICAgbGluay0+Y29uZi5Db25maWdJbmRleCwKLQkgICAgICAgbGluay0+Y29uZi5WY2MvMTAsIGxpbmstPmNvbmYuVmNjJTEwKTsKLQlpZiAobGluay0+Y29uZi5WcHAxKQotCQlwcmludGsoIiwgVnBwICVkLiVkIiwgbGluay0+Y29uZi5WcHAxLzEwLCBsaW5rLT5jb25mLlZwcDElMTApOwotCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCi0JCXByaW50aygiLCBpcnEgJWQiLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpOwotCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpCi0JCXByaW50aygiLCBpbyAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQxLAotCQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQxK2xpbmstPmlvLk51bVBvcnRzMS0xKTsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMyKQotCQlwcmludGsoIiAmIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDIsCi0JCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDIrbGluay0+aW8uTnVtUG9ydHMyLTEpOwotCXByaW50aygiXG4iKTsKLQkKKwkJCQogCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7CiAJcmV0dXJuOwogCQpAQCAtNTY5LDcgKzQ2NSw3IEBACiAJbGluay0+ZGV2ID0gTlVMTDsKIAkKIAlpZiAoZGV2KSAKLQkJc3RvcF9hdG1lbF9jYXJkKGRldiwgMCk7CisJCXN0b3BfYXRtZWxfY2FyZChkZXYpOwogCSgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2RldiA9IE5VTEw7IAogCQogCS8qIERvbid0IGJvdGhlciBjaGVja2luZyB0byBzZWUgaWYgdGhlc2Ugc3VjY2VlZCBvciBub3QgKi8KQEAgLTYzNywyNSArNTMzLDQ3IEBACiB9IC8qIGF0bWVsX2V2ZW50ICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogV2UgdXNlIHRoZSBkcml2ZXJfaW5mbyBmaWVsZCB0byBzdG9yZSB0aGUgY29ycmVjdCBmaXJtd2FyZSB0eXBlIGZvciBhIGNhcmQuICovCisKKyNkZWZpbmUgUENNQ0lBX0RFVklDRV9NQU5GX0NBUkRfSU5GTyhtYW5mLCBjYXJkLCBpbmZvKSB7IFwKKwkubWF0Y2hfZmxhZ3MgPSBQQ01DSUFfREVWX0lEX01BVENIX01BTkZfSUR8IFwKKwkJCVBDTUNJQV9ERVZfSURfTUFUQ0hfQ0FSRF9JRCwgXAorCS5tYW5mX2lkID0gKG1hbmYpLCBcCisJLmNhcmRfaWQgPSAoY2FyZCksIFwKKyAgICAgICAgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KShpbmZvKSwgfQorCisjZGVmaW5lIFBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyX0lORk8odjEsIHYyLCB2aDEsIHZoMiwgaW5mbykgeyBcCisJLm1hdGNoX2ZsYWdzID0gUENNQ0lBX0RFVl9JRF9NQVRDSF9QUk9EX0lEMXwgXAorCQkJUENNQ0lBX0RFVl9JRF9NQVRDSF9QUk9EX0lEMiwgXAorCS5wcm9kX2lkID0geyAodjEpLCAodjIpLCBOVUxMLCBOVUxMIH0sIFwKKwkucHJvZF9pZF9oYXNoID0geyAodmgxKSwgKHZoMiksIDAsIDAgfSwgXAorICAgICAgICAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpKGluZm8pLCB9CisKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCBhdG1lbF9pZHNbXSA9IHsKLQlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxMDEsIDB4MDYyMCksCi0JUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTAxLCAweDA2OTYpLAotCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDFiZiwgMHgzMzAyKSwKLQlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweGQ2MDEsIDB4MDAwNyksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIjExV0FWRSIsICIxMVdQNjExQUwtRSIsIDB4OWViMmRhMWYsIDB4YzlhMGQzZjkpLAotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJBVE1FTCIsICJBVDc2QzUwMkFSIiwgMHhhYmRhNDE2NCwgMHg0MWIzN2UxZiksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkFUTUVMIiwgIkFUNzZDNTA0IiwgMHhhYmRhNDE2NCwgMHg1MDQwNjcwYSksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkFUTUVMIiwgIkFUNzZDNTA0QSIsIDB4YWJkYTQxNjQsIDB4ZTE1ZWQ4N2YpLAotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJCVCIsICJWb3lhZ2VyIDEwMjAgTGFwdG9wIEFkYXB0ZXIiLCAweGFlNDliODZhLCAweDFlOTU3Y2Q1KSwKLQlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiQ05ldCIsICJDTldMQyAxMU1icHMgV2lyZWxlc3MgUEMgQ2FyZCBWLTUiLCAweGJjNDc3ZGRlLCAweDUwMmZhZTZiKSwKLQlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiSUVFRSA4MDIuMTFiIiwgIldpcmVsZXNzIExBTiBQQyBDYXJkIiwgMHg1Yjg3ODcyNCwgMHgxMjJmMWRmNiksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIk9FTSIsICIxMU1icHMgV2lyZWxlc3MgTEFOIFBDIENhcmQgVi0zIiwgMHhmZWE1NGM5MCwgMHgxYzViMGY2OCksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIlNNQyIsICIyNjMyVyIsIDB4YzRmOGIxOGIsIDB4MzBmMzg3NzQpLAotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJTTUMiLCAiMjYzMlctVjIiLCAweGM0ZjhiMThiLCAweDE3MmQxMzc3KSwKLQlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiV2lyZWxlc3MiLCAiUEMiLCAweGE0MDdlY2RkLCAweDU1NmU0ZDdlKSwKLQlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiV0xBTiIsICI4MDIuMTFiIFBDIENBUkQiLCAweDU3NWM1MTZjLCAweGIxZjZkYmM0KSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRF9JTkZPKDB4MDEwMSwgMHgwNjIwLCBBVE1FTF9GV19UWVBFXzUwMl8zQ09NKSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRF9JTkZPKDB4MDEwMSwgMHgwNjk2LCBBVE1FTF9GV19UWVBFXzUwMl8zQ09NKSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRF9JTkZPKDB4MDFiZiwgMHgzMzAyLCBBVE1FTF9GV19UWVBFXzUwMkUpLAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEX0lORk8oMHhkNjAxLCAweDAwMDcsIEFUTUVMX0ZXX1RZUEVfNTAyKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCIxMVdBVkUiLCAiMTFXUDYxMUFMLUUiLCAweDllYjJkYTFmLCAweGM5YTBkM2Y5LCBBVE1FTF9GV19UWVBFXzUwMkUpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyX0lORk8oIkFUTUVMIiwgIkFUNzZDNTAyQVIiLCAweGFiZGE0MTY0LCAweDQxYjM3ZTFmLCBBVE1FTF9GV19UWVBFXzUwMiksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiQVRNRUwiLCAiQVQ3NkM1MDJBUl9EIiwgMHhhYmRhNDE2NCwgMHgzNjc1ZDcwNCwgQVRNRUxfRldfVFlQRV81MDJEKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCJBVE1FTCIsICJBVDc2QzUwMkFSX0UiLCAweGFiZGE0MTY0LCAweDQxNzJlNzkyLCBBVE1FTF9GV19UWVBFXzUwMkUpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyX0lORk8oIkFUTUVMIiwgIkFUNzZDNTA0X1IiLCAweGFiZGE0MTY0LCAweDkxN2YzZDcyLCBBVE1FTF9GV19UWVBFXzUwNF8yOTU4KSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCJBVE1FTCIsICJBVDc2QzUwNCIsIDB4YWJkYTQxNjQsIDB4NTA0MDY3MGEsIEFUTUVMX0ZXX1RZUEVfNTA0KSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCJBVE1FTCIsICJBVDc2QzUwNEEiLCAweGFiZGE0MTY0LCAweGUxNWVkODdmLCBBVE1FTF9GV19UWVBFXzUwNEFfMjk1OCksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiQlQiLCAiVm95YWdlciAxMDIwIExhcHRvcCBBZGFwdGVyIiwgMHhhZTQ5Yjg2YSwgMHgxZTk1N2NkNSwgQVRNRUxfRldfVFlQRV81MDIpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyX0lORk8oIkNOZXQiLCAiQ05XTEMgMTFNYnBzIFdpcmVsZXNzIFBDIENhcmQgVi01IiwgMHhiYzQ3N2RkZSwgMHg1MDJmYWU2YiwgQVRNRUxfRldfVFlQRV81MDJFKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCJJRUVFIDgwMi4xMWIiLCAiV2lyZWxlc3MgTEFOIFBDIENhcmQiLCAweDViODc4NzI0LCAweDEyMmYxZGY2LCBBVE1FTF9GV19UWVBFXzUwMiksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiSUVFRSA4MDIuMTFiIiwgIldpcmVsZXNzIExBTiBDYXJkIFMiLCAweDViODc4NzI0LCAweDVmYmE1MzNhLCBBVE1FTF9GV19UWVBFXzUwNF8yOTU4KSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCJPRU0iLCAiMTFNYnBzIFdpcmVsZXNzIExBTiBQQyBDYXJkIFYtMyIsIDB4ZmVhNTRjOTAsIDB4MWM1YjBmNjgsIEFUTUVMX0ZXX1RZUEVfNTAyKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCJTTUMiLCAiMjYzMlciLCAweGM0ZjhiMThiLCAweDMwZjM4Nzc0LCBBVE1FTF9GV19UWVBFXzUwMkQpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyX0lORk8oIlNNQyIsICIyNjMyVy1WMiIsIDB4YzRmOGIxOGIsIDB4MTcyZDEzNzcsIEFUTUVMX0ZXX1RZUEVfNTAyKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCJXaXJlbGVzcyIsICJQQ19DQVJEIiwgMHhhNDA3ZWNkZCwgMHgxMTlmNjMxNCwgQVRNRUxfRldfVFlQRV81MDJEKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCJXTEFOIiwgIjgwMi4xMWIgUEMgQ0FSRCIsIDB4NTc1YzUxNmMsIDB4YjFmNmRiYzQsIEFUTUVMX0ZXX1RZUEVfNTAyRCksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiTEciLCAiTFcyMTAwTiIsIDB4YjQ3NGQ0M2EsIDB4NmIxZmVjOTQsIEFUTUVMX0ZXX1RZUEVfNTAyRSksCiAJUENNQ0lBX0RFVklDRV9OVUxMCiB9OworCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgYXRtZWxfaWRzKTsKIAogc3RhdGljIHN0cnVjdCBwY21jaWFfZHJpdmVyIGF0bWVsX2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfcGNpLmMKaW5kZXggMmViMDBhOS4uYTYxYjNiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfcGNpLmMKQEAgLTcyLDcgKzcyLDcgQEAKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IGF0bWVsX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RvcF9hdG1lbF9jYXJkKHBjaV9nZXRfZHJ2ZGF0YShwZGV2KSwgMSk7CisJc3RvcF9hdG1lbF9jYXJkKHBjaV9nZXRfZHJ2ZGF0YShwZGV2KSk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGF0bWVsX2luaXRfbW9kdWxlKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9hY2Nlc3MuYyBiL2RyaXZlcnMvcGNpL2FjY2Vzcy5jCmluZGV4IDJhNDJhZGQuLmVhMTY4MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2FjY2Vzcy5jCisrKyBiL2RyaXZlcnMvcGNpL2FjY2Vzcy5jCkBAIC0yLDYgKzIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogCisjaW5jbHVkZSAicGNpLmgiCisKIC8qCiAgKiBUaGlzIGludGVycnVwdC1zYWZlIHNwaW5sb2NrIHByb3RlY3RzIGFsbCBhY2Nlc3NlcyB0byBQQ0kKICAqIGNvbmZpZ3VyYXRpb24gc3BhY2UuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocC5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHAuaAppbmRleCAwNjFlYWQyLi5jNDJiNjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocC5oCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwLmgKQEAgLTMyLDggKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgkJCiAjaW5jbHVkZSA8bGludXgvcGNpZXBvcnRfaWYuaD4KICNpbmNsdWRlICJwY2lfaG90cGx1Zy5oIgogCkBAIC00Miw2ICs0MCw3IEBACiBleHRlcm4gaW50IHBjaWVocF9wb2xsX21vZGU7CiBleHRlcm4gaW50IHBjaWVocF9wb2xsX3RpbWU7CiBleHRlcm4gaW50IHBjaWVocF9kZWJ1ZzsKK2V4dGVybiBpbnQgcGNpZWhwX2ZvcmNlOwogCiAvKiNkZWZpbmUgZGJnKGZvcm1hdCwgYXJnLi4uKSBkbyB7IGlmIChwY2llaHBfZGVidWcpIHByaW50ayhLRVJOX0RFQlVHICIlczogIiBmb3JtYXQsIE1ZX05BTUUgLCAjIyBhcmcpOyB9IHdoaWxlICgwKSovCiAjZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikgZG8geyBpZiAocGNpZWhwX2RlYnVnKSBwcmludGsoIiVzOiAiIGZvcm1hdCwgTVlfTkFNRSAsICMjIGFyZyk7IH0gd2hpbGUgKDApCkBAIC00OSwzOSArNDgsMjAgQEAKICNkZWZpbmUgaW5mbyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIgZm9ybWF0LCBNWV9OQU1FICwgIyMgYXJnKQogI2RlZmluZSB3YXJuKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HICIlczogIiBmb3JtYXQsIE1ZX05BTUUgLCAjIyBhcmcpCiAKLXN0cnVjdCBwY2lfZnVuYyB7Ci0Jc3RydWN0IHBjaV9mdW5jICpuZXh0OwotCXU4IGJ1czsKLQl1OCBkZXZpY2U7Ci0JdTggZnVuY3Rpb247Ci0JdTggaXNfYV9ib2FyZDsKLQl1MTYgc3RhdHVzOwotCXU4IGNvbmZpZ3VyZWQ7Ci0JdTggc3dpdGNoX3NhdmU7Ci0JdTggcHJlc2VuY2Vfc2F2ZTsKLQl1MzIgYmFzZV9sZW5ndGhbMHgwNl07Ci0JdTggYmFzZV90eXBlWzB4MDZdOwotCXUxNiByZXNlcnZlZDI7Ci0JdTMyIGNvbmZpZ19zcGFjZVsweDIwXTsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICptZW1faGVhZDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpwX21lbV9oZWFkOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmlvX2hlYWQ7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqYnVzX2hlYWQ7Ci0Jc3RydWN0IHBjaV9kZXYqIHBjaV9kZXY7CitzdHJ1Y3QgaG90cGx1Z19wYXJhbXMgeworCXU4IGNhY2hlX2xpbmVfc2l6ZTsKKwl1OCBsYXRlbmN5X3RpbWVyOworCXU4IGVuYWJsZV9zZXJyOworCXU4IGVuYWJsZV9wZXJyOwogfTsKIAogc3RydWN0IHNsb3QgewogCXN0cnVjdCBzbG90ICpuZXh0OwogCXU4IGJ1czsKIAl1OCBkZXZpY2U7CisJdTE2IHN0YXR1czsKIAl1MzIgbnVtYmVyOwotCXU4IGlzX2FfYm9hcmQ7Ci0JdTggY29uZmlndXJlZDsKIAl1OCBzdGF0ZTsKLQl1OCBzd2l0Y2hfc2F2ZTsKLQl1OCBwcmVzZW5jZV9zYXZlOwotCXUzMiBjYXBhYmlsaXRpZXM7Ci0JdTE2IHJlc2VydmVkMjsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0YXNrX2V2ZW50OwogCXU4IGhwX3Nsb3Q7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmw7CkBAIC05MCw0MiArNzAsNDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCXNsb3RfbGlzdDsKIH07CiAKLXN0cnVjdCBwY2lfcmVzb3VyY2UgewotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKiBuZXh0OwotCXUzMiBiYXNlOwotCXUzMiBsZW5ndGg7Ci19OwotCiBzdHJ1Y3QgZXZlbnRfaW5mbyB7CiAJdTMyIGV2ZW50X3R5cGU7CiAJdTggaHBfc2xvdDsKIH07CiAKK3R5cGVkZWYgdTgoKnBocF9pbnRyX2NhbGxiYWNrX3QpICh1OCBocF9zbG90LCB2b2lkICppbnN0YW5jZV9pZCk7CisKK3N0cnVjdCBwaHBfY3Rscl9zdGF0ZV9zIHsKKwlzdHJ1Y3QgcGhwX2N0bHJfc3RhdGVfcyAqcG5leHQ7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CisJdW5zaWduZWQgaW50IGlycTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwkJCQkvKiBzcGlubG9jaydzICovCisJdTMyIHNsb3RfZGV2aWNlX29mZnNldDsKKwl1MzIgbnVtX3Nsb3RzOworICAgIAlzdHJ1Y3QgdGltZXJfbGlzdAlpbnRfcG9sbF90aW1lcjsJCS8qIEFkZGVkIGZvciBwb2xsIGV2ZW50ICovCisJcGhwX2ludHJfY2FsbGJhY2tfdCAJYXR0ZW50aW9uX2J1dHRvbl9jYWxsYmFjazsKKwlwaHBfaW50cl9jYWxsYmFja190IAlzd2l0Y2hfY2hhbmdlX2NhbGxiYWNrOworCXBocF9pbnRyX2NhbGxiYWNrX3QgCXByZXNlbmNlX2NoYW5nZV9jYWxsYmFjazsKKwlwaHBfaW50cl9jYWxsYmFja190IAlwb3dlcl9mYXVsdF9jYWxsYmFjazsKKwl2b2lkIAkJCSpjYWxsYmFja19pbnN0YW5jZV9pZDsKKwlzdHJ1Y3QgY3RybF9yZWcgCSpjcmVnOwkJCQkvKiBQdHIgdG8gY29udHJvbGxlciByZWdpc3RlciBzcGFjZSAqLworfTsKKworI2RlZmluZSBNQVhfRVZFTlRTCQkxMAogc3RydWN0IGNvbnRyb2xsZXIgewogCXN0cnVjdCBjb250cm9sbGVyICpuZXh0OwogCXN0cnVjdCBzZW1hcGhvcmUgY3JpdF9zZWN0OwkvKiBjcml0aWNhbCBzZWN0aW9uIHNlbWFwaG9yZSAqLwotCXZvaWQgKmhwY19jdGxyX2hhbmRsZTsJCS8qIEhQQyBjb250cm9sbGVyIGhhbmRsZSAqLworCXN0cnVjdCBwaHBfY3Rscl9zdGF0ZV9zICpocGNfY3Rscl9oYW5kbGU7IC8qIEhQQyBjb250cm9sbGVyIGhhbmRsZSAqLwogCWludCBudW1fc2xvdHM7CQkJLyogTnVtYmVyIG9mIHNsb3RzIG9uIGN0bHIgKi8KIAlpbnQgc2xvdF9udW1faW5jOwkJLyogMSBvciAtMSAqLwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm1lbV9oZWFkOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnBfbWVtX2hlYWQ7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqaW9faGVhZDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpidXNfaGVhZDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKIAlzdHJ1Y3QgcGNpX2J1cyAqcGNpX2J1czsKLQlzdHJ1Y3QgZXZlbnRfaW5mbyBldmVudF9xdWV1ZVsxMF07CisJc3RydWN0IGV2ZW50X2luZm8gZXZlbnRfcXVldWVbTUFYX0VWRU5UU107CiAJc3RydWN0IHNsb3QgKnNsb3Q7CiAJc3RydWN0IGhwY19vcHMgKmhwY19vcHM7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CS8qIHNsZWVwICYgd2FrZSBwcm9jZXNzICovCiAJdTggbmV4dF9ldmVudDsKLQl1OCBzZWc7CiAJdTggYnVzOwogCXU4IGRldmljZTsKIAl1OCBmdW5jdGlvbjsKLQl1OCByZXY7CiAJdTggc2xvdF9kZXZpY2Vfb2Zmc2V0OwotCXU4IGFkZF9zdXBwb3J0OwotCWVudW0gcGNpX2J1c19zcGVlZCBzcGVlZDsKIAl1MzIgZmlyc3Rfc2xvdDsJCS8qIEZpcnN0IHBoeXNpY2FsIHNsb3QgbnVtYmVyICovICAvKiBQQ0lFIG9ubHkgaGFzIDEgc2xvdCAqLwogCXU4IHNsb3RfYnVzOwkJLyogQnVzIHdoZXJlIHRoZSBzbG90cyBoYW5kbGVkIGJ5IHRoaXMgY29udHJvbGxlciBzaXQgKi8KIAl1OCBjdHJsY2FwOwpAQCAtMTMzLDIwICsxMTgsNiBAQAogCXU4IGNhcF9iYXNlOwogfTsKIAotc3RydWN0IGlycV9tYXBwaW5nIHsKLQl1OCBiYXJiZXJfcG9sZTsKLQl1OCB2YWxpZF9JTlQ7Ci0JdTggaW50ZXJydXB0WzRdOwotfTsKLQotc3RydWN0IHJlc291cmNlX2xpc3RzIHsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICptZW1faGVhZDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpwX21lbV9oZWFkOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmlvX2hlYWQ7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqYnVzX2hlYWQ7Ci0Jc3RydWN0IGlycV9tYXBwaW5nICppcnFzOwotfTsKLQogI2RlZmluZSBJTlRfQlVUVE9OX0lHTk9SRQkJMAogI2RlZmluZSBJTlRfUFJFU0VOQ0VfT04JCQkxCiAjZGVmaW5lIElOVF9QUkVTRU5DRV9PRkYJCTIKQEAgLTIwMCwyMSArMTcxLDE0IEBACiAgKiBlcnJvciBNZXNzYWdlcwogICovCiAjZGVmaW5lIG1zZ19pbml0aWFsaXphdGlvbl9lcnIJIkluaXRpYWxpemF0aW9uIGZhaWx1cmUsIGVycm9yPSVkXG4iCi0jZGVmaW5lIG1zZ19IUENfcmV2X2Vycm9yCSJVbnN1cHBvcnRlZCByZXZpc2lvbiBvZiB0aGUgUENJIGhvdCBwbHVnIGNvbnRyb2xsZXIgZm91bmQuXG4iCi0jZGVmaW5lIG1zZ19IUENfbm9uX3BjaWUJIlRoZSBQQ0kgaG90IHBsdWcgY29udHJvbGxlciBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLlxuIgotI2RlZmluZSBtc2dfSFBDX25vdF9zdXBwb3J0ZWQJIlRoaXMgc3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyB2ZXJzaW9uIG9mIHBjaWVwaGQgbW9kdWxlLiBVcGdyYWRlIHRvIGEgbmV3ZXIgdmVyc2lvbiBvZiBwY2llaHBkXG4iCi0jZGVmaW5lIG1zZ191bmFibGVfdG9fc2F2ZQkiVW5hYmxlIHRvIHN0b3JlIFBDSSBob3QgcGx1ZyBhZGQgcmVzb3VyY2UgaW5mb3JtYXRpb24uIFRoaXMgc3lzdGVtIG11c3QgYmUgcmVib290ZWQgYmVmb3JlIGFkZGluZyBhbnkgUENJIGRldmljZXMuXG4iCiAjZGVmaW5lIG1zZ19idXR0b25fb24JCSJQQ0kgc2xvdCAjJWQgLSBwb3dlcmluZyBvbiBkdWUgdG8gYnV0dG9uIHByZXNzLlxuIgogI2RlZmluZSBtc2dfYnV0dG9uX29mZgkJIlBDSSBzbG90ICMlZCAtIHBvd2VyaW5nIG9mZiBkdWUgdG8gYnV0dG9uIHByZXNzLlxuIgogI2RlZmluZSBtc2dfYnV0dG9uX2NhbmNlbAkiUENJIHNsb3QgIyVkIC0gYWN0aW9uIGNhbmNlbGVkIGR1ZSB0byBidXR0b24gcHJlc3MuXG4iCiAjZGVmaW5lIG1zZ19idXR0b25faWdub3JlCSJQQ0kgc2xvdCAjJWQgLSBidXR0b24gcHJlc3MgaWdub3JlZC4gIChhY3Rpb24gaW4gcHJvZ3Jlc3MuLi4pXG4iCiAKIC8qIGNvbnRyb2xsZXIgZnVuY3Rpb25zICovCi1leHRlcm4gaW50CXBjaWVocHJtX2ZpbmRfYXZhaWxhYmxlX3Jlc291cmNlcwkoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpOwogZXh0ZXJuIGludAlwY2llaHBfZXZlbnRfc3RhcnRfdGhyZWFkCSh2b2lkKTsKIGV4dGVybiB2b2lkCXBjaWVocF9ldmVudF9zdG9wX3RocmVhZAkodm9pZCk7Ci1leHRlcm4gc3RydWN0IAlwY2lfZnVuYyAqcGNpZWhwX3Nsb3RfY3JlYXRlCSh1bnNpZ25lZCBjaGFyIGJ1c251bWJlcik7Ci1leHRlcm4gc3RydWN0IAlwY2lfZnVuYyAqcGNpZWhwX3Nsb3RfZmluZAkodW5zaWduZWQgY2hhciBidXMsIHVuc2lnbmVkIGNoYXIgZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGluZGV4KTsKIGV4dGVybiBpbnQJcGNpZWhwX2VuYWJsZV9zbG90CQkoc3RydWN0IHNsb3QgKnNsb3QpOwogZXh0ZXJuIGludAlwY2llaHBfZGlzYWJsZV9zbG90CQkoc3RydWN0IHNsb3QgKnNsb3QpOwogCkBAIC0yMjQsMjUgKzE4OCwxNyBAQAogZXh0ZXJuIHU4CXBjaWVocF9oYW5kbGVfcG93ZXJfZmF1bHQJKHU4IGhwX3Nsb3QsIHZvaWQgKmluc3RfaWQpOwogLyogZXh0ZXJuIHZvaWQJbG9uZ19kZWxheSAoaW50IGRlbGF5KTsgKi8KIAotLyogcmVzb3VyY2UgZnVuY3Rpb25zICovCi1leHRlcm4gaW50CXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lCShzdHJ1Y3QgcGNpX3Jlc291cmNlICoqaGVhZCk7Ci0KIC8qIHBjaSBmdW5jdGlvbnMgKi8KLWV4dGVybiBpbnQJcGNpZWhwX3NldF9pcnEJCQkodTggYnVzX251bSwgdTggZGV2X251bSwgdTggaW50X3BpbiwgdTggaXJxX251bSk7Ci0vKmV4dGVybiBpbnQJcGNpZWhwX2dldF9idXNfZGV2CQkoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHU4ICpidXNfbnVtLCB1OCAqZGV2X251bSwgc3RydWN0IHNsb3QgKnNsb3QpOyovCi1leHRlcm4gaW50CXBjaWVocF9zYXZlX2NvbmZpZwkgCShzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwgaW50IGJ1c251bWJlciwgaW50IG51bV9jdGxyX3Nsb3RzLCBpbnQgZmlyc3RfZGV2aWNlX251bSk7Ci1leHRlcm4gaW50CXBjaWVocF9zYXZlX3VzZWRfcmVzb3VyY2VzCShzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwgc3RydWN0IHBjaV9mdW5jICogZnVuYywgaW50IGZsYWcpOwotZXh0ZXJuIGludAlwY2llaHBfc2F2ZV9zbG90X2NvbmZpZwkJKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCBzdHJ1Y3QgcGNpX2Z1bmMgKiBuZXdfc2xvdCk7Ci1leHRlcm4gdm9pZAlwY2llaHBfZGVzdHJveV9ib2FyZF9yZXNvdXJjZXMJKHN0cnVjdCBwY2lfZnVuYyAqIGZ1bmMpOwotZXh0ZXJuIGludAlwY2llaHBfcmV0dXJuX2JvYXJkX3Jlc291cmNlcwkoc3RydWN0IHBjaV9mdW5jICogZnVuYywgc3RydWN0IHJlc291cmNlX2xpc3RzICogcmVzb3VyY2VzKTsKLWV4dGVybiB2b2lkCXBjaWVocF9kZXN0cm95X3Jlc291cmNlX2xpc3QJKHN0cnVjdCByZXNvdXJjZV9saXN0cyAqIHJlc291cmNlcyk7Ci1leHRlcm4gaW50CXBjaWVocF9jb25maWd1cmVfZGV2aWNlCQkoc3RydWN0IGNvbnRyb2xsZXIqIGN0cmwsIHN0cnVjdCBwY2lfZnVuYyogZnVuYyk7Ci1leHRlcm4gaW50CXBjaWVocF91bmNvbmZpZ3VyZV9kZXZpY2UJKHN0cnVjdCBwY2lfZnVuYyogZnVuYyk7CitleHRlcm4gaW50CXBjaWVocF9jb25maWd1cmVfZGV2aWNlCQkoc3RydWN0IHNsb3QgKnBfc2xvdCk7CitleHRlcm4gaW50CXBjaWVocF91bmNvbmZpZ3VyZV9kZXZpY2UJKHN0cnVjdCBzbG90ICpwX3Nsb3QpOworZXh0ZXJuIGludAlwY2llaHBfZ2V0X2hwX2h3X2NvbnRyb2xfZnJvbV9maXJtd2FyZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2V4dGVybiB2b2lkCXBjaWVocF9nZXRfaHBfcGFyYW1zX2Zyb21fZmlybXdhcmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkgICAgICAgCXN0cnVjdCBob3RwbHVnX3BhcmFtcyAqaHBwKTsKKwogCiAKIC8qIEdsb2JhbCB2YXJpYWJsZXMgKi8KIGV4dGVybiBzdHJ1Y3QgY29udHJvbGxlciAqcGNpZWhwX2N0cmxfbGlzdDsKLWV4dGVybiBzdHJ1Y3QgcGNpX2Z1bmMgKnBjaWVocF9zbG90X2xpc3RbMjU2XTsKIAogLyogSW5saW5lIGZ1bmN0aW9ucyAqLwogCkBAIC0yNTIsMTIgKzIwOCw5IEBACiAKIAlwX3Nsb3QgPSBjdHJsLT5zbG90OwogCi0JZGJnKCJwX3Nsb3QgPSAlcFxuIiwgcF9zbG90KTsKLQogCXdoaWxlIChwX3Nsb3QgJiYgKHBfc2xvdC0+ZGV2aWNlICE9IGRldmljZSkpIHsKIAkJdG1wX3Nsb3QgPSBwX3Nsb3Q7CiAJCXBfc2xvdCA9IHBfc2xvdC0+bmV4dDsKLQkJZGJnKCJJbiB3aGlsZSBsb29wLCBwX3Nsb3QgPSAlcFxuIiwgcF9zbG90KTsKIAl9CiAJaWYgKHBfc2xvdCA9PSBOVUxMKSB7CiAJCWVycigiRVJST1I6IHBjaWVocF9maW5kX3Nsb3QgZGV2aWNlPTB4JXhcbiIsIGRldmljZSk7CkBAIC0yNzMsNyArMjI2LDYgQEAKIAogCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCi0JZGJnKCIlcyA6IHN0YXJ0XG4iLCBfX0ZVTkNUSU9OX18pOwogCWFkZF93YWl0X3F1ZXVlKCZjdHJsLT5xdWV1ZSwgJndhaXQpOwogCWlmICghcGNpZWhwX3BvbGxfbW9kZSkKIAkJLyogU2xlZXAgZm9yIHVwIHRvIDEgc2Vjb25kICovCkBAIC0yODUsMTkgKzIzNyw5IEBACiAJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQlyZXR2YWwgPSAgLUVJTlRSOwogCi0JZGJnKCIlcyA6IGVuZFxuIiwgX19GVU5DVElPTl9fKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCi0vKiBQdXRzIG5vZGUgYmFjayBpbiB0aGUgcmVzb3VyY2UgbGlzdCBwb2ludGVkIHRvIGJ5IGhlYWQgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCByZXR1cm5fcmVzb3VyY2Uoc3RydWN0IHBjaV9yZXNvdXJjZSAqKmhlYWQsIHN0cnVjdCBwY2lfcmVzb3VyY2UgKm5vZGUpCi17Ci0JaWYgKCFub2RlIHx8ICFoZWFkKQotCQlyZXR1cm47Ci0Jbm9kZS0+bmV4dCA9ICpoZWFkOwotCSpoZWFkID0gbm9kZTsKLX0KLQogI2RlZmluZSBTTE9UX05BTUVfU0laRSAxMAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWFrZV9zbG90X25hbWUoY2hhciAqYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUsIHN0cnVjdCBzbG90ICpzbG90KQpAQCAtMzExLDE0ICsyNTMsNyBAQAogCUFDUEkKIH07CiAKLXR5cGVkZWYgdTgoKnBocF9pbnRyX2NhbGxiYWNrX3QpICh1bnNpZ25lZCBpbnQgY2hhbmdlX2lkLCB2b2lkICppbnN0YW5jZV9pZCk7Ci0KLWludCBwY2llX2luaXQoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHN0cnVjdCBwY2llX2RldmljZSAqZGV2LAotCQlwaHBfaW50cl9jYWxsYmFja190IGF0dGVudGlvbl9idXR0b25fY2FsbGJhY2ssCi0JCXBocF9pbnRyX2NhbGxiYWNrX3Qgc3dpdGNoX2NoYW5nZV9jYWxsYmFjaywKLQkJcGhwX2ludHJfY2FsbGJhY2tfdCBwcmVzZW5jZV9jaGFuZ2VfY2FsbGJhY2ssCi0JCXBocF9pbnRyX2NhbGxiYWNrX3QgcG93ZXJfZmF1bHRfY2FsbGJhY2spOwotCitpbnQgcGNpZV9pbml0KHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCBzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldik7CiAKIC8qIFRoaXMgaGFzIG5vIG1lYW5pbmcgZm9yIFBDSSBFeHByZXNzLCBhcyB0aGVyZSBpcyBvbmx5IDEgc2xvdCBwZXIgcG9ydCAqLwogaW50IHBjaWVfZ2V0X2N0bHJfc2xvdF9jb25maWcoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jb3JlLmMKaW5kZXggY2FmYzdlYS4uOGRmNzA0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2NvcmUuYwpAQCAtMjcsMjcgKzI3LDIwIEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlICJwY2llaHAuaCIKLSNpbmNsdWRlICJwY2llaHBybS5oIgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAvKiBHbG9iYWwgdmFyaWFibGVzICovCiBpbnQgcGNpZWhwX2RlYnVnOwogaW50IHBjaWVocF9wb2xsX21vZGU7CiBpbnQgcGNpZWhwX3BvbGxfdGltZTsKK2ludCBwY2llaHBfZm9yY2U7CiBzdHJ1Y3QgY29udHJvbGxlciAqcGNpZWhwX2N0cmxfbGlzdDsKLXN0cnVjdCBwY2lfZnVuYyAqcGNpZWhwX3Nsb3RfbGlzdFsyNTZdOwogCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIwLjQiCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IJIkRhbiBaaW5rIDxkYW4uemlua0Bjb21wYXEuY29tPiwgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4sIERlbHkgU3kgPGRlbHkubC5zeUBpbnRlbC5jb20+IgpAQCAtNjAsOSArNTMsMTEgQEAKIG1vZHVsZV9wYXJhbShwY2llaHBfZGVidWcsIGJvb2wsIDA2NDQpOwogbW9kdWxlX3BhcmFtKHBjaWVocF9wb2xsX21vZGUsIGJvb2wsIDA2NDQpOwogbW9kdWxlX3BhcmFtKHBjaWVocF9wb2xsX3RpbWUsIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0ocGNpZWhwX2ZvcmNlLCBib29sLCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocGNpZWhwX2RlYnVnLCAiRGVidWdnaW5nIG1vZGUgZW5hYmxlZCBvciBub3QiKTsKIE1PRFVMRV9QQVJNX0RFU0MocGNpZWhwX3BvbGxfbW9kZSwgIlVzaW5nIHBvbGxpbmcgbWVjaGFuaXNtIGZvciBob3QtcGx1ZyBldmVudHMgb3Igbm90Iik7CiBNT0RVTEVfUEFSTV9ERVNDKHBjaWVocF9wb2xsX3RpbWUsICJQb2xsaW5nIG1lY2hhbmlzbSBmcmVxdWVuY3ksIGluIHNlY29uZHMiKTsKK01PRFVMRV9QQVJNX0RFU0MocGNpZWhwX2ZvcmNlLCAiRm9yY2UgcGNpZWhwLCBldmVuIGlmIF9PU0MgYW5kIE9TSFAgYXJlIG1pc3NpbmciKTsKIAogI2RlZmluZSBQQ0lFX01PRFVMRV9OQU1FICJwY2llaHAiCiAKQEAgLTExNCw4ICsxMDksNiBAQAogCXUzMiBzbG90X251bWJlcjsKIAlpbnQgcmVzdWx0ID0gLUVOT01FTTsKIAotCWRiZygiJXNcbiIsX19GVU5DVElPTl9fKTsKLQogCW51bWJlcl9vZl9zbG90cyA9IGN0cmwtPm51bV9zbG90czsKIAlzbG90X2RldmljZSA9IGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldDsKIAlzbG90X251bWJlciA9IGN0cmwtPmZpcnN0X3Nsb3Q7CkBAIC0zNzAsNyArMzYzLDYgQEAKIAl1OCB2YWx1ZTsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAkKLQlkYmcoIiVzOiBDYWxsZWQgYnkgaHBfZHJ2XG4iLCBfX0ZVTkNUSU9OX18pOwogCWN0cmwgPSBrbWFsbG9jKHNpemVvZigqY3RybCksIEdGUF9LRVJORUwpOwogCWlmICghY3RybCkgewogCQllcnIoIiVzIDogb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKQEAgLTM3OCwyMiArMzcwLDE1IEBACiAJfQogCW1lbXNldChjdHJsLCAwLCBzaXplb2Yoc3RydWN0IGNvbnRyb2xsZXIpKTsKIAotCWRiZygiJXM6IERSVl90aHJlYWQgcGlkID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgY3VycmVudC0+cGlkKTsKLQkKIAlwZGV2ID0gZGV2LT5wb3J0OworCWN0cmwtPnBjaV9kZXYgPSBwZGV2OwogCi0JcmMgPSBwY2llX2luaXQoY3RybCwgZGV2LAotCQkocGhwX2ludHJfY2FsbGJhY2tfdCkgcGNpZWhwX2hhbmRsZV9hdHRlbnRpb25fYnV0dG9uLAotCQkocGhwX2ludHJfY2FsbGJhY2tfdCkgcGNpZWhwX2hhbmRsZV9zd2l0Y2hfY2hhbmdlLAotCQkocGhwX2ludHJfY2FsbGJhY2tfdCkgcGNpZWhwX2hhbmRsZV9wcmVzZW5jZV9jaGFuZ2UsCi0JCShwaHBfaW50cl9jYWxsYmFja190KSBwY2llaHBfaGFuZGxlX3Bvd2VyX2ZhdWx0KTsKKwlyYyA9IHBjaWVfaW5pdChjdHJsLCBkZXYpOwogCWlmIChyYykgewogCQlkYmcoIiVzOiBjb250cm9sbGVyIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwgUENJRV9NT0RVTEVfTkFNRSk7CiAJCWdvdG8gZXJyX291dF9mcmVlX2N0cmw7CiAJfQogCi0JY3RybC0+cGNpX2RldiA9IHBkZXY7Ci0KIAlwY2lfc2V0X2RydmRhdGEocGRldiwgY3RybCk7CiAKIAljdHJsLT5wY2lfYnVzID0ga21hbGxvYyhzaXplb2YoKmN0cmwtPnBjaV9idXMpLCBHRlBfS0VSTkVMKTsKQEAgLTQwMiw3ICszODcsNiBAQAogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX291dF91bm1hcF9tbWlvX3JlZ2lvbjsKIAl9Ci0JZGJnKCIlczogY3RybC0+cGNpX2J1cyAlcFxuIiwgX19GVU5DVElPTl9fLCBjdHJsLT5wY2lfYnVzKTsKIAltZW1jcHkgKGN0cmwtPnBjaV9idXMsIHBkZXYtPmJ1cywgc2l6ZW9mICgqY3RybC0+cGNpX2J1cykpOwogCWN0cmwtPmJ1cyA9IHBkZXYtPmJ1cy0+bnVtYmVyOyAgLyogY3RybCBidXMgKi8KIAljdHJsLT5zbG90X2J1cyA9IHBkZXYtPnN1Ym9yZGluYXRlLT5udW1iZXI7ICAvKiBidXMgY29udHJvbGxlZCBieSB0aGlzIEhQQyAqLwpAQCAtNDI0LDI1ICs0MDgsNiBAQAogCWZpcnN0X2RldmljZV9udW0gPSBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQ7CiAJbnVtX2N0bHJfc2xvdHMgPSBjdHJsLT5udW1fc2xvdHM7IAogCi0JLyogU3RvcmUgUENJIENvbmZpZyBTcGFjZSBmb3IgYWxsIGRldmljZXMgb24gdGhpcyBidXMgKi8KLQlkYmcoIiVzOiBCZWZvcmUgY2FsbGluZyBwY2llaHBfc2F2ZV9jb25maWcsIGN0cmwtPmJ1cyAleCxjdHJsLT5zbG90X2J1cyAleFxuIiwgCi0JCV9fRlVOQ1RJT05fXyxjdHJsLT5idXMsIGN0cmwtPnNsb3RfYnVzKTsKLQlyYyA9IHBjaWVocF9zYXZlX2NvbmZpZyhjdHJsLCBjdHJsLT5zbG90X2J1cywgbnVtX2N0bHJfc2xvdHMsIGZpcnN0X2RldmljZV9udW0pOwotCWlmIChyYykgewotCQllcnIoIiVzOiB1bmFibGUgdG8gc2F2ZSBQQ0kgY29uZmlndXJhdGlvbiBkYXRhLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByYyk7Ci0JCWdvdG8gZXJyX291dF9mcmVlX2N0cmxfYnVzOwotCX0KLQotCS8qIEdldCBJTywgbWVtb3J5LCBhbmQgSVJRIHJlc291cmNlcyBmb3IgbmV3IGRldmljZXMgKi8KLQlyYyA9IHBjaWVocHJtX2ZpbmRfYXZhaWxhYmxlX3Jlc291cmNlcyhjdHJsKTsKLQljdHJsLT5hZGRfc3VwcG9ydCA9ICFyYzsKLQkKLQlpZiAocmMpIHsKLQkJZGJnKCJwY2llaHBybV9maW5kX2F2YWlsYWJsZV9yZXNvdXJjZXMgPSAlI3hcbiIsIHJjKTsKLQkJZXJyKCJ1bmFibGUgdG8gbG9jYXRlIFBDSSBjb25maWd1cmF0aW9uIHJlc291cmNlcyBmb3IgaG90IHBsdWcgYWRkLlxuIik7Ci0JCWdvdG8gZXJyX291dF9mcmVlX2N0cmxfYnVzOwotCX0KLQogCS8qIFNldHVwIHRoZSBzbG90IGluZm9ybWF0aW9uIHN0cnVjdHVyZXMgKi8KIAlyYyA9IGluaXRfc2xvdHMoY3RybCk7CiAJaWYgKHJjKSB7CkBAIC00NTEsNyArNDE2LDYgQEAKIAl9CiAKIAl0X3Nsb3QgPSBwY2llaHBfZmluZF9zbG90KGN0cmwsIGZpcnN0X2RldmljZV9udW0pOwotCWRiZygiJXM6IHRfc2xvdCAlcFxuIiwgX19GVU5DVElPTl9fLCB0X3Nsb3QpOwogCiAJLyoJRmluaXNoIHNldHRpbmcgdXAgdGhlIGhvdCBwbHVnIGN0cmwgZGV2aWNlICovCiAJY3RybC0+bmV4dF9ldmVudCA9IDA7CkBAIC00NjgsNyArNDMyLDYgQEAKIAlkb3duKCZjdHJsLT5jcml0X3NlY3QpOwogCiAJdF9zbG90LT5ocGNfb3BzLT5nZXRfYWRhcHRlcl9zdGF0dXModF9zbG90LCAmdmFsdWUpOyAvKiBDaGVjayBpZiBzbG90IGlzIG9jY3VwaWVkICovCi0JZGJnKCIlczogYWRwYXRlciB2YWx1ZSAleFxuIiwgX19GVU5DVElPTl9fLCB2YWx1ZSk7CiAJCiAJaWYgKChQT1dFUl9DVFJMKGN0cmwtPmN0cmxjYXApKSAmJiAhdmFsdWUpIHsKIAkJcmMgPSB0X3Nsb3QtPmhwY19vcHMtPnBvd2VyX29mZl9zbG90KHRfc2xvdCk7IC8qIFBvd2VyIG9mZiBzbG90IGlmIG5vdCBvY2N1cGllZCovCkBAIC01MDEsNyArNDY0LDYgQEAKIAogc3RhdGljIGludCBwY2llX3N0YXJ0X3RocmVhZCh2b2lkKQogewotCWludCBsb29wOwogCWludCByZXR2YWwgPSAwOwogCQogCWRiZygiSW5pdGlhbGl6ZSArIFN0YXJ0IHRoZSBub3RpZmljYXRpb24vcG9sbGluZyBtZWNoYW5pc20gXG4iKTsKQEAgLTUxMiwzMiArNDc0LDExIEBACiAJCXJldHVybiByZXR2YWw7CiAJfQogCi0JZGJnKCJJbml0aWFsaXplIHNsb3QgbGlzdHNcbiIpOwotCS8qIE9uZSBzbG90IGxpc3QgZm9yIGVhY2ggYnVzIGluIHRoZSBzeXN0ZW0gKi8KLQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgMjU2OyBsb29wKyspIHsKLQkJcGNpZWhwX3Nsb3RfbGlzdFtsb29wXSA9IE5VTEw7Ci0JfQotCiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fZXhpdAotZnJlZV9wY2llaHBfcmVzKHN0cnVjdCBwY2lfcmVzb3VyY2UgKnJlcykKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICp0cmVzOwotCi0Jd2hpbGUgKHJlcykgewotCQl0cmVzID0gcmVzOwotCQlyZXMgPSByZXMtPm5leHQ7Ci0JCWtmcmVlKHRyZXMpOwotCX0KLX0KLQogc3RhdGljIHZvaWQgX19leGl0IHVubG9hZF9wY2llaHBkKHZvaWQpCiB7Ci0Jc3RydWN0IHBjaV9mdW5jICpuZXh0OwotCXN0cnVjdCBwY2lfZnVuYyAqVGVtcFNsb3Q7Ci0JaW50IGxvb3A7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmw7CiAJc3RydWN0IGNvbnRyb2xsZXIgKnRjdHJsOwogCkBAIC01NDYsMTEgKzQ4Nyw2IEBACiAJd2hpbGUgKGN0cmwpIHsKIAkJY2xlYW51cF9zbG90cyhjdHJsKTsKIAotCQlmcmVlX3BjaWVocF9yZXMoY3RybC0+aW9faGVhZCk7Ci0JCWZyZWVfcGNpZWhwX3JlcyhjdHJsLT5tZW1faGVhZCk7Ci0JCWZyZWVfcGNpZWhwX3JlcyhjdHJsLT5wX21lbV9oZWFkKTsKLQkJZnJlZV9wY2llaHBfcmVzKGN0cmwtPmJ1c19oZWFkKTsKLQogCQlrZnJlZSAoY3RybC0+cGNpX2J1cyk7CiAKIAkJY3RybC0+aHBjX29wcy0+cmVsZWFzZV9jdGxyKGN0cmwpOwpAQCAtNTYxLDIwICs0OTcsNiBAQAogCQlrZnJlZSh0Y3RybCk7CiAJfQogCi0JZm9yIChsb29wID0gMDsgbG9vcCA8IDI1NjsgbG9vcCsrKSB7Ci0JCW5leHQgPSBwY2llaHBfc2xvdF9saXN0W2xvb3BdOwotCQl3aGlsZSAobmV4dCAhPSBOVUxMKSB7Ci0JCQlmcmVlX3BjaWVocF9yZXMobmV4dC0+aW9faGVhZCk7Ci0JCQlmcmVlX3BjaWVocF9yZXMobmV4dC0+bWVtX2hlYWQpOwotCQkJZnJlZV9wY2llaHBfcmVzKG5leHQtPnBfbWVtX2hlYWQpOwotCQkJZnJlZV9wY2llaHBfcmVzKG5leHQtPmJ1c19oZWFkKTsKLQotCQkJVGVtcFNsb3QgPSBuZXh0OwotCQkJbmV4dCA9IG5leHQtPm5leHQ7Ci0JCQlrZnJlZShUZW1wU2xvdCk7Ci0JCX0KLQl9Ci0KIAkvKiBTdG9wIHRoZSBub3RpZmljYXRpb24gbWVjaGFuaXNtICovCiAJcGNpZWhwX2V2ZW50X3N0b3BfdGhyZWFkKCk7CiAKQEAgLTYzOSwyMSArNTYxLDE2IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBlcnJvcl9ocGNfaW5pdDsKIAotCXJldHZhbCA9IHBjaWVocHJtX2luaXQoUENJKTsKLQlpZiAoIXJldHZhbCkgewotIAkJcmV0dmFsID0gcGNpZV9wb3J0X3NlcnZpY2VfcmVnaXN0ZXIoJmhwZHJpdmVyX3BvcnRkcnYpOwotIAkJZGJnKCJwY2llX3BvcnRfc2VydmljZV9yZWdpc3RlciA9ICVkXG4iLCByZXR2YWwpOwotICAJCWluZm8oRFJJVkVSX0RFU0MgIiB2ZXJzaW9uOiAiIERSSVZFUl9WRVJTSU9OICJcbiIpOwotIAkJaWYgKHJldHZhbCkKLSAJCSAgIGRiZygiJXM6IEZhaWx1cmUgdG8gcmVnaXN0ZXIgc2VydmljZVxuIiwgX19GVU5DVElPTl9fKTsKLQl9CisJcmV0dmFsID0gcGNpZV9wb3J0X3NlcnZpY2VfcmVnaXN0ZXIoJmhwZHJpdmVyX3BvcnRkcnYpOworIAlkYmcoInBjaWVfcG9ydF9zZXJ2aWNlX3JlZ2lzdGVyID0gJWRcbiIsIHJldHZhbCk7CisgIAlpbmZvKERSSVZFUl9ERVNDICIgdmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiXG4iKTsKKyAJaWYgKHJldHZhbCkKKwkJZGJnKCIlczogRmFpbHVyZSB0byByZWdpc3RlciBzZXJ2aWNlXG4iLCBfX0ZVTkNUSU9OX18pOwogCiBlcnJvcl9ocGNfaW5pdDoKIAlpZiAocmV0dmFsKSB7Ci0JCXBjaWVocHJtX2NsZWFudXAoKTsKIAkJcGNpZWhwX2V2ZW50X3N0b3BfdGhyZWFkKCk7Ci0JfSBlbHNlCi0JCXBjaWVocHJtX3ByaW50X3BpcnQoKTsKKwl9OwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTY2Myw5ICs1ODAsNiBAQAogCWRiZygidW5sb2FkX3BjaWVocGQoKVxuIik7CiAJdW5sb2FkX3BjaWVocGQoKTsKIAotCXBjaWVocHJtX2NsZWFudXAoKTsKLQotCWRiZygicGNpZV9wb3J0X3NlcnZpY2VfdW5yZWdpc3RlclxuIik7CiAJcGNpZV9wb3J0X3NlcnZpY2VfdW5yZWdpc3RlcigmaHBkcml2ZXJfcG9ydGRydik7CiAKIAlpbmZvKERSSVZFUl9ERVNDICIgdmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiIHVubG9hZGVkXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2N0cmwuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2N0cmwuYwppbmRleCA4OThmNmRhLi41ZTU4MmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY3RybC5jCkBAIC0yNywyNSArMjcsMTQgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSAiLi4vcGNpLmgiCiAjaW5jbHVkZSAicGNpZWhwLmgiCi0jaW5jbHVkZSAicGNpZWhwcm0uaCIKIAotc3RhdGljIHUzMiBjb25maWd1cmVfbmV3X2RldmljZShzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwgc3RydWN0IHBjaV9mdW5jICpmdW5jLAotCXU4IGJlaGluZF9icmlkZ2UsIHN0cnVjdCByZXNvdXJjZV9saXN0cyAqcmVzb3VyY2VzLCB1OCBicmlkZ2VfYnVzLCB1OCBicmlkZ2VfZGV2KTsKLXN0YXRpYyBpbnQgY29uZmlndXJlX25ld19mdW5jdGlvbiggc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHN0cnVjdCBwY2lfZnVuYyAqZnVuYywKLQl1OCBiZWhpbmRfYnJpZGdlLCBzdHJ1Y3QgcmVzb3VyY2VfbGlzdHMgKnJlc291cmNlcywgdTggYnJpZGdlX2J1cywgdTggYnJpZGdlX2Rldik7CiBzdGF0aWMgdm9pZCBpbnRlcnJ1cHRfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgY29udHJvbGxlciAqY3RybCk7CiAKIHN0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIGV2ZW50X3NlbWFwaG9yZTsJLyogbXV0ZXggZm9yIHByb2Nlc3MgbG9vcCAodXAgaWYgc29tZXRoaW5nIHRvIHByb2Nlc3MpICovCkBAIC02MCwyMiArNDksMTggQEAKIAlzdHJ1Y3Qgc2xvdCAqcF9zbG90OwogCXU4IHJjID0gMDsKIAl1OCBnZXRzdGF0dXM7Ci0Jc3RydWN0IHBjaV9mdW5jICpmdW5jOwogCXN0cnVjdCBldmVudF9pbmZvICp0YXNrSW5mbzsKIAogCS8qIEF0dGVudGlvbiBCdXR0b24gQ2hhbmdlICovCiAJZGJnKCJwY2llaHA6ICBBdHRlbnRpb24gYnV0dG9uIGludGVycnVwdCByZWNlaXZlZC5cbiIpOwogCQotCWZ1bmMgPSBwY2llaHBfc2xvdF9maW5kKGN0cmwtPnNsb3RfYnVzLCAoaHBfc2xvdCArIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCksIDApOwotCiAJLyogVGhpcyBpcyB0aGUgc3RydWN0dXJlIHRoYXQgdGVsbHMgdGhlIHdvcmtlciB0aHJlYWQgd2hhdCB0byBkbyAqLwogCXRhc2tJbmZvID0gJihjdHJsLT5ldmVudF9xdWV1ZVtjdHJsLT5uZXh0X2V2ZW50XSk7CiAJcF9zbG90ID0gcGNpZWhwX2ZpbmRfc2xvdChjdHJsLCBocF9zbG90ICsgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KTsKIAotCXBfc2xvdC0+aHBjX29wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzKHBfc2xvdCwgJihmdW5jLT5wcmVzZW5jZV9zYXZlKSk7CiAJcF9zbG90LT5ocGNfb3BzLT5nZXRfbGF0Y2hfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7CiAJCi0JY3RybC0+bmV4dF9ldmVudCA9IChjdHJsLT5uZXh0X2V2ZW50ICsgMSkgJSAxMDsKKwljdHJsLT5uZXh0X2V2ZW50ID0gKGN0cmwtPm5leHRfZXZlbnQgKyAxKSAlIE1BWF9FVkVOVFM7CiAJdGFza0luZm8tPmhwX3Nsb3QgPSBocF9zbG90OwogCiAJcmMrKzsKQEAgLTExNywyNCArMTAyLDIwIEBACiAJc3RydWN0IHNsb3QgKnBfc2xvdDsKIAl1OCByYyA9IDA7CiAJdTggZ2V0c3RhdHVzOwotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYzsKIAlzdHJ1Y3QgZXZlbnRfaW5mbyAqdGFza0luZm87CiAKIAkvKiBTd2l0Y2ggQ2hhbmdlICovCiAJZGJnKCJwY2llaHA6ICBTd2l0Y2ggaW50ZXJydXB0IHJlY2VpdmVkLlxuIik7CiAKLQlmdW5jID0gcGNpZWhwX3Nsb3RfZmluZChjdHJsLT5zbG90X2J1cywgKGhwX3Nsb3QgKyBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQpLCAwKTsKLQogCS8qIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSB0aGF0IHRlbGxzIHRoZSB3b3JrZXIgdGhyZWFkCiAJICogd2hhdCB0byBkbwogCSAqLwogCXRhc2tJbmZvID0gJihjdHJsLT5ldmVudF9xdWV1ZVtjdHJsLT5uZXh0X2V2ZW50XSk7Ci0JY3RybC0+bmV4dF9ldmVudCA9IChjdHJsLT5uZXh0X2V2ZW50ICsgMSkgJSAxMDsKKwljdHJsLT5uZXh0X2V2ZW50ID0gKGN0cmwtPm5leHRfZXZlbnQgKyAxKSAlIE1BWF9FVkVOVFM7CiAJdGFza0luZm8tPmhwX3Nsb3QgPSBocF9zbG90OwogCiAJcmMrKzsKIAlwX3Nsb3QgPSBwY2llaHBfZmluZF9zbG90KGN0cmwsIGhwX3Nsb3QgKyBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQpOwotCXBfc2xvdC0+aHBjX29wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzKHBfc2xvdCwgJihmdW5jLT5wcmVzZW5jZV9zYXZlKSk7CiAJcF9zbG90LT5ocGNfb3BzLT5nZXRfbGF0Y2hfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7CiAKIAlpZiAoZ2V0c3RhdHVzKSB7CkBAIC0xNDIsMTQgKzEyMywxMiBAQAogCQkgKiBTd2l0Y2ggb3BlbmVkCiAJCSAqLwogCQlpbmZvKCJMYXRjaCBvcGVuIG9uIFNsb3QoJWQpXG4iLCBjdHJsLT5maXJzdF9zbG90ICsgaHBfc2xvdCk7Ci0JCWZ1bmMtPnN3aXRjaF9zYXZlID0gMDsKIAkJdGFza0luZm8tPmV2ZW50X3R5cGUgPSBJTlRfU1dJVENIX09QRU47CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogIFN3aXRjaCBjbG9zZWQKIAkJICovCiAJCWluZm8oIkxhdGNoIGNsb3NlIG9uIFNsb3QoJWQpXG4iLCBjdHJsLT5maXJzdF9zbG90ICsgaHBfc2xvdCk7Ci0JCWZ1bmMtPnN3aXRjaF9zYXZlID0gMHgxMDsKIAkJdGFza0luZm8tPmV2ZW50X3R5cGUgPSBJTlRfU1dJVENIX0NMT1NFOwogCX0KIApAQCAtMTYzLDIwICsxNDIsMTcgQEAKIHsKIAlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IChzdHJ1Y3QgY29udHJvbGxlciAqKSBpbnN0X2lkOwogCXN0cnVjdCBzbG90ICpwX3Nsb3Q7Ci0JdTggcmMgPSAwOwotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYzsKKwl1OCBwcmVzZW5jZV9zYXZlLCByYyA9IDA7CiAJc3RydWN0IGV2ZW50X2luZm8gKnRhc2tJbmZvOwogCiAJLyogUHJlc2VuY2UgQ2hhbmdlICovCiAJZGJnKCJwY2llaHA6ICBQcmVzZW5jZS9Ob3RpZnkgaW5wdXQgY2hhbmdlLlxuIik7CiAKLQlmdW5jID0gcGNpZWhwX3Nsb3RfZmluZChjdHJsLT5zbG90X2J1cywgKGhwX3Nsb3QgKyBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQpLCAwKTsKLQogCS8qIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSB0aGF0IHRlbGxzIHRoZSB3b3JrZXIgdGhyZWFkCiAJICogd2hhdCB0byBkbwogCSAqLwogCXRhc2tJbmZvID0gJihjdHJsLT5ldmVudF9xdWV1ZVtjdHJsLT5uZXh0X2V2ZW50XSk7Ci0JY3RybC0+bmV4dF9ldmVudCA9IChjdHJsLT5uZXh0X2V2ZW50ICsgMSkgJSAxMDsKKwljdHJsLT5uZXh0X2V2ZW50ID0gKGN0cmwtPm5leHRfZXZlbnQgKyAxKSAlIE1BWF9FVkVOVFM7CiAJdGFza0luZm8tPmhwX3Nsb3QgPSBocF9zbG90OwogCiAJcmMrKzsKQEAgLTE4NSw4ICsxNjEsOCBAQAogCS8qIFN3aXRjaCBpcyBvcGVuLCBhc3N1bWUgYSBwcmVzZW5jZSBjaGFuZ2UKIAkgKiBTYXZlIHRoZSBwcmVzZW5jZSBzdGF0ZQogCSAqLwotCXBfc2xvdC0+aHBjX29wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzKHBfc2xvdCwgJihmdW5jLT5wcmVzZW5jZV9zYXZlKSk7Ci0JaWYgKGZ1bmMtPnByZXNlbmNlX3NhdmUpIHsKKwlwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICZwcmVzZW5jZV9zYXZlKTsKKwlpZiAocHJlc2VuY2Vfc2F2ZSkgewogCQkvKgogCQkgKiBDYXJkIFByZXNlbnQKIAkJICovCkBAIC0yMTEsMTkgKzE4NywxNiBAQAogCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gKHN0cnVjdCBjb250cm9sbGVyICopIGluc3RfaWQ7CiAJc3RydWN0IHNsb3QgKnBfc2xvdDsKIAl1OCByYyA9IDA7Ci0Jc3RydWN0IHBjaV9mdW5jICpmdW5jOwogCXN0cnVjdCBldmVudF9pbmZvICp0YXNrSW5mbzsKIAogCS8qIHBvd2VyIGZhdWx0ICovCiAJZGJnKCJwY2llaHA6ICBQb3dlciBmYXVsdCBpbnRlcnJ1cHQgcmVjZWl2ZWQuXG4iKTsKIAotCWZ1bmMgPSBwY2llaHBfc2xvdF9maW5kKGN0cmwtPnNsb3RfYnVzLCAoaHBfc2xvdCArIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCksIDApOwotCiAJLyogdGhpcyBpcyB0aGUgc3RydWN0dXJlIHRoYXQgdGVsbHMgdGhlIHdvcmtlciB0aHJlYWQKIAkgKiB3aGF0IHRvIGRvCiAJICovCiAJdGFza0luZm8gPSAmKGN0cmwtPmV2ZW50X3F1ZXVlW2N0cmwtPm5leHRfZXZlbnRdKTsKLQljdHJsLT5uZXh0X2V2ZW50ID0gKGN0cmwtPm5leHRfZXZlbnQgKyAxKSAlIDEwOworCWN0cmwtPm5leHRfZXZlbnQgPSAoY3RybC0+bmV4dF9ldmVudCArIDEpICUgTUFYX0VWRU5UUzsKIAl0YXNrSW5mby0+aHBfc2xvdCA9IGhwX3Nsb3Q7CiAKIAlyYysrOwpAQCAtMjM0LDcgKzIwNyw3IEBACiAJCSAqIHBvd2VyIGZhdWx0IENsZWFyZWQKIAkJICovCiAJCWluZm8oIlBvd2VyIGZhdWx0IGNsZWFyZWQgb24gU2xvdCglZClcbiIsIGN0cmwtPmZpcnN0X3Nsb3QgKyBocF9zbG90KTsKLQkJZnVuYy0+c3RhdHVzID0gMHgwMDsKKwkJcF9zbG90LT5zdGF0dXMgPSAweDAwOwogCQl0YXNrSW5mby0+ZXZlbnRfdHlwZSA9IElOVF9QT1dFUl9GQVVMVF9DTEVBUjsKIAl9IGVsc2UgewogCQkvKgpAQCAtMjQzLDcgKzIxNiw3IEBACiAJCWluZm8oIlBvd2VyIGZhdWx0IG9uIFNsb3QoJWQpXG4iLCBjdHJsLT5maXJzdF9zbG90ICsgaHBfc2xvdCk7CiAJCXRhc2tJbmZvLT5ldmVudF90eXBlID0gSU5UX1BPV0VSX0ZBVUxUOwogCQkvKiBzZXQgcG93ZXIgZmF1bHQgc3RhdHVzIGZvciB0aGlzIGJvYXJkICovCi0JCWZ1bmMtPnN0YXR1cyA9IDB4RkY7CisJCXBfc2xvdC0+c3RhdHVzID0gMHhGRjsKIAkJaW5mbygicG93ZXIgZmF1bHQgYml0ICV4IHNldFxuIiwgaHBfc2xvdCk7CiAJfQogCWlmIChyYykKQEAgLTI1Miw4MTAgKzIyNSw2IEBACiAJcmV0dXJuIHJjOwogfQogCi0KLS8qKgotICogc29ydF9ieV9zaXplOiBzb3J0IG5vZGVzIGJ5IHRoZWlyIGxlbmd0aCwgc21hbGxlc3QgZmlyc3QuCi0gKgotICogQGhlYWQ6IGxpc3QgdG8gc29ydAotICovCi1zdGF0aWMgaW50IHNvcnRfYnlfc2l6ZShzdHJ1Y3QgcGNpX3Jlc291cmNlICoqaGVhZCkKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpjdXJyZW50X3JlczsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpuZXh0X3JlczsKLQlpbnQgb3V0X29mX29yZGVyID0gMTsKLQotCWlmICghKCpoZWFkKSkKLQkJcmV0dXJuIDE7Ci0KLQlpZiAoISgoKmhlYWQpLT5uZXh0KSkKLQkJcmV0dXJuIDA7Ci0KLQl3aGlsZSAob3V0X29mX29yZGVyKSB7Ci0JCW91dF9vZl9vcmRlciA9IDA7Ci0KLQkJLyogU3BlY2lhbCBjYXNlIGZvciBzd2FwcGluZyBsaXN0IGhlYWQgKi8KLQkJaWYgKCgoKmhlYWQpLT5uZXh0KSAmJgotCQkgICAgKCgqaGVhZCktPmxlbmd0aCA+ICgqaGVhZCktPm5leHQtPmxlbmd0aCkpIHsKLQkJCW91dF9vZl9vcmRlcisrOwotCQkJY3VycmVudF9yZXMgPSAqaGVhZDsKLQkJCSpoZWFkID0gKCpoZWFkKS0+bmV4dDsKLQkJCWN1cnJlbnRfcmVzLT5uZXh0ID0gKCpoZWFkKS0+bmV4dDsKLQkJCSgqaGVhZCktPm5leHQgPSBjdXJyZW50X3JlczsKLQkJfQotCi0JCWN1cnJlbnRfcmVzID0gKmhlYWQ7Ci0KLQkJd2hpbGUgKGN1cnJlbnRfcmVzLT5uZXh0ICYmIGN1cnJlbnRfcmVzLT5uZXh0LT5uZXh0KSB7Ci0JCQlpZiAoY3VycmVudF9yZXMtPm5leHQtPmxlbmd0aCA+IGN1cnJlbnRfcmVzLT5uZXh0LT5uZXh0LT5sZW5ndGgpIHsKLQkJCQlvdXRfb2Zfb3JkZXIrKzsKLQkJCQluZXh0X3JlcyA9IGN1cnJlbnRfcmVzLT5uZXh0OwotCQkJCWN1cnJlbnRfcmVzLT5uZXh0ID0gY3VycmVudF9yZXMtPm5leHQtPm5leHQ7Ci0JCQkJY3VycmVudF9yZXMgPSBjdXJyZW50X3Jlcy0+bmV4dDsKLQkJCQluZXh0X3Jlcy0+bmV4dCA9IGN1cnJlbnRfcmVzLT5uZXh0OwotCQkJCWN1cnJlbnRfcmVzLT5uZXh0ID0gbmV4dF9yZXM7Ci0JCQl9IGVsc2UKLQkJCQljdXJyZW50X3JlcyA9IGN1cnJlbnRfcmVzLT5uZXh0OwotCQl9Ci0JfSAgLyogRW5kIG9mIG91dF9vZl9vcmRlciBsb29wICovCi0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKgotICogc29ydF9ieV9tYXhfc2l6ZQotICoKLSAqIFNvcnRzIG5vZGVzIG9uIHRoZSBsaXN0IGJ5IHRoZWlyIGxlbmd0aC4KLSAqIExhcmdlc3QgZmlyc3QuCi0gKgotICovCi1zdGF0aWMgaW50IHNvcnRfYnlfbWF4X3NpemUoc3RydWN0IHBjaV9yZXNvdXJjZSAqKmhlYWQpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqY3VycmVudF9yZXM7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqbmV4dF9yZXM7Ci0JaW50IG91dF9vZl9vcmRlciA9IDE7Ci0KLQlpZiAoISgqaGVhZCkpCi0JCXJldHVybiAxOwotCi0JaWYgKCEoKCpoZWFkKS0+bmV4dCkpCi0JCXJldHVybiAwOwotCi0Jd2hpbGUgKG91dF9vZl9vcmRlcikgewotCQlvdXRfb2Zfb3JkZXIgPSAwOwotCi0JCS8qIFNwZWNpYWwgY2FzZSBmb3Igc3dhcHBpbmcgbGlzdCBoZWFkICovCi0JCWlmICgoKCpoZWFkKS0+bmV4dCkgJiYKLQkJICAgICgoKmhlYWQpLT5sZW5ndGggPCAoKmhlYWQpLT5uZXh0LT5sZW5ndGgpKSB7Ci0JCQlvdXRfb2Zfb3JkZXIrKzsKLQkJCWN1cnJlbnRfcmVzID0gKmhlYWQ7Ci0JCQkqaGVhZCA9ICgqaGVhZCktPm5leHQ7Ci0JCQljdXJyZW50X3Jlcy0+bmV4dCA9ICgqaGVhZCktPm5leHQ7Ci0JCQkoKmhlYWQpLT5uZXh0ID0gY3VycmVudF9yZXM7Ci0JCX0KLQotCQljdXJyZW50X3JlcyA9ICpoZWFkOwotCi0JCXdoaWxlIChjdXJyZW50X3Jlcy0+bmV4dCAmJiBjdXJyZW50X3Jlcy0+bmV4dC0+bmV4dCkgewotCQkJaWYgKGN1cnJlbnRfcmVzLT5uZXh0LT5sZW5ndGggPCBjdXJyZW50X3Jlcy0+bmV4dC0+bmV4dC0+bGVuZ3RoKSB7Ci0JCQkJb3V0X29mX29yZGVyKys7Ci0JCQkJbmV4dF9yZXMgPSBjdXJyZW50X3Jlcy0+bmV4dDsKLQkJCQljdXJyZW50X3Jlcy0+bmV4dCA9IGN1cnJlbnRfcmVzLT5uZXh0LT5uZXh0OwotCQkJCWN1cnJlbnRfcmVzID0gY3VycmVudF9yZXMtPm5leHQ7Ci0JCQkJbmV4dF9yZXMtPm5leHQgPSBjdXJyZW50X3Jlcy0+bmV4dDsKLQkJCQljdXJyZW50X3Jlcy0+bmV4dCA9IG5leHRfcmVzOwotCQkJfSBlbHNlCi0JCQkJY3VycmVudF9yZXMgPSBjdXJyZW50X3Jlcy0+bmV4dDsKLQkJfQotCX0gIC8qIEVuZCBvZiBvdXRfb2Zfb3JkZXIgbG9vcCAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoqCi0gKiBkb19wcmVfYnJpZGdlX3Jlc291cmNlX3NwbGl0OiByZXR1cm4gb25lIHVudXNlZCByZXNvdXJjZSBub2RlCi0gKiBAaGVhZDogbGlzdCB0byBzY2FuCi0gKgotICovCi1zdGF0aWMgc3RydWN0IHBjaV9yZXNvdXJjZSAqCi1kb19wcmVfYnJpZGdlX3Jlc291cmNlX3NwbGl0KHN0cnVjdCBwY2lfcmVzb3VyY2UgKipoZWFkLAotCQkJCXN0cnVjdCBwY2lfcmVzb3VyY2UgKipvcmlnX2hlYWQsIHUzMiBhbGlnbm1lbnQpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcHJldm5vZGUgPSBOVUxMOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm5vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqc3BsaXRfbm9kZTsKLQl1MzIgcmM7Ci0JdTMyIHRlbXBfZHdvcmQ7Ci0JZGJnKCJkb19wcmVfYnJpZGdlX3Jlc291cmNlX3NwbGl0XG4iKTsKLQotCWlmICghKCpoZWFkKSB8fCAhKCpvcmlnX2hlYWQpKQotCQlyZXR1cm4gTlVMTDsKLQotCXJjID0gcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoaGVhZCk7Ci0KLQlpZiAocmMpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKCgqaGVhZCktPmJhc2UgIT0gKCpvcmlnX2hlYWQpLT5iYXNlKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmICgoKmhlYWQpLT5sZW5ndGggPT0gKCpvcmlnX2hlYWQpLT5sZW5ndGgpCi0JCXJldHVybiBOVUxMOwotCi0KLQkvKiBJZiB3ZSBnb3QgaGVyZSwgdGhlcmUgdGhlIGJyaWRnZSByZXF1aXJlcyBzb21lIG9mIHRoZSByZXNvdXJjZSwgYnV0Ci0JICogIHdlIG1heSBiZSBhYmxlIHRvIHNwbGl0IHNvbWUgb2ZmIG9mIHRoZSBmcm9udAotCSAqLwkKLQlub2RlID0gKmhlYWQ7Ci0KLQlpZiAobm9kZS0+bGVuZ3RoICYgKGFsaWdubWVudCAtMSkpIHsKLQkJLyogdGhpcyBvbmUgaXNuJ3QgYW4gYWxpZ25lZCBsZW5ndGgsIHNvIHdlJ2xsIG1ha2UgYSBuZXcgZW50cnkKLQkJICogYW5kIHNwbGl0IGl0IHVwLgotCQkgKi8KLQkJc3BsaXRfbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQotCQlpZiAoIXNwbGl0X25vZGUpCi0JCQlyZXR1cm4gTlVMTDsKLQotCQl0ZW1wX2R3b3JkID0gKG5vZGUtPmxlbmd0aCB8IChhbGlnbm1lbnQtMSkpICsgMSAtIGFsaWdubWVudDsKLQotCQlzcGxpdF9ub2RlLT5iYXNlID0gbm9kZS0+YmFzZTsKLQkJc3BsaXRfbm9kZS0+bGVuZ3RoID0gdGVtcF9kd29yZDsKLQotCQlub2RlLT5sZW5ndGggLT0gdGVtcF9kd29yZDsKLQkJbm9kZS0+YmFzZSArPSBzcGxpdF9ub2RlLT5sZW5ndGg7Ci0KLQkJLyogUHV0IGl0IGluIHRoZSBsaXN0ICovCi0JCSpoZWFkID0gc3BsaXRfbm9kZTsKLQkJc3BsaXRfbm9kZS0+bmV4dCA9IG5vZGU7Ci0JfQotCi0JaWYgKG5vZGUtPmxlbmd0aCA8IGFsaWdubWVudCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQkvKiBOb3cgdW5saW5rIGl0ICovCi0JaWYgKCpoZWFkID09IG5vZGUpIHsKLQkJKmhlYWQgPSBub2RlLT5uZXh0OwotCX0gZWxzZSB7Ci0JCXByZXZub2RlID0gKmhlYWQ7Ci0JCXdoaWxlIChwcmV2bm9kZS0+bmV4dCAhPSBub2RlKQotCQkJcHJldm5vZGUgPSBwcmV2bm9kZS0+bmV4dDsKLQotCQlwcmV2bm9kZS0+bmV4dCA9IG5vZGUtPm5leHQ7Ci0JfQotCW5vZGUtPm5leHQgPSBOVUxMOwotCi0JcmV0dXJuIG5vZGU7Ci19Ci0KLQotLyoqCi0gKiBkb19icmlkZ2VfcmVzb3VyY2Vfc3BsaXQ6IHJldHVybiBvbmUgdW51c2VkIHJlc291cmNlIG5vZGUKLSAqIEBoZWFkOiBsaXN0IHRvIHNjYW4KLSAqCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX3Jlc291cmNlICoKLWRvX2JyaWRnZV9yZXNvdXJjZV9zcGxpdChzdHJ1Y3QgcGNpX3Jlc291cmNlICoqaGVhZCwgdTMyIGFsaWdubWVudCkKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpwcmV2bm9kZSA9IE5VTEw7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqbm9kZTsKLQl1MzIgcmM7Ci0JdTMyIHRlbXBfZHdvcmQ7Ci0KLQlpZiAoISgqaGVhZCkpCi0JCXJldHVybiBOVUxMOwotCi0JcmMgPSBwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZShoZWFkKTsKLQotCWlmIChyYykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlub2RlID0gKmhlYWQ7Ci0KLQl3aGlsZSAobm9kZS0+bmV4dCkgewotCQlwcmV2bm9kZSA9IG5vZGU7Ci0JCW5vZGUgPSBub2RlLT5uZXh0OwotCQlrZnJlZShwcmV2bm9kZSk7Ci0JfQotCi0JaWYgKG5vZGUtPmxlbmd0aCA8IGFsaWdubWVudCkgewotCQlrZnJlZShub2RlKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JaWYgKG5vZGUtPmJhc2UgJiAoYWxpZ25tZW50IC0gMSkpIHsKLQkJLyogU2hvcnQgY2lyY3VpdCBpZiBhZGp1c3RlZCBzaXplIGlzIHRvbyBzbWFsbCAqLwotCQl0ZW1wX2R3b3JkID0gKG5vZGUtPmJhc2UgfCAoYWxpZ25tZW50LTEpKSArIDE7Ci0JCWlmICgobm9kZS0+bGVuZ3RoIC0gKHRlbXBfZHdvcmQgLSBub2RlLT5iYXNlKSkgPCBhbGlnbm1lbnQpIHsKLQkJCWtmcmVlKG5vZGUpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQotCQlub2RlLT5sZW5ndGggLT0gKHRlbXBfZHdvcmQgLSBub2RlLT5iYXNlKTsKLQkJbm9kZS0+YmFzZSA9IHRlbXBfZHdvcmQ7Ci0JfQotCi0JaWYgKG5vZGUtPmxlbmd0aCAmIChhbGlnbm1lbnQgLSAxKSkgewotCQkvKiBUaGVyZSdzIHN0dWZmIGluIHVzZSBhZnRlciB0aGlzIG5vZGUgKi8KLQkJa2ZyZWUobm9kZSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXJldHVybiBub2RlOwotfQotCi0KLS8qCi0gKiBnZXRfaW9fcmVzb3VyY2UKLSAqCi0gKiB0aGlzIGZ1bmN0aW9uIHNvcnRzIHRoZSByZXNvdXJjZSBsaXN0IGJ5IHNpemUgYW5kIHRoZW4KLSAqIHJldHVybnMgdGhlIGZpcnN0IG5vZGUgb2YgInNpemUiIGxlbmd0aCB0aGF0IGlzIG5vdCBpbiB0aGUKLSAqIElTQSBhbGlhc2luZyB3aW5kb3cuICBJZiBpdCBmaW5kcyBhIG5vZGUgbGFyZ2VyIHRoYW4gInNpemUiCi0gKiBpdCB3aWxsIHNwbGl0IGl0IHVwLgotICoKLSAqIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4KLSAqLwotc3RhdGljIHN0cnVjdCBwY2lfcmVzb3VyY2UgKmdldF9pb19yZXNvdXJjZShzdHJ1Y3QgcGNpX3Jlc291cmNlICoqaGVhZCwgdTMyIHNpemUpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcHJldm5vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqbm9kZTsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpzcGxpdF9ub2RlID0gTlVMTDsKLQl1MzIgdGVtcF9kd29yZDsKLQotCWlmICghKCpoZWFkKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAoIHBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKGhlYWQpICkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAoIHNvcnRfYnlfc2l6ZShoZWFkKSApCi0JCXJldHVybiBOVUxMOwotCi0JZm9yIChub2RlID0gKmhlYWQ7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0KSB7Ci0JCWlmIChub2RlLT5sZW5ndGggPCBzaXplKQotCQkJY29udGludWU7Ci0KLQkJaWYgKG5vZGUtPmJhc2UgJiAoc2l6ZSAtIDEpKSB7Ci0JCQkvKiB0aGlzIG9uZSBpc24ndCBiYXNlIGFsaWduZWQgcHJvcGVybHkKLQkJCSAgIHNvIHdlJ2xsIG1ha2UgYSBuZXcgZW50cnkgYW5kIHNwbGl0IGl0IHVwICovCi0JCQl0ZW1wX2R3b3JkID0gKG5vZGUtPmJhc2UgfCAoc2l6ZS0xKSkgKyAxOwotCi0JCQkvKi8gU2hvcnQgY2lyY3VpdCBpZiBhZGp1c3RlZCBzaXplIGlzIHRvbyBzbWFsbCAqLwotCQkJaWYgKChub2RlLT5sZW5ndGggLSAodGVtcF9kd29yZCAtIG5vZGUtPmJhc2UpKSA8IHNpemUpCi0JCQkJY29udGludWU7Ci0KLQkJCXNwbGl0X25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwKLQkJCQkJCUdGUF9LRVJORUwpOwotCi0JCQlpZiAoIXNwbGl0X25vZGUpCi0JCQkJcmV0dXJuIE5VTEw7Ci0KLQkJCXNwbGl0X25vZGUtPmJhc2UgPSBub2RlLT5iYXNlOwotCQkJc3BsaXRfbm9kZS0+bGVuZ3RoID0gdGVtcF9kd29yZCAtIG5vZGUtPmJhc2U7Ci0JCQlub2RlLT5iYXNlID0gdGVtcF9kd29yZDsKLQkJCW5vZGUtPmxlbmd0aCAtPSBzcGxpdF9ub2RlLT5sZW5ndGg7Ci0KLQkJCS8qIFB1dCBpdCBpbiB0aGUgbGlzdCAqLwotCQkJc3BsaXRfbm9kZS0+bmV4dCA9IG5vZGUtPm5leHQ7Ci0JCQlub2RlLT5uZXh0ID0gc3BsaXRfbm9kZTsKLQkJfSAvKiBFbmQgb2Ygbm9uLWFsaWduZWQgYmFzZSAqLwotCi0JCS8qIERvbid0IG5lZWQgdG8gY2hlY2sgaWYgdG9vIHNtYWxsIHNpbmNlIHdlIGFscmVhZHkgZGlkICovCi0JCWlmIChub2RlLT5sZW5ndGggPiBzaXplKSB7Ci0JCQkvKiB0aGlzIG9uZSBpcyBsb25nZXIgdGhhbiB3ZSBuZWVkCi0JCQkgICBzbyB3ZSdsbCBtYWtlIGEgbmV3IGVudHJ5IGFuZCBzcGxpdCBpdCB1cCAqLwotCQkJc3BsaXRfbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLAotCQkJCQkJR0ZQX0tFUk5FTCk7Ci0KLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gTlVMTDsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IG5vZGUtPmJhc2UgKyBzaXplOwotCQkJc3BsaXRfbm9kZS0+bGVuZ3RoID0gbm9kZS0+bGVuZ3RoIC0gc2l6ZTsKLQkJCW5vZGUtPmxlbmd0aCA9IHNpemU7Ci0KLQkJCS8qIFB1dCBpdCBpbiB0aGUgbGlzdCAqLwotCQkJc3BsaXRfbm9kZS0+bmV4dCA9IG5vZGUtPm5leHQ7Ci0JCQlub2RlLT5uZXh0ID0gc3BsaXRfbm9kZTsKLQkJfSAgLyogRW5kIG9mIHRvbyBiaWcgb24gdG9wIGVuZCAqLwotCi0JCS8qIEZvciBJTyBtYWtlIHN1cmUgaXQncyBub3QgaW4gdGhlIElTQSBhbGlhc2luZyBzcGFjZSAqLwotCQlpZiAobm9kZS0+YmFzZSAmIDB4MzAwTCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIElmIHdlIGdvdCBoZXJlLCB0aGVuIGl0IGlzIHRoZSByaWdodCBzaXplIAotCQkgICBOb3cgdGFrZSBpdCBvdXQgb2YgdGhlIGxpc3QgKi8KLQkJaWYgKCpoZWFkID09IG5vZGUpIHsKLQkJCSpoZWFkID0gbm9kZS0+bmV4dDsKLQkJfSBlbHNlIHsKLQkJCXByZXZub2RlID0gKmhlYWQ7Ci0JCQl3aGlsZSAocHJldm5vZGUtPm5leHQgIT0gbm9kZSkKLQkJCQlwcmV2bm9kZSA9IHByZXZub2RlLT5uZXh0OwotCi0JCQlwcmV2bm9kZS0+bmV4dCA9IG5vZGUtPm5leHQ7Ci0JCX0KLQkJbm9kZS0+bmV4dCA9IE5VTEw7Ci0JCS8qIFN0b3AgbG9vcGluZyAqLwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gbm9kZTsKLX0KLQotCi0vKgotICogZ2V0X21heF9yZXNvdXJjZQotICoKLSAqIEdldHMgdGhlIGxhcmdlc3Qgbm9kZSB0aGF0IGlzIGF0IGxlYXN0ICJzaXplIiBiaWcgZnJvbSB0aGUKLSAqIGxpc3QgcG9pbnRlZCB0byBieSBoZWFkLiAgSXQgYWxpZ25zIHRoZSBub2RlIG9uIHRvcCBhbmQgYm90dG9tCi0gKiB0byAic2l6ZSIgYWxpZ25tZW50IGJlZm9yZSByZXR1cm5pbmcgaXQuCi0gKiBKLkkuIG1vZGlmaWVkIHRvIHB1dCBtYXggc2l6ZSBsaW1pdHMgb2Y7IDY0TS0+MzJNLT4xNk0tPjhNLT40TS0+MU0KLSAqICBUaGlzIGlzIG5lZWRlZCB0byBhdm9pZCBhbGxvY2F0aW5nIGVudGlyZSBBQ1BJIF9DUlMgcmVzIHRvIG9uZSBjaGlsZCBicmlkZ2Uvc2xvdC4KLSAqLwotc3RhdGljIHN0cnVjdCBwY2lfcmVzb3VyY2UgKmdldF9tYXhfcmVzb3VyY2Uoc3RydWN0IHBjaV9yZXNvdXJjZSAqKmhlYWQsIHUzMiBzaXplKQotewotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm1heDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICp0ZW1wOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnNwbGl0X25vZGU7Ci0JdTMyIHRlbXBfZHdvcmQ7Ci0JdTMyIG1heF9zaXplW10gPSB7IDB4NDAwMDAwMCwgMHgyMDAwMDAwLCAweDEwMDAwMDAsIDB4MDgwMDAwMCwgMHgwNDAwMDAwLCAweDAyMDAwMDAsIDB4MDEwMDAwMCwgMHgwMCB9OwotCWludCBpOwotCi0JaWYgKCEoKmhlYWQpKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZShoZWFkKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAoc29ydF9ieV9tYXhfc2l6ZShoZWFkKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlmb3IgKG1heCA9ICpoZWFkO21heDsgbWF4ID0gbWF4LT5uZXh0KSB7Ci0KLQkJLyogSWYgbm90IGJpZyBlbm91Z2ggd2UgY291bGQgcHJvYmFibHkganVzdCBiYWlsLCAKLQkJICAgaW5zdGVhZCB3ZSdsbCBjb250aW51ZSB0byB0aGUgbmV4dC4gKi8KLQkJaWYgKG1heC0+bGVuZ3RoIDwgc2l6ZSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChtYXgtPmJhc2UgJiAoc2l6ZSAtIDEpKSB7Ci0JCQkvKiB0aGlzIG9uZSBpc24ndCBiYXNlIGFsaWduZWQgcHJvcGVybHkKLQkJCSAgIHNvIHdlJ2xsIG1ha2UgYSBuZXcgZW50cnkgYW5kIHNwbGl0IGl0IHVwICovCi0JCQl0ZW1wX2R3b3JkID0gKG1heC0+YmFzZSB8IChzaXplLTEpKSArIDE7Ci0KLQkJCS8qIFNob3J0IGNpcmN1aXQgaWYgYWRqdXN0ZWQgc2l6ZSBpcyB0b28gc21hbGwgKi8KLQkJCWlmICgobWF4LT5sZW5ndGggLSAodGVtcF9kd29yZCAtIG1heC0+YmFzZSkpIDwgc2l6ZSkKLQkJCQljb250aW51ZTsKLQotCQkJc3BsaXRfbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLAotCQkJCQkJR0ZQX0tFUk5FTCk7Ci0KLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gTlVMTDsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IG1heC0+YmFzZTsKLQkJCXNwbGl0X25vZGUtPmxlbmd0aCA9IHRlbXBfZHdvcmQgLSBtYXgtPmJhc2U7Ci0JCQltYXgtPmJhc2UgPSB0ZW1wX2R3b3JkOwotCQkJbWF4LT5sZW5ndGggLT0gc3BsaXRfbm9kZS0+bGVuZ3RoOwotCi0JCQkvKiBQdXQgaXQgbmV4dCBpbiB0aGUgbGlzdCAqLwotCQkJc3BsaXRfbm9kZS0+bmV4dCA9IG1heC0+bmV4dDsKLQkJCW1heC0+bmV4dCA9IHNwbGl0X25vZGU7Ci0JCX0KLQotCQlpZiAoKG1heC0+YmFzZSArIG1heC0+bGVuZ3RoKSAmIChzaXplIC0gMSkpIHsKLQkJCS8qIHRoaXMgb25lIGlzbid0IGVuZCBhbGlnbmVkIHByb3Blcmx5IGF0IHRoZSB0b3AKLQkJCSAgIHNvIHdlJ2xsIG1ha2UgYSBuZXcgZW50cnkgYW5kIHNwbGl0IGl0IHVwICovCi0JCQlzcGxpdF9ub2RlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSksCi0JCQkJCQlHRlBfS0VSTkVMKTsKLQotCQkJaWYgKCFzcGxpdF9ub2RlKQotCQkJCXJldHVybiBOVUxMOwotCQkJdGVtcF9kd29yZCA9ICgobWF4LT5iYXNlICsgbWF4LT5sZW5ndGgpICYgfihzaXplIC0gMSkpOwotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IHRlbXBfZHdvcmQ7Ci0JCQlzcGxpdF9ub2RlLT5sZW5ndGggPSBtYXgtPmxlbmd0aCArIG1heC0+YmFzZQotCQkJCQkgICAgIC0gc3BsaXRfbm9kZS0+YmFzZTsKLQkJCW1heC0+bGVuZ3RoIC09IHNwbGl0X25vZGUtPmxlbmd0aDsKLQotCQkJLyogUHV0IGl0IGluIHRoZSBsaXN0ICovCi0JCQlzcGxpdF9ub2RlLT5uZXh0ID0gbWF4LT5uZXh0OwotCQkJbWF4LT5uZXh0ID0gc3BsaXRfbm9kZTsKLQkJfQotCi0JCS8qIE1ha2Ugc3VyZSBpdCBkaWRuJ3Qgc2hyaW5rIHRvbyBtdWNoIHdoZW4gd2UgYWxpZ25lZCBpdCAqLwotCQlpZiAobWF4LT5sZW5ndGggPCBzaXplKQotCQkJY29udGludWU7Ci0KLQkJZm9yICggaSA9IDA7IG1heF9zaXplW2ldID4gc2l6ZTsgaSsrKSB7Ci0JCQlpZiAobWF4LT5sZW5ndGggPiBtYXhfc2l6ZVtpXSkgewotCQkJCXNwbGl0X25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwKLQkJCQkJCQlHRlBfS0VSTkVMKTsKLQkJCQlpZiAoIXNwbGl0X25vZGUpCi0JCQkJCWJyZWFrOwkvKiByZXR1cm4gTlVMTDsgKi8KLQkJCQlzcGxpdF9ub2RlLT5iYXNlID0gbWF4LT5iYXNlICsgbWF4X3NpemVbaV07Ci0JCQkJc3BsaXRfbm9kZS0+bGVuZ3RoID0gbWF4LT5sZW5ndGggLSBtYXhfc2l6ZVtpXTsKLQkJCQltYXgtPmxlbmd0aCA9IG1heF9zaXplW2ldOwotCQkJCS8qIFB1dCBpdCBuZXh0IGluIHRoZSBsaXN0ICovCi0JCQkJc3BsaXRfbm9kZS0+bmV4dCA9IG1heC0+bmV4dDsKLQkJCQltYXgtPm5leHQgPSBzcGxpdF9ub2RlOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJLyogTm93IHRha2UgaXQgb3V0IG9mIHRoZSBsaXN0ICovCi0JCXRlbXAgPSAoc3RydWN0IHBjaV9yZXNvdXJjZSopICpoZWFkOwotCQlpZiAodGVtcCA9PSBtYXgpIHsKLQkJCSpoZWFkID0gbWF4LT5uZXh0OwotCQl9IGVsc2UgewotCQkJd2hpbGUgKHRlbXAgJiYgdGVtcC0+bmV4dCAhPSBtYXgpIHsKLQkJCQl0ZW1wID0gdGVtcC0+bmV4dDsKLQkJCX0KLQotCQkJdGVtcC0+bmV4dCA9IG1heC0+bmV4dDsKLQkJfQotCi0JCW1heC0+bmV4dCA9IE5VTEw7Ci0JCXJldHVybiBtYXg7Ci0JfQotCi0JLyogSWYgd2UgZ2V0IGhlcmUsIHdlIGNvdWxkbid0IGZpbmQgb25lICovCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLQotLyoKLSAqIGdldF9yZXNvdXJjZQotICoKLSAqIHRoaXMgZnVuY3Rpb24gc29ydHMgdGhlIHJlc291cmNlIGxpc3QgYnkgc2l6ZSBhbmQgdGhlbgotICogcmV0dXJucyB0aGUgZmlyc3Qgbm9kZSBvZiAic2l6ZSIgbGVuZ3RoLiAgSWYgaXQgZmluZHMgYSBub2RlCi0gKiBsYXJnZXIgdGhhbiAic2l6ZSIgaXQgd2lsbCBzcGxpdCBpdCB1cC4KLSAqCi0gKiBzaXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28uCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX3Jlc291cmNlICpnZXRfcmVzb3VyY2Uoc3RydWN0IHBjaV9yZXNvdXJjZSAqKmhlYWQsIHUzMiBzaXplKQotewotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnByZXZub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm5vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqc3BsaXRfbm9kZTsKLQl1MzIgdGVtcF9kd29yZDsKLQotCWlmICghKCpoZWFkKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAoIHBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKGhlYWQpICkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAoIHNvcnRfYnlfc2l6ZShoZWFkKSApCi0JCXJldHVybiBOVUxMOwotCi0JZm9yIChub2RlID0gKmhlYWQ7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0KSB7Ci0JCWRiZygiJXM6IHJlcV9zaXplID0weCV4IG5vZGU9JXAsIGJhc2U9MHgleCwgbGVuZ3RoPTB4JXhcbiIsCi0JCSAgICBfX0ZVTkNUSU9OX18sIHNpemUsIG5vZGUsIG5vZGUtPmJhc2UsIG5vZGUtPmxlbmd0aCk7Ci0JCWlmIChub2RlLT5sZW5ndGggPCBzaXplKQotCQkJY29udGludWU7Ci0KLQkJaWYgKG5vZGUtPmJhc2UgJiAoc2l6ZSAtIDEpKSB7Ci0JCQlkYmcoIiVzOiBub3QgYWxpZ25lZFxuIiwgX19GVU5DVElPTl9fKTsKLQkJCS8qIHRoaXMgb25lIGlzbid0IGJhc2UgYWxpZ25lZCBwcm9wZXJseQotCQkJICAgc28gd2UnbGwgbWFrZSBhIG5ldyBlbnRyeSBhbmQgc3BsaXQgaXQgdXAgKi8KLQkJCXRlbXBfZHdvcmQgPSAobm9kZS0+YmFzZSB8IChzaXplLTEpKSArIDE7Ci0KLQkJCS8qIFNob3J0IGNpcmN1aXQgaWYgYWRqdXN0ZWQgc2l6ZSBpcyB0b28gc21hbGwgKi8KLQkJCWlmICgobm9kZS0+bGVuZ3RoIC0gKHRlbXBfZHdvcmQgLSBub2RlLT5iYXNlKSkgPCBzaXplKQotCQkJCWNvbnRpbnVlOwotCi0JCQlzcGxpdF9ub2RlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSksCi0JCQkJCQlHRlBfS0VSTkVMKTsKLQotCQkJaWYgKCFzcGxpdF9ub2RlKQotCQkJCXJldHVybiBOVUxMOwotCi0JCQlzcGxpdF9ub2RlLT5iYXNlID0gbm9kZS0+YmFzZTsKLQkJCXNwbGl0X25vZGUtPmxlbmd0aCA9IHRlbXBfZHdvcmQgLSBub2RlLT5iYXNlOwotCQkJbm9kZS0+YmFzZSA9IHRlbXBfZHdvcmQ7Ci0JCQlub2RlLT5sZW5ndGggLT0gc3BsaXRfbm9kZS0+bGVuZ3RoOwotCi0JCQkvKiBQdXQgaXQgaW4gdGhlIGxpc3QgKi8KLQkJCXNwbGl0X25vZGUtPm5leHQgPSBub2RlLT5uZXh0OwotCQkJbm9kZS0+bmV4dCA9IHNwbGl0X25vZGU7Ci0JCX0gLyogRW5kIG9mIG5vbi1hbGlnbmVkIGJhc2UgKi8KLQotCQkvKiBEb24ndCBuZWVkIHRvIGNoZWNrIGlmIHRvbyBzbWFsbCBzaW5jZSB3ZSBhbHJlYWR5IGRpZCAqLwotCQlpZiAobm9kZS0+bGVuZ3RoID4gc2l6ZSkgewotCQkJZGJnKCIlczogdG9vIGJpZ1xuIiwgX19GVU5DVElPTl9fKTsKLQkJCS8qIHRoaXMgb25lIGlzIGxvbmdlciB0aGFuIHdlIG5lZWQKLQkJCSAgIHNvIHdlJ2xsIG1ha2UgYSBuZXcgZW50cnkgYW5kIHNwbGl0IGl0IHVwICovCi0JCQlzcGxpdF9ub2RlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSksCi0JCQkJCQlHRlBfS0VSTkVMKTsKLQotCQkJaWYgKCFzcGxpdF9ub2RlKQotCQkJCXJldHVybiBOVUxMOwotCi0JCQlzcGxpdF9ub2RlLT5iYXNlID0gbm9kZS0+YmFzZSArIHNpemU7Ci0JCQlzcGxpdF9ub2RlLT5sZW5ndGggPSBub2RlLT5sZW5ndGggLSBzaXplOwotCQkJbm9kZS0+bGVuZ3RoID0gc2l6ZTsKLQotCQkJLyogUHV0IGl0IGluIHRoZSBsaXN0ICovCi0JCQlzcGxpdF9ub2RlLT5uZXh0ID0gbm9kZS0+bmV4dDsKLQkJCW5vZGUtPm5leHQgPSBzcGxpdF9ub2RlOwotCQl9ICAvKiBFbmQgb2YgdG9vIGJpZyBvbiB0b3AgZW5kICovCi0KLQkJZGJnKCIlczogZ290IG9uZSEhIVxuIiwgX19GVU5DVElPTl9fKTsKLQkJLyogSWYgd2UgZ290IGhlcmUsIHRoZW4gaXQgaXMgdGhlIHJpZ2h0IHNpemUKLQkJICAgTm93IHRha2UgaXQgb3V0IG9mIHRoZSBsaXN0ICovCi0JCWlmICgqaGVhZCA9PSBub2RlKSB7Ci0JCQkqaGVhZCA9IG5vZGUtPm5leHQ7Ci0JCX0gZWxzZSB7Ci0JCQlwcmV2bm9kZSA9ICpoZWFkOwotCQkJd2hpbGUgKHByZXZub2RlLT5uZXh0ICE9IG5vZGUpCi0JCQkJcHJldm5vZGUgPSBwcmV2bm9kZS0+bmV4dDsKLQotCQkJcHJldm5vZGUtPm5leHQgPSBub2RlLT5uZXh0OwotCQl9Ci0JCW5vZGUtPm5leHQgPSBOVUxMOwotCQkvKiBTdG9wIGxvb3BpbmcgKi8KLQkJYnJlYWs7Ci0JfQotCXJldHVybiBub2RlOwotfQotCi0KLS8qCi0gKiBwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZQotICoKLSAqIFNvcnRzIGFsbCBvZiB0aGUgbm9kZXMgaW4gdGhlIGxpc3QgaW4gYXNjZW5kaW5nIG9yZGVyIGJ5Ci0gKiB0aGVpciBiYXNlIGFkZHJlc3Nlcy4gIEFsc28gZG9lcyBnYXJiYWdlIGNvbGxlY3Rpb24gYnkKLSAqIGNvbWJpbmluZyBhZGphY2VudCBub2Rlcy4KLSAqCi0gKiByZXR1cm5zIDAgaWYgc3VjY2VzcwotICovCi1pbnQgcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoc3RydWN0IHBjaV9yZXNvdXJjZSAqKmhlYWQpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqbm9kZTE7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqbm9kZTI7Ci0JaW50IG91dF9vZl9vcmRlciA9IDE7Ci0KLQlkYmcoIiVzOiBoZWFkID0gJXAsICpoZWFkID0gJXBcbiIsIF9fRlVOQ1RJT05fXywgaGVhZCwgKmhlYWQpOwotCi0JaWYgKCEoKmhlYWQpKQotCQlyZXR1cm4gMTsKLQotCWRiZygiKmhlYWQtPm5leHQgPSAlcFxuIiwoKmhlYWQpLT5uZXh0KTsKLQotCWlmICghKCpoZWFkKS0+bmV4dCkKLQkJcmV0dXJuIDA7CS8qIG9ubHkgb25lIGl0ZW0gb24gdGhlIGxpc3QsIGFscmVhZHkgc29ydGVkISAqLwotCi0JZGJnKCIqaGVhZC0+YmFzZSA9IDB4JXhcbiIsKCpoZWFkKS0+YmFzZSk7Ci0JZGJnKCIqaGVhZC0+bmV4dC0+YmFzZSA9IDB4JXhcbiIsKCpoZWFkKS0+bmV4dC0+YmFzZSk7Ci0Jd2hpbGUgKG91dF9vZl9vcmRlcikgewotCQlvdXRfb2Zfb3JkZXIgPSAwOwotCi0JCS8qIFNwZWNpYWwgY2FzZSBmb3Igc3dhcHBpbmcgbGlzdCBoZWFkICovCi0JCWlmICgoKCpoZWFkKS0+bmV4dCkgJiYKLQkJICAgICgoKmhlYWQpLT5iYXNlID4gKCpoZWFkKS0+bmV4dC0+YmFzZSkpIHsKLQkJCW5vZGUxID0gKmhlYWQ7Ci0JCQkoKmhlYWQpID0gKCpoZWFkKS0+bmV4dDsKLQkJCW5vZGUxLT5uZXh0ID0gKCpoZWFkKS0+bmV4dDsKLQkJCSgqaGVhZCktPm5leHQgPSBub2RlMTsKLQkJCW91dF9vZl9vcmRlcisrOwotCQl9Ci0KLQkJbm9kZTEgPSAoKmhlYWQpOwotCi0JCXdoaWxlIChub2RlMS0+bmV4dCAmJiBub2RlMS0+bmV4dC0+bmV4dCkgewotCQkJaWYgKG5vZGUxLT5uZXh0LT5iYXNlID4gbm9kZTEtPm5leHQtPm5leHQtPmJhc2UpIHsKLQkJCQlvdXRfb2Zfb3JkZXIrKzsKLQkJCQlub2RlMiA9IG5vZGUxLT5uZXh0OwotCQkJCW5vZGUxLT5uZXh0ID0gbm9kZTEtPm5leHQtPm5leHQ7Ci0JCQkJbm9kZTEgPSBub2RlMS0+bmV4dDsKLQkJCQlub2RlMi0+bmV4dCA9IG5vZGUxLT5uZXh0OwotCQkJCW5vZGUxLT5uZXh0ID0gbm9kZTI7Ci0JCQl9IGVsc2UKLQkJCQlub2RlMSA9IG5vZGUxLT5uZXh0OwotCQl9Ci0JfSAgLyogRW5kIG9mIG91dF9vZl9vcmRlciBsb29wICovCi0KLQlub2RlMSA9ICpoZWFkOwotCi0Jd2hpbGUgKG5vZGUxICYmIG5vZGUxLT5uZXh0KSB7Ci0JCWlmICgobm9kZTEtPmJhc2UgKyBub2RlMS0+bGVuZ3RoKSA9PSBub2RlMS0+bmV4dC0+YmFzZSkgewotCQkJLyogQ29tYmluZSAqLwotCQkJZGJnKCI4Li5cbiIpOwotCQkJbm9kZTEtPmxlbmd0aCArPSBub2RlMS0+bmV4dC0+bGVuZ3RoOwotCQkJbm9kZTIgPSBub2RlMS0+bmV4dDsKLQkJCW5vZGUxLT5uZXh0ID0gbm9kZTEtPm5leHQtPm5leHQ7Ci0JCQlrZnJlZShub2RlMik7Ci0JCX0gZWxzZQotCQkJbm9kZTEgPSBub2RlMS0+bmV4dDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKioKLSAqIHBjaWVocF9zbG90X2NyZWF0ZSAtIENyZWF0ZXMgYSBub2RlIGFuZCBhZGRzIGl0IHRvIHRoZSBwcm9wZXIgYnVzLgotICogQGJ1c251bWJlciAtIGJ1cyB3aGVyZSBuZXcgbm9kZSBpcyB0byBiZSBsb2NhdGVkCi0gKgotICogUmV0dXJucyBwb2ludGVyIHRvIHRoZSBuZXcgbm9kZSBvciBOVUxMIGlmIHVuc3VjY2Vzc2Z1bAotICovCi1zdHJ1Y3QgcGNpX2Z1bmMgKnBjaWVocF9zbG90X2NyZWF0ZSh1OCBidXNudW1iZXIpCi17Ci0Jc3RydWN0IHBjaV9mdW5jICpuZXdfc2xvdDsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKm5leHQ7Ci0JZGJnKCIlczogYnVzbnVtYmVyICV4XG4iLCBfX0ZVTkNUSU9OX18sIGJ1c251bWJlcik7Ci0JbmV3X3Nsb3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX2Z1bmMpLCBHRlBfS0VSTkVMKTsKLQotCWlmIChuZXdfc2xvdCA9PSBOVUxMKQotCQlyZXR1cm4gbmV3X3Nsb3Q7Ci0KLQltZW1zZXQobmV3X3Nsb3QsIDAsIHNpemVvZihzdHJ1Y3QgcGNpX2Z1bmMpKTsKLQotCW5ld19zbG90LT5uZXh0ID0gTlVMTDsKLQluZXdfc2xvdC0+Y29uZmlndXJlZCA9IDE7Ci0KLQlpZiAocGNpZWhwX3Nsb3RfbGlzdFtidXNudW1iZXJdID09IE5VTEwpIHsKLQkJcGNpZWhwX3Nsb3RfbGlzdFtidXNudW1iZXJdID0gbmV3X3Nsb3Q7Ci0JfSBlbHNlIHsKLQkJbmV4dCA9IHBjaWVocF9zbG90X2xpc3RbYnVzbnVtYmVyXTsKLQkJd2hpbGUgKG5leHQtPm5leHQgIT0gTlVMTCkKLQkJCW5leHQgPSBuZXh0LT5uZXh0OwotCQluZXh0LT5uZXh0ID0gbmV3X3Nsb3Q7Ci0JfQotCXJldHVybiBuZXdfc2xvdDsKLX0KLQotCi0vKioKLSAqIHNsb3RfcmVtb3ZlIC0gUmVtb3ZlcyBhIG5vZGUgZnJvbSB0aGUgbGlua2VkIGxpc3Qgb2Ygc2xvdHMuCi0gKiBAb2xkX3Nsb3Q6IHNsb3QgdG8gcmVtb3ZlCi0gKgotICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsICEwIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGludCBzbG90X3JlbW92ZShzdHJ1Y3QgcGNpX2Z1bmMgKiBvbGRfc2xvdCkKLXsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKm5leHQ7Ci0KLQlpZiAob2xkX3Nsb3QgPT0gTlVMTCkKLQkJcmV0dXJuIDE7Ci0KLQluZXh0ID0gcGNpZWhwX3Nsb3RfbGlzdFtvbGRfc2xvdC0+YnVzXTsKLQotCWlmIChuZXh0ID09IE5VTEwpCi0JCXJldHVybiAxOwotCi0JaWYgKG5leHQgPT0gb2xkX3Nsb3QpIHsKLQkJcGNpZWhwX3Nsb3RfbGlzdFtvbGRfc2xvdC0+YnVzXSA9IG9sZF9zbG90LT5uZXh0OwotCQlwY2llaHBfZGVzdHJveV9ib2FyZF9yZXNvdXJjZXMob2xkX3Nsb3QpOwotCQlrZnJlZShvbGRfc2xvdCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXdoaWxlICgobmV4dC0+bmV4dCAhPSBvbGRfc2xvdCkgJiYgKG5leHQtPm5leHQgIT0gTlVMTCkpIHsKLQkJbmV4dCA9IG5leHQtPm5leHQ7Ci0JfQotCi0JaWYgKG5leHQtPm5leHQgPT0gb2xkX3Nsb3QpIHsKLQkJbmV4dC0+bmV4dCA9IG9sZF9zbG90LT5uZXh0OwotCQlwY2llaHBfZGVzdHJveV9ib2FyZF9yZXNvdXJjZXMob2xkX3Nsb3QpOwotCQlrZnJlZShvbGRfc2xvdCk7Ci0JCXJldHVybiAwOwotCX0gZWxzZQotCQlyZXR1cm4gMjsKLX0KLQotCi0vKioKLSAqIGJyaWRnZV9zbG90X3JlbW92ZSAtIFJlbW92ZXMgYSBub2RlIGZyb20gdGhlIGxpbmtlZCBsaXN0IG9mIHNsb3RzLgotICogQGJyaWRnZTogYnJpZGdlIHRvIHJlbW92ZQotICoKLSAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCAhMCBvdGhlcndpc2UuCi0gKi8KLXN0YXRpYyBpbnQgYnJpZGdlX3Nsb3RfcmVtb3ZlKHN0cnVjdCBwY2lfZnVuYyAqYnJpZGdlKQotewotCXU4IHN1Ym9yZGluYXRlQnVzLCBzZWNvbmRhcnlCdXM7Ci0JdTggdGVtcEJ1czsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKm5leHQ7Ci0KLQlpZiAoYnJpZGdlID09IE5VTEwpCi0JCXJldHVybiAxOwotCi0Jc2Vjb25kYXJ5QnVzID0gKGJyaWRnZS0+Y29uZmlnX3NwYWNlWzB4MDZdID4+IDgpICYgMHhGRjsKLQlzdWJvcmRpbmF0ZUJ1cyA9IChicmlkZ2UtPmNvbmZpZ19zcGFjZVsweDA2XSA+PiAxNikgJiAweEZGOwotCi0JZm9yICh0ZW1wQnVzID0gc2Vjb25kYXJ5QnVzOyB0ZW1wQnVzIDw9IHN1Ym9yZGluYXRlQnVzOyB0ZW1wQnVzKyspIHsKLQkJbmV4dCA9IHBjaWVocF9zbG90X2xpc3RbdGVtcEJ1c107Ci0KLQkJd2hpbGUgKCFzbG90X3JlbW92ZShuZXh0KSkgewotCQkJbmV4dCA9IHBjaWVocF9zbG90X2xpc3RbdGVtcEJ1c107Ci0JCX0KLQl9Ci0KLQluZXh0ID0gcGNpZWhwX3Nsb3RfbGlzdFticmlkZ2UtPmJ1c107Ci0KLQlpZiAobmV4dCA9PSBOVUxMKSB7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmIChuZXh0ID09IGJyaWRnZSkgewotCQlwY2llaHBfc2xvdF9saXN0W2JyaWRnZS0+YnVzXSA9IGJyaWRnZS0+bmV4dDsKLQkJa2ZyZWUoYnJpZGdlKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jd2hpbGUgKChuZXh0LT5uZXh0ICE9IGJyaWRnZSkgJiYgKG5leHQtPm5leHQgIT0gTlVMTCkpIHsKLQkJbmV4dCA9IG5leHQtPm5leHQ7Ci0JfQotCi0JaWYgKG5leHQtPm5leHQgPT0gYnJpZGdlKSB7Ci0JCW5leHQtPm5leHQgPSBicmlkZ2UtPm5leHQ7Ci0JCWtmcmVlKGJyaWRnZSk7Ci0JCXJldHVybiAwOwotCX0gZWxzZQotCQlyZXR1cm4gMjsKLX0KLQotCi0vKioKLSAqIHBjaWVocF9zbG90X2ZpbmQgLSBMb29rcyBmb3IgYSBub2RlIGJ5IGJ1cywgYW5kIGRldmljZSwgbXVsdGlwbGUgZnVuY3Rpb25zIGFjY2Vzc2VkCi0gKiBAYnVzOiBidXMgdG8gZmluZAotICogQGRldmljZTogZGV2aWNlIHRvIGZpbmQKLSAqIEBpbmRleDogaXMgMCBmb3IgZmlyc3QgZnVuY3Rpb24gZm91bmQsIDEgZm9yIHRoZSBzZWNvbmQuLi4KLSAqCi0gKiBSZXR1cm5zIHBvaW50ZXIgdG8gdGhlIG5vZGUgaWYgc3VjY2Vzc2Z1bCwgJU5VTEwgb3RoZXJ3aXNlLgotICovCi1zdHJ1Y3QgcGNpX2Z1bmMgKnBjaWVocF9zbG90X2ZpbmQodTggYnVzLCB1OCBkZXZpY2UsIHU4IGluZGV4KQotewotCWludCBmb3VuZCA9IC0xOwotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYzsKLQotCWZ1bmMgPSBwY2llaHBfc2xvdF9saXN0W2J1c107Ci0JZGJnKCIlczogYnVzICV4IGRldmljZSAleCBpbmRleCAleFxuIiwKLQkJX19GVU5DVElPTl9fLCBidXMsIGRldmljZSwgaW5kZXgpOwotCWlmIChmdW5jICE9IE5VTEwpIHsKLQkJZGJnKCIlczogZnVuYy0+IGJ1cyAleCBkZXZpY2UgJXggZnVuY3Rpb24gJXggcGNpX2RldiAlcFxuIiwKLQkJCV9fRlVOQ1RJT05fXywgZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uLAotCQkJZnVuYy0+cGNpX2Rldik7Ci0JfSBlbHNlCi0JCWRiZygiJXM6IGZ1bmMgPT0gTlVMTFxuIiwgX19GVU5DVElPTl9fKTsKLQotCWlmICgoZnVuYyA9PSBOVUxMKSB8fCAoKGZ1bmMtPmRldmljZSA9PSBkZXZpY2UpICYmIChpbmRleCA9PSAwKSkpCi0JCXJldHVybiBmdW5jOwotCi0JaWYgKGZ1bmMtPmRldmljZSA9PSBkZXZpY2UpCi0JCWZvdW5kKys7Ci0KLQl3aGlsZSAoZnVuYy0+bmV4dCAhPSBOVUxMKSB7Ci0JCWZ1bmMgPSBmdW5jLT5uZXh0OwotCi0JCWRiZygiJXM6IEluIHdoaWxlIGxvb3AsIGZ1bmMtPiBidXMgJXggZGV2aWNlICV4IGZ1bmN0aW9uICV4IHBjaV9kZXYgJXBcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIGZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbiwKLQkJCWZ1bmMtPnBjaV9kZXYpOwotCQlpZiAoZnVuYy0+ZGV2aWNlID09IGRldmljZSkKLQkJCWZvdW5kKys7Ci0JCWRiZygiJXM6IHdoaWxlIGxvb3AsIGZvdW5kICVkLCBpbmRleCAlZFxuIiwgX19GVU5DVElPTl9fLAotCQkJZm91bmQsIGluZGV4KTsKLQotCQlpZiAoKGZvdW5kID09IGluZGV4KSB8fCAoZnVuYy0+ZnVuY3Rpb24gPT0gaW5kZXgpKSB7Ci0JCQlkYmcoIiVzOiBGb3VuZCBidXMgJXggZGV2ICV4IGZ1bmMgJXhcbiIsIF9fRlVOQ1RJT05fXywKLQkJCQkJZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQkJCXJldHVybiBmdW5jOwotCQl9Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbnQgaXNfYnJpZGdlKHN0cnVjdCBwY2lfZnVuYyAqIGZ1bmMpCi17Ci0JLyogQ2hlY2sgdGhlIGhlYWRlciB0eXBlICovCi0JaWYgKCgoZnVuYy0+Y29uZmlnX3NwYWNlWzB4MDNdID4+IDE2KSAmIDB4RkYpID09IDB4MDEpCi0JCXJldHVybiAxOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLQogLyogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBjb25zdGl0dXRlIHRoZSBidWxrIG9mIHRoZSAKICAgIGhvdHBsdWcgY29udHJvbGxlciBsb2dpYwogICovCkBAIC0xMTAwLDIwICsyNjksMTcgQEAKICAqIENvbmZpZ3VyZXMgYm9hcmQKICAqCiAgKi8KLXN0YXRpYyB1MzIgYm9hcmRfYWRkZWQoc3RydWN0IHBjaV9mdW5jICogZnVuYywgc3RydWN0IGNvbnRyb2xsZXIgKiBjdHJsKQorc3RhdGljIGludCBib2FyZF9hZGRlZChzdHJ1Y3Qgc2xvdCAqcF9zbG90KQogewogCXU4IGhwX3Nsb3Q7Ci0JaW50IGluZGV4OwotCXUzMiB0ZW1wX3JlZ2lzdGVyID0gMHhGRkZGRkZGRjsKLQl1MzIgcmMgPSAwOwotCXN0cnVjdCBwY2lfZnVuYyAqbmV3X2Z1bmMgPSBOVUxMOwotCXN0cnVjdCBzbG90ICpwX3Nsb3Q7Ci0Jc3RydWN0IHJlc291cmNlX2xpc3RzIHJlc19saXN0czsKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gcF9zbG90LT5jdHJsOwogCi0JcF9zbG90ID0gcGNpZWhwX2ZpbmRfc2xvdChjdHJsLCBmdW5jLT5kZXZpY2UpOwotCWhwX3Nsb3QgPSBmdW5jLT5kZXZpY2UgLSBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQ7CisJaHBfc2xvdCA9IHBfc2xvdC0+ZGV2aWNlIC0gY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0OwogCi0JZGJnKCIlczogZnVuYy0+ZGV2aWNlLCBzbG90X29mZnNldCwgaHBfc2xvdCA9ICVkLCAlZCAsJWRcbiIsIF9fRlVOQ1RJT05fXywgZnVuYy0+ZGV2aWNlLCBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQsIGhwX3Nsb3QpOworCWRiZygiJXM6IHNsb3QgZGV2aWNlLCBzbG90IG9mZnNldCwgaHAgc2xvdCA9ICVkLCAlZCAsJWRcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHBfc2xvdC0+ZGV2aWNlLAorCQkJY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0LCBocF9zbG90KTsKIAogCS8qIFdhaXQgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gaGFyZHdhcmUgKi8KIAlkb3duKCZjdHJsLT5jcml0X3NlY3QpOwpAQCAtMTE0MSw5ICszMDcsNyBAQAogCXVwKCZjdHJsLT5jcml0X3NlY3QpOwogCiAJLyogV2FpdCBmb3IgfjEgc2Vjb25kICovCi0JZGJnKCIlczogYmVmb3JlIGxvbmdfZGVsYXlcbiIsIF9fRlVOQ1RJT05fXyk7CiAJd2FpdF9mb3JfY3RybF9pcnEgKGN0cmwpOwotCWRiZygiJXM6IGFmdGVybG9uZ19kZWxheVxuIiwgX19GVU5DVElPTl9fKTsKIAogCS8qICBDaGVjayBsaW5rIHRyYWluaW5nIHN0YXR1cyAqLwogCXJjID0gcF9zbG90LT5ocGNfb3BzLT5jaGVja19sbmtfc3RhdHVzKGN0cmwpOyAgCkBAIC0xMTUzLDk4ICszMTcsNDcgQEAKIAkJcmV0dXJuIHJjOwogCX0KIAotCWRiZygiJXM6IGZ1bmMgc3RhdHVzID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgZnVuYy0+c3RhdHVzKTsKKwlkYmcoIiVzOiBzbG90IHN0YXR1cyA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIHBfc2xvdC0+c3RhdHVzKTsKIAogCS8qIENoZWNrIGZvciBhIHBvd2VyIGZhdWx0ICovCi0JaWYgKGZ1bmMtPnN0YXR1cyA9PSAweEZGKSB7CisJaWYgKHBfc2xvdC0+c3RhdHVzID09IDB4RkYpIHsKIAkJLyogcG93ZXIgZmF1bHQgb2NjdXJyZWQsIGJ1dCBpdCB3YXMgYmVuaWduICovCi0JCXRlbXBfcmVnaXN0ZXIgPSAweEZGRkZGRkZGOwotCQlkYmcoIiVzOiB0ZW1wIHJlZ2lzdGVyIHNldCB0byAleCBieSBwb3dlciBmYXVsdFxuIiwgX19GVU5DVElPTl9fLCB0ZW1wX3JlZ2lzdGVyKTsKIAkJcmMgPSBQT1dFUl9GQUlMVVJFOwotCQlmdW5jLT5zdGF0dXMgPSAwOwotCX0gZWxzZSB7Ci0JCS8qIEdldCB2ZW5kb3IvZGV2aWNlIElEIHUzMiAqLwotCQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQgKGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLCBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbiksIAotCQkJUENJX1ZFTkRPUl9JRCwgJnRlbXBfcmVnaXN0ZXIpOwotCQlkYmcoIiVzOiBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkIHJldHVybnMgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmMpOwotCQlkYmcoIiVzOiB0ZW1wX3JlZ2lzdGVyIGlzICV4XG4iLCBfX0ZVTkNUSU9OX18sIHRlbXBfcmVnaXN0ZXIpOwotCi0JCWlmIChyYyAhPSAwKSB7Ci0JCQkvKiBTb21ldGhpbmcncyB3cm9uZyBoZXJlICovCi0JCQl0ZW1wX3JlZ2lzdGVyID0gMHhGRkZGRkZGRjsKLQkJCWRiZygiJXM6IHRlbXAgcmVnaXN0ZXIgc2V0IHRvICV4IGJ5IGVycm9yXG4iLCBfX0ZVTkNUSU9OX18sIHRlbXBfcmVnaXN0ZXIpOwotCQl9Ci0JCS8qIFByZXNldCByZXR1cm4gY29kZS4gIEl0IHdpbGwgYmUgY2hhbmdlZCBsYXRlciBpZiB0aGluZ3MgZ28gb2theS4gKi8KLQkJcmMgPSBOT19BREFQVEVSX1BSRVNFTlQ7CisJCXBfc2xvdC0+c3RhdHVzID0gMDsKKwkJZ290byBlcnJfZXhpdDsKIAl9CiAKLQkvKiBBbGwgRidzIGlzIGFuIGVtcHR5IHNsb3Qgb3IgYW4gaW52YWxpZCBib2FyZCAqLwotCWlmICh0ZW1wX3JlZ2lzdGVyICE9IDB4RkZGRkZGRkYpIHsJICAvKiBDaGVjayBmb3IgYSBib2FyZCBpbiB0aGUgc2xvdCAqLwotCQlyZXNfbGlzdHMuaW9faGVhZCA9IGN0cmwtPmlvX2hlYWQ7Ci0JCXJlc19saXN0cy5tZW1faGVhZCA9IGN0cmwtPm1lbV9oZWFkOwotCQlyZXNfbGlzdHMucF9tZW1faGVhZCA9IGN0cmwtPnBfbWVtX2hlYWQ7Ci0JCXJlc19saXN0cy5idXNfaGVhZCA9IGN0cmwtPmJ1c19oZWFkOwotCQlyZXNfbGlzdHMuaXJxcyA9IE5VTEw7CisJcmMgPSBwY2llaHBfY29uZmlndXJlX2RldmljZShwX3Nsb3QpOworCWlmIChyYykgeworCQllcnIoIkNhbm5vdCBhZGQgZGV2aWNlIDB4JXg6JXhcbiIsIHBfc2xvdC0+YnVzLAorCQkJCXBfc2xvdC0+ZGV2aWNlKTsKKwkJZ290byBlcnJfZXhpdDsKKwl9CiAKLQkJcmMgPSBjb25maWd1cmVfbmV3X2RldmljZShjdHJsLCBmdW5jLCAwLCAmcmVzX2xpc3RzLCAwLCAwKTsKLQkJZGJnKCIlczogYmFjayBmcm9tIGNvbmZpZ3VyZV9uZXdfZGV2aWNlXG4iLCBfX0ZVTkNUSU9OX18pOworCXBfc2xvdC0+c3RhdHVzID0gMDsKIAotCQljdHJsLT5pb19oZWFkID0gcmVzX2xpc3RzLmlvX2hlYWQ7Ci0JCWN0cmwtPm1lbV9oZWFkID0gcmVzX2xpc3RzLm1lbV9oZWFkOwotCQljdHJsLT5wX21lbV9oZWFkID0gcmVzX2xpc3RzLnBfbWVtX2hlYWQ7Ci0JCWN0cmwtPmJ1c19oZWFkID0gcmVzX2xpc3RzLmJ1c19oZWFkOworCS8qCisJICogU29tZSBQQ0kgRXhwcmVzcyByb290IHBvcnRzIHJlcXVpcmUgZml4dXAgYWZ0ZXIgaG90LXBsdWcgb3BlcmF0aW9uLgorCSAqLworCWlmIChwY2llX21jaF9xdWlyaykKKwkJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfZmluYWwsIGN0cmwtPnBjaV9kZXYpOworCWlmIChQV1JfTEVEKGN0cmwtPmN0cmxjYXApKSB7CisJCS8qIFdhaXQgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gaGFyZHdhcmUgKi8KKyAgCQlkb3duKCZjdHJsLT5jcml0X3NlY3QpOwogCi0JCXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCYoY3RybC0+bWVtX2hlYWQpKTsKLQkJcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJihjdHJsLT5wX21lbV9oZWFkKSk7Ci0JCXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCYoY3RybC0+aW9faGVhZCkpOwotCQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmKGN0cmwtPmJ1c19oZWFkKSk7Ci0KLQkJaWYgKHJjKSB7Ci0JCQlzZXRfc2xvdF9vZmYoY3RybCwgcF9zbG90KTsKLQkJCXJldHVybiByYzsKLQkJfQotCQlwY2llaHBfc2F2ZV9zbG90X2NvbmZpZyhjdHJsLCBmdW5jKTsKLQotCQlmdW5jLT5zdGF0dXMgPSAwOwotCQlmdW5jLT5zd2l0Y2hfc2F2ZSA9IDB4MTA7Ci0JCWZ1bmMtPmlzX2FfYm9hcmQgPSAweDAxOwotCi0JCS8qIG5leHQsIHdlIHdpbGwgaW5zdGFudGlhdGUgdGhlIGxpbnV4IHBjaV9kZXYgc3RydWN0dXJlcyAKLQkJICogKHdpdGggYXBwcm9wcmlhdGUgZHJpdmVyIG5vdGlmaWNhdGlvbiwgaWYgYWxyZWFkeSBwcmVzZW50KSAKLQkJICovCi0JCWluZGV4ID0gMDsKLQkJZG8gewotCQkJbmV3X2Z1bmMgPSBwY2llaHBfc2xvdF9maW5kKGN0cmwtPnNsb3RfYnVzLCBmdW5jLT5kZXZpY2UsIGluZGV4KyspOwotCQkJaWYgKG5ld19mdW5jICYmICFuZXdfZnVuYy0+cGNpX2RldikgewotCQkJCWRiZygiJXM6Y2FsbCBwY2lfaHBfY29uZmlndXJlX2RldiwgZnVuYyAleFxuIiwgCi0JCQkJCV9fRlVOQ1RJT05fXywgaW5kZXgpOwotCQkJCXBjaWVocF9jb25maWd1cmVfZGV2aWNlKGN0cmwsIG5ld19mdW5jKTsKLQkJCX0KLQkJfSB3aGlsZSAobmV3X2Z1bmMpOwotCi0gCQkvKiAKLSAJCSAqIFNvbWUgUENJIEV4cHJlc3Mgcm9vdCBwb3J0cyByZXF1aXJlIGZpeHVwIGFmdGVyIGhvdC1wbHVnIG9wZXJhdGlvbi4KLSAJCSAqLwotIAkJaWYgKHBjaWVfbWNoX3F1aXJrKQotIAkJCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX2ZpbmFsLCBjdHJsLT5wY2lfZGV2KTsKLSAKLSAgCQlpZiAoUFdSX0xFRChjdHJsLT5jdHJsY2FwKSkgewotICAJCQkvKiBXYWl0IGZvciBleGNsdXNpdmUgYWNjZXNzIHRvIGhhcmR3YXJlICovCi0gIAkJCWRvd24oJmN0cmwtPmNyaXRfc2VjdCk7Ci0gICAKLSAgCQkJcF9zbG90LT5ocGNfb3BzLT5ncmVlbl9sZWRfb24ocF9zbG90KTsKKyAgCQlwX3Nsb3QtPmhwY19vcHMtPmdyZWVuX2xlZF9vbihwX3Nsb3QpOwogICAKLSAgCQkJLyogV2FpdCBmb3IgdGhlIGNvbW1hbmQgdG8gY29tcGxldGUgKi8KLSAgCQkJd2FpdF9mb3JfY3RybF9pcnEgKGN0cmwpOworICAJCS8qIFdhaXQgZm9yIHRoZSBjb21tYW5kIHRvIGNvbXBsZXRlICovCisgIAkJd2FpdF9mb3JfY3RybF9pcnEgKGN0cmwpOwogICAJCi0gIAkJCS8qIERvbmUgd2l0aCBleGNsdXNpdmUgaGFyZHdhcmUgYWNjZXNzICovCi0gIAkJCXVwKCZjdHJsLT5jcml0X3NlY3QpOwotICAJCX0KLQl9IGVsc2UgewotCQlzZXRfc2xvdF9vZmYoY3RybCwgcF9zbG90KTsKLQkJcmV0dXJuIC0xOwotCX0KKyAgCQkvKiBEb25lIHdpdGggZXhjbHVzaXZlIGhhcmR3YXJlIGFjY2VzcyAqLworICAJCXVwKCZjdHJsLT5jcml0X3NlY3QpOworICAJfQogCXJldHVybiAwOworCitlcnJfZXhpdDoKKwlzZXRfc2xvdF9vZmYoY3RybCwgcF9zbG90KTsKKwlyZXR1cm4gLTE7CiB9CiAKIApAQCAtMTI1Miw1NSArMzY1LDI1IEBACiAgKiByZW1vdmVfYm9hcmQgLSBUdXJucyBvZmYgc2xvdCBhbmQgTEVEJ3MKICAqCiAgKi8KLXN0YXRpYyB1MzIgcmVtb3ZlX2JvYXJkKHN0cnVjdCBwY2lfZnVuYyAqZnVuYywgc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCitzdGF0aWMgaW50IHJlbW92ZV9ib2FyZChzdHJ1Y3Qgc2xvdCAqcF9zbG90KQogewotCWludCBpbmRleDsKLQl1OCBza2lwID0gMDsKIAl1OCBkZXZpY2U7CiAJdTggaHBfc2xvdDsKLQl1MzIgcmM7Ci0Jc3RydWN0IHJlc291cmNlX2xpc3RzIHJlc19saXN0czsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKnRlbXBfZnVuYzsKLQlzdHJ1Y3Qgc2xvdCAqcF9zbG90OworCWludCByYzsKKwlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHBfc2xvdC0+Y3RybDsKIAotCWlmIChmdW5jID09IE5VTEwpCisJaWYgKHBjaWVocF91bmNvbmZpZ3VyZV9kZXZpY2UocF9zbG90KSkKIAkJcmV0dXJuIDE7CiAKLQlpZiAocGNpZWhwX3VuY29uZmlndXJlX2RldmljZShmdW5jKSkKLQkJcmV0dXJuIDE7CisJZGV2aWNlID0gcF9zbG90LT5kZXZpY2U7CiAKLQlkZXZpY2UgPSBmdW5jLT5kZXZpY2U7Ci0KLQlocF9zbG90ID0gZnVuYy0+ZGV2aWNlIC0gY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0OworCWhwX3Nsb3QgPSBwX3Nsb3QtPmRldmljZSAtIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldDsKIAlwX3Nsb3QgPSBwY2llaHBfZmluZF9zbG90KGN0cmwsIGhwX3Nsb3QgKyBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQpOwogCiAJZGJnKCJJbiAlcywgaHBfc2xvdCA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGhwX3Nsb3QpOwogCi0JaWYgKChjdHJsLT5hZGRfc3VwcG9ydCkgJiYKLQkJIShmdW5jLT5idXNfaGVhZCB8fCBmdW5jLT5tZW1faGVhZCB8fCBmdW5jLT5wX21lbV9oZWFkIHx8IGZ1bmMtPmlvX2hlYWQpKSB7Ci0JCS8qIEhlcmUgd2UgY2hlY2sgdG8gc2VlIGlmIHdlJ3ZlIHNhdmVkIGFueSBvZiB0aGUgYm9hcmQncwotCQkgKiByZXNvdXJjZXMgYWxyZWFkeS4gIElmIHNvLCB3ZSdsbCBza2lwIHRoZSBhdHRlbXB0IHRvCi0JCSAqIGRldGVybWluZSB3aGF0J3MgYmVpbmcgdXNlZC4KLQkJICovCi0JCWluZGV4ID0gMDsKLQotCQl0ZW1wX2Z1bmMgPSBmdW5jOwotCi0JCXdoaWxlICgodGVtcF9mdW5jID0gcGNpZWhwX3Nsb3RfZmluZCh0ZW1wX2Z1bmMtPmJ1cywgdGVtcF9mdW5jLT5kZXZpY2UsIGluZGV4KyspKSkgewotCQkJaWYgKHRlbXBfZnVuYy0+YnVzX2hlYWQgfHwgdGVtcF9mdW5jLT5tZW1faGVhZAotCQkJICAgIHx8IHRlbXBfZnVuYy0+cF9tZW1faGVhZCB8fCB0ZW1wX2Z1bmMtPmlvX2hlYWQpIHsKLQkJCQlza2lwID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWlmICghc2tpcCkKLQkJCXJjID0gcGNpZWhwX3NhdmVfdXNlZF9yZXNvdXJjZXMoY3RybCwgZnVuYywgRElTQUJMRV9DQVJEKTsKLQl9CiAJLyogQ2hhbmdlIHN0YXR1cyB0byBzaHV0ZG93biAqLwotCWlmIChmdW5jLT5pc19hX2JvYXJkKQotCQlmdW5jLT5zdGF0dXMgPSAweDAxOwotCWZ1bmMtPmNvbmZpZ3VyZWQgPSAwOworCXBfc2xvdC0+c3RhdHVzID0gMHgwMTsKIAogCS8qIFdhaXQgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gaGFyZHdhcmUgKi8KIAlkb3duKCZjdHJsLT5jcml0X3NlY3QpOwpAQCAtMTMyOCw1NiArNDExLDYgQEAKIAkvKiBEb25lIHdpdGggZXhjbHVzaXZlIGhhcmR3YXJlIGFjY2VzcyAqLwogCXVwKCZjdHJsLT5jcml0X3NlY3QpOwogCi0JaWYgKGN0cmwtPmFkZF9zdXBwb3J0KSB7Ci0JCXdoaWxlIChmdW5jKSB7Ci0JCQlyZXNfbGlzdHMuaW9faGVhZCA9IGN0cmwtPmlvX2hlYWQ7Ci0JCQlyZXNfbGlzdHMubWVtX2hlYWQgPSBjdHJsLT5tZW1faGVhZDsKLQkJCXJlc19saXN0cy5wX21lbV9oZWFkID0gY3RybC0+cF9tZW1faGVhZDsKLQkJCXJlc19saXN0cy5idXNfaGVhZCA9IGN0cmwtPmJ1c19oZWFkOwotCi0JCQlkYmcoIlJldHVybmluZyByZXNvdXJjZXMgdG8gY3RsciBsaXN0cyBmb3IgKEIvRC9GKSA9ICglI3gvJSN4LyUjeClcbiIsIAotCQkJCWZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0KLQkJCXBjaWVocF9yZXR1cm5fYm9hcmRfcmVzb3VyY2VzKGZ1bmMsICZyZXNfbGlzdHMpOwotCi0JCQljdHJsLT5pb19oZWFkID0gcmVzX2xpc3RzLmlvX2hlYWQ7Ci0JCQljdHJsLT5tZW1faGVhZCA9IHJlc19saXN0cy5tZW1faGVhZDsKLQkJCWN0cmwtPnBfbWVtX2hlYWQgPSByZXNfbGlzdHMucF9tZW1faGVhZDsKLQkJCWN0cmwtPmJ1c19oZWFkID0gcmVzX2xpc3RzLmJ1c19oZWFkOwotCi0JCQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmKGN0cmwtPm1lbV9oZWFkKSk7Ci0JCQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmKGN0cmwtPnBfbWVtX2hlYWQpKTsKLQkJCXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCYoY3RybC0+aW9faGVhZCkpOwotCQkJcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJihjdHJsLT5idXNfaGVhZCkpOwotCi0JCQlpZiAoaXNfYnJpZGdlKGZ1bmMpKSB7Ci0JCQkJZGJnKCJQQ0kgQnJpZGdlIEhvdC1SZW1vdmUgczpiOmQ6ZiglMDJ4OiUwMng6JTAyeDolMDJ4KVxuIiwgCi0JCQkJCWN0cmwtPnNlZywgZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQkJCQlicmlkZ2Vfc2xvdF9yZW1vdmUoZnVuYyk7Ci0JCQl9IGVsc2UgewotCQkJCWRiZygiUENJIEZ1bmN0aW9uIEhvdC1SZW1vdmUgczpiOmQ6ZiglMDJ4OiUwMng6JTAyeDolMDJ4KVxuIiwgCi0JCQkJCWN0cmwtPnNlZywgZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQkJCQlzbG90X3JlbW92ZShmdW5jKTsKLQkJCX0KLQotCQkJZnVuYyA9IHBjaWVocF9zbG90X2ZpbmQoY3RybC0+c2xvdF9idXMsIGRldmljZSwgMCk7Ci0JCX0KLQotCQkvKiBTZXR1cCBzbG90IHN0cnVjdHVyZSB3aXRoIGVudHJ5IGZvciBlbXB0eSBzbG90ICovCi0JCWZ1bmMgPSBwY2llaHBfc2xvdF9jcmVhdGUoY3RybC0+c2xvdF9idXMpOwotCi0JCWlmIChmdW5jID09IE5VTEwpIHsKLQkJCXJldHVybiAxOwotCQl9Ci0KLQkJZnVuYy0+YnVzID0gY3RybC0+c2xvdF9idXM7Ci0JCWZ1bmMtPmRldmljZSA9IGRldmljZTsKLQkJZnVuYy0+ZnVuY3Rpb24gPSAwOwotCQlmdW5jLT5jb25maWd1cmVkID0gMDsKLQkJZnVuYy0+c3dpdGNoX3NhdmUgPSAweDEwOwotCQlmdW5jLT5pc19hX2JvYXJkID0gMDsKLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQxMSwxMyArNDQ0LDE1IEBACiAJcF9zbG90LT5ocGNfb3BzLT5nZXRfcG93ZXJfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7CiAJaWYgKGdldHN0YXR1cykgewogCQlwX3Nsb3QtPnN0YXRlID0gUE9XRVJPRkZfU1RBVEU7Ci0JCWRiZygiSW4gcG93ZXJfZG93bl9ib2FyZCwgYjpkKCV4OiV4KVxuIiwgcF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlKTsKKwkJZGJnKCIlczogZGlzYWJsaW5nIGJ1czpkZXZpY2UoJXg6JXgpXG4iLCBfX0ZVTkNUSU9OX18sCisJCQkJcF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlKTsKIAogCQlwY2llaHBfZGlzYWJsZV9zbG90KHBfc2xvdCk7CiAJCXBfc2xvdC0+c3RhdGUgPSBTVEFUSUNfU1RBVEU7CiAJfSBlbHNlIHsKIAkJcF9zbG90LT5zdGF0ZSA9IFBPV0VST05fU1RBVEU7Ci0JCWRiZygiSW4gYWRkX2JvYXJkLCBiOmQoJXg6JXgpXG4iLCBwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UpOworCQlkYmcoIiVzOiBhZGRpbmcgYnVzOmRldmljZSgleDoleClcbiIsIF9fRlVOQ1RJT05fXywKKwkJCQlwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UpOwogCiAJCWlmIChwY2llaHBfZW5hYmxlX3Nsb3QocF9zbG90KSAmJiBQV1JfTEVEKHBfc2xvdC0+Y3RybC0+Y3RybGNhcCkpIHsKIAkJCS8qIFdhaXQgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gaGFyZHdhcmUgKi8KQEAgLTE0NTksMTMgKzQ5NCwxNSBAQAogCXBfc2xvdC0+aHBjX29wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7CiAJaWYgKCFnZXRzdGF0dXMpIHsKIAkJcF9zbG90LT5zdGF0ZSA9IFBPV0VST0ZGX1NUQVRFOwotCQlkYmcoIkluIHJlbW92aW5nIGJvYXJkLCBiOmQoJXg6JXgpXG4iLCBwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UpOworCQlkYmcoIiVzOiByZW1vdmluZyBidXM6ZGV2aWNlKCV4OiV4KVxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIHBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSk7CiAKIAkJcGNpZWhwX2Rpc2FibGVfc2xvdChwX3Nsb3QpOwogCQlwX3Nsb3QtPnN0YXRlID0gU1RBVElDX1NUQVRFOwogCX0gZWxzZSB7CiAJCXBfc2xvdC0+c3RhdGUgPSBQT1dFUk9OX1NUQVRFOwotCQlkYmcoIkluIGFkZF9ib2FyZCwgYjpkKCV4OiV4KVxuIiwgcF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlKTsKKwkJZGJnKCIlczogYWRkaW5nIGJ1czpkZXZpY2UoJXg6JXgpXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgcF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlKTsKIAogCQlpZiAocGNpZWhwX2VuYWJsZV9zbG90KHBfc2xvdCkgJiYgUFdSX0xFRChwX3Nsb3QtPmN0cmwtPmN0cmxjYXApKSB7CiAJCQkvKiBXYWl0IGZvciBleGNsdXNpdmUgYWNjZXNzIHRvIGhhcmR3YXJlICovCkBAIC0xNTMxLDcgKzU2OCw2IEBACiAJCWVyciAoIkNhbid0IHN0YXJ0IHVwIG91ciBldmVudCB0aHJlYWRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQotCWRiZygiT3VyIGV2ZW50IHRocmVhZCBwaWQgPSAlZFxuIiwgcGlkKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTUzOSw5ICs1NzUsNyBAQAogdm9pZCBwY2llaHBfZXZlbnRfc3RvcF90aHJlYWQodm9pZCkKIHsKIAlldmVudF9maW5pc2hlZCA9IDE7Ci0JZGJnKCJldmVudF90aHJlYWQgZmluaXNoIGNvbW1hbmQgZ2l2ZW5cbiIpOwogCXVwKCZldmVudF9zZW1hcGhvcmUpOwotCWRiZygid2FpdCBmb3IgZXZlbnRfdGhyZWFkIHRvIGV4aXRcbiIpOwogCWRvd24oJmV2ZW50X2V4aXQpOwogfQogCkBAIC0xNTczLDcgKzYwNyw2IEBACiB7CiAJaW50IGxvb3AgPSAwOwogCWludCBjaGFuZ2UgPSAxOwotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYzsKIAl1OCBocF9zbG90OwogCXU4IGdldHN0YXR1czsKIAlzdHJ1Y3Qgc2xvdCAqcF9zbG90OwpAQCAtMTU4MSwxNiArNjE0LDEyIEBACiAJd2hpbGUgKGNoYW5nZSkgewogCQljaGFuZ2UgPSAwOwogCi0JCWZvciAobG9vcCA9IDA7IGxvb3AgPCAxMDsgbG9vcCsrKSB7CisJCWZvciAobG9vcCA9IDA7IGxvb3AgPCBNQVhfRVZFTlRTOyBsb29wKyspIHsKIAkJCWlmIChjdHJsLT5ldmVudF9xdWV1ZVtsb29wXS5ldmVudF90eXBlICE9IDApIHsKIAkJCQlocF9zbG90ID0gY3RybC0+ZXZlbnRfcXVldWVbbG9vcF0uaHBfc2xvdDsKIAotCQkJCWZ1bmMgPSBwY2llaHBfc2xvdF9maW5kKGN0cmwtPnNsb3RfYnVzLCAoaHBfc2xvdCArIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCksIDApOwotCiAJCQkJcF9zbG90ID0gcGNpZWhwX2ZpbmRfc2xvdChjdHJsLCBocF9zbG90ICsgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KTsKIAotCQkJCWRiZygiaHBfc2xvdCAlZCwgZnVuYyAlcCwgcF9zbG90ICVwXG4iLCBocF9zbG90LCBmdW5jLCBwX3Nsb3QpOwotCiAJCQkJaWYgKGN0cmwtPmV2ZW50X3F1ZXVlW2xvb3BdLmV2ZW50X3R5cGUgPT0gSU5UX0JVVFRPTl9DQU5DRUwpIHsKIAkJCQkJZGJnKCJidXR0b24gY2FuY2VsXG4iKTsKIAkJCQkJZGVsX3RpbWVyKCZwX3Nsb3QtPnRhc2tfZXZlbnQpOwpAQCAtMTY4Miw3ICs3MTEsNiBAQAogCQkJCQkJcF9zbG90LT50YXNrX2V2ZW50LmZ1bmN0aW9uID0gKHZvaWQgKCopKHVuc2lnbmVkIGxvbmcpKSBwdXNoYnV0dG9uX2hlbHBlcl90aHJlYWQ7CiAJCQkJCQlwX3Nsb3QtPnRhc2tfZXZlbnQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBwX3Nsb3Q7CiAKLQkJCQkJCWRiZygiYWRkX3RpbWVyIHBfc2xvdCA9ICVwXG4iLCAodm9pZCAqKSBwX3Nsb3QpOwogCQkJCQkJYWRkX3RpbWVyKCZwX3Nsb3QtPnRhc2tfZXZlbnQpOwogCQkJCQl9CiAJCQkJfQpAQCAtMTczNywxMyArNzY1LDYgQEAKIHsKIAl1OCBnZXRzdGF0dXMgPSAwOwogCWludCByYzsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmM7Ci0KLQlmdW5jID0gcGNpZWhwX3Nsb3RfZmluZChwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UsIDApOwotCWlmICghZnVuYykgewotCQlkYmcoIiVzOiBFcnJvciEgc2xvdCBOVUxMXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm4gMTsKLQl9CiAKIAkvKiBDaGVjayB0byBzZWUgaWYgKGxhdGNoIGNsb3NlZCwgY2FyZCBwcmVzZW50LCBwb3dlciBvZmYpICovCiAJZG93bigmcF9zbG90LT5jdHJsLT5jcml0X3NlY3QpOwpAQCAtMTc3Myw0NSArNzk0LDExIEBACiAJfQogCXVwKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7CiAKLQlzbG90X3JlbW92ZShmdW5jKTsKLQotCWZ1bmMgPSBwY2llaHBfc2xvdF9jcmVhdGUocF9zbG90LT5idXMpOwotCWlmIChmdW5jID09IE5VTEwpCi0JCXJldHVybiAxOwotCi0JZnVuYy0+YnVzID0gcF9zbG90LT5idXM7Ci0JZnVuYy0+ZGV2aWNlID0gcF9zbG90LT5kZXZpY2U7Ci0JZnVuYy0+ZnVuY3Rpb24gPSAwOwotCWZ1bmMtPmNvbmZpZ3VyZWQgPSAwOwotCWZ1bmMtPmlzX2FfYm9hcmQgPSAxOwotCi0JLyogV2UgaGF2ZSB0byBzYXZlIHRoZSBwcmVzZW5jZSBpbmZvIGZvciB0aGVzZSBzbG90cyAqLwotCXBfc2xvdC0+aHBjX29wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzKHBfc2xvdCwgJihmdW5jLT5wcmVzZW5jZV9zYXZlKSk7CiAJcF9zbG90LT5ocGNfb3BzLT5nZXRfbGF0Y2hfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7Ci0JZnVuYy0+c3dpdGNoX3NhdmUgPSAhZ2V0c3RhdHVzPyAweDEwOjA7CiAKLQlyYyA9IGJvYXJkX2FkZGVkKGZ1bmMsIHBfc2xvdC0+Y3RybCk7CisJcmMgPSBib2FyZF9hZGRlZChwX3Nsb3QpOwogCWlmIChyYykgewotCQlpZiAoaXNfYnJpZGdlKGZ1bmMpKQotCQkJYnJpZGdlX3Nsb3RfcmVtb3ZlKGZ1bmMpOwotCQllbHNlCi0JCQlzbG90X3JlbW92ZShmdW5jKTsKLQotCQkvKiBTZXR1cCBzbG90IHN0cnVjdHVyZSB3aXRoIGVudHJ5IGZvciBlbXB0eSBzbG90ICovCi0JCWZ1bmMgPSBwY2llaHBfc2xvdF9jcmVhdGUocF9zbG90LT5idXMpOwotCQlpZiAoZnVuYyA9PSBOVUxMKQotCQkJcmV0dXJuIDE7CS8qIE91dCBvZiBtZW1vcnkgKi8KLQotCQlmdW5jLT5idXMgPSBwX3Nsb3QtPmJ1czsKLQkJZnVuYy0+ZGV2aWNlID0gcF9zbG90LT5kZXZpY2U7Ci0JCWZ1bmMtPmZ1bmN0aW9uID0gMDsKLQkJZnVuYy0+Y29uZmlndXJlZCA9IDA7Ci0JCWZ1bmMtPmlzX2FfYm9hcmQgPSAxOwotCi0JCS8qIFdlIGhhdmUgdG8gc2F2ZSB0aGUgcHJlc2VuY2UgaW5mbyBmb3IgdGhlc2Ugc2xvdHMgKi8KLQkJcF9zbG90LT5ocGNfb3BzLT5nZXRfYWRhcHRlcl9zdGF0dXMocF9zbG90LCAmKGZ1bmMtPnByZXNlbmNlX3NhdmUpKTsKIAkJcF9zbG90LT5ocGNfb3BzLT5nZXRfbGF0Y2hfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7Ci0JCWZ1bmMtPnN3aXRjaF9zYXZlID0gIWdldHN0YXR1cz8gMHgxMDowOwogCX0KIAogCWlmIChwX3Nsb3QpCkBAIC0xODIzLDE0ICs4MTAsOCBAQAogCiBpbnQgcGNpZWhwX2Rpc2FibGVfc2xvdChzdHJ1Y3Qgc2xvdCAqcF9zbG90KQogewotCXU4IGNsYXNzX2NvZGUsIGhlYWRlcl90eXBlLCBCQ1I7Ci0JdTggaW5kZXggPSAwOwogCXU4IGdldHN0YXR1cyA9IDA7Ci0JdTMyIHJjID0gMDsKIAlpbnQgcmV0ID0gMDsKLQl1bnNpZ25lZCBpbnQgZGV2Zm47Ci0Jc3RydWN0IHBjaV9idXMgKnBjaV9idXMgPSBwX3Nsb3QtPmN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlOwotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYzsKIAogCWlmICghcF9zbG90LT5jdHJsKQogCQlyZXR1cm4gMTsKQEAgLTE4NjcsODM4ICs4NDgsOCBAQAogCiAJdXAoJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKIAotCWZ1bmMgPSBwY2llaHBfc2xvdF9maW5kKHBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSwgaW5kZXgrKyk7Ci0KLQkvKiBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHZpZGVvIGNvbnRyb2xsZXJzIGhlcmUKLQkgKiBmb3IgYWxsIGZ1bmMgb2YgcF9zbG90Ci0JICovCi0Jd2hpbGUgKGZ1bmMgJiYgIXJjKSB7Ci0JCXBjaV9idXMtPm51bWJlciA9IGZ1bmMtPmJ1czsKLQkJZGV2Zm4gPSBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0KLQkJLyogQ2hlY2sgdGhlIENsYXNzIENvZGUgKi8KLQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUgKHBjaV9idXMsIGRldmZuLCAweDBCLCAmY2xhc3NfY29kZSk7Ci0JCWlmIChyYykKLQkJCXJldHVybiByYzsKLQotCQlpZiAoY2xhc3NfY29kZSA9PSBQQ0lfQkFTRV9DTEFTU19ESVNQTEFZKSB7Ci0JCQkvKiBEaXNwbGF5L1ZpZGVvIGFkYXB0ZXIgKG5vdCBzdXBwb3J0ZWQpICovCi0JCQlyYyA9IFJFTU9WRV9OT1RfU1VQUE9SVEVEOwotCQl9IGVsc2UgewotCQkJLyogU2VlIGlmIGl0J3MgYSBicmlkZ2UgKi8KLQkJCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlIChwY2lfYnVzLCBkZXZmbiwgUENJX0hFQURFUl9UWVBFLCAmaGVhZGVyX3R5cGUpOwotCQkJaWYgKHJjKQotCQkJCXJldHVybiByYzsKLQotCQkJLyogSWYgaXQncyBhIGJyaWRnZSwgY2hlY2sgdGhlIFZHQSBFbmFibGUgYml0ICovCi0JCQlpZiAoKGhlYWRlcl90eXBlICYgMHg3RikgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgewotCQkJCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlIChwY2lfYnVzLCBkZXZmbiwgUENJX0JSSURHRV9DT05UUk9MLCAmQkNSKTsKLQkJCQlpZiAocmMpCi0JCQkJCXJldHVybiByYzsKLQotCQkJCS8qIElmIHRoZSBWR0EgRW5hYmxlIGJpdCBpcyBzZXQsIHJlbW92ZSBpc24ndCBzdXBwb3J0ZWQgKi8KLQkJCQlpZiAoQkNSICYgUENJX0JSSURHRV9DVExfVkdBKSB7Ci0JCQkJCXJjID0gUkVNT1ZFX05PVF9TVVBQT1JURUQ7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJZnVuYyA9IHBjaWVocF9zbG90X2ZpbmQocF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlLCBpbmRleCsrKTsKLQl9Ci0KLQlmdW5jID0gcGNpZWhwX3Nsb3RfZmluZChwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UsIDApOwotCWlmICgoZnVuYyAhPSBOVUxMKSAmJiAhcmMpIHsKLQkJcmMgPSByZW1vdmVfYm9hcmQoZnVuYywgcF9zbG90LT5jdHJsKTsKLQl9IGVsc2UgaWYgKCFyYykKLQkJcmMgPSAxOwotCi0JaWYgKHBfc2xvdCkKLQkJdXBkYXRlX3Nsb3RfaW5mbyhwX3Nsb3QpOwotCi0JcmV0dXJuIHJjOworCXJldCA9IHJlbW92ZV9ib2FyZChwX3Nsb3QpOworCXVwZGF0ZV9zbG90X2luZm8ocF9zbG90KTsKKwlyZXR1cm4gcmV0OwogfQogCi0KLS8qKgotICogY29uZmlndXJlX25ld19kZXZpY2UgLSBDb25maWd1cmVzIHRoZSBQQ0kgaGVhZGVyIGluZm9ybWF0aW9uIG9mIG9uZSBib2FyZC4KLSAqCi0gKiBAY3RybDogcG9pbnRlciB0byBjb250cm9sbGVyIHN0cnVjdHVyZQotICogQGZ1bmM6IHBvaW50ZXIgdG8gZnVuY3Rpb24gc3RydWN0dXJlCi0gKiBAYmVoaW5kX2JyaWRnZTogMSBpZiB0aGlzIGlzIGEgcmVjdXJzaXZlIGNhbGwsIDAgaWYgbm90Ci0gKiBAcmVzb3VyY2VzOiBwb2ludGVyIHRvIHNldCBvZiByZXNvdXJjZSBsaXN0cwotICoKLSAqIFJldHVybnMgMCBpZiBzdWNjZXNzCi0gKgotICovCi1zdGF0aWMgdTMyIGNvbmZpZ3VyZV9uZXdfZGV2aWNlKHN0cnVjdCBjb250cm9sbGVyICogY3RybCwgc3RydWN0IHBjaV9mdW5jICogZnVuYywKLQl1OCBiZWhpbmRfYnJpZGdlLCBzdHJ1Y3QgcmVzb3VyY2VfbGlzdHMgKiByZXNvdXJjZXMsIHU4IGJyaWRnZV9idXMsIHU4IGJyaWRnZV9kZXYpCi17Ci0JdTggdGVtcF9ieXRlLCBmdW5jdGlvbiwgbWF4X2Z1bmN0aW9ucywgc3RvcF9pdDsKLQlpbnQgcmM7Ci0JdTMyIElEOwotCXN0cnVjdCBwY2lfZnVuYyAqbmV3X3Nsb3Q7Ci0Jc3RydWN0IHBjaV9idXMgbHBjaV9idXMsICpwY2lfYnVzOwotCWludCBpbmRleDsKLQotCW5ld19zbG90ID0gZnVuYzsKLQotCWRiZygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JbWVtY3B5KCZscGNpX2J1cywgY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGUsIHNpemVvZihscGNpX2J1cykpOwotCXBjaV9idXMgPSAmbHBjaV9idXM7Ci0JcGNpX2J1cy0+bnVtYmVyID0gZnVuYy0+YnVzOwotCi0JLyogQ2hlY2sgZm9yIE11bHRpLWZ1bmN0aW9uIGRldmljZSAqLwotCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKHBjaV9idXMsIFBDSV9ERVZGTihmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKSwgMHgwRSwgJnRlbXBfYnl0ZSk7Ci0JaWYgKHJjKSB7Ci0JCWRiZygiJXM6IHJjID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JaWYgKHRlbXBfYnl0ZSAmIDB4ODApCS8qIE11bHRpLWZ1bmN0aW9uIGRldmljZSAqLwotCQltYXhfZnVuY3Rpb25zID0gODsKLQllbHNlCi0JCW1heF9mdW5jdGlvbnMgPSAxOwotCi0JZnVuY3Rpb24gPSAwOwotCi0JZG8gewotCQlyYyA9IGNvbmZpZ3VyZV9uZXdfZnVuY3Rpb24oY3RybCwgbmV3X3Nsb3QsIGJlaGluZF9icmlkZ2UsCi0JCQkJCXJlc291cmNlcywgYnJpZGdlX2J1cywgYnJpZGdlX2Rldik7Ci0KLQkJaWYgKHJjKSB7Ci0JCQlkYmcoImNvbmZpZ3VyZV9uZXdfZnVuY3Rpb24gZmFpbGVkOiAlZFxuIiwgcmMpOwotCQkJaW5kZXggPSAwOwotCi0JCQl3aGlsZSAobmV3X3Nsb3QpIHsKLQkJCQluZXdfc2xvdCA9IHBjaWVocF9zbG90X2ZpbmQobmV3X3Nsb3QtPmJ1cywKLQkJCQkJCW5ld19zbG90LT5kZXZpY2UsIGluZGV4KyspOwotCi0JCQkJaWYgKG5ld19zbG90KQotCQkJCQlwY2llaHBfcmV0dXJuX2JvYXJkX3Jlc291cmNlcyhuZXdfc2xvdCwKLQkJCQkJCXJlc291cmNlcyk7Ci0JCQl9Ci0KLQkJCXJldHVybiByYzsKLQkJfQotCi0JCWZ1bmN0aW9uKys7Ci0KLQkJc3RvcF9pdCA9IDA7Ci0KLQkJLyogIFRoZSBmb2xsb3dpbmcgbG9vcCBza2lwcyB0byB0aGUgbmV4dCBwcmVzZW50IGZ1bmN0aW9uCi0JCSAqICBhbmQgY3JlYXRlcyBhIGJvYXJkIHN0cnVjdHVyZQotCQkgKi8KLQotCQl3aGlsZSAoKGZ1bmN0aW9uIDwgbWF4X2Z1bmN0aW9ucykgJiYgKCFzdG9wX2l0KSkgewotCQkJcGNpX2J1c19yZWFkX2NvbmZpZ19kd29yZChwY2lfYnVzLCBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jdGlvbiksIDB4MDAsICZJRCk7Ci0KLQkJCWlmIChJRCA9PSAweEZGRkZGRkZGKSB7CSAgLyogVGhlcmUncyBub3RoaW5nIHRoZXJlLiAqLwotCQkJCWZ1bmN0aW9uKys7Ci0JCQl9IGVsc2UgeyAgLyogVGhlcmUncyBzb21ldGhpbmcgdGhlcmUgKi8KLQkJCQkvKiBTZXR1cCBzbG90IHN0cnVjdHVyZS4gKi8KLQkJCQluZXdfc2xvdCA9IHBjaWVocF9zbG90X2NyZWF0ZShmdW5jLT5idXMpOwotCi0JCQkJaWYgKG5ld19zbG90ID09IE5VTEwpIHsKLQkJCQkJLyogT3V0IG9mIG1lbW9yeSAqLwotCQkJCQlyZXR1cm4gMTsKLQkJCQl9Ci0KLQkJCQluZXdfc2xvdC0+YnVzID0gZnVuYy0+YnVzOwotCQkJCW5ld19zbG90LT5kZXZpY2UgPSBmdW5jLT5kZXZpY2U7Ci0JCQkJbmV3X3Nsb3QtPmZ1bmN0aW9uID0gZnVuY3Rpb247Ci0JCQkJbmV3X3Nsb3QtPmlzX2FfYm9hcmQgPSAxOwotCQkJCW5ld19zbG90LT5zdGF0dXMgPSAwOwotCi0JCQkJc3RvcF9pdCsrOwotCQkJfQotCQl9Ci0KLQl9IHdoaWxlIChmdW5jdGlvbiA8IG1heF9mdW5jdGlvbnMpOwotCWRiZygicmV0dXJuaW5nIGZyb20gJXNcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIENvbmZpZ3VyYXRpb24gbG9naWMgdGhhdCBpbnZvbHZlcyB0aGUgaG90cGx1ZyBkYXRhIHN0cnVjdHVyZXMgYW5kIAotICogdGhlaXIgYm9va2tlZXBpbmcKLSAqLwotCi0vKioKLSAqIGNvbmZpZ3VyZV9icmlkZ2U6IGZpbGwgYnJpZGdlJ3MgcmVnaXN0ZXJzLCBlaXRoZXIgY29uZmlndXJlIG9yIGRpc2FibGUgaXQuCi0gKi8KLXN0YXRpYyBpbnQKLWNvbmZpZ3VyZV9icmlkZ2Uoc3RydWN0IHBjaV9idXMgKnBjaV9idXMsIHVuc2lnbmVkIGludCBkZXZmbiwKLQkJCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm1lbV9ub2RlLAotCQkJc3RydWN0IHBjaV9yZXNvdXJjZSAqKmhvbGRfbWVtX25vZGUsCi0JCQlpbnQgYmFzZV9hZGRyLCBpbnQgbGltaXRfYWRkcikKLXsKLQl1MTYgdGVtcF93b3JkOwotCXUzMiByYzsKLQotCWlmIChtZW1fbm9kZSkgewotCQltZW1jcHkoKmhvbGRfbWVtX25vZGUsIG1lbV9ub2RlLCBzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSkpOwotCQltZW1fbm9kZS0+bmV4dCA9IE5VTEw7Ci0KLQkJLyogc2V0IE1lbSBiYXNlIGFuZCBMaW1pdCByZWdpc3RlcnMgKi8KLQkJUkVTX0NIRUNLKG1lbV9ub2RlLT5iYXNlLCAxNik7Ci0JCXRlbXBfd29yZCA9ICh1MTYpKG1lbV9ub2RlLT5iYXNlID4+IDE2KTsKLQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKHBjaV9idXMsIGRldmZuLCBiYXNlX2FkZHIsIHRlbXBfd29yZCk7Ci0KLQkJUkVTX0NIRUNLKG1lbV9ub2RlLT5iYXNlICsgbWVtX25vZGUtPmxlbmd0aCAtIDEsIDE2KTsKLQkJdGVtcF93b3JkID0gKHUxNikoKG1lbV9ub2RlLT5iYXNlICsgbWVtX25vZGUtPmxlbmd0aCAtIDEpID4+IDE2KTsKLQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKHBjaV9idXMsIGRldmZuLCBsaW1pdF9hZGRyLCB0ZW1wX3dvcmQpOwotCX0gZWxzZSB7Ci0JCXRlbXBfd29yZCA9IDB4RkZGRjsKLQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKHBjaV9idXMsIGRldmZuLCBiYXNlX2FkZHIsIHRlbXBfd29yZCk7Ci0KLQkJdGVtcF93b3JkID0gMHgwMDAwOwotCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIGxpbWl0X2FkZHIsIHRlbXBfd29yZCk7Ci0KLQkJa2ZyZWUoKmhvbGRfbWVtX25vZGUpOwotCQkqaG9sZF9tZW1fbm9kZSA9IE5VTEw7Ci0JfQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludAotY29uZmlndXJlX25ld19icmlkZ2Uoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHN0cnVjdCBwY2lfZnVuYyAqZnVuYywKLQkJdTggYmVoaW5kX2JyaWRnZSwgc3RydWN0IHJlc291cmNlX2xpc3RzICpyZXNvdXJjZXMsCi0JCXN0cnVjdCBwY2lfYnVzICpwY2lfYnVzKQotewotCWludCBjbG9vcDsKLQl1OCB0ZW1wX2J5dGU7Ci0JdTggZGV2aWNlOwotCXUxNiB0ZW1wX3dvcmQ7Ci0JdTMyIHJjOwotCXUzMiBJRDsKLQl1bnNpZ25lZCBpbnQgZGV2Zm47Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqbWVtX25vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcF9tZW1fbm9kZTsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICppb19ub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmJ1c19ub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmhvbGRfbWVtX25vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqaG9sZF9wX21lbV9ub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmhvbGRfSU9fbm9kZTsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpob2xkX2J1c19ub2RlOwotCXN0cnVjdCBpcnFfbWFwcGluZyBpcnFzOwotCXN0cnVjdCBwY2lfZnVuYyAqbmV3X3Nsb3Q7Ci0Jc3RydWN0IHJlc291cmNlX2xpc3RzIHRlbXBfcmVzb3VyY2VzOwotCi0JZGV2Zm4gPSBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0KLQkvKiBzZXQgUHJpbWFyeSBidXMgKi8KLQlkYmcoInNldCBQcmltYXJ5IGJ1cyA9IDB4JXhcbiIsIGZ1bmMtPmJ1cyk7Ci0JcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19ieXRlKHBjaV9idXMsIGRldmZuLCBQQ0lfUFJJTUFSWV9CVVMsIGZ1bmMtPmJ1cyk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQkvKiBmaW5kIHJhbmdlIG9mIGJ1c3NlcyB0byB1c2UgKi8KLQlidXNfbm9kZSA9IGdldF9tYXhfcmVzb3VyY2UoJnJlc291cmNlcy0+YnVzX2hlYWQsIDFMKTsKLQotCS8qIElmIHdlIGRvbid0IGhhdmUgYW55IGJ1c3NlcyB0byBhbGxvY2F0ZSwgd2UgY2FuJ3QgY29udGludWUgKi8KLQlpZiAoIWJ1c19ub2RlKSB7Ci0JCWVycigiR290IE5PIGJ1cyByZXNvdXJjZSB0byB1c2VcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JZGJnKCJHb3QgcmFuZ2VzIG9mIGJ1c2VzIHRvIHVzZTogYmFzZTpsZW49MHgleDoleFxuIiwgYnVzX25vZGUtPmJhc2UsIGJ1c19ub2RlLT5sZW5ndGgpOwotCi0JLyogc2V0IFNlY29uZGFyeSBidXMgKi8KLQl0ZW1wX2J5dGUgPSAodTgpYnVzX25vZGUtPmJhc2U7Ci0JZGJnKCJzZXQgU2Vjb25kYXJ5IGJ1cyA9IDB4JXhcbiIsIHRlbXBfYnl0ZSk7Ci0JcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19ieXRlKHBjaV9idXMsIGRldmZuLCBQQ0lfU0VDT05EQVJZX0JVUywgdGVtcF9ieXRlKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCS8qIHNldCBzdWJvcmRpbmF0ZSBidXMgKi8KLQl0ZW1wX2J5dGUgPSAodTgpKGJ1c19ub2RlLT5iYXNlICsgYnVzX25vZGUtPmxlbmd0aCAtIDEpOwotCWRiZygic2V0IHN1Ym9yZGluYXRlIGJ1cyA9IDB4JXhcbiIsIHRlbXBfYnl0ZSk7Ci0JcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19ieXRlIChwY2lfYnVzLCBkZXZmbiwgUENJX1NVQk9SRElOQVRFX0JVUywgdGVtcF9ieXRlKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCS8qIFNldCBIUCBwYXJhbWV0ZXJzIChDYWNoZSBMaW5lIFNpemUsIExhdGVuY3kgVGltZXIpICovCi0JcmMgPSBwY2llaHBybV9zZXRfaHBwKGN0cmwsIGZ1bmMsIFBDSV9IRUFERVJfVFlQRV9CUklER0UpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JLyogU2V0dXAgdGhlIElPLCBtZW1vcnksIGFuZCBwcmVmZXRjaGFibGUgd2luZG93cyAqLwotCi0JaW9fbm9kZSA9IGdldF9tYXhfcmVzb3VyY2UoJihyZXNvdXJjZXMtPmlvX2hlYWQpLCAweDEwMDBMKTsKLQlpZiAoaW9fbm9kZSkgewotCQlkYmcoImlvX25vZGUoYmFzZSwgbGVuLCBuZXh0KSAoJXgsICV4LCAlcClcbiIsIGlvX25vZGUtPmJhc2UsCi0JCQkJaW9fbm9kZS0+bGVuZ3RoLCBpb19ub2RlLT5uZXh0KTsKLQl9Ci0KLQltZW1fbm9kZSA9IGdldF9tYXhfcmVzb3VyY2UoJihyZXNvdXJjZXMtPm1lbV9oZWFkKSwgMHgxMDAwMDBMKTsKLQlpZiAobWVtX25vZGUpIHsKLQkJZGJnKCJtZW1fbm9kZShiYXNlLCBsZW4sIG5leHQpICgleCwgJXgsICVwKVxuIiwgbWVtX25vZGUtPmJhc2UsCi0JCQkJbWVtX25vZGUtPmxlbmd0aCwgbWVtX25vZGUtPm5leHQpOwotCX0KLQotCWlmIChyZXNvdXJjZXMtPnBfbWVtX2hlYWQpCi0JCXBfbWVtX25vZGUgPSBnZXRfbWF4X3Jlc291cmNlKCYocmVzb3VyY2VzLT5wX21lbV9oZWFkKSwgMHgxMDAwMDBMKTsKLQllbHNlIHsKLQkJLyoKLQkJICogSW4gc29tZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiwgTUVNIGFuZCBQTUVNIGFyZSBub3QKLQkJICogIGRpc3Rpbmd1aXNoZWQsIGFuZCBoZW5jZSBBQ1BJIF9DUlMgaGFzIG9ubHkgTUVNIGVudHJpZXMKLQkJICogIGZvciBib3RoIE1FTSBhbmQgUE1FTS4KLQkJICovCi0JCWRiZygidXNpbmcgTUVNIGZvciBQTUVNXG4iKTsKLQkJcF9tZW1fbm9kZSA9IGdldF9tYXhfcmVzb3VyY2UoJihyZXNvdXJjZXMtPm1lbV9oZWFkKSwgMHgxMDAwMDBMKTsKLQl9Ci0JaWYgKHBfbWVtX25vZGUpIHsKLQkJZGJnKCJwX21lbV9ub2RlKGJhc2UsIGxlbiwgbmV4dCkgKCV4LCAleCwgJXApXG4iLCBwX21lbV9ub2RlLT5iYXNlLAotCQkJCXBfbWVtX25vZGUtPmxlbmd0aCwgcF9tZW1fbm9kZS0+bmV4dCk7Ci0JfQotCi0JLyogc2V0IHVwIHRoZSBJUlEgaW5mbyAqLwotCWlmICghcmVzb3VyY2VzLT5pcnFzKSB7Ci0JCWlycXMuYmFyYmVyX3BvbGUgPSAwOwotCQlpcnFzLmludGVycnVwdFswXSA9IDA7Ci0JCWlycXMuaW50ZXJydXB0WzFdID0gMDsKLQkJaXJxcy5pbnRlcnJ1cHRbMl0gPSAwOwotCQlpcnFzLmludGVycnVwdFszXSA9IDA7Ci0JCWlycXMudmFsaWRfSU5UID0gMDsKLQl9IGVsc2UgewotCQlpcnFzLmJhcmJlcl9wb2xlID0gcmVzb3VyY2VzLT5pcnFzLT5iYXJiZXJfcG9sZTsKLQkJaXJxcy5pbnRlcnJ1cHRbMF0gPSByZXNvdXJjZXMtPmlycXMtPmludGVycnVwdFswXTsKLQkJaXJxcy5pbnRlcnJ1cHRbMV0gPSByZXNvdXJjZXMtPmlycXMtPmludGVycnVwdFsxXTsKLQkJaXJxcy5pbnRlcnJ1cHRbMl0gPSByZXNvdXJjZXMtPmlycXMtPmludGVycnVwdFsyXTsKLQkJaXJxcy5pbnRlcnJ1cHRbM10gPSByZXNvdXJjZXMtPmlycXMtPmludGVycnVwdFszXTsKLQkJaXJxcy52YWxpZF9JTlQgPSByZXNvdXJjZXMtPmlycXMtPnZhbGlkX0lOVDsKLQl9Ci0KLQkvKiBzZXQgdXAgcmVzb3VyY2UgbGlzdHMgdGhhdCBhcmUgbm93IGFsaWduZWQgb24gdG9wIGFuZCBib3R0b20KLQkgKiBmb3IgYW55dGhpbmcgYmVoaW5kIHRoZSBicmlkZ2UuCi0JICovCi0JdGVtcF9yZXNvdXJjZXMuYnVzX2hlYWQgPSBidXNfbm9kZTsKLQl0ZW1wX3Jlc291cmNlcy5pb19oZWFkID0gaW9fbm9kZTsKLQl0ZW1wX3Jlc291cmNlcy5tZW1faGVhZCA9IG1lbV9ub2RlOwotCXRlbXBfcmVzb3VyY2VzLnBfbWVtX2hlYWQgPSBwX21lbV9ub2RlOwotCXRlbXBfcmVzb3VyY2VzLmlycXMgPSAmaXJxczsKLQotCS8qIE1ha2UgY29waWVzIG9mIHRoZSBub2RlcyB3ZSBhcmUgZ29pbmcgdG8gcGFzcyBkb3duIHNvIHRoYXQKLQkgKiBpZiB0aGVyZSBpcyBhIHByb2JsZW0sd2UgY2FuIGp1c3QgdXNlIHRoZXNlIHRvIGZyZWUgcmVzb3VyY2VzCi0JICovCi0JaG9sZF9idXNfbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQlob2xkX0lPX25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwgR0ZQX0tFUk5FTCk7Ci0JaG9sZF9tZW1fbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQlob2xkX3BfbWVtX25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWhvbGRfYnVzX25vZGUgfHwgIWhvbGRfSU9fbm9kZSB8fCAhaG9sZF9tZW1fbm9kZSB8fCAhaG9sZF9wX21lbV9ub2RlKSB7Ci0JCWtmcmVlKGhvbGRfYnVzX25vZGUpOwotCQlrZnJlZShob2xkX0lPX25vZGUpOwotCQlrZnJlZShob2xkX21lbV9ub2RlKTsKLQkJa2ZyZWUoaG9sZF9wX21lbV9ub2RlKTsKLQotCQlyZXR1cm4gMTsKLQl9Ci0KLQltZW1jcHkoaG9sZF9idXNfbm9kZSwgYnVzX25vZGUsIHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSk7Ci0KLQlidXNfbm9kZS0+YmFzZSArPSAxOwotCWJ1c19ub2RlLT5sZW5ndGggLT0gMTsKLQlidXNfbm9kZS0+bmV4dCA9IE5VTEw7Ci0KLQkvKiBJZiB3ZSBoYXZlIElPIHJlc291cmNlcyBjb3B5IHRoZW0gYW5kIGZpbGwgaW4gdGhlIGJyaWRnZSdzCi0JICogSU8gcmFuZ2UgcmVnaXN0ZXJzCi0JICovCi0JaWYgKGlvX25vZGUpIHsKLQkJbWVtY3B5KGhvbGRfSU9fbm9kZSwgaW9fbm9kZSwgc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpKTsKLQkJaW9fbm9kZS0+bmV4dCA9IE5VTEw7Ci0KLQkJLyogc2V0IElPIGJhc2UgYW5kIExpbWl0IHJlZ2lzdGVycyAqLwotCQlSRVNfQ0hFQ0soaW9fbm9kZS0+YmFzZSwgOCk7Ci0JCXRlbXBfYnl0ZSA9ICh1OCkoaW9fbm9kZS0+YmFzZSA+PiA4KTsKLQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19ieXRlIChwY2lfYnVzLCBkZXZmbiwgUENJX0lPX0JBU0UsIHRlbXBfYnl0ZSk7Ci0KLQkJUkVTX0NIRUNLKGlvX25vZGUtPmJhc2UgKyBpb19ub2RlLT5sZW5ndGggLSAxLCA4KTsKLQkJdGVtcF9ieXRlID0gKHU4KSgoaW9fbm9kZS0+YmFzZSArIGlvX25vZGUtPmxlbmd0aCAtIDEpID4+IDgpOwotCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX2J5dGUgKHBjaV9idXMsIGRldmZuLCBQQ0lfSU9fTElNSVQsIHRlbXBfYnl0ZSk7Ci0JfSBlbHNlIHsKLQkJa2ZyZWUoaG9sZF9JT19ub2RlKTsKLQkJaG9sZF9JT19ub2RlID0gTlVMTDsKLQl9Ci0KLQkvKiBJZiB3ZSBoYXZlIG1lbW9yeSByZXNvdXJjZXMgY29weSB0aGVtIGFuZCBmaWxsIGluIHRoZSBicmlkZ2UncwotCSAqIG1lbW9yeSByYW5nZSByZWdpc3RlcnMuICBPdGhlcndpc2UsIGZpbGwgaW4gdGhlIHJhbmdlCi0JICogcmVnaXN0ZXJzIHdpdGggdmFsdWVzIHRoYXQgZGlzYWJsZSB0aGVtLgotCSAqLwotCXJjID0gY29uZmlndXJlX2JyaWRnZShwY2lfYnVzLCBkZXZmbiwgbWVtX25vZGUsICZob2xkX21lbV9ub2RlLAotCQkJCVBDSV9NRU1PUllfQkFTRSwgUENJX01FTU9SWV9MSU1JVCk7Ci0KLQkvKiBJZiB3ZSBoYXZlIHByZWZldGNoYWJsZSBtZW1vcnkgcmVzb3VyY2VzIGNvcHkgdGhlbSBhbmQgCi0JICogZmlsbCBpbiB0aGUgYnJpZGdlJ3MgbWVtb3J5IHJhbmdlIHJlZ2lzdGVycy4gIE90aGVyd2lzZSwKLQkgKiBmaWxsIGluIHRoZSByYW5nZSByZWdpc3RlcnMgd2l0aCB2YWx1ZXMgdGhhdCBkaXNhYmxlIHRoZW0uCi0JICovCi0JcmMgPSBjb25maWd1cmVfYnJpZGdlKHBjaV9idXMsIGRldmZuLCBwX21lbV9ub2RlLCAmaG9sZF9wX21lbV9ub2RlLAotCQkJCVBDSV9QUkVGX01FTU9SWV9CQVNFLCBQQ0lfUFJFRl9NRU1PUllfTElNSVQpOwotCi0JLyogQWRqdXN0IHRoaXMgdG8gY29tcGVuc2F0ZSBmb3IgZXh0cmEgYWRqdXN0bWVudCBpbiBmaXJzdCBsb29wICovCi0JaXJxcy5iYXJiZXJfcG9sZS0tOwotCi0JcmMgPSAwOwotCi0JLyogSGVyZSB3ZSBhY3R1YWxseSBmaW5kIHRoZSBkZXZpY2VzIGFuZCBjb25maWd1cmUgdGhlbSAqLwotCWZvciAoZGV2aWNlID0gMDsgKGRldmljZSA8PSAweDFGKSAmJiAhcmM7IGRldmljZSsrKSB7Ci0JCWlycXMuYmFyYmVyX3BvbGUgPSAoaXJxcy5iYXJiZXJfcG9sZSArIDEpICYgMHgwMzsKLQotCQlJRCA9IDB4RkZGRkZGRkY7Ci0JCXBjaV9idXMtPm51bWJlciA9IGhvbGRfYnVzX25vZGUtPmJhc2U7Ci0JCXBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQgKHBjaV9idXMsIFBDSV9ERVZGTihkZXZpY2UsIDApLCBQQ0lfVkVORE9SX0lELCAmSUQpOwotCQlwY2lfYnVzLT5udW1iZXIgPSBmdW5jLT5idXM7Ci0KLQkJaWYgKElEICE9IDB4RkZGRkZGRkYpIHsJICAvKiAgZGV2aWNlIFByZXNlbnQgKi8KLQkJCS8qIFNldHVwIHNsb3Qgc3RydWN0dXJlLiAqLwotCQkJbmV3X3Nsb3QgPSBwY2llaHBfc2xvdF9jcmVhdGUoaG9sZF9idXNfbm9kZS0+YmFzZSk7Ci0KLQkJCWlmIChuZXdfc2xvdCA9PSBOVUxMKSB7Ci0JCQkJLyogT3V0IG9mIG1lbW9yeSAqLwotCQkJCXJjID0gLUVOT01FTTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJbmV3X3Nsb3QtPmJ1cyA9IGhvbGRfYnVzX25vZGUtPmJhc2U7Ci0JCQluZXdfc2xvdC0+ZGV2aWNlID0gZGV2aWNlOwotCQkJbmV3X3Nsb3QtPmZ1bmN0aW9uID0gMDsKLQkJCW5ld19zbG90LT5pc19hX2JvYXJkID0gMTsKLQkJCW5ld19zbG90LT5zdGF0dXMgPSAwOwotCi0JCQlyYyA9IGNvbmZpZ3VyZV9uZXdfZGV2aWNlKGN0cmwsIG5ld19zbG90LCAxLAotCQkJCQkmdGVtcF9yZXNvdXJjZXMsIGZ1bmMtPmJ1cywKLQkJCQkJZnVuYy0+ZGV2aWNlKTsKLQkJCWRiZygiY29uZmlndXJlX25ld19kZXZpY2UgcmM9MHgleFxuIixyYyk7Ci0JCX0JLyogRW5kIG9mIElGIChkZXZpY2UgaW4gc2xvdD8pICovCi0JfQkJLyogRW5kIG9mIEZPUiBsb29wICovCi0KLQlpZiAocmMpIHsKLQkJcGNpZWhwX2Rlc3Ryb3lfcmVzb3VyY2VfbGlzdCgmdGVtcF9yZXNvdXJjZXMpOwotCi0JCXJldHVybl9yZXNvdXJjZSgmKHJlc291cmNlcy0+YnVzX2hlYWQpLCBob2xkX2J1c19ub2RlKTsKLQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5pb19oZWFkKSwgaG9sZF9JT19ub2RlKTsKLQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5tZW1faGVhZCksIGhvbGRfbWVtX25vZGUpOwotCQlyZXR1cm5fcmVzb3VyY2UoJihyZXNvdXJjZXMtPnBfbWVtX2hlYWQpLCBob2xkX3BfbWVtX25vZGUpOwotCQlyZXR1cm4ocmMpOwotCX0KLQotCS8qIHNhdmUgdGhlIGludGVycnVwdCByb3V0aW5nIGluZm9ybWF0aW9uICovCi0JaWYgKHJlc291cmNlcy0+aXJxcykgewotCQlyZXNvdXJjZXMtPmlycXMtPmludGVycnVwdFswXSA9IGlycXMuaW50ZXJydXB0WzBdOwotCQlyZXNvdXJjZXMtPmlycXMtPmludGVycnVwdFsxXSA9IGlycXMuaW50ZXJydXB0WzFdOwotCQlyZXNvdXJjZXMtPmlycXMtPmludGVycnVwdFsyXSA9IGlycXMuaW50ZXJydXB0WzJdOwotCQlyZXNvdXJjZXMtPmlycXMtPmludGVycnVwdFszXSA9IGlycXMuaW50ZXJydXB0WzNdOwotCQlyZXNvdXJjZXMtPmlycXMtPnZhbGlkX0lOVCA9IGlycXMudmFsaWRfSU5UOwotCX0gZWxzZSBpZiAoIWJlaGluZF9icmlkZ2UpIHsKLQkJLyogV2UgbmVlZCB0byBob29rIHVwIHRoZSBpbnRlcnJ1cHRzIGhlcmUgKi8KLQkJZm9yIChjbG9vcCA9IDA7IGNsb29wIDwgNDsgY2xvb3ArKykgewotCQkJaWYgKGlycXMudmFsaWRfSU5UICYgKDB4MDEgPDwgY2xvb3ApKSB7Ci0JCQkJcmMgPSBwY2llaHBfc2V0X2lycShmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwKLQkJCQkJCQkweDBBICsgY2xvb3AsIGlycXMuaW50ZXJydXB0W2Nsb29wXSk7Ci0JCQkJaWYgKHJjKSB7Ci0JCQkJCXBjaWVocF9kZXN0cm95X3Jlc291cmNlX2xpc3QgKCZ0ZW1wX3Jlc291cmNlcyk7Ci0JCQkJCXJldHVybl9yZXNvdXJjZSgmKHJlc291cmNlcy0+YnVzX2hlYWQpLCBob2xkX2J1c19ub2RlKTsKLQkJCQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5pb19oZWFkKSwgaG9sZF9JT19ub2RlKTsKLQkJCQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5tZW1faGVhZCksIGhvbGRfbWVtX25vZGUpOwotCQkJCQlyZXR1cm5fcmVzb3VyY2UoJihyZXNvdXJjZXMtPnBfbWVtX2hlYWQpLCBob2xkX3BfbWVtX25vZGUpOwotCQkJCQlyZXR1cm4gcmM7Ci0JCQkJfQotCQkJfQotCQl9CS8qIGVuZCBvZiBmb3IgbG9vcCAqLwotCX0KLQotCS8qIFJldHVybiB1bnVzZWQgYnVzIHJlc291cmNlcwotCSAqIEZpcnN0IHVzZSB0aGUgdGVtcG9yYXJ5IG5vZGUgdG8gc3RvcmUgaW5mb3JtYXRpb24gZm9yIHRoZSBib2FyZAotCSAqLwotCWlmIChob2xkX2J1c19ub2RlICYmIGJ1c19ub2RlICYmIHRlbXBfcmVzb3VyY2VzLmJ1c19oZWFkKSB7Ci0JCWhvbGRfYnVzX25vZGUtPmxlbmd0aCA9IGJ1c19ub2RlLT5iYXNlIC0gaG9sZF9idXNfbm9kZS0+YmFzZTsKLQotCQlob2xkX2J1c19ub2RlLT5uZXh0ID0gZnVuYy0+YnVzX2hlYWQ7Ci0JCWZ1bmMtPmJ1c19oZWFkID0gaG9sZF9idXNfbm9kZTsKLQotCQl0ZW1wX2J5dGUgPSAodTgpKHRlbXBfcmVzb3VyY2VzLmJ1c19oZWFkLT5iYXNlIC0gMSk7Ci0KLQkJLyogc2V0IHN1Ym9yZGluYXRlIGJ1cyAqLwotCQlkYmcoInJlLXNldCBzdWJvcmRpbmF0ZSBidXMgPSAweCV4XG4iLCB0ZW1wX2J5dGUpOwotCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX2J5dGUgKHBjaV9idXMsIGRldmZuLCBQQ0lfU1VCT1JESU5BVEVfQlVTLCB0ZW1wX2J5dGUpOwotCi0JCWlmICh0ZW1wX3Jlc291cmNlcy5idXNfaGVhZC0+bGVuZ3RoID09IDApIHsKLQkJCWtmcmVlKHRlbXBfcmVzb3VyY2VzLmJ1c19oZWFkKTsKLQkJCXRlbXBfcmVzb3VyY2VzLmJ1c19oZWFkID0gTlVMTDsKLQkJfSBlbHNlIHsKLQkJCWRiZygicmV0dXJuIGJ1cyByZXMgb2YgYjpkKDB4JXg6JXgpIGJhc2U6bGVuKDB4JXg6JXgpXG4iLAotCQkJCWZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCB0ZW1wX3Jlc291cmNlcy5idXNfaGVhZC0+YmFzZSwgdGVtcF9yZXNvdXJjZXMuYnVzX2hlYWQtPmxlbmd0aCk7Ci0JCQlyZXR1cm5fcmVzb3VyY2UoJihyZXNvdXJjZXMtPmJ1c19oZWFkKSwgdGVtcF9yZXNvdXJjZXMuYnVzX2hlYWQpOwotCQl9Ci0JfQotCi0JLyogSWYgd2UgaGF2ZSBJTyBzcGFjZSBhdmFpbGFibGUgYW5kIHRoZXJlIGlzIHNvbWUgbGVmdCwKLQkgKiByZXR1cm4gdGhlIHVudXNlZCBwb3J0aW9uCi0JICovCi0JaWYgKGhvbGRfSU9fbm9kZSAmJiB0ZW1wX3Jlc291cmNlcy5pb19oZWFkKSB7Ci0JCWlvX25vZGUgPSBkb19wcmVfYnJpZGdlX3Jlc291cmNlX3NwbGl0KCYodGVtcF9yZXNvdXJjZXMuaW9faGVhZCksCi0JCQkJCQkJJmhvbGRfSU9fbm9kZSwgMHgxMDAwKTsKLQotCQkvKiBDaGVjayBpZiB3ZSB3ZXJlIGFibGUgdG8gc3BsaXQgc29tZXRoaW5nIG9mZiAqLwotCQlpZiAoaW9fbm9kZSkgewotCQkJaG9sZF9JT19ub2RlLT5iYXNlID0gaW9fbm9kZS0+YmFzZSArIGlvX25vZGUtPmxlbmd0aDsKLQotCQkJUkVTX0NIRUNLKGhvbGRfSU9fbm9kZS0+YmFzZSwgOCk7Ci0JCQl0ZW1wX2J5dGUgPSAodTgpKChob2xkX0lPX25vZGUtPmJhc2UpID4+IDgpOwotCQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19ieXRlIChwY2lfYnVzLCBkZXZmbiwgUENJX0lPX0JBU0UsIHRlbXBfYnl0ZSk7Ci0KLQkJCXJldHVybl9yZXNvdXJjZSgmKHJlc291cmNlcy0+aW9faGVhZCksIGlvX25vZGUpOwotCQl9Ci0KLQkJaW9fbm9kZSA9IGRvX2JyaWRnZV9yZXNvdXJjZV9zcGxpdCgmKHRlbXBfcmVzb3VyY2VzLmlvX2hlYWQpLCAweDEwMDApOwotCi0JCS8qICBDaGVjayBpZiB3ZSB3ZXJlIGFibGUgdG8gc3BsaXQgc29tZXRoaW5nIG9mZiAqLwotCQlpZiAoaW9fbm9kZSkgewotCQkJLyogRmlyc3QgdXNlIHRoZSB0ZW1wb3Jhcnkgbm9kZSB0byBzdG9yZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGJvYXJkICovCi0JCQlob2xkX0lPX25vZGUtPmxlbmd0aCA9IGlvX25vZGUtPmJhc2UgLSBob2xkX0lPX25vZGUtPmJhc2U7Ci0KLQkJCS8qIElmIHdlIHVzZWQgYW55LCBhZGQgaXQgdG8gdGhlIGJvYXJkJ3MgbGlzdCAqLwotCQkJaWYgKGhvbGRfSU9fbm9kZS0+bGVuZ3RoKSB7Ci0JCQkJaG9sZF9JT19ub2RlLT5uZXh0ID0gZnVuYy0+aW9faGVhZDsKLQkJCQlmdW5jLT5pb19oZWFkID0gaG9sZF9JT19ub2RlOwotCi0JCQkJUkVTX0NIRUNLKGlvX25vZGUtPmJhc2UgLSAxLCA4KTsKLQkJCQl0ZW1wX2J5dGUgPSAodTgpKChpb19ub2RlLT5iYXNlIC0gMSkgPj4gOCk7Ci0JCQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19ieXRlIChwY2lfYnVzLCBkZXZmbiwgUENJX0lPX0xJTUlULCB0ZW1wX2J5dGUpOwotCi0JCQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5pb19oZWFkKSwgaW9fbm9kZSk7Ci0JCQl9IGVsc2UgewotCQkJCS8qIGl0IGRvZXNuJ3QgbmVlZCBhbnkgSU8gKi8KLQkJCQl0ZW1wX2J5dGUgPSAweDAwOwotCQkJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZShwY2lfYnVzLCBkZXZmbiwgUENJX0lPX0xJTUlULCB0ZW1wX2J5dGUpOwotCi0JCQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5pb19oZWFkKSwgaW9fbm9kZSk7Ci0JCQkJa2ZyZWUoaG9sZF9JT19ub2RlKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIGl0IHVzZWQgbW9zdCBvZiB0aGUgcmFuZ2UgKi8KLQkJCWhvbGRfSU9fbm9kZS0+bmV4dCA9IGZ1bmMtPmlvX2hlYWQ7Ci0JCQlmdW5jLT5pb19oZWFkID0gaG9sZF9JT19ub2RlOwotCQl9Ci0JfSBlbHNlIGlmIChob2xkX0lPX25vZGUpIHsKLQkJLyogaXQgdXNlZCB0aGUgd2hvbGUgcmFuZ2UgKi8KLQkJaG9sZF9JT19ub2RlLT5uZXh0ID0gZnVuYy0+aW9faGVhZDsKLQkJZnVuYy0+aW9faGVhZCA9IGhvbGRfSU9fbm9kZTsKLQl9Ci0KLQkvKiBJZiB3ZSBoYXZlIG1lbW9yeSBzcGFjZSBhdmFpbGFibGUgYW5kIHRoZXJlIGlzIHNvbWUgbGVmdCwKLQkgKiByZXR1cm4gdGhlIHVudXNlZCBwb3J0aW9uCi0JICovCi0JaWYgKGhvbGRfbWVtX25vZGUgJiYgdGVtcF9yZXNvdXJjZXMubWVtX2hlYWQpIHsKLQkJbWVtX25vZGUgPSBkb19wcmVfYnJpZGdlX3Jlc291cmNlX3NwbGl0KCYodGVtcF9yZXNvdXJjZXMubWVtX2hlYWQpLCAmaG9sZF9tZW1fbm9kZSwgMHgxMDAwMDBMKTsKLQotCQkvKiBDaGVjayBpZiB3ZSB3ZXJlIGFibGUgdG8gc3BsaXQgc29tZXRoaW5nIG9mZiAqLwotCQlpZiAobWVtX25vZGUpIHsKLQkJCWhvbGRfbWVtX25vZGUtPmJhc2UgPSBtZW1fbm9kZS0+YmFzZSArIG1lbV9ub2RlLT5sZW5ndGg7Ci0KLQkJCVJFU19DSEVDSyhob2xkX21lbV9ub2RlLT5iYXNlLCAxNik7Ci0JCQl0ZW1wX3dvcmQgPSAodTE2KSgoaG9sZF9tZW1fbm9kZS0+YmFzZSkgPj4gMTYpOwotCQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkIChwY2lfYnVzLCBkZXZmbiwgUENJX01FTU9SWV9CQVNFLCB0ZW1wX3dvcmQpOwotCi0JCQlyZXR1cm5fcmVzb3VyY2UoJihyZXNvdXJjZXMtPm1lbV9oZWFkKSwgbWVtX25vZGUpOwotCQl9Ci0KLQkJbWVtX25vZGUgPSBkb19icmlkZ2VfcmVzb3VyY2Vfc3BsaXQoJih0ZW1wX3Jlc291cmNlcy5tZW1faGVhZCksIDB4MTAwMDAwTCk7Ci0KLQkJLyogQ2hlY2sgaWYgd2Ugd2VyZSBhYmxlIHRvIHNwbGl0IHNvbWV0aGluZyBvZmYgKi8KLQkJaWYgKG1lbV9ub2RlKSB7Ci0JCQkvKiBGaXJzdCB1c2UgdGhlIHRlbXBvcmFyeSBub2RlIHRvIHN0b3JlIGluZm9ybWF0aW9uIGZvciB0aGUgYm9hcmQgKi8KLQkJCWhvbGRfbWVtX25vZGUtPmxlbmd0aCA9IG1lbV9ub2RlLT5iYXNlIC0gaG9sZF9tZW1fbm9kZS0+YmFzZTsKLQotCQkJaWYgKGhvbGRfbWVtX25vZGUtPmxlbmd0aCkgewotCQkJCWhvbGRfbWVtX25vZGUtPm5leHQgPSBmdW5jLT5tZW1faGVhZDsKLQkJCQlmdW5jLT5tZW1faGVhZCA9IGhvbGRfbWVtX25vZGU7Ci0KLQkJCQkvKiBjb25maWd1cmUgZW5kIGFkZHJlc3MgKi8KLQkJCQlSRVNfQ0hFQ0sobWVtX25vZGUtPmJhc2UgLSAxLCAxNik7Ci0JCQkJdGVtcF93b3JkID0gKHUxNikoKG1lbV9ub2RlLT5iYXNlIC0gMSkgPj4gMTYpOwotCQkJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfd29yZCAocGNpX2J1cywgZGV2Zm4sIFBDSV9NRU1PUllfTElNSVQsIHRlbXBfd29yZCk7Ci0KLQkJCQkvKiBSZXR1cm4gdW51c2VkIHJlc291cmNlcyB0byB0aGUgcG9vbCAqLwotCQkJCXJldHVybl9yZXNvdXJjZSgmKHJlc291cmNlcy0+bWVtX2hlYWQpLCBtZW1fbm9kZSk7Ci0JCQl9IGVsc2UgewotCQkJCS8qIGl0IGRvZXNuJ3QgbmVlZCBhbnkgTWVtICovCi0JCQkJdGVtcF93b3JkID0gMHgwMDAwOwotCQkJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfd29yZCAocGNpX2J1cywgZGV2Zm4sIFBDSV9NRU1PUllfTElNSVQsIHRlbXBfd29yZCk7Ci0KLQkJCQlyZXR1cm5fcmVzb3VyY2UoJihyZXNvdXJjZXMtPm1lbV9oZWFkKSwgbWVtX25vZGUpOwotCQkJCWtmcmVlKGhvbGRfbWVtX25vZGUpOwotCQkJfQotCQl9IGVsc2UgewotCQkJLyogaXQgdXNlZCBtb3N0IG9mIHRoZSByYW5nZSAqLwotCQkJaG9sZF9tZW1fbm9kZS0+bmV4dCA9IGZ1bmMtPm1lbV9oZWFkOwotCQkJZnVuYy0+bWVtX2hlYWQgPSBob2xkX21lbV9ub2RlOwotCQl9Ci0JfSBlbHNlIGlmIChob2xkX21lbV9ub2RlKSB7Ci0JCS8qIGl0IHVzZWQgdGhlIHdob2xlIHJhbmdlICovCi0JCWhvbGRfbWVtX25vZGUtPm5leHQgPSBmdW5jLT5tZW1faGVhZDsKLQkJZnVuYy0+bWVtX2hlYWQgPSBob2xkX21lbV9ub2RlOwotCX0KLQotCS8qIElmIHdlIGhhdmUgcHJlZmV0Y2hhYmxlIG1lbW9yeSBzcGFjZSBhdmFpbGFibGUgYW5kIHRoZXJlIGlzIHNvbWUgCi0JICogbGVmdCBhdCB0aGUgZW5kLCByZXR1cm4gdGhlIHVudXNlZCBwb3J0aW9uCi0JICovCi0JaWYgKGhvbGRfcF9tZW1fbm9kZSAmJiB0ZW1wX3Jlc291cmNlcy5wX21lbV9oZWFkKSB7Ci0JCXBfbWVtX25vZGUgPSBkb19wcmVfYnJpZGdlX3Jlc291cmNlX3NwbGl0KCYodGVtcF9yZXNvdXJjZXMucF9tZW1faGVhZCksCi0JCQkJCQkJCSZob2xkX3BfbWVtX25vZGUsIDB4MTAwMDAwTCk7Ci0KLQkJLyogQ2hlY2sgaWYgd2Ugd2VyZSBhYmxlIHRvIHNwbGl0IHNvbWV0aGluZyBvZmYgKi8KLQkJaWYgKHBfbWVtX25vZGUpIHsKLQkJCWhvbGRfcF9tZW1fbm9kZS0+YmFzZSA9IHBfbWVtX25vZGUtPmJhc2UgKyBwX21lbV9ub2RlLT5sZW5ndGg7Ci0KLQkJCVJFU19DSEVDSyhob2xkX3BfbWVtX25vZGUtPmJhc2UsIDE2KTsKLQkJCXRlbXBfd29yZCA9ICh1MTYpKChob2xkX3BfbWVtX25vZGUtPmJhc2UpID4+IDE2KTsKLQkJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfd29yZCAocGNpX2J1cywgZGV2Zm4sIFBDSV9QUkVGX01FTU9SWV9CQVNFLCB0ZW1wX3dvcmQpOwotCi0JCQlyZXR1cm5fcmVzb3VyY2UoJihyZXNvdXJjZXMtPnBfbWVtX2hlYWQpLCBwX21lbV9ub2RlKTsKLQkJfQotCi0JCXBfbWVtX25vZGUgPSBkb19icmlkZ2VfcmVzb3VyY2Vfc3BsaXQoJih0ZW1wX3Jlc291cmNlcy5wX21lbV9oZWFkKSwgMHgxMDAwMDBMKTsKLQotCQkvKiBDaGVjayBpZiB3ZSB3ZXJlIGFibGUgdG8gc3BsaXQgc29tZXRoaW5nIG9mZiAqLwotCQlpZiAocF9tZW1fbm9kZSkgewotCQkJLyogRmlyc3QgdXNlIHRoZSB0ZW1wb3Jhcnkgbm9kZSB0byBzdG9yZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGJvYXJkICovCi0JCQlob2xkX3BfbWVtX25vZGUtPmxlbmd0aCA9IHBfbWVtX25vZGUtPmJhc2UgLSBob2xkX3BfbWVtX25vZGUtPmJhc2U7Ci0KLQkJCS8qIElmIHdlIHVzZWQgYW55LCBhZGQgaXQgdG8gdGhlIGJvYXJkJ3MgbGlzdCAqLwotCQkJaWYgKGhvbGRfcF9tZW1fbm9kZS0+bGVuZ3RoKSB7Ci0JCQkJaG9sZF9wX21lbV9ub2RlLT5uZXh0ID0gZnVuYy0+cF9tZW1faGVhZDsKLQkJCQlmdW5jLT5wX21lbV9oZWFkID0gaG9sZF9wX21lbV9ub2RlOwotCi0JCQkJUkVTX0NIRUNLKHBfbWVtX25vZGUtPmJhc2UgLSAxLCAxNik7Ci0JCQkJdGVtcF93b3JkID0gKHUxNikoKHBfbWVtX25vZGUtPmJhc2UgLSAxKSA+PiAxNik7Ci0JCQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkIChwY2lfYnVzLCBkZXZmbiwgUENJX1BSRUZfTUVNT1JZX0xJTUlULCB0ZW1wX3dvcmQpOwotCi0JCQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5wX21lbV9oZWFkKSwgcF9tZW1fbm9kZSk7Ci0JCQl9IGVsc2UgewotCQkJCS8qIGl0IGRvZXNuJ3QgbmVlZCBhbnkgUE1lbSAqLwotCQkJCXRlbXBfd29yZCA9IDB4MDAwMDsKLQkJCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQgKHBjaV9idXMsIGRldmZuLCBQQ0lfUFJFRl9NRU1PUllfTElNSVQsIHRlbXBfd29yZCk7Ci0KLQkJCQlyZXR1cm5fcmVzb3VyY2UoJihyZXNvdXJjZXMtPnBfbWVtX2hlYWQpLCBwX21lbV9ub2RlKTsKLQkJCQlrZnJlZShob2xkX3BfbWVtX25vZGUpOwotCQkJfQotCQl9IGVsc2UgewotCQkJLyogaXQgdXNlZCB0aGUgbW9zdCBvZiB0aGUgcmFuZ2UgKi8KLQkJCWhvbGRfcF9tZW1fbm9kZS0+bmV4dCA9IGZ1bmMtPnBfbWVtX2hlYWQ7Ci0JCQlmdW5jLT5wX21lbV9oZWFkID0gaG9sZF9wX21lbV9ub2RlOwotCQl9Ci0JfSBlbHNlIGlmIChob2xkX3BfbWVtX25vZGUpIHsKLQkJLyogaXQgdXNlZCB0aGUgd2hvbGUgcmFuZ2UgKi8KLQkJaG9sZF9wX21lbV9ub2RlLT5uZXh0ID0gZnVuYy0+cF9tZW1faGVhZDsKLQkJZnVuYy0+cF9tZW1faGVhZCA9IGhvbGRfcF9tZW1fbm9kZTsKLQl9Ci0KLQkvKiBXZSBzaG91bGQgYmUgY29uZmlndXJpbmcgYW4gSVJRIGFuZCB0aGUgYnJpZGdlJ3MgYmFzZSBhZGRyZXNzCi0JICogcmVnaXN0ZXJzIGlmIGl0IG5lZWRzIHRoZW0uICBBbHRob3VnaCB3ZSBoYXZlIG5ldmVyIHNlZW4gc3VjaAotCSAqIGEgZGV2aWNlCi0JICovCi0KLQlwY2llaHBybV9lbmFibGVfY2FyZChjdHJsLCBmdW5jLCBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKTsKLQotCWRiZygiUENJIEJyaWRnZSBIb3QtQWRkZWQgczpiOmQ6ZiglMDJ4OiUwMng6JTAyeDolMDJ4KVxuIiwgY3RybC0+c2VnLCBmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGNvbmZpZ3VyZV9uZXdfZnVuY3Rpb24gLSBDb25maWd1cmVzIHRoZSBQQ0kgaGVhZGVyIGluZm9ybWF0aW9uIG9mIG9uZSBkZXZpY2UKLSAqCi0gKiBAY3RybDogcG9pbnRlciB0byBjb250cm9sbGVyIHN0cnVjdHVyZQotICogQGZ1bmM6IHBvaW50ZXIgdG8gZnVuY3Rpb24gc3RydWN0dXJlCi0gKiBAYmVoaW5kX2JyaWRnZTogMSBpZiB0aGlzIGlzIGEgcmVjdXJzaXZlIGNhbGwsIDAgaWYgbm90Ci0gKiBAcmVzb3VyY2VzOiBwb2ludGVyIHRvIHNldCBvZiByZXNvdXJjZSBsaXN0cwotICoKLSAqIENhbGxzIGl0c2VsZiByZWN1cnNpdmVseSBmb3IgYnJpZGdlZCBkZXZpY2VzLgotICogUmV0dXJucyAwIGlmIHN1Y2Nlc3MKLSAqCi0gKi8KLXN0YXRpYyBpbnQKLWNvbmZpZ3VyZV9uZXdfZnVuY3Rpb24oc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHN0cnVjdCBwY2lfZnVuYyAqZnVuYywKLQkJdTggYmVoaW5kX2JyaWRnZSwgc3RydWN0IHJlc291cmNlX2xpc3RzICpyZXNvdXJjZXMsCi0JCXU4IGJyaWRnZV9idXMsIHU4IGJyaWRnZV9kZXYpCi17Ci0JaW50IGNsb29wOwotCXU4IHRlbXBfYnl0ZTsKLQl1OCBjbGFzc19jb2RlOwotCXUzMiByYzsKLQl1MzIgdGVtcF9yZWdpc3RlcjsKLQl1MzIgYmFzZTsKLQl1bnNpZ25lZCBpbnQgZGV2Zm47Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqbWVtX25vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqaW9fbm9kZTsKLQlzdHJ1Y3QgcGNpX2J1cyBscGNpX2J1cywgKnBjaV9idXM7Ci0KLQltZW1jcHkoJmxwY2lfYnVzLCBjdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZSwgc2l6ZW9mKGxwY2lfYnVzKSk7Ci0JcGNpX2J1cyA9ICZscGNpX2J1czsKLQlwY2lfYnVzLT5udW1iZXIgPSBmdW5jLT5idXM7Ci0JZGV2Zm4gPSBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0KLQkvKiBDaGVjayBmb3IgQnJpZGdlICovCi0JcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywgZGV2Zm4sIFBDSV9IRUFERVJfVFlQRSwgJnRlbXBfYnl0ZSk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0JZGJnKCIlczogYnVzICV4IGRldiAleCBmdW5jICV4IHRlbXBfYnl0ZSA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sCi0JCWZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbiwgdGVtcF9ieXRlKTsKLQotCWlmICgodGVtcF9ieXRlICYgMHg3RikgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgeyAvKiBQQ0ktUENJIEJyaWRnZSAqLwotCQlyYyA9IGNvbmZpZ3VyZV9uZXdfYnJpZGdlKGN0cmwsIGZ1bmMsIGJlaGluZF9icmlkZ2UsIHJlc291cmNlcywKLQkJCQkJCXBjaV9idXMpOwotCi0JCWlmIChyYykKLQkJCXJldHVybiByYzsKLQl9IGVsc2UgaWYgKCh0ZW1wX2J5dGUgJiAweDdGKSA9PSBQQ0lfSEVBREVSX1RZUEVfTk9STUFMKSB7Ci0JCS8qIFN0YW5kYXJkIGRldmljZSAqLwotCQl1NjQJYmFzZTY0OwotCQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShwY2lfYnVzLCBkZXZmbiwgMHgwQiwgJmNsYXNzX2NvZGUpOwotCi0JCWlmIChjbGFzc19jb2RlID09IFBDSV9CQVNFX0NMQVNTX0RJU1BMQVkpCi0JCQlyZXR1cm4gREVWSUNFX1RZUEVfTk9UX1NVUFBPUlRFRDsKLQotCQkvKiBGaWd1cmUgb3V0IElPIGFuZCBtZW1vcnkgbmVlZHMgKi8KLQkJZm9yIChjbG9vcCA9IFBDSV9CQVNFX0FERFJFU1NfMDsgY2xvb3AgPD0gUENJX0JBU0VfQUREUkVTU181OyBjbG9vcCArPSA0KSB7Ci0JCQl0ZW1wX3JlZ2lzdGVyID0gMHhGRkZGRkZGRjsKLQotCQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19kd29yZCAocGNpX2J1cywgZGV2Zm4sIGNsb29wLCB0ZW1wX3JlZ2lzdGVyKTsKLQkJCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ19kd29yZChwY2lfYnVzLCBkZXZmbiwgY2xvb3AsICZ0ZW1wX3JlZ2lzdGVyKTsKLQkJCWRiZygiQmFyWyV4XT0weCV4IG9uIGJ1czpkZXY6ZnVuYygweCV4OiV4OiV4KVxuIiwgY2xvb3AsIHRlbXBfcmVnaXN0ZXIsIAotCQkJCWZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0KLQkJCWlmICghdGVtcF9yZWdpc3RlcikKLQkJCQljb250aW51ZTsKLQotCQkJYmFzZTY0ID0gMEw7Ci0JCQlpZiAodGVtcF9yZWdpc3RlciAmIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pIHsKLQkJCQkvKiBNYXAgSU8gKi8KLQotCQkJCS8qIHNldCBiYXNlID0gYW1vdW50IG9mIElPIHNwYWNlICovCi0JCQkJYmFzZSA9IHRlbXBfcmVnaXN0ZXIgJiAweEZGRkZGRkZDOwotCQkJCWJhc2UgPSB+YmFzZSArIDE7Ci0KLQkJCQlkYmcoIk5FRUQgSU8gbGVuZ3RoKDB4JXgpXG4iLCBiYXNlKTsKLQkJCQlpb19ub2RlID0gZ2V0X2lvX3Jlc291cmNlKCYocmVzb3VyY2VzLT5pb19oZWFkKSwodWxvbmcpYmFzZSk7Ci0KLQkJCQkvKiBhbGxvY2F0ZSB0aGUgcmVzb3VyY2UgdG8gdGhlIGJvYXJkICovCi0JCQkJaWYgKGlvX25vZGUpIHsKLQkJCQkJZGJnKCJHb3QgSU8gYmFzZT0weCV4KGxlbmd0aD0weCV4KVxuIiwgaW9fbm9kZS0+YmFzZSwgaW9fbm9kZS0+bGVuZ3RoKTsKLQkJCQkJYmFzZSA9ICh1MzIpaW9fbm9kZS0+YmFzZTsKLQkJCQkJaW9fbm9kZS0+bmV4dCA9IGZ1bmMtPmlvX2hlYWQ7Ci0JCQkJCWZ1bmMtPmlvX2hlYWQgPSBpb19ub2RlOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWVycigiR290IE5PIElPIHJlc291cmNlKGxlbmd0aD0weCV4KVxuIiwgYmFzZSk7Ci0JCQkJCXJldHVybiAtRU5PTUVNOwotCQkJCX0KLQkJCX0gZWxzZSB7CS8qIG1hcCBNRU0gKi8KLQkJCQlpbnQgcHJlZmV0Y2hhYmxlID0gMTsKLQkJCQlzdHJ1Y3QgcGNpX3Jlc291cmNlICoqcmVzX25vZGUgPSAmZnVuYy0+cF9tZW1faGVhZDsKLQkJCQljaGFyICpyZXNfdHlwZV9zdHIgPSAiUE1FTSI7Ci0JCQkJdTMyCXRlbXBfcmVnaXN0ZXIyOwotCi0JCQkJaWYgKCEodGVtcF9yZWdpc3RlciAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX1BSRUZFVENIKSkgewotCQkJCQlwcmVmZXRjaGFibGUgPSAwOwotCQkJCQlyZXNfbm9kZSA9ICZmdW5jLT5tZW1faGVhZDsKLQkJCQkJcmVzX3R5cGVfc3RyKys7Ci0JCQkJfQotCi0JCQkJYmFzZSA9IHRlbXBfcmVnaXN0ZXIgJiAweEZGRkZGRkYwOwotCQkJCWJhc2UgPSB+YmFzZSArIDE7Ci0KLQkJCQlzd2l0Y2ggKHRlbXBfcmVnaXN0ZXIgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFX01BU0spIHsKLQkJCQljYXNlIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfMzI6Ci0JCQkJCWRiZygiTkVFRCAzMiAlcyBiYXI9MHgleChsZW5ndGg9MHgleClcbiIsIHJlc190eXBlX3N0ciwgdGVtcF9yZWdpc3RlciwgYmFzZSk7Ci0KLQkJCQkJaWYgKHByZWZldGNoYWJsZSAmJiByZXNvdXJjZXMtPnBfbWVtX2hlYWQpCi0JCQkJCQltZW1fbm9kZT1nZXRfcmVzb3VyY2UoJihyZXNvdXJjZXMtPnBfbWVtX2hlYWQpLCAodWxvbmcpYmFzZSk7Ci0JCQkJCWVsc2UgewotCQkJCQkJaWYgKHByZWZldGNoYWJsZSkKLQkJCQkJCQlkYmcoInVzaW5nIE1FTSBmb3IgUE1FTVxuIik7Ci0JCQkJCQltZW1fbm9kZSA9IGdldF9yZXNvdXJjZSgmKHJlc291cmNlcy0+bWVtX2hlYWQpLCAodWxvbmcpYmFzZSk7Ci0JCQkJCX0KLQotCQkJCQkvKiBhbGxvY2F0ZSB0aGUgcmVzb3VyY2UgdG8gdGhlIGJvYXJkICovCi0JCQkJCWlmIChtZW1fbm9kZSkgewotCQkJCQkJYmFzZSA9ICh1MzIpbWVtX25vZGUtPmJhc2U7IAotCQkJCQkJbWVtX25vZGUtPm5leHQgPSAqcmVzX25vZGU7Ci0JCQkJCQkqcmVzX25vZGUgPSBtZW1fbm9kZTsKLQkJCQkJCWRiZygiR290IDMyICVzIGJhc2U9MHgleChsZW5ndGg9MHgleClcbiIsIHJlc190eXBlX3N0ciwgbWVtX25vZGUtPmJhc2UsIAotCQkJCQkJCW1lbV9ub2RlLT5sZW5ndGgpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJZXJyKCJHb3QgTk8gMzIgJXMgcmVzb3VyY2UobGVuZ3RoPTB4JXgpXG4iLCByZXNfdHlwZV9zdHIsIGJhc2UpOwotCQkJCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzY0OgotCQkJCQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQocGNpX2J1cywgZGV2Zm4sIGNsb29wKzQsICZ0ZW1wX3JlZ2lzdGVyMik7Ci0JCQkJCWRiZygiTkVFRCA2NCAlcyBiYXI9MHgleDoleChsZW5ndGg9MHgleClcbiIsIHJlc190eXBlX3N0ciwgdGVtcF9yZWdpc3RlcjIsIAotCQkJCQkJdGVtcF9yZWdpc3RlciwgYmFzZSk7Ci0KLQkJCQkJaWYgKHByZWZldGNoYWJsZSAmJiByZXNvdXJjZXMtPnBfbWVtX2hlYWQpCi0JCQkJCQltZW1fbm9kZSA9IGdldF9yZXNvdXJjZSgmKHJlc291cmNlcy0+cF9tZW1faGVhZCksICh1bG9uZyliYXNlKTsKLQkJCQkJZWxzZSB7Ci0JCQkJCQlpZiAocHJlZmV0Y2hhYmxlKQotCQkJCQkJCWRiZygidXNpbmcgTUVNIGZvciBQTUVNXG4iKTsKLQkJCQkJCW1lbV9ub2RlID0gZ2V0X3Jlc291cmNlKCYocmVzb3VyY2VzLT5tZW1faGVhZCksICh1bG9uZyliYXNlKTsKLQkJCQkJfQotCi0JCQkJCS8qIGFsbG9jYXRlIHRoZSByZXNvdXJjZSB0byB0aGUgYm9hcmQgKi8KLQkJCQkJaWYgKG1lbV9ub2RlKSB7Ci0JCQkJCQliYXNlNjQgPSBtZW1fbm9kZS0+YmFzZTsgCi0JCQkJCQltZW1fbm9kZS0+bmV4dCA9ICpyZXNfbm9kZTsKLQkJCQkJCSpyZXNfbm9kZSA9IG1lbV9ub2RlOwotCQkJCQkJZGJnKCJHb3QgNjQgJXMgYmFzZT0weCV4OiV4KGxlbmd0aD0leClcbiIsIHJlc190eXBlX3N0ciwgKHUzMikoYmFzZTY0ID4+IDMyKSwgCi0JCQkJCQkJKHUzMiliYXNlNjQsIG1lbV9ub2RlLT5sZW5ndGgpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJZXJyKCJHb3QgTk8gNjQgJXMgcmVzb3VyY2UobGVuZ3RoPTB4JXgpXG4iLCByZXNfdHlwZV9zdHIsIGJhc2UpOwotCQkJCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJZGJnKCJyZXNlcnZlZCBCQVIgdHlwZT0weCV4XG4iLCB0ZW1wX3JlZ2lzdGVyKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQl9Ci0KLQkJCWlmIChiYXNlNjQpIHsKLQkJCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX2R3b3JkKHBjaV9idXMsIGRldmZuLCBjbG9vcCwgKHUzMiliYXNlNjQpOwotCQkJCWNsb29wICs9IDQ7Ci0JCQkJYmFzZTY0ID4+PSAzMjsKLQotCQkJCWlmIChiYXNlNjQpIHsKLQkJCQkJZGJnKCIlczogaGlnaCBkd29yZCBvZiBiYXNlNjQoMHgleCkgc2V0IHRvIDBcbiIsIF9fRlVOQ1RJT05fXywgKHUzMiliYXNlNjQpOwotCQkJCQliYXNlNjQgPSAweDBMOwotCQkJCX0KLQotCQkJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfZHdvcmQocGNpX2J1cywgZGV2Zm4sIGNsb29wLCAodTMyKWJhc2U2NCk7Ci0JCQl9IGVsc2UgewotCQkJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfZHdvcmQocGNpX2J1cywgZGV2Zm4sIGNsb29wLCBiYXNlKTsKLQkJCX0KLQkJfQkJLyogRW5kIG9mIGJhc2UgcmVnaXN0ZXIgbG9vcCAqLwotCi0JCS8qIGRpc2FibGUgUk9NIGJhc2UgQWRkcmVzcyAqLwotCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX2R3b3JkIChwY2lfYnVzLCBkZXZmbiwgUENJX1JPTV9BRERSRVNTLCAweDAwKTsKLQotCQkvKiBTZXQgSFAgcGFyYW1ldGVycyAoQ2FjaGUgTGluZSBTaXplLCBMYXRlbmN5IFRpbWVyKSAqLwotCQlyYyA9IHBjaWVocHJtX3NldF9ocHAoY3RybCwgZnVuYywgUENJX0hFQURFUl9UWVBFX05PUk1BTCk7Ci0JCWlmIChyYykKLQkJCXJldHVybiByYzsKLQotCQlwY2llaHBybV9lbmFibGVfY2FyZChjdHJsLCBmdW5jLCBQQ0lfSEVBREVSX1RZUEVfTk9STUFMKTsKLQotCQlkYmcoIlBDSSBmdW5jdGlvbiBIb3QtQWRkZWQgczpiOmQ6ZiglMDJ4OiUwMng6JTAyeDolMDJ4KVxuIiwgY3RybC0+c2VnLCBmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwgCi0JCQlmdW5jLT5mdW5jdGlvbik7Ci0JfSAgLyogRW5kIG9mIE5vdC1BLUJyaWRnZSBlbHNlICovCi0JZWxzZSB7Ci0JCS8qIEl0J3Mgc29tZSBzdHJhbmdlIHR5cGUgb2YgUENJIGFkYXB0ZXIgKENhcmRidXM/KSAqLwotCQlyZXR1cm4gREVWSUNFX1RZUEVfTk9UX1NVUFBPUlRFRDsKLQl9Ci0KLQlmdW5jLT5jb25maWd1cmVkID0gMTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYwppbmRleCA3YTBlMjdmLi40YTNjZWNjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKQEAgLTI3LDE2ICsyNywxMCBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgIi4uL3BjaS5oIgogI2luY2x1ZGUgInBjaWVocC5oIgogCkBAIC0yMTcsMjMgKzIxMSw2IEBACiAjZGVmaW5lIE1STF9TVEFURQkJMHgwMDIwCiAjZGVmaW5lIFBSU05fU1RBVEUJCTB4MDA0MAogCi1zdHJ1Y3QgcGhwX2N0bHJfc3RhdGVfcyB7Ci0Jc3RydWN0IHBocF9jdGxyX3N0YXRlX3MgKnBuZXh0OwotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwotCXVuc2lnbmVkIGludCBpcnE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsJCQkJLyogc3BpbmxvY2sncyAqLwotCXUzMiBzbG90X2RldmljZV9vZmZzZXQ7Ci0JdTMyIG51bV9zbG90czsKLSAgICAJc3RydWN0IHRpbWVyX2xpc3QJaW50X3BvbGxfdGltZXI7CQkvKiBBZGRlZCBmb3IgcG9sbCBldmVudCAqLwotCXBocF9pbnRyX2NhbGxiYWNrX3QgCWF0dGVudGlvbl9idXR0b25fY2FsbGJhY2s7Ci0JcGhwX2ludHJfY2FsbGJhY2tfdCAJc3dpdGNoX2NoYW5nZV9jYWxsYmFjazsKLQlwaHBfaW50cl9jYWxsYmFja190IAlwcmVzZW5jZV9jaGFuZ2VfY2FsbGJhY2s7Ci0JcGhwX2ludHJfY2FsbGJhY2tfdCAJcG93ZXJfZmF1bHRfY2FsbGJhY2s7Ci0Jdm9pZCAJCQkqY2FsbGJhY2tfaW5zdGFuY2VfaWQ7Ci0Jc3RydWN0IGN0cmxfcmVnIAkqY3JlZzsJCQkJLyogUHRyIHRvIGNvbnRyb2xsZXIgcmVnaXN0ZXIgc3BhY2UgKi8KLX07Ci0KLQogc3RhdGljIHNwaW5sb2NrX3QgaHBjX2V2ZW50X2xvY2s7CiAKIERFRklORV9EQkdfQlVGRkVSCQkvKiBEZWJ1ZyBzdHJpbmcgYnVmZmVyIGZvciBlbnRpcmUgSFBDIGRlZmluZWQgaGVyZSAqLwpAQCAtMjk3LDcgKzI3NCw2IEBACiAKIAlEQkdfRU5URVJfUk9VVElORSAKIAkKLQlkYmcoIiVzIDogRW50ZXJcbiIsIF9fRlVOQ1RJT05fXyk7CiAJaWYgKCFwaHBfY3RscikgewogCQllcnIoIiVzOiBJbnZhbGlkIEhQQyBjb250cm9sbGVyIGhhbmRsZSFcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAtMTsKQEAgLTMwOCw3ICsyODQsNiBAQAogCQkJZXJyKCIlcyA6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX1NUQVRVUyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCQlyZXR1cm4gcmV0dmFsOwogCQl9Ci0JZGJnKCIlcyA6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX1NUQVRVUyAleFxuIiwgX19GVU5DVElPTl9fLCBzbG90X3N0YXR1cyk7CiAJCiAJaWYgKChzbG90X3N0YXR1cyAmIENNRF9DT01QTEVURUQpID09IENNRF9DT01QTEVURUQgKSB7IAogCQkvKiBBZnRlciAxIHNlYyBhbmQgQ01EX0NPTVBMRVRFRCBzdGlsbCBub3Qgc2V0LCBqdXN0IHByb2NlZWQgZm9yd2FyZCB0byBpc3N1ZSAKQEAgLTMxNiwxNCArMjkxLDExIEBACiAJCWRiZygiJXMgOiBDTURfQ09NUExFVEVEIG5vdCBjbGVhciBhZnRlciAxIHNlYy5cbiIsIF9fRlVOQ1RJT05fXyk7CiAJfQogCi0JZGJnKCIlczogQmVmb3JlIGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQgU0xPVF9DVFJMICV4XG4iLCBfX0ZVTkNUSU9OX18sIGNtZCk7CiAJcmV0dmFsID0gaHBfcmVnaXN0ZXJfd3JpdGVfd29yZChwaHBfY3Rsci0+cGNpX2RldiwgU0xPVF9DVFJMKHNsb3QtPmN0cmwtPmNhcF9iYXNlKSwgY21kIHwgQ01EX0NNUExfSU5UUl9FTkFCTEUpOwogCWlmIChyZXR2YWwpIHsKIAkJZXJyKCIlcyA6IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQgU0xPVF9DVFJMIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9Ci0JZGJnKCIlcyA6IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQgU0xPVF9DVFJMICV4XG4iLCBfX0ZVTkNUSU9OX18sIGNtZCB8IENNRF9DTVBMX0lOVFJfRU5BQkxFKTsKLQlkYmcoIiVzIDogRXhpdFxuIiwgX19GVU5DVElPTl9fKTsKIAogCURCR19MRUFWRV9ST1VUSU5FIAogCXJldHVybiByZXR2YWw7CkBAIC01MDksNyArNDgxLDYgQEAKIAl1MTYgc2xvdF9zdGF0dXM7CiAJdTggcHdyX2ZhdWx0OwogCWludCByZXR2YWwgPSAwOwotCXU4IHN0YXR1czsKIAogCURCR19FTlRFUl9ST1VUSU5FIAogCkBAIC01MjEsMTUgKzQ5MiwxMyBAQAogCXJldHZhbCA9IGhwX3JlZ2lzdGVyX3JlYWRfd29yZChwaHBfY3Rsci0+cGNpX2RldiwgU0xPVF9TVEFUVVMoc2xvdC0+Y3RybC0+Y2FwX2Jhc2UpLCBzbG90X3N0YXR1cyk7CiAKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigiJXMgOiBocF9yZWdpc3Rlcl9yZWFkX3dvcmQgU0xPVF9TVEFUVVMgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQllcnIoIiVzIDogQ2Fubm90IGNoZWNrIGZvciBwb3dlciBmYXVsdFxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAJcHdyX2ZhdWx0ID0gKHU4KSgoc2xvdF9zdGF0dXMgJiBQV1JfRkFVTFRfREVURUNURUQpID4+IDEpOwotCXN0YXR1cyA9IChwd3JfZmF1bHQgIT0gMSkgPyAxIDogMDsKIAkKIAlEQkdfTEVBVkVfUk9VVElORQotCS8qIE5vdGU6IExvZ2ljIDAgPT4gZmF1bHQgKi8KLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiBwd3JfZmF1bHQ7CiB9CiAKIHN0YXRpYyBpbnQgaHBjX3NldF9hdHRlbnRpb25fc3RhdHVzKHN0cnVjdCBzbG90ICpzbG90LCB1OCB2YWx1ZSkKQEAgLTUzOSw3ICs1MDgsOCBAQAogCXUxNiBzbG90X2N0cmw7CiAJaW50IHJjID0gMDsKIAotCWRiZygiJXM6IFxuIiwgX19GVU5DVElPTl9fKTsKKwlEQkdfRU5URVJfUk9VVElORQorCiAJaWYgKCFwaHBfY3RscikgewogCQllcnIoIiVzOiBJbnZhbGlkIEhQQyBjb250cm9sbGVyIGhhbmRsZSFcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAtMTsKQEAgLTU1NSw3ICs1MjUsNiBAQAogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiByYzsKIAl9Ci0JZGJnKCIlcyA6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX0NUUkwgJXhcbiIsIF9fRlVOQ1RJT05fXywgc2xvdF9jdHJsKTsKIAogCXN3aXRjaCAodmFsdWUpIHsKIAkJY2FzZSAwIDoJLyogdHVybiBvZmYgKi8KQEAgLTU3Niw2ICs1NDUsNyBAQAogCXBjaWVfd3JpdGVfY21kKHNsb3QsIHNsb3RfY21kKTsKIAlkYmcoIiVzOiBTTE9UX0NUUkwgJXggd3JpdGUgY21kICV4XG4iLCBfX0ZVTkNUSU9OX18sIFNMT1RfQ1RSTChzbG90LT5jdHJsLT5jYXBfYmFzZSksIHNsb3RfY21kKTsKIAkKKwlEQkdfTEVBVkVfUk9VVElORQogCXJldHVybiByYzsKIH0KIApAQCAtNTg3LDcgKzU1Nyw4IEBACiAJdTE2IHNsb3RfY3RybDsKIAlpbnQgcmMgPSAwOwogICAgICAgIAkKLQlkYmcoIiVzOiBcbiIsIF9fRlVOQ1RJT05fXyk7CQorCURCR19FTlRFUl9ST1VUSU5FCisKIAlpZiAoIXBocF9jdGxyKSB7CiAJCWVycigiJXM6IEludmFsaWQgSFBDIGNvbnRyb2xsZXIgaGFuZGxlIVxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIDsKQEAgLTYwNCw3ICs1NzUsNiBAQAogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybjsKIAl9Ci0JZGJnKCIlcyA6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX0NUUkwgJXhcbiIsIF9fRlVOQ1RJT05fXywgc2xvdF9jdHJsKTsKIAlzbG90X2NtZCA9IChzbG90X2N0cmwgJiB+UFdSX0xFRF9DVFJMKSB8IDB4MDEwMDsKIAlpZiAoIXBjaWVocF9wb2xsX21vZGUpCiAJCXNsb3RfY21kID0gc2xvdF9jbWQgfCBIUF9JTlRSX0VOQUJMRTsgCkBAIC02MTIsNiArNTgyLDcgQEAKIAlwY2llX3dyaXRlX2NtZChzbG90LCBzbG90X2NtZCk7CiAKIAlkYmcoIiVzOiBTTE9UX0NUUkwgJXggd3JpdGUgY21kICV4XG4iLF9fRlVOQ1RJT05fXywgU0xPVF9DVFJMKHNsb3QtPmN0cmwtPmNhcF9iYXNlKSwgc2xvdF9jbWQpOworCURCR19MRUFWRV9ST1VUSU5FCiAJcmV0dXJuOwogfQogCkBAIC02MjIsNyArNTkzLDggQEAKIAl1MTYgc2xvdF9jdHJsOwogCWludCByYyA9IDA7CiAKLQlkYmcoIiVzOiBcbiIsIF9fRlVOQ1RJT05fXyk7CQorCURCR19FTlRFUl9ST1VUSU5FCisKIAlpZiAoIXBocF9jdGxyKSB7CiAJCWVycigiJXM6IEludmFsaWQgSFBDIGNvbnRyb2xsZXIgaGFuZGxlIVxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIDsKQEAgLTYzOSw3ICs2MTEsNiBAQAogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybjsKIAl9Ci0JZGJnKCIlcyA6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX0NUUkwgJXhcbiIsIF9fRlVOQ1RJT05fXywgc2xvdF9jdHJsKTsKIAogCXNsb3RfY21kID0gKHNsb3RfY3RybCAmIH5QV1JfTEVEX0NUUkwpIHwgMHgwMzAwOwogCkBAIC02NDgsNiArNjE5LDcgQEAKIAlwY2llX3dyaXRlX2NtZChzbG90LCBzbG90X2NtZCk7CiAJZGJnKCIlczogU0xPVF9DVFJMICV4IHdyaXRlIGNtZCAleFxuIiwgX19GVU5DVElPTl9fLCBTTE9UX0NUUkwoc2xvdC0+Y3RybC0+Y2FwX2Jhc2UpLCBzbG90X2NtZCk7CiAKKwlEQkdfTEVBVkVfUk9VVElORQogCXJldHVybjsKIH0KIApAQCAtNjU4LDcgKzYzMCw4IEBACiAJdTE2IHNsb3RfY3RybDsKIAlpbnQgcmMgPSAwOyAKIAkKLQlkYmcoIiVzOiBcbiIsIF9fRlVOQ1RJT05fXyk7CQorCURCR19FTlRFUl9ST1VUSU5FCisKIAlpZiAoIXBocF9jdGxyKSB7CiAJCWVycigiJXM6IEludmFsaWQgSFBDIGNvbnRyb2xsZXIgaGFuZGxlIVxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIDsKQEAgLTY3NSw3ICs2NDgsNiBAQAogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybjsKIAl9Ci0JZGJnKCIlcyA6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX0NUUkwgJXhcbiIsIF9fRlVOQ1RJT05fXywgc2xvdF9jdHJsKTsKIAogCXNsb3RfY21kID0gKHNsb3RfY3RybCAmIH5QV1JfTEVEX0NUUkwpIHwgMHgwMjAwOwogCkBAIC02ODQsNiArNjU2LDcgQEAKIAlwY2llX3dyaXRlX2NtZChzbG90LCBzbG90X2NtZCk7CiAKIAlkYmcoIiVzOiBTTE9UX0NUUkwgJXggd3JpdGUgY21kICV4XG4iLF9fRlVOQ1RJT05fXywgU0xPVF9DVFJMKHNsb3QtPmN0cmwtPmNhcF9iYXNlKSwgc2xvdF9jbWQpOworCURCR19MRUFWRV9ST1VUSU5FCiAJcmV0dXJuOwogfQogCkBAIC03ODAsNyArNzUzLDYgQEAKIAlpbnQgcmV0dmFsID0gMDsKIAogCURCR19FTlRFUl9ST1VUSU5FIAotCWRiZygiJXM6IFxuIiwgX19GVU5DVElPTl9fKTsJCiAKIAlpZiAoIXBocF9jdGxyKSB7CiAJCWVycigiJXM6IEludmFsaWQgSFBDIGNvbnRyb2xsZXIgaGFuZGxlIVxuIiwgX19GVU5DVElPTl9fKTsKQEAgLTc5OSw4ICs3NzEsNiBAQAogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiByZXR2YWw7CiAJfQotCWRiZygiJXM6IFNMT1RfQ1RSTCAleCwgdmFsdWUgcmVhZCAleG4iLCBfX0ZVTkNUSU9OX18sIFNMT1RfQ1RSTChzbG90LT5jdHJsLT5jYXBfYmFzZSksCi0JCXNsb3RfY3RybCk7CiAKIAlzbG90X2NtZCA9IChzbG90X2N0cmwgJiB+UFdSX0NUUkwpIHwgUE9XRVJfT047CiAKQEAgLTgyOSw3ICs3OTksNiBAQAogCWludCByZXR2YWwgPSAwOwogCiAJREJHX0VOVEVSX1JPVVRJTkUgCi0JZGJnKCIlczogXG4iLCBfX0ZVTkNUSU9OX18pOwkKIAogCWlmICghcGhwX2N0bHIpIHsKIAkJZXJyKCIlczogSW52YWxpZCBIUEMgY29udHJvbGxlciBoYW5kbGUhXG4iLCBfX0ZVTkNUSU9OX18pOwpAQCAtODQ4LDggKzgxNyw2IEBACiAJCWVycigiJXMgOiBocF9yZWdpc3Rlcl9yZWFkX3dvcmQgU0xPVF9DVFJMIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9Ci0JZGJnKCIlczogU0xPVF9DVFJMICV4LCB2YWx1ZSByZWFkICV4XG4iLCBfX0ZVTkNUSU9OX18sIFNMT1RfQ1RSTChzbG90LT5jdHJsLT5jYXBfYmFzZSksCi0JCXNsb3RfY3RybCk7CiAKIAlzbG90X2NtZCA9IChzbG90X2N0cmwgJiB+UFdSX0NUUkwpIHwgUE9XRVJfT0ZGOwogCkBAIC05MjQsNyArODkxLDYgQEAKIAkJCXJldHVybiBJUlFfTk9ORTsKIAkJfQogCi0JCWRiZygiJXM6IFNldCBNYXNrIEhvdC1wbHVnIEludGVycnVwdCBFbmFibGVcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCWRiZygiJXM6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX0NUUkwgd2l0aCB2YWx1ZSAleFxuIiwgX19GVU5DVElPTl9fLCB0ZW1wX3dvcmQpOwogCQl0ZW1wX3dvcmQgPSAodGVtcF93b3JkICYgfkhQX0lOVFJfRU5BQkxFICYgfkNNRF9DTVBMX0lOVFJfRU5BQkxFKSB8IDB4MDA7CiAKQEAgLTkzMyw3ICs4OTksNiBAQAogCQkJZXJyKCIlcyA6IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQgU0xPVF9DVFJMIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJCXJldHVybiBJUlFfTk9ORTsKIAkJfQotCQlkYmcoIiVzOiBocF9yZWdpc3Rlcl93cml0ZV93b3JkIFNMT1RfQ1RSTCB3aXRoIHZhbHVlICV4XG4iLCBfX0ZVTkNUSU9OX18sIHRlbXBfd29yZCk7CiAJCQogCQlyYyA9IGhwX3JlZ2lzdGVyX3JlYWRfd29yZChwaHBfY3Rsci0+cGNpX2RldiwgU0xPVF9TVEFUVVMoY3RybC0+Y2FwX2Jhc2UpLCBzbG90X3N0YXR1cyk7CiAJCWlmIChyYykgewpAQCAtOTQ5LDE0ICs5MTQsMTIgQEAKIAkJCWVycigiJXMgOiBocF9yZWdpc3Rlcl93cml0ZV93b3JkIFNMT1RfU1RBVFVTIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJCXJldHVybiBJUlFfTk9ORTsKIAkJfQotCQlkYmcoIiVzOiBocF9yZWdpc3Rlcl93cml0ZV93b3JkIFNMT1RfU1RBVFVTIHdpdGggdmFsdWUgJXhcbiIsIF9fRlVOQ1RJT05fXywgdGVtcF93b3JkKTsKIAl9CiAJCiAJaWYgKGludHJfbG9jICYgQ01EX0NPTVBMRVRFRCkgewogCQkvKiAKIAkJICogQ29tbWFuZCBDb21wbGV0ZSBJbnRlcnJ1cHQgUGVuZGluZyAKIAkJICovCi0JCWRiZygiJXM6IEluIENvbW1hbmQgQ29tcGxldGUgSW50ZXJydXB0IFBlbmRpbmdcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY3RybC0+cXVldWUpOwogCX0KIApAQCAtOTg5LDcgKzk1Miw2IEBACiAJCX0KIAogCQlkYmcoIiVzOiBVbm1hc2sgSG90LXBsdWcgSW50ZXJydXB0IEVuYWJsZVxuIiwgX19GVU5DVElPTl9fKTsKLQkJZGJnKCIlczogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCB3aXRoIHZhbHVlICV4XG4iLCBfX0ZVTkNUSU9OX18sIHRlbXBfd29yZCk7CiAJCXRlbXBfd29yZCA9ICh0ZW1wX3dvcmQgJiB+SFBfSU5UUl9FTkFCTEUpIHwgSFBfSU5UUl9FTkFCTEU7CiAKIAkJcmMgPSBocF9yZWdpc3Rlcl93cml0ZV93b3JkKHBocF9jdGxyLT5wY2lfZGV2LCBTTE9UX0NUUkwoY3RybC0+Y2FwX2Jhc2UpLCB0ZW1wX3dvcmQpOwpAQCAtOTk3LDE0ICs5NTksMTIgQEAKIAkJCWVycigiJXMgOiBocF9yZWdpc3Rlcl93cml0ZV93b3JkIFNMT1RfQ1RSTCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCQlyZXR1cm4gSVJRX05PTkU7CiAJCX0KLQkJZGJnKCIlczogaHBfcmVnaXN0ZXJfd3JpdGVfd29yZCBTTE9UX0NUUkwgd2l0aCB2YWx1ZSAleFxuIiwgX19GVU5DVElPTl9fLCB0ZW1wX3dvcmQpOyAJCiAJCiAJCXJjID0gaHBfcmVnaXN0ZXJfcmVhZF93b3JkKHBocF9jdGxyLT5wY2lfZGV2LCBTTE9UX1NUQVRVUyhjdHJsLT5jYXBfYmFzZSksIHNsb3Rfc3RhdHVzKTsKIAkJaWYgKHJjKSB7CiAJCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfU1RBVFVTIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJCXJldHVybiBJUlFfTk9ORTsKIAkJfQotCQlkYmcoIiVzOiBocF9yZWdpc3Rlcl9yZWFkX3dvcmQgU0xPVF9TVEFUVVMgd2l0aCB2YWx1ZSAleFxuIiwgX19GVU5DVElPTl9fLCBzbG90X3N0YXR1cyk7IAogCQkKIAkJLyogQ2xlYXIgY29tbWFuZCBjb21wbGV0ZSBpbnRlcnJ1cHQgY2F1c2VkIGJ5IHRoaXMgd3JpdGUgKi8KIAkJdGVtcF93b3JkID0gMHgxRjsKQEAgLTEyNDgsMTIgKzEyMDgsNyBAQAogCS5jaGVja19sbmtfc3RhdHVzCQk9IGhwY19jaGVja19sbmtfc3RhdHVzLAogfTsKIAotaW50IHBjaWVfaW5pdChzdHJ1Y3QgY29udHJvbGxlciAqIGN0cmwsCi0Jc3RydWN0IHBjaWVfZGV2aWNlICpkZXYsCi0JcGhwX2ludHJfY2FsbGJhY2tfdCBhdHRlbnRpb25fYnV0dG9uX2NhbGxiYWNrLAotCXBocF9pbnRyX2NhbGxiYWNrX3Qgc3dpdGNoX2NoYW5nZV9jYWxsYmFjaywKLQlwaHBfaW50cl9jYWxsYmFja190IHByZXNlbmNlX2NoYW5nZV9jYWxsYmFjaywKLQlwaHBfaW50cl9jYWxsYmFja190IHBvd2VyX2ZhdWx0X2NhbGxiYWNrKQoraW50IHBjaWVfaW5pdChzdHJ1Y3QgY29udHJvbGxlciAqIGN0cmwsIHN0cnVjdCBwY2llX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBwaHBfY3Rscl9zdGF0ZV9zICpwaHBfY3RsciwgKnA7CiAJdm9pZCAqaW5zdGFuY2VfaWQgPSBjdHJsOwpAQCAtMTI4Miw4ICsxMjM3LDggQEAKIAlwZGV2ID0gZGV2LT5wb3J0OwogCXBocF9jdGxyLT5wY2lfZGV2ID0gcGRldjsJLyogc2F2ZSBwY2lfZGV2IGluIGNvbnRleHQgKi8KIAotCWRiZygiJXM6IHBkZXYtPnZlbmRvciAleCBwZGV2LT5kZXZpY2UgJXhcbiIsIF9fRlVOQ1RJT05fXywKLQkJcGRldi0+dmVuZG9yLCBwZGV2LT5kZXZpY2UpOworCWRiZygiJXM6IGhvdHBsdWcgY29udHJvbGxlciB2ZW5kb3IgaWQgMHgleCBkZXZpY2UgaWQgMHgleFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcGRldi0+dmVuZG9yLCBwZGV2LT5kZXZpY2UpOwogCiAJc2F2ZWRfY2FwX2Jhc2UgPSBwY2llX2NhcF9iYXNlOwogCkBAIC0xMzQwLDggKzEyOTUsNiBAQAogCQlmaXJzdCA9IDA7CiAJfQogCi0JZGJnKCJwZGV2ID0gJXA6IGI6ZDpmOmlycT0weCV4OiV4OiV4OiV4XG4iLCBwZGV2LCBwZGV2LT5idXMtPm51bWJlciwgCi0JCVBDSV9TTE9UKHBkZXYtPmRldmZuKSwgUENJX0ZVTkMocGRldi0+ZGV2Zm4pLCBkZXYtPmlycSk7CiAJZm9yICggcmMgPSAwOyByYyA8IERFVklDRV9DT1VOVF9SRVNPVVJDRTsgcmMrKykKIAkJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgcmMpID4gMCkKIAkJCWRiZygicGNpIHJlc291cmNlWyVkXSBzdGFydD0weCVseChsZW49MHglbHgpXG4iLCByYywKQEAgLTEzNTksMTMgKzEzMTIsMTIgQEAKIAogCS8qIGZpbmQgdGhlIElSUSAqLwogCXBocF9jdGxyLT5pcnEgPSBkZXYtPmlycTsKLQlkYmcoIkhQQyBpbnRlcnJ1cHQgPSAlZFxuIiwgcGhwX2N0bHItPmlycSk7CiAKIAkvKiBTYXZlIGludGVycnVwdCBjYWxsYmFjayBpbmZvICovCi0JcGhwX2N0bHItPmF0dGVudGlvbl9idXR0b25fY2FsbGJhY2sgPSBhdHRlbnRpb25fYnV0dG9uX2NhbGxiYWNrOwotCXBocF9jdGxyLT5zd2l0Y2hfY2hhbmdlX2NhbGxiYWNrID0gc3dpdGNoX2NoYW5nZV9jYWxsYmFjazsKLQlwaHBfY3Rsci0+cHJlc2VuY2VfY2hhbmdlX2NhbGxiYWNrID0gcHJlc2VuY2VfY2hhbmdlX2NhbGxiYWNrOwotCXBocF9jdGxyLT5wb3dlcl9mYXVsdF9jYWxsYmFjayA9IHBvd2VyX2ZhdWx0X2NhbGxiYWNrOworCXBocF9jdGxyLT5hdHRlbnRpb25fYnV0dG9uX2NhbGxiYWNrID0gcGNpZWhwX2hhbmRsZV9hdHRlbnRpb25fYnV0dG9uOworCXBocF9jdGxyLT5zd2l0Y2hfY2hhbmdlX2NhbGxiYWNrID0gcGNpZWhwX2hhbmRsZV9zd2l0Y2hfY2hhbmdlOworCXBocF9jdGxyLT5wcmVzZW5jZV9jaGFuZ2VfY2FsbGJhY2sgPSBwY2llaHBfaGFuZGxlX3ByZXNlbmNlX2NoYW5nZTsKKwlwaHBfY3Rsci0+cG93ZXJfZmF1bHRfY2FsbGJhY2sgPSBwY2llaHBfaGFuZGxlX3Bvd2VyX2ZhdWx0OwogCXBocF9jdGxyLT5jYWxsYmFja19pbnN0YW5jZV9pZCA9IGluc3RhbmNlX2lkOwogCiAJLyogcmV0dXJuIFBDSSBDb250cm9sbGVyIEluZm8gKi8KQEAgLTEzODcsMTUgKzEzMzksMTIgQEAKIAkJZXJyKCIlcyA6IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQgU0xPVF9DVFJMIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJZ290byBhYm9ydF9mcmVlX2N0bHI7CiAJfQotCWRiZygiJXMgOiBNYXNrIEhQSUUgaHBfcmVnaXN0ZXJfd3JpdGVfd29yZCBTTE9UX0NUUkwgJXhcbiIsIF9fRlVOQ1RJT05fXywgdGVtcF93b3JkKTsKIAogCXJjID0gaHBfcmVnaXN0ZXJfcmVhZF93b3JkKHBocF9jdGxyLT5wY2lfZGV2LCBTTE9UX1NUQVRVUyhjdHJsLT5jYXBfYmFzZSksIHNsb3Rfc3RhdHVzKTsKIAlpZiAocmMpIHsKIAkJZXJyKCIlcyA6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX1NUQVRVUyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCWdvdG8gYWJvcnRfZnJlZV9jdGxyOwogCX0KLQlkYmcoIiVzOiBNYXNrIEhQSUUgU0xPVF9TVEFUVVMgb2Zmc2V0ICV4IHJlYWRzIHNsb3Rfc3RhdHVzICV4XG4iLCBfX0ZVTkNUSU9OX18sIFNMT1RfU1RBVFVTKGN0cmwtPmNhcF9iYXNlKQotCQksIHNsb3Rfc3RhdHVzKTsKIAogCXRlbXBfd29yZCA9IDB4MUY7IC8qIENsZWFyIGFsbCBldmVudHMgKi8KIAlyYyA9IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQocGhwX2N0bHItPnBjaV9kZXYsIFNMT1RfU1RBVFVTKGN0cmwtPmNhcF9iYXNlKSwgdGVtcF93b3JkKTsKQEAgLTE0MDMsNyArMTM1Miw2IEBACiAJCWVycigiJXMgOiBocF9yZWdpc3Rlcl93cml0ZV93b3JkIFNMT1RfU1RBVFVTIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJZ290byBhYm9ydF9mcmVlX2N0bHI7CiAJfQotCWRiZygiJXM6IFNMT1RfU1RBVFVTIG9mZnNldCAleCB3cml0ZXMgc2xvdF9zdGF0dXMgJXhcbiIsIF9fRlVOQ1RJT05fXywgU0xPVF9TVEFUVVMoY3RybC0+Y2FwX2Jhc2UpLCB0ZW1wX3dvcmQpOwogCiAJaWYgKHBjaWVocF9wb2xsX21vZGUpICB7LyogSW5zdGFsbCBpbnRlcnJ1cHQgcG9sbGluZyBjb2RlICovCiAJCS8qIEluc3RhbGwgYW5kIHN0YXJ0IHRoZSBpbnRlcnJ1cHQgcG9sbGluZyB0aW1lciAqLwpAQCAtMTQxOSwxMyArMTM2NywxNCBAQAogCQl9CiAJfQogCisJZGJnKCJwY2llaHAgY3RybCBiOmQ6ZjppcnE9MHgleDoleDoleDoleFxuIiwgcGRldi0+YnVzLT5udW1iZXIsCisJCVBDSV9TTE9UKHBkZXYtPmRldmZuKSwgUENJX0ZVTkMocGRldi0+ZGV2Zm4pLCBkZXYtPmlycSk7CisKIAlyYyA9IGhwX3JlZ2lzdGVyX3JlYWRfd29yZChwZGV2LCBTTE9UX0NUUkwoY3RybC0+Y2FwX2Jhc2UpLCB0ZW1wX3dvcmQpOwogCWlmIChyYykgewogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCWdvdG8gYWJvcnRfZnJlZV9jdGxyOwogCX0KLQlkYmcoIiVzOiBTTE9UX0NUUkwgJXggdmFsdWUgcmVhZCAleFxuIiwgX19GVU5DVElPTl9fLCBTTE9UX0NUUkwoY3RybC0+Y2FwX2Jhc2UpLCB0ZW1wX3dvcmQpOwotCWRiZygiJXM6IHNsb3RfY2FwICV4XG4iLCBfX0ZVTkNUSU9OX18sIHNsb3RfY2FwKTsKIAogCWludHJfZW5hYmxlID0gaW50cl9lbmFibGUgfCBQUlNOX0RFVEVDVF9FTkFCTEU7CiAKQEAgLTE0NDUsNyArMTM5NCw2IEBACiAJfSBlbHNlIHsKIAkJdGVtcF93b3JkID0gKHRlbXBfd29yZCAmIH5IUF9JTlRSX0VOQUJMRSkgfCBIUF9JTlRSX0VOQUJMRTsKIAl9Ci0JZGJnKCIlczogdGVtcF93b3JkICV4XG4iLCBfX0ZVTkNUSU9OX18sIHRlbXBfd29yZCk7CiAKIAkvKiBVbm1hc2sgSG90LXBsdWcgSW50ZXJydXB0IEVuYWJsZSBmb3IgdGhlIGludGVycnVwdCBub3RpZmljYXRpb24gbWVjaGFuaXNtIGNhc2UgKi8KIAlyYyA9IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQocGRldiwgU0xPVF9DVFJMKGN0cmwtPmNhcF9iYXNlKSwgdGVtcF93b3JkKTsKQEAgLTE0NTMsMTQgKzE0MDEsMTEgQEAKIAkJZXJyKCIlcyA6IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQgU0xPVF9DVFJMIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJZ290byBhYm9ydF9mcmVlX2N0bHI7CiAJfQotCWRiZygiJXMgOiBVbm1hc2sgSFBJRSBocF9yZWdpc3Rlcl93cml0ZV93b3JkIFNMT1RfQ1RSTCB3aXRoICV4XG4iLCBfX0ZVTkNUSU9OX18sIHRlbXBfd29yZCk7CiAJcmMgPSBocF9yZWdpc3Rlcl9yZWFkX3dvcmQocGhwX2N0bHItPnBjaV9kZXYsIFNMT1RfU1RBVFVTKGN0cmwtPmNhcF9iYXNlKSwgc2xvdF9zdGF0dXMpOwogCWlmIChyYykgewogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfU1RBVFVTIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJZ290byBhYm9ydF9mcmVlX2N0bHI7CiAJfQotCWRiZygiJXM6IFVubWFzayBIUElFIFNMT1RfU1RBVFVTIG9mZnNldCAleCByZWFkcyBzbG90X3N0YXR1cyAleFxuIiwgX19GVU5DVElPTl9fLCAKLQkJU0xPVF9TVEFUVVMoY3RybC0+Y2FwX2Jhc2UpLCBzbG90X3N0YXR1cyk7CiAJCiAJdGVtcF93b3JkID0gIDB4MUY7IC8qIENsZWFyIGFsbCBldmVudHMgKi8KIAlyYyA9IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQocGhwX2N0bHItPnBjaV9kZXYsIFNMT1RfU1RBVFVTKGN0cmwtPmNhcF9iYXNlKSwgdGVtcF93b3JkKTsKQEAgLTE0NjgsOCArMTQxMywxNiBAQAogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfd3JpdGVfd29yZCBTTE9UX1NUQVRVUyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCWdvdG8gYWJvcnRfZnJlZV9jdGxyOwogCX0KLQlkYmcoIiVzOiBTTE9UX1NUQVRVUyBvZmZzZXQgJXggd3JpdGVzIHNsb3Rfc3RhdHVzICV4XG4iLCBfX0ZVTkNUSU9OX18sIFNMT1RfU1RBVFVTKGN0cmwtPmNhcF9iYXNlKSwgdGVtcF93b3JkKTsKIAkKKwlpZiAocGNpZWhwX2ZvcmNlKSB7CisJCWRiZygiQnlwYXNzaW5nIEJJT1MgY2hlY2sgZm9yIHBjaWVocCB1c2Ugb24gJXNcbiIsCisJCQkJcGNpX25hbWUoY3RybC0+cGNpX2RldikpOworCX0gZWxzZSB7CisJCXJjID0gcGNpZWhwX2dldF9ocF9od19jb250cm9sX2Zyb21fZmlybXdhcmUoY3RybC0+cGNpX2Rldik7CisJCWlmIChyYykKKwkJCWdvdG8gYWJvcnRfZnJlZV9jdGxyOworCX0KKwogCS8qICBBZGQgdGhpcyBIUEMgaW5zdGFuY2UgaW50byB0aGUgSFBDIGxpc3QgKi8KIAlzcGluX2xvY2soJmxpc3RfbG9jayk7CiAJaWYgKHBocF9jdGxyX2xpc3RfaGVhZCA9PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9wY2kuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jCmluZGV4IGZmMTdkOGUuLjY0NzY3M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jCkBAIC0yNyw4MDEgKzI3LDExMSBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgIi4uL3BjaS5oIgogI2luY2x1ZGUgInBjaWVocC5oIgotI2lmbmRlZiBDT05GSUdfSUE2NAotI2luY2x1ZGUgIi4uLy4uLy4uL2FyY2gvaTM4Ni9wY2kvcGNpLmgiICAgIC8qIGhvcnJpYmxlIGhhY2sgc2hvd2luZyBob3cgcHJvY2Vzc29yIGRlcGVuZGFudCB3ZSBhcmUuLi4gKi8KLSNlbmRpZgogCiAKLWludCBwY2llaHBfY29uZmlndXJlX2RldmljZSAoc3RydWN0IGNvbnRyb2xsZXIqIGN0cmwsIHN0cnVjdCBwY2lfZnVuYyogZnVuYykgIAoraW50IHBjaWVocF9jb25maWd1cmVfZGV2aWNlKHN0cnVjdCBzbG90ICpwX3Nsb3QpCiB7Ci0JdW5zaWduZWQgY2hhciBidXM7Ci0Jc3RydWN0IHBjaV9idXMgKmNoaWxkOwotCWludCBudW07CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50ID0gcF9zbG90LT5jdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZTsKKwlpbnQgbnVtLCBmbjsKIAotCWlmIChmdW5jLT5wY2lfZGV2ID09IE5VTEwpCi0JCWZ1bmMtPnBjaV9kZXYgPSBwY2lfZmluZF9zbG90KGZ1bmMtPmJ1cywgUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pKTsKKwlkZXYgPSBwY2lfZmluZF9zbG90KHBfc2xvdC0+YnVzLCBQQ0lfREVWRk4ocF9zbG90LT5kZXZpY2UsIDApKTsKKwlpZiAoZGV2KSB7CisJCWVycigiRGV2aWNlICVzIGFscmVhZHkgZXhpc3RzIGF0ICV4OiV4LCBjYW5ub3QgaG90LWFkZFxuIiwKKwkJCQlwY2lfbmFtZShkZXYpLCBwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLQkvKiBTdGlsbCBOVUxMID8gV2VsbCB0aGVuIHNjYW4gZm9yIGl0ICEgKi8KLQlpZiAoZnVuYy0+cGNpX2RldiA9PSBOVUxMKSB7Ci0JCWRiZygiJXM6IHBjaV9kZXYgc3RpbGwgbnVsbC4gZG8gcGNpX3NjYW5fc2xvdFxuIiwgX19GVU5DVElPTl9fKTsKKwludW0gPSBwY2lfc2Nhbl9zbG90KHBhcmVudCwgUENJX0RFVkZOKHBfc2xvdC0+ZGV2aWNlLCAwKSk7CisJaWYgKG51bSA9PSAwKSB7CisJCWVycigiTm8gbmV3IGRldmljZSBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KIAotCQludW0gPSBwY2lfc2Nhbl9zbG90KGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLCBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbikpOwotCi0JCWlmIChudW0pCi0JCQlwY2lfYnVzX2FkZF9kZXZpY2VzKGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlKTsKLQkJCi0JCWZ1bmMtPnBjaV9kZXYgPSBwY2lfZmluZF9zbG90KGZ1bmMtPmJ1cywgUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pKTsKLQkJaWYgKGZ1bmMtPnBjaV9kZXYgPT0gTlVMTCkgewotCQkJZGJnKCJFUlJPUjogcGNpX2RldiBzdGlsbCBudWxsXG4iKTsKLQkJCXJldHVybiAwOworCWZvciAoZm4gPSAwOyBmbiA8IDg7IGZuKyspIHsKKwkJaWYgKCEoZGV2ID0gcGNpX2ZpbmRfc2xvdChwX3Nsb3QtPmJ1cywKKwkJCQkJUENJX0RFVkZOKHBfc2xvdC0+ZGV2aWNlLCBmbikpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoKGRldi0+Y2xhc3MgPj4gMTYpID09IFBDSV9CQVNFX0NMQVNTX0RJU1BMQVkpIHsKKwkJCWVycigiQ2Fubm90IGhvdC1hZGQgZGlzcGxheSBkZXZpY2UgJXNcbiIsCisJCQkJCXBjaV9uYW1lKGRldikpOworCQkJY29udGludWU7CiAJCX0KKwkJaWYgKChkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHx8CisJCQkJKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0NBUkRCVVMpKSB7CisJCQkvKiBGaW5kIGFuIHVudXNlZCBidXMgbnVtYmVyIGZvciB0aGUgbmV3IGJyaWRnZSAqLworCQkJc3RydWN0IHBjaV9idXMgKmNoaWxkOworCQkJdW5zaWduZWQgY2hhciBidXNuciwgc3RhcnQgPSBwYXJlbnQtPnNlY29uZGFyeTsKKwkJCXVuc2lnbmVkIGNoYXIgZW5kID0gcGFyZW50LT5zdWJvcmRpbmF0ZTsKKwkJCWZvciAoYnVzbnIgPSBzdGFydDsgYnVzbnIgPD0gZW5kOyBidXNucisrKSB7CisJCQkJaWYgKCFwY2lfZmluZF9idXMocGNpX2RvbWFpbl9ucihwYXJlbnQpLAorCQkJCQkJCWJ1c25yKSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoYnVzbnIgPj0gZW5kKSB7CisJCQkJZXJyKCJObyBmcmVlIGJ1cyBmb3IgaG90LWFkZGVkIGJyaWRnZVxuIik7CisJCQkJY29udGludWU7CisJCQl9CisJCQljaGlsZCA9IHBjaV9hZGRfbmV3X2J1cyhwYXJlbnQsIGRldiwgYnVzbnIpOworCQkJaWYgKCFjaGlsZCkgeworCQkJCWVycigiQ2Fubm90IGFkZCBuZXcgYnVzIGZvciAlc1xuIiwKKwkJCQkJCXBjaV9uYW1lKGRldikpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJY2hpbGQtPnN1Ym9yZGluYXRlID0gcGNpX2RvX3NjYW5fYnVzKGNoaWxkKTsKKwkJCXBjaV9idXNfc2l6ZV9icmlkZ2VzKGNoaWxkKTsKKwkJfQorCQkvKiBUQkQ6IHByb2dyYW0gZmlybXdhcmUgcHJvdmlkZWQgX0hQUCB2YWx1ZXMgKi8KKwkJLyogcHJvZ3JhbV9md19wcm92aWRlZF92YWx1ZXMoZGV2KTsgKi8KIAl9CiAKLQlpZiAoZnVuYy0+cGNpX2Rldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgewotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShmdW5jLT5wY2lfZGV2LCBQQ0lfU0VDT05EQVJZX0JVUywgJmJ1cyk7Ci0JCWNoaWxkID0gcGNpX2FkZF9uZXdfYnVzKGZ1bmMtPnBjaV9kZXYtPmJ1cywgKGZ1bmMtPnBjaV9kZXYpLCBidXMpOwotCQlwY2lfZG9fc2Nhbl9idXMoY2hpbGQpOwotCi0JfQotCisJcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKHBhcmVudCk7CisJcGNpX2J1c19hZGRfZGV2aWNlcyhwYXJlbnQpOworCXBjaV9lbmFibGVfYnJpZGdlcyhwYXJlbnQpOwogCXJldHVybiAwOwogfQogCi0KLWludCBwY2llaHBfdW5jb25maWd1cmVfZGV2aWNlKHN0cnVjdCBwY2lfZnVuYyogZnVuYykgCitpbnQgcGNpZWhwX3VuY29uZmlndXJlX2RldmljZShzdHJ1Y3Qgc2xvdCAqcF9zbG90KQogewogCWludCByYyA9IDA7CiAJaW50IGo7Ci0Jc3RydWN0IHBjaV9idXMgKnBidXM7CisJdTggYmN0bCA9IDA7CiAKLQlkYmcoIiVzOiBidXMvZGV2L2Z1bmMgPSAleC8leC8leFxuIiwgX19GVU5DVElPTl9fLCBmdW5jLT5idXMsCi0JCQkJZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0JcGJ1cyA9IGZ1bmMtPnBjaV9kZXYtPmJ1czsKKwlkYmcoIiVzOiBidXMvZGV2ID0gJXgvJXhcbiIsIF9fRlVOQ1RJT05fXywgcF9zbG90LT5idXMsCisJCQkJcF9zbG90LT5kZXZpY2UpOwogCiAJZm9yIChqPTA7IGo8OCA7IGorKykgewotCQlzdHJ1Y3QgcGNpX2RldiogdGVtcCA9IHBjaV9maW5kX3Nsb3QoZnVuYy0+YnVzLAotCQkJCShmdW5jLT5kZXZpY2UgPDwgMykgfCBqKTsKLQkJaWYgKHRlbXApIHsKLQkJCXBjaV9yZW1vdmVfYnVzX2RldmljZSh0ZW1wKTsKKwkJc3RydWN0IHBjaV9kZXYqIHRlbXAgPSBwY2lfZmluZF9zbG90KHBfc2xvdC0+YnVzLAorCQkJCShwX3Nsb3QtPmRldmljZSA8PCAzKSB8IGopOworCQlpZiAoIXRlbXApCisJCQljb250aW51ZTsKKwkJaWYgKCh0ZW1wLT5jbGFzcyA+PiAxNikgPT0gUENJX0JBU0VfQ0xBU1NfRElTUExBWSkgeworCQkJZXJyKCJDYW5ub3QgcmVtb3ZlIGRpc3BsYXkgZGV2aWNlICVzXG4iLAorCQkJCQlwY2lfbmFtZSh0ZW1wKSk7CisJCQljb250aW51ZTsKIAkJfQorCQlpZiAodGVtcC0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgeworCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUodGVtcCwgUENJX0JSSURHRV9DT05UUk9MLCAmYmN0bCk7CisJCQlpZiAoYmN0bCAmIFBDSV9CUklER0VfQ1RMX1ZHQSkgeworCQkJCWVycigiQ2Fubm90IHJlbW92ZSBkaXNwbGF5IGRldmljZSAlc1xuIiwKKwkJCQkJCXBjaV9uYW1lKHRlbXApKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlwY2lfcmVtb3ZlX2J1c19kZXZpY2UodGVtcCk7CiAJfQogCS8qIAogCSAqIFNvbWUgUENJIEV4cHJlc3Mgcm9vdCBwb3J0cyByZXF1aXJlIGZpeHVwIGFmdGVyIGhvdC1wbHVnIG9wZXJhdGlvbi4KIAkgKi8KIAlpZiAocGNpZV9tY2hfcXVpcmspIAotCQlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9maW5hbCwgcGJ1cy0+c2VsZik7CisJCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX2ZpbmFsLCBwX3Nsb3QtPmN0cmwtPnBjaV9kZXYpOwogCQogCXJldHVybiByYzsKIH0KIAotLyoKLSAqIHBjaWVocF9zZXRfaXJxCi0gKgotICogQGJ1c19udW06IGJ1cyBudW1iZXIgb2YgUENJIGRldmljZQotICogQGRldl9udW06IGRldmljZSBudW1iZXIgb2YgUENJIGRldmljZQotICogQHNsb3Q6IHBvaW50ZXIgdG8gdTggd2hlcmUgc2xvdCBudW1iZXIgd2lsbCBiZSByZXR1cm5lZAotICovCi1pbnQgcGNpZWhwX3NldF9pcnEgKHU4IGJ1c19udW0sIHU4IGRldl9udW0sIHU4IGludF9waW4sIHU4IGlycV9udW0pCi17Ci0jaWYgZGVmaW5lZChDT05GSUdfWDg2XzMyKSAmJiAhZGVmaW5lZChDT05GSUdfWDg2X0lPX0FQSUMpCi0JaW50IHJjOwotCXUxNiB0ZW1wX3dvcmQ7Ci0Jc3RydWN0IHBjaV9kZXYgZmFrZWRldjsKLQlzdHJ1Y3QgcGNpX2J1cyBmYWtlYnVzOwotCi0JZmFrZWRldi5kZXZmbiA9IGRldl9udW0gPDwgMzsKLQlmYWtlZGV2LmJ1cyA9ICZmYWtlYnVzOwotCWZha2VidXMubnVtYmVyID0gYnVzX251bTsKLQlkYmcoIiVzOiBkZXYgJWQsIGJ1cyAlZCwgcGluICVkLCBudW0gJWRcbiIsCi0JICAgIF9fRlVOQ1RJT05fXywgZGV2X251bSwgYnVzX251bSwgaW50X3BpbiwgaXJxX251bSk7Ci0JcmMgPSBwY2liaW9zX3NldF9pcnFfcm91dGluZygmZmFrZWRldiwgaW50X3BpbiAtIDB4MGEsIGlycV9udW0pOwotCWRiZygiJXM6IHJjICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKLQlpZiAoIXJjKQotCQlyZXR1cm4gIXJjOwotCi0JLyogc2V0IHRoZSBFZGdlIExldmVsIENvbnRyb2wgUmVnaXN0ZXIgKEVMQ1IpICovCi0JdGVtcF93b3JkID0gaW5iKDB4NGQwKTsKLQl0ZW1wX3dvcmQgfD0gaW5iKDB4NGQxKSA8PCA4OwotCi0JdGVtcF93b3JkIHw9IDB4MDEgPDwgaXJxX251bTsKLQotCS8qIFRoaXMgc2hvdWxkIG9ubHkgYmUgZm9yIHg4NiBhcyBpdCBzZXRzIHRoZSBFZGdlIExldmVsIENvbnRyb2wgUmVnaXN0ZXIgKi8KLQlvdXRiKCh1OCkgKHRlbXBfd29yZCAmIDB4RkYpLCAweDRkMCk7Ci0Jb3V0YigodTgpICgodGVtcF93b3JkICYgMHhGRjAwKSA+PiA4KSwgMHg0ZDEpOwotI2VuZGlmCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIE1vcmUgUENJIGNvbmZpZ3VyYXRpb24gcm91dGluZXM7IHRoaXMgdGltZSBjZW50ZXJlZCBhcm91bmQgaG90cGx1ZyBjb250cm9sbGVyICovCi0KLQotLyoKLSAqIHBjaWVocF9zYXZlX2NvbmZpZwotICoKLSAqIFJlYWRzIGNvbmZpZ3VyYXRpb24gZm9yIGFsbCBzbG90cyBpbiBhIFBDSSBidXMgYW5kIHNhdmVzIGluZm8uCi0gKgotICogTm90ZTogIEZvciBub24taG90IHBsdWcgYnVzc2VzLCB0aGUgc2xvdCAjIHNhdmVkIGlzIHRoZSBkZXZpY2UgIwotICoKLSAqIHJldHVybnMgMCBpZiBzdWNjZXNzCi0gKi8KLWludCBwY2llaHBfc2F2ZV9jb25maWcoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIGludCBidXNudW1iZXIsIGludCBudW1fY3Rscl9zbG90cywgaW50IGZpcnN0X2RldmljZV9udW0pCi17Ci0JaW50IHJjOwotCXU4IGNsYXNzX2NvZGU7Ci0JdTggaGVhZGVyX3R5cGU7Ci0JdTMyIElEOwotCXU4IHNlY29uZGFyeV9idXM7Ci0Jc3RydWN0IHBjaV9mdW5jICpuZXdfc2xvdDsKLQlpbnQgc3ViX2J1czsKLQlpbnQgbWF4X2Z1bmN0aW9uczsKLQlpbnQgZnVuY3Rpb247Ci0JdTggRGV2RXJyb3I7Ci0JaW50IGRldmljZSA9IDA7Ci0JaW50IGNsb29wID0gMDsKLQlpbnQgc3RvcF9pdDsKLQlpbnQgaW5kZXg7Ci0JaW50IGlzX2hvdF9wbHVnID0gbnVtX2N0bHJfc2xvdHMgfHwgZmlyc3RfZGV2aWNlX251bTsKLQlzdHJ1Y3QgcGNpX2J1cyBscGNpX2J1cywgKnBjaV9idXM7Ci0JaW50IEZpcnN0U3VwcG9ydGVkLCBMYXN0U3VwcG9ydGVkOwotCi0JZGJnKCIlczogRW50ZXJcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KLQltZW1jcHkoJmxwY2lfYnVzLCBjdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZSwgc2l6ZW9mKGxwY2lfYnVzKSk7Ci0JcGNpX2J1cyA9ICZscGNpX2J1czsKLQotCWRiZygiJXM6IG51bV9jdGxyX3Nsb3RzID0gJWQsIGZpcnN0X2RldmljZV9udW0gPSAlZFxuIiwgX19GVU5DVElPTl9fLAotCQkJCW51bV9jdGxyX3Nsb3RzLCBmaXJzdF9kZXZpY2VfbnVtKTsKLQotCS8qICAgRGVjaWRlIHdoaWNoIHNsb3RzIGFyZSBzdXBwb3J0ZWQgKi8KLQlpZiAoaXNfaG90X3BsdWcpIHsKLQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCQkgKiAgaXNfaG90X3BsdWcgaXMgdGhlIHNsb3QgbWFzawotCQkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCQlGaXJzdFN1cHBvcnRlZCA9IGZpcnN0X2RldmljZV9udW07Ci0JCUxhc3RTdXBwb3J0ZWQgPSBGaXJzdFN1cHBvcnRlZCArIG51bV9jdGxyX3Nsb3RzIC0gMTsKLQl9IGVsc2UgewotCQlGaXJzdFN1cHBvcnRlZCA9IDA7Ci0JCUxhc3RTdXBwb3J0ZWQgPSAweDFGOwotCX0KLQotCWRiZygiRmlyc3RTdXBwb3J0ZWQgPSAlZCwgTGFzdFN1cHBvcnRlZCA9ICVkXG4iLCBGaXJzdFN1cHBvcnRlZCwKLQkJCQkJTGFzdFN1cHBvcnRlZCk7Ci0KLQkvKiAgIFNhdmUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgZm9yIGFsbCBkZXZpY2VzIGluIHN1cHBvcnRlZCBzbG90cyAqLwotCWRiZygiJXM6IHBjaV9idXMtPm51bWJlciA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIHBjaV9idXMtPm51bWJlcik7Ci0JcGNpX2J1cy0+bnVtYmVyID0gYnVzbnVtYmVyOwotCWRiZygiJXM6IGJ1cyA9ICV4LCBkZXYgPSAleFxuIiwgX19GVU5DVElPTl9fLCBidXNudW1iZXIsIGRldmljZSk7Ci0JZm9yIChkZXZpY2UgPSBGaXJzdFN1cHBvcnRlZDsgZGV2aWNlIDw9IExhc3RTdXBwb3J0ZWQ7IGRldmljZSsrKSB7Ci0JCUlEID0gMHhGRkZGRkZGRjsKLQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9idXMsIFBDSV9ERVZGTihkZXZpY2UsIDApLAotCQkJCQlQQ0lfVkVORE9SX0lELCAmSUQpOwotCi0JCWlmIChJRCAhPSAweEZGRkZGRkZGKSB7CSAgLyogIGRldmljZSBpbiBzbG90ICovCi0JCQlkYmcoIiVzOiBJRCA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIElEKTsKLQkJCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKHBjaV9idXMsIFBDSV9ERVZGTihkZXZpY2UsIDApLAotCQkJCQkweDBCLCAmY2xhc3NfY29kZSk7Ci0JCQlpZiAocmMpCi0JCQkJcmV0dXJuIHJjOwotCi0JCQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShwY2lfYnVzLCBQQ0lfREVWRk4oZGV2aWNlLCAwKSwKLQkJCQkJUENJX0hFQURFUl9UWVBFLCAmaGVhZGVyX3R5cGUpOwotCQkJaWYgKHJjKQotCQkJCXJldHVybiByYzsKLQotCQkJZGJnKCJjbGFzc19jb2RlID0gJXgsIGhlYWRlcl90eXBlID0gJXhcbiIsIGNsYXNzX2NvZGUsIGhlYWRlcl90eXBlKTsKLQotCQkJLyogSWYgbXVsdGktZnVuY3Rpb24gZGV2aWNlLCBzZXQgbWF4X2Z1bmN0aW9ucyB0byA4ICovCi0JCQlpZiAoaGVhZGVyX3R5cGUgJiAweDgwKQotCQkJCW1heF9mdW5jdGlvbnMgPSA4OwotCQkJZWxzZQotCQkJCW1heF9mdW5jdGlvbnMgPSAxOwotCi0JCQlmdW5jdGlvbiA9IDA7Ci0KLQkJCWRvIHsKLQkJCQlEZXZFcnJvciA9IDA7Ci0JCQkJZGJnKCIlczogSW4gZG8gbG9vcFxuIiwgX19GVU5DVElPTl9fKTsKLQotCQkJCWlmICgoaGVhZGVyX3R5cGUgJiAweDdGKSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7ICAgLyogUC1QIEJyaWRnZSAqLwotCQkJCQkvKiBSZWN1cnNlIHRoZSBzdWJvcmRpbmF0ZSBidXMKLQkJCQkJICogZ2V0IHRoZSBzdWJvcmRpbmF0ZSBidXMgbnVtYmVyCi0JCQkJCSAqLwotCQkJCQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShwY2lfYnVzLAotCQkJCQkJUENJX0RFVkZOKGRldmljZSwgZnVuY3Rpb24pLCAKLQkJCQkJCVBDSV9TRUNPTkRBUllfQlVTLCAmc2Vjb25kYXJ5X2J1cyk7Ci0JCQkJCWlmIChyYykgewotCQkJCQkJcmV0dXJuIHJjOwotCQkJCQl9IGVsc2UgewotCQkJCQkJc3ViX2J1cyA9IChpbnQpIHNlY29uZGFyeV9idXM7Ci0KLQkJCQkJCS8qIFNhdmUgc2Vjb25kYXJ5IGJ1cyBjZmcgc3BjIHdpdGggdGhpcyByZWN1cnNpdmUgY2FsbC4gKi8KLQkJCQkJCXJjID0gcGNpZWhwX3NhdmVfY29uZmlnKGN0cmwsIHN1Yl9idXMsIDAsIDApOwotCQkJCQkJaWYgKHJjKQotCQkJCQkJCXJldHVybiByYzsKLQkJCQkJfQotCQkJCX0KLQotCQkJCWluZGV4ID0gMDsKLQkJCQluZXdfc2xvdCA9IHBjaWVocF9zbG90X2ZpbmQoYnVzbnVtYmVyLCBkZXZpY2UsIGluZGV4KyspOwotCi0JCQkJZGJnKCIlczogbmV3X3Nsb3QgPSAlcCBidXMgJXggZGV2ICV4IGZ1biAleFxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIG5ld19zbG90LCBidXNudW1iZXIsIGRldmljZSwgaW5kZXgtMSk7Ci0KLQkJCQl3aGlsZSAobmV3X3Nsb3QgJiYgKG5ld19zbG90LT5mdW5jdGlvbiAhPSAodTgpIGZ1bmN0aW9uKSkgewotCQkJCQluZXdfc2xvdCA9IHBjaWVocF9zbG90X2ZpbmQoYnVzbnVtYmVyLCBkZXZpY2UsIGluZGV4KyspOwotCQkJCQlkYmcoIiVzOiB3aGlsZSBsb29wLCBuZXdfc2xvdCA9ICVwIGJ1cyAleCBkZXYgJXggZnVuICV4XG4iLAotCQkJCQlfX0ZVTkNUSU9OX18sIG5ld19zbG90LCBidXNudW1iZXIsIGRldmljZSwgaW5kZXgtMSk7Ci0JCQkJfQotCQkJCWlmICghbmV3X3Nsb3QpIHsKLQkJCQkJLyogU2V0dXAgc2xvdCBzdHJ1Y3R1cmUuICovCi0JCQkJCW5ld19zbG90ID0gcGNpZWhwX3Nsb3RfY3JlYXRlKGJ1c251bWJlcik7Ci0JCQkJCWRiZygiJXM6IGlmLCBuZXdfc2xvdCA9ICVwIGJ1cyAleCBkZXYgJXggZnVuICV4XG4iLAotCQkJCQlfX0ZVTkNUSU9OX18sIG5ld19zbG90LCBidXNudW1iZXIsIGRldmljZSwgZnVuY3Rpb24pOwotCi0JCQkJCWlmIChuZXdfc2xvdCA9PSBOVUxMKQotCQkJCQkJcmV0dXJuKDEpOwotCQkJCX0KLQotCQkJCW5ld19zbG90LT5idXMgPSAodTgpIGJ1c251bWJlcjsKLQkJCQluZXdfc2xvdC0+ZGV2aWNlID0gKHU4KSBkZXZpY2U7Ci0JCQkJbmV3X3Nsb3QtPmZ1bmN0aW9uID0gKHU4KSBmdW5jdGlvbjsKLQkJCQluZXdfc2xvdC0+aXNfYV9ib2FyZCA9IDE7Ci0JCQkJbmV3X3Nsb3QtPnN3aXRjaF9zYXZlID0gMHgxMDsKLQkJCQkvKiBJbiBjYXNlIG9mIHVuc3VwcG9ydGVkIGJvYXJkICovCi0JCQkJbmV3X3Nsb3QtPnN0YXR1cyA9IERldkVycm9yOwotCQkJCW5ld19zbG90LT5wY2lfZGV2ID0gcGNpX2ZpbmRfc2xvdChuZXdfc2xvdC0+YnVzLAotCQkJCQkobmV3X3Nsb3QtPmRldmljZSA8PCAzKSB8IG5ld19zbG90LT5mdW5jdGlvbik7Ci0JCQkJZGJnKCJuZXdfc2xvdC0+cGNpX2RldiA9ICVwXG4iLCBuZXdfc2xvdC0+cGNpX2Rldik7Ci0KLQkJCQlmb3IgKGNsb29wID0gMDsgY2xvb3AgPCAweDIwOyBjbG9vcCsrKSB7Ci0JCQkJCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ19kd29yZChwY2lfYnVzLAotCQkJCQkJUENJX0RFVkZOKGRldmljZSwgZnVuY3Rpb24pLAotCQkJCQkJY2xvb3AgPDwgMiwgCi0JCQkJCQkodTMyICopICYobmV3X3Nsb3QtPmNvbmZpZ19zcGFjZSBbY2xvb3BdKSk7Ci0JCQkJCS8qIGRiZygibmV3X3Nsb3QtPmNvbmZpZ19zcGFjZVsleF0gPSAleFxuIiwKLQkJCQkJCWNsb29wLCBuZXdfc2xvdC0+Y29uZmlnX3NwYWNlW2Nsb29wXSk7ICovCi0JCQkJCWlmIChyYykKLQkJCQkJCXJldHVybiByYzsKLQkJCQl9Ci0KLQkJCQlmdW5jdGlvbisrOwotCi0JCQkJc3RvcF9pdCA9IDA7Ci0KLQkJCQkvKiAgdGhpcyBsb29wIHNraXBzIHRvIHRoZSBuZXh0IHByZXNlbnQgZnVuY3Rpb24KLQkJCQkgKiAgcmVhZGluZyBpbiBDbGFzcyBDb2RlIGFuZCBIZWFkZXIgdHlwZS4KLQkJCQkgKi8KLQotCQkJCXdoaWxlICgoZnVuY3Rpb24gPCBtYXhfZnVuY3Rpb25zKSYmKCFzdG9wX2l0KSkgewotCQkJCQlkYmcoIiVzOiBJbiB3aGlsZSBsb29wIFxuIiwgX19GVU5DVElPTl9fKTsKLQkJCQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9idXMsCi0JCQkJCQkJUENJX0RFVkZOKGRldmljZSwgZnVuY3Rpb24pLAotCQkJCQkJCVBDSV9WRU5ET1JfSUQsICZJRCk7Ci0KLQkJCQkJaWYgKElEID09IDB4RkZGRkZGRkYpIHsgIC8qIG5vdGhpbmcgdGhlcmUuICovCi0JCQkJCQlmdW5jdGlvbisrOwotCQkJCQkJZGJnKCJOb3RoaW5nIHRoZXJlXG4iKTsKLQkJCQkJfSBlbHNlIHsgIC8qIFNvbWV0aGluZyB0aGVyZSAqLwotCQkJCQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywKLQkJCQkJCQlQQ0lfREVWRk4oZGV2aWNlLCBmdW5jdGlvbiksCi0JCQkJCQkJMHgwQiwgJmNsYXNzX2NvZGUpOwotCQkJCQkJaWYgKHJjKQotCQkJCQkJCXJldHVybiByYzsKLQotCQkJCQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywKLQkJCQkJCQlQQ0lfREVWRk4oZGV2aWNlLCBmdW5jdGlvbiksCi0JCQkJCQkJUENJX0hFQURFUl9UWVBFLCAmaGVhZGVyX3R5cGUpOwotCQkJCQkJaWYgKHJjKQotCQkJCQkJCXJldHVybiByYzsKLQotCQkJCQkJZGJnKCJjbGFzc19jb2RlID0gJXgsIGhlYWRlcl90eXBlID0gJXhcbiIsIGNsYXNzX2NvZGUsIGhlYWRlcl90eXBlKTsKLQkJCQkJCXN0b3BfaXQrKzsKLQkJCQkJfQotCQkJCX0KLQotCQkJfSB3aGlsZSAoZnVuY3Rpb24gPCBtYXhfZnVuY3Rpb25zKTsKLQkJCS8qIEVuZCBvZiBJRiAoZGV2aWNlIGluIHNsb3Q/KSAqLwotCQl9IGVsc2UgaWYgKGlzX2hvdF9wbHVnKSB7Ci0JCQkvKiBTZXR1cCBzbG90IHN0cnVjdHVyZSB3aXRoIGVudHJ5IGZvciBlbXB0eSBzbG90ICovCi0JCQluZXdfc2xvdCA9IHBjaWVocF9zbG90X2NyZWF0ZShidXNudW1iZXIpOwotCi0JCQlpZiAobmV3X3Nsb3QgPT0gTlVMTCkgewotCQkJCXJldHVybigxKTsKLQkJCX0KLQkJCWRiZygibmV3X3Nsb3QgPSAlcCwgYnVzID0gJXgsIGRldiA9ICV4LCBmdW4gPSAleFxuIiwgbmV3X3Nsb3QsCi0JCQkJbmV3X3Nsb3QtPmJ1cywgbmV3X3Nsb3QtPmRldmljZSwgbmV3X3Nsb3QtPmZ1bmN0aW9uKTsKLQotCQkJbmV3X3Nsb3QtPmJ1cyA9ICh1OCkgYnVzbnVtYmVyOwotCQkJbmV3X3Nsb3QtPmRldmljZSA9ICh1OCkgZGV2aWNlOwotCQkJbmV3X3Nsb3QtPmZ1bmN0aW9uID0gMDsKLQkJCW5ld19zbG90LT5pc19hX2JvYXJkID0gMDsKLQkJCW5ld19zbG90LT5wcmVzZW5jZV9zYXZlID0gMDsKLQkJCW5ld19zbG90LT5zd2l0Y2hfc2F2ZSA9IDA7Ci0JCX0KLQl9IAkJCS8qIEVuZCBvZiBGT1IgbG9vcCAqLwotCi0JZGJnKCIlczogRXhpdFxuIiwgX19GVU5DVElPTl9fKTsKLQlyZXR1cm4oMCk7Ci19Ci0KLQotLyoKLSAqIHBjaWVocF9zYXZlX3Nsb3RfY29uZmlnCi0gKgotICogU2F2ZXMgY29uZmlndXJhdGlvbiBpbmZvIGZvciBhbGwgUENJIGRldmljZXMgaW4gYSBnaXZlbiBzbG90Ci0gKiBpbmNsdWRpbmcgc3Vib3JkaW5hdGUgYnVzc2VzLgotICoKLSAqIHJldHVybnMgMCBpZiBzdWNjZXNzCi0gKi8KLWludCBwY2llaHBfc2F2ZV9zbG90X2NvbmZpZyhzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwgc3RydWN0IHBjaV9mdW5jICogbmV3X3Nsb3QpCi17Ci0JaW50IHJjOwotCXU4IGNsYXNzX2NvZGU7Ci0JdTggaGVhZGVyX3R5cGU7Ci0JdTMyIElEOwotCXU4IHNlY29uZGFyeV9idXM7Ci0JaW50IHN1Yl9idXM7Ci0JaW50IG1heF9mdW5jdGlvbnM7Ci0JaW50IGZ1bmN0aW9uOwotCWludCBjbG9vcCA9IDA7Ci0JaW50IHN0b3BfaXQ7Ci0Jc3RydWN0IHBjaV9idXMgbHBjaV9idXMsICpwY2lfYnVzOwotCW1lbWNweSgmbHBjaV9idXMsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLCBzaXplb2YobHBjaV9idXMpKTsKLQlwY2lfYnVzID0gJmxwY2lfYnVzOwotCXBjaV9idXMtPm51bWJlciA9IG5ld19zbG90LT5idXM7Ci0KLQlJRCA9IDB4RkZGRkZGRkY7Ci0KLQlwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9idXMsIFBDSV9ERVZGTihuZXdfc2xvdC0+ZGV2aWNlLCAwKSwKLQkJCQkJUENJX1ZFTkRPUl9JRCwgJklEKTsKLQotCWlmIChJRCAhPSAweEZGRkZGRkZGKSB7CSAgLyogIGRldmljZSBpbiBzbG90ICovCi0JCXBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShwY2lfYnVzLCBQQ0lfREVWRk4obmV3X3Nsb3QtPmRldmljZSwgMCksCi0JCQkJCTB4MEIsICZjbGFzc19jb2RlKTsKLQotCQlwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywgUENJX0RFVkZOKG5ld19zbG90LT5kZXZpY2UsIDApLAotCQkJCQlQQ0lfSEVBREVSX1RZUEUsICZoZWFkZXJfdHlwZSk7Ci0KLQkJaWYgKGhlYWRlcl90eXBlICYgMHg4MCkJLyogTXVsdGktZnVuY3Rpb24gZGV2aWNlICovCi0JCQltYXhfZnVuY3Rpb25zID0gODsKLQkJZWxzZQotCQkJbWF4X2Z1bmN0aW9ucyA9IDE7Ci0KLQkJZnVuY3Rpb24gPSAwOwotCi0JCWRvIHsKLQkJCWlmICgoaGVhZGVyX3R5cGUgJiAweDdGKSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7CSAgLyogUENJLVBDSSBCcmlkZ2UgKi8KLQkJCQkvKiAgUmVjdXJzZSB0aGUgc3Vib3JkaW5hdGUgYnVzICovCi0JCQkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKHBjaV9idXMsCi0JCQkJCVBDSV9ERVZGTihuZXdfc2xvdC0+ZGV2aWNlLCBmdW5jdGlvbiksIAotCQkJCQlQQ0lfU0VDT05EQVJZX0JVUywgJnNlY29uZGFyeV9idXMpOwotCi0JCQkJc3ViX2J1cyA9IChpbnQpIHNlY29uZGFyeV9idXM7Ci0KLQkJCQkvKiBTYXZlIHRoZSBjb25maWcgaGVhZGVycyBmb3IgdGhlIHNlY29uZGFyeSBidXMuICovCi0JCQkJcmMgPSBwY2llaHBfc2F2ZV9jb25maWcoY3RybCwgc3ViX2J1cywgMCwgMCk7Ci0KLQkJCQlpZiAocmMpCi0JCQkJCXJldHVybiByYzsKLQotCQkJfQkvKiBFbmQgb2YgSUYgKi8KLQotCQkJbmV3X3Nsb3QtPnN0YXR1cyA9IDA7Ci0KLQkJCWZvciAoY2xvb3AgPSAwOyBjbG9vcCA8IDB4MjA7IGNsb29wKyspIHsKLQkJCQlwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9idXMsCi0JCQkJCVBDSV9ERVZGTihuZXdfc2xvdC0+ZGV2aWNlLCBmdW5jdGlvbiksIAotCQkJCQljbG9vcCA8PCAyLAotCQkJCQkodTMyICopICYobmV3X3Nsb3QtPmNvbmZpZ19zcGFjZSBbY2xvb3BdKSk7Ci0JCQl9Ci0KLQkJCWZ1bmN0aW9uKys7Ci0KLQkJCXN0b3BfaXQgPSAwOwotCi0JCQkvKiAgdGhpcyBsb29wIHNraXBzIHRvIHRoZSBuZXh0IHByZXNlbnQgZnVuY3Rpb24KLQkJCSAqICByZWFkaW5nIGluIHRoZSBDbGFzcyBDb2RlIGFuZCB0aGUgSGVhZGVyIHR5cGUuCi0JCQkgKi8KLQotCQkJd2hpbGUgKChmdW5jdGlvbiA8IG1heF9mdW5jdGlvbnMpICYmICghc3RvcF9pdCkpIHsKLQkJCQlwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9idXMsCi0JCQkJCVBDSV9ERVZGTihuZXdfc2xvdC0+ZGV2aWNlLCBmdW5jdGlvbiksCi0JCQkJCVBDSV9WRU5ET1JfSUQsICZJRCk7Ci0KLQkJCQlpZiAoSUQgPT0gMHhGRkZGRkZGRikgewkgLyogbm90aGluZyB0aGVyZS4gKi8KLQkJCQkJZnVuY3Rpb24rKzsKLQkJCQl9IGVsc2UgeyAgLyogU29tZXRoaW5nIHRoZXJlICovCi0JCQkJCXBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShwY2lfYnVzLAotCQkJCQkJUENJX0RFVkZOKG5ld19zbG90LT5kZXZpY2UsIGZ1bmN0aW9uKSwKLQkJCQkJCTB4MEIsICZjbGFzc19jb2RlKTsKLQotCQkJCQlwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywKLQkJCQkJCVBDSV9ERVZGTihuZXdfc2xvdC0+ZGV2aWNlLCBmdW5jdGlvbiksCi0JCQkJCQlQQ0lfSEVBREVSX1RZUEUsICZoZWFkZXJfdHlwZSk7Ci0KLQkJCQkJc3RvcF9pdCsrOwotCQkJCX0KLQkJCX0KLQotCQl9IHdoaWxlIChmdW5jdGlvbiA8IG1heF9mdW5jdGlvbnMpOwotCX0JCQkvKiBFbmQgb2YgSUYgKGRldmljZSBpbiBzbG90PykgKi8KLQllbHNlIHsKLQkJcmV0dXJuIDI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoKLSAqIHBjaWVocF9zYXZlX3VzZWRfcmVzb3VyY2VzCi0gKgotICogU3RvcmVzIHVzZWQgcmVzb3VyY2UgaW5mb3JtYXRpb24gZm9yIGV4aXN0aW5nIGJvYXJkcy4gIHRoaXMgaXMKLSAqIGZvciBib2FyZHMgdGhhdCB3ZXJlIGluIHRoZSBzeXN0ZW0gd2hlbiB0aGlzIGRyaXZlciB3YXMgbG9hZGVkLgotICogdGhpcyBmdW5jdGlvbiBpcyBmb3IgaG90IHBsdWcgQURECi0gKgotICogcmV0dXJucyAwIGlmIHN1Y2Nlc3MKLSAqIGlmIGRpc2FibGUgID09IDEoRElTQUJMRV9DQVJEKSwKLSAqICBpdCBsb29wcyBmb3IgYWxsIGZ1bmN0aW9ucyBvZiB0aGUgc2xvdCBhbmQgZGlzYWJsZXMgdGhlbS4KLSAqIGVsc2UsIGl0IGp1c3QgZ2V0IHJlc291cmNlcyBvZiB0aGUgZnVuY3Rpb24gYW5kIHJldHVybi4KLSAqLwotaW50IHBjaWVocF9zYXZlX3VzZWRfcmVzb3VyY2VzKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCBzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsIGludCBkaXNhYmxlKQotewotCXU4IGNsb29wOwotCXU4IGhlYWRlcl90eXBlOwotCXU4IHNlY29uZGFyeV9idXM7Ci0JdTggdGVtcF9ieXRlOwotCXUxNiBjb21tYW5kOwotCXUxNiBzYXZlX2NvbW1hbmQ7Ci0JdTE2IHdfYmFzZSwgd19sZW5ndGg7Ci0JdTMyIHRlbXBfcmVnaXN0ZXI7Ci0JdTMyIHNhdmVfYmFzZTsKLQl1MzIgYmFzZSwgbGVuZ3RoOwotCXU2NCBiYXNlNjQgPSAwOwotCWludCBpbmRleCA9IDA7Ci0JdW5zaWduZWQgaW50IGRldmZuOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm1lbV9ub2RlID0gTlVMTDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpwX21lbV9ub2RlID0gTlVMTDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICp0X21lbV9ub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmlvX25vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqYnVzX25vZGU7Ci0Jc3RydWN0IHBjaV9idXMgbHBjaV9idXMsICpwY2lfYnVzOwotCW1lbWNweSgmbHBjaV9idXMsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLCBzaXplb2YobHBjaV9idXMpKTsKLQlwY2lfYnVzID0gJmxwY2lfYnVzOwotCi0JaWYgKGRpc2FibGUpCi0JCWZ1bmMgPSBwY2llaHBfc2xvdF9maW5kKGZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBpbmRleCsrKTsKLQotCXdoaWxlICgoZnVuYyAhPSBOVUxMKSAmJiBmdW5jLT5pc19hX2JvYXJkKSB7Ci0JCXBjaV9idXMtPm51bWJlciA9IGZ1bmMtPmJ1czsKLQkJZGV2Zm4gPSBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0KLQkJLyogU2F2ZSB0aGUgY29tbWFuZCByZWdpc3RlciAqLwotCQlwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9DT01NQU5ELCAmc2F2ZV9jb21tYW5kKTsKLQotCQlpZiAoZGlzYWJsZSkgewotCQkJLyogZGlzYWJsZSBjYXJkICovCi0JCQljb21tYW5kID0gMHgwMDsKLQkJCXBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9DT01NQU5ELCBjb21tYW5kKTsKLQkJfQotCi0JCS8qIENoZWNrIGZvciBCcmlkZ2UgKi8KLQkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKHBjaV9idXMsIGRldmZuLCBQQ0lfSEVBREVSX1RZUEUsICZoZWFkZXJfdHlwZSk7Ci0KLQkJaWYgKChoZWFkZXJfdHlwZSAmIDB4N0YpID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHsgICAgIC8qIFBDSS1QQ0kgQnJpZGdlICovCi0JCQlkYmcoIlNhdmVfdXNlZF9yZXMgb2YgUENJIGJyaWRnZSBiOmQ9MHgleDoleCwgc2M9MHgleFxuIiwKLQkJCQkJZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIHNhdmVfY29tbWFuZCk7Ci0JCQlpZiAoZGlzYWJsZSkgewotCQkJCS8qIENsZWFyIEJyaWRnZSBDb250cm9sIFJlZ2lzdGVyICovCi0JCQkJY29tbWFuZCA9IDB4MDA7Ci0JCQkJcGNpX2J1c193cml0ZV9jb25maWdfd29yZChwY2lfYnVzLCBkZXZmbiwgUENJX0JSSURHRV9DT05UUk9MLCBjb21tYW5kKTsKLQkJCX0KLQotCQkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKHBjaV9idXMsIGRldmZuLCBQQ0lfU0VDT05EQVJZX0JVUywgJnNlY29uZGFyeV9idXMpOwotCQkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKHBjaV9idXMsIGRldmZuLCBQQ0lfU1VCT1JESU5BVEVfQlVTLCAmdGVtcF9ieXRlKTsKLQotCQkJYnVzX25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwKLQkJCQkJCUdGUF9LRVJORUwpOwotCQkJaWYgKCFidXNfbm9kZSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJYnVzX25vZGUtPmJhc2UgPSAodWxvbmcpc2Vjb25kYXJ5X2J1czsKLQkJCWJ1c19ub2RlLT5sZW5ndGggPSAodWxvbmcpKHRlbXBfYnl0ZSAtIHNlY29uZGFyeV9idXMgKyAxKTsKLQotCQkJYnVzX25vZGUtPm5leHQgPSBmdW5jLT5idXNfaGVhZDsKLQkJCWZ1bmMtPmJ1c19oZWFkID0gYnVzX25vZGU7Ci0KLQkJCS8qIFNhdmUgSU8gYmFzZSBhbmQgTGltaXQgcmVnaXN0ZXJzICovCi0JCQlwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywgZGV2Zm4sIFBDSV9JT19CQVNFLCAmdGVtcF9ieXRlKTsKLQkJCWJhc2UgPSB0ZW1wX2J5dGU7Ci0JCQlwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywgZGV2Zm4sIFBDSV9JT19MSU1JVCwgJnRlbXBfYnl0ZSk7Ci0JCQlsZW5ndGggPSB0ZW1wX2J5dGU7Ci0KLQkJCWlmICgoYmFzZSA8PSBsZW5ndGgpICYmICghZGlzYWJsZSB8fCAoc2F2ZV9jb21tYW5kICYgUENJX0NPTU1BTkRfSU8pKSkgewotCQkJCWlvX25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwKLQkJCQkJCQlHRlBfS0VSTkVMKTsKLQkJCQlpZiAoIWlvX25vZGUpCi0JCQkJCXJldHVybiAtRU5PTUVNOwotCi0JCQkJaW9fbm9kZS0+YmFzZSA9ICh1bG9uZykoYmFzZSAmIFBDSV9JT19SQU5HRV9NQVNLKSA8PCA4OwotCQkJCWlvX25vZGUtPmxlbmd0aCA9ICh1bG9uZykobGVuZ3RoIC0gYmFzZSArIDB4MTApIDw8IDg7Ci0KLQkJCQlpb19ub2RlLT5uZXh0ID0gZnVuYy0+aW9faGVhZDsKLQkJCQlmdW5jLT5pb19oZWFkID0gaW9fbm9kZTsKLQkJCX0KLQotCQkJLyogU2F2ZSBtZW1vcnkgYmFzZSBhbmQgTGltaXQgcmVnaXN0ZXJzICovCi0JCQlwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9NRU1PUllfQkFTRSwgJndfYmFzZSk7Ci0JCQlwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9NRU1PUllfTElNSVQsICZ3X2xlbmd0aCk7Ci0KLQkJCWlmICgod19iYXNlIDw9IHdfbGVuZ3RoKSAmJiAoIWRpc2FibGUgfHwgKHNhdmVfY29tbWFuZCAmIFBDSV9DT01NQU5EX01FTU9SWSkpKSB7Ci0JCQkJbWVtX25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwKLQkJCQkJCUdGUF9LRVJORUwpOwotCQkJCWlmICghbWVtX25vZGUpCi0JCQkJCXJldHVybiAtRU5PTUVNOwotCi0JCQkJbWVtX25vZGUtPmJhc2UgPSAodWxvbmcpd19iYXNlIDw8IDE2OwotCQkJCW1lbV9ub2RlLT5sZW5ndGggPSAodWxvbmcpKHdfbGVuZ3RoIC0gd19iYXNlICsgMHgxMCkgPDwgMTY7Ci0KLQkJCQltZW1fbm9kZS0+bmV4dCA9IGZ1bmMtPm1lbV9oZWFkOwotCQkJCWZ1bmMtPm1lbV9oZWFkID0gbWVtX25vZGU7Ci0JCQl9Ci0JCQkvKiBTYXZlIHByZWZldGNoYWJsZSBtZW1vcnkgYmFzZSBhbmQgTGltaXQgcmVnaXN0ZXJzICovCi0JCQlwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9QUkVGX01FTU9SWV9CQVNFLCAmd19iYXNlKTsKLQkJCXBjaV9idXNfcmVhZF9jb25maWdfd29yZChwY2lfYnVzLCBkZXZmbiwgUENJX1BSRUZfTUVNT1JZX0xJTUlULCAmd19sZW5ndGgpOwotCi0JCQlpZiAoKHdfYmFzZSA8PSB3X2xlbmd0aCkgJiYgKCFkaXNhYmxlIHx8IChzYXZlX2NvbW1hbmQgJiBQQ0lfQ09NTUFORF9NRU1PUlkpKSkgewotCQkJCXBfbWVtX25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwKLQkJCQkJCUdGUF9LRVJORUwpOwotCQkJCWlmICghcF9tZW1fbm9kZSkKLQkJCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJCQlwX21lbV9ub2RlLT5iYXNlID0gKHVsb25nKXdfYmFzZSA8PCAxNjsKLQkJCQlwX21lbV9ub2RlLT5sZW5ndGggPSAodWxvbmcpKHdfbGVuZ3RoIC0gd19iYXNlICsgMHgxMCkgPDwgMTY7Ci0KLQkJCQlwX21lbV9ub2RlLT5uZXh0ID0gZnVuYy0+cF9tZW1faGVhZDsKLQkJCQlmdW5jLT5wX21lbV9oZWFkID0gcF9tZW1fbm9kZTsKLQkJCX0KLQkJfSBlbHNlIGlmICgoaGVhZGVyX3R5cGUgJiAweDdGKSA9PSBQQ0lfSEVBREVSX1RZUEVfTk9STUFMKSB7Ci0JCQlkYmcoIlNhdmVfdXNlZF9yZXMgb2YgUENJIGFkYXB0ZXIgYjpkPTB4JXg6JXgsIHNjPTB4JXhcbiIsCi0JCQkJCWZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBzYXZlX2NvbW1hbmQpOwotCi0JCQkvKiBGaWd1cmUgb3V0IElPIGFuZCBtZW1vcnkgYmFzZSBsZW5ndGhzICovCi0JCQlmb3IgKGNsb29wID0gUENJX0JBU0VfQUREUkVTU18wOyBjbG9vcCA8PSBQQ0lfQkFTRV9BRERSRVNTXzU7IGNsb29wICs9IDQpIHsKLQkJCQlwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9idXMsIGRldmZuLCBjbG9vcCwgJnNhdmVfYmFzZSk7Ci0KLQkJCQl0ZW1wX3JlZ2lzdGVyID0gMHhGRkZGRkZGRjsKLQkJCQlwY2lfYnVzX3dyaXRlX2NvbmZpZ19kd29yZChwY2lfYnVzLCBkZXZmbiwgY2xvb3AsIHRlbXBfcmVnaXN0ZXIpOwotCQkJCXBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQocGNpX2J1cywgZGV2Zm4sIGNsb29wLCAmdGVtcF9yZWdpc3Rlcik7Ci0KLQkJCQlpZiAoIWRpc2FibGUpCi0JCQkJCXBjaV9idXNfd3JpdGVfY29uZmlnX2R3b3JkKHBjaV9idXMsIGRldmZuLCBjbG9vcCwgc2F2ZV9iYXNlKTsKLQotCQkJCWlmICghdGVtcF9yZWdpc3RlcikKLQkJCQkJY29udGludWU7Ci0KLQkJCQliYXNlID0gdGVtcF9yZWdpc3RlcjsKLQotCQkJCWlmICgoYmFzZSAmIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pICYmCi0JCQkJCQkoIWRpc2FibGUgfHwgKHNhdmVfY29tbWFuZCAmIFBDSV9DT01NQU5EX0lPKSkpIHsKLQkJCQkJLyogSU8gYmFzZSAqLwotCQkJCQkvKiBzZXQgdGVtcF9yZWdpc3RlciA9IGFtb3VudCBvZiBJTyBzcGFjZSByZXF1ZXN0ZWQgKi8KLQkJCQkJYmFzZSA9IGJhc2UgJiAweEZGRkZGRkZDTDsKLQkJCQkJYmFzZSA9ICh+YmFzZSkgKyAxOwotCi0JCQkJCWlvX25vZGUgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IHBjaV9yZXNvdXJjZSksCi0JCQkJCQkJCUdGUF9LRVJORUwpOwotCQkJCQlpZiAoIWlvX25vZGUpCi0JCQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJCQlpb19ub2RlLT5iYXNlID0gKHVsb25nKXNhdmVfYmFzZSAmIFBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSzsKLQkJCQkJaW9fbm9kZS0+bGVuZ3RoID0gKHVsb25nKWJhc2U7Ci0JCQkJCWRiZygic3VyIGFkYXB0ZXI6IElPIGJhcj0weCV4KGxlbmd0aD0weCV4KVxuIiwKLQkJCQkJCWlvX25vZGUtPmJhc2UsIGlvX25vZGUtPmxlbmd0aCk7Ci0KLQkJCQkJaW9fbm9kZS0+bmV4dCA9IGZ1bmMtPmlvX2hlYWQ7Ci0JCQkJCWZ1bmMtPmlvX2hlYWQgPSBpb19ub2RlOwotCQkJCX0gZWxzZSB7ICAvKiBtYXAgTWVtb3J5ICovCi0JCQkJCWludCBwcmVmZXRjaGFibGUgPSAxOwotCQkJCQkvKiBzdHJ1Y3QgcGNpX3Jlc291cmNlcyAqKnJlc19ub2RlOyAqLwotCQkJCQljaGFyICpyZXNfdHlwZV9zdHIgPSAiUE1FTSI7Ci0JCQkJCXUzMiB0ZW1wX3JlZ2lzdGVyMjsKLQotCQkJCQl0X21lbV9ub2RlID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBwY2lfcmVzb3VyY2UpLAotCQkJCQkJCQlHRlBfS0VSTkVMKTsKLQkJCQkJaWYgKCF0X21lbV9ub2RlKQotCQkJCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJCQkJaWYgKCEoYmFzZSAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX1BSRUZFVENIKSAmJgotCQkJCQkJCSghZGlzYWJsZSB8fCAoc2F2ZV9jb21tYW5kICYgUENJX0NPTU1BTkRfTUVNT1JZKSkpIHsKLQkJCQkJCXByZWZldGNoYWJsZSA9IDA7Ci0JCQkJCQltZW1fbm9kZSA9IHRfbWVtX25vZGU7Ci0JCQkJCQlyZXNfdHlwZV9zdHIrKzsKLQkJCQkJfSBlbHNlCi0JCQkJCQlwX21lbV9ub2RlID0gdF9tZW1fbm9kZTsKLQotCQkJCQliYXNlID0gYmFzZSAmIDB4RkZGRkZGRjBMOwotCQkJCQliYXNlID0gKH5iYXNlKSArIDE7Ci0KLQkJCQkJc3dpdGNoICh0ZW1wX3JlZ2lzdGVyICYgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV9NQVNLKSB7Ci0JCQkJCWNhc2UgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV8zMjoKLQkJCQkJCWlmIChwcmVmZXRjaGFibGUpIHsKLQkJCQkJCQlwX21lbV9ub2RlLT5iYXNlID0gKHVsb25nKXNhdmVfYmFzZSAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0s7Ci0JCQkJCQkJcF9tZW1fbm9kZS0+bGVuZ3RoID0gKHVsb25nKWJhc2U7Ci0JCQkJCQkJZGJnKCJzdXIgYWRhcHRlcjogMzIgJXMgYmFyPTB4JXgobGVuZ3RoPTB4JXgpXG4iLAotCQkJCQkJCQlyZXNfdHlwZV9zdHIsIAotCQkJCQkJCQlwX21lbV9ub2RlLT5iYXNlLAotCQkJCQkJCQlwX21lbV9ub2RlLT5sZW5ndGgpOwotCi0JCQkJCQkJcF9tZW1fbm9kZS0+bmV4dCA9IGZ1bmMtPnBfbWVtX2hlYWQ7Ci0JCQkJCQkJZnVuYy0+cF9tZW1faGVhZCA9IHBfbWVtX25vZGU7Ci0JCQkJCQl9IGVsc2UgewotCQkJCQkJCW1lbV9ub2RlLT5iYXNlID0gKHVsb25nKXNhdmVfYmFzZSAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0s7Ci0JCQkJCQkJbWVtX25vZGUtPmxlbmd0aCA9ICh1bG9uZyliYXNlOwotCQkJCQkJCWRiZygic3VyIGFkYXB0ZXI6IDMyICVzIGJhcj0weCV4KGxlbmd0aD0weCV4KVxuIiwKLQkJCQkJCQkJcmVzX3R5cGVfc3RyLCAKLQkJCQkJCQkJbWVtX25vZGUtPmJhc2UsCi0JCQkJCQkJCW1lbV9ub2RlLT5sZW5ndGgpOwotCi0JCQkJCQkJbWVtX25vZGUtPm5leHQgPSBmdW5jLT5tZW1faGVhZDsKLQkJCQkJCQlmdW5jLT5tZW1faGVhZCA9IG1lbV9ub2RlOwotCQkJCQkJfQotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV82NDoKLQkJCQkJCXBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQocGNpX2J1cywgZGV2Zm4sIGNsb29wKzQsICZ0ZW1wX3JlZ2lzdGVyMik7Ci0JCQkJCQliYXNlNjQgPSB0ZW1wX3JlZ2lzdGVyMjsKLQkJCQkJCWJhc2U2NCA9IChiYXNlNjQgPDwgMzIpIHwgc2F2ZV9iYXNlOwotCi0JCQkJCQlpZiAodGVtcF9yZWdpc3RlcjIpIHsKLQkJCQkJCQlkYmcoInN1ciBhZGFwdGVyOiA2NCAlcyBoaWdoIGR3b3JkIG9mIGJhc2U2NCgweCV4OiV4KSBtYXNrZWQgdG8gMFxuIiwgCi0JCQkJCQkJCXJlc190eXBlX3N0ciwgdGVtcF9yZWdpc3RlcjIsICh1MzIpYmFzZTY0KTsKLQkJCQkJCQliYXNlNjQgJj0gMHgwMDAwMDAwMEZGRkZGRkZGTDsKLQkJCQkJCX0KLQotCQkJCQkJaWYgKHByZWZldGNoYWJsZSkgewotCQkJCQkJCXBfbWVtX25vZGUtPmJhc2UgPSBiYXNlNjQgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLOwotCQkJCQkJCXBfbWVtX25vZGUtPmxlbmd0aCA9IGJhc2U7Ci0JCQkJCQkJZGJnKCJzdXIgYWRhcHRlcjogNjQgJXMgYmFzZT0weCV4KGxlbj0weCV4KVxuIiwKLQkJCQkJCQkJcmVzX3R5cGVfc3RyLCAKLQkJCQkJCQkJcF9tZW1fbm9kZS0+YmFzZSwKLQkJCQkJCQkJcF9tZW1fbm9kZS0+bGVuZ3RoKTsKLQotCQkJCQkJCXBfbWVtX25vZGUtPm5leHQgPSBmdW5jLT5wX21lbV9oZWFkOwotCQkJCQkJCWZ1bmMtPnBfbWVtX2hlYWQgPSBwX21lbV9ub2RlOwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQltZW1fbm9kZS0+YmFzZSA9IGJhc2U2NCAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0s7Ci0JCQkJCQkJbWVtX25vZGUtPmxlbmd0aCA9IGJhc2U7Ci0JCQkJCQkJZGJnKCJzdXIgYWRhcHRlcjogNjQgJXMgYmFzZT0weCV4KGxlbj0weCV4KVxuIiwKLQkJCQkJCQkJcmVzX3R5cGVfc3RyLCAKLQkJCQkJCQkJbWVtX25vZGUtPmJhc2UsCi0JCQkJCQkJCW1lbV9ub2RlLT5sZW5ndGgpOwotCi0JCQkJCQkJbWVtX25vZGUtPm5leHQgPSBmdW5jLT5tZW1faGVhZDsKLQkJCQkJCQlmdW5jLT5tZW1faGVhZCA9IG1lbV9ub2RlOwotCQkJCQkJfQotCQkJCQkJY2xvb3AgKz0gNDsKLQkJCQkJCWJyZWFrOwotCQkJCQlkZWZhdWx0OgotCQkJCQkJZGJnKCJhc3VyOiByZXNlcnZlZCBCQVIgdHlwZT0weCV4XG4iLAotCQkJCQkJCXRlbXBfcmVnaXN0ZXIpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9IAotCQkJfQkvKiBFbmQgb2YgYmFzZSByZWdpc3RlciBsb29wICovCi0JCX0gZWxzZSB7CS8qIFNvbWUgb3RoZXIgdW5rbm93biBoZWFkZXIgdHlwZSAqLwotCQkJZGJnKCJTYXZlX3VzZWRfcmVzIG9mIFBDSSB1bmtub3duIHR5cGUgYjpkPTB4JXg6JXguIHNraXAuXG4iLAotCQkJCQlmdW5jLT5idXMsIGZ1bmMtPmRldmljZSk7Ci0JCX0KLQotCQkvKiBmaW5kIHRoZSBuZXh0IGRldmljZSBpbiB0aGlzIHNsb3QgKi8KLQkJaWYgKCFkaXNhYmxlKQotCQkJYnJlYWs7Ci0JCWZ1bmMgPSBwY2llaHBfc2xvdF9maW5kKGZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBpbmRleCsrKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKioKLSAqIGtmcmVlX3Jlc291cmNlX2xpc3Q6IHJlbGVhc2UgbWVtb3J5IG9mIGFsbCBsaXN0IG1lbWJlcnMKLSAqIEByZXM6IHJlc291cmNlIGxpc3QgdG8gZnJlZQotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLXJldHVybl9yZXNvdXJjZV9saXN0KHN0cnVjdCBwY2lfcmVzb3VyY2UgKipmdW5jLCBzdHJ1Y3QgcGNpX3Jlc291cmNlICoqcmVzKQotewotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm5vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqdF9ub2RlOwotCi0Jbm9kZSA9ICpmdW5jOwotCSpmdW5jID0gTlVMTDsKLQl3aGlsZSAobm9kZSkgewotCQl0X25vZGUgPSBub2RlLT5uZXh0OwotCQlyZXR1cm5fcmVzb3VyY2UocmVzLCBub2RlKTsKLQkJbm9kZSA9IHRfbm9kZTsKLQl9Ci19Ci0KLS8qCi0gKiBwY2llaHBfcmV0dXJuX2JvYXJkX3Jlc291cmNlcwotICoKLSAqIHRoaXMgcm91dGluZSByZXR1cm5zIGFsbCByZXNvdXJjZXMgYWxsb2NhdGVkIHRvIGEgYm9hcmQgdG8KLSAqIHRoZSBhdmFpbGFibGUgcG9vbC4KLSAqCi0gKiByZXR1cm5zIDAgaWYgc3VjY2VzcwotICovCi1pbnQgcGNpZWhwX3JldHVybl9ib2FyZF9yZXNvdXJjZXMoc3RydWN0IHBjaV9mdW5jICogZnVuYywKLQkJCQlzdHJ1Y3QgcmVzb3VyY2VfbGlzdHMgKiByZXNvdXJjZXMpCi17Ci0JaW50IHJjOwotCi0JZGJnKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKLQotCWlmICghZnVuYykKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm5fcmVzb3VyY2VfbGlzdCgmKGZ1bmMtPmlvX2hlYWQpLCYocmVzb3VyY2VzLT5pb19oZWFkKSk7Ci0JcmV0dXJuX3Jlc291cmNlX2xpc3QoJihmdW5jLT5tZW1faGVhZCksJihyZXNvdXJjZXMtPm1lbV9oZWFkKSk7Ci0JcmV0dXJuX3Jlc291cmNlX2xpc3QoJihmdW5jLT5wX21lbV9oZWFkKSwmKHJlc291cmNlcy0+cF9tZW1faGVhZCkpOwotCXJldHVybl9yZXNvdXJjZV9saXN0KCYoZnVuYy0+YnVzX2hlYWQpLCYocmVzb3VyY2VzLT5idXNfaGVhZCkpOwotCi0JcmMgPSBwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmKHJlc291cmNlcy0+bWVtX2hlYWQpKTsKLQlyYyB8PSBwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmKHJlc291cmNlcy0+cF9tZW1faGVhZCkpOwotCXJjIHw9IHBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCYocmVzb3VyY2VzLT5pb19oZWFkKSk7Ci0JcmMgfD0gcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJihyZXNvdXJjZXMtPmJ1c19oZWFkKSk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICoga2ZyZWVfcmVzb3VyY2VfbGlzdDogcmVsZWFzZSBtZW1vcnkgb2YgYWxsIGxpc3QgbWVtYmVycwotICogQHJlczogcmVzb3VyY2UgbGlzdCB0byBmcmVlCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAota2ZyZWVfcmVzb3VyY2VfbGlzdChzdHJ1Y3QgcGNpX3Jlc291cmNlICoqcikKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpyZXMsICp0cmVzOwotCi0JcmVzID0gKnI7Ci0JKnIgPSBOVUxMOwotCi0Jd2hpbGUgKHJlcykgewotCQl0cmVzID0gcmVzOwotCQlyZXMgPSByZXMtPm5leHQ7Ci0JCWtmcmVlKHRyZXMpOwotCX0KLX0KLQotLyoqCi0gKiBwY2llaHBfZGVzdHJveV9yZXNvdXJjZV9saXN0OiBwdXQgbm9kZSBiYWNrIGluIHRoZSByZXNvdXJjZSBsaXN0Ci0gKiBAcmVzb3VyY2VzOiBsaXN0IHRvIHB1dCBub2RlcyBiYWNrCi0gKi8KLXZvaWQgcGNpZWhwX2Rlc3Ryb3lfcmVzb3VyY2VfbGlzdChzdHJ1Y3QgcmVzb3VyY2VfbGlzdHMgKiByZXNvdXJjZXMpCi17Ci0Ja2ZyZWVfcmVzb3VyY2VfbGlzdCgmKHJlc291cmNlcy0+aW9faGVhZCkpOwotCWtmcmVlX3Jlc291cmNlX2xpc3QoJihyZXNvdXJjZXMtPm1lbV9oZWFkKSk7Ci0Ja2ZyZWVfcmVzb3VyY2VfbGlzdCgmKHJlc291cmNlcy0+cF9tZW1faGVhZCkpOwotCWtmcmVlX3Jlc291cmNlX2xpc3QoJihyZXNvdXJjZXMtPmJ1c19oZWFkKSk7Ci19Ci0KLS8qKgotICogcGNpZWhwX2Rlc3Ryb3lfYm9hcmRfcmVzb3VyY2VzOiBwdXQgbm9kZSBiYWNrIGluIHRoZSByZXNvdXJjZSBsaXN0Ci0gKiBAcmVzb3VyY2VzOiBsaXN0IHRvIHB1dCBub2RlcyBiYWNrCi0gKi8KLXZvaWQgcGNpZWhwX2Rlc3Ryb3lfYm9hcmRfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZnVuYyAqIGZ1bmMpCi17Ci0Ja2ZyZWVfcmVzb3VyY2VfbGlzdCgmKGZ1bmMtPmlvX2hlYWQpKTsKLQlrZnJlZV9yZXNvdXJjZV9saXN0KCYoZnVuYy0+bWVtX2hlYWQpKTsKLQlrZnJlZV9yZXNvdXJjZV9saXN0KCYoZnVuYy0+cF9tZW1faGVhZCkpOwotCWtmcmVlX3Jlc291cmNlX2xpc3QoJihmdW5jLT5idXNfaGVhZCkpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBybS5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBybS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWYyMGZiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwcm0uaAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBQQ0lFSFBSTSA6IFBDSUVIUCBSZXNvdXJjZSBNYW5hZ2VyIGZvciBBQ1BJL25vbi1BQ1BJIHBsYXRmb3JtCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1LDIwMDEgQ29tcGFxIENvbXB1dGVyIENvcnBvcmF0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEsMjAwMyBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQotICogQ29weXJpZ2h0IChDKSAyMDAxIElCTSBDb3JwLgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Ci0gKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCi0gKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQotICogZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqIFNlbmQgZmVlZGJhY2sgdG8gPGdyZWdAa3JvYWguY29tPiwgPGtyaXN0ZW4uYy5hY2NhcmRpQGludGVsLmNvbT4KLSAqCi0gKi8KLQotI2lmbmRlZiBfUENJRUhQUk1fSF8KLSNkZWZpbmUgX1BDSUVIUFJNX0hfCi0KLSNpZmRlZglDT05GSUdfSE9UUExVR19QQ0lfUENJRV9QSFBSTV9OT05BQ1BJCi0jaW5jbHVkZSAicGNpZWhwcm1fbm9uYWNwaS5oIgotI2VuZGlmCi0KLWludCBwY2llaHBybV9pbml0KGVudW0gcGhwX2N0bHJfdHlwZSBjdCk7Ci12b2lkIHBjaWVocHJtX2NsZWFudXAodm9pZCk7Ci1pbnQgcGNpZWhwcm1fcHJpbnRfcGlydCh2b2lkKTsKLWludCBwY2llaHBybV9maW5kX2F2YWlsYWJsZV9yZXNvdXJjZXMoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpOwotaW50IHBjaWVocHJtX3NldF9ocHAoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHN0cnVjdCBwY2lfZnVuYyAqZnVuYywgdTggY2FyZF90eXBlKTsKLXZvaWQgcGNpZWhwcm1fZW5hYmxlX2NhcmQoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHN0cnVjdCBwY2lfZnVuYyAqZnVuYywgdTggY2FyZF90eXBlKTsKLQotI2lmZGVmCURFQlVHCi0jZGVmaW5lIFJFU19DSEVDSyh0aGlzLCBiaXRzKQlcCi0JeyBpZiAoKCh0aGlzKSAmIChiaXRzIC0gMSkpKSBcCi0JCXByaW50aygiJXM6JWQgRVJSOiBwb3RlbnRpYWwgcmVzIGxvc3MhXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgfQotI2Vsc2UKLSNkZWZpbmUgUkVTX0NIRUNLKHRoaXMsIGJpdHMpCi0jZW5kaWYKLQotI2VuZGlmCQkJCS8qIF9QQ0lFSFBSTV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBybV9hY3BpLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtX2FjcGkuYwppbmRleCAxNDA2ZGIzLi5hZTI0NGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtX2FjcGkuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtX2FjcGkuYwpAQCAtMjQsMTAwICsyNCwyMCBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS1hY3BpLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaWZkZWYJQ09ORklHX0lBNjQKLSNpbmNsdWRlIDxhc20vaW9zYXBpYy5oPgotI2VuZGlmCi0jaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgPGFjcGkvYWN0eXBlcy5oPgogI2luY2x1ZGUgInBjaWVocC5oIgotI2luY2x1ZGUgInBjaWVocHJtLmgiCi0KLSNkZWZpbmUJUENJX01BWF9CVVMJCTB4MTAwCi0jZGVmaW5lCUFDUElfU1RBX0RFVklDRV9QUkVTRU5UCTB4MDEKIAogI2RlZmluZQlNRVRIT0RfTkFNRV9fU1VOCSJfU1VOIgogI2RlZmluZQlNRVRIT0RfTkFNRV9fSFBQCSJfSFBQIgogI2RlZmluZQlNRVRIT0RfTkFNRV9PU0hQCSJPU0hQIgogCi0vKiBTdGF0dXMgY29kZSBmb3IgcnVubmluZyBhY3BpIG1ldGhvZCB0byBnYWluIG5hdGl2ZSBjb250cm9sICovCi0jZGVmaW5lIE5DX05PVF9SVU4JMAotI2RlZmluZSBPU0NfTk9UX0VYSVNUCTEKLSNkZWZpbmUgT1NDX1JVTl9GQUlMRUQJMgotI2RlZmluZSBPU0hQX05PVF9FWElTVAkzCi0jZGVmaW5lIE9TSFBfUlVOX0ZBSUxFRAk0Ci0jZGVmaW5lIE5DX1JVTl9TVUNDRVNTCTUKLQotI2RlZmluZQlQSFBfUkVTX0JVUwkJMHhBMAotI2RlZmluZQlQSFBfUkVTX0lPCQkweEExCi0jZGVmaW5lCVBIUF9SRVNfTUVNCQkweEEyCi0jZGVmaW5lCVBIUF9SRVNfUE1FTQkJMHhBMwotCi0jZGVmaW5lCUJSSURHRV9UWVBFX1AyUAkJMHgwMAotI2RlZmluZQlCUklER0VfVFlQRV9IT1NUCTB4MDEKLQotLyogdGhpcyBzaG91bGQgZ28gdG8gZHJpdmVycy9hY3BpL2luY2x1ZGUvICovCi1zdHJ1Y3QgYWNwaV9faHBwIHsKLQl1OAljYWNoZV9saW5lX3NpemU7Ci0JdTgJbGF0ZW5jeV90aW1lcjsKLQl1OAllbmFibGVfc2VycjsKLQl1OAllbmFibGVfcGVycjsKLX07Ci0KLXN0cnVjdCBhY3BpX3BocF9zbG90IHsKLQlzdHJ1Y3QgYWNwaV9waHBfc2xvdAkqbmV4dDsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmJyaWRnZTsKLQlhY3BpX2hhbmRsZQloYW5kbGU7Ci0JaW50CXNlZzsKLQlpbnQJYnVzOwotCWludAlkZXY7Ci0JaW50CWZ1bjsKLQl1MzIJc3VuOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm1lbV9oZWFkOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnBfbWVtX2hlYWQ7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqaW9faGVhZDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpidXNfaGVhZDsKLQl2b2lkCSpzbG90X29wczsJLyogX1NUQSwgX0VKeCwgZXRjICovCi0Jc3RydWN0IHNsb3QgKnNsb3Q7Ci19OwkJLyogcGVyIGZ1bmMgKi8KLQotc3RydWN0IGFjcGlfYnJpZGdlIHsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKnBhcmVudDsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKm5leHQ7Ci0Jc3RydWN0IGFjcGlfYnJpZGdlCSpjaGlsZDsKLQlhY3BpX2hhbmRsZQloYW5kbGU7Ci0JaW50IHNlZzsKLQlpbnQgcGJ1czsJCQkvKiBwZGV2LT5idXMtPm51bWJlcgkJKi8KLQlpbnQgcGRldmljZTsJCQkvKiBQQ0lfU0xPVChwZGV2LT5kZXZmbikJKi8KLQlpbnQgcGZ1bmN0aW9uOwkJCS8qIFBDSV9ERVZGTihwZGV2LT5kZXZmbikJKi8KLQlpbnQgYnVzOwkJCS8qIHBkZXYtPnN1Ym9yZGluYXRlLT5udW1iZXIJKi8KLQlzdHJ1Y3QgYWNwaV9faHBwCQkqX2hwcDsKLQlzdHJ1Y3QgYWNwaV9waHBfc2xvdAkqc2xvdHM7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAJKnRtZW1faGVhZDsJLyogdG90YWwgZnJvbSBjcnMJKi8KLQlzdHJ1Y3QgcGNpX3Jlc291cmNlIAkqdHBfbWVtX2hlYWQ7CS8qIHRvdGFsIGZyb20gY3JzCSovCi0Jc3RydWN0IHBjaV9yZXNvdXJjZSAJKnRpb19oZWFkOwkvKiB0b3RhbCBmcm9tIGNycwkqLwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgCSp0YnVzX2hlYWQ7CS8qIHRvdGFsIGZyb20gY3JzCSovCi0Jc3RydWN0IHBjaV9yZXNvdXJjZSAJKm1lbV9oZWFkOwkvKiBhdmFpbGFibGUJKi8KLQlzdHJ1Y3QgcGNpX3Jlc291cmNlIAkqcF9tZW1faGVhZDsJLyogYXZhaWxhYmxlCSovCi0Jc3RydWN0IHBjaV9yZXNvdXJjZSAJKmlvX2hlYWQ7CS8qIGF2YWlsYWJsZQkqLwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgCSpidXNfaGVhZDsJLyogYXZhaWxhYmxlCSovCi0JaW50IHNjYW5uZWQ7Ci0JaW50IHR5cGU7Ci19OwotCi1zdGF0aWMgc3RydWN0IGFjcGlfYnJpZGdlICphY3BpX2JyaWRnZXNfaGVhZDsKLQogc3RhdGljIHU4ICogYWNwaV9wYXRoX25hbWUoIGFjcGlfaGFuZGxlCWhhbmRsZSkKIHsKIAlhY3BpX3N0YXR1cwkJc3RhdHVzOwpAQCAtMTMzLDg1ICs1Myw0MyBAQAogCQlyZXR1cm4gcGF0aF9uYW1lOwkKIH0KIAotc3RhdGljIHZvaWQgYWNwaV9nZXRfX2hwcCAoIHN0cnVjdCBhY3BpX2JyaWRnZQkqYWIpOwotc3RhdGljIGludCBhY3BpX3J1bl9vc2hwICggc3RydWN0IGFjcGlfYnJpZGdlCSphYik7Ci1zdGF0aWMgaW50IG9zY19ydW5fc3RhdHVzID0gTkNfTk9UX1JVTjsKLXN0YXRpYyBpbnQgb3NocF9ydW5fc3RhdHVzID0gTkNfTk9UX1JVTjsKLQotc3RhdGljIGludCBhY3BpX2FkZF9zbG90X3RvX3BocF9zbG90cygKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiLAotCWludAkJCWJ1c19udW0sCi0JYWNwaV9oYW5kbGUJCWhhbmRsZSwKLQl1MzIJCQlhZHIsCi0JdTMyCQkJc3VuCi0JKQotewotCXN0cnVjdCBhY3BpX3BocF9zbG90CSphcHM7Ci0Jc3RhdGljIGxvbmcJc2FtZXN1biA9IC0xOwotCi0JYXBzID0gKHN0cnVjdCBhY3BpX3BocF9zbG90ICopIGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgYWNwaV9waHBfc2xvdCksIEdGUF9LRVJORUwpOwotCWlmICghYXBzKSB7Ci0JCWVyciAoImFjcGlfcGNpZWhwcm06IGFsbG9jIGZvciBhcHMgZmFpbFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JbWVtc2V0KGFwcywgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX3BocF9zbG90KSk7Ci0KLQlhcHMtPmhhbmRsZSA9IGhhbmRsZTsKLQlhcHMtPmJ1cyA9IGJ1c19udW07Ci0JYXBzLT5kZXYgPSAoYWRyID4+IDE2KSAmIDB4ZmZmZjsKLQlhcHMtPmZ1biA9IGFkciAmIDB4ZmZmZjsKLQlhcHMtPnN1biA9IHN1bjsKLQotCWFwcy0+bmV4dCA9IGFiLT5zbG90czsJLyogY2xpbmcgdG8gdGhlIGJyaWRnZSAqLwotCWFwcy0+YnJpZGdlID0gYWI7Ci0JYWItPnNsb3RzID0gYXBzOwotCi0JYWItPnNjYW5uZWQgKz0gMTsKLQlpZiAoIWFiLT5faHBwKQotCQlhY3BpX2dldF9faHBwKGFiKTsKLQkKLQlpZiAob3NjX3J1bl9zdGF0dXMgPT0gT1NDX05PVF9FWElTVCkKLQkJb3NocF9ydW5fc3RhdHVzID0gYWNwaV9ydW5fb3NocChhYik7Ci0KLQlpZiAoc3VuICE9IHNhbWVzdW4pIHsKLQkJaW5mbygiYWNwaV9wY2llaHBybTogICBTbG90IHN1bigleCkgYXQgczpiOmQ6Zj0weCUwMng6JTAyeDolMDJ4OiUwMnhcbiIsIAotCQkJYXBzLT5zdW4sIGFiLT5zZWcsIGFwcy0+YnVzLCBhcHMtPmRldiwgYXBzLT5mdW4pOwotCQlzYW1lc3VuID0gc3VuOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYWNwaV9nZXRfX2hwcCAoIHN0cnVjdCBhY3BpX2JyaWRnZQkqYWIpCitzdGF0aWMgYWNwaV9zdGF0dXMKK2FjcGlfcnVuX2hwcChhY3BpX2hhbmRsZSBoYW5kbGUsIHN0cnVjdCBob3RwbHVnX3BhcmFtcyAqaHBwKQogewogCWFjcGlfc3RhdHVzCQlzdGF0dXM7CiAJdTgJCQludWlbNF07CiAJc3RydWN0IGFjcGlfYnVmZmVyCXJldF9idWYgPSB7IDAsIE5VTEx9OwogCXVuaW9uIGFjcGlfb2JqZWN0CSpleHRfb2JqLCAqcGFja2FnZTsKLQl1OAkJCSpwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShhYi0+aGFuZGxlKTsKKwl1OAkJCSpwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShoYW5kbGUpOwogCWludAkJCWksIGxlbiA9IDA7CiAKIAkvKiBnZXQgX2hwcCAqLwotCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGFiLT5oYW5kbGUsIE1FVEhPRF9OQU1FX19IUFAsIE5VTEwsICZyZXRfYnVmKTsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsIE1FVEhPRF9OQU1FX19IUFAsIE5VTEwsICZyZXRfYnVmKTsKIAlzd2l0Y2ggKHN0YXR1cykgewogCWNhc2UgQUVfQlVGRkVSX09WRVJGTE9XOgogCQlyZXRfYnVmLnBvaW50ZXIgPSBrbWFsbG9jIChyZXRfYnVmLmxlbmd0aCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcmV0X2J1Zi5wb2ludGVyKSB7Ci0JCQllcnIgKCJhY3BpX3BjaWVocHJtOiVzIGFsbG9jIGZvciBfSFBQIGZhaWxcbiIsIHBhdGhfbmFtZSk7Ci0JCQlyZXR1cm47CisJCQllcnIgKCIlczolcyBhbGxvYyBmb3IgX0hQUCBmYWlsXG4iLCBfX0ZVTkNUSU9OX18sCisJCQkJCXBhdGhfbmFtZSk7CisJCQlyZXR1cm4gQUVfTk9fTUVNT1JZOwogCQl9Ci0JCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGFiLT5oYW5kbGUsIE1FVEhPRF9OQU1FX19IUFAsIE5VTEwsICZyZXRfYnVmKTsKKwkJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCBNRVRIT0RfTkFNRV9fSFBQLAorCQkJCU5VTEwsICZyZXRfYnVmKTsKIAkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQogCQkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQllcnIoImFjcGlfcGNpZWhwcm06JXMgX0hQUCBmYWlsPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKLQkJCXJldHVybjsKKwkJCWRiZygiJXM6JXMgX0hQUCBmYWlsPTB4JXhcbiIsIF9fRlVOQ1RJT05fXywKKwkJCQkJcGF0aF9uYW1lLCBzdGF0dXMpOworCQkJcmV0dXJuIHN0YXR1czsKIAkJfQogCX0KIAogCWV4dF9vYmogPSAodW5pb24gYWNwaV9vYmplY3QgKikgcmV0X2J1Zi5wb2ludGVyOwogCWlmIChleHRfb2JqLT50eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFKSB7Ci0JCWVyciAoImFjcGlfcGNpZWhwcm06JXMgX0hQUCBvYmogbm90IGEgcGFja2FnZVxuIiwgcGF0aF9uYW1lKTsKKwkJZXJyICgiJXM6JXMgX0hQUCBvYmogbm90IGEgcGFja2FnZVxuIiwgX19GVU5DVElPTl9fLAorCQkJCXBhdGhfbmFtZSk7CisJCXN0YXR1cyA9IEFFX0VSUk9SOwogCQlnb3RvIGZyZWVfYW5kX3JldHVybjsKIAl9CiAKQEAgLTIyNCwxNTE0ICsxMDIsMTUzIEBACiAJCQludWlbaV0gPSAodTgpZXh0X29iai0+aW50ZWdlci52YWx1ZTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJZXJyICgiYWNwaV9wY2llaHBybTolcyBfSFBQIG9iaiB0eXBlIGluY29ycmVjdFxuIiwgcGF0aF9uYW1lKTsKKwkJCWVyciAoIiVzOiVzIF9IUFAgb2JqIHR5cGUgaW5jb3JyZWN0XG4iLCBfX0ZVTkNUSU9OX18sCisJCQkJCXBhdGhfbmFtZSk7CisJCQlzdGF0dXMgPSBBRV9FUlJPUjsKIAkJCWdvdG8gZnJlZV9hbmRfcmV0dXJuOwogCQl9CiAJfQogCi0JYWItPl9ocHAgPSBrbWFsbG9jIChzaXplb2YgKHN0cnVjdCBhY3BpX19ocHApLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFiLT5faHBwKSB7Ci0JCWVyciAoImFjcGlfcGNpZWhwcm06JXMgYWxsb2MgZm9yIF9IUFAgZmFpbGVkXG4iLCBwYXRoX25hbWUpOwotCQlnb3RvIGZyZWVfYW5kX3JldHVybjsKLQl9Ci0JbWVtc2V0KGFiLT5faHBwLCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfX2hwcCkpOworCWhwcC0+Y2FjaGVfbGluZV9zaXplID0gbnVpWzBdOworCWhwcC0+bGF0ZW5jeV90aW1lciA9IG51aVsxXTsKKwlocHAtPmVuYWJsZV9zZXJyID0gbnVpWzJdOworCWhwcC0+ZW5hYmxlX3BlcnIgPSBudWlbM107CiAKLQlhYi0+X2hwcC0+Y2FjaGVfbGluZV9zaXplCT0gbnVpWzBdOwotCWFiLT5faHBwLT5sYXRlbmN5X3RpbWVyCQk9IG51aVsxXTsKLQlhYi0+X2hwcC0+ZW5hYmxlX3NlcnIJCT0gbnVpWzJdOwotCWFiLT5faHBwLT5lbmFibGVfcGVycgkJPSBudWlbM107Ci0KLQlkYmcoIiAgX0hQUDogY2FjaGVfbGluZV9zaXplPTB4JXhcbiIsIGFiLT5faHBwLT5jYWNoZV9saW5lX3NpemUpOwotCWRiZygiICBfSFBQOiBsYXRlbmN5IHRpbWVyICA9MHgleFxuIiwgYWItPl9ocHAtPmxhdGVuY3lfdGltZXIpOwotCWRiZygiICBfSFBQOiBlbmFibGUgU0VSUiAgICA9MHgleFxuIiwgYWItPl9ocHAtPmVuYWJsZV9zZXJyKTsKLQlkYmcoIiAgX0hQUDogZW5hYmxlIFBFUlIgICAgPTB4JXhcbiIsIGFiLT5faHBwLT5lbmFibGVfcGVycik7CisJZGJnKCIgIF9IUFA6IGNhY2hlX2xpbmVfc2l6ZT0weCV4XG4iLCBocHAtPmNhY2hlX2xpbmVfc2l6ZSk7CisJZGJnKCIgIF9IUFA6IGxhdGVuY3kgdGltZXIgID0weCV4XG4iLCBocHAtPmxhdGVuY3lfdGltZXIpOworCWRiZygiICBfSFBQOiBlbmFibGUgU0VSUiAgICA9MHgleFxuIiwgaHBwLT5lbmFibGVfc2Vycik7CisJZGJnKCIgIF9IUFA6IGVuYWJsZSBQRVJSICAgID0weCV4XG4iLCBocHAtPmVuYWJsZV9wZXJyKTsKIAogZnJlZV9hbmRfcmV0dXJuOgogCWtmcmVlKHJldF9idWYucG9pbnRlcik7CisJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGludCBhY3BpX3J1bl9vc2hwICggc3RydWN0IGFjcGlfYnJpZGdlCSphYikKK3N0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX3J1bl9vc2hwKGFjcGlfaGFuZGxlIGhhbmRsZSkKIHsKIAlhY3BpX3N0YXR1cwkJc3RhdHVzOwotCXU4CQkJKnBhdGhfbmFtZSA9IGFjcGlfcGF0aF9uYW1lKGFiLT5oYW5kbGUpOworCXU4CQkJKnBhdGhfbmFtZSA9IGFjcGlfcGF0aF9uYW1lKGhhbmRsZSk7CiAKIAkvKiBydW4gT1NIUCAqLwotCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGFiLT5oYW5kbGUsIE1FVEhPRF9OQU1FX09TSFAsIE5VTEwsIE5VTEwpOworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgTUVUSE9EX05BTUVfT1NIUCwgTlVMTCwgTlVMTCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTolcyBPU0hQIGZhaWxzPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKLQkJb3NocF9ydW5fc3RhdHVzID0gKHN0YXR1cyA9PSBBRV9OT1RfRk9VTkQpID8gT1NIUF9OT1RfRVhJU1QgOiBPU0hQX1JVTl9GQUlMRUQ7CisJCWRiZygiJXM6JXMgT1NIUCBmYWlscz0weCV4XG4iLCBfX0ZVTkNUSU9OX18sIHBhdGhfbmFtZSwKKwkJCQlzdGF0dXMpOwogCX0gZWxzZSB7Ci0JCW9zaHBfcnVuX3N0YXR1cyA9IE5DX1JVTl9TVUNDRVNTOwotCQlkYmcoImFjcGlfcGNpZWhwcm06JXMgT1NIUCBwYXNzZXMgPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKLQkJZGJnKCJhY3BpX3BjaWVocHJtOiVzIG9zaHBfcnVuX3N0YXR1cyA9MHgleFxuIiwgcGF0aF9uYW1lLCBvc2hwX3J1bl9zdGF0dXMpOworCQlkYmcoIiVzOiVzIE9TSFAgcGFzc2VzXG4iLCBfX0ZVTkNUSU9OX18sIHBhdGhfbmFtZSk7CiAJfQotCXJldHVybiBvc2hwX3J1bl9zdGF0dXM7Ci19Ci0KLXN0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX2V2YWx1YXRlX2NycygKLQlhY3BpX2hhbmRsZQkJaGFuZGxlLAotCXN0cnVjdCBhY3BpX3Jlc291cmNlCSoqcmV0YnVmCi0JKQotewotCWFjcGlfc3RhdHVzCQlzdGF0dXM7Ci0Jc3RydWN0IGFjcGlfYnVmZmVyCWNyc2J1ZjsKLQl1OAkJCSpwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShoYW5kbGUpOwotCi0JY3JzYnVmLmxlbmd0aCAgPSAwOwotCWNyc2J1Zi5wb2ludGVyID0gTlVMTDsKLQotCXN0YXR1cyA9IGFjcGlfZ2V0X2N1cnJlbnRfcmVzb3VyY2VzIChoYW5kbGUsICZjcnNidWYpOwotCi0Jc3dpdGNoIChzdGF0dXMpIHsKLQljYXNlIEFFX0JVRkZFUl9PVkVSRkxPVzoKLQkJYnJlYWs7CQkvKiBmb3VuZCAqLwotCWNhc2UgQUVfTk9UX0ZPVU5EOgotCQlkYmcoImFjcGlfcGNpZWhwcm06JXMgX0NSUyBub3QgZm91bmRcbiIsIHBhdGhfbmFtZSk7Ci0JCXJldHVybiBzdGF0dXM7Ci0JZGVmYXVsdDoKLQkJZXJyICgiYWNwaV9wY2llaHBybTolcyBfQ1JTIGZhaWw9MHgleFxuIiwgcGF0aF9uYW1lLCBzdGF0dXMpOwotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQotCWNyc2J1Zi5wb2ludGVyID0ga21hbGxvYyAoY3JzYnVmLmxlbmd0aCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjcnNidWYucG9pbnRlcikgewotCQllcnIgKCJhY3BpX3BjaWVocHJtOiBhbGxvYyAlbGQgYnl0ZXMgZm9yICVzIF9DUlMgZmFpbFxuIiwgKHVsb25nKWNyc2J1Zi5sZW5ndGgsIHBhdGhfbmFtZSk7Ci0JCXJldHVybiBBRV9OT19NRU1PUlk7Ci0JfQotCi0Jc3RhdHVzID0gYWNwaV9nZXRfY3VycmVudF9yZXNvdXJjZXMgKGhhbmRsZSwgJmNyc2J1Zik7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTogJXMgX0NSUyBmYWlsPTB4JXguXG4iLCBwYXRoX25hbWUsIHN0YXR1cyk7Ci0JCWtmcmVlKGNyc2J1Zi5wb2ludGVyKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQkqcmV0YnVmID0gY3JzYnVmLnBvaW50ZXI7Ci0KIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgdm9pZCBmcmVlX3BjaV9yZXNvdXJjZSAoIHN0cnVjdCBwY2lfcmVzb3VyY2UJKmFwcmgpCitzdGF0aWMgaW50IGlzX3Jvb3RfYnJpZGdlKGFjcGlfaGFuZGxlIGhhbmRsZSkKIHsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlCSpyZXMsICpuZXh0OworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0ge0FDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMfTsKKwlpbnQgaTsKIAotCWZvciAocmVzID0gYXByaDsgcmVzOyByZXMgPSBuZXh0KSB7Ci0JCW5leHQgPSByZXMtPm5leHQ7Ci0JCWtmcmVlKHJlcyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBwcmludF9wY2lfcmVzb3VyY2UgKCBzdHJ1Y3QgcGNpX3Jlc291cmNlCSphcHJoKQotewotCXN0cnVjdCBwY2lfcmVzb3VyY2UJKnJlczsKLQotCWZvciAocmVzID0gYXByaDsgcmVzOyByZXMgPSByZXMtPm5leHQpCi0JCWRiZygiICAgICAgICBiYXNlPSAweCV4IGxlbmd0aD0gMHgleFxuIiwgcmVzLT5iYXNlLCByZXMtPmxlbmd0aCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50X3Nsb3RfcmVzb3VyY2VzKCBzdHJ1Y3QgYWNwaV9waHBfc2xvdAkqYXBzKQotewotCWlmIChhcHMtPmJ1c19oZWFkKSB7Ci0JCWRiZygiICAgIEJVUyBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChhcHMtPmJ1c19oZWFkKTsKLQl9Ci0KLQlpZiAoYXBzLT5pb19oZWFkKSB7Ci0JCWRiZygiICAgIElPIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGFwcy0+aW9faGVhZCk7Ci0JfQotCi0JaWYgKGFwcy0+bWVtX2hlYWQpIHsKLQkJZGJnKCIgICAgTUVNIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGFwcy0+bWVtX2hlYWQpOwotCX0KLQotCWlmIChhcHMtPnBfbWVtX2hlYWQpIHsKLQkJZGJnKCIgICAgUE1FTSBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChhcHMtPnBfbWVtX2hlYWQpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcHJpbnRfcGNpX3Jlc291cmNlcyggc3RydWN0IGFjcGlfYnJpZGdlCSphYikKLXsKLQlpZiAoYWItPnRidXNfaGVhZCkgewotCQlkYmcoIiAgICBUb3RhbCBCVVMgUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoYWItPnRidXNfaGVhZCk7Ci0JfQotCWlmIChhYi0+YnVzX2hlYWQpIHsKLQkJZGJnKCIgICAgQlVTIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGFiLT5idXNfaGVhZCk7Ci0JfQotCi0JaWYgKGFiLT50aW9faGVhZCkgewotCQlkYmcoIiAgICBUb3RhbCBJTyBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChhYi0+dGlvX2hlYWQpOwotCX0KLQlpZiAoYWItPmlvX2hlYWQpIHsKLQkJZGJnKCIgICAgSU8gUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoYWItPmlvX2hlYWQpOwotCX0KLQotCWlmIChhYi0+dG1lbV9oZWFkKSB7Ci0JCWRiZygiICAgIFRvdGFsIE1FTSBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChhYi0+dG1lbV9oZWFkKTsKLQl9Ci0JaWYgKGFiLT5tZW1faGVhZCkgewotCQlkYmcoIiAgICBNRU0gUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoYWItPm1lbV9oZWFkKTsKLQl9Ci0KLQlpZiAoYWItPnRwX21lbV9oZWFkKSB7Ci0JCWRiZygiICAgIFRvdGFsIFBNRU0gUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoYWItPnRwX21lbV9oZWFkKTsKLQl9Ci0JaWYgKGFiLT5wX21lbV9oZWFkKSB7Ci0JCWRiZygiICAgIFBNRU0gUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoYWItPnBfbWVtX2hlYWQpOwotCX0KLQlpZiAoYWItPl9ocHApIHsKLQkJZGJnKCIgICAgX0hQUDogY2FjaGVfbGluZV9zaXplPTB4JXhcbiIsIGFiLT5faHBwLT5jYWNoZV9saW5lX3NpemUpOwotCQlkYmcoIiAgICBfSFBQOiBsYXRlbmN5IHRpbWVyICA9MHgleFxuIiwgYWItPl9ocHAtPmxhdGVuY3lfdGltZXIpOwotCQlkYmcoIiAgICBfSFBQOiBlbmFibGUgU0VSUiAgICA9MHgleFxuIiwgYWItPl9ocHAtPmVuYWJsZV9zZXJyKTsKLQkJZGJnKCIgICAgX0hQUDogZW5hYmxlIFBFUlIgICAgPTB4JXhcbiIsIGFiLT5faHBwLT5lbmFibGVfcGVycik7Ci0JfQotfQotCi1zdGF0aWMgaW50IHBjaWVocHJtX2RlbGV0ZV9yZXNvdXJjZSgKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICoqYXByaCwKLQl1bG9uZyBiYXNlLAotCXVsb25nIHNpemUpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcmVzOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnByZXZub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnNwbGl0X25vZGU7Ci0JdWxvbmcgdGJhc2U7Ci0KLQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZShhcHJoKTsKLQotCWZvciAocmVzID0gKmFwcmg7IHJlczsgcmVzID0gcmVzLT5uZXh0KSB7Ci0JCWlmIChyZXMtPmJhc2UgPiBiYXNlKQotCQkJY29udGludWU7Ci0KLQkJaWYgKChyZXMtPmJhc2UgKyByZXMtPmxlbmd0aCkgPCAoYmFzZSArIHNpemUpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHJlcy0+YmFzZSA8IGJhc2UpIHsKLQkJCXRiYXNlID0gYmFzZTsKLQotCQkJaWYgKChyZXMtPmxlbmd0aCAtICh0YmFzZSAtIHJlcy0+YmFzZSkpIDwgc2l6ZSkKLQkJCQljb250aW51ZTsKLQotCQkJc3BsaXRfbm9kZSA9IChzdHJ1Y3QgcGNpX3Jlc291cmNlICopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IHJlcy0+YmFzZTsKLQkJCXNwbGl0X25vZGUtPmxlbmd0aCA9IHRiYXNlIC0gcmVzLT5iYXNlOwotCQkJcmVzLT5iYXNlID0gdGJhc2U7Ci0JCQlyZXMtPmxlbmd0aCAtPSBzcGxpdF9ub2RlLT5sZW5ndGg7Ci0KLQkJCXNwbGl0X25vZGUtPm5leHQgPSByZXMtPm5leHQ7Ci0JCQlyZXMtPm5leHQgPSBzcGxpdF9ub2RlOwotCQl9Ci0KLQkJaWYgKHJlcy0+bGVuZ3RoID49IHNpemUpIHsKLQkJCXNwbGl0X25vZGUgPSAoc3RydWN0IHBjaV9yZXNvdXJjZSopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IHJlcy0+YmFzZSArIHNpemU7Ci0JCQlzcGxpdF9ub2RlLT5sZW5ndGggPSByZXMtPmxlbmd0aCAtIHNpemU7Ci0JCQlyZXMtPmxlbmd0aCA9IHNpemU7Ci0KLQkJCXNwbGl0X25vZGUtPm5leHQgPSByZXMtPm5leHQ7Ci0JCQlyZXMtPm5leHQgPSBzcGxpdF9ub2RlOwotCQl9Ci0KLQkJaWYgKCphcHJoID09IHJlcykgewotCQkJKmFwcmggPSByZXMtPm5leHQ7Ci0JCX0gZWxzZSB7Ci0JCQlwcmV2bm9kZSA9ICphcHJoOwotCQkJd2hpbGUgKHByZXZub2RlLT5uZXh0ICE9IHJlcykKLQkJCQlwcmV2bm9kZSA9IHByZXZub2RlLT5uZXh0OwotCi0JCQlwcmV2bm9kZS0+bmV4dCA9IHJlcy0+bmV4dDsKLQkJfQotCQlyZXMtPm5leHQgPSBOVUxMOwotCQlrZnJlZShyZXMpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwY2llaHBybV9kZWxldGVfcmVzb3VyY2VzKAotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKiphcHJoLAotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnRoaXMKLQkpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcmVzOwotCi0JZm9yIChyZXMgPSB0aGlzOyByZXM7IHJlcyA9IHJlcy0+bmV4dCkKLQkJcGNpZWhwcm1fZGVsZXRlX3Jlc291cmNlKGFwcmgsIHJlcy0+YmFzZSwgcmVzLT5sZW5ndGgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcGNpZWhwcm1fYWRkX3Jlc291cmNlKAotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKiphcHJoLAotCXVsb25nIGJhc2UsCi0JdWxvbmcgc2l6ZSkKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpyZXM7Ci0KLQlmb3IgKHJlcyA9ICphcHJoOyByZXM7IHJlcyA9IHJlcy0+bmV4dCkgewotCQlpZiAoKHJlcy0+YmFzZSArIHJlcy0+bGVuZ3RoKSA9PSBiYXNlKSB7Ci0JCQlyZXMtPmxlbmd0aCArPSBzaXplOwotCQkJc2l6ZSA9IDBMOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHJlcy0+bmV4dCA9PSAqYXByaCkKLQkJCWJyZWFrOwotCX0KLQotCWlmIChzaXplKSB7Ci0JCXJlcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFyZXMpIHsKLQkJCWVyciAoImFjcGlfcGNpZWhwcm06IGFsbG9jIGZvciByZXMgZmFpbFxuIik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCQltZW1zZXQocmVzLCAwLCBzaXplb2YgKHN0cnVjdCBwY2lfcmVzb3VyY2UpKTsKLQotCQlyZXMtPmJhc2UgPSBiYXNlOwotCQlyZXMtPmxlbmd0aCA9IHNpemU7Ci0JCXJlcy0+bmV4dCA9ICphcHJoOwotCQkqYXByaCA9IHJlczsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwY2llaHBybV9hZGRfcmVzb3VyY2VzKAotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKiphcHJoLAotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnRoaXMKLQkpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcmVzOwotCWludAlyYyA9IDA7Ci0KLQlmb3IgKHJlcyA9IHRoaXM7IHJlcyAmJiAhcmM7IHJlcyA9IHJlcy0+bmV4dCkKLQkJcmMgPSBwY2llaHBybV9hZGRfcmVzb3VyY2UoYXByaCwgcmVzLT5iYXNlLCByZXMtPmxlbmd0aCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGFjcGlfcGFyc2VfaW8gKAotCXN0cnVjdCBhY3BpX2JyaWRnZQkJKmFiLAotCXVuaW9uIGFjcGlfcmVzb3VyY2VfZGF0YQkqZGF0YQotCSkKLXsKLQlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9pbwkqZGF0YWlvOwotCWRhdGFpbyA9IChzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9pbyAqKSBkYXRhOwotCi0JZGJnKCJJbyBSZXNvdXJjZVxuIik7Ci0JZGJnKCIgICVkIGJpdCBkZWNvZGVcbiIsIEFDUElfREVDT0RFXzE2ID09IGRhdGFpby0+aW9fZGVjb2RlID8gMTY6MTApOwotCWRiZygiICBSYW5nZSBtaW5pbXVtIGJhc2U6ICUwOFhcbiIsIGRhdGFpby0+bWluX2Jhc2VfYWRkcmVzcyk7Ci0JZGJnKCIgIFJhbmdlIG1heGltdW0gYmFzZTogJTA4WFxuIiwgZGF0YWlvLT5tYXhfYmFzZV9hZGRyZXNzKTsKLQlkYmcoIiAgQWxpZ25tZW50OiAlMDhYXG4iLCBkYXRhaW8tPmFsaWdubWVudCk7Ci0JZGJnKCIgIFJhbmdlIExlbmd0aDogJTA4WFxuIiwgZGF0YWlvLT5yYW5nZV9sZW5ndGgpOwotfQotCi1zdGF0aWMgdm9pZCBhY3BpX3BhcnNlX2ZpeGVkX2lvICgKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiLAotCXVuaW9uIGFjcGlfcmVzb3VyY2VfZGF0YQkqZGF0YQotCSkKLXsKLQlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9maXhlZF9pbyAgKmRhdGFmaW87Ci0JZGF0YWZpbyA9IChzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9maXhlZF9pbyAqKSBkYXRhOwotCi0JZGJnKCJGaXhlZCBJbyBSZXNvdXJjZVxuIik7Ci0JZGJnKCIgIFJhbmdlIGJhc2UgYWRkcmVzczogJTA4WCIsIGRhdGFmaW8tPmJhc2VfYWRkcmVzcyk7Ci0JZGJnKCIgIFJhbmdlIGxlbmd0aDogJTA4WCIsIGRhdGFmaW8tPnJhbmdlX2xlbmd0aCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFjcGlfcGFyc2VfYWRkcmVzczE2XzMyICgKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiLAotCXVuaW9uIGFjcGlfcmVzb3VyY2VfZGF0YQkqZGF0YSwKLQlhY3BpX3Jlc291cmNlX3R5cGUJaWQKLQkpCi17Ci0JLyogCi0JICogYWNwaV9yZXNvdXJjZV9hZGRyZXNzMTYgPT0gYWNwaV9yZXNvdXJjZV9hZGRyZXNzMzIKLQkgKiBhY3BpX3Jlc291cmNlX2FkZHJlc3MxNiAqZGF0YTE2ID0gKGFjcGlfcmVzb3VyY2VfYWRkcmVzczE2ICopIGRhdGE7Ci0JICovCi0Jc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczMyICpkYXRhMzIgPSAoc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczMyICopIGRhdGE7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqKmFwcmgsICoqdHByaDsKLQotCWlmIChpZCA9PSBBQ1BJX1JTVFlQRV9BRERSRVNTMTYpCi0JCWRiZygiYWNwaV9wY2llaHBybToxNi1CaXQgQWRkcmVzcyBTcGFjZSBSZXNvdXJjZVxuIik7Ci0JZWxzZQotCQlkYmcoImFjcGlfcGNpZWhwcm06MzItQml0IEFkZHJlc3MgU3BhY2UgUmVzb3VyY2VcbiIpOwotCi0Jc3dpdGNoIChkYXRhMzItPnJlc291cmNlX3R5cGUpIHsKLQljYXNlIEFDUElfTUVNT1JZX1JBTkdFOiAKLQkJZGJnKCIgIFJlc291cmNlIFR5cGU6IE1lbW9yeSBSYW5nZVxuIik7Ci0JCWFwcmggPSAmYWItPm1lbV9oZWFkOwotCQl0cHJoID0gJmFiLT50bWVtX2hlYWQ7Ci0KLQkJc3dpdGNoIChkYXRhMzItPmF0dHJpYnV0ZS5tZW1vcnkuY2FjaGVfYXR0cmlidXRlKSB7Ci0JCWNhc2UgQUNQSV9OT05fQ0FDSEVBQkxFX01FTU9SWToKLQkJCWRiZygiICBUeXBlIFNwZWNpZmljOiBOb25jYWNoZWFibGUgbWVtb3J5XG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX0NBQ0hBQkxFX01FTU9SWToKLQkJCWRiZygiICBUeXBlIFNwZWNpZmljOiBDYWNoZWFibGUgbWVtb3J5XG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX1dSSVRFX0NPTUJJTklOR19NRU1PUlk6Ci0JCQlkYmcoIiAgVHlwZSBTcGVjaWZpYzogV3JpdGUtY29tYmluaW5nIG1lbW9yeVxuIik7Ci0JCQlicmVhazsgCi0JCWNhc2UgQUNQSV9QUkVGRVRDSEFCTEVfTUVNT1JZOgotCQkJYXByaCA9ICZhYi0+cF9tZW1faGVhZDsKLQkJCWRiZygiICBUeXBlIFNwZWNpZmljOiBQcmVmZXRjaGFibGUgbWVtb3J5XG4iKTsKLQkJCWJyZWFrOyAKLQkJZGVmYXVsdDoKLQkJCWRiZygiICBUeXBlIFNwZWNpZmljOiBJbnZhbGlkIGNhY2hlIGF0dHJpYnV0ZVxuIik7Ci0JCQlicmVhazsKLQkJfQotCi0JCWRiZygiICBUeXBlIFNwZWNpZmljOiBSZWFkJXNcbiIsIEFDUElfUkVBRF9XUklURV9NRU1PUlkgPT0gZGF0YTMyLT5hdHRyaWJ1dGUubWVtb3J5LnJlYWRfd3JpdGVfYXR0cmlidXRlID8gIi9Xcml0ZSI6IiBPbmx5Iik7Ci0JCWJyZWFrOwotCi0JY2FzZSBBQ1BJX0lPX1JBTkdFOiAKLQkJZGJnKCIgIFJlc291cmNlIFR5cGU6IEkvTyBSYW5nZVxuIik7Ci0JCWFwcmggPSAmYWItPmlvX2hlYWQ7Ci0JCXRwcmggPSAmYWItPnRpb19oZWFkOwotCi0JCXN3aXRjaCAoZGF0YTMyLT5hdHRyaWJ1dGUuaW8ucmFuZ2VfYXR0cmlidXRlKSB7Ci0JCWNhc2UgQUNQSV9OT05fSVNBX09OTFlfUkFOR0VTOgotCQkJZGJnKCIgIFR5cGUgU3BlY2lmaWM6IE5vbi1JU0EgSW8gQWRkcmVzc2VzXG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX0lTQV9PTkxZX1JBTkdFUzoKLQkJCWRiZygiICBUeXBlIFNwZWNpZmljOiBJU0EgSW8gQWRkcmVzc2VzXG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX0VOVElSRV9SQU5HRToKLQkJCWRiZygiICBUeXBlIFNwZWNpZmljOiBJU0EgYW5kIG5vbi1JU0EgSW8gQWRkcmVzc2VzXG4iKTsKLQkJCWJyZWFrOyAKLQkJZGVmYXVsdDoKLQkJCWRiZygiICBUeXBlIFNwZWNpZmljOiBJbnZhbGlkIHJhbmdlIGF0dHJpYnV0ZVxuIik7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgQUNQSV9CVVNfTlVNQkVSX1JBTkdFOiAKLQkJZGJnKCIgIFJlc291cmNlIFR5cGU6IEJ1cyBOdW1iZXIgUmFuZ2UoZml4ZWQpXG4iKTsKLQkJLyogZml4dXAgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSByZXN0IG9mIHBocCBkcml2ZXIgKi8KLQkJZGF0YTMyLT5taW5fYWRkcmVzc19yYW5nZSsrOwotCQlkYXRhMzItPmFkZHJlc3NfbGVuZ3RoLS07Ci0JCWFwcmggPSAmYWItPmJ1c19oZWFkOwotCQl0cHJoID0gJmFiLT50YnVzX2hlYWQ7Ci0JCWJyZWFrOyAKLQlkZWZhdWx0OiAKLQkJZGJnKCIgIFJlc291cmNlIFR5cGU6IEludmFsaWQgcmVzb3VyY2UgdHlwZS4gRXhpdGluZy5cbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZGJnKCIgIFJlc291cmNlICVzXG4iLCBBQ1BJX0NPTlNVTUVSID09IGRhdGEzMi0+cHJvZHVjZXJfY29uc3VtZXIgPyAiQ29uc3VtZXIiOiJQcm9kdWNlciIpOwotCWRiZygiICAlcyBkZWNvZGVcbiIsIEFDUElfU1VCX0RFQ09ERSA9PSBkYXRhMzItPmRlY29kZSA/ICJTdWJ0cmFjdGl2ZSI6IlBvc2l0aXZlIik7Ci0JZGJnKCIgIE1pbiBhZGRyZXNzIGlzICVzIGZpeGVkXG4iLCBBQ1BJX0FERFJFU1NfRklYRUQgPT0gZGF0YTMyLT5taW5fYWRkcmVzc19maXhlZCA/ICIiOiJub3QiKTsKLQlkYmcoIiAgTWF4IGFkZHJlc3MgaXMgJXMgZml4ZWRcbiIsIEFDUElfQUREUkVTU19GSVhFRCA9PSBkYXRhMzItPm1heF9hZGRyZXNzX2ZpeGVkID8gIiI6Im5vdCIpOwotCWRiZygiICBHcmFudWxhcml0eTogJTA4WFxuIiwgZGF0YTMyLT5ncmFudWxhcml0eSk7Ci0JZGJnKCIgIEFkZHJlc3MgcmFuZ2UgbWluOiAlMDhYXG4iLCBkYXRhMzItPm1pbl9hZGRyZXNzX3JhbmdlKTsKLQlkYmcoIiAgQWRkcmVzcyByYW5nZSBtYXg6ICUwOFhcbiIsIGRhdGEzMi0+bWF4X2FkZHJlc3NfcmFuZ2UpOwotCWRiZygiICBBZGRyZXNzIHRyYW5zbGF0aW9uIG9mZnNldDogJTA4WFxuIiwgZGF0YTMyLT5hZGRyZXNzX3RyYW5zbGF0aW9uX29mZnNldCk7Ci0JZGJnKCIgIEFkZHJlc3MgTGVuZ3RoOiAlMDhYXG4iLCBkYXRhMzItPmFkZHJlc3NfbGVuZ3RoKTsKLQotCWlmICgweEZGICE9IGRhdGEzMi0+cmVzb3VyY2Vfc291cmNlLmluZGV4KSB7Ci0JCWRiZygiICBSZXNvdXJjZSBTb3VyY2UgSW5kZXg6ICVYXG4iLCBkYXRhMzItPnJlc291cmNlX3NvdXJjZS5pbmRleCk7Ci0JCS8qIGRiZygiICBSZXNvdXJjZSBTb3VyY2U6ICVzXG4iLCBkYXRhMzItPnJlc291cmNlX3NvdXJjZS5zdHJpbmdfcHRyKTsgKi8KLQl9Ci0KLQlwY2llaHBybV9hZGRfcmVzb3VyY2UoYXByaCwgZGF0YTMyLT5taW5fYWRkcmVzc19yYW5nZSwgZGF0YTMyLT5hZGRyZXNzX2xlbmd0aCk7Ci19Ci0KLXN0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX3BhcnNlX2NycygKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiLAotCXN0cnVjdCBhY3BpX3Jlc291cmNlCSpjcnNidWYKLQkpCi17Ci0JYWNwaV9zdGF0dXMJCXN0YXR1cyA9IEFFX09LOwotCXN0cnVjdCBhY3BpX3Jlc291cmNlCSpyZXNvdXJjZSA9IGNyc2J1ZjsKLQl1OAkJCQljb3VudCA9IDA7Ci0JdTgJCQkJZG9uZSA9IDA7Ci0KLQl3aGlsZSAoIWRvbmUpIHsKLQkJZGJnKCJhY3BpX3BjaWVocHJtOiBQQ0kgYnVzIDB4JXggUmVzb3VyY2Ugc3RydWN0dXJlICV4LlxuIiwgYWItPmJ1cywgY291bnQrKyk7Ci0JCXN3aXRjaCAocmVzb3VyY2UtPmlkKSB7Ci0JCWNhc2UgQUNQSV9SU1RZUEVfSVJROgotCQkJZGJnKCJJcnEgLS0tLS0tLS0gUmVzb3VyY2VcbiIpOwotCQkJYnJlYWs7IAotCQljYXNlIEFDUElfUlNUWVBFX0RNQToKLQkJCWRiZygiRE1BIC0tLS0tLS0tIFJlc291cmNlXG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX1JTVFlQRV9TVEFSVF9EUEY6Ci0JCQlkYmcoIlN0YXJ0IERQRiAtLS0tLS0tLSBSZXNvdXJjZVxuIik7Ci0JCQlicmVhazsgCi0JCWNhc2UgQUNQSV9SU1RZUEVfRU5EX0RQRjoKLQkJCWRiZygiRW5kIERQRiAtLS0tLS0tLSBSZXNvdXJjZVxuIik7Ci0JCQlicmVhazsgCi0JCWNhc2UgQUNQSV9SU1RZUEVfSU86Ci0JCQlhY3BpX3BhcnNlX2lvIChhYiwgJnJlc291cmNlLT5kYXRhKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX1JTVFlQRV9GSVhFRF9JTzoKLQkJCWFjcGlfcGFyc2VfZml4ZWRfaW8gKGFiLCAmcmVzb3VyY2UtPmRhdGEpOwotCQkJYnJlYWs7IAotCQljYXNlIEFDUElfUlNUWVBFX1ZFTkRPUjoKLQkJCWRiZygiVmVuZG9yIC0tLS0tLS0tIFJlc291cmNlXG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX1JTVFlQRV9FTkRfVEFHOgotCQkJZGJnKCJFbmRfdGFnIC0tLS0tLS0tIFJlc291cmNlXG4iKTsKLQkJCWRvbmUgPSAxOwotCQkJYnJlYWs7IAotCQljYXNlIEFDUElfUlNUWVBFX01FTTI0OgotCQkJZGJnKCJNZW0yNCAtLS0tLS0tLSBSZXNvdXJjZVxuIik7Ci0JCQlicmVhazsgCi0JCWNhc2UgQUNQSV9SU1RZUEVfTUVNMzI6Ci0JCQlkYmcoIk1lbTMyIC0tLS0tLS0tIFJlc291cmNlXG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX1JTVFlQRV9GSVhFRF9NRU0zMjoKLQkJCWRiZygiRml4ZWQgTWVtMzIgLS0tLS0tLS0gUmVzb3VyY2VcbiIpOwotCQkJYnJlYWs7IAotCQljYXNlIEFDUElfUlNUWVBFX0FERFJFU1MxNjoKLQkJCWFjcGlfcGFyc2VfYWRkcmVzczE2XzMyKGFiLCAmcmVzb3VyY2UtPmRhdGEsIEFDUElfUlNUWVBFX0FERFJFU1MxNik7Ci0JCQlicmVhazsgCi0JCWNhc2UgQUNQSV9SU1RZUEVfQUREUkVTUzMyOgotCQkJYWNwaV9wYXJzZV9hZGRyZXNzMTZfMzIoYWIsICZyZXNvdXJjZS0+ZGF0YSwgQUNQSV9SU1RZUEVfQUREUkVTUzMyKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX1JTVFlQRV9BRERSRVNTNjQ6Ci0JCQlpbmZvKCJBZGRyZXNzNjQgLS0tLS0tLS0gUmVzb3VyY2UgdW5wYXJzZWRcbiIpOwotCQkJYnJlYWs7IAotCQljYXNlIEFDUElfUlNUWVBFX0VYVF9JUlE6Ci0JCQlkYmcoIkV4dCBJcnEgLS0tLS0tLS0gUmVzb3VyY2VcbiIpOwotCQkJYnJlYWs7IAotCQlkZWZhdWx0OgotCQkJZGJnKCJJbnZhbGlkIC0tLS0tLS0tIHJlc291cmNlIHR5cGUgMHgleFxuIiwgcmVzb3VyY2UtPmlkKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcmVzb3VyY2UgPSAoc3RydWN0IGFjcGlfcmVzb3VyY2UgKikgKChjaGFyICopcmVzb3VyY2UgKyByZXNvdXJjZS0+bGVuZ3RoKTsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV9nZXRfY3JzKCBzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiKQotewotCWFjcGlfc3RhdHVzCQlzdGF0dXM7Ci0Jc3RydWN0IGFjcGlfcmVzb3VyY2UJKmNyc2J1ZjsKLQotCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfY3JzKGFiLT5oYW5kbGUsICZjcnNidWYpOworCXN0YXR1cyA9IGFjcGlfZ2V0X29iamVjdF9pbmZvKGhhbmRsZSwgJmJ1ZmZlcik7CiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7Ci0JCXN0YXR1cyA9IGFjcGlfcGFyc2VfY3JzKGFiLCBjcnNidWYpOwotCQlrZnJlZShjcnNidWYpOwotCi0JCXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCZhYi0+YnVzX2hlYWQpOwotCQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmYWItPmlvX2hlYWQpOwotCQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmYWItPm1lbV9oZWFkKTsKLQkJcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJmFiLT5wX21lbV9oZWFkKTsKLQotCQlwY2llaHBybV9hZGRfcmVzb3VyY2VzICgmYWItPnRidXNfaGVhZCwgYWItPmJ1c19oZWFkKTsKLQkJcGNpZWhwcm1fYWRkX3Jlc291cmNlcyAoJmFiLT50aW9faGVhZCwgYWItPmlvX2hlYWQpOwotCQlwY2llaHBybV9hZGRfcmVzb3VyY2VzICgmYWItPnRtZW1faGVhZCwgYWItPm1lbV9oZWFkKTsKLQkJcGNpZWhwcm1fYWRkX3Jlc291cmNlcyAoJmFiLT50cF9tZW1faGVhZCwgYWItPnBfbWVtX2hlYWQpOwotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qIGZpbmQgYWNwaV9icmlkZ2UgZG93bndvcmQgZnJvbSBhYi4gICovCi1zdGF0aWMgc3RydWN0IGFjcGlfYnJpZGdlICoKLWZpbmRfYWNwaV9icmlkZ2VfYnlfYnVzKAotCXN0cnVjdCBhY3BpX2JyaWRnZSAqYWIsCi0JaW50IHNlZywKLQlpbnQgYnVzCQkvKiBwZGV2LT5zdWJvcmRpbmF0ZS0+bnVtYmVyICovCi0JKQotewotCXN0cnVjdCBhY3BpX2JyaWRnZQkqbGFiID0gTlVMTDsKLQotCWlmICghYWIpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKChhYi0+YnVzID09IGJ1cykgJiYgKGFiLT5zZWcgPT0gc2VnKSkKLQkJcmV0dXJuIGFiOwotCi0JaWYgKGFiLT5jaGlsZCkKLQkJbGFiID0gZmluZF9hY3BpX2JyaWRnZV9ieV9idXMoYWItPmNoaWxkLCBzZWcsIGJ1cyk7Ci0KLQlpZiAoIWxhYikKLQlpZiAoYWItPm5leHQpCi0JCWxhYiA9IGZpbmRfYWNwaV9icmlkZ2VfYnlfYnVzKGFiLT5uZXh0LCBzZWcsIGJ1cyk7Ci0KLQlyZXR1cm4gbGFiOwotfQotCi0vKgotICogQnVpbGQgYSBkZXZpY2UgdHJlZSBvZiBBQ1BJIFBDSSBCcmlkZ2VzCi0gKi8KLXN0YXRpYyB2b2lkIHBjaWVocHJtX2FjcGlfcmVnaXN0ZXJfYV9icmlkZ2UgKAotCXN0cnVjdCBhY3BpX2JyaWRnZQkqKmhlYWQsCi0Jc3RydWN0IGFjcGlfYnJpZGdlCSpwYWIsCS8qIHBhcmVudCBicmlkZ2UgdG8gd2hpY2ggY2hpbGQgYnJpZGdlIGlzIGFkZGVkICovCi0Jc3RydWN0IGFjcGlfYnJpZGdlCSpjYWIJLyogY2hpbGQgYnJpZGdlIHRvIGFkZCAqLwotCSkKLXsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmxwYWI7Ci0Jc3RydWN0IGFjcGlfYnJpZGdlCSpsY2FiOwotCi0JbHBhYiA9IGZpbmRfYWNwaV9icmlkZ2VfYnlfYnVzKCpoZWFkLCBwYWItPnNlZywgcGFiLT5idXMpOwotCWlmICghbHBhYikgewotCQlpZiAoIShwYWItPnR5cGUgJiBCUklER0VfVFlQRV9IT1NUKSkKLQkJCXdhcm4oIlBDSSBwYXJlbnQgYnJpZGdlIHM6YigleDoleCkgbm90IGluIGxpc3QuXG4iLCBwYWItPnNlZywgcGFiLT5idXMpOwotCQlwYWItPm5leHQgPSAqaGVhZDsKLQkJKmhlYWQgPSBwYWI7Ci0JCWxwYWIgPSBwYWI7Ci0JfQotCi0JaWYgKChjYWItPnR5cGUgJiBCUklER0VfVFlQRV9IT1NUKSAmJiAocGFiID09IGNhYikpCi0JCXJldHVybjsKLQotCWxjYWIgPSBmaW5kX2FjcGlfYnJpZGdlX2J5X2J1cygqaGVhZCwgY2FiLT5zZWcsIGNhYi0+YnVzKTsKLQlpZiAobGNhYikgewotCQlpZiAoKHBhYi0+YnVzICE9IGxjYWItPnBhcmVudC0+YnVzKSB8fCAobGNhYi0+YnVzICE9IGNhYi0+YnVzKSkKLQkJCWVycigiUENJIGNoaWxkIGJyaWRnZSBzOmIoJXg6JXgpIGluIGxpc3Qgd2l0aCBkaWZmIHBhcmVudC5cbiIsIGNhYi0+c2VnLCBjYWItPmJ1cyk7Ci0JCXJldHVybjsKLQl9IGVsc2UKLQkJbGNhYiA9IGNhYjsKLQotCWxjYWItPnBhcmVudCA9IGxwYWI7Ci0JbGNhYi0+bmV4dCA9IGxwYWItPmNoaWxkOwotCWxwYWItPmNoaWxkID0gbGNhYjsKLX0KLQotc3RhdGljIGFjcGlfc3RhdHVzIHBjaWVocHJtX2FjcGlfYnVpbGRfcGhwX3Nsb3RzX2NhbGxiYWNrKAotCWFjcGlfaGFuZGxlCQloYW5kbGUsCi0JdTMyCQkJTGV2ZWwsCi0Jdm9pZAkJCSpjb250ZXh0LAotCXZvaWQJCQkqKnJldHZhbAotCSkKLXsKLQl1bG9uZwkJYnVzX251bTsKLQl1bG9uZwkJc2VnX251bTsKLQl1bG9uZwkJc3VuLCBhZHI7Ci0JdWxvbmcJCXBhZHIgPSAwOwotCWFjcGlfaGFuZGxlCQlwaGFuZGxlID0gTlVMTDsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKnBhYiA9IChzdHJ1Y3QgYWNwaV9icmlkZ2UgKiljb250ZXh0OwotCXN0cnVjdCBhY3BpX2JyaWRnZQkqbGFiOwotCWFjcGlfc3RhdHVzCQlzdGF0dXM7Ci0JdTgJCQkqcGF0aF9uYW1lID0gYWNwaV9wYXRoX25hbWUoaGFuZGxlKTsKLQotCS8qIGdldCBfU1VOICovCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgTUVUSE9EX05BTUVfX1NVTiwgTlVMTCwgJnN1bik7Ci0Jc3dpdGNoKHN0YXR1cykgewotCWNhc2UgQUVfTk9UX0ZPVU5EOgotCQlyZXR1cm4gQUVfT0s7Ci0JZGVmYXVsdDoKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQllcnIoImFjcGlfcGNpZWhwcm06JXMgX1NVTiBmYWlsPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7CisJCWluZm8gPSBidWZmZXIucG9pbnRlcjsKKwkJaWYgKChpbmZvLT52YWxpZCAmIEFDUElfVkFMSURfSElEKSAmJgorCQkJIXN0cmNtcChQQ0lfUk9PVF9ISURfU1RSSU5HLAorCQkJCQlpbmZvLT5oYXJkd2FyZV9pZC52YWx1ZSkpIHsKKwkJCWFjcGlfb3NfZnJlZShidWZmZXIucG9pbnRlcik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlpZiAoaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX0NJRCkgeworCQkJZm9yIChpPTA7IGkgPCBpbmZvLT5jb21wYXRpYmlsaXR5X2lkLmNvdW50OyBpKyspIHsKKwkJCQlpZiAoIXN0cmNtcChQQ0lfUk9PVF9ISURfU1RSSU5HLAorCQkJCQlpbmZvLT5jb21wYXRpYmlsaXR5X2lkLmlkW2ldLnZhbHVlKSkgeworCQkJCQlhY3BpX29zX2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworCQkJCQlyZXR1cm4gMTsKKwkJCQl9CisJCQl9CiAJCX0KIAl9Ci0KLQkvKiBnZXQgX0FEUi4gX0FEUiBtdXN0IGV4aXN0IGlmIF9TVU4gZXhpc3RzICovCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgTUVUSE9EX05BTUVfX0FEUiwgTlVMTCwgJmFkcik7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTolcyBfQURSIGZhaWw9MHgleFxuIiwgcGF0aF9uYW1lLCBzdGF0dXMpOwotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQotCWRiZygiYWNwaV9wY2llaHBybTolcyBzdW49MHglMDh4IGFkcj0weCUwOHhcbiIsIHBhdGhfbmFtZSwgKHUzMilzdW4sICh1MzIpYWRyKTsKLQotCXN0YXR1cyA9IGFjcGlfZ2V0X3BhcmVudChoYW5kbGUsICZwaGFuZGxlKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZXJyKCJhY3BpX3BjaWVocHJtOiVzIGdldF9wYXJlbnQgZmFpbD0weCV4XG4iLCBwYXRoX25hbWUsIHN0YXR1cyk7Ci0JCXJldHVybiAoc3RhdHVzKTsKLQl9Ci0KLQlidXNfbnVtID0gcGFiLT5idXM7Ci0Jc2VnX251bSA9IHBhYi0+c2VnOwotCi0JaWYgKHBhYi0+YnVzID09IGJ1c19udW0pIHsKLQkJbGFiID0gcGFiOwotCX0gZWxzZSB7Ci0JCWRiZygiV0FSTjogcGFiIGlzIG5vdCBwYXJlbnRcbiIpOwotCQlsYWIgPSBmaW5kX2FjcGlfYnJpZGdlX2J5X2J1cyhwYWIsIHNlZ19udW0sIGJ1c19udW0pOwotCQlpZiAoIWxhYikgewotCQkJZGJnKCJhY3BpX3BjaWVocHJtOiBhbGxvYyBuZXcgUDJQIGJyaWRnZSgleCkgZm9yIHN1biglMDh4KVxuIiwgKHUzMilidXNfbnVtLCAodTMyKXN1bik7Ci0JCQlsYWIgPSAoc3RydWN0IGFjcGlfYnJpZGdlICopa21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfYnJpZGdlKSwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIWxhYikgewotCQkJCWVycigiYWNwaV9wY2llaHBybTogYWxsb2MgZm9yIGFiIGZhaWxcbiIpOwotCQkJCXJldHVybiBBRV9OT19NRU1PUlk7Ci0JCQl9Ci0JCQltZW1zZXQobGFiLCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfYnJpZGdlKSk7Ci0KLQkJCWxhYi0+aGFuZGxlID0gcGhhbmRsZTsKLQkJCWxhYi0+cGJ1cyA9IHBhYi0+YnVzOwotCQkJbGFiLT5wZGV2aWNlID0gKGludCkocGFkciA+PiAxNikgJiAweGZmZmY7Ci0JCQlsYWItPnBmdW5jdGlvbiA9IChpbnQpKHBhZHIgJiAweGZmZmYpOwotCQkJbGFiLT5idXMgPSAoaW50KWJ1c19udW07Ci0JCQlsYWItPnNjYW5uZWQgPSAwOwotCQkJbGFiLT50eXBlID0gQlJJREdFX1RZUEVfUDJQOwotCi0JCQlwY2llaHBybV9hY3BpX3JlZ2lzdGVyX2FfYnJpZGdlICgmYWNwaV9icmlkZ2VzX2hlYWQsIHBhYiwgbGFiKTsKLQkJfSBlbHNlCi0JCQlkYmcoImFjcGlfcGNpZWhwcm06IGZvdW5kIFAyUCBicmlkZ2UoJXgpIGZvciBzdW4oJTA4eClcbiIsICh1MzIpYnVzX251bSwgKHUzMilzdW4pOwotCX0KLQotCWFjcGlfYWRkX3Nsb3RfdG9fcGhwX3Nsb3RzKGxhYiwgKGludClidXNfbnVtLCBoYW5kbGUsICh1MzIpYWRyLCAodTMyKXN1bik7Ci0KLQlyZXR1cm4gKHN0YXR1cyk7Ci19Ci0KLXN0YXRpYyBpbnQgcGNpZWhwcm1fYWNwaV9idWlsZF9waHBfc2xvdHMoCi0Jc3RydWN0IGFjcGlfYnJpZGdlCSphYiwKLQl1MzIJCQlkZXB0aAotCSkKLXsKLQlhY3BpX3N0YXR1cwlzdGF0dXM7Ci0JdTgJCSpwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShhYi0+aGFuZGxlKTsKLQotCS8qIFdhbGsgZG93biB0aGlzIHBjaSBicmlkZ2UgdG8gZ2V0IF9TVU5zIGlmIGFueSBiZWhpbmQgUDJQICovCi0Jc3RhdHVzID0gYWNwaV93YWxrX25hbWVzcGFjZSAoIEFDUElfVFlQRV9ERVZJQ0UsCi0JCQkJYWItPmhhbmRsZSwKLQkJCQlkZXB0aCwKLQkJCQlwY2llaHBybV9hY3BpX2J1aWxkX3BocF9zbG90c19jYWxsYmFjaywKLQkJCQlhYiwKLQkJCQlOVUxMICk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWRiZygiYWNwaV9wY2llaHBybTolcyB3YWxrIGZvciBfU1VOIG9uIHBjaSBicmlkZ2Ugc2VnOmJ1cygleDoleCkgZmFpbD0weCV4XG4iLCBwYXRoX25hbWUsIGFiLT5zZWcsIGFiLT5idXMsIHN0YXR1cyk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYnVpbGRfYV9icmlkZ2UoCi0Jc3RydWN0IGFjcGlfYnJpZGdlCSpwYWIsCi0Jc3RydWN0IGFjcGlfYnJpZGdlCSphYgotCSkKK2ludCBwY2llaHBfZ2V0X2hwX2h3X2NvbnRyb2xfZnJvbV9maXJtd2FyZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewotCXU4CQkqcGF0aF9uYW1lID0gYWNwaV9wYXRoX25hbWUoYWItPmhhbmRsZSk7Ci0KLQlwY2llaHBybV9hY3BpX3JlZ2lzdGVyX2FfYnJpZGdlICgmYWNwaV9icmlkZ2VzX2hlYWQsIHBhYiwgYWIpOwotCi0Jc3dpdGNoIChhYi0+dHlwZSkgewotCWNhc2UgQlJJREdFX1RZUEVfSE9TVDoKLQkJZGJnKCJhY3BpX3BjaWVocHJtOiBSZWdpc3RlcmVkIFBDSSBIT1NUIEJyaWRnZSglMDJ4KSAgICBvbiBzOmI6ZDpmKCUwMng6JTAyeDolMDJ4OiUwMngpIFslc11cbiIsCi0JCQlhYi0+YnVzLCBhYi0+c2VnLCBhYi0+cGJ1cywgYWItPnBkZXZpY2UsIGFiLT5wZnVuY3Rpb24sIHBhdGhfbmFtZSk7Ci0JCWJyZWFrOwotCWNhc2UgQlJJREdFX1RZUEVfUDJQOgotCQlkYmcoImFjcGlfcGNpZWhwcm06IFJlZ2lzdGVyZWQgUENJICBQMlAgQnJpZGdlKCUwMngtJTAyeCkgb24gczpiOmQ6ZiglMDJ4OiUwMng6JTAyeDolMDJ4KSBbJXNdXG4iLAotCQkJYWItPnBidXMsIGFiLT5idXMsIGFiLT5zZWcsIGFiLT5wYnVzLCBhYi0+cGRldmljZSwgYWItPnBmdW5jdGlvbiwgcGF0aF9uYW1lKTsKLQkJYnJlYWs7Ci0JfTsKLQotCS8qIGJ1aWxkIGFueSBpbW1lZGlhdGUgUEhQIHNsb3RzIHVuZGVyIHRoaXMgcGNpIGJyaWRnZSAqLwotCXBjaWVocHJtX2FjcGlfYnVpbGRfcGhwX3Nsb3RzKGFiLCAxKTsKLX0KLQotc3RhdGljIHN0cnVjdCBhY3BpX2JyaWRnZSAqIGFkZF9wMnBfYnJpZGdlKAotCWFjcGlfaGFuZGxlIGhhbmRsZSwKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKnBhYiwJLyogcGFyZW50ICovCi0JdWxvbmcJYWRyCi0JKQotewotCXN0cnVjdCBhY3BpX2JyaWRnZQkqYWI7Ci0Jc3RydWN0IHBjaV9kZXYJKnBkZXY7Ci0JdWxvbmcJCWRldm51bSwgZnVuY251bTsKLQl1OAkJCSpwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShoYW5kbGUpOwotCi0JYWIgPSAoc3RydWN0IGFjcGlfYnJpZGdlICopIGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgYWNwaV9icmlkZ2UpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFiKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTogYWxsb2MgZm9yIGFiIGZhaWxcbiIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JbWVtc2V0KGFiLCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfYnJpZGdlKSk7Ci0KLQlkZXZudW0gPSAoYWRyID4+IDE2KSAmIDB4ZmZmZjsKLQlmdW5jbnVtID0gYWRyICYgMHhmZmZmOwotCi0JcGRldiA9IHBjaV9maW5kX3Nsb3QocGFiLT5idXMsIFBDSV9ERVZGTihkZXZudW0sIGZ1bmNudW0pKTsKLQlpZiAoIXBkZXYgfHwgIXBkZXYtPnN1Ym9yZGluYXRlKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTolcyBpcyBub3QgYSBQMlAgQnJpZGdlXG4iLCBwYXRoX25hbWUpOwotCQlrZnJlZShhYik7Ci0JCXJldHVybiBOVUxMOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlhY3BpX2hhbmRsZSBjaGFuZGxlLCBoYW5kbGUgPSBERVZJQ0VfQUNQSV9IQU5ETEUoJihkZXYtPmRldikpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2OworCXU4ICpwYXRoX25hbWU7CisJLyoKKwkgKiBQZXIgUENJIGZpcm13YXJlIHNwZWNpZmljYXRpb24sIHdlIHNob3VsZCBydW4gdGhlIEFDUEkgX09TQworCSAqIG1ldGhvZCB0byBnZXQgY29udHJvbCBvZiBob3RwbHVnIGhhcmR3YXJlIGJlZm9yZSB1c2luZyBpdC4KKwkgKiBJZiBhbiBfT1NDIGlzIG1pc3NpbmcsIHdlIGxvb2sgZm9yIGFuIE9TSFAgdG8gZG8gdGhlIHNhbWUgdGhpbmcuCisJICogVG8gaGFuZGxlIGRpZmZlcmVudCBCSU9TIGJlaGF2aW9yLCB3ZSBsb29rIGZvciBfT1NDIGFuZCBPU0hQCisJICogd2l0aGluIHRoZSBzY29wZSBvZiB0aGUgaG90cGx1ZyBjb250cm9sbGVyIGFuZCBpdHMgcGFyZW50cywgdXB0bworCSAqIHRoZSBob3N0IGJyaWRnZSB1bmRlciB3aGljaCB0aGlzIGNvbnRyb2xsZXIgZXhpc3RzLgorCSAqLworCXdoaWxlICghaGFuZGxlKSB7CisJCS8qCisJCSAqIFRoaXMgaG90cGx1ZyBjb250cm9sbGVyIHdhcyBub3QgbGlzdGVkIGluIHRoZSBBQ1BJIG5hbWUKKwkJICogc3BhY2UgYXQgYWxsLiBUcnkgdG8gZ2V0IGFjcGkgaGFuZGxlIG9mIHBhcmVudCBwY2kgYnVzLgorCQkgKi8KKwkJaWYgKCFwZGV2IHx8ICFwZGV2LT5idXMtPnBhcmVudCkKKwkJCWJyZWFrOworCQlkYmcoIkNvdWxkIG5vdCBmaW5kICVzIGluIGFjcGkgbmFtZXNwYWNlLCB0cnlpbmcgcGFyZW50XG4iLAorCQkJCXBjaV9uYW1lKHBkZXYpKTsKKwkJaWYgKCFwZGV2LT5idXMtPnBhcmVudC0+c2VsZikKKwkJCS8qIFBhcmVudCBtdXN0IGJlIGEgaG9zdCBicmlkZ2UgKi8KKwkJCWhhbmRsZSA9IGFjcGlfZ2V0X3BjaV9yb290YnJpZGdlX2hhbmRsZSgKKwkJCQkJcGNpX2RvbWFpbl9ucihwZGV2LT5idXMtPnBhcmVudCksCisJCQkJCXBkZXYtPmJ1cy0+cGFyZW50LT5udW1iZXIpOworCQllbHNlCisJCQloYW5kbGUgPSBERVZJQ0VfQUNQSV9IQU5ETEUoCisJCQkJCSYocGRldi0+YnVzLT5wYXJlbnQtPnNlbGYtPmRldikpOworCQlwZGV2ID0gcGRldi0+YnVzLT5wYXJlbnQtPnNlbGY7CiAJfQogCi0JYWItPmhhbmRsZSA9IGhhbmRsZTsKLQlhYi0+c2VnID0gcGFiLT5zZWc7Ci0JYWItPnBidXMgPSBwYWItPmJ1czsJCS8qIG9yIHBkZXYtPmJ1cy0+bnVtYmVyICovCi0JYWItPnBkZXZpY2UgPSBkZXZudW07CQkvKiBvciBQQ0lfU0xPVChwZGV2LT5kZXZmbikgKi8KLQlhYi0+cGZ1bmN0aW9uID0gZnVuY251bTsJLyogb3IgUENJX0ZVTkMocGRldi0+ZGV2Zm4pICovCi0JYWItPmJ1cyA9IHBkZXYtPnN1Ym9yZGluYXRlLT5udW1iZXI7Ci0JYWItPnNjYW5uZWQgPSAwOwotCWFiLT50eXBlID0gQlJJREdFX1RZUEVfUDJQOwotCi0JZGJnKCJhY3BpX3BjaWVocHJtOiBQMlAoJXgtJXgpIG9uIHBjaT1iOmQ6ZigleDoleDoleCkgYWNwaT1iOmQ6ZigleDoleDoleCkgWyVzXVxuIiwKLQkJcGFiLT5idXMsIGFiLT5idXMsIHBkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChwZGV2LT5kZXZmbiksIFBDSV9GVU5DKHBkZXYtPmRldmZuKSwKLQkJcGFiLT5idXMsICh1MzIpZGV2bnVtLCAodTMyKWZ1bmNudW0sIHBhdGhfbmFtZSk7Ci0KLQlidWlsZF9hX2JyaWRnZShwYWIsIGFiKTsKLQotCXJldHVybiBhYjsKLX0KLQotc3RhdGljIGFjcGlfc3RhdHVzIHNjYW5fcDJwX2JyaWRnZSgKLQlhY3BpX2hhbmRsZQkJaGFuZGxlLAotCXUzMgkJCUxldmVsLAotCXZvaWQJCQkqY29udGV4dCwKLQl2b2lkCQkJKipyZXR2YWwKLQkpCi17Ci0Jc3RydWN0IGFjcGlfYnJpZGdlCSpwYWIgPSAoc3RydWN0IGFjcGlfYnJpZGdlICopY29udGV4dDsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiOwotCWFjcGlfc3RhdHVzCQlzdGF0dXM7Ci0JdWxvbmcJCQlhZHIgPSAwOwotCXU4CQkJKnBhdGhfbmFtZSA9IGFjcGlfcGF0aF9uYW1lKGhhbmRsZSk7Ci0JdWxvbmcJCQlkZXZudW0sIGZ1bmNudW07Ci0Jc3RydWN0IHBjaV9kZXYJCSpwZGV2OwotCi0JLyogZ2V0IGRldmljZSwgZnVuY3Rpb24gKi8KLQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCBNRVRIT0RfTkFNRV9fQURSLCBOVUxMLCAmYWRyKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJaWYgKHN0YXR1cyAhPSBBRV9OT1RfRk9VTkQpCi0JCQllcnIoImFjcGlfcGNpZWhwcm06JXMgX0FEUiBmYWlsPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKLQkJcmV0dXJuIEFFX09LOwotCX0KLQotCWRldm51bSA9IChhZHIgPj4gMTYpICYgMHhmZmZmOwotCWZ1bmNudW0gPSBhZHIgJiAweGZmZmY7Ci0KLQlwZGV2ID0gcGNpX2ZpbmRfc2xvdChwYWItPmJ1cywgUENJX0RFVkZOKGRldm51bSwgZnVuY251bSkpOwotCWlmICghcGRldikKLQkJcmV0dXJuIEFFX09LOwotCWlmICghcGRldi0+c3Vib3JkaW5hdGUpCi0JCXJldHVybiBBRV9PSzsKLQotCWFiID0gYWRkX3AycF9icmlkZ2UoaGFuZGxlLCBwYWIsIGFkcik7Ci0JaWYgKGFiKSB7Ci0JCXN0YXR1cyA9IGFjcGlfd2Fsa19uYW1lc3BhY2UgKCBBQ1BJX1RZUEVfREVWSUNFLAotCQkJCQloYW5kbGUsCi0JCQkJCSh1MzIpMSwKLQkJCQkJc2Nhbl9wMnBfYnJpZGdlLAotCQkJCQlhYiwKLQkJCQkJTlVMTCk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJCWRiZygiYWNwaV9wY2llaHBybTolcyBmaW5kX3AycCBmYWlsPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKLQl9Ci0KLQlyZXR1cm4gQUVfT0s7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYWNwaV9icmlkZ2UgKiBhZGRfaG9zdF9icmlkZ2UoCi0JYWNwaV9oYW5kbGUgaGFuZGxlLAotCXVsb25nCXNlZ251bSwKLQl1bG9uZwlidXNudW0KLQkpCi17Ci0JdWxvbmcJCQlhZHIgPSAwOwotCWFjcGlfc3RhdHVzCQlzdGF0dXM7Ci0Jc3RydWN0IGFjcGlfYnJpZGdlCSphYjsKLQl1OAkJCSpwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShoYW5kbGUpOwotCi0JLyogZ2V0IGRldmljZSwgZnVuY3Rpb246IGhvc3QgYnIgYWRyIGlzIGFsd2F5cyAwMDAwIHRob3VnaC4gICovCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgTUVUSE9EX05BTUVfX0FEUiwgTlVMTCwgJmFkcik7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTolcyBfQURSIGZhaWw9MHgleFxuIiwgcGF0aF9uYW1lLCBzdGF0dXMpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JZGJnKCJhY3BpX3BjaWVocHJtOiBST09UIFBDSSBzZWcoMHgleClidXMoMHgleClkZXYoMHgleClmdW5jKDB4JXgpIFslc11cbiIsICh1MzIpc2VnbnVtLCAKLQkJKHUzMilidXNudW0sICh1MzIpKGFkciA+PiAxNikgJiAweGZmZmYsICh1MzIpYWRyICYgMHhmZmZmLCBwYXRoX25hbWUpOwotCi0JYWIgPSAoc3RydWN0IGFjcGlfYnJpZGdlICopIGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgYWNwaV9icmlkZ2UpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFiKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTogYWxsb2MgZm9yIGFiIGZhaWxcbiIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JbWVtc2V0KGFiLCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfYnJpZGdlKSk7Ci0KLQlhYi0+aGFuZGxlID0gaGFuZGxlOwotCWFiLT5zZWcgPSAoaW50KXNlZ251bTsKLQlhYi0+YnVzID0gYWItPnBidXMgPSAoaW50KWJ1c251bTsKLQlhYi0+cGRldmljZSA9IChpbnQpKGFkciA+PiAxNikgJiAweGZmZmY7Ci0JYWItPnBmdW5jdGlvbiA9IChpbnQpKGFkciAmIDB4ZmZmZik7Ci0JYWItPnNjYW5uZWQgPSAwOwotCWFiLT50eXBlID0gQlJJREdFX1RZUEVfSE9TVDsKLQotCS8qIGdldCByb290IHBjaSBicmlkZ2UncyBjdXJyZW50IHJlc291cmNlcyAqLwotCXN0YXR1cyA9IGFjcGlfZ2V0X2NycyhhYik7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTolcyBldmFsdWF0ZSBfQ1JTIGZhaWw9MHgleFxuIiwgcGF0aF9uYW1lLCBzdGF0dXMpOwotCQlrZnJlZShhYik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXN0YXR1cyA9IHBjaV9vc2NfY29udHJvbF9zZXQgKE9TQ19QQ0lfRVhQUkVTU19OQVRJVkVfSFBfQ09OVFJPTCk7IAotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQllcnIoIiVzOiBzdGF0dXMgJXhcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKLQkJb3NjX3J1bl9zdGF0dXMgPSAoc3RhdHVzID09IEFFX05PVF9GT1VORCkgPyBPU0NfTk9UX0VYSVNUIDogT1NDX1JVTl9GQUlMRUQ7Ci0JfSBlbHNlIHsKLQkJb3NjX3J1bl9zdGF0dXMgPSBOQ19SVU5fU1VDQ0VTUzsKLQl9CQotCWRiZygiJXM6IG9zY19ydW5fc3RhdHVzICV4XG4iLCBfX0ZVTkNUSU9OX18sIG9zY19ydW5fc3RhdHVzKTsKLQkKLQlidWlsZF9hX2JyaWRnZShhYiwgYWIpOwotCi0JcmV0dXJuIGFiOwotfQotCi1zdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV9zY2FuX2Zyb21fcm9vdF9wY2lfY2FsbGJhY2sgKAotCWFjcGlfaGFuZGxlCWhhbmRsZSwKLQl1MzIJCQlMZXZlbCwKLQl2b2lkCQkqY29udGV4dCwKLQl2b2lkCQkqKnJldHZhbAotCSkKLXsKLQl1bG9uZwkJc2VnbnVtID0gMDsKLQl1bG9uZwkJYnVzbnVtID0gMDsKLQlhY3BpX3N0YXR1cwkJc3RhdHVzOwotCXN0cnVjdCBhY3BpX2JyaWRnZQkqYWI7Ci0JdTgJCQkqcGF0aF9uYW1lID0gYWNwaV9wYXRoX25hbWUoaGFuZGxlKTsKLQotCS8qIGdldCBidXMgbnVtYmVyIG9mIHRoaXMgcGNpIHJvb3QgYnJpZGdlICovCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgTUVUSE9EX05BTUVfX1NFRywgTlVMTCwgJnNlZ251bSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWlmIChzdGF0dXMgIT0gQUVfTk9UX0ZPVU5EKSB7Ci0JCQllcnIoImFjcGlfcGNpZWhwcm06JXMgZXZhbHVhdGUgX1NFRyBmYWlsPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7CisJd2hpbGUgKGhhbmRsZSkgeworCQlwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShoYW5kbGUpOworCQlkYmcoIlRyeWluZyB0byBnZXQgaG90cGx1ZyBjb250cm9sIGZvciAlcyBcbiIsIHBhdGhfbmFtZSk7CisJCXN0YXR1cyA9IHBjaV9vc2NfY29udHJvbF9zZXQoaGFuZGxlLAorCQkJCU9TQ19QQ0lfRVhQUkVTU19OQVRJVkVfSFBfQ09OVFJPTCk7CisJCWlmIChzdGF0dXMgPT0gQUVfTk9UX0ZPVU5EKQorCQkJc3RhdHVzID0gYWNwaV9ydW5fb3NocChoYW5kbGUpOworCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKwkJCWRiZygiR2FpbmVkIGNvbnRyb2wgZm9yIGhvdHBsdWcgSFcgZm9yIHBjaSAlcyAoJXMpXG4iLAorCQkJCXBjaV9uYW1lKGRldiksIHBhdGhfbmFtZSk7CisJCQlyZXR1cm4gMDsKIAkJfQotCQlzZWdudW0gPSAwOwotCX0KLQotCS8qIGdldCBidXMgbnVtYmVyIG9mIHRoaXMgcGNpIHJvb3QgYnJpZGdlICovCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgTUVUSE9EX05BTUVfX0JCTiwgTlVMTCwgJmJ1c251bSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTolcyBldmFsdWF0ZSBfQkJOIGZhaWw9MHgleFxuIiwgcGF0aF9uYW1lLCBzdGF0dXMpOwotCQlyZXR1cm4gKHN0YXR1cyk7Ci0JfQotCi0JYWIgPSBhZGRfaG9zdF9icmlkZ2UoaGFuZGxlLCBzZWdudW0sIGJ1c251bSk7Ci0JaWYgKGFiKSB7Ci0JCXN0YXR1cyA9IGFjcGlfd2Fsa19uYW1lc3BhY2UgKCBBQ1BJX1RZUEVfREVWSUNFLAotCQkJCQloYW5kbGUsCi0JCQkJCTEsCi0JCQkJCXNjYW5fcDJwX2JyaWRnZSwKLQkJCQkJYWIsCi0JCQkJCU5VTEwpOworCQlpZiAoaXNfcm9vdF9icmlkZ2UoaGFuZGxlKSkKKwkJCWJyZWFrOworCQljaGFuZGxlID0gaGFuZGxlOworCQlzdGF0dXMgPSBhY3BpX2dldF9wYXJlbnQoY2hhbmRsZSwgJmhhbmRsZSk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJCWRiZygiYWNwaV9wY2llaHBybTolcyBmaW5kX3AycCBmYWlsPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKKwkJCWJyZWFrOwogCX0KIAotCXJldHVybiBBRV9PSzsKKwllcnIoIkNhbm5vdCBnZXQgY29udHJvbCBvZiBob3RwbHVnIGhhcmR3YXJlIGZvciBwY2kgJXNcbiIsCisJCQlwY2lfbmFtZShkZXYpKTsKKwlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgcGNpZWhwcm1fYWNwaV9zY2FuX3BjaSAodm9pZCkKK3ZvaWQgcGNpZWhwX2dldF9ocF9wYXJhbXNfZnJvbV9maXJtd2FyZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQlzdHJ1Y3QgaG90cGx1Z19wYXJhbXMgKmhwcCkKIHsKLQlhY3BpX3N0YXR1cwlzdGF0dXM7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfTk9UX0ZPVU5EOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2OwogCiAJLyoKLQkgKiBUQkQ6IHRyYXZlcnNlIExETSBkZXZpY2UgdHJlZSB3aXRoIHRoZSBoZWxwIG9mCi0JICogIHVuaWZpZWQgQUNQSSBhdWdtZW50ZWQgZm9yIHBocCBkZXZpY2UgcG9wdWxhdGlvbi4KKwkgKiBfSFBQIHNldHRpbmdzIGFwcGx5IHRvIGFsbCBjaGlsZCBidXNlcywgdW50aWwgYW5vdGhlciBfSFBQIGlzCisJICogZW5jb3VudGVyZWQuIElmIHdlIGRvbid0IGZpbmQgYW4gX0hQUCBmb3IgdGhlIGlucHV0IHBjaSBkZXYsCisJICogbG9vayBmb3IgaXQgaW4gdGhlIHBhcmVudCBkZXZpY2Ugc2NvcGUgc2luY2UgdGhhdCB3b3VsZCBhcHBseSB0bworCSAqIHRoaXMgcGNpIGRldi4gSWYgd2UgZG9uJ3QgZmluZCBhbnkgX0hQUCwgdXNlIGhhcmRjb2RlZCBkZWZhdWx0cwogCSAqLwotCXN0YXR1cyA9IGFjcGlfZ2V0X2RldmljZXMgKCBQQ0lfUk9PVF9ISURfU1RSSU5HLAotCQkJCWFjcGlfc2Nhbl9mcm9tX3Jvb3RfcGNpX2NhbGxiYWNrLAotCQkJCU5VTEwsCi0JCQkJTlVMTCApOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQllcnIoImFjcGlfcGNpZWhwcm06Z2V0X2RldmljZSBQQ0kgUk9PVCBISUQgZmFpbD0weCV4XG4iLCBzdGF0dXMpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBwY2llaHBybV9pbml0KGVudW0gcGhwX2N0bHJfdHlwZSBjdGxyX3R5cGUpCi17Ci0JaW50CXJjOwotCi0JaWYgKGN0bHJfdHlwZSAhPSBQQ0kpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZGJnKCJwY2llaHBybSBBQ1BJIGluaXQgPGVudGVyPlxuIik7Ci0JYWNwaV9icmlkZ2VzX2hlYWQgPSBOVUxMOwotCi0JLyogY29uc3RydWN0IFBDSSBidXM6ZGV2aWNlIHRyZWUgb2YgYWNwaV9oYW5kbGVzICovCi0JcmMgPSBwY2llaHBybV9hY3BpX3NjYW5fcGNpKCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQlpZiAoKG9zaHBfcnVuX3N0YXR1cyAhPSBOQ19SVU5fU1VDQ0VTUykgJiYgKG9zY19ydW5fc3RhdHVzICE9IE5DX1JVTl9TVUNDRVNTKSkgewotCQllcnIoIkZhaWxzIHRvIGdhaW4gY29udHJvbCBvZiBuYXRpdmUgaG90LXBsdWdcbiIpOwotCQlyYyA9IC1FTk9ERVY7Ci0JfQotCi0JZGJnKCJwY2llaHBybSBBQ1BJIGluaXQgJXNcbiIsIChyYyk/ImZhaWwiOiJzdWNjZXNzIik7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBmcmVlX2Ffc2xvdChzdHJ1Y3QgYWNwaV9waHBfc2xvdCAqYXBzKQotewotCWRiZygiICAgICAgICBmcmVlIGEgcGhwIGZ1bmMgb2Ygc2xvdCgweCUwMngpIG9uIFBDSSBiOmQ6Zj0weCUwMng6JTAyeDolMDJ4XG4iLCBhcHMtPnN1biwgYXBzLT5idXMsIGFwcy0+ZGV2LCBhcHMtPmZ1bik7Ci0KLQlmcmVlX3BjaV9yZXNvdXJjZSAoYXBzLT5pb19oZWFkKTsKLQlmcmVlX3BjaV9yZXNvdXJjZSAoYXBzLT5idXNfaGVhZCk7Ci0JZnJlZV9wY2lfcmVzb3VyY2UgKGFwcy0+bWVtX2hlYWQpOwotCWZyZWVfcGNpX3Jlc291cmNlIChhcHMtPnBfbWVtX2hlYWQpOwotCi0Ja2ZyZWUoYXBzKTsKLX0KLQotc3RhdGljIHZvaWQgZnJlZV9hX2JyaWRnZSggc3RydWN0IGFjcGlfYnJpZGdlCSphYikKLXsKLQlzdHJ1Y3QgYWNwaV9waHBfc2xvdAkqYXBzLCAqbmV4dDsKLQotCXN3aXRjaCAoYWItPnR5cGUpIHsKLQljYXNlIEJSSURHRV9UWVBFX0hPU1Q6Ci0JCWRiZygiRnJlZSBBQ1BJIFBDSSBIT1NUIEJyaWRnZSgleCkgWyVzXSBvbiBzOmI6ZDpmKCV4OiV4OiV4OiV4KVxuIiwKLQkJCWFiLT5idXMsIGFjcGlfcGF0aF9uYW1lKGFiLT5oYW5kbGUpLCBhYi0+c2VnLCBhYi0+cGJ1cywgYWItPnBkZXZpY2UsIGFiLT5wZnVuY3Rpb24pOwotCQlicmVhazsKLQljYXNlIEJSSURHRV9UWVBFX1AyUDoKLQkJZGJnKCJGcmVlIEFDUEkgUENJIFAyUCBCcmlkZ2UoJXgtJXgpIFslc10gb24gczpiOmQ6ZigleDoleDoleDoleClcbiIsCi0JCQlhYi0+cGJ1cywgYWItPmJ1cywgYWNwaV9wYXRoX25hbWUoYWItPmhhbmRsZSksIGFiLT5zZWcsIGFiLT5wYnVzLCBhYi0+cGRldmljZSwgYWItPnBmdW5jdGlvbik7Ci0JCWJyZWFrOwotCX07Ci0KLQkvKiBmcmVlIHNsb3RzIGZpcnN0ICovCi0JZm9yIChhcHMgPSBhYi0+c2xvdHM7IGFwczsgYXBzID0gbmV4dCkgewotCQluZXh0ID0gYXBzLT5uZXh0OwotCQlmcmVlX2Ffc2xvdChhcHMpOwotCX0KLQotCWZyZWVfcGNpX3Jlc291cmNlIChhYi0+aW9faGVhZCk7Ci0JZnJlZV9wY2lfcmVzb3VyY2UgKGFiLT50aW9faGVhZCk7Ci0JZnJlZV9wY2lfcmVzb3VyY2UgKGFiLT5idXNfaGVhZCk7Ci0JZnJlZV9wY2lfcmVzb3VyY2UgKGFiLT50YnVzX2hlYWQpOwotCWZyZWVfcGNpX3Jlc291cmNlIChhYi0+bWVtX2hlYWQpOwotCWZyZWVfcGNpX3Jlc291cmNlIChhYi0+dG1lbV9oZWFkKTsKLQlmcmVlX3BjaV9yZXNvdXJjZSAoYWItPnBfbWVtX2hlYWQpOwotCWZyZWVfcGNpX3Jlc291cmNlIChhYi0+dHBfbWVtX2hlYWQpOwotCi0Ja2ZyZWUoYWIpOwotfQotCi1zdGF0aWMgdm9pZCBwY2llaHBybV9mcmVlX2JyaWRnZXMgKCBzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiKQotewotCWlmICghYWIpCi0JCXJldHVybjsKLQotCWlmIChhYi0+Y2hpbGQpCi0JCXBjaWVocHJtX2ZyZWVfYnJpZGdlcyAoYWItPmNoaWxkKTsKLQotCWlmIChhYi0+bmV4dCkKLQkJcGNpZWhwcm1fZnJlZV9icmlkZ2VzIChhYi0+bmV4dCk7Ci0KLQlmcmVlX2FfYnJpZGdlKGFiKTsKLX0KLQotdm9pZCBwY2llaHBybV9jbGVhbnVwKHZvaWQpCi17Ci0JcGNpZWhwcm1fZnJlZV9icmlkZ2VzIChhY3BpX2JyaWRnZXNfaGVhZCk7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X251bWJlcl9vZl9zbG90cyAoCi0Jc3RydWN0IGFjcGlfYnJpZGdlCSphYiwKLQlpbnQJCQkJc2VsZm9ubHkKLQkpCi17Ci0Jc3RydWN0IGFjcGlfcGhwX3Nsb3QJKmFwczsKLQlpbnQJcHJldl9zbG90ID0gLTE7Ci0JaW50CXNsb3RfbnVtID0gMDsKLQotCWZvciAoIGFwcyA9IGFiLT5zbG90czsgYXBzOyBhcHMgPSBhcHMtPm5leHQpCi0JCWlmIChhcHMtPmRldiAhPSBwcmV2X3Nsb3QpIHsKLQkJCXByZXZfc2xvdCA9IGFwcy0+ZGV2OwotCQkJc2xvdF9udW0rKzsKLQkJfQotCi0JaWYgKGFiLT5jaGlsZCkKLQkJc2xvdF9udW0gKz0gZ2V0X251bWJlcl9vZl9zbG90cyAoYWItPmNoaWxkLCAwKTsKLQotCWlmIChzZWxmb25seSkKLQkJcmV0dXJuIHNsb3RfbnVtOwotCi0JaWYgKGFiLT5uZXh0KQotCQlzbG90X251bSArPSBnZXRfbnVtYmVyX29mX3Nsb3RzIChhYi0+bmV4dCwgMCk7Ci0KLQlyZXR1cm4gc2xvdF9udW07Ci19Ci0KLXN0YXRpYyBpbnQgcHJpbnRfYWNwaV9yZXNvdXJjZXMgKHN0cnVjdCBhY3BpX2JyaWRnZQkqYWIpCi17Ci0Jc3RydWN0IGFjcGlfcGhwX3Nsb3QJCSphcHM7Ci0JaW50CWk7Ci0KLQlzd2l0Y2ggKGFiLT50eXBlKSB7Ci0JY2FzZSBCUklER0VfVFlQRV9IT1NUOgotCQlkYmcoIlBDSSBIT1NUIEJyaWRnZSAoJXgpIFslc11cbiIsIGFiLT5idXMsIGFjcGlfcGF0aF9uYW1lKGFiLT5oYW5kbGUpKTsKLQkJYnJlYWs7Ci0JY2FzZSBCUklER0VfVFlQRV9QMlA6Ci0JCWRiZygiUENJIFAyUCBCcmlkZ2UgKCV4LSV4KSBbJXNdXG4iLCBhYi0+cGJ1cywgYWItPmJ1cywgYWNwaV9wYXRoX25hbWUoYWItPmhhbmRsZSkpOwotCQlicmVhazsKLQl9OwotCi0JcHJpbnRfcGNpX3Jlc291cmNlcyAoYWIpOwotCi0JZm9yICggaSA9IC0xLCBhcHMgPSBhYi0+c2xvdHM7IGFwczsgYXBzID0gYXBzLT5uZXh0KSB7Ci0JCWlmIChhcHMtPmRldiA9PSBpKQotCQkJY29udGludWU7Ci0JCWRiZygiICBTbG90IHN1bigleCkgczpiOmQ6ZiglMDJ4OiUwMng6JTAyeDolMDJ4KVxuIiwgYXBzLT5zdW4sIGFwcy0+c2VnLCBhcHMtPmJ1cywgYXBzLT5kZXYsIGFwcy0+ZnVuKTsKLQkJcHJpbnRfc2xvdF9yZXNvdXJjZXMoYXBzKTsKLQkJaSA9IGFwcy0+ZGV2OwotCX0KLQotCWlmIChhYi0+Y2hpbGQpCi0JCXByaW50X2FjcGlfcmVzb3VyY2VzIChhYi0+Y2hpbGQpOwotCi0JaWYgKGFiLT5uZXh0KQotCQlwcmludF9hY3BpX3Jlc291cmNlcyAoYWItPm5leHQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBwY2llaHBybV9wcmludF9waXJ0KHZvaWQpCi17Ci0JZGJnKCJQQ0lFSFBSTSBBQ1BJIFNsb3RzXG4iKTsKLQlpZiAoYWNwaV9icmlkZ2VzX2hlYWQpCi0JCXByaW50X2FjcGlfcmVzb3VyY2VzIChhY3BpX2JyaWRnZXNfaGVhZCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBhY3BpX3BocF9zbG90ICogZ2V0X2FjcGlfc2xvdCAoCi0Jc3RydWN0IGFjcGlfYnJpZGdlICphYiwKLQl1MzIgc3VuCi0JKQotewotCXN0cnVjdCBhY3BpX3BocF9zbG90CSphcHMgPSBOVUxMOwotCi0JZm9yICggYXBzID0gYWItPnNsb3RzOyBhcHM7IGFwcyA9IGFwcy0+bmV4dCkKLQkJaWYgKGFwcy0+c3VuID09IHN1bikKLQkJCXJldHVybiBhcHM7Ci0KLQlpZiAoIWFwcyAmJiBhYi0+Y2hpbGQpIHsKLQkJYXBzID0gKHN0cnVjdCBhY3BpX3BocF9zbG90ICopZ2V0X2FjcGlfc2xvdCAoYWItPmNoaWxkLCBzdW4pOwotCQlpZiAoYXBzKQotCQkJcmV0dXJuIGFwczsKLQl9Ci0KLQlpZiAoIWFwcyAmJiBhYi0+bmV4dCkgewotCQlhcHMgPSAoc3RydWN0IGFjcGlfcGhwX3Nsb3QgKilnZXRfYWNwaV9zbG90IChhYi0+bmV4dCwgc3VuKTsKLQkJaWYgKGFwcykKLQkJCXJldHVybiBhcHM7Ci0JfQotCi0JcmV0dXJuIGFwczsKLQotfQotCi0jaWYgMAotdm9pZCAqIHBjaWVocHJtX2dldF9zbG90KHN0cnVjdCBzbG90ICpzbG90KQotewotCXN0cnVjdCBhY3BpX2JyaWRnZQkqYWIgPSBhY3BpX2JyaWRnZXNfaGVhZDsKLQlzdHJ1Y3QgYWNwaV9waHBfc2xvdAkqYXBzID0gZ2V0X2FjcGlfc2xvdCAoYWIsIHNsb3QtPm51bWJlcik7Ci0KLQlhcHMtPnNsb3QgPSBzbG90OwotCi0JZGJnKCJHb3QgYWNwaSBzbG90IHN1bigleCk6IHM6YjpkOmYoJXg6JXg6JXg6JXgpXG4iLCBhcHMtPnN1biwgYXBzLT5zZWcsIGFwcy0+YnVzLCBhcHMtPmRldiwgYXBzLT5mdW4pOwotCi0JcmV0dXJuICh2b2lkICopYXBzOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIHBjaWVocHJtX2R1bXBfZnVuY19yZXMoIHN0cnVjdCBwY2lfZnVuYyAqZnVuKQotewotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYyA9IGZ1bjsKLQotCWlmIChmdW5jLT5idXNfaGVhZCkgewotCQlkYmcoIjogICAgQlVTIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGZ1bmMtPmJ1c19oZWFkKTsKLQl9Ci0JaWYgKGZ1bmMtPmlvX2hlYWQpIHsKLQkJZGJnKCI6ICAgIElPIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGZ1bmMtPmlvX2hlYWQpOwotCX0KLQlpZiAoZnVuYy0+bWVtX2hlYWQpIHsKLQkJZGJnKCI6ICAgIE1FTSBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChmdW5jLT5tZW1faGVhZCk7Ci0JfQotCWlmIChmdW5jLT5wX21lbV9oZWFkKSB7Ci0JCWRiZygiOiAgICBQTUVNIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGZ1bmMtPnBfbWVtX2hlYWQpOworCXdoaWxlIChwZGV2ICYmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkpIHsKKwkJYWNwaV9oYW5kbGUgaGFuZGxlID0gREVWSUNFX0FDUElfSEFORExFKCYocGRldi0+ZGV2KSk7CisJCWlmICghaGFuZGxlKQorCQkJYnJlYWs7CisJCXN0YXR1cyA9IGFjcGlfcnVuX2hwcChoYW5kbGUsIGhwcCk7CisJCWlmICghKHBkZXYtPmJ1cy0+cGFyZW50KSkKKwkJCWJyZWFrOworCQkvKiBDaGVjayBpZiBhIHBhcmVudCBvYmplY3Qgc3VwcG9ydHMgX0hQUCAqLworCQlwZGV2ID0gcGRldi0+YnVzLT5wYXJlbnQtPnNlbGY7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBwY2llaHBybV9kdW1wX2N0cmxfcmVzKCBzdHJ1Y3QgY29udHJvbGxlciAqY3RscikKLXsKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IGN0bHI7Ci0KLQlpZiAoY3RybC0+YnVzX2hlYWQpIHsKLQkJZGJnKCI6ICAgIEJVUyBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChjdHJsLT5idXNfaGVhZCk7Ci0JfQotCWlmIChjdHJsLT5pb19oZWFkKSB7Ci0JCWRiZygiOiAgICBJTyBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChjdHJsLT5pb19oZWFkKTsKLQl9Ci0JaWYgKGN0cmwtPm1lbV9oZWFkKSB7Ci0JCWRiZygiOiAgICBNRU0gUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoY3RybC0+bWVtX2hlYWQpOwotCX0KLQlpZiAoY3RybC0+cF9tZW1faGVhZCkgewotCQlkYmcoIjogICAgUE1FTSBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChjdHJsLT5wX21lbV9oZWFkKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgcGNpZWhwcm1fZ2V0X3VzZWRfcmVzb3VyY2VzICgKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMKLQkpCi17Ci0JcmV0dXJuIHBjaWVocF9zYXZlX3VzZWRfcmVzb3VyY2VzIChjdHJsLCBmdW5jLCAhRElTQUJMRV9DQVJEKTsKLX0KLQotc3RhdGljIGludCBjb25maWd1cmVfZXhpc3RpbmdfZnVuY3Rpb24oCi0Jc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsCi0Jc3RydWN0IHBjaV9mdW5jICpmdW5jCi0JKQotewotCWludCByYzsKLQotCS8qIHNlZSBob3cgbXVjaCByZXNvdXJjZXMgdGhlIGZ1bmMgaGFzIHVzZWQuICovCi0JcmMgPSBwY2llaHBybV9nZXRfdXNlZF9yZXNvdXJjZXMgKGN0cmwsIGZ1bmMpOwotCi0JaWYgKCFyYykgewotCQkvKiBzdWJ0cmFjdCB0aGUgcmVzb3VyY2VzIHVzZWQgYnkgdGhlIGZ1bmMgZnJvbSBjdHJsIHJlc291cmNlcyAqLwotCQlyYyAgPSBwY2llaHBybV9kZWxldGVfcmVzb3VyY2VzICgmY3RybC0+YnVzX2hlYWQsIGZ1bmMtPmJ1c19oZWFkKTsKLQkJcmMgfD0gcGNpZWhwcm1fZGVsZXRlX3Jlc291cmNlcyAoJmN0cmwtPmlvX2hlYWQsIGZ1bmMtPmlvX2hlYWQpOwotCQlyYyB8PSBwY2llaHBybV9kZWxldGVfcmVzb3VyY2VzICgmY3RybC0+bWVtX2hlYWQsIGZ1bmMtPm1lbV9oZWFkKTsKLQkJcmMgfD0gcGNpZWhwcm1fZGVsZXRlX3Jlc291cmNlcyAoJmN0cmwtPnBfbWVtX2hlYWQsIGZ1bmMtPnBfbWVtX2hlYWQpOwotCQlpZiAocmMpCi0JCQl3YXJuKCJhQ0VGOiBjYW5ub3QgZGVsIHVzZWQgcmVzb3VyY2VzXG4iKTsKLQl9IGVsc2UKLQkJZXJyKCJhQ0VGOiBjYW5ub3QgZ2V0IHVzZWQgcmVzb3VyY2VzXG4iKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBiaW5kX3BjaV9yZXNvdXJjZXNfdG9fc2xvdHMgKCBzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKLXsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsIG5ld19mdW5jOwotCWludCBidXNuID0gY3RybC0+c2xvdF9idXM7Ci0JaW50IGRldm4sIGZ1bm47Ci0JdTMyCXZpZDsKLQotCWZvciAoZGV2biA9IDA7IGRldm4gPCAzMjsgZGV2bisrKSB7Ci0JCWZvciAoZnVubiA9IDA7IGZ1bm4gPCA4OyBmdW5uKyspIHsKLQkJCS8qCi0JCQlpZiAoZGV2biA9PSBjdHJsLT5kZXZpY2UgJiYgZnVubiA9PSBjdHJsLT5mdW5jdGlvbikKLQkJCQljb250aW51ZTsKLQkJCSovCi0JCQkvKiBmaW5kIG91dCBpZiB0aGlzIGVudHJ5IGlzIGZvciBhbiBvY2N1cGllZCBzbG90ICovCi0JCQl2aWQgPSAweEZGRkZGRkZGOwotCQkJcGNpX2J1c19yZWFkX2NvbmZpZ19kd29yZChjdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZSwgUENJX0RFVkZOKGRldm4sIGZ1bm4pLCBQQ0lfVkVORE9SX0lELCAmdmlkKTsKLQotCQkJaWYgKHZpZCAhPSAweEZGRkZGRkZGKSB7Ci0JCQkJZGJnKCIlczogdmlkID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgdmlkKTsKLQkJCQlmdW5jID0gcGNpZWhwX3Nsb3RfZmluZChidXNuLCBkZXZuLCBmdW5uKTsKLQkJCQlpZiAoIWZ1bmMpIHsKLQkJCQkJbWVtc2V0KCZuZXdfZnVuYywgMCwgc2l6ZW9mKHN0cnVjdCBwY2lfZnVuYykpOwotCQkJCQluZXdfZnVuYy5idXMgPSBidXNuOwotCQkJCQluZXdfZnVuYy5kZXZpY2UgPSBkZXZuOwotCQkJCQluZXdfZnVuYy5mdW5jdGlvbiA9IGZ1bm47Ci0JCQkJCW5ld19mdW5jLmlzX2FfYm9hcmQgPSAxOwotCQkJCQljb25maWd1cmVfZXhpc3RpbmdfZnVuY3Rpb24oY3RybCwgJm5ld19mdW5jKTsKLQkJCQkJcGNpZWhwcm1fZHVtcF9mdW5jX3JlcygmbmV3X2Z1bmMpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWNvbmZpZ3VyZV9leGlzdGluZ19mdW5jdGlvbihjdHJsLCBmdW5jKTsKLQkJCQkJcGNpZWhwcm1fZHVtcF9mdW5jX3JlcyhmdW5jKTsKLQkJCQl9Ci0JCQkJZGJnKCJhQ0NGOmV4aXN0aW5nIFBDSSAweCV4IEZ1bmMgUmVzb3VyY2VEdW1wXG4iLCBjdHJsLT5idXMpOwotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYmluZF9wY2lfcmVzb3VyY2VzKAotCXN0cnVjdCBjb250cm9sbGVyIAkqY3RybCwKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiCi0JKQotewotCWludAkJc3RhdHVzID0gMDsKLQotCWlmIChhYi0+YnVzX2hlYWQpIHsKLQkJZGJnKCJiYXByOiAgQlVTIFJlc291cmNlcyBhZGQgb24gUENJIDB4JXhcbiIsIGFiLT5idXMpOwotCQlzdGF0dXMgPSBwY2llaHBybV9hZGRfcmVzb3VyY2VzICgmY3RybC0+YnVzX2hlYWQsIGFiLT5idXNfaGVhZCk7Ci0JCWlmIChwY2llaHBybV9kZWxldGVfcmVzb3VyY2VzICgmYWItPmJ1c19oZWFkLCBjdHJsLT5idXNfaGVhZCkpCi0JCQl3YXJuKCJiYXByOiAgY2Fubm90IHN1YiBCVVMgUmVzb3VyY2Ugb24gUENJIDB4JXhcbiIsIGFiLT5idXMpOwotCQlpZiAoc3RhdHVzKSB7Ci0JCQllcnIoImJhcHI6ICBCVVMgUmVzb3VyY2UgYWRkIG9uIFBDSSAweCV4OiBmYWlsPTB4JXhcbiIsIGFiLT5idXMsIHN0YXR1cyk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0JfSBlbHNlCi0JCWluZm8oImJhcHI6ICBObyBCVVMgUmVzb3VyY2Ugb24gUENJIDB4JXguXG4iLCBhYi0+YnVzKTsKLQotCWlmIChhYi0+aW9faGVhZCkgewotCQlkYmcoImJhcHI6ICBJTyBSZXNvdXJjZXMgYWRkIG9uIFBDSSAweCV4XG4iLCBhYi0+YnVzKTsKLQkJc3RhdHVzID0gcGNpZWhwcm1fYWRkX3Jlc291cmNlcyAoJmN0cmwtPmlvX2hlYWQsIGFiLT5pb19oZWFkKTsKLQkJaWYgKHBjaWVocHJtX2RlbGV0ZV9yZXNvdXJjZXMgKCZhYi0+aW9faGVhZCwgY3RybC0+aW9faGVhZCkpCi0JCQl3YXJuKCJiYXByOiAgY2Fubm90IHN1YiBJTyBSZXNvdXJjZSBvbiBQQ0kgMHgleFxuIiwgYWItPmJ1cyk7Ci0JCWlmIChzdGF0dXMpIHsKLQkJCWVycigiYmFwcjogIElPIFJlc291cmNlIGFkZCBvbiBQQ0kgMHgleDogZmFpbD0weCV4XG4iLCBhYi0+YnVzLCBzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCX0gZWxzZQotCQlpbmZvKCJiYXByOiAgTm8gIElPIFJlc291cmNlIG9uIFBDSSAweCV4LlxuIiwgYWItPmJ1cyk7Ci0KLQlpZiAoYWItPm1lbV9oZWFkKSB7Ci0JCWRiZygiYmFwcjogIE1FTSBSZXNvdXJjZXMgYWRkIG9uIFBDSSAweCV4XG4iLCBhYi0+YnVzKTsKLQkJc3RhdHVzID0gcGNpZWhwcm1fYWRkX3Jlc291cmNlcyAoJmN0cmwtPm1lbV9oZWFkLCBhYi0+bWVtX2hlYWQpOwotCQlpZiAocGNpZWhwcm1fZGVsZXRlX3Jlc291cmNlcyAoJmFiLT5tZW1faGVhZCwgY3RybC0+bWVtX2hlYWQpKQotCQkJd2FybigiYmFwcjogIGNhbm5vdCBzdWIgTUVNIFJlc291cmNlIG9uIFBDSSAweCV4XG4iLCBhYi0+YnVzKTsKLQkJaWYgKHN0YXR1cykgewotCQkJZXJyKCJiYXByOiAgTUVNIFJlc291cmNlIGFkZCBvbiBQQ0kgMHgleDogZmFpbD0weCV4XG4iLCBhYi0+YnVzLCBzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCX0gZWxzZQotCQlpbmZvKCJiYXByOiAgTm8gTUVNIFJlc291cmNlIG9uIFBDSSAweCV4LlxuIiwgYWItPmJ1cyk7Ci0KLQlpZiAoYWItPnBfbWVtX2hlYWQpIHsKLQkJZGJnKCJiYXByOiAgUE1FTSBSZXNvdXJjZXMgYWRkIG9uIFBDSSAweCV4XG4iLCBhYi0+YnVzKTsKLQkJc3RhdHVzID0gcGNpZWhwcm1fYWRkX3Jlc291cmNlcyAoJmN0cmwtPnBfbWVtX2hlYWQsIGFiLT5wX21lbV9oZWFkKTsKLQkJaWYgKHBjaWVocHJtX2RlbGV0ZV9yZXNvdXJjZXMgKCZhYi0+cF9tZW1faGVhZCwgY3RybC0+cF9tZW1faGVhZCkpCi0JCQl3YXJuKCJiYXByOiAgY2Fubm90IHN1YiBQTUVNIFJlc291cmNlIG9uIFBDSSAweCV4XG4iLCBhYi0+YnVzKTsKLQkJaWYgKHN0YXR1cykgewotCQkJZXJyKCJiYXByOiAgUE1FTSBSZXNvdXJjZSBhZGQgb24gUENJIDB4JXg6IGZhaWw9MHgleFxuIiwgYWItPmJ1cywgc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQl9IGVsc2UKLQkJaW5mbygiYmFwcjogIE5vIFBNRU0gUmVzb3VyY2Ugb24gUENJIDB4JXguXG4iLCBhYi0+YnVzKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBpbnQgbm9fcGNpX3Jlc291cmNlcyggc3RydWN0IGFjcGlfYnJpZGdlICphYikKLXsKLQlyZXR1cm4gIShhYi0+cF9tZW1faGVhZCB8fCBhYi0+bWVtX2hlYWQgfHwgYWItPmlvX2hlYWQgfHwgYWItPmJ1c19oZWFkKTsKLX0KLQotc3RhdGljIGludCBmaW5kX3BjaV9icmlkZ2VfcmVzb3VyY2VzICgKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UgKmFiCi0JKQotewotCWludAlyYyA9IDA7Ci0Jc3RydWN0IHBjaV9mdW5jIGZ1bmM7Ci0KLQltZW1zZXQoJmZ1bmMsIDAsIHNpemVvZihzdHJ1Y3QgcGNpX2Z1bmMpKTsKLQotCWZ1bmMuYnVzID0gYWItPnBidXM7Ci0JZnVuYy5kZXZpY2UgPSBhYi0+cGRldmljZTsKLQlmdW5jLmZ1bmN0aW9uID0gYWItPnBmdW5jdGlvbjsKLQlmdW5jLmlzX2FfYm9hcmQgPSAxOwotCi0JLyogR2V0IHVzZWQgcmVzb3VyY2VzIGZvciB0aGlzIFBDSSBicmlkZ2UgKi8KLQlyYyA9IHBjaWVocF9zYXZlX3VzZWRfcmVzb3VyY2VzIChjdHJsLCAmZnVuYywgIURJU0FCTEVfQ0FSRCk7Ci0KLQlhYi0+aW9faGVhZCA9IGZ1bmMuaW9faGVhZDsKLQlhYi0+bWVtX2hlYWQgPSBmdW5jLm1lbV9oZWFkOwotCWFiLT5wX21lbV9oZWFkID0gZnVuYy5wX21lbV9oZWFkOwotCWFiLT5idXNfaGVhZCA9IGZ1bmMuYnVzX2hlYWQ7Ci0JaWYgKGFiLT5idXNfaGVhZCkKLQkJcGNpZWhwcm1fZGVsZXRlX3Jlc291cmNlKCZhYi0+YnVzX2hlYWQsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLT5udW1iZXIsIDEpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGdldF9wY2lfcmVzb3VyY2VzX2Zyb21fYnJpZGdlKAotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsLAotCXN0cnVjdCBhY3BpX2JyaWRnZSAqYWIKLQkpCi17Ci0JaW50CXJjID0gMDsKLQotCWRiZygiZ3JmYjogIEdldCBSZXNvdXJjZXMgZm9yIFBDSSAweCV4IGZyb20gYWN0dWFsIFBDSSBicmlkZ2UgMHgleC5cbiIsIGN0cmwtPmJ1cywgYWItPmJ1cyk7Ci0KLQlyYyA9IGZpbmRfcGNpX2JyaWRnZV9yZXNvdXJjZXMgKGN0cmwsIGFiKTsKLQotCXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCZhYi0+YnVzX2hlYWQpOwotCXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCZhYi0+aW9faGVhZCk7Ci0JcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJmFiLT5tZW1faGVhZCk7Ci0JcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJmFiLT5wX21lbV9oZWFkKTsKLQotCXBjaWVocHJtX2FkZF9yZXNvdXJjZXMgKCZhYi0+dGJ1c19oZWFkLCBhYi0+YnVzX2hlYWQpOwotCXBjaWVocHJtX2FkZF9yZXNvdXJjZXMgKCZhYi0+dGlvX2hlYWQsIGFiLT5pb19oZWFkKTsKLQlwY2llaHBybV9hZGRfcmVzb3VyY2VzICgmYWItPnRtZW1faGVhZCwgYWItPm1lbV9oZWFkKTsKLQlwY2llaHBybV9hZGRfcmVzb3VyY2VzICgmYWItPnRwX21lbV9oZWFkLCBhYi0+cF9tZW1faGVhZCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X3BjaV9yZXNvdXJjZXMoCi0Jc3RydWN0IGNvbnRyb2xsZXIJKmN0cmwsCi0Jc3RydWN0IGFjcGlfYnJpZGdlCSphYgotCSkKLXsKLQlpbnQJcmMgPSAwOwotCi0JaWYgKG5vX3BjaV9yZXNvdXJjZXMoYWIpKSB7Ci0JCWRiZygic3BicjpQQ0kgMHgleCBoYXMgbm8gcmVzb3VyY2VzLiBHZXQgcGFyZW50IHJlc291cmNlcy5cbiIsIGFiLT5idXMpOwotCQlyYyA9IGdldF9wY2lfcmVzb3VyY2VzX2Zyb21fYnJpZGdlKGN0cmwsIGFiKTsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qCi0gKiBHZXQgcmVzb3VyY2VzIGZvciB0aGlzIGN0cmwuCi0gKiAgMS4gZ2V0IHRvdGFsIHJlc291cmNlcyBmcm9tIEFDUEkgX0NSUyBvciBicmlkZ2UgKHRoaXMgY3RybCkKLSAqICAyLiBmaW5kIHVzZWQgcmVzb3VyY2VzIG9mIGV4aXN0aW5nIGFkYXB0ZXJzCi0gKgkzLiBzdWJ0cmFjdCB1c2VkIHJlc291cmNlcyBmcm9tIHRvdGFsIHJlc291cmNlcwotICovCi1pbnQgcGNpZWhwcm1fZmluZF9hdmFpbGFibGVfcmVzb3VyY2VzKCBzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBhY3BpX2JyaWRnZQkqYWI7Ci0KLQlhYiA9IGZpbmRfYWNwaV9icmlkZ2VfYnlfYnVzKGFjcGlfYnJpZGdlc19oZWFkLCBjdHJsLT5zZWcsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLT5udW1iZXIpOwotCWlmICghYWIpIHsKLQkJZXJyKCJwZmFyOmNhbm5vdCBsb2NhdGUgYWNwaSBicmlkZ2Ugb2YgUENJIDB4JXguXG4iLCBjdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZS0+bnVtYmVyKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlpZiAobm9fcGNpX3Jlc291cmNlcyhhYikpIHsKLQkJcmMgPSBnZXRfcGNpX3Jlc291cmNlcyhjdHJsLCBhYik7Ci0JCWlmIChyYykgewotCQkJZXJyKCJwZmFyOmNhbm5vdCBnZXQgcGNpIHJlc291cmNlcyBvZiBQQ0kgMHgleC5cbiIsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLT5udW1iZXIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCi0JcmMgPSBiaW5kX3BjaV9yZXNvdXJjZXMoY3RybCwgYWIpOwotCWRiZygicGZhcjpwcmUtQmluZCBQQ0kgMHgleCBDdHJsIFJlc291cmNlIER1bXBcbiIsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLT5udW1iZXIpOwotCXBjaWVocHJtX2R1bXBfY3RybF9yZXMoY3RybCk7Ci0KLQliaW5kX3BjaV9yZXNvdXJjZXNfdG9fc2xvdHMgKGN0cmwpOwotCi0JZGJnKCJwZmFyOnBvc3QtQmluZCBQQ0kgMHgleCBDdHJsIFJlc291cmNlIER1bXBcbiIsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLT5udW1iZXIpOwotCXBjaWVocHJtX2R1bXBfY3RybF9yZXMoY3RybCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBwY2llaHBybV9zZXRfaHBwKAotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsLAotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYywKLQl1OAljYXJkX3R5cGUKLQkpCi17Ci0Jc3RydWN0IGFjcGlfYnJpZGdlCSphYjsKLQlzdHJ1Y3QgcGNpX2J1cyBscGNpX2J1cywgKnBjaV9idXM7Ci0JaW50CQkJCXJjID0gMDsKLQl1bnNpZ25lZCBpbnQJZGV2Zm47Ci0JdTgJCQkJY2xzPSAweDA4OwkvKiBkZWZhdWx0IGNhY2hlIGxpbmUgc2l6ZQkqLwotCXU4CQkJCWx0ID0gMHg0MDsJLyogZGVmYXVsdCBsYXRlbmN5IHRpbWVyCSovCi0JdTgJCQkJZXAgPSAwOwotCXU4CQkJCWVzID0gMDsKLQotCW1lbWNweSgmbHBjaV9idXMsIGN0cmwtPnBjaV9idXMsIHNpemVvZihscGNpX2J1cykpOwotCXBjaV9idXMgPSAmbHBjaV9idXM7Ci0JcGNpX2J1cy0+bnVtYmVyID0gZnVuYy0+YnVzOwotCWRldmZuID0gUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCi0JYWIgPSBmaW5kX2FjcGlfYnJpZGdlX2J5X2J1cyhhY3BpX2JyaWRnZXNfaGVhZCwgY3RybC0+c2VnLCBjdHJsLT5idXMpOwotCi0JaWYgKGFiKSB7Ci0JCWlmIChhYi0+X2hwcCkgewotCQkJbHQgID0gKHU4KWFiLT5faHBwLT5sYXRlbmN5X3RpbWVyOwotCQkJY2xzID0gKHU4KWFiLT5faHBwLT5jYWNoZV9saW5lX3NpemU7Ci0JCQllcCAgPSAodTgpYWItPl9ocHAtPmVuYWJsZV9wZXJyOwotCQkJZXMgID0gKHU4KWFiLT5faHBwLT5lbmFibGVfc2VycjsKLQkJfSBlbHNlCi0JCQlkYmcoIl9ocHA6IG5vIF9ocHAgZm9yIEIvRC9GPSUjeC8lI3gvJSN4LiB1c2UgZGVmYXVsdCB2YWx1ZVxuIiwgZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQl9IGVsc2UKLQkJZGJnKCJfaHBwOiBubyBhY3BpIGJyaWRnZSBmb3IgQi9EL0YgPSAlI3gvJSN4LyUjeC4gdXNlIGRlZmF1bHQgdmFsdWVcbiIsIGZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0KLQotCWlmIChjYXJkX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgewotCQkvKiBzZXQgc3Vib3JkaW5hdGUgTGF0ZW5jeSBUaW1lciAqLwotCQlyYyB8PSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19ieXRlKHBjaV9idXMsIGRldmZuLCBQQ0lfU0VDX0xBVEVOQ1lfVElNRVIsIGx0KTsKLQl9Ci0KLQkvKiBzZXQgYmFzZSBMYXRlbmN5IFRpbWVyICovCi0JcmMgfD0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZShwY2lfYnVzLCBkZXZmbiwgUENJX0xBVEVOQ1lfVElNRVIsIGx0KTsKLQlkYmcoIiAgc2V0IGxhdGVuY3kgdGltZXIgID0weCUwMng6ICV4XG4iLCBsdCwgcmMpOwotCi0JcmMgfD0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZShwY2lfYnVzLCBkZXZmbiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgY2xzKTsKLQlkYmcoIiAgc2V0IGNhY2hlX2xpbmVfc2l6ZT0weCUwMng6ICV4XG4iLCBjbHMsIHJjKTsKLQotCXJldHVybiByYzsKLX0KLQotdm9pZCBwY2llaHBybV9lbmFibGVfY2FyZCgKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsCi0JdTggY2FyZF90eXBlKQotewotCXUxNiBjb21tYW5kLCBjbWQsIGJjb21tYW5kLCBiY21kOwotCXN0cnVjdCBwY2lfYnVzIGxwY2lfYnVzLCAqcGNpX2J1czsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiOwotCXVuc2lnbmVkIGludCBkZXZmbjsKLQlpbnQgcmM7Ci0KLQltZW1jcHkoJmxwY2lfYnVzLCBjdHJsLT5wY2lfYnVzLCBzaXplb2YobHBjaV9idXMpKTsKLQlwY2lfYnVzID0gJmxwY2lfYnVzOwotCXBjaV9idXMtPm51bWJlciA9IGZ1bmMtPmJ1czsKLQlkZXZmbiA9IFBDSV9ERVZGTihmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQotCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKHBjaV9idXMsIGRldmZuLCBQQ0lfQ09NTUFORCwgJmNtZCk7Ci0KLQlpZiAoY2FyZF90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHsKLQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9CUklER0VfQ09OVFJPTCwgJmJjbWQpOwotCX0KLQotCWNvbW1hbmQgID0gY21kIHwgUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfSU5WQUxJREFURQotCQl8IFBDSV9DT01NQU5EX0lPIHwgUENJX0NPTU1BTkRfTUVNT1JZOwotCWJjb21tYW5kICA9IGJjbWQgfCBQQ0lfQlJJREdFX0NUTF9OT19JU0E7Ci0KLQlhYiA9IGZpbmRfYWNwaV9icmlkZ2VfYnlfYnVzKGFjcGlfYnJpZGdlc19oZWFkLCBjdHJsLT5zZWcsIGN0cmwtPmJ1cyk7Ci0JaWYgKGFiKSB7Ci0JCWlmIChhYi0+X2hwcCkgewotCQkJaWYgKGFiLT5faHBwLT5lbmFibGVfcGVycikgewotCQkJCWNvbW1hbmQgfD0gUENJX0NPTU1BTkRfUEFSSVRZOwotCQkJCWJjb21tYW5kIHw9IFBDSV9CUklER0VfQ1RMX1BBUklUWTsKLQkJCX0gZWxzZSB7Ci0JCQkJY29tbWFuZCAmPSB+UENJX0NPTU1BTkRfUEFSSVRZOwotCQkJCWJjb21tYW5kICY9IH5QQ0lfQlJJREdFX0NUTF9QQVJJVFk7Ci0JCQl9Ci0JCQlpZiAoYWItPl9ocHAtPmVuYWJsZV9zZXJyKSB7Ci0JCQkJY29tbWFuZCB8PSBQQ0lfQ09NTUFORF9TRVJSOwotCQkJCWJjb21tYW5kIHw9IFBDSV9CUklER0VfQ1RMX1NFUlI7Ci0JCQl9IGVsc2UgewotCQkJCWNvbW1hbmQgJj0gflBDSV9DT01NQU5EX1NFUlI7Ci0JCQkJYmNvbW1hbmQgJj0gflBDSV9CUklER0VfQ1RMX1NFUlI7Ci0JCQl9Ci0JCX0gZWxzZQotCQkJZGJnKCJubyBfaHBwIGZvciBCL0QvRiA9ICUjeC8lI3gvJSN4LlxuIiwgZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQl9IGVsc2UKLQkJZGJnKCJubyBhY3BpIGJyaWRnZSBmb3IgQi9EL0YgPSAlI3gvJSN4LyUjeC5cbiIsIGZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0KLQlpZiAoY29tbWFuZCAhPSBjbWQpIHsKLQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKHBjaV9idXMsIGRldmZuLCBQQ0lfQ09NTUFORCwgY29tbWFuZCk7Ci0JfQotCWlmICgoY2FyZF90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpICYmIChiY29tbWFuZCAhPSBiY21kKSkgewotCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9CUklER0VfQ09OVFJPTCwgYmNvbW1hbmQpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwcm1fbm9uYWNwaS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBybV9ub25hY3BpLmMKaW5kZXggNzZjNzI3Yy4uMjkxODBkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBybV9ub25hY3BpLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBybV9ub25hY3BpLmMKQEAgLTI3LDQ3OSArMjcsMjEgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpZmRlZiBDT05GSUdfSUE2NAotI2luY2x1ZGUgPGFzbS9pb3NhcGljLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgInBjaWVocC5oIgotI2luY2x1ZGUgInBjaWVocHJtLmgiCi0jaW5jbHVkZSAicGNpZWhwcm1fbm9uYWNwaS5oIgogCi0KLXZvaWQgcGNpZWhwcm1fY2xlYW51cCh2b2lkKQordm9pZCBwY2llaHBfZ2V0X2hwX3BhcmFtc19mcm9tX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCXN0cnVjdCBob3RwbHVnX3BhcmFtcyAqaHBwKQogewogCXJldHVybjsKIH0KIAotaW50IHBjaWVocHJtX3ByaW50X3BpcnQodm9pZCkKK2ludCBwY2llaHBfZ2V0X2hwX2h3X2NvbnRyb2xfZnJvbV9maXJtd2FyZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXJldHVybiAwOwogfQotCi1pbnQgcGNpZWhwcm1fZ2V0X3BoeXNpY2FsX3Nsb3RfbnVtYmVyKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCB1MzIgKnN1biwgdTggYnVzbnVtLCB1OCBkZXZudW0pCi17Ci0KLQkqc3VuID0gKHU4KSAoY3RybC0+Zmlyc3Rfc2xvdCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHZvaWQgcHJpbnRfcGNpX3Jlc291cmNlICggc3RydWN0IHBjaV9yZXNvdXJjZQkqYXByaCkKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlCSpyZXM7Ci0KLQlmb3IgKHJlcyA9IGFwcmg7IHJlczsgcmVzID0gcmVzLT5uZXh0KQotCQlkYmcoIiAgICAgICAgYmFzZT0gMHgleCBsZW5ndGg9IDB4JXhcbiIsIHJlcy0+YmFzZSwgcmVzLT5sZW5ndGgpOwotfQotCi0KLXN0YXRpYyB2b2lkIHBocHJtX2R1bXBfZnVuY19yZXMoIHN0cnVjdCBwY2lfZnVuYyAqZnVuKQotewotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYyA9IGZ1bjsKLQotCWlmIChmdW5jLT5idXNfaGVhZCkgewotCQlkYmcoIjogICAgQlVTIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGZ1bmMtPmJ1c19oZWFkKTsKLQl9Ci0JaWYgKGZ1bmMtPmlvX2hlYWQpIHsKLQkJZGJnKCI6ICAgIElPIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGZ1bmMtPmlvX2hlYWQpOwotCX0KLQlpZiAoZnVuYy0+bWVtX2hlYWQpIHsKLQkJZGJnKCI6ICAgIE1FTSBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChmdW5jLT5tZW1faGVhZCk7Ci0JfQotCWlmIChmdW5jLT5wX21lbV9oZWFkKSB7Ci0JCWRiZygiOiAgICBQTUVNIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGZ1bmMtPnBfbWVtX2hlYWQpOwotCX0KLX0KLQotc3RhdGljIGludCBwaHBybV9nZXRfdXNlZF9yZXNvdXJjZXMgKAotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsLAotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYwotCSkKLXsKLQlyZXR1cm4gcGNpZWhwX3NhdmVfdXNlZF9yZXNvdXJjZXMgKGN0cmwsIGZ1bmMsICFESVNBQkxFX0NBUkQpOwotfQotCi1zdGF0aWMgaW50IHBocHJtX2RlbGV0ZV9yZXNvdXJjZSgKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICoqYXByaCwKLQl1bG9uZyBiYXNlLAotCXVsb25nIHNpemUpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcmVzOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnByZXZub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnNwbGl0X25vZGU7Ci0JdWxvbmcgdGJhc2U7Ci0KLQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZShhcHJoKTsKLQotCWZvciAocmVzID0gKmFwcmg7IHJlczsgcmVzID0gcmVzLT5uZXh0KSB7Ci0JCWlmIChyZXMtPmJhc2UgPiBiYXNlKQotCQkJY29udGludWU7Ci0KLQkJaWYgKChyZXMtPmJhc2UgKyByZXMtPmxlbmd0aCkgPCAoYmFzZSArIHNpemUpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHJlcy0+YmFzZSA8IGJhc2UpIHsKLQkJCXRiYXNlID0gYmFzZTsKLQotCQkJaWYgKChyZXMtPmxlbmd0aCAtICh0YmFzZSAtIHJlcy0+YmFzZSkpIDwgc2l6ZSkKLQkJCQljb250aW51ZTsKLQotCQkJc3BsaXRfbm9kZSA9IChzdHJ1Y3QgcGNpX3Jlc291cmNlICopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IHJlcy0+YmFzZTsKLQkJCXNwbGl0X25vZGUtPmxlbmd0aCA9IHRiYXNlIC0gcmVzLT5iYXNlOwotCQkJcmVzLT5iYXNlID0gdGJhc2U7Ci0JCQlyZXMtPmxlbmd0aCAtPSBzcGxpdF9ub2RlLT5sZW5ndGg7Ci0KLQkJCXNwbGl0X25vZGUtPm5leHQgPSByZXMtPm5leHQ7Ci0JCQlyZXMtPm5leHQgPSBzcGxpdF9ub2RlOwotCQl9Ci0KLQkJaWYgKHJlcy0+bGVuZ3RoID49IHNpemUpIHsKLQkJCXNwbGl0X25vZGUgPSAoc3RydWN0IHBjaV9yZXNvdXJjZSopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IHJlcy0+YmFzZSArIHNpemU7Ci0JCQlzcGxpdF9ub2RlLT5sZW5ndGggPSByZXMtPmxlbmd0aCAtIHNpemU7Ci0JCQlyZXMtPmxlbmd0aCA9IHNpemU7Ci0KLQkJCXNwbGl0X25vZGUtPm5leHQgPSByZXMtPm5leHQ7Ci0JCQlyZXMtPm5leHQgPSBzcGxpdF9ub2RlOwotCQl9Ci0KLQkJaWYgKCphcHJoID09IHJlcykgewotCQkJKmFwcmggPSByZXMtPm5leHQ7Ci0JCX0gZWxzZSB7Ci0JCQlwcmV2bm9kZSA9ICphcHJoOwotCQkJd2hpbGUgKHByZXZub2RlLT5uZXh0ICE9IHJlcykKLQkJCQlwcmV2bm9kZSA9IHByZXZub2RlLT5uZXh0OwotCi0JCQlwcmV2bm9kZS0+bmV4dCA9IHJlcy0+bmV4dDsKLQkJfQotCQlyZXMtPm5leHQgPSBOVUxMOwotCQlrZnJlZShyZXMpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IHBocHJtX2RlbGV0ZV9yZXNvdXJjZXMoCi0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqKmFwcmgsCi0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqdGhpcwotCSkKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpyZXM7Ci0KLQlmb3IgKHJlcyA9IHRoaXM7IHJlczsgcmVzID0gcmVzLT5uZXh0KQotCQlwaHBybV9kZWxldGVfcmVzb3VyY2UoYXByaCwgcmVzLT5iYXNlLCByZXMtPmxlbmd0aCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IGNvbmZpZ3VyZV9leGlzdGluZ19mdW5jdGlvbigKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMKLQkpCi17Ci0JaW50IHJjOwotCi0JLyogc2VlIGhvdyBtdWNoIHJlc291cmNlcyB0aGUgZnVuYyBoYXMgdXNlZC4gKi8KLQlyYyA9IHBocHJtX2dldF91c2VkX3Jlc291cmNlcyAoY3RybCwgZnVuYyk7Ci0KLQlpZiAoIXJjKSB7Ci0JCS8qIHN1YnRyYWN0IHRoZSByZXNvdXJjZXMgdXNlZCBieSB0aGUgZnVuYyBmcm9tIGN0cmwgcmVzb3VyY2VzICovCi0JCXJjICA9IHBocHJtX2RlbGV0ZV9yZXNvdXJjZXMgKCZjdHJsLT5idXNfaGVhZCwgZnVuYy0+YnVzX2hlYWQpOwotCQlyYyB8PSBwaHBybV9kZWxldGVfcmVzb3VyY2VzICgmY3RybC0+aW9faGVhZCwgZnVuYy0+aW9faGVhZCk7Ci0JCXJjIHw9IHBocHJtX2RlbGV0ZV9yZXNvdXJjZXMgKCZjdHJsLT5tZW1faGVhZCwgZnVuYy0+bWVtX2hlYWQpOwotCQlyYyB8PSBwaHBybV9kZWxldGVfcmVzb3VyY2VzICgmY3RybC0+cF9tZW1faGVhZCwgZnVuYy0+cF9tZW1faGVhZCk7Ci0JCWlmIChyYykKLQkJCXdhcm4oImFDRUY6IGNhbm5vdCBkZWwgdXNlZCByZXNvdXJjZXNcbiIpOwotCX0gZWxzZQotCQllcnIoImFDRUY6IGNhbm5vdCBnZXQgdXNlZCByZXNvdXJjZXNcbiIpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IHBjaWVocHJtX2RlbGV0ZV9yZXNvdXJjZSgKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICoqYXByaCwKLQl1bG9uZyBiYXNlLAotCXVsb25nIHNpemUpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcmVzOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnByZXZub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnNwbGl0X25vZGU7Ci0JdWxvbmcgdGJhc2U7Ci0KLQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZShhcHJoKTsKLQotCWZvciAocmVzID0gKmFwcmg7IHJlczsgcmVzID0gcmVzLT5uZXh0KSB7Ci0JCWlmIChyZXMtPmJhc2UgPiBiYXNlKQotCQkJY29udGludWU7Ci0KLQkJaWYgKChyZXMtPmJhc2UgKyByZXMtPmxlbmd0aCkgPCAoYmFzZSArIHNpemUpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHJlcy0+YmFzZSA8IGJhc2UpIHsKLQkJCXRiYXNlID0gYmFzZTsKLQotCQkJaWYgKChyZXMtPmxlbmd0aCAtICh0YmFzZSAtIHJlcy0+YmFzZSkpIDwgc2l6ZSkKLQkJCQljb250aW51ZTsKLQotCQkJc3BsaXRfbm9kZSA9IChzdHJ1Y3QgcGNpX3Jlc291cmNlICopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IHJlcy0+YmFzZTsKLQkJCXNwbGl0X25vZGUtPmxlbmd0aCA9IHRiYXNlIC0gcmVzLT5iYXNlOwotCQkJcmVzLT5iYXNlID0gdGJhc2U7Ci0JCQlyZXMtPmxlbmd0aCAtPSBzcGxpdF9ub2RlLT5sZW5ndGg7Ci0KLQkJCXNwbGl0X25vZGUtPm5leHQgPSByZXMtPm5leHQ7Ci0JCQlyZXMtPm5leHQgPSBzcGxpdF9ub2RlOwotCQl9Ci0KLQkJaWYgKHJlcy0+bGVuZ3RoID49IHNpemUpIHsKLQkJCXNwbGl0X25vZGUgPSAoc3RydWN0IHBjaV9yZXNvdXJjZSopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IHJlcy0+YmFzZSArIHNpemU7Ci0JCQlzcGxpdF9ub2RlLT5sZW5ndGggPSByZXMtPmxlbmd0aCAtIHNpemU7Ci0JCQlyZXMtPmxlbmd0aCA9IHNpemU7Ci0KLQkJCXNwbGl0X25vZGUtPm5leHQgPSByZXMtPm5leHQ7Ci0JCQlyZXMtPm5leHQgPSBzcGxpdF9ub2RlOwotCQl9Ci0KLQkJaWYgKCphcHJoID09IHJlcykgewotCQkJKmFwcmggPSByZXMtPm5leHQ7Ci0JCX0gZWxzZSB7Ci0JCQlwcmV2bm9kZSA9ICphcHJoOwotCQkJd2hpbGUgKHByZXZub2RlLT5uZXh0ICE9IHJlcykKLQkJCQlwcmV2bm9kZSA9IHByZXZub2RlLT5uZXh0OwotCi0JCQlwcmV2bm9kZS0+bmV4dCA9IHJlcy0+bmV4dDsKLQkJfQotCQlyZXMtPm5leHQgPSBOVUxMOwotCQlrZnJlZShyZXMpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBiaW5kX3BjaV9yZXNvdXJjZXNfdG9fc2xvdHMgKCBzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKLXsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsIG5ld19mdW5jOwotCWludCBidXNuID0gY3RybC0+c2xvdF9idXM7Ci0JaW50IGRldm4sIGZ1bm47Ci0JdTMyCXZpZDsKLQotCWZvciAoZGV2biA9IDA7IGRldm4gPCAzMjsgZGV2bisrKSB7Ci0JCWZvciAoZnVubiA9IDA7IGZ1bm4gPCA4OyBmdW5uKyspIHsKLQkJCS8qCi0JCQlpZiAoZGV2biA9PSBjdHJsLT5kZXZpY2UgJiYgZnVubiA9PSBjdHJsLT5mdW5jdGlvbikKLQkJCQljb250aW51ZTsKLQkJCSovCi0JCQkvKiBmaW5kIG91dCBpZiB0aGlzIGVudHJ5IGlzIGZvciBhbiBvY2N1cGllZCBzbG90ICovCi0JCQl2aWQgPSAweEZGRkZGRkZGOwotCi0JCQlwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLCBQQ0lfREVWRk4oZGV2biwgZnVubiksIFBDSV9WRU5ET1JfSUQsICZ2aWQpOwotCi0JCQlpZiAodmlkICE9IDB4RkZGRkZGRkYpIHsKLQkJCQlkYmcoIiVzOiB2aWQgPSAleCBidXMgJXggZGV2ICV4IGZ1biAleFxuIiwgX19GVU5DVElPTl9fLAotCQkJCXZpZCwgYnVzbiwgZGV2biwgZnVubik7Ci0JCQkJZnVuYyA9IHBjaWVocF9zbG90X2ZpbmQoYnVzbiwgZGV2biwgZnVubik7Ci0JCQkJZGJnKCIlczogZnVuYyA9ICVwXG4iLCBfX0ZVTkNUSU9OX18sZnVuYyk7Ci0JCQkJaWYgKCFmdW5jKSB7Ci0JCQkJCW1lbXNldCgmbmV3X2Z1bmMsIDAsIHNpemVvZihzdHJ1Y3QgcGNpX2Z1bmMpKTsKLQkJCQkJbmV3X2Z1bmMuYnVzID0gYnVzbjsKLQkJCQkJbmV3X2Z1bmMuZGV2aWNlID0gZGV2bjsKLQkJCQkJbmV3X2Z1bmMuZnVuY3Rpb24gPSBmdW5uOwotCQkJCQluZXdfZnVuYy5pc19hX2JvYXJkID0gMTsKLQkJCQkJY29uZmlndXJlX2V4aXN0aW5nX2Z1bmN0aW9uKGN0cmwsICZuZXdfZnVuYyk7Ci0JCQkJCXBocHJtX2R1bXBfZnVuY19yZXMoJm5ld19mdW5jKTsKLQkJCQl9IGVsc2UgewotCQkJCQljb25maWd1cmVfZXhpc3RpbmdfZnVuY3Rpb24oY3RybCwgZnVuYyk7Ci0JCQkJCXBocHJtX2R1bXBfZnVuY19yZXMoZnVuYyk7Ci0JCQkJfQotCQkJCWRiZygiYUNDRjpleGlzdGluZyBQQ0kgMHgleCBGdW5jIFJlc291cmNlRHVtcFxuIiwgY3RybC0+YnVzKTsKLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwaHBybV9kdW1wX2N0cmxfcmVzKCBzdHJ1Y3QgY29udHJvbGxlciAqY3RscikKLXsKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IGN0bHI7Ci0KLQlpZiAoY3RybC0+YnVzX2hlYWQpIHsKLQkJZGJnKCI6ICAgIEJVUyBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChjdHJsLT5idXNfaGVhZCk7Ci0JfQotCWlmIChjdHJsLT5pb19oZWFkKSB7Ci0JCWRiZygiOiAgICBJTyBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChjdHJsLT5pb19oZWFkKTsKLQl9Ci0JaWYgKGN0cmwtPm1lbV9oZWFkKSB7Ci0JCWRiZygiOiAgICBNRU0gUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoY3RybC0+bWVtX2hlYWQpOwotCX0KLQlpZiAoY3RybC0+cF9tZW1faGVhZCkgewotCQlkYmcoIjogICAgUE1FTSBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChjdHJsLT5wX21lbV9oZWFkKTsKLQl9Ci19Ci0KLS8qCi0gKiBwaHBybV9maW5kX2F2YWlsYWJsZV9yZXNvdXJjZXMKLSAqCi0gKiAgRmluZHMgYXZhaWxhYmxlIG1lbW9yeSwgSU8sIGFuZCBJUlEgcmVzb3VyY2VzIGZvciBwcm9ncmFtbWluZwotICogIGRldmljZXMgd2hpY2ggbWF5IGJlIGFkZGVkIHRvIHRoZSBzeXN0ZW0KLSAqICB0aGlzIGZ1bmN0aW9uIGlzIGZvciBob3QgcGx1ZyBBREQhCi0gKgotICogcmV0dXJucyAwIGlmIHN1Y2Nlc3MKLSAqLwotaW50IHBjaWVocHJtX2ZpbmRfYXZhaWxhYmxlX3Jlc291cmNlcyhzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKLXsKLQlzdHJ1Y3QgcGNpX2Z1bmMgZnVuYzsKLQl1MzIgcmM7Ci0KLQltZW1zZXQoJmZ1bmMsIDAsIHNpemVvZihzdHJ1Y3QgcGNpX2Z1bmMpKTsKLQotCWZ1bmMuYnVzID0gY3RybC0+YnVzOwotCWZ1bmMuZGV2aWNlID0gY3RybC0+ZGV2aWNlOwotCWZ1bmMuZnVuY3Rpb24gPSBjdHJsLT5mdW5jdGlvbjsKLQlmdW5jLmlzX2FfYm9hcmQgPSAxOwotCi0JLyogR2V0IHJlc291cmNlcyBmb3IgdGhpcyBQQ0kgYnJpZGdlICovCi0JcmMgPSBwY2llaHBfc2F2ZV91c2VkX3Jlc291cmNlcyAoY3RybCwgJmZ1bmMsICFESVNBQkxFX0NBUkQpOwotCWRiZygiJXM6IHBjaWVocF9zYXZlX3VzZWRfcmVzb3VyY2VzIHJjID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgcmMpOwotCi0JaWYgKGZ1bmMubWVtX2hlYWQpCi0JCWZ1bmMubWVtX2hlYWQtPm5leHQgPSBjdHJsLT5tZW1faGVhZDsKLQljdHJsLT5tZW1faGVhZCA9IGZ1bmMubWVtX2hlYWQ7Ci0KLQlpZiAoZnVuYy5wX21lbV9oZWFkKQotCQlmdW5jLnBfbWVtX2hlYWQtPm5leHQgPSBjdHJsLT5wX21lbV9oZWFkOwotCWN0cmwtPnBfbWVtX2hlYWQgPSBmdW5jLnBfbWVtX2hlYWQ7Ci0KLQlpZiAoZnVuYy5pb19oZWFkKQotCQlmdW5jLmlvX2hlYWQtPm5leHQgPSBjdHJsLT5pb19oZWFkOwotCWN0cmwtPmlvX2hlYWQgPSBmdW5jLmlvX2hlYWQ7Ci0KLQlpZihmdW5jLmJ1c19oZWFkKQotCQlmdW5jLmJ1c19oZWFkLT5uZXh0ID0gY3RybC0+YnVzX2hlYWQ7Ci0JY3RybC0+YnVzX2hlYWQgPSBmdW5jLmJ1c19oZWFkOwotCi0JaWYgKGN0cmwtPmJ1c19oZWFkKQotCQlwY2llaHBybV9kZWxldGVfcmVzb3VyY2UoJmN0cmwtPmJ1c19oZWFkLCBjdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZS0+bnVtYmVyLCAxKTsKLQkKLQlkYmcoIiVzOnByZS1CaW5kIFBDSSAweCV4IEN0cmwgUmVzb3VyY2UgRHVtcFxuIiwgX19GVU5DVElPTl9fLCBjdHJsLT5idXMpOwotCXBocHJtX2R1bXBfY3RybF9yZXMoY3RybCk7Ci0KLQlkYmcoIiVzOiBiZWZvcmUgYmluZF9wY2lfcmVzb3VyY2VzX3RvIHNsb3RzXG4iLCBfX0ZVTkNUSU9OX18pOwotCi0JYmluZF9wY2lfcmVzb3VyY2VzX3RvX3Nsb3RzIChjdHJsKTsKLQotCWRiZygiJXM6cG9zdC1CaW5kIFBDSSAweCV4IEN0cmwgUmVzb3VyY2UgRHVtcFxuIiwgX19GVU5DVElPTl9fLCBjdHJsLT5idXMpOwotCXBocHJtX2R1bXBfY3RybF9yZXMoY3RybCk7Ci0KLQlyZXR1cm4gKHJjKTsKLX0KLQotaW50IHBjaWVocHJtX3NldF9ocHAoCi0Jc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsCi0Jc3RydWN0IHBjaV9mdW5jICpmdW5jLAotCXU4CWNhcmRfdHlwZSkKLXsKLQl1MzIgcmM7Ci0JdTggdGVtcF9ieXRlOwotCXN0cnVjdCBwY2lfYnVzIGxwY2lfYnVzLCAqcGNpX2J1czsKLQl1bnNpZ25lZCBpbnQJZGV2Zm47Ci0JbWVtY3B5KCZscGNpX2J1cywgY3RybC0+cGNpX2J1cywgc2l6ZW9mKGxwY2lfYnVzKSk7Ci0JcGNpX2J1cyA9ICZscGNpX2J1czsKLQlwY2lfYnVzLT5udW1iZXIgPSBmdW5jLT5idXM7Ci0JZGV2Zm4gPSBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0KLQl0ZW1wX2J5dGUgPSAweDQwOwkvKiBoYXJkIGNvZGVkIHZhbHVlIGZvciBMVCAqLwotCWlmIChjYXJkX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgewotCQkvKiBzZXQgc3Vib3JkaW5hdGUgTGF0ZW5jeSBUaW1lciAqLwotCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX2J5dGUocGNpX2J1cywgZGV2Zm4sIFBDSV9TRUNfTEFURU5DWV9USU1FUiwgdGVtcF9ieXRlKTsKLQotCQlpZiAocmMpIHsKLQkJCWRiZygiJXM6IHNldCBzZWNvbmRhcnkgTFQgZXJyb3IuIGI6ZDpmKCUwMng6JTAyeDolMDJ4KVxuIiwgX19GVU5DVElPTl9fLCAKLQkJCQlmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0JfQotCi0JLyogc2V0IGJhc2UgTGF0ZW5jeSBUaW1lciAqLwotCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZShwY2lfYnVzLCBkZXZmbiwgUENJX0xBVEVOQ1lfVElNRVIsIHRlbXBfYnl0ZSk7Ci0KLQlpZiAocmMpIHsKLQkJZGJnKCIlczogc2V0IExUIGVycm9yLiBiOmQ6ZiglMDJ4OiUwMng6JTAyeClcbiIsIF9fRlVOQ1RJT05fXywgZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCS8qIHNldCBDYWNoZSBMaW5lIHNpemUgKi8KLQl0ZW1wX2J5dGUgPSAweDA4OwkvKiBoYXJkIGNvZGVkIHZhbHVlIGZvciBDTFMgKi8KLQotCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZShwY2lfYnVzLCBkZXZmbiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgdGVtcF9ieXRlKTsKLQotCWlmIChyYykgewotCQlkYmcoIiVzOiBzZXQgQ0xTIGVycm9yLiBiOmQ6ZiglMDJ4OiUwMng6JTAyeClcbiIsIF9fRlVOQ1RJT05fXywgZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQl9Ci0KLQkvKiBzZXQgZW5hYmxlX3BlcnIgKi8KLQkvKiBzZXQgZW5hYmxlX3NlcnIgKi8KLQotCXJldHVybiByYzsKLX0KLQotdm9pZCBwY2llaHBybV9lbmFibGVfY2FyZCgKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsCi0JdTggY2FyZF90eXBlKQotewotCXUxNiBjb21tYW5kLCBiY29tbWFuZDsKLQlzdHJ1Y3QgcGNpX2J1cyBscGNpX2J1cywgKnBjaV9idXM7Ci0JdW5zaWduZWQgaW50IGRldmZuOwotCWludCByYzsKLQotCW1lbWNweSgmbHBjaV9idXMsIGN0cmwtPnBjaV9idXMsIHNpemVvZihscGNpX2J1cykpOwotCXBjaV9idXMgPSAmbHBjaV9idXM7Ci0JcGNpX2J1cy0+bnVtYmVyID0gZnVuYy0+YnVzOwotCWRldmZuID0gUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCi0JcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9DT01NQU5ELCAmY29tbWFuZCk7Ci0KLQljb21tYW5kIHw9IFBDSV9DT01NQU5EX1BBUklUWSB8IFBDSV9DT01NQU5EX1NFUlIKLQkJfCBQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9JTlZBTElEQVRFCi0JCXwgUENJX0NPTU1BTkRfSU8gfCBQQ0lfQ09NTUFORF9NRU1PUlk7Ci0KLQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9DT01NQU5ELCBjb21tYW5kKTsKLQotCWlmIChjYXJkX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgewotCi0JCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKHBjaV9idXMsIGRldmZuLCBQQ0lfQlJJREdFX0NPTlRST0wsICZiY29tbWFuZCk7Ci0KLQkJYmNvbW1hbmQgfD0gUENJX0JSSURHRV9DVExfUEFSSVRZIHwgUENJX0JSSURHRV9DVExfU0VSUgotCQkJfCBQQ0lfQlJJREdFX0NUTF9OT19JU0E7Ci0KLQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKHBjaV9idXMsIGRldmZuLCBQQ0lfQlJJREdFX0NPTlRST0wsIGJjb21tYW5kKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgbGVnYWN5X3BjaWVocHJtX2luaXRfcGNpKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBwY2llaHBybV9pbml0KGVudW0gcGhwX2N0bHJfdHlwZSBjdHJsX3R5cGUpCi17Ci0JaW50IHJldHZhbDsKLQotCXN3aXRjaCAoY3RybF90eXBlKSB7Ci0JY2FzZSBQQ0k6Ci0JCXJldHZhbCA9IGxlZ2FjeV9wY2llaHBybV9pbml0X3BjaSgpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR2YWwgPSAtRU5PREVWOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBybV9ub25hY3BpLmggYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtX25vbmFjcGkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEwNjAzYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtX25vbmFjcGkuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBQQ0lFSFBSTSBOT05BQ1BJOiBQSFAgUmVzb3VyY2UgTWFuYWdlciBmb3IgTm9uLUFDUEkvTGVnYWN5IHBsYXRmb3JtCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1LDIwMDEgQ29tcGFxIENvbXB1dGVyIENvcnBvcmF0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMSBJQk0gQ29ycC4KLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IEludGVsIENvcnBvcmF0aW9uCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAotICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgotICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKLSAqIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0gKiBTZW5kIGZlZWRiYWNrIHRvIDxncmVnQGtyb2FoLmNvbT4sIDxrcmlzdGVuLmMuYWNjYXJkaUBpbnRlbC5jb20+Ci0gKgotICovCi0KLSNpZm5kZWYgX1BDSUVIUFJNX05PTkFDUElfSF8KLSNkZWZpbmUgX1BDSUVIUFJNX05PTkFDUElfSF8KLQotc3RydWN0IGlycV9pbmZvIHsKLQl1OCBidXMsIGRldmZuOwkJLyogYnVzLCBkZXZpY2UgYW5kIGZ1bmN0aW9uICovCi0Jc3RydWN0IHsKLQkJdTggbGluazsJLyogSVJRIGxpbmUgSUQsIGNoaXBzZXQgZGVwZW5kZW50LCAwPW5vdCByb3V0ZWQgKi8KLQkJdTE2IGJpdG1hcDsJLyogQXZhaWxhYmxlIElSUXMgKi8KLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBpcnFbNF07Ci0JdTggc2xvdDsJCS8qIHNsb3QgbnVtYmVyLCAwPW9uYm9hcmQgKi8KLQl1OCByZnU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGlycV9yb3V0aW5nX3RhYmxlIHsKLQl1MzIgc2lnbmF0dXJlOwkJLyogUElSUV9TSUdOQVRVUkUgc2hvdWxkIGJlIGhlcmUgKi8KLQl1MTYgdmVyc2lvbjsJCS8qIFBJUlFfVkVSU0lPTiAqLwotCXUxNiBzaXplOwkJCS8qIFRhYmxlIHNpemUgaW4gYnl0ZXMgKi8KLQl1OCBydHJfYnVzLCBydHJfZGV2Zm47CS8qIFdoZXJlIHRoZSBpbnRlcnJ1cHQgcm91dGVyIGxpZXMgKi8KLQl1MTYgZXhjbHVzaXZlX2lycXM7CS8qIElSUXMgZGV2b3RlZCBleGNsdXNpdmVseSB0byBQQ0kgdXNhZ2UgKi8KLQl1MTYgcnRyX3ZlbmRvciwgcnRyX2RldmljZTsJLyogVmVuZG9yIGFuZCBkZXZpY2UgSUQgb2YgaW50ZXJydXB0IHJvdXRlciAqLwotCXUzMiBtaW5pcG9ydF9kYXRhOwkvKiBDcmFwICovCi0JdTggcmZ1WzExXTsKLQl1OCBjaGVja3N1bTsJCS8qIE1vZHVsbyAyNTYgY2hlY2tzdW0gbXVzdCBnaXZlIHplcm8gKi8KLQlzdHJ1Y3QgaXJxX2luZm8gc2xvdHNbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2VuZGlmCQkJCS8qIF9QQ0lFSFBSTV9OT05BQ1BJX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYWRscGFyX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhZGxwYXJfY29yZS5jCmluZGV4IGZjYjY2YjkuLmNjMDM2MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhZGxwYXJfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhZGxwYXJfY29yZS5jCkBAIC0xMzQsNDMgKzEzNCw2IEBACiAJCXJwYWRscGFyX2NsYWltX29uZV9idXMoY2hpbGRfYnVzKTsKIH0KIAotc3RhdGljIGludCBwY2lfYWRkX3NlY29uZGFyeV9idXMoc3RydWN0IGRldmljZV9ub2RlICpkbiwKLQkJc3RydWN0IHBjaV9kZXYgKmJyaWRnZV9kZXYpCi17Ci0Jc3RydWN0IHBjaV9kbiAqcGRuID0gZG4tPmRhdGE7Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGRuLT5waGI7Ci0Jc3RydWN0IHBjaV9idXMgKmNoaWxkOwotCXU4IHNlY19idXNubzsKLQotCS8qIEdldCBidXNubyBvZiBkb3duc3RyZWFtIGJ1cyAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGJyaWRnZV9kZXYsIFBDSV9TRUNPTkRBUllfQlVTLCAmc2VjX2J1c25vKTsKLQotCS8qIEFsbG9jYXRlIGFuZCBhZGQgdG8gY2hpbGRyZW4gb2YgYnJpZGdlX2Rldi0+YnVzICovCi0JY2hpbGQgPSBwY2lfYWRkX25ld19idXMoYnJpZGdlX2Rldi0+YnVzLCBicmlkZ2VfZGV2LCBzZWNfYnVzbm8pOwotCWlmICghY2hpbGQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGQgbm90IGFkZCBzZWNvbmRhcnkgYnVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlzcHJpbnRmKGNoaWxkLT5uYW1lLCAiUENJIEJ1cyAjJTAyeCIsIGNoaWxkLT5udW1iZXIpOwotCi0JLyogRml4dXAgc3Vib3JkaW5hdGUgYnJpZGdlIGJhc2VzIGFuZCByZXNvdXJjZXMgKi8KLQlwY2liaW9zX2ZpeHVwX2J1cyhjaGlsZCk7Ci0KLQkvKiBDbGFpbSBuZXcgYnVzIHJlc291cmNlcyAqLwotCXJwYWRscGFyX2NsYWltX29uZV9idXMoYnJpZGdlX2Rldi0+YnVzKTsKLQotCWlmIChob3NlLT5sYXN0X2J1c25vIDwgY2hpbGQtPm51bWJlcikKLQkJaG9zZS0+bGFzdF9idXNubyA9IGNoaWxkLT5udW1iZXI7Ci0KLQlwZG4tPmJ1c3N1Ym5vID0gY2hpbGQtPm51bWJlcjsKLQotCS8qIGlvcmVtYXAoKSBmb3IgY2hpbGQgYnVzLCB3aGljaCBtYXkgb3IgbWF5IG5vdCBzdWNjZWVkICovCi0JcmVtYXBfYnVzX3JhbmdlKGNoaWxkKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmRscGFyX2ZpbmRfbmV3X2RldihzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50LAogCQkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldl9kbikKIHsKQEAgLTE4OCwyOSArMTUxLDQxIEBACiBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmRscGFyX3BjaV9hZGRfYnVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCiB7CiAJc3RydWN0IHBjaV9kbiAqcGRuID0gZG4tPmRhdGE7Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGRuLT5waGI7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpwaGIgPSBwZG4tPnBoYjsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKIAotCS8qIFNjYW4gcGhiIGJ1cyBmb3IgRUFEUyBkZXZpY2UsIGFkZGluZyBuZXcgb25lIHRvIGJ1cy0+ZGV2aWNlcyAqLwotCWlmICghcGNpX3NjYW5fc2luZ2xlX2RldmljZShob3NlLT5idXMsIHBkbi0+ZGV2Zm4pKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZvdW5kIG5vIGRldmljZSBvbiBidXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJcnBhcGhwX2VlaF9pbml0X25vZGVzKGRuKTsKKwkvKiBBZGQgRUFEUyBkZXZpY2UgdG8gUEhCIGJ1cywgYWRkaW5nIG5ldyBlbnRyeSB0byBidXMtPmRldmljZXMgKi8KKwlkZXYgPSBvZl9jcmVhdGVfcGNpX2RldihkbiwgcGhiLT5idXMsIHBkbi0+ZGV2Zm4pOworCWlmICghZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBjcmVhdGUgcGNpIGRldiBmb3IgJXNcbiIsCisJCQkJX19GVU5DVElPTl9fLCBkbi0+ZnVsbF9uYW1lKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJaWYgKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSB8fAorCSAgICBkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9DQVJEQlVTKQorCQlvZl9zY2FuX3BjaV9icmlkZ2UoZG4sIGRldik7CisKKwlycGFwaHBfaW5pdF9uZXdfZGV2cyhkZXYtPnN1Ym9yZGluYXRlKTsKKworCS8qIENsYWltIG5ldyBidXMgcmVzb3VyY2VzICovCisJcnBhZGxwYXJfY2xhaW1fb25lX2J1cyhkZXYtPmJ1cyk7CisKKwkvKiBpb3JlbWFwKCkgZm9yIGNoaWxkIGJ1cywgd2hpY2ggbWF5IG9yIG1heSBub3Qgc3VjY2VlZCAqLworCSh2b2lkKSByZW1hcF9idXNfcmFuZ2UoZGV2LT5idXMpOworCiAJLyogQWRkIG5ldyBkZXZpY2VzIHRvIGdsb2JhbCBsaXN0cy4gIFJlZ2lzdGVyIGluIHByb2MsIHN5c2ZzLiAqLwotCXBjaV9idXNfYWRkX2RldmljZXMoaG9zZS0+YnVzKTsKKwlwY2lfYnVzX2FkZF9kZXZpY2VzKHBoYi0+YnVzKTsKIAogCS8qIENvbmZpcm0gbmV3IGJyaWRnZSBkZXYgd2FzIGNyZWF0ZWQgKi8KLQlkZXYgPSBkbHBhcl9maW5kX25ld19kZXYoaG9zZS0+YnVzLCBkbik7CisJZGV2ID0gZGxwYXJfZmluZF9uZXdfZGV2KHBoYi0+YnVzLCBkbik7CiAJaWYgKGRldikgewogCQlpZiAoZGV2LT5oZHJfdHlwZSAhPSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmV4cGVjdGVkIGhlYWRlciB0eXBlICVkXG4iLAogCQkJCV9fRlVOQ1RJT05fXywgZGV2LT5oZHJfdHlwZSk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQotCi0JCWlmIChwY2lfYWRkX3NlY29uZGFyeV9idXMoZG4sIGRldikpCi0JCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlyZXR1cm4gZGV2OwpAQCAtMjE5LDcgKzE5NCw2IEBACiBzdGF0aWMgaW50IGRscGFyX2FkZF9wY2lfc2xvdChjaGFyICpkcmNfbmFtZSwgc3RydWN0IGRldmljZV9ub2RlICpkbikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwotCWludCByYzsKIAogCWlmIChycGFwaHBfZmluZF9wY2lfYnVzKGRuKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMzIsMTUgKzIwNiw2IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCWlmIChkbi0+Y2hpbGQpIHsKLQkJcmMgPSBycGFwaHBfY29uZmlnX3BjaV9hZGFwdGVyKGRldi0+c3Vib3JkaW5hdGUpOwotCQlpZiAocmMgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZW5hYmxlIHNsb3QgJXNcbiIsCi0JCQkJX19GVU5DVElPTl9fLCBkcmNfbmFtZSk7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCX0KLQogCS8qIEFkZCBob3RwbHVnIHNsb3QgKi8KIAlpZiAocnBhcGhwX2FkZF9zbG90KGRuKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gYWRkIGhvdHBsdWcgc2xvdCAlc1xuIiwKQEAgLTMwNiw3ICsyNzEsNyBAQAogewogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiOwogCi0JaWYgKFBDSV9ETihkbiktPnBoYikgeworCWlmIChQQ0lfRE4oZG4pICYmIFBDSV9ETihkbiktPnBoYikgewogCQkvKiBQSEIgYWxyZWFkeSBleGlzdHMgKi8KIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNDM1LDYgKzQwMCw4IEBACiAJCQkJX19GVU5DVElPTl9fLCBkcmNfbmFtZSk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQorCX0gZWxzZSB7CisJCXJwYXBocF91bmNvbmZpZ19wY2lfYWRhcHRlcihidXMpOwogCX0KIAogCWlmICh1bm1hcF9idXNfcmFuZ2UoYnVzKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHAuaCBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwLmgKaW5kZXggNzFlYTVmOS4uNTdlYTcxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHAuaAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocC5oCkBAIC05Myw2ICs5Myw4IEBACiBleHRlcm4gaW50IHJwYXBocF9lbmFibGVfcGNpX3Nsb3Qoc3RydWN0IHNsb3QgKnNsb3QpOwogZXh0ZXJuIGludCByZWdpc3Rlcl9wY2lfc2xvdChzdHJ1Y3Qgc2xvdCAqc2xvdCk7CiBleHRlcm4gaW50IHJwYXBocF9nZXRfcGNpX2FkYXB0ZXJfc3RhdHVzKHN0cnVjdCBzbG90ICpzbG90LCBpbnQgaXNfaW5pdCwgdTggKiB2YWx1ZSk7CitleHRlcm4gdm9pZCBycGFwaHBfaW5pdF9uZXdfZGV2cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKK2V4dGVybiB2b2lkIHJwYXBocF9lZWhfaW5pdF9ub2RlcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKTsKIAogZXh0ZXJuIGludCBycGFwaHBfY29uZmlnX3BjaV9hZGFwdGVyKHN0cnVjdCBwY2lfYnVzICpidXMpOwogZXh0ZXJuIGludCBycGFwaHBfdW5jb25maWdfcGNpX2FkYXB0ZXIoc3RydWN0IHBjaV9idXMgKmJ1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9wY2kuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX3BjaS5jCmluZGV4IGY3YzEyZDcuLmE3ODU5YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX3BjaS5jCkBAIC0xNTQsOCArMTU0LDcgQEAKIH0KIAogLyogTXVzdCBiZSBjYWxsZWQgYmVmb3JlIHBjaV9idXNfYWRkX2RldmljZXMgKi8KLXN0YXRpYyB2b2lkIAotcnBhcGhwX2ZpeHVwX25ld19wY2lfZGV2aWNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgZml4X2J1cykKK3ZvaWQgcnBhcGhwX2ZpeHVwX25ld19wY2lfZGV2aWNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgZml4X2J1cykKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCkBAIC0xODQsNiArMTgzLDIwIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBycGFwaHBfZWVoX2FkZF9idXNfZGV2aWNlKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgeworCQllZWhfYWRkX2RldmljZV9sYXRlKGRldik7CisJCWlmIChkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHsKKwkJCXN0cnVjdCBwY2lfYnVzICpzdWJidXMgPSBkZXYtPnN1Ym9yZGluYXRlOworCQkJaWYgKHN1YmJ1cykKKwkJCQlycGFwaHBfZWVoX2FkZF9idXNfZGV2aWNlIChzdWJidXMpOworCQl9CisJfQorfQorCiBzdGF0aWMgaW50IHJwYXBocF9wY2lfY29uZmlnX2JyaWRnZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXU4IHNlY19idXNubzsKQEAgLTIxNyw2ICsyMzAsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBycGFwaHBfaW5pdF9uZXdfZGV2cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXJwYXBocF9maXh1cF9uZXdfcGNpX2RldmljZXMoYnVzLCAwKTsKKwlycGFwaHBfZWVoX2FkZF9idXNfZGV2aWNlKGJ1cyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChycGFwaHBfaW5pdF9uZXdfZGV2cyk7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogIHJwYXBocF9wY2lfY29uZmlnX3Nsb3QoKSB3aWxsICBjb25maWd1cmUgYWxsIGRldmljZXMgdW5kZXIgdGhlCiAgZ2l2ZW4gc2xvdC0+ZG4gYW5kIHJldHVybiB0aGUgdGhlIGZpcnN0IHBjaV9kZXYuCkBAIC0yMzMsMzYgKzI1Myw1MSBAQAogCWlmICghZG4gfHwgIWRuLT5jaGlsZCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlzbG90bm8gPSBQQ0lfU0xPVChQQ0lfRE4oZG4tPmNoaWxkKS0+ZGV2Zm4pOworCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtID09IFBMQVRGT1JNX1BTRVJJRVNfTFBBUikgeworCQlvZl9zY2FuX2J1cyhkbiwgYnVzKTsKKwkJaWYgKGxpc3RfZW1wdHkoJmJ1cy0+ZGV2aWNlcykpIHsKKwkJCWVycigiJXM6IE5vIG5ldyBkZXZpY2UgZm91bmRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQogCi0JLyogcGNpX3NjYW5fc2xvdCBzaG91bGQgZmluZCBhbGwgY2hpbGRyZW4gKi8KLQludW0gPSBwY2lfc2Nhbl9zbG90KGJ1cywgUENJX0RFVkZOKHNsb3RubywgMCkpOwotCWlmIChudW0pIHsKLQkJcnBhcGhwX2ZpeHVwX25ld19wY2lfZGV2aWNlcyhidXMsIDEpOworCQlycGFwaHBfaW5pdF9uZXdfZGV2cyhidXMpOwogCQlwY2lfYnVzX2FkZF9kZXZpY2VzKGJ1cyk7Ci0JfQotCWlmIChsaXN0X2VtcHR5KCZidXMtPmRldmljZXMpKSB7Ci0JCWVycigiJXM6IE5vIG5ldyBkZXZpY2UgZm91bmRcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKLQkJaWYgKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkKLQkJCXJwYXBocF9wY2lfY29uZmlnX2JyaWRnZShkZXYpOworCQlkZXYgPSBsaXN0X2VudHJ5KCZidXMtPmRldmljZXMsIHN0cnVjdCBwY2lfZGV2LCBidXNfbGlzdCk7CisJfSBlbHNlIHsKKwkJc2xvdG5vID0gUENJX1NMT1QoUENJX0ROKGRuLT5jaGlsZCktPmRldmZuKTsKKworCQkvKiBwY2lfc2Nhbl9zbG90IHNob3VsZCBmaW5kIGFsbCBjaGlsZHJlbiAqLworCQludW0gPSBwY2lfc2Nhbl9zbG90KGJ1cywgUENJX0RFVkZOKHNsb3RubywgMCkpOworCQlpZiAobnVtKSB7CisJCQlycGFwaHBfZml4dXBfbmV3X3BjaV9kZXZpY2VzKGJ1cywgMSk7CisJCQlwY2lfYnVzX2FkZF9kZXZpY2VzKGJ1cyk7CisJCX0KKwkJaWYgKGxpc3RfZW1wdHkoJmJ1cy0+ZGV2aWNlcykpIHsKKwkJCWVycigiJXM6IE5vIG5ldyBkZXZpY2UgZm91bmRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKKwkJCWlmIChkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpCisJCQkJcnBhcGhwX3BjaV9jb25maWdfYnJpZGdlKGRldik7CisKKwkJCXJwYXBocF9lZWhfYWRkX2J1c19kZXZpY2UoYnVzKTsKKwkJfQogCX0KIAogCXJldHVybiBkZXY7CiB9CiAKLXN0YXRpYyB2b2lkIGVuYWJsZV9lZWgoc3RydWN0IGRldmljZV9ub2RlICpkbikKK3ZvaWQgcnBhcGhwX2VlaF9pbml0X25vZGVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpzaWI7CiAKIAlmb3IgKHNpYiA9IGRuLT5jaGlsZDsgc2liOyBzaWIgPSBzaWItPnNpYmxpbmcpIAotCQllbmFibGVfZWVoKHNpYik7CisJCXJwYXBocF9lZWhfaW5pdF9ub2RlcyhzaWIpOwogCWVlaF9hZGRfZGV2aWNlX2Vhcmx5KGRuKTsKIAlyZXR1cm47CiAJCiB9CitFWFBPUlRfU1lNQk9MX0dQTChycGFwaHBfZWVoX2luaXRfbm9kZXMpOwogCiBzdGF0aWMgdm9pZCBwcmludF9zbG90X3BjaV9mdW5jcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewpAQCAtMjg5LDcgKzMyNCw3IEBACiAJaWYgKCFkbikKIAkJZ290byBleGl0OwogCi0JZW5hYmxlX2VlaChkbik7CisJcnBhcGhwX2VlaF9pbml0X25vZGVzKGRuKTsKIAlkZXYgPSBycGFwaHBfcGNpX2NvbmZpZ19zbG90KGJ1cyk7CiAJaWYgKCFkZXYpIHsKIAkJZXJyKCIlczogY2FuJ3QgZmluZCBhbnkgZGV2aWNlcy5cbiIsIF9fRlVOQ1RJT05fXyk7CkBAIC0zMzEsNiArMzY2LDcgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChycGFwaHBfdW5jb25maWdfcGNpX2FkYXB0ZXIpOwogCiBzdGF0aWMgaW50IHNldHVwX3BjaV9ob3RwbHVnX3Nsb3RfaW5mbyhzdHJ1Y3Qgc2xvdCAqc2xvdCkKIHsKQEAgLTQ0NCw4ICs0ODAsOCBAQAogCQlyZXR2YWwgPSBycGFwaHBfY29uZmlnX3BjaV9hZGFwdGVyKHNsb3QtPmJ1cyk7CiAJCWlmICghcmV0dmFsKSB7CiAJCQlzbG90LT5zdGF0ZSA9IENPTkZJR1VSRUQ7Ci0JCQlkYmcoIiVzOiBQQ0kgZGV2aWNlcyBpbiBzbG90WyVzXSBoYXMgYmVlbiBjb25maWd1cmVkXG4iLCAKLQkJCQlfX0ZVTkNUSU9OX18sIHNsb3QtPm5hbWUpOworCQkJaW5mbygiJXM6IGRldmljZXMgaW4gc2xvdFslc10gY29uZmlndXJlZFxuIiwKKwkJCQkJX19GVU5DVElPTl9fLCBzbG90LT5uYW1lKTsKIAkJfSBlbHNlIHsKIAkJCXNsb3QtPnN0YXRlID0gTk9UX0NPTkZJR1VSRUQ7CiAJCQlkYmcoIiVzOiBubyBwY2lfZGV2IHN0cnVjdCBmb3IgYWRhcHRlciBpbiBzbG90WyVzXVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX3BjaS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfcGNpLmMKaW5kZXggYjhlOTVhYy4uMzgwMDliYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfcGNpLmMKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICIuLi9wY2kuaCIKICNpbmNsdWRlICJzaHBjaHAuaCIKIAotdm9pZCBwcm9ncmFtX2Z3X3Byb3ZpZGVkX3ZhbHVlcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHZvaWQgcHJvZ3JhbV9md19wcm92aWRlZF92YWx1ZXMoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1MTYgcGNpX2NtZCwgcGNpX2JjdGw7CiAJc3RydWN0IHBjaV9kZXYgKmNkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9tc2kuYyBiL2RyaXZlcnMvcGNpL21zaS5jCmluZGV4IGEyMDMzNTUuLjIwMmI3NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL21zaS5jCisrKyBiL2RyaXZlcnMvcGNpL21zaS5jCkBAIC0yMyw2ICsyMyw4IEBACiAjaW5jbHVkZSAicGNpLmgiCiAjaW5jbHVkZSAibXNpLmgiCiAKKyNkZWZpbmUgTVNJX1RBUkdFVF9DUFUJCWZpcnN0X2NwdShjcHVfb25saW5lX21hcCkKKwogc3RhdGljIERFRklORV9TUElOTE9DSyhtc2lfbG9jayk7CiBzdGF0aWMgc3RydWN0IG1zaV9kZXNjKiBtc2lfZGVzY1tOUl9JUlFTXSA9IHsgWzAgLi4uIE5SX0lSUVMtMV0gPSBOVUxMIH07CiBzdGF0aWMga21lbV9jYWNoZV90KiBtc2lfY2FjaGVwOwpAQCAtOTIsNiArOTQsNyBAQAogCXN0cnVjdCBtc2lfZGVzYyAqZW50cnk7CiAJc3RydWN0IG1zZ19hZGRyZXNzIGFkZHJlc3M7CiAJdW5zaWduZWQgaW50IGlycSA9IHZlY3RvcjsKKwl1bnNpZ25lZCBpbnQgZGVzdF9jcHUgPSBmaXJzdF9jcHUoY3B1X21hc2spOwogCiAJZW50cnkgPSAoc3RydWN0IG1zaV9kZXNjICopbXNpX2Rlc2NbdmVjdG9yXTsKIAlpZiAoIWVudHJ5IHx8ICFlbnRyeS0+ZGV2KQpAQCAtMTA4LDkgKzExMSw5IEBACiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChlbnRyeS0+ZGV2LCBtc2lfbG93ZXJfYWRkcmVzc19yZWcocG9zKSwKIAkJCSZhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUpOwogCQlhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUgJj0gTVNJX0FERFJFU1NfREVTVF9JRF9NQVNLOwotCQlhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUgfD0gKGNwdV9tYXNrX3RvX2FwaWNpZChjcHVfbWFzaykgPDwKLQkJCU1TSV9UQVJHRVRfQ1BVX1NISUZUKTsKLQkJZW50cnktPm1zaV9hdHRyaWIuY3VycmVudF9jcHUgPSBjcHVfbWFza190b19hcGljaWQoY3B1X21hc2spOworCQlhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUgfD0gKGNwdV9waHlzaWNhbF9pZChkZXN0X2NwdSkgPDwKKwkJCQkJCQkJCU1TSV9UQVJHRVRfQ1BVX1NISUZUKTsKKwkJZW50cnktPm1zaV9hdHRyaWIuY3VycmVudF9jcHUgPSBjcHVfcGh5c2ljYWxfaWQoZGVzdF9jcHUpOwogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGVudHJ5LT5kZXYsIG1zaV9sb3dlcl9hZGRyZXNzX3JlZyhwb3MpLAogCQkJYWRkcmVzcy5sb19hZGRyZXNzLnZhbHVlKTsKIAkJc2V0X25hdGl2ZV9pcnFfaW5mbyhpcnEsIGNwdV9tYXNrKTsKQEAgLTEyMyw5ICsxMjYsOSBAQAogCiAJCWFkZHJlc3MubG9fYWRkcmVzcy52YWx1ZSA9IHJlYWRsKGVudHJ5LT5tYXNrX2Jhc2UgKyBvZmZzZXQpOwogCQlhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUgJj0gTVNJX0FERFJFU1NfREVTVF9JRF9NQVNLOwotCQlhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUgfD0gKGNwdV9tYXNrX3RvX2FwaWNpZChjcHVfbWFzaykgPDwKLQkJCU1TSV9UQVJHRVRfQ1BVX1NISUZUKTsKLQkJZW50cnktPm1zaV9hdHRyaWIuY3VycmVudF9jcHUgPSBjcHVfbWFza190b19hcGljaWQoY3B1X21hc2spOworCQlhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUgfD0gKGNwdV9waHlzaWNhbF9pZChkZXN0X2NwdSkgPDwKKwkJCQkJCQkJCU1TSV9UQVJHRVRfQ1BVX1NISUZUKTsKKwkJZW50cnktPm1zaV9hdHRyaWIuY3VycmVudF9jcHUgPSBjcHVfcGh5c2ljYWxfaWQoZGVzdF9jcHUpOwogCQl3cml0ZWwoYWRkcmVzcy5sb19hZGRyZXNzLnZhbHVlLCBlbnRyeS0+bWFza19iYXNlICsgb2Zmc2V0KTsKIAkJc2V0X25hdGl2ZV9pcnFfaW5mbyhpcnEsIGNwdV9tYXNrKTsKIAkJYnJlYWs7CkBAIC0yNTksMTQgKzI2MiwxNSBAQAogc3RhdGljIHZvaWQgbXNpX2FkZHJlc3NfaW5pdChzdHJ1Y3QgbXNnX2FkZHJlc3MgKm1zaV9hZGRyZXNzKQogewogCXVuc2lnbmVkIGludAlkZXN0X2lkOworCXVuc2lnbmVkIGxvbmcJZGVzdF9waHlzX2lkID0gY3B1X3BoeXNpY2FsX2lkKE1TSV9UQVJHRVRfQ1BVKTsKIAogCW1lbXNldChtc2lfYWRkcmVzcywgMCwgc2l6ZW9mKHN0cnVjdCBtc2dfYWRkcmVzcykpOwogCW1zaV9hZGRyZXNzLT5oaV9hZGRyZXNzID0gKHUzMikwOwogCWRlc3RfaWQgPSAoTVNJX0FERFJFU1NfSEVBREVSIDw8IE1TSV9BRERSRVNTX0hFQURFUl9TSElGVCk7Ci0JbXNpX2FkZHJlc3MtPmxvX2FkZHJlc3MudS5kZXN0X21vZGUgPSBNU0lfREVTVF9NT0RFOworCW1zaV9hZGRyZXNzLT5sb19hZGRyZXNzLnUuZGVzdF9tb2RlID0gTVNJX1BIWVNJQ0FMX01PREU7CiAJbXNpX2FkZHJlc3MtPmxvX2FkZHJlc3MudS5yZWRpcmVjdGlvbl9oaW50ID0gTVNJX1JFRElSRUNUSU9OX0hJTlRfTU9ERTsKIAltc2lfYWRkcmVzcy0+bG9fYWRkcmVzcy51LmRlc3RfaWQgPSBkZXN0X2lkOwotCW1zaV9hZGRyZXNzLT5sb19hZGRyZXNzLnZhbHVlIHw9IChNU0lfVEFSR0VUX0NQVSA8PCBNU0lfVEFSR0VUX0NQVV9TSElGVCk7CisJbXNpX2FkZHJlc3MtPmxvX2FkZHJlc3MudmFsdWUgfD0gKGRlc3RfcGh5c19pZCA8PCBNU0lfVEFSR0VUX0NQVV9TSElGVCk7CiB9CiAKIHN0YXRpYyBpbnQgbXNpX2ZyZWVfdmVjdG9yKHN0cnVjdCBwY2lfZGV2KiBkZXYsIGludCB2ZWN0b3IsIGludCByZWFzc2lnbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jIGIvZHJpdmVycy9wY2kvcGNpLWFjcGkuYwppbmRleCBlOWUzN2FiLi5hOWIwMGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMKQEAgLTkxLDkgKzkxLDcgQEAKIHN0YXRpYyBhY3BpX3N0YXR1cyAgCiBhY3BpX3J1bl9vc2MgKAogCWFjcGlfaGFuZGxlCWhhbmRsZSwKLQl1MzIJCWxldmVsLAotCXZvaWQJCSpjb250ZXh0LAotCXZvaWQJCSoqcmV0dmFsICkKKwl2b2lkCQkqY29udGV4dCkKIHsKIAlhY3BpX3N0YXR1cwkJc3RhdHVzOwogCXN0cnVjdCBhY3BpX29iamVjdF9saXN0CWlucHV0OwpAQCAtMTg0LDcgKzE4Miw3IEBACiAgKgogICogQXR0ZW1wdCB0byB0YWtlIGNvbnRyb2wgZnJvbSBGaXJtd2FyZSBvbiByZXF1ZXN0ZWQgY29udHJvbCBiaXRzLgogICoqLwotYWNwaV9zdGF0dXMgcGNpX29zY19jb250cm9sX3NldCh1MzIgZmxhZ3MpCithY3BpX3N0YXR1cyBwY2lfb3NjX2NvbnRyb2xfc2V0KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGZsYWdzKQogewogCWFjcGlfc3RhdHVzCXN0YXR1czsKIAl1MzIJCWN0cmxzZXQ7CkBAIC0xOTgsMTAgKzE5Niw3IEBACiAJCXJldHVybiBBRV9TVVBQT1JUOwogCX0KIAljdHJsc2V0X2J1ZltPU0NfQ09OVFJPTF9UWVBFXSB8PSBjdHJsc2V0OwotCXN0YXR1cyA9IGFjcGlfZ2V0X2RldmljZXMgKCBQQ0lfUk9PVF9ISURfU1RSSU5HLAotCQkJCWFjcGlfcnVuX29zYywKLQkJCQljdHJsc2V0X2J1ZiwKLQkJCQlOVUxMICk7CisJc3RhdHVzID0gYWNwaV9ydW5fb3NjKGhhbmRsZSwgY3RybHNldF9idWYpOwogCWlmIChBQ1BJX0ZBSUxVUkUgKHN0YXR1cykpIHsKIAkJY3RybHNldF9idWZbT1NDX0NPTlRST0xfVFlQRV0gJj0gfmN0cmxzZXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCmluZGV4IDk0ZTY4YzUuLmE5MDQ2ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKQEAgLTM3LDcgKzM3LDcgQEAKICAqIEFkZHMgYSBuZXcgZHluYW1pYyBwY2kgZGV2aWNlIElEIHRvIHRoaXMgZHJpdmVyLAogICogYW5kIGNhdXNlcyB0aGUgZHJpdmVyIHRvIHByb2JlIGZvciBhbGwgZGV2aWNlcyBhZ2Fpbi4KICAqLwotc3RhdGljIGlubGluZSBzc2l6ZV90CitzdGF0aWMgc3NpemVfdAogc3RvcmVfbmV3X2lkKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBwY2lfZHluaWQgKmR5bmlkOwpAQCAtMzY0LDE1ICszNjQsMTYgQEAKIH07CiAKIC8qKgotICogcGNpX3JlZ2lzdGVyX2RyaXZlciAtIHJlZ2lzdGVyIGEgbmV3IHBjaSBkcml2ZXIKKyAqIF9fcGNpX3JlZ2lzdGVyX2RyaXZlciAtIHJlZ2lzdGVyIGEgbmV3IHBjaSBkcml2ZXIKICAqIEBkcnY6IHRoZSBkcml2ZXIgc3RydWN0dXJlIHRvIHJlZ2lzdGVyCisgKiBAb3duZXI6IG93bmVyIG1vZHVsZSBvZiBkcnYKICAqIAogICogQWRkcyB0aGUgZHJpdmVyIHN0cnVjdHVyZSB0byB0aGUgbGlzdCBvZiByZWdpc3RlcmVkIGRyaXZlcnMuCiAgKiBSZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IsIG90aGVyd2lzZSAwLiAKICAqIElmIG5vIGVycm9yIG9jY3VycmVkLCB0aGUgZHJpdmVyIHJlbWFpbnMgcmVnaXN0ZXJlZCBldmVuIGlmIAogICogbm8gZGV2aWNlIHdhcyBjbGFpbWVkIGR1cmluZyByZWdpc3RyYXRpb24uCiAgKi8KLWludCBwY2lfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYpCitpbnQgX19wY2lfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYsIHN0cnVjdCBtb2R1bGUgKm93bmVyKQogewogCWludCBlcnJvcjsKIApAQCAtMzg5LDcgKzM5MCw3IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmc6IFBDSSBkcml2ZXIgJXMgaGFzIGEgc3RydWN0ICIKIAkJCSJkZXZpY2VfZHJpdmVyIHNodXRkb3duIG1ldGhvZCwgcGxlYXNlIHVwZGF0ZSFcbiIsCiAJCQlkcnYtPm5hbWUpOwotCWRydi0+ZHJpdmVyLm93bmVyID0gZHJ2LT5vd25lcjsKKwlkcnYtPmRyaXZlci5vd25lciA9IG93bmVyOwogCWRydi0+ZHJpdmVyLmtvYmoua3R5cGUgPSAmcGNpX2RyaXZlcl9rb2JqX3R5cGU7CiAKIAlzcGluX2xvY2tfaW5pdCgmZHJ2LT5keW5pZHMubG9jayk7CkBAIC01MjYsNyArNTI3LDcgQEAKIAogRVhQT1JUX1NZTUJPTChwY2lfbWF0Y2hfaWQpOwogRVhQT1JUX1NZTUJPTChwY2lfbWF0Y2hfZGV2aWNlKTsKLUVYUE9SVF9TWU1CT0wocGNpX3JlZ2lzdGVyX2RyaXZlcik7CitFWFBPUlRfU1lNQk9MKF9fcGNpX3JlZ2lzdGVyX2RyaXZlcik7CiBFWFBPUlRfU1lNQk9MKHBjaV91bnJlZ2lzdGVyX2RyaXZlcik7CiBFWFBPUlRfU1lNQk9MKHBjaV9kZXZfZHJpdmVyKTsKIEVYUE9SVF9TWU1CT0wocGNpX2J1c190eXBlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpLmMKaW5kZXggZTc0ZDc1OC4uOGUyODdhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLmMKQEAgLTYzLDExICs2MywzOCBAQAogCXJldHVybiBtYXg7CiB9CiAKK3N0YXRpYyBpbnQgX19wY2lfZmluZF9uZXh0X2NhcChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIHU4IHBvcywgaW50IGNhcCkKK3sKKwl1OCBpZDsKKwlpbnQgdHRsID0gNDg7CisKKwl3aGlsZSAodHRsLS0pIHsKKwkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKGJ1cywgZGV2Zm4sIHBvcywgJnBvcyk7CisJCWlmIChwb3MgPCAweDQwKQorCQkJYnJlYWs7CisJCXBvcyAmPSB+MzsKKwkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKGJ1cywgZGV2Zm4sIHBvcyArIFBDSV9DQVBfTElTVF9JRCwKKwkJCQkJICZpZCk7CisJCWlmIChpZCA9PSAweGZmKQorCQkJYnJlYWs7CisJCWlmIChpZCA9PSBjYXApCisJCQlyZXR1cm4gcG9zOworCQlwb3MgKz0gUENJX0NBUF9MSVNUX05FWFQ7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcGNpX2ZpbmRfbmV4dF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHBvcywgaW50IGNhcCkKK3sKKwlyZXR1cm4gX19wY2lfZmluZF9uZXh0X2NhcChkZXYtPmJ1cywgZGV2LT5kZXZmbiwKKwkJCQkgICBwb3MgKyBQQ0lfQ0FQX0xJU1RfTkVYVCwgY2FwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9maW5kX25leHRfY2FwYWJpbGl0eSk7CisKIHN0YXRpYyBpbnQgX19wY2lfYnVzX2ZpbmRfY2FwKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgdTggaGRyX3R5cGUsIGludCBjYXApCiB7CiAJdTE2IHN0YXR1czsKLQl1OCBwb3MsIGlkOwotCWludCB0dGwgPSA0ODsKKwl1OCBwb3M7CiAKIAlwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgUENJX1NUQVRVUywgJnN0YXR1cyk7CiAJaWYgKCEoc3RhdHVzICYgUENJX1NUQVRVU19DQVBfTElTVCkpCkBAIC03NiwyNCArMTAzLDE1IEBACiAJc3dpdGNoIChoZHJfdHlwZSkgewogCWNhc2UgUENJX0hFQURFUl9UWVBFX05PUk1BTDoKIAljYXNlIFBDSV9IRUFERVJfVFlQRV9CUklER0U6Ci0JCXBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShidXMsIGRldmZuLCBQQ0lfQ0FQQUJJTElUWV9MSVNULCAmcG9zKTsKKwkJcG9zID0gUENJX0NBUEFCSUxJVFlfTElTVDsKIAkJYnJlYWs7CiAJY2FzZSBQQ0lfSEVBREVSX1RZUEVfQ0FSREJVUzoKLQkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKGJ1cywgZGV2Zm4sIFBDSV9DQl9DQVBBQklMSVRZX0xJU1QsICZwb3MpOworCQlwb3MgPSBQQ0lfQ0JfQ0FQQUJJTElUWV9MSVNUOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKIAl9Ci0Jd2hpbGUgKHR0bC0tICYmIHBvcyA+PSAweDQwKSB7Ci0JCXBvcyAmPSB+MzsKLQkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKGJ1cywgZGV2Zm4sIHBvcyArIFBDSV9DQVBfTElTVF9JRCwgJmlkKTsKLQkJaWYgKGlkID09IDB4ZmYpCi0JCQlicmVhazsKLQkJaWYgKGlkID09IGNhcCkKLQkJCXJldHVybiBwb3M7Ci0JCXBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShidXMsIGRldmZuLCBwb3MgKyBQQ0lfQ0FQX0xJU1RfTkVYVCwgJnBvcyk7Ci0JfQotCXJldHVybiAwOworCXJldHVybiBfX3BjaV9maW5kX25leHRfY2FwKGJ1cywgZGV2Zm4sIHBvcywgY2FwKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IDU2MjdjZTEuLjNhNGY0OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC00NjIsMTEgKzQ2MiwxMSBAQAogCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCAweDcwLCAmaG0pOwogCWhtICY9IFBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSzsKLQlxdWlya19pb19yZWdpb24oZGV2LCBobSwgMTI4LCBQQ0lfQlJJREdFX1JFU09VUkNFUyArIDEsICJ2dDgyYzg2OCBIVy1tb24iKTsKKwlxdWlya19pb19yZWdpb24oZGV2LCBobSwgMTI4LCBQQ0lfQlJJREdFX1JFU09VUkNFUyArIDEsICJ2dDgyYzY4NiBIVy1tb24iKTsKIAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4OTAsICZzbWIpOwogCXNtYiAmPSBQQ0lfQkFTRV9BRERSRVNTX0lPX01BU0s7Ci0JcXVpcmtfaW9fcmVnaW9uKGRldiwgc21iLCAxNiwgUENJX0JSSURHRV9SRVNPVVJDRVMgKyAyLCAidnQ4MmM4NjggU01CIik7CisJcXVpcmtfaW9fcmVnaW9uKGRldiwgc21iLCAxNiwgUENJX0JSSURHRV9SRVNPVVJDRVMgKyAyLCAidnQ4MmM2ODYgU01CIik7CiB9CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9WSUEsCVBDSV9ERVZJQ0VfSURfVklBXzgyQzY4Nl80LAlxdWlya192dDgyYzY4Nl9hY3BpICk7CiAKQEAgLTEyNDMsNiArMTI0MywyMSBAQAogfQogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfTkVUTU9TLCBQQ0lfQU5ZX0lELCBxdWlya19uZXRtb3MpOwogCisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBmaXh1cF9yZXYxXzUzYzgxMChzdHJ1Y3QgcGNpX2RldiogZGV2KQoreworCS8qIHJldiAxIG5jcjUzYzgxMCBjaGlwcyBkb24ndCBzZXQgdGhlIGNsYXNzIGF0IGFsbCB3aGljaCBtZWFucworCSAqIHRoZXkgZG9uJ3QgZ2V0IHRoZWlyIHJlc291cmNlcyByZW1hcHBlZC4gRml4IHRoYXQgaGVyZS4KKwkgKi8KKworCWlmIChkZXYtPmNsYXNzID09IFBDSV9DTEFTU19OT1RfREVGSU5FRCkgeworCQlwcmludGsoS0VSTl9JTkZPICJOQ1IgNTNjODEwIHJldiAxIGRldGVjdGVkLCBzZXR0aW5nIFBDSSBjbGFzcy5cbiIpOworCQlkZXYtPmNsYXNzID0gUENJX0NMQVNTX1NUT1JBR0VfU0NTSTsKKwl9Cit9CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9OQ1IsIFBDSV9ERVZJQ0VfSURfTkNSXzUzQzgxMCwgZml4dXBfcmV2MV81M2M4MTApOworCisKIHN0YXRpYyB2b2lkIHBjaV9kb19maXh1cHMoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaV9maXh1cCAqZiwgc3RydWN0IHBjaV9maXh1cCAqZW5kKQogewogCXdoaWxlIChmIDwgZW5kKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnIGIvZHJpdmVycy9wY21jaWEvS2NvbmZpZwppbmRleCBjY2YyMDAzLi4zMDllYjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKQEAgLTE1Niw3ICsxNTYsNyBAQAogCiBjb25maWcgUENNQ0lBX004WFgKICAgICAgICAgdHJpc3RhdGUgIk1QQzh4eCBQQ01DSUEgc3VwcG9ydCIKLSAgICAgICAgZGVwZW5kcyBvbiBQQ01DSUEgJiYgUFBDCisgICAgICAgIGRlcGVuZHMgb24gUENNQ0lBICYmIFBQQyAmJiA4eHggCiAgICAgICAgIHNlbGVjdCBQQ0NBUkRfTk9OU1RBVElDCiAgICAgICAgIGhlbHAKICAgICAgICAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIFBvd2VyUEMgOHh4IHNlcmllcyBQQ01DSUEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlIGIvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKaW5kZXggZmUzNzU0MS4uYmNlY2Y1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKQEAgLTI1LDcgKzI1LDcgQEAKIG9iai0kKENPTkZJR19JODIzNjUpCQkJCSs9IGk4MjM2NS5vCiBvYmotJChDT05GSUdfSTgyMDkyKQkJCQkrPSBpODIwOTIubwogb2JqLSQoQ09ORklHX1RDSUMpCQkJCSs9IHRjaWMubwotb2JqLSQoQ09ORklHX1BDTUNJQV9NOFhYKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IG04eHhfcGNtY2lhLm8KK29iai0kKENPTkZJR19QQ01DSUFfTThYWCkJCQkrPSBtOHh4X3BjbWNpYS5vCiBvYmotJChDT05GSUdfSEQ2NDQ2NV9QQ01DSUEpCQkJKz0gaGQ2NDQ2NV9zcy5vCiBvYmotJChDT05GSUdfUENNQ0lBX1NBMTEwMCkJCQkrPSBzYTExeHhfY29yZS5vIHNhMTEwMF9jcy5vCiBvYmotJChDT05GSUdfUENNQ0lBX1NBMTExMSkJCQkrPSBzYTExeHhfY29yZS5vIHNhMTExMV9jcy5vCkBAIC00NywxMCArNDcsMTAgQEAKIGF1MXgwMF9zcy0kKENPTkZJR19NSVBTX1BCMTUwMCkJCQkrPSBhdTEwMDBfcGIxeDAwLm8KIGF1MXgwMF9zcy0kKENPTkZJR19NSVBTX0RCMTAwMCkJCQkrPSBhdTEwMDBfZGIxeDAwLm8KIGF1MXgwMF9zcy0kKENPTkZJR19NSVBTX0RCMTEwMCkJCQkrPSBhdTEwMDBfZGIxeDAwLm8KLWF1MXgwMF9zcy0kKENPTkZJR19NSVBTX0RCMTIwMCkgICAgICAgICAgICAgICAgICs9IGF1MTAwMF9kYjF4MDAubworYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxMjAwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwogYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxNTAwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwogYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxNTUwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfWFhTMTUwMCkgICAgICAgICAgICAgICArPSBhdTEwMDBfeHhzMTUwMC5vCithdTF4MDBfc3MtJChDT05GSUdfTUlQU19YWFMxNTAwKQkJKz0gYXUxMDAwX3h4czE1MDAubwogCiBzYTExMTFfY3MteQkJCQkJKz0gc2ExMTExX2dlbmVyaWMubwogc2ExMTExX2NzLSQoQ09ORklHX0FTU0FCRVRfTkVQT05TRVQpCQkrPSBzYTExMDBfbmVwb25zZXQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX2RiMXgwMC5jIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2RiMXgwMC5jCmluZGV4IDI0Y2ZlZTEuLmFiYzEzZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9kYjF4MDAuYworKysgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZGIxeDAwLmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5oIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuaAppbmRleCBiMGU3OTA4Li5mMmM5NzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmgKQEAgLTIyLDYgKzIyLDggQEAKICNkZWZpbmUgX19BU01fQVUxMDAwX1BDTUNJQV9ICiAKIC8qIGluY2x1ZGUgdGhlIHdvcmxkICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9wYjF4MDAuYyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9wYjF4MDAuYwppbmRleCA4NmMwODA4Li5mZDU1MjJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfcGIxeDAwLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX3BiMXgwMC5jCkBAIC0yMSw2ICsyMSw3IEBACiAgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF94eHMxNTAwLmMgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfeHhzMTUwMC5jCmluZGV4IDAxYTg5NWIuLjAxODc0YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF94eHMxNTAwLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX3h4czE1MDAuYwpAQCAtMjcsNyArMjcsNiBAQAogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCmluZGV4IDdjZTQ1NWQuLjRkZGQ3NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCkBAIC0xMzY2LDYgKzEzNjYsNyBAQAogICAgIGlmIChzb2NrZXRzID09IDApIHsKIAlwcmludGsoIm5vdCBmb3VuZC5cbiIpOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZpODIzNjVfZGV2aWNlKTsKKwlyZWxlYXNlX3JlZ2lvbihpMzY1X2Jhc2UsIDIpOwogCWRyaXZlcl91bnJlZ2lzdGVyKCZpODIzNjVfZHJpdmVyKTsKIAlyZXR1cm4gLUVOT0RFVjsKICAgICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jIGIvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYwppbmRleCBmOGJlZDg3Li42ZDlmNzFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMKQEAgLTM5LDcgKzM5LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KLSNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNTAsNiArNDksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vbXBjOHh4Lmg+CiAjaW5jbHVkZSA8YXNtLzh4eF9pbW1hcC5oPgpAQCAtNTQ2LDI5ICs1NDYsMTEgQEAKIAlmcmVlX2lycShwY21jaWFfc2NobHZsLCBOVUxMKTsKIH0KIAotLyogY29waWVkIGZyb20gdGNpYy5jICovCi0KLXN0YXRpYyBpbnQgbTh4eF9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSwgdTMyIGxldmVsKQotewotICAgICAgICBpbnQgcmV0ID0gMDsKLSAgICAgICAgaWYgKGxldmVsID09IFNVU1BFTkRfU0FWRV9TVEFURSkKLSAgICAgICAgICAgICAgICByZXQgPSBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKGRldiwgc3RhdGUpOwotICAgICAgICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG04eHhfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBsZXZlbCkKLXsKLSAgICAgICAgaW50IHJldCA9IDA7Ci0gICAgICAgIGlmIChsZXZlbCA9PSBSRVNVTUVfUkVTVE9SRV9TVEFURSkKLSAgICAgICAgICAgICAgICByZXQgPSBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoZGV2KTsKLSAgICAgICAgcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG04eHhfZHJpdmVyID0gewogICAgICAgICAubmFtZSA9ICJtOHh4LXBjbWNpYSIsCiAgICAgICAgIC5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0gICAgICAgIC5zdXNwZW5kID0gbTh4eF9kcnZfc3VzcGVuZCwKLSAgICAgICAgLnJlc3VtZSA9IG04eHhfZHJ2X3Jlc3VtZSwKKyAgICAgICAgLnN1c3BlbmQgPSBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kLAorICAgICAgICAucmVzdW1lID0gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbTh4eF9kZXZpY2UgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jIGIvZHJpdmVycy9zMzkwL25ldC9sY3MuYwppbmRleCAxYzhhZDJmLi5kYThjNTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKQEAgLTgsNyArOCw3IEBACiAgKiAgICBBdXRob3Iocyk6IE9yaWdpbmFsIENvZGUgd3JpdHRlbiBieQogICoJCQkgIERKIEJhcnJvdyAoZGpiYXJyb3dAZGUuaWJtLmNvbSxiYXJyb3dfZGpAeWFob28uY29tKQogICoJCSBSZXdyaXR0ZW4gYnkKLSAqCQkJICBGcmFuayBQYXZsaWMgKHBhdmxpY0BkZS5pYm0uY29tKSBhbmQKKyAqCQkJICBGcmFuayBQYXZsaWMgKGZwYXZsaWNAZGUuaWJtLmNvbSkgYW5kCiAgKgkJIAkgIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KICAqCiAgKiAgICAkUmV2aXNpb246IDEuOTkgJAkgJERhdGU6IDIwMDUvMDUvMTEgMDg6MTA6MTcgJApAQCAtMjM0Miw2ICsyMzQyLDYgQEAKIG1vZHVsZV9pbml0KGxjc19pbml0X21vZHVsZSk7CiBtb2R1bGVfZXhpdChsY3NfY2xlYW51cF9tb2R1bGUpOwogCi1NT0RVTEVfQVVUSE9SKCJGcmFuayBQYXZsaWMgPHBhdmxpY0BkZS5pYm0uY29tPiIpOworTU9EVUxFX0FVVEhPUigiRnJhbmsgUGF2bGljIDxmcGF2bGljQGRlLmlibS5jb20+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aC5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoLmgKaW5kZXggMzhhMjQ0MS4uZDIzOGM3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoLmgKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSA8bGludXgvdHJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogCiAjaW5jbHVkZSA8bmV0L2lwdjYuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KQEAgLTI0LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgInFldGhfbXBjLmgiCiAKLSNkZWZpbmUgVkVSU0lPTl9RRVRIX0ggCQkiJFJldmlzaW9uOiAxLjE0MiAkIgorI2RlZmluZSBWRVJTSU9OX1FFVEhfSCAJCSIkUmV2aXNpb246IDEuMTUyICQiCiAKICNpZmRlZiBDT05GSUdfUUVUSF9JUFY2CiAjZGVmaW5lIFFFVEhfVkVSU0lPTl9JUFY2IAkiOklQdjYiCkBAIC03MTgsOCArNzE5LDYgQEAKIAlhdG9taWNfdCByZWZjbnQ7CiB9OwogCi0jZGVmaW5lIFFFVEhfQlJPQURDQVNUX1dJVEhfRUNITyAgICAxCi0jZGVmaW5lIFFFVEhfQlJPQURDQVNUX1dJVEhPVVRfRUNITyAyCiAKIHN0cnVjdCBxZXRoX2NhcmRfYmxrdCB7CiAJaW50IHRpbWVfdG90YWw7CkBAIC03MjcsOCArNzI2LDEwIEBACiAJaW50IGludGVyX3BhY2tldF9qdW1ibzsKIH07CiAKLQotCisjZGVmaW5lIFFFVEhfQlJPQURDQVNUX1dJVEhfRUNITyAgICAweDAxCisjZGVmaW5lIFFFVEhfQlJPQURDQVNUX1dJVEhPVVRfRUNITyAweDAyCisjZGVmaW5lIFFFVEhfTEFZRVIyX01BQ19SRUFECSAgICAweDAxCisjZGVmaW5lIFFFVEhfTEFZRVIyX01BQ19SRUdJU1RFUkVEICAweDAyCiBzdHJ1Y3QgcWV0aF9jYXJkX2luZm8gewogCXVuc2lnbmVkIHNob3J0IHVuaXRfYWRkcjI7CiAJdW5zaWduZWQgc2hvcnQgY3VsYTsKQEAgLTczNiw3ICs3MzcsNyBAQAogCV9fdTE2IGZ1bmNfbGV2ZWw7CiAJY2hhciBtY2xfbGV2ZWxbUUVUSF9NQ0xfTEVOR1RIICsgMV07CiAJaW50IGd1ZXN0bGFuOwotCWludCBsYXllcjJfbWFjX3JlZ2lzdGVyZWQ7CisJaW50IG1hY19iaXRzOwogCWludCBwb3J0bmFtZV9yZXF1aXJlZDsKIAlpbnQgcG9ydG5vOwogCWNoYXIgcG9ydG5hbWVbOV07CkBAIC03NDksNiArNzUwLDcgQEAKIAlpbnQgdW5pcXVlX2lkOwogCXN0cnVjdCBxZXRoX2NhcmRfYmxrdCBibGt0OwogCV9fdTMyIGNzdW1fbWFzazsKKwllbnVtIHFldGhfaXBhX3Byb21pc2NfbW9kZXMgcHJvbWlzY19tb2RlOwogfTsKIAogc3RydWN0IHFldGhfY2FyZF9vcHRpb25zIHsKQEAgLTc3NSw2ICs3NzcsNyBAQAogZW51bSBxZXRoX3RocmVhZHMgewogCVFFVEhfU0VUX0lQX1RIUkVBRCAgPSAxLAogCVFFVEhfUkVDT1ZFUl9USFJFQUQgPSAyLAorCVFFVEhfU0VUX1BST01JU0NfTU9ERV9USFJFQUQgPSA0LAogfTsKIAogc3RydWN0IHFldGhfb3NuX2luZm8gewpAQCAtMTA3NCw2ICsxMDc3LDI2IEBACiAJfQogfQogCitzdGF0aWMgaW5saW5lIGludAorcWV0aF9pc2RpZ2l0KGNoYXIgKiBidWYpCit7CisJd2hpbGUgKCpidWYpIHsKKwkJaWYgKCFpc2RpZ2l0KCpidWYrKykpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitxZXRoX2lzeGRpZ2l0KGNoYXIgKiBidWYpCit7CisJd2hpbGUgKCpidWYpIHsKKwkJaWYgKCFpc3hkaWdpdCgqYnVmKyspKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQKIHFldGhfaXBhZGRyNF90b19zdHJpbmcoY29uc3QgX191OCAqYWRkciwgY2hhciAqYnVmKQogewpAQCAtMTA5MCwxOCArMTExMywyNyBAQAogCWludCBpOwogCiAJc3RhcnQgPSBidWY7Ci0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotCQlpZiAoIShlbmQgPSBzdHJjaHIoc3RhcnQsICcuJykpKQorCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJaWYgKGkgPT0gMykgeworCQkJZW5kID0gc3RyY2hyKHN0YXJ0LDB4YSk7CisJCQlpZiAoZW5kKQorCQkJCWxlbiA9IGVuZCAtIHN0YXJ0OworCQkJZWxzZQkJCisJCQkJbGVuID0gc3RybGVuKHN0YXJ0KTsKKwkJfQorCQllbHNlIHsKKwkJCWVuZCA9IHN0cmNocihzdGFydCwgJy4nKTsKKwkJCWxlbiA9IGVuZCAtIHN0YXJ0OworCQl9CisJCWlmICgobGVuIDw9IDApIHx8IChsZW4gPiAzKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQlsZW4gPSBlbmQgLSBzdGFydDsKIAkJbWVtc2V0KGFidWYsIDAsIDQpOwogCQlzdHJuY3B5KGFidWYsIHN0YXJ0LCBsZW4pOworCQlpZiAoIXFldGhfaXNkaWdpdChhYnVmKSkKKwkJCXJldHVybiAtRUlOVkFMOwogCQlhZGRyW2ldID0gc2ltcGxlX3N0cnRvdWwoYWJ1ZiwgJnRtcCwgMTApOwogCQlzdGFydCA9IGVuZCArIDE7CiAJfQotCW1lbXNldChhYnVmLCAwLCA0KTsKLQlzdHJjcHkoYWJ1Ziwgc3RhcnQpOwotCWFkZHJbM10gPSBzaW1wbGVfc3RydG91bChhYnVmLCAmdG1wLCAxMCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMjgsMTggKzExNjAsMjcgQEAKIAogCXRtcF9hZGRyID0gKHUxNiAqKWFkZHI7CiAJc3RhcnQgPSBidWY7Ci0JZm9yIChpID0gMDsgaSA8IDc7IGkrKykgewotCQlpZiAoIShlbmQgPSBzdHJjaHIoc3RhcnQsICc6JykpKQorCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJaWYgKGkgPT0gNykgeworCQkJZW5kID0gc3RyY2hyKHN0YXJ0LDB4YSk7CisJCQlpZiAoZW5kKQorCQkJCWxlbiA9IGVuZCAtIHN0YXJ0OworCQkJZWxzZQorCQkJCWxlbiA9IHN0cmxlbihzdGFydCk7CisJCX0KKwkJZWxzZSB7CisJCQllbmQgPSBzdHJjaHIoc3RhcnQsICc6Jyk7CisJCQlsZW4gPSBlbmQgLSBzdGFydDsKKwkJfQorCQlpZiAoKGxlbiA8PSAwKSB8fCAobGVuID4gNCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJbGVuID0gZW5kIC0gc3RhcnQ7CiAJCW1lbXNldChhYnVmLCAwLCA1KTsKIAkJc3RybmNweShhYnVmLCBzdGFydCwgbGVuKTsKKwkJaWYgKCFxZXRoX2lzeGRpZ2l0KGFidWYpKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXRtcF9hZGRyW2ldID0gc2ltcGxlX3N0cnRvdWwoYWJ1ZiwgJnRtcCwgMTYpOwogCQlzdGFydCA9IGVuZCArIDE7CiAJfQotCW1lbXNldChhYnVmLCAwLCA1KTsKLQlzdHJjcHkoYWJ1Ziwgc3RhcnQpOwotCXRtcF9hZGRyWzddID0gc2ltcGxlX3N0cnRvdWwoYWJ1ZiwgJnRtcCwgMTYpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYwppbmRleCA2OTIwMDNjLi45OWNjZWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICoKLSAqIGxpbnV4L2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMgKCRSZXZpc2lvbjogMS4yMjQgJCkKKyAqIGxpbnV4L2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMgKCRSZXZpc2lvbjogMS4yNDIgJCkKICAqCiAgKiBMaW51eCBvbiB6U2VyaWVzIE9TQSBFeHByZXNzIGFuZCBIaXBlclNvY2tldHMgc3VwcG9ydAogICoKQEAgLTksMTAgKzksMTAgQEAKICAqICAgIEF1dGhvcihzKTogT3JpZ2luYWwgQ29kZSB3cml0dGVuIGJ5CiAgKgkJCSAgVXR6IEJhY2hlciAodXR6LmJhY2hlckBkZS5pYm0uY29tKQogICoJCSBSZXdyaXR0ZW4gYnkKLSAqCQkJICBGcmFuayBQYXZsaWMgKHBhdmxpY0BkZS5pYm0uY29tKSBhbmQKKyAqCQkJICBGcmFuayBQYXZsaWMgKGZwYXZsaWNAZGUuaWJtLmNvbSkgYW5kCiAgKgkJIAkgIFRob21hcyBTcGF0emllciA8dHNwYXRAZGUuaWJtLmNvbT4KICAqCi0gKiAgICAkUmV2aXNpb246IDEuMjI0ICQJICREYXRlOiAyMDA1LzA1LzA0IDIwOjE5OjE4ICQKKyAqICAgICRSZXZpc2lvbjogMS4yNDIgJAkgJERhdGU6IDIwMDUvMDUvMDQgMjA6MTk6MTggJAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNzIsNyArNzIsNyBAQAogI2luY2x1ZGUgInFldGhfZWRkcC5oIgogI2luY2x1ZGUgInFldGhfdHNvLmgiCiAKLSNkZWZpbmUgVkVSU0lPTl9RRVRIX0MgIiRSZXZpc2lvbjogMS4yMjQgJCIKKyNkZWZpbmUgVkVSU0lPTl9RRVRIX0MgIiRSZXZpc2lvbjogMS4yNDIgJCIKIHN0YXRpYyBjb25zdCBjaGFyICp2ZXJzaW9uID0gInFldGggUy8zOTAgT1NBLUV4cHJlc3MgZHJpdmVyIjsKIAogLyoqCkBAIC0xNjAsNiArMTYwLDkgQEAKIHFldGhfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICopOwogCiBzdGF0aWMgdm9pZAorcWV0aF9zZXRhZHBfcHJvbWlzY19tb2RlKHN0cnVjdCBxZXRoX2NhcmQgKik7CisKK3N0YXRpYyB2b2lkCiBxZXRoX25vdGlmeV9wcm9jZXNzZXModm9pZCkKIHsKIAkvKm5vdGlmeSBhbGwgIHJlZ2lzdGVyZWQgcHJvY2Vzc2VzICovCkBAIC02MDIsMTEgKzYwNSwyMCBAQAogCWludCBmb3VuZCA9IDA7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFkZHIsICZjYXJkLT5pcF9saXN0LCBlbnRyeSkgeworCQlpZiAoY2FyZC0+b3B0aW9ucy5sYXllcjIpIHsKKwkJCWlmICgoYWRkci0+dHlwZSA9PSB0b2RvLT50eXBlKSAmJgorCQkJICAgIChtZW1jbXAoJmFkZHItPm1hYywgJnRvZG8tPm1hYywgCisJCQkJICAgIE9TQV9BRERSX0xFTikgPT0gMCkpIHsKKwkJCQlmb3VuZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCQljb250aW51ZTsKKwkJfSAKIAkJaWYgKChhZGRyLT5wcm90byAgICAgPT0gUUVUSF9QUk9UX0lQVjQpICAmJgogCQkgICAgKHRvZG8tPnByb3RvICAgICA9PSBRRVRIX1BST1RfSVBWNCkgICYmCiAJCSAgICAoYWRkci0+dHlwZSAgICAgID09IHRvZG8tPnR5cGUpICAgICAgJiYKIAkJICAgIChhZGRyLT51LmE0LmFkZHIgPT0gdG9kby0+dS5hNC5hZGRyKSAmJgotCQkgICAgKGFkZHItPnUuYTQubWFzayA9PSB0b2RvLT51LmE0Lm1hc2spICAgKXsKKwkJICAgIChhZGRyLT51LmE0Lm1hc2sgPT0gdG9kby0+dS5hNC5tYXNrKSkgewogCQkJZm91bmQgPSAxOwogCQkJYnJlYWs7CiAJCX0KQEAgLTYxNSwxMiArNjI3LDEyIEBACiAJCSAgICAoYWRkci0+dHlwZSAgICAgICAgPT0gdG9kby0+dHlwZSkgICAgICAgICAmJgogCQkgICAgKGFkZHItPnUuYTYucGZ4bGVuID09IHRvZG8tPnUuYTYucGZ4bGVuKSAgJiYKIAkJICAgIChtZW1jbXAoJmFkZHItPnUuYTYuYWRkciwgJnRvZG8tPnUuYTYuYWRkciwKLQkJCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgPT0gMCkpICAgICB7CisJCQkgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpID09IDApKSB7CiAJCQlmb3VuZCA9IDE7CiAJCQlicmVhazsKIAkJfQogCX0KLQlpZiAoZm91bmQpeworCWlmIChmb3VuZCkgewogCQlhZGRyLT51c2VycyArPSB0b2RvLT51c2VyczsKIAkJaWYgKGFkZHItPnVzZXJzIDw9IDApewogCQkJKl9fYWRkciA9IGFkZHI7CkBAIC02MzIsNyArNjQ0LDcgQEAKIAkJCXJldHVybiAwOwogCQl9CiAJfQotCWlmICh0b2RvLT51c2VycyA+IDApeworCWlmICh0b2RvLT51c2VycyA+IDApIHsKIAkJLyogZm9yIFZJUEEgYW5kIFJYSVAgbGltaXQgcmVmY291bnQgdG8gMSAqLwogCQlpZiAodG9kby0+dHlwZSAhPSBRRVRIX0lQX1RZUEVfTk9STUFMKQogCQkJdG9kby0+dXNlcnMgPSAxOwpAQCAtNjgyLDEyICs2OTQsMjIgQEAKIAkJaWYgKChhZGRyLT50eXBlID09IFFFVEhfSVBfVFlQRV9ERUxfQUxMX01DKSAmJgogCQkgICAgKHRtcC0+dHlwZSA9PSBRRVRIX0lQX1RZUEVfREVMX0FMTF9NQykpCiAJCQlyZXR1cm4gMDsKKwkJaWYgKGNhcmQtPm9wdGlvbnMubGF5ZXIyKSB7CisJCQlpZiAoKHRtcC0+dHlwZQk9PSBhZGRyLT50eXBlKQkmJgorCQkJICAgICh0bXAtPmlzX211bHRpY2FzdCA9PSBhZGRyLT5pc19tdWx0aWNhc3QpICYmCisJCQkgICAgKG1lbWNtcCgmdG1wLT5tYWMsICZhZGRyLT5tYWMsIAorCQkJCSAgICBPU0FfQUREUl9MRU4pID09IDApKSB7CisJCQkJZm91bmQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQkJY29udGludWU7CisJCX0gCSAKIAkJaWYgKCh0bXAtPnByb3RvICAgICAgICA9PSBRRVRIX1BST1RfSVBWNCkgICAgICYmCiAJCSAgICAoYWRkci0+cHJvdG8gICAgICAgPT0gUUVUSF9QUk9UX0lQVjQpICAgICAmJgogCQkgICAgKHRtcC0+dHlwZSAgICAgICAgID09IGFkZHItPnR5cGUpICAgICAgICAgJiYKIAkJICAgICh0bXAtPmlzX211bHRpY2FzdCA9PSBhZGRyLT5pc19tdWx0aWNhc3QpICYmCiAJCSAgICAodG1wLT51LmE0LmFkZHIgICAgPT0gYWRkci0+dS5hNC5hZGRyKSAgICAmJgotCQkgICAgKHRtcC0+dS5hNC5tYXNrICAgID09IGFkZHItPnUuYTQubWFzaykgICAgICApeworCQkgICAgKHRtcC0+dS5hNC5tYXNrICAgID09IGFkZHItPnUuYTQubWFzaykpIHsKIAkJCWZvdW5kID0gMTsKIAkJCWJyZWFrOwogCQl9CkBAIC02OTcsNyArNzE5LDcgQEAKIAkJICAgICh0bXAtPmlzX211bHRpY2FzdCA9PSBhZGRyLT5pc19tdWx0aWNhc3QpICAmJgogCQkgICAgKHRtcC0+dS5hNi5wZnhsZW4gID09IGFkZHItPnUuYTYucGZ4bGVuKSAgICYmCiAJCSAgICAobWVtY21wKCZ0bXAtPnUuYTYuYWRkciwgJmFkZHItPnUuYTYuYWRkciwKLQkJCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgPT0gMCkgICAgICAgICl7CisJCQkgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpID09IDApKSB7CiAJCQlmb3VuZCA9IDE7CiAJCQlicmVhazsKIAkJfQpAQCAtNzA3LDcgKzcyOSw3IEBACiAJCQl0bXAtPnVzZXJzICs9IGFkZHItPnVzZXJzOwogCQllbHNlCiAJCQl0bXAtPnVzZXJzICs9IGFkZD8gMTotMTsKLQkJaWYgKHRtcC0+dXNlcnMgPT0gMCl7CisJCWlmICh0bXAtPnVzZXJzID09IDApIHsKIAkJCWxpc3RfZGVsKCZ0bXAtPmVudHJ5KTsKIAkJCWtmcmVlKHRtcCk7CiAJCX0KQEAgLTczOCwxMiArNzYwLDE1IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmMgPSAwOwogCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSw0LCJkZWxpcCIpOwotCWlmIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNCkKLQkJUUVUSF9EQkZfSEVYKHRyYWNlLDQsJmFkZHItPnUuYTQuYWRkciw0KTsKKwlRRVRIX0RCRl9URVhUKHRyYWNlLCA0LCAiZGVsaXAiKTsKKworCWlmIChjYXJkLT5vcHRpb25zLmxheWVyMikKKwkJUUVUSF9EQkZfSEVYKHRyYWNlLCA0LCAmYWRkci0+bWFjLCA2KTsKKwllbHNlIGlmIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNCkKKwkJUUVUSF9EQkZfSEVYKHRyYWNlLCA0LCAmYWRkci0+dS5hNC5hZGRyLCA0KTsKIAllbHNlIHsKLQkJUUVUSF9EQkZfSEVYKHRyYWNlLDQsJmFkZHItPnUuYTYuYWRkciw4KTsKLQkJUUVUSF9EQkZfSEVYKHRyYWNlLDQsKChjaGFyICopJmFkZHItPnUuYTYuYWRkcikrOCw4KTsKKwkJUUVUSF9EQkZfSEVYKHRyYWNlLCA0LCAmYWRkci0+dS5hNi5hZGRyLCA4KTsKKwkJUUVUSF9EQkZfSEVYKHRyYWNlLCA0LCAoKGNoYXIgKikmYWRkci0+dS5hNi5hZGRyKSArIDgsIDgpOwogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOwogCXJjID0gX19xZXRoX2luc2VydF9pcF90b2RvKGNhcmQsIGFkZHIsIDApOwpAQCAtNzU3LDEyICs3ODIsMTQgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYyA9IDA7CiAKLQlRRVRIX0RCRl9URVhUKHRyYWNlLDQsImFkZGlwIik7Ci0JaWYgKGFkZHItPnByb3RvID09IFFFVEhfUFJPVF9JUFY0KQotCQlRRVRIX0RCRl9IRVgodHJhY2UsNCwmYWRkci0+dS5hNC5hZGRyLDQpOworCVFFVEhfREJGX1RFWFQodHJhY2UsIDQsICJhZGRpcCIpOworCWlmIChjYXJkLT5vcHRpb25zLmxheWVyMikKKwkJUUVUSF9EQkZfSEVYKHRyYWNlLCA0LCAmYWRkci0+bWFjLCA2KTsKKwllbHNlIGlmIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNCkKKwkJUUVUSF9EQkZfSEVYKHRyYWNlLCA0LCAmYWRkci0+dS5hNC5hZGRyLCA0KTsKIAllbHNlIHsKLQkJUUVUSF9EQkZfSEVYKHRyYWNlLDQsJmFkZHItPnUuYTYuYWRkciw4KTsKLQkJUUVUSF9EQkZfSEVYKHRyYWNlLDQsKChjaGFyICopJmFkZHItPnUuYTYuYWRkcikrOCw4KTsKKwkJUUVUSF9EQkZfSEVYKHRyYWNlLCA0LCAmYWRkci0+dS5hNi5hZGRyLCA4KTsKKwkJUUVUSF9EQkZfSEVYKHRyYWNlLCA0LCAoKGNoYXIgKikmYWRkci0+dS5hNi5hZGRyKSArIDgsIDgpOwogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOwogCXJjID0gX19xZXRoX2luc2VydF9pcF90b2RvKGNhcmQsIGFkZHIsIDEpOwpAQCAtNzc1LDcgKzgwMiw3IEBACiB7CiAJc3RydWN0IHFldGhfaXBhZGRyICphZGRyLCAqdG1wOwogCWludCByYzsKLQorYWdhaW46CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGFkZHIsIHRtcCwgJmNhcmQtPmlwX2xpc3QsIGVudHJ5KSB7CiAJCWlmIChhZGRyLT5pc19tdWx0aWNhc3QpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmlwX2xvY2ssICpmbGFncyk7CkBAIC03ODQsNiArODExLDcgQEAKIAkJCWlmICghcmMpIHsKIAkJCQlsaXN0X2RlbCgmYWRkci0+ZW50cnkpOwogCQkJCWtmcmVlKGFkZHIpOworCQkJCWdvdG8gYWdhaW47CiAJCQl9CiAJCX0KIAl9CkBAIC04NTEsNiArODc5LDcgQEAKIAogc3RhdGljIHZvaWQgcWV0aF9kZWxldGVfbWNfYWRkcmVzc2VzKHN0cnVjdCBxZXRoX2NhcmQgKik7CiBzdGF0aWMgdm9pZCBxZXRoX2FkZF9tdWx0aWNhc3RfaXB2NChzdHJ1Y3QgcWV0aF9jYXJkICopOworc3RhdGljIHZvaWQgcWV0aF9sYXllcjJfYWRkX211bHRpY2FzdChzdHJ1Y3QgcWV0aF9jYXJkICopOwogI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKIHN0YXRpYyB2b2lkIHFldGhfYWRkX211bHRpY2FzdF9pcHY2KHN0cnVjdCBxZXRoX2NhcmQgKik7CiAjZW5kaWYKQEAgLTkzOSw2ICs5NjgsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIERyaXZlIHRoZSBTRVRfUFJPTUlTQ19NT0RFIHRocmVhZAorICovCitzdGF0aWMgaW50CitxZXRoX3NldF9wcm9taXNjX21vZGUodm9pZCAqcHRyKQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSAoc3RydWN0IHFldGhfY2FyZCAqKSBwdHI7CisKKwlkYWVtb25pemUoInFldGhfc2V0cHJtIik7CisJUUVUSF9EQkZfVEVYVCh0cmFjZSw0LCJzZXRwcm0xIik7CisJaWYgKCFxZXRoX2RvX3J1bl90aHJlYWQoY2FyZCwgUUVUSF9TRVRfUFJPTUlTQ19NT0RFX1RIUkVBRCkpCisJCXJldHVybiAwOworCVFFVEhfREJGX1RFWFQodHJhY2UsNCwic2V0cHJtMiIpOworCXFldGhfc2V0YWRwX3Byb21pc2NfbW9kZShjYXJkKTsKKwlxZXRoX2NsZWFyX3RocmVhZF9ydW5uaW5nX2JpdChjYXJkLCBRRVRIX1NFVF9QUk9NSVNDX01PREVfVEhSRUFEKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludAogcWV0aF9yZWNvdmVyKHZvaWQgKnB0cikKIHsKQEAgLTEwMDUsNiArMTA1Miw4IEBACiAKIAlpZiAocWV0aF9kb19zdGFydF90aHJlYWQoY2FyZCwgUUVUSF9TRVRfSVBfVEhSRUFEKSkKIAkJa2VybmVsX3RocmVhZChxZXRoX3JlZ2lzdGVyX2lwX2FkZHJlc3NlcywgKHZvaWQgKiljYXJkLFNJR0NITEQpOworCWlmIChxZXRoX2RvX3N0YXJ0X3RocmVhZChjYXJkLCBRRVRIX1NFVF9QUk9NSVNDX01PREVfVEhSRUFEKSkKKwkJa2VybmVsX3RocmVhZChxZXRoX3NldF9wcm9taXNjX21vZGUsICh2b2lkICopY2FyZCwgU0lHQ0hMRCk7CiAJaWYgKHFldGhfZG9fc3RhcnRfdGhyZWFkKGNhcmQsIFFFVEhfUkVDT1ZFUl9USFJFQUQpKQogCQlrZXJuZWxfdGhyZWFkKHFldGhfcmVjb3ZlciwgKHZvaWQgKikgY2FyZCwgU0lHQ0hMRCk7CiB9CkBAIC0zNzQ5LDcgKzM3OTgsNyBAQAogCiAJaWYgKCAoY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX09TTikgJiYKIAkgICAgIChjYXJkLT5vcHRpb25zLmxheWVyMikgJiYKLQkgICAgICghY2FyZC0+aW5mby5sYXllcjJfbWFjX3JlZ2lzdGVyZWQpKSB7CisJICAgICAoIShjYXJkLT5pbmZvLm1hY19iaXRzICYgUUVUSF9MQVlFUjJfTUFDX1JFR0lTVEVSRUQpKSkgewogCQlRRVRIX0RCRl9URVhUKHRyYWNlLDQsIm5vbWFjYWRyIik7CiAJCXJldHVybiAtRVBFUk07CiAJfQpAQCAtNDMxMSw2ICs0MzYwLDggQEAKIG91dDoKIAlpZiAoZmx1c2hfY291bnQpCiAJCXFldGhfZmx1c2hfYnVmZmVycyhxdWV1ZSwgMCwgc3RhcnRfaW5kZXgsIGZsdXNoX2NvdW50KTsKKwllbHNlIGlmICghYXRvbWljX3JlYWQoJnF1ZXVlLT5zZXRfcGNpX2ZsYWdzX2NvdW50KSkKKwkJYXRvbWljX3N3YXAoJnF1ZXVlLT5zdGF0ZSwgUUVUSF9PVVRfUV9MT0NLRURfRkxVU0gpOwogCS8qCiAJICogcXVldWUtPnN0YXRlIHdpbGwgZ28gZnJvbSBMT0NLRUQgLT4gVU5MT0NLRUQgb3IgZnJvbQogCSAqIExPQ0tFRF9GTFVTSCAtPiBMT0NLRUQgaWYgb3V0cHV0X2hhbmRsZXIgd2FudGVkIHRvICdub3RpZnknIHVzCkBAIC00OTc1LDYgKzUwMjYsMTAgQEAKIAkJCSAgICB1bnNpZ25lZCBsb25nKTsKIAogc3RhdGljIGludAorcWV0aF9kZWZhdWx0X3NldGFkYXB0ZXJwYXJtc19jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcWV0aF9yZXBseSAqcmVwbHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgaW50CiBxZXRoX3NlbmRfc2V0YXNzcGFybXMoc3RydWN0IHFldGhfY2FyZCAqLCBzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICosCiAJCSAgICAgIF9fdTE2LCBsb25nLAogCQkgICAgICBpbnQgKCpyZXBseV9jYikKQEAgLTUzMDEsOCArNTM1Niw3IEBACiAJc3RydWN0IHFldGhfaXBhZGRyICphZGRyOwogCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNCwgImZydmFkZHI0Iik7Ci0JaWYgKCFjYXJkLT52bGFuZ3JwKQotCQlyZXR1cm47CisKIAlyY3VfcmVhZF9sb2NrKCk7CiAJaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShjYXJkLT52bGFuZ3JwLT52bGFuX2RldmljZXNbdmlkXSk7CiAJaWYgKCFpbl9kZXYpCkBAIC01MzMwLDggKzUzODQsNyBAQAogCXN0cnVjdCBxZXRoX2lwYWRkciAqYWRkcjsKIAogCVFFVEhfREJGX1RFWFQodHJhY2UsIDQsICJmcnZhZGRyNiIpOwotCWlmICghY2FyZC0+dmxhbmdycCkKLQkJcmV0dXJuOworCiAJaW42X2RldiA9IGluNl9kZXZfZ2V0KGNhcmQtPnZsYW5ncnAtPnZsYW5fZGV2aWNlc1t2aWRdKTsKIAlpZiAoIWluNl9kZXYpCiAJCXJldHVybjsKQEAgLTUzNTEsMTAgKzU0MDQsMzggQEAKIH0KIAogc3RhdGljIHZvaWQKK3FldGhfZnJlZV92bGFuX2FkZHJlc3NlcyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCB1bnNpZ25lZCBzaG9ydCB2aWQpCit7CisJaWYgKGNhcmQtPm9wdGlvbnMubGF5ZXIyIHx8ICFjYXJkLT52bGFuZ3JwKQorCQlyZXR1cm47CisJcWV0aF9mcmVlX3ZsYW5fYWRkcmVzc2VzNChjYXJkLCB2aWQpOworCXFldGhfZnJlZV92bGFuX2FkZHJlc3NlczYoY2FyZCwgdmlkKTsKK30KKworc3RhdGljIGludAorcWV0aF9sYXllcjJfc2VuZF9zZXRkZWx2bGFuX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKyAgICAgICAgc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOworCisgICAgICAgIFFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJMMnNkdmNiIik7CisgICAgICAgIGNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7CisgICAgICAgIGlmIChjbWQtPmhkci5yZXR1cm5fY29kZSkgeworCQlQUklOVF9FUlIoIkVycm9yIGluIHByb2Nlc3NpbmcgVkxBTiAlaSBvbiAlczogMHgleC4gIgorCQkJICAiQ29udGludWluZ1xuIixjbWQtPmRhdGEuc2V0ZGVsdmxhbi52bGFuX2lkLCAKKwkJCSAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwgY21kLT5oZHIucmV0dXJuX2NvZGUpOworCQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgMiwgIkwyVkwlNHgiLCBjbWQtPmhkci5jb21tYW5kKTsKKwkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDIsICJMMiVzIiwgQ0FSRF9CVVNfSUQoY2FyZCkpOworCQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgMiwgImVyciVkIiwgY21kLT5oZHIucmV0dXJuX2NvZGUpOworCX0KKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKIHFldGhfbGF5ZXIyX3NlbmRfc2V0ZGVsdmxhbihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBfX3UxNiBpLAogCQkJICAgIGVudW0gcWV0aF9pcGFfY21kcyBpcGFjbWQpCiB7Ci0gCWludCByYzsKIAlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CiAJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwogCkBAIC01MzYyLDE1ICs1NDQzLDggQEAKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIGlwYWNtZCwgUUVUSF9QUk9UX0lQVjQpOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKICAgICAgICAgY21kLT5kYXRhLnNldGRlbHZsYW4udmxhbl9pZCA9IGk7Ci0KLQlyYyA9IHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgTlVMTCwgTlVMTCk7Ci0gICAgICAgIGlmIChyYykgewotICAgICAgICAgICAgICAgIFBSSU5UX0VSUigiRXJyb3IgaW4gcHJvY2Vzc2luZyBWTEFOICVpIG9uICVzOiAweCV4LiAiCi0JCQkgICJDb250aW51aW5nXG4iLGksIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksIHJjKTsKLQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDIsICJMMlZMJTR4IiwgaXBhY21kKTsKLQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDIsICJMMiVzIiwgQ0FSRF9CVVNfSUQoY2FyZCkpOwotCQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgMiwgImVyciVkIiwgcmMpOwotICAgICAgICB9CisJcmV0dXJuIHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgCisJCQkJIHFldGhfbGF5ZXIyX3NlbmRfc2V0ZGVsdmxhbl9jYiwgTlVMTCk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC01NDIwLDggKzU0OTQsNyBAQAogCXFldGhfZnJlZV92bGFuX3NrYnMoY2FyZCwgdmlkKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+dmxhbmxvY2ssIGZsYWdzKTsKIAkvKiB1bnJlZ2lzdGVyIElQIGFkZHJlc3NlcyBvZiB2bGFuIGRldmljZSAqLwotCXFldGhfZnJlZV92bGFuX2FkZHJlc3NlczQoY2FyZCwgdmlkKTsKLQlxZXRoX2ZyZWVfdmxhbl9hZGRyZXNzZXM2KGNhcmQsIHZpZCk7CisJcWV0aF9mcmVlX3ZsYW5fYWRkcmVzc2VzKGNhcmQsIHZpZCk7CiAJaWYgKGNhcmQtPnZsYW5ncnApCiAJCWNhcmQtPnZsYW5ncnAtPnZsYW5fZGV2aWNlc1t2aWRdID0gTlVMTDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT52bGFubG9jaywgZmxhZ3MpOwpAQCAtNTQzMCw2ICs1NTAzLDU5IEBACiAJcWV0aF9zZXRfbXVsdGljYXN0X2xpc3QoY2FyZC0+ZGV2KTsKIH0KICNlbmRpZgorLyoqCisgKiBFeGFtaW5lIGhhcmR3YXJlIHJlc3BvbnNlIHRvIFNFVF9QUk9NSVNDX01PREUKKyAqLworc3RhdGljIGludAorcWV0aF9zZXRhZHBfcHJvbWlzY19tb2RlX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIAorCQkJICAgIHN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOworCXN0cnVjdCBxZXRoX2lwYWNtZF9zZXRhZHBwYXJtcyAqc2V0cGFybXM7CisKKwlRRVRIX0RCRl9URVhUKHRyYWNlLDQsInBybWFkcGNiIik7CisKKwljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBkYXRhOworCXNldHBhcm1zID0gJihjbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zKTsKKwkKKyAgICAgICAgcWV0aF9kZWZhdWx0X3NldGFkYXB0ZXJwYXJtc19jYihjYXJkLCByZXBseSwgKHVuc2lnbmVkIGxvbmcpY21kKTsKKwlpZiAoY21kLT5oZHIucmV0dXJuX2NvZGUpIHsgCisJCVFFVEhfREJGX1RFWFRfKHRyYWNlLDQsInBybXJjJTIuMngiLGNtZC0+aGRyLnJldHVybl9jb2RlKTsJCisJCXNldHBhcm1zLT5kYXRhLm1vZGUgPSBTRVRfUFJPTUlTQ19NT0RFX09GRjsKKwl9CisJY2FyZC0+aW5mby5wcm9taXNjX21vZGUgPSBzZXRwYXJtcy0+ZGF0YS5tb2RlOworCXJldHVybiAwOworfQorLyoKKyAqIFNldCBwcm9taXNjdW91cyBtb2RlIChvbiBvciBvZmYpIChTRVRfUFJPTUlTQ19NT0RFIGNvbW1hbmQpCisgKi8KK3N0YXRpYyB2b2lkCitxZXRoX3NldGFkcF9wcm9taXNjX21vZGUoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwllbnVtIHFldGhfaXBhX3Byb21pc2NfbW9kZXMgbW9kZTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2FyZC0+ZGV2OworCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKKwlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CisKKwlRRVRIX0RCRl9URVhUKHRyYWNlLCA0LCAic2V0cHJvbSIpOworCisJaWYgKCgoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSAmJgorCSAgICAgKGNhcmQtPmluZm8ucHJvbWlzY19tb2RlID09IFNFVF9QUk9NSVNDX01PREVfT04pKSB8fAorCSAgICAoIShkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpICYmCisJICAgICAoY2FyZC0+aW5mby5wcm9taXNjX21vZGUgPT0gU0VUX1BST01JU0NfTU9ERV9PRkYpKSkKKwkJcmV0dXJuOworCW1vZGUgPSBTRVRfUFJPTUlTQ19NT0RFX09GRjsKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQorCQltb2RlID0gU0VUX1BST01JU0NfTU9ERV9PTjsKKwlRRVRIX0RCRl9URVhUXyh0cmFjZSwgNCwgIm1vZGU6JXgiLCBtb2RlKTsKKworCWlvYiA9IHFldGhfZ2V0X2FkYXB0ZXJfY21kKGNhcmQsIElQQV9TRVRBRFBfU0VUX1BST01JU0NfTU9ERSwKKwkJCXNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YWRwcGFybXMpKTsKKwljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGEgKyBJUEFfUERVX0hFQURFUl9TSVpFKTsKKwljbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmRhdGEubW9kZSA9IG1vZGU7CisJcWV0aF9zZW5kX2lwYV9jbWQoY2FyZCwgaW9iLCBxZXRoX3NldGFkcF9wcm9taXNjX21vZGVfY2IsIE5VTEwpOworfQogCiAvKioKICAqIHNldCBtdWx0aWNhc3QgYWRkcmVzcyBvbiBjYXJkCkBAIC01NDQ0LDEyICs1NTcwLDIyIEBACiAJIAogCVFFVEhfREJGX1RFWFQodHJhY2UsMywic2V0bXVsdGkiKTsKIAlxZXRoX2RlbGV0ZV9tY19hZGRyZXNzZXMoY2FyZCk7CisJaWYgKGNhcmQtPm9wdGlvbnMubGF5ZXIyKSB7CisJCXFldGhfbGF5ZXIyX2FkZF9tdWx0aWNhc3QoY2FyZCk7CisJCWdvdG8gb3V0OworCX0KIAlxZXRoX2FkZF9tdWx0aWNhc3RfaXB2NChjYXJkKTsKICNpZmRlZiBDT05GSUdfUUVUSF9JUFY2CiAJcWV0aF9hZGRfbXVsdGljYXN0X2lwdjYoY2FyZCk7CiAjZW5kaWYKK291dDoKICAJaWYgKHFldGhfc2V0X3RocmVhZF9zdGFydF9iaXQoY2FyZCwgUUVUSF9TRVRfSVBfVEhSRUFEKSA9PSAwKQogCQlzY2hlZHVsZV93b3JrKCZjYXJkLT5rZXJuZWxfdGhyZWFkX3N0YXJ0ZXIpOworCWlmICghcWV0aF9hZHBfc3VwcG9ydGVkKGNhcmQsIElQQV9TRVRBRFBfU0VUX1BST01JU0NfTU9ERSkpCisJCXJldHVybjsKKwlpZiAocWV0aF9zZXRfdGhyZWFkX3N0YXJ0X2JpdChjYXJkLCBRRVRIX1NFVF9QUk9NSVNDX01PREVfVEhSRUFEKT09MCkKKwkJc2NoZWR1bGVfd29yaygmY2FyZC0+a2VybmVsX3RocmVhZF9zdGFydGVyKTsKKwogfQogCiBzdGF0aWMgaW50CkBAIC01NjU3LDYgKzU3OTMsMjQgQEAKIAlpbl9kZXZfcHV0KGluNF9kZXYpOwogfQogCitzdGF0aWMgdm9pZAorcWV0aF9sYXllcjJfYWRkX211bHRpY2FzdChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBxZXRoX2lwYWRkciAqaXBtOworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG07CisKKwlRRVRIX0RCRl9URVhUKHRyYWNlLDQsIkwyYWRkbWMiKTsKKwlmb3IgKGRtID0gY2FyZC0+ZGV2LT5tY19saXN0OyBkbTsgZG0gPSBkbS0+bmV4dCkgeworCQlpcG0gPSBxZXRoX2dldF9hZGRyX2J1ZmZlcihRRVRIX1BST1RfSVBWNCk7CisJCWlmICghaXBtKQorCQkJY29udGludWU7CisJCW1lbWNweShpcG0tPm1hYyxkbS0+ZG1pX2FkZHIsTUFYX0FERFJfTEVOKTsKKwkJaXBtLT5pc19tdWx0aWNhc3QgPSAxOworCQlpZiAoIXFldGhfYWRkX2lwKGNhcmQsIGlwbSkpCisJCQlrZnJlZShpcG0pOworCX0KK30KKwogI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKIHN0YXRpYyBpbmxpbmUgdm9pZAogcWV0aF9hZGRfbWM2KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBpbmV0Nl9kZXYgKmluNl9kZXYpCkBAIC01ODI1LDEwICs1OTc5LDEwIEBACiAJCVBSSU5UX1dBUk4oIkVycm9yIGluIHJlZ2lzdGVyaW5nIE1BQyBhZGRyZXNzIG9uICIgXAogCQkJICAgImRldmljZSAlczogeCV4XG4iLCBDQVJEX0JVU19JRChjYXJkKSwKIAkJCSAgIGNtZC0+aGRyLnJldHVybl9jb2RlKTsKLQkJY2FyZC0+aW5mby5sYXllcjJfbWFjX3JlZ2lzdGVyZWQgPSAwOworCQljYXJkLT5pbmZvLm1hY19iaXRzICY9IH5RRVRIX0xBWUVSMl9NQUNfUkVHSVNURVJFRDsKIAkJY21kLT5oZHIucmV0dXJuX2NvZGUgPSAtRUlPOwogCX0gZWxzZSB7Ci0JCWNhcmQtPmluZm8ubGF5ZXIyX21hY19yZWdpc3RlcmVkID0gMTsKKwkJY2FyZC0+aW5mby5tYWNfYml0cyB8PSBRRVRIX0xBWUVSMl9NQUNfUkVHSVNURVJFRDsKIAkJbWVtY3B5KGNhcmQtPmRldi0+ZGV2X2FkZHIsY21kLT5kYXRhLnNldGRlbG1hYy5tYWMsCiAJCSAgICAgICBPU0FfQUREUl9MRU4pOwogCQlQUklOVF9JTkZPKCJNQUMgYWRkcmVzcyAlMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeCAiCkBAIC01ODY2LDcgKzYwMjAsNyBAQAogCQljbWQtPmhkci5yZXR1cm5fY29kZSA9IC1FSU87CiAJCXJldHVybiAwOwogCX0KLQljYXJkLT5pbmZvLmxheWVyMl9tYWNfcmVnaXN0ZXJlZCA9IDA7CisJY2FyZC0+aW5mby5tYWNfYml0cyAmPSB+UUVUSF9MQVlFUjJfTUFDX1JFR0lTVEVSRUQ7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU4NzQsNyArNjAyOCw3IEBACiBxZXRoX2xheWVyMl9zZW5kX2RlbG1hYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBfX3U4ICptYWMpCiB7CiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwgMiwgIkwyRGVsbWFjIik7Ci0JaWYgKCFjYXJkLT5pbmZvLmxheWVyMl9tYWNfcmVnaXN0ZXJlZCkKKwlpZiAoIShjYXJkLT5pbmZvLm1hY19iaXRzICYgUUVUSF9MQVlFUjJfTUFDX1JFR0lTVEVSRUQpKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gcWV0aF9sYXllcjJfc2VuZF9zZXRkZWxtYWMoY2FyZCwgbWFjLCBJUEFfQ01EX0RFTFZNQUMsCiAJCQkJCSAgcWV0aF9sYXllcjJfc2VuZF9kZWxtYWNfY2IpOwpAQCAtNTg5Niw3ICs2MDUwLDcgQEAKIAljYXJkID0gKHN0cnVjdCBxZXRoX2NhcmQgKikgZGV2LT5wcml2OwogCiAJaWYgKCFjYXJkLT5vcHRpb25zLmxheWVyMikgewotCQlQUklOVF9XQVJOKCJTZXR0aW5nIE1BQyBhZGRyZXNzIG9uICVzIGlzIG5vdCBzdXBwb3J0ZWQiCisJCVBSSU5UX1dBUk4oIlNldHRpbmcgTUFDIGFkZHJlc3Mgb24gJXMgaXMgbm90IHN1cHBvcnRlZCAiCiAJCQkgICAiaW4gTGF5ZXIgMyBtb2RlLlxuIiwgZGV2LT5uYW1lKTsKIAkJUUVUSF9EQkZfVEVYVCh0cmFjZSwgMywgInNldG1jTFkzIik7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTY0NDEsNiArNjU5NSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKKworCiBzdGF0aWMgaW50CiBxZXRoX3F1ZXJ5X3NldGFkYXB0ZXJwYXJtc19jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9yZXBseSAqcmVwbHksCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGRhdGEpCkBAIC02NDgxLDggKzY2MzcsMTMgQEAKIAlRRVRIX0RCRl9URVhUKHRyYWNlLDQsImNoZ21hY2NiIik7CiAKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBkYXRhOwotCW1lbWNweShjYXJkLT5kZXYtPmRldl9hZGRyLAotCSAgICAgICAmY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5kYXRhLmNoYW5nZV9hZGRyLmFkZHIsT1NBX0FERFJfTEVOKTsKKwlpZiAoIWNhcmQtPm9wdGlvbnMubGF5ZXIyIHx8IGNhcmQtPmluZm8uZ3Vlc3RsYW4gfHwKKwkgICAgIShjYXJkLT5pbmZvLm1hY19iaXRzICYgUUVUSF9MQVlFUjJfTUFDX1JFQUQpKSB7CQorCQltZW1jcHkoY2FyZC0+ZGV2LT5kZXZfYWRkciwKKwkJICAgICAgICZjbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmRhdGEuY2hhbmdlX2FkZHIuYWRkciwKKwkJICAgICAgIE9TQV9BRERSX0xFTik7CisJCWNhcmQtPmluZm8ubWFjX2JpdHMgfD0gUUVUSF9MQVlFUjJfTUFDX1JFQUQ7CisJfQogCXFldGhfZGVmYXVsdF9zZXRhZGFwdGVycGFybXNfY2IoY2FyZCwgcmVwbHksICh1bnNpZ25lZCBsb25nKSBjbWQpOwogCXJldHVybiAwOwogfQpAQCAtNjYwMiw2ICs2NzYzLDEyIEBACiAgICAgICAgIFFFVEhfREJGX1RFWFQoc2V0dXAsIDIsICJkb0wyaW5pdCIpOwogICAgICAgICBRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwgImRvTDIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKIAorCXJjID0gcWV0aF9xdWVyeV9zZXRhZGFwdGVycGFybXMoY2FyZCk7CisJaWYgKHJjKSB7CisJCVBSSU5UX1dBUk4oImNvdWxkIG5vdCBxdWVyeSBhZGFwdGVyIHBhcmFtZXRlcnMgb24gZGV2aWNlICVzOiAiCisJCQkgICAieCV4XG4iLCBDQVJEX0JVU19JRChjYXJkKSwgcmMpOworCX0KKwogCXJjID0gcWV0aF9zZXRhZHBwYXJtc19jaGFuZ2VfbWFjYWRkcihjYXJkKTsKIAlpZiAocmMpIHsKIAkJUFJJTlRfV0FSTigiY291bGRuJ3QgZ2V0IE1BQyBhZGRyZXNzIG9uICIKQEAgLTg1NDgsNyArODcxNSw3IEBACiBFWFBPUlRfU1lNQk9MKHFldGhfb3NuX2Fzc2lzdCk7CiBtb2R1bGVfaW5pdChxZXRoX2luaXQpOwogbW9kdWxlX2V4aXQocWV0aF9leGl0KTsKLU1PRFVMRV9BVVRIT1IoIkZyYW5rIFBhdmxpYyA8cGF2bGljQGRlLmlibS5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJGcmFuayBQYXZsaWMgPGZwYXZsaWNAZGUuaWJtLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTGludXggb24gelNlcmllcyBPU0EgRXhwcmVzcyBhbmQgSGlwZXJTb2NrZXRzIHN1cHBvcnRcbiIgXAogCQkgICAgICAgICAgICAgICAgICAgICAgIkNvcHlyaWdodCAyMDAwLDIwMDMgSUJNIENvcnBvcmF0aW9uXG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX21wYy5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX21wYy5jCmluZGV4IDMwZTA1M2QuLmYwYTA4MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tcGMuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbXBjLmMKQEAgLTQsNyArNCw3IEBACiAgKiBMaW51eCBvbiB6U2VyaWVzIE9TQSBFeHByZXNzIGFuZCBIaXBlclNvY2tldHMgc3VwcG9ydAogICoKICAqIENvcHlyaWdodCAyMDAwLDIwMDMgSUJNIENvcnBvcmF0aW9uCi0gKiBBdXRob3Iocyk6IEZyYW5rIFBhdmxpYyA8cGF2bGljQGRlLmlibS5jb20+CisgKiBBdXRob3Iocyk6IEZyYW5rIFBhdmxpYyA8ZnBhdmxpY0BkZS5pYm0uY29tPgogICogCSAgICAgIFRob21hcyBTcGF0emllciA8dHNwYXRAZGUuaWJtLmNvbT4KICAqCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tcGMuaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tcGMuaAppbmRleCA3ZWRjNWYxLi41ZjcxNDg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbXBjLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX21wYy5oCkBAIC02LDcgKzYsNyBAQAogICogQ29weXJpZ2h0IDIwMDAsMjAwMyBJQk0gQ29ycG9yYXRpb24KICAqIEF1dGhvcihzKTogVXR6IEJhY2hlciA8dXR6LmJhY2hlckBkZS5pYm0uY29tPgogICogICAgICAgICAgICBUaG9tYXMgU3BhdHppZXIgPHRzcGF0QGRlLmlibS5jb20+Ci0gKiAgICAgICAgICAgIEZyYW5rIFBhdmxpYyA8cGF2bGljQGRlLmlibS5jb20+CisgKiAgICAgICAgICAgIEZyYW5rIFBhdmxpYyA8ZnBhdmxpY0BkZS5pYm0uY29tPgogICoKICAqLwogI2lmbmRlZiBfX1FFVEhfTVBDX0hfXwpAQCAtMTQsNyArMTQsNyBAQAogCiAjaW5jbHVkZSA8YXNtL3FldGguaD4KIAotI2RlZmluZSBWRVJTSU9OX1FFVEhfTVBDX0ggIiRSZXZpc2lvbjogMS40MyAkIgorI2RlZmluZSBWRVJTSU9OX1FFVEhfTVBDX0ggIiRSZXZpc2lvbjogMS40NCAkIgogCiBleHRlcm4gY29uc3QgY2hhciAqVkVSU0lPTl9RRVRIX01QQ19DOwogCkBAIC0yMTcsNyArMjE3LDcgQEAKIAlJUEFfU0VUQURQX1NFTkRfT1NBX01FU1NBR0UgCQk9IDB4MDEwMCwKIAlJUEFfU0VUQURQX1NFVF9TTk1QX0NPTlRST0wgCQk9IDB4MDIwMCwKIAlJUEFfU0VUQURQX1JFQURfU05NUF9QQVJNUyAJCT0gMHgwNDAwLAotCUlQQV9TRVRBRFBfV1JJVEVfU05NUF9QQVJNUyAJCT0gMHgwODAwLAorCUlQQV9TRVRBRFBfU0VUX1BST01JU0NfTU9ERQkJPSAweDA4MDAsCiAJSVBBX1NFVEFEUF9RVUVSWV9DQVJEX0lORk8gCQk9IDB4MTAwMCwKIH07CiBlbnVtIHFldGhfaXBhX21hY19vcHMgewpAQCAtMjMyLDkgKzIzMiwxMiBAQAogCUNIQU5HRV9BRERSX0FERF9BRERSIAkJPSAxLAogCUNIQU5HRV9BRERSX0RFTF9BRERSIAkJPSAyLAogCUNIQU5HRV9BRERSX0ZMVVNIX0FERFJfVEFCTEUgCT0gNCwKLQotCiB9OworZW51bSBxZXRoX2lwYV9wcm9taXNjX21vZGVzIHsKKwlTRVRfUFJPTUlTQ19NT0RFX09GRgkJPSAwLAorCVNFVF9QUk9NSVNDX01PREVfT04JCT0gMSwKK307CisKIC8qIChTRVQpREVMSVAoTSkgSVBBIHN0dWZmICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0cnVjdCBxZXRoX2lwYWNtZF9zZXRkZWxpcDQgewogCV9fdTggICBpcF9hZGRyWzRdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX3N5cy5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX3N5cy5jCmluZGV4IGY5MWEwMmQuLmRkZDYwMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9zeXMuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfc3lzLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICoKLSAqIGxpbnV4L2RyaXZlcnMvczM5MC9uZXQvcWV0aF9zeXMuYyAoJFJldmlzaW9uOiAxLjU1ICQpCisgKiBsaW51eC9kcml2ZXJzL3MzOTAvbmV0L3FldGhfc3lzLmMgKCRSZXZpc2lvbjogMS41OCAkKQogICoKICAqIExpbnV4IG9uIHpTZXJpZXMgT1NBIEV4cHJlc3MgYW5kIEhpcGVyU29ja2V0cyBzdXBwb3J0CiAgKiBUaGlzIGZpbGUgY29udGFpbnMgY29kZSByZWxhdGVkIHRvIHN5c2ZzLgpAQCAtOCw3ICs4LDcgQEAKICAqIENvcHlyaWdodCAyMDAwLDIwMDMgSUJNIENvcnBvcmF0aW9uCiAgKgogICogQXV0aG9yKHMpOiBUaG9tYXMgU3BhdHppZXIgPHRzcGF0QGRlLmlibS5jb20+Ci0gKiAJICAgICAgRnJhbmsgUGF2bGljIDxwYXZsaWNAZGUuaWJtLmNvbT4KKyAqIAkgICAgICBGcmFuayBQYXZsaWMgPGZwYXZsaWNAZGUuaWJtLmNvbT4KICAqCiAgKi8KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAicWV0aF9tcGMuaCIKICNpbmNsdWRlICJxZXRoX2ZzLmgiCiAKLWNvbnN0IGNoYXIgKlZFUlNJT05fUUVUSF9TWVNfQyA9ICIkUmV2aXNpb246IDEuNTUgJCI7Citjb25zdCBjaGFyICpWRVJTSU9OX1FFVEhfU1lTX0MgPSAiJFJldmlzaW9uOiAxLjU4ICQiOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMTE3LDcgKzExMTcsNyBAQAogCXN0YXJ0ID0gYnVmOwogCS8qIGdldCBhZGRyZXNzIHN0cmluZyAqLwogCWVuZCA9IHN0cmNocihzdGFydCwgJy8nKTsKLQlpZiAoIWVuZCl7CisJaWYgKCFlbmQgfHwgKGVuZC1zdGFydCA+PSA0OSkpewogCQlQUklOVF9XQVJOKCJJbnZhbGlkIGZvcm1hdCBmb3IgaXBhdG9fYWRkeC9kZWx4LiAiCiAJCQkgICAiVXNlIDxpcCBhZGRyPi88bWFzayBiaXRzPlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX3Rzby5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX3Rzby5oCmluZGV4IGFkMzNlNmYuLmUyNDVhZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF90c28uaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfdHNvLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDQgSUJNIENvcnBvcmF0aW9uCiAgKgotICogICAgQXV0aG9yKHMpOiBGcmFuayBQYXZsaWMgPHBhdmxpY0BkZS5pYm0uY29tPgorICogICAgQXV0aG9yKHMpOiBGcmFuayBQYXZsaWMgPGZwYXZsaWNAZGUuaWJtLmNvbT4KICAqCiAgKiAgICAkUmV2aXNpb246IDEuNyAkCSAkRGF0ZTogMjAwNS8wNS8wNCAyMDoxOToxOCAkCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zYnVzL2NoYXIvZGlzcGxheTdzZWcuYyBiL2RyaXZlcnMvc2J1cy9jaGFyL2Rpc3BsYXk3c2VnLmMKaW5kZXggMmM4NmE0Yi4uYzNhNTFkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvZGlzcGxheTdzZWcuYworKysgYi9kcml2ZXJzL3NidXMvY2hhci9kaXNwbGF5N3NlZy5jCkBAIC0xMTksNyArMTE5LDcgQEAKIHsKIAlfX3U4IHJlZ3MgPSByZWFkYihkN3NfcmVncyk7CiAJX191OCBpcmVnID0gMDsKLQlpbnQgZXJyb3IgPSAwCisJaW50IGVycm9yID0gMDsKIAogCWlmIChEN1NfTUlOT1IgIT0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKSkKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWhjaS5jIGIvZHJpdmVycy9zY3NpL2FoY2kuYwppbmRleCAxMGM0NzBlLi41N2VmN2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWhjaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haGNpLmMKQEAgLTI1NSw3ICsyNTUsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWhjaV9wY2lfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWhjaV9wY2lfdGJsW10gPSB7CiAJeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI2NTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCiAJICBib2FyZF9haGNpIH0sIC8qIElDSDYgKi8KIAl7IFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY1MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hdGFfcGlpeC5jIGIvZHJpdmVycy9zY3NpL2F0YV9waWl4LmMKaW5kZXggYTFiZDhkOS4uODU1NDI4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2F0YV9waWl4LmMKKysrIGIvZHJpdmVycy9zY3NpL2F0YV9waWl4LmMKQEAgLTk1LDcgKzk1LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBpbl9tb2R1bGVfaW5pdCA9IDE7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwaWl4X3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwaWl4X3BjaV90YmxbXSA9IHsKICNpZmRlZiBBVEFfRU5BQkxFX1BBVEEKIAl7IDB4ODA4NiwgMHg3MTExLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBwaWl4NF9wYXRhIH0sCiAJeyAweDgwODYsIDB4MjRkYiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoNV9wYXRhIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCmluZGV4IGE3NGI0MDcuLmU1MWQ5YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCkBAIC00NTYzLDYgKzQ1NjMsNyBAQAogCiAJcHJvYmVfZW50LT5pcnEgPSBwZGV2LT5pcnE7CiAJcHJvYmVfZW50LT5pcnFfZmxhZ3MgPSBTQV9TSElSUTsKKwlwcm9iZV9lbnQtPnByaXZhdGVfZGF0YSA9IHBvcnRbMF0tPnByaXZhdGVfZGF0YTsKIAogCWlmIChwb3J0cyAmIEFUQV9QT1JUX1BSSU1BUlkpIHsKIAkJcHJvYmVfZW50LT5wb3J0W3BdLmNtZF9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwpAQCAtNDU5OSw2ICs0NjAwLDcgQEAKIAlwcm9iZV9lbnQtPmxlZ2FjeV9tb2RlID0gMTsKIAlwcm9iZV9lbnQtPm5fcG9ydHMgPSAxOwogCXByb2JlX2VudC0+aGFyZF9wb3J0X25vID0gcG9ydF9udW07CisJcHJvYmVfZW50LT5wcml2YXRlX2RhdGEgPSBwb3J0LT5wcml2YXRlX2RhdGE7CiAKIAlzd2l0Y2gocG9ydF9udW0pCiAJewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmF0YS1zY3NpLmMgYi9kcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYwppbmRleCBiYjMwZmNkLi43ZTM3ZjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYwpAQCAtMTEyOSw2ICsxMTI5LDggQEAKIAkJICogbGVuZ3RoIDAgbWVhbnMgdHJhbnNmZXIgMCBibG9jayBvZiBkYXRhLgogCQkgKiBIb3dldmVyLCBmb3IgQVRBIFIvVyBjb21tYW5kcywgc2VjdG9yIGNvdW50IDAgbWVhbnMKIAkJICogMjU2IG9yIDY1NTM2IHNlY3RvcnMsIG5vdCAwIHNlY3RvcnMgYXMgaW4gU0NTSS4KKwkJICoKKwkJICogV0FSTklORzogb25lIG9yIHR3byBvbGRlciBBVEEgZHJpdmVzIHRyZWF0IDAgYXMgMC4uLgogCQkgKi8KIAkJZ290byBub3RoaW5nX3RvX2RvOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCmluZGV4IGM5MDcyMzguLjA3NDk4MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCkBAIC0xNzA0LDcgKzE3MDQsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbHBmY19kcml2ZXIgPSB7CiAJLm5hbWUJCT0gTFBGQ19EUklWRVJfTkFNRSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlCT0gbHBmY19pZF90YWJsZSwKIAkucHJvYmUJCT0gbHBmY19wY2lfcHJvYmVfb25lLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobHBmY19wY2lfcmVtb3ZlX29uZSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGRjX2FkbWEuYyBiL2RyaXZlcnMvc2NzaS9wZGNfYWRtYS5jCmluZGV4IDc4YjRmZjEuLmY1NTdmMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wZGNfYWRtYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9wZGNfYWRtYS5jCkBAIC0xOTAsNyArMTkwLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFkbWFfYXRhX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhZG1hX2F0YV9wY2lfdGJsW10gPSB7CiAJeyBQQ0lfVkVORE9SX0lEX1BEQywgMHgxODQxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAogCSAgYm9hcmRfMTg0MV9pZHggfSwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfbXYuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX212LmMKaW5kZXggOTNkNTUyMy4uMjU3YzEyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfbXYuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9tdi5jCkBAIC0zNDksNyArMzQ5LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG12X3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtdl9wY2lfdGJsW10gPSB7CiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDUwNDApLCAwLCAwLCBjaGlwXzUwNHh9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg1MDQxKSwgMCwgMCwgY2hpcF81MDR4fSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NTA4MCksIDAsIDAsIGNoaXBfNTA4eH0sCkBAIC0zNTksNiArMzU5LDggQEAKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NjA0MSksIDAsIDAsIGNoaXBfNjA0eH0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDYwODApLCAwLCAwLCBjaGlwXzYwOHh9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg2MDgxKSwgMCwgMCwgY2hpcF82MDh4fSwKKworCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQURBUFRFQzIsIDB4MDI0MSksIDAsIDAsIGNoaXBfNjA0eH0sCiAJe30JCQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfbnYuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX252LmMKaW5kZXggMzdhNGZhZS4uNDk1NDg5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfbnYuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9udi5jCkBAIC0xMzcsNyArMTM3LDcgQEAKIAlDSzgwNAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG52X3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBudl9wY2lfdGJsW10gPSB7CiAJeyBQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFMlNfU0FUQSwKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgTkZPUkNFMiB9LAogCXsgUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTNTX1NBVEEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9wcm9taXNlLmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9wcm9taXNlLmMKaW5kZXggOWVkYzlkOS4uMjQyZDkwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfcHJvbWlzZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3Byb21pc2UuYwpAQCAtMTkzLDcgKzE5Myw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwZGNfYXRhX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwZGNfYXRhX3BjaV90YmxbXSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfUFJPTUlTRSwgMHgzMzcxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAogCSAgYm9hcmRfMjAzN3ggfSwKIAl7IFBDSV9WRU5ET1JfSURfUFJPTUlTRSwgMHgzNTcwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfcXN0b3IuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3FzdG9yLmMKaW5kZXggZDI3NGFiMi4uYjJmNjMyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfcXN0b3IuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9xc3Rvci5jCkBAIC0xODQsNyArMTg0LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHFzX2F0YV9wY2lfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcXNfYXRhX3BjaV90YmxbXSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfUERDLCAweDIwNjgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCiAJICBib2FyZF8yMDY4X2lkeCB9LAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9zaWwuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3NpbC5jCmluZGV4IGQwZTNjM2MuLjM2MDkxODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3NpbC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3NpbC5jCkBAIC04Nyw3ICs4Nyw3IEBACiBzdGF0aWMgdm9pZCBzaWxfcG9zdF9zZXRfbW9kZSAoc3RydWN0IGF0YV9wb3J0ICphcCk7CiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNpbF9wY2lfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2lsX3BjaV90YmxbXSA9IHsKIAl7IDB4MTA5NSwgMHgzMTEyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBzaWxfMzExMl9tMTV3IH0sCiAJeyAweDEwOTUsIDB4MDI0MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgc2lsXzMxMTJfbTE1dyB9LAogCXsgMHgxMDk1LCAweDM1MTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHNpbF8zMTEyIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9zaWwyNC5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lsMjQuYwppbmRleCA0NjgyYTUwLi5kMzE5OGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9zaWwyNC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3NpbDI0LmMKQEAgLTI0MCw3ICsyNDAsNyBAQAogc3RhdGljIHZvaWQgc2lsMjRfaG9zdF9zdG9wKHN0cnVjdCBhdGFfaG9zdF9zZXQgKmhvc3Rfc2V0KTsKIHN0YXRpYyBpbnQgc2lsMjRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2lsMjRfcGNpX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNpbDI0X3BjaV90YmxbXSA9IHsKIAl7IDB4MTA5NSwgMHgzMTI0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBCSURfU0lMMzEyNCB9LAogCXsgMHgxMDk1LCAweDMxMzIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEJJRF9TSUwzMTMyIH0sCiAJeyAweDEwOTUsIDB4MzEzMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQklEX1NJTDMxMzEgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3Npcy5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lzLmMKaW5kZXggNDJkN2M0ZS4uMzJlMTI2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfc2lzLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lzLmMKQEAgLTY3LDcgKzY3LDcgQEAKIHN0YXRpYyB1MzIgc2lzX3Njcl9yZWFkIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnKTsKIHN0YXRpYyB2b2lkIHNpc19zY3Jfd3JpdGUgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcsIHUzMiB2YWwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2lzX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzaXNfcGNpX3RibFtdID0gewogCXsgUENJX1ZFTkRPUl9JRF9TSSwgMHgxODAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHNpc18xODAgfSwKIAl7IFBDSV9WRU5ET1JfSURfU0ksIDB4MTgxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBzaXNfMTgwIH0sCiAJeyBQQ0lfVkVORE9SX0lEX1NJLCAweDE4MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgc2lzXzE4MCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfc3Z3LmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9zdncuYwppbmRleCA5ODk1ZDFjLi41N2U1YTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9zdncuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9zdncuYwpAQCAtNDY2LDcgKzQ2Niw3IEBACiAgKiAweDI0YSBpcyBkZXZpY2UgSUQgZm9yIEJDTTU3ODUgKGFrYSBIVDEwMDApIEhUIHNvdXRoYnJpZGdlIGludGVncmF0ZWQgU0FUQQogICogY29udHJvbGxlcgogICogKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBrMl9zYXRhX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBrMl9zYXRhX3BjaV90YmxbXSA9IHsKIAl7IDB4MTE2NiwgMHgwMjQwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCA0IH0sCiAJeyAweDExNjYsIDB4MDI0MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgNCB9LAogCXsgMHgxMTY2LCAweDAyNDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDggfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3N4NC5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc3g0LmMKaW5kZXggZDVhMzg3OC4uYjRiYmU0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfc3g0LmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfc3g0LmMKQEAgLTIyOSw3ICsyMjksNyBAQAogCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGRjX3NhdGFfcGNpX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBkY19zYXRhX3BjaV90YmxbXSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfUFJPTUlTRSwgMHg2NjIyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAogCSAgYm9hcmRfMjA2MjEgfSwKIAl7IH0JLyogdGVybWluYXRlIGxpc3QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3VsaS5jIGIvZHJpdmVycy9zY3NpL3NhdGFfdWxpLmMKaW5kZXggY2YwYmFhYS4uYjI0MjJhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfdWxpLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfdWxpLmMKQEAgLTU1LDcgKzU1LDcgQEAKIHN0YXRpYyB1MzIgdWxpX3Njcl9yZWFkIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnKTsKIHN0YXRpYyB2b2lkIHVsaV9zY3Jfd3JpdGUgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcsIHUzMiB2YWwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdWxpX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB1bGlfcGNpX3RibFtdID0gewogCXsgUENJX1ZFTkRPUl9JRF9BTCwgMHg1Mjg5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCB1bGlfNTI4OSB9LAogCXsgUENJX1ZFTkRPUl9JRF9BTCwgMHg1Mjg3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCB1bGlfNTI4NyB9LAogCXsgUENJX1ZFTkRPUl9JRF9BTCwgMHg1MjgxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCB1bGlfNTI4MSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfdmlhLmMgYi9kcml2ZXJzL3Njc2kvc2F0YV92aWEuYwppbmRleCBhYjE5ZDJiLi5jNzYyMTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV92aWEuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV92aWEuYwpAQCAtNzUsNyArNzUsNyBAQAogc3RhdGljIHUzMiBzdmlhX3Njcl9yZWFkIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnKTsKIHN0YXRpYyB2b2lkIHN2aWFfc2NyX3dyaXRlIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnLCB1MzIgdmFsKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN2aWFfcGNpX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN2aWFfcGNpX3RibFtdID0gewogCXsgMHgxMTA2LCAweDMxNDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHZ0NjQyMCB9LAogCXsgMHgxMTA2LCAweDMyNDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHZ0NjQyMSB9LAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV92c2MuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3ZzYy5jCmluZGV4IGNlOGEyZmQuLjc3YTZlNGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV92c2MuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV92c2MuYwpAQCAtNDAwLDcgKzQwMCw3IEBACiAgKiAweDgwODYvMHgzMjAwIGlzIHRoZSBJbnRlbCAzMTI0NCwgd2hpY2ggaXMgc3VwcG9zZWQgdG8gYmUgaWRlbnRpY2FsCiAgKiBjb21wYXRpYmlsaXR5IGlzIHVudGVzdGVkIGFzIG9mIHlldAogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdnNjX3NhdGFfcGNpX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHZzY19zYXRhX3BjaV90YmxbXSA9IHsKIAl7IDB4MTcyNSwgMHg3MTc0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAweDEwNjAwLCAweEZGRkZGRiwgMCB9LAogCXsgMHg4MDg2LCAweDMyMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDB4MTA2MDAsIDB4RkZGRkZGLCAwIH0sCiAJeyB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKaW5kZXggOTg4MjA2MC4uMzc0Mjc1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwpAQCAtMjM4MSw5ICsyMzgxLDkgQEAKICAqIGxpc3QgaXMgdGVybWluYXRlZCB3aXRoIGEgemVybyBmbGFncyBlbnRyeSwgd2hpY2ggbWVhbnMgd2UgZXhwZWN0CiAgKiBhbGwgZW50cmllcyB0byBoYXZlIGF0IGxlYXN0IFVQRl9CT09UX0FVVE9DT05GIHNldC4KICAqLwotc3RhdGljIGludCBfX2RldmluaXQgc2VyaWFsODI1MF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzZXJpYWw4MjUwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgKnAgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0ICpwID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgdWFydF9wb3J0IHBvcnQ7CiAJaW50IHJldCwgaTsKIApAQCAtMjM5OSwxMiArMjM5OSwxMiBAQAogCQlwb3J0LmZsYWdzCT0gcC0+ZmxhZ3M7CiAJCXBvcnQubWFwYmFzZQk9IHAtPm1hcGJhc2U7CiAJCXBvcnQuaHViNgk9IHAtPmh1YjY7Ci0JCXBvcnQuZGV2CT0gZGV2OworCQlwb3J0LmRldgk9ICZkZXYtPmRldjsKIAkJaWYgKHNoYXJlX2lycXMpCiAJCQlwb3J0LmZsYWdzIHw9IFVQRl9TSEFSRV9JUlE7CiAJCXJldCA9IHNlcmlhbDgyNTBfcmVnaXN0ZXJfcG9ydCgmcG9ydCk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0byByZWdpc3RlciBwb3J0IGF0IGluZGV4ICVkICIKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAidW5hYmxlIHRvIHJlZ2lzdGVyIHBvcnQgYXQgaW5kZXggJWQgIgogCQkJCSIoSU8lbHggTUVNJWx4IElSUSVkKTogJWRcbiIsIGksCiAJCQkJcC0+aW9iYXNlLCBwLT5tYXBiYXNlLCBwLT5pcnEsIHJldCk7CiAJCX0KQEAgLTI0MTUsNTQgKzI0MTUsNTUgQEAKIC8qCiAgKiBSZW1vdmUgc2VyaWFsIHBvcnRzIHJlZ2lzdGVyZWQgYWdhaW5zdCBhIHBsYXRmb3JtIGRldmljZS4KICAqLwotc3RhdGljIGludCBfX2RldmV4aXQgc2VyaWFsODI1MF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgc2VyaWFsODI1MF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IFVBUlRfTlI7IGkrKykgewogCQlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0gJnNlcmlhbDgyNTBfcG9ydHNbaV07CiAKLQkJaWYgKHVwLT5wb3J0LmRldiA9PSBkZXYpCisJCWlmICh1cC0+cG9ydC5kZXYgPT0gJmRldi0+ZGV2KQogCQkJc2VyaWFsODI1MF91bnJlZ2lzdGVyX3BvcnQoaSk7CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNlcmlhbDgyNTBfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc2VyaWFsODI1MF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IFVBUlRfTlI7IGkrKykgewogCQlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0gJnNlcmlhbDgyNTBfcG9ydHNbaV07CiAKLQkJaWYgKHVwLT5wb3J0LnR5cGUgIT0gUE9SVF9VTktOT1dOICYmIHVwLT5wb3J0LmRldiA9PSBkZXYpCisJCWlmICh1cC0+cG9ydC50eXBlICE9IFBPUlRfVU5LTk9XTiAmJiB1cC0+cG9ydC5kZXYgPT0gJmRldi0+ZGV2KQogCQkJdWFydF9zdXNwZW5kX3BvcnQoJnNlcmlhbDgyNTBfcmVnLCAmdXAtPnBvcnQpOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNlcmlhbDgyNTBfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc2VyaWFsODI1MF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IFVBUlRfTlI7IGkrKykgewogCQlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0gJnNlcmlhbDgyNTBfcG9ydHNbaV07CiAKLQkJaWYgKHVwLT5wb3J0LnR5cGUgIT0gUE9SVF9VTktOT1dOICYmIHVwLT5wb3J0LmRldiA9PSBkZXYpCisJCWlmICh1cC0+cG9ydC50eXBlICE9IFBPUlRfVU5LTk9XTiAmJiB1cC0+cG9ydC5kZXYgPT0gJmRldi0+ZGV2KQogCQkJdWFydF9yZXN1bWVfcG9ydCgmc2VyaWFsODI1MF9yZWcsICZ1cC0+cG9ydCk7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzZXJpYWw4MjUwX2lzYV9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInNlcmlhbDgyNTAiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2VyaWFsODI1MF9pc2FfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzZXJpYWw4MjUwX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc2VyaWFsODI1MF9yZW1vdmUpLAogCS5zdXNwZW5kCT0gc2VyaWFsODI1MF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc2VyaWFsODI1MF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInNlcmlhbDgyNTAiLAorCX0sCiB9OwogCiAvKgpAQCAtMjYwOCw3ICsyNjA5LDcgQEAKIAogCXNlcmlhbDgyNTBfcmVnaXN0ZXJfcG9ydHMoJnNlcmlhbDgyNTBfcmVnLCAmc2VyaWFsODI1MF9pc2FfZGV2cy0+ZGV2KTsKIAotCXJldCA9IGRyaXZlcl9yZWdpc3Rlcigmc2VyaWFsODI1MF9pc2FfZHJpdmVyKTsKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNlcmlhbDgyNTBfaXNhX2RyaXZlcik7CiAJaWYgKHJldCA9PSAwKQogCQlnb3RvIG91dDsKIApAQCAtMjYzMCw3ICsyNjMxLDcgQEAKIAkgKi8KIAlzZXJpYWw4MjUwX2lzYV9kZXZzID0gTlVMTDsKIAotCWRyaXZlcl91bnJlZ2lzdGVyKCZzZXJpYWw4MjUwX2lzYV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzZXJpYWw4MjUwX2lzYV9kcml2ZXIpOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGlzYV9kZXYpOwogCiAJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmc2VyaWFsODI1MF9yZWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaW14LmMgYi9kcml2ZXJzL3NlcmlhbC9pbXguYwppbmRleCA0YTU0ZmY1Li4zNTVjZDkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pbXguYworKysgYi9kcml2ZXJzL3NlcmlhbC9pbXguYwpAQCAtOTIxLDkgKzkyMSw5IEBACiAJLmNvbnMgICAgICAgICAgID0gSU1YX0NPTlNPTEUsCiB9OwogCi1zdGF0aWMgaW50IHNlcmlhbF9pbXhfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpfZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNlcmlhbF9pbXhfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLSAgICAgICAgc3RydWN0IGlteF9wb3J0ICpzcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKyAgICAgICAgc3RydWN0IGlteF9wb3J0ICpzcG9ydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKICAgICAgICAgaWYgKHNwb3J0KQogICAgICAgICAgICAgICAgIHVhcnRfc3VzcGVuZF9wb3J0KCZpbXhfcmVnLCAmc3BvcnQtPnBvcnQpOwpAQCAtOTMxLDkgKzkzMSw5IEBACiAgICAgICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNlcmlhbF9pbXhfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IHNlcmlhbF9pbXhfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLSAgICAgICAgc3RydWN0IGlteF9wb3J0ICpzcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKyAgICAgICAgc3RydWN0IGlteF9wb3J0ICpzcG9ydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKICAgICAgICAgaWYgKHNwb3J0KQogICAgICAgICAgICAgICAgIHVhcnRfcmVzdW1lX3BvcnQoJmlteF9yZWcsICZzcG9ydC0+cG9ydCk7CkBAIC05NDEsMjEgKzk0MSwxOSBAQAogICAgICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXJpYWxfaW14X3Byb2JlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IHNlcmlhbF9pbXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShfZGV2KTsKLQotCWlteF9wb3J0c1tkZXYtPmlkXS5wb3J0LmRldiA9IF9kZXY7CisJaW14X3BvcnRzW2Rldi0+aWRdLnBvcnQuZGV2ID0gJmRldi0+ZGV2OwogCXVhcnRfYWRkX29uZV9wb3J0KCZpbXhfcmVnLCAmaW14X3BvcnRzW2Rldi0+aWRdLnBvcnQpOwotCWRldl9zZXRfZHJ2ZGF0YShfZGV2LCAmaW14X3BvcnRzW2Rldi0+aWRdKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsICZpbXhfcG9ydHNbZGV2LT5pZF0pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNlcmlhbF9pbXhfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IHNlcmlhbF9pbXhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaW14X3BvcnQgKnNwb3J0ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCXN0cnVjdCBpbXhfcG9ydCAqc3BvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKF9kZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAKIAlpZiAoc3BvcnQpCiAJCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZpbXhfcmVnLCAmc3BvcnQtPnBvcnQpOwpAQCAtOTYzLDE0ICs5NjEsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNlcmlhbF9pbXhfZHJpdmVyID0gewotICAgICAgICAubmFtZSAgICAgICAgICAgPSAiaW14LXVhcnQiLAotICAgICAgICAuYnVzICAgICAgICAgICAgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzZXJpYWxfaW14X2RyaXZlciA9IHsKICAgICAgICAgLnByb2JlICAgICAgICAgID0gc2VyaWFsX2lteF9wcm9iZSwKICAgICAgICAgLnJlbW92ZSAgICAgICAgID0gc2VyaWFsX2lteF9yZW1vdmUsCiAKIAkuc3VzcGVuZAk9IHNlcmlhbF9pbXhfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNlcmlhbF9pbXhfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCSAgICAgICAgLm5hbWUJPSAiaW14LXVhcnQiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbXhfc2VyaWFsX2luaXQodm9pZCkKQEAgLTk4NSw3ICs5ODQsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJnNlcmlhbF9pbXhfZHJpdmVyKTsKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNlcmlhbF9pbXhfZHJpdmVyKTsKIAlpZiAocmV0ICE9IDApCiAJCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJmlteF9yZWcpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCmluZGV4IDBkZDA4YTAuLjVkM2NiODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCkBAIC03MTcsMTAgKzcxNyw5IEBACiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIAogc3RhdGljIGludCBfX2RldmluaXQKLW1wYzUyeHhfdWFydF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCittcGM1Mnh4X3VhcnRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBkZXYtPnJlc291cmNlOworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gZGV2LT5yZXNvdXJjZTsKIAogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBOVUxMOwogCWludCBpLCBpZHgsIHJldDsKQEAgLTc2MSwxNyArNzYwLDE3IEBACiAJLyogQWRkIHRoZSBwb3J0IHRvIHRoZSB1YXJ0IHN1Yi1zeXN0ZW0gKi8KIAlyZXQgPSB1YXJ0X2FkZF9vbmVfcG9ydCgmbXBjNTJ4eF91YXJ0X2RyaXZlciwgcG9ydCk7CiAJaWYgKCFyZXQpCi0JCWRldl9zZXRfZHJ2ZGF0YShkZXYsICh2b2lkKilwb3J0KTsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCAodm9pZCopcG9ydCk7CiAKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50Ci1tcGM1Mnh4X3VhcnRfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK21wYzUyeHhfdWFydF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAoc3RydWN0IHVhcnRfcG9ydCAqKSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1YXJ0X3BvcnQgKikgcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAKIAlpZiAocG9ydCkKIAkJdWFydF9yZW1vdmVfb25lX3BvcnQoJm1wYzUyeHhfdWFydF9kcml2ZXIsIHBvcnQpOwpAQCAtNzgxLDkgKzc4MCw5IEBACiAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQKLW1wYzUyeHhfdWFydF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorbXBjNTJ4eF91YXJ0X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdWFydF9wb3J0ICopIGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAoc3RydWN0IHVhcnRfcG9ydCAqKSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKHNwb3J0KQogCQl1YXJ0X3N1c3BlbmRfcG9ydCgmbXBjNTJ4eF91YXJ0X2RyaXZlciwgcG9ydCk7CkBAIC03OTIsOSArNzkxLDkgQEAKIH0KIAogc3RhdGljIGludAotbXBjNTJ4eF91YXJ0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCittcGM1Mnh4X3VhcnRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1YXJ0X3BvcnQgKikgZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdWFydF9wb3J0ICopIHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAocG9ydCkKIAkJdWFydF9yZXN1bWVfcG9ydCgmbXBjNTJ4eF91YXJ0X2RyaXZlciwgcG9ydCk7CkBAIC04MDMsMTUgKzgwMiwxNiBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBtcGM1Mnh4X3VhcnRfcGxhdGZvcm1fZHJpdmVyID0gewotCS5uYW1lCQk9ICJtcGM1Mnh4LXBzYyIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtcGM1Mnh4X3VhcnRfcGxhdGZvcm1fZHJpdmVyID0gewogCS5wcm9iZQkJPSBtcGM1Mnh4X3VhcnRfcHJvYmUsCiAJLnJlbW92ZQkJPSBtcGM1Mnh4X3VhcnRfcmVtb3ZlLAogI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kCT0gbXBjNTJ4eF91YXJ0X3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBtcGM1Mnh4X3VhcnRfcmVzdW1lLAogI2VuZGlmCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm1wYzUyeHgtcHNjIiwKKwl9LAogfTsKIAogCkBAIC04MjgsNyArODI4LDcgQEAKIAogCXJldCA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZtcGM1Mnh4X3VhcnRfZHJpdmVyKTsKIAlpZiAocmV0ID09IDApIHsKLQkJcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZtcGM1Mnh4X3VhcnRfcGxhdGZvcm1fZHJpdmVyKTsKKwkJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtcGM1Mnh4X3VhcnRfcGxhdGZvcm1fZHJpdmVyKTsKIAkJaWYgKHJldCkKIAkJCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJm1wYzUyeHhfdWFydF9kcml2ZXIpOwogCX0KQEAgLTgzOSw3ICs4MzksNyBAQAogc3RhdGljIHZvaWQgX19leGl0CiBtcGM1Mnh4X3VhcnRfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZtcGM1Mnh4X3VhcnRfcGxhdGZvcm1fZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXBjNTJ4eF91YXJ0X3BsYXRmb3JtX2RyaXZlcik7CiAJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmbXBjNTJ4eF91YXJ0X2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21wc2MuYyBiL2RyaXZlcnMvc2VyaWFsL21wc2MuYwppbmRleCBiYTg4MzhiLi44ZjgzZTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tcHNjLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbXBzYy5jCkBAIC0xNTUxLDE1ICsxNTUxLDE0IEBACiB9CiAKIHN0YXRpYyBpbnQKLW1wc2Nfc2hhcmVkX2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCittcHNjX3NoYXJlZF9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJCSpwZCA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBtcHNjX3NoYXJlZF9wZGF0YQkqcGRhdGE7CiAJaW50CQkJCSByYyA9IC1FTk9ERVY7CiAKLQlpZiAocGQtPmlkID09IDApIHsKLQkJaWYgKCEocmMgPSBtcHNjX3NoYXJlZF9tYXBfcmVncyhwZCkpKSAgewotCQkJcGRhdGEgPSAoc3RydWN0IG1wc2Nfc2hhcmVkX3BkYXRhICopZGV2LT5wbGF0Zm9ybV9kYXRhOworCWlmIChkZXYtPmlkID09IDApIHsKKwkJaWYgKCEocmMgPSBtcHNjX3NoYXJlZF9tYXBfcmVncyhkZXYpKSkgIHsKKwkJCXBkYXRhID0gKHN0cnVjdCBtcHNjX3NoYXJlZF9wZGF0YSAqKWRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAkJCW1wc2Nfc2hhcmVkX3JlZ3MuTVBTQ19NUlJfbSA9IHBkYXRhLT5tcnJfdmFsOwogCQkJbXBzY19zaGFyZWRfcmVncy5NUFNDX1JDUlJfbT0gcGRhdGEtPnJjcnJfdmFsOwpAQCAtMTU3NywxMiArMTU3NiwxMSBAQAogfQogCiBzdGF0aWMgaW50Ci1tcHNjX3NoYXJlZF9kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK21wc2Nfc2hhcmVkX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJaW50CXJjID0gLUVOT0RFVjsKIAotCWlmIChwZC0+aWQgPT0gMCkgeworCWlmIChkZXYtPmlkID09IDApIHsKIAkJbXBzY19zaGFyZWRfdW5tYXBfcmVncygpOwogCQltcHNjX3NoYXJlZF9yZWdzLk1QU0NfTVJSX20gPSAwOwogCQltcHNjX3NoYXJlZF9yZWdzLk1QU0NfUkNSUl9tID0gMDsKQEAgLTE1OTUsMTEgKzE1OTMsMTIgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBtcHNjX3NoYXJlZF9kcml2ZXIgPSB7Ci0JLm5hbWUJPSBNUFNDX1NIQVJFRF9OQU1FLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtcHNjX3NoYXJlZF9kcml2ZXIgPSB7CiAJLnByb2JlCT0gbXBzY19zaGFyZWRfZHJ2X3Byb2JlLAogCS5yZW1vdmUJPSBtcHNjX3NoYXJlZF9kcnZfcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lID0gTVBTQ19TSEFSRURfTkFNRSwKKwl9LAogfTsKIAogLyoKQEAgLTE3MzIsMTkgKzE3MzEsMTggQEAKIH0KIAogc3RhdGljIGludAotbXBzY19kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorbXBzY19kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IG1wc2NfcG9ydF9pbmZvCSpwaTsKIAlpbnQJCQlyYyA9IC1FTk9ERVY7CiAKLQlwcl9kZWJ1ZygibXBzY19kcnZfcHJvYmU6IEFkZGluZyBNUFNDICVkXG4iLCBwZC0+aWQpOworCXByX2RlYnVnKCJtcHNjX2Rydl9wcm9iZTogQWRkaW5nIE1QU0MgJWRcbiIsIGRldi0+aWQpOwogCi0JaWYgKHBkLT5pZCA8IE1QU0NfTlVNX0NUTFJTKSB7Ci0JCXBpID0gJm1wc2NfcG9ydHNbcGQtPmlkXTsKKwlpZiAoZGV2LT5pZCA8IE1QU0NfTlVNX0NUTFJTKSB7CisJCXBpID0gJm1wc2NfcG9ydHNbZGV2LT5pZF07CiAKLQkJaWYgKCEocmMgPSBtcHNjX2Rydl9tYXBfcmVncyhwaSwgcGQpKSkgewotCQkJbXBzY19kcnZfZ2V0X3BsYXRmb3JtX2RhdGEocGksIHBkLCBwZC0+aWQpOworCQlpZiAoIShyYyA9IG1wc2NfZHJ2X21hcF9yZWdzKHBpLCBkZXYpKSkgeworCQkJbXBzY19kcnZfZ2V0X3BsYXRmb3JtX2RhdGEocGksIGRldiwgZGV2LT5pZCk7CiAKIAkJCWlmICghKHJjID0gbXBzY19tYWtlX3JlYWR5KHBpKSkpCiAJCQkJaWYgKCEocmMgPSB1YXJ0X2FkZF9vbmVfcG9ydCgmbXBzY19yZWcsCkBAIC0xNzY0LDI3ICsxNzYyLDI2IEBACiB9CiAKIHN0YXRpYyBpbnQKLW1wc2NfZHJ2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCittcHNjX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJcHJfZGVidWcoIm1wc2NfZHJ2X2V4aXQ6IFJlbW92aW5nIE1QU0MgJWRcbiIsIGRldi0+aWQpOwogCi0JcHJfZGVidWcoIm1wc2NfZHJ2X2V4aXQ6IFJlbW92aW5nIE1QU0MgJWRcbiIsIHBkLT5pZCk7Ci0KLQlpZiAocGQtPmlkIDwgTVBTQ19OVU1fQ1RMUlMpIHsKLQkJdWFydF9yZW1vdmVfb25lX3BvcnQoJm1wc2NfcmVnLCAmbXBzY19wb3J0c1twZC0+aWRdLnBvcnQpOwotCQltcHNjX3JlbGVhc2VfcG9ydCgoc3RydWN0IHVhcnRfcG9ydCAqKSZtcHNjX3BvcnRzW3BkLT5pZF0ucG9ydCk7Ci0JCW1wc2NfZHJ2X3VubWFwX3JlZ3MoJm1wc2NfcG9ydHNbcGQtPmlkXSk7CisJaWYgKGRldi0+aWQgPCBNUFNDX05VTV9DVExSUykgeworCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmbXBzY19yZWcsICZtcHNjX3BvcnRzW2Rldi0+aWRdLnBvcnQpOworCQltcHNjX3JlbGVhc2VfcG9ydCgoc3RydWN0IHVhcnRfcG9ydCAqKSZtcHNjX3BvcnRzW2Rldi0+aWRdLnBvcnQpOworCQltcHNjX2Rydl91bm1hcF9yZWdzKCZtcHNjX3BvcnRzW2Rldi0+aWRdKTsKIAkJcmV0dXJuIDA7CiAJfQogCWVsc2UKIAkJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBtcHNjX2RyaXZlciA9IHsKLQkubmFtZQk9IE1QU0NfQ1RMUl9OQU1FLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtcHNjX2RyaXZlciA9IHsKIAkucHJvYmUJPSBtcHNjX2Rydl9wcm9iZSwKIAkucmVtb3ZlCT0gbXBzY19kcnZfcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lID0gTVBTQ19DVExSX05BTUUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0CkBAIC0xNzk4LDkgKzE3OTUsOSBAQAogCW1lbXNldCgmbXBzY19zaGFyZWRfcmVncywgMCwgc2l6ZW9mKG1wc2Nfc2hhcmVkX3JlZ3MpKTsKIAogCWlmICghKHJjID0gdWFydF9yZWdpc3Rlcl9kcml2ZXIoJm1wc2NfcmVnKSkpIHsKLQkJaWYgKCEocmMgPSBkcml2ZXJfcmVnaXN0ZXIoJm1wc2Nfc2hhcmVkX2RyaXZlcikpKSB7Ci0JCQlpZiAoKHJjID0gZHJpdmVyX3JlZ2lzdGVyKCZtcHNjX2RyaXZlcikpKSB7Ci0JCQkJZHJpdmVyX3VucmVnaXN0ZXIoJm1wc2Nfc2hhcmVkX2RyaXZlcik7CisJCWlmICghKHJjID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtcHNjX3NoYXJlZF9kcml2ZXIpKSkgeworCQkJaWYgKChyYyA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXBzY19kcml2ZXIpKSkgeworCQkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtcHNjX3NoYXJlZF9kcml2ZXIpOwogCQkJCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJm1wc2NfcmVnKTsKIAkJCX0KIAkJfQpAQCAtMTgxNSw4ICsxODEyLDggQEAKIHN0YXRpYyB2b2lkIF9fZXhpdAogbXBzY19kcnZfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZtcHNjX2RyaXZlcik7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm1wc2Nfc2hhcmVkX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1wc2NfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXBzY19zaGFyZWRfZHJpdmVyKTsKIAl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZtcHNjX3JlZyk7CiAJbWVtc2V0KG1wc2NfcG9ydHMsIDAsIHNpemVvZihtcHNjX3BvcnRzKSk7CiAJbWVtc2V0KCZtcHNjX3NoYXJlZF9yZWdzLCAwLCBzaXplb2YobXBzY19zaGFyZWRfcmVncykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvcHhhLmMgYi9kcml2ZXJzL3NlcmlhbC9weGEuYwppbmRleCAxNmIyZjk0Li5mZjVlNjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9weGEuYworKysgYi9kcml2ZXJzL3NlcmlhbC9weGEuYwpAQCAtODA1LDkgKzgwNSw5IEBACiAJLmNvbnMJCT0gUFhBX0NPTlNPTEUsCiB9OwogCi1zdGF0aWMgaW50IHNlcmlhbF9weGFfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpfZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNlcmlhbF9weGFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLSAgICAgICAgc3RydWN0IHVhcnRfcHhhX3BvcnQgKnNwb3J0ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworICAgICAgICBzdHJ1Y3QgdWFydF9weGFfcG9ydCAqc3BvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAgICAgICAgIGlmIChzcG9ydCkKICAgICAgICAgICAgICAgICB1YXJ0X3N1c3BlbmRfcG9ydCgmc2VyaWFsX3B4YV9yZWcsICZzcG9ydC0+cG9ydCk7CkBAIC04MTUsOSArODE1LDkgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2VyaWFsX3B4YV9yZXN1bWUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgc2VyaWFsX3B4YV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotICAgICAgICBzdHJ1Y3QgdWFydF9weGFfcG9ydCAqc3BvcnQgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisgICAgICAgIHN0cnVjdCB1YXJ0X3B4YV9wb3J0ICpzcG9ydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKICAgICAgICAgaWYgKHNwb3J0KQogICAgICAgICAgICAgICAgIHVhcnRfcmVzdW1lX3BvcnQoJnNlcmlhbF9weGFfcmVnLCAmc3BvcnQtPnBvcnQpOwpAQCAtODI1LDIxICs4MjUsMTkgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2VyaWFsX3B4YV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBzZXJpYWxfcHhhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7Ci0KLQlzZXJpYWxfcHhhX3BvcnRzW2Rldi0+aWRdLnBvcnQuZGV2ID0gX2RldjsKKwlzZXJpYWxfcHhhX3BvcnRzW2Rldi0+aWRdLnBvcnQuZGV2ID0gJmRldi0+ZGV2OwogCXVhcnRfYWRkX29uZV9wb3J0KCZzZXJpYWxfcHhhX3JlZywgJnNlcmlhbF9weGFfcG9ydHNbZGV2LT5pZF0ucG9ydCk7Ci0JZGV2X3NldF9kcnZkYXRhKF9kZXYsICZzZXJpYWxfcHhhX3BvcnRzW2Rldi0+aWRdKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsICZzZXJpYWxfcHhhX3BvcnRzW2Rldi0+aWRdKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXJpYWxfcHhhX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBzZXJpYWxfcHhhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHVhcnRfcHhhX3BvcnQgKnNwb3J0ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCXN0cnVjdCB1YXJ0X3B4YV9wb3J0ICpzcG9ydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoX2RldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCWlmIChzcG9ydCkKIAkJdWFydF9yZW1vdmVfb25lX3BvcnQoJnNlcmlhbF9weGFfcmVnLCAmc3BvcnQtPnBvcnQpOwpAQCAtODQ3LDE0ICs4NDUsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNlcmlhbF9weGFfZHJpdmVyID0gewotICAgICAgICAubmFtZSAgICAgICAgICAgPSAicHhhMnh4LXVhcnQiLAotICAgICAgICAuYnVzICAgICAgICAgICAgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzZXJpYWxfcHhhX2RyaXZlciA9IHsKICAgICAgICAgLnByb2JlICAgICAgICAgID0gc2VyaWFsX3B4YV9wcm9iZSwKICAgICAgICAgLnJlbW92ZSAgICAgICAgID0gc2VyaWFsX3B4YV9yZW1vdmUsCiAKIAkuc3VzcGVuZAk9IHNlcmlhbF9weGFfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNlcmlhbF9weGFfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCSAgICAgICAgLm5hbWUJPSAicHhhMnh4LXVhcnQiLAorCX0sCiB9OwogCiBpbnQgX19pbml0IHNlcmlhbF9weGFfaW5pdCh2b2lkKQpAQCAtODY1LDcgKzg2NCw3IEBACiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZzZXJpYWxfcHhhX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzZXJpYWxfcHhhX2RyaXZlcik7CiAJaWYgKHJldCAhPSAwKQogCQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZzZXJpYWxfcHhhX3JlZyk7CiAKQEAgLTg3NCw3ICs4NzMsNyBAQAogCiB2b2lkIF9fZXhpdCBzZXJpYWxfcHhhX2V4aXQodm9pZCkKIHsKLSAgICAgICAgZHJpdmVyX3VucmVnaXN0ZXIoJnNlcmlhbF9weGFfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2VyaWFsX3B4YV9kcml2ZXIpOwogCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJnNlcmlhbF9weGFfcmVnKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jIGIvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jCmluZGV4IDAzNjc5MjMuLjQ3NjgxYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMKQEAgLTEwOTIsMTQgKzEwOTIsMTMgQEAKIAogc3RhdGljIGludCBwcm9iZV9pbmRleCA9IDA7CiAKLXN0YXRpYyBpbnQgczNjMjR4eF9zZXJpYWxfcHJvYmUoc3RydWN0IGRldmljZSAqX2RldiwKK3N0YXRpYyBpbnQgczNjMjR4eF9zZXJpYWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAogCQkJCXN0cnVjdCBzM2MyNHh4X3VhcnRfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgczNjMjR4eF91YXJ0X3BvcnQgKm91cnBvcnQ7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOwogCWludCByZXQ7CiAKLQlkYmcoInMzYzI0eHhfc2VyaWFsX3Byb2JlKCVwLCAlcCkgJWRcbiIsIF9kZXYsIGluZm8sIHByb2JlX2luZGV4KTsKKwlkYmcoInMzYzI0eHhfc2VyaWFsX3Byb2JlKCVwLCAlcCkgJWRcbiIsIGRldiwgaW5mbywgcHJvYmVfaW5kZXgpOwogCiAJb3VycG9ydCA9ICZzM2MyNHh4X3NlcmlhbF9wb3J0c1twcm9iZV9pbmRleF07CiAJcHJvYmVfaW5kZXgrKzsKQEAgLTExMTIsNyArMTExMSw3IEBACiAKIAlkYmcoIiVzOiBhZGRpbmcgcG9ydFxuIiwgX19GVU5DVElPTl9fKTsKIAl1YXJ0X2FkZF9vbmVfcG9ydCgmczNjMjR4eF91YXJ0X2RydiwgJm91cnBvcnQtPnBvcnQpOwotCWRldl9zZXRfZHJ2ZGF0YShfZGV2LCAmb3VycG9ydC0+cG9ydCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCAmb3VycG9ydC0+cG9ydCk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTEyMCw5ICsxMTE5LDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHMzYzI0eHhfc2VyaWFsX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBzM2MyNHh4X3NlcmlhbF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzM2MyNHh4X2Rldl90b19wb3J0KF9kZXYpOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzM2MyNHh4X2Rldl90b19wb3J0KCZkZXYtPmRldik7CiAKIAlpZiAocG9ydCkKIAkJdWFydF9yZW1vdmVfb25lX3BvcnQoJnMzYzI0eHhfdWFydF9kcnYsIHBvcnQpOwpAQCAtMTEzNCw5ICsxMTMzLDkgQEAKIAogI2lmZGVmIENPTkZJR19QTQogCi1zdGF0aWMgaW50IHMzYzI0eHhfc2VyaWFsX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHMzYzI0eHhfc2VyaWFsX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHMzYzI0eHhfZGV2X3RvX3BvcnQoZGV2KTsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gczNjMjR4eF9kZXZfdG9fcG9ydCgmZGV2LT5kZXYpOwogCiAJaWYgKHBvcnQpCiAJCXVhcnRfc3VzcGVuZF9wb3J0KCZzM2MyNHh4X3VhcnRfZHJ2LCBwb3J0KTsKQEAgLTExNDQsOSArMTE0Myw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczNjMjR4eF9zZXJpYWxfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczNjMjR4eF9zZXJpYWxfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gczNjMjR4eF9kZXZfdG9fcG9ydChkZXYpOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzM2MyNHh4X2Rldl90b19wb3J0KCZkZXYtPmRldik7CiAJc3RydWN0IHMzYzI0eHhfdWFydF9wb3J0ICpvdXJwb3J0ID0gdG9fb3VycG9ydChwb3J0KTsKIAogCWlmIChwb3J0KSB7CkBAIC0xMTY1LDExICsxMTY0LDExIEBACiAjZGVmaW5lIHMzYzI0eHhfc2VyaWFsX3Jlc3VtZSAgTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBpbnQgczNjMjR4eF9zZXJpYWxfaW5pdChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LAorc3RhdGljIGludCBzM2MyNHh4X3NlcmlhbF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKmRydiwKIAkJCSAgICAgICBzdHJ1Y3QgczNjMjR4eF91YXJ0X2luZm8gKmluZm8pCiB7CiAJZGJnKCJzM2MyNHh4X3NlcmlhbF9pbml0KCVwLCVwKVxuIiwgZHJ2LCBpbmZvKTsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKGRydik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihkcnYpOwogfQogCiAKQEAgLTEyMjgsMTkgKzEyMjcsMjAgQEAKIAkucmVzZXRfcG9ydAk9IHMzYzI0MDBfc2VyaWFsX3Jlc2V0cG9ydCwKIH07CiAKLXN0YXRpYyBpbnQgczNjMjQwMF9zZXJpYWxfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNDAwX3NlcmlhbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIHMzYzI0eHhfc2VyaWFsX3Byb2JlKGRldiwgJnMzYzI0MDBfdWFydF9pbmYpOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgczNjMjQwMF9zZXJpYWxfZHJ2ID0gewotCS5uYW1lCQk9ICJzM2MyNDAwLXVhcnQiLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzYzI0MDBfc2VyaWFsX2RydiA9IHsKIAkucHJvYmUJCT0gczNjMjQwMF9zZXJpYWxfcHJvYmUsCiAJLnJlbW92ZQkJPSBzM2MyNHh4X3NlcmlhbF9yZW1vdmUsCiAJLnN1c3BlbmQJPSBzM2MyNHh4X3NlcmlhbF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gczNjMjR4eF9zZXJpYWxfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzM2MyNDAwLXVhcnQiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogc3RhdGljIGlubGluZSBpbnQgczNjMjQwMF9zZXJpYWxfaW5pdCh2b2lkKQpAQCAtMTI1MCw3ICsxMjUwLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHMzYzI0MDBfc2VyaWFsX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmczNjMjQwMF9zZXJpYWxfZHJ2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjMjQwMF9zZXJpYWxfZHJ2KTsKIH0KIAogI2RlZmluZSBzM2MyNDAwX3VhcnRfaW5mX2F0ICZzM2MyNDAwX3VhcnRfaW5mCkBAIC0xMzMyLDE5ICsxMzMyLDIwIEBACiAKIC8qIGRldmljZSBtYW5hZ2VtZW50ICovCiAKLXN0YXRpYyBpbnQgczNjMjQxMF9zZXJpYWxfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNDEwX3NlcmlhbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIHMzYzI0eHhfc2VyaWFsX3Byb2JlKGRldiwgJnMzYzI0MTBfdWFydF9pbmYpOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgczNjMjQxMF9zZXJpYWxfZHJ2ID0gewotCS5uYW1lCQk9ICJzM2MyNDEwLXVhcnQiLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzYzI0MTBfc2VyaWFsX2RydiA9IHsKIAkucHJvYmUJCT0gczNjMjQxMF9zZXJpYWxfcHJvYmUsCiAJLnJlbW92ZQkJPSBzM2MyNHh4X3NlcmlhbF9yZW1vdmUsCiAJLnN1c3BlbmQJPSBzM2MyNHh4X3NlcmlhbF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gczNjMjR4eF9zZXJpYWxfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzM2MyNDEwLXVhcnQiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogc3RhdGljIGlubGluZSBpbnQgczNjMjQxMF9zZXJpYWxfaW5pdCh2b2lkKQpAQCAtMTM1NCw3ICsxMzU1LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHMzYzI0MTBfc2VyaWFsX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmczNjMjQxMF9zZXJpYWxfZHJ2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjMjQxMF9zZXJpYWxfZHJ2KTsKIH0KIAogI2RlZmluZSBzM2MyNDEwX3VhcnRfaW5mX2F0ICZzM2MyNDEwX3VhcnRfaW5mCkBAIC0xNDkzLDIwICsxNDk0LDIxIEBACiAKIC8qIGRldmljZSBtYW5hZ2VtZW50ICovCiAKLXN0YXRpYyBpbnQgczNjMjQ0MF9zZXJpYWxfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNDQwX3NlcmlhbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJZGJnKCJzM2MyNDQwX3NlcmlhbF9wcm9iZTogZGV2PSVwXG4iLCBkZXYpOwogCXJldHVybiBzM2MyNHh4X3NlcmlhbF9wcm9iZShkZXYsICZzM2MyNDQwX3VhcnRfaW5mKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHMzYzI0NDBfc2VyaWFsX2RydiA9IHsKLQkubmFtZQkJPSAiczNjMjQ0MC11YXJ0IiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2MyNDQwX3NlcmlhbF9kcnYgPSB7CiAJLnByb2JlCQk9IHMzYzI0NDBfc2VyaWFsX3Byb2JlLAogCS5yZW1vdmUJCT0gczNjMjR4eF9zZXJpYWxfcmVtb3ZlLAogCS5zdXNwZW5kCT0gczNjMjR4eF9zZXJpYWxfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHMzYzI0eHhfc2VyaWFsX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiczNjMjQ0MC11YXJ0IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKIApAQCAtMTUxNyw3ICsxNTE5LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHMzYzI0NDBfc2VyaWFsX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmczNjMjQ0MF9zZXJpYWxfZHJ2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjMjQ0MF9zZXJpYWxfZHJ2KTsKIH0KIAogI2RlZmluZSBzM2MyNDQwX3VhcnRfaW5mX2F0ICZzM2MyNDQwX3VhcnRfaW5mCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYyBiL2RyaXZlcnMvc2VyaWFsL3NhMTEwMC5jCmluZGV4IGVkNjE4Y2MuLmZkOWRlZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NhMTEwMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NhMTEwMC5jCkBAIC04MzQsOSArODM0LDkgQEAKIAkuY29ucwkJCT0gU0ExMTAwX0NPTlNPTEUsCiB9OwogCi1zdGF0aWMgaW50IHNhMTEwMF9zZXJpYWxfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpfZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNhMTEwMF9zZXJpYWxfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3Qgc2ExMTAwX3BvcnQgKnNwb3J0ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCXN0cnVjdCBzYTExMDBfcG9ydCAqc3BvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKHNwb3J0KQogCQl1YXJ0X3N1c3BlbmRfcG9ydCgmc2ExMTAwX3JlZywgJnNwb3J0LT5wb3J0KTsKQEAgLTg0NCw5ICs4NDQsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhMTEwMF9zZXJpYWxfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IHNhMTEwMF9zZXJpYWxfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qgc2ExMTAwX3BvcnQgKnNwb3J0ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCXN0cnVjdCBzYTExMDBfcG9ydCAqc3BvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKHNwb3J0KQogCQl1YXJ0X3Jlc3VtZV9wb3J0KCZzYTExMDBfcmVnLCAmc3BvcnQtPnBvcnQpOwpAQCAtODU0LDkgKzg1NCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2ExMTAwX3NlcmlhbF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBzYTExMDBfc2VyaWFsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CiAJc3RydWN0IHJlc291cmNlICpyZXMgPSBkZXYtPnJlc291cmNlOwogCWludCBpOwogCkBAIC04NjksOSArODY4LDkgQEAKIAkJCWlmIChzYTExMDBfcG9ydHNbaV0ucG9ydC5tYXBiYXNlICE9IHJlcy0+c3RhcnQpCiAJCQkJY29udGludWU7CiAKLQkJCXNhMTEwMF9wb3J0c1tpXS5wb3J0LmRldiA9IF9kZXY7CisJCQlzYTExMDBfcG9ydHNbaV0ucG9ydC5kZXYgPSAmZGV2LT5kZXY7CiAJCQl1YXJ0X2FkZF9vbmVfcG9ydCgmc2ExMTAwX3JlZywgJnNhMTEwMF9wb3J0c1tpXS5wb3J0KTsKLQkJCWRldl9zZXRfZHJ2ZGF0YShfZGV2LCAmc2ExMTAwX3BvcnRzW2ldKTsKKwkJCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgJnNhMTEwMF9wb3J0c1tpXSk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTg3OSwxMSArODc4LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2ExMTAwX3NlcmlhbF9yZW1vdmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgc2ExMTAwX3NlcmlhbF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3Qgc2ExMTAwX3BvcnQgKnNwb3J0ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCXN0cnVjdCBzYTExMDBfcG9ydCAqc3BvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YShfZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCWlmIChzcG9ydCkKIAkJdWFydF9yZW1vdmVfb25lX3BvcnQoJnNhMTEwMF9yZWcsICZzcG9ydC0+cG9ydCk7CkBAIC04OTEsMTMgKzg5MCwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc2ExMXgwX3NlcmlhbF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInNhMTF4MC11YXJ0IiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNhMTF4MF9zZXJpYWxfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzYTExMDBfc2VyaWFsX3Byb2JlLAogCS5yZW1vdmUJCT0gc2ExMTAwX3NlcmlhbF9yZW1vdmUsCiAJLnN1c3BlbmQJPSBzYTExMDBfc2VyaWFsX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzYTExMDBfc2VyaWFsX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAic2ExMXgwLXVhcnQiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzYTExMDBfc2VyaWFsX2luaXQodm9pZCkKQEAgLTkxMCw3ICs5MTAsNyBAQAogCiAJcmV0ID0gdWFydF9yZWdpc3Rlcl9kcml2ZXIoJnNhMTEwMF9yZWcpOwogCWlmIChyZXQgPT0gMCkgewotCQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJnNhMTF4MF9zZXJpYWxfZHJpdmVyKTsKKwkJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzYTExeDBfc2VyaWFsX2RyaXZlcik7CiAJCWlmIChyZXQpCiAJCQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZzYTExMDBfcmVnKTsKIAl9CkBAIC05MTksNyArOTE5LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IHNhMTEwMF9zZXJpYWxfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzYTExeDBfc2VyaWFsX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNhMTF4MF9zZXJpYWxfZHJpdmVyKTsKIAl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZzYTExMDBfcmVnKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvdnI0MXh4X3NpdS5jIGIvZHJpdmVycy9zZXJpYWwvdnI0MXh4X3NpdS5jCmluZGV4IDAxNjk2YjMuLjg2NWQ0ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3ZyNDF4eF9zaXUuYworKysgYi9kcml2ZXJzL3NlcmlhbC92cjQxeHhfc2l1LmMKQEAgLTkyNCw3ICs5MjQsNyBAQAogCS5jb25zCQk9IFNFUklBTF9WUjQxWFhfQ09OU09MRSwKIH07CiAKLXN0YXRpYyBpbnQgc2l1X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc2l1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OwogCWludCBudW0sIGksIHJldHZhbDsKQEAgLTk0MSw3ICs5NDEsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewogCQlwb3J0ID0gJnNpdV91YXJ0X3BvcnRzW2ldOwogCQlwb3J0LT5vcHMgPSAmc2l1X3VhcnRfb3BzOwotCQlwb3J0LT5kZXYgPSBkZXY7CisJCXBvcnQtPmRldiA9ICZkZXYtPmRldjsKIAogCQlyZXR2YWwgPSB1YXJ0X2FkZF9vbmVfcG9ydCgmc2l1X3VhcnRfZHJpdmVyLCBwb3J0KTsKIAkJaWYgKHJldHZhbCA8IDApIHsKQEAgLTk1OCwxNCArOTU4LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2l1X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNpdV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQ7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2l1X3VhcnRfZHJpdmVyLm5yOyBpKyspIHsKIAkJcG9ydCA9ICZzaXVfdWFydF9wb3J0c1tpXTsKLQkJaWYgKHBvcnQtPmRldiA9PSBkZXYpIHsKKwkJaWYgKHBvcnQtPmRldiA9PSAmZGV2LT5kZXYpIHsKIAkJCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZzaXVfdWFydF9kcml2ZXIsIHBvcnQpOwogCQkJcG9ydC0+ZGV2ID0gTlVMTDsKIAkJfQpAQCAtOTc2LDcgKzk3Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2l1X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNpdV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQ7CiAJaW50IGk7CkBAIC05ODQsNyArOTg0LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgc2l1X3VhcnRfZHJpdmVyLm5yOyBpKyspIHsKIAkJcG9ydCA9ICZzaXVfdWFydF9wb3J0c1tpXTsKIAkJaWYgKChwb3J0LT50eXBlID09IFBPUlRfVlI0MVhYX1NJVSB8fAotCQkgICAgIHBvcnQtPnR5cGUgPT0gUE9SVF9WUjQxWFhfRFNJVSkgJiYgcG9ydC0+ZGV2ID09IGRldikKKwkJICAgICBwb3J0LT50eXBlID09IFBPUlRfVlI0MVhYX0RTSVUpICYmIHBvcnQtPmRldiA9PSAmZGV2LT5kZXYpCiAJCQl1YXJ0X3N1c3BlbmRfcG9ydCgmc2l1X3VhcnRfZHJpdmVyLCBwb3J0KTsKIAogCX0KQEAgLTk5Miw3ICs5OTIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNpdV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzaXVfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OwogCWludCBpOwpAQCAtMTAwMCw3ICsxMDAwLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgc2l1X3VhcnRfZHJpdmVyLm5yOyBpKyspIHsKIAkJcG9ydCA9ICZzaXVfdWFydF9wb3J0c1tpXTsKIAkJaWYgKChwb3J0LT50eXBlID09IFBPUlRfVlI0MVhYX1NJVSB8fAotCQkgICAgIHBvcnQtPnR5cGUgPT0gUE9SVF9WUjQxWFhfRFNJVSkgJiYgcG9ydC0+ZGV2ID09IGRldikKKwkJICAgICBwb3J0LT50eXBlID09IFBPUlRfVlI0MVhYX0RTSVUpICYmIHBvcnQtPmRldiA9PSAmZGV2LT5kZXYpCiAJCQl1YXJ0X3Jlc3VtZV9wb3J0KCZzaXVfdWFydF9kcml2ZXIsIHBvcnQpOwogCX0KIApAQCAtMTAwOSwxMyArMTAwOSwxNCBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2l1X3BsYXRmb3JtX2RldmljZTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNpdV9kZXZpY2VfZHJpdmVyID0gewotCS5uYW1lCQk9ICJTSVUiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2l1X2RldmljZV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNpdV9wcm9iZSwKIAkucmVtb3ZlCQk9IHNpdV9yZW1vdmUsCiAJLnN1c3BlbmQJPSBzaXVfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNpdV9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIlNJVSIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHZyNDF4eF9zaXVfaW5pdCh2b2lkKQpAQCAtMTAyNiw3ICsxMDI3LDcgQEAKIAlpZiAoSVNfRVJSKHNpdV9wbGF0Zm9ybV9kZXZpY2UpKQogCQlyZXR1cm4gUFRSX0VSUihzaXVfcGxhdGZvcm1fZGV2aWNlKTsKIAotCXJldHZhbCA9IGRyaXZlcl9yZWdpc3Rlcigmc2l1X2RldmljZV9kcml2ZXIpOworCXJldHZhbCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2l1X2RldmljZV9kcml2ZXIpOwogCWlmIChyZXR2YWwgPCAwKQogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihzaXVfcGxhdGZvcm1fZGV2aWNlKTsKIApAQCAtMTAzNSw3ICsxMDM2LDcgQEAKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IHZyNDF4eF9zaXVfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzaXVfZGV2aWNlX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNpdV9kZXZpY2VfZHJpdmVyKTsKIAogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHNpdV9wbGF0Zm9ybV9kZXZpY2UpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCmluZGV4IDkwNDUxOTAuLjFlNDA3NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKQEAgLTg5Niw3ICs4OTYsNyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbnQgZHVtbXlfdWRjX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGR1bW15X3VkY19wcm9iZSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkdW1teQkqZHVtID0gdGhlX2NvbnRyb2xsZXI7CiAJaW50CQlyYzsKQEAgLTkwOSw3ICs5MDksNyBAQAogCWR1bS0+Z2FkZ2V0LmlzX290ZyA9IChkdW1teV90b19oY2QoZHVtKS0+c2VsZi5vdGdfcG9ydCAhPSAwKTsKIAogCXN0cmNweSAoZHVtLT5nYWRnZXQuZGV2LmJ1c19pZCwgImdhZGdldCIpOwotCWR1bS0+Z2FkZ2V0LmRldi5wYXJlbnQgPSBkZXY7CisJZHVtLT5nYWRnZXQuZGV2LnBhcmVudCA9ICZkZXYtPmRldjsKIAlkdW0tPmdhZGdldC5kZXYucmVsZWFzZSA9IGR1bW15X2dhZGdldF9yZWxlYXNlOwogCXJjID0gZGV2aWNlX3JlZ2lzdGVyICgmZHVtLT5nYWRnZXQuZGV2KTsKIAlpZiAocmMgPCAwKQpAQCAtOTE5LDI2ICs5MTksMjYgQEAKIAl1c2JfYnVzX2dldCAoJmR1bW15X3RvX2hjZCAoZHVtKS0+c2VsZik7CiAjZW5kaWYKIAotCWRldl9zZXRfZHJ2ZGF0YSAoZGV2LCBkdW0pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhIChkZXYsIGR1bSk7CiAJZGV2aWNlX2NyZWF0ZV9maWxlICgmZHVtLT5nYWRnZXQuZGV2LCAmZGV2X2F0dHJfZnVuY3Rpb24pOwogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBkdW1teV91ZGNfcmVtb3ZlIChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGR1bW15X3VkY19yZW1vdmUgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZHVtbXkJKmR1bSA9IGRldl9nZXRfZHJ2ZGF0YSAoZGV2KTsKKwlzdHJ1Y3QgZHVtbXkJKmR1bSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhIChkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhIChkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhIChkZXYsIE5VTEwpOwogCWRldmljZV9yZW1vdmVfZmlsZSAoJmR1bS0+Z2FkZ2V0LmRldiwgJmRldl9hdHRyX2Z1bmN0aW9uKTsKIAlkZXZpY2VfdW5yZWdpc3RlciAoJmR1bS0+Z2FkZ2V0LmRldik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHVtbXlfdWRjX3N1c3BlbmQgKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBkdW1teV91ZGNfc3VzcGVuZCAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IGR1bW15CSpkdW0gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHVtbXkJKmR1bSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfZGJnIChkZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlkZXZfZGJnICgmZGV2LT5kZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKIAlzcGluX2xvY2tfaXJxICgmZHVtLT5sb2NrKTsKIAlkdW0tPnVkY19zdXNwZW5kZWQgPSAxOwogCXNldF9saW5rX3N0YXRlIChkdW0pOwpAQCAtOTQ5LDI5ICs5NDksMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkdW1teV91ZGNfcmVzdW1lIChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGR1bW15X3VkY19yZXN1bWUgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZHVtbXkJKmR1bSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkdW1teQkqZHVtID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAotCWRldl9kYmcgKGRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCWRldl9kYmcgKCZkZXYtPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCXNwaW5fbG9ja19pcnEgKCZkdW0tPmxvY2spOwogCWR1bS0+dWRjX3N1c3BlbmRlZCA9IDA7CiAJc2V0X2xpbmtfc3RhdGUgKGR1bSk7CiAJc3Bpbl91bmxvY2tfaXJxICgmZHVtLT5sb2NrKTsKIAotCWRldi0+cG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOworCWRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKIAl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzIChkdW1teV90b19oY2QgKGR1bSkpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgZHVtbXlfdWRjX2RyaXZlciA9IHsKLQkubmFtZQkJPSAoY2hhciAqKSBnYWRnZXRfbmFtZSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkdW1teV91ZGNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBkdW1teV91ZGNfcHJvYmUsCiAJLnJlbW92ZQkJPSBkdW1teV91ZGNfcmVtb3ZlLAogCS5zdXNwZW5kCT0gZHVtbXlfdWRjX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBkdW1teV91ZGNfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9IChjaGFyICopIGdhZGdldF9uYW1lLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTE4OTgsMTQgKzE4OTksMTQgQEAKIAkuYnVzX3Jlc3VtZSA9CQlkdW1teV9idXNfcmVzdW1lLAogfTsKIAotc3RhdGljIGludCBkdW1teV9oY2RfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgZHVtbXlfaGNkX3Byb2JlIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CiAJaW50CQkJcmV0dmFsOwogCiAJZGV2X2luZm8gKGRldiwgIiVzLCBkcml2ZXIgIiBEUklWRVJfVkVSU0lPTiAiXG4iLCBkcml2ZXJfZGVzYyk7CiAKLQloY2QgPSB1c2JfY3JlYXRlX2hjZCAoJmR1bW15X2hjZCwgZGV2LCBkZXYtPmJ1c19pZCk7CisJaGNkID0gdXNiX2NyZWF0ZV9oY2QgKCZkdW1teV9oY2QsICZkZXYtPmRldiwgZGV2LT5kZXYuYnVzX2lkKTsKIAlpZiAoIWhjZCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJdGhlX2NvbnRyb2xsZXIgPSBoY2RfdG9fZHVtbXkgKGhjZCk7CkBAIC0xOTE4LDQ4ICsxOTE5LDQ5IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCBkdW1teV9oY2RfcmVtb3ZlIChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGR1bW15X2hjZF9yZW1vdmUgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKIAotCWhjZCA9IGRldl9nZXRfZHJ2ZGF0YSAoZGV2KTsKKwloY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSAoZGV2KTsKIAl1c2JfcmVtb3ZlX2hjZCAoaGNkKTsKIAl1c2JfcHV0X2hjZCAoaGNkKTsKIAl0aGVfY29udHJvbGxlciA9IE5VTEw7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHVtbXlfaGNkX3N1c3BlbmQgKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBkdW1teV9oY2Rfc3VzcGVuZCAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CiAKLQlkZXZfZGJnIChkZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKLQloY2QgPSBkZXZfZ2V0X2RydmRhdGEgKGRldik7CisJZGV2X2RiZyAoJmRldi0+ZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEgKGRldik7CiAKIAloY2QtPnN0YXRlID0gSENfU1RBVEVfU1VTUEVOREVEOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGR1bW15X2hjZF9yZXN1bWUgKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgZHVtbXlfaGNkX3Jlc3VtZSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCB1c2JfaGNkCQkqaGNkOwogCi0JZGV2X2RiZyAoZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JaGNkID0gZGV2X2dldF9kcnZkYXRhIChkZXYpOworCWRldl9kYmcgKCZkZXYtPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCWhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhIChkZXYpOwogCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9SVU5OSU5HOwogCiAJdXNiX2hjZF9wb2xsX3JoX3N0YXR1cyAoaGNkKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGR1bW15X2hjZF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gKGNoYXIgKikgZHJpdmVyX25hbWUsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHVtbXlfaGNkX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gZHVtbXlfaGNkX3Byb2JlLAogCS5yZW1vdmUJCT0gZHVtbXlfaGNkX3JlbW92ZSwKIAkuc3VzcGVuZAk9IGR1bW15X2hjZF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gZHVtbXlfaGNkX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAoY2hhciAqKSBkcml2ZXJfbmFtZSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xOTk1LDExICsxOTk3LDExIEBACiAJaWYgKHVzYl9kaXNhYmxlZCAoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXR2YWwgPSBkcml2ZXJfcmVnaXN0ZXIgKCZkdW1teV9oY2RfZHJpdmVyKTsKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIgKCZkdW1teV9oY2RfZHJpdmVyKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJcmV0dXJuIHJldHZhbDsKIAotCXJldHZhbCA9IGRyaXZlcl9yZWdpc3RlciAoJmR1bW15X3VkY19kcml2ZXIpOworCXJldHZhbCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlciAoJmR1bW15X3VkY19kcml2ZXIpOwogCWlmIChyZXR2YWwgPCAwKQogCQlnb3RvIGVycl9yZWdpc3Rlcl91ZGNfZHJpdmVyOwogCkBAIC0yMDE1LDkgKzIwMTcsOSBAQAogZXJyX3JlZ2lzdGVyX3VkYzoKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlciAoJnRoZV9oY2RfcGRldik7CiBlcnJfcmVnaXN0ZXJfaGNkOgotCWRyaXZlcl91bnJlZ2lzdGVyICgmZHVtbXlfdWRjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIgKCZkdW1teV91ZGNfZHJpdmVyKTsKIGVycl9yZWdpc3Rlcl91ZGNfZHJpdmVyOgotCWRyaXZlcl91bnJlZ2lzdGVyICgmZHVtbXlfaGNkX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIgKCZkdW1teV9oY2RfZHJpdmVyKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogbW9kdWxlX2luaXQgKGluaXQpOwpAQCAtMjAyNiw3ICsyMDI4LDcgQEAKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlciAoJnRoZV91ZGNfcGRldik7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIgKCZ0aGVfaGNkX3BkZXYpOwotCWRyaXZlcl91bnJlZ2lzdGVyICgmZHVtbXlfdWRjX2RyaXZlcik7Ci0JZHJpdmVyX3VucmVnaXN0ZXIgKCZkdW1teV9oY2RfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlciAoJmR1bW15X3VkY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyICgmZHVtbXlfaGNkX2RyaXZlcik7CiB9CiBtb2R1bGVfZXhpdCAoY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCmluZGV4IDY1NDQ2OTcuLmIwZjNjZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCkBAIC0xOTcwLDcgKzE5NzAsNiBAQAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGdva3VfcGNpX2RyaXZlciA9IHsKIAkubmFtZSA9CQkoY2hhciAqKSBkcml2ZXJfbmFtZSwKIAkuaWRfdGFibGUgPQlwY2lfaWRzLAotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCiAJLnByb2JlID0JZ29rdV9wcm9iZSwKIAkucmVtb3ZlID0JZ29rdV9yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCmluZGV4IGJjNjI2OWYuLmUwMmZlYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCkBAIC0yMDg1LDIxICsyMDg1LDIxIEBACiAvKgogICogCXByb2JlIC0gYmluZHMgdG8gdGhlIHBsYXRmb3JtIGRldmljZQogICovCi1zdGF0aWMgaW50IGxoN2E0MHhfdWRjX3Byb2JlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IGxoN2E0MHhfdWRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGxoN2E0MHhfdWRjICpkZXYgPSAmbWVtb3J5OwogCWludCByZXR2YWw7CiAKLQlERUJVRygiJXM6ICVwXG4iLCBfX0ZVTkNUSU9OX18sIF9kZXYpOworCURFQlVHKCIlczogJXBcbiIsIF9fRlVOQ1RJT05fXywgcGRldik7CiAKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5sb2NrKTsKLQlkZXYtPmRldiA9IF9kZXY7CisJZGV2LT5kZXYgPSAmcGRldi0+ZGV2OwogCiAJZGV2aWNlX2luaXRpYWxpemUoJmRldi0+Z2FkZ2V0LmRldik7Ci0JZGV2LT5nYWRnZXQuZGV2LnBhcmVudCA9IF9kZXY7CisJZGV2LT5nYWRnZXQuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CiAKIAl0aGVfY29udHJvbGxlciA9IGRldjsKLQlkZXZfc2V0X2RydmRhdGEoX2RldiwgZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCiAJdWRjX2Rpc2FibGUoZGV2KTsKIAl1ZGNfcmVpbml0KGRldik7CkBAIC0yMTE5LDExICsyMTE5LDExIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCBsaDdhNDB4X3VkY19yZW1vdmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgbGg3YTQweF91ZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IGxoN2E0MHhfdWRjICpkZXYgPSBfZGV2LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCi0JREVCVUcoIiVzOiAlcFxuIiwgX19GVU5DVElPTl9fLCBkZXYpOworCURFQlVHKCIlczogJXBcbiIsIF9fRlVOQ1RJT05fXywgcGRldik7CiAKIAl1ZGNfZGlzYWJsZShkZXYpOwogCXJlbW92ZV9wcm9jX2ZpbGVzKCk7CkBAIC0yMTMxLDcgKzIxMzEsNyBAQAogCiAJZnJlZV9pcnEoSVJRX1VTQklOVFIsIGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoX2RldiwgMCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgMCk7CiAKIAl0aGVfY29udHJvbGxlciA9IDA7CiAKQEAgLTIxNDAsMjYgKzIxNDAsMjcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHVkY19kcml2ZXIgPSB7Ci0JLm5hbWUgPSAoY2hhciAqKWRyaXZlcl9uYW1lLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB1ZGNfZHJpdmVyID0gewogCS5wcm9iZSA9IGxoN2E0MHhfdWRjX3Byb2JlLAogCS5yZW1vdmUgPSBsaDdhNDB4X3VkY19yZW1vdmUKIAkgICAgLyogRklYTUUgcG93ZXIgbWFuYWdlbWVudCBzdXBwb3J0ICovCiAJICAgIC8qIC5zdXNwZW5kID0gLi4uIGRpc2FibGUgVURDICovCiAJICAgIC8qIC5yZXN1bWUgPSAuLi4gcmUtZW5hYmxlIFVEQyAqLworCS5kcml2ZXIJPSB7CisJCS5uYW1lID0gKGNoYXIgKilkcml2ZXJfbmFtZSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHVkY19pbml0KHZvaWQpCiB7CiAJREVCVUcoIiVzOiAlcyB2ZXJzaW9uICVzXG4iLCBfX0ZVTkNUSU9OX18sIGRyaXZlcl9uYW1lLCBEUklWRVJfVkVSU0lPTik7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmdWRjX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdWRjX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB1ZGNfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdWRjX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHVkY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCmluZGV4IDBkYzZiYjAuLmMzMmUxZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYwpAQCAtMjk0OCw3ICsyOTQ4LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuZXQyMjgwX3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUgPQkJKGNoYXIgKikgZHJpdmVyX25hbWUsCiAJLmlkX3RhYmxlID0JcGNpX2lkcywKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAogCS5wcm9iZSA9CW5ldDIyODBfcHJvYmUsCiAJLnJlbW92ZSA9CW5ldDIyODBfcmVtb3ZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYwppbmRleCAzODc2OTJhLi5hODk3MmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYwpAQCAtMjcwNywxOCArMjcwNywxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwX3VkY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX3VkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKm9kZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlpbnQJCQlzdGF0dXMgPSAtRU5PREVWOwogCWludAkJCWhtYzsKIAlzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyCSp4Y2VpdiA9IE5VTEw7CiAJY29uc3QgY2hhcgkJKnR5cGUgPSBOVUxMOwotCXN0cnVjdCBvbWFwX3VzYl9jb25maWcJKmNvbmZpZyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgb21hcF91c2JfY29uZmlnCSpjb25maWcgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCS8qIE5PVEU6ICAia25vd3MiIHRoZSBvcmRlciBvZiB0aGUgcmVzb3VyY2VzISAqLwotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKG9kZXYtPnJlc291cmNlWzBdLnN0YXJ0LCAKLQkJCW9kZXYtPnJlc291cmNlWzBdLmVuZCAtIG9kZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsgMSwKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwgCisJCQlwZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBwZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDEsCiAJCQlkcml2ZXJfbmFtZSkpIHsKIAkJREJHKCJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTI4MDMsNyArMjgwMiw3IEBACiAJSU5GTygiaG1jIG1vZGUgJWQsICVzIHRyYW5zY2VpdmVyXG4iLCBobWMsIHR5cGUpOwogCiAJLyogYSAiZ2FkZ2V0IiBhYnN0cmFjdHMvdmlydHVhbGl6ZXMgdGhlIGNvbnRyb2xsZXIgKi8KLQlzdGF0dXMgPSBvbWFwX3VkY19zZXR1cChvZGV2LCB4Y2Vpdik7CisJc3RhdHVzID0gb21hcF91ZGNfc2V0dXAocGRldiwgeGNlaXYpOwogCWlmIChzdGF0dXMpIHsKIAkJZ290byBjbGVhbnVwMDsKIAl9CkBAIC0yODIxLDI4ICsyODIwLDI4IEBACiAJCXVkYy0+Y2xyX2hhbHQgPSBVRENfUkVTRVRfRVA7CiAKIAkvKiBVU0IgZ2VuZXJhbCBwdXJwb3NlIElSUTogIGVwMCwgc3RhdGUgY2hhbmdlcywgZG1hLCBldGMgKi8KLQlzdGF0dXMgPSByZXF1ZXN0X2lycShvZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgb21hcF91ZGNfaXJxLAorCXN0YXR1cyA9IHJlcXVlc3RfaXJxKHBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBvbWFwX3VkY19pcnEsCiAJCQlTQV9TQU1QTEVfUkFORE9NLCBkcml2ZXJfbmFtZSwgdWRjKTsKIAlpZiAoc3RhdHVzICE9IDApIHsKIAkJRVJSKCAiY2FuJ3QgZ2V0IGlycSAlbGQsIGVyciAlZFxuIiwKLQkJCW9kZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBzdGF0dXMpOworCQkJcGRldi0+cmVzb3VyY2VbMV0uc3RhcnQsIHN0YXR1cyk7CiAJCWdvdG8gY2xlYW51cDE7CiAJfQogCiAJLyogVVNCICJub24taXNvIiBJUlEgKFBJTyBmb3IgYWxsIGJ1dCBlcDApICovCi0Jc3RhdHVzID0gcmVxdWVzdF9pcnEob2Rldi0+cmVzb3VyY2VbMl0uc3RhcnQsIG9tYXBfdWRjX3Bpb19pcnEsCisJc3RhdHVzID0gcmVxdWVzdF9pcnEocGRldi0+cmVzb3VyY2VbMl0uc3RhcnQsIG9tYXBfdWRjX3Bpb19pcnEsCiAJCQlTQV9TQU1QTEVfUkFORE9NLCAib21hcF91ZGMgcGlvIiwgdWRjKTsKIAlpZiAoc3RhdHVzICE9IDApIHsKIAkJRVJSKCAiY2FuJ3QgZ2V0IGlycSAlbGQsIGVyciAlZFxuIiwKLQkJCW9kZXYtPnJlc291cmNlWzJdLnN0YXJ0LCBzdGF0dXMpOworCQkJcGRldi0+cmVzb3VyY2VbMl0uc3RhcnQsIHN0YXR1cyk7CiAJCWdvdG8gY2xlYW51cDI7CiAJfQogI2lmZGVmCVVTRV9JU08KLQlzdGF0dXMgPSByZXF1ZXN0X2lycShvZGV2LT5yZXNvdXJjZVszXS5zdGFydCwgb21hcF91ZGNfaXNvX2lycSwKKwlzdGF0dXMgPSByZXF1ZXN0X2lycShwZGV2LT5yZXNvdXJjZVszXS5zdGFydCwgb21hcF91ZGNfaXNvX2lycSwKIAkJCVNBX0lOVEVSUlVQVCwgIm9tYXBfdWRjIGlzbyIsIHVkYyk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7CiAJCUVSUigiY2FuJ3QgZ2V0IGlycSAlbGQsIGVyciAlZFxuIiwKLQkJCW9kZXYtPnJlc291cmNlWzNdLnN0YXJ0LCBzdGF0dXMpOworCQkJcGRldi0+cmVzb3VyY2VbM10uc3RhcnQsIHN0YXR1cyk7CiAJCWdvdG8gY2xlYW51cDM7CiAJfQogI2VuZGlmCkBAIC0yODUzLDExICsyODUyLDExIEBACiAKICNpZmRlZglVU0VfSVNPCiBjbGVhbnVwMzoKLQlmcmVlX2lycShvZGV2LT5yZXNvdXJjZVsyXS5zdGFydCwgdWRjKTsKKwlmcmVlX2lycShwZGV2LT5yZXNvdXJjZVsyXS5zdGFydCwgdWRjKTsKICNlbmRpZgogCiBjbGVhbnVwMjoKLQlmcmVlX2lycShvZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgdWRjKTsKKwlmcmVlX2lycShwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgdWRjKTsKIAogY2xlYW51cDE6CiAJa2ZyZWUgKHVkYyk7CkBAIC0yODY2LDE0ICsyODY1LDEzIEBACiBjbGVhbnVwMDoKIAlpZiAoeGNlaXYpCiAJCXB1dF9kZXZpY2UoeGNlaXYtPmRldik7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKG9kZXYtPnJlc291cmNlWzBdLnN0YXJ0LAotCQkJb2Rldi0+cmVzb3VyY2VbMF0uZW5kIC0gb2Rldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocGRldi0+cmVzb3VyY2VbMF0uc3RhcnQsCisJCQlwZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBwZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDEpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbnQgX19leGl0IG9tYXBfdWRjX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZXhpdCBvbWFwX3VkY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpvZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJREVDTEFSRV9DT01QTEVUSU9OKGRvbmUpOwogCiAJaWYgKCF1ZGMpCkBAIC0yODkxLDEzICsyODg5LDEzIEBACiAJcmVtb3ZlX3Byb2NfZmlsZSgpOwogCiAjaWZkZWYJVVNFX0lTTwotCWZyZWVfaXJxKG9kZXYtPnJlc291cmNlWzNdLnN0YXJ0LCB1ZGMpOworCWZyZWVfaXJxKHBkZXYtPnJlc291cmNlWzNdLnN0YXJ0LCB1ZGMpOwogI2VuZGlmCi0JZnJlZV9pcnEob2Rldi0+cmVzb3VyY2VbMl0uc3RhcnQsIHVkYyk7Ci0JZnJlZV9pcnEob2Rldi0+cmVzb3VyY2VbMV0uc3RhcnQsIHVkYyk7CisJZnJlZV9pcnEocGRldi0+cmVzb3VyY2VbMl0uc3RhcnQsIHVkYyk7CisJZnJlZV9pcnEocGRldi0+cmVzb3VyY2VbMV0uc3RhcnQsIHVkYyk7CiAKLQlyZWxlYXNlX21lbV9yZWdpb24ob2Rldi0+cmVzb3VyY2VbMF0uc3RhcnQsCi0JCQlvZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBvZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDEpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwKKwkJCXBkZXYtPnJlc291cmNlWzBdLmVuZCAtIHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsgMSk7CiAKIAlkZXZpY2VfdW5yZWdpc3RlcigmdWRjLT5nYWRnZXQuZGV2KTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkb25lKTsKQEAgLTI5MTUsNyArMjkxMyw3IEBACiAgKiBtYXkgaW52b2x2ZSB0YWxraW5nIHRvIGFuIGV4dGVybmFsIHRyYW5zY2VpdmVyIChlLmcuIGlzcDEzMDEpLgogICovCiAKLXN0YXRpYyBpbnQgb21hcF91ZGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQorc3RhdGljIGludCBvbWFwX3VkY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCiB7CiAJdTMyCWRldnN0YXQ7CiAKQEAgLTI5MzUsNyArMjkzMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb21hcF91ZGNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb21hcF91ZGNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlEQkcoInJlc3VtZSArIHdha2V1cC9TUlBcbiIpOwogCW9tYXBfcHVsbHVwKCZ1ZGMtPmdhZGdldCwgMSk7CkBAIC0yOTQ3LDE0ICsyOTQ1LDE1IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB1ZGNfZHJpdmVyID0gewotCS5uYW1lCQk9IChjaGFyICopIGRyaXZlcl9uYW1lLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHVkY19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9tYXBfdWRjX3Byb2JlLAogCS5yZW1vdmUJCT0gX19leGl0X3Aob21hcF91ZGNfcmVtb3ZlKSwKIAkuc3VzcGVuZAk9IG9tYXBfdWRjX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBvbWFwX3VkY19yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9IChjaGFyICopIGRyaXZlcl9uYW1lLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB1ZGNfaW5pdCh2b2lkKQpAQCAtMjk2NSwxMyArMjk2NCwxMyBAQAogI2VuZGlmCiAJCSIlc1xuIiwgZHJpdmVyX2Rlc2MsCiAJCXVzZV9kbWEgPyAgIiAoZG1hKSIgOiAiIik7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmdWRjX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdWRjX2RyaXZlcik7CiB9CiBtb2R1bGVfaW5pdCh1ZGNfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB1ZGNfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdWRjX2RyaXZlcik7CiB9CiBtb2R1bGVfZXhpdCh1ZGNfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5jCmluZGV4IDUxMGQyOGEuLmJiMDI4YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuYwpAQCAtMjQzMiw3ICsyNDMyLDcgQEAKIC8qCiAgKiAJcHJvYmUgLSBiaW5kcyB0byB0aGUgcGxhdGZvcm0gZGV2aWNlCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IHB4YTJ4eF91ZGNfcHJvYmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgX19pbml0IHB4YTJ4eF91ZGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgcHhhMnh4X3VkYyAqZGV2ID0gJm1lbW9yeTsKIAlpbnQgcmV0dmFsLCBvdXRfZG1hID0gMTsKQEAgLTI0OTUsMTkgKzI0OTUsMTkgQEAKICNlbmRpZgogCiAJLyogb3RoZXIgbm9uLXN0YXRpYyBwYXJ0cyBvZiBpbml0ICovCi0JZGV2LT5kZXYgPSBfZGV2OwotCWRldi0+bWFjaCA9IF9kZXYtPnBsYXRmb3JtX2RhdGE7CisJZGV2LT5kZXYgPSAmcGRldi0+ZGV2OworCWRldi0+bWFjaCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCiAJaW5pdF90aW1lcigmZGV2LT50aW1lcik7CiAJZGV2LT50aW1lci5mdW5jdGlvbiA9IHVkY193YXRjaGRvZzsKIAlkZXYtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgZGV2OwogCiAJZGV2aWNlX2luaXRpYWxpemUoJmRldi0+Z2FkZ2V0LmRldik7Ci0JZGV2LT5nYWRnZXQuZGV2LnBhcmVudCA9IF9kZXY7Ci0JZGV2LT5nYWRnZXQuZGV2LmRtYV9tYXNrID0gX2Rldi0+ZG1hX21hc2s7CisJZGV2LT5nYWRnZXQuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJZGV2LT5nYWRnZXQuZGV2LmRtYV9tYXNrID0gcGRldi0+ZGV2LmRtYV9tYXNrOwogCiAJdGhlX2NvbnRyb2xsZXIgPSBkZXY7Ci0JZGV2X3NldF9kcnZkYXRhKF9kZXYsIGRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIAogCXVkY19kaXNhYmxlKGRldik7CiAJdWRjX3JlaW5pdChkZXYpOwpAQCAtMjU1OSwxNCArMjU1OSwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBweGEyeHhfdWRjX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgdm9pZCBweGEyeHhfdWRjX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9kZXYpCiB7CiAJcHVsbHVwX29mZigpOwogfQogCi1zdGF0aWMgaW50IF9fZXhpdCBweGEyeHhfdWRjX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBfX2V4aXQgcHhhMnh4X3VkY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcHhhMnh4X3VkYyAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCXN0cnVjdCBweGEyeHhfdWRjICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCXVkY19kaXNhYmxlKGRldik7CiAJcmVtb3ZlX3Byb2NfZmlsZXMoKTsKQEAgLTI1ODAsNyArMjU4MCw3IEBACiAJCWZyZWVfaXJxKExVQkJPQ0tfVVNCX0RJU0NfSVJRLCBkZXYpOwogCQlmcmVlX2lycShMVUJCT0NLX1VTQl9JUlEsIGRldik7CiAJfQotCWRldl9zZXRfZHJ2ZGF0YShfZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAl0aGVfY29udHJvbGxlciA9IE5VTEw7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNjAxLDkgKzI2MDEsOSBAQAogICogVkJVUyBJUlFzIHNob3VsZCBwcm9iYWJseSBiZSBpZ25vcmVkIHNvIHRoYXQgdGhlIFBYQSBkZXZpY2UganVzdCBhY3RzCiAgKiAiZGVhZCIgdG8gVVNCIGhvc3RzIHVudGlsIHN5c3RlbSByZXN1bWUuCiAgKi8KLXN0YXRpYyBpbnQgcHhhMnh4X3VkY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBweGEyeHhfdWRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHB4YTJ4eF91ZGMJKnVkYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBweGEyeHhfdWRjCSp1ZGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKCF1ZGMtPm1hY2gtPnVkY19jb21tYW5kKQogCQlXQVJOKCJVU0IgaG9zdCB3b24ndCBkZXRlY3QgZGlzY29ubmVjdCFcbiIpOwpAQCAtMjYxMiw5ICsyNjEyLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBweGEyeHhfdWRjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHB4YTJ4eF91ZGNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhMnh4X3VkYwkqdWRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHB4YTJ4eF91ZGMJKnVkYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlwdWxsdXAodWRjLCAxKTsKIApAQCAtMjYyOCwyNyArMjYyOCwyOCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdWRjX2RyaXZlciA9IHsKLQkubmFtZQkJPSAicHhhMnh4LXVkYyIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdWRjX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gcHhhMnh4X3VkY19wcm9iZSwKIAkuc2h1dGRvd24JPSBweGEyeHhfdWRjX3NodXRkb3duLAogCS5yZW1vdmUJCT0gX19leGl0X3AocHhhMnh4X3VkY19yZW1vdmUpLAogCS5zdXNwZW5kCT0gcHhhMnh4X3VkY19zdXNwZW5kLAogCS5yZXN1bWUJCT0gcHhhMnh4X3VkY19yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9ICJweGEyeHgtdWRjIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgdWRjX2luaXQodm9pZCkKIHsKIAlwcmludGsoS0VSTl9JTkZPICIlczogdmVyc2lvbiAlc1xuIiwgZHJpdmVyX25hbWUsIERSSVZFUl9WRVJTSU9OKTsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKIH0KIG1vZHVsZV9pbml0KHVkY19pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IHVkY19leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnVkY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKIH0KIG1vZHVsZV9leGl0KHVkY19leGl0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jCmluZGV4IDE0NTAwODguLmRmZDliZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKQEAgLTM4Myw3ICszODMsNiBAQAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGVoY2lfcGNpX2RyaXZlciA9IHsKIAkubmFtZSA9CQkoY2hhciAqKSBoY2RfbmFtZSwKIAkuaWRfdGFibGUgPQlwY2lfaWRzLAotCS5vd25lciA9IAlUSElTX01PRFVMRSwKIAogCS5wcm9iZSA9CXVzYl9oY2RfcGNpX3Byb2JlLAogCS5yZW1vdmUgPQl1c2JfaGNkX3BjaV9yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMKaW5kZXggZjljM2Y1Yi4uODJmNjQ5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYwpAQCAtMTYzMywxNyArMTYzMywxNSBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IF9faW5pdF9vcl9tb2R1bGUgaXNwMTE2eF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXRfb3JfbW9kdWxlIGlzcDExNnhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgaXNwMTE2eCAqaXNwMTE2eDsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCiAJaWYgKCFoY2QpCiAJCXJldHVybiAwOwogCWlzcDExNnggPSBoY2RfdG9faXNwMTE2eChoY2QpOwotCXBkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOwogCXJlbW92ZV9kZWJ1Z19maWxlKGlzcDExNngpOwogCXVzYl9yZW1vdmVfaGNkKGhjZCk7CiAKQEAgLTE2NjAsMTggKzE2NTgsMTYgQEAKIAogI2RlZmluZSByZXNvdXJjZV9sZW4ocikgKCgociktPmVuZCAtIChyKS0+c3RhcnQpICsgMSkKIAotc3RhdGljIGludCBfX2luaXQgaXNwMTE2eF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBpc3AxMTZ4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHVzYl9oY2QgKmhjZDsKIAlzdHJ1Y3QgaXNwMTE2eCAqaXNwMTE2eDsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCXN0cnVjdCByZXNvdXJjZSAqYWRkciwgKmRhdGE7CiAJdm9pZCBfX2lvbWVtICphZGRyX3JlZzsKIAl2b2lkIF9faW9tZW0gKmRhdGFfcmVnOwogCWludCBpcnE7CiAJaW50IHJldCA9IDA7CiAKLQlwZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKIAlpZiAocGRldi0+bnVtX3Jlc291cmNlcyA8IDMpIHsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBlcnIxOwpAQCAtMTY4NSw3ICsxNjgxLDcgQEAKIAkJZ290byBlcnIxOwogCX0KIAotCWlmIChkZXYtPmRtYV9tYXNrKSB7CisJaWYgKHBkZXYtPmRldi5kbWFfbWFzaykgewogCQlEQkcoIkRNQSBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnIxOwpAQCAtMTcxMSw3ICsxNzA3LDcgQEAKIAl9CiAKIAkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBoY2QgKi8KLQloY2QgPSB1c2JfY3JlYXRlX2hjZCgmaXNwMTE2eF9oY19kcml2ZXIsIGRldiwgZGV2LT5idXNfaWQpOworCWhjZCA9IHVzYl9jcmVhdGVfaGNkKCZpc3AxMTZ4X2hjX2RyaXZlciwgJnBkZXYtPmRldiwgcGRldi0+ZGV2LmJ1c19pZCk7CiAJaWYgKCFoY2QpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnI1OwpAQCAtMTcyMyw3ICsxNzE5LDcgQEAKIAlpc3AxMTZ4LT5hZGRyX3JlZyA9IGFkZHJfcmVnOwogCXNwaW5fbG9ja19pbml0KCZpc3AxMTZ4LT5sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmaXNwMTE2eC0+YXN5bmMpOwotCWlzcDExNngtPmJvYXJkID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWlzcDExNngtPmJvYXJkID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAlpZiAoIWlzcDExNngtPmJvYXJkKSB7CiAJCUVSUigiUGxhdGZvcm0gZGF0YSBzdHJ1Y3R1cmUgbm90IGluaXRpYWxpemVkXG4iKTsKQEAgLTE3NjQsMTMgKzE3NjAsMTMgQEAKIC8qCiAgIFN1c3BlbmQgb2YgcGxhdGZvcm0gZGV2aWNlCiAqLwotc3RhdGljIGludCBpc3AxMTZ4X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGlzcDExNnhfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlpbnQgcmV0ID0gMDsKIAogCVZEQkcoIiVzOiBzdGF0ZSAleFxuIiwgX19mdW5jX18sIHN0YXRlKTsKIAotCWRldi0+cG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKKwlkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE3NzgsMTMgKzE3NzQsMTMgQEAKIC8qCiAgIFJlc3VtZSBwbGF0Zm9ybSBkZXZpY2UKICovCi1zdGF0aWMgaW50IGlzcDExNnhfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaXNwMTE2eF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCByZXQgPSAwOwogCi0JVkRCRygiJXM6ICBzdGF0ZSAleFxuIiwgX19mdW5jX18sIGRldi0+cG93ZXIucG93ZXJfc3RhdGUpOworCVZEQkcoIiVzOiAgc3RhdGUgJXhcbiIsIF9fZnVuY19fLCBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSk7CiAKLQlkZXYtPnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKKwlkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTc5NiwxMyArMTc5MiwxNCBAQAogCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGlzcDExNnhfZHJpdmVyID0gewotCS5uYW1lID0gKGNoYXIgKiloY2RfbmFtZSwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXNwMTE2eF9kcml2ZXIgPSB7CiAJLnByb2JlID0gaXNwMTE2eF9wcm9iZSwKIAkucmVtb3ZlID0gaXNwMTE2eF9yZW1vdmUsCiAJLnN1c3BlbmQgPSBpc3AxMTZ4X3N1c3BlbmQsCiAJLnJlc3VtZSA9IGlzcDExNnhfcmVzdW1lLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lID0gKGNoYXIgKiloY2RfbmFtZSwKKwl9LAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xODEzLDE0ICsxODEwLDE0IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJSU5GTygiZHJpdmVyICVzLCAlc1xuIiwgaGNkX25hbWUsIERSSVZFUl9WRVJTSU9OKTsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZpc3AxMTZ4X2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaXNwMTE2eF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChpc3AxMTZ4X2luaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXNwMTE2eF9jbGVhbnVwKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmlzcDExNnhfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaXNwMTE2eF9kcml2ZXIpOwogfQogCiBtb2R1bGVfZXhpdChpc3AxMTZ4X2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jCmluZGV4IGYwYzc4Y2YuLmQ5Y2YzYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdTF4eHguYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXUxeHh4LmMKQEAgLTIyNSw5ICsyMjUsOCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IG9oY2lfaGNkX2F1MXh4eF9kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCWludCByZXQ7CiAKIAlwcl9kZWJ1ZyAoIkluIG9oY2lfaGNkX2F1MXh4eF9kcnZfcHJvYmUiKTsKQEAgLTIzOSwzOSArMjM4LDM3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvaGNpX2hjZF9hdTF4eHhfZHJ2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG9oY2lfaGNkX2F1MXh4eF9kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAl1c2JfaGNkX2F1MXh4eF9yZW1vdmUoaGNkLCBwZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAkvKlRCRCovCi0vKnN0YXRpYyBpbnQgb2hjaV9oY2RfYXUxeHh4X2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKKy8qc3RhdGljIGludCBvaGNpX2hjZF9hdTF4eHhfZHJ2X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KLXN0YXRpYyBpbnQgb2hjaV9oY2RfYXUxeHh4X2Rydl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCXJldHVybiAwOwogfQogKi8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG9oY2lfaGNkX2F1MXh4eF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImF1MXh4eC1vaGNpIiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvaGNpX2hjZF9hdTF4eHhfZHJpdmVyID0gewogCS5wcm9iZQkJPSBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gb2hjaV9oY2RfYXUxeHh4X2Rydl9yZW1vdmUsCiAJLyouc3VzcGVuZAk9IG9oY2lfaGNkX2F1MXh4eF9kcnZfc3VzcGVuZCwgKi8KIAkvKi5yZXN1bWUJPSBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Jlc3VtZSwgKi8KKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiYXUxeHh4LW9oY2kiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgb2hjaV9oY2RfYXUxeHh4X2luaXQgKHZvaWQpCkBAIC0yODAsMTIgKzI3NywxMiBAQAogCXByX2RlYnVnICgiYmxvY2sgc2l6ZXM6IGVkICVkIHRkICVkXG4iLAogCQlzaXplb2YgKHN0cnVjdCBlZCksIHNpemVvZiAoc3RydWN0IHRkKSk7CiAKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZvaGNpX2hjZF9hdTF4eHhfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvaGNpX2hjZF9hdTF4eHhfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG9oY2lfaGNkX2F1MXh4eF9jbGVhbnVwICh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZvaGNpX2hjZF9hdTF4eHhfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb2hjaV9oY2RfYXUxeHh4X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0IChvaGNpX2hjZF9hdTF4eHhfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwNC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWxoN2E0MDQuYwppbmRleCAzMzZjNzY2Li4wODFlYzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwNC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1saDdhNDA0LmMKQEAgLTIwNCw5ICsyMDQsOCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb2hjaV9oY2RfbGg3YTQwNF9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJaW50IHJldDsKIAogCXByX2RlYnVnICgiSW4gb2hjaV9oY2RfbGg3YTQwNF9kcnZfcHJvYmUiKTsKQEAgLTIxOCw0MCArMjE3LDM4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvaGNpX2hjZF9saDdhNDA0X2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9saDdhNDA0X2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJdXNiX2hjZF9saDdhNDA0X3JlbW92ZShoY2QsIHBkZXYpOwogCXJldHVybiAwOwogfQogCS8qVEJEKi8KLS8qc3RhdGljIGludCBvaGNpX2hjZF9saDdhNDA0X2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKKy8qc3RhdGljIGludCBvaGNpX2hjZF9saDdhNDA0X2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW50IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCiAJcmV0dXJuIDA7CiB9CiAqLwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgb2hjaV9oY2RfbGg3YTQwNF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImxoN2E0MDQtb2hjaSIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2RfbGg3YTQwNF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gb2hjaV9oY2RfbGg3YTQwNF9kcnZfcmVtb3ZlLAogCS8qLnN1c3BlbmQJPSBvaGNpX2hjZF9saDdhNDA0X2Rydl9zdXNwZW5kLCAqLwogCS8qLnJlc3VtZQk9IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Jlc3VtZSwgKi8KKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibGg3YTQwNC1vaGNpIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG9oY2lfaGNkX2xoN2E0MDRfaW5pdCAodm9pZCkKQEAgLTI2MCwxMiArMjU3LDEyIEBACiAJcHJfZGVidWcgKCJibG9jayBzaXplczogZWQgJWQgdGQgJWRcbiIsCiAJCXNpemVvZiAoc3RydWN0IGVkKSwgc2l6ZW9mIChzdHJ1Y3QgdGQpKTsKIAotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJm9oY2lfaGNkX2xoN2E0MDRfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvaGNpX2hjZF9saDdhNDA0X2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvaGNpX2hjZF9saDdhNDA0X2NsZWFudXAgKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm9oY2lfaGNkX2xoN2E0MDRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb2hjaV9oY2RfbGg3YTQwNF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdCAob2hjaV9oY2RfbGg3YTQwNF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jCmluZGV4IGU0NmNjNTQuLmM5ZTI5ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYwpAQCAtNDMzLDI0ICs0MzMsMjIgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBvaGNpX2hjZF9vbWFwX2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG9oY2lfaGNkX29tYXBfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gdXNiX2hjZF9vbWFwX3Byb2JlKCZvaGNpX29tYXBfaGNfZHJpdmVyLAotCQkJCXRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsKKwlyZXR1cm4gdXNiX2hjZF9vbWFwX3Byb2JlKCZvaGNpX29tYXBfaGNfZHJpdmVyLCBkZXYpOwogfQogCi1zdGF0aWMgaW50IG9oY2lfaGNkX29tYXBfZHJ2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG9oY2lfaGNkX29tYXBfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCB1c2JfaGNkCQkqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl9oY2QJCSpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKIAotCXVzYl9oY2Rfb21hcF9yZW1vdmUoaGNkLCBwZGV2KTsKKwl1c2JfaGNkX29tYXBfcmVtb3ZlKGhjZCwgZGV2KTsKIAlpZiAob2hjaS0+dHJhbnNjZWl2ZXIpIHsKIAkJKHZvaWQpIG90Z19zZXRfaG9zdChvaGNpLT50cmFuc2NlaXZlciwgMCk7CiAJCXB1dF9kZXZpY2Uob2hjaS0+dHJhbnNjZWl2ZXItPmRldik7CiAJfQotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ1OSw5ICs0NTcsOSBAQAogCiAjaWZkZWYJQ09ORklHX1BNCiAKLXN0YXRpYyBpbnQgb2hjaV9vbWFwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3N0YXRpYyBpbnQgb2hjaV9vbWFwX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKIHsKLQlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CisJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2kocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KSk7CiAKIAlpZiAodGltZV9iZWZvcmUoamlmZmllcywgb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSkpCiAJCW1zbGVlcCg1KTsKQEAgLTQ3Myw5ICs0NzEsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG9oY2lfb21hcF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX29tYXBfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CisJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2kocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KSk7CiAKIAlpZiAodGltZV9iZWZvcmUoamlmZmllcywgb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSkpCiAJCW1zbGVlcCg1KTsKQEAgLTQ5NCwxNiArNDkyLDE3IEBACiAvKgogICogRHJpdmVyIGRlZmluaXRpb24gdG8gcmVnaXN0ZXIgd2l0aCB0aGUgT01BUCBidXMKICAqLwotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG9oY2lfaGNkX29tYXBfZHJpdmVyID0gewotCS5uYW1lCQk9ICJvaGNpIiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvaGNpX2hjZF9vbWFwX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb2hjaV9oY2Rfb21hcF9kcnZfcHJvYmUsCiAJLnJlbW92ZQkJPSBvaGNpX2hjZF9vbWFwX2Rydl9yZW1vdmUsCiAjaWZkZWYJQ09ORklHX1BNCiAJLnN1c3BlbmQJPSBvaGNpX29tYXBfc3VzcGVuZCwKIAkucmVzdW1lCQk9IG9oY2lfb21hcF9yZXN1bWUsCiAjZW5kaWYKKwkuZHJpdmVyCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gIm9oY2kiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBvaGNpX2hjZF9vbWFwX2luaXQgKHZvaWQpCkBAIC01MTUsMTIgKzUxNCwxMiBAQAogCXByX2RlYnVnKCIlczogYmxvY2sgc2l6ZXM6IGVkICVaZCB0ZCAlWmRcbiIsIGhjZF9uYW1lLAogCQlzaXplb2YgKHN0cnVjdCBlZCksIHNpemVvZiAoc3RydWN0IHRkKSk7CiAKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZvaGNpX2hjZF9vbWFwX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2Rfb21hcF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgb2hjaV9oY2Rfb21hcF9jbGVhbnVwICh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZvaGNpX2hjZF9vbWFwX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9oY2lfaGNkX29tYXBfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQgKG9oY2lfaGNkX29tYXBfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMKaW5kZXggN2NlMWQ5ZS4uYTU5ZTUzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYwpAQCAtMjE4LDcgKzIxOCw2IEBACiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgb2hjaV9wY2lfZHJpdmVyID0gewogCS5uYW1lID0JCShjaGFyICopIGhjZF9uYW1lLAogCS5pZF90YWJsZSA9CXBjaV9pZHMsCi0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAKIAkucHJvYmUgPQl1c2JfaGNkX3BjaV9wcm9iZSwKIAkucmVtb3ZlID0JdXNiX2hjZF9wY2lfcmVtb3ZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBwYy1zb2MuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtc29jLmMKaW5kZXggOTJjZjZmNGEuLjE4NzU1NzY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLXNvYy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtc29jLmMKQEAgLTE3Miw5ICsxNzIsOCBAQAogCS5zdGFydF9wb3J0X3Jlc2V0ID0Jb2hjaV9zdGFydF9wb3J0X3Jlc2V0LAogfTsKIAotc3RhdGljIGludCBvaGNpX2hjZF9wcGNfc29jX2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG9oY2lfaGNkX3BwY19zb2NfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCWludCByZXQ7CiAKIAlpZiAodXNiX2Rpc2FibGVkKCkpCkBAIC0xODQsMjUgKzE4MywyNSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb2hjaV9oY2RfcHBjX3NvY19kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb2hjaV9oY2RfcHBjX3NvY19kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCXVzYl9oY2RfcHBjX3NvY19yZW1vdmUoaGNkLCBwZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG9oY2lfaGNkX3BwY19zb2NfZHJpdmVyID0gewotCS5uYW1lCQk9ICJwcGMtc29jLW9oY2kiLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9oY2lfaGNkX3BwY19zb2NfZHJpdmVyID0gewogCS5wcm9iZQkJPSBvaGNpX2hjZF9wcGNfc29jX2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IG9oY2lfaGNkX3BwY19zb2NfZHJ2X3JlbW92ZSwKICNpZmRlZglDT05GSUdfUE0KIAkvKi5zdXNwZW5kCT0gb2hjaV9oY2RfcHBjX3NvY19kcnZfc3VzcGVuZCwqLwogCS8qLnJlc3VtZQk9IG9oY2lfaGNkX3BwY19zb2NfZHJ2X3Jlc3VtZSwqLwogI2VuZGlmCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInBwYy1zb2Mtb2hjaSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBvaGNpX2hjZF9wcGNfc29jX2luaXQodm9pZCkKQEAgLTIxMSwxMiArMjEwLDEyIEBACiAJcHJfZGVidWcoImJsb2NrIHNpemVzOiBlZCAlZCB0ZCAlZFxuIiwgc2l6ZW9mKHN0cnVjdCBlZCksCiAJCQkJCQkJc2l6ZW9mKHN0cnVjdCB0ZCkpOwogCi0JcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2RfcHBjX3NvY19kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9oY2lfaGNkX3BwY19zb2NfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG9oY2lfaGNkX3BwY19zb2NfY2xlYW51cCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZvaGNpX2hjZF9wcGNfc29jX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9oY2lfaGNkX3BwY19zb2NfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQob2hjaV9oY2RfcHBjX3NvY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwppbmRleCA1OWUyMDU2Li45ZDY1ZWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCkBAIC0yOTAsOSArMjkwLDggQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBvaGNpX2hjZF9weGEyN3hfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb2hjaV9oY2RfcHhhMjd4X2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlpbnQgcmV0OwogCiAJcHJfZGVidWcgKCJJbiBvaGNpX2hjZF9weGEyN3hfZHJ2X3Byb2JlIik7CkBAIC0zMDQsNDEgKzMwMywzOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb2hjaV9oY2RfcHhhMjd4X2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9weGEyN3hfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJdXNiX2hjZF9weGEyN3hfcmVtb3ZlKGhjZCwgcGRldik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb2hjaV9oY2RfcHhhMjd4X2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBvaGNpX2hjZF9weGEyN3hfZHJ2X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0vLwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0vLwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisvLwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlwcmludGsoIiVzOiBub3QgaW1wbGVtZW50ZWQgeWV0XG4iLCBfX0ZVTkNUSU9OX18pOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb2hjaV9oY2RfcHhhMjd4X2Rydl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9weGEyN3hfZHJ2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0vLwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0vLwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisvLwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlwcmludGsoIiVzOiBub3QgaW1wbGVtZW50ZWQgeWV0XG4iLCBfX0ZVTkNUSU9OX18pOwogCiAJcmV0dXJuIDA7CiB9CiAKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG9oY2lfaGNkX3B4YTI3eF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInB4YTI3eC1vaGNpIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9oY2lfaGNkX3B4YTI3eF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfcHJvYmUsCiAJLnJlbW92ZQkJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3JlbW92ZSwKIAkuc3VzcGVuZAk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfc3VzcGVuZCwgCi0JLnJlc3VtZQkJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3Jlc3VtZSwgCisJLnJlc3VtZQkJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAicHhhMjd4LW9oY2kiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBvaGNpX2hjZF9weGEyN3hfaW5pdCAodm9pZCkKQEAgLTM0NywxMiArMzQ0LDEyIEBACiAJcHJfZGVidWcgKCJibG9jayBzaXplczogZWQgJWQgdGQgJWRcbiIsCiAJCXNpemVvZiAoc3RydWN0IGVkKSwgc2l6ZW9mIChzdHJ1Y3QgdGQpKTsKIAotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJm9oY2lfaGNkX3B4YTI3eF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9oY2lfaGNkX3B4YTI3eF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgb2hjaV9oY2RfcHhhMjd4X2NsZWFudXAgKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm9oY2lfaGNkX3B4YTI3eF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvaGNpX2hjZF9weGEyN3hfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQgKG9oY2lfaGNkX3B4YTI3eF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jCmluZGV4IGVlMWZjNjAuLjM1Y2M5NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYwpAQCAtNDU5LDM5ICs0NTksMzggQEAKIAogLyogZGV2aWNlIGRyaXZlciAqLwogCi1zdGF0aWMgaW50IG9oY2lfaGNkX3MzYzI0MTBfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb2hjaV9oY2RfczNjMjQxMF9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJcmV0dXJuIHVzYl9oY2RfczNjMjQxMF9wcm9iZSgmb2hjaV9zM2MyNDEwX2hjX2RyaXZlciwgcGRldik7CiB9CiAKLXN0YXRpYyBpbnQgb2hjaV9oY2RfczNjMjQxMF9kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb2hjaV9oY2RfczNjMjQxMF9kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAl1c2JfaGNkX3MzYzI0MTBfcmVtb3ZlKGhjZCwgcGRldik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBvaGNpX2hjZF9zM2MyNDEwX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiczNjMjQxMC1vaGNpIiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvaGNpX2hjZF9zM2MyNDEwX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb2hjaV9oY2RfczNjMjQxMF9kcnZfcHJvYmUsCiAJLnJlbW92ZQkJPSBvaGNpX2hjZF9zM2MyNDEwX2Rydl9yZW1vdmUsCiAJLyouc3VzcGVuZAk9IG9oY2lfaGNkX3MzYzI0MTBfZHJ2X3N1c3BlbmQsICovCiAJLyoucmVzdW1lCT0gb2hjaV9oY2RfczNjMjQxMF9kcnZfcmVzdW1lLCAqLworCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAiczNjMjQxMC1vaGNpIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgb2hjaV9oY2RfczNjMjQxMF9pbml0ICh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJm9oY2lfaGNkX3MzYzI0MTBfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvaGNpX2hjZF9zM2MyNDEwX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvaGNpX2hjZF9zM2MyNDEwX2NsZWFudXAgKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm9oY2lfaGNkX3MzYzI0MTBfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb2hjaV9oY2RfczNjMjQxMF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdCAob2hjaV9oY2RfczNjMjQxMF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCmluZGV4IDU2MDdjMGEuLmE3NzIyYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYwpAQCAtMTYzMSwyNCArMTYzMSwyMSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIGludCBfX2RldmV4aXQKLXNsODExaF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc2w4MTFoX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHVzYl9oY2QJCSpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHNsODExCQkqc2w4MTEgPSBoY2RfdG9fc2w4MTEoaGNkKTsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZGV2OwogCXN0cnVjdCByZXNvdXJjZQkJKnJlczsKIAotCXBkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOwotCiAJcmVtb3ZlX2RlYnVnX2ZpbGUoc2w4MTEpOwogCXVzYl9yZW1vdmVfaGNkKGhjZCk7CiAKIAkvKiBzb21lIHBsYXRmb3JtcyBtYXkgdXNlIElPUkVTT1VSQ0VfSU8gKi8KLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKIAlpZiAocmVzKQogCQlpb3VubWFwKHNsODExLT5kYXRhX3JlZyk7CiAKLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAocmVzKQogCQlpb3VubWFwKHNsODExLT5hZGRyX3JlZyk7CiAKQEAgLTE2NTcsMTEgKzE2NTQsMTAgQEAKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQKLXNsODExaF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzbDgxMWhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCB1c2JfaGNkCQkqaGNkOwogCXN0cnVjdCBzbDgxMQkJKnNsODExOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXY7CiAJc3RydWN0IHJlc291cmNlCQkqYWRkciwgKmRhdGE7CiAJaW50CQkJaXJxOwogCXZvaWQgX19pb21lbQkJKmFkZHJfcmVnOwpAQCAtMTY3NCwyNCArMTY3MCwyMyBAQAogCSAqIHNwZWNpZmljIHBsYXRmb3JtX2RhdGEuICB3ZSBkb24ndCBwcm9iZSBmb3IgSVJRcywgYW5kIGRvIG9ubHkKIAkgKiBtaW5pbWFsIHNhbml0eSBjaGVja2luZy4KIAkgKi8KLQlwZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKLQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmIChwZGV2LT5udW1fcmVzb3VyY2VzIDwgMyB8fCBpcnEgPCAwKQorCWlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKKwlpZiAoZGV2LT5udW1fcmVzb3VyY2VzIDwgMyB8fCBpcnEgPCAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIHJlZnVzZSB0byBjb25mdXNlIHVzYmNvcmUgKi8KLQlpZiAoZGV2LT5kbWFfbWFzaykgeworCWlmIChkZXYtPmRldi5kbWFfbWFzaykgewogCQlEQkcoIm5vIHdlIHdvbid0IGRtYVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIHRoZSBjaGlwIG1heSBiZSB3aXJlZCBmb3IgZWl0aGVyIGtpbmQgb2YgYWRkcmVzc2luZyAqLwotCWFkZHIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCWRhdGEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCWFkZHIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJZGF0YSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKIAlyZXR2YWwgPSAtRUJVU1k7CiAJaWYgKCFhZGRyIHx8ICFkYXRhKSB7Ci0JCWFkZHIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7Ci0JCWRhdGEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMSk7CisJCWFkZHIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKKwkJZGF0YSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfSU8sIDEpOwogCQlpZiAoIWFkZHIgfHwgIWRhdGEpCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJaW9hZGRyID0gMTsKQEAgLTE3MTMsNyArMTcwOCw3IEBACiAJfQogCiAJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgaGNkICovCi0JaGNkID0gdXNiX2NyZWF0ZV9oY2QoJnNsODExaF9oY19kcml2ZXIsIGRldiwgZGV2LT5idXNfaWQpOworCWhjZCA9IHVzYl9jcmVhdGVfaGNkKCZzbDgxMWhfaGNfZHJpdmVyLCAmZGV2LT5kZXYsIGRldi0+ZGV2LmJ1c19pZCk7CiAJaWYgKCFoY2QpIHsKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBlcnI1OwpAQCAtMTcyMyw3ICsxNzE4LDcgQEAKIAogCXNwaW5fbG9ja19pbml0KCZzbDgxMS0+bG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJnNsODExLT5hc3luYyk7Ci0Jc2w4MTEtPmJvYXJkID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXNsODExLT5ib2FyZCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaW5pdF90aW1lcigmc2w4MTEtPnRpbWVyKTsKIAlzbDgxMS0+dGltZXIuZnVuY3Rpb24gPSBzbDgxMWhfdGltZXI7CiAJc2w4MTEtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgc2w4MTE7CkBAIC0xNzg1LDkgKzE3ODAsOSBAQAogICovCiAKIHN0YXRpYyBpbnQKLXNsODExaF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc2w4MTFoX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHVzYl9oY2QJKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkCSpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzbDgxMQkqc2w4MTEgPSBoY2RfdG9fc2w4MTEoaGNkKTsKIAlpbnQJCXJldHZhbCA9IDA7CiAKQEAgLTE3OTYsMjcgKzE3OTEsMjcgQEAKIAllbHNlIGlmIChzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9TVVNQRU5EKQogCQlwb3J0X3Bvd2VyKHNsODExLCAwKTsKIAlpZiAocmV0dmFsID09IDApCi0JCWRldi0+cG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKKwkJZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgaW50Ci1zbDgxMWhfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3NsODExaF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCB1c2JfaGNkCSpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZAkqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc2w4MTEJKnNsODExID0gaGNkX3RvX3NsODExKGhjZCk7CiAKIAkvKiB3aXRoIG5vICJjaGVjayB0byBzZWUgaWYgVkJVUyBpcyBzdGlsbCBwb3dlcmVkIiBib2FyZCBob29rLAogCSAqIGxldCdzIGFzc3VtZSBpdCdkIG9ubHkgYmUgcG93ZXJlZCB0byBlbmFibGUgcmVtb3RlIHdha2V1cC4KIAkgKi8KLQlpZiAoZGV2LT5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9TVVNQRU5ECisJaWYgKGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQKIAkJCXx8ICFoY2QtPmNhbl93YWtldXApIHsKIAkJc2w4MTEtPnBvcnQxID0gMDsKIAkJcG9ydF9wb3dlcihzbDgxMSwgMSk7CiAJCXJldHVybiAwOwogCX0KIAotCWRldi0+cG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOworCWRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKIAlyZXR1cm4gc2w4MTFoX2J1c19yZXN1bWUoaGNkKTsKIH0KIApAQCAtMTgyOSwxNiArMTgyNCwxNiBAQAogCiAKIC8qIHRoaXMgZHJpdmVyIGlzIGV4cG9ydGVkIHNvIHNsODExX2NzIGNhbiBkZXBlbmQgb24gaXQgKi8KLXN0cnVjdCBkZXZpY2VfZHJpdmVyIHNsODExaF9kcml2ZXIgPSB7Ci0JLm5hbWUgPQkJKGNoYXIgKikgaGNkX25hbWUsCi0JLmJ1cyA9CQkmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLm93bmVyID0JVEhJU19NT0RVTEUsCi0KK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2w4MTFoX2RyaXZlciA9IHsKIAkucHJvYmUgPQlzbDgxMWhfcHJvYmUsCiAJLnJlbW92ZSA9CV9fZGV2ZXhpdF9wKHNsODExaF9yZW1vdmUpLAogCiAJLnN1c3BlbmQgPQlzbDgxMWhfc3VzcGVuZCwKIAkucmVzdW1lID0Jc2w4MTFoX3Jlc3VtZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9CShjaGFyICopIGhjZF9uYW1lLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIEVYUE9SVF9TWU1CT0woc2w4MTFoX2RyaXZlcik7CiAKQEAgLTE4NTAsMTIgKzE4NDUsMTIgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlJTkZPKCJkcml2ZXIgJXMsICVzXG4iLCBoY2RfbmFtZSwgRFJJVkVSX1ZFUlNJT04pOwotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnNsODExaF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNsODExaF9kcml2ZXIpOwogfQogbW9kdWxlX2luaXQoc2w4MTFoX2luaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc2w4MTFoX2NsZWFudXAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmc2w4MTFoX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNsODExaF9kcml2ZXIpOwogfQogbW9kdWxlX2V4aXQoc2w4MTFoX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCmluZGV4IDE1ZTBhNTEuLmQzM2NlMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKQEAgLTgzMSw3ICs4MzEsNiBAQAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHVoY2lfcGNpX2RyaXZlciA9IHsKIAkubmFtZSA9CQkoY2hhciAqKWhjZF9uYW1lLAogCS5pZF90YWJsZSA9CXVoY2lfcGNpX2lkcywKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAogCS5wcm9iZSA9CXVzYl9oY2RfcGNpX3Byb2JlLAogCS5yZW1vdmUgPQl1c2JfaGNkX3BjaV9yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2Fjb3JuZmIuYyBiL2RyaXZlcnMvdmlkZW8vYWNvcm5mYi5jCmluZGV4IDE5M2I0ODIuLjc1MGNlYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYWNvcm5mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYWNvcm5mYi5jCkBAIC0xMjc5LDcgKzEyNzksNyBAQAogCXByaW50aygiYWNvcm5mYjogZnJlZWQgJWRLIG1lbW9yeVxuIiwgbWJfZnJlZWQpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBhY29ybmZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IGFjb3JuZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAl1X2ludCBoX3N5bmMsIHZfc3luYzsKQEAgLTEyOTIsNyArMTI5Miw3IEBACiAKIAlhY29ybmZiX2luaXRfZmJpbmZvKCk7CiAKLQljdXJyZW50X3Bhci5kZXYgPSBkZXY7CisJY3VycmVudF9wYXIuZGV2ID0gJmRldi0+ZGV2OwogCiAJaWYgKGN1cnJlbnRfcGFyLm1vbnR5cGUgPT0gLTEpCiAJCWN1cnJlbnRfcGFyLm1vbnR5cGUgPSBhY29ybmZiX2RldGVjdF9tb25pdG9ydHlwZSgpOwpAQCAtMTQ1MywxNSArMTQ1MywxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgYWNvcm5mYl9kcml2ZXIgPSB7Ci0JLm5hbWUJPSAiYWNvcm5mYiIsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFjb3JuZmJfZHJpdmVyID0gewogCS5wcm9iZQk9IGFjb3JuZmJfcHJvYmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAiYWNvcm5mYiIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGFjb3JuZmJfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmFjb3JuZmJfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhY29ybmZiX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGFjb3JuZmJfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2FyY2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL2FyY2ZiLmMKaW5kZXggYTFmYzhiYi4uMDgwZGI4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hcmNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXJjZmIuYwpAQCAtNTE0LDkgKzUxNCw4IEBACiAJLmZiX2lvY3RsIAk9IGFyY2ZiX2lvY3RsLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgYXJjZmJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2luaXQgYXJjZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXZpY2UpOwogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCWludCByZXR2YWwgPSAtRU5PTUVNOwogCWludCB2aWRlb21lbW9yeXNpemU7CkBAIC01NTksNyArNTU4LDcgQEAKIAlyZXR2YWwgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBlcnIxOwotCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CiAJaWYgKGlycSkgewogCQlwYXItPmlycSA9IGlycTsKIAkJaWYgKHJlcXVlc3RfaXJxKHBhci0+aXJxLCAmYXJjZmJfaW50ZXJydXB0LCBTQV9TSElSUSwKQEAgLTYwMCw5ICs1OTksOSBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQgYXJjZmJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgYXJjZmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXZpY2UpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChpbmZvKSB7CiAJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CkBAIC02MTIsMTEgKzYxMSwxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgYXJjZmJfZHJpdmVyID0gewotCS5uYW1lCT0gImFyY2ZiIiwKLQkuYnVzCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXJjZmJfZHJpdmVyID0gewogCS5wcm9iZQk9IGFyY2ZiX3Byb2JlLAogCS5yZW1vdmUgPSBhcmNmYl9yZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAiYXJjZmIiLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXJjZmJfZGV2aWNlOwpAQCAtNjI4LDcgKzYyOCw3IEBACiAJaWYgKCFhcmNmYl9lbmFibGUpCiAJCXJldHVybiAtRU5YSU87CiAKLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJmFyY2ZiX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhcmNmYl9kcml2ZXIpOwogCWlmICghcmV0KSB7CiAJCWFyY2ZiX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiYXJjZmIiLCAwKTsKIAkJaWYgKGFyY2ZiX2RldmljZSkgewpAQCAtNjM4LDcgKzYzOCw3IEBACiAJCX0KIAkJaWYgKHJldCkgewogCQkJcGxhdGZvcm1fZGV2aWNlX3B1dChhcmNmYl9kZXZpY2UpOwotCQkJZHJpdmVyX3VucmVnaXN0ZXIoJmFyY2ZiX2RyaXZlcik7CisJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXJjZmJfZHJpdmVyKTsKIAkJfQogCX0KIAlyZXR1cm4gcmV0OwpAQCAtNjQ4LDcgKzY0OCw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgYXJjZmJfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGFyY2ZiX2RldmljZSk7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmFyY2ZiX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmFyY2ZiX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9wYXJhbShudW1fY29scywgdWxvbmcsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2JsLmMKaW5kZXggNDg2NzQ5OC4uNmEyMTliMiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9ibC5jCkBAIC00OCw2ICs0OCwxMiBAQAogCWNvcmdpYmxfbWFjaF9zZXRfaW50ZW5zaXR5KGludGVuc2l0eSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZibF9sb2NrLCBmbGFncyk7CisKKyAJY29yZ2lfa2lja19iYXR0ID0gc3ltYm9sX2dldChzaGFycHNsX2JhdHRlcnlfa2ljayk7CisgCWlmIChjb3JnaV9raWNrX2JhdHQpIHsKKyAJCWNvcmdpX2tpY2tfYmF0dCgpOworIAkJc3ltYm9sX3B1dChzaGFycHNsX2JhdHRlcnlfa2ljayk7CisgCX0KIH0KIAogc3RhdGljIHZvaWQgY29yZ2libF9ibGFuayhpbnQgYmxhbmspCkBAIC03MywxMyArNzksMTMgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBjb3JnaWJsX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGNvcmdpYmxfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAljb3JnaWJsX2JsYW5rKEZCX0JMQU5LX1BPV0VSRE9XTik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY29yZ2libF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBjb3JnaWJsX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJY29yZ2libF9ibGFuayhGQl9CTEFOS19VTkJMQU5LKTsKIAlyZXR1cm4gMDsKQEAgLTEzNyw5ICsxNDMsOSBAQAogCiBzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmNvcmdpX2JhY2tsaWdodF9kZXZpY2U7CiAKLXN0YXRpYyBpbnQgX19pbml0IGNvcmdpYmxfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgY29yZ2libF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBjb3JnaWJsX21hY2hpbmZvICptYWNoaW5mbyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgY29yZ2libF9tYWNoaW5mbyAqbWFjaGluZm8gPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCWNvcmdpYmxfZGF0YS5tYXhfYnJpZ2h0bmVzcyA9IG1hY2hpbmZvLT5tYXhfaW50ZW5zaXR5OwogCWNvcmdpYmxfbWFjaF9zZXRfaW50ZW5zaXR5ID0gbWFjaGluZm8tPnNldF9ibF9pbnRlbnNpdHk7CkBAIC0xNTYsNyArMTYyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjb3JnaWJsX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGNvcmdpYmxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoY29yZ2lfYmFja2xpZ2h0X2RldmljZSk7CiAKQEAgLTE2NiwyMyArMTcyLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBjb3JnaWJsX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiY29yZ2ktYmwiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY29yZ2libF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGNvcmdpYmxfcHJvYmUsCiAJLnJlbW92ZQkJPSBjb3JnaWJsX3JlbW92ZSwKIAkuc3VzcGVuZAk9IGNvcmdpYmxfc3VzcGVuZCwKIAkucmVzdW1lCQk9IGNvcmdpYmxfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJjb3JnaS1ibCIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGNvcmdpYmxfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmNvcmdpYmxfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZjb3JnaWJsX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjb3JnaWJsX2V4aXQodm9pZCkKIHsKLSAJZHJpdmVyX3VucmVnaXN0ZXIoJmNvcmdpYmxfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmY29yZ2libF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChjb3JnaWJsX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9kbmZiLmMgYi9kcml2ZXJzL3ZpZGVvL2RuZmIuYwppbmRleCA5NTdhM2FkLi41YWJkM2NiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2RuZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2RuZmIuYwpAQCAtMjI3LDkgKzIyNyw4IEBACiAgKiBJbml0aWFsaXphdGlvbgogICovCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGRuZmJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2RldmluaXQgZG5mYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldmljZSk7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJaW50IGVyciA9IDA7CiAKQEAgLTI1Nyw3ICsyNTYsNyBAQAogCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogCQlyZXR1cm4gZXJyOwogCX0KLQlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOwogCiAJLyogbm93IHdlIGhhdmUgcmVnaXN0ZXJlZCB3ZSBjYW4gc2FmZWx5IHNldHVwIHRoZSBoYXJkd2FyZSAqLwogCW91dF84KEFQX0NPTlRST0xfM0EsIFJFU0VUX0NSRUcpOwpAQCAtMjcxLDEwICsyNzAsMTEgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgZG5mYl9kcml2ZXIgPSB7Ci0JLm5hbWUJPSAiZG5mYiIsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRuZmJfZHJpdmVyID0gewogCS5wcm9iZQk9IGRuZmJfcHJvYmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAiZG5mYiIsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRuZmJfZGV2aWNlID0gewpAQCAtMjg4LDEyICsyODgsMTIgQEAKIAlpZiAoZmJfZ2V0X29wdGlvbnMoImRuZmIiLCBOVUxMKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJmRuZmJfZHJpdmVyKTsKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmRuZmJfZHJpdmVyKTsKIAogCWlmICghcmV0KSB7CiAJCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG5mYl9kZXZpY2UpOwogCQlpZiAocmV0KQotCQkJZHJpdmVyX3VucmVnaXN0ZXIoJmRuZmJfZHJpdmVyKTsKKwkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkbmZiX2RyaXZlcik7CiAJfQogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2Vwc29uMTM1NWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2Vwc29uMTM1NWZiLmMKaW5kZXggNmE4MWExZC4uM2IwZTcxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9lcHNvbjEzNTVmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZXBzb24xMzU1ZmIuYwpAQCAtNjA5LDkgKzYwOSw5IEBACiB7CiB9CiAKLXN0YXRpYyBpbnQgZXBzb24xMzU1ZmJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgZXBzb24xMzU1ZmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXZpY2UpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgZXBzb24xMzU1X3BhciAqcGFyID0gaW5mby0+cGFyOwogCiAJYmFja2xpZ2h0X2VuYWJsZSgwKTsKQEAgLTYzMiw5ICs2MzIsOCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgX19pbml0IGVwc29uMTM1NWZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK2ludCBfX2luaXQgZXBzb24xMzU1ZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXZpY2UpOwogCXN0cnVjdCBlcHNvbjEzNTVfcGFyICpkZWZhdWx0X3BhcjsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAl1OCByZXZpc2lvbjsKQEAgLTcxMyw3ICs3MTIsNyBAQAogCS8qCiAJICogT3VyIGRyaXZlciBkYXRhLgogCSAqLwotCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlXG4iLAogCSAgICAgICBpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQpOwpAQCAtNzIxLDE1ICs3MjAsMTYgQEAKIAlyZXR1cm4gMDsKIAogICAgICAgYmFpbDoKLQllcHNvbjEzNTVmYl9yZW1vdmUoZGV2aWNlKTsKKwllcHNvbjEzNTVmYl9yZW1vdmUoZGV2KTsKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBlcHNvbjEzNTVmYl9kcml2ZXIgPSB7Ci0JLm5hbWUJPSAiZXBzb24xMzU1ZmIiLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBlcHNvbjEzNTVmYl9kcml2ZXIgPSB7CiAJLnByb2JlCT0gZXBzb24xMzU1ZmJfcHJvYmUsCiAJLnJlbW92ZQk9IGVwc29uMTM1NWZiX3JlbW92ZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJlcHNvbjEzNTVmYiIsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVwc29uMTM1NWZiX2RldmljZSA9IHsKQEAgLTc0NywxMSArNzQ3LDExIEBACiAJaWYgKGZiX2dldF9vcHRpb25zKCJlcHNvbjEzNTVmYiIsIE5VTEwpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldCA9IGRyaXZlcl9yZWdpc3RlcigmZXBzb24xMzU1ZmJfZHJpdmVyKTsKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmVwc29uMTM1NWZiX2RyaXZlcik7CiAJaWYgKCFyZXQpIHsKIAkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlcHNvbjEzNTVmYl9kZXZpY2UpOwogCQlpZiAocmV0KQotCQkJZHJpdmVyX3VucmVnaXN0ZXIoJmVwc29uMTM1NWZiX2RyaXZlcik7CisJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXBzb24xMzU1ZmJfZHJpdmVyKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTc2Miw3ICs3NjIsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IGVwc29uMTM1NWZiX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmZXBzb24xMzU1ZmJfZGV2aWNlKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmZXBzb24xMzU1ZmJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXBzb24xMzU1ZmJfZHJpdmVyKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9nYmVmYi5jIGIvZHJpdmVycy92aWRlby9nYmVmYi5jCmluZGV4IDlkNWU0ZjMuLmQ3NDRjNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZ2JlZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2diZWZiLmMKQEAgLTExMDUsMTIgKzExMDUsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgZ2JlZmJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgZ2JlZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcF9kZXYpCiB7CiAJaW50IGksIHJldCA9IDA7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJc3RydWN0IGdiZWZiX3BhciAqcGFyOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBfZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAjaWZuZGVmIE1PRFVMRQogCWNoYXIgKm9wdGlvbnMgPSBOVUxMOwogI2VuZGlmCkBAIC0xMjA0LDggKzEyMDMsOCBAQAogCQlnb3RvIG91dF9nYmVfdW5tYXA7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKCZwX2Rldi0+ZGV2LCBpbmZvKTsKLQlnYmVmYl9jcmVhdGVfc3lzZnMoZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwX2RldiwgaW5mbyk7CisJZ2JlZmJfY3JlYXRlX3N5c2ZzKCZwX2Rldi0+ZGV2KTsKIAogCXByaW50ayhLRVJOX0lORk8gImZiJWQ6ICVzIHJldiAlZCBAIDB4JTA4eCB1c2luZyAlZGtCIG1lbW9yeVxuIiwKIAkgICAgICAgaW5mby0+bm9kZSwgaW5mby0+Zml4LmlkLCBnYmVfcmV2aXNpb24sICh1bnNpZ25lZCkgR0JFX0JBU0UsCkBAIC0xMjMxLDEwICsxMjMwLDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBnYmVmYl9yZW1vdmUoc3RydWN0IGRldmljZSogZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgZ2JlZmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqIHBfZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBfZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoJnBfZGV2LT5kZXYpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocF9kZXYpOwogCiAJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKIAlnYmVfdHVybl9vZmYoKTsKQEAgLTEyNTIsMTggKzEyNTAsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGdiZWZiX2RyaXZlciA9IHsKLQkubmFtZSA9ICJnYmVmYiIsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGdiZWZiX2RyaXZlciA9IHsKIAkucHJvYmUgPSBnYmVmYl9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3AoZ2JlZmJfcmVtb3ZlKSwKKwkuZHJpdmVyCT0geworCQkubmFtZSA9ICJnYmVmYiIsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpnYmVmYl9kZXZpY2U7CiAKIGludCBfX2luaXQgZ2JlZmJfaW5pdCh2b2lkKQogewotCWludCByZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJmdiZWZiX2RyaXZlcik7CisJaW50IHJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZ2JlZmJfZHJpdmVyKTsKIAlpZiAoIXJldCkgewogCQlnYmVmYl9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoImdiZWZiIiwgMCk7CiAJCWlmIChnYmVmYl9kZXZpY2UpIHsKQEAgLTEyNzMsNyArMTI3Miw3IEBACiAJCX0KIAkJaWYgKHJldCkgewogCQkJcGxhdGZvcm1fZGV2aWNlX3B1dChnYmVmYl9kZXZpY2UpOwotCQkJZHJpdmVyX3VucmVnaXN0ZXIoJmdiZWZiX2RyaXZlcik7CisJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZ2JlZmJfZHJpdmVyKTsKIAkJfQogCX0KIAlyZXR1cm4gcmV0OwpAQCAtMTI4Miw3ICsxMjgxLDcgQEAKIHZvaWQgX19leGl0IGdiZWZiX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihnYmVmYl9kZXZpY2UpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZnYmVmYl9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZnYmVmYl9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChnYmVmYl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW14ZmIuYyBiL2RyaXZlcnMvdmlkZW8vaW14ZmIuYwppbmRleCBlMjBiOWYzLi41OTI0Y2MyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9pbXhmYi5jCkBAIC00MjMsMTggKzQyMywxOCBAQAogICogUG93ZXIgbWFuYWdlbWVudCBob29rcy4gIE5vdGUgdGhhdCB3ZSB3b24ndCBiZSBjYWxsZWQgZnJvbSBJUlEgY29udGV4dCwKICAqIHVubGlrZSB0aGUgYmxhbmsgZnVuY3Rpb25zIGFib3ZlLCBzbyB3ZSBtYXkgc2xlZXAuCiAgKi8KLXN0YXRpYyBpbnQgaW14ZmJfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgaW14ZmJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGlteGZiX2luZm8gKmZiaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJcHJfZGVidWcoIiVzXG4iLF9fRlVOQ1RJT05fXyk7CiAKIAlpbXhmYl9kaXNhYmxlX2NvbnRyb2xsZXIoZmJpKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpbXhmYl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBpbXhmYl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBpbXhmYl9pbmZvICpmYmkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlwcl9kZWJ1ZygiJXNcbiIsX19GVU5DVElPTl9fKTsKIAogCWlteGZiX2VuYWJsZV9jb250cm9sbGVyKGZiaSk7CkBAIC01MzgsOSArNTM4LDggQEAKIAlyZXR1cm4gZmJpLT5tYXBfY3B1ID8gMCA6IC1FTk9NRU07CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGlteGZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IGlteGZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBpbXhmYl9pbmZvICpmYmk7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJc3RydWN0IGlteGZiX21hY2hfaW5mbyAqaW5mOwpAQCAtNTUzLDIxICs1NTIsMjEgQEAKIAlpZighcmVzKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWluZiA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlpbmYgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpZighaW5mKSB7CiAJCWRldl9lcnIoZGV2LCJObyBwbGF0Zm9ybV9kYXRhIGF2YWlsYWJsZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IGlteGZiX2luZm8pLCBkZXYpOworCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IGlteGZiX2luZm8pLCAmcGRldi0+ZGV2KTsKIAlpZighaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlmYmkgPSBpbmZvLT5wYXI7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKIAotCXJldCA9IGlteGZiX2luaXRfZmJpbmZvKGRldik7CisJcmV0ID0gaW14ZmJfaW5pdF9mYmluZm8oJnBkZXYtPmRldik7CiAJaWYoIHJldCA8IDAgKQogCQlnb3RvIGZhaWxlZF9pbml0OwogCkBAIC02MjEsMjIgKzYyMCwyMSBAQAogCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CiBmYWlsZWRfY21hcDoKIAlpZiAoIWluZi0+Zml4ZWRfc2NyZWVuX2NwdSkKLQkJZG1hX2ZyZWVfd3JpdGVjb21iaW5lKGRldixmYmktPm1hcF9zaXplLGZiaS0+bWFwX2NwdSwKKwkJZG1hX2ZyZWVfd3JpdGVjb21iaW5lKCZwZGV2LT5kZXYsZmJpLT5tYXBfc2l6ZSxmYmktPm1hcF9jcHUsCiAJCSAgICAgICAgICAgZmJpLT5tYXBfZG1hKTsKIGZhaWxlZF9tYXA6CiAJa2ZyZWUoaW5mby0+cHNldWRvX3BhbGV0dGUpOwogZmFpbGVkX3JlZ3M6CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCk7CiBmYWlsZWRfaW5pdDoKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgaW14ZmJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaW14ZmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCkBAIC02NTEsMzYgKzY0OSwzNyBAQAogCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiAKIAlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7Ci0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCAgaW14ZmJfc2h1dGRvd24oc3RydWN0IGRldmljZSAqIGRldikKK3ZvaWQgIGlteGZiX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiBkZXYpCiB7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGlteGZiX2luZm8gKmZiaSA9IGluZm8tPnBhcjsKIAlpbXhmYl9kaXNhYmxlX2NvbnRyb2xsZXIoZmJpKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGlteGZiX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiaW14LWZiIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlteGZiX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gaW14ZmJfcHJvYmUsCiAJLnN1c3BlbmQJPSBpbXhmYl9zdXNwZW5kLAogCS5yZXN1bWUJCT0gaW14ZmJfcmVzdW1lLAogCS5yZW1vdmUJCT0gaW14ZmJfcmVtb3ZlLAogCS5zaHV0ZG93bgk9IGlteGZiX3NodXRkb3duLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJpbXgtZmIiLAorCX0sCiB9OwogCiBpbnQgX19pbml0IGlteGZiX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZpbXhmYl9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmlteGZiX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpbXhmYl9jbGVhbnVwKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmlteGZiX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmlteGZiX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGlteGZiX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9weGFmYi5jIGIvZHJpdmVycy92aWRlby9weGFmYi5jCmluZGV4IGYzMDVhNWIuLjdiNGNkMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcHhhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKQEAgLTk4MCwxNyArOTgwLDE3IEBACiAgKiBQb3dlciBtYW5hZ2VtZW50IGhvb2tzLiAgTm90ZSB0aGF0IHdlIHdvbid0IGJlIGNhbGxlZCBmcm9tIElSUSBjb250ZXh0LAogICogdW5saWtlIHRoZSBibGFuayBmdW5jdGlvbnMgYWJvdmUsIHNvIHdlIG1heSBzbGVlcC4KICAqLwotc3RhdGljIGludCBweGFmYl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBweGFmYl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBweGFmYl9pbmZvICpmYmkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCXNldF9jdHJscl9zdGF0ZShmYmksIENfRElTQUJMRV9QTSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHhhZmJfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcHhhZmJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHB4YWZiX2luZm8gKmZiaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlzZXRfY3RybHJfc3RhdGUoZmJpLCBDX0VOQUJMRV9QTSk7CiAJcmV0dXJuIDA7CkBAIC0xMjY4LDcgKzEyNjgsNyBAQAogfQogI2VuZGlmCiAKLWludCBfX2luaXQgcHhhZmJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoraW50IF9faW5pdCBweGFmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHB4YWZiX2luZm8gKmZiaTsKIAlzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvICppbmY7CkBAIC0xMjc2LDE0ICsxMjc2LDE0IEBACiAKIAlkZXZfZGJnKGRldiwgInB4YWZiX3Byb2JlXG4iKTsKIAotCWluZiA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlpbmYgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXJldCA9IC1FTk9NRU07CiAJZmJpID0gTlVMTDsKIAlpZiAoIWluZikKIAkJZ290byBmYWlsZWQ7CiAKICNpZmRlZiBDT05GSUdfRkJfUFhBX1BBUkFNRVRFUlMKLQlyZXQgPSBweGFmYl9wYXJzZV9vcHRpb25zKGRldiwgZ19vcHRpb25zKTsKKwlyZXQgPSBweGFmYl9wYXJzZV9vcHRpb25zKCZkZXYtPmRldiwgZ19vcHRpb25zKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBmYWlsZWQ7CiAjZW5kaWYKQEAgLTEyOTMsMzYgKzEyOTMsMzYgQEAKIAkgKiBhIHdhcm5pbmcgaXMgZ2l2ZW4uICovCiAKICAgICAgICAgaWYgKGluZi0+bGNjcjAgJiBMQ0NSMF9JTlZBTElEX0NPTkZJR19NQVNLKQotICAgICAgICAgICAgICAgIGRldl93YXJuKGRldiwgIm1hY2hpbmUgTENDUjAgc2V0dGluZyBjb250YWlucyBpbGxlZ2FsIGJpdHM6ICUwOHhcbiIsCisgICAgICAgICAgICAgICAgZGV2X3dhcm4oJmRldi0+ZGV2LCAibWFjaGluZSBMQ0NSMCBzZXR0aW5nIGNvbnRhaW5zIGlsbGVnYWwgYml0czogJTA4eFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGluZi0+bGNjcjAgJiBMQ0NSMF9JTlZBTElEX0NPTkZJR19NQVNLKTsKICAgICAgICAgaWYgKGluZi0+bGNjcjMgJiBMQ0NSM19JTlZBTElEX0NPTkZJR19NQVNLKQotICAgICAgICAgICAgICAgIGRldl93YXJuKGRldiwgIm1hY2hpbmUgTENDUjMgc2V0dGluZyBjb250YWlucyBpbGxlZ2FsIGJpdHM6ICUwOHhcbiIsCisgICAgICAgICAgICAgICAgZGV2X3dhcm4oJmRldi0+ZGV2LCAibWFjaGluZSBMQ0NSMyBzZXR0aW5nIGNvbnRhaW5zIGlsbGVnYWwgYml0czogJTA4eFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGluZi0+bGNjcjMgJiBMQ0NSM19JTlZBTElEX0NPTkZJR19NQVNLKTsKICAgICAgICAgaWYgKGluZi0+bGNjcjAgJiBMQ0NSMF9EUEQgJiYKIAkgICAgKChpbmYtPmxjY3IwICYgTENDUjBfUEFTKSAhPSBMQ0NSMF9QYXMgfHwKIAkgICAgIChpbmYtPmxjY3IwICYgTENDUjBfU0RTKSAhPSBMQ0NSMF9TbmdsIHx8CiAJICAgICAoaW5mLT5sY2NyMCAmIExDQ1IwX0NNUykgIT0gTENDUjBfTW9ubykpCi0gICAgICAgICAgICAgICAgZGV2X3dhcm4oZGV2LCAiRG91YmxlIFBpeGVsIERhdGEgKERQRCkgbW9kZSBpcyBvbmx5IHZhbGlkIGluIHBhc3NpdmUgbW9ubyIKKyAgICAgICAgICAgICAgICBkZXZfd2FybigmZGV2LT5kZXYsICJEb3VibGUgUGl4ZWwgRGF0YSAoRFBEKSBtb2RlIGlzIG9ubHkgdmFsaWQgaW4gcGFzc2l2ZSBtb25vIgogCQkJICIgc2luZ2xlIHBhbmVsIG1vZGVcbiIpOwogICAgICAgICBpZiAoKGluZi0+bGNjcjAgJiBMQ0NSMF9QQVMpID09IExDQ1IwX0FjdCAmJgogCSAgICAoaW5mLT5sY2NyMCAmIExDQ1IwX1NEUykgPT0gTENDUjBfRHVhbCkKLSAgICAgICAgICAgICAgICBkZXZfd2FybihkZXYsICJEdWFsIHBhbmVsIG9ubHkgdmFsaWQgaW4gcGFzc2l2ZSBtb2RlXG4iKTsKKyAgICAgICAgICAgICAgICBkZXZfd2FybigmZGV2LT5kZXYsICJEdWFsIHBhbmVsIG9ubHkgdmFsaWQgaW4gcGFzc2l2ZSBtb2RlXG4iKTsKICAgICAgICAgaWYgKChpbmYtPmxjY3IwICYgTENDUjBfUEFTKSA9PSBMQ0NSMF9QYXMgJiYKICAgICAgICAgICAgICAoaW5mLT51cHBlcl9tYXJnaW4gfHwgaW5mLT5sb3dlcl9tYXJnaW4pKQotICAgICAgICAgICAgICAgIGRldl93YXJuKGRldiwgIlVwcGVyIGFuZCBsb3dlciBtYXJnaW5zIG11c3QgYmUgMCBpbiBwYXNzaXZlIG1vZGVcbiIpOworICAgICAgICAgICAgICAgIGRldl93YXJuKCZkZXYtPmRldiwgIlVwcGVyIGFuZCBsb3dlciBtYXJnaW5zIG11c3QgYmUgMCBpbiBwYXNzaXZlIG1vZGVcbiIpOwogI2VuZGlmCiAKLQlkZXZfZGJnKGRldiwgImdvdCBhICVkeCVkeCVkIExDRFxuIixpbmYtPnhyZXMsIGluZi0+eXJlcywgaW5mLT5icHApOworCWRldl9kYmcoJmRldi0+ZGV2LCAiZ290IGEgJWR4JWR4JWQgTENEXG4iLGluZi0+eHJlcywgaW5mLT55cmVzLCBpbmYtPmJwcCk7CiAJaWYgKGluZi0+eHJlcyA9PSAwIHx8IGluZi0+eXJlcyA9PSAwIHx8IGluZi0+YnBwID09IDApIHsKLQkJZGV2X2VycihkZXYsICJJbnZhbGlkIHJlc29sdXRpb24gb3IgYml0IGRlcHRoXG4iKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJJbnZhbGlkIHJlc29sdXRpb24gb3IgYml0IGRlcHRoXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBmYWlsZWQ7CiAJfQogCXB4YWZiX2JhY2tsaWdodF9wb3dlciA9IGluZi0+cHhhZmJfYmFja2xpZ2h0X3Bvd2VyOwogCXB4YWZiX2xjZF9wb3dlciA9IGluZi0+cHhhZmJfbGNkX3Bvd2VyOwotCWZiaSA9IHB4YWZiX2luaXRfZmJpbmZvKGRldik7CisJZmJpID0gcHhhZmJfaW5pdF9mYmluZm8oJmRldi0+ZGV2KTsKIAlpZiAoIWZiaSkgewotCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIGZyYW1lYnVmZmVyIGRldmljZVxuIik7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgZnJhbWVidWZmZXIgZGV2aWNlXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsgLy8gb25seSByZWFzb24gZm9yIHB4YWZiX2luaXRfZmJpbmZvIHRvIGZhaWwgaXMga21hbGxvYwogCQlnb3RvIGZhaWxlZDsKIAl9CkBAIC0xMzMwLDE0ICsxMzMwLDE0IEBACiAJLyogSW5pdGlhbGl6ZSB2aWRlbyBtZW1vcnkgKi8KIAlyZXQgPSBweGFmYl9tYXBfdmlkZW9fbWVtb3J5KGZiaSk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSB2aWRlbyBSQU06ICVkXG4iLCByZXQpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSB2aWRlbyBSQU06ICVkXG4iLCByZXQpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAlyZXQgPSByZXF1ZXN0X2lycShJUlFfTENELCBweGFmYl9oYW5kbGVfaXJxLCBTQV9JTlRFUlJVUFQsICJMQ0QiLCBmYmkpOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycihkZXYsICJyZXF1ZXN0X2lycSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgInJlcXVlc3RfaXJxIGZhaWxlZDogJWRcbiIsIHJldCk7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBmYWlsZWQ7CiAJfQpAQCAtMTM0OSwxMSArMTM0OSwxMSBAQAogCXB4YWZiX2NoZWNrX3ZhcigmZmJpLT5mYi52YXIsICZmYmktPmZiKTsKIAlweGFmYl9zZXRfcGFyKCZmYmktPmZiKTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGZiaSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBmYmkpOwogCiAJcmV0ID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoJmZiaS0+ZmIpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGZyYW1lYnVmZmVyIGRldmljZTogJWRcbiIsIHJldCk7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGZyYW1lYnVmZmVyIGRldmljZTogJWRcbiIsIHJldCk7CiAJCWdvdG8gZmFpbGVkOwogCX0KIApAQCAtMTM3NiwxOSArMTM3NiwyMCBAQAogCXJldHVybiAwOwogCiBmYWlsZWQ6Ci0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAlrZnJlZShmYmkpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBweGFmYl9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInB4YTJ4eC1mYiIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBweGFmYl9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHB4YWZiX3Byb2JlLAogI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kCT0gcHhhZmJfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHB4YWZiX3Jlc3VtZSwKICNlbmRpZgorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJweGEyeHgtZmIiLAorCX0sCiB9OwogCiAjaWZuZGVmIE1PRFVMRQpAQCAtMTQxNSw3ICsxNDE2LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJcHhhZmJfc2V0dXAob3B0aW9uKTsKICNlbmRpZgotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnB4YWZiX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcHhhZmJfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQocHhhZmJfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3E0MGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3E0MGZiLmMKaW5kZXggYmZjNDFmMi4uZmM5MWRiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9xNDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcTQwZmIuYwpAQCAtODYsOSArODYsOCBAQAogCS5mYl9pbWFnZWJsaXQJPSBjZmJfaW1hZ2VibGl0LAogfTsKIAotc3RhdGljIGludCBfX2luaXQgcTQwZmJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2luaXQgcTQwZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXZpY2UpOwogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCiAJaWYgKCFNQUNIX0lTX1E0MCkKQEAgLTEyOCwxMCArMTI3LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBxNDBmYl9kcml2ZXIgPSB7Ci0JLm5hbWUJPSAicTQwZmIiLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBxNDBmYl9kcml2ZXIgPSB7CiAJLnByb2JlCT0gcTQwZmJfcHJvYmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAicTQwZmIiLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBxNDBmYl9kZXZpY2UgPSB7CkBAIC0xNDUsMTIgKzE0NSwxMiBAQAogCWlmIChmYl9nZXRfb3B0aW9ucygicTQwZmIiLCBOVUxMKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJnE0MGZiX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZxNDBmYl9kcml2ZXIpOwogCiAJaWYgKCFyZXQpIHsKIAkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZxNDBmYl9kZXZpY2UpOwogCQlpZiAocmV0KQotCQkJZHJpdmVyX3VucmVnaXN0ZXIoJnE0MGZiX2RyaXZlcik7CisJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcTQwZmJfZHJpdmVyKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vczFkMTN4eHhmYi5jIGIvZHJpdmVycy92aWRlby9zMWQxM3h4eGZiLmMKaW5kZXggM2VkYmQxNC4uZTVkMGY5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zMWQxM3h4eGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zMWQxM3h4eGZiLmMKQEAgLTUwMywxMCArNTAzLDkgQEAKIAogCiBzdGF0aWMgaW50Ci1zMWQxM3h4eGZiX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzMWQxM3h4eGZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHMxZDEzeHh4ZmJfcGFyICpwYXIgPSBOVUxMOwogCiAJaWYgKGluZm8pIHsKQEAgLTUzNCw5ICs1MzMsOCBAQAogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdAotczFkMTN4eHhmYl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzMWQxM3h4eGZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBzMWQxM3h4eGZiX3BhciAqZGVmYXVsdF9wYXI7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJc3RydWN0IHMxZDEzeHh4ZmJfcGRhdGEgKnBkYXRhID0gTlVMTDsKQEAgLTU0OCw4ICs1NDYsOCBAQAogCXByaW50ayhLRVJOX0lORk8gIkVwc29uIFMxRDEzWFhYIEZCIERyaXZlclxuIik7CiAKIAkvKiBlbmFibGUgcGxhdGZvcm0tZGVwZW5kZW50IGhhcmR3YXJlIGdsdWUsIGlmIGFueSAqLwotCWlmIChkZXYtPnBsYXRmb3JtX2RhdGEpCi0JCXBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWlmIChwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkKKwkJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCWlmIChwZGF0YSAmJiBwZGF0YS0+cGxhdGZvcm1faW5pdF92aWRlbykKIAkJcGRhdGEtPnBsYXRmb3JtX2luaXRfdmlkZW8oKTsKQEAgLTU3MiwxNCArNTcwLDE0IEBACiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwKIAkJcGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKzEsICJzMWQxM3h4eGZiIG1lbSIpKSB7Ci0JCWRldl9kYmcoZGV2LCAicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gYmFpbDsKIAl9CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwKIAkJcGRldi0+cmVzb3VyY2VbMV0uZW5kIC0gcGRldi0+cmVzb3VyY2VbMV0uc3RhcnQgKzEsICJzMWQxM3h4eGZiIHJlZ3MiKSkgewotCQlkZXZfZGJnKGRldiwgInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iKTsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIGJhaWw7CiAJfQpAQCAtNjQwLDcgKzYzOCw3IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlXG4iLAogCSAgICAgICBpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQpOwpAQCAtNjQ4LDE1ICs2NDYsMTUgQEAKIAlyZXR1cm4gMDsKIAogYmFpbDoKLQlzMWQxM3h4eGZiX3JlbW92ZShkZXYpOworCXMxZDEzeHh4ZmJfcmVtb3ZlKHBkZXYpOwogCXJldHVybiByZXQ7CiAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzMWQxM3h4eGZiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHMxZDEzeHh4ZmJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgczFkMTN4eHhmYl9wYXIgKnMxZGZiID0gaW5mby0+cGFyOwogCXN0cnVjdCBzMWQxM3h4eGZiX3BkYXRhICpwZGF0YSA9IE5VTEw7CiAKQEAgLTY2NCw4ICs2NjIsOCBAQAogCWxjZF9lbmFibGUoczFkZmIsIDApOwogCWNydF9lbmFibGUoczFkZmIsIDApOwogCi0JaWYgKGRldi0+cGxhdGZvcm1fZGF0YSkKLQkJcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJaWYgKGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpCisJCXBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogI2lmIDAKIAlpZiAoIXMxZGZiLT5kaXNwX3NhdmUpCkBAIC03MDEsOSArNjk5LDkgQEAKIAkJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczFkMTN4eHhmYl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzMWQxM3h4eGZiX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHMxZDEzeHh4ZmJfcGFyICpzMWRmYiA9IGluZm8tPnBhcjsKIAlzdHJ1Y3QgczFkMTN4eHhmYl9wZGF0YSAqcGRhdGEgPSBOVUxMOwogCkBAIC03MTQsOCArNzEyLDggQEAKIAl3aGlsZSAoKHMxZDEzeHh4ZmJfcmVhZHJlZyhzMWRmYiwgUzFEUkVHX1BTX1NUQVRVUykgJiAweDAxKSkKIAkJdWRlbGF5KDEwKTsKIAotCWlmIChkZXYtPnBsYXRmb3JtX2RhdGEpCi0JCXBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWlmIChkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKQorCQlwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAlpZiAoczFkZmItPnJlZ3Nfc2F2ZSkgewogCQkvKiB3aWxsIHdyaXRlIFJPIHJlZ3MsICpzaG91bGQqIGdldCBhd2F5IHdpdGggaXQgOikgKi8KQEAgLTc0MSwxNSArNzM5LDE2IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzMWQxM3h4eGZiX2RyaXZlciA9IHsKLQkubmFtZQkJPSBTMURfREVWSUNFTkFNRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMxZDEzeHh4ZmJfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzMWQxM3h4eGZiX3Byb2JlLAogCS5yZW1vdmUJCT0gczFkMTN4eHhmYl9yZW1vdmUsCiAjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQJPSBzMWQxM3h4eGZiX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzMWQxM3h4eGZiX3Jlc3VtZQorCS5yZXN1bWUJCT0gczFkMTN4eHhmYl9yZXN1bWUsCiAjZW5kaWYKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSBTMURfREVWSUNFTkFNRSwKKwl9LAogfTsKIAogCkBAIC03NTksMTQgKzc1OCwxNCBAQAogCWlmIChmYl9nZXRfb3B0aW9ucygiczFkMTN4eHhmYiIsIE5VTEwpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnMxZDEzeHh4ZmJfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzMWQxM3h4eGZiX2RyaXZlcik7CiB9CiAKIAogc3RhdGljIHZvaWQgX19leGl0CiBzMWQxM3h4eGZiX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmczFkMTN4eHhmYl9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzMWQxM3h4eGZiX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHMxZDEzeHh4ZmJfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3MzYzI0MTBmYi5jIGIvZHJpdmVycy92aWRlby9zM2MyNDEwZmIuYwppbmRleCA4NTVhNjc3Li5jZTZlNzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3MzYzI0MTBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vczNjMjQxMGZiLmMKQEAgLTYzNCwxOSArNjM0LDE4IEBACiAKIHN0YXRpYyBjaGFyIGRyaXZlcl9uYW1lW109InMzYzI0MTBmYiI7CiAKLWludCBfX2luaXQgczNjMjQxMGZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBfX2luaXQgczNjMjQxMGZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHMzYzI0MTBmYl9pbmZvICppbmZvOwogCXN0cnVjdCBmYl9pbmZvCSAgICpmYmluZm87Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBzM2MyNDEwZmJfaHcgKm1yZWdzOwogCWludCByZXQ7CiAJaW50IGlycTsKIAlpbnQgaTsKIAotCW1hY2hfaW5mbyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwltYWNoX2luZm8gPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpZiAobWFjaF9pbmZvID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsIm5vIHBsYXRmb3JtIGRhdGEgZm9yIGxjZCwgY2Fubm90IGF0dGFjaFxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwibm8gcGxhdGZvcm0gZGF0YSBmb3IgbGNkLCBjYW5ub3QgYXR0YWNoXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC02NTQsMTEgKzY1MywxMSBAQAogCiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAlpZiAoaXJxIDwgMCkgewotCQlkZXZfZXJyKGRldiwgIm5vIGlycSBmb3IgZGV2aWNlXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gaXJxIGZvciBkZXZpY2VcbiIpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQlmYmluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IHMzYzI0MTBmYl9pbmZvKSwgZGV2KTsKKwlmYmluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IHMzYzI0MTBmYl9pbmZvKSwgJnBkZXYtPmRldik7CiAJaWYgKCFmYmluZm8pIHsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtNjY2LDcgKzY2NSw3IEBACiAKIAlpbmZvID0gZmJpbmZvLT5wYXI7CiAJaW5mby0+ZmIgPSBmYmluZm87Ci0JZGV2X3NldF9kcnZkYXRhKGRldiwgZmJpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBmYmluZm8pOwogCiAJczNjMjQxMGZiX2luaXRfcmVnaXN0ZXJzKGluZm8pOwogCkBAIC02NzYsNyArNjc1LDcgQEAKIAogCW1lbWNweSgmaW5mby0+cmVncywgJm1hY2hfaW5mby0+cmVncywgc2l6ZW9mKGluZm8tPnJlZ3MpKTsKIAotCWluZm8tPm1hY2hfaW5mbwkJICAgID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWluZm8tPm1hY2hfaW5mbwkJICAgID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAlmYmluZm8tPmZpeC50eXBlCSAgICA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKIAlmYmluZm8tPmZpeC50eXBlX2F1eAkgICAgPSAwOwpAQCAtNzM1LDcgKzczNCw3IEBACiAKIAlyZXQgPSByZXF1ZXN0X2lycShpcnEsIHMzYzI0MTBmYl9pcnEsIFNBX0lOVEVSUlVQVCwgcGRldi0+bmFtZSwgaW5mbyk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgaXJxICVkIC0gZXJyICVkXG4iLCBpcnEsIHJldCk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBnZXQgaXJxICVkIC0gZXJyICVkXG4iLCBpcnEsIHJldCk7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byByZWxlYXNlX21lbTsKIAl9CkBAIC03NzMsNyArNzcyLDcgQEAKIAl9CiAKIAkvKiBjcmVhdGUgZGV2aWNlIGZpbGVzICovCi0JZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlYnVnKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2RlYnVnKTsKIAogCXByaW50ayhLRVJOX0lORk8gImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBkZXZpY2VcbiIsCiAJCWZiaW5mby0+bm9kZSwgZmJpbmZvLT5maXguaWQpOwpAQCAtODE2LDEwICs4MTUsOSBAQAogLyoKICAqICBDbGVhbnVwCiAgKi8KLXN0YXRpYyBpbnQgczNjMjQxMGZiX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0MTBmYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IGZiX2luZm8JICAgKmZiaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmYl9pbmZvCSAgICpmYmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgczNjMjQxMGZiX2luZm8gKmluZm8gPSBmYmluZm8tPnBhcjsKIAlpbnQgaXJxOwogCkBAIC04NDcsOSArODQ1LDkgQEAKIAogLyogc3VzcGVuZCBhbmQgcmVzdW1lIHN1cHBvcnQgZm9yIHRoZSBsY2QgY29udHJvbGxlciAqLwogCi1zdGF0aWMgaW50IHMzYzI0MTBmYl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzM2MyNDEwZmJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgZmJfaW5mbwkgICAqZmJpbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGZiX2luZm8JICAgKmZiaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHMzYzI0MTBmYl9pbmZvICppbmZvID0gZmJpbmZvLT5wYXI7CiAKIAlzM2MyNDEwZmJfc3RvcF9sY2QoKTsKQEAgLTg2NCw5ICs4NjIsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHMzYzI0MTBmYl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNDEwZmJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmJfaW5mbwkgICAqZmJpbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGZiX2luZm8JICAgKmZiaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHMzYzI0MTBmYl9pbmZvICppbmZvID0gZmJpbmZvLT5wYXI7CiAKIAljbGtfZW5hYmxlKGluZm8tPmNsayk7CkBAIC04ODIsMjQgKzg4MCwyNSBAQAogI2RlZmluZSBzM2MyNDEwZmJfcmVzdW1lICBOVUxMCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHMzYzI0MTBmYl9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInMzYzI0MTAtbGNkIiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2MyNDEwZmJfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzM2MyNDEwZmJfcHJvYmUsCisJLnJlbW92ZQkJPSBzM2MyNDEwZmJfcmVtb3ZlLAogCS5zdXNwZW5kCT0gczNjMjQxMGZiX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzM2MyNDEwZmJfcmVzdW1lLAotCS5yZW1vdmUJCT0gczNjMjQxMGZiX3JlbW92ZQorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzM2MyNDEwLWxjZCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCiB9OwogCiBpbnQgX19kZXZpbml0IHMzYzI0MTBmYl9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmczNjMjQxMGZiX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMGZiX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzM2MyNDEwZmJfY2xlYW51cCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDEwZmJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjMjQxMGZiX2RyaXZlcik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zYTExMDBmYi5jIGIvZHJpdmVycy92aWRlby9zYTExMDBmYi5jCmluZGV4IGE1MTg0NTcuLjJlYTEzNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2ExMTAwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NhMTEwMGZiLmMKQEAgLTEzMDgsMTcgKzEzMDgsMTcgQEAKICAqIFBvd2VyIG1hbmFnZW1lbnQgaG9va3MuICBOb3RlIHRoYXQgd2Ugd29uJ3QgYmUgY2FsbGVkIGZyb20gSVJRIGNvbnRleHQsCiAgKiB1bmxpa2UgdGhlIGJsYW5rIGZ1bmN0aW9ucyBhYm92ZSwgc28gd2UgbWF5IHNsZWVwLgogICovCi1zdGF0aWMgaW50IHNhMTEwMGZiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNhMTEwMGZiX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHNhMTEwMGZiX2luZm8gKmZiaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzYTExMDBmYl9pbmZvICpmYmkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJc2V0X2N0cmxyX3N0YXRlKGZiaSwgQ19ESVNBQkxFX1BNKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYTExMDBmYl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzYTExMDBmYl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBzYTExMDBmYl9pbmZvICpmYmkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2ExMTAwZmJfaW5mbyAqZmJpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCXNldF9jdHJscl9zdGF0ZShmYmksIENfRU5BQkxFX1BNKTsKIAlyZXR1cm4gMDsKQEAgLTE0NTIsNyArMTQ1Miw3IEBACiAJcmV0dXJuIGZiaTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgc2ExMTAwZmJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgc2ExMTAwZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc2ExMTAwZmJfaW5mbyAqZmJpOwogCWludCByZXQ7CkBAIC0xNDYwLDcgKzE0NjAsNyBAQAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKDB4YjAxMDAwMDAsIDB4MTAwMDAsICJMQ0QiKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCWZiaSA9IHNhMTEwMGZiX2luaXRfZmJpbmZvKGRldik7CisJZmJpID0gc2ExMTAwZmJfaW5pdF9mYmluZm8oJnBkZXYtPmRldik7CiAJcmV0ID0gLUVOT01FTTsKIAlpZiAoIWZiaSkKIAkJZ290byBmYWlsZWQ7CkBAIC0xNDg4LDcgKzE0ODgsNyBAQAogCSAqLwogCXNhMTEwMGZiX2NoZWNrX3ZhcigmZmJpLT5mYi52YXIsICZmYmktPmZiKTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGZiaSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZmJpKTsKIAogCXJldCA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYmktPmZiKTsKIAlpZiAocmV0IDwgMCkKQEAgLTE1MDUsMTggKzE1MDUsMTkgQEAKIAlyZXR1cm4gMDsKIAogZmFpbGVkOgotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWtmcmVlKGZiaSk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKDB4YjAxMDAwMDAsIDB4MTAwMDApOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzYTExMDBmYl9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInNhMTF4MC1mYiIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzYTExMDBmYl9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNhMTEwMGZiX3Byb2JlLAogCS5zdXNwZW5kCT0gc2ExMTAwZmJfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNhMTEwMGZiX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAic2ExMXgwLWZiIiwKKwl9LAogfTsKIAogaW50IF9faW5pdCBzYTExMDBmYl9pbml0KHZvaWQpCkBAIC0xNTI0LDcgKzE1MjUsNyBAQAogCWlmIChmYl9nZXRfb3B0aW9ucygic2ExMTAwZmIiLCBOVUxMKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZzYTExMDBmYl9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNhMTEwMGZiX2RyaXZlcik7CiB9CiAKIGludCBfX2luaXQgc2ExMTAwZmJfc2V0dXAoY2hhciAqb3B0aW9ucykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2dpdndmYi5jIGIvZHJpdmVycy92aWRlby9zZ2l2d2ZiLmMKaW5kZXggMmU4NzY5ZC4uNzA1NDY2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zZ2l2d2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zZ2l2d2ZiLmMKQEAgLTc1MCw5ICs3NTAsOCBAQAogLyoKICAqICBJbml0aWFsaXNhdGlvbgogICovCi1zdGF0aWMgaW50IF9faW5pdCBzZ2l2d2ZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19pbml0IHNnaXZ3ZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXZpY2UpOwogCXN0cnVjdCBzZ2l2d19wYXIgKnBhcjsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAljaGFyICptb25pdG9yOwpAQCAtODEzLDcgKzgxMiw3IEBACiAJCWdvdG8gZmFpbF9yZWdpc3Rlcl9mcmFtZWJ1ZmZlcjsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiZmIlZDogU0dJIERCRSBmcmFtZSBidWZmZXIgZGV2aWNlLCB1c2luZyAlbGRLIG9mIHZpZGVvIG1lbW9yeSBhdCAlI2x4XG4iLCAgICAgIAogCQlpbmZvLT5ub2RlLCBzZ2l2d2ZiX21lbV9zaXplID4+IDEwLCBzZ2l2d2ZiX21lbV9waHlzKTsKQEAgLTgzMSw5ICs4MzAsOSBAQAogCXJldHVybiAtRU5YSU87CiB9CiAKLXN0YXRpYyBpbnQgc2dpdndmYl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBzZ2l2d2ZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoaW5mbykgewogCQlzdHJ1Y3Qgc2dpdndfcGFyICpwYXIgPSBpbmZvLT5wYXI7CkBAIC04NDcsMTEgKzg0NiwxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc2dpdndmYl9kcml2ZXIgPSB7Ci0JLm5hbWUJPSAic2dpdndmYiIsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNnaXZ3ZmJfZHJpdmVyID0gewogCS5wcm9iZQk9IHNnaXZ3ZmJfcHJvYmUsCiAJLnJlbW92ZQk9IHNnaXZ3ZmJfcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gInNnaXZ3ZmIiLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2dpdndmYl9kZXZpY2U7CkBAIC04NjcsNyArODY3LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJc2dpdndmYl9zZXR1cChvcHRpb24pOwogI2VuZGlmCi0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZzZ2l2d2ZiX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzZ2l2d2ZiX2RyaXZlcik7CiAJaWYgKCFyZXQpIHsKIAkJc2dpdndmYl9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNnaXZ3ZmIiLCAwKTsKIAkJaWYgKHNnaXZ3ZmJfZGV2aWNlKSB7CkBAIC04NzUsNyArODc1LDcgQEAKIAkJfSBlbHNlCiAJCQlyZXQgPSAtRU5PTUVNOwogCQlpZiAocmV0KSB7Ci0JCQlkcml2ZXJfdW5yZWdpc3Rlcigmc2dpdndmYl9kcml2ZXIpOworCQkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNnaXZ3ZmJfZHJpdmVyKTsKIAkJCXBsYXRmb3JtX2RldmljZV9wdXQoc2dpdndmYl9kZXZpY2UpOwogCQl9CiAJfQpAQCAtODkwLDcgKzg5MCw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgc2dpdndmYl9leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoc2dpdndmYl9kZXZpY2UpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZzZ2l2d2ZiX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNnaXZ3ZmJfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2V4aXQoc2dpdndmYl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmVzYWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3Zlc2FmYi5jCmluZGV4IGUyNWVhZTEuLjJjM2FhMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmVzYWZiLmMKKysrIGIvZHJpdmVycy92aWRlby92ZXNhZmIuYwpAQCAtMjQ1LDkgKzI0NSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHZlc2FmYl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9faW5pdCB2ZXNhZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXZpY2UpOwogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCWludCBpLCBlcnI7CiAJdW5zaWduZWQgaW50IHNpemVfdm1vZGU7CkBAIC00ODAsMTAgKzQ3OSwxMSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB2ZXNhZmJfZHJpdmVyID0gewotCS5uYW1lCT0gInZlc2FmYiIsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZlc2FmYl9kcml2ZXIgPSB7CiAJLnByb2JlCT0gdmVzYWZiX3Byb2JlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gInZlc2FmYiIsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZlc2FmYl9kZXZpY2UgPSB7CkBAIC00OTgsMTIgKzQ5OCwxMiBAQAogCS8qIGlnbm9yZSBlcnJvciByZXR1cm4gb2YgZmJfZ2V0X29wdGlvbnMgKi8KIAlmYl9nZXRfb3B0aW9ucygidmVzYWZiIiwgJm9wdGlvbik7CiAJdmVzYWZiX3NldHVwKG9wdGlvbik7Ci0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZ2ZXNhZmJfZHJpdmVyKTsKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnZlc2FmYl9kcml2ZXIpOwogCiAJaWYgKCFyZXQpIHsKIAkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2ZXNhZmJfZGV2aWNlKTsKIAkJaWYgKHJldCkKLQkJCWRyaXZlcl91bnJlZ2lzdGVyKCZ2ZXNhZmJfZHJpdmVyKTsKKwkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2ZXNhZmJfZHJpdmVyKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmZiLmMgYi9kcml2ZXJzL3ZpZGVvL3ZmYi5jCmluZGV4IDg3OTRkYzUuLmZmYTFhZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmZiLmMKKysrIGIvZHJpdmVycy92aWRlby92ZmIuYwpAQCAtNDAzLDkgKzQwMyw4IEBACiAJLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgcmVmZXJlbmNlIGNvdW50IGdvZXMgdG8gemVyby4KIH0KIAotc3RhdGljIGludCBfX2luaXQgdmZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19pbml0IHZmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldmljZSk7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJaW50IHJldHZhbCA9IC1FTk9NRU07CiAKQEAgLTQ0Nyw3ICs0NDYsNyBAQAogCXJldHZhbCA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwogCWlmIChyZXR2YWwgPCAwKQogCQlnb3RvIGVycjI7Ci0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKIAogCXByaW50ayhLRVJOX0lORk8KIAkgICAgICAgImZiJWQ6IFZpcnR1YWwgZnJhbWUgYnVmZmVyIGRldmljZSwgdXNpbmcgJWxkSyBvZiB2aWRlbyBtZW1vcnlcbiIsCkBAIC00NjIsOSArNDYxLDkgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgaW50IHZmYl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCB2ZmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXZpY2UpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChpbmZvKSB7CiAJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CkBAIC00NzQsMTEgKzQ3MywxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdmZiX2RyaXZlciA9IHsKLQkubmFtZQk9ICJ2ZmIiLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2ZmJfZHJpdmVyID0gewogCS5wcm9iZQk9IHZmYl9wcm9iZSwKIAkucmVtb3ZlID0gdmZiX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJ2ZmIiLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2ZmJfZGV2aWNlID0gewpAQCAtNTA0LDEyICs1MDQsMTIgQEAKIAlpZiAoIXZmYl9lbmFibGUpCiAJCXJldHVybiAtRU5YSU87CiAKLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJnZmYl9kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdmZiX2RyaXZlcik7CiAKIAlpZiAoIXJldCkgewogCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnZmYl9kZXZpY2UpOwogCQlpZiAocmV0KQotCQkJZHJpdmVyX3VucmVnaXN0ZXIoJnZmYl9kcml2ZXIpOworCQkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnZmYl9kcml2ZXIpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtNTIwLDcgKzUyMCw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgdmZiX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmdmZiX2RldmljZSk7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnZmYl9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2ZmJfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2V4aXQodmZiX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby93MTAwZmIuYyBiL2RyaXZlcnMvdmlkZW8vdzEwMGZiLmMKaW5kZXggNDhlNzBmMS4uZGFhNDYwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby93MTAwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3cxMDBmYi5jCkBAIC00MzcsOSArNDM3LDkgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgdzEwMGZiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHcxMDBmYl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCB3MTAwZmJfcGFyICpwYXI9aW5mby0+cGFyOwogCXN0cnVjdCB3MTAwX3RnX2luZm8gKnRnID0gcGFyLT5tYWNoLT50ZzsKIApAQCAtNDUyLDkgKzQ1Miw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdzEwMGZiX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHcxMDBmYl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCB3MTAwZmJfcGFyICpwYXI9aW5mby0+cGFyOwogCXN0cnVjdCB3MTAwX3RnX2luZm8gKnRnID0gcGFyLT5tYWNoLT50ZzsKIApAQCAtNDczLDEzICs0NzMsMTIgQEAKICNlbmRpZgogCiAKLWludCBfX2luaXQgdzEwMGZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBfX2luaXQgdzEwMGZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IGVyciA9IC1FSU87CiAJc3RydWN0IHcxMDBmYl9tYWNoX2luZm8gKmluZjsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IE5VTEw7CiAJc3RydWN0IHcxMDBmYl9wYXIgKnBhcjsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHJlc291cmNlICptZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCXVuc2lnbmVkIGludCBjaGlwX2lkOwogCkBAIC01MjIsOSArNTIxLDkgQEAKIAl9CiAKIAlwYXIgPSBpbmZvLT5wYXI7Ci0JZGV2X3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CiAKLQlpbmYgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJaW5mID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJcGFyLT5jaGlwX2lkID0gY2hpcF9pZDsKIAlwYXItPm1hY2ggPSBpbmY7CiAJcGFyLT5mYXN0cGxsX21vZGUgPSAwOwpAQCAtNjAwLDEwICs1OTksMTAgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2Zhc3RwbGxjbGspOwotCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9yZWdfcmVhZCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3JlZ193cml0ZSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2ZsaXApOworCWRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfZmFzdHBsbGNsayk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9yZWdfcmVhZCk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9yZWdfd3JpdGUpOworCWRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfZmxpcCk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlXG4iLCBpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQpOwogCXJldHVybiAwOwpAQCAtNjIyLDE1ICs2MjEsMTUgQEAKIH0KIAogCi1zdGF0aWMgaW50IHcxMDBmYl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCB3MTAwZmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCB3MTAwZmJfcGFyICpwYXI9aW5mby0+cGFyOwogCi0JZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2Zhc3RwbGxjbGspOwotCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9yZWdfcmVhZCk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3JlZ193cml0ZSk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2ZsaXApOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfZmFzdHBsbGNsayk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9yZWdfcmVhZCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9yZWdfd3JpdGUpOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfZmxpcCk7CiAKIAl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwogCkBAIC0xNDQ4LDIzICsxNDQ3LDI0IEBACiAJd3JpdGVsKDB4MDAwMDAwMDIsIHJlbWFwcGVkX3JlZ3MgKyBtbUdFTl9JTlRfU1RBVFVTKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHcxMDBmYl9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gIncxMDBmYiIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3MTAwZmJfZHJpdmVyID0gewogCS5wcm9iZQkJPSB3MTAwZmJfcHJvYmUsCiAJLnJlbW92ZQkJPSB3MTAwZmJfcmVtb3ZlLAogCS5zdXNwZW5kCT0gdzEwMGZiX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSB3MTAwZmJfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJ3MTAwZmIiLAorCX0sCiB9OwogCiBpbnQgX19kZXZpbml0IHcxMDBmYl9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmdzEwMGZiX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdzEwMGZiX2RyaXZlcik7CiB9CiAKIHZvaWQgX19leGl0IHcxMDBmYl9jbGVhbnVwKHZvaWQpCiB7Ci0gCWRyaXZlcl91bnJlZ2lzdGVyKCZ3MTAwZmJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdzEwMGZiX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHcxMDBmYl9pbml0KTsKZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnCmluZGV4IDdkNmFlMzYuLmQ1MjU1ZTYgMTAwNjQ0Ci0tLSBhL2ZzL0tjb25maWcKKysrIGIvZnMvS2NvbmZpZwpAQCAtMTYwMSw5ICsxNjAxLDEwIEBACiAJICBQQyBvcGVyYXRpbmcgc3lzdGVtcy4gIFRoZSBDSUZTIHByb3RvY29sIGlzIGZ1bGx5IHN1cHBvcnRlZCBieSAKIAkgIGZpbGUgc2VydmVycyBzdWNoIGFzIFdpbmRvd3MgMjAwMCAoaW5jbHVkaW5nIFdpbmRvd3MgMjAwMywgTlQgNCAgCiAJICBhbmQgV2luZG93cyBYUCkgYXMgd2VsbCBieSBTYW1iYSAod2hpY2ggcHJvdmlkZXMgZXhjZWxsZW50IENJRlMKLQkgIHNlcnZlciBzdXBwb3J0IGZvciBMaW51eCBhbmQgbWFueSBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcykuIEN1cnJlbnRseQotCSAgeW91IG11c3QgdXNlIHRoZSBzbWJmcyBjbGllbnQgZmlsZXN5c3RlbSB0byBhY2Nlc3Mgb2xkZXIgU01CIHNlcnZlcnMKLQkgIHN1Y2ggYXMgV2luZG93cyA5eCBhbmQgT1MvMi4KKwkgIHNlcnZlciBzdXBwb3J0IGZvciBMaW51eCBhbmQgbWFueSBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcykuIExpbWl0ZWQKKwkgIHN1cHBvcnQgZm9yIFdpbmRvd3MgTUUgYW5kIHNpbWlsYXIgc2VydmVycyBpcyBwcm92aWRlZCBhcyB3ZWxsLiAKKwkgIFlvdSBtdXN0IHVzZSB0aGUgc21iZnMgY2xpZW50IGZpbGVzeXN0ZW0gdG8gYWNjZXNzIG9sZGVyIFNNQiBzZXJ2ZXJzCisJICBzdWNoIGFzIE9TLzIgYW5kIERPUy4KIAogCSAgVGhlIGludGVudCBvZiB0aGUgY2lmcyBtb2R1bGUgaXMgdG8gcHJvdmlkZSBhbiBhZHZhbmNlZAogCSAgbmV0d29yayBmaWxlIHN5c3RlbSBjbGllbnQgZm9yIG1vdW50aW5nIHRvIENJRlMgY29tcGxpYW50IHNlcnZlcnMsIApAQCAtMTYxNCw3ICsxNjE1LDcgQEAKIAkgIGNpZnMgaWYgcnVubmluZyBvbmx5IGEgKFNhbWJhKSBzZXJ2ZXIuIEl0IGlzIHBvc3NpYmxlIHRvIGVuYWJsZSBib3RoCiAJICBzbWJmcyBhbmQgY2lmcyAoZS5nLiBpZiB5b3UgYXJlIHVzaW5nIENJRlMgZm9yIGFjY2Vzc2luZyBXaW5kb3dzIDIwMDMKIAkgIGFuZCBTYW1iYSAzIHNlcnZlcnMsIGFuZCBzbWJmcyBmb3IgYWNjZXNzaW5nIG9sZCBzZXJ2ZXJzKS4gSWYgeW91IG5lZWQgCi0JICB0byBtb3VudCB0byBTYW1iYSBvciBXaW5kb3dzIDIwMDMgc2VydmVycyBmcm9tIHRoaXMgbWFjaGluZSwgc2F5IFkuCisJICB0byBtb3VudCB0byBTYW1iYSBvciBXaW5kb3dzIGZyb20gdGhpcyBtYWNoaW5lLCBzYXkgWS4KIAogY29uZmlnIENJRlNfU1RBVFMKICAgICAgICAgYm9vbCAiQ0lGUyBzdGF0aXN0aWNzIgpAQCAtMTYyMyw4ICsxNjI0LDIyIEBACiAgICAgICAgICAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBjYXVzZSBzdGF0aXN0aWNzIGZvciBlYWNoIHNlcnZlciBzaGFyZQogCSAgbW91bnRlZCBieSB0aGUgY2lmcyBjbGllbnQgdG8gYmUgZGlzcGxheWVkIGluIC9wcm9jL2ZzL2NpZnMvU3RhdHMKIAorY29uZmlnIENJRlNfU1RBVFMyCisJYm9vbCAiQ0lGUyBleHRlbmRlZCBzdGF0aXN0aWNzIgorCWRlcGVuZHMgb24gQ0lGU19TVEFUUworCWhlbHAKKwkgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgYWxsb3cgbW9yZSBkZXRhaWxlZCBzdGF0aXN0aWNzIG9uIFNNQgorCSAgcmVxdWVzdCB0aW1pbmcgdG8gYmUgZGlzcGxheWVkIGluIC9wcm9jL2ZzL2NpZnMvRGVidWdEYXRhIGFuZCBhbHNvCisJICBhbGxvdyBvcHRpb25hbCBsb2dnaW5nIG9mIHNsb3cgcmVzcG9uc2VzIHRvIGRtZXNnIChkZXBlbmRpbmcgb24gdGhlCisJICB2YWx1ZSBvZiAvcHJvYy9mcy9jaWZzL2NpZnNGWUksIHNlZSBmcy9jaWZzL1JFQURNRSBmb3IgbW9yZSBkZXRhaWxzKS4KKwkgIFRoZXNlIGFkZGl0aW9uYWwgc3RhdGlzdGljcyBtYXkgaGF2ZSBhIG1pbm9yIGVmZmVjdCBvbiBwZXJmb3JtYW5jZQorCSAgYW5kIG1lbW9yeSB1dGlsaXphdGlvbi4KKworCSAgVW5sZXNzIHlvdSBhcmUgYSBkZXZlbG9wZXIgb3IgYXJlIGRvaW5nIG5ldHdvcmsgcGVyZm9ybWFuY2UgYW5hbHlzaXMKKwkgIG9yIHR1bmluZywgc2F5IE4uCisKIGNvbmZpZyBDSUZTX1hBVFRSCi0gICAgICAgIGJvb2wgIkNJRlMgZXh0ZW5kZWQgYXR0cmlidXRlcyAoRVhQRVJJTUVOVEFMKSIKKyAgICAgICAgYm9vbCAiQ0lGUyBleHRlbmRlZCBhdHRyaWJ1dGVzIgogICAgICAgICBkZXBlbmRzIG9uIENJRlMKICAgICAgICAgaGVscAogICAgICAgICAgIEV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5hbWU6dmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGlub2RlcyBieQpAQCAtMTYzNiwxMSArMTY1MSwxMSBAQAogICAgICAgICAgIHByZWZhY2VkIGJ5IHRoZSB1c2VyIG5hbWVzcGFjZSBwcmVmaXguIFRoZSBzeXN0ZW0gbmFtZXNwYWNlCiAgICAgICAgICAgKHVzZWQgYnkgc29tZSBmaWxlc3lzdGVtcyB0byBzdG9yZSBBQ0xzKSBpcyBub3Qgc3VwcG9ydGVkIGF0CiAgICAgICAgICAgdGhpcyB0aW1lLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIENJRlNfUE9TSVgKLSAgICAgICAgYm9vbCAiQ0lGUyBQT1NJWCBFeHRlbnNpb25zIChFWFBFUklNRU5UQUwpIgorICAgICAgICBib29sICJDSUZTIFBPU0lYIEV4dGVuc2lvbnMiCiAgICAgICAgIGRlcGVuZHMgb24gQ0lGU19YQVRUUgogICAgICAgICBoZWxwCiAgICAgICAgICAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBjYXVzZSB0aGUgY2lmcyBjbGllbnQgdG8gYXR0ZW1wdCB0bwpAQCAtMTY1MywxMCArMTY2OCwyOCBAQAogCiBjb25maWcgQ0lGU19FWFBFUklNRU5UQUwKIAkgIGJvb2wgIkNJRlMgRXhwZXJpbWVudGFsIEZlYXR1cmVzIChFWFBFUklNRU5UQUwpIgotCSAgZGVwZW5kcyBvbiBDSUZTCisJICBkZXBlbmRzIG9uIENJRlMgJiYgRVhQRVJJTUVOVEFMCiAJICBoZWxwCi0JICAgIEVuYWJsZXMgY2lmcyBmZWF0dXJlcyB1bmRlciB0ZXN0aW5nLiBUaGVzZSBmZWF0dXJlcwotCSAgICBhcmUgaGlnaGx5IGV4cGVyaW1lbnRhbC4gIElmIHVuc3VyZSwgc2F5IE4uCisJICAgIEVuYWJsZXMgY2lmcyBmZWF0dXJlcyB1bmRlciB0ZXN0aW5nLiBUaGVzZSBmZWF0dXJlcyBhcmUKKwkgICAgZXhwZXJpbWVudGFsIGFuZCBjdXJyZW50bHkgaW5jbHVkZSBzdXBwb3J0IGZvciB3cml0ZXBhZ2VzCisJICAgIChtdWx0aXBhZ2Ugd3JpdGViZWhpbmQgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzKSBhbmQgZGlyZWN0b3J5CisJICAgIGNoYW5nZSBub3RpZmljYXRpb24gaWUgZmNudGwoRl9ETk9USUZZKSBhcyB3ZWxsIGFzIHNvbWUgc2VjdXJpdHkKKwkgICAgaW1wcm92ZW1lbnRzLiAgU29tZSBhbHNvIGRlcGVuZCBvbiBzZXR0aW5nIGF0IHJ1bnRpbWUgdGhlCisJICAgIHBzZXVkby1maWxlIC9wcm9jL2ZzL2NpZnMvRXhwZXJpbWVudGFsICh3aGljaCBpcyBkaXNhYmxlZCBieQorCSAgICBkZWZhdWx0KS4gU2VlIHRoZSBmaWxlIGZzL2NpZnMvUkVBRE1FIGZvciBtb3JlIGRldGFpbHMuCisKKwkgICAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIENJRlNfVVBDQUxMCisJICBib29sICJDSUZTIEtlcmJlcm9zL1NQTkVHTyBhZHZhbmNlZCBzZXNzaW9uIHNldHVwIChFWFBFUklNRU5UQUwpIgorCSAgZGVwZW5kcyBvbiBDSUZTX0VYUEVSSU1FTlRBTAorCSAgc2VsZWN0IENPTk5FQ1RPUgorCSAgaGVscAorCSAgICBFbmFibGVzIGFuIHVwY2FsbCBtZWNoYW5pc20gZm9yIENJRlMgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGNvbnRhY3QKKwkgICAgdXNlcnNwYWNlIGhlbHBlciB1dGlsaXRpZXMgdG8gcHJvdmlkZSBTUE5FR08gcGFja2FnZWQgS2VyYmVyb3MKKwkgICAgdGlja2V0cyB3aGljaCBhcmUgbmVlZGVkIHRvIG1vdW50IHRvIGNlcnRhaW4gc2VjdXJlIHNlcnZlcnMKKwkgICAgKGZvciB3aGljaCBtb3JlIHNlY3VyZSBLZXJiZXJvcyBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZCkuIElmCisJICAgIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBOQ1BfRlMKIAl0cmlzdGF0ZSAiTkNQIGZpbGUgc3lzdGVtIHN1cHBvcnQgKHRvIG1vdW50IE5ldFdhcmUgdm9sdW1lcykiCmRpZmYgLS1naXQgYS9mcy9jaWZzL0NIQU5HRVMgYi9mcy9jaWZzL0NIQU5HRVMKaW5kZXggNWJhYjI0Zi4uZWFiMzc1MCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9DSEFOR0VTCisrKyBiL2ZzL2NpZnMvQ0hBTkdFUwpAQCAtMiw3ICsyLDcgQEAKIC0tLS0tLS0tLS0tLQogRGVmZXIgY2xvc2Ugb2YgYSBmaWxlIGhhbmRsZSBzbGlnaHRseSBpZiBwZW5kaW5nIHdyaXRlcyBkZXBlbmQgb24gdGhhdCBmaWxlIGhhbmRsZQogKHRoaXMgcmVkdWNlcyB0aGUgRUJBREYgYmFkIGZpbGUgaGFuZGxlIGVycm9ycyB0aGF0IGNhbiBiZSBsb2dnZWQgdW5kZXIgaGVhdnkKLXN0cmVzcyBvbiB3cml0ZXMpLgorc3RyZXNzIG9uIHdyaXRlcykuIE1vZGlmeSBjaWZzIEtjb25maWcgb3B0aW9ucyB0byBleHBvc2UgQ09ORklHX0NJRlNfU1RBVFMyIAogCiBWZXJzaW9uIDEuMzgKIC0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzX3VuaWNvZGUuYyBiL2ZzL2NpZnMvY2lmc191bmljb2RlLmMKaW5kZXggOTlhMDk2ZC4uNGUxMjA1MyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX3VuaWNvZGUuYworKysgYi9mcy9jaWZzL2NpZnNfdW5pY29kZS5jCkBAIC03NCwxMCArNzQsMTEgQEAKIAkJCWNFUlJPUigxLAogCQkJICAgICAgICgiY2lmc19zdHJ0b1VDUzogY2hhcjJ1bmkgcmV0dXJuZWQgJWQiLAogCQkJCWNoYXJsZW4pKTsKLQkJCXRvW2ldID0gY3B1X3RvX2xlMTYoMHgwMDNmKTsJLyogYSBxdWVzdGlvbiBtYXJrICovCisJCQkvKiBBIHF1ZXN0aW9uIG1hcmsgKi8KKwkJCXRvW2ldID0gKHdjaGFyX3QpY3B1X3RvX2xlMTYoMHgwMDNmKTsKIAkJCWNoYXJsZW4gPSAxOwogCQl9IGVsc2UgCi0JCQl0b1tpXSA9IGNwdV90b19sZTE2KHRvW2ldKTsKKwkJCXRvW2ldID0gKHdjaGFyX3QpY3B1X3RvX2xlMTYodG9baV0pOwogCiAJfQogCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNmcy5jIGIvZnMvY2lmcy9jaWZzZnMuYwppbmRleCA4NzcwOTVhLi42ODJiMDIzIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNmcy5jCisrKyBiL2ZzL2NpZnMvY2lmc2ZzLmMKQEAgLTQwNSw2ICs0MDUsNyBAQAogfTsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCiBzdGF0aWMgdm9pZCBjaWZzX3Vtb3VudF9iZWdpbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYmxvY2spCiB7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKQEAgLTQyMiwxNiArNDIzLDE4IEBACiAJCXRjb24tPnRpZFN0YXR1cyA9IENpZnNFeGl0aW5nOwogCXVwKCZ0Y29uLT50Y29uU2VtKTsKIAorCS8qIGNhbmNlbF9icmxfcmVxdWVzdHModGNvbik7ICovCisJLyogY2FuY2VsX25vdGlmeV9yZXF1ZXN0cyh0Y29uKTsgKi8KIAlpZih0Y29uLT5zZXMgJiYgdGNvbi0+c2VzLT5zZXJ2ZXIpCiAJewotCQljRVJST1IoMSwoIndha2UgdXAgdGFza3Mgbm93IC0gdW1vdW50IGJlZ2luIG5vdCBjb21wbGV0ZSIpKTsKKwkJY0ZZSSgxLCgid2FrZSB1cCB0YXNrcyBub3cgLSB1bW91bnQgYmVnaW4gbm90IGNvbXBsZXRlIikpOwogCQl3YWtlX3VwX2FsbCgmdGNvbi0+c2VzLT5zZXJ2ZXItPnJlcXVlc3RfcSk7CiAJfQogLyogQkIgRklYTUUgLSBmaW5pc2ggYWRkIGNoZWNrcyBmb3IgdGlkU3RhdHVzIEJCICovCiAKIAlyZXR1cm47CiB9Ci0JCisjZW5kaWYJCiAKIHN0YXRpYyBpbnQgY2lmc19yZW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqZmxhZ3MsIGNoYXIgKmRhdGEpCiB7CkBAIC00NTAsNyArNDUzLDkgQEAKICAgIHVubGVzcyBsYXRlciB3ZSBhZGQgbGF6eSBjbG9zZSBvZiBpbm9kZXMgb3IgdW5sZXNzIHRoZSBrZXJuZWwgZm9yZ2V0cyB0byBjYWxsCiAgICB1cyB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiByZWxlYXNlcyAoY2xvc2VzKSBhcyBvcGVucyAqLwogCS5zaG93X29wdGlvbnMgPSBjaWZzX3Nob3dfb3B0aW9ucywKLS8qCS51bW91bnRfYmVnaW4gICA9IGNpZnNfdW1vdW50X2JlZ2luLCAqLyAvKiBCQiBmaW5pc2ggaW4gdGhlIGZ1dHVyZSAqLworI2lmZGVmIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTAorCS51bW91bnRfYmVnaW4gICA9IGNpZnNfdW1vdW50X2JlZ2luLAorI2VuZGlmCiAJLnJlbW91bnRfZnMgPSBjaWZzX3JlbW91bnQsCiB9OwogCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNwcm90by5oIGIvZnMvY2lmcy9jaWZzcHJvdG8uaAppbmRleCBkMzAxMTQ5YjEuLjFiNzNmNGYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3Byb3RvLmgKKysrIGIvZnMvY2lmcy9jaWZzcHJvdG8uaApAQCAtMjQyLDExICsyNDIsMTEgQEAKIAkJCWNvbnN0IGludCBuZXRmaWQsIGNvbnN0IHVuc2lnbmVkIGludCBjb3VudCwKIAkJCWNvbnN0IF9fdTY0IG9mZnNldCwgdW5zaWduZWQgaW50ICpuYnl0ZXMsIAogCQkJc3RydWN0IGt2ZWMgKmlvdiwgY29uc3QgaW50IG52ZWMsIGNvbnN0IGludCBsb25nX29wKTsKKyNlbmRpZiAvKiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgKi8KIGV4dGVybiBpbnQgQ0lGU0dldFNydklub2RlTnVtYmVyKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCiAJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzZWFyY2hOYW1lLCBfX3U2NCAqIGlub2RlX251bWJlciwKIAkJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgCiAJCQlpbnQgcmVtYXBfc3BlY2lhbF9jaGFycyk7Ci0jZW5kaWYgLyogQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMICovCiBleHRlcm4gaW50IGNpZnNfY29udmVydFVDU3BhdGgoY2hhciAqdGFyZ2V0LCBjb25zdCBfX2xlMTYgKnNvdXJjZSwgaW50IG1heGxlbiwKIAkJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKiBjb2RlcGFnZSk7CiBleHRlcm4gaW50IGNpZnNDb252ZXJ0VG9VQ1MoX19sZTE2ICogdGFyZ2V0LCBjb25zdCBjaGFyICpzb3VyY2UsIGludCBtYXhsZW4sCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNzbWIuYyBiL2ZzL2NpZnMvY2lmc3NtYi5jCmluZGV4IDkzMTJiZmMuLmE1M2M1OTYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3NtYi5jCisrKyBiL2ZzL2NpZnMvY2lmc3NtYi5jCkBAIC0yOTU5LDcgKzI5NTksNiBAQAogCXJldHVybiByYzsKIH0KIAotI2lmZGVmIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTAogaW50CiBDSUZTR2V0U3J2SW5vZGVOdW1iZXIoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWFyY2hOYW1lLApAQCAtMzA1Myw3ICszMDUyLDYgQEAKIAkJZ290byBHZXRJbm9kZU51bWJlclJldHJ5OwogCXJldHVybiByYzsKIH0KLSNlbmRpZiAvKiBDSUZTX0VYUEVSSU1FTlRBTCAqLwogCiBpbnQKIENJRlNHZXRERlNSZWZlcihjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlcywKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY25fY2lmcy5oIGIvZnMvY2lmcy9jbl9jaWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE1OWNjYQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2NpZnMvY25fY2lmcy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiAgIGZzL2NpZnMvY25fY2lmcy5oCisgKgorICogICBDb3B5cmlnaHQgKGMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDAyCisgKiAgIEF1dGhvcihzKTogU3RldmUgRnJlbmNoIChzZnJlbmNoQHVzLmlibS5jb20pCisgKgorICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZQorICogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9DTl9DSUZTX0gKKyNkZWZpbmUgX0NOX0NJRlNfSAorI2lmZGVmIENPTkZJR19DSUZTX1VQQ0FMTAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY29ubmVjdG9yLmg+CisKK3N0cnVjdCBjaWZzX3VwY2FsbCB7CisJY2hhciBzaWduYXR1cmVbNF07IC8qIENJRlMgKi8KKwllbnVtIGNvbW1hbmQgeworCQlDSUZTX0dFVF9JUCA9IDB4MDAwMDAwMDEsICAgLyogZ2V0IGlwIGFkZHJlc3MgZm9yIGhvc3RuYW1lICovCisJCUNJRlNfR0VUX1NFQ0JMT0IgPSAweDAwMDAwMDAyLCAvKiBnZXQgU1BORUdPIHdyYXBwZWQgYmxvYiAqLworCX0gY29tbWFuZDsKKwkvKiB1bmlvbiBjaWZzIHVwY2FsbCBkYXRhIGZvbGxvd3MgKi8KK307CisjZW5kaWYgLyogQ0lGU19VUENBTEwgKi8KKyNlbmRpZiAvKiBfQ05fQ0lGU19IICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2Nvbm5lY3QuYyBiL2ZzL2NpZnMvY29ubmVjdC5jCmluZGV4IDQ1MGFiNzUuLjJjYjYyMDcgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY29ubmVjdC5jCisrKyBiL2ZzL2NpZnMvY29ubmVjdC5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAibnRsbXNzcC5oIgogI2luY2x1ZGUgIm50ZXJyLmgiCiAjaW5jbHVkZSAicmZjMTAwMnBkdS5oIgorI2luY2x1ZGUgImNuX2NpZnMuaCIKIAogI2RlZmluZSBDSUZTX1BPUlQgNDQ1CiAjZGVmaW5lIFJGQzEwMDFfUE9SVCAxMzkKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvaW5vZGUuYyBiL2ZzL2NpZnMvaW5vZGUuYwppbmRleCA5MTJkNDAxNi4uOTIzZDA3MSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9pbm9kZS5jCisrKyBiL2ZzL2NpZnMvaW5vZGUuYwpAQCAtMjgzLDcgKzI4Myw2IEBACiAJCQkgICB0aGVyZSBXaW5kb3dzIHNlcnZlciBvciBuZXR3b3JrIGFwcGxpYW5jZXMgZm9yIHdoaWNoCiAJCQkgICBJbmRleE51bWJlciBmaWVsZCBpcyBub3QgZ3VhcmFudGVlZCB1bmlxdWU/ICovCiAKLSNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwJCQogCQkJaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9TRVJWRVJfSU5VTSl7CiAJCQkJaW50IHJjMSA9IDA7CiAJCQkJX191NjQgaW5vZGVfbnVtOwpAQCAtMjk5LDcgKzI5OCw2IEBACiAJCQkJfSBlbHNlIC8qIGRvIHdlIG5lZWQgY2FzdCBvciBoYXNoIHRvIGlubz8gKi8KIAkJCQkJKCpwaW5vZGUpLT5pX2lubyA9IGlub2RlX251bTsKIAkJCX0gLyogZWxzZSBpbm8gaW5jcmVtZW50ZWQgdG8gdW5pcXVlIG51bSBpbiBuZXdfaW5vZGUqLwotI2VuZGlmIC8qIENJRlNfRVhQRVJJTUVOVEFMICovCiAJCQlpbnNlcnRfaW5vZGVfaGFzaCgqcGlub2RlKTsKIAkJfQogCQlpbm9kZSA9ICpwaW5vZGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9oYXJkd2FyZS5oCmluZGV4IDU1ZDg1ZWUuLmNmYjQxM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9oYXJkd2FyZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9oYXJkd2FyZS5oCkBAIC00NCw1ICs0NCw2IEBACiAjaW5jbHVkZSAiaXhkcDQyNS5oIgogI2luY2x1ZGUgImNveW90ZS5oIgogI2luY2x1ZGUgInBycG1jMTEwMC5oIgorI2luY2x1ZGUgIm5zbHUyLmgiCiAKICNlbmRpZiAgLyogX0FTTV9BUkNIX0hBUkRXQVJFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9pcnFzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaXJxcy5oCmluZGV4IGNhODA4MjguLjJjZjQ5MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9pcnFzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2lycXMuaApAQCAtOTMsNCArOTMsMTEgQEAKICNkZWZpbmUJSVJRX0NPWU9URV9QQ0lfU0xPVDEJSVJRX0lYUDRYWF9HUElPMTEKICNkZWZpbmUJSVJRX0NPWU9URV9JREUJCUlSUV9JWFA0WFhfR1BJTzUKIAorLyoKKyAqIE5TTFUyIGJvYXJkIElSUXMKKyAqLworI2RlZmluZSAgICAgICAgSVJRX05TTFUyX1BDSV9JTlRBICAgICAgSVJRX0lYUDRYWF9HUElPMTEKKyNkZWZpbmUgICAgICAgIElSUV9OU0xVMl9QQ0lfSU5UQiAgICAgIElSUV9JWFA0WFhfR1BJTzEwCisjZGVmaW5lICAgICAgICBJUlFfTlNMVTJfUENJX0lOVEMgICAgICBJUlFfSVhQNFhYX0dQSU85CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L25zbHUyLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvbnNsdTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGIzNDdhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L25zbHUyLmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9uc2x1Mi5oCisgKgorICogTlNMVTIgcGxhdGZvcm0gc3BlY2lmaWMgZGVmaW5pdGlvbnMKKyAqCisgKiBBdXRob3I6IE1hcmsgUmFrZXMgPG1yYWtlcyBBVCBtYWMuY29tPgorICogTWFpbnRhaW5lcnM6IGh0dHA6Ly93d3cubnNsdTItbGludXgub3JnCisgKgorICogYmFzZWQgb24gaXhkcDQyNS5oOgorICoJQ29weXJpZ2h0IDIwMDQgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0hfXworI2Vycm9yICJEbyBub3QgaW5jbHVkZSB0aGlzIGRpcmVjdGx5LCBpbnN0ZWFkICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4iCisjZW5kaWYKKworI2RlZmluZSBOU0xVMl9GTEFTSF9CQVNFCUlYUDRYWF9FWFBfQlVTX0NTMF9CQVNFX1BIWVMKKyNkZWZpbmUgTlNMVTJfRkxBU0hfU0laRQlJWFA0WFhfRVhQX0JVU19DU1hfUkVHSU9OX1NJWkUKKworI2RlZmluZSBOU0xVMl9TREFfUElOCQk3CisjZGVmaW5lIE5TTFUyX1NDTF9QSU4JCTYKKworLyoKKyAqIE5TTFUyIFBDSSBJUlFzCisgKi8KKyNkZWZpbmUgTlNMVTJfUENJX01BWF9ERVYJMworI2RlZmluZSBOU0xVMl9QQ0lfSVJRX0xJTkVTCTMKKworCisvKiBQQ0kgY29udHJvbGxlciBHUElPIHRvIElSUSBwaW4gbWFwcGluZ3MgKi8KKyNkZWZpbmUgTlNMVTJfUENJX0lOVEFfUElOCTExCisjZGVmaW5lIE5TTFUyX1BDSV9JTlRCX1BJTgkxMAorI2RlZmluZSBOU0xVMl9QQ0lfSU5UQ19QSU4JOQorI2RlZmluZSBOU0xVMl9QQ0lfSU5URF9QSU4JOAorCisKKy8qIE5TTFUyIFRpbWVyICovCisjZGVmaW5lIE5TTFUyX0ZSRVEgNjYwMDAwMDAKKyNkZWZpbmUgTlNMVTJfQ0xPQ0tfVElDS19SQVRFICgoKE5TTFUyX0ZSRVEgLyBIWiAmIH5JWFA0WFhfT1NUX1JFTE9BRF9NQVNLKSArIDEpICogSFopCisjZGVmaW5lIE5TTFUyX0NMT0NLX1RJQ0tTX1BFUl9VU0VDICgoTlNMVTJfQ0xPQ0tfVElDS19SQVRFICsgVVNFQ19QRVJfU0VDLzIpIC8gVVNFQ19QRVJfU0VDKQorCisvKiBHUElPICovCisKKyNkZWZpbmUgTlNMVTJfR1BJTzAJCTAKKyNkZWZpbmUgTlNMVTJfR1BJTzEJCTEKKyNkZWZpbmUgTlNMVTJfR1BJTzIJCTIKKyNkZWZpbmUgTlNMVTJfR1BJTzMJCTMKKyNkZWZpbmUgTlNMVTJfR1BJTzQJCTQKKyNkZWZpbmUgTlNMVTJfR1BJTzUJCTUKKyNkZWZpbmUgTlNMVTJfR1BJTzYJCTYKKyNkZWZpbmUgTlNMVTJfR1BJTzcJCTcKKyNkZWZpbmUgTlNMVTJfR1BJTzgJCTgKKyNkZWZpbmUgTlNMVTJfR1BJTzkJCTkKKyNkZWZpbmUgTlNMVTJfR1BJTzEwCQkxMAorI2RlZmluZSBOU0xVMl9HUElPMTEJCTExCisjZGVmaW5lIE5TTFUyX0dQSU8xMgkJMTIKKyNkZWZpbmUgTlNMVTJfR1BJTzEzCQkxMworI2RlZmluZSBOU0xVMl9HUElPMTQJCTE0CisjZGVmaW5lIE5TTFUyX0dQSU8xNQkJMTUKKworLyogQnV0dG9ucyAqLworCisjZGVmaW5lIE5TTFUyX1BCX0dQSU8JCU5TTFUyX0dQSU81CisjZGVmaW5lIE5TTFUyX1BPX0dQSU8JCU5TTFUyX0dQSU84CS8qIHBvd2VyIG9mZiAqLworI2RlZmluZSBOU0xVMl9SQl9HUElPCQlOU0xVMl9HUElPMTIKKworI2RlZmluZSBOU0xVMl9QQl9JUlEJCUlSUV9JWFA0WFhfR1BJTzUKKyNkZWZpbmUgTlNMVTJfUkJfSVJRCQlJUlFfSVhQNFhYX0dQSU8xMgorCisjZGVmaW5lIE5TTFUyX1BCX0JNCQkoMUwgPDwgTlNMVTJfUEJfR1BJTykKKyNkZWZpbmUgTlNMVTJfUE9fQk0JCSgxTCA8PCBOU0xVMl9QT19HUElPKQorI2RlZmluZSBOU0xVMl9SQl9CTQkJKDFMIDw8IE5TTFUyX1JCX0dQSU8pCisKKy8qIEJ1enplciAqLworCisjZGVmaW5lIE5TTFUyX0dQSU9fQlVaWgkJNAorI2RlZmluZSBOU0xVMl9CWl9CTQkJKDFMIDw8IE5TTFUyX0dQSU9fQlVaWikKKy8qIExFRHMgKi8KKworI2RlZmluZSBOU0xVMl9MRURfUkVECQlOU0xVMl9HUElPMAorI2RlZmluZSBOU0xVMl9MRURfR1JOCQlOU0xVMl9HUElPMQorCisjZGVmaW5lIE5TTFUyX0xFRF9SRURfQk0JKDFMIDw8IE5TTFUyX0xFRF9SRUQpCisjZGVmaW5lIE5TTFUyX0xFRF9HUk5fQk0JKDFMIDw8IE5TTFUyX0xFRF9HUk4pCisKKyNkZWZpbmUgTlNMVTJfTEVEX0RJU0sxCQlOU0xVMl9HUElPMgorI2RlZmluZSBOU0xVMl9MRURfRElTSzIJCU5TTFUyX0dQSU8zCisKKyNkZWZpbmUgTlNMVTJfTEVEX0RJU0sxX0JNCSgxTCA8PCBOU0xVMl9HUElPMikKKyNkZWZpbmUgTlNMVTJfTEVEX0RJU0syX0JNCSgxTCA8PCBOU0xVMl9HUElPMykKKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWg0LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWg0LmgKaW5kZXggZDY0ZWU5Mi4uMzNlYTI5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oNC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaDQuaApAQCAtMzQsNSArMzQsMTEgQEAKICNkZWZpbmUgT01BUDI0WFhfRVRIUl9TVEFSVCAgICAgICAgICAgICAweDA4MDAwMzAwCiAjZGVmaW5lIE9NQVAyNFhYX0VUSFJfR1BJT19JUlEJCTkyCiAKKyNkZWZpbmUgSDRfQ1MwX0JBU0UJCSAgICAgMHgwNDAwMDAwMAorCisjZGVmaW5lIEg0X0NTMF9CQVNFCQkgICAgIDB4MDQwMDAwMDAKKworI2RlZmluZSBINF9DUzBfQkFTRQkJICAgICAweDA0MDAwMDAwCisKICNlbmRpZiAvKiAgX19BU01fQVJDSF9PTUFQX0g0X0ggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1pbm5vdmF0b3IuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaW5ub3ZhdG9yLmgKaW5kZXggNzk1NzRlMC4uYjNjZjMzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1pbm5vdmF0b3IuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWlubm92YXRvci5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9JTk5PVkFUT1JfSAogI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfSU5OT1ZBVE9SX0gKIAotI2lmIGRlZmluZWQgKENPTkZJR19BUkNIX09NQVAxNTEwKQorI2lmIGRlZmluZWQgKENPTkZJR19BUkNIX09NQVAxNVhYKQogCiAjaWZuZGVmIE9NQVBfU0RSQU1fREVWSUNFCiAjZGVmaW5lIE9NQVBfU0RSQU1fREVWSUNFCQkJRDI1Nk1fMVgxNl80QgpAQCAtNDQsNyArNDQsNyBAQAogdW5zaWduZWQgY2hhciBmcGdhX3JlYWQoaW50IHJlZyk7CiAjZW5kaWYKIAotI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAxNTEwICovCisjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDE1WFggKi8KIAogI2lmIGRlZmluZWQgKENPTkZJR19BUkNIX09NQVAxNlhYKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2Nsb2NrLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2Nsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQwYzI5NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY2xvY2suaApAQCAtMCwwICsxLDkxIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY2xvY2suaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA1IE5va2lhIGNvcnBvcmF0aW9uCisgKiAgV3JpdHRlbiBieSBUdXVra2EgVGlra2FuZW4gPHR1dWtrYS50aWtrYW5lbkBlbGVrdHJvYml0LmNvbT4KKyAqICBCYXNlZCBvbiBjbG9ja3MuaCBieSBUb255IExpbmRncmVuLCBHb3Jkb24gTWNOdXR0IGFuZCBSaWRnZVJ1biwgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fT01BUF9DTE9DS19ICisjZGVmaW5lIF9fQVJDSF9BUk1fT01BUF9DTE9DS19ICisKK3N0cnVjdCBtb2R1bGU7CisKK3N0cnVjdCBjbGsgeworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKKwlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CisJY29uc3QgY2hhcgkJKm5hbWU7CisJc3RydWN0IGNsawkJKnBhcmVudDsKKwl1bnNpZ25lZCBsb25nCQlyYXRlOworCV9fdTMyCQkJZmxhZ3M7CisJdm9pZCBfX2lvbWVtCQkqZW5hYmxlX3JlZzsKKwlfX3U4CQkJZW5hYmxlX2JpdDsKKwlfX3U4CQkJcmF0ZV9vZmZzZXQ7CisJX191OAkJCXNyY19vZmZzZXQ7CisJX19zOAkJCXVzZWNvdW50OworCXZvaWQJCQkoKnJlY2FsYykoc3RydWN0IGNsayAqKTsKKwlpbnQJCQkoKnNldF9yYXRlKShzdHJ1Y3QgY2xrICosIHVuc2lnbmVkIGxvbmcpOworCWxvbmcJCQkoKnJvdW5kX3JhdGUpKHN0cnVjdCBjbGsgKiwgdW5zaWduZWQgbG9uZyk7CisJdm9pZAkJCSgqaW5pdCkoc3RydWN0IGNsayAqKTsKKwlpbnQJCQkoKmVuYWJsZSkoc3RydWN0IGNsayAqKTsKKwl2b2lkCQkJKCpkaXNhYmxlKShzdHJ1Y3QgY2xrICopOworfTsKKworc3RydWN0IGNsa19mdW5jdGlvbnMgeworCWludAkJKCpjbGtfZW5hYmxlKShzdHJ1Y3QgY2xrICpjbGspOworCXZvaWQJCSgqY2xrX2Rpc2FibGUpKHN0cnVjdCBjbGsgKmNsayk7CisJaW50CQkoKmNsa191c2UpKHN0cnVjdCBjbGsgKmNsayk7CisJdm9pZAkJKCpjbGtfdW51c2UpKHN0cnVjdCBjbGsgKmNsayk7CisJbG9uZwkJKCpjbGtfcm91bmRfcmF0ZSkoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOworCWludAkJKCpjbGtfc2V0X3JhdGUpKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKKwlpbnQJCSgqY2xrX3NldF9wYXJlbnQpKHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KTsKKwlzdHJ1Y3QgY2xrICoJKCpjbGtfZ2V0X3BhcmVudCkoc3RydWN0IGNsayAqY2xrKTsKKwl2b2lkCQkoKmNsa19hbGxvd19pZGxlKShzdHJ1Y3QgY2xrICpjbGspOworCXZvaWQJCSgqY2xrX2RlbnlfaWRsZSkoc3RydWN0IGNsayAqY2xrKTsKK307CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgbXB1cmF0ZTsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGNsb2NrczsKK2V4dGVybiBzcGlubG9ja190IGNsb2NrZndfbG9jazsKKworZXh0ZXJuIGludCBjbGtfaW5pdChzdHJ1Y3QgY2xrX2Z1bmN0aW9ucyAqIGN1c3RvbV9jbG9ja3MpOworZXh0ZXJuIGludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKK2V4dGVybiB2b2lkIGNsa191bnJlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsayk7CitleHRlcm4gdm9pZCBwcm9wYWdhdGVfcmF0ZShzdHJ1Y3QgY2xrICpjbGspOworZXh0ZXJuIHZvaWQgZm9sbG93cGFyZW50X3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKTsKK2V4dGVybiB2b2lkIGNsa19hbGxvd19pZGxlKHN0cnVjdCBjbGsgKmNsayk7CitleHRlcm4gdm9pZCBjbGtfZGVueV9pZGxlKHN0cnVjdCBjbGsgKmNsayk7CisKKy8qIENsb2NrIGZsYWdzICovCisjZGVmaW5lIFJBVEVfQ0tDVEwJCSgxIDw8IDApCS8qIE1haW4gZml4ZWQgcmF0aW8gY2xvY2tzICovCisjZGVmaW5lIFJBVEVfRklYRUQJCSgxIDw8IDEpCS8qIEZpeGVkIGNsb2NrIHJhdGUgKi8KKyNkZWZpbmUgUkFURV9QUk9QQUdBVEVTCQkoMSA8PCAyKQkvKiBQcm9ncmFtIGNoaWxkcmVuIHRvbyAqLworI2RlZmluZSBWSVJUVUFMX0NMT0NLCQkoMSA8PCAzKQkvKiBDb21wb3NpdGUgY2xvY2sgZnJvbSB0YWJsZSAqLworI2RlZmluZSBBTFdBWVNfRU5BQkxFRAkJKDEgPDwgNCkJLyogQ2xvY2sgY2Fubm90IGJlIGRpc2FibGVkICovCisjZGVmaW5lIEVOQUJMRV9SRUdfMzJCSVQJKDEgPDwgNSkJLyogVXNlIDMyLWJpdCBhY2Nlc3MgKi8KKyNkZWZpbmUgVklSVFVBTF9JT19BRERSRVNTCSgxIDw8IDYpCS8qIENsb2NrIGluIHZpcnR1YWwgYWRkcmVzcyAqLworI2RlZmluZSBDTE9DS19JRExFX0NPTlRST0wJKDEgPDwgNykKKyNkZWZpbmUgQ0xPQ0tfTk9fSURMRV9QQVJFTlQJKDEgPDwgOCkKKyNkZWZpbmUgREVMQVlFRF9BUFAJCSgxIDw8IDkpCS8qIERlbGF5IGFwcGxpY2F0aW9uIG9mIGNsb2NrICovCisjZGVmaW5lIENPTkZJR19QQVJUSUNJUEFOVAkoMSA8PCAxMCkJLyogRnVuZGFtZW50YWwgY2xvY2sgKi8KKyNkZWZpbmUgQ01fTVBVX1NFTDEJCSgxIDw8IDExKQkvKiBEb21haW4gZGl2aWRlci9zb3VyY2UgKi8KKyNkZWZpbmUgQ01fRFNQX1NFTDEJCSgxIDw8IDEyKQorI2RlZmluZSBDTV9HRlhfU0VMMQkJKDEgPDwgMTMpCisjZGVmaW5lIENNX01PREVNX1NFTDEJCSgxIDw8IDE0KQorI2RlZmluZSBDTV9DT1JFX1NFTDEJCSgxIDw8IDE1KQkvKiBTZXRzIGRpdmlkZXIgZm9yIG1hbnkgKi8KKyNkZWZpbmUgQ01fQ09SRV9TRUwyCQkoMSA8PCAxNikJLyogc2V0cyBwYXJlbnQgZm9yIEdQVCAqLworI2RlZmluZSBDTV9XS1VQX1NFTDEJCSgxIDw8IDE3KQorI2RlZmluZSBDTV9QTExfU0VMMQkJKDEgPDwgMTgpCisjZGVmaW5lIENNX1BMTF9TRUwyCQkoMSA8PCAxOSkKKyNkZWZpbmUgQ01fU1lTQ0xLT1VUX1NFTDEJKDEgPDwgMjApCisjZGVmaW5lIENMT0NLX0lOX09NQVA3MzAJKDEgPDwgMjEpCisjZGVmaW5lIENMT0NLX0lOX09NQVAxNTEwCSgxIDw8IDIyKQorI2RlZmluZSBDTE9DS19JTl9PTUFQMTZYWAkoMSA8PCAyMykKKyNkZWZpbmUgQ0xPQ0tfSU5fT01BUDI0MlgJKDEgPDwgMjQpCisjZGVmaW5lIENMT0NLX0lOX09NQVAyNDNYCSgxIDw8IDI1KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY29tbW9uLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2NvbW1vbi5oCmluZGV4IDJhNjc2YjQuLjA4ZDU4YWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY29tbW9uLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jb21tb24uaApAQCAtMzEsNiArMzEsNiBAQAogCiBleHRlcm4gdm9pZCBvbWFwX21hcF9jb21tb25faW8odm9pZCk7CiBleHRlcm4gc3RydWN0IHN5c190aW1lciBvbWFwX3RpbWVyOwotZXh0ZXJuIHZvaWQgb21hcF9zZXJpYWxfaW5pdChpbnQgcG9ydHNbXSk7CitleHRlcm4gdm9pZCBvbWFwX3NlcmlhbF9pbml0KHZvaWQpOwogCiAjZW5kaWYgLyogX19BUkNIX0FSTV9NQUNIX09NQVBfQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY3B1LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2NwdS5oCmluZGV4IDExMTllMmIuLmVjN2ViNjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY3B1LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jcHUuaApAQCAtMjgsMTIgKzI4LDcgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBzeXN0ZW1fcmV2OwogCi0jZGVmaW5lIE9NQVBfRElFX0lEXzAJCTB4ZmZmZTE4MDAKLSNkZWZpbmUgT01BUF9ESUVfSURfMQkJMHhmZmZlMTgwNAotI2RlZmluZSBPTUFQX1BST0RVQ1RJT05fSURfMAkweGZmZmUyMDAwCi0jZGVmaW5lIE9NQVBfUFJPRFVDVElPTl9JRF8xCTB4ZmZmZTIwMDQKLSNkZWZpbmUgT01BUDMyX0lEXzAJCTB4ZmZmZWQ0MDAKLSNkZWZpbmUgT01BUDMyX0lEXzEJCTB4ZmZmZWQ0MDQKKyNkZWZpbmUgb21hcDJfY3B1X3JldigpCQkoKHN5c3RlbV9yZXYgPj4gOCkgJiAweDBmKQogCiAvKgogICogVGVzdCBpZiBtdWx0aWNvcmUgT01BUCBzdXBwb3J0IGlzIG5lZWRlZApAQCAtNTAsNyArNDUsNyBAQAogIyAgZGVmaW5lIE9NQVBfTkFNRSBvbWFwNzMwCiAjIGVuZGlmCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAjIGlmZGVmIE9NQVBfTkFNRQogIyAgdW5kZWYgIE1VTFRJX09NQVAxCiAjICBkZWZpbmUgTVVMVElfT01BUDEKQEAgLTc5LDkgKzc0LDExIEBACiAgKiBNYWNyb3MgdG8gZ3JvdXAgT01BUCBpbnRvIGNwdSBjbGFzc2VzLgogICogVGhlc2UgY2FuIGJlIHVzZWQgaW4gbW9zdCBwbGFjZXMuCiAgKiBjcHVfaXNfb21hcDd4eCgpOglUcnVlIGZvciBPTUFQNzMwCi0gKiBjcHVfaXNfb21hcDE1eHgoKToJVHJ1ZSBmb3IgT01BUDE1MTAgYW5kIE9NQVA1OTEwCisgKiBjcHVfaXNfb21hcDE1eHgoKToJVHJ1ZSBmb3IgT01BUDE1MTAsIE9NQVA1OTEwIGFuZCBPTUFQMzEwCiAgKiBjcHVfaXNfb21hcDE2eHgoKToJVHJ1ZSBmb3IgT01BUDE2MTAsIE9NQVA1OTEyIGFuZCBPTUFQMTcxMAotICogY3B1X2lzX29tYXAyNHh4KCk6CVRydWUgZm9yIE9NQVAyNDIwCisgKiBjcHVfaXNfb21hcDI0eHgoKToJVHJ1ZSBmb3IgT01BUDI0MjAsIE9NQVAyNDIyLCBPTUFQMjQyMywgT01BUDI0MzAKKyAqIGNwdV9pc19vbWFwMjQyeCgpOglUcnVlIGZvciBPTUFQMjQyMCwgT01BUDI0MjIsIE9NQVAyNDIzCisgKiBjcHVfaXNfb21hcDI0M3goKToJVHJ1ZSBmb3IgT01BUDI0MzAKICAqLwogI2RlZmluZSBHRVRfT01BUF9DTEFTUwkoc3lzdGVtX3JldiAmIDB4ZmYpCiAKQEAgLTkxLDIyICs4OCwzNSBAQAogCXJldHVybiAoR0VUX09NQVBfQ0xBU1MgPT0gKGlkKSkgPyAxIDogMDsJXAogfQogCisjZGVmaW5lIEdFVF9PTUFQX1NVQkNMQVNTCSgoc3lzdGVtX3JldiA+PiAyMCkgJiAweDBmZmYpCisKKyNkZWZpbmUgSVNfT01BUF9TVUJDTEFTUyhzdWJjbGFzcywgaWQpCQkJXAorc3RhdGljIGlubGluZSBpbnQgaXNfb21hcCAjI3N1YmNsYXNzICh2b2lkKQkJXAorewkJCQkJCQlcCisJcmV0dXJuIChHRVRfT01BUF9TVUJDTEFTUyA9PSAoaWQpKSA/IDEgOiAwOwlcCit9CisKIElTX09NQVBfQ0xBU1MoN3h4LCAweDA3KQogSVNfT01BUF9DTEFTUygxNXh4LCAweDE1KQogSVNfT01BUF9DTEFTUygxNnh4LCAweDE2KQogSVNfT01BUF9DTEFTUygyNHh4LCAweDI0KQogCitJU19PTUFQX1NVQkNMQVNTKDI0MngsIDB4MjQyKQorSVNfT01BUF9TVUJDTEFTUygyNDN4LCAweDI0MykKKwogI2RlZmluZSBjcHVfaXNfb21hcDd4eCgpCQkwCiAjZGVmaW5lIGNwdV9pc19vbWFwMTV4eCgpCQkwCiAjZGVmaW5lIGNwdV9pc19vbWFwMTZ4eCgpCQkwCiAjZGVmaW5lIGNwdV9pc19vbWFwMjR4eCgpCQkwCisjZGVmaW5lIGNwdV9pc19vbWFwMjQyeCgpCQkwCisjZGVmaW5lIGNwdV9pc19vbWFwMjQzeCgpCQkwCiAKICNpZiBkZWZpbmVkKE1VTFRJX09NQVAxKQogIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCiAjICB1bmRlZiAgY3B1X2lzX29tYXA3eHgKICMgIGRlZmluZSBjcHVfaXNfb21hcDd4eCgpCQlpc19vbWFwN3h4KCkKICMgZW5kaWYKLSMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTUxMCkKKyMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkKICMgIHVuZGVmICBjcHVfaXNfb21hcDE1eHgKICMgIGRlZmluZSBjcHVfaXNfb21hcDE1eHgoKQkJaXNfb21hcDE1eHgoKQogIyBlbmRpZgpAQCAtMTE5LDcgKzEyOSw3IEBACiAjICB1bmRlZiAgY3B1X2lzX29tYXA3eHgKICMgIGRlZmluZSBjcHVfaXNfb21hcDd4eCgpCQkxCiAjIGVuZGlmCi0jIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1MTApCisjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpCiAjICB1bmRlZiAgY3B1X2lzX29tYXAxNXh4CiAjICBkZWZpbmUgY3B1X2lzX29tYXAxNXh4KCkJCTEKICMgZW5kaWYKQEAgLTEyOSwxMyArMTM5LDE4IEBACiAjIGVuZGlmCiAjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpCiAjICB1bmRlZiAgY3B1X2lzX29tYXAyNHh4CisjICB1bmRlZiAgY3B1X2lzX29tYXAyNDJ4CisjICB1bmRlZiAgY3B1X2lzX29tYXAyNDN4CiAjICBkZWZpbmUgY3B1X2lzX29tYXAyNHh4KCkJCTEKKyMgIGRlZmluZSBjcHVfaXNfb21hcDI0MngoKQkJaXNfb21hcDI0MngoKQorIyAgZGVmaW5lIGNwdV9pc19vbWFwMjQzeCgpCQlpc19vbWFwMjQzeCgpCiAjIGVuZGlmCiAjZW5kaWYKIAogLyoKICAqIE1hY3JvcyB0byBkZXRlY3QgaW5kaXZpZHVhbCBjcHUgdHlwZXMuCiAgKiBUaGVzZSBhcmUgb25seSByYXJlbHkgbmVlZGVkLgorICogY3B1X2lzX29tYXAzMzAoKToJVHJ1ZSBmb3IgT01BUDMzMAogICogY3B1X2lzX29tYXA3MzAoKToJVHJ1ZSBmb3IgT01BUDczMAogICogY3B1X2lzX29tYXAxNTEwKCk6CVRydWUgZm9yIE9NQVAxNTEwCiAgKiBjcHVfaXNfb21hcDE2MTAoKToJVHJ1ZSBmb3IgT01BUDE2MTAKQEAgLTE0NCw2ICsxNTksOSBAQAogICogY3B1X2lzX29tYXAxNjIxKCk6CVRydWUgZm9yIE9NQVAxNjIxCiAgKiBjcHVfaXNfb21hcDE3MTAoKToJVHJ1ZSBmb3IgT01BUDE3MTAKICAqIGNwdV9pc19vbWFwMjQyMCgpOglUcnVlIGZvciBPTUFQMjQyMAorICogY3B1X2lzX29tYXAyNDIyKCk6CVRydWUgZm9yIE9NQVAyNDIyCisgKiBjcHVfaXNfb21hcDI0MjMoKToJVHJ1ZSBmb3IgT01BUDI0MjMKKyAqIGNwdV9pc19vbWFwMjQzMCgpOglUcnVlIGZvciBPTUFQMjQzMAogICovCiAjZGVmaW5lIEdFVF9PTUFQX1RZUEUJKChzeXN0ZW1fcmV2ID4+IDE2KSAmIDB4ZmZmZikKIApAQCAtMTUzLDYgKzE3MSw3IEBACiAJcmV0dXJuIChHRVRfT01BUF9UWVBFID09IChpZCkpID8gMSA6IDA7CQlcCiB9CiAKK0lTX09NQVBfVFlQRSgzMTAsIDB4MDMxMCkKIElTX09NQVBfVFlQRSg3MzAsIDB4MDczMCkKIElTX09NQVBfVFlQRSgxNTEwLCAweDE1MTApCiBJU19PTUFQX1RZUEUoMTYxMCwgMHgxNjEwKQpAQCAtMTYxLDcgKzE4MCwxMSBAQAogSVNfT01BUF9UWVBFKDE2MjEsIDB4MTYyMSkKIElTX09NQVBfVFlQRSgxNzEwLCAweDE3MTApCiBJU19PTUFQX1RZUEUoMjQyMCwgMHgyNDIwKQorSVNfT01BUF9UWVBFKDI0MjIsIDB4MjQyMikKK0lTX09NQVBfVFlQRSgyNDIzLCAweDI0MjMpCitJU19PTUFQX1RZUEUoMjQzMCwgMHgyNDMwKQogCisjZGVmaW5lIGNwdV9pc19vbWFwMzEwKCkJCTAKICNkZWZpbmUgY3B1X2lzX29tYXA3MzAoKQkJMAogI2RlZmluZSBjcHVfaXNfb21hcDE1MTAoKQkJMAogI2RlZmluZSBjcHVfaXNfb21hcDE2MTAoKQkJMApAQCAtMTcwLDMxICsxOTMsMzMgQEAKICNkZWZpbmUgY3B1X2lzX29tYXAxNjIxKCkJCTAKICNkZWZpbmUgY3B1X2lzX29tYXAxNzEwKCkJCTAKICNkZWZpbmUgY3B1X2lzX29tYXAyNDIwKCkJCTAKKyNkZWZpbmUgY3B1X2lzX29tYXAyNDIyKCkJCTAKKyNkZWZpbmUgY3B1X2lzX29tYXAyNDIzKCkJCTAKKyNkZWZpbmUgY3B1X2lzX29tYXAyNDMwKCkJCTAKIAogI2lmIGRlZmluZWQoTVVMVElfT01BUDEpCiAjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkKICMgIHVuZGVmICBjcHVfaXNfb21hcDczMAogIyAgZGVmaW5lIGNwdV9pc19vbWFwNzMwKCkJCWlzX29tYXA3MzAoKQogIyBlbmRpZgotIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNTEwKQotIyAgdW5kZWYgIGNwdV9pc19vbWFwMTUxMAotIyAgZGVmaW5lIGNwdV9pc19vbWFwMTUxMCgpCQlpc19vbWFwMTUxMCgpCi0jIGVuZGlmCiAjZWxzZQogIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCiAjICB1bmRlZiAgY3B1X2lzX29tYXA3MzAKICMgIGRlZmluZSBjcHVfaXNfb21hcDczMCgpCQkxCiAjIGVuZGlmCi0jIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1MTApCi0jICB1bmRlZiAgY3B1X2lzX29tYXAxNTEwCi0jICBkZWZpbmUgY3B1X2lzX29tYXAxNTEwKCkJCTEKLSMgZW5kaWYKICNlbmRpZgogCiAvKgogICogV2hldGhlciB3ZSBoYXZlIE1VTFRJX09NQVAxIG9yIG5vdCwgd2Ugc3RpbGwgbmVlZCB0byBkaXN0aW5ndWlzaAotICogYmV0d2VlbiAxNjExQi81OTEyIGFuZCAxNzEwLgorICogYmV0d2VlbiAzMzAgdnMuIDE1MTAgYW5kIDE2MTFCLzU5MTIgdnMuIDE3MTAuCiAgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKQorIyB1bmRlZiAgY3B1X2lzX29tYXAzMTAKKyMgdW5kZWYgIGNwdV9pc19vbWFwMTUxMAorIyBkZWZpbmUgY3B1X2lzX29tYXAzMTAoKQkJaXNfb21hcDMxMCgpCisjIGRlZmluZSBjcHVfaXNfb21hcDE1MTAoKQkJaXNfb21hcDE1MTAoKQorI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQogIyB1bmRlZiAgY3B1X2lzX29tYXAxNjEwCiAjIHVuZGVmICBjcHVfaXNfb21hcDE2MTEKQEAgLTIwOCw5ICsyMzMsMjAgQEAKICMgZGVmaW5lIGNwdV9pc19vbWFwMTcxMCgpCQlpc19vbWFwMTcxMCgpCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MjApCi0jICB1bmRlZiAgY3B1X2lzX29tYXAyNDIwCi0jICBkZWZpbmUgY3B1X2lzX29tYXAyNDIwKCkJCTEKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQorIyB1bmRlZiAgY3B1X2lzX29tYXAyNDIwCisjIHVuZGVmICBjcHVfaXNfb21hcDI0MjIKKyMgdW5kZWYgIGNwdV9pc19vbWFwMjQyMworIyB1bmRlZiAgY3B1X2lzX29tYXAyNDMwCisjIGRlZmluZSBjcHVfaXNfb21hcDI0MjAoKQkJaXNfb21hcDI0MjAoKQorIyBkZWZpbmUgY3B1X2lzX29tYXAyNDIyKCkJCWlzX29tYXAyNDIyKCkKKyMgZGVmaW5lIGNwdV9pc19vbWFwMjQyMygpCQlpc19vbWFwMjQyMygpCisjIGRlZmluZSBjcHVfaXNfb21hcDI0MzAoKQkJaXNfb21hcDI0MzAoKQogI2VuZGlmCiAKKy8qIE1hY3JvcyB0byBkZXRlY3QgaWYgd2UgaGF2ZSBPTUFQMSBvciBPTUFQMiAqLworI2RlZmluZSBjcHVfY2xhc3NfaXNfb21hcDEoKQkoY3B1X2lzX29tYXA3MzAoKSB8fCBjcHVfaXNfb21hcDE1eHgoKSB8fCBcCisJCQkJY3B1X2lzX29tYXAxNnh4KCkpCisjZGVmaW5lIGNwdV9jbGFzc19pc19vbWFwMigpCWNwdV9pc19vbWFwMjR4eCgpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG1hLmgKaW5kZXggMDRlYmVmNS4uY2NiY2I1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RtYS5oCkBAIC0yMiw5ICsyMiwxMDkgQEAKICNkZWZpbmUgX19BU01fQVJDSF9ETUFfSAogCiAjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwkJMAorCisvKiBIYXJkd2FyZSByZWdpc3RlcnMgZm9yIG9tYXAxICovCisjZGVmaW5lIE9NQVBfRE1BX0JBU0UJCQkoMHhmZmZlZDgwMCkKKyNkZWZpbmUgT01BUF9ETUFfR0NSCQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwMCkKKyNkZWZpbmUgT01BUF9ETUFfR1NDUgkJCShPTUFQX0RNQV9CQVNFICsgMHg0MDQpCisjZGVmaW5lIE9NQVBfRE1BX0dSU1QJCQkoT01BUF9ETUFfQkFTRSArIDB4NDA4KQorI2RlZmluZSBPTUFQX0RNQV9IV19JRAkJCShPTUFQX0RNQV9CQVNFICsgMHg0NDIpCisjZGVmaW5lIE9NQVBfRE1BX1BDSDJfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NDQpCisjZGVmaW5lIE9NQVBfRE1BX1BDSDBfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NDYpCisjZGVmaW5lIE9NQVBfRE1BX1BDSDFfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NDgpCisjZGVmaW5lIE9NQVBfRE1BX1BDSEdfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NGEpCisjZGVmaW5lIE9NQVBfRE1BX1BDSERfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NGMpCisjZGVmaW5lIE9NQVBfRE1BX0NBUFNfMF9VCQkoT01BUF9ETUFfQkFTRSArIDB4NDRlKQorI2RlZmluZSBPTUFQX0RNQV9DQVBTXzBfTAkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1MCkKKyNkZWZpbmUgT01BUF9ETUFfQ0FQU18xX1UJCShPTUFQX0RNQV9CQVNFICsgMHg0NTIpCisjZGVmaW5lIE9NQVBfRE1BX0NBUFNfMV9MCQkoT01BUF9ETUFfQkFTRSArIDB4NDU0KQorI2RlZmluZSBPTUFQX0RNQV9DQVBTXzIJCQkoT01BUF9ETUFfQkFTRSArIDB4NDU2KQorI2RlZmluZSBPTUFQX0RNQV9DQVBTXzMJCQkoT01BUF9ETUFfQkFTRSArIDB4NDU4KQorI2RlZmluZSBPTUFQX0RNQV9DQVBTXzQJCQkoT01BUF9ETUFfQkFTRSArIDB4NDVhKQorI2RlZmluZSBPTUFQX0RNQV9QQ0gyX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NDYwKQorI2RlZmluZSBPTUFQX0RNQV9QQ0gwX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NDgwKQorI2RlZmluZSBPTUFQX0RNQV9QQ0gxX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NDgyKQorI2RlZmluZSBPTUFQX0RNQV9QQ0hEX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NGMwKQorCisvKiBIYXJkd2FyZSByZWdpc3RlcnMgZm9yIG9tYXAyICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9CQVNFCQkoTDRfMjRYWF9CQVNFICsgMHg1NjAwMCkKKyNkZWZpbmUgT01BUF9ETUE0X1JFVklTSU9OCQkoT01BUDI0WFhfRE1BX0JBU0UgKyAweDAwKQorI2RlZmluZSBPTUFQX0RNQTRfR0NSX1JFRwkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg3OCkKKyNkZWZpbmUgT01BUF9ETUE0X0lSUVNUQVRVU19MMAkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgwOCkKKyNkZWZpbmUgT01BUF9ETUE0X0lSUVNUQVRVU19MMQkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgwYykKKyNkZWZpbmUgT01BUF9ETUE0X0lSUVNUQVRVU19MMgkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgxMCkKKyNkZWZpbmUgT01BUF9ETUE0X0lSUVNUQVRVU19MMwkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgxNCkKKyNkZWZpbmUgT01BUF9ETUE0X0lSUUVOQUJMRV9MMAkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgxOCkKKyNkZWZpbmUgT01BUF9ETUE0X0lSUUVOQUJMRV9MMQkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgxYykKKyNkZWZpbmUgT01BUF9ETUE0X0lSUUVOQUJMRV9MMgkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgyMCkKKyNkZWZpbmUgT01BUF9ETUE0X0lSUUVOQUJMRV9MMwkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgyNCkKKyNkZWZpbmUgT01BUF9ETUE0X1NZU1NUQVRVUwkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgyOCkKKyNkZWZpbmUgT01BUF9ETUE0X0NBUFNfMAkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2NCkKKyNkZWZpbmUgT01BUF9ETUE0X0NBUFNfMgkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2YykKKyNkZWZpbmUgT01BUF9ETUE0X0NBUFNfMwkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg3MCkKKyNkZWZpbmUgT01BUF9ETUE0X0NBUFNfNAkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg3NCkKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCiAKICNkZWZpbmUgT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVAkxNwogCisvKiBDb21tb24gY2hhbm5lbCBzcGVjaWZpYyByZWdpc3RlcnMgZm9yIG9tYXAxICovCisjZGVmaW5lIE9NQVBfRE1BX0NTRFBfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwMCkKKyNkZWZpbmUgT01BUF9ETUFfQ0NSX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MDIpCisjZGVmaW5lIE9NQVBfRE1BX0NJQ1JfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwNCkKKyNkZWZpbmUgT01BUF9ETUFfQ1NSX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MDYpCisjZGVmaW5lIE9NQVBfRE1BX0NFTl9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDEwKQorI2RlZmluZSBPTUFQX0RNQV9DRk5fUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxMikKKyNkZWZpbmUgT01BUF9ETUFfQ1NGSV9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDE0KQorI2RlZmluZSBPTUFQX0RNQV9DU0VJX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MTYpCisjZGVmaW5lIE9NQVBfRE1BX0NTQUNfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxOCkKKyNkZWZpbmUgT01BUF9ETUFfQ0RBQ19SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDFhKQorI2RlZmluZSBPTUFQX0RNQV9DREVJX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MWMpCisjZGVmaW5lIE9NQVBfRE1BX0NERklfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxZSkKKyNkZWZpbmUgT01BUF9ETUFfQ0xOS19DVFJMX1JFRyhuKQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgyOCkKKworI2Vsc2UKKworI2RlZmluZSBPTUFQX0xPR0lDQUxfRE1BX0NIX0NPVU5UCTMyCS8qIFJFVklTSVQ6IElzIHRoaXMgMzIgKyAyPyAqLworCisvKiBDb21tb24gY2hhbm5lbCBzcGVjaWZpYyByZWdpc3RlcnMgZm9yIG9tYXAyICovCisjZGVmaW5lIE9NQVBfRE1BX0NDUl9SRUcobikJCV9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHg4MCkKKyNkZWZpbmUgT01BUF9ETUFfQ0xOS19DVFJMX1JFRyhuKQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4ODQpCisjZGVmaW5lIE9NQVBfRE1BX0NJQ1JfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4ODgpCisjZGVmaW5lIE9NQVBfRE1BX0NTUl9SRUcobikJCV9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHg4YykKKyNkZWZpbmUgT01BUF9ETUFfQ1NEUF9SRUcobikJCV9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHg5MCkKKyNkZWZpbmUgT01BUF9ETUFfQ0VOX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweDk0KQorI2RlZmluZSBPTUFQX0RNQV9DRk5fUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4OTgpCisjZGVmaW5lIE9NQVBfRE1BX0NTRUlfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YTQpCisjZGVmaW5lIE9NQVBfRE1BX0NTRklfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YTgpCisjZGVmaW5lIE9NQVBfRE1BX0NERUlfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YWMpCisjZGVmaW5lIE9NQVBfRE1BX0NERklfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YjApCisjZGVmaW5lIE9NQVBfRE1BX0NTQUNfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YjQpCisjZGVmaW5lIE9NQVBfRE1BX0NEQUNfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YjgpCisKKyNlbmRpZgorCisvKiBDaGFubmVsIHNwZWNpZmljIHJlZ2lzdGVycyBvbmx5IG9uIG9tYXAxICovCisjZGVmaW5lIE9NQVAxX0RNQV9DU1NBX0xfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwOCkKKyNkZWZpbmUgT01BUDFfRE1BX0NTU0FfVV9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDBhKQorI2RlZmluZSBPTUFQMV9ETUFfQ0RTQV9MX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MGMpCisjZGVmaW5lIE9NQVAxX0RNQV9DRFNBX1VfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwZSkKKyNkZWZpbmUgT01BUDFfRE1BX0NPTE9SX0xfUkVHKG4pCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDIwKQorI2RlZmluZSBPTUFQMV9ETUFfQ0NSMl9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDI0KQorI2RlZmluZSBPTUFQMV9ETUFfQ09MT1JfVV9SRUcobikJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MjIpCisjZGVmaW5lIE9NQVAxX0RNQV9MQ0hfQ1RSTF9SRUcobikJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MmEpCisKKy8qIENoYW5uZWwgc3BlY2lmaWMgcmVnaXN0ZXJzIG9ubHkgb24gb21hcDIgKi8KKyNkZWZpbmUgT01BUDJfRE1BX0NTU0FfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4OWMpCisjZGVmaW5lIE9NQVAyX0RNQV9DRFNBX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGEwKQorI2RlZmluZSBPTUFQMl9ETUFfQ0NFTl9SRUcobikJCV9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhiYykKKyNkZWZpbmUgT01BUDJfRE1BX0NDRk5fUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YzApCisjZGVmaW5lIE9NQVAyX0RNQV9DT0xPUl9SRUcobikJCV9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhjNCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRE1BIGNoYW5uZWxzIGZvciBvbWFwMSAqLwogI2RlZmluZSBPTUFQX0RNQV9OT19ERVZJQ0UJCTAKICNkZWZpbmUgT01BUF9ETUFfTUNTSTFfVFgJCTEKICNkZWZpbmUgT01BUF9ETUFfTUNTSTFfUlgJCTIKQEAgLTg1LDI5ICsxODUsNzIgQEAKICNkZWZpbmUgT01BUF9ETUFfTU1DMl9SWAkJNTUKICNkZWZpbmUgT01BUF9ETUFfQ1JZUFRPX0RFU19PVVQJCTU2CiAKKy8qIERNQSBjaGFubmVscyBmb3IgMjR4eCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfTk9fREVWSUNFCQkwCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9YVElfRE1BCQkxCS8qIFNfRE1BXzAgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VYVF9ORE1BX1JFUTAJMgkvKiBTX0RNQV8xICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FWFRfTkRNQV9SRVExCTMJLyogU19ETUFfMiAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfR1BNQwkJNAkvKiBTX0RNQV8zICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9HRlgJCTUJLyogU19ETUFfNCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfRFNTCQk2CS8qIFNfRE1BXzUgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1ZMWU5RX1RYCQk3CS8qIFNfRE1BXzYgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0NXVAkJOAkvKiBTX0RNQV83ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9BRVNfVFgJCTkJLyogU19ETUFfOCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfQUVTX1JYCQkxMAkvKiBTX0RNQV85ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9ERVNfVFgJCTExCS8qIFNfRE1BXzEwICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9ERVNfUlgJCTEyCS8qIFNfRE1BXzExICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TSEExTUQ1X1JYCQkxMwkvKiBTX0RNQV8xMiAqLwogCi0jZGVmaW5lIE9NQVBfRE1BX0JBU0UJCQkoMHhmZmZlZDgwMCkKLSNkZWZpbmUgT01BUF9ETUFfR0NSCQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwMCkKLSNkZWZpbmUgT01BUF9ETUFfR1NDUgkJCShPTUFQX0RNQV9CQVNFICsgMHg0MDQpCi0jZGVmaW5lIE9NQVBfRE1BX0dSU1QJCQkoT01BUF9ETUFfQkFTRSArIDB4NDA4KQotI2RlZmluZSBPTUFQX0RNQV9IV19JRAkJCShPTUFQX0RNQV9CQVNFICsgMHg0NDIpCi0jZGVmaW5lIE9NQVBfRE1BX1BDSDJfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NDQpCi0jZGVmaW5lIE9NQVBfRE1BX1BDSDBfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NDYpCi0jZGVmaW5lIE9NQVBfRE1BX1BDSDFfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NDgpCi0jZGVmaW5lIE9NQVBfRE1BX1BDSEdfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NGEpCi0jZGVmaW5lIE9NQVBfRE1BX1BDSERfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NGMpCi0jZGVmaW5lIE9NQVBfRE1BX0NBUFNfMF9VCQkoT01BUF9ETUFfQkFTRSArIDB4NDRlKQotI2RlZmluZSBPTUFQX0RNQV9DQVBTXzBfTAkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1MCkKLSNkZWZpbmUgT01BUF9ETUFfQ0FQU18xX1UJCShPTUFQX0RNQV9CQVNFICsgMHg0NTIpCi0jZGVmaW5lIE9NQVBfRE1BX0NBUFNfMV9MCQkoT01BUF9ETUFfQkFTRSArIDB4NDU0KQotI2RlZmluZSBPTUFQX0RNQV9DQVBTXzIJCQkoT01BUF9ETUFfQkFTRSArIDB4NDU2KQotI2RlZmluZSBPTUFQX0RNQV9DQVBTXzMJCQkoT01BUF9ETUFfQkFTRSArIDB4NDU4KQotI2RlZmluZSBPTUFQX0RNQV9DQVBTXzQJCQkoT01BUF9ETUFfQkFTRSArIDB4NDVhKQotI2RlZmluZSBPTUFQX0RNQV9QQ0gyX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NDYwKQotI2RlZmluZSBPTUFQX0RNQV9QQ0gwX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NDgwKQotI2RlZmluZSBPTUFQX0RNQV9QQ0gxX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NDgyKQotI2RlZmluZSBPTUFQX0RNQV9QQ0hEX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NGMwKQorI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX0FDX1JECQkxNwkvKiBTX0RNQV8xNiAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX0FDX1dSCQkxOAkvKiBTX0RNQV8xNyAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX01EX1VMX1JECTE5CS8qIFNfRE1BXzE4ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfTURfVUxfV1IJMjAJLyogU19ETUFfMTkgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19NRF9ETF9SRAkyMQkvKiBTX0RNQV8yMCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX01EX0RMX1dSCTIyCS8qIFNfRE1BXzIxICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfQlRfVUxfUkQJMjMJLyogU19ETUFfMjIgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19CVF9VTF9XUgkyNAkvKiBTX0RNQV8yMyAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX0JUX0RMX1JECTI1CS8qIFNfRE1BXzI0ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfQlRfRExfV1IJMjYJLyogU19ETUFfMjUgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0kyQzFfVFgJCTI3CS8qIFNfRE1BXzI2ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9JMkMxX1JYCQkyOAkvKiBTX0RNQV8yNyAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfSTJDMl9UWAkJMjkJLyogU19ETUFfMjggKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0kyQzJfUlgJCTMwCS8qIFNfRE1BXzI5ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9NQ0JTUDFfVFgJCTMxCS8qIFNETUFfMzAgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX01DQlNQMV9SWAkJMzIJLyogU0RNQV8zMSAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfTUNCU1AyX1RYCQkzMwkvKiBTRE1BXzMyICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9NQ0JTUDJfUlgJCTM0CS8qIFNETUFfMzMgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfVFgwCQkzNQkvKiBTRE1BXzM0ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkxX1JYMAkJMzYJLyogU0RNQV8zNSAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9UWDEJCTM3CS8qIFNETUFfMzYgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfUlgxCQkzOAkvKiBTRE1BXzM3ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkxX1RYMgkJMzkJLyogU0RNQV8zOCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9SWDIJCTQwCS8qIFNETUFfMzkgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfVFgzCQk0MQkvKiBTRE1BXzQwICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkxX1JYMwkJNDIJLyogU0RNQV80MSAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMl9UWDAJCTQzCS8qIFNETUFfNDIgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTJfUlgwCQk0NAkvKiBTRE1BXzQzICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkyX1RYMQkJNDUJLyogU0RNQV80NCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMl9SWDEJCTQ2CS8qIFNETUFfNDUgKi8KIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfVUFSVDFfVFgJCTQ5CS8qIFNETUFfNDggKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VBUlQxX1JYCQk1MAkvKiBTRE1BXzQ5ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9VQVJUMl9UWAkJNTEJLyogU0RNQV81MCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfVUFSVDJfUlgJCTUyCS8qIFNETUFfNTEgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VBUlQzX1RYCQk1MwkvKiBTRE1BXzUyICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9VQVJUM19SWAkJNTQJLyogU0RNQV81MyAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfVVNCX1cyRkNfVFgwCTU1CS8qIFNETUFfNTQgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VTQl9XMkZDX1JYMAk1NgkvKiBTRE1BXzU1ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9VU0JfVzJGQ19UWDEJNTcJLyogU0RNQV81NiAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfVVNCX1cyRkNfUlgxCTU4CS8qIFNETUFfNTcgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VTQl9XMkZDX1RYMgk1OQkvKiBTRE1BXzU4ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9VU0JfVzJGQ19SWDIJNjAJLyogU0RNQV81OSAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfTU1DMV9UWAkJNjEJLyogU0RNQV82MCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfTU1DMV9SWAkJNjIJLyogU0RNQV82MSAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfTVMJCQk2MwkvKiBTRE1BXzYyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEhhcmR3YXJlIHJlZ2lzdGVycyBmb3IgTENEIERNQSAqLwogI2RlZmluZSBPTUFQMTUxMF9ETUFfTENEX0JBU0UJCSgweGZmZmVkYjAwKQogI2RlZmluZSBPTUFQMTUxMF9ETUFfTENEX0NUUkwJCShPTUFQMTUxMF9ETUFfTENEX0JBU0UgKyAweDAwKQogI2RlZmluZSBPTUFQMTUxMF9ETUFfTENEX1RPUF9GMV9MCShPTUFQMTUxMF9ETUFfTENEX0JBU0UgKyAweDAyKQpAQCAtMTE2LDcgKzI1OSw3IEBACiAjZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfQk9UX0YxX1UJKE9NQVAxNTEwX0RNQV9MQ0RfQkFTRSArIDB4MDgpCiAKICNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9CQVNFCQkoMHhmZmZlZTMwMCkKLSNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9DU0RQICAgICAgCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGMwKQorI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0NTRFAJCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGMwKQogI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0NDUgkJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4YzIpCiAjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQ1RSTAkJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4YzQpCiAjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfVE9QX0IxX0wJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4YzgpCkBAIC0xMzQsMzcgKzI3NywxOCBAQAogI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0xDSF9DVFJMCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGVhKQogI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1NSQ19GSV9CMV9VCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGY0KQogCi0KLS8qIEV2ZXJ5IExDaCBoYXMgaXRzIG93biBzZXQgb2YgdGhlIHJlZ2lzdGVycyBiZWxvdyAqLwotI2RlZmluZSBPTUFQX0RNQV9DU0RQKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDAwKQotI2RlZmluZSBPTUFQX0RNQV9DQ1IobikJCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDAyKQotI2RlZmluZSBPTUFQX0RNQV9DSUNSKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDA0KQotI2RlZmluZSBPTUFQX0RNQV9DU1IobikJCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDA2KQotI2RlZmluZSBPTUFQX0RNQV9DU1NBX0wobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MDgpCi0jZGVmaW5lIE9NQVBfRE1BX0NTU0FfVShuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwYSkKLSNkZWZpbmUgT01BUF9ETUFfQ0RTQV9MKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDBjKQotI2RlZmluZSBPTUFQX0RNQV9DRFNBX1UobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MGUpCi0jZGVmaW5lIE9NQVBfRE1BX0NFTihuKQkJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MTApCi0jZGVmaW5lIE9NQVBfRE1BX0NGTihuKQkJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MTIpCi0jZGVmaW5lIE9NQVBfRE1BX0NTRkkobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MTQpCi0jZGVmaW5lIE9NQVBfRE1BX0NTRUkobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MTYpCi0jZGVmaW5lIE9NQVBfRE1BX0NTQUMobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MTgpCi0jZGVmaW5lIE9NQVBfRE1BX0NEQUMobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MWEpCi0jZGVmaW5lIE9NQVBfRE1BX0NERUkobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MWMpCi0jZGVmaW5lIE9NQVBfRE1BX0NERkkobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MWUpCi0jZGVmaW5lIE9NQVBfRE1BX0NPTE9SX0wobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MjApCi0jZGVmaW5lIE9NQVBfRE1BX0NPTE9SX1UobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MjIpCi0jZGVmaW5lIE9NQVBfRE1BX0NDUjIobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MjQpCi0jZGVmaW5lIE9NQVBfRE1BX0NMTktfQ1RSTChuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgyOCkKLSNkZWZpbmUgT01BUF9ETUFfTENIX0NUUkwobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MmEpCi0KLSNkZWZpbmUgT01BUF9ETUFfVE9VVF9JUlEJCSgxIDw8IDApCisjZGVmaW5lIE9NQVBfRE1BX1RPVVRfSVJRCQkoMSA8PCAwKQkvKiBPbmx5IG9uIG9tYXAxICovCiAjZGVmaW5lIE9NQVBfRE1BX0RST1BfSVJRCQkoMSA8PCAxKQogI2RlZmluZSBPTUFQX0RNQV9IQUxGX0lSUQkJKDEgPDwgMikKICNkZWZpbmUgT01BUF9ETUFfRlJBTUVfSVJRCQkoMSA8PCAzKQogI2RlZmluZSBPTUFQX0RNQV9MQVNUX0lSUQkJKDEgPDwgNCkKICNkZWZpbmUgT01BUF9ETUFfQkxPQ0tfSVJRCQkoMSA8PCA1KQotI2RlZmluZSBPTUFQX0RNQV9TWU5DX0lSUQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDFfRE1BX1NZTkNfSVJRCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQMl9ETUFfUEtUX0lSUQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDJfRE1BX1RSQU5TX0VSUl9JUlEJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVAyX0RNQV9TRUNVUkVfRVJSX0lSUQkoMSA8PCA5KQorI2RlZmluZSBPTUFQMl9ETUFfU1VQRVJWSVNPUl9FUlJfSVJRCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQMl9ETUFfTUlTQUxJR05FRF9FUlJfSVJRCSgxIDw8IDExKQogCiAjZGVmaW5lIE9NQVBfRE1BX0RBVEFfVFlQRV9TOAkJMHgwMAogI2RlZmluZSBPTUFQX0RNQV9EQVRBX1RZUEVfUzE2CQkweDAxCkBAIC0xOTQsNiArMzE4LDcgQEAKIAlPTUFQX0xDRF9ETUFfQjJfQk9UVE9NCiB9OwogCisvKiBSRVZJU0lUOiBDaGVjayBpZiBCVVJTVF80IGlzIHJlYWxseSAxIChvciAyKSAqLwogZW51bSBvbWFwX2RtYV9idXJzdF9tb2RlIHsKIAlPTUFQX0RNQV9EQVRBX0JVUlNUX0RJUyA9IDAsCiAJT01BUF9ETUFfREFUQV9CVVJTVF80LApAQCAtMjA2LDYgKzMzMSwzMSBAQAogCU9NQVBfRE1BX1RSQU5TUEFSRU5UX0NPUFkKIH07CiAKK3N0cnVjdCBvbWFwX2RtYV9jaGFubmVsX3BhcmFtcyB7CisJaW50IGRhdGFfdHlwZTsJCS8qIGRhdGEgdHlwZSA4LDE2LDMyICovCisJaW50IGVsZW1fY291bnQ7CQkvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gYSBmcmFtZSAqLworCWludCBmcmFtZV9jb3VudDsJLyogbnVtYmVyIG9mIGZyYW1lcyBpbiBhIGVsZW1lbnQgKi8KKworCWludCBzcmNfcG9ydDsJCS8qIE9ubHkgb24gT01BUDEgUkVWSVNJVDogSXMgdGhpcyBuZWVkZWQ/ICovCisJaW50IHNyY19hbW9kZTsJCS8qIGNvbnN0YW50ICwgcG9zdCBpbmNyZW1lbnQsIGluZGV4ZWQgLCBkb3VibGUgaW5kZXhlZCAqLworCWludCBzcmNfc3RhcnQ7CQkvKiBzb3VyY2UgYWRkcmVzcyA6IHBoeXNpY2FsICovCisJaW50IHNyY19laTsJCS8qIHNvdXJjZSBlbGVtZW50IGluZGV4ICovCisJaW50IHNyY19maTsJCS8qIHNvdXJjZSBmcmFtZSBpbmRleCAqLworCisJaW50IGRzdF9wb3J0OwkJLyogT25seSBvbiBPTUFQMSBSRVZJU0lUOiBJcyB0aGlzIG5lZWRlZD8gKi8KKwlpbnQgZHN0X2Ftb2RlOwkJLyogY29uc3RhbnQgLCBwb3N0IGluY3JlbWVudCwgaW5kZXhlZCAsIGRvdWJsZSBpbmRleGVkICovCisJaW50IGRzdF9zdGFydDsJCS8qIHNvdXJjZSBhZGRyZXNzIDogcGh5c2ljYWwgKi8KKwlpbnQgZHN0X2VpOwkJLyogc291cmNlIGVsZW1lbnQgaW5kZXggKi8KKwlpbnQgZHN0X2ZpOwkJLyogc291cmNlIGZyYW1lIGluZGV4ICovCisKKwlpbnQgdHJpZ2dlcjsJCS8qIHRyaWdnZXIgYXR0YWNoZWQgaWYgdGhlIGNoYW5uZWwgaXMgc3luY2hyb25pemVkICovCisJaW50IHN5bmNfbW9kZTsJCS8qIHN5Y24gb24gZWxlbWVudCwgZnJhbWUgLCBibG9jayBvciBwYWNrZXQgKi8KKwlpbnQgc3JjX29yX2RzdF9zeW5jaDsJLyogc291cmNlIHN5bmNoKDEpIG9yIGRlc3RpbmF0aW9uIHN5bmNoKDApICovCisKKwlpbnQgaWU7CQkJLyogaW50ZXJydXB0IGVuYWJsZWQgKi8KK307CisKKwogZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX3ByaW9yaXR5KGludCBkc3RfcG9ydCwgaW50IHByaW9yaXR5KTsKIGV4dGVybiBpbnQgb21hcF9yZXF1ZXN0X2RtYShpbnQgZGV2X2lkLCBjb25zdCBjaGFyICpkZXZfbmFtZSwKIAkJCSAgICB2b2lkICgqIGNhbGxiYWNrKShpbnQgbGNoLCB1MTYgY2hfc3RhdHVzLCB2b2lkICpkYXRhKSwKQEAgLTIxNywyNCArMzY3LDMwIEBACiBleHRlcm4gdm9pZCBvbWFwX3N0b3BfZG1hKGludCBsY2gpOwogZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhpbnQgbGNoLCBpbnQgZGF0YV90eXBlLAogCQkJCQkgaW50IGVsZW1fY291bnQsIGludCBmcmFtZV9jb3VudCwKLQkJCQkJIGludCBzeW5jX21vZGUpOworCQkJCQkgaW50IHN5bmNfbW9kZSwKKwkJCQkJIGludCBkbWFfdHJpZ2dlciwgaW50IHNyY19vcl9kc3Rfc3luY2gpOwogZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX2NvbG9yX21vZGUoaW50IGxjaCwgZW51bSBvbWFwX2RtYV9jb2xvcl9tb2RlIG1vZGUsCiAJCQkJICAgIHUzMiBjb2xvcik7CiAKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKGludCBsY2gsIGludCBzcmNfcG9ydCwgaW50IHNyY19hbW9kZSwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQpOworCQkJCSAgICB1bnNpZ25lZCBsb25nIHNyY19zdGFydCwKKwkJCQkgICAgaW50IHNyY19laSwgaW50IHNyY19maSk7CiBleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfc3JjX2luZGV4KGludCBsY2gsIGludCBlaWR4LCBpbnQgZmlkeCk7CiBleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfc3JjX2RhdGFfcGFjayhpbnQgbGNoLCBpbnQgZW5hYmxlKTsKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9zcmNfYnVyc3RfbW9kZShpbnQgbGNoLAogCQkJCQllbnVtIG9tYXBfZG1hX2J1cnN0X21vZGUgYnVyc3RfbW9kZSk7CiAKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhpbnQgbGNoLCBpbnQgZGVzdF9wb3J0LCBpbnQgZGVzdF9hbW9kZSwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZGVzdF9zdGFydCk7CisJCQkJICAgICB1bnNpZ25lZCBsb25nIGRlc3Rfc3RhcnQsCisJCQkJICAgICBpbnQgZHN0X2VpLCBpbnQgZHN0X2ZpKTsKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9kZXN0X2luZGV4KGludCBsY2gsIGludCBlaWR4LCBpbnQgZmlkeCk7CiBleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfZGVzdF9kYXRhX3BhY2soaW50IGxjaCwgaW50IGVuYWJsZSk7CiBleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfZGVzdF9idXJzdF9tb2RlKGludCBsY2gsCiAJCQkJCSBlbnVtIG9tYXBfZG1hX2J1cnN0X21vZGUgYnVyc3RfbW9kZSk7CiAKK2V4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9wYXJhbXMoaW50IGxjaCwKKwkJCQlzdHJ1Y3Qgb21hcF9kbWFfY2hhbm5lbF9wYXJhbXMgKiBwYXJhbXMpOworCiBleHRlcm4gdm9pZCBvbWFwX2RtYV9saW5rX2xjaCAoaW50IGxjaF9oZWFkLCBpbnQgbGNoX3F1ZXVlKTsKIGV4dGVybiB2b2lkIG9tYXBfZG1hX3VubGlua19sY2ggKGludCBsY2hfaGVhZCwgaW50IGxjaF9xdWV1ZSk7CiAKQEAgLTI0NCw5ICs0MDAsNiBAQAogZXh0ZXJuIHZvaWQgb21hcF9jbGVhcl9kbWEoaW50IGxjaCk7CiBleHRlcm4gaW50IG9tYXBfZG1hX3J1bm5pbmcodm9pZCk7CiAKLS8qIFJldHVybnMgMSBpZiB0aGUgRE1BIG1vZHVsZSBpcyBpbiBPTUFQMTUxMC1jb21wYXRpYmxlIG1vZGUsIDAgb3RoZXJ3aXNlICovCi1leHRlcm4gaW50IG9tYXBfZG1hX2luXzE1MTBfbW9kZSh2b2lkKTsKLQogLyogTENEIERNQSBmdW5jdGlvbnMgKi8KIGV4dGVybiBpbnQgb21hcF9yZXF1ZXN0X2xjZF9kbWEodm9pZCAoKiBjYWxsYmFjaykodTE2IHN0YXR1cywgdm9pZCAqZGF0YSksCiAJCQkJdm9pZCAqZGF0YSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2VudHJ5LW1hY3JvLlMKaW5kZXggMGQyOWI5Yy4uZjg4MTRhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9lbnRyeS1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZW50cnktbWFjcm8uUwpAQCAtMTAsNiArMTAsMjAgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDEpCiAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApICYmIFwKKwkoZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkpCisjZXJyb3IgIkZJWE1FOiBPTUFQNzMwIGRvZXNuJ3Qgc3VwcG9ydCBtdWx0aXBsZS1PTUFQIgorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKQorI2RlZmluZSBJTlRfSUgyX0lSUQkJSU5UXzczMF9JSDJfSVJRCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKQorI2RlZmluZSBJTlRfSUgyX0lSUQkJSU5UXzE1MTBfSUgyX0lSUQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKKyNkZWZpbmUgSU5UX0lIMl9JUlEJCUlOVF8xNjEwX0lIMl9JUlEKKyNlbHNlCisjd2FybmluZyAiSUgyIElSUSBkZWZhdWx0ZWQiCisjZGVmaW5lIElOVF9JSDJfSVJRCQlJTlRfMTUxMF9JSDJfSVJRCisjZW5kaWYKKwogIAkJLm1hY3JvCWRpc2FibGVfZmlxCiAJCS5lbmRtCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZnBnYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9mcGdhLmgKaW5kZXggNjc2ODA3ZC4uNmE4ODNlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9mcGdhLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9mcGdhLmgKQEAgLTE5LDcgKzE5LDcgQEAKICNpZm5kZWYgX19BU01fQVJDSF9PTUFQX0ZQR0FfSAogI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfRlBHQV9ICiAKLSNpZiBkZWZpbmVkKENPTkZJR19NQUNIX09NQVBfSU5OT1ZBVE9SKSAmJiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNTEwKQorI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfT01BUF9JTk5PVkFUT1IpICYmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpCiBleHRlcm4gdm9pZCBvbWFwMTUxMF9mcGdhX2luaXRfaXJxKHZvaWQpOwogI2Vsc2UKICNkZWZpbmUgb21hcDE1MTBfZnBnYV9pbml0X2lycSgpCSgwKQpAQCAtNzcsNiArNzcsOCBAQAogI2RlZmluZSBIMlAyX0RCR19GUEdBX0xPQURfTUVURVJfU0laRQkxMQogI2RlZmluZSBIMlAyX0RCR19GUEdBX0xPQURfTUVURVJfTUFTSwkoKDEgPDwgSDJQMl9EQkdfRlBHQV9MT0FEX01FVEVSX1NJWkUpIC0gMSkKIAorI2RlZmluZSBIMlAyX0RCR19GUEdBX1AyX0xFRF9USU1FUgkJKDEgPDwgMCkKKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9QMl9MRURfSURMRQkJKDEgPDwgMSkKIAogLyoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ncGlvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2dwaW8uaAppbmRleCA3NGNiMmI5Li4xYjM4ODU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2dwaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2dwaW8uaApAQCAtNjcsNyArNjcsNyBAQAogCiAjZGVmaW5lIE9NQVBfR1BJT19JUlEobnIpCShPTUFQX0dQSU9fSVNfTVBVSU8obnIpID8gXAogCQkJCSBJSF9NUFVJT19CQVNFICsgKChucikgJiAweDBmKSA6IFwKLQkJCQkgSUhfR1BJT19CQVNFICsgKChucikgJiAweDNmKSkKKwkJCQkgSUhfR1BJT19CQVNFICsgKG5yKSkKIAogZXh0ZXJuIGludCBvbWFwX2dwaW9faW5pdCh2b2lkKTsJLyogQ2FsbCBmcm9tIGJvYXJkIGluaXQgb25seSAqLwogZXh0ZXJuIGludCBvbWFwX3JlcXVlc3RfZ3BpbyhpbnQgZ3Bpbyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2hhcmR3YXJlLmgKaW5kZXggNjAyMDFlMS4uNTQwNmI4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9oYXJkd2FyZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaGFyZHdhcmUuaApAQCAtMjY3LDggKzI2Nyw2IEBACiAjZGVmaW5lIE9NQVBfTFBHMl9MQ1IJCQkoT01BUF9MUEcyX0JBU0UgKyAweDAwKQogI2RlZmluZSBPTUFQX0xQRzJfUE1SCQkJKE9NQVBfTFBHMl9CQVNFICsgMHgwNCkKIAotI2lmbmRlZiBfX0FTU0VNQkxFUl9fCi0KIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFByb2Nlc3NvciBzcGVjaWZpYyBkZWZpbmVzCkBAIC0yNzcsMTMgKzI3NSwxMSBAQAogCiAjaW5jbHVkZSAib21hcDczMC5oIgogI2luY2x1ZGUgIm9tYXAxNTEwLmgiCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjRYWAogI2luY2x1ZGUgIm9tYXAyNHh4LmgiCi0jZW5kaWYKLQogI2luY2x1ZGUgIm9tYXAxNnh4LmgiCiAKKyNpZm5kZWYgX19BU1NFTUJMRVJfXworCiAvKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBCb2FyZCBzcGVjaWZpYyBkZWZpbmVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lvLmgKaW5kZXggM2Q1YmNkNS4uZjViY2M5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaW8uaApAQCAtNTIsMjMgKzUyLDMzIEBACiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAorI2RlZmluZSBQQ0lPX0JBU0UJMAorCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMSkKKwogI2RlZmluZSBJT19QSFlTCQkweEZGRkIwMDAwCi0jZGVmaW5lIElPX09GRlNFVCAgICAgIC0weDAxMDAwMDAwCS8qIFZpcnR1YWwgSU8gPSAweGZlZmIwMDAwICovCisjZGVmaW5lIElPX09GRlNFVAkweDAxMDAwMDAwCS8qIFZpcnR1YWwgSU8gPSAweGZlZmIwMDAwICovCiAjZGVmaW5lIElPX1NJWkUJCTB4NDAwMDAKKyNkZWZpbmUgSU9fVklSVAkJKElPX1BIWVMgLSBJT19PRkZTRVQpCisjZGVmaW5lIElPX0FERFJFU1MocGEpCSgocGEpIC0gSU9fT0ZGU0VUKQorI2RlZmluZSBpb19wMnYocGEpCSgocGEpIC0gSU9fT0ZGU0VUKQorI2RlZmluZSBpb192MnAodmEpCSgodmEpICsgSU9fT0ZGU0VUKQogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKQotI2RlZmluZSBJT19QSFlTCQkweDQ4MDAwMDAwCS8qIEw0IHBlcmlwaGVyYWxzOyBvdGhlciBzdHVmZiBoYXMgdG8gYmUgbWFwcGVkICoKLQkJCQkJICogbWFudWFsbHkuICovCi0jZGVmaW5lIElPX09GRlNFVAkweDkwMDAwMDAwCS8qIFZpcnR1YWwgSU8gPSAweGQ4MDAwMDAwICovCi0jZGVmaW5lIElPX1NJWkUJCTB4MDgwMDAwMDAKLSNlbmRpZgogCi0jZGVmaW5lIElPX1ZJUlQJCShJT19QSFlTICsgSU9fT0ZGU0VUKQotI2RlZmluZSBJT19BRERSRVNTKHgpCSgoeCkgKyBJT19PRkZTRVQpCi0jZGVmaW5lIFBDSU9fQkFTRQkwCi0jZGVmaW5lIGlvX3Aydih4KQkoKHgpICsgSU9fT0ZGU0VUKQotI2RlZmluZSBpb192MnAoeCkJKCh4KSAtIElPX09GRlNFVCkKKy8qIFdlIG1hcCBib3RoIEwzIGFuZCBMNCBvbiBPTUFQMiAqLworI2RlZmluZSBMM18yNFhYX1BIWVMJTDNfMjRYWF9CQVNFCS8qIDB4NjgwMDAwMDAgKi8KKyNkZWZpbmUgTDNfMjRYWF9WSVJUCTB4ZjgwMDAwMDAKKyNkZWZpbmUgTDNfMjRYWF9TSVpFCVNaXzFNCQkvKiA0NGtCIG9mIDEyOE1CIHVzZWQsIHdhbnQgMU1CIHNlY3QgKi8KKyNkZWZpbmUgTDRfMjRYWF9QSFlTCUw0XzI0WFhfQkFTRQkvKiAweDQ4MDAwMDAwICovCisjZGVmaW5lIEw0XzI0WFhfVklSVAkweGQ4MDAwMDAwCisjZGVmaW5lIEw0XzI0WFhfU0laRQlTWl8xTQkJLyogMU1CIG9mIDEyOE1CIHVzZWQsIHdhbnQgMU1CIHNlY3QgKi8KKyNkZWZpbmUgSU9fT0ZGU0VUCTB4OTAwMDAwMDAKKyNkZWZpbmUgSU9fQUREUkVTUyhwYSkJKChwYSkgKyBJT19PRkZTRVQpCS8qIFdvcmtzIGZvciBMMyBhbmQgTDQgKi8KKyNkZWZpbmUgaW9fcDJ2KHBhKQkoKHBhKSArIElPX09GRlNFVCkJLyogV29ya3MgZm9yIEwzIGFuZCBMNCAqLworI2RlZmluZSBpb192MnAodmEpCSgodmEpIC0gSU9fT0ZGU0VUKQkvKiBXb3JrcyBmb3IgTDMgYW5kIEw0ICovCisKKyNlbmRpZgogCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pcnFzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lycXMuaAppbmRleCA3NGUxMDhjLi45Nzc5Njg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lycXMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lycXMuaApAQCAtMjIsOCArMjIsOCBAQAogICoJIGFyZSBkaWZmZXJlbnQuCiAgKi8KIAotI2lmbmRlZiBfX0FTTV9BUkNIX09NQVAxNTEwX0lSUVNfSAotI2RlZmluZSBfX0FTTV9BUkNIX09NQVAxNTEwX0lSUVNfSAorI2lmbmRlZiBfX0FTTV9BUkNIX09NQVAxNVhYX0lSUVNfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVAxNVhYX0lSUVNfSAogCiAvKgogICogSVJRIG51bWJlcnMgZm9yIGludGVycnVwdCBoYW5kbGVyIDEKQEAgLTMxLDcgKzMxLDYgQEAKICAqIE5PVEU6IFNlZSBhbHNvIHRoZSBPTUFQLTE1MTAgYW5kIDE2MTAgc3BlY2lmaWMgSVJRIG51bWJlcnMgYmVsb3cKICAqCiAgKi8KLSNkZWZpbmUgSU5UX0lIMl9JUlEJCTAKICNkZWZpbmUgSU5UX0NBTUVSQQkJMQogI2RlZmluZSBJTlRfRklRCQkJMwogI2RlZmluZSBJTlRfUlREWAkJNgpAQCAtNjAsNiArNTksNyBAQAogLyoKICAqIE9NQVAtMTUxMCBzcGVjaWZpYyBJUlEgbnVtYmVycyBmb3IgaW50ZXJydXB0IGhhbmRsZXIgMQogICovCisjZGVmaW5lIElOVF8xNTEwX0lIMl9JUlEJMAogI2RlZmluZSBJTlRfMTUxMF9SRVMyCQkyCiAjZGVmaW5lIElOVF8xNTEwX1NQSV9UWAkJNAogI2RlZmluZSBJTlRfMTUxMF9TUElfUlgJCTUKQEAgLTcxLDYgKzcxLDcgQEAKIC8qCiAgKiBPTUFQLTE2MTAgc3BlY2lmaWMgSVJRIG51bWJlcnMgZm9yIGludGVycnVwdCBoYW5kbGVyIDEKICAqLworI2RlZmluZSBJTlRfMTYxMF9JSDJfSVJRCTAKICNkZWZpbmUgSU5UXzE2MTBfSUgyX0ZJUQkyCiAjZGVmaW5lIElOVF8xNjEwX01jQlNQMl9UWAk0CiAjZGVmaW5lIElOVF8xNjEwX01jQlNQMl9SWAk1CkBAIC0yMzEsNiArMjMyLDEyIEBACiAjZGVmaW5lIElOVF83MzBfRE1BX0NIMTUJKDYyICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF83MzBfTkFORAkJKDYzICsgSUgyX0JBU0UpCiAKKyNkZWZpbmUgSU5UXzI0WFhfU1lTX05JUlEJNworI2RlZmluZSBJTlRfMjRYWF9TRE1BX0lSUTAJMTIKKyNkZWZpbmUgSU5UXzI0WFhfU0RNQV9JUlExCTEzCisjZGVmaW5lIElOVF8yNFhYX1NETUFfSVJRMgkxNAorI2RlZmluZSBJTlRfMjRYWF9TRE1BX0lSUTMJMTUKKyNkZWZpbmUgSU5UXzI0WFhfRFNTX0lSUQkyNQogI2RlZmluZSBJTlRfMjRYWF9HUElPX0JBTksxCTI5CiAjZGVmaW5lIElOVF8yNFhYX0dQSU9fQkFOSzIJMzAKICNkZWZpbmUgSU5UXzI0WFhfR1BJT19CQU5LMwkzMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVtb3J5LmgKaW5kZXggYmY1NDViNi4uZGY1MGRkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21lbW9yeS5oCkBAIC02MSw3ICs2MSw3IEBACiAgKiBOb3RlIHRoYXQgdGhlIGlzX2xidXNfZGV2aWNlKCkgdGVzdCBpcyBub3QgdmVyeSBlZmZpY2llbnQgb24gMTUxMAogICogYmVjYXVzZSBvZiB0aGUgc3RybmNtcCgpLgogICovCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCiAvKgogICogT01BUC0xNTEwIExvY2FsIEJ1cyBhZGRyZXNzIG9mZnNldApAQCAtODQsNyArODQsNyBAQAogCQkJCQl2aXJ0X3RvX2xidXMoYWRkcikgOiBcCiAJCQkJCV9fdmlydF90b19idXMoYWRkcik7fSkKIAotI2VuZGlmCS8qIENPTkZJR19BUkNIX09NQVAxNTEwICovCisjZW5kaWYJLyogQ09ORklHX0FSQ0hfT01BUDE1WFggKi8KIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVuZWxhdXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVuZWxhdXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmJlOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tZW5lbGF1cy5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21lbmVsYXVzLmgKKyAqCisgKiBGdW5jdGlvbnMgdG8gYWNjZXNzIE1lbmVsYXVzIHBvd2VyIG1hbmFnZW1lbnQgY2hpcAorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NRU5FTEFVU19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUVORUxBVVNfSAorCitleHRlcm4gdm9pZCBtZW5lbGF1c19tbWNfcmVnaXN0ZXIodm9pZCAoKmNhbGxiYWNrKSh1OCBjYXJkX21hc2spLAorCQkJCSAgdW5zaWduZWQgbG9uZyBkYXRhKTsKK2V4dGVybiB2b2lkIG1lbmVsYXVzX21tY19yZW1vdmUodm9pZCk7CitleHRlcm4gdm9pZCBtZW5lbGF1c19tbWNfb3BlbmRyYWluKGludCBlbmFibGUpOworCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgJiYgZGVmaW5lZChDT05GSUdfTUVORUxBVVMpCisjZGVmaW5lIG9tYXBfaGFzX21lbmVsYXVzKCkJMQorI2Vsc2UKKyNkZWZpbmUgb21hcF9oYXNfbWVuZWxhdXMoKQkwCisjZW5kaWYKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbXV4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL211eC5oCmluZGV4IDFiMWFkNDEuLjEzNDE1YTlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL211eC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbXV4LmgKQEAgLTQsNyArNCw3IEBACiAgKiBUYWJsZSBvZiB0aGUgT21hcCByZWdpc3RlciBjb25maWd1cmF0aW9ucyBmb3IgdGhlIEZVTkNfTVVYIGFuZAogICogUFVMTF9EV04gY29tYmluYXRpb25zLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFdyaXR0ZW4gYnkgVG9ueSBMaW5kZ3JlbiA8dG9ueS5saW5kZ3JlbkBub2tpYS5jb20+CiAgKgpAQCAtNTgsNiArNTgsMTYgQEAKIAkJCQkJLnB1X3BkX3JlZyA9IFBVX1BEX1NFTF8jI3JlZywgXAogCQkJCQkucHVfcGRfdmFsID0gc3RhdHVzLAogCisjZGVmaW5lIE1VWF9SRUdfNzMwKHJlZywgbW9kZV9vZmZzZXQsIG1vZGUpIC5tdXhfcmVnX25hbWUgPSAiT01BUDczMF9JT19DT05GXyIjcmVnLCBcCisJCQkJCS5tdXhfcmVnID0gT01BUDczMF9JT19DT05GXyMjcmVnLCBcCisJCQkJCS5tYXNrX29mZnNldCA9IG1vZGVfb2Zmc2V0LCBcCisJCQkJCS5tYXNrID0gbW9kZSwKKworI2RlZmluZSBQVUxMX1JFR183MzAocmVnLCBiaXQsIHN0YXR1cykJLnB1bGxfbmFtZSA9ICJPTUFQNzMwX0lPX0NPTkZfIiNyZWcsIFwKKwkJCQkJLnB1bGxfcmVnID0gT01BUDczMF9JT19DT05GXyMjcmVnLCBcCisJCQkJCS5wdWxsX2JpdCA9IGJpdCwgXAorCQkJCQkucHVsbF92YWwgPSBzdGF0dXMsCisKICNlbHNlCiAKICNkZWZpbmUgTVVYX1JFRyhyZWcsIG1vZGVfb2Zmc2V0LCBtb2RlKSAubXV4X3JlZyA9IEZVTkNfTVVYX0NUUkxfIyNyZWcsIFwKQEAgLTcxLDYgKzgxLDE1IEBACiAjZGVmaW5lIFBVX1BEX1JFRyhyZWcsIHN0YXR1cykJCS5wdV9wZF9yZWcgPSBQVV9QRF9TRUxfIyNyZWcsIFwKIAkJCQkJLnB1X3BkX3ZhbCA9IHN0YXR1cywKIAorI2RlZmluZSBNVVhfUkVHXzczMChyZWcsIG1vZGVfb2Zmc2V0LCBtb2RlKSBcCisJCQkJCS5tdXhfcmVnID0gT01BUDczMF9JT19DT05GXyMjcmVnLCBcCisJCQkJCS5tYXNrX29mZnNldCA9IG1vZGVfb2Zmc2V0LCBcCisJCQkJCS5tYXNrID0gbW9kZSwKKworI2RlZmluZSBQVUxMX1JFR183MzAocmVnLCBiaXQsIHN0YXR1cykJLnB1bGxfcmVnID0gT01BUDczMF9JT19DT05GXyMjcmVnLCBcCisJCQkJCS5wdWxsX2JpdCA9IGJpdCwgXAorCQkJCQkucHVsbF92YWwgPSBzdGF0dXMsCisKICNlbmRpZiAvKiBDT05GSUdfT01BUF9NVVhfREVCVUcgKi8KIAogI2RlZmluZSBNVVhfQ0ZHKGRlc2MsIG11eF9yZWcsIG1vZGVfb2Zmc2V0LCBtb2RlLAlcCkBAIC04NCwxMyArMTAzLDQ0IEBACiAJUFVfUERfUkVHKHB1X3BkX3JlZywgcHVfcGRfc3RhdHVzKQkJXAogfSwKIAorCisvKgorICogT01BUDczMCBoYXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgY29uZmlnIGZvciB0aGUgcGluIG11eC4KKyAqIC0gY29uZmlnIHJlZ3MgYXJlIHRoZSBPTUFQNzMwX0lPX0NPTkZfeCByZWdzIChzZWUgb21hcDczMC5oKSByZWdzIGFuZAorICogICBub3QgdGhlIEZVTkNfTVVYX0NUUkxfeCByZWdzIGZyb20gaGFyZHdhcmUuaAorICogLSBmb3IgcHVsbC11cC9kb3duLCBvbmx5IGhhcyBvbmUgZW5hYmxlIGJpdCB3aGljaCBpcyBpcyBpbiB0aGUgc2FtZSByZWdpc3RlcgorICogICBhcyBtdXggY29uZmlnCisgKi8KKyNkZWZpbmUgTVVYX0NGR183MzAoZGVzYywgbXV4X3JlZywgbW9kZV9vZmZzZXQsIG1vZGUsCVwKKwkJICAgcHVsbF9yZWcsIHB1bGxfYml0LCBwdWxsX3N0YXR1cywJXAorCQkgICBwdV9wZF9yZWcsIHB1X3BkX3N0YXR1cywgZGVidWdfc3RhdHVzKVwKK3sJCQkJCQkJXAorCS5uYW1lID0JIGRlc2MsCQkJCQlcCisJLmRlYnVnID0gZGVidWdfc3RhdHVzLAkJCQlcCisJTVVYX1JFR183MzAobXV4X3JlZywgbW9kZV9vZmZzZXQsIG1vZGUpCQlcCisJUFVMTF9SRUdfNzMwKG11eF9yZWcsIHB1bGxfYml0LCBwdWxsX3N0YXR1cykJXAorCVBVX1BEX1JFRyhwdV9wZF9yZWcsIHB1X3BkX3N0YXR1cykJCVwKK30sCisKKyNkZWZpbmUgTVVYX0NGR18yNFhYKGRlc2MsIHJlZ19vZmZzZXQsIG1vZGUsCQkJXAorCQkJCXB1bGxfZW4sIHB1bGxfbW9kZSwgZGJnKQlcCit7CQkJCQkJCQlcCisJLm5hbWUJCT0gZGVzYywJCQkJCVwKKwkuZGVidWcJCT0gZGJnLAkJCQkJXAorCS5tdXhfcmVnCT0gcmVnX29mZnNldCwJCQkJXAorCS5tYXNrCQk9IG1vZGUsCQkJCQlcCisJLnB1bGxfdmFsCT0gcHVsbF9lbiwJCQkJXAorCS5wdV9wZF92YWwJPSBwdWxsX21vZGUsCQkJCVwKK30sCisKKwogI2RlZmluZSBQVUxMX0RJU0FCTEVECTAKICNkZWZpbmUgUFVMTF9FTkFCTEVECTEKIAogI2RlZmluZSBQVUxMX0RPV04JMAogI2RlZmluZSBQVUxMX1VQCQkxCiAKLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBwaW5fY29uZmlnIHsKIAljaGFyICpuYW1lOwogCXVuc2lnbmVkIGNoYXIgYnVzeTsKIAl1bnNpZ25lZCBjaGFyIGRlYnVnOwpAQCAtMTA4LDEzICsxNTgsMjMgQEAKIAljb25zdCBjaGFyICpwdV9wZF9uYW1lOwogCWNvbnN0IHVuc2lnbmVkIGludCBwdV9wZF9yZWc7CiAJY29uc3QgdW5zaWduZWQgY2hhciBwdV9wZF92YWw7Ci19IHJlZ19jZmdfc2V0OworfTsKIAotLyoKLSAqIExvb2t1cCB0YWJsZSBmb3IgRlVOQ19NVVggYW5kIFBVTExfRFdOIHJlZ2lzdGVyIGNvbWJpbmF0aW9ucyBmb3IgZWFjaAotICogZGV2aWNlLiBTZWUgYWxzbyByZWdfY2ZnX3RhYmxlIGJlbG93IGZvciB0aGUgcmVnaXN0ZXIgdmFsdWVzLgotICovCi10eXBlZGVmIGVudW0geworZW51bSBvbWFwNzMwX2luZGV4IHsKKwkvKiBPTUFQIDczMCBrZXlib2FyZCAqLworCUUyXzczMF9LQlIwLAorCUo3XzczMF9LQlIxLAorCUUxXzczMF9LQlIyLAorCUYzXzczMF9LQlIzLAorCUQyXzczMF9LQlI0LAorCUMyXzczMF9LQkMwLAorCUQzXzczMF9LQkMxLAorCUU0XzczMF9LQkMyLAorCUY0XzczMF9LQkMzLAorCUUzXzczMF9LQkM0LAorfTsKKworZW51bSBvbWFwMXh4eF9pbmRleCB7CiAJLyogVUFSVDEgKEJUX1VBUlRfR0FUSU5HKSovCiAJVUFSVDFfVFggPSAwLAogCVVBUlQxX1JUUywKQEAgLTMzMSwyNDUgKzM5MSwzNCBAQAogCVYxMF8xNjEwX0NGX0lSRVEsCiAJVzEwXzE2MTBfQ0ZfUkVTRVQsCiAJVzExXzE2MTBfQ0ZfQ0QxLAotfSByZWdfY2ZnX3Q7Ci0KLSNpZiBkZWZpbmVkKF9fTVVYX0NfXykgJiYgZGVmaW5lZChDT05GSUdfT01BUF9NVVgpCi0KLS8qCi0gKiBUYWJsZSBvZiB2YXJpb3VzIEZVTkNfTVVYIGFuZCBQVUxMX0RXTiBjb21iaW5hdGlvbnMgZm9yIGVhY2ggZGV2aWNlLgotICogU2VlIGFsc28gcmVnX2NmZ190IGFib3ZlIGZvciB0aGUgbG9va3VwIHRhYmxlLgotICovCi1zdGF0aWMgY29uc3QgcmVnX2NmZ19zZXQgX19pbml0ZGF0YV9vcl9tb2R1bGUKLXJlZ19jZmdfdGFibGVbXSA9IHsKLS8qCi0gKgkgZGVzY3JpcHRpb24JCW11eCAgbW9kZSAgIG11eAkgcHVsbCBwdWxsICBwdWxsICBwdV9wZAkgcHUgIGRiZwotICoJCQkJcmVnICBvZmZzZXQgbW9kZSByZWcgIGJpdCAgIGVuYQkgIHJlZwotICovCi1NVVhfQ0ZHKCJVQVJUMV9UWCIsCQkgOSwgICAyMSwgICAgMSwJICAyLCAgIDMsICAgMCwJIE5BLAkgMCwgIDApCi1NVVhfQ0ZHKCJVQVJUMV9SVFMiLAkJIDksICAgMTIsICAgIDEsCSAgMiwgICAwLCAgIDAsCSBOQSwJIDAsICAwKQotCi0vKiBVQVJUMiAoQ09NX1VBUlRfR0FUSU5HKSwgY29uZmxpY3RzIHdpdGggVVNCMiAqLwotTVVYX0NGRygiVUFSVDJfVFgiLAkJIEMsICAgMjcsICAgIDEsCSAgMywgICAzLCAgIDAsCSBOQSwJIDAsICAwKQotTVVYX0NGRygiVUFSVDJfUlgiLAkJIEMsICAgMTgsICAgIDAsCSAgMywgICAxLCAgIDEsCSBOQSwJIDAsICAwKQotTVVYX0NGRygiVUFSVDJfQ1RTIiwJCSBDLCAgIDIxLCAgICAwLAkgIDMsICAgMSwgICAxLAkgTkEsCSAwLCAgMCkKLU1VWF9DRkcoIlVBUlQyX1JUUyIsCQkgQywgICAyNCwgICAgMSwJICAzLCAgIDIsICAgMCwJIE5BLAkgMCwgIDApCi0KLS8qIFVBUlQzIChHSUdBX1VBUlRfR0FUSU5HKSAqLwotTVVYX0NGRygiVUFSVDNfVFgiLAkJIDYsICAgIDAsICAgIDEsCSAgMCwgIDMwLCAgIDAsCSBOQSwJIDAsICAwKQotTVVYX0NGRygiVUFSVDNfUlgiLAkJIDYsICAgIDMsICAgIDAsCSAgMCwgIDMxLCAgIDEsCSBOQSwJIDAsICAwKQotTVVYX0NGRygiVUFSVDNfQ1RTIiwJCSA1LCAgIDEyLCAgICAyLAkgIDAsICAyNCwgICAwLAkgTkEsCSAwLCAgMCkKLU1VWF9DRkcoIlVBUlQzX1JUUyIsCQkgNSwgICAxNSwgICAgMiwJICAwLCAgMjUsICAgMCwJIE5BLAkgMCwgIDApCi1NVVhfQ0ZHKCJVQVJUM19DTEtSRVEiLAkJIDksICAgMjcsICAgIDAsCSAgMiwgICA1LCAgIDAsCSBOQSwJIDAsICAwKQotTVVYX0NGRygiVUFSVDNfQkNMSyIsCQkgQSwgICAgMCwgICAgMCwJICAyLCAgIDYsICAgMCwJIE5BLAkgMCwgIDApCi1NVVhfQ0ZHKCJZMTVfMTYxMF9VQVJUM19SVFMiLAkgQSwgICAgMCwgICAgMSwJICAyLCAgIDYsICAgMCwJIE5BLAkgMCwgIDApCi0KLS8qIFBXVCAmIFBXTCwgY29uZmxpY3RzIHdpdGggVUFSVDMgKi8KLU1VWF9DRkcoIlBXVCIsCQkgCSA2LCAgICAwLCAgICAyLAkgIDAsICAzMCwgICAwLAkgTkEsCSAwLCAgMCkKLU1VWF9DRkcoIlBXTCIsCQkgCSA2LCAgICAzLCAgICAxLAkgIDAsICAzMSwgICAxLAkgTkEsCSAwLCAgMCkKLQotLyogVVNCIGludGVybmFsIG1hc3RlciBnZW5lcmljICovCi1NVVhfQ0ZHKCJSMThfVVNCX1ZCVVMiLAkJIDcsICAgIDksICAgIDIsCSAgMSwgIDExLCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiUjE4XzE1MTBfVVNCX0dQSU8wIiwJIDcsICAgIDksICAgIDAsCSAgMSwgIDExLCAgIDEsCSBOQSwJIDAsICAxKQotLyogd29ya3MgYXJvdW5kIGVycmF0dW06ICBXNF9VU0JfUFVFTiBhbmQgVzRfVVNCX1BVRElTIGFyZSBzd2l0Y2hlZCEgKi8KLU1VWF9DRkcoIlc0X1VTQl9QVUVOIiwJCSBELCAgICAzLCAgICAzLAkgIDMsICAgNSwgICAxLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlc0X1VTQl9DTEtPIiwJCSBELCAgICAzLCAgICAxLAkgIDMsICAgNSwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlc0X1VTQl9ISUdIWiIsCQkgRCwgICAgMywgICAgNCwJICAzLCAgIDUsICAgMCwJICAzLAkgMCwgIDEpCi1NVVhfQ0ZHKCJXNF9HUElPNTgiLAkJIEQsICAgIDMsICAgIDcsCSAgMywgICA1LCAgIDAsCSAgMywJIDAsICAxKQotCi0vKiBVU0IxIG1hc3RlciAqLwotTVVYX0NGRygiVVNCMV9TVVNQIiwJCSA4LCAgIDI3LCAgICAyLAkgIDEsICAyNywgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlVTQjFfU0UwIiwJCSA5LCAgICAwLCAgICAyLAkgIDEsICAyOCwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlcxM18xNjEwX1VTQjFfU0UwIiwJIDksICAgIDAsICAgIDQsCSAgMSwgIDI4LCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiVVNCMV9UWEVOIiwJCSA5LCAgICAzLCAgICAyLAkgIDEsICAyOSwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlVTQjFfVFhEIiwJCSA5LCAgIDI0LCAgICAxLAkgIDIsICAgNCwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlVTQjFfVlAiLAkJIEEsICAgIDMsICAgIDEsCSAgMiwgICA3LCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiVVNCMV9WTSIsCQkgQSwgICAgNiwgICAgMSwJICAyLCAgIDgsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJVU0IxX1JDViIsCQkgQSwgICAgOSwgICAgMSwJICAyLCAgIDksICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJVU0IxX1NQRUVEIiwJCSBBLCAgIDEyLCAgICAyLAkgIDIsICAxMCwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlIxM18xNjEwX1VTQjFfU1BFRUQiLAkgQSwgICAxMiwgICAgNSwJICAyLCAgMTAsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJSMTNfMTcxMF9VU0IxX1NFTyIsCSBBLCAgIDEyLCAgICA1LCAgIDIsICAxMCwgICAwLCAgIE5BLCAgICAgMCwgIDEpCi0KLS8qIFVTQjIgbWFzdGVyICovCi1NVVhfQ0ZHKCJVU0IyX1NVU1AiLAkJIEIsICAgIDMsICAgIDEsCSAgMiwgIDE3LCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiVVNCMl9WUCIsCQkgQiwgICAgNiwgICAgMSwJICAyLCAgMTgsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJVU0IyX1RYRU4iLAkJIEIsICAgIDksICAgIDEsCSAgMiwgIDE5LCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiVVNCMl9WTSIsCQkgQywgICAxOCwgICAgMSwJICAzLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJVU0IyX1JDViIsCQkgQywgICAyMSwgICAgMSwJICAzLCAgIDEsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJVU0IyX1NFMCIsCQkgQywgICAyNCwgICAgMiwJICAzLCAgIDIsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJVU0IyX1RYRCIsCQkgQywgICAyNywgICAgMiwJICAzLCAgIDMsICAgMCwJIE5BLAkgMCwgIDEpCi0KLS8qIE9NQVAtMTUxMCBHUElPICovCi1NVVhfQ0ZHKCJSMThfMTUxMF9HUElPMCIsCSA3LCAgICA5LCAgICAwLCAgIDEsICAxMSwgICAxLCAgICAwLCAgICAgMCwgIDEpCi1NVVhfQ0ZHKCJSMTlfMTUxMF9HUElPMSIsCSA3LCAgICA2LCAgICAwLCAgIDEsICAxMCwgICAxLCAgICAwLCAgICAgMCwgIDEpCi1NVVhfQ0ZHKCJNMTRfMTUxMF9HUElPMiIsCSA3LCAgICAzLCAgICAwLCAgIDEsICAgOSwgICAxLCAgICAwLCAgICAgMCwgIDEpCi0KLS8qIE9NQVAxNjEwIEdQSU8gKi8KLU1VWF9DRkcoIlAxOF8xNjEwX0dQSU8zIiwJIDcsICAgIDAsICAgIDAsICAgMSwgICA4LCAgIDAsICAgTkEsICAgICAwLCAgMSkKLU1VWF9DRkcoIlkxNV8xNjEwX0dQSU8xNyIsCSBBLCAgICAwLCAgICA3LCAgIDIsICAgNiwgICAwLCAgIE5BLCAgICAgMCwgIDEpCi0KLS8qIE9NQVAtMTcxMCBHUElPICovCi1NVVhfQ0ZHKCJSMThfMTcxMF9HUElPMCIsICAgICAgICA3LCAgICA5LCAgICAwLCAgIDEsICAxMSwgICAxLCAgICAxLCAgICAgMSwgIDEpCi1NVVhfQ0ZHKCJWMl8xNzEwX0dQSU8xMCIsICAgICAgICBGLCAgIDI3LCAgICAxLCAgIDQsICAgMywgICAxLCAgICA0LCAgICAgMSwgIDEpCi1NVVhfQ0ZHKCJOMjFfMTcxMF9HUElPMTQiLCAgICAgICA2LCAgICA5LCAgICAwLCAgIDEsICAgMSwgICAxLCAgICAxLCAgICAgMSwgIDEpCi1NVVhfQ0ZHKCJXMTVfMTcxMF9HUElPNDAiLCAgICAgICA5LCAgIDI3LCAgICA3LCAgIDIsICAgNSwgICAxLCAgICAyLCAgICAgMSwgIDEpCi0KLS8qIE1QVUlPICovCi1NVVhfQ0ZHKCJNUFVJTzIiLAkJIDcsICAgMTgsICAgIDAsCSAgMSwgIDE0LCAgIDEsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiTjE1XzE2MTBfTVBVSU8yIiwJIDcsICAgMTgsICAgIDAsCSAgMSwgIDE0LCAgIDEsCSAgMSwJIDAsICAxKQotTVVYX0NGRygiTVBVSU80IiwJCSA3LCAgIDE1LCAgICAwLAkgIDEsICAxMywgICAxLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIk1QVUlPNSIsCQkgNywgICAxMiwgICAgMCwJICAxLCAgMTIsICAgMSwJIE5BLAkgMCwgIDEpCi0KLU1VWF9DRkcoIlQyMF8xNjEwX01QVUlPNSIsCSA3LCAgIDEyLCAgICAwLAkgIDEsICAxMiwgICAwLAkgIDMsCSAwLCAgMSkKLU1VWF9DRkcoIlcxMV8xNjEwX01QVUlPNiIsCTEwLCAgIDE1LCAgICAyLAkgIDMsICAgOCwgICAwLAkgIDMsCSAwLCAgMSkKLU1VWF9DRkcoIlYxMF8xNjEwX01QVUlPNyIsCSBBLCAgIDI0LCAgICAyLAkgIDIsICAxNCwgICAwLAkgIDIsCSAwLCAgMSkKLU1VWF9DRkcoIlcxMV8xNjEwX01QVUlPOSIsCTEwLCAgIDE1LCAgICAxLAkgIDMsICAgOCwgICAwLAkgIDMsCSAwLCAgMSkKLU1VWF9DRkcoIlYxMF8xNjEwX01QVUlPMTAiLAkgQSwgICAyNCwgICAgMSwJICAyLCAgMTQsICAgMCwJICAyLAkgMCwgIDEpCi1NVVhfQ0ZHKCJXMTBfMTYxMF9NUFVJTzExIiwJIEEsICAgMTgsICAgIDIsCSAgMiwgIDExLCAgIDAsCSAgMiwJIDAsICAxKQotTVVYX0NGRygiRTIwXzE2MTBfTVBVSU8xMyIsCSAzLCAgIDIxLCAgICAxLAkgIDAsICAgNywgICAwLAkgIDAsCSAwLCAgMSkKLU1VWF9DRkcoIlUyMF8xNjEwX01QVUlPMTQiLAkgOSwgICAgNiwgICAgNiwJICAwLCAgMzAsICAgMCwJICAwLAkgMCwgIDEpCi1NVVhfQ0ZHKCJFMTlfMTYxMF9NUFVJTzE1IiwJIDMsICAgMTgsICAgIDEsCSAgMCwgICA2LCAgIDAsCSAgMCwJIDAsICAxKQotCi0vKiBNQ0JTUDIgKi8KLU1VWF9DRkcoIk1DQlNQMl9DTEtSIiwJCSBDLCAgICA2LCAgICAwLAkgIDIsICAyNywgICAxLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIk1DQlNQMl9DTEtYIiwJCSBDLCAgICA5LCAgICAwLAkgIDIsICAyOSwgICAxLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIk1DQlNQMl9EUiIsCQkgQywgICAgMCwgICAgMCwJICAyLCAgMjYsICAgMSwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJNQ0JTUDJfRFgiLAkJIEMsICAgMTUsICAgIDAsCSAgMiwgIDMxLCAgIDEsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiTUNCU1AyX0ZTUiIsCQkgQywgICAxMiwgICAgMCwJICAyLCAgMzAsICAgMSwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJNQ0JTUDJfRlNYIiwJCSBDLCAgICAzLCAgICAwLAkgIDIsICAyNywgICAxLAkgTkEsCSAwLCAgMSkKLQotLyogTUNCU1AzIE5PVEU6IE1vZGUgbXVzdCAxIGZvciBjbG9jayAqLwotTVVYX0NGRygiTUNCU1AzX0NMS1giLAkJIDksICAgIDMsICAgIDEsCSAgMSwgIDI5LCAgIDAsCSBOQSwJIDAsICAxKQotCi0vKiBNaXNjIGJhbGxvdXRzICovCi1NVVhfQ0ZHKCJCQUxMT1VUX1Y4X0FSTUlPMyIsCSBCLCAgIDE4LCAgICAwLAkgIDIsICAyNSwgICAxLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIk4yMF9IRFEiLAkgICAgICAgNiwgICAxOCwgICAgMSwgICAxLCAgIDQsICAgMCwgICAgMSwgICAgIDQsICAwKQotCi0vKiBPTUFQLTE2MTAgTU1DMiAqLwotTVVYX0NGRygiVzhfMTYxMF9NTUMyX0RBVDAiLAkgQiwgICAyMSwgICAgNiwJICAyLCAgMjMsICAgMSwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJWOF8xNjEwX01NQzJfREFUMSIsCSBCLCAgIDI3LCAgICA2LAkgIDIsICAyNSwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIlcxNV8xNjEwX01NQzJfREFUMiIsCSA5LCAgIDEyLCAgICA2LAkgIDIsICAgNSwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIlIxMF8xNjEwX01NQzJfREFUMyIsCSBCLCAgIDE4LCAgICA2LAkgIDIsICAyMiwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIlkxMF8xNjEwX01NQzJfQ0xLIiwJIEIsICAgIDMsICAgIDYsCSAgMiwgIDE3LCAgIDAsCSAgMiwJIDAsICAxKQotTVVYX0NGRygiWThfMTYxMF9NTUMyX0NNRCIsCSBCLCAgIDI0LCAgICA2LAkgIDIsICAyNCwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIlY5XzE2MTBfTU1DMl9DTURESVIiLAkgQiwgICAxMiwgICAgNiwJICAyLCAgMjAsICAgMCwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJWNV8xNjEwX01NQzJfREFURElSMCIsCSBCLCAgIDE1LCAgICA2LAkgIDIsICAyMSwgICAwLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIlcxOV8xNjEwX01NQzJfREFURElSMSIsIDgsICAgMTUsICAgIDYsCSAgMSwgIDIzLCAgIDAsCSAgMSwJIDEsICAxKQotTVVYX0NGRygiUjE4XzE2MTBfTU1DMl9DTEtJTiIsCSA3LCAgICA5LCAgICA2LAkgIDEsICAxMSwgICAwLAkgIDEsCTExLCAgMSkKLQotLyogT01BUC0xNjEwIEV4dGVybmFsIFRyYWNlIEludGVyZmFjZSAqLwotTVVYX0NGRygiTTE5XzE2MTBfRVRNX1BTVEFUMCIsCSA1LCAgIDI3LCAgICAxLAkgIDAsICAyOSwgICAwLAkgIDAsCSAwLCAgMSkKLU1VWF9DRkcoIkwxNV8xNjEwX0VUTV9QU1RBVDEiLAkgNSwgICAyNCwgICAgMSwJICAwLCAgMjgsICAgMCwJICAwLAkgMCwgIDEpCi1NVVhfQ0ZHKCJMMThfMTYxMF9FVE1fUFNUQVQyIiwJIDUsICAgMjEsICAgIDEsCSAgMCwgIDI3LCAgIDAsCSAgMCwJIDAsICAxKQotTVVYX0NGRygiTDE5XzE2MTBfRVRNX0QwIiwJIDUsICAgMTgsICAgIDEsCSAgMCwgIDI2LCAgIDAsCSAgMCwJIDAsICAxKQotTVVYX0NGRygiSjE5XzE2MTBfRVRNX0Q2IiwJIDUsICAgIDAsICAgIDEsCSAgMCwgIDIwLCAgIDAsCSAgMCwJIDAsICAxKQotTVVYX0NGRygiSjE4XzE2MTBfRVRNX0Q3IiwJIDUsICAgMjcsICAgIDEsCSAgMCwgIDE5LCAgIDAsCSAgMCwJIDAsICAxKQotCi0vKiBPTUFQMTZYWCBHUElPICovCi1NVVhfQ0ZHKCJQMjBfMTYxMF9HUElPNCIsCSA2LCAgIDI3LCAgICAwLAkgIDEsICAgNywgICAwLAkgIDEsCSAxLCAgMSkKLU1VWF9DRkcoIlY5XzE2MTBfR1BJTzciLAkgQiwgICAxMiwgICAgMSwJICAyLCAgMjAsICAgMCwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJXOF8xNjEwX0dQSU85IiwJIEIsICAgMjEsICAgIDAsCSAgMiwgIDIzLCAgIDAsCSAgMiwJIDEsICAxKQotTVVYX0NGRygiTjIwXzE2MTBfR1BJTzExIiwgICAgICAgNiwgICAxOCwgICAgMCwgICAxLCAgIDQsICAgMCwgICAgMSwgICAgIDEsICAxKQotTVVYX0NGRygiTjE5XzE2MTBfR1BJTzEzIiwJIDYsICAgMTIsICAgIDAsCSAgMSwgICAyLCAgIDAsCSAgMSwJIDEsICAxKQotTVVYX0NGRygiUDEwXzE2MTBfR1BJTzIyIiwJIEMsICAgIDAsICAgIDcsCSAgMiwgIDI2LCAgIDAsCSAgMiwJIDEsICAxKQotTVVYX0NGRygiVjVfMTYxMF9HUElPMjQiLAkgQiwgICAxNSwgICAgNywJICAyLCAgMjEsICAgMCwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJBQTIwXzE2MTBfR1BJT180MSIsCSA5LCAgICA5LCAgICA3LAkgIDEsICAzMSwgICAwLAkgIDEsCSAxLCAgMSkKLU1VWF9DRkcoIlcxOV8xNjEwX0dQSU80OCIsCSA4LCAgIDE1LCAgICA3LCAgIDEsICAyMywgICAxLCAgICAxLCAgICAgMCwgIDEpCi1NVVhfQ0ZHKCJNN18xNjEwX0dQSU82MiIsCTEwLCAgICAwLCAgICAwLCAgIDQsICAyNCwgICAwLCAgICA0LCAgICAgMCwgIDEpCi1NVVhfQ0ZHKCJWMTRfMTZYWF9HUElPMzciLAkgOSwgICAxOCwgICAgNywJICAyLCAgIDIsICAgMCwJICAyLAkgMiwgIDApCi1NVVhfQ0ZHKCJSOV8xNlhYX0dQSU8xOCIsCSBDLCAgIDE4LCAgICA3LCAgIDMsICAgMCwgICAwLCAgICAzLCAgICAgMCwgIDApCi1NVVhfQ0ZHKCJMMTRfMTZYWF9HUElPNDkiLAkgNiwgICAgMywgICAgNywgICAwLCAgMzEsICAgMCwgICAgMCwgICAgMzEsICAwKQotCi0vKiBPTUFQLTE2MTAgdVdpcmUgKi8KLU1VWF9DRkcoIlYxOV8xNjEwX1VXSVJFX1NDTEsiLAkgOCwgICAgNiwgICAgMCwJICAxLCAgMjAsICAgMCwJICAxLAkgMSwgIDEpCi1NVVhfQ0ZHKCJVMThfMTYxMF9VV0lSRV9TREkiLAkgOCwgICAgMCwgICAgMCwJICAxLCAgMTgsICAgMCwJICAxLAkgMSwgIDEpCi1NVVhfQ0ZHKCJXMjFfMTYxMF9VV0lSRV9TRE8iLAkgOCwgICAgMywgICAgMCwJICAxLCAgMTksICAgMCwJICAxLAkgMSwgIDEpCi1NVVhfQ0ZHKCJOMTRfMTYxMF9VV0lSRV9DUzAiLAkgOCwgICAgOSwgICAgMSwJICAxLCAgMjEsICAgMCwJICAxLAkgMSwgIDEpCi1NVVhfQ0ZHKCJQMTVfMTYxMF9VV0lSRV9DUzMiLAkgOCwgICAxMiwgICAgMSwJICAxLCAgMjIsICAgMCwJICAxLAkgMSwgIDEpCi1NVVhfQ0ZHKCJOMTVfMTYxMF9VV0lSRV9DUzEiLAkgNywgICAxOCwgICAgMiwJICAxLCAgMTQsICAgMCwJIE5BLAkgMCwgIDEpCi0KLS8qIE9NQVAtMTYxMCBGbGFzaCAqLwotTVVYX0NGRygiTDNfMTYxMF9GTEFTSF9DUzJCX09FIiwxMCwgICAgNiwgICAgMSwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJNOF8xNjEwX0ZMQVNIX0NTMkJfV0UiLDEwLCAgICAzLCAgICAxLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKLQotLyogRmlyc3QgTU1DIGludGVyZmFjZSwgc2FtZSBvbiAxNTEwLCAxNjEwIGFuZCAxNzEwICovCi1NVVhfQ0ZHKCJNTUNfQ01EIiwJCSBBLCAgIDI3LCAgICAwLAkgIDIsICAxNSwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIk1NQ19EQVQxIiwJCSBBLCAgIDI0LCAgICAwLAkgIDIsICAxNCwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIk1NQ19EQVQyIiwJCSBBLCAgIDE4LCAgICAwLAkgIDIsICAxMiwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIk1NQ19EQVQwIiwJCSBCLCAgICAwLCAgICAwLAkgIDIsICAxNiwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIk1NQ19DTEsiLAkJIEEsICAgMjEsICAgIDAsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiTU1DX0RBVDMiLAkJMTAsICAgMTUsICAgIDAsCSAgMywgICA4LCAgIDEsCSAgMywJIDEsICAxKQotTVVYX0NGRygiTTE1XzE3MTBfTU1DX0NMS0kiLAkgNiwgICAyMSwgICAgMiwgICAwLCAgIDAsICAgMCwgICBOQSwgICAgIDAsICAxKQotTVVYX0NGRygiUDE5XzE3MTBfTU1DX0NNRERJUiIsCSA2LCAgIDI0LCAgICA2LCAgIDAsICAgMCwgICAwLCAgIE5BLCAgICAgMCwgIDEpCi1NVVhfQ0ZHKCJQMjBfMTcxMF9NTUNfREFURElSMCIsCSA2LCAgIDI3LCAgICA1LCAgIDAsICAgMCwgICAwLCAgIE5BLCAgICAgMCwgIDEpCi0KLS8qIE9NQVAtMTYxMCBVU0IwIGFsdGVybmF0ZSBjb25maWd1cmF0aW9uICovCi1NVVhfQ0ZHKCJXOV9VU0IwX1RYRU4iLAkJIEIsICAgOSwgICAgIDUsCSAgMiwgIDE5LCAgIDAsCSAgMiwJIDAsICAxKQotTVVYX0NGRygiQUE5X1VTQjBfVlAiLAkJIEIsICAgNiwgICAgIDUsCSAgMiwgIDE4LCAgIDAsCSAgMiwJIDAsICAxKQotTVVYX0NGRygiWTVfVVNCMF9SQ1YiLAkJIEMsICAyMSwgICAgIDUsCSAgMywgICAxLCAgIDAsCSAgMSwJIDAsICAxKQotTVVYX0NGRygiUjlfVVNCMF9WTSIsCQkgQywgIDE4LCAgICAgNSwJICAzLCAgIDAsICAgMCwJICAzLAkgMCwgIDEpCi1NVVhfQ0ZHKCJWNl9VU0IwX1RYRCIsCQkgQywgIDI3LCAgICAgNSwJICAzLCAgIDMsICAgMCwJICAzLAkgMCwgIDEpCi1NVVhfQ0ZHKCJXNV9VU0IwX1NFMCIsCQkgQywgIDI0LCAgICAgNSwJICAzLCAgIDIsICAgMCwJICAzLAkgMCwgIDEpCi1NVVhfQ0ZHKCJWOV9VU0IwX1NQRUVEIiwJIEIsICAxMiwgICAgIDUsCSAgMiwgIDIwLCAgIDAsCSAgMiwJIDAsICAxKQotTVVYX0NGRygiWTEwX1VTQjBfU1VTUCIsCSBCLCAgIDMsICAgICA1LAkgIDIsICAxNywgICAwLAkgIDIsCSAwLCAgMSkKLQotLyogVVNCMiBpbnRlcmZhY2UgKi8KLU1VWF9DRkcoIlc5X1VTQjJfVFhFTiIsCQkgQiwgICA5LCAgICAgMSwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJBQTlfVVNCMl9WUCIsCQkgQiwgICA2LCAgICAgMSwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJZNV9VU0IyX1JDViIsCQkgQywgIDIxLCAgICAgMSwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJSOV9VU0IyX1ZNIiwJCSBDLCAgMTgsICAgICAxLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlY2X1VTQjJfVFhEIiwJCSBDLCAgMjcsICAgICAyLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlc1X1VTQjJfU0UwIiwJCSBDLCAgMjQsICAgICAyLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKLQotLyogMTZYWCBVQVJUICovCi1NVVhfQ0ZHKCJSMTNfMTYxMF9VQVJUMV9UWCIsCSBBLCAgMTIsICAgICA2LAkgIDIsICAxMCwgICAwLAkgIDIsCTEwLCAgMSkKLU1VWF9DRkcoIlYxNF8xNlhYX1VBUlQxX1JYIiwJIDksICAxOCwgICAgIDAsCSAgMiwgICAyLCAgIDAsCSAgMiwJIDIsICAxKQotTVVYX0NGRygiUjE0XzE2MTBfVUFSVDFfQ1RTIiwJIDksICAxNSwgICAgIDAsCSAgMiwgICAxLCAgIDAsCSAgMiwJIDEsICAxKQotTVVYX0NGRygiQUExNV8xNjEwX1VBUlQxX1JUUyIsCSA5LCAgMTIsICAgICAxLAkgIDIsICAgMCwgICAwLAkgIDIsCSAwLCAgMSkKLU1VWF9DRkcoIlI5XzE2WFhfVUFSVDJfUlgiLAkgQywgIDE4LCAgICAgMCwgICAzLCAgIDAsICAgMCwgICAgMywgICAgIDAsICAxKQotTVVYX0NGRygiTDE0XzE2WFhfVUFSVDNfUlgiLAkgNiwgICAzLCAgICAgMCwgICAwLCAgMzEsICAgMCwgICAgMCwgICAgMzEsICAxKQotCi0vKiBJMkMgaW50ZXJmYWNlICovCi1NVVhfQ0ZHKCJJMkNfU0NMIiwJCSA3LCAgMjQsICAgICAwLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMCkKLU1VWF9DRkcoIkkyQ19TREEiLAkJIDcsICAyNywgICAgIDAsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAwKQotCi0vKiBLZXlwYWQgKi8KLU1VWF9DRkcoIkYxOF8xNjEwX0tCQzAiLAkgMywgIDE1LCAgICAgMCwJICAwLCAgIDUsICAgMSwJICAwLAkgMCwgIDApCi1NVVhfQ0ZHKCJEMjBfMTYxMF9LQkMxIiwJIDMsICAxMiwgICAgIDAsCSAgMCwgICA0LCAgIDEsCSAgMCwJIDAsICAwKQotTVVYX0NGRygiRDE5XzE2MTBfS0JDMiIsCSAzLCAgIDksICAgICAwLAkgIDAsICAgMywgICAxLAkgIDAsCSAwLCAgMCkKLU1VWF9DRkcoIkUxOF8xNjEwX0tCQzMiLAkgMywgICA2LCAgICAgMCwJICAwLCAgIDIsICAgMSwJICAwLAkgMCwgIDApCi1NVVhfQ0ZHKCJDMjFfMTYxMF9LQkM0IiwJIDMsICAgMywgICAgIDAsCSAgMCwgICAxLCAgIDEsCSAgMCwJIDAsICAwKQotTVVYX0NGRygiRzE4XzE2MTBfS0JSMCIsCSA0LCAgIDAsICAgICAwLAkgIDAsICAgMTAsICAxLAkgIDAsCSAxLCAgMCkKLU1VWF9DRkcoIkYxOV8xNjEwX0tCUjEiLAkgMywgICAyNywgICAgMCwJICAwLCAgIDksICAgMSwJICAwLAkgMSwgIDApCi1NVVhfQ0ZHKCJIMTRfMTYxMF9LQlIyIiwJIDMsICAgMjQsICAgIDAsCSAgMCwgICA4LCAgIDEsCSAgMCwJIDEsICAwKQotTVVYX0NGRygiRTIwXzE2MTBfS0JSMyIsCSAzLCAgIDIxLCAgICAwLAkgIDAsICAgNywgICAxLAkgIDAsCSAxLCAgMCkKLU1VWF9DRkcoIkUxOV8xNjEwX0tCUjQiLAkgMywgICAxOCwgICAgMCwJICAwLCAgIDYsICAgMSwJICAwLAkgMSwgIDApCi1NVVhfQ0ZHKCJOMTlfMTYxMF9LQlI1IiwJIDYsICAxMiwgICAgIDEsCSAgMSwgICAyLCAgIDEsCSAgMSwJIDEsICAwKQotCi0vKiBQb3dlciBtYW5hZ2VtZW50ICovCi1NVVhfQ0ZHKCJUMjBfMTYxMF9MT1dfUFdSIiwJIDcsICAgMTIsICAgIDEsCSAgTkEsICAgMCwgICAwLCAgIE5BLAkgMCwgIDApCi0KLS8qIE1DTEsgU2V0dGluZ3MgKi8KLU1VWF9DRkcoIlY1XzE3MTBfTUNMS19PTiIsCSBCLCAgIDE1LCAgICAwLAkgIE5BLCAgIDAsICAgMCwgICBOQSwJIDAsICAwKQotTVVYX0NGRygiVjVfMTcxMF9NQ0xLX09GRiIsCSBCLCAgIDE1LCAgICA2LAkgIE5BLCAgIDAsICAgMCwgICBOQSwJIDAsICAwKQotTVVYX0NGRygiUjEwXzE2MTBfTUNMS19PTiIsCSBCLCAgIDE4LCAgICAwLAkgIE5BLCAgMjIsICAgMCwJICBOQSwJIDEsICAwKQotTVVYX0NGRygiUjEwXzE2MTBfTUNMS19PRkYiLAkgQiwgICAxOCwgICAgNiwJICAyLCAgIDIyLCAgIDEsCSAgMiwJIDEsICAxKQotCi0vKiBDb21wYWN0Rmxhc2ggY29udHJvbGxlciwgY29uZmxpY3RzIHdpdGggTU1DMSAqLwotTVVYX0NGRygiUDExXzE2MTBfQ0ZfQ0QyIiwJIEEsICAgMjcsICAgIDMsCSAgMiwgICAxNSwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIlIxMV8xNjEwX0NGX0lPSVMxNiIsCSBCLCAgICAwLCAgICAzLAkgIDIsICAgMTYsICAgMSwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJWMTBfMTYxMF9DRl9JUkVRIiwJIEEsICAgMjQsICAgIDMsCSAgMiwgICAxNCwgICAwLAkgIDIsCSAwLCAgMSkKLU1VWF9DRkcoIlcxMF8xNjEwX0NGX1JFU0VUIiwJIEEsICAgMTgsICAgIDMsCSAgMiwgICAxMiwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIlcxMV8xNjEwX0NGX0NEMSIsCTEwLCAgIDE1LCAgICAzLAkgIDMsICAgIDgsICAgMSwJICAzLAkgMSwgIDEpCiB9OwogCi0jZW5kaWYJLyogX19NVVhfQ19fICovCitlbnVtIG9tYXAyNHh4X2luZGV4IHsKKwkvKiAyNHh4IEkyQyAqLworCU0xOV8yNFhYX0kyQzFfU0NMLAorCUwxNV8yNFhYX0kyQzFfU0RBLAorCUoxNV8yNFhYX0kyQzJfU0NMLAorCUgxOV8yNFhYX0kyQzJfU0RBLAorCisJLyogMjR4eCBNZW5lbGF1cyBpbnRlcnJ1cHQgKi8KKwlXMTlfMjRYWF9TWVNfTklSUSwKKworCS8qIDI0eHggR1BJTyAqLworCVkyMF8yNFhYX0dQSU82MCwKKwlNMTVfMjRYWF9HUElPOTIsCit9OwogCiAjaWZkZWYJQ09ORklHX09NQVBfTVVYCiAvKiBzZXR1cCBwaW4gbXV4aW5nIGluIExpbnV4ICovCi1leHRlcm4gaW50IG9tYXBfY2ZnX3JlZyhyZWdfY2ZnX3QgcmVnX2NmZyk7CitleHRlcm4gaW50IG9tYXAxX211eF9pbml0KHZvaWQpOworZXh0ZXJuIGludCBvbWFwMl9tdXhfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgb21hcF9tdXhfcmVnaXN0ZXIoc3RydWN0IHBpbl9jb25maWcgKiBwaW5zLCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIGludCBvbWFwX2NmZ19yZWcodW5zaWduZWQgbG9uZyByZWdfY2ZnKTsKICNlbHNlCiAvKiBib290IGxvYWRlciBkb2VzIGl0IGFsbCAobm8gd2FybmluZ3MgZnJvbSBDT05GSUdfT01BUF9NVVhfV0FSTklOR1MpICovCi1zdGF0aWMgaW5saW5lIGludCBvbWFwX2NmZ19yZWcocmVnX2NmZ190IHJlZ19jZmcpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IG9tYXAxX211eF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IG9tYXAyX211eF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IG9tYXBfY2ZnX3JlZyh1bnNpZ25lZCBsb25nIHJlZ19jZmcpIHsgcmV0dXJuIDA7IH0KICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDE1MTAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDE1MTAuaAppbmRleCBmMDg2YTM5Li5jNTc1ZDM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAxNTEwLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwMTUxMC5oCkBAIC0yNSw4ICsyNSw4IEBACiAgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaWZuZGVmIF9fQVNNX0FSQ0hfT01BUDE1MTBfSAotI2RlZmluZSBfX0FTTV9BUkNIX09NQVAxNTEwX0gKKyNpZm5kZWYgX19BU01fQVJDSF9PTUFQMTVYWF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUDE1WFhfSAogCiAvKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDQsNSArNDQsNSBAQAogI2RlZmluZSBPTUFQMTUxMF9EU1BSRUdfU0laRQlTWl8xMjhLCiAjZGVmaW5lIE9NQVAxNTEwX0RTUFJFR19TVEFSVAkweEUxMDAwMDAwCiAKLSNlbmRpZiAvKiAgX19BU01fQVJDSF9PTUFQMTUxMF9IICovCisjZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUDE1WFhfSCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAyNHh4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAyNHh4LmgKaW5kZXggYTkxMDU0Ni4uNmU1OTgwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwMjR4eC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDI0eHguaApAQCAtMSwxNSArMSwyNCBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX09NQVAyNFhYX0gKICNkZWZpbmUgX19BU01fQVJDSF9PTUFQMjRYWF9ICiAKLSNkZWZpbmUgT01BUDI0WFhfTDRfSU9fQkFTRQkweDQ4MDAwMDAwCisvKgorICogUGxlYXNlIHBsYWNlIG9ubHkgYmFzZSBkZWZpbmVzIGhlcmUgYW5kIHB1dCB0aGUgcmVzdCBpbiBkZXZpY2UKKyAqIHNwZWNpZmljIGhlYWRlcnMuIE5vdGUgYWxzbyB0aGF0IHNvbWUgb2YgdGhlc2UgZGVmaW5lcyBhcmUgbmVlZGVkCisgKiBmb3Igb21hcDEgdG8gY29tcGlsZSB3aXRob3V0IGFkZGluZyBpZmRlZnMuCisgKi8KKworI2RlZmluZSBMNF8yNFhYX0JBU0UJCTB4NDgwMDAwMDAKKyNkZWZpbmUgTDNfMjRYWF9CQVNFCQkweDY4MDAwMDAwCiAKIC8qIGludGVycnVwdCBjb250cm9sbGVyICovCi0jZGVmaW5lIE9NQVAyNFhYX0lDX0JBU0UJKE9NQVAyNFhYX0w0X0lPX0JBU0UgKyAweGZlMDAwKQorI2RlZmluZSBPTUFQMjRYWF9JQ19CQVNFCShMNF8yNFhYX0JBU0UgKyAweGZlMDAwKQogI2RlZmluZSBWQV9JQ19CQVNFCQlJT19BRERSRVNTKE9NQVAyNFhYX0lDX0JBU0UpCi0KICNkZWZpbmUgT01BUDI0WFhfSVZBX0lOVENfQkFTRQkweDQwMDAwMDAwCi0KICNkZWZpbmUgSVJRX1NJUl9JUlEJCTB4MDA0MAogCisjZGVmaW5lIE9NQVAyNFhYXzMyS1NZTkNUX0JBU0UJKEw0XzI0WFhfQkFTRSArIDB4NDAwMCkKKyNkZWZpbmUgT01BUDI0WFhfUFJDTV9CQVNFCShMNF8yNFhYX0JBU0UgKyAweDgwMDApCisjZGVmaW5lIE9NQVAyNFhYX1NEUkNfQkFTRQkoTDNfMjRYWF9CQVNFICsgMHg5MDAwKQorCiAjZW5kaWYgLyogX19BU01fQVJDSF9PTUFQMjRYWF9IICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcGZiLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXBmYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYTI2MjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXBmYi5oCkBAIC0wLDAgKzEsMjgxIEBACisvKgorICogRmlsZTogaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwZmIuaAorICoKKyAqIEZyYW1lYnVmZmVyIGRyaXZlciBmb3IgVEkgT01BUCBib2FyZHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogSW1yZSBEZWFrIDxpbXJlLmRlYWtAbm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19PTUFQRkJfSAorI2RlZmluZSBfX09NQVBGQl9ICisKKy8qIElPQ1RMIGNvbW1hbmRzLiAqLworCisjZGVmaW5lIE9NQVBfSU9XKG51bSwgZHR5cGUpCV9JT1coJ08nLCBudW0sIGR0eXBlKQorI2RlZmluZSBPTUFQX0lPUihudW0sIGR0eXBlKQlfSU9SKCdPJywgbnVtLCBkdHlwZSkKKyNkZWZpbmUgT01BUF9JT1dSKG51bSwgZHR5cGUpCV9JT1dSKCdPJywgbnVtLCBkdHlwZSkKKyNkZWZpbmUgT01BUF9JTyhudW0pCQlfSU8oJ08nLCBudW0pCisKKyNkZWZpbmUgT01BUEZCX01JUlJPUgkJT01BUF9JT1coMzEsIGludCkKKyNkZWZpbmUgT01BUEZCX1NZTkNfR0ZYCQlPTUFQX0lPKDM3KQorI2RlZmluZSBPTUFQRkJfVlNZTkMJCU9NQVBfSU8oMzgpCisjZGVmaW5lIE9NQVBGQl9TRVRfVVBEQVRFX01PREUJT01BUF9JT1coNDAsIGVudW0gb21hcGZiX3VwZGF0ZV9tb2RlKQorI2RlZmluZSBPTUFQRkJfR0VUX0NBUFMJCU9NQVBfSU9SKDQyLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBPTUFQRkJfR0VUX1VQREFURV9NT0RFCU9NQVBfSU9XKDQzLCBlbnVtIG9tYXBmYl91cGRhdGVfbW9kZSkKKyNkZWZpbmUgT01BUEZCX0xDRF9URVNUCQlPTUFQX0lPVyg0NSwgaW50KQorI2RlZmluZSBPTUFQRkJfQ1RSTF9URVNUCU9NQVBfSU9XKDQ2LCBpbnQpCisjZGVmaW5lIE9NQVBGQl9VUERBVEVfV0lORE9XCU9NQVBfSU9XKDQ3LCBzdHJ1Y3Qgb21hcGZiX3VwZGF0ZV93aW5kb3cpCisjZGVmaW5lIE9NQVBGQl9TRVRVUF9QTEFORQlPTUFQX0lPVyg0OCwgc3RydWN0IG9tYXBmYl9zZXR1cF9wbGFuZSkKKyNkZWZpbmUgT01BUEZCX0VOQUJMRV9QTEFORQlPTUFQX0lPVyg0OSwgc3RydWN0IG9tYXBmYl9lbmFibGVfcGxhbmUpCisjZGVmaW5lIE9NQVBGQl9TRVRfQ09MT1JfS0VZCU9NQVBfSU9XKDUwLCBzdHJ1Y3Qgb21hcGZiX2NvbG9yX2tleSkKKworI2RlZmluZSBPTUFQRkJfQ0FQU19HRU5FUklDX01BU0sJMHgwMDAwMGZmZgorI2RlZmluZSBPTUFQRkJfQ0FQU19MQ0RDX01BU0sJCTB4MDBmZmYwMDAKKyNkZWZpbmUgT01BUEZCX0NBUFNfUEFORUxfTUFTSwkJMHhmZjAwMDAwMAorCisjZGVmaW5lIE9NQVBGQl9DQVBTX01BTlVBTF9VUERBVEUJMHgwMDAwMTAwMAorI2RlZmluZSBPTUFQRkJfQ0FQU19TRVRfQkFDS0xJR0hUCTB4MDEwMDAwMDAKKworLyogVmFsdWVzIGZyb20gRFNQIG11c3QgbWFwIHRvIGxvd2VyIDE2LWJpdHMgKi8KKyNkZWZpbmUgT01BUEZCX0ZPUk1BVF9NQVNLICAgICAgICAgMHgwMGZmCisjZGVmaW5lIE9NQVBGQl9GT1JNQVRfRkxBR19ET1VCTEUgIDB4MDEwMAorCitlbnVtIG9tYXBmYl9jb2xvcl9mb3JtYXQgeworCU9NQVBGQl9DT0xPUl9SR0I1NjUgPSAwLAorCU9NQVBGQl9DT0xPUl9ZVVY0MjIsCisJT01BUEZCX0NPTE9SX1lVVjQyMCwKKwlPTUFQRkJfQ09MT1JfQ0xVVF84QlBQLAorCU9NQVBGQl9DT0xPUl9DTFVUXzRCUFAsCisJT01BUEZCX0NPTE9SX0NMVVRfMkJQUCwKKwlPTUFQRkJfQ09MT1JfQ0xVVF8xQlBQLAorfTsKKworc3RydWN0IG9tYXBmYl91cGRhdGVfd2luZG93IHsKKwl1MzIgeCwgeTsKKwl1MzIgd2lkdGgsIGhlaWdodDsKKwl1MzIgZm9ybWF0OworfTsKKworZW51bSBvbWFwZmJfcGxhbmUgeworCU9NQVBGQl9QTEFORV9HRlggPSAwLAorCU9NQVBGQl9QTEFORV9WSUQxLAorCU9NQVBGQl9QTEFORV9WSUQyLAorfTsKKworZW51bSBvbWFwZmJfY2hhbm5lbF9vdXQgeworCU9NQVBGQl9DSEFOTkVMX09VVF9MQ0QgPSAwLAorCU9NQVBGQl9DSEFOTkVMX09VVF9ESUdJVCwKK307CisKK3N0cnVjdCBvbWFwZmJfc2V0dXBfcGxhbmUgeworCXU4ICBwbGFuZTsKKwl1OCAgY2hhbm5lbF9vdXQ7CisJdTMyIG9mZnNldDsKKwl1MzIgcG9zX3gsIHBvc195OworCXUzMiB3aWR0aCwgaGVpZ2h0OworCXUzMiBjb2xvcl9tb2RlOworfTsKKworc3RydWN0IG9tYXBmYl9lbmFibGVfcGxhbmUgeworCXU4ICBwbGFuZTsKKwl1OCAgZW5hYmxlOworfTsKKworZW51bSBvbWFwZmJfY29sb3Jfa2V5X3R5cGUgeworCU9NQVBGQl9DT0xPUl9LRVlfRElTQUJMRUQgPSAwLAorCU9NQVBGQl9DT0xPUl9LRVlfR0ZYX0RTVCwKKwlPTUFQRkJfQ09MT1JfS0VZX1ZJRF9TUkMsCit9OworCitzdHJ1Y3Qgb21hcGZiX2NvbG9yX2tleSB7CisJdTggIGNoYW5uZWxfb3V0OworCXUzMiBiYWNrZ3JvdW5kOworCXUzMiB0cmFuc19rZXk7CisJdTggIGtleV90eXBlOworfTsKKworZW51bSBvbWFwZmJfdXBkYXRlX21vZGUgeworCU9NQVBGQl9VUERBVEVfRElTQUJMRUQgPSAwLAorCU9NQVBGQl9BVVRPX1VQREFURSwKKwlPTUFQRkJfTUFOVUFMX1VQREFURQorfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorCisjZGVmaW5lIE9NQVBfTENEQ19JTlZfVlNZTkMgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIE9NQVBfTENEQ19JTlZfSFNZTkMgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIE9NQVBfTENEQ19JTlZfUElYX0NMT0NLICAgICAgICAgMHgwMDA0CisjZGVmaW5lIE9NQVBfTENEQ19JTlZfT1VUUFVUX0VOICAgICAgICAgMHgwMDA4CisjZGVmaW5lIE9NQVBfTENEQ19IU1ZTX1JJU0lOR19FREdFICAgICAgMHgwMDEwCisjZGVmaW5lIE9NQVBfTENEQ19IU1ZTX09QUE9TSVRFICAgICAgICAgMHgwMDIwCisKKyNkZWZpbmUgT01BUF9MQ0RDX1NJR05BTF9NQVNLCQkweDAwM2YKKworI2RlZmluZSBPTUFQX0xDRENfUEFORUxfVEZUCQkweDAxMDAKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCisjZGVmaW5lIE9NQVBGQl9QTEFORV9OVU0JCTEKKyNlbHNlCisjZGVmaW5lIE9NQVBGQl9QTEFORV9OVU0JCTMKKyNlbmRpZgorCitzdHJ1Y3Qgb21hcGZiX2RldmljZTsKKworc3RydWN0IGxjZF9wYW5lbCB7CisJY29uc3QgY2hhcgkqbmFtZTsKKwlpbnQJCWNvbmZpZzsJCS8qIFRGVC9TVE4sIHNpZ25hbCBpbnZlcnNpb24gKi8KKwlpbnQJCWJwcDsJCS8qIFBpeGVsIGZvcm1hdCBpbiBmYiBtZW0gKi8KKwlpbnQJCWRhdGFfbGluZXM7CS8qIExpbmVzIG9uIExDRCBIVyBpbnRlcmZhY2UgKi8KKworCWludAkJeF9yZXMsIHlfcmVzOworCWludAkJcGl4ZWxfY2xvY2s7CS8qIEluIGtIeiAqLworCWludAkJaHN3OwkJLyogSG9yaXpvbnRhbCBzeW5jaHJvbml6YXRpb24KKwkJCQkJICAgcHVsc2Ugd2lkdGggKi8KKwlpbnQJCWhmcDsJCS8qIEhvcml6b250YWwgZnJvbnQgcG9yY2ggKi8KKwlpbnQJCWhicDsJCS8qIEhvcml6b250YWwgYmFjayBwb3JjaCAqLworCWludAkJdnN3OwkJLyogVmVydGljYWwgc3luY2hyb25pemF0aW9uCisJCQkJCSAgIHB1bHNlIHdpZHRoICovCisJaW50CQl2ZnA7CQkvKiBWZXJ0aWNhbCBmcm9udCBwb3JjaCAqLworCWludAkJdmJwOwkJLyogVmVydGljYWwgYmFjayBwb3JjaCAqLworCWludAkJYWNiOwkJLyogYWMtYmlhcyBwaW4gZnJlcXVlbmN5ICovCisJaW50CQlwY2Q7CQkvKiBwaXhlbCBjbG9jayBkaXZpZGVyLgorCQkJCQkgICBPYnNvbGV0ZSB1c2UgcGl4ZWxfY2xvY2sgaW5zdGVhZCAqLworCisJaW50CQkoKmluaXQpCQkoc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2KTsKKwl2b2lkCQkoKmNsZWFudXApCSh2b2lkKTsKKwlpbnQJCSgqZW5hYmxlKQkodm9pZCk7CisJdm9pZAkJKCpkaXNhYmxlKQkodm9pZCk7CisJdW5zaWduZWQgbG9uZwkoKmdldF9jYXBzKQkodm9pZCk7CisJaW50CQkoKnNldF9ia2xpZ2h0X2xldmVsKSh1bnNpZ25lZCBpbnQgbGV2ZWwpOworCXVuc2lnbmVkIGludAkoKmdldF9ia2xpZ2h0X2xldmVsKSh2b2lkKTsKKwl1bnNpZ25lZCBpbnQJKCpnZXRfYmtsaWdodF9tYXgpICAodm9pZCk7CisJaW50CQkoKnJ1bl90ZXN0KQkoaW50IHRlc3RfbnVtKTsKK307CisKK3N0cnVjdCBvbWFwZmJfZGV2aWNlOworCitzdHJ1Y3QgZXh0aWZfdGltaW5ncyB7CisJaW50IGNzX29uX3RpbWU7CisJaW50IGNzX29mZl90aW1lOworCWludCB3ZV9vbl90aW1lOworCWludCB3ZV9vZmZfdGltZTsKKwlpbnQgcmVfb25fdGltZTsKKwlpbnQgcmVfb2ZmX3RpbWU7CisJaW50IHdlX2N5Y2xlX3RpbWU7CisJaW50IHJlX2N5Y2xlX3RpbWU7CisJaW50IGNzX3B1bHNlX3dpZHRoOworCWludCBhY2Nlc3NfdGltZTsKK307CisKK3N0cnVjdCBsY2RfY3RybF9leHRpZiB7CisJaW50ICAoKmluaXQpCQkodm9pZCk7CisJdm9pZCAoKmNsZWFudXApCQkodm9pZCk7CisJdm9pZCAoKnNldF90aW1pbmdzKQkoY29uc3Qgc3RydWN0IGV4dGlmX3RpbWluZ3MgKnRpbWluZ3MpOworCXZvaWQgKCp3cml0ZV9jb21tYW5kKQkodTMyIGNtZCk7CisJdTMyICAoKnJlYWRfZGF0YSkJKHZvaWQpOworCXZvaWQgKCp3cml0ZV9kYXRhKQkodTMyIGRhdGEpOworCXZvaWQgKCp0cmFuc2Zlcl9hcmVhKQkoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorCQkJCSB2b2lkIChjYWxsYmFjaykodm9pZCAqIGRhdGEpLCB2b2lkICpkYXRhKTsKK307CisKK3N0cnVjdCBsY2RfY3RybCB7CisJY29uc3QgY2hhcgkqbmFtZTsKKwl2b2lkCQkqZGF0YTsKKworCWludAkJKCppbml0KQkJICAoc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2LAorCQkJCQkgICBpbnQgZXh0X21vZGUsIGludCByZXFfdnJhbV9zaXplKTsKKwl2b2lkCQkoKmNsZWFudXApCSAgKHZvaWQpOworCXZvaWQJCSgqZ2V0X3ZyYW1fbGF5b3V0KSh1bnNpZ25lZCBsb25nICpzaXplLAorCQkJCQkgICB2b2lkICoqdmlydF9iYXNlLAorCQkJCQkgICBkbWFfYWRkcl90ICpwaHlzX2Jhc2UpOworCXVuc2lnbmVkIGxvbmcJKCpnZXRfY2FwcykJICAodm9pZCk7CisJaW50CQkoKnNldF91cGRhdGVfbW9kZSkoZW51bSBvbWFwZmJfdXBkYXRlX21vZGUgbW9kZSk7CisJZW51bSBvbWFwZmJfdXBkYXRlX21vZGUgKCpnZXRfdXBkYXRlX21vZGUpKHZvaWQpOworCWludAkJKCpzZXR1cF9wbGFuZSkJICAoaW50IHBsYW5lLCBpbnQgY2hhbm5lbF9vdXQsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCQkgICBpbnQgc2NyZWVuX3dpZHRoLAorCQkJCQkgICBpbnQgcG9zX3gsIGludCBwb3NfeSwgaW50IHdpZHRoLAorCQkJCQkgICBpbnQgaGVpZ2h0LCBpbnQgY29sb3JfbW9kZSk7CisJaW50CQkoKmVuYWJsZV9wbGFuZSkJICAoaW50IHBsYW5lLCBpbnQgZW5hYmxlKTsKKwlpbnQJCSgqdXBkYXRlX3dpbmRvdykgIChzdHJ1Y3Qgb21hcGZiX3VwZGF0ZV93aW5kb3cgKndpbiwKKwkJCQkJICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICopLAorCQkJCQkgICB2b2lkICpjYWxsYmFja19kYXRhKTsKKwl2b2lkCQkoKnN5bmMpCQkgICh2b2lkKTsKKwl2b2lkCQkoKnN1c3BlbmQpCSAgKHZvaWQpOworCXZvaWQJCSgqcmVzdW1lKQkgICh2b2lkKTsKKwlpbnQJCSgqcnVuX3Rlc3QpCSAgKGludCB0ZXN0X251bSk7CisJaW50CQkoKnNldGNvbHJlZykJICAodV9pbnQgcmVnbm8sIHUxNiByZWQsIHUxNiBncmVlbiwKKwkJCQkJICAgdTE2IGJsdWUsIHUxNiB0cmFuc3AsCisJCQkJCSAgIGludCB1cGRhdGVfaHdfbWVtKTsKKwlpbnQJCSgqc2V0X2NvbG9yX2tleSkgIChzdHJ1Y3Qgb21hcGZiX2NvbG9yX2tleSAqY2spOworCit9OworCitlbnVtIG9tYXBmYl9zdGF0ZSB7CisJT01BUEZCX0RJU0FCTEVECT0gMCwKKwlPTUFQRkJfU1VTUEVOREVEPSA5OSwKKwlPTUFQRkJfQUNUSVZFCT0gMTAwCit9OworCitzdHJ1Y3Qgb21hcGZiX2RldmljZSB7CisJaW50CQkJc3RhdGU7CisJaW50ICAgICAgICAgICAgICAgICAgICAgZXh0X2xjZGM7ICAgICAgICAgICAgICAgLyogVXNpbmcgZXh0ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTENEIGNvbnRyb2xsZXIgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlCXJxdWV1ZV9zZW1hOworCisJdm9pZAkJCSp2cmFtX3ZpcnRfYmFzZTsKKwlkbWFfYWRkcl90CQl2cmFtX3BoeXNfYmFzZTsKKwl1bnNpZ25lZCBsb25nCQl2cmFtX3NpemU7CisKKwlpbnQJCQljb2xvcl9tb2RlOworCWludAkJCXBhbGV0dGVfc2l6ZTsKKwlpbnQJCQltaXJyb3I7CisJdTMyCQkJcHNldWRvX3BhbGV0dGVbMTddOworCisJc3RydWN0IGxjZF9wYW5lbAkqcGFuZWw7CQkJLyogTENEIHBhbmVsICovCisJc3RydWN0IGxjZF9jdHJsICAgICAgICAgKmN0cmw7CQkJLyogTENEIGNvbnRyb2xsZXIgKi8KKwlzdHJ1Y3QgbGNkX2N0cmwJCSppbnRfY3RybDsJCS8qIGludGVybmFsIExDRCBjdHJsICovCisJc3RydWN0IGxjZF9jdHJsX2V4dGlmCSpleHRfaWY7CQkvKiBMQ0QgY3RybCBleHRlcm5hbAorCQkJCQkJCSAgIGludGVyZmFjZSAqLworCXN0cnVjdCBmYl9pbmZvCQkqZmJfaW5mbzsKKworCXN0cnVjdCBkZXZpY2UJCSpkZXY7Cit9OworCitleHRlcm4gc3RydWN0IGxjZF9wYW5lbCBoM19wYW5lbDsKK2V4dGVybiBzdHJ1Y3QgbGNkX3BhbmVsIGgyX3BhbmVsOworZXh0ZXJuIHN0cnVjdCBsY2RfcGFuZWwgcDJfcGFuZWw7CitleHRlcm4gc3RydWN0IGxjZF9wYW5lbCBvc2tfcGFuZWw7CitleHRlcm4gc3RydWN0IGxjZF9wYW5lbCBpbm5vdmF0b3IxNjEwX3BhbmVsOworZXh0ZXJuIHN0cnVjdCBsY2RfcGFuZWwgaW5ub3ZhdG9yMTUxMF9wYW5lbDsKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCitleHRlcm4gc3RydWN0IGxjZF9jdHJsIG9tYXAxX2xjZF9jdHJsOworI2Vsc2UKK2V4dGVybiBzdHJ1Y3QgbGNkX2N0cmwgb21hcDJfZGlzcF9jdHJsOworI2VuZGlmCisKK2V4dGVybiB2b2lkIG9tYXBmYl93cml0ZV9maXJzdF9waXhlbChzdHJ1Y3Qgb21hcGZiX2RldmljZSAqZmJkZXYsIHUxNiBwaXh2YWwpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19PTUFQRkJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wbS5oCmluZGV4IGZiZDc0MmQuLjdjNzkwNDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcG0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3BtLmgKQEAgLTk4LDcgKzk4LDE0IEBACiAjZGVmaW5lIE9NQVAxNjEwX0lETEVDVDMJCTB4ZmZmZWNlMjQKICNkZWZpbmUgT01BUDE2MTBfSURMRV9MT09QX1JFUVVFU1QJMHgwNDAwCiAKLSNpZiAgICAgIWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1MTApICYmIFwKKyNkZWZpbmUgT01BUDczMF9JRExFQ1QxX1NMRUVQX1ZBTAkweDE2YzcKKyNkZWZpbmUgT01BUDczMF9JRExFQ1QyX1NMRUVQX1ZBTAkweDA5YzcKKyNkZWZpbmUgT01BUDczMF9JRExFQ1QzX1ZBTAkJMHgzZgorI2RlZmluZSBPTUFQNzMwX0lETEVDVDMJCTB4ZmZmZWNlMjQKKyNkZWZpbmUgT01BUDczMF9JRExFX0xPT1BfUkVRVUVTVAkweDBDMDAKKworI2lmICAgICAhZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKSAmJiBcCisJIWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpICYmIFwKIAkhZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkgJiYgXAogCSFkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQogI2Vycm9yICJQb3dlciBtYW5hZ2VtZW50IGZvciB0aGlzIHByb2Nlc3NvciBub3QgaW1wbGVtZW50ZWQgeWV0IgpAQCAtMTA3LDggKzExNCwxMCBAQAogI2lmbmRlZiBfX0FTU0VNQkxFUl9fCiBleHRlcm4gdm9pZCBvbWFwX3BtX2lkbGUodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwX3BtX3N1c3BlbmQodm9pZCk7CitleHRlcm4gdm9pZCBvbWFwNzMwX2NwdV9zdXNwZW5kKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCk7CiBleHRlcm4gdm9pZCBvbWFwMTUxMF9jcHVfc3VzcGVuZCh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQpOwogZXh0ZXJuIHZvaWQgb21hcDE2MTBfY3B1X3N1c3BlbmQodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KTsKK2V4dGVybiB2b2lkIG9tYXA3MzBfaWRsZV9sb29wX3N1c3BlbmQodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwMTUxMF9pZGxlX2xvb3Bfc3VzcGVuZCh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXAxNjEwX2lkbGVfbG9vcF9zdXNwZW5kKHZvaWQpOwogCkBAIC0xMTgsNiArMTI3LDggQEAKICNkZWZpbmUgb21hcF9zZXJpYWxfd2FrZV90cmlnZ2VyKHgpCXt9CiAjZW5kaWYJLyogQ09ORklHX09NQVBfU0VSSUFMX1dBS0UgKi8KIAorZXh0ZXJuIHVuc2lnbmVkIGludCBvbWFwNzMwX2NwdV9zdXNwZW5kX3N6OworZXh0ZXJuIHVuc2lnbmVkIGludCBvbWFwNzMwX2lkbGVfbG9vcF9zdXNwZW5kX3N6OwogZXh0ZXJuIHVuc2lnbmVkIGludCBvbWFwMTUxMF9jcHVfc3VzcGVuZF9zejsKIGV4dGVybiB1bnNpZ25lZCBpbnQgb21hcDE1MTBfaWRsZV9sb29wX3N1c3BlbmRfc3o7CiBleHRlcm4gdW5zaWduZWQgaW50IG9tYXAxNjEwX2NwdV9zdXNwZW5kX3N6OwpAQCAtMTMxLDYgKzE0MiwxMCBAQAogI2RlZmluZSBVTFBEX1JFU1RPUkUoeCkgb21hcF93cml0ZXcoKHVscGRfc2xlZXBfc2F2ZVtVTFBEX1NMRUVQX1NBVkVfIyN4XSksICh4KSkKICNkZWZpbmUgVUxQRF9TSE9XKHgpIHVscGRfc2xlZXBfc2F2ZVtVTFBEX1NMRUVQX1NBVkVfIyN4XQogCisjZGVmaW5lIE1QVUk3MzBfU0FWRSh4KSBtcHVpNzMwX3NsZWVwX3NhdmVbTVBVSTczMF9TTEVFUF9TQVZFXyMjeF0gPSBvbWFwX3JlYWRsKHgpCisjZGVmaW5lIE1QVUk3MzBfUkVTVE9SRSh4KSBvbWFwX3dyaXRlbCgobXB1aTczMF9zbGVlcF9zYXZlW01QVUk3MzBfU0xFRVBfU0FWRV8jI3hdKSwgKHgpKQorI2RlZmluZSBNUFVJNzMwX1NIT1coeCkgbXB1aTczMF9zbGVlcF9zYXZlW01QVUk3MzBfU0xFRVBfU0FWRV8jI3hdCisKICNkZWZpbmUgTVBVSTE1MTBfU0FWRSh4KSBtcHVpMTUxMF9zbGVlcF9zYXZlW01QVUkxNTEwX1NMRUVQX1NBVkVfIyN4XSA9IG9tYXBfcmVhZGwoeCkKICNkZWZpbmUgTVBVSTE1MTBfUkVTVE9SRSh4KSBvbWFwX3dyaXRlbCgobXB1aTE1MTBfc2xlZXBfc2F2ZVtNUFVJMTUxMF9TTEVFUF9TQVZFXyMjeF0pLCAoeCkpCiAjZGVmaW5lIE1QVUkxNTEwX1NIT1coeCkgbXB1aTE1MTBfc2xlZXBfc2F2ZVtNUFVJMTUxMF9TTEVFUF9TQVZFXyMjeF0KQEAgLTE4OCwxMyArMjAzLDM0IEBACiAJTVBVSTE1MTBfU0xFRVBfU0FWRV9FTUlGU19DT05GSUcsCiAJTVBVSTE1MTBfU0xFRVBfU0FWRV9PTUFQX0lIMV9NSVIsCiAJTVBVSTE1MTBfU0xFRVBfU0FWRV9PTUFQX0lIMl9NSVIsCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTUxMCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKQogCU1QVUkxNTEwX1NMRUVQX1NBVkVfU0laRQogI2Vsc2UKIAlNUFVJMTUxMF9TTEVFUF9TQVZFX1NJWkUgPSAwCiAjZW5kaWYKIH07CiAKK2VudW0gbXB1aTczMF9zYXZlX3N0YXRlIHsKKwlNUFVJNzMwX1NMRUVQX1NBVkVfU1RBUlQgPSAwLAorCS8qCisJICogTVBVSSByZWdpc3RlcnMgMzIgYml0cworCSAqLworCU1QVUk3MzBfU0xFRVBfU0FWRV9NUFVJX0NUUkwsCisJTVBVSTczMF9TTEVFUF9TQVZFX01QVUlfRFNQX0JPT1RfQ09ORklHLAorCU1QVUk3MzBfU0xFRVBfU0FWRV9NUFVJX0RTUF9BUElfQ09ORklHLAorCU1QVUk3MzBfU0xFRVBfU0FWRV9NUFVJX0RTUF9TVEFUVVMsCisJTVBVSTczMF9TTEVFUF9TQVZFX0VNSUZGX1NEUkFNX0NPTkZJRywKKwlNUFVJNzMwX1NMRUVQX1NBVkVfRU1JRlNfQ09ORklHLAorCU1QVUk3MzBfU0xFRVBfU0FWRV9PTUFQX0lIMV9NSVIsCisJTVBVSTczMF9TTEVFUF9TQVZFX09NQVBfSUgyXzBfTUlSLAorCU1QVUk3MzBfU0xFRVBfU0FWRV9PTUFQX0lIMl8xX01JUiwKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCisJTVBVSTczMF9TTEVFUF9TQVZFX1NJWkUKKyNlbHNlCisJTVBVSTczMF9TTEVFUF9TQVZFX1NJWkUgPSAwCisjZW5kaWYKK307CisKIGVudW0gbXB1aTE2MTBfc2F2ZV9zdGF0ZSB7CiAJTVBVSTE2MTBfU0xFRVBfU0FWRV9TVEFSVCA9IDAsCiAJLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcHJjbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wcmNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I0OGE1YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcHJjbS5oCkBAIC0wLDAgKzEsNDI5IEBACisvKgorICogcHJjbS5oIC0gQWNjZXNzIGRlZmluYXRpb25zIGZvciB1c2UgaW4gT01BUDI0WFggY2xvY2sgYW5kIHBvd2VyIG1hbmFnZW1lbnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9EUE1fUFJDTV9ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0RQTV9QUkNNX0gKKworLyogU0VUX1BFUkZPUk1BTkNFX0xFVkVMIFBBUkFNRVRFUlMgKi8KKyNkZWZpbmUgUFJDTV9IQUxGX1NQRUVEIDEKKyNkZWZpbmUgUFJDTV9GVUxMX1NQRUVEIDIKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisKKyNkZWZpbmUgUFJDTV9SRUczMihvZmZzZXQpCV9fUkVHMzIoT01BUDI0WFhfUFJDTV9CQVNFICsgKG9mZnNldCkpCisKKyNkZWZpbmUgUFJDTV9SRVZJU0lPTgkJUFJDTV9SRUczMigweDAwMCkKKyNkZWZpbmUgUFJDTV9TWVNDT05GSUcJCVBSQ01fUkVHMzIoMHgwMTApCisjZGVmaW5lIFBSQ01fSVJRU1RBVFVTX01QVQlQUkNNX1JFRzMyKDB4MDE4KQorI2RlZmluZSBQUkNNX0lSUUVOQUJMRV9NUFUJUFJDTV9SRUczMigweDAxQykKKyNkZWZpbmUgUFJDTV9WT0xUQ1RSTAkJUFJDTV9SRUczMigweDA1MCkKKyNkZWZpbmUgUFJDTV9WT0xUU1QJCVBSQ01fUkVHMzIoMHgwNTQpCisjZGVmaW5lIFBSQ01fQ0xLU1JDX0NUUkwJUFJDTV9SRUczMigweDA2MCkKKyNkZWZpbmUgUFJDTV9DTEtPVVRfQ1RSTAlQUkNNX1JFRzMyKDB4MDcwKQorI2RlZmluZSBQUkNNX0NMS0VNVUxfQ1RSTAlQUkNNX1JFRzMyKDB4MDc4KQorI2RlZmluZSBQUkNNX0NMS0NGR19DVFJMCVBSQ01fUkVHMzIoMHgwODApCisjZGVmaW5lIFBSQ01fQ0xLQ0ZHX1NUQVRVUwlQUkNNX1JFRzMyKDB4MDg0KQorI2RlZmluZSBQUkNNX1ZPTFRTRVRVUAkJUFJDTV9SRUczMigweDA5MCkKKyNkZWZpbmUgUFJDTV9DTEtTU0VUVVAJCVBSQ01fUkVHMzIoMHgwOTQpCisjZGVmaW5lIFBSQ01fUE9MQ1RSTAkJUFJDTV9SRUczMigweDA5OCkKKworLyogR0VORVJBTCBQVVJQT1NFICovCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTEJUFJDTV9SRUczMigweDBCMCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMglQUkNNX1JFRzMyKDB4MEI0KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UzCVBSQ01fUkVHMzIoMHgwQjgpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTQJUFJDTV9SRUczMigweDBCQykKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFNQlQUkNNX1JFRzMyKDB4MEMwKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0U2CVBSQ01fUkVHMzIoMHgwQzQpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTcJUFJDTV9SRUczMigweDBDOCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFOAlQUkNNX1JFRzMyKDB4MENDKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0U5CVBSQ01fUkVHMzIoMHgwRDApCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTEwCVBSQ01fUkVHMzIoMHgwRDQpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTExCVBSQ01fUkVHMzIoMHgwRDgpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTEyCVBSQ01fUkVHMzIoMHgwREMpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTEzCVBSQ01fUkVHMzIoMHgwRTApCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE0CVBSQ01fUkVHMzIoMHgwRTQpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE1CVBSQ01fUkVHMzIoMHgwRTgpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE2CVBSQ01fUkVHMzIoMHgwRUMpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE3CVBSQ01fUkVHMzIoMHgwRjApCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE4CVBSQ01fUkVHMzIoMHgwRjQpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE5CVBSQ01fUkVHMzIoMHgwRjgpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTIwCVBSQ01fUkVHMzIoMHgwRkMpCisKKy8qIE1QVSAqLworI2RlZmluZSBDTV9DTEtTRUxfTVBVCQlQUkNNX1JFRzMyKDB4MTQwKQorI2RlZmluZSBDTV9DTEtTVENUUkxfTVBVCVBSQ01fUkVHMzIoMHgxNDgpCisjZGVmaW5lIFJNX1JTVFNUX01QVQkJUFJDTV9SRUczMigweDE1OCkKKyNkZWZpbmUgUE1fV0tERVBfTVBVCQlQUkNNX1JFRzMyKDB4MUM4KQorI2RlZmluZSBQTV9FVkdFTkNUUkxfTVBVCVBSQ01fUkVHMzIoMHgxRDQpCisjZGVmaW5lIFBNX0VWRUdFTk9OVElNX01QVQlQUkNNX1JFRzMyKDB4MUQ4KQorI2RlZmluZSBQTV9FVkVHRU5PRkZUSU1fTVBVCVBSQ01fUkVHMzIoMHgxREMpCisjZGVmaW5lIFBNX1BXU1RDVFJMX01QVQkJUFJDTV9SRUczMigweDFFMCkKKyNkZWZpbmUgUE1fUFdTVFNUX01QVQkJUFJDTV9SRUczMigweDFFNCkKKworLyogQ09SRSAqLworI2RlZmluZSBDTV9GQ0xLRU4xX0NPUkUJCVBSQ01fUkVHMzIoMHgyMDApCisjZGVmaW5lIENNX0ZDTEtFTjJfQ09SRQkJUFJDTV9SRUczMigweDIwNCkKKyNkZWZpbmUgQ01fRkNMS0VOM19DT1JFCQlQUkNNX1JFRzMyKDB4MjA4KQorI2RlZmluZSBDTV9JQ0xLRU4xX0NPUkUJCVBSQ01fUkVHMzIoMHgyMTApCisjZGVmaW5lIENNX0lDTEtFTjJfQ09SRQkJUFJDTV9SRUczMigweDIxNCkKKyNkZWZpbmUgQ01fSUNMS0VOM19DT1JFCQlQUkNNX1JFRzMyKDB4MjE4KQorI2RlZmluZSBDTV9JQ0xLRU40X0NPUkUJCVBSQ01fUkVHMzIoMHgyMUMpCisjZGVmaW5lIENNX0lETEVTVDFfQ09SRQkJUFJDTV9SRUczMigweDIyMCkKKyNkZWZpbmUgQ01fSURMRVNUMl9DT1JFCQlQUkNNX1JFRzMyKDB4MjI0KQorI2RlZmluZSBDTV9JRExFU1QzX0NPUkUJCVBSQ01fUkVHMzIoMHgyMjgpCisjZGVmaW5lIENNX0lETEVTVDRfQ09SRQkJUFJDTV9SRUczMigweDIyQykKKyNkZWZpbmUgQ01fQVVUT0lETEUxX0NPUkUJUFJDTV9SRUczMigweDIzMCkKKyNkZWZpbmUgQ01fQVVUT0lETEUyX0NPUkUJUFJDTV9SRUczMigweDIzNCkKKyNkZWZpbmUgQ01fQVVUT0lETEUzX0NPUkUJUFJDTV9SRUczMigweDIzOCkKKyNkZWZpbmUgQ01fQVVUT0lETEU0X0NPUkUJUFJDTV9SRUczMigweDIzQykKKyNkZWZpbmUgQ01fQ0xLU0VMMV9DT1JFCQlQUkNNX1JFRzMyKDB4MjQwKQorI2RlZmluZSBDTV9DTEtTRUwyX0NPUkUJCVBSQ01fUkVHMzIoMHgyNDQpCisjZGVmaW5lIENNX0NMS1NUQ1RSTF9DT1JFCVBSQ01fUkVHMzIoMHgyNDgpCisjZGVmaW5lIFBNX1dLRU4xX0NPUkUJCVBSQ01fUkVHMzIoMHgyQTApCisjZGVmaW5lIFBNX1dLRU4yX0NPUkUJCVBSQ01fUkVHMzIoMHgyQTQpCisjZGVmaW5lIFBNX1dLU1QxX0NPUkUJCVBSQ01fUkVHMzIoMHgyQjApCisjZGVmaW5lIFBNX1dLU1QyX0NPUkUJCVBSQ01fUkVHMzIoMHgyQjQpCisjZGVmaW5lIFBNX1dLREVQX0NPUkUJCVBSQ01fUkVHMzIoMHgyQzgpCisjZGVmaW5lIFBNX1BXU1RDVFJMX0NPUkUJUFJDTV9SRUczMigweDJFMCkKKyNkZWZpbmUgUE1fUFdTVFNUX0NPUkUJCVBSQ01fUkVHMzIoMHgyRTQpCisKKy8qIEdGWCAqLworI2RlZmluZSBDTV9GQ0xLRU5fR0ZYCQlQUkNNX1JFRzMyKDB4MzAwKQorI2RlZmluZSBDTV9JQ0xLRU5fR0ZYCQlQUkNNX1JFRzMyKDB4MzEwKQorI2RlZmluZSBDTV9JRExFU1RfR0ZYCQlQUkNNX1JFRzMyKDB4MzIwKQorI2RlZmluZSBDTV9DTEtTRUxfR0ZYCQlQUkNNX1JFRzMyKDB4MzQwKQorI2RlZmluZSBDTV9DTEtTVENUUkxfR0ZYCVBSQ01fUkVHMzIoMHgzNDgpCisjZGVmaW5lIFJNX1JTVENUUkxfR0ZYCQlQUkNNX1JFRzMyKDB4MzUwKQorI2RlZmluZSBSTV9SU1RTVF9HRlgJCVBSQ01fUkVHMzIoMHgzNTgpCisjZGVmaW5lIFBNX1dLREVQX0dGWAkJUFJDTV9SRUczMigweDNDOCkKKyNkZWZpbmUgUE1fUFdTVENUUkxfR0ZYCQlQUkNNX1JFRzMyKDB4M0UwKQorI2RlZmluZSBQTV9QV1NUU1RfR0ZYCQlQUkNNX1JFRzMyKDB4M0U0KQorCisvKiBXQUtFLVVQICovCisjZGVmaW5lIENNX0ZDTEtFTl9XS1VQCQlQUkNNX1JFRzMyKDB4NDAwKQorI2RlZmluZSBDTV9JQ0xLRU5fV0tVUAkJUFJDTV9SRUczMigweDQxMCkKKyNkZWZpbmUgQ01fSURMRVNUX1dLVVAJCVBSQ01fUkVHMzIoMHg0MjApCisjZGVmaW5lIENNX0FVVE9JRExFX1dLVVAJUFJDTV9SRUczMigweDQzMCkKKyNkZWZpbmUgQ01fQ0xLU0VMX1dLVVAJCVBSQ01fUkVHMzIoMHg0NDApCisjZGVmaW5lIFJNX1JTVENUUkxfV0tVUAkJUFJDTV9SRUczMigweDQ1MCkKKyNkZWZpbmUgUk1fUlNUVElNRV9XS1VQCQlQUkNNX1JFRzMyKDB4NDU0KQorI2RlZmluZSBSTV9SU1RTVF9XS1VQCQlQUkNNX1JFRzMyKDB4NDU4KQorI2RlZmluZSBQTV9XS0VOX1dLVVAJCVBSQ01fUkVHMzIoMHg0QTApCisjZGVmaW5lIFBNX1dLU1RfV0tVUAkJUFJDTV9SRUczMigweDRCMCkKKworLyogQ0xPQ0tTICovCisjZGVmaW5lIENNX0NMS0VOX1BMTAkJUFJDTV9SRUczMigweDUwMCkKKyNkZWZpbmUgQ01fSURMRVNUX0NLR0VOCQlQUkNNX1JFRzMyKDB4NTIwKQorI2RlZmluZSBDTV9BVVRPSURMRV9QTEwJCVBSQ01fUkVHMzIoMHg1MzApCisjZGVmaW5lIENNX0NMS1NFTDFfUExMCQlQUkNNX1JFRzMyKDB4NTQwKQorI2RlZmluZSBDTV9DTEtTRUwyX1BMTAkJUFJDTV9SRUczMigweDU0NCkKKworLyogRFNQICovCisjZGVmaW5lIENNX0ZDTEtFTl9EU1AJCVBSQ01fUkVHMzIoMHg4MDApCisjZGVmaW5lIENNX0lDTEtFTl9EU1AJCVBSQ01fUkVHMzIoMHg4MTApCisjZGVmaW5lIENNX0lETEVTVF9EU1AJCVBSQ01fUkVHMzIoMHg4MjApCisjZGVmaW5lIENNX0FVVE9JRExFX0RTUAkJUFJDTV9SRUczMigweDgzMCkKKyNkZWZpbmUgQ01fQ0xLU0VMX0RTUAkJUFJDTV9SRUczMigweDg0MCkKKyNkZWZpbmUgQ01fQ0xLU1RDVFJMX0RTUAlQUkNNX1JFRzMyKDB4ODQ4KQorI2RlZmluZSBSTV9SU1RDVFJMX0RTUAkJUFJDTV9SRUczMigweDg1MCkKKyNkZWZpbmUgUk1fUlNUU1RfRFNQCQlQUkNNX1JFRzMyKDB4ODU4KQorI2RlZmluZSBQTV9XS0VOX0RTUAkJUFJDTV9SRUczMigweDhBMCkKKyNkZWZpbmUgUE1fV0tERVBfRFNQCQlQUkNNX1JFRzMyKDB4OEM4KQorI2RlZmluZSBQTV9QV1NUQ1RSTF9EU1AJCVBSQ01fUkVHMzIoMHg4RTApCisjZGVmaW5lIFBNX1BXU1RTVF9EU1AJCVBSQ01fUkVHMzIoMHg4RTQpCisjZGVmaW5lIFBSQ01fSVJRU1RBVFVTX0RTUAlQUkNNX1JFRzMyKDB4OEYwKQorI2RlZmluZSBQUkNNX0lSUUVOQUJMRV9EU1AJUFJDTV9SRUczMigweDhGNCkKKworLyogSVZBICovCisjZGVmaW5lIFBSQ01fSVJRU1RBVFVTX0lWQQlQUkNNX1JFRzMyKDB4OEY4KQorI2RlZmluZSBQUkNNX0lSUUVOQUJMRV9JVkEJUFJDTV9SRUczMigweDhGQykKKworLyogTW9kZW0gb24gMjQzMCAqLworI2RlZmluZSBDTV9GQ0xLRU5fTURNCQlQUkNNX1JFRzMyKDB4QzAwKQorI2RlZmluZSBDTV9JQ0xLRU5fTURNCQlQUkNNX1JFRzMyKDB4QzEwKQorI2RlZmluZSBDTV9JRExFU1RfTURNCQlQUkNNX1JFRzMyKDB4QzIwKQorI2RlZmluZSBDTV9DTEtTRUxfTURNCQlQUkNNX1JFRzMyKDB4QzQwKQorCisvKiBGSVhNRTogTW92ZSB0byBoZWFkZXIgZm9yIDI0MzAgKi8KKyNkZWZpbmUgRElTUF9CQVNFCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDUwMDAwKQorI2RlZmluZSBESVNQX1JFRzMyKG9mZnNldCkJX19SRUczMihESVNQX0JBU0UgKyAob2Zmc2V0KSkKKworI2RlZmluZSBPTUFQMjRYWF9HUE1DX0JBU0UJKEwzXzI0WFhfQkFTRSArIDB4YTAwMCkKKyNkZWZpbmUgR1BNQ19CQVNFCQkoT01BUDI0WFhfR1BNQ19CQVNFKQorI2RlZmluZSBHUE1DX1JFRzMyKG9mZnNldCkJX19SRUczMihHUE1DX0JBU0UgKyAob2Zmc2V0KSkKKworI2RlZmluZSBHUFQxX0JBU0UJCShPTUFQMjRYWF9HUFQxKQorI2RlZmluZSBHUFQxX1JFRzMyKG9mZnNldCkJX19SRUczMihHUFQxX0JBU0UgKyAob2Zmc2V0KSkKKworLyogTWlzYyBzeXNjb25maWcgKi8KKyNkZWZpbmUgRElTUENfU1lTQ09ORklHCQlESVNQX1JFRzMyKDB4NDEwKQorI2RlZmluZSBTUElfQkFTRQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg5ODAwMCkKKyNkZWZpbmUgTUNTUEkxX1NZU0NPTkZJRwlfX1JFRzMyKFNQSV9CQVNFICsgMHgxMCkKKyNkZWZpbmUgTUNTUEkyX1NZU0NPTkZJRwlfX1JFRzMyKFNQSV9CQVNFKzB4MjAwMCArIDB4MTApCisKKy8vI2RlZmluZSBEU1BfTU1VX1NZU0NPTkZJRwkweDVBMDAwMDEwCisjZGVmaW5lIENBTUVSQV9NTVVfU1lTQ09ORklHCV9fUkVHMzIoRElTUF9CQVNFKzB4MkMxMCkKKy8vI2RlZmluZSBJVkFfTU1VX1NZU0NPTkZJRwkweDVEMDAwMDEwCisvLyNkZWZpbmUgRFNQX0RNQV9TWVNDT05GSUcJMHgwMEZDQzAyQworI2RlZmluZSBDQU1FUkFfRE1BX1NZU0NPTkZJRwlfX1JFRzMyKERJU1BfQkFTRSsweDI4MkMpCisjZGVmaW5lIFNZU1RFTV9ETUFfU1lTQ09ORklHCV9fUkVHMzIoRElTUF9CQVNFKzB4NjAyQykKKyNkZWZpbmUgR1BNQ19TWVNDT05GSUcJCUdQTUNfUkVHMzIoMHgwMTApCisjZGVmaW5lIE1BSUxCT1hFU19TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4OTQwMTApCisjZGVmaW5lIFVBUlQxX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4NkEwNTQpCisjZGVmaW5lIFVBUlQyX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4NkMwNTQpCisjZGVmaW5lIFVBUlQzX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4NkUwNTQpCisvLyNkZWZpbmUgSVZBX1NZU0NPTkZJRwkJMHg1QzA2MDAxMAorI2RlZmluZSBTRFJDX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgxMCkKKyNkZWZpbmUgU01TX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9TTVNfQkFTRSsweDEwKQorI2RlZmluZSBTU0lfU1lTQ09ORklHCQlfX1JFRzMyKERJU1BfQkFTRSsweDgwMTApCisvLyNkZWZpbmUgVkxZTlFfU1lTQ09ORklHCTB4NjdGRkZFMTAKKworLyogcmt3IC0gZ29vZCBjYW5uaWRhdGVzIGZvciBQTV8gdG8gc3RhcnQgd2hhdCBubSB3YXMgdHJ5aW5nICovCisjZGVmaW5lIE9NQVAyNFhYX0dQVDIJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4MkEwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDMJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4NzgwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDQJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4N0EwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDUJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4N0MwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDYJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4N0UwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDcJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODAwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDgJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODIwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDkJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODQwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDEwCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDg2MDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQxMQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg4ODAwMCkKKyNkZWZpbmUgT01BUDI0WFhfR1BUMTIJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4OEEwMDApCisKKyNkZWZpbmUgR1BUSU1FUjFfU1lTQ09ORklHCUdQVDFfUkVHMzIoMHgwMTApCisjZGVmaW5lIEdQVElNRVIyX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDIgKyAweDEwKQorI2RlZmluZSBHUFRJTUVSM19TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQzICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjRfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUNCArIDB4MTApCisjZGVmaW5lIEdQVElNRVI1X1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDUgKyAweDEwKQorI2RlZmluZSBHUFRJTUVSNl9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQ2ICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjdfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUNyArIDB4MTApCisjZGVmaW5lIEdQVElNRVI4X1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDggKyAweDEwKQorI2RlZmluZSBHUFRJTUVSOV9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQ5ICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjEwX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDEwICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjExX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDExICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjEyX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDEyICsgMHgxMCkKKworI2RlZmluZSBHUElPWF9CQVNFKFgpCQkoT01BUDI0WFhfR1BJT19CQVNFKygweDIwMDAqKChYKS0xKSkpCisKKyNkZWZpbmUgR1BJTzFfU1lTQ09ORklHCQlfX1JFRzMyKChHUElPWF9CQVNFKDEpKzB4MTApKQorI2RlZmluZSBHUElPMl9TWVNDT05GSUcJCV9fUkVHMzIoKEdQSU9YX0JBU0UoMikrMHgxMCkpCisjZGVmaW5lIEdQSU8zX1NZU0NPTkZJRwkJX19SRUczMigoR1BJT1hfQkFTRSgzKSsweDEwKSkKKyNkZWZpbmUgR1BJTzRfU1lTQ09ORklHCQlfX1JFRzMyKChHUElPWF9CQVNFKDQpKzB4MTApKQorCisvKiBHUCBUSU1FUiAxICovCisjZGVmaW5lIEdQVElNRVIxX1RJU1RBVAkJR1BUMV9SRUczMigweDAxNCkKKyNkZWZpbmUgR1BUSU1FUjFfVElTUgkJR1BUMV9SRUczMigweDAxOCkKKyNkZWZpbmUgR1BUSU1FUjFfVElFUgkJR1BUMV9SRUczMigweDAxQykKKyNkZWZpbmUgR1BUSU1FUjFfVFdFUgkJR1BUMV9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BUSU1FUjFfVENMUgkJR1BUMV9SRUczMigweDAyNCkKKyNkZWZpbmUgR1BUSU1FUjFfVENSUgkJR1BUMV9SRUczMigweDAyOCkKKyNkZWZpbmUgR1BUSU1FUjFfVExEUgkJR1BUMV9SRUczMigweDAyQykKKyNkZWZpbmUgR1BUSU1FUjFfVFRHUgkJR1BUMV9SRUczMigweDAzMCkKKyNkZWZpbmUgR1BUSU1FUjFfVFdQUwkJR1BUMV9SRUczMigweDAzNCkKKyNkZWZpbmUgR1BUSU1FUjFfVE1BUgkJR1BUMV9SRUczMigweDAzOCkKKyNkZWZpbmUgR1BUSU1FUjFfVENBUjEJCUdQVDFfUkVHMzIoMHgwM0MpCisjZGVmaW5lIEdQVElNRVIxX1RTSUNSCQlHUFQxX1JFRzMyKDB4MDQwKQorI2RlZmluZSBHUFRJTUVSMV9UQ0FSMgkJR1BUMV9SRUczMigweDA0NCkKKworLyogcmt3IC0tIGJhc2UgZml4IHVwIHBsZWFzZS4uLiAqLworI2RlZmluZSBHUFRJTUVSM19USVNSCQlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg3ODAxOCkKKworLyogU0RSQyAqLworI2RlZmluZSBTRFJDX0RMTEFfQ1RSTAkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNjApCisjZGVmaW5lIFNEUkNfRExMQV9TVEFUVVMJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNjQpCisjZGVmaW5lIFNEUkNfRExMQl9DVFJMCQlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSsweDA2OCkKKyNkZWZpbmUgU0RSQ19ETExCX1NUQVRVUwlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSsweDA2QykKKyNkZWZpbmUgU0RSQ19QT1dFUgkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNzApCisjZGVmaW5lIFNEUkNfTVJfMAkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwODQpCisKKy8qIEdQSU8gMSAqLworI2RlZmluZSBHUElPMV9CQVNFCQlHUElPWF9CQVNFKDEpCisjZGVmaW5lIEdQSU8xX1JFRzMyKG9mZnNldCkJX19SRUczMihHUElPMV9CQVNFICsgKG9mZnNldCkpCisjZGVmaW5lIEdQSU8xX0lSUUVOQUJMRTEJR1BJTzFfUkVHMzIoMHgwMUMpCisjZGVmaW5lIEdQSU8xX0lSUVNUQVRVUzEJR1BJTzFfUkVHMzIoMHgwMTgpCisjZGVmaW5lIEdQSU8xX0lSUUVOQUJMRTIJR1BJTzFfUkVHMzIoMHgwMkMpCisjZGVmaW5lIEdQSU8xX0lSUVNUQVRVUzIJR1BJTzFfUkVHMzIoMHgwMjgpCisjZGVmaW5lIEdQSU8xX1dBS0VVUEVOQUJMRQlHUElPMV9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BJTzFfUklTSU5HREVURUNUCUdQSU8xX1JFRzMyKDB4MDQ4KQorI2RlZmluZSBHUElPMV9EQVRBSU4JCUdQSU8xX1JFRzMyKDB4MDM4KQorI2RlZmluZSBHUElPMV9PRQkJR1BJTzFfUkVHMzIoMHgwMzQpCisjZGVmaW5lIEdQSU8xX0RBVEFPVVQJCUdQSU8xX1JFRzMyKDB4MDNDKQorCisvKiBHUElPMiAqLworI2RlZmluZSBHUElPMl9CQVNFCQlHUElPWF9CQVNFKDIpCisjZGVmaW5lIEdQSU8yX1JFRzMyKG9mZnNldCkJX19SRUczMihHUElPMl9CQVNFICsgKG9mZnNldCkpCisjZGVmaW5lIEdQSU8yX0lSUUVOQUJMRTEJR1BJTzJfUkVHMzIoMHgwMUMpCisjZGVmaW5lIEdQSU8yX0lSUVNUQVRVUzEJR1BJTzJfUkVHMzIoMHgwMTgpCisjZGVmaW5lIEdQSU8yX0lSUUVOQUJMRTIJR1BJTzJfUkVHMzIoMHgwMkMpCisjZGVmaW5lIEdQSU8yX0lSUVNUQVRVUzIJR1BJTzJfUkVHMzIoMHgwMjgpCisjZGVmaW5lIEdQSU8yX1dBS0VVUEVOQUJMRQlHUElPMl9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BJTzJfUklTSU5HREVURUNUCUdQSU8yX1JFRzMyKDB4MDQ4KQorI2RlZmluZSBHUElPMl9EQVRBSU4JCUdQSU8yX1JFRzMyKDB4MDM4KQorI2RlZmluZSBHUElPMl9PRQkJR1BJTzJfUkVHMzIoMHgwMzQpCisjZGVmaW5lIEdQSU8yX0RBVEFPVVQJCUdQSU8yX1JFRzMyKDB4MDNDKQorCisvKiBHUElPIDMgKi8KKyNkZWZpbmUgR1BJTzNfQkFTRQkJR1BJT1hfQkFTRSgzKQorI2RlZmluZSBHUElPM19SRUczMihvZmZzZXQpCV9fUkVHMzIoR1BJTzNfQkFTRSArIChvZmZzZXQpKQorI2RlZmluZSBHUElPM19JUlFFTkFCTEUxCUdQSU8zX1JFRzMyKDB4MDFDKQorI2RlZmluZSBHUElPM19JUlFTVEFUVVMxCUdQSU8zX1JFRzMyKDB4MDE4KQorI2RlZmluZSBHUElPM19JUlFFTkFCTEUyCUdQSU8zX1JFRzMyKDB4MDJDKQorI2RlZmluZSBHUElPM19JUlFTVEFUVVMyCUdQSU8zX1JFRzMyKDB4MDI4KQorI2RlZmluZSBHUElPM19XQUtFVVBFTkFCTEUJR1BJTzNfUkVHMzIoMHgwMjApCisjZGVmaW5lIEdQSU8zX1JJU0lOR0RFVEVDVAlHUElPM19SRUczMigweDA0OCkKKyNkZWZpbmUgR1BJTzNfRkFMTElOR0RFVEVDVAlHUElPM19SRUczMigweDA0QykKKyNkZWZpbmUgR1BJTzNfREFUQUlOCQlHUElPM19SRUczMigweDAzOCkKKyNkZWZpbmUgR1BJTzNfT0UJCUdQSU8zX1JFRzMyKDB4MDM0KQorI2RlZmluZSBHUElPM19EQVRBT1VUCQlHUElPM19SRUczMigweDAzQykKKyNkZWZpbmUgR1BJTzNfREVCT1VOQ0VOQUJMRQlHUElPM19SRUczMigweDA1MCkKKyNkZWZpbmUgR1BJTzNfREVCT1VOQ0lOR1RJTUUJR1BJTzNfUkVHMzIoMHgwNTQpCisKKy8qIEdQSU8gNCAqLworI2RlZmluZSBHUElPNF9CQVNFCQlHUElPWF9CQVNFKDQpCisjZGVmaW5lIEdQSU80X1JFRzMyKG9mZnNldCkJX19SRUczMihHUElPNF9CQVNFICsgKG9mZnNldCkpCisjZGVmaW5lIEdQSU80X0lSUUVOQUJMRTEJR1BJTzRfUkVHMzIoMHgwMUMpCisjZGVmaW5lIEdQSU80X0lSUVNUQVRVUzEJR1BJTzRfUkVHMzIoMHgwMTgpCisjZGVmaW5lIEdQSU80X0lSUUVOQUJMRTIJR1BJTzRfUkVHMzIoMHgwMkMpCisjZGVmaW5lIEdQSU80X0lSUVNUQVRVUzIJR1BJTzRfUkVHMzIoMHgwMjgpCisjZGVmaW5lIEdQSU80X1dBS0VVUEVOQUJMRQlHUElPNF9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BJTzRfUklTSU5HREVURUNUCUdQSU80X1JFRzMyKDB4MDQ4KQorI2RlZmluZSBHUElPNF9GQUxMSU5HREVURUNUCUdQSU80X1JFRzMyKDB4MDRDKQorI2RlZmluZSBHUElPNF9EQVRBSU4JCUdQSU80X1JFRzMyKDB4MDM4KQorI2RlZmluZSBHUElPNF9PRQkJR1BJTzRfUkVHMzIoMHgwMzQpCisjZGVmaW5lIEdQSU80X0RBVEFPVVQJCUdQSU80X1JFRzMyKDB4MDNDKQorI2RlZmluZSBHUElPNF9ERUJPVU5DRU5BQkxFCUdQSU80X1JFRzMyKDB4MDUwKQorI2RlZmluZSBHUElPNF9ERUJPVU5DSU5HVElNRQlHUElPNF9SRUczMigweDA1NCkKKworCisvKiBJTyBDT05GSUcgKi8KKyNkZWZpbmUgQ09OVFJPTF9CQVNFCQkoT01BUDI0WFhfQ1RSTF9CQVNFKQorI2RlZmluZSBDT05UUk9MX1JFRzMyKG9mZnNldCkJX19SRUczMihDT05UUk9MX0JBU0UgKyAob2Zmc2V0KSkKKworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU1BJMV9OQ1MyCUNPTlRST0xfUkVHMzIoMHgxMDQpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TWVNfWFRBTE9VVAlDT05UUk9MX1JFRzMyKDB4MTM0KQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfVUFSVDFfUlgJQ09OVFJPTF9SRUczMigweDBDOCkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01DQlNQMV9EWAlDT05UUk9MX1JFRzMyKDB4MTBDKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19OQ1M0CUNPTlRST0xfUkVHMzIoMHgwOTApCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDUJCUNPTlRST0xfUkVHMzIoMHgwQjgpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDkJCUNPTlRST0xfUkVHMzIoMHgwQkMpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDEzCQlDT05UUk9MX1JFRzMyKDB4MEMwKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX1ZTWU5DCUNPTlRST0xfUkVHMzIoMHgwQ0MpCisKKy8qIENPTlRST0wgKi8KKyNkZWZpbmUgQ09OVFJPTF9ERVZDT05GCQlDT05UUk9MX1JFRzMyKDB4Mjc0KQorCisvKiBJTlRFUlJVUFQgQ09OVFJPTExFUiAqLworI2RlZmluZSBJTlRDX0JBU0UJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ZmUwMDApCisjZGVmaW5lIElOVENfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKElOVENfQkFTRSArIChvZmZzZXQpKQorCisjZGVmaW5lIElOVEMxX1VfQkFTRQkJSU5UQ19SRUczMigweDAwMCkKKyNkZWZpbmUgSU5UQ19NSVIwCQlJTlRDX1JFRzMyKDB4MDg0KQorI2RlZmluZSBJTlRDX01JUl9TRVQwCQlJTlRDX1JFRzMyKDB4MDhDKQorI2RlZmluZSBJTlRDX01JUl9DTEVBUjAJCUlOVENfUkVHMzIoMHgwODgpCisjZGVmaW5lIElOVENfSVNSX0NMRUFSMAkJSU5UQ19SRUczMigweDA5NCkKKyNkZWZpbmUgSU5UQ19NSVIxCQlJTlRDX1JFRzMyKDB4MEE0KQorI2RlZmluZSBJTlRDX01JUl9TRVQxCQlJTlRDX1JFRzMyKDB4MEFDKQorI2RlZmluZSBJTlRDX01JUl9DTEVBUjEJCUlOVENfUkVHMzIoMHgwQTgpCisjZGVmaW5lIElOVENfSVNSX0NMRUFSMQkJSU5UQ19SRUczMigweDBCNCkKKyNkZWZpbmUgSU5UQ19NSVIyCQlJTlRDX1JFRzMyKDB4MEM0KQorI2RlZmluZSBJTlRDX01JUl9TRVQyCQlJTlRDX1JFRzMyKDB4MENDKQorI2RlZmluZSBJTlRDX01JUl9DTEVBUjIJCUlOVENfUkVHMzIoMHgwQzgpCisjZGVmaW5lIElOVENfSVNSX0NMRUFSMgkJSU5UQ19SRUczMigweDBENCkKKyNkZWZpbmUgSU5UQ19TSVJfSVJRCQlJTlRDX1JFRzMyKDB4MDQwKQorI2RlZmluZSBJTlRDX0NPTlRST0wJCUlOVENfUkVHMzIoMHgwNDgpCisjZGVmaW5lIElOVENfSUxSMTEJCUlOVENfUkVHMzIoMHgxMkMpCisjZGVmaW5lIElOVENfSUxSMzIJCUlOVENfUkVHMzIoMHgxODApCisjZGVmaW5lIElOVENfSUxSMzcJCUlOVENfUkVHMzIoMHgxOTQpCisjZGVmaW5lIElOVENfU1lTQ09ORklHCQlJTlRDX1JFRzMyKDB4MDEwKQorCisvKiBSQU0gRklSRVdBTEwgKi8KKyNkZWZpbmUgUkFNRldfQkFTRQkJKDB4NjgwMDUwMDApCisjZGVmaW5lIFJBTUZXX1JFRzMyKG9mZnNldCkJX19SRUczMihSQU1GV19CQVNFICsgKG9mZnNldCkpCisKKyNkZWZpbmUgUkFNRldfUkVRSU5GT1BFUk0wCVJBTUZXX1JFRzMyKDB4MDQ4KQorI2RlZmluZSBSQU1GV19SRUFEUEVSTTAJCVJBTUZXX1JFRzMyKDB4MDUwKQorI2RlZmluZSBSQU1GV19XUklURVBFUk0wCVJBTUZXX1JFRzMyKDB4MDU4KQorCisvKiBHUE1DIENTMSBGUEdBIE9OIFVTRVIgSU5URVJGQUNFIE1PRFVMRSAqLworLy8jZGVmaW5lIERFQlVHX0JPQVJEX0xFRF9SRUdJU1RFUiAweDA0MDAwMDE0CisKKy8qIEdQTUMgQ1MwICovCisjZGVmaW5lIEdQTUNfQ09ORklHMV8wCQlHUE1DX1JFRzMyKDB4MDYwKQorI2RlZmluZSBHUE1DX0NPTkZJRzJfMAkJR1BNQ19SRUczMigweDA2NCkKKyNkZWZpbmUgR1BNQ19DT05GSUczXzAJCUdQTUNfUkVHMzIoMHgwNjgpCisjZGVmaW5lIEdQTUNfQ09ORklHNF8wCQlHUE1DX1JFRzMyKDB4MDZDKQorI2RlZmluZSBHUE1DX0NPTkZJRzVfMAkJR1BNQ19SRUczMigweDA3MCkKKyNkZWZpbmUgR1BNQ19DT05GSUc2XzAJCUdQTUNfUkVHMzIoMHgwNzQpCisjZGVmaW5lIEdQTUNfQ09ORklHN18wCQlHUE1DX1JFRzMyKDB4MDc4KQorCisvKiBHUE1DIENTMSAqLworI2RlZmluZSBHUE1DX0NPTkZJRzFfMQkJR1BNQ19SRUczMigweDA5MCkKKyNkZWZpbmUgR1BNQ19DT05GSUcyXzEJCUdQTUNfUkVHMzIoMHgwOTQpCisjZGVmaW5lIEdQTUNfQ09ORklHM18xCQlHUE1DX1JFRzMyKDB4MDk4KQorI2RlZmluZSBHUE1DX0NPTkZJRzRfMQkJR1BNQ19SRUczMigweDA5QykKKyNkZWZpbmUgR1BNQ19DT05GSUc1XzEJCUdQTUNfUkVHMzIoMHgwYTApCisjZGVmaW5lIEdQTUNfQ09ORklHNl8xCQlHUE1DX1JFRzMyKDB4MGE0KQorI2RlZmluZSBHUE1DX0NPTkZJRzdfMQkJR1BNQ19SRUczMigweDBhOCkKKworLyogRFNTICovCisjZGVmaW5lIERTU19DT05UUk9MCQlESVNQX1JFRzMyKDB4MDQwKQorI2RlZmluZSBESVNQQ19DT05UUk9MCQlESVNQX1JFRzMyKDB4NDQwKQorI2RlZmluZSBESVNQQ19TWVNTVEFUVVMJCURJU1BfUkVHMzIoMHg0MTQpCisjZGVmaW5lIERJU1BDX0lSUVNUQVRVUwkJRElTUF9SRUczMigweDQxOCkKKyNkZWZpbmUgRElTUENfSVJRRU5BQkxFCQlESVNQX1JFRzMyKDB4NDFDKQorI2RlZmluZSBESVNQQ19DT05GSUcJCURJU1BfUkVHMzIoMHg0NDQpCisjZGVmaW5lIERJU1BDX0RFRkFVTFRfQ09MT1IwCURJU1BfUkVHMzIoMHg0NEMpCisjZGVmaW5lIERJU1BDX0RFRkFVTFRfQ09MT1IxCURJU1BfUkVHMzIoMHg0NTApCisjZGVmaW5lIERJU1BDX1RSQU5TX0NPTE9SMAlESVNQX1JFRzMyKDB4NDU0KQorI2RlZmluZSBESVNQQ19UUkFOU19DT0xPUjEJRElTUF9SRUczMigweDQ1OCkKKyNkZWZpbmUgRElTUENfTElORV9OVU1CRVIJRElTUF9SRUczMigweDQ2MCkKKyNkZWZpbmUgRElTUENfVElNSU5HX0gJCURJU1BfUkVHMzIoMHg0NjQpCisjZGVmaW5lIERJU1BDX1RJTUlOR19WCQlESVNQX1JFRzMyKDB4NDY4KQorI2RlZmluZSBESVNQQ19QT0xfRlJFUQkJRElTUF9SRUczMigweDQ2QykKKyNkZWZpbmUgRElTUENfRElWSVNPUgkJRElTUF9SRUczMigweDQ3MCkKKyNkZWZpbmUgRElTUENfU0laRV9ESUcJCURJU1BfUkVHMzIoMHg0NzgpCisjZGVmaW5lIERJU1BDX1NJWkVfTENECQlESVNQX1JFRzMyKDB4NDdDKQorI2RlZmluZSBESVNQQ19HRlhfQkEwCQlESVNQX1JFRzMyKDB4NDgwKQorI2RlZmluZSBESVNQQ19HRlhfQkExCQlESVNQX1JFRzMyKDB4NDg0KQorI2RlZmluZSBESVNQQ19HRlhfUE9TSVRJT04JRElTUF9SRUczMigweDQ4OCkKKyNkZWZpbmUgRElTUENfR0ZYX1NJWkUJCURJU1BfUkVHMzIoMHg0OEMpCisjZGVmaW5lIERJU1BDX0dGWF9BVFRSSUJVVEVTCURJU1BfUkVHMzIoMHg0QTApCisjZGVmaW5lIERJU1BDX0dGWF9GSUZPX1RIUkVTSE9MRAlESVNQX1JFRzMyKDB4NEE0KQorI2RlZmluZSBESVNQQ19HRlhfUk9XX0lOQwlESVNQX1JFRzMyKDB4NEFDKQorI2RlZmluZSBESVNQQ19HRlhfUElYRUxfSU5DCURJU1BfUkVHMzIoMHg0QjApCisjZGVmaW5lIERJU1BDX0dGWF9XSU5ET1dfU0tJUAlESVNQX1JFRzMyKDB4NEI0KQorI2RlZmluZSBESVNQQ19HRlhfVEFCTEVfQkEJRElTUF9SRUczMigweDRCOCkKKyNkZWZpbmUgRElTUENfREFUQV9DWUNMRTEJRElTUF9SRUczMigweDVENCkKKyNkZWZpbmUgRElTUENfREFUQV9DWUNMRTIJRElTUF9SRUczMigweDVEOCkKKyNkZWZpbmUgRElTUENfREFUQV9DWUNMRTMJRElTUF9SRUczMigweDVEQykKKworLyogV2FrZSB1cCBkZWZpbmUgZm9yIGJvYXJkICovCisjZGVmaW5lIEdQSU85NwkJCSgxIDw8IDEpCisjZGVmaW5lIEdQSU84OAkJCSgxIDw8IDI0KQorCisjZW5kaWYgLyogX19BU1NFTUJMRVJfXyAqLworCisjZW5kaWYKKworCisKKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3NyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvc3JhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MmNjYmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3NyYW0uaApAQCAtMCwwICsxLDM4IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zcmFtLmgKKyAqCisgKiBJbnRlcmZhY2UgZm9yIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgcnVuIGluIGludGVybmFsIFNSQU0KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BUkNIX0FSTV9PTUFQX1NSQU1fSAorI2RlZmluZSBfX0FSQ0hfQVJNX09NQVBfU1JBTV9ICisKK2V4dGVybiB2b2lkICogb21hcF9zcmFtX3B1c2godm9pZCAqIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHZvaWQgb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayh1MzIgZHBsbGN0bCwgdTMyIGNrY3RsKTsKKworZXh0ZXJuIHZvaWQgb21hcDJfc3JhbV9kZHJfaW5pdCh1MzIgKnNsb3dfZGxsX2N0cmwsIHUzMiBmYXN0X2RsbF9jdHJsLAorCQkJCXUzMiBiYXNlX2NzLCB1MzIgZm9yY2VfdW5sb2NrKTsKK2V4dGVybiB2b2lkIG9tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmModTMyIHBlcmZfbGV2ZWwsIHUzMiBkbGxfdmFsLAorCQkJCSAgICAgIHUzMiBtZW1fdHlwZSk7CitleHRlcm4gdTMyIG9tYXAyX3NldF9wcmNtKHUzMiBkcGxsX2N0cmxfdmFsLCB1MzIgc2RyY19yZnJfdmFsLCBpbnQgYnlwYXNzKTsKKworCisvKiBEbyBub3QgdXNlIHRoZXNlICovCitleHRlcm4gdm9pZCBzcmFtX3JlcHJvZ3JhbV9jbG9jayh1MzIgY2tjdGwsIHUzMiBkcGxsY3RsKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNyYW1fcmVwcm9ncmFtX2Nsb2NrX3N6OworCitleHRlcm4gdm9pZCBzcmFtX2Rkcl9pbml0KHUzMiAqc2xvd19kbGxfY3RybCwgdTMyIGZhc3RfZGxsX2N0cmwsCisJCQkgIHUzMiBiYXNlX2NzLCB1MzIgZm9yY2VfdW5sb2NrKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNyYW1fZGRyX2luaXRfc3o7CisKK2V4dGVybiB1MzIgc3JhbV9zZXRfcHJjbSh1MzIgZHBsbF9jdHJsX3ZhbCwgdTMyIHNkcmNfcmZyX3ZhbCwgaW50IGJ5cGFzcyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzcmFtX3NldF9wcmNtX3N6OworCitleHRlcm4gdm9pZCBzcmFtX3JlcHJvZ3JhbV9zZHJjKHUzMiBwZXJmX2xldmVsLCB1MzIgZGxsX3ZhbCwgdTMyIG1lbV90eXBlKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNyYW1fcmVwcm9ncmFtX3NkcmNfc3o7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvc3lzdGVtLmgKaW5kZXggZmYzN2JjMi4uYjQzY2RkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3N5c3RlbS5oCkBAIC02LDE4ICs2LDIxIEBACiAjZGVmaW5lIF9fQVNNX0FSQ0hfU1lTVEVNX0gKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wcmNtLmg+CisKKyNpZm5kZWYgQ09ORklHX01BQ0hfVk9JQ0VCTFVFCisjZGVmaW5lIHZvaWNlYmx1ZV9yZXNldCgpCQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCiB7CiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIG9tYXAxX2FyY2hfcmVzZXQoY2hhciBtb2RlKQogewotCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE2WFgKIAkvKgogCSAqIFdvcmthcm91bmQgZm9yIDU5MTIvMTYxMWIgYnVnIG1lbnRpb25lZCBpbiBzcHJ6MjA5ZC5wZGYgcC4gMjgKIAkgKiAiR2xvYmFsIFNvZnR3YXJlIFJlc2V0IEFmZmVjdHMgVHJhZmZpYyBDb250cm9sbGVyIEZyZXF1ZW5jeSIuCkBAIC0yNywxMyArMzAsMzEgQEAKIAkJCQkgRFBMTF9DVEwpOwogCQlvbWFwX3dyaXRldygweDgsIEFSTV9SU1RDVDEpOwogCX0KLSNlbmRpZgotI2lmZGVmIENPTkZJR19NQUNIX1ZPSUNFQkxVRQorCiAJaWYgKG1hY2hpbmVfaXNfdm9pY2VibHVlKCkpCiAJCXZvaWNlYmx1ZV9yZXNldCgpOwogCWVsc2UKLSNlbmRpZgogCQlvbWFwX3dyaXRldygxLCBBUk1fUlNUQ1QxKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX2FyY2hfcmVzZXQoY2hhciBtb2RlKQoreworCXUzMiByYXRlOworCXN0cnVjdCBjbGsgKnZjbGssICpzY2xrOworCisJdmNsayA9IGNsa19nZXQoTlVMTCwgInZpcnRfcHJjbV9zZXQiKTsKKwlzY2xrID0gY2xrX2dldChOVUxMLCAic3lzX2NrIik7CisJcmF0ZSA9IGNsa19nZXRfcmF0ZShzY2xrKTsKKwljbGtfc2V0X3JhdGUodmNsaywgcmF0ZSk7CS8qIGdvIHRvIGJ5cGFzcyBmb3IgT01BUCBsaW1pdGF0aW9uICovCisJUk1fUlNUQ1RSTF9XS1VQIHw9IDI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3sKKwlpZiAoIWNwdV9pc19vbWFwMjR4eCgpKQorCQlvbWFwMV9hcmNoX3Jlc2V0KG1vZGUpOworCWVsc2UKKwkJb21hcDJfYXJjaF9yZXNldChtb2RlKTsKK30KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3RpbWV4LmgKaW5kZXggYjYxZGRiNC4uMjFmMmUzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC90aW1leC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdGltZXguaApAQCAtMjgsNiArMjgsMTQgQEAKICNpZiAhZGVmaW5lZChfX0FTTV9BUkNIX09NQVBfVElNRVhfSCkKICNkZWZpbmUgX19BU01fQVJDSF9PTUFQX1RJTUVYX0gKIAorLyoKKyAqIE9NQVAgMzJLSHogdGltZXIgdXBkYXRlcyB0aW1lIG9uZSBqaWZmaWUgYXQgYSB0aW1lIGZyb20gYSBzZWNvbmRhcnkgdGltZXIsCisgKiBhbmQgdGhhdCdzIHdoeSB0aGUgQ0xPQ0tfVElDS19SQVRFIGlzIG5vdCAzMjc2OC4KKyAqLworI2lmZGVmIENPTkZJR19PTUFQXzMyS19USU1FUgorI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCShDT05GSUdfT01BUF8zMktfVElNRVJfSFopCisjZWxzZQogI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCShIWiAqIDEwMDAwMFVMKQorI2VuZGlmCiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX09NQVBfVElNRVhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3VuY29tcHJlc3MuaAppbmRleCAzNTQ1Yzg2Li5jNzE4MjY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3VuY29tcHJlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3VuY29tcHJlc3MuaApAQCAtMzYsMTAgKzM2LDE0IEBACiAJdm9sYXRpbGUgdTggKiB1YXJ0ID0gMDsKIAlpbnQgc2hpZnQgPSAyOwogCisjaWZkZWYgQ09ORklHX01BQ0hfT01BUF9QQUxNVEUKKwlyZXR1cm47CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19BUkNIX09NQVAKICNpZmRlZglDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMwogCXVhcnQgPSAodm9sYXRpbGUgdTggKikoT01BUF9VQVJUM19CQVNFKTsKLSNlbGlmCUNPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyCisjZWxpZiBkZWZpbmVkKENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyKQogCXVhcnQgPSAodm9sYXRpbGUgdTggKikoT01BUF9VQVJUMl9CQVNFKTsKICNlbHNlCiAJdWFydCA9ICh2b2xhdGlsZSB1OCAqKShPTUFQX1VBUlQxX0JBU0UpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3NoYXJwc2wuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9zaGFycHNsLmgKaW5kZXggMzExZjJiYi4uMGI0MzQ5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3NoYXJwc2wuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvc2hhcnBzbC5oCkBAIC0yMSwxMiArMjEsMTggQEAKIAl2b2lkICgqd2FpdF9oc3luYykodm9pZCk7CiB9OwogCisKIC8qCiAgKiBTaGFycFNMIEJhY2tsaWdodAogICovCi0KIHN0cnVjdCBjb3JnaWJsX21hY2hpbmZvIHsKIAlpbnQgbWF4X2ludGVuc2l0eTsKIAl2b2lkICgqc2V0X2JsX2ludGVuc2l0eSkoaW50IGludGVuc2l0eSk7CiB9OworZXh0ZXJuIHZvaWQgY29yZ2libF9saW1pdF9pbnRlbnNpdHkoaW50IGxpbWl0KTsKIAorCisvKgorICogU2hhcnBTTCBCYXR0ZXJ5L1BNIERyaXZlcgorICovCitleHRlcm4gdm9pZCBzaGFycHNsX2JhdHRlcnlfa2ljayh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9zc3AuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9zc3AuaAppbmRleCA2ZWM2N2IwLi45NDk4NzhjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvc3NwLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3NzcC5oCkBAIC0xOCw2ICsxOCwxMSBAQAogI2lmbmRlZiBTU1BfSAogI2RlZmluZSBTU1BfSAogCisvKgorICogU1NQIGluaXRpYWxpc2F0aW9uIGZsYWdzCisgKi8KKyNkZWZpbmUgU1NQX05PX0lSUQkweDEJCS8qIGRvbid0IHJlZ2lzdGVyIGFuIGlycSBoYW5kbGVyIGluIFNTUCBkcml2ZXIgKi8KKwogc3RydWN0IHNzcF9zdGF0ZSB7CiAJdTMyCWNyMDsKIAl1MzIgY3IxOwpAQCAtMzEsNiArMzYsNyBAQAogCXUzMiBmbGFnczsKIAl1MzIgcHNwX2ZsYWdzOwogCXUzMiBzcGVlZDsKKwlpbnQgaXJxOwogfTsKIAogaW50IHNzcF93cml0ZV93b3JkKHN0cnVjdCBzc3BfZGV2ICpkZXYsIHUzMiBkYXRhKTsKQEAgLTQwLDcgKzQ2LDcgQEAKIHZvaWQgc3NwX2Rpc2FibGUoc3RydWN0IHNzcF9kZXYgKmRldik7CiB2b2lkIHNzcF9zYXZlX3N0YXRlKHN0cnVjdCBzc3BfZGV2ICpkZXYsIHN0cnVjdCBzc3Bfc3RhdGUgKnNzcCk7CiB2b2lkIHNzcF9yZXN0b3JlX3N0YXRlKHN0cnVjdCBzc3BfZGV2ICpkZXYsIHN0cnVjdCBzc3Bfc3RhdGUgKnNzcCk7Ci1pbnQgc3NwX2luaXQoc3RydWN0IHNzcF9kZXYgKmRldiwgdTMyIHBvcnQpOworaW50IHNzcF9pbml0KHN0cnVjdCBzc3BfZGV2ICpkZXYsIHUzMiBwb3J0LCB1MzIgaW5pdF9mbGFncyk7CiBpbnQgc3NwX2NvbmZpZyhzdHJ1Y3Qgc3NwX2RldiAqZGV2LCB1MzIgbW9kZSwgdTMyIGZsYWdzLCB1MzIgcHNwX2ZsYWdzLCB1MzIgc3BlZWQpOwogdm9pZCBzc3BfZXhpdChzdHJ1Y3Qgc3NwX2RldiAqZGV2KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tc2kuaCBiL2luY2x1ZGUvYXNtLWkzODYvbXNpLmgKaW5kZXggYjg1MzkzMC4uZjA0MWQ0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9tc2kuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21zaS5oCkBAIC0xMCwxMyArMTAsNiBAQAogI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgogCiAjZGVmaW5lIExBU1RfREVWSUNFX1ZFQ1RPUgkJMjMyCi0jZGVmaW5lIE1TSV9ERVNUX01PREUJCQlNU0lfTE9HSUNBTF9NT0RFCi0jZGVmaW5lIE1TSV9UQVJHRVRfQ1BVX1NISUZUCQkxMgotCi0jaWZkZWYgQ09ORklHX1NNUAotI2RlZmluZSBNU0lfVEFSR0VUX0NQVQkJbG9naWNhbF9zbXBfcHJvY2Vzc29yX2lkKCkKLSNlbHNlCi0jZGVmaW5lIE1TSV9UQVJHRVRfQ1BVCWNwdV90b19sb2dpY2FsX2FwaWNpZChmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApKQotI2VuZGlmCisjZGVmaW5lIE1TSV9UQVJHRVRfQ1BVX1NISUZUCTEyCiAKICNlbmRpZiAvKiBBU01fTVNJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc21wLmggYi9pbmNsdWRlL2FzbS1pMzg2L3NtcC5oCmluZGV4IDEzMjUwMTkuLjYxZDNhYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvc21wLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9zbXAuaApAQCAtNDUsNiArNDUsOCBAQAogI2RlZmluZSBNQVhfQVBJQ0lEIDI1NgogZXh0ZXJuIHU4IHg4Nl9jcHVfdG9fYXBpY2lkW107CiAKKyNkZWZpbmUgY3B1X3BoeXNpY2FsX2lkKGNwdSkJeDg2X2NwdV90b19hcGljaWRbY3B1XQorCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiBleHRlcm4gdm9pZCBjcHVfZXhpdF9jbGVhcih2b2lkKTsKIGV4dGVybiB2b2lkIGNwdV91bmluaXQodm9pZCk7CkBAIC05Miw2ICs5NCwxMCBAQAogZXh0ZXJuIHZvaWQgX19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpOwogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KIAorI2Vsc2UgLyogQ09ORklHX1NNUCAqLworCisjZGVmaW5lIGNwdV9waHlzaWNhbF9pZChjcHUpCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQKKwogI2RlZmluZSBOT19QUk9DX0lECQkweEZGCQkvKiBObyBwcm9jZXNzb3IgbWFnaWMgbWFya2VyICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9rZGVidWcuaCBiL2luY2x1ZGUvYXNtLWlhNjQva2RlYnVnLmgKaW5kZXggNGQzNzZlMS4uOGIwMWEwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9rZGVidWcuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2tkZWJ1Zy5oCkBAIC0yMiw2ICsyMiw5IEBACiAgKiAyMDA1LUFwciAgICAgUnVzdHkgTHluY2ggPHJ1c3R5Lmx5bmNoQGludGVsLmNvbT4gYW5kIEFuaWwgUyBLZXNoYXZhbXVydGh5CiAgKiAgICAgICAgICAgICAgPGFuaWwucy5rZXNoYXZhbXVydGh5QGludGVsLmNvbT4gYWRvcHRlZCBmcm9tCiAgKiAgICAgICAgICAgICAgaW5jbHVkZS9hc20teDg2XzY0L2tkZWJ1Zy5oCisgKgorICogMjAwNS1PY3QJS2VpdGggT3dlbnMgPGthb3NAc2dpLmNvbT4uICBFeHBhbmQgbm90aWZ5X2RpZSB0byBjb3ZlciBtb3JlCisgKgkJZXZlbnRzLgogICovCiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KIApAQCAtMzUsMTMgKzM4LDM2IEBACiAJaW50IHNpZ25yOwogfTsKIAotaW50IHJlZ2lzdGVyX2RpZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKK2V4dGVybiBpbnQgcmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKTsKK2V4dGVybiBpbnQgdW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICopOwogZXh0ZXJuIHN0cnVjdCBub3RpZmllcl9ibG9jayAqaWE2NGRpZV9jaGFpbjsKIAogZW51bSBkaWVfdmFsIHsKIAlESUVfQlJFQUsgPSAxLAotCURJRV9TUywKKwlESUVfRkFVTFQsCisJRElFX09PUFMsCiAJRElFX1BBR0VfRkFVTFQsCisJRElFX01BQ0hJTkVfSEFMVCwKKwlESUVfTUFDSElORV9SRVNUQVJULAorCURJRV9NQ0FfTU9OQVJDSF9FTlRFUiwKKwlESUVfTUNBX01PTkFSQ0hfUFJPQ0VTUywKKwlESUVfTUNBX01PTkFSQ0hfTEVBVkUsCisJRElFX01DQV9TTEFWRV9FTlRFUiwKKwlESUVfTUNBX1NMQVZFX1BST0NFU1MsCisJRElFX01DQV9TTEFWRV9MRUFWRSwKKwlESUVfTUNBX1JFTkRaVk9VU19FTlRFUiwKKwlESUVfTUNBX1JFTkRaVk9VU19QUk9DRVNTLAorCURJRV9NQ0FfUkVORFpWT1VTX0xFQVZFLAorCURJRV9JTklUX01PTkFSQ0hfRU5URVIsCisJRElFX0lOSVRfTU9OQVJDSF9QUk9DRVNTLAorCURJRV9JTklUX01PTkFSQ0hfTEVBVkUsCisJRElFX0lOSVRfU0xBVkVfRU5URVIsCisJRElFX0lOSVRfU0xBVkVfUFJPQ0VTUywKKwlESUVfSU5JVF9TTEFWRV9MRUFWRSwKKwlESUVfS0RFQlVHX0VOVEVSLAorCURJRV9LREVCVUdfTEVBVkUsCisJRElFX0tEVU1QX0VOVEVSLAorCURJRV9LRFVNUF9MRUFWRSwKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IG5vdGlmeV9kaWUoZW51bSBkaWVfdmFsIHZhbCwgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLWlhNjQvbW11X2NvbnRleHQuaAppbmRleCA4ZDZlNzJmLi5iNWM2NTA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tbXVfY29udGV4dC5oCkBAIC03LDEyICs3LDEzIEBACiAgKi8KIAogLyoKLSAqIFJvdXRpbmVzIHRvIG1hbmFnZSB0aGUgYWxsb2NhdGlvbiBvZiB0YXNrIGNvbnRleHQgbnVtYmVycy4gIFRhc2sgY29udGV4dCBudW1iZXJzIGFyZQotICogdXNlZCB0byByZWR1Y2Ugb3IgZWxpbWluYXRlIHRoZSBuZWVkIHRvIHBlcmZvcm0gVExCIGZsdXNoZXMgZHVlIHRvIGNvbnRleHQgc3dpdGNoZXMuCi0gKiBDb250ZXh0IG51bWJlcnMgYXJlIGltcGxlbWVudGVkIHVzaW5nIGlhLTY0IHJlZ2lvbiBpZHMuICBTaW5jZSB0aGUgSUEtNjQgVExCIGRvZXMgbm90Ci0gKiBjb25zaWRlciB0aGUgcmVnaW9uIG51bWJlciB3aGVuIHBlcmZvcm1pbmcgYSBUTEIgbG9va3VwLCB3ZSBuZWVkIHRvIGFzc2lnbiBhIHVuaXF1ZQotICogcmVnaW9uIGlkIHRvIGVhY2ggcmVnaW9uIGluIGEgcHJvY2Vzcy4gIFdlIHVzZSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgdGhyZWUgYml0cyBpbiBhCi0gKiByZWdpb24gaWQgZm9yIHRoaXMgcHVycG9zZS4KKyAqIFJvdXRpbmVzIHRvIG1hbmFnZSB0aGUgYWxsb2NhdGlvbiBvZiB0YXNrIGNvbnRleHQgbnVtYmVycy4gIFRhc2sgY29udGV4dAorICogbnVtYmVycyBhcmUgdXNlZCB0byByZWR1Y2Ugb3IgZWxpbWluYXRlIHRoZSBuZWVkIHRvIHBlcmZvcm0gVExCIGZsdXNoZXMKKyAqIGR1ZSB0byBjb250ZXh0IHN3aXRjaGVzLiAgQ29udGV4dCBudW1iZXJzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyBpYS02NAorICogcmVnaW9uIGlkcy4gIFNpbmNlIHRoZSBJQS02NCBUTEIgZG9lcyBub3QgY29uc2lkZXIgdGhlIHJlZ2lvbiBudW1iZXIgd2hlbgorICogcGVyZm9ybWluZyBhIFRMQiBsb29rdXAsIHdlIG5lZWQgdG8gYXNzaWduIGEgdW5pcXVlIHJlZ2lvbiBpZCB0byBlYWNoCisgKiByZWdpb24gaW4gYSBwcm9jZXNzLiAgV2UgdXNlIHRoZSBsZWFzdCBzaWduaWZpY2FudCB0aHJlZSBiaXRzIGluIGFyZWdpb24KKyAqIGlkIGZvciB0aGlzIHB1cnBvc2UuCiAgKi8KIAogI2RlZmluZSBJQTY0X1JFR0lPTl9JRF9LRVJORUwJMCAvKiB0aGUga2VybmVsJ3MgcmVnaW9uIGlkICh0bGIuYyBkZXBlbmRzIG9uIHRoaXMgYmVpbmcgMCkgKi8KQEAgLTMyLDEzICszMywxNyBAQAogc3RydWN0IGlhNjRfY3R4IHsKIAlzcGlubG9ja190IGxvY2s7CiAJdW5zaWduZWQgaW50IG5leHQ7CS8qIG5leHQgY29udGV4dCBudW1iZXIgdG8gdXNlICovCi0JdW5zaWduZWQgaW50IGxpbWl0OwkvKiBuZXh0ID49IGxpbWl0ID0+IG11c3QgY2FsbCB3cmFwX21tdV9jb250ZXh0KCkgKi8KLQl1bnNpZ25lZCBpbnQgbWF4X2N0eDsJLyogbWF4LiBjb250ZXh0IHZhbHVlIHN1cHBvcnRlZCBieSBhbGwgQ1BVcyAqLworCXVuc2lnbmVkIGludCBsaW1pdDsgICAgIC8qIGF2YWlsYWJsZSBmcmVlIHJhbmdlICovCisJdW5zaWduZWQgaW50IG1heF9jdHg7ICAgLyogbWF4LiBjb250ZXh0IHZhbHVlIHN1cHBvcnRlZCBieSBhbGwgQ1BVcyAqLworCQkJCS8qIGNhbGwgd3JhcF9tbXVfY29udGV4dCB3aGVuIG5leHQgPj0gbWF4ICovCisJdW5zaWduZWQgbG9uZyAqYml0bWFwOyAgLyogYml0bWFwIHNpemUgaXMgbWF4X2N0eCsxICovCisJdW5zaWduZWQgbG9uZyAqZmx1c2htYXA7LyogcGVuZGluZyByaWQgdG8gYmUgZmx1c2hlZCAqLwogfTsKIAogZXh0ZXJuIHN0cnVjdCBpYTY0X2N0eCBpYTY0X2N0eDsKIERFQ0xBUkVfUEVSX0NQVSh1OCwgaWE2NF9uZWVkX3RsYl9mbHVzaCk7CiAKK2V4dGVybiB2b2lkIG1tdV9jb250ZXh0X2luaXQgKHZvaWQpOwogZXh0ZXJuIHZvaWQgd3JhcF9tbXVfY29udGV4dCAoc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTQ3LDEwICs1MiwxMCBAQAogfQogCiAvKgotICogV2hlbiB0aGUgY29udGV4dCBjb3VudGVyIHdyYXBzIGFyb3VuZCBhbGwgVExCcyBuZWVkIHRvIGJlIGZsdXNoZWQgYmVjYXVzZSBhbiBvbGQKLSAqIGNvbnRleHQgbnVtYmVyIG1pZ2h0IGhhdmUgYmVlbiByZXVzZWQuIFRoaXMgaXMgc2lnbmFsbGVkIGJ5IHRoZSBpYTY0X25lZWRfdGxiX2ZsdXNoCi0gKiBwZXItQ1BVIHZhcmlhYmxlLCB3aGljaCBpcyBjaGVja2VkIGluIHRoZSByb3V0aW5lIGJlbG93LiBDYWxsZWQgYnkgYWN0aXZhdGVfbW0oKS4KLSAqIDxlZm9jaHRAZXNzLm5lYy5kZT4KKyAqIFdoZW4gdGhlIGNvbnRleHQgY291bnRlciB3cmFwcyBhcm91bmQgYWxsIFRMQnMgbmVlZCB0byBiZSBmbHVzaGVkIGJlY2F1c2UKKyAqIGFuIG9sZCBjb250ZXh0IG51bWJlciBtaWdodCBoYXZlIGJlZW4gcmV1c2VkLiBUaGlzIGlzIHNpZ25hbGxlZCBieSB0aGUKKyAqIGlhNjRfbmVlZF90bGJfZmx1c2ggcGVyLUNQVSB2YXJpYWJsZSwgd2hpY2ggaXMgY2hlY2tlZCBpbiB0aGUgcm91dGluZQorICogYmVsb3cuIENhbGxlZCBieSBhY3RpdmF0ZV9tbSgpLiA8ZWZvY2h0QGVzcy5uZWMuZGU+CiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAogZGVsYXllZF90bGJfZmx1c2ggKHZvaWQpCkBAIC02MCwxMSArNjUsOSBAQAogCiAJaWYgKHVubGlrZWx5KF9faWE2NF9wZXJfY3B1X3ZhcihpYTY0X25lZWRfdGxiX2ZsdXNoKSkpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmlhNjRfY3R4LmxvY2ssIGZsYWdzKTsKLQkJewotCQkJaWYgKF9faWE2NF9wZXJfY3B1X3ZhcihpYTY0X25lZWRfdGxiX2ZsdXNoKSkgewotCQkJCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKLQkJCQlfX2lhNjRfcGVyX2NwdV92YXIoaWE2NF9uZWVkX3RsYl9mbHVzaCkgPSAwOwotCQkJfQorCQlpZiAoX19pYTY0X3Blcl9jcHVfdmFyKGlhNjRfbmVlZF90bGJfZmx1c2gpKSB7CisJCQlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CisJCQlfX2lhNjRfcGVyX2NwdV92YXIoaWE2NF9uZWVkX3RsYl9mbHVzaCkgPSAwOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlhNjRfY3R4LmxvY2ssIGZsYWdzKTsKIAl9CkBAIC03NiwyMCArNzksMjcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCW52X21tX2NvbnRleHRfdCBjb250ZXh0ID0gbW0tPmNvbnRleHQ7CiAKLQlpZiAodW5saWtlbHkoIWNvbnRleHQpKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpYTY0X2N0eC5sb2NrLCBmbGFncyk7Ci0JCXsKLQkJCS8qIHJlLWNoZWNrLCBub3cgdGhhdCB3ZSd2ZSBnb3QgdGhlIGxvY2s6ICovCi0JCQljb250ZXh0ID0gbW0tPmNvbnRleHQ7Ci0JCQlpZiAoY29udGV4dCA9PSAwKSB7Ci0JCQkJY3B1c19jbGVhcihtbS0+Y3B1X3ZtX21hc2spOwotCQkJCWlmIChpYTY0X2N0eC5uZXh0ID49IGlhNjRfY3R4LmxpbWl0KQotCQkJCQl3cmFwX21tdV9jb250ZXh0KG1tKTsKLQkJCQltbS0+Y29udGV4dCA9IGNvbnRleHQgPSBpYTY0X2N0eC5uZXh0Kys7Ci0JCQl9CisJaWYgKGxpa2VseShjb250ZXh0KSkKKwkJZ290byBvdXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWE2NF9jdHgubG9jaywgZmxhZ3MpOworCS8qIHJlLWNoZWNrLCBub3cgdGhhdCB3ZSd2ZSBnb3QgdGhlIGxvY2s6ICovCisJY29udGV4dCA9IG1tLT5jb250ZXh0OworCWlmIChjb250ZXh0ID09IDApIHsKKwkJY3B1c19jbGVhcihtbS0+Y3B1X3ZtX21hc2spOworCQlpZiAoaWE2NF9jdHgubmV4dCA+PSBpYTY0X2N0eC5saW1pdCkgeworCQkJaWE2NF9jdHgubmV4dCA9IGZpbmRfbmV4dF96ZXJvX2JpdChpYTY0X2N0eC5iaXRtYXAsCisJCQkJCWlhNjRfY3R4Lm1heF9jdHgsIGlhNjRfY3R4Lm5leHQpOworCQkJaWE2NF9jdHgubGltaXQgPSBmaW5kX25leHRfYml0KGlhNjRfY3R4LmJpdG1hcCwKKwkJCQkJaWE2NF9jdHgubWF4X2N0eCwgaWE2NF9jdHgubmV4dCk7CisJCQlpZiAoaWE2NF9jdHgubmV4dCA+PSBpYTY0X2N0eC5tYXhfY3R4KQorCQkJCXdyYXBfbW11X2NvbnRleHQobW0pOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlhNjRfY3R4LmxvY2ssIGZsYWdzKTsKKwkJbW0tPmNvbnRleHQgPSBjb250ZXh0ID0gaWE2NF9jdHgubmV4dCsrOworCQlfX3NldF9iaXQoY29udGV4dCwgaWE2NF9jdHguYml0bWFwKTsKIAl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWE2NF9jdHgubG9jaywgZmxhZ3MpOworb3V0OgogCS8qCiAJICogRW5zdXJlIHdlJ3JlIG5vdCBzdGFydGluZyB0byB1c2UgImNvbnRleHQiIGJlZm9yZSBhbnkgb2xkCiAJICogdXNlcyBvZiBpdCBhcmUgZ29uZSBmcm9tIG91ciBUTEIuCkBAIC0xMDAsOCArMTEwLDggQEAKIH0KIAogLyoKLSAqIEluaXRpYWxpemUgY29udGV4dCBudW1iZXIgdG8gc29tZSBzYW5lIHZhbHVlLiAgTU0gaXMgZ3VhcmFudGVlZCB0byBiZSBhIGJyYW5kLW5ldwotICogYWRkcmVzcy1zcGFjZSwgc28gbm8gVExCIGZsdXNoaW5nIGlzIG5lZWRlZCwgZXZlci4KKyAqIEluaXRpYWxpemUgY29udGV4dCBudW1iZXIgdG8gc29tZSBzYW5lIHZhbHVlLiAgTU0gaXMgZ3VhcmFudGVlZCB0byBiZSBhCisgKiBicmFuZC1uZXcgYWRkcmVzcy1zcGFjZSwgc28gbm8gVExCIGZsdXNoaW5nIGlzIG5lZWRlZCwgZXZlci4KICAqLwogc3RhdGljIGlubGluZSBpbnQKIGluaXRfbmV3X2NvbnRleHQgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCkBAIC0xNjIsNyArMTcyLDEwIEBACiAJCWlmICghY3B1X2lzc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW0tPmNwdV92bV9tYXNrKSkKIAkJCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtbS0+Y3B1X3ZtX21hc2spOwogCQlyZWxvYWRfY29udGV4dChjb250ZXh0KTsKLQkJLyogaW4gdGhlIHVubGlrZWx5IGV2ZW50IG9mIGEgVExCLWZsdXNoIGJ5IGFub3RoZXIgdGhyZWFkLCByZWRvIHRoZSBsb2FkOiAqLworCQkvKgorCQkgKiBpbiB0aGUgdW5saWtlbHkgZXZlbnQgb2YgYSBUTEItZmx1c2ggYnkgYW5vdGhlciB0aHJlYWQsCisJCSAqIHJlZG8gdGhlIGxvYWQuCisJCSAqLwogCX0gd2hpbGUgKHVubGlrZWx5KGNvbnRleHQgIT0gbW0tPmNvbnRleHQpKTsKIH0KIApAQCAtMTc1LDggKzE4OCw4IEBACiBhY3RpdmF0ZV9tbSAoc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCkKIHsKIAkvKgotCSAqIFdlIG1heSBnZXQgaW50ZXJydXB0cyBoZXJlLCBidXQgdGhhdCdzIE9LIGJlY2F1c2UgaW50ZXJydXB0IGhhbmRsZXJzIGNhbm5vdAotCSAqIHRvdWNoIHVzZXItc3BhY2UuCisJICogV2UgbWF5IGdldCBpbnRlcnJ1cHRzIGhlcmUsIGJ1dCB0aGF0J3MgT0sgYmVjYXVzZSBpbnRlcnJ1cHQKKwkgKiBoYW5kbGVycyBjYW5ub3QgdG91Y2ggdXNlci1zcGFjZS4KIAkgKi8KIAlpYTY0X3NldF9rcihJQTY0X0tSX1BUX0JBU0UsIF9fcGEobmV4dC0+cGdkKSk7CiAJYWN0aXZhdGVfY29udGV4dChuZXh0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbXNpLmggYi9pbmNsdWRlL2FzbS1pYTY0L21zaS5oCmluZGV4IDYwZjIxMzcuLjk3ODkwZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvbXNpLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tc2kuaApAQCAtMTIsOSArMTIsNiBAQAogc3RhdGljIGlubGluZSB2b2lkIHNldF9pbnRyX2dhdGUgKGludCBuciwgdm9pZCAqZnVuYykge30KICNkZWZpbmUgSU9fQVBJQ19WRUNUT1IoaXJxKQkoaXJxKQogI2RlZmluZSBhY2tfQVBJQ19pcnEJCWlhNjRfZW9pCi0jZGVmaW5lIGNwdV9tYXNrX3RvX2FwaWNpZChtYXNrKSBjcHVfcGh5c2ljYWxfaWQoZmlyc3RfY3B1KG1hc2spKQotI2RlZmluZSBNU0lfREVTVF9NT0RFCQlNU0lfUEhZU0lDQUxfTU9ERQotI2RlZmluZSBNU0lfVEFSR0VUX0NQVQkoKGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19DUl9MSUQpID4+IDE2KSAmIDB4ZmZmZikKICNkZWZpbmUgTVNJX1RBUkdFVF9DUFVfU0hJRlQJNAogCiAjZW5kaWYgLyogQVNNX01TSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1pYTY0L3RsYmZsdXNoLmgKaW5kZXggYjY1YzYyNy4uYTM1YjMyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvdGxiZmx1c2guaApAQCAtNTEsNiArNTEsNyBAQAogCWlmICghbW0pCiAJCXJldHVybjsKIAorCXNldF9iaXQobW0tPmNvbnRleHQsIGlhNjRfY3R4LmZsdXNobWFwKTsKIAltbS0+Y29udGV4dCA9IDA7CiAKIAlpZiAoYXRvbWljX3JlYWQoJm1tLT5tbV91c2VycykgPT0gMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2Fic19hZGRyLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2Fic19hZGRyLmgKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcHBjNjQvYWJzX2FkZHIuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tcG93ZXJwYy9hYnNfYWRkci5oCmluZGV4IGRjM2ZjM2YuLjE4NDE1MTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2Fic19hZGRyLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9hYnNfYWRkci5oCkBAIC0xLDUgKzEsNSBAQAotI2lmbmRlZiBfQUJTX0FERFJfSAotI2RlZmluZSBfQUJTX0FERFJfSAorI2lmbmRlZiBfQVNNX1BPV0VSUENfQUJTX0FERFJfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfQUJTX0FERFJfSAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKQEAgLTcwLDQgKzcwLDQgQEAKICNkZWZpbmUgaXNlcmllc19odl9hZGRyKHZpcnRhZGRyKQlcCiAJKDB4ODAwMDAwMDAwMDAwMDAwMCB8IHZpcnRfdG9fYWJzKHZpcnRhZGRyKSkKIAotI2VuZGlmIC8qIF9BQlNfQUREUl9IICovCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0FCU19BRERSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYXNtLWNvbXBhdC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9hc20tY29tcGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIxMzNlZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYXNtLWNvbXBhdC5oCkBAIC0wLDAgKzEsNTUgQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX0FTTV9DT01QQVRfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfQVNNX0NPTVBBVF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2lmZGVmIF9fQVNTRU1CTFlfXworIyAgZGVmaW5lIHN0cmluZ2lmeV9pbl9jKC4uLikJX19WQV9BUkdTX18KKyMgIGRlZmluZSBBU01fQ09OU1QoeCkJCXgKKyNlbHNlCisvKiBUaGlzIHZlcnNpb24gb2Ygc3RyaW5naWZ5IHdpbGwgZGVhbCB3aXRoIGNvbW1hcy4uLiAqLworIyAgZGVmaW5lIF9fc3RyaW5naWZ5X2luX2MoLi4uKQkjX19WQV9BUkdTX18KKyMgIGRlZmluZSBzdHJpbmdpZnlfaW5fYyguLi4pCV9fc3RyaW5naWZ5X2luX2MoX19WQV9BUkdTX18pICIgIgorIyAgZGVmaW5lIF9fQVNNX0NPTlNUKHgpCXgjI1VMCisjICBkZWZpbmUgQVNNX0NPTlNUKHgpCQlfX0FTTV9DT05TVCh4KQorI2VuZGlmCisKKyNpZmRlZiBfX3Bvd2VycGM2NF9fCisKKy8qIG9wZXJhdGlvbnMgZm9yIGxvbmdzIGFuZCBwb2ludGVycyAqLworI2RlZmluZSBQUENfTEwJCXN0cmluZ2lmeV9pbl9jKGxkKQorI2RlZmluZSBQUENfU1RMCQlzdHJpbmdpZnlfaW5fYyhzdGQpCisjZGVmaW5lIFBQQ19MQ01QSQlzdHJpbmdpZnlfaW5fYyhjbXBkaSkKKyNkZWZpbmUgUFBDX0xPTkcJc3RyaW5naWZ5X2luX2MoLmxsb25nKQorI2RlZmluZSBQUENfVExORUkJc3RyaW5naWZ5X2luX2ModGRuZWkpCisjZGVmaW5lIFBQQ19MTEFSWAlzdHJpbmdpZnlfaW5fYyhsZGFyeCkKKyNkZWZpbmUgUFBDX1NUTENYCXN0cmluZ2lmeV9pbl9jKHN0ZGN4LikKKyNkZWZpbmUgUFBDX0NOVExaTAlzdHJpbmdpZnlfaW5fYyhjbnRsemQpCisKKyNlbHNlIC8qIDMyLWJpdCAqLworCisvKiBvcGVyYXRpb25zIGZvciBsb25ncyBhbmQgcG9pbnRlcnMgKi8KKyNkZWZpbmUgUFBDX0xMCQlzdHJpbmdpZnlfaW5fYyhsd3opCisjZGVmaW5lIFBQQ19TVEwJCXN0cmluZ2lmeV9pbl9jKHN0dykKKyNkZWZpbmUgUFBDX0xDTVBJCXN0cmluZ2lmeV9pbl9jKGNtcHdpKQorI2RlZmluZSBQUENfTE9ORwlzdHJpbmdpZnlfaW5fYygubG9uZykKKyNkZWZpbmUgUFBDX1RMTkVJCXN0cmluZ2lmeV9pbl9jKHR3bmVpKQorI2RlZmluZSBQUENfTExBUlgJc3RyaW5naWZ5X2luX2MobHdhcngpCisjZGVmaW5lIFBQQ19TVExDWAlzdHJpbmdpZnlfaW5fYyhzdHdjeC4pCisjZGVmaW5lIFBQQ19DTlRMWkwJc3RyaW5naWZ5X2luX2MoY250bHp3KQorCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19JQk00MDVfRVJSNzcKKy8qIEVycmF0dW0gIzc3IG9uIHRoZSA0MDUgbWVhbnMgd2UgbmVlZCBhIHN5bmMgb3IgZGNidCBiZWZvcmUgZXZlcnkKKyAqIHN0d2N4LiAgVGhlIG9sZCBBVE9NSUNfU1lOQ19GSVggY292ZXJlZCBzb21lIGJ1dCBub3QgYWxsIG9mIHRoaXMuCisgKi8KKyNkZWZpbmUgUFBDNDA1X0VSUjc3KHJhLHJiKQlzdHJpbmdpZnlfaW5fYyhkY2J0CXJhLCByYjspCisjZGVmaW5lCVBQQzQwNV9FUlI3N19TWU5DCXN0cmluZ2lmeV9pbl9jKHN5bmM7KQorI2Vsc2UKKyNkZWZpbmUgUFBDNDA1X0VSUjc3KHJhLHJiKQorI2RlZmluZSBQUEM0MDVfRVJSNzdfU1lOQworI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfQVNNX0NPTVBBVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2F0b21pYy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9hdG9taWMuaAppbmRleCBlZDRiMzQ1Li45YzBiMzcyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYXRvbWljLmgKQEAgLTksMjEgKzksMTMgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxhc20vc3luY2guaD4KKyNpbmNsdWRlIDxhc20vYXNtLWNvbXBhdC5oPgogCiAjZGVmaW5lIEFUT01JQ19JTklUKGkpCQl7IChpKSB9CiAKICNkZWZpbmUgYXRvbWljX3JlYWQodikJCSgodiktPmNvdW50ZXIpCiAjZGVmaW5lIGF0b21pY19zZXQodixpKQkJKCgodiktPmNvdW50ZXIpID0gKGkpKQogCi0vKiBFcnJhdHVtICM3NyBvbiB0aGUgNDA1IG1lYW5zIHdlIG5lZWQgYSBzeW5jIG9yIGRjYnQgYmVmb3JlIGV2ZXJ5IHN0d2N4LgotICogVGhlIG9sZCBBVE9NSUNfU1lOQ19GSVggY292ZXJlZCBzb21lIGJ1dCBub3QgYWxsIG9mIHRoaXMuCi0gKi8KLSNpZmRlZiBDT05GSUdfSUJNNDA1X0VSUjc3Ci0jZGVmaW5lIFBQQzQwNV9FUlI3NyhyYSxyYikJImRjYnQgIiAjcmEgIiwiICNyYiAiOyIKLSNlbHNlCi0jZGVmaW5lIFBQQzQwNV9FUlI3NyhyYSxyYikKLSNlbmRpZgotCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19hZGQoaW50IGEsIGF0b21pY190ICp2KQogewogCWludCB0OwpAQCAtMjA1LDUgKzE5NywxODMgQEAKICNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpICAgICBzbXBfbWIoKQogI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKSAgICAgIHNtcF9tYigpCiAKKyNpZmRlZiBfX3Bvd2VycGM2NF9fCisKK3R5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgbG9uZyBjb3VudGVyOyB9IGF0b21pYzY0X3Q7CisKKyNkZWZpbmUgQVRPTUlDNjRfSU5JVChpKQl7IChpKSB9CisKKyNkZWZpbmUgYXRvbWljNjRfcmVhZCh2KQkoKHYpLT5jb3VudGVyKQorI2RlZmluZSBhdG9taWM2NF9zZXQodixpKQkoKCh2KS0+Y291bnRlcikgPSAoaSkpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljNjRfYWRkKGxvbmcgYSwgYXRvbWljNjRfdCAqdikKK3sKKwlsb25nIHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIxOglsZGFyeAklMCwwLCUzCQkjIGF0b21pYzY0X2FkZFxuXAorCWFkZAklMCwlMiwlMFxuXAorCXN0ZGN4LgklMCwwLCUzIFxuXAorCWJuZS0JMWIiCisJOiAiPSZyIiAodCksICI9bSIgKHYtPmNvdW50ZXIpCisJOiAiciIgKGEpLCAiciIgKCZ2LT5jb3VudGVyKSwgIm0iICh2LT5jb3VudGVyKQorCTogImNjIik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgYXRvbWljNjRfYWRkX3JldHVybihsb25nIGEsIGF0b21pYzY0X3QgKnYpCit7CisJbG9uZyB0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJRUlFSU9fT05fU01QCisiMToJbGRhcngJJTAsMCwlMgkJIyBhdG9taWM2NF9hZGRfcmV0dXJuXG5cCisJYWRkCSUwLCUxLCUwXG5cCisJc3RkY3guCSUwLDAsJTIgXG5cCisJYm5lLQkxYiIKKwlJU1lOQ19PTl9TTVAKKwk6ICI9JnIiICh0KQorCTogInIiIChhKSwgInIiICgmdi0+Y291bnRlcikKKwk6ICJjYyIsICJtZW1vcnkiKTsKKworCXJldHVybiB0OworfQorCisjZGVmaW5lIGF0b21pYzY0X2FkZF9uZWdhdGl2ZShhLCB2KQkoYXRvbWljNjRfYWRkX3JldHVybigoYSksICh2KSkgPCAwKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pYzY0X3N1Yihsb25nIGEsIGF0b21pYzY0X3QgKnYpCit7CisJbG9uZyB0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiMToJbGRhcngJJTAsMCwlMwkJIyBhdG9taWM2NF9zdWJcblwKKwlzdWJmCSUwLCUyLCUwXG5cCisJc3RkY3guCSUwLDAsJTMgXG5cCisJYm5lLQkxYiIKKwk6ICI9JnIiICh0KSwgIj1tIiAodi0+Y291bnRlcikKKwk6ICJyIiAoYSksICJyIiAoJnYtPmNvdW50ZXIpLCAibSIgKHYtPmNvdW50ZXIpCisJOiAiY2MiKTsKK30KKworc3RhdGljIF9faW5saW5lX18gbG9uZyBhdG9taWM2NF9zdWJfcmV0dXJuKGxvbmcgYSwgYXRvbWljNjRfdCAqdikKK3sKKwlsb25nIHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwlFSUVJT19PTl9TTVAKKyIxOglsZGFyeAklMCwwLCUyCQkjIGF0b21pYzY0X3N1Yl9yZXR1cm5cblwKKwlzdWJmCSUwLCUxLCUwXG5cCisJc3RkY3guCSUwLDAsJTIgXG5cCisJYm5lLQkxYiIKKwlJU1lOQ19PTl9TTVAKKwk6ICI9JnIiICh0KQorCTogInIiIChhKSwgInIiICgmdi0+Y291bnRlcikKKwk6ICJjYyIsICJtZW1vcnkiKTsKKworCXJldHVybiB0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pYzY0X2luYyhhdG9taWM2NF90ICp2KQoreworCWxvbmcgdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorIjE6CWxkYXJ4CSUwLDAsJTIJCSMgYXRvbWljNjRfaW5jXG5cCisJYWRkaWMJJTAsJTAsMVxuXAorCXN0ZGN4LgklMCwwLCUyIFxuXAorCWJuZS0JMWIiCisJOiAiPSZyIiAodCksICI9bSIgKHYtPmNvdW50ZXIpCisJOiAiciIgKCZ2LT5jb3VudGVyKSwgIm0iICh2LT5jb3VudGVyKQorCTogImNjIik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgYXRvbWljNjRfaW5jX3JldHVybihhdG9taWM2NF90ICp2KQoreworCWxvbmcgdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCUVJRUlPX09OX1NNUAorIjE6CWxkYXJ4CSUwLDAsJTEJCSMgYXRvbWljNjRfaW5jX3JldHVyblxuXAorCWFkZGljCSUwLCUwLDFcblwKKwlzdGRjeC4JJTAsMCwlMSBcblwKKwlibmUtCTFiIgorCUlTWU5DX09OX1NNUAorCTogIj0mciIgKHQpCisJOiAiciIgKCZ2LT5jb3VudGVyKQorCTogImNjIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIHQ7Cit9CisKKy8qCisgKiBhdG9taWM2NF9pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxCisgKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KKyNkZWZpbmUgYXRvbWljNjRfaW5jX2FuZF90ZXN0KHYpIChhdG9taWM2NF9pbmNfcmV0dXJuKHYpID09IDApCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljNjRfZGVjKGF0b21pYzY0X3QgKnYpCit7CisJbG9uZyB0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiMToJbGRhcngJJTAsMCwlMgkJIyBhdG9taWM2NF9kZWNcblwKKwlhZGRpYwklMCwlMCwtMVxuXAorCXN0ZGN4LgklMCwwLCUyXG5cCisJYm5lLQkxYiIKKwk6ICI9JnIiICh0KSwgIj1tIiAodi0+Y291bnRlcikKKwk6ICJyIiAoJnYtPmNvdW50ZXIpLCAibSIgKHYtPmNvdW50ZXIpCisJOiAiY2MiKTsKK30KKworc3RhdGljIF9faW5saW5lX18gbG9uZyBhdG9taWM2NF9kZWNfcmV0dXJuKGF0b21pYzY0X3QgKnYpCit7CisJbG9uZyB0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJRUlFSU9fT05fU01QCisiMToJbGRhcngJJTAsMCwlMQkJIyBhdG9taWM2NF9kZWNfcmV0dXJuXG5cCisJYWRkaWMJJTAsJTAsLTFcblwKKwlzdGRjeC4JJTAsMCwlMVxuXAorCWJuZS0JMWIiCisJSVNZTkNfT05fU01QCisJOiAiPSZyIiAodCkKKwk6ICJyIiAoJnYtPmNvdW50ZXIpCisJOiAiY2MiLCAibWVtb3J5Iik7CisKKwlyZXR1cm4gdDsKK30KKworI2RlZmluZSBhdG9taWM2NF9zdWJfYW5kX3Rlc3QoYSwgdikJKGF0b21pYzY0X3N1Yl9yZXR1cm4oKGEpLCAodikpID09IDApCisjZGVmaW5lIGF0b21pYzY0X2RlY19hbmRfdGVzdCh2KQkoYXRvbWljNjRfZGVjX3JldHVybigodikpID09IDApCisKKy8qCisgKiBBdG9taWNhbGx5IHRlc3QgKnYgYW5kIGRlY3JlbWVudCBpZiBpdCBpcyBncmVhdGVyIHRoYW4gMC4KKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBvbGQgdmFsdWUgb2YgKnYgbWludXMgMS4KKyAqLworc3RhdGljIF9faW5saW5lX18gbG9uZyBhdG9taWM2NF9kZWNfaWZfcG9zaXRpdmUoYXRvbWljNjRfdCAqdikKK3sKKwlsb25nIHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwlFSUVJT19PTl9TTVAKKyIxOglsZGFyeAklMCwwLCUxCQkjIGF0b21pYzY0X2RlY19pZl9wb3NpdGl2ZVxuXAorCWFkZGljLgklMCwlMCwtMVxuXAorCWJsdC0JMmZcblwKKwlzdGRjeC4JJTAsMCwlMVxuXAorCWJuZS0JMWIiCisJSVNZTkNfT05fU01QCisJIlxuXAorMjoiCTogIj0mciIgKHQpCisJOiAiciIgKCZ2LT5jb3VudGVyKQorCTogImNjIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIHQ7Cit9CisKKyNlbmRpZiAvKiBfX3Bvd2VycGM2NF9fICovCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0FUT01JQ19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9hdXh2ZWMuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYXV4dmVjLmgKaW5kZXggNzlkOGM0Ny4uMTlhMDk5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9hdXh2ZWMuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2F1eHZlYy5oCkBAIC0xNCw4ICsxNCw2IEBACiAvKiBUaGUgdkRTTyBsb2NhdGlvbi4gV2UgaGF2ZSB0byB1c2UgdGhlIHNhbWUgdmFsdWUgYXMgeDg2IGZvciBnbGliYydzCiAgKiBzYWtlIDotKQogICovCi0jaWZkZWYgX19wb3dlcnBjNjRfXwogI2RlZmluZSBBVF9TWVNJTkZPX0VIRFIJCTMzCi0jZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9iaXRvcHMuaAppbmRleCBkYzI1YzUzLi41NzI3MjI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYml0b3BzLmgKQEAgLTQwLDYgKzQwLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3N5bmNoLmg+CiAKIC8qCkBAIC01MiwxNiArNTMsNiBAQAogI2RlZmluZSBCSVRPUF9XT1JEKG5yKQkJKChucikgLyBCSVRTX1BFUl9MT05HKQogI2RlZmluZSBCSVRPUF9MRV9TV0laWkxFCSgoQklUU19QRVJfTE9ORy0xKSAmIH4weDcpCiAKLSNpZmRlZiBDT05GSUdfUFBDNjQKLSNkZWZpbmUgTEFSWEwJCSJsZGFyeCIKLSNkZWZpbmUgU1RDWEwJCSJzdGRjeC4iCi0jZGVmaW5lIENOVExaTAkJImNudGx6ZCIKLSNlbHNlCi0jZGVmaW5lIExBUlhMCQkibHdhcngiCi0jZGVmaW5lIFNUQ1hMCQkic3R3Y3guIgotI2RlZmluZSBDTlRMWkwJCSJjbnRsenciCi0jZW5kaWYKLQogc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKIHsKIAl1bnNpZ25lZCBsb25nIG9sZDsKQEAgLTY5LDEwICs2MCwxMCBAQAogCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIEJJVE9QX1dPUkQobnIpOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iMToiCUxBUlhMICIJJTAsMCwlMwkjIHNldF9iaXRcbiIKKyIxOiIJUFBDX0xMQVJYICIlMCwwLCUzCSMgc2V0X2JpdFxuIgogCSJvcgklMCwlMCwlMlxuIgogCVBQQzQwNV9FUlI3NygwLCUzKQotCVNUQ1hMICIJJTAsMCwlM1xuIgorCVBQQ19TVExDWCAiJTAsMCwlM1xuIgogCSJibmUtCTFiIgogCTogIj0mciIob2xkKSwgIj1tIigqcCkKIAk6ICJyIihtYXNrKSwgInIiKHApLCAibSIoKnApCkBAIC04NiwxMCArNzcsMTAgQEAKIAl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyBCSVRPUF9XT1JEKG5yKTsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotIjE6IglMQVJYTCAiCSUwLDAsJTMJIyBzZXRfYml0XG4iCisiMToiCVBQQ19MTEFSWCAiJTAsMCwlMwkjIGNsZWFyX2JpdFxuIgogCSJhbmRjCSUwLCUwLCUyXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTMpCi0JU1RDWEwgIgklMCwwLCUzXG4iCisJUFBDX1NUTENYICIlMCwwLCUzXG4iCiAJImJuZS0JMWIiCiAJOiAiPSZyIihvbGQpLCAiPW0iKCpwKQogCTogInIiKG1hc2spLCAiciIocCksICJtIigqcCkKQEAgLTEwMywxMCArOTQsMTAgQEAKIAl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyBCSVRPUF9XT1JEKG5yKTsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotIjE6IglMQVJYTCAiCSUwLDAsJTMJIyBzZXRfYml0XG4iCisiMToiCVBQQ19MTEFSWCAiJTAsMCwlMwkjIGNoYW5nZV9iaXRcbiIKIAkieG9yCSUwLCUwLCUyXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTMpCi0JU1RDWEwgIgklMCwwLCUzXG4iCisJUFBDX1NUTENYICIlMCwwLCUzXG4iCiAJImJuZS0JMWIiCiAJOiAiPSZyIihvbGQpLCAiPW0iKCpwKQogCTogInIiKG1hc2spLCAiciIocCksICJtIigqcCkKQEAgLTEyMiwxMCArMTEzLDEwIEBACiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAlFSUVJT19PTl9TTVAKLSIxOiIJTEFSWEwgIgklMCwwLCUzCQkjIHRlc3RfYW5kX3NldF9iaXRcbiIKKyIxOiIJUFBDX0xMQVJYICIlMCwwLCUzCQkjIHRlc3RfYW5kX3NldF9iaXRcbiIKIAkib3IJJTEsJTAsJTIgXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTMpCi0JU1RDWEwgIgklMSwwLCUzIFxuIgorCVBQQ19TVExDWCAiJTEsMCwlMyBcbiIKIAkiYm5lLQkxYiIKIAlJU1lOQ19PTl9TTVAKIAk6ICI9JnIiIChvbGQpLCAiPSZyIiAodCkKQEAgLTE0NCwxMCArMTM1LDEwIEBACiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAlFSUVJT19PTl9TTVAKLSIxOiIJTEFSWEwgIgklMCwwLCUzCQkjIHRlc3RfYW5kX2NsZWFyX2JpdFxuIgorIjE6IglQUENfTExBUlggIiUwLDAsJTMJCSMgdGVzdF9hbmRfY2xlYXJfYml0XG4iCiAJImFuZGMJJTEsJTAsJTIgXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTMpCi0JU1RDWEwgIgklMSwwLCUzIFxuIgorCVBQQ19TVExDWCAiJTEsMCwlMyBcbiIKIAkiYm5lLQkxYiIKIAlJU1lOQ19PTl9TTVAKIAk6ICI9JnIiIChvbGQpLCAiPSZyIiAodCkKQEAgLTE2NiwxMCArMTU3LDEwIEBACiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAlFSUVJT19PTl9TTVAKLSIxOiIJTEFSWEwgIgklMCwwLCUzCQkjIHRlc3RfYW5kX2NoYW5nZV9iaXRcbiIKKyIxOiIJUFBDX0xMQVJYICIlMCwwLCUzCQkjIHRlc3RfYW5kX2NoYW5nZV9iaXRcbiIKIAkieG9yCSUxLCUwLCUyIFxuIgogCVBQQzQwNV9FUlI3NygwLCUzKQotCVNUQ1hMICIJJTEsMCwlMyBcbiIKKwlQUENfU1RMQ1ggIiUxLDAsJTMgXG4iCiAJImJuZS0JMWIiCiAJSVNZTkNfT05fU01QCiAJOiAiPSZyIiAob2xkKSwgIj0mciIgKHQpCkBAIC0xODQsOSArMTc1LDkgQEAKICAgICAgICAgdW5zaWduZWQgbG9uZyBvbGQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSIxOiIJTEFSWEwgIgklMCwwLCUzICAgICAgICAgIyBzZXRfYml0XG4iCisiMToiCVBQQ19MTEFSWCAiJTAsMCwlMyAgICAgICAgICMgc2V0X2JpdHNcbiIKIAkib3IJJTAsJTAsJTJcbiIKLQlTVENYTCAiCSUwLDAsJTNcbiIKKwlQUENfU1RMQ1ggIiUwLDAsJTNcbiIKIAkiYm5lLQkxYiIKIAk6ICI9JnIiIChvbGQpLCAiPW0iICgqYWRkcikKIAk6ICJyIiAobWFzayksICJyIiAoYWRkciksICJtIiAoKmFkZHIpCkBAIC0yNjgsNyArMjU5LDcgQEAKIHsKIAlpbnQgbHo7CiAKLQlhc20gKENOVExaTCAiICUwLCUxIiA6ICI9ciIgKGx6KSA6ICJyIiAoeCkpOworCWFzbSAoUFBDX0NOVExaTCAiJTAsJTEiIDogIj1yIiAobHopIDogInIiICh4KSk7CiAJcmV0dXJuIEJJVFNfUEVSX0xPTkcgLSAxIC0gbHo7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYnVnLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2J1Zy5oCmluZGV4IGQ2MjVlZTUuLmIwMDFlY2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9idWcuaApAQCAtMSw2ICsxLDcgQEAKICNpZm5kZWYgX0FTTV9QT1dFUlBDX0JVR19ICiAjZGVmaW5lIF9BU01fUE9XRVJQQ19CVUdfSAogCisjaW5jbHVkZSA8YXNtL2FzbS1jb21wYXQuaD4KIC8qCiAgKiBEZWZpbmUgYW4gaWxsZWdhbCBpbnN0ciB0byB0cmFwIG9uIHRoZSBidWcuCiAgKiBXZSBkb24ndCB1c2UgMCBiZWNhdXNlIHRoYXQgbWFya3MgdGhlIGVuZCBvZiBhIGZ1bmN0aW9uCkBAIC0xMSwxNCArMTIsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0jaWZkZWYgX19wb3dlcnBjNjRfXwotI2RlZmluZSBCVUdfVEFCTEVfRU5UUlkJCSIubGxvbmciCi0jZGVmaW5lIEJVR19UUkFQX09QCQkidGRuZWkiCi0jZWxzZSAKLSNkZWZpbmUgQlVHX1RBQkxFX0VOVFJZCQkiLmxvbmciCi0jZGVmaW5lIEJVR19UUkFQX09QCQkidHduZWkiCi0jZW5kaWYgLyogX19wb3dlcnBjNjRfXyAqLwotCiBzdHJ1Y3QgYnVnX2VudHJ5IHsKIAl1bnNpZ25lZCBsb25nCWJ1Z19hZGRyOwogCWxvbmcJCWxpbmU7CkBAIC00MCwxNiArMzMsMTYgQEAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkgXAogCQkiMToJdHdpIDMxLDAsMFxuIgkJCQkJIFwKIAkJIi5zZWN0aW9uIF9fYnVnX3RhYmxlLFwiYVwiXG4iCQkJCSBcCi0JCSJcdCJCVUdfVEFCTEVfRU5UUlkiCTFiLCUwLCUxLCUyXG4iCQkJIFwKKwkJIlx0IlBQQ19MT05HIgkxYiwlMCwlMSwlMlxuIgkJCSBcCiAJCSIucHJldmlvdXMiCQkJCQkJIFwKIAkJOiA6ICJpIiAoX19MSU5FX18pLCAiaSIgKF9fRklMRV9fKSwgImkiIChfX0ZVTkNUSU9OX18pKTsgXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBCVUdfT04oeCkgZG8gewkJCQkJCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKLQkJIjE6CSJCVUdfVFJBUF9PUCIJJTAsMFxuIgkJCVwKKwkJIjE6CSJQUENfVExORUkiCSUwLDBcbiIJCQlcCiAJCSIuc2VjdGlvbiBfX2J1Z190YWJsZSxcImFcIlxuIgkJCVwKLQkJIlx0IkJVR19UQUJMRV9FTlRSWSIJMWIsJTEsJTIsJTNcbiIJCVwKKwkJIlx0IlBQQ19MT05HIgkxYiwlMSwlMiwlM1xuIgkJXAogCQkiLnByZXZpb3VzIgkJCQkJXAogCQk6IDogInIiICgobG9uZykoeCkpLCAiaSIgKF9fTElORV9fKSwJCVwKIAkJICAgICJpIiAoX19GSUxFX18pLCAiaSIgKF9fRlVOQ1RJT05fXykpOwlcCkBAIC01Nyw5ICs1MCw5IEBACiAKICNkZWZpbmUgV0FSTl9PTih4KSBkbyB7CQkJCQkJXAogCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAotCQkiMToJIkJVR19UUkFQX09QIgklMCwwXG4iCQkJXAorCQkiMToJIlBQQ19UTE5FSSIJJTAsMFxuIgkJCVwKIAkJIi5zZWN0aW9uIF9fYnVnX3RhYmxlLFwiYVwiXG4iCQkJXAotCQkiXHQiQlVHX1RBQkxFX0VOVFJZIgkxYiwlMSwlMiwlM1xuIgkJXAorCQkiXHQiUFBDX0xPTkciCTFiLCUxLCUyLCUzXG4iCQlcCiAJCSIucHJldmlvdXMiCQkJCQlcCiAJCTogOiAiciIgKChsb25nKSh4KSksCQkJCVwKIAkJICAgICJpIiAoX19MSU5FX18gKyBCVUdfV0FSTklOR19UUkFQKSwJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmNlNTAyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jYWNoZS5oCkBAIC0wLDAgKzEsNDAgQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX0NBQ0hFX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX0NBQ0hFX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKiBieXRlcyBwZXIgTDEgY2FjaGUgbGluZSAqLworI2lmIGRlZmluZWQoQ09ORklHXzh4eCkgfHwgZGVmaW5lZChDT05GSUdfNDAzR0NYKQorI2RlZmluZSBMMV9DQUNIRV9TSElGVAkJNAorI2RlZmluZSBNQVhfQ09QWV9QUkVGRVRDSAkxCisjZWxpZiBkZWZpbmVkKENPTkZJR19QUEMzMikKKyNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQJCTUKKyNkZWZpbmUgTUFYX0NPUFlfUFJFRkVUQ0gJNAorI2Vsc2UgLyogQ09ORklHX1BQQzY0ICovCisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUCQk3CisjZW5kaWYKKworI2RlZmluZQlMMV9DQUNIRV9CWVRFUwkJKDEgPDwgTDFfQ0FDSEVfU0hJRlQpCisKKyNkZWZpbmUJU01QX0NBQ0hFX0JZVEVTCQlMMV9DQUNIRV9CWVRFUworI2RlZmluZSBMMV9DQUNIRV9TSElGVF9NQVgJNyAvKiBsYXJnZXN0IEwxIHdoaWNoIHRoaXMgYXJjaCBzdXBwb3J0cyAqLworCisjaWYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKSAmJiAhZGVmaW5lZChfX0FTU0VNQkxZX18pCitzdHJ1Y3QgcHBjNjRfY2FjaGVzIHsKKwl1MzIJZHNpemU7CQkJLyogTDEgZC1jYWNoZSBzaXplICovCisJdTMyCWRsaW5lX3NpemU7CQkvKiBMMSBkLWNhY2hlIGxpbmUgc2l6ZQkqLworCXUzMglsb2dfZGxpbmVfc2l6ZTsKKwl1MzIJZGxpbmVzX3Blcl9wYWdlOworCXUzMglpc2l6ZTsJCQkvKiBMMSBpLWNhY2hlIHNpemUgKi8KKwl1MzIJaWxpbmVfc2l6ZTsJCS8qIEwxIGktY2FjaGUgbGluZSBzaXplCSovCisJdTMyCWxvZ19pbGluZV9zaXplOworCXUzMglpbGluZXNfcGVyX3BhZ2U7Cit9OworCitleHRlcm4gc3RydWN0IHBwYzY0X2NhY2hlcyBwcGM2NF9jYWNoZXM7CisjZW5kaWYgLyogX19wb3dlcnBjNjRfXyAmJiAhIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19DQUNIRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY2FjaGVmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzQwYzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2NhY2hlZmx1c2guaApAQCAtMCwwICsxLDY4IEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX0FTTV9QT1dFUlBDX0NBQ0hFRkxVU0hfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfQ0FDSEVGTFVTSF9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorCisvKgorICogTm8gY2FjaGUgZmx1c2hpbmcgaXMgcmVxdWlyZWQgd2hlbiBhZGRyZXNzIG1hcHBpbmdzIGFyZSBjaGFuZ2VkLAorICogYmVjYXVzZSB0aGUgY2FjaGVzIG9uIFBvd2VyUENzIGFyZSBwaHlzaWNhbGx5IGFkZHJlc3NlZC4KKyAqLworI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZtYWRkciwgcGZuKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSwgcGFnZSkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKKworZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOworI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCisKK2V4dGVybiB2b2lkIF9fZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApCit7CisJaWYgKCFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9DT0hFUkVOVF9JQ0FDSEUpKQorCQlfX2ZsdXNoX2ljYWNoZV9yYW5nZShzdGFydCwgc3RvcCk7Cit9CisKK2V4dGVybiB2b2lkIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCSAgICBpbnQgbGVuKTsKK2V4dGVybiB2b2lkIF9fZmx1c2hfZGNhY2hlX2ljYWNoZSh2b2lkICpwYWdlX3ZhKTsKK2V4dGVybiB2b2lkIGZsdXNoX2RjYWNoZV9pY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CisjaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpICYmICFkZWZpbmVkKENPTkZJR19CT09LRSkKK2V4dGVybiB2b2lkIF9fZmx1c2hfZGNhY2hlX2ljYWNoZV9waHlzKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIpOworI2VuZGlmIC8qIENPTkZJR19QUEMzMiAmJiAhQ09ORklHX0JPT0tFICovCisKK2V4dGVybiB2b2lkIGZsdXNoX2RjYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApOworI2lmZGVmIENPTkZJR19QUEMzMgorZXh0ZXJuIHZvaWQgY2xlYW5fZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCk7CitleHRlcm4gdm9pZCBpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApOworI2VuZGlmIC8qIENPTkZJR19QUEMzMiAqLworI2lmZGVmIENPTkZJR19QUEM2NAorZXh0ZXJuIHZvaWQgZmx1c2hfaW52YWxfZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCk7CitleHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfcGh5c19yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApOworI2VuZGlmCisKKyNkZWZpbmUgY29weV90b191c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAorCWRvIHsgXAorCQltZW1jcHkoZHN0LCBzcmMsIGxlbik7IFwKKwkJZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uodm1hLCBwYWdlLCB2YWRkciwgbGVuKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAorCW1lbWNweShkc3QsIHNyYywgbGVuKQorCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfQ0FDSEVGTFVTSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9jb21wYXQuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY29tcGF0LmgKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcHBjNjQvY29tcGF0LmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLXBvd2VycGMvY29tcGF0LmgKaW5kZXggNmVjNjJjZC4uNGRiNDM2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvY29tcGF0LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jb21wYXQuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX0FTTV9QUEM2NF9DT01QQVRfSAotI2RlZmluZSBfQVNNX1BQQzY0X0NPTVBBVF9ICisjaWZuZGVmIF9BU01fUE9XRVJQQ19DT01QQVRfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfQ09NUEFUX0gKIC8qCiAgKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29tcGF0aWJpbGl0eSB0eXBlcwogICovCkBAIC00OSw3ICs0OSw3IEBACiAJY29tcGF0X2Rldl90CXN0X2RldjsKIAljb21wYXRfaW5vX3QJc3RfaW5vOwogCWNvbXBhdF9tb2RlX3QJc3RfbW9kZTsKLQljb21wYXRfbmxpbmtfdAlzdF9ubGluazsJCisJY29tcGF0X25saW5rX3QJc3Rfbmxpbms7CiAJX19jb21wYXRfdWlkMzJfdAlzdF91aWQ7CiAJX19jb21wYXRfZ2lkMzJfdAlzdF9naWQ7CiAJY29tcGF0X2Rldl90CXN0X3JkZXY7CkBAIC0yMDIsNCArMjAyLDQgQEAKIAljb21wYXRfdWxvbmdfdCBfX3VudXNlZDY7CiB9OwogCi0jZW5kaWYgLyogX0FTTV9QUEM2NF9DT01QQVRfSCAqLworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19DT01QQVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9jcHV0YWJsZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jcHV0YWJsZS5oCmluZGV4IDc5YTA1NTYuLjA0ZTI3MjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvY3B1dGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwdXRhYmxlLmgKQEAgLTIsNyArMiw3IEBACiAjZGVmaW5lIF9fQVNNX1BPV0VSUENfQ1BVVEFCTEVfSAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8YXNtL3BwY19hc20uaD4gLyogZm9yIEFTTV9DT05TVCAqLworI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAKICNkZWZpbmUgUFBDX0ZFQVRVUkVfMzIJCQkweDgwMDAwMDAwCiAjZGVmaW5lIFBQQ19GRUFUVVJFXzY0CQkJMHg0MDAwMDAwMApAQCAtMTYsNiArMTYsMTAgQEAKICNkZWZpbmUgUFBDX0ZFQVRVUkVfSEFTX0VGUF9TSU5HTEUJMHgwMDQwMDAwMAogI2RlZmluZSBQUENfRkVBVFVSRV9IQVNfRUZQX0RPVUJMRQkweDAwMjAwMDAwCiAjZGVmaW5lIFBQQ19GRUFUVVJFX05PX1RCCQkweDAwMTAwMDAwCisjZGVmaW5lIFBQQ19GRUFUVVJFX1BPV0VSNAkJMHgwMDA4MDAwMAorI2RlZmluZSBQUENfRkVBVFVSRV9QT1dFUjUJCTB4MDAwNDAwMDAKKyNkZWZpbmUgUFBDX0ZFQVRVUkVfUE9XRVI1X1BMVVMJCTB4MDAwMjAwMDAKKyNkZWZpbmUgUFBDX0ZFQVRVUkVfQ0VMTAkJMHgwMDAxMDAwMAogCiAjaWZkZWYgX19LRVJORUxfXwogI2lmbmRlZiBfX0FTU0VNQkxZX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvY3VycmVudC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jdXJyZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJjZDRhOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY3VycmVudC5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX0NVUlJFTlRfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfQ1VSUkVOVF9ICisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKK3N0cnVjdCB0YXNrX3N0cnVjdDsKKworI2lmZGVmIF9fcG93ZXJwYzY0X18KKyNpbmNsdWRlIDxhc20vcGFjYS5oPgorCisjZGVmaW5lIGN1cnJlbnQJCShnZXRfcGFjYSgpLT5fX2N1cnJlbnQpCisKKyNlbHNlCisKKy8qCisgKiBXZSBrZWVwIGBjdXJyZW50JyBpbiByMiBmb3Igc3BlZWQuCisgKi8KK3JlZ2lzdGVyIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycmVudCBhc20gKCJyMiIpOworCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19DVVJSRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZWVoX2V2ZW50LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2VlaF9ldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNjhhMzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2VlaF9ldmVudC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKgllZWhfZXZlbnQuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBMaW5hcyBWZXBzdGFzIDxsaW5hc0BsaW5hcy5vcmc+CisgKi8KKworI2lmbmRlZiBBU01fUFBDNjRfRUVIX0VWRU5UX0gKKyNkZWZpbmUgQVNNX1BQQzY0X0VFSF9FVkVOVF9ICisKKy8qKiBFRUggZXZlbnQgLS0gc3RydWN0dXJlIGhvbGRpbmcgcGNpIGNvbnRyb2xsZXIgZGF0YSB0aGF0IGRlc2NyaWJlcworICogIGEgY2hhbmdlIGluIHRoZSBpc29sYXRpb24gc3RhdHVzIG9mIGEgUENJIHNsb3QuICBBIHBvaW50ZXIKKyAqICB0byB0aGlzIHN0cnVjdCBpcyBwYXNzZWQgYXMgdGhlIGRhdGEgcG9pbnRlciBpbiBhIG5vdGlmeSBjYWxsYmFjay4KKyAqLworc3RydWN0IGVlaF9ldmVudCB7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgbGlzdDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgCSpkbjsgICAvKiBzdHJ1Y3QgZGV2aWNlIG5vZGUgKi8KKwlzdHJ1Y3QgcGNpX2RldiAgICAgICAqZGV2OyAgLyogYWZmZWN0ZWQgZGV2aWNlICovCisJaW50ICAgICAgICAgICAgICAgICAgc3RhdGU7CisJaW50IHRpbWVfdW5hdmFpbDsgICAgLyogbWlsbGlzZWNvbmRzIHVudGlsIGRldmljZSBtaWdodCBiZSBhdmFpbGFibGUgKi8KK307CisKKy8qKgorICogZWVoX3NlbmRfZmFpbHVyZV9ldmVudCAtIGdlbmVyYXRlIGEgUENJIGVycm9yIGV2ZW50CisgKiBAZGV2IHBjaSBkZXZpY2UKKyAqCisgKiBUaGlzIHJvdXRpbmUgYnVpbGRzIGEgUENJIGVycm9yIGV2ZW50IHdoaWNoIHdpbGwgYmUgZGVsaXZlcmVkCisgKiB0byBhbGwgbGlzdGVuZXJzIG9uIHRoZSBwZWhfbm90aWZpZXJfY2hhaW4uCisgKgorICogVGhpcyByb3V0aW5lIGNhbiBiZSBjYWxsZWQgd2l0aGluIGFuIGludGVycnVwdCBjb250ZXh0OworICogdGhlIGFjdHVhbCBldmVudCB3aWxsIGJlIGRlbGl2ZXJlZCBpbiBhIG5vcm1hbCBjb250ZXh0CisgKiAoZnJvbSBhIHdvcmtxdWV1ZSkuCisgKi8KK2ludCBlZWhfc2VuZF9mYWlsdXJlX2V2ZW50IChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc2V0X3N0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aW1lX3VuYXZhaWwpOworCisjZW5kaWYgLyogQVNNX1BQQzY0X0VFSF9FVkVOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2VsZi5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9lbGYuaAppbmRleCBmZWFjMzQ1Li4zZGNkNjVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZWxmLmgKQEAgLTI2OSwxNCArMjY5LDEyIEBACiBleHRlcm4gaW50IGljYWNoZV9ic2l6ZTsKIGV4dGVybiBpbnQgdWNhY2hlX2JzaXplOwogCi0jaWZkZWYgX19wb3dlcnBjNjRfXworLyogdkRTTyBoYXMgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzICovCisjZGVmaW5lIEFSQ0hfSEFTX1NFVFVQX0FERElUSU9OQUxfUEFHRVMKIHN0cnVjdCBsaW51eF9iaW5wcm07Ci0jZGVmaW5lIEFSQ0hfSEFTX1NFVFVQX0FERElUSU9OQUxfUEFHRVMJLyogdkRTTyBoYXMgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzICovCi1leHRlcm4gaW50IGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBpbnQgZXhlY3V0YWJsZV9zdGFjayk7CitleHRlcm4gaW50IGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAorCQkJCSAgICAgICBpbnQgZXhlY3V0YWJsZV9zdGFjayk7CiAjZGVmaW5lIFZEU09fQVVYX0VOVChhLGIpIE5FV19BVVhfRU5UKGEsYik7Ci0jZWxzZQotI2RlZmluZSBWRFNPX0FVWF9FTlQoYSxiKQotI2VuZGlmIC8qIF9fcG93ZXJwYzY0X18gKi8KIAogLyoKICAqIFRoZSByZXF1aXJlbWVudHMgaGVyZSBhcmU6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2Zpcm13YXJlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2Zpcm13YXJlLmgKaW5kZXggODA2YzE0Mi4uMTJmYWJiY2IwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2Zpcm13YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9maXJtd2FyZS5oCkBAIC00Myw2ICs0Myw3IEBACiAjZGVmaW5lIEZXX0ZFQVRVUkVfSVNFUklFUwkoMVVMPDwyMSkKIAogZW51bSB7CisjaWZkZWYgQ09ORklHX1BQQzY0CiAJRldfRkVBVFVSRV9QU0VSSUVTX1BPU1NJQkxFID0gRldfRkVBVFVSRV9QRlQgfCBGV19GRUFUVVJFX1RDRSB8CiAJCUZXX0ZFQVRVUkVfU1BSRzAgfCBGV19GRUFUVVJFX0RBQlIgfCBGV19GRUFUVVJFX0NPUFkgfAogCQlGV19GRUFUVVJFX0FTUiB8IEZXX0ZFQVRVUkVfREVCVUcgfCBGV19GRUFUVVJFX1RFUk0gfApAQCAtNzAsNiArNzEsMTEgQEAKIAkJRldfRkVBVFVSRV9JU0VSSUVTX0FMV0FZUyAmCiAjZW5kaWYKIAkJRldfRkVBVFVSRV9QT1NTSUJMRSwKKworI2Vsc2UgLyogQ09ORklHX1BQQzY0ICovCisJRldfRkVBVFVSRV9QT1NTSUJMRSA9IDAsCisJRldfRkVBVFVSRV9BTFdBWVMgPSAwLAorI2VuZGlmCiB9OwogCiAvKiBUaGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgZmlybXdhcmUgZmVhdHVyZXMgd2hpY2ggYXJlIGF2YWlsYWJsZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9mdXRleC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9mdXRleC5oCmluZGV4IDM3Yzk0ZTUuLmYwMzE5ZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZnV0ZXguaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2Z1dGV4LmgKQEAgLTcsMTMgKzcsMTQgQEAKICNpbmNsdWRlIDxhc20vZXJybm8uaD4KICNpbmNsdWRlIDxhc20vc3luY2guaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1jb21wYXQuaD4KIAogI2RlZmluZSBfX2Z1dGV4X2F0b21pY19vcChpbnNuLCByZXQsIG9sZHZhbCwgdWFkZHIsIG9wYXJnKSBcCiAgIF9fYXNtX18gX192b2xhdGlsZSAoIFwKIAlTWU5DX09OX1NNUCBcCiAiMToJbHdhcngJJTAsMCwlMlxuIiBcCiAJaW5zbiBcCisJUFBDNDA1X0VSUjc3KDAsICUyKSBcCiAiMjoJc3R3Y3guCSUxLDAsJTJcbiIgXAogCSJibmUtCTFiXG4iIFwKIAkibGkJJTEsMFxuIiBcCkBAIC0yMyw3ICsyNCw3IEBACiAJIi5wcmV2aW91c1xuIiBcCiAJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgXAogCSIuYWxpZ24gM1xuIiBcCi0JREFUQUwgIiAxYiw0YiwyYiw0YlxuIiBcCisJUFBDX0xPTkcgIjFiLDRiLDJiLDRiXG4iIFwKIAkiLnByZXZpb3VzIiBcCiAJOiAiPSZyIiAob2xkdmFsKSwgIj0mciIgKHJldCkgXAogCTogImIiICh1YWRkciksICJpIiAoLUVGQVVMVCksICIxIiAob3BhcmcpIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2h2Y2FsbC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9odmNhbGwuaApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wcGM2NC9odmNhbGwuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tcG93ZXJwYy9odmNhbGwuaAppbmRleCBhYjdjM2NmLi5kMzZkYTYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9odmNhbGwuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2h2Y2FsbC5oCkBAIC0xLDUgKzEsNSBAQAotI2lmbmRlZiBfUFBDNjRfSFZDQUxMX0gKLSNkZWZpbmUgX1BQQzY0X0hWQ0FMTF9ICisjaWZuZGVmIF9BU01fUE9XRVJQQ19IVkNBTExfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfSFZDQUxMX0gKIAogI2RlZmluZSBIVlNDCQkJLmxvbmcgMHg0NDAwMDAyMgogCkBAIC0xMzgsNyArMTM4LDcgQEAKICAqLwogbG9uZyBwbHBhcl9oY2FsbF9ub3JldHModW5zaWduZWQgbG9uZyBvcGNvZGUsIC4uLik7CiAKLS8qIAorLyoKICAqIFNwZWNpYWwgaGNhbGwgaW50ZXJmYWNlIGZvciBpYm12ZXRoIHN1cHBvcnQuCiAgKiBUYWtlcyA4IGlucHV0IHBhcm1zLiBSZXR1cm5zIGEgcmMgYW5kIHN0b3JlcyB0aGUKICAqIFI0IHJldHVybiB2YWx1ZSBpbiAqb3V0MS4KQEAgLTE1MywxMSArMTUzLDExIEBACiAJCQkgICB1bnNpZ25lZCBsb25nIGFyZzcsCiAJCQkgICB1bnNpZ25lZCBsb25nIGFyZzgsCiAJCQkgICB1bnNpZ25lZCBsb25nICpvdXQxKTsKLSAKKwogLyogcGxwYXJfaGNhbGxfNG91dCgpCiAgKgotICogc2FtZSBhcyBwbHBhcl9oY2FsbCBleGNlcHQgd2l0aCA0IG91dHB1dCBhcmd1bWVudHMuICAKLSAqIAorICogc2FtZSBhcyBwbHBhcl9oY2FsbCBleGNlcHQgd2l0aCA0IG91dHB1dCBhcmd1bWVudHMuCisgKgogICovCiBsb25nIHBscGFyX2hjYWxsXzRvdXQodW5zaWduZWQgbG9uZyBvcGNvZGUsCiAJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnMSwKQEAgLTE3MCw0ICsxNzAsNCBAQAogCQkgICAgICB1bnNpZ25lZCBsb25nICpvdXQ0KTsKIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotI2VuZGlmIC8qIF9QUEM2NF9IVkNBTExfSCAqLworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19IVkNBTExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9od19pcnEuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaHdfaXJxLmgKaW5kZXggYzM3YjMxYi4uMjZiODlkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9od19pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2h3X2lycS5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCiBleHRlcm4gdm9pZCB0aW1lcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKik7Ci1leHRlcm4gdm9pZCBwcGNfaXJxX2Rpc3BhdGNoX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBpcnEpOwogCiAjaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaXJxLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lycS5oCmluZGV4IGIzOTM1ZWEuLjhlYjdlODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pcnEuaApAQCAtMzg5LDYgKzM4OSw3IEBACiAjZGVmaW5lCVNJVV9JTlRfVElNRVI0CQkoKHVpbnQpMHgwZiArIENQTV9JUlFfT0ZGU0VUKQogI2RlZmluZQlTSVVfSU5UX1RNQ05UCQkoKHVpbnQpMHgxMCArIENQTV9JUlFfT0ZGU0VUKQogI2RlZmluZQlTSVVfSU5UX1BJVAkJKCh1aW50KTB4MTEgKyBDUE1fSVJRX09GRlNFVCkKKyNkZWZpbmUJU0lVX0lOVF9QQ0kJCSgodWludCkweDEyICsgQ1BNX0lSUV9PRkZTRVQpCiAjZGVmaW5lCVNJVV9JTlRfSVJRMQkJKCh1aW50KTB4MTMgKyBDUE1fSVJRX09GRlNFVCkKICNkZWZpbmUJU0lVX0lOVF9JUlEyCQkoKHVpbnQpMHgxNCArIENQTV9JUlFfT0ZGU0VUKQogI2RlZmluZQlTSVVfSU5UX0lSUTMJCSgodWludCkweDE1ICsgQ1BNX0lSUV9PRkZTRVQpCkBAIC00MjksNyArNDMwLDYgQEAKICNkZWZpbmUgTlJfTUFTS19XT1JEUwkoKE5SX0lSUVMgKyAzMSkgLyAzMikKIC8qIHBlZGFudGljOiB0aGVzZSBhcmUgbG9uZyBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgd2l0aCBzZXRfYml0IC0tUlIgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIHBwY19jYWNoZWRfaXJxX21hc2tbTlJfTUFTS19XT1JEU107Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBwcGNfbG9zdF9pbnRlcnJ1cHRzW05SX01BU0tfV09SRFNdOwogZXh0ZXJuIGF0b21pY190IHBwY19uX2xvc3RfaW50ZXJydXB0czsKIAogI2RlZmluZSB2aXJ0X2lycV9jcmVhdGVfbWFwcGluZyh4KQkoeCkKQEAgLTQ4OCw4ICs0ODgsOCBAQAogCiBleHRlcm4gdm9pZCBpcnFfY3R4X2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBjYWxsX2RvX3NvZnRpcnEoc3RydWN0IHRocmVhZF9pbmZvICp0cCk7Ci1leHRlcm4gaW50IGNhbGxfaGFuZGxlX0lSUV9ldmVudChpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbiwgc3RydWN0IHRocmVhZF9pbmZvICp0cCk7CitleHRlcm4gaW50IGNhbGxfX19kb19JUlEoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCXN0cnVjdCB0aHJlYWRfaW5mbyAqdHApOwogCiAjZGVmaW5lIF9fQVJDSF9IQVNfRE9fU09GVElSUQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9scHBhY2EuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbHBwYWNhLmgKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcHBjNjQvbHBwYWNhLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLXBvd2VycGMvbHBwYWNhLmgKaW5kZXggOWUyYTZjMC4uYzFiZWRhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvbHBwYWNhLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9scHBhY2EuaApAQCAtMTYsOCArMTYsOCBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQogICovCi0jaWZuZGVmIF9BU01fTFBQQUNBX0gKLSNkZWZpbmUgX0FTTV9MUFBBQ0FfSAorI2lmbmRlZiBfQVNNX1BPV0VSUENfTFBQQUNBX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX0xQUEFDQV9ICiAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vCkBAIC0yOCw4ICsyOCw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIAotc3RydWN0IGxwcGFjYQoteworc3RydWN0IGxwcGFjYSB7CiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyBDQUNIRV9MSU5FXzEgMHgwMDAwIC0gMHgwMDdGIENvbnRhaW5zIHJlYWQtb25seSBkYXRhCiAvLyBOT1RFOiBUaGUgeER5blh5eiBmaWVsZHMgYXJlIGZpZWxkcyB0aGF0IHdpbGwgYmUgZHluYW1pY2FsbHkgY2hhbmdlZCBieQpAQCAtMTI5LDQgKzEyOCw0IEBACiAJdTgJcG1jX3NhdmVfYXJlYVsyNTZdOwkvLyBQTUMgaW50ZXJydXB0IEFyZWEgICAgICAgICAgIHgwMC14RkYKIH07CiAKLSNlbmRpZiAvKiBfQVNNX0xQUEFDQV9IICovCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0xQUEFDQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9wYWNhLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhY2EuaApzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wcGM2NC9wYWNhLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLXBvd2VycGMvcGFjYS5oCmluZGV4IGJjY2FjZDYuLjkyYzc2NWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L3BhY2EuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhY2EuaApAQCAtMSwxMSArMSw4IEBACi0jaWZuZGVmIF9QUEM2NF9QQUNBX0gKLSNkZWZpbmUgX1BQQzY0X1BBQ0FfSAotCiAvKgotICogaW5jbHVkZS9hc20tcHBjNjQvcGFjYS5oCisgKiBpbmNsdWRlL2FzbS1wb3dlcnBjL3BhY2EuaAogICoKLSAqIFRoaXMgY29udHJvbCBibG9jayBkZWZpbmVzIHRoZSBQQUNBIHdoaWNoIGRlZmluZXMgdGhlIHByb2Nlc3NvciAKLSAqIHNwZWNpZmljIGRhdGEgZm9yIGVhY2ggbG9naWNhbCBwcm9jZXNzb3Igb24gdGhlIHN5c3RlbS4gIAorICogVGhpcyBjb250cm9sIGJsb2NrIGRlZmluZXMgdGhlIFBBQ0Egd2hpY2ggZGVmaW5lcyB0aGUgcHJvY2Vzc29yCisgKiBzcGVjaWZpYyBkYXRhIGZvciBlYWNoIGxvZ2ljYWwgcHJvY2Vzc29yIG9uIHRoZSBzeXN0ZW0uCiAgKiBUaGVyZSBhcmUgc29tZSBwb2ludGVycyBkZWZpbmVkIHRoYXQgYXJlIHV0aWxpemVkIGJ5IFBMSUMuCiAgKgogICogQyAyMDAxIFBQQyA2NCBUZWFtLCBJQk0gQ29ycApAQCAtMTQsNyArMTEsOSBAQAogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLyAgICAKKyAqLworI2lmbmRlZiBfQVNNX1BPV0VSUENfUEFDQV9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19QQUNBX0gKIAogI2luY2x1ZGUJPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUJPGFzbS90eXBlcy5oPgpAQCAtMTE4LDQgKzExNyw0IEBACiAKIGV4dGVybiBzdHJ1Y3QgcGFjYV9zdHJ1Y3QgcGFjYVtdOwogCi0jZW5kaWYgLyogX1BQQzY0X1BBQ0FfSCAqLworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19QQUNBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHBjLXBjaS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wcGMtcGNpLmgKaW5kZXggMTNhYWNmZi4uOTg5NmZhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wcGMtcGNpLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wcGMtcGNpLmgKQEAgLTI2LDYgKzI2LDEwIEBACiAKIGV4dGVybiBzdHJ1Y3QgcGNpX2RldiAqcHBjNjRfaXNhYnJpZGdlX2RldjsJLyogbWF5IGJlIE5VTEwgaWYgbm8gSVNBIGJ1cyAqLwogCisvKiogQnVzIFVuaXQgSUQgbWFjcm9zOyBnZXQgbG93IGFuZCBoaSAzMi1iaXRzIG9mIHRoZSA2NC1iaXQgQlVJRCAqLworI2RlZmluZSBCVUlEX0hJKGJ1aWQpICgoYnVpZCkgPj4gMzIpCisjZGVmaW5lIEJVSURfTE8oYnVpZCkgKChidWlkKSAmIDB4ZmZmZmZmZmYpCisKIC8qIFBDSSBkZXZpY2Vfbm9kZSBvcGVyYXRpb25zICovCiBzdHJ1Y3QgZGV2aWNlX25vZGU7CiB0eXBlZGVmIHZvaWQgKigqdHJhdmVyc2VfZnVuYykoc3RydWN0IGRldmljZV9ub2RlICptZSwgdm9pZCAqZGF0YSk7CkBAIC0zNiwxMCArNDAsNiBAQAogdm9pZCBwY2lfZGV2c19waGJfaW5pdF9keW5hbWljKHN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiKTsKIHZvaWQgX19kZXZpbml0IHNjYW5fcGhiKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSk7CiAKLS8qIFBDSSBhZGRyZXNzIGNhY2hlIG1hbmFnZW1lbnQgcm91dGluZXMgKi8KLXZvaWQgcGNpX2FkZHJfY2FjaGVfaW5zZXJ0X2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKLXZvaWQgcGNpX2FkZHJfY2FjaGVfcmVtb3ZlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKLQogLyogRnJvbSBydGFzX3BjaS5oICovCiB2b2lkIGluaXRfcGNpX2NvbmZpZ190b2tlbnMgKHZvaWQpOwogdW5zaWduZWQgbG9uZyBnZXRfcGhiX2J1aWQgKHN0cnVjdCBkZXZpY2Vfbm9kZSAqKTsKQEAgLTUyLDQgKzUyLDQ4IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBwY2lfYXNzaWduX2FsbF9idXNlczsKIGV4dGVybiBpbnQgcGNpX3JlYWRfaXJxX2xpbmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpOwogCisvKiAtLS0tIEVFSCBpbnRlcm5hbC11c2Utb25seSByZWxhdGVkIHJvdXRpbmVzIC0tLS0gKi8KKyNpZmRlZiBDT05GSUdfRUVICisvKioKKyAqIHJ0YXNfc2V0X3Nsb3RfcmVzZXQgLS0gdW5mcmVlemUgYSBmcm96ZW4gc2xvdAorICoKKyAqIENsZWFyIHRoZSBFRUgtZnJvemVuIGNvbmRpdGlvbiBvbiBhIHNsb3QuICBUaGlzIHJvdXRpbmUKKyAqIGRvZXMgdGhpcyBieSBhc3NlcnRpbmcgdGhlIFBDSSAjUlNUIGxpbmUgZm9yIDEvOHRoIG9mCisgKiBhIHNlY29uZDsgdGhpcyByb3V0aW5lIHdpbGwgc2xlZXAgd2hpbGUgdGhlIGFkYXB0ZXIgaXMKKyAqIGJlaW5nIHJlc2V0LgorICovCit2b2lkIHJ0YXNfc2V0X3Nsb3RfcmVzZXQgKHN0cnVjdCBwY2lfZG4gKik7CisKKy8qKiAKKyAqIGVlaF9yZXN0b3JlX2JhcnMgLSBSZXN0b3JlIGRldmljZSBjb25maWd1cmF0aW9uIGluZm8uCisgKgorICogQSByZXNldCBvZiBhIFBDSSBkZXZpY2Ugd2lsbCBjbGVhciBvdXQgaXRzIGNvbmZpZyBzcGFjZS4KKyAqIFRoaXMgcm91dGluZXMgd2lsbCByZXN0b3JlIHRoZSBjb25maWcgc3BhY2UgZm9yIHRoaXMKKyAqIGRldmljZSwgYW5kIGlzIGNoaWxkcmVuLCB0byB2YWx1ZXMgcHJldmlvdXNseSBvYnRhaW5lZAorICogZnJvbSB0aGUgZmlybXdhcmUuCisgKi8KK3ZvaWQgZWVoX3Jlc3RvcmVfYmFycyhzdHJ1Y3QgcGNpX2RuICopOworCisvKioKKyAqIHJ0YXNfY29uZmlndXJlX2JyaWRnZSAtLSBmaXJtd2FyZSBpbml0aWFsaXphdGlvbiBvZiBwY2kgYnJpZGdlCisgKgorICogQXNrIHRoZSBmaXJtd2FyZSB0byBjb25maWd1cmUgYWxsIFBDSSBicmlkZ2VzIGRldmljZXMKKyAqIGxvY2F0ZWQgYmVoaW5kIHRoZSBpbmRpY2F0ZWQgbm9kZS4gUmVxdWlyZWQgYWZ0ZXIgYQorICogcGNpIGRldmljZSByZXNldC4gRG9lcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBoaW5nIGFzCisgKiBlZWhfcmVzdG9yZV9iYXJzLCBidXQgZm9yIGJyZGdlcywgYW5kIGxldHMgZmlybXdhcmUgCisgKiBkbyB0aGUgd29yay4KKyAqLwordm9pZCBydGFzX2NvbmZpZ3VyZV9icmlkZ2Uoc3RydWN0IHBjaV9kbiAqKTsKKworaW50IHJ0YXNfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfZG4gKiwgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbCk7CisKKy8qKgorICogbWFyayBhbmQgY2xlYXIgc2xvdHM6IGZpbmQgInBhcnRpdGlvbiBlbmRwb2ludCIgUEUgYW5kIHNldCBvciAKKyAqIGNsZWFyIHRoZSBmbGFncyBmb3IgZWFjaCBzdWJub2RlIG9mIHRoZSBQRS4KKyAqLwordm9pZCBlZWhfbWFya19zbG90IChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBpbnQgbW9kZV9mbGFnKTsKK3ZvaWQgZWVoX2NsZWFyX3Nsb3QgKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIGludCBtb2RlX2ZsYWcpOworCisjZW5kaWYKKwogI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19QUENfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHBjX2FzbS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wcGNfYXNtLmgKaW5kZXggYzUzNGNhNC4uYzI3YmFhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wcGNfYXNtLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wcGNfYXNtLmgKQEAgLTYsOCArNiwxMyBAQAogCiAjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1jb21wYXQuaD4KIAotI2lmZGVmIF9fQVNTRU1CTFlfXworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNlcnJvciBfX0ZJTEVfXyBzaG91bGQgb25seSBiZSB1c2VkIGluIGFzc2VtYmxlciBmaWxlcworI2Vsc2UKKworI2RlZmluZSBTWkwJCQkoQklUU19QRVJfTE9ORy84KQogCiAvKgogICogTWFjcm9zIGZvciBzdG9yaW5nIHJlZ2lzdGVycyBpbnRvIGFuZCBsb2FkaW5nIHJlZ2lzdGVycyBmcm9tCkBAIC0xODQsMTIgKzE4OSw2IEBACiAJb3JpcyAgICByZWcscmVnLChsYWJlbClAaDsgICAgICAgICAgICAgICAgICAgICAgXAogCW9yaSAgICAgcmVnLHJlZywobGFiZWwpQGw7CiAKLS8qIG9wZXJhdGlvbnMgZm9yIGxvbmdzIGFuZCBwb2ludGVycyAqLwotI2RlZmluZSBMREwJbGQKLSNkZWZpbmUgU1RMCXN0ZAotI2RlZmluZSBDTVBJCWNtcGRpCi0jZGVmaW5lIFNaTAk4Ci0KIC8qIG9mZnNldHMgZm9yIHN0YWNrIGZyYW1lIGxheW91dCAqLwogI2RlZmluZSBMUlNBVkUJMTYKIApAQCAtMjAzLDEyICsyMDIsNiBAQAogCiAjZGVmaW5lIE9GRihuYW1lKQluYW1lQGwKIAotLyogb3BlcmF0aW9ucyBmb3IgbG9uZ3MgYW5kIHBvaW50ZXJzICovCi0jZGVmaW5lIExETAlsd3oKLSNkZWZpbmUgU1RMCXN0dwotI2RlZmluZSBDTVBJCWNtcHdpCi0jZGVmaW5lIFNaTAk0Ci0KIC8qIG9mZnNldHMgZm9yIHN0YWNrIGZyYW1lIGxheW91dCAqLwogI2RlZmluZSBMUlNBVkUJNAogCkBAIC0yNjYsMTUgKzI1OSw2IEBACiAjZW5kaWYKIAogCi0jaWZkZWYgQ09ORklHX0lCTTQwNV9FUlI3NwotI2RlZmluZSBQUEM0MDVfRVJSNzcocmEscmIpCWRjYnQJcmEsIHJiOwotI2RlZmluZQlQUEM0MDVfRVJSNzdfU1lOQwlzeW5jOwotI2Vsc2UKLSNkZWZpbmUgUFBDNDA1X0VSUjc3KHJhLHJiKQotI2RlZmluZSBQUEM0MDVfRVJSNzdfU1lOQwotI2VuZGlmCi0KLQogI2lmZGVmIENPTkZJR19JQk00NDBFUF9FUlI0MgogI2RlZmluZSBQUEM0NDBFUF9FUlI0MiBpc3luYwogI2Vsc2UKQEAgLTUwMiwxNyArNDg2LDYgQEAKICNkZWZpbmUgTl9TTElORQk2OAogI2RlZmluZSBOX1NPCTEwMAogCi0jZGVmaW5lIEFTTV9DT05TVCh4KSB4Ci0jZWxzZQotICAjZGVmaW5lIF9fQVNNX0NPTlNUKHgpIHgjI1VMCi0gICNkZWZpbmUgQVNNX0NPTlNUKHgpIF9fQVNNX0NPTlNUKHgpCi0KLSNpZmRlZiBDT05GSUdfUFBDNjQKLSNkZWZpbmUgREFUQUwJIi5sbG9uZyIKLSNlbHNlCi0jZGVmaW5lIERBVEFMCSIubG9uZyIKLSNlbmRpZgotCiAjZW5kaWYgLyogIF9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BQQ19BU01fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcHJvY2Vzc29yLmgKaW5kZXggMWRjNGJmNy4uZDEyMzgyZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3Byb2Nlc3Nvci5oCkBAIC0xNyw2NSArMTcsNzEgQEAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLSNpZmRlZiBDT05GSUdfUFBDNjQKLSNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+Ci0jZW5kaWYKIAotI2lmZGVmIENPTkZJR19QUEMzMgotLyogMzItYml0IHBsYXRmb3JtIHR5cGVzICovCi0vKiBXZSBvbmx5IG5lZWQgdG8gZGVmaW5lIGEgbmV3IF9NQUNIX3h4eCBmb3IgbWFjaGluZXMgd2hpY2ggYXJlIHBhcnQgb2YKLSAqIGEgY29uZmlndXJhdGlvbiB3aGljaCBzdXBwb3J0cyBtb3JlIHRoYW4gb25lIHR5cGUgb2YgZGlmZmVyZW50IG1hY2hpbmUuCi0gKiBUaGlzIGlzIGN1cnJlbnRseSBsaW1pdGVkIHRvIENPTkZJR19QUENfTVVMVElQTEFURk9STSBhbmQgQ0hSUC9QUmVQL1BNYWMuCi0gKiAtLSBUb20KKy8qIFdlIGRvIF9ub3RfIHdhbnQgdG8gZGVmaW5lIG5ldyBtYWNoaW5lIHR5cGVzIGF0IGFsbCwgdGhvc2UgbXVzdCBkaWUKKyAqIGluIGZhdm9yIG9mIHVzaW5nIHRoZSBkZXZpY2UtdHJlZQorICogLS0gQmVuSC4KICAqLwotI2RlZmluZSBfTUFDSF9wcmVwCTB4MDAwMDAwMDEKLSNkZWZpbmUgX01BQ0hfUG1hYwkweDAwMDAwMDAyCS8qIHBtYWMgb3IgcG1hYyBjbG9uZSAobm9uLWNocnApICovCi0jZGVmaW5lIF9NQUNIX2NocnAJMHgwMDAwMDAwNAkvKiBjaHJwIG1hY2hpbmUgKi8KIAotLyogc2VlIHJlc2lkdWFsLmggZm9yIHRoZXNlICovCisvKiBQbGF0Zm9ybXMgY29kZXMgKHRvIGJlIG9ic29sZXRlZCkgKi8KKyNkZWZpbmUgUExBVEZPUk1fUFNFUklFUwkweDAxMDAKKyNkZWZpbmUgUExBVEZPUk1fUFNFUklFU19MUEFSCTB4MDEwMQorI2RlZmluZSBQTEFURk9STV9JU0VSSUVTX0xQQVIJMHgwMjAxCisjZGVmaW5lIFBMQVRGT1JNX0xQQVIJCTB4MDAwMQorI2RlZmluZSBQTEFURk9STV9QT1dFUk1BQwkweDA0MDAKKyNkZWZpbmUgUExBVEZPUk1fTUFQTEUJCTB4MDUwMAorI2RlZmluZSBQTEFURk9STV9QUkVQCQkweDA2MDAKKyNkZWZpbmUgUExBVEZPUk1fQ0hSUAkJMHgwNzAwCisjZGVmaW5lIFBMQVRGT1JNX0NFTEwJCTB4MTAwMAorCisvKiBDb21wYXQgcGxhdGZvcm0gY29kZXMgZm9yIDMyIGJpdHMgKi8KKyNkZWZpbmUgX01BQ0hfcHJlcAlQTEFURk9STV9QUkVQCisjZGVmaW5lIF9NQUNIX1BtYWMJUExBVEZPUk1fUE9XRVJNQUMKKyNkZWZpbmUgX01BQ0hfY2hycAlQTEFURk9STV9DSFJQCisKKy8qIFBSRVAgc3ViLXBsYXRmb3JtIHR5cGVzIHNlZSByZXNpZHVhbC5oIGZvciB0aGVzZSAqLwogI2RlZmluZSBfUFJFUF9Nb3Rvcm9sYQkweDAxCS8qIG1vdG9yb2xhIHByZXAgKi8KICNkZWZpbmUgX1BSRVBfRmlybQkweDAyCS8qIGZpcm13b3JrcyBwcmVwICovCiAjZGVmaW5lIF9QUkVQX0lCTQkweDAwCS8qIGlibSBwcmVwICovCiAjZGVmaW5lIF9QUkVQX0J1bGwJMHgwMwkvKiBidWxsIHByZXAgKi8KIAotLyogdGhlc2UgYXJlIGFyYml0cmFyeSAqLworLyogQ0hSUCBzdWItcGxhdGZvcm0gdHlwZXMuIFRoZXNlIGFyZSBhcmJpdHJhcnkgKi8KICNkZWZpbmUgX0NIUlBfTW90b3JvbGEJMHgwNAkvKiBtb3Rvcm9sYSBjaHJwLCB0aGUgY29icmEgKi8KICNkZWZpbmUgX0NIUlBfSUJNCTB4MDUJLyogSUJNIGNocnAsIHRoZSBsb25ndHJhaWwgYW5kIGxvbmd0cmFpbCAyICovCiAjZGVmaW5lIF9DSFJQX1BlZ2Fzb3MJMHgwNgkvKiBHZW5lc2kvYnBsYW4ncyBQZWdhc29zIGFuZCBQZWdhc29zMiAqLwogCi0jaWZkZWYgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNCisjZGVmaW5lIHBsYXRmb3JtX2lzX3BzZXJpZXMoKQkoX21hY2hpbmUgPT0gUExBVEZPUk1fUFNFUklFUyB8fCBcCisJCQkJIF9tYWNoaW5lID09IFBMQVRGT1JNX1BTRVJJRVNfTFBBUikKKyNkZWZpbmUgcGxhdGZvcm1faXNfbHBhcigpCSghIShfbWFjaGluZSAmIFBMQVRGT1JNX0xQQVIpKQorCisjaWYgZGVmaW5lZChDT05GSUdfUFBDX01VTFRJUExBVEZPUk0pCiBleHRlcm4gaW50IF9tYWNoaW5lOwogCisjaWZkZWYgQ09ORklHX1BQQzMyCisKIC8qIHdoYXQga2luZCBvZiBwcmVwIHdvcmtzdGF0aW9uIHdlIGFyZSAqLwogZXh0ZXJuIGludCBfcHJlcF90eXBlOwogZXh0ZXJuIGludCBfY2hycF90eXBlOwogCiAvKgogICogVGhpcyBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBib2FyZCB0eXBlIGZyb20gYSBnaXZlbiBQUmVQIGJvYXJkCi0gKiB2ZW5kb3IuIEJvYXJkIHJldmlzaW9uIGlzIGFsc28gbWFkZSBhdmFpbGFibGUuCisgKiB2ZW5kb3IuIEJvYXJkIHJldmlzaW9uIGlzIGFsc28gbWFkZSBhdmFpbGFibGUuIFRoaXMgd2lsbCBiZSBtb3ZlZAorICogZWxzZXdoZXJlIHNvb24KICAqLwogZXh0ZXJuIHVuc2lnbmVkIGNoYXIgdWNTeXN0ZW1UeXBlOwogZXh0ZXJuIHVuc2lnbmVkIGNoYXIgdWNCb2FyZFJldjsKIGV4dGVybiB1bnNpZ25lZCBjaGFyIHVjQm9hcmRSZXZNYWosIHVjQm9hcmRSZXZNaW47CisKKyNlbmRpZiAvKiBDT05GSUdfUFBDMzIgKi8KKworI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDX0lTRVJJRVMpCisvKgorICogaVNlcmllcyBpcyBzb29uIHRvIGJlY29tZSBNVUxUSVBMQVRGT1JNIGhvcGVmdWxseSAuLi4KKyAqLworI2RlZmluZSBfbWFjaGluZSBQTEFURk9STV9JU0VSSUVTX0xQQVIKICNlbHNlCiAjZGVmaW5lIF9tYWNoaW5lIDAKICNlbmRpZiAvKiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0gKi8KLSNlbmRpZiAvKiBDT05GSUdfUFBDMzIgKi8KLQotI2lmZGVmIENPTkZJR19QUEM2NAotLyogUGxhdGZvcm1zIHN1cHBvcnRlZCBieSBQUEM2NCAqLwotI2RlZmluZSBQTEFURk9STV9QU0VSSUVTICAgICAgMHgwMTAwCi0jZGVmaW5lIFBMQVRGT1JNX1BTRVJJRVNfTFBBUiAweDAxMDEKLSNkZWZpbmUgUExBVEZPUk1fSVNFUklFU19MUEFSIDB4MDIwMQotI2RlZmluZSBQTEFURk9STV9MUEFSICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIFBMQVRGT1JNX1BPV0VSTUFDICAgICAweDA0MDAKLSNkZWZpbmUgUExBVEZPUk1fTUFQTEUgICAgICAgIDB4MDUwMAotI2RlZmluZSBQTEFURk9STV9DRUxMICAgICAgICAgMHgxMDAwCi0KLS8qIENvbXBhdGliaWxpdHkgd2l0aCBkcml2ZXJzIGNvbWluZyBmcm9tIFBQQzMyIHdvcmxkICovCi0jZGVmaW5lIF9tYWNoaW5lCShzeXN0ZW1jZmctPnBsYXRmb3JtKQotI2RlZmluZSBfTUFDSF9QbWFjCVBMQVRGT1JNX1BPV0VSTUFDCi0jZW5kaWYKIAogLyoKICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgbWFjcm8gdGhhdCByZXR1cm5zIGN1cnJlbnQKQEAgLTE3MSw4ICsxNzcsOCBAQAogI2lmZGVmIENPTkZJR19QUEM2NAogCXVuc2lnbmVkIGxvbmcJc3RhcnRfdGI7CS8qIFN0YXJ0IHB1cnIgd2hlbiBwcm9jIHN3aXRjaGVkIGluICovCiAJdW5zaWduZWQgbG9uZwlhY2N1bV90YjsJLyogVG90YWwgYWNjdW1pbGF0ZWQgcHVyciBmb3IgcHJvY2VzcyAqLwotCXVuc2lnbmVkIGxvbmcJdmRzb19iYXNlOwkvKiBiYXNlIG9mIHRoZSB2RFNPIGxpYnJhcnkgKi8KICNlbmRpZgorCXVuc2lnbmVkIGxvbmcJdmRzb19iYXNlOwkvKiBiYXNlIG9mIHRoZSB2RFNPIGxpYnJhcnkgKi8KIAl1bnNpZ25lZCBsb25nCWRhYnI7CQkvKiBEYXRhIGFkZHJlc3MgYnJlYWtwb2ludCByZWdpc3RlciAqLwogI2lmZGVmIENPTkZJR19BTFRJVkVDCiAJLyogQ29tcGxldGUgQWx0aVZlYyByZWdpc3RlciBzZXQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcmVnLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3JlZy5oCmluZGV4IDQ4OWNmNGMuLmViMzkyZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcmVnLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9yZWcuaApAQCAtMTYsNyArMTYsMTEgQEAKIC8qIFBpY2t1cCBCb29rIEUgc3BlY2lmaWMgcmVnaXN0ZXJzLiAqLwogI2lmIGRlZmluZWQoQ09ORklHX0JPT0tFKSB8fCBkZWZpbmVkKENPTkZJR180MHgpCiAjaW5jbHVkZSA8YXNtL3JlZ19ib29rZS5oPgotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX0JPT0tFIHx8IENPTkZJR180MHggKi8KKworI2lmZGVmIENPTkZJR184eHgKKyNpbmNsdWRlIDxhc20vcmVnXzh4eC5oPgorI2VuZGlmIC8qIENPTkZJR184eHggKi8KIAogI2RlZmluZSBNU1JfU0ZfTEcJNjMgICAgICAgICAgICAgIC8qIEVuYWJsZSA2NCBiaXQgbW9kZSAqLwogI2RlZmluZSBNU1JfSVNGX0xHCTYxICAgICAgICAgICAgICAvKiBJbnRlcnJ1cHQgNjRiIG1vZGUgdmFsaWQgb24gNjMwICovCkBAIC0zNTksNiArMzYzLDcgQEAKICNkZWZpbmUgU1BSTl9SUEEJMHgzRDYJLyogUmVxdWlyZWQgUGh5c2ljYWwgQWRkcmVzcyBSZWdpc3RlciAqLwogI2RlZmluZSBTUFJOX1NEQQkweDNCRgkvKiBTYW1wbGVkIERhdGEgQWRkcmVzcyBSZWdpc3RlciAqLwogI2RlZmluZSBTUFJOX1NEUjEJMHgwMTkJLyogTU1VIEhhc2ggQmFzZSBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0FTUgkweDExOCAgIC8qIEFkZHJlc3MgU3BhY2UgUmVnaXN0ZXIgKi8KICNkZWZpbmUgU1BSTl9TSUEJMHgzQkIJLyogU2FtcGxlZCBJbnN0cnVjdGlvbiBBZGRyZXNzIFJlZ2lzdGVyICovCiAjZGVmaW5lIFNQUk5fU1BSRzAJMHgxMTAJLyogU3BlY2lhbCBQdXJwb3NlIFJlZ2lzdGVyIEdlbmVyYWwgMCAqLwogI2RlZmluZSBTUFJOX1NQUkcxCTB4MTExCS8qIFNwZWNpYWwgUHVycG9zZSBSZWdpc3RlciBHZW5lcmFsIDEgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcmVnXzh4eC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9yZWdfOHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThlYTM0NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcmVnXzh4eC5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb250YWlucyByZWdpc3RlciBkZWZpbml0aW9ucyBjb21tb24gdG8gUG93ZXJQQyA4eHggQ1BVcy4gIE5vdGljZQorICovCisjaWZuZGVmIF9BU01fUE9XRVJQQ19SRUdfOHh4X0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX1JFR184eHhfSAorCisvKiBDYWNoZSBjb250cm9sIG9uIHRoZSBNUEM4eHggaXMgcHJvdmlkZWQgdGhyb3VnaCBzb21lIGFkZGl0aW9uYWwKKyAqIHNwZWNpYWwgcHVycG9zZSByZWdpc3RlcnMuCisgKi8KKyNkZWZpbmUgU1BSTl9JQ19DU1QJNTYwCS8qIEluc3RydWN0aW9uIGNhY2hlIGNvbnRyb2wvc3RhdHVzICovCisjZGVmaW5lIFNQUk5fSUNfQURSCTU2MQkvKiBBZGRyZXNzIG5lZWRlZCBmb3Igc29tZSBjb21tYW5kcyAqLworI2RlZmluZSBTUFJOX0lDX0RBVAk1NjIJLyogUmVhZC1vbmx5IGRhdGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9EQ19DU1QJNTY4CS8qIERhdGEgY2FjaGUgY29udHJvbC9zdGF0dXMgKi8KKyNkZWZpbmUgU1BSTl9EQ19BRFIJNTY5CS8qIEFkZHJlc3MgbmVlZGVkIGZvciBzb21lIGNvbW1hbmRzICovCisjZGVmaW5lIFNQUk5fRENfREFUCTU3MAkvKiBSZWFkLW9ubHkgZGF0YSByZWdpc3RlciAqLworCisvKiBDb21tYW5kcy4gIE9ubHkgdGhlIGZpcnN0IGZldyBhcmUgYXZhaWxhYmxlIHRvIHRoZSBpbnN0cnVjdGlvbiBjYWNoZS4KKyovCisjZGVmaW5lCUlEQ19FTkFCTEUJMHgwMjAwMDAwMAkvKiBDYWNoZSBlbmFibGUgKi8KKyNkZWZpbmUgSURDX0RJU0FCTEUJMHgwNDAwMDAwMAkvKiBDYWNoZSBkaXNhYmxlICovCisjZGVmaW5lIElEQ19MRExDSwkweDA2MDAwMDAwCS8qIExvYWQgYW5kIGxvY2sgKi8KKyNkZWZpbmUgSURDX1VOTElORQkweDA4MDAwMDAwCS8qIFVubG9jayBsaW5lICovCisjZGVmaW5lIElEQ19VTkFMTAkweDBhMDAwMDAwCS8qIFVubG9jayBhbGwgKi8KKyNkZWZpbmUgSURDX0lOVkFMTAkweDBjMDAwMDAwCS8qIEludmFsaWRhdGUgYWxsICovCisKKyNkZWZpbmUgRENfRkxJTkUJMHgwZTAwMDAwMAkvKiBGbHVzaCBkYXRhIGNhY2hlIGxpbmUgKi8KKyNkZWZpbmUgRENfU0ZXVAkJMHgwMTAwMDAwMAkvKiBTZXQgZm9yY2VkIHdyaXRldGhyb3VnaCBtb2RlICovCisjZGVmaW5lIERDX0NGV1QJCTB4MDMwMDAwMDAJLyogQ2xlYXIgZm9yY2VkIHdyaXRldGhyb3VnaCBtb2RlICovCisjZGVmaW5lIERDX1NMRVMJCTB4MDUwMDAwMDAJLyogU2V0IGxpdHRsZSBlbmRpYW4gc3dhcCBtb2RlICovCisjZGVmaW5lIERDX0NMRVMJCTB4MDcwMDAwMDAJLyogQ2xlYXIgbGl0dGxlIGVuZGlhbiBzd2FwIG1vZGUgKi8KKworLyogU3RhdHVzLgorKi8KKyNkZWZpbmUgSURDX0VOQUJMRUQJMHg4MDAwMDAwMAkvKiBDYWNoZSBpcyBlbmFibGVkICovCisjZGVmaW5lIElEQ19DRVJSMQkweDAwMjAwMDAwCS8qIENhY2hlIGVycm9yIDEgKi8KKyNkZWZpbmUgSURDX0NFUlIyCTB4MDAxMDAwMDAJLyogQ2FjaGUgZXJyb3IgMiAqLworI2RlZmluZSBJRENfQ0VSUjMJMHgwMDA4MDAwMAkvKiBDYWNoZSBlcnJvciAzICovCisKKyNkZWZpbmUgRENfREZXVAkJMHg0MDAwMDAwMAkvKiBEYXRhIGNhY2hlIGlzIGZvcmNlZCB3cml0ZSB0aHJvdWdoICovCisjZGVmaW5lIERDX0xFUwkJMHgyMDAwMDAwMAkvKiBDYWNoZXMgYXJlIGxpdHRsZSBlbmRpYW4gbW9kZSAqLworCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1JFR184eHhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zaWduYWwuaApzaW1pbGFyaXR5IGluZGV4IDgyJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wcGMvc2lnbmFsLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLXBvd2VycGMvc2lnbmFsLmgKaW5kZXggY2FmNmVkZS4uNjk0YzhkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc2lnbmFsLmgKQEAgLTEsMTggKzEsMTEgQEAKLSNpZm5kZWYgX0FTTVBQQ19TSUdOQUxfSAotI2RlZmluZSBfQVNNUFBDX1NJR05BTF9ICisjaWZuZGVmIF9BU01fUE9XRVJQQ19TSUdOQUxfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfU0lHTkFMX0gKIAotI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotLyogQXZvaWQgdG9vIG1hbnkgaGVhZGVyIG9yZGVyaW5nIHByb2JsZW1zLiAgKi8KLXN0cnVjdCBzaWdpbmZvOwotCi0vKiBNb3N0IHRoaW5ncyBzaG91bGQgYmUgY2xlYW4gZW5vdWdoIHRvIHJlZGVmaW5lIHRoaXMgYXQgd2lsbCwgaWYgY2FyZQotICAgaXMgdGFrZW4gdG8gbWFrZSBsaWJjIG1hdGNoLiAgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBfTlNJRwkJNjQKLSNkZWZpbmUgX05TSUdfQlBXCTMyCisjZGVmaW5lIF9OU0lHX0JQVwlCSVRTX1BFUl9MT05HCiAjZGVmaW5lIF9OU0lHX1dPUkRTCShfTlNJRyAvIF9OU0lHX0JQVykKIAogdHlwZWRlZiB1bnNpZ25lZCBsb25nIG9sZF9zaWdzZXRfdDsJCS8qIGF0IGxlYXN0IDMyIGJpdHMgKi8KQEAgLTc3LDE5ICs3MCwxOSBAQAogICogU0FfT05FU0hPVCBhbmQgU0FfTk9NQVNLIGFyZSB0aGUgaGlzdG9yaWNhbCBMaW51eCBuYW1lcyBmb3IgdGhlIFNpbmdsZQogICogVW5peCBuYW1lcyBSRVNFVEhBTkQgYW5kIE5PREVGRVIgcmVzcGVjdGl2ZWx5LgogICovCi0jZGVmaW5lIFNBX05PQ0xEU1RPUAkweDAwMDAwMDAxCi0jZGVmaW5lIFNBX05PQ0xEV0FJVAkweDAwMDAwMDAyCi0jZGVmaW5lIFNBX1NJR0lORk8JMHgwMDAwMDAwNAotI2RlZmluZSBTQV9PTlNUQUNLCTB4MDgwMDAwMDAKLSNkZWZpbmUgU0FfUkVTVEFSVAkweDEwMDAwMDAwCi0jZGVmaW5lIFNBX05PREVGRVIJMHg0MDAwMDAwMAotI2RlZmluZSBTQV9SRVNFVEhBTkQJMHg4MDAwMDAwMAorI2RlZmluZSBTQV9OT0NMRFNUT1AJMHgwMDAwMDAwMVUKKyNkZWZpbmUgU0FfTk9DTERXQUlUCTB4MDAwMDAwMDJVCisjZGVmaW5lIFNBX1NJR0lORk8JMHgwMDAwMDAwNFUKKyNkZWZpbmUgU0FfT05TVEFDSwkweDA4MDAwMDAwVQorI2RlZmluZSBTQV9SRVNUQVJUCTB4MTAwMDAwMDBVCisjZGVmaW5lIFNBX05PREVGRVIJMHg0MDAwMDAwMFUKKyNkZWZpbmUgU0FfUkVTRVRIQU5ECTB4ODAwMDAwMDBVCiAKICNkZWZpbmUgU0FfTk9NQVNLCVNBX05PREVGRVIKICNkZWZpbmUgU0FfT05FU0hPVAlTQV9SRVNFVEhBTkQKLSNkZWZpbmUgU0FfSU5URVJSVVBUCTB4MjAwMDAwMDAgLyogZHVtbXkgLS0gaWdub3JlZCAqLworI2RlZmluZSBTQV9JTlRFUlJVUFQJMHgyMDAwMDAwMHUgLyogZHVtbXkgLS0gaWdub3JlZCAqLwogCi0jZGVmaW5lIFNBX1JFU1RPUkVSCTB4MDQwMDAwMDAKKyNkZWZpbmUgU0FfUkVTVE9SRVIJMHgwNDAwMDAwMFUKIAogLyoKICAqIHNpZ2FsdHN0YWNrIGNvbnRyb2xzCkBAIC0xMjcsMTAgKzEyMCwxMyBAQAogfSBzdGFja190OwogCiAjaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CitzdHJ1Y3QgcHRfcmVnczsKK2V4dGVybiBpbnQgZG9fc2lnbmFsKHNpZ3NldF90ICpvbGRzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiBpbnQgZG9fc2lnbmFsMzIoc2lnc2V0X3QgKm9sZHNldCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogI2RlZmluZSBwdHJhY2Vfc2lnbmFsX2RlbGl2ZXIocmVncywgY29va2llKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCisjaWZuZGVmIF9fcG93ZXJwYzY0X18KIC8qCiAgKiBUaGVzZSBhcmUgcGFyYW1ldGVycyB0byBkYmdfc2lncmV0dXJuIHN5c2NhbGwuICBUaGV5IGVuYWJsZSBvcgogICogZGlzYWJsZSBjZXJ0YWluIGRlYnVnZ2luZyB0aGluZ3MgdGhhdCBjYW4gYmUgZG9uZSBmcm9tIHNpZ25hbApAQCAtMTQ5LDUgKzE0NSw2IEBACiAKIC8qIEVuYWJsZSBvciBkaXNhYmxlIGJyYW5jaCB0cmFjaW5nLiAgVGhlIHZhbHVlIHNldHMgdGhlIHN0YXRlLiAqLwogI2RlZmluZSBTSUdfREJHX0JSQU5DSF9UUkFDSU5HCQkyCisjZW5kaWYgLyogISBfX3Bvd2VycGM2NF9fICovCiAKLSNlbmRpZgorI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19TSUdOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zcGFyc2VtZW0uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc3BhcnNlbWVtLmgKaW5kZXggMWM5NWFiOS4uYmExYjM0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zcGFyc2VtZW0uaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NwYXJzZW1lbS5oCkBAIC04LDggKzgsMTIgQEAKICAqIE1BWF9QSFlTTUVNX0JJVFMJCTJeTjogaG93IG11Y2ggbWVtb3J5IHdlIGNhbiBoYXZlIGluIHRoYXQgc3BhY2UKICAqLwogI2RlZmluZSBTRUNUSU9OX1NJWkVfQklUUyAgICAgICAyNAotI2RlZmluZSBNQVhfUEhZU0FERFJfQklUUyAgICAgICAzOAotI2RlZmluZSBNQVhfUEhZU01FTV9CSVRTICAgICAgICAzNgorI2RlZmluZSBNQVhfUEhZU0FERFJfQklUUyAgICAgICA0NAorI2RlZmluZSBNQVhfUEhZU01FTV9CSVRTICAgICAgICA0NAorCisjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCitleHRlcm4gdm9pZCBjcmVhdGVfc2VjdGlvbl9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKKyNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KIAogI2VuZGlmIC8qIENPTkZJR19TUEFSU0VNRU0gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc3lzdGVtLmgKaW5kZXggMzUzNmE1Yy4uNTM0MWI3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3N5c3RlbS5oCkBAIC04LDcgKzgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCiAjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgotI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiAvKgpAQCAtMTgwLDYgKzE3OSw3IEBACiBleHRlcm4gdW5zaWduZWQgaW50IHJ0YXNfZGF0YTsKIGV4dGVybiBpbnQgbWVtX2luaXRfZG9uZTsJLyogc2V0IG9uIGJvb3Qgb25jZSBrbWFsbG9jIGNhbiBiZSBjYWxsZWQgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIG1lbW9yeV9saW1pdDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGtsaW1pdDsKIAogZXh0ZXJuIGludCBwb3dlcnNhdmVfbmFwOwkvKiBzZXQgaWYgbmFwIG1vZGUgY2FuIGJlIHVzZWQgaW4gaWRsZSBsb29wICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3RjZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90Y2UuaApzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wcGM2NC90Y2UuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tcG93ZXJwYy90Y2UuaAppbmRleCBkNDBiNmI0Li5kMDk5ZDUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC90Y2UuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RjZS5oCkBAIC0xOCw4ICsxOCw4IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKICAqLwogCi0jaWZuZGVmIF9BU01fVENFX0gKLSNkZWZpbmUgX0FTTV9UQ0VfSAorI2lmbmRlZiBfQVNNX1BPV0VSUENfVENFX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX1RDRV9ICiAKIC8qCiAgKiBUY2VzIGNvbWUgaW4gdHdvIGZvcm1hdHMsIG9uZSBmb3IgdGhlIHZpcnR1YWwgYnVzIGFuZCBhIGRpZmZlcmVudApAQCAtNjEsNCArNjEsNCBAQAogfTsKIAogCi0jZW5kaWYKKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfVENFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdG9wb2xvZ3kuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdG9wb2xvZ3kuaAppbmRleCAyNTEyZTM4Li4wMTVkMjg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RvcG9sb2d5LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90b3BvbG9neS5oCkBAIC05LDE1ICs5LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgY3B1X3RvX25vZGUoaW50IGNwdSkKIHsKLQlpbnQgbm9kZTsKLQotCW5vZGUgPSBudW1hX2NwdV9sb29rdXBfdGFibGVbY3B1XTsKLQotI2lmZGVmIERFQlVHX05VTUEKLQlCVUdfT04obm9kZSA9PSAtMSk7Ci0jZW5kaWYKLQotCXJldHVybiBub2RlOworCXJldHVybiBudW1hX2NwdV9sb29rdXBfdGFibGVbY3B1XTsKIH0KIAogI2RlZmluZSBwYXJlbnRfbm9kZShub2RlKQkobm9kZSkKQEAgLTM3LDggKzI5LDYgQEAKICNkZWZpbmUgcGNpYnVzX3RvX25vZGUobm9kZSkgICAgKC0xKQogI2RlZmluZSBwY2lidXNfdG9fY3B1bWFzayhidXMpCShjcHVfb25saW5lX21hcCkKIAotI2RlZmluZSBucl9jcHVzX25vZGUobm9kZSkJKG5yX2NwdXNfaW5fbm9kZVtub2RlXSkKLQogLyogc2NoZWRfZG9tYWlucyBTRF9OT0RFX0lOSVQgZm9yIFBQQzY0IG1hY2hpbmVzICovCiAjZGVmaW5lIFNEX05PREVfSU5JVCAoc3RydWN0IHNjaGVkX2RvbWFpbikgewkJXAogCS5zcGFuCQkJPSBDUFVfTUFTS19OT05FLAlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdWFjY2Vzcy5oCmluZGV4IDMzYWY3MzAuLjM4NzJlOTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdWFjY2Vzcy5oCkBAIC0xMjAsMTQgKzEyMCw2IEBACiAKIGV4dGVybiBsb25nIF9fcHV0X3VzZXJfYmFkKHZvaWQpOwogCi0jaWZkZWYgX19wb3dlcnBjNjRfXwotI2RlZmluZSBfX0VYX1RBQkxFX0FMSUdOCSIzIgotI2RlZmluZSBfX0VYX1RBQkxFX1RZUEUJCSJsbG9uZyIKLSNlbHNlCi0jZGVmaW5lIF9fRVhfVEFCTEVfQUxJR04JIjIiCi0jZGVmaW5lIF9fRVhfVEFCTEVfVFlQRQkJImxvbmciCi0jZW5kaWYKLQogLyoKICAqIFdlIGRvbid0IHRlbGwgZ2NjIHRoYXQgd2UgYXJlIGFjY2Vzc2luZyBtZW1vcnksIGJ1dCB0aGlzIGlzIE9LCiAgKiBiZWNhdXNlIHdlIGRvIG5vdCB3cml0ZSB0byBhbnkgbWVtb3J5IGdjYyBrbm93cyBhYm91dCwgc28gdGhlcmUKQEAgLTE0MiwxMSArMTM0LDEyIEBACiAJCSIJYiAyYlxuIgkJCQkJXAogCQkiLnByZXZpb3VzXG4iCQkJCQlcCiAJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQkJXAotCQkiCS5hbGlnbiAiIF9fRVhfVEFCTEVfQUxJR04gIlxuIgkJXAotCQkiCS4iX19FWF9UQUJMRV9UWVBFIiAxYiwzYlxuIgkJXAorCQkiCS5iYWxpZ24gJTVcbiIJCQkJXAorCQkJUFBDX0xPTkcgIjFiLDNiXG4iCQkJXAogCQkiLnByZXZpb3VzIgkJCQkJXAogCQk6ICI9ciIgKGVycikJCQkJCVwKLQkJOiAiciIgKHgpLCAiYiIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVycikpCisJCTogInIiICh4KSwgImIiIChhZGRyKSwgImkiICgtRUZBVUxUKSwgIjAiIChlcnIpLFwKKwkJICAiaSIoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkKIAogI2lmZGVmIF9fcG93ZXJwYzY0X18KICNkZWZpbmUgX19wdXRfdXNlcl9hc20yKHgsIHB0ciwgcmV0dmFsKQkJCQlcCkBAIC0xNjIsMTIgKzE1NSwxMyBAQAogCQkiCWIgM2JcbiIJCQkJCVwKIAkJIi5wcmV2aW91c1xuIgkJCQkJXAogCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCVwKLQkJIgkuYWxpZ24gIiBfX0VYX1RBQkxFX0FMSUdOICJcbiIJCVwKLQkJIgkuIiBfX0VYX1RBQkxFX1RZUEUgIiAxYiw0YlxuIgkJXAotCQkiCS4iIF9fRVhfVEFCTEVfVFlQRSAiIDJiLDRiXG4iCQlcCisJCSIJLmJhbGlnbiAlNVxuIgkJCQlcCisJCQlQUENfTE9ORyAiMWIsNGJcbiIJCQlcCisJCQlQUENfTE9ORyAiMmIsNGJcbiIJCQlcCiAJCSIucHJldmlvdXMiCQkJCQlcCiAJCTogIj1yIiAoZXJyKQkJCQkJXAotCQk6ICJyIiAoeCksICJiIiAoYWRkciksICJpIiAoLUVGQVVMVCksICIwIiAoZXJyKSkKKwkJOiAiciIgKHgpLCAiYiIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVyciksXAorCQkgICJpIihzaXplb2YodW5zaWduZWQgbG9uZykpKQogI2VuZGlmIC8qIF9fcG93ZXJwYzY0X18gKi8KIAogI2RlZmluZSBfX3B1dF91c2VyX3NpemUoeCwgcHRyLCBzaXplLCByZXR2YWwpCQkJXApAQCAtMjEzLDExICsyMDcsMTIgQEAKIAkJIgliIDJiXG4iCQkJCVwKIAkJIi5wcmV2aW91c1xuIgkJCQlcCiAJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQlcCi0JCSIJLmFsaWduICJfX0VYX1RBQkxFX0FMSUdOICJcbiIJXAotCQkiCS4iIF9fRVhfVEFCTEVfVFlQRSAiIDFiLDNiXG4iCVwKKwkJIgkuYmFsaWduICU1XG4iCQkJXAorCQkJUFBDX0xPTkcgIjFiLDNiXG4iCQlcCiAJCSIucHJldmlvdXMiCQkJCVwKIAkJOiAiPXIiIChlcnIpLCAiPXIiICh4KQkJCVwKLQkJOiAiYiIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVycikpCisJCTogImIiIChhZGRyKSwgImkiICgtRUZBVUxUKSwgIjAiIChlcnIpLAlcCisJCSAgImkiKHNpemVvZih1bnNpZ25lZCBsb25nKSkpCiAKICNpZmRlZiBfX3Bvd2VycGM2NF9fCiAjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtMih4LCBhZGRyLCBlcnIpCQkJXApAQCAtMjM1LDEyICsyMzAsMTMgQEAKIAkJIgliIDNiXG4iCQkJCVwKIAkJIi5wcmV2aW91c1xuIgkJCQlcCiAJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQlcCi0JCSIJLmFsaWduICIgX19FWF9UQUJMRV9BTElHTiAiXG4iCVwKLQkJIgkuIiBfX0VYX1RBQkxFX1RZUEUgIiAxYiw0YlxuIglcCi0JCSIJLiIgX19FWF9UQUJMRV9UWVBFICIgMmIsNGJcbiIJXAorCQkiCS5iYWxpZ24gJTVcbiIJCQlcCisJCQlQUENfTE9ORyAiMWIsNGJcbiIJCVwKKwkJCVBQQ19MT05HICIyYiw0YlxuIgkJXAogCQkiLnByZXZpb3VzIgkJCQlcCiAJCTogIj1yIiAoZXJyKSwgIj0mciIgKHgpCQkJXAotCQk6ICJiIiAoYWRkciksICJpIiAoLUVGQVVMVCksICIwIiAoZXJyKSkKKwkJOiAiYiIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVyciksCVwKKwkJICAiaSIoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkKICNlbmRpZiAvKiBfX3Bvd2VycGM2NF9fICovCiAKICNkZWZpbmUgX19nZXRfdXNlcl9zaXplKHgsIHB0ciwgc2l6ZSwgcmV0dmFsKQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3VkYmcuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdWRiZy5oCnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBwYzY0L3VkYmcuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tcG93ZXJwYy91ZGJnLmgKaW5kZXggZTNiOTI3OS4uYTM4MzM4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvdWRiZy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdWRiZy5oCkBAIC0xLDkgKzEsMyBAQAotI2lmbmRlZiBfX1VEQkdfSERSCi0jZGVmaW5lIF9fVURCR19IRFIKLQotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCiAvKgogICogYyAyMDAxIFBQQyA2NCBUZWFtLCBJQk0gQ29ycAogICoKQEAgLTEzLDYgKzcsMTIgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAorI2lmbmRlZiBfQVNNX1BPV0VSUENfVURCR19ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19VREJHX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCiBleHRlcm4gdm9pZCAoKnVkYmdfcHV0YykodW5zaWduZWQgY2hhciBjKTsKIGV4dGVybiB1bnNpZ25lZCBjaGFyICgqdWRiZ19nZXRjKSh2b2lkKTsKIGV4dGVybiBpbnQgKCp1ZGJnX2dldGNfcG9sbCkodm9pZCk7CkBAIC0yOCw0ICsyOCw0IEBACiAKIHN0cnVjdCBkZXZpY2Vfbm9kZTsKIGV4dGVybiB2b2lkIHVkYmdfaW5pdF9zY2Moc3RydWN0IGRldmljZV9ub2RlICpucCk7Ci0jZW5kaWYKKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfVURCR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC92ZHNvLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3Zkc28uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcHBjNjQvdmRzby5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1wb3dlcnBjL3Zkc28uaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy92ZHNvX2RhdGFwYWdlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3Zkc29fZGF0YXBhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzMyM2I1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy92ZHNvX2RhdGFwYWdlLmgKQEAgLTAsMCArMSwxMDggQEAKKyNpZm5kZWYgX1ZEU09fREFUQVBBR0VfSAorI2RlZmluZSBfVkRTT19EQVRBUEFHRV9ICisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUGV0ZXIgQmVyZ25lciA8YmVyZ25lckB2bmV0LmlibS5jb20+LCBJQk0KKyAqIENvcHlyaWdodCAoQykgMjAwNSBCZW5qYW1pbiBIZXJyZW5zY2htaWR5IDxiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc+LAorICogCQkgICAgICBJQk0gQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKworLyoKKyAqIE5vdGUgYWJvdXQgdGhpcyBzdHJ1Y3R1cmU6CisgKgorICogVGhpcyBzdHJ1Y3R1cmUgd2FzIGhpc3RvcmljYWxseSBjYWxsZWQgc3lzdGVtY2ZnIGFuZCBleHBvc2VkIHRvCisgKiB1c2VybGFuZCB2aWEgL3Byb2MvcHBjNjQvc3lzdGVtY2ZnLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGJlY2FtZSBhbgorICogQUJJIGlzc3VlIGFzIHNvbWUgcHJvcHJpZXRhcnkgc29mdHdhcmUgc3RhcnRlZCByZWx5aW5nIG9uIGJlaW5nIGFibGUKKyAqIHRvIG1tYXAoKSBpdCwgdGh1cyB3ZSBoYXZlIHRvIGtlZXAgdGhlIGJhc2UgbGF5b3V0IGF0IGxlYXN0IGZvciBhCisgKiBmZXcga2VybmVsIHZlcnNpb25zLgorICoKKyAqIEhvd2V2ZXIsIHNpbmNlIHBwYzMyIGRvZXNuJ3Qgc3VmZmVyIGZyb20gdGhpcyBiYWNrd2FyZCBoYW5kaWNhcCwKKyAqIGEgc2ltcGxlciB2ZXJzaW9uIG9mIHRoZSBkYXRhIHN0cnVjdHVyZSBpcyB1c2VkIHRoZXJlIHdpdGggb25seSB0aGUKKyAqIGZpZWxkcyBhY3R1YWxseSB1c2VkIGJ5IHRoZSB2RFNPLgorICoKKyAqLworCisvKgorICogSWYgdGhlIG1ham9yIHZlcnNpb24gY2hhbmdlcyB3ZSBhcmUgaW5jb21wYXRpYmxlLgorICogTWlub3IgdmVyc2lvbiBjaGFuZ2VzIGFyZSBhIGhpbnQuCisgKi8KKyNkZWZpbmUgU1lTVEVNQ0ZHX01BSk9SIDEKKyNkZWZpbmUgU1lTVEVNQ0ZHX01JTk9SIDEKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorCisjZGVmaW5lIFNZU0NBTExfTUFQX1NJWkUgICAgICAoKF9fTlJfc3lzY2FsbHMgKyAzMSkgLyAzMikKKworLyoKKyAqIFNvIGhlcmUgaXMgdGhlIHBwYzY0IGJhY2t3YXJkIGNvbXBhdGlibGUgdmVyc2lvbgorICovCisKKyNpZmRlZiBDT05GSUdfUFBDNjQKKworc3RydWN0IHZkc29fZGF0YSB7CisJX191OCAgZXllX2NhdGNoZXJbMTZdOwkJLyogRXllY2F0Y2hlcjogU1lTVEVNQ0ZHOlBQQzY0CTB4MDAgKi8KKwlzdHJ1Y3QgewkJCS8qIFN5c3RlbWNmZyB2ZXJzaW9uIG51bWJlcnMJICAgICAqLworCQlfX3UzMiBtYWpvcjsJCS8qIE1ham9yIG51bWJlcgkJCTB4MTAgKi8KKwkJX191MzIgbWlub3I7CQkvKiBNaW5vciBudW1iZXIJCQkweDE0ICovCisJfSB2ZXJzaW9uOworCisJX191MzIgcGxhdGZvcm07CQkJLyogUGxhdGZvcm0gZmxhZ3MJCTB4MTggKi8KKwlfX3UzMiBwcm9jZXNzb3I7CQkvKiBQcm9jZXNzb3IgdHlwZQkJMHgxQyAqLworCV9fdTY0IHByb2Nlc3NvckNvdW50OwkJLyogIyBvZiBwaHlzaWNhbCBwcm9jZXNzb3JzCTB4MjAgKi8KKwlfX3U2NCBwaHlzaWNhbE1lbW9yeVNpemU7CS8qIFNpemUgb2YgcmVhbCBtZW1vcnkoQikJMHgyOCAqLworCV9fdTY0IHRiX29yaWdfc3RhbXA7CQkvKiBUaW1lYmFzZSBhdCBib290CQkweDMwICovCisJX191NjQgdGJfdGlja3NfcGVyX3NlYzsJCS8qIFRpbWViYXNlIHRpY3MgLyBzZWMJCTB4MzggKi8KKwlfX3U2NCB0Yl90b194czsJCQkvKiBJbnZlcnNlIG9mIFRCIHRvIDJeMjAJMHg0MCAqLworCV9fdTY0IHN0YW1wX3hzZWM7CQkvKgkJCQkweDQ4ICovCisJX191NjQgdGJfdXBkYXRlX2NvdW50OwkJLyogVGltZWJhc2UgYXRvbWljaXR5IGN0cgkweDUwICovCisJX191MzIgdHpfbWludXRlc3dlc3Q7CQkvKiBNaW51dGVzIHdlc3Qgb2YgR3JlZW53aWNoCTB4NTggKi8KKwlfX3UzMiB0el9kc3R0aW1lOwkJLyogVHlwZSBvZiBkc3QgY29ycmVjdGlvbgkweDVDICovCisJX191MzIgZGNhY2hlX3NpemU7CQkvKiBMMSBkLWNhY2hlIHNpemUJCTB4NjAgKi8KKwlfX3UzMiBkY2FjaGVfbGluZV9zaXplOwkJLyogTDEgZC1jYWNoZSBsaW5lIHNpemUJCTB4NjQgKi8KKwlfX3UzMiBpY2FjaGVfc2l6ZTsJCS8qIEwxIGktY2FjaGUgc2l6ZQkJMHg2OCAqLworCV9fdTMyIGljYWNoZV9saW5lX3NpemU7CQkvKiBMMSBpLWNhY2hlIGxpbmUgc2l6ZQkJMHg2QyAqLworCisJLyogdGhvc2UgYWRkaXRpb25hbCBvbmVzIGRvbid0IGhhdmUgdG8gYmUgbG9jYXRlZCBhbnl3aGVyZQorCSAqIHNwZWNpYWwgYXMgdGhleSB3ZXJlIG5vdCBwYXJ0IG9mIHRoZSBvcmlnaW5hbCBzeXN0ZW1jZmcKKwkgKi8KKwlfX3M2NCB3dG9tX2Nsb2NrX3NlYzsJCQkvKiBXYWxsIHRvIG1vbm90b25pYyBjbG9jayAqLworCV9fczMyIHd0b21fY2xvY2tfbnNlYzsKKyAgIAlfX3UzMiBzeXNjYWxsX21hcF82NFtTWVNDQUxMX01BUF9TSVpFXTsgLyogbWFwIG9mIHN5c2NhbGxzICAqLworICAgCV9fdTMyIHN5c2NhbGxfbWFwXzMyW1NZU0NBTExfTUFQX1NJWkVdOyAvKiBtYXAgb2Ygc3lzY2FsbHMgKi8KK307CisKKyNlbHNlIC8qIENPTkZJR19QUEM2NCAqLworCisvKgorICogQW5kIGhlcmUgaXMgdGhlIHNpbXBsZXIgMzIgYml0cyB2ZXJzaW9uCisgKi8KK3N0cnVjdCB2ZHNvX2RhdGEgeworCV9fdTY0IHRiX29yaWdfc3RhbXA7CQkvKiBUaW1lYmFzZSBhdCBib290CQkweDMwICovCisJX191NjQgdGJfdGlja3NfcGVyX3NlYzsJCS8qIFRpbWViYXNlIHRpY3MgLyBzZWMJCTB4MzggKi8KKwlfX3U2NCB0Yl90b194czsJCQkvKiBJbnZlcnNlIG9mIFRCIHRvIDJeMjAJMHg0MCAqLworCV9fdTY0IHN0YW1wX3hzZWM7CQkvKgkJCQkweDQ4ICovCisJX191MzIgdGJfdXBkYXRlX2NvdW50OwkJLyogVGltZWJhc2UgYXRvbWljaXR5IGN0cgkweDUwICovCisJX191MzIgdHpfbWludXRlc3dlc3Q7CQkvKiBNaW51dGVzIHdlc3Qgb2YgR3JlZW53aWNoCTB4NTggKi8KKwlfX3UzMiB0el9kc3R0aW1lOwkJLyogVHlwZSBvZiBkc3QgY29ycmVjdGlvbgkweDVDICovCisJX19zMzIgd3RvbV9jbG9ja19zZWM7CQkJLyogV2FsbCB0byBtb25vdG9uaWMgY2xvY2sgKi8KKwlfX3MzMiB3dG9tX2Nsb2NrX25zZWM7CisgICAJX191MzIgc3lzY2FsbF9tYXBfMzJbU1lTQ0FMTF9NQVBfU0laRV07IC8qIG1hcCBvZiBzeXNjYWxscyAqLworfTsKKworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLworCisjaWZkZWYgX19LRVJORUxfXworZXh0ZXJuIHN0cnVjdCB2ZHNvX2RhdGEgKnZkc29fZGF0YTsKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfU1lTVEVNQ0ZHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMveG1vbi5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy94bW9uLmgKaW5kZXggYWNlMjA3Mi4uNDNmNzEyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy94bW9uLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy94bW9uLmgKQEAgLTcsNyArNyw2IEBACiBleHRlcm4gaW50IHhtb24oc3RydWN0IHB0X3JlZ3MgKmV4Y3ApOwogZXh0ZXJuIHZvaWQgeG1vbl9wcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pOwogZXh0ZXJuIHZvaWQgeG1vbl9pbml0KGludCk7Ci1leHRlcm4gdm9pZCB4bW9uX21hcF9zY2Modm9pZCk7CiAKICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLXBwYy9jYWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTE1N2QwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBwYy9jYWNoZS5oCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUvYXNtLXBwYy9jYWNoZS5oCi0gKi8KLSNpZmRlZiBfX0tFUk5FTF9fCi0jaWZuZGVmIF9fQVJDSF9QUENfQ0FDSEVfSAotI2RlZmluZSBfX0FSQ0hfUFBDX0NBQ0hFX0gKLQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotCi0vKiBieXRlcyBwZXIgTDEgY2FjaGUgbGluZSAqLwotI2lmIGRlZmluZWQoQ09ORklHXzh4eCkgfHwgZGVmaW5lZChDT05GSUdfNDAzR0NYKQotI2RlZmluZSBMMV9DQUNIRV9TSElGVAk0Ci0jZGVmaW5lIE1BWF9DT1BZX1BSRUZFVENICTEKLSNlbGlmIGRlZmluZWQoQ09ORklHX1BQQzY0QlJJREdFKQotI2RlZmluZSBMMV9DQUNIRV9TSElGVAk3Ci0jZGVmaW5lIE1BWF9DT1BZX1BSRUZFVENICTEKLSNlbHNlCi0jZGVmaW5lIEwxX0NBQ0hFX1NISUZUCTUKLSNkZWZpbmUgTUFYX0NPUFlfUFJFRkVUQ0gJNAotI2VuZGlmCi0KLSNkZWZpbmUJTDFfQ0FDSEVfQllURVMJKDEgPDwgTDFfQ0FDSEVfU0hJRlQpCi0KLSNkZWZpbmUJU01QX0NBQ0hFX0JZVEVTIEwxX0NBQ0hFX0JZVEVTCi0jZGVmaW5lIEwxX0NBQ0hFX1NISUZUX01BWCA3CS8qIGxhcmdlc3QgTDEgd2hpY2ggdGhpcyBhcmNoIHN1cHBvcnRzICovCi0KLSNkZWZpbmUJTDFfQ0FDSEVfQUxJR04oeCkgICAgICAgKCgoeCkrKEwxX0NBQ0hFX0JZVEVTLTEpKSZ+KEwxX0NBQ0hFX0JZVEVTLTEpKQotI2RlZmluZQlMMV9DQUNIRV9QQUdFUwkJOAotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIHZvaWQgY2xlYW5fZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCk7Ci1leHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzdG9wKTsKLWV4dGVybiB2b2lkIGludmFsaWRhdGVfZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCk7Ci1leHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfYWxsKHZvaWQpOwotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0vKiBwcmVwIHJlZ2lzdGVycyBmb3IgTDIgKi8KLSNkZWZpbmUgQ0FDSEVDUkJBICAgICAgIDB4ODAwMDA4MjMgICAgICAvKiBDYWNoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGFkZHJlc3MgKi8KLSNkZWZpbmUgTDJDQUNIRV9NQVNLCTB4MDMJLyogTWFzayBmb3IgMiBMMiBDYWNoZSBiaXRzICovCi0jZGVmaW5lIEwyQ0FDSEVfNTEyS0IJMHgwMAkvKiA1MTJLQiAqLwotI2RlZmluZSBMMkNBQ0hFXzI1NktCCTB4MDEJLyogMjU2S0IgKi8KLSNkZWZpbmUgTDJDQUNIRV8xTUIJMHgwMgkvKiAxTUIgKi8KLSNkZWZpbmUgTDJDQUNIRV9OT05FCTB4MDMJLyogTk9ORSAqLwotI2RlZmluZSBMMkNBQ0hFX1BBUklUWSAgMHgwOCAgICAvKiBNYXNrIGZvciBMMiBDYWNoZSBQYXJpdHkgUHJvdGVjdGVkIGJpdCAqLwotCi0jaWZkZWYgQ09ORklHXzh4eAotLyogQ2FjaGUgY29udHJvbCBvbiB0aGUgTVBDOHh4IGlzIHByb3ZpZGVkIHRocm91Z2ggc29tZSBhZGRpdGlvbmFsCi0gKiBzcGVjaWFsIHB1cnBvc2UgcmVnaXN0ZXJzLgotICovCi0jZGVmaW5lIFNQUk5fSUNfQ1NUCTU2MAkvKiBJbnN0cnVjdGlvbiBjYWNoZSBjb250cm9sL3N0YXR1cyAqLwotI2RlZmluZSBTUFJOX0lDX0FEUgk1NjEJLyogQWRkcmVzcyBuZWVkZWQgZm9yIHNvbWUgY29tbWFuZHMgKi8KLSNkZWZpbmUgU1BSTl9JQ19EQVQJNTYyCS8qIFJlYWQtb25seSBkYXRhIHJlZ2lzdGVyICovCi0jZGVmaW5lIFNQUk5fRENfQ1NUCTU2OAkvKiBEYXRhIGNhY2hlIGNvbnRyb2wvc3RhdHVzICovCi0jZGVmaW5lIFNQUk5fRENfQURSCTU2OQkvKiBBZGRyZXNzIG5lZWRlZCBmb3Igc29tZSBjb21tYW5kcyAqLwotI2RlZmluZSBTUFJOX0RDX0RBVAk1NzAJLyogUmVhZC1vbmx5IGRhdGEgcmVnaXN0ZXIgKi8KLQotLyogQ29tbWFuZHMuICBPbmx5IHRoZSBmaXJzdCBmZXcgYXJlIGF2YWlsYWJsZSB0byB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUuCi0qLwotI2RlZmluZQlJRENfRU5BQkxFCTB4MDIwMDAwMDAJLyogQ2FjaGUgZW5hYmxlICovCi0jZGVmaW5lIElEQ19ESVNBQkxFCTB4MDQwMDAwMDAJLyogQ2FjaGUgZGlzYWJsZSAqLwotI2RlZmluZSBJRENfTERMQ0sJMHgwNjAwMDAwMAkvKiBMb2FkIGFuZCBsb2NrICovCi0jZGVmaW5lIElEQ19VTkxJTkUJMHgwODAwMDAwMAkvKiBVbmxvY2sgbGluZSAqLwotI2RlZmluZSBJRENfVU5BTEwJMHgwYTAwMDAwMAkvKiBVbmxvY2sgYWxsICovCi0jZGVmaW5lIElEQ19JTlZBTEwJMHgwYzAwMDAwMAkvKiBJbnZhbGlkYXRlIGFsbCAqLwotCi0jZGVmaW5lIERDX0ZMSU5FCTB4MGUwMDAwMDAJLyogRmx1c2ggZGF0YSBjYWNoZSBsaW5lICovCi0jZGVmaW5lIERDX1NGV1QJCTB4MDEwMDAwMDAJLyogU2V0IGZvcmNlZCB3cml0ZXRocm91Z2ggbW9kZSAqLwotI2RlZmluZSBEQ19DRldUCQkweDAzMDAwMDAwCS8qIENsZWFyIGZvcmNlZCB3cml0ZXRocm91Z2ggbW9kZSAqLwotI2RlZmluZSBEQ19TTEVTCQkweDA1MDAwMDAwCS8qIFNldCBsaXR0bGUgZW5kaWFuIHN3YXAgbW9kZSAqLwotI2RlZmluZSBEQ19DTEVTCQkweDA3MDAwMDAwCS8qIENsZWFyIGxpdHRsZSBlbmRpYW4gc3dhcCBtb2RlICovCi0KLS8qIFN0YXR1cy4KLSovCi0jZGVmaW5lIElEQ19FTkFCTEVECTB4ODAwMDAwMDAJLyogQ2FjaGUgaXMgZW5hYmxlZCAqLwotI2RlZmluZSBJRENfQ0VSUjEJMHgwMDIwMDAwMAkvKiBDYWNoZSBlcnJvciAxICovCi0jZGVmaW5lIElEQ19DRVJSMgkweDAwMTAwMDAwCS8qIENhY2hlIGVycm9yIDIgKi8KLSNkZWZpbmUgSURDX0NFUlIzCTB4MDAwODAwMDAJLyogQ2FjaGUgZXJyb3IgMyAqLwotCi0jZGVmaW5lIERDX0RGV1QJCTB4NDAwMDAwMDAJLyogRGF0YSBjYWNoZSBpcyBmb3JjZWQgd3JpdGUgdGhyb3VnaCAqLwotI2RlZmluZSBEQ19MRVMJCTB4MjAwMDAwMDAJLyogQ2FjaGVzIGFyZSBsaXR0bGUgZW5kaWFuIG1vZGUgKi8KLSNlbmRpZiAvKiBDT05GSUdfOHh4ICovCi0KLSNlbmRpZgotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1wcGMvY2FjaGVmbHVzaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTI0M2VmLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBwYy9jYWNoZWZsdXNoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20tcHBjL2NhY2hlZmx1c2guaAotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaWZkZWYgX19LRVJORUxfXwotI2lmbmRlZiBfUFBDX0NBQ0hFRkxVU0hfSAotI2RlZmluZSBfUFBDX0NBQ0hFRkxVU0hfSAotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLQotLyoKLSAqIE5vIGNhY2hlIGZsdXNoaW5nIGlzIHJlcXVpcmVkIHdoZW4gYWRkcmVzcyBtYXBwaW5ncyBhcmUKLSAqIGNoYW5nZWQsIGJlY2F1c2UgdGhlIGNhY2hlcyBvbiBQb3dlclBDcyBhcmUgcGh5c2ljYWxseQotICogYWRkcmVzc2VkLiAgLS0gcGF1bHVzCi0gKiBBbHNvLCB3aGVuIFNNUCB3ZSB1c2UgdGhlIGNvaGVyZW5jeSAoTSkgYml0IG9mIHRoZQotICogQkFUcyBhbmQgUFRFcy4gIC0tIENvcnQKLSAqLwotI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBhLCBiKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBwLCBwZm4pCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLCBwYWdlKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQotCi1leHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci0jZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZykJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpCWRvIHsgfSB3aGlsZSAoMCkKLQotZXh0ZXJuIHZvaWQgZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwotZXh0ZXJuIHZvaWQgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBsZW4pOwotCi0jZGVmaW5lIGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKLWRvIHsgbWVtY3B5KGRzdCwgc3JjLCBsZW4pOyBcCi0gICAgIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSwgcGFnZSwgdmFkZHIsIGxlbik7IFwKLX0gd2hpbGUgKDApCi0jZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAotCW1lbWNweShkc3QsIHNyYywgbGVuKQotCi1leHRlcm4gdm9pZCBfX2ZsdXNoX2RjYWNoZV9pY2FjaGUodm9pZCAqcGFnZV92YSk7Ci1leHRlcm4gdm9pZCBfX2ZsdXNoX2RjYWNoZV9pY2FjaGVfcGh5cyh1bnNpZ25lZCBsb25nIHBoeXNhZGRyKTsKLWV4dGVybiB2b2lkIGZsdXNoX2RjYWNoZV9pY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci0jZW5kaWYgLyogX1BQQ19DQUNIRUZMVVNIX0ggKi8KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvY3VycmVudC5oIGIvaW5jbHVkZS9hc20tcHBjL2N1cnJlbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ0MTUwMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvY3VycmVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotI2lmZGVmIF9fS0VSTkVMX18KLSNpZm5kZWYgX1BQQ19DVVJSRU5UX0gKLSNkZWZpbmUgX1BQQ19DVVJSRU5UX0gKLQotLyoKLSAqIFdlIGtlZXAgYGN1cnJlbnQnIGluIHIyIGZvciBzcGVlZC4KLSAqLwotcmVnaXN0ZXIgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyZW50IGFzbSAoInIyIik7Ci0KLSNlbmRpZiAvKiAhKF9QUENfQ1VSUkVOVF9IKSAqLwotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wYWdlLmggYi9pbmNsdWRlL2FzbS1wcGMvcGFnZS5oCmluZGV4IGZjNDRmN2MuLjUzOGUwYzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3BhZ2UuaApAQCAtMSw5ICsxLDEyIEBACiAjaWZuZGVmIF9QUENfUEFHRV9ICiAjZGVmaW5lIF9QUENfUEFHRV9ICiAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vYXNtLWNvbXBhdC5oPgorCiAvKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZSAqLwogI2RlZmluZSBQQUdFX1NISUZUCTEyCi0jZGVmaW5lIFBBR0VfU0laRQkoMVVMIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIFBBR0VfU0laRQkoQVNNX0NPTlNUKDEpIDw8IFBBR0VfU0hJRlQpCiAKIC8qCiAgKiBTdWJ0bGU6IHRoaXMgaXMgYW4gaW50IChub3QgYW4gdW5zaWduZWQgbG9uZykgYW5kIHNvIGl0CkBAIC0xNjksNSArMTcyLDggQEAKICNkZWZpbmUgVk1fREFUQV9ERUZBVUxUX0ZMQUdTCShWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9FWEVDIHwgXAogCQkJCSBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKQogCisvKiBXZSBkbyBkZWZpbmUgQVRfU1lTSU5GT19FSERSIGJ1dCBkb24ndCB1c2UgdGhlIGdhdGUgbWVjYW5pc20gKi8KKyNkZWZpbmUgX19IQVZFX0FSQ0hfR0FURV9BUkVBCQkxCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX1BQQ19QQUdFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2NhY2hlLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9jYWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjE0MGE3Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2NhY2hlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotI2lmbmRlZiBfX0FSQ0hfUFBDNjRfQ0FDSEVfSAotI2RlZmluZSBfX0FSQ0hfUFBDNjRfQ0FDSEVfSAotCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KLS8qIGJ5dGVzIHBlciBMMSBjYWNoZSBsaW5lICovCi0jZGVmaW5lIEwxX0NBQ0hFX1NISUZUCTcKLSNkZWZpbmUgTDFfQ0FDSEVfQllURVMJKDEgPDwgTDFfQ0FDSEVfU0hJRlQpCi0KLSNkZWZpbmUgU01QX0NBQ0hFX0JZVEVTIEwxX0NBQ0hFX0JZVEVTCi0jZGVmaW5lIEwxX0NBQ0hFX1NISUZUX01BWCA3CS8qIGxhcmdlc3QgTDEgd2hpY2ggdGhpcyBhcmNoIHN1cHBvcnRzICovCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLXN0cnVjdCBwcGM2NF9jYWNoZXMgewotCXUzMglkc2l6ZTsJCQkvKiBMMSBkLWNhY2hlIHNpemUgKi8KLQl1MzIJZGxpbmVfc2l6ZTsJCS8qIEwxIGQtY2FjaGUgbGluZSBzaXplCSovCi0JdTMyCWxvZ19kbGluZV9zaXplOwotCXUzMglkbGluZXNfcGVyX3BhZ2U7Ci0JdTMyCWlzaXplOwkJCS8qIEwxIGktY2FjaGUgc2l6ZSAqLwotCXUzMglpbGluZV9zaXplOwkJLyogTDEgaS1jYWNoZSBsaW5lIHNpemUJKi8KLQl1MzIJbG9nX2lsaW5lX3NpemU7Ci0JdTMyCWlsaW5lc19wZXJfcGFnZTsKLX07Ci0KLWV4dGVybiBzdHJ1Y3QgcHBjNjRfY2FjaGVzIHBwYzY0X2NhY2hlczsKLQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvY2FjaGVmbHVzaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmJjMDhiLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2NhY2hlZmx1c2guaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLSNpZm5kZWYgX1BQQzY0X0NBQ0hFRkxVU0hfSAotI2RlZmluZSBfUFBDNjRfQ0FDSEVGTFVTSF9ICi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgotCi0vKgotICogTm8gY2FjaGUgZmx1c2hpbmcgaXMgcmVxdWlyZWQgd2hlbiBhZGRyZXNzIG1hcHBpbmdzIGFyZQotICogY2hhbmdlZCwgYmVjYXVzZSB0aGUgY2FjaGVzIG9uIFBvd2VyUENzIGFyZSBwaHlzaWNhbGx5Ci0gKiBhZGRyZXNzZWQuCi0gKi8KLSNkZWZpbmUgZmx1c2hfY2FjaGVfYWxsKCkJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX21tKG1tKQkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2bWFkZHIsIHBmbikJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9pY2FjaGVfcGFnZSh2bWEsIHBhZ2UpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfdnVubWFwKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCi0KLWV4dGVybiB2b2lkIGZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKLSNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykJZG8geyB9IHdoaWxlICgwKQotCi1leHRlcm4gdm9pZCBfX2ZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKLWV4dGVybiB2b2lkIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCSAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCSAgICBpbnQgbGVuKTsKLQotZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCk7Ci1leHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfcGh5c19yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApOwotZXh0ZXJuIHZvaWQgZmx1c2hfaW52YWxfZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCk7Ci0KLSNkZWZpbmUgY29weV90b191c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAotZG8geyBtZW1jcHkoZHN0LCBzcmMsIGxlbik7IFwKLSAgICAgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uodm1hLCBwYWdlLCB2YWRkciwgbGVuKTsgXAotfSB3aGlsZSAoMCkKLSNkZWZpbmUgY29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCi0JbWVtY3B5KGRzdCwgc3JjLCBsZW4pCi0KLWV4dGVybiB2b2lkIF9fZmx1c2hfZGNhY2hlX2ljYWNoZSh2b2lkICpwYWdlX3ZhKTsKLQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApCi17Ci0JaWYgKCFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9DT0hFUkVOVF9JQ0FDSEUpKQotCQlfX2ZsdXNoX2ljYWNoZV9yYW5nZShzdGFydCwgc3RvcCk7Ci19Ci0KLSNlbmRpZiAvKiBfUFBDNjRfQ0FDSEVGTFVTSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9jdXJyZW50LmggYi9pbmNsdWRlL2FzbS1wcGM2NC9jdXJyZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyZGRjNjAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvY3VycmVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotI2lmbmRlZiBfUFBDNjRfQ1VSUkVOVF9ICi0jZGVmaW5lIF9QUEM2NF9DVVJSRU5UX0gKLQotI2luY2x1ZGUgPGFzbS9wYWNhLmg+Ci0KLS8qCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNkZWZpbmUgZ2V0X2N1cnJlbnQoKSAgIChnZXRfcGFjYSgpLT5fX2N1cnJlbnQpCi0jZGVmaW5lIGN1cnJlbnQgICAgICAgICBnZXRfY3VycmVudCgpCi0KLSNlbmRpZiAvKiAhKF9QUEM2NF9DVVJSRU5UX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9lZWguaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2VlaC5oCmluZGV4IDQwYzhlYjUuLjg5ZjI2YWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2VlaC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2VlaC5oCkBAIC0xLDQgKzEsNCBAQAotLyogCisvKgogICogZWVoLmgKICAqIENvcHlyaWdodCAoQykgMjAwMSAgRGF2ZSBFbmdlYnJldHNlbiAmIFRvZGQgSW5nbGV0dCBJQk0gQ29ycG9yYXRpb24uCiAgKgpAQCAtNiwxMiArNiwxMiBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAorICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCkBAIC0yNyw4ICsyNyw2IEBACiAKIHN0cnVjdCBwY2lfZGV2Owogc3RydWN0IGRldmljZV9ub2RlOwotc3RydWN0IGRldmljZV9ub2RlOwotc3RydWN0IG5vdGlmaWVyX2Jsb2NrOwogCiAjaWZkZWYgQ09ORklHX0VFSAogCkBAIC0zNyw2ICszNSwxMCBAQAogI2RlZmluZSBFRUhfTU9ERV9OT0NIRUNLCSgxPDwxKQogI2RlZmluZSBFRUhfTU9ERV9JU09MQVRFRAkoMTw8MikKIAorLyogTWF4IG51bWJlciBvZiBFRUggZnJlZXplcyBhbGxvd2VkIGJlZm9yZSB3ZSBjb25zaWRlciB0aGUgZGV2aWNlCisgKiB0byBiZSBwZXJtYW5lbnRseSBkaXNhYmxlZC4gKi8KKyNkZWZpbmUgRUVIX01BWF9BTExPV0VEX0ZSRUVaRVMgNQorCiB2b2lkIF9faW5pdCBlZWhfaW5pdCh2b2lkKTsKIHVuc2lnbmVkIGxvbmcgZWVoX2NoZWNrX2ZhaWx1cmUoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICp0b2tlbiwKIAkJCQl1bnNpZ25lZCBsb25nIHZhbCk7CkBAIC01OSwzNiArNjEsMTQgQEAKICAqIGVlaF9yZW1vdmVfZGV2aWNlIC0gdW5kbyBFRUggc2V0dXAgZm9yIHRoZSBpbmRpY2F0ZWQgcGNpIGRldmljZQogICogQGRldjogcGNpIGRldmljZSB0byBiZSByZW1vdmVkCiAgKgotICogVGhpcyByb3V0aW5lIHNob3VsZCBiZSB3aGVuIGEgZGV2aWNlIGlzIHJlbW92ZWQgZnJvbSBhIHJ1bm5pbmcKLSAqIHN5c3RlbSAoZS5nLiBieSBob3RwbHVnIG9yIGRscGFyKS4KKyAqIFRoaXMgcm91dGluZSBzaG91bGQgYmUgY2FsbGVkIHdoZW4gYSBkZXZpY2UgaXMgcmVtb3ZlZCBmcm9tCisgKiBhIHJ1bm5pbmcgc3lzdGVtIChlLmcuIGJ5IGhvdHBsdWcgb3IgZGxwYXIpLiAgSXQgdW5yZWdpc3RlcnMKKyAqIHRoZSBQQ0kgZGV2aWNlIGZyb20gdGhlIEVFSCBzdWJzeXN0ZW0uICBJL08gZXJyb3JzIGFmZmVjdGluZworICogdGhpcyBkZXZpY2Ugd2lsbCBubyBsb25nZXIgYmUgZGV0ZWN0ZWQgYWZ0ZXIgdGhpcyBjYWxsOyB0aHVzLAorICogaS9vIGVycm9ycyBhZmZlY3RpbmcgdGhpcyBzbG90IG1heSBsZWF2ZSB0aGlzIGRldmljZSB1bnVzYWJsZS4KICAqLwogdm9pZCBlZWhfcmVtb3ZlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqKTsKIAotI2RlZmluZSBFRUhfRElTQUJMRQkJMAotI2RlZmluZSBFRUhfRU5BQkxFCQkxCi0jZGVmaW5lIEVFSF9SRUxFQVNFX0xPQURTVE9SRQkyCi0jZGVmaW5lIEVFSF9SRUxFQVNFX0RNQQkJMwotCi0vKioKLSAqIE5vdGlmaWVyIGV2ZW50IGZsYWdzLgotICovCi0jZGVmaW5lIEVFSF9OT1RJRllfRlJFRVpFICAxCi0KLS8qKiBFRUggZXZlbnQgLS0gc3RydWN0dXJlIGhvbGRpbmcgcGNpIHNsb3QgZGF0YSB0aGF0IGRlc2NyaWJlcwotICogIGEgY2hhbmdlIGluIHRoZSBpc29sYXRpb24gc3RhdHVzIG9mIGEgUENJIHNsb3QuICBBIHBvaW50ZXIKLSAqICB0byB0aGlzIHN0cnVjdCBpcyBwYXNzZWQgYXMgdGhlIGRhdGEgcG9pbnRlciBpbiBhIG5vdGlmeSBjYWxsYmFjay4KLSAqLwotc3RydWN0IGVlaF9ldmVudCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAgICAgbGlzdDsKLQlzdHJ1Y3QgcGNpX2RldiAgICAgICAqZGV2OwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAgICpkbjsKLQlpbnQgICAgICAgICAgICAgICAgICByZXNldF9zdGF0ZTsKLX07Ci0KLS8qKiBSZWdpc3RlciB0byBmaW5kIG91dCBhYm91dCBFRUggZXZlbnRzLiAqLwotaW50IGVlaF9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKLWludCBlZWhfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKLQogLyoqCiAgKiBFRUhfUE9TU0lCTEVfRVJST1IoKSAtLSB0ZXN0IGZvciBwb3NzaWJsZSBNTUlPIGZhaWx1cmUuCiAgKgpAQCAtMTI5LDcgKzEwOSw3IEBACiAjZGVmaW5lIEVFSF9JT19FUlJPUl9WQUxVRShzaXplKSAoLTFVTCkKICNlbmRpZiAvKiBDT05GSUdfRUVIICovCiAKLS8qIAorLyoKICAqIE1NSU8gcmVhZC93cml0ZSBvcGVyYXRpb25zIHdpdGggRUVIIHN1cHBvcnQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdTggZWVoX3JlYWRiKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L21tdS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvbW11LmgKaW5kZXggNGMxOGE1Yy4uMWE3ZTBhZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvbW11LmgKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvbW11LmgKQEAgLTE0LDcgKzE0LDcgQEAKICNkZWZpbmUgX1BQQzY0X01NVV9IXwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8YXNtL3BwY19hc20uaD4gLyogZm9yIEFTTV9DT05TVCAqLworI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogLyoKQEAgLTIyNCw5ICsyMjQsMTIgQEAKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBwc3RhcnQsIHVuc2lnbmVkIGxvbmcgbW9kZSwKIAkJCSAgICAgaW50IHBzaXplKTsKIAorZXh0ZXJuIHZvaWQgaHRhYl9pbml0aWFsaXplKHZvaWQpOworZXh0ZXJuIHZvaWQgaHRhYl9pbml0aWFsaXplX3NlY29uZGFyeSh2b2lkKTsKIGV4dGVybiB2b2lkIGhwdGVfaW5pdF9uYXRpdmUodm9pZCk7CiBleHRlcm4gdm9pZCBocHRlX2luaXRfbHBhcih2b2lkKTsKIGV4dGVybiB2b2lkIGhwdGVfaW5pdF9pU2VyaWVzKHZvaWQpOworZXh0ZXJuIHZvaWQgbW1faW5pdF9wcGM2NCh2b2lkKTsKIAogZXh0ZXJuIGxvbmcgcFNlcmllc19scGFyX2hwdGVfaW5zZXJ0KHVuc2lnbmVkIGxvbmcgaHB0ZV9ncm91cCwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgdmEsIHVuc2lnbmVkIGxvbmcgcHJwbiwKQEAgLTI0NSw2ICsyNDgsNyBAQAogCiBleHRlcm4gdm9pZCBzdGFic19hbGxvYyh2b2lkKTsKIGV4dGVybiB2b2lkIHNsYl9pbml0aWFsaXplKHZvaWQpOworZXh0ZXJuIHZvaWQgc3RhYl9pbml0aWFsaXplKHVuc2lnbmVkIGxvbmcgc3RhYik7CiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvbW16b25lLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9tbXpvbmUuaAppbmRleCA4MGE3MDhlLi41NDk1OGQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9tbXpvbmUuaApAQCAtOCwxNSArOCwxNCBAQAogI2RlZmluZSBfQVNNX01NWk9ORV9IXwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgogCi0vKiBnZW5lcmljIG5vbi1saW5lYXIgbWVtb3J5IHN1cHBvcnQ6CisvKgorICogZ2VuZXJpYyBub24tbGluZWFyIG1lbW9yeSBzdXBwb3J0OgogICoKICAqIDEpIHdlIHdpbGwgbm90IHNwbGl0IG1lbW9yeSBpbnRvIG1vcmUgY2h1bmtzIHRoYW4gd2lsbCBmaXQgaW50byB0aGUKICAqICAgIGZsYWdzIGZpZWxkIG9mIHRoZSBzdHJ1Y3QgcGFnZQogICovCiAKLQogI2lmZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCiAKIGV4dGVybiBzdHJ1Y3QgcGdsaXN0X2RhdGEgKm5vZGVfZGF0YVtdOwpAQCAtMzAsMzYgKzI5LDExIEBACiAgKi8KIAogZXh0ZXJuIGludCBudW1hX2NwdV9sb29rdXBfdGFibGVbXTsKLWV4dGVybiBjaGFyICpudW1hX21lbW9yeV9sb29rdXBfdGFibGU7CiBleHRlcm4gY3B1bWFza190IG51bWFfY3B1bWFza19sb29rdXBfdGFibGVbXTsKLWV4dGVybiBpbnQgbnJfY3B1c19pbl9ub2RlW107Ci0KLS8qIDE2TUIgcmVnaW9ucyAqLwotI2RlZmluZSBNRU1PUllfSU5DUkVNRU5UX1NISUZUIDI0Ci0jZGVmaW5lIE1FTU9SWV9JTkNSRU1FTlQgKDFVTCA8PCBNRU1PUllfSU5DUkVNRU5UX1NISUZUKQotCi0vKiBOVU1BIGRlYnVnZ2luZywgd2lsbCBub3Qgd29yayBvbiBhIERMUEFSIG1hY2hpbmUgKi8KLSN1bmRlZiBERUJVR19OVU1BCi0KLXN0YXRpYyBpbmxpbmUgaW50IHBhX3RvX25pZCh1bnNpZ25lZCBsb25nIHBhKQotewotCWludCBuaWQ7Ci0KLQluaWQgPSBudW1hX21lbW9yeV9sb29rdXBfdGFibGVbcGEgPj4gTUVNT1JZX0lOQ1JFTUVOVF9TSElGVF07Ci0KLSNpZmRlZiBERUJVR19OVU1BCi0JLyogdGhlIHBoeXNpY2FsIGFkZHJlc3MgcGFzc2VkIGluIGlzIG5vdCBpbiB0aGUgbWFwIGZvciB0aGUgc3lzdGVtICovCi0JaWYgKG5pZCA9PSAtMSkgewotCQlwcmludGsoImJhZCBhZGRyZXNzOiAlbHhcbiIsIHBhKTsKLQkJQlVHKCk7Ci0JfQorI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWF4X3BmbjsKICNlbmRpZgogCi0JcmV0dXJuIG5pZDsKLX0KLQotI2RlZmluZSBub2RlX2xvY2FsbnIocGZuLCBuaWQpCSgocGZuKSAtIE5PREVfREFUQShuaWQpLT5ub2RlX3N0YXJ0X3BmbikKLQogLyoKICAqIEZvbGxvd2luZyBhcmUgbWFjcm9zIHRoYXQgZWFjaCBudW1hIGltcGxtZW50YXRpb24gbXVzdCBkZWZpbmUuCiAgKi8KQEAgLTY3LDM5ICs0MSwxMCBAQAogI2RlZmluZSBub2RlX3N0YXJ0X3BmbihuaWQpCShOT0RFX0RBVEEobmlkKS0+bm9kZV9zdGFydF9wZm4pCiAjZGVmaW5lIG5vZGVfZW5kX3BmbihuaWQpCShOT0RFX0RBVEEobmlkKS0+bm9kZV9lbmRfcGZuKQogCi0jaWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQotCi0vKgotICogR2l2ZW4gYSBrZXJuZWwgYWRkcmVzcywgZmluZCB0aGUgaG9tZSBub2RlIG9mIHRoZSB1bmRlcmx5aW5nIG1lbW9yeS4KLSAqLwotI2RlZmluZSBrdmFkZHJfdG9fbmlkKGthZGRyKQlwYV90b19uaWQoX19wYShrYWRkcikpCi0KLSNkZWZpbmUgcGZuX3RvX25pZChwZm4pCQlwYV90b19uaWQoKHVuc2lnbmVkIGxvbmcpKHBmbikgPDwgUEFHRV9TSElGVCkKLQotLyogV3JpdHRlbiB0aGlzIHdheSB0byBhdm9pZCBldmFsdWF0aW5nIGFyZ3VtZW50cyB0d2ljZSAqLwotI2RlZmluZSBkaXNjb250aWdtZW1fcGZuX3RvX3BhZ2UocGZuKSBcCi0oeyBcCi0JdW5zaWduZWQgbG9uZyBfX3RtcCA9IHBmbjsgXAotCShOT0RFX0RBVEEocGZuX3RvX25pZChfX3RtcCkpLT5ub2RlX21lbV9tYXAgKyBcCi0JIG5vZGVfbG9jYWxucihfX3RtcCwgcGZuX3RvX25pZChfX3RtcCkpKTsgXAotfSkKLQotI2RlZmluZSBkaXNjb250aWdtZW1fcGFnZV90b19wZm4ocCkgXAotKHsgXAotCXN0cnVjdCBwYWdlICpfX3RtcCA9IHA7IFwKLQkoKChfX3RtcCkgLSBwYWdlX3pvbmUoX190bXApLT56b25lX21lbV9tYXApICsgXAotCSBwYWdlX3pvbmUoX190bXApLT56b25lX3N0YXJ0X3Bmbik7IFwKLX0pCi0KLS8qIFhYWCBmaXggZm9yIGRpc2NvbnRpZ3VvdXMgcGh5c2ljYWwgbWVtb3J5ICovCi0jZGVmaW5lIGRpc2NvbnRpZ21lbV9wZm5fdmFsaWQocGZuKQkJKChwZm4pIDwgbnVtX3BoeXNwYWdlcykKLQotI2VuZGlmIC8qIENPTkZJR19ESVNDT05USUdNRU0gKi8KLQogI2VuZGlmIC8qIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTICovCiAKICNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0VBUkxZX1BGTl9UT19OSUQKLSNkZWZpbmUgZWFybHlfcGZuX3RvX25pZChwZm4pICBwYV90b19uaWQoKCh1bnNpZ25lZCBsb25nKXBmbikgPDwgUEFHRV9TSElGVCkKK2V4dGVybiBpbnQgX19pbml0IGVhcmx5X3Bmbl90b19uaWQodW5zaWduZWQgbG9uZyBwZm4pOwogI2VuZGlmCiAKICNlbmRpZiAvKiBfQVNNX01NWk9ORV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvcGFnZS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvcGFnZS5oCmluZGV4IDgyY2UxODcuLjNlZmMzMjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9wYWdlLmgKQEAgLTExLDcgKzExLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8YXNtL3BwY19hc20uaD4gLyogZm9yIEFTTV9DT05TVCAqLworI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAKIC8qCiAgKiBXZSBzdXBwb3J0IGVpdGhlciA0ayBvciA2NGsgc29mdHdhcmUgcGFnZSBzaXplLiBXaGVuIHVzaW5nIDY0ayBwYWdlcwpAQCAtMjc5LDExICsyNzksNiBAQAogCiAjZGVmaW5lIF9fdmEoeCkgKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh4KSArIEtFUk5FTEJBU0UpKQogCi0jaWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQotI2RlZmluZSBwYWdlX3RvX3BmbihwYWdlKQlkaXNjb250aWdtZW1fcGFnZV90b19wZm4ocGFnZSkKLSNkZWZpbmUgcGZuX3RvX3BhZ2UocGZuKQlkaXNjb250aWdtZW1fcGZuX3RvX3BhZ2UocGZuKQotI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJZGlzY29udGlnbWVtX3Bmbl92YWxpZChwZm4pCi0jZW5kaWYKICNpZmRlZiBDT05GSUdfRkxBVE1FTQogI2RlZmluZSBwZm5fdG9fcGFnZShwZm4pCShtZW1fbWFwICsgKHBmbikpCiAjZGVmaW5lIHBhZ2VfdG9fcGZuKHBhZ2UpCSgodW5zaWduZWQgbG9uZykoKHBhZ2UpIC0gbWVtX21hcCkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9wY2ktYnJpZGdlLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9wY2ktYnJpZGdlLmgKaW5kZXggNjBjZjhjOC4uZWZiZGFlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvcGNpLWJyaWRnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3BjaS1icmlkZ2UuaApAQCAtNjMsNyArNjMsNiBAQAogCWludAlkZXZmbjsJCQkvKiBmb3IgcGNpIGRldmljZXMgKi8KIAlpbnQJZWVoX21vZGU7CQkvKiBTZWUgZWVoLmggZm9yIHBvc3NpYmxlIEVFSF9NT0RFcyAqLwogCWludAllZWhfY29uZmlnX2FkZHI7Ci0JaW50CWVlaF9jYXBhYmxlOwkJLyogZnJvbSBmaXJtd2FyZSAqLwogCWludCAJZWVoX2NoZWNrX2NvdW50OwkvKiAjIHRpbWVzIGRyaXZlciBpZ25vcmVkIGVycm9yICovCiAJaW50IAllZWhfZnJlZXplX2NvdW50OwkvKiAjIHRpbWVzIHRoaXMgZGV2aWNlIGZyb3plIHVwLiAqLwogCWludAllZWhfaXNfYnJpZGdlOwkJLyogZGV2aWNlIGlzIHBjaS10by1wY2kgYnJpZGdlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9wZ2FsbG9jLmgKaW5kZXggOThkYTBlNC4uZGNmMzYyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3BnYWxsb2MuaApAQCAtMTAsOCArMTAsOCBAQAogCiAjaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKICNkZWZpbmUgUFRFX0NBQ0hFX05VTQkwCi0jZGVmaW5lIFBNRF9DQUNIRV9OVU0JMAotI2RlZmluZSBQR0RfQ0FDSEVfTlVNCTEKKyNkZWZpbmUgUE1EX0NBQ0hFX05VTQkxCisjZGVmaW5lIFBHRF9DQUNIRV9OVU0JMgogI2Vsc2UKICNkZWZpbmUgUFRFX0NBQ0hFX05VTQkwCiAjZGVmaW5lIFBNRF9DQUNIRV9OVU0JMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvcHJvbS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvcHJvbS5oCmluZGV4IDc2YmIwMjYuLmRkZmUxODYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L3Byb20uaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9wcm9tLmgKQEAgLTIwNCw2ICsyMDQsOCBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvbV9pbml0KHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCiAJdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiBleHRlcm4gdm9pZCBmaW5pc2hfZGV2aWNlX3RyZWUodm9pZCk7CitleHRlcm4gdm9pZCB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUodm9pZCk7CitleHRlcm4gdm9pZCBlYXJseV9pbml0X2RldnRyZWUodm9pZCAqKTsKIGV4dGVybiBpbnQgZGV2aWNlX2lzX2NvbXBhdGlibGUoc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UsIGNvbnN0IGNoYXIgKik7CiBleHRlcm4gaW50IG1hY2hpbmVfaXNfY29tcGF0aWJsZShjb25zdCBjaGFyICpjb21wYXQpOwogZXh0ZXJuIHVuc2lnbmVkIGNoYXIgKmdldF9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3NpZ25hbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzJkZjdkZC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9zaWduYWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0jaWZuZGVmIF9BU01QUEM2NF9TSUdOQUxfSAotI2RlZmluZSBfQVNNUFBDNjRfU0lHTkFMX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxhc20vc2lnaW5mby5oPgotCi0vKiBBdm9pZCB0b28gbWFueSBoZWFkZXIgb3JkZXJpbmcgcHJvYmxlbXMuICAqLwotc3RydWN0IHNpZ2luZm87Ci0KLSNkZWZpbmUgX05TSUcJCTY0Ci0jZGVmaW5lIF9OU0lHX0JQVwk2NAotI2RlZmluZSBfTlNJR19XT1JEUwkoX05TSUcgLyBfTlNJR19CUFcpCi0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBvbGRfc2lnc2V0X3Q7CQkvKiBhdCBsZWFzdCAzMiBiaXRzICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIHNpZ1tfTlNJR19XT1JEU107Ci19IHNpZ3NldF90OwotCi0jZGVmaW5lIFNJR0hVUAkJIDEKLSNkZWZpbmUgU0lHSU5UCQkgMgotI2RlZmluZSBTSUdRVUlUCQkgMwotI2RlZmluZSBTSUdJTEwJCSA0Ci0jZGVmaW5lIFNJR1RSQVAJCSA1Ci0jZGVmaW5lIFNJR0FCUlQJCSA2Ci0jZGVmaW5lIFNJR0lPVAkJIDYKLSNkZWZpbmUgU0lHQlVTCQkgNwotI2RlZmluZSBTSUdGUEUJCSA4Ci0jZGVmaW5lIFNJR0tJTEwJCSA5Ci0jZGVmaW5lIFNJR1VTUjEJCTEwCi0jZGVmaW5lIFNJR1NFR1YJCTExCi0jZGVmaW5lIFNJR1VTUjIJCTEyCi0jZGVmaW5lIFNJR1BJUEUJCTEzCi0jZGVmaW5lIFNJR0FMUk0JCTE0Ci0jZGVmaW5lIFNJR1RFUk0JCTE1Ci0jZGVmaW5lIFNJR1NUS0ZMVAkxNgotI2RlZmluZSBTSUdDSExECQkxNwotI2RlZmluZSBTSUdDT05UCQkxOAotI2RlZmluZSBTSUdTVE9QCQkxOQotI2RlZmluZSBTSUdUU1RQCQkyMAotI2RlZmluZSBTSUdUVElOCQkyMQotI2RlZmluZSBTSUdUVE9VCQkyMgotI2RlZmluZSBTSUdVUkcJCTIzCi0jZGVmaW5lIFNJR1hDUFUJCTI0Ci0jZGVmaW5lIFNJR1hGU1oJCTI1Ci0jZGVmaW5lIFNJR1ZUQUxSTQkyNgotI2RlZmluZSBTSUdQUk9GCQkyNwotI2RlZmluZSBTSUdXSU5DSAkyOAotI2RlZmluZSBTSUdJTwkJMjkKLSNkZWZpbmUgU0lHUE9MTAkJU0lHSU8KLS8qCi0jZGVmaW5lIFNJR0xPU1QJCTI5Ci0qLwotI2RlZmluZSBTSUdQV1IJCTMwCi0jZGVmaW5lIFNJR1NZUwkJMzEKLSNkZWZpbmUJU0lHVU5VU0VECTMxCi0KLS8qIFRoZXNlIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBjb25zdGFudHMgZnJvbSB1c2VybGFuZC4gICovCi0jZGVmaW5lIFNJR1JUTUlOCTMyCi0jZGVmaW5lIFNJR1JUTUFYCV9OU0lHCi0KLS8qCi0gKiBTQV9GTEFHUyB2YWx1ZXM6Ci0gKgotICogU0FfT05TVEFDSyBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCwgYnV0IHdpbGwgYWxsb3cgc2lnYWx0c3RhY2soMikuCi0gKiBTQV9JTlRFUlJVUFQgaXMgYSBuby1vcCwgYnV0IGxlZnQgZHVlIHRvIGhpc3RvcmljYWwgcmVhc29ucy4gVXNlIHRoZQotICogU0FfUkVTVEFSVCBmbGFnIHRvIGdldCByZXN0YXJ0aW5nIHNpZ25hbHMgKHdoaWNoIHdlcmUgdGhlIGRlZmF1bHQgbG9uZyBhZ28pCi0gKiBTQV9OT0NMRFNUT1AgZmxhZyB0byB0dXJuIG9mZiBTSUdDSExEIHdoZW4gY2hpbGRyZW4gc3RvcC4KLSAqIFNBX1JFU0VUSEFORCBjbGVhcnMgdGhlIGhhbmRsZXIgd2hlbiB0aGUgc2lnbmFsIGlzIGRlbGl2ZXJlZC4KLSAqIFNBX05PQ0xEV0FJVCBmbGFnIG9uIFNJR0NITEQgdG8gaW5oaWJpdCB6b21iaWVzLgotICogU0FfTk9ERUZFUiBwcmV2ZW50cyB0aGUgY3VycmVudCBzaWduYWwgZnJvbSBiZWluZyBtYXNrZWQgaW4gdGhlIGhhbmRsZXIuCi0gKgotICogU0FfT05FU0hPVCBhbmQgU0FfTk9NQVNLIGFyZSB0aGUgaGlzdG9yaWNhbCBMaW51eCBuYW1lcyBmb3IgdGhlIFNpbmdsZQotICogVW5peCBuYW1lcyBSRVNFVEhBTkQgYW5kIE5PREVGRVIgcmVzcGVjdGl2ZWx5LgotICovCi0jZGVmaW5lIFNBX05PQ0xEU1RPUAkweDAwMDAwMDAxdQotI2RlZmluZSBTQV9OT0NMRFdBSVQJMHgwMDAwMDAwMnUKLSNkZWZpbmUgU0FfU0lHSU5GTwkweDAwMDAwMDA0dQotI2RlZmluZSBTQV9PTlNUQUNLCTB4MDgwMDAwMDB1Ci0jZGVmaW5lIFNBX1JFU1RBUlQJMHgxMDAwMDAwMHUKLSNkZWZpbmUgU0FfTk9ERUZFUgkweDQwMDAwMDAwdQotI2RlZmluZSBTQV9SRVNFVEhBTkQJMHg4MDAwMDAwMHUKLQotI2RlZmluZSBTQV9OT01BU0sJU0FfTk9ERUZFUgotI2RlZmluZSBTQV9PTkVTSE9UCVNBX1JFU0VUSEFORAotI2RlZmluZSBTQV9JTlRFUlJVUFQJMHgyMDAwMDAwMHUgLyogZHVtbXkgLS0gaWdub3JlZCAqLwotCi0jZGVmaW5lIFNBX1JFU1RPUkVSCTB4MDQwMDAwMDB1Ci0KLS8qIAotICogc2lnYWx0c3RhY2sgY29udHJvbHMKLSAqLwotI2RlZmluZSBTU19PTlNUQUNLCTEKLSNkZWZpbmUgU1NfRElTQUJMRQkyCi0KLSNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAotI2RlZmluZSBTSUdTVEtTWgk4MTkyCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWduYWwuaD4KLQotc3RydWN0IG9sZF9zaWdhY3Rpb24gewotCV9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7Ci0Jb2xkX3NpZ3NldF90IHNhX21hc2s7Ci0JdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKLQlfX3NpZ3Jlc3RvcmVfdCBzYV9yZXN0b3JlcjsKLX07Ci0KLXN0cnVjdCBzaWdhY3Rpb24gewotCV9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7Ci0JdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKLQlfX3NpZ3Jlc3RvcmVfdCBzYV9yZXN0b3JlcjsKLQlzaWdzZXRfdCBzYV9tYXNrOwkJLyogbWFzayBsYXN0IGZvciBleHRlbnNpYmlsaXR5ICovCi19OwotCi1zdHJ1Y3Qga19zaWdhY3Rpb24gewotCXN0cnVjdCBzaWdhY3Rpb24gc2E7Ci19OwotCi10eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFjayB7Ci0Jdm9pZCBfX3VzZXIgKnNzX3NwOwotCWludCBzc19mbGFnczsKLQlzaXplX3Qgc3Nfc2l6ZTsKLX0gc3RhY2tfdDsKLQotc3RydWN0IHB0X3JlZ3M7Ci1zdHJ1Y3QgdGltZXNwZWM7Ci1leHRlcm4gaW50IGRvX3NpZ25hbChzaWdzZXRfdCAqb2xkc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1leHRlcm4gaW50IGRvX3NpZ25hbDMyKHNpZ3NldF90ICpvbGRzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLSNkZWZpbmUgcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHJlZ3MsIGNvb2tpZSkgZG8geyB9IHdoaWxlICgwKQotCi0jZW5kaWYgLyogX0FTTVBQQzY0X1NJR05BTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3N5c3RlbS5oCmluZGV4IDBjZGQ2NmMuLmJmOWE2YWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3N5c3RlbS5oCkBAIC0xNDksNiArMTQ5LDggQEAKIGV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBfc3dpdGNoKHN0cnVjdCB0aHJlYWRfc3RydWN0ICpwcmV2LAogCQkJCSAgICBzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqbmV4dCk7CiAKK2V4dGVybiB1bnNpZ25lZCBsb25nIGtsaW1pdDsKKwogZXh0ZXJuIGludCBwb3dlcnNhdmVfbmFwOwkvKiBzZXQgaWYgbmFwIG1vZGUgY2FuIGJlIHVzZWQgaW4gaWRsZSBsb29wICovCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9zeXN0ZW1jZmcuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3N5c3RlbWNmZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Yjg2YjUzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L3N5c3RlbWNmZy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotI2lmbmRlZiBfU1lTVEVNQ0ZHX0gKLSNkZWZpbmUgX1NZU1RFTUNGR19ICi0KLS8qIAotICogQ29weXJpZ2h0IChDKSAyMDAyIFBldGVyIEJlcmduZXIgPGJlcmduZXJAdm5ldC5pYm0uY29tPiwgSUJNCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0vKiBDaGFuZ2UgQWN0aXZpdHk6Ci0gKiAyMDAyLzA5LzMwIDogYmVyZ25lciAgOiBDcmVhdGVkCi0gKiBFbmQgQ2hhbmdlIEFjdGl2aXR5IAotICovCi0KLS8qCi0gKiBJZiB0aGUgbWFqb3IgdmVyc2lvbiBjaGFuZ2VzIHdlIGFyZSBpbmNvbXBhdGlibGUuCi0gKiBNaW5vciB2ZXJzaW9uIGNoYW5nZXMgYXJlIGEgaGludC4KLSAqLwotI2RlZmluZSBTWVNURU1DRkdfTUFKT1IgMQotI2RlZmluZSBTWVNURU1DRkdfTUlOT1IgMQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0jaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+Ci0KLSNkZWZpbmUgU1lTQ0FMTF9NQVBfU0laRSAgICAgICgoX19OUl9zeXNjYWxscyArIDMxKSAvIDMyKQotCi1zdHJ1Y3Qgc3lzdGVtY2ZnIHsKLQlfX3U4ICBleWVfY2F0Y2hlclsxNl07CQkvKiBFeWVjYXRjaGVyOiBTWVNURU1DRkc6UFBDNjQJMHgwMCAqLwotCXN0cnVjdCB7CQkJLyogU3lzdGVtY2ZnIHZlcnNpb24gbnVtYmVycwkgICAgICovCi0JCV9fdTMyIG1ham9yOwkJLyogTWFqb3IgbnVtYmVyCQkJMHgxMCAqLwotCQlfX3UzMiBtaW5vcjsJCS8qIE1pbm9yIG51bWJlcgkJCTB4MTQgKi8KLQl9IHZlcnNpb247Ci0KLQlfX3UzMiBwbGF0Zm9ybTsJCQkvKiBQbGF0Zm9ybSBmbGFncwkJMHgxOCAqLwotCV9fdTMyIHByb2Nlc3NvcjsJCS8qIFByb2Nlc3NvciB0eXBlCQkweDFDICovCi0JX191NjQgcHJvY2Vzc29yQ291bnQ7CQkvKiAjIG9mIHBoeXNpY2FsIHByb2Nlc3NvcnMJMHgyMCAqLwotCV9fdTY0IHBoeXNpY2FsTWVtb3J5U2l6ZTsJLyogU2l6ZSBvZiByZWFsIG1lbW9yeShCKQkweDI4ICovCi0JX191NjQgdGJfb3JpZ19zdGFtcDsJCS8qIFRpbWViYXNlIGF0IGJvb3QJCTB4MzAgKi8KLQlfX3U2NCB0Yl90aWNrc19wZXJfc2VjOwkJLyogVGltZWJhc2UgdGljcyAvIHNlYwkJMHgzOCAqLwotCV9fdTY0IHRiX3RvX3hzOwkJCS8qIEludmVyc2Ugb2YgVEIgdG8gMl4yMAkweDQwICovCi0JX191NjQgc3RhbXBfeHNlYzsJCS8qCQkJCTB4NDggKi8KLQlfX3U2NCB0Yl91cGRhdGVfY291bnQ7CQkvKiBUaW1lYmFzZSBhdG9taWNpdHkgY3RyCTB4NTAgKi8KLQlfX3UzMiB0el9taW51dGVzd2VzdDsJCS8qIE1pbnV0ZXMgd2VzdCBvZiBHcmVlbndpY2gJMHg1OCAqLwotCV9fdTMyIHR6X2RzdHRpbWU7CQkvKiBUeXBlIG9mIGRzdCBjb3JyZWN0aW9uCTB4NUMgKi8KLQkvKiBuZXh0IGZvdXIgYXJlIG5vIGxvbmdlciB1c2VkIGV4Y2VwdCB0byBiZSBleHBvcnRlZCB0byAvcHJvYyAqLwotCV9fdTMyIGRjYWNoZV9zaXplOwkJLyogTDEgZC1jYWNoZSBzaXplCQkweDYwICovCi0JX191MzIgZGNhY2hlX2xpbmVfc2l6ZTsJCS8qIEwxIGQtY2FjaGUgbGluZSBzaXplCQkweDY0ICovCi0JX191MzIgaWNhY2hlX3NpemU7CQkvKiBMMSBpLWNhY2hlIHNpemUJCTB4NjggKi8KLQlfX3UzMiBpY2FjaGVfbGluZV9zaXplOwkJLyogTDEgaS1jYWNoZSBsaW5lIHNpemUJCTB4NkMgKi8KLSAgIAlfX3UzMiBzeXNjYWxsX21hcF82NFtTWVNDQUxMX01BUF9TSVpFXTsgLyogbWFwIG9mIGF2YWlsYWJsZSBzeXNjYWxscyAweDcwICovCi0gICAJX191MzIgc3lzY2FsbF9tYXBfMzJbU1lTQ0FMTF9NQVBfU0laRV07IC8qIG1hcCBvZiBhdmFpbGFibGUgc3lzY2FsbHMgKi8KLX07Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi1leHRlcm4gc3RydWN0IHN5c3RlbWNmZyAqc3lzdGVtY2ZnOwotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qIF9TWVNURU1DRkdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L21zaS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L21zaS5oCmluZGV4IDg1YzQyN2UuLjM1NmUwZTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9tc2kuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvbXNpLmgKQEAgLTExLDggKzExLDYgQEAKICNpbmNsdWRlIDxhc20vc21wLmg+CiAKICNkZWZpbmUgTEFTVF9ERVZJQ0VfVkVDVE9SCQkyMzIKLSNkZWZpbmUgTVNJX0RFU1RfTU9ERQkJCU1TSV9MT0dJQ0FMX01PREUKLSNkZWZpbmUgTVNJX1RBUkdFVF9DUFVfU0hJRlQJCTEyCi0jZGVmaW5lIE1TSV9UQVJHRVRfQ1BVCQkJbG9naWNhbF9zbXBfcHJvY2Vzc29yX2lkKCkKKyNkZWZpbmUgTVNJX1RBUkdFVF9DUFVfU0hJRlQJMTIKIAogI2VuZGlmIC8qIEFTTV9NU0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3NtcC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3NtcC5oCmluZGV4IGM1N2NlNDAuLmI5ZmIyMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvc21wLmgKQEAgLTEzNSw1ICsxMzUsMTEgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBjcHVfcGh5c2ljYWxfaWQoY3B1KQkJeDg2X2NwdV90b19hcGljaWRbY3B1XQorI2Vsc2UKKyNkZWZpbmUgY3B1X3BoeXNpY2FsX2lkKGNwdSkJCWJvb3RfY3B1X2lkCisjZW5kaWYKKwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmggYi9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oCmluZGV4IGM1NzY5YzYuLmFkMWEyMmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaApAQCAtMzIsNiArMzIsOCBAQAogICovCiAjZGVmaW5lIENOX0lEWF9QUk9DCQkJMHgxCiAjZGVmaW5lIENOX1ZBTF9QUk9DCQkJMHgxCisjZGVmaW5lIENOX0lEWF9DSUZTCQkJMHgyCisjZGVmaW5lIENOX1ZBTF9DSUZTICAgICAgICAgICAgICAgICAgICAgMHgxCiAKICNkZWZpbmUgQ05fTkVUTElOS19VU0VSUwkJMQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lkZS5oIGIvaW5jbHVkZS9saW51eC9pZGUuaAppbmRleCA3N2FlNTVkLi5hYzhiMjVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lkZS5oCisrKyBiL2luY2x1ZGUvbGludXgvaWRlLmgKQEAgLTEzMjksNyArMTMyOSw4IEBACiBleHRlcm4gaW50IGlkZXByb2JlX2luaXQodm9pZCk7CiAKIGV4dGVybiB2b2lkIGlkZV9zY2FuX3BjaWJ1cyhpbnQgc2Nhbl9kaXJlY3Rpb24pIF9faW5pdDsKLWV4dGVybiBpbnQgaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKmRyaXZlcik7CitleHRlcm4gaW50IF9faWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKmRyaXZlciwgc3RydWN0IG1vZHVsZSAqb3duZXIpOworI2RlZmluZSBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcihkKSBfX2lkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKGQsIFRISVNfTU9EVUxFKQogZXh0ZXJuIHZvaWQgaWRlX3BjaV91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqZHJpdmVyKTsKIHZvaWQgaWRlX3BjaV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGNpX2RldiAqLCBzdHJ1Y3QgaWRlX3BjaV9kZXZpY2VfcyAqLCBpbnQsIGF0YV9pbmRleF90ICopOwogZXh0ZXJuIHZvaWQgaWRlX3NldHVwX3BjaV9ub2lzZSAoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IGlkZV9wY2lfZGV2aWNlX3MgKmQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oIGIvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oCmluZGV4IGQyMWMzMDUuLmZlMjZkNDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgKQEAgLTIxLDYgKzIxLDggQEAKICNpZm5kZWYgX0xJTlVYX0lGX0VUSEVSX0gKICNkZWZpbmUgX0xJTlVYX0lGX0VUSEVSX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qCiAgKglJRUVFIDgwMi4zIEV0aGVybmV0IG1hZ2ljIGNvbnN0YW50cy4gIFRoZSBmcmFtZSBzaXplcyBvbWl0IHRoZSBwcmVhbWJsZQogICoJYW5kIEZDUy9DUkMgKGZyYW1lIGNoZWNrIHNlcXVlbmNlKS4gCkBAIC0xMDAsNyArMTAyLDcgQEAKIHN0cnVjdCBldGhoZHIgewogCXVuc2lnbmVkIGNoYXIJaF9kZXN0W0VUSF9BTEVOXTsJLyogZGVzdGluYXRpb24gZXRoIGFkZHIJKi8KIAl1bnNpZ25lZCBjaGFyCWhfc291cmNlW0VUSF9BTEVOXTsJLyogc291cmNlIGV0aGVyIGFkZHIJKi8KLQl1bnNpZ25lZCBzaG9ydAloX3Byb3RvOwkJLyogcGFja2V0IHR5cGUgSUQgZmllbGQJKi8KKwlfX2JlMTYJCWhfcHJvdG87CQkvKiBwYWNrZXQgdHlwZSBJRCBmaWVsZAkqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGliYXRhLmggYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCmluZGV4IGU4YzkzYjEuLmFkNTk5NjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGliYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9hdGEuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KQEAgLTQwNCw2ICs0MDUsNyBAQAogCXVuc2lnbmVkIGxvbmcJCW13ZG1hX21hc2s7CiAJdW5zaWduZWQgbG9uZwkJdWRtYV9tYXNrOwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zICpwb3J0X29wczsKKwl2b2lkIAkJCSpwcml2YXRlX2RhdGE7CiB9OwogCiBzdHJ1Y3QgYXRhX3RpbWluZyB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCBjNmVmY2U0Li45MzZmOGI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTkyNyw2ICs5MjcsMTMgQEAKIGV4dGVybiBpbnQJCXdlaWdodF9wOwogZXh0ZXJuIGludAkJbmV0ZGV2X3NldF9tYXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKm1hc3Rlcik7CiBleHRlcm4gaW50IHNrYl9jaGVja3N1bV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsIGludCBpbndhcmQpOworI2lmZGVmIENPTkZJR19CVUcKK2V4dGVybiB2b2lkIG5ldGRldl9yeF9jc3VtX2ZhdWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfcnhfY3N1bV9mYXVsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworfQorI2VuZGlmCiAvKiByeCBza2IgdGltZXN0YW1wcyAqLwogZXh0ZXJuIHZvaWQJCW5ldF9lbmFibGVfdGltZXN0YW1wKHZvaWQpOwogZXh0ZXJuIHZvaWQJCW5ldF9kaXNhYmxlX3RpbWVzdGFtcCh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLWFjcGkuaCBiL2luY2x1ZGUvbGludXgvcGNpLWFjcGkuaAppbmRleCA4NTcxMjZhLi40ODc3ZTM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS1hY3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oCkBAIC00NywxNCArNDcsMTUgQEAKIAkJCQlPU0NfUENJX0VYUFJFU1NfQ0FQX1NUUlVDVFVSRV9DT05UUk9MKQogCiAjaWZkZWYgQ09ORklHX0FDUEkKLWV4dGVybiBhY3BpX3N0YXR1cyBwY2lfb3NjX2NvbnRyb2xfc2V0KHUzMiBmbGFncyk7CitleHRlcm4gYWNwaV9zdGF0dXMgcGNpX29zY19jb250cm9sX3NldChhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBmbGFncyk7CiBleHRlcm4gYWNwaV9zdGF0dXMgcGNpX29zY19zdXBwb3J0X3NldCh1MzIgZmxhZ3MpOwogI2Vsc2UKICNpZiAhZGVmaW5lZChhY3BpX3N0YXR1cykKIHR5cGVkZWYgdTMyIAkJYWNwaV9zdGF0dXM7CiAjZGVmaW5lIEFFX0VSUk9SICAgICAgCShhY3BpX3N0YXR1cykgKDB4MDAwMSkKICNlbmRpZiAgICAKLXN0YXRpYyBpbmxpbmUgYWNwaV9zdGF0dXMgcGNpX29zY19jb250cm9sX3NldCh1MzIgZmxhZ3MpIHtyZXR1cm4gQUVfRVJST1I7fQorc3RhdGljIGlubGluZSBhY3BpX3N0YXR1cyBwY2lfb3NjX2NvbnRyb2xfc2V0KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGZsYWdzKQore3JldHVybiBBRV9FUlJPUjt9CiBzdGF0aWMgaW5saW5lIGFjcGlfc3RhdHVzIHBjaV9vc2Nfc3VwcG9ydF9zZXQodTMyIGZsYWdzKSB7cmV0dXJuIEFFX0VSUk9SO30gCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmgKaW5kZXggMzU5NmFjOS4uZGU2OTBjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC0yMzYsNyArMjM2LDYgQEAKIHN0cnVjdCBwY2lfZHJpdmVyIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiAJY2hhciAqbmFtZTsKLQlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIAljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRfdGFibGU7CS8qIG11c3QgYmUgbm9uLU5VTEwgZm9yIHByb2JlIHRvIGJlIGNhbGxlZCAqLwogCWludCAgKCpwcm9iZSkgIChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpOwkvKiBOZXcgZGV2aWNlIGluc2VydGVkICovCiAJdm9pZCAoKnJlbW92ZSkgKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwkvKiBEZXZpY2UgcmVtb3ZlZCAoTlVMTCBpZiBub3QgYSBob3QtcGx1ZyBjYXBhYmxlIGRyaXZlcikgKi8KQEAgLTMzOCw2ICszMzcsNyBAQAogc3RydWN0IHBjaV9kZXYgKnBjaV9maW5kX2RldmljZV9yZXZlcnNlICh1bnNpZ25lZCBpbnQgdmVuZG9yLCB1bnNpZ25lZCBpbnQgZGV2aWNlLCBjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZnJvbSk7CiBzdHJ1Y3QgcGNpX2RldiAqcGNpX2ZpbmRfc2xvdCAodW5zaWduZWQgaW50IGJ1cywgdW5zaWduZWQgaW50IGRldmZuKTsKIGludCBwY2lfZmluZF9jYXBhYmlsaXR5IChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2FwKTsKK2ludCBwY2lfZmluZF9uZXh0X2NhcGFiaWxpdHkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHBvcywgaW50IGNhcCk7CiBpbnQgcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjYXApOwogc3RydWN0IHBjaV9idXMgKiBwY2lfZmluZF9uZXh0X2J1cyhjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqZnJvbSk7CiAKQEAgLTQzMiw4ICs0MzIsMTMgQEAKIAkJCSAgIHZvaWQgKmFsaWduZl9kYXRhKTsKIHZvaWQgcGNpX2VuYWJsZV9icmlkZ2VzKHN0cnVjdCBwY2lfYnVzICpidXMpOwogCi0vKiBOZXctc3R5bGUgcHJvYmluZyBzdXBwb3J0aW5nIGhvdC1wbHVnZ2FibGUgZGV2aWNlcyAqLwotaW50IHBjaV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKik7CisvKiBQcm9wZXIgcHJvYmluZyBzdXBwb3J0aW5nIGhvdC1wbHVnZ2FibGUgZGV2aWNlcyAqLworaW50IF9fcGNpX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqLCBzdHJ1Y3QgbW9kdWxlICopOworc3RhdGljIGlubGluZSBpbnQgcGNpX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqZHJpdmVyKQoreworCXJldHVybiBfX3BjaV9yZWdpc3Rlcl9kcml2ZXIoZHJpdmVyLCBUSElTX01PRFVMRSk7Cit9CisKIHZvaWQgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY2lfZHJpdmVyICopOwogdm9pZCBwY2lfcmVtb3ZlX2JlaGluZF9icmlkZ2Uoc3RydWN0IHBjaV9kZXYgKik7CiBzdHJ1Y3QgcGNpX2RyaXZlciAqcGNpX2Rldl9kcml2ZXIoY29uc3Qgc3RydWN0IHBjaV9kZXYgKik7CkBAIC01NDcsOSArNTUyLDExIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsgfQogc3RhdGljIGlubGluZSBpbnQgcGNpX3NldF9kbWFfbWFzayhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1NjQgbWFzaykgeyByZXR1cm4gLUVJTzsgfQogc3RhdGljIGlubGluZSBpbnQgcGNpX2Fzc2lnbl9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaSkgeyByZXR1cm4gLUVCVVNZO30KK3N0YXRpYyBpbmxpbmUgaW50IF9fcGNpX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2LCBzdHJ1Y3QgbW9kdWxlICpvd25lcikgeyByZXR1cm4gMDt9CiBzdGF0aWMgaW5saW5lIGludCBwY2lfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYpIHsgcmV0dXJuIDA7fQogc3RhdGljIGlubGluZSB2b2lkIHBjaV91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2KSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9maW5kX2NhcGFiaWxpdHkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjYXApIHtyZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgcGNpX2ZpbmRfbmV4dF9jYXBhYmlsaXR5IChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBwb3N0LCBpbnQgY2FwKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGludCBwY2lfZmluZF9leHRfY2FwYWJpbGl0eSAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGNhcCkge3JldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfbWF0Y2hfZGV2aWNlKGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMsIGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsgcmV0dXJuIE5VTEw7IH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKaW5kZXggMWExNjViNy4uMTdlMzM2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCkBAIC00Myw0ICs0MywxOSBAQAogZXh0ZXJuIGludCBwbGF0Zm9ybV9kZXZpY2VfYWRkKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogZXh0ZXJuIHZvaWQgcGxhdGZvcm1fZGV2aWNlX3B1dChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKIAorc3RydWN0IHBsYXRmb3JtX2RyaXZlciB7CisJaW50ICgqcHJvYmUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CisJaW50ICgqcmVtb3ZlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOworCXZvaWQgKCpzaHV0ZG93bikoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKKwlpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CisJaW50ICgqcmVzdW1lKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOworCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsKK307CisKK2V4dGVybiBpbnQgcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKik7CitleHRlcm4gdm9pZCBwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICopOworCisjZGVmaW5lIHBsYXRmb3JtX2dldF9kcnZkYXRhKF9kZXYpCWRldl9nZXRfZHJ2ZGF0YSgmKF9kZXYpLT5kZXYpCisjZGVmaW5lIHBsYXRmb3JtX3NldF9kcnZkYXRhKF9kZXYsZGF0YSkJZGV2X3NldF9kcnZkYXRhKCYoX2RldiktPmRldiwgKGRhdGEpKQorCiAjZW5kaWYgLyogX1BMQVRGT1JNX0RFVklDRV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggODMwMTAyMy4uMGE4ZWE4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC0xMjM2LDggKzEyMzYsNyBAQAogZXh0ZXJuIGludAkgICAgICAgc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKmZyb20sCiAJCQkJCSAgICAgICBpbnQgb2Zmc2V0LCBzdHJ1Y3QgaW92ZWMgKnRvLAogCQkJCQkgICAgICAgaW50IHNpemUpOwotZXh0ZXJuIGludAkgICAgICAgc2tiX2NvcHlfYW5kX2NzdW1fZGF0YWdyYW1faW92ZWMoY29uc3QKLQkJCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorZXh0ZXJuIGludAkgICAgICAgc2tiX2NvcHlfYW5kX2NzdW1fZGF0YWdyYW1faW92ZWMoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJCQlpbnQgaGxlbiwKIAkJCQkJCQlzdHJ1Y3QgaW92ZWMgKmlvdik7CiBleHRlcm4gdm9pZAkgICAgICAgc2tiX2ZyZWVfZGF0YWdyYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTEzMDUsNiArMTMwNCwzMCBAQAogCiBleHRlcm4gdm9pZCBfX25ldF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19za2JfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKy8qKgorICoJc2tiX2NoZWNrc3VtX2NvbXBsZXRlIC0gQ2FsY3VsYXRlIGNoZWNrc3VtIG9mIGFuIGVudGlyZSBwYWNrZXQKKyAqCUBza2I6IHBhY2tldCB0byBwcm9jZXNzCisgKgorICoJVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBjaGVja3N1bSBvdmVyIHRoZSBlbnRpcmUgcGFja2V0IHBsdXMKKyAqCXRoZSB2YWx1ZSBvZiBza2ItPmNzdW0uICBUaGUgbGF0dGVyIGNhbiBiZSB1c2VkIHRvIHN1cHBseSB0aGUKKyAqCWNoZWNrc3VtIG9mIGEgcHNldWRvIGhlYWRlciBhcyB1c2VkIGJ5IFRDUC9VRFAuICBJdCByZXR1cm5zIHRoZQorICoJY2hlY2tzdW0uCisgKgorICoJRm9yIHByb3RvY29scyB0aGF0IGNvbnRhaW4gY29tcGxldGUgY2hlY2tzdW1zIHN1Y2ggYXMgSUNNUC9UQ1AvVURQLAorICoJdGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byB2ZXJpZnkgdGhhdCBjaGVja3N1bSBvbiByZWNlaXZlZAorICoJcGFja2V0cy4gIEluIHRoYXQgY2FzZSB0aGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiB6ZXJvIGlmIHRoZQorICoJY2hlY2tzdW0gaXMgY29ycmVjdC4gIEluIHBhcnRpY3VsYXIsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gemVybworICoJaWYgc2tiLT5pcF9zdW1tZWQgaXMgQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlCisgKgloYXJkd2FyZSBoYXMgYWxyZWFkeSB2ZXJpZmllZCB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIGNoZWNrc3VtLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBza2JfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgJiYKKwkJX19za2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKTsKK30KKwogI2lmZGVmIENPTkZJR19ORVRGSUxURVIKIHN0YXRpYyBpbmxpbmUgdm9pZCBuZl9jb25udHJhY2tfcHV0KHN0cnVjdCBuZl9jb25udHJhY2sgKm5mY3QpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oIGIvaW5jbHVkZS9saW51eC9zeXNjdGwuaAppbmRleCAyMmNmNWUxLi5hYjI3OTFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKQEAgLTM5MCw2ICszOTAsNyBAQAogCU5FVF9UQ1BfQklDX0JFVEE9MTA4LAogCU5FVF9JUFY0X0lDTVBfRVJST1JTX1VTRV9JTkJPVU5EX0lGQUREUj0xMDksCiAJTkVUX1RDUF9DT05HX0NPTlRST0w9MTEwLAorCU5FVF9UQ1BfQUJDPTExMSwKIH07CiAKIGVudW0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90Y3AuaCBiL2luY2x1ZGUvbGludXgvdGNwLmgKaW5kZXggYWM0Y2E0NC4uMGUxZGE2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90Y3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RjcC5oCkBAIC0zMDcsNiArMzA3LDIxIEBACiAJc3RydWN0IHRjcF9zYWNrX2Jsb2NrIGR1cGxpY2F0ZV9zYWNrWzFdOyAvKiBELVNBQ0sgYmxvY2sgKi8KIAlzdHJ1Y3QgdGNwX3NhY2tfYmxvY2sgc2VsZWN0aXZlX2Fja3NbNF07IC8qIFRoZSBTQUNLUyB0aGVtc2VsdmVzKi8KIAorCXN0cnVjdCB0Y3Bfc2Fja19ibG9jayByZWN2X3NhY2tfY2FjaGVbNF07CisKKwkvKiBmcm9tIFNUQ1AsIHJldHJhbnMgcXVldWUgaGludGluZyAqLworCXN0cnVjdCBza19idWZmKiBsb3N0X3NrYl9oaW50OworCisJc3RydWN0IHNrX2J1ZmYgKnNjb3JlYm9hcmRfc2tiX2hpbnQ7CisJc3RydWN0IHNrX2J1ZmYgKnJldHJhbnNtaXRfc2tiX2hpbnQ7CisJc3RydWN0IHNrX2J1ZmYgKmZvcndhcmRfc2tiX2hpbnQ7CisJc3RydWN0IHNrX2J1ZmYgKmZhc3RwYXRoX3NrYl9oaW50OworCisJaW50ICAgICBmYXN0cGF0aF9jbnRfaGludDsKKwlpbnQgICAgIGxvc3RfY250X2hpbnQ7CisJaW50ICAgICByZXRyYW5zbWl0X2NudF9oaW50OworCWludCAgICAgZm9yd2FyZF9jbnRfaGludDsKKwogCV9fdTE2CWFkdm1zczsJCS8qIEFkdmVydGlzZWQgTVNTCQkJKi8KIAlfX3UxNglwcmlvcl9zc3RocmVzaDsgLyogc3N0aHJlc2ggc2F2ZWQgYXQgcmVjb3Zlcnkgc3RhcnQJKi8KIAlfX3UzMglsb3N0X291dDsJLyogTG9zdCBwYWNrZXRzCQkJKi8KQEAgLTMyNiw2ICszNDEsNyBAQAogCV9fdTMyCXNuZF91cDsJCS8qIFVyZ2VudCBwb2ludGVyCQkqLwogCiAJX191MzIJdG90YWxfcmV0cmFuczsJLyogVG90YWwgcmV0cmFuc21pdHMgZm9yIGVudGlyZSBjb25uZWN0aW9uICovCisJX191MzIJYnl0ZXNfYWNrZWQ7CS8qIEFwcHJvcHJpYXRlIEJ5dGUgQ291bnRpbmcgLSBSRkMzNDY1ICovCiAKIAl1bnNpZ25lZCBpbnQJCWtlZXBhbGl2ZV90aW1lOwkgIC8qIHRpbWUgYmVmb3JlIGtlZXAgYWxpdmUgdGFrZXMgcGxhY2UgKi8KIAl1bnNpZ25lZCBpbnQJCWtlZXBhbGl2ZV9pbnR2bDsgIC8qIHRpbWUgaW50ZXJ2YWwgYmV0d2VlbiBrZWVwIGFsaXZlIHByb2JlcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IGZmMTNjNGMuLjk4MmI0ZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTEyNDcsNiArMTI0NywxMiBAQAogCQkgICAgIChza2IgIT0gKHN0cnVjdCBza19idWZmICopJihzayktPnNrX3dyaXRlX3F1ZXVlKTsJXAogCQkgICAgIHNrYiA9IHNrYi0+bmV4dCkKIAorLypmcm9tIFNUQ1AgZm9yIGZhc3QgU0FDSyBQcm9jZXNzKi8KKyNkZWZpbmUgc2tfc3RyZWFtX2Zvcl9yZXRyYW5zX3F1ZXVlX2Zyb20oc2tiLCBzaykJCQlcCisJCWZvciAoOyAoc2tiICE9IChzayktPnNrX3NlbmRfaGVhZCkgJiYgICAgICAgICAgICAgICAgICAgXAorCQkgICAgIChza2IgIT0gKHN0cnVjdCBza19idWZmICopJihzayktPnNrX3dyaXRlX3F1ZXVlKTsJXAorCQkgICAgIHNrYiA9IHNrYi0+bmV4dCkKKwogLyoKICAqCURlZmF1bHQgd3JpdGUgcG9saWN5IGFzIHNob3duIHRvIHVzZXIgc3BhY2UgdmlhIHBvbGwvc2VsZWN0L1NJR0lPCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmgKaW5kZXggYzI0MzM5Yy4uMGY5ODQ4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmgKKysrIGIvaW5jbHVkZS9uZXQvdGNwLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KIAogI2luY2x1ZGUgPG5ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oPgogI2luY2x1ZGUgPG5ldC9pbmV0X3RpbWV3YWl0X3NvY2suaD4KQEAgLTg4LDEwICs4OSwxMCBAQAogCQkJCSAqLwogCiAjZGVmaW5lIFRDUF9TWU5fUkVUUklFUwkgNQkvKiBudW1iZXIgb2YgdGltZXMgdG8gcmV0cnkgYWN0aXZlIG9wZW5pbmcgYQotCQkJCSAqIGNvbm5lY3Rpb246IH4xODBzZWMgaXMgUkZDIG1pbnVtdW0JKi8KKwkJCQkgKiBjb25uZWN0aW9uOiB+MTgwc2VjIGlzIFJGQyBtaW5pbXVtCSovCiAKICNkZWZpbmUgVENQX1NZTkFDS19SRVRSSUVTIDUJLyogbnVtYmVyIG9mIHRpbWVzIHRvIHJldHJ5IHBhc3NpdmUgb3BlbmluZyBhCi0JCQkJICogY29ubmVjdGlvbjogfjE4MHNlYyBpcyBSRkMgbWludW11bQkqLworCQkJCSAqIGNvbm5lY3Rpb246IH4xODBzZWMgaXMgUkZDIG1pbmltdW0JKi8KIAogCiAjZGVmaW5lIFRDUF9PUlBIQU5fUkVUUklFUyA3CS8qIG51bWJlciBvZiB0aW1lcyB0byByZXRyeSBvbiBhbiBvcnBoYW5lZApAQCAtMTc5LDcgKzE4MCw3IEBACiAvKiBGbGFncyBpbiB0cC0+bm9uYWdsZSAqLwogI2RlZmluZSBUQ1BfTkFHTEVfT0ZGCQkxCS8qIE5hZ2xlJ3MgYWxnbyBpcyBkaXNhYmxlZCAqLwogI2RlZmluZSBUQ1BfTkFHTEVfQ09SSwkJMgkvKiBTb2NrZXQgaXMgY29ya2VkCSAgICAqLwotI2RlZmluZSBUQ1BfTkFHTEVfUFVTSAkJNAkvKiBDb3JrIGlzIG92ZXJyaWRlbiBmb3IgYWxyZWFkeSBxdWV1ZWQgZGF0YSAqLworI2RlZmluZSBUQ1BfTkFHTEVfUFVTSAkJNAkvKiBDb3JrIGlzIG92ZXJyaWRkZW4gZm9yIGFscmVhZHkgcXVldWVkIGRhdGEgKi8KIAogZXh0ZXJuIHN0cnVjdCBpbmV0X3RpbWV3YWl0X2RlYXRoX3JvdyB0Y3BfZGVhdGhfcm93OwogCkBAIC0yMTcsNiArMjE4LDcgQEAKIGV4dGVybiBpbnQgc3lzY3RsX3RjcF9ub21ldHJpY3Nfc2F2ZTsKIGV4dGVybiBpbnQgc3lzY3RsX3RjcF9tb2RlcmF0ZV9yY3ZidWY7CiBleHRlcm4gaW50IHN5c2N0bF90Y3BfdHNvX3dpbl9kaXZpc29yOworZXh0ZXJuIGludCBzeXNjdGxfdGNwX2FiYzsKIAogZXh0ZXJuIGF0b21pY190IHRjcF9tZW1vcnlfYWxsb2NhdGVkOwogZXh0ZXJuIGF0b21pY190IHRjcF9zb2NrZXRzX2FsbG9jYXRlZDsKQEAgLTU1MCwxMyArNTUyLDEzIEBACiAKIC8qIFRDUCB0aW1lc3RhbXBzIGFyZSBvbmx5IDMyLWJpdHMsIHRoaXMgY2F1c2VzIGEgc2xpZ2h0CiAgKiBjb21wbGljYXRpb24gb24gNjQtYml0IHN5c3RlbXMgc2luY2Ugd2Ugc3RvcmUgYSBzbmFwc2hvdAotICogb2YgamlmZmllcyBpbiB0aGUgYnVmZmVyIGNvbnRyb2wgYmxvY2tzIGJlbG93LiAgV2UgZGVjaWRlbHkKKyAqIG9mIGppZmZpZXMgaW4gdGhlIGJ1ZmZlciBjb250cm9sIGJsb2NrcyBiZWxvdy4gIFdlIGRlY2lkZWRseQogICogb25seSB1c2Ugb2YgdGhlIGxvdyAzMi1iaXRzIG9mIGppZmZpZXMgYW5kIGhpZGUgdGhlIHVnbHkKICAqIGNhc3RzIHdpdGggdGhlIGZvbGxvd2luZyBtYWNyby4KICAqLwogI2RlZmluZSB0Y3BfdGltZV9zdGFtcAkJKChfX3UzMikoamlmZmllcykpCiAKLS8qIFRoaXMgaXMgd2hhdCB0aGUgc2VuZCBwYWNrZXQgcXVldWVpbmcgZW5naW5lIHVzZXMgdG8gcGFzcworLyogVGhpcyBpcyB3aGF0IHRoZSBzZW5kIHBhY2tldCBxdWV1aW5nIGVuZ2luZSB1c2VzIHRvIHBhc3MKICAqIFRDUCBwZXItcGFja2V0IGNvbnRyb2wgaW5mb3JtYXRpb24gdG8gdGhlIHRyYW5zbWlzc2lvbgogICogY29kZS4gIFdlIGFsc28gc3RvcmUgdGhlIGhvc3Qtb3JkZXIgc2VxdWVuY2UgbnVtYmVycyBpbgogICogaGVyZSB0b28uICBUaGlzIGlzIDM2IGJ5dGVzIG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzLApAQCAtNTk2LDcgKzU5OCw3IEBACiAjZGVmaW5lIFRDUENCX0VWRVJfUkVUUkFOUwkweDgwCS8qIEV2ZXIgcmV0cmFuc21pdHRlZCBmcmFtZQkqLwogI2RlZmluZSBUQ1BDQl9SRVRSQU5TCQkoVENQQ0JfU0FDS0VEX1JFVFJBTlN8VENQQ0JfRVZFUl9SRVRSQU5TKQogCi0jZGVmaW5lIFRDUENCX1VSRwkJMHgyMAkvKiBVcmdlbnQgcG9pbnRlciBhZHZlbmNlZCBoZXJlCSovCisjZGVmaW5lIFRDUENCX1VSRwkJMHgyMAkvKiBVcmdlbnQgcG9pbnRlciBhZHZhbmNlZCBoZXJlCSovCiAKICNkZWZpbmUgVENQQ0JfQVRfVEFJTAkJKFRDUENCX1VSRykKIApAQCAtNzY0LDYgKzc2NiwzMyBAQAogCQkJICAgICh0cC0+c25kX2N3bmQgPj4gMikpKTsKIH0KIAorLyoKKyAqIExpbmVhciBpbmNyZWFzZSBkdXJpbmcgc2xvdyBzdGFydAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdGNwX3Nsb3dfc3RhcnQoc3RydWN0IHRjcF9zb2NrICp0cCkKK3sKKwlpZiAoc3lzY3RsX3RjcF9hYmMpIHsKKwkJLyogUkZDMzQ2NTogU2xvdyBTdGFydAorCQkgKiBUQ1Agc2VuZGVyIFNIT1VMRCBpbmNyZWFzZSBjd25kIGJ5IHRoZSBudW1iZXIgb2YKKwkJICogcHJldmlvdXNseSB1bmFja25vd2xlZGdlZCBieXRlcyBBQ0tlZCBieSBlYWNoIGluY29taW5nCisJCSAqIGFja25vd2xlZGdtZW50LCBwcm92aWRlZCB0aGUgaW5jcmVhc2UgaXMgbm90IG1vcmUgdGhhbiBMCisJCSAqLworCQlpZiAodHAtPmJ5dGVzX2Fja2VkIDwgdHAtPm1zc19jYWNoZSkKKwkJCXJldHVybjsKKworCQkvKiBXZSBNQVkgaW5jcmVhc2UgYnkgMiBpZiBkaXNjb3ZlcmVkIGRlbGF5ZWQgYWNrICovCisJCWlmIChzeXNjdGxfdGNwX2FiYyA+IDEgJiYgdHAtPmJ5dGVzX2Fja2VkID4gMip0cC0+bXNzX2NhY2hlKSB7CisJCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQorCQkJCXRwLT5zbmRfY3duZCsrOworCQl9CisJfQorCXRwLT5ieXRlc19hY2tlZCA9IDA7CisKKwlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQorCQl0cC0+c25kX2N3bmQrKzsKK30KKworCiBzdGF0aWMgaW5saW5lIHZvaWQgdGNwX3N5bmNfbGVmdF9vdXQoc3RydWN0IHRjcF9zb2NrICp0cCkKIHsKIAlpZiAodHAtPnJ4X29wdC5zYWNrX29rICYmCkBAIC03OTMsNiArODIyLDcgQEAKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAogCXRwLT5wcmlvcl9zc3RocmVzaCA9IDA7CisJdHAtPmJ5dGVzX2Fja2VkID0gMDsKIAlpZiAoaW5ldF9jc2soc2spLT5pY3NrX2NhX3N0YXRlIDwgVENQX0NBX0NXUikgewogCQlfX3RjcF9lbnRlcl9jd3Ioc2spOwogCQl0Y3Bfc2V0X2NhX3N0YXRlKHNrLCBUQ1BfQ0FfQ1dSKTsKQEAgLTgwOSw2ICs4MzksMjcgQEAKIAlyZXR1cm4gMzsKIH0KIAorLyogUkZDMjg2MSBDaGVjayB3aGV0aGVyIHdlIGFyZSBsaW1pdGVkIGJ5IGFwcGxpY2F0aW9uIG9yIGNvbmdlc3Rpb24gd2luZG93CisgKiBUaGlzIGlzIHRoZSBpbnZlcnNlIG9mIGN3bmQgY2hlY2sgaW4gdGNwX3Rzb19zaG91bGRfZGVmZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgdGNwX2lzX2N3bmRfbGltaXRlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHUzMiBpbl9mbGlnaHQpCit7CisJY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJdTMyIGxlZnQ7CisKKwlpZiAoaW5fZmxpZ2h0ID49IHRwLT5zbmRfY3duZCkKKwkJcmV0dXJuIDE7CisKKwlpZiAoIShzay0+c2tfcm91dGVfY2FwcyAmIE5FVElGX0ZfVFNPKSkKKwkJcmV0dXJuIDA7CisKKwlsZWZ0ID0gdHAtPnNuZF9jd25kIC0gaW5fZmxpZ2h0OworCWlmIChzeXNjdGxfdGNwX3Rzb193aW5fZGl2aXNvcikKKwkJcmV0dXJuIGxlZnQgKiBzeXNjdGxfdGNwX3Rzb193aW5fZGl2aXNvciA8IHRwLT5zbmRfY3duZDsKKwllbHNlCisJCXJldHVybiBsZWZ0IDw9IHRjcF9tYXhfYnVyc3QodHApOworfQorCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHRjcF9taW5zaGFsbF91cGRhdGUoc3RydWN0IHRjcF9zb2NrICp0cCwgaW50IG1zcywgCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC04NTIsNyArOTAzLDcgQEAKIAogc3RhdGljIF9faW5saW5lX18gaW50IF9fdGNwX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JcmV0dXJuICh1bnNpZ25lZCBzaG9ydCljc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIHNrYi0+Y3N1bSkpOworCXJldHVybiBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpOwogfQogCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGNwX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IpCkBAIC0xMTU2LDYgKzEyMDcsMTUgQEAKIAlUQ1BfQUREX1NUQVRTX1VTRVIoVENQX01JQl9NQVhDT05OLCAtMSk7CiB9CiAKKy8qZnJvbSBTVENQICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfYWxsX3JldHJhbnNfaGludHMoc3RydWN0IHRjcF9zb2NrICp0cCl7CisJdHAtPmxvc3Rfc2tiX2hpbnQgPSBOVUxMOworCXRwLT5zY29yZWJvYXJkX3NrYl9oaW50ID0gTlVMTDsKKwl0cC0+cmV0cmFuc21pdF9za2JfaGludCA9IE5VTEw7CisJdHAtPmZvcndhcmRfc2tiX2hpbnQgPSBOVUxMOworCXRwLT5mYXN0cGF0aF9za2JfaGludCA9IE5VTEw7Cit9CisKIC8qIC9wcm9jICovCiBlbnVtIHRjcF9zZXFfc3RhdGVzIHsKIAlUQ1BfU0VRX1NUQVRFX0xJU1RFTklORywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl91c2VyX3ZlcmJzLmggYi9pbmNsdWRlL3JkbWEvaWJfdXNlcl92ZXJicy5oCmluZGV4IDA3MmYzYTIuLjVmZjE0OTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl91c2VyX3ZlcmJzLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX3VzZXJfdmVyYnMuaApAQCAtNDMsNyArNDMsNyBAQAogICogSW5jcmVtZW50IHRoaXMgdmFsdWUgaWYgYW55IGNoYW5nZXMgdGhhdCBicmVhayB1c2Vyc3BhY2UgQUJJCiAgKiBjb21wYXRpYmlsaXR5IGFyZSBtYWRlLgogICovCi0jZGVmaW5lIElCX1VTRVJfVkVSQlNfQUJJX1ZFUlNJT04JMworI2RlZmluZSBJQl9VU0VSX1ZFUkJTX0FCSV9WRVJTSU9OCTQKIAogZW51bSB7CiAJSUJfVVNFUl9WRVJCU19DTURfR0VUX0NPTlRFWFQsCkBAIC0zMzMsNiArMzMzLDExIEBACiBzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9xcF9yZXNwIHsKIAlfX3UzMiBxcF9oYW5kbGU7CiAJX191MzIgcXBuOworCV9fdTMyIG1heF9zZW5kX3dyOworCV9fdTMyIG1heF9yZWN2X3dyOworCV9fdTMyIG1heF9zZW5kX3NnZTsKKwlfX3UzMiBtYXhfcmVjdl9zZ2U7CisJX191MzIgbWF4X2lubGluZV9kYXRhOwogfTsKIAogLyoKQEAgLTU1Miw5ICs1NTcsNyBAQAogCV9fdTMyIHNycV9oYW5kbGU7CiAJX191MzIgYXR0cl9tYXNrOwogCV9fdTMyIG1heF93cjsKLQlfX3UzMiBtYXhfc2dlOwogCV9fdTMyIHNycV9saW1pdDsKLQlfX3UzMiByZXNlcnZlZDsKIAlfX3U2NCBkcml2ZXJfZGF0YVswXTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oIGIvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKaW5kZXggZjcyZDQ2ZC4uYTdmNGMzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKQEAgLTg4MSw3ICs4ODEsNyBAQAogCQkJCQkJc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LAogCQkJCQkJc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgKCpkZXN0cm95X2NxKShzdHJ1Y3QgaWJfY3EgKmNxKTsKLQlpbnQgICAgICAgICAgICAgICAgICAgICAgICAoKnJlc2l6ZV9jcSkoc3RydWN0IGliX2NxICpjcSwgaW50ICpjcWUpOworCWludCAgICAgICAgICAgICAgICAgICAgICAgICgqcmVzaXplX2NxKShzdHJ1Y3QgaWJfY3EgKmNxLCBpbnQgY3FlKTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAoKnBvbGxfY3EpKHN0cnVjdCBpYl9jcSAqY3EsIGludCBudW1fZW50cmllcywKIAkJCQkJICAgICAgc3RydWN0IGliX3djICp3Yyk7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgKCpwZWVrX2NxKShzdHJ1Y3QgaWJfY3EgKmNxLCBpbnQgd2NfY250KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zaWduYWwuYyBiL2tlcm5lbC9zaWduYWwuYwppbmRleCAxYmYzYzM5Li44MDc4OWE1IDEwMDY0NAotLS0gYS9rZXJuZWwvc2lnbmFsLmMKKysrIGIva2VybmVsL3NpZ25hbC5jCkBAIC0xNDk5LDcgKzE0OTksNyBAQAogCiAJcHNpZyA9IHRzay0+cGFyZW50LT5zaWdoYW5kOwogCXNwaW5fbG9ja19pcnFzYXZlKCZwc2lnLT5zaWdsb2NrLCBmbGFncyk7Ci0JaWYgKHNpZyA9PSBTSUdDSExEICYmCisJaWYgKCF0c2stPnB0cmFjZSAmJiBzaWcgPT0gU0lHQ0hMRCAmJgogCSAgICAocHNpZy0+YWN0aW9uW1NJR0NITEQtMV0uc2Euc2FfaGFuZGxlciA9PSBTSUdfSUdOIHx8CiAJICAgICAocHNpZy0+YWN0aW9uW1NJR0NITEQtMV0uc2Euc2FfZmxhZ3MgJiBTQV9OT0NMRFdBSVQpKSkgewogCQkvKgpkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IGM0M2IzZTIuLmJjZTkzM2UgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXMuYworKysgYi9rZXJuZWwvc3lzLmMKQEAgLTE0OTcsNiArMTQ5Nyw4IEBACiAKIERFQ0xBUkVfUldTRU0odXRzX3NlbSk7CiAKK0VYUE9SVF9TWU1CT0wodXRzX3NlbSk7CisKIGFzbWxpbmthZ2UgbG9uZyBzeXNfbmV3dW5hbWUoc3RydWN0IG5ld191dHNuYW1lIF9fdXNlciAqIG5hbWUpCiB7CiAJaW50IGVycm5vID0gMDsKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCBmZjgxYjVjLi45ODcyMjViIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKKysrIGIvbW0vcGFnZV9hbGxvYy5jCkBAIC0xMzMwLDcgKzEzMzAsNyBAQAogCQl9IGVsc2UKIAkJCXByaW50aygiXG4iKTsKIAotCQlmb3JfZWFjaF9jcHUoY3B1KSB7CisJCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCQlzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0ICpwYWdlc2V0OwogCiAJCQlwYWdlc2V0ID0gem9uZV9wY3Aoem9uZSwgY3B1KTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2RhdGFncmFtLmMgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCmluZGV4IGQyMTk0MzUuLjFiY2ZlZjUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmMKKysrIGIvbmV0L2NvcmUvZGF0YWdyYW0uYwpAQCAtMzUwLDYgKzM1MCwyMCBAQAogCXJldHVybiAtRUZBVUxUOwogfQogCit1bnNpZ25lZCBpbnQgX19za2JfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwl1bnNpZ25lZCBpbnQgc3VtOworCisJc3VtID0gKHUxNiljc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIHNrYi0+Y3N1bSkpOworCWlmIChsaWtlbHkoIXN1bSkpIHsKKwkJaWYgKHVubGlrZWx5KHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXKSkKKwkJCW5ldGRldl9yeF9jc3VtX2ZhdWx0KHNrYi0+ZGV2KTsKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwl9CisJcmV0dXJuIHN1bTsKK30KK0VYUE9SVF9TWU1CT0woX19za2JfY2hlY2tzdW1fY29tcGxldGUpOworCiAvKioKICAqCXNrYl9jb3B5X2FuZF9jc3VtX2RhdGFncmFtX2lvdmVjIC0gQ29weSBhbmQgY2hlY2t1bSBza2IgdG8gdXNlciBpb3ZlYy4KICAqCUBza2I6IHNrYnVmZgpAQCAtMzYzLDcgKzM3Nyw3IEBACiAgKgkJIC1FRkFVTFQgLSBmYXVsdCBkdXJpbmcgY29weS4gQmV3YXJlLCBpbiB0aGlzIGNhc2UgaW92ZWMKICAqCQkJICAgY2FuIGJlIG1vZGlmaWVkIQogICovCi1pbnQgc2tiX2NvcHlfYW5kX2NzdW1fZGF0YWdyYW1faW92ZWMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2ludCBza2JfY29weV9hbmRfY3N1bV9kYXRhZ3JhbV9pb3ZlYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgaW50IGhsZW4sIHN0cnVjdCBpb3ZlYyAqaW92KQogewogCXVuc2lnbmVkIGludCBjc3VtOwpAQCAtMzc2LDggKzM5MCw3IEBACiAJCWlvdisrOwogCiAJaWYgKGlvdi0+aW92X2xlbiA8IGNodW5rKSB7Ci0JCWlmICgodW5zaWduZWQgc2hvcnQpY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIDAsIGNodW5rICsgaGxlbiwKLQkJCQkJCQkgICBza2ItPmNzdW0pKSkKKwkJaWYgKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpCiAJCQlnb3RvIGNzdW1fZXJyb3I7CiAJCWlmIChza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyhza2IsIGhsZW4sIGlvdiwgY2h1bmspKQogCQkJZ290byBmYXVsdDsKQEAgLTM4OCw2ICs0MDEsOCBAQAogCQkJZ290byBmYXVsdDsKIAkJaWYgKCh1bnNpZ25lZCBzaG9ydCljc3VtX2ZvbGQoY3N1bSkpCiAJCQlnb3RvIGNzdW1fZXJyb3I7CisJCWlmICh1bmxpa2VseShza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykpCisJCQluZXRkZXZfcnhfY3N1bV9mYXVsdChza2ItPmRldik7CiAJCWlvdi0+aW92X2xlbiAtPSBjaHVuazsKIAkJaW92LT5pb3ZfYmFzZSArPSBjaHVuazsKIAl9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDhkMTU0MTUuLjBiNDhlMjkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC0xMTA4LDYgKzExMDgsMTggQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKiBUYWtlIGFjdGlvbiB3aGVuIGhhcmR3YXJlIHJlY2VwdGlvbiBjaGVja3N1bSBlcnJvcnMgYXJlIGRldGVjdGVkLiAqLworI2lmZGVmIENPTkZJR19CVUcKK3ZvaWQgbmV0ZGV2X3J4X2NzdW1fZmF1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGh3IGNzdW0gZmFpbHVyZS5cbiIsIGRldi0+bmFtZSk7CisJCWR1bXBfc3RhY2soKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKG5ldGRldl9yeF9jc3VtX2ZhdWx0KTsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KIC8qIEFjdHVhbGx5LCB3ZSBzaG91bGQgZWxpbWluYXRlIHRoaXMgY2hlY2sgYXMgc29vbiBhcyB3ZSBrbm93LCB0aGF0OgogICogMS4gSU9NTVUgaXMgcHJlc2VudCBhbmQgYWxsb3dzIHRvIG1hcCBhbGwgdGhlIG1lbW9yeS4KZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldHBvbGwuYyBiL25ldC9jb3JlL25ldHBvbGwuYwppbmRleCA4MDJmZTExLi40OTQyNGE0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRwb2xsLmMKKysrIGIvbmV0L2NvcmUvbmV0cG9sbC5jCkBAIC0xMDEsMTYgKzEwMSwyMCBAQAogc3RhdGljIGludCBjaGVja3N1bV91ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHVkcGhkciAqdWgsCiAJCQkgICAgIHVuc2lnbmVkIHNob3J0IHVsZW4sIHUzMiBzYWRkciwgdTMyIGRhZGRyKQogewotCWlmICh1aC0+Y2hlY2sgPT0gMCkKKwl1bnNpZ25lZCBpbnQgcHN1bTsKKworCWlmICh1aC0+Y2hlY2sgPT0gMCB8fCBza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcpCi0JCXJldHVybiBjc3VtX3RjcHVkcF9tYWdpYygKLQkJCXNhZGRyLCBkYWRkciwgdWxlbiwgSVBQUk9UT19VRFAsIHNrYi0+Y3N1bSk7CisJcHN1bSA9IGNzdW1fdGNwdWRwX25vZm9sZChzYWRkciwgZGFkZHIsIHVsZW4sIElQUFJPVE9fVURQLCAwKTsKIAotCXNrYi0+Y3N1bSA9IGNzdW1fdGNwdWRwX25vZm9sZChzYWRkciwgZGFkZHIsIHVsZW4sIElQUFJPVE9fVURQLCAwKTsKKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcgJiYKKwkgICAgISh1MTYpY3N1bV9mb2xkKGNzdW1fYWRkKHBzdW0sIHNrYi0+Y3N1bSkpKQorCQlyZXR1cm4gMDsKIAotCXJldHVybiBjc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIHNrYi0+Y3N1bSkpOworCXNrYi0+Y3N1bSA9IHBzdW07CisKKwlyZXR1cm4gX19za2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKTsKIH0KIAogLyoKQEAgLTQ4OSw3ICs0OTMsNyBAQAogCiAJaWYgKHVsZW4gIT0gbGVuKQogCQlnb3RvIG91dDsKLQlpZiAoY2hlY2tzdW1fdWRwKHNrYiwgdWgsIHVsZW4sIGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIpIDwgMCkKKwlpZiAoY2hlY2tzdW1fdWRwKHNrYiwgdWgsIHVsZW4sIGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIpKQogCQlnb3RvIG91dDsKIAlpZiAobnAtPmxvY2FsX2lwICYmIG5wLT5sb2NhbF9pcCAhPSBudG9obChpcGgtPmRhZGRyKSkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2FmX2RlY25ldC5jIGIvbmV0L2RlY25ldC9hZl9kZWNuZXQuYwppbmRleCAzZjI1Y2FkLi5mODllNTVmIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2FmX2RlY25ldC5jCisrKyBiL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMKQEAgLTE2NjQsMTcgKzE2NjQsMTUgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJaWYgKHNrLT5za19zaHV0ZG93biAmIFJDVl9TSFVURE9XTikgeworCQlydiA9IDA7CisJCWdvdG8gb3V0OworCX0KKwogCXJ2ID0gZG5fY2hlY2tfc3RhdGUoc2ssIE5VTEwsIDAsICZ0aW1lbywgZmxhZ3MpOwogCWlmIChydikKIAkJZ290byBvdXQ7CiAKLQlpZiAoc2stPnNrX3NodXRkb3duICYgUkNWX1NIVVRET1dOKSB7Ci0JCWlmICghKGZsYWdzICYgTVNHX05PU0lHTkFMKSkKLQkJCXNlbmRfc2lnKFNJR1BJUEUsIGN1cnJlbnQsIDApOwotCQlydiA9IC1FUElQRTsKLQkJZ290byBvdXQ7Ci0JfQotCiAJaWYgKGZsYWdzICYgfihNU0dfUEVFS3xNU0dfT09CfE1TR19XQUlUQUxMfE1TR19ET05UV0FJVHxNU0dfTk9TSUdOQUwpKSB7CiAJCXJ2ID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwpAQCAtMTkyOCw2ICsxOTI2LDggQEAKIAogCWlmIChzay0+c2tfc2h1dGRvd24gJiBTRU5EX1NIVVRET1dOKSB7CiAJCWVyciA9IC1FUElQRTsKKwkJaWYgKCEoZmxhZ3MgJiBNU0dfTk9TSUdOQUwpKQorCQkJc2VuZF9zaWcoU0lHUElQRSwgY3VycmVudCwgMCk7CiAJCWdvdG8gb3V0X2VycjsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ljbXAuYyBiL25ldC9pcHY0L2ljbXAuYwppbmRleCAxNzVlMDkzLi5lM2VjZWVjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pY21wLmMKKysrIGIvbmV0L2lwdjQvaWNtcC5jCkBAIC05MzQsMTEgKzkzNCwxMSBAQAogCWNhc2UgQ0hFQ0tTVU1fSFc6CiAJCWlmICghKHUxNiljc3VtX2ZvbGQoc2tiLT5jc3VtKSkKIAkJCWJyZWFrOwotCQlMSU1JVF9ORVRERUJVRyhLRVJOX0RFQlVHICJpY21wIHY0IGh3IGNzdW0gZmFpbHVyZVxuIik7CisJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgQ0hFQ0tTVU1fTk9ORToKLQkJaWYgKCh1MTYpY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIDAsIHNrYi0+bGVuLCAwKSkpCisJCXNrYi0+Y3N1bSA9IDA7CisJCWlmIChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKQogCQkJZ290byBlcnJvcjsKLQlkZWZhdWx0OjsKIAl9CiAKIAlpZiAoIXBza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaWNtcGhkcikpKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWdtcC5jIGIvbmV0L2lwdjQvaWdtcC5jCmluZGV4IGM2MjQ3ZmMuLmMwNDYwN2IgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lnbXAuYworKysgYi9uZXQvaXB2NC9pZ21wLmMKQEAgLTg3MiwxMSArODcyLDE4IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaWdtcGhkcikpIHx8IAotCSAgICAodTE2KWNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCAwLCBsZW4sIDApKSkgewotCQlpbl9kZXZfcHV0KGluX2Rldik7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlnbXBoZHIpKSkKKwkJZ290byBkcm9wOworCisJc3dpdGNoIChza2ItPmlwX3N1bW1lZCkgeworCWNhc2UgQ0hFQ0tTVU1fSFc6CisJCWlmICghKHUxNiljc3VtX2ZvbGQoc2tiLT5jc3VtKSkKKwkJCWJyZWFrOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIENIRUNLU1VNX05PTkU6CisJCXNrYi0+Y3N1bSA9IDA7CisJCWlmIChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKQorCQkJZ290byBkcm9wOwogCX0KIAogCWloID0gc2tiLT5oLmlnbXBoOwpAQCAtOTA2LDYgKzkxMyw4IEBACiAJZGVmYXVsdDoKIAkJTkVUREVCVUcoS0VSTl9ERUJVRyAiTmV3IElHTVAgdHlwZT0lZCwgd2h5IHdlIGRvIG5vdCBrbm93IGFib3V0IGl0P1xuIiwgaWgtPnR5cGUpOwogCX0KKworZHJvcDoKIAlpbl9kZXZfcHV0KGluX2Rldik7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9ncmUuYyBiL25ldC9pcHY0L2lwX2dyZS5jCmluZGV4IDg5NmNlM2YuLjRlOWM3NGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2dyZS5jCisrKyBiL25ldC9pcHY0L2lwX2dyZS5jCkBAIC01NzcsMTUgKzU3NywxNiBAQAogCQkJZ290byBkcm9wX25vbG9jazsKIAogCQlpZiAoZmxhZ3MmR1JFX0NTVU0pIHsKLQkJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykgeworCQkJc3dpdGNoIChza2ItPmlwX3N1bW1lZCkgeworCQkJY2FzZSBDSEVDS1NVTV9IVzoKIAkJCQljc3VtID0gKHUxNiljc3VtX2ZvbGQoc2tiLT5jc3VtKTsKLQkJCQlpZiAoY3N1bSkKLQkJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCQkJfQotCQkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX05PTkUpIHsKLQkJCQlza2ItPmNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCAwLCBza2ItPmxlbiwgMCk7CisJCQkJaWYgKCFjc3VtKQorCQkJCQlicmVhazsKKwkJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJCWNhc2UgQ0hFQ0tTVU1fTk9ORToKKwkJCQlza2ItPmNzdW0gPSAwOworCQkJCWNzdW0gPSBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpOwogCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fSFc7Ci0JCQkJY3N1bSA9ICh1MTYpY3N1bV9mb2xkKHNrYi0+Y3N1bSk7CiAJCQl9CiAJCQlvZmZzZXQgKz0gNDsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19pY21wLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwppbmRleCA1MTk4ZjNhLi5lNGQ2YjI2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvaWNtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CkBAIC0yMzAsMTkgKzIzMSwxNSBAQAogCWNhc2UgQ0hFQ0tTVU1fSFc6CiAJCWlmICghKHUxNiljc3VtX2ZvbGQoc2tiLT5jc3VtKSkgCiAJCQlicmVhazsKLQkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fSUNNUCkpCi0JCQluZl9sb2dfcGFja2V0KFBGX0lORVQsIDAsIHNrYiwgTlVMTCwgTlVMTCwgTlVMTCwKLQkJCQkgICAgICAiaXBfY3RfaWNtcDogYmFkIEhXIElDTVAgY2hlY2tzdW0gIik7Ci0JCXJldHVybiAtTkZfQUNDRVBUOworCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIENIRUNLU1VNX05PTkU6Ci0JCWlmICgodTE2KWNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCAwLCBza2ItPmxlbiwgMCkpKSB7CisJCXNrYi0+Y3N1bSA9IDA7CisJCWlmIChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKSB7CiAJCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19JQ01QKSkKIAkJCQluZl9sb2dfcGFja2V0KFBGX0lORVQsIDAsIHNrYiwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJCQkJICAgICAgImlwX2N0X2ljbXA6IGJhZCBJQ01QIGNoZWNrc3VtICIpOwogCQkJcmV0dXJuIC1ORl9BQ0NFUFQ7CiAJCX0KLQlkZWZhdWx0OgotCQlicmVhazsKIAl9CiAKIGNoZWNrc3VtX3NraXBwZWQ6CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCmluZGV4IDY1MjY4NTYuLjAxNDQ0YTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCisrKyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCkBAIC02NDUsNiArNjQ1LDE0IEBACiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY190Y3BfY29uZ2VzdGlvbl9jb250cm9sLAogCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX3RjcF9jb25nZXN0aW9uX2NvbnRyb2wsCiAJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9UQ1BfQUJDLAorCQkucHJvY25hbWUJPSAidGNwX2FiYyIsCisJCS5kYXRhCQk9ICZzeXNjdGxfdGNwX2FiYywKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCX0sCiAKIAl7IC5jdGxfbmFtZSA9IDAgfQogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggNzJiN2MyMi4uOWFjN2E0ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKKysrIGIvbmV0L2lwdjQvdGNwLmMKQEAgLTE2NDAsNyArMTY0MCw3IEBACiAJfSBlbHNlIGlmICh0Y3BfbmVlZF9yZXNldChvbGRfc3RhdGUpIHx8CiAJCSAgICh0cC0+c25kX254dCAhPSB0cC0+d3JpdGVfc2VxICYmCiAJCSAgICAoMSA8PCBvbGRfc3RhdGUpICYgKFRDUEZfQ0xPU0lORyB8IFRDUEZfTEFTVF9BQ0spKSkgewotCQkvKiBUaGUgbGFzdCBjaGVjayBhZGp1c3RzIGZvciBkaXNjcmVwYW5jZSBvZiBMaW51eCB3cnQuIFJGQworCQkvKiBUaGUgbGFzdCBjaGVjayBhZGp1c3RzIGZvciBkaXNjcmVwYW5jeSBvZiBMaW51eCB3cnQuIFJGQwogCQkgKiBzdGF0ZXMKIAkJICovCiAJCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgZ2ZwX2FueSgpKTsKQEAgLTE2NjksNiArMTY2OSw3IEBACiAJdHAtPnBhY2tldHNfb3V0ID0gMDsKIAl0cC0+c25kX3NzdGhyZXNoID0gMHg3ZmZmZmZmZjsKIAl0cC0+c25kX2N3bmRfY250ID0gMDsKKwl0cC0+Ynl0ZXNfYWNrZWQgPSAwOwogCXRjcF9zZXRfY2Ffc3RhdGUoc2ssIFRDUF9DQV9PcGVuKTsKIAl0Y3BfY2xlYXJfcmV0cmFucyh0cCk7CiAJaW5ldF9jc2tfZGVsYWNrX2luaXQoc2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JpYy5jIGIvbmV0L2lwdjQvdGNwX2JpYy5jCmluZGV4IGFlMzVlMDYuLjFkMGNkODYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9iaWMuYworKysgYi9uZXQvaXB2NC90Y3BfYmljLmMKQEAgLTIxNywxNyArMjE3LDE1IEBACiAKIAliaWN0Y3BfbG93X3V0aWxpemF0aW9uKHNrLCBkYXRhX2Fja2VkKTsKIAotCWlmIChpbl9mbGlnaHQgPCB0cC0+c25kX2N3bmQpCisJaWYgKCF0Y3BfaXNfY3duZF9saW1pdGVkKHNrLCBpbl9mbGlnaHQpKQogCQlyZXR1cm47CiAKLQlpZiAodHAtPnNuZF9jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpIHsKLQkJLyogSW4gInNhZmUiIGFyZWEsIGluY3JlYXNlLiAqLwotCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJdHAtPnNuZF9jd25kKys7Ci0JfSBlbHNlIHsKKwlpZiAodHAtPnNuZF9jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpCisJCXRjcF9zbG93X3N0YXJ0KHRwKTsKKwllbHNlIHsKIAkJYmljdGNwX3VwZGF0ZShjYSwgdHAtPnNuZF9jd25kKTsKIAotICAgICAgICAgICAgICAgIC8qIEluIGRhbmdlcm91cyBhcmVhLCBpbmNyZWFzZSBzbG93bHkuCisJCS8qIEluIGRhbmdlcm91cyBhcmVhLCBpbmNyZWFzZSBzbG93bHkuCiAJCSAqIEluIHRoZW9yeSB0aGlzIGlzIHRwLT5zbmRfY3duZCArPSAxIC8gdHAtPnNuZF9jd25kCiAJCSAqLwogCQlpZiAodHAtPnNuZF9jd25kX2NudCA+PSBjYS0+Y250KSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfY29uZy5jIGIvbmV0L2lwdjQvdGNwX2NvbmcuYwppbmRleCBiYmYyZDY2Li5jN2NjNjJjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfY29uZy5jCisrKyBiL25ldC9pcHY0L3RjcF9jb25nLmMKQEAgLTE4NiwyNCArMTg2LDMyIEBACiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAKLQlpZiAoaW5fZmxpZ2h0IDwgdHAtPnNuZF9jd25kKQorCWlmICghdGNwX2lzX2N3bmRfbGltaXRlZChzaywgaW5fZmxpZ2h0KSkKIAkJcmV0dXJuOwogCi0gICAgICAgIGlmICh0cC0+c25kX2N3bmQgPD0gdHAtPnNuZF9zc3RocmVzaCkgewotICAgICAgICAgICAgICAgIC8qIEluICJzYWZlIiBhcmVhLCBpbmNyZWFzZS4gKi8KLQkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkKLQkJCXRwLT5zbmRfY3duZCsrOwotCX0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogSW4gZGFuZ2Vyb3VzIGFyZWEsIGluY3JlYXNlIHNsb3dseS4KLQkJICogSW4gdGhlb3J5IHRoaXMgaXMgdHAtPnNuZF9jd25kICs9IDEgLyB0cC0+c25kX2N3bmQKLQkJICovCi0JCWlmICh0cC0+c25kX2N3bmRfY250ID49IHRwLT5zbmRfY3duZCkgewotCQkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkKLQkJCQl0cC0+c25kX2N3bmQrKzsKLQkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOwotCQl9IGVsc2UKLQkJCXRwLT5zbmRfY3duZF9jbnQrKzsKLQl9CisJLyogSW4gInNhZmUiIGFyZWEsIGluY3JlYXNlLiAqLworICAgICAgICBpZiAodHAtPnNuZF9jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpCisJCXRjcF9zbG93X3N0YXJ0KHRwKTsKKworIAkvKiBJbiBkYW5nZXJvdXMgYXJlYSwgaW5jcmVhc2Ugc2xvd2x5LiAqLworCWVsc2UgaWYgKHN5c2N0bF90Y3BfYWJjKSB7CisgCQkvKiBSRkMzNDY1OiBBcHBwcmlhdGUgQnl0ZSBDb3VudAorIAkJICogaW5jcmVhc2Ugb25jZSBmb3IgZWFjaCBmdWxsIGN3bmQgYWNrZWQKKyAJCSAqLworIAkJaWYgKHRwLT5ieXRlc19hY2tlZCA+PSB0cC0+c25kX2N3bmQqdHAtPm1zc19jYWNoZSkgeworIAkJCXRwLT5ieXRlc19hY2tlZCAtPSB0cC0+c25kX2N3bmQqdHAtPm1zc19jYWNoZTsKKyAJCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQorIAkJCQl0cC0+c25kX2N3bmQrKzsKKyAJCX0KKyAJfSBlbHNlIHsKKyAJCS8qIEluIHRoZW9yeSB0aGlzIGlzIHRwLT5zbmRfY3duZCArPSAxIC8gdHAtPnNuZF9jd25kICovCisgCQlpZiAodHAtPnNuZF9jd25kX2NudCA+PSB0cC0+c25kX2N3bmQpIHsKKyAJCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQorIAkJCQl0cC0+c25kX2N3bmQrKzsKKyAJCQl0cC0+c25kX2N3bmRfY250ID0gMDsKKyAJCX0gZWxzZQorIAkJCXRwLT5zbmRfY3duZF9jbnQrKzsKKyAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwodGNwX3Jlbm9fY29uZ19hdm9pZCk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9oaWdoc3BlZWQuYyBiL25ldC9pcHY0L3RjcF9oaWdoc3BlZWQuYwppbmRleCA2YWNjMDRiLi44MmIzYzE4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaGlnaHNwZWVkLmMKKysrIGIvbmV0L2lwdjQvdGNwX2hpZ2hzcGVlZC5jCkBAIC0xMTEsMTggKzExMSwxNyBAQAogfQogCiBzdGF0aWMgdm9pZCBoc3RjcF9jb25nX2F2b2lkKHN0cnVjdCBzb2NrICpzaywgdTMyIGFkaywgdTMyIHJ0dCwKLQkJCSAgICAgdTMyIGluX2ZsaWdodCwgaW50IGdvb2QpCisJCQkgICAgIHUzMiBpbl9mbGlnaHQsIHUzMiBwa3RzX2Fja2VkKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBoc3RjcCAqY2EgPSBpbmV0X2Nza19jYShzayk7CiAKLQlpZiAoaW5fZmxpZ2h0IDwgdHAtPnNuZF9jd25kKQorCWlmICghdGNwX2lzX2N3bmRfbGltaXRlZChzaywgaW5fZmxpZ2h0KSkKIAkJcmV0dXJuOwogCi0JaWYgKHRwLT5zbmRfY3duZCA8PSB0cC0+c25kX3NzdGhyZXNoKSB7Ci0JCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCi0JCQl0cC0+c25kX2N3bmQrKzsKLQl9IGVsc2UgeworCWlmICh0cC0+c25kX2N3bmQgPD0gdHAtPnNuZF9zc3RocmVzaCkKKwkJdGNwX3Nsb3dfc3RhcnQodHApOworCWVsc2UgewogCQkvKiBVcGRhdGUgQUlNRCBwYXJhbWV0ZXJzICovCiAJCWlmICh0cC0+c25kX2N3bmQgPiBoc3RjcF9haW1kX3ZhbHNbY2EtPmFpXS5jd25kKSB7CiAJCQl3aGlsZSAodHAtPnNuZF9jd25kID4gaHN0Y3BfYWltZF92YWxzW2NhLT5haV0uY3duZCAmJgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2h0Y3AuYyBiL25ldC9pcHY0L3RjcF9odGNwLmMKaW5kZXggZTQ3YjM3OS4uMzI4NGNmYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2h0Y3AuYworKysgYi9uZXQvaXB2NC90Y3BfaHRjcC5jCkBAIC0yMDcsMTQgKzIwNywxMyBAQAogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBodGNwICpjYSA9IGluZXRfY3NrX2NhKHNrKTsKIAotCWlmIChpbl9mbGlnaHQgPCB0cC0+c25kX2N3bmQpCisJaWYgKCF0Y3BfaXNfY3duZF9saW1pdGVkKHNrLCBpbl9mbGlnaHQpKQogCQlyZXR1cm47CiAKLSAgICAgICAgaWYgKHRwLT5zbmRfY3duZCA8PSB0cC0+c25kX3NzdGhyZXNoKSB7Ci0gICAgICAgICAgICAgICAgLyogSW4gInNhZmUiIGFyZWEsIGluY3JlYXNlLiAqLwotCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJdHAtPnNuZF9jd25kKys7Ci0JfSBlbHNlIHsKKyAgICAgICAgaWYgKHRwLT5zbmRfY3duZCA8PSB0cC0+c25kX3NzdGhyZXNoKQorCQl0Y3Bfc2xvd19zdGFydCh0cCk7CisJZWxzZSB7CisKIAkJbWVhc3VyZV9ydHQoc2spOwogCiAJCS8qIGtlZXAgdHJhY2sgb2YgbnVtYmVyIG9mIHJvdW5kLXRyaXAgdGltZXMgc2luY2UgbGFzdCBiYWNrb2ZmIGV2ZW50ICovCkBAIC0yMjQsNyArMjIzLDcgQEAKIAkJCWh0Y3BfYWxwaGFfdXBkYXRlKGNhKTsKIAkJfQogCi0gICAgICAgICAgICAgICAgLyogSW4gZGFuZ2Vyb3VzIGFyZWEsIGluY3JlYXNlIHNsb3dseS4KKwkJLyogSW4gZGFuZ2Vyb3VzIGFyZWEsIGluY3JlYXNlIHNsb3dseS4KIAkJICogSW4gdGhlb3J5IHRoaXMgaXMgdHAtPnNuZF9jd25kICs9IGFscGhhIC8gdHAtPnNuZF9jd25kCiAJCSAqLwogCQlpZiAoKHRwLT5zbmRfY3duZF9jbnQrKyAqIGNhLT5hbHBoYSk+PjcgPj0gdHAtPnNuZF9jd25kKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaHlibGEuYyBiL25ldC9pcHY0L3RjcF9oeWJsYS5jCmluZGV4IDc3YWRkNjM2Li40MGRiYjM4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaHlibGEuYworKysgYi9uZXQvaXB2NC90Y3BfaHlibGEuYwpAQCAtMTAwLDEyICsxMDAsMTIgQEAKIAkJY2EtPm1pbnJ0dCA9IHRwLT5zcnR0OwogCX0KIAorCWlmICghdGNwX2lzX2N3bmRfbGltaXRlZChzaywgaW5fZmxpZ2h0KSkKKwkJcmV0dXJuOworCiAJaWYgKCFjYS0+aHlibGFfZW4pCiAJCXJldHVybiB0Y3BfcmVub19jb25nX2F2b2lkKHNrLCBhY2ssIHJ0dCwgaW5fZmxpZ2h0LCBmbGFnKTsKIAotCWlmIChpbl9mbGlnaHQgPCB0cC0+c25kX2N3bmQpCi0JCXJldHVybjsKLQogCWlmIChjYS0+cmhvID09IDApCiAJCWh5YmxhX3JlY2FsY19wYXJhbShzayk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggM2U5OGI1Ny4uNDBhMjZiNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTQyLDcgKzQyLDcgQEAKICAqCQlBbmRpIEtsZWVuCToJTW92ZWQgb3Blbl9yZXF1ZXN0IGNoZWNraW5nIGhlcmUKICAqCQkJCQlhbmQgcHJvY2VzcyBSU1RzIGZvciBvcGVuX3JlcXVlc3RzLgogICoJCUFuZGkgS2xlZW4JOglCZXR0ZXIgcHJ1bmVfcXVldWUsIGFuZCBvdGhlciBmaXhlcy4KLSAqCQlBbmRyZXkgU2F2b2Noa2luOglGaXggUlRUIG1lYXN1cmVtZW50cyBpbiB0aGUgcHJlc25jZSBvZgorICoJCUFuZHJleSBTYXZvY2hraW46CUZpeCBSVFQgbWVhc3VyZW1lbnRzIGluIHRoZSBwcmVzZW5jZSBvZgogICoJCQkJCXRpbWVzdGFtcHMuCiAgKgkJQW5kcmV5IFNhdm9jaGtpbjoJQ2hlY2sgc2VxdWVuY2UgbnVtYmVycyBjb3JyZWN0bHkgd2hlbgogICoJCQkJCXJlbW92aW5nIFNBQ0tzIGR1ZSB0byBpbiBzZXF1ZW5jZSBpbmNvbWluZwpAQCAtODksNiArODksNyBAQAogaW50IHN5c2N0bF90Y3Bfbm9tZXRyaWNzX3NhdmU7CiAKIGludCBzeXNjdGxfdGNwX21vZGVyYXRlX3JjdmJ1ZiA9IDE7CitpbnQgc3lzY3RsX3RjcF9hYmMgPSAxOwogCiAjZGVmaW5lIEZMQUdfREFUQQkJMHgwMSAvKiBJbmNvbWluZyBmcmFtZSBjb250YWluZWQgZGF0YS4JCSovCiAjZGVmaW5lIEZMQUdfV0lOX1VQREFURQkJMHgwMiAvKiBJbmNvbWluZyBBQ0sgd2FzIGEgd2luZG93IHVwZGF0ZS4JKi8KQEAgLTIyMyw3ICsyMjQsNyBAQAogICogICBvZiByZWNlaXZlciB3aW5kb3cuIENoZWNrICMyLgogICoKICAqIFRoZSBzY2hlbWUgZG9lcyBub3Qgd29yayB3aGVuIHNlbmRlciBzZW5kcyBnb29kIHNlZ21lbnRzIG9wZW5pbmcKLSAqIHdpbmRvdyBhbmQgdGhlbiBzdGFydHMgdG8gZmVlZCB1cyBzcGFnZXR0aS4gQnV0IGl0IHNob3VsZCB3b3JrCisgKiB3aW5kb3cgYW5kIHRoZW4gc3RhcnRzIHRvIGZlZWQgdXMgc3BhZ2hldHRpLiBCdXQgaXQgc2hvdWxkIHdvcmsKICAqIGluIGNvbW1vbiBzaXR1YXRpb25zLiBPdGhlcndpc2UsIHdlIGhhdmUgdG8gcmVseSBvbiBxdWV1ZSBjb2xsYXBzaW5nLgogICovCiAKQEAgLTIzMyw3ICsyMzQsNyBAQAogewogCS8qIE9wdGltaXplIHRoaXMhICovCiAJaW50IHRydWVzaXplID0gdGNwX3dpbl9mcm9tX3NwYWNlKHNrYi0+dHJ1ZXNpemUpLzI7Ci0JaW50IHdpbmRvdyA9IHRjcF9mdWxsX3NwYWNlKHNrKS8yOworCWludCB3aW5kb3cgPSB0Y3Bfd2luX2Zyb21fc3BhY2Uoc3lzY3RsX3RjcF9ybWVtWzJdKS8yOwogCiAJd2hpbGUgKHRwLT5yY3Zfc3N0aHJlc2ggPD0gd2luZG93KSB7CiAJCWlmICh0cnVlc2l6ZSA8PSBza2ItPmxlbikKQEAgLTI3Nyw3ICsyNzgsNyBAQAogCWludCByY3ZtZW0gPSB0cC0+YWR2bXNzICsgTUFYX1RDUF9IRUFERVIgKyAxNiArIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZik7CiAKIAkvKiBUcnkgdG8gc2VsZWN0IHJjdmJ1ZiBzbyB0aGF0IDQgbXNzLXNpemVkIHNlZ21lbnRzCi0JICogd2lsbCBmaXQgdG8gd2luZG93IGFuZCBjb3JyZXNwb2Rpbmcgc2ticyB3aWxsIGZpdCB0byBvdXIgcmN2YnVmLgorCSAqIHdpbGwgZml0IHRvIHdpbmRvdyBhbmQgY29ycmVzcG9uZGluZyBza2JzIHdpbGwgZml0IHRvIG91ciByY3ZidWYuCiAJICogKHdhcyAzOyA0IGlzIG1pbmltdW0gdG8gYWxsb3cgZmFzdCByZXRyYW5zbWl0IHRvIHdvcmsuKQogCSAqLwogCXdoaWxlICh0Y3Bfd2luX2Zyb21fc3BhY2UocmN2bWVtKSA8IHRwLT5hZHZtc3MpCkBAIC0yODYsNyArMjg3LDcgQEAKIAkJc2stPnNrX3JjdmJ1ZiA9IG1pbig0ICogcmN2bWVtLCBzeXNjdGxfdGNwX3JtZW1bMl0pOwogfQogCi0vKiA0LiBUcnkgdG8gZml4dXAgYWxsLiBJdCBpcyBtYWRlIGlpbWVkaWF0ZWx5IGFmdGVyIGNvbm5lY3Rpb24gZW50ZXJzCisvKiA0LiBUcnkgdG8gZml4dXAgYWxsLiBJdCBpcyBtYWRlIGltbWVkaWF0ZWx5IGFmdGVyIGNvbm5lY3Rpb24gZW50ZXJzCiAgKiAgICBlc3RhYmxpc2hlZCBzdGF0ZS4KICAqLwogc3RhdGljIHZvaWQgdGNwX2luaXRfYnVmZmVyX3NwYWNlKHN0cnVjdCBzb2NrICpzaykKQEAgLTMyNiwzNyArMzI3LDE4IEBACiBzdGF0aWMgdm9pZCB0Y3BfY2xhbXBfd2luZG93KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9zb2NrICp0cCkKIHsKIAlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1bnNpZ25lZCBpbnQgYXBwX3dpbiA9IHRwLT5yY3Zfbnh0IC0gdHAtPmNvcGllZF9zZXE7Ci0JaW50IG9mb193aW4gPSAwOwogCiAJaWNzay0+aWNza19hY2sucXVpY2sgPSAwOwogCi0Jc2tiX3F1ZXVlX3dhbGsoJnRwLT5vdXRfb2Zfb3JkZXJfcXVldWUsIHNrYikgewotCQlvZm9fd2luICs9IHNrYi0+bGVuOworCWlmIChzay0+c2tfcmN2YnVmIDwgc3lzY3RsX3RjcF9ybWVtWzJdICYmCisJICAgICEoc2stPnNrX3VzZXJsb2NrcyAmIFNPQ0tfUkNWQlVGX0xPQ0spICYmCisJICAgICF0Y3BfbWVtb3J5X3ByZXNzdXJlICYmCisJICAgIGF0b21pY19yZWFkKCZ0Y3BfbWVtb3J5X2FsbG9jYXRlZCkgPCBzeXNjdGxfdGNwX21lbVswXSkgeworCQlzay0+c2tfcmN2YnVmID0gbWluKGF0b21pY19yZWFkKCZzay0+c2tfcm1lbV9hbGxvYyksCisJCQkJICAgIHN5c2N0bF90Y3Bfcm1lbVsyXSk7CiAJfQotCi0JLyogSWYgb3ZlcmNvbW1pdCBpcyBkdWUgdG8gb3V0IG9mIG9yZGVyIHNlZ21lbnRzLAotCSAqIGRvIG5vdCBjbGFtcCB3aW5kb3cuIFRyeSB0byBleHBhbmQgcmN2YnVmIGluc3RlYWQuCi0JICovCi0JaWYgKG9mb193aW4pIHsKLQkJaWYgKHNrLT5za19yY3ZidWYgPCBzeXNjdGxfdGNwX3JtZW1bMl0gJiYKLQkJICAgICEoc2stPnNrX3VzZXJsb2NrcyAmIFNPQ0tfUkNWQlVGX0xPQ0spICYmCi0JCSAgICAhdGNwX21lbW9yeV9wcmVzc3VyZSAmJgotCQkgICAgYXRvbWljX3JlYWQoJnRjcF9tZW1vcnlfYWxsb2NhdGVkKSA8IHN5c2N0bF90Y3BfbWVtWzBdKQotCQkJc2stPnNrX3JjdmJ1ZiA9IG1pbihhdG9taWNfcmVhZCgmc2stPnNrX3JtZW1fYWxsb2MpLAotCQkJCQkgICAgc3lzY3RsX3RjcF9ybWVtWzJdKTsKLQl9Ci0JaWYgKGF0b21pY19yZWFkKCZzay0+c2tfcm1lbV9hbGxvYykgPiBzay0+c2tfcmN2YnVmKSB7Ci0JCWFwcF93aW4gKz0gb2ZvX3dpbjsKLQkJaWYgKGF0b21pY19yZWFkKCZzay0+c2tfcm1lbV9hbGxvYykgPj0gMiAqIHNrLT5za19yY3ZidWYpCi0JCQlhcHBfd2luID4+PSAxOwotCQlpZiAoYXBwX3dpbiA+IGljc2stPmljc2tfYWNrLnJjdl9tc3MpCi0JCQlhcHBfd2luIC09IGljc2stPmljc2tfYWNrLnJjdl9tc3M7Ci0JCWFwcF93aW4gPSBtYXgoYXBwX3dpbiwgMlUqdHAtPmFkdm1zcyk7Ci0KKwlpZiAoYXRvbWljX3JlYWQoJnNrLT5za19ybWVtX2FsbG9jKSA+IHNrLT5za19yY3ZidWYpCiAJCXRwLT5yY3Zfc3N0aHJlc2ggPSBtaW4odHAtPndpbmRvd19jbGFtcCwgMlUqdHAtPmFkdm1zcyk7Ci0JfQogfQogCiAvKiBSZWNlaXZlciAiYXV0b3R1bmluZyIgY29kZS4KQEAgLTM4NSw4ICszNjcsOCBAQAogCQkgKiBhcmUgc3RhbGxlZCBvbiBmaWxlc3lzdGVtIEkvTy4KIAkJICoKIAkJICogQWxzbywgc2luY2Ugd2UgYXJlIG9ubHkgZ29pbmcgZm9yIGEgbWluaW11bSBpbiB0aGUKLQkJICogbm9uLXRpbWVzdGFtcCBjYXNlLCB3ZSBkbyBub3Qgc21vb3RoZSB0aGluZ3Mgb3V0Ci0JCSAqIGVsc2Ugd2l0aCB0aW1lc3RhbXBzIGRpc2FibGVkIGNvbnZlcmdhbmNlIHRha2VzIHRvbworCQkgKiBub24tdGltZXN0YW1wIGNhc2UsIHdlIGRvIG5vdCBzbW9vdGhlciB0aGluZ3Mgb3V0CisJCSAqIGVsc2Ugd2l0aCB0aW1lc3RhbXBzIGRpc2FibGVkIGNvbnZlcmdlbmNlIHRha2VzIHRvbwogCQkgKiBsb25nLgogCQkgKi8KIAkJaWYgKCF3aW5fZGVwKSB7CkBAIC0zOTUsNyArMzc3LDcgQEAKIAkJfSBlbHNlIGlmIChtIDwgbmV3X3NhbXBsZSkKIAkJCW5ld19zYW1wbGUgPSBtIDw8IDM7CiAJfSBlbHNlIHsKLQkJLyogTm8gcHJldmlvdXMgbWVzYXVyZS4gKi8KKwkJLyogTm8gcHJldmlvdXMgbWVhc3VyZS4gKi8KIAkJbmV3X3NhbXBsZSA9IG0gPDwgMzsKIAl9CiAKQEAgLTUyNCw3ICs1MDYsNyBAQAogCQkJaWYgKGljc2stPmljc2tfYWNrLmF0byA+IGljc2stPmljc2tfcnRvKQogCQkJCWljc2stPmljc2tfYWNrLmF0byA9IGljc2stPmljc2tfcnRvOwogCQl9IGVsc2UgaWYgKG0gPiBpY3NrLT5pY3NrX3J0bykgewotCQkJLyogVG9vIGxvbmcgZ2FwLiBBcHBhcmVudGx5IHNlbmRlciBmYWxsZWQgdG8KKwkJCS8qIFRvbyBsb25nIGdhcC4gQXBwYXJlbnRseSBzZW5kZXIgZmFpbGVkIHRvCiAJCQkgKiByZXN0YXJ0IHdpbmRvdywgc28gdGhhdCB3ZSBzZW5kIEFDS3MgcXVpY2tseS4KIAkJCSAqLwogCQkJdGNwX2luY3JfcXVpY2thY2soc2spOwpAQCAtNTQ4LDEwICs1MzAsOSBAQAogICogVG8gc2F2ZSBjeWNsZXMgaW4gdGhlIFJGQyAxMzIzIGltcGxlbWVudGF0aW9uIGl0IHdhcyBiZXR0ZXIgdG8gYnJlYWsKICAqIGl0IHVwIGludG8gdGhyZWUgcHJvY2VkdXJlcy4gLS0gZXJpY3MKICAqLwotc3RhdGljIHZvaWQgdGNwX3J0dF9lc3RpbWF0b3Ioc3RydWN0IHNvY2sgKnNrLCBjb25zdCBfX3UzMiBtcnR0LCB1MzIgKnVzcnR0KQorc3RhdGljIHZvaWQgdGNwX3J0dF9lc3RpbWF0b3Ioc3RydWN0IHNvY2sgKnNrLCBjb25zdCBfX3UzMiBtcnR0KQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwotCWNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAlsb25nIG0gPSBtcnR0OyAvKiBSVFQgKi8KIAogCS8qCVRoZSBmb2xsb3dpbmcgYW11c2luZyBjb2RlIGNvbWVzIGZyb20gSmFjb2Jzb24ncwpAQCAtNTY1LDcgKzU0Niw3IEBACiAJICoKIAkgKiBGdW5ueS4gVGhpcyBhbGdvcml0aG0gc2VlbXMgdG8gYmUgdmVyeSBicm9rZW4uCiAJICogVGhlc2UgZm9ybXVsYWUgaW5jcmVhc2UgUlRPLCB3aGVuIGl0IHNob3VsZCBiZSBkZWNyZWFzZWQsIGluY3JlYXNlCi0JICogdG9vIHNsb3dseSwgd2hlbiBpdCBzaG91bGQgYmUgaW5jcmVzZWQgZmFzdGx5LCBkZWNyZWFzZSB0b28gZmFzdGx5CisJICogdG9vIHNsb3dseSwgd2hlbiBpdCBzaG91bGQgYmUgaW5jcmVhc2VkIGZhc3RseSwgZGVjcmVhc2UgdG9vIGZhc3RseQogCSAqIGV0Yy4gSSBndWVzcyBpbiBCU0QgUlRPIHRha2VzIE9ORSB2YWx1ZSwgc28gdGhhdCBpdCBpcyBhYnNvbHV0ZWx5CiAJICogZG9lcyBub3QgbWF0dGVyIGhvdyB0byBfY2FsY3VsYXRlXyBpdC4gU2VlbXMsIGl0IHdhcyB0cmFwCiAJICogdGhhdCBWSiBmYWlsZWQgdG8gYXZvaWQuIDgpCkBAIC02MTAsOSArNTkxLDYgQEAKIAkJdHAtPm1kZXZfbWF4ID0gdHAtPnJ0dHZhciA9IG1heCh0cC0+bWRldiwgVENQX1JUT19NSU4pOwogCQl0cC0+cnR0X3NlcSA9IHRwLT5zbmRfbnh0OwogCX0KLQotCWlmIChpY3NrLT5pY3NrX2NhX29wcy0+cnR0X3NhbXBsZSkKLQkJaWNzay0+aWNza19jYV9vcHMtPnJ0dF9zYW1wbGUoc2ssICp1c3J0dCk7CiB9CiAKIC8qIENhbGN1bGF0ZSBydG8gd2l0aG91dCBiYWNrb2ZmLiAgVGhpcyBpcyB0aGUgc2Vjb25kIGhhbGYgb2YgVmFuIEphY29ic29uJ3MKQEAgLTYyOSwxNCArNjA3LDE0IEBACiAJICogICAgYXQgbGVhc3QgYnkgc29sYXJpcyBhbmQgZnJlZWJzZC4gIkVycmF0aWMgQUNLcyIgaGFzIF9ub3RoaW5nXwogCSAqICAgIHRvIGRvIHdpdGggZGVsYXllZCBhY2tzLCBiZWNhdXNlIGF0IGN3bmQ+MiB0cnVlIGRlbGFjayB0aW1lb3V0CiAJICogICAgaXMgaW52aXNpYmxlLiBBY3R1YWxseSwgTGludXgtMi40IGFsc28gZ2VuZXJhdGVzIGVycmF0aWMKLQkgKiAgICBBQ0tzIGluIHNvbWUgY3VyY3Vtc3RhbmNlcy4KKwkgKiAgICBBQ0tzIGluIHNvbWUgY2lyY3Vtc3RhbmNlcy4KIAkgKi8KIAlpbmV0X2NzayhzayktPmljc2tfcnRvID0gKHRwLT5zcnR0ID4+IDMpICsgdHAtPnJ0dHZhcjsKIAogCS8qIDIuIEZpeHVwcyBtYWRlIGVhcmxpZXIgY2Fubm90IGJlIHJpZ2h0LgogCSAqICAgIElmIHdlIGRvIG5vdCBlc3RpbWF0ZSBSVE8gY29ycmVjdGx5IHdpdGhvdXQgdGhlbSwKIAkgKiAgICBhbGwgdGhlIGFsZ28gaXMgcHVyZSBzaGl0IGFuZCBzaG91bGQgYmUgcmVwbGFjZWQKLQkgKiAgICB3aXRoIGNvcnJlY3Qgb25lLiBJdCBpcyBleGFjbHR5LCB3aGljaCB3ZSBwcmV0ZW5kIHRvIGRvLgorCSAqICAgIHdpdGggY29ycmVjdCBvbmUuIEl0IGlzIGV4YWN0bHksIHdoaWNoIHdlIHByZXRlbmQgdG8gZG8uCiAJICovCiB9CiAKQEAgLTc5NCw3ICs3NzIsNyBAQAogCSAqIHRvIG1ha2UgaXQgbW9yZSByZWFsaXN0aWMuCiAJICoKIAkgKiBBIGJpdCBvZiB0aGVvcnkuIFJUVCBpcyB0aW1lIHBhc3NlZCBhZnRlciAibm9ybWFsIiBzaXplZCBwYWNrZXQKLQkgKiBpcyBzZW50IHVudGlsIGl0IGlzIEFDS2VkLiBJbiBub3JtYWwgY3VyY3Vtc3RhbmNlcyBzZW5kaW5nIHNtYWxsCisJICogaXMgc2VudCB1bnRpbCBpdCBpcyBBQ0tlZC4gSW4gbm9ybWFsIGNpcmN1bXN0YW5jZXMgc2VuZGluZyBzbWFsbAogCSAqIHBhY2tldHMgZm9yY2UgcGVlciB0byBkZWxheSBBQ0tzIGFuZCBjYWxjdWxhdGlvbiBpcyBjb3JyZWN0IHRvby4KIAkgKiBUaGUgYWxnb3JpdGhtIGlzIGFkYXB0aXZlIGFuZCwgcHJvdmlkZWQgd2UgZm9sbG93IHNwZWNzLCBpdAogCSAqIE5FVkVSIHVuZGVyZXN0aW1hdGUgUlRULiBCVVQhIElmIHBlZXIgdHJpZXMgdG8gbWFrZSBzb21lIGNsZXZlcgpAQCAtOTE5LDE4ICs4OTcsMzIgQEAKIAlpbnQgcHJpb3JfZmFja2V0czsKIAl1MzIgbG9zdF9yZXRyYW5zID0gMDsKIAlpbnQgZmxhZyA9IDA7CisJaW50IGR1cF9zYWNrID0gMDsKIAlpbnQgaTsKIAogCWlmICghdHAtPnNhY2tlZF9vdXQpCiAJCXRwLT5mYWNrZXRzX291dCA9IDA7CiAJcHJpb3JfZmFja2V0cyA9IHRwLT5mYWNrZXRzX291dDsKIAotCWZvciAoaT0wOyBpPG51bV9zYWNrczsgaSsrLCBzcCsrKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2I7Ci0JCV9fdTMyIHN0YXJ0X3NlcSA9IG50b2hsKHNwLT5zdGFydF9zZXEpOwotCQlfX3UzMiBlbmRfc2VxID0gbnRvaGwoc3AtPmVuZF9zZXEpOwotCQlpbnQgZmFja19jb3VudCA9IDA7Ci0JCWludCBkdXBfc2FjayA9IDA7CisJLyogU0FDSyBmYXN0cGF0aDoKKwkgKiBpZiB0aGUgb25seSBTQUNLIGNoYW5nZSBpcyB0aGUgaW5jcmVhc2Ugb2YgdGhlIGVuZF9zZXEgb2YKKwkgKiB0aGUgZmlyc3QgYmxvY2sgdGhlbiBvbmx5IGFwcGx5IHRoYXQgU0FDSyBibG9jaworCSAqIGFuZCB1c2UgcmV0cmFucyBxdWV1ZSBoaW50aW5nIG90aGVyd2lzZSBzbG93cGF0aCAqLworCWZsYWcgPSAxOworCWZvciAoaSA9IDA7IGk8IG51bV9zYWNrczsgaSsrKSB7CisJCV9fdTMyIHN0YXJ0X3NlcSA9IG50b2hsKHNwW2ldLnN0YXJ0X3NlcSk7CisJCV9fdTMyIGVuZF9zZXEgPQkgbnRvaGwoc3BbaV0uZW5kX3NlcSk7CisKKwkJaWYgKGkgPT0gMCl7CisJCQlpZiAodHAtPnJlY3Zfc2Fja19jYWNoZVtpXS5zdGFydF9zZXEgIT0gc3RhcnRfc2VxKQorCQkJCWZsYWcgPSAwOworCQl9IGVsc2UgeworCQkJaWYgKCh0cC0+cmVjdl9zYWNrX2NhY2hlW2ldLnN0YXJ0X3NlcSAhPSBzdGFydF9zZXEpIHx8CisJCQkgICAgKHRwLT5yZWN2X3NhY2tfY2FjaGVbaV0uZW5kX3NlcSAhPSBlbmRfc2VxKSkKKwkJCQlmbGFnID0gMDsKKwkJfQorCQl0cC0+cmVjdl9zYWNrX2NhY2hlW2ldLnN0YXJ0X3NlcSA9IHN0YXJ0X3NlcTsKKwkJdHAtPnJlY3Zfc2Fja19jYWNoZVtpXS5lbmRfc2VxID0gZW5kX3NlcTsKIAogCQkvKiBDaGVjayBmb3IgRC1TQUNLLiAqLwogCQlpZiAoaSA9PSAwKSB7CkBAIC05NjIsMTUgKzk1NCw1OCBAQAogCQkJaWYgKGJlZm9yZShhY2ssIHByaW9yX3NuZF91bmEgLSB0cC0+bWF4X3dpbmRvdykpCiAJCQkJcmV0dXJuIDA7CiAJCX0KKwl9CisKKwlpZiAoZmxhZykKKwkJbnVtX3NhY2tzID0gMTsKKwllbHNlIHsKKwkJaW50IGo7CisJCXRwLT5mYXN0cGF0aF9za2JfaGludCA9IE5VTEw7CisKKwkJLyogb3JkZXIgU0FDSyBibG9ja3MgdG8gYWxsb3cgaW4gb3JkZXIgd2FsayBvZiB0aGUgcmV0cmFucyBxdWV1ZSAqLworCQlmb3IgKGkgPSBudW1fc2Fja3MtMTsgaSA+IDA7IGktLSkgeworCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKyl7CisJCQkJaWYgKGFmdGVyKG50b2hsKHNwW2pdLnN0YXJ0X3NlcSksCisJCQkJCSAgbnRvaGwoc3BbaisxXS5zdGFydF9zZXEpKSl7CisJCQkJCXNwW2pdLnN0YXJ0X3NlcSA9IGh0b25sKHRwLT5yZWN2X3NhY2tfY2FjaGVbaisxXS5zdGFydF9zZXEpOworCQkJCQlzcFtqXS5lbmRfc2VxID0gaHRvbmwodHAtPnJlY3Zfc2Fja19jYWNoZVtqKzFdLmVuZF9zZXEpOworCQkJCQlzcFtqKzFdLnN0YXJ0X3NlcSA9IGh0b25sKHRwLT5yZWN2X3NhY2tfY2FjaGVbal0uc3RhcnRfc2VxKTsKKwkJCQkJc3BbaisxXS5lbmRfc2VxID0gaHRvbmwodHAtPnJlY3Zfc2Fja19jYWNoZVtqXS5lbmRfc2VxKTsKKwkJCQl9CisKKwkJCX0KKwkJfQorCX0KKworCS8qIGNsZWFyIGZsYWcgYXMgdXNlZCBmb3IgZGlmZmVyZW50IHB1cnBvc2UgaW4gZm9sbG93aW5nIGNvZGUgKi8KKwlmbGFnID0gMDsKKworCWZvciAoaT0wOyBpPG51bV9zYWNrczsgaSsrLCBzcCsrKSB7CisJCXN0cnVjdCBza19idWZmICpza2I7CisJCV9fdTMyIHN0YXJ0X3NlcSA9IG50b2hsKHNwLT5zdGFydF9zZXEpOworCQlfX3UzMiBlbmRfc2VxID0gbnRvaGwoc3AtPmVuZF9zZXEpOworCQlpbnQgZmFja19jb3VudDsKKworCQkvKiBVc2UgU0FDSyBmYXN0cGF0aCBoaW50IGlmIHZhbGlkICovCisJCWlmICh0cC0+ZmFzdHBhdGhfc2tiX2hpbnQpIHsKKwkJCXNrYiA9IHRwLT5mYXN0cGF0aF9za2JfaGludDsKKwkJCWZhY2tfY291bnQgPSB0cC0+ZmFzdHBhdGhfY250X2hpbnQ7CisJCX0gZWxzZSB7CisJCQlza2IgPSBzay0+c2tfd3JpdGVfcXVldWUubmV4dDsKKwkJCWZhY2tfY291bnQgPSAwOworCQl9CiAKIAkJLyogRXZlbnQgIkIiIGluIHRoZSBjb21tZW50IGFib3ZlLiAqLwogCQlpZiAoYWZ0ZXIoZW5kX3NlcSwgdHAtPmhpZ2hfc2VxKSkKIAkJCWZsYWcgfD0gRkxBR19EQVRBX0xPU1Q7CiAKLQkJc2tfc3RyZWFtX2Zvcl9yZXRyYW5zX3F1ZXVlKHNrYiwgc2spIHsKKwkJc2tfc3RyZWFtX2Zvcl9yZXRyYW5zX3F1ZXVlX2Zyb20oc2tiLCBzaykgewogCQkJaW50IGluX3NhY2ssIHBjb3VudDsKIAkJCXU4IHNhY2tlZDsKIAorCQkJdHAtPmZhc3RwYXRoX3NrYl9oaW50ID0gc2tiOworCQkJdHAtPmZhc3RwYXRoX2NudF9oaW50ID0gZmFja19jb3VudDsKKwogCQkJLyogVGhlIHJldHJhbnNtaXNzaW9uIHF1ZXVlIGlzIGFsd2F5cyBpbiBvcmRlciwgc28KIAkJCSAqIHdlIGNhbiBzaG9ydC1jaXJjdWl0IHRoZSB3YWxrIGVhcmx5LgogCQkJICovCkBAIC0xMDQ1LDYgKzEwODAsOSBAQAogCQkJCQkJVENQX1NLQl9DQihza2IpLT5zYWNrZWQgJj0gfihUQ1BDQl9MT1NUfFRDUENCX1NBQ0tFRF9SRVRSQU5TKTsKIAkJCQkJCXRwLT5sb3N0X291dCAtPSB0Y3Bfc2tiX3Bjb3VudChza2IpOwogCQkJCQkJdHAtPnJldHJhbnNfb3V0IC09IHRjcF9za2JfcGNvdW50KHNrYik7CisKKwkJCQkJCS8qIGNsZWFyIGxvc3QgaGludCAqLworCQkJCQkJdHAtPnJldHJhbnNtaXRfc2tiX2hpbnQgPSBOVUxMOwogCQkJCQl9CiAJCQkJfSBlbHNlIHsKIAkJCQkJLyogTmV3IHNhY2sgZm9yIG5vdCByZXRyYW5zbWl0dGVkIGZyYW1lLApAQCAtMTA1Nyw2ICsxMDk1LDkgQEAKIAkJCQkJaWYgKHNhY2tlZCAmIFRDUENCX0xPU1QpIHsKIAkJCQkJCVRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkICY9IH5UQ1BDQl9MT1NUOwogCQkJCQkJdHAtPmxvc3Rfb3V0IC09IHRjcF9za2JfcGNvdW50KHNrYik7CisKKwkJCQkJCS8qIGNsZWFyIGxvc3QgaGludCAqLworCQkJCQkJdHAtPnJldHJhbnNtaXRfc2tiX2hpbnQgPSBOVUxMOwogCQkJCQl9CiAJCQkJfQogCkBAIC0xMDgwLDYgKzExMjEsNyBAQAogCQkJICAgIChUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCZUQ1BDQl9TQUNLRURfUkVUUkFOUykpIHsKIAkJCQlUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCAmPSB+VENQQ0JfU0FDS0VEX1JFVFJBTlM7CiAJCQkJdHAtPnJldHJhbnNfb3V0IC09IHRjcF9za2JfcGNvdW50KHNrYik7CisJCQkJdHAtPnJldHJhbnNtaXRfc2tiX2hpbnQgPSBOVUxMOwogCQkJfQogCQl9CiAJfQpAQCAtMTEwNyw2ICsxMTQ5LDkgQEAKIAkJCQlUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCAmPSB+VENQQ0JfU0FDS0VEX1JFVFJBTlM7CiAJCQkJdHAtPnJldHJhbnNfb3V0IC09IHRjcF9za2JfcGNvdW50KHNrYik7CiAKKwkJCQkvKiBjbGVhciBsb3N0IGhpbnQgKi8KKwkJCQl0cC0+cmV0cmFuc21pdF9za2JfaGludCA9IE5VTEw7CisKIAkJCQlpZiAoIShUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCYoVENQQ0JfTE9TVHxUQ1BDQl9TQUNLRURfQUNLRUQpKSkgewogCQkJCQl0cC0+bG9zdF9vdXQgKz0gdGNwX3NrYl9wY291bnQoc2tiKTsKIAkJCQkJVENQX1NLQl9DQihza2IpLT5zYWNrZWQgfD0gVENQQ0JfTE9TVDsKQEAgLTEyMTQsNiArMTI1OSw4IEBACiAJdGNwX3NldF9jYV9zdGF0ZShzaywgVENQX0NBX0xvc3MpOwogCXRwLT5oaWdoX3NlcSA9IHRwLT5mcnRvX2hpZ2htYXJrOwogCVRDUF9FQ05fcXVldWVfY3dyKHRwKTsKKworCWNsZWFyX2FsbF9yZXRyYW5zX2hpbnRzKHRwKTsKIH0KIAogdm9pZCB0Y3BfY2xlYXJfcmV0cmFucyhzdHJ1Y3QgdGNwX3NvY2sgKnRwKQpAQCAtMTI1MSw2ICsxMjk4LDcgQEAKIAl0cC0+c25kX2N3bmRfY250ICAgPSAwOwogCXRwLT5zbmRfY3duZF9zdGFtcCA9IHRjcF90aW1lX3N0YW1wOwogCisJdHAtPmJ5dGVzX2Fja2VkID0gMDsKIAl0Y3BfY2xlYXJfcmV0cmFucyh0cCk7CiAKIAkvKiBQdXNoIHVuZG8gbWFya2VyLCBpZiBpdCB3YXMgcGxhaW4gUlRPIGFuZCBub3RoaW5nCkBAIC0xMjc5LDYgKzEzMjcsOCBAQAogCXRjcF9zZXRfY2Ffc3RhdGUoc2ssIFRDUF9DQV9Mb3NzKTsKIAl0cC0+aGlnaF9zZXEgPSB0cC0+c25kX254dDsKIAlUQ1BfRUNOX3F1ZXVlX2N3cih0cCk7CisKKwljbGVhcl9hbGxfcmV0cmFuc19oaW50cyh0cCk7CiB9CiAKIHN0YXRpYyBpbnQgdGNwX2NoZWNrX3NhY2tfcmVuZWdpbmcoc3RydWN0IHNvY2sgKnNrKQpAQCAtMTUwMywxNyArMTU1MywzNyBAQAogCQkJICAgICAgIGludCBwYWNrZXRzLCB1MzIgaGlnaF9zZXEpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgY250ID0gcGFja2V0czsKKwlpbnQgY250OwogCi0JQlVHX1RSQVAoY250IDw9IHRwLT5wYWNrZXRzX291dCk7CisJQlVHX1RSQVAocGFja2V0cyA8PSB0cC0+cGFja2V0c19vdXQpOworCWlmICh0cC0+bG9zdF9za2JfaGludCkgeworCQlza2IgPSB0cC0+bG9zdF9za2JfaGludDsKKwkJY250ID0gdHAtPmxvc3RfY250X2hpbnQ7CisJfSBlbHNlIHsKKwkJc2tiID0gc2stPnNrX3dyaXRlX3F1ZXVlLm5leHQ7CisJCWNudCA9IDA7CisJfQogCi0Jc2tfc3RyZWFtX2Zvcl9yZXRyYW5zX3F1ZXVlKHNrYiwgc2spIHsKLQkJY250IC09IHRjcF9za2JfcGNvdW50KHNrYik7Ci0JCWlmIChjbnQgPCAwIHx8IGFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSwgaGlnaF9zZXEpKQorCXNrX3N0cmVhbV9mb3JfcmV0cmFuc19xdWV1ZV9mcm9tKHNrYiwgc2spIHsKKwkJLyogVE9ETzogZG8gdGhpcyBiZXR0ZXIgKi8KKwkJLyogdGhpcyBpcyBub3QgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBkbyB0aGlzLi4uICovCisJCXRwLT5sb3N0X3NrYl9oaW50ID0gc2tiOworCQl0cC0+bG9zdF9jbnRfaGludCA9IGNudDsKKwkJY250ICs9IHRjcF9za2JfcGNvdW50KHNrYik7CisJCWlmIChjbnQgPiBwYWNrZXRzIHx8IGFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSwgaGlnaF9zZXEpKQogCQkJYnJlYWs7CiAJCWlmICghKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkJlRDUENCX1RBR0JJVFMpKSB7CiAJCQlUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCB8PSBUQ1BDQl9MT1NUOwogCQkJdHAtPmxvc3Rfb3V0ICs9IHRjcF9za2JfcGNvdW50KHNrYik7CisKKwkJCS8qIGNsZWFyIHhtaXRfcmV0cmFuc21pdF9xdWV1ZSBoaW50cworCQkJICogIGlmIHRoaXMgaXMgYmV5b25kIGhpbnQgKi8KKwkJCWlmKHRwLT5yZXRyYW5zbWl0X3NrYl9oaW50ICE9IE5VTEwgJiYKKwkJCSAgIGJlZm9yZShUQ1BfU0tCX0NCKHNrYiktPnNlcSwKKwkJCQkgIFRDUF9TS0JfQ0IodHAtPnJldHJhbnNtaXRfc2tiX2hpbnQpLT5zZXEpKSB7CisKKwkJCQl0cC0+cmV0cmFuc21pdF9za2JfaGludCA9IE5VTEw7CisJCQl9CiAJCX0KIAl9CiAJdGNwX3N5bmNfbGVmdF9vdXQodHApOwpAQCAtMTU0MCwxMyArMTYxMCwyOCBAQAogCWlmICh0Y3BfaGVhZF90aW1lZG91dChzaywgdHApKSB7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAKLQkJc2tfc3RyZWFtX2Zvcl9yZXRyYW5zX3F1ZXVlKHNrYiwgc2spIHsKLQkJCWlmICh0Y3Bfc2tiX3RpbWVkb3V0KHNrLCBza2IpICYmCi0JCQkgICAgIShUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCZUQ1BDQl9UQUdCSVRTKSkgeworCQlza2IgPSB0cC0+c2NvcmVib2FyZF9za2JfaGludCA/IHRwLT5zY29yZWJvYXJkX3NrYl9oaW50CisJCQk6IHNrLT5za193cml0ZV9xdWV1ZS5uZXh0OworCisJCXNrX3N0cmVhbV9mb3JfcmV0cmFuc19xdWV1ZV9mcm9tKHNrYiwgc2spIHsKKwkJCWlmICghdGNwX3NrYl90aW1lZG91dChzaywgc2tiKSkKKwkJCQlicmVhazsKKworCQkJaWYgKCEoVENQX1NLQl9DQihza2IpLT5zYWNrZWQmVENQQ0JfVEFHQklUUykpIHsKIAkJCQlUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCB8PSBUQ1BDQl9MT1NUOwogCQkJCXRwLT5sb3N0X291dCArPSB0Y3Bfc2tiX3Bjb3VudChza2IpOworCisJCQkJLyogY2xlYXIgeG1pdF9yZXRyYW5zIGhpbnQgKi8KKwkJCQlpZiAodHAtPnJldHJhbnNtaXRfc2tiX2hpbnQgJiYKKwkJCQkgICAgYmVmb3JlKFRDUF9TS0JfQ0Ioc2tiKS0+c2VxLAorCQkJCQkgICBUQ1BfU0tCX0NCKHRwLT5yZXRyYW5zbWl0X3NrYl9oaW50KS0+c2VxKSkKKworCQkJCQl0cC0+cmV0cmFuc21pdF9za2JfaGludCA9IE5VTEw7CiAJCQl9CiAJCX0KKworCQl0cC0+c2NvcmVib2FyZF9za2JfaGludCA9IHNrYjsKKwogCQl0Y3Bfc3luY19sZWZ0X291dCh0cCk7CiAJfQogfQpAQCAtMTYyNiw2ICsxNzExLDEwIEBACiAJfQogCXRjcF9tb2RlcmF0ZV9jd25kKHRwKTsKIAl0cC0+c25kX2N3bmRfc3RhbXAgPSB0Y3BfdGltZV9zdGFtcDsKKworCS8qIFRoZXJlIGlzIHNvbWV0aGluZyBzY3Jld3kgZ29pbmcgb24gd2l0aCB0aGUgcmV0cmFucyBoaW50cyBhZnRlcgorCSAgIGFuIHVuZG8gKi8KKwljbGVhcl9hbGxfcmV0cmFuc19oaW50cyh0cCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHRjcF9tYXlfdW5kbyhzdHJ1Y3QgdGNwX3NvY2sgKnRwKQpAQCAtMTcwOSw2ICsxNzk4LDkgQEAKIAkJc2tfc3RyZWFtX2Zvcl9yZXRyYW5zX3F1ZXVlKHNrYiwgc2spIHsKIAkJCVRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkICY9IH5UQ1BDQl9MT1NUOwogCQl9CisKKwkJY2xlYXJfYWxsX3JldHJhbnNfaGludHModHApOworCiAJCURCR1VORE8oc2ssIHRwLCAicGFydGlhbCBsb3NzIik7CiAJCXRwLT5sb3N0X291dCA9IDA7CiAJCXRwLT5sZWZ0X291dCA9IHRwLT5zYWNrZWRfb3V0OwpAQCAtMTkwOCw2ICsyMDAwLDcgQEAKIAkJCVRDUF9FQ05fcXVldWVfY3dyKHRwKTsKIAkJfQogCisJCXRwLT5ieXRlc19hY2tlZCA9IDA7CiAJCXRwLT5zbmRfY3duZF9jbnQgPSAwOwogCQl0Y3Bfc2V0X2NhX3N0YXRlKHNrLCBUQ1BfQ0FfUmVjb3ZlcnkpOwogCX0KQEAgLTE5MTksOSArMjAxMiw5IEBACiB9CiAKIC8qIFJlYWQgZHJhZnQtaWV0Zi10Y3Bsdy1oaWdoLXBlcmZvcm1hbmNlIGJlZm9yZSBtdWNraW5nCi0gKiB3aXRoIHRoaXMgY29kZS4gKFN1cGVyY2VlZHMgUkZDMTMyMykKKyAqIHdpdGggdGhpcyBjb2RlLiAoU3VwZXJzZWRlcyBSRkMxMzIzKQogICovCi1zdGF0aWMgdm9pZCB0Y3BfYWNrX3Nhd190c3RhbXAoc3RydWN0IHNvY2sgKnNrLCB1MzIgKnVzcnR0LCBpbnQgZmxhZykKK3N0YXRpYyB2b2lkIHRjcF9hY2tfc2F3X3RzdGFtcChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFnKQogewogCS8qIFJUVE0gUnVsZTogQSBUU2VjciB2YWx1ZSByZWNlaXZlZCBpbiBhIHNlZ21lbnQgaXMgdXNlZCB0bwogCSAqIHVwZGF0ZSB0aGUgYXZlcmFnZWQgUlRUIG1lYXN1cmVtZW50IG9ubHkgaWYgdGhlIHNlZ21lbnQKQEAgLTE5MzIsNyArMjAyNSw3IEBACiAJICogMTk5OC8wNC8xMCBBbmRyZXkgVi4gU2F2b2Noa2luIDxzYXdAbXN1LnJ1PgogCSAqCiAJICogQ2hhbmdlZDogcmVzZXQgYmFja29mZiBhcyBzb29uIGFzIHdlIHNlZSB0aGUgZmlyc3QgdmFsaWQgc2FtcGxlLgotCSAqIElmIHdlIGRvIG5vdCwgd2UgZ2V0IHN0cm9uZ2x5IG92ZXJzdGltYXRlZCBydG8uIFdpdGggdGltZXN0YW1wcworCSAqIElmIHdlIGRvIG5vdCwgd2UgZ2V0IHN0cm9uZ2x5IG92ZXJlc3RpbWF0ZWQgcnRvLiBXaXRoIHRpbWVzdGFtcHMKIAkgKiBzYW1wbGVzIGFyZSBhY2NlcHRlZCBldmVuIGZyb20gdmVyeSBvbGQgc2VnbWVudHM6IGYuZS4sIHdoZW4gcnR0PTEKIAkgKiBpbmNyZWFzZXMgdG8gOCwgd2UgcmV0cmFuc21pdCA1IHRpbWVzIGFuZCBhZnRlciA4IHNlY29uZHMgZGVsYXllZAogCSAqIGFuc3dlciBhcnJpdmVzIHJ0byBiZWNvbWVzIDEyMCBzZWNvbmRzISBJZiBhdCBsZWFzdCBvbmUgb2Ygc2VnbWVudHMKQEAgLTE5NDAsMTMgKzIwMzMsMTMgQEAKIAkgKi8KIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAljb25zdCBfX3UzMiBzZXFfcnR0ID0gdGNwX3RpbWVfc3RhbXAgLSB0cC0+cnhfb3B0LnJjdl90c2VjcjsKLQl0Y3BfcnR0X2VzdGltYXRvcihzaywgc2VxX3J0dCwgdXNydHQpOworCXRjcF9ydHRfZXN0aW1hdG9yKHNrLCBzZXFfcnR0KTsKIAl0Y3Bfc2V0X3J0byhzayk7CiAJaW5ldF9jc2soc2spLT5pY3NrX2JhY2tvZmYgPSAwOwogCXRjcF9ib3VuZF9ydG8oc2spOwogfQogCi1zdGF0aWMgdm9pZCB0Y3BfYWNrX25vX3RzdGFtcChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBzZXFfcnR0LCB1MzIgKnVzcnR0LCBpbnQgZmxhZykKK3N0YXRpYyB2b2lkIHRjcF9hY2tfbm9fdHN0YW1wKHN0cnVjdCBzb2NrICpzaywgdTMyIHNlcV9ydHQsIGludCBmbGFnKQogewogCS8qIFdlIGRvbid0IGhhdmUgYSB0aW1lc3RhbXAuIENhbiBvbmx5IHVzZQogCSAqIHBhY2tldHMgdGhhdCBhcmUgbm90IHJldHJhbnNtaXR0ZWQgdG8gZGV0ZXJtaW5lCkBAIC0xOTYwLDIxICsyMDUzLDIxIEBACiAJaWYgKGZsYWcgJiBGTEFHX1JFVFJBTlNfREFUQV9BQ0tFRCkKIAkJcmV0dXJuOwogCi0JdGNwX3J0dF9lc3RpbWF0b3Ioc2ssIHNlcV9ydHQsIHVzcnR0KTsKKwl0Y3BfcnR0X2VzdGltYXRvcihzaywgc2VxX3J0dCk7CiAJdGNwX3NldF9ydG8oc2spOwogCWluZXRfY3NrKHNrKS0+aWNza19iYWNrb2ZmID0gMDsKIAl0Y3BfYm91bmRfcnRvKHNrKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHRjcF9hY2tfdXBkYXRlX3J0dChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGludCBmbGFnLAotCQkJCSAgICAgIGNvbnN0IHMzMiBzZXFfcnR0LCB1MzIgKnVzcnR0KQorCQkJCSAgICAgIGNvbnN0IHMzMiBzZXFfcnR0KQogewogCWNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCS8qIE5vdGUgdGhhdCBwZWVyIE1BWSBzZW5kIHplcm8gZWNoby4gSW4gdGhpcyBjYXNlIGl0IGlzIGlnbm9yZWQuIChyZmMxMzIzKSAqLwogCWlmICh0cC0+cnhfb3B0LnNhd190c3RhbXAgJiYgdHAtPnJ4X29wdC5yY3ZfdHNlY3IpCi0JCXRjcF9hY2tfc2F3X3RzdGFtcChzaywgdXNydHQsIGZsYWcpOworCQl0Y3BfYWNrX3Nhd190c3RhbXAoc2ssIGZsYWcpOwogCWVsc2UgaWYgKHNlcV9ydHQgPj0gMCkKLQkJdGNwX2Fja19ub190c3RhbXAoc2ssIHNlcV9ydHQsIHVzcnR0LCBmbGFnKTsKKwkJdGNwX2Fja19ub190c3RhbXAoc2ssIHNlcV9ydHQsIGZsYWcpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2NvbmdfYXZvaWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgYWNrLCB1MzIgcnR0LApAQCAtMjA1NCwyMCArMjE0NywyNyBAQAogCXJldHVybiBhY2tlZDsKIH0KIAorc3RhdGljIGlubGluZSB1MzIgdGNwX3VzcnR0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHRpbWV2YWwgdHYsIG5vdzsKKworCWRvX2dldHRpbWVvZmRheSgmbm93KTsKKwlza2JfZ2V0X3RpbWVzdGFtcChza2IsICZ0dik7CisJcmV0dXJuIChub3cudHZfc2VjIC0gdHYudHZfc2VjKSAqIDEwMDAwMDAgKyAobm93LnR2X3VzZWMgLSB0di50dl91c2VjKTsKK30KIAogLyogUmVtb3ZlIGFja25vd2xlZGdlZCBmcmFtZXMgZnJvbSB0aGUgcmV0cmFuc21pc3Npb24gcXVldWUuICovCi1zdGF0aWMgaW50IHRjcF9jbGVhbl9ydHhfcXVldWUoc3RydWN0IHNvY2sgKnNrLCBfX3MzMiAqc2VxX3J0dF9wLCBzMzIgKnNlcV91c3J0dCkKK3N0YXRpYyBpbnQgdGNwX2NsZWFuX3J0eF9xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIF9fczMyICpzZXFfcnR0X3ApCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJX191MzIgbm93ID0gdGNwX3RpbWVfc3RhbXA7CiAJaW50IGFja2VkID0gMDsKIAlfX3MzMiBzZXFfcnR0ID0gLTE7Ci0Jc3RydWN0IHRpbWV2YWwgdXNub3c7CiAJdTMyIHBrdHNfYWNrZWQgPSAwOwotCi0JaWYgKHNlcV91c3J0dCkKLQkJZG9fZ2V0dGltZW9mZGF5KCZ1c25vdyk7CisJdm9pZCAoKnJ0dF9zYW1wbGUpKHN0cnVjdCBzb2NrICpzaywgdTMyIHVzcnR0KQorCQk9IGljc2stPmljc2tfY2Ffb3BzLT5ydHRfc2FtcGxlOwogCiAJd2hpbGUgKChza2IgPSBza2JfcGVlaygmc2stPnNrX3dyaXRlX3F1ZXVlKSkgJiYKIAkgICAgICAgc2tiICE9IHNrLT5za19zZW5kX2hlYWQpIHsKQEAgLTIxMDcsMTYgKzIyMDcsMTEgQEAKIAkJCQkJdHAtPnJldHJhbnNfb3V0IC09IHRjcF9za2JfcGNvdW50KHNrYik7CiAJCQkJYWNrZWQgfD0gRkxBR19SRVRSQU5TX0RBVEFfQUNLRUQ7CiAJCQkJc2VxX3J0dCA9IC0xOwotCQkJfSBlbHNlIGlmIChzZXFfcnR0IDwgMCkKKwkJCX0gZWxzZSBpZiAoc2VxX3J0dCA8IDApIHsKIAkJCQlzZXFfcnR0ID0gbm93IC0gc2NiLT53aGVuOwotCQkJaWYgKHNlcV91c3J0dCkgewotCQkJCXN0cnVjdCB0aW1ldmFsIHR2OwotCQkJCi0JCQkJc2tiX2dldF90aW1lc3RhbXAoc2tiLCAmdHYpOwotCQkJCSpzZXFfdXNydHQgPSAodXNub3cudHZfc2VjIC0gdHYudHZfc2VjKSAqIDEwMDAwMDAKLQkJCQkJKyAodXNub3cudHZfdXNlYyAtIHR2LnR2X3VzZWMpOworCQkJCWlmIChydHRfc2FtcGxlKQorCQkJCQkoKnJ0dF9zYW1wbGUpKHNrLCB0Y3BfdXNydHQoc2tiKSk7CiAJCQl9Ci0KIAkJCWlmIChzYWNrZWQgJiBUQ1BDQl9TQUNLRURfQUNLRUQpCiAJCQkJdHAtPnNhY2tlZF9vdXQgLT0gdGNwX3NrYl9wY291bnQoc2tiKTsKIAkJCWlmIChzYWNrZWQgJiBUQ1BDQl9MT1NUKQpAQCAtMjEyNiwxNyArMjIyMSwyMCBAQAogCQkJCSAgICAhYmVmb3JlKHNjYi0+ZW5kX3NlcSwgdHAtPnNuZF91cCkpCiAJCQkJCXRwLT51cmdfbW9kZSA9IDA7CiAJCQl9Ci0JCX0gZWxzZSBpZiAoc2VxX3J0dCA8IDApCisJCX0gZWxzZSBpZiAoc2VxX3J0dCA8IDApIHsKIAkJCXNlcV9ydHQgPSBub3cgLSBzY2ItPndoZW47CisJCQlpZiAocnR0X3NhbXBsZSkKKwkJCQkoKnJ0dF9zYW1wbGUpKHNrLCB0Y3BfdXNydHQoc2tiKSk7CisJCX0KIAkJdGNwX2RlY19wY291bnRfYXBwcm94KCZ0cC0+ZmFja2V0c19vdXQsIHNrYik7CiAJCXRjcF9wYWNrZXRzX291dF9kZWModHAsIHNrYik7CiAJCV9fc2tiX3VubGluayhza2IsICZzay0+c2tfd3JpdGVfcXVldWUpOwogCQlza19zdHJlYW1fZnJlZV9za2Ioc2ssIHNrYik7CisJCWNsZWFyX2FsbF9yZXRyYW5zX2hpbnRzKHRwKTsKIAl9CiAKIAlpZiAoYWNrZWQmRkxBR19BQ0tFRCkgewotCQljb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7Ci0JCXRjcF9hY2tfdXBkYXRlX3J0dChzaywgYWNrZWQsIHNlcV9ydHQsIHNlcV91c3J0dCk7CisJCXRjcF9hY2tfdXBkYXRlX3J0dChzaywgYWNrZWQsIHNlcV9ydHQpOwogCQl0Y3BfYWNrX3BhY2tldHNfb3V0KHNrLCB0cCk7CiAKIAkJaWYgKGljc2stPmljc2tfY2Ffb3BzLT5wa3RzX2Fja2VkKQpAQCAtMjI4NCw3ICsyMzgyLDcgQEAKIAl9CiAKIAkvKiBGLVJUTyBhZmZlY3RzIG9uIHR3byBuZXcgQUNLcyBmb2xsb3dpbmcgUlRPLgotCSAqIEF0IGxhdGVzdCBvbiB0aGlyZCBBQ0sgdGhlIFRDUCBiZWhhdm9yIGlzIGJhY2sgdG8gbm9ybWFsLgorCSAqIEF0IGxhdGVzdCBvbiB0aGlyZCBBQ0sgdGhlIFRDUCBiZWhhdmlvciBpcyBiYWNrIHRvIG5vcm1hbC4KIAkgKi8KIAl0cC0+ZnJ0b19jb3VudGVyID0gKHRwLT5mcnRvX2NvdW50ZXIgKyAxKSAlIDM7CiB9CkBAIC0yMjk5LDcgKzIzOTcsNiBAQAogCXUzMiBhY2sgPSBUQ1BfU0tCX0NCKHNrYiktPmFja19zZXE7CiAJdTMyIHByaW9yX2luX2ZsaWdodDsKIAlzMzIgc2VxX3J0dDsKLQlzMzIgc2VxX3VzcnR0ID0gMDsKIAlpbnQgcHJpb3JfcGFja2V0czsKIAogCS8qIElmIHRoZSBhY2sgaXMgbmV3ZXIgdGhhbiBzZW50IG9yIG9sZGVyIHRoYW4gcHJldmlvdXMgYWNrcwpAQCAtMjMxMSw2ICsyNDA4LDkgQEAKIAlpZiAoYmVmb3JlKGFjaywgcHJpb3Jfc25kX3VuYSkpCiAJCWdvdG8gb2xkX2FjazsKIAorCWlmIChzeXNjdGxfdGNwX2FiYyAmJiBpY3NrLT5pY3NrX2NhX3N0YXRlIDwgVENQX0NBX0NXUikKKwkJdHAtPmJ5dGVzX2Fja2VkICs9IGFjayAtIHByaW9yX3NuZF91bmE7CisKIAlpZiAoIShmbGFnJkZMQUdfU0xPV1BBVEgpICYmIGFmdGVyKGFjaywgcHJpb3Jfc25kX3VuYSkpIHsKIAkJLyogV2luZG93IGlzIGNvbnN0YW50LCBwdXJlIGZvcndhcmQgYWR2YW5jZS4KIAkJICogTm8gbW9yZSBjaGVja3MgYXJlIHJlcXVpcmVkLgpAQCAtMjM1MiwxNCArMjQ1MiwxMyBAQAogCXByaW9yX2luX2ZsaWdodCA9IHRjcF9wYWNrZXRzX2luX2ZsaWdodCh0cCk7CiAKIAkvKiBTZWUgaWYgd2UgY2FuIHRha2UgYW55dGhpbmcgb2ZmIG9mIHRoZSByZXRyYW5zbWl0IHF1ZXVlLiAqLwotCWZsYWcgfD0gdGNwX2NsZWFuX3J0eF9xdWV1ZShzaywgJnNlcV9ydHQsCi0JCQkJICAgIGljc2stPmljc2tfY2Ffb3BzLT5ydHRfc2FtcGxlID8gJnNlcV91c3J0dCA6IE5VTEwpOworCWZsYWcgfD0gdGNwX2NsZWFuX3J0eF9xdWV1ZShzaywgJnNlcV9ydHQpOwogCiAJaWYgKHRwLT5mcnRvX2NvdW50ZXIpCiAJCXRjcF9wcm9jZXNzX2ZydG8oc2ssIHByaW9yX3NuZF91bmEpOwogCiAJaWYgKHRjcF9hY2tfaXNfZHViaW91cyhzaywgZmxhZykpIHsKLQkJLyogQWR2YW52ZSBDV05ELCBpZiBzdGF0ZSBhbGxvd3MgdGhpcy4gKi8KKwkJLyogQWR2YW5jZSBDV05ELCBpZiBzdGF0ZSBhbGxvd3MgdGhpcy4gKi8KIAkJaWYgKChmbGFnICYgRkxBR19EQVRBX0FDS0VEKSAmJiB0Y3BfbWF5X3JhaXNlX2N3bmQoc2ssIGZsYWcpKQogCQkJdGNwX2NvbmdfYXZvaWQoc2ssIGFjaywgIHNlcV9ydHQsIHByaW9yX2luX2ZsaWdodCwgMCk7CiAJCXRjcF9mYXN0cmV0cmFuc19hbGVydChzaywgcHJpb3Jfc25kX3VuYSwgcHJpb3JfcGFja2V0cywgZmxhZyk7CkBAIC0zMTQ4LDcgKzMyNDcsNyBAQAogewogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQkvKiBGaXJzdCwgY2hlY2sgdGhhdCBxdWV1ZSBpcyBjb2xsYXBzYWJsZSBhbmQgZmluZAorCS8qIEZpcnN0LCBjaGVjayB0aGF0IHF1ZXVlIGlzIGNvbGxhcHNpYmxlIGFuZCBmaW5kCiAJICogdGhlIHBvaW50IHdoZXJlIGNvbGxhcHNpbmcgY2FuIGJlIHVzZWZ1bC4gKi8KIAlmb3IgKHNrYiA9IGhlYWQ7IHNrYiAhPSB0YWlsOyApIHsKIAkJLyogTm8gbmV3IGJpdHM/IEl0IGlzIHBvc3NpYmxlIG9uIG9mbyBxdWV1ZS4gKi8KQEAgLTM0NTYsNyArMzU1NSw3IEBACiAKIC8qCiAgKglUaGlzIHJvdXRpbmUgaXMgb25seSBjYWxsZWQgd2hlbiB3ZSBoYXZlIHVyZ2VudCBkYXRhCi0gKglzaWduYWxsZWQuIEl0cyB0aGUgJ3Nsb3cnIHBhcnQgb2YgdGNwX3VyZy4gSXQgY291bGQgYmUKKyAqCXNpZ25hbGVkLiBJdHMgdGhlICdzbG93JyBwYXJ0IG9mIHRjcF91cmcuIEl0IGNvdWxkIGJlCiAgKgltb3ZlZCBpbmxpbmUgbm93IGFzIHRjcF91cmcgaXMgb25seSBjYWxsZWQgZnJvbSBvbmUKICAqCXBsYWNlLiBXZSBoYW5kbGUgVVJHZW50IGRhdGEgd3JvbmcuIFdlIGhhdmUgdG8gLSBhcwogICoJQlNEIHN0aWxsIGRvZXNuJ3QgdXNlIHRoZSBjb3JyZWN0aW9uIGZyb20gUkZDOTYxLgpAQCAtMzUwMSw3ICszNjAwLDcgQEAKIAkgKiB1cmdlbnQuIFRvIGRvIHRoaXMgcmVxdWlyZXMgc29tZSBjYXJlLiBXZSBjYW5ub3QganVzdCBpZ25vcmUKIAkgKiB0cC0+Y29waWVkX3NlcSBzaW5jZSB3ZSB3b3VsZCByZWFkIHRoZSBsYXN0IHVyZ2VudCBieXRlIGFnYWluCiAJICogYXMgZGF0YSwgbm9yIGNhbiB3ZSBhbHRlciBjb3BpZWRfc2VxIHVudGlsIHRoaXMgZGF0YSBhcnJpdmVzCi0JICogb3Igd2UgYnJlYWsgdGhlIHNlbWF0aWNzIG9mIFNJT0NBVE1BUksgKGFuZCB0aHVzIHNvY2thdG1hcmsoKSkKKwkgKiBvciB3ZSBicmVhayB0aGUgc2VtYW50aWNzIG9mIFNJT0NBVE1BUksgKGFuZCB0aHVzIHNvY2thdG1hcmsoKSkKIAkgKgogCSAqIE5PVEUuIERvdWJsZSBEdXRjaC4gUmVuZGVyaW5nIHRvIHBsYWluIEVuZ2xpc2g6IGF1dGhvciBvZiBjb21tZW50CiAJICogYWJvdmUgZGlkIHNvbWV0aGluZyBzb3J0IG9mIAlzZW5kKCJBIiwgTVNHX09PQik7IHNlbmQoIkIiLCBNU0dfT09CKTsKQEAgLTM2NDYsNyArMzc0NSw3IEBACiAJdHAtPnJ4X29wdC5zYXdfdHN0YW1wID0gMDsKIAogCS8qCXByZWRfZmxhZ3MgaXMgMHhTPzEwIDw8IDE2ICsgc25kX3duZAotCSAqCWlmIGhlYWRlcl9wcmVkaXRpb24gaXMgdG8gYmUgbWFkZQorCSAqCWlmIGhlYWRlcl9wcmVkaWN0aW9uIGlzIHRvIGJlIG1hZGUKIAkgKgknUycgd2lsbCBhbHdheXMgYmUgdHAtPnRjcF9oZWFkZXJfbGVuID4+IDIKIAkgKgknPycgd2lsbCBiZSAwIGZvciB0aGUgZmFzdCBwYXRoLCBvdGhlcndpc2UgcHJlZF9mbGFncyBpcyAwIHRvCiAJICogIHR1cm4gaXQgb2ZmCSh3aGVuIHRoZXJlIGFyZSBob2xlcyBpbiB0aGUgcmVjZWl2ZSAKQEAgLTQyNDIsNyArNDM0MSw3IEBACiAJCQkJICovCiAJCQkJaWYgKHRwLT5yeF9vcHQuc2F3X3RzdGFtcCAmJiB0cC0+cnhfb3B0LnJjdl90c2VjciAmJgogCQkJCSAgICAhdHAtPnNydHQpCi0JCQkJCXRjcF9hY2tfc2F3X3RzdGFtcChzaywgTlVMTCwgMCk7CisJCQkJCXRjcF9hY2tfc2F3X3RzdGFtcChzaywgMCk7CiAKIAkJCQlpZiAodHAtPnJ4X29wdC50c3RhbXBfb2spCiAJCQkJCXRwLT5hZHZtc3MgLT0gVENQT0xFTl9UU1RBTVBfQUxJR05FRDsKQEAgLTQzNzIsNiArNDQ3MSw3IEBACiAKIEVYUE9SVF9TWU1CT0woc3lzY3RsX3RjcF9lY24pOwogRVhQT1JUX1NZTUJPTChzeXNjdGxfdGNwX3Jlb3JkZXJpbmcpOworRVhQT1JUX1NZTUJPTChzeXNjdGxfdGNwX2FiYyk7CiBFWFBPUlRfU1lNQk9MKHRjcF9wYXJzZV9vcHRpb25zKTsKIEVYUE9SVF9TWU1CT0wodGNwX3Jjdl9lc3RhYmxpc2hlZCk7CiBFWFBPUlRfU1lNQk9MKHRjcF9yY3Zfc3RhdGVfcHJvY2Vzcyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwppbmRleCA2MzRkYWJiLi40ZDUwMjFlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaXB2NC5jCisrKyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKQEAgLTM5LDcgKzM5LDcgQEAKICAqCQkJCQlyZXF1ZXN0X3NvY2sgaGFuZGxpbmcgYW5kIG1vdmVkCiAgKgkJCQkJbW9zdCBvZiBpdCBpbnRvIHRoZSBhZiBpbmRlcGVuZGVudCBjb2RlLgogICoJCQkJCUFkZGVkIHRhaWwgZHJvcCBhbmQgc29tZSBvdGhlciBidWdmaXhlcy4KLSAqCQkJCQlBZGRlZCBuZXcgbGlzdGVuIHNlbWF0aWNzLgorICoJCQkJCUFkZGVkIG5ldyBsaXN0ZW4gc2VtYW50aWNzLgogICoJCU1pa2UgTWNMYWdhbgk6CVJvdXRpbmcgYnkgc291cmNlCiAgKglKdWFuIEpvc2UgQ2lhcmxhbnRlOgkJaXBfZHluYWRkciBiaXRzCiAgKgkJQW5kaSBLbGVlbjoJCXZhcmlvdXMgZml4ZXMuCkBAIC0xMTEwLDI0ICsxMTEwLDE4IEBACiBzdGF0aWMgaW50IHRjcF92NF9jaGVja3N1bV9pbml0KHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXKSB7Ci0JCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJCWlmICghdGNwX3Y0X2NoZWNrKHNrYi0+aC50aCwgc2tiLT5sZW4sIHNrYi0+bmguaXBoLT5zYWRkciwKLQkJCQkgIHNrYi0+bmguaXBoLT5kYWRkciwgc2tiLT5jc3VtKSkKKwkJCQkgIHNrYi0+bmguaXBoLT5kYWRkciwgc2tiLT5jc3VtKSkgeworCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAkJCXJldHVybiAwOwotCi0JCUxJTUlUX05FVERFQlVHKEtFUk5fREVCVUcgImh3IHRjcCB2NCBjc3VtIGZhaWxlZFxuIik7Ci0JCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwkJfQogCX0KKworCXNrYi0+Y3N1bSA9IGNzdW1fdGNwdWRwX25vZm9sZChza2ItPm5oLmlwaC0+c2FkZHIsIHNrYi0+bmguaXBoLT5kYWRkciwKKwkJCQkgICAgICAgc2tiLT5sZW4sIElQUFJPVE9fVENQLCAwKTsKKwogCWlmIChza2ItPmxlbiA8PSA3NikgewotCQlpZiAodGNwX3Y0X2NoZWNrKHNrYi0+aC50aCwgc2tiLT5sZW4sIHNrYi0+bmguaXBoLT5zYWRkciwKLQkJCQkgc2tiLT5uaC5pcGgtPmRhZGRyLAotCQkJCSBza2JfY2hlY2tzdW0oc2tiLCAwLCBza2ItPmxlbiwgMCkpKQotCQkJcmV0dXJuIC0xOwotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCX0gZWxzZSB7Ci0JCXNrYi0+Y3N1bSA9IH50Y3BfdjRfY2hlY2soc2tiLT5oLnRoLCBza2ItPmxlbiwKLQkJCQkJICBza2ItPm5oLmlwaC0+c2FkZHIsCi0JCQkJCSAgc2tiLT5uaC5pcGgtPmRhZGRyLCAwKTsKKwkJcmV0dXJuIF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYik7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTIxNiwxMCArMTIxMCwxMCBAQAogCiAJLyogQW4gZXhwbGFuYXRpb24gaXMgcmVxdWlyZWQgaGVyZSwgSSB0aGluay4KIAkgKiBQYWNrZXQgbGVuZ3RoIGFuZCBkb2ZmIGFyZSB2YWxpZGF0ZWQgYnkgaGVhZGVyIHByZWRpY3Rpb24sCi0JICogcHJvdmlkZWQgY2FzZSBvZiB0aC0+ZG9mZj09MCBpcyBlbGltaW5ldGVkLgorCSAqIHByb3ZpZGVkIGNhc2Ugb2YgdGgtPmRvZmY9PTAgaXMgZWxpbWluYXRlZC4KIAkgKiBTbywgd2UgZGVmZXIgdGhlIGNoZWNrcy4gKi8KIAlpZiAoKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZICYmCi0JICAgICB0Y3BfdjRfY2hlY2tzdW1faW5pdChza2IpIDwgMCkpCisJICAgICB0Y3BfdjRfY2hlY2tzdW1faW5pdChza2IpKSkKIAkJZ290byBiYWRfcGFja2V0OwogCiAJdGggPSBza2ItPmgudGg7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKaW5kZXggYjFhNjNiMi4uMWI2NmEyYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCisrKyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwpAQCAtMTU4LDcgKzE1OCw3IEBACiAJCS8qIEkgYW0gc2hhbWVkLCBidXQgZmFpbGVkIHRvIG1ha2UgaXQgbW9yZSBlbGVnYW50LgogCQkgKiBZZXMsIGl0IGlzIGRpcmVjdCByZWZlcmVuY2UgdG8gSVAsIHdoaWNoIGlzIGltcG9zc2libGUKIAkJICogdG8gZ2VuZXJhbGl6ZSB0byBJUHY2LiBUYWtpbmcgaW50byBhY2NvdW50IHRoYXQgSVB2NgotCQkgKiBkbyBub3QgdW5kZXJ0c25hZCByZWN5Y2xpbmcgaW4gYW55IGNhc2UsIGl0IG5vdAorCQkgKiBkbyBub3QgdW5kZXJzdGFuZCByZWN5Y2xpbmcgaW4gYW55IGNhc2UsIGl0IG5vdAogCQkgKiBhIGJpZyBwcm9ibGVtIGluIHByYWN0aWNlLiAtLUFOSyAqLwogCQlpZiAodHctPnR3X2ZhbWlseSA9PSBBRl9JTkVUICYmCiAJCSAgICB0Y3BfZGVhdGhfcm93LnN5c2N0bF90d19yZWN5Y2xlICYmIHRjcHR3LT50d190c19yZWNlbnRfc3RhbXAgJiYKQEAgLTE5NCw3ICsxOTQsNyBAQAogCQkvKiBJbiB3aW5kb3cgc2VnbWVudCwgaXQgbWF5IGJlIG9ubHkgcmVzZXQgb3IgYmFyZSBhY2suICovCiAKIAkJaWYgKHRoLT5yc3QpIHsKLQkJCS8qIFRoaXMgaXMgVElNRV9XQUlUIGFzc2FzaW5hdGlvbiwgaW4gdHdvIGZsYXZvcnMuCisJCQkvKiBUaGlzIGlzIFRJTUVfV0FJVCBhc3Nhc3NpbmF0aW9uLCBpbiB0d28gZmxhdm9ycy4KIAkJCSAqIE9oIHdlbGwuLi4gbm9ib2R5IGhhcyBhIHN1ZmZpY2llbnQgc29sdXRpb24gdG8gdGhpcwogCQkJICogcHJvdG9jb2wgYnVnIHlldC4KIAkJCSAqLwpAQCAtMzgwLDYgKzM4MCw3IEBACiAJCSAqLwogCQluZXd0cC0+c25kX2N3bmQgPSAyOwogCQluZXd0cC0+c25kX2N3bmRfY250ID0gMDsKKwkJbmV3dHAtPmJ5dGVzX2Fja2VkID0gMDsKIAogCQluZXd0cC0+ZnJ0b19jb3VudGVyID0gMDsKIAkJbmV3dHAtPmZydG9faGlnaG1hcmsgPSAwOwpAQCAtNTUwLDcgKzU1MSw3IEBACiAKIAkvKiBSRkM3OTMgcGFnZSAzNjogIklmIHRoZSBjb25uZWN0aW9uIGlzIGluIGFueSBub24tc3luY2hyb25pemVkIHN0YXRlIC4uLgogCSAqICAgICAgICAgICAgICAgICAgYW5kIHRoZSBpbmNvbWluZyBzZWdtZW50IGFja25vd2xlZGdlcyBzb21ldGhpbmcgbm90IHlldAotCSAqICAgICAgICAgICAgICAgICAgc2VudCAodGhlIHNlZ21lbnQgY2FycmllcyBhbiB1bmFjY2FwdGFibGUgQUNLKSAuLi4KKwkgKiAgICAgICAgICAgICAgICAgIHNlbnQgKHRoZSBzZWdtZW50IGNhcnJpZXMgYW4gdW5hY2NlcHRhYmxlIEFDSykgLi4uCiAJICogICAgICAgICAgICAgICAgICBhIHJlc2V0IGlzIHNlbnQuIgogCSAqCiAJICogSW52YWxpZCBBQ0s6IHJlc2V0IHdpbGwgYmUgc2VudCBieSBsaXN0ZW5pbmcgc29ja2V0CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggYjkwNzQ1Ni4uMDI5YzcwZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtNDM2LDYgKzQzNiw4IEBACiAJdTE2IGZsYWdzOwogCiAJQlVHX09OKGxlbiA+IHNrYi0+bGVuKTsKKworIAljbGVhcl9hbGxfcmV0cmFuc19oaW50cyh0cCk7CiAJbnNpemUgPSBza2JfaGVhZGxlbihza2IpIC0gbGVuOwogCWlmIChuc2l6ZSA8IDApCiAJCW5zaXplID0gMDsKQEAgLTU5OSw3ICs2MDEsNyBAQAogICAgZm9yIFRDUCBvcHRpb25zLCBidXQgaW5jbHVkZXMgb25seSBiYXJlIFRDUCBoZWFkZXIuCiAKICAgIHRwLT5yeF9vcHQubXNzX2NsYW1wIGlzIG1zcyBuZWdvdGlhdGVkIGF0IGNvbm5lY3Rpb24gc2V0dXAuCi0gICBJdCBpcyBtaW51bXVtIG9mIHVzZXJfbXNzIGFuZCBtc3MgcmVjZWl2ZWQgd2l0aCBTWU4uCisgICBJdCBpcyBtaW5pbXVtIG9mIHVzZXJfbXNzIGFuZCBtc3MgcmVjZWl2ZWQgd2l0aCBTWU4uCiAgICBJdCBhbHNvIGRvZXMgbm90IGluY2x1ZGUgVENQIG9wdGlvbnMuCiAKICAgIHRwLT5wbXR1X2Nvb2tpZSBpcyBsYXN0IHBtdHUsIHNlZW4gYnkgdGhpcyBmdW5jdGlvbi4KQEAgLTExNzEsNyArMTE3Myw3IEBACiB7CiAJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwotCS8qIE1TUyBmb3IgdGhlIHBlZXIncyBkYXRhLiAgUHJldmlvdXMgdmVyaW9ucyB1c2VkIG1zc19jbGFtcAorCS8qIE1TUyBmb3IgdGhlIHBlZXIncyBkYXRhLiAgUHJldmlvdXMgdmVyc2lvbnMgdXNlZCBtc3NfY2xhbXAKIAkgKiBoZXJlLiAgSSBkb24ndCBrbm93IGlmIHRoZSB2YWx1ZSBiYXNlZCBvbiBvdXIgZ3Vlc3NlcwogCSAqIG9mIHBlZXIncyBNU1MgaXMgYmV0dGVyIGZvciB0aGUgcGVyZm9ybWFuY2UuICBJdCdzIG1vcmUgY29ycmVjdAogCSAqIGJ1dCBtYXkgYmUgd29yc2UgZm9yIHRoZSBwZXJmb3JtYW5jZSBiZWNhdXNlIG9mIHJjdl9tc3MKQEAgLTEyNjAsNyArMTI2MiwxMCBAQAogCQlCVUdfT04odGNwX3NrYl9wY291bnQoc2tiKSAhPSAxIHx8CiAJCSAgICAgICB0Y3Bfc2tiX3Bjb3VudChuZXh0X3NrYikgIT0gMSk7CiAKLQkJLyogT2suICBXZSB3aWxsIGJlIGFibGUgdG8gY29sbGFwc2UgdGhlIHBhY2tldC4gKi8KKwkJLyogY2hhbmdpbmcgdHJhbnNtaXQgcXVldWUgdW5kZXIgdXMgc28gY2xlYXIgaGludHMgKi8KKwkJY2xlYXJfYWxsX3JldHJhbnNfaGludHModHApOworCisJCS8qIE9rLglXZSB3aWxsIGJlIGFibGUgdG8gY29sbGFwc2UgdGhlIHBhY2tldC4gKi8KIAkJX19za2JfdW5saW5rKG5leHRfc2tiLCAmc2stPnNrX3dyaXRlX3F1ZXVlKTsKIAogCQltZW1jcHkoc2tiX3B1dChza2IsIG5leHRfc2tiX3NpemUpLCBuZXh0X3NrYi0+ZGF0YSwgbmV4dF9za2Jfc2l6ZSk7CkBAIC0xMzMwLDYgKzEzMzUsOCBAQAogCQl9CiAJfQogCisJY2xlYXJfYWxsX3JldHJhbnNfaGludHModHApOworCiAJaWYgKCFsb3N0KQogCQlyZXR1cm47CiAKQEAgLTEzNjEsNyArMTM2OCw3IEBACiAJaW50IGVycjsKIAogCS8qIERvIG5vdCBzZW50IG1vcmUgdGhhbiB3ZSBxdWV1ZWQuIDEvNCBpcyByZXNlcnZlZCBmb3IgcG9zc2libGUKLQkgKiBjb3B5aW5nIG92ZXJoZWFkOiBmcmdhZ21lbnRhdGlvbiwgdHVubmVsaW5nLCBtYW5nbGluZyBldGMuCisJICogY29weWluZyBvdmVyaGVhZDogZnJhZ21lbnRhdGlvbiwgdHVubmVsaW5nLCBtYW5nbGluZyBldGMuCiAJICovCiAJaWYgKGF0b21pY19yZWFkKCZzay0+c2tfd21lbV9hbGxvYykgPgogCSAgICBtaW4oc2stPnNrX3dtZW1fcXVldWVkICsgKHNrLT5za193bWVtX3F1ZXVlZCA+PiAyKSwgc2stPnNrX3NuZGJ1ZikpCkBAIC0xNDY4LDEzICsxNDc1LDI1IEBACiAJY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IHBhY2tldF9jbnQgPSB0cC0+bG9zdF9vdXQ7CisJaW50IHBhY2tldF9jbnQ7CisKKwlpZiAodHAtPnJldHJhbnNtaXRfc2tiX2hpbnQpIHsKKwkJc2tiID0gdHAtPnJldHJhbnNtaXRfc2tiX2hpbnQ7CisJCXBhY2tldF9jbnQgPSB0cC0+cmV0cmFuc21pdF9jbnRfaGludDsKKwl9ZWxzZXsKKwkJc2tiID0gc2stPnNrX3dyaXRlX3F1ZXVlLm5leHQ7CisJCXBhY2tldF9jbnQgPSAwOworCX0KIAogCS8qIEZpcnN0IHBhc3M6IHJldHJhbnNtaXQgbG9zdCBwYWNrZXRzLiAqLwotCWlmIChwYWNrZXRfY250KSB7Ci0JCXNrX3N0cmVhbV9mb3JfcmV0cmFuc19xdWV1ZShza2IsIHNrKSB7CisJaWYgKHRwLT5sb3N0X291dCkgeworCQlza19zdHJlYW1fZm9yX3JldHJhbnNfcXVldWVfZnJvbShza2IsIHNrKSB7CiAJCQlfX3U4IHNhY2tlZCA9IFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkOwogCisJCQkvKiB3ZSBjb3VsZCBkbyBiZXR0ZXIgdGhhbiB0byBhc3NpZ24gZWFjaCB0aW1lICovCisJCQl0cC0+cmV0cmFuc21pdF9za2JfaGludCA9IHNrYjsKKwkJCXRwLT5yZXRyYW5zbWl0X2NudF9oaW50ID0gcGFja2V0X2NudDsKKwogCQkJLyogQXNzdW1lIHRoaXMgcmV0cmFuc21pdCB3aWxsIGdlbmVyYXRlCiAJCQkgKiBvbmx5IG9uZSBwYWNrZXQgZm9yIGNvbmdlc3Rpb24gd2luZG93CiAJCQkgKiBjYWxjdWxhdGlvbiBwdXJwb3Nlcy4gIFRoaXMgd29ya3MgYmVjYXVzZQpAQCAtMTQ4NSwxMCArMTUwNCwxMiBAQAogCQkJaWYgKHRjcF9wYWNrZXRzX2luX2ZsaWdodCh0cCkgPj0gdHAtPnNuZF9jd25kKQogCQkJCXJldHVybjsKIAotCQkJaWYgKHNhY2tlZCZUQ1BDQl9MT1NUKSB7CisJCQlpZiAoc2Fja2VkICYgVENQQ0JfTE9TVCkgewogCQkJCWlmICghKHNhY2tlZCYoVENQQ0JfU0FDS0VEX0FDS0VEfFRDUENCX1NBQ0tFRF9SRVRSQU5TKSkpIHsKLQkJCQkJaWYgKHRjcF9yZXRyYW5zbWl0X3NrYihzaywgc2tiKSkKKwkJCQkJaWYgKHRjcF9yZXRyYW5zbWl0X3NrYihzaywgc2tiKSkgeworCQkJCQkJdHAtPnJldHJhbnNtaXRfc2tiX2hpbnQgPSBOVUxMOwogCQkJCQkJcmV0dXJuOworCQkJCQl9CiAJCQkJCWlmIChpY3NrLT5pY3NrX2NhX3N0YXRlICE9IFRDUF9DQV9Mb3NzKQogCQkJCQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVENQRkFTVFJFVFJBTlMpOwogCQkJCQllbHNlCkBAIC0xNTAxLDggKzE1MjIsOCBAQAogCQkJCQkJCQkJICBUQ1BfUlRPX01BWCk7CiAJCQkJfQogCi0JCQkJcGFja2V0X2NudCAtPSB0Y3Bfc2tiX3Bjb3VudChza2IpOwotCQkJCWlmIChwYWNrZXRfY250IDw9IDApCisJCQkJcGFja2V0X2NudCArPSB0Y3Bfc2tiX3Bjb3VudChza2IpOworCQkJCWlmIChwYWNrZXRfY250ID49IHRwLT5sb3N0X291dCkKIAkJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTE1MjgsOSArMTU0OSwxOCBAQAogCWlmICh0Y3BfbWF5X3NlbmRfbm93KHNrLCB0cCkpCiAJCXJldHVybjsKIAotCXBhY2tldF9jbnQgPSAwOworCWlmICh0cC0+Zm9yd2FyZF9za2JfaGludCkgeworCQlza2IgPSB0cC0+Zm9yd2FyZF9za2JfaGludDsKKwkJcGFja2V0X2NudCA9IHRwLT5mb3J3YXJkX2NudF9oaW50OworCX0gZWxzZXsKKwkJc2tiID0gc2stPnNrX3dyaXRlX3F1ZXVlLm5leHQ7CisJCXBhY2tldF9jbnQgPSAwOworCX0KIAotCXNrX3N0cmVhbV9mb3JfcmV0cmFuc19xdWV1ZShza2IsIHNrKSB7CisJc2tfc3RyZWFtX2Zvcl9yZXRyYW5zX3F1ZXVlX2Zyb20oc2tiLCBzaykgeworCQl0cC0+Zm9yd2FyZF9jbnRfaGludCA9IHBhY2tldF9jbnQ7CisJCXRwLT5mb3J3YXJkX3NrYl9oaW50ID0gc2tiOworCiAJCS8qIFNpbWlsYXIgdG8gdGhlIHJldHJhbnNtaXQgbG9vcCBhYm92ZSB3ZQogCQkgKiBjYW4gcHJldGVuZCB0aGF0IHRoZSByZXRyYW5zbWl0dGVkIFNLQgogCQkgKiB3ZSBzZW5kIG91dCBoZXJlIHdpbGwgYmUgY29tcG9zZWQgb2Ygb25lCkBAIC0xNTQ3LDggKzE1NzcsMTAgQEAKIAkJCWNvbnRpbnVlOwogCiAJCS8qIE9rLCByZXRyYW5zbWl0IGl0LiAqLwotCQlpZiAodGNwX3JldHJhbnNtaXRfc2tiKHNrLCBza2IpKQorCQlpZiAodGNwX3JldHJhbnNtaXRfc2tiKHNrLCBza2IpKSB7CisJCQl0cC0+Zm9yd2FyZF9za2JfaGludCA9IE5VTEw7CiAJCQlicmVhazsKKwkJfQogCiAJCWlmIChza2IgPT0gc2tiX3BlZWsoJnNrLT5za193cml0ZV9xdWV1ZSkpCiAJCQlpbmV0X2Nza19yZXNldF94bWl0X3RpbWVyKHNrLCBJQ1NLX1RJTUVfUkVUUkFOUywKQEAgLTIwNTgsMyArMjA5MCw0IEBACiBFWFBPUlRfU1lNQk9MKHRjcF9tYWtlX3N5bmFjayk7CiBFWFBPUlRfU1lNQk9MKHRjcF9zaW1wbGVfcmV0cmFuc21pdCk7CiBFWFBPUlRfU1lNQk9MKHRjcF9zeW5jX21zcyk7CitFWFBPUlRfU1lNQk9MKHN5c2N0bF90Y3BfdHNvX3dpbl9kaXZpc29yKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9zY2FsYWJsZS5jIGIvbmV0L2lwdjQvdGNwX3NjYWxhYmxlLmMKaW5kZXggMzI3NzcwYi4uMjZkNzQ4NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3NjYWxhYmxlLmMKKysrIGIvbmV0L2lwdjQvdGNwX3NjYWxhYmxlLmMKQEAgLTIwLDIwICsyMCwyMCBAQAogCQkJCSAgICB1MzIgaW5fZmxpZ2h0LCBpbnQgZmxhZykKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKLQlpZiAoaW5fZmxpZ2h0IDwgdHAtPnNuZF9jd25kKQorCisJaWYgKCF0Y3BfaXNfY3duZF9saW1pdGVkKHNrLCBpbl9mbGlnaHQpKQogCQlyZXR1cm47CiAKLQlpZiAodHAtPnNuZF9jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpIHsKLQkJdHAtPnNuZF9jd25kKys7Ci0JfSBlbHNlIHsKKwlpZiAodHAtPnNuZF9jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpCisJCXRjcF9zbG93X3N0YXJ0KHRwKTsKKwllbHNlIHsKIAkJdHAtPnNuZF9jd25kX2NudCsrOwogCQlpZiAodHAtPnNuZF9jd25kX2NudCA+IG1pbih0cC0+c25kX2N3bmQsIFRDUF9TQ0FMQUJMRV9BSV9DTlQpKXsKLQkJCXRwLT5zbmRfY3duZCsrOworCQkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkKKwkJCQl0cC0+c25kX2N3bmQrKzsKIAkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOwogCQl9CiAJfQotCXRwLT5zbmRfY3duZCA9IG1pbl90KHUzMiwgdHAtPnNuZF9jd25kLCB0cC0+c25kX2N3bmRfY2xhbXApOwotCXRwLT5zbmRfY3duZF9zdGFtcCA9IHRjcF90aW1lX3N0YW1wOwogfQogCiBzdGF0aWMgdTMyIHRjcF9zY2FsYWJsZV9zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdGltZXIuYyBiL25ldC9pcHY0L3RjcF90aW1lci5jCmluZGV4IDQxNWVlNDcuLmUxODgwOTUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF90aW1lci5jCisrKyBiL25ldC9pcHY0L3RjcF90aW1lci5jCkBAIC01OCw3ICs1OCw3IEBACiAgKiB0byBwcmV2ZW50IERvUyBhdHRhY2tzLiBJdCBpcyBjYWxsZWQgd2hlbiBhIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQKICAqIG9yIHplcm8gcHJvYmUgdGltZW91dCBvY2N1cnMgb24gb3JwaGFuZWQgc29ja2V0LgogICoKLSAqIENyaXRlcml1bSBpcyBzdGlsbCBub3QgY29uZmlybWVkIGV4cGVyaW1lbnRhbGx5IGFuZCBtYXkgY2hhbmdlLgorICogQ3JpdGVyaWEgaXMgc3RpbGwgbm90IGNvbmZpcm1lZCBleHBlcmltZW50YWxseSBhbmQgbWF5IGNoYW5nZS4KICAqIFdlIGtpbGwgdGhlIHNvY2tldCwgaWY6CiAgKiAxLiBJZiBudW1iZXIgb2Ygb3JwaGFuZWQgc29ja2V0cyBleGNlZWRzIGFuIGFkbWluaXN0cmF0aXZlbHkgY29uZmlndXJlZAogICogICAgbGltaXQuCkBAIC0xMzIsNyArMTMyLDcgQEAKIAkJCSAgIGhvbGUgZGV0ZWN0aW9uLiA6LSgKIAogCQkJICAgSXQgaXMgcGxhY2UgdG8gbWFrZSBpdC4gSXQgaXMgbm90IG1hZGUuIEkgZG8gbm90IHdhbnQKLQkJCSAgIHRvIG1ha2UgaXQuIEl0IGlzIGRpc2d1aXN0aW5nLiBJdCBkb2VzIG5vdCB3b3JrIGluIGFueQorCQkJICAgdG8gbWFrZSBpdC4gSXQgaXMgZGlzZ3VzdGluZy4gSXQgZG9lcyBub3Qgd29yayBpbiBhbnkKIAkJCSAgIGNhc2UuIExldCBtZSB0byBjaXRlIHRoZSBzYW1lIGRyYWZ0LCB3aGljaCByZXF1aXJlcyBmb3IKIAkJCSAgIHVzIHRvIGltcGxlbWVudCB0aGlzOgogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdmVnYXMuYyBiL25ldC9pcHY0L3RjcF92ZWdhcy5jCmluZGV4IDkzYzVmOTIuLmI3ZDI5NmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF92ZWdhcy5jCisrKyBiL25ldC9pcHY0L3RjcF92ZWdhcy5jCkBAIC0yMzYsOCArMjM2LDcgQEAKIAkJCS8qIFdlIGRvbid0IGhhdmUgZW5vdWdoIFJUVCBzYW1wbGVzIHRvIGRvIHRoZSBWZWdhcwogCQkJICogY2FsY3VsYXRpb24sIHNvIHdlJ2xsIGJlaGF2ZSBsaWtlIFJlbm8uCiAJCQkgKi8KLQkJCWlmICh0cC0+c25kX2N3bmQgPiB0cC0+c25kX3NzdGhyZXNoKQotCQkJCXRwLT5zbmRfY3duZCsrOworCQkJdGNwX3Jlbm9fY29uZ19hdm9pZChzaywgYWNrLCBzZXFfcnR0LCBpbl9mbGlnaHQsIGZsYWcpOwogCQl9IGVsc2UgewogCQkJdTMyIHJ0dCwgdGFyZ2V0X2N3bmQsIGRpZmY7CiAKQEAgLTI3NSw3ICsyNzQsNyBAQAogCQkJICovCiAJCQlkaWZmID0gKG9sZF93bmQgPDwgVl9QQVJBTV9TSElGVCkgLSB0YXJnZXRfY3duZDsKIAotCQkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfc3N0aHJlc2gpIHsKKwkJCWlmICh0cC0+c25kX2N3bmQgPD0gdHAtPnNuZF9zc3RocmVzaCkgewogCQkJCS8qIFNsb3cgc3RhcnQuICAqLwogCQkJCWlmIChkaWZmID4gZ2FtbWEpIHsKIAkJCQkJLyogR29pbmcgdG9vIGZhc3QuIFRpbWUgdG8gc2xvdyBkb3duCkBAIC0yOTUsNiArMjk0LDcgQEAKIAkJCQkJCQkgICAgVl9QQVJBTV9TSElGVCkrMSk7CiAKIAkJCQl9CisJCQkJdGNwX3Nsb3dfc3RhcnQodHApOwogCQkJfSBlbHNlIHsKIAkJCQkvKiBDb25nZXN0aW9uIGF2b2lkYW5jZS4gKi8KIAkJCQl1MzIgbmV4dF9zbmRfY3duZDsKQEAgLTMyNywzNyArMzI3LDE3IEBACiAJCQkJZWxzZSBpZiAobmV4dF9zbmRfY3duZCA8IHRwLT5zbmRfY3duZCkKIAkJCQkJdHAtPnNuZF9jd25kLS07CiAJCQl9Ci0JCX0KIAotCQkvKiBXaXBlIHRoZSBzbGF0ZSBjbGVhbiBmb3IgdGhlIG5leHQgUlRULiAqLwotCQl2ZWdhcy0+Y250UlRUID0gMDsKLQkJdmVnYXMtPm1pblJUVCA9IDB4N2ZmZmZmZmY7CisJCQlpZiAodHAtPnNuZF9jd25kIDwgMikKKwkJCQl0cC0+c25kX2N3bmQgPSAyOworCQkJZWxzZSBpZiAodHAtPnNuZF9jd25kID4gdHAtPnNuZF9jd25kX2NsYW1wKQorCQkJCXRwLT5zbmRfY3duZCA9IHRwLT5zbmRfY3duZF9jbGFtcDsKKwkJfQogCX0KIAotCS8qIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBleGVjdXRlZCBmb3IgZXZlcnkgYWNrIHdlIHJlY2VpdmUsCi0JICogZXhjZXB0IGZvciBjb25kaXRpb25zIGNoZWNrZWQgaW4gc2hvdWxkX2FkdmFuY2VfY3duZCgpCi0JICogYmVmb3JlIHRoZSBjYWxsIHRvIHRjcF9jb25nX2F2b2lkKCkuIE1haW5seSB0aGlzIG1lYW5zIHRoYXQKLQkgKiB3ZSBvbmx5IGV4ZWN1dGUgdGhpcyBjb2RlIGlmIHRoZSBhY2sgYWN0dWFsbHkgYWNrZWQgc29tZQotCSAqIGRhdGEuCi0JICovCi0KLQkvKiBJZiB3ZSBhcmUgaW4gc2xvdyBzdGFydCwgaW5jcmVhc2Ugb3VyIGN3bmQgaW4gcmVzcG9uc2UgdG8gdGhpcyBBQ0suCi0JICogKElmIHdlIGFyZSBub3QgaW4gc2xvdyBzdGFydCB0aGVuIHdlIGFyZSBpbiBjb25nZXN0aW9uIGF2b2lkYW5jZSwKLQkgKiBhbmQgYWRqdXN0IG91ciBjb25nZXN0aW9uIHdpbmRvdyBvbmx5IG9uY2UgcGVyIFJUVC4gU2VlIHRoZSBjb2RlCi0JICogYWJvdmUuKQotCSAqLwotCWlmICh0cC0+c25kX2N3bmQgPD0gdHAtPnNuZF9zc3RocmVzaCkKLQkJdHAtPnNuZF9jd25kKys7Ci0KLQkvKiB0byBrZWVwIGN3bmQgZnJvbSBncm93aW5nIHdpdGhvdXQgYm91bmQgKi8KLQl0cC0+c25kX2N3bmQgPSBtaW5fdCh1MzIsIHRwLT5zbmRfY3duZCwgdHAtPnNuZF9jd25kX2NsYW1wKTsKLQotCS8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFyZSBuZXZlciBzbyB0aW1pZCBhcyB0byByZWR1Y2Ugb3VyIGN3bmQgYmVsb3cKLQkgKiAyIE1TUy4KLQkgKgotCSAqIEdvaW5nIGJlbG93IDIgTVNTIHdvdWxkIHJpc2sgaHVnZSBkZWxheWVkIEFDS3MgZnJvbSBvdXIgcmVjZWl2ZXIuCi0JICovCi0JdHAtPnNuZF9jd25kID0gbWF4KHRwLT5zbmRfY3duZCwgMlUpOworCS8qIFdpcGUgdGhlIHNsYXRlIGNsZWFuIGZvciB0aGUgbmV4dCBSVFQuICovCisJdmVnYXMtPmNudFJUVCA9IDA7CisJdmVnYXMtPm1pblJUVCA9IDB4N2ZmZmZmZmY7CiB9CiAKIC8qIEV4dHJhY3QgaW5mbyBmb3IgVGNwIHNvY2tldCBpbmZvIHByb3ZpZGVkIHZpYSBuZXRsaW5rLiAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwLmMgYi9uZXQvaXB2NC91ZHAuYwppbmRleCBlMGJkMTAxLi4yNDIyYTVmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC91ZHAuYworKysgYi9uZXQvaXB2NC91ZHAuYwpAQCAtNzYxLDcgKzc2MSw3IEBACiAKIHN0YXRpYyBfX2lubGluZV9fIGludCBfX3VkcF9jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXJldHVybiAodW5zaWduZWQgc2hvcnQpY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIDAsIHNrYi0+bGVuLCBza2ItPmNzdW0pKTsKKwlyZXR1cm4gX19za2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKTsKIH0KIAogc3RhdGljIF9faW5saW5lX18gaW50IHVkcF9jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMTEwMCwxMSArMTEwMCw4IEBACiAJaWYgKHVoLT5jaGVjayA9PSAwKSB7CiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJfSBlbHNlIGlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykgewotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQlpZiAoIXVkcF9jaGVjayh1aCwgdWxlbiwgc2FkZHIsIGRhZGRyLCBza2ItPmNzdW0pKQotCQkJcmV0dXJuIDA7Ci0JCUxJTUlUX05FVERFQlVHKEtFUk5fREVCVUcgInVkcCB2NCBodyBjc3VtIGZhaWx1cmUuXG4iKTsKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAl9CiAJaWYgKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZKQogCQlza2ItPmNzdW0gPSBjc3VtX3RjcHVkcF9ub2ZvbGQoc2FkZHIsIGRhZGRyLCB1bGVuLCBJUFBST1RPX1VEUCwgMCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pY21wLmMgYi9uZXQvaXB2Ni9pY21wLmMKaW5kZXggMjNlNTQwMy4uMWJkZjBmYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaWNtcC5jCisrKyBiL25ldC9pcHY2L2ljbXAuYwpAQCAtNTg1LDE3ICs1ODUsMTYgQEAKIAlkYWRkciA9ICZza2ItPm5oLmlwdjZoLT5kYWRkcjsKIAogCS8qIFBlcmZvcm0gY2hlY2tzdW0uICovCi0JaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXKSB7Ci0JCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0JCWlmIChjc3VtX2lwdjZfbWFnaWMoc2FkZHIsIGRhZGRyLCBza2ItPmxlbiwgSVBQUk9UT19JQ01QVjYsCi0JCQkJICAgIHNrYi0+Y3N1bSkpIHsKLQkJCUxJTUlUX05FVERFQlVHKEtFUk5fREVCVUcgIklDTVB2NiBodyBjaGVja3N1bSBmYWlsZWRcbiIpOwotCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCQl9Ci0JfQotCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9OT05FKSB7Ci0JCWlmIChjc3VtX2lwdjZfbWFnaWMoc2FkZHIsIGRhZGRyLCBza2ItPmxlbiwgSVBQUk9UT19JQ01QVjYsCi0JCQkJICAgIHNrYl9jaGVja3N1bShza2IsIDAsIHNrYi0+bGVuLCAwKSkpIHsKKwlzd2l0Y2ggKHNrYi0+aXBfc3VtbWVkKSB7CisJY2FzZSBDSEVDS1NVTV9IVzoKKwkJaWYgKCFjc3VtX2lwdjZfbWFnaWMoc2FkZHIsIGRhZGRyLCBza2ItPmxlbiwgSVBQUk9UT19JQ01QVjYsCisJCQkJICAgICBza2ItPmNzdW0pKQorCQkJYnJlYWs7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgQ0hFQ0tTVU1fTk9ORToKKwkJc2tiLT5jc3VtID0gfmNzdW1faXB2Nl9tYWdpYyhzYWRkciwgZGFkZHIsIHNrYi0+bGVuLAorCQkJCQkgICAgIElQUFJPVE9fSUNNUFY2LCAwKTsKKwkJaWYgKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpIHsKIAkJCUxJTUlUX05FVERFQlVHKEtFUk5fREVCVUcgIklDTVB2NiBjaGVja3N1bSBmYWlsZWQgWyUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eCA+ICUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eF1cbiIsCiAJCQkJICAgICAgIE5JUDYoKnNhZGRyKSwgTklQNigqZGFkZHIpKTsKIAkJCWdvdG8gZGlzY2FyZF9pdDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3Jhdy5jIGIvbmV0L2lwdjYvcmF3LmMKaW5kZXggNjUxYzc5Yi4uOGU5NjI4ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcmF3LmMKKysrIGIvbmV0L2lwdjYvcmF3LmMKQEAgLTI5OCwxMyArMjk4LDEwIEBACiBzdGF0aWMgaW5saW5lIGludCByYXd2Nl9yY3Zfc2tiKHN0cnVjdCBzb2NrICogc2ssIHN0cnVjdCBza19idWZmICogc2tiKQogewogCWlmICgocmF3Nl9zayhzayktPmNoZWNrc3VtIHx8IHNrLT5za19maWx0ZXIpICYmIAotCSAgICBza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkgewotCQlpZiAoKHVuc2lnbmVkIHNob3J0KWNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCAwLCBza2ItPmxlbiwgc2tiLT5jc3VtKSkpIHsKLQkJCS8qIEZJWE1FOiBpbmNyZW1lbnQgYSByYXc2IGRyb3BzIGNvdW50ZXIgaGVyZSAqLwotCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCSAgICBza2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkgeworCQkvKiBGSVhNRTogaW5jcmVtZW50IGEgcmF3NiBkcm9wcyBjb3VudGVyIGhlcmUgKi8KKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiAwOwogCX0KIAogCS8qIENoYXJnZSBpdCB0byB0aGUgc29ja2V0LiAqLwpAQCAtMzM3LDMyICszMzQsMjUgQEAKIAlpZiAoIXJwLT5jaGVja3N1bSkKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAotCWlmIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkgewotCQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcpIHsKLQkJCXNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYi0+bmgucmF3LAotCQkJICAgICAgICAgICAgICAgICAgIHNrYi0+aC5yYXcgLSBza2ItPm5oLnJhdyk7CisJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXKSB7CisJCXNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYi0+bmgucmF3LAorCQkgICAgICAgICAgICAgICAgICAgc2tiLT5oLnJhdyAtIHNrYi0+bmgucmF3KTsKKwkJaWYgKCFjc3VtX2lwdjZfbWFnaWMoJnNrYi0+bmguaXB2NmgtPnNhZGRyLAorCQkJCSAgICAgJnNrYi0+bmguaXB2NmgtPmRhZGRyLAorCQkJCSAgICAgc2tiLT5sZW4sIGluZXQtPm51bSwgc2tiLT5jc3VtKSkKIAkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0JCQlpZiAoY3N1bV9pcHY2X21hZ2ljKCZza2ItPm5oLmlwdjZoLT5zYWRkciwKLQkJCQkJICAgICZza2ItPm5oLmlwdjZoLT5kYWRkciwKLQkJCQkJICAgIHNrYi0+bGVuLCBpbmV0LT5udW0sIHNrYi0+Y3N1bSkpIHsKLQkJCQlMSU1JVF9ORVRERUJVRyhLRVJOX0RFQlVHICJyYXcgdjYgaHcgY3N1bSBmYWlsdXJlLlxuIik7Ci0JCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCQkJfQotCQl9Ci0JCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9OT05FKQotCQkJc2tiLT5jc3VtID0gfmNzdW1faXB2Nl9tYWdpYygmc2tiLT5uaC5pcHY2aC0+c2FkZHIsCi0JCQkJCQkgICAgICZza2ItPm5oLmlwdjZoLT5kYWRkciwKLQkJCQkJCSAgICAgc2tiLT5sZW4sIGluZXQtPm51bSwgMCk7CiAJfQorCWlmIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkKKwkJc2tiLT5jc3VtID0gfmNzdW1faXB2Nl9tYWdpYygmc2tiLT5uaC5pcHY2aC0+c2FkZHIsCisJCQkJCSAgICAgJnNrYi0+bmguaXB2NmgtPmRhZGRyLAorCQkJCQkgICAgIHNrYi0+bGVuLCBpbmV0LT5udW0sIDApOwogCiAJaWYgKGluZXQtPmhkcmluY2wpIHsKLQkJaWYgKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZICYmCi0JCSAgICAodW5zaWduZWQgc2hvcnQpY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIDAsIHNrYi0+bGVuLCBza2ItPmNzdW0pKSkgeworCQlpZiAoc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpIHsKIAkJCS8qIEZJWE1FOiBpbmNyZW1lbnQgYSByYXc2IGRyb3BzIGNvdW50ZXIgaGVyZSAqLwogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCX0KIAogCXJhd3Y2X3Jjdl9za2Ioc2ssIHNrYik7CkBAIC00MDcsNyArMzk3LDcgQEAKIAlpZiAoc2tiLT5pcF9zdW1tZWQ9PUNIRUNLU1VNX1VOTkVDRVNTQVJZKSB7CiAJCWVyciA9IHNrYl9jb3B5X2RhdGFncmFtX2lvdmVjKHNrYiwgMCwgbXNnLT5tc2dfaW92LCBjb3BpZWQpOwogCX0gZWxzZSBpZiAobXNnLT5tc2dfZmxhZ3MmTVNHX1RSVU5DKSB7Ci0JCWlmICgodW5zaWduZWQgc2hvcnQpY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIDAsIHNrYi0+bGVuLCBza2ItPmNzdW0pKSkKKwkJaWYgKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpCiAJCQlnb3RvIGNzdW1fY29weV9lcnI7CiAJCWVyciA9IHNrYl9jb3B5X2RhdGFncmFtX2lvdmVjKHNrYiwgMCwgbXNnLT5tc2dfaW92LCBjb3BpZWQpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwppbmRleCBkNzQ2ZDNiLi42MmMwZTViIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jCisrKyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKQEAgLTE0MDEsMjAgKzE0MDEsMTggQEAKIHN0YXRpYyBpbnQgdGNwX3Y2X2NoZWNrc3VtX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcpIHsKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAkJaWYgKCF0Y3BfdjZfY2hlY2soc2tiLT5oLnRoLHNrYi0+bGVuLCZza2ItPm5oLmlwdjZoLT5zYWRkciwKLQkJCQkgICZza2ItPm5oLmlwdjZoLT5kYWRkcixza2ItPmNzdW0pKQorCQkJCSAgJnNrYi0+bmguaXB2NmgtPmRhZGRyLHNrYi0+Y3N1bSkpIHsKKwkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJCQlyZXR1cm4gMDsKLQkJTElNSVRfTkVUREVCVUcoS0VSTl9ERUJVRyAiaHcgdGNwIHY2IGNzdW0gZmFpbGVkXG4iKTsKKwkJfQogCX0KKworCXNrYi0+Y3N1bSA9IH50Y3BfdjZfY2hlY2soc2tiLT5oLnRoLHNrYi0+bGVuLCZza2ItPm5oLmlwdjZoLT5zYWRkciwKKwkJCQkgICZza2ItPm5oLmlwdjZoLT5kYWRkciwgMCk7CisKIAlpZiAoc2tiLT5sZW4gPD0gNzYpIHsKLQkJaWYgKHRjcF92Nl9jaGVjayhza2ItPmgudGgsc2tiLT5sZW4sJnNrYi0+bmguaXB2NmgtPnNhZGRyLAotCQkJCSAmc2tiLT5uaC5pcHY2aC0+ZGFkZHIsc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIDApKSkKLQkJCXJldHVybiAtMTsKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQl9IGVsc2UgewotCQlza2ItPmNzdW0gPSB+dGNwX3Y2X2NoZWNrKHNrYi0+aC50aCxza2ItPmxlbiwmc2tiLT5uaC5pcHY2aC0+c2FkZHIsCi0JCQkJCSAgJnNrYi0+bmguaXB2NmgtPmRhZGRyLDApOworCQlyZXR1cm4gX19za2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xNTc1LDcgKzE1NzMsNyBAQAogCQlnb3RvIGRpc2NhcmRfaXQ7CiAKIAlpZiAoKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZICYmCi0JICAgICB0Y3BfdjZfY2hlY2tzdW1faW5pdChza2IpIDwgMCkpCisJICAgICB0Y3BfdjZfY2hlY2tzdW1faW5pdChza2IpKSkKIAkJZ290byBiYWRfcGFja2V0OwogCiAJdGggPSBza2ItPmgudGg7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jCmluZGV4IGJmOTUxOTMuLmU2NzExNTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3VkcC5jCisrKyBiL25ldC9pcHY2L3VkcC5jCkBAIC0yNDgsNyArMjQ4LDcgQEAKIAkJZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkciksIG1zZy0+bXNnX2lvdiwKIAkJCQkJICAgICAgY29waWVkKTsKIAl9IGVsc2UgaWYgKG1zZy0+bXNnX2ZsYWdzJk1TR19UUlVOQykgewotCQlpZiAoKHVuc2lnbmVkIHNob3J0KWNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCAwLCBza2ItPmxlbiwgc2tiLT5jc3VtKSkpCisJCWlmIChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKQogCQkJZ290byBjc3VtX2NvcHlfZXJyOwogCQllcnIgPSBza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyhza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgbXNnLT5tc2dfaW92LAogCQkJCQkgICAgICBjb3BpZWQpOwpAQCAtMzYzLDEzICszNjMsMTAgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlmIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkgewotCQlpZiAoKHVuc2lnbmVkIHNob3J0KWNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCAwLCBza2ItPmxlbiwgc2tiLT5jc3VtKSkpIHsKLQkJCVVEUDZfSU5DX1NUQVRTX0JIKFVEUF9NSUJfSU5FUlJPUlMpOwotCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCWlmIChza2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkgeworCQlVRFA2X0lOQ19TVEFUU19CSChVRFBfTUlCX0lORVJST1JTKTsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiAwOwogCX0KIAogCWlmIChzb2NrX3F1ZXVlX3Jjdl9za2Ioc2ssc2tiKTwwKSB7CkBAIC00OTEsMTMgKzQ4OCwxMCBAQAogCQl1aCA9IHNrYi0+aC51aDsKIAl9CiAKLQlpZiAoc2tiLT5pcF9zdW1tZWQ9PUNIRUNLU1VNX0hXKSB7CisJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXICYmCisJICAgICFjc3VtX2lwdjZfbWFnaWMoc2FkZHIsIGRhZGRyLCB1bGVuLCBJUFBST1RPX1VEUCwgc2tiLT5jc3VtKSkKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQkJaWYgKGNzdW1faXB2Nl9tYWdpYyhzYWRkciwgZGFkZHIsIHVsZW4sIElQUFJPVE9fVURQLCBza2ItPmNzdW0pKSB7Ci0JCQlMSU1JVF9ORVRERUJVRyhLRVJOX0RFQlVHICJ1ZHAgdjYgaHcgY3N1bSBmYWlsdXJlLlxuIik7Ci0JCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7Ci0JCX0KLQl9CisKIAlpZiAoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpCiAJCXNrYi0+Y3N1bSA9IH5jc3VtX2lwdjZfbWFnaWMoc2FkZHIsIGRhZGRyLCB1bGVuLCBJUFBST1RPX1VEUCwgMCk7CiAKQEAgLTUyMSw4ICs1MTUsNyBAQAogCQlpZiAoIXhmcm02X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkKIAkJCWdvdG8gZGlzY2FyZDsKIAotCQlpZiAoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgJiYKLQkJICAgICh1bnNpZ25lZCBzaG9ydCljc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIHNrYi0+Y3N1bSkpKQorCQlpZiAoc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpCiAJCQlnb3RvIGRpc2NhcmQ7CiAJCVVEUDZfSU5DX1NUQVRTX0JIKFVEUF9NSUJfTk9QT1JUUyk7CiAKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy90cmFuc3BvcnQuYyBiL25ldC9yeHJwYy90cmFuc3BvcnQuYwppbmRleCAxMjJjMDg2Li5kYmU2MTA1IDEwMDY0NAotLS0gYS9uZXQvcnhycGMvdHJhbnNwb3J0LmMKKysrIGIvbmV0L3J4cnBjL3RyYW5zcG9ydC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpbmNsdWRlIDxsaW51eC9pY21wLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkIChDT05GSUdfSVBWNl9NT0RVTEUpCkBAIC00NzUsMTUgKzQ3NiwxMSBAQAogCiAJCS8qIHdlJ2xsIHByb2JhYmx5IG5lZWQgdG8gY2hlY2tzdW0gaXQgKGRpZG4ndCBjYWxsCiAJCSAqIHNvY2tfcmVjdm1zZykgKi8KLQkJaWYgKHBrdC0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7Ci0JCQlpZiAoKHVuc2lnbmVkIHNob3J0KQotCQkJICAgIGNzdW1fZm9sZChza2JfY2hlY2tzdW0ocGt0LCAwLCBwa3QtPmxlbiwKLQkJCQkJCSAgIHBrdC0+Y3N1bSkpKSB7Ci0JCQkJa2ZyZWVfc2tiKHBrdCk7Ci0JCQkJcnhycGNfa3J4aW9kX3F1ZXVlX3RyYW5zcG9ydCh0cmFucyk7Ci0JCQkJX2xlYXZlKCIgQ1NVTSBmYWlsZWQiKTsKLQkJCQlyZXR1cm47Ci0JCQl9CisJCWlmIChza2JfY2hlY2tzdW1fY29tcGxldGUocGt0KSkgeworCQkJa2ZyZWVfc2tiKHBrdCk7CisJCQlyeHJwY19rcnhpb2RfcXVldWVfdHJhbnNwb3J0KHRyYW5zKTsKKwkJCV9sZWF2ZSgiIENTVU0gZmFpbGVkIik7CisJCQlyZXR1cm47CiAJCX0KIAogCQlhZGRyID0gcGt0LT5uaC5pcGgtPnNhZGRyOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zb2NrbGliLmMgYi9uZXQvc3VucnBjL3NvY2tsaWIuYwppbmRleCA4Zjk3ZTkwLi5lYjMzMGQ0IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3NvY2tsaWIuYworKysgYi9uZXQvc3VucnBjL3NvY2tsaWIuYwpAQCAtNiw2ICs2LDkgQEAKICAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KICAqLwogCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC91ZHAuaD4KQEAgLTE2NSw2ICsxNjgsOCBAQAogCQlyZXR1cm4gLTE7CiAJaWYgKCh1bnNpZ25lZCBzaG9ydCljc3VtX2ZvbGQoZGVzYy5jc3VtKSkKIAkJcmV0dXJuIC0xOworCWlmICh1bmxpa2VseShza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykpCisJCW5ldGRldl9yeF9jc3VtX2ZhdWx0KHNrYi0+ZGV2KTsKIAlyZXR1cm4gMDsKIG5vX2NoZWNrc3VtOgogCWlmICh4ZHJfcGFydGlhbF9jb3B5X2Zyb21fc2tiKHhkciwgMCwgJmRlc2MsIHNrYl9yZWFkX2JpdHMpIDwgMCkKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3Zjc29jay5jIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmMKaW5kZXggZjE2ZTdjZC4uZTUwZTdjZiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMKKysrIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmMKQEAgLTYyMywxMiArNjIzLDkgQEAKIAkJLyogd2UgY2FuIHVzZSBpdCBpbi1wbGFjZSAqLwogCQlycXN0cC0+cnFfYXJnLmhlYWRbMF0uaW92X2Jhc2UgPSBza2ItPmRhdGEgKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7CiAJCXJxc3RwLT5ycV9hcmcuaGVhZFswXS5pb3ZfbGVuID0gbGVuOwotCQlpZiAoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKLQkJCWlmICgodW5zaWduZWQgc2hvcnQpY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIDAsIHNrYi0+bGVuLCBza2ItPmNzdW0pKSkgewotCQkJCXNrYl9mcmVlX2RhdGFncmFtKHN2c2stPnNrX3NrLCBza2IpOwotCQkJCXJldHVybiAwOwotCQkJfQotCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJaWYgKHNrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKSB7CisJCQlza2JfZnJlZV9kYXRhZ3JhbShzdnNrLT5za19zaywgc2tiKTsKKwkJCXJldHVybiAwOwogCQl9CiAJCXJxc3RwLT5ycV9za2J1ZmYgPSBza2I7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMgYi9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYwppbmRleCBkMWY5ZGE0Li5jOTZjOGEyIDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYworKysgYi9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYwpAQCAtMjc1LDkgKzI3NSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHhhMnh4X2FjOTdfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpfZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHB4YTJ4eF9hYzk3X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc25kX2NhcmRfdCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlzbmRfY2FyZF90ICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChjYXJkKQpAQCAtMjg2LDkgKzI4Niw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBweGEyeHhfYWM5N19yZXN1bWUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgcHhhMnh4X2FjOTdfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzbmRfY2FyZF90ICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCXNuZF9jYXJkX3QgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCByZXQgPSAwOwogCiAJaWYgKGNhcmQpCkBAIC0zMDIsNyArMzAyLDcgQEAKICNkZWZpbmUgcHhhMnh4X2FjOTdfcmVzdW1lCU5VTEwKICNlbmRpZgogCi1zdGF0aWMgaW50IHB4YTJ4eF9hYzk3X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcHhhMnh4X2FjOTdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXNuZF9jYXJkX3QgKmNhcmQ7CiAJYWM5N19idXNfdCAqYWM5N19idXM7CkBAIC0zMTUsOCArMzE1LDggQEAKIAlpZiAoIWNhcmQpCiAJCWdvdG8gZXJyOwogCi0JY2FyZC0+ZGV2ID0gZGV2OwotCXN0cm5jcHkoY2FyZC0+ZHJpdmVyLCBkZXYtPmRyaXZlci0+bmFtZSwgc2l6ZW9mKGNhcmQtPmRyaXZlcikpOworCWNhcmQtPmRldiA9ICZkZXYtPmRldjsKKwlzdHJuY3B5KGNhcmQtPmRyaXZlciwgZGV2LT5kZXYuZHJpdmVyLT5uYW1lLCBzaXplb2YoY2FyZC0+ZHJpdmVyKSk7CiAKIAlyZXQgPSBweGEyeHhfcGNtX25ldyhjYXJkLCAmcHhhMnh4X2FjOTdfcGNtX2NsaWVudCwgJnB4YTJ4eF9hYzk3X3BjbSk7CiAJaWYgKHJldCkKQEAgLTM0NywxMyArMzQ3LDEzIEBACiAJc25wcmludGYoY2FyZC0+c2hvcnRuYW1lLCBzaXplb2YoY2FyZC0+c2hvcnRuYW1lKSwKIAkJICIlcyIsIHNuZF9hYzk3X2dldF9zaG9ydF9uYW1lKHB4YTJ4eF9hYzk3X2FjOTcpKTsKIAlzbnByaW50ZihjYXJkLT5sb25nbmFtZSwgc2l6ZW9mKGNhcmQtPmxvbmduYW1lKSwKLQkJICIlcyAoJXMpIiwgZGV2LT5kcml2ZXItPm5hbWUsIGNhcmQtPm1peGVybmFtZSk7CisJCSAiJXMgKCVzKSIsIGRldi0+ZGV2LmRyaXZlci0+bmFtZSwgY2FyZC0+bWl4ZXJuYW1lKTsKIAogCXNuZF9jYXJkX3NldF9wbV9jYWxsYmFjayhjYXJkLCBweGEyeHhfYWM5N19kb19zdXNwZW5kLAogCQkJCSBweGEyeHhfYWM5N19kb19yZXN1bWUsIE5VTEwpOwogCXJldCA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOwogCWlmIChyZXQgPT0gMCkgewotCQlkZXZfc2V0X2RydmRhdGEoZGV2LCBjYXJkKTsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBjYXJkKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zNjgsMTMgKzM2OCwxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcHhhMnh4X2FjOTdfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcHhhMnh4X2FjOTdfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzbmRfY2FyZF90ICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc25kX2NhcmRfdCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoY2FyZCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAkJR0NSIHw9IEdDUl9BQ0xJTktfT0ZGOwogCQlmcmVlX2lycShJUlFfQUM5NywgTlVMTCk7CiAJCXB4YV9zZXRfY2tlbihDS0VOMl9BQzk3LCAwKTsKQEAgLTM4MywyMyArMzgzLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBweGEyeHhfYWM5N19kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInB4YTJ4eC1hYzk3IiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHB4YTJ4eF9hYzk3X2RyaXZlciA9IHsKIAkucHJvYmUJCT0gcHhhMnh4X2FjOTdfcHJvYmUsCiAJLnJlbW92ZQkJPSBweGEyeHhfYWM5N19yZW1vdmUsCiAJLnN1c3BlbmQJPSBweGEyeHhfYWM5N19zdXNwZW5kLAogCS5yZXN1bWUJCT0gcHhhMnh4X2FjOTdfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJweGEyeHgtYWM5NyIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHB4YTJ4eF9hYzk3X2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZweGEyeHhfYWM5N19kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnB4YTJ4eF9hYzk3X2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBweGEyeHhfYWM5N19leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnB4YTJ4eF9hYzk3X2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnB4YTJ4eF9hYzk3X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHB4YTJ4eF9hYzk3X2luaXQpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9pbml0LmMgYi9zb3VuZC9jb3JlL2luaXQuYwppbmRleCBkOWVlMjdhLi4zMzgxM2Y5IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2luaXQuYworKysgYi9zb3VuZC9jb3JlL2luaXQuYwpAQCAtNjc0LDIzICs2NzQsMjQgQEAKIAlzbmRfY2FyZF90ICpjYXJkOwogfTsKIAotI2RlZmluZSBnZXRfc25kX2dlbmVyaWNfY2FyZChkZXYpCWNvbnRhaW5lcl9vZih0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSwgc3RydWN0IHNuZF9nZW5lcmljX2RldmljZSwgcGRldiktPmNhcmQKKyNkZWZpbmUgZ2V0X3NuZF9nZW5lcmljX2NhcmQoZGV2KQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgc25kX2dlbmVyaWNfZGV2aWNlLCBwZGV2KS0+Y2FyZAogCiAjZGVmaW5lIFNORF9HRU5FUklDX05BTUUJInNuZF9nZW5lcmljIgogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHNuZF9nZW5lcmljX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwotc3RhdGljIGludCBzbmRfZ2VuZXJpY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgc25kX2dlbmVyaWNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitzdGF0aWMgaW50IHNuZF9nZW5lcmljX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwogI2VuZGlmCiAKIC8qIGluaXRpYWxpemVkIGluIHNvdW5kLmMgKi8KLXN0cnVjdCBkZXZpY2VfZHJpdmVyIHNuZF9nZW5lcmljX2RyaXZlciA9IHsKLQkubmFtZQkJPSBTTkRfR0VORVJJQ19OQU1FLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzbmRfZ2VuZXJpY19kcml2ZXIgPSB7CiAjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQJPSBzbmRfZ2VuZXJpY19zdXNwZW5kLAogCS5yZXN1bWUJCT0gc25kX2dlbmVyaWNfcmVzdW1lLAogI2VuZGlmCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gU05EX0dFTkVSSUNfTkFNRSwKKwl9LAogfTsKIAogdm9pZCBzbmRfZ2VuZXJpY19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC04MjEsNyArODIyLDcgQEAKIAogI2lmZGVmIENPTkZJR19TTkRfR0VORVJJQ19EUklWRVIKIC8qIHN1c3BlbmQvcmVzdW1lIGNhbGxiYWNrcyBmb3Igc25kX2dlbmVyaWMgcGxhdGZvcm0gZGV2aWNlICovCi1zdGF0aWMgaW50IHNuZF9nZW5lcmljX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNuZF9nZW5lcmljX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc25kX2NhcmRfdCAqY2FyZDsKIApAQCAtODM0LDcgKzgzNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc25kX2dlbmVyaWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc25kX2dlbmVyaWNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzbmRfY2FyZF90ICpjYXJkOwogCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NvdW5kLmMgYi9zb3VuZC9jb3JlL3NvdW5kLmMKaW5kZXggMTEzOWRkOC4uNmU3Y2FkMWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc291bmQuYworKysgYi9zb3VuZC9jb3JlL3NvdW5kLmMKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjZGVmaW5lIFNORFJWX09TX01JTk9SUyAyNTYKIApAQCAtMzI5LDcgKzMyOSw3IEBACiAgKi8KIAogI2lmZGVmIENPTkZJR19TTkRfR0VORVJJQ19EUklWRVIKLWV4dGVybiBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzbmRfZ2VuZXJpY19kcml2ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzbmRfZ2VuZXJpY19kcml2ZXI7CiAjZW5kaWYKIAogc3RhdGljIGludCBfX2luaXQgYWxzYV9zb3VuZF9pbml0KHZvaWQpCkBAIC0zNTcsNyArMzU3LDcgQEAKIAl9CiAJc25kX2luZm9fbWlub3JfcmVnaXN0ZXIoKTsKICNpZmRlZiBDT05GSUdfU05EX0dFTkVSSUNfRFJJVkVSCi0JZHJpdmVyX3JlZ2lzdGVyKCZzbmRfZ2VuZXJpY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc25kX2dlbmVyaWNfZHJpdmVyKTsKICNlbmRpZgogCWZvciAoY29udHJvbG51bSA9IDA7IGNvbnRyb2xudW0gPCBjYXJkc19saW1pdDsgY29udHJvbG51bSsrKQogCQlkZXZmc19ta19jZGV2KE1LREVWKG1ham9yLCBjb250cm9sbnVtPDw1KSwgU19JRkNIUiB8IGRldmljZV9tb2RlLCAic25kL2NvbnRyb2xDJWQiLCBjb250cm9sbnVtKTsKQEAgLTM3NSw3ICszNzUsNyBAQAogCQlkZXZmc19yZW1vdmUoInNuZC9jb250cm9sQyVkIiwgY29udHJvbG51bSk7CiAKICNpZmRlZiBDT05GSUdfU05EX0dFTkVSSUNfRFJJVkVSCi0JZHJpdmVyX3VucmVnaXN0ZXIoJnNuZF9nZW5lcmljX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNuZF9nZW5lcmljX2RyaXZlcik7CiAjZW5kaWYKIAlzbmRfaW5mb19taW5vcl91bnJlZ2lzdGVyKCk7CiAJc25kX2luZm9fZG9uZSgpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FkMTg4OS5jIGIvc291bmQvcGNpL2FkMTg4OS5jCmluZGV4IGU3MmNjZDEuLjFmZGFlNjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hZDE4ODkuYworKysgYi9zb3VuZC9wY2kvYWQxODg5LmMKQEAgLTEwNjcsNyArMTA2Nyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhZDE4ODlfcGNpID0gewogCS5uYW1lID0gIkFEMTg4OSBBdWRpbyIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2FkMTg4OV9pZHMsCiAJLnByb2JlID0gc25kX2FkMTg4OV9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2FkMTg4OV9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCmluZGV4IDRlNzZjNGEuLmZlZmZiZTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYworKysgYi9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKQEAgLTI0MDMsNyArMjQwMyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiQUxJIDU0NTEiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9hbGlfaWRzLAogCS5wcm9iZSA9IHNuZF9hbGlfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9hbGlfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbHM0MDAwLmMgYi9zb3VuZC9wY2kvYWxzNDAwMC5jCmluZGV4IDdjNjE1NjFmLi4xOTA0ZGY2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxzNDAwMC5jCisrKyBiL3NvdW5kL3BjaS9hbHM0MDAwLmMKQEAgLTc2OCw3ICs3NjgsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkFMUzQwMDAiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9hbHM0MDAwX2lkcywKIAkucHJvYmUgPSBzbmRfY2FyZF9hbHM0MDAwX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfY2FyZF9hbHM0MDAwX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXRpaXhwLmMgYi9zb3VuZC9wY2kvYXRpaXhwLmMKaW5kZXggZjVkYWQ5Mi4uOGJhZTEwZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F0aWl4cC5jCisrKyBiL3NvdW5kL3BjaS9hdGlpeHAuYwpAQCAtMTYzNSw3ICsxNjM1LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJBVEkgSVhQIEFDOTcgY29udHJvbGxlciIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2F0aWl4cF9pZHMsCiAJLnByb2JlID0gc25kX2F0aWl4cF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2F0aWl4cF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jIGIvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCmluZGV4IDBjZjIwMjAuLjMxNzRiNjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYworKysgYi9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKQEAgLTEzMDksNyArMTMwOSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiQVRJIElYUCBNQzk3IGNvbnRyb2xsZXIiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9hdGlpeHBfaWRzLAogCS5wcm9iZSA9IHNuZF9hdGlpeHBfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9hdGlpeHBfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jCmluZGV4IDZhZjNiMTMuLmQ5NjU2MDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuYwpAQCAtMzczLDcgKzM3Myw2IEBACiAvLyBwY2lfZHJpdmVyIGRlZmluaXRpb24KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSBDQVJEX05BTUVfU0hPUlQsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX3ZvcnRleF9pZHMsCiAJLnByb2JlID0gc25kX3ZvcnRleF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX3ZvcnRleF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F6dDMzMjguYyBiL3NvdW5kL3BjaS9henQzMzI4LmMKaW5kZXggZGE5OWIxYi4uYWI3MzdkNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F6dDMzMjguYworKysgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCkBAIC0xODM4LDcgKzE4MzgsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkFaRjMzMjgiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9hemYzMzI4X2lkcywKIAkucHJvYmUgPSBzbmRfYXpmMzMyOF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2F6ZjMzMjhfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9idDg3eC5jIGIvc291bmQvcGNpL2J0ODd4LmMKaW5kZXggMDFkOThlZS4uOGZlY2EyMiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2J0ODd4LmMKKysrIGIvc291bmQvcGNpL2J0ODd4LmMKQEAgLTg5NywxNCArODk3LDEzIEBACiAvKiBkZWZhdWx0IGVudHJpZXMgZm9yIGFsbCBCdDg3eCBjYXJkcyAtIGl0J3Mgbm90IGV4cG9ydGVkICovCiAvKiBkcml2ZXJfZGF0YSBpcyBzZXQgdG8gMCB0byBjYWxsIGRldGVjdGlvbiAqLwogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9idDg3eF9kZWZhdWx0X2lkc1tdID0gewotCUJUX0RFVklDRSg4NzgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDApLAotCUJUX0RFVklDRSg4NzksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDApLAorCUJUX0RFVklDRShQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDApLAorCUJUX0RFVklDRShQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDApLAogCXsgfQogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJCdDg3eCIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2J0ODd4X2lkcywKIAkucHJvYmUgPSBzbmRfYnQ4N3hfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9idDg3eF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jIGIvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCmluZGV4IGVlNThkMTYuLjM4OWQ5NjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYworKysgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKQEAgLTE0OTksNyArMTQ5OSw2IEBACiAvLyBwY2lfZHJpdmVyIGRlZmluaXRpb24KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiQ0EwMTA2IiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfY2EwMTA2X2lkcywKIAkucHJvYmUgPSBzbmRfY2EwMTA2X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfY2EwMTA2X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY21pcGNpLmMgYi9zb3VuZC9wY2kvY21pcGNpLmMKaW5kZXggNTdlOGU0My4uZGI2MDUzNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NtaXBjaS5jCisrKyBiL3NvdW5kL3BjaS9jbWlwY2kuYwpAQCAtMzA1Myw3ICszMDUzLDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJDLU1lZGlhIFBDSSIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2NtaXBjaV9pZHMsCiAJLnByb2JlID0gc25kX2NtaXBjaV9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2NtaXBjaV9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDI4MS5jIGIvc291bmQvcGNpL2NzNDI4MS5jCmluZGV4IGFlYTJjNDcuLjAzNGZmMzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczQyODEuYworKysgYi9zb3VuZC9wY2kvY3M0MjgxLmMKQEAgLTIxMDYsNyArMjEwNiw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiQ1M0MjgxIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfY3M0MjgxX2lkcywKIAkucHJvYmUgPSBzbmRfY3M0MjgxX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfY3M0MjgxX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYwppbmRleCAzMmI0Zjg0Li5iOWZmZjRlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jCisrKyBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMKQEAgLTE2Myw3ICsxNjMsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIlNvdW5kIEZ1c2lvbiBDUzQ2eHgiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9jczQ2eHhfaWRzLAogCS5wcm9iZSA9IHNuZF9jYXJkX2NzNDZ4eF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2NhcmRfY3M0Nnh4X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMKaW5kZXggZGQxZWE5ZC4uNzgyNzBmOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYwpAQCAtMjIzLDcgKzIyMyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiRU1VMTBLMV9BdWRpZ3kiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9lbXUxMGsxX2lkcywKIAkucHJvYmUgPSBzbmRfY2FyZF9lbXUxMGsxX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfY2FyZF9lbXUxMGsxX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYwppbmRleCBjYmI2ODk0Li43OTU1Nzc3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMKQEAgLTE2MTMsNyArMTYxMyw2IEBACiAvLyBwY2lfZHJpdmVyIGRlZmluaXRpb24KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiRU1VMTBLMVgiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9lbXUxMGsxeF9pZHMsCiAJLnByb2JlID0gc25kX2VtdTEwazF4X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfZW11MTBrMXhfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbnMxMzcwLmMgYi9zb3VuZC9wY2kvZW5zMTM3MC5jCmluZGV4IDkyZmY3YzUuLjJkYWE1NzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbnMxMzcwLmMKKysrIGIvc291bmQvcGNpL2VuczEzNzAuYwpAQCAtMjM4Niw3ICsyMzg2LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9IERSSVZFUl9OQU1FLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9hdWRpb3BjaV9pZHMsCiAJLnByb2JlID0gc25kX2F1ZGlvcGNpX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfYXVkaW9wY2lfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lczE5MzguYyBiL3NvdW5kL3BjaS9lczE5MzguYwppbmRleCA3OGY5MGRlLi5jMTM0ZjQ4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZXMxOTM4LmMKKysrIGIvc291bmQvcGNpL2VzMTkzOC5jCkBAIC0xNzU4LDcgKzE3NTgsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkVTUyBFUzE5MzggKFNvbG8tMSkiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9lczE5MzhfaWRzLAogCS5wcm9iZSA9IHNuZF9lczE5MzhfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9lczE5MzhfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lczE5NjguYyBiL3NvdW5kL3BjaS9lczE5NjguYwppbmRleCBhYzgyOTRlLi41MDA3OWRjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZXMxOTY4LmMKKysrIGIvc291bmQvcGNpL2VzMTk2OC5jCkBAIC0yNzYxLDcgKzI3NjEsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkVTMTk2OCAoRVNTIE1hZXN0cm8pIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfZXMxOTY4X2lkcywKIAkucHJvYmUgPSBzbmRfZXMxOTY4X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfZXMxOTY4X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZm04MDEuYyBiL3NvdW5kL3BjaS9mbTgwMS5jCmluZGV4IDRjN2M4ZDIuLjRlMWQzNDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9mbTgwMS5jCisrKyBiL3NvdW5kL3BjaS9mbTgwMS5jCkBAIC0xNDU5LDcgKzE0NTksNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkZNODAxIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfZm04MDFfaWRzLAogCS5wcm9iZSA9IHNuZF9jYXJkX2ZtODAxX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfY2FyZF9mbTgwMV9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKaW5kZXggOWQxNDEyYS4uZWQ1MjVjMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCkBAIC0xNjE2LDcgKzE2MTYsNiBAQAogLyogcGNpX2RyaXZlciBkZWZpbml0aW9uICovCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkhEQSBJbnRlbCIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gYXp4X2lkcywKIAkucHJvYmUgPSBhenhfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGF6eF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCmluZGV4IDVhY2EzNzcuLmJkNzFiZjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKQEAgLTI3MzUsNyArMjczNSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiSUNFMTcxMiIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2ljZTE3MTJfaWRzLAogCS5wcm9iZSA9IHNuZF9pY2UxNzEyX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfaWNlMTcxMl9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCmluZGV4IDViNDI5M2YuLjBiNTM4OWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKQEAgLTIzMzIsNyArMjMzMiw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiSUNFMTcyNCIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX3Z0MTcyNF9pZHMsCiAJLnByb2JlID0gc25kX3Z0MTcyNF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX3Z0MTcyNF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ludGVsOHgwLmMgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwppbmRleCAwODAxMDgzLi5jZjc4MDFkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaW50ZWw4eDAuYworKysgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwpAQCAtMjg3Niw3ICsyODc2LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJJbnRlbCBJQ0giLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9pbnRlbDh4MF9pZHMsCiAJLnByb2JlID0gc25kX2ludGVsOHgwX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfaW50ZWw4eDBfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pbnRlbDh4MG0uYyBiL3NvdW5kL3BjaS9pbnRlbDh4MG0uYwppbmRleCBhY2ZiMTk3Li5hNDIwOTE4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKKysrIGIvc291bmQvcGNpL2ludGVsOHgwbS5jCkBAIC0xMzE3LDcgKzEzMTcsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkludGVsIElDSCBNb2RlbSIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2ludGVsOHgwbV9pZHMsCiAJLnByb2JlID0gc25kX2ludGVsOHgwbV9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2ludGVsOHgwbV9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2tvcmcxMjEyL2tvcmcxMjEyLmMgYi9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYwppbmRleCA1NTYxZmQ0Li5hMTEwZDY2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYworKysgYi9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYwpAQCAtMjUzNCw3ICsyNTM0LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJrb3JnMTIxMiIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2tvcmcxMjEyX2lkcywKIAkucHJvYmUgPSBzbmRfa29yZzEyMTJfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9rb3JnMTIxMl9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL21hZXN0cm8zLmMgYi9zb3VuZC9wY2kvbWFlc3RybzMuYwppbmRleCA5OWViNzZjNS4uZWRlN2E3NSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL21hZXN0cm8zLmMKKysrIGIvc291bmQvcGNpL21hZXN0cm8zLmMKQEAgLTI4NTgsNyArMjg1OCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiTWFlc3RybzMiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9tM19pZHMsCiAJLnByb2JlID0gc25kX20zX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfbTNfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jCmluZGV4IGMzNDFjOTkuLmIzMDkwYTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMKKysrIGIvc291bmQvcGNpL21peGFydC9taXhhcnQuYwpAQCAtMTQyMyw3ICsxNDIzLDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJEaWdpZ3JhbSBtaVhhcnQiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9taXhhcnRfaWRzLAogCS5wcm9iZSA9IHNuZF9taXhhcnRfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9taXhhcnRfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jIGIvc291bmQvcGNpL25tMjU2L25tMjU2LmMKaW5kZXggZTdhYTE1MS4uMDg5ZDIzYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL25tMjU2L25tMjU2LmMKKysrIGIvc291bmQvcGNpL25tMjU2L25tMjU2LmMKQEAgLTE2NzMsNyArMTY3Myw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiTmVvTWFnaWMgMjU2IiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfbm0yNTZfaWRzLAogCS5wcm9iZSA9IHNuZF9ubTI1Nl9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX25tMjU2X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lMzIuYyBiL3NvdW5kL3BjaS9ybWUzMi5jCmluZGV4IGU2NjI3YjAuLjc4M2RmNzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWUzMi5jCisrKyBiL3NvdW5kL3BjaS9ybWUzMi5jCkBAIC0yMDEyLDcgKzIwMTIsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0JCSJSTUUgRGlnaTMyIiwKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPQlzbmRfcm1lMzJfaWRzLAogCS5wcm9iZSA9CXNuZF9ybWUzMl9wcm9iZSwKIAkucmVtb3ZlID0JX19kZXZleGl0X3Aoc25kX3JtZTMyX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTYuYyBiL3NvdW5kL3BjaS9ybWU5Ni5jCmluZGV4IDBlZGRlYjEuLjZkNDIyZWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5Ni5jCisrKyBiL3NvdW5kL3BjaS9ybWU5Ni5jCkBAIC0yNDEzLDcgKzI0MTMsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIlJNRSBEaWdpOTYiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9ybWU5Nl9pZHMsCiAJLnByb2JlID0gc25kX3JtZTk2X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfcm1lOTZfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYwppbmRleCA4NDUxNThiLi5kMTVmZmIzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMKKysrIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jCkBAIC01MDYyLDcgKzUwNjIsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gICAgICJSTUUgSGFtbWVyZmFsbCBEU1AiLAotCS5vd25lciA9ICAgIFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9oZHNwX2lkcywKIAkucHJvYmUgPSAgICBzbmRfaGRzcF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2hkc3BfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCmluZGV4IDYwYTExNDEuLmExYWVmNmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKKysrIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYwpAQCAtMzYzOSw3ICszNjM5LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJSTUUgSGFtbWVyZmFsbCBEU1AgTUFESSIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2hkc3BtX2lkcywKIAkucHJvYmUgPSBzbmRfaGRzcG1fcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9oZHNwbV9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jIGIvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jCmluZGV4IDU5ZmNlZjkuLmY5ZDBjMTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYworKysgYi9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMKQEAgLTI2NTQsNyArMjY1NCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUJICA9ICJSTUUgRGlnaTk2NTIgKEhhbW1lcmZhbGwpIiwKLQkub3duZXIJICA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9ybWU5NjUyX2lkcywKIAkucHJvYmUJICA9IHNuZF9ybWU5NjUyX3Byb2JlLAogCS5yZW1vdmUJICA9IF9fZGV2ZXhpdF9wKHNuZF9ybWU5NjUyX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvc29uaWN2aWJlcy5jIGIvc291bmQvcGNpL3NvbmljdmliZXMuYwppbmRleCA5YTM1NDc0Li5lOTJlZjNhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvc29uaWN2aWJlcy5jCisrKyBiL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMKQEAgLTE1MDIsNyArMTUwMiw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiUzMgU29uaWNWaWJlcyIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX3NvbmljX2lkcywKIAkucHJvYmUgPSBzbmRfc29uaWNfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9zb25pY19yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jIGIvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jCmluZGV4IGE4Y2E4ZTEuLjk0MGQ1MzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYworKysgYi9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMKQEAgLTE3Nyw3ICsxNzcsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIlRyaWRlbnQ0RFdhdmVBdWRpbyIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX3RyaWRlbnRfaWRzLAogCS5wcm9iZSA9IHNuZF90cmlkZW50X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfdHJpZGVudF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ZpYTgyeHguYyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKaW5kZXggNTIzZWFjZS4uZmFkMmEyNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ZpYTgyeHguYworKysgYi9zb3VuZC9wY2kvdmlhODJ4eC5jCkBAIC0yNDc4LDcgKzI0NzgsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIlZJQSA4Mnh4IEF1ZGlvIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfdmlhODJ4eF9pZHMsCiAJLnByb2JlID0gc25kX3ZpYTgyeHhfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF92aWE4Mnh4X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jIGIvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYwppbmRleCAwMTFmMGZiLi5iODM2NjBiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jCisrKyBiL3NvdW5kL3BjaS92aWE4Mnh4X21vZGVtLmMKQEAgLTExOTgsNyArMTE5OCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiVklBIDgyeHggTW9kZW0iLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF92aWE4Mnh4X21vZGVtX2lkcywKIAkucHJvYmUgPSBzbmRfdmlhODJ4eF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX3ZpYTgyeHhfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS92eDIyMi92eDIyMi5jIGIvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMKaW5kZXggMmE3YWQ5ZC4uZGNhNmJkMiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMKKysrIGIvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMKQEAgLTI1Miw3ICsyNTIsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkRpZ2lncmFtIFZYMjIyIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfdngyMjJfaWRzLAogCS5wcm9iZSA9IHNuZF92eDIyMl9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX3Z4MjIyX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jIGIvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYwppbmRleCAxYmJiYTMyLi5kMDEzMjM3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jCisrKyBiL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMKQEAgLTM0NCw3ICszNDQsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIllhbWFoYSBEUy1YRyBQQ0kiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF95bWZwY2lfaWRzLAogCS5wcm9iZSA9IHNuZF9jYXJkX3ltZnBjaV9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2NhcmRfeW1mcGNpX3JlbW92ZSksCg==