ZGlmZiAtLWdpdCBhL3dwYV9zdXBwbGljYW50L2FuZHJvaWQuY29uZmlnIGIvd3BhX3N1cHBsaWNhbnQvYW5kcm9pZC5jb25maWcKaW5kZXggYjg2YzRjNy4uMzMxOTQwYyAxMDA2NDQKLS0tIGEvd3BhX3N1cHBsaWNhbnQvYW5kcm9pZC5jb25maWcKKysrIGIvd3BhX3N1cHBsaWNhbnQvYW5kcm9pZC5jb25maWcKQEAgLTE3Niw3ICsxNzYsNyBAQAogQ09ORklHX0VBUF9MRUFQPXkKIAogIyBFQVAtQUtBIChlbmFibGUgQ09ORklHX1BDU0MsIGlmIEVBUC1BS0EgaXMgdXNlZCkKLSNDT05GSUdfRUFQX0FLQT15CitDT05GSUdfRUFQX0FLQT15CiAKICMgRUFQLUFLQScgKGVuYWJsZSBDT05GSUdfUENTQywgaWYgRUFQLUFLQScgaXMgdXNlZCkuCiAjIFRoaXMgcmVxdWlyZXMgQ09ORklHX0VBUF9BS0EgdG8gYmUgZW5hYmxlZCwgdG9vLgpAQCAtMjAxLDEwICsyMDEsMTIgQEAKICMgRW5hYmxlIFdTQyAyLjAgc3VwcG9ydAogQ09ORklHX1dQUzI9eQogIyBFbmFibGUgV1BTIGV4dGVybmFsIHJlZ2lzdHJhciBmdW5jdGlvbmFsaXR5Ci0jQ09ORklHX1dQU19FUj15CitDT05GSUdfV1BTX0VSPXkKICMgRGlzYWJsZSBjcmVkZW50aWFscyBmb3IgYW4gb3BlbiBuZXR3b3JrIGJ5IGRlZmF1bHQgd2hlbiBhY3RpbmcgYXMgYSBXUFMKICMgcmVnaXN0cmFyLgogI0NPTkZJR19XUFNfUkVHX0RJU0FCTEVfT1BFTj15CisjIEVuYWJsZSBXUFMgc3VwcG9ydCB3aXRoIE5GQyBjb25maWcgbWV0aG9kCitDT05GSUdfV1BTX05GQz15CiAKICMgRUFQLUlLRXYyCiAjQ09ORklHX0VBUF9JS0VWMj15CkBAIC0yMzQsNiArMjM2LDcgQEAKICMgdW5peCA9IFVOSVggZG9tYWluIHNvY2tldHMgKGRlZmF1bHQgZm9yIExpbnV4LypCU0QpCiAjIHVkcCA9IFVEUCBzb2NrZXRzIHVzaW5nIGxvY2FsaG9zdCAoMTI3LjAuMC4xKQogIyBuYW1lZF9waXBlID0gV2luZG93cyBOYW1lZCBQaXBlIChkZWZhdWx0IGZvciBXaW5kb3dzKQorIyB1ZHAtcmVtb3RlID0gVURQIHNvY2tldHMgd2l0aCByZW1vdGUgYWNjZXNzIChvbmx5IGZvciB0ZXN0cyBzeXN0ZW1zL3B1cnBvc2UpCiAjIHkgPSB1c2UgZGVmYXVsdCAoYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpCiAjIElmIHRoaXMgb3B0aW9uIGlzIGNvbW1lbnRlZCBvdXQsIGNvbnRyb2wgaW50ZXJmYWNlIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUKICMgYnVpbGQuCkBAIC0zMjUsOSArMzI4LDcgQEAKICMgUGVlcktleSBoYW5kc2hha2UgZm9yIFN0YXRpb24gdG8gU3RhdGlvbiBMaW5rIChJRUVFIDgwMi4xMWUgRExTKQogQ09ORklHX1BFRVJLRVk9eQogCi0jIElFRUUgODAyLjExdyAobWFuYWdlbWVudCBmcmFtZSBwcm90ZWN0aW9uKQotIyBUaGlzIHZlcnNpb24gaXMgYW4gZXhwZXJpbWVudGFsIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIElFRUUgODAyLjExdy9EMS4wCi0jIGRyYWZ0IGFuZCBpcyBzdWJqZWN0IHRvIGNoYW5nZSBzaW5jZSB0aGUgc3RhbmRhcmQgaGFzIG5vdCB5ZXQgYmVlbiBmaW5hbGl6ZWQuCisjIElFRUUgODAyLjExdyAobWFuYWdlbWVudCBmcmFtZSBwcm90ZWN0aW9uKSwgYWxzbyBrbm93biBhcyBQTUYKICMgRHJpdmVyIHN1cHBvcnQgaXMgYWxzbyBuZWVkZWQgZm9yIElFRUUgODAyLjExdy4KICNDT05GSUdfSUVFRTgwMjExVz15CiAKQEAgLTQ4Niw2ICs0ODcsMTAgQEAKICMgSUVFRSA4MDIuMTFuIChIaWdoIFRocm91Z2hwdXQpIHN1cHBvcnQgKG1haW5seSBmb3IgQVAgbW9kZSkKIENPTkZJR19JRUVFODAyMTFOPXkKIAorIyBXaXJlbGVzcyBOZXR3b3JrIE1hbmFnZW1lbnQgKElFRUUgU3RkIDgwMi4xMXYtMjAxMSkKKyMgTm90ZTogVGhpcyBpcyBleHBlcmltZW50YWwgYW5kIG5vdCBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbi4KKyNDT05GSUdfV05NPXkKKwogIyBJbnRlcndvcmtpbmcgKElFRUUgODAyLjExdSkKICMgVGhpcyBjYW4gYmUgdXNlZCB0byBlbmFibGUgZnVuY3Rpb25hbGl0eSB0byBpbXByb3ZlIGludGVyd29ya2luZyB3aXRoCiAjIGV4dGVybmFsIG5ldHdvcmtzIChHQVMvQU5RUCB0byBsZWFybiBtb3JlIGFib3V0IHRoZSBuZXR3b3JrcyBhbmQgbmV0d29yawpAQCAtNDk4LDEyICs1MDMsMzkgQEAKICMgRGlzYWJsZSByb2FtaW5nIGluIHdwYV9zdXBwbGljYW50CiBDT05GSUdfTk9fUk9BTUlORz15CiAKLSMgRW5hYmxlIFRETFMKLUNPTkZJR19URExTPXkKLQotIyBFbmFibGUgUDJQCi1DT05GSUdfUDJQPXkKKyMgQVAgbW9kZSBvcGVyYXRpb25zIHdpdGggd3BhX3N1cHBsaWNhbnQKKyMgVGhpcyBjYW4gYmUgdXNlZCBmb3IgY29udHJvbGxpbmcgQVAgbW9kZSBvcGVyYXRpb25zIHdpdGggd3BhX3N1cHBsaWNhbnQuIEl0CisjIHNob3VsZCBiZSBub3RlZCB0aGF0IHRoaXMgaXMgbWFpbmx5IGFpbWVkIGF0IHNpbXBsZSBjYXNlcyBsaWtlCisjIFdQQTItUGVyc29uYWwgd2hpbGUgbW9yZSBjb21wbGV4IGNvbmZpZ3VyYXRpb25zIGxpa2UgV1BBMi1FbnRlcnByaXNlIHdpdGggYW4KKyMgZXh0ZXJuYWwgUkFESVVTIHNlcnZlciBjYW4gYmUgc3VwcG9ydGVkIHdpdGggaG9zdGFwZC4KIENPTkZJR19BUD15CiAKKyMgUDJQIChXaS1GaSBEaXJlY3QpCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIFAyUCBzdXBwb3J0IGluIHdwYV9zdXBwbGljYW50LiBTZWUgUkVBRE1FLVAyUCBmb3IKKyMgbW9yZSBpbmZvcm1hdGlvbiBvbiBQMlAgb3BlcmF0aW9ucy4KK0NPTkZJR19QMlA9eQorCitDT05GSUdfVERMUz15CisKICNFbmFibGUgV2lmaSBEaXNwbGF5CiBDT05GSUdfV0lGSV9ESVNQTEFZPXkKKworIyBBdXRvc2NhbgorIyBUaGlzIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSBhdXRvbWF0aWMgc2NhbiBzdXBwb3J0IGluIHdwYV9zdXBwbGljYW50LgorI6BTZWUgd3BhX3N1cHBsaWNhbnQuY29uZiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBhdXRvc2NhbiB1c2FnZS4KKyMKKyMgRW5hYmxpbmcgZGlyZWN0bHkgYSBtb2R1bGUgd2lsbCBlbmFibGUgYXV0b3NjYW4gc3VwcG9ydC4KKyMgRm9yIGV4cG9uZW50aWFsIG1vZHVsZToKKyNDT05GSUdfQVVUT1NDQU5fRVhQT05FTlRJQUw9eQorIyBGb3IgcGVyaW9kaWMgbW9kdWxlOgorI0NPTkZJR19BVVRPU0NBTl9QRVJJT0RJQz15CisKKyMgUGFzc3dvcmQgKGFuZCBwYXNzcGhyYXNlLCBldGMuKSBiYWNrZW5kIGZvciBleHRlcm5hbCBzdG9yYWdlCisjIFRoZXNlIG9wdGlvbmFsIG1lY2hhbmlzbXMgY2FuIGJlIHVzZWQgdG8gYWRkIHN1cHBvcnQgZm9yIHN0b3JpbmcgcGFzc3dvcmRzCisjIGFuZCBvdGhlciBzZWNyZXRzIGluIGV4dGVybmFsICh0byB3cGFfc3VwcGxpY2FudCkgbG9jYXRpb24uIFRoaXMgYWxsb3dzLCBmb3IKKyMgZXhhbXBsZSwgb3BlcmF0aW5nIHN5c3RlbSBzcGVjaWZpYyBrZXkgc3RvcmFnZSB0byBiZSB1c2VkCisjCisjIEV4dGVybmFsIHBhc3N3b3JkIGJhY2tlbmQgZm9yIHRlc3RpbmcgcHVycG9zZXMgKGRldmVsb3BlciB1c2UpCisjQ09ORklHX0VYVF9QQVNTV09SRF9URVNUPXkKKworaW5jbHVkZSAkKHdpbGRjYXJkICQoTE9DQUxfUEFUSCkvYW5kcm9pZF9jb25maWdfKi5pbmMpCmRpZmYgLS1naXQgYS93cGFfc3VwcGxpY2FudC9jb25maWcuYyBiL3dwYV9zdXBwbGljYW50L2NvbmZpZy5jCmluZGV4IDJkZTc4NDUuLmIyNWUwZjYgMTAwNjQ0Ci0tLSBhL3dwYV9zdXBwbGljYW50L2NvbmZpZy5jCisrKyBiL3dwYV9zdXBwbGljYW50L2NvbmZpZy5jCkBAIC0xODI2LDYgKzE4MjYsNyBAQAogCW9zX2ZyZWUoY29uZmlnLT5wc3NpZCk7CiAJb3NfZnJlZShjb25maWctPnAycF9wcmVmX2NoYW4pOwogCW9zX2ZyZWUoY29uZmlnLT5hdXRvc2Nhbik7CisJb3NfZnJlZShjb25maWctPmZyZXFfbGlzdCk7CiAJd3BhYnVmX2ZyZWUoY29uZmlnLT53cHNfbmZjX2RoX3B1YmtleSk7CiAJd3BhYnVmX2ZyZWUoY29uZmlnLT53cHNfbmZjX2RoX3ByaXZrZXkpOwogCXdwYWJ1Zl9mcmVlKGNvbmZpZy0+d3BzX25mY19kZXZfcHcpOwpAQCAtMjczMyw2ICsyNzM0LDIxIEBACiB9CiAKIAorc3RhdGljIGludCB3cGFfY29uZmlnX3Byb2Nlc3NfZnJlcV9saXN0KGNvbnN0IHN0cnVjdCBnbG9iYWxfcGFyc2VfZGF0YSAqZGF0YSwKKwkJCQkJc3RydWN0IHdwYV9jb25maWcgKmNvbmZpZywgaW50IGxpbmUsCisJCQkJCWNvbnN0IGNoYXIgKnZhbHVlKQoreworCWludCAqZnJlcXM7CisKKwlmcmVxcyA9IHdwYV9jb25maWdfcGFyc2VfaW50X2FycmF5KHZhbHVlKTsKKwlpZiAoZnJlcXMgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCW9zX2ZyZWUoY29uZmlnLT5mcmVxX2xpc3QpOworCWNvbmZpZy0+ZnJlcV9saXN0ID0gZnJlcXM7CisJcmV0dXJuIDA7Cit9CisKKwogc3RhdGljIGludCB3cGFfY29uZmlnX3Byb2Nlc3NfY291bnRyeShjb25zdCBzdHJ1Y3QgZ2xvYmFsX3BhcnNlX2RhdGEgKmRhdGEsCiAJCQkJICAgICAgc3RydWN0IHdwYV9jb25maWcgKmNvbmZpZywgaW50IGxpbmUsCiAJCQkJICAgICAgY29uc3QgY2hhciAqcG9zKQpAQCAtMzA4OCw2ICszMTA0LDggQEAKIAl7IElOVChiZWFjb25faW50KSwgMCB9LAogCXsgRlVOQyhhcF92ZW5kb3JfZWxlbWVudHMpLCAwIH0sCiAJeyBJTlRfUkFOR0UoaWdub3JlX29sZF9zY2FuX3JlcywgMCwgMSksIDAgfSwKKwl7IEZVTkMoZnJlcV9saXN0KSwgMCB9LAorCXsgSU5UKHNjaGVkX3NjYW5faW50ZXJ2YWwpLCAwIH0sCiB9OwogCiAjdW5kZWYgRlVOQwpkaWZmIC0tZ2l0IGEvd3BhX3N1cHBsaWNhbnQvY29uZmlnLmggYi93cGFfc3VwcGxpY2FudC9jb25maWcuaAppbmRleCA0YTE3NWNlLi5hMWE1MjM5IDEwMDY0NAotLS0gYS93cGFfc3VwcGxpY2FudC9jb25maWcuaAorKysgYi93cGFfc3VwcGxpY2FudC9jb25maWcuaApAQCAtNjQ1LDYgKzY0NSwxNCBAQAogCXVuc2lnbmVkIGludCBtYXhfbnVtX3N0YTsKIAogCS8qKgorCSAqIGZyZXFfbGlzdCAtIEFycmF5IG9mIGFsbG93ZWQgc2NhbiBmcmVxdWVuY2llcyBvciAlTlVMTCBmb3IgYWxsCisJICoKKwkgKiBUaGlzIGlzIGFuIG9wdGlvbmFsIHplcm8tdGVybWluYXRlZCBhcnJheSBvZiBmcmVxdWVuY2llcyBpbgorCSAqIG1lZ2FoZXJ0eiAoTUh6KSB0byBhbGxvdyBmb3IgbmFycm93aW5nIHNjYW5uaW5nIHJhbmdlLgorCSAqLworCWludCAqZnJlcV9saXN0OworCisJLyoqCiAJICogY2hhbmdlZF9wYXJhbWV0ZXJzIC0gQml0bWFwIG9mIGNoYW5nZWQgcGFyYW1ldGVycyBzaW5jZSBsYXN0IHVwZGF0ZQogCSAqLwogCXVuc2lnbmVkIGludCBjaGFuZ2VkX3BhcmFtZXRlcnM7CkBAIC04NTQsNiArODYyLDExIEBACiAJICogYWxsb3dpbmcgaXQgdG8gdXBkYXRlIHRoZSBpbnRlcm5hbCBCU1MgdGFibGUuCiAJICovCiAJaW50IGlnbm9yZV9vbGRfc2Nhbl9yZXM7CisKKwkvKioKKwkgKiBzY2hlZF9zY2FuX2ludGVydmFsIC0gIHNjaGVkdWxlIHNjYW4gaW50ZXJ2YWwKKwkgKi8KKwl1bnNpZ25lZCBpbnQgc2NoZWRfc2Nhbl9pbnRlcnZhbDsKIH07CiAKIApkaWZmIC0tZ2l0IGEvd3BhX3N1cHBsaWNhbnQvY29uZmlnX2ZpbGUuYyBiL3dwYV9zdXBwbGljYW50L2NvbmZpZ19maWxlLmMKaW5kZXggODYwNGFlOC4uOGZmNDI4NSAxMDA2NDQKLS0tIGEvd3BhX3N1cHBsaWNhbnQvY29uZmlnX2ZpbGUuYworKysgYi93cGFfc3VwcGxpY2FudC9jb25maWdfZmlsZS5jCkBAIC0xMDE1LDYgKzEwMTUsMjAgQEAKIAlpZiAoY29uZmlnLT5pZ25vcmVfb2xkX3NjYW5fcmVzKQogCQlmcHJpbnRmKGYsICJpZ25vcmVfb2xkX3NjYW5fcmVzPSVkXG4iLAogCQkJY29uZmlnLT5pZ25vcmVfb2xkX3NjYW5fcmVzKTsKKworCWlmIChjb25maWctPmZyZXFfbGlzdCAmJiBjb25maWctPmZyZXFfbGlzdFswXSkgeworCQlpbnQgaTsKKwkJZnByaW50ZihmLCAiZnJlcV9saXN0PSIpOworCQlmb3IgKGkgPSAwOyBjb25maWctPmZyZXFfbGlzdFtpXTsgaSsrKSB7CisJCQlmcHJpbnRmKGYsICIlcyV1IiwgaSA+IDAgPyAiICIgOiAiIiwKKwkJCQljb25maWctPmZyZXFfbGlzdFtpXSk7CisJCX0KKwkJZnByaW50ZihmLCAiXG4iKTsKKwl9CisKKwlpZiAoY29uZmlnLT5zY2hlZF9zY2FuX2ludGVydmFsKQorCQlmcHJpbnRmKGYsICJzY2hlZF9zY2FuX2ludGVydmFsPSV1XG4iLAorCQkJY29uZmlnLT5zY2hlZF9zY2FuX2ludGVydmFsKTsKIH0KIAogI2VuZGlmIC8qIENPTkZJR19OT19DT05GSUdfV1JJVEUgKi8KZGlmZiAtLWdpdCBhL3dwYV9zdXBwbGljYW50L2RlZmNvbmZpZyBiL3dwYV9zdXBwbGljYW50L2RlZmNvbmZpZwppbmRleCBlODY3YmFlLi41NjYzYTVmIDEwMDY0NAotLS0gYS93cGFfc3VwcGxpY2FudC9kZWZjb25maWcKKysrIGIvd3BhX3N1cHBsaWNhbnQvZGVmY29uZmlnCkBAIC00MjMsNiArNDIzLDEwIEBACiAjIHNhbWUgZmlsZSwgZS5nLiwgdXNpbmcgdHJhY2UtY21kLgogI0NPTkZJR19ERUJVR19MSU5VWF9UUkFDSU5HPXkKIAorIyBBZGQgc3VwcG9ydCBmb3Igd3JpdGluZyBkZWJ1ZyBsb2cgdG8gQW5kcm9pZCBsb2djYXQgaW5zdGVhZCBvZiBzdGFuZGFyZAorIyBvdXRwdXQKKyNDT05GSUdfQU5EUk9JRF9MT0c9eQorCiAjIEVuYWJsZSBwcml2aWxlZ2Ugc2VwYXJhdGlvbiAoc2VlIFJFQURNRSAnUHJpdmlsZWdlIHNlcGFyYXRpb24nIGZvciBkZXRhaWxzKQogI0NPTkZJR19QUklWU0VQPXkKIApAQCAtNDk1LDYgKzQ5OSw5IEBACiAjIEhvdHNwb3QgMi4wCiAjQ09ORklHX0hTMjA9eQogCisjIERpc2FibGUgcm9hbWluZyBpbiB3cGFfc3VwcGxpY2FudAorI0NPTkZJR19OT19ST0FNSU5HPXkKKwogIyBBUCBtb2RlIG9wZXJhdGlvbnMgd2l0aCB3cGFfc3VwcGxpY2FudAogIyBUaGlzIGNhbiBiZSB1c2VkIGZvciBjb250cm9sbGluZyBBUCBtb2RlIG9wZXJhdGlvbnMgd2l0aCB3cGFfc3VwcGxpY2FudC4gSXQKICMgc2hvdWxkIGJlIG5vdGVkIHRoYXQgdGhpcyBpcyBtYWlubHkgYWltZWQgYXQgc2ltcGxlIGNhc2VzIGxpa2UKQEAgLTUwNyw2ICs1MTQsOSBAQAogIyBtb3JlIGluZm9ybWF0aW9uIG9uIFAyUCBvcGVyYXRpb25zLgogI0NPTkZJR19QMlA9eQogCisjIEVuYWJsZSBURExTIHN1cHBvcnQKKyNDT05GSUdfVERMUz15CisKICMgQXV0b3NjYW4KICMgVGhpcyBjYW4gYmUgdXNlZCB0byBlbmFibGUgYXV0b21hdGljIHNjYW4gc3VwcG9ydCBpbiB3cGFfc3VwcGxpY2FudC4KICPCoFNlZSB3cGFfc3VwcGxpY2FudC5jb25mIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGF1dG9zY2FuIHVzYWdlLgpkaWZmIC0tZ2l0IGEvd3BhX3N1cHBsaWNhbnQvZXZlbnRzLmMgYi93cGFfc3VwcGxpY2FudC9ldmVudHMuYwppbmRleCA2NTAyMjFhLi5jZjI4MDBlIDEwMDY0NAotLS0gYS93cGFfc3VwcGxpY2FudC9ldmVudHMuYworKysgYi93cGFfc3VwcGxpY2FudC9ldmVudHMuYwpAQCAtMTY3OSw3ICsxNjc5LDYgQEAKIHsKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJaW50IGZ0X2NvbXBsZXRlZDsKLQlzdHJ1Y3Qgd3BhX2RyaXZlcl9jYXBhIGNhcGE7CiAKICNpZmRlZiBDT05GSUdfQVAKIAlpZiAod3BhX3MtPmFwX2lmYWNlKSB7CkBAIC0xNzg1LDYgKzE3ODQsMTYgQEAKIAkgICAgd3BhX3MtPmtleV9tZ210ID09IFdQQV9LRVlfTUdNVF9XUEFfTk9ORSB8fAogCSAgICAod3BhX3MtPmN1cnJlbnRfc3NpZCAmJgogCSAgICAgd3BhX3MtPmN1cnJlbnRfc3NpZC0+bW9kZSA9PSBJRUVFODAyMTFfTU9ERV9JQlNTKSkgeworCQlpZiAod3BhX3MtPmtleV9tZ210ID09IFdQQV9LRVlfTUdNVF9XUEFfTk9ORSAmJgorCQkgICAgKHdwYV9zLT5kcnZfZmxhZ3MgJgorCQkgICAgIFdQQV9EUklWRVJfRkxBR1NfU0VUX0tFWVNfQUZURVJfQVNTT0NfRE9ORSkpIHsKKwkJCS8qCisJCQkgKiBTZXQgdGhlIGtleSBhZnRlciBoYXZpbmcgcmVjZWl2ZWQgam9pbmVkLUlCU1MgZXZlbnQKKwkJCSAqIGZyb20gdGhlIGRyaXZlci4KKwkJCSAqLworCQkJd3BhX3N1cHBsaWNhbnRfc2V0X3dwYV9ub25lX2tleSh3cGFfcywKKwkJCQkJCQl3cGFfcy0+Y3VycmVudF9zc2lkKTsKKwkJfQogCQl3cGFfc3VwcGxpY2FudF9jYW5jZWxfYXV0aF90aW1lb3V0KHdwYV9zKTsKIAkJd3BhX3N1cHBsaWNhbnRfc2V0X3N0YXRlKHdwYV9zLCBXUEFfQ09NUExFVEVEKTsKIAl9IGVsc2UgaWYgKCFmdF9jb21wbGV0ZWQpIHsKQEAgLTE4NDUsOCArMTg1NCw4IEBACiAKIAlpZiAoKHdwYV9zLT5rZXlfbWdtdCA9PSBXUEFfS0VZX01HTVRfTk9ORSB8fAogCSAgICAgd3BhX3MtPmtleV9tZ210ID09IFdQQV9LRVlfTUdNVF9JRUVFODAyMVhfTk9fV1BBKSAmJgotCSAgICB3cGFfcy0+Y3VycmVudF9zc2lkICYmIHdwYV9kcnZfZ2V0X2NhcGEod3BhX3MsICZjYXBhKSA9PSAwICYmCi0JICAgIGNhcGEuZmxhZ3MgJiBXUEFfRFJJVkVSX0ZMQUdTX1NFVF9LRVlTX0FGVEVSX0FTU09DX0RPTkUpIHsKKwkgICAgd3BhX3MtPmN1cnJlbnRfc3NpZCAmJgorCSAgICAod3BhX3MtPmRydl9mbGFncyAmIFdQQV9EUklWRVJfRkxBR1NfU0VUX0tFWVNfQUZURVJfQVNTT0NfRE9ORSkpIHsKIAkJLyogU2V0IHN0YXRpYyBXRVAga2V5cyBhZ2FpbiAqLwogCQl3cGFfc2V0X3dlcF9rZXlzKHdwYV9zLCB3cGFfcy0+Y3VycmVudF9zc2lkKTsKIAl9CmRpZmYgLS1naXQgYS93cGFfc3VwcGxpY2FudC9oczIwX3N1cHBsaWNhbnQuYyBiL3dwYV9zdXBwbGljYW50L2hzMjBfc3VwcGxpY2FudC5jCmluZGV4IDE0MDQyNDEuLjQwNDhjZjcgMTAwNjQ0Ci0tLSBhL3dwYV9zdXBwbGljYW50L2hzMjBfc3VwcGxpY2FudC5jCisrKyBiL3dwYV9zdXBwbGljYW50L2hzMjBfc3VwcGxpY2FudC5jCkBAIC0zMyw2ICszMywzNSBAQAogfQogCiAKK2ludCBpc19oczIwX25ldHdvcmsoc3RydWN0IHdwYV9zdXBwbGljYW50ICp3cGFfcywgc3RydWN0IHdwYV9zc2lkICpzc2lkLAorCQkgICAgc3RydWN0IHdwYV9ic3MgKmJzcykKK3sKKwlpZiAoIXdwYV9zLT5jb25mLT5oczIwIHx8ICFzc2lkKQorCQlyZXR1cm4gMDsKKworCWlmIChzc2lkLT5wYXJlbnRfY3JlZCkKKwkJcmV0dXJuIDE7CisKKwlpZiAoYnNzICYmICF3cGFfYnNzX2dldF92ZW5kb3JfaWUoYnNzLCBIUzIwX0lFX1ZFTkRPUl9UWVBFKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFRoaXMgbWF5IGNhdGNoIHNvbWUgbm9uLUhvdHNwb3QgMi4wIGNhc2VzLCBidXQgaXQgaXMgc2FmZXIgdG8gZG8gdGhhdAorCSAqIHRoYW4gY2F1c2UgSG90c3BvdCAyLjAgY29ubmVjdGlvbnMgd2l0aG91dCBpbmRpY2F0aW9uIGVsZW1lbnQgZ2V0dGluZworCSAqIGFkZGVkLiBOb24tSG90c3BvdCAyLjAgQVBzIHNob3VsZCBpZ25vcmUgdGhlIHVua25vd24gdmVuZG9yIGVsZW1lbnQuCisJICovCisKKwlpZiAoIShzc2lkLT5rZXlfbWdtdCAmIFdQQV9LRVlfTUdNVF9JRUVFODAyMVgpKQorCQlyZXR1cm4gMDsKKwlpZiAoIShzc2lkLT5wYWlyd2lzZV9jaXBoZXIgJiBXUEFfQ0lQSEVSX0NDTVApKQorCQlyZXR1cm4gMDsKKwlpZiAoc3NpZC0+cHJvdG8gIT0gV1BBX1BST1RPX1JTTikKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworCiBzdHJ1Y3Qgd3BhYnVmICogaHMyMF9idWlsZF9hbnFwX3JlcSh1MzIgc3R5cGVzLCBjb25zdCB1OCAqcGF5bG9hZCwKIAkJCQkgICAgc2l6ZV90IHBheWxvYWRfbGVuKQogewpkaWZmIC0tZ2l0IGEvd3BhX3N1cHBsaWNhbnQvaHMyMF9zdXBwbGljYW50LmggYi93cGFfc3VwcGxpY2FudC9oczIwX3N1cHBsaWNhbnQuaAppbmRleCA2ZWIzOTI2Li4xYzg0ODFiIDEwMDY0NAotLS0gYS93cGFfc3VwcGxpY2FudC9oczIwX3N1cHBsaWNhbnQuaAorKysgYi93cGFfc3VwcGxpY2FudC9oczIwX3N1cHBsaWNhbnQuaApAQCAtMTYsNSArMTYsNyBAQAogCQkJCSAgICBzaXplX3QgcGF5bG9hZF9sZW4pOwogdm9pZCBoczIwX3BhcnNlX3J4X2hzMjBfYW5xcF9yZXNwKHN0cnVjdCB3cGFfc3VwcGxpY2FudCAqd3BhX3MsCiAJCQkJICBjb25zdCB1OCAqc2EsIGNvbnN0IHU4ICpkYXRhLCBzaXplX3Qgc2xlbik7CitpbnQgaXNfaHMyMF9uZXR3b3JrKHN0cnVjdCB3cGFfc3VwcGxpY2FudCAqd3BhX3MsIHN0cnVjdCB3cGFfc3NpZCAqc3NpZCwKKwkJICAgIHN0cnVjdCB3cGFfYnNzICpic3MpOwogCiAjZW5kaWYgLyogSFMyMF9TVVBQTElDQU5UX0ggKi8KZGlmZiAtLWdpdCBhL3dwYV9zdXBwbGljYW50L3AycF9zdXBwbGljYW50LmMgYi93cGFfc3VwcGxpY2FudC9wMnBfc3VwcGxpY2FudC5jCmluZGV4IDVmY2FmMjkuLmYxZTE1ZmYgMTAwNjQ0Ci0tLSBhL3dwYV9zdXBwbGljYW50L3AycF9zdXBwbGljYW50LmMKKysrIGIvd3BhX3N1cHBsaWNhbnQvcDJwX3N1cHBsaWNhbnQuYwpAQCAtMTAwMyw2ICsxMDAzLDcgQEAKIAlkLT5tYXhfbnVtX3N0YSA9IHMtPm1heF9udW1fc3RhOwogCWQtPnBiY19pbl9tMSA9IHMtPnBiY19pbl9tMTsKIAlkLT5pZ25vcmVfb2xkX3NjYW5fcmVzID0gcy0+aWdub3JlX29sZF9zY2FuX3JlczsKKwlkLT5iZWFjb25faW50ID0gcy0+YmVhY29uX2ludDsKIH0KIAogCmRpZmYgLS1naXQgYS93cGFfc3VwcGxpY2FudC9zY2FuLmMgYi93cGFfc3VwcGxpY2FudC9zY2FuLmMKaW5kZXggZGI3M2ExOC4uMDJjMTFiMCAxMDA2NDQKLS0tIGEvd3BhX3N1cHBsaWNhbnQvc2Nhbi5jCisrKyBiL3dwYV9zdXBwbGljYW50L3NjYW4uYwpAQCAtNDUzLDYgKzQ1MywxMSBAQAogCiAjZW5kaWYgLyogQ09ORklHX1dQUyAqLwogCisjaWZkZWYgQ09ORklHX0hTMjAKKwlpZiAod3BhX3MtPmNvbmYtPmhzMjAgJiYgd3BhYnVmX3Jlc2l6ZSgmZXh0cmFfaWUsIDcpID09IDApCisJCXdwYXNfaHMyMF9hZGRfaW5kaWNhdGlvbihleHRyYV9pZSk7CisjZW5kaWYgLyogQ09ORklHX0hTMjAgKi8KKwogCXJldHVybiBleHRyYV9pZTsKIH0KIApAQCAtNzQ5LDExICs3NTQsNiBAQAogCXdwYV9zdXBwbGljYW50X29wdGltaXplX2ZyZXFzKHdwYV9zLCAmcGFyYW1zKTsKIAlleHRyYV9pZSA9IHdwYV9zdXBwbGljYW50X2V4dHJhX2llcyh3cGFfcyk7CiAKLSNpZmRlZiBDT05GSUdfSFMyMAotCWlmICh3cGFfcy0+Y29uZi0+aHMyMCAmJiB3cGFidWZfcmVzaXplKCZleHRyYV9pZSwgNykgPT0gMCkKLQkJd3Bhc19oczIwX2FkZF9pbmRpY2F0aW9uKGV4dHJhX2llKTsKLSNlbmRpZiAvKiBDT05GSUdfSFMyMCAqLwotCiAJaWYgKHBhcmFtcy5mcmVxcyA9PSBOVUxMICYmIHdwYV9zLT5uZXh0X3NjYW5fZnJlcXMpIHsKIAkJd3BhX2RiZyh3cGFfcywgTVNHX0RFQlVHLCAiT3B0aW1pemUgc2NhbiBiYXNlZCBvbiBwcmV2aW91c2x5ICIKIAkJCSJnZW5lcmF0ZWQgZnJlcXVlbmN5IGxpc3QiKTsKQEAgLTc2Miw2ICs3NjIsMTMgQEAKIAkJb3NfZnJlZSh3cGFfcy0+bmV4dF9zY2FuX2ZyZXFzKTsKIAl3cGFfcy0+bmV4dF9zY2FuX2ZyZXFzID0gTlVMTDsKIAorCS8qIFNlZSBpZiB1c2VyIHNwZWNpZmllZCBmcmVxdWVuY2llcy4gSWYgc28sIHNjYW4gb25seSB0aG9zZS4gKi8KKwlpZiAod3BhX3MtPmNvbmYtPmZyZXFfbGlzdCAmJiAhcGFyYW1zLmZyZXFzKSB7CisJCXdwYV9kYmcod3BhX3MsIE1TR19ERUJVRywKKwkJCSJPcHRpbWl6ZSBzY2FuIGJhc2VkIG9uIGNvbmYtPmZyZXFfbGlzdCIpOworCQlpbnRfYXJyYXlfY29uY2F0KCZwYXJhbXMuZnJlcXMsIHdwYV9zLT5jb25mLT5mcmVxX2xpc3QpOworCX0KKwogCXBhcmFtcy5maWx0ZXJfc3NpZHMgPSB3cGFfc3VwcGxpY2FudF9idWlsZF9maWx0ZXJfc3NpZHMoCiAJCXdwYV9zLT5jb25mLCAmcGFyYW1zLm51bV9maWx0ZXJfc3NpZHMpOwogCWlmIChleHRyYV9pZSkgewpAQCAtMTAyOCw3ICsxMDM1LDkgQEAKIAogCWlmICghc3NpZCB8fCAhd3BhX3MtPnByZXZfc2NoZWRfc3NpZCkgewogCQl3cGFfZGJnKHdwYV9zLCBNU0dfREVCVUcsICJCZWdpbm5pbmcgb2YgU1NJRCBsaXN0Iik7Ci0KKwkJaWYgKHdwYV9zLT5jb25mLT5zY2hlZF9zY2FuX2ludGVydmFsKQorCQkJd3BhX3MtPnNjaGVkX3NjYW5faW50ZXJ2YWwgPQorCQkJCXdwYV9zLT5jb25mLT5zY2hlZF9zY2FuX2ludGVydmFsOwogCQlpZiAod3BhX3MtPnNjaGVkX3NjYW5faW50ZXJ2YWwgPT0gMCkKIAkJCXdwYV9zLT5zY2hlZF9zY2FuX2ludGVydmFsID0gMTA7CiAJCXdwYV9zLT5zY2hlZF9zY2FuX3RpbWVvdXQgPSBtYXhfc2NoZWRfc2Nhbl9zc2lkcyAqIDI7CmRpZmYgLS1naXQgYS93cGFfc3VwcGxpY2FudC9zbWUuYyBiL3dwYV9zdXBwbGljYW50L3NtZS5jCmluZGV4IDk4MmUxMjQuLjAzNzE2MjggMTAwNjQ0Ci0tLSBhL3dwYV9zdXBwbGljYW50L3NtZS5jCisrKyBiL3dwYV9zdXBwbGljYW50L3NtZS5jCkBAIC0zNTMsNyArMzUzLDcgQEAKICNlbmRpZiAvKiBDT05GSUdfUDJQICovCiAKICNpZmRlZiBDT05GSUdfSFMyMAotCWlmICh3cGFfcy0+Y29uZi0+aHMyMCkgeworCWlmIChpc19oczIwX25ldHdvcmsod3BhX3MsIHNzaWQsIGJzcykpIHsKIAkJc3RydWN0IHdwYWJ1ZiAqaHMyMDsKIAkJaHMyMCA9IHdwYWJ1Zl9hbGxvYygyMCk7CiAJCWlmIChoczIwKSB7CmRpZmYgLS1naXQgYS93cGFfc3VwcGxpY2FudC93cGFfY2xpLmMgYi93cGFfc3VwcGxpY2FudC93cGFfY2xpLmMKaW5kZXggMjA0ZDEzZS4uYjY2ZGNkMCAxMDA2NDQKLS0tIGEvd3BhX3N1cHBsaWNhbnQvd3BhX2NsaS5jCisrKyBiL3dwYV9zdXBwbGljYW50L3dwYV9jbGkuYwpAQCAtNTgyLDUyICs1ODIsODEgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCB3cGFfY2xpX3Nob3dfdmFyaWFibGVzKHZvaWQpCi17Ci0JcHJpbnRmKCJzZXQgdmFyaWFibGVzOlxuIgotCSAgICAgICAiICBFQVBPTDo6aGVsZFBlcmlvZCAoRUFQT0wgc3RhdGUgbWFjaGluZSBoZWxkIHBlcmlvZCwgIgotCSAgICAgICAiaW4gc2Vjb25kcylcbiIKLQkgICAgICAgIiAgRUFQT0w6OmF1dGhQZXJpb2QgKEVBUE9MIHN0YXRlIG1hY2hpbmUgYXV0aGVudGljYXRpb24gIgotCSAgICAgICAicGVyaW9kLCBpbiBzZWNvbmRzKVxuIgotCSAgICAgICAiICBFQVBPTDo6c3RhcnRQZXJpb2QgKEVBUE9MIHN0YXRlIG1hY2hpbmUgc3RhcnQgcGVyaW9kLCBpbiAiCi0JICAgICAgICJzZWNvbmRzKVxuIgotCSAgICAgICAiICBFQVBPTDo6bWF4U3RhcnQgKEVBUE9MIHN0YXRlIG1hY2hpbmUgbWF4aW11bSBzdGFydCAiCi0JICAgICAgICJhdHRlbXB0cylcbiIpOwotCXByaW50ZigiICBkb3QxMVJTTkFDb25maWdQTUtMaWZldGltZSAoV1BBL1dQQTIgUE1LIGxpZmV0aW1lIGluICIKLQkgICAgICAgInNlY29uZHMpXG4iCi0JICAgICAgICIgIGRvdDExUlNOQUNvbmZpZ1BNS1JlYXV0aFRocmVzaG9sZCAoV1BBL1dQQTIgcmVhdXRoZW50aWNhdGlvbiIKLQkgICAgICAgIiB0aHJlc2hvbGRcblx0cGVyY2VudGFnZSlcbiIKLQkgICAgICAgIiAgZG90MTFSU05BQ29uZmlnU0FUaW1lb3V0IChXUEEvV1BBMiB0aW1lb3V0IGZvciBjb21wbGV0aW5nICIKLQkgICAgICAgInNlY3VyaXR5XG5cdGFzc29jaWF0aW9uIGluIHNlY29uZHMpXG4iKTsKLX0KLQotCiBzdGF0aWMgaW50IHdwYV9jbGlfY21kX3NldChzdHJ1Y3Qgd3BhX2N0cmwgKmN0cmwsIGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAJY2hhciBjbWRbMjU2XTsKIAlpbnQgcmVzOwogCi0JaWYgKGFyZ2MgPT0gMCkgewotCQl3cGFfY2xpX3Nob3dfdmFyaWFibGVzKCk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChhcmdjICE9IDEgJiYgYXJnYyAhPSAyKSB7Ci0JCXByaW50ZigiSW52YWxpZCBTRVQgY29tbWFuZDogbmVlZHMgdHdvIGFyZ3VtZW50cyAodmFyaWFibGUgIgotCQkgICAgICAgIm5hbWUgYW5kIHZhbHVlKVxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlpZiAoYXJnYyA9PSAxKQorCWlmIChhcmdjID09IDEpIHsKIAkJcmVzID0gb3Nfc25wcmludGYoY21kLCBzaXplb2YoY21kKSwgIlNFVCAlcyAiLCBhcmd2WzBdKTsKLQllbHNlCi0JCXJlcyA9IG9zX3NucHJpbnRmKGNtZCwgc2l6ZW9mKGNtZCksICJTRVQgJXMgJXMiLAotCQkJCSAgYXJndlswXSwgYXJndlsxXSk7Ci0JaWYgKHJlcyA8IDAgfHwgKHNpemVfdCkgcmVzID49IHNpemVvZihjbWQpIC0gMSkgewotCQlwcmludGYoIlRvbyBsb25nIFNFVCBjb21tYW5kLlxuIik7Ci0JCXJldHVybiAtMTsKKwkJaWYgKHJlcyA8IDAgfHwgKHNpemVfdCkgcmVzID49IHNpemVvZihjbWQpIC0gMSkgeworCQkJcHJpbnRmKCJUb28gbG9uZyBTRVQgY29tbWFuZC5cbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCXJldHVybiB3cGFfY3RybF9jb21tYW5kKGN0cmwsIGNtZCk7CiAJfQotCXJldHVybiB3cGFfY3RybF9jb21tYW5kKGN0cmwsIGNtZCk7CisKKwlyZXR1cm4gd3BhX2NsaV9jbWQoY3RybCwgIlNFVCIsIDIsIGFyZ2MsIGFyZ3YpOworfQorCisKK3N0YXRpYyBjaGFyICoqIHdwYV9jbGlfY29tcGxldGVfc2V0KGNvbnN0IGNoYXIgKnN0ciwgaW50IHBvcykKK3sKKwlpbnQgYXJnID0gZ2V0X2NtZF9hcmdfbnVtKHN0ciwgcG9zKTsKKwljb25zdCBjaGFyICpmaWVsZHNbXSA9IHsKKwkJLyogcnVudGltZSB2YWx1ZXMgKi8KKwkJIkVBUE9MOjpoZWxkUGVyaW9kIiwgIkVBUE9MOjphdXRoUGVyaW9kIiwgIkVBUE9MOjpzdGFydFBlcmlvZCIsCisJCSJFQVBPTDo6bWF4U3RhcnQiLCAiZG90MTFSU05BQ29uZmlnUE1LTGlmZXRpbWUiLAorCQkiZG90MTFSU05BQ29uZmlnUE1LUmVhdXRoVGhyZXNob2xkIiwgImRvdDExUlNOQUNvbmZpZ1NBVGltZW91dCIsCisJCSJ3cHNfZnJhZ21lbnRfc2l6ZSIsICJ3cHNfdmVyc2lvbl9udW1iZXIiLCAiYW1wZHUiLAorCQkidGRsc190ZXN0aW5nIiwgInRkbHNfZGlzYWJsZWQiLCAicG5vIiwgInJhZGlvX2Rpc2FibGVkIiwKKwkJInVhcHNkIiwgInBzIiwgIndpZmlfZGlzcGxheSIsICJic3NpZF9maWx0ZXIiLCAiZGlzYWxsb3dfYXBzIiwKKwkJIm5vX2tlZXBfYWxpdmUiLAorCQkvKiBnbG9iYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovCisJCSJlYXBvbF92ZXJzaW9uIiwgImFwX3NjYW4iLCAiZGlzYWJsZV9zY2FuX29mZmxvYWQiLAorCQkiZmFzdF9yZWF1dGgiLCAib3BlbnNjX2VuZ2luZV9wYXRoIiwgInBrY3MxMV9lbmdpbmVfcGF0aCIsCisJCSJwa2NzMTFfbW9kdWxlX3BhdGgiLCAicGNzY19yZWFkZXIiLCAicGNzY19waW4iLAorCQkiZHJpdmVyX3BhcmFtIiwgImRvdDExUlNOQUNvbmZpZ1BNS0xpZmV0aW1lIiwKKwkJImRvdDExUlNOQUNvbmZpZ1BNS1JlYXV0aFRocmVzaG9sZCIsCisJCSJkb3QxMVJTTkFDb25maWdTQVRpbWVvdXQiLAorCQkidXBkYXRlX2NvbmZpZyIsICJsb2FkX2R5bmFtaWNfZWFwIiwgInV1aWQiLCAiZGV2aWNlX25hbWUiLAorCQkibWFudWZhY3R1cmVyIiwgIm1vZGVsX25hbWUiLCAibW9kZWxfbnVtYmVyIiwgInNlcmlhbF9udW1iZXIiLAorCQkiZGV2aWNlX3R5cGUiLCAib3NfdmVyc2lvbiIsICJjb25maWdfbWV0aG9kcyIsCisJCSJ3cHNfY3JlZF9wcm9jZXNzaW5nIiwgIndwc192ZW5kb3JfZXh0X20xIiwgInNlY19kZXZpY2VfdHlwZSIsCisJCSJwMnBfbGlzdGVuX3JlZ19jbGFzcyIsICJwMnBfbGlzdGVuX2NoYW5uZWwiLAorCQkicDJwX29wZXJfcmVnX2NsYXNzIiwgInAycF9vcGVyX2NoYW5uZWwiLAorCQkicDJwX2dvX2ludGVudCIsICJwMnBfc3NpZF9wb3N0Zml4IiwgInBlcnNpc3RlbnRfcmVjb25uZWN0IiwKKwkJInAycF9pbnRyYV9ic3MiLCAicDJwX2dyb3VwX2lkbGUiLCAicDJwX3ByZWZfY2hhbiIsCisJCSJwMnBfZ29faHQ0MCIsICJwMnBfZGlzYWJsZWQiLCAicDJwX25vX2dyb3VwX2lmYWNlIiwKKwkJInAycF9pZ25vcmVfc2hhcmVkX2ZyZXEiLCAiY291bnRyeSIsICJic3NfbWF4X2NvdW50IiwKKwkJImJzc19leHBpcmF0aW9uX2FnZSIsICJic3NfZXhwaXJhdGlvbl9zY2FuX2NvdW50IiwKKwkJImZpbHRlcl9zc2lkcyIsICJmaWx0ZXJfcnNzaSIsICJtYXhfbnVtX3N0YSIsCisJCSJkaXNhc3NvY19sb3dfYWNrIiwgImhzMjAiLCAiaW50ZXJ3b3JraW5nIiwgImhlc3NpZCIsCisJCSJhY2Nlc3NfbmV0d29ya190eXBlIiwgInBiY19pbl9tMSIsICJhdXRvc2NhbiIsCisJCSJ3cHNfbmZjX2Rldl9wd19pZCIsICJ3cHNfbmZjX2RoX3B1YmtleSIsICJ3cHNfbmZjX2RoX3ByaXZrZXkiLAorCQkid3BzX25mY19kZXZfcHciLCAiZXh0X3Bhc3N3b3JkX2JhY2tlbmQiLAorCQkicDJwX2dvX21heF9pbmFjdGl2aXR5IiwgImF1dG9faW50ZXJ3b3JraW5nIiwgIm9rYyIsICJwbWYiLAorCQkic2FlX2dyb3VwcyIsICJkdGltX3BlcmlvZCIsICJiZWFjb25faW50IiwgImFwX3ZlbmRvcl9lbGVtZW50cyIsCisJCSJpZ25vcmVfb2xkX3NjYW5fcmVzIiwgImZyZXFfbGlzdCIKKwl9OworCWludCBpLCBudW1fZmllbGRzID0gc2l6ZW9mKGZpZWxkcykgLyBzaXplb2YoZmllbGRzWzBdKTsKKworCWlmIChhcmcgPT0gMSkgeworCQljaGFyICoqcmVzID0gb3NfY2FsbG9jKG51bV9maWVsZHMgKyAxLCBzaXplb2YoY2hhciAqKSk7CisJCWlmIChyZXMgPT0gTlVMTCkKKwkJCXJldHVybiBOVUxMOworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2ZpZWxkczsgaSsrKSB7CisJCQlyZXNbaV0gPSBvc19zdHJkdXAoZmllbGRzW2ldKTsKKwkJCWlmIChyZXNbaV0gPT0gTlVMTCkKKwkJCQlyZXR1cm4gcmVzOworCQl9CisJCXJldHVybiByZXM7CisJfQorCisJaWYgKGFyZyA+IDEgJiYgb3Nfc3RybmNhc2VjbXAoc3RyLCAic2V0IGJzc2lkX2ZpbHRlciAiLCAxNykgPT0gMCkKKwkJcmV0dXJuIGNsaV90eHRfbGlzdF9hcnJheSgmYnNzZXMpOworCisJcmV0dXJuIE5VTEw7CiB9CiAKIApAQCAtMjM3Miw3ICsyNDAxLDcgQEAKIAl7ICJxdWl0Iiwgd3BhX2NsaV9jbWRfcXVpdCwgTlVMTCwKIAkgIGNsaV9jbWRfZmxhZ19ub25lLAogCSAgIj0gZXhpdCB3cGFfY2xpIiB9LAotCXsgInNldCIsIHdwYV9jbGlfY21kX3NldCwgTlVMTCwKKwl7ICJzZXQiLCB3cGFfY2xpX2NtZF9zZXQsIHdwYV9jbGlfY29tcGxldGVfc2V0LAogCSAgY2xpX2NtZF9mbGFnX25vbmUsCiAJICAiPSBzZXQgdmFyaWFibGVzIChzaG93cyBsaXN0IG9mIHZhcmlhYmxlcyB3aGVuIHJ1biB3aXRob3V0ICIKIAkgICJhcmd1bWVudHMpIiB9LApAQCAtMzMxNiw2ICszMzQ1LDM3IEBACiB9CiAKIAorc3RhdGljIHZvaWQgdXBkYXRlX2Jzc2lkX2xpc3Qoc3RydWN0IHdwYV9jdHJsICpjdHJsKQoreworCWNoYXIgYnVmWzQwOTZdOworCXNpemVfdCBsZW4gPSBzaXplb2YoYnVmKTsKKwlpbnQgcmV0OworCWNoYXIgKmNtZCA9ICJCU1MgUkFOR0U9QUxMIE1BU0s9MHgyIjsKKwljaGFyICpwb3MsICplbmQ7CisKKwlpZiAoY3RybCA9PSBOVUxMKQorCQlyZXR1cm47CisJcmV0ID0gd3BhX2N0cmxfcmVxdWVzdChjdHJsLCBjbWQsIG9zX3N0cmxlbihjbWQpLCBidWYsICZsZW4sIE5VTEwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm47CisJYnVmW2xlbl0gPSAnXDAnOworCisJcG9zID0gYnVmOworCXdoaWxlIChwb3MpIHsKKwkJcG9zID0gb3Nfc3Ryc3RyKHBvcywgImJzc2lkPSIpOworCQlpZiAocG9zID09IE5VTEwpCisJCQlicmVhazsKKwkJcG9zICs9IDY7CisJCWVuZCA9IG9zX3N0cmNocihwb3MsICdcbicpOworCQlpZiAoZW5kID09IE5VTEwpCisJCQlicmVhazsKKwkJKmVuZCA9ICdcMCc7CisJCWNsaV90eHRfbGlzdF9hZGQoJmJzc2VzLCBwb3MpOworCQlwb3MgPSBlbmQgKyAxOworCX0KK30KKworCiBzdGF0aWMgdm9pZCB0cnlfY29ubmVjdGlvbih2b2lkICplbG9vcF9jdHgsIHZvaWQgKnRpbWVvdXRfY3R4KQogewogCWlmIChjdHJsX2lmbmFtZSA9PSBOVUxMKQpAQCAtMzMzMSw2ICszMzkxLDggQEAKIAkJcmV0dXJuOwogCX0KIAorCXVwZGF0ZV9ic3NpZF9saXN0KGN0cmxfY29ubik7CisKIAlpZiAod2FybmluZ19kaXNwbGF5ZWQpCiAJCXByaW50ZigiQ29ubmVjdGlvbiBlc3RhYmxpc2hlZC5cbiIpOwogCmRpZmYgLS1naXQgYS93cGFfc3VwcGxpY2FudC93cGFfc3VwcGxpY2FudC5jIGIvd3BhX3N1cHBsaWNhbnQvd3BhX3N1cHBsaWNhbnQuYwppbmRleCBhNjZmNjU0Li5jODA3ODg4IDEwMDY0NAotLS0gYS93cGFfc3VwcGxpY2FudC93cGFfc3VwcGxpY2FudC5jCisrKyBiL3dwYV9zdXBwbGljYW50L3dwYV9zdXBwbGljYW50LmMKQEAgLTEyNiw4ICsxMjYsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgd3BhX3N1cHBsaWNhbnRfc2V0X3dwYV9ub25lX2tleShzdHJ1Y3Qgd3BhX3N1cHBsaWNhbnQgKndwYV9zLAotCQkJCQkgICBzdHJ1Y3Qgd3BhX3NzaWQgKnNzaWQpCitpbnQgd3BhX3N1cHBsaWNhbnRfc2V0X3dwYV9ub25lX2tleShzdHJ1Y3Qgd3BhX3N1cHBsaWNhbnQgKndwYV9zLAorCQkJCSAgICBzdHJ1Y3Qgd3BhX3NzaWQgKnNzaWQpCiB7CiAJdTgga2V5WzMyXTsKIAlzaXplX3Qga2V5bGVuOwpAQCAtMTI3MSw3ICsxMjcxLDYgQEAKIAllbnVtIHdwYV9jaXBoZXIgY2lwaGVyX3BhaXJ3aXNlLCBjaXBoZXJfZ3JvdXA7CiAJc3RydWN0IHdwYV9kcml2ZXJfYXNzb2NpYXRlX3BhcmFtcyBwYXJhbXM7CiAJaW50IHdlcF9rZXlzX3NldCA9IDA7Ci0Jc3RydWN0IHdwYV9kcml2ZXJfY2FwYSBjYXBhOwogCWludCBhc3NvY19mYWlsZWQgPSAwOwogCXN0cnVjdCB3cGFfc3NpZCAqb2xkX3NzaWQ7CiAJdTggZXh0X2NhcGFiWzEwXTsKQEAgLTE0NzUsNyArMTQ3NCw3IEBACiAjZW5kaWYgLyogQ09ORklHX1AyUCAqLwogCiAjaWZkZWYgQ09ORklHX0hTMjAKLQlpZiAod3BhX3MtPmNvbmYtPmhzMjApIHsKKwlpZiAoaXNfaHMyMF9uZXR3b3JrKHdwYV9zLCBzc2lkLCBic3MpKSB7CiAJCXN0cnVjdCB3cGFidWYgKmhzMjA7CiAJCWhzMjAgPSB3cGFidWZfYWxsb2MoMjApOwogCQlpZiAoaHMyMCkgewpAQCAtMTY4Niw4ICsxNjg1LDggQEAKIAkJd3BhX3N1cHBsaWNhbnRfcmVxX2F1dGhfdGltZW91dCh3cGFfcywgdGltZW91dCwgMCk7CiAJfQogCi0JaWYgKHdlcF9rZXlzX3NldCAmJiB3cGFfZHJ2X2dldF9jYXBhKHdwYV9zLCAmY2FwYSkgPT0gMCAmJgotCSAgICBjYXBhLmZsYWdzICYgV1BBX0RSSVZFUl9GTEFHU19TRVRfS0VZU19BRlRFUl9BU1NPQykgeworCWlmICh3ZXBfa2V5c19zZXQgJiYKKwkgICAgKHdwYV9zLT5kcnZfZmxhZ3MgJiBXUEFfRFJJVkVSX0ZMQUdTX1NFVF9LRVlTX0FGVEVSX0FTU09DKSkgewogCQkvKiBTZXQgc3RhdGljIFdFUCBrZXlzIGFnYWluICovCiAJCXdwYV9zZXRfd2VwX2tleXMod3BhX3MsIHNzaWQpOwogCX0KZGlmZiAtLWdpdCBhL3dwYV9zdXBwbGljYW50L3dwYV9zdXBwbGljYW50LmNvbmYgYi93cGFfc3VwcGxpY2FudC93cGFfc3VwcGxpY2FudC5jb25mCmluZGV4IDA5MzVhMDYuLjg3ZGQzOTcgMTAwNjQ0Ci0tLSBhL3dwYV9zdXBwbGljYW50L3dwYV9zdXBwbGljYW50LmNvbmYKKysrIGIvd3BhX3N1cHBsaWNhbnQvd3BhX3N1cHBsaWNhbnQuY29uZgpAQCAtNTI0LDYgKzUyNCw5IEBACiAjIHNldCwgc2NhbiByZXN1bHRzIHRoYXQgZG8gbm90IG1hdGNoIGFueSBvZiB0aGUgc3BlY2lmaWVkIGZyZXF1ZW5jaWVzIGFyZSBub3QKICMgY29uc2lkZXJlZCB3aGVuIHNlbGVjdGluZyBhIEJTUy4KICMKKyMgVGhpcyBjYW4gYWxzbyBiZSBzZXQgb24gdGhlIG91dHNpZGUgb2YgdGhlIG5ldHdvcmsgYmxvY2suIEluIHRoaXMgY2FzZSwKKyMgaXQgbGltaXRzIHRoZSBmcmVxdWVuY2llcyB0aGF0IHdpbGwgYmUgc2Nhbm5lZC4KKyMKICMgYmdzY2FuOiBCYWNrZ3JvdW5kIHNjYW5uaW5nCiAjIHdwYV9zdXBwbGljYW50IGJlaGF2aW9yIGZvciBiYWNrZ3JvdW5kIHNjYW5uaW5nIGNhbiBiZSBzcGVjaWZpZWQgYnkKICMgY29uZmlndXJpbmcgYSBiZ3NjYW4gbW9kdWxlLiBUaGVzZSBtb2R1bGVzIGFyZSByZXNwb25zaWJsZSBmb3IgcmVxdWVzdGluZwpAQCAtMTIzMSwzICsxMjM0LDEwIEBACiBuZXR3b3JrPXsKIAlrZXlfbWdtdD1OT05FCiB9CisKKworIyBFeGFtcGxlIGNvbmZpZyBmaWxlIHRoYXQgd2lsbCBvbmx5IHNjYW4gb24gY2hhbm5lbCAzNi4KK2ZyZXFfbGlzdD01MTgwCituZXR3b3JrPXsKKwlrZXlfbWdtdD1OT05FCit9CmRpZmYgLS1naXQgYS93cGFfc3VwcGxpY2FudC93cGFfc3VwcGxpY2FudF9pLmggYi93cGFfc3VwcGxpY2FudC93cGFfc3VwcGxpY2FudF9pLmgKaW5kZXggZjk2YjI0NS4uYzUzNDIxZCAxMDA2NDQKLS0tIGEvd3BhX3N1cHBsaWNhbnQvd3BhX3N1cHBsaWNhbnRfaS5oCisrKyBiL3dwYV9zdXBwbGljYW50L3dwYV9zdXBwbGljYW50X2kuaApAQCAtNzAyLDYgKzcwMiw4IEBACiAJc3RydWN0IHdwYV9kcml2ZXJfYXNzb2NpYXRlX3BhcmFtcyAqcGFyYW1zKTsKIAogaW50IHdwYV9zZXRfd2VwX2tleXMoc3RydWN0IHdwYV9zdXBwbGljYW50ICp3cGFfcywgc3RydWN0IHdwYV9zc2lkICpzc2lkKTsKK2ludCB3cGFfc3VwcGxpY2FudF9zZXRfd3BhX25vbmVfa2V5KHN0cnVjdCB3cGFfc3VwcGxpY2FudCAqd3BhX3MsCisJCQkJICAgIHN0cnVjdCB3cGFfc3NpZCAqc3NpZCk7CiAKIGludCB3cGFfc3VwcGxpY2FudF9yZWxvYWRfY29uZmlndXJhdGlvbihzdHJ1Y3Qgd3BhX3N1cHBsaWNhbnQgKndwYV9zKTsKIApkaWZmIC0tZ2l0IGEvd3BhX3N1cHBsaWNhbnQvd3Bhc19nbHVlLmMgYi93cGFfc3VwcGxpY2FudC93cGFzX2dsdWUuYwppbmRleCBjZDUxODczLi4xYTY0ZGYzIDEwMDY0NAotLS0gYS93cGFfc3VwcGxpY2FudC93cGFzX2dsdWUuYworKysgYi93cGFfc3VwcGxpY2FudC93cGFzX2dsdWUuYwpAQCAtNTUxLDcgKzU1MSw3IEBACiAKIAogc3RhdGljIGludCB3cGFfc3VwcGxpY2FudF90ZGxzX3BlZXJfYWRkc2V0KAotCXZvaWQgKmN0eCwgY29uc3QgdTggKnBlZXIsIGludCBhZGQsIHUxNiBjYXBhYmlsaXR5LAorCXZvaWQgKmN0eCwgY29uc3QgdTggKnBlZXIsIGludCBhZGQsIHUxNiBhaWQsIHUxNiBjYXBhYmlsaXR5LAogCWNvbnN0IHU4ICpzdXBwX3JhdGVzLCBzaXplX3Qgc3VwcF9yYXRlc19sZW4sCiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9odF9jYXBhYmlsaXRpZXMgKmh0X2NhcGFiLAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdmh0X2NhcGFiaWxpdGllcyAqdmh0X2NhcGFiLApAQCAtNTYzLDcgKzU2Myw3IEBACiAJb3NfbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTsKIAogCXBhcmFtcy5hZGRyID0gcGVlcjsKLQlwYXJhbXMuYWlkID0gMTsKKwlwYXJhbXMuYWlkID0gYWlkOwogCXBhcmFtcy5jYXBhYmlsaXR5ID0gY2FwYWJpbGl0eTsKIAlwYXJhbXMuZmxhZ3MgPSBXUEFfU1RBX1RETFNfUEVFUiB8IFdQQV9TVEFfQVVUSE9SSVpFRDsKIApkaWZmIC0tZ2l0IGEvd3BhX3N1cHBsaWNhbnQvd3BzX3N1cHBsaWNhbnQuYyBiL3dwYV9zdXBwbGljYW50L3dwc19zdXBwbGljYW50LmMKaW5kZXggOWFmNjA4NC4uYjM3NmZiMCAxMDA2NDQKLS0tIGEvd3BhX3N1cHBsaWNhbnQvd3BzX3N1cHBsaWNhbnQuYworKysgYi93cGFfc3VwcGxpY2FudC93cHNfc3VwcGxpY2FudC5jCkBAIC0yMTksNiArMjE5LDgwIEBACiB9CiAKIAorc3RhdGljIHZvaWQgd3Bhc193cHNfcmVtb3ZlX2R1cF9uZXR3b3JrKHN0cnVjdCB3cGFfc3VwcGxpY2FudCAqd3BhX3MsCisJCQkJCXN0cnVjdCB3cGFfc3NpZCAqbmV3X3NzaWQpCit7CisJc3RydWN0IHdwYV9zc2lkICpzc2lkLCAqbmV4dDsKKworCWZvciAoc3NpZCA9IHdwYV9zLT5jb25mLT5zc2lkLCBuZXh0ID0gc3NpZCA/IHNzaWQtPm5leHQgOiBOVUxMOyBzc2lkOworCSAgICAgc3NpZCA9IG5leHQsIG5leHQgPSBzc2lkID8gc3NpZC0+bmV4dCA6IE5VTEwpIHsKKwkJLyoKKwkJICogbmV3X3NzaWQgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgbGlzdCBpbgorCQkgKiB3cGFzX3dwc19hZGRfbmV0d29yaygpLCBzbyBza2lwIGl0LgorCQkgKi8KKwkJaWYgKHNzaWQgPT0gbmV3X3NzaWQpCisJCQljb250aW51ZTsKKworCQlpZiAoc3NpZC0+YnNzaWRfc2V0IHx8IG5ld19zc2lkLT5ic3NpZF9zZXQpIHsKKwkJCWlmIChzc2lkLT5ic3NpZF9zZXQgIT0gbmV3X3NzaWQtPmJzc2lkX3NldCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChvc19tZW1jbXAoc3NpZC0+YnNzaWQsIG5ld19zc2lkLT5ic3NpZCwgRVRIX0FMRU4pICE9CisJCQkgICAgMCkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGNvbXBhcmUgU1NJRCAqLworCQlpZiAoc3NpZC0+c3NpZF9sZW4gPT0gMCB8fCBzc2lkLT5zc2lkX2xlbiAhPSBuZXdfc3NpZC0+c3NpZF9sZW4pCisJCQljb250aW51ZTsKKworCQlpZiAoc3NpZC0+c3NpZCAmJiBuZXdfc3NpZC0+c3NpZCkgeworCQkJaWYgKG9zX21lbWNtcChzc2lkLT5zc2lkLCBuZXdfc3NpZC0+c3NpZCwKKwkJCQkgICAgICBzc2lkLT5zc2lkX2xlbikgIT0gMCkKKwkJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmIChzc2lkLT5zc2lkIHx8IG5ld19zc2lkLT5zc2lkKQorCQkJY29udGludWU7CisKKwkJLyogY29tcGFyZSBzZWN1cml0eSBwYXJhbWV0ZXJzICovCisJCWlmIChzc2lkLT5hdXRoX2FsZyAhPSBuZXdfc3NpZC0+YXV0aF9hbGcgfHwKKwkJICAgIHNzaWQtPmtleV9tZ210ICE9IG5ld19zc2lkLT5rZXlfbWdtdCB8fAorCQkgICAgc3NpZC0+cHJvdG8gIT0gbmV3X3NzaWQtPnByb3RvIHx8CisJCSAgICBzc2lkLT5wYWlyd2lzZV9jaXBoZXIgIT0gbmV3X3NzaWQtPnBhaXJ3aXNlX2NpcGhlciB8fAorCQkgICAgc3NpZC0+Z3JvdXBfY2lwaGVyICE9IG5ld19zc2lkLT5ncm91cF9jaXBoZXIpCisJCQljb250aW51ZTsKKworCQlpZiAoc3NpZC0+cGFzc3BocmFzZSAmJiBuZXdfc3NpZC0+cGFzc3BocmFzZSkgeworCQkJaWYgKG9zX3N0cmxlbihzc2lkLT5wYXNzcGhyYXNlKSAhPQorCQkJICAgIG9zX3N0cmxlbihuZXdfc3NpZC0+cGFzc3BocmFzZSkpCisJCQkJY29udGludWU7CisJCQlpZiAob3Nfc3RyY21wKHNzaWQtPnBhc3NwaHJhc2UsIG5ld19zc2lkLT5wYXNzcGhyYXNlKSAhPQorCQkJICAgIDApCisJCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoc3NpZC0+cGFzc3BocmFzZSB8fCBuZXdfc3NpZC0+cGFzc3BocmFzZSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoc3NpZC0+cHNrX3NldCB8fCBuZXdfc3NpZC0+cHNrX3NldCkgJiYKKwkJICAgIG9zX21lbWNtcChzc2lkLT5wc2ssIG5ld19zc2lkLT5wc2ssIHNpemVvZihzc2lkLT5wc2spKSAhPSAwKQorCQkJY29udGludWU7CisKKwkJaWYgKHNzaWQtPmF1dGhfYWxnID09IFdQQV9BTEdfV0VQKSB7CisJCQlpZiAoc3NpZC0+d2VwX3R4X2tleWlkeCAhPSBuZXdfc3NpZC0+d2VwX3R4X2tleWlkeCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChvc19tZW1jbXAoc3NpZC0+d2VwX2tleSwgbmV3X3NzaWQtPndlcF9rZXksCisJCQkJICAgICAgc2l6ZW9mKHNzaWQtPndlcF9rZXkpKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChvc19tZW1jbXAoc3NpZC0+d2VwX2tleV9sZW4sIG5ld19zc2lkLT53ZXBfa2V5X2xlbiwKKwkJCQkgICAgICBzaXplb2Yoc3NpZC0+d2VwX2tleV9sZW4pKSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFJlbW92ZSB0aGUgZHVwbGljYXRlZCBvbGRlciBuZXR3b3JrIGVudHJ5LiAqLworCQl3cGFfcHJpbnRmKE1TR19ERUJVRywgIlJlbW92ZSBkdXBsaWNhdGUgbmV0d29yayAlZCIsIHNzaWQtPmlkKTsKKwkJd3Bhc19ub3RpZnlfbmV0d29ya19yZW1vdmVkKHdwYV9zLCBzc2lkKTsKKwkJd3BhX2NvbmZpZ19yZW1vdmVfbmV0d29yayh3cGFfcy0+Y29uZiwgc3NpZC0+aWQpOworCX0KK30KKworCiBzdGF0aWMgaW50IHdwYV9zdXBwbGljYW50X3dwc19jcmVkKHZvaWQgKmN0eCwKIAkJCQkgICBjb25zdCBzdHJ1Y3Qgd3BzX2NyZWRlbnRpYWwgKmNyZWQpCiB7CkBAIC00MzgsNiArNTEyLDggQEAKIAlpZiAoY3JlZC0+YXBfY2hhbm5lbCkKIAkJd3BhX3MtPndwc19hcF9jaGFubmVsID0gY3JlZC0+YXBfY2hhbm5lbDsKIAorCXdwYXNfd3BzX3JlbW92ZV9kdXBfbmV0d29yayh3cGFfcywgc3NpZCk7CisKICNpZm5kZWYgQ09ORklHX05PX0NPTkZJR19XUklURQogCWlmICh3cGFfcy0+Y29uZi0+dXBkYXRlX2NvbmZpZyAmJgogCSAgICB3cGFfY29uZmlnX3dyaXRlKHdwYV9zLT5jb25mbmFtZSwgd3BhX3MtPmNvbmYpKSB7Cg==