ZGlmZiAtLWdpdCBhL2F1dG8vbW9kdWxlcyBiL2F1dG8vbW9kdWxlcwppbmRleCAzOTIwOTRlLi44YTY3NDE0IDEwMDY0NAotLS0gYS9hdXRvL21vZHVsZXMKKysrIGIvYXV0by9tb2R1bGVzCkBAIC0xMTAsNiArMTEwLDcgQEAKIGlmIFsgJEhUVFBfU1NJID0gWUVTIF07IHRoZW4KICAgICBoYXZlPU5HWF9IVFRQX1NTSSAuIGF1dG8vaGF2ZQogICAgIEhUVFBfRklMVEVSX01PRFVMRVM9IiRIVFRQX0ZJTFRFUl9NT0RVTEVTICRIVFRQX1NTSV9GSUxURVJfTU9EVUxFIgorICAgIEhUVFBfREVQUz0iJEhUVFBfREVQUyAkSFRUUF9TU0lfREVQUyIKICAgICBIVFRQX1NSQ1M9IiRIVFRQX1NSQ1MgJEhUVFBfU1NJX1NSQ1MiCiBmaQogCmRpZmYgLS1naXQgYS9hdXRvL3NvdXJjZXMgYi9hdXRvL3NvdXJjZXMKaW5kZXggYjU5ODA4My4uYzM1MmRhMyAxMDA2NDQKLS0tIGEvYXV0by9zb3VyY2VzCisrKyBiL2F1dG8vc291cmNlcwpAQCAtMzAzLDYgKzMwMyw3IEBACiAKIAogSFRUUF9TU0lfRklMVEVSX01PRFVMRT1uZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZQorSFRUUF9TU0lfREVQUz1zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzaV9maWx0ZXJfbW9kdWxlLmgKIEhUVFBfU1NJX1NSQ1M9c3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZS5jCiAKIApkaWZmIC0tZ2l0IGEvZG9jcy90ZXh0L0xJQ0VOU0UgYi9kb2NzL3RleHQvTElDRU5TRQppbmRleCA3YTZhM2Q3Li40ZmUxN2JmIDEwMDY0NAotLS0gYS9kb2NzL3RleHQvTElDRU5TRQorKysgYi9kb2NzL3RleHQvTElDRU5TRQpAQCAtMSw1ICsxLDUgQEAKIC8qIAotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDUgSWdvciBTeXNvZXYKKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA2IElnb3IgU3lzb2V2CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKZGlmZiAtLWdpdCBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKaW5kZXggYjcxMzQxZC4uYzMwYjFhMiAxMDA2NDQKLS0tIGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKKysrIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKQEAgLTksNiArOSwyOCBAQAogPHRpdGxlIGxhbmc9ImVuIj5uZ2lueCBjaGFuZ2Vsb2c8L3RpdGxlPgogCiAKKzxjaGFuZ2VzIHZlcj0iMC4zLjIwIiBkYXRlPSIxMS4wMS4yMDA2Ij4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorz9vJwsvJINcgz8LSwcLP1MvFIFNTSS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK2luIFNTSSBoYW5kbGluZy4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivNz8TVzNggbmd4X2h0dHBfbWVtY2FjaGVkX21vZHVsZSDOxSDQz8TExdLWydfBzCDLzMDeySDXINfJxMUgL3VyaT9hcmdzLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIG5neF9odHRwX21lbWNhY2hlZF9tb2R1bGUgZGlkIG5vdCBzdXBwb3J0IHRoZSBrZXlzIGluIHRoZSAiL3Vzcj9hcmdzIiBmb3JtLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzwvY2hhbmdlcz4KKwogPGNoYW5nZXMgdmVyPSIwLjMuMTkiIGRhdGU9IjI4LjEyLjIwMDUiPgogCiA8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmdpbnguaCBiL3NyYy9jb3JlL25naW54LmgKaW5kZXggYTE1ZjU4ZS4uY2JhNGRiYiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmdpbnguaAorKysgYi9zcmMvY29yZS9uZ2lueC5oCkBAIC04LDcgKzgsNyBAQAogI2RlZmluZSBfTkdJTlhfSF9JTkNMVURFRF8KIAogCi0jZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4zLjE5IgorI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMy4yMCIKIAogI2RlZmluZSBOR0lOWF9WQVIgICAgICAgICAgIk5HSU5YIgogI2RlZmluZSBOR1hfT0xEUElEX0VYVCAgICAgIi5vbGRiaW4iCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5oIGIvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uaAppbmRleCAzOGE1OWJjLi40MzczM2FhIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5oCisrKyBiL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmgKQEAgLTkzLDYgKzkzLDEwIEBACiB9IG5neF9jb25uZWN0aW9uX3RjcF9ub3B1c2hfZTsKIAogCisjZGVmaW5lIE5HWF9MT1dMRVZFTF9CVUZGRVJFRCAgMHgwMDAwMDAwZgorI2RlZmluZSBOR1hfU1NMX0JVRkZFUkVEICAgICAgIDB4MDAwMDAwMDEKKworCiBzdHJ1Y3Qgbmd4X2Nvbm5lY3Rpb25fcyB7CiAgICAgdm9pZCAgICAgICAgICAgICAgICpkYXRhOwogICAgIG5neF9ldmVudF90ICAgICAgICAqcmVhZDsKQEAgLTEzNCw5ICsxMzgsMTAgQEAKIAogICAgIG5neF9hdG9taWNfdWludF90ICAgbnVtYmVyOwogCisgICAgbmd4X3VpbnRfdCAgICAgICAgICBidWZmZXJlZDsKKwogICAgIHVuc2lnbmVkICAgICAgICAgICAgbG9nX2Vycm9yOjI7ICAgICAvKiBuZ3hfY29ubmVjdGlvbl9sb2dfZXJyb3JfZSAqLwogCi0gICAgdW5zaWduZWQgICAgICAgICAgICBidWZmZXJlZDoxOwogICAgIHVuc2lnbmVkICAgICAgICAgICAgc2luZ2xlX2Nvbm5lY3Rpb246MTsKICAgICB1bnNpZ25lZCAgICAgICAgICAgIHVuZXhwZWN0ZWRfZW9mOjE7CiAgICAgdW5zaWduZWQgICAgICAgICAgICB0aW1lZG91dDoxOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2hhc2guYyBiL3NyYy9jb3JlL25neF9oYXNoLmMKaW5kZXggMGExZDY5ZC4uMWY2NzdjOSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2hhc2guYworKysgYi9zcmMvY29yZS9uZ3hfaGFzaC5jCkBAIC03NTMsNyArNzUzLDkgQEAKICAgICAgICAgayA9IDA7CiAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleS0+bGVuOyBpKyspIHsKLSAgICAgICAgICAgIGtleS0+ZGF0YVtpXSA9IG5neF90b2xvd2VyKGtleS0+ZGF0YVtpXSk7CisgICAgICAgICAgICBpZiAoIShmbGFncyAmIE5HWF9IQVNIX1JFQURPTkxZX0tFWSkpIHsKKyAgICAgICAgICAgICAgICBrZXktPmRhdGFbaV0gPSBuZ3hfdG9sb3dlcihrZXktPmRhdGFbaV0pOworICAgICAgICAgICAgfQogICAgICAgICAgICAgayA9IG5neF9oYXNoKGssIGtleS0+ZGF0YVtpXSk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2hhc2guaCBiL3NyYy9jb3JlL25neF9oYXNoLmgKaW5kZXggODU1ZGRlNy4uYWQ3MzQzOCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2hhc2guaAorKysgYi9zcmMvY29yZS9uZ3hfaGFzaC5oCkBAIC02MSw2ICs2MSw3IEBACiAjZGVmaW5lIE5HWF9IQVNIX0xBUkdFX0hTSVpFICAgICAgMTAwMDcKIAogI2RlZmluZSBOR1hfSEFTSF9XSUxEQ0FSRF9LRVkgICAgIDEKKyNkZWZpbmUgTkdYX0hBU0hfUkVBRE9OTFlfS0VZICAgICAyCiAKIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtMTE0LDYgKzExNSw3IEBACiAgICAgdm9pZCAqdmFsdWUsIG5neF91aW50X3QgZmxhZ3MpOwogCiAKKyNkZWZpbmUgbmd4X2hhc2gwKGtleSwgYykgICBrZXkgKyBjCiBuZ3hfaW50X3Qgbmd4X2hhc2gwX2luaXQobmd4X2hhc2gwX3QgKmhhc2gsIG5neF9wb29sX3QgKnBvb2wsIHZvaWQgKm5hbWVzLAogICAgIG5neF91aW50X3QgbmVsdHMpOwogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfb3V0cHV0X2NoYWluLmMgYi9zcmMvY29yZS9uZ3hfb3V0cHV0X2NoYWluLmMKaW5kZXggZjJkYWI5Yy4uNGI4MzY0YSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X291dHB1dF9jaGFpbi5jCisrKyBiL3NyYy9jb3JlL25neF9vdXRwdXRfY2hhaW4uYwpAQCAtMjgsOSArMjgsMTAgQEAKIG5neF9pbnRfdAogbmd4X291dHB1dF9jaGFpbihuZ3hfb3V0cHV0X2NoYWluX2N0eF90ICpjdHgsIG5neF9jaGFpbl90ICppbikKIHsKLSAgICBpbnQgICAgICAgICAgIHJjLCBsYXN0OwogICAgIG9mZl90ICAgICAgICAgYnNpemU7CiAgICAgc2l6ZV90ICAgICAgICBzaXplOworICAgIG5neF9pbnRfdCAgICAgcmMsIGxhc3Q7CisgICAgbmd4X3VpbnRfdCAgICByZWN5Y2xlZDsKICAgICBuZ3hfY2hhaW5fdCAgKmNsLCAqb3V0LCAqKmxhc3Rfb3V0OwogCiAgICAgaWYgKGN0eC0+aW4gPT0gTlVMTCAmJiBjdHgtPmJ1c3kgPT0gTlVMTCkgewpAQCAtMTMxLDYgKzEzMiw3IEBACiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKIAogICAgICAgICAgICAgICAgICAgICBzaXplID0gY3R4LT5idWZzLnNpemU7CisgICAgICAgICAgICAgICAgICAgIHJlY3ljbGVkID0gMTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5pbi0+YnVmLT5sYXN0X2luX2NoYWluKSB7CiAKQEAgLTE0Miw2ICsxNDQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gKHNpemVfdCkgYnNpemU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjeWNsZWQgPSAwOwogCiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN0eC0+YnVmcy5udW0gPT0gMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYnNpemUgPCAob2ZmX3QpIChjdHgtPmJ1ZnMuc2l6ZQpAQCAtMTU0LDYgKzE1Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gKHNpemVfdCkgYnNpemU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjeWNsZWQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTE2Myw3ICsxNjcsNyBAQAogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgY3R4LT5idWYtPnRhZyA9IGN0eC0+dGFnOwotICAgICAgICAgICAgICAgICAgICBjdHgtPmJ1Zi0+cmVjeWNsZWQgPSAxOworICAgICAgICAgICAgICAgICAgICBjdHgtPmJ1Zi0+cmVjeWNsZWQgPSByZWN5Y2xlZDsKICAgICAgICAgICAgICAgICAgICAgY3R4LT5hbGxvY2F0ZWQrKzsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5jCmluZGV4IDc4ODQ2M2MuLjVhNzI0YWYgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5jCkBAIC01OTIsNyArNTkyLDkgQEAKICAgICBzc2l6ZV90ICAgICAgc2VuZCwgc2l6ZTsKICAgICBuZ3hfYnVmX3QgICAqYnVmOwogCi0gICAgaWYgKCFjLT5zc2wtPmJ1ZmZlciB8fCAoaW4gJiYgaW4tPm5leHQgPT0gTlVMTCAmJiAhYy0+YnVmZmVyZWQpKSB7CisgICAgaWYgKCFjLT5zc2wtPmJ1ZmZlcgorICAgICAgICB8fCAoaW4gJiYgaW4tPm5leHQgPT0gTlVMTCAmJiAhKGMtPmJ1ZmZlcmVkICYgTkdYX1NTTF9CVUZGRVJFRCkpKQorICAgIHsKIAogICAgICAgICAvKgogICAgICAgICAgKiB3ZSBhdm9pZCBhIGJ1ZmZlciBjb3B5IGlmCkBAIC02MTMsNyArNjE1LDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG4gPT0gTkdYX0FHQUlOKSB7Ci0gICAgICAgICAgICAgICAgYy0+YnVmZmVyZWQgPSAxOworICAgICAgICAgICAgICAgIGMtPmJ1ZmZlcmVkIHw9IE5HWF9TU0xfQlVGRkVSRUQ7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGluOwogICAgICAgICAgICAgfQogCkBAIC02ODksNyArNjkxLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChuID09IE5HWF9BR0FJTikgewotICAgICAgICAgICAgYy0+YnVmZmVyZWQgPSAxOworICAgICAgICAgICAgYy0+YnVmZmVyZWQgfD0gTkdYX1NTTF9CVUZGRVJFRDsKICAgICAgICAgICAgIHJldHVybiBpbjsKICAgICAgICAgfQogCkBAIC03MTEsNyArNzEzLDEyIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjLT5idWZmZXJlZCA9IChidWYtPnBvcyA8IGJ1Zi0+bGFzdCkgPyAxIDogMDsKKyAgICBpZiAoYnVmLT5wb3MgPCBidWYtPmxhc3QpIHsKKyAgICAgICAgYy0+YnVmZmVyZWQgfD0gTkdYX1NTTF9CVUZGRVJFRDsKKworICAgIH0gZWxzZSB7CisgICAgICAgIGMtPmJ1ZmZlcmVkICY9IH5OR1hfU1NMX0JVRkZFUkVEOworICAgIH0KIAogICAgIHJldHVybiBpbjsKIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0b2luZGV4X21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlLmMKaW5kZXggOGEwNDgwNy4uOGUyYWQwMiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlLmMKQEAgLTUwMyw3ICs1MDMsNyBAQAogCiAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgdGFpbCwgc2l6ZW9mKHRhaWwpIC0gMSk7CiAKLSAgICBpZiAoci0+bWFpbiA9PSByKSB7CisgICAgaWYgKHIgPT0gci0+bWFpbikgewogICAgICAgICBiLT5sYXN0X2J1ZiA9IDE7CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUuYwppbmRleCA4ZWVlMzU4Li5jZjQxYjYyIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfY2hhcnNldF9maWx0ZXJfbW9kdWxlLmMKQEAgLTE2Miw3ICsxNjIsNyBAQAogICAgICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyKHIpOwogICAgIH0KIAotICAgIGlmIChyLT5tYWluID09IHIKKyAgICBpZiAociA9PSByLT5tYWluCiAgICAgICAgICYmIG5neF9zdHJzdHIoci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLmRhdGEsICJjaGFyc2V0IikgIT0gTlVMTCkKICAgICB7CiAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NodW5rZWRfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaHVua2VkX2ZpbHRlcl9tb2R1bGUuYwppbmRleCA4NWNhOTM0Li44OWM0YTA0IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NodW5rZWRfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfY2h1bmtlZF9maWx0ZXJfbW9kdWxlLmMKQEAgLTUwLDcgKzUwLDcgQEAKIHN0YXRpYyBuZ3hfaW50X3QKIG5neF9odHRwX2NodW5rZWRfaGVhZGVyX2ZpbHRlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCiB7Ci0gICAgaWYgKHItPmhlYWRlcnNfb3V0LnN0YXR1cyA9PSBOR1hfSFRUUF9OT1RfTU9ESUZJRUQgfHwgci0+bWFpbiAhPSByKSB7CisgICAgaWYgKHItPmhlYWRlcnNfb3V0LnN0YXR1cyA9PSBOR1hfSFRUUF9OT1RfTU9ESUZJRUQgfHwgciAhPSByLT5tYWluKSB7CiAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2d6aXBfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9nemlwX2ZpbHRlcl9tb2R1bGUuYwppbmRleCA5NDBlMDgyLi42NjNmN2YyIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2d6aXBfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZ3ppcF9maWx0ZXJfbW9kdWxlLmMKQEAgLTEwMSw3ICsxMDEsNiBAQAogc3RhdGljIG5neF9jb25mX3Bvc3RfaGFuZGxlcl9wdCAgbmd4X2h0dHBfZ3ppcF9oYXNoX3AgPSBuZ3hfaHR0cF9nemlwX2hhc2g7CiAKIAotCiBzdGF0aWMgbmd4X2NvbmZfZW51bV90ICBuZ3hfaHR0cF9nemlwX2h0dHBfdmVyc2lvbltdID0gewogICAgIHsgbmd4X3N0cmluZygiMS4wIiksIE5HWF9IVFRQX1ZFUlNJT05fMTAgfSwKICAgICB7IG5neF9zdHJpbmcoIjEuMSIpLCBOR1hfSFRUUF9WRVJTSU9OXzExIH0sCkBAIC0yODMsNyArMjgyLDcgQEAKICAgICAgICAgICAgICYmIHItPmhlYWRlcnNfb3V0LnN0YXR1cyAhPSBOR1hfSFRUUF9GT1JCSURERU4KICAgICAgICAgICAgICYmIHItPmhlYWRlcnNfb3V0LnN0YXR1cyAhPSBOR1hfSFRUUF9OT1RfRk9VTkQpCiAgICAgICAgIHx8IHItPmhlYWRlcl9vbmx5Ci0gICAgICAgIHx8IHItPm1haW4gIT0gcgorICAgICAgICB8fCByICE9IHItPm1haW4KICAgICAgICAgfHwgci0+aHR0cF92ZXJzaW9uIDwgY29uZi0+aHR0cF92ZXJzaW9uCiAgICAgICAgIHx8IHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS5sZW4gPT0gMAogICAgICAgICB8fCAoci0+aGVhZGVyc19vdXQuY29udGVudF9lbmNvZGluZwpAQCAtNTQ0LDYgKzU0Myw4IEBACiAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICB9CiAKKyAgICAgICAgci0+Y29ubmVjdGlvbi0+YnVmZmVyZWQgfD0gTkdYX0hUVFBfR1pJUF9CVUZGRVJFRDsKKwogICAgICAgICBjdHgtPmxhc3Rfb3V0ID0gJmN0eC0+b3V0OwogCiAgICAgICAgIGN0eC0+Y3JjMzIgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKQEAgLTc5OSw2ICs4MDAsOCBAQAogCiAgICAgICAgICAgICAgICAgY3R4LT5kb25lID0gMTsKIAorICAgICAgICAgICAgICAgIHItPmNvbm5lY3Rpb24tPmJ1ZmZlcmVkICY9IH5OR1hfSFRUUF9HWklQX0JVRkZFUkVEOworCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfaGVhZGVyc19maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2hlYWRlcnNfZmlsdGVyX21vZHVsZS5jCmluZGV4IDg2YzFhODAuLmIwYmQwYTUgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfaGVhZGVyc19maWx0ZXJfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9oZWFkZXJzX2ZpbHRlcl9tb2R1bGUuYwpAQCAtOTcsNyArOTcsNyBAQAogCiAgICAgaWYgKChyLT5oZWFkZXJzX291dC5zdGF0dXMgIT0gTkdYX0hUVFBfT0sKICAgICAgICAgICYmIHItPmhlYWRlcnNfb3V0LnN0YXR1cyAhPSBOR1hfSFRUUF9OT1RfTU9ESUZJRUQpCi0gICAgICAgIHx8IHItPm1haW4gIT0gcikKKyAgICAgICAgfHwgciAhPSByLT5tYWluKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5neF9odHRwX25leHRfaGVhZGVyX2ZpbHRlcihyKTsKICAgICB9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX21lbWNhY2hlZF9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfbWVtY2FjaGVkX21vZHVsZS5jCmluZGV4IDYyMTdkZDEuLjg5YTU2OGQgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfbWVtY2FjaGVkX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfbWVtY2FjaGVkX21vZHVsZS5jCkBAIC0xOSw2ICsxOSw3IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgcmVzdDsKICAgICBuZ3hfaHR0cF9yZXF1ZXN0X3QgICAgICAgICpyZXF1ZXN0OworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgIGtleTsKIH0gbmd4X2h0dHBfbWVtY2FjaGVkX2N0eF90OwogCiAKQEAgLTIwMiw2ICsyMDMsOCBAQAogICAgIGN0eC0+cmVzdCA9IE5HWF9IVFRQX01FTUNBQ0hFRF9FTkQ7CiAgICAgY3R4LT5yZXF1ZXN0ID0gcjsKIAorICAgIG5neF9odHRwX3NldF9jdHgociwgY3R4LCBuZ3hfaHR0cF9tZW1jYWNoZWRfbW9kdWxlKTsKKwogICAgIHUtPmlucHV0X2ZpbHRlcl9pbml0ID0gbmd4X2h0dHBfbWVtY2FjaGVkX2ZpbHRlcl9pbml0OwogICAgIHUtPmlucHV0X2ZpbHRlciA9IG5neF9odHRwX21lbWNhY2hlZF9maWx0ZXI7CiAgICAgdS0+aW5wdXRfZmlsdGVyX2N0eCA9IGN0eDsKQEAgLTIxNSwxMyArMjE4LDE0IEBACiBzdGF0aWMgbmd4X2ludF90CiBuZ3hfaHR0cF9tZW1jYWNoZWRfY3JlYXRlX3JlcXVlc3Qobmd4X2h0dHBfcmVxdWVzdF90ICpyKQogewotICAgIHNpemVfdCAgICAgICAgbGVuOwotICAgIG5neF9idWZfdCAgICAqYjsKLSAgICBuZ3hfY2hhaW5fdCAgKmNsOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgIGxlbjsKKyAgICBuZ3hfYnVmX3QgICAgICAgICAgICAgICAgICpiOworICAgIG5neF9jaGFpbl90ICAgICAgICAgICAgICAgKmNsOworICAgIG5neF9odHRwX21lbWNhY2hlZF9jdHhfdCAgKmN0eDsKIAogICAgIGxlbiA9IHNpemVvZigiZ2V0ICIpIC0gMSArIHItPnVyaS5sZW4gKyBzaXplb2YoIiAiIENSTEYpIC0gMTsKICAgICBpZiAoci0+YXJncy5sZW4pIHsKLSAgICAgICAgbGVuICs9IDErIHItPmFyZ3MubGVuOworICAgICAgICBsZW4gKz0gMSArIHItPmFyZ3MubGVuOwogICAgIH0KIAogICAgIGIgPSBuZ3hfY3JlYXRlX3RlbXBfYnVmKHItPnBvb2wsIGxlbik7CkBAIC0yNDEsNiArMjQ1LDEwIEBACiAKICAgICAqYi0+bGFzdCsrID0gJ2cnOyAqYi0+bGFzdCsrID0gJ2UnOyAqYi0+bGFzdCsrID0gJ3QnOyAqYi0+bGFzdCsrID0gJyAnOwogCisgICAgY3R4ID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9jdHgociwgbmd4X2h0dHBfbWVtY2FjaGVkX21vZHVsZSk7CisKKyAgICBjdHgtPmtleS5kYXRhID0gYi0+bGFzdDsKKwogICAgIGItPmxhc3QgPSBuZ3hfY29weShiLT5sYXN0LCByLT51cmkuZGF0YSwgci0+dXJpLmxlbik7CiAKICAgICBpZiAoci0+YXJncy5sZW4pIHsKQEAgLTI0OCwxNiArMjU2LDEwIEBACiAgICAgICAgIGItPmxhc3QgPSBuZ3hfY29weShiLT5sYXN0LCByLT5hcmdzLmRhdGEsIHItPmFyZ3MubGVuKTsKICAgICB9CiAKLSNpZiAoTkdYX0RFQlVHKQotICAgIHsKLSAgICBuZ3hfc3RyX3QgIHM7CisgICAgY3R4LT5rZXkubGVuID0gYi0+bGFzdCAtIGN0eC0+a2V5LmRhdGE7CiAKLSAgICBzLmxlbiA9IGItPmxhc3QgLSBiLT5wb3M7Ci0gICAgcy5kYXRhID0gYi0+cG9zOwogICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJodHRwIG1lbWNhY2hlZCByZXF1ZXN0OiBcIiVWXCIiLCAmcyk7Ci0gICAgfQotI2VuZGlmCisgICAgICAgICAgICAgICAgICAgImh0dHAgbWVtY2FjaGVkIHJlcXVlc3Q6IFwiJVZcIiIsICZjdHgtPmtleSk7CiAKICAgICAqYi0+bGFzdCsrID0gJyAnOyAqYi0+bGFzdCsrID0gQ1I7ICpiLT5sYXN0KysgPSBMRjsKIApAQCAtMjc1LDkgKzI3NywxMCBAQAogc3RhdGljIG5neF9pbnRfdAogbmd4X2h0dHBfbWVtY2FjaGVkX3Byb2Nlc3NfaGVhZGVyKG5neF9odHRwX3JlcXVlc3RfdCAqcikKIHsKLSAgICB1X2NoYXIgICAgICAgICAgICAgICAqcCwgKmxlbjsKLSAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgbGluZTsKLSAgICBuZ3hfaHR0cF91cHN0cmVhbV90ICAqdTsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICpwLCAqbGVuOworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgIGxpbmU7CisgICAgbmd4X2h0dHBfdXBzdHJlYW1fdCAgICAgICAqdTsKKyAgICBuZ3hfaHR0cF9tZW1jYWNoZWRfY3R4X3QgICpjdHg7CiAKICAgICB1ID0gci0+dXBzdHJlYW07CiAKQEAgLTMwMSwyMCArMzA0LDIyIEBACiAKICAgICBwID0gdS0+YnVmZmVyLnBvczsKIAorICAgIGN0eCA9IG5neF9odHRwX2dldF9tb2R1bGVfY3R4KHIsIG5neF9odHRwX21lbWNhY2hlZF9tb2R1bGUpOworCiAgICAgaWYgKG5neF9zdHJuY21wKHAsICJWQUxVRSAiLCBzaXplb2YoIlZBTFVFICIpIC0gMSkgPT0gMCkgewogCiAgICAgICAgIHAgKz0gc2l6ZW9mKCJWQUxVRSAiKSAtIDE7CiAKLSAgICAgICAgaWYgKG5neF9zdHJuY21wKHAsIHItPnVyaS5kYXRhLCByLT51cmkubGVuKSAhPSAwKSB7CisgICAgICAgIGlmIChuZ3hfc3RybmNtcChwLCBjdHgtPmtleS5kYXRhLCBjdHgtPmtleS5sZW4pICE9IDApIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lbWNhY2hlZCBzZW50IGludmFsaWQga2V5IGluIHJlc3BvbnNlIFwiJVZcIiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3Iga2V5IFwiJVZcIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZsaW5lLCAmci0+dXJpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmxpbmUsICZjdHgtPmtleSk7CiAKICAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9VUFNUUkVBTV9JTlZBTElEX0hFQURFUjsKICAgICAgICAgfQogCi0gICAgICAgIHAgKz0gci0+dXJpLmxlbjsKKyAgICAgICAgcCArPSBjdHgtPmtleS5sZW47CiAKICAgICAgICAgaWYgKCpwKysgIT0gJyAnKSB7CiAgICAgICAgICAgICBnb3RvIG5vX3ZhbGlkOwpAQCAtMzQxLDcgKzM0Niw3IEBACiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZW1jYWNoZWQgc2VudCBpbnZhbGlkIGxlbmd0aCBpbiByZXNwb25zZSBcIiVWXCIgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIGtleSBcIiVWXCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmbGluZSwgJnItPnVyaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICZsaW5lLCAmY3R4LT5rZXkpOwogICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX1VQU1RSRUFNX0lOVkFMSURfSEVBREVSOwogICAgICAgICB9CiAKQEAgLTM1Myw3ICszNTgsNyBAQAogCiAgICAgaWYgKG5neF9zdHJjbXAocCwgIkVORFx4MGQiKSA9PSAwKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgImtleTogXCIlVlwiIHdhcyBub3QgZm91bmQgYnkgbWVtY2FjaGVkIiwgJnItPnVyaSk7CisgICAgICAgICAgICAgICAgICAgICAgImtleTogXCIlVlwiIHdhcyBub3QgZm91bmQgYnkgbWVtY2FjaGVkIiwgJmN0eC0+a2V5KTsKIAogICAgICAgICB1LT5oZWFkZXJzX2luLnN0YXR1c19uID0gNDA0OwogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX25vdF9tb2RpZmllZF9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX25vdF9tb2RpZmllZF9maWx0ZXJfbW9kdWxlLmMKaW5kZXggNGE2YmI1Yy4uNmRkOGEzMiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9ub3RfbW9kaWZpZWRfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfbm90X21vZGlmaWVkX2ZpbHRlcl9tb2R1bGUuYwpAQCAtNTIsNyArNTIsNyBAQAogICAgIHRpbWVfdCAgaW1zOwogCiAgICAgaWYgKHItPmhlYWRlcnNfb3V0LnN0YXR1cyAhPSBOR1hfSFRUUF9PSwotICAgICAgICB8fCByLT5tYWluICE9IHIKKyAgICAgICAgfHwgciAhPSByLT5tYWluCiAgICAgICAgIHx8IHItPmhlYWRlcnNfaW4uaWZfbW9kaWZpZWRfc2luY2UgPT0gTlVMTAogICAgICAgICB8fCByLT5oZWFkZXJzX291dC5sYXN0X21vZGlmaWVkX3RpbWUgPT0gLTEpCiAgICAgewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yYW5nZV9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JhbmdlX2ZpbHRlcl9tb2R1bGUuYwppbmRleCA3YjIxZWFlLi5hNzZiNjdhIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JhbmdlX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JhbmdlX2ZpbHRlcl9tb2R1bGUuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAKICAgICBpZiAoci0+aHR0cF92ZXJzaW9uIDwgTkdYX0hUVFBfVkVSU0lPTl8xMAogICAgICAgICB8fCByLT5oZWFkZXJzX291dC5zdGF0dXMgIT0gTkdYX0hUVFBfT0sKLSAgICAgICAgfHwgci0+bWFpbiAhPSByCisgICAgICAgIHx8IHIgIT0gci0+bWFpbgogICAgICAgICB8fCByLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aF9uID09IC0xCiAgICAgICAgIHx8ICFyLT5hbGxvd19yYW5nZXMpCiAgICAgewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZS5jCmluZGV4IGM5ODRmN2UuLjE4ZTg3MjkgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzaV9maWx0ZXJfbW9kdWxlLmMKQEAgLTgsOTQgKzgsMzEgQEAKICNpbmNsdWRlIDxuZ3hfY29yZS5oPgogI2luY2x1ZGUgPG5neF9odHRwLmg+CiAKLSNkZWZpbmUgTkdYX0hUVFBfU1NJX01BWF9QQVJBTVMgICAgIDE2Ci0KLSNkZWZpbmUgTkdYX0hUVFBfU1NJX0NPTU1BTkRfTEVOICAgIDMxCi0jZGVmaW5lIE5HWF9IVFRQX1NTSV9QQVJBTV9MRU4gICAgICAzMQotI2RlZmluZSBOR1hfSFRUUF9TU0lfUEFSQU1TX04gICAgICAgNAotCiAjZGVmaW5lIE5HWF9IVFRQX1NTSV9FUlJPUiAgICAgICAgICAxCiAKICNkZWZpbmUgTkdYX0hUVFBfU1NJX0RBVEVfTEVOICAgICAgIDIwNDgKIAotCiAjZGVmaW5lIE5HWF9IVFRQX1NTSV9BRERfUFJFRklYICAgICAxCiAKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIG5neF9mbGFnX3QgICAgICAgIGVuYWJsZTsKLSAgICBuZ3hfZmxhZ190ICAgICAgICBzaWxlbnRfZXJyb3JzOwotICAgIG5neF9mbGFnX3QgICAgICAgIGlnbm9yZV9yZWN5Y2xlZF9idWZmZXJzOworICAgIG5neF9mbGFnX3QgICAgZW5hYmxlOworICAgIG5neF9mbGFnX3QgICAgc2lsZW50X2Vycm9yczsKKyAgICBuZ3hfZmxhZ190ICAgIGlnbm9yZV9yZWN5Y2xlZF9idWZmZXJzOwogCi0gICAgbmd4X2FycmF5X3QgICAgICAqdHlwZXM7ICAgICAvKiBhcnJheSBvZiBuZ3hfc3RyX3QgKi8KKyAgICBuZ3hfYXJyYXlfdCAgKnR5cGVzOyAgICAgLyogYXJyYXkgb2Ygbmd4X3N0cl90ICovCiAKLSAgICBzaXplX3QgICAgICAgICAgICBtaW5fZmlsZV9jaHVuazsKLSAgICBzaXplX3QgICAgICAgICAgICB2YWx1ZV9sZW47Ci19IG5neF9odHRwX3NzaV9jb25mX3Q7CisgICAgc2l6ZV90ICAgICAgICBtaW5fZmlsZV9jaHVuazsKKyAgICBzaXplX3QgICAgICAgIHZhbHVlX2xlbjsKK30gbmd4X2h0dHBfc3NpX2xvY19jb25mX3Q7CiAKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIG5neF9zdHJfdCAgICAgICAgICBuYW1lOwotICAgIG5neF9zdHJfdCAgICAgICAgICB2YWx1ZTsKKyAgICBuZ3hfc3RyX3QgICAgIG5hbWU7CisgICAgbmd4X3N0cl90ICAgICB2YWx1ZTsKIH0gbmd4X2h0dHBfc3NpX3Zhcl90OwogCiAKLXR5cGVkZWYgc3RydWN0IHsKLSAgICBuZ3hfYnVmX3QgICAgICAgICAqYnVmOwotCi0gICAgdV9jaGFyICAgICAgICAgICAgKnBvczsKLSAgICB1X2NoYXIgICAgICAgICAgICAqY29weV9zdGFydDsKLSAgICB1X2NoYXIgICAgICAgICAgICAqY29weV9lbmQ7Ci0KLSAgICBuZ3hfc3RyX3QgICAgICAgICAgY29tbWFuZDsKLSAgICBuZ3hfYXJyYXlfdCAgICAgICAgcGFyYW1zOwotICAgIG5neF90YWJsZV9lbHRfdCAgICpwYXJhbTsKLSAgICBuZ3hfdGFibGVfZWx0X3QgICAgcGFyYW1zX2FycmF5W05HWF9IVFRQX1NTSV9QQVJBTVNfTl07Ci0KLSAgICBuZ3hfY2hhaW5fdCAgICAgICAqaW47Ci0gICAgbmd4X2NoYWluX3QgICAgICAgKm91dDsKLSAgICBuZ3hfY2hhaW5fdCAgICAgICoqbGFzdF9vdXQ7Ci0gICAgbmd4X2NoYWluX3QgICAgICAgKmJ1c3k7Ci0gICAgbmd4X2NoYWluX3QgICAgICAgKmZyZWU7Ci0KLSAgICBuZ3hfdWludF90ICAgICAgICAgc3RhdGU7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgIHNhdmVkX3N0YXRlOwotICAgIHNpemVfdCAgICAgICAgICAgICBzYXZlZDsKLSAgICBzaXplX3QgICAgICAgICAgICAgbG9va2VkOwotCi0gICAgc2l6ZV90ICAgICAgICAgICAgIHZhbHVlX2xlbjsKLQotICAgIG5neF9hcnJheV90ICAgICAgICB2YXJpYWJsZXM7Ci0KLSAgICBuZ3hfdWludF90ICAgICAgICAgb3V0cHV0OyAgICAgICAgLyogdW5zaWduZWQgIG91dHB1dDoxOyAqLwotCi0gICAgbmd4X3N0cl90ICAgICAgICAgIHRpbWVmbXQ7Ci0gICAgbmd4X3N0cl90ICAgICAgICAgIGVycm1zZzsKLX0gbmd4X2h0dHBfc3NpX2N0eF90OwotCi0KLXR5cGVkZWYgbmd4X2ludF90ICgqbmd4X2h0dHBfc3NpX2NvbW1hbmRfcHQpIChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCi0gICAgbmd4X2h0dHBfc3NpX2N0eF90ICpjdHgsIG5neF9zdHJfdCAqKik7Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgbmFtZTsKLSAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgIGluZGV4OwotCi0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICBtYW5kYXRvcnk7Ci19IG5neF9odHRwX3NzaV9wYXJhbV90OwotCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgIG5hbWU7Ci0gICAgbmd4X2h0dHBfc3NpX2NvbW1hbmRfcHQgICBoYW5kbGVyOwotICAgIG5neF9odHRwX3NzaV9wYXJhbV90ICAgICAqcGFyYW1zOwotCi0gICAgdW5zaWduZWQgICAgICAgICAgICAgICAgICBjb25kaXRpb25hbDoxOwotICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgZmx1c2g6MTsKLX0gbmd4X2h0dHBfc3NpX2NvbW1hbmRfdDsKLQotCiB0eXBlZGVmIGVudW0gewogICAgIHNzaV9zdGFydF9zdGF0ZSA9IDAsCiAgICAgc3NpX3RhZ19zdGF0ZSwKQEAgLTE0OSw3ICs4Niw5IEBACiAKIHN0YXRpYyBjaGFyICpuZ3hfaHR0cF9zc2lfdHlwZXMobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZik7CiAKLXN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfc3NpX2FkZF92YXJpYWJsZXMobmd4X2NvbmZfdCAqY2YpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9zc2lfcHJlY29uZmlndXJhdGlvbihuZ3hfY29uZl90ICpjZik7CitzdGF0aWMgdm9pZCAqbmd4X2h0dHBfc3NpX2NyZWF0ZV9tYWluX2NvbmYobmd4X2NvbmZfdCAqY2YpOworc3RhdGljIGNoYXIgKm5neF9odHRwX3NzaV9pbml0X21haW5fY29uZihuZ3hfY29uZl90ICpjZiwgdm9pZCAqY29uZik7CiBzdGF0aWMgdm9pZCAqbmd4X2h0dHBfc3NpX2NyZWF0ZV9jb25mKG5neF9jb25mX3QgKmNmKTsKIHN0YXRpYyBjaGFyICpuZ3hfaHR0cF9zc2lfbWVyZ2VfY29uZihuZ3hfY29uZl90ICpjZiwKICAgICB2b2lkICpwYXJlbnQsIHZvaWQgKmNoaWxkKTsKQEAgLTE2MiwzNSArMTAxLDM1IEBACiAgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfRkxBRywKICAgICAgIG5neF9jb25mX3NldF9mbGFnX3Nsb3QsCiAgICAgICBOR1hfSFRUUF9MT0NfQ09ORl9PRkZTRVQsCi0gICAgICBvZmZzZXRvZihuZ3hfaHR0cF9zc2lfY29uZl90LCBlbmFibGUpLAorICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfc3NpX2xvY19jb25mX3QsIGVuYWJsZSksCiAgICAgICBOVUxMIH0sCiAKICAgICB7IG5neF9zdHJpbmcoInNzaV9zaWxlbnRfZXJyb3JzIiksCiAgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfRkxBRywKICAgICAgIG5neF9jb25mX3NldF9mbGFnX3Nsb3QsCiAgICAgICBOR1hfSFRUUF9MT0NfQ09ORl9PRkZTRVQsCi0gICAgICBvZmZzZXRvZihuZ3hfaHR0cF9zc2lfY29uZl90LCBzaWxlbnRfZXJyb3JzKSwKKyAgICAgIG9mZnNldG9mKG5neF9odHRwX3NzaV9sb2NfY29uZl90LCBzaWxlbnRfZXJyb3JzKSwKICAgICAgIE5VTEwgfSwKIAogICAgIHsgbmd4X3N0cmluZygic3NpX2lnbm9yZV9yZWN5Y2xlZF9idWZmZXJzIiksCiAgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfRkxBRywKICAgICAgIG5neF9jb25mX3NldF9mbGFnX3Nsb3QsCiAgICAgICBOR1hfSFRUUF9MT0NfQ09ORl9PRkZTRVQsCi0gICAgICBvZmZzZXRvZihuZ3hfaHR0cF9zc2lfY29uZl90LCBpZ25vcmVfcmVjeWNsZWRfYnVmZmVycyksCisgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9zc2lfbG9jX2NvbmZfdCwgaWdub3JlX3JlY3ljbGVkX2J1ZmZlcnMpLAogICAgICAgTlVMTCB9LAogCiAgICAgeyBuZ3hfc3RyaW5nKCJzc2lfbWluX2ZpbGVfY2h1bmsiKSwKICAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9GTEFHLAogICAgICAgbmd4X2NvbmZfc2V0X3NpemVfc2xvdCwKICAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKLSAgICAgIG9mZnNldG9mKG5neF9odHRwX3NzaV9jb25mX3QsIG1pbl9maWxlX2NodW5rKSwKKyAgICAgIG9mZnNldG9mKG5neF9odHRwX3NzaV9sb2NfY29uZl90LCBtaW5fZmlsZV9jaHVuayksCiAgICAgICBOVUxMIH0sCiAKICAgICB7IG5neF9zdHJpbmcoInNzaV92YWx1ZV9sZW5ndGgiKSwKICAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9GTEFHLAogICAgICAgbmd4X2NvbmZfc2V0X3NpemVfc2xvdCwKICAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKLSAgICAgIG9mZnNldG9mKG5neF9odHRwX3NzaV9jb25mX3QsIHZhbHVlX2xlbiksCisgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9zc2lfbG9jX2NvbmZfdCwgdmFsdWVfbGVuKSwKICAgICAgIE5VTEwgfSwKIAogICAgIHsgbmd4X3N0cmluZygic3NpX3R5cGVzIiksCkBAIC0yMDYsMTEgKzE0NSwxMSBAQAogCiAKIHN0YXRpYyBuZ3hfaHR0cF9tb2R1bGVfdCAgbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGVfY3R4ID0gewotICAgIG5neF9odHRwX3NzaV9hZGRfdmFyaWFibGVzLCAgICAgICAgICAgIC8qIHByZWNvbmZpZ3VyYXRpb24gKi8KKyAgICBuZ3hfaHR0cF9zc2lfcHJlY29uZmlndXJhdGlvbiwgICAgICAgICAvKiBwcmVjb25maWd1cmF0aW9uICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9zdGNvbmZpZ3VyYXRpb24gKi8KIAotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNyZWF0ZSBtYWluIGNvbmZpZ3VyYXRpb24gKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1haW4gY29uZmlndXJhdGlvbiAqLworICAgIG5neF9odHRwX3NzaV9jcmVhdGVfbWFpbl9jb25mLCAgICAgICAgIC8qIGNyZWF0ZSBtYWluIGNvbmZpZ3VyYXRpb24gKi8KKyAgICBuZ3hfaHR0cF9zc2lfaW5pdF9tYWluX2NvbmYsICAgICAgICAgICAvKiBpbml0IG1haW4gY29uZmlndXJhdGlvbiAqLwogCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY3JlYXRlIHNlcnZlciBjb25maWd1cmF0aW9uICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWVyZ2Ugc2VydmVyIGNvbmZpZ3VyYXRpb24gKi8KQEAgLTI2MCw0MSArMTk5LDQxIEBACiAKIAogc3RhdGljIG5neF9odHRwX3NzaV9wYXJhbV90ICBuZ3hfaHR0cF9zc2lfaW5jbHVkZV9wYXJhbXNbXSA9IHsKLSAgICB7IG5neF9zdHJpbmcoInZpcnR1YWwiKSwgTkdYX0hUVFBfU1NJX0lOQ0xVREVfVklSVFVBTCwgMCB9LAotICAgIHsgbmd4X3N0cmluZygiZmlsZSIpLCBOR1hfSFRUUF9TU0lfSU5DTFVERV9GSUxFLCAwIH0sCi0gICAgeyBuZ3hfbnVsbF9zdHJpbmcsIDAsIDAgfQorICAgIHsgbmd4X3N0cmluZygidmlydHVhbCIpLCBOR1hfSFRUUF9TU0lfSU5DTFVERV9WSVJUVUFMLCAwLCAwIH0sCisgICAgeyBuZ3hfc3RyaW5nKCJmaWxlIiksIE5HWF9IVFRQX1NTSV9JTkNMVURFX0ZJTEUsIDAsIDAgfSwKKyAgICB7IG5neF9udWxsX3N0cmluZywgMCwgMCwgMCB9CiB9OwogCiAKIHN0YXRpYyBuZ3hfaHR0cF9zc2lfcGFyYW1fdCAgbmd4X2h0dHBfc3NpX2VjaG9fcGFyYW1zW10gPSB7Ci0gICAgeyBuZ3hfc3RyaW5nKCJ2YXIiKSwgTkdYX0hUVFBfU1NJX0VDSE9fVkFSLCAxIH0sCi0gICAgeyBuZ3hfc3RyaW5nKCJkZWZhdWx0IiksIE5HWF9IVFRQX1NTSV9FQ0hPX0RFRkFVTFQsIDAgfSwKLSAgICB7IG5neF9udWxsX3N0cmluZywgMCwgMCB9CisgICAgeyBuZ3hfc3RyaW5nKCJ2YXIiKSwgTkdYX0hUVFBfU1NJX0VDSE9fVkFSLCAxLCAwIH0sCisgICAgeyBuZ3hfc3RyaW5nKCJkZWZhdWx0IiksIE5HWF9IVFRQX1NTSV9FQ0hPX0RFRkFVTFQsIDAsIDAgfSwKKyAgICB7IG5neF9udWxsX3N0cmluZywgMCwgMCwgMCB9CiB9OwogCiAKIHN0YXRpYyBuZ3hfaHR0cF9zc2lfcGFyYW1fdCAgbmd4X2h0dHBfc3NpX2NvbmZpZ19wYXJhbXNbXSA9IHsKLSAgICB7IG5neF9zdHJpbmcoImVycm1zZyIpLCBOR1hfSFRUUF9TU0lfQ09ORklHX0VSUk1TRywgMCB9LAotICAgIHsgbmd4X3N0cmluZygidGltZWZtdCIpLCBOR1hfSFRUUF9TU0lfQ09ORklHX1RJTUVGTVQsIDAgfSwKLSAgICB7IG5neF9udWxsX3N0cmluZywgMCwgMCB9CisgICAgeyBuZ3hfc3RyaW5nKCJlcnJtc2ciKSwgTkdYX0hUVFBfU1NJX0NPTkZJR19FUlJNU0csIDAsIDAgfSwKKyAgICB7IG5neF9zdHJpbmcoInRpbWVmbXQiKSwgTkdYX0hUVFBfU1NJX0NPTkZJR19USU1FRk1ULCAwLCAwIH0sCisgICAgeyBuZ3hfbnVsbF9zdHJpbmcsIDAsIDAsIDAgfQogfTsKIAogCiBzdGF0aWMgbmd4X2h0dHBfc3NpX3BhcmFtX3QgIG5neF9odHRwX3NzaV9zZXRfcGFyYW1zW10gPSB7Ci0gICAgeyBuZ3hfc3RyaW5nKCJ2YXIiKSwgTkdYX0hUVFBfU1NJX1NFVF9WQVIsIDEgfSwKLSAgICB7IG5neF9zdHJpbmcoInZhbHVlIiksIE5HWF9IVFRQX1NTSV9TRVRfVkFMVUUsIDEgfSwKLSAgICB7IG5neF9udWxsX3N0cmluZywgMCwgMCB9CisgICAgeyBuZ3hfc3RyaW5nKCJ2YXIiKSwgTkdYX0hUVFBfU1NJX1NFVF9WQVIsIDEsIDAgfSwKKyAgICB7IG5neF9zdHJpbmcoInZhbHVlIiksIE5HWF9IVFRQX1NTSV9TRVRfVkFMVUUsIDEsIDAgfSwKKyAgICB7IG5neF9udWxsX3N0cmluZywgMCwgMCwgMCB9CiB9OwogCiAKIHN0YXRpYyBuZ3hfaHR0cF9zc2lfcGFyYW1fdCAgbmd4X2h0dHBfc3NpX2lmX3BhcmFtc1tdID0gewotICAgIHsgbmd4X3N0cmluZygiZXhwciIpLCBOR1hfSFRUUF9TU0lfSUZfRVhQUiwgMSB9LAotICAgIHsgbmd4X251bGxfc3RyaW5nLCAwLCAwIH0KKyAgICB7IG5neF9zdHJpbmcoImV4cHIiKSwgTkdYX0hUVFBfU1NJX0lGX0VYUFIsIDEsIDAgfSwKKyAgICB7IG5neF9udWxsX3N0cmluZywgMCwgMCwgMCB9CiB9OwogCiAKIHN0YXRpYyBuZ3hfaHR0cF9zc2lfcGFyYW1fdCAgbmd4X2h0dHBfc3NpX25vX3BhcmFtc1tdID0gewotICAgIHsgbmd4X251bGxfc3RyaW5nLCAwLCAwIH0KKyAgICB7IG5neF9udWxsX3N0cmluZywgMCwgMCwgMCB9CiB9OwogCiAKQEAgLTMzMCwxNCArMjY5LDE0IEBACiBzdGF0aWMgbmd4X2ludF90CiBuZ3hfaHR0cF9zc2lfaGVhZGVyX2ZpbHRlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCiB7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgIGk7Ci0gICAgbmd4X3N0cl90ICAgICAgICAgICAgKnR5cGU7Ci0gICAgbmd4X2h0dHBfc3NpX2N0eF90ICAgKmN0eDsKLSAgICBuZ3hfaHR0cF9zc2lfY29uZl90ICAqY29uZjsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgIGk7CisgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICp0eXBlOworICAgIG5neF9odHRwX3NzaV9jdHhfdCAgICAgICAqY3R4OworICAgIG5neF9odHRwX3NzaV9sb2NfY29uZl90ICAqc2xjZjsKIAotICAgIGNvbmYgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX3NzaV9maWx0ZXJfbW9kdWxlKTsKKyAgICBzbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZSk7CiAKLSAgICBpZiAoIWNvbmYtPmVuYWJsZQorICAgIGlmICghc2xjZi0+ZW5hYmxlCiAgICAgICAgIHx8IHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS5sZW4gPT0gMAogICAgICAgICB8fCByLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aF9uID09IDApCiAgICAgewpAQCAtMzQ1LDggKzI4NCw4IEBACiAgICAgfQogCiAKLSAgICB0eXBlID0gY29uZi0+dHlwZXMtPmVsdHM7Ci0gICAgZm9yIChpID0gMDsgaSA8IGNvbmYtPnR5cGVzLT5uZWx0czsgaSsrKSB7CisgICAgdHlwZSA9IHNsY2YtPnR5cGVzLT5lbHRzOworICAgIGZvciAoaSA9IDA7IGkgPCBzbGNmLT50eXBlcy0+bmVsdHM7IGkrKykgewogICAgICAgICBpZiAoci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLmxlbiA+PSB0eXBlW2ldLmxlbgogICAgICAgICAgICAgJiYgbmd4X3N0cm5jYXNlY21wKHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS5kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVbaV0uZGF0YSwgdHlwZVtpXS5sZW4pID09IDApCkBAIC0zNjgsNyArMzA3LDcgQEAKICAgICBuZ3hfaHR0cF9zZXRfY3R4KHIsIGN0eCwgbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGUpOwogCiAKLSAgICBjdHgtPnZhbHVlX2xlbiA9IGNvbmYtPnZhbHVlX2xlbjsKKyAgICBjdHgtPnZhbHVlX2xlbiA9IHNsY2YtPnZhbHVlX2xlbjsKICAgICBjdHgtPmxhc3Rfb3V0ID0gJmN0eC0+b3V0OwogCiAgICAgY3R4LT5vdXRwdXQgPSAxOwpAQCAtMzg4LDcgKzMyNyw3IEBACiAKICAgICByLT5maWx0ZXJfbmVlZF9pbl9tZW1vcnkgPSAxOwogCi0gICAgaWYgKHItPm1haW4gPT0gcikgeworICAgIGlmIChyID09IHItPm1haW4pIHsKICAgICAgICAgbmd4X2h0dHBfY2xlYXJfY29udGVudF9sZW5ndGgocik7CiAgICAgICAgIG5neF9odHRwX2NsZWFyX2xhc3RfbW9kaWZpZWQocik7CiAgICAgfQpAQCAtNDAwLDE3ICszMzksMTggQEAKIHN0YXRpYyBuZ3hfaW50X3QKIG5neF9odHRwX3NzaV9ib2R5X2ZpbHRlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9jaGFpbl90ICppbikKIHsKLSAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgcmM7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgIGk7Ci0gICAgbmd4X2J1Zl90ICAgICAgICAgICAgICAgKmI7Ci0gICAgbmd4X2NoYWluX3QgICAgICAgICAgICAgKmNsOwotICAgIG5neF90YWJsZV9lbHRfdCAgICAgICAgICpwYXJhbTsKLSAgICBuZ3hfY29ubmVjdGlvbl90ICAgICAgICAqYzsKLSAgICBuZ3hfaHR0cF9zc2lfY3R4X3QgICAgICAqY3R4OwotICAgIG5neF9odHRwX3NzaV9jb25mX3QgICAgICpjb25mOwotICAgIG5neF9odHRwX3NzaV9wYXJhbV90ICAgICpwcm07Ci0gICAgbmd4X2h0dHBfc3NpX2NvbW1hbmRfdCAgKmNtZDsKLSAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAqcGFyYW1zW05HWF9IVFRQX1NTSV9NQVhfUEFSQU1TXTsKKyAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICByYzsKKyAgICBuZ3hfYnVmX3QgICAgICAgICAgICAgICAgICpiOworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIGksIGluZGV4OworICAgIG5neF9jaGFpbl90ICAgICAgICAgICAgICAgKmNsOworICAgIG5neF90YWJsZV9lbHRfdCAgICAgICAgICAgKnBhcmFtOworICAgIG5neF9jb25uZWN0aW9uX3QgICAgICAgICAgKmM7CisgICAgbmd4X2h0dHBfc3NpX2N0eF90ICAgICAgICAqY3R4OworICAgIG5neF9odHRwX3NzaV9wYXJhbV90ICAgICAgKnBybTsKKyAgICBuZ3hfaHR0cF9zc2lfY29tbWFuZF90ICAgICpjbWQ7CisgICAgbmd4X2h0dHBfc3NpX2xvY19jb25mX3QgICAqc2xjZjsKKyAgICBuZ3hfaHR0cF9zc2lfbWFpbl9jb25mX3QgICpzbWNmOworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgKnBhcmFtc1tOR1hfSFRUUF9TU0lfTUFYX1BBUkFNU107CiAKICAgICBjdHggPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2N0eChyLCBuZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZSk7CiAKQEAgLTQyNiw3ICszNjYsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgY29uZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGUpOworICAgIHNsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX3NzaV9maWx0ZXJfbW9kdWxlKTsKIAogICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICJodHRwIHNzaSBmaWx0ZXIgXCIlVlwiIiwgJnItPnVyaSk7CkBAIC01MjgsNyArNDY4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgYi0+cmVjeWNsZWQgPSAwOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChiLT5pbl9maWxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZi0+bWluX2ZpbGVfY2h1bmsgPCAoc2l6ZV90KSAoYi0+bGFzdCAtIGItPnBvcykpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xjZi0+bWluX2ZpbGVfY2h1bmsgPCAoc2l6ZV90KSAoYi0+bGFzdCAtIGItPnBvcykpCiAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYi0+ZmlsZV9sYXN0ID0gYi0+ZmlsZV9wb3MgKyAoYi0+bGFzdCAtIGItPnN0YXJ0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLT5maWxlX3BvcyArPSBiLT5wb3MgLSBiLT5zdGFydDsKQEAgLTU2NSwzNyArNTA1LDM5IEBACiAKICAgICAgICAgICAgIGlmIChyYyA9PSBOR1hfT0spIHsKIAotICAgICAgICAgICAgICAgIGZvciAoY21kID0gbmd4X2h0dHBfc3NpX2NvbW1hbmRzOyBjbWQtPmhhbmRsZXI7IGNtZCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjbWQtPm5hbWUubGVuID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9IChuZ3hfaHR0cF9zc2lfY29tbWFuZF90ICopIGNtZC0+aGFuZGxlcjsKKyAgICAgICAgICAgICAgICBzbWNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9tYWluX2NvbmYociwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX3NzaV9maWx0ZXJfbW9kdWxlKTsKKworICAgICAgICAgICAgICAgIGNtZCA9IG5neF9oYXNoX2ZpbmQoJnNtY2YtPmhhc2gsIGN0eC0+a2V5LCBjdHgtPmNvbW1hbmQuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+Y29tbWFuZC5sZW4pOworCisgICAgICAgICAgICAgICAgaWYgKGNtZCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdHgtPm91dHB1dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBTU0kgY29tbWFuZDogXCIlVlwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0eC0+Y29tbWFuZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHNzaV9lcnJvcjsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGlmIChjbWQtPm5hbWUubGVuICE9IGN0eC0+Y29tbWFuZC5sZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5neF9zdHJuY21wKGNtZC0+bmFtZS5kYXRhLCBjdHgtPmNvbW1hbmQuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+Y29tbWFuZC5sZW4pICE9IDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGNtZC0+bmFtZS5sZW4gPT0gMCAmJiBjdHgtPm91dHB1dCkgewotICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgU1NJIGNvbW1hbmQ6IFwiJVZcIiIsICZjdHgtPmNvbW1hbmQpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIHNzaV9lcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKCFjdHgtPm91dHB1dCAmJiAhY21kLT5jb25kaXRpb25hbCkgewogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgICAgICBpZiAoY3R4LT5wYXJhbXMubmVsdHMgPiBOR1hfSFRUUF9TU0lfTUFYX1BBUkFNUykgeworICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvbyBtYW55IFNTSSBjb21tYW5kIHBhcmFtdGVyczogXCIlVlwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3R4LT5jb21tYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBzc2lfZXJyb3I7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgbmd4X21lbXplcm8ocGFyYW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9IVFRQX1NTSV9NQVhfUEFSQU1TICogc2l6ZW9mKG5neF9zdHJfdCAqKSk7CiAKICAgICAgICAgICAgICAgICBwYXJhbSA9IGN0eC0+cGFyYW1zLmVsdHM7CiAKLQogICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdHgtPnBhcmFtcy5uZWx0czsgaSsrKSB7CiAKICAgICAgICAgICAgICAgICAgICAgZm9yIChwcm0gPSBjbWQtPnBhcmFtczsgcHJtLT5uYW1lLmxlbjsgcHJtKyspIHsKQEAgLTYwNywxNyArNTQ5LDI3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXNbcHJtLT5pbmRleF0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImR1cGxpY2F0ZSBcIiVWXCIgcGFyYW1ldGVyICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBcIiVWXCIgU1NJIGNvbW1hbmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcmFtW2ldLmtleSwgJmN0eC0+Y29tbWFuZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBybS0+bXVsdGlwbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zW3BybS0+aW5kZXhdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdXBsaWNhdGUgXCIlVlwiIHBhcmFtZXRlciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIFwiJVZcIiBTU0kgY29tbWFuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcmFtW2ldLmtleSwgJmN0eC0+Y29tbWFuZCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHNzaV9lcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBzc2lfZXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW3BybS0+aW5kZXhdID0gJnBhcmFtW2ldLnZhbHVlOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1twcm0tPmluZGV4XSA9ICZwYXJhbVtpXS52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW5kZXggPSBwcm0tPmluZGV4OyBwYXJhbXNbaW5kZXhdOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdm9pZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaW5kZXhdID0gJnBhcmFtW2ldLnZhbHVlOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNjczLDcgKzYyNSw3IEBACiAKICAgICBzc2lfZXJyb3I6CiAKLSAgICAgICAgICAgIGlmIChjb25mLT5zaWxlbnRfZXJyb3JzKSB7CisgICAgICAgICAgICBpZiAoc2xjZi0+c2lsZW50X2Vycm9ycykgewogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCkBAIC03MDksNyArNjYxLDYgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChjdHgtPmJ1Zi0+bGFzdF9idWYgfHwgY3R4LT5idWYtPnJlY3ljbGVkKSB7Ci0KICAgICAgICAgICAgIGlmIChiID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBpZiAoY3R4LT5mcmVlKSB7CiAgICAgICAgICAgICAgICAgICAgIGNsID0gY3R4LT5mcmVlOwpAQCAtNzQxLDcgKzY5Miw3IEBACiAgICAgICAgICAgICBiLT5sYXN0X2J1ZiA9IGN0eC0+YnVmLT5sYXN0X2J1ZjsKICAgICAgICAgICAgIGItPnNoYWRvdyA9IGN0eC0+YnVmOwogCi0gICAgICAgICAgICBpZiAoY29uZi0+aWdub3JlX3JlY3ljbGVkX2J1ZmZlcnMgPT0gMCkgIHsKKyAgICAgICAgICAgIGlmIChzbGNmLT5pZ25vcmVfcmVjeWNsZWRfYnVmZmVycyA9PSAwKSAgewogICAgICAgICAgICAgICAgIGItPnJlY3ljbGVkID0gY3R4LT5idWYtPnJlY3ljbGVkOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC05NjksNiArOTIwLDkgQEAKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBjdHgtPmNvbW1hbmQuZGF0YVswXSA9IGNoOworICAgICAgICAgICAgICAgIGN0eC0+a2V5ID0gMDsKKyAgICAgICAgICAgICAgICBjdHgtPmtleSA9IG5neF9oYXNoKGN0eC0+a2V5LCBjaCk7CisKICAgICAgICAgICAgICAgICBjdHgtPnBhcmFtcy5uZWx0cyA9IDA7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBzc2lfY29tbWFuZF9zdGF0ZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTk5MSw2ICs5NDUsNyBAQAogCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGN0eC0+Y29tbWFuZC5kYXRhW2N0eC0+Y29tbWFuZC5sZW4rK10gPSBjaDsKKyAgICAgICAgICAgICAgICBjdHgtPmtleSA9IG5neF9oYXNoKGN0eC0+a2V5LCBjaCk7CiAKICAgICAgICAgICAgICAgICBpZiAoY3R4LT5jb21tYW5kLmxlbiA9PSBOR1hfSFRUUF9TU0lfQ09NTUFORF9MRU4pIHsKICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLApAQCAtMjAzOSwxOCArMTk5NCwxOCBAQAogc3RhdGljIGNoYXIgKgogbmd4X2h0dHBfc3NpX3R5cGVzKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpCiB7Ci0gICAgbmd4X2h0dHBfc3NpX2NvbmZfdCAqc2NmID0gY29uZjsKKyAgICBuZ3hfaHR0cF9zc2lfbG9jX2NvbmZfdCAqc2xjZiA9IGNvbmY7CiAKICAgICBuZ3hfc3RyX3QgICAqdmFsdWUsICp0eXBlOwogICAgIG5neF91aW50X3QgICBpOwogCi0gICAgaWYgKHNjZi0+dHlwZXMgPT0gTlVMTCkgewotICAgICAgICBzY2YtPnR5cGVzID0gbmd4X2FycmF5X2NyZWF0ZShjZi0+cG9vbCwgNCwgc2l6ZW9mKG5neF9zdHJfdCkpOwotICAgICAgICBpZiAoc2NmLT50eXBlcyA9PSBOVUxMKSB7CisgICAgaWYgKHNsY2YtPnR5cGVzID09IE5VTEwpIHsKKyAgICAgICAgc2xjZi0+dHlwZXMgPSBuZ3hfYXJyYXlfY3JlYXRlKGNmLT5wb29sLCA0LCBzaXplb2Yobmd4X3N0cl90KSk7CisgICAgICAgIGlmIChzbGNmLT50eXBlcyA9PSBOVUxMKSB7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgICAgIH0KIAotICAgICAgICB0eXBlID0gbmd4X2FycmF5X3B1c2goc2NmLT50eXBlcyk7CisgICAgICAgIHR5cGUgPSBuZ3hfYXJyYXlfcHVzaChzbGNmLT50eXBlcyk7CiAgICAgICAgIGlmICh0eXBlID09IE5VTEwpIHsKICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICAgICAgfQpAQCAtMjA2Nyw3ICsyMDIyLDcgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgdHlwZSA9IG5neF9hcnJheV9wdXNoKHNjZi0+dHlwZXMpOworICAgICAgICB0eXBlID0gbmd4X2FycmF5X3B1c2goc2xjZi0+dHlwZXMpOwogICAgICAgICBpZiAodHlwZSA9PSBOVUxMKSB7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgICAgIH0KQEAgLTIwODcsOSArMjA0MiwxMiBAQAogCiAKIHN0YXRpYyBuZ3hfaW50X3QKLW5neF9odHRwX3NzaV9hZGRfdmFyaWFibGVzKG5neF9jb25mX3QgKmNmKQorbmd4X2h0dHBfc3NpX3ByZWNvbmZpZ3VyYXRpb24obmd4X2NvbmZfdCAqY2YpCiB7Ci0gICAgbmd4X2h0dHBfdmFyaWFibGVfdCAgKnZhciwgKnY7CisgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgcmM7CisgICAgbmd4X2h0dHBfdmFyaWFibGVfdCAgICAgICAqdmFyLCAqdjsKKyAgICBuZ3hfaHR0cF9zc2lfY29tbWFuZF90ICAgICpjbWQ7CisgICAgbmd4X2h0dHBfc3NpX21haW5fY29uZl90ICAqc21jZjsKIAogICAgIGZvciAodiA9IG5neF9odHRwX3NzaV92YXJzOyB2LT5uYW1lLmxlbjsgdisrKSB7CiAgICAgICAgIHZhciA9IG5neF9odHRwX2FkZF92YXJpYWJsZShjZiwgJnYtPm5hbWUsIHYtPmZsYWdzKTsKQEAgLTIxMDEsMTcgKzIwNTksODIgQEAKICAgICAgICAgdmFyLT5kYXRhID0gdi0+ZGF0YTsKICAgICB9CiAKKyAgICBzbWNmID0gbmd4X2h0dHBfY29uZl9nZXRfbW9kdWxlX21haW5fY29uZihjZiwgbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGUpOworCisgICAgZm9yIChjbWQgPSBuZ3hfaHR0cF9zc2lfY29tbWFuZHM7IGNtZC0+bmFtZS5sZW47IGNtZCsrKSB7CisgICAgICAgIHJjID0gbmd4X2hhc2hfYWRkX2tleSgmc21jZi0+Y29tbWFuZHMsICZjbWQtPm5hbWUsIGNtZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9IQVNIX1JFQURPTkxZX0tFWSk7CisKKyAgICAgICAgaWYgKHJjID09IE5HWF9PSykgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmMgPT0gTkdYX0JVU1kpIHsKKyAgICAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29uZmxpY3RpbmcgU1NJIGNvbW1hbmQgXCIlVlwiIiwgJmNtZC0+bmFtZSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgIH0KKwogICAgIHJldHVybiBOR1hfT0s7CiB9CiAKIAogc3RhdGljIHZvaWQgKgorbmd4X2h0dHBfc3NpX2NyZWF0ZV9tYWluX2NvbmYobmd4X2NvbmZfdCAqY2YpCit7CisgICAgbmd4X2h0dHBfc3NpX21haW5fY29uZl90ICAqc21jZjsKKworICAgIHNtY2YgPSBuZ3hfcGNhbGxvYyhjZi0+cG9vbCwgc2l6ZW9mKG5neF9odHRwX3NzaV9tYWluX2NvbmZfdCkpOworICAgIGlmIChzbWNmID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgIH0KKworICAgIHNtY2YtPmNvbW1hbmRzLnBvb2wgPSBjZi0+cG9vbDsKKyAgICBzbWNmLT5jb21tYW5kcy50ZW1wX3Bvb2wgPSBjZi0+dGVtcF9wb29sOworCisgICAgaWYgKG5neF9oYXNoX2tleXNfYXJyYXlfaW5pdCgmc21jZi0+Y29tbWFuZHMsIE5HWF9IQVNIX1NNQUxMKSAhPSBOR1hfT0spIHsKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgIH0KKworICAgIHJldHVybiBzbWNmOworfQorCisKK3N0YXRpYyBjaGFyICoKK25neF9odHRwX3NzaV9pbml0X21haW5fY29uZihuZ3hfY29uZl90ICpjZiwgdm9pZCAqY29uZikKK3sKKyAgICBuZ3hfaHR0cF9zc2lfbWFpbl9jb25mX3QgKnNtY2YgPSBjb25mOworCisgICAgbmd4X2hhc2hfaW5pdF90ICBoYXNoOworCisgICAgaGFzaC5oYXNoID0gJnNtY2YtPmhhc2g7CisgICAgaGFzaC5rZXkgPSBuZ3hfaGFzaF9rZXk7CisgICAgaGFzaC5tYXhfc2l6ZSA9IDEwMjQ7CisgICAgaGFzaC5idWNrZXRfc2l6ZSA9IG5neF9jYWNoZWxpbmVfc2l6ZTsKKyAgICBoYXNoLm5hbWUgPSAic3NpX2NvbW1hbmRfaGFzaCI7CisgICAgaGFzaC5wb29sID0gY2YtPnBvb2w7CisgICAgaGFzaC50ZW1wX3Bvb2wgPSBOVUxMOworCisgICAgaWYgKG5neF9oYXNoX2luaXQoJmhhc2gsIHNtY2YtPmNvbW1hbmRzLmtleXMuZWx0cywKKyAgICAgICAgICAgICAgICAgICAgICBzbWNmLT5jb21tYW5kcy5rZXlzLm5lbHRzKQorICAgICAgICAhPSBOR1hfT0spCisgICAgeworICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgfQorCisgICAgcmV0dXJuIE5HWF9DT05GX09LOworfQorCisKK3N0YXRpYyB2b2lkICoKIG5neF9odHRwX3NzaV9jcmVhdGVfY29uZihuZ3hfY29uZl90ICpjZikKIHsKLSAgICBuZ3hfaHR0cF9zc2lfY29uZl90ICAqY29uZjsKKyAgICBuZ3hfaHR0cF9zc2lfbG9jX2NvbmZfdCAgKnNsY2Y7CiAKLSAgICBjb25mID0gbmd4X3BjYWxsb2MoY2YtPnBvb2wsIHNpemVvZihuZ3hfaHR0cF9zc2lfY29uZl90KSk7Ci0gICAgaWYgKGNvbmYgPT0gTlVMTCkgeworICAgIHNsY2YgPSBuZ3hfcGNhbGxvYyhjZi0+cG9vbCwgc2l6ZW9mKG5neF9odHRwX3NzaV9sb2NfY29uZl90KSk7CisgICAgaWYgKHNsY2YgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQogCkBAIC0yMTIxLDIyICsyMTQ0LDIyIEBACiAgICAgICogICAgIGNvbmYtPnR5cGVzID0gTlVMTDsKICAgICAgKi8KIAotICAgIGNvbmYtPmVuYWJsZSA9IE5HWF9DT05GX1VOU0VUOwotICAgIGNvbmYtPnNpbGVudF9lcnJvcnMgPSBOR1hfQ09ORl9VTlNFVDsKLSAgICBjb25mLT5pZ25vcmVfcmVjeWNsZWRfYnVmZmVycyA9IE5HWF9DT05GX1VOU0VUOworICAgIHNsY2YtPmVuYWJsZSA9IE5HWF9DT05GX1VOU0VUOworICAgIHNsY2YtPnNpbGVudF9lcnJvcnMgPSBOR1hfQ09ORl9VTlNFVDsKKyAgICBzbGNmLT5pZ25vcmVfcmVjeWNsZWRfYnVmZmVycyA9IE5HWF9DT05GX1VOU0VUOwogCi0gICAgY29uZi0+bWluX2ZpbGVfY2h1bmsgPSBOR1hfQ09ORl9VTlNFVF9TSVpFOwotICAgIGNvbmYtPnZhbHVlX2xlbiA9IE5HWF9DT05GX1VOU0VUX1NJWkU7CisgICAgc2xjZi0+bWluX2ZpbGVfY2h1bmsgPSBOR1hfQ09ORl9VTlNFVF9TSVpFOworICAgIHNsY2YtPnZhbHVlX2xlbiA9IE5HWF9DT05GX1VOU0VUX1NJWkU7CiAKLSAgICByZXR1cm4gY29uZjsKKyAgICByZXR1cm4gc2xjZjsKIH0KIAogCiBzdGF0aWMgY2hhciAqCiBuZ3hfaHR0cF9zc2lfbWVyZ2VfY29uZihuZ3hfY29uZl90ICpjZiwgdm9pZCAqcGFyZW50LCB2b2lkICpjaGlsZCkKIHsKLSAgICBuZ3hfaHR0cF9zc2lfY29uZl90ICpwcmV2ID0gcGFyZW50OwotICAgIG5neF9odHRwX3NzaV9jb25mX3QgKmNvbmYgPSBjaGlsZDsKKyAgICBuZ3hfaHR0cF9zc2lfbG9jX2NvbmZfdCAqcHJldiA9IHBhcmVudDsKKyAgICBuZ3hfaHR0cF9zc2lfbG9jX2NvbmZfdCAqY29uZiA9IGNoaWxkOwogCiAgICAgbmd4X3N0cl90ICAqdHlwZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZS5oIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNzM2NDgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzaV9maWx0ZXJfbW9kdWxlLmgKQEAgLTAsMCArMSw5MCBAQAorCisvKgorICogQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgorICovCisKKworI2lmbmRlZiBfTkdYX0hUVFBfU1NJX0ZJTFRFUl9IX0lOQ0xVREVEXworI2RlZmluZSBfTkdYX0hUVFBfU1NJX0ZJTFRFUl9IX0lOQ0xVREVEXworCisKKyNpbmNsdWRlIDxuZ3hfY29uZmlnLmg+CisjaW5jbHVkZSA8bmd4X2NvcmUuaD4KKyNpbmNsdWRlIDxuZ3hfaHR0cC5oPgorCisKKyNkZWZpbmUgTkdYX0hUVFBfU1NJX01BWF9QQVJBTVMgICAgIDE2CisKKyNkZWZpbmUgTkdYX0hUVFBfU1NJX0NPTU1BTkRfTEVOICAgIDMxCisjZGVmaW5lIE5HWF9IVFRQX1NTSV9QQVJBTV9MRU4gICAgICAzMQorI2RlZmluZSBOR1hfSFRUUF9TU0lfUEFSQU1TX04gICAgICAgNAorCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBuZ3hfaGFzaF90ICAgICAgICAgICAgICAgIGhhc2g7CisgICAgbmd4X2hhc2hfa2V5c19hcnJheXNfdCAgICBjb21tYW5kczsKK30gbmd4X2h0dHBfc3NpX21haW5fY29uZl90OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBuZ3hfYnVmX3QgICAgICAgICAgICAgICAgKmJ1ZjsKKworICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAqcG9zOworICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAqY29weV9zdGFydDsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgKmNvcHlfZW5kOworCisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICBrZXk7CisgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICBjb21tYW5kOworICAgIG5neF9hcnJheV90ICAgICAgICAgICAgICAgcGFyYW1zOworICAgIG5neF90YWJsZV9lbHRfdCAgICAgICAgICAqcGFyYW07CisgICAgbmd4X3RhYmxlX2VsdF90ICAgICAgICAgICBwYXJhbXNfYXJyYXlbTkdYX0hUVFBfU1NJX1BBUkFNU19OXTsKKworICAgIG5neF9jaGFpbl90ICAgICAgICAgICAgICAqaW47CisgICAgbmd4X2NoYWluX3QgICAgICAgICAgICAgICpvdXQ7CisgICAgbmd4X2NoYWluX3QgICAgICAgICAgICAgKipsYXN0X291dDsKKyAgICBuZ3hfY2hhaW5fdCAgICAgICAgICAgICAgKmJ1c3k7CisgICAgbmd4X2NoYWluX3QgICAgICAgICAgICAgICpmcmVlOworCisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICBzdGF0ZTsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgIHNhdmVkX3N0YXRlOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgc2F2ZWQ7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICBsb29rZWQ7CisKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgIHZhbHVlX2xlbjsKKworICAgIG5neF9hcnJheV90ICAgICAgICAgICAgICAgdmFyaWFibGVzOworCisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICBvdXRwdXQ7ICAgICAgICAvKiB1bnNpZ25lZCAgb3V0cHV0OjE7ICovCisKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgIHRpbWVmbXQ7CisgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICBlcnJtc2c7Cit9IG5neF9odHRwX3NzaV9jdHhfdDsKKworCit0eXBlZGVmIG5neF9pbnRfdCAoKm5neF9odHRwX3NzaV9jb21tYW5kX3B0KSAobmd4X2h0dHBfcmVxdWVzdF90ICpyLAorICAgIG5neF9odHRwX3NzaV9jdHhfdCAqY3R4LCBuZ3hfc3RyX3QgKiopOworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgIG5hbWU7CisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICBpbmRleDsKKworICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgbWFuZGF0b3J5OjE7CisgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgICBtdWx0aXBsZToxOworfSBuZ3hfaHR0cF9zc2lfcGFyYW1fdDsKKworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICBuYW1lOworICAgIG5neF9odHRwX3NzaV9jb21tYW5kX3B0ICAgaGFuZGxlcjsKKyAgICBuZ3hfaHR0cF9zc2lfcGFyYW1fdCAgICAgKnBhcmFtczsKKworICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgY29uZGl0aW9uYWw6MTsKKyAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgIGZsdXNoOjE7Cit9IG5neF9odHRwX3NzaV9jb21tYW5kX3Q7CisKKworZXh0ZXJuIG5neF9tb2R1bGVfdCAgbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGU7CisKKworI2VuZGlmIC8qIF9OR1hfSFRUUF9TU0lfRklMVEVSX0hfSU5DTFVERURfICovCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3N0YXRpY19tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdGljX21vZHVsZS5jCmluZGV4IGVkMzYwZmEuLjQyY2M2NzYgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdGljX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdGljX21vZHVsZS5jCkBAIC0yNDQsNyArMjQ0LDcgQEAKICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKICAgICB9CiAKLSAgICBpZiAoci0+bWFpbiAhPSByICYmIG5neF9maWxlX3NpemUoJmZpKSA9PSAwKSB7CisgICAgaWYgKHIgIT0gci0+bWFpbiAmJiBuZ3hfZmlsZV9zaXplKCZmaSkgPT0gMCkgewogICAgICAgICByZXR1cm4gbmd4X2h0dHBfc2VuZF9oZWFkZXIocik7CiAgICAgfQogCkBAIC0yNzIsNyArMjcyLDcgQEAKICAgICBiLT5maWxlX2xhc3QgPSBuZ3hfZmlsZV9zaXplKCZmaSk7CiAKICAgICBiLT5pbl9maWxlID0gYi0+ZmlsZV9sYXN0ID8gMTogMDsKLSAgICBiLT5sYXN0X2J1ZiA9IChyLT5tYWluID09IHIpID8gMTogMDsKKyAgICBiLT5sYXN0X2J1ZiA9IChyID09IHItPm1haW4pID8gMTogMDsKICAgICBiLT5sYXN0X2luX2NoYWluID0gMTsKIAogICAgIGItPmZpbGUtPmZkID0gZmQ7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3VzZXJpZF9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3VzZXJpZF9maWx0ZXJfbW9kdWxlLmMKaW5kZXggMTU5YmQzNC4uYTdjZGEzMiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF91c2VyaWRfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfdXNlcmlkX2ZpbHRlcl9tb2R1bGUuYwpAQCAtMjEzLDcgKzIxMyw3IEBACiAgICAgbmd4X2h0dHBfdXNlcmlkX2N0eF90ICAgKmN0eDsKICAgICBuZ3hfaHR0cF91c2VyaWRfY29uZl90ICAqY29uZjsKIAotICAgIGlmIChyLT5tYWluICE9IHIpIHsKKyAgICBpZiAociAhPSByLT5tYWluKSB7CiAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cC5oIGIvc3JjL2h0dHAvbmd4X2h0dHAuaAppbmRleCBiOWUxMjRkLi5kZjc1ODcwIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cC5oCisrKyBiL3NyYy9odHRwL25neF9odHRwLmgKQEAgLTM4LDYgKzM4LDkgQEAKICNpbmNsdWRlIDxuZ3hfaHR0cF9jb3JlX21vZHVsZS5oPgogI2luY2x1ZGUgPG5neF9odHRwX3NjcmlwdC5oPgogCisjaWYgKE5HWF9IVFRQX1NTSSkKKyNpbmNsdWRlIDxuZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZS5oPgorI2VuZGlmCiAjaWYgKE5HWF9IVFRQX1NTTCkKICNpbmNsdWRlIDxuZ3hfaHR0cF9zc2xfbW9kdWxlLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCmluZGV4IDI2ZDQxYjEuLmRjN2Q5NzIgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwpAQCAtNDY5LDcgKzQ2OSw3IEBACiAgICAgci0+dXJpX2NoYW5nZWQgPSAxOwogICAgIHItPnVyaV9jaGFuZ2VzID0gTkdYX0hUVFBfTUFYX1JFV1JJVEVfQ1lDTEVTICsgMTsKIAotICAgIHItPnBoYXNlID0gKHItPm1haW4gPT0gcikgPyBOR1hfSFRUUF9QT1NUX1JFQURfUEhBU0U6CisgICAgci0+cGhhc2UgPSAociA9PSByLT5tYWluKSA/IE5HWF9IVFRQX1BPU1RfUkVBRF9QSEFTRToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0hUVFBfU0VSVkVSX1JFV1JJVEVfUEhBU0U7CiAgICAgci0+cGhhc2VfaGFuZGxlciA9IDA7CiAKQEAgLTUxNiw3ICs1MTYsNyBAQAogICAgICAgICAgICAgci0+cGhhc2UgPSBOR1hfSFRUUF9GSU5EX0NPTkZJR19QSEFTRTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChyLT5waGFzZSA9PSBOR1hfSFRUUF9BQ0NFU1NfUEhBU0UgJiYgci0+bWFpbiAhPSByKSB7CisgICAgICAgIGlmIChyLT5waGFzZSA9PSBOR1hfSFRUUF9BQ0NFU1NfUEhBU0UgJiYgciAhPSByLT5tYWluKSB7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC0xMjI5LDE4ICsxMjI5LDE5IEBACiAgICAgfQogCiAgICAgc3ItPmludGVybmFsID0gMTsKKyAgICBzci0+ZmFzdF9zdWJyZXF1ZXN0ID0gMTsKIAogICAgIHNyLT5kaXNjYXJkX2JvZHkgPSByLT5kaXNjYXJkX2JvZHk7CiAgICAgc3ItPm1haW5fZmlsdGVyX25lZWRfaW5fbWVtb3J5ID0gci0+bWFpbl9maWx0ZXJfbmVlZF9pbl9tZW1vcnk7CiAKICAgICBuZ3hfaHR0cF9oYW5kbGVyKHNyKTsKIAotI2lmIChOR1hfTE9HX0RFQlVHKQogICAgIGlmICghYy0+ZGVzdHJveWVkKSB7CisgICAgICAgIHNyLT5mYXN0X3N1YnJlcXVlc3QgPSAwOworCiAgICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfSFRUUCwgYy0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCBzdWJyZXF1ZXN0IGRvbmUgXCIlVj8lVlwiIiwgdXJpLCAmc3ItPmFyZ3MpOwogICAgIH0KLSNlbmRpZgogCiAgICAgcmV0dXJuIE5HWF9PSzsKIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2hlYWRlcl9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9oZWFkZXJfZmlsdGVyX21vZHVsZS5jCmluZGV4IGIxNGIzY2YuLmQ4MzVjNDMgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2hlYWRlcl9maWx0ZXJfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfaGVhZGVyX2ZpbHRlcl9tb2R1bGUuYwpAQCAtMTU5LDcgKzE1OSw3IEBACiAgICAgbmd4X3RhYmxlX2VsdF90ICAgICAgICAgICAqaGVhZGVyOwogICAgIG5neF9odHRwX2NvcmVfbG9jX2NvbmZfdCAgKmNsY2Y7CiAKLSAgICBpZiAoci0+bWFpbiAhPSByKSB7CisgICAgaWYgKHIgIT0gci0+bWFpbikgewogICAgICAgICByZXR1cm4gTkdYX09LOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfcG9zdHBvbmVfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfcG9zdHBvbmVfZmlsdGVyX21vZHVsZS5jCmluZGV4IGI5MGQzM2UuLjIwYTc4YTAgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3Bvc3Rwb25lX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9wb3N0cG9uZV9maWx0ZXJfbW9kdWxlLmMKQEAgLTk2LDcgKzk2LDkgQEAKIAogICAgIGlmIChyLT5wb3N0cG9uZWQpIHsKICAgICAgICAgb3V0ID0gci0+cG9zdHBvbmVkLT5vdXQ7Ci0gICAgICAgIHItPnBvc3Rwb25lZCA9IHItPnBvc3Rwb25lZC0+bmV4dDsKKyAgICAgICAgaWYgKG91dCkgeworICAgICAgICAgICAgci0+cG9zdHBvbmVkID0gci0+cG9zdHBvbmVkLT5uZXh0OworICAgICAgICB9CiAKICAgICB9IGVsc2UgewogICAgICAgICBvdXQgPSBpbjsKQEAgLTEwNCw3ICsxMDYsMTAgQEAKIAogICAgIHJjID0gTkdYX09LOwogCi0gICAgaWYgKG91dCB8fCByLT5tYWluLT5vdXQgfHwgci0+bWFpbi0+Y29ubmVjdGlvbi0+YnVmZmVyZWQpIHsKKyAgICBpZiAob3V0CisgICAgICAgIHx8IChyLT5jb25uZWN0aW9uLT5idWZmZXJlZAorICAgICAgICAgICAgJiAoTkdYX0hUVFBfTE9XTEVWRUxfQlVGRkVSRUR8TkdYX0xPV0xFVkVMX0JVRkZFUkVEKSkpCisgICAgewogCiAgICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCBwb3N0cG9uZSBmaWx0ZXIgb3V0IFwiJVY/JVZcIiIsICZyLT51cmksICZyLT5hcmdzKTsKQEAgLTE3MCw2ICsxNzUsMTAgQEAKICAgICAgICAgICAgIHByID0gci0+cG9zdHBvbmVkOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKHByID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgICAgIH0KKwogICAgICAgICBvdXQgPSBwci0+b3V0OwogCiAgICAgICAgIGlmIChvdXQpIHsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwppbmRleCBmMTgyNjMzLi43ZmRkZGUwIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCkBAIC0xNDIzLDcgKzE0MjMsNyBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHItPm1haW4gPT0gcikgeworICAgICAgICBpZiAociA9PSByLT5tYWluKSB7CiAgICAgICAgICAgICBpZiAoci0+Y29ubmVjdGlvbi0+cmVhZC0+dGltZXJfc2V0KSB7CiAgICAgICAgICAgICAgICAgbmd4X2RlbF90aW1lcihyLT5jb25uZWN0aW9uLT5yZWFkKTsKICAgICAgICAgICAgIH0KQEAgLTE0MzgsNyArMTQzOCw3IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoci0+bWFpbiAhPSByIHx8IHJjID09IE5HWF9BR0FJTikgeworICAgIGlmIChyICE9IHItPm1haW4gfHwgcmMgPT0gTkdYX0FHQUlOKSB7CiAgICAgICAgIGlmIChuZ3hfaHR0cF9zZXRfd3JpdGVfaGFuZGxlcihyKSAhPSBOR1hfT0spIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTQ1Myw3ICsxNDUzLDcgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChyLT5tYWluICE9IHIpIHsKKyAgICBpZiAociAhPSByLT5tYWluKSB7CiAKICAgICAgICAgcHIgPSByLT5wYXJlbnQ7CiAKQEAgLTE0NjEsNyArMTQ2MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICJodHRwIHBhcmVudCByZXF1ZXN0OiBcIiVWPyVWXCIiLCAmcHItPnVyaSwgJnByLT5hcmdzKTsKIAogICAgICAgICBpZiAocmMgIT0gTkdYX0FHQUlOKSB7Ci0gICAgICAgICAgICBwci0+Y29ubmVjdGlvbi0+ZGF0YSA9IHByOworICAgICAgICAgICAgci0+Y29ubmVjdGlvbi0+ZGF0YSA9IHByOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHByLT5wb3N0cG9uZWQpIHsKQEAgLTE0NzIsMTIgKzE0NzIsMjIgQEAKIAogICAgICAgICAgICAgaWYgKHJjICE9IE5HWF9BR0FJTiAmJiBwci0+cG9zdHBvbmVkLT5yZXF1ZXN0ID09IHIpIHsKICAgICAgICAgICAgICAgICBwci0+cG9zdHBvbmVkID0gcHItPnBvc3Rwb25lZC0+bmV4dDsKLQotICAgICAgICAgICAgICAgIGlmIChwci0+cG9zdHBvbmVkID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgaWYgKHItPmZhc3Rfc3VicmVxdWVzdCkgeworICAgICAgICAgICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgZmFzdCBzdWJyZXF1ZXN0OiBcIiVWPyVWXCIgZG9uZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmci0+dXJpLCAmci0+YXJncyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwIHdha2UgcGFyZW50IHJlcXVlc3Q6IFwiJVY/JVZcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHItPnVyaSwgJnByLT5hcmdzKTsKKworICAgICAgICAgICAgcHItPndyaXRlX2V2ZW50X2hhbmRsZXIocHIpOworCisjaWYgMAogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCByZXF1ZXN0OiBcIiVWPyVWXCIgc3RpbGwgaGFzIHBvc3Rwb25lZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHItPnVyaSwgJnByLT5hcmdzKTsKQEAgLTE0ODksNiArMTQ5OSw4IEBACiAKICAgICAgICAgICAgICAgICBwci0+d3JpdGVfZXZlbnRfaGFuZGxlcihwcik7CiAgICAgICAgICAgICB9CisjZW5kaWYKKwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ5OCw3ICsxNTEwLDcgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChyLT5vdXQpIHsKKyAgICBpZiAoci0+Y29ubmVjdGlvbi0+YnVmZmVyZWQpIHsKICAgICAgICAgKHZvaWQpIG5neF9odHRwX3NldF93cml0ZV9oYW5kbGVyKHIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTY1NSw3ICsxNjY3LDExIEBACiAgICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9yZXF1ZXN0KHIsIDApOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAociA9PSByLT5tYWluKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICByYyA9IE5HWF9PSzsKICAgICB9CiAKICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIHdldi0+bG9nLCAwLApAQCAtMTY5MSw3ICsxNzA3LDcgQEAKICAgICBzc2l6ZV90ICAgICAgIHNpemU7CiAgICAgbmd4X2V2ZW50X3QgICpyZXY7CiAKLSAgICBpZiAoci0+bWFpbiAhPSByKSB7CisgICAgaWYgKHIgIT0gci0+bWFpbikgewogICAgICAgICByZXR1cm4gTkdYX09LOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oCmluZGV4IGVkNTA4NDMuLjlmNGFlMjEgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaAorKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmgKQEAgLTk5LDYgKzk5LDEzIEBACiAjZGVmaW5lIE5HWF9IVFRQX0dBVEVXQVlfVElNRV9PVVQgICAgICAgICAgNTA0CiAKIAorI2RlZmluZSBOR1hfSFRUUF9MT1dMRVZFTF9CVUZGRVJFRCAgICAgICAgIDB4MDAwMDAwZjAKKyNkZWZpbmUgTkdYX0hUVFBfV1JJVEVfQlVGRkVSRUQgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIE5HWF9IVFRQX0daSVBfQlVGRkVSRUQgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBOR1hfSFRUUF9TU0lfQlVGRkVSRUQgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgTkdYX0hUVFBfQ09QWV9CVUZGRVJFRCAgICAgICAgICAgICAweDAwMDAwMjAwCisKKwogdHlwZWRlZiBlbnVtIHsKICAgICBOR1hfSFRUUF9SRVNUUklDVF9IT1NUX09GRiA9IDAsCiAgICAgTkdYX0hUVFBfUkVTVFJJQ1RfSE9TVF9PTiwKQEAgLTM3OSw2ICszODYsOCBAQAogICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgICB1cmlfY2hhbmdlZDoxOwogICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgICB1cmlfY2hhbmdlczo0OwogCisgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgIGZhc3Rfc3VicmVxdWVzdDoxOworCiAgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd19jYXNlX2V4dGVuOjE7CiAgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcl90aW1lb3V0X3NldDoxOwogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9zcGVjaWFsX3Jlc3BvbnNlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9zcGVjaWFsX3Jlc3BvbnNlLmMKaW5kZXggZjRhZDFhNy4uNjNhM2EzNCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfc3BlY2lhbF9yZXNwb25zZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3NwZWNpYWxfcmVzcG9uc2UuYwpAQCAtNDQ3LDcgKzQ0Nyw3IEBACiAgICAgICAgIGNsLT5idWYgPSBiOwogICAgIH0KIAotICAgIGlmIChyLT5tYWluID09IHIpIHsKKyAgICBpZiAociA9PSByLT5tYWluKSB7CiAgICAgICAgIGItPmxhc3RfYnVmID0gMTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCmluZGV4IGNkZjlhMDcuLjNjM2E5ZTYgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYwpAQCAtNTU4LDcgKzU1OCw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoci0+cmVxdWVzdF9ib2R5ICYmIHItPnJlcXVlc3RfYm9keS0+dGVtcF9maWxlICYmIHItPm1haW4gPT0gcikgeworICAgIGlmIChyLT5yZXF1ZXN0X2JvZHkgJiYgci0+cmVxdWVzdF9ib2R5LT50ZW1wX2ZpbGUgJiYgciA9PSByLT5tYWluKSB7CiAKICAgICAgICAgLyoKICAgICAgICAgICogdGhlIHItPnJlcXVlc3RfYm9keS0+YnVmIGNhbiBiZSByZXVzZWQgZm9yIG9uZSByZXF1ZXN0IG9ubHksCkBAIC02OTUsNyArNjk1LDcgQEAKICAgICAvKiByZWluaXQgdGhlIHN1YnJlcXVlc3QncyBuZ3hfb3V0cHV0X2NoYWluKCkgY29udGV4dCAqLwogCiAgICAgaWYgKHItPnJlcXVlc3RfYm9keSAmJiByLT5yZXF1ZXN0X2JvZHktPnRlbXBfZmlsZQotICAgICAgICAmJiByLT5tYWluICE9IHIgJiYgdS0+b3V0cHV0LmJ1ZikKKyAgICAgICAgJiYgciAhPSByLT5tYWluICYmIHUtPm91dHB1dC5idWYpCiAgICAgewogICAgICAgICB1LT5vdXRwdXQuZnJlZSA9IG5neF9hbGxvY19jaGFpbl9saW5rKHItPnBvb2wpOwogICAgICAgICBpZiAodS0+b3V0cHV0LmZyZWUgPT0gTlVMTCkgewpAQCAtMTAzMSwxMiArMTAzMSwyMCBAQAogI2VuZGlmCiAgICAgfQogCi0gICAgaWYgKHUtPmhlYWRlcnNfaW4uc3RhdHVzX24gPT0gTkdYX0hUVFBfTk9UX0ZPVU5ECi0gICAgICAgICYmIHUtPnBlZXIudHJpZXMgPiAxCi0gICAgICAgICYmIHUtPmNvbmYtPm5leHRfdXBzdHJlYW0gJiBOR1hfSFRUUF9VUFNUUkVBTV9GVF9IVFRQXzQwNCkKLSAgICB7Ci0gICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX25leHQociwgdSwgTkdYX0hUVFBfVVBTVFJFQU1fRlRfSFRUUF80MDQpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKHUtPmhlYWRlcnNfaW4uc3RhdHVzX24gPT0gTkdYX0hUVFBfTk9UX0ZPVU5EKSB7CisKKyAgICAgICAgaWYgKHUtPnBlZXIudHJpZXMgPiAxCisgICAgICAgICAgICAmJiB1LT5jb25mLT5uZXh0X3Vwc3RyZWFtICYgTkdYX0hUVFBfVVBTVFJFQU1fRlRfSFRUUF80MDQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX25leHQociwgdSwgTkdYX0hUVFBfVVBTVFJFQU1fRlRfSFRUUF80MDQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHUtPmNvbmYtPnJlZGlyZWN0XzQwNCkgeworICAgICAgICAgICAgcmMgPSAoci0+ZXJyX2N0eCA9PSBOVUxMKSA/IDQwNCA6IDIwNDsKKyAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX2ZpbmFsaXplX3JlcXVlc3QociwgdSwgcmMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQogCiAKQEAgLTEwNDQsMTMgKzEwNTIsNiBAQAogICAgICAgICAmJiB1LT5jb25mLT5yZWRpcmVjdF9lcnJvcnMKICAgICAgICAgJiYgci0+ZXJyX2N0eCA9PSBOVUxMKQogICAgIHsKLSAgICAgICAgaWYgKHUtPmhlYWRlcnNfaW4uc3RhdHVzX24gPT0gTkdYX0hUVFBfTk9UX0ZPVU5ECi0gICAgICAgICAgICAmJiB1LT5jb25mLT5yZWRpcmVjdF80MDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX2ZpbmFsaXplX3JlcXVlc3QociwgdSwgNDA0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCiAgICAgICAgIGNsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKIAogICAgICAgICBpZiAoY2xjZi0+ZXJyb3JfcGFnZXMpIHsKQEAgLTE5NDcsNyArMTk0OCw3IEBACiAKICAgICByLT5jb25uZWN0aW9uLT5sb2ctPmFjdGlvbiA9ICJzZW5kaW5nIHRvIGNsaWVudCI7CiAKLSAgICBpZiAocmMgPT0gMCAmJiByLT5tYWluID09IHIpIHsKKyAgICBpZiAocmMgPT0gMCAmJiByID09IHItPm1haW4pIHsKICAgICAgICAgcmMgPSBuZ3hfaHR0cF9zZW5kX3NwZWNpYWwociwgTkdYX0hUVFBfTEFTVCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF93cml0ZV9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF93cml0ZV9maWx0ZXJfbW9kdWxlLmMKaW5kZXggYzRkMGEwZS4uMzBmMWE3MiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfd3JpdGVfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3dyaXRlX2ZpbHRlcl9tb2R1bGUuYwpAQCAtMTc5LDIwICsxNzksMjQgQEAKICAgICB9CiAKICAgICBpZiAoYy0+d3JpdGUtPmRlbGF5ZWQpIHsKKyAgICAgICAgYy0+YnVmZmVyZWQgfD0gTkdYX0hUVFBfV1JJVEVfQlVGRkVSRUQ7CiAgICAgICAgIHJldHVybiBOR1hfQUdBSU47CiAgICAgfQogCi0gICAgaWYgKHNpemUgPT0gMCAmJiAhYy0+YnVmZmVyZWQpIHsKKyAgICBpZiAoc2l6ZSA9PSAwICYmICEoYy0+YnVmZmVyZWQgJiBOR1hfTE9XTEVWRUxfQlVGRkVSRUQpKSB7CiAgICAgICAgIGlmIChsYXN0KSB7CiAgICAgICAgICAgICByLT5vdXQgPSBOVUxMOworICAgICAgICAgICAgYy0+YnVmZmVyZWQgJj0gfk5HWF9IVFRQX1dSSVRFX0JVRkZFUkVEOworCiAgICAgICAgICAgICByZXR1cm4gTkdYX09LOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGZsdXNoKSB7CiAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgci0+b3V0ID0gci0+b3V0LT5uZXh0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hpbGUgKHItPm91dCk7CisgICAgICAgICAgICB9IHdoaWxlIChyLT5vdXQpOworCisgICAgICAgICAgICBjLT5idWZmZXJlZCAmPSB+TkdYX0hUVFBfV1JJVEVfQlVGRkVSRUQ7CiAKICAgICAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgICAgIH0KQEAgLTIzMiw3ICsyMzYsMTQgQEAKIAogICAgIHItPm91dCA9IGNoYWluOwogCi0gICAgaWYgKGNoYWluIHx8IChjLT5idWZmZXJlZCAmJiByLT5wb3N0cG9uZWQgPT0gTlVMTCkpIHsKKyAgICBpZiAoY2hhaW4pIHsKKyAgICAgICAgYy0+YnVmZmVyZWQgfD0gTkdYX0hUVFBfV1JJVEVfQlVGRkVSRUQ7CisgICAgICAgIHJldHVybiBOR1hfQUdBSU47CisgICAgfQorCisgICAgYy0+YnVmZmVyZWQgJj0gfk5HWF9IVFRQX1dSSVRFX0JVRkZFUkVEOworCisgICAgaWYgKChjLT5idWZmZXJlZCAmIE5HWF9MT1dMRVZFTF9CVUZGRVJFRCkgJiYgci0+cG9zdHBvbmVkID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5HWF9BR0FJTjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9mcmVlYnNkX3NlbmRmaWxlX2NoYWluLmMgYi9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZF9zZW5kZmlsZV9jaGFpbi5jCmluZGV4IDdhZTU5NDguLjk3Zjk2OGMgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9mcmVlYnNkX3NlbmRmaWxlX2NoYWluLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2Rfc2VuZGZpbGVfY2hhaW4uYwpAQCAtMjgsOCArMjgsMTMgQEAKICAqLwogCiAKLSNkZWZpbmUgTkdYX0hFQURFUlMgICA4Ci0jZGVmaW5lIE5HWF9UUkFJTEVSUyAgOAorI2lmIChJT1ZfTUFYID4gNjQpCisjZGVmaW5lIE5HWF9IRUFERVJTICAgNjQKKyNkZWZpbmUgTkdYX1RSQUlMRVJTICA2NAorI2Vsc2UKKyNkZWZpbmUgTkdYX0hFQURFUlMgICBJT1ZfTUFYCisjZGVmaW5lIE5HWF9UUkFJTEVSUyAgSU9WX01BWAorI2VuZGlmCiAKIAogbmd4X2NoYWluX3QgKgpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2xpbnV4X3NlbmRmaWxlX2NoYWluLmMgYi9zcmMvb3MvdW5peC9uZ3hfbGludXhfc2VuZGZpbGVfY2hhaW4uYwppbmRleCAyMjVmOWUxLi5mYjk5NTc3IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfbGludXhfc2VuZGZpbGVfY2hhaW4uYworKysgYi9zcmMvb3MvdW5peC9uZ3hfbGludXhfc2VuZGZpbGVfY2hhaW4uYwpAQCAtMjAsNyArMjAsMTEgQEAKICAqLwogCiAKLSNkZWZpbmUgTkdYX0hFQURFUlMgICA4CisjaWYgKElPVl9NQVggPiA2NCkKKyNkZWZpbmUgTkdYX0hFQURFUlMgIDY0CisjZWxzZQorI2RlZmluZSBOR1hfSEVBREVSUyAgSU9WX01BWAorI2VuZGlmCiAKIAogbmd4X2NoYWluX3QgKgpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3NvbGFyaXNfc2VuZGZpbGV2X2NoYWluLmMgYi9zcmMvb3MvdW5peC9uZ3hfc29sYXJpc19zZW5kZmlsZXZfY2hhaW4uYwppbmRleCAxZWQ3MjM5Li5lYmNjYWU4IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfc29sYXJpc19zZW5kZmlsZXZfY2hhaW4uYworKysgYi9zcmMvb3MvdW5peC9uZ3hfc29sYXJpc19zZW5kZmlsZXZfY2hhaW4uYwpAQCAtMzEsNyArMzEsMTIgQEAKICNlbmRpZgogCiAKLSNkZWZpbmUgTkdYX1NFTkRGSUxFVkVDUyAgIDE2CisjaWYgKElPVl9NQVggPiA2NCkKKyNkZWZpbmUgTkdYX1NFTkRGSUxFVkVDUyAgNjQKKyNlbHNlCisjZGVmaW5lIE5HWF9TRU5ERklMRVZFQ1MgIElPVl9NQVgKKyNlbmRpZgorCiAKIAogbmd4X2NoYWluX3QgKgpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3dyaXRldl9jaGFpbi5jIGIvc3JjL29zL3VuaXgvbmd4X3dyaXRldl9jaGFpbi5jCmluZGV4IGY5NWMyY2EuLmM4ZWI0ODIgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF93cml0ZXZfY2hhaW4uYworKysgYi9zcmMvb3MvdW5peC9uZ3hfd3JpdGV2X2NoYWluLmMKQEAgLTksNyArOSwxMSBAQAogI2luY2x1ZGUgPG5neF9ldmVudC5oPgogCiAKLSNkZWZpbmUgTkdYX0lPVlMgIDE2CisjaWYgKElPVl9NQVggPiA2NCkKKyNkZWZpbmUgTkdYX0lPVlMgIDY0CisjZWxzZQorI2RlZmluZSBOR1hfSU9WUyAgSU9WX01BWAorI2VuZGlmCiAKIAogbmd4X2NoYWluX3QgKgo=